
.search[data-v-000d2254] {
  width: 100%;
  border-top:0;
  border-left:0;
  border-right:0;

  background-image: url(/build/images/lupe.64d25256.svg);
  background-repeat: no-repeat;
  background-size: auto 45%;
  background-position: 0.5rem center;

  padding-left: 1.7rem;
}


.field-item[data-v-cc0fd350] {
  display: flex;
}
.field-item label[data-v-cc0fd350] {
  flex: 1;
}
.field-item input[data-v-cc0fd350] {
  flex: 1;
}


.g-resize-bar[data-v-e5189ad2]{
  position: absolute;
  bottom: 0px;
  margin: 17px auto;
  height: 6px;
  border-radius: 3px;
  width:200px;
  margin-left: -100px;
  left: 50%;
  background-color: #a8f9ca;
  box-shadow: 0 2px 3px -1px rgba(0,0,0,.3);
}
.g-resize-highlight[data-v-e5189ad2]{
  position: absolute;
  left: 0;
  top:0;
  height: 6px;
  background-color: #27ae60;
  border-radius: 3px;
}
.circle-btn[data-v-e5189ad2]{
  display: block;
  position: absolute;
  left:0;
  top: -5px;
  width: 14px;
  height: 14px;
  margin-left: -7px;
  background-color: #fff;
  border-radius: 7px;
  box-shadow: 0 2px 3px -2px rgba(0,0,0,.6), 0 -2px 3px -2px rgba(0,0,0,.55);
  border-width: 0;
}


.g-rotate-bar{
    position: absolute;
    bottom: 30px;
    left: 0;
    right: 0;
    text-align: center;
}
.g-rotate-bar .svg-icon{
  display: inline-block;
  width: 1.2em;
  height: 1.2em;
  margin: 0 2em;
}

.g-crop-image-principal[data-v-35c5a66d]{
    overflow: hidden;
    position: relative;
    background-color: #fff;
    background-image: -webkit-linear-gradient(bottom left, #efefef 25%, transparent 25%, transparent 75%, #efefef 75%, #efefef),-webkit-linear-gradient(bottom left, #efefef 25%, transparent 25%, transparent 75%, #efefef 75%, #efefef);
    background-image: -moz-linear-gradient(bottom left, #efefef 25%, transparent 25%, transparent 75%, #efefef 75%, #efefef),-moz-linear-gradient(bottom left, #efefef 25%, transparent 25%, transparent 75%, #efefef 75%, #efefef);
    background-image: -o-linear-gradient(bottom left, #efefef 25%, transparent 25%, transparent 75%, #efefef 75%, #efefef),-o-linear-gradient(bottom left, #efefef 25%, transparent 25%, transparent 75%, #efefef 75%, #efefef);
    background-image: linear-gradient(to top right, #efefef 25%, transparent 25%, transparent 75%, #efefef 75%, #efefef),linear-gradient(to top right, #efefef 25%, transparent 25%, transparent 75%, #efefef 75%, #efefef);
    background-position: 0 0,10px 10px;
    -webkit-background-size: 21px 21px;
    background-size: 21px 21px;
}
.image-aside[data-v-35c5a66d]{
    overflow: hidden;
    position: absolute;
    right: 30px;
    left:30px;
    top:70px;
    bottom:40px;
    text-align: center;
}
.image-aside .image-wrap[data-v-35c5a66d]{
    position: absolute;
    left: 0;
    top: 0;
    -webkit-touch-callout: none;
    -webkit-user-select: none;
    -khtml-user-select: none;
    -moz-user-select: none;
    -ms-user-select: none;
    user-select: none;
    box-shadow: 0 3px 5px -2px rgba(0,0,0,.25);
    background-size: cover;
}
.image-mask[data-v-35c5a66d]{
    position: absolute;
    left: 0;
    top: 0;
    width:100%;
    height: 100%;
}
.image-mask .mask[data-v-35c5a66d] {
    position: absolute;
    background-color: rgba(255,255,255,.6);
}
.crop-box[data-v-35c5a66d]{
    z-index: 2000;
    box-sizing: border-box;
    position: absolute;
    background: none;
    cursor: move;
    width:100px;
    height: 100px;
    border:1px solid rgba(255,255,255, .95);
}
.crop-box[data-v-35c5a66d]:after,
  .crop-box[data-v-35c5a66d]:before{
    content: '';
    display: block;
    opacity: 0;
    position: absolute;
    left: 33.3333%;
    top: 0;
    width: 33.334%;
    height: 100%;
    background-color: transparent;
    border-color: rgba(255,255,255,.7);
    border-style: solid;
    border-width: 0;
}
.crop-box[data-v-35c5a66d]:active::before,
  .crop-box[data-v-35c5a66d]:active::after{
    opacity: 1;
}
.crop-box[data-v-35c5a66d]:before{
    border-left-width: 1px;
    border-right-width: 1px;
}
.crop-box[data-v-35c5a66d]:after{
    top: 33.3333%;
    left: 0;
    height: 33.3334%;
    width: 100%;
    border-top-width: 1px;
    border-bottom-width: 1px;
}
.crop-box .g-resize[data-v-35c5a66d]{
    display: inline-block;
    z-index: 1910;
    position: absolute;
    bottom: -8px;
    right: -8px;
    width: 16px;
    height: 16px;
    cursor: se-resize;
    border-radius: 10px;
    background-color: #fff;
    box-shadow: 0 2px 4px -2px rgba(0,0,0,.25);
}

.g-core-image-upload-btn{
  position: relative;
  overflow: hidden;
}
.g-core-image-upload-form{
  position: absolute;
  left:0;
  right: 0;
  top:0;
  bottom:0;
  width: 100%;
  height: 100%;
  min-height: 61px;
  opacity: 0;
}
.g-core-image-upload-form input{
    width: 100%;
    height: 100%;
}
.g-core-image-upload-container{
  position: absolute;
  background: #111;
  z-index: 900;
}
.g-core-image-upload-modal{
  position: absolute;
  left:0;
  right:0;
  width: 100%;
  height: 100%;
  border:1px solid #ccc;
  z-index: 899;
}
.dropped{
  border:4px solid #ea6153;
}
.g-core-image-corp-container{
  z-index: 1900;
  position:fixed;
  left:0;
  right:0;
  top:0;
  bottom: 0;
  background: rgba(0,0,0,.9);
  color:#f1f1f1;
}
.g-core-image-corp-container .image-aside{
  position: absolute;
  right: 30px;
  left:30px;
  top:60px;
  bottom:20px;
  text-align: center;
}
.g-core-image-corp-container .image-aside img{
  max-width: 100%;
  -webkit-touch-callout: none;
  -webkit-user-select: none;
  -khtml-user-select: none;
  -moz-user-select: none;
  -ms-user-select: none;
  user-select: none;
}
.g-core-image-corp-container .info-aside{
  position: absolute;
  left:0;
  right: 0;
  top:0;
  height: 40px;
  padding-left: 10px;
  padding-right: 10px;
  background: #fefefe;
  color:#777;
}
.g-core-image-corp-container .btn-groups{
  text-align: right;
  margin: 5px 0 0;
}
.g-core-image-corp-container .btn{
  display: inline-block;
  padding: 0 15px;
  height: 32px;
  margin-left: 15px;
  background: #fff;
  border:1px solid #ccc;
  border-radius: 2px;
  font-size: 13px;
  color:#222;
  line-height: 32px;
  transition: all .1s ease-in;
}
.g-core-image-corp-container .btn:hover{
  border:1px solid #777;
  box-shadow: 0 1px 3px rgba(0,0,0,.05);
}
.g-core-image-corp-container .btn:active{
  background: #ddd;
}
.g-core-image-corp-container .btn:disabled{
  background: #eee !important;
  border-color:#ccc;
  cursor: not-allowed;
}
.g-core-image-corp-container .btn-upload{
  background: #27ae60;
  border-color:#27ae60;
  color:#fff;
}
.g-core-image-corp-container .btn-upload:hover{
  background: #2dc26c;
  border-color:#27ae60;
  box-shadow: 0 1px 3px rgba(0,0,0,.05);
}


.tab-head .active {
  color: red;
}
.edit-gallery ul {
  display: flex;
  flex-wrap: wrap;
}
.edit-gallery li {
  flex: 1;
  background-color: #ccc;

  min-width: 5vw;
  max-width: 5vw;

  margin: 0.5vw;
  padding: 0.5vw;
}
.edit-gallery li:hover {
  background-color: #222;
  color: #ccc;
}
.edit-gallery li .image {

  width:100%;
  height: 5vw;

  background-repeat: no-repeat;
  background-position: center;
  background-size: contain;

  margin-bottom: 0.2rem;
}



.tab-head .active {
  color: red;
}
.edit-gallery ul {
  display: flex;
  flex-wrap: wrap;
}
.edit-gallery li {
  flex: 1;
  background-color: #ccc;

  min-width: 5vw;
  max-width: 5vw;

  margin: 0.5vw;
  padding: 0.5vw;
}
.edit-gallery li:hover {
  background-color: #222;
  color: #ccc;
}
.edit-gallery li .image {

  width:100%;
  height: 5vw;

  background-repeat: no-repeat;
  background-position: center;
  background-size: contain;

  margin-bottom: 0.2rem;
}



.editor-tree[data-v-1788ea7c] {

  overflow: scroll;

  height: 80vh;
}
.editor-tree .editor-tree[data-v-1788ea7c] {

  overflow: hidden;

  height: auto;
}
h3[data-v-1788ea7c] {
    padding-left: 1rem;
    margin-bottom: 1rem;
}
.editor-tree .cat .item[data-v-1788ea7c] {
    display:flex;

    background-image: linear-gradient(to right, rgba(255,255,255,0) 30%, rgba(255,255,255,1) 100%);
    margin-bottom:0.2rem;
    border-top-right-radius: 2rem;
    padding-right: 0.6rem;
}
.editor-tree .cat .trigger[data-v-1788ea7c] {
 
    background-image: url(/build/images/categorie_close.4d77897e.svg);
    background-repeat: no-repeat;
    background-position: left center;
    background-size: auto 35%;

    font-weight: 600;

    cursor: pointer;
    display:flex;
}
.editor-tree .cat .trigger[data-v-1788ea7c]:hover {
    color:rgb(240, 184, 0);
}
.editor-tree .cat .trigger.active[data-v-1788ea7c] {
    background-image: url(/build/images/categorie_open.18690895.svg);
}
.editor-tree .page .trigger.active[data-v-1788ea7c] {
    background-image: url(/build/images/nav-pages.632075dd.svg);
    color: rgb(0, 137, 216);
}
.editor-tree .page[data-v-1788ea7c] {

    display: flex;
}
.editor-tree .page .trigger[data-v-1788ea7c] {
    background-image: url(/build/images/nav-pages.632075dd.svg);
    background-repeat: no-repeat;
    background-position: left center;
    background-size: auto 55%;

    font-weight: 400;
    display: flex;
    justify-content: space-between;
}
.editor-tree .page .trigger[data-v-1788ea7c]:hover {
     color:rgb(240, 184, 0);
}
.editor-tree .page .trigger span[data-v-1788ea7c]{
     align-self: flex-end;
}
.editor-tree .trigger[data-v-1788ea7c] {
    flex: 1;
    text-align: left;
    overflow: hidden;
    padding-left: 1.5rem;
    padding-top:0.4rem;
    padding-bottom:0.4rem;
    padding-right: 0.5rem;
}
.editor-tree .triggerEdit[data-v-1788ea7c] {
    flex: 1;
    max-width: 2rem;
}
.editor-tree  .triggerAdd[data-v-1788ea7c] {
    width:100%;
    text-align: left;
    padding-left: 1.5rem;
    background-position: 93% center;
    font-size: 85%;

    padding-left: 1.5rem;
    padding-top: 0.4rem;
    padding-bottom: 0.4rem;
    padding-right: 0.5rem;

    border-left: 1px solid #ccc;
}
.editor-tree  .triggerAddWrap[data-v-1788ea7c] {
    background-image: linear-gradient(to right, rgba(255,255,255,0) 30%, rgba(255,255,255,1) 100%);
     margin-bottom:0.2rem;

     border-bottom-right-radius: 2rem;
}
.editor-tree .editor-tree[data-v-1788ea7c] {
    border-left: 1px solid #ccc;
}
.cat .editor-tree[data-v-1788ea7c] {
    padding-left: 1rem;
    padding-bottom: 1rem;
}
  /*
  .page .btn {
    background-image: url('../../../icons/page.svg');
    background-repeat: no-repeat;
    background-position: 1rem center;
    background-size: auto 50%;
    
    padding-left: 2.2rem;
    padding-top:0.3rem;
    padding-bottom:0.3rem;

  }
  */



.field-item[data-v-0501316b] {
  display: flex;
}
.field-item label[data-v-0501316b] {
  flex: 1;
}
.field-item input[data-v-0501316b] {
  flex: 1;
}

/* BASICS */

.CodeMirror {
  /* Set height, width, borders, and global font properties here */
  font-family: monospace;
  height: 300px;
  color: black;
  direction: ltr;
}

/* PADDING */

.CodeMirror-lines {
  padding: 4px 0; /* Vertical padding around content */
}
.CodeMirror pre {
  padding: 0 4px; /* Horizontal padding of content */
}

.CodeMirror-scrollbar-filler, .CodeMirror-gutter-filler {
  background-color: white; /* The little square between H and V scrollbars */
}

/* GUTTER */

.CodeMirror-gutters {
  border-right: 1px solid #ddd;
  background-color: #f7f7f7;
  white-space: nowrap;
}
.CodeMirror-linenumbers {}
.CodeMirror-linenumber {
  padding: 0 3px 0 5px;
  min-width: 20px;
  text-align: right;
  color: #999;
  white-space: nowrap;
}

.CodeMirror-guttermarker { color: black; }
.CodeMirror-guttermarker-subtle { color: #999; }

/* CURSOR */

.CodeMirror-cursor {
  border-left: 1px solid black;
  border-right: none;
  width: 0;
}
/* Shown when moving in bi-directional text */
.CodeMirror div.CodeMirror-secondarycursor {
  border-left: 1px solid silver;
}
.cm-fat-cursor .CodeMirror-cursor {
  width: auto;
  border: 0 !important;
  background: #7e7;
}
.cm-fat-cursor div.CodeMirror-cursors {
  z-index: 1;
}
.cm-fat-cursor-mark {
  background-color: rgba(20, 255, 20, 0.5);
  -webkit-animation: blink 1.06s steps(1) infinite;
  -moz-animation: blink 1.06s steps(1) infinite;
  animation: blink 1.06s steps(1) infinite;
}
.cm-animate-fat-cursor {
  width: auto;
  border: 0;
  -webkit-animation: blink 1.06s steps(1) infinite;
  -moz-animation: blink 1.06s steps(1) infinite;
  animation: blink 1.06s steps(1) infinite;
  background-color: #7e7;
}
@-moz-keyframes blink {
  0% {}
  50% { background-color: transparent; }
  100% {}
}
@-webkit-keyframes blink {
  0% {}
  50% { background-color: transparent; }
  100% {}
}
@keyframes blink {
  0% {}
  50% { background-color: transparent; }
  100% {}
}

/* Can style cursor different in overwrite (non-insert) mode */
.CodeMirror-overwrite .CodeMirror-cursor {}

.cm-tab { display: inline-block; text-decoration: inherit; }

.CodeMirror-rulers {
  position: absolute;
  left: 0; right: 0; top: -50px; bottom: -20px;
  overflow: hidden;
}
.CodeMirror-ruler {
  border-left: 1px solid #ccc;
  top: 0; bottom: 0;
  position: absolute;
}

/* DEFAULT THEME */

.cm-s-default .cm-header {color: blue;}
.cm-s-default .cm-quote {color: #090;}
.cm-negative {color: #d44;}
.cm-positive {color: #292;}
.cm-header, .cm-strong {font-weight: bold;}
.cm-em {font-style: italic;}
.cm-link {text-decoration: underline;}
.cm-strikethrough {text-decoration: line-through;}

.cm-s-default .cm-keyword {color: #708;}
.cm-s-default .cm-atom {color: #219;}
.cm-s-default .cm-number {color: #164;}
.cm-s-default .cm-def {color: #00f;}
.cm-s-default .cm-variable,
.cm-s-default .cm-punctuation,
.cm-s-default .cm-property,
.cm-s-default .cm-operator {}
.cm-s-default .cm-variable-2 {color: #05a;}
.cm-s-default .cm-variable-3, .cm-s-default .cm-type {color: #085;}
.cm-s-default .cm-comment {color: #a50;}
.cm-s-default .cm-string {color: #a11;}
.cm-s-default .cm-string-2 {color: #f50;}
.cm-s-default .cm-meta {color: #555;}
.cm-s-default .cm-qualifier {color: #555;}
.cm-s-default .cm-builtin {color: #30a;}
.cm-s-default .cm-bracket {color: #997;}
.cm-s-default .cm-tag {color: #170;}
.cm-s-default .cm-attribute {color: #00c;}
.cm-s-default .cm-hr {color: #999;}
.cm-s-default .cm-link {color: #00c;}

.cm-s-default .cm-error {color: #f00;}
.cm-invalidchar {color: #f00;}

.CodeMirror-composing { border-bottom: 2px solid; }

/* Default styles for common addons */

div.CodeMirror span.CodeMirror-matchingbracket {color: #0b0;}
div.CodeMirror span.CodeMirror-nonmatchingbracket {color: #a22;}
.CodeMirror-matchingtag { background: rgba(255, 150, 0, .3); }
.CodeMirror-activeline-background {background: #e8f2ff;}

/* STOP */

/* The rest of this file contains styles related to the mechanics of
   the editor. You probably shouldn't touch them. */

.CodeMirror {
  position: relative;
  overflow: hidden;
  background: white;
}

.CodeMirror-scroll {
  overflow: scroll !important; /* Things will break if this is overridden */
  /* 30px is the magic margin used to hide the element's real scrollbars */
  /* See overflow: hidden in .CodeMirror */
  margin-bottom: -30px; margin-right: -30px;
  padding-bottom: 30px;
  height: 100%;
  outline: none; /* Prevent dragging from highlighting the element */
  position: relative;
}
.CodeMirror-sizer {
  position: relative;
  border-right: 30px solid transparent;
}

/* The fake, visible scrollbars. Used to force redraw during scrolling
   before actual scrolling happens, thus preventing shaking and
   flickering artifacts. */
.CodeMirror-vscrollbar, .CodeMirror-hscrollbar, .CodeMirror-scrollbar-filler, .CodeMirror-gutter-filler {
  position: absolute;
  z-index: 6;
  display: none;
}
.CodeMirror-vscrollbar {
  right: 0; top: 0;
  overflow-x: hidden;
  overflow-y: scroll;
}
.CodeMirror-hscrollbar {
  bottom: 0; left: 0;
  overflow-y: hidden;
  overflow-x: scroll;
}
.CodeMirror-scrollbar-filler {
  right: 0; bottom: 0;
}
.CodeMirror-gutter-filler {
  left: 0; bottom: 0;
}

.CodeMirror-gutters {
  position: absolute; left: 0; top: 0;
  min-height: 100%;
  z-index: 3;
}
.CodeMirror-gutter {
  white-space: normal;
  height: 100%;
  display: inline-block;
  vertical-align: top;
  margin-bottom: -30px;
}
.CodeMirror-gutter-wrapper {
  position: absolute;
  z-index: 4;
  background: none !important;
  border: none !important;
}
.CodeMirror-gutter-background {
  position: absolute;
  top: 0; bottom: 0;
  z-index: 4;
}
.CodeMirror-gutter-elt {
  position: absolute;
  cursor: default;
  z-index: 4;
}
.CodeMirror-gutter-wrapper ::selection { background-color: transparent }
.CodeMirror-gutter-wrapper ::-moz-selection { background-color: transparent }

.CodeMirror-lines {
  cursor: text;
  min-height: 1px; /* prevents collapsing before first draw */
}
.CodeMirror pre {
  /* Reset some styles that the rest of the page might have set */
  -moz-border-radius: 0; -webkit-border-radius: 0; border-radius: 0;
  border-width: 0;
  background: transparent;
  font-family: inherit;
  font-size: inherit;
  margin: 0;
  white-space: pre;
  word-wrap: normal;
  line-height: inherit;
  color: inherit;
  z-index: 2;
  position: relative;
  overflow: visible;
  -webkit-tap-highlight-color: transparent;
  -webkit-font-variant-ligatures: contextual;
  font-variant-ligatures: contextual;
}
.CodeMirror-wrap pre {
  word-wrap: break-word;
  white-space: pre-wrap;
  word-break: normal;
}

.CodeMirror-linebackground {
  position: absolute;
  left: 0; right: 0; top: 0; bottom: 0;
  z-index: 0;
}

.CodeMirror-linewidget {
  position: relative;
  z-index: 2;
  padding: 0.1px; /* Force widget margins to stay inside of the container */
}

.CodeMirror-widget {}

.CodeMirror-rtl pre { direction: rtl; }

.CodeMirror-code {
  outline: none;
}

/* Force content-box sizing for the elements where we expect it */
.CodeMirror-scroll,
.CodeMirror-sizer,
.CodeMirror-gutter,
.CodeMirror-gutters,
.CodeMirror-linenumber {
  -moz-box-sizing: content-box;
  box-sizing: content-box;
}

.CodeMirror-measure {
  position: absolute;
  width: 100%;
  height: 0;
  overflow: hidden;
  visibility: hidden;
}

.CodeMirror-cursor {
  position: absolute;
  pointer-events: none;
}
.CodeMirror-measure pre { position: static; }

div.CodeMirror-cursors {
  visibility: hidden;
  position: relative;
  z-index: 3;
}
div.CodeMirror-dragcursors {
  visibility: visible;
}

.CodeMirror-focused div.CodeMirror-cursors {
  visibility: visible;
}

.CodeMirror-selected { background: #d9d9d9; }
.CodeMirror-focused .CodeMirror-selected { background: #d7d4f0; }
.CodeMirror-crosshair { cursor: crosshair; }
.CodeMirror-line::selection, .CodeMirror-line > span::selection, .CodeMirror-line > span > span::selection { background: #d7d4f0; }
.CodeMirror-line::-moz-selection, .CodeMirror-line > span::-moz-selection, .CodeMirror-line > span > span::-moz-selection { background: #d7d4f0; }

.cm-searching {
  background-color: #ffa;
  background-color: rgba(255, 255, 0, .4);
}

/* Used to force a border model for a node */
.cm-force-border { padding-right: .1px; }

@media print {
  /* Hide the cursor when printing */
  .CodeMirror div.CodeMirror-cursors {
    visibility: hidden;
  }
}

/* See issue #2901 */
.cm-tab-wrap-hack:after { content: ''; }

/* Help users use markselection to safely style text background */
span.CodeMirror-selectedtext { background: none; }

/*

    Name:       Base16 Default Light
    Author:     Chris Kempson (http://chriskempson.com)

    CodeMirror template by Jan T. Sott (https://github.com/idleberg/base16-codemirror)
    Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16)

*/

.cm-s-base16-light.CodeMirror { background: #f5f5f5; color: #202020; }
.cm-s-base16-light div.CodeMirror-selected { background: #e0e0e0; }
.cm-s-base16-light .CodeMirror-line::selection, .cm-s-base16-light .CodeMirror-line > span::selection, .cm-s-base16-light .CodeMirror-line > span > span::selection { background: #e0e0e0; }
.cm-s-base16-light .CodeMirror-line::-moz-selection, .cm-s-base16-light .CodeMirror-line > span::-moz-selection, .cm-s-base16-light .CodeMirror-line > span > span::-moz-selection { background: #e0e0e0; }
.cm-s-base16-light .CodeMirror-gutters { background: #f5f5f5; border-right: 0px; }
.cm-s-base16-light .CodeMirror-guttermarker { color: #ac4142; }
.cm-s-base16-light .CodeMirror-guttermarker-subtle { color: #b0b0b0; }
.cm-s-base16-light .CodeMirror-linenumber { color: #b0b0b0; }
.cm-s-base16-light .CodeMirror-cursor { border-left: 1px solid #505050; }

.cm-s-base16-light span.cm-comment { color: #8f5536; }
.cm-s-base16-light span.cm-atom { color: #aa759f; }
.cm-s-base16-light span.cm-number { color: #aa759f; }

.cm-s-base16-light span.cm-property, .cm-s-base16-light span.cm-attribute { color: #90a959; }
.cm-s-base16-light span.cm-keyword { color: #ac4142; }
.cm-s-base16-light span.cm-string { color: #f4bf75; }

.cm-s-base16-light span.cm-variable { color: #90a959; }
.cm-s-base16-light span.cm-variable-2 { color: #6a9fb5; }
.cm-s-base16-light span.cm-def { color: #d28445; }
.cm-s-base16-light span.cm-bracket { color: #202020; }
.cm-s-base16-light span.cm-tag { color: #ac4142; }
.cm-s-base16-light span.cm-link { color: #aa759f; }
.cm-s-base16-light span.cm-error { background: #ac4142; color: #505050; }

.cm-s-base16-light .CodeMirror-activeline-background { background: #DDDCDC; }
.cm-s-base16-light .CodeMirror-matchingbracket { color: #f5f5f5 !important; background-color: #6A9FB5 !important}


.field-item[data-v-51c57ccc] {
    display: flex;
    flex-direction: column;
    max-width: 40vw;
}
.field-item label[data-v-51c57ccc] {
    flex: 1;
}
.field-item input[data-v-51c57ccc] {
    flex: 1;
}
.editor[data-v-51c57ccc] {
  width: 600px;
  height: 800px;
}




.field-item[data-v-1d5c67d8] {
    display: flex;
    flex-direction: column;
    max-width: 40vw;
}
.field-item label[data-v-1d5c67d8] {
    flex: 1;
}
.field-item input[data-v-1d5c67d8] {
    flex: 1;
}
.editor[data-v-1d5c67d8] {
  width: 600px;
  height: 800px;
}




.field-item[data-v-4bcf2a08] {
    display: flex;
    flex-direction: column;
    max-width: 40vw;
}
.field-item label[data-v-4bcf2a08] {
    flex: 1;
}
.field-item input[data-v-4bcf2a08] {
    flex: 1;
}
.editor[data-v-4bcf2a08] {
  width: 600px;
  height: 800px;
}




.field-item-root-loop .cat[data-v-9a5fd154] {
  flex-direction: column;
}
.field-item-root-loop .icon-pages[data-v-9a5fd154] {
    background-image: url(/build/images/nav-pages.632075dd.svg);
    background-repeat: no-repeat;
    background-position: 0.6rem center;
    background-size: auto 1rem;

    padding-left: 2rem;

    width: auto;
    padding-right: 1rem;
}




.catspagesselect[data-v-7627eb92]  {
  display:flex;
}
.catspagesselect .tree[data-v-7627eb92] {
  flex: 1;
}
.catspagesselect .fields[data-v-7627eb92] {
  flex: 1;
}
.field-item-root[data-v-7627eb92] {
  flex: 1;
}
.interface .select[data-v-7627eb92] {
    background-image: url(/build/images/page.91a14355.svg);
    background-repeat: no-repeat;
    background-position: 0.6rem center;
    background-size: auto 1rem;

    padding-left: 2rem;

    
    overflow: hidden;
}
.catspagesselect .icon-pages[data-v-7627eb92] {
    background-image: url(/build/images/nav-pages.632075dd.svg);
    background-repeat: no-repeat;
    background-position: 0.6rem center;
    background-size: auto 1rem;

    padding-left: 2rem;

    width: auto;
}
.catspagesselect .icon-slash[data-v-7627eb92] {
    background-image: url(/build/images/slash.a99a954e.svg);
    background-repeat: no-repeat;
    background-position: 0.6rem center;
    background-size: auto 1rem;

    padding-left: 2rem;

    
    width: auto;
}
.box[data-v-7627eb92] {
  height: 60vh;
}



.field-item ul li[data-v-45bafbaa] {
  display: flex;
  padding-left: 0.3rem;
  padding-right: 0rem;
  padding-top: 0.3rem;
  padding-bottom: 0.3rem;
}
.field-item ul label[data-v-45bafbaa] {
  flex: 1;
}
.field-item ul input[data-v-45bafbaa] {
  flex: 1;
}
.field-item ul select[data-v-45bafbaa] {
  flex: 1;
}





.field-item[data-v-60c8a2ae] {
  display: flex;
}
.field-item label[data-v-60c8a2ae] {
  flex: 1;
}
.field-item select[data-v-60c8a2ae] {
  flex: 1;
}


.field-item[data-v-9d6c2138] {
  display: flex;
}
.field-item label[data-v-9d6c2138] {
  flex: 1;
}
.field-item input[data-v-9d6c2138] {
  flex: 1;
}
.image_preview[data-v-9d6c2138] {
  width: 12vh;
  margin-right: 1rem;
}


.field-item-root-loop .cat[data-v-d2ce1822] {
  flex-direction: column;
}
.field-item-root-loop .icon-pages[data-v-d2ce1822] {
    background-image: url(/build/images/nav-pages.632075dd.svg);
    background-repeat: no-repeat;
    background-position: 0.6rem center;
    background-size: auto 1rem;

    padding-left: 2rem;

    width: auto;
    padding-right: 1rem;
}



.catspagesselect[data-v-84fe06aa]  {
  display:flex;
}
.catspagesselect .tree[data-v-84fe06aa] {
  flex: 1;
}
.catspagesselect .fields[data-v-84fe06aa] {
  flex: 1;
}
.tree p[data-v-84fe06aa],
.fields p[data-v-84fe06aa] {
  font-weight: bold;
}
.field-item-root[data-v-84fe06aa] {
  flex: 1;
}
.interface .select[data-v-84fe06aa] {
    background-image: url(/build/images/nav-fields.78b9823e.svg);
    background-repeat: no-repeat;
    background-position: 0.6rem center;
    background-size: auto 1rem;

    padding-left: 2rem;
 
    height:2rem;

    width: 20vw;
}
.box[data-v-84fe06aa] {
  height: 60vh;
  display: flex;
flex-direction: column;
padding-top:2rem;
}
.box .empty[data-v-84fe06aa] {
  padding-bottom:1rem;
}
.box .icon-pages[data-v-84fe06aa] {
    background-image: url(/build/images/nav-pages.632075dd.svg);
    background-repeat: no-repeat;
    background-position: 0.6rem center;
    background-size: auto 1rem;

    padding-left: 2rem;
    margin-bottom: 0.6rem;
    width: auto;
}
.box .icon-slash[data-v-84fe06aa] {
    background-image: url(/build/images/slash.a99a954e.svg);
    background-repeat: no-repeat;
    background-position: 0.6rem center;
    background-size: auto 1rem;

    padding-left: 2rem;

    
    width: auto;
}



.field-item[data-v-42748657] {
}
.field-item label[data-v-42748657] {
    flex: 1;
}
.field-item input[data-v-42748657],
  .field-item select[data-v-42748657] {
    flex: 1;
}
.image_preview[data-v-42748657] {
    width: 12vh;
    margin-right: 1rem;
}
.li-vert[data-v-42748657] {
    flex-direction: column;
    width: 16vw;
}
.ul-horiz[data-v-42748657] {
    flex-direction: row;
    display: flex;
    flex: 1;
    border: 0;
    padding: 0;
}
.ul-horiz li[data-v-42748657] {
    padding-right: 1rem;
}
.color-true h3[data-v-42748657],
  .color-true label[data-v-42748657] {
    color: rgb(0, 148, 12);
}
.color-false h3[data-v-42748657],
.color-false label[data-v-42748657] {
    color: rgb(126, 0, 31);
}



.field-item[data-v-346172fb] {
  display: flex;
}
.field-item label[data-v-346172fb] {
  flex: 1;
}
.field-item input[data-v-346172fb] {
  flex: 1;
}



.icon-add[data-v-65a04ac1] {
  width: 3vw;
  height: 2rem;

  background-image: url(/build/images/add.f0710c7f.svg);
  background-repeat: no-repeat;
  background-position: center center;
  background-size: auto 1rem;

  display: inline-block;
  margin-left:1rem;
}
.icon-delete[data-v-65a04ac1] {
  width: 3vw;
  height: 2rem;

  background-image: url(/build/images/delete.46a3fbea.svg);
  background-repeat: no-repeat;
  background-position: center center;
  background-size: auto 1rem;

  opacity: 0.3;

  margin-right: 0.2rem;
}
.icon-sort[data-v-65a04ac1] {
  /* width: 3vw; */
  height: 2rem;

  background-image: url(/build/images/sort.606a83f0.svg);
  background-repeat: no-repeat;
  background-position: 1rem center;
  background-size: auto 1rem;

  opacity: 0.3;
}
.ende[data-v-65a04ac1] {
  display:flex;
}
.ende .corner[data-v-65a04ac1] {
   display:inline-block;
   width: 3rem;
   border: 0;
   border-bottom: 1px solid #ccc;
   border-left: 1px solid #ccc;
   
   padding:0;
   margin: 0;
   margin-bottom:0.9rem;
   margin-right:0.3rem;
}
.box[data-v-65a04ac1] {
   margin-bottom: 0.5rem;
}


.field-item[data-v-c4d61e1c] {
  display: flex;
  flex-direction: row;
}
.field-item label[data-v-c4d61e1c] {
  flex: 1;
}
.field-item input[data-v-c4d61e1c] {
  flex: 1;
}





.field-item ul li[data-v-56f09d56] {
  display: flex;
  padding-left: 0.3rem;
  padding-right: 0rem;
  padding-top: 0.3rem;
  padding-bottom: 0.3rem;
}
.field-item ul label[data-v-56f09d56] {
  flex: 1;
}
.field-item ul input[data-v-56f09d56] {
  flex: 1;
}
.field-item ul select[data-v-56f09d56] {
  flex: 1;
}





.editor-form[data-v-3db4febc] {

  padding-top: 0.5rem;
  flex:1;
  width: 100%;
  height: 90vh;
}
.editor-form .form[data-v-3db4febc] {

  overflow-y: scroll;

  height: 60vh;
}
.editor-form .form .fields .item[data-v-3db4febc] {
  padding-left: 1rem;
  padding-right: 1rem;
  padding-top: 0.6rem;
  padding-bottom: 0.6rem;
}
.editor-form  .toolbar[data-v-3db4febc] {
  display: flex;
  justify-content: flex-end;
  height: 5vh;
}
.editor-form .toolbar .save[data-v-3db4febc] {
  background-image: url(/build/images/save.f3e603bf.svg);
  background-repeat: no-repeat;
  background-size: auto 45%;
  background-position: 0.5rem center;
  padding-left: 2.3rem;
  margin-left: 1rem;
}
.editor-form .toolbar .publish[data-v-3db4febc] {
  background-image: url(/build/images/cloud_up.c849a9cb.svg);
  background-repeat: no-repeat;
  background-size: auto 65%;
  background-position: 0.5rem center;
  padding-left: 2.3rem;
  margin-left: 1rem;

  background-color: rgb(0, 137, 216);
  color: #fff;
}
.editor-form .toolbar .publish[data-v-3db4febc]:hover {
  background-color: rgb(240, 184, 0);
}






h3[data-v-6c82a15a] {
  padding-left: 2rem;
}
.editor-preview[data-v-6c82a15a] {
  padding: 0;
}
.editor-preview .header[data-v-6c82a15a] {
  display:flex;
}
.editor-preview .header h3[data-v-6c82a15a] {
  flex: 1
}
.editor-preview .header select[data-v-6c82a15a] {
  flex: 1;
  max-width: 6rem;
  height: 1.3rem;

  display: inline-block;
  outline: 0;
  font-family:  'PT Sans', sans-serif;
  font-size: 70%;
  background-color: #ffffff;

  padding-top: 0.1rem;
  padding-bottom: 0.1rem;
  padding-left: 0.2rem;
  padding-right: 0.2rem;
  margin: 0;
  cursor: pointer;
  border: 1.5px solid rgb(0, 137, 216);
  border-radius: 0.3rem;
}
.deviceWrap[data-v-6c82a15a] {
border: 2px solid #ccc;
   padding:1rem;
   padding-top:2rem;
   border-radius: 1.5rem;
  background-image: linear-gradient(to left, rgba(255,255,255,0) 0%, rgba(255,255,255,1) 100%);
}
.deviceWrap .device[data-v-6c82a15a] {
   

   /* max-width: 25vw;

max-height: 55vh; */

overflow: auto;
}
.deviceWrap  .url[data-v-6c82a15a] {
   border: 1px solid #656565;
   border-radius:0.5rem;
   padding-left: 0.3rem;
   padding-right: 1rem;
   padding-top: 0.2rem;
   padding-bottom: 0.1rem;
   background-color: ##fcfcfc;
   overflow-x: auto;
   font-size:80%;
   color: #000;
   margin-bottom: 0.5rem;
}
.deviceWrap iframe[data-v-6c82a15a] {
   border: 2px solid #656565;
}
.deviceWrap .nav[data-v-6c82a15a] {
   display: flex;
   padding-top:1rem;
}
.deviceWrap .nav .left[data-v-6c82a15a] {
   flex: 1;
   opacity: 0;
}
.deviceWrap .nav .center[data-v-6c82a15a] {
   flex: 2;
   border: 2px solid #656565;
   border-radius: 3rem;
   min-height: 3rem;
   max-height: 3rem;
   min-width: 3rem;
   max-width: 3rem;
}
.deviceWrap .nav .right[data-v-6c82a15a] {
   flex: 1;
   opacity: 0;
}


.editor-page[data-v-0fb80e26] {
  display: flex;

  background-image: linear-gradient(to bottom, rgba(255,255,255,0) 65%, rgba(255,255,255,1) 100%);
  padding-bottom: 0.5rem;

   padding-left:2rem;

  border-radius: 2rem;
}
.editor-page .wrap[data-v-0fb80e26] {
  flex: 10;
}
.editor-page .head .page_name[data-v-0fb80e26] {
    background-image: url(/build/images/page2.fea09fcf.svg);
    background-repeat: no-repeat;
    background-position: left center;
    background-size: auto 100%;
    padding-left: 2.5rem;
    padding-top: 0.2rem;
    padding-bottom: 0.2rem;
}
.triggerEditWrap[data-v-0fb80e26] {
 
  display:flex;
  justify-content:flex-end;
}
.triggerEdit[data-v-0fb80e26] {

  background-image: url(/build/images/edit.c4a18e05.svg);
  background-repeat: no-repeat;
  background-size: auto 50%;
  background-position: 0.5rem center;
  padding-left: 2.3rem;
  height: 2rem;
}
h3[data-v-0fb80e26] {
  padding-bottom:0;
}
h4[data-v-0fb80e26] {
  opacity: 0.7;
  font-size: 85%;
  padding-top:0;
  color: rgb(146, 146, 146);
  padding-left: 2.5rem;
}
.details[data-v-0fb80e26] {
  display: flex;
  padding-top: 0;
  font-size: 85%;
  padding-left: 2.5rem;
}
.details .left[data-v-0fb80e26] {
  flex: 1;
}
.details .right[data-v-0fb80e26] {
  flex: 1;
}
.details li[data-v-0fb80e26] {
  padding-right:1rem;
}
.pageStatic[data-v-0fb80e26] {


  padding-left: 1.6rem;
  display: flex;
  flex-direction: column;
  justify-content: center;

  background-repeat: no-repeat;
  background-position: left center;
  background-size: auto 100%;
}
.pageStatic.static[data-v-0fb80e26] {
  background-image: url(/build/images/static.a57527de.svg);
}
.pageStatic.cloud[data-v-0fb80e26] {
  background-image: url(/build/images/cloud.2ed57e5b.svg);
}
.pageState[data-v-0fb80e26] {


  padding-left: 1.6rem;
  display: flex;
  flex-direction: column;
  justify-content: center;

  background-repeat: no-repeat;
  background-position: left center;
  background-size: auto 100%;
}
.pageState.deleted[data-v-0fb80e26] {
  background-image: url(/build/images/delete.46a3fbea.svg);
}
.pageState.hide[data-v-0fb80e26] {
  background-image: url(/build/images/hide.cbcb3c81.svg);
}
.pageState.show[data-v-0fb80e26] {
  background-image: url(/build/images/show.ddfb1cc3.svg);
}
.pageCategory[data-v-0fb80e26] {
  

  padding-left: 1.6rem;
  display: flex;
  flex-direction: column;
  justify-content: center;

  background-image: url(/build/images/nav-categories.e68ac516.svg);
  background-repeat: no-repeat;
  background-position: left center;
  background-size: auto 100%;
}
.pageTemplate[data-v-0fb80e26] {

  padding-left: 1.6rem;
  display: flex;
  flex-direction: column;
  justify-content: center;

  background-image: url(/build/images/nav-templates.4344cda3.svg);
  background-repeat: no-repeat;
  background-position: left center;
  background-size: auto 100%;
}
.pageGallery[data-v-0fb80e26] {

  padding-left: 1.6rem;
  display: flex;
  flex-direction: column;
  justify-content: center;

  background-image: url(/build/images/nav-gallery.fd24ce3b.svg);
  background-repeat: no-repeat;
  background-position: left center;
  background-size: auto 100%;
}

  


.editor[data-v-46f9af64] {
  display: flex;
  height: 100%;
}
.tree[data-v-46f9af64] {
  flex: 1;
}
.page[data-v-46f9af64] {
  flex: 2;
  display: flex;
  padding-right: 2vw;
  padding-left:2vw;
  flex-direction: column;
}
.preview[data-v-46f9af64] {
  flex: 1;
}


/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9hc3NldHMvanMvY29tcG9uZW50cy9mb3Jtcy9hc3NldHMvanMvY29tcG9uZW50cy9mb3Jtcy9GaWVsZFR5cEZvcm0udnVlIiwid2VicGFjazovLy8uL2Fzc2V0cy9qcy9jb21wb25lbnRzL2ZpZWxkcy9hc3NldHMvanMvY29tcG9uZW50cy9maWVsZHMvVGV4dEZpZWxkLnZ1ZSIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvdnVlLWNvcmUtaW1hZ2UtdXBsb2FkL2Rpc3Qvbm9kZV9tb2R1bGVzL3Z1ZS1jb3JlLWltYWdlLXVwbG9hZC9kaXN0L3Jlc2l6ZS1iYXIudnVlIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy92dWUtY29yZS1pbWFnZS11cGxvYWQvZGlzdC9ub2RlX21vZHVsZXMvdnVlLWNvcmUtaW1hZ2UtdXBsb2FkL2Rpc3Qvcm90YXRlLWJhci52dWUiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3Z1ZS1jb3JlLWltYWdlLXVwbG9hZC9kaXN0L3N0eWxlL2Nyb3AuY3NzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy92dWUtY29yZS1pbWFnZS11cGxvYWQvZGlzdC9zdHlsZS9zdHlsZS5jc3MiLCJ3ZWJwYWNrOi8vLy4vYXNzZXRzL2pzL2NvbXBvbmVudHMvYXNzZXRzL2pzL2NvbXBvbmVudHMvRWRpdEdhbGxlcnkudnVlIiwid2VicGFjazovLy8uL2Fzc2V0cy9qcy9jb21wb25lbnRzL2Fzc2V0cy9qcy9jb21wb25lbnRzL0VkaXRNZWRpYS52dWUiLCJ3ZWJwYWNrOi8vLy4vYXNzZXRzL2pzL2NvbXBvbmVudHMvZWRpdG9yL2Fzc2V0cy9qcy9jb21wb25lbnRzL2VkaXRvci9FZGl0b3JUcmVlLnZ1ZSIsIndlYnBhY2s6Ly8vLi9hc3NldHMvanMvY29tcG9uZW50cy9maWVsZHMvYXNzZXRzL2pzL2NvbXBvbmVudHMvZmllbGRzL1RleHRhcmVhRmllbGQudnVlIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb2RlbWlycm9yL2xpYi9jb2RlbWlycm9yLmNzcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29kZW1pcnJvci90aGVtZS9iYXNlMTYtbGlnaHQuY3NzIiwid2VicGFjazovLy8uL2Fzc2V0cy9qcy9jb21wb25lbnRzL2ZpZWxkcy9hc3NldHMvanMvY29tcG9uZW50cy9maWVsZHMvSHRtbEZpZWxkLnZ1ZSIsIndlYnBhY2s6Ly8vLi9hc3NldHMvanMvY29tcG9uZW50cy9maWVsZHMvYXNzZXRzL2pzL2NvbXBvbmVudHMvZmllbGRzL0phdmFzY3JpcHRGaWVsZC52dWUiLCJ3ZWJwYWNrOi8vLy4vYXNzZXRzL2pzL2NvbXBvbmVudHMvZmllbGRzL2Fzc2V0cy9qcy9jb21wb25lbnRzL2ZpZWxkcy9Dc3NGaWVsZC52dWUiLCJ3ZWJwYWNrOi8vLy4vYXNzZXRzL2pzL2NvbXBvbmVudHMvZm9ybXMvYXNzZXRzL2pzL2NvbXBvbmVudHMvZm9ybXMvQ2F0c1BhZ2VzU2VsZWN0TG9vcC52dWUiLCJ3ZWJwYWNrOi8vLy4vYXNzZXRzL2pzL2NvbXBvbmVudHMvZm9ybXMvYXNzZXRzL2pzL2NvbXBvbmVudHMvZm9ybXMvQ2F0c1BhZ2VzU2VsZWN0LnZ1ZSIsIndlYnBhY2s6Ly8vLi9hc3NldHMvanMvY29tcG9uZW50cy9maWVsZHMvYXNzZXRzL2pzL2NvbXBvbmVudHMvZmllbGRzL0xpbmtGaWVsZC52dWUiLCJ3ZWJwYWNrOi8vLy4vYXNzZXRzL2pzL2NvbXBvbmVudHMvZmllbGRzL2Fzc2V0cy9qcy9jb21wb25lbnRzL2ZpZWxkcy9TZWxlY3RGaWVsZC52dWUiLCJ3ZWJwYWNrOi8vLy4vYXNzZXRzL2pzL2NvbXBvbmVudHMvZmllbGRzL2Fzc2V0cy9qcy9jb21wb25lbnRzL2ZpZWxkcy9JbWFnZUZpZWxkLnZ1ZSIsIndlYnBhY2s6Ly8vLi9hc3NldHMvanMvY29tcG9uZW50cy9mb3Jtcy9hc3NldHMvanMvY29tcG9uZW50cy9mb3Jtcy9DYXRzUGFnZXNGaWVsZHNTZWxlY3RMb29wLnZ1ZSIsIndlYnBhY2s6Ly8vLi9hc3NldHMvanMvY29tcG9uZW50cy9mb3Jtcy9hc3NldHMvanMvY29tcG9uZW50cy9mb3Jtcy9DYXRzUGFnZXNGaWVsZHNTZWxlY3QudnVlIiwid2VicGFjazovLy8uL2Fzc2V0cy9qcy9jb21wb25lbnRzL2ZpZWxkcy9hc3NldHMvanMvY29tcG9uZW50cy9maWVsZHMvQ2hlY2tGaWVsZC52dWUiLCJ3ZWJwYWNrOi8vLy4vYXNzZXRzL2pzL2NvbXBvbmVudHMvZmllbGRzL2Fzc2V0cy9qcy9jb21wb25lbnRzL2ZpZWxkcy9NZWRpYUZpZWxkLnZ1ZSIsIndlYnBhY2s6Ly8vLi9hc3NldHMvanMvY29tcG9uZW50cy9maWVsZHMvYXNzZXRzL2pzL2NvbXBvbmVudHMvZmllbGRzL0xvb3BGaWVsZC52dWUiLCJ3ZWJwYWNrOi8vLy4vYXNzZXRzL2pzL2NvbXBvbmVudHMvZmllbGRzL2Fzc2V0cy9qcy9jb21wb25lbnRzL2ZpZWxkcy9GaW5pc2hGaWVsZC52dWUiLCJ3ZWJwYWNrOi8vLy4vYXNzZXRzL2pzL2NvbXBvbmVudHMvZmllbGRzL2Fzc2V0cy9qcy9jb21wb25lbnRzL2ZpZWxkcy9GYXZvcml0RmllbGQudnVlIiwid2VicGFjazovLy8uL2Fzc2V0cy9qcy9jb21wb25lbnRzL2VkaXRvci9hc3NldHMvanMvY29tcG9uZW50cy9lZGl0b3IvRWRpdG9yRm9ybS52dWUiLCJ3ZWJwYWNrOi8vLy4vYXNzZXRzL2pzL2NvbXBvbmVudHMvZWRpdG9yL2Fzc2V0cy9qcy9jb21wb25lbnRzL2VkaXRvci9FZGl0b3JQcmV2aWV3LnZ1ZSIsIndlYnBhY2s6Ly8vLi9hc3NldHMvanMvY29tcG9uZW50cy9lZGl0b3IvYXNzZXRzL2pzL2NvbXBvbmVudHMvZWRpdG9yL0VkaXRvclBhZ2UudnVlIiwid2VicGFjazovLy8uL2Fzc2V0cy9qcy9jb21wb25lbnRzL2Fzc2V0cy9qcy9jb21wb25lbnRzL0VkaXRvci52dWUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQTJHQTtFQUNBO0VBQ0E7RUFDQTtFQUNB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O0lBRUE7OztJQUdBO0NBSUE7QUFHQTtJQUNBO0lBQ0E7SUFDQTtJQUNBOztJQUVBOztJQUVBO0NBQ0E7QUFFQTtJQUNBO0lBQ0E7SUFDQTtJQUNBOztJQUVBOzs7SUFHQTtDQUNBO0FBS0E7RUFDQTtDQUNBOzs7O0FDMUlBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtDQUNBO0FBQ0E7RUFDQTtDQUNBO0FBQ0E7RUFDQTtDQUNBO0FBQ0E7RUFDQTtDQUNBOzs7Ozs7QUM5RUE7RUFDQTtDQUNBO0FBQ0E7RUFDQTtDQUNBO0FBQ0E7RUFDQTtDQUNBOzs7QUN1REE7RUFDQTtDQUNBO0FBQ0E7RUFDQTtDQUNBO0FBQ0E7RUFDQTtDQUNBO0FBRUE7RUFDQTtFQUNBO0NBQ0E7OztBQzVDQTtFQUNBO0NBQ0E7QUFFQTtJQUNBO0lBQ0E7SUFDQTtJQUNBOztJQUVBOztJQUVBO0lBQ0E7Q0FDQTs7OztBQzZIQTtFQUNBO0NBQ0E7QUFDQTtFQUNBO0NBQ0E7QUFDQTtFQUNBO0NBQ0E7QUFFQTs7RUFFQTtDQUNBO0FBR0E7RUFDQTtDQUNBO0FBRUE7SUFDQTtJQUNBO0lBQ0E7SUFDQTs7SUFFQTs7SUFFQTs7SUFFQTtDQUVBO0FBRUE7RUFDQTtFQUNBO0FBQ0E7QUFDQTtDQUNBO0FBRUE7RUFDQTtDQUNBO0FBRUE7SUFDQTtJQUNBO0lBQ0E7SUFDQTs7SUFFQTtJQUNBO0lBQ0E7Q0FDQTtBQUVBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7O0lBRUE7OztJQUdBO0NBQ0E7Ozs7QUM3RkE7Q0FFQTtBQUNBO0lBQ0E7Q0FDQTtBQUNBOztJQUVBO0NBQ0E7QUFFQTtJQUNBO0lBQ0E7Q0FDQTtBQUdBO0lBQ0E7SUFDQTtDQUNBO0FBRUE7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0NBQ0E7QUFDQTtJQUNBO0NBQ0E7QUFHQTs7SUFFQTtDQUNBO0FBQ0E7O0lBRUE7Q0FDQTs7OztBQ2hIQTtFQUNBO0NBQ0E7QUFDQTtFQUNBO0NBQ0E7QUFDQTtFQUNBO0NBQ0E7Ozs7QUM2R0E7RUFDQTtFQUNBOztFQUVBO0VBQ0E7RUFDQTtFQUNBOztFQUVBO0VBQ0E7Q0FFQTtBQUVBO0VBQ0E7RUFDQTs7RUFFQTtFQUNBO0VBQ0E7RUFDQTs7RUFFQTs7RUFFQTtDQUNBO0FBRUE7RUFDQTtFQUNBOztFQUVBO0VBQ0E7RUFDQTtFQUNBOztFQUVBO0NBS0E7QUFFQTtFQUNBO0NBQ0E7QUFDQTtHQUNBO0dBQ0E7R0FDQTtHQUNBO0dBQ0E7O0dBRUE7R0FDQTtHQUNBO0dBQ0E7Q0FDQTtBQUVBO0dBQ0E7Q0FDQTs7O0FDck9BO0VBQ0E7RUFDQTtDQUVBO0FBQ0E7RUFDQTtDQUNBO0FBQ0E7RUFDQTtDQUNBOzs7Ozs7QUN3QkE7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0NBQ0E7QUFDQTtFQUNBO0NBQ0E7QUFDQTtFQUNBO0NBQ0E7QUFDQTtFQUNBO0NBQ0E7Ozs7OztBQ21EQTs7RUFFQTtFQUNBO0VBQ0E7RUFDQTtDQUNBO0FBSUE7O0VBRUE7O0VBRUE7Q0FFQTtBQUVBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7Q0FFQTtBQUdBO0VBQ0E7RUFDQTtFQUNBO0NBQ0E7QUFFQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtDQUNBO0FBRUE7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7O0VBRUE7RUFDQTtDQUNBO0FBQ0E7RUFDQTtDQUVBOzs7Ozs7O0FDM0lBO0VBQ0E7Q0FDQTtBQUNBO0VBQ0E7Q0FFQTtBQUVBO0VBQ0E7Q0FDQTtBQUNBO0VBQ0E7Q0FDQTtBQUNBO0VBQ0E7RUFDQTtFQUNBOztFQUVBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7O0VBRUE7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtDQUdBO0FBRUE7QUFDQTtHQUNBO0dBQ0E7R0FDQTtFQUNBO0NBRUE7QUFDQTs7O0dBR0E7O29CQUVBOztBQUVBO0NBRUE7QUFDQTtHQUNBO0dBQ0E7R0FDQTtHQUNBO0dBQ0E7R0FDQTtHQUNBO0dBQ0E7R0FDQTtHQUNBO0dBQ0E7Q0FDQTtBQUNBO0dBQ0E7Q0FHQTtBQUNBO0dBQ0E7R0FDQTtDQUNBO0FBQ0E7R0FDQTtHQUNBO0NBQ0E7QUFDQTtHQUNBO0dBQ0E7R0FDQTtHQUNBO0dBQ0E7R0FDQTtHQUNBO0NBQ0E7QUFDQTtHQUNBO0dBQ0E7Q0FDQTs7O0FDdENBO0VBQ0E7O0VBRUE7RUFDQTs7R0FFQTs7RUFFQTtDQUNBO0FBRUE7RUFDQTtDQUNBO0FBRUE7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtDQUNBO0FBRUE7O0VBRUE7RUFDQTtDQUNBO0FBRUE7O0VBRUE7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0NBRUE7QUFFQTtFQUNBO0NBQ0E7QUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7Q0FDQTtBQUVBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7Q0FDQTtBQUVBO0VBQ0E7Q0FDQTtBQUNBO0VBQ0E7Q0FDQTtBQUVBO0VBQ0E7Q0FDQTtBQUVBOzs7RUFHQTtFQUNBO0VBQ0E7RUFDQTs7RUFFQTtFQUNBO0VBQ0E7Q0FFQTtBQUVBO0VBQ0E7Q0FDQTtBQUNBO0VBQ0E7Q0FDQTtBQUlBOzs7RUFHQTtFQUNBO0VBQ0E7RUFDQTs7RUFFQTtFQUNBO0VBQ0E7Q0FFQTtBQUVBO0VBQ0E7Q0FDQTtBQUNBO0VBQ0E7Q0FDQTtBQUNBO0VBQ0E7Q0FDQTtBQUlBOzs7RUFHQTtFQUNBO0VBQ0E7RUFDQTs7RUFFQTtFQUNBO0VBQ0E7RUFDQTtDQUVBO0FBRUE7O0VBRUE7RUFDQTtFQUNBO0VBQ0E7O0VBRUE7RUFDQTtFQUNBO0VBQ0E7Q0FFQTtBQUdBOztFQUVBO0VBQ0E7RUFDQTtFQUNBOztFQUVBO0VBQ0E7RUFDQTtFQUNBO0NBRUE7Ozs7O0FDUUE7RUFDQTtFQUNBO0NBQ0E7QUFDQTtFQUNBO0NBQ0E7QUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7Q0FDQTtBQUNBO0VBQ0E7Q0FDQSIsImZpbGUiOiJlZGl0b3IuY3NzIiwic291cmNlc0NvbnRlbnQiOlsiPHRlbXBsYXRlPlxuXG4gIDxkaXYgY2xhc3M9XCJjb20tZmllbGR0eXAtZm9ybVwiPlxuXG4gICAgPGlucHV0XG4gICAgICB0eXBlPVwiaGlkZGVuXCJcbiAgICAgIDppZD1cImlkXCJcbiAgICAgIDpuYW1lPVwibmFtZVwiXG4gICAgICA6dmFsdWU9XCJ2YWx1ZVwiXG4gICAgLz5cblxuICAgIDxkaXYgY2xhc3M9XCJsaXN0LWJvcmRlclwiPlxuICAgICAgPGlucHV0IHR5cGU9XCJzZWFyY2hcIiBjbGFzcz1cInNlYXJjaFwiIHBsYWNob2xkZXI9XCJTdWNoZW4uLi5cIiB2LW1vZGVsPVwic2VhcmNoXCIvPlxuICAgICAgPGRpdiBjbGFzcz1cImxpc3Qtd3JhcFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwibGlzdC1pdGVtXCJcbiAgICAgICAgICB2LWJpbmQ6Y2xhc3M9XCJ7ICdhY3RpdmUnOiBvcHRpb24uaWQgPT0gdmFsdWUgfVwiXG4gICAgICAgICAgdi1mb3I9XCJvcHRpb24gaW4gZmlsdGVyZWRJdGVtc1wiXG4gICAgICAgICAgQGNsaWNrPVwiaGFuZGxlckNsaWNrKG9wdGlvbilcIlxuICAgICAgICA+e3tvcHRpb24ubmFtZX19PC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICA8L2Rpdj5cblxuPC90ZW1wbGF0ZT5cbiBcbjxzY3JpcHQ+XG5cbiAgLy9pbXBvcnQgQ2F0c1BhZ2VzU2VsZWN0TG9vcCBmcm9tICcuL0NhdHNQYWdlc1NlbGVjdExvb3AnXG5cbiAgIGV4cG9ydCBkZWZhdWx0IHtcbiAgICAgIG5hbWU6IFwiZmllbGQtdHlwLWZvcm1cIixcbiAgICAgIHByb3BzOiBbXG4gICAgICAgICdzZWxlY3RlZCcsXG4gICAgICAgICdvcGVuJyxcbiAgICAgICAgJ25hbWUnLFxuICAgICAgICAnaWQnLFxuICAgICAgICAnb3B0aW9ucydcbiAgICAgIF0sXG4gICAgICBjb21wb25lbnRzOiB7XG4gICAgICAgIFxuICAgICAgfSxcbiAgICAgIGRhdGE6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBzZWFyY2g6ICcnLFxuICAgICAgICAgIHZhbHVlOiBmYWxzZSxcbiAgICAgICAgICBpdGVtczogW11cbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIGNvbXB1dGVkOiB7XG4gICAgICAgIFxuICAgICAgICBmaWx0ZXJlZEl0ZW1zKCkge1xuICAgICAgICAgIHJldHVybiB0aGlzLml0ZW1zLmZpbHRlcihpdGVtID0+IHtcbiAgICAgICAgICAgIHJldHVybiBpdGVtLm5hbWUudG9Mb3dlckNhc2UoKS5pbmRleE9mKHRoaXMuc2VhcmNoLnRvTG93ZXJDYXNlKCkpID4gLTFcbiAgICAgICAgICB9KVxuICAgICAgICB9XG5cbiAgICAgIH0sXG4gICAgICBjcmVhdGVkOiBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgLy9jb25zb2xlLmxvZygnZmllbGQtdHlwLWZvcm0tIGNyZWF0ZWQnLCB0aGlzLm9wdGlvbnMpO1xuXG4gICAgICAgdGhpcy52YWx1ZSA9IHRoaXMuc2VsZWN0ZWQ7XG4gICAgICAgXG4gICAgICAgLy9jb25zb2xlLmxvZyh0aGlzLm9wdGlvbnMpO1xuXG4gICAgICAgaWYgKHRoaXMub3B0aW9ucykge1xuICAgICAgICAgIGlmICh0eXBlb2YgdGhpcy5vcHRpb25zID09PSAnc3RyaW5nJyB8fCB0aGlzLm9wdGlvbnMgaW5zdGFuY2VvZiBTdHJpbmcpIHtcbiAgICAgICAgICAgIHRoaXMuaXRlbXMgPSBKU09OLnBhcnNlKHRoaXMub3B0aW9ucyk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuaXRlbXMgPSB0aGlzLm9wdGlvbnM7XG4gICAgICAgICAgfVxuICAgICAgICAgLy9jb25zb2xlLmxvZyh0aGlzLm9wdGlvbnMpO1xuICAgICAgICAgLy9jb25zb2xlLmxvZyggSlNPTi5wYXJzZSh0aGlzLm9wdGlvbnMpICk7XG4gICAgICAgICBjb25zb2xlLmxvZyggdGhpcy5pdGVtcyApO1xuICAgICAgICAgIFxuICAgICAgIH1cbiAgICAgIH0sXG4gICAgICB3YXRjaDoge1xuICAgICAgICAvLyB3aGVuZXZlciBxdWVzdGlvbiBjaGFuZ2VzLCB0aGlzIGZ1bmN0aW9uIHdpbGwgcnVuXG4gICAgICAgIG9wZW46IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy5zZWxlY3RlZDtcbiAgICAgICAgICAvLyBjb25zb2xlLmxvZygnZG9uZScsIHRoaXMuc2VsZWN0ZWQsIHRoaXMudmFsdWUpO1xuICAgICAgICAgIC8vIGNvbnNvbGUubG9nKHRoaXMub3B0aW9ucyk7XG4gICAgICAgICAgaWYgKHR5cGVvZiB0aGlzLm9wdGlvbnMgPT09ICdzdHJpbmcnIHx8IHRoaXMub3B0aW9ucyBpbnN0YW5jZW9mIFN0cmluZykge1xuICAgICAgICAgICAgdGhpcy5pdGVtcyA9IEpTT04ucGFyc2UodGhpcy5vcHRpb25zKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5pdGVtcyA9IHRoaXMub3B0aW9ucztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBtZXRob2RzOiB7XG5cbiAgICAgICAgaGFuZGxlckNsaWNrOiBmdW5jdGlvbiAob3B0aW9uKSB7XG4gICAgICAgICAgLy9jb25zb2xlLmxvZyhvcHRpb24uaWQpO1xuICAgICAgICAgIGlmIChvcHRpb24gJiYgb3B0aW9uLmlkKSB7XG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gb3B0aW9uLmlkO1xuICAgICAgICAgICAgdGhpcy4kZW1pdCgnY2hhbmdlJywge3ZhbHVlOiB0aGlzLnZhbHVlLCBkYXRhOiB0aGlzLm5hbWV9KVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICB9XG4gICB9XG48L3NjcmlwdD5cbiBcbjxzdHlsZSBzY29wZWQ+XG5cbiAgLnNlYXJjaCB7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgYm9yZGVyLXRvcDowO1xuICAgIGJvcmRlci1sZWZ0OjA7XG4gICAgYm9yZGVyLXJpZ2h0OjA7XG5cbiAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoJy4uLy4uLy4uL2ljb25zL2x1cGUuc3ZnJyk7XG4gICAgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDtcbiAgICBiYWNrZ3JvdW5kLXNpemU6IGF1dG8gNDUlO1xuICAgIGJhY2tncm91bmQtcG9zaXRpb246IDAuNXJlbSBjZW50ZXI7XG5cbiAgICBwYWRkaW5nLWxlZnQ6IDEuN3JlbTtcblxuICB9XG48L3N0eWxlPiIsIjx0ZW1wbGF0ZT5cbiAgPGRpdiBjbGFzcz1cImZpZWxkLWl0ZW1cIj5cbiAgXG4gICAgPGxhYmVsPnt7ZmllbGQubmFtZX19PC9sYWJlbD5cbiAgICA8aW5wdXQgdHlwZT1cInRleHRcIiB2LWJpbmQ6bmFtZT1cImZpZWxkLnZhcmlhYmxlXCIgdi1tb2RlbD1cImZpZWxkLmNvbnRlbnRcIiAgcGxhY2Vob2xkZXI9XCJcIiAvPlxuICAgICAgICBcbiAgPC9kaXY+XG4gIFxuXG48L3RlbXBsYXRlPlxuIFxuPHNjcmlwdD5cbiAgIGV4cG9ydCBkZWZhdWx0IHtcbiAgICAgIG5hbWU6IFwidGV4dGZpZWxkXCIsXG4gICAgICBwcm9wczogW1xuICAgICAgICAnZmllbGQnXG4gICAgICBdLFxuICAgICAgY29tcG9uZW50czoge1xuICAgICAgICBcbiAgICAgIH0sXG4gICAgICBkYXRhOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBjcmVhdGVkOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIC8vY29uc29sZS5sb2coJy1jcmVhdGVkJyk7XG4gICAgICAgIFxuICAgICAgfSxcbiAgICAgIHdhdGNoOiB7XG4gICAgICAgIC8vIHdoZW5ldmVyIHF1ZXN0aW9uIGNoYW5nZXMsIHRoaXMgZnVuY3Rpb24gd2lsbCBydW5cblxuICAgICAgfSxcbiAgICAgIG1ldGhvZHM6IHtcblxuXG4gICAgICB9XG4gICB9XG48L3NjcmlwdD5cbiBcbjxzdHlsZSBzY29wZWQ+XG4gIC5maWVsZC1pdGVtIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICB9XG4gIC5maWVsZC1pdGVtIGxhYmVsIHtcbiAgICBmbGV4OiAxO1xuICB9XG4gIC5maWVsZC1pdGVtIGlucHV0IHtcbiAgICBmbGV4OiAxO1xuICB9XG48L3N0eWxlPiIsIjx0ZW1wbGF0ZT5cbiAgPGRpdiBjbGFzcz1cImctcmVzaXplLWJhclwiPlxuICAgIDxkaXYgY2xhc3M9XCJnLXJlc2l6ZS1oaWdobGlnaHRcIiA6c3R5bGU9XCJ7d2lkdGg6IGxlZnQgKyAnJScsfVwiPjwvZGl2PlxuICAgIDxidXR0b24gY2xhc3M9XCJjaXJjbGUtYnRuXCIgQHRvdWNoc3RhcnQuc2VsZj1cImRyYWdcIiBAbW91c2Vkb3duLnNlbGY9XCJkcmFnXCIgOnN0eWxlPVwie2xlZnQ6IGxlZnQgKyAnJScsfVwiPjwvYnV0dG9uPlxuICA8L2Rpdj5cbjwvdGVtcGxhdGU+XG5cbjxzdHlsZSBzY29wZWQ+XG4gIC5nLXJlc2l6ZS1iYXJ7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIGJvdHRvbTogMHB4O1xuICAgIG1hcmdpbjogMTdweCBhdXRvO1xuICAgIGhlaWdodDogNnB4O1xuICAgIGJvcmRlci1yYWRpdXM6IDNweDtcbiAgICB3aWR0aDoyMDBweDtcbiAgICBtYXJnaW4tbGVmdDogLTEwMHB4O1xuICAgIGxlZnQ6IDUwJTtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjYThmOWNhO1xuICAgIGJveC1zaGFkb3c6IDAgMnB4IDNweCAtMXB4IHJnYmEoMCwwLDAsLjMpO1xuICB9XG4gIC5nLXJlc2l6ZS1oaWdobGlnaHR7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIGxlZnQ6IDA7XG4gICAgdG9wOjA7XG4gICAgaGVpZ2h0OiA2cHg7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogIzI3YWU2MDtcbiAgICBib3JkZXItcmFkaXVzOiAzcHg7XG4gIH1cbiAgLmNpcmNsZS1idG57XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIGxlZnQ6MDtcbiAgICB0b3A6IC01cHg7XG4gICAgd2lkdGg6IDE0cHg7XG4gICAgaGVpZ2h0OiAxNHB4O1xuICAgIG1hcmdpbi1sZWZ0OiAtN3B4O1xuICAgIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XG4gICAgYm9yZGVyLXJhZGl1czogN3B4O1xuICAgIGJveC1zaGFkb3c6IDAgMnB4IDNweCAtMnB4IHJnYmEoMCwwLDAsLjYpLCAwIC0ycHggM3B4IC0ycHggcmdiYSgwLDAsMCwuNTUpO1xuICAgIGJvcmRlci13aWR0aDogMDtcbiAgfVxuPC9zdHlsZT5cblxuPHNjcmlwdD5cbmltcG9ydCBoZWxwZXIgZnJvbSAnLi9saWIvaGVscGVyJztcbmltcG9ydCBkcmFnIGZyb20gJy4vbGliL2RyYWcnO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIHByb3BzOiB7XG4gICAgbWluUHJvZ3Jlc3M6IHtcbiAgICAgIHR5cGU6W051bWJlciwgU3RyaW5nXSxcbiAgICAgIGRlZmF1bHQ6IDAsXG4gICAgfVxuXG4gIH0sXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHByb2dyZXNzOiAxMDAsXG4gICAgICBsZWZ0OiAxMDAsXG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBzZXRQcm9ncmVzcyhudW0pIHtcbiAgICAgIHRoaXMubGVmdCA9IG51bTtcbiAgICB9LFxuXG4gICAgZHJhZyhlKSB7XG4gICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgY29uc3QgJGVsID0gZS50YXJnZXQ7XG4gICAgICB0aGlzLmVsID0gJGVsO1xuICAgICAgY29uc3QgJGNvbnRhaW5lciA9IHRoaXMuJGVsLnBhcmVudEVsZW1lbnQ7XG4gICAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICAgIGNvbnN0IGlzTW9iaWxlID0gaGVscGVyLmlzTW9iaWxlO1xuICAgICAgY29uc3Qgd2lkdGggPSAyMDA7XG4gICAgICBjb25zdCBjb29yID0ge1xuICAgICAgICB4OiAoaXNNb2JpbGUgPyBlLnRvdWNoZXNbMF1bJ2NsaWVudFgnXSA6IGUuY2xpZW50WCkgLSAkZWwub2Zmc2V0TGVmdCxcbiAgICAgICAgeTogKGlzTW9iaWxlID8gZS50b3VjaGVzWzBdWydjbGllbnRZJ10gOiBlLmNsaWVudFkpIC0gJGVsLm9mZnNldFRvcCxcbiAgICAgICAgbWF4TGVmdDogd2lkdGgsXG4gICAgICAgIG1heFRvcDogcGFyc2VJbnQoJGNvbnRhaW5lci5zdHlsZS5oZWlnaHQpIC0gcGFyc2VJbnQoJGVsLnN0eWxlLmhlaWdodCksXG4gICAgICAgIG1pbkxlZnQ6IDAsXG4gICAgICAgIG1pblRvcDogMCxcbiAgICAgIH07XG4gICAgICBjb25zdCBtb3ZlID0gZnVuY3Rpb24gKGV2KSB7XG4gICAgICAgIGNvbnN0IG5ld0Nvb3IgPSBkcmFnKGV2LCBzZWxmLmVsLCBjb29yKTtcbiAgICAgICAgaWYgKG5ld0Nvb3IpIHtcbiAgICAgICAgICBpZigobmV3Q29vci5sZWZ0IC8gd2lkdGgpIDwgc2VsZi5taW5Qcm9ncmVzcykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICBzZWxmLnByb2dyZXNzID0gKG5ld0Nvb3IubGVmdC13aWR0aC8yKSAvIHdpZHRoO1xuICAgICAgICAgIHNlbGYubGVmdCA9IG5ld0Nvb3IubGVmdCAvIHdpZHRoICogMTAwO1xuXG4gICAgICAgICAgc2VsZi4kZW1pdCgncmVzaXplJywgc2VsZi5wcm9ncmVzcyk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBjb25zdCBzdG9wTW92ZSA9IGZ1bmN0aW9uIChldikge1xuICAgICAgICBzZWxmLmVsID0gbnVsbDtcbiAgICAgICAgaWYgKGlzTW9iaWxlKSB7XG4gICAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigndG91Y2htb3ZlJywgbW92ZSwgZmFsc2UpO1xuICAgICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3RvdWNoZW5kJywgc3RvcE1vdmUsIGZhbHNlKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgbW92ZSwgZmFsc2UpO1xuICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZXVwJywgc3RvcE1vdmUsIGZhbHNlKTtcbiAgICAgIH07XG4gICAgICBpZiAoaXNNb2JpbGUpIHtcbiAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2htb3ZlJywgbW92ZSwgZmFsc2UpO1xuICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCd0b3VjaGVuZCcsIHN0b3BNb3ZlLCBmYWxzZSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIG1vdmUsIGZhbHNlKTtcbiAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLCBzdG9wTW92ZSwgZmFsc2UpO1xuICAgIH1cblxuICB9LFxuXG5cbn07XG48L3NjcmlwdD5cbiIsIjx0ZW1wbGF0ZT5cbiAgPGRpdiBjbGFzcz1cImctcm90YXRlLWJhclwiPlxuICAgIDxhIGhyZWY9XCJqYXZhc2NyaXB0OjtcIiBAY2xpY2s9XCJyb3RhdGVMZWZ0XCI+XG4gICAgICA8c3ZnIGNsYXNzPVwic3ZnLWljb25cIiB2aWV3Qm94PVwiMCAwIDQ4MS45NSA0ODEuOTVcIj5cbiAgICAgICAgPHBhdGggZD1cIk0yODEuNywyNDMuOFYxMzguMmM3NS45LDEzLjUsMTM1LjQsNzguNiwxMzUuNCwxNTkuOHMtNTkuNiwxNDYuMy0xMzUuNCwxNTkuOFY1MTJcbiAgICAgICAgICBjMTA1LjctMTMuNSwxODkuNi0xMDIuOSwxODkuNi0yMTRzLTg0LTIwMC41LTE4OS42LTIxNFYwTDE1OS44LDEyMS45TDI4MS43LDI0My44eiBNOTQuOCwyNzAuOWMyLjctMjQuNCwxMy41LTQ2LjEsMjcuMS02Ny43XG4gICAgICAgICAgTDg0LDE2NS4yQzU5LjYsMTk3LjgsNDYuMSwyMzMsNDAuNiwyNzAuOUg5NC44eiBNMTU5LjgsNDMwLjdsLTM3LjksMzcuOWMzMi41LDI0LjQsNjcuNywzNy45LDEwNS43LDQzLjN2LTU0LjJcbiAgICAgICAgICBDMjAzLjIsNDU1LjEsMTgxLjUsNDQ0LjMsMTU5LjgsNDMwLjd6IE05NC44LDMyNS4xSDQwLjZjMi43LDM3LjksMTksNzMuMSw0My4zLDEwNS43bDM3LjktMzcuOVxuICAgICAgICAgIEMxMDguNCwzNzEuMSw5Ny41LDM0OS41LDk0LjgsMzI1LjF6XCIgZmlsbD1cIiMyN2FlNjBcIiAvPlxuICAgICAgPC9zdmc+XG4gICAgPC9hPlxuICAgIDxhIGhyZWY9XCJqYXZhc2NyaXB0OjtcIiBAY2xpY2s9XCJyb3RhdGVSaWdodFwiPlxuICAgICAgPHN2ZyBjbGFzcz1cInN2Zy1pY29uXCIgdmlld0JveD1cIjAgMCA0ODEuOTUgNDgxLjk1XCI+XG4gICAgICBcdFx0PHBhdGggZD1cIk0zMzEuNSwxMTQuNzVMMjE2Ljc1LDB2NzkuMDVDMTE3LjMsOTEuOCwzOC4yNSwxNzUuOTUsMzguMjUsMjgwLjVzNzkuMDUsMTg4LjcsMTc4LjUsMjAxLjQ1di01MSAgICBDMTQ1LjM1LDQxOC4yLDg5LjI1LDM1Nyw4OS4yNSwyODAuNXM1Ni4xLTEzNy43LDEyNy41LTE1MC40NXY5OS40NUwzMzEuNSwxMTQuNzV6IE00NDMuNywyNTUgICAgYy01LjEwMS0zNS43LTE3Ljg1MS02OC44NS00MC44LTk5LjQ1bC0zNS43LDM1LjdjMTIuNzUsMjAuNCwyMi45NSw0MC44LDI1LjUsNjMuNzVINDQzLjd6IE0yNjcuNzUsNDMwLjk1djUxICAgIGMzNS43LTUuMTAxLDY4Ljg1LTE3Ljg1MSw5OS40NS00MC44bC0zNS43LTM1LjdDMzExLjEsNDE4LjIsMjkwLjcsNDI4LjQsMjY3Ljc1LDQzMC45NXogTTM2Ny4yLDM2OS43NWwzNS43LDM1LjcgICAgYzIyLjk0OS0zMC42MDEsMzguMjUtNjMuNzUsNDAuOC05OS40NWgtNTFDMzkwLjE1LDMyOC45NSwzNzkuOTUsMzQ5LjM1LDM2Ny4yLDM2OS43NXpcIiBmaWxsPVwiIzI3YWU2MFwiLz5cbiAgICAgIDwvc3ZnPlxuICAgIDwvYT5cbiAgPC9kaXY+XG48L3RlbXBsYXRlPlxuXG48c3R5bGU+XG4uZy1yb3RhdGUtYmFye1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICBib3R0b206IDMwcHg7XG4gICAgbGVmdDogMDtcbiAgICByaWdodDogMDtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG59XG4uZy1yb3RhdGUtYmFyIC5zdmctaWNvbntcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICB3aWR0aDogMS4yZW07XG4gIGhlaWdodDogMS4yZW07XG4gIG1hcmdpbjogMCAyZW07XG59XG48L3N0eWxlPlxuXG48c2NyaXB0PlxuZXhwb3J0IGRlZmF1bHQge1xuICBkYXRhKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgcm90YXRlRGVncmVlOiAwLFxuICAgICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICByb3RhdGVSaWdodCgpIHtcbiAgICAgIHRoaXMucm90YXRlRGVncmVlICs9IDkwO1xuICAgICAgdGhpcy4kZW1pdCgncm90YXRlJywgdGhpcy5yb3RhdGVEZWdyZWUpO1xuICAgIH0sXG5cbiAgICByb3RhdGVMZWZ0KCkge1xuICAgICAgdGhpcy5yb3RhdGVEZWdyZWUgLT0gOTA7XG4gICAgICB0aGlzLiRlbWl0KCdyb3RhdGUnLCB0aGlzLnJvdGF0ZURlZ3JlZSk7XG4gICAgfSxcbiAgfVxufTtcblxuPC9zY3JpcHQ+XG4iLCIuZy1jcm9wLWltYWdlLXByaW5jaXBhbFtkYXRhLXYtMzVjNWE2NmRde1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XG4gICAgYmFja2dyb3VuZC1pbWFnZTogLXdlYmtpdC1saW5lYXItZ3JhZGllbnQoYm90dG9tIGxlZnQsICNlZmVmZWYgMjUlLCB0cmFuc3BhcmVudCAyNSUsIHRyYW5zcGFyZW50IDc1JSwgI2VmZWZlZiA3NSUsICNlZmVmZWYpLC13ZWJraXQtbGluZWFyLWdyYWRpZW50KGJvdHRvbSBsZWZ0LCAjZWZlZmVmIDI1JSwgdHJhbnNwYXJlbnQgMjUlLCB0cmFuc3BhcmVudCA3NSUsICNlZmVmZWYgNzUlLCAjZWZlZmVmKTtcbiAgICBiYWNrZ3JvdW5kLWltYWdlOiAtbW96LWxpbmVhci1ncmFkaWVudChib3R0b20gbGVmdCwgI2VmZWZlZiAyNSUsIHRyYW5zcGFyZW50IDI1JSwgdHJhbnNwYXJlbnQgNzUlLCAjZWZlZmVmIDc1JSwgI2VmZWZlZiksLW1vei1saW5lYXItZ3JhZGllbnQoYm90dG9tIGxlZnQsICNlZmVmZWYgMjUlLCB0cmFuc3BhcmVudCAyNSUsIHRyYW5zcGFyZW50IDc1JSwgI2VmZWZlZiA3NSUsICNlZmVmZWYpO1xuICAgIGJhY2tncm91bmQtaW1hZ2U6IC1vLWxpbmVhci1ncmFkaWVudChib3R0b20gbGVmdCwgI2VmZWZlZiAyNSUsIHRyYW5zcGFyZW50IDI1JSwgdHJhbnNwYXJlbnQgNzUlLCAjZWZlZmVmIDc1JSwgI2VmZWZlZiksLW8tbGluZWFyLWdyYWRpZW50KGJvdHRvbSBsZWZ0LCAjZWZlZmVmIDI1JSwgdHJhbnNwYXJlbnQgMjUlLCB0cmFuc3BhcmVudCA3NSUsICNlZmVmZWYgNzUlLCAjZWZlZmVmKTtcbiAgICBiYWNrZ3JvdW5kLWltYWdlOiBsaW5lYXItZ3JhZGllbnQodG8gdG9wIHJpZ2h0LCAjZWZlZmVmIDI1JSwgdHJhbnNwYXJlbnQgMjUlLCB0cmFuc3BhcmVudCA3NSUsICNlZmVmZWYgNzUlLCAjZWZlZmVmKSxsaW5lYXItZ3JhZGllbnQodG8gdG9wIHJpZ2h0LCAjZWZlZmVmIDI1JSwgdHJhbnNwYXJlbnQgMjUlLCB0cmFuc3BhcmVudCA3NSUsICNlZmVmZWYgNzUlLCAjZWZlZmVmKTtcbiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIDAsMTBweCAxMHB4O1xuICAgIC13ZWJraXQtYmFja2dyb3VuZC1zaXplOiAyMXB4IDIxcHg7XG4gICAgYmFja2dyb3VuZC1zaXplOiAyMXB4IDIxcHg7XG59XG4uaW1hZ2UtYXNpZGVbZGF0YS12LTM1YzVhNjZkXXtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICByaWdodDogMzBweDtcbiAgICBsZWZ0OjMwcHg7XG4gICAgdG9wOjcwcHg7XG4gICAgYm90dG9tOjQwcHg7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xufVxuLmltYWdlLWFzaWRlIC5pbWFnZS13cmFwW2RhdGEtdi0zNWM1YTY2ZF17XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIGxlZnQ6IDA7XG4gICAgdG9wOiAwO1xuICAgIC13ZWJraXQtdG91Y2gtY2FsbG91dDogbm9uZTtcbiAgICAtd2Via2l0LXVzZXItc2VsZWN0OiBub25lO1xuICAgIC1raHRtbC11c2VyLXNlbGVjdDogbm9uZTtcbiAgICAtbW96LXVzZXItc2VsZWN0OiBub25lO1xuICAgIC1tcy11c2VyLXNlbGVjdDogbm9uZTtcbiAgICB1c2VyLXNlbGVjdDogbm9uZTtcbiAgICBib3gtc2hhZG93OiAwIDNweCA1cHggLTJweCByZ2JhKDAsMCwwLC4yNSk7XG4gICAgYmFja2dyb3VuZC1zaXplOiBjb3Zlcjtcbn1cbi5pbWFnZS1tYXNrW2RhdGEtdi0zNWM1YTY2ZF17XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIGxlZnQ6IDA7XG4gICAgdG9wOiAwO1xuICAgIHdpZHRoOjEwMCU7XG4gICAgaGVpZ2h0OiAxMDAlO1xufVxuLmltYWdlLW1hc2sgLm1hc2tbZGF0YS12LTM1YzVhNjZkXSB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMjU1LDI1NSwyNTUsLjYpO1xufVxuLmNyb3AtYm94W2RhdGEtdi0zNWM1YTY2ZF17XG4gICAgei1pbmRleDogMjAwMDtcbiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICBiYWNrZ3JvdW5kOiBub25lO1xuICAgIGN1cnNvcjogbW92ZTtcbiAgICB3aWR0aDoxMDBweDtcbiAgICBoZWlnaHQ6IDEwMHB4O1xuICAgIGJvcmRlcjoxcHggc29saWQgcmdiYSgyNTUsMjU1LDI1NSwgLjk1KTtcbn1cbi5jcm9wLWJveFtkYXRhLXYtMzVjNWE2NmRdOmFmdGVyLFxuICAuY3JvcC1ib3hbZGF0YS12LTM1YzVhNjZkXTpiZWZvcmV7XG4gICAgY29udGVudDogJyc7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgb3BhY2l0eTogMDtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgbGVmdDogMzMuMzMzMyU7XG4gICAgdG9wOiAwO1xuICAgIHdpZHRoOiAzMy4zMzQlO1xuICAgIGhlaWdodDogMTAwJTtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgICBib3JkZXItY29sb3I6IHJnYmEoMjU1LDI1NSwyNTUsLjcpO1xuICAgIGJvcmRlci1zdHlsZTogc29saWQ7XG4gICAgYm9yZGVyLXdpZHRoOiAwO1xufVxuLmNyb3AtYm94W2RhdGEtdi0zNWM1YTY2ZF06YWN0aXZlOjpiZWZvcmUsXG4gIC5jcm9wLWJveFtkYXRhLXYtMzVjNWE2NmRdOmFjdGl2ZTo6YWZ0ZXJ7XG4gICAgb3BhY2l0eTogMTtcbn1cbi5jcm9wLWJveFtkYXRhLXYtMzVjNWE2NmRdOmJlZm9yZXtcbiAgICBib3JkZXItbGVmdC13aWR0aDogMXB4O1xuICAgIGJvcmRlci1yaWdodC13aWR0aDogMXB4O1xufVxuLmNyb3AtYm94W2RhdGEtdi0zNWM1YTY2ZF06YWZ0ZXJ7XG4gICAgdG9wOiAzMy4zMzMzJTtcbiAgICBsZWZ0OiAwO1xuICAgIGhlaWdodDogMzMuMzMzNCU7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgYm9yZGVyLXRvcC13aWR0aDogMXB4O1xuICAgIGJvcmRlci1ib3R0b20td2lkdGg6IDFweDtcbn1cbi5jcm9wLWJveCAuZy1yZXNpemVbZGF0YS12LTM1YzVhNjZkXXtcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgei1pbmRleDogMTkxMDtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgYm90dG9tOiAtOHB4O1xuICAgIHJpZ2h0OiAtOHB4O1xuICAgIHdpZHRoOiAxNnB4O1xuICAgIGhlaWdodDogMTZweDtcbiAgICBjdXJzb3I6IHNlLXJlc2l6ZTtcbiAgICBib3JkZXItcmFkaXVzOiAxMHB4O1xuICAgIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XG4gICAgYm94LXNoYWRvdzogMCAycHggNHB4IC0ycHggcmdiYSgwLDAsMCwuMjUpO1xufVxuIiwiLmctY29yZS1pbWFnZS11cGxvYWQtYnRue1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIG92ZXJmbG93OiBoaWRkZW47XG59XG4uZy1jb3JlLWltYWdlLXVwbG9hZC1mb3Jte1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIGxlZnQ6MDtcbiAgcmlnaHQ6IDA7XG4gIHRvcDowO1xuICBib3R0b206MDtcbiAgd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogMTAwJTtcbiAgbWluLWhlaWdodDogNjFweDtcbiAgb3BhY2l0eTogMDtcbn1cbi5nLWNvcmUtaW1hZ2UtdXBsb2FkLWZvcm0gaW5wdXR7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgaGVpZ2h0OiAxMDAlO1xufVxuLmctY29yZS1pbWFnZS11cGxvYWQtY29udGFpbmVye1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIGJhY2tncm91bmQ6ICMxMTE7XG4gIHotaW5kZXg6IDkwMDtcbn1cbi5nLWNvcmUtaW1hZ2UtdXBsb2FkLW1vZGFse1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIGxlZnQ6MDtcbiAgcmlnaHQ6MDtcbiAgd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogMTAwJTtcbiAgYm9yZGVyOjFweCBzb2xpZCAjY2NjO1xuICB6LWluZGV4OiA4OTk7XG59XG4uZHJvcHBlZHtcbiAgYm9yZGVyOjRweCBzb2xpZCAjZWE2MTUzO1xufVxuLmctY29yZS1pbWFnZS1jb3JwLWNvbnRhaW5lcntcbiAgei1pbmRleDogMTkwMDtcbiAgcG9zaXRpb246Zml4ZWQ7XG4gIGxlZnQ6MDtcbiAgcmlnaHQ6MDtcbiAgdG9wOjA7XG4gIGJvdHRvbTogMDtcbiAgYmFja2dyb3VuZDogcmdiYSgwLDAsMCwuOSk7XG4gIGNvbG9yOiNmMWYxZjE7XG59XG4uZy1jb3JlLWltYWdlLWNvcnAtY29udGFpbmVyIC5pbWFnZS1hc2lkZXtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICByaWdodDogMzBweDtcbiAgbGVmdDozMHB4O1xuICB0b3A6NjBweDtcbiAgYm90dG9tOjIwcHg7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbn1cbi5nLWNvcmUtaW1hZ2UtY29ycC1jb250YWluZXIgLmltYWdlLWFzaWRlIGltZ3tcbiAgbWF4LXdpZHRoOiAxMDAlO1xuICAtd2Via2l0LXRvdWNoLWNhbGxvdXQ6IG5vbmU7XG4gIC13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7XG4gIC1raHRtbC11c2VyLXNlbGVjdDogbm9uZTtcbiAgLW1vei11c2VyLXNlbGVjdDogbm9uZTtcbiAgLW1zLXVzZXItc2VsZWN0OiBub25lO1xuICB1c2VyLXNlbGVjdDogbm9uZTtcbn1cbi5nLWNvcmUtaW1hZ2UtY29ycC1jb250YWluZXIgLmluZm8tYXNpZGV7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgbGVmdDowO1xuICByaWdodDogMDtcbiAgdG9wOjA7XG4gIGhlaWdodDogNDBweDtcbiAgcGFkZGluZy1sZWZ0OiAxMHB4O1xuICBwYWRkaW5nLXJpZ2h0OiAxMHB4O1xuICBiYWNrZ3JvdW5kOiAjZmVmZWZlO1xuICBjb2xvcjojNzc3O1xufVxuLmctY29yZS1pbWFnZS1jb3JwLWNvbnRhaW5lciAuYnRuLWdyb3Vwc3tcbiAgdGV4dC1hbGlnbjogcmlnaHQ7XG4gIG1hcmdpbjogNXB4IDAgMDtcbn1cbi5nLWNvcmUtaW1hZ2UtY29ycC1jb250YWluZXIgLmJ0bntcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICBwYWRkaW5nOiAwIDE1cHg7XG4gIGhlaWdodDogMzJweDtcbiAgbWFyZ2luLWxlZnQ6IDE1cHg7XG4gIGJhY2tncm91bmQ6ICNmZmY7XG4gIGJvcmRlcjoxcHggc29saWQgI2NjYztcbiAgYm9yZGVyLXJhZGl1czogMnB4O1xuICBmb250LXNpemU6IDEzcHg7XG4gIGNvbG9yOiMyMjI7XG4gIGxpbmUtaGVpZ2h0OiAzMnB4O1xuICB0cmFuc2l0aW9uOiBhbGwgLjFzIGVhc2UtaW47XG59XG4uZy1jb3JlLWltYWdlLWNvcnAtY29udGFpbmVyIC5idG46aG92ZXJ7XG4gIGJvcmRlcjoxcHggc29saWQgIzc3NztcbiAgYm94LXNoYWRvdzogMCAxcHggM3B4IHJnYmEoMCwwLDAsLjA1KTtcbn1cbi5nLWNvcmUtaW1hZ2UtY29ycC1jb250YWluZXIgLmJ0bjphY3RpdmV7XG4gIGJhY2tncm91bmQ6ICNkZGQ7XG59XG4uZy1jb3JlLWltYWdlLWNvcnAtY29udGFpbmVyIC5idG46ZGlzYWJsZWR7XG4gIGJhY2tncm91bmQ6ICNlZWUgIWltcG9ydGFudDtcbiAgYm9yZGVyLWNvbG9yOiNjY2M7XG4gIGN1cnNvcjogbm90LWFsbG93ZWQ7XG59XG4uZy1jb3JlLWltYWdlLWNvcnAtY29udGFpbmVyIC5idG4tdXBsb2Fke1xuICBiYWNrZ3JvdW5kOiAjMjdhZTYwO1xuICBib3JkZXItY29sb3I6IzI3YWU2MDtcbiAgY29sb3I6I2ZmZjtcbn1cbi5nLWNvcmUtaW1hZ2UtY29ycC1jb250YWluZXIgLmJ0bi11cGxvYWQ6aG92ZXJ7XG4gIGJhY2tncm91bmQ6ICMyZGMyNmM7XG4gIGJvcmRlci1jb2xvcjojMjdhZTYwO1xuICBib3gtc2hhZG93OiAwIDFweCAzcHggcmdiYSgwLDAsMCwuMDUpO1xufVxuIiwiPHRlbXBsYXRlPlxuICA8ZGl2XG4gICAgcmVmPVwiYWpheGZvcm1XcmFwXCJcbiAgICBjbGFzcz1cImVkaXQtZ2FsbGVyeSBhamF4Zm9ybVdyYXBcIlxuICAgIHYtc2hvdz1cIm9wZW5cIj5cblxuICAgIDxidXR0b24gdi1vbjpjbGljaz1cImhhbmRsZUNsb3NlXCIgY2xhc3M9XCJjbG9zZVwiPjwvYnV0dG9uPlxuXG4gICAgPGRpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJ0YWItaGVhZFwiPlxuICAgICAgICA8YnV0dG9uIFxuICAgICAgICAgIHYtYmluZDpjbGFzcz1cInsgJ2FjdGl2ZScgOiB0YWIgPT0gJ2dhbGxlcnknfVwiXG4gICAgICAgICAgdi1vbjpjbGljaz1cImhhbmRsZVRhYignZ2FsbGVyeScpXCIgXG4gICAgICAgID5BcHA8L2J1dHRvbj5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgIHYtYmluZDpjbGFzcz1cInsgJ2FjdGl2ZScgOiB0YWIgPT0gJ3BhZ2UnfVwiXG4gICAgICAgICAgdi1vbjpjbGljaz1cImhhbmRsZVRhYigncGFnZScpXCJcbiAgICAgICAgPlNlaXRlPC9idXR0b24+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdiB2LWlmPVwidGFiID09ICdwYWdlJ1wiPlxuICAgICAgICA8aDM+UGFnZTwvaDM+XG4gICAgICAgIDx1bD5cbiAgICAgICAgICA8bGlcbiAgICAgICAgICAgIHYtb246Y2xpY2s9XCJoYW5kbGVDbGljaygpXCJcbiAgICAgICAgICA+Tml4PC9saT5cbiAgICAgICAgICA8bGlcbiAgICAgICAgICAgIHYtZm9yPVwiZmllbGQgaW4gZmlsZXNcIlxuICAgICAgICAgICAgdi1vbjpjbGljaz1cImhhbmRsZUNsaWNrKGZpZWxkKVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBjbGFzcz1cImltYWdlXCJcbiAgICAgICAgICAgICAgOnN0eWxlPVwieydiYWNrZ3JvdW5kLWltYWdlJzogJ3VybCgnK2ZpZWxkLmZvbGRlcisnLycrZmllbGQuZmlsZW5hbWUrJyknfVwiXG4gICAgICAgICAgICA+PC9kaXY+XG4gICAgICAgICAgPC9saT5cbiAgICAgICAgPC91bD5cbiAgICAgICAgPHZ1ZS1jb3JlLWltYWdlLXVwbG9hZFxuICAgICAgICAgIGNsYXNzPVwiYnRuXCJcbiAgICAgICAgICA6Y3JvcD1cImZhbHNlXCJcbiAgICAgICAgICBAaW1hZ2V1cGxvYWRlZD1cImltYWdldXBsb2FkZWRcIlxuICAgICAgICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgICAgICAgOm1heC1maWxlLXNpemU9XCI1MjQyODgwXCJcbiAgICAgICAgICA6dXJsPVwiJy9nYWxsZXJ5L3VwbG9hZC8nK3BhZ2VpZFwiID5cbiAgICAgICAgPC92dWUtY29yZS1pbWFnZS11cGxvYWQ+XG5cbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0blwiPkVkaXQgR2FsbGVyeTwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXYgdi1pZj1cInRhYiA9PSAnZ2FsbGVyeSdcIj5cbiAgICAgICAgPGgzPkdhbGxlcnk8L2gzPlxuICAgICAgICA8dWw+XG4gICAgICAgICAgPGxpXG4gICAgICAgICAgICB2LW9uOmNsaWNrPVwiaGFuZGxlQ2xpY2soKVwiXG4gICAgICAgICAgPk5peDwvbGk+XG4gICAgICAgICAgPGxpXG4gICAgICAgICAgICB2LWZvcj1cImZpZWxkIGluIGdhbGxlcnlcIlxuICAgICAgICAgICAgdi1vbjpjbGljaz1cImhhbmRsZUNsaWNrKGZpZWxkKVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBjbGFzcz1cImltYWdlXCJcbiAgICAgICAgICAgICAgOnN0eWxlPVwieydiYWNrZ3JvdW5kLWltYWdlJzogJ3VybCgnK2ZpZWxkLmZvbGRlcisnLycrZmllbGQuZmlsZW5hbWUrJyknfVwiXG4gICAgICAgICAgICA+PC9kaXY+XG4gICAgICAgICAgPC9saT5cbiAgICAgICAgPC91bD5cbiAgICAgIDwvZGl2PlxuXG4gICAgPC9kaXY+XG5cbiAgICBcblxuICA8L2Rpdj5cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgVnVlQ29yZUltYWdlVXBsb2FkIGZyb20gJ3Z1ZS1jb3JlLWltYWdlLXVwbG9hZCdcblxuZXhwb3J0IGRlZmF1bHQge1xuICBuYW1lOiBcImVkaXQtZ2FsbGVyeVwiLFxuICBjb21wb25lbnRzOiB7XG4gICAgJ3Z1ZS1jb3JlLWltYWdlLXVwbG9hZCc6IFZ1ZUNvcmVJbWFnZVVwbG9hZCxcbiAgfSxcbiAgcHJvcHM6IFtcbiAgICAnZmlsZXMnLFxuICAgICdnYWxsZXJ5JyxcbiAgICAncGFnZWlkJ1xuICBdLFxuICBkYXRhOiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHRhYjogJ3BhZ2UnLFxuICAgICAgZGF0YToge1xuICAgICAgICAvL3NyYzogJ2h0dHA6Ly9pbWcxLnZ1ZWQudmFudGhpbmsuY24vdnVlZDBhMjMzMTg1YjYwMjcyNDRmOWQ0M2U2NTMyMjc0MzlhLnBuZycsXG4gICAgICB9LFxuXG4gICAgICBvcGVuOiBmYWxzZVxuICAgIH1cbiAgfSxcbiAgY3JlYXRlZDogZnVuY3Rpb24gKCkge1xuXG4gICAgLy9jb25zb2xlLmxvZyh0aGlzLmZpbGVzKTtcblxuICB9LFxuICBtZXRob2RzOiB7XG5cbiAgICBoYW5kbGVUYWIodGFiKSB7XG4gICAgICB0aGlzLnRhYiA9IHRhYjtcbiAgICB9LFxuICAgIGhhbmRsZUNsaWNrKGZpZWxkKSB7XG5cbiAgICAgIGlmICh0aGlzLmNhbGxiYWNrKSB7XG4gICAgICAgIHRoaXMuY2FsbGJhY2soZmllbGQpO1xuICAgICAgICB0aGlzLmNsb3NlRm9ybSgpO1xuICAgICAgfVxuICAgICAgXG4gICAgICBcbiAgICB9LFxuICAgIGhhbmRsZUNsb3NlOiBmdW5jdGlvbiAoKSB7XG4gICAgICB0aGlzLmNsb3NlRm9ybSgpO1xuICAgIH0sXG4gICAgY2xvc2VGb3JtOiBmdW5jdGlvbiAoKSB7XG4gICAgICAvL2NvbnNvbGUubG9nKCdjbG9zZSBjYXRlZ29yeScpO1xuICAgICAgdGhpcy5vcGVuID0gZmFsc2U7XG4gICAgfSxcbiAgICBoYW5kbGVPcGVuKG9iaikge1xuICAgICAgdGhpcy5vcGVuID0gJ29wZW4nO1xuXG4gICAgICBpZiAob2JqLmNhbGxiYWNrKSB7XG4gICAgICAgIHRoaXMuY2FsbGJhY2sgPSBvYmouY2FsbGJhY2s7XG4gICAgICB9XG4gICAgfSxcbiAgICBpbWFnZXVwbG9hZGVkKHJlcykge1xuXG4gICAgICAvL2NvbnNvbGUubG9nKCdyZXR1cm4nLCByZXMpO1xuXG4gICAgICBpZiAocmVzLmVycmNvZGUgPT0gMCkge1xuICAgICAgICBcbiAgICAgICAgRXZlbnRCdXMuJGVtaXQoJ2Zvcm0tZWRpdCcsIHsnY2hhbmdlZERhdGEnOiByZXMuZGF0YX0gKTtcblxuICAgICAgICAvL3RoaXMuZmlsZXMgPSByZXMuZGF0YTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn07XG48L3NjcmlwdD5cblxuPHN0eWxlPlxuXG5cbi50YWItaGVhZCAuYWN0aXZlIHtcbiAgY29sb3I6IHJlZDtcbn1cblxuLmVkaXQtZ2FsbGVyeSB1bCB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtd3JhcDogd3JhcDtcbn1cblxuLmVkaXQtZ2FsbGVyeSBsaSB7XG4gIGZsZXg6IDE7XG4gIGJhY2tncm91bmQtY29sb3I6ICNjY2M7XG5cbiAgbWluLXdpZHRoOiA1dnc7XG4gIG1heC13aWR0aDogNXZ3O1xuXG4gIG1hcmdpbjogMC41dnc7XG4gIHBhZGRpbmc6IDAuNXZ3O1xuXG4gIFxufVxuXG4uZWRpdC1nYWxsZXJ5IGxpOmhvdmVyIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzIyMjtcbiAgY29sb3I6ICNjY2M7XG59XG5cblxuLmVkaXQtZ2FsbGVyeSBsaSAuaW1hZ2Uge1xuXG4gIHdpZHRoOjEwMCU7XG4gIGhlaWdodDogNXZ3O1xuXG4gIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7XG4gIGJhY2tncm91bmQtcG9zaXRpb246IGNlbnRlcjtcbiAgYmFja2dyb3VuZC1zaXplOiBjb250YWluO1xuXG4gIG1hcmdpbi1ib3R0b206IDAuMnJlbTtcblxufVxuXG48L3N0eWxlPiIsIjx0ZW1wbGF0ZT5cbiAgPGRpdlxuICAgIHJlZj1cImFqYXhmb3JtV3JhcFwiXG4gICAgY2xhc3M9XCJlZGl0LWdhbGxlcnkgYWpheGZvcm1XcmFwXCJcbiAgICB2LXNob3c9XCJvcGVuXCI+XG5cbiAgICA8YnV0dG9uIHYtb246Y2xpY2s9XCJoYW5kbGVDbG9zZVwiIGNsYXNzPVwiY2xvc2VcIj48L2J1dHRvbj5cblxuICAgIDxkaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwidGFiLWhlYWRcIj5cbiAgICAgICAgPGJ1dHRvbiBcbiAgICAgICAgICB2LWJpbmQ6Y2xhc3M9XCJ7ICdhY3RpdmUnIDogdGFiID09ICdnYWxsZXJ5J31cIlxuICAgICAgICAgIHYtb246Y2xpY2s9XCJoYW5kbGVUYWIoJ2dhbGxlcnknKVwiIFxuICAgICAgICA+QXBwPC9idXR0b24+XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICB2LWJpbmQ6Y2xhc3M9XCJ7ICdhY3RpdmUnIDogdGFiID09ICdwYWdlJ31cIlxuICAgICAgICAgIHYtb246Y2xpY2s9XCJoYW5kbGVUYWIoJ3BhZ2UnKVwiXG4gICAgICAgID5TZWl0ZTwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXYgdi1pZj1cInRhYiA9PSAncGFnZSdcIj5cbiAgICAgICAgPGgzPlBhZ2U8L2gzPlxuICAgICAgICA8dWw+XG4gICAgICAgICAgPGxpXG4gICAgICAgICAgICB2LW9uOmNsaWNrPVwiaGFuZGxlQ2xpY2soKVwiXG4gICAgICAgICAgPk5peDwvbGk+XG4gICAgICAgICAgPGxpXG4gICAgICAgICAgICB2LWZvcj1cImZpZWxkIGluIGZpbGVzXCJcbiAgICAgICAgICAgIHYtb246Y2xpY2s9XCJoYW5kbGVDbGljayhmaWVsZClcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgY2xhc3M9XCJpbWFnZVwiXG4gICAgICAgICAgICA+e3tmaWVsZC5mb2xkZXIrJy8nK2ZpZWxkLmZpbGVuYW1lfX08L2Rpdj5cbiAgICAgICAgICA8L2xpPlxuICAgICAgICA8L3VsPlxuICAgICAgICA8ZmlsZS11cGxvYWRcbiAgICAgICAgICA6dXJsPSd1cmwnXG4gICAgICAgICAgOmhlYWRlcnM9XCJoZWFkZXJzXCJcbiAgICAgICAgICA6YWNjZXB0PSdhY2NlcHQnXG4gICAgICAgICAgQGNoYW5nZT1cIm9uRmlsZUNoYW5nZVwiPjwvZmlsZS11cGxvYWQ+XG5cbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0blwiPkVkaXQgTWVkaWE8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2IHYtaWY9XCJ0YWIgPT0gJ2dhbGxlcnknXCI+XG4gICAgICAgIDxoMz5HYWxsZXJ5PC9oMz5cbiAgICAgICAgPHVsPlxuICAgICAgICAgIDxsaVxuICAgICAgICAgICAgdi1vbjpjbGljaz1cImhhbmRsZUNsaWNrKClcIlxuICAgICAgICAgID5OaXg8L2xpPlxuICAgICAgICAgIDxsaVxuICAgICAgICAgICAgdi1mb3I9XCJmaWVsZCBpbiBtZWRpYVwiXG4gICAgICAgICAgICB2LW9uOmNsaWNrPVwiaGFuZGxlQ2xpY2soZmllbGQpXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGNsYXNzPVwiaW1hZ2VcIlxuICAgICAgICAgICAgPnt7ZmllbGQuZm9sZGVyKycvJytmaWVsZC5maWxlbmFtZX19PC9kaXY+XG4gICAgICAgICAgPC9saT5cbiAgICAgICAgPC91bD5cbiAgICAgIDwvZGl2PlxuXG4gICAgPC9kaXY+XG5cbiAgICBcblxuICA8L2Rpdj5cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgVnVlIGZyb20gJ3Z1ZSdcbmltcG9ydCBGaWxlVXBsb2FkIGZyb20gJ3YtZmlsZS11cGxvYWQnXG5WdWUudXNlKEZpbGVVcGxvYWQpXG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgbmFtZTogXCJlZGl0LW1lZGlhXCIsXG4gIGNvbXBvbmVudHM6IHtcbiAgICAvLyd2dWUtY29yZS1pbWFnZS11cGxvYWQnOiBWdWVDb3JlSW1hZ2VVcGxvYWQsXG4gIH0sXG4gIHByb3BzOiBbXG4gICAgJ2ZpbGVzJyxcbiAgICAnbWVkaWEnLFxuICAgICdwYWdlaWQnXG4gIF0sXG4gIGRhdGE6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdGFiOiAncGFnZScsXG4gICAgICBkYXRhOiB7XG4gICAgICAgIC8vc3JjOiAnaHR0cDovL2ltZzEudnVlZC52YW50aGluay5jbi92dWVkMGEyMzMxODViNjAyNzI0NGY5ZDQzZTY1MzIyNzQzOWEucG5nJyxcbiAgICAgIH0sXG4gICAgICBvcGVuOiBmYWxzZSxcblxuICAgICAgdXJsOiAnL21lZGlhL3VwbG9hZC8nK3RoaXMucGFnZWlkLFxuICAgICAgaGVhZGVyczogeydhY2Nlc3MtdG9rZW4nOiAnPHlvdXItdG9rZW4+J30sXG4gICAgICBmaWxlc1VwbG9hZGVkOiBbXSxcbiAgICAgIGFjY2VwdDogJy5tcDMnXG5cbiAgICB9XG4gIH0sXG4gIGNyZWF0ZWQ6IGZ1bmN0aW9uICgpIHtcblxuICAgIGNvbnNvbGUubG9nKHRoaXMuZmlsZXMpO1xuXG4gIH0sXG4gIG1ldGhvZHM6IHtcblxuICAgIG9uRmlsZUNoYW5nZSAoZmlsZSkge1xuICAgICAgLy8gSGFuZGxlIGZpbGVzIGxpa2U6XG4gICAgICB0aGlzLmZpbGVVcGxvYWRlZCA9IGZpbGVcblxuICAgIH0sXG4gICAgaGFuZGxlVGFiKHRhYikge1xuICAgICAgdGhpcy50YWIgPSB0YWI7XG4gICAgfSxcbiAgICBoYW5kbGVDbGljayhmaWVsZCkge1xuXG4gICAgICBpZiAodGhpcy5jYWxsYmFjaykge1xuICAgICAgICB0aGlzLmNhbGxiYWNrKGZpZWxkKTtcbiAgICAgICAgdGhpcy5jbG9zZUZvcm0oKTtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgXG4gICAgfSxcbiAgICBoYW5kbGVDbG9zZTogZnVuY3Rpb24gKCkge1xuICAgICAgdGhpcy5jbG9zZUZvcm0oKTtcbiAgICB9LFxuICAgIGNsb3NlRm9ybTogZnVuY3Rpb24gKCkge1xuICAgICAgLy9jb25zb2xlLmxvZygnY2xvc2UgY2F0ZWdvcnknKTtcbiAgICAgIHRoaXMub3BlbiA9IGZhbHNlO1xuICAgIH0sXG4gICAgaGFuZGxlT3BlbihvYmopIHtcbiAgICAgIHRoaXMub3BlbiA9ICdvcGVuJztcblxuICAgICAgaWYgKG9iai5jYWxsYmFjaykge1xuICAgICAgICB0aGlzLmNhbGxiYWNrID0gb2JqLmNhbGxiYWNrO1xuICAgICAgfVxuICAgIH0sXG4gICAgaW1hZ2V1cGxvYWRlZChyZXMpIHtcblxuICAgICAgLy9jb25zb2xlLmxvZygncmV0dXJuJywgcmVzKTtcblxuICAgICAgaWYgKHJlcy5lcnJjb2RlID09IDApIHtcbiAgICAgICAgXG4gICAgICAgIEV2ZW50QnVzLiRlbWl0KCdmb3JtLWVkaXQnLCB7J2NoYW5nZWREYXRhJzogcmVzLmRhdGF9ICk7XG5cbiAgICAgICAgLy90aGlzLmZpbGVzID0gcmVzLmRhdGE7XG4gICAgICB9XG4gICAgfVxuICB9XG59O1xuPC9zY3JpcHQ+XG5cbjxzdHlsZT5cblxuXG4udGFiLWhlYWQgLmFjdGl2ZSB7XG4gIGNvbG9yOiByZWQ7XG59XG5cbi5lZGl0LWdhbGxlcnkgdWwge1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LXdyYXA6IHdyYXA7XG59XG5cbi5lZGl0LWdhbGxlcnkgbGkge1xuICBmbGV4OiAxO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjY2NjO1xuXG4gIG1pbi13aWR0aDogNXZ3O1xuICBtYXgtd2lkdGg6IDV2dztcblxuICBtYXJnaW46IDAuNXZ3O1xuICBwYWRkaW5nOiAwLjV2dztcblxuICBcbn1cblxuLmVkaXQtZ2FsbGVyeSBsaTpob3ZlciB7XG4gIGJhY2tncm91bmQtY29sb3I6ICMyMjI7XG4gIGNvbG9yOiAjY2NjO1xufVxuXG5cbi5lZGl0LWdhbGxlcnkgbGkgLmltYWdlIHtcblxuICB3aWR0aDoxMDAlO1xuICBoZWlnaHQ6IDV2dztcblxuICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0O1xuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBjZW50ZXI7XG4gIGJhY2tncm91bmQtc2l6ZTogY29udGFpbjtcblxuICBtYXJnaW4tYm90dG9tOiAwLjJyZW07XG5cbn1cblxuPC9zdHlsZT4iLCI8dGVtcGxhdGU+XG5cbiAgICBcbiAgICA8dWwgY2xhc3M9XCJlZGl0b3ItdHJlZVwiPlxuPCEtLSA6b3B0aW9ucz1cIntkcmFnZ2FibGU6Jy5pdGVtJ31cIiAtLT5cbiAgICAgIDxkcmFnZ2FibGVcbiAgICAgICAgOmxpc3Q9XCJjYXRzcGFnZXMuY2F0ZWdvcmllc1wiXG4gICAgICAgIDpvcHRpb25zPVwie2dyb3VwOidjYXRlZ29yaWVzJ31cIlxuICAgICAgICBAc3RhcnQ9XCJkcmFnPXRydWVcIlxuICAgICAgICBAZW5kPVwiZHJhZz1mYWxzZVwiXG4gICAgICAgIEBjaGFuZ2U9XCJvblNvcnRDYXRlZ29yaWVzXCJcbiAgICAgID5cbiAgICAgIFxuXG4gICAgICA8bGkgY2xhc3M9XCJjYXRcIlxuICAgICAgICBcbiAgICAgICAgdi1pZj1cImNhdHNwYWdlcy5jYXRlZ29yaWVzXCJcbiAgICAgICAgdi1mb3I9XCJjYXQgaW4gY2F0c3BhZ2VzLmNhdGVnb3JpZXNcIlxuICAgICAgICBcbiAgICAgICAgPlxuICAgICAgICBcbiAgICAgICAgPGRpdiBjbGFzcz1cIml0ZW1cIj5cbiAgICAgICAgICBcbiAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuX2VkaXRvcl9wYWdlIHRyaWdnZXJcIiBcbiAgICAgICAgICAgIHYtYmluZDpjbGFzcz1cInsgYWN0aXZlOiBjYXQuaXNBY3RpdmUgfVwiXG4gICAgICAgICAgICB2LW9uOmNsaWNrPVwibG9hZCgkZXZlbnQsIGNhdClcIlxuICAgICAgICAgICAgdi10b29sdGlwPVwie1xuICAgICAgICAgICAgICBjb250ZW50OifDlmZmbmV0IG9kZXIgU2NobGllw590IGRpZSBLYXRlZ29yaWUnLFxuICAgICAgICAgICAgICBkZWxheTogeyBzaG93OiA4MDAsIGhpZGU6IDEwMDAgfSxcbiAgICAgICAgICAgICAgcGxhY2VtZW50OiAndG9wJ1xuICAgICAgICAgICAgfVwiXG4gICAgICAgICAgICA+e3tjYXQubmFtZX19XG4gICAgICAgICAgPC9idXR0b24+XG5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiYnRuX2VkaXRvcl9zb3J0IHRyaWdnZXJFZGl0XCI+PC9kaXY+XG5cbiAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuX2VkaXRvcl9lZGl0IHRyaWdnZXJFZGl0XCIgXG4gICAgICAgICAgICB2LWJpbmQ6Y2xhc3M9XCJ7IGFjdGl2ZTogY2F0LmlzRWRpdCB9XCJcbiAgICAgICAgICAgIHYtb246Y2xpY2s9XCJlZGl0Q2F0KCRldmVudCwgY2F0KVwiXG4gICAgICAgICAgICB2LXRvb2x0aXA9XCJ7XG4gICAgICAgICAgICAgIGNvbnRlbnQ6J0JlYXJiZWl0ZW4gZGVyIEthdGVnb3JpZScsXG4gICAgICAgICAgICAgIGRlbGF5OiB7IHNob3c6IDgwMCwgaGlkZTogMTAwMCB9LFxuICAgICAgICAgICAgICBwbGFjZW1lbnQ6ICdyaWdodCdcbiAgICAgICAgICAgIH1cIlxuICAgICAgICAgID48L2J1dHRvbj5cbiAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuX2VkaXRvcl9hZGQgdHJpZ2dlckVkaXRcIiBcbiAgICAgICAgICAgIHYtb246Y2xpY2s9XCJuZXdDYXQoJGV2ZW50LCBjYXQpXCJcbiAgICAgICAgICAgIHYtdG9vbHRpcD1cIntcbiAgICAgICAgICAgICAgY29udGVudDonSGluenVmw7xnZW4gZWluZXIgbmV1ZW4gS2F0ZWdvcmllJyxcbiAgICAgICAgICAgICAgZGVsYXk6IHsgc2hvdzogODAwLCBoaWRlOiAxMDAwIH0sXG4gICAgICAgICAgICAgIHBsYWNlbWVudDogJ3JpZ2h0J1xuICAgICAgICAgICAgfVwiXG4gICAgICAgICAgPjwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cblxuXG4gICAgICAgIDxlZGl0b3ItdHJlZSB2LXNob3c9XCJjYXRBY3RpdmUoY2F0KVwiXG4gICAgICAgICAgdi1iaW5kOmFjdGl2ZT1cImFjdGl2ZVwiXG4gICAgICAgICAgdi1iaW5kOmNhdHNwYWdlcz1cInsnY2F0ZWdvcmllcyc6IGNhdC5jaGlsZHMsICdwYWdlcyc6IGNhdC5wYWdlc31cIlxuICAgICAgICAgIHYtYmluZDpwYXJlbnRDYXQ9XCJjYXQuaWRcIlxuICAgICAgICAgIHYtYmluZDpmaXJzdD1cImZhbHNlXCI+PC9lZGl0b3ItdHJlZT5cblxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJ0cmlnZ2VyQWRkV3JhcFwiXG4gICAgICAgICAgdi1zaG93PVwiY2F0LmlzQWN0aXZlXCI+XG4gICAgICAgICAgXG4gICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0bl9lZGl0b3JfYWRkIHRyaWdnZXJBZGRcIiBcbiAgICAgICAgICAgIHYtb246Y2xpY2s9XCJuZXdQYWdlKCRldmVudCwgY2F0KVwiXG4gICAgICAgICAgICB2LXRvb2x0aXA9XCJ7XG4gICAgICAgICAgICAgIGNvbnRlbnQ6J0hpbnp1ZsO8Z2VuIGVpbmVyIG5ldWVuIFNlaXRlJyxcbiAgICAgICAgICAgICAgZGVsYXk6IHsgc2hvdzogODAwLCBoaWRlOiAxMDAwIH0sXG4gICAgICAgICAgICAgIHBsYWNlbWVudDogJ3JpZ2h0J1xuICAgICAgICAgICAgfVwiXG4gICAgICAgICAgPk5ldWUgU2VpdGU8L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIFxuICAgICAgPC9saT5cbiAgICAgIDwvZHJhZ2dhYmxlPlxuXG4gICAgICA8ZHJhZ2dhYmxlXG4gICAgICAgIDpsaXN0PVwiY2F0c3BhZ2VzLnBhZ2VzXCJcbiAgICAgICAgOm9wdGlvbnM9XCJ7Z3JvdXA6J3BhZ2VzJ31cIlxuICAgICAgICBAc3RhcnQ9XCJkcmFnPXRydWVcIlxuICAgICAgICBAZW5kPVwiZHJhZz1mYWxzZVwiXG4gICAgICAgIEBjaGFuZ2U9XCJvblNvcnRQYWdlc1wiXG4gICAgICA+XG4gICAgICAgIDxsaSBjbGFzcz1cInBhZ2VcIlxuICAgICAgICAgIHYtaWY9XCJjYXRzcGFnZXMucGFnZXNcIlxuICAgICAgICAgIHYtZm9yPVwicGFnZSBpbiBjYXRzcGFnZXMucGFnZXNcIj5cbiAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuX2VkaXRvcl9wYWdlIHRyaWdnZXJcIlxuICAgICAgICAgICAgdi1iaW5kOmNsYXNzPVwieyBhY3RpdmU6IHBhZ2UuaWQgPT0gYWN0aXZlIH1cIlxuICAgICAgICAgICAgdi1vbjpjbGljaz1cIm9wZW4oJGV2ZW50LCBwYWdlKVwiXG4gICAgICAgICAgICB2LXRvb2x0aXA9XCJ7XG4gICAgICAgICAgICAgICAgY29udGVudDonw5ZmZm5ldCBkaWUgU2VpdGUnLFxuICAgICAgICAgICAgICAgIGRlbGF5OiB7IHNob3c6IDgwMCwgaGlkZTogMTAwMCB9LFxuICAgICAgICAgICAgICAgIHBsYWNlbWVudDogJ3RvcCdcbiAgICAgICAgICAgICAgfVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIHt7cGFnZS5uYW1lfX1cbiAgICAgICAgICAgICAgPHNwYW4gdi1pZj1cInBhZ2UuY2hhbmdlZCA9PSAxXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cInBhZ2VDaGFuZ2VkXCJcbiAgICAgICAgICAgICAgPjwvc3Bhbj5cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiYnRuX2VkaXRvcl9zb3J0IHRyaWdnZXJFZGl0XCI+PC9kaXY+XG5cbiAgICAgICAgPC9saT5cbiAgICAgIDwvZHJhZ2dhYmxlPlxuICAgICAgXG5cblxuICAgICAgPGxpIGNsYXNzPVwidHJpZ2dlckFkZFdyYXBcIlxuICAgICAgICB2LWlmPVwiZmlyc3RcIj5cbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0bl9lZGl0b3JfYWRkIHRyaWdnZXJBZGRcIiBcbiAgICAgICAgICB2LW9uOmNsaWNrPVwibmV3Q2F0KCRldmVudClcIlxuICAgICAgICAgIHYtdG9vbHRpcD1cIntcbiAgICAgICAgICAgIGNvbnRlbnQ6J0hpbnp1ZsO8Z2VuIGVpbmVyIG5ldWVuIEthdGVnb3JpZScsXG4gICAgICAgICAgICBkZWxheTogeyBzaG93OiA4MDAsIGhpZGU6IDEwMDAgfSxcbiAgICAgICAgICAgIHBsYWNlbWVudDogJ3JpZ2h0J1xuICAgICAgICAgIH1cIlxuICAgICAgICA+TmV1ZSBLYXRlZ29yaWU8L2J1dHRvbj5cbiAgICAgIDwvbGk+XG4gICAgICA8bGkgY2xhc3M9XCJ0cmlnZ2VyQWRkV3JhcFwiXG4gICAgICAgIHYtaWY9XCJmaXJzdFwiID5cbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0bl9lZGl0b3JfYWRkIHRyaWdnZXJBZGRcIiBcbiAgICAgICAgICB2LW9uOmNsaWNrPVwibmV3UGFnZSgkZXZlbnQpXCJcbiAgICAgICAgICB2LXRvb2x0aXA9XCJ7XG4gICAgICAgICAgICBjb250ZW50OidIaW56dWbDvGdlbiBlaW5lciBuZXVlbiBTZWl0ZScsXG4gICAgICAgICAgICBkZWxheTogeyBzaG93OiA4MDAsIGhpZGU6IDEwMDAgfSxcbiAgICAgICAgICAgIHBsYWNlbWVudDogJ3JpZ2h0J1xuICAgICAgICAgIH1cIlxuICAgICAgICA+TmV1ZSBTZWl0ZTwvYnV0dG9uPlxuICAgICAgPC9saT5cbiAgICAgIFxuXG4gICAgPC91bD5cblxuICBcblxuPC90ZW1wbGF0ZT5cbiBcbjxzY3JpcHQ+XG4vL2ltcG9ydCB7IEV2ZW50QnVzIH0gZnJvbSAnLi9ldmVudC1idXMuanMnO1xuXG5pbXBvcnQgRHJhZ2dhYmxlIGZyb20gJ3Z1ZWRyYWdnYWJsZSdcblxuaW1wb3J0IEVkaXRvclRyZWUgZnJvbSAnLi9FZGl0b3JUcmVlJ1xuXG4gICBleHBvcnQgZGVmYXVsdCB7XG4gICAgICBuYW1lOiBcImVkaXRvci10cmVlXCIsXG4gICAgICBwcm9wczogW1xuICAgICAgICAnY2F0c3BhZ2VzJyxcbiAgICAgICAgJ2ZpZWxkcycsXG4gICAgICAgICdhY3RpdmUnLFxuICAgICAgICAnZmlyc3QnLFxuICAgICAgICAncGFyZW50Q2F0J1xuICAgICAgXSxcbiAgICAgIGNvbXBvbmVudHM6IHtcbiAgICAgICAgRWRpdG9yVHJlZSxcbiAgICAgICAgRHJhZ2dhYmxlXG4gICAgICB9LFxuICAgICAgZGF0YTogZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIC8vbmVzdGVkOiBbXSxcbiAgICAgICAgICAvL2lzQWN0aXZlOiBmYWxzZSxcbiAgICAgICAgICAvL2NhdHNwYWdlczogW11cblxuICAgICAgICAgIC8vY3VycmVudENvbXBvbmVudDogZmFsc2VcbiAgICAgICAgICBsYXN0UGFnZWlzQWN0aXZlOiB7XG4gICAgICAgICAgICBpc0FjdGl2ZTogZmFsc2VcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBjcmVhdGVkOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIC8vY29uc29sZS5sb2coJy1jcmVhdGVkJyk7XG4gICAgICAgIC8vdGhpcy5yZWZyZXNoRGF0YSgpO1xuICAgICAgICBcbiAgICAgICAgdGhpcy5jb25maWcgPSBKU09OLnBhcnNlKCBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnc2Npby1lZGl0b3ItdHJlZScpIHx8ICd7fScgKTtcblxuICAgICAgICAvL2NvbnNvbGUubG9nKHRoaXMuY29uZmlnKTtcblxuICAgICAgfSxcbiAgICAgIGNvbXB1dGVkOiB7XG5cbiAgICAgICAgXG4gICAgICB9LFxuICAgICAgbWV0aG9kczoge1xuXG4gICAgICAgIG9uU29ydFBhZ2VzOiBmdW5jdGlvbiAob2JqKSB7XG4gICAgICAgICAgLy9jb25zb2xlLmxvZygnc29ydCBwYWdlcycpO1xuXG4gICAgICAgICAgdmFyIHBhcmVudCA9IHRoaXMucGFyZW50Q2F0IHx8IDA7XG5cbiAgICAgICAgICB2YXIganNvbiA9IFtdO1xuICAgICAgICAgIHRoaXMuY2F0c3BhZ2VzLnBhZ2VzLmZvckVhY2goIGZ1bmN0aW9uIChvLGkpIHtcbiAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKGksIG8ubmFtZSwgby5pZCwgby5wYXJlbnQpO1xuICAgICAgICAgICAganNvbi5wdXNoKCB7XG4gICAgICAgICAgICAgIGlkOiBvLmlkLFxuICAgICAgICAgICAgICBvcmRlcmluZzogaSsxLFxuICAgICAgICAgICAgICBjYXRlZ29yeTogcGFyZW50XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9ICk7XG5cbiAgICAgICAgICAvL2NvbnNvbGUubG9nKGpzb24pO1xuXG4gICAgICAgICAgdmFyIGZvcm0gPSBuZXcgRm9ybURhdGEoKTtcbiAgICAgICAgICBmb3JtLmFwcGVuZCggXCJqc29uXCIsIEpTT04uc3RyaW5naWZ5KGpzb24pICk7XG4gICAgICAgICAgLy9jb25zb2xlLmxvZyh0aGlzLmRhdGFmb3JtKTtcbiAgICAgICAgICB2YXIgdGhhdCA9IHRoaXM7XG4gICAgICAgICAgZmV0Y2goJy9wYWdlcy9qc29uL29yZGVyaW5nJyxcbiAgICAgICAgICB7XG4gICAgICAgICAgICAgIG1ldGhvZDogXCJQT1NUXCIsXG4gICAgICAgICAgICAgIGJvZHk6IGZvcm1cbiAgICAgICAgICB9KVxuICAgICAgICAgIC50aGVuKGZ1bmN0aW9uKHJlcyl7XG4gICAgICAgICAgICByZXR1cm4gcmVzLmpzb24oKTtcbiAgICAgICAgICB9KVxuICAgICAgICAgIC50aGVuKGZ1bmN0aW9uKGRhdGEpe1xuXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhkYXRhKTtcblxuICAgICAgICAgIH0pXG5cbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcblxuXG5cblxuICAgICAgICB9LFxuICAgICAgICBvblNvcnRDYXRlZ29yaWVzOiBmdW5jdGlvbiAob2JqKSB7XG5cbiAgICAgICAgICB2YXIgcGFyZW50ID0gdGhpcy5wYXJlbnRDYXQgfHwgMDtcblxuICAgICAgICAgIHZhciBqc29uID0gW107XG4gICAgICAgICAgdGhpcy5jYXRzcGFnZXMuY2F0ZWdvcmllcy5mb3JFYWNoKCBmdW5jdGlvbiAobyxpKSB7XG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhpLCBvLm5hbWUsIG8uaWQsIG8ucGFyZW50KTtcbiAgICAgICAgICAgIGpzb24ucHVzaCgge1xuICAgICAgICAgICAgICBpZDogby5pZCxcbiAgICAgICAgICAgICAgb3JkZXJpbmc6IGkrMSxcbiAgICAgICAgICAgICAgcGFyZW50OiBwYXJlbnRcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0gKTtcblxuICAgICAgICAgIHZhciBmb3JtID0gbmV3IEZvcm1EYXRhKCk7XG4gICAgICAgICAgZm9ybS5hcHBlbmQoIFwianNvblwiLCBKU09OLnN0cmluZ2lmeShqc29uKSApO1xuICAgICAgICAgIC8vY29uc29sZS5sb2codGhpcy5kYXRhZm9ybSk7XG4gICAgICAgICAgdmFyIHRoYXQgPSB0aGlzO1xuICAgICAgICAgIGZldGNoKCcvY2F0ZWdvcmllcy9qc29uL29yZGVyaW5nJyxcbiAgICAgICAgICB7XG4gICAgICAgICAgICAgIG1ldGhvZDogXCJQT1NUXCIsXG4gICAgICAgICAgICAgIGJvZHk6IGZvcm1cbiAgICAgICAgICB9KVxuICAgICAgICAgIC50aGVuKGZ1bmN0aW9uKHJlcyl7XG4gICAgICAgICAgICByZXR1cm4gcmVzLmpzb24oKTtcbiAgICAgICAgICB9KVxuICAgICAgICAgIC50aGVuKGZ1bmN0aW9uKGRhdGEpe1xuXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhkYXRhKTtcblxuICAgICAgICAgIH0pXG5cbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcblxuICAgICAgICB9LFxuICAgICAgICBjYXRBY3RpdmU6IGZ1bmN0aW9uIChjYXQpIHtcbiAgICAgICAgICAvL2NvbnNvbGUubG9nKGNhdCk7XG4gICAgICAgICAgXG4gICAgICAgICAgaWYgKCBjYXQuaXNBY3RpdmUgKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCB0aGlzLmNvbmZpZ1tjYXQudXJsXSApIHtcbiAgICAgICAgICAgIGNhdC5pc0FjdGl2ZSA9IHRydWU7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgIC8vY2F0LmlzQWN0aXZlIHx8IGNvbmZpZ1tjYXQudXJsXVxuICAgICAgICB9LFxuXG5cbiAgICAgICAgbmV3Q2F0KGV2ZW50LCBjYXQpIHtcblxuICAgICAgICAgIHZhciByZXQgPSB7XG4gICAgICAgICAgICAnaWQnOjAsXG4gICAgICAgICAgICAnZXZlbnQnOmV2ZW50XG4gICAgICAgICAgfTtcbiAgICAgICAgICBpZiAoY2F0KSB7XG4gICAgICAgICAgICByZXQuY2F0ID0gY2F0O1xuICAgICAgICAgIH1cbiAgICAgICAgICBFdmVudEJ1cy4kZW1pdCgnY2F0LWVkaXQnLCByZXQgKTtcblxuICAgICAgICB9LFxuICAgICAgICBlZGl0Q2F0KGV2ZW50LCBjYXQpIHtcblxuICAgICAgICAgIGNhdC5pc0VkaXQgPSAhY2F0LmlzRWRpdDtcbiAgICAgICAgICBFdmVudEJ1cy4kZW1pdCgnY2F0LWVkaXQnLCB7J2lkJzpjYXQuaWQsICdldmVudCc6ZXZlbnR9ICk7XG5cbiAgICAgICAgfSxcbiAgICAgICAgXG4gICAgICAgIG5ld1BhZ2UoZXZlbnQsIGNhdCkge1xuXG4gICAgICAgICAgdmFyIHJldCA9IHtcbiAgICAgICAgICAgICdpZCc6MCxcbiAgICAgICAgICAgICdldmVudCc6ZXZlbnRcbiAgICAgICAgICB9O1xuICAgICAgICAgIGlmIChjYXQpIHtcbiAgICAgICAgICAgIHJldC5jYXQgPSBjYXQ7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgRXZlbnRCdXMuJGVtaXQoJ3BhZ2UtZWRpdCcsIHJldCApO1xuXG4gICAgICAgIH0sXG4gICAgICAgIFxuICAgICAgICBvcGVuKGV2ZW50LCBwYWdlKSB7XG5cbiAgICAgICAgICAvLyB0aGlzLmxhc3RQYWdlaXNBY3RpdmUuaXNBY3RpdmUgPSBmYWxzZTtcbiAgICAgICAgICAvLyBwYWdlLmlzQWN0aXZlID0gIXBhZ2UuaXNBY3RpdmU7XG4gICAgICAgICAgLy8gdGhpcy5sYXN0UGFnZWlzQWN0aXZlID0gcGFnZTtcblxuICAgICAgICAgIC8vY29uc29sZS5sb2coJ3BhZ2UnLCBwYWdlLmlkKTtcbiAgICAgICAgICAvL3RoaXMuJGVtaXQoJ2NsaWNrZWQnLCAnc29tZVZhbHVlJylcbiAgICAgICAgICAvL3RoaXMuJHJvb3Qub3BlbiA9IHBhZ2UuaWQ7XG4gICAgICAgICAgLy9jb25zb2xlLmxvZyhwYWdlKTtcbiAgICAgICAgICBcbiAgICAgICAgICBFdmVudEJ1cy4kZW1pdCgncGFnZS1vcGVuJywgeydpZCc6cGFnZS5pZCwgJ3VybCc6cGFnZS51cmx9ICk7XG5cbiAgICAgICAgICAvL3RoaXMuJHJvb3Qub25DbGlja2VkKCdzc3MnKTtcbiAgICAgICAgfSxcbiAgICAgICAgbG9hZChldmVudCwgY2F0ICkge1xuICAgICAgICAgIFxuICAgICAgICAgIC8vY29uc29sZS5sb2coJ29rJyxjYXQudXJsKTtcblxuICAgICAgICAgIGNhdC5pc0FjdGl2ZSA9ICFjYXQuaXNBY3RpdmU7XG5cbiAgICAgIFxuICAgICAgICAgIHZhciBjb25maWcgPSBKU09OLnBhcnNlKCBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnc2Npby1lZGl0b3ItdHJlZScpIHx8ICd7fScgKTtcbiAgICAgICAgICAvL3ZhciBjb25maWcgPSB0aGlzLmNvbmZpZztcblxuICAgICAgICAgIGlmICggY29uZmlnW2NhdC51cmxdICkge1xuICAgICAgICAgICAgZGVsZXRlIGNvbmZpZ1tjYXQudXJsXTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKCAgdHlwZW9mIGNvbmZpZyAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgICAgY29uZmlnID0ge307XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25maWdbY2F0LnVybF0gPSB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICAvL2NvbnNvbGUubG9nKGNvbmZpZyk7XG4gICAgICAgICAgdGhpcy5jb25maWcgPSBKU09OLnN0cmluZ2lmeShjb25maWcpO1xuICAgICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCdzY2lvLWVkaXRvci10cmVlJywgdGhpcy5jb25maWcgKTtcblxuICAgICAgICAgIC8vdGhpcy5jb25zb2xlID0gSlNPTi5wYXJzZSggbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ3NjaW8tZWRpdG9yLXRyZWUnKSB8fCAne30nICk7XG5cblxuICAgICAgICAgIFxuXG4gICAgICAgICAgXG4gICAgICAgICAgLy8gaWYgKGNhdC5pc0FjdGl2ZSkge1xuICAgICAgICAgIC8vICAgZXZlbnQudGFyZ2V0LnBhcmVudE5vZGUuY2xhc3NMaXN0LmFkZCgnYWN0aXZlJyk7XG4gICAgICAgICAgLy8gfSBlbHNlIHtcbiAgICAgICAgICAvLyAgIGV2ZW50LnRhcmdldC5wYXJlbnROb2RlLmNsYXNzTGlzdC5yZW1vdmUoJ2FjdGl2ZScpO1xuICAgICAgICAgIC8vIH1cblxuICAgICAgICAgIC8vY2F0LnR5cGUgPSAndHJlZSc7XG4gICAgICAgICAgXG4gICAgICAgICAgXG5cbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgIH1cbiAgIH1cbjwvc2NyaXB0PlxuIFxuPHN0eWxlIHNjb3BlZD5cbiAgXG4uZWRpdG9yLXRyZWUge1xuXG4gIG92ZXJmbG93OiBzY3JvbGw7XG5cbiAgaGVpZ2h0OiA4MHZoO1xufVxuXG4uZWRpdG9yLXRyZWUgLmVkaXRvci10cmVlIHtcblxuICBvdmVyZmxvdzogaGlkZGVuO1xuXG4gIGhlaWdodDogYXV0bztcbn1cbiAgXG5cblxuICBoMyB7XG4gICAgcGFkZGluZy1sZWZ0OiAxcmVtO1xuICAgIG1hcmdpbi1ib3R0b206IDFyZW07XG4gIH1cbiAgLmVkaXRvci10cmVlIC5jYXQgLml0ZW0ge1xuICAgIGRpc3BsYXk6ZmxleDtcblxuICAgIGJhY2tncm91bmQtaW1hZ2U6IGxpbmVhci1ncmFkaWVudCh0byByaWdodCwgcmdiYSgyNTUsMjU1LDI1NSwwKSAzMCUsIHJnYmEoMjU1LDI1NSwyNTUsMSkgMTAwJSk7XG4gICAgbWFyZ2luLWJvdHRvbTowLjJyZW07XG4gICAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IDJyZW07XG4gICAgcGFkZGluZy1yaWdodDogMC42cmVtO1xuICB9XG4gIC5lZGl0b3ItdHJlZSAuY2F0IC50cmlnZ2VyIHtcbiBcbiAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoJy4uLy4uLy4uL2ljb25zL2NhdGVnb3JpZV9jbG9zZS5zdmcnKTtcbiAgICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0O1xuICAgIGJhY2tncm91bmQtcG9zaXRpb246IGxlZnQgY2VudGVyO1xuICAgIGJhY2tncm91bmQtc2l6ZTogYXV0byAzNSU7XG5cbiAgICBmb250LXdlaWdodDogNjAwO1xuXG4gICAgY3Vyc29yOiBwb2ludGVyO1xuICAgIGRpc3BsYXk6ZmxleDtcbiAgfVxuXG4gIC5lZGl0b3ItdHJlZSAuY2F0IC50cmlnZ2VyOmhvdmVyIHtcbiAgICBjb2xvcjpyZ2IoMjQwLCAxODQsIDApO1xuICB9IFxuXG4gIC5lZGl0b3ItdHJlZSAuY2F0IC50cmlnZ2VyLmFjdGl2ZSB7XG4gICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKCcuLi8uLi8uLi9pY29ucy9jYXRlZ29yaWVfb3Blbi5zdmcnKTtcbiAgfVxuXG4gICAuZWRpdG9yLXRyZWUgLnBhZ2UgLnRyaWdnZXIuYWN0aXZlIHtcbiAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoJy4uLy4uLy4uL2ljb25zL25hdi1wYWdlcy5zdmcnKTtcbiAgICBjb2xvcjogcmdiKDAsIDEzNywgMjE2KTtcbiAgfVxuXG4gIC5lZGl0b3ItdHJlZSAucGFnZSB7XG5cbiAgICBkaXNwbGF5OiBmbGV4O1xuICB9XG4gLmVkaXRvci10cmVlIC5wYWdlIC50cmlnZ2VyIHtcbiAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoJy4uLy4uLy4uL2ljb25zL25hdi1wYWdlcy5zdmcnKTtcbiAgICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0O1xuICAgIGJhY2tncm91bmQtcG9zaXRpb246IGxlZnQgY2VudGVyO1xuICAgIGJhY2tncm91bmQtc2l6ZTogYXV0byA1NSU7XG5cbiAgICBmb250LXdlaWdodDogNDAwO1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICB9XG5cbiAgIC5lZGl0b3ItdHJlZSAucGFnZSAudHJpZ2dlcjpob3ZlciB7XG4gICAgIGNvbG9yOnJnYigyNDAsIDE4NCwgMCk7XG4gICB9IFxuXG4gICAuZWRpdG9yLXRyZWUgLnBhZ2UgLnRyaWdnZXIgc3BhbntcbiAgICAgYWxpZ24tc2VsZjogZmxleC1lbmQ7XG4gICB9XG5cbiAgLmVkaXRvci10cmVlIC50cmlnZ2VyIHtcbiAgICBmbGV4OiAxO1xuICAgIHRleHQtYWxpZ246IGxlZnQ7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICBwYWRkaW5nLWxlZnQ6IDEuNXJlbTtcbiAgICBwYWRkaW5nLXRvcDowLjRyZW07XG4gICAgcGFkZGluZy1ib3R0b206MC40cmVtO1xuICAgIHBhZGRpbmctcmlnaHQ6IDAuNXJlbTtcbiAgfVxuXG4gIC5lZGl0b3ItdHJlZSAudHJpZ2dlckVkaXQge1xuICAgIGZsZXg6IDE7XG4gICAgbWF4LXdpZHRoOiAycmVtO1xuICAgIFxuICB9XG5cbiAgLmVkaXRvci10cmVlICAudHJpZ2dlckFkZCB7XG4gICAgd2lkdGg6MTAwJTtcbiAgICB0ZXh0LWFsaWduOiBsZWZ0O1xuICAgIHBhZGRpbmctbGVmdDogMS41cmVtO1xuICAgIGJhY2tncm91bmQtcG9zaXRpb246IDkzJSBjZW50ZXI7XG4gICAgZm9udC1zaXplOiA4NSU7XG5cbiAgICBwYWRkaW5nLWxlZnQ6IDEuNXJlbTtcbiAgICBwYWRkaW5nLXRvcDogMC40cmVtO1xuICAgIHBhZGRpbmctYm90dG9tOiAwLjRyZW07XG4gICAgcGFkZGluZy1yaWdodDogMC41cmVtO1xuXG4gICAgYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjO1xuICAgXG4gIH1cblxuICAuZWRpdG9yLXRyZWUgIC50cmlnZ2VyQWRkV3JhcCB7XG4gICAgYmFja2dyb3VuZC1pbWFnZTogbGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LCByZ2JhKDI1NSwyNTUsMjU1LDApIDMwJSwgcmdiYSgyNTUsMjU1LDI1NSwxKSAxMDAlKTtcbiAgICAgbWFyZ2luLWJvdHRvbTowLjJyZW07XG5cbiAgICAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IDJyZW07XG4gIH1cblxuICAuZWRpdG9yLXRyZWUgLmVkaXRvci10cmVlIHtcbiAgICBib3JkZXItbGVmdDogMXB4IHNvbGlkICNjY2M7XG4gIH1cblxuICAuY2F0IC5lZGl0b3ItdHJlZSB7XG4gICAgcGFkZGluZy1sZWZ0OiAxcmVtO1xuICAgIHBhZGRpbmctYm90dG9tOiAxcmVtO1xuICB9XG4gIC8qXG4gIC5wYWdlIC5idG4ge1xuICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybCgnLi4vLi4vLi4vaWNvbnMvcGFnZS5zdmcnKTtcbiAgICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0O1xuICAgIGJhY2tncm91bmQtcG9zaXRpb246IDFyZW0gY2VudGVyO1xuICAgIGJhY2tncm91bmQtc2l6ZTogYXV0byA1MCU7XG4gICAgXG4gICAgcGFkZGluZy1sZWZ0OiAyLjJyZW07XG4gICAgcGFkZGluZy10b3A6MC4zcmVtO1xuICAgIHBhZGRpbmctYm90dG9tOjAuM3JlbTtcblxuICB9XG4gICovXG5cbjwvc3R5bGU+IiwiPHRlbXBsYXRlPlxuICA8ZGl2IGNsYXNzPVwiZmllbGQtaXRlbVwiPlxuICBcbiAgICA8bGFiZWw+e3tmaWVsZC5uYW1lfX08L2xhYmVsPlxuICAgIDx0ZXh0YXJlYVxuICAgICAgdi1iaW5kOm5hbWU9XCJmaWVsZC52YXJpYWJsZVwiXG4gICAgICB2LW1vZGVsPVwiZmllbGQuY29udGVudFwiXG4gICAgICByb3dzPVwiM1wiXG4gICAgICBtYXgtcm93cz1cIjZcIlxuICAgXG4gICAgICBAa2V5ZG93bi5lbnRlci5leGFjdC5wcmV2ZW50PVwic2VuZFwiXG4gICAgICA+PC90ZXh0YXJlYT5cbiAgPC9kaXY+XG4gIFxuXG48L3RlbXBsYXRlPlxuIFxuPHNjcmlwdD5cbiAgIGV4cG9ydCBkZWZhdWx0IHtcbiAgICAgIG5hbWU6IFwidGV4dGFyZWFmaWVsZFwiLFxuICAgICAgcHJvcHM6IFtcbiAgICAgICAgJ2ZpZWxkJ1xuICAgICAgXSxcbiAgICAgIGNvbXBvbmVudHM6IHtcbiAgICAgICAgXG4gICAgICB9LFxuICAgICAgZGF0YTogZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIFxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgY3JlYXRlZDogZnVuY3Rpb24gKCkge1xuICAgICAgICAvL2NvbnNvbGUubG9nKCctY3JlYXRlZCcpO1xuICAgICAgICBcbiAgICAgIH0sXG4gICAgICB3YXRjaDoge1xuICAgICAgICAvLyB3aGVuZXZlciBxdWVzdGlvbiBjaGFuZ2VzLCB0aGlzIGZ1bmN0aW9uIHdpbGwgcnVuXG5cbiAgICAgIH0sXG4gICAgICBtZXRob2RzOiB7XG4gICAgICAgIG5ld2xpbmUoKSB7XG4gICAgICAgICAgdGhpcy5maWVsZC5jb250ZW50ID0gYCR7dGhpcy5maWVsZC5jb250ZW50fVxcbmA7XG4gICAgICAgIH0sXG5cbiAgICAgICAgc2VuZCgpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZygnPT09PT09PT0nKTtcbiAgICAgICAgICBjb25zb2xlLmxvZyh0aGlzLmZpZWxkLmNvbnRlbnQpO1xuICAgICAgICAgIGNvbnNvbGUubG9nKCc9PT09PT09PScpO1xuICAgICAgICB9LFxuICAgICAgICBleGl0KGV2ZW50KSB7XG4gICAgICAgICAgZmllbGQuY29udGVudCArPSAnXFxuJztcbiAgICAgICAgICBpZiAoZXZlbnQpIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgaWYgKGV2ZW50KSBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgfVxuXG4gICAgICB9XG4gICB9XG48L3NjcmlwdD5cbiBcbjxzdHlsZSBzY29wZWQ+XG4gIC5maWVsZC1pdGVtIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICB9XG4gIC5maWVsZC1pdGVtIGxhYmVsIHtcbiAgICBmbGV4OiAxO1xuICB9XG4gIC5maWVsZC1pdGVtIGlucHV0IHtcbiAgICBmbGV4OiAxO1xuICB9XG48L3N0eWxlPiIsIi8qIEJBU0lDUyAqL1xuXG4uQ29kZU1pcnJvciB7XG4gIC8qIFNldCBoZWlnaHQsIHdpZHRoLCBib3JkZXJzLCBhbmQgZ2xvYmFsIGZvbnQgcHJvcGVydGllcyBoZXJlICovXG4gIGZvbnQtZmFtaWx5OiBtb25vc3BhY2U7XG4gIGhlaWdodDogMzAwcHg7XG4gIGNvbG9yOiBibGFjaztcbiAgZGlyZWN0aW9uOiBsdHI7XG59XG5cbi8qIFBBRERJTkcgKi9cblxuLkNvZGVNaXJyb3ItbGluZXMge1xuICBwYWRkaW5nOiA0cHggMDsgLyogVmVydGljYWwgcGFkZGluZyBhcm91bmQgY29udGVudCAqL1xufVxuLkNvZGVNaXJyb3IgcHJlIHtcbiAgcGFkZGluZzogMCA0cHg7IC8qIEhvcml6b250YWwgcGFkZGluZyBvZiBjb250ZW50ICovXG59XG5cbi5Db2RlTWlycm9yLXNjcm9sbGJhci1maWxsZXIsIC5Db2RlTWlycm9yLWd1dHRlci1maWxsZXIge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTsgLyogVGhlIGxpdHRsZSBzcXVhcmUgYmV0d2VlbiBIIGFuZCBWIHNjcm9sbGJhcnMgKi9cbn1cblxuLyogR1VUVEVSICovXG5cbi5Db2RlTWlycm9yLWd1dHRlcnMge1xuICBib3JkZXItcmlnaHQ6IDFweCBzb2xpZCAjZGRkO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjdmN2Y3O1xuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xufVxuLkNvZGVNaXJyb3ItbGluZW51bWJlcnMge31cbi5Db2RlTWlycm9yLWxpbmVudW1iZXIge1xuICBwYWRkaW5nOiAwIDNweCAwIDVweDtcbiAgbWluLXdpZHRoOiAyMHB4O1xuICB0ZXh0LWFsaWduOiByaWdodDtcbiAgY29sb3I6ICM5OTk7XG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XG59XG5cbi5Db2RlTWlycm9yLWd1dHRlcm1hcmtlciB7IGNvbG9yOiBibGFjazsgfVxuLkNvZGVNaXJyb3ItZ3V0dGVybWFya2VyLXN1YnRsZSB7IGNvbG9yOiAjOTk5OyB9XG5cbi8qIENVUlNPUiAqL1xuXG4uQ29kZU1pcnJvci1jdXJzb3Ige1xuICBib3JkZXItbGVmdDogMXB4IHNvbGlkIGJsYWNrO1xuICBib3JkZXItcmlnaHQ6IG5vbmU7XG4gIHdpZHRoOiAwO1xufVxuLyogU2hvd24gd2hlbiBtb3ZpbmcgaW4gYmktZGlyZWN0aW9uYWwgdGV4dCAqL1xuLkNvZGVNaXJyb3IgZGl2LkNvZGVNaXJyb3Itc2Vjb25kYXJ5Y3Vyc29yIHtcbiAgYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCBzaWx2ZXI7XG59XG4uY20tZmF0LWN1cnNvciAuQ29kZU1pcnJvci1jdXJzb3Ige1xuICB3aWR0aDogYXV0bztcbiAgYm9yZGVyOiAwICFpbXBvcnRhbnQ7XG4gIGJhY2tncm91bmQ6ICM3ZTc7XG59XG4uY20tZmF0LWN1cnNvciBkaXYuQ29kZU1pcnJvci1jdXJzb3JzIHtcbiAgei1pbmRleDogMTtcbn1cbi5jbS1mYXQtY3Vyc29yLW1hcmsge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDIwLCAyNTUsIDIwLCAwLjUpO1xuICAtd2Via2l0LWFuaW1hdGlvbjogYmxpbmsgMS4wNnMgc3RlcHMoMSkgaW5maW5pdGU7XG4gIC1tb3otYW5pbWF0aW9uOiBibGluayAxLjA2cyBzdGVwcygxKSBpbmZpbml0ZTtcbiAgYW5pbWF0aW9uOiBibGluayAxLjA2cyBzdGVwcygxKSBpbmZpbml0ZTtcbn1cbi5jbS1hbmltYXRlLWZhdC1jdXJzb3Ige1xuICB3aWR0aDogYXV0bztcbiAgYm9yZGVyOiAwO1xuICAtd2Via2l0LWFuaW1hdGlvbjogYmxpbmsgMS4wNnMgc3RlcHMoMSkgaW5maW5pdGU7XG4gIC1tb3otYW5pbWF0aW9uOiBibGluayAxLjA2cyBzdGVwcygxKSBpbmZpbml0ZTtcbiAgYW5pbWF0aW9uOiBibGluayAxLjA2cyBzdGVwcygxKSBpbmZpbml0ZTtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzdlNztcbn1cbkAtbW96LWtleWZyYW1lcyBibGluayB7XG4gIDAlIHt9XG4gIDUwJSB7IGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50OyB9XG4gIDEwMCUge31cbn1cbkAtd2Via2l0LWtleWZyYW1lcyBibGluayB7XG4gIDAlIHt9XG4gIDUwJSB7IGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50OyB9XG4gIDEwMCUge31cbn1cbkBrZXlmcmFtZXMgYmxpbmsge1xuICAwJSB7fVxuICA1MCUgeyBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDsgfVxuICAxMDAlIHt9XG59XG5cbi8qIENhbiBzdHlsZSBjdXJzb3IgZGlmZmVyZW50IGluIG92ZXJ3cml0ZSAobm9uLWluc2VydCkgbW9kZSAqL1xuLkNvZGVNaXJyb3Itb3ZlcndyaXRlIC5Db2RlTWlycm9yLWN1cnNvciB7fVxuXG4uY20tdGFiIHsgZGlzcGxheTogaW5saW5lLWJsb2NrOyB0ZXh0LWRlY29yYXRpb246IGluaGVyaXQ7IH1cblxuLkNvZGVNaXJyb3ItcnVsZXJzIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBsZWZ0OiAwOyByaWdodDogMDsgdG9wOiAtNTBweDsgYm90dG9tOiAtMjBweDtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbn1cbi5Db2RlTWlycm9yLXJ1bGVyIHtcbiAgYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjO1xuICB0b3A6IDA7IGJvdHRvbTogMDtcbiAgcG9zaXRpb246IGFic29sdXRlO1xufVxuXG4vKiBERUZBVUxUIFRIRU1FICovXG5cbi5jbS1zLWRlZmF1bHQgLmNtLWhlYWRlciB7Y29sb3I6IGJsdWU7fVxuLmNtLXMtZGVmYXVsdCAuY20tcXVvdGUge2NvbG9yOiAjMDkwO31cbi5jbS1uZWdhdGl2ZSB7Y29sb3I6ICNkNDQ7fVxuLmNtLXBvc2l0aXZlIHtjb2xvcjogIzI5Mjt9XG4uY20taGVhZGVyLCAuY20tc3Ryb25nIHtmb250LXdlaWdodDogYm9sZDt9XG4uY20tZW0ge2ZvbnQtc3R5bGU6IGl0YWxpYzt9XG4uY20tbGluayB7dGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7fVxuLmNtLXN0cmlrZXRocm91Z2gge3RleHQtZGVjb3JhdGlvbjogbGluZS10aHJvdWdoO31cblxuLmNtLXMtZGVmYXVsdCAuY20ta2V5d29yZCB7Y29sb3I6ICM3MDg7fVxuLmNtLXMtZGVmYXVsdCAuY20tYXRvbSB7Y29sb3I6ICMyMTk7fVxuLmNtLXMtZGVmYXVsdCAuY20tbnVtYmVyIHtjb2xvcjogIzE2NDt9XG4uY20tcy1kZWZhdWx0IC5jbS1kZWYge2NvbG9yOiAjMDBmO31cbi5jbS1zLWRlZmF1bHQgLmNtLXZhcmlhYmxlLFxuLmNtLXMtZGVmYXVsdCAuY20tcHVuY3R1YXRpb24sXG4uY20tcy1kZWZhdWx0IC5jbS1wcm9wZXJ0eSxcbi5jbS1zLWRlZmF1bHQgLmNtLW9wZXJhdG9yIHt9XG4uY20tcy1kZWZhdWx0IC5jbS12YXJpYWJsZS0yIHtjb2xvcjogIzA1YTt9XG4uY20tcy1kZWZhdWx0IC5jbS12YXJpYWJsZS0zLCAuY20tcy1kZWZhdWx0IC5jbS10eXBlIHtjb2xvcjogIzA4NTt9XG4uY20tcy1kZWZhdWx0IC5jbS1jb21tZW50IHtjb2xvcjogI2E1MDt9XG4uY20tcy1kZWZhdWx0IC5jbS1zdHJpbmcge2NvbG9yOiAjYTExO31cbi5jbS1zLWRlZmF1bHQgLmNtLXN0cmluZy0yIHtjb2xvcjogI2Y1MDt9XG4uY20tcy1kZWZhdWx0IC5jbS1tZXRhIHtjb2xvcjogIzU1NTt9XG4uY20tcy1kZWZhdWx0IC5jbS1xdWFsaWZpZXIge2NvbG9yOiAjNTU1O31cbi5jbS1zLWRlZmF1bHQgLmNtLWJ1aWx0aW4ge2NvbG9yOiAjMzBhO31cbi5jbS1zLWRlZmF1bHQgLmNtLWJyYWNrZXQge2NvbG9yOiAjOTk3O31cbi5jbS1zLWRlZmF1bHQgLmNtLXRhZyB7Y29sb3I6ICMxNzA7fVxuLmNtLXMtZGVmYXVsdCAuY20tYXR0cmlidXRlIHtjb2xvcjogIzAwYzt9XG4uY20tcy1kZWZhdWx0IC5jbS1ociB7Y29sb3I6ICM5OTk7fVxuLmNtLXMtZGVmYXVsdCAuY20tbGluayB7Y29sb3I6ICMwMGM7fVxuXG4uY20tcy1kZWZhdWx0IC5jbS1lcnJvciB7Y29sb3I6ICNmMDA7fVxuLmNtLWludmFsaWRjaGFyIHtjb2xvcjogI2YwMDt9XG5cbi5Db2RlTWlycm9yLWNvbXBvc2luZyB7IGJvcmRlci1ib3R0b206IDJweCBzb2xpZDsgfVxuXG4vKiBEZWZhdWx0IHN0eWxlcyBmb3IgY29tbW9uIGFkZG9ucyAqL1xuXG5kaXYuQ29kZU1pcnJvciBzcGFuLkNvZGVNaXJyb3ItbWF0Y2hpbmdicmFja2V0IHtjb2xvcjogIzBiMDt9XG5kaXYuQ29kZU1pcnJvciBzcGFuLkNvZGVNaXJyb3Itbm9ubWF0Y2hpbmdicmFja2V0IHtjb2xvcjogI2EyMjt9XG4uQ29kZU1pcnJvci1tYXRjaGluZ3RhZyB7IGJhY2tncm91bmQ6IHJnYmEoMjU1LCAxNTAsIDAsIC4zKTsgfVxuLkNvZGVNaXJyb3ItYWN0aXZlbGluZS1iYWNrZ3JvdW5kIHtiYWNrZ3JvdW5kOiAjZThmMmZmO31cblxuLyogU1RPUCAqL1xuXG4vKiBUaGUgcmVzdCBvZiB0aGlzIGZpbGUgY29udGFpbnMgc3R5bGVzIHJlbGF0ZWQgdG8gdGhlIG1lY2hhbmljcyBvZlxuICAgdGhlIGVkaXRvci4gWW91IHByb2JhYmx5IHNob3VsZG4ndCB0b3VjaCB0aGVtLiAqL1xuXG4uQ29kZU1pcnJvciB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgYmFja2dyb3VuZDogd2hpdGU7XG59XG5cbi5Db2RlTWlycm9yLXNjcm9sbCB7XG4gIG92ZXJmbG93OiBzY3JvbGwgIWltcG9ydGFudDsgLyogVGhpbmdzIHdpbGwgYnJlYWsgaWYgdGhpcyBpcyBvdmVycmlkZGVuICovXG4gIC8qIDMwcHggaXMgdGhlIG1hZ2ljIG1hcmdpbiB1c2VkIHRvIGhpZGUgdGhlIGVsZW1lbnQncyByZWFsIHNjcm9sbGJhcnMgKi9cbiAgLyogU2VlIG92ZXJmbG93OiBoaWRkZW4gaW4gLkNvZGVNaXJyb3IgKi9cbiAgbWFyZ2luLWJvdHRvbTogLTMwcHg7IG1hcmdpbi1yaWdodDogLTMwcHg7XG4gIHBhZGRpbmctYm90dG9tOiAzMHB4O1xuICBoZWlnaHQ6IDEwMCU7XG4gIG91dGxpbmU6IG5vbmU7IC8qIFByZXZlbnQgZHJhZ2dpbmcgZnJvbSBoaWdobGlnaHRpbmcgdGhlIGVsZW1lbnQgKi9cbiAgcG9zaXRpb246IHJlbGF0aXZlO1xufVxuLkNvZGVNaXJyb3Itc2l6ZXIge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGJvcmRlci1yaWdodDogMzBweCBzb2xpZCB0cmFuc3BhcmVudDtcbn1cblxuLyogVGhlIGZha2UsIHZpc2libGUgc2Nyb2xsYmFycy4gVXNlZCB0byBmb3JjZSByZWRyYXcgZHVyaW5nIHNjcm9sbGluZ1xuICAgYmVmb3JlIGFjdHVhbCBzY3JvbGxpbmcgaGFwcGVucywgdGh1cyBwcmV2ZW50aW5nIHNoYWtpbmcgYW5kXG4gICBmbGlja2VyaW5nIGFydGlmYWN0cy4gKi9cbi5Db2RlTWlycm9yLXZzY3JvbGxiYXIsIC5Db2RlTWlycm9yLWhzY3JvbGxiYXIsIC5Db2RlTWlycm9yLXNjcm9sbGJhci1maWxsZXIsIC5Db2RlTWlycm9yLWd1dHRlci1maWxsZXIge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHotaW5kZXg6IDY7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG4uQ29kZU1pcnJvci12c2Nyb2xsYmFyIHtcbiAgcmlnaHQ6IDA7IHRvcDogMDtcbiAgb3ZlcmZsb3cteDogaGlkZGVuO1xuICBvdmVyZmxvdy15OiBzY3JvbGw7XG59XG4uQ29kZU1pcnJvci1oc2Nyb2xsYmFyIHtcbiAgYm90dG9tOiAwOyBsZWZ0OiAwO1xuICBvdmVyZmxvdy15OiBoaWRkZW47XG4gIG92ZXJmbG93LXg6IHNjcm9sbDtcbn1cbi5Db2RlTWlycm9yLXNjcm9sbGJhci1maWxsZXIge1xuICByaWdodDogMDsgYm90dG9tOiAwO1xufVxuLkNvZGVNaXJyb3ItZ3V0dGVyLWZpbGxlciB7XG4gIGxlZnQ6IDA7IGJvdHRvbTogMDtcbn1cblxuLkNvZGVNaXJyb3ItZ3V0dGVycyB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTsgbGVmdDogMDsgdG9wOiAwO1xuICBtaW4taGVpZ2h0OiAxMDAlO1xuICB6LWluZGV4OiAzO1xufVxuLkNvZGVNaXJyb3ItZ3V0dGVyIHtcbiAgd2hpdGUtc3BhY2U6IG5vcm1hbDtcbiAgaGVpZ2h0OiAxMDAlO1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIHZlcnRpY2FsLWFsaWduOiB0b3A7XG4gIG1hcmdpbi1ib3R0b206IC0zMHB4O1xufVxuLkNvZGVNaXJyb3ItZ3V0dGVyLXdyYXBwZXIge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHotaW5kZXg6IDQ7XG4gIGJhY2tncm91bmQ6IG5vbmUgIWltcG9ydGFudDtcbiAgYm9yZGVyOiBub25lICFpbXBvcnRhbnQ7XG59XG4uQ29kZU1pcnJvci1ndXR0ZXItYmFja2dyb3VuZCB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgdG9wOiAwOyBib3R0b206IDA7XG4gIHotaW5kZXg6IDQ7XG59XG4uQ29kZU1pcnJvci1ndXR0ZXItZWx0IHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBjdXJzb3I6IGRlZmF1bHQ7XG4gIHotaW5kZXg6IDQ7XG59XG4uQ29kZU1pcnJvci1ndXR0ZXItd3JhcHBlciA6OnNlbGVjdGlvbiB7IGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50IH1cbi5Db2RlTWlycm9yLWd1dHRlci13cmFwcGVyIDo6LW1vei1zZWxlY3Rpb24geyBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudCB9XG5cbi5Db2RlTWlycm9yLWxpbmVzIHtcbiAgY3Vyc29yOiB0ZXh0O1xuICBtaW4taGVpZ2h0OiAxcHg7IC8qIHByZXZlbnRzIGNvbGxhcHNpbmcgYmVmb3JlIGZpcnN0IGRyYXcgKi9cbn1cbi5Db2RlTWlycm9yIHByZSB7XG4gIC8qIFJlc2V0IHNvbWUgc3R5bGVzIHRoYXQgdGhlIHJlc3Qgb2YgdGhlIHBhZ2UgbWlnaHQgaGF2ZSBzZXQgKi9cbiAgLW1vei1ib3JkZXItcmFkaXVzOiAwOyAtd2Via2l0LWJvcmRlci1yYWRpdXM6IDA7IGJvcmRlci1yYWRpdXM6IDA7XG4gIGJvcmRlci13aWR0aDogMDtcbiAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG4gIGZvbnQtZmFtaWx5OiBpbmhlcml0O1xuICBmb250LXNpemU6IGluaGVyaXQ7XG4gIG1hcmdpbjogMDtcbiAgd2hpdGUtc3BhY2U6IHByZTtcbiAgd29yZC13cmFwOiBub3JtYWw7XG4gIGxpbmUtaGVpZ2h0OiBpbmhlcml0O1xuICBjb2xvcjogaW5oZXJpdDtcbiAgei1pbmRleDogMjtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBvdmVyZmxvdzogdmlzaWJsZTtcbiAgLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgLXdlYmtpdC1mb250LXZhcmlhbnQtbGlnYXR1cmVzOiBjb250ZXh0dWFsO1xuICBmb250LXZhcmlhbnQtbGlnYXR1cmVzOiBjb250ZXh0dWFsO1xufVxuLkNvZGVNaXJyb3Itd3JhcCBwcmUge1xuICB3b3JkLXdyYXA6IGJyZWFrLXdvcmQ7XG4gIHdoaXRlLXNwYWNlOiBwcmUtd3JhcDtcbiAgd29yZC1icmVhazogbm9ybWFsO1xufVxuXG4uQ29kZU1pcnJvci1saW5lYmFja2dyb3VuZCB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgbGVmdDogMDsgcmlnaHQ6IDA7IHRvcDogMDsgYm90dG9tOiAwO1xuICB6LWluZGV4OiAwO1xufVxuXG4uQ29kZU1pcnJvci1saW5ld2lkZ2V0IHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB6LWluZGV4OiAyO1xuICBwYWRkaW5nOiAwLjFweDsgLyogRm9yY2Ugd2lkZ2V0IG1hcmdpbnMgdG8gc3RheSBpbnNpZGUgb2YgdGhlIGNvbnRhaW5lciAqL1xufVxuXG4uQ29kZU1pcnJvci13aWRnZXQge31cblxuLkNvZGVNaXJyb3ItcnRsIHByZSB7IGRpcmVjdGlvbjogcnRsOyB9XG5cbi5Db2RlTWlycm9yLWNvZGUge1xuICBvdXRsaW5lOiBub25lO1xufVxuXG4vKiBGb3JjZSBjb250ZW50LWJveCBzaXppbmcgZm9yIHRoZSBlbGVtZW50cyB3aGVyZSB3ZSBleHBlY3QgaXQgKi9cbi5Db2RlTWlycm9yLXNjcm9sbCxcbi5Db2RlTWlycm9yLXNpemVyLFxuLkNvZGVNaXJyb3ItZ3V0dGVyLFxuLkNvZGVNaXJyb3ItZ3V0dGVycyxcbi5Db2RlTWlycm9yLWxpbmVudW1iZXIge1xuICAtbW96LWJveC1zaXppbmc6IGNvbnRlbnQtYm94O1xuICBib3gtc2l6aW5nOiBjb250ZW50LWJveDtcbn1cblxuLkNvZGVNaXJyb3ItbWVhc3VyZSB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogMDtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgdmlzaWJpbGl0eTogaGlkZGVuO1xufVxuXG4uQ29kZU1pcnJvci1jdXJzb3Ige1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHBvaW50ZXItZXZlbnRzOiBub25lO1xufVxuLkNvZGVNaXJyb3ItbWVhc3VyZSBwcmUgeyBwb3NpdGlvbjogc3RhdGljOyB9XG5cbmRpdi5Db2RlTWlycm9yLWN1cnNvcnMge1xuICB2aXNpYmlsaXR5OiBoaWRkZW47XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgei1pbmRleDogMztcbn1cbmRpdi5Db2RlTWlycm9yLWRyYWdjdXJzb3JzIHtcbiAgdmlzaWJpbGl0eTogdmlzaWJsZTtcbn1cblxuLkNvZGVNaXJyb3ItZm9jdXNlZCBkaXYuQ29kZU1pcnJvci1jdXJzb3JzIHtcbiAgdmlzaWJpbGl0eTogdmlzaWJsZTtcbn1cblxuLkNvZGVNaXJyb3Itc2VsZWN0ZWQgeyBiYWNrZ3JvdW5kOiAjZDlkOWQ5OyB9XG4uQ29kZU1pcnJvci1mb2N1c2VkIC5Db2RlTWlycm9yLXNlbGVjdGVkIHsgYmFja2dyb3VuZDogI2Q3ZDRmMDsgfVxuLkNvZGVNaXJyb3ItY3Jvc3NoYWlyIHsgY3Vyc29yOiBjcm9zc2hhaXI7IH1cbi5Db2RlTWlycm9yLWxpbmU6OnNlbGVjdGlvbiwgLkNvZGVNaXJyb3ItbGluZSA+IHNwYW46OnNlbGVjdGlvbiwgLkNvZGVNaXJyb3ItbGluZSA+IHNwYW4gPiBzcGFuOjpzZWxlY3Rpb24geyBiYWNrZ3JvdW5kOiAjZDdkNGYwOyB9XG4uQ29kZU1pcnJvci1saW5lOjotbW96LXNlbGVjdGlvbiwgLkNvZGVNaXJyb3ItbGluZSA+IHNwYW46Oi1tb3otc2VsZWN0aW9uLCAuQ29kZU1pcnJvci1saW5lID4gc3BhbiA+IHNwYW46Oi1tb3otc2VsZWN0aW9uIHsgYmFja2dyb3VuZDogI2Q3ZDRmMDsgfVxuXG4uY20tc2VhcmNoaW5nIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmYTtcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgyNTUsIDI1NSwgMCwgLjQpO1xufVxuXG4vKiBVc2VkIHRvIGZvcmNlIGEgYm9yZGVyIG1vZGVsIGZvciBhIG5vZGUgKi9cbi5jbS1mb3JjZS1ib3JkZXIgeyBwYWRkaW5nLXJpZ2h0OiAuMXB4OyB9XG5cbkBtZWRpYSBwcmludCB7XG4gIC8qIEhpZGUgdGhlIGN1cnNvciB3aGVuIHByaW50aW5nICovXG4gIC5Db2RlTWlycm9yIGRpdi5Db2RlTWlycm9yLWN1cnNvcnMge1xuICAgIHZpc2liaWxpdHk6IGhpZGRlbjtcbiAgfVxufVxuXG4vKiBTZWUgaXNzdWUgIzI5MDEgKi9cbi5jbS10YWItd3JhcC1oYWNrOmFmdGVyIHsgY29udGVudDogJyc7IH1cblxuLyogSGVscCB1c2VycyB1c2UgbWFya3NlbGVjdGlvbiB0byBzYWZlbHkgc3R5bGUgdGV4dCBiYWNrZ3JvdW5kICovXG5zcGFuLkNvZGVNaXJyb3Itc2VsZWN0ZWR0ZXh0IHsgYmFja2dyb3VuZDogbm9uZTsgfVxuIiwiLypcblxuICAgIE5hbWU6ICAgICAgIEJhc2UxNiBEZWZhdWx0IExpZ2h0XG4gICAgQXV0aG9yOiAgICAgQ2hyaXMgS2VtcHNvbiAoaHR0cDovL2Nocmlza2VtcHNvbi5jb20pXG5cbiAgICBDb2RlTWlycm9yIHRlbXBsYXRlIGJ5IEphbiBULiBTb3R0IChodHRwczovL2dpdGh1Yi5jb20vaWRsZWJlcmcvYmFzZTE2LWNvZGVtaXJyb3IpXG4gICAgT3JpZ2luYWwgQmFzZTE2IGNvbG9yIHNjaGVtZSBieSBDaHJpcyBLZW1wc29uIChodHRwczovL2dpdGh1Yi5jb20vY2hyaXNrZW1wc29uL2Jhc2UxNilcblxuKi9cblxuLmNtLXMtYmFzZTE2LWxpZ2h0LkNvZGVNaXJyb3IgeyBiYWNrZ3JvdW5kOiAjZjVmNWY1OyBjb2xvcjogIzIwMjAyMDsgfVxuLmNtLXMtYmFzZTE2LWxpZ2h0IGRpdi5Db2RlTWlycm9yLXNlbGVjdGVkIHsgYmFja2dyb3VuZDogI2UwZTBlMDsgfVxuLmNtLXMtYmFzZTE2LWxpZ2h0IC5Db2RlTWlycm9yLWxpbmU6OnNlbGVjdGlvbiwgLmNtLXMtYmFzZTE2LWxpZ2h0IC5Db2RlTWlycm9yLWxpbmUgPiBzcGFuOjpzZWxlY3Rpb24sIC5jbS1zLWJhc2UxNi1saWdodCAuQ29kZU1pcnJvci1saW5lID4gc3BhbiA+IHNwYW46OnNlbGVjdGlvbiB7IGJhY2tncm91bmQ6ICNlMGUwZTA7IH1cbi5jbS1zLWJhc2UxNi1saWdodCAuQ29kZU1pcnJvci1saW5lOjotbW96LXNlbGVjdGlvbiwgLmNtLXMtYmFzZTE2LWxpZ2h0IC5Db2RlTWlycm9yLWxpbmUgPiBzcGFuOjotbW96LXNlbGVjdGlvbiwgLmNtLXMtYmFzZTE2LWxpZ2h0IC5Db2RlTWlycm9yLWxpbmUgPiBzcGFuID4gc3Bhbjo6LW1vei1zZWxlY3Rpb24geyBiYWNrZ3JvdW5kOiAjZTBlMGUwOyB9XG4uY20tcy1iYXNlMTYtbGlnaHQgLkNvZGVNaXJyb3ItZ3V0dGVycyB7IGJhY2tncm91bmQ6ICNmNWY1ZjU7IGJvcmRlci1yaWdodDogMHB4OyB9XG4uY20tcy1iYXNlMTYtbGlnaHQgLkNvZGVNaXJyb3ItZ3V0dGVybWFya2VyIHsgY29sb3I6ICNhYzQxNDI7IH1cbi5jbS1zLWJhc2UxNi1saWdodCAuQ29kZU1pcnJvci1ndXR0ZXJtYXJrZXItc3VidGxlIHsgY29sb3I6ICNiMGIwYjA7IH1cbi5jbS1zLWJhc2UxNi1saWdodCAuQ29kZU1pcnJvci1saW5lbnVtYmVyIHsgY29sb3I6ICNiMGIwYjA7IH1cbi5jbS1zLWJhc2UxNi1saWdodCAuQ29kZU1pcnJvci1jdXJzb3IgeyBib3JkZXItbGVmdDogMXB4IHNvbGlkICM1MDUwNTA7IH1cblxuLmNtLXMtYmFzZTE2LWxpZ2h0IHNwYW4uY20tY29tbWVudCB7IGNvbG9yOiAjOGY1NTM2OyB9XG4uY20tcy1iYXNlMTYtbGlnaHQgc3Bhbi5jbS1hdG9tIHsgY29sb3I6ICNhYTc1OWY7IH1cbi5jbS1zLWJhc2UxNi1saWdodCBzcGFuLmNtLW51bWJlciB7IGNvbG9yOiAjYWE3NTlmOyB9XG5cbi5jbS1zLWJhc2UxNi1saWdodCBzcGFuLmNtLXByb3BlcnR5LCAuY20tcy1iYXNlMTYtbGlnaHQgc3Bhbi5jbS1hdHRyaWJ1dGUgeyBjb2xvcjogIzkwYTk1OTsgfVxuLmNtLXMtYmFzZTE2LWxpZ2h0IHNwYW4uY20ta2V5d29yZCB7IGNvbG9yOiAjYWM0MTQyOyB9XG4uY20tcy1iYXNlMTYtbGlnaHQgc3Bhbi5jbS1zdHJpbmcgeyBjb2xvcjogI2Y0YmY3NTsgfVxuXG4uY20tcy1iYXNlMTYtbGlnaHQgc3Bhbi5jbS12YXJpYWJsZSB7IGNvbG9yOiAjOTBhOTU5OyB9XG4uY20tcy1iYXNlMTYtbGlnaHQgc3Bhbi5jbS12YXJpYWJsZS0yIHsgY29sb3I6ICM2YTlmYjU7IH1cbi5jbS1zLWJhc2UxNi1saWdodCBzcGFuLmNtLWRlZiB7IGNvbG9yOiAjZDI4NDQ1OyB9XG4uY20tcy1iYXNlMTYtbGlnaHQgc3Bhbi5jbS1icmFja2V0IHsgY29sb3I6ICMyMDIwMjA7IH1cbi5jbS1zLWJhc2UxNi1saWdodCBzcGFuLmNtLXRhZyB7IGNvbG9yOiAjYWM0MTQyOyB9XG4uY20tcy1iYXNlMTYtbGlnaHQgc3Bhbi5jbS1saW5rIHsgY29sb3I6ICNhYTc1OWY7IH1cbi5jbS1zLWJhc2UxNi1saWdodCBzcGFuLmNtLWVycm9yIHsgYmFja2dyb3VuZDogI2FjNDE0MjsgY29sb3I6ICM1MDUwNTA7IH1cblxuLmNtLXMtYmFzZTE2LWxpZ2h0IC5Db2RlTWlycm9yLWFjdGl2ZWxpbmUtYmFja2dyb3VuZCB7IGJhY2tncm91bmQ6ICNERERDREM7IH1cbi5jbS1zLWJhc2UxNi1saWdodCAuQ29kZU1pcnJvci1tYXRjaGluZ2JyYWNrZXQgeyBjb2xvcjogI2Y1ZjVmNSAhaW1wb3J0YW50OyBiYWNrZ3JvdW5kLWNvbG9yOiAjNkE5RkI1ICFpbXBvcnRhbnR9XG4iLCI8dGVtcGxhdGU+XG4gIDxkaXYgY2xhc3M9XCJmaWVsZC1pdGVtXCI+XG4gIFxuICAgIDxsYWJlbD57e2ZpZWxkLm5hbWV9fTwvbGFiZWw+XG5cbiAgICA8Y29kZW1pcnJvciByZWY9XCJteUNtXCJcbiAgICAgIDpvcHRpb25zPVwiY21PcHRpb25zXCJcbiAgICAgIHYtYmluZDpuYW1lPVwiZmllbGQudmFyaWFibGVcIlxuICAgICAgdi1tb2RlbD1cImZpZWxkLmNvbnRlbnRcIlxuICAgICAgPlxuICAgIDwvY29kZW1pcnJvcj5cblxuXG4gIDwvZGl2PlxuICBcblxuPC90ZW1wbGF0ZT5cbiBcbjxzY3JpcHQ+XG5cbiAgaW1wb3J0IFZ1ZUNvZGVtaXJyb3IgZnJvbSAndnVlLWNvZGVtaXJyb3InXG4gIGltcG9ydCAnY29kZW1pcnJvci9saWIvY29kZW1pcnJvci5jc3MnXG4gIGltcG9ydCAnY29kZW1pcnJvci90aGVtZS9iYXNlMTYtbGlnaHQuY3NzJ1xuICBpbXBvcnQgJ2NvZGVtaXJyb3IvbW9kZS9odG1sbWl4ZWQvaHRtbG1peGVkLmpzJ1xuICAvLyBpbXBvcnQgJ2NvZGVtaXJyb3IvbW9kZS9qYXZhc2NyaXB0L2phdmFzY3JpcHQuanMnXG4gIC8vIGltcG9ydCAnY29kZW1pcnJvci9tb2RlL2Nzcy9jc3MuanMnXG5cbiAgIGV4cG9ydCBkZWZhdWx0IHtcbiAgICAgIG5hbWU6IFwiaHRtbGZpZWxkXCIsXG4gICAgICBwcm9wczogW1xuICAgICAgICAnZmllbGQnXG4gICAgICBdLFxuICAgICAgY29tcG9uZW50czoge1xuICAgICAgICBWdWVDb2RlbWlycm9yXG4gICAgICB9LFxuICAgICAgZGF0YTogZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4ge1xuXG4gICAgICAgICAgY21PcHRpb25zOiB7XG4gICAgICAgICAgICAvLyBjb2RlbWlycm9yIG9wdGlvbnNcbiAgICAgICAgICAgIHRhYlNpemU6IDQsXG4gICAgICAgICAgICBtb2RlOiAnaHRtbG1peGVkJyxcbiAgICAgICAgICAgIHRoZW1lOiAnYmFzZTE2LWxpZ2h0JyxcbiAgICAgICAgICAgIGxpbmVOdW1iZXJzOiB0cnVlLFxuICAgICAgICAgICAgbGluZTogdHJ1ZSxcbiAgICAgICAgICAgIHBhcnNlcmZpbGU6IFtcInBhcnNleG1sLmpzXCIsIFwicGFyc2Vjc3MuanNcIiwgXCJ0b2tlbml6ZWphdmFzY3JpcHQuanNcIiwgXCJwYXJzZWphdmFzY3JpcHQuanNcIiwgXCJwYXJzZWh0bWxtaXhlZC5qc1wiXSxcbiAgICAgICAgICBzdHlsZXNoZWV0OiBbXCJjc3MveG1sY29sb3JzLmNzc1wiLCBcImNzcy9qc2NvbG9ycy5jc3NcIiwgXCJjc3MvY3NzY29sb3JzLmNzc1wiXSxcbiAgICAgICAgICBwYXRoOiBcImpzL1wiXG4gICAgICAgICAgICAvLyBtb3JlIGNvZGVtaXJyb3Igb3B0aW9ucywg5pu05aSaIGNvZGVtaXJyb3Ig55qE6auY57qn6YWN572uLi4uXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgbWV0aG9kczoge1xuXG4gICAgICB9LFxuICAgICAgY29tcHV0ZWQ6IHtcbiAgICAgICAgY29kZW1pcnJvcigpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy4kcmVmcy5teUNtLmNvZGVtaXJyb3JcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIGNyZWF0ZWQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgLy9jb25zb2xlLmxvZygnLWNyZWF0ZWQnKTtcbiAgICAgICAgXG5cblxuXG4gICAgICB9LFxuICAgICAgd2F0Y2g6IHtcbiAgICAgICAgLy8gd2hlbmV2ZXIgcXVlc3Rpb24gY2hhbmdlcywgdGhpcyBmdW5jdGlvbiB3aWxsIHJ1blxuXG4gICAgICB9XG4gICB9XG48L3NjcmlwdD5cbiBcbjxzdHlsZSBzY29wZWQ+XG4gIC5maWVsZC1pdGVtIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgbWF4LXdpZHRoOiA0MHZ3O1xuXG4gIH1cbiAgLmZpZWxkLWl0ZW0gbGFiZWwge1xuICAgIGZsZXg6IDE7XG4gIH1cbiAgLmZpZWxkLWl0ZW0gaW5wdXQge1xuICAgIGZsZXg6IDE7XG4gIH1cblxuICAuZWRpdG9yIHtcbiAgd2lkdGg6IDYwMHB4O1xuICBoZWlnaHQ6IDgwMHB4O1xufVxuXG5cbjwvc3R5bGU+IiwiPHRlbXBsYXRlPlxuICA8ZGl2IGNsYXNzPVwiZmllbGQtaXRlbVwiPlxuICBcbiAgICA8bGFiZWw+e3tmaWVsZC5uYW1lfX08L2xhYmVsPlxuXG4gICAgPGNvZGVtaXJyb3IgcmVmPVwibXlDbVwiXG4gICAgICA6b3B0aW9ucz1cImNtT3B0aW9uc1wiXG4gICAgICB2LWJpbmQ6bmFtZT1cImZpZWxkLnZhcmlhYmxlXCJcbiAgICAgIHYtbW9kZWw9XCJmaWVsZC5jb250ZW50XCJcbiAgICAgID5cbiAgICA8L2NvZGVtaXJyb3I+XG5cblxuICA8L2Rpdj5cbiAgXG5cbjwvdGVtcGxhdGU+XG4gXG48c2NyaXB0PlxuXG4gIGltcG9ydCBWdWVDb2RlbWlycm9yIGZyb20gJ3Z1ZS1jb2RlbWlycm9yJ1xuICBpbXBvcnQgJ2NvZGVtaXJyb3IvbGliL2NvZGVtaXJyb3IuY3NzJ1xuICBpbXBvcnQgJ2NvZGVtaXJyb3IvdGhlbWUvYmFzZTE2LWxpZ2h0LmNzcydcbiAgLy8gaW1wb3J0ICdjb2RlbWlycm9yL21vZGUvaHRtbG1peGVkL2h0bWxtaXhlZC5qcydcbiAgaW1wb3J0ICdjb2RlbWlycm9yL21vZGUvamF2YXNjcmlwdC9qYXZhc2NyaXB0LmpzJ1xuICAvLyBpbXBvcnQgJ2NvZGVtaXJyb3IvbW9kZS9jc3MvY3NzLmpzJ1xuXG4gICBleHBvcnQgZGVmYXVsdCB7XG4gICAgICBuYW1lOiBcImphdmFzY3JpcHRmaWVsZFwiLFxuICAgICAgcHJvcHM6IFtcbiAgICAgICAgJ2ZpZWxkJ1xuICAgICAgXSxcbiAgICAgIGNvbXBvbmVudHM6IHtcbiAgICAgICAgVnVlQ29kZW1pcnJvclxuICAgICAgfSxcbiAgICAgIGRhdGE6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHtcblxuICAgICAgICAgIGNtT3B0aW9uczoge1xuICAgICAgICAgICAgLy8gY29kZW1pcnJvciBvcHRpb25zXG4gICAgICAgICAgICB0YWJTaXplOiA0LFxuICAgICAgICAgICAgbW9kZTogJ2phdmFzY3JpcHQnLFxuICAgICAgICAgICAgdGhlbWU6ICdiYXNlMTYtbGlnaHQnLFxuICAgICAgICAgICAgbGluZU51bWJlcnM6IHRydWUsXG4gICAgICAgICAgICBsaW5lOiB0cnVlLFxuICAgICAgICAgICAgcGFyc2VyZmlsZTogW1wicGFyc2V4bWwuanNcIiwgXCJwYXJzZWNzcy5qc1wiLCBcInRva2VuaXplamF2YXNjcmlwdC5qc1wiLCBcInBhcnNlamF2YXNjcmlwdC5qc1wiLCBcInBhcnNlaHRtbG1peGVkLmpzXCJdLFxuICAgICAgICAgIHN0eWxlc2hlZXQ6IFtcImNzcy94bWxjb2xvcnMuY3NzXCIsIFwiY3NzL2pzY29sb3JzLmNzc1wiLCBcImNzcy9jc3Njb2xvcnMuY3NzXCJdLFxuICAgICAgICAgIHBhdGg6IFwianMvXCJcbiAgICAgICAgICAgIC8vIG1vcmUgY29kZW1pcnJvciBvcHRpb25zLCDmm7TlpJogY29kZW1pcnJvciDnmoTpq5jnuqfphY3nva4uLi5cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBtZXRob2RzOiB7XG5cbiAgICAgIH0sXG4gICAgICBjb21wdXRlZDoge1xuICAgICAgICBjb2RlbWlycm9yKCkge1xuICAgICAgICAgIHJldHVybiB0aGlzLiRyZWZzLm15Q20uY29kZW1pcnJvclxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgY3JlYXRlZDogZnVuY3Rpb24gKCkge1xuICAgICAgICAvL2NvbnNvbGUubG9nKCctY3JlYXRlZCcpO1xuICAgICAgICBcblxuXG5cbiAgICAgIH0sXG4gICAgICB3YXRjaDoge1xuICAgICAgICAvLyB3aGVuZXZlciBxdWVzdGlvbiBjaGFuZ2VzLCB0aGlzIGZ1bmN0aW9uIHdpbGwgcnVuXG5cbiAgICAgIH1cbiAgIH1cbjwvc2NyaXB0PlxuIFxuPHN0eWxlIHNjb3BlZD5cbiAgLmZpZWxkLWl0ZW0ge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICBtYXgtd2lkdGg6IDQwdnc7XG5cbiAgfVxuICAuZmllbGQtaXRlbSBsYWJlbCB7XG4gICAgZmxleDogMTtcbiAgfVxuICAuZmllbGQtaXRlbSBpbnB1dCB7XG4gICAgZmxleDogMTtcbiAgfVxuXG4gIC5lZGl0b3Ige1xuICB3aWR0aDogNjAwcHg7XG4gIGhlaWdodDogODAwcHg7XG59XG5cblxuPC9zdHlsZT4iLCI8dGVtcGxhdGU+XG4gIDxkaXYgY2xhc3M9XCJmaWVsZC1pdGVtXCI+XG4gIFxuICAgIDxsYWJlbD57e2ZpZWxkLm5hbWV9fTwvbGFiZWw+XG5cbiAgICA8Y29kZW1pcnJvciByZWY9XCJteUNtXCJcbiAgICAgIDpvcHRpb25zPVwiY21PcHRpb25zXCJcbiAgICAgIHYtYmluZDpuYW1lPVwiZmllbGQudmFyaWFibGVcIlxuICAgICAgdi1tb2RlbD1cImZpZWxkLmNvbnRlbnRcIlxuICAgICAgPlxuICAgIDwvY29kZW1pcnJvcj5cblxuXG4gIDwvZGl2PlxuICBcblxuPC90ZW1wbGF0ZT5cbiBcbjxzY3JpcHQ+XG5cbiAgaW1wb3J0IFZ1ZUNvZGVtaXJyb3IgZnJvbSAndnVlLWNvZGVtaXJyb3InXG4gIGltcG9ydCAnY29kZW1pcnJvci9saWIvY29kZW1pcnJvci5jc3MnXG4gIGltcG9ydCAnY29kZW1pcnJvci90aGVtZS9iYXNlMTYtbGlnaHQuY3NzJ1xuICAvLyBpbXBvcnQgJ2NvZGVtaXJyb3IvbW9kZS9odG1sbWl4ZWQvaHRtbG1peGVkLmpzJ1xuICAvLyBpbXBvcnQgJ2NvZGVtaXJyb3IvbW9kZS9qYXZhc2NyaXB0L2phdmFzY3JpcHQuanMnXG4gIGltcG9ydCAnY29kZW1pcnJvci9tb2RlL2Nzcy9jc3MuanMnXG5cbiAgIGV4cG9ydCBkZWZhdWx0IHtcbiAgICAgIG5hbWU6IFwiY3NzZmllbGRcIixcbiAgICAgIHByb3BzOiBbXG4gICAgICAgICdmaWVsZCdcbiAgICAgIF0sXG4gICAgICBjb21wb25lbnRzOiB7XG4gICAgICAgIFZ1ZUNvZGVtaXJyb3JcbiAgICAgIH0sXG4gICAgICBkYXRhOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB7XG5cbiAgICAgICAgICBjbU9wdGlvbnM6IHtcbiAgICAgICAgICAgIC8vIGNvZGVtaXJyb3Igb3B0aW9uc1xuICAgICAgICAgICAgdGFiU2l6ZTogNCxcbiAgICAgICAgICAgIG1vZGU6ICdjc3MnLFxuICAgICAgICAgICAgdGhlbWU6ICdiYXNlMTYtbGlnaHQnLFxuICAgICAgICAgICAgbGluZU51bWJlcnM6IHRydWUsXG4gICAgICAgICAgICBsaW5lOiB0cnVlLFxuICAgICAgICAgICAgcGFyc2VyZmlsZTogW1wicGFyc2V4bWwuanNcIiwgXCJwYXJzZWNzcy5qc1wiLCBcInRva2VuaXplamF2YXNjcmlwdC5qc1wiLCBcInBhcnNlamF2YXNjcmlwdC5qc1wiLCBcInBhcnNlaHRtbG1peGVkLmpzXCJdLFxuICAgICAgICAgIHN0eWxlc2hlZXQ6IFtcImNzcy94bWxjb2xvcnMuY3NzXCIsIFwiY3NzL2pzY29sb3JzLmNzc1wiLCBcImNzcy9jc3Njb2xvcnMuY3NzXCJdLFxuICAgICAgICAgIHBhdGg6IFwianMvXCJcbiAgICAgICAgICAgIC8vIG1vcmUgY29kZW1pcnJvciBvcHRpb25zLCDmm7TlpJogY29kZW1pcnJvciDnmoTpq5jnuqfphY3nva4uLi5cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBtZXRob2RzOiB7XG5cbiAgICAgIH0sXG4gICAgICBjb21wdXRlZDoge1xuICAgICAgICBjb2RlbWlycm9yKCkge1xuICAgICAgICAgIHJldHVybiB0aGlzLiRyZWZzLm15Q20uY29kZW1pcnJvclxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgY3JlYXRlZDogZnVuY3Rpb24gKCkge1xuICAgICAgICAvL2NvbnNvbGUubG9nKCctY3JlYXRlZCcpO1xuICAgICAgICBcblxuXG5cbiAgICAgIH0sXG4gICAgICB3YXRjaDoge1xuICAgICAgICAvLyB3aGVuZXZlciBxdWVzdGlvbiBjaGFuZ2VzLCB0aGlzIGZ1bmN0aW9uIHdpbGwgcnVuXG5cbiAgICAgIH1cbiAgIH1cbjwvc2NyaXB0PlxuIFxuPHN0eWxlIHNjb3BlZD5cbiAgLmZpZWxkLWl0ZW0ge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICBtYXgtd2lkdGg6IDQwdnc7XG5cbiAgfVxuICAuZmllbGQtaXRlbSBsYWJlbCB7XG4gICAgZmxleDogMTtcbiAgfVxuICAuZmllbGQtaXRlbSBpbnB1dCB7XG4gICAgZmxleDogMTtcbiAgfVxuXG4gIC5lZGl0b3Ige1xuICB3aWR0aDogNjAwcHg7XG4gIGhlaWdodDogODAwcHg7XG59XG5cblxuPC9zdHlsZT4iLCI8dGVtcGxhdGU+XG5cbiAgICAgIDx1bCBjbGFzcz1cImZpZWxkLWl0ZW0tcm9vdC1sb29wXCI+XG4gICAgICAgIDxsaSBjbGFzcz1cImNhdFwiXG4gICAgICAgICAgdi1pZj1cImNhdHNwYWdlcy5jYXRlZ29yaWVzXCJcbiAgICAgICAgICB2LWZvcj1cImNhdCBpbiBjYXRzcGFnZXMuY2F0ZWdvcmllc1wiPlxuICAgICAgICB7e2NhdC5uYW1lfX1cblxuICAgICAgICAgIDxjYXRzLXBhZ2VzLXNlbGVjdC1sb29wXG4gICAgICAgICAgICB2LW9uOmZpbmlzaGVkPVwiZmluaXNoZWRfMlwiXG4gICAgICAgICAgICB2LWJpbmQ6Y2F0c3BhZ2VzPVwieydjYXRlZ29yaWVzJzogY2F0LmNoaWxkcywgJ3BhZ2VzJzogY2F0LnBhZ2VzfVwiXG4gICAgICAgICAgPjwvY2F0cy1wYWdlcy1zZWxlY3QtbG9vcD5cbiAgICAgICAgICBcbiAgICAgICAgPC9saT5cbiAgICAgICAgPGxpIGNsYXNzPVwicGFnZVwiXG4gICAgICAgICAgdi1pZj1cImNhdHNwYWdlcy5wYWdlc1wiIHYtZm9yPVwicGFnZSBpbiBjYXRzcGFnZXMucGFnZXNcIj5cbiAgICAgICAgICAgXG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgY2xhc3M9XCJzZWxlY3QgaWNvbi1wYWdlc1wiXG4gICAgICAgICAgICB2LW9uOmNsaWNrPVwiaGFuZGxlclBhZ2UocGFnZSlcIlxuICAgICAgICAgID57e3BhZ2UubmFtZX19PC9idXR0b24+XG5cbiAgICAgICAgICBcbiAgICAgICAgPC9saT5cblxuICAgICAgPC91bD5cblxuPC90ZW1wbGF0ZT5cbiBcbjxzY3JpcHQ+XG4gICBleHBvcnQgZGVmYXVsdCB7XG4gICAgICBuYW1lOiBcImNhdHMtcGFnZXMtc2VsZWN0LWxvb3BcIixcbiAgICAgIHByb3BzOiBbXG4gICAgICAgICdjYXRzcGFnZXMnXG4gICAgICBdLFxuICAgICAgY29tcG9uZW50czoge1xuICAgICAgICBcbiAgICAgIH0sXG4gICAgICBkYXRhOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBjcmVhdGVkOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIC8vY29uc29sZS5sb2coJy1jcmVhdGVkJyk7XG4gICAgICAgIFxuICAgICAgICAvL2NvbnNvbGUubG9nKHRoaXMuY2F0c3BhZ2VzKTtcblxuICAgICAgfSxcbiAgICAgIHdhdGNoOiB7XG4gICAgICAgIC8vIHdoZW5ldmVyIHF1ZXN0aW9uIGNoYW5nZXMsIHRoaXMgZnVuY3Rpb24gd2lsbCBydW5cbiAgICAgIH0sXG4gICAgICBtZXRob2RzOiB7XG5cbiAgICAgICAgZmluaXNoZWRfMjogZnVuY3Rpb24gKHBhZ2UpIHtcbiAgICAgICAgICAvL2NvbnNvbGUubG9nKCdkb25lIGNoaWxkISEhIScsIHBhZ2UpO1xuXG4gICAgICAgICAgdGhpcy4kZW1pdCgnZmluaXNoZWQnLCB7XG4gICAgICAgICAgICAncGFnZV9pZCc6cGFnZS5wYWdlX2lkLFxuICAgICAgICAgICAgJ3BhZ2VfdXJsJzpwYWdlLnBhZ2VfdXJsXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgXG4gICAgICAgIH0sXG4gICAgICAgIGhhbmRsZXJQYWdlOiBmdW5jdGlvbiAocGFnZSkge1xuXG4gICAgICAgICAgICBpZiAocGFnZS5pZCkge1xuXG4gICAgICAgICAgICAgIC8vY29uc29sZS5sb2coJy1jbGljaycpO1xuICAgICAgICAgICAgICAvL2NvbnNvbGUubG9nKCB0aGlzLmZpbmlzaGVkICk7XG4gICAgICAgICAgICAgIHRoaXMuJGVtaXQoJ2ZpbmlzaGVkJywge1xuICAgICAgICAgICAgICAgICdwYWdlX2lkJzpwYWdlLmlkLFxuICAgICAgICAgICAgICAgICdwYWdlX3VybCc6cGFnZS51cmxcbiAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgLy90aGlzLmZpbmlzaGVkKCk7XG4gICAgICAgICAgICAgIC8vIHRoaXMudmFsdWUgPSB7XG4gICAgICAgICAgICAgIC8vICAgJ3BhZ2VfaWQnOnBhZ2UuaWQsXG4gICAgICAgICAgICAgIC8vICAgJ3BhZ2VfdXJsJzpwYWdlLnVybFxuICAgICAgICAgICAgICAvLyB9O1xuXG4gICAgICAgICAgICAgIC8vIEV2ZW50QnVzLiRlbWl0KCdjYXRzLXBhZ2VzLWhhbmRsZUNsaWNrJywge1xuICAgICAgICAgICAgICAvLyAgICdwYWdlX2lkJzpwYWdlLmlkLFxuICAgICAgICAgICAgICAvLyAgICdwYWdlX3VybCc6cGFnZS51cmxcbiAgICAgICAgICAgICAgLy8gfSApO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBcblxuICAgICAgICB9XG5cblxuICAgICAgfVxuICAgfVxuPC9zY3JpcHQ+XG4gXG48c3R5bGUgc2NvcGVkPlxuXG4uZmllbGQtaXRlbS1yb290LWxvb3AgLmNhdCB7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG59XG5cblxuLmZpZWxkLWl0ZW0tcm9vdC1sb29wIC5pY29uLXBhZ2VzIHtcbiAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoJy4uLy4uLy4uL2ljb25zL25hdi1wYWdlcy5zdmcnKTtcbiAgICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0O1xuICAgIGJhY2tncm91bmQtcG9zaXRpb246IDAuNnJlbSBjZW50ZXI7XG4gICAgYmFja2dyb3VuZC1zaXplOiBhdXRvIDFyZW07XG5cbiAgICBwYWRkaW5nLWxlZnQ6IDJyZW07XG5cbiAgICB3aWR0aDogYXV0bztcbiAgICBwYWRkaW5nLXJpZ2h0OiAxcmVtO1xufVxuXG5cbjwvc3R5bGU+IiwiPHRlbXBsYXRlPlxuICA8ZGl2IGNsYXNzPVwiZmllbGQtaXRlbS1yb290XCI+XG5cbiAgICA8ZGl2IGNsYXNzPVwiaW50ZXJmYWNlXCIgdi1vbjpjbGljaz1cImhhbmRsZXJPcGVuKClcIj5cbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3M9XCJzZWxlY3RcIlxuICAgICAgICB2LXRvb2x0aXA9XCJ7XG4gICAgICAgICAgY29udGVudDogc2VsZWN0ZWQucGFnZV91cmwsXG4gICAgICAgICAgZGVsYXk6IHsgc2hvdzogMzAwLCBoaWRlOiAzMDAgfSxcbiAgICAgICAgICBwbGFjZW1lbnQ6ICd0b3AnXG4gICAgICAgIH1cIlxuICAgICAgICB2LWlmPVwic2VsZWN0ZWQucGFnZV91cmxcIj57e3NlbGVjdGVkLnBhZ2VfdXJsfX08L2Rpdj5cbiAgICAgIDxidXR0b25cbiAgICAgICAgdi1pZj1cIiFzZWxlY3RlZC5wYWdlX3VybFwiIFxuICAgICAgICB2LXRvb2x0aXA9XCJ7XG4gICAgICAgICAgY29udGVudDonU2VpdGUgYXVzd8OkaGxlbicsXG4gICAgICAgICAgZGVsYXk6IHsgc2hvdzogODAwLCBoaWRlOiAxMDAwIH0sXG4gICAgICAgICAgcGxhY2VtZW50OiAncmlnaHQnXG4gICAgICAgIH1cIlxuICAgICAgICBjbGFzcz1cInNlbGVjdFwiPi0gQXVzd8OkaGxlbiAtPC9idXR0b24+XG4gICAgPC9kaXY+XG5cblxuICAgIDxkaXZcbiAgICAgIGNsYXNzPVwiYWpheGZvcm1XcmFwIGNhdHNwYWdlc3NlbGVjdFwiXG4gICAgICB2LXNob3c9XCJvcGVuXCI+XG5cbiAgICAgIDxidXR0b25cbiAgICAgICAgdi1vbjpjbGljaz1cImhhbmRsZUNsb3NlKClcIlxuICAgICAgICBjbGFzcz1cImNsb3NlXCJcbiAgICAgICAgdi10b29sdGlwPVwie1xuICAgICAgICAgIGNvbnRlbnQ6J0ZlbnRlciBzY2hsaWXDn2VuJyxcbiAgICAgICAgICBkZWxheTogeyBzaG93OiA4MDAsIGhpZGU6IDEwMDAgfSxcbiAgICAgICAgICBwbGFjZW1lbnQ6ICdyaWdodCdcbiAgICAgICAgfVwiXG4gICAgICA+PC9idXR0b24+XG5cbiAgICAgIFxuXG4gICAgICA8ZGl2IGNsYXNzPVwidHJlZVwiPlxuICAgICAgICBcbiAgICAgICAgPGRpdiBjbGFzcz1cImhlYWRlciBpY29uLW5hdi1wYWdlc1wiPjxoMz5TZWl0ZW48L2gzPjwvZGl2PlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJzY3JvbGxhYmxlIGJveFwiPlxuXG4gICAgICAgICAgPGNhdHMtcGFnZXMtc2VsZWN0LWxvb3BcbiAgICAgICAgICAgIHYtb246ZmluaXNoZWQ9XCJmaW5pc2hlZFwiXG4gICAgICAgICAgICB2LWJpbmQ6Y2F0c3BhZ2VzPVwieydjYXRlZ29yaWVzJzogY2F0c3BhZ2VzLmNhdGVnb3JpZXMsICdwYWdlcyc6IGNhdHNwYWdlcy5wYWdlc31cIlxuICAgICAgICAgID48L2NhdHMtcGFnZXMtc2VsZWN0LWxvb3A+XG5cbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICBjbGFzcz1cInNlbGVjdCBpY29uLXNsYXNoXCJcbiAgICAgICAgICAgIHYtb246Y2xpY2s9XCJoYW5kbGVyUGFnZSgpXCJcbiAgICAgICAgICAgID4tIGxlZXIgLTwvYnV0dG9uPlxuXG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgY2xhc3M9XCJzZWxlY3QgaWNvbi1iYWNrXCJcbiAgICAgICAgICAgIHYtb246Y2xpY2s9XCJoYW5kbGVyU3BlemlhbCgnYmFjaycpXCJcbiAgICAgICAgICAgID4tIFrDvHLDvGNrIC08L2J1dHRvbj5cblxuICAgICAgICA8L2Rpdj5cblxuICAgICAgPC9kaXY+XG5cblxuICAgIDwvZGl2PlxuXG5cbiAgPC9kaXY+XG4gIFxuXG48L3RlbXBsYXRlPlxuIFxuPHNjcmlwdD5cblxuICBpbXBvcnQgQ2F0c1BhZ2VzU2VsZWN0TG9vcCBmcm9tICcuL0NhdHNQYWdlc1NlbGVjdExvb3AnXG5cbiAgIGV4cG9ydCBkZWZhdWx0IHtcbiAgICAgIG5hbWU6IFwiY2F0cy1wYWdlcy1zZWxlY3RcIixcbiAgICAgIHByb3BzOiBbXG4gICAgICAgICdjYXRzcGFnZXMnLFxuICAgICAgICAnc2VsZWN0ZWQnXG4gICAgICBdLFxuICAgICAgY29tcG9uZW50czoge1xuICAgICAgICBDYXRzUGFnZXNTZWxlY3RMb29wXG4gICAgICB9LFxuICAgICAgZGF0YTogZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIG9wZW46IGZhbHNlLFxuXG4gICAgICAgICAgLy8gcGFnZV9vcGVuX2lkOiBmYWxzZSxcbiAgICAgICAgICAvLyBwYWdlX29wZW5fdXJsOiBmYWxzZVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgY29tcHV0ZWQ6IHtcblxuICAgICAgfSxcbiAgICAgIGNyZWF0ZWQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgLy9jb25zb2xlLmxvZygnLWNyZWF0ZWQnKTtcbiAgICAgICAgXG4gICAgICAgIC8vY29uc29sZS5sb2codGhpcy5jYXRzcGFnZXMpO1xuXG4gICAgICAgIC8qXG4gICAgICAgIEV2ZW50QnVzLiRvbignY2F0cy1wYWdlcy1oYW5kbGVDbGljaycsIG9iaiA9PiB7XG4gICAgICAgICAgLy9jb25zb2xlLmxvZyhgZXZlbnRidXM6IGZvcm0tZWRpdCBgLG9iailcbiAgICAgICAgICBcbiAgICAgICAgICAvL3RoaXMudmFsdWUgPSBvYmo7XG5cbiAgICAgICAgICB2YXIgZW1pdCA9IHtcbiAgICAgICAgICAgICdwYWdlX2lkJzogJycsXG4gICAgICAgICAgICAncGFnZV91cmwnOiAnJ1xuICAgICAgICAgIH07XG4gICAgICAgICAgaWYgKG9iai5wYWdlX2lkKSB7XG4gICAgICAgICAgICBlbWl0ID0ge1xuICAgICAgICAgICAgICAncGFnZV9pZCc6IG9iai5wYWdlX2lkLFxuICAgICAgICAgICAgICAncGFnZV91cmwnOiBvYmoucGFnZV91cmxcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgLy9FdmVudEJ1cy4kZW1pdCgnY2hlY2tmaWVsZHMtcmVkaXJlY3RfdHJ1ZScsIGVtaXQgKTtcblxuICAgICAgICAgIHRoaXMuaGFuZGxlQ2xvc2UoKTtcblxuICAgICAgICB9KTtcbiAgICAgICAgKi9cblxuICAgICAgfSxcbiAgICAgIHdhdGNoOiB7XG4gICAgICAgIC8vIHdoZW5ldmVyIHF1ZXN0aW9uIGNoYW5nZXMsIHRoaXMgZnVuY3Rpb24gd2lsbCBydW5cbiAgICAgIH0sXG4gICAgICBtZXRob2RzOiB7XG5cbiAgICAgICAgaGFuZGxlclBhZ2U6IGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgIHRoaXMuJGVtaXQoJ2ZpbmlzaGVkJywge1xuICAgICAgICAgICAgJ3BhZ2VfaWQnOicnLFxuICAgICAgICAgICAgJ3BhZ2VfdXJsJzonJ1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIHRoaXMuaGFuZGxlQ2xvc2UoKTtcblxuICAgICAgICB9LFxuICAgICAgICBoYW5kbGVyU3BlemlhbDogZnVuY3Rpb24gKHR5cGUpIHtcblxuICAgICAgICAgIGxldCBvYmogPSB7XG4gICAgICAgICAgICAncGFnZV9pZCc6JycsXG4gICAgICAgICAgICAncGFnZV91cmwnOicnXG4gICAgICAgICAgfTtcblxuICAgICAgICAgIGlmICh0eXBlID09ICdiYWNrJykge1xuICAgICAgICAgICAgb2JqLnBhZ2VfaWQgPSAnYmFjayc7XG4gICAgICAgICAgICBvYmoucGFnZV91cmwgPSAnIC0gYmFjayAtICc7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuJGVtaXQoJ2ZpbmlzaGVkJywgb2JqKTtcbiAgICAgICAgICB0aGlzLmhhbmRsZUNsb3NlKCk7XG5cbiAgICAgICAgfSxcbiAgICAgICAgZmluaXNoZWQ6IGZ1bmN0aW9uIChvYmopIHtcblxuICAgICAgICAgIC8vY29uc29sZS5sb2coJ2RvbmUhJywgb2JqKTtcbiAgICAgICAgICAvL3RoaXMudmFsdWUgPSBvYmo7XG5cbiAgICAgICAgICB0aGlzLiRlbWl0KCdmaW5pc2hlZCcsIG9iaik7XG4gICAgICAgICAgdGhpcy5oYW5kbGVDbG9zZSgpO1xuXG4gICAgICAgIH0sXG5cbiAgICAgICAgaGFuZGxlQ2xvc2U6IGZ1bmN0aW9uIChvYmopIHtcbiAgICAgICAgICB0aGlzLm9wZW4gPSBmYWxzZTtcbiAgICAgICAgfSxcbiAgICAgICAgaGFuZGxlck9wZW46ICBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgICBpZiAodGhpcy5vcGVuKSB7XG4gICAgICAgICAgICB0aGlzLm9wZW4gPSBmYWxzZTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5vcGVuID0gdHJ1ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgfVxuXG4gICAgICB9XG4gICB9XG48L3NjcmlwdD5cbiBcbjxzdHlsZSBzY29wZWQ+XG5cblxuLmNhdHNwYWdlc3NlbGVjdCAge1xuICBkaXNwbGF5OmZsZXg7XG59XG4uY2F0c3BhZ2Vzc2VsZWN0IC50cmVlIHtcbiAgZmxleDogMTtcbn1cbi5jYXRzcGFnZXNzZWxlY3QgLmZpZWxkcyB7XG4gIGZsZXg6IDE7XG59XG5cbi5maWVsZC1pdGVtLXJvb3Qge1xuICBmbGV4OiAxO1xufVxuXG4gIC5pbnRlcmZhY2UgLnNlbGVjdCB7XG4gICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKCcuLi8uLi8uLi9pY29ucy9wYWdlLnN2ZycpO1xuICAgIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7XG4gICAgYmFja2dyb3VuZC1wb3NpdGlvbjogMC42cmVtIGNlbnRlcjtcbiAgICBiYWNrZ3JvdW5kLXNpemU6IGF1dG8gMXJlbTtcblxuICAgIHBhZGRpbmctbGVmdDogMnJlbTtcblxuICAgIFxuICAgIG92ZXJmbG93OiBoaWRkZW47XG5cbiAgICBcblxuICB9XG5cblxuICAuY2F0c3BhZ2Vzc2VsZWN0IC5pY29uLXBhZ2VzIHtcbiAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoJy4uLy4uLy4uL2ljb25zL25hdi1wYWdlcy5zdmcnKTtcbiAgICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0O1xuICAgIGJhY2tncm91bmQtcG9zaXRpb246IDAuNnJlbSBjZW50ZXI7XG4gICAgYmFja2dyb3VuZC1zaXplOiBhdXRvIDFyZW07XG5cbiAgICBwYWRkaW5nLWxlZnQ6IDJyZW07XG5cbiAgICB3aWR0aDogYXV0bztcbn1cblxuIC5jYXRzcGFnZXNzZWxlY3QgLmljb24tc2xhc2gge1xuICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybCgnLi4vLi4vLi4vaWNvbnMvc2xhc2guc3ZnJyk7XG4gICAgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDtcbiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwLjZyZW0gY2VudGVyO1xuICAgIGJhY2tncm91bmQtc2l6ZTogYXV0byAxcmVtO1xuXG4gICAgcGFkZGluZy1sZWZ0OiAycmVtO1xuXG4gICAgXG4gICAgd2lkdGg6IGF1dG87XG59XG5cblxuXG5cbi5ib3gge1xuICBoZWlnaHQ6IDYwdmg7XG59XG5cbjwvc3R5bGU+IiwiPHRlbXBsYXRlPlxuICA8ZGl2IGNsYXNzPVwiZmllbGQtaXRlbVwiPlxuICAgIDxoND48ZGl2IGNsYXNzPVwiY29ybmVyXCI+PC9kaXY+e3tmaWVsZC5uYW1lfX08L2g0PlxuICAgIDx1bD5cbiAgICAgIDxsaT5cbiAgICAgICAgPGxhYmVsPlBhZ2U8L2xhYmVsPlxuICAgICAgICBcbiAgICAgICAgPGlucHV0IHR5cGU9XCJoaWRkZW5cIiB2LWJpbmQ6bmFtZT1cImZpZWxkLnZhcmlhYmxlXCIgdi1tb2RlbD1cImZpZWxkLmNvbnRlbnQuc2VsZWN0ZWRMaW5rXCIgIHBsYWNlaG9sZGVyPVwiXCIgLz5cblxuICAgICAgICA8Y2F0cy1wYWdlcy1zZWxlY3RcbiAgICAgICAgICB2LW9uOmZpbmlzaGVkPVwic2V0U2VsZWN0ZWRMaW5rXCJcbiAgICAgICAgICB2LWJpbmQ6Y2F0c3BhZ2VzPVwiY2F0c3BhZ2VzXCJcbiAgICAgICAgICB2LWJpbmQ6c2VsZWN0ZWQ9XCJzZWxlY3RlZExpbmtcIj48L2NhdHMtcGFnZXMtc2VsZWN0PlxuXG4gICAgICAgICAgXG4gICAgICA8L2xpPlxuICAgICAgPGxpPlxuICAgICAgICA8bGFiZWw+TGFiZWw8L2xhYmVsPlxuICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiB2LWJpbmQ6bmFtZT1cImZpZWxkLnZhcmlhYmxlXCIgdi1tb2RlbD1cImZpZWxkLmNvbnRlbnQubGFiZWxcIiAgcGxhY2Vob2xkZXI9XCJcIiAvPlxuICAgICAgPC9saT5cbiAgICAgIDxsaT5cbiAgICAgICAgPGxhYmVsPkFuaW1hdGlvbiBEaXJlY3Rpb248L2xhYmVsPlxuICAgICAgICA8c2VsZWN0IHYtbW9kZWw9XCJmaWVsZC5jb250ZW50LmRpcmVjdGlvblwiIHYtYmluZDpuYW1lPVwiZmllbGQuZGlyZWN0aW9uXCI+XG4gICAgICAgICAgPG9wdGlvbiBkaXNhYmxlZCB2YWx1ZT1cIlwiPkJpdHRlIHfDpGhsZW46PC9vcHRpb24+XG4gICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cImxlZnRcIj5MZWZ0PC9vcHRpb24+XG4gICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cInJpZ2h0XCI+UmlnaHQ8L29wdGlvbj5cbiAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwidG9wXCI+VG9wPC9vcHRpb24+XG4gICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cImJvdHRvbVwiPkJvdHRvbTwvb3B0aW9uPlxuICAgICAgICA8L3NlbGVjdD5cbiAgICAgIDwvbGk+XG4gICAgICA8bGk+XG4gICAgICAgIDxsYWJlbD5DU1MgY2xhc3M8L2xhYmVsPlxuICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiB2LWJpbmQ6bmFtZT1cImZpZWxkLmNzc2NsYXNzXCIgdi1tb2RlbD1cImZpZWxkLmNvbnRlbnQuY3NzY2xhc3NcIiAgcGxhY2Vob2xkZXI9XCJcIiAvPlxuICAgICAgPC9saT5cbiAgICAgIDxsaT5cbiAgICAgICAgPGxhYmVsPjwvbGFiZWw+XG4gICAgICAgIDxzdGF0ZS1mb3JtXG4gICAgICAgICAgaWQ9XCJmaWVsZHNfZm9ybV9zdGF0ZVwiXG4gICAgICAgICAgdHlwPVwic21hbGxcIlxuICAgICAgICAgIDpzZWxlY3RlZD1cImZpZWxkLmNvbnRlbnQuc3RhdHVzXCJcbiAgICAgICAgICBAY2hhbmdlPVwiY2hhbmdlU3RhdGVcIlxuICAgICAgICA+PC9zdGF0ZS1mb3JtPlxuICAgICAgPC9saT5cbiAgICA8L3VsPlxuICA8L2Rpdj5cbiAgXG5cbjwvdGVtcGxhdGU+XG4gXG48c2NyaXB0PlxuXG4gIGltcG9ydCBDYXRzUGFnZXNTZWxlY3QgZnJvbSAnLi4vZm9ybXMvQ2F0c1BhZ2VzU2VsZWN0J1xuICBpbXBvcnQgU3RhdGVGb3JtIGZyb20gJy4uL2Zvcm1zL1N0YXRlRm9ybSdcblxuICAgZXhwb3J0IGRlZmF1bHQge1xuICAgICAgbmFtZTogXCJ0ZXh0bGlua1wiLFxuICAgICAgcHJvcHM6IFtcbiAgICAgICAgJ2ZpZWxkJyxcbiAgICAgICAgJ3BhZ2VzJyxcbiAgICAgICAgJ2NhdHNwYWdlcydcbiAgICAgIF0sXG4gICAgICBjb21wb25lbnRzOiB7XG4gICAgICAgIFN0YXRlRm9ybSxcbiAgICAgICAgQ2F0c1BhZ2VzU2VsZWN0XG4gICAgICB9LFxuICAgICAgZGF0YTogZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHNlbGVjdGVkTGluazogZmFsc2VcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIGNyZWF0ZWQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgLy9jb25zb2xlLmxvZyggSlNPTi5zdHJpbmdpZnkodGhpcy5maWVsZCkpO1xuICAgICAgICAvL2NvbnNvbGUubG9nKCdhYScsdGhpcy5maWVsZC5jb250ZW50LnNlbGVjdGVkTGluayk7XG5cbiAgICAgICAgaWYgKHRoaXMuZmllbGQuY29udGVudC5zZWxlY3RlZExpbmspIHtcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkTGluayA9IEpTT04ucGFyc2UodGhpcy5maWVsZC5jb250ZW50LnNlbGVjdGVkTGluayk7XG4gICAgICAgIH1cblxuICAgICAgfSxcbiAgICAgIHdhdGNoOiB7XG4gICAgICAgIC8vIHdoZW5ldmVyIHF1ZXN0aW9uIGNoYW5nZXMsIHRoaXMgZnVuY3Rpb24gd2lsbCBydW5cblxuICAgICAgfSxcbiAgICAgIG1ldGhvZHM6IHtcblxuICAgICAgICBzZXRTZWxlY3RlZExpbms6ICBmdW5jdGlvbiAob2JqKSB7XG4gICAgICAgICAgLy9jb25zb2xlLmxvZygnLXNldFJlZGlyZWN0VHJ1ZScsIG9iaik7XG4gICAgICAgICAgaWYgKG9iai5wYWdlX2lkKSB7XG4gICAgICAgICAgICB0aGlzLmZpZWxkLmNvbnRlbnQuaWQgPSBvYmoucGFnZV9pZDtcbiAgICAgICAgICAgIHRoaXMuZmllbGQuY29udGVudC5zZWxlY3RlZExpbmsgPSBKU09OLnN0cmluZ2lmeShvYmopO1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZExpbmsgPSBvYmo7XG4gICAgICAgICAgfVxuICAgICAgICAgIFxuICAgICAgICB9LFxuICAgICAgICBjaGFuZ2VTdGF0ZShkYXRhKSB7XG4gICAgICAgICAgLy8gY29uc29sZS5sb2coZGF0YSk7XG4gICAgICAgICAgLy8gY29uc29sZS5sb2codGhpcy5maWVsZCk7XG4gICAgICAgICAgdGhpcy5maWVsZC5jb250ZW50LnN0YXR1cyA9IGRhdGEudmFsdWU7XG4gICAgICAgIH1cblxuICAgICAgfVxuICAgfVxuPC9zY3JpcHQ+XG4gXG48c3R5bGUgc2NvcGVkPlxuICAuZmllbGQtaXRlbSB1bCBsaSB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBwYWRkaW5nLWxlZnQ6IDAuM3JlbTtcbiAgICBwYWRkaW5nLXJpZ2h0OiAwcmVtO1xuICAgIHBhZGRpbmctdG9wOiAwLjNyZW07XG4gICAgcGFkZGluZy1ib3R0b206IDAuM3JlbTtcbiAgfVxuICAuZmllbGQtaXRlbSB1bCBsYWJlbCB7XG4gICAgZmxleDogMTtcbiAgfVxuICAuZmllbGQtaXRlbSB1bCBpbnB1dCB7XG4gICAgZmxleDogMTtcbiAgfVxuICAuZmllbGQtaXRlbSB1bCBzZWxlY3Qge1xuICAgIGZsZXg6IDE7XG4gIH1cblxuXG5cbjwvc3R5bGU+IiwiPHRlbXBsYXRlPlxuXG4gIDxkaXYgY2xhc3M9XCJmaWVsZC1pdGVtXCI+XG4gICAgPGxhYmVsPnt7ZmllbGQubmFtZX19PC9sYWJlbD5cbiAgICA8c2VsZWN0IHYtbW9kZWw9XCJmaWVsZC5jb250ZW50LmNvbnRlbnRcIiB2LWJpbmQ6bmFtZT1cImZpZWxkLnZhcmlhYmxlXCI+XG4gICAgICA8b3B0aW9uIGRpc2FibGVkIHZhbHVlPVwiXCI+Qml0dGUgd8OkaGxlbjo8L29wdGlvbj5cbiAgICAgIDxvcHRpb24gdi1mb3I9XCIobyxpKSBpbiBmaWVsZC5jb250ZW50Lm9wdGlvbnNcIiAgOnZhbHVlPVwiaVwiPnt7b319PC9vcHRpb24+XG4gICAgPC9zZWxlY3Q+XG4gIDwvZGl2PlxuXG48L3RlbXBsYXRlPlxuIFxuPHNjcmlwdD5cbiAgIGV4cG9ydCBkZWZhdWx0IHtcbiAgICAgIG5hbWU6IFwic2VsZWN0ZmllbGRcIixcbiAgICAgIHByb3BzOiBbXG4gICAgICAgICdmaWVsZCdcbiAgICAgIF0sXG4gICAgICBjb21wb25lbnRzOiB7XG4gICAgICAgIFxuICAgICAgfSxcbiAgICAgIGRhdGE6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIGNyZWF0ZWQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgLy9jb25zb2xlLmxvZygnLWNyZWF0ZWQnKTtcbiAgICAgICAgXG4gICAgICB9LFxuICAgICAgd2F0Y2g6IHtcbiAgICAgICAgLy8gd2hlbmV2ZXIgcXVlc3Rpb24gY2hhbmdlcywgdGhpcyBmdW5jdGlvbiB3aWxsIHJ1blxuXG4gICAgICB9LFxuICAgICAgbWV0aG9kczoge1xuXG5cbiAgICAgIH1cbiAgIH1cbjwvc2NyaXB0PlxuIFxuPHN0eWxlIHNjb3BlZD5cbiAgLmZpZWxkLWl0ZW0ge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gIH1cbiAgLmZpZWxkLWl0ZW0gbGFiZWwge1xuICAgIGZsZXg6IDE7XG4gIH1cbiAgLmZpZWxkLWl0ZW0gc2VsZWN0IHtcbiAgICBmbGV4OiAxO1xuICB9XG48L3N0eWxlPiIsIjx0ZW1wbGF0ZT5cbiAgPGRpdiBjbGFzcz1cImZpZWxkLWl0ZW1cIj5cbiAgXG4gICAgPGxhYmVsPnt7ZmllbGQubmFtZX19PC9sYWJlbD5cbiAgICA8aW5wdXQgdHlwZT1cImhpZGRlblwiIHYtYmluZDpuYW1lPVwiZmllbGQudmFyaWFibGVcIiB2LW1vZGVsPVwiZmllbGQuY29udGVudFwiIC8+XG4gICAgPGltZyB2LWJpbmQ6c3JjPVwicHJldmlld1wiIGNsYXNzPVwiaW1hZ2VfcHJldmlld1wiIC8+XG4gICAgPGJ1dHRvblxuICAgICAgY2xhc3M9XCJidG5cIiBcbiAgICAgIHYtb246Y2xpY2s9XCJvcGVuR2FsbGVyeSgkZXZlbnQsIGZpZWxkKVwiXG4gICAgICB2LXRvb2x0aXA9XCJ7XG4gICAgICAgIGNvbnRlbnQ6J0bDvGdlbiBzaWUgQmlsZGVyIGhpbnp1JyxcbiAgICAgICAgZGVsYXk6IHsgc2hvdzogODAwLCBoaWRlOiAxMDAwIH0sXG4gICAgICAgIHBsYWNlbWVudDogJ3JpZ2h0J1xuICAgICAgfVwiXG4gICAgPlBhZ2VHYWxsZXJ5PC9idXR0b24+XG5cbiAgPC9kaXY+XG4gIFxuXG48L3RlbXBsYXRlPlxuIFxuPHNjcmlwdD5cbiAgIGV4cG9ydCBkZWZhdWx0IHtcbiAgICAgIG5hbWU6IFwiaW1hZ2VmaWVsZFwiLFxuICAgICAgcHJvcHM6IFtcbiAgICAgICAgJ2ZpZWxkJyxcbiAgICAgICAgJ3BhZ2UnXG4gICAgICBdLFxuICAgICAgY29tcG9uZW50czoge1xuICAgICAgICBcbiAgICAgIH0sXG4gICAgICBkYXRhOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgLy92YWx1ZTogJycsXG4gICAgICAgICAgcHJldmlldzogZmFsc2VcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIGNyZWF0ZWQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgLy9jb25zb2xlLmxvZygnLWNyZWF0ZWQnLCB0aGlzLnBhZ2UuaW1hZ2VzKTtcbiAgICAgICAgXG4gICAgICAgIFxuICAgICAgICB0aGlzLnNldERlZmF1bHQoKTtcblxuICAgICAgfSxcbiAgICAgIHdhdGNoOiB7XG4gICAgICAgIC8vIHdoZW5ldmVyIHF1ZXN0aW9uIGNoYW5nZXMsIHRoaXMgZnVuY3Rpb24gd2lsbCBydW5cblxuICAgICAgICAnZmllbGQuY29udGVudCc6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICB0aGlzLnNldERlZmF1bHQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIFxuICAgICAgfSxcbiAgICAgIG1ldGhvZHM6IHtcblxuICAgICAgICBzZXREZWZhdWx0OiBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgICB2YXIgdGhhdCA9IHRoaXM7XG5cbiAgICAgICAgICBpZiAodGhpcy5maWVsZC5jb250ZW50ICYmIHRoaXMucGFnZS5pbWFnZXMpIHtcbiAgICAgICAgICAgIHRoaXMucGFnZS5pbWFnZXMuZm9yRWFjaCggZnVuY3Rpb24gKG8saSkge1xuICAgICAgICAgICAgICBpZiAoby5pZCA9PSB0aGF0LmZpZWxkLmNvbnRlbnQpIHtcbiAgICAgICAgICAgICAgICBpZiAoby5mb2xkZXIgJiYgby5maWxlbmFtZSkge1xuICAgICAgICAgICAgICAgICAgdGhhdC5wcmV2aWV3ID0gby5mb2xkZXIrJy8nK28uZmlsZW5hbWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHRoaXMuZmllbGQuY29udGVudCAmJiB0aGlzLnBhZ2UuaW1hZ2VzKSB7XG4gICAgICAgICAgICB0aGlzLnBhZ2UuZ2FsbGVyeS5mb3JFYWNoKCBmdW5jdGlvbiAobyxpKSB7XG4gICAgICAgICAgICAgIGlmIChvLmlkID09IHRoYXQuZmllbGQuY29udGVudCkge1xuICAgICAgICAgICAgICAgIGlmIChvLmZvbGRlciAmJiBvLmZpbGVuYW1lKSB7XG4gICAgICAgICAgICAgICAgICB0aGF0LnByZXZpZXcgPSBvLmZvbGRlcisnLycrby5maWxlbmFtZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cblxuICAgICAgICB9LFxuICAgICAgICBjYWxsYmFjazogZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICBcbiAgICAgICAgICBpZiAodmFsdWUgJiYgdmFsdWUuaWQpIHtcbiAgICAgICAgICAgIHRoaXMuZmllbGQuY29udGVudCA9IHZhbHVlLmlkO1xuICAgICAgICAgICAgdGhpcy5wcmV2aWV3ID0gdmFsdWUuZm9sZGVyKycvJyt2YWx1ZS5maWxlbmFtZVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmZpZWxkLmNvbnRlbnQgPSAnJztcbiAgICAgICAgICAgIHRoaXMucHJldmlldyA9IGZhbHNlO1xuICAgICAgICAgIH1cblxuICAgICAgICB9LFxuICAgICAgICBvcGVuR2FsbGVyeShldmVudCwgZmllbGQpIHtcblxuICAgIFxuXG4gICAgICAgICAgRXZlbnRCdXMuJGVtaXQoJ2dhbGxlcnktb3BlbicsIHsnY2FsbGJhY2snOiB0aGlzLmNhbGxiYWNrfSApO1xuXG4gICAgICAgIH0sXG5cbiAgICAgIH1cbiAgIH1cbjwvc2NyaXB0PlxuIFxuPHN0eWxlIHNjb3BlZD5cbiAgLmZpZWxkLWl0ZW0ge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gIH1cbiAgLmZpZWxkLWl0ZW0gbGFiZWwge1xuICAgIGZsZXg6IDE7XG4gIH1cbiAgLmZpZWxkLWl0ZW0gaW5wdXQge1xuICAgIGZsZXg6IDE7XG4gIH1cblxuICAuaW1hZ2VfcHJldmlldyB7XG4gICAgd2lkdGg6IDEydmg7XG4gICAgbWFyZ2luLXJpZ2h0OiAxcmVtO1xuICB9XG48L3N0eWxlPiIsIjx0ZW1wbGF0ZT5cblxuICAgICAgPHVsIGNsYXNzPVwiZmllbGQtaXRlbS1yb290LWxvb3BcIj5cbiAgICAgICAgPGxpIGNsYXNzPVwiY2F0XCJcbiAgICAgICAgICB2LWlmPVwiY2F0c3BhZ2VzLmNhdGVnb3JpZXNcIlxuICAgICAgICAgIHYtZm9yPVwiY2F0IGluIGNhdHNwYWdlcy5jYXRlZ29yaWVzXCI+XG4gICAgICAgIHt7Y2F0Lm5hbWV9fVxuXG4gICAgICAgICAgPGNhdHMtcGFnZXMtc2VsZWN0LWxvb3BcbiAgICAgICAgICAgIHYtYmluZDpjYXRzcGFnZXM9XCJ7J2NhdGVnb3JpZXMnOiBjYXQuY2hpbGRzLCAncGFnZXMnOiBjYXQucGFnZXN9XCJcbiAgICAgICAgICA+PC9jYXRzLXBhZ2VzLXNlbGVjdC1sb29wPlxuICAgICAgICAgIFxuICAgICAgICA8L2xpPlxuICAgICAgICA8bGkgY2xhc3M9XCJwYWdlXCJcbiAgICAgICAgICB2LWlmPVwiY2F0c3BhZ2VzLnBhZ2VzXCIgdi1mb3I9XCJwYWdlIGluIGNhdHNwYWdlcy5wYWdlc1wiPlxuICAgICAgICAgICBcbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICBjbGFzcz1cInNlbGVjdCBpY29uLXBhZ2VzXCJcbiAgICAgICAgICAgIHYtb246Y2xpY2s9XCJoYW5kbGVyUGFnZShwYWdlKVwiXG4gICAgICAgICAgPnt7cGFnZS5uYW1lfX08L2J1dHRvbj5cblxuICAgICAgICAgIFxuICAgICAgICA8L2xpPlxuXG4gICAgICA8L3VsPlxuXG48L3RlbXBsYXRlPlxuIFxuPHNjcmlwdD5cbiAgIGV4cG9ydCBkZWZhdWx0IHtcbiAgICAgIG5hbWU6IFwiY2F0cy1wYWdlcy1zZWxlY3QtbG9vcFwiLFxuICAgICAgcHJvcHM6IFtcbiAgICAgICAgJ2NhdHNwYWdlcycsXG4gICAgICAgICdpbnB1dHMnXG4gICAgICBdLFxuICAgICAgY29tcG9uZW50czoge1xuICAgICAgICBcbiAgICAgIH0sXG4gICAgICBkYXRhOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBjcmVhdGVkOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIC8vY29uc29sZS5sb2coJy1jcmVhdGVkJywgdGhpcy5wYWdlLmltYWdlcyk7XG4gICAgICAgIFxuICAgICAgICAvL2NvbnNvbGUubG9nKHRoaXMuY2F0c3BhZ2VzKTtcblxuICAgICAgfSxcbiAgICAgIHdhdGNoOiB7XG4gICAgICAgIC8vIHdoZW5ldmVyIHF1ZXN0aW9uIGNoYW5nZXMsIHRoaXMgZnVuY3Rpb24gd2lsbCBydW5cbiAgICAgIH0sXG4gICAgICBtZXRob2RzOiB7XG5cbiAgICAgICAgaGFuZGxlclBhZ2U6IGZ1bmN0aW9uIChwYWdlKSB7XG5cbiAgICAgICAgICAgIGlmIChwYWdlLmlkICYmIHBhZ2UudGVtcGxhdGUuaWQpIHtcbiAgICAgICAgICAgICAgRXZlbnRCdXMuJGVtaXQoJ2ZpZWxkcy1sb2FkJywge1xuICAgICAgICAgICAgICAgICdwYWdlX2lkJzpwYWdlLmlkLFxuICAgICAgICAgICAgICAgICdwYWdlX3VybCc6cGFnZS51cmwsXG4gICAgICAgICAgICAgICAgJ3RlbXBsYXRlX2lkJzpwYWdlLnRlbXBsYXRlLmlkXG4gICAgICAgICAgICAgIH0gKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgXG5cbiAgICAgICAgfVxuXG5cbiAgICAgIH1cbiAgIH1cbjwvc2NyaXB0PlxuIFxuPHN0eWxlIHNjb3BlZD5cblxuLmZpZWxkLWl0ZW0tcm9vdC1sb29wIC5jYXQge1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xufVxuXG4uZmllbGQtaXRlbS1yb290LWxvb3AgLmljb24tcGFnZXMge1xuICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybCgnLi4vLi4vLi4vaWNvbnMvbmF2LXBhZ2VzLnN2ZycpO1xuICAgIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7XG4gICAgYmFja2dyb3VuZC1wb3NpdGlvbjogMC42cmVtIGNlbnRlcjtcbiAgICBiYWNrZ3JvdW5kLXNpemU6IGF1dG8gMXJlbTtcblxuICAgIHBhZGRpbmctbGVmdDogMnJlbTtcblxuICAgIHdpZHRoOiBhdXRvO1xuICAgIHBhZGRpbmctcmlnaHQ6IDFyZW07XG59XG5cbjwvc3R5bGU+IiwiPHRlbXBsYXRlPlxuICA8ZGl2IGNsYXNzPVwiZmllbGQtaXRlbS1yb290XCI+XG5cbiAgICA8ZGl2IGNsYXNzPVwiaW50ZXJmYWNlXCIgdi1vbjpjbGljaz1cImhhbmRsZXJPcGVuKClcIj5cbiAgICAgIDxkaXYgXG4gICAgICAgIGNsYXNzPVwic2VsZWN0XCJcbiAgICAgICAgdi10b29sdGlwPVwie1xuICAgICAgICAgIGNvbnRlbnQ6IHNlbGVjdGVkLnBhZ2VfdXJsLFxuICAgICAgICAgIGRlbGF5OiB7IHNob3c6IDMwMCwgaGlkZTogMzAwIH0sXG4gICAgICAgICAgcGxhY2VtZW50OiAndG9wJ1xuICAgICAgICB9XCJcbiAgICAgICAgdi1pZj1cInNlbGVjdGVkLnBhZ2VfdXJsXCI+XG4gICAgICAgIHt7c2VsZWN0ZWQucGFnZV91cmx9fVxuICAgICAgICA8YnI+XG4gICAgICAgIDxzdHJvbmc+e3tzZWxlY3RlZC5maWVsZF9uYW1lfX08L3N0cm9uZz5cbiAgICAgIDwvZGl2PlxuICAgICAgPGJ1dHRvblxuICAgICAgICB2LWlmPVwiIXNlbGVjdGVkLnBhZ2VfdXJsXCIgXG4gICAgICAgIHYtdG9vbHRpcD1cIntcbiAgICAgICAgICBjb250ZW50OidTZWl0ZSB1bmQgRWluZ2FiZWZlbGQgYXVzd8OkaGxlbicsXG4gICAgICAgICAgZGVsYXk6IHsgc2hvdzogODAwLCBoaWRlOiAxMDAwIH0sXG4gICAgICAgICAgcGxhY2VtZW50OiAncmlnaHQnXG4gICAgICAgIH1cIlxuICAgICAgICBjbGFzcz1cInNlbGVjdFwiPi0gQXVzd8OkaGxlbiAtPC9idXR0b24+XG4gICAgPC9kaXY+XG5cblxuICAgIDxkaXZcbiAgICAgIGNsYXNzPVwiYWpheGZvcm1XcmFwIGJpZ2dlciBjYXRzcGFnZXNzZWxlY3RcIlxuICAgICAgdi1zaG93PVwib3BlblwiPlxuXG4gICAgICA8YnV0dG9uXG4gICAgICAgIHYtb246Y2xpY2s9XCJoYW5kbGVDbG9zZSgpXCJcbiAgICAgICAgY2xhc3M9XCJjbG9zZVwiXG4gICAgICAgIHYtdG9vbHRpcD1cIntcbiAgICAgICAgICBjb250ZW50OidGZW50ZXIgc2NobGllw59lbicsXG4gICAgICAgICAgZGVsYXk6IHsgc2hvdzogODAwLCBoaWRlOiAxMDAwIH0sXG4gICAgICAgICAgcGxhY2VtZW50OiAncmlnaHQnXG4gICAgICAgIH1cIlxuICAgICAgPjwvYnV0dG9uPlxuXG4gICAgICA8ZGl2IGNsYXNzPVwidHJlZVwiPlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJoZWFkZXIgaWNvbi1uYXYtcGFnZXNcIj48aDM+U2VpdGVuPC9oMz48L2Rpdj5cblxuICAgICAgICA8cD5cbiAgICAgICAgICAxLiBXw6RobGVuIFNpZSB1bnRlbiB6dWVyc3QgZGllIFNlaXRlIGF1cy5cbiAgICAgICAgPC9wPlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJzY3JvbGxhYmxlIGJveFwiPlxuICAgICAgICAgIFxuICAgICAgICAgIDxjYXRzLXBhZ2VzLWZpZWxkcy1zZWxlY3QtbG9vcFxuICAgICAgICAgICAgdi1iaW5kOmNhdHNwYWdlcz1cInsnY2F0ZWdvcmllcyc6IGNhdHNwYWdlcy5jYXRlZ29yaWVzLCAncGFnZXMnOiBjYXRzcGFnZXMucGFnZXN9XCJcbiAgICAgICAgICAgIHYtYmluZDppbnB1dHM9XCJpbnB1dHNcIlxuICAgICAgICAgID48L2NhdHMtcGFnZXMtZmllbGRzLXNlbGVjdC1sb29wPlxuXG5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdiBjbGFzcz1cImZpZWxkc1wiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiaGVhZGVyIGljb24tbmF2LXBhZ2VzXCI+PGgzPkZlbGRlcjwvaDM+PC9kaXY+XG4gICAgICAgIFxuICAgICAgICA8cD5cbiAgICAgICAgICAyLiBXw6RobGVuIFNpZSBkYW5hY2ggZGFzIGVudHNwcmVjaGVuZGUgRWluZ2FiZWZlbGRlciBhdXMuXG4gICAgICAgIDwvcD5cbiAgICAgICAgXG4gICAgICAgIDxkaXYgY2xhc3M9XCJzY3JvbGxhYmxlIGJveFwiPlxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIGNsYXNzPVwic2VsZWN0IGljb24tcGFnZXNcIlxuICAgICAgICAgICAgdi1zaG93PVwiaW5wdXRzXCJcbiAgICAgICAgICAgIHYtZm9yPVwiaW5wdXQgaW4gaW5wdXRzXCJcbiAgICAgICAgICAgIHYtb246Y2xpY2s9XCJoYW5kbGVTZWxlY3QoaW5wdXQpXCJcbiAgICAgICAgICA+e3tpbnB1dC5uYW1lfX08L2J1dHRvbj5cblxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwiZW1wdHlcIlxuICAgICAgICAgICAgdi1zaG93PVwiIWlucHV0cy5sZW5ndGhcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIC0gRGllc2UgU2VpdGUgaGF0IGtlaW5lIEZlbGRlciAtXG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICBjbGFzcz1cInNlbGVjdCBpY29uLXNsYXNoXCJcbiAgICAgICAgICAgIHYtb246Y2xpY2s9XCJoYW5kbGVTZWxlY3QoKVwiXG4gICAgICAgICAgPi0gbGVlciAtPC9idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICBcbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cblxuICA8L2Rpdj5cblxuXG4gIFxuXG48L3RlbXBsYXRlPlxuIFxuPHNjcmlwdD5cblxuICBpbXBvcnQgQ2F0c1BhZ2VzRmllbGRzU2VsZWN0TG9vcCBmcm9tICcuL0NhdHNQYWdlc0ZpZWxkc1NlbGVjdExvb3AnXG5cbiAgIGV4cG9ydCBkZWZhdWx0IHtcbiAgICAgIG5hbWU6IFwiY2F0cy1wYWdlcy1maWVsZHMtc2VsZWN0XCIsXG4gICAgICBwcm9wczogW1xuICAgICAgICAnY2F0c3BhZ2VzJyxcbiAgICAgICAgJ3NlbGVjdGVkJ1xuICAgICAgXSxcbiAgICAgIGNvbXBvbmVudHM6IHtcbiAgICAgICAgQ2F0c1BhZ2VzRmllbGRzU2VsZWN0TG9vcFxuICAgICAgfSxcbiAgICAgIGRhdGE6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBvcGVuOiBmYWxzZSxcbiAgICAgICAgICBpbnB1dHM6IGZhbHNlLFxuXG4gICAgICAgICAgcGFnZV9vcGVuX2lkOiBmYWxzZSxcbiAgICAgICAgICBwYWdlX29wZW5fdXJsOiBmYWxzZVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgY3JlYXRlZDogZnVuY3Rpb24gKCkge1xuICAgICAgICAvL2NvbnNvbGUubG9nKCctY3JlYXRlZCcsIHRoaXMucGFnZS5pbWFnZXMpO1xuICAgICAgICBcbiAgICAgICAgLy9jb25zb2xlLmxvZyh0aGlzLmNhdHNwYWdlcyk7XG5cbiAgICAgICAgRXZlbnRCdXMuJG9uKCdmaWVsZHMtbG9hZCcsIG9iaiA9PiB7XG4gICAgICAgICAgLy9jb25zb2xlLmxvZyhgZXZlbnRidXM6IGZvcm0tZWRpdCBgLG9iailcbiAgICAgICAgICB0aGlzLmdldEZpZWxkcyhvYmoudGVtcGxhdGVfaWQpXG4gICAgICAgICAgdGhpcy5wYWdlX29wZW5faWQgPSBvYmoucGFnZV9pZFxuICAgICAgICAgIHRoaXMucGFnZV9vcGVuX3VybCA9IG9iai5wYWdlX3VybFxuICAgICAgICB9KTtcblxuICAgICAgfSxcbiAgICAgIHdhdGNoOiB7XG4gICAgICAgIC8vIHdoZW5ldmVyIHF1ZXN0aW9uIGNoYW5nZXMsIHRoaXMgZnVuY3Rpb24gd2lsbCBydW5cblxuIFxuXG4gICAgICAgIFxuICAgICAgfSxcbiAgICAgIG1ldGhvZHM6IHtcblxuICAgICAgICBoYW5kbGVTZWxlY3Q6IGZ1bmN0aW9uIChpbnB1dCkge1xuXG4gICAgICAgICAgdmFyIGVtaXQgPSB7XG4gICAgICAgICAgICAncGFnZV9pZCc6ICcnLFxuICAgICAgICAgICAgJ3BhZ2VfdXJsJzogJycsXG4gICAgICAgICAgICAnZmllbGRfdmFyaWFibGUnOicnLFxuICAgICAgICAgICAgJ2ZpZWxkX25hbWUnOicnLFxuICAgICAgICAgICAgJ2ZpZWxkX2lkJzonJ1xuICAgICAgICAgIH07XG4gICAgICAgICAgaWYgKGlucHV0KSB7XG4gICAgICAgICAgICBlbWl0ID0ge1xuICAgICAgICAgICAgICAncGFnZV9pZCc6IHRoaXMucGFnZV9vcGVuX2lkLFxuICAgICAgICAgICAgICAncGFnZV91cmwnOiB0aGlzLnBhZ2Vfb3Blbl91cmwsXG4gICAgICAgICAgICAgICdmaWVsZF92YXJpYWJsZSc6aW5wdXQudmFyaWFibGUsXG4gICAgICAgICAgICAgICdmaWVsZF9uYW1lJzppbnB1dC5uYW1lLFxuICAgICAgICAgICAgICAnZmllbGRfaWQnOmlucHV0LmlkXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIEV2ZW50QnVzLiRlbWl0KCdjaGVja2ZpZWxkcy1yb290JywgZW1pdCApO1xuXG4gICAgICAgICAgdGhpcy5oYW5kbGVDbG9zZSgpO1xuXG4gICAgICAgIH0sXG4gICAgICAgIGdldEZpZWxkczogZnVuY3Rpb24gKHRlbXBsYXRlX2lkKSB7XG4gICAgICAgICAgXG4gICAgICAgICAgLy9jb25zb2xlLmxvZyhwYWdlLnRlbXBsYXRlLmlkKTtcbiAgICAgICAgICBpZiAoIXRlbXBsYXRlX2lkKSB7XG4gICAgICAgICAgICB0aGlzLmlucHV0cyA9IGZhbHNlO1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgICB2YXIgdGhhdCA9IHRoaXM7XG5cbiAgICAgICAgICBmZXRjaCgnL2ZpZWxkcy8nK3RlbXBsYXRlX2lkKycvaW5wdXQnKVxuICAgICAgICAgIC50aGVuKGZ1bmN0aW9uKHJlc3BvbnNlKSB7XG4gICAgICAgICAgICAvL2NvbnNvbGUubG9nKCdhJyxyZXNwb25zZSk7XG4gICAgICAgICAgICByZXR1cm4gcmVzcG9uc2UuanNvbigpO1xuICAgICAgICAgIH0pXG4gICAgICAgICAgLnRoZW4oZnVuY3Rpb24obXlKc29uKSB7XG5cbiAgICAgICAgICAgIC8vY29uc29sZS5sb2cobXlKc29uKTtcbiAgICAgICAgICAgIHRoYXQuaW5wdXRzID0gbXlKc29uO1xuXG4gICAgICAgICAgfSkuY2F0Y2goZnVuY3Rpb24oZXJyKSB7ICBcbiAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignRmFpbGVkIHRvIGZldGNoIHBhZ2U6ICcsIGVycik7ICBcbiAgICAgICAgICB9KTtcblxuXG4gICAgICAgIH0sXG4gICAgICAgIFxuICAgICAgICBoYW5kbGVDbG9zZTogZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHRoaXMub3BlbiA9IGZhbHNlO1xuICAgICAgICB9LFxuICAgICAgICBoYW5kbGVyT3BlbjogIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBcbiAgICAgICAgICBcblxuICAgICAgICAgIGlmICh0aGlzLm9wZW4pIHtcbiAgICAgICAgICAgIHRoaXMub3BlbiA9IGZhbHNlO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLm9wZW4gPSB0cnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICB9XG5cbiAgICAgIH1cbiAgIH1cbjwvc2NyaXB0PlxuIFxuPHN0eWxlIHNjb3BlZD5cblxuXG4uY2F0c3BhZ2Vzc2VsZWN0ICB7XG4gIGRpc3BsYXk6ZmxleDtcbn1cbi5jYXRzcGFnZXNzZWxlY3QgLnRyZWUge1xuICBmbGV4OiAxO1xufVxuLmNhdHNwYWdlc3NlbGVjdCAuZmllbGRzIHtcbiAgZmxleDogMTtcbn1cblxuLnRyZWUgcCxcbi5maWVsZHMgcCB7XG4gIGZvbnQtd2VpZ2h0OiBib2xkO1xufVxuXG5cbi5maWVsZC1pdGVtLXJvb3Qge1xuICBmbGV4OiAxO1xufVxuXG4uaW50ZXJmYWNlIC5zZWxlY3Qge1xuICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybCgnLi4vLi4vLi4vaWNvbnMvbmF2LWZpZWxkcy5zdmcnKTtcbiAgICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0O1xuICAgIGJhY2tncm91bmQtcG9zaXRpb246IDAuNnJlbSBjZW50ZXI7XG4gICAgYmFja2dyb3VuZC1zaXplOiBhdXRvIDFyZW07XG5cbiAgICBwYWRkaW5nLWxlZnQ6IDJyZW07XG4gXG4gICAgaGVpZ2h0OjJyZW07XG5cbiAgICB3aWR0aDogMjB2dztcblxuICB9XG5cbiAgLmJveCB7XG4gIGhlaWdodDogNjB2aDtcbiAgZGlzcGxheTogZmxleDtcbmZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG5wYWRkaW5nLXRvcDoycmVtO1xufVxuXG4uYm94IC5lbXB0eSB7XG4gIHBhZGRpbmctYm90dG9tOjFyZW07XG59XG5cbiAgLmJveCAuaWNvbi1wYWdlcyB7XG4gICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKCcuLi8uLi8uLi9pY29ucy9uYXYtcGFnZXMuc3ZnJyk7XG4gICAgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDtcbiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwLjZyZW0gY2VudGVyO1xuICAgIGJhY2tncm91bmQtc2l6ZTogYXV0byAxcmVtO1xuXG4gICAgcGFkZGluZy1sZWZ0OiAycmVtO1xuICAgIG1hcmdpbi1ib3R0b206IDAuNnJlbTtcbiAgICB3aWR0aDogYXV0bztcbn1cblxuIC5ib3ggLmljb24tc2xhc2gge1xuICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybCgnLi4vLi4vLi4vaWNvbnMvc2xhc2guc3ZnJyk7XG4gICAgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDtcbiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwLjZyZW0gY2VudGVyO1xuICAgIGJhY2tncm91bmQtc2l6ZTogYXV0byAxcmVtO1xuXG4gICAgcGFkZGluZy1sZWZ0OiAycmVtO1xuXG4gICAgXG4gICAgd2lkdGg6IGF1dG87XG59XG5cbjwvc3R5bGU+IiwiPHRlbXBsYXRlPlxuICA8ZGl2IGNsYXNzPVwiZmllbGQtaXRlbVwiPlxuXG4gICAgPGg0PjxkaXYgY2xhc3M9XCJjb3JuZXJcIj48L2Rpdj57e2ZpZWxkLm5hbWV9fTwvaDQ+XG4gICAgPHVsPlxuICAgICAgPGxpPlxuICAgICAgICA8bGFiZWw+TGFiZWwgKjwvbGFiZWw+XG4gICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIHYtYmluZDpuYW1lPVwiZmllbGQudmFyaWFibGVcIiB2LW1vZGVsPVwiZmllbGQuY29udGVudC5sYWJlbFwiICBwbGFjZWhvbGRlcj1cIlwiIC8+XG4gICAgICA8L2xpPlxuXG4gICAgICA8bGk+XG4gICAgICAgIDxsYWJlbD5UYXNrICo8L2xhYmVsPlxuICAgICAgICA8c2VsZWN0IHYtYmluZDpuYW1lPVwiZmllbGQudmFyaWFibGVcIiB2LW1vZGVsPVwiZmllbGQuY29udGVudC50YXNrXCI+XG4gICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cImNoZWNrRGVmYXVsdFwiPkRlZmF1bHQ8L29wdGlvbj5cbiAgICAgICAgPC9zZWxlY3Q+XG4gICAgICA8L2xpPlxuICAgICAgXG5cbiAgICAgIDxsaT5cbiAgICAgICAgPGxhYmVsPlJvb3QgKjwvbGFiZWw+XG4gICAgICAgIDxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgdi1iaW5kOm5hbWU9XCJmaWVsZC52YXJpYWJsZVwiIHYtbW9kZWw9XCJmaWVsZC5jb250ZW50LnJvb3RcIiAgcGxhY2Vob2xkZXI9XCJcIiAvPlxuICAgICAgICA8Y2F0cy1wYWdlcy1maWVsZHMtc2VsZWN0IHYtYmluZDpjYXRzcGFnZXM9XCJjYXRzcGFnZXNcIiB2LWJpbmQ6c2VsZWN0ZWQ9XCJyb290X29ialwiPjwvY2F0cy1wYWdlcy1maWVsZHMtc2VsZWN0PlxuICAgICAgPC9saT5cblxuICAgICAgXG5cblxuICAgICAgPGxpPlxuICAgICAgICA8dWwgY2xhc3M9XCJ1bC1ob3JpelwiPlxuICAgICAgICAgIDxsaSBjbGFzcz1cImxpLXZlcnRcIiA+XG4gICAgICAgICAgICA8bGFiZWw+T3BlcmF0b3IgKjwvbGFiZWw+XG4gICAgICAgICAgICA8c2VsZWN0XG4gICAgICAgICAgICAgIHYtYmluZDpuYW1lPVwiZmllbGQudmFyaWFibGVcIlxuICAgICAgICAgICAgICB2LW1vZGVsPVwiZmllbGQuY29udGVudC5vcHRpb25cIiA+XG4gICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCI9XCI+PSAoZ2xlaWNoKTwvb3B0aW9uPlxuICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiIT1cIj4hPSAodW5nbGVpY2gpPC9vcHRpb24+XG4gICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCI8XCI+IDwgKGtsZWluZXIpPC9vcHRpb24+XG4gICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCI8PVwiPjw9IChrbGVpbmVyLWdsZWljaCk8L29wdGlvbj5cbiAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIj5cIj4gPiAoZ3LDtsOfZXIpPC9vcHRpb24+XG4gICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCI+PVwiPj49IChncsO2w59lci1nbGVpY2gpPC9vcHRpb24+XG4gICAgICAgICAgICA8L3NlbGVjdD5cbiAgICAgICAgICA8L2xpPlxuICAgICAgICAgIDxsaSBjbGFzcz1cImxpLXZlcnRcIiA+XG4gICAgICAgICAgICA8bGFiZWw+V2VydDwvbGFiZWw+XG4gICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiB2LWJpbmQ6bmFtZT1cImZpZWxkLnZhcmlhYmxlXCIgdi1tb2RlbD1cImZpZWxkLmNvbnRlbnQudmFsdWVcIiAgcGxhY2Vob2xkZXI9XCJcIiAvPlxuICAgICAgICAgIDwvbGk+XG4gICAgICAgIDwvdWw+XG4gICAgICA8L2xpPlxuXG4gICAgICBcblxuXG4gICAgICA8bGk+XG5cbiAgICAgIDx1bCBjbGFzcz1cInVsLWhvcml6XCI+XG5cbiAgICAgICAgICA8bGkgY2xhc3M9XCJsaS12ZXJ0IGNvbG9yLXRydWVcIiA+XG5cbiAgICAgICAgICAgIDxkaXY+XG5cbiAgICAgICAgICAgICAgICA8aDM+V2FocjwvaDM+XG5cbiAgICAgICAgICAgICAgICA8bGFiZWw+VGV4dDwvbGFiZWw+XG4gICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgdi1iaW5kOm5hbWU9XCJmaWVsZC52YXJpYWJsZVwiIHYtbW9kZWw9XCJmaWVsZC5jb250ZW50LnJlc3VsdF90cnVlXCIgIHBsYWNlaG9sZGVyPVwiXCIgLz5cblxuICAgICAgICAgICAgICAgIDxwPnVuZC9vZGVyPC9wPlxuXG4gICAgICAgICAgICAgICAgPGxhYmVsPldlaXRlcmxlaXRlbjwvbGFiZWw+XG4gICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJoaWRkZW5cIiB2LWJpbmQ6bmFtZT1cImZpZWxkLnZhcmlhYmxlXCIgdi1tb2RlbD1cImZpZWxkLmNvbnRlbnQucmVkaXJlY3RfdHJ1ZVwiICBwbGFjZWhvbGRlcj1cIlwiIC8+XG4gICAgICAgICAgICAgICAgPGNhdHMtcGFnZXMtc2VsZWN0XG4gICAgICAgICAgICAgICAgICBjbGFzcz1cInJlZGljdF90cnVlXCJcbiAgICAgICAgICAgICAgICAgIHYtb246ZmluaXNoZWQ9XCJzZXRSZWRpcmVjdFRydWVcIlxuICAgICAgICAgICAgICAgICAgdi1iaW5kOmNhdHNwYWdlcz1cImNhdHNwYWdlc1wiXG4gICAgICAgICAgICAgICAgICB2LWJpbmQ6c2VsZWN0ZWQ9XCJyZWRpY3RfdHJ1ZV9vYmpcIj48L2NhdHMtcGFnZXMtc2VsZWN0PlxuXG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDwvbGk+XG5cbiAgICAgICAgICA8bGkgY2xhc3M9XCJsaS12ZXJ0IGNvbG9yLWZhbHNlXCI+XG4gICAgICAgICAgICA8ZGl2PlxuXG4gICAgICAgICAgICAgIDxoMz5GYWxzY2g8L2gzPlxuXG4gICAgICAgICAgICAgIDxsYWJlbD5UZXh0PC9sYWJlbD5cbiAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgdi1iaW5kOm5hbWU9XCJmaWVsZC52YXJpYWJsZVwiIHYtbW9kZWw9XCJmaWVsZC5jb250ZW50LnJlc3VsdF9mYWxzZVwiICBwbGFjZWhvbGRlcj1cIlwiIC8+XG5cbiAgICAgICAgICAgICAgPHA+dW5kL29kZXI8L3A+XG5cbiAgICAgICAgICAgICAgPGxhYmVsPldlaXRlcmxlaXRlbjwvbGFiZWw+XG4gICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgdi1iaW5kOm5hbWU9XCJmaWVsZC52YXJpYWJsZVwiIHYtbW9kZWw9XCJmaWVsZC5jb250ZW50LnJlZGlyZWN0X2ZhbHNlXCIgIHBsYWNlaG9sZGVyPVwiXCIgLz5cbiAgICAgICAgICAgICAgPGNhdHMtcGFnZXMtc2VsZWN0XG4gICAgICAgICAgICAgICAgdi1vbjpmaW5pc2hlZD1cInNldFJlZGlyZWN0RmFsc2VcIlxuICAgICAgICAgICAgICAgIHYtYmluZDpjYXRzcGFnZXM9XCJjYXRzcGFnZXNcIlxuICAgICAgICAgICAgICAgIHYtYmluZDpzZWxlY3RlZD1cInJlZGljdF9mYWxzZV9vYmpcIj48L2NhdHMtcGFnZXMtc2VsZWN0PlxuICAgICAgICAgICAgPC9kaXY+ICAgICAgICAgIFxuICAgICAgICAgIDwvbGk+XG5cbiAgICAgICAgPC91bD5cbiAgICAgIDwvbGk+XG5cbiAgICA8L3VsPlxuXG5cblxuXG4gIDwvZGl2PlxuICBcblxuPC90ZW1wbGF0ZT5cbiBcbjxzY3JpcHQ+XG5cbiAgaW1wb3J0IENhdHNQYWdlc0ZpZWxkc1NlbGVjdCBmcm9tICcuLi9mb3Jtcy9DYXRzUGFnZXNGaWVsZHNTZWxlY3QnXG4gIGltcG9ydCBDYXRzUGFnZXNTZWxlY3QgZnJvbSAnLi4vZm9ybXMvQ2F0c1BhZ2VzU2VsZWN0J1xuICBcbiAgIGV4cG9ydCBkZWZhdWx0IHtcbiAgICAgIG5hbWU6IFwiY2hlY2tmaWVsZFwiLFxuICAgICAgcHJvcHM6IFtcbiAgICAgICAgJ2ZpZWxkJyxcbiAgICAgICAgJ2NhdHNwYWdlcydcbiAgICAgIF0sXG4gICAgICBjb21wb25lbnRzOiB7XG4gICAgICAgIENhdHNQYWdlc0ZpZWxkc1NlbGVjdCxcbiAgICAgICAgQ2F0c1BhZ2VzU2VsZWN0XG4gICAgICB9LFxuICAgICAgZGF0YTogZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHJvb3Rfb2JqOiBmYWxzZSxcbiAgICAgICAgICByZWRpY3RfdHJ1ZV9vYmo6IGZhbHNlLFxuICAgICAgICAgIHJlZGljdF9mYWxzZV9vYmo6IGZhbHNlXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBjcmVhdGVkOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIC8vY29uc29sZS5sb2coJy1jcmVhdGVkJywgdGhpcy5maWVsZCk7XG4gICAgICAgIFxuICAgICAgICBpZiAodGhpcy5maWVsZC5jb250ZW50LnJvb3QpIHtcbiAgICAgICAgICB0aGlzLnJvb3Rfb2JqID0gSlNPTi5wYXJzZSh0aGlzLmZpZWxkLmNvbnRlbnQucm9vdCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5maWVsZC5jb250ZW50LnJlZGlyZWN0X3RydWUpIHtcbiAgICAgICAgICB0aGlzLnJlZGljdF90cnVlX29iaiA9IEpTT04ucGFyc2UodGhpcy5maWVsZC5jb250ZW50LnJlZGlyZWN0X3RydWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuZmllbGQuY29udGVudC5yZWRpcmVjdF9mYWxzZSkge1xuICAgICAgICAgIHRoaXMucmVkaWN0X2ZhbHNlX29iaiA9IEpTT04ucGFyc2UodGhpcy5maWVsZC5jb250ZW50LnJlZGlyZWN0X2ZhbHNlKTtcbiAgICAgICAgfVxuXG5cbiAgICAgICAgRXZlbnRCdXMuJG9uKCdjaGVja2ZpZWxkcy1yb290Jywgb2JqID0+IHtcbiAgICAgICAgICAvL2NvbnNvbGUubG9nKGBldmVudGJ1czogZm9ybS1lZGl0IGAsb2JqKVxuXG4gICAgICAgICAgdGhpcy5yb290X29iaiA9IHtcbiAgICAgICAgICAgICdwYWdlX2lkJzogb2JqLnBhZ2VfaWQsIFxuICAgICAgICAgICAgJ3BhZ2VfdXJsJzogb2JqLnBhZ2VfdXJsLCBcbiAgICAgICAgICAgICdmaWVsZF9pZCc6IG9iai5maWVsZF9pZCxcbiAgICAgICAgICAgICdmaWVsZF9uYW1lJzogb2JqLmZpZWxkX25hbWVcbiAgICAgICAgICB9O1xuICAgICAgICAgIHRoaXMuZmllbGQuY29udGVudC5yb290ID0gSlNPTi5zdHJpbmdpZnkodGhpcy5yb290X29iaik7XG5cbiAgICAgICAgfSk7XG5cblxuICAgICAgfSxcbiAgICAgIHdhdGNoOiB7XG4gICAgICAgIC8vIHdoZW5ldmVyIHF1ZXN0aW9uIGNoYW5nZXMsIHRoaXMgZnVuY3Rpb24gd2lsbCBydW5cbiAgICAgIH0sXG4gICAgICBtZXRob2RzOiB7XG5cbiAgICAgICAgc2V0UmVkaXJlY3RUcnVlOiAgZnVuY3Rpb24gKG9iaikge1xuICAgICAgICAgIC8vY29uc29sZS5sb2coJy1zZXRSZWRpcmVjdFRydWUnLCBvYmopO1xuICAgICAgICAgIHRoaXMucmVkaWN0X3RydWVfb2JqID0gb2JqO1xuICAgICAgICAgIHRoaXMuZmllbGQuY29udGVudC5yZWRpcmVjdF90cnVlID0gSlNPTi5zdHJpbmdpZnkob2JqKTtcbiAgICAgICAgfSxcblxuICAgICAgICBzZXRSZWRpcmVjdEZhbHNlOiAgZnVuY3Rpb24gKG9iaikge1xuICAgICAgICAgIC8vY29uc29sZS5sb2coJy1zZXRSZWRpcmVjdFRydWUnLCBvYmopO1xuICAgICAgICAgIHRoaXMucmVkaWN0X2ZhbHNlX29iaiA9IG9iajtcbiAgICAgICAgICB0aGlzLmZpZWxkLmNvbnRlbnQucmVkaXJlY3RfZmFsc2UgPSBKU09OLnN0cmluZ2lmeShvYmopO1xuICAgICAgICB9XG5cbiAgICAgIH1cbiAgIH1cbjwvc2NyaXB0PlxuIFxuPHN0eWxlIHNjb3BlZD5cbiAgLmZpZWxkLWl0ZW0ge1xuICAgXG4gIH1cbiAgLmZpZWxkLWl0ZW0gbGFiZWwge1xuICAgIGZsZXg6IDE7XG4gIH1cbiAgLmZpZWxkLWl0ZW0gaW5wdXQsXG4gIC5maWVsZC1pdGVtIHNlbGVjdCB7XG4gICAgZmxleDogMTtcbiAgfVxuXG4gIC5pbWFnZV9wcmV2aWV3IHtcbiAgICB3aWR0aDogMTJ2aDtcbiAgICBtYXJnaW4tcmlnaHQ6IDFyZW07XG4gIH1cblxuXG4gIC5saS12ZXJ0IHtcbiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgIHdpZHRoOiAxNnZ3O1xuICB9XG5cbiAgLnVsLWhvcml6IHtcbiAgICBmbGV4LWRpcmVjdGlvbjogcm93O1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgZmxleDogMTtcbiAgICBib3JkZXI6IDA7XG4gICAgcGFkZGluZzogMDtcbiAgfVxuICAudWwtaG9yaXogbGkge1xuICAgIHBhZGRpbmctcmlnaHQ6IDFyZW07XG4gIH1cbiBcblxuICAuY29sb3ItdHJ1ZSBoMyxcbiAgLmNvbG9yLXRydWUgbGFiZWwge1xuICAgIGNvbG9yOiByZ2IoMCwgMTQ4LCAxMik7XG4gIH1cbi5jb2xvci1mYWxzZSBoMyxcbi5jb2xvci1mYWxzZSBsYWJlbCB7XG4gICAgY29sb3I6IHJnYigxMjYsIDAsIDMxKTtcbiAgfVxuXG48L3N0eWxlPiIsIjx0ZW1wbGF0ZT5cbiAgPGRpdiBjbGFzcz1cImZpZWxkLWl0ZW1cIj5cbiAgXG4gICAgPGxhYmVsPnt7ZmllbGQubmFtZX19PC9sYWJlbD5cbiAgICA8aW5wdXQgdHlwZT1cImhpZGRlblwiIHYtYmluZDpuYW1lPVwiZmllbGQudmFyaWFibGVcIiB2LW1vZGVsPVwiZmllbGQuY29udGVudFwiIC8+XG4gXG4gICAgPGRpdiB2LXNob3c9XCJwcmV2aWV3XCI+XG4gICAgICA8YXVkaW8gY29udHJvbHM+XG4gICAgICAgICAgPHNvdXJjZSA6c3JjPVwicHJldmlld1wiIHR5cGU9XCJhdWRpby9tcGVnXCI+XG4gICAgICAgICAgWW91ciBicm93c2VyIGRvZXMgbm90IHN1cHBvcnQgdGhlIGF1ZGlvIGVsZW1lbnQuXG4gICAgICA8L2F1ZGlvPlxuICAgIDwvZGl2PlxuXG4gICAgPGJ1dHRvblxuICAgICAgY2xhc3M9XCJidG5cIiBcbiAgICAgIHYtb246Y2xpY2s9XCJvcGVuR2FsbGVyeSgkZXZlbnQsIGZpZWxkKVwiXG4gICAgICB2LXRvb2x0aXA9XCJ7XG4gICAgICAgIGNvbnRlbnQ6J0bDvGdlbiBzaWUgQXVkaW9maWxlcyBoaW56dScsXG4gICAgICAgIGRlbGF5OiB7IHNob3c6IDgwMCwgaGlkZTogMTAwMCB9LFxuICAgICAgICBwbGFjZW1lbnQ6ICdyaWdodCdcbiAgICAgIH1cIlxuICAgID5QYWdlTWVkaWE8L2J1dHRvbj5cblxuICA8L2Rpdj5cbiAgXG5cbjwvdGVtcGxhdGU+XG4gXG48c2NyaXB0PlxuICAgZXhwb3J0IGRlZmF1bHQge1xuICAgICAgbmFtZTogXCJtZWRpYWZpZWxkXCIsXG4gICAgICBwcm9wczogW1xuICAgICAgICAnZmllbGQnLFxuICAgICAgICAncGFnZSdcbiAgICAgIF0sXG4gICAgICBjb21wb25lbnRzOiB7XG4gICAgICAgIFxuICAgICAgfSxcbiAgICAgIGRhdGE6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAvL3ZhbHVlOiAnJyxcbiAgICAgICAgICBwcmV2aWV3OiBmYWxzZVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgY3JlYXRlZDogZnVuY3Rpb24gKCkge1xuICAgICAgICAvL2NvbnNvbGUubG9nKCctY3JlYXRlZCcsIHRoaXMucGFnZS5pbWFnZXMpO1xuICAgICAgICBcbiAgICAgICAgXG4gICAgICAgIHRoaXMuc2V0RGVmYXVsdCgpO1xuXG4gICAgICB9LFxuICAgICAgd2F0Y2g6IHtcbiAgICAgICAgLy8gd2hlbmV2ZXIgcXVlc3Rpb24gY2hhbmdlcywgdGhpcyBmdW5jdGlvbiB3aWxsIHJ1blxuXG4gICAgICAgICdmaWVsZC5jb250ZW50JzogZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHRoaXMuc2V0RGVmYXVsdCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgXG4gICAgICB9LFxuICAgICAgbWV0aG9kczoge1xuXG4gICAgICAgIHNldERlZmF1bHQ6IGZ1bmN0aW9uICgpIHtcblxuICAgICAgICAgIHZhciB0aGF0ID0gdGhpcztcbiAgICAgICAgICBpZiAodGhpcy5maWVsZC5jb250ZW50ICYmIHRoaXMucGFnZS5maWxlcykge1xuICAgICAgICAgICAgdGhpcy5wYWdlLmZpbGVzLmZvckVhY2goIGZ1bmN0aW9uIChvLGkpIHtcbiAgICAgICAgICAgICAgaWYgKG8uaWQgPT0gdGhhdC5maWVsZC5jb250ZW50KSB7XG4gICAgICAgICAgICAgICAgLy9jb25zb2xlLmxvZygnMTonLG8pO1xuICAgICAgICAgICAgICAgIGlmIChvLmZvbGRlciAmJiBvLmZpbGVuYW1lKSB7XG4gICAgICAgICAgICAgICAgICB0aGF0LnByZXZpZXcgPSBvLmZvbGRlcisnLycrby5maWxlbmFtZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAodGhpcy5maWVsZC5jb250ZW50ICYmIHRoaXMucGFnZS5maWxlcykge1xuICAgICAgICAgICAgdGhpcy5wYWdlLm1lZGlhLmZvckVhY2goIGZ1bmN0aW9uIChvLGkpIHtcbiAgICAgICAgICAgICAgaWYgKG8uaWQgPT0gdGhhdC5maWVsZC5jb250ZW50KSB7XG4gICAgICAgICAgICAgICAgaWYgKG8uZm9sZGVyICYmIG8uZmlsZW5hbWUpIHtcbiAgICAgICAgICAgICAgICAgIC8vY29uc29sZS5sb2coJzI6JyxvKTtcbiAgICAgICAgICAgICAgICAgIHRoYXQucHJldmlldyA9IG8uZm9sZGVyKycvJytvLmZpbGVuYW1lO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGxiYWNrOiBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICBcbiAgICAgICAgICAvL2NvbnNvbGUubG9nKCczOicsdmFsdWUpO1xuXG4gICAgICAgICAgaWYgKHZhbHVlICYmIHZhbHVlLmlkKSB7XG4gICAgICAgICAgICB0aGlzLmZpZWxkLmNvbnRlbnQgPSB2YWx1ZS5pZDtcbiAgICAgICAgICAgIHRoaXMucHJldmlldyA9IHZhbHVlLmZvbGRlcisnLycrdmFsdWUuZmlsZW5hbWVcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5maWVsZC5jb250ZW50ID0gJyc7XG4gICAgICAgICAgICB0aGlzLnByZXZpZXcgPSBmYWxzZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgfSxcbiAgICAgICAgb3BlbkdhbGxlcnkoZXZlbnQsIGZpZWxkKSB7XG5cbiAgICBcblxuICAgICAgICAgIEV2ZW50QnVzLiRlbWl0KCdtZWRpYS1vcGVuJywgeydjYWxsYmFjayc6IHRoaXMuY2FsbGJhY2t9ICk7XG5cbiAgICAgICAgfSxcblxuICAgICAgfVxuICAgfVxuPC9zY3JpcHQ+XG4gXG48c3R5bGUgc2NvcGVkPlxuICAuZmllbGQtaXRlbSB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgfVxuICAuZmllbGQtaXRlbSBsYWJlbCB7XG4gICAgZmxleDogMTtcbiAgfVxuICAuZmllbGQtaXRlbSBpbnB1dCB7XG4gICAgZmxleDogMTtcbiAgfVxuXG48L3N0eWxlPiIsIjx0ZW1wbGF0ZT5cbiAgPGRpdiBjbGFzcz1cImZpZWxkLWl0ZW0gZmllbGQtaXRlbS1sb29wXCI+XG4gICAgXG4gICAgPGxhYmVsPnt7ZmllbGQubmFtZX19PC9sYWJlbD5cblxuICAgIDxkcmFnZ2FibGUgdi1tb2RlbD1cImZpZWxkLmNvbnRlbnQuZGF0YVwiXG4gICAgICBoYW5kbGU9XCIuaGFuZGxlXCJcbiAgICAgIGdyb3VwPVwiXCIgQHN0YXJ0PVwiZHJhZz10cnVlXCIgQGVuZD1cImRyYWc9ZmFsc2VcIj5cbiBcbiAgICAgICAgXG4gICAgICA8ZGl2IFxuICAgICAgICBjbGFzcz1cImJveFwiXG4gICAgICAgIHYtZm9yPVwiKHJvdyxudW0pIGluIGZpZWxkLmNvbnRlbnQuZGF0YVwiIDprZXk9XCJyb3cuaWRcIiA+XG5cbiAgICAgIFxuICAgICAgICA8dWw+XG4gICAgICAgICAgPGxpIHYtZm9yPVwiKG8saSkgaW4gZmllbGQubG9vcFwiID5cbiAgICAgICAgICBcblxuICAgICAgICAgICAgPGRpdiB2LWlmPVwiby50eXBlID09ICd0ZXh0J1wiPlxuICAgICAgICAgICAgICA8dGV4dC1maWVsZCB2LWJpbmQ6ZmllbGQ9XCJyb3dbaV1cIj48L3RleHQtZmllbGQ+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPGRpdiB2LWlmPVwiby50eXBlID09ICd0ZXh0YXJlYSdcIj5cbiAgICAgICAgICAgICAgPHRleHRhcmVhLWZpZWxkIHYtYmluZDpmaWVsZD1cInJvd1tpXVwiPjwvdGV4dGFyZWEtZmllbGQ+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPGRpdiB2LWlmPVwiby50eXBlID09ICdoZWFkbGluZSdcIj5cbiAgICAgICAgICAgICAgPHRleHQtZmllbGQgdi1iaW5kOmZpZWxkPVwicm93W2ldXCI+PC90ZXh0LWZpZWxkPlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDxkaXYgdi1pZj1cIm8udHlwZSA9PSAnc3ViaGVhZGxpbmUnXCI+XG4gICAgICAgICAgICAgIDx0ZXh0LWZpZWxkIHYtYmluZDpmaWVsZD1cInJvd1tpXVwiPjwvdGV4dC1maWVsZD5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8ZGl2IHYtaWY9XCJvLnR5cGUgPT0gJ2xpbmsnXCI+XG4gICAgICAgICAgICAgIDxsaW5rLWZpZWxkIHYtYmluZDpmaWVsZD1cInJvd1tpXVwiIHYtYmluZDpjYXRzcGFnZXM9XCJjYXRzcGFnZXNcIj48L2xpbmstZmllbGQ+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPGRpdiB2LWlmPVwiby50eXBlID09ICdzZWxlY3QnXCI+XG4gICAgICAgICAgICAgIDxzZWxlY3QtZmllbGQgdi1iaW5kOmZpZWxkPVwicm93W2ldXCI+PC9zZWxlY3QtZmllbGQ+XG4gICAgICAgICAgICA8L2Rpdj5cblxuXG5cbiAgICAgICAgICAgIDxkaXYgdi1pZj1cIm8udHlwZSA9PSAnaW5wdXQnXCI+XG4gICAgICAgICAgICAgIDxpbnB1dC1maWVsZCB2LWJpbmQ6ZmllbGQ9XCJyb3dbaV1cIj48L2lucHV0LWZpZWxkPlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDxkaXYgdi1pZj1cIm8udHlwZSA9PSAnaW1hZ2UnXCI+XG4gICAgICAgICAgICAgIDxpbWFnZS1maWVsZCB2LWJpbmQ6ZmllbGQ9XCJyb3dbaV1cIiB2LWJpbmQ6cGFnZT1cInBhZ2VcIj48L2ltYWdlLWZpZWxkPlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDxkaXYgdi1pZj1cIm8udHlwZSA9PSAnY2hlY2snXCI+XG4gICAgICAgICAgICAgIDxjaGVjay1maWVsZCB2LWJpbmQ6ZmllbGQ9XCJyb3dbaV1cIiB2LWJpbmQ6Y2F0c3BhZ2VzPVwiY2F0c3BhZ2VzXCI+PC9jaGVjay1maWVsZD5cbiAgICAgICAgICAgIDwvZGl2PlxuXG5cblxuXG4gICAgICAgICAgICA8ZGl2IHYtaWY9XCJvLnR5cGUgPT0gJ2VtYmVkaHRtbCdcIj5cbiAgICAgICAgICAgICAgPGh0bWwtZmllbGQgdi1iaW5kOmZpZWxkPVwicm93W2ldXCI+PC9odG1sLWZpZWxkPlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDxkaXYgdi1pZj1cIm8udHlwZSA9PSAnZW1iZWRqcydcIj5cbiAgICAgICAgICAgICAgPGphdmFzY3JpcHQtZmllbGQgdi1iaW5kOmZpZWxkPVwicm93W2ldXCI+PC9qYXZhc2NyaXB0LWZpZWxkPlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDxkaXYgdi1pZj1cIm8udHlwZSA9PSAnZW1iZWRjc3MnXCI+XG4gICAgICAgICAgICAgIDxjc3MtZmllbGQgdi1iaW5kOmZpZWxkPVwicm93W2ldXCI+PC9jc3MtZmllbGQ+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgXG5cbiAgICAgICAgICAgIDxkaXYgdi1pZj1cIm8udHlwZSA9PSAnYXVkaW8nXCI+XG4gICAgICAgICAgICAgIDxtZWRpYS1maWVsZCB2LWJpbmQ6ZmllbGQ9XCJyb3dbaV1cIiAgdi1iaW5kOnBhZ2U9XCJwYWdlXCI+PC9tZWRpYS1maWVsZD5cbiAgICAgICAgICAgIDwvZGl2PlxuXG5cbiAgICAgICAgICAgIFxuXG4gICAgICAgICAgICBcbiAgICAgICAgICA8L2xpPlxuICAgICAgICA8L3VsPlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJlbmRlXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNvcm5lclwiPjwvZGl2PlxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIGNsYXNzPVwic2VsZWN0IGljb24tZGVsZXRlXCJcbiAgICAgICAgICAgIHYtb246Y2xpY2s9XCJoYW5kbGVyRGVsZXRlKHJvdywgbnVtKVwiXG4gICAgICAgICAgPjwvYnV0dG9uPlxuICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJzZWxlY3QgaGFuZGxlIGljb24tc29ydFwiPlZlcnNjaGllYmVuPC9idXR0b24+XG4gICAgICAgICAgXG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDwvZHJhZ2dhYmxlPlxuXG4gICAgXG5cbiAgICA8YnV0dG9uXG4gICAgICBjbGFzcz1cInNlbGVjdCBpY29uLWFkZFwiXG4gICAgICB2LW9uOmNsaWNrPVwiaGFuZGxlckFkZChmaWVsZClcIlxuICAgID48L2J1dHRvbj5cbiAgICBcbiAgPC9kaXY+XG4gIFxuXG48L3RlbXBsYXRlPlxuIFxuPHNjcmlwdD5cblxuICBpbXBvcnQgVGV4dEZpZWxkIGZyb20gJy4vVGV4dEZpZWxkJ1xuICBpbXBvcnQgVGV4dGFyZWFGaWVsZCBmcm9tICcuL1RleHRhcmVhRmllbGQnXG4gIGltcG9ydCBIdG1sRmllbGQgZnJvbSAnLi9IdG1sRmllbGQnXG4gIGltcG9ydCBKYXZhc2NyaXB0RmllbGQgZnJvbSAnLi9KYXZhc2NyaXB0RmllbGQnXG4gIGltcG9ydCBDc3NGaWVsZCBmcm9tICcuL0Nzc0ZpZWxkJ1xuICBpbXBvcnQgSW5wdXRGaWVsZCBmcm9tICcuL0lucHV0RmllbGQnXG4gIGltcG9ydCBMaW5rRmllbGQgZnJvbSAnLi9MaW5rRmllbGQnXG4gIGltcG9ydCBTZWxlY3RGaWVsZCBmcm9tICcuL1NlbGVjdEZpZWxkJ1xuICBpbXBvcnQgTG9vcEZpZWxkIGZyb20gJy4vTG9vcEZpZWxkJ1xuICBpbXBvcnQgSW1hZ2VGaWVsZCBmcm9tICcuL0ltYWdlRmllbGQnXG4gIGltcG9ydCBDaGVja0ZpZWxkIGZyb20gJy4vQ2hlY2tGaWVsZCdcbiAgaW1wb3J0IE1lZGlhRmllbGQgZnJvbSAnLi9NZWRpYUZpZWxkJ1xuXG4gIGltcG9ydCBkcmFnZ2FibGUgZnJvbSAndnVlZHJhZ2dhYmxlJ1xuXG4gIGV4cG9ydCBkZWZhdWx0IHtcbiAgICBuYW1lOiBcImxvb3AtZmllbGRcIixcbiAgICBwcm9wczogW1xuICAgICAgJ2ZpZWxkJyxcbiAgICAgICdjYXRzcGFnZXMnXG4gICAgXSxcbiAgICBjb21wb25lbnRzOiB7XG4gICAgICAgIFRleHRGaWVsZCxcbiAgICAgICAgVGV4dGFyZWFGaWVsZCxcbiAgICAgICAgSHRtbEZpZWxkLFxuICAgICAgICBKYXZhc2NyaXB0RmllbGQsXG4gICAgICAgIENzc0ZpZWxkLFxuICAgICAgICBJbnB1dEZpZWxkLFxuICAgICAgICBMaW5rRmllbGQsXG4gICAgICAgIFNlbGVjdEZpZWxkLFxuICAgICAgICBMb29wRmllbGQsXG4gICAgICAgIEltYWdlRmllbGQsXG4gICAgICAgIENoZWNrRmllbGQsXG4gICAgICAgIE1lZGlhRmllbGQsXG4gICAgICAgIFxuICAgICAgICBkcmFnZ2FibGVcbiAgICB9LFxuICAgIGRhdGE6IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHJvd3M6IDJcbiAgICAgIH1cbiAgICB9LFxuICAgIGNyZWF0ZWQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vY29uc29sZS5sb2coJy1jcmVhdGVkJyk7XG4gICAgICAvL3RoaXMubWF0Y2hDb250ZW50KCk7XG4gICAgICBcbiAgICB9LFxuICAgIHdhdGNoOiB7XG4gICAgICAvLyB3aGVuZXZlciBxdWVzdGlvbiBjaGFuZ2VzLCB0aGlzIGZ1bmN0aW9uIHdpbGwgcnVuXG4gXG4gICAgfSxcbiAgICBtZXRob2RzOiB7XG4gICAgICAvKlxuICAgICAgbWF0Y2hDb250ZW50OiBmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgdmFyIGxlbmd0aCA9IHRoaXMuZmllbGQuY29udGVudC5kYXRhLmxlbmd0aDtcbiAgICAgICAgdmFyIGFyciA9IFtdO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgdmFyIHByZSA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy5maWVsZC5sb29wKSk7XG4gICAgICAgICAgLy9jb25zb2xlLmxvZyhpLCB0aGlzLmZpZWxkLmNvbnRlbnQuZGF0YVtpXSk7XG4gICAgICAgICAgZm9yKHZhciBvIGluIHByZSkge1xuICAgICAgICAgICAgY29uc29sZS5sb2cocHJlW29dKTtcbiAgICAgICAgICAgIGZvciAodmFyIHEgaW4gdGhpcy5maWVsZC5jb250ZW50LmRhdGFbaV0gKSB7XG4gICAgICAgICAgICAgIGlmICggcHJlW29dWyd2YXJpYWJsZSddID09IHEgKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coJy4uLi4uZG9lISEhJyk7XG4gICAgICAgICAgICAgICAgcHJlW29dWydjb250ZW50J10gPSB0aGlzLmZpZWxkLmNvbnRlbnQuZGF0YVtpXVtxXTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICAvL3ByZS5jb250ZW50ID0gdGhpcy5maWVsZC5jb250ZW50LmRhdGFbaV0uY29udGVudDtcbiAgICAgICAgICBhcnIucHVzaCggcHJlICk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmZpZWxkLmNvbnRlbnQuZGF0YSA9IGFycjtcbiAgICAgICAgY29uc29sZS5sb2coYXJyKTtcblxuXG4gICAgICB9LFxuICAgICAgKi9cbiAgICAgIGhhbmRsZXJEZWxldGU6IGZ1bmN0aW9uIChyb3csIG51bSkge1xuICAgICAgICAvL2NvbnNvbGUubG9nKCBmaWVsZC5jb250ZW50LmRhdGEgKTtcbiAgICAgICAgLy9jb25zb2xlLmxvZyggcm93LCBudW0pO1xuXG4gICAgICAgIC8vZmllbGQuY29udGVudC5kYXRhLnB1c2goIEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoZmllbGQubG9vcCkpICk7XG4gICAgICAgIFxuICAgICAgIFxuICAgICAgICBcbiAgICAgICAgdmFyIEVpbmdhYmU7XG4gICAgICAgIEVpbmdhYmUgPSBjb25maXJtIChcIldpbGxzdCBkdSBkaWVzZSBFbGVtZW50IHdpcmtsaWNoIGzDtnNjaGVuP1wiKTtcbiAgICAgICAgICBpZiAoRWluZ2FiZSA9PSB0cnVlKSB7XG4gICAgICAgICAgICAvL3NlbGYubG9jYXRpb24uaHJlZj1cImNvbmZpcm0yLmh0bWxcIjtcbiAgICAgICAgICAgIHRoaXMuZmllbGQuY29udGVudC5kYXRhLnNwbGljZShudW0sIDEpO1xuXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vc2VsZi5sb2NhdGlvbi5ocmVmPVwiY29uZmlybVNjaGFkZS5odG1sXCI7XG4gICAgICAgICAgfVxuICBcblxuICAgICAgICAvL2NvbnNvbGUubG9nKCBmaWVsZC5jb250ZW50ICk7XG5cbiAgICAgIH0sXG5cbiAgICAgIGhhbmRsZXJBZGQ6IGZ1bmN0aW9uIChmaWVsZCkge1xuICAgICAgICAvL2NvbnNvbGUubG9nKCBmaWVsZC5jb250ZW50LmRhdGEgKTtcbiAgICAgICAgLy9jb25zb2xlLmxvZyggZmllbGQubG9vcCApO1xuXG4gICAgICAgIGZpZWxkLmNvbnRlbnQuZGF0YS5wdXNoKCBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGZpZWxkLmxvb3ApKSApO1xuICAgICAgICBcbiAgICAgICBcblxuICAgICAgICAvL2NvbnNvbGUubG9nKCBmaWVsZC5jb250ZW50ICk7XG5cbiAgICAgIH1cblxuXG4gICAgfVxuICB9XG48L3NjcmlwdD5cbiBcbjxzdHlsZSBzY29wZWQ+XG4gIFxuICAuaWNvbi1hZGQge1xuICAgIHdpZHRoOiAzdnc7XG4gICAgaGVpZ2h0OiAycmVtO1xuXG4gICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKCcuLi8uLi8uLi9pY29ucy9hZGQuc3ZnJyk7XG4gICAgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDtcbiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBjZW50ZXIgY2VudGVyO1xuICAgIGJhY2tncm91bmQtc2l6ZTogYXV0byAxcmVtO1xuXG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgIG1hcmdpbi1sZWZ0OjFyZW07XG5cbiAgfVxuXG4gIC5pY29uLWRlbGV0ZSB7XG4gICAgd2lkdGg6IDN2dztcbiAgICBoZWlnaHQ6IDJyZW07XG5cbiAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoJy4uLy4uLy4uL2ljb25zL2RlbGV0ZS5zdmcnKTtcbiAgICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0O1xuICAgIGJhY2tncm91bmQtcG9zaXRpb246IGNlbnRlciBjZW50ZXI7XG4gICAgYmFja2dyb3VuZC1zaXplOiBhdXRvIDFyZW07XG5cbiAgICBvcGFjaXR5OiAwLjM7XG5cbiAgICBtYXJnaW4tcmlnaHQ6IDAuMnJlbTtcbiAgfVxuXG4gICAuaWNvbi1zb3J0IHtcbiAgICAvKiB3aWR0aDogM3Z3OyAqL1xuICAgIGhlaWdodDogMnJlbTtcblxuICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybCgnLi4vLi4vLi4vaWNvbnMvc29ydC5zdmcnKTtcbiAgICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0O1xuICAgIGJhY2tncm91bmQtcG9zaXRpb246IDFyZW0gY2VudGVyO1xuICAgIGJhY2tncm91bmQtc2l6ZTogYXV0byAxcmVtO1xuXG4gICAgb3BhY2l0eTogMC4zO1xuXG4gICAgXG5cbiAgICBcbiAgfVxuXG4gIC5lbmRlIHtcbiAgICBkaXNwbGF5OmZsZXg7XG4gIH1cbiAgLmVuZGUgLmNvcm5lciB7XG4gICAgIGRpc3BsYXk6aW5saW5lLWJsb2NrO1xuICAgICB3aWR0aDogM3JlbTtcbiAgICAgYm9yZGVyOiAwO1xuICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI2NjYztcbiAgICAgYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjO1xuICAgICBcbiAgICAgcGFkZGluZzowO1xuICAgICBtYXJnaW46IDA7XG4gICAgIG1hcmdpbi1ib3R0b206MC45cmVtO1xuICAgICBtYXJnaW4tcmlnaHQ6MC4zcmVtO1xuICAgfVxuXG4gICAuYm94IHtcbiAgICAgbWFyZ2luLWJvdHRvbTogMC41cmVtO1xuICAgfVxuPC9zdHlsZT4iLCI8dGVtcGxhdGU+XG4gIDxkaXYgY2xhc3M9XCJmaWVsZC1pdGVtXCI+XG4gIFxuICAgIDxsYWJlbD57e2ZpZWxkLm5hbWV9fTwvbGFiZWw+XG4gICAgPGlucHV0IHR5cGU9XCJoaWRkZW5cIiB2LWJpbmQ6bmFtZT1cImZpZWxkLnZhcmlhYmxlXCIgdi1tb2RlbD1cImZpZWxkLmNvbnRlbnQuaWRcIiAgcGxhY2Vob2xkZXI9XCJcIiAvPlxuICAgIDxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgdi1iaW5kOm5hbWU9XCJmaWVsZC52YXJpYWJsZVwiIHYtbW9kZWw9XCJmaWVsZC5jb250ZW50LnNlbGVjdGVkTGlua1wiICBwbGFjZWhvbGRlcj1cIlwiIC8+XG5cbiAgICA8Y2F0cy1wYWdlcy1zZWxlY3RcbiAgICAgIHYtb246ZmluaXNoZWQ9XCJzZXRTZWxlY3RlZExpbmtcIlxuICAgICAgdi1iaW5kOmNhdHNwYWdlcz1cImNhdHNwYWdlc1wiXG4gICAgICB2LWJpbmQ6c2VsZWN0ZWQ9XCJzZWxlY3RlZExpbmtcIj48L2NhdHMtcGFnZXMtc2VsZWN0PlxuICBcbiAgPC9kaXY+XG4gIFxuXG48L3RlbXBsYXRlPlxuIFxuPHNjcmlwdD5cblxuICBpbXBvcnQgQ2F0c1BhZ2VzU2VsZWN0IGZyb20gJy4uL2Zvcm1zL0NhdHNQYWdlc1NlbGVjdCdcblxuICAgZXhwb3J0IGRlZmF1bHQge1xuICAgICAgbmFtZTogXCJmaW5pc2hmaWVsZFwiLFxuICAgICAgcHJvcHM6IFtcbiAgICAgICAgJ2ZpZWxkJyxcbiAgICAgICAgJ2NhdHNwYWdlcydcbiAgICAgIF0sXG4gICAgICBjb21wb25lbnRzOiB7XG4gICAgICAgIENhdHNQYWdlc1NlbGVjdFxuICAgICAgfSxcbiAgICAgIGRhdGE6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBzZWxlY3RlZExpbms6IGZhbHNlXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBtZXRob2RzOiB7XG5cbiAgICAgICAgc2V0U2VsZWN0ZWRMaW5rOiAgZnVuY3Rpb24gKG9iaikge1xuICAgICAgICAgIC8vY29uc29sZS5sb2coJy1zZXRSZWRpcmVjdFRydWUnLCBvYmopO1xuICAgICAgICAgIGlmIChvYmoucGFnZV9pZCkge1xuICAgICAgICAgICAgdGhpcy5maWVsZC5jb250ZW50LmlkID0gb2JqLnBhZ2VfaWQ7XG4gICAgICAgICAgICB0aGlzLmZpZWxkLmNvbnRlbnQudXJsID0gb2JqLnBhZ2VfdXJsO1xuICAgICAgICAgICAgdGhpcy5maWVsZC5jb250ZW50LnNlbGVjdGVkTGluayA9IEpTT04uc3RyaW5naWZ5KG9iaik7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkTGluayA9IG9iajtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBjb21wdXRlZDoge1xuXG4gICAgICB9LFxuICAgICAgY3JlYXRlZDogZnVuY3Rpb24gKCkge1xuICAgICAgICAvL2NvbnNvbGUubG9nKCctY3JlYXRlZCcpO1xuICAgICAgICBpZiAodGhpcy5maWVsZC5jb250ZW50LnNlbGVjdGVkTGluaykge1xuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRMaW5rID0gSlNPTi5wYXJzZSh0aGlzLmZpZWxkLmNvbnRlbnQuc2VsZWN0ZWRMaW5rKTtcbiAgICAgICAgfVxuXG4gICAgICB9LFxuICAgICAgd2F0Y2g6IHtcbiAgICAgICAgLy8gd2hlbmV2ZXIgcXVlc3Rpb24gY2hhbmdlcywgdGhpcyBmdW5jdGlvbiB3aWxsIHJ1blxuXG4gICAgICB9XG4gICB9XG48L3NjcmlwdD5cbiBcbjxzdHlsZSBzY29wZWQ+XG4gIC5maWVsZC1pdGVtIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7XG5cbiAgfVxuICAuZmllbGQtaXRlbSBsYWJlbCB7XG4gICAgZmxleDogMTtcbiAgfVxuICAuZmllbGQtaXRlbSBpbnB1dCB7XG4gICAgZmxleDogMTtcbiAgfVxuXG5cblxuPC9zdHlsZT4iLCI8dGVtcGxhdGU+XG4gIDxkaXYgY2xhc3M9XCJmaWVsZC1pdGVtXCI+XG4gICAgPGg0PjxkaXYgY2xhc3M9XCJjb3JuZXJcIj48L2Rpdj57e2ZpZWxkLm5hbWV9fTwvaDQ+XG4gICAgPHVsPlxuICAgICAgPGxpPlxuICAgICAgICA8bGFiZWw+UGFnZTwvbGFiZWw+XG4gICAgICAgIDxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgdi1iaW5kOm5hbWU9XCJmaWVsZC52YXJpYWJsZVwiIHYtbW9kZWw9XCJmaWVsZC5jb250ZW50LnNlbGVjdGVkTGlua1wiICBwbGFjZWhvbGRlcj1cIlwiIC8+XG5cbiAgICAgICAgPGNhdHMtcGFnZXMtc2VsZWN0XG4gICAgICAgICAgdi1vbjpmaW5pc2hlZD1cInNldFNlbGVjdGVkTGlua1wiXG4gICAgICAgICAgdi1iaW5kOmNhdHNwYWdlcz1cImNhdHNwYWdlc1wiXG4gICAgICAgICAgdi1iaW5kOnNlbGVjdGVkPVwic2VsZWN0ZWRMaW5rXCI+PC9jYXRzLXBhZ2VzLXNlbGVjdD5cbiAgICAgICAgICBcbiAgICAgIDwvbGk+XG4gICAgICA8bGk+XG4gICAgICAgIDxsYWJlbD5MYWJlbDwvbGFiZWw+XG4gICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIHYtYmluZDpuYW1lPVwiZmllbGQudmFyaWFibGVcIiB2LW1vZGVsPVwiZmllbGQuY29udGVudC5sYWJlbFwiICBwbGFjZWhvbGRlcj1cIlwiIC8+XG4gICAgICA8L2xpPlxuICAgICAgPGxpPlxuICAgICAgICA8bGFiZWw+Q1NTIGNsYXNzPC9sYWJlbD5cbiAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgdi1iaW5kOm5hbWU9XCJmaWVsZC5jc3NjbGFzc1wiIHYtbW9kZWw9XCJmaWVsZC5jb250ZW50LmNzc2NsYXNzXCIgIHBsYWNlaG9sZGVyPVwiXCIgLz5cbiAgICAgIDwvbGk+XG4gICAgICA8bGk+XG4gICAgICAgIDxsYWJlbD48L2xhYmVsPlxuICAgICAgICA8c3RhdGUtZm9ybVxuICAgICAgICAgIGlkPVwiZmllbGRzX2Zvcm1fc3RhdGVcIlxuICAgICAgICAgIHR5cD1cInNtYWxsXCJcbiAgICAgICAgICA6c2VsZWN0ZWQ9XCJmaWVsZC5jb250ZW50LnN0YXR1c1wiXG4gICAgICAgICAgQGNoYW5nZT1cImNoYW5nZVN0YXRlXCJcbiAgICAgICAgPjwvc3RhdGUtZm9ybT5cbiAgICAgIDwvbGk+XG5cbiAgICAgIFxuICAgICAgXG4gICAgPC91bD5cbiAgPC9kaXY+XG4gIFxuXG48L3RlbXBsYXRlPlxuIFxuPHNjcmlwdD5cblxuICBpbXBvcnQgU3RhdGVGb3JtIGZyb20gJy4uL2Zvcm1zL1N0YXRlRm9ybSdcbiAgaW1wb3J0IENhdHNQYWdlc1NlbGVjdCBmcm9tICcuLi9mb3Jtcy9DYXRzUGFnZXNTZWxlY3QnXG5cbiAgIGV4cG9ydCBkZWZhdWx0IHtcbiAgICAgIG5hbWU6IFwiZmF2b3JpdC1maWVsZFwiLFxuICAgICAgcHJvcHM6IFtcbiAgICAgICAgJ2ZpZWxkJyxcbiAgICAgICAgJ3BhZ2VzJyxcbiAgICAgICAgJ2NhdHNwYWdlcydcbiAgICAgIF0sXG4gICAgICBjb21wb25lbnRzOiB7XG4gICAgICAgIFN0YXRlRm9ybSxcbiAgICAgICAgQ2F0c1BhZ2VzU2VsZWN0XG4gICAgICB9LFxuICAgICAgZGF0YTogZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHNlbGVjdGVkTGluazogZmFsc2VcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIGNyZWF0ZWQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgLy9jb25zb2xlLmxvZyggSlNPTi5zdHJpbmdpZnkodGhpcy5maWVsZCkpO1xuICAgICAgICAvL2NvbnNvbGUubG9nKCdhYScsdGhpcy5maWVsZC5jb250ZW50LnNlbGVjdGVkTGluayk7XG5cbiAgICAgICAgaWYgKHRoaXMuZmllbGQuY29udGVudC5zZWxlY3RlZExpbmspIHtcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkTGluayA9IEpTT04ucGFyc2UodGhpcy5maWVsZC5jb250ZW50LnNlbGVjdGVkTGluayk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5zZWxlY3RlZExpbmsgPSBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICB9LFxuICAgICAgd2F0Y2g6IHtcbiAgICAgICAgLy8gd2hlbmV2ZXIgcXVlc3Rpb24gY2hhbmdlcywgdGhpcyBmdW5jdGlvbiB3aWxsIHJ1blxuXG4gICAgICB9LFxuICAgICAgbWV0aG9kczoge1xuXG4gICAgICAgIHNldFNlbGVjdGVkTGluazogIGZ1bmN0aW9uIChvYmopIHtcbiAgICAgICAgICAvL2NvbnNvbGUubG9nKCctc2V0U2VsZWN0ZWRMaW5rJywgb2JqKTtcbiAgICAgICAgICBpZiAob2JqLnBhZ2VfaWQpIHtcbiAgICAgICAgICAgIHRoaXMuZmllbGQuY29udGVudC5pZCA9IG9iai5wYWdlX2lkO1xuICAgICAgICAgICAgdGhpcy5maWVsZC5jb250ZW50LnVybCA9IG9iai5wYWdlX3VybDtcbiAgICAgICAgICAgIHRoaXMuZmllbGQuY29udGVudC5zZWxlY3RlZExpbmsgPSBKU09OLnN0cmluZ2lmeShvYmopO1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZExpbmsgPSBvYmo7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuXG4gICAgICAgIGNoYW5nZVN0YXRlKGRhdGEpIHtcbiAgICAgICAgICAvLyBjb25zb2xlLmxvZyhkYXRhKTtcbiAgICAgICAgICAvLyBjb25zb2xlLmxvZyh0aGlzLmZpZWxkKTtcbiAgICAgICAgICB0aGlzLmZpZWxkLmNvbnRlbnQuc3RhdHVzID0gZGF0YS52YWx1ZTtcbiAgICAgICAgfVxuXG4gICAgICB9XG4gICB9XG48L3NjcmlwdD5cbiBcbjxzdHlsZSBzY29wZWQ+XG4gIC5maWVsZC1pdGVtIHVsIGxpIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIHBhZGRpbmctbGVmdDogMC4zcmVtO1xuICAgIHBhZGRpbmctcmlnaHQ6IDByZW07XG4gICAgcGFkZGluZy10b3A6IDAuM3JlbTtcbiAgICBwYWRkaW5nLWJvdHRvbTogMC4zcmVtO1xuICB9XG4gIC5maWVsZC1pdGVtIHVsIGxhYmVsIHtcbiAgICBmbGV4OiAxO1xuICB9XG4gIC5maWVsZC1pdGVtIHVsIGlucHV0IHtcbiAgICBmbGV4OiAxO1xuICB9XG4gIC5maWVsZC1pdGVtIHVsIHNlbGVjdCB7XG4gICAgZmxleDogMTtcbiAgfVxuXG5cblxuPC9zdHlsZT4iLCI8dGVtcGxhdGU+XG4gIDxkaXYgY2xhc3M9XCJlZGl0b3ItZm9ybVwiIHYtaWY9XCJwYWdlLm5hbWVcIj5cblxuXG5cbiAgICA8ZGl2IGNsYXNzPVwidG9vbGJhclwiPlxuICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBzYXZlXCIgdi1vbjpjbGljaz1cImhhbmRsZVN1Ym1pdFwiID5TYXZlPC9idXR0b24+XG4gICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIHB1Ymxpc2hcIiB2LWlmPVwicGFnZS5jaGFuZ2VkXCIgdi1vbjpjbGljaz1cImhhbmRsZVB1Ymxpc2hcIiA+UHVibGlzaDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiBjbGFzcz1cImZvcm1cIj5cblxuICAgICAgPHVsIGNsYXNzPVwiZmllbGRzXCJcbiAgICAgICAgdi1vbjprZXlkb3duLmVudGVyLmV4YWN0PVwiaGFuZGxlU3VibWl0XCI+XG4gICAgICAgIDxsaSBjbGFzcz1cIml0ZW1cIlxuICAgICAgICAgIHYtZm9yPVwiZmllbGQgaW4gdGhpcy5wYWdlLmZpZWxkc1wiPlxuICAgICAgICAgIDxmaWVsZHMgdi1iaW5kOmZpZWxkPVwiZmllbGRcIiAgdi1iaW5kOnBhZ2U9XCJwYWdlXCIgdi1iaW5kOmNhdHNwYWdlcz1cImNhdHNwYWdlc1wiPjwvZmllbGRzPlxuICAgICAgICA8L2xpPlxuICAgICAgPC91bD5cbiAgICA8L2Rpdj5cbiAgICAgIFxuXG4gIDwvZGl2PlxuICBcblxuPC90ZW1wbGF0ZT5cbiBcbjxzY3JpcHQ+XG4gIFxuICBpbXBvcnQgRmllbGRzIGZyb20gJy4vRmllbGRzJ1xuXG4gIGV4cG9ydCBkZWZhdWx0IHtcbiAgICBuYW1lOiBcImVkaXRvci1mb3JtXCIsXG4gICAgcHJvcHM6IFtcbiAgICAgICdwYWdlJyxcbiAgICAgICdjYXRzcGFnZXMnXG4gICAgXSxcbiAgICBjb21wb25lbnRzOiB7XG4gICAgICBGaWVsZHNcbiAgICB9LFxuICAgIGRhdGE6IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICB9XG4gICAgfSxcbiAgICBjcmVhdGVkOiBmdW5jdGlvbiAoKSB7XG4gICAgICAvL2NvbnNvbGUubG9nKCctY3JlYXRlZCcpO1xuICAgICAgXG4gICAgfSxcbiAgICAvKndhdGNoOiB7XG4gICAgICAvLyB3aGVuZXZlciBxdWVzdGlvbiBjaGFuZ2VzLCB0aGlzIGZ1bmN0aW9uIHdpbGwgcnVuXG4gICAgICBwYWdlaWQ6IGZ1bmN0aW9uIChuZXdRdWVzdGlvbiwgb2xkUXVlc3Rpb24pIHtcbiAgICAgICAgLy9jb25zb2xlLmxvZygncGFnZWlkJywgdGhpcy5wYWdlaWQpO1xuICAgICAgICB0aGlzLnJlZnJlc2hEYXRhKCk7XG4gICAgICB9XG4gICAgfSxcbiAgICAqL1xuICAgIG1ldGhvZHM6IHtcblxuICAgICAgZWRpdFBhZ2UoZXZlbnQsIHBhZ2UpIHtcblxuICAgICAgICAvL3BhZ2UuaXNFZGl0ID0gIXBhZ2UuaXNFZGl0O1xuXG5cbiAgICAgICAgRXZlbnRCdXMuJGVtaXQoJ3BhZ2UtZWRpdCcsIHsnaWQnOnBhZ2UuaWQsICdldmVudCc6ZXZlbnR9ICk7XG5cbiAgICAgIH0sXG4gICAgICBoYW5kbGVQdWJsaXNoKCkge1xuICAgICAgICAvL2NvbnNvbGUubG9nKCdhamF4OiBwdWJsaXNoJyk7XG5cbiAgICAgICAgdmFyIHRoYXQgPSB0aGlzO1xuXG4gICAgICAgIGZldGNoKCdwYWdlL2pzb24vcHVibGlzaC8nK3RoaXMucGFnZS5pZClcbiAgICAgICAgLnRoZW4oZnVuY3Rpb24ocmVzcG9uc2UpIHtcbiAgICAgICAgICAvL2NvbnNvbGUubG9nKCdhJyxyZXNwb25zZSk7XG4gICAgICAgICAgcmV0dXJuIHJlc3BvbnNlLmpzb24oKTtcbiAgICAgICAgfSlcbiAgICAgICAgLnRoZW4oZnVuY3Rpb24oZGF0YSkge1xuICAgICAgICAgIC8vY29uc29sZS5sb2coanNvbik7XG4gICAgICAgICAgLy9jb25zb2xlLmxvZyhKU09OLnN0cmluZ2lmeShteUpzb24pKTtcblxuICAgICAgICAgIC8vdGhhdC5qc29uID0ganNvbjtcbiAgICAgICAgICAvL3RoYXQucmVmcmVzaERhdGEoKTtcbiAgICAgICAgICAvL3RoYXQucmVmcmVzaERhdGEoKTtcbiAgICAgICAgICBpZiAoZGF0YS5zdWNjZXNzKSB7XG4gICAgICAgICAgICBFdmVudEJ1cy4kZW1pdCgncGFnZS1vcGVuJywge30gKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgfSkuY2F0Y2goZnVuY3Rpb24oZXJyKSB7ICBcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0ZhaWxlZCB0byBmZXRjaCBwYWdlOiAnLCBlcnIpOyAgXG4gICAgICAgIH0pO1xuXG4gICAgICB9LFxuXG4gICAgICBoYW5kbGVTdWJtaXQoKSB7XG4gICAgICAgIC8vIFNlbmQgZGF0YSB0byB0aGUgc2VydmVyIG9yIHVwZGF0ZSB5b3VyIHN0b3JlcyBhbmQgc3VjaC5cbiAgICAgICAgLy9jb25zb2xlLmxvZyh0aGlzLmpzb24pO1xuXG4gICAgICAgIC8vY29uc29sZS5sb2coJ2FqYXg6IHNhdmUnKTtcblxuICAgICAgICB2YXIgZGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xuICAgICAgICBkYXRhLmFwcGVuZCggXCJqc29uXCIsIEpTT04uc3RyaW5naWZ5KCB0aGlzLnBhZ2UgKSApO1xuXG4gICAgICAgIHZhciB0aGF0ID0gdGhpcztcblxuICAgICAgICBmZXRjaCgnL3BhZ2UvanNvbi9wb3N0LycrdGhpcy5wYWdlLmlkLFxuICAgICAgICB7XG4gICAgICAgICAgICBtZXRob2Q6IFwiUE9TVFwiLFxuICAgICAgICAgICAgYm9keTogZGF0YVxuICAgICAgICB9KVxuICAgICAgICAudGhlbihmdW5jdGlvbihyZXMpe1xuICAgICAgICAgIHJldHVybiByZXMuanNvbigpO1xuICAgICAgICB9KVxuICAgICAgICAudGhlbihmdW5jdGlvbihkYXRhKXtcbiAgICAgICAgICAvL2NvbnNvbGUubG9nKCBKU09OLnN0cmluZ2lmeSggZGF0YSApIClcbiAgICAgICAgICBpZiAoZGF0YS5pZCkge1xuICAgICAgICAgICAgLy9jb25zb2xlLmxvZygnYWpheDogLT4gc2F2ZWQhJywgZGF0YSk7XG4gICAgICAgICAgICAvL2NvbnNvbGUubG9nKGRhdGEpO1xuICAgICAgICAgICAgRXZlbnRCdXMuJGVtaXQoJ3BhZ2Utb3BlbicsIHsnaWQnOmRhdGEuaWQsICd1cmwnOmRhdGEudXJsfSApO1xuXG4gICAgICAgICAgICAvL3RoYXQuanNvbiA9IGRhdGE7XG4gICAgICAgICAgICAvLyMgdGhhdC5yZWZyZXNoRGF0YSgpO1xuXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZGF0YS5lcnJvcik7XG4gICAgICAgICAgfVxuICAgICAgICB9KVxuXG5cbiAgICAgIH1cbiAgICAgIFxuICAgICAgLyosXG4gICAgICByZWZyZXNoRGF0YSgpIHtcblxuICAgICAgICAvL2NvbnNvbGUubG9nKCctcmVmcmVzaENhdGVnb3JpZXMnLCB0aGlzLnBhcmVudCk7XG4gICAgICAgIHZhciB0aGF0ID0gdGhpcztcblxuICAgICAgICBpZiAodGhpcy5wYWdlaWQpIHtcbiAgICAgICAgICBmZXRjaCgncGFnZS9qc29uLycrdGhpcy5wYWdlaWQpXG4gICAgICAgICAgLnRoZW4oZnVuY3Rpb24ocmVzcG9uc2UpIHtcbiAgICAgICAgICAgIC8vY29uc29sZS5sb2coJ2EnLHJlc3BvbnNlKTtcbiAgICAgICAgICAgIHJldHVybiByZXNwb25zZS5qc29uKCk7XG4gICAgICAgICAgfSlcbiAgICAgICAgICAudGhlbihmdW5jdGlvbihqc29uKSB7XG4gICAgICAgICAgICAvL2NvbnNvbGUubG9nKGpzb24pO1xuICAgICAgICAgICAgLy9jb25zb2xlLmxvZyhKU09OLnN0cmluZ2lmeShteUpzb24pKTtcblxuICAgICAgICAgICAgdGhhdC5qc29uID0ganNvbjtcblxuICAgICAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uKGVycikgeyAgXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdGYWlsZWQgdG8gZmV0Y2ggcGFnZTogJywgZXJyKTsgIFxuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoYXQuanNvbiA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIFxuXG4gICAgICB9XG4gICAgICAqL1xuXG4gICAgfVxuICB9XG48L3NjcmlwdD5cbiBcbjxzdHlsZSBzY29wZWQ+XG4gIFxuICAuZWRpdG9yLWZvcm0ge1xuXG4gICAgcGFkZGluZy10b3A6IDAuNXJlbTtcbiAgICBmbGV4OjE7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgaGVpZ2h0OiA5MHZoO1xuICB9XG5cblxuXG4gIC5lZGl0b3ItZm9ybSAuZm9ybSB7XG4gXG4gICAgb3ZlcmZsb3cteTogc2Nyb2xsO1xuXG4gICAgaGVpZ2h0OiA2MHZoO1xuICAgIFxuICB9XG5cbiAgLmVkaXRvci1mb3JtIC5mb3JtIC5maWVsZHMgLml0ZW0ge1xuICAgIHBhZGRpbmctbGVmdDogMXJlbTtcbiAgICBwYWRkaW5nLXJpZ2h0OiAxcmVtO1xuICAgIHBhZGRpbmctdG9wOiAwLjZyZW07XG4gICAgcGFkZGluZy1ib3R0b206IDAuNnJlbTtcbiAgICBcbiAgfVxuXG5cbiAgLmVkaXRvci1mb3JtICAudG9vbGJhciB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtZW5kO1xuICAgIGhlaWdodDogNXZoO1xuICB9XG5cbiAgLmVkaXRvci1mb3JtIC50b29sYmFyIC5zYXZlIHtcbiAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoJy4uLy4uLy4uL2ljb25zL3NhdmUuc3ZnJyk7XG4gICAgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDtcbiAgICBiYWNrZ3JvdW5kLXNpemU6IGF1dG8gNDUlO1xuICAgIGJhY2tncm91bmQtcG9zaXRpb246IDAuNXJlbSBjZW50ZXI7XG4gICAgcGFkZGluZy1sZWZ0OiAyLjNyZW07XG4gICAgbWFyZ2luLWxlZnQ6IDFyZW07XG4gIH1cblxuICAuZWRpdG9yLWZvcm0gLnRvb2xiYXIgLnB1Ymxpc2gge1xuICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybCgnLi4vLi4vLi4vaWNvbnMvY2xvdWRfdXAuc3ZnJyk7XG4gICAgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDtcbiAgICBiYWNrZ3JvdW5kLXNpemU6IGF1dG8gNjUlO1xuICAgIGJhY2tncm91bmQtcG9zaXRpb246IDAuNXJlbSBjZW50ZXI7XG4gICAgcGFkZGluZy1sZWZ0OiAyLjNyZW07XG4gICAgbWFyZ2luLWxlZnQ6IDFyZW07XG5cbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2IoMCwgMTM3LCAyMTYpO1xuICAgIGNvbG9yOiAjZmZmO1xuICB9XG4gIC5lZGl0b3ItZm9ybSAudG9vbGJhciAucHVibGlzaDpob3ZlciB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogcmdiKDI0MCwgMTg0LCAwKTtcbiBcbiAgfVxuXG5cblxuICBcbjwvc3R5bGU+IiwiPHRlbXBsYXRlPlxuICA8ZGl2IGNsYXNzPVwiZWRpdG9yLXByZXZpZXdcIiB2LXNob3c9XCJwYWdldXJsXCI+XG4gICAgXG4gICAgPGRpdiBjbGFzcz1cImhlYWRlclwiPlxuICAgICAgPGgzPlByZXZpZXcgPC9oMz5cbiAgICAgIDxzZWxlY3QgY2xhc3M9XCJcIiB2LW1vZGVsPVwiZGV2aWNlU2l6ZVwiPlxuICAgICAgICA8b3B0aW9uIHZhbHVlPSd7XCJ3aWR0aFwiOjc1MCxcImhlaWdodFwiOjEzMzR9Jz5pUGhvbmUgNiAoNzUwLDEzMzQpPC9vcHRpb24+XG4gICAgICAgIDxvcHRpb24gdmFsdWU9J3tcIndpZHRoXCI6NjQwLFwiaGVpZ2h0XCI6MTEzNn0nPmlQaG9uZSBTRSAoNjQwLDExMzYpPC9vcHRpb24+XG4gICAgICAgIDxvcHRpb24gdmFsdWU9J3tcIndpZHRoXCI6MjAwLFwiaGVpZ2h0XCI6NDAwfSc+MjAwLDQwMDwvb3B0aW9uPlxuICAgICAgICA8b3B0aW9uIHZhbHVlPSd7XCJ3aWR0aFwiOjQwMCxcImhlaWdodFwiOjgwMH0nPjQwMCw4MDA8L29wdGlvbj5cbiAgICAgICAgPG9wdGlvbiB2YWx1ZT0ne1wid2lkdGhcIjo3NTAsXCJoZWlnaHRcIjoxMzM0fSc+NzUwLDEzMzQ8L29wdGlvbj5cbiAgICAgIDwvc2VsZWN0PlxuICAgIDwvZGl2PlxuICAgIFxuICAgIDwhLS08aWZyYW1lIHYtYmluZDpzcmM9XCInYXBwL3d3dy9pbmRleC5odG1sP3BhZ2U9JytwYWdldXJsXCIgaGVpZ2h0PVwiMzAwXCIgLz4tLT5cbiAgICA8ZGl2IGNsYXNzPVwiZGV2aWNlV3JhcFwiPlxuICAgICAgXG4gICAgICA8IS0tIDxkaXYgY2xhc3M9XCJ1cmxcIj5Vcmw6IHt7cGFnZXVybENsZWFyfX08L2Rpdj4gLS0+XG4gICAgICA8ZGl2IGNsYXNzPVwiZGV2aWNlXCJcbiAgICAgICAgdi1iaW5kOnN0eWxlPVwieyBoZWlnaHQ6IGRldmljZS5oZWlnaHQsIHdpZHRoOiBkZXZpY2Uud2lkdGggfVwiXG4gICAgICAgICAgPlxuICAgICAgICA8aWZyYW1lXG4gICAgICAgICAgdi1iaW5kOnNyYz1cIidhcHBfc3RyZWFtL3d3dy9pbmRleC5odG1sP2FwaT0nK3BhZ2V1cmxcIlxuICAgICAgICAgIHYtYmluZDpoZWlnaHQ9XCJkZXZpY2UuaGVpZ2h0XCJcbiAgICAgICAgICB2LWJpbmQ6d2lkdGg9XCJkZXZpY2Uud2lkdGhcIiAvPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwibmF2XCI+XG4gICAgICAgIDxidXR0b24gY2xhc3M9XCIgbGVmdFwiPjwvYnV0dG9uPlxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwiIGNlbnRlclwiPjwvYnV0dG9uPlxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwiIHJpZ2h0XCI+PC9idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIFxuXG48L3RlbXBsYXRlPlxuIFxuPHNjcmlwdD5cbiAgIGV4cG9ydCBkZWZhdWx0IHtcbiAgICAgIG5hbWU6IFwiZWRpdG9yLXByZXZpZXdcIixcbiAgICAgIHByb3BzOiBbXG4gICAgICAgICdwYWdldXJsJyxcbiAgICAgICAgJ3BhZ2V1cmxDbGVhcidcbiAgICAgIF0sXG4gICAgICBjb21wb25lbnRzOiB7XG4gICAgICAgIFxuICAgICAgfSxcbiAgICAgIGRhdGE6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAvL2pzb246IGZhbHNlXG4gICAgICAgICAgZGV2aWNlU2l6ZTogZmFsc2VcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIGNvbXB1dGVkOiB7XG4gICAgICAgIGRldmljZTogZnVuY3Rpb24gKCkge1xuXG4gICAgICAgICAgdmFyIHJldCA9IHtcbiAgICAgICAgICAgIHdpZHRoOiAzMDAsXG4gICAgICAgICAgICBoZWlnaHQ6IDYwMFxuICAgICAgICAgIH07XG5cbiAgICAgICAgICBpZiAodGhpcy5kZXZpY2VTaXplKSB7XG4gICAgICAgICAgICB2YXIgc2l6ZSA9IEpTT04ucGFyc2UodGhpcy5kZXZpY2VTaXplKTtcbiAgICAgICAgICAgIHJldC53aWR0aCA9IHNpemUud2lkdGg7XG4gICAgICAgICAgICByZXQuaGVpZ2h0ID0gc2l6ZS5oZWlnaHQ7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIHJldDtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIGNyZWF0ZWQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgLy9jb25zb2xlLmxvZygnLWNyZWF0ZWQnKTtcbiAgICAgICAgXG4gICAgICB9LFxuICAgICAgbWV0aG9kczoge1xuXG5cbiAgICAgIH1cbiAgIH1cbjwvc2NyaXB0PlxuIFxuPHN0eWxlIHNjb3BlZD5cbmgzIHtcbiAgcGFkZGluZy1sZWZ0OiAycmVtO1xufVxuLmVkaXRvci1wcmV2aWV3IHtcbiAgcGFkZGluZzogMDtcbiAgXG59XG5cbi5lZGl0b3ItcHJldmlldyAuaGVhZGVyIHtcbiAgZGlzcGxheTpmbGV4O1xufVxuLmVkaXRvci1wcmV2aWV3IC5oZWFkZXIgaDMge1xuICBmbGV4OiAxXG59XG4uZWRpdG9yLXByZXZpZXcgLmhlYWRlciBzZWxlY3Qge1xuICBmbGV4OiAxO1xuICBtYXgtd2lkdGg6IDZyZW07XG4gIGhlaWdodDogMS4zcmVtO1xuXG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgb3V0bGluZTogMDtcbiAgZm9udC1mYW1pbHk6ICAnUFQgU2FucycsIHNhbnMtc2VyaWY7XG4gIGZvbnQtc2l6ZTogNzAlO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmZmZmO1xuXG4gIHBhZGRpbmctdG9wOiAwLjFyZW07XG4gIHBhZGRpbmctYm90dG9tOiAwLjFyZW07XG4gIHBhZGRpbmctbGVmdDogMC4ycmVtO1xuICBwYWRkaW5nLXJpZ2h0OiAwLjJyZW07XG4gIG1hcmdpbjogMDtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICBib3JkZXI6IDEuNXB4IHNvbGlkIHJnYigwLCAxMzcsIDIxNik7XG4gIGJvcmRlci1yYWRpdXM6IDAuM3JlbTtcblxuXG59XG5cbi5kZXZpY2VXcmFwIHtcbmJvcmRlcjogMnB4IHNvbGlkICNjY2M7XG4gICBwYWRkaW5nOjFyZW07XG4gICBwYWRkaW5nLXRvcDoycmVtO1xuICAgYm9yZGVyLXJhZGl1czogMS41cmVtO1xuICBiYWNrZ3JvdW5kLWltYWdlOiBsaW5lYXItZ3JhZGllbnQodG8gbGVmdCwgcmdiYSgyNTUsMjU1LDI1NSwwKSAwJSwgcmdiYSgyNTUsMjU1LDI1NSwxKSAxMDAlKTtcblxufVxuLmRldmljZVdyYXAgLmRldmljZSB7XG4gICBcblxuICAgLyogbWF4LXdpZHRoOiAyNXZ3O1xuXG5tYXgtaGVpZ2h0OiA1NXZoOyAqL1xuXG5vdmVyZmxvdzogYXV0bztcblxuIH1cbiAuZGV2aWNlV3JhcCAgLnVybCB7XG4gICBib3JkZXI6IDFweCBzb2xpZCAjNjU2NTY1O1xuICAgYm9yZGVyLXJhZGl1czowLjVyZW07XG4gICBwYWRkaW5nLWxlZnQ6IDAuM3JlbTtcbiAgIHBhZGRpbmctcmlnaHQ6IDFyZW07XG4gICBwYWRkaW5nLXRvcDogMC4ycmVtO1xuICAgcGFkZGluZy1ib3R0b206IDAuMXJlbTtcbiAgIGJhY2tncm91bmQtY29sb3I6ICMjZmNmY2ZjO1xuICAgb3ZlcmZsb3cteDogYXV0bztcbiAgIGZvbnQtc2l6ZTo4MCU7XG4gICBjb2xvcjogIzAwMDtcbiAgIG1hcmdpbi1ib3R0b206IDAuNXJlbTtcbiB9XG4gLmRldmljZVdyYXAgaWZyYW1lIHtcbiAgIGJvcmRlcjogMnB4IHNvbGlkICM2NTY1NjU7XG5cbiAgXG4gfVxuIC5kZXZpY2VXcmFwIC5uYXYge1xuICAgZGlzcGxheTogZmxleDtcbiAgIHBhZGRpbmctdG9wOjFyZW07XG4gfVxuIC5kZXZpY2VXcmFwIC5uYXYgLmxlZnQge1xuICAgZmxleDogMTtcbiAgIG9wYWNpdHk6IDA7XG4gfVxuIC5kZXZpY2VXcmFwIC5uYXYgLmNlbnRlciB7XG4gICBmbGV4OiAyO1xuICAgYm9yZGVyOiAycHggc29saWQgIzY1NjU2NTtcbiAgIGJvcmRlci1yYWRpdXM6IDNyZW07XG4gICBtaW4taGVpZ2h0OiAzcmVtO1xuICAgbWF4LWhlaWdodDogM3JlbTtcbiAgIG1pbi13aWR0aDogM3JlbTtcbiAgIG1heC13aWR0aDogM3JlbTtcbiB9XG4gLmRldmljZVdyYXAgLm5hdiAucmlnaHQge1xuICAgZmxleDogMTtcbiAgIG9wYWNpdHk6IDA7XG4gfVxuPC9zdHlsZT4iLCI8dGVtcGxhdGU+XG4gIDxkaXYgY2xhc3M9XCJlZGl0b3ItcGFnZVwiIHYtaWY9XCJwYWdlLm5hbWVcIj5cblxuICAgIFxuICAgIDxkaXYgY2xhc3M9XCJ3cmFwXCI+XG4gICAgICBcbiAgICAgIDxkaXYgY2xhc3M9XCJoZWFkXCI+XG4gICAgICAgIDxoMyBjbGFzcz1cInBhZ2VfbmFtZVwiPlxuICAgICAgICAgIHt7cGFnZS5uYW1lfX1cbiAgICAgICAgICA8c3BhbiB2LWlmPVwicGFnZS5jaGFuZ2VkID09IDFcIlxuICAgICAgICAgICAgY2xhc3M9XCJwYWdlQ2hhbmdlZFwiXG4gICAgICAgICAgICB2LXRvb2x0aXA9XCJ7XG4gICAgICAgICAgICBjb250ZW50OidEZXIgQWt0dWVsbGUgU3RhbmQgaXN0IG5vY2ggbmljaHQgdmVyw7ZmZmVudGxpY2guJyxcbiAgICAgICAgICAgIGRlbGF5OiB7IHNob3c6IDgwMCwgaGlkZTogMTAwMCB9LFxuICAgICAgICAgICAgcGxhY2VtZW50OiAndG9wJ1xuICAgICAgICAgIH1cIj48L3NwYW4+XG4gICAgICAgIDwvaDM+XG4gICAgICAgIDxoND5cbiAgICAgICAgICA8bGFiZWw+VXJsOjwvbGFiZWw+IHt7cGFnZS51cmx9fVxuICAgICAgICA8L2g0PlxuICAgICAgPC9kaXY+XG5cblxuICAgICAgPHVsIGNsYXNzPVwiZGV0YWlsc1wiPlxuXG4gICAgICAgIDxsaSB2LXRvb2x0aXA9XCJ7XG4gICAgICAgICAgY29udGVudDonTG9jYWwgLyBDbG91ZCcsXG4gICAgICAgICAgZGVsYXk6IHsgc2hvdzogODAwLCBoaWRlOiAxMDAwIH0sXG4gICAgICAgICAgcGxhY2VtZW50OiAndG9wJ1xuICAgICAgICB9XCJcbiAgICAgICAgPlxuICAgICAgICAgIDxkaXYgdi1pZj1cInBhZ2Uuc3RhdGljID09IDFcIiBjbGFzcz1cInBhZ2VTdGF0aWMgc3RhdGljXCI+U3RhdGljPC9kaXY+XG4gICAgICAgICAgPGRpdiB2LWVsc2UtaWY9XCJwYWdlLnN0YXRpYyA9PSAwXCIgIGNsYXNzPVwicGFnZVN0YXRpYyBjbG91ZFwiPkNsb3VkPC9kaXY+XG4gICAgICAgIDwvbGk+XG5cblxuICAgICAgICA8bGkgdi10b29sdGlwPVwie1xuICAgICAgICAgICAgY29udGVudDonU2ljaHRiYXIgLyBVbnNpY2h0YmFyJyxcbiAgICAgICAgICAgIGRlbGF5OiB7IHNob3c6IDgwMCwgaGlkZTogMTAwMCB9LFxuICAgICAgICAgICAgcGxhY2VtZW50OiAndG9wJ1xuICAgICAgICAgIH1cIlxuICAgICAgICA+XG4gICAgICAgICAgPGRpdiB2LWlmPVwicGFnZS5zdGF0ZSA9PSAtMVwiIGNsYXNzPVwicGFnZVN0YXRlIGRlbGV0ZWRcIj5HZWzDtnNjaHQ8L2Rpdj5cbiAgICAgICAgICA8ZGl2IHYtZWxzZS1pZj1cInBhZ2Uuc3RhdGUgPT0gMFwiIGNsYXNzPVwicGFnZVN0YXRlIGhpZGVcIj5VbnNpY2h0YmFyPC9kaXY+XG4gICAgICAgICAgPGRpdiB2LWVsc2UtaWY9XCJwYWdlLnN0YXRlID09IDFcIiBjbGFzcz1cInBhZ2VTdGF0ZSBzaG93XCI+U2ljaHRiYXI8L2Rpdj5cbiAgICAgICAgPC9saT5cblxuICAgICAgICA8bGkgY2xhc3M9XCJwYWdlQ2F0ZWdvcnlcIlxuICAgICAgICAgIHYtc2hvdz1cInBhZ2UuY2F0ZWdvcnlfbmFtZVwiXG4gICAgICAgICAgdi10b29sdGlwPVwie1xuICAgICAgICAgIGNvbnRlbnQ6J0thdGVnb3JpZSBkZXIgU2VpdGUnLFxuICAgICAgICAgIGRlbGF5OiB7IHNob3c6IDgwMCwgaGlkZTogMTAwMCB9LFxuICAgICAgICAgIHBsYWNlbWVudDogJ3RvcCdcbiAgICAgICAgfVwiXG4gICAgICAgID57e3BhZ2UuY2F0ZWdvcnlfbmFtZX19XG4gICAgICAgIDwvbGk+XG4gICAgICAgIDxsaSBjbGFzcz1cInBhZ2VUZW1wbGF0ZVwiXG4gICAgICAgICAgdi1zaG93PVwicGFnZS50ZW1wbGF0ZV9uYW1lXCJcbiAgICAgICAgICB2LXRvb2x0aXA9XCJ7XG4gICAgICAgICAgY29udGVudDonVGVtcGxhdGUgZGVyIFNlaXRlJyxcbiAgICAgICAgICBkZWxheTogeyBzaG93OiA4MDAsIGhpZGU6IDEwMDAgfSxcbiAgICAgICAgICBwbGFjZW1lbnQ6ICd0b3AnXG4gICAgICAgIH1cIlxuICAgICAgICA+e3twYWdlLnRlbXBsYXRlX25hbWV9fVxuICAgICAgICA8L2xpPlxuICAgICAgICA8bGkgY2xhc3M9XCJwYWdlR2FsbGVyeVwiXG4gICAgICAgICAgdi1zaG93PVwicGFnZS5pbWFnZXNfY291bnRcIlxuICAgICAgICAgIHYtdG9vbHRpcD1cIntcbiAgICAgICAgICBjb250ZW50OidCaWxkZXIgZGVyIFNlaXRlJyxcbiAgICAgICAgICBkZWxheTogeyBzaG93OiA4MDAsIGhpZGU6IDEwMDAgfSxcbiAgICAgICAgICBwbGFjZW1lbnQ6ICd0b3AnXG4gICAgICAgIH1cIlxuICAgICAgICA+e3twYWdlLmltYWdlc19jb3VudH19XG4gICAgICAgIDwvbGk+XG5cbiAgICAgIDwvdWw+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2IGNsYXNzPVwidHJpZ2dlckVkaXRXcmFwXCI+XG4gICAgICA8YnV0dG9uXG4gICAgICAgIGNsYXNzPVwiYnRuIHRyaWdnZXJFZGl0XCIgXG4gICAgICAgIHYtb246Y2xpY2s9XCJlZGl0UGFnZSgkZXZlbnQsIHBhZ2UpXCJcbiAgICAgICAgdi10b29sdGlwPVwie1xuICAgICAgICAgIGNvbnRlbnQ6J0JlYXJiZWl0ZW4gZGVyIFNlaXRlJyxcbiAgICAgICAgICBkZWxheTogeyBzaG93OiA4MDAsIGhpZGU6IDEwMDAgfSxcbiAgICAgICAgICBwbGFjZW1lbnQ6ICdyaWdodCdcbiAgICAgICAgfVwiXG4gICAgICA+U2VpdGUgYmVhcmJlaXRlbjwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICAgIFxuICAgICAgXG4gIDwvZGl2PlxuXG5cbjwvdGVtcGxhdGU+XG4gXG48c2NyaXB0PlxuICBcblxuICBleHBvcnQgZGVmYXVsdCB7XG4gICAgbmFtZTogXCJlZGl0b3ItcGFnZVwiLFxuICAgIHByb3BzOiBbXG4gICAgICAncGFnZSdcbiAgICBdLFxuICAgIGNvbXBvbmVudHM6IHtcbiAgICB9LFxuICAgIGRhdGE6IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICB9XG4gICAgfSxcbiAgICBjcmVhdGVkOiBmdW5jdGlvbiAoKSB7XG4gICAgICAvL2NvbnNvbGUubG9nKCctY3JlYXRlZCcpO1xuICAgICAgXG4gICAgfSxcbiAgICBtZXRob2RzOiB7XG5cbiAgICAgIGVkaXRQYWdlKGV2ZW50LCBwYWdlKSB7XG5cbiAgICAgICAgdmFyIHJldCA9IHtcbiAgICAgICAgICAnaWQnOjAsXG4gICAgICAgICAgJ2V2ZW50JzpldmVudCxcbiAgICAgICAgICAnZGVmYXVsdHMnOiBmYWxzZVxuICAgICAgICB9O1xuICAgICAgICBpZiAocGFnZSkge1xuICAgICAgICAgIHJldC5pZCA9IHBhZ2UuaWRcbiAgICAgICAgICByZXQucGFnZSA9IHBhZ2U7XG4gICAgICAgIH1cblxuICAgICAgICBFdmVudEJ1cy4kZW1pdCgncGFnZS1lZGl0JywgcmV0ICk7XG5cbiAgICAgIH0sXG4gICAgfVxuICB9XG48L3NjcmlwdD5cbiBcbjxzdHlsZSBzY29wZWQ+XG5cbi5lZGl0b3ItcGFnZSB7XG4gIGRpc3BsYXk6IGZsZXg7XG5cbiAgYmFja2dyb3VuZC1pbWFnZTogbGluZWFyLWdyYWRpZW50KHRvIGJvdHRvbSwgcmdiYSgyNTUsMjU1LDI1NSwwKSA2NSUsIHJnYmEoMjU1LDI1NSwyNTUsMSkgMTAwJSk7XG4gIHBhZGRpbmctYm90dG9tOiAwLjVyZW07XG5cbiAgIHBhZGRpbmctbGVmdDoycmVtO1xuXG4gIGJvcmRlci1yYWRpdXM6IDJyZW07XG59XG5cbi5lZGl0b3ItcGFnZSAud3JhcCB7XG4gIGZsZXg6IDEwO1xufVxuXG4gIC5lZGl0b3ItcGFnZSAuaGVhZCAucGFnZV9uYW1lIHtcbiAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoJy4uLy4uLy4uL2ljb25zL3BhZ2UyLnN2ZycpO1xuICAgIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7XG4gICAgYmFja2dyb3VuZC1wb3NpdGlvbjogbGVmdCBjZW50ZXI7XG4gICAgYmFja2dyb3VuZC1zaXplOiBhdXRvIDEwMCU7XG4gICAgcGFkZGluZy1sZWZ0OiAyLjVyZW07XG4gICAgcGFkZGluZy10b3A6IDAuMnJlbTtcbiAgICBwYWRkaW5nLWJvdHRvbTogMC4ycmVtO1xuICB9XG5cbi50cmlnZ2VyRWRpdFdyYXAge1xuIFxuICBkaXNwbGF5OmZsZXg7XG4gIGp1c3RpZnktY29udGVudDpmbGV4LWVuZDtcbn1cblxuLnRyaWdnZXJFZGl0IHtcblxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoJy4uLy4uLy4uL2ljb25zL2VkaXQuc3ZnJyk7XG4gIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7XG4gIGJhY2tncm91bmQtc2l6ZTogYXV0byA1MCU7XG4gIGJhY2tncm91bmQtcG9zaXRpb246IDAuNXJlbSBjZW50ZXI7XG4gIHBhZGRpbmctbGVmdDogMi4zcmVtO1xuICBoZWlnaHQ6IDJyZW07XG5cbn1cblxuaDMge1xuICBwYWRkaW5nLWJvdHRvbTowO1xufVxuaDQge1xuICBvcGFjaXR5OiAwLjc7XG4gIGZvbnQtc2l6ZTogODUlO1xuICBwYWRkaW5nLXRvcDowO1xuICBjb2xvcjogcmdiKDE0NiwgMTQ2LCAxNDYpO1xuICBwYWRkaW5nLWxlZnQ6IDIuNXJlbTtcbn1cblxuLmRldGFpbHMge1xuICBkaXNwbGF5OiBmbGV4O1xuICBwYWRkaW5nLXRvcDogMDtcbiAgZm9udC1zaXplOiA4NSU7XG4gIHBhZGRpbmctbGVmdDogMi41cmVtO1xufVxuXG4uZGV0YWlscyAubGVmdCB7XG4gIGZsZXg6IDE7XG59XG4uZGV0YWlscyAucmlnaHQge1xuICBmbGV4OiAxO1xufVxuXG4uZGV0YWlscyBsaSB7XG4gIHBhZGRpbmctcmlnaHQ6MXJlbTtcbn1cblxuLnBhZ2VTdGF0aWMge1xuXG5cbiAgcGFkZGluZy1sZWZ0OiAxLjZyZW07XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuXG4gIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7XG4gIGJhY2tncm91bmQtcG9zaXRpb246IGxlZnQgY2VudGVyO1xuICBiYWNrZ3JvdW5kLXNpemU6IGF1dG8gMTAwJTtcbiAgXG59XG5cbi5wYWdlU3RhdGljLnN0YXRpYyB7XG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybCgnLi4vLi4vLi4vaWNvbnMvc3RhdGljLnN2ZycpO1xufVxuLnBhZ2VTdGF0aWMuY2xvdWQge1xuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoJy4uLy4uLy4uL2ljb25zL2Nsb3VkLnN2ZycpO1xufVxuXG5cblxuLnBhZ2VTdGF0ZSB7XG5cblxuICBwYWRkaW5nLWxlZnQ6IDEuNnJlbTtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG5cbiAgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDtcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogbGVmdCBjZW50ZXI7XG4gIGJhY2tncm91bmQtc2l6ZTogYXV0byAxMDAlO1xuICBcbn1cblxuLnBhZ2VTdGF0ZS5kZWxldGVkIHtcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKCcuLi8uLi8uLi9pY29ucy9kZWxldGUuc3ZnJyk7XG59XG4ucGFnZVN0YXRlLmhpZGUge1xuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoJy4uLy4uLy4uL2ljb25zL2hpZGUuc3ZnJyk7XG59XG4ucGFnZVN0YXRlLnNob3cge1xuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoJy4uLy4uLy4uL2ljb25zL3Nob3cuc3ZnJyk7XG59XG5cblxuXG4ucGFnZUNhdGVnb3J5IHtcbiAgXG5cbiAgcGFkZGluZy1sZWZ0OiAxLjZyZW07XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybCgnLi4vLi4vLi4vaWNvbnMvbmF2LWNhdGVnb3JpZXMuc3ZnJyk7XG4gIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7XG4gIGJhY2tncm91bmQtcG9zaXRpb246IGxlZnQgY2VudGVyO1xuICBiYWNrZ3JvdW5kLXNpemU6IGF1dG8gMTAwJTtcblxufVxuXG4ucGFnZVRlbXBsYXRlIHtcblxuICBwYWRkaW5nLWxlZnQ6IDEuNnJlbTtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG5cbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKCcuLi8uLi8uLi9pY29ucy9uYXYtdGVtcGxhdGVzLnN2ZycpO1xuICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0O1xuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBsZWZ0IGNlbnRlcjtcbiAgYmFja2dyb3VuZC1zaXplOiBhdXRvIDEwMCU7XG5cbn1cblxuXG4ucGFnZUdhbGxlcnkge1xuXG4gIHBhZGRpbmctbGVmdDogMS42cmVtO1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcblxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoJy4uLy4uLy4uL2ljb25zL25hdi1nYWxsZXJ5LnN2ZycpO1xuICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0O1xuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBsZWZ0IGNlbnRlcjtcbiAgYmFja2dyb3VuZC1zaXplOiBhdXRvIDEwMCU7XG5cbn1cblxuICBcbjwvc3R5bGU+IiwiPHRlbXBsYXRlPlxuICA8ZGl2IGNsYXNzPVwiZWRpdG9yXCI+XG5cbiAgICA8ZWRpdC1wYWdlICB2LWJpbmQ6ZmllbGRzPVwicGFnZWZvcm1cIj48L2VkaXQtcGFnZT5cbiAgICA8ZWRpdC1jYXRlZ29yeSAgIHYtYmluZDpmaWVsZHM9XCJjYXRmb3JtXCI+PC9lZGl0LWNhdGVnb3J5PlxuICAgIDxlZGl0LWdhbGxlcnkgdi1iaW5kOnBhZ2VpZD1cInBhZ2VpZFwiICB2LWJpbmQ6ZmlsZXM9XCJwYWdlLmltYWdlc1wiIHYtYmluZDpnYWxsZXJ5PVwicGFnZS5nYWxsZXJ5XCI+PC9lZGl0LWdhbGxlcnk+XG4gICAgPGVkaXQtbWVkaWEgdi1iaW5kOnBhZ2VpZD1cInBhZ2VpZFwiICB2LWJpbmQ6ZmlsZXM9XCJwYWdlLmZpbGVzXCIgdi1iaW5kOm1lZGlhPVwicGFnZS5tZWRpYVwiPjwvZWRpdC1tZWRpYT5cblxuXG4gICAgPGRpdiBjbGFzcz1cInRyZWVcIj5cbiAgICAgIDxoMz5TdHJ1a3R1cjwvaDM+XG4gICAgICA8ZWRpdG9yLXRyZWVcbiAgICAgICAgdi1iaW5kOmNhdHNwYWdlcz1cImNhdHNwYWdlc1wiXG4gICAgICAgIHYtYmluZDphY3RpdmU9XCJwYWdlaWRcIlxuICAgICAgICB2LWJpbmQ6Zmlyc3Q9XCJ0cnVlXCJcbiAgICAgICAgPjwvZWRpdG9yLXRyZWU+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cInBhZ2VcIj5cbiAgICAgIDxlZGl0b3ItcGFnZSB2LWJpbmQ6cGFnZT1cInBhZ2VcIj48L2VkaXRvci1wYWdlPlxuICAgICAgPGVkaXRvci1mb3JtICB2LWJpbmQ6cGFnZT1cInBhZ2VcIiAgdi1iaW5kOnBhZ2VpZD1cIm9wZW5cIiB2LWJpbmQ6Y2F0c3BhZ2VzPVwiY2F0c3BhZ2VzXCI+PC9lZGl0b3ItZm9ybT5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwicHJldmlld1wiPlxuICAgICAgXG4gICAgICA8ZWRpdG9yLXByZXZpZXcgdi1iaW5kOnBhZ2V1cmw9XCJ1cmxSYW5kb21cIiB2LWJpbmQ6cGFnZXVybENsZWFyPVwidXJsXCI+PC9lZGl0b3ItcHJldmlldz5cbiAgICAgIFxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgXG5cbjwvdGVtcGxhdGU+XG4gXG48c2NyaXB0PlxuaW1wb3J0IEVkaXRQYWdlIGZyb20gJy4vRWRpdFBhZ2UnXG5pbXBvcnQgRWRpdENhdGVnb3J5IGZyb20gJy4vRWRpdENhdGVnb3J5J1xuaW1wb3J0IEVkaXRHYWxsZXJ5IGZyb20gJy4vRWRpdEdhbGxlcnknXG5pbXBvcnQgRWRpdE1lZGlhIGZyb20gJy4vRWRpdE1lZGlhJ1xuXG5pbXBvcnQgRWRpdG9yVHJlZSBmcm9tICcuLi9jb21wb25lbnRzL2VkaXRvci9FZGl0b3JUcmVlJ1xuaW1wb3J0IEVkaXRvckZvcm0gZnJvbSAnLi4vY29tcG9uZW50cy9lZGl0b3IvRWRpdG9yRm9ybSdcbmltcG9ydCBFZGl0b3JQcmV2aWV3IGZyb20gJy4uL2NvbXBvbmVudHMvZWRpdG9yL0VkaXRvclByZXZpZXcnXG5pbXBvcnQgRWRpdG9yUGFnZSBmcm9tICcuLi9jb21wb25lbnRzL2VkaXRvci9FZGl0b3JQYWdlJ1xuXG4gICBleHBvcnQgZGVmYXVsdCB7XG4gICAgICBuYW1lOiBcImVkaXRvclwiLFxuICAgICAgY29tcG9uZW50czoge1xuICAgICAgICBFZGl0b3JUcmVlLFxuICAgICAgICBFZGl0b3JGb3JtLFxuICAgICAgICBFZGl0b3JQcmV2aWV3LFxuICAgICAgICBFZGl0b3JQYWdlLFxuICAgICAgICBFZGl0UGFnZSxcbiAgICAgICAgRWRpdENhdGVnb3J5LFxuICAgICAgICBFZGl0R2FsbGVyeSxcbiAgICAgICAgRWRpdE1lZGlhXG4gICAgICB9LFxuICAgICAgZGF0YTogZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIG9wZW46IGZhbHNlLFxuICAgICAgICAgIHBhZ2U6IGZhbHNlLFxuICAgICAgICAgIHBhZ2VpZDogZmFsc2UsXG4gICAgICAgICAgdXJsOiAnJyxcbiAgICAgICAgICB1cmxSYW5kb206ICcnLFxuXG4gICAgICAgICAgY2F0c3BhZ2VzOiBmYWxzZSxcbiAgICAgICAgICBwYWdlZm9ybTogZmFsc2UsXG4gICAgICAgICAgY2F0Zm9ybTogZmFsc2UsXG5cbiAgICAgICAgICBvcGVuZm9ybTogZmFsc2VcblxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgY3JlYXRlZDogZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zb2xlLmxvZygnLWNyZWF0ZWQnLHRoaXMucGFnZWlkKTtcbiAgICAgICAgXG4gICAgICAgIC8vY29uc29sZS5sb2codGhpcy4kY2hpbGRyZW4pO1xuXG4gICAgICAgIHRoaXMucmVmcmVzaENhdHNQYWdlcygpO1xuICAgICAgICB0aGlzLnJlZnJlc2hGb3JtRmllbGRzKCk7XG4gICAgICAgIHRoaXMucmVmcmVzaFBhZ2VEYXRhKCk7XG5cblxuICAgICAgICBcbiAgICAgICAgXG5cblxuICAgICAgICBFdmVudEJ1cy4kb24oJ2Zvcm0tZWRpdCcsIG9iaiA9PiB7XG4gICAgICAgICAgLy9jb25zb2xlLmxvZyhgZXZlbnRidXM6IGZvcm0tZWRpdCBgLG9iailcbiAgICAgICAgICB0aGlzLnJlZnJlc2hDYXRzUGFnZXMoKTtcbiAgICAgICAgICAvL3RoaXMucGFnZWlkID0gb2JqLmNoYW5nZWREYXRhLmlkO1xuICAgICAgICAgIHRoaXMucmVmcmVzaFBhZ2VEYXRhKCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIEV2ZW50QnVzLiRvbignZWRpdC1vcGVuJywgb2JqID0+IHtcbiAgICAgICAgICAvL2NvbnNvbGUubG9nKGBldmVudGJ1czogZWRpdC1vcGVuIGAsb2JqKVxuICAgICAgICAgIGlmICh0aGlzLm9wZW5mb3JtKSB7XG4gICAgICAgICAgICB0aGlzLm9wZW5mb3JtKCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vY29uc29sZS5sb2coYFRvZG8gaXRlbSBpcyB1cGRhdGVkIGAsb2JqKVxuICAgICAgICAgIHRoaXMub3BlbmZvcm0gPSBvYmouZGF0YWlkO1xuICAgICAgICAgIC8vb2JqLmRhdGFpZCgpO1xuICAgICAgICB9KTtcblxuICAgICAgICBFdmVudEJ1cy4kb24oJ2NhdC1lZGl0Jywgb2JqID0+IHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhgZXZlbnRidXM6IGNhdC1lZGl0IGAsb2JqKVxuICAgICAgICAgIC8vY29uc29sZS5sb2codGhpcy5jYXRmb3JtKTtcbiAgICAgICAgICAvL2NvbnNvbGUubG9nKGBUb2RvIGl0ZW0gaXMgdXBkYXRlZCBgLG9iailcbiAgICAgICAgICB2YXIgZGVmYXVsdHMgPSB7fTtcbiAgICAgICAgICBpZiAob2JqLmNhdCAmJiBvYmouY2F0LmlkKSB7XG4gICAgICAgICAgICBkZWZhdWx0cy5wYXJlbnQgPSBvYmouY2F0LmlkO1xuICAgICAgICAgIH1cbiAgICAgICAgICAvL2RlZmF1bHRzLmNhdGVnb3JpZXMgPSB0aGlzLmNhdGZvcm07XG4gICAgICAgICAgdGhpcy4kY2hpbGRyZW5bMV0uaGFuZGxlT3BlbihvYmouZXZlbnQsIG9iai5pZCwgZGVmYXVsdHMpO1xuICAgICAgICB9KTtcblxuICAgICAgICBFdmVudEJ1cy4kb24oJ3BhZ2UtZWRpdCcsIG9iaiA9PiB7XG4gICAgICAgICAgLy9jb25zb2xlLmxvZyhgZXZlbnRidXM6IHBhZ2UtZWRpdCBgLG9iailcbiAgICAgICAgICAvL2NvbnNvbGUubG9nKGBUb2RvIGl0ZW0gaXMgdXBkYXRlZCBgLG9iailcbiAgICAgICAgICB2YXIgZGVmYXVsdHMgPSBvYmouZGVmYXVsdHMgfHwge307XG4gICAgICAgICAgaWYgKG9iai5jYXQgJiYgb2JqLmNhdC5pZCkge1xuICAgICAgICAgICAgZGVmYXVsdHMgPSB7J2NhdGVnb3J5Jzogb2JqLmNhdC5pZH1cbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy4kY2hpbGRyZW5bMF0uaGFuZGxlT3BlbihvYmouZXZlbnQsIG9iai5pZCwgZGVmYXVsdHMpO1xuICAgICAgICB9KTtcbiAgICAgICAgRXZlbnRCdXMuJG9uKCdwYWdlLW9wZW4nLCBvYmogPT4ge1xuICAgICAgICAgIFxuICAgICAgICAgIC8vY29uc29sZS5sb2coYGV2ZW50YnVzOiBwYWdlLW9wZW4gYCxvYmopXG4gICAgICAgICAgLy9jb25zb2xlLmxvZyhgVG9kbyBpdGVtIGlzIHVwZGF0ZWQgYCxvYmopXG5cbiAgICAgICAgICBcblxuICAgICAgICAgIGlmIChvYmouaWQpIHtcbiAgICAgICAgICAgIHRoaXMucGFnZWlkID0gb2JqLmlkO1xuICAgICAgICAgICAgXG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChvYmoudXJsKSB7XG4gICAgICAgICAgICB0aGlzLnVybCA9IG9iai51cmw7XG4gICAgICAgICAgICB0aGlzLnVybFJhbmRvbSA9IG9iai51cmwrJyZ0PScrIE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqICg5OTk5OTk5IC0gMiArIDEpKSArIDI7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMudXJsUmFuZG9tID0gdGhpcy51cmwrJyZ0PScrIE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqICg5OTk5OTk5IC0gMiArIDEpKSArIDI7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ3NjaW8tZWRpdG9yLW9wZW4nLCBKU09OLnN0cmluZ2lmeSggeydpZCc6IHRoaXMucGFnZWlkLCAndXJsJzogdGhpcy51cmwgfSApICk7XG5cbiAgICAgICAgICB0aGlzLnJlZnJlc2hQYWdlRGF0YSgpO1xuICAgICAgICAgIC8vdGhpcy5yZWZyZXNoQ2F0c1BhZ2VzKCk7XG4gICAgICAgICAgXG4gICAgICAgICAgLy90aGlzLnVybF9zdHJlYW0gPSBvYmouaWQrJyZ0PScrIE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqICg5OTk5OTk5IC0gMiArIDEpKSArIDI7XG4gICAgICAgIH0pO1xuXG5cbiAgICAgICAgRXZlbnRCdXMuJG9uKCdnYWxsZXJ5LW9wZW4nLCBvYmogPT4ge1xuICAgICAgICAgIC8vY29uc29sZS5sb2coYGV2ZW50YnVzOiBnYWxsZXJ5LW9wZW4gYCxvYmopXG4gICAgICAgICAgLy9jb25zb2xlLmxvZyhgVG9kbyBpdGVtIGlzIHVwZGF0ZWQgYCxvYmopXG5cblxuICAgICAgICAgIHRoaXMuJGNoaWxkcmVuWzJdLmhhbmRsZU9wZW4ob2JqKTtcbiAgICAgICAgICAvL2NvbnNvbGUubG9nKHRoaXMucGFnZS5pbWFnZXMpO1xuICAgICAgICB9KTtcblxuICAgICAgICBFdmVudEJ1cy4kb24oJ21lZGlhLW9wZW4nLCBvYmogPT4ge1xuICAgICAgICAgIC8vY29uc29sZS5sb2coYGV2ZW50YnVzOiBnYWxsZXJ5LW9wZW4gYCxvYmopXG4gICAgICAgICAgLy9jb25zb2xlLmxvZyhgVG9kbyBpdGVtIGlzIHVwZGF0ZWQgYCxvYmopXG5cblxuICAgICAgICAgIHRoaXMuJGNoaWxkcmVuWzNdLmhhbmRsZU9wZW4ob2JqKTtcbiAgICAgICAgICAvL2NvbnNvbGUubG9nKHRoaXMucGFnZS5pbWFnZXMpO1xuICAgICAgICB9KTtcblxuXG5cbiAgICAgICAgLy8gU3RhcnQgZGVmYXVsdCBvcGVuXG4gICAgICAgIHZhciBkYiA9IEpTT04ucGFyc2UoIGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdzY2lvLWVkaXRvci1vcGVuJykgfHwgJ3t9JyApO1xuICAgICAgICBpZiAoZGIuaWQpIHtcbiAgICAgICAgICB0aGlzLnBhZ2VpZCA9IGRiLmlkO1xuICAgICAgICB9XG4gICAgICAgIGlmIChkYi51cmwpIHtcbiAgICAgICAgICB0aGlzLnVybCA9IGRiLnVybDtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5wYWdlaWQgJiYgdGhpcy51cmwpIHtcbiAgICAgICAgICBFdmVudEJ1cy4kZW1pdCgncGFnZS1vcGVuJywgeydpZCc6dGhpcy5wYWdlaWQsICd1cmwnOnRoaXMudXJsfSApO1xuICAgICAgICB9XG5cbiAgICAgICAgXG5cbiAgICAgIH0sXG4gICAgICBtZXRob2RzOiB7XG5cbiAgICAgICAgcmVmcmVzaFBhZ2VEYXRhKCkge1xuXG4gICAgICAgICAgLy9jb25zb2xlLmxvZygnLXJlZnJlc2hDYXRlZ29yaWVzJywgdGhpcy5wYWdlaWQpO1xuICAgICAgICAgIHZhciB0aGF0ID0gdGhpcztcblxuICAgICAgICAgIGlmICh0aGlzLnBhZ2VpZCkge1xuICAgICAgICAgICAgZmV0Y2goJ3BhZ2UvanNvbi8nK3RoaXMucGFnZWlkKVxuICAgICAgICAgICAgLnRoZW4oZnVuY3Rpb24ocmVzcG9uc2UpIHtcbiAgICAgICAgICAgICAgLy9jb25zb2xlLmxvZygnYScscmVzcG9uc2UpO1xuICAgICAgICAgICAgICByZXR1cm4gcmVzcG9uc2UuanNvbigpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC50aGVuKGZ1bmN0aW9uKGpzb24pIHtcbiAgICAgICAgICAgICAgLy9jb25zb2xlLmxvZyhqc29uKTtcbiAgICAgICAgICAgICAgLy9jb25zb2xlLmxvZyhKU09OLnN0cmluZ2lmeShteUpzb24pKTtcblxuICAgICAgICAgICAgICB0aGF0LnBhZ2UgPSBqc29uO1xuXG4gICAgICAgICAgICB9KS5jYXRjaChmdW5jdGlvbihlcnIpIHsgIFxuICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdGYWlsZWQgdG8gZmV0Y2ggcGFnZTogJywgZXJyKTsgIFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoYXQucGFnZSA9IGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBcblxuICAgICAgICB9LFxuICAgICAgICByZWZyZXNoRm9ybUZpZWxkcygpIHtcbiAgICAgICAgICB2YXIgdGhhdCA9IHRoaXM7XG5cbiAgICAgICAgICBmZXRjaCgncGFnZXMvZm9ybScpXG4gICAgICAgICAgLnRoZW4oZnVuY3Rpb24ocmVzcG9uc2UpIHtcbiAgICAgICAgICAgIC8vY29uc29sZS5sb2coJ2EnLHJlc3BvbnNlKTtcbiAgICAgICAgICAgIHJldHVybiByZXNwb25zZS5qc29uKCk7XG4gICAgICAgICAgfSlcbiAgICAgICAgICAudGhlbihmdW5jdGlvbihteUpzb24pIHtcbiAgICAgICAgICAgIC8vY29uc29sZS5sb2cobXlKc29uKTtcbiAgICAgICAgICAgIC8vY29uc29sZS5sb2coSlNPTi5zdHJpbmdpZnkobXlKc29uKSk7XG5cbiAgICAgICAgICAgIC8vIGlmIChteUpzb24uY2F0ZWdvcmllcykge1xuICAgICAgICAgICAgLy8gICBteUpzb24uY2F0ZWdvcmllcy5mb3JFYWNoKGZ1bmN0aW9uIChvYmosaSkge1xuICAgICAgICAgICAgLy8gICAgIC8vY29uc29sZS5sb2cob2JqLGkpO1xuICAgICAgICAgICAgLy8gICAgIG9iai50eXBlID0gJyc7XG4gICAgICAgICAgICAvLyAgIH0pXG4gICAgICAgICAgICAvLyB9XG4gICAgICAgICAgICB0aGF0LnBhZ2Vmb3JtID0gbXlKc29uO1xuXG5cbiAgICAgICAgICB9KS5jYXRjaChmdW5jdGlvbihlcnIpIHsgIFxuICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdGYWlsZWQgdG8gZmV0Y2ggcGFnZSBmb3JtOiAnLCBlcnIpOyAgXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICBmZXRjaCgnY2F0ZWdvcmllcy9mb3JtJylcbiAgICAgICAgICAudGhlbihmdW5jdGlvbihyZXNwb25zZSkge1xuICAgICAgICAgICAgLy9jb25zb2xlLmxvZygnYScscmVzcG9uc2UpO1xuICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlLmpzb24oKTtcbiAgICAgICAgICB9KVxuICAgICAgICAgIC50aGVuKGZ1bmN0aW9uKG15SnNvbikge1xuICAgICAgICAgICAgLy9jb25zb2xlLmxvZyhteUpzb24pO1xuICAgICAgICAgICAgLy9jb25zb2xlLmxvZyhKU09OLnN0cmluZ2lmeShteUpzb24pKTtcblxuICAgICAgICAgICAgLy8gaWYgKG15SnNvbi5jYXRlZ29yaWVzKSB7XG4gICAgICAgICAgICAvLyAgIG15SnNvbi5jYXRlZ29yaWVzLmZvckVhY2goZnVuY3Rpb24gKG9iaixpKSB7XG4gICAgICAgICAgICAvLyAgICAgLy9jb25zb2xlLmxvZyhvYmosaSk7XG4gICAgICAgICAgICAvLyAgICAgb2JqLnR5cGUgPSAnJztcbiAgICAgICAgICAgIC8vICAgfSlcbiAgICAgICAgICAgIC8vIH1cbiAgICAgICAgICAgIHRoYXQuY2F0Zm9ybSA9IG15SnNvbjtcblxuXG4gICAgICAgICAgfSkuY2F0Y2goZnVuY3Rpb24oZXJyKSB7ICBcbiAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignRmFpbGVkIHRvIGZldGNoIGNhdGVnb3JlcyBmb3JtOiAnLCBlcnIpOyAgXG4gICAgICAgICAgfSk7XG5cblxuXG4gICAgICAgIH0sXG4gICAgICAgIHJlZnJlc2hDYXRzUGFnZXMoKSB7XG5cbiAgICAgICAgICAvL2NvbnNvbGUubG9nKCctcmVmcmVzaENhdGVnb3JpZXMnLCB0aGlzLnBhcmVudCk7XG4gICAgICAgICAgdmFyIHRoYXQgPSB0aGlzO1xuXG4gICAgICAgICAgZmV0Y2goJ2NhdGVnb3JpZXMvcGFnZXMnKVxuICAgICAgICAgIC50aGVuKGZ1bmN0aW9uKHJlc3BvbnNlKSB7XG4gICAgICAgICAgICAvL2NvbnNvbGUubG9nKCdhJyxyZXNwb25zZSk7XG4gICAgICAgICAgICByZXR1cm4gcmVzcG9uc2UuanNvbigpO1xuICAgICAgICAgIH0pXG4gICAgICAgICAgLnRoZW4oZnVuY3Rpb24obXlKc29uKSB7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIC8vY29uc29sZS5sb2cobXlKc29uKTtcbiAgICAgICAgICAgIC8vY29uc29sZS5sb2coSlNPTi5zdHJpbmdpZnkobXlKc29uKSk7XG5cbiAgICAgICAgICAgIC8vIGlmIChteUpzb24uY2F0ZWdvcmllcykge1xuICAgICAgICAgICAgLy8gICBteUpzb24uY2F0ZWdvcmllcy5mb3JFYWNoKGZ1bmN0aW9uIChvYmosaSkge1xuICAgICAgICAgICAgLy8gICAgIC8vY29uc29sZS5sb2cob2JqLGkpO1xuICAgICAgICAgICAgLy8gICAgIG9iai50eXBlID0gJyc7XG4gICAgICAgICAgICAvLyAgIH0pXG4gICAgICAgICAgICAvLyB9XG4gICAgICAgICAgICAvL2NvbnNvbGUubG9nKG15SnNvbi5wYWdlcyk7XG5cbiAgICAgICAgICAgIC8vdmFyIGNvbmZpZyA9IEpTT04ucGFyc2UoIGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdzY2lvLWVkaXRvci10cmVlJykgfHwgJ3t9JyApO1xuXG4gICAgICAgICAgICAvL2NvbnNvbGUubG9nKGNvbmZpZyk7XG5cbiAgICAgICAgICAgIC8vIGlmICggY29uZmlnW2NhdC51cmxdICkge1xuICAgICAgICAgICAgLy8gICBjYXQuaXNBY3RpdmUgPSB0cnVlO1xuICAgICAgICAgICAgLy8gfVxuXG4gICAgICAgICAgICB0aGF0LmNhdHNwYWdlcyA9IG15SnNvbjtcblxuXG4gICAgICAgICAgfSkuY2F0Y2goZnVuY3Rpb24oZXJyKSB7ICBcbiAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignRmFpbGVkIHRvIGZldGNoIHBhZ2U6ICcsIGVycik7ICBcbiAgICAgICAgICB9KTtcblxuICAgICAgICB9XG5cbiAgICAgIH1cbiAgIH1cbjwvc2NyaXB0PlxuIFxuPHN0eWxlIHNjb3BlZD5cbiAgLmVkaXRvciB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBoZWlnaHQ6IDEwMCU7XG4gIH1cbiAgLnRyZWUge1xuICAgIGZsZXg6IDE7XG4gIH1cbiAgLnBhZ2Uge1xuICAgIGZsZXg6IDI7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBwYWRkaW5nLXJpZ2h0OiAydnc7XG4gICAgcGFkZGluZy1sZWZ0OjJ2dztcbiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICB9XG4gIC5wcmV2aWV3IHtcbiAgICBmbGV4OiAxO1xuICB9XG48L3N0eWxlPiJdLCJzb3VyY2VSb290IjoiIn0=*/