/*!*******************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\
  !*** css ../node_modules/.pnpm/css-loader@6.11.0_webpack@5.98.0/node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[0].use[1]!../node_modules/.pnpm/resolve-url-loader@5.0.0/node_modules/resolve-url-loader/index.js!../node_modules/.pnpm/postcss-loader@7.3.4_postcss@8.5.15_webpack@5.98.0/node_modules/postcss-loader/dist/cjs.js??ruleSet[1].rules[0].use[3]!../node_modules/.pnpm/sass-loader@16.0.7_sass@1.98.0_webpack@5.98.0/node_modules/sass-loader/dist/cjs.js??ruleSet[1].rules[0].use[4]!./build/national_cable_theme/css/styles-print.css.scss ***!
  \*******************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/
/* @theme: default; */
/* @theme: default; */
/** @return the value from a $color-palette map associated with a given key;
    Use: color: get-color('primary', 'main') => color: #000;
*/
/** @return the value from a $color-palette map associated with a given key and with css var;
    Use: color: get-var-color('primary', 'base') => color: var(--primary-base, #000);
*/
/** @return the css-property key based on list of arguments;
    Use: get-var-key('btn', 'primary', 'hover') => --btn-primary-hover;
*/
/** @return the value in a $theme-fonts map associated with a given key;
    Use: font-family: get-font-name('main') => font-family: 'Poppins';
*/
/** @return the value in a $font-weights map associated with a given key;
    Use: font-weight: font-weight('bold') => font-weight: 700;
*/
/** Calculates the spacing sizes based on specified multipliers and a base value.
    @param {String} $name - The name of the spacing size (e.g., xs, md, lg).
    @return {Number|null} The calculated spacing size in pixels, based on the provided multipliers
                          and the base spacing value. Returns null if multiplier is not found.
*/
/** @return: the value in a map associated with a given key
    Use: z-index: z('base');
*/
/** Remove the unit of a length
    @return number
    Use: $value: strip-units(10px); -> 10
*/
/** In SASS we can only once set a value to variable with flag !default, all others values will be ignored.
    The variable must be declared.
    @return new value with flag !default;
    Use: $component-var: reset-var($component-var, 10);
*/
/** Extended default map-merge
    Merge two maps together into new map, w/o null keys
*/
/** Merge breakpoints
    $old-breakpoints: (
        'desktop': '(min-width: 1100px)',
        'tablet': '(max-width: 1099px )'
    );
    $new-breakpoints: (
        'desktop': '(min-width: 1200px)',
        'tablet': null,
        'mobile': '(max-width: 640px)'
    );
    @return the value with a merged breakpoints;
    $breakpoints: (
        'desktop''(min-width: 1200px)',
        'mobile': '(max-width: 640px)'
    );
    Use: merge-breakpoints($old-breakpoints, $new-breakpoints);
*/
/** Get base breakpoint list
    @return the list of base breakpoints;
*/
/** @return modified selector
    Use: modify-selector($selector: 'a', $part-before: '~ ') => '~ a';
*/
/** @return modified list of selectors
    Use: modify-selector(selectors: 'a , button', $part-before: '~ ') => '~ a, ~ button';
*/
/** @return the list of CSS selectors for HTML elements that can receive focus
    Use: font-get-focusable-selector() => 'a[href]:not([tabindex="-1"]), input:not([disabled]):not([tabindex="-1"])';
*/
/* @theme: default; */
/* @theme: default; */
/** List with theme fonts
   'main': (
        'family': 'Arial',
        'variants': (
            (
                'path': '',
                'weight': 600,
                'style': normal
            )
        ),
        'formats': ('woff2')
    )
 */
/* @theme: default; */
/* @theme: default; */
/* @theme: default; */
/* @theme: default; */
/* @theme: default; */
/* @theme: default; */
/* @theme: default; */
/* @theme: default; */
/* @theme: default; */
/** Use: @include breakpoint('desktop') {
        content
    }
*/
/* @theme: default; */
/* @theme: default; */
/* @theme: default; */
/* @theme: default; */
/* @theme: default; */
/* @theme: default; */
/* @theme: default; */
/* @theme: default; */
/* @theme: default; */
/* @theme: default; */
/* @theme: default; */
/* @theme: default; */
/* @theme: default; */
/* stylelint-disable-next-line scss/no-global-function-names */
/* @theme: default; */
/* @theme: default; */
/* @theme: default; */
/* @theme: default; */
/* @theme: default; */
/* @theme: default; */
/* @theme: default; */
/* @theme: default; */
@keyframes skeleton-pulse {
  0% {
    opacity: 1;
  }
  50% {
    opacity: 0.5;
  }
  100% {
    opacity: 1;
  }
}
/* @theme: default; */
/* @theme: default; */
/* @theme: default; */
/* @theme: default; */
/* @theme: default; */
/* @theme: default; */
/* @theme: default; */
/* @theme: default; */
/* @theme: default; */
/* @theme: default; */
/* @theme: default; */
/* @theme: default; */
/** Render map of css properties as key: value;
*/
/** Render map of css properties as key: value; where value has generated css-property
*/
/** Render states of component from a map
*/
/* @theme: default; */
/* @theme: default; */
/* @theme: default; */
/* @theme: default; */
/* @theme: default; */
/* @theme: default; */
/* @theme: default; */
/* @theme: default; */
/* @theme: default; */
.grid-header-cell.action-column:empty::before {
  display: none;
}
.grid-header-cell .datagrid-massaction {
  display: none;
}

/* @theme: default; */
html {
  background: none;
}

.body {
  margin: 0 auto;
}

thead {
  display: table-header-group;
}

tr,
img {
  page-break-inside: avoid;
}

p,
h2,
h3 {
  orphans: 3;
  widows: 3;
}

tr {
  page-break-inside: avoid;
}

img {
  max-width: 100% !important;
  page-break-inside: avoid;
}

noscript {
  display: none;
}

@page {
  margin: 10mm;
}
/* @theme: default; */
.page-container {
  display: block;
  min-height: initial;
}

/* @theme: default; */
.datagrid-toolbar {
  display: none !important;
}

/* @theme: default; */
.page-header {
  display: none !important;
}

/* @theme: default; */
.page-footer {
  display: none !important;
}

/* @theme: default; */
.page-content {
  width: 100%;
}
.page-content--has-sidebar {
  padding: 0;
}

/* @theme: default; */
.page-sidebar {
  display: none !important;
}

/* @theme: default; */
.page-title {
  text-align: center;
}

.page-title-actions {
  display: none;
}

/* @theme: default; */
.logo--print-only {
  display: block;
}

/* @theme: default; */
.notification-flash-container {
  display: none !important;
}

/* @theme: default; */
.breadcrumbs {
  display: none !important;
}

/* @theme: default; */
.scroll-top {
  display: none !important;
}

/* @theme: default; */
.page-main__content {
  display: block;
  margin: 0;
}

/* @theme: default; */
.box-toolbar__actions {
  display: none !important;
}

/* @theme: default; */
/* stylelint-disable declaration-no-important */
.frontend-datagrid--responsive .toolbar-top {
  display: none;
}
.frontend-datagrid--responsive .grid-header-cell {
  display: table-cell !important;
  padding-left: 8px;
  padding-right: 8px;
  background: none !important;
}
.frontend-datagrid--responsive .grid-header-cell:first-child {
  padding-left: 0;
}
.frontend-datagrid--responsive .grid-header-cell:last-child {
  padding-right: 0;
}
.frontend-datagrid--responsive .grid-header-cell.action-column {
  display: none !important;
}
.frontend-datagrid--responsive .grid-body {
  display: table-row-group !important;
}
.frontend-datagrid--responsive .grid-row,
.frontend-datagrid--responsive .grid-header-row {
  display: table-row !important;
}
.frontend-datagrid--responsive .grid-body-cell {
  display: table-cell !important;
  padding: 8px;
  background: none !important;
}
.frontend-datagrid--responsive .grid-body-cell:first-child {
  padding-left: 0;
}
.frontend-datagrid--responsive .grid-body-cell:last-child {
  padding-right: 0;
}
.frontend-datagrid--responsive .grid-row:first-child .grid-body-cell {
  padding-top: 8px;
}

.grid-views {
  display: none;
}

/* stylelint-enable declaration-no-important */
/* @theme: default; */
.customer-info-grid .grid__column {
  width: 50%;
}
.customer-info-grid__element-label {
  white-space: normal;
}
.customer-info-grid__view-more {
  display: none;
}

/* @theme: default; */
.customer-line-items--rfq .grid-header-cell-notes {
  display: none !important;
}
.customer-line-items--rfq .grid-body-cell-qty::before, .customer-line-items--rfq .grid-body-cell-price::before {
  display: none;
}
.customer-line-items--rfq .grid-body-cell-product .customer-line-items__note {
  display: block;
}
.customer-line-items--rfq .grid-body-cell-notes {
  display: none !important;
}

/* @theme: default; */
.order-checkout-widget {
  page-break-inside: avoid;
}
.order-checkout-widget__quote {
  display: none !important;
}
.order-checkout-widget__container-wrapper {
  margin-bottom: 0;
}

/* @theme: default; */
.order-builder-clear-btn {
  display: none !important;
}

/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3NzL3N0eWxlcy1wcmludC5jc3MiLCJtYXBwaW5ncyI6Ijs7O0FBQUE7QUNBQTtBQVFBOztBQUFBO0FBZUE7O0FBQUE7QUFjQTs7QUFBQTtBQW1CQTs7QUFBQTtBQWNBOztBQUFBO0FBY0E7Ozs7QUFBQTtBQWlCQTs7QUFBQTtBQWtCQTs7O0FBQUE7QUFTQTs7OztBQUFBO0FBYUE7O0FBQUE7QUFnQkE7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQXNCQTs7QUFBQTtBQWVBOztBQUFBO0FBZUE7O0FBQUE7QUFzQkE7O0FBQUE7QUN2T0E7QUNBQTtBQVVBOzs7Ozs7Ozs7Ozs7QUFBQTtBQ1ZBO0FDQUE7QUNBQTtBQ0FBO0FDQUE7QUNBQTtBQ0FBO0FDQUE7QUNBQTtBQUlBOzs7QUFBQTtBQ0pBO0FDQUE7QUNBQTtBQ0FBO0FDQUE7QUNBQTtBQ0FBO0FDQUE7QUNBQTtBQ0FBO0FDQUE7QUNBQTtBQ0FBO0FBS0E7QUNMQTtBQ0FBO0FDQUE7QUNBQTtBQ0FBO0FDQUE7QUNBQTtBQ0FBO0FINkJBO0FBQ0E7QUFDQTtBSXdGQTtBSnRGQTtBQUNBO0FJd0ZBO0FKdEZBO0FBQ0E7QUl3RkE7QUFDQTtBQzlIQTtBQ0FBO0FDQUE7QUNBQTtBQ0FBO0FDQUE7QUNBQTtBQ0FBO0FDQUE7QUNBQTtBQ0FBO0FDQUE7QUFLQTtBQUFBO0FBVUE7QUFBQTtBQWNBO0FBQUE7QUM3QkE7QUNBQTtBQ0FBO0FDQUE7QUNBQTtBQ0FBO0FDQUE7QUNBQTtBQ0FBO0FBS0E7QUFDQTtBckJzSkE7QXFCakpBO0FBQ0E7QXJCbUpBOztBc0IvSkE7QUFFQTtBQUNBO0F0QmlLQTs7QXNCOUpBO0FBQ0E7QXRCaUtBOztBc0I5SkE7QUFDQTtBdEJpS0E7O0FzQjlKQTs7QUFFQTtBdEJpS0E7O0FzQjlKQTs7O0FBR0E7QUFDQTtBdEJpS0E7O0FzQjlKQTtBQUNBO0F0QmlLQTs7QXNCOUpBO0FBRUE7QUFDQTtBdEJnS0E7O0FzQjdKQTtBQUNBO0F0QmdLQTs7QXNCN0pBO0FBQ0E7QXRCZ0tBO0F1QnpNQTtBQUVBO0FBQ0E7QUFDQTtBdkIwTUE7O0F3QjlNQTtBQUVBO0FBRUE7QXhCK01BOztBeUJuTkE7QUFFQTtBQUVBO0F6Qm9OQTs7QTBCeE5BO0FBRUE7QUFFQTtBMUJ5TkE7O0EyQjdOQTtBQUVBO0FBQ0E7QTNCK05BO0EyQjdOQTtBQUNBO0EzQitOQTs7QTRCck9BO0FBRUE7QUFFQTtBNUJzT0E7O0E2QjFPQTtBQUVBO0FBQ0E7QTdCNE9BOztBNkJ6T0E7QUFDQTtBN0I0T0E7O0E4Qm5QQTtBQUdBO0FBQ0E7QTlCb1BBOztBK0J4UEE7QUFFQTtBQUVBO0EvQnlQQTs7QWdDN1BBO0FBRUE7QUFFQTtBaEM4UEE7O0FpQ2xRQTtBQUVBO0FBRUE7QWpDbVFBOztBa0N2UUE7QUFHQTtBQUNBO0FBQ0E7QWxDd1FBOztBbUM3UUE7QUFHQTtBQUVBO0FuQzZRQTs7QW9DbFJBO0FBRUE7QUFFQTtBQUNBO0FwQ21SQTtBb0NoUkE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBcENpUkE7QW9DL1FBO0FBQ0E7QXBDaVJBO0FvQzlRQTtBQUNBO0FwQ2dSQTtBb0M3UUE7QUFDQTtBcEMrUUE7QW9DM1FBO0FBQ0E7QXBDNlFBO0FvQzFRQTs7QUFFQTtBcEM0UUE7QW9DelFBO0FBQ0E7QUFDQTtBQUVBO0FwQzBRQTtBb0N4UUE7QUFDQTtBcEMwUUE7QW9DdlFBO0FBQ0E7QXBDeVFBO0FvQ3BRQTtBQUNBO0FwQ3NRQTs7QW9DalFBO0FBQ0E7QXBDb1FBOztBb0NsUUE7QUM5REE7QUFHQTtBQUNBO0FyQ2tVQTtBcUMvVEE7QUFDQTtBckNpVUE7QXFDOVRBO0FBQ0E7QXJDZ1VBOztBc0M1VUE7QUFJQTtBQUVBO0F0QzJVQTtBc0NwVUE7QUFDQTtBdENzVUE7QXNDalVBO0FBQ0E7QXRDbVVBO0FzQy9UQTtBQUVBO0F0Q2dVQTs7QXVDMVZBO0FBRUE7QUFDQTtBdkM0VkE7QXVDMVZBO0FBRUE7QXZDMlZBO0F1Q3hWQTtBQUNBO0F2QzBWQTs7QXdDcldBO0FBRUE7QUFFQTtBeENzV0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9idW5kbGVzL29yb3VpL2RlZmF1bHQvc2Nzcy9zZXR0aW5ncy9nbG9iYWwtc2V0dGluZ3Muc2NzcyIsIndlYnBhY2s6Ly8vLi9idW5kbGVzL29yb3VpL2RlZmF1bHQvc2Nzcy9zZXR0aW5ncy9fZnVuY3Rpb25zLnNjc3MiLCJ3ZWJwYWNrOi8vLy4vYnVuZGxlcy9vcm91aS9kZWZhdWx0L3Njc3Mvc2V0dGluZ3MvX3ZhcmlhYmxlcy5zY3NzIiwid2VicGFjazovLy8uL2J1bmRsZXMvb3JvdWkvZGVmYXVsdC9zY3NzL3NldHRpbmdzL190eXBvZ3JhcGh5LnNjc3MiLCJ3ZWJwYWNrOi8vLy4vYnVuZGxlcy9vcm91aS9kZWZhdWx0L3Njc3Mvc2V0dGluZ3MvX3NpemVzLnNjc3MiLCJ3ZWJwYWNrOi8vLy4vYnVuZGxlcy9vcm91aS9kZWZhdWx0L3Njc3Mvc2V0dGluZ3MvX2NvbG9ycy5zY3NzIiwid2VicGFjazovLy8uL2J1bmRsZXMvb3JvdWkvZGVmYXVsdC9zY3NzL3NldHRpbmdzL19icmVha3BvaW50cy5zY3NzIiwid2VicGFjazovLy8uL2J1bmRsZXMvb3JvdWkvZGVmYXVsdC9zY3NzL3NldHRpbmdzL19taXhpbnMuc2NzcyIsIndlYnBhY2s6Ly8vLi9idW5kbGVzL29yb3VpL2RlZmF1bHQvc2Nzcy9zZXR0aW5ncy9taXhpbnMvYWZ0ZXIuc2NzcyIsIndlYnBhY2s6Ly8vLi9idW5kbGVzL29yb3VpL2RlZmF1bHQvc2Nzcy9zZXR0aW5ncy9taXhpbnMvZWxsaXBzaXMuc2NzcyIsIndlYnBhY2s6Ly8vLi9idW5kbGVzL29yb3VpL2RlZmF1bHQvc2Nzcy9zZXR0aW5ncy9taXhpbnMvY2xlYXJmaXguc2NzcyIsIndlYnBhY2s6Ly8vLi9idW5kbGVzL29yb3VpL2RlZmF1bHQvc2Nzcy9zZXR0aW5ncy9taXhpbnMvbGlzdC1ub3JtYWxpemUuc2NzcyIsIndlYnBhY2s6Ly8vLi9idW5kbGVzL29yb3VpL2RlZmF1bHQvc2Nzcy9zZXR0aW5ncy9taXhpbnMvYnJlYWtwb2ludC5zY3NzIiwid2VicGFjazovLy8uL2J1bmRsZXMvb3JvdWkvZGVmYXVsdC9zY3NzL3NldHRpbmdzL21peGlucy9mb250LWZhY2Uuc2NzcyIsIndlYnBhY2s6Ly8vLi9idW5kbGVzL29yb3VpL2RlZmF1bHQvc2Nzcy9zZXR0aW5ncy9taXhpbnMvZm9udC1zbW9vdGhpbmcuc2NzcyIsIndlYnBhY2s6Ly8vLi9idW5kbGVzL29yb3VpL2RlZmF1bHQvc2Nzcy9zZXR0aW5ncy9taXhpbnMvb25seS1kZXNrdG9wLnNjc3MiLCJ3ZWJwYWNrOi8vLy4vYnVuZGxlcy9vcm91aS9kZWZhdWx0L3Njc3Mvc2V0dGluZ3MvbWl4aW5zL29ubHktbW9iaWxlLnNjc3MiLCJ3ZWJwYWNrOi8vLy4vYnVuZGxlcy9vcm91aS9kZWZhdWx0L3Njc3Mvc2V0dGluZ3MvbWl4aW5zL2Z1bGxzY3JlZW4tbW9kZS5zY3NzIiwid2VicGFjazovLy8uL2J1bmRsZXMvb3JvdWkvZGVmYXVsdC9zY3NzL3NldHRpbmdzL21peGlucy9kaXNhYmxlLXNlYXJjaC1zdHlsZXMuc2NzcyIsIndlYnBhY2s6Ly8vLi9idW5kbGVzL29yb3VpL2RlZmF1bHQvc2Nzcy9zZXR0aW5ncy9taXhpbnMvYXNwZWN0LXJhdGlvLnNjc3MiLCJ3ZWJwYWNrOi8vLy4vYnVuZGxlcy9vcm91aS9kZWZhdWx0L3Njc3Mvc2V0dGluZ3MvbWl4aW5zL2VsZW1lbnQtc3RhdGUuc2NzcyIsIndlYnBhY2s6Ly8vLi9idW5kbGVzL29yb3VpL2RlZmF1bHQvc2Nzcy9zZXR0aW5ncy9taXhpbnMvc2FmZS1hcmVhLW9mZnNldC5zY3NzIiwid2VicGFjazovLy8uL2J1bmRsZXMvb3JvdWkvZGVmYXVsdC9zY3NzL3NldHRpbmdzL21peGlucy9jYXJldC5zY3NzIiwid2VicGFjazovLy8uL2J1bmRsZXMvb3JvdWkvZGVmYXVsdC9zY3NzL3NldHRpbmdzL21peGlucy9ib3JkZXIuc2NzcyIsIndlYnBhY2s6Ly8vLi9idW5kbGVzL29yb3VpL2RlZmF1bHQvc2Nzcy9zZXR0aW5ncy9taXhpbnMvbmF2LXRhYnMuc2NzcyIsIndlYnBhY2s6Ly8vLi9idW5kbGVzL29yb3VpL2RlZmF1bHQvc2Nzcy9zZXR0aW5ncy9taXhpbnMvbGlzdC1zZXBhcmF0b3Iuc2NzcyIsIndlYnBhY2s6Ly8vLi9idW5kbGVzL29yb3VpL2RlZmF1bHQvc2Nzcy9zZXR0aW5ncy9taXhpbnMvYmxvY2stc3Vic3RyYXRlLnNjc3MiLCJ3ZWJwYWNrOi8vLy4vYnVuZGxlcy9vcm91aS9kZWZhdWx0L3Njc3Mvc2V0dGluZ3MvbWl4aW5zL2tleWZyYW1lLnNjc3MiLCJ3ZWJwYWNrOi8vLy4vYnVuZGxlcy9vcm91aS9kZWZhdWx0L3Njc3Mvc2V0dGluZ3MvbWl4aW5zL2ZsZXhpYmxlLWFycm93LnNjc3MiLCJ3ZWJwYWNrOi8vLy4vYnVuZGxlcy9vcm91aS9kZWZhdWx0L3Njc3Mvc2V0dGluZ3MvbWl4aW5zL2xpbmUtY2xhbXAuc2NzcyIsIndlYnBhY2s6Ly8vLi9idW5kbGVzL29yb3VpL2RlZmF1bHQvc2Nzcy9zZXR0aW5ncy9za2VsZXRvbi9za2VsZXRvbi5zY3NzIiwid2VicGFjazovLy8uL2J1bmRsZXMvb3JvdWkvZGVmYXVsdC9zY3NzL3NldHRpbmdzL3NrZWxldG9uL19mdW5jdGlvbnMuc2NzcyIsIndlYnBhY2s6Ly8vLi9idW5kbGVzL29yb3VpL2RlZmF1bHQvc2Nzcy9zZXR0aW5ncy9za2VsZXRvbi9fcmVjdC5zY3NzIiwid2VicGFjazovLy8uL2J1bmRsZXMvb3JvdWkvZGVmYXVsdC9zY3NzL3NldHRpbmdzL3NrZWxldG9uL19lbGxpcHNlLnNjc3MiLCJ3ZWJwYWNrOi8vLy4vYnVpbGQvbmF0aW9uYWxfY2FibGVfdGhlbWUvY3NzL3N0eWxlcy1wcmludC5jc3Muc2NzcyIsIndlYnBhY2s6Ly8vLi9idW5kbGVzL29yb3VpL2RlZmF1bHQvc2Nzcy9zZXR0aW5ncy9taXhpbnMvdGFibGUtYmFzZS5zY3NzIiwid2VicGFjazovLy8uL2J1bmRsZXMvb3JvdWkvZGVmYXVsdC9zY3NzL3NldHRpbmdzL21peGlucy9tb3NhaWMtZ3JpZC5zY3NzIiwid2VicGFjazovLy8uL2J1bmRsZXMvb3JvdWkvZGVmYXVsdC9zY3NzL3NldHRpbmdzL21peGlucy9ncmlkLWNlbGwtYWxpZ24uc2NzcyIsIndlYnBhY2s6Ly8vLi9idW5kbGVzL29yb3VpL2RlZmF1bHQvc2Nzcy9zZXR0aW5ncy9taXhpbnMvYmFkZ2Uuc2NzcyIsIndlYnBhY2s6Ly8vLi9idW5kbGVzL29yb3VpL2RlZmF1bHQvc2Nzcy9zZXR0aW5ncy9taXhpbnMvaW5kaWNhdG9yLnNjc3MiLCJ3ZWJwYWNrOi8vLy4vYnVuZGxlcy9vcm91aS9kZWZhdWx0L3Njc3Mvc2V0dGluZ3MvbWl4aW5zL2Jhci1zZXBhcmF0b3Iuc2NzcyIsIndlYnBhY2s6Ly8vLi9idW5kbGVzL29yb3VpL2RlZmF1bHQvc2Nzcy9zZXR0aW5ncy9taXhpbnMvc2xpY2stYXJyb3cuc2NzcyIsIndlYnBhY2s6Ly8vLi9idW5kbGVzL29yb3VpL2RlZmF1bHQvc2Nzcy9zZXR0aW5ncy9taXhpbnMvc2xpY2stZG90cy5zY3NzIiwid2VicGFjazovLy8uL2J1bmRsZXMvb3JvdWkvZGVmYXVsdC9zY3NzL3NldHRpbmdzL21peGlucy9kaXJlY3QtbGluay5zY3NzIiwid2VicGFjazovLy8uL2J1bmRsZXMvb3JvdWkvZGVmYXVsdC9zY3NzL3NldHRpbmdzL21peGlucy9sb2FkaW5nLWJsdXIuc2NzcyIsIndlYnBhY2s6Ly8vLi9idW5kbGVzL29yb3VpL2RlZmF1bHQvc2Nzcy9zZXR0aW5ncy9taXhpbnMvbG9hZGluZy1ibHVyLW92ZXJsYXkuc2NzcyIsIndlYnBhY2s6Ly8vLi9idW5kbGVzL29yb3VpL2RlZmF1bHQvc2Nzcy9zZXR0aW5ncy9taXhpbnMvdXRpbHMuc2NzcyIsIndlYnBhY2s6Ly8vLi9idW5kbGVzL29yb3VpL2RlZmF1bHQvc2Nzcy9zZXR0aW5ncy9fcGxhY2Vob2xkZXJzLnNjc3MiLCJ3ZWJwYWNrOi8vLy4vYnVuZGxlcy9vcm91aS9kZWZhdWx0L3Njc3Mvc2V0dGluZ3MvcGxhY2Vob2xkZXJzL2Jhc2UtdHJhbnNpdGlvbi5zY3NzIiwid2VicGFjazovLy8uL2J1bmRsZXMvb3JvdWkvZGVmYXVsdC9zY3NzL3NldHRpbmdzL3BsYWNlaG9sZGVycy9mdWxsLWNvdmVyLnNjc3MiLCJ3ZWJwYWNrOi8vLy4vYnVuZGxlcy9vcm9mcm9udGVuZC9kZWZhdWx0L3Njc3MvdmFyaWFibGVzL3ByaW50L2Jhc2UtY29uZmlnLnNjc3MiLCJ3ZWJwYWNrOi8vLy4vYnVuZGxlcy9vcm9mcm9udGVuZC9kZWZhdWx0L3Njc3MvdmFyaWFibGVzL3ByaW50L3BhZ2UtY29udGVudC1jb25maWcuc2NzcyIsIndlYnBhY2s6Ly8vLi9idW5kbGVzL29yb2Zyb250ZW5kL2RlZmF1bHQvc2Nzcy92YXJpYWJsZXMvcHJpbnQvbG9nby1jb25maWcuc2NzcyIsIndlYnBhY2s6Ly8vLi9idW5kbGVzL29yb2Zyb250ZW5kL2RlZmF1bHQvc2Nzcy92YXJpYWJsZXMvcHJpbnQvZnJvbnRlbmQtZGF0YWdyaWQtY29uZmlnLnNjc3MiLCJ3ZWJwYWNrOi8vLy4vYnVuZGxlcy9vcm9jdXN0b21lci9kZWZhdWx0L3Njc3MvdmFyaWFibGVzL2N1c3RvbWVyLWluZm8tZ3JpZC1wcmludC1jb25maWcuc2NzcyIsIndlYnBhY2s6Ly8vLi9idW5kbGVzL29yb2RhdGFncmlkL2RlZmF1bHQvc2Nzcy9jb21wb25lbnRzL3ByaW50L2RhdGFncmlkLWhlYWRlci1jZWxsLnNjc3MiLCJ3ZWJwYWNrOi8vLy4vYnVuZGxlcy9vcm9mcm9udGVuZC9kZWZhdWx0L3Njc3MvYmFzZS9iYXNlLXByaW50LnNjc3MiLCJ3ZWJwYWNrOi8vLy4vYnVuZGxlcy9vcm9mcm9udGVuZC9kZWZhdWx0L3Njc3MvY29tcG9uZW50cy9wcmludC9wYWdlLWNvbnRhaW5lci5zY3NzIiwid2VicGFjazovLy8uL2J1bmRsZXMvb3JvZnJvbnRlbmQvZGVmYXVsdC9zY3NzL2NvbXBvbmVudHMvcHJpbnQvZGF0YWdyaWQtdG9vbGJhci5zY3NzIiwid2VicGFjazovLy8uL2J1bmRsZXMvb3JvZnJvbnRlbmQvZGVmYXVsdC9zY3NzL2NvbXBvbmVudHMvcHJpbnQvcGFnZS1oZWFkZXIuc2NzcyIsIndlYnBhY2s6Ly8vLi9idW5kbGVzL29yb2Zyb250ZW5kL2RlZmF1bHQvc2Nzcy9jb21wb25lbnRzL3ByaW50L3BhZ2UtZm9vdGVyLnNjc3MiLCJ3ZWJwYWNrOi8vLy4vYnVuZGxlcy9vcm9mcm9udGVuZC9kZWZhdWx0L3Njc3MvY29tcG9uZW50cy9wcmludC9wYWdlLWNvbnRlbnQuc2NzcyIsIndlYnBhY2s6Ly8vLi9idW5kbGVzL29yb2Zyb250ZW5kL2RlZmF1bHQvc2Nzcy9jb21wb25lbnRzL3ByaW50L3BhZ2Utc2lkZWJhci5zY3NzIiwid2VicGFjazovLy8uL2J1bmRsZXMvb3JvZnJvbnRlbmQvZGVmYXVsdC9zY3NzL2NvbXBvbmVudHMvcHJpbnQvcGFnZS10aXRsZS5zY3NzIiwid2VicGFjazovLy8uL2J1bmRsZXMvb3JvZnJvbnRlbmQvZGVmYXVsdC9zY3NzL2NvbXBvbmVudHMvcHJpbnQvbG9nby5zY3NzIiwid2VicGFjazovLy8uL2J1bmRsZXMvb3JvZnJvbnRlbmQvZGVmYXVsdC9zY3NzL2NvbXBvbmVudHMvcHJpbnQvbm90aWZpY2F0aW9uLWZsYXNoLWNvbnRhaW5lci5zY3NzIiwid2VicGFjazovLy8uL2J1bmRsZXMvb3JvZnJvbnRlbmQvZGVmYXVsdC9zY3NzL2NvbXBvbmVudHMvcHJpbnQvYnJlYWRjcnVtYnMuc2NzcyIsIndlYnBhY2s6Ly8vLi9idW5kbGVzL29yb2Zyb250ZW5kL2RlZmF1bHQvc2Nzcy9jb21wb25lbnRzL3ByaW50L3Njcm9sbC10b3Auc2NzcyIsIndlYnBhY2s6Ly8vLi9idW5kbGVzL29yb2Zyb250ZW5kL2RlZmF1bHQvc2Nzcy9jb21wb25lbnRzL3ByaW50L3BhZ2UtbWFpbi5zY3NzIiwid2VicGFjazovLy8uL2J1bmRsZXMvb3JvZnJvbnRlbmQvZGVmYXVsdC9zY3NzL2NvbXBvbmVudHMvcHJpbnQvYm94LXRvb2xiYXIuc2NzcyIsIndlYnBhY2s6Ly8vLi9idW5kbGVzL29yb2Zyb250ZW5kL2RlZmF1bHQvc2Nzcy9jb21wb25lbnRzL3ByaW50L2Zyb250ZW5kLWRhdGFncmlkLnNjc3MiLCJ3ZWJwYWNrOi8vLy4vYnVuZGxlcy9vcm9jdXN0b21lci9kZWZhdWx0L3Njc3MvY29tcG9uZW50cy9jdXN0b21lci1pbmZvLWdyaWQtcHJpbnQuc2NzcyIsIndlYnBhY2s6Ly8vLi9idW5kbGVzL29yb2N1c3RvbWVyL2RlZmF1bHQvc2Nzcy9jb21wb25lbnRzL2N1c3RvbWVyLWxpbmUtaXRlbXMtcHJpbnQuc2NzcyIsIndlYnBhY2s6Ly8vLi9idW5kbGVzL29yb2NoZWNrb3V0L2RlZmF1bHQvc2Nzcy9jb21wb25lbnRzL29yZGVyLWNoZWNrb3V0LXdpZGdldC1wcmludC5zY3NzIiwid2VicGFjazovLy8uL2J1bmRsZXMvb3Jvc2hvcHBpbmdsaXN0L2RlZmF1bHQvc2Nzcy9jb21wb25lbnRzL3Nob3BwaW5nLWxpc3Qtd2lkZ2V0LXByaW50LnNjc3MiXSwic291cmNlc0NvbnRlbnQiOlsiLyogQHRoZW1lOiBkZWZhdWx0OyAqL1xuXG4kZ2xvYmFsLXVybDogJ35idW5kbGVzJyAhZGVmYXVsdDtcblxuQGltcG9ydCAnLi9mdW5jdGlvbnMnO1xuQGltcG9ydCAnLi92YXJpYWJsZXMnO1xuQGltcG9ydCAnLi9taXhpbnMnO1xuQGltcG9ydCAnLi9wbGFjZWhvbGRlcnMnO1xuIiwiLyogQHRoZW1lOiBkZWZhdWx0OyAqL1xuXG5AdXNlICdzYXNzOm1hdGgnO1xuQHVzZSAnc2FzczptZXRhJztcbkB1c2UgJ3Nhc3M6bGlzdCc7XG5AdXNlICdzYXNzOnN0cmluZyc7XG5AdXNlICdzYXNzOm1hcCc7XG5cbi8qKiBAcmV0dXJuIHRoZSB2YWx1ZSBmcm9tIGEgJGNvbG9yLXBhbGV0dGUgbWFwIGFzc29jaWF0ZWQgd2l0aCBhIGdpdmVuIGtleTtcbiAgICBVc2U6IGNvbG9yOiBnZXQtY29sb3IoJ3ByaW1hcnknLCAnbWFpbicpID0+IGNvbG9yOiAjMDAwO1xuKi9cbkBmdW5jdGlvbiBnZXQtY29sb3IoJHBhbGV0dGUsICRrZXlzLi4uKSB7XG4gICAgJGNvbG9yLWtleTogbWFwLmdldCgkY29sb3ItcGFsZXR0ZSwgJHBhbGV0dGUsICRrZXlzLi4uKTtcblxuICAgIEBpZiBub3QgJGNvbG9yLWtleSBvciBtZXRhLnR5cGUtb2YoJGNvbG9yLWtleSkgPT0gJ21hcCcgb3IgbWV0YS50eXBlLW9mKCRjb2xvci1rZXkpID09ICdsaXN0JyB7XG4gICAgICAgIEB3YXJuICdDb2xvciBub3QgZm91bmQnO1xuXG4gICAgICAgIEByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBAcmV0dXJuICRjb2xvci1rZXk7XG59XG5cbi8qKiBAcmV0dXJuIHRoZSB2YWx1ZSBmcm9tIGEgJGNvbG9yLXBhbGV0dGUgbWFwIGFzc29jaWF0ZWQgd2l0aCBhIGdpdmVuIGtleSBhbmQgd2l0aCBjc3MgdmFyO1xuICAgIFVzZTogY29sb3I6IGdldC12YXItY29sb3IoJ3ByaW1hcnknLCAnYmFzZScpID0+IGNvbG9yOiB2YXIoLS1wcmltYXJ5LWJhc2UsICMwMDApO1xuKi9cblxuQGZ1bmN0aW9uIGdldC12YXItY29sb3IoJHBhbGV0dGUsICRrZXlzLi4uKSB7XG4gICAgJGNvbG9yLWtleTogZ2V0LWNvbG9yKCRwYWxldHRlLCAka2V5cy4uLik7XG5cbiAgICBAaWYgbm90ICRjb2xvci1rZXkge1xuICAgICAgICBAcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgQHJldHVybiB2YXIoZ2V0LXZhci1rZXkoJHBhbGV0dGUsICRrZXlzLi4uKSwgJGNvbG9yLWtleSk7XG59XG5cbi8qKiBAcmV0dXJuIHRoZSBjc3MtcHJvcGVydHkga2V5IGJhc2VkIG9uIGxpc3Qgb2YgYXJndW1lbnRzO1xuICAgIFVzZTogZ2V0LXZhci1rZXkoJ2J0bicsICdwcmltYXJ5JywgJ2hvdmVyJykgPT4gLS1idG4tcHJpbWFyeS1ob3ZlcjtcbiovXG5AZnVuY3Rpb24gZ2V0LXZhci1rZXkoJGxpc3QuLi4pIHtcbiAgICBAaWYgbm90ICRsaXN0IG9yIG1ldGEudHlwZS1vZigkbGlzdCkgIT0gJ2FyZ2xpc3QnIG9yIGxpc3QubGVuZ3RoKCRsaXN0KSA9PSAwIHtcbiAgICAgICAgQHJldHVybiBudWxsO1xuICAgIH1cblxuICAgICR2YXIta2V5OiAnLSc7XG5cbiAgICBAZWFjaCAka2V5IGluICRsaXN0IHtcbiAgICAgICAgQGlmICRrZXkge1xuICAgICAgICAgICAgJHZhci1rZXk6ICN7JHZhci1rZXl9LSN7JGtleX07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBAcmV0dXJuICR2YXIta2V5O1xufVxuXG4vKiogQHJldHVybiB0aGUgdmFsdWUgaW4gYSAkdGhlbWUtZm9udHMgbWFwIGFzc29jaWF0ZWQgd2l0aCBhIGdpdmVuIGtleTtcbiAgICBVc2U6IGZvbnQtZmFtaWx5OiBnZXQtZm9udC1uYW1lKCdtYWluJykgPT4gZm9udC1mYW1pbHk6ICdQb3BwaW5zJztcbiovXG5cbkBmdW5jdGlvbiBnZXQtZm9udC1uYW1lKCRrZXkpIHtcbiAgICAkZm9udDogbWFwLmdldCgkdGhlbWUtZm9udHMsICRrZXksICdmYW1pbHknKTtcblxuICAgIEBpZiBub3QgJGZvbnQge1xuICAgICAgICBAd2FybiAnRm9udCBub3QgZm91bmQ6JyAka2V5O1xuICAgIH1cblxuICAgIEByZXR1cm4gJGZvbnQ7XG59XG5cbi8qKiBAcmV0dXJuIHRoZSB2YWx1ZSBpbiBhICRmb250LXdlaWdodHMgbWFwIGFzc29jaWF0ZWQgd2l0aCBhIGdpdmVuIGtleTtcbiAgICBVc2U6IGZvbnQtd2VpZ2h0OiBmb250LXdlaWdodCgnYm9sZCcpID0+IGZvbnQtd2VpZ2h0OiA3MDA7XG4qL1xuXG5AZnVuY3Rpb24gZm9udC13ZWlnaHQoJGtleSkge1xuICAgICRmb250LXdlaWdodC1rZXk6IG1hcC5nZXQoJGZvbnQtd2VpZ2h0cywgJGtleSk7XG5cbiAgICBAaWYgKCRmb250LXdlaWdodC1rZXkpIHtcbiAgICAgICAgQHJldHVybiAkZm9udC13ZWlnaHQta2V5O1xuICAgIH0gQGVsc2Uge1xuICAgICAgICBAd2FybiAnRm9udCB3ZWlnaHQgdmFsdWUgbm90IGZvdW5kOicgJGtleTtcbiAgICB9XG59XG5cbi8qKiBDYWxjdWxhdGVzIHRoZSBzcGFjaW5nIHNpemVzIGJhc2VkIG9uIHNwZWNpZmllZCBtdWx0aXBsaWVycyBhbmQgYSBiYXNlIHZhbHVlLlxuICAgIEBwYXJhbSB7U3RyaW5nfSAkbmFtZSAtIFRoZSBuYW1lIG9mIHRoZSBzcGFjaW5nIHNpemUgKGUuZy4sIHhzLCBtZCwgbGcpLlxuICAgIEByZXR1cm4ge051bWJlcnxudWxsfSBUaGUgY2FsY3VsYXRlZCBzcGFjaW5nIHNpemUgaW4gcGl4ZWxzLCBiYXNlZCBvbiB0aGUgcHJvdmlkZWQgbXVsdGlwbGllcnNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kIHRoZSBiYXNlIHNwYWNpbmcgdmFsdWUuIFJldHVybnMgbnVsbCBpZiBtdWx0aXBsaWVyIGlzIG5vdCBmb3VuZC5cbiovXG5AZnVuY3Rpb24gc3BhY2luZygkbmFtZSkge1xuICAgICRtdWx0aXBsaWVyOiBtYXAuZ2V0KCRzcGFjaW5nLW11bHRpcGxpZXJzLCAkbmFtZSk7XG5cbiAgICBAaWYgbm90ICRtdWx0aXBsaWVyIHtcbiAgICAgICAgQHdhcm4gXCJObyBtdWx0aXBsaWVyIGZvdW5kIGZvciAnI3skbmFtZX0nLlwiO1xuXG4gICAgICAgIEByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBAcmV0dXJuICRiYXNlLXNwYWNpbmcgKiAkbXVsdGlwbGllcjtcbn1cblxuLyoqIEByZXR1cm46IHRoZSB2YWx1ZSBpbiBhIG1hcCBhc3NvY2lhdGVkIHdpdGggYSBnaXZlbiBrZXlcbiAgICBVc2U6IHotaW5kZXg6IHooJ2Jhc2UnKTtcbiovXG5cbkBmdW5jdGlvbiB6KCRsYXllcjogJ2Jhc2UnKSB7XG4gICAgJGxheWVyczogKFxuICAgICAgICAnYmFzZSc6IDEsXG4gICAgICAgICdkcm9wZG93bic6IDUwLFxuICAgICAgICAnZml4ZWQnOiAxMDAsXG4gICAgICAgICdwb3B1cCc6IDE1MCxcbiAgICAgICAgJ2hpZGRlbic6IC0xXG4gICAgKSAhZGVmYXVsdDtcblxuICAgICR6LWluZGV4OiBtYXAuZ2V0KCRsYXllcnMsICRsYXllcik7XG5cbiAgICBAcmV0dXJuICR6LWluZGV4O1xufVxuXG4vKiogUmVtb3ZlIHRoZSB1bml0IG9mIGEgbGVuZ3RoXG4gICAgQHJldHVybiBudW1iZXJcbiAgICBVc2U6ICR2YWx1ZTogc3RyaXAtdW5pdHMoMTBweCk7IC0+IDEwXG4qL1xuXG5AZnVuY3Rpb24gc3RyaXAtdW5pdHMoJHZhbHVlKSB7XG4gICAgQHJldHVybiBtYXRoLmRpdigkdmFsdWUsICR2YWx1ZSAqIDAgKyAxKTtcbn1cblxuLyoqIEluIFNBU1Mgd2UgY2FuIG9ubHkgb25jZSBzZXQgYSB2YWx1ZSB0byB2YXJpYWJsZSB3aXRoIGZsYWcgIWRlZmF1bHQsIGFsbCBvdGhlcnMgdmFsdWVzIHdpbGwgYmUgaWdub3JlZC5cbiAgICBUaGUgdmFyaWFibGUgbXVzdCBiZSBkZWNsYXJlZC5cbiAgICBAcmV0dXJuIG5ldyB2YWx1ZSB3aXRoIGZsYWcgIWRlZmF1bHQ7XG4gICAgVXNlOiAkY29tcG9uZW50LXZhcjogcmVzZXQtdmFyKCRjb21wb25lbnQtdmFyLCAxMCk7XG4qL1xuXG5AZnVuY3Rpb24gdXBkYXRlLWRlZmF1bHQoJHZhciwgJHZhbHVlOiBudWxsKSB7XG4gICAgJHZhcjogbnVsbDtcbiAgICAkdmFyOiAkdmFsdWUgIWRlZmF1bHQ7XG5cbiAgICBAcmV0dXJuICR2YXI7XG59XG5cbi8qKiBFeHRlbmRlZCBkZWZhdWx0IG1hcC1tZXJnZVxuICAgIE1lcmdlIHR3byBtYXBzIHRvZ2V0aGVyIGludG8gbmV3IG1hcCwgdy9vIG51bGwga2V5c1xuKi9cblxuQGZ1bmN0aW9uIG1hcC1tZXJnZS13by1udWxsKCRtYXAxLCAkbWFwMikge1xuICAgICRyZXN1bHQ6IG1hcC5tZXJnZSgkbWFwMSwgJG1hcDIpO1xuXG4gICAgQGVhY2ggJGtleSBpbiBtYXAua2V5cygkcmVzdWx0KSB7XG4gICAgICAgIEBpZiBub3QgbWFwLmdldCgkcmVzdWx0LCAka2V5KSB7XG4gICAgICAgICAgICAkcmVzdWx0OiBtYXAucmVtb3ZlKCRyZXN1bHQsICRrZXkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgQHJldHVybiAkcmVzdWx0O1xufVxuXG4vKiogTWVyZ2UgYnJlYWtwb2ludHNcbiAgICAkb2xkLWJyZWFrcG9pbnRzOiAoXG4gICAgICAgICdkZXNrdG9wJzogJyhtaW4td2lkdGg6IDExMDBweCknLFxuICAgICAgICAndGFibGV0JzogJyhtYXgtd2lkdGg6IDEwOTlweCApJ1xuICAgICk7XG4gICAgJG5ldy1icmVha3BvaW50czogKFxuICAgICAgICAnZGVza3RvcCc6ICcobWluLXdpZHRoOiAxMjAwcHgpJyxcbiAgICAgICAgJ3RhYmxldCc6IG51bGwsXG4gICAgICAgICdtb2JpbGUnOiAnKG1heC13aWR0aDogNjQwcHgpJ1xuICAgICk7XG4gICAgQHJldHVybiB0aGUgdmFsdWUgd2l0aCBhIG1lcmdlZCBicmVha3BvaW50cztcbiAgICAkYnJlYWtwb2ludHM6IChcbiAgICAgICAgJ2Rlc2t0b3AnJyhtaW4td2lkdGg6IDEyMDBweCknLFxuICAgICAgICAnbW9iaWxlJzogJyhtYXgtd2lkdGg6IDY0MHB4KSdcbiAgICApO1xuICAgIFVzZTogbWVyZ2UtYnJlYWtwb2ludHMoJG9sZC1icmVha3BvaW50cywgJG5ldy1icmVha3BvaW50cyk7XG4qL1xuXG5AZnVuY3Rpb24gbWVyZ2UtYnJlYWtwb2ludHMoJGJyZWFrcG9pbnRzMSwgJG5ld3MtYnJlYWtwb2ludDIpIHtcbiAgICBAcmV0dXJuIG1hcC1tZXJnZS13by1udWxsKCRicmVha3BvaW50czEsICRuZXdzLWJyZWFrcG9pbnQyKTtcbn1cblxuLyoqIEdldCBiYXNlIGJyZWFrcG9pbnQgbGlzdFxuICAgIEByZXR1cm4gdGhlIGxpc3Qgb2YgYmFzZSBicmVha3BvaW50cztcbiovXG5AZnVuY3Rpb24gZ2V0LWJyZWFrcG9pbnRzLWxpc3QoKSB7XG4gICAgJGJyZWFrcG9pbnRzLWxpc3Q6ICgpO1xuXG4gICAgQGVhY2ggJG5hbWUsICR2YWx1ZSBpbiAkYnJlYWtwb2ludHMge1xuICAgICAgICBAaWYgc3RyaW5nLmluZGV4KCRuYW1lLCAndGFibGV0JykgPT0gMSBvciBzdHJpbmcuaW5kZXgoJG5hbWUsICdtb2JpbGUnKSA9PSAxIHtcbiAgICAgICAgICAgICRicmVha3BvaW50cy1saXN0OiBsaXN0LmFwcGVuZCgkYnJlYWtwb2ludHMtbGlzdCwgJG5hbWUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgQHJldHVybiAkYnJlYWtwb2ludHMtbGlzdDtcbn1cblxuLyoqIEByZXR1cm4gbW9kaWZpZWQgc2VsZWN0b3JcbiAgICBVc2U6IG1vZGlmeS1zZWxlY3Rvcigkc2VsZWN0b3I6ICdhJywgJHBhcnQtYmVmb3JlOiAnfiAnKSA9PiAnfiBhJztcbiovXG5AZnVuY3Rpb24gbW9kaWZ5LXNlbGVjdG9yKCRzZWxlY3RvciwgJHBhcnQtYmVmb3JlOiBudWxsLCAkcGFydC1hZnRlcjogbnVsbCkge1xuICAgIEBpZiAoJHBhcnQtYmVmb3JlKSB7XG4gICAgICAgICRzZWxlY3RvcjogJHBhcnQtYmVmb3JlICsgJHNlbGVjdG9yO1xuICAgIH1cblxuICAgIEBpZiAoJHBhcnQtYWZ0ZXIpIHtcbiAgICAgICAgJHNlbGVjdG9yOiAkcGFydC1hZnRlciArICRzZWxlY3RvcjtcbiAgICB9XG5cbiAgICBAcmV0dXJuICRzZWxlY3Rvcjtcbn1cblxuLyoqIEByZXR1cm4gbW9kaWZpZWQgbGlzdCBvZiBzZWxlY3RvcnNcbiAgICBVc2U6IG1vZGlmeS1zZWxlY3RvcihzZWxlY3RvcnM6ICdhICwgYnV0dG9uJywgJHBhcnQtYmVmb3JlOiAnfiAnKSA9PiAnfiBhLCB+IGJ1dHRvbic7XG4qL1xuQGZ1bmN0aW9uIG1vZGlmeS1zZWxlY3RvcnMoJHNlbGVjdG9ycywgJHBhcnQtYmVmb3JlOiBudWxsLCAkcGFydC1hZnRlcjogbnVsbCkge1xuICAgIEBpZiAobWV0YS50eXBlLW9mKCRzZWxlY3RvcnMpICE9ICdsaXN0Jykge1xuICAgICAgICBAd2FybiAnJHNlbGVjdG9yczogI3skc2VsZWN0b3JzfSBtdXN0IGJlIGEgbGlzdCB0eXBlJztcbiAgICB9XG5cbiAgICAkbW9kaWZpZWQtc2VsZWN0b3JzOiAoKTtcbiAgICAkbGlzdC1zZXBhcmF0b3I6IGxpc3Quc2VwYXJhdG9yKCRzZWxlY3RvcnMpO1xuXG4gICAgQGVhY2ggJHNlbGVjdG9yIGluICRzZWxlY3RvcnMge1xuICAgICAgICAkbW9kaWZpZWQtc2VsZWN0b3JzOiBsaXN0LmFwcGVuZChcbiAgICAgICAgICAgICRtb2RpZmllZC1zZWxlY3RvcnMsXG4gICAgICAgICAgICBtb2RpZnktc2VsZWN0b3IoJHNlbGVjdG9yLCAkcGFydC1iZWZvcmUsICRwYXJ0LWFmdGVyKSxcbiAgICAgICAgICAgICRzZXBhcmF0b3I6ICRsaXN0LXNlcGFyYXRvclxuICAgICAgICApO1xuICAgIH1cblxuICAgIEByZXR1cm4gJG1vZGlmaWVkLXNlbGVjdG9ycztcbn1cblxuLyoqIEByZXR1cm4gdGhlIGxpc3Qgb2YgQ1NTIHNlbGVjdG9ycyBmb3IgSFRNTCBlbGVtZW50cyB0aGF0IGNhbiByZWNlaXZlIGZvY3VzXG4gICAgVXNlOiBmb250LWdldC1mb2N1c2FibGUtc2VsZWN0b3IoKSA9PiAnYVtocmVmXTpub3QoW3RhYmluZGV4PVwiLTFcIl0pLCBpbnB1dDpub3QoW2Rpc2FibGVkXSk6bm90KFt0YWJpbmRleD1cIi0xXCJdKSc7XG4qL1xuQGZ1bmN0aW9uIGdldC1mb2N1c2FibGUtc2VsZWN0b3JzKCR3aG9sZS1saXN0OiBmYWxzZSwgJHBhcnQtYmVmb3JlOiBudWxsLCAkcGFydC1hZnRlcjogbnVsbCkge1xuICAgICRiYXNlOiAoXG4gICAgICAgICdhW2hyZWZdJyxcbiAgICAgICAgJ2lucHV0Om5vdChbZGlzYWJsZWRdKScsXG4gICAgICAgICdzZWxlY3Q6bm90KFtkaXNhYmxlZF0pJyxcbiAgICAgICAgJ3RleHRhcmVhOm5vdChbZGlzYWJsZWRdKScsXG4gICAgICAgICdidXR0b246bm90KFtkaXNhYmxlZF0pJyxcbiAgICAgICAgJy5kcm9wZG93bi1tZW51JyxcbiAgICAgICAgJ1t0YWJpbmRleF0nXG4gICAgKTtcbiAgICAkbW9yZTogKFxuICAgICAgICAnYXJlYVtocmVmXScsXG4gICAgICAgICdpZnJhbWUnLFxuICAgICAgICAnW2NvbnRlbnRFZGl0YWJsZT10cnVlXSdcbiAgICApO1xuXG4gICAgQGlmICgkd2hvbGUtbGlzdCkge1xuICAgICAgICBAcmV0dXJuIG1vZGlmeS1zZWxlY3RvcnMoJGJhc2UsICRwYXJ0LWJlZm9yZSwgJHBhcnQtYWZ0ZXIpICsgbW9kaWZ5LXNlbGVjdG9ycygkbW9yZSwgJHBhcnQtYmVmb3JlLCAkcGFydC1hZnRlcik7XG4gICAgfSBAZWxzZSB7XG4gICAgICAgIEByZXR1cm4gbW9kaWZ5LXNlbGVjdG9ycygkYmFzZSwgJHBhcnQtYmVmb3JlLCAkcGFydC1hZnRlcik7XG4gICAgfVxufVxuIiwiLyogQHRoZW1lOiBkZWZhdWx0OyAqL1xuXG5AaW1wb3J0ICcuL3R5cG9ncmFwaHknO1xuQGltcG9ydCAnLi9zaXplcyc7XG5AaW1wb3J0ICcuL2NvbG9ycyc7XG5AaW1wb3J0ICcuL2JyZWFrcG9pbnRzJztcbiIsIi8qIEB0aGVtZTogZGVmYXVsdDsgKi9cblxuQHVzZSAnc2FzczptZXRhJztcbkB1c2UgJ3Nhc3M6bWFwJztcblxuLy8gTk9USUNFIVxuLy8gYWRkICFkZWZhdWx0IHRvIGVhY2ggdmFyaWFibGU7XG4vLyAkdGhlbWUtZm9udHM6IG1hcF9tZXJnZSgkdGhlbWUtZm9udHMsICR0aGVtZS1kZWZhdWx0LWZvbnRzKTsgPT4gJHRoZW1lLWZvbnRzO1xuJGNoYXJzZXQ6ICdVVEYtOCcgIWRlZmF1bHQ7XG5cbi8qKiBMaXN0IHdpdGggdGhlbWUgZm9udHNcbiAgICdtYWluJzogKFxuICAgICAgICAnZmFtaWx5JzogJ0FyaWFsJyxcbiAgICAgICAgJ3ZhcmlhbnRzJzogKFxuICAgICAgICAgICAgKFxuICAgICAgICAgICAgICAgICdwYXRoJzogJycsXG4gICAgICAgICAgICAgICAgJ3dlaWdodCc6IDYwMCxcbiAgICAgICAgICAgICAgICAnc3R5bGUnOiBub3JtYWxcbiAgICAgICAgICAgIClcbiAgICAgICAgKSxcbiAgICAgICAgJ2Zvcm1hdHMnOiAoJ3dvZmYyJylcbiAgICApXG4gKi9cbiR0aGVtZS1mb250czogKCkgIWRlZmF1bHQ7XG5cbkBpZiAobWV0YS52YXJpYWJsZS1leGlzdHMoJ2dsb2JhbC10aGVtZS1mb250cycpIGFuZCBtZXRhLnR5cGUtb2YoJGdsb2JhbC10aGVtZS1mb250cykgPT0gJ21hcCcpIHtcbiAgICAkdGhlbWUtZm9udHM6IG1hcC5kZWVwLW1lcmdlKCRnbG9iYWwtdGhlbWUtZm9udHMsICR0aGVtZS1mb250cyk7XG59XG5cbi8vIEZvbnRzIHdlaWdodHNcbiRmb250LXdlaWdodHM6IChcbiAgICAvLyBUaGluIChIYWlybGluZSlcbiAgICAndGhpbic6IDEwMCxcbiAgICAvLyBFeHRyYSBMaWdodCAoVWx0cmEgTGlnaHQpXG4gICAgJ2V4dHJhJzogMjAwLFxuICAgIC8vIExpZ2h0XG4gICAgJ2xpZ2h0JzogMzAwLFxuICAgIC8vIE5vcm1hbFxuICAgICdub3JtYWwnOiA0MDAsXG4gICAgLy8gTWVkaXVtXG4gICAgJ21lZGl1bSc6IDUwMCxcbiAgICAvLyBTZW1pIEJvbGQgKERlbWkgQm9sZClcbiAgICAnc2VtaS1ib2xkJzogNjAwLFxuICAgIC8vIEJvbGRcbiAgICAnYm9sZCc6IDcwMCxcbiAgICAvLyBFeHRyYSBCb2xkIChVbHRyYSBCb2xkKVxuICAgICdleHRyYS1ib2xkJzogODAwLFxuICAgIC8vIEJsYWNrIChIZWF2eSlcbiAgICAnYmxhY2snOiA5MDBcbikgIWRlZmF1bHQ7XG5cbi8vIEZvbnRzIGZhbWlsaWVzXG4kYmFzZS1mb250OiBnZXQtZm9udC1uYW1lKCdtYWluJyksIHNhbnMtc2VyaWYgIWRlZmF1bHQ7XG4kc2Vjb25kYXJ5LWZvbnQ6IGdldC1mb250LW5hbWUoJ3NlY29uZGFyeScpLCAndGltZXMgbmV3IHJvbWFuJywgc2VyaWYgIWRlZmF1bHQ7XG4kY29kZS1mb250OiBnZXQtZm9udC1uYW1lKCdjb2RlJyksICdjb3VyaWVyJywgbW9ub3NwYWNlICFkZWZhdWx0O1xuJGJhc2UtZm9udC1tYXNrZWQ6IGdldC1mb250LW5hbWUoJ29ubHktYnVsbGV0cycpLCAnaGVsdmV0aWNhJywgYXJpYWwsIHNhbnMtc2VyaWYgIWRlZmF1bHQ7XG5cbi8vIEZvbnRzIHNpemVzXG4kcm9vdC1mb250LXNpemU6IDE0cHggIWRlZmF1bHQ7XG4kYmFzZS1mb250LXNpemU6IDE0cHggIWRlZmF1bHQ7XG4kYmFzZS1mb250LXNpemUtLXhsYXJnZTogMThweCAhZGVmYXVsdDtcbiRiYXNlLWZvbnQtc2l6ZS0tbGFyZ2U6IDE2cHggIWRlZmF1bHQ7XG4kYmFzZS1mb250LXNpemUtLXM6IDEzcHggIWRlZmF1bHQ7XG4kYmFzZS1mb250LXNpemUtLXhzOiAxMnB4ICFkZWZhdWx0O1xuJGJhc2UtbGluZS1oZWlnaHQ6IDEuNSAhZGVmYXVsdDtcbiRiYXNlLWZvbnQtd2VpZ2h0OiBmb250LXdlaWdodCgnbm9ybWFsJykgIWRlZmF1bHQ7XG5cbi8vIEZvbnQgc21vb3RoaW5nXG4kZ2xvYmFsLWZvbnQtc21vb3RoaW5nOiB0cnVlICFkZWZhdWx0O1xuXG4vLyBPbGQgdmFyaWFibGVzXG5cbiRiYXNlLWZvbnQtc2l6ZS0tbTogMjBweCAhZGVmYXVsdDtcbiRiYXNlLWZvbnQtc2l6ZS0tbDogMjNweCAhZGVmYXVsdDtcbiRiYXNlLWZvbnQtc2l6ZS0teGw6IDI2cHggIWRlZmF1bHQ7XG4kYmFzZS1saW5lLWhlaWdodC0tczogMS4yNSAhZGVmYXVsdDtcbiIsIi8qIEB0aGVtZTogZGVmYXVsdDsgKi9cblxuJHNpdGUtd2lkdGg6IDE5MjBweCAhZGVmYXVsdDtcblxuLy8gQE5vdGljZSEgTmFtZWQgQnJlYWtwb2ludHMgaGF2ZSBiZWVuIGNob3NlbiBkdWUgdG8gaXRzIG5hbWVzIGFyZSB1c2VkIGluIGNvbmZpZ3VyYXRpb24gZm9yIG1lbnUsIEdyYXBlc0pTLCBWaWV3cG9ydCBtYW5hZ2VyLCBldGMuXG4kYnJlYWtwb2ludC1kZXNrdG9wOiAxMzY2cHggIWRlZmF1bHQ7XG4kYnJlYWtwb2ludC1kZXNrdG9wLWJpZzogMTYwMHB4ICFkZWZhdWx0O1xuJGJyZWFrcG9pbnQtZGVza3RvcC1zbWFsbDogMTI4MHB4ICFkZWZhdWx0O1xuJGJyZWFrcG9pbnQtdGFibGV0OiAkYnJlYWtwb2ludC1kZXNrdG9wLXNtYWxsIC0gMXB4ICFkZWZhdWx0O1xuJGJyZWFrcG9pbnQtdGFibGV0LXNtYWxsOiA5OTJweCAhZGVmYXVsdDtcbiRicmVha3BvaW50LW1vYmlsZS1iaWc6IDc2N3B4ICFkZWZhdWx0O1xuJGJyZWFrcG9pbnQtbW9iaWxlLWxhbmRzY2FwZTogNjQwcHggIWRlZmF1bHQ7XG4vLyBpUGhvbmUgMTUgUHJvIE1heCAoNDMwICogOTMyKVxuJGJyZWFrcG9pbnQtbW9iaWxlOiA0MzBweCAhZGVmYXVsdDtcblxuLy8gU3BhY2luZyBTeXN0ZW1cbiRiYXNlLXNwYWNpbmc6IDE2cHggIWRlZmF1bHQ7XG5cbiRzcGFjaW5nLW11bHRpcGxpZXJzOiAoXG4gICAgeHM6IC4yNSxcbiAgICBzbTogLjUsXG4gICAgeG1kOiAuNjI1LFxuICAgIG1kOiAuNzUsXG4gICAgYmFzZTogMSxcbiAgICBsZzogMS41LFxuICAgIHhsOiAyLFxuICAgIHh4bDogMi41LFxuICAgIHh4eGw6IDMsXG4gICAgaHVnZTogMy41LFxuICAgIG1hc3NpdmU6IDQsXG4gICAgdGl0YW5pYzogNC41LFxuICAgIGdpZ2FudGljOiA1LFxuICAgIGVub3Jtb3VzOiA1LjUsXG4gICAgY29sb3NzYWw6IDYsXG4gICAgaW1tZW5zZTogNy41XG4pICFkZWZhdWx0O1xuIiwiLyogQHRoZW1lOiBkZWZhdWx0OyAqL1xuXG4kY29sb3ItcGFsZXR0ZTogKFxuICAgICdwcmltYXJ5JzogKFxuICAgICAgICAnbWFpbic6ICMwNTc4ODgsXG4gICAgICAgICdob3Zlcic6ICMwNzU5NjMsXG4gICAgICAgICdhY3RpdmUnOiAjMDU0NDRkLFxuICAgICAgICAnZGlzYWJsZWQnOiAjN2Q5OTllLFxuICAgICAgICAnbGlnaHQnOiAjZThmY2ZmXG4gICAgKSxcbiAgICAnc2Vjb25kYXJ5JzogKFxuICAgICAgICAnYzEnOiAjZmNiYTFlLFxuICAgICAgICAnYzInOiAjZjc5NDFkLFxuICAgICAgICAnYzMnOiAjNmU5OGRjLFxuICAgICAgICAnYzQnOiAjN2VhNmE0LFxuICAgICAgICAnYzUnOiAjMTk3YjMwLFxuICAgICAgICAnYzYnOiAjMTlhYjIyLFxuICAgICAgICAnc2FsZSc6ICM5YzAwNjdcbiAgICApLFxuICAgICduZXV0cmFsJzogKFxuICAgICAgICAnd2hpdGUtMTAwJzogI2ZmZixcbiAgICAgICAgJ3doaXRlLTUwJzogcmdiKDI1NSAyNTUgMjU1IC8gLjUpLFxuICAgICAgICAnd2hpdGUtMzAnOiByZ2IoMjU1IDI1NSAyNTUgLyAuMyksXG4gICAgICAgICd3aGl0ZS0xNSc6IHJnYigyNTUgMjU1IDI1NSAvIC4xNSksXG4gICAgICAgICdncmV5MSc6ICNmMGYzZjUsXG4gICAgICAgICdncmV5Mic6ICNkNGRjZGQsXG4gICAgICAgICdncmV5Myc6ICM4YTk0YTgsXG4gICAgICAgICdkYXJrJzogIzAwMjQzNCxcbiAgICAgICAgJ2ZvY3VzJzogIzFhNjlmZVxuICAgICksXG4gICAgJ3RleHQnOiAoXG4gICAgICAgICdwcmltYXJ5JzogIzAwMjQzNCxcbiAgICAgICAgJ3NlY29uZGFyeSc6ICM0NTYwNmUsXG4gICAgICAgICdkaXNhYmxlZCc6ICM2NzZjNzQsXG4gICAgICAgICdpbnZlcnNlJzogI2ZmZixcbiAgICAgICAgJ2ludmVyc2UtNzAnOiByZ2IoMjU1IDI1NSAyNTUgLyAuNyksXG4gICAgICAgICdsaW5rJzogIzE2NDJlNCxcbiAgICAgICAgJ2xpbmstaG92ZXInOiAjMGQ3N2Q2LFxuICAgICAgICAnbGluay1ob3Zlci1vbi1kYXJrJzogIzRjYjRmZVxuICAgICksXG4gICAgJ2Rlc3RydWN0aXZlJzogKFxuICAgICAgICAnbGlnaHQnOiAjZmZlYmVkLFxuICAgICAgICAnbGlnaHQtb24tZGFyayc6IHJnYigyNTUgMTA3IDEwNyAvIC4zKSxcbiAgICAgICAgJ2Jhc2UnOiAjZGUwYjA3LFxuICAgICAgICAnbWFpbic6ICNiNTA0MDAsXG4gICAgICAgICdtYWluLW9uLWRhcmsnOiAjZmY2YjZiLFxuICAgICAgICAnZGFyayc6ICM5YzAwMDAsXG4gICAgICAgICdkaXNhYmxlZCc6ICNkMTc1NzNcbiAgICApLFxuICAgICdzdWNjZXNzJzogKFxuICAgICAgICAnbGlnaHQnOiAjZTJmYmU5LFxuICAgICAgICAnZGFyayc6ICMwMDVlMWZcbiAgICApLFxuICAgICd3YXJuaW5nJzogKFxuICAgICAgICAnbGlnaHQnOiAjZmZmN2QxLFxuICAgICAgICAnYmFzZSc6ICNmMTk1MDAsXG4gICAgICAgICdkYXJrJzogIzhmMzcwMFxuICAgICksXG4gICAgJ2luZm8nOiAoXG4gICAgICAgICdsaWdodCc6ICNlZGY1ZmYsXG4gICAgICAgICdkYXJrJzogIzE0M2RkNFxuICAgIClcbikgIWRlZmF1bHQ7XG4iLCIvKiBAdGhlbWU6IGRlZmF1bHQ7ICovXG5cbi8vIE5hdGl2ZSBicmVha3BvaW50cztcbi8vIEBOb3RpY2UhIFRoZXNlIHZhbHVlcyBjb250YWlucyBpbiAkb3JvLWJyZWFrcG9pbnRzIGFycmF5IHdpbGwgYmUgc3luY2hyb25pemVkIHdpdGggYHZpZXdwb3J0TWFuYWdlcmBcblxuJG9yby1icmVha3BvaW50czogKFxuICAgICdkZXNrdG9wJzpcbiAgICAgICAgJyhtaW4td2lkdGg6ICN7JGJyZWFrcG9pbnQtZGVza3RvcH0pJyxcbiAgICAnZGVza3RvcC1iaWcnOlxuICAgICAgICAnKG1pbi13aWR0aDogI3skYnJlYWtwb2ludC1kZXNrdG9wLWJpZ30pJyxcbiAgICAnZGVza3RvcC1zbWFsbCc6XG4gICAgICAgICcobWluLXdpZHRoOiAjeyRicmVha3BvaW50LWRlc2t0b3Atc21hbGx9KScsXG4gICAgJ3RhYmxldC1iaWcnOlxuICAgICAgICAnKG1heC13aWR0aDogI3skYnJlYWtwb2ludC1kZXNrdG9wfSknLFxuICAgICd0YWJsZXQnOlxuICAgICAgICAnKG1heC13aWR0aDogI3skYnJlYWtwb2ludC10YWJsZXR9KScsXG4gICAgJ3N0cmljdC10YWJsZXQnOlxuICAgICAgICAnKG1heC13aWR0aDogI3skYnJlYWtwb2ludC10YWJsZXR9KSBhbmQgKG1pbi13aWR0aDogI3skYnJlYWtwb2ludC10YWJsZXQtc21hbGwgKyAxfSknLFxuICAgICd0YWJsZXQtc21hbGwnOiAnKG1heC13aWR0aDogJyArICRicmVha3BvaW50LXRhYmxldC1zbWFsbCArICcpJyxcbiAgICAnc3RyaWN0LXRhYmxldC1zbWFsbCc6XG4gICAgICAgICcobWF4LXdpZHRoOiAjeyRicmVha3BvaW50LXRhYmxldC1zbWFsbH0pIGFuZCAobWluLXdpZHRoOiAjeyRicmVha3BvaW50LW1vYmlsZS1sYW5kc2NhcGUgKyAxfSknLFxuICAgICdtb2JpbGUtYmlnLW1pbic6XG4gICAgICAgICcobWluLXdpZHRoOiAjeyRicmVha3BvaW50LW1vYmlsZS1iaWd9KScsXG4gICAgJ21vYmlsZS1iaWcnOlxuICAgICAgICAnKG1heC13aWR0aDogI3skYnJlYWtwb2ludC1tb2JpbGUtYmlnfSknLFxuICAgICdzdHJpY3QtbW9iaWxlLWJpZyc6XG4gICAgICAgICcobWF4LXdpZHRoOiAjeyRicmVha3BvaW50LW1vYmlsZS1iaWd9KSBhbmQgKG1pbi13aWR0aDogI3skYnJlYWtwb2ludC1tb2JpbGUtbGFuZHNjYXBlICsgMX0pJyxcbiAgICAnbW9iaWxlLWxhbmRzY2FwZS1taW4nOlxuICAgICAgICAnKG1pbi13aWR0aDogI3skYnJlYWtwb2ludC1tb2JpbGUtbGFuZHNjYXBlICsgMX0pJyxcbiAgICAnbW9iaWxlLWxhbmRzY2FwZSc6XG4gICAgICAgICcobWF4LXdpZHRoOiAjeyRicmVha3BvaW50LW1vYmlsZS1sYW5kc2NhcGV9KScsXG4gICAgJ3N0cmljdC1tb2JpbGUtbGFuZHNjYXBlJzpcbiAgICAgICAgJyhtYXgtd2lkdGg6ICN7JGJyZWFrcG9pbnQtbW9iaWxlLWxhbmRzY2FwZX0pIGFuZCAobWluLXdpZHRoOiAjeyRicmVha3BvaW50LW1vYmlsZSArIDF9KScsXG4gICAgJ21vYmlsZSc6XG4gICAgICAgICcobWF4LXdpZHRoOiAjeyRicmVha3BvaW50LW1vYmlsZX0pJyxcbiAgICAncHJpbnQnOiAncHJpbnQnLFxuICAgICdwb3B1cC1nYWxsZXJ5LXRhYmxldCc6XG4gICAgICAgICcobWF4LWhlaWdodDogNzMwcHgpLCAobWF4LXdpZHRoOiAjeyRicmVha3BvaW50LXRhYmxldC1zbWFsbH0pJyxcbiAgICAnbWVnYS1tZW51LXdpZGUnOlxuICAgICAgICAnKG1pbi13aWR0aDogI3skYnJlYWtwb2ludC1tb2JpbGUtYmlnICsgMX0pJ1xuKTtcblxuLy8gVmFyaWFibGUgZm9yIGV4dGVuZCBuYXRpdmUgYnJlYWtwb2ludHMgaXMgZW1wdHkgYnkgZGVmYXVsdDtcbiRjdXN0b20tYnJlYWtwb2ludHM6ICgpICFkZWZhdWx0O1xuXG4kYnJlYWtwb2ludHM6IG1lcmdlLWJyZWFrcG9pbnRzKCRvcm8tYnJlYWtwb2ludHMsICRjdXN0b20tYnJlYWtwb2ludHMpICFkZWZhdWx0O1xuIiwiLyogQHRoZW1lOiBkZWZhdWx0OyAqL1xuXG5AaW1wb3J0ICcuL21peGlucy9hZnRlcic7XG5AaW1wb3J0ICcuL21peGlucy9lbGxpcHNpcyc7XG5AaW1wb3J0ICcuL21peGlucy9jbGVhcmZpeCc7XG5AaW1wb3J0ICcuL21peGlucy9saXN0LW5vcm1hbGl6ZSc7XG5AaW1wb3J0ICcuL21peGlucy9icmVha3BvaW50JztcbkBpbXBvcnQgJy4vbWl4aW5zL2ZvbnQtZmFjZSc7XG5AaW1wb3J0ICcuL21peGlucy9mb250LXNtb290aGluZyc7XG5AaW1wb3J0ICcuL21peGlucy9vbmx5LWRlc2t0b3AnO1xuQGltcG9ydCAnLi9taXhpbnMvb25seS1tb2JpbGUnO1xuQGltcG9ydCAnLi9taXhpbnMvZnVsbHNjcmVlbi1tb2RlJztcbkBpbXBvcnQgJy4vbWl4aW5zL2Rpc2FibGUtc2VhcmNoLXN0eWxlcyc7XG5AaW1wb3J0ICcuL21peGlucy9hc3BlY3QtcmF0aW8nO1xuQGltcG9ydCAnLi9taXhpbnMvZWxlbWVudC1zdGF0ZSc7XG5AaW1wb3J0ICcuL21peGlucy9zYWZlLWFyZWEtb2Zmc2V0JztcbkBpbXBvcnQgJy4vbWl4aW5zL2NhcmV0JztcbkBpbXBvcnQgJy4vbWl4aW5zL2JvcmRlcic7XG5AaW1wb3J0ICcuL21peGlucy9uYXYtdGFicyc7XG5AaW1wb3J0ICcuL21peGlucy9saXN0LXNlcGFyYXRvcic7XG5AaW1wb3J0ICcuL21peGlucy9ibG9jay1zdWJzdHJhdGUnO1xuQGltcG9ydCAnLi9taXhpbnMva2V5ZnJhbWUnO1xuQGltcG9ydCAnLi9taXhpbnMvZmxleGlibGUtYXJyb3cnO1xuQGltcG9ydCAnLi9taXhpbnMvbGluZS1jbGFtcCc7XG5AaW1wb3J0ICcuL3NrZWxldG9uL3NrZWxldG9uJztcbkBpbXBvcnQgJy4vbWl4aW5zL3RhYmxlLWJhc2UnO1xuQGltcG9ydCAnLi9taXhpbnMvbW9zYWljLWdyaWQnO1xuQGltcG9ydCAnLi9taXhpbnMvZ3JpZC1jZWxsLWFsaWduJztcbkBpbXBvcnQgJy4vbWl4aW5zL2JhZGdlJztcbkBpbXBvcnQgJy4vbWl4aW5zL2luZGljYXRvcic7XG5AaW1wb3J0ICcuL21peGlucy9iYXItc2VwYXJhdG9yJztcbkBpbXBvcnQgJy4vbWl4aW5zL3NsaWNrLWFycm93JztcbkBpbXBvcnQgJy4vbWl4aW5zL3NsaWNrLWRvdHMnO1xuQGltcG9ydCAnLi9taXhpbnMvZGlyZWN0LWxpbmsnO1xuQGltcG9ydCAnLi9taXhpbnMvbG9hZGluZy1ibHVyJztcbkBpbXBvcnQgJy4vbWl4aW5zL2xvYWRpbmctYmx1ci1vdmVybGF5JztcbkBpbXBvcnQgJy4vbWl4aW5zL3V0aWxzJztcbiIsIi8qIEB0aGVtZTogZGVmYXVsdDsgKi9cblxuQG1peGluIGFmdGVyKCkge1xuICAgIGNvbnRlbnQ6ICcnO1xuXG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuXG4gICAgZGlzcGxheTogYmxvY2s7XG59XG4iLCIvKiBAdGhlbWU6IGRlZmF1bHQ7ICovXG5cbi8vIEVsbGlwc2lzIHRleHRcbkBtaXhpbiBlbGxpcHNpcygpIHtcbiAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG59XG4iLCIvKiBAdGhlbWU6IGRlZmF1bHQ7ICovXG5cbi8vIEhlbHBlciB0byBjbGVhciBpbm5lciBmbG9hdHNcbkBtaXhpbiBjbGVhcmZpeCgpIHtcbiAgICAmOjphZnRlciB7XG4gICAgICAgIGNvbnRlbnQ6ICcnO1xuXG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuXG4gICAgICAgIGNsZWFyOiBib3RoO1xuICAgIH1cbn1cbiIsIi8qIEB0aGVtZTogZGVmYXVsdDsgKi9cblxuLy8gSGVscGVyIGZvciByZXNldCBkZWZhdWx0IHN0eWxlcyBvZiBsaXN0c1xuQG1peGluIGxpc3Qtbm9ybWFsaXplKCkge1xuICAgIGxpc3Qtc3R5bGU6IG5vbmU7XG4gICAgbWFyZ2luOiAwO1xuICAgIHBhZGRpbmc6IDA7XG59XG4iLCIvKiBAdGhlbWU6IGRlZmF1bHQ7ICovXG5cbkB1c2UgJ3Nhc3M6bWFwJztcbkB1c2UgJ3Nhc3M6bGlzdCc7XG4vKiogVXNlOiBAaW5jbHVkZSBicmVha3BvaW50KCdkZXNrdG9wJykge1xuICAgICAgICBjb250ZW50XG4gICAgfVxuKi9cbkBtaXhpbiBicmVha3BvaW50KCR0eXBlKSB7XG4gICAgLy8gJGJyZWFrcG9pbnRzIC0gZ2xvYmFsIHZhcmlhYmxlO1xuXG4gICAgQGlmIChsaXN0Lmxlbmd0aCgkYnJlYWtwb2ludHMpID4gMCkge1xuICAgICAgICBAaWYgKG1hcC5oYXMta2V5KCRicmVha3BvaW50cywgJHR5cGUpIGFuZCBtYXAuZ2V0KCRicmVha3BvaW50cywgJHR5cGUpKSB7XG4gICAgICAgICAgICBAbWVkaWEgI3ttYXAuZ2V0KCRicmVha3BvaW50cywgJHR5cGUpfSB7XG4gICAgICAgICAgICAgICAgQGNvbnRlbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgQHdhcm4gJ0Fic2VudCBicmVha3BvaW50IHR5cGU6ICcgKyAkdHlwZTtcbiAgICAgICAgfVxuICAgIH1cbn1cbiIsIi8qIEB0aGVtZTogZGVmYXVsdDsgKi9cblxuQHVzZSAnc2FzczptZXRhJztcbkB1c2UgJ3Nhc3M6bGlzdCc7XG5AdXNlICdzYXNzOm1hcCc7XG5cbi8vIFVzZTogQGluY2x1ZGUgZm9udC1mYWNlKCdQb3BwaW5zJywgJy4uL2ZvbnRzL3BvcHBpbnMvUG9wcGlucy1JdGFsaWMtc3Vic2V0JywgNDAwLCBub3JtYWwsICgnd29mZicpLCBzd2FwKTtcbkBtaXhpbiBmb250LWZhY2UoXG4gICAgJGZvbnQtZmFtaWx5LFxuICAgICRmaWxlLXBhdGgsXG4gICAgJGZvbnQtd2VpZ2h0LFxuICAgICRmb250LXN0eWxlLFxuICAgICRmb250LWZvcm1hdHMsXG4gICAgJGZvbnQtZGlzcGxheTogc3dhcCxcbiAgICAkZm9udC11bmljb2RlLXJhbmdlOiBudWxsXG4pIHtcbiAgICBAZm9udC1mYWNlIHtcbiAgICAgICAgZm9udC1mYW1pbHk6ICRmb250LWZhbWlseTtcblxuICAgICAgICBAaWYgKCRmb250LWZvcm1hdHMpIHtcbiAgICAgICAgICAgICRzcmM6IG51bGw7XG4gICAgICAgICAgICAkdXJsOiBudWxsO1xuXG4gICAgICAgICAgICBAZWFjaCAkZm9udC1mb3JtYXQgaW4gJGZvbnQtZm9ybWF0cyB7XG4gICAgICAgICAgICAgICAgJGk6IGxpc3QuaW5kZXgoJGZvbnQtZm9ybWF0cywgJGZvbnQtZm9ybWF0KTtcblxuICAgICAgICAgICAgICAgIEBpZiAoJGZvbnQtZm9ybWF0ID09ICd0dGYnKSB7XG4gICAgICAgICAgICAgICAgICAgICR1cmw6IHVybCgnI3skZmlsZS1wYXRofS4jeyRmb250LWZvcm1hdH0nKSBmb3JtYXQoJ3RydWV0eXBlJyk7XG4gICAgICAgICAgICAgICAgfSBAZWxzZSBpZiAoJGZvbnQtZm9ybWF0ID09ICdzdmcnKSB7XG4gICAgICAgICAgICAgICAgICAgICR1cmw6IHVybCgnI3skZmlsZS1wYXRofS4jeyRmb250LWZvcm1hdH0jI3skZm9udC1mYW1pbHl9JykgZm9ybWF0KCcjeyRmb250LWZvcm1hdH0nKTtcbiAgICAgICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgJHVybDogdXJsKCcjeyRmaWxlLXBhdGh9LiN7JGZvbnQtZm9ybWF0fScpIGZvcm1hdCgnI3skZm9udC1mb3JtYXR9Jyk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgQGlmICgkaSA9PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgICRzcmM6ICR1cmw7XG4gICAgICAgICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICRzcmM6ICRzcmMjeycsICd9JHVybDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHNyYzogJHNyYztcbiAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICBzcmM6IHVybCgnI3skZmlsZS1wYXRofS53b2ZmJykgZm9ybWF0KCd3b2ZmJyk7XG5cbiAgICAgICAgICAgIEB3YXJuIFwiVGhlICRmb250LWZvcm1hdHMgYXJndW1lbnQgZG9lc24ndCBleGlzdFwiO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9udC13ZWlnaHQ6ICRmb250LXdlaWdodDtcbiAgICAgICAgZm9udC1zdHlsZTogJGZvbnQtc3R5bGU7XG4gICAgICAgIGZvbnQtZGlzcGxheTogJGZvbnQtZGlzcGxheTtcbiAgICAgICAgdW5pY29kZS1yYW5nZTogJGZvbnQtdW5pY29kZS1yYW5nZTtcbiAgICB9XG59XG5cbi8vIFBhcnNlIGxpc3Qgd2l0aCAkZm9udHMgYW5kIGNhbGwgTWl4aW4gZm9udC1mYWNlKCk7XG4vLyAkZm9udHM6IChcbi8vICAgICAnbWFpbic6IChcbi8vICAgICAgICAgJ2ZhbWlseSc6ICdUZXN0MScsXG4vLyAgICAgICAgICd2YXJpYW50cyc6IChcbi8vICAgICAgICAgICAgIChcbi8vICAgICAgICAgICAgICAgICAncGF0aCc6ICcuLi4nLFxuLy8gICAgICAgICAgICAgICAgICd3ZWlnaHQnOiBub3JtYWwsXG4vLyAgICAgICAgICAgICAgICAgJ3N0eWxlJzogbm9ybWFsXG4vLyAgICAgICAgICAgICApLFxuLy8gICAgICAgICAgICAgKFxuLy8gICAgICAgICAgICAgICAgICdwYXRoJzogJy4uJyxcbi8vICAgICAgICAgICAgICAgICAnd2VpZ2h0JzogNzAwLFxuLy8gICAgICAgICAgICAgICAgICdzdHlsZSc6IG5vcm1hbFxuLy8gICAgICAgICAgICAgKVxuLy8gICAgICAgICApLFxuLy8gICAgICAgICAnZm9ybWF0cyc6ICgnd29mZjInLCAnd29mZicsICd0dGYnLCAnZW90JywgJ3N2ZycpIC8vIEFkZCBvbmx5IG5lZWRlZCBmb3JtYXRzXG4vLyAgICAgKSxcbi8vICAgICAnc2Vjb25kYXJ5JzogKFxuLy8gICAgICAgICAnZmFtaWx5JzogJ1Rlc3QyJyxcbi8vICAgICAgICAgJ3ZhcmlhbnRzJzogKFxuLy8gICAgICAgICAgICAgKFxuLy8gICAgICAgICAgICAgICAgICdwYXRoJzogJy4uLicsXG4vLyAgICAgICAgICAgICApXG4vLyAgICAgICAgICksXG4vLyAgICAgICAgICdmb3JtYXRzJzogKCd3b2ZmMicsICd3b2ZmJywgJ3R0ZicsICdlb3QnLCAnc3ZnJykgLy8gQWRkIG9ubHkgbmVlZGVkIGZvcm1hdHNcbi8vICAgICApXG4vLyApO1xuLy8gVXNlOiBAaW5jbHVkZSB1c2UtZm9udC1mYWNlKCRmb250cyk7XG5AbWl4aW4gaW5jbHVkZS1mb250LWZhY2UoXG4gICAgJGZvbnQtZmFtaWx5LFxuICAgICRmaWxlLXBhdGgsXG4gICAgJGZvbnQtd2VpZ2gsXG4gICAgJGZvbnQtc3R5bGUsXG4gICAgJGZvbnQtZm9ybWF0cyxcbiAgICAkZm9udC1kaXNwbGF5LFxuICAgICRmb250LXVuaWNvZGUtcmFuZ2Vcbikge1xuICAgIEBpZiAoJGZvbnQtZmFtaWx5IGFuZCAkZmlsZS1wYXRoKSB7XG4gICAgICAgIC8vIENhbGxpbmcgbWl4aW4gZm9udC1mYWNlKGZhbWlseSwgcGF0aCwgJHdlaWdoLCBzdHlsZSk7XG4gICAgICAgIEBpbmNsdWRlIGZvbnQtZmFjZShcbiAgICAgICAgICAgICRmb250LWZhbWlseSxcbiAgICAgICAgICAgICRmaWxlLXBhdGgsXG4gICAgICAgICAgICAkZm9udC13ZWlnaCxcbiAgICAgICAgICAgICRmb250LXN0eWxlLFxuICAgICAgICAgICAgJGZvbnQtZm9ybWF0cyxcbiAgICAgICAgICAgICRmb250LWRpc3BsYXksXG4gICAgICAgICAgICAkZm9udC11bmljb2RlLXJhbmdlXG4gICAgICAgICk7XG4gICAgfSBAZWxzZSB7XG4gICAgICAgIEB3YXJuICdBYnNlbnQgZmFtaWx5IG9yIHBhdGgga2V5cyBpbiBhIGxpc3QuJztcbiAgICB9XG59XG5cbkBtaXhpbiB1c2UtZm9udC1mYWNlKCRmb250czogKCkpIHtcbiAgICAvLyBJdGVyYXRlIGluZGV4O1xuICAgICRmb250LWluZGV4OiAwO1xuXG4gICAgLy8gTGlzdCB3aXRoIHNlY3Rpb24ga2V5c1xuICAgIC8vICgnbWFpbicsICdzZWNvbmRhcnknLCAnaWNvbicpXG4gICAgJGZvbnQtbmFtZXM6IG1hcF9rZXlzKCRmb250cyk7XG5cbiAgICBAaWYgKGxpc3QubGVuZ3RoKCRmb250cykgPj0gMSkge1xuICAgICAgICBAZWFjaCAkZm9udCBpbiAkZm9udHMge1xuICAgICAgICAgICAgJGZvbnQtaW5kZXg6ICRmb250LWluZGV4ICsgMTtcblxuICAgICAgICAgICAgLy8gSXRlcmF0ZSBzZWN0aW9uIG5hbWVcbiAgICAgICAgICAgIC8vICdtYWluJyBvciAnc2Vjb25kYXJ5JyBvciAnaWNvbicgb3IgJy4uLidcbiAgICAgICAgICAgICRjdXJyZW50LXNlY3Rpb24tbmFtZTogbGlzdC5udGgoJGZvbnQtbmFtZXMsICRmb250LWluZGV4KTtcblxuICAgICAgICAgICAgLy8gSXRlcmF0ZSBzZWN0aW9uXG4gICAgICAgICAgICAvLyAoXG4gICAgICAgICAgICAvLyAgICAnZmFtaWx5JzogJy4uLicsXG4gICAgICAgICAgICAvLyAgICAndmFyaWFudHMnOiAoXG4gICAgICAgICAgICAvLyAgICAgICAoXG4gICAgICAgICAgICAvLyAgICAgICAgICAgICdwYXRoJzogJy4uLicsXG4gICAgICAgICAgICAvLyAgICAgICAgICAgICd3ZWlnaHQnOiBub3JtYWwsXG4gICAgICAgICAgICAvLyAgICAgICAgICAgICdzdHlsZSc6IG5vcm1hbFxuICAgICAgICAgICAgLy8gICAgICAgIClcbiAgICAgICAgICAgIC8vICAgICApXG4gICAgICAgICAgICAvLyAgKVxuICAgICAgICAgICAgJGN1cnJlbnQtc2VjdGlvbjogbWFwLmdldCgkZm9udHMsICRjdXJyZW50LXNlY3Rpb24tbmFtZSk7XG5cbiAgICAgICAgICAgIC8vIEl0ZXJhdGUgJ3ZhcmlhbnRzJyBzZWN0aW9uXG4gICAgICAgICAgICAvLyAoXG4gICAgICAgICAgICAvLyAgICAgKFxuICAgICAgICAgICAgLy8gICAgICAgICAncGF0aCc6ICcuLi4nLFxuICAgICAgICAgICAgLy8gICAgICAgICAnd2VpZ2h0Jzogbm9ybWFsLFxuICAgICAgICAgICAgLy8gICAgICAgICAnc3R5bGUnOiBub3JtYWxcbiAgICAgICAgICAgIC8vICAgICApXG4gICAgICAgICAgICAvLyApXG5cbiAgICAgICAgICAgIC8vIEl0ZXJhdGUgZm9udCB2YXJpYW50c1xuICAgICAgICAgICAgJGZvbnQtdmFyaWFudHM6IG1hcC5nZXQoJGN1cnJlbnQtc2VjdGlvbiwgJ3ZhcmlhbnRzJyk7XG5cbiAgICAgICAgICAgICRmb250LWZvcm1hdHM6IG1hcC5nZXQoJGN1cnJlbnQtc2VjdGlvbiwgJ2Zvcm1hdHMnKTtcblxuICAgICAgICAgICAgQGlmIChtZXRhLnR5cGUtb2YoJGZvbnQtdmFyaWFudHMpID09ICdtYXAnIG9yIG1ldGEudHlwZS1vZigkZm9udC12YXJpYW50cykgPT0gJ2xpc3QnKSB7XG4gICAgICAgICAgICAgICAgLy8gR2V0IEl0ZXJhdGUgc2VjdGlvbiAnZmFtaWx5J1xuICAgICAgICAgICAgICAgICRmb250LWZhbWlseTogbWFwLmdldCgkY3VycmVudC1zZWN0aW9uLCAnZmFtaWx5Jyk7XG5cbiAgICAgICAgICAgICAgICAvLyBEZWZhdWx0IHZhbHVlXG4gICAgICAgICAgICAgICAgJGZpbGUtcGF0aDogbnVsbDtcblxuICAgICAgICAgICAgICAgIC8vIERlZmF1bHQgdmFsdWVcbiAgICAgICAgICAgICAgICAkZm9udC13ZWlnaDogbnVsbDtcblxuICAgICAgICAgICAgICAgIC8vIERlZmF1bHQgdmFsdWVcbiAgICAgICAgICAgICAgICAkZm9udC1zdHlsZTogbnVsbDtcblxuICAgICAgICAgICAgICAgIEBpZiAobWV0YS50eXBlLW9mKCRmb250LXZhcmlhbnRzKSA9PSAnbWFwJykge1xuICAgICAgICAgICAgICAgICAgICAkZmlsZS1wYXRoOiBtYXAuZ2V0KCRmb250LXZhcmlhbnRzLCAncGF0aCcpO1xuICAgICAgICAgICAgICAgICAgICAkZm9udC1kaXNwbGF5OiBzd2FwO1xuICAgICAgICAgICAgICAgICAgICAkZm9udC11bmljb2RlLXJhbmdlOiBudWxsO1xuXG4gICAgICAgICAgICAgICAgICAgIC8vIFNlY3Rpb25zICd2YXJpYW50cycgYW5kICdzdHlsZScgbm90IHJlcXVpcmVkLlxuICAgICAgICAgICAgICAgICAgICAvLyBVcGRhdGUgb25seSBpZiBUaGV5IGFyZSBkZWZpbmVkIGluIGl0ZXJhdGUgIHNlY3Rpb24uXG4gICAgICAgICAgICAgICAgICAgIEBpZiAobWFwLmhhcy1rZXkoJGZvbnQtdmFyaWFudHMsICd3ZWlnaHQnKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgJGZvbnQtd2VpZ2g6IG1hcC5nZXQoJGZvbnQtdmFyaWFudHMsICd3ZWlnaHQnKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIEBpZiAobWFwLmhhcy1rZXkoJGZvbnQtdmFyaWFudHMsICdzdHlsZScpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAkZm9udC1zdHlsZTogbWFwLmdldCgkZm9udC12YXJpYW50cywgJ3N0eWxlJyk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBAaWYgKG1hcC5oYXMta2V5KCRmb250LXZhcmlhbnRzLCAndW5pY29kZS1yYW5nZScpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAkZm9udC11bmljb2RlLXJhbmdlOiBtYXBfZ2V0KCRmb250LXZhcmlhbnRzLCAndW5pY29kZS1yYW5nZScpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgQGlmIChtYXAuaGFzLWtleSgkZm9udC12YXJpYW50cywgJ2Rpc3BsYXknKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgJGZvbnQtZGlzcGxheTogbWFwLmdldCgkZm9udC12YXJpYW50cywgJ2Rpc3BsYXknKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIEBpbmNsdWRlIGluY2x1ZGUtZm9udC1mYWNlKFxuICAgICAgICAgICAgICAgICAgICAgICAgJGZvbnQtZmFtaWx5LFxuICAgICAgICAgICAgICAgICAgICAgICAgJGZpbGUtcGF0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgICRmb250LXdlaWdoLFxuICAgICAgICAgICAgICAgICAgICAgICAgJGZvbnQtc3R5bGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAkZm9udC1mb3JtYXRzLFxuICAgICAgICAgICAgICAgICAgICAgICAgJGZvbnQtZGlzcGxheSxcbiAgICAgICAgICAgICAgICAgICAgICAgICRmb250LXVuaWNvZGUtcmFuZ2VcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBAaWYgKG1ldGEudHlwZS1vZigkZm9udC12YXJpYW50cykgPT0gJ2xpc3QnKSB7XG4gICAgICAgICAgICAgICAgICAgIEBlYWNoICRmb250LXZhcmlhbnQgaW4gJGZvbnQtdmFyaWFudHMge1xuICAgICAgICAgICAgICAgICAgICAgICAgJGZpbGUtcGF0aDogbWFwLmdldCgkZm9udC12YXJpYW50LCAncGF0aCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgJGZvbnQtZGlzcGxheTogc3dhcDtcbiAgICAgICAgICAgICAgICAgICAgICAgICRmb250LXVuaWNvZGUtcmFuZ2U6IG51bGw7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNlY3Rpb25zICd2YXJpYW50cycgYW5kICdzdHlsZScgbm90IHJlcXVpcmVkLlxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gVXBkYXRlIG9ubHkgaWYgVGhleSBhcmUgZGVmaW5lZCBpbiBpdGVyYXRlICBzZWN0aW9uLlxuICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChtYXAuaGFzLWtleSgkZm9udC12YXJpYW50LCAnd2VpZ2h0JykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZm9udC13ZWlnaDogbWFwLmdldCgkZm9udC12YXJpYW50LCAnd2VpZ2h0Jyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAobWFwLmhhcy1rZXkoJGZvbnQtdmFyaWFudCwgJ3N0eWxlJykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZm9udC1zdHlsZTogbWFwLmdldCgkZm9udC12YXJpYW50LCAnc3R5bGUnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChtYXAuaGFzLWtleSgkZm9udC12YXJpYW50LCAndW5pY29kZS1yYW5nZScpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJGZvbnQtdW5pY29kZS1yYW5nZTogbWFwLmdldCgkZm9udC12YXJpYW50LCAndW5pY29kZS1yYW5nZScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBAaWYgKG1hcC5oYXMta2V5KCRmb250LXZhcmlhbnQsICdkaXNwbGF5JykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZm9udC1kaXNwbGF5OiBtYXAuZ2V0KCRmb250LXZhcmlhbnQsICdkaXNwbGF5Jyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIEBpbmNsdWRlIGluY2x1ZGUtZm9udC1mYWNlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICRmb250LWZhbWlseSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZmlsZS1wYXRoLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICRmb250LXdlaWdoLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICRmb250LXN0eWxlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICRmb250LWZvcm1hdHMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJGZvbnQtZGlzcGxheSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZm9udC11bmljb2RlLXJhbmdlXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICAgICAgQHdhcm4gJ1NlY3Rpb24gXCJ2YXJpYW50c1wiIHNob3VsZCBiZSBvZiBhIFwibWFwXCIgb3IgXCJsaXN0XCIgdHlwZS4nO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuIiwiLyogQHRoZW1lOiBkZWZhdWx0OyAqL1xuXG4vLyBVc2U6IEBpbmNsdWRlIGZvbnQtc21vb3RoaW5nKCk7XG4vLyBUaGlzIG1peGluIGVuYWJsZSBzbW9vdGhpbmcgZm9yIG1vcmUgYmV0dGVyIHJlbmRlcmluZyBvZiBmb250c1xuQG1peGluIGZvbnQtc21vb3RoaW5nKCkge1xuICAgIC13ZWJraXQtZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkO1xuICAgIC1tb3otb3N4LWZvbnQtc21vb3RoaW5nOiBncmF5c2NhbGU7XG59XG4iLCIvKiBAdGhlbWU6IGRlZmF1bHQ7ICovXG5cbi8vIENoZWNrIGRldmljZXMgb24gc2VydmVyLCBpZiBkZXZpY2UgaXMgZGVza3RvcCBhZGRlZCBjbGFzcyB0byBib2R5ICguZGVza3RvcC12ZXJzaW9uKVxuQG1peGluIG9ubHktZGVza3RvcCB7XG4gICAgQGluY2x1ZGUgYnJlYWtwb2ludCgnZGVza3RvcCcpIHtcbiAgICAgICAgLmRlc2t0b3AtdmVyc2lvbiB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH1cbn1cbiIsIi8qIEB0aGVtZTogZGVmYXVsdDsgKi9cblxuLy8gQ2hlY2sgZGV2aWNlcyBvbiBzZXJ2ZXIsIGlmIGRldmljZSBpcyBtb2JpbGUgYWRkZWQgY2xhc3MgdG8gYm9keSAoLm1vYmlsZS12ZXJzaW9uKVxuQG1peGluIG9ubHktbW9iaWxlIHtcbiAgICAubW9iaWxlLXZlcnNpb24ge1xuICAgICAgICBAY29udGVudDtcbiAgICB9XG59XG4iLCIvKiBAdGhlbWU6IGRlZmF1bHQ7ICovXG5cbi8vIFdyYXAgZWxlbWVudFxuQG1peGluIGZ1bGxzY3JlZW4tbW9kZSB7XG4gICAgQGF0LXJvb3Qge1xuICAgICAgICAuZnVsbHNjcmVlbi1tb2RlIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfVxufVxuIiwiLyogQHRoZW1lOiBkZWZhdWx0OyAqL1xuXG4vLyBEaXNhYmxlIHBsYXRmb3JtIHN0eWxlcyBmb3IgaW5wdXQgc2VhcmNoXG5AbWl4aW4gZGlzYWJsZS1zZWFyY2gtc3R5bGVzKCRpbnB1dCkge1xuICAgICN7JGlucHV0fTo6LXdlYmtpdC1zZWFyY2gtZGVjb3JhdGlvbixcbiAgICAjeyRpbnB1dH06Oi13ZWJraXQtc2VhcmNoLWNhbmNlbC1idXR0b24sXG4gICAgI3skaW5wdXR9Ojotd2Via2l0LXNlYXJjaC1yZXN1bHRzLWJ1dHRvbixcbiAgICAjeyRpbnB1dH06Oi13ZWJraXQtc2VhcmNoLXJlc3VsdHMtZGVjb3JhdGlvbiB7XG4gICAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgfVxufVxuIiwiLyogQHRoZW1lOiBkZWZhdWx0OyAqL1xuXG5AdXNlICdzYXNzOm1hdGgnO1xuXG4vLyBNYWludGFpbiBhbiBlbGVtZW50cyBhc3BlY3QgcmF0aW8sIGV2ZW4gYXMgaXQgc2NhbGVzXG4vLyAkd2lkdGggYW5kICRoZWlnaHQgYXJndW1lbnRzIGZvciBhc3BlY3QgcmF0aW9cbi8vICRjb250ZW50IHNlbGVjdG9yIGZvciBpbm5lciBjb250ZW50IGJsb2NrXG4vLyAkcG9zaXRpb24gW3N0YXRpY3xyZWxhdGl2ZXxhYnNvbHV0ZXxmaXhlZF1cbkBtaXhpbiBhc3BlY3QtcmF0aW8oJHdpZHRoOiAxLCAkaGVpZ2h0OiAxLCAkY29udGVudDogbnVsbCwgJHBvc2l0aW9uOiByZWxhdGl2ZSkge1xuICAgIHBvc2l0aW9uOiAkcG9zaXRpb247XG5cbiAgICAmOjpiZWZvcmUge1xuICAgICAgICBjb250ZW50OiAnJztcblxuICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgIHBhZGRpbmctdG9wOiBtYXRoLmRpdigkaGVpZ2h0LCAkd2lkdGgpICogMTAwJTtcbiAgICB9XG5cbiAgICBAaWYgJGNvbnRlbnQge1xuICAgICAgICA+ICN7JGNvbnRlbnR9IHtcbiAgICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgICAgIHRvcDogMDtcbiAgICAgICAgICAgIGxlZnQ6IDA7XG4gICAgICAgICAgICByaWdodDogMDtcbiAgICAgICAgICAgIGJvdHRvbTogMDtcbiAgICAgICAgfVxuICAgIH1cbn1cbiIsIi8qIEB0aGVtZTogZGVmYXVsdDsgKi9cblxuQG1peGluIGVsZW1lbnQtc3RhdGUoJHN0YXRlKSB7XG4gICAgQGlmICRzdGF0ZSA9PSAnYWN0aXZlJyB7XG4gICAgICAgICY6YWN0aXZlLFxuICAgICAgICAmLmFjdGl2ZSB7XG4gICAgICAgICAgICBAY29udGVudDtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgJHN0YXRlID09ICdob3Zlcicge1xuICAgICAgICAmOmhvdmVyIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkc3RhdGUgPT0gJ3Zpc2l0ZWQnIHtcbiAgICAgICAgJi0tdmlzaXRlZCxcbiAgICAgICAgJjp2aXNpdGVkIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkc3RhdGUgPT0gJ2ZvY3VzJyB7XG4gICAgICAgICYtLWZvY3VzLFxuICAgICAgICAmOmZvY3VzIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkc3RhdGUgPT0gJ3dhcm5pbmcnIHtcbiAgICAgICAgJi0td2FybmluZyxcbiAgICAgICAgJi53YXJuaW5nIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkc3RhdGUgPT0gJ3N1Y2Nlc3MnIHtcbiAgICAgICAgJi0tc3VjY2VzcyxcbiAgICAgICAgJi5zdWNjZXNzIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkc3RhdGUgPT0gJ2Vycm9yJyB7XG4gICAgICAgICYtLWVycm9yLFxuICAgICAgICAmLmVycm9yIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkc3RhdGUgPT0gJ2Rpc2FibGVkJyB7XG4gICAgICAgICYtLWRpc2FibGVkLFxuICAgICAgICAmLmRpc2FibGVkLFxuICAgICAgICAmOmRpc2FibGVkIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfSBAZWxzZSBpZiAkc3RhdGUgPT0gJ3JlYWRvbmx5JyB7XG4gICAgICAgICZbcmVhZG9ubHldIHtcbiAgICAgICAgICAgIEBjb250ZW50O1xuICAgICAgICB9XG4gICAgfVxufVxuIiwiLyogQHRoZW1lOiBkZWZhdWx0OyAqL1xuQHVzZSAnc2FzczpsaXN0JztcblxuLy8gU2V0IGlubmVyIG9mZnNldCBmcm9tIHRoZSBlZGdlcyB0byBpbmNsdWRlIHRoZSBzYWZlLWFyZWFcbi8vIGlQaG9uZSBYXG4vLyBVc2UgbGlrZSBuYXRpdmUgcGFkZGluZ1xuLy8gRXguIEBpbmNsdWRlIHNhZmUtYXJlYS1vZmZzZXQocGFkZGluZywgMTBweCAxNXB4KTtcbi8vIEV4LiBAaW5jbHVkZSBzYWZlLWFyZWEtb2Zmc2V0KG1hcmdpbiwgMTBweCAxNXB4IDIwcHgpO1xuQG1peGluIHNhZmUtYXJlYS1vZmZzZXQoJHByb3BlcnR5LCAkdmFsdWVzKSB7XG4gICAgQGlmICgkcHJvcGVydHkgIT0gbnVsbCBhbmQgJHZhbHVlcyAhPSBudWxsIGFuZCBsaXN0Lmxlbmd0aCgkdmFsdWVzKSA8PSA0KSB7XG4gICAgICAgICRzYWZlLWFyZWEtb2Zmc2V0LWxlZnQ6IDA7XG4gICAgICAgICRzYWZlLWFyZWEtb2Zmc2V0LXJpZ2h0OiAwO1xuXG4gICAgICAgICN7JHByb3BlcnR5fTogI3skdmFsdWVzfTtcblxuICAgICAgICBAaWYgKCRlbmFibGUtc2FmZS1hcmVhKSB7XG4gICAgICAgICAgICBAaWYgKGxpc3QubGVuZ3RoKCR2YWx1ZXMpID09IDEpIHtcbiAgICAgICAgICAgICAgICAkc2FmZS1hcmVhLW9mZnNldC1sZWZ0OiBsaXN0Lm50aCgkdmFsdWVzLCAxKTtcbiAgICAgICAgICAgICAgICAkc2FmZS1hcmVhLW9mZnNldC1yaWdodDogbGlzdC5udGgoJHZhbHVlcywgMSk7XG4gICAgICAgICAgICB9IEBlbHNlIGlmIChsaXN0Lmxlbmd0aCgkdmFsdWVzKSA9PSAyIG9yIGxpc3QubGVuZ3RoKCR2YWx1ZXMpID09IDMpIHtcbiAgICAgICAgICAgICAgICAkc2FmZS1hcmVhLW9mZnNldC1sZWZ0OiBsaXN0Lm50aCgkdmFsdWVzLCAyKTtcbiAgICAgICAgICAgICAgICAkc2FmZS1hcmVhLW9mZnNldC1yaWdodDogbGlzdC5udGgoJHZhbHVlcywgMik7XG4gICAgICAgICAgICB9IEBlbHNlIGlmIChsaXN0Lmxlbmd0aCgkdmFsdWVzKSA9PSA0KSB7XG4gICAgICAgICAgICAgICAgJHNhZmUtYXJlYS1vZmZzZXQtbGVmdDogbGlzdC5udGgoJHZhbHVlcywgNCk7XG4gICAgICAgICAgICAgICAgJHNhZmUtYXJlYS1vZmZzZXQtcmlnaHQ6IGxpc3QubnRoKCR2YWx1ZXMsIDIpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBAaW5jbHVkZSBzYWZlLWFyZWEtcHJvcGVydHktbGVmdCgjeyRwcm9wZXJ0eX0tbGVmdCwgJHNhZmUtYXJlYS1vZmZzZXQtbGVmdCwgZmFsc2UpO1xuICAgICAgICAgICAgQGluY2x1ZGUgc2FmZS1hcmVhLXByb3BlcnR5LXJpZ2h0KCN7JHByb3BlcnR5fS1yaWdodCwgJHNhZmUtYXJlYS1vZmZzZXQtcmlnaHQsIGZhbHNlKTtcbiAgICAgICAgfVxuICAgIH0gQGVsc2UgaWYgKGxpc3QubGVuZ3RoKCR2YWx1ZXMpID4gNCkge1xuICAgICAgICBAd2FybiAnSW5jb3JyZWN0IGFyZ3VtZW50cyBvZiBtaXhpbic7XG4gICAgfVxufVxuXG4vLyBTZXQgYW55IHByb3BlcnR5IHdpdGggbGVmdCBzYWZlLWFyZWEgem9uZVxuQG1peGluIHNhZmUtYXJlYS1wcm9wZXJ0eS1sZWZ0KCRwcm9wZXJ0eSwgJHZhbHVlOiAwLCAkZGVmYXVsdDogdHJ1ZSkge1xuICAgIEBpZiAoJHByb3BlcnR5IG9yICR2YWx1ZSkge1xuICAgICAgICBAaWYgKCRkZWZhdWx0KSB7XG4gICAgICAgICAgICAjeyRwcm9wZXJ0eX06ICN7JHZhbHVlfTtcbiAgICAgICAgfVxuXG4gICAgICAgIEBpZiAoJGVuYWJsZS1zYWZlLWFyZWEpIHtcbiAgICAgICAgICAgIEBpZiAoc3RyaXAtdW5pdHMoJHZhbHVlKSA9PSAwKSB7XG4gICAgICAgICAgICAgICAgLyogaU9TIDExLjIrICovXG4gICAgICAgICAgICAgICAgI3skcHJvcGVydHl9OiBlbnYoc2FmZS1hcmVhLWluc2V0LWxlZnQpO1xuICAgICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICAgICAgLyogaU9TIDExLjIrICovXG4gICAgICAgICAgICAgICAgI3skcHJvcGVydHl9OiBjYWxjKGVudihzYWZlLWFyZWEtaW5zZXQtbGVmdCkgKyAjeyR2YWx1ZX0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuXG4vLyBTZXQgYW55IHByb3BlcnR5IHdpdGggcmlnaHQgc2FmZS1hcmVhIHpvbmVcbkBtaXhpbiBzYWZlLWFyZWEtcHJvcGVydHktcmlnaHQoJHByb3BlcnR5LCAkdmFsdWU6IDAsICRkZWZhdWx0OiB0cnVlKSB7XG4gICAgQGlmICgkcHJvcGVydHkgb3IgJHZhbHVlKSB7XG4gICAgICAgIEBpZiAoJGRlZmF1bHQpIHtcbiAgICAgICAgICAgICN7JHByb3BlcnR5fTogI3skdmFsdWV9O1xuICAgICAgICB9XG5cbiAgICAgICAgQGlmICgkZW5hYmxlLXNhZmUtYXJlYSkge1xuICAgICAgICAgICAgQGlmIChzdHJpcC11bml0cygkdmFsdWUpID09IDApIHtcbiAgICAgICAgICAgICAgICAvKiBpT1MgMTEuMisgKi9cbiAgICAgICAgICAgICAgICAjeyRwcm9wZXJ0eX06IGVudihzYWZlLWFyZWEtaW5zZXQtcmlnaHQpO1xuICAgICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICAgICAgLyogaU9TIDExLjIrICovXG4gICAgICAgICAgICAgICAgI3skcHJvcGVydHl9OiBjYWxjKGVudihzYWZlLWFyZWEtaW5zZXQtcmlnaHQpICsgI3skdmFsdWV9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cbiIsIi8qIEB0aGVtZTogZGVmYXVsdDsgKi9cblxuLy8gTWl4aW4gZm9yIGluY2x1ZGUgY2FyZXQgdHJpYW5nbGUgYW55d2hlcmVcbi8vIEBwYXJhbSAkc2l6ZSBzZXQgY2FyZXQgc2l6ZVxuLy8gQHBhcmFtICRjb2xvciBzZXQgY2FyZXQgY29sb3JcbkBtaXhpbiBjdXN0b20tY2FyZXQoJHNpemU6IDRweCwgJGNvbG9yOiBudWxsKSB7XG4gICAgJjo6YWZ0ZXIge1xuICAgICAgICBjb250ZW50OiAnJztcbiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgICAgICB3aWR0aDogMDtcbiAgICAgICAgaGVpZ2h0OiAwO1xuICAgICAgICBib3JkZXItdG9wOiAkc2l6ZSBzb2xpZCAkY29sb3I7XG4gICAgICAgIGJvcmRlci1yaWdodDogJHNpemUgc29saWQgdHJhbnNwYXJlbnQ7XG4gICAgICAgIGJvcmRlci1sZWZ0OiAkc2l6ZSBzb2xpZCB0cmFuc3BhcmVudDtcbiAgICAgICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgICB9XG59XG4iLCIvKiBAdGhlbWU6IGRlZmF1bHQ7ICovXG5cbi8vIE1peGluIGZvciBib3JkZXIsIGlmIG5lZWQgdG8gdXNlIHNob3J0aGFuZCBwcm9wZXJ0eSwgc2V0ICR1c2Utc2hvcnRoYW5kIHRvIHRydWVcbi8vIE51bGwgcHJvcGVydHkgZG9lc24ndCByZW5kZXJcbkBtaXhpbiBib3JkZXIoXG4gICAgJHdpZHRoOiBudWxsLFxuICAgICRzdHlsZTogbnVsbCxcbiAgICAkY29sb3I6IG51bGwsXG4gICAgJHVzZS1zaG9ydGhhbmQ6IGZhbHNlXG4pIHtcbiAgICBAaWYgKCR1c2Utc2hvcnRoYW5kKSB7XG4gICAgICAgIGJvcmRlcjogJHdpZHRoICRzdHlsZSAkY29sb3I7XG4gICAgfSBAZWxzZSB7XG4gICAgICAgIGJvcmRlci13aWR0aDogJHdpZHRoO1xuICAgICAgICBib3JkZXItc3R5bGU6ICRzdHlsZTtcbiAgICAgICAgYm9yZGVyLWNvbG9yOiAkY29sb3I7XG4gICAgfVxufVxuIiwiLyogQHRoZW1lOiBkZWZhdWx0OyAqL1xuXG4vLyBNaXhpbiBmb3IgdGFic1xuQG1peGluIG5hdi10YWJzKFxuICAgIC8vIFNlbGVjdG9yc1xuICAgICRuYXYtdGFiczogJy5uYXYtdGFicycsXG4gICAgJG5hdi10YWJzLWl0ZW06ICcubmF2LWl0ZW0nLFxuICAgICRuYXYtdGFicy1pdGVtLWFjdGl2ZTogJy5hY3RpdmUnLFxuICAgICRuYXYtdGFicy1saW5rOiAnLm5hdi1saW5rJyxcblxuICAgIC8vIHRhYnMgd3JhcHBlclxuICAgICRuYXYtdGFicy1vZmZzZXQ6IG51bGwsXG4gICAgJG5hdi10YWJzLWlubmVyLW9mZnNldDogbnVsbCxcbiAgICAkbmF2LXRhYnMtYm9yZGVyLXdpZHRoOiBudWxsLFxuICAgICRuYXYtdGFicy1ib3JkZXItc3R5bGU6IG51bGwsXG4gICAgJG5hdi10YWJzLWJvcmRlci1jb2xvcjogbnVsbCxcbiAgICAkbmF2LXRhYnMtYmFja2dyb3VuZDogbnVsbCxcbiAgICAkbmF2LXRhYnMtYWxpZ24taXRlbXM6IG51bGwsXG4gICAgJG5hdi10YWJzLWp1c3RpZnktY29udGVudDogZmxleC1zdGFydCxcbiAgICAkbmF2LXRhYnMtd3JhcDogbm93cmFwLFxuICAgICRuYXYtdGFicy1nYXA6IDAsXG5cbiAgICAvLyB0YWJzIGl0ZW1cbiAgICAkbmF2LXRhYnMtaXRlbS1mbGV4OiBudWxsLFxuXG4gICAgLy8gdGFicyBsaW5rXG4gICAgJG5hdi10YWJzLWxpbmstaW5uZXItb2Zmc2V0OiBudWxsLFxuICAgICRuYXYtdGFicy1saW5rLXRleHQtYWxpZ246IGNlbnRlcixcbiAgICAkbmF2LXRhYnMtbGluay1iYWNrZ3JvdW5kOiBudWxsLFxuICAgICRuYXYtdGFicy1saW5rLWJvcmRlci13aWR0aDogbnVsbCxcbiAgICAkbmF2LXRhYnMtbGluay1ib3JkZXItc3R5bGU6IG51bGwsXG4gICAgJG5hdi10YWJzLWxpbmstYm9yZGVyLWNvbG9yOiBudWxsLFxuICAgICRuYXYtdGFicy1saW5rLWNvbG9yOiBudWxsLFxuXG4gICAgLy8gdGFicyBsaW5rIGhvdmVyXG4gICAgJG5hdi10YWJzLWxpbmstaG92ZXItaW5uZXItb2Zmc2V0OiBudWxsLFxuICAgICRuYXYtdGFicy1saW5rLWhvdmVyLXRleHQtZGVjb3JhdGlvbjogbnVsbCxcbiAgICAkbmF2LXRhYnMtbGluay1ob3Zlci1iYWNrZ3JvdW5kOiBudWxsLFxuICAgICRuYXYtdGFicy1saW5rLWhvdmVyLWJvcmRlci13aWR0aDogbnVsbCxcbiAgICAkbmF2LXRhYnMtbGluay1ob3Zlci1ib3JkZXItc3R5bGU6IG51bGwsXG4gICAgJG5hdi10YWJzLWxpbmstaG92ZXItYm9yZGVyLWNvbG9yOiBudWxsLFxuICAgICRuYXYtdGFicy1saW5rLWhvdmVyLWNvbG9yOiBudWxsLFxuXG4gICAgLy8gdGFicyBsaW5rIGFjdGl2ZVxuICAgICRuYXYtdGFicy1saW5rLWFjdGl2ZS1pbm5lci1vZmZzZXQ6IG51bGwsXG4gICAgJG5hdi10YWJzLWxpbmstYWN0aXZlLWJhY2tncm91bmQ6IG51bGwsXG4gICAgJG5hdi10YWJzLWxpbmstYWN0aXZlLWJvcmRlci13aWR0aDogbnVsbCxcbiAgICAkbmF2LXRhYnMtbGluay1hY3RpdmUtYm9yZGVyLXN0eWxlOiBudWxsLFxuICAgICRuYXYtdGFicy1saW5rLWFjdGl2ZS1ib3JkZXItY29sb3I6IG51bGwsXG4gICAgJG5hdi10YWJzLWxpbmstYWN0aXZlLWNvbG9yOiBudWxsLFxuXG4gICAgLy8gdGFicyBsaW5rIGhpZ2hsaWdodGVkIGJ5IGtleWJvYXJkXG4gICAgJG5hdi10YWJzLWxpbmstYWN0aXZlLWNvbG9yLWZvY3VzLXZpc2libGU6ICRiYXNlLXVpLWVsZW1lbnQtZm9jdXMtdmlzaWJsZS1zdHlsZVxuKSB7XG4gICAgI3skbmF2LXRhYnN9IHtcbiAgICAgICAgbWFyZ2luOiAkbmF2LXRhYnMtb2Zmc2V0O1xuICAgICAgICBwYWRkaW5nOiAkbmF2LXRhYnMtaW5uZXItb2Zmc2V0O1xuXG4gICAgICAgIGJhY2tncm91bmQ6ICRuYXYtdGFicy1iYWNrZ3JvdW5kO1xuXG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGZsZXgtd3JhcDogJG5hdi10YWJzLXdyYXA7XG4gICAgICAgIGFsaWduLWl0ZW1zOiAkbmF2LXRhYnMtYWxpZ24taXRlbXM7XG4gICAgICAgIGp1c3RpZnktY29udGVudDogJG5hdi10YWJzLWp1c3RpZnktY29udGVudDtcblxuICAgICAgICBAaW5jbHVkZSBib3JkZXIoJG5hdi10YWJzLWJvcmRlci13aWR0aCwgJG5hdi10YWJzLWJvcmRlci1zdHlsZSwgJG5hdi10YWJzLWJvcmRlci1jb2xvcik7XG5cbiAgICAgICAgJjo6YWZ0ZXIge1xuICAgICAgICAgICAgLy8gRGlzYWJsZSBib290c3RyYXAgY2xlYXJmaXhcbiAgICAgICAgICAgIGNvbnRlbnQ6IG5vbmU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAjeyRuYXYtdGFicy1pdGVtfSB7XG4gICAgICAgIGZsZXg6ICRuYXYtdGFicy1pdGVtLWZsZXg7XG5cbiAgICAgICAgJjpub3QoOmZpcnN0LWNoaWxkKSB7XG4gICAgICAgICAgICBtYXJnaW4tbGVmdDogJG5hdi10YWJzLWdhcDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgICN7JG5hdi10YWJzLWxpbmt9IHtcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgIHBhZGRpbmc6ICRuYXYtdGFicy1saW5rLWlubmVyLW9mZnNldDtcblxuICAgICAgICB0ZXh0LWFsaWduOiAkbmF2LXRhYnMtbGluay10ZXh0LWFsaWduO1xuXG4gICAgICAgIGJhY2tncm91bmQ6ICRuYXYtdGFicy1saW5rLWJhY2tncm91bmQ7XG4gICAgICAgIGNvbG9yOiAkbmF2LXRhYnMtbGluay1jb2xvcjtcblxuICAgICAgICBAaW5jbHVkZSBib3JkZXIoJG5hdi10YWJzLWxpbmstYm9yZGVyLXdpZHRoLCAkbmF2LXRhYnMtbGluay1ib3JkZXItc3R5bGUsICRuYXYtdGFicy1saW5rLWJvcmRlci1jb2xvcik7XG5cbiAgICAgICAgQGluY2x1ZGUgaG92ZXItZm9jdXMge1xuICAgICAgICAgICAgcGFkZGluZzogJG5hdi10YWJzLWxpbmstaG92ZXItaW5uZXItb2Zmc2V0O1xuXG4gICAgICAgICAgICB0ZXh0LWRlY29yYXRpb246ICRuYXYtdGFicy1saW5rLWhvdmVyLXRleHQtZGVjb3JhdGlvbjtcblxuICAgICAgICAgICAgYmFja2dyb3VuZDogJG5hdi10YWJzLWxpbmstaG92ZXItYmFja2dyb3VuZDtcbiAgICAgICAgICAgIGNvbG9yOiAkbmF2LXRhYnMtbGluay1ob3Zlci1jb2xvcjtcblxuICAgICAgICAgICAgQGluY2x1ZGUgYm9yZGVyKFxuICAgICAgICAgICAgICAgICRuYXYtdGFicy1saW5rLWhvdmVyLWJvcmRlci13aWR0aCxcbiAgICAgICAgICAgICAgICAkbmF2LXRhYnMtbGluay1ob3Zlci1ib3JkZXItc3R5bGUsXG4gICAgICAgICAgICAgICAgJG5hdi10YWJzLWxpbmstaG92ZXItYm9yZGVyLWNvbG9yXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgQGlmICRuYXYtdGFicy1saW5rLWFjdGl2ZS1jb2xvci1mb2N1cy12aXNpYmxlIHtcbiAgICAgICAgICAgIDpmb2N1cy12aXNpYmxlIHtcbiAgICAgICAgICAgICAgICBib3gtc2hhZG93OiAkbmF2LXRhYnMtbGluay1hY3RpdmUtY29sb3ItZm9jdXMtdmlzaWJsZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgICYjeyRuYXYtdGFicy1pdGVtLWFjdGl2ZX0ge1xuICAgICAgICAgICAgcGFkZGluZzogJG5hdi10YWJzLWxpbmstYWN0aXZlLWlubmVyLW9mZnNldDtcblxuICAgICAgICAgICAgYmFja2dyb3VuZDogJG5hdi10YWJzLWxpbmstYWN0aXZlLWJhY2tncm91bmQ7XG4gICAgICAgICAgICBjb2xvcjogJG5hdi10YWJzLWxpbmstYWN0aXZlLWNvbG9yO1xuXG4gICAgICAgICAgICBAaW5jbHVkZSBib3JkZXIoXG4gICAgICAgICAgICAgICAgJG5hdi10YWJzLWxpbmstYWN0aXZlLWJvcmRlci13aWR0aCxcbiAgICAgICAgICAgICAgICAkbmF2LXRhYnMtbGluay1hY3RpdmUtYm9yZGVyLXN0eWxlLFxuICAgICAgICAgICAgICAgICRuYXYtdGFicy1saW5rLWFjdGl2ZS1ib3JkZXItY29sb3JcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBAY29udGVudDtcbn1cbiIsIi8qIEB0aGVtZTogZGVmYXVsdDsgKi9cblxuLy8gTWl4aW4gZm9yIGluamVjdCB2ZXJ0aWNhbCBzZXBhcmF0b3JzIGluIGxpc3Rcbi8vIHBhcmVudCBibG9jayBzaG91bGQgaGFzIHBvc2l0aW9uOiByZWxhdGl2ZVxuXG4vKiBzdHlsZWxpbnQtZGlzYWJsZS1uZXh0LWxpbmUgc2Nzcy9uby1nbG9iYWwtZnVuY3Rpb24tbmFtZXMgKi9cbkBtaXhpbiBsaXN0LXNlcGFyYXRvcigkZW5hYmxlZDogdHJ1ZSwgJHRvcDogMXB4LCAkYm90dG9tOiAxcHgsICRsZWZ0OiAwLCAkYm9yZGVyOiAxcHggc29saWQpIHtcbiAgICBAaWYgKCRlbmFibGVkKSB7XG4gICAgICAgICY6bm90KDpmaXJzdC1jaGlsZCkge1xuICAgICAgICAgICAgJjo6YmVmb3JlIHtcbiAgICAgICAgICAgICAgICB0b3A6ICR0b3A7XG4gICAgICAgICAgICAgICAgbGVmdDogJGxlZnQ7XG4gICAgICAgICAgICAgICAgYm90dG9tOiAkYm90dG9tO1xuXG4gICAgICAgICAgICAgICAgYm9yZGVyLWxlZnQ6ICRib3JkZXI7XG5cbiAgICAgICAgICAgICAgICBAaW5jbHVkZSBhZnRlcigpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuIiwiLyogQHRoZW1lOiBkZWZhdWx0OyAqL1xuXG4vLyBNaXhpbiBmb3IgYWRkIHN0eWxlcyB0byBibG9jayB3aXRoIGJhY2tncm91bmQgYW5kIHBhZGRpbmdzXG5AbWl4aW4gYmxvY2stc3Vic3RyYXRlKCRvZmZzZXQtaW5uZXIsICRiZywgJGJvcmRlci1yYWRpdXM6IG51bGwpIHtcbiAgICBwYWRkaW5nOiAkb2Zmc2V0LWlubmVyO1xuXG4gICAgYmFja2dyb3VuZDogJGJnO1xuICAgIGJvcmRlci1yYWRpdXM6ICRib3JkZXItcmFkaXVzO1xufVxuIiwiLyogQHRoZW1lOiBkZWZhdWx0OyAqL1xuXG5AbWl4aW4ga2V5ZnJhbWUoJGFuaW1hdGlvbi1uYW1lKSB7XG4gICAgQGtleWZyYW1lcyAjeyRhbmltYXRpb24tbmFtZX0ge1xuICAgICAgICBAY29udGVudDtcbiAgICB9XG59XG4iLCIvKiBAdGhlbWU6IGRlZmF1bHQ7ICovXG5cbi8vIFVzZTogQGluY2x1ZGUgZmxleGlibGUtYXJyb3coKTtcbi8vIE1peGluIGNhbid0IHdyYXAgaW4gUlRMQ1NTIGRpcmVjdGl2ZXNcbi8vIFVzZSBSVEwgZGlyZWN0aXZlcyBvbmx5IGZvciBhIHNwZWNpZmljIGxpbmVcbkBtaXhpbiBmbGV4aWJsZS1hcnJvdyhcbiAgICAkYXJyb3ctaGVpZ2h0OiAxMHB4LFxuICAgICRhcnJvdy13aWR0aDogMTFweCxcbiAgICAkYXJyb3ctb2Zmc2V0OiAtNXB4LFxuICAgICRhcnJvdy1wbGFjZWhvbGRlcjogOHB4LFxuICAgICRhcnJvdy1ib3gtc2hhZG93OiAwIDAgMCAxcHggJGRyb3Bkb3duLWJvcmRlci1jb2xvcixcbiAgICAkYXJyb3ctdHJhbnNmb3JtOiByb3RhdGUoNTNkZWcpIHNrZXdYKDE1ZGVnKSxcbiAgICAkYXJyb3ctcGxhY2VtZW50LWVuZC10cmFuc2Zvcm06IHJvdGF0ZSgxNDVkZWcpIHNrZXdYKDE1ZGVnKSxcbiAgICAkYXJyb3ctcGxhY2VtZW50LXN0YXJ0LXRyYW5zZm9ybTogcm90YXRlKDE0NWRlZykgc2tld1goMTVkZWcpLFxuKSB7XG4gICAgJjo6YmVmb3JlIHtcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuXG4gICAgICAgIGhlaWdodDogJGFycm93LXBsYWNlaG9sZGVyO1xuICAgICAgICB3aWR0aDogMTAwJTtcblxuICAgICAgICBjb250ZW50OiAnJztcbiAgICB9XG5cbiAgICAmOjphZnRlciB7XG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgdG9wOiAwO1xuXG4gICAgICAgIC8qIHJ0bDppZ25vcmUgKi9cbiAgICAgICAgcmlnaHQ6IDA7XG4gICAgICAgIGJvdHRvbTogMDtcbiAgICAgICAgYm9yZGVyOiAwIG5vbmU7XG5cbiAgICAgICAgLyogcnRsOmlnbm9yZSAqL1xuICAgICAgICBsZWZ0OiAwO1xuICAgICAgICB6LWluZGV4OiB6KCdoaWRkZW4nKTtcblxuICAgICAgICBiYWNrZ3JvdW5kOiBpbmhlcml0O1xuICAgICAgICBib3JkZXItcmFkaXVzOiBpbmhlcml0O1xuXG4gICAgICAgIGNvbnRlbnQ6ICcnO1xuICAgIH1cblxuICAgIC5hcnJvdyB7XG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgei1pbmRleDogeignaGlkZGVuJyk7XG5cbiAgICAgICAgd2lkdGg6ICRhcnJvdy13aWR0aDtcbiAgICAgICAgaGVpZ2h0OiAkYXJyb3ctaGVpZ2h0O1xuXG4gICAgICAgIGJvcmRlcjogMCBub25lO1xuICAgICAgICBiYWNrZ3JvdW5kOiBpbmhlcml0O1xuICAgICAgICBib3gtc2hhZG93OiAkYXJyb3ctYm94LXNoYWRvdztcblxuICAgICAgICB0cmFuc2Zvcm06ICRhcnJvdy10cmFuc2Zvcm07XG4gICAgfVxuXG4gICAgJlt4LXBsYWNlbWVudF49J3RvcCddIHtcbiAgICAgICAgbWFyZ2luLWJvdHRvbTogJGFycm93LXBsYWNlaG9sZGVyO1xuXG4gICAgICAgICY6OmJlZm9yZSB7XG4gICAgICAgICAgICB0b3A6IDEwMCU7XG4gICAgICAgIH1cblxuICAgICAgICAuYXJyb3cge1xuICAgICAgICAgICAgYm90dG9tOiAkYXJyb3ctb2Zmc2V0O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgJlt4LXBsYWNlbWVudF49J3JpZ2h0J10ge1xuICAgICAgICAvKiBydGw6aWdub3JlICovXG4gICAgICAgIG1hcmdpbi1sZWZ0OiAkYXJyb3ctcGxhY2Vob2xkZXI7XG5cbiAgICAgICAgJjo6YmVmb3JlIHtcbiAgICAgICAgICAgIHRvcDogMDtcblxuICAgICAgICAgICAgLyogcnRsOmlnbm9yZSAqL1xuICAgICAgICAgICAgcmlnaHQ6IDEwMCU7XG5cbiAgICAgICAgICAgIGhlaWdodDogMTAwJTtcbiAgICAgICAgICAgIHdpZHRoOiAkYXJyb3ctcGxhY2Vob2xkZXI7XG4gICAgICAgIH1cblxuICAgICAgICAuYXJyb3cge1xuICAgICAgICAgICAgLyogcnRsOmlnbm9yZSAqL1xuICAgICAgICAgICAgbGVmdDogJGFycm93LW9mZnNldDtcblxuICAgICAgICAgICAgdHJhbnNmb3JtOiAkYXJyb3ctcGxhY2VtZW50LWVuZC10cmFuc2Zvcm07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAmW3gtcGxhY2VtZW50Xj0nYm90dG9tJ10ge1xuICAgICAgICBtYXJnaW4tdG9wOiAkYXJyb3ctcGxhY2Vob2xkZXI7XG5cbiAgICAgICAgJjo6YmVmb3JlIHtcbiAgICAgICAgICAgIGJvdHRvbTogMTAwJTtcbiAgICAgICAgfVxuXG4gICAgICAgIC5hcnJvdyB7XG4gICAgICAgICAgICB0b3A6ICRhcnJvdy1vZmZzZXQ7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAmW3gtcGxhY2VtZW50Xj0nbGVmdCddIHtcbiAgICAgICAgLyogcnRsOmlnbm9yZSAqL1xuICAgICAgICBtYXJnaW4tcmlnaHQ6ICRhcnJvdy1wbGFjZWhvbGRlcjtcblxuICAgICAgICAmOjpiZWZvcmUge1xuICAgICAgICAgICAgdG9wOiAwO1xuXG4gICAgICAgICAgICAvKiBydGw6aWdub3JlICovXG4gICAgICAgICAgICBsZWZ0OiAxMDAlO1xuXG4gICAgICAgICAgICB3aWR0aDogJGFycm93LXBsYWNlaG9sZGVyO1xuICAgICAgICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgICB9XG5cbiAgICAgICAgLmFycm93IHtcbiAgICAgICAgICAgIC8qIHJ0bDppZ25vcmUgKi9cbiAgICAgICAgICAgIHJpZ2h0OiAkYXJyb3ctb2Zmc2V0O1xuXG4gICAgICAgICAgICB0cmFuc2Zvcm06ICRhcnJvdy1wbGFjZW1lbnQtc3RhcnQtdHJhbnNmb3JtO1xuICAgICAgICB9XG4gICAgfVxufVxuIiwiLyogQHRoZW1lOiBkZWZhdWx0OyAqL1xuXG4vLyBUcnVuY2F0ZXMgdGV4dCBhdCBhIHNwZWNpZmljIG51bWJlciBvZiBsaW5lcy5cbkBtaXhpbiBsaW5lLWNsYW1wKCRsaW5lLWNsYW1wLWNvdW50OiAyKSB7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAvLyBzdHlsZWxpbnQtZGlzYWJsZS1uZXh0LWxpbmUgdmFsdWUtbm8tdmVuZG9yLXByZWZpeFxuICAgIGRpc3BsYXk6IC13ZWJraXQtYm94O1xuICAgIC13ZWJraXQtbGluZS1jbGFtcDogJGxpbmUtY2xhbXAtY291bnQ7XG4gICAgLy8gc3R5bGVsaW50LWRpc2FibGUtbmV4dC1saW5lIHByb3BlcnR5LW5vLXZlbmRvci1wcmVmaXhcbiAgICAtd2Via2l0LWJveC1vcmllbnQ6IHZlcnRpY2FsO1xufVxuIiwiLyogQHRoZW1lOiBkZWZhdWx0OyAqL1xuXG5AaW1wb3J0ICcuL2Z1bmN0aW9ucyc7XG5cbiRza2VsZXRvbi1jb2xvcjogZ2V0LWNvbG9yKCduZXV0cmFsJywgJ2dyZXkxJykgIWRlZmF1bHQ7XG4kc2tlbGV0b24tYW5pbWF0aW9uOiAxLjI1cyBlYXNlLWluLW91dCBpbmZpbml0ZSBhbHRlcm5hdGUgc2tlbGV0b24tcHVsc2UgIWRlZmF1bHQ7XG5cbi8vIE1peGluIGZvciBnZW5lcmF0ZSBsb2FkaW5nIHNrZWxldG9uXG4vLyBAcGFyYW06IExpc3QgJHBhcnRpY2xlc1xuLy8gQGV4YW1wbGVcbi8vIEBpbmNsdWRlIHNrZWxldG9uKFxuLy8gICAgIHNrZWxldG9uLXJlY3QoJGNvbG9yOiAjODAwLCAkd2lkdGg6IDEyOXB4LCAkaGVpZ2h0OiAyNHB4LCAkeDogMCwgJHk6IDAsICRyYWRpdXM6IDNweCksXG4vLyAgICAgc2tlbGV0b24tZWxsaXBzZSgkY29sb3I6ICM4MDAsICR3aWR0aDogMTI5cHgsICRoZWlnaHQ6IDI0cHgsICR4OiAwLCAkeTogMCksXG4vLyAgICAgKFxuLy8gICAgICAgICBza2VsZXRvbi1yZWN0KCRjb2xvcjogIzgwMCwgJHdpZHRoOiAxMjlweCwgJGhlaWdodDogMjRweCwgJHg6IDAsICR5OiAwLCAkcmFkaXVzOiAzcHgpLFxuLy8gICAgICAgICBza2VsZXRvbi1lbGxpcHNlKCRjb2xvcjogIzgwMCwgJHdpZHRoOiAxMjlweCwgJGhlaWdodDogMjRweCwgJHg6IDAsICR5OiAwKSxcbi8vICAgICApLFxuLy8gKTtcbkBtaXhpbiBza2VsZXRvbigkcGFydGljbGVzLi4uKSB7XG4gICAgJGxpc3Qtbm9ybWFsaXplZDogc2tlbGV0b24tbm9ybWFsaXplKCRwYXJ0aWNsZXMuLi4pO1xuXG4gICAgYmFja2dyb3VuZC1pbWFnZTogc2tlbGV0b24taW1hZ2UoJGxpc3Qtbm9ybWFsaXplZC4uLik7XG4gICAgYmFja2dyb3VuZC1zaXplOiBza2VsZXRvbi1zaXplKCRsaXN0LW5vcm1hbGl6ZWQuLi4pO1xuICAgIGJhY2tncm91bmQtcG9zaXRpb246IHNrZWxldG9uLXBvc2l0aW9uKCRsaXN0LW5vcm1hbGl6ZWQuLi4pO1xuICAgIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7XG5cbiAgICBhbmltYXRpb246ICRza2VsZXRvbi1hbmltYXRpb247XG59XG5cbkBrZXlmcmFtZXMgc2tlbGV0b24tcHVsc2Uge1xuICAgIDAlIHtcbiAgICAgICAgb3BhY2l0eTogMTtcbiAgICB9XG4gICAgNTAlIHtcbiAgICAgICAgb3BhY2l0eTogLjU7XG4gICAgfVxuICAgIDEwMCUge1xuICAgICAgICBvcGFjaXR5OiAxO1xuICAgIH1cbn1cbiIsIi8qIEB0aGVtZTogZGVmYXVsdDsgKi9cblxuQHVzZSAnc2FzczptZXRhJztcbkB1c2UgJ3Nhc3M6bGlzdCc7XG5AdXNlICdzYXNzOm1hcCc7XG5cbkBpbXBvcnQgJy4vcmVjdCc7XG5AaW1wb3J0ICcuL2VsbGlwc2UnO1xuXG4vLyBGdW5jdGlvbiBmb3Igbm9ybWFsaXplIGFyZ3VtZW50cyBvZiBcIkBtaXhpbiBza2VsZXRvblwiXG4vLyBNYWtlIHN1cmUgYWxsIGl0ZW1zIHdpdGggYW55IHR5cGUgKGxpc3Qgb3IgbWFwKSBtZXJnZWQgaW50byBmbGF0IGxpc3Rcbi8vIEBwYXJhbTogTGlzdCAkcGFydGljbGVzXG4vLyBAcmV0dXJuOiBGbGF0IGxpc3Qgb2YgJHBhcnRpY2xlc1xuXG5AZnVuY3Rpb24gc2tlbGV0b24tbm9ybWFsaXplKCRwYXJ0aWNsZXMuLi4pIHtcbiAgICAkcmVzdWx0OiAoKTtcblxuICAgIEBlYWNoICRwYXJ0aWNsZSBpbiAkcGFydGljbGVzIHtcbiAgICAgICAgQGlmIG1ldGEudHlwZS1vZigkcGFydGljbGUpID09ICdsaXN0JyB7XG4gICAgICAgICAgICAkcmVzdWx0OiBsaXN0LmpvaW4oJHJlc3VsdCwgJHBhcnRpY2xlLCBjb21tYSk7XG4gICAgICAgIH1cblxuICAgICAgICBAaWYgbWV0YS50eXBlLW9mKCRwYXJ0aWNsZSkgPT0gJ21hcCcge1xuICAgICAgICAgICAgJHJlc3VsdDogbGlzdC5hcHBlbmQoJHJlc3VsdCwgJHBhcnRpY2xlLCBjb21tYSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBAcmV0dXJuICRyZXN1bHQ7XG59XG5cbi8vIGJhY2tncm91bmQtaW1hZ2UgZ2VuZXJhdG9yXG4vLyBUYWtlIGxpc3Qgb2Ygc2tlbGV0b24gaXRlbXMgYW5kIGNhbGwgZ2VuZXJhdG9yIGJ5IHR5cGVcbi8vIEBwYXJhbTogTGlzdCAkcGFydGljbGVzXG4vLyBAcmV0dXJuOiBMaXN0IG9mIGJhY2tncm91bmQtaW1hZ2UgdmFsdWVcbkBmdW5jdGlvbiBza2VsZXRvbi1pbWFnZSgkcGFydGljbGVzLi4uKSB7XG4gICAgJHJlc3VsdDogbnVsbDtcblxuICAgIEBpZiBsaXN0Lmxlbmd0aCgkcGFydGljbGVzKSA9PSAwIHtcbiAgICAgICAgQHJldHVybiAkcmVzdWx0O1xuICAgIH1cblxuICAgICRyZXN1bHQ6ICgpO1xuXG4gICAgQGVhY2ggJHBhcnRpY2xlIGluICRwYXJ0aWNsZXMge1xuICAgICAgICBAaWYgbWFwLmdldCgkcGFydGljbGUsICd0eXBlJykgPT0gJ3JlY3QnIHtcbiAgICAgICAgICAgICRyZXN1bHQ6IGxpc3QuYXBwZW5kKCRyZXN1bHQsIHNrZWxldG9uLWltYWdlLXJlY3QoJHBhcnRpY2xlKSwgY29tbWEpO1xuICAgICAgICB9XG5cbiAgICAgICAgQGlmIG1hcC5nZXQoJHBhcnRpY2xlLCAndHlwZScpID09ICdlbGxpcHNlJyB7XG4gICAgICAgICAgICAkcmVzdWx0OiBsaXN0LmFwcGVuZCgkcmVzdWx0LCBza2VsZXRvbi1pbWFnZS1lbGxpcHNlKCRwYXJ0aWNsZSksIGNvbW1hKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIEByZXR1cm4gJHJlc3VsdDtcbn1cblxuLy8gYmFja2dyb3VuZC1zaXplIGdlbmVyYXRvclxuLy8gVGFrZSBsaXN0IG9mIHNrZWxldG9uIGl0ZW1zIGFuZCBjYWxsIGdlbmVyYXRvciBieSB0eXBlXG4vLyBAcGFyYW06IExpc3QgJHBhcnRpY2xlc1xuLy8gQHJldHVybjogTGlzdCBvZiBiYWNrZ3JvdW5kLXNpemUgdmFsdWVcbkBmdW5jdGlvbiBza2VsZXRvbi1zaXplKCRwYXJ0aWNsZXMuLi4pIHtcbiAgICAkcmVzdWx0OiBudWxsO1xuXG4gICAgQGlmIGxpc3QubGVuZ3RoKCRwYXJ0aWNsZXMpID09IDAge1xuICAgICAgICBAcmV0dXJuICRyZXN1bHQ7XG4gICAgfVxuXG4gICAgJHJlc3VsdDogKCk7XG5cbiAgICBAZWFjaCAkcGFydGljbGUgaW4gJHBhcnRpY2xlcyB7XG4gICAgICAgIEBpZiBtYXAuZ2V0KCRwYXJ0aWNsZSwgJ3R5cGUnKSA9PSAncmVjdCcge1xuICAgICAgICAgICAgJHJlc3VsdDogbGlzdC5hcHBlbmQoJHJlc3VsdCwgc2tlbGV0b24tc2l6ZS1yZWN0KCRwYXJ0aWNsZSksIGNvbW1hKTtcbiAgICAgICAgfVxuXG4gICAgICAgIEBpZiBtYXAuZ2V0KCRwYXJ0aWNsZSwgJ3R5cGUnKSA9PSAnZWxsaXBzZScge1xuICAgICAgICAgICAgJHJlc3VsdDogbGlzdC5hcHBlbmQoJHJlc3VsdCwgc2tlbGV0b24tc2l6ZS1lbGxpcHNlKCRwYXJ0aWNsZSksIGNvbW1hKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIEByZXR1cm4gJHJlc3VsdDtcbn1cblxuLy8gYmFja2dyb3VuZC1wb3NpdGlvbiBnZW5lcmF0b3Jcbi8vIFRha2UgbGlzdCBvZiBza2VsZXRvbiBpdGVtcyBhbmQgY2FsbCBnZW5lcmF0b3IgYnkgdHlwZVxuLy8gQHBhcmFtOiBMaXN0ICRwYXJ0aWNsZXNcbi8vIEByZXR1cm46IExpc3Qgb2YgYmFja2dyb3VuZC1wb3NpdGlvbiB2YWx1ZVxuQGZ1bmN0aW9uIHNrZWxldG9uLXBvc2l0aW9uKCRwYXJ0aWNsZXMuLi4pIHtcbiAgICAkcmVzdWx0OiBudWxsO1xuXG4gICAgQGlmIGxpc3QubGVuZ3RoKCRwYXJ0aWNsZXMpID09IDAge1xuICAgICAgICBAcmV0dXJuICRyZXN1bHQ7XG4gICAgfVxuXG4gICAgJHJlc3VsdDogKCk7XG5cbiAgICBAZWFjaCAkcGFydGljbGUgaW4gJHBhcnRpY2xlcyB7XG4gICAgICAgIEBpZiBtYXAuZ2V0KCRwYXJ0aWNsZSwgJ3R5cGUnKSA9PSAncmVjdCcge1xuICAgICAgICAgICAgJHJlc3VsdDogbGlzdC5hcHBlbmQoJHJlc3VsdCwgc2tlbGV0b24tcG9zaXRpb24tcmVjdCgkcGFydGljbGUpLCBjb21tYSk7XG4gICAgICAgIH1cblxuICAgICAgICBAaWYgbWFwLmdldCgkcGFydGljbGUsICd0eXBlJykgPT0gJ2VsbGlwc2UnIHtcbiAgICAgICAgICAgICRyZXN1bHQ6IGxpc3QuYXBwZW5kKCRyZXN1bHQsIHNrZWxldG9uLXBvc2l0aW9uLWVsbGlwc2UoJHBhcnRpY2xlKSwgY29tbWEpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgQHJldHVybiAkcmVzdWx0O1xufVxuIiwiLyogQHRoZW1lOiBkZWZhdWx0OyAqL1xuXG5AdXNlICdzYXNzOm1hcCc7XG5AdXNlICdzYXNzOm1hdGgnO1xuXG4vLyBAcHJpdmF0ZTogYmFja2dyb3VuZC1pbWFnZSBnZW5lcmF0b3Jcbi8vIFRha2UgYSBwYXJ0aWNsZSBtYXAgYW5kIGdlbmVyYXRlIGJhY2tncm91bmQtaW1hZ2UgdmFsdWVcbi8vIEBwYXJhbTogTWFwICRwYXJ0aWNsZVxuLy8gQHJldHVybjogTGlzdCBvZiBiYWNrZ3JvdW5kLWltYWdlIHZhbHVlXG5AZnVuY3Rpb24gc2tlbGV0b24taW1hZ2UtcmVjdCgkcGFydGljbGUpIHtcbiAgICAkY29sb3I6IG1hcC5nZXQoJHBhcnRpY2xlLCAnY29sb3InKTtcbiAgICAkd2lkdGg6IG1hcC5nZXQoJHBhcnRpY2xlLCAnd2lkdGgnKTtcbiAgICAkaGVpZ2h0OiBtYXAuZ2V0KCRwYXJ0aWNsZSwgJ2hlaWdodCcpO1xuICAgICRyYWRpdXM6IG1hdGgubWluKG1hcC5nZXQoJHBhcnRpY2xlLCAncmFkaXVzJyksIG1hdGguZmxvb3IoJHdpZHRoICogLjUpLCBtYXRoLmZsb29yKCRoZWlnaHQgKiAuNSkpO1xuICAgICRyZXN1bHQ6ICgpO1xuXG4gICAgQGlmIG5vdCAkcmFkaXVzIG9yIHN0cmlwLXVuaXRzKCRyYWRpdXMpID09IDAge1xuICAgICAgICAkcmVzdWx0OiAoXG4gICAgICAgICAgICBsaW5lYXItZ3JhZGllbnQoJGNvbG9yLCAkY29sb3IpLFxuICAgICAgICApO1xuICAgIH0gQGVsc2Uge1xuICAgICAgICAkcmVzdWx0OiAoXG4gICAgICAgICAgICByYWRpYWwtZ3JhZGllbnQoY2xvc2VzdC1zaWRlLCAkY29sb3IgMTAwJSwgdHJhbnNwYXJlbnQgMTAwJSksXG4gICAgICAgICAgICByYWRpYWwtZ3JhZGllbnQoY2xvc2VzdC1zaWRlLCAkY29sb3IgMTAwJSwgdHJhbnNwYXJlbnQgMTAwJSksXG4gICAgICAgICAgICByYWRpYWwtZ3JhZGllbnQoY2xvc2VzdC1zaWRlLCAkY29sb3IgMTAwJSwgdHJhbnNwYXJlbnQgMTAwJSksXG4gICAgICAgICAgICByYWRpYWwtZ3JhZGllbnQoY2xvc2VzdC1zaWRlLCAkY29sb3IgMTAwJSwgdHJhbnNwYXJlbnQgMTAwJSksXG4gICAgICAgICAgICBsaW5lYXItZ3JhZGllbnQoJGNvbG9yLCAkY29sb3IpLFxuICAgICAgICAgICAgbGluZWFyLWdyYWRpZW50KCRjb2xvciwgJGNvbG9yKSxcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBAcmV0dXJuICRyZXN1bHQ7XG59XG5cbi8vIEBwcml2YXRlOiBiYWNrZ3JvdW5kLXNpemUgZ2VuZXJhdG9yXG4vLyBUYWtlIGEgcGFydGljbGUgbWFwIGFuZCBnZW5lcmF0ZSBiYWNrZ3JvdW5kLXNpemUgdmFsdWVcbi8vIEBwYXJhbTogTWFwICRwYXJ0aWNsZVxuLy8gQHJldHVybjogTGlzdCBvZiBiYWNrZ3JvdW5kLXNpemUgdmFsdWVcbkBmdW5jdGlvbiBza2VsZXRvbi1zaXplLXJlY3QoJHBhcnRpY2xlKSB7XG4gICAgJHdpZHRoOiBtYXAuZ2V0KCRwYXJ0aWNsZSwgJ3dpZHRoJyk7XG4gICAgJGhlaWdodDogbWFwLmdldCgkcGFydGljbGUsICdoZWlnaHQnKTtcbiAgICAkcmFkaXVzOiBtYXRoLm1pbihtYXAuZ2V0KCRwYXJ0aWNsZSwgJ3JhZGl1cycpLCBtYXRoLmZsb29yKCR3aWR0aCAqIC41KSwgbWF0aC5mbG9vcigkaGVpZ2h0ICogLjUpKTtcbiAgICAkcmVzdWx0OiAoKTtcblxuICAgIEBpZiBub3QgJHJhZGl1cyBvciBzdHJpcC11bml0cygkcmFkaXVzKSA9PSAwIHtcbiAgICAgICAgJHJlc3VsdDogKFxuICAgICAgICAgICAgJHdpZHRoICRoZWlnaHQsXG4gICAgICAgICk7XG4gICAgfSBAZWxzZSB7XG4gICAgICAgICRyZXN1bHQ6IChcbiAgICAgICAgICAgICN7JHJhZGl1cyAqIDJ9ICN7JHJhZGl1cyAqIDJ9LFxuICAgICAgICAgICAgI3skcmFkaXVzICogMn0gI3skcmFkaXVzICogMn0sXG4gICAgICAgICAgICAjeyRyYWRpdXMgKiAyfSAjeyRyYWRpdXMgKiAyfSxcbiAgICAgICAgICAgICN7JHJhZGl1cyAqIDJ9ICN7JHJhZGl1cyAqIDJ9LFxuICAgICAgICAgICAgJHdpZHRoICN7JGhlaWdodCAtICRyYWRpdXMgKiAyfSxcbiAgICAgICAgICAgICN7JHdpZHRoIC0gJHJhZGl1cyAqIDJ9ICRoZWlnaHRcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBAcmV0dXJuICRyZXN1bHQ7XG59XG5cbi8vIEBwcml2YXRlOiBiYWNrZ3JvdW5kLXBvc2l0aW9uIGdlbmVyYXRvclxuLy8gVGFrZSBhIHBhcnRpY2xlIG1hcCBhbmQgZ2VuZXJhdGUgYmFja2dyb3VuZC1wb3NpdGlvbiB2YWx1ZVxuLy8gQHBhcmFtOiBNYXAgJHBhcnRpY2xlXG4vLyBAcmV0dXJuOiBMaXN0IG9mIGJhY2tncm91bmQtcG9zaXRpb24gdmFsdWVcbkBmdW5jdGlvbiBza2VsZXRvbi1wb3NpdGlvbi1yZWN0KCRwYXJ0aWNsZSkge1xuICAgICR3aWR0aDogbWFwLmdldCgkcGFydGljbGUsICd3aWR0aCcpO1xuICAgICRoZWlnaHQ6IG1hcC5nZXQoJHBhcnRpY2xlLCAnaGVpZ2h0Jyk7XG4gICAgJHg6IG1hcC5nZXQoJHBhcnRpY2xlLCAneCcpO1xuICAgICR5OiBtYXAuZ2V0KCRwYXJ0aWNsZSwgJ3knKTtcbiAgICAkcmFkaXVzOiBtYXRoLm1pbihtYXAuZ2V0KCRwYXJ0aWNsZSwgJ3JhZGl1cycpLCBtYXRoLmZsb29yKCR3aWR0aCAqIC41KSwgbWF0aC5mbG9vcigkaGVpZ2h0ICogLjUpKTtcbiAgICAkcmVzdWx0OiAoKTtcblxuICAgIEBpZiBub3QgJHJhZGl1cyBvciBzdHJpcC11bml0cygkcmFkaXVzKSA9PSAwIHtcbiAgICAgICAgJHJlc3VsdDogKFxuICAgICAgICAgICAgJHggJHksXG4gICAgICAgICk7XG4gICAgfSBAZWxzZSB7XG4gICAgICAgICRyZXN1bHQ6IChcbiAgICAgICAgICAgICR4ICR5LFxuICAgICAgICAgICAgI3skeCArICR3aWR0aCAtICRyYWRpdXMgKiAyfSAkeSxcbiAgICAgICAgICAgICR4ICN7JHkgKyAkaGVpZ2h0IC0gJHJhZGl1cyAqIDJ9LFxuICAgICAgICAgICAgI3skeCArICR3aWR0aCAtICRyYWRpdXMgKiAyfSAjeyR5ICsgJGhlaWdodCAtICRyYWRpdXMgKiAyfSxcbiAgICAgICAgICAgICR4ICN7JHkgKyAkcmFkaXVzfSxcbiAgICAgICAgICAgICN7JHggKyAkcmFkaXVzfSAkeVxuICAgICAgICApO1xuICAgIH1cblxuICAgIEByZXR1cm4gJHJlc3VsdDtcbn1cblxuLy8gQHB1YmxpYzogZnVuY3Rpb24gZm9yIGdldCAkcGFydGljbGUgb2JqZWN0IGZvciBkcmF3IHJlY3Rcbi8vIEBwYXJhbTogJGNvbG9yXG4vLyBAcGFyYW06ICR3aWR0aFxuLy8gQHBhcmFtOiAkaGVpZ2h0XG4vLyBAcGFyYW06ICR4OiAwXG4vLyBAcGFyYW06ICR5OiAwXG4vLyBAcGFyYW06ICRyYWRpdXM6IG51bGxcbi8vIEByZXR1cm46IEZvcm1hdGVkIG1hcCBvZiBwYXJhbWV0ZXJzXG5AZnVuY3Rpb24gc2tlbGV0b24tcmVjdChcbiAgICAkY29sb3IsXG4gICAgJHdpZHRoLFxuICAgICRoZWlnaHQsXG4gICAgJHg6IDAsXG4gICAgJHk6IDAsXG4gICAgJHJhZGl1czogbnVsbFxuKSB7XG4gICAgQHJldHVybiAoXG4gICAgICAgICd0eXBlJzogJ3JlY3QnLFxuICAgICAgICAnY29sb3InOiAkY29sb3IsXG4gICAgICAgICd3aWR0aCc6ICR3aWR0aCxcbiAgICAgICAgJ2hlaWdodCc6ICRoZWlnaHQsXG4gICAgICAgICd4JzogJHgsXG4gICAgICAgICd5JzogJHksXG4gICAgICAgICdyYWRpdXMnOiAkcmFkaXVzXG4gICAgKTtcbn1cbiIsIi8qIEB0aGVtZTogZGVmYXVsdDsgKi9cblxuQHVzZSAnc2FzczptYXAnO1xuXG4vLyBAcHJpdmF0ZTogYmFja2dyb3VuZC1pbWFnZSBnZW5lcmF0b3Jcbi8vIFRha2UgYSBwYXJ0aWNsZSBtYXAgYW5kIGdlbmVyYXRlIGJhY2tncm91bmQtaW1hZ2UgdmFsdWVcbi8vIEBwYXJhbTogTWFwICRwYXJ0aWNsZVxuLy8gQHJldHVybjogTGlzdCBvZiBiYWNrZ3JvdW5kLWltYWdlIHZhbHVlXG5AZnVuY3Rpb24gc2tlbGV0b24taW1hZ2UtZWxsaXBzZSgkcGFydGljbGUpIHtcbiAgICAkY29sb3I6IG1hcC5nZXQoJHBhcnRpY2xlLCAnY29sb3InKTtcblxuICAgIEByZXR1cm4gKFxuICAgICAgICByYWRpYWwtZ3JhZGllbnQoY2xvc2VzdC1zaWRlLCAkY29sb3IgMTAwJSwgdHJhbnNwYXJlbnQgMTAwJSksXG4gICAgKTtcbn1cblxuLy8gQHByaXZhdGU6IGJhY2tncm91bmQtc2l6ZSBnZW5lcmF0b3Jcbi8vIFRha2UgYSBwYXJ0aWNsZSBtYXAgYW5kIGdlbmVyYXRlIGJhY2tncm91bmQtc2l6ZSB2YWx1ZVxuLy8gQHBhcmFtOiBNYXAgJHBhcnRpY2xlXG4vLyBAcmV0dXJuOiBMaXN0IG9mIGJhY2tncm91bmQtc2l6ZSB2YWx1ZVxuQGZ1bmN0aW9uIHNrZWxldG9uLXNpemUtZWxsaXBzZSgkcGFydGljbGUpIHtcbiAgICAkd2lkdGg6IG1hcC5nZXQoJHBhcnRpY2xlLCAnd2lkdGgnKTtcbiAgICAkaGVpZ2h0OiBtYXAuZ2V0KCRwYXJ0aWNsZSwgJ2hlaWdodCcpO1xuXG4gICAgQHJldHVybiAoXG4gICAgICAgICR3aWR0aCAkaGVpZ2h0LFxuICAgICk7XG59XG5cbi8vIEBwcml2YXRlOiBiYWNrZ3JvdW5kLXBvc2l0aW9uIGdlbmVyYXRvclxuLy8gVGFrZSBhIHBhcnRpY2xlIG1hcCBhbmQgZ2VuZXJhdGUgYmFja2dyb3VuZC1wb3NpdGlvbiB2YWx1ZVxuLy8gQHBhcmFtOiBNYXAgJHBhcnRpY2xlXG4vLyBAcmV0dXJuOiBMaXN0IG9mIGJhY2tncm91bmQtcG9zaXRpb24gdmFsdWVcbkBmdW5jdGlvbiBza2VsZXRvbi1wb3NpdGlvbi1lbGxpcHNlKCRwYXJ0aWNsZSkge1xuICAgICR4OiBtYXAuZ2V0KCRwYXJ0aWNsZSwgJ3gnKTtcbiAgICAkeTogbWFwLmdldCgkcGFydGljbGUsICd5Jyk7XG5cbiAgICBAcmV0dXJuIChcbiAgICAgICAgJHggJHksXG4gICAgKTtcbn1cblxuLy8gQHB1YmxpYzogZnVuY3Rpb24gZm9yIGdldCAkcGFydGljbGUgb2JqZWN0IGZvciBkcmF3IGVsbGlwc2Vcbi8vIEBwYXJhbTogJGNvbG9yXG4vLyBAcGFyYW06ICR3aWR0aFxuLy8gQHBhcmFtOiAkaGVpZ2h0XG4vLyBAcGFyYW06ICR4OiAwXG4vLyBAcGFyYW06ICR5OiAwXG4vLyBAcmV0dXJuOiBGb3JtYXRlZCBtYXAgb2YgcGFyYW1ldGVyc1xuQGZ1bmN0aW9uIHNrZWxldG9uLWVsbGlwc2UoXG4gICAgJGNvbG9yLFxuICAgICR3aWR0aCxcbiAgICAkaGVpZ2h0LFxuICAgICR4OiAwLFxuICAgICR5OiAwXG4pIHtcbiAgICBAcmV0dXJuIChcbiAgICAgICAgJ3R5cGUnOiAnZWxsaXBzZScsXG4gICAgICAgICdjb2xvcic6ICRjb2xvcixcbiAgICAgICAgJ3dpZHRoJzogJHdpZHRoLFxuICAgICAgICAnaGVpZ2h0JzogJGhlaWdodCxcbiAgICAgICAgJ3gnOiAkeCxcbiAgICAgICAgJ3knOiAkeVxuICAgICk7XG59XG4iLCIvKiBAdGhlbWU6IGRlZmF1bHQ7ICovXG4vKiBAdGhlbWU6IGRlZmF1bHQ7ICovXG4vKiogQHJldHVybiB0aGUgdmFsdWUgZnJvbSBhICRjb2xvci1wYWxldHRlIG1hcCBhc3NvY2lhdGVkIHdpdGggYSBnaXZlbiBrZXk7XG4gICAgVXNlOiBjb2xvcjogZ2V0LWNvbG9yKCdwcmltYXJ5JywgJ21haW4nKSA9PiBjb2xvcjogIzAwMDtcbiovXG4vKiogQHJldHVybiB0aGUgdmFsdWUgZnJvbSBhICRjb2xvci1wYWxldHRlIG1hcCBhc3NvY2lhdGVkIHdpdGggYSBnaXZlbiBrZXkgYW5kIHdpdGggY3NzIHZhcjtcbiAgICBVc2U6IGNvbG9yOiBnZXQtdmFyLWNvbG9yKCdwcmltYXJ5JywgJ2Jhc2UnKSA9PiBjb2xvcjogdmFyKC0tcHJpbWFyeS1iYXNlLCAjMDAwKTtcbiovXG4vKiogQHJldHVybiB0aGUgY3NzLXByb3BlcnR5IGtleSBiYXNlZCBvbiBsaXN0IG9mIGFyZ3VtZW50cztcbiAgICBVc2U6IGdldC12YXIta2V5KCdidG4nLCAncHJpbWFyeScsICdob3ZlcicpID0+IC0tYnRuLXByaW1hcnktaG92ZXI7XG4qL1xuLyoqIEByZXR1cm4gdGhlIHZhbHVlIGluIGEgJHRoZW1lLWZvbnRzIG1hcCBhc3NvY2lhdGVkIHdpdGggYSBnaXZlbiBrZXk7XG4gICAgVXNlOiBmb250LWZhbWlseTogZ2V0LWZvbnQtbmFtZSgnbWFpbicpID0+IGZvbnQtZmFtaWx5OiAnUG9wcGlucyc7XG4qL1xuLyoqIEByZXR1cm4gdGhlIHZhbHVlIGluIGEgJGZvbnQtd2VpZ2h0cyBtYXAgYXNzb2NpYXRlZCB3aXRoIGEgZ2l2ZW4ga2V5O1xuICAgIFVzZTogZm9udC13ZWlnaHQ6IGZvbnQtd2VpZ2h0KCdib2xkJykgPT4gZm9udC13ZWlnaHQ6IDcwMDtcbiovXG4vKiogQ2FsY3VsYXRlcyB0aGUgc3BhY2luZyBzaXplcyBiYXNlZCBvbiBzcGVjaWZpZWQgbXVsdGlwbGllcnMgYW5kIGEgYmFzZSB2YWx1ZS5cbiAgICBAcGFyYW0ge1N0cmluZ30gJG5hbWUgLSBUaGUgbmFtZSBvZiB0aGUgc3BhY2luZyBzaXplIChlLmcuLCB4cywgbWQsIGxnKS5cbiAgICBAcmV0dXJuIHtOdW1iZXJ8bnVsbH0gVGhlIGNhbGN1bGF0ZWQgc3BhY2luZyBzaXplIGluIHBpeGVscywgYmFzZWQgb24gdGhlIHByb3ZpZGVkIG11bHRpcGxpZXJzXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCB0aGUgYmFzZSBzcGFjaW5nIHZhbHVlLiBSZXR1cm5zIG51bGwgaWYgbXVsdGlwbGllciBpcyBub3QgZm91bmQuXG4qL1xuLyoqIEByZXR1cm46IHRoZSB2YWx1ZSBpbiBhIG1hcCBhc3NvY2lhdGVkIHdpdGggYSBnaXZlbiBrZXlcbiAgICBVc2U6IHotaW5kZXg6IHooJ2Jhc2UnKTtcbiovXG4vKiogUmVtb3ZlIHRoZSB1bml0IG9mIGEgbGVuZ3RoXG4gICAgQHJldHVybiBudW1iZXJcbiAgICBVc2U6ICR2YWx1ZTogc3RyaXAtdW5pdHMoMTBweCk7IC0+IDEwXG4qL1xuLyoqIEluIFNBU1Mgd2UgY2FuIG9ubHkgb25jZSBzZXQgYSB2YWx1ZSB0byB2YXJpYWJsZSB3aXRoIGZsYWcgIWRlZmF1bHQsIGFsbCBvdGhlcnMgdmFsdWVzIHdpbGwgYmUgaWdub3JlZC5cbiAgICBUaGUgdmFyaWFibGUgbXVzdCBiZSBkZWNsYXJlZC5cbiAgICBAcmV0dXJuIG5ldyB2YWx1ZSB3aXRoIGZsYWcgIWRlZmF1bHQ7XG4gICAgVXNlOiAkY29tcG9uZW50LXZhcjogcmVzZXQtdmFyKCRjb21wb25lbnQtdmFyLCAxMCk7XG4qL1xuLyoqIEV4dGVuZGVkIGRlZmF1bHQgbWFwLW1lcmdlXG4gICAgTWVyZ2UgdHdvIG1hcHMgdG9nZXRoZXIgaW50byBuZXcgbWFwLCB3L28gbnVsbCBrZXlzXG4qL1xuLyoqIE1lcmdlIGJyZWFrcG9pbnRzXG4gICAgJG9sZC1icmVha3BvaW50czogKFxuICAgICAgICAnZGVza3RvcCc6ICcobWluLXdpZHRoOiAxMTAwcHgpJyxcbiAgICAgICAgJ3RhYmxldCc6ICcobWF4LXdpZHRoOiAxMDk5cHggKSdcbiAgICApO1xuICAgICRuZXctYnJlYWtwb2ludHM6IChcbiAgICAgICAgJ2Rlc2t0b3AnOiAnKG1pbi13aWR0aDogMTIwMHB4KScsXG4gICAgICAgICd0YWJsZXQnOiBudWxsLFxuICAgICAgICAnbW9iaWxlJzogJyhtYXgtd2lkdGg6IDY0MHB4KSdcbiAgICApO1xuICAgIEByZXR1cm4gdGhlIHZhbHVlIHdpdGggYSBtZXJnZWQgYnJlYWtwb2ludHM7XG4gICAgJGJyZWFrcG9pbnRzOiAoXG4gICAgICAgICdkZXNrdG9wJycobWluLXdpZHRoOiAxMjAwcHgpJyxcbiAgICAgICAgJ21vYmlsZSc6ICcobWF4LXdpZHRoOiA2NDBweCknXG4gICAgKTtcbiAgICBVc2U6IG1lcmdlLWJyZWFrcG9pbnRzKCRvbGQtYnJlYWtwb2ludHMsICRuZXctYnJlYWtwb2ludHMpO1xuKi9cbi8qKiBHZXQgYmFzZSBicmVha3BvaW50IGxpc3RcbiAgICBAcmV0dXJuIHRoZSBsaXN0IG9mIGJhc2UgYnJlYWtwb2ludHM7XG4qL1xuLyoqIEByZXR1cm4gbW9kaWZpZWQgc2VsZWN0b3JcbiAgICBVc2U6IG1vZGlmeS1zZWxlY3Rvcigkc2VsZWN0b3I6ICdhJywgJHBhcnQtYmVmb3JlOiAnfiAnKSA9PiAnfiBhJztcbiovXG4vKiogQHJldHVybiBtb2RpZmllZCBsaXN0IG9mIHNlbGVjdG9yc1xuICAgIFVzZTogbW9kaWZ5LXNlbGVjdG9yKHNlbGVjdG9yczogJ2EgLCBidXR0b24nLCAkcGFydC1iZWZvcmU6ICd+ICcpID0+ICd+IGEsIH4gYnV0dG9uJztcbiovXG4vKiogQHJldHVybiB0aGUgbGlzdCBvZiBDU1Mgc2VsZWN0b3JzIGZvciBIVE1MIGVsZW1lbnRzIHRoYXQgY2FuIHJlY2VpdmUgZm9jdXNcbiAgICBVc2U6IGZvbnQtZ2V0LWZvY3VzYWJsZS1zZWxlY3RvcigpID0+ICdhW2hyZWZdOm5vdChbdGFiaW5kZXg9XCItMVwiXSksIGlucHV0Om5vdChbZGlzYWJsZWRdKTpub3QoW3RhYmluZGV4PVwiLTFcIl0pJztcbiovXG4vKiBAdGhlbWU6IGRlZmF1bHQ7ICovXG4vKiBAdGhlbWU6IGRlZmF1bHQ7ICovXG4vKiogTGlzdCB3aXRoIHRoZW1lIGZvbnRzXG4gICAnbWFpbic6IChcbiAgICAgICAgJ2ZhbWlseSc6ICdBcmlhbCcsXG4gICAgICAgICd2YXJpYW50cyc6IChcbiAgICAgICAgICAgIChcbiAgICAgICAgICAgICAgICAncGF0aCc6ICcnLFxuICAgICAgICAgICAgICAgICd3ZWlnaHQnOiA2MDAsXG4gICAgICAgICAgICAgICAgJ3N0eWxlJzogbm9ybWFsXG4gICAgICAgICAgICApXG4gICAgICAgICksXG4gICAgICAgICdmb3JtYXRzJzogKCd3b2ZmMicpXG4gICAgKVxuICovXG4vKiBAdGhlbWU6IGRlZmF1bHQ7ICovXG4vKiBAdGhlbWU6IGRlZmF1bHQ7ICovXG4vKiBAdGhlbWU6IGRlZmF1bHQ7ICovXG4vKiBAdGhlbWU6IGRlZmF1bHQ7ICovXG4vKiBAdGhlbWU6IGRlZmF1bHQ7ICovXG4vKiBAdGhlbWU6IGRlZmF1bHQ7ICovXG4vKiBAdGhlbWU6IGRlZmF1bHQ7ICovXG4vKiBAdGhlbWU6IGRlZmF1bHQ7ICovXG4vKiBAdGhlbWU6IGRlZmF1bHQ7ICovXG4vKiogVXNlOiBAaW5jbHVkZSBicmVha3BvaW50KCdkZXNrdG9wJykge1xuICAgICAgICBjb250ZW50XG4gICAgfVxuKi9cbi8qIEB0aGVtZTogZGVmYXVsdDsgKi9cbi8qIEB0aGVtZTogZGVmYXVsdDsgKi9cbi8qIEB0aGVtZTogZGVmYXVsdDsgKi9cbi8qIEB0aGVtZTogZGVmYXVsdDsgKi9cbi8qIEB0aGVtZTogZGVmYXVsdDsgKi9cbi8qIEB0aGVtZTogZGVmYXVsdDsgKi9cbi8qIEB0aGVtZTogZGVmYXVsdDsgKi9cbi8qIEB0aGVtZTogZGVmYXVsdDsgKi9cbi8qIEB0aGVtZTogZGVmYXVsdDsgKi9cbi8qIEB0aGVtZTogZGVmYXVsdDsgKi9cbi8qIEB0aGVtZTogZGVmYXVsdDsgKi9cbi8qIEB0aGVtZTogZGVmYXVsdDsgKi9cbi8qIEB0aGVtZTogZGVmYXVsdDsgKi9cbi8qIHN0eWxlbGludC1kaXNhYmxlLW5leHQtbGluZSBzY3NzL25vLWdsb2JhbC1mdW5jdGlvbi1uYW1lcyAqL1xuLyogQHRoZW1lOiBkZWZhdWx0OyAqL1xuLyogQHRoZW1lOiBkZWZhdWx0OyAqL1xuLyogQHRoZW1lOiBkZWZhdWx0OyAqL1xuLyogQHRoZW1lOiBkZWZhdWx0OyAqL1xuLyogQHRoZW1lOiBkZWZhdWx0OyAqL1xuLyogQHRoZW1lOiBkZWZhdWx0OyAqL1xuLyogQHRoZW1lOiBkZWZhdWx0OyAqL1xuLyogQHRoZW1lOiBkZWZhdWx0OyAqL1xuQGtleWZyYW1lcyBza2VsZXRvbi1wdWxzZSB7XG4gIDAlIHtcbiAgICBvcGFjaXR5OiAxO1xuICB9XG4gIDUwJSB7XG4gICAgb3BhY2l0eTogMC41O1xuICB9XG4gIDEwMCUge1xuICAgIG9wYWNpdHk6IDE7XG4gIH1cbn1cbi8qIEB0aGVtZTogZGVmYXVsdDsgKi9cbi8qIEB0aGVtZTogZGVmYXVsdDsgKi9cbi8qIEB0aGVtZTogZGVmYXVsdDsgKi9cbi8qIEB0aGVtZTogZGVmYXVsdDsgKi9cbi8qIEB0aGVtZTogZGVmYXVsdDsgKi9cbi8qIEB0aGVtZTogZGVmYXVsdDsgKi9cbi8qIEB0aGVtZTogZGVmYXVsdDsgKi9cbi8qIEB0aGVtZTogZGVmYXVsdDsgKi9cbi8qIEB0aGVtZTogZGVmYXVsdDsgKi9cbi8qIEB0aGVtZTogZGVmYXVsdDsgKi9cbi8qIEB0aGVtZTogZGVmYXVsdDsgKi9cbi8qIEB0aGVtZTogZGVmYXVsdDsgKi9cbi8qKiBSZW5kZXIgbWFwIG9mIGNzcyBwcm9wZXJ0aWVzIGFzIGtleTogdmFsdWU7XG4qL1xuLyoqIFJlbmRlciBtYXAgb2YgY3NzIHByb3BlcnRpZXMgYXMga2V5OiB2YWx1ZTsgd2hlcmUgdmFsdWUgaGFzIGdlbmVyYXRlZCBjc3MtcHJvcGVydHlcbiovXG4vKiogUmVuZGVyIHN0YXRlcyBvZiBjb21wb25lbnQgZnJvbSBhIG1hcFxuKi9cbi8qIEB0aGVtZTogZGVmYXVsdDsgKi9cbi8qIEB0aGVtZTogZGVmYXVsdDsgKi9cbi8qIEB0aGVtZTogZGVmYXVsdDsgKi9cbi8qIEB0aGVtZTogZGVmYXVsdDsgKi9cbi8qIEB0aGVtZTogZGVmYXVsdDsgKi9cbi8qIEB0aGVtZTogZGVmYXVsdDsgKi9cbi8qIEB0aGVtZTogZGVmYXVsdDsgKi9cbi8qIEB0aGVtZTogZGVmYXVsdDsgKi9cbi8qIEB0aGVtZTogZGVmYXVsdDsgKi9cbi5ncmlkLWhlYWRlci1jZWxsLmFjdGlvbi1jb2x1bW46ZW1wdHk6OmJlZm9yZSB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG4uZ3JpZC1oZWFkZXItY2VsbCAuZGF0YWdyaWQtbWFzc2FjdGlvbiB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG5cbi8qIEB0aGVtZTogZGVmYXVsdDsgKi9cbmh0bWwge1xuICBiYWNrZ3JvdW5kOiBub25lO1xufVxuXG4uYm9keSB7XG4gIG1hcmdpbjogMCBhdXRvO1xufVxuXG50aGVhZCB7XG4gIGRpc3BsYXk6IHRhYmxlLWhlYWRlci1ncm91cDtcbn1cblxudHIsXG5pbWcge1xuICBwYWdlLWJyZWFrLWluc2lkZTogYXZvaWQ7XG59XG5cbnAsXG5oMixcbmgzIHtcbiAgb3JwaGFuczogMztcbiAgd2lkb3dzOiAzO1xufVxuXG50ciB7XG4gIHBhZ2UtYnJlYWstaW5zaWRlOiBhdm9pZDtcbn1cblxuaW1nIHtcbiAgbWF4LXdpZHRoOiAxMDAlICFpbXBvcnRhbnQ7XG4gIHBhZ2UtYnJlYWstaW5zaWRlOiBhdm9pZDtcbn1cblxubm9zY3JpcHQge1xuICBkaXNwbGF5OiBub25lO1xufVxuXG5AcGFnZSB7XG4gIG1hcmdpbjogMTBtbTtcbn1cbi8qIEB0aGVtZTogZGVmYXVsdDsgKi9cbi5wYWdlLWNvbnRhaW5lciB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBtaW4taGVpZ2h0OiBpbml0aWFsO1xufVxuXG4vKiBAdGhlbWU6IGRlZmF1bHQ7ICovXG4uZGF0YWdyaWQtdG9vbGJhciB7XG4gIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDtcbn1cblxuLyogQHRoZW1lOiBkZWZhdWx0OyAqL1xuLnBhZ2UtaGVhZGVyIHtcbiAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O1xufVxuXG4vKiBAdGhlbWU6IGRlZmF1bHQ7ICovXG4ucGFnZS1mb290ZXIge1xuICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7XG59XG5cbi8qIEB0aGVtZTogZGVmYXVsdDsgKi9cbi5wYWdlLWNvbnRlbnQge1xuICB3aWR0aDogMTAwJTtcbn1cbi5wYWdlLWNvbnRlbnQtLWhhcy1zaWRlYmFyIHtcbiAgcGFkZGluZzogMDtcbn1cblxuLyogQHRoZW1lOiBkZWZhdWx0OyAqL1xuLnBhZ2Utc2lkZWJhciB7XG4gIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDtcbn1cblxuLyogQHRoZW1lOiBkZWZhdWx0OyAqL1xuLnBhZ2UtdGl0bGUge1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG59XG5cbi5wYWdlLXRpdGxlLWFjdGlvbnMge1xuICBkaXNwbGF5OiBub25lO1xufVxuXG4vKiBAdGhlbWU6IGRlZmF1bHQ7ICovXG4ubG9nby0tcHJpbnQtb25seSB7XG4gIGRpc3BsYXk6IGJsb2NrO1xufVxuXG4vKiBAdGhlbWU6IGRlZmF1bHQ7ICovXG4ubm90aWZpY2F0aW9uLWZsYXNoLWNvbnRhaW5lciB7XG4gIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDtcbn1cblxuLyogQHRoZW1lOiBkZWZhdWx0OyAqL1xuLmJyZWFkY3J1bWJzIHtcbiAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O1xufVxuXG4vKiBAdGhlbWU6IGRlZmF1bHQ7ICovXG4uc2Nyb2xsLXRvcCB7XG4gIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDtcbn1cblxuLyogQHRoZW1lOiBkZWZhdWx0OyAqL1xuLnBhZ2UtbWFpbl9fY29udGVudCB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBtYXJnaW46IDA7XG59XG5cbi8qIEB0aGVtZTogZGVmYXVsdDsgKi9cbi5ib3gtdG9vbGJhcl9fYWN0aW9ucyB7XG4gIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDtcbn1cblxuLyogQHRoZW1lOiBkZWZhdWx0OyAqL1xuLyogc3R5bGVsaW50LWRpc2FibGUgZGVjbGFyYXRpb24tbm8taW1wb3J0YW50ICovXG4uZnJvbnRlbmQtZGF0YWdyaWQtLXJlc3BvbnNpdmUgLnRvb2xiYXItdG9wIHtcbiAgZGlzcGxheTogbm9uZTtcbn1cbi5mcm9udGVuZC1kYXRhZ3JpZC0tcmVzcG9uc2l2ZSAuZ3JpZC1oZWFkZXItY2VsbCB7XG4gIGRpc3BsYXk6IHRhYmxlLWNlbGwgIWltcG9ydGFudDtcbiAgcGFkZGluZy1sZWZ0OiA4cHg7XG4gIHBhZGRpbmctcmlnaHQ6IDhweDtcbiAgYmFja2dyb3VuZDogbm9uZSAhaW1wb3J0YW50O1xufVxuLmZyb250ZW5kLWRhdGFncmlkLS1yZXNwb25zaXZlIC5ncmlkLWhlYWRlci1jZWxsOmZpcnN0LWNoaWxkIHtcbiAgcGFkZGluZy1sZWZ0OiAwO1xufVxuLmZyb250ZW5kLWRhdGFncmlkLS1yZXNwb25zaXZlIC5ncmlkLWhlYWRlci1jZWxsOmxhc3QtY2hpbGQge1xuICBwYWRkaW5nLXJpZ2h0OiAwO1xufVxuLmZyb250ZW5kLWRhdGFncmlkLS1yZXNwb25zaXZlIC5ncmlkLWhlYWRlci1jZWxsLmFjdGlvbi1jb2x1bW4ge1xuICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7XG59XG4uZnJvbnRlbmQtZGF0YWdyaWQtLXJlc3BvbnNpdmUgLmdyaWQtYm9keSB7XG4gIGRpc3BsYXk6IHRhYmxlLXJvdy1ncm91cCAhaW1wb3J0YW50O1xufVxuLmZyb250ZW5kLWRhdGFncmlkLS1yZXNwb25zaXZlIC5ncmlkLXJvdyxcbi5mcm9udGVuZC1kYXRhZ3JpZC0tcmVzcG9uc2l2ZSAuZ3JpZC1oZWFkZXItcm93IHtcbiAgZGlzcGxheTogdGFibGUtcm93ICFpbXBvcnRhbnQ7XG59XG4uZnJvbnRlbmQtZGF0YWdyaWQtLXJlc3BvbnNpdmUgLmdyaWQtYm9keS1jZWxsIHtcbiAgZGlzcGxheTogdGFibGUtY2VsbCAhaW1wb3J0YW50O1xuICBwYWRkaW5nOiA4cHg7XG4gIGJhY2tncm91bmQ6IG5vbmUgIWltcG9ydGFudDtcbn1cbi5mcm9udGVuZC1kYXRhZ3JpZC0tcmVzcG9uc2l2ZSAuZ3JpZC1ib2R5LWNlbGw6Zmlyc3QtY2hpbGQge1xuICBwYWRkaW5nLWxlZnQ6IDA7XG59XG4uZnJvbnRlbmQtZGF0YWdyaWQtLXJlc3BvbnNpdmUgLmdyaWQtYm9keS1jZWxsOmxhc3QtY2hpbGQge1xuICBwYWRkaW5nLXJpZ2h0OiAwO1xufVxuLmZyb250ZW5kLWRhdGFncmlkLS1yZXNwb25zaXZlIC5ncmlkLXJvdzpmaXJzdC1jaGlsZCAuZ3JpZC1ib2R5LWNlbGwge1xuICBwYWRkaW5nLXRvcDogOHB4O1xufVxuXG4uZ3JpZC12aWV3cyB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG5cbi8qIHN0eWxlbGludC1lbmFibGUgZGVjbGFyYXRpb24tbm8taW1wb3J0YW50ICovXG4vKiBAdGhlbWU6IGRlZmF1bHQ7ICovXG4uY3VzdG9tZXItaW5mby1ncmlkIC5ncmlkX19jb2x1bW4ge1xuICB3aWR0aDogNTAlO1xufVxuLmN1c3RvbWVyLWluZm8tZ3JpZF9fZWxlbWVudC1sYWJlbCB7XG4gIHdoaXRlLXNwYWNlOiBub3JtYWw7XG59XG4uY3VzdG9tZXItaW5mby1ncmlkX192aWV3LW1vcmUge1xuICBkaXNwbGF5OiBub25lO1xufVxuXG4vKiBAdGhlbWU6IGRlZmF1bHQ7ICovXG4uY3VzdG9tZXItbGluZS1pdGVtcy0tcmZxIC5ncmlkLWhlYWRlci1jZWxsLW5vdGVzIHtcbiAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O1xufVxuLmN1c3RvbWVyLWxpbmUtaXRlbXMtLXJmcSAuZ3JpZC1ib2R5LWNlbGwtcXR5OjpiZWZvcmUsIC5jdXN0b21lci1saW5lLWl0ZW1zLS1yZnEgLmdyaWQtYm9keS1jZWxsLXByaWNlOjpiZWZvcmUge1xuICBkaXNwbGF5OiBub25lO1xufVxuLmN1c3RvbWVyLWxpbmUtaXRlbXMtLXJmcSAuZ3JpZC1ib2R5LWNlbGwtcHJvZHVjdCAuY3VzdG9tZXItbGluZS1pdGVtc19fbm90ZSB7XG4gIGRpc3BsYXk6IGJsb2NrO1xufVxuLmN1c3RvbWVyLWxpbmUtaXRlbXMtLXJmcSAuZ3JpZC1ib2R5LWNlbGwtbm90ZXMge1xuICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7XG59XG5cbi8qIEB0aGVtZTogZGVmYXVsdDsgKi9cbi5vcmRlci1jaGVja291dC13aWRnZXQge1xuICBwYWdlLWJyZWFrLWluc2lkZTogYXZvaWQ7XG59XG4ub3JkZXItY2hlY2tvdXQtd2lkZ2V0X19xdW90ZSB7XG4gIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDtcbn1cbi5vcmRlci1jaGVja291dC13aWRnZXRfX2NvbnRhaW5lci13cmFwcGVyIHtcbiAgbWFyZ2luLWJvdHRvbTogMDtcbn1cblxuLyogQHRoZW1lOiBkZWZhdWx0OyAqL1xuLm9yZGVyLWJ1aWxkZXItY2xlYXItYnRuIHtcbiAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O1xufSIsIi8qIEB0aGVtZTogZGVmYXVsdDsgKi9cblxuQG1peGluIHRhYmxlLWJhc2UoXG4gICAgJHRhYmxlLXdpZHRoOiAgICAgICAgICR0YWJsZS13aWR0aCxcbiAgICAkdGFibGUtdGV4dC1hbGlnbjogICAgJHRhYmxlLXRleHQtYWxpZ24sXG4gICAgJHRhYmxlLW1hcmdpbi1ib3R0b206ICR0YWJsZS1tYXJnaW4tYm90dG9tLFxuICAgICRoZWFkLXBhZGRpbmc6ICAgICAgICAkdGFibGUtaGVhZC1wYWRkaW5nLFxuICAgICRyb3ctcGFkZGluZzogICAgICAgICAkdGFibGUtcm93LXBhZGRpbmdcbikge1xuICAgIHdpZHRoOiAkdGFibGUtd2lkdGg7XG4gICAgbWFyZ2luLWJvdHRvbTogJHRhYmxlLW1hcmdpbi1ib3R0b207XG5cbiAgICBib3JkZXItc3BhY2luZzogMDtcbiAgICBib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlO1xuXG4gICAgJl9fdGQge1xuICAgICAgICBwYWRkaW5nOiAkcm93LXBhZGRpbmc7XG5cbiAgICAgICAgdGV4dC1hbGlnbjogJHRhYmxlLXRleHQtYWxpZ247XG4gICAgfVxuXG4gICAgJl9fdGgge1xuICAgICAgICBwYWRkaW5nOiAkaGVhZC1wYWRkaW5nO1xuXG4gICAgICAgIHRleHQtYWxpZ246ICR0YWJsZS10ZXh0LWFsaWduO1xuICAgIH1cbn1cbiIsIi8qIEB0aGVtZTogZGVmYXVsdDsgKi9cblxuQG1peGluIG1vc2FpYy1ncmlkKFxuICAgICRtb3NhaWMtZ3JpZC1jb2x1bW4td2lkdGg6IGF1dG8sXG4gICAgJG1vc2FpYy1ncmlkLWNvbHVtbi1jb3VudDogM1xuKSB7XG4gICAgY29sdW1uczogJG1vc2FpYy1ncmlkLWNvbHVtbi13aWR0aCAkbW9zYWljLWdyaWQtY29sdW1uLWNvdW50O1xufVxuXG5AbWl4aW4gbW9zYWljLWdyaWQtYnJlYWstaW5zaWRlKFxuICAgICRicmVhay1pbnNpZGUtdmFsdWU6IGF2b2lkXG4pIHtcbiAgICBwYWdlLWJyZWFrLWluc2lkZTogJGJyZWFrLWluc2lkZS12YWx1ZTtcbiAgICBicmVhay1pbnNpZGU6ICRicmVhay1pbnNpZGUtdmFsdWU7XG59XG4iLCIvKiBAdGhlbWU6IGRlZmF1bHQ7ICovXG5cbkBtaXhpbiBncmlkLWNlbGwtYWxpZ24oKSB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHRvcDogNTAlO1xuICAgIGxlZnQ6IDUwJTtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAtNTAlKTtcbn1cbiIsIi8qIEB0aGVtZTogZGVmYXVsdDsgKi9cblxuQG1peGluIGJhZGdlKFxuICAgICRiYWRnZS1zaXplOiAgICAgICAgdmFyKC0tYmFkZ2Utc2l6ZSwgMThweCksXG4gICAgJGJhZGdlLWYtc2l6ZTogICAgICB2YXIoLS1iYWRnZS1mLXNpemUsIDEycHgpLFxuICAgICRiYWRnZS1iZzogICAgICAgICAgdmFyKC0tYmFkZ2UtYmctY29sb3IsIGdldC12YXItY29sb3IoJ3ByaW1hcnknLCAnbWFpbicpKSxcbiAgICAkYmFkZ2UtcmFkaXVzOiAgICAgIDEwMHB4LFxuICAgICRiYWRnZS1jb2xvcjogICAgICAgdmFyKC0tYmFkZ2UtY29sb3IsIGdldC12YXItY29sb3IoJ25ldXRyYWwnLCAnd2hpdGUtMTAwJykpLFxuICAgICRiYWRnZS1pY29uLWFsaWduOiAgYmFzZWxpbmUsXG4gICAgJGJhZGdlLWljb24tb2Zmc2V0OiAwLFxuICAgICRiYWRnZS1pY29uLWxpbmUtaGVpZ2h0OiBpbmhlcml0XG4pIHtcbiAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuXG4gICAgbWluLXdpZHRoOiAkYmFkZ2Utc2l6ZTtcbiAgICBtaW4taGVpZ2h0OiAkYmFkZ2Utc2l6ZTtcblxuICAgIHBhZGRpbmctaW5saW5lOiA1cHg7XG4gICAgbGV0dGVyLXNwYWNpbmc6IC4ycHg7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgIGZvbnQtd2VpZ2h0OiBmb250LXdlaWdodCgnbWVkaXVtJyk7XG4gICAgZm9udC1zaXplOiAkYmFkZ2UtZi1zaXplO1xuICAgIGJhY2tncm91bmQtY29sb3I6ICRiYWRnZS1iZztcbiAgICBib3JkZXItcmFkaXVzOiAkYmFkZ2UtcmFkaXVzO1xuICAgIGNvbG9yOiAkYmFkZ2UtY29sb3I7XG5cbiAgICAudGhlbWUtaWNvbiB7XG4gICAgICAgIG1hcmdpbjogJGJhZGdlLWljb24tb2Zmc2V0O1xuXG4gICAgICAgIGxpbmUtaGVpZ2h0OiAkYmFkZ2UtaWNvbi1saW5lLWhlaWdodDtcbiAgICB9XG59XG4iLCIvKiBAdGhlbWU6IGRlZmF1bHQ7ICovXG5cbkBtaXhpbiBpbmRpY2F0b3IoXG4gICAgJGluZGljYXRvci13aWR0aDogdmFyKC0taW5kaWNhdG9yLXdpZHRoLCA4cHgpLFxuICAgICRpbmRpY2F0b3ItaGVpZ2h0OiB2YXIoLS1pbmRpY2F0b3ItaGVpZ2h0LCA4cHgpLFxuICAgICRpbmRpY2F0b3ItYmFja2dyb3VuZC1jb2xvcjogdmFyKC0taW5kaWNhdG9yLWJnLWNvbG9yLCBnZXQtdmFyLWNvbG9yKCdwcmltYXJ5JywgJ21haW4nKSksXG4pIHtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICB3aWR0aDogJGluZGljYXRvci13aWR0aDtcbiAgICBoZWlnaHQ6ICRpbmRpY2F0b3ItaGVpZ2h0O1xuXG4gICAgYm9yZGVyLXJhZGl1czogNTAlO1xuICAgIGJhY2tncm91bmQtY29sb3I6ICRpbmRpY2F0b3ItYmFja2dyb3VuZC1jb2xvcjtcbn1cbiIsIi8qIEB0aGVtZTogZGVmYXVsdDsgKi9cblxuQG1peGluIGJhci1zZXBhcmF0b3IoXG4gICAgJGJhci1zZXBhcmF0b3ItZGlzcGxheTogaW5saW5lLWZsZXgsXG4gICAgJGJhci1zZXBhcmF0b3ItanVzdGlmeS1jb250ZW50OiBjZW50ZXIsXG4gICAgJGJhci1zZXBhcmF0b3ItdGV4dC1hbGlnbjogY2VudGVyLFxuICAgICRiYXItc2VwYXJhdG9yLWNvbnRlbnQ6ICd8JyxcbiAgICAkYmFyLXNlcGFyYXRvci13aWR0aDogc3BhY2luZygnYmFzZScpLFxuICAgICRiYXItc2VwYXJhdG9yLWNvbG9yOiBnZXQtY29sb3IoJ3RleHQnLCAnc2Vjb25kYXJ5JyksXG5cbikge1xuICAgIGRpc3BsYXk6ICRiYXItc2VwYXJhdG9yLWRpc3BsYXk7XG4gICAganVzdGlmeS1jb250ZW50OiAkYmFyLXNlcGFyYXRvci1qdXN0aWZ5LWNvbnRlbnQ7XG4gICAgd2lkdGg6ICRiYXItc2VwYXJhdG9yLXdpZHRoO1xuICAgIGNvbG9yOiAkYmFyLXNlcGFyYXRvci1jb2xvcjtcbiAgICB0ZXh0LWFsaWduOiAkYmFyLXNlcGFyYXRvci10ZXh0LWFsaWduO1xuICAgIGNvbnRlbnQ6ICRiYXItc2VwYXJhdG9yLWNvbnRlbnQ7XG59XG4iLCIvKiBAdGhlbWU6IGRlZmF1bHQ7ICovXG5cbi8vIG1peGluIGZvciBTbGljayBBcnJvd3NcbkBtaXhpbiBzbGljay1hcnJvdyhcbiAgICAkc2xpY2stYXJyb3ctY2xhc3M6ICcuc2xpY2stYXJyb3cnLFxuICAgICRzbGljay1hcnJvdy1wb3NpdGlvbjogYWJzb2x1dGUsXG4gICAgJHNsaWNrLWFycm93LXRvcDogNTAlLFxuICAgICRzbGljay1hcnJvdy10cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTUwJSksXG4gICAgJHNsaWNrLWFycm93LXotaW5kZXg6IHooJ2Jhc2UnKSxcblxuICAgICRzbGljay1hcnJvdy13aWR0aDogNDRweCxcbiAgICAkc2xpY2stYXJyb3ctaGVpZ2h0OiA0NHB4LFxuICAgICRzbGljay1hcnJvdy1kaXNwbGF5OiBudWxsLFxuICAgICRzbGljay1hcnJvdy1pbm5lci1vZmZzZXQ6IDAsXG5cbiAgICAkc2xpY2stYXJyb3ctZm9udC1zaXplOiAwLFxuICAgICRzbGljay1hcnJvdy1saW5lLWhlaWdodDogMCxcbiAgICAkc2xpY2stYXJyb3ctdGV4dC1hbGlnbjogY2VudGVyLFxuICAgICRzbGljay1hcnJvdy1vdXRsaW5lOiBudWxsLFxuICAgICRzbGljay1hcnJvdy1jb2xvcjogZ2V0LWNvbG9yKCd0ZXh0JywgJ3ByaW1hcnknKSxcblxuICAgICRzbGljay1hcnJvdy1iYWNrZ3JvdW5kOiBub25lLFxuICAgICRzbGljay1hcnJvdy1ob3Zlci1iYWNrZ3JvdW5kOiBudWxsLFxuICAgICRzbGljay1hcnJvdy1ib3JkZXI6IG5vbmUsXG4gICAgJHNsaWNrLWFycm93LWJvcmRlci1yYWRpdXM6IG51bGwsXG5cbiAgICAkc2xpY2stYXJyb3ctZm9jdXMtdmlzaWJsZTogJGJhc2UtdWktZWxlbWVudC1mb2N1cy12aXNpYmxlLXN0eWxlLFxuXG4gICAgJHNsaWNrLWFycm93LWZvY3VzLWJhY2tncm91bmQ6IG51bGwsXG5cbiAgICAkc2xpY2stYXJyb3ctbmV4dC1yaWdodDogMCxcbiAgICAkc2xpY2stYXJyb3ctcHJldi1sZWZ0OiAwLFxuXG4gICAgJHNsaWNrLWFycm93LW5leHQtaWNvbi1vZmZzZXQ6IG51bGwsXG4gICAgJHNsaWNrLWFycm93LXByZXYtaWNvbi1vZmZzZXQ6IG51bGwsXG5cbiAgICAkc2xpY2stYXJyb3ctZGlzYWJsZWQtb3BhY2l0eTogLjUsXG4gICAgJHNsaWNrLWFycm93LWRpc2FibGVkLWN1cnNvcjogZGVmYXVsdFxuKSB7XG4gICAgI3skc2xpY2stYXJyb3ctY2xhc3N9IHtcbiAgICAgICAgcG9zaXRpb246ICRzbGljay1hcnJvdy1wb3NpdGlvbjtcbiAgICAgICAgdG9wOiAkc2xpY2stYXJyb3ctdG9wO1xuICAgICAgICB0cmFuc2Zvcm06ICRzbGljay1hcnJvdy10cmFuc2Zvcm07XG4gICAgICAgIHotaW5kZXg6ICRzbGljay1hcnJvdy16LWluZGV4O1xuXG4gICAgICAgIHdpZHRoOiAkc2xpY2stYXJyb3ctd2lkdGg7XG4gICAgICAgIGhlaWdodDogJHNsaWNrLWFycm93LWhlaWdodDtcbiAgICAgICAgZGlzcGxheTogJHNsaWNrLWFycm93LWRpc3BsYXk7XG4gICAgICAgIHBhZGRpbmc6ICRzbGljay1hcnJvdy1pbm5lci1vZmZzZXQ7XG5cbiAgICAgICAgb3V0bGluZTogJHNsaWNrLWFycm93LW91dGxpbmU7XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAkc2xpY2stYXJyb3ctbGluZS1oZWlnaHQ7XG4gICAgICAgIHRleHQtYWxpZ246ICRzbGljay1hcnJvdy10ZXh0LWFsaWduO1xuXG4gICAgICAgIGJhY2tncm91bmQ6ICRzbGljay1hcnJvdy1iYWNrZ3JvdW5kO1xuICAgICAgICBjb2xvcjogJHNsaWNrLWFycm93LWNvbG9yO1xuICAgICAgICBib3JkZXI6ICRzbGljay1hcnJvdy1ib3JkZXI7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6ICRzbGljay1hcnJvdy1ib3JkZXItcmFkaXVzO1xuXG4gICAgICAgIGN1cnNvcjogcG9pbnRlcjtcblxuICAgICAgICAmOmZvY3VzLXZpc2libGUge1xuICAgICAgICAgICAgYm94LXNoYWRvdzogJHNsaWNrLWFycm93LWZvY3VzLXZpc2libGU7XG4gICAgICAgIH1cblxuICAgICAgICBAaW5jbHVkZSBlbGVtZW50LXN0YXRlKCdob3ZlcicpIHtcbiAgICAgICAgICAgIGJhY2tncm91bmQ6ICRzbGljay1hcnJvdy1ob3Zlci1iYWNrZ3JvdW5kO1xuICAgICAgICB9XG5cbiAgICAgICAgQGluY2x1ZGUgZWxlbWVudC1zdGF0ZSgnZm9jdXMnKSB7XG4gICAgICAgICAgICBiYWNrZ3JvdW5kOiAkc2xpY2stYXJyb3ctZm9jdXMtYmFja2dyb3VuZDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC5zbGljay1wcmV2IHtcbiAgICAgICAgbGVmdDogJHNsaWNrLWFycm93LXByZXYtbGVmdDtcbiAgICB9XG5cbiAgICAuc2xpY2stbmV4dCB7XG4gICAgICAgIHJpZ2h0OiAkc2xpY2stYXJyb3ctbmV4dC1yaWdodDtcbiAgICB9XG5cbiAgICAuc2xpY2stZGlzYWJsZWQge1xuICAgICAgICBjdXJzb3I6ICRzbGljay1hcnJvdy1kaXNhYmxlZC1jdXJzb3I7XG4gICAgICAgIG9wYWNpdHk6ICRzbGljay1hcnJvdy1kaXNhYmxlZC1vcGFjaXR5O1xuICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgICB9XG59XG4iLCIvKiBAdGhlbWU6IGRlZmF1bHQ7ICovXG5cbi8vIG1peGluIGZvciBTbGljayBzbGlkZXIgZG90cyBuYXZpZ2F0aW9uXG5AbWl4aW4gc2xpY2stZG90cyhcbiAgICAkc2xpY2stZG90cy1jbGFzczogICAgICAgICAgICAgICAgICAgICcuc2xpY2stZG90cycsXG4gICAgJHNsaWNrLWRvdHMtYm90dG9tLXBvczogICAgICAgICAgICAgICBzcGFjaW5nKCdiYXNlJyksXG4gICAgJHNsaWNrLWRvdHMtaXRlbS1vZmZzZXQ6ICAgICAgICAgICAgICBudWxsLFxuICAgICRzbGljay1kb3RzLWxpbmUtaGVpZ2h0OiAgICAgICAgICAgICAgMCxcbiAgICAkc2xpY2stZG90cy1idXR0b24taGVpZ2h0OiAgICAgICAgICAgIDZweCxcbiAgICAkc2xpY2stZG90cy1idXR0b24td2lkdGg6ICAgICAgICAgICAgIDI4cHgsXG4gICAgJHNsaWNrLWRvdHMtYnV0dG9uLXBhZGRpbmc6ICAgICAgICAgICAxOXB4IDhweCxcbiAgICAkc2xpY2stZG90cy1hbGlnbi1pdGVtczogICAgICAgICAgICAgIGNlbnRlcixcbiAgICAkc2xpY2stZG90cy1qdXN0aWZ5LWNvbnRlbnQ6ICAgICAgICAgIGNlbnRlcixcbiAgICAkc2xpY2stZG90cy1idXR0b24tYmc6ICAgICAgICAgICAgICAgIGdldC1jb2xvcignbmV1dHJhbCcsICdncmV5MicpLFxuICAgICRzbGljay1kb3RzLWJ1dHRvbi1iZy1ob3ZlcjogICAgICAgICAgZ2V0LWNvbG9yKCduZXV0cmFsJywgJ2dyZXkzJyksXG4gICAgJHNsaWNrLWRvdHMtYnV0dG9uLWJvcmRlcjogICAgICAgICAgICBub25lLFxuICAgICRzbGljay1kb3RzLWJ1dHRvbi1ib3gtc2hhZG93OiAgICAgICAgbm9uZSxcbiAgICAkc2xpY2stZG90cy1idXR0b24tYm9yZGVyLXJhZGl1czogICAgICRiYXNlLXVpLWVsZW1lbnQtYm9yZGVyLXJhZGl1cyxcbiAgICAkc2xpY2stZG90cy1idXR0b24tYWN0aXZlLWJvcmRlcjogICAgIG5vbmUsXG4gICAgJHNsaWNrLWRvdHMtYnV0dG9uLWFjdGl2ZS1iZzogICAgICAgICBnZXQtY29sb3IoJ3ByaW1hcnknLCAnYWN0aXZlJyksXG4gICAgJHNsaWNrLWRvdHMtYnV0dG9uLWFjdGl2ZS1ib3gtc2hhZG93OiBub25lLFxuICAgICRzbGljay1kb3RzLXBhZGRpbmc6ICAgICAgICAgICAgICAgICAgMCxcbiAgICAkc2xpY2stZG90cy1tYXJnaW46ICAgICAgICAgICAgICAgICAgIDAsXG4gICAgJHNsaWNrLWRvdHMtd2lkdGg6ICAgICAgICAgICAgICAgICAgICAxMDAlXG4pIHtcbiAgICAjeyRzbGljay1kb3RzLWNsYXNzfSB7XG4gICAgICAgIHdpZHRoOiAkc2xpY2stZG90cy13aWR0aDtcbiAgICAgICAgbWFyZ2luOiAkc2xpY2stZG90cy1tYXJnaW47XG4gICAgICAgIHBhZGRpbmc6ICRzbGljay1kb3RzLXBhZGRpbmc7XG4gICAgICAgIGxpc3Qtc3R5bGU6IG5vbmU7XG4gICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgIGFsaWduLWl0ZW1zOiAkc2xpY2stZG90cy1hbGlnbi1pdGVtcztcbiAgICAgICAganVzdGlmeS1jb250ZW50OiAkc2xpY2stZG90cy1qdXN0aWZ5LWNvbnRlbnQ7XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAkc2xpY2stZG90cy1saW5lLWhlaWdodDtcblxuICAgICAgICBsaSB7XG4gICAgICAgICAgICBtYXJnaW46ICRzbGljay1kb3RzLWl0ZW0tb2Zmc2V0O1xuICAgICAgICAgICAgdHJhbnNpdGlvbjogd2lkdGggLjE1cyBsaW5lYXIsIGhlaWdodCAuMTVzIGxpbmVhcjtcblxuICAgICAgICAgICAgJi5zbGljay1hY3RpdmUge1xuICAgICAgICAgICAgICAgIGJ1dHRvbiB7XG4gICAgICAgICAgICAgICAgICAgICY6YmVmb3JlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICRzbGljay1kb3RzLWJ1dHRvbi1hY3RpdmUtYmc7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBidXR0b24ge1xuICAgICAgICAgICAgcGFkZGluZzogJHNsaWNrLWRvdHMtYnV0dG9uLXBhZGRpbmc7XG4gICAgICAgICAgICBmb250LXNpemU6IDA7XG4gICAgICAgICAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgICAgICAgICBib3JkZXI6IG5vbmU7XG4gICAgICAgICAgICBib3gtc2hhZG93OiBub25lO1xuICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XG5cbiAgICAgICAgICAgICY6YmVmb3JlIHtcbiAgICAgICAgICAgICAgICBjb250ZW50OiAnJztcbiAgICAgICAgICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgICAgICAgICB3aWR0aDogJHNsaWNrLWRvdHMtYnV0dG9uLXdpZHRoO1xuICAgICAgICAgICAgICAgIGhlaWdodDogJHNsaWNrLWRvdHMtYnV0dG9uLWhlaWdodDtcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkc2xpY2stZG90cy1idXR0b24tYmc7XG4gICAgICAgICAgICAgICAgYm9yZGVyOiAkc2xpY2stZG90cy1idXR0b24tYm9yZGVyO1xuICAgICAgICAgICAgICAgIGJveC1zaGFkb3c6ICRzbGljay1kb3RzLWJ1dHRvbi1ib3gtc2hhZG93O1xuICAgICAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6ICRzbGljay1kb3RzLWJ1dHRvbi1ib3JkZXItcmFkaXVzO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAmOmhvdmVyIHtcbiAgICAgICAgICAgICAgICAmOmJlZm9yZSB7XG4gICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICRzbGljay1kb3RzLWJ1dHRvbi1iZy1ob3ZlcjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG4iLCIvKiBAdGhlbWU6IGRlZmF1bHQ7ICovXG5cbiVkaXJlY3QtbGluayB7XG4gICAgcGFkZGluZzogMCAxMHB4O1xuICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbn1cblxuQG1peGluIGRpcmVjdC1saW5rKCkge1xuICAgIEBleHRlbmQgJWRpcmVjdC1saW5rO1xufVxuIiwiLyogQHRoZW1lOiBkZWZhdWx0OyAqL1xuXG5AbWl4aW4gbG9hZGluZy1ibHVyIHtcbiAgICBmaWx0ZXI6IGJsdXIoMnB4KTtcbiAgICAvLyBGaXggaXNzdWUgd2l0aCBibHVyIGFydGVmYWN0cyBvbiBzYWZhcmlcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKDAsIDAsIDApO1xufVxuIiwiLyogQHRoZW1lOiBkZWZhdWx0OyAqL1xuXG5AbWl4aW4gbG9hZGluZy1ibHVyLW92ZXJsYXkge1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcblxuICAgIHBvaW50ZXItZXZlbnRzOiBub25lO1xuICAgIHVzZXItc2VsZWN0OiBub25lO1xuXG4gICAgQGluY2x1ZGUgbG9hZGluZy1ibHVyKCk7XG5cbiAgICAmOjpiZWZvcmUge1xuICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgIHRvcDogMDtcbiAgICAgICAgcmlnaHQ6IDA7XG4gICAgICAgIGJvdHRvbTogMDtcbiAgICAgICAgbGVmdDogMDtcblxuICAgICAgICB6LWluZGV4OiB6KCdkcm9wZG93bicpO1xuXG4gICAgICAgIGNvbnRlbnQ6ICcnO1xuICAgIH1cbn1cbiIsIi8qIEB0aGVtZTogZGVmYXVsdDsgKi9cblxuQHVzZSAnc2FzczptZXRhJztcbkB1c2UgJ3Nhc3M6bWFwJztcblxuLyoqIFJlbmRlciBtYXAgb2YgY3NzIHByb3BlcnRpZXMgYXMga2V5OiB2YWx1ZTtcbiovXG5AbWl4aW4gcmVuZGVyLXByb3BlcnRpZXMoJHByb3BlcnRpZXMpIHtcbiAgICBAaWYgJHByb3BlcnRpZXMgYW5kIG1ldGEudHlwZS1vZigkcHJvcGVydGllcykgPT0gJ21hcCcge1xuICAgICAgICBAZWFjaCAka2V5LCAkdmFsdWUgaW4gJHByb3BlcnRpZXMge1xuICAgICAgICAgICAgI3ska2V5fTogI3skdmFsdWV9O1xuICAgICAgICB9XG4gICAgfVxufVxuXG4vKiogUmVuZGVyIG1hcCBvZiBjc3MgcHJvcGVydGllcyBhcyBrZXk6IHZhbHVlOyB3aGVyZSB2YWx1ZSBoYXMgZ2VuZXJhdGVkIGNzcy1wcm9wZXJ0eVxuKi9cbkBtaXhpbiByZW5kZXItdmFyLXByb3BlcnRpZXMoJHByb3BlcnRpZXMsICR2YXItcHJlZml4OiBudWxsKSB7XG4gICAgQGlmICRwcm9wZXJ0aWVzIGFuZCBtZXRhLnR5cGUtb2YoJHByb3BlcnRpZXMpID09ICdtYXAnIHtcbiAgICAgICAgQGVhY2ggJGtleSwgJHZhbHVlIGluICRwcm9wZXJ0aWVzIHtcbiAgICAgICAgICAgICN7JGtleX06XG4gICAgICAgICAgICB2YXIoXG4gICAgICAgICAgICAgICAgI3tnZXQtdmFyLWtleSgkdmFyLXByZWZpeCwgJGtleSl9LFxuICAgICAgICAgICAgICAgICN7JHZhbHVlfVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuLyoqIFJlbmRlciBzdGF0ZXMgb2YgY29tcG9uZW50IGZyb20gYSBtYXBcbiovXG5AbWl4aW4gcmVuZGVyLXN0YXRlcygkc3RhdGVzLCAkdmFyLXByZWZpeDogbnVsbCwgJHRoZW1lLWtleTogbnVsbCkge1xuICAgIEBpZiAkc3RhdGVzIGFuZCBtZXRhLnR5cGUtb2YoJHN0YXRlcykgPT0gJ21hcCcge1xuICAgICAgICBAaWYgbWFwLmhhcy1rZXkoJHN0YXRlcywgJ2RlZmF1bHQnKSB7XG4gICAgICAgICAgICBAaW5jbHVkZSByZW5kZXItdmFyLXByb3BlcnRpZXMoXG4gICAgICAgICAgICAgICAgbWFwLmdldCgkc3RhdGVzLCAnZGVmYXVsdCcpLFxuICAgICAgICAgICAgICAgICcjeyR2YXItcHJlZml4fS0jeyR0aGVtZS1rZXl9J1xuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIEBpZiBtYXAuaGFzLWtleSgkc3RhdGVzLCAnaG92ZXInKSB7XG4gICAgICAgICAgICAmOmhvdmVyIHtcbiAgICAgICAgICAgICAgICBAaW5jbHVkZSByZW5kZXItdmFyLXByb3BlcnRpZXMoXG4gICAgICAgICAgICAgICAgICAgIG1hcC5nZXQoJHN0YXRlcywgJ2hvdmVyJyksXG4gICAgICAgICAgICAgICAgICAgICcjeyR2YXItcHJlZml4fS0jeyR0aGVtZS1rZXl9LWhvdmVyJ1xuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBAaWYgbWFwLmhhcy1rZXkoJHN0YXRlcywgJ2ZvY3VzJykge1xuICAgICAgICAgICAgJjpmb2N1cyB7XG4gICAgICAgICAgICAgICAgQGluY2x1ZGUgcmVuZGVyLXZhci1wcm9wZXJ0aWVzKFxuICAgICAgICAgICAgICAgICAgICBtYXAuZ2V0KCRzdGF0ZXMsICdmb2N1cycpLFxuICAgICAgICAgICAgICAgICAgICAnI3skdmFyLXByZWZpeH0tI3skdGhlbWUta2V5fS1mb2N1cydcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgQGlmIG1hcC5oYXMta2V5KCRzdGF0ZXMsICdmb2N1cy12aXNpYmxlJykge1xuICAgICAgICAgICAgJjpmb2N1cy12aXNpYmxlIHtcbiAgICAgICAgICAgICAgICBAaW5jbHVkZSByZW5kZXItdmFyLXByb3BlcnRpZXMoXG4gICAgICAgICAgICAgICAgICAgIG1hcC5nZXQoJHN0YXRlcywgJ2ZvY3VzLXZpc2libGUnKSxcbiAgICAgICAgICAgICAgICAgICAgJyN7JHZhci1wcmVmaXh9LSN7JHRoZW1lLWtleX0tZm9jdXMtdmlzaWJsZSdcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgQGlmIG1hcC5oYXMta2V5KCRzdGF0ZXMsICdhY3RpdmUnKSB7XG4gICAgICAgICAgICAmOmFjdGl2ZSB7XG4gICAgICAgICAgICAgICAgQGluY2x1ZGUgcmVuZGVyLXZhci1wcm9wZXJ0aWVzKFxuICAgICAgICAgICAgICAgICAgICBtYXAuZ2V0KCRzdGF0ZXMsICdhY3RpdmUnKSxcbiAgICAgICAgICAgICAgICAgICAgJyN7JHZhci1wcmVmaXh9LSN7JHRoZW1lLWtleX0tYWN0aXZlJ1xuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBAaWYgbWFwLmhhcy1rZXkoJHN0YXRlcywgJ2Rpc2FibGVkJykge1xuICAgICAgICAgICAgJjpkaXNhYmxlZCxcbiAgICAgICAgICAgICYuZGlzYWJsZWQge1xuICAgICAgICAgICAgICAgIEBpbmNsdWRlIHJlbmRlci12YXItcHJvcGVydGllcyhcbiAgICAgICAgICAgICAgICAgICAgbWFwLmdldCgkc3RhdGVzLCAnZGlzYWJsZWQnKSxcbiAgICAgICAgICAgICAgICAgICAgJyN7JHZhci1wcmVmaXh9LSN7JHRoZW1lLWtleX0tZGlzYWJsZWQnXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cbiIsIi8qIEB0aGVtZTogZGVmYXVsdDsgKi9cblxuQGltcG9ydCAnLi9wbGFjZWhvbGRlcnMvYmFzZS10cmFuc2l0aW9uJztcbkBpbXBvcnQgJy4vcGxhY2Vob2xkZXJzL2Z1bGwtY292ZXInO1xuIiwiLyogQHRoZW1lOiBkZWZhdWx0OyAqL1xuXG4lYmFzZS10cmFuc2l0aW9uIHtcbiAgICB0cmFuc2l0aW9uOiBhbGwgbGluZWFyIDEwMG1zO1xufVxuIiwiLyogQHRoZW1lOiBkZWZhdWx0OyAqL1xuXG4vLyBNYWRlIG9iamVjdCB0byBmdWxsIGluIHdpZHRoIGFuZCBoZWlnaHQuIFVzZSBpdCBmb3IgaW1nIHRhZyBpZiBuZWVkXG4lZnVsbC1jb3ZlciB7XG4gICAgaGVpZ2h0OiAxMDAlO1xuICAgIHdpZHRoOiAxMDAlO1xufVxuIiwiLyogQHRoZW1lOiBkZWZhdWx0OyAqL1xuXG4kcHJpbnQtcGFnZS1vZmZzZXQ6IDAgYXV0bztcbiRwcmludC1wYWdlLWJhY2tncm91bmQ6IG5vbmU7XG4iLCIvKiBAdGhlbWU6IGRlZmF1bHQ7ICovXG5cbiRwYWdlLWNvbnRlbnQtcHJpbnQtd2lkdGg6IDEwMCUgIWRlZmF1bHQ7XG4kcGFnZS1jb250ZW50LXByaW50LWlubmVyLW9mZnNldDogMCAhZGVmYXVsdDtcbiIsIi8qIEB0aGVtZTogZGVmYXVsdDsgKi9cblxuJGxvZ28tZGlzcGxheS1wcmludDogYmxvY2sgIWRlZmF1bHQ7XG4iLCIvKiBAdGhlbWU6IGRlZmF1bHQ7ICovXG5cbiRmcm9udGVuZC1kYXRhZ3JpZC1yZXNwb25zaXZlLXRvb2xiYXItcHJpbnQtZGlzcGxheTogbm9uZSAhZGVmYXVsdDtcbiRmcm9udGVuZC1kYXRhZ3JpZC1yZXNwb25zaXZlLWFjdGlvbnMtcHJpbnQtZGlzcGxheTogbm9uZSAhZGVmYXVsdDtcbiRmcm9udGVuZC1kYXRhZ3JpZC1yZXNwb25zaXZlLXJvdy1wcmludC1kaXNwbGF5OiB0YWJsZS1yb3cgIWRlZmF1bHQ7XG4kZnJvbnRlbmQtZGF0YWdyaWQtcmVzcG9uc2l2ZS1ib2R5LXByaW50LWRpc3BsYXk6IHRhYmxlLXJvdy1ncm91cCAhZGVmYXVsdDtcbiRmcm9udGVuZC1kYXRhZ3JpZC1yZXNwb25zaXZlLWNlbGwtcHJpbnQtZGlzcGxheTogdGFibGUtY2VsbCAhZGVmYXVsdDtcbiIsIi8qIEB0aGVtZTogZGVmYXVsdDsgKi9cblxuJGN1c3RvbWVyLWluZm8tZ3JpZC1jb2x1bW4td2lkdGg6IDUwJSAhZGVmYXVsdDtcbiIsIi8qIEB0aGVtZTogZGVmYXVsdDsgKi9cblxuLmdyaWQtaGVhZGVyLWNlbGwge1xuICAgICYuYWN0aW9uLWNvbHVtbiB7XG4gICAgICAgICY6ZW1wdHkge1xuICAgICAgICAgICAgJjo6YmVmb3JlIHtcbiAgICAgICAgICAgICAgICBkaXNwbGF5OiBub25lO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLmRhdGFncmlkLW1hc3NhY3Rpb24ge1xuICAgICAgICBkaXNwbGF5OiBub25lO1xuICAgIH1cbn1cbiIsIi8qIEB0aGVtZTogZGVmYXVsdDsgKi9cblxuaHRtbCB7XG4gICAgYmFja2dyb3VuZDogJHByaW50LXBhZ2UtYmFja2dyb3VuZDtcbn1cblxuLmJvZHkge1xuICAgIG1hcmdpbjogJHByaW50LXBhZ2Utb2Zmc2V0O1xufVxuXG50aGVhZCB7XG4gICAgZGlzcGxheTogdGFibGUtaGVhZGVyLWdyb3VwO1xufVxuXG50cixcbmltZyB7XG4gICAgcGFnZS1icmVhay1pbnNpZGU6IGF2b2lkO1xufVxuXG5wLFxuaDIsXG5oMyB7XG4gICAgb3JwaGFuczogMztcbiAgICB3aWRvd3M6IDM7XG59XG5cbnRyIHtcbiAgICBwYWdlLWJyZWFrLWluc2lkZTogYXZvaWQ7XG59XG5cbmltZyB7XG4gICAgLy8gc3R5bGVsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlY2xhcmF0aW9uLW5vLWltcG9ydGFudFxuICAgIG1heC13aWR0aDogMTAwJSAhaW1wb3J0YW50O1xuICAgIHBhZ2UtYnJlYWstaW5zaWRlOiBhdm9pZDtcbn1cblxubm9zY3JpcHQge1xuICAgIGRpc3BsYXk6IG5vbmU7XG59XG5cbkBwYWdlIHtcbiAgICBtYXJnaW46IDEwbW07XG59XG4iLCIvKiBAdGhlbWU6IGRlZmF1bHQ7ICovXG5cbi5wYWdlLWNvbnRhaW5lciB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgbWluLWhlaWdodDogaW5pdGlhbDtcbn1cbiIsIi8qIEB0aGVtZTogZGVmYXVsdDsgKi9cblxuLmRhdGFncmlkLXRvb2xiYXIge1xuICAgIC8vIHN0eWxlbGludC1kaXNhYmxlLW5leHQtbGluZSBkZWNsYXJhdGlvbi1uby1pbXBvcnRhbnRcbiAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7XG59XG4iLCIvKiBAdGhlbWU6IGRlZmF1bHQ7ICovXG5cbi5wYWdlLWhlYWRlciB7XG4gICAgLy8gc3R5bGVsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlY2xhcmF0aW9uLW5vLWltcG9ydGFudFxuICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDtcbn1cbiIsIi8qIEB0aGVtZTogZGVmYXVsdDsgKi9cblxuLnBhZ2UtZm9vdGVyIHtcbiAgICAvLyBzdHlsZWxpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVjbGFyYXRpb24tbm8taW1wb3J0YW50XG4gICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O1xufVxuIiwiLyogQHRoZW1lOiBkZWZhdWx0OyAqL1xuXG4ucGFnZS1jb250ZW50IHtcbiAgICB3aWR0aDogJHBhZ2UtY29udGVudC1wcmludC13aWR0aDtcblxuICAgICYtLWhhcy1zaWRlYmFyIHtcbiAgICAgICAgcGFkZGluZzogJHBhZ2UtY29udGVudC1wcmludC1pbm5lci1vZmZzZXQ7XG4gICAgfVxufVxuIiwiLyogQHRoZW1lOiBkZWZhdWx0OyAqL1xuXG4ucGFnZS1zaWRlYmFyIHtcbiAgICAvLyBzdHlsZWxpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVjbGFyYXRpb24tbm8taW1wb3J0YW50XG4gICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O1xufVxuIiwiLyogQHRoZW1lOiBkZWZhdWx0OyAqL1xuXG4ucGFnZS10aXRsZSB7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xufVxuXG4ucGFnZS10aXRsZS1hY3Rpb25zIHtcbiAgICBkaXNwbGF5OiBub25lO1xufVxuIiwiLyogQHRoZW1lOiBkZWZhdWx0OyAqL1xuXG4ubG9nbyB7XG4gICAgJi0tcHJpbnQtb25seSB7XG4gICAgICAgIGRpc3BsYXk6ICRsb2dvLWRpc3BsYXktcHJpbnQ7XG4gICAgfVxufVxuIiwiLyogQHRoZW1lOiBkZWZhdWx0OyAqL1xuXG4ubm90aWZpY2F0aW9uLWZsYXNoLWNvbnRhaW5lciB7XG4gICAgLy8gc3R5bGVsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlY2xhcmF0aW9uLW5vLWltcG9ydGFudFxuICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDtcbn1cbiIsIi8qIEB0aGVtZTogZGVmYXVsdDsgKi9cblxuLmJyZWFkY3J1bWJzIHtcbiAgICAvLyBzdHlsZWxpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVjbGFyYXRpb24tbm8taW1wb3J0YW50XG4gICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O1xufVxuIiwiLyogQHRoZW1lOiBkZWZhdWx0OyAqL1xuXG4uc2Nyb2xsLXRvcCB7XG4gICAgLy8gc3R5bGVsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlY2xhcmF0aW9uLW5vLWltcG9ydGFudFxuICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDtcbn1cbiIsIi8qIEB0aGVtZTogZGVmYXVsdDsgKi9cblxuLnBhZ2UtbWFpbiB7XG4gICAgJl9fY29udGVudCB7XG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICBtYXJnaW46IDA7XG4gICAgfVxufVxuIiwiLyogQHRoZW1lOiBkZWZhdWx0OyAqL1xuXG4uYm94LXRvb2xiYXIge1xuICAgICZfX2FjdGlvbnMge1xuICAgICAgICAvLyBzdHlsZWxpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVjbGFyYXRpb24tbm8taW1wb3J0YW50XG4gICAgICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDtcbiAgICB9XG59XG4iLCIvKiBAdGhlbWU6IGRlZmF1bHQ7ICovXG5cbi8qIHN0eWxlbGludC1kaXNhYmxlIGRlY2xhcmF0aW9uLW5vLWltcG9ydGFudCAqL1xuLmZyb250ZW5kLWRhdGFncmlkLS1yZXNwb25zaXZlIHtcbiAgICAudG9vbGJhci10b3Age1xuICAgICAgICBkaXNwbGF5OiAkZnJvbnRlbmQtZGF0YWdyaWQtcmVzcG9uc2l2ZS10b29sYmFyLXByaW50LWRpc3BsYXk7XG4gICAgfVxuXG4gICAgLmdyaWQtaGVhZGVyLWNlbGwge1xuICAgICAgICBkaXNwbGF5OiAkZnJvbnRlbmQtZGF0YWdyaWQtcmVzcG9uc2l2ZS1jZWxsLXByaW50LWRpc3BsYXkgIWltcG9ydGFudDtcbiAgICAgICAgcGFkZGluZy1sZWZ0OiBzcGFjaW5nKCdzbScpO1xuICAgICAgICBwYWRkaW5nLXJpZ2h0OiBzcGFjaW5nKCdzbScpO1xuXG4gICAgICAgIGJhY2tncm91bmQ6IG5vbmUgIWltcG9ydGFudDtcblxuICAgICAgICAmOmZpcnN0LWNoaWxkIHtcbiAgICAgICAgICAgIHBhZGRpbmctbGVmdDogMDtcbiAgICAgICAgfVxuXG4gICAgICAgICY6bGFzdC1jaGlsZCB7XG4gICAgICAgICAgICBwYWRkaW5nLXJpZ2h0OiAwO1xuICAgICAgICB9XG5cbiAgICAgICAgJi5hY3Rpb24tY29sdW1uIHtcbiAgICAgICAgICAgIGRpc3BsYXk6ICRmcm9udGVuZC1kYXRhZ3JpZC1yZXNwb25zaXZlLWFjdGlvbnMtcHJpbnQtZGlzcGxheSAhaW1wb3J0YW50O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLmdyaWQtYm9keSB7XG4gICAgICAgIGRpc3BsYXk6ICRmcm9udGVuZC1kYXRhZ3JpZC1yZXNwb25zaXZlLWJvZHktcHJpbnQtZGlzcGxheSAhaW1wb3J0YW50O1xuICAgIH1cblxuICAgIC5ncmlkLXJvdyxcbiAgICAuZ3JpZC1oZWFkZXItcm93IHtcbiAgICAgICAgZGlzcGxheTogJGZyb250ZW5kLWRhdGFncmlkLXJlc3BvbnNpdmUtcm93LXByaW50LWRpc3BsYXkgIWltcG9ydGFudDtcbiAgICB9XG5cbiAgICAuZ3JpZC1ib2R5LWNlbGwge1xuICAgICAgICBkaXNwbGF5OiAkZnJvbnRlbmQtZGF0YWdyaWQtcmVzcG9uc2l2ZS1jZWxsLXByaW50LWRpc3BsYXkgIWltcG9ydGFudDtcbiAgICAgICAgcGFkZGluZzogc3BhY2luZygnc20nKTtcblxuICAgICAgICBiYWNrZ3JvdW5kOiBub25lICFpbXBvcnRhbnQ7XG5cbiAgICAgICAgJjpmaXJzdC1jaGlsZCB7XG4gICAgICAgICAgICBwYWRkaW5nLWxlZnQ6IDA7XG4gICAgICAgIH1cblxuICAgICAgICAmOmxhc3QtY2hpbGQge1xuICAgICAgICAgICAgcGFkZGluZy1yaWdodDogMDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC5ncmlkLXJvdzpmaXJzdC1jaGlsZCB7XG4gICAgICAgIC5ncmlkLWJvZHktY2VsbCB7XG4gICAgICAgICAgICBwYWRkaW5nLXRvcDogc3BhY2luZygnc20nKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuLmdyaWQtdmlld3Mge1xuICAgIGRpc3BsYXk6IG5vbmU7XG59XG4vKiBzdHlsZWxpbnQtZW5hYmxlIGRlY2xhcmF0aW9uLW5vLWltcG9ydGFudCAqL1xuIiwiLyogQHRoZW1lOiBkZWZhdWx0OyAqL1xuXG4uY3VzdG9tZXItaW5mby1ncmlkIHtcbiAgICAuZ3JpZF9fY29sdW1uIHtcbiAgICAgICAgd2lkdGg6ICRjdXN0b21lci1pbmZvLWdyaWQtY29sdW1uLXdpZHRoO1xuICAgIH1cblxuICAgICZfX2VsZW1lbnQtbGFiZWwge1xuICAgICAgICB3aGl0ZS1zcGFjZTogbm9ybWFsO1xuICAgIH1cblxuICAgICZfX3ZpZXctbW9yZSB7XG4gICAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgfVxufVxuIiwiLyogQHRoZW1lOiBkZWZhdWx0OyAqL1xuXG4uY3VzdG9tZXItbGluZS1pdGVtcy0tcmZxIHtcbiAgICAuZ3JpZC1oZWFkZXItY2VsbCB7XG4gICAgICAgICYtbm90ZXMge1xuICAgICAgICAgICAgLy8gc3R5bGVsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlY2xhcmF0aW9uLW5vLWltcG9ydGFudFxuICAgICAgICAgICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLmdyaWQtYm9keS1jZWxsIHtcbiAgICAgICAgJi1xdHksXG4gICAgICAgICYtcHJpY2Uge1xuICAgICAgICAgICAgJjo6YmVmb3JlIHtcbiAgICAgICAgICAgICAgICBkaXNwbGF5OiBub25lO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgJi1wcm9kdWN0IHtcbiAgICAgICAgICAgIC5jdXN0b21lci1saW5lLWl0ZW1zX19ub3RlIHtcbiAgICAgICAgICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgICYtbm90ZXMge1xuICAgICAgICAgICAgLy8gc3R5bGVsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlY2xhcmF0aW9uLW5vLWltcG9ydGFudFxuICAgICAgICAgICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O1xuICAgICAgICB9XG4gICAgfVxufVxuIiwiLyogQHRoZW1lOiBkZWZhdWx0OyAqL1xuXG4ub3JkZXItY2hlY2tvdXQtd2lkZ2V0IHtcbiAgICBwYWdlLWJyZWFrLWluc2lkZTogYXZvaWQ7XG5cbiAgICAmX19xdW90ZSB7XG4gICAgICAgIC8vIHN0eWxlbGludC1kaXNhYmxlLW5leHQtbGluZSBkZWNsYXJhdGlvbi1uby1pbXBvcnRhbnRcbiAgICAgICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O1xuICAgIH1cblxuICAgICZfX2NvbnRhaW5lci13cmFwcGVyIHtcbiAgICAgICAgbWFyZ2luLWJvdHRvbTogMDtcbiAgICB9XG59XG4iLCIvKiBAdGhlbWU6IGRlZmF1bHQ7ICovXG5cbi5vcmRlci1idWlsZGVyLWNsZWFyLWJ0biB7XG4gICAgLy8gc3R5bGVsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlY2xhcmF0aW9uLW5vLWltcG9ydGFudFxuICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDtcbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==*/