/**
 * Settings - Animations
 * Standard sets of animation variables and mappings to be of use across the site, for consistency and accuracy.
 *
 * - 01 - Transitions
 */
/*------------------------------------*\
  01 - Transitions
\*------------------------------------*/
/**
 * Settings - Breakpoints
 * - 01 - Mapping
 */
/*------------------------------------*\
  01 - Mapping
  Default mapping of grid breakpoints, which is used in the function and mixin breakpoint files. An example of using
  breakpoints in a file is by using the mixin with the name of a breakpoint: `@include bp-min(small) {}`.

  These breakpoints may be altered depending on the theme needs.
\*------------------------------------*/
/**
 * Settings - Color
 * Standard sets of color variables and mappings to be of use across the site, for consistency and accuracy.
 *
 * - 01 - Theme Colors
 * - 02 - Grayscale
 * - 03 - Utilities
 * - 04 - Mapping
 */
/*------------------------------------*\
  01 - Theme Colors
\*------------------------------------*/
/*------------------------------------*\
  02 - Grayscale
\*------------------------------------*/
/*------------------------------------*\
  03 - Utilities
\*------------------------------------*/
/*------------------------------------*\
  04 - Mapping
\*------------------------------------*/
/**
 * Settings - Layout
 * Standard sets of layout variables and mappings to be of use across the site, for consistency and accuracy.
 *
 * - 01 - Grid
 * - 02 - Widths
 * - 03 - Layers
 */
/*------------------------------------*\
  01 - Grid
\*------------------------------------*/
/*------------------------------------*\
  01 - Widths
  // 'xxlarge':  1920px,
  // 'xlarge':   1440px,
  // 'large':    1280px,
  // 'medium':   960px,
  // 'small':    768px,
  // 'xsmall':   640px,
  // 'xxsmall':  480px,
\*------------------------------------*/
/*------------------------------------*\
  03 - Layers
\*------------------------------------*/
/**
 * Settings - Typography
 * Standard sets of typographical variables and mappings to be of use across the site, for consistency and accuracy.
 *
 * - 01 - Heading Sizes
 * - 02 - Line Heights
 */
/*------------------------------------*\
  01 - Heading Sizes
\*------------------------------------*/
/*------------------------------------*\
  01 - Line Heights
\*------------------------------------*/
/**
 * Partials Combined
 * Partials can be imported into theme files either one by one, or by using this combined Partials file. To use this
 * file as the import statement, `@use '[path]/partials/partials' as *`.
 *
 * - 01 - Settings
 * - 02 - Functions
 * - 03 - Mixins
 */
/*------------------------------------*\
  01 - Settings
\*------------------------------------*/
/**
 * Functions - Animations
 * Simple functions to help developers easily grab pre-defined animation values from mapping lists.
 *
 * - 01 - Imports
 * - 02 - Transition
 */
/*------------------------------------*\
  01 - Imports
\*------------------------------------*/
/*------------------------------------*\
  02 - Transition
  Easy to use function to quickly define a transition with the ability to reference a library mapping of bezier-curve
  animations, as defined in `partials/settings/_animations.scss`.
  - @param $argument: Style arguments that this transition should be applied to.
  - @param $duration: The length of time the transition should take place.
  - @param $style: The style of transition, as defined in `partials/settings/_animations.scss`
  - @example = transition: transition(all, 0.6s, easeInOutSine)
\*------------------------------------*/
/**
 * Functions - Breakpoints
 * Breakpoint viewport sizes and media queries. Breakpoints are defined as a map of (name: minimum width), order from
 * xsmall to xlarge: (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px). The map defined in the `$grid-breakpoints`
 * global variable is used as the `$breakpoints` argument by default.
 *
 * - 01 - Breakpoint Next
 * - 02 - Breakpoint Minimum
 * - 03 - Breakpoint Maximum
 * - 04 - Breakpoint Infix
 */
/*------------------------------------*\
  01 - Breakpoint Next
  Name of the next breakpoint, or null for the last breakpoint.
  - @param $name: Selected breakpoint name as defined in partials/settings/_breakpoints.scss
  - @param $breakpoints: Breakpoints mapping values as defined in partials/settings/_breakpoints.scss
  - @param $breakpoint-names: Breakpoints mapping names as defined in partials/settings/_breakpoints.scss
\*------------------------------------*/
/*------------------------------------*\
  02 - Breakpoint Minimum
  Minimum breakpoint width. Null for the smallest (first) breakpoint.
  - @param $name: Selected breakpoint name as defined in partials/settings/_breakpoints.scss
  - @param $breakpoints: Breakpoints mapping values as defined in partials/settings/_breakpoints.scss
\*------------------------------------*/
/*------------------------------------*\
  03 - Breakpoint Maximum
  The maximum value is reduced by 0.02px to work around the limitations of `min-` and `max-` prefixes and viewports
  with fractional widths. See https://www.w3.org/TR/mediaqueries-4/#mq-min-max. Uses 0.02px rather than 0.01px to work
  around a current rounding bug in Safari. See https://bugs.webkit.org/show_bug.cgi?id=178261
  - @param $name: Selected breakpoint name as defined in partials/settings/_breakpoints.scss
  - @param $breakpoints: Breakpoints mapping values as defined in partials/settings/_breakpoints.scss
\*------------------------------------*/
/*------------------------------------*\
  04 - Breakpoint Infix
  Returns a blank string if smallest breakpoint, otherwise returns the name with a dash in front. Useful for making
  responsive utilities.
  - @param $name: Selected breakpoint name as defined in partials/settings/_breakpoints.scss
  - @param $breakpoints: Breakpoints mapping values as defined in partials/settings/_breakpoints.scss
\*------------------------------------*/
/**
 * Functions - Calculations
 * Simple functions to help developers calculate different values from percentages to sizing such as REMs.
 *
 * - 01 - Imports
 * - 02 - Target/Container Percentage
 * - 03 - REMs
 */
/*------------------------------------*\
  01 - Imports
\*------------------------------------*/
/*------------------------------------*\
  02 - Target/Container Percentage
  Calculate the percentage of a target size compared to a container size.
  - @param $target: Size of an element needing a calculated percentage.
  - @param $container: Size of the target's container, needed to calculate percentage.
  - @example = width: calc-percent(250, 1000);
\*------------------------------------*/
/*------------------------------------*\
  03 - REMs
  Calculate a size into REM units -- mostly used for font size rendering.
  - @param $size: Size of an element needing a calculated size into REMs.
  - @param $base: Base font size of the site -- defaults to 16px.
  - @example = font-size: calc-rem(24px);
\*------------------------------------*/
/**
 * Functions - Color
 * Simple functions to help developers easily grab pre-defined color values from mapping lists.
 *
 * - 01 - Imports
 * - 02 - Color
 */
/*------------------------------------*\
  01 - Imports
\*------------------------------------*/
/*------------------------------------*\
  02 - Color
  Main function for getting a pre-defined color from a list of values, as defined in 'partials/settings/_colors.scss.
  - @param $color: The selected color.
  - @example = background-color: color(primary);
\*------------------------------------*/
/**
 * Functions - Layout
 * Simple functions to help developers easily grab pre-defined layout values from mapping lists.
 *
 * - 01 - Imports
 * - 02 - Widths
 * - 03 - Z-index
 */
/*------------------------------------*\
  01 - Imports
\*------------------------------------*/
/*------------------------------------*\
  02 - Widths
  Main function for getting a pre-defined width from a list of values, as defined in 'partials/settings/_layout.scss.
  - @param $width: The selected width size.
  - @example: width: width(large);
\*------------------------------------*/
/*------------------------------------*\
  03 - Z-index
  Main function for getting a pre-defined z-index from a list of values, as defined in 'partials/settings/_layout.scss.
  - @param $key: The selected layer type.
  - @example = z-index: z-index(bottomless-pit)
\*------------------------------------*/
/**
 * Functions - Typography
 * Simple functions to help developers easily grab pre-defined typographical values from mapping lists.
 *
 * - 01 - Imports
 * - 02 - Line Height
 */
/*------------------------------------*\
  01 - Imports
\*------------------------------------*/
/*------------------------------------*\
  02 - Line Height
  Main function for getting a pre-defined Line Height from a list of values, as defined in
  `partials/settings/_typography.scss`.
  - @param $size: The selected Line Height type.
  - @example: line-height: line-height(heading);
\*------------------------------------*/
/**
 * Mixins - Breakpoints
 * Use these mixins mainly when defining media breakpoint specifications in theme files. Both settings and functions
 * are imported here to supplement the mixins themselves.
 *
 * - 01 - Imports
 * - 02 - Minimum Breakpoint
 * - 03 - Maximum Breakpoint
 * - 04 - Between Breakpoint
 * - 05 - Only Breakpoint
 */
/*------------------------------------*\
  01 - Imports
\*------------------------------------*/
/*------------------------------------*\
  02 - Minimum Breakpoint
  Media/screen-size of at least the minimum breakpoint width -- apply to screen-sizes above the breakpoint specified.
  - @param $name: Selected breakpoint name as defined in partials/settings/_breakpoints.scss
  - @param $breakpoints: Breakpoints mapping values as defined in partials/settings/_breakpoints.scss
  - @example = @include bp-min(large) {}
\*------------------------------------*/
/*------------------------------------*\
  03 - Maximum Breakpoint
  Media/screen-size of at most the maximum breakpoint width -- apply to screen-sizes below the breakpoint specified.
  - @param $name: Selected breakpoint name as defined in partials/settings/_breakpoints.scss
  - @param $breakpoints: Breakpoints mapping values as defined in partials/settings/_breakpoints.scss
  - @example = @include bp-max(large) {}
\*------------------------------------*/
/*------------------------------------*\
  04 - Between Breakpoint
  Media/screen-size that spans multiple breakpoint widths -- apply to screen-sizes between the breakpoints specified.
  - @param $lower: Selected minimum breakpoint name as defined in partials/settings/_breakpoints.scss
  - @param $upper: Selected maximum breakpoint name as defined in partials/settings/_breakpoints.scss
  - @param $breakpoints: Breakpoints mapping values as defined in partials/settings/_breakpoints.scss
  - @example = @include bp-between(xsmall, large) {}
\*------------------------------------*/
/*------------------------------------*\
  05 - Only Breakpoint
  Media/screen-size between the breakpoint's minimum and maximum widths -- No minimum for the smallest breakpoint, and
  no maximum for the largest one.
  - @param $name: Selected breakpoint name as defined in partials/settings/_breakpoints.scss
  - @param $breakpoints: Breakpoints mapping values as defined in partials/settings/_breakpoints.scss
  - @example = @include bp-only(large) {}
\*------------------------------------*/
/**
 * Mixins - Lists
 * Use these mixins when needing to easily define lists styles.
 *
 * - 01 - Base
 * - 02 - Bullets
 * - 03 - Numbered
 * - 04 - No Bullets
 * - 05 - Inline
 * - 06 - Ruled
 */
/*------------------------------------*\
  01 - Base
\*------------------------------------*/
/*------------------------------------*\
  02 - Bullets
\*------------------------------------*/
/*------------------------------------*\
  03 - Numbered
\*------------------------------------*/
/*------------------------------------*\
  04 - No Bullets
\*------------------------------------*/
/*------------------------------------*\
  05 - Inline
\*------------------------------------*/
/*------------------------------------*\
  06 - Ruled
\*------------------------------------*/
/*------------------------------------*\
  03 - Mixins
\*------------------------------------*/
/**
 * Mixins - Typography
 * Use these mixins when needing to easily define typography styles, such as sizes and typographical layout.
 *
 * - 01 - Imports
 * - 02 - Heading Size
 */
/*------------------------------------*\
  01 - Imports
\*------------------------------------*/
/*------------------------------------*\
  02 - Heading Size
  Meant for responsive heading sizes and is based upon breakpoints and a mapping of heading sizes. Breakpoints are
  defined in the `partials/settings/_breakpoints.scss` file and are utilized with a mixin, as defined in
  `partials/mixins/_breakpoints.scss`.
  - @param $setting: Selected heading to apply responsive sizing to.
\*------------------------------------*/
img {
  max-width: 100%;
  height: auto;
}

figure {
  margin: 0;
}
figure img {
  display: block;
}

figcaption {
  margin: 1em 0;
}

@media (min-width: 768px) {
  .drupal-media.ck-widget[data-view-mode=embed25],
  .drupal-media.ck-widget[data-view-mode=embed_4_3_25],
  .drupal-media.ck-widget[data-view-mode=embed_1_1_25],
  .drupal-media.ck-widget[data-view-mode=embed_16_9_25] {
    max-width: 25%;
  }
  .drupal-media.ck-widget[data-view-mode=embed25] .media--view-mode--embed25,
  .drupal-media.ck-widget[data-view-mode=embed25] .media--view-mode--embed-4-3-25,
  .drupal-media.ck-widget[data-view-mode=embed25] .media--view-mode--embed-1-1-25,
  .drupal-media.ck-widget[data-view-mode=embed25] .media--view-mode--embed-16-9-25,
  .drupal-media.ck-widget[data-view-mode=embed_4_3_25] .media--view-mode--embed25,
  .drupal-media.ck-widget[data-view-mode=embed_4_3_25] .media--view-mode--embed-4-3-25,
  .drupal-media.ck-widget[data-view-mode=embed_4_3_25] .media--view-mode--embed-1-1-25,
  .drupal-media.ck-widget[data-view-mode=embed_4_3_25] .media--view-mode--embed-16-9-25,
  .drupal-media.ck-widget[data-view-mode=embed_1_1_25] .media--view-mode--embed25,
  .drupal-media.ck-widget[data-view-mode=embed_1_1_25] .media--view-mode--embed-4-3-25,
  .drupal-media.ck-widget[data-view-mode=embed_1_1_25] .media--view-mode--embed-1-1-25,
  .drupal-media.ck-widget[data-view-mode=embed_1_1_25] .media--view-mode--embed-16-9-25,
  .drupal-media.ck-widget[data-view-mode=embed_16_9_25] .media--view-mode--embed25,
  .drupal-media.ck-widget[data-view-mode=embed_16_9_25] .media--view-mode--embed-4-3-25,
  .drupal-media.ck-widget[data-view-mode=embed_16_9_25] .media--view-mode--embed-1-1-25,
  .drupal-media.ck-widget[data-view-mode=embed_16_9_25] .media--view-mode--embed-16-9-25 {
    max-width: 100%;
  }
}

@media (min-width: 768px) {
  .media--view-mode--embed25,
  .media--view-mode--embed-4-3-25,
  .media--view-mode--embed-1-1-25,
  .media--view-mode--embed-16-9-25 {
    max-width: 25%;
  }
}

@media (min-width: 768px) {
  .drupal-media.ck-widget[data-view-mode=embed33],
  .drupal-media.ck-widget[data-view-mode=embed_4_3_33],
  .drupal-media.ck-widget[data-view-mode=embed_1_1_33],
  .drupal-media.ck-widget[data-view-mode=embed_16_9_33] {
    max-width: 33%;
  }
  .drupal-media.ck-widget[data-view-mode=embed33] .media--view-mode--embed33,
  .drupal-media.ck-widget[data-view-mode=embed33] .media--view-mode--embed-4-3-33,
  .drupal-media.ck-widget[data-view-mode=embed33] .media--view-mode--embed-1-1-33,
  .drupal-media.ck-widget[data-view-mode=embed33] .media--view-mode--embed-16-9-33,
  .drupal-media.ck-widget[data-view-mode=embed_4_3_33] .media--view-mode--embed33,
  .drupal-media.ck-widget[data-view-mode=embed_4_3_33] .media--view-mode--embed-4-3-33,
  .drupal-media.ck-widget[data-view-mode=embed_4_3_33] .media--view-mode--embed-1-1-33,
  .drupal-media.ck-widget[data-view-mode=embed_4_3_33] .media--view-mode--embed-16-9-33,
  .drupal-media.ck-widget[data-view-mode=embed_1_1_33] .media--view-mode--embed33,
  .drupal-media.ck-widget[data-view-mode=embed_1_1_33] .media--view-mode--embed-4-3-33,
  .drupal-media.ck-widget[data-view-mode=embed_1_1_33] .media--view-mode--embed-1-1-33,
  .drupal-media.ck-widget[data-view-mode=embed_1_1_33] .media--view-mode--embed-16-9-33,
  .drupal-media.ck-widget[data-view-mode=embed_16_9_33] .media--view-mode--embed33,
  .drupal-media.ck-widget[data-view-mode=embed_16_9_33] .media--view-mode--embed-4-3-33,
  .drupal-media.ck-widget[data-view-mode=embed_16_9_33] .media--view-mode--embed-1-1-33,
  .drupal-media.ck-widget[data-view-mode=embed_16_9_33] .media--view-mode--embed-16-9-33 {
    max-width: 100%;
  }
}

@media (min-width: 768px) {
  .media--view-mode--embed33,
  .media--view-mode--embed-4-3-33,
  .media--view-mode--embed-1-1-33,
  .media--view-mode--embed-16-9-33 {
    max-width: 33%;
  }
}

@media (min-width: 768px) {
  .drupal-media.ck-widget[data-view-mode=embed50],
  .drupal-media.ck-widget[data-view-mode=embed_4_3_50],
  .drupal-media.ck-widget[data-view-mode=embed_1_1_50],
  .drupal-media.ck-widget[data-view-mode=embed_16_9_50] {
    max-width: 50%;
  }
  .drupal-media.ck-widget[data-view-mode=embed50] .media--view-mode--embed50,
  .drupal-media.ck-widget[data-view-mode=embed50] .media--view-mode--embed-4-3-50,
  .drupal-media.ck-widget[data-view-mode=embed50] .media--view-mode--embed-1-1-50,
  .drupal-media.ck-widget[data-view-mode=embed50] .media--view-mode--embed-16-9-50,
  .drupal-media.ck-widget[data-view-mode=embed_4_3_50] .media--view-mode--embed50,
  .drupal-media.ck-widget[data-view-mode=embed_4_3_50] .media--view-mode--embed-4-3-50,
  .drupal-media.ck-widget[data-view-mode=embed_4_3_50] .media--view-mode--embed-1-1-50,
  .drupal-media.ck-widget[data-view-mode=embed_4_3_50] .media--view-mode--embed-16-9-50,
  .drupal-media.ck-widget[data-view-mode=embed_1_1_50] .media--view-mode--embed50,
  .drupal-media.ck-widget[data-view-mode=embed_1_1_50] .media--view-mode--embed-4-3-50,
  .drupal-media.ck-widget[data-view-mode=embed_1_1_50] .media--view-mode--embed-1-1-50,
  .drupal-media.ck-widget[data-view-mode=embed_1_1_50] .media--view-mode--embed-16-9-50,
  .drupal-media.ck-widget[data-view-mode=embed_16_9_50] .media--view-mode--embed50,
  .drupal-media.ck-widget[data-view-mode=embed_16_9_50] .media--view-mode--embed-4-3-50,
  .drupal-media.ck-widget[data-view-mode=embed_16_9_50] .media--view-mode--embed-1-1-50,
  .drupal-media.ck-widget[data-view-mode=embed_16_9_50] .media--view-mode--embed-16-9-50 {
    max-width: 100%;
  }
}

@media (min-width: 768px) {
  .media--view-mode--embed50,
  .media--view-mode--embed-4-3-50,
  .media--view-mode--embed-1-1-50,
  .media--view-mode--embed-16-9-50 {
    max-width: 50%;
  }
}

@media (min-width: 768px) {
  .drupal-media.ck-widget[data-view-mode=embed67],
  .drupal-media.ck-widget[data-view-mode=embed_4_3_67],
  .drupal-media.ck-widget[data-view-mode=embed_1_1_67],
  .drupal-media.ck-widget[data-view-mode=embed_16_9_67] {
    max-width: 67%;
  }
  .drupal-media.ck-widget[data-view-mode=embed67] .media--view-mode--embed67,
  .drupal-media.ck-widget[data-view-mode=embed67] .media--view-mode--embed-4-3-67,
  .drupal-media.ck-widget[data-view-mode=embed67] .media--view-mode--embed-1-1-67,
  .drupal-media.ck-widget[data-view-mode=embed67] .media--view-mode--embed-16-9-67,
  .drupal-media.ck-widget[data-view-mode=embed_4_3_67] .media--view-mode--embed67,
  .drupal-media.ck-widget[data-view-mode=embed_4_3_67] .media--view-mode--embed-4-3-67,
  .drupal-media.ck-widget[data-view-mode=embed_4_3_67] .media--view-mode--embed-1-1-67,
  .drupal-media.ck-widget[data-view-mode=embed_4_3_67] .media--view-mode--embed-16-9-67,
  .drupal-media.ck-widget[data-view-mode=embed_1_1_67] .media--view-mode--embed67,
  .drupal-media.ck-widget[data-view-mode=embed_1_1_67] .media--view-mode--embed-4-3-67,
  .drupal-media.ck-widget[data-view-mode=embed_1_1_67] .media--view-mode--embed-1-1-67,
  .drupal-media.ck-widget[data-view-mode=embed_1_1_67] .media--view-mode--embed-16-9-67,
  .drupal-media.ck-widget[data-view-mode=embed_16_9_67] .media--view-mode--embed67,
  .drupal-media.ck-widget[data-view-mode=embed_16_9_67] .media--view-mode--embed-4-3-67,
  .drupal-media.ck-widget[data-view-mode=embed_16_9_67] .media--view-mode--embed-1-1-67,
  .drupal-media.ck-widget[data-view-mode=embed_16_9_67] .media--view-mode--embed-16-9-67 {
    max-width: 100%;
  }
}

@media (min-width: 768px) {
  .media--view-mode--embed67,
  .media--view-mode--embed-4-3-67,
  .media--view-mode--embed-1-1-67,
  .media--view-mode--embed-16-9-67 {
    max-width: 67%;
  }
}

@media (min-width: 768px) {
  .drupal-media.ck-widget[data-view-mode=embed75],
  .drupal-media.ck-widget[data-view-mode=embed_4_3_75],
  .drupal-media.ck-widget[data-view-mode=embed_1_1_75],
  .drupal-media.ck-widget[data-view-mode=embed_16_9_75] {
    max-width: 75%;
  }
  .drupal-media.ck-widget[data-view-mode=embed75] .media--view-mode--embed75,
  .drupal-media.ck-widget[data-view-mode=embed75] .media--view-mode--embed-4-3-75,
  .drupal-media.ck-widget[data-view-mode=embed75] .media--view-mode--embed-1-1-75,
  .drupal-media.ck-widget[data-view-mode=embed75] .media--view-mode--embed-16-9-75,
  .drupal-media.ck-widget[data-view-mode=embed_4_3_75] .media--view-mode--embed75,
  .drupal-media.ck-widget[data-view-mode=embed_4_3_75] .media--view-mode--embed-4-3-75,
  .drupal-media.ck-widget[data-view-mode=embed_4_3_75] .media--view-mode--embed-1-1-75,
  .drupal-media.ck-widget[data-view-mode=embed_4_3_75] .media--view-mode--embed-16-9-75,
  .drupal-media.ck-widget[data-view-mode=embed_1_1_75] .media--view-mode--embed75,
  .drupal-media.ck-widget[data-view-mode=embed_1_1_75] .media--view-mode--embed-4-3-75,
  .drupal-media.ck-widget[data-view-mode=embed_1_1_75] .media--view-mode--embed-1-1-75,
  .drupal-media.ck-widget[data-view-mode=embed_1_1_75] .media--view-mode--embed-16-9-75,
  .drupal-media.ck-widget[data-view-mode=embed_16_9_75] .media--view-mode--embed75,
  .drupal-media.ck-widget[data-view-mode=embed_16_9_75] .media--view-mode--embed-4-3-75,
  .drupal-media.ck-widget[data-view-mode=embed_16_9_75] .media--view-mode--embed-1-1-75,
  .drupal-media.ck-widget[data-view-mode=embed_16_9_75] .media--view-mode--embed-16-9-75 {
    max-width: 100%;
  }
}

@media (min-width: 768px) {
  .media--view-mode--embed75,
  .media--view-mode--embed-4-3-75,
  .media--view-mode--embed-1-1-75,
  .media--view-mode--embed-16-9-75 {
    max-width: 75%;
  }
}
/*# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInBhcnRpYWxzL3NldHRpbmdzL19hbmltYXRpb25zLnNjc3MiLCJwYXJ0aWFscy9zZXR0aW5ncy9fYnJlYWtwb2ludHMuc2NzcyIsInBhcnRpYWxzL3NldHRpbmdzL19jb2xvcnMuc2NzcyIsInBhcnRpYWxzL3NldHRpbmdzL19sYXlvdXQuc2NzcyIsInBhcnRpYWxzL3NldHRpbmdzL190eXBvZ3JhcGh5LnNjc3MiLCJwYXJ0aWFscy9fcGFydGlhbHMuc2NzcyIsInBhcnRpYWxzL2Z1bmN0aW9ucy9fYW5pbWF0aW9ucy5zY3NzIiwicGFydGlhbHMvZnVuY3Rpb25zL19icmVha3BvaW50cy5zY3NzIiwicGFydGlhbHMvZnVuY3Rpb25zL19jYWxjdWxhdGlvbnMuc2NzcyIsInBhcnRpYWxzL2Z1bmN0aW9ucy9fY29sb3JzLnNjc3MiLCJwYXJ0aWFscy9mdW5jdGlvbnMvX2xheW91dC5zY3NzIiwicGFydGlhbHMvZnVuY3Rpb25zL190eXBvZ3JhcGh5LnNjc3MiLCJwYXJ0aWFscy9taXhpbnMvX2JyZWFrcG9pbnRzLnNjc3MiLCJwYXJ0aWFscy9taXhpbnMvX2xpc3RzLnNjc3MiLCJwYXJ0aWFscy9taXhpbnMvX3R5cG9ncmFwaHkuc2NzcyIsImdsb2JhbC9iYXNlL21lZGlhLnNjc3MiLCJnbG9iYWwvYmFzZS9tZWRpYS5jc3MiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7O0VBQUE7QUFRQTs7dUNBQUE7QUNSQTs7O0VBQUE7QUFLQTs7Ozs7O3VDQUFBO0FDTEE7Ozs7Ozs7O0VBQUE7QUFXQTs7dUNBQUE7QUFrQkE7O3VDQUFBO0FBbUJBOzt1Q0FBQTtBQWdCQTs7dUNBQUE7QUNoRUE7Ozs7Ozs7RUFBQTtBQVNBOzt1Q0FBQTtBQU9BOzs7Ozs7Ozs7dUNBQUE7QUF5QkE7O3VDQUFBO0FDekNBOzs7Ozs7RUFBQTtBQVNBOzt1Q0FBQTtBQWtEQTs7dUNBQUE7QUMzREE7Ozs7Ozs7O0VBQUE7QUFVQTs7dUNBQUE7QUNWQTs7Ozs7O0VBQUE7QUFTQTs7dUNBQUE7QUFTQTs7Ozs7Ozs7dUNBQUE7QUNsQkE7Ozs7Ozs7Ozs7RUFBQTtBQWFBOzs7Ozs7dUNBQUE7QUFtQkE7Ozs7O3VDQUFBO0FBZUE7Ozs7Ozs7dUNBQUE7QUFpQkE7Ozs7Ozt1Q0FBQTtBQ2hFQTs7Ozs7OztFQUFBO0FBVUE7O3VDQUFBO0FBU0E7Ozs7Ozt1Q0FBQTtBQWVBOzs7Ozs7dUNBQUE7QUNsQ0E7Ozs7OztFQUFBO0FBU0E7O3VDQUFBO0FBU0E7Ozs7O3VDQUFBO0FDbEJBOzs7Ozs7O0VBQUE7QUFVQTs7dUNBQUE7QUFTQTs7Ozs7dUNBQUE7QUFxQkE7Ozs7O3VDQUFBO0FDeENBOzs7Ozs7RUFBQTtBQVNBOzt1Q0FBQTtBQVNBOzs7Ozs7dUNBQUE7QUNsQkE7Ozs7Ozs7Ozs7RUFBQTtBQWFBOzt1Q0FBQTtBQVVBOzs7Ozs7dUNBQUE7QUFzQkE7Ozs7Ozt1Q0FBQTtBQXNCQTs7Ozs7Ozt1Q0FBQTtBQStCQTs7Ozs7Ozt1Q0FBQTtBQ2xHQTs7Ozs7Ozs7OztFQUFBO0FBYUE7O3VDQUFBO0FBYUE7O3VDQUFBO0FBcUJBOzt1Q0FBQTtBQWtDQTs7dUNBQUE7QUFnQkE7O3VDQUFBO0FBYUE7O3VDQUFBO0FSL0VBOzt1Q0FBQTtBUy9CQTs7Ozs7O0VBQUE7QUFTQTs7dUNBQUE7QUFXQTs7Ozs7O3VDQUFBO0FDbEJBO0VBQ0UsZUFBQTtFQUNBLFlBQUE7QUNpVUY7O0FEOVRBO0VBQ0UsU0FBQTtBQ2lVRjtBRC9URTtFQUNFLGNBQUE7QUNpVUo7O0FEN1RBO0VBQ0UsYUFBQTtBQ2dVRjs7QUo5U0k7RUdkSjs7OztJQUtJLGNBQUE7RUMrVEY7RUQ5VEU7Ozs7Ozs7Ozs7Ozs7Ozs7SUFJRSxlQUFBO0VDNFVKO0FBQ0Y7O0FKelVJO0VHQ0o7Ozs7SUFLSSxjQUFBO0VDMlVGO0FBQ0Y7O0FKbFZJO0VHV0o7Ozs7SUFLSSxjQUFBO0VDMFVGO0VEelVFOzs7Ozs7Ozs7Ozs7Ozs7O0lBSUUsZUFBQTtFQ3VWSjtBQUNGOztBSjdXSTtFRzBCSjs7OztJQUtJLGNBQUE7RUNzVkY7QUFDRjs7QUp0WEk7RUdvQ0o7Ozs7SUFLSSxjQUFBO0VDcVZGO0VEcFZFOzs7Ozs7Ozs7Ozs7Ozs7O0lBSUUsZUFBQTtFQ2tXSjtBQUNGOztBSmpaSTtFR2tESjs7OztJQUtJLGNBQUE7RUNrV0Y7QUFDRjs7QUoxWkk7RUc0REo7Ozs7SUFLSSxjQUFBO0VDaVdGO0VEaFdFOzs7Ozs7Ozs7Ozs7Ozs7O0lBSUUsZUFBQTtFQzhXSjtBQUNGOztBSnJiSTtFRzJFSjs7OztJQUtJLGNBQUE7RUM2V0Y7QUFDRjs7QUo5Ykk7RUdxRko7Ozs7SUFLSSxjQUFBO0VDNFdGO0VEM1dFOzs7Ozs7Ozs7Ozs7Ozs7O0lBSUUsZUFBQTtFQ3lYSjtBQUNGOztBSnpkSTtFR29HSjs7OztJQUtJLGNBQUE7RUN3WEY7QUFDRiIsImZpbGUiOiJnbG9iYWwvYmFzZS9tZWRpYS5jc3MiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFNldHRpbmdzIC0gQW5pbWF0aW9uc1xuICogU3RhbmRhcmQgc2V0cyBvZiBhbmltYXRpb24gdmFyaWFibGVzIGFuZCBtYXBwaW5ncyB0byBiZSBvZiB1c2UgYWNyb3NzIHRoZSBzaXRlLCBmb3IgY29uc2lzdGVuY3kgYW5kIGFjY3VyYWN5LlxuICpcbiAqIC0gMDEgLSBUcmFuc2l0aW9uc1xuICovXG5cblxuLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qXFxcbiAgMDEgLSBUcmFuc2l0aW9uc1xuXFwqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuJHRyYW5zaXRpb25zOiAoXG4gICdlYXNlSW4nOiAgICAgICAgIGVhc2UtaW4sXG4gICdlYXNlT3V0JzogICAgICAgIGVhc2Utb3V0LFxuICAnZWFzZUluT3V0JzogICAgICBlYXNlLWluLW91dCxcblxuICAnZWFzZUluU2luZSc6ICAgICBjdWJpYy1iZXppZXIoMC4xMiwgMCwgMC4zOSwgMCksIC8vIGh0dHBzOi8vZWFzaW5ncy5uZXQvI2Vhc2VJblNpbmVcbiAgJ2Vhc2VPdXRTaW5lJzogICAgY3ViaWMtYmV6aWVyKDAuNjEsIDEsIDAuODgsIDEpLCAvLyBodHRwczovL2Vhc2luZ3MubmV0LyNlYXNlT3V0U2luZVxuICAnZWFzZUluT3V0U2luZSc6ICBjdWJpYy1iZXppZXIoMC4zNywgMCwgMC42MywgMSksIC8vIGh0dHBzOi8vZWFzaW5ncy5uZXQvI2Vhc2VJbk91dFNpbmVcblxuICAnZWFzZUluUXVhZCc6ICAgICBjdWJpYy1iZXppZXIoMC4xMSwgMCwgMC41LCAwKSwgLy8gaHR0cHM6Ly9lYXNpbmdzLm5ldC8jZWFzZUluUXVhZFxuICAnZWFzZU91dFF1YWQnOiAgICBjdWJpYy1iZXppZXIoMC41LCAxLCAwLjg5LCAxKSwgLy8gaHR0cHM6Ly9lYXNpbmdzLm5ldC8jZWFzZU91dFF1YWRcbiAgJ2Vhc2VJbk91dFF1YWQnOiAgY3ViaWMtYmV6aWVyKDAuNDUsIDAsIDAuNTUsIDEpLCAvLyBodHRwczovL2Vhc2luZ3MubmV0LyNlYXNlSW5PdXRRdWFkXG5cbiAgJ2Vhc2VJbkN1YmljJzogICAgY3ViaWMtYmV6aWVyKDAuMzIsIDAsIDAuNjcsIDApLCAvLyBodHRwczovL2Vhc2luZ3MubmV0LyNlYXNlSW5DdWJpY1xuICAnZWFzZU91dEN1YmljJzogICBjdWJpYy1iZXppZXIoMC4zMywgMSwgMC42OCwgMSksIC8vIGh0dHBzOi8vZWFzaW5ncy5uZXQvI2Vhc2VPdXRDdWJpY1xuICAnZWFzZUluT3V0Q3ViaWMnOiBjdWJpYy1iZXppZXIoMC42NSwgMCwgMC4zNSwgMSksIC8vIGh0dHBzOi8vZWFzaW5ncy5uZXQvI2Vhc2VJbk91dEN1YmljXG5cbiAgJ2Vhc2VJblF1YXJ0JzogICAgY3ViaWMtYmV6aWVyKDAuNSwgMCwgMC43NSwgMCksIC8vIGh0dHBzOi8vZWFzaW5ncy5uZXQvI2Vhc2VJblF1YXJ0XG4gICdlYXNlT3V0UXVhcnQnOiAgIGN1YmljLWJlemllcigwLjI1LCAxLCAwLjUsIDEpLCAvLyBodHRwczovL2Vhc2luZ3MubmV0LyNlYXNlT3V0UXVhcnRcbiAgJ2Vhc2VJbk91dFF1YXJ0JzogY3ViaWMtYmV6aWVyKDAuNzYsIDAsIDAuMjQsIDEpLCAvLyBodHRwczovL2Vhc2luZ3MubmV0LyNlYXNlSW5PdXRRdWFydFxuXG4gICdlYXNlSW5RdWludCc6ICAgIGN1YmljLWJlemllcigwLjY0LCAwLCAwLjc4LCAwKSwgLy8gaHR0cHM6Ly9lYXNpbmdzLm5ldC8jZWFzZUluUXVpbnRcbiAgJ2Vhc2VPdXRRdWludCc6ICAgY3ViaWMtYmV6aWVyKDAuMjIsIDEsIDAuMzYsIDEpLCAvLyBodHRwczovL2Vhc2luZ3MubmV0LyNlYXNlT3V0UXVpbnRcbiAgJ2Vhc2VJbk91dFF1aW50JzogY3ViaWMtYmV6aWVyKDAuODMsIDAsIDAuMTcsIDEpLCAvLyBodHRwczovL2Vhc2luZ3MubmV0LyNlYXNlSW5PdXRRdWludFxuXG4gICdlYXNlSW5FeHBvJzogICAgIGN1YmljLWJlemllcigwLjcsIDAsIDAuODQsIDApLCAvLyBodHRwczovL2Vhc2luZ3MubmV0LyNlYXNlSW5FeHBvXG4gICdlYXNlT3V0RXhwbyc6ICAgIGN1YmljLWJlemllcigwLjE2LCAxLCAwLjMsIDEpLCAvLyBodHRwczovL2Vhc2luZ3MubmV0LyNlYXNlT3V0RXhwb1xuICAnZWFzZUluT3V0RXhwbyc6ICBjdWJpYy1iZXppZXIoMC44NywgMCwgMC4xMywgMSksIC8vIGh0dHBzOi8vZWFzaW5ncy5uZXQvI2Vhc2VJbk91dEV4cG9cblxuICAnZWFzZUluQ2lyYyc6ICAgICBjdWJpYy1iZXppZXIoMC41NSwgMCwgMSwgMC40NSksIC8vIGh0dHBzOi8vZWFzaW5ncy5uZXQvI2Vhc2VJbkNpcmNcbiAgJ2Vhc2VPdXRDaXJjJzogICAgY3ViaWMtYmV6aWVyKDAsIDAuNTUsIDAuNDUsIDEpLCAvLyBodHRwczovL2Vhc2luZ3MubmV0LyNlYXNlT3V0Q2lyY1xuICAnZWFzZUluT3V0Q2lyYyc6ICBjdWJpYy1iZXppZXIoMC44NSwgMCwgMC4xNSwgMSksIC8vIGh0dHBzOi8vZWFzaW5ncy5uZXQvI2Vhc2VJbk91dENpcmNcblxuICAnZWFzZUluQmFjayc6ICAgICBjdWJpYy1iZXppZXIoMC4zNiwgMCwgMC42NiwgLTAuNTYpLCAvLyBodHRwczovL2Vhc2luZ3MubmV0LyNlYXNlSW5CYWNrXG4gICdlYXNlT3V0QmFjayc6ICAgIGN1YmljLWJlemllcigwLjM0LCAxLjU2LCAwLjY0LCAxKSwgLy8gaHR0cHM6Ly9lYXNpbmdzLm5ldC8jZWFzZU91dEJhY2tcbiAgJ2Vhc2VJbk91dEJhY2snOiAgY3ViaWMtYmV6aWVyKDAuNjgsIC0wLjYsIDAuMzIsIDEuNiksIC8vIGh0dHBzOi8vZWFzaW5ncy5uZXQvI2Vhc2VJbk91dEJhY2tcbik7XG4iLCIvKipcbiAqIFNldHRpbmdzIC0gQnJlYWtwb2ludHNcbiAqIC0gMDEgLSBNYXBwaW5nXG4gKi9cblxuLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qXFxcbiAgMDEgLSBNYXBwaW5nXG4gIERlZmF1bHQgbWFwcGluZyBvZiBncmlkIGJyZWFrcG9pbnRzLCB3aGljaCBpcyB1c2VkIGluIHRoZSBmdW5jdGlvbiBhbmQgbWl4aW4gYnJlYWtwb2ludCBmaWxlcy4gQW4gZXhhbXBsZSBvZiB1c2luZ1xuICBicmVha3BvaW50cyBpbiBhIGZpbGUgaXMgYnkgdXNpbmcgdGhlIG1peGluIHdpdGggdGhlIG5hbWUgb2YgYSBicmVha3BvaW50OiBgQGluY2x1ZGUgYnAtbWluKHNtYWxsKSB7fWAuXG5cbiAgVGhlc2UgYnJlYWtwb2ludHMgbWF5IGJlIGFsdGVyZWQgZGVwZW5kaW5nIG9uIHRoZSB0aGVtZSBuZWVkcy5cblxcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbiRncmlkLWJyZWFrcG9pbnRzOiAoXG4gIHhzbWFsbDogMHB4LFxuICBzbWFsbDogMzc2cHgsXG4gIHhtZWRpdW06IDYwMHB4LFxuICBtZWRpdW06IDc2OHB4LFxuICBtZWRpdW0yOiA5NDJweCxcbiAgbGFyZ2U6IDEwMjRweCxcbiAgbGFyZ2UyOiAxMTk1cHgsXG4gIGxhcmdlcjogMTMyMHB4LFxuICB4bGFyZ2U6IDE0NDBweCxcbiAgeHhsYXJnZTogMTU2MHB4LFxuICB4eHhsYXJnZTogMTYwMHB4LFxuKTtcbiIsIi8qKlxuICogU2V0dGluZ3MgLSBDb2xvclxuICogU3RhbmRhcmQgc2V0cyBvZiBjb2xvciB2YXJpYWJsZXMgYW5kIG1hcHBpbmdzIHRvIGJlIG9mIHVzZSBhY3Jvc3MgdGhlIHNpdGUsIGZvciBjb25zaXN0ZW5jeSBhbmQgYWNjdXJhY3kuXG4gKlxuICogLSAwMSAtIFRoZW1lIENvbG9yc1xuICogLSAwMiAtIEdyYXlzY2FsZVxuICogLSAwMyAtIFV0aWxpdGllc1xuICogLSAwNCAtIE1hcHBpbmdcbiAqL1xuXG5cbi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKlxcXG4gIDAxIC0gVGhlbWUgQ29sb3JzXG5cXCotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG4kY29sb3ItYmx1ZTogICAgICAjMEQ2RUZEO1xuJGNvbG9yLWluZGlnbzogICAgIzY2MTBGMjtcbiRjb2xvci1wdXJwbGU6ICAgICM2RjQyQzE7XG4kY29sb3ItcGluazogICAgICAjRDYzMzg0O1xuJGNvbG9yLXJlZDogICAgICAgI0RDMzU0NTtcbiRjb2xvci1vcmFuZ2U6ICAgICNGRDdFMTQ7XG4kY29sb3IteWVsbG93OiAgICAjRkZDMTA3O1xuJGNvbG9yLWdyZWVuOiAgICAgIzE5ODc1NDtcbiRjb2xvci10ZWFsOiAgICAgICMyMEM5OTc7XG4kY29sb3ItY3lhbjogICAgICAjMERDQUYwO1xuXG5cblxuXG4vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSpcXFxuICAwMiAtIEdyYXlzY2FsZVxuXFwqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuJGNvbG9yLXdoaXRlOiAgICAgI0ZGRkZGRjtcbiRjb2xvci1ncmF5LTEwMDogICNGOEY5RkE7XG4kY29sb3ItZ3JheS0yMDA6ICAjRTlFQ0VGO1xuJGNvbG9yLWdyYXktMzAwOiAgI0RFRTJFNjtcbiRjb2xvci1ncmF5LTQwMDogICNDRUQ0REE7XG4kY29sb3ItZ3JheS01MDA6ICAjQURCNUJEO1xuJGNvbG9yLWdyYXktNjAwOiAgIzZDNzU3RDtcbiRjb2xvci1ncmF5LTcwMDogICM0OTUwNTc7XG4kY29sb3ItZ3JheS04MDA6ICAjMzQzQTQwO1xuJGNvbG9yLWdyYXktOTAwOiAgIzIxMjUyOTtcbiRjb2xvci1ibGFjazogICAgICMwMDAwMDA7XG5cblxuXG5cbi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKlxcXG4gIDAzIC0gVXRpbGl0aWVzXG5cXCotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG4kY29sb3ItcHJpbWFyeTogICAkY29sb3ItYmx1ZTtcbiRjb2xvci1zZWNvbmRhcnk6ICRjb2xvci1ncmF5LTYwMDtcbiRjb2xvci1zdWNjZXNzOiAgICRjb2xvci1ncmVlbjtcbiRjb2xvci1pbmZvOiAgICAgICRjb2xvci1jeWFuO1xuJGNvbG9yLXdhcm5pbmc6ICAgJGNvbG9yLXllbGxvdztcbiRjb2xvci1kYW5nZXI6ICAgICRjb2xvci1yZWQ7XG4kY29sb3ItbGlnaHQ6ICAgICAkY29sb3ItZ3JheS0xMDA7XG4kY29sb3ItZGFyazogICAgICAkY29sb3ItZ3JheS05MDA7XG5cblxuXG5cbi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKlxcXG4gIDA0IC0gTWFwcGluZ1xuXFwqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuJGNvbG9yczogKFxuICAnYmx1ZSc6ICAgICAgICAgJGNvbG9yLWJsdWUsXG4gICdpbmRpZ28nOiAgICAgICAkY29sb3ItaW5kaWdvLFxuICAncHVycGxlJzogICAgICAgJGNvbG9yLXB1cnBsZSxcbiAgJ3BpbmsnOiAgICAgICAgICRjb2xvci1waW5rLFxuICAncmVkJzogICAgICAgICAgJGNvbG9yLXJlZCxcbiAgJ29yYW5nZSc6ICAgICAgICRjb2xvci1vcmFuZ2UsXG4gICd5ZWxsb3cnOiAgICAgICAkY29sb3IteWVsbG93LFxuICAnZ3JlZW4nOiAgICAgICAgJGNvbG9yLWdyZWVuLFxuICAndGVhbCc6ICAgICAgICAgJGNvbG9yLXRlYWwsXG4gICdjeWFuJzogICAgICAgICAkY29sb3ItY3lhbixcblxuICAnd2hpdGUnOiAgICAgICAgJGNvbG9yLXdoaXRlLFxuICAnZ3JheS0xMDAnOiAgICAgJGNvbG9yLWdyYXktMTAwLFxuICAnZ3JheS0yMDAnOiAgICAgJGNvbG9yLWdyYXktMjAwLFxuICAnZ3JheS0zMDAnOiAgICAgJGNvbG9yLWdyYXktMzAwLFxuICAnZ3JheS00MDAnOiAgICAgJGNvbG9yLWdyYXktNDAwLFxuICAnZ3JheS01MDAnOiAgICAgJGNvbG9yLWdyYXktNTAwLFxuICAnZ3JheS02MDAnOiAgICAgJGNvbG9yLWdyYXktNjAwLFxuICAnZ3JheS03MDAnOiAgICAgJGNvbG9yLWdyYXktNzAwLFxuICAnZ3JheS04MDAnOiAgICAgJGNvbG9yLWdyYXktODAwLFxuICAnZ3JheS05MDAnOiAgICAgJGNvbG9yLWdyYXktOTAwLFxuICAnYmxhY2snOiAgICAgICAgJGNvbG9yLWJsYWNrLFxuXG4gICdwcmltYXJ5JzogICAgICAkY29sb3ItcHJpbWFyeSxcbiAgJ3NlY29uZGFyeSc6ICAgICRjb2xvci1zZWNvbmRhcnksXG4gICdzdWNjZXNzJzogICAgICAkY29sb3Itc3VjY2VzcyxcbiAgJ2luZm8nOiAgICAgICAgICRjb2xvci1pbmZvLFxuICAnd2FybmluZyc6ICAgICAgJGNvbG9yLXdhcm5pbmcsXG4gICdkYW5nZXInOiAgICAgICAkY29sb3ItZGFuZ2VyLFxuICAnbGlnaHQnOiAgICAgICAgJGNvbG9yLWxpZ2h0LFxuICAnZGFyayc6ICAgICAgICAgJGNvbG9yLWRhcmssXG4pO1xuIiwiLyoqXG4gKiBTZXR0aW5ncyAtIExheW91dFxuICogU3RhbmRhcmQgc2V0cyBvZiBsYXlvdXQgdmFyaWFibGVzIGFuZCBtYXBwaW5ncyB0byBiZSBvZiB1c2UgYWNyb3NzIHRoZSBzaXRlLCBmb3IgY29uc2lzdGVuY3kgYW5kIGFjY3VyYWN5LlxuICpcbiAqIC0gMDEgLSBHcmlkXG4gKiAtIDAyIC0gV2lkdGhzXG4gKiAtIDAzIC0gTGF5ZXJzXG4gKi9cblxuLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qXFxcbiAgMDEgLSBHcmlkXG5cXCotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG4kY29sdW1uLWdhcC1sYXJnZTogNDBweDtcbiRjb2x1bW4tZ2FwLXNtYWxsOiAyNHB4O1xuXG4vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSpcXFxuICAwMSAtIFdpZHRoc1xuICAvLyAneHhsYXJnZSc6ICAxOTIwcHgsXG4gIC8vICd4bGFyZ2UnOiAgIDE0NDBweCxcbiAgLy8gJ2xhcmdlJzogICAgMTI4MHB4LFxuICAvLyAnbWVkaXVtJzogICA5NjBweCxcbiAgLy8gJ3NtYWxsJzogICAgNzY4cHgsXG4gIC8vICd4c21hbGwnOiAgIDY0MHB4LFxuICAvLyAneHhzbWFsbCc6ICA0ODBweCxcblxcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbiR3aWR0aHM6IChcbiAgXCJ4c21hbGxcIjogMHB4LFxuICBcInNtYWxsXCI6IDM3NnB4LFxuICBcInhtZWRpdW1cIjogNjAwcHgsXG4gIFwibWVkaXVtXCI6IDc2OHB4LFxuICBcIm1lZGl1bTJcIjogOTQycHgsXG4gIFwibGFyZ2VcIjogMTAyNHB4LFxuICBcImxhcmdlMlwiOiAxMTk1cHgsXG4gIFwibGFyZ2VyXCI6IDEzMjBweCxcbiAgXCJ4bGFyZ2VcIjogMTQ0MHB4LFxuICBcInh4bGFyZ2VcIjogMTU2MHB4LFxuICBcInh4eGxhcmdlXCI6IDE2MDBweCxcbik7XG5cbi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKlxcXG4gIDAzIC0gTGF5ZXJzXG5cXCotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG4kei1sYXllcnM6IChcbiAgXCJzdXBlclwiOiAxMDAsXG4gIFwidG9wXCI6IDkwLFxuICBcIm92ZXJcIjogMTAsXG4gIFwiZGVmYXVsdFwiOiAxLFxuICBcInVuZGVyXCI6IC0xLFxuICBcImJvdHRvbWxlc3MtcGl0XCI6IC05OTk5LFxuKTtcbiIsIi8qKlxuICogU2V0dGluZ3MgLSBUeXBvZ3JhcGh5XG4gKiBTdGFuZGFyZCBzZXRzIG9mIHR5cG9ncmFwaGljYWwgdmFyaWFibGVzIGFuZCBtYXBwaW5ncyB0byBiZSBvZiB1c2UgYWNyb3NzIHRoZSBzaXRlLCBmb3IgY29uc2lzdGVuY3kgYW5kIGFjY3VyYWN5LlxuICpcbiAqIC0gMDEgLSBIZWFkaW5nIFNpemVzXG4gKiAtIDAyIC0gTGluZSBIZWlnaHRzXG4gKi9cblxuXG4vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSpcXFxuICAwMSAtIEhlYWRpbmcgU2l6ZXNcblxcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbiRoZWFkaW5nLXNpemVzOiAoXG4gIHhzbWFsbDogKFxuICAgICdoMSc6IChcbiAgICAgICdmb250LXNpemUnOiA1NnB4LFxuICAgICksXG4gICAgJ2gyJzogKFxuICAgICAgJ2ZvbnQtc2l6ZSc6IDQwcHgsXG4gICAgKSxcbiAgICAnaDMnOiAoXG4gICAgICAnZm9udC1zaXplJzogMzJweCxcbiAgICApLFxuICAgICdoNCc6IChcbiAgICAgICdmb250LXNpemUnOiAyMHB4LFxuICAgICksXG4gICAgJ2g1JzogKFxuICAgICAgJ2ZvbnQtc2l6ZSc6IDE4cHgsXG4gICAgKSxcbiAgICAnaDYnOiAoXG4gICAgICAnZm9udC1zaXplJzogMTZweCxcbiAgICApLFxuICApLFxuICBtZWRpdW06IChcbiAgICAnaDEnOiAoXG4gICAgICAnZm9udC1zaXplJzogNzJweCxcbiAgICApLFxuICAgICdoMic6IChcbiAgICAgICdmb250LXNpemUnOiA1NnB4LFxuICAgICksXG4gICAgJ2gzJzogKFxuICAgICAgJ2ZvbnQtc2l6ZSc6IDQwcHgsXG4gICAgKSxcbiAgICAnaDQnOiAoXG4gICAgICAnZm9udC1zaXplJzogMzJweCxcbiAgICApLFxuICAgICdoNSc6IChcbiAgICAgICdmb250LXNpemUnOiAyNHB4LFxuICAgICksXG4gICAgJ2g2JzogKFxuICAgICAgJ2ZvbnQtc2l6ZSc6IDE4cHgsXG4gICAgKSxcbiAgKSxcbik7XG5cblxuXG5cbi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKlxcXG4gIDAxIC0gTGluZSBIZWlnaHRzXG5cXCotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG4kbGluZS1oZWlnaHRzOiAoXG4gICdoZWFkaW5nJzogMS4yLFxuICAnYm9keSc6IDEuNixcbik7IiwiLyoqXG4gKiBQYXJ0aWFscyBDb21iaW5lZFxuICogUGFydGlhbHMgY2FuIGJlIGltcG9ydGVkIGludG8gdGhlbWUgZmlsZXMgZWl0aGVyIG9uZSBieSBvbmUsIG9yIGJ5IHVzaW5nIHRoaXMgY29tYmluZWQgUGFydGlhbHMgZmlsZS4gVG8gdXNlIHRoaXNcbiAqIGZpbGUgYXMgdGhlIGltcG9ydCBzdGF0ZW1lbnQsIGBAdXNlICdbcGF0aF0vcGFydGlhbHMvcGFydGlhbHMnIGFzICpgLlxuICpcbiAqIC0gMDEgLSBTZXR0aW5nc1xuICogLSAwMiAtIEZ1bmN0aW9uc1xuICogLSAwMyAtIE1peGluc1xuICovXG5cbi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKlxcXG4gIDAxIC0gU2V0dGluZ3NcblxcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbkBmb3J3YXJkIFwic2V0dGluZ3MvYW5pbWF0aW9uc1wiO1xuQGZvcndhcmQgXCJzZXR0aW5ncy9icmVha3BvaW50c1wiO1xuQGZvcndhcmQgXCJzZXR0aW5ncy9jb2xvcnNcIjtcbkBmb3J3YXJkIFwic2V0dGluZ3MvbGF5b3V0XCI7XG5AZm9yd2FyZCBcInNldHRpbmdzL3R5cG9ncmFwaHlcIjtcblxuLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qXFxcbiAgMDIgLSBGdW5jdGlvbnNcblxcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbkBmb3J3YXJkIFwiZnVuY3Rpb25zL2FuaW1hdGlvbnNcIjtcbkBmb3J3YXJkIFwiZnVuY3Rpb25zL2JyZWFrcG9pbnRzXCI7XG5AZm9yd2FyZCBcImZ1bmN0aW9ucy9jYWxjdWxhdGlvbnNcIjtcbkBmb3J3YXJkIFwiZnVuY3Rpb25zL2NvbG9yc1wiO1xuQGZvcndhcmQgXCJmdW5jdGlvbnMvbGF5b3V0XCI7XG5AZm9yd2FyZCBcImZ1bmN0aW9ucy90eXBvZ3JhcGh5XCI7XG5cbi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKlxcXG4gIDAzIC0gTWl4aW5zXG5cXCotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG5AZm9yd2FyZCBcIm1peGlucy9icmVha3BvaW50c1wiO1xuQGZvcndhcmQgXCJtaXhpbnMvbGlzdHNcIjtcbkBmb3J3YXJkIFwibWl4aW5zL3R5cG9ncmFwaHlcIjtcbiIsIi8qKlxuICogRnVuY3Rpb25zIC0gQW5pbWF0aW9uc1xuICogU2ltcGxlIGZ1bmN0aW9ucyB0byBoZWxwIGRldmVsb3BlcnMgZWFzaWx5IGdyYWIgcHJlLWRlZmluZWQgYW5pbWF0aW9uIHZhbHVlcyBmcm9tIG1hcHBpbmcgbGlzdHMuXG4gKlxuICogLSAwMSAtIEltcG9ydHNcbiAqIC0gMDIgLSBUcmFuc2l0aW9uXG4gKi9cblxuXG4vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSpcXFxuICAwMSAtIEltcG9ydHNcblxcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbkB1c2UgJy4uL3NldHRpbmdzL2FuaW1hdGlvbnMnIGFzIGFuaW1hdGlvbnM7XG5cblxuXG5cbi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKlxcXG4gIDAyIC0gVHJhbnNpdGlvblxuICBFYXN5IHRvIHVzZSBmdW5jdGlvbiB0byBxdWlja2x5IGRlZmluZSBhIHRyYW5zaXRpb24gd2l0aCB0aGUgYWJpbGl0eSB0byByZWZlcmVuY2UgYSBsaWJyYXJ5IG1hcHBpbmcgb2YgYmV6aWVyLWN1cnZlXG4gIGFuaW1hdGlvbnMsIGFzIGRlZmluZWQgaW4gYHBhcnRpYWxzL3NldHRpbmdzL19hbmltYXRpb25zLnNjc3NgLlxuICAtIEBwYXJhbSAkYXJndW1lbnQ6IFN0eWxlIGFyZ3VtZW50cyB0aGF0IHRoaXMgdHJhbnNpdGlvbiBzaG91bGQgYmUgYXBwbGllZCB0by5cbiAgLSBAcGFyYW0gJGR1cmF0aW9uOiBUaGUgbGVuZ3RoIG9mIHRpbWUgdGhlIHRyYW5zaXRpb24gc2hvdWxkIHRha2UgcGxhY2UuXG4gIC0gQHBhcmFtICRzdHlsZTogVGhlIHN0eWxlIG9mIHRyYW5zaXRpb24sIGFzIGRlZmluZWQgaW4gYHBhcnRpYWxzL3NldHRpbmdzL19hbmltYXRpb25zLnNjc3NgXG4gIC0gQGV4YW1wbGUgPSB0cmFuc2l0aW9uOiB0cmFuc2l0aW9uKGFsbCwgMC42cywgZWFzZUluT3V0U2luZSlcblxcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbkBmdW5jdGlvbiB0cmFuc2l0aW9uKCRhcmd1bWVudDogYWxsLCAkZHVyYXRpb246IDAuMzVzLCAkc3R5bGU6IGVhc2VJbk91dCkge1xuICBAaWYgbWFwLWhhcy1rZXkoYW5pbWF0aW9ucy4kdHJhbnNpdGlvbnMsICRzdHlsZSkge1xuICAgIEByZXR1cm4gJGFyZ3VtZW50ICRkdXJhdGlvbiBtYXAtZ2V0KGFuaW1hdGlvbnMuJHRyYW5zaXRpb25zLCAkc3R5bGUpO1xuICB9XG5cbiAgQGVsc2Uge1xuICAgIEB3YXJuIFwiTm8gdmFsdWUgY291bGQgYmUgcmV0cmlldmVkIGZvciBgI3skc3R5bGV9YC4gXCJcbiAgICArIFwiUGxlYXNlIG1ha2Ugc3VyZSBpdCBpcyBkZWZpbmVkIGluIGAkYW5pbWF0aW9uc2AgbWFwLlwiO1xuICB9XG59IiwiLyoqXG4gKiBGdW5jdGlvbnMgLSBCcmVha3BvaW50c1xuICogQnJlYWtwb2ludCB2aWV3cG9ydCBzaXplcyBhbmQgbWVkaWEgcXVlcmllcy4gQnJlYWtwb2ludHMgYXJlIGRlZmluZWQgYXMgYSBtYXAgb2YgKG5hbWU6IG1pbmltdW0gd2lkdGgpLCBvcmRlciBmcm9tXG4gKiB4c21hbGwgdG8geGxhcmdlOiAoeHM6IDAsIHNtOiA1NzZweCwgbWQ6IDc2OHB4LCBsZzogOTkycHgsIHhsOiAxMjAwcHgpLiBUaGUgbWFwIGRlZmluZWQgaW4gdGhlIGAkZ3JpZC1icmVha3BvaW50c2BcbiAqIGdsb2JhbCB2YXJpYWJsZSBpcyB1c2VkIGFzIHRoZSBgJGJyZWFrcG9pbnRzYCBhcmd1bWVudCBieSBkZWZhdWx0LlxuICpcbiAqIC0gMDEgLSBCcmVha3BvaW50IE5leHRcbiAqIC0gMDIgLSBCcmVha3BvaW50IE1pbmltdW1cbiAqIC0gMDMgLSBCcmVha3BvaW50IE1heGltdW1cbiAqIC0gMDQgLSBCcmVha3BvaW50IEluZml4XG4gKi9cblxuXG4vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSpcXFxuICAwMSAtIEJyZWFrcG9pbnQgTmV4dFxuICBOYW1lIG9mIHRoZSBuZXh0IGJyZWFrcG9pbnQsIG9yIG51bGwgZm9yIHRoZSBsYXN0IGJyZWFrcG9pbnQuXG4gIC0gQHBhcmFtICRuYW1lOiBTZWxlY3RlZCBicmVha3BvaW50IG5hbWUgYXMgZGVmaW5lZCBpbiBwYXJ0aWFscy9zZXR0aW5ncy9fYnJlYWtwb2ludHMuc2Nzc1xuICAtIEBwYXJhbSAkYnJlYWtwb2ludHM6IEJyZWFrcG9pbnRzIG1hcHBpbmcgdmFsdWVzIGFzIGRlZmluZWQgaW4gcGFydGlhbHMvc2V0dGluZ3MvX2JyZWFrcG9pbnRzLnNjc3NcbiAgLSBAcGFyYW0gJGJyZWFrcG9pbnQtbmFtZXM6IEJyZWFrcG9pbnRzIG1hcHBpbmcgbmFtZXMgYXMgZGVmaW5lZCBpbiBwYXJ0aWFscy9zZXR0aW5ncy9fYnJlYWtwb2ludHMuc2Nzc1xuXFwqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuQGZ1bmN0aW9uIGJyZWFrcG9pbnQtbmV4dCgkbmFtZSwgJGJyZWFrcG9pbnRzOiAkZ3JpZC1icmVha3BvaW50cywgJGJyZWFrcG9pbnQtbmFtZXM6IG1hcC1rZXlzKCRicmVha3BvaW50cykpIHtcbiAgJG46IGluZGV4KCRicmVha3BvaW50LW5hbWVzLCAkbmFtZSk7XG4gIEBpZiBub3QgJG4ge1xuICAgIEBlcnJvciBcImJyZWFrcG9pbnQgYCN7JG5hbWV9YCBub3QgZm91bmQgaW4gYCN7JGJyZWFrcG9pbnRzfWBcIjtcbiAgfVxuICBAcmV0dXJuIGlmKCRuIDwgbGVuZ3RoKCRicmVha3BvaW50LW5hbWVzKSwgbnRoKCRicmVha3BvaW50LW5hbWVzLCAkbiArIDEpLCBudWxsKTtcbn1cblxuXG5cblxuLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qXFxcbiAgMDIgLSBCcmVha3BvaW50IE1pbmltdW1cbiAgTWluaW11bSBicmVha3BvaW50IHdpZHRoLiBOdWxsIGZvciB0aGUgc21hbGxlc3QgKGZpcnN0KSBicmVha3BvaW50LlxuICAtIEBwYXJhbSAkbmFtZTogU2VsZWN0ZWQgYnJlYWtwb2ludCBuYW1lIGFzIGRlZmluZWQgaW4gcGFydGlhbHMvc2V0dGluZ3MvX2JyZWFrcG9pbnRzLnNjc3NcbiAgLSBAcGFyYW0gJGJyZWFrcG9pbnRzOiBCcmVha3BvaW50cyBtYXBwaW5nIHZhbHVlcyBhcyBkZWZpbmVkIGluIHBhcnRpYWxzL3NldHRpbmdzL19icmVha3BvaW50cy5zY3NzXG5cXCotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG5AZnVuY3Rpb24gYnJlYWtwb2ludC1taW4oJG5hbWUsICRicmVha3BvaW50czogJGdyaWQtYnJlYWtwb2ludHMpIHtcbiAgJG1pbjogbWFwLWdldCgkYnJlYWtwb2ludHMsICRuYW1lKTtcbiAgQHJldHVybiBpZigkbWluICE9IDAsICRtaW4sIG51bGwpO1xufVxuXG5cblxuXG4vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSpcXFxuICAwMyAtIEJyZWFrcG9pbnQgTWF4aW11bVxuICBUaGUgbWF4aW11bSB2YWx1ZSBpcyByZWR1Y2VkIGJ5IDAuMDJweCB0byB3b3JrIGFyb3VuZCB0aGUgbGltaXRhdGlvbnMgb2YgYG1pbi1gIGFuZCBgbWF4LWAgcHJlZml4ZXMgYW5kIHZpZXdwb3J0c1xuICB3aXRoIGZyYWN0aW9uYWwgd2lkdGhzLiBTZWUgaHR0cHM6Ly93d3cudzMub3JnL1RSL21lZGlhcXVlcmllcy00LyNtcS1taW4tbWF4LiBVc2VzIDAuMDJweCByYXRoZXIgdGhhbiAwLjAxcHggdG8gd29ya1xuICBhcm91bmQgYSBjdXJyZW50IHJvdW5kaW5nIGJ1ZyBpbiBTYWZhcmkuIFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc4MjYxXG4gIC0gQHBhcmFtICRuYW1lOiBTZWxlY3RlZCBicmVha3BvaW50IG5hbWUgYXMgZGVmaW5lZCBpbiBwYXJ0aWFscy9zZXR0aW5ncy9fYnJlYWtwb2ludHMuc2Nzc1xuICAtIEBwYXJhbSAkYnJlYWtwb2ludHM6IEJyZWFrcG9pbnRzIG1hcHBpbmcgdmFsdWVzIGFzIGRlZmluZWQgaW4gcGFydGlhbHMvc2V0dGluZ3MvX2JyZWFrcG9pbnRzLnNjc3NcblxcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbkBmdW5jdGlvbiBicmVha3BvaW50LW1heCgkbmFtZSwgJGJyZWFrcG9pbnRzOiAkZ3JpZC1icmVha3BvaW50cykge1xuICAkbWF4OiBtYXAtZ2V0KCRicmVha3BvaW50cywgJG5hbWUpO1xuICBAcmV0dXJuIGlmKCRtYXggYW5kICRtYXggPiAwLCAkbWF4IC0gLjAyLCBudWxsKTtcbn1cblxuXG5cblxuLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qXFxcbiAgMDQgLSBCcmVha3BvaW50IEluZml4XG4gIFJldHVybnMgYSBibGFuayBzdHJpbmcgaWYgc21hbGxlc3QgYnJlYWtwb2ludCwgb3RoZXJ3aXNlIHJldHVybnMgdGhlIG5hbWUgd2l0aCBhIGRhc2ggaW4gZnJvbnQuIFVzZWZ1bCBmb3IgbWFraW5nXG4gIHJlc3BvbnNpdmUgdXRpbGl0aWVzLlxuICAtIEBwYXJhbSAkbmFtZTogU2VsZWN0ZWQgYnJlYWtwb2ludCBuYW1lIGFzIGRlZmluZWQgaW4gcGFydGlhbHMvc2V0dGluZ3MvX2JyZWFrcG9pbnRzLnNjc3NcbiAgLSBAcGFyYW0gJGJyZWFrcG9pbnRzOiBCcmVha3BvaW50cyBtYXBwaW5nIHZhbHVlcyBhcyBkZWZpbmVkIGluIHBhcnRpYWxzL3NldHRpbmdzL19icmVha3BvaW50cy5zY3NzXG5cXCotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG5AZnVuY3Rpb24gYnJlYWtwb2ludC1pbmZpeCgkbmFtZSwgJGJyZWFrcG9pbnRzOiAkZ3JpZC1icmVha3BvaW50cykge1xuICBAcmV0dXJuIGlmKGJyZWFrcG9pbnQtbWluKCRuYW1lLCAkYnJlYWtwb2ludHMpID09IG51bGwsIFwiXCIsIFwiLSN7JG5hbWV9XCIpO1xufVxuIiwiLyoqXG4gKiBGdW5jdGlvbnMgLSBDYWxjdWxhdGlvbnNcbiAqIFNpbXBsZSBmdW5jdGlvbnMgdG8gaGVscCBkZXZlbG9wZXJzIGNhbGN1bGF0ZSBkaWZmZXJlbnQgdmFsdWVzIGZyb20gcGVyY2VudGFnZXMgdG8gc2l6aW5nIHN1Y2ggYXMgUkVNcy5cbiAqXG4gKiAtIDAxIC0gSW1wb3J0c1xuICogLSAwMiAtIFRhcmdldC9Db250YWluZXIgUGVyY2VudGFnZVxuICogLSAwMyAtIFJFTXNcbiAqL1xuXG5cbi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKlxcXG4gIDAxIC0gSW1wb3J0c1xuXFwqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuQHVzZSAnc2FzczptYXRoJztcblxuXG5cblxuLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qXFxcbiAgMDIgLSBUYXJnZXQvQ29udGFpbmVyIFBlcmNlbnRhZ2VcbiAgQ2FsY3VsYXRlIHRoZSBwZXJjZW50YWdlIG9mIGEgdGFyZ2V0IHNpemUgY29tcGFyZWQgdG8gYSBjb250YWluZXIgc2l6ZS5cbiAgLSBAcGFyYW0gJHRhcmdldDogU2l6ZSBvZiBhbiBlbGVtZW50IG5lZWRpbmcgYSBjYWxjdWxhdGVkIHBlcmNlbnRhZ2UuXG4gIC0gQHBhcmFtICRjb250YWluZXI6IFNpemUgb2YgdGhlIHRhcmdldCdzIGNvbnRhaW5lciwgbmVlZGVkIHRvIGNhbGN1bGF0ZSBwZXJjZW50YWdlLlxuICAtIEBleGFtcGxlID0gd2lkdGg6IGNhbGMtcGVyY2VudCgyNTAsIDEwMDApO1xuXFwqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuQGZ1bmN0aW9uIGNhbGMtcGVyY2VudCgkdGFyZ2V0LCAkY29udGFpbmVyKSB7XG4gIEByZXR1cm4gKCR0YXJnZXQgLyAkY29udGFpbmVyKSAqIDEwMCU7XG59XG5cblxuXG5cbi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKlxcXG4gIDAzIC0gUkVNc1xuICBDYWxjdWxhdGUgYSBzaXplIGludG8gUkVNIHVuaXRzIC0tIG1vc3RseSB1c2VkIGZvciBmb250IHNpemUgcmVuZGVyaW5nLlxuICAtIEBwYXJhbSAkc2l6ZTogU2l6ZSBvZiBhbiBlbGVtZW50IG5lZWRpbmcgYSBjYWxjdWxhdGVkIHNpemUgaW50byBSRU1zLlxuICAtIEBwYXJhbSAkYmFzZTogQmFzZSBmb250IHNpemUgb2YgdGhlIHNpdGUgLS0gZGVmYXVsdHMgdG8gMTZweC5cbiAgLSBAZXhhbXBsZSA9IGZvbnQtc2l6ZTogY2FsYy1yZW0oMjRweCk7XG5cXCotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG4kYmFzZS1mb250LXNpemU6IDE2cHggIWRlZmF1bHQ7XG5cbkBmdW5jdGlvbiByZW0oJHNpemUsICRiYXNlOiAkYmFzZS1mb250LXNpemUpIHtcbiAgJHJlbS1zaXplOiBtYXRoLmRpdigkc2l6ZSwgJGJhc2UpO1xuICBAcmV0dXJuICN7JHJlbS1zaXplfXJlbTtcbn1cbiIsIi8qKlxuICogRnVuY3Rpb25zIC0gQ29sb3JcbiAqIFNpbXBsZSBmdW5jdGlvbnMgdG8gaGVscCBkZXZlbG9wZXJzIGVhc2lseSBncmFiIHByZS1kZWZpbmVkIGNvbG9yIHZhbHVlcyBmcm9tIG1hcHBpbmcgbGlzdHMuXG4gKlxuICogLSAwMSAtIEltcG9ydHNcbiAqIC0gMDIgLSBDb2xvclxuICovXG5cblxuLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qXFxcbiAgMDEgLSBJbXBvcnRzXG5cXCotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG5AdXNlICcuLi9zZXR0aW5ncy9jb2xvcnMnIGFzIGNvbG9ycztcblxuXG5cblxuLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qXFxcbiAgMDIgLSBDb2xvclxuICBNYWluIGZ1bmN0aW9uIGZvciBnZXR0aW5nIGEgcHJlLWRlZmluZWQgY29sb3IgZnJvbSBhIGxpc3Qgb2YgdmFsdWVzLCBhcyBkZWZpbmVkIGluICdwYXJ0aWFscy9zZXR0aW5ncy9fY29sb3JzLnNjc3MuXG4gIC0gQHBhcmFtICRjb2xvcjogVGhlIHNlbGVjdGVkIGNvbG9yLlxuICAtIEBleGFtcGxlID0gYmFja2dyb3VuZC1jb2xvcjogY29sb3IocHJpbWFyeSk7XG5cXCotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG5AZnVuY3Rpb24gY29sb3IoJGNvbG9yKSB7XG4gIEBpZiBtYXAtaGFzLWtleShjb2xvcnMuJGNvbG9ycywgJGNvbG9yKSB7XG4gICAgQHJldHVybiBtYXAtZ2V0KGNvbG9ycy4kY29sb3JzLCAkY29sb3IpO1xuICB9XG5cbiAgQGVsc2Uge1xuICAgIEB3YXJuICdObyB2YWx1ZSBjb3VsZCBiZSByZXRyaWV2ZWQgZm9yIGAjeyRjb2xvcn1gLidcbiAgICArICdQbGVhc2UgbWFrZSBzdXJlIGl0IGlzIGRlZmluZWQgaW4gYCRjb2xvcnNgIG1hcC4nO1xuICB9XG59XG4iLCIvKipcbiAqIEZ1bmN0aW9ucyAtIExheW91dFxuICogU2ltcGxlIGZ1bmN0aW9ucyB0byBoZWxwIGRldmVsb3BlcnMgZWFzaWx5IGdyYWIgcHJlLWRlZmluZWQgbGF5b3V0IHZhbHVlcyBmcm9tIG1hcHBpbmcgbGlzdHMuXG4gKlxuICogLSAwMSAtIEltcG9ydHNcbiAqIC0gMDIgLSBXaWR0aHNcbiAqIC0gMDMgLSBaLWluZGV4XG4gKi9cblxuXG4vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSpcXFxuICAwMSAtIEltcG9ydHNcblxcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbkB1c2UgJy4uL3NldHRpbmdzL2xheW91dCcgYXMgbGF5b3V0O1xuXG5cblxuXG4vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSpcXFxuICAwMiAtIFdpZHRoc1xuICBNYWluIGZ1bmN0aW9uIGZvciBnZXR0aW5nIGEgcHJlLWRlZmluZWQgd2lkdGggZnJvbSBhIGxpc3Qgb2YgdmFsdWVzLCBhcyBkZWZpbmVkIGluICdwYXJ0aWFscy9zZXR0aW5ncy9fbGF5b3V0LnNjc3MuXG4gIC0gQHBhcmFtICR3aWR0aDogVGhlIHNlbGVjdGVkIHdpZHRoIHNpemUuXG4gIC0gQGV4YW1wbGU6IHdpZHRoOiB3aWR0aChsYXJnZSk7XG5cXCotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG5AZnVuY3Rpb24gd2lkdGgoJHNpemUpIHtcbiAgQGlmIG1hcC1oYXMta2V5KGxheW91dC4kd2lkdGhzLCAkc2l6ZSkge1xuICAgIEByZXR1cm4gbWFwLWdldChsYXlvdXQuJHdpZHRocywgJHNpemUpO1xuICB9XG5cbiAgQGVsc2Uge1xuICAgIEB3YXJuICdObyB2YWx1ZSBjb3VsZCBiZSByZXRyaWV2ZWQgZm9yIGAjeyRzaXplfWAuJ1xuICAgICsgJ1BsZWFzZSBtYWtlIHN1cmUgaXQgaXMgZGVmaW5lZCBpbiBgJHotbGF5ZXJzYCBtYXAuJztcbiAgfVxufVxuXG5cblxuXG4vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSpcXFxuICAwMyAtIFotaW5kZXhcbiAgTWFpbiBmdW5jdGlvbiBmb3IgZ2V0dGluZyBhIHByZS1kZWZpbmVkIHotaW5kZXggZnJvbSBhIGxpc3Qgb2YgdmFsdWVzLCBhcyBkZWZpbmVkIGluICdwYXJ0aWFscy9zZXR0aW5ncy9fbGF5b3V0LnNjc3MuXG4gIC0gQHBhcmFtICRrZXk6IFRoZSBzZWxlY3RlZCBsYXllciB0eXBlLlxuICAtIEBleGFtcGxlID0gei1pbmRleDogei1pbmRleChib3R0b21sZXNzLXBpdClcblxcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbkBmdW5jdGlvbiB6LWluZGV4KCRrZXkpIHtcbiAgQGlmIG1hcC1oYXMta2V5KGxheW91dC4kei1sYXllcnMsICRrZXkpIHtcbiAgICBAcmV0dXJuIG1hcC1nZXQobGF5b3V0LiR6LWxheWVycywgJGtleSk7XG4gIH1cblxuICBAZWxzZSB7XG4gICAgQHdhcm4gJ05vIHZhbHVlIGNvdWxkIGJlIHJldHJpZXZlZCBmb3IgYCN7JGtleX1gLidcbiAgICArICdQbGVhc2UgbWFrZSBzdXJlIGl0IGlzIGRlZmluZWQgaW4gYCR6LWxheWVyc2AgbWFwLic7XG4gIH1cbn1cbiIsIi8qKlxuICogRnVuY3Rpb25zIC0gVHlwb2dyYXBoeVxuICogU2ltcGxlIGZ1bmN0aW9ucyB0byBoZWxwIGRldmVsb3BlcnMgZWFzaWx5IGdyYWIgcHJlLWRlZmluZWQgdHlwb2dyYXBoaWNhbCB2YWx1ZXMgZnJvbSBtYXBwaW5nIGxpc3RzLlxuICpcbiAqIC0gMDEgLSBJbXBvcnRzXG4gKiAtIDAyIC0gTGluZSBIZWlnaHRcbiAqL1xuXG5cbi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKlxcXG4gIDAxIC0gSW1wb3J0c1xuXFwqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuQHVzZSAnLi4vc2V0dGluZ3MvdHlwb2dyYXBoeScgYXMgdHlwb2dyYXBoeTtcblxuXG5cblxuLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qXFxcbiAgMDIgLSBMaW5lIEhlaWdodFxuICBNYWluIGZ1bmN0aW9uIGZvciBnZXR0aW5nIGEgcHJlLWRlZmluZWQgTGluZSBIZWlnaHQgZnJvbSBhIGxpc3Qgb2YgdmFsdWVzLCBhcyBkZWZpbmVkIGluXG4gIGBwYXJ0aWFscy9zZXR0aW5ncy9fdHlwb2dyYXBoeS5zY3NzYC5cbiAgLSBAcGFyYW0gJHNpemU6IFRoZSBzZWxlY3RlZCBMaW5lIEhlaWdodCB0eXBlLlxuICAtIEBleGFtcGxlOiBsaW5lLWhlaWdodDogbGluZS1oZWlnaHQoaGVhZGluZyk7XG5cXCotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG5AZnVuY3Rpb24gbGluZS1oZWlnaHQoJHNpemUpIHtcbiAgQGlmIG1hcC1oYXMta2V5KHR5cG9ncmFwaHkuJGxpbmUtaGVpZ2h0cywgJHNpemUpIHtcbiAgICBAcmV0dXJuIG1hcC1nZXQodHlwb2dyYXBoeS4kbGluZS1oZWlnaHRzLCAkc2l6ZSk7XG4gIH1cblxuICBAZWxzZSB7XG4gICAgQHdhcm4gXCJObyB2YWx1ZSBjb3VsZCBiZSByZXRyaWV2ZWQgZm9yIGAjeyRzaXplfWAuIFwiXG4gICAgKyBcIlBsZWFzZSBtYWtlIHN1cmUgaXQgaXMgZGVmaW5lZCBpbiBgJGxpbmUtaGVpZ2h0c2AgbWFwLlwiO1xuICB9XG59XG4iLCIvKipcbiAqIE1peGlucyAtIEJyZWFrcG9pbnRzXG4gKiBVc2UgdGhlc2UgbWl4aW5zIG1haW5seSB3aGVuIGRlZmluaW5nIG1lZGlhIGJyZWFrcG9pbnQgc3BlY2lmaWNhdGlvbnMgaW4gdGhlbWUgZmlsZXMuIEJvdGggc2V0dGluZ3MgYW5kIGZ1bmN0aW9uc1xuICogYXJlIGltcG9ydGVkIGhlcmUgdG8gc3VwcGxlbWVudCB0aGUgbWl4aW5zIHRoZW1zZWx2ZXMuXG4gKlxuICogLSAwMSAtIEltcG9ydHNcbiAqIC0gMDIgLSBNaW5pbXVtIEJyZWFrcG9pbnRcbiAqIC0gMDMgLSBNYXhpbXVtIEJyZWFrcG9pbnRcbiAqIC0gMDQgLSBCZXR3ZWVuIEJyZWFrcG9pbnRcbiAqIC0gMDUgLSBPbmx5IEJyZWFrcG9pbnRcbiAqL1xuXG5cbi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKlxcXG4gIDAxIC0gSW1wb3J0c1xuXFwqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuQHVzZSAnLi4vc2V0dGluZ3MvYnJlYWtwb2ludHMnIGFzIGJwLXNldHRpbmdzO1xuQHVzZSAnLi4vZnVuY3Rpb25zL2JyZWFrcG9pbnRzJyBhcyBicC1mdW5jdGlvbnM7XG5cblxuXG5cbi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKlxcXG4gIDAyIC0gTWluaW11bSBCcmVha3BvaW50XG4gIE1lZGlhL3NjcmVlbi1zaXplIG9mIGF0IGxlYXN0IHRoZSBtaW5pbXVtIGJyZWFrcG9pbnQgd2lkdGggLS0gYXBwbHkgdG8gc2NyZWVuLXNpemVzIGFib3ZlIHRoZSBicmVha3BvaW50IHNwZWNpZmllZC5cbiAgLSBAcGFyYW0gJG5hbWU6IFNlbGVjdGVkIGJyZWFrcG9pbnQgbmFtZSBhcyBkZWZpbmVkIGluIHBhcnRpYWxzL3NldHRpbmdzL19icmVha3BvaW50cy5zY3NzXG4gIC0gQHBhcmFtICRicmVha3BvaW50czogQnJlYWtwb2ludHMgbWFwcGluZyB2YWx1ZXMgYXMgZGVmaW5lZCBpbiBwYXJ0aWFscy9zZXR0aW5ncy9fYnJlYWtwb2ludHMuc2Nzc1xuICAtIEBleGFtcGxlID0gQGluY2x1ZGUgYnAtbWluKGxhcmdlKSB7fVxuXFwqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuQG1peGluIGJwLW1pbigkbmFtZSwgJGJyZWFrcG9pbnRzOiBicC1zZXR0aW5ncy4kZ3JpZC1icmVha3BvaW50cykge1xuICAkbWluOiBicC1mdW5jdGlvbnMuYnJlYWtwb2ludC1taW4oJG5hbWUsICRicmVha3BvaW50cyk7XG4gIEBpZiAkbWluIHtcbiAgICBAbWVkaWEgKG1pbi13aWR0aDogJG1pbikge1xuICAgICAgQGNvbnRlbnQ7XG4gICAgfVxuICB9IEBlbHNlIHtcbiAgICBAY29udGVudDtcbiAgfVxufVxuXG5cblxuXG4vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSpcXFxuICAwMyAtIE1heGltdW0gQnJlYWtwb2ludFxuICBNZWRpYS9zY3JlZW4tc2l6ZSBvZiBhdCBtb3N0IHRoZSBtYXhpbXVtIGJyZWFrcG9pbnQgd2lkdGggLS0gYXBwbHkgdG8gc2NyZWVuLXNpemVzIGJlbG93IHRoZSBicmVha3BvaW50IHNwZWNpZmllZC5cbiAgLSBAcGFyYW0gJG5hbWU6IFNlbGVjdGVkIGJyZWFrcG9pbnQgbmFtZSBhcyBkZWZpbmVkIGluIHBhcnRpYWxzL3NldHRpbmdzL19icmVha3BvaW50cy5zY3NzXG4gIC0gQHBhcmFtICRicmVha3BvaW50czogQnJlYWtwb2ludHMgbWFwcGluZyB2YWx1ZXMgYXMgZGVmaW5lZCBpbiBwYXJ0aWFscy9zZXR0aW5ncy9fYnJlYWtwb2ludHMuc2Nzc1xuICAtIEBleGFtcGxlID0gQGluY2x1ZGUgYnAtbWF4KGxhcmdlKSB7fVxuXFwqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuQG1peGluIGJwLW1heCgkbmFtZSwgJGJyZWFrcG9pbnRzOiBicC1zZXR0aW5ncy4kZ3JpZC1icmVha3BvaW50cykge1xuICAkbWF4OiBicC1mdW5jdGlvbnMuYnJlYWtwb2ludC1tYXgoJG5hbWUsICRicmVha3BvaW50cyk7XG4gIEBpZiAkbWF4IHtcbiAgICBAbWVkaWEgKG1heC13aWR0aDogJG1heCkge1xuICAgICAgQGNvbnRlbnQ7XG4gICAgfVxuICB9IEBlbHNlIHtcbiAgICBAY29udGVudDtcbiAgfVxufVxuXG5cblxuXG4vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSpcXFxuICAwNCAtIEJldHdlZW4gQnJlYWtwb2ludFxuICBNZWRpYS9zY3JlZW4tc2l6ZSB0aGF0IHNwYW5zIG11bHRpcGxlIGJyZWFrcG9pbnQgd2lkdGhzIC0tIGFwcGx5IHRvIHNjcmVlbi1zaXplcyBiZXR3ZWVuIHRoZSBicmVha3BvaW50cyBzcGVjaWZpZWQuXG4gIC0gQHBhcmFtICRsb3dlcjogU2VsZWN0ZWQgbWluaW11bSBicmVha3BvaW50IG5hbWUgYXMgZGVmaW5lZCBpbiBwYXJ0aWFscy9zZXR0aW5ncy9fYnJlYWtwb2ludHMuc2Nzc1xuICAtIEBwYXJhbSAkdXBwZXI6IFNlbGVjdGVkIG1heGltdW0gYnJlYWtwb2ludCBuYW1lIGFzIGRlZmluZWQgaW4gcGFydGlhbHMvc2V0dGluZ3MvX2JyZWFrcG9pbnRzLnNjc3NcbiAgLSBAcGFyYW0gJGJyZWFrcG9pbnRzOiBCcmVha3BvaW50cyBtYXBwaW5nIHZhbHVlcyBhcyBkZWZpbmVkIGluIHBhcnRpYWxzL3NldHRpbmdzL19icmVha3BvaW50cy5zY3NzXG4gIC0gQGV4YW1wbGUgPSBAaW5jbHVkZSBicC1iZXR3ZWVuKHhzbWFsbCwgbGFyZ2UpIHt9XG5cXCotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG5AbWl4aW4gYnAtYmV0d2VlbigkbG93ZXIsICR1cHBlciwgJGJyZWFrcG9pbnRzOiBicC1zZXR0aW5ncy4kZ3JpZC1icmVha3BvaW50cykge1xuICAkbWluOiBicC1mdW5jdGlvbnMuYnJlYWtwb2ludC1taW4oJGxvd2VyLCAkYnJlYWtwb2ludHMpO1xuICAkbWF4OiBicC1mdW5jdGlvbnMuYnJlYWtwb2ludC1tYXgoJHVwcGVyLCAkYnJlYWtwb2ludHMpO1xuXG4gIEBpZiAkbWluICE9IG51bGwgYW5kICRtYXggIT0gbnVsbCB7XG4gICAgQG1lZGlhIChtaW4td2lkdGg6ICRtaW4pIGFuZCAobWF4LXdpZHRoOiAkbWF4KSB7XG4gICAgICBAY29udGVudDtcbiAgICB9XG4gIH0gQGVsc2UgaWYgJG1heCA9PSBudWxsIHtcbiAgICBAaW5jbHVkZSBicC1taW4oJGxvd2VyLCAkYnJlYWtwb2ludHMpIHtcbiAgICAgIEBjb250ZW50O1xuICAgIH1cbiAgfSBAZWxzZSBpZiAkbWluID09IG51bGwge1xuICAgIEBpbmNsdWRlIGJwLW1heCgkdXBwZXIsICRicmVha3BvaW50cykge1xuICAgICAgQGNvbnRlbnQ7XG4gICAgfVxuICB9XG59XG5cblxuXG5cbi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKlxcXG4gIDA1IC0gT25seSBCcmVha3BvaW50XG4gIE1lZGlhL3NjcmVlbi1zaXplIGJldHdlZW4gdGhlIGJyZWFrcG9pbnQncyBtaW5pbXVtIGFuZCBtYXhpbXVtIHdpZHRocyAtLSBObyBtaW5pbXVtIGZvciB0aGUgc21hbGxlc3QgYnJlYWtwb2ludCwgYW5kXG4gIG5vIG1heGltdW0gZm9yIHRoZSBsYXJnZXN0IG9uZS5cbiAgLSBAcGFyYW0gJG5hbWU6IFNlbGVjdGVkIGJyZWFrcG9pbnQgbmFtZSBhcyBkZWZpbmVkIGluIHBhcnRpYWxzL3NldHRpbmdzL19icmVha3BvaW50cy5zY3NzXG4gIC0gQHBhcmFtICRicmVha3BvaW50czogQnJlYWtwb2ludHMgbWFwcGluZyB2YWx1ZXMgYXMgZGVmaW5lZCBpbiBwYXJ0aWFscy9zZXR0aW5ncy9fYnJlYWtwb2ludHMuc2Nzc1xuICAtIEBleGFtcGxlID0gQGluY2x1ZGUgYnAtb25seShsYXJnZSkge31cblxcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbkBtaXhpbiBicC1vbmx5KCRuYW1lLCAkYnJlYWtwb2ludHM6IGJwLXNldHRpbmdzLiRncmlkLWJyZWFrcG9pbnRzKSB7XG4gICRtaW46IGJwLWZ1bmN0aW9ucy5icmVha3BvaW50LW1pbigkbmFtZSwgJGJyZWFrcG9pbnRzKTtcbiAgJG1heDogYnAtZnVuY3Rpb25zLmJyZWFrcG9pbnQtbWF4KCRuYW1lLCAkYnJlYWtwb2ludHMpO1xuXG4gIEBpZiAkbWluICE9IG51bGwgYW5kICRtYXggIT0gbnVsbCB7XG4gICAgQG1lZGlhIChtaW4td2lkdGg6ICRtaW4pIGFuZCAobWF4LXdpZHRoOiAkbWF4KSB7XG4gICAgICBAY29udGVudDtcbiAgICB9XG4gIH0gQGVsc2UgaWYgJG1heCA9PSBudWxsIHtcbiAgICBAaW5jbHVkZSBicC1taW4oJG5hbWUsICRicmVha3BvaW50cykge1xuICAgICAgQGNvbnRlbnQ7XG4gICAgfVxuICB9IEBlbHNlIGlmICRtaW4gPT0gbnVsbCB7XG4gICAgQGluY2x1ZGUgYnAtbWF4KCRuYW1lLCAkYnJlYWtwb2ludHMpIHtcbiAgICAgIEBjb250ZW50O1xuICAgIH1cbiAgfVxufVxuIiwiLyoqXG4gKiBNaXhpbnMgLSBMaXN0c1xuICogVXNlIHRoZXNlIG1peGlucyB3aGVuIG5lZWRpbmcgdG8gZWFzaWx5IGRlZmluZSBsaXN0cyBzdHlsZXMuXG4gKlxuICogLSAwMSAtIEJhc2VcbiAqIC0gMDIgLSBCdWxsZXRzXG4gKiAtIDAzIC0gTnVtYmVyZWRcbiAqIC0gMDQgLSBObyBCdWxsZXRzXG4gKiAtIDA1IC0gSW5saW5lXG4gKiAtIDA2IC0gUnVsZWRcbiAqL1xuXG5cbi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKlxcXG4gIDAxIC0gQmFzZVxuXFwqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuQG1peGluIGxpc3QtLXJlc2V0IHtcbiAgbGlzdC1zdHlsZTogbm9uZTtcbiAgbWFyZ2luLWxlZnQ6IDA7XG4gIHBhZGRpbmctbGVmdDogMDtcbn1cblxuXG5cblxuLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qXFxcbiAgMDIgLSBCdWxsZXRzXG5cXCotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG5AbWl4aW4gbGlzdC0tYnVsbGV0cygkaXRlbS1zZWxlY3RvcjogbGkpIHtcbiAgQGluY2x1ZGUgbGlzdC0tcmVzZXQ7XG5cbiAgPiAjeyRpdGVtLXNlbGVjdG9yfTpiZWZvcmUge1xuICAgIGNvbnRlbnQ6IFwiXFwyMDIyXCI7XG4gICAgZm9udC13ZWlnaHQ6IHZhcigtLWZvbnQtd2VpZ2h0LWJvbGQpO1xuICB9XG5cbiAgdWwge1xuICAgIG1hcmdpbi10b3A6IDZweDtcbiAgICBwYWRkaW5nLWxlZnQ6IHZhcigtLXNwYWNlLWluZGVudCk7XG4gIH1cbn1cblxuXG5cblxuLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qXFxcbiAgMDMgLSBOdW1iZXJlZFxuXFwqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuQG1peGluIGxpc3QtLW51bWJlcmVkKCRpdGVtLXNlbGVjdG9yOiBsaSkge1xuICBAaW5jbHVkZSBsaXN0LS1yZXNldDtcbiAgY291bnRlci1yZXNldDogbnVtYmVyO1xuXG4gID4gI3skaXRlbS1zZWxlY3Rvcn06YmVmb3JlIHtcbiAgICBjb250ZW50OiBjb3VudGVycyhudW1iZXIsIFwiLlwiKSBcIi5cIjtcbiAgICBjb3VudGVyLWluY3JlbWVudDogbnVtYmVyO1xuICB9XG5cbiAgLy8gU2Vjb25kIExldmVsXG4gIG9sIHtcbiAgICBtYXJnaW4tdG9wOiA2cHg7XG4gICAgcGFkZGluZy1sZWZ0OiAzMHB4O1xuXG4gICAgPiAjeyRpdGVtLXNlbGVjdG9yfSB7XG4gICAgICBwYWRkaW5nLWxlZnQ6IDA7XG4gICAgICB0ZXh0LWluZGVudDogLTMwcHg7XG5cbiAgICAgICY6YmVmb3JlIHtcbiAgICAgICAgZGlzcGxheTogaW5saW5lO1xuICAgICAgICBtYXJnaW4tcmlnaHQ6IC41ZW07XG4gICAgICAgIHBvc2l0aW9uOiBzdGF0aWM7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cblxuXG5cbi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKlxcXG4gIDA0IC0gTm8gQnVsbGV0c1xuXFwqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuQG1peGluIGxpc3QtLW5vLWJ1bGxldHMoJGl0ZW0tc2VsZWN0b3I6IGxpKSB7XG4gIG1hcmdpbjogMDtcbiAgcGFkZGluZzogMDtcblxuICA+ICN7JGl0ZW0tc2VsZWN0b3J9IHtcbiAgICBsaXN0LXN0eWxlOiBub25lO1xuICB9XG59XG5cblxuXG5cbi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKlxcXG4gIDA1IC0gSW5saW5lXG5cXCotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG5AbWl4aW4gbGlzdC0taW5saW5lKCRpdGVtLXNlbGVjdG9yOiBsaSkge1xuICA+ICN7JGl0ZW0tc2VsZWN0b3J9IHtcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIH1cbn1cblxuXG5cblxuLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qXFxcbiAgMDYgLSBSdWxlZFxuXFwqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuQG1peGluIGxpc3QtLXJ1bGVkIChcbiAgJHNwYWNpbmc6IDJlbSxcbiAgJHN0eWxlOiBcImlubmVyXCIsXG4gICRib3JkZXItY29sb3I6IHZhcigtLWJvcmRlci1jb2xvciksXG4gICRib3JkZXItc2l6ZTogMXB4LFxuICAkYm9yZGVyLXN0eWxlOiBzb2xpZCxcbiAgJGl0ZW0tc2VsZWN0b3I6IGxpXG4pIHtcbiAgQGluY2x1ZGUgbGlzdC0tbm8tYnVsbGV0cztcblxuICBAaWYgKCRzdHlsZSA9PSBpbm5lciBvciAkc3R5bGUgPT0gYWJvdmUpIHtcbiAgICA+ICN7JGl0ZW0tc2VsZWN0b3J9IHtcbiAgICAgIGJvcmRlci10b3A6ICRib3JkZXItc2l6ZSAkYm9yZGVyLXN0eWxlICRib3JkZXItY29sb3I7XG4gICAgICBtYXJnaW4tdG9wOiAkc3BhY2luZztcbiAgICAgIHBhZGRpbmctdG9wOiAkc3BhY2luZztcbiAgICB9XG5cbiAgICBAaWYgKCRzdHlsZSA9PSBpbm5lcikge1xuICAgICAgPiAjeyRpdGVtLXNlbGVjdG9yfTpmaXJzdC1jaGlsZCB7XG4gICAgICAgIGJvcmRlci10b3A6IDA7XG4gICAgICAgIG1hcmdpbi10b3A6IDA7XG4gICAgICAgIHBhZGRpbmctdG9wOiAwO1xuICAgICAgfVxuICAgIH1cbiAgICBAZWxzZSB7XG4gICAgICA+ICN7JGl0ZW0tc2VsZWN0b3J9OmZpcnN0LWNoaWxkIHtcbiAgICAgICAgbWFyZ2luLXRvcDogMDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBAaWYgKCRzdHlsZSA9PSBvdXRlciBvciAkc3R5bGUgPT0gYmVsb3cpIHtcbiAgICA+ICN7JGl0ZW0tc2VsZWN0b3J9IHtcbiAgICAgIGJvcmRlci1ib3R0b206ICRib3JkZXItc2l6ZSAkYm9yZGVyLXN0eWxlICRib3JkZXItY29sb3I7XG4gICAgICBtYXJnaW4tYm90dG9tOiAkc3BhY2luZztcbiAgICAgIHBhZGRpbmctYm90dG9tOiAkc3BhY2luZztcbiAgICB9XG5cbiAgICBAaWYgKCRzdHlsZSA9PSBvdXRlcikge1xuICAgICAgPiAjeyRpdGVtLXNlbGVjdG9yfTpmaXJzdC1jaGlsZCB7XG4gICAgICAgIGJvcmRlci10b3A6ICRib3JkZXItc2l6ZSAkYm9yZGVyLXN0eWxlICRib3JkZXItY29sb3I7XG4gICAgICAgIHBhZGRpbmctdG9wOiAkc3BhY2luZztcbiAgICAgIH1cbiAgICB9XG4gICAgQGVsc2Uge1xuICAgICAgPiAjeyRpdGVtLXNlbGVjdG9yfTpsYXN0LWNoaWxkIHtcbiAgICAgICAgbWFyZ2luLWJvdHRvbTogMDtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiIsIi8qKlxuICogTWl4aW5zIC0gVHlwb2dyYXBoeVxuICogVXNlIHRoZXNlIG1peGlucyB3aGVuIG5lZWRpbmcgdG8gZWFzaWx5IGRlZmluZSB0eXBvZ3JhcGh5IHN0eWxlcywgc3VjaCBhcyBzaXplcyBhbmQgdHlwb2dyYXBoaWNhbCBsYXlvdXQuXG4gKlxuICogLSAwMSAtIEltcG9ydHNcbiAqIC0gMDIgLSBIZWFkaW5nIFNpemVcbiAqL1xuXG5cbi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKlxcXG4gIDAxIC0gSW1wb3J0c1xuXFwqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuQHVzZSAnYnJlYWtwb2ludHMnIGFzIGJyZWFrcG9pbnRzO1xuQHVzZSAnLi4vZnVuY3Rpb25zL2NhbGN1bGF0aW9ucycgYXMgY2FsY3VsYXRpb25zO1xuQHVzZSAnLi4vc2V0dGluZ3MvdHlwb2dyYXBoeScgYXMgdHlwb2dyYXBoeTtcblxuXG5cblxuLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qXFxcbiAgMDIgLSBIZWFkaW5nIFNpemVcbiAgTWVhbnQgZm9yIHJlc3BvbnNpdmUgaGVhZGluZyBzaXplcyBhbmQgaXMgYmFzZWQgdXBvbiBicmVha3BvaW50cyBhbmQgYSBtYXBwaW5nIG9mIGhlYWRpbmcgc2l6ZXMuIEJyZWFrcG9pbnRzIGFyZVxuICBkZWZpbmVkIGluIHRoZSBgcGFydGlhbHMvc2V0dGluZ3MvX2JyZWFrcG9pbnRzLnNjc3NgIGZpbGUgYW5kIGFyZSB1dGlsaXplZCB3aXRoIGEgbWl4aW4sIGFzIGRlZmluZWQgaW5cbiAgYHBhcnRpYWxzL21peGlucy9fYnJlYWtwb2ludHMuc2Nzc2AuXG4gIC0gQHBhcmFtICRzZXR0aW5nOiBTZWxlY3RlZCBoZWFkaW5nIHRvIGFwcGx5IHJlc3BvbnNpdmUgc2l6aW5nIHRvLlxuXFwqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuQG1peGluIGhlYWRpbmctc2l6ZSgkc2V0dGluZykge1xuICBAZWFjaCAkc2l6ZSwgJGVsZW1lbnRzIGluIHR5cG9ncmFwaHkuJGhlYWRpbmctc2l6ZXMge1xuICAgIEBpbmNsdWRlIGJyZWFrcG9pbnRzLmJwLW1pbigkc2l6ZSkge1xuICAgICAgZm9udC1zaXplOiBjYWxjdWxhdGlvbnMucmVtKG1hcC1nZXQobWFwLWdldCgkZWxlbWVudHMsICRzZXR0aW5nKSwgJ2ZvbnQtc2l6ZScpKTtcbiAgICB9XG4gIH1cbn1cbiIsIkBpbXBvcnQgXCJfcGFydGlhbHNcIjtcblxuaW1nIHtcbiAgbWF4LXdpZHRoOiAxMDAlO1xuICBoZWlnaHQ6IGF1dG87XG59XG5cbmZpZ3VyZSB7XG4gIG1hcmdpbjogMDtcblxuICBpbWcge1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICB9XG59XG5cbmZpZ2NhcHRpb24ge1xuICBtYXJnaW46IDFlbSAwO1xufVxuXG4vLyBXaWR0aCAyNSVcbi5kcnVwYWwtbWVkaWEuY2std2lkZ2V0W2RhdGEtdmlldy1tb2RlPVwiZW1iZWQyNVwiXSxcbi5kcnVwYWwtbWVkaWEuY2std2lkZ2V0W2RhdGEtdmlldy1tb2RlPVwiZW1iZWRfNF8zXzI1XCJdLFxuLmRydXBhbC1tZWRpYS5jay13aWRnZXRbZGF0YS12aWV3LW1vZGU9XCJlbWJlZF8xXzFfMjVcIl0sXG4uZHJ1cGFsLW1lZGlhLmNrLXdpZGdldFtkYXRhLXZpZXctbW9kZT1cImVtYmVkXzE2XzlfMjVcIl0ge1xuICBAaW5jbHVkZSBicC1taW4obWVkaXVtKSB7XG4gICAgbWF4LXdpZHRoOiBjYWxjKDEwMCUgLSA3NSUpO1xuICAgIC5tZWRpYS0tdmlldy1tb2RlLS1lbWJlZDI1LFxuICAgIC5tZWRpYS0tdmlldy1tb2RlLS1lbWJlZC00LTMtMjUsXG4gICAgLm1lZGlhLS12aWV3LW1vZGUtLWVtYmVkLTEtMS0yNSxcbiAgICAubWVkaWEtLXZpZXctbW9kZS0tZW1iZWQtMTYtOS0yNSB7XG4gICAgICBtYXgtd2lkdGg6IDEwMCU7XG4gICAgfVxuICB9XG59XG5cbi5tZWRpYS0tdmlldy1tb2RlLS1lbWJlZDI1LFxuLm1lZGlhLS12aWV3LW1vZGUtLWVtYmVkLTQtMy0yNSxcbi5tZWRpYS0tdmlldy1tb2RlLS1lbWJlZC0xLTEtMjUsXG4ubWVkaWEtLXZpZXctbW9kZS0tZW1iZWQtMTYtOS0yNSB7XG4gIEBpbmNsdWRlIGJwLW1pbihtZWRpdW0pIHtcbiAgICBtYXgtd2lkdGg6IGNhbGMoMTAwJSAtIDc1JSk7XG4gIH1cbn1cblxuLy8gV2lkdGggMzMlXG4uZHJ1cGFsLW1lZGlhLmNrLXdpZGdldFtkYXRhLXZpZXctbW9kZT1cImVtYmVkMzNcIl0sXG4uZHJ1cGFsLW1lZGlhLmNrLXdpZGdldFtkYXRhLXZpZXctbW9kZT1cImVtYmVkXzRfM18zM1wiXSxcbi5kcnVwYWwtbWVkaWEuY2std2lkZ2V0W2RhdGEtdmlldy1tb2RlPVwiZW1iZWRfMV8xXzMzXCJdLFxuLmRydXBhbC1tZWRpYS5jay13aWRnZXRbZGF0YS12aWV3LW1vZGU9XCJlbWJlZF8xNl85XzMzXCJdIHtcbiAgQGluY2x1ZGUgYnAtbWluKG1lZGl1bSkge1xuICAgIG1heC13aWR0aDogY2FsYygxMDAlIC0gNjclKTtcbiAgICAubWVkaWEtLXZpZXctbW9kZS0tZW1iZWQzMyxcbiAgICAubWVkaWEtLXZpZXctbW9kZS0tZW1iZWQtNC0zLTMzLFxuICAgIC5tZWRpYS0tdmlldy1tb2RlLS1lbWJlZC0xLTEtMzMsXG4gICAgLm1lZGlhLS12aWV3LW1vZGUtLWVtYmVkLTE2LTktMzMge1xuICAgICAgbWF4LXdpZHRoOiAxMDAlO1xuICAgIH1cbiAgfVxufVxuXG4ubWVkaWEtLXZpZXctbW9kZS0tZW1iZWQzMyxcbi5tZWRpYS0tdmlldy1tb2RlLS1lbWJlZC00LTMtMzMsXG4ubWVkaWEtLXZpZXctbW9kZS0tZW1iZWQtMS0xLTMzLFxuLm1lZGlhLS12aWV3LW1vZGUtLWVtYmVkLTE2LTktMzMge1xuICBAaW5jbHVkZSBicC1taW4obWVkaXVtKSB7XG4gICAgbWF4LXdpZHRoOiBjYWxjKDEwMCUgLSA2NyUpO1xuICB9XG59XG5cbi8vIDUwJSB3aWR0aFxuLmRydXBhbC1tZWRpYS5jay13aWRnZXRbZGF0YS12aWV3LW1vZGU9XCJlbWJlZDUwXCJdLFxuLmRydXBhbC1tZWRpYS5jay13aWRnZXRbZGF0YS12aWV3LW1vZGU9XCJlbWJlZF80XzNfNTBcIl0sXG4uZHJ1cGFsLW1lZGlhLmNrLXdpZGdldFtkYXRhLXZpZXctbW9kZT1cImVtYmVkXzFfMV81MFwiXSxcbi5kcnVwYWwtbWVkaWEuY2std2lkZ2V0W2RhdGEtdmlldy1tb2RlPVwiZW1iZWRfMTZfOV81MFwiXSB7XG4gIEBpbmNsdWRlIGJwLW1pbihtZWRpdW0pIHtcbiAgICBtYXgtd2lkdGg6IGNhbGMoMTAwJSAtIDUwJSk7XG4gICAgLm1lZGlhLS12aWV3LW1vZGUtLWVtYmVkNTAsXG4gICAgLm1lZGlhLS12aWV3LW1vZGUtLWVtYmVkLTQtMy01MCxcbiAgICAubWVkaWEtLXZpZXctbW9kZS0tZW1iZWQtMS0xLTUwLFxuICAgIC5tZWRpYS0tdmlldy1tb2RlLS1lbWJlZC0xNi05LTUwIHtcbiAgICAgIG1heC13aWR0aDogMTAwJTtcbiAgICB9XG4gIH1cbn1cbi5tZWRpYS0tdmlldy1tb2RlLS1lbWJlZDUwLFxuLm1lZGlhLS12aWV3LW1vZGUtLWVtYmVkLTQtMy01MCxcbi5tZWRpYS0tdmlldy1tb2RlLS1lbWJlZC0xLTEtNTAsXG4ubWVkaWEtLXZpZXctbW9kZS0tZW1iZWQtMTYtOS01MCB7XG4gIEBpbmNsdWRlIGJwLW1pbihtZWRpdW0pIHtcbiAgICBtYXgtd2lkdGg6IGNhbGMoMTAwJSAtIDUwJSk7XG4gIH1cbn1cblxuLy8gNjclIHdpZHRoXG4uZHJ1cGFsLW1lZGlhLmNrLXdpZGdldFtkYXRhLXZpZXctbW9kZT1cImVtYmVkNjdcIl0sXG4uZHJ1cGFsLW1lZGlhLmNrLXdpZGdldFtkYXRhLXZpZXctbW9kZT1cImVtYmVkXzRfM182N1wiXSxcbi5kcnVwYWwtbWVkaWEuY2std2lkZ2V0W2RhdGEtdmlldy1tb2RlPVwiZW1iZWRfMV8xXzY3XCJdLFxuLmRydXBhbC1tZWRpYS5jay13aWRnZXRbZGF0YS12aWV3LW1vZGU9XCJlbWJlZF8xNl85XzY3XCJdIHtcbiAgQGluY2x1ZGUgYnAtbWluKG1lZGl1bSkge1xuICAgIG1heC13aWR0aDogY2FsYygxMDAlIC0gMzMlKTtcbiAgICAubWVkaWEtLXZpZXctbW9kZS0tZW1iZWQ2NyxcbiAgICAubWVkaWEtLXZpZXctbW9kZS0tZW1iZWQtNC0zLTY3LFxuICAgIC5tZWRpYS0tdmlldy1tb2RlLS1lbWJlZC0xLTEtNjcsXG4gICAgLm1lZGlhLS12aWV3LW1vZGUtLWVtYmVkLTE2LTktNjcge1xuICAgICAgbWF4LXdpZHRoOiAxMDAlO1xuICAgIH1cbiAgfVxufVxuXG4ubWVkaWEtLXZpZXctbW9kZS0tZW1iZWQ2Nyxcbi5tZWRpYS0tdmlldy1tb2RlLS1lbWJlZC00LTMtNjcsXG4ubWVkaWEtLXZpZXctbW9kZS0tZW1iZWQtMS0xLTY3LFxuLm1lZGlhLS12aWV3LW1vZGUtLWVtYmVkLTE2LTktNjcge1xuICBAaW5jbHVkZSBicC1taW4obWVkaXVtKSB7XG4gICAgbWF4LXdpZHRoOiBjYWxjKDEwMCUgLSAzMyUpO1xuICB9XG59XG5cbi8vIFdpZHRoIDc1JVxuLmRydXBhbC1tZWRpYS5jay13aWRnZXRbZGF0YS12aWV3LW1vZGU9XCJlbWJlZDc1XCJdLFxuLmRydXBhbC1tZWRpYS5jay13aWRnZXRbZGF0YS12aWV3LW1vZGU9XCJlbWJlZF80XzNfNzVcIl0sXG4uZHJ1cGFsLW1lZGlhLmNrLXdpZGdldFtkYXRhLXZpZXctbW9kZT1cImVtYmVkXzFfMV83NVwiXSxcbi5kcnVwYWwtbWVkaWEuY2std2lkZ2V0W2RhdGEtdmlldy1tb2RlPVwiZW1iZWRfMTZfOV83NVwiXSB7XG4gIEBpbmNsdWRlIGJwLW1pbihtZWRpdW0pIHtcbiAgICBtYXgtd2lkdGg6IGNhbGMoMTAwJSAtIDI1JSk7XG4gICAgLm1lZGlhLS12aWV3LW1vZGUtLWVtYmVkNzUsXG4gICAgLm1lZGlhLS12aWV3LW1vZGUtLWVtYmVkLTQtMy03NSxcbiAgICAubWVkaWEtLXZpZXctbW9kZS0tZW1iZWQtMS0xLTc1LFxuICAgIC5tZWRpYS0tdmlldy1tb2RlLS1lbWJlZC0xNi05LTc1IHtcbiAgICAgIG1heC13aWR0aDogMTAwJTtcbiAgICB9XG4gIH1cbn1cblxuLm1lZGlhLS12aWV3LW1vZGUtLWVtYmVkNzUsXG4ubWVkaWEtLXZpZXctbW9kZS0tZW1iZWQtNC0zLTc1LFxuLm1lZGlhLS12aWV3LW1vZGUtLWVtYmVkLTEtMS03NSxcbi5tZWRpYS0tdmlldy1tb2RlLS1lbWJlZC0xNi05LTc1IHtcbiAgQGluY2x1ZGUgYnAtbWluKG1lZGl1bSkge1xuICAgIG1heC13aWR0aDogY2FsYygxMDAlIC0gMjUlKTtcbiAgfVxufVxuIiwiLyoqXG4gKiBTZXR0aW5ncyAtIEFuaW1hdGlvbnNcbiAqIFN0YW5kYXJkIHNldHMgb2YgYW5pbWF0aW9uIHZhcmlhYmxlcyBhbmQgbWFwcGluZ3MgdG8gYmUgb2YgdXNlIGFjcm9zcyB0aGUgc2l0ZSwgZm9yIGNvbnNpc3RlbmN5IGFuZCBhY2N1cmFjeS5cbiAqXG4gKiAtIDAxIC0gVHJhbnNpdGlvbnNcbiAqL1xuLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qXFxcbiAgMDEgLSBUcmFuc2l0aW9uc1xuXFwqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cbi8qKlxuICogU2V0dGluZ3MgLSBCcmVha3BvaW50c1xuICogLSAwMSAtIE1hcHBpbmdcbiAqL1xuLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qXFxcbiAgMDEgLSBNYXBwaW5nXG4gIERlZmF1bHQgbWFwcGluZyBvZiBncmlkIGJyZWFrcG9pbnRzLCB3aGljaCBpcyB1c2VkIGluIHRoZSBmdW5jdGlvbiBhbmQgbWl4aW4gYnJlYWtwb2ludCBmaWxlcy4gQW4gZXhhbXBsZSBvZiB1c2luZ1xuICBicmVha3BvaW50cyBpbiBhIGZpbGUgaXMgYnkgdXNpbmcgdGhlIG1peGluIHdpdGggdGhlIG5hbWUgb2YgYSBicmVha3BvaW50OiBgQGluY2x1ZGUgYnAtbWluKHNtYWxsKSB7fWAuXG5cbiAgVGhlc2UgYnJlYWtwb2ludHMgbWF5IGJlIGFsdGVyZWQgZGVwZW5kaW5nIG9uIHRoZSB0aGVtZSBuZWVkcy5cblxcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG4vKipcbiAqIFNldHRpbmdzIC0gQ29sb3JcbiAqIFN0YW5kYXJkIHNldHMgb2YgY29sb3IgdmFyaWFibGVzIGFuZCBtYXBwaW5ncyB0byBiZSBvZiB1c2UgYWNyb3NzIHRoZSBzaXRlLCBmb3IgY29uc2lzdGVuY3kgYW5kIGFjY3VyYWN5LlxuICpcbiAqIC0gMDEgLSBUaGVtZSBDb2xvcnNcbiAqIC0gMDIgLSBHcmF5c2NhbGVcbiAqIC0gMDMgLSBVdGlsaXRpZXNcbiAqIC0gMDQgLSBNYXBwaW5nXG4gKi9cbi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKlxcXG4gIDAxIC0gVGhlbWUgQ29sb3JzXG5cXCotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qXFxcbiAgMDIgLSBHcmF5c2NhbGVcblxcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG4vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSpcXFxuICAwMyAtIFV0aWxpdGllc1xuXFwqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cbi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKlxcXG4gIDA0IC0gTWFwcGluZ1xuXFwqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cbi8qKlxuICogU2V0dGluZ3MgLSBMYXlvdXRcbiAqIFN0YW5kYXJkIHNldHMgb2YgbGF5b3V0IHZhcmlhYmxlcyBhbmQgbWFwcGluZ3MgdG8gYmUgb2YgdXNlIGFjcm9zcyB0aGUgc2l0ZSwgZm9yIGNvbnNpc3RlbmN5IGFuZCBhY2N1cmFjeS5cbiAqXG4gKiAtIDAxIC0gR3JpZFxuICogLSAwMiAtIFdpZHRoc1xuICogLSAwMyAtIExheWVyc1xuICovXG4vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSpcXFxuICAwMSAtIEdyaWRcblxcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG4vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSpcXFxuICAwMSAtIFdpZHRoc1xuICAvLyAneHhsYXJnZSc6ICAxOTIwcHgsXG4gIC8vICd4bGFyZ2UnOiAgIDE0NDBweCxcbiAgLy8gJ2xhcmdlJzogICAgMTI4MHB4LFxuICAvLyAnbWVkaXVtJzogICA5NjBweCxcbiAgLy8gJ3NtYWxsJzogICAgNzY4cHgsXG4gIC8vICd4c21hbGwnOiAgIDY0MHB4LFxuICAvLyAneHhzbWFsbCc6ICA0ODBweCxcblxcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG4vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSpcXFxuICAwMyAtIExheWVyc1xuXFwqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cbi8qKlxuICogU2V0dGluZ3MgLSBUeXBvZ3JhcGh5XG4gKiBTdGFuZGFyZCBzZXRzIG9mIHR5cG9ncmFwaGljYWwgdmFyaWFibGVzIGFuZCBtYXBwaW5ncyB0byBiZSBvZiB1c2UgYWNyb3NzIHRoZSBzaXRlLCBmb3IgY29uc2lzdGVuY3kgYW5kIGFjY3VyYWN5LlxuICpcbiAqIC0gMDEgLSBIZWFkaW5nIFNpemVzXG4gKiAtIDAyIC0gTGluZSBIZWlnaHRzXG4gKi9cbi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKlxcXG4gIDAxIC0gSGVhZGluZyBTaXplc1xuXFwqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cbi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKlxcXG4gIDAxIC0gTGluZSBIZWlnaHRzXG5cXCotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuLyoqXG4gKiBQYXJ0aWFscyBDb21iaW5lZFxuICogUGFydGlhbHMgY2FuIGJlIGltcG9ydGVkIGludG8gdGhlbWUgZmlsZXMgZWl0aGVyIG9uZSBieSBvbmUsIG9yIGJ5IHVzaW5nIHRoaXMgY29tYmluZWQgUGFydGlhbHMgZmlsZS4gVG8gdXNlIHRoaXNcbiAqIGZpbGUgYXMgdGhlIGltcG9ydCBzdGF0ZW1lbnQsIGBAdXNlICdbcGF0aF0vcGFydGlhbHMvcGFydGlhbHMnIGFzICpgLlxuICpcbiAqIC0gMDEgLSBTZXR0aW5nc1xuICogLSAwMiAtIEZ1bmN0aW9uc1xuICogLSAwMyAtIE1peGluc1xuICovXG4vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSpcXFxuICAwMSAtIFNldHRpbmdzXG5cXCotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuLyoqXG4gKiBGdW5jdGlvbnMgLSBBbmltYXRpb25zXG4gKiBTaW1wbGUgZnVuY3Rpb25zIHRvIGhlbHAgZGV2ZWxvcGVycyBlYXNpbHkgZ3JhYiBwcmUtZGVmaW5lZCBhbmltYXRpb24gdmFsdWVzIGZyb20gbWFwcGluZyBsaXN0cy5cbiAqXG4gKiAtIDAxIC0gSW1wb3J0c1xuICogLSAwMiAtIFRyYW5zaXRpb25cbiAqL1xuLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qXFxcbiAgMDEgLSBJbXBvcnRzXG5cXCotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qXFxcbiAgMDIgLSBUcmFuc2l0aW9uXG4gIEVhc3kgdG8gdXNlIGZ1bmN0aW9uIHRvIHF1aWNrbHkgZGVmaW5lIGEgdHJhbnNpdGlvbiB3aXRoIHRoZSBhYmlsaXR5IHRvIHJlZmVyZW5jZSBhIGxpYnJhcnkgbWFwcGluZyBvZiBiZXppZXItY3VydmVcbiAgYW5pbWF0aW9ucywgYXMgZGVmaW5lZCBpbiBgcGFydGlhbHMvc2V0dGluZ3MvX2FuaW1hdGlvbnMuc2Nzc2AuXG4gIC0gQHBhcmFtICRhcmd1bWVudDogU3R5bGUgYXJndW1lbnRzIHRoYXQgdGhpcyB0cmFuc2l0aW9uIHNob3VsZCBiZSBhcHBsaWVkIHRvLlxuICAtIEBwYXJhbSAkZHVyYXRpb246IFRoZSBsZW5ndGggb2YgdGltZSB0aGUgdHJhbnNpdGlvbiBzaG91bGQgdGFrZSBwbGFjZS5cbiAgLSBAcGFyYW0gJHN0eWxlOiBUaGUgc3R5bGUgb2YgdHJhbnNpdGlvbiwgYXMgZGVmaW5lZCBpbiBgcGFydGlhbHMvc2V0dGluZ3MvX2FuaW1hdGlvbnMuc2Nzc2BcbiAgLSBAZXhhbXBsZSA9IHRyYW5zaXRpb246IHRyYW5zaXRpb24oYWxsLCAwLjZzLCBlYXNlSW5PdXRTaW5lKVxuXFwqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cbi8qKlxuICogRnVuY3Rpb25zIC0gQnJlYWtwb2ludHNcbiAqIEJyZWFrcG9pbnQgdmlld3BvcnQgc2l6ZXMgYW5kIG1lZGlhIHF1ZXJpZXMuIEJyZWFrcG9pbnRzIGFyZSBkZWZpbmVkIGFzIGEgbWFwIG9mIChuYW1lOiBtaW5pbXVtIHdpZHRoKSwgb3JkZXIgZnJvbVxuICogeHNtYWxsIHRvIHhsYXJnZTogKHhzOiAwLCBzbTogNTc2cHgsIG1kOiA3NjhweCwgbGc6IDk5MnB4LCB4bDogMTIwMHB4KS4gVGhlIG1hcCBkZWZpbmVkIGluIHRoZSBgJGdyaWQtYnJlYWtwb2ludHNgXG4gKiBnbG9iYWwgdmFyaWFibGUgaXMgdXNlZCBhcyB0aGUgYCRicmVha3BvaW50c2AgYXJndW1lbnQgYnkgZGVmYXVsdC5cbiAqXG4gKiAtIDAxIC0gQnJlYWtwb2ludCBOZXh0XG4gKiAtIDAyIC0gQnJlYWtwb2ludCBNaW5pbXVtXG4gKiAtIDAzIC0gQnJlYWtwb2ludCBNYXhpbXVtXG4gKiAtIDA0IC0gQnJlYWtwb2ludCBJbmZpeFxuICovXG4vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSpcXFxuICAwMSAtIEJyZWFrcG9pbnQgTmV4dFxuICBOYW1lIG9mIHRoZSBuZXh0IGJyZWFrcG9pbnQsIG9yIG51bGwgZm9yIHRoZSBsYXN0IGJyZWFrcG9pbnQuXG4gIC0gQHBhcmFtICRuYW1lOiBTZWxlY3RlZCBicmVha3BvaW50IG5hbWUgYXMgZGVmaW5lZCBpbiBwYXJ0aWFscy9zZXR0aW5ncy9fYnJlYWtwb2ludHMuc2Nzc1xuICAtIEBwYXJhbSAkYnJlYWtwb2ludHM6IEJyZWFrcG9pbnRzIG1hcHBpbmcgdmFsdWVzIGFzIGRlZmluZWQgaW4gcGFydGlhbHMvc2V0dGluZ3MvX2JyZWFrcG9pbnRzLnNjc3NcbiAgLSBAcGFyYW0gJGJyZWFrcG9pbnQtbmFtZXM6IEJyZWFrcG9pbnRzIG1hcHBpbmcgbmFtZXMgYXMgZGVmaW5lZCBpbiBwYXJ0aWFscy9zZXR0aW5ncy9fYnJlYWtwb2ludHMuc2Nzc1xuXFwqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cbi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKlxcXG4gIDAyIC0gQnJlYWtwb2ludCBNaW5pbXVtXG4gIE1pbmltdW0gYnJlYWtwb2ludCB3aWR0aC4gTnVsbCBmb3IgdGhlIHNtYWxsZXN0IChmaXJzdCkgYnJlYWtwb2ludC5cbiAgLSBAcGFyYW0gJG5hbWU6IFNlbGVjdGVkIGJyZWFrcG9pbnQgbmFtZSBhcyBkZWZpbmVkIGluIHBhcnRpYWxzL3NldHRpbmdzL19icmVha3BvaW50cy5zY3NzXG4gIC0gQHBhcmFtICRicmVha3BvaW50czogQnJlYWtwb2ludHMgbWFwcGluZyB2YWx1ZXMgYXMgZGVmaW5lZCBpbiBwYXJ0aWFscy9zZXR0aW5ncy9fYnJlYWtwb2ludHMuc2Nzc1xuXFwqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cbi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKlxcXG4gIDAzIC0gQnJlYWtwb2ludCBNYXhpbXVtXG4gIFRoZSBtYXhpbXVtIHZhbHVlIGlzIHJlZHVjZWQgYnkgMC4wMnB4IHRvIHdvcmsgYXJvdW5kIHRoZSBsaW1pdGF0aW9ucyBvZiBgbWluLWAgYW5kIGBtYXgtYCBwcmVmaXhlcyBhbmQgdmlld3BvcnRzXG4gIHdpdGggZnJhY3Rpb25hbCB3aWR0aHMuIFNlZSBodHRwczovL3d3dy53My5vcmcvVFIvbWVkaWFxdWVyaWVzLTQvI21xLW1pbi1tYXguIFVzZXMgMC4wMnB4IHJhdGhlciB0aGFuIDAuMDFweCB0byB3b3JrXG4gIGFyb3VuZCBhIGN1cnJlbnQgcm91bmRpbmcgYnVnIGluIFNhZmFyaS4gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzgyNjFcbiAgLSBAcGFyYW0gJG5hbWU6IFNlbGVjdGVkIGJyZWFrcG9pbnQgbmFtZSBhcyBkZWZpbmVkIGluIHBhcnRpYWxzL3NldHRpbmdzL19icmVha3BvaW50cy5zY3NzXG4gIC0gQHBhcmFtICRicmVha3BvaW50czogQnJlYWtwb2ludHMgbWFwcGluZyB2YWx1ZXMgYXMgZGVmaW5lZCBpbiBwYXJ0aWFscy9zZXR0aW5ncy9fYnJlYWtwb2ludHMuc2Nzc1xuXFwqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cbi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKlxcXG4gIDA0IC0gQnJlYWtwb2ludCBJbmZpeFxuICBSZXR1cm5zIGEgYmxhbmsgc3RyaW5nIGlmIHNtYWxsZXN0IGJyZWFrcG9pbnQsIG90aGVyd2lzZSByZXR1cm5zIHRoZSBuYW1lIHdpdGggYSBkYXNoIGluIGZyb250LiBVc2VmdWwgZm9yIG1ha2luZ1xuICByZXNwb25zaXZlIHV0aWxpdGllcy5cbiAgLSBAcGFyYW0gJG5hbWU6IFNlbGVjdGVkIGJyZWFrcG9pbnQgbmFtZSBhcyBkZWZpbmVkIGluIHBhcnRpYWxzL3NldHRpbmdzL19icmVha3BvaW50cy5zY3NzXG4gIC0gQHBhcmFtICRicmVha3BvaW50czogQnJlYWtwb2ludHMgbWFwcGluZyB2YWx1ZXMgYXMgZGVmaW5lZCBpbiBwYXJ0aWFscy9zZXR0aW5ncy9fYnJlYWtwb2ludHMuc2Nzc1xuXFwqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cbi8qKlxuICogRnVuY3Rpb25zIC0gQ2FsY3VsYXRpb25zXG4gKiBTaW1wbGUgZnVuY3Rpb25zIHRvIGhlbHAgZGV2ZWxvcGVycyBjYWxjdWxhdGUgZGlmZmVyZW50IHZhbHVlcyBmcm9tIHBlcmNlbnRhZ2VzIHRvIHNpemluZyBzdWNoIGFzIFJFTXMuXG4gKlxuICogLSAwMSAtIEltcG9ydHNcbiAqIC0gMDIgLSBUYXJnZXQvQ29udGFpbmVyIFBlcmNlbnRhZ2VcbiAqIC0gMDMgLSBSRU1zXG4gKi9cbi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKlxcXG4gIDAxIC0gSW1wb3J0c1xuXFwqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cbi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKlxcXG4gIDAyIC0gVGFyZ2V0L0NvbnRhaW5lciBQZXJjZW50YWdlXG4gIENhbGN1bGF0ZSB0aGUgcGVyY2VudGFnZSBvZiBhIHRhcmdldCBzaXplIGNvbXBhcmVkIHRvIGEgY29udGFpbmVyIHNpemUuXG4gIC0gQHBhcmFtICR0YXJnZXQ6IFNpemUgb2YgYW4gZWxlbWVudCBuZWVkaW5nIGEgY2FsY3VsYXRlZCBwZXJjZW50YWdlLlxuICAtIEBwYXJhbSAkY29udGFpbmVyOiBTaXplIG9mIHRoZSB0YXJnZXQncyBjb250YWluZXIsIG5lZWRlZCB0byBjYWxjdWxhdGUgcGVyY2VudGFnZS5cbiAgLSBAZXhhbXBsZSA9IHdpZHRoOiBjYWxjLXBlcmNlbnQoMjUwLCAxMDAwKTtcblxcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG4vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSpcXFxuICAwMyAtIFJFTXNcbiAgQ2FsY3VsYXRlIGEgc2l6ZSBpbnRvIFJFTSB1bml0cyAtLSBtb3N0bHkgdXNlZCBmb3IgZm9udCBzaXplIHJlbmRlcmluZy5cbiAgLSBAcGFyYW0gJHNpemU6IFNpemUgb2YgYW4gZWxlbWVudCBuZWVkaW5nIGEgY2FsY3VsYXRlZCBzaXplIGludG8gUkVNcy5cbiAgLSBAcGFyYW0gJGJhc2U6IEJhc2UgZm9udCBzaXplIG9mIHRoZSBzaXRlIC0tIGRlZmF1bHRzIHRvIDE2cHguXG4gIC0gQGV4YW1wbGUgPSBmb250LXNpemU6IGNhbGMtcmVtKDI0cHgpO1xuXFwqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cbi8qKlxuICogRnVuY3Rpb25zIC0gQ29sb3JcbiAqIFNpbXBsZSBmdW5jdGlvbnMgdG8gaGVscCBkZXZlbG9wZXJzIGVhc2lseSBncmFiIHByZS1kZWZpbmVkIGNvbG9yIHZhbHVlcyBmcm9tIG1hcHBpbmcgbGlzdHMuXG4gKlxuICogLSAwMSAtIEltcG9ydHNcbiAqIC0gMDIgLSBDb2xvclxuICovXG4vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSpcXFxuICAwMSAtIEltcG9ydHNcblxcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG4vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSpcXFxuICAwMiAtIENvbG9yXG4gIE1haW4gZnVuY3Rpb24gZm9yIGdldHRpbmcgYSBwcmUtZGVmaW5lZCBjb2xvciBmcm9tIGEgbGlzdCBvZiB2YWx1ZXMsIGFzIGRlZmluZWQgaW4gJ3BhcnRpYWxzL3NldHRpbmdzL19jb2xvcnMuc2Nzcy5cbiAgLSBAcGFyYW0gJGNvbG9yOiBUaGUgc2VsZWN0ZWQgY29sb3IuXG4gIC0gQGV4YW1wbGUgPSBiYWNrZ3JvdW5kLWNvbG9yOiBjb2xvcihwcmltYXJ5KTtcblxcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG4vKipcbiAqIEZ1bmN0aW9ucyAtIExheW91dFxuICogU2ltcGxlIGZ1bmN0aW9ucyB0byBoZWxwIGRldmVsb3BlcnMgZWFzaWx5IGdyYWIgcHJlLWRlZmluZWQgbGF5b3V0IHZhbHVlcyBmcm9tIG1hcHBpbmcgbGlzdHMuXG4gKlxuICogLSAwMSAtIEltcG9ydHNcbiAqIC0gMDIgLSBXaWR0aHNcbiAqIC0gMDMgLSBaLWluZGV4XG4gKi9cbi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKlxcXG4gIDAxIC0gSW1wb3J0c1xuXFwqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cbi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKlxcXG4gIDAyIC0gV2lkdGhzXG4gIE1haW4gZnVuY3Rpb24gZm9yIGdldHRpbmcgYSBwcmUtZGVmaW5lZCB3aWR0aCBmcm9tIGEgbGlzdCBvZiB2YWx1ZXMsIGFzIGRlZmluZWQgaW4gJ3BhcnRpYWxzL3NldHRpbmdzL19sYXlvdXQuc2Nzcy5cbiAgLSBAcGFyYW0gJHdpZHRoOiBUaGUgc2VsZWN0ZWQgd2lkdGggc2l6ZS5cbiAgLSBAZXhhbXBsZTogd2lkdGg6IHdpZHRoKGxhcmdlKTtcblxcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG4vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSpcXFxuICAwMyAtIFotaW5kZXhcbiAgTWFpbiBmdW5jdGlvbiBmb3IgZ2V0dGluZyBhIHByZS1kZWZpbmVkIHotaW5kZXggZnJvbSBhIGxpc3Qgb2YgdmFsdWVzLCBhcyBkZWZpbmVkIGluICdwYXJ0aWFscy9zZXR0aW5ncy9fbGF5b3V0LnNjc3MuXG4gIC0gQHBhcmFtICRrZXk6IFRoZSBzZWxlY3RlZCBsYXllciB0eXBlLlxuICAtIEBleGFtcGxlID0gei1pbmRleDogei1pbmRleChib3R0b21sZXNzLXBpdClcblxcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG4vKipcbiAqIEZ1bmN0aW9ucyAtIFR5cG9ncmFwaHlcbiAqIFNpbXBsZSBmdW5jdGlvbnMgdG8gaGVscCBkZXZlbG9wZXJzIGVhc2lseSBncmFiIHByZS1kZWZpbmVkIHR5cG9ncmFwaGljYWwgdmFsdWVzIGZyb20gbWFwcGluZyBsaXN0cy5cbiAqXG4gKiAtIDAxIC0gSW1wb3J0c1xuICogLSAwMiAtIExpbmUgSGVpZ2h0XG4gKi9cbi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKlxcXG4gIDAxIC0gSW1wb3J0c1xuXFwqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cbi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKlxcXG4gIDAyIC0gTGluZSBIZWlnaHRcbiAgTWFpbiBmdW5jdGlvbiBmb3IgZ2V0dGluZyBhIHByZS1kZWZpbmVkIExpbmUgSGVpZ2h0IGZyb20gYSBsaXN0IG9mIHZhbHVlcywgYXMgZGVmaW5lZCBpblxuICBgcGFydGlhbHMvc2V0dGluZ3MvX3R5cG9ncmFwaHkuc2Nzc2AuXG4gIC0gQHBhcmFtICRzaXplOiBUaGUgc2VsZWN0ZWQgTGluZSBIZWlnaHQgdHlwZS5cbiAgLSBAZXhhbXBsZTogbGluZS1oZWlnaHQ6IGxpbmUtaGVpZ2h0KGhlYWRpbmcpO1xuXFwqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cbi8qKlxuICogTWl4aW5zIC0gQnJlYWtwb2ludHNcbiAqIFVzZSB0aGVzZSBtaXhpbnMgbWFpbmx5IHdoZW4gZGVmaW5pbmcgbWVkaWEgYnJlYWtwb2ludCBzcGVjaWZpY2F0aW9ucyBpbiB0aGVtZSBmaWxlcy4gQm90aCBzZXR0aW5ncyBhbmQgZnVuY3Rpb25zXG4gKiBhcmUgaW1wb3J0ZWQgaGVyZSB0byBzdXBwbGVtZW50IHRoZSBtaXhpbnMgdGhlbXNlbHZlcy5cbiAqXG4gKiAtIDAxIC0gSW1wb3J0c1xuICogLSAwMiAtIE1pbmltdW0gQnJlYWtwb2ludFxuICogLSAwMyAtIE1heGltdW0gQnJlYWtwb2ludFxuICogLSAwNCAtIEJldHdlZW4gQnJlYWtwb2ludFxuICogLSAwNSAtIE9ubHkgQnJlYWtwb2ludFxuICovXG4vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSpcXFxuICAwMSAtIEltcG9ydHNcblxcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG4vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSpcXFxuICAwMiAtIE1pbmltdW0gQnJlYWtwb2ludFxuICBNZWRpYS9zY3JlZW4tc2l6ZSBvZiBhdCBsZWFzdCB0aGUgbWluaW11bSBicmVha3BvaW50IHdpZHRoIC0tIGFwcGx5IHRvIHNjcmVlbi1zaXplcyBhYm92ZSB0aGUgYnJlYWtwb2ludCBzcGVjaWZpZWQuXG4gIC0gQHBhcmFtICRuYW1lOiBTZWxlY3RlZCBicmVha3BvaW50IG5hbWUgYXMgZGVmaW5lZCBpbiBwYXJ0aWFscy9zZXR0aW5ncy9fYnJlYWtwb2ludHMuc2Nzc1xuICAtIEBwYXJhbSAkYnJlYWtwb2ludHM6IEJyZWFrcG9pbnRzIG1hcHBpbmcgdmFsdWVzIGFzIGRlZmluZWQgaW4gcGFydGlhbHMvc2V0dGluZ3MvX2JyZWFrcG9pbnRzLnNjc3NcbiAgLSBAZXhhbXBsZSA9IEBpbmNsdWRlIGJwLW1pbihsYXJnZSkge31cblxcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG4vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSpcXFxuICAwMyAtIE1heGltdW0gQnJlYWtwb2ludFxuICBNZWRpYS9zY3JlZW4tc2l6ZSBvZiBhdCBtb3N0IHRoZSBtYXhpbXVtIGJyZWFrcG9pbnQgd2lkdGggLS0gYXBwbHkgdG8gc2NyZWVuLXNpemVzIGJlbG93IHRoZSBicmVha3BvaW50IHNwZWNpZmllZC5cbiAgLSBAcGFyYW0gJG5hbWU6IFNlbGVjdGVkIGJyZWFrcG9pbnQgbmFtZSBhcyBkZWZpbmVkIGluIHBhcnRpYWxzL3NldHRpbmdzL19icmVha3BvaW50cy5zY3NzXG4gIC0gQHBhcmFtICRicmVha3BvaW50czogQnJlYWtwb2ludHMgbWFwcGluZyB2YWx1ZXMgYXMgZGVmaW5lZCBpbiBwYXJ0aWFscy9zZXR0aW5ncy9fYnJlYWtwb2ludHMuc2Nzc1xuICAtIEBleGFtcGxlID0gQGluY2x1ZGUgYnAtbWF4KGxhcmdlKSB7fVxuXFwqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cbi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKlxcXG4gIDA0IC0gQmV0d2VlbiBCcmVha3BvaW50XG4gIE1lZGlhL3NjcmVlbi1zaXplIHRoYXQgc3BhbnMgbXVsdGlwbGUgYnJlYWtwb2ludCB3aWR0aHMgLS0gYXBwbHkgdG8gc2NyZWVuLXNpemVzIGJldHdlZW4gdGhlIGJyZWFrcG9pbnRzIHNwZWNpZmllZC5cbiAgLSBAcGFyYW0gJGxvd2VyOiBTZWxlY3RlZCBtaW5pbXVtIGJyZWFrcG9pbnQgbmFtZSBhcyBkZWZpbmVkIGluIHBhcnRpYWxzL3NldHRpbmdzL19icmVha3BvaW50cy5zY3NzXG4gIC0gQHBhcmFtICR1cHBlcjogU2VsZWN0ZWQgbWF4aW11bSBicmVha3BvaW50IG5hbWUgYXMgZGVmaW5lZCBpbiBwYXJ0aWFscy9zZXR0aW5ncy9fYnJlYWtwb2ludHMuc2Nzc1xuICAtIEBwYXJhbSAkYnJlYWtwb2ludHM6IEJyZWFrcG9pbnRzIG1hcHBpbmcgdmFsdWVzIGFzIGRlZmluZWQgaW4gcGFydGlhbHMvc2V0dGluZ3MvX2JyZWFrcG9pbnRzLnNjc3NcbiAgLSBAZXhhbXBsZSA9IEBpbmNsdWRlIGJwLWJldHdlZW4oeHNtYWxsLCBsYXJnZSkge31cblxcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG4vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSpcXFxuICAwNSAtIE9ubHkgQnJlYWtwb2ludFxuICBNZWRpYS9zY3JlZW4tc2l6ZSBiZXR3ZWVuIHRoZSBicmVha3BvaW50J3MgbWluaW11bSBhbmQgbWF4aW11bSB3aWR0aHMgLS0gTm8gbWluaW11bSBmb3IgdGhlIHNtYWxsZXN0IGJyZWFrcG9pbnQsIGFuZFxuICBubyBtYXhpbXVtIGZvciB0aGUgbGFyZ2VzdCBvbmUuXG4gIC0gQHBhcmFtICRuYW1lOiBTZWxlY3RlZCBicmVha3BvaW50IG5hbWUgYXMgZGVmaW5lZCBpbiBwYXJ0aWFscy9zZXR0aW5ncy9fYnJlYWtwb2ludHMuc2Nzc1xuICAtIEBwYXJhbSAkYnJlYWtwb2ludHM6IEJyZWFrcG9pbnRzIG1hcHBpbmcgdmFsdWVzIGFzIGRlZmluZWQgaW4gcGFydGlhbHMvc2V0dGluZ3MvX2JyZWFrcG9pbnRzLnNjc3NcbiAgLSBAZXhhbXBsZSA9IEBpbmNsdWRlIGJwLW9ubHkobGFyZ2UpIHt9XG5cXCotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuLyoqXG4gKiBNaXhpbnMgLSBMaXN0c1xuICogVXNlIHRoZXNlIG1peGlucyB3aGVuIG5lZWRpbmcgdG8gZWFzaWx5IGRlZmluZSBsaXN0cyBzdHlsZXMuXG4gKlxuICogLSAwMSAtIEJhc2VcbiAqIC0gMDIgLSBCdWxsZXRzXG4gKiAtIDAzIC0gTnVtYmVyZWRcbiAqIC0gMDQgLSBObyBCdWxsZXRzXG4gKiAtIDA1IC0gSW5saW5lXG4gKiAtIDA2IC0gUnVsZWRcbiAqL1xuLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qXFxcbiAgMDEgLSBCYXNlXG5cXCotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qXFxcbiAgMDIgLSBCdWxsZXRzXG5cXCotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qXFxcbiAgMDMgLSBOdW1iZXJlZFxuXFwqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cbi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKlxcXG4gIDA0IC0gTm8gQnVsbGV0c1xuXFwqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cbi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKlxcXG4gIDA1IC0gSW5saW5lXG5cXCotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qXFxcbiAgMDYgLSBSdWxlZFxuXFwqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cbi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKlxcXG4gIDAzIC0gTWl4aW5zXG5cXCotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuLyoqXG4gKiBNaXhpbnMgLSBUeXBvZ3JhcGh5XG4gKiBVc2UgdGhlc2UgbWl4aW5zIHdoZW4gbmVlZGluZyB0byBlYXNpbHkgZGVmaW5lIHR5cG9ncmFwaHkgc3R5bGVzLCBzdWNoIGFzIHNpemVzIGFuZCB0eXBvZ3JhcGhpY2FsIGxheW91dC5cbiAqXG4gKiAtIDAxIC0gSW1wb3J0c1xuICogLSAwMiAtIEhlYWRpbmcgU2l6ZVxuICovXG4vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSpcXFxuICAwMSAtIEltcG9ydHNcblxcKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG4vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSpcXFxuICAwMiAtIEhlYWRpbmcgU2l6ZVxuICBNZWFudCBmb3IgcmVzcG9uc2l2ZSBoZWFkaW5nIHNpemVzIGFuZCBpcyBiYXNlZCB1cG9uIGJyZWFrcG9pbnRzIGFuZCBhIG1hcHBpbmcgb2YgaGVhZGluZyBzaXplcy4gQnJlYWtwb2ludHMgYXJlXG4gIGRlZmluZWQgaW4gdGhlIGBwYXJ0aWFscy9zZXR0aW5ncy9fYnJlYWtwb2ludHMuc2Nzc2AgZmlsZSBhbmQgYXJlIHV0aWxpemVkIHdpdGggYSBtaXhpbiwgYXMgZGVmaW5lZCBpblxuICBgcGFydGlhbHMvbWl4aW5zL19icmVha3BvaW50cy5zY3NzYC5cbiAgLSBAcGFyYW0gJHNldHRpbmc6IFNlbGVjdGVkIGhlYWRpbmcgdG8gYXBwbHkgcmVzcG9uc2l2ZSBzaXppbmcgdG8uXG5cXCotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuaW1nIHtcbiAgbWF4LXdpZHRoOiAxMDAlO1xuICBoZWlnaHQ6IGF1dG87XG59XG5cbmZpZ3VyZSB7XG4gIG1hcmdpbjogMDtcbn1cbmZpZ3VyZSBpbWcge1xuICBkaXNwbGF5OiBibG9jaztcbn1cblxuZmlnY2FwdGlvbiB7XG4gIG1hcmdpbjogMWVtIDA7XG59XG5cbkBtZWRpYSAobWluLXdpZHRoOiA3NjhweCkge1xuICAuZHJ1cGFsLW1lZGlhLmNrLXdpZGdldFtkYXRhLXZpZXctbW9kZT1lbWJlZDI1XSxcbiAgLmRydXBhbC1tZWRpYS5jay13aWRnZXRbZGF0YS12aWV3LW1vZGU9ZW1iZWRfNF8zXzI1XSxcbiAgLmRydXBhbC1tZWRpYS5jay13aWRnZXRbZGF0YS12aWV3LW1vZGU9ZW1iZWRfMV8xXzI1XSxcbiAgLmRydXBhbC1tZWRpYS5jay13aWRnZXRbZGF0YS12aWV3LW1vZGU9ZW1iZWRfMTZfOV8yNV0ge1xuICAgIG1heC13aWR0aDogMjUlO1xuICB9XG4gIC5kcnVwYWwtbWVkaWEuY2std2lkZ2V0W2RhdGEtdmlldy1tb2RlPWVtYmVkMjVdIC5tZWRpYS0tdmlldy1tb2RlLS1lbWJlZDI1LFxuICAuZHJ1cGFsLW1lZGlhLmNrLXdpZGdldFtkYXRhLXZpZXctbW9kZT1lbWJlZDI1XSAubWVkaWEtLXZpZXctbW9kZS0tZW1iZWQtNC0zLTI1LFxuICAuZHJ1cGFsLW1lZGlhLmNrLXdpZGdldFtkYXRhLXZpZXctbW9kZT1lbWJlZDI1XSAubWVkaWEtLXZpZXctbW9kZS0tZW1iZWQtMS0xLTI1LFxuICAuZHJ1cGFsLW1lZGlhLmNrLXdpZGdldFtkYXRhLXZpZXctbW9kZT1lbWJlZDI1XSAubWVkaWEtLXZpZXctbW9kZS0tZW1iZWQtMTYtOS0yNSxcbiAgLmRydXBhbC1tZWRpYS5jay13aWRnZXRbZGF0YS12aWV3LW1vZGU9ZW1iZWRfNF8zXzI1XSAubWVkaWEtLXZpZXctbW9kZS0tZW1iZWQyNSxcbiAgLmRydXBhbC1tZWRpYS5jay13aWRnZXRbZGF0YS12aWV3LW1vZGU9ZW1iZWRfNF8zXzI1XSAubWVkaWEtLXZpZXctbW9kZS0tZW1iZWQtNC0zLTI1LFxuICAuZHJ1cGFsLW1lZGlhLmNrLXdpZGdldFtkYXRhLXZpZXctbW9kZT1lbWJlZF80XzNfMjVdIC5tZWRpYS0tdmlldy1tb2RlLS1lbWJlZC0xLTEtMjUsXG4gIC5kcnVwYWwtbWVkaWEuY2std2lkZ2V0W2RhdGEtdmlldy1tb2RlPWVtYmVkXzRfM18yNV0gLm1lZGlhLS12aWV3LW1vZGUtLWVtYmVkLTE2LTktMjUsXG4gIC5kcnVwYWwtbWVkaWEuY2std2lkZ2V0W2RhdGEtdmlldy1tb2RlPWVtYmVkXzFfMV8yNV0gLm1lZGlhLS12aWV3LW1vZGUtLWVtYmVkMjUsXG4gIC5kcnVwYWwtbWVkaWEuY2std2lkZ2V0W2RhdGEtdmlldy1tb2RlPWVtYmVkXzFfMV8yNV0gLm1lZGlhLS12aWV3LW1vZGUtLWVtYmVkLTQtMy0yNSxcbiAgLmRydXBhbC1tZWRpYS5jay13aWRnZXRbZGF0YS12aWV3LW1vZGU9ZW1iZWRfMV8xXzI1XSAubWVkaWEtLXZpZXctbW9kZS0tZW1iZWQtMS0xLTI1LFxuICAuZHJ1cGFsLW1lZGlhLmNrLXdpZGdldFtkYXRhLXZpZXctbW9kZT1lbWJlZF8xXzFfMjVdIC5tZWRpYS0tdmlldy1tb2RlLS1lbWJlZC0xNi05LTI1LFxuICAuZHJ1cGFsLW1lZGlhLmNrLXdpZGdldFtkYXRhLXZpZXctbW9kZT1lbWJlZF8xNl85XzI1XSAubWVkaWEtLXZpZXctbW9kZS0tZW1iZWQyNSxcbiAgLmRydXBhbC1tZWRpYS5jay13aWRnZXRbZGF0YS12aWV3LW1vZGU9ZW1iZWRfMTZfOV8yNV0gLm1lZGlhLS12aWV3LW1vZGUtLWVtYmVkLTQtMy0yNSxcbiAgLmRydXBhbC1tZWRpYS5jay13aWRnZXRbZGF0YS12aWV3LW1vZGU9ZW1iZWRfMTZfOV8yNV0gLm1lZGlhLS12aWV3LW1vZGUtLWVtYmVkLTEtMS0yNSxcbiAgLmRydXBhbC1tZWRpYS5jay13aWRnZXRbZGF0YS12aWV3LW1vZGU9ZW1iZWRfMTZfOV8yNV0gLm1lZGlhLS12aWV3LW1vZGUtLWVtYmVkLTE2LTktMjUge1xuICAgIG1heC13aWR0aDogMTAwJTtcbiAgfVxufVxuXG5AbWVkaWEgKG1pbi13aWR0aDogNzY4cHgpIHtcbiAgLm1lZGlhLS12aWV3LW1vZGUtLWVtYmVkMjUsXG4gIC5tZWRpYS0tdmlldy1tb2RlLS1lbWJlZC00LTMtMjUsXG4gIC5tZWRpYS0tdmlldy1tb2RlLS1lbWJlZC0xLTEtMjUsXG4gIC5tZWRpYS0tdmlldy1tb2RlLS1lbWJlZC0xNi05LTI1IHtcbiAgICBtYXgtd2lkdGg6IDI1JTtcbiAgfVxufVxuXG5AbWVkaWEgKG1pbi13aWR0aDogNzY4cHgpIHtcbiAgLmRydXBhbC1tZWRpYS5jay13aWRnZXRbZGF0YS12aWV3LW1vZGU9ZW1iZWQzM10sXG4gIC5kcnVwYWwtbWVkaWEuY2std2lkZ2V0W2RhdGEtdmlldy1tb2RlPWVtYmVkXzRfM18zM10sXG4gIC5kcnVwYWwtbWVkaWEuY2std2lkZ2V0W2RhdGEtdmlldy1tb2RlPWVtYmVkXzFfMV8zM10sXG4gIC5kcnVwYWwtbWVkaWEuY2std2lkZ2V0W2RhdGEtdmlldy1tb2RlPWVtYmVkXzE2XzlfMzNdIHtcbiAgICBtYXgtd2lkdGg6IDMzJTtcbiAgfVxuICAuZHJ1cGFsLW1lZGlhLmNrLXdpZGdldFtkYXRhLXZpZXctbW9kZT1lbWJlZDMzXSAubWVkaWEtLXZpZXctbW9kZS0tZW1iZWQzMyxcbiAgLmRydXBhbC1tZWRpYS5jay13aWRnZXRbZGF0YS12aWV3LW1vZGU9ZW1iZWQzM10gLm1lZGlhLS12aWV3LW1vZGUtLWVtYmVkLTQtMy0zMyxcbiAgLmRydXBhbC1tZWRpYS5jay13aWRnZXRbZGF0YS12aWV3LW1vZGU9ZW1iZWQzM10gLm1lZGlhLS12aWV3LW1vZGUtLWVtYmVkLTEtMS0zMyxcbiAgLmRydXBhbC1tZWRpYS5jay13aWRnZXRbZGF0YS12aWV3LW1vZGU9ZW1iZWQzM10gLm1lZGlhLS12aWV3LW1vZGUtLWVtYmVkLTE2LTktMzMsXG4gIC5kcnVwYWwtbWVkaWEuY2std2lkZ2V0W2RhdGEtdmlldy1tb2RlPWVtYmVkXzRfM18zM10gLm1lZGlhLS12aWV3LW1vZGUtLWVtYmVkMzMsXG4gIC5kcnVwYWwtbWVkaWEuY2std2lkZ2V0W2RhdGEtdmlldy1tb2RlPWVtYmVkXzRfM18zM10gLm1lZGlhLS12aWV3LW1vZGUtLWVtYmVkLTQtMy0zMyxcbiAgLmRydXBhbC1tZWRpYS5jay13aWRnZXRbZGF0YS12aWV3LW1vZGU9ZW1iZWRfNF8zXzMzXSAubWVkaWEtLXZpZXctbW9kZS0tZW1iZWQtMS0xLTMzLFxuICAuZHJ1cGFsLW1lZGlhLmNrLXdpZGdldFtkYXRhLXZpZXctbW9kZT1lbWJlZF80XzNfMzNdIC5tZWRpYS0tdmlldy1tb2RlLS1lbWJlZC0xNi05LTMzLFxuICAuZHJ1cGFsLW1lZGlhLmNrLXdpZGdldFtkYXRhLXZpZXctbW9kZT1lbWJlZF8xXzFfMzNdIC5tZWRpYS0tdmlldy1tb2RlLS1lbWJlZDMzLFxuICAuZHJ1cGFsLW1lZGlhLmNrLXdpZGdldFtkYXRhLXZpZXctbW9kZT1lbWJlZF8xXzFfMzNdIC5tZWRpYS0tdmlldy1tb2RlLS1lbWJlZC00LTMtMzMsXG4gIC5kcnVwYWwtbWVkaWEuY2std2lkZ2V0W2RhdGEtdmlldy1tb2RlPWVtYmVkXzFfMV8zM10gLm1lZGlhLS12aWV3LW1vZGUtLWVtYmVkLTEtMS0zMyxcbiAgLmRydXBhbC1tZWRpYS5jay13aWRnZXRbZGF0YS12aWV3LW1vZGU9ZW1iZWRfMV8xXzMzXSAubWVkaWEtLXZpZXctbW9kZS0tZW1iZWQtMTYtOS0zMyxcbiAgLmRydXBhbC1tZWRpYS5jay13aWRnZXRbZGF0YS12aWV3LW1vZGU9ZW1iZWRfMTZfOV8zM10gLm1lZGlhLS12aWV3LW1vZGUtLWVtYmVkMzMsXG4gIC5kcnVwYWwtbWVkaWEuY2std2lkZ2V0W2RhdGEtdmlldy1tb2RlPWVtYmVkXzE2XzlfMzNdIC5tZWRpYS0tdmlldy1tb2RlLS1lbWJlZC00LTMtMzMsXG4gIC5kcnVwYWwtbWVkaWEuY2std2lkZ2V0W2RhdGEtdmlldy1tb2RlPWVtYmVkXzE2XzlfMzNdIC5tZWRpYS0tdmlldy1tb2RlLS1lbWJlZC0xLTEtMzMsXG4gIC5kcnVwYWwtbWVkaWEuY2std2lkZ2V0W2RhdGEtdmlldy1tb2RlPWVtYmVkXzE2XzlfMzNdIC5tZWRpYS0tdmlldy1tb2RlLS1lbWJlZC0xNi05LTMzIHtcbiAgICBtYXgtd2lkdGg6IDEwMCU7XG4gIH1cbn1cblxuQG1lZGlhIChtaW4td2lkdGg6IDc2OHB4KSB7XG4gIC5tZWRpYS0tdmlldy1tb2RlLS1lbWJlZDMzLFxuICAubWVkaWEtLXZpZXctbW9kZS0tZW1iZWQtNC0zLTMzLFxuICAubWVkaWEtLXZpZXctbW9kZS0tZW1iZWQtMS0xLTMzLFxuICAubWVkaWEtLXZpZXctbW9kZS0tZW1iZWQtMTYtOS0zMyB7XG4gICAgbWF4LXdpZHRoOiAzMyU7XG4gIH1cbn1cblxuQG1lZGlhIChtaW4td2lkdGg6IDc2OHB4KSB7XG4gIC5kcnVwYWwtbWVkaWEuY2std2lkZ2V0W2RhdGEtdmlldy1tb2RlPWVtYmVkNTBdLFxuICAuZHJ1cGFsLW1lZGlhLmNrLXdpZGdldFtkYXRhLXZpZXctbW9kZT1lbWJlZF80XzNfNTBdLFxuICAuZHJ1cGFsLW1lZGlhLmNrLXdpZGdldFtkYXRhLXZpZXctbW9kZT1lbWJlZF8xXzFfNTBdLFxuICAuZHJ1cGFsLW1lZGlhLmNrLXdpZGdldFtkYXRhLXZpZXctbW9kZT1lbWJlZF8xNl85XzUwXSB7XG4gICAgbWF4LXdpZHRoOiA1MCU7XG4gIH1cbiAgLmRydXBhbC1tZWRpYS5jay13aWRnZXRbZGF0YS12aWV3LW1vZGU9ZW1iZWQ1MF0gLm1lZGlhLS12aWV3LW1vZGUtLWVtYmVkNTAsXG4gIC5kcnVwYWwtbWVkaWEuY2std2lkZ2V0W2RhdGEtdmlldy1tb2RlPWVtYmVkNTBdIC5tZWRpYS0tdmlldy1tb2RlLS1lbWJlZC00LTMtNTAsXG4gIC5kcnVwYWwtbWVkaWEuY2std2lkZ2V0W2RhdGEtdmlldy1tb2RlPWVtYmVkNTBdIC5tZWRpYS0tdmlldy1tb2RlLS1lbWJlZC0xLTEtNTAsXG4gIC5kcnVwYWwtbWVkaWEuY2std2lkZ2V0W2RhdGEtdmlldy1tb2RlPWVtYmVkNTBdIC5tZWRpYS0tdmlldy1tb2RlLS1lbWJlZC0xNi05LTUwLFxuICAuZHJ1cGFsLW1lZGlhLmNrLXdpZGdldFtkYXRhLXZpZXctbW9kZT1lbWJlZF80XzNfNTBdIC5tZWRpYS0tdmlldy1tb2RlLS1lbWJlZDUwLFxuICAuZHJ1cGFsLW1lZGlhLmNrLXdpZGdldFtkYXRhLXZpZXctbW9kZT1lbWJlZF80XzNfNTBdIC5tZWRpYS0tdmlldy1tb2RlLS1lbWJlZC00LTMtNTAsXG4gIC5kcnVwYWwtbWVkaWEuY2std2lkZ2V0W2RhdGEtdmlldy1tb2RlPWVtYmVkXzRfM181MF0gLm1lZGlhLS12aWV3LW1vZGUtLWVtYmVkLTEtMS01MCxcbiAgLmRydXBhbC1tZWRpYS5jay13aWRnZXRbZGF0YS12aWV3LW1vZGU9ZW1iZWRfNF8zXzUwXSAubWVkaWEtLXZpZXctbW9kZS0tZW1iZWQtMTYtOS01MCxcbiAgLmRydXBhbC1tZWRpYS5jay13aWRnZXRbZGF0YS12aWV3LW1vZGU9ZW1iZWRfMV8xXzUwXSAubWVkaWEtLXZpZXctbW9kZS0tZW1iZWQ1MCxcbiAgLmRydXBhbC1tZWRpYS5jay13aWRnZXRbZGF0YS12aWV3LW1vZGU9ZW1iZWRfMV8xXzUwXSAubWVkaWEtLXZpZXctbW9kZS0tZW1iZWQtNC0zLTUwLFxuICAuZHJ1cGFsLW1lZGlhLmNrLXdpZGdldFtkYXRhLXZpZXctbW9kZT1lbWJlZF8xXzFfNTBdIC5tZWRpYS0tdmlldy1tb2RlLS1lbWJlZC0xLTEtNTAsXG4gIC5kcnVwYWwtbWVkaWEuY2std2lkZ2V0W2RhdGEtdmlldy1tb2RlPWVtYmVkXzFfMV81MF0gLm1lZGlhLS12aWV3LW1vZGUtLWVtYmVkLTE2LTktNTAsXG4gIC5kcnVwYWwtbWVkaWEuY2std2lkZ2V0W2RhdGEtdmlldy1tb2RlPWVtYmVkXzE2XzlfNTBdIC5tZWRpYS0tdmlldy1tb2RlLS1lbWJlZDUwLFxuICAuZHJ1cGFsLW1lZGlhLmNrLXdpZGdldFtkYXRhLXZpZXctbW9kZT1lbWJlZF8xNl85XzUwXSAubWVkaWEtLXZpZXctbW9kZS0tZW1iZWQtNC0zLTUwLFxuICAuZHJ1cGFsLW1lZGlhLmNrLXdpZGdldFtkYXRhLXZpZXctbW9kZT1lbWJlZF8xNl85XzUwXSAubWVkaWEtLXZpZXctbW9kZS0tZW1iZWQtMS0xLTUwLFxuICAuZHJ1cGFsLW1lZGlhLmNrLXdpZGdldFtkYXRhLXZpZXctbW9kZT1lbWJlZF8xNl85XzUwXSAubWVkaWEtLXZpZXctbW9kZS0tZW1iZWQtMTYtOS01MCB7XG4gICAgbWF4LXdpZHRoOiAxMDAlO1xuICB9XG59XG5cbkBtZWRpYSAobWluLXdpZHRoOiA3NjhweCkge1xuICAubWVkaWEtLXZpZXctbW9kZS0tZW1iZWQ1MCxcbiAgLm1lZGlhLS12aWV3LW1vZGUtLWVtYmVkLTQtMy01MCxcbiAgLm1lZGlhLS12aWV3LW1vZGUtLWVtYmVkLTEtMS01MCxcbiAgLm1lZGlhLS12aWV3LW1vZGUtLWVtYmVkLTE2LTktNTAge1xuICAgIG1heC13aWR0aDogNTAlO1xuICB9XG59XG5cbkBtZWRpYSAobWluLXdpZHRoOiA3NjhweCkge1xuICAuZHJ1cGFsLW1lZGlhLmNrLXdpZGdldFtkYXRhLXZpZXctbW9kZT1lbWJlZDY3XSxcbiAgLmRydXBhbC1tZWRpYS5jay13aWRnZXRbZGF0YS12aWV3LW1vZGU9ZW1iZWRfNF8zXzY3XSxcbiAgLmRydXBhbC1tZWRpYS5jay13aWRnZXRbZGF0YS12aWV3LW1vZGU9ZW1iZWRfMV8xXzY3XSxcbiAgLmRydXBhbC1tZWRpYS5jay13aWRnZXRbZGF0YS12aWV3LW1vZGU9ZW1iZWRfMTZfOV82N10ge1xuICAgIG1heC13aWR0aDogNjclO1xuICB9XG4gIC5kcnVwYWwtbWVkaWEuY2std2lkZ2V0W2RhdGEtdmlldy1tb2RlPWVtYmVkNjddIC5tZWRpYS0tdmlldy1tb2RlLS1lbWJlZDY3LFxuICAuZHJ1cGFsLW1lZGlhLmNrLXdpZGdldFtkYXRhLXZpZXctbW9kZT1lbWJlZDY3XSAubWVkaWEtLXZpZXctbW9kZS0tZW1iZWQtNC0zLTY3LFxuICAuZHJ1cGFsLW1lZGlhLmNrLXdpZGdldFtkYXRhLXZpZXctbW9kZT1lbWJlZDY3XSAubWVkaWEtLXZpZXctbW9kZS0tZW1iZWQtMS0xLTY3LFxuICAuZHJ1cGFsLW1lZGlhLmNrLXdpZGdldFtkYXRhLXZpZXctbW9kZT1lbWJlZDY3XSAubWVkaWEtLXZpZXctbW9kZS0tZW1iZWQtMTYtOS02NyxcbiAgLmRydXBhbC1tZWRpYS5jay13aWRnZXRbZGF0YS12aWV3LW1vZGU9ZW1iZWRfNF8zXzY3XSAubWVkaWEtLXZpZXctbW9kZS0tZW1iZWQ2NyxcbiAgLmRydXBhbC1tZWRpYS5jay13aWRnZXRbZGF0YS12aWV3LW1vZGU9ZW1iZWRfNF8zXzY3XSAubWVkaWEtLXZpZXctbW9kZS0tZW1iZWQtNC0zLTY3LFxuICAuZHJ1cGFsLW1lZGlhLmNrLXdpZGdldFtkYXRhLXZpZXctbW9kZT1lbWJlZF80XzNfNjddIC5tZWRpYS0tdmlldy1tb2RlLS1lbWJlZC0xLTEtNjcsXG4gIC5kcnVwYWwtbWVkaWEuY2std2lkZ2V0W2RhdGEtdmlldy1tb2RlPWVtYmVkXzRfM182N10gLm1lZGlhLS12aWV3LW1vZGUtLWVtYmVkLTE2LTktNjcsXG4gIC5kcnVwYWwtbWVkaWEuY2std2lkZ2V0W2RhdGEtdmlldy1tb2RlPWVtYmVkXzFfMV82N10gLm1lZGlhLS12aWV3LW1vZGUtLWVtYmVkNjcsXG4gIC5kcnVwYWwtbWVkaWEuY2std2lkZ2V0W2RhdGEtdmlldy1tb2RlPWVtYmVkXzFfMV82N10gLm1lZGlhLS12aWV3LW1vZGUtLWVtYmVkLTQtMy02NyxcbiAgLmRydXBhbC1tZWRpYS5jay13aWRnZXRbZGF0YS12aWV3LW1vZGU9ZW1iZWRfMV8xXzY3XSAubWVkaWEtLXZpZXctbW9kZS0tZW1iZWQtMS0xLTY3LFxuICAuZHJ1cGFsLW1lZGlhLmNrLXdpZGdldFtkYXRhLXZpZXctbW9kZT1lbWJlZF8xXzFfNjddIC5tZWRpYS0tdmlldy1tb2RlLS1lbWJlZC0xNi05LTY3LFxuICAuZHJ1cGFsLW1lZGlhLmNrLXdpZGdldFtkYXRhLXZpZXctbW9kZT1lbWJlZF8xNl85XzY3XSAubWVkaWEtLXZpZXctbW9kZS0tZW1iZWQ2NyxcbiAgLmRydXBhbC1tZWRpYS5jay13aWRnZXRbZGF0YS12aWV3LW1vZGU9ZW1iZWRfMTZfOV82N10gLm1lZGlhLS12aWV3LW1vZGUtLWVtYmVkLTQtMy02NyxcbiAgLmRydXBhbC1tZWRpYS5jay13aWRnZXRbZGF0YS12aWV3LW1vZGU9ZW1iZWRfMTZfOV82N10gLm1lZGlhLS12aWV3LW1vZGUtLWVtYmVkLTEtMS02NyxcbiAgLmRydXBhbC1tZWRpYS5jay13aWRnZXRbZGF0YS12aWV3LW1vZGU9ZW1iZWRfMTZfOV82N10gLm1lZGlhLS12aWV3LW1vZGUtLWVtYmVkLTE2LTktNjcge1xuICAgIG1heC13aWR0aDogMTAwJTtcbiAgfVxufVxuXG5AbWVkaWEgKG1pbi13aWR0aDogNzY4cHgpIHtcbiAgLm1lZGlhLS12aWV3LW1vZGUtLWVtYmVkNjcsXG4gIC5tZWRpYS0tdmlldy1tb2RlLS1lbWJlZC00LTMtNjcsXG4gIC5tZWRpYS0tdmlldy1tb2RlLS1lbWJlZC0xLTEtNjcsXG4gIC5tZWRpYS0tdmlldy1tb2RlLS1lbWJlZC0xNi05LTY3IHtcbiAgICBtYXgtd2lkdGg6IDY3JTtcbiAgfVxufVxuXG5AbWVkaWEgKG1pbi13aWR0aDogNzY4cHgpIHtcbiAgLmRydXBhbC1tZWRpYS5jay13aWRnZXRbZGF0YS12aWV3LW1vZGU9ZW1iZWQ3NV0sXG4gIC5kcnVwYWwtbWVkaWEuY2std2lkZ2V0W2RhdGEtdmlldy1tb2RlPWVtYmVkXzRfM183NV0sXG4gIC5kcnVwYWwtbWVkaWEuY2std2lkZ2V0W2RhdGEtdmlldy1tb2RlPWVtYmVkXzFfMV83NV0sXG4gIC5kcnVwYWwtbWVkaWEuY2std2lkZ2V0W2RhdGEtdmlldy1tb2RlPWVtYmVkXzE2XzlfNzVdIHtcbiAgICBtYXgtd2lkdGg6IDc1JTtcbiAgfVxuICAuZHJ1cGFsLW1lZGlhLmNrLXdpZGdldFtkYXRhLXZpZXctbW9kZT1lbWJlZDc1XSAubWVkaWEtLXZpZXctbW9kZS0tZW1iZWQ3NSxcbiAgLmRydXBhbC1tZWRpYS5jay13aWRnZXRbZGF0YS12aWV3LW1vZGU9ZW1iZWQ3NV0gLm1lZGlhLS12aWV3LW1vZGUtLWVtYmVkLTQtMy03NSxcbiAgLmRydXBhbC1tZWRpYS5jay13aWRnZXRbZGF0YS12aWV3LW1vZGU9ZW1iZWQ3NV0gLm1lZGlhLS12aWV3LW1vZGUtLWVtYmVkLTEtMS03NSxcbiAgLmRydXBhbC1tZWRpYS5jay13aWRnZXRbZGF0YS12aWV3LW1vZGU9ZW1iZWQ3NV0gLm1lZGlhLS12aWV3LW1vZGUtLWVtYmVkLTE2LTktNzUsXG4gIC5kcnVwYWwtbWVkaWEuY2std2lkZ2V0W2RhdGEtdmlldy1tb2RlPWVtYmVkXzRfM183NV0gLm1lZGlhLS12aWV3LW1vZGUtLWVtYmVkNzUsXG4gIC5kcnVwYWwtbWVkaWEuY2std2lkZ2V0W2RhdGEtdmlldy1tb2RlPWVtYmVkXzRfM183NV0gLm1lZGlhLS12aWV3LW1vZGUtLWVtYmVkLTQtMy03NSxcbiAgLmRydXBhbC1tZWRpYS5jay13aWRnZXRbZGF0YS12aWV3LW1vZGU9ZW1iZWRfNF8zXzc1XSAubWVkaWEtLXZpZXctbW9kZS0tZW1iZWQtMS0xLTc1LFxuICAuZHJ1cGFsLW1lZGlhLmNrLXdpZGdldFtkYXRhLXZpZXctbW9kZT1lbWJlZF80XzNfNzVdIC5tZWRpYS0tdmlldy1tb2RlLS1lbWJlZC0xNi05LTc1LFxuICAuZHJ1cGFsLW1lZGlhLmNrLXdpZGdldFtkYXRhLXZpZXctbW9kZT1lbWJlZF8xXzFfNzVdIC5tZWRpYS0tdmlldy1tb2RlLS1lbWJlZDc1LFxuICAuZHJ1cGFsLW1lZGlhLmNrLXdpZGdldFtkYXRhLXZpZXctbW9kZT1lbWJlZF8xXzFfNzVdIC5tZWRpYS0tdmlldy1tb2RlLS1lbWJlZC00LTMtNzUsXG4gIC5kcnVwYWwtbWVkaWEuY2std2lkZ2V0W2RhdGEtdmlldy1tb2RlPWVtYmVkXzFfMV83NV0gLm1lZGlhLS12aWV3LW1vZGUtLWVtYmVkLTEtMS03NSxcbiAgLmRydXBhbC1tZWRpYS5jay13aWRnZXRbZGF0YS12aWV3LW1vZGU9ZW1iZWRfMV8xXzc1XSAubWVkaWEtLXZpZXctbW9kZS0tZW1iZWQtMTYtOS03NSxcbiAgLmRydXBhbC1tZWRpYS5jay13aWRnZXRbZGF0YS12aWV3LW1vZGU9ZW1iZWRfMTZfOV83NV0gLm1lZGlhLS12aWV3LW1vZGUtLWVtYmVkNzUsXG4gIC5kcnVwYWwtbWVkaWEuY2std2lkZ2V0W2RhdGEtdmlldy1tb2RlPWVtYmVkXzE2XzlfNzVdIC5tZWRpYS0tdmlldy1tb2RlLS1lbWJlZC00LTMtNzUsXG4gIC5kcnVwYWwtbWVkaWEuY2std2lkZ2V0W2RhdGEtdmlldy1tb2RlPWVtYmVkXzE2XzlfNzVdIC5tZWRpYS0tdmlldy1tb2RlLS1lbWJlZC0xLTEtNzUsXG4gIC5kcnVwYWwtbWVkaWEuY2std2lkZ2V0W2RhdGEtdmlldy1tb2RlPWVtYmVkXzE2XzlfNzVdIC5tZWRpYS0tdmlldy1tb2RlLS1lbWJlZC0xNi05LTc1IHtcbiAgICBtYXgtd2lkdGg6IDEwMCU7XG4gIH1cbn1cblxuQG1lZGlhIChtaW4td2lkdGg6IDc2OHB4KSB7XG4gIC5tZWRpYS0tdmlldy1tb2RlLS1lbWJlZDc1LFxuICAubWVkaWEtLXZpZXctbW9kZS0tZW1iZWQtNC0zLTc1LFxuICAubWVkaWEtLXZpZXctbW9kZS0tZW1iZWQtMS0xLTc1LFxuICAubWVkaWEtLXZpZXctbW9kZS0tZW1iZWQtMTYtOS03NSB7XG4gICAgbWF4LXdpZHRoOiA3NSU7XG4gIH1cbn0iXX0= */
