/*
Also please follow this
Do your project have diferent charset languages to account with?
      - Yes -> follow https://projects.netcentric.biz/wiki/display/FRONTEND/CSS+-+Font+Normalization
      - No -> You can still use it, there are tons of advantages, but its create some extra css and layout rendering
*/
/*
  * Design spec:
  * https://www.figma.com/file/SR4rvQlNnCmPMrQ9WYaIqv/branch/TJqkFymq09wf8KwmY1WNcj/Volvo-AEM-Design-system?type=design&node-id=7-26&t=pAm916VRiqCOD2I1-0
*/
/**
 * z-indexes from lower to -> higher
 */
/* doc
---
title: Pixel to em
name: nn-px-to-em
category: functions
---

Calculate the em with a given pixel with the given base font size
If you don't set a $base the $base-font-size is used as the context

## Live Template abbreviations
---
-ptu

## Parameters
---
@parameter $value = pixel based number (without unit)
@parameter $base = pixel based number (without unit)

## Dependencies
---
nn-strip-unit

## Example
---
```html_example
nn-px-to-em(5) // Output: 0.3125em
nn-px-to-em(5, 10) // Output: 0.5em
nn-px-to-em(5, 20) // Output: 0.25em
```
*/
/* doc
---
title: Pixel to rem
name: nn-px-to-rem
category: functions
---

Calculate the rem with a given pixel with the given base font size

In:  5px
Out: 0.3125rem

## Live Template abbreviations
---
-rem

## Parameters
---
@parameter $value = pixel based number (without unit)

## Dependencies
---
nn-strip-unit

## Example
---
```html_example
nn-px-to-rem(5) // Output 0.3125rem
```

*/
/* doc
---
title: Pixel to unit
name: px-to-unit
category: mixins
---

Set a property and value (pixel based without unit)

Calculates rem / em / % from given pixel and base (default base is the
base-font-size, 16px)
If rtl is true, this mixin handles all the direction stuff:
- Switching the values, when we have exactly 4 values
- Switching left and right in properties (padding and margin)

## Live Template abbreviations
---
-ptu (for em or % to pixel - with base parameter)
-rem (for rem to pixel - without base parameter)

## Parameters
---
@parameter $property = padding | margin | font-size | width | height
@parameter $value = Pixel based number - add px to keep the px for a value
@parameter $base = px based number, Default: 16px
@parameter $unit = Set unit: px | em | rem | percent

## Dependencies
---
abstract/functions/swap-left-right
abstract/functions/strip-unit

## Example
---

```html_example
@include nn-px-to-unit(padding, 0 10px 20 0); => padding: 0 10px 1.25rem 0;
@include nn-px-to-unit(padding, 0 10 20 0); => padding: 0 0.625rem 1.25rem 0;
@include nn-px-to-unit(padding-left, 10);
@include nn-px-to-unit(padding-right, 10);
@include nn-px-to-unit(margin, 0 10 20 0);
@include nn-px-to-unit(margin-left, 10);
@include nn-px-to-unit(margin-right, 10);
@include nn-px-to-unit(font-size, 20);
@include nn-px-to-unit(width, 100);
@include nn-px-to-unit(min-width, 100);
@include nn-px-to-unit(mann-width, 100);
@include nn-px-to-unit(height, 100);
@include nn-px-to-unit(min-height, 100);
@include nn-px-to-unit(mann-height, 100);
```

## Source
---
http://css-tricks.com/snippets/css/less-mixin-for-rem-font-sizing/

*/
/* doc
---
title: Pixel to unitless
name: nn-px-to-unitless
category: functions
---

This makes the same calculation as px to em. But it don't print out the unit.

Use this for line-heights.

## Live Template abbreviations
---

## Parameters
---
@parameter $value = pixel based number (without unit)
@parameter $base = pixel based number (without unit)

## Dependencies
---

## Example
---

```html_example
line-height: nn-px-to-unitless(5) // Output: 0.3125
```

## Source
---

*/
/* doc
---
title: Strip unit
name: nn-strip-unit
category: functions
---

Strips of the unit of a number

## Parameters
---
@parameter $num = number with unit (5px, 5em, 5rem)

## Example
---

```html_example
nn-strip-unit(5px) //Output: 5
nn-strip-unit(10em) // Output: 10
nn-strip-unit(15rem) // Output: 15
```

*/
/* doc
---
title: z-index
name: nn-z-index
category: functions
---

Because z-indices can get tricky we manage them in the theme.scss globally.

Always use this mixin to set set a z-index.

Read the Best Practice to get an full documentation:
https://projects.netcentric.biz/wiki/display/FRONTEND/How+to+set+a+z-index

## Live Template abbreviations
---
-z

## Parameters
---
@parameter $element = Name of the element (normally this will be the module name for the main stack)
@parameter $list = Name of the list (default $z-indices). Must be only set for stack context
@parameter $min = Set a minimum z-index which will be added to the list.

## Dependencies
---
$z-indices variable in the theme.scss

## Example
---

```html_example

// In the SASS theme file

$z-indices: slider, modal, dialog, navigation;

// In the SASS module file

.modal {
    &__base {
        position: absolute;
        z-index: nn-z-index(modal);
    }
}
```

## Source
---
http://www.smashingmagazine.com/2014/06/12/sassy-z-index-management-for-complex-layouts/

*/
/* doc
---
title: remove every unit
name: strip-unit
category: functions
---
remove all units

## Parameters
---
@parameter $number = number with unit

## Example
---
```html_example
strip-unit(5px) // Output: 5
```
*/
/* doc
---
title: Swap left right values
name: nn-rtl
category: functions
---

Swap the names right and left when $rtl is set to true.
If the value is not right or left it returns the original value.

In:  right
Out: left (in rtl), right (in ltr)

## Live Template abbreviations
---

## Parameters
---
@parameter $origin = right | left

## Example
---

```html_example
nn-rtl(left): 10px;
nn-rtl(padding-right): 30px;
nn-rtl(0 1px 8px 12px) // 0 12px 8px 1px
```

*/
/*
    This mixin converts any unitless number (for example 40) to the correct unit, according to the given axis.

    Parameters:
    - $value: unitless number to be converted. A unit in $value will correspond to a px in the browser,
        no matter if it's output as px or rem

    Returns
    - Horizontal: will convert the number to pixels (40px)
    - Vertical: will convert the number to rem (if rem === 16px, then 40 will be converted to 2.5 rem)
*/
/*
    Converts a unitless number to the corresponding unit on the horizontal axis.
    By default will convert the value to px.
*/
/*
    Converts a unitless number to the corresponding unit on the vertical axis.
    By default will convert the value to rem.
*/
/* stylelint-disable */
/* doc
---
title: Swap left right values
name: swap-left-right-values
category: functions
---

Swap the values for right and left when $rtl is set to true:

In:  0 5px 8px 12px
Out: 0 12px 8px 5px (in rtl)

## Parameters
---
@parameter $values = 4 numbers (works with all units)

## Example
---

```html_example
swap-left-right-values(0 1px 8px 12px) // 0 12px 8px 1px
swap-left-right-values(0 1em 8em 12em) // 0 12em 8em 1em
wap-left-right-values(0 1rem 8rem 12rem) // 0 12rem 8rem 1rem
```

## Source
---
http://stackoverflow.com/questions/14199323/right-to-left-rtl-support-in-sass-project

*/
/* stylelint-disable */
/* doc
---
title: Swap left right names
name: swap-left-right-names
category: functions
---

Swap the names right and left when $rtl is set to true.
If the value is not right or left it returns the original value.

In:  right
Out: left (in rtl), right (in ltr)

## Live Template abbreviations
---

## Parameters
---
@parameter $origin = right | left

## Example
---

```html_example
swap-left-right-name(left)
swap-left-right-name(right)
```

## Source
---
http://stackoverflow.com/questions/14199323/right-to-left-rtl-support-in-sass-project

*/
/*  List of CSS properties that will always be output at least as 2 different values
    in order to be able to convert each one to the correct axis unit */
/*
    Mixin for automatically handling spacings around/between elements.

    This mixin will automatically invert the lef/right directions in RTL languages.
    Also, the unitless values will be converted to the proper unit according to the axis

    Parameters:
    - $property-name: name of the CSS property that should be output. Supported properties are:
        margin, margin-top, margin-right, margin-bottom, margin-left
        padding, padding-top, padding-right, padding-bottom, padding-left
        width, height, min-width, max-width, min-height, min-height
    - $value: value that will be output as part of the given property. Supported values are:
        Unitless number (40): this should be used most of the times. It will automatically be converted
            to the correct unit depending on the axis where it's used (horizontal axis => px, vertical axis => rem).
            Each unit in $value will correspond to a px in the browser, no matter to which unit it will be converted.
        Number with unit (40px, 40%...): the number and the unit will be preserved and only the left/right inversion
            will be done for RTL languages
        List of values (40 30% 20 10): margin and padding shorthands whith multiple values are supported.
            The left/right values will be automatically swapped in RTL and the unitless numbers will be converted
            to the corresponding unit. Unitless and numbers with units can be mixed in the same call.
        Using calc() in any of the previous examples is supported, although no unit conversion will be done

 ## Example
---

```html_example
@include spacing(padding, 0 10px 20 0); => padding: 0 10px 2rem 0;
@include spacing(padding, 0 10 20 0); => padding: 0 10px 2rem 0;
@include spacing(padding-left, 10);
@include spacing(padding-right, 10);
@include spacing(margin, 0 10 20 0);
@include spacing(margin-left, 10);
@include spacing(margin-right, 10);
@include spacing(width, 100);
@include spacing(min-width, 100);
@include spacing(max-width, 100);
@include spacing(height, 100);
@include spacing(min-height, 100);
@include spacing(max-height, 100);
```
*/
/* doc
---
title: Clearfix
name: clearfix
category: mixins
---

Clears after floating element

Use this mixin only inside media queries where you can't use the
abstract/extends/utils/_clearfix version, which adds less code to css

## Live Template abbreviations
---

## Example
---

```html_example
@include clearfix;
```

## Source
---
https://css-tricks.com/snippets/css/clear-fix/
*/
/* stylelint-disable string-no-newline */
/* doc
---
title: focus color
name: focus color
category: mixins
---

Add a focus color when keyboard-focus is activated
## Parameters
---
@param $number

*/
/* doc
---
title: ignore-container
name: ignore-container
category: mixins
---

Set full page width for something inside a container

## Parameters
---
@param $container-size
@param $gutter

*/
/* Generates all the rules for the grid columns up to the given amount of column */
/* Generates all the rules for the grid column offset up to the given amount of column */
/* Generates all the rules for the grid and columns for the given break point and total of columns */
/* API function to be called to generate a grid config */
/* doc
---
type: button type
state: state button
---

Button styles

Use this mixin for button styles: color text, background, border

## Example
---

```html_example
@include button(primary);
```
*/
/* doc
---
lineLimit: This value specifies the number of lines after which the content will be clamped. It must be greater than 0.
---

Truncates text at a specific number of lines.

Use this mixin to hide long text.

## Example
---

```html_example
@include line-clamp($lineLimit: 4);
```
*/
/* typography
---
title: typography
name: Typography
category: mixins
---

Adds font CSS properties by a map provided

## Parameters
---
@param $t-style
@param $is-important: false

* $t-style is expected to be a map with 'default' and 'breakpoint[s]' submaps with a property
for every css property to be set.
* $is-important parameter allows to force typography properties to be set as !important
Try to avoid its use, but it might be needed for situations where styles for a component
are very specific and to overwrite the generic ones is too complex (if they have a lot of specificity)

*/
/* doc
---
title: hidden
name: hidden
category: mixins
---

Hide from both screenreaders and browsers: h5bp.com/u
## Parameters
---

*/
/* doc
---
title: overlay
name: overlay
category: mixins
---

Creates an overlay with the provided background color
## Parameters
---
@param $bgColor

*/
/**
 * @mixin top-bottom-border
 * @desc Creates a dynamic and customizable border at the specified position on an element.
 *
 * @param {string} $position - Optional, Default: 'bottom'. Defines the position of the border. Accepts values 'top' or 'bottom'.
 * @param {color} $color - Optional, Default: '$c-black'. Specifies the color of the border. Accepts any valid CSS color value.
 * @param {length} $width - Optional, Default: '2px'. Sets the width of the border. Accepts any valid CSS length value.
 * @param {length} $margin - Optional, Default: '0'. Adds margin to the border. Accepts any valid CSS length value.
 *
 * @example
 *   .example-element {
 *       @include top-bottom-border($position: top, $color: $c-grey-two, $width: 3px, $margin: 10px);
 *   }
 */
/* doc
---
title: reset-fullwidth-margins
name: reset-fullwidth-margins
category: mixins
---

Reset margins for full width components inside a Container or a Column Control
*/
.stockticker {
  margin: 30px 0;
}
.stockticker__wrapper {
  text-align: center;
  background: #e1dfdd;
  padding: 20px 0;
}
@media (min-width: 768px) {
  .stockticker__wrapper {
    display: flex;
    justify-content: center;
    padding: 10px 0;
  }
}
@media (min-width: 960px) {
  .stockticker--fullwidth .stockticker__wrapper {
    margin: 0 -15px;
  }
}
@media (min-width: 1200px) {
  .stockticker--fullwidth .stockticker__wrapper {
    width: auto;
    margin: 0 calc((100vw - 1200px) / -2);
  }
}
@media (min-width: 2048px) {
  .stockticker--fullwidth .stockticker__wrapper {
    width: auto;
    margin: 0 calc((2048px - 1200px) / -2);
  }
  .container--fullWidth .stockticker--fullwidth .stockticker__wrapper {
    margin: 0;
  }
  .columncontrol__column:first-child .stockticker--fullwidth .stockticker__wrapper {
    margin-right: 0;
  }
  .columncontrol__column:last-child .stockticker--fullwidth .stockticker__wrapper {
    margin-left: 0;
  }
}
@media (max-width: 2048px) {
  .stockticker--fullwidth {
    padding: 0;
  }
}
.stockticker__box {
  padding: 5px 0;
}
@media (max-width: 1090px) {
  .stockticker__box {
    padding: 3px 0;
  }
}
@media (min-width: 768px) {
  .stockticker__box::after {
    content: "|";
    color: #53565a;
    font-weight: normal;
    padding: 0 15px;
  }
  .stockticker__box:last-child::after {
    content: none;
  }
}
.stockticker__title {
  display: none;
}
.stockticker__indice--collage {
  display: none;
}
.stockticker__price {
  display: inline;
  font-weight: bold;
}
.stockticker__priceTitle {
  display: none;
}
.stockticker__priceCurrency, .stockticker__priceNumber {
  font-family: var(--ff-medium);
}
.stockticker__rate {
  display: inline-flex;
  align-items: center;
  font-weight: bold;
  margin-left: 20px;
  position: relative;
}
@media (max-width: 767px) {
  .stockticker__rate {
    margin-inline-start: 40px;
  }
}
.stockticker__rate--positive:before {
  background-color: #47962d;
  content: "";
  display: inline-block;
  -webkit-mask-image: url("../../../../../../content/dam/volvo-media/service-contract-icons/arrow-up.svg#arrow-up-icon-w24-view");
          mask-image: url("../../../../../../content/dam/volvo-media/service-contract-icons/arrow-up.svg#arrow-up-icon-w24-view");
  -webkit-mask-repeat: no-repeat;
          mask-repeat: no-repeat;
  -webkit-mask-size: cover;
          mask-size: cover;
  pointer-events: none;
  width: var(--v-icon-size);
  height: var(--v-icon-size);
}
@media (min-width: 1200px) {
  .stockticker__rate--positive:before {
    -webkit-mask-image: url("../../../../../../content/dam/volvo-media/service-contract-icons/arrow-up.svg#arrow-up-icon-w16-view");
            mask-image: url("../../../../../../content/dam/volvo-media/service-contract-icons/arrow-up.svg#arrow-up-icon-w16-view");
  }
}
.stockticker__rate--zero:before {
  background-color: #47962d;
  content: "";
  display: inline-block;
  -webkit-mask-image: url("../../../../../../content/dam/volvo-media/service-contract-icons/arrow-right.svg#arrow-right-icon-w24-view");
          mask-image: url("../../../../../../content/dam/volvo-media/service-contract-icons/arrow-right.svg#arrow-right-icon-w24-view");
  -webkit-mask-repeat: no-repeat;
          mask-repeat: no-repeat;
  -webkit-mask-size: cover;
          mask-size: cover;
  pointer-events: none;
  width: var(--v-icon-size);
  height: var(--v-icon-size);
}
@media (min-width: 1200px) {
  .stockticker__rate--zero:before {
    -webkit-mask-image: url("../../../../../../content/dam/volvo-media/service-contract-icons/arrow-right.svg#arrow-right-icon-w16-view");
            mask-image: url("../../../../../../content/dam/volvo-media/service-contract-icons/arrow-right.svg#arrow-right-icon-w16-view");
  }
}
.stockticker__rate--negative:before {
  background-color: #c4001a;
  content: "";
  display: inline-block;
  -webkit-mask-image: url("../../../../../../content/dam/volvo-media/service-contract-icons/arrow-down.svg#arrow-down-icon-w24-view");
          mask-image: url("../../../../../../content/dam/volvo-media/service-contract-icons/arrow-down.svg#arrow-down-icon-w24-view");
  -webkit-mask-repeat: no-repeat;
          mask-repeat: no-repeat;
  -webkit-mask-size: cover;
          mask-size: cover;
  pointer-events: none;
  width: var(--v-icon-size);
  height: var(--v-icon-size);
}
@media (min-width: 1200px) {
  .stockticker__rate--negative:before {
    -webkit-mask-image: url("../../../../../../content/dam/volvo-media/service-contract-icons/arrow-down.svg#arrow-down-icon-w16-view");
            mask-image: url("../../../../../../content/dam/volvo-media/service-contract-icons/arrow-down.svg#arrow-down-icon-w16-view");
  }
}
.stockticker__rate::before {
  margin-right: 5px;
}
@media (max-width: 767px) {
  .stockticker__rate::before {
    position: absolute;
    left: -25px;
    top: 2px;
  }
}
@media (min-width: 768px) {
  .stockticker__rate {
    margin-left: 0;
  }
}

.collage + .stockticker {
  margin-top: -26px;
}
.collage .stockticker {
  margin: 0;
}
.collage .stockticker__wrapper {
  text-align: left;
  padding: 14px 20px;
  background: transparent;
}
@media (max-width: 1090px) {
  .collage .stockticker__wrapper {
    padding: 8px 14px;
  }
}
@media (min-width: 768px) {
  .collage .stockticker__wrapper {
    display: block;
  }
}
@media (min-width: 768px) {
  .collage .stockticker .stockticker__box::after {
    content: none;
  }
}
.collage .stockticker .stockticker__title {
  font-family: var(--ff-medium);
  font-size: 12px;
  font-weight: 400;
  line-height: 1.5;
  letter-spacing: var(--ls-default);
  margin-bottom: -5px;
  text-transform: uppercase;
  display: block;
}
@media (max-width: 1090px) {
  .collage .stockticker .stockticker__title {
    padding-top: 0;
  }
}
.collage .stockticker .stockticker__indice {
  display: none;
}
.collage .stockticker .stockticker__indice--collage {
  display: inline-flex;
  align-items: center;
}
.collage .stockticker .stockticker__indice--collage:before {
  background-color: #53565a;
  content: "";
  display: inline-block;
  -webkit-mask-image: url("../../../../../../content/dam/volvo-media/service-contract-icons/graph-up.svg#graph-up-icon-w24-view");
          mask-image: url("../../../../../../content/dam/volvo-media/service-contract-icons/graph-up.svg#graph-up-icon-w24-view");
  -webkit-mask-repeat: no-repeat;
          mask-repeat: no-repeat;
  -webkit-mask-size: cover;
          mask-size: cover;
  pointer-events: none;
  width: var(--v-icon-size);
  height: var(--v-icon-size);
}
@media (min-width: 1200px) {
  .collage .stockticker .stockticker__indice--collage:before {
    -webkit-mask-image: url("../../../../../../content/dam/volvo-media/service-contract-icons/graph-up.svg#graph-up-icon-w16-view");
            mask-image: url("../../../../../../content/dam/volvo-media/service-contract-icons/graph-up.svg#graph-up-icon-w16-view");
  }
}
.collage .stockticker .stockticker__indice--collage::before {
  margin-right: 15px;
  font-weight: bold;
}
.collage .stockticker .stockticker__price {
  display: block;
  border-bottom: 1px solid #a7a8a9;
}
.collage .stockticker .stockticker__priceTitle {
  font-weight: normal;
}
.collage .stockticker .stockticker__priceCurrency, .collage .stockticker .stockticker__priceNumber {
  font-family: var(--ff-medium);
}
.collage .stockticker .stockticker__priceTitle, .collage .stockticker .stockticker__priceNumber, .collage .stockticker .stockticker__priceCurrency {
  display: inline;
}
.collage .stockticker .stockticker__priceNumber {
  font-size: 24px;
  letter-spacing: -0.19px;
}
.collage .stockticker .stockticker__rate {
  display: inline-block;
  font-weight: normal;
  margin-left: 0;
  color: #53565a;
  vertical-align: bottom;
}
.collage .stockticker .stockticker__rate::before {
  content: none;
}
.collage .stockticker .stockticker__stockinfo {
  border-top: 1px solid #a7a8a9;
  border-bottom: 1px solid #a7a8a9;
}
.collage .stockticker .stockticker__date {
  font-size: 14px;
}
.collage .stockticker .stockticker__dateDate {
  display: inline-flex;
  align-items: center;
}
.collage .stockticker .stockticker__dateDate:before {
  background-color: #53565a;
  content: "";
  display: inline-block;
  -webkit-mask-image: url("../../../../../../content/dam/volvo-media/list-icons/calendar.svg#calendar-icon-w24-view");
          mask-image: url("../../../../../../content/dam/volvo-media/list-icons/calendar.svg#calendar-icon-w24-view");
  -webkit-mask-repeat: no-repeat;
          mask-repeat: no-repeat;
  -webkit-mask-size: cover;
          mask-size: cover;
  pointer-events: none;
  width: var(--v-icon-size);
  height: var(--v-icon-size);
}
@media (min-width: 1200px) {
  .collage .stockticker .stockticker__dateDate:before {
    -webkit-mask-image: url("../../../../../../content/dam/volvo-media/list-icons/calendar.svg#calendar-icon-w16-view");
            mask-image: url("../../../../../../content/dam/volvo-media/list-icons/calendar.svg#calendar-icon-w16-view");
  }
}
.collage .stockticker .stockticker__dateDate::before {
  margin-right: 5px;
}
.collage .stockticker .stockticker__dateTime {
  float: right;
  display: flex;
  align-items: center;
}
.collage .stockticker .stockticker__dateTime:before {
  background-color: #53565a;
  content: "";
  display: inline-block;
  -webkit-mask-image: url("../../../../../../content/dam/volvo-media/list-icons/clock.svg#clock-icon-w24-view");
          mask-image: url("../../../../../../content/dam/volvo-media/list-icons/clock.svg#clock-icon-w24-view");
  -webkit-mask-repeat: no-repeat;
          mask-repeat: no-repeat;
  -webkit-mask-size: cover;
          mask-size: cover;
  pointer-events: none;
  width: var(--v-icon-size);
  height: var(--v-icon-size);
}
@media (min-width: 1200px) {
  .collage .stockticker .stockticker__dateTime:before {
    -webkit-mask-image: url("../../../../../../content/dam/volvo-media/list-icons/clock.svg#clock-icon-w16-view");
            mask-image: url("../../../../../../content/dam/volvo-media/list-icons/clock.svg#clock-icon-w16-view");
  }
}
.collage .stockticker .stockticker__dateTime::before {
  margin-right: 5px;
}
/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImZpbGU6Ly8vYnVpbGRfcm9vdC9idWlsZC9nbG9iYWwtcDExMDQ5OC11azQzMDExL3ZvbHZvLWNsaWVudGxpYnMtYXBwcy9zcmMvbWFpbi9mcm9udGVuZC92b2x2by9jb21tb24vc3R5bGVzL3ZhcmlhYmxlcy9faW1wb3J0X3ZhcmlhYmxlcy5zY3NzIiwiZmlsZTovLy9idWlsZF9yb290L2J1aWxkL2dsb2JhbC1wMTEwNDk4LXVrNDMwMTEvdm9sdm8tY2xpZW50bGlicy1hcHBzL3NyYy9tYWluL2Zyb250ZW5kL3ZvbHZvL2NvbW1vbi9zdHlsZXMvdmFyaWFibGVzL190eXBvZ3JhcGhpZXMuc2NzcyIsImZpbGU6Ly8vYnVpbGRfcm9vdC9idWlsZC9nbG9iYWwtcDExMDQ5OC11azQzMDExL3ZvbHZvLWNsaWVudGxpYnMtYXBwcy9zcmMvbWFpbi9mcm9udGVuZC92b2x2by9jb21tb24vc3R5bGVzL3ZhcmlhYmxlcy9fel9pbmRleC5zY3NzIiwiZmlsZTovLy9idWlsZF9yb290L2J1aWxkL2dsb2JhbC1wMTEwNDk4LXVrNDMwMTEvdm9sdm8tY2xpZW50bGlicy1hcHBzL3NyYy9tYWluL2Zyb250ZW5kL3ZvbHZvL2NvbW1vbi9zdHlsZXMvYWJzdHJhY3QvZnVuY3Rpb25zL19ubi1weC10by1lbS5zY3NzIiwiZmlsZTovLy9idWlsZF9yb290L2J1aWxkL2dsb2JhbC1wMTEwNDk4LXVrNDMwMTEvdm9sdm8tY2xpZW50bGlicy1hcHBzL3NyYy9tYWluL2Zyb250ZW5kL3ZvbHZvL2NvbW1vbi9zdHlsZXMvYWJzdHJhY3QvZnVuY3Rpb25zL19ubi1weC10by1yZW0uc2NzcyIsImZpbGU6Ly8vYnVpbGRfcm9vdC9idWlsZC9nbG9iYWwtcDExMDQ5OC11azQzMDExL3ZvbHZvLWNsaWVudGxpYnMtYXBwcy9zcmMvbWFpbi9mcm9udGVuZC92b2x2by9jb21tb24vc3R5bGVzL2Fic3RyYWN0L2Z1bmN0aW9ucy9fbm4tcHgtdG8tdW5pdC5zY3NzIiwiZmlsZTovLy9idWlsZF9yb290L2J1aWxkL2dsb2JhbC1wMTEwNDk4LXVrNDMwMTEvdm9sdm8tY2xpZW50bGlicy1hcHBzL3NyYy9tYWluL2Zyb250ZW5kL3ZvbHZvL2NvbW1vbi9zdHlsZXMvYWJzdHJhY3QvZnVuY3Rpb25zL19ubi1weC10by11bml0bGVzcy5zY3NzIiwiZmlsZTovLy9idWlsZF9yb290L2J1aWxkL2dsb2JhbC1wMTEwNDk4LXVrNDMwMTEvdm9sdm8tY2xpZW50bGlicy1hcHBzL3NyYy9tYWluL2Zyb250ZW5kL3ZvbHZvL2NvbW1vbi9zdHlsZXMvYWJzdHJhY3QvZnVuY3Rpb25zL19ubi1zdHJpcC11bml0LnNjc3MiLCJmaWxlOi8vL2J1aWxkX3Jvb3QvYnVpbGQvZ2xvYmFsLXAxMTA0OTgtdWs0MzAxMS92b2x2by1jbGllbnRsaWJzLWFwcHMvc3JjL21haW4vZnJvbnRlbmQvdm9sdm8vY29tbW9uL3N0eWxlcy9hYnN0cmFjdC9mdW5jdGlvbnMvX25uLXotaW5kZXguc2NzcyIsImZpbGU6Ly8vYnVpbGRfcm9vdC9idWlsZC9nbG9iYWwtcDExMDQ5OC11azQzMDExL3ZvbHZvLWNsaWVudGxpYnMtYXBwcy9zcmMvbWFpbi9mcm9udGVuZC92b2x2by9jb21tb24vc3R5bGVzL2Fic3RyYWN0L2Z1bmN0aW9ucy9fc3RyaXAtdW5pdC5zY3NzIiwiZmlsZTovLy9idWlsZF9yb290L2J1aWxkL2dsb2JhbC1wMTEwNDk4LXVrNDMwMTEvdm9sdm8tY2xpZW50bGlicy1hcHBzL3NyYy9tYWluL2Zyb250ZW5kL3ZvbHZvL2NvbW1vbi9zdHlsZXMvYWJzdHJhY3QvZnVuY3Rpb25zL19ubi1ydGwuc2NzcyIsImZpbGU6Ly8vYnVpbGRfcm9vdC9idWlsZC9nbG9iYWwtcDExMDQ5OC11azQzMDExL3ZvbHZvLWNsaWVudGxpYnMtYXBwcy9zcmMvbWFpbi9mcm9udGVuZC92b2x2by9jb21tb24vc3R5bGVzL2Fic3RyYWN0L2Z1bmN0aW9ucy9fcHgtdG8tYXhpcy11bml0LnNjc3MiLCJmaWxlOi8vL2J1aWxkX3Jvb3QvYnVpbGQvZ2xvYmFsLXAxMTA0OTgtdWs0MzAxMS92b2x2by1jbGllbnRsaWJzLWFwcHMvc3JjL21haW4vZnJvbnRlbmQvdm9sdm8vY29tbW9uL3N0eWxlcy9hYnN0cmFjdC9mdW5jdGlvbnMvX3N3YXAtbGVmdC1yaWdodC12YWx1ZXMuc2NzcyIsImZpbGU6Ly8vYnVpbGRfcm9vdC9idWlsZC9nbG9iYWwtcDExMDQ5OC11azQzMDExL3ZvbHZvLWNsaWVudGxpYnMtYXBwcy9zcmMvbWFpbi9mcm9udGVuZC92b2x2by9jb21tb24vc3R5bGVzL2Fic3RyYWN0L2Z1bmN0aW9ucy9fc3dhcC1sZWZ0LXJpZ2h0LW5hbWVzLnNjc3MiLCJmaWxlOi8vL2J1aWxkX3Jvb3QvYnVpbGQvZ2xvYmFsLXAxMTA0OTgtdWs0MzAxMS92b2x2by1jbGllbnRsaWJzLWFwcHMvc3JjL21haW4vZnJvbnRlbmQvdm9sdm8vY29tbW9uL3N0eWxlcy9hYnN0cmFjdC9mdW5jdGlvbnMvX3NwYWNpbmcuc2NzcyIsImZpbGU6Ly8vYnVpbGRfcm9vdC9idWlsZC9nbG9iYWwtcDExMDQ5OC11azQzMDExL3ZvbHZvLWNsaWVudGxpYnMtYXBwcy9zcmMvbWFpbi9mcm9udGVuZC92b2x2by9jb21tb24vc3R5bGVzL2Fic3RyYWN0L21peGlucy9fY2xlYXJmaXguc2NzcyIsImZpbGU6Ly8vYnVpbGRfcm9vdC9idWlsZC9nbG9iYWwtcDExMDQ5OC11azQzMDExL3ZvbHZvLWNsaWVudGxpYnMtYXBwcy9zcmMvbWFpbi9mcm9udGVuZC92b2x2by9jb21tb24vc3R5bGVzL2Fic3RyYWN0L21peGlucy9fZm9udC1pY29uLnNjc3MiLCJmaWxlOi8vL2J1aWxkX3Jvb3QvYnVpbGQvZ2xvYmFsLXAxMTA0OTgtdWs0MzAxMS92b2x2by1jbGllbnRsaWJzLWFwcHMvc3JjL21haW4vZnJvbnRlbmQvdm9sdm8vY29tbW9uL3N0eWxlcy9hYnN0cmFjdC9taXhpbnMvX2ZvY3VzLWNvbG9yLnNjc3MiLCJmaWxlOi8vL2J1aWxkX3Jvb3QvYnVpbGQvZ2xvYmFsLXAxMTA0OTgtdWs0MzAxMS92b2x2by1jbGllbnRsaWJzLWFwcHMvc3JjL21haW4vZnJvbnRlbmQvdm9sdm8vY29tbW9uL3N0eWxlcy9hYnN0cmFjdC9taXhpbnMvX2lnbm9yZS1jb250YWluZXIuc2NzcyIsImZpbGU6Ly8vYnVpbGRfcm9vdC9idWlsZC9nbG9iYWwtcDExMDQ5OC11azQzMDExL3ZvbHZvLWNsaWVudGxpYnMtYXBwcy9zcmMvbWFpbi9mcm9udGVuZC92b2x2by9jb21tb24vc3R5bGVzL2Fic3RyYWN0L21peGlucy9fZ2VuZXJhdGUtYWVtLWdyaWQuc2NzcyIsImZpbGU6Ly8vYnVpbGRfcm9vdC9idWlsZC9nbG9iYWwtcDExMDQ5OC11azQzMDExL3ZvbHZvLWNsaWVudGxpYnMtYXBwcy9zcmMvbWFpbi9mcm9udGVuZC92b2x2by9jb21tb24vc3R5bGVzL2Fic3RyYWN0L21peGlucy9fYnV0dG9uLnNjc3MiLCJmaWxlOi8vL2J1aWxkX3Jvb3QvYnVpbGQvZ2xvYmFsLXAxMTA0OTgtdWs0MzAxMS92b2x2by1jbGllbnRsaWJzLWFwcHMvc3JjL21haW4vZnJvbnRlbmQvdm9sdm8vY29tbW9uL3N0eWxlcy9hYnN0cmFjdC9taXhpbnMvX2xpbmUtY2xhbXAuc2NzcyIsImZpbGU6Ly8vYnVpbGRfcm9vdC9idWlsZC9nbG9iYWwtcDExMDQ5OC11azQzMDExL3ZvbHZvLWNsaWVudGxpYnMtYXBwcy9zcmMvbWFpbi9mcm9udGVuZC92b2x2by9jb21tb24vc3R5bGVzL2Fic3RyYWN0L21peGlucy9fdHlwb2dyYXBoeS5zY3NzIiwiZmlsZTovLy9idWlsZF9yb290L2J1aWxkL2dsb2JhbC1wMTEwNDk4LXVrNDMwMTEvdm9sdm8tY2xpZW50bGlicy1hcHBzL3NyYy9tYWluL2Zyb250ZW5kL3ZvbHZvL2NvbW1vbi9zdHlsZXMvYWJzdHJhY3QvbWl4aW5zL19oaWRkZW4uc2NzcyIsImZpbGU6Ly8vYnVpbGRfcm9vdC9idWlsZC9nbG9iYWwtcDExMDQ5OC11azQzMDExL3ZvbHZvLWNsaWVudGxpYnMtYXBwcy9zcmMvbWFpbi9mcm9udGVuZC92b2x2by9jb21tb24vc3R5bGVzL2Fic3RyYWN0L21peGlucy9fb3ZlcmxheS5zY3NzIiwiZmlsZTovLy9idWlsZF9yb290L2J1aWxkL2dsb2JhbC1wMTEwNDk4LXVrNDMwMTEvdm9sdm8tY2xpZW50bGlicy1hcHBzL3NyYy9tYWluL2Zyb250ZW5kL3ZvbHZvL2NvbW1vbi9zdHlsZXMvYWJzdHJhY3QvbWl4aW5zL190b3AtYm90dG9tLWJvcmRlci5zY3NzIiwiZmlsZTovLy9idWlsZF9yb290L2J1aWxkL2dsb2JhbC1wMTEwNDk4LXVrNDMwMTEvdm9sdm8tY2xpZW50bGlicy1hcHBzL3NyYy9tYWluL2Zyb250ZW5kL3ZvbHZvL2NvbW1vbi9zdHlsZXMvYWJzdHJhY3QvbWl4aW5zL19yZXNldC1mdWxsd2lkdGgtbWFyZ2lucy5zY3NzIiwiZmlsZTovLy9idWlsZF9yb290L2J1aWxkL2dsb2JhbC1wMTEwNDk4LXVrNDMwMTEvdm9sdm8tY2xpZW50bGlicy1hcHBzL3NyYy9tYWluL2Zyb250ZW5kL3ZvbHZvL3NoYXJlZC9jb21wb25lbnRzL2NvbnRlbnQvc3RvY2t0aWNrZXIvc3RvY2t0aWNrZXIuY2xpZW50bGlicy5zY3NzIiwiLi4vdGFyZ2V0L3ZhdWx0LXdvcmsvamNyX3Jvb3QvYXBwcy92b2x2by9jbGllbnRsaWJzL3NoYXJlZC9jb21wb25lbnRzL2NvbnRlbnQvc3RvY2t0aWNrZXIvc3RvY2t0aWNrZXIuYnVuZGxlLmNzcyIsImZpbGU6Ly8vYnVpbGRfcm9vdC9idWlsZC9nbG9iYWwtcDExMDQ5OC11azQzMDExL3ZvbHZvLWNsaWVudGxpYnMtYXBwcy9zcmMvbWFpbi9mcm9udGVuZC92b2x2by9jb21tb24vc3R5bGVzL3ZhcmlhYmxlcy9fY29sb3JzLnNjc3MiLCJmaWxlOi8vL2J1aWxkX3Jvb3QvYnVpbGQvZ2xvYmFsLXAxMTA0OTgtdWs0MzAxMS92b2x2by1jbGllbnRsaWJzLWFwcHMvYnVpbGQvbm9kZV9tb2R1bGVzL2JyZWFrcG9pbnQtc2Fzcy9zdHlsZXNoZWV0cy9fYnJlYWtwb2ludC5zY3NzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBOzs7OztDQUFBO0FDRkE7OztDQUFBO0FDRUE7O0VBQUE7QUNGQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0NBQUE7QUNBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0NBQUE7QUNBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Q0FBQTtBQ0FBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztDQUFBO0FDQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Q0FBQTtBQ0FBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Q0FBQTtBQ0FBOzs7Ozs7Ozs7Ozs7Ozs7OztDQUFBO0FDQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0NBQUE7QUNXQTs7Ozs7Ozs7OztDQUFBO0FBbUJBOzs7Q0FBQTtBQVFBOzs7Q0FBQTtBQ3RDQSxzQkFBQTtBQUVBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztDQUFBO0FDRkEsc0JBQUE7QUFFQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Q0FBQTtBQ0ZBO3NFQUFBO0FBSUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Q0FBQTtBQ0pBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0NBQUE7QUNDQSx3Q0FBQTtBQ0RBOzs7Ozs7Ozs7Ozs7Q0FBQTtBQ0FBOzs7Ozs7Ozs7Ozs7OztDQUFBO0FDRUEsa0ZBQUE7QUFhQSx3RkFBQTtBQVdBLG9HQUFBO0FBVUEsd0RBQUE7QUNwQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7Q0FBQTtBQ0FBOzs7Ozs7Ozs7Ozs7Ozs7Q0FBQTtBQ0FBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztDQUFBO0FDQUE7Ozs7Ozs7Ozs7O0NBQUE7QUNBQTs7Ozs7Ozs7Ozs7O0NBQUE7QUNBQTs7Ozs7Ozs7Ozs7OztFQUFBO0FDQUE7Ozs7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O0VBQ0kseUJhOURXO0ViK0RYLFdBQUE7RUFDQSxxQkFBQTtFQUNBLDRGQUFBO1VBQUEsb0ZBQUE7RUFDQSw4QkFBQTtVQUFBLHNCQUFBO0VBQ0Esd0JBQUE7VUFBQSxnQkFBQTtFQUNBLG9CQUFBO0VBVUkseUJBQUE7RUFDQSwwQkFBQTtBWXF2Qlo7QVo5dkJRO0VBVEo7SUFVUSw0RkFBQTtZQUFBLG9GQUFBO0VZaXdCVjtBQUNGO0FEM2xCZ0I7RUFDSSxpQkFBQTtBQzZsQnBCIiwiZmlsZSI6Ii4uL3RhcmdldC92YXVsdC13b3JrL2pjcl9yb290L2FwcHMvdm9sdm8vY2xpZW50bGlicy9zaGFyZWQvY29tcG9uZW50cy9jb250ZW50L3N0b2NrdGlja2VyL3N0b2NrdGlja2VyLmJ1bmRsZS5jc3MiLCJzb3VyY2VzQ29udGVudCI6W251bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsIi8qXG5BbHNvIHBsZWFzZSBmb2xsb3cgdGhpc1xuRG8geW91ciBwcm9qZWN0IGhhdmUgZGlmZXJlbnQgY2hhcnNldCBsYW5ndWFnZXMgdG8gYWNjb3VudCB3aXRoP1xuICAgICAgLSBZZXMgLT4gZm9sbG93IGh0dHBzOi8vcHJvamVjdHMubmV0Y2VudHJpYy5iaXovd2lraS9kaXNwbGF5L0ZST05URU5EL0NTUystK0ZvbnQrTm9ybWFsaXphdGlvblxuICAgICAgLSBObyAtPiBZb3UgY2FuIHN0aWxsIHVzZSBpdCwgdGhlcmUgYXJlIHRvbnMgb2YgYWR2YW50YWdlcywgYnV0IGl0cyBjcmVhdGUgc29tZSBleHRyYSBjc3MgYW5kIGxheW91dCByZW5kZXJpbmdcbiovXG4vKlxuICAqIERlc2lnbiBzcGVjOlxuICAqIGh0dHBzOi8vd3d3LmZpZ21hLmNvbS9maWxlL1NSNHJ2UWxObkNtUE1yUTlXWWFJcXYvYnJhbmNoL1RKcWtGeW1xMDl3ZjhLd21ZMVdOY2ovVm9sdm8tQUVNLURlc2lnbi1zeXN0ZW0/dHlwZT1kZXNpZ24mbm9kZS1pZD03LTI2JnQ9cEFtOTE2VlJpcUNPRDJJMS0wXG4qL1xuLyoqXG4gKiB6LWluZGV4ZXMgZnJvbSBsb3dlciB0byAtPiBoaWdoZXJcbiAqL1xuLyogZG9jXG4tLS1cbnRpdGxlOiBQaXhlbCB0byBlbVxubmFtZTogbm4tcHgtdG8tZW1cbmNhdGVnb3J5OiBmdW5jdGlvbnNcbi0tLVxuXG5DYWxjdWxhdGUgdGhlIGVtIHdpdGggYSBnaXZlbiBwaXhlbCB3aXRoIHRoZSBnaXZlbiBiYXNlIGZvbnQgc2l6ZVxuSWYgeW91IGRvbid0IHNldCBhICRiYXNlIHRoZSAkYmFzZS1mb250LXNpemUgaXMgdXNlZCBhcyB0aGUgY29udGV4dFxuXG4jIyBMaXZlIFRlbXBsYXRlIGFiYnJldmlhdGlvbnNcbi0tLVxuLXB0dVxuXG4jIyBQYXJhbWV0ZXJzXG4tLS1cbkBwYXJhbWV0ZXIgJHZhbHVlID0gcGl4ZWwgYmFzZWQgbnVtYmVyICh3aXRob3V0IHVuaXQpXG5AcGFyYW1ldGVyICRiYXNlID0gcGl4ZWwgYmFzZWQgbnVtYmVyICh3aXRob3V0IHVuaXQpXG5cbiMjIERlcGVuZGVuY2llc1xuLS0tXG5ubi1zdHJpcC11bml0XG5cbiMjIEV4YW1wbGVcbi0tLVxuYGBgaHRtbF9leGFtcGxlXG5ubi1weC10by1lbSg1KSAvLyBPdXRwdXQ6IDAuMzEyNWVtXG5ubi1weC10by1lbSg1LCAxMCkgLy8gT3V0cHV0OiAwLjVlbVxubm4tcHgtdG8tZW0oNSwgMjApIC8vIE91dHB1dDogMC4yNWVtXG5gYGBcbiovXG4vKiBkb2Ncbi0tLVxudGl0bGU6IFBpeGVsIHRvIHJlbVxubmFtZTogbm4tcHgtdG8tcmVtXG5jYXRlZ29yeTogZnVuY3Rpb25zXG4tLS1cblxuQ2FsY3VsYXRlIHRoZSByZW0gd2l0aCBhIGdpdmVuIHBpeGVsIHdpdGggdGhlIGdpdmVuIGJhc2UgZm9udCBzaXplXG5cbkluOiAgNXB4XG5PdXQ6IDAuMzEyNXJlbVxuXG4jIyBMaXZlIFRlbXBsYXRlIGFiYnJldmlhdGlvbnNcbi0tLVxuLXJlbVxuXG4jIyBQYXJhbWV0ZXJzXG4tLS1cbkBwYXJhbWV0ZXIgJHZhbHVlID0gcGl4ZWwgYmFzZWQgbnVtYmVyICh3aXRob3V0IHVuaXQpXG5cbiMjIERlcGVuZGVuY2llc1xuLS0tXG5ubi1zdHJpcC11bml0XG5cbiMjIEV4YW1wbGVcbi0tLVxuYGBgaHRtbF9leGFtcGxlXG5ubi1weC10by1yZW0oNSkgLy8gT3V0cHV0IDAuMzEyNXJlbVxuYGBgXG5cbiovXG4vKiBkb2Ncbi0tLVxudGl0bGU6IFBpeGVsIHRvIHVuaXRcbm5hbWU6IHB4LXRvLXVuaXRcbmNhdGVnb3J5OiBtaXhpbnNcbi0tLVxuXG5TZXQgYSBwcm9wZXJ0eSBhbmQgdmFsdWUgKHBpeGVsIGJhc2VkIHdpdGhvdXQgdW5pdClcblxuQ2FsY3VsYXRlcyByZW0gLyBlbSAvICUgZnJvbSBnaXZlbiBwaXhlbCBhbmQgYmFzZSAoZGVmYXVsdCBiYXNlIGlzIHRoZVxuYmFzZS1mb250LXNpemUsIDE2cHgpXG5JZiBydGwgaXMgdHJ1ZSwgdGhpcyBtaXhpbiBoYW5kbGVzIGFsbCB0aGUgZGlyZWN0aW9uIHN0dWZmOlxuLSBTd2l0Y2hpbmcgdGhlIHZhbHVlcywgd2hlbiB3ZSBoYXZlIGV4YWN0bHkgNCB2YWx1ZXNcbi0gU3dpdGNoaW5nIGxlZnQgYW5kIHJpZ2h0IGluIHByb3BlcnRpZXMgKHBhZGRpbmcgYW5kIG1hcmdpbilcblxuIyMgTGl2ZSBUZW1wbGF0ZSBhYmJyZXZpYXRpb25zXG4tLS1cbi1wdHUgKGZvciBlbSBvciAlIHRvIHBpeGVsIC0gd2l0aCBiYXNlIHBhcmFtZXRlcilcbi1yZW0gKGZvciByZW0gdG8gcGl4ZWwgLSB3aXRob3V0IGJhc2UgcGFyYW1ldGVyKVxuXG4jIyBQYXJhbWV0ZXJzXG4tLS1cbkBwYXJhbWV0ZXIgJHByb3BlcnR5ID0gcGFkZGluZyB8IG1hcmdpbiB8IGZvbnQtc2l6ZSB8IHdpZHRoIHwgaGVpZ2h0XG5AcGFyYW1ldGVyICR2YWx1ZSA9IFBpeGVsIGJhc2VkIG51bWJlciAtIGFkZCBweCB0byBrZWVwIHRoZSBweCBmb3IgYSB2YWx1ZVxuQHBhcmFtZXRlciAkYmFzZSA9IHB4IGJhc2VkIG51bWJlciwgRGVmYXVsdDogMTZweFxuQHBhcmFtZXRlciAkdW5pdCA9IFNldCB1bml0OiBweCB8IGVtIHwgcmVtIHwgcGVyY2VudFxuXG4jIyBEZXBlbmRlbmNpZXNcbi0tLVxuYWJzdHJhY3QvZnVuY3Rpb25zL3N3YXAtbGVmdC1yaWdodFxuYWJzdHJhY3QvZnVuY3Rpb25zL3N0cmlwLXVuaXRcblxuIyMgRXhhbXBsZVxuLS0tXG5cbmBgYGh0bWxfZXhhbXBsZVxuQGluY2x1ZGUgbm4tcHgtdG8tdW5pdChwYWRkaW5nLCAwIDEwcHggMjAgMCk7ID0+IHBhZGRpbmc6IDAgMTBweCAxLjI1cmVtIDA7XG5AaW5jbHVkZSBubi1weC10by11bml0KHBhZGRpbmcsIDAgMTAgMjAgMCk7ID0+IHBhZGRpbmc6IDAgMC42MjVyZW0gMS4yNXJlbSAwO1xuQGluY2x1ZGUgbm4tcHgtdG8tdW5pdChwYWRkaW5nLWxlZnQsIDEwKTtcbkBpbmNsdWRlIG5uLXB4LXRvLXVuaXQocGFkZGluZy1yaWdodCwgMTApO1xuQGluY2x1ZGUgbm4tcHgtdG8tdW5pdChtYXJnaW4sIDAgMTAgMjAgMCk7XG5AaW5jbHVkZSBubi1weC10by11bml0KG1hcmdpbi1sZWZ0LCAxMCk7XG5AaW5jbHVkZSBubi1weC10by11bml0KG1hcmdpbi1yaWdodCwgMTApO1xuQGluY2x1ZGUgbm4tcHgtdG8tdW5pdChmb250LXNpemUsIDIwKTtcbkBpbmNsdWRlIG5uLXB4LXRvLXVuaXQod2lkdGgsIDEwMCk7XG5AaW5jbHVkZSBubi1weC10by11bml0KG1pbi13aWR0aCwgMTAwKTtcbkBpbmNsdWRlIG5uLXB4LXRvLXVuaXQobWFubi13aWR0aCwgMTAwKTtcbkBpbmNsdWRlIG5uLXB4LXRvLXVuaXQoaGVpZ2h0LCAxMDApO1xuQGluY2x1ZGUgbm4tcHgtdG8tdW5pdChtaW4taGVpZ2h0LCAxMDApO1xuQGluY2x1ZGUgbm4tcHgtdG8tdW5pdChtYW5uLWhlaWdodCwgMTAwKTtcbmBgYFxuXG4jIyBTb3VyY2Vcbi0tLVxuaHR0cDovL2Nzcy10cmlja3MuY29tL3NuaXBwZXRzL2Nzcy9sZXNzLW1peGluLWZvci1yZW0tZm9udC1zaXppbmcvXG5cbiovXG4vKiBkb2Ncbi0tLVxudGl0bGU6IFBpeGVsIHRvIHVuaXRsZXNzXG5uYW1lOiBubi1weC10by11bml0bGVzc1xuY2F0ZWdvcnk6IGZ1bmN0aW9uc1xuLS0tXG5cblRoaXMgbWFrZXMgdGhlIHNhbWUgY2FsY3VsYXRpb24gYXMgcHggdG8gZW0uIEJ1dCBpdCBkb24ndCBwcmludCBvdXQgdGhlIHVuaXQuXG5cblVzZSB0aGlzIGZvciBsaW5lLWhlaWdodHMuXG5cbiMjIExpdmUgVGVtcGxhdGUgYWJicmV2aWF0aW9uc1xuLS0tXG5cbiMjIFBhcmFtZXRlcnNcbi0tLVxuQHBhcmFtZXRlciAkdmFsdWUgPSBwaXhlbCBiYXNlZCBudW1iZXIgKHdpdGhvdXQgdW5pdClcbkBwYXJhbWV0ZXIgJGJhc2UgPSBwaXhlbCBiYXNlZCBudW1iZXIgKHdpdGhvdXQgdW5pdClcblxuIyMgRGVwZW5kZW5jaWVzXG4tLS1cblxuIyMgRXhhbXBsZVxuLS0tXG5cbmBgYGh0bWxfZXhhbXBsZVxubGluZS1oZWlnaHQ6IG5uLXB4LXRvLXVuaXRsZXNzKDUpIC8vIE91dHB1dDogMC4zMTI1XG5gYGBcblxuIyMgU291cmNlXG4tLS1cblxuKi9cbi8qIGRvY1xuLS0tXG50aXRsZTogU3RyaXAgdW5pdFxubmFtZTogbm4tc3RyaXAtdW5pdFxuY2F0ZWdvcnk6IGZ1bmN0aW9uc1xuLS0tXG5cblN0cmlwcyBvZiB0aGUgdW5pdCBvZiBhIG51bWJlclxuXG4jIyBQYXJhbWV0ZXJzXG4tLS1cbkBwYXJhbWV0ZXIgJG51bSA9IG51bWJlciB3aXRoIHVuaXQgKDVweCwgNWVtLCA1cmVtKVxuXG4jIyBFeGFtcGxlXG4tLS1cblxuYGBgaHRtbF9leGFtcGxlXG5ubi1zdHJpcC11bml0KDVweCkgLy9PdXRwdXQ6IDVcbm5uLXN0cmlwLXVuaXQoMTBlbSkgLy8gT3V0cHV0OiAxMFxubm4tc3RyaXAtdW5pdCgxNXJlbSkgLy8gT3V0cHV0OiAxNVxuYGBgXG5cbiovXG4vKiBkb2Ncbi0tLVxudGl0bGU6IHotaW5kZXhcbm5hbWU6IG5uLXotaW5kZXhcbmNhdGVnb3J5OiBmdW5jdGlvbnNcbi0tLVxuXG5CZWNhdXNlIHotaW5kaWNlcyBjYW4gZ2V0IHRyaWNreSB3ZSBtYW5hZ2UgdGhlbSBpbiB0aGUgdGhlbWUuc2NzcyBnbG9iYWxseS5cblxuQWx3YXlzIHVzZSB0aGlzIG1peGluIHRvIHNldCBzZXQgYSB6LWluZGV4LlxuXG5SZWFkIHRoZSBCZXN0IFByYWN0aWNlIHRvIGdldCBhbiBmdWxsIGRvY3VtZW50YXRpb246XG5odHRwczovL3Byb2plY3RzLm5ldGNlbnRyaWMuYml6L3dpa2kvZGlzcGxheS9GUk9OVEVORC9Ib3crdG8rc2V0K2Erei1pbmRleFxuXG4jIyBMaXZlIFRlbXBsYXRlIGFiYnJldmlhdGlvbnNcbi0tLVxuLXpcblxuIyMgUGFyYW1ldGVyc1xuLS0tXG5AcGFyYW1ldGVyICRlbGVtZW50ID0gTmFtZSBvZiB0aGUgZWxlbWVudCAobm9ybWFsbHkgdGhpcyB3aWxsIGJlIHRoZSBtb2R1bGUgbmFtZSBmb3IgdGhlIG1haW4gc3RhY2spXG5AcGFyYW1ldGVyICRsaXN0ID0gTmFtZSBvZiB0aGUgbGlzdCAoZGVmYXVsdCAkei1pbmRpY2VzKS4gTXVzdCBiZSBvbmx5IHNldCBmb3Igc3RhY2sgY29udGV4dFxuQHBhcmFtZXRlciAkbWluID0gU2V0IGEgbWluaW11bSB6LWluZGV4IHdoaWNoIHdpbGwgYmUgYWRkZWQgdG8gdGhlIGxpc3QuXG5cbiMjIERlcGVuZGVuY2llc1xuLS0tXG4kei1pbmRpY2VzIHZhcmlhYmxlIGluIHRoZSB0aGVtZS5zY3NzXG5cbiMjIEV4YW1wbGVcbi0tLVxuXG5gYGBodG1sX2V4YW1wbGVcblxuLy8gSW4gdGhlIFNBU1MgdGhlbWUgZmlsZVxuXG4kei1pbmRpY2VzOiBzbGlkZXIsIG1vZGFsLCBkaWFsb2csIG5hdmlnYXRpb247XG5cbi8vIEluIHRoZSBTQVNTIG1vZHVsZSBmaWxlXG5cbi5tb2RhbCB7XG4gICAgJl9fYmFzZSB7XG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgei1pbmRleDogbm4tei1pbmRleChtb2RhbCk7XG4gICAgfVxufVxuYGBgXG5cbiMjIFNvdXJjZVxuLS0tXG5odHRwOi8vd3d3LnNtYXNoaW5nbWFnYXppbmUuY29tLzIwMTQvMDYvMTIvc2Fzc3ktei1pbmRleC1tYW5hZ2VtZW50LWZvci1jb21wbGV4LWxheW91dHMvXG5cbiovXG4vKiBkb2Ncbi0tLVxudGl0bGU6IHJlbW92ZSBldmVyeSB1bml0XG5uYW1lOiBzdHJpcC11bml0XG5jYXRlZ29yeTogZnVuY3Rpb25zXG4tLS1cbnJlbW92ZSBhbGwgdW5pdHNcblxuIyMgUGFyYW1ldGVyc1xuLS0tXG5AcGFyYW1ldGVyICRudW1iZXIgPSBudW1iZXIgd2l0aCB1bml0XG5cbiMjIEV4YW1wbGVcbi0tLVxuYGBgaHRtbF9leGFtcGxlXG5zdHJpcC11bml0KDVweCkgLy8gT3V0cHV0OiA1XG5gYGBcbiovXG4vKiBkb2Ncbi0tLVxudGl0bGU6IFN3YXAgbGVmdCByaWdodCB2YWx1ZXNcbm5hbWU6IG5uLXJ0bFxuY2F0ZWdvcnk6IGZ1bmN0aW9uc1xuLS0tXG5cblN3YXAgdGhlIG5hbWVzIHJpZ2h0IGFuZCBsZWZ0IHdoZW4gJHJ0bCBpcyBzZXQgdG8gdHJ1ZS5cbklmIHRoZSB2YWx1ZSBpcyBub3QgcmlnaHQgb3IgbGVmdCBpdCByZXR1cm5zIHRoZSBvcmlnaW5hbCB2YWx1ZS5cblxuSW46ICByaWdodFxuT3V0OiBsZWZ0IChpbiBydGwpLCByaWdodCAoaW4gbHRyKVxuXG4jIyBMaXZlIFRlbXBsYXRlIGFiYnJldmlhdGlvbnNcbi0tLVxuXG4jIyBQYXJhbWV0ZXJzXG4tLS1cbkBwYXJhbWV0ZXIgJG9yaWdpbiA9IHJpZ2h0IHwgbGVmdFxuXG4jIyBFeGFtcGxlXG4tLS1cblxuYGBgaHRtbF9leGFtcGxlXG5ubi1ydGwobGVmdCk6IDEwcHg7XG5ubi1ydGwocGFkZGluZy1yaWdodCk6IDMwcHg7XG5ubi1ydGwoMCAxcHggOHB4IDEycHgpIC8vIDAgMTJweCA4cHggMXB4XG5gYGBcblxuKi9cbi8qXG4gICAgVGhpcyBtaXhpbiBjb252ZXJ0cyBhbnkgdW5pdGxlc3MgbnVtYmVyIChmb3IgZXhhbXBsZSA0MCkgdG8gdGhlIGNvcnJlY3QgdW5pdCwgYWNjb3JkaW5nIHRvIHRoZSBnaXZlbiBheGlzLlxuXG4gICAgUGFyYW1ldGVyczpcbiAgICAtICR2YWx1ZTogdW5pdGxlc3MgbnVtYmVyIHRvIGJlIGNvbnZlcnRlZC4gQSB1bml0IGluICR2YWx1ZSB3aWxsIGNvcnJlc3BvbmQgdG8gYSBweCBpbiB0aGUgYnJvd3NlcixcbiAgICAgICAgbm8gbWF0dGVyIGlmIGl0J3Mgb3V0cHV0IGFzIHB4IG9yIHJlbVxuXG4gICAgUmV0dXJuc1xuICAgIC0gSG9yaXpvbnRhbDogd2lsbCBjb252ZXJ0IHRoZSBudW1iZXIgdG8gcGl4ZWxzICg0MHB4KVxuICAgIC0gVmVydGljYWw6IHdpbGwgY29udmVydCB0aGUgbnVtYmVyIHRvIHJlbSAoaWYgcmVtID09PSAxNnB4LCB0aGVuIDQwIHdpbGwgYmUgY29udmVydGVkIHRvIDIuNSByZW0pXG4qL1xuLypcbiAgICBDb252ZXJ0cyBhIHVuaXRsZXNzIG51bWJlciB0byB0aGUgY29ycmVzcG9uZGluZyB1bml0IG9uIHRoZSBob3Jpem9udGFsIGF4aXMuXG4gICAgQnkgZGVmYXVsdCB3aWxsIGNvbnZlcnQgdGhlIHZhbHVlIHRvIHB4LlxuKi9cbi8qXG4gICAgQ29udmVydHMgYSB1bml0bGVzcyBudW1iZXIgdG8gdGhlIGNvcnJlc3BvbmRpbmcgdW5pdCBvbiB0aGUgdmVydGljYWwgYXhpcy5cbiAgICBCeSBkZWZhdWx0IHdpbGwgY29udmVydCB0aGUgdmFsdWUgdG8gcmVtLlxuKi9cbi8qIHN0eWxlbGludC1kaXNhYmxlICovXG4vKiBkb2Ncbi0tLVxudGl0bGU6IFN3YXAgbGVmdCByaWdodCB2YWx1ZXNcbm5hbWU6IHN3YXAtbGVmdC1yaWdodC12YWx1ZXNcbmNhdGVnb3J5OiBmdW5jdGlvbnNcbi0tLVxuXG5Td2FwIHRoZSB2YWx1ZXMgZm9yIHJpZ2h0IGFuZCBsZWZ0IHdoZW4gJHJ0bCBpcyBzZXQgdG8gdHJ1ZTpcblxuSW46ICAwIDVweCA4cHggMTJweFxuT3V0OiAwIDEycHggOHB4IDVweCAoaW4gcnRsKVxuXG4jIyBQYXJhbWV0ZXJzXG4tLS1cbkBwYXJhbWV0ZXIgJHZhbHVlcyA9IDQgbnVtYmVycyAod29ya3Mgd2l0aCBhbGwgdW5pdHMpXG5cbiMjIEV4YW1wbGVcbi0tLVxuXG5gYGBodG1sX2V4YW1wbGVcbnN3YXAtbGVmdC1yaWdodC12YWx1ZXMoMCAxcHggOHB4IDEycHgpIC8vIDAgMTJweCA4cHggMXB4XG5zd2FwLWxlZnQtcmlnaHQtdmFsdWVzKDAgMWVtIDhlbSAxMmVtKSAvLyAwIDEyZW0gOGVtIDFlbVxud2FwLWxlZnQtcmlnaHQtdmFsdWVzKDAgMXJlbSA4cmVtIDEycmVtKSAvLyAwIDEycmVtIDhyZW0gMXJlbVxuYGBgXG5cbiMjIFNvdXJjZVxuLS0tXG5odHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzE0MTk5MzIzL3JpZ2h0LXRvLWxlZnQtcnRsLXN1cHBvcnQtaW4tc2Fzcy1wcm9qZWN0XG5cbiovXG4vKiBzdHlsZWxpbnQtZGlzYWJsZSAqL1xuLyogZG9jXG4tLS1cbnRpdGxlOiBTd2FwIGxlZnQgcmlnaHQgbmFtZXNcbm5hbWU6IHN3YXAtbGVmdC1yaWdodC1uYW1lc1xuY2F0ZWdvcnk6IGZ1bmN0aW9uc1xuLS0tXG5cblN3YXAgdGhlIG5hbWVzIHJpZ2h0IGFuZCBsZWZ0IHdoZW4gJHJ0bCBpcyBzZXQgdG8gdHJ1ZS5cbklmIHRoZSB2YWx1ZSBpcyBub3QgcmlnaHQgb3IgbGVmdCBpdCByZXR1cm5zIHRoZSBvcmlnaW5hbCB2YWx1ZS5cblxuSW46ICByaWdodFxuT3V0OiBsZWZ0IChpbiBydGwpLCByaWdodCAoaW4gbHRyKVxuXG4jIyBMaXZlIFRlbXBsYXRlIGFiYnJldmlhdGlvbnNcbi0tLVxuXG4jIyBQYXJhbWV0ZXJzXG4tLS1cbkBwYXJhbWV0ZXIgJG9yaWdpbiA9IHJpZ2h0IHwgbGVmdFxuXG4jIyBFeGFtcGxlXG4tLS1cblxuYGBgaHRtbF9leGFtcGxlXG5zd2FwLWxlZnQtcmlnaHQtbmFtZShsZWZ0KVxuc3dhcC1sZWZ0LXJpZ2h0LW5hbWUocmlnaHQpXG5gYGBcblxuIyMgU291cmNlXG4tLS1cbmh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMTQxOTkzMjMvcmlnaHQtdG8tbGVmdC1ydGwtc3VwcG9ydC1pbi1zYXNzLXByb2plY3RcblxuKi9cbi8qICBMaXN0IG9mIENTUyBwcm9wZXJ0aWVzIHRoYXQgd2lsbCBhbHdheXMgYmUgb3V0cHV0IGF0IGxlYXN0IGFzIDIgZGlmZmVyZW50IHZhbHVlc1xuICAgIGluIG9yZGVyIHRvIGJlIGFibGUgdG8gY29udmVydCBlYWNoIG9uZSB0byB0aGUgY29ycmVjdCBheGlzIHVuaXQgKi9cbi8qXG4gICAgTWl4aW4gZm9yIGF1dG9tYXRpY2FsbHkgaGFuZGxpbmcgc3BhY2luZ3MgYXJvdW5kL2JldHdlZW4gZWxlbWVudHMuXG5cbiAgICBUaGlzIG1peGluIHdpbGwgYXV0b21hdGljYWxseSBpbnZlcnQgdGhlIGxlZi9yaWdodCBkaXJlY3Rpb25zIGluIFJUTCBsYW5ndWFnZXMuXG4gICAgQWxzbywgdGhlIHVuaXRsZXNzIHZhbHVlcyB3aWxsIGJlIGNvbnZlcnRlZCB0byB0aGUgcHJvcGVyIHVuaXQgYWNjb3JkaW5nIHRvIHRoZSBheGlzXG5cbiAgICBQYXJhbWV0ZXJzOlxuICAgIC0gJHByb3BlcnR5LW5hbWU6IG5hbWUgb2YgdGhlIENTUyBwcm9wZXJ0eSB0aGF0IHNob3VsZCBiZSBvdXRwdXQuIFN1cHBvcnRlZCBwcm9wZXJ0aWVzIGFyZTpcbiAgICAgICAgbWFyZ2luLCBtYXJnaW4tdG9wLCBtYXJnaW4tcmlnaHQsIG1hcmdpbi1ib3R0b20sIG1hcmdpbi1sZWZ0XG4gICAgICAgIHBhZGRpbmcsIHBhZGRpbmctdG9wLCBwYWRkaW5nLXJpZ2h0LCBwYWRkaW5nLWJvdHRvbSwgcGFkZGluZy1sZWZ0XG4gICAgICAgIHdpZHRoLCBoZWlnaHQsIG1pbi13aWR0aCwgbWF4LXdpZHRoLCBtaW4taGVpZ2h0LCBtaW4taGVpZ2h0XG4gICAgLSAkdmFsdWU6IHZhbHVlIHRoYXQgd2lsbCBiZSBvdXRwdXQgYXMgcGFydCBvZiB0aGUgZ2l2ZW4gcHJvcGVydHkuIFN1cHBvcnRlZCB2YWx1ZXMgYXJlOlxuICAgICAgICBVbml0bGVzcyBudW1iZXIgKDQwKTogdGhpcyBzaG91bGQgYmUgdXNlZCBtb3N0IG9mIHRoZSB0aW1lcy4gSXQgd2lsbCBhdXRvbWF0aWNhbGx5IGJlIGNvbnZlcnRlZFxuICAgICAgICAgICAgdG8gdGhlIGNvcnJlY3QgdW5pdCBkZXBlbmRpbmcgb24gdGhlIGF4aXMgd2hlcmUgaXQncyB1c2VkIChob3Jpem9udGFsIGF4aXMgPT4gcHgsIHZlcnRpY2FsIGF4aXMgPT4gcmVtKS5cbiAgICAgICAgICAgIEVhY2ggdW5pdCBpbiAkdmFsdWUgd2lsbCBjb3JyZXNwb25kIHRvIGEgcHggaW4gdGhlIGJyb3dzZXIsIG5vIG1hdHRlciB0byB3aGljaCB1bml0IGl0IHdpbGwgYmUgY29udmVydGVkLlxuICAgICAgICBOdW1iZXIgd2l0aCB1bml0ICg0MHB4LCA0MCUuLi4pOiB0aGUgbnVtYmVyIGFuZCB0aGUgdW5pdCB3aWxsIGJlIHByZXNlcnZlZCBhbmQgb25seSB0aGUgbGVmdC9yaWdodCBpbnZlcnNpb25cbiAgICAgICAgICAgIHdpbGwgYmUgZG9uZSBmb3IgUlRMIGxhbmd1YWdlc1xuICAgICAgICBMaXN0IG9mIHZhbHVlcyAoNDAgMzAlIDIwIDEwKTogbWFyZ2luIGFuZCBwYWRkaW5nIHNob3J0aGFuZHMgd2hpdGggbXVsdGlwbGUgdmFsdWVzIGFyZSBzdXBwb3J0ZWQuXG4gICAgICAgICAgICBUaGUgbGVmdC9yaWdodCB2YWx1ZXMgd2lsbCBiZSBhdXRvbWF0aWNhbGx5IHN3YXBwZWQgaW4gUlRMIGFuZCB0aGUgdW5pdGxlc3MgbnVtYmVycyB3aWxsIGJlIGNvbnZlcnRlZFxuICAgICAgICAgICAgdG8gdGhlIGNvcnJlc3BvbmRpbmcgdW5pdC4gVW5pdGxlc3MgYW5kIG51bWJlcnMgd2l0aCB1bml0cyBjYW4gYmUgbWl4ZWQgaW4gdGhlIHNhbWUgY2FsbC5cbiAgICAgICAgVXNpbmcgY2FsYygpIGluIGFueSBvZiB0aGUgcHJldmlvdXMgZXhhbXBsZXMgaXMgc3VwcG9ydGVkLCBhbHRob3VnaCBubyB1bml0IGNvbnZlcnNpb24gd2lsbCBiZSBkb25lXG5cbiAjIyBFeGFtcGxlXG4tLS1cblxuYGBgaHRtbF9leGFtcGxlXG5AaW5jbHVkZSBzcGFjaW5nKHBhZGRpbmcsIDAgMTBweCAyMCAwKTsgPT4gcGFkZGluZzogMCAxMHB4IDJyZW0gMDtcbkBpbmNsdWRlIHNwYWNpbmcocGFkZGluZywgMCAxMCAyMCAwKTsgPT4gcGFkZGluZzogMCAxMHB4IDJyZW0gMDtcbkBpbmNsdWRlIHNwYWNpbmcocGFkZGluZy1sZWZ0LCAxMCk7XG5AaW5jbHVkZSBzcGFjaW5nKHBhZGRpbmctcmlnaHQsIDEwKTtcbkBpbmNsdWRlIHNwYWNpbmcobWFyZ2luLCAwIDEwIDIwIDApO1xuQGluY2x1ZGUgc3BhY2luZyhtYXJnaW4tbGVmdCwgMTApO1xuQGluY2x1ZGUgc3BhY2luZyhtYXJnaW4tcmlnaHQsIDEwKTtcbkBpbmNsdWRlIHNwYWNpbmcod2lkdGgsIDEwMCk7XG5AaW5jbHVkZSBzcGFjaW5nKG1pbi13aWR0aCwgMTAwKTtcbkBpbmNsdWRlIHNwYWNpbmcobWF4LXdpZHRoLCAxMDApO1xuQGluY2x1ZGUgc3BhY2luZyhoZWlnaHQsIDEwMCk7XG5AaW5jbHVkZSBzcGFjaW5nKG1pbi1oZWlnaHQsIDEwMCk7XG5AaW5jbHVkZSBzcGFjaW5nKG1heC1oZWlnaHQsIDEwMCk7XG5gYGBcbiovXG4vKiBkb2Ncbi0tLVxudGl0bGU6IENsZWFyZml4XG5uYW1lOiBjbGVhcmZpeFxuY2F0ZWdvcnk6IG1peGluc1xuLS0tXG5cbkNsZWFycyBhZnRlciBmbG9hdGluZyBlbGVtZW50XG5cblVzZSB0aGlzIG1peGluIG9ubHkgaW5zaWRlIG1lZGlhIHF1ZXJpZXMgd2hlcmUgeW91IGNhbid0IHVzZSB0aGVcbmFic3RyYWN0L2V4dGVuZHMvdXRpbHMvX2NsZWFyZml4IHZlcnNpb24sIHdoaWNoIGFkZHMgbGVzcyBjb2RlIHRvIGNzc1xuXG4jIyBMaXZlIFRlbXBsYXRlIGFiYnJldmlhdGlvbnNcbi0tLVxuXG4jIyBFeGFtcGxlXG4tLS1cblxuYGBgaHRtbF9leGFtcGxlXG5AaW5jbHVkZSBjbGVhcmZpeDtcbmBgYFxuXG4jIyBTb3VyY2Vcbi0tLVxuaHR0cHM6Ly9jc3MtdHJpY2tzLmNvbS9zbmlwcGV0cy9jc3MvY2xlYXItZml4L1xuKi9cbi8qIHN0eWxlbGludC1kaXNhYmxlIHN0cmluZy1uby1uZXdsaW5lICovXG4vKiBkb2Ncbi0tLVxudGl0bGU6IGZvY3VzIGNvbG9yXG5uYW1lOiBmb2N1cyBjb2xvclxuY2F0ZWdvcnk6IG1peGluc1xuLS0tXG5cbkFkZCBhIGZvY3VzIGNvbG9yIHdoZW4ga2V5Ym9hcmQtZm9jdXMgaXMgYWN0aXZhdGVkXG4jIyBQYXJhbWV0ZXJzXG4tLS1cbkBwYXJhbSAkbnVtYmVyXG5cbiovXG4vKiBkb2Ncbi0tLVxudGl0bGU6IGlnbm9yZS1jb250YWluZXJcbm5hbWU6IGlnbm9yZS1jb250YWluZXJcbmNhdGVnb3J5OiBtaXhpbnNcbi0tLVxuXG5TZXQgZnVsbCBwYWdlIHdpZHRoIGZvciBzb21ldGhpbmcgaW5zaWRlIGEgY29udGFpbmVyXG5cbiMjIFBhcmFtZXRlcnNcbi0tLVxuQHBhcmFtICRjb250YWluZXItc2l6ZVxuQHBhcmFtICRndXR0ZXJcblxuKi9cbi8qIEdlbmVyYXRlcyBhbGwgdGhlIHJ1bGVzIGZvciB0aGUgZ3JpZCBjb2x1bW5zIHVwIHRvIHRoZSBnaXZlbiBhbW91bnQgb2YgY29sdW1uICovXG4vKiBHZW5lcmF0ZXMgYWxsIHRoZSBydWxlcyBmb3IgdGhlIGdyaWQgY29sdW1uIG9mZnNldCB1cCB0byB0aGUgZ2l2ZW4gYW1vdW50IG9mIGNvbHVtbiAqL1xuLyogR2VuZXJhdGVzIGFsbCB0aGUgcnVsZXMgZm9yIHRoZSBncmlkIGFuZCBjb2x1bW5zIGZvciB0aGUgZ2l2ZW4gYnJlYWsgcG9pbnQgYW5kIHRvdGFsIG9mIGNvbHVtbnMgKi9cbi8qIEFQSSBmdW5jdGlvbiB0byBiZSBjYWxsZWQgdG8gZ2VuZXJhdGUgYSBncmlkIGNvbmZpZyAqL1xuLyogZG9jXG4tLS1cbnR5cGU6IGJ1dHRvbiB0eXBlXG5zdGF0ZTogc3RhdGUgYnV0dG9uXG4tLS1cblxuQnV0dG9uIHN0eWxlc1xuXG5Vc2UgdGhpcyBtaXhpbiBmb3IgYnV0dG9uIHN0eWxlczogY29sb3IgdGV4dCwgYmFja2dyb3VuZCwgYm9yZGVyXG5cbiMjIEV4YW1wbGVcbi0tLVxuXG5gYGBodG1sX2V4YW1wbGVcbkBpbmNsdWRlIGJ1dHRvbihwcmltYXJ5KTtcbmBgYFxuKi9cbi8qIGRvY1xuLS0tXG5saW5lTGltaXQ6IFRoaXMgdmFsdWUgc3BlY2lmaWVzIHRoZSBudW1iZXIgb2YgbGluZXMgYWZ0ZXIgd2hpY2ggdGhlIGNvbnRlbnQgd2lsbCBiZSBjbGFtcGVkLiBJdCBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAwLlxuLS0tXG5cblRydW5jYXRlcyB0ZXh0IGF0IGEgc3BlY2lmaWMgbnVtYmVyIG9mIGxpbmVzLlxuXG5Vc2UgdGhpcyBtaXhpbiB0byBoaWRlIGxvbmcgdGV4dC5cblxuIyMgRXhhbXBsZVxuLS0tXG5cbmBgYGh0bWxfZXhhbXBsZVxuQGluY2x1ZGUgbGluZS1jbGFtcCgkbGluZUxpbWl0OiA0KTtcbmBgYFxuKi9cbi8qIHR5cG9ncmFwaHlcbi0tLVxudGl0bGU6IHR5cG9ncmFwaHlcbm5hbWU6IFR5cG9ncmFwaHlcbmNhdGVnb3J5OiBtaXhpbnNcbi0tLVxuXG5BZGRzIGZvbnQgQ1NTIHByb3BlcnRpZXMgYnkgYSBtYXAgcHJvdmlkZWRcblxuIyMgUGFyYW1ldGVyc1xuLS0tXG5AcGFyYW0gJHQtc3R5bGVcbkBwYXJhbSAkaXMtaW1wb3J0YW50OiBmYWxzZVxuXG4qICR0LXN0eWxlIGlzIGV4cGVjdGVkIHRvIGJlIGEgbWFwIHdpdGggJ2RlZmF1bHQnIGFuZCAnYnJlYWtwb2ludFtzXScgc3VibWFwcyB3aXRoIGEgcHJvcGVydHlcbmZvciBldmVyeSBjc3MgcHJvcGVydHkgdG8gYmUgc2V0LlxuKiAkaXMtaW1wb3J0YW50IHBhcmFtZXRlciBhbGxvd3MgdG8gZm9yY2UgdHlwb2dyYXBoeSBwcm9wZXJ0aWVzIHRvIGJlIHNldCBhcyAhaW1wb3J0YW50XG5UcnkgdG8gYXZvaWQgaXRzIHVzZSwgYnV0IGl0IG1pZ2h0IGJlIG5lZWRlZCBmb3Igc2l0dWF0aW9ucyB3aGVyZSBzdHlsZXMgZm9yIGEgY29tcG9uZW50XG5hcmUgdmVyeSBzcGVjaWZpYyBhbmQgdG8gb3ZlcndyaXRlIHRoZSBnZW5lcmljIG9uZXMgaXMgdG9vIGNvbXBsZXggKGlmIHRoZXkgaGF2ZSBhIGxvdCBvZiBzcGVjaWZpY2l0eSlcblxuKi9cbi8qIGRvY1xuLS0tXG50aXRsZTogaGlkZGVuXG5uYW1lOiBoaWRkZW5cbmNhdGVnb3J5OiBtaXhpbnNcbi0tLVxuXG5IaWRlIGZyb20gYm90aCBzY3JlZW5yZWFkZXJzIGFuZCBicm93c2VyczogaDVicC5jb20vdVxuIyMgUGFyYW1ldGVyc1xuLS0tXG5cbiovXG4vKiBkb2Ncbi0tLVxudGl0bGU6IG92ZXJsYXlcbm5hbWU6IG92ZXJsYXlcbmNhdGVnb3J5OiBtaXhpbnNcbi0tLVxuXG5DcmVhdGVzIGFuIG92ZXJsYXkgd2l0aCB0aGUgcHJvdmlkZWQgYmFja2dyb3VuZCBjb2xvclxuIyMgUGFyYW1ldGVyc1xuLS0tXG5AcGFyYW0gJGJnQ29sb3JcblxuKi9cbi8qKlxuICogQG1peGluIHRvcC1ib3R0b20tYm9yZGVyXG4gKiBAZGVzYyBDcmVhdGVzIGEgZHluYW1pYyBhbmQgY3VzdG9taXphYmxlIGJvcmRlciBhdCB0aGUgc3BlY2lmaWVkIHBvc2l0aW9uIG9uIGFuIGVsZW1lbnQuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9ICRwb3NpdGlvbiAtIE9wdGlvbmFsLCBEZWZhdWx0OiAnYm90dG9tJy4gRGVmaW5lcyB0aGUgcG9zaXRpb24gb2YgdGhlIGJvcmRlci4gQWNjZXB0cyB2YWx1ZXMgJ3RvcCcgb3IgJ2JvdHRvbScuXG4gKiBAcGFyYW0ge2NvbG9yfSAkY29sb3IgLSBPcHRpb25hbCwgRGVmYXVsdDogJyRjLWJsYWNrJy4gU3BlY2lmaWVzIHRoZSBjb2xvciBvZiB0aGUgYm9yZGVyLiBBY2NlcHRzIGFueSB2YWxpZCBDU1MgY29sb3IgdmFsdWUuXG4gKiBAcGFyYW0ge2xlbmd0aH0gJHdpZHRoIC0gT3B0aW9uYWwsIERlZmF1bHQ6ICcycHgnLiBTZXRzIHRoZSB3aWR0aCBvZiB0aGUgYm9yZGVyLiBBY2NlcHRzIGFueSB2YWxpZCBDU1MgbGVuZ3RoIHZhbHVlLlxuICogQHBhcmFtIHtsZW5ndGh9ICRtYXJnaW4gLSBPcHRpb25hbCwgRGVmYXVsdDogJzAnLiBBZGRzIG1hcmdpbiB0byB0aGUgYm9yZGVyLiBBY2NlcHRzIGFueSB2YWxpZCBDU1MgbGVuZ3RoIHZhbHVlLlxuICpcbiAqIEBleGFtcGxlXG4gKiAgIC5leGFtcGxlLWVsZW1lbnQge1xuICogICAgICAgQGluY2x1ZGUgdG9wLWJvdHRvbS1ib3JkZXIoJHBvc2l0aW9uOiB0b3AsICRjb2xvcjogJGMtZ3JleS10d28sICR3aWR0aDogM3B4LCAkbWFyZ2luOiAxMHB4KTtcbiAqICAgfVxuICovXG4vKiBkb2Ncbi0tLVxudGl0bGU6IHJlc2V0LWZ1bGx3aWR0aC1tYXJnaW5zXG5uYW1lOiByZXNldC1mdWxsd2lkdGgtbWFyZ2luc1xuY2F0ZWdvcnk6IG1peGluc1xuLS0tXG5cblJlc2V0IG1hcmdpbnMgZm9yIGZ1bGwgd2lkdGggY29tcG9uZW50cyBpbnNpZGUgYSBDb250YWluZXIgb3IgYSBDb2x1bW4gQ29udHJvbFxuKi9cbi5zdG9ja3RpY2tlciB7XG4gIG1hcmdpbjogMzBweCAwO1xufVxuLnN0b2NrdGlja2VyX193cmFwcGVyIHtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBiYWNrZ3JvdW5kOiAjZTFkZmRkO1xuICBwYWRkaW5nOiAyMHB4IDA7XG59XG5AbWVkaWEgKG1pbi13aWR0aDogNzY4cHgpIHtcbiAgLnN0b2NrdGlja2VyX193cmFwcGVyIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgIHBhZGRpbmc6IDEwcHggMDtcbiAgfVxufVxuQG1lZGlhIChtaW4td2lkdGg6IDk2MHB4KSB7XG4gIC5zdG9ja3RpY2tlci0tZnVsbHdpZHRoIC5zdG9ja3RpY2tlcl9fd3JhcHBlciB7XG4gICAgbWFyZ2luOiAwIC0xNXB4O1xuICB9XG59XG5AbWVkaWEgKG1pbi13aWR0aDogMTIwMHB4KSB7XG4gIC5zdG9ja3RpY2tlci0tZnVsbHdpZHRoIC5zdG9ja3RpY2tlcl9fd3JhcHBlciB7XG4gICAgd2lkdGg6IGF1dG87XG4gICAgbWFyZ2luOiAwIGNhbGMoKDEwMHZ3IC0gMTIwMHB4KSAvIC0yKTtcbiAgfVxufVxuQG1lZGlhIChtaW4td2lkdGg6IDIwNDhweCkge1xuICAuc3RvY2t0aWNrZXItLWZ1bGx3aWR0aCAuc3RvY2t0aWNrZXJfX3dyYXBwZXIge1xuICAgIHdpZHRoOiBhdXRvO1xuICAgIG1hcmdpbjogMCBjYWxjKCgyMDQ4cHggLSAxMjAwcHgpIC8gLTIpO1xuICB9XG4gIC5jb250YWluZXItLWZ1bGxXaWR0aCAuc3RvY2t0aWNrZXItLWZ1bGx3aWR0aCAuc3RvY2t0aWNrZXJfX3dyYXBwZXIge1xuICAgIG1hcmdpbjogMDtcbiAgfVxuICAuY29sdW1uY29udHJvbF9fY29sdW1uOmZpcnN0LWNoaWxkIC5zdG9ja3RpY2tlci0tZnVsbHdpZHRoIC5zdG9ja3RpY2tlcl9fd3JhcHBlciB7XG4gICAgbWFyZ2luLXJpZ2h0OiAwO1xuICB9XG4gIC5jb2x1bW5jb250cm9sX19jb2x1bW46bGFzdC1jaGlsZCAuc3RvY2t0aWNrZXItLWZ1bGx3aWR0aCAuc3RvY2t0aWNrZXJfX3dyYXBwZXIge1xuICAgIG1hcmdpbi1sZWZ0OiAwO1xuICB9XG59XG5AbWVkaWEgKG1heC13aWR0aDogMjA0OHB4KSB7XG4gIC5zdG9ja3RpY2tlci0tZnVsbHdpZHRoIHtcbiAgICBwYWRkaW5nOiAwO1xuICB9XG59XG4uc3RvY2t0aWNrZXJfX2JveCB7XG4gIHBhZGRpbmc6IDVweCAwO1xufVxuQG1lZGlhIChtYXgtd2lkdGg6IDEwOTBweCkge1xuICAuc3RvY2t0aWNrZXJfX2JveCB7XG4gICAgcGFkZGluZzogM3B4IDA7XG4gIH1cbn1cbkBtZWRpYSAobWluLXdpZHRoOiA3NjhweCkge1xuICAuc3RvY2t0aWNrZXJfX2JveDo6YWZ0ZXIge1xuICAgIGNvbnRlbnQ6IFwifFwiO1xuICAgIGNvbG9yOiAjNTM1NjVhO1xuICAgIGZvbnQtd2VpZ2h0OiBub3JtYWw7XG4gICAgcGFkZGluZzogMCAxNXB4O1xuICB9XG4gIC5zdG9ja3RpY2tlcl9fYm94Omxhc3QtY2hpbGQ6OmFmdGVyIHtcbiAgICBjb250ZW50OiBub25lO1xuICB9XG59XG4uc3RvY2t0aWNrZXJfX3RpdGxlIHtcbiAgZGlzcGxheTogbm9uZTtcbn1cbi5zdG9ja3RpY2tlcl9faW5kaWNlLS1jb2xsYWdlIHtcbiAgZGlzcGxheTogbm9uZTtcbn1cbi5zdG9ja3RpY2tlcl9fcHJpY2Uge1xuICBkaXNwbGF5OiBpbmxpbmU7XG4gIGZvbnQtd2VpZ2h0OiBib2xkO1xufVxuLnN0b2NrdGlja2VyX19wcmljZVRpdGxlIHtcbiAgZGlzcGxheTogbm9uZTtcbn1cbi5zdG9ja3RpY2tlcl9fcHJpY2VDdXJyZW5jeSwgLnN0b2NrdGlja2VyX19wcmljZU51bWJlciB7XG4gIGZvbnQtZmFtaWx5OiB2YXIoLS1mZi1tZWRpdW0pO1xufVxuLnN0b2NrdGlja2VyX19yYXRlIHtcbiAgZGlzcGxheTogaW5saW5lLWZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGZvbnQtd2VpZ2h0OiBib2xkO1xuICBtYXJnaW4tbGVmdDogMjBweDtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xufVxuQG1lZGlhIChtYXgtd2lkdGg6IDc2N3B4KSB7XG4gIC5zdG9ja3RpY2tlcl9fcmF0ZSB7XG4gICAgbWFyZ2luLWlubGluZS1zdGFydDogNDBweDtcbiAgfVxufVxuLnN0b2NrdGlja2VyX19yYXRlLS1wb3NpdGl2ZTpiZWZvcmUge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNDc5NjJkO1xuICBjb250ZW50OiBcIlwiO1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIG1hc2staW1hZ2U6IHVybChcIi9jb250ZW50L2RhbS92b2x2by1tZWRpYS9zZXJ2aWNlLWNvbnRyYWN0LWljb25zL2Fycm93LXVwLnN2ZyNhcnJvdy11cC1pY29uLXcyNC12aWV3XCIpO1xuICBtYXNrLXJlcGVhdDogbm8tcmVwZWF0O1xuICBtYXNrLXNpemU6IGNvdmVyO1xuICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgd2lkdGg6IHZhcigtLXYtaWNvbi1zaXplKTtcbiAgaGVpZ2h0OiB2YXIoLS12LWljb24tc2l6ZSk7XG59XG5AbWVkaWEgKG1pbi13aWR0aDogMTIwMHB4KSB7XG4gIC5zdG9ja3RpY2tlcl9fcmF0ZS0tcG9zaXRpdmU6YmVmb3JlIHtcbiAgICBtYXNrLWltYWdlOiB1cmwoXCIvY29udGVudC9kYW0vdm9sdm8tbWVkaWEvc2VydmljZS1jb250cmFjdC1pY29ucy9hcnJvdy11cC5zdmcjYXJyb3ctdXAtaWNvbi13MTYtdmlld1wiKTtcbiAgfVxufVxuLnN0b2NrdGlja2VyX19yYXRlLS16ZXJvOmJlZm9yZSB7XG4gIGJhY2tncm91bmQtY29sb3I6ICM0Nzk2MmQ7XG4gIGNvbnRlbnQ6IFwiXCI7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgbWFzay1pbWFnZTogdXJsKFwiL2NvbnRlbnQvZGFtL3ZvbHZvLW1lZGlhL3NlcnZpY2UtY29udHJhY3QtaWNvbnMvYXJyb3ctcmlnaHQuc3ZnI2Fycm93LXJpZ2h0LWljb24tdzI0LXZpZXdcIik7XG4gIG1hc2stcmVwZWF0OiBuby1yZXBlYXQ7XG4gIG1hc2stc2l6ZTogY292ZXI7XG4gIHBvaW50ZXItZXZlbnRzOiBub25lO1xuICB3aWR0aDogdmFyKC0tdi1pY29uLXNpemUpO1xuICBoZWlnaHQ6IHZhcigtLXYtaWNvbi1zaXplKTtcbn1cbkBtZWRpYSAobWluLXdpZHRoOiAxMjAwcHgpIHtcbiAgLnN0b2NrdGlja2VyX19yYXRlLS16ZXJvOmJlZm9yZSB7XG4gICAgbWFzay1pbWFnZTogdXJsKFwiL2NvbnRlbnQvZGFtL3ZvbHZvLW1lZGlhL3NlcnZpY2UtY29udHJhY3QtaWNvbnMvYXJyb3ctcmlnaHQuc3ZnI2Fycm93LXJpZ2h0LWljb24tdzE2LXZpZXdcIik7XG4gIH1cbn1cbi5zdG9ja3RpY2tlcl9fcmF0ZS0tbmVnYXRpdmU6YmVmb3JlIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2M0MDAxYTtcbiAgY29udGVudDogXCJcIjtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICBtYXNrLWltYWdlOiB1cmwoXCIvY29udGVudC9kYW0vdm9sdm8tbWVkaWEvc2VydmljZS1jb250cmFjdC1pY29ucy9hcnJvdy1kb3duLnN2ZyNhcnJvdy1kb3duLWljb24tdzI0LXZpZXdcIik7XG4gIG1hc2stcmVwZWF0OiBuby1yZXBlYXQ7XG4gIG1hc2stc2l6ZTogY292ZXI7XG4gIHBvaW50ZXItZXZlbnRzOiBub25lO1xuICB3aWR0aDogdmFyKC0tdi1pY29uLXNpemUpO1xuICBoZWlnaHQ6IHZhcigtLXYtaWNvbi1zaXplKTtcbn1cbkBtZWRpYSAobWluLXdpZHRoOiAxMjAwcHgpIHtcbiAgLnN0b2NrdGlja2VyX19yYXRlLS1uZWdhdGl2ZTpiZWZvcmUge1xuICAgIG1hc2staW1hZ2U6IHVybChcIi9jb250ZW50L2RhbS92b2x2by1tZWRpYS9zZXJ2aWNlLWNvbnRyYWN0LWljb25zL2Fycm93LWRvd24uc3ZnI2Fycm93LWRvd24taWNvbi13MTYtdmlld1wiKTtcbiAgfVxufVxuLnN0b2NrdGlja2VyX19yYXRlOjpiZWZvcmUge1xuICBtYXJnaW4tcmlnaHQ6IDVweDtcbn1cbkBtZWRpYSAobWF4LXdpZHRoOiA3NjdweCkge1xuICAuc3RvY2t0aWNrZXJfX3JhdGU6OmJlZm9yZSB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIGxlZnQ6IC0yNXB4O1xuICAgIHRvcDogMnB4O1xuICB9XG59XG5AbWVkaWEgKG1pbi13aWR0aDogNzY4cHgpIHtcbiAgLnN0b2NrdGlja2VyX19yYXRlIHtcbiAgICBtYXJnaW4tbGVmdDogMDtcbiAgfVxufVxuXG4uY29sbGFnZSArIC5zdG9ja3RpY2tlciB7XG4gIG1hcmdpbi10b3A6IC0yNnB4O1xufVxuLmNvbGxhZ2UgLnN0b2NrdGlja2VyIHtcbiAgbWFyZ2luOiAwO1xufVxuLmNvbGxhZ2UgLnN0b2NrdGlja2VyX193cmFwcGVyIHtcbiAgdGV4dC1hbGlnbjogbGVmdDtcbiAgcGFkZGluZzogMTRweCAyMHB4O1xuICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcbn1cbkBtZWRpYSAobWF4LXdpZHRoOiAxMDkwcHgpIHtcbiAgLmNvbGxhZ2UgLnN0b2NrdGlja2VyX193cmFwcGVyIHtcbiAgICBwYWRkaW5nOiA4cHggMTRweDtcbiAgfVxufVxuQG1lZGlhIChtaW4td2lkdGg6IDc2OHB4KSB7XG4gIC5jb2xsYWdlIC5zdG9ja3RpY2tlcl9fd3JhcHBlciB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gIH1cbn1cbkBtZWRpYSAobWluLXdpZHRoOiA3NjhweCkge1xuICAuY29sbGFnZSAuc3RvY2t0aWNrZXIgLnN0b2NrdGlja2VyX19ib3g6OmFmdGVyIHtcbiAgICBjb250ZW50OiBub25lO1xuICB9XG59XG4uY29sbGFnZSAuc3RvY2t0aWNrZXIgLnN0b2NrdGlja2VyX190aXRsZSB7XG4gIGZvbnQtZmFtaWx5OiB2YXIoLS1mZi1tZWRpdW0pO1xuICBmb250LXNpemU6IDEycHg7XG4gIGZvbnQtd2VpZ2h0OiA0MDA7XG4gIGxpbmUtaGVpZ2h0OiAxLjU7XG4gIGxldHRlci1zcGFjaW5nOiB2YXIoLS1scy1kZWZhdWx0KTtcbiAgbWFyZ2luLWJvdHRvbTogLTVweDtcbiAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgZGlzcGxheTogYmxvY2s7XG59XG5AbWVkaWEgKG1heC13aWR0aDogMTA5MHB4KSB7XG4gIC5jb2xsYWdlIC5zdG9ja3RpY2tlciAuc3RvY2t0aWNrZXJfX3RpdGxlIHtcbiAgICBwYWRkaW5nLXRvcDogMDtcbiAgfVxufVxuLmNvbGxhZ2UgLnN0b2NrdGlja2VyIC5zdG9ja3RpY2tlcl9faW5kaWNlIHtcbiAgZGlzcGxheTogbm9uZTtcbn1cbi5jb2xsYWdlIC5zdG9ja3RpY2tlciAuc3RvY2t0aWNrZXJfX2luZGljZS0tY29sbGFnZSB7XG4gIGRpc3BsYXk6IGlubGluZS1mbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xufVxuLmNvbGxhZ2UgLnN0b2NrdGlja2VyIC5zdG9ja3RpY2tlcl9faW5kaWNlLS1jb2xsYWdlOmJlZm9yZSB7XG4gIGJhY2tncm91bmQtY29sb3I6ICM1MzU2NWE7XG4gIGNvbnRlbnQ6IFwiXCI7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgbWFzay1pbWFnZTogdXJsKFwiL2NvbnRlbnQvZGFtL3ZvbHZvLW1lZGlhL3NlcnZpY2UtY29udHJhY3QtaWNvbnMvZ3JhcGgtdXAuc3ZnI2dyYXBoLXVwLWljb24tdzI0LXZpZXdcIik7XG4gIG1hc2stcmVwZWF0OiBuby1yZXBlYXQ7XG4gIG1hc2stc2l6ZTogY292ZXI7XG4gIHBvaW50ZXItZXZlbnRzOiBub25lO1xuICB3aWR0aDogdmFyKC0tdi1pY29uLXNpemUpO1xuICBoZWlnaHQ6IHZhcigtLXYtaWNvbi1zaXplKTtcbn1cbkBtZWRpYSAobWluLXdpZHRoOiAxMjAwcHgpIHtcbiAgLmNvbGxhZ2UgLnN0b2NrdGlja2VyIC5zdG9ja3RpY2tlcl9faW5kaWNlLS1jb2xsYWdlOmJlZm9yZSB7XG4gICAgbWFzay1pbWFnZTogdXJsKFwiL2NvbnRlbnQvZGFtL3ZvbHZvLW1lZGlhL3NlcnZpY2UtY29udHJhY3QtaWNvbnMvZ3JhcGgtdXAuc3ZnI2dyYXBoLXVwLWljb24tdzE2LXZpZXdcIik7XG4gIH1cbn1cbi5jb2xsYWdlIC5zdG9ja3RpY2tlciAuc3RvY2t0aWNrZXJfX2luZGljZS0tY29sbGFnZTo6YmVmb3JlIHtcbiAgbWFyZ2luLXJpZ2h0OiAxNXB4O1xuICBmb250LXdlaWdodDogYm9sZDtcbn1cbi5jb2xsYWdlIC5zdG9ja3RpY2tlciAuc3RvY2t0aWNrZXJfX3ByaWNlIHtcbiAgZGlzcGxheTogYmxvY2s7XG4gIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjYTdhOGE5O1xufVxuLmNvbGxhZ2UgLnN0b2NrdGlja2VyIC5zdG9ja3RpY2tlcl9fcHJpY2VUaXRsZSB7XG4gIGZvbnQtd2VpZ2h0OiBub3JtYWw7XG59XG4uY29sbGFnZSAuc3RvY2t0aWNrZXIgLnN0b2NrdGlja2VyX19wcmljZUN1cnJlbmN5LCAuY29sbGFnZSAuc3RvY2t0aWNrZXIgLnN0b2NrdGlja2VyX19wcmljZU51bWJlciB7XG4gIGZvbnQtZmFtaWx5OiB2YXIoLS1mZi1tZWRpdW0pO1xufVxuLmNvbGxhZ2UgLnN0b2NrdGlja2VyIC5zdG9ja3RpY2tlcl9fcHJpY2VUaXRsZSwgLmNvbGxhZ2UgLnN0b2NrdGlja2VyIC5zdG9ja3RpY2tlcl9fcHJpY2VOdW1iZXIsIC5jb2xsYWdlIC5zdG9ja3RpY2tlciAuc3RvY2t0aWNrZXJfX3ByaWNlQ3VycmVuY3kge1xuICBkaXNwbGF5OiBpbmxpbmU7XG59XG4uY29sbGFnZSAuc3RvY2t0aWNrZXIgLnN0b2NrdGlja2VyX19wcmljZU51bWJlciB7XG4gIGZvbnQtc2l6ZTogMjRweDtcbiAgbGV0dGVyLXNwYWNpbmc6IC0wLjE5cHg7XG59XG4uY29sbGFnZSAuc3RvY2t0aWNrZXIgLnN0b2NrdGlja2VyX19yYXRlIHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICBmb250LXdlaWdodDogbm9ybWFsO1xuICBtYXJnaW4tbGVmdDogMDtcbiAgY29sb3I6ICM1MzU2NWE7XG4gIHZlcnRpY2FsLWFsaWduOiBib3R0b207XG59XG4uY29sbGFnZSAuc3RvY2t0aWNrZXIgLnN0b2NrdGlja2VyX19yYXRlOjpiZWZvcmUge1xuICBjb250ZW50OiBub25lO1xufVxuLmNvbGxhZ2UgLnN0b2NrdGlja2VyIC5zdG9ja3RpY2tlcl9fc3RvY2tpbmZvIHtcbiAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICNhN2E4YTk7XG4gIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjYTdhOGE5O1xufVxuLmNvbGxhZ2UgLnN0b2NrdGlja2VyIC5zdG9ja3RpY2tlcl9fZGF0ZSB7XG4gIGZvbnQtc2l6ZTogMTRweDtcbn1cbi5jb2xsYWdlIC5zdG9ja3RpY2tlciAuc3RvY2t0aWNrZXJfX2RhdGVEYXRlIHtcbiAgZGlzcGxheTogaW5saW5lLWZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG59XG4uY29sbGFnZSAuc3RvY2t0aWNrZXIgLnN0b2NrdGlja2VyX19kYXRlRGF0ZTpiZWZvcmUge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNTM1NjVhO1xuICBjb250ZW50OiBcIlwiO1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIG1hc2staW1hZ2U6IHVybChcIi9jb250ZW50L2RhbS92b2x2by1tZWRpYS9saXN0LWljb25zL2NhbGVuZGFyLnN2ZyNjYWxlbmRhci1pY29uLXcyNC12aWV3XCIpO1xuICBtYXNrLXJlcGVhdDogbm8tcmVwZWF0O1xuICBtYXNrLXNpemU6IGNvdmVyO1xuICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgd2lkdGg6IHZhcigtLXYtaWNvbi1zaXplKTtcbiAgaGVpZ2h0OiB2YXIoLS12LWljb24tc2l6ZSk7XG59XG5AbWVkaWEgKG1pbi13aWR0aDogMTIwMHB4KSB7XG4gIC5jb2xsYWdlIC5zdG9ja3RpY2tlciAuc3RvY2t0aWNrZXJfX2RhdGVEYXRlOmJlZm9yZSB7XG4gICAgbWFzay1pbWFnZTogdXJsKFwiL2NvbnRlbnQvZGFtL3ZvbHZvLW1lZGlhL2xpc3QtaWNvbnMvY2FsZW5kYXIuc3ZnI2NhbGVuZGFyLWljb24tdzE2LXZpZXdcIik7XG4gIH1cbn1cbi5jb2xsYWdlIC5zdG9ja3RpY2tlciAuc3RvY2t0aWNrZXJfX2RhdGVEYXRlOjpiZWZvcmUge1xuICBtYXJnaW4tcmlnaHQ6IDVweDtcbn1cbi5jb2xsYWdlIC5zdG9ja3RpY2tlciAuc3RvY2t0aWNrZXJfX2RhdGVUaW1lIHtcbiAgZmxvYXQ6IHJpZ2h0O1xuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xufVxuLmNvbGxhZ2UgLnN0b2NrdGlja2VyIC5zdG9ja3RpY2tlcl9fZGF0ZVRpbWU6YmVmb3JlIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzUzNTY1YTtcbiAgY29udGVudDogXCJcIjtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICBtYXNrLWltYWdlOiB1cmwoXCIvY29udGVudC9kYW0vdm9sdm8tbWVkaWEvbGlzdC1pY29ucy9jbG9jay5zdmcjY2xvY2staWNvbi13MjQtdmlld1wiKTtcbiAgbWFzay1yZXBlYXQ6IG5vLXJlcGVhdDtcbiAgbWFzay1zaXplOiBjb3ZlcjtcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gIHdpZHRoOiB2YXIoLS12LWljb24tc2l6ZSk7XG4gIGhlaWdodDogdmFyKC0tdi1pY29uLXNpemUpO1xufVxuQG1lZGlhIChtaW4td2lkdGg6IDEyMDBweCkge1xuICAuY29sbGFnZSAuc3RvY2t0aWNrZXIgLnN0b2NrdGlja2VyX19kYXRlVGltZTpiZWZvcmUge1xuICAgIG1hc2staW1hZ2U6IHVybChcIi9jb250ZW50L2RhbS92b2x2by1tZWRpYS9saXN0LWljb25zL2Nsb2NrLnN2ZyNjbG9jay1pY29uLXcxNi12aWV3XCIpO1xuICB9XG59XG4uY29sbGFnZSAuc3RvY2t0aWNrZXIgLnN0b2NrdGlja2VyX19kYXRlVGltZTo6YmVmb3JlIHtcbiAgbWFyZ2luLXJpZ2h0OiA1cHg7XG59IixudWxsLG51bGxdfQ== */