@sbb-esta/lyne-elements-experimental 3.3.2 → 3.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/custom-elements.json +33 -173
- package/development/seat-reservation/common/translations/i18n.js +4 -4
- package/development/seat-reservation/seat-reservation/seat-reservation-base-element.d.ts +5 -0
- package/development/seat-reservation/seat-reservation/seat-reservation-base-element.d.ts.map +1 -1
- package/development/seat-reservation/seat-reservation/seat-reservation-base-element.js +15 -3
- package/development/seat-reservation/seat-reservation/seat-reservation.component.d.ts +0 -1
- package/development/seat-reservation/seat-reservation/seat-reservation.component.d.ts.map +1 -1
- package/development/seat-reservation/seat-reservation/seat-reservation.component.js +41 -49
- package/development/seat-reservation/seat-reservation-graphic/seat-reservation-assets.js +5 -5
- package/development/seat-reservation/seat-reservation-graphic/seat-reservation-graphic.component.d.ts +1 -10
- package/development/seat-reservation/seat-reservation-graphic/seat-reservation-graphic.component.d.ts.map +1 -1
- package/development/seat-reservation/seat-reservation-graphic/seat-reservation-graphic.component.js +4 -83
- package/development/seat-reservation/seat-reservation-navigation-coach/seat-reservation-navigation-coach.component.d.ts.map +1 -1
- package/development/seat-reservation/seat-reservation-navigation-coach/seat-reservation-navigation-coach.component.js +16 -17
- package/development/seat-reservation/seat-reservation-navigation-services/seat-reservation-navigation-services.component.d.ts.map +1 -1
- package/development/seat-reservation/seat-reservation-navigation-services/seat-reservation-navigation-services.component.js +11 -14
- package/development/seat-reservation/seat-reservation-place-control/seat-reservation-place-control.component.d.ts +0 -8
- package/development/seat-reservation/seat-reservation-place-control/seat-reservation-place-control.component.d.ts.map +1 -1
- package/development/seat-reservation/seat-reservation-place-control/seat-reservation-place-control.component.js +20 -87
- package/development/seat-reservation/seat-reservation-scoped/seat-reservation-scoped.component.js +2 -4
- package/package.json +2 -2
- package/seat-reservation/common/translations/i18n.js +3 -3
- package/seat-reservation/seat-reservation/seat-reservation-base-element.d.ts +5 -0
- package/seat-reservation/seat-reservation/seat-reservation-base-element.d.ts.map +1 -1
- package/seat-reservation/seat-reservation/seat-reservation-base-element.js +24 -14
- package/seat-reservation/seat-reservation/seat-reservation.component.d.ts +0 -1
- package/seat-reservation/seat-reservation/seat-reservation.component.d.ts.map +1 -1
- package/seat-reservation/seat-reservation/seat-reservation.component.js +129 -134
- package/seat-reservation/seat-reservation-graphic/seat-reservation-assets.js +6 -6
- package/seat-reservation/seat-reservation-graphic/seat-reservation-graphic.component.d.ts +1 -10
- package/seat-reservation/seat-reservation-graphic/seat-reservation-graphic.component.d.ts.map +1 -1
- package/seat-reservation/seat-reservation-graphic/seat-reservation-graphic.component.js +47 -90
- package/seat-reservation/seat-reservation-navigation-coach/seat-reservation-navigation-coach.component.d.ts.map +1 -1
- package/seat-reservation/seat-reservation-navigation-coach/seat-reservation-navigation-coach.component.js +75 -76
- package/seat-reservation/seat-reservation-navigation-services/seat-reservation-navigation-services.component.d.ts.map +1 -1
- package/seat-reservation/seat-reservation-navigation-services/seat-reservation-navigation-services.component.js +32 -35
- package/seat-reservation/seat-reservation-place-control/seat-reservation-place-control.component.d.ts +0 -8
- package/seat-reservation/seat-reservation-place-control/seat-reservation-place-control.component.d.ts.map +1 -1
- package/seat-reservation/seat-reservation-place-control/seat-reservation-place-control.component.js +92 -129
- package/seat-reservation/seat-reservation-scoped/seat-reservation-scoped.component.js +2 -2
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { __esDecorate, __runInitializers } from "tslib";
|
|
2
2
|
import { SbbLanguageController } from "@sbb-esta/lyne-elements/core/controllers.js";
|
|
3
|
-
import { css,
|
|
3
|
+
import { css, html, nothing } from "lit";
|
|
4
4
|
import { customElement } from "lit/decorators.js";
|
|
5
5
|
import { classMap } from "lit/directives/class-map.js";
|
|
6
6
|
import { styleMap } from "lit/directives/style-map.js";
|
|
@@ -271,78 +271,78 @@ const style = css`*,
|
|
|
271
271
|
outline: 0;
|
|
272
272
|
}
|
|
273
273
|
|
|
274
|
-
.sbb-sr
|
|
274
|
+
:host([align-vertical]) .sbb-sr {
|
|
275
275
|
grid-template-columns: calc((var(--sbb-seat-reservation-height) + 24) * var(--sbb-seat-reservation-one-px-rem, 0.0625rem)) 1fr;
|
|
276
276
|
grid-template-rows: 20% 60% 20%;
|
|
277
277
|
}
|
|
278
|
-
.sbb-sr
|
|
278
|
+
:host([align-vertical]) .sbb-sr .sbb-sr-navigation-first-grid {
|
|
279
279
|
grid-column: 2/3;
|
|
280
280
|
grid-row-start: 1;
|
|
281
281
|
}
|
|
282
|
-
.sbb-sr
|
|
282
|
+
:host([align-vertical]) .sbb-sr .sbb-sr-navigation-first-grid #first-tab-element {
|
|
283
283
|
position: absolute;
|
|
284
284
|
inset-block-end: calc(16 * var(--sbb-seat-reservation-one-px-rem, 0.0625rem));
|
|
285
285
|
inset-inline-start: calc(16 * var(--sbb-seat-reservation-one-px-rem, 0.0625rem));
|
|
286
286
|
inset-inline-end: initial;
|
|
287
287
|
rotate: 90deg;
|
|
288
288
|
}
|
|
289
|
-
.sbb-sr
|
|
289
|
+
:host([align-vertical]) .sbb-sr .sbb-sr-navigation-last-grid {
|
|
290
290
|
grid-column: 2/3;
|
|
291
291
|
grid-row: 3/4;
|
|
292
292
|
}
|
|
293
|
-
.sbb-sr
|
|
293
|
+
:host([align-vertical]) .sbb-sr .sbb-sr-navigation-last-grid #last-tab-element {
|
|
294
294
|
inset-block-start: calc(16 * var(--sbb-seat-reservation-one-px-rem, 0.0625rem));
|
|
295
295
|
inset-inline-start: calc(16 * var(--sbb-seat-reservation-one-px-rem, 0.0625rem));
|
|
296
296
|
rotate: 90deg;
|
|
297
297
|
}
|
|
298
|
-
.sbb-sr
|
|
298
|
+
:host([align-vertical]) .sbb-sr .sbb-sr-navigation-wrapper {
|
|
299
299
|
padding-block-end: initial;
|
|
300
300
|
padding-inline-start: calc(16 * var(--sbb-seat-reservation-one-px-rem, 0.0625rem));
|
|
301
301
|
}
|
|
302
|
-
.sbb-sr
|
|
302
|
+
:host([align-vertical]) .sbb-sr .sbb-sr__component {
|
|
303
303
|
grid-column: 1/3;
|
|
304
304
|
grid-row: 1/4;
|
|
305
305
|
}
|
|
306
|
-
.sbb-sr
|
|
306
|
+
:host([align-vertical]) .sbb-sr .sbb-sr-grid-inner {
|
|
307
307
|
grid-template-columns: calc((var(--sbb-seat-reservation-height) + 24) * var(--sbb-seat-reservation-one-px-rem, 0.0625rem)) 1fr;
|
|
308
308
|
grid-template-rows: 20% 60% 20%;
|
|
309
309
|
}
|
|
310
|
-
.sbb-sr
|
|
310
|
+
:host([align-vertical]) .sbb-sr .sbb-sr-grid-inner .nav-grid {
|
|
311
311
|
grid-column: 2/3;
|
|
312
312
|
grid-row: 2/3;
|
|
313
313
|
height: 100%;
|
|
314
314
|
}
|
|
315
|
-
.sbb-sr
|
|
315
|
+
:host([align-vertical]) .sbb-sr .sbb-sr-grid-inner .nav-grid .sbb-sr-navigation {
|
|
316
316
|
display: block;
|
|
317
317
|
overflow: hidden scroll;
|
|
318
318
|
height: 100%;
|
|
319
319
|
}
|
|
320
|
-
.sbb-sr
|
|
320
|
+
:host([align-vertical]) .sbb-sr .sbb-sr-grid-inner .nav-grid .sbb-sr-navigation .sbb-sr-navigation__list-coaches {
|
|
321
321
|
flex-direction: column;
|
|
322
322
|
padding: calc(2 * var(--sbb-seat-reservation-one-px-rem, 0.0625rem));
|
|
323
323
|
}
|
|
324
|
-
.sbb-sr
|
|
324
|
+
:host([align-vertical]) .sbb-sr .sbb-sr-grid-inner .coaches-grid {
|
|
325
325
|
grid-column: 1/2;
|
|
326
326
|
grid-row: 1/4;
|
|
327
327
|
overflow: hidden;
|
|
328
328
|
position: relative;
|
|
329
329
|
}
|
|
330
|
-
.sbb-sr
|
|
330
|
+
:host([align-vertical]) .sbb-sr .sbb-sr-grid-inner .coaches-grid .sbb-sr__wrapper-coach-decks {
|
|
331
331
|
flex-direction: column;
|
|
332
332
|
}
|
|
333
|
-
.sbb-sr
|
|
333
|
+
:host([align-vertical]) .sbb-sr .sbb-sr-grid-inner .coaches-grid .sbb-sr__wrapper-coach-decks .sbb-sr__wrapper-deck-labels {
|
|
334
334
|
flex-direction: column-reverse;
|
|
335
335
|
width: calc(100% - 24 * var(--sbb-seat-reservation-one-px-rem, 0.0625rem));
|
|
336
336
|
height: initial;
|
|
337
337
|
}
|
|
338
|
-
.sbb-sr
|
|
338
|
+
:host([align-vertical]) .sbb-sr .sbb-sr-grid-inner .coaches-grid .sbb-sr__wrapper-coach-decks .sbb-sr__wrapper-deck-labels b {
|
|
339
339
|
width: calc(50% - 16 * var(--sbb-seat-reservation-one-px-rem, 0.0625rem));
|
|
340
340
|
height: calc(20 * var(--sbb-seat-reservation-one-px-rem, 0.0625rem));
|
|
341
341
|
margin-bottom: 16px;
|
|
342
342
|
rotate: initial;
|
|
343
343
|
writing-mode: initial;
|
|
344
344
|
}
|
|
345
|
-
.sbb-sr
|
|
345
|
+
:host([align-vertical]) .sbb-sr .sbb-sr-grid-inner .coaches-grid .sbb-sr__wrapper-coach-decks .sbb-sr__wrapper {
|
|
346
346
|
--sbb-scrollbar-thumb-width: 0.125rem;
|
|
347
347
|
--sbb-scrollbar-thumb-width-hover: 0.25rem;
|
|
348
348
|
--sbb-scrollbar-width-firefox: thin;
|
|
@@ -351,39 +351,39 @@ const style = css`*,
|
|
|
351
351
|
--sbb-scrollbar-track-color: transparent;
|
|
352
352
|
--sbb-scrollbar-width: var(--sbb-spacing-fixed-3x);
|
|
353
353
|
}
|
|
354
|
-
.sbb-sr
|
|
354
|
+
:host([align-vertical]) .sbb-sr .sbb-sr-grid-inner .coaches-grid .sbb-sr__wrapper-coach-decks .sbb-sr__wrapper::-webkit-scrollbar {
|
|
355
355
|
width: var(--sbb-scrollbar-width);
|
|
356
356
|
height: var(--sbb-scrollbar-width);
|
|
357
357
|
background-color: var(--sbb-scrollbar-track-color, transparent);
|
|
358
358
|
}
|
|
359
|
-
.sbb-sr
|
|
359
|
+
:host([align-vertical]) .sbb-sr .sbb-sr-grid-inner .coaches-grid .sbb-sr__wrapper-coach-decks .sbb-sr__wrapper::-webkit-scrollbar-corner {
|
|
360
360
|
background-color: var(--sbb-scrollbar-track-color, transparent);
|
|
361
361
|
}
|
|
362
|
-
.sbb-sr
|
|
362
|
+
:host([align-vertical]) .sbb-sr .sbb-sr-grid-inner .coaches-grid .sbb-sr__wrapper-coach-decks .sbb-sr__wrapper::-webkit-scrollbar-thumb {
|
|
363
363
|
background-color: var(--sbb-scrollbar-color, currentcolor);
|
|
364
364
|
border: calc(0.5 * (var(--sbb-scrollbar-width) - var(--sbb-scrollbar-thumb-width))) solid transparent;
|
|
365
365
|
border-radius: var(--sbb-border-radius-4x);
|
|
366
366
|
background-clip: padding-box;
|
|
367
367
|
}
|
|
368
|
-
.sbb-sr
|
|
368
|
+
:host([align-vertical]) .sbb-sr .sbb-sr-grid-inner .coaches-grid .sbb-sr__wrapper-coach-decks .sbb-sr__wrapper::-webkit-scrollbar-thumb:hover {
|
|
369
369
|
background-color: var(--sbb-scrollbar-color-hover, currentcolor);
|
|
370
370
|
border-width: calc(0.5 * (var(--sbb-scrollbar-width) - var(--sbb-scrollbar-thumb-width-hover)));
|
|
371
371
|
}
|
|
372
|
-
.sbb-sr
|
|
372
|
+
:host([align-vertical]) .sbb-sr .sbb-sr-grid-inner .coaches-grid .sbb-sr__wrapper-coach-decks .sbb-sr__wrapper::-webkit-scrollbar-button, :host([align-vertical]) .sbb-sr .sbb-sr-grid-inner .coaches-grid .sbb-sr__wrapper-coach-decks .sbb-sr__wrapper::-webkit-scrollbar-corner {
|
|
373
373
|
display: none;
|
|
374
374
|
}
|
|
375
375
|
@supports not selector(::-webkit-scrollbar) {
|
|
376
|
-
.sbb-sr
|
|
376
|
+
:host([align-vertical]) .sbb-sr .sbb-sr-grid-inner .coaches-grid .sbb-sr__wrapper-coach-decks .sbb-sr__wrapper {
|
|
377
377
|
scrollbar-width: var(--sbb-scrollbar-width-firefox);
|
|
378
378
|
scrollbar-color: var(--sbb-scrollbar-color, currentcolor) var(--sbb-scrollbar-track-color, transparent);
|
|
379
379
|
}
|
|
380
380
|
}
|
|
381
|
-
.sbb-sr
|
|
381
|
+
:host([align-vertical]) .sbb-sr .sbb-sr-grid-inner .coaches-grid .sbb-sr__wrapper-coach-decks .sbb-sr__wrapper {
|
|
382
382
|
overflow: hidden scroll;
|
|
383
383
|
height: 100%;
|
|
384
384
|
padding: 0;
|
|
385
385
|
}
|
|
386
|
-
.sbb-sr
|
|
386
|
+
:host([align-vertical]) .sbb-sr .sbb-sr-grid-inner .coaches-grid .sbb-sr__wrapper-coach-decks .sbb-sr__parent {
|
|
387
387
|
rotate: 90deg;
|
|
388
388
|
transform-origin: calc((var(--sbb-seat-reservation-height) + 24 - 24 - 6 * (var(--sbb-seat-reservation-decks) - 1)) / 2 * var(--sbb-seat-reservation-one-px-rem, 0.0625rem)) calc((var(--sbb-seat-reservation-height) + 24 - 24 - 6 * (var(--sbb-seat-reservation-decks) - 1)) / 2 * var(--sbb-seat-reservation-one-px-rem, 0.0625rem));
|
|
389
389
|
}`;
|
|
@@ -428,22 +428,13 @@ let SbbSeatReservationElement = (() => {
|
|
|
428
428
|
});
|
|
429
429
|
}
|
|
430
430
|
render() {
|
|
431
|
-
if (!isServer) {
|
|
432
|
-
this._determineBaseFontSize();
|
|
433
|
-
}
|
|
434
431
|
this._initVehicleSeatReservationConstruction();
|
|
435
432
|
return this._coachesHtmlTemplate || null;
|
|
436
433
|
}
|
|
437
|
-
_determineBaseFontSize() {
|
|
438
|
-
const baseFontSize = parseInt(window.getComputedStyle(document.body).fontSize, 10);
|
|
439
|
-
const onePixelInRem = 1 / baseFontSize;
|
|
440
|
-
this.style?.setProperty("--sbb-seat-reservation-one-px-rem", `${onePixelInRem + "rem"}`);
|
|
441
|
-
}
|
|
442
434
|
_initVehicleSeatReservationConstruction() {
|
|
443
|
-
const classAlignVertical = this.alignVertical ? "sbb-sr__grid--vertical" : "";
|
|
444
435
|
this._coachesHtmlTemplate = html`
|
|
445
436
|
<div class="sbb-sr__container">
|
|
446
|
-
<div class="sbb-sr sbb-sr__grid
|
|
437
|
+
<div class="sbb-sr sbb-sr__grid">
|
|
447
438
|
<div class="sbb-sr-navigation-first-grid">
|
|
448
439
|
${this._renderNavigationControlButton("DIRECTION_LEFT")}
|
|
449
440
|
</div>
|
|
@@ -650,6 +641,7 @@ let SbbSeatReservationElement = (() => {
|
|
|
650
641
|
return places?.map((place, index) => {
|
|
651
642
|
const calculatedDimension = this.getCalculatedDimension(place.dimension);
|
|
652
643
|
const calculatedPosition = this.getCalculatedPosition(place.position);
|
|
644
|
+
const rotation = place.rotation || 0;
|
|
653
645
|
const textRotation = this.alignVertical ? -90 : 0;
|
|
654
646
|
return html`
|
|
655
647
|
<td
|
|
@@ -658,23 +650,21 @@ let SbbSeatReservationElement = (() => {
|
|
|
658
650
|
>
|
|
659
651
|
<sbb-seat-reservation-place-control
|
|
660
652
|
style=${styleMap({
|
|
653
|
+
"--sbb-seat-reservation-place-control-text-scale-value": Math.min(calculatedDimension.w, calculatedDimension.h),
|
|
661
654
|
"--sbb-seat-reservation-place-control-width": calculatedDimension.w,
|
|
662
655
|
"--sbb-seat-reservation-place-control-height": calculatedDimension.h,
|
|
663
656
|
"--sbb-seat-reservation-place-control-top": calculatedPosition.y,
|
|
664
|
-
"--sbb-seat-reservation-place-control-left": calculatedPosition.x
|
|
657
|
+
"--sbb-seat-reservation-place-control-left": calculatedPosition.x,
|
|
658
|
+
"--sbb-seat-reservation-place-control-rotation": rotation,
|
|
659
|
+
"--sbb-seat-reservation-place-control-text-rotation": textRotation
|
|
665
660
|
})}
|
|
666
661
|
@selectplace=${(selectPlaceEvent) => this._onSelectPlace(selectPlaceEvent)}
|
|
667
662
|
exportparts="sbb-sr-place-part"
|
|
668
663
|
id="seat-reservation__place-button-${deckIndex}-${coachIndex}-${place.number}"
|
|
669
664
|
class="seat-reservation-place-control"
|
|
670
|
-
data-cell-id="${coachIndex}-${place.position.y}-${index}"
|
|
671
665
|
text=${place.number}
|
|
672
666
|
type=${place.type}
|
|
673
667
|
state=${place.state}
|
|
674
|
-
width=${place.dimension.w * this.baseGridSize}
|
|
675
|
-
height=${place.dimension.h * this.baseGridSize}
|
|
676
|
-
rotation=${place.rotation ?? nothing}
|
|
677
|
-
text-rotation=${textRotation}
|
|
678
668
|
coach-index=${coachIndex}
|
|
679
669
|
deck-index=${deckIndex}
|
|
680
670
|
.propertyIds=${place.propertyIds}
|
|
@@ -736,10 +726,12 @@ let SbbSeatReservationElement = (() => {
|
|
|
736
726
|
>
|
|
737
727
|
${areaProperty ? html`
|
|
738
728
|
<sbb-seat-reservation-graphic
|
|
729
|
+
style=${styleMap({
|
|
730
|
+
"--sbb-seat-reservation-graphic-width": this.baseGridSize,
|
|
731
|
+
"--sbb-seat-reservation-graphic-height": this.baseGridSize,
|
|
732
|
+
"--sbb-seat-reservation-graphic-rotation": rotation
|
|
733
|
+
})}
|
|
739
734
|
name=${areaProperty}
|
|
740
|
-
width=${this.baseGridSize}
|
|
741
|
-
height=${this.baseGridSize}
|
|
742
|
-
rotation=${rotation}
|
|
743
735
|
role="img"
|
|
744
736
|
aria-hidden="true"
|
|
745
737
|
></sbb-seat-reservation-graphic>
|
|
@@ -758,10 +750,10 @@ let SbbSeatReservationElement = (() => {
|
|
|
758
750
|
"--sbb-seat-reservation-graphic-height": calculatedDimension.h,
|
|
759
751
|
"--sbb-seat-reservation-graphic-top": calculatedPosition.y,
|
|
760
752
|
"--sbb-seat-reservation-graphic-left": calculatedPosition.x,
|
|
761
|
-
"--sbb-seat-reservation-graphic-position": "absolute"
|
|
753
|
+
"--sbb-seat-reservation-graphic-position": "absolute",
|
|
754
|
+
"--sbb-seat-reservation-graphic-rotation": rotation
|
|
762
755
|
})}
|
|
763
756
|
name=${icon ?? nothing}
|
|
764
|
-
rotation=${rotation}
|
|
765
757
|
aria-hidden="true"
|
|
766
758
|
?stretch=${true}
|
|
767
759
|
></sbb-seat-reservation-graphic>`;
|
|
@@ -784,11 +776,11 @@ let SbbSeatReservationElement = (() => {
|
|
|
784
776
|
"--sbb-seat-reservation-graphic-height": calculatedDimension.h,
|
|
785
777
|
"--sbb-seat-reservation-graphic-top": calculatedPosition.y,
|
|
786
778
|
"--sbb-seat-reservation-graphic-left": calculatedPosition.x,
|
|
787
|
-
"--sbb-seat-reservation-graphic-position": "absolute"
|
|
779
|
+
"--sbb-seat-reservation-graphic-position": "absolute",
|
|
780
|
+
"--sbb-seat-reservation-graphic-rotation": elementFixedRotation
|
|
788
781
|
})}
|
|
789
782
|
class="sbb-seat-reservation-graphic--cursor-pointer"
|
|
790
783
|
name=${serviceElement.icon ?? nothing}
|
|
791
|
-
.rotation=${elementFixedRotation}
|
|
792
784
|
role="img"
|
|
793
785
|
aria-hidden="true"
|
|
794
786
|
></sbb-seat-reservation-graphic>
|
|
@@ -900,4 +892,4 @@ let SbbSeatReservationElement = (() => {
|
|
|
900
892
|
export {
|
|
901
893
|
SbbSeatReservationElement
|
|
902
894
|
};
|
|
903
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VhdC1yZXNlcnZhdGlvbi5jb21wb25lbnQuanMiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9lbGVtZW50cy1leHBlcmltZW50YWwvc2VhdC1yZXNlcnZhdGlvbi9zZWF0LXJlc2VydmF0aW9uL3NlYXQtcmVzZXJ2YXRpb24uY29tcG9uZW50LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFNiYkxhbmd1YWdlQ29udHJvbGxlciB9IGZyb20gJ0BzYmItZXN0YS9seW5lLWVsZW1lbnRzL2NvcmUvY29udHJvbGxlcnMuanMnO1xuaW1wb3J0IHsgaHRtbCwgaXNTZXJ2ZXIsIG5vdGhpbmcgfSBmcm9tICdsaXQnO1xuaW1wb3J0IHR5cGUgeyBDU1NSZXN1bHRHcm91cCwgUHJvcGVydHlWYWx1ZXMsIFRlbXBsYXRlUmVzdWx0IH0gZnJvbSAnbGl0JztcbmltcG9ydCB7IGN1c3RvbUVsZW1lbnQgfSBmcm9tICdsaXQvZGVjb3JhdG9ycy5qcyc7XG5pbXBvcnQgeyBjbGFzc01hcCB9IGZyb20gJ2xpdC9kaXJlY3RpdmVzL2NsYXNzLW1hcC5qcyc7XG5pbXBvcnQgeyBzdHlsZU1hcCB9IGZyb20gJ2xpdC9kaXJlY3RpdmVzL3N0eWxlLW1hcC5qcyc7XG5cbmltcG9ydCB7IGdldEkxOG5TZWF0UmVzZXJ2YXRpb24gfSBmcm9tICcuLi9jb21tb24uanMnO1xuaW1wb3J0IHR5cGUge1xuICBDb2FjaEl0ZW0sXG4gIFBsYWNlLFxuICBFbGVtZW50RGltZW5zaW9uLFxuICBCYXNlRWxlbWVudCxcbiAgUGxhY2VTZWxlY3Rpb24sXG4gIFNlYXRSZXNlcnZhdGlvbixcbn0gZnJvbSAnLi4vY29tbW9uLmpzJztcblxuaW1wb3J0IHsgU2VhdFJlc2VydmF0aW9uQmFzZUVsZW1lbnQgfSBmcm9tICcuL3NlYXQtcmVzZXJ2YXRpb24tYmFzZS1lbGVtZW50LmpzJztcbmltcG9ydCBzdHlsZSBmcm9tICcuL3NlYXQtcmVzZXJ2YXRpb24uc2Nzcz9saXQmaW5saW5lJztcblxuaW1wb3J0ICdAc2JiLWVzdGEvbHluZS1lbGVtZW50cy9idXR0b24uanMnO1xuaW1wb3J0ICdAc2JiLWVzdGEvbHluZS1lbGVtZW50cy9zY3JlZW4tcmVhZGVyLW9ubHkuanMnO1xuaW1wb3J0ICcuLi9zZWF0LXJlc2VydmF0aW9uLWFyZWEuanMnO1xuaW1wb3J0ICcuLi9zZWF0LXJlc2VydmF0aW9uLWdyYXBoaWMuanMnO1xuaW1wb3J0ICcuLi9zZWF0LXJlc2VydmF0aW9uLXBsYWNlLWNvbnRyb2wuanMnO1xuaW1wb3J0ICcuLi9zZWF0LXJlc2VydmF0aW9uLW5hdmlnYXRpb24tY29hY2guanMnO1xuaW1wb3J0ICcuLi9zZWF0LXJlc2VydmF0aW9uLXNjb3BlZC5qcyc7XG5pbXBvcnQgJ0BzYmItZXN0YS9seW5lLWVsZW1lbnRzL3BvcG92ZXIvcG9wb3Zlci5qcyc7XG5cbi8qKlxuICogTWFpbiBjb21wb25lbnQgZm9yIHRoZSBzZWF0IHJlc2VydmF0aW9uLlxuICpcbiAqL1xuZXhwb3J0XG5AY3VzdG9tRWxlbWVudCgnc2JiLXNlYXQtcmVzZXJ2YXRpb24nKVxuY2xhc3MgU2JiU2VhdFJlc2VydmF0aW9uRWxlbWVudCBleHRlbmRzIFNlYXRSZXNlcnZhdGlvbkJhc2VFbGVtZW50IHtcbiAgcHVibGljIHN0YXRpYyBvdmVycmlkZSBzdHlsZXM6IENTU1Jlc3VsdEdyb3VwID0gc3R5bGU7XG5cbiAgcHJpdmF0ZSBfbGFuZ3VhZ2UgPSBuZXcgU2JiTGFuZ3VhZ2VDb250cm9sbGVyKHRoaXMpO1xuICBwcml2YXRlIF9jb2FjaGVzSHRtbFRlbXBsYXRlPzogVGVtcGxhdGVSZXN1bHQ7XG4gIC8vIEdyYXBoaWNzIHRoYXQgc2hvdWxkIG5vdCBiZSByZW5kZXJlZCB3aXRoIGFuIGFyZWFcbiAgcHJpdmF0ZSBfbm90QXJlYUVsZW1lbnRzID0gW1xuICAgICdEUklWRVJfQVJFQScsXG4gICAgJ0NPQUNIX1BBU1NBR0UnLFxuICAgICdDT0FDSF9XQUxMX05PX1BBU1NBR0UnLFxuICAgICdDT01QQVJUTUVOVF9QQVNTQUdFJyxcbiAgICAnQ09NUEFSVE1FTlRfUEFTU0FHRV9ISUdIJyxcbiAgICAnQ09NUEFSVE1FTlRfUEFTU0FHRV9NSURETEUnLFxuICAgICdDT01QQVJUTUVOVF9QQVNTQUdFX0xPVycsXG4gIF07XG5cbiAgLy8gQXJlYSBpY29ucyB0aGF0IHNob3VsZCBub3QgYmUgZml4ZWQgZHVyaW5nIHJvdGF0aW9uIHdoZW4gdmVydGljYWwgbW9kZSBpcyBzZWxlY3RlZFxuICBwcml2YXRlIF9ub3RGaXhlZFJvdGF0YWJsZUFyZWFJY29ucyA9IFsnRU5UUllfRVhJVCddO1xuXG4gIHByb3RlY3RlZCBvdmVycmlkZSB3aWxsVXBkYXRlKGNoYW5nZWRQcm9wZXJ0aWVzOiBQcm9wZXJ0eVZhbHVlczx0aGlzPik6IHZvaWQge1xuICAgIHN1cGVyLndpbGxVcGRhdGUoY2hhbmdlZFByb3BlcnRpZXMpO1xuXG4gICAgaWYgKGNoYW5nZWRQcm9wZXJ0aWVzLmhhcygnaGFzTmF2aWdhdGlvbicpKSB7XG4gICAgICBpZiAodGhpcy5oYXNOYXZpZ2F0aW9uKSB7XG4gICAgICAgIHRoaXMuc2hhZG93Um9vdFxuICAgICAgICAgID8ucXVlcnlTZWxlY3RvckFsbCgndGFibGUnKVxuICAgICAgICAgIC5mb3JFYWNoKCh0YWJsZSkgPT4gdGFibGUucmVtb3ZlQXR0cmlidXRlKCd0YWJpbmRleCcpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuc2hhZG93Um9vdFxuICAgICAgICAgID8ucXVlcnlTZWxlY3RvckFsbCgndGFibGUnKVxuICAgICAgICAgIC5mb3JFYWNoKCh0YWJsZSkgPT4gdGFibGUuc2V0QXR0cmlidXRlKCd0YWJpbmRleCcsICcwJykpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBvdmVycmlkZSBmaXJzdFVwZGF0ZWQoY2hhbmdlZFByb3BlcnRpZXM6IFByb3BlcnR5VmFsdWVzPHRoaXM+KTogdm9pZCB7XG4gICAgc3VwZXIuZmlyc3RVcGRhdGVkKGNoYW5nZWRQcm9wZXJ0aWVzKTtcblxuICAgIC8vIFdlIG5lZWQgdG8gd2FpdCB1bnRpbCB0aGUgZmlyc3QgdXBkYXRlIGlzIGNvbXBsZXRlIHRvIGluaXQgZGlmZmVyZW50IGh0bWwgZWxlbWVudCBkaW1lbnNpb25zXG4gICAgdGhpcy51cGRhdGVDb21wbGV0ZS50aGVuKCgpID0+IHtcbiAgICAgIHRoaXMuaW5pdFByZXBhaXJTZWF0UmVzZXJ2YXRpb25EYXRhKCk7XG4gICAgICB0aGlzLmluaXROYXZpZ2F0aW9uU2VsZWN0aW9uQnlTY3JvbGxFdmVudCgpO1xuXG4gICAgICAvLyBXZSBoYXZlIHRvIGluaXRpYXRlIHRoZSByZW5kZXIgcHJvY2VzcyBtYW51YWxseSBzbyB0aGF0IHRoZSBwcmVwYXJlZCBkYXRhIGlzIGFwcGxpZWQgZGlyZWN0bHlcbiAgICAgIC8vIGFuZCBub3Qgb25seSBhZnRlciBhbiBpbnRlcmFjdGlvbiB3aXRoIHRoZSBjb21wb25lbnQgaXRzZWxmXG4gICAgICB0aGlzLnJlcXVlc3RVcGRhdGUoKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBvdmVycmlkZSByZW5kZXIoKTogVGVtcGxhdGVSZXN1bHQgfCBudWxsIHtcbiAgICBpZiAoIWlzU2VydmVyKSB7XG4gICAgICB0aGlzLl9kZXRlcm1pbmVCYXNlRm9udFNpemUoKTtcbiAgICB9XG5cbiAgICB0aGlzLl9pbml0VmVoaWNsZVNlYXRSZXNlcnZhdGlvbkNvbnN0cnVjdGlvbigpO1xuICAgIHJldHVybiB0aGlzLl9jb2FjaGVzSHRtbFRlbXBsYXRlIHx8IG51bGw7XG4gIH1cblxuICBwcml2YXRlIF9kZXRlcm1pbmVCYXNlRm9udFNpemUoKTogdm9pZCB7XG4gICAgY29uc3QgYmFzZUZvbnRTaXplID0gcGFyc2VJbnQod2luZG93LmdldENvbXB1dGVkU3R5bGUoZG9jdW1lbnQuYm9keSkuZm9udFNpemUsIDEwKTtcbiAgICAvL2NhbGN1bGF0ZSByZW0gb2YgMXB4XG4gICAgY29uc3Qgb25lUGl4ZWxJblJlbSA9IDEgLyBiYXNlRm9udFNpemU7XG4gICAgdGhpcy5zdHlsZT8uc2V0UHJvcGVydHkoJy0tc2JiLXNlYXQtcmVzZXJ2YXRpb24tb25lLXB4LXJlbScsIGAke29uZVBpeGVsSW5SZW0gKyAncmVtJ31gKTtcbiAgfVxuXG4gIHByaXZhdGUgX2luaXRWZWhpY2xlU2VhdFJlc2VydmF0aW9uQ29uc3RydWN0aW9uKCk6IHZvaWQge1xuICAgIGNvbnN0IGNsYXNzQWxpZ25WZXJ0aWNhbCA9IHRoaXMuYWxpZ25WZXJ0aWNhbCA/ICdzYmItc3JfX2dyaWQtLXZlcnRpY2FsJyA6ICcnO1xuICAgIHRoaXMuX2NvYWNoZXNIdG1sVGVtcGxhdGUgPSBodG1sYFxuICAgICAgPGRpdiBjbGFzcz1cInNiYi1zcl9fY29udGFpbmVyXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJzYmItc3Igc2JiLXNyX19ncmlkICR7Y2xhc3NBbGlnblZlcnRpY2FsfVwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJzYmItc3ItbmF2aWdhdGlvbi1maXJzdC1ncmlkXCI+XG4gICAgICAgICAgICAke3RoaXMuX3JlbmRlck5hdmlnYXRpb25Db250cm9sQnV0dG9uKCdESVJFQ1RJT05fTEVGVCcpfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwic2JiLXNyX19jb21wb25lbnRcIlxuICAgICAgICAgICAgQGtleWRvd249JHsoZXZ0OiBLZXlib2FyZEV2ZW50KSA9PiB0aGlzLmhhbmRsZUtleWJvYXJkRXZlbnQoZXZ0KX1cbiAgICAgICAgICA+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2JiLXNyLWdyaWQtaW5uZXJcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm5hdi1ncmlkXCI+JHt0aGlzLl9yZW5kZXJOYXZpZ2F0aW9uKCl9PC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2FjaGVzLWdyaWRcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2JiLXNyX193cmFwcGVyLWNvYWNoLWRlY2tzXCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2JiLXNyX193cmFwcGVyLWRlY2stbGFiZWxzXCI+JHt0aGlzLl9yZW5kZXJEZWNrTGFiZWxzKCl9PC9kaXY+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGlkPVwic2JiLXNyX193cmFwcGVyLXNjcm9sbGFyZWFcIiBjbGFzcz1cInNiYi1zcl9fd3JhcHBlclwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPVwic2JiLXNyX19wYXJlbnQtYXJlYVwiIGNsYXNzPVwic2JiLXNyX19wYXJlbnRcIiB0YWJpbmRleD1cIi0xXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPHVsXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIiR7Y2xhc3NNYXAoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAnc2JiLXNyX19saXN0LWRlY2tzJzogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NiYi1zcl9fbGlzdC1kZWNrcy0tZ2FwJzogdGhpcy5oYXNNdWx0aXBsZURlY2tzLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSl9XCJcbiAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAke3RoaXMuc2VhdFJlc2VydmF0aW9ucz8ubWFwKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAoc2VhdFJlc2VydmF0aW9uOiBTZWF0UmVzZXJ2YXRpb24sIGluZGV4OiBudW1iZXIpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaHRtbGA8bGkgY2xhc3M9XCJzYmItc3JfX2xpc3QtaXRlbS1kZWNrXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dWwgY2xhc3M9XCJzYmItc3JfX2xpc3QtY29hY2hlc1wiIHJvbGU9XCJwcmVzZW50YXRpb25cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHt0aGlzLl9yZW5kZXJDb2FjaGVzKHNlYXRSZXNlcnZhdGlvbiwgaW5kZXgpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC91bD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpPmA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgICAgIDwvdWw+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInNiYi1zci1uYXZpZ2F0aW9uLWxhc3QtZ3JpZFwiPlxuICAgICAgICAgICAgJHt0aGlzLl9yZW5kZXJOYXZpZ2F0aW9uQ29udHJvbEJ1dHRvbignRElSRUNUSU9OX1JJR0hUJyl9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgYDtcbiAgfVxuXG4gIHByaXZhdGUgX3JlbmRlckRlY2tMYWJlbHMoKTogVGVtcGxhdGVSZXN1bHRbXSB8IG51bGwge1xuICAgIGlmICghdGhpcy5oYXNNdWx0aXBsZURlY2tzKSByZXR1cm4gbnVsbDtcblxuICAgIHJldHVybiB0aGlzLnNlYXRSZXNlcnZhdGlvbnMubWFwKChzZWF0UmVzZXJ2YXRpb24pID0+IHtcbiAgICAgIGNvbnN0IGRlY2tEZXNjcmlwdGlvbiA9IGdldEkxOG5TZWF0UmVzZXJ2YXRpb24oXG4gICAgICAgIHNlYXRSZXNlcnZhdGlvbi5kZWNrQ29hY2hMZXZlbCxcbiAgICAgICAgdGhpcy5fbGFuZ3VhZ2UuY3VycmVudCxcbiAgICAgICk7XG4gICAgICByZXR1cm4gaHRtbGA8YiBhcmlhLWhpZGRlbj1cInRydWVcIj4ke2RlY2tEZXNjcmlwdGlvbn08L2I+YDtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgX3JlbmRlck5hdmlnYXRpb25Db250cm9sQnV0dG9uKGJ0bkRpcmVjdGlvbjogc3RyaW5nKTogVGVtcGxhdGVSZXN1bHQgfCBudWxsIHtcbiAgICBpZiAoIXRoaXMuaGFzTmF2aWdhdGlvbiB8fCAhdGhpcy5zZWF0UmVzZXJ2YXRpb25zKSByZXR1cm4gbnVsbDtcblxuICAgIGNvbnN0IGJ0bklkID0gYnRuRGlyZWN0aW9uID09ICdESVJFQ1RJT05fUklHSFQnID8gJ2xhc3QtdGFiLWVsZW1lbnQnIDogJ2ZpcnN0LXRhYi1lbGVtZW50JztcbiAgICBjb25zdCBidG5JY29uID0gYnRuRGlyZWN0aW9uID09ICdESVJFQ1RJT05fUklHSFQnID8gJ2Fycm93LXJpZ2h0LXNtYWxsJyA6ICdhcnJvdy1sZWZ0LXNtYWxsJztcbiAgICBjb25zdCBidG5BcmlhRGVzY3JpcHRpb24gPVxuICAgICAgYnRuRGlyZWN0aW9uID09ICdESVJFQ1RJT05fUklHSFQnXG4gICAgICAgID8gZ2V0STE4blNlYXRSZXNlcnZhdGlvbignU0VBVF9SRVNFUlZBVElPTl9FTkQnLCB0aGlzLl9sYW5ndWFnZS5jdXJyZW50KVxuICAgICAgICA6IGdldEkxOG5TZWF0UmVzZXJ2YXRpb24oJ1NFQVRfUkVTRVJWQVRJT05fQkVHSU4nLCB0aGlzLl9sYW5ndWFnZS5jdXJyZW50KTtcbiAgICBsZXQgYnRuRGlzYWJsZWQgPSB0cnVlO1xuXG4gICAgaWYgKGJ0bkRpcmVjdGlvbiA9PSAnRElSRUNUSU9OX0xFRlQnICYmIHRoaXMuc2VsZWN0ZWRDb2FjaEluZGV4ID4gMCkge1xuICAgICAgYnRuRGlzYWJsZWQgPSBmYWxzZTtcbiAgICB9IGVsc2UgaWYgKFxuICAgICAgYnRuRGlyZWN0aW9uID09ICdESVJFQ1RJT05fUklHSFQnICYmXG4gICAgICB0aGlzLnNlbGVjdGVkQ29hY2hJbmRleCA8XG4gICAgICAgIHRoaXMuc2VhdFJlc2VydmF0aW9uc1t0aGlzLmN1cnJTZWxlY3RlZERlY2tJbmRleF0uY29hY2hJdGVtcy5sZW5ndGggLSAxXG4gICAgKSB7XG4gICAgICBidG5EaXNhYmxlZCA9IGZhbHNlO1xuICAgIH1cblxuICAgIHJldHVybiBodG1sYDxzYmItc2Vjb25kYXJ5LWJ1dHRvblxuICAgICAgQGNsaWNrPVwiJHsoKSA9PiB0aGlzLm5hdmlnYXRlQnlEaXJlY3Rpb25CdG4oYnRuRGlyZWN0aW9uKX1cIlxuICAgICAgaWQ9XCIke2J0bklkfVwiXG4gICAgICBjbGFzcz1cInNiYi1zcl9fbmF2aWdhdGlvbi1jb250cm9sLWJ1dHRvblwiXG4gICAgICBzaXplPVwic1wiXG4gICAgICBpY29uLW5hbWU9XCIke2J0bkljb259XCJcbiAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgYXJpYS1sYWJlbD1cIiR7YnRuQXJpYURlc2NyaXB0aW9ufVwiXG4gICAgICByb2xlPVwiY29udGVudGluZm9cIlxuICAgICAgLmRpc2FibGVkSW50ZXJhY3RpdmU9XCIke2J0bkRpc2FibGVkIHx8IG5vdGhpbmd9XCJcbiAgICA+PC9zYmItc2Vjb25kYXJ5LWJ1dHRvbj5gO1xuICB9XG5cbiAgcHJpdmF0ZSBfcmVuZGVyTmF2aWdhdGlvbigpOiBUZW1wbGF0ZVJlc3VsdCB8IG51bGwge1xuICAgIGlmICghdGhpcy5oYXNOYXZpZ2F0aW9uIHx8ICF0aGlzLnNlYXRSZXNlcnZhdGlvbnMpIHJldHVybiBudWxsO1xuXG4gICAgcmV0dXJuIGh0bWxgPGRpdiBjbGFzcz1cInNiYi1zci1uYXZpZ2F0aW9uLXdyYXBwZXJcIj5cbiAgICAgIDxuYXYgaWQ9XCJzYmItc3ItbmF2aWdhdGlvblwiIGNsYXNzPVwic2JiLXNyLW5hdmlnYXRpb25cIj5cbiAgICAgICAgPHVsXG4gICAgICAgICAgaWQ9XCJzYmItc3JfX25hdmlnYXRpb24tbGlzdC1jb2FjaGVzXCJcbiAgICAgICAgICBjbGFzcz1cInNiYi1zci1uYXZpZ2F0aW9uX19saXN0LWNvYWNoZXNcIlxuICAgICAgICAgIGFyaWEtbGFiZWw9XCIke2dldEkxOG5TZWF0UmVzZXJ2YXRpb24oXG4gICAgICAgICAgICAnU0VBVF9SRVNFUlZBVElPTl9OQVZJR0FUSU9OJyxcbiAgICAgICAgICAgIHRoaXMuX2xhbmd1YWdlLmN1cnJlbnQsXG4gICAgICAgICAgKX1cIlxuICAgICAgICA+XG4gICAgICAgICAgJHt0aGlzLnNlYXRSZXNlcnZhdGlvbnNbdGhpcy5jdXJyU2VsZWN0ZWREZWNrSW5kZXhdPy5jb2FjaEl0ZW1zLm1hcChcbiAgICAgICAgICAgIChjb2FjaEl0ZW06IENvYWNoSXRlbSwgaW5kZXg6IG51bWJlcikgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBjb2FjaEZyZWVQbGFjZXMgPSB0aGlzLmdldEF2YWlsYWJsZUZyZWVQbGFjZXNOdW1Gcm9tQ29hY2goaW5kZXgpO1xuICAgICAgICAgICAgICByZXR1cm4gaHRtbGA8bGk+XG4gICAgICAgICAgICAgICAgPHNiYi1zZWF0LXJlc2VydmF0aW9uLW5hdmlnYXRpb24tY29hY2hcbiAgICAgICAgICAgICAgICAgIEBzZWxlY3Rjb2FjaD0keyhldmVudDogQ3VzdG9tRXZlbnQ8bnVtYmVyPikgPT4gdGhpcy5fb25TZWxlY3ROYXZDb2FjaChldmVudCl9XG4gICAgICAgICAgICAgICAgICBAZm9jdXNjb2FjaD0keygpID0+IHRoaXMuX29uRm9jdXNOYXZDb2FjaCgpfVxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCIke2NsYXNzTWFwKHtcbiAgICAgICAgICAgICAgICAgICAgJ3NiYi1zcl9fbmF2aWdhdGlvbi1jb2FjaC0taG92ZXItc2Nyb2xsJzpcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLmhvdmVyZWRTY3JvbGxDb2FjaEluZGV4ID09PSBpbmRleCxcbiAgICAgICAgICAgICAgICAgIH0pfVwiXG4gICAgICAgICAgICAgICAgICBpbmRleD1cIiR7aW5kZXh9XCJcbiAgICAgICAgICAgICAgICAgIGNvYWNoLWlkPVwiJHtjb2FjaEl0ZW0uaWR9XCJcbiAgICAgICAgICAgICAgICAgIC5mcmVlUGxhY2VzQnlUeXBlPVwiJHtjb2FjaEZyZWVQbGFjZXN9XCJcbiAgICAgICAgICAgICAgICAgIC5zZWxlY3RlZD0ke3RoaXMuc2VsZWN0ZWRDb2FjaEluZGV4ID09PSBpbmRleH1cbiAgICAgICAgICAgICAgICAgIC5mb2N1c2VkPSR7dGhpcy5mb2N1c2VkQ29hY2hJbmRleCA9PT0gaW5kZXh9XG4gICAgICAgICAgICAgICAgICAucHJvcGVydHlJZHM9XCIke2NvYWNoSXRlbS5wcm9wZXJ0eUlkc31cIlxuICAgICAgICAgICAgICAgICAgLnRyYXZlbENsYXNzPVwiJHtjb2FjaEl0ZW0udHJhdmVsQ2xhc3N9XCJcbiAgICAgICAgICAgICAgICAgID9kcml2ZXItYXJlYT1cIiR7IWNvYWNoSXRlbS5wbGFjZXM/Lmxlbmd0aH1cIlxuICAgICAgICAgICAgICAgICAgP2ZpcnN0PVwiJHtjb2FjaEl0ZW0/LmRyaXZlckFyZWFTaWRlPy5sZWZ0fVwiXG4gICAgICAgICAgICAgICAgICA/bGFzdD1cIiR7Y29hY2hJdGVtPy5kcml2ZXJBcmVhU2lkZT8ucmlnaHR9XCJcbiAgICAgICAgICAgICAgICAgID92ZXJ0aWNhbD1cIiR7dGhpcy5hbGlnblZlcnRpY2FsfVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDwvc2JiLXNlYXQtcmVzZXJ2YXRpb24tbmF2aWdhdGlvbi1jb2FjaD5cbiAgICAgICAgICAgICAgPC9saT5gO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICApfVxuICAgICAgICA8L3VsPlxuICAgICAgPC9uYXY+XG4gICAgPC9kaXY+YDtcbiAgfVxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIGNvYWNoZXNcbiAgICogQHJldHVybnNcbiAgICovXG4gIHByaXZhdGUgX3JlbmRlckNvYWNoZXMoXG4gICAgc2VhdFJlc2VydmF0aW9uOiBTZWF0UmVzZXJ2YXRpb24sXG4gICAgZGVja0luZGV4OiBudW1iZXIsXG4gICk6IFRlbXBsYXRlUmVzdWx0W10gfCBudWxsIHtcbiAgICBjb25zdCBjb2FjaGVzID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShzZWF0UmVzZXJ2YXRpb24/LmNvYWNoSXRlbXMpKTtcblxuICAgIGlmICghY29hY2hlcykge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiBjb2FjaGVzLm1hcCgoY29hY2hJdGVtOiBDb2FjaEl0ZW0sIGNvYWNoSW5kZXg6IG51bWJlcikgPT4ge1xuICAgICAgcmV0dXJuIGh0bWxgXG4gICAgICAgIDxsaSBjbGFzcz1cInNiYi1zcl9faXRlbS1jb2FjaFwiPlxuICAgICAgICAgICR7dGhpcy5fcmVuZGVyQ29hY2hFbGVtZW50KGNvYWNoSXRlbSwgY29hY2hJbmRleCwgZGVja0luZGV4KX1cbiAgICAgICAgPC9saT5cbiAgICAgIGA7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIF9yZW5kZXJDb2FjaEVsZW1lbnQoXG4gICAgY29hY2hJdGVtOiBDb2FjaEl0ZW0sXG4gICAgY29hY2hJbmRleDogbnVtYmVyLFxuICAgIGNvYWNoRGVja0luZGV4OiBudW1iZXIsXG4gICk6IFRlbXBsYXRlUmVzdWx0IHtcbiAgICBjb25zdCBjYWxjdWxhdGVkQ29hY2hEaW1lbnNpb24gPSB0aGlzLmdldENhbGN1bGF0ZWREaW1lbnNpb24oY29hY2hJdGVtLmRpbWVuc2lvbik7XG4gICAgY29uc3QgZGVzY3JpcHRpb25UYWJsZUNvYWNoV2l0aFNlcnZpY2VzID0gdGhpcy5fZ2V0RGVzY3JpcHRpb25UYWJsZUNvYWNoKGNvYWNoSXRlbSwgY29hY2hJbmRleCk7XG5cbiAgICByZXR1cm4gaHRtbGA8c2JiLXNlYXQtcmVzZXJ2YXRpb24tc2NvcGVkXG4gICAgICBzdHlsZT0ke3N0eWxlTWFwKHtcbiAgICAgICAgJy0tc2JiLXNlYXQtcmVzZXJ2YXRpb24tc2NvcGVkLXdpZHRoJzogY2FsY3VsYXRlZENvYWNoRGltZW5zaW9uLncsXG4gICAgICAgICctLXNiYi1zZWF0LXJlc2VydmF0aW9uLXNjb3BlZC1oZWlnaHQnOiBjYWxjdWxhdGVkQ29hY2hEaW1lbnNpb24uaCxcbiAgICAgIH0pfVxuICAgID5cbiAgICAgICR7dGhpcy5fZ2V0UmVuZGVyZWRDb2FjaEJvcmRlcnMoY29hY2hJdGVtKX1cbiAgICAgICR7dGhpcy5fZ2V0UmVuZGVyZWRHcmFwaGljYWxFbGVtZW50cyhcbiAgICAgICAgY29hY2hJdGVtLmdyYXBoaWNFbGVtZW50cyB8fCBbXSxcbiAgICAgICAgY29hY2hJdGVtLmRpbWVuc2lvbixcbiAgICAgICAgY29hY2hJbmRleCxcbiAgICAgICAgY29hY2hEZWNrSW5kZXgsXG4gICAgICApfVxuICAgICAgJHt0aGlzLl9nZXRSZW5kZXJlZFNlcnZpY2VFbGVtZW50cyhjb2FjaEluZGV4LCBjb2FjaERlY2tJbmRleCwgY29hY2hJdGVtLnNlcnZpY2VFbGVtZW50cyl9XG5cbiAgICAgIDx0YWJsZVxuICAgICAgICBAZm9jdXM9JHsoKSA9PiB0aGlzLm9uRm9jdXNUYWJsZUNvYWNoQW5kUHJlc2VsZWN0UGxhY2UoY29hY2hJbmRleCl9XG4gICAgICAgIGlkPVwic2JiLXNyLWNvYWNoLSR7Y29hY2hJbmRleH1cIlxuICAgICAgICBjbGFzcz1cInNiYi1zci1jb2FjaC13cmFwcGVyX190YWJsZVwiXG4gICAgICAgIGFyaWEtZGVzY3JpYmVkYnk9XCJzYmItc3ItY29hY2gtY2FwdGlvbi0ke2NvYWNoSW5kZXh9XCJcbiAgICAgID5cbiAgICAgICAgPGNhcHRpb24gaWQ9XCJzYmItc3ItY29hY2gtY2FwdGlvbi0ke2NvYWNoSW5kZXh9XCIgdGFiaW5kZXg9XCItMVwiPlxuICAgICAgICAgIDxzYmItc2NyZWVuLXJlYWRlci1vbmx5PiR7ZGVzY3JpcHRpb25UYWJsZUNvYWNoV2l0aFNlcnZpY2VzfTwvc2JiLXNjcmVlbi1yZWFkZXItb25seT5cbiAgICAgICAgPC9jYXB0aW9uPlxuICAgICAgICAke3RoaXMuX2dldFJlbmRlcmVkUm93UGxhY2VzKGNvYWNoSXRlbSwgY29hY2hJbmRleCwgY29hY2hEZWNrSW5kZXgpfVxuICAgICAgPC90YWJsZT5cbiAgICA8L3NiYi1zZWF0LXJlc2VydmF0aW9uLXNjb3BlZD5gO1xuICB9XG5cbiAgLyoqXG4gICAqIEByZXR1cm5zIFJldHVybnMgdGhlIGJvcmRlciBncmFwaGljIChDT0FDSF9CT1JERVJfTUlERExFKSBvZiBhIGNvYWNoIHdpdGggY2FsY3VsYXRlZCBib3JkZXIgZ2FwIGFuZCBjb2FjaCB3aWR0aCxcbiAgICogZGVwZW5kaW5nIG9uIHdoZXRoZXIgdGhlIGNvYWNoIGlzIHdpdGggYSBkcml2ZXIgYXJlYSBvciB3aXRob3V0LlxuICAgKi9cbiAgcHJpdmF0ZSBfZ2V0UmVuZGVyZWRDb2FjaEJvcmRlcnMoY29hY2hJdGVtOiBDb2FjaEl0ZW0pOiBUZW1wbGF0ZVJlc3VsdCB7XG4gICAgY29uc3QgQ09BQ0hfUEFTU0FHRV9XSURUSCA9IDE7XG4gICAgY29uc3QgYWxsRWxlbWVudHMgPSBjb2FjaEl0ZW0uZ3JhcGhpY0VsZW1lbnRzO1xuICAgIGNvbnN0IGRyaXZlckFyZWEgPSBhbGxFbGVtZW50cz8uZmluZCgoZWxlbWVudDogQmFzZUVsZW1lbnQpID0+IGVsZW1lbnQuaWNvbiA9PT0gJ0RSSVZFUl9BUkVBJyk7XG4gICAgY29uc3QgYm9yZGVyV2lkdGggPSBkcml2ZXJBcmVhXG4gICAgICA/IGNvYWNoSXRlbS5kaW1lbnNpb24udyAtIGRyaXZlckFyZWEuZGltZW5zaW9uLncgLSBDT0FDSF9QQVNTQUdFX1dJRFRIXG4gICAgICA6IGNvYWNoSXRlbS5kaW1lbnNpb24udyAtIENPQUNIX1BBU1NBR0VfV0lEVEggKiAyO1xuICAgIGNvbnN0IGJvcmRlckhlaWdodCA9IChjb2FjaEl0ZW0uZGltZW5zaW9uLmggKyB0aGlzLmNvYWNoQm9yZGVyT2Zmc2V0ICogMikgKiB0aGlzLmJhc2VHcmlkU2l6ZTtcbiAgICBjb25zdCBib3JkZXJPZmZzZXRYID1cbiAgICAgIGRyaXZlckFyZWEgJiYgZHJpdmVyQXJlYS5wb3NpdGlvbi54ID09PSAwXG4gICAgICAgID8gZHJpdmVyQXJlYT8uZGltZW5zaW9uLncgKiB0aGlzLmJhc2VHcmlkU2l6ZVxuICAgICAgICA6IHRoaXMuYmFzZUdyaWRTaXplO1xuICAgIHJldHVybiBodG1sYFxuICAgICAgPHNiYi1zZWF0LXJlc2VydmF0aW9uLWdyYXBoaWNcbiAgICAgICAgc3R5bGU9JHtzdHlsZU1hcCh7XG4gICAgICAgICAgJy0tc2JiLXNlYXQtcmVzZXJ2YXRpb24tZ3JhcGhpYy13aWR0aCc6IGJvcmRlcldpZHRoICogdGhpcy5iYXNlR3JpZFNpemUsXG4gICAgICAgICAgJy0tc2JiLXNlYXQtcmVzZXJ2YXRpb24tZ3JhcGhpYy1oZWlnaHQnOiBib3JkZXJIZWlnaHQsXG4gICAgICAgICAgJy0tc2JiLXNlYXQtcmVzZXJ2YXRpb24tZ3JhcGhpYy10b3AnOiB0aGlzLmNvYWNoQm9yZGVyUGFkZGluZyAqIC0xLFxuICAgICAgICAgICctLXNiYi1zZWF0LXJlc2VydmF0aW9uLWdyYXBoaWMtbGVmdCc6IGJvcmRlck9mZnNldFgsXG4gICAgICAgICAgJy0tc2JiLXNlYXQtcmVzZXJ2YXRpb24tZ3JhcGhpYy1wb3NpdGlvbic6ICdhYnNvbHV0ZScsXG4gICAgICAgIH0pfVxuICAgICAgICBuYW1lPVwiQ09BQ0hfQk9SREVSX01JRERMRVwiXG4gICAgICAgID9zdHJldGNoPSR7dHJ1ZX1cbiAgICAgICAgcm9sZT1cInByZXNlbnRhdGlvblwiXG4gICAgICA+PC9zYmItc2VhdC1yZXNlcnZhdGlvbi1ncmFwaGljPlxuICAgIGA7XG4gIH1cblxuICBwcml2YXRlIF9nZXRSZW5kZXJlZFJvd1BsYWNlcyhcbiAgICBjb2FjaDogQ29hY2hJdGVtLFxuICAgIGNvYWNoSW5kZXg6IG51bWJlcixcbiAgICBkZWNrSW5kZXg6IG51bWJlcixcbiAgKTogVGVtcGxhdGVSZXN1bHRbXSB8IG51bGwge1xuICAgIGlmICghY29hY2gucGxhY2VzKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICAvLyBQcmVwYWlyIHJvd3Mgd2l0aCB0aGUgcGxhY2VzIHRvIHJlbmRlciBhIHRhYmxlXG4gICAgY29uc3QgdGFibGVSb3dQbGFjZXM6IFJlY29yZDxudW1iZXIsIFBsYWNlW10+ID0ge307XG4gICAgZm9yIChjb25zdCBwbGFjZSBvZiBjb2FjaC5wbGFjZXMpIHtcbiAgICAgIGlmICghdGFibGVSb3dQbGFjZXNbcGxhY2UucG9zaXRpb24ueV0pIHtcbiAgICAgICAgdGFibGVSb3dQbGFjZXNbcGxhY2UucG9zaXRpb24ueV0gPSBbcGxhY2VdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGFibGVSb3dQbGFjZXNbcGxhY2UucG9zaXRpb24ueV0ucHVzaChwbGFjZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIE9iamVjdC52YWx1ZXModGFibGVSb3dQbGFjZXMpXG4gICAgICAubWFwKChyb3dQbGFjZXM6IFBsYWNlW10sIGluZGV4KSA9PiB7XG4gICAgICAgIHJldHVybiBodG1sYFxuICAgICAgICAgIDx0ciBpZD1cInJvdy0ke2NvYWNoSW5kZXh9LSR7cm93UGxhY2VzWzBdLnBvc2l0aW9uLnl9XCIgZGF0YS1yb3ctaW5kZXg9JHtpbmRleH0+XG4gICAgICAgICAgICAke3RoaXMuX2dldFJlbmRlcmVkQ29sdW1uUGxhY2VzKHJvd1BsYWNlcywgY29hY2hJbmRleCwgZGVja0luZGV4KX1cbiAgICAgICAgICA8L3RyPlxuICAgICAgICBgO1xuICAgICAgfSlcbiAgICAgIC5mbGF0TWFwKChyb3dUZW1wbGF0ZSkgPT4gcm93VGVtcGxhdGUpO1xuICB9XG5cbiAgcHJpdmF0ZSBfZ2V0UmVuZGVyZWRDb2x1bW5QbGFjZXMoXG4gICAgcGxhY2VzOiBQbGFjZVtdLFxuICAgIGNvYWNoSW5kZXg6IG51bWJlcixcbiAgICBkZWNrSW5kZXg6IG51bWJlcixcbiAgKTogVGVtcGxhdGVSZXN1bHRbXSB8IG51bGwge1xuICAgIC8vU29ydHMgZWFjaCBwbGFjZSBieSBpdHMgYXNjZW5kaW5nIHggY29vcmRpbmF0ZVxuICAgIHBsYWNlcy5zb3J0KFxuICAgICAgKHBsYWNlQTogUGxhY2UsIHBsYWNlQjogUGxhY2UpID0+IE51bWJlcihwbGFjZUEucG9zaXRpb24ueCkgLSBOdW1iZXIocGxhY2VCLnBvc2l0aW9uLngpLFxuICAgICk7XG5cbiAgICByZXR1cm4gcGxhY2VzPy5tYXAoKHBsYWNlOiBQbGFjZSwgaW5kZXg6IG51bWJlcikgPT4ge1xuICAgICAgY29uc3QgY2FsY3VsYXRlZERpbWVuc2lvbiA9IHRoaXMuZ2V0Q2FsY3VsYXRlZERpbWVuc2lvbihwbGFjZS5kaW1lbnNpb24pO1xuICAgICAgY29uc3QgY2FsY3VsYXRlZFBvc2l0aW9uID0gdGhpcy5nZXRDYWxjdWxhdGVkUG9zaXRpb24ocGxhY2UucG9zaXRpb24pO1xuICAgICAgY29uc3QgdGV4dFJvdGF0aW9uID0gdGhpcy5hbGlnblZlcnRpY2FsID8gLTkwIDogMDtcblxuICAgICAgcmV0dXJuIGh0bWxgXG4gICAgICAgIDx0ZFxuICAgICAgICAgIGlkPVwiY2VsbC0ke2RlY2tJbmRleH0tJHtjb2FjaEluZGV4fS0ke3BsYWNlLnBvc2l0aW9uLnl9LSR7aW5kZXh9XCJcbiAgICAgICAgICBjbGFzcz1cImdyYXBoaWNhbC1lbGVtZW50XCJcbiAgICAgICAgPlxuICAgICAgICAgIDxzYmItc2VhdC1yZXNlcnZhdGlvbi1wbGFjZS1jb250cm9sXG4gICAgICAgICAgICBzdHlsZT0ke3N0eWxlTWFwKHtcbiAgICAgICAgICAgICAgJy0tc2JiLXNlYXQtcmVzZXJ2YXRpb24tcGxhY2UtY29udHJvbC13aWR0aCc6IGNhbGN1bGF0ZWREaW1lbnNpb24udyxcbiAgICAgICAgICAgICAgJy0tc2JiLXNlYXQtcmVzZXJ2YXRpb24tcGxhY2UtY29udHJvbC1oZWlnaHQnOiBjYWxjdWxhdGVkRGltZW5zaW9uLmgsXG4gICAgICAgICAgICAgICctLXNiYi1zZWF0LXJlc2VydmF0aW9uLXBsYWNlLWNvbnRyb2wtdG9wJzogY2FsY3VsYXRlZFBvc2l0aW9uLnksXG4gICAgICAgICAgICAgICctLXNiYi1zZWF0LXJlc2VydmF0aW9uLXBsYWNlLWNvbnRyb2wtbGVmdCc6IGNhbGN1bGF0ZWRQb3NpdGlvbi54LFxuICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICBAc2VsZWN0cGxhY2U9JHsoc2VsZWN0UGxhY2VFdmVudDogQ3VzdG9tRXZlbnQ8UGxhY2VTZWxlY3Rpb24+KSA9PlxuICAgICAgICAgICAgICB0aGlzLl9vblNlbGVjdFBsYWNlKHNlbGVjdFBsYWNlRXZlbnQpfVxuICAgICAgICAgICAgZXhwb3J0cGFydHM9XCJzYmItc3ItcGxhY2UtcGFydFwiXG4gICAgICAgICAgICBpZD1cInNlYXQtcmVzZXJ2YXRpb25fX3BsYWNlLWJ1dHRvbi0ke2RlY2tJbmRleH0tJHtjb2FjaEluZGV4fS0ke3BsYWNlLm51bWJlcn1cIlxuICAgICAgICAgICAgY2xhc3M9XCJzZWF0LXJlc2VydmF0aW9uLXBsYWNlLWNvbnRyb2xcIlxuICAgICAgICAgICAgZGF0YS1jZWxsLWlkPVwiJHtjb2FjaEluZGV4fS0ke3BsYWNlLnBvc2l0aW9uLnl9LSR7aW5kZXh9XCJcbiAgICAgICAgICAgIHRleHQ9JHtwbGFjZS5udW1iZXJ9XG4gICAgICAgICAgICB0eXBlPSR7cGxhY2UudHlwZX1cbiAgICAgICAgICAgIHN0YXRlPSR7cGxhY2Uuc3RhdGV9XG4gICAgICAgICAgICB3aWR0aD0ke3BsYWNlLmRpbWVuc2lvbi53ICogdGhpcy5iYXNlR3JpZFNpemV9XG4gICAgICAgICAgICBoZWlnaHQ9JHtwbGFjZS5kaW1lbnNpb24uaCAqIHRoaXMuYmFzZUdyaWRTaXplfVxuICAgICAgICAgICAgcm90YXRpb249JHtwbGFjZS5yb3RhdGlvbiA/PyBub3RoaW5nfVxuICAgICAgICAgICAgdGV4dC1yb3RhdGlvbj0ke3RleHRSb3RhdGlvbn1cbiAgICAgICAgICAgIGNvYWNoLWluZGV4PSR7Y29hY2hJbmRleH1cbiAgICAgICAgICAgIGRlY2staW5kZXg9JHtkZWNrSW5kZXh9XG4gICAgICAgICAgICAucHJvcGVydHlJZHM9JHtwbGFjZS5wcm9wZXJ0eUlkc31cbiAgICAgICAgICAgIC5wcmV2ZW50Q2xpY2s9JHt0aGlzLnByZXZlbnRQbGFjZUNsaWNrfVxuICAgICAgICAgID48L3NiYi1zZWF0LXJlc2VydmF0aW9uLXBsYWNlLWNvbnRyb2w+XG4gICAgICAgIDwvdGQ+XG4gICAgICBgO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBfZ2V0UmVuZGVyZWRHcmFwaGljYWxFbGVtZW50cyhcbiAgICBncmFwaGljYWxFbGVtZW50czogQmFzZUVsZW1lbnRbXSxcbiAgICBjb2FjaERpbWVuc2lvbjogRWxlbWVudERpbWVuc2lvbixcbiAgICBjb2FjaEluZGV4OiBudW1iZXIsXG4gICAgY29hY2hEZWNrSW5kZXg6IG51bWJlcixcbiAgKTogVGVtcGxhdGVSZXN1bHRbXSB8IG51bGwge1xuICAgIGlmICghZ3JhcGhpY2FsRWxlbWVudHMpIHJldHVybiBudWxsO1xuXG4gICAgcmV0dXJuIGdyYXBoaWNhbEVsZW1lbnRzPy5tYXAoKGdyYXBoaWNhbEVsZW1lbnQ6IEJhc2VFbGVtZW50KSA9PiB7XG4gICAgICBjb25zdCBpY29uID0gZ3JhcGhpY2FsRWxlbWVudC5pY29uID8/ICcnO1xuICAgICAgY29uc3QgZWxlbWVudFJvdGF0aW9uID0gZ3JhcGhpY2FsRWxlbWVudC5yb3RhdGlvbiB8fCAwO1xuICAgICAgY29uc3QgaXNOb3RGaXhlZFJvdGF0aW9uR3JhcGhpY2FsRWxlbWVudCA9XG4gICAgICAgIHRoaXMuX25vdEZpeGVkUm90YXRhYmxlQXJlYUljb25zLmluZGV4T2YoZ3JhcGhpY2FsRWxlbWVudC5pY29uISkgPT09IC0xO1xuICAgICAgY29uc3QgZWxlbWVudEZpeGVkUm90YXRpb24gPVxuICAgICAgICB0aGlzLmFsaWduVmVydGljYWwgJiYgaXNOb3RGaXhlZFJvdGF0aW9uR3JhcGhpY2FsRWxlbWVudFxuICAgICAgICAgID8gZWxlbWVudFJvdGF0aW9uIC0gOTBcbiAgICAgICAgICA6IGVsZW1lbnRSb3RhdGlvbjtcblxuICAgICAgLy9jaGVjayBpZiB0aGUgY3VycmVudCBlbGVtZW50IGlzIG5vdCBhbiBhcmVhIGVsZW1lbnQsIHNpbmNlIHRoaXMgZWxlbWVudCBpcyBkcmF3biB3aXRob3V0IGFuIGFyZWEgY29tcG9uZW50XG4gICAgICBpZiAodGhpcy5fbm90QXJlYUVsZW1lbnRzLmZpbmRJbmRleCgobm90QXJlYUVsZW1lbnQpID0+IG5vdEFyZWFFbGVtZW50ID09PSBpY29uKSA+IC0xKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9nZXRSZW5kZXJFbGVtZW50V2l0aG91dEFyZWEoZ3JhcGhpY2FsRWxlbWVudCwgZWxlbWVudFJvdGF0aW9uLCBjb2FjaERpbWVuc2lvbik7XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy5fZ2V0UmVuZGVyRWxlbWVudFdpdGhBcmVhKFxuICAgICAgICBncmFwaGljYWxFbGVtZW50LFxuICAgICAgICBlbGVtZW50Rml4ZWRSb3RhdGlvbixcbiAgICAgICAgY29hY2hEaW1lbnNpb24sXG4gICAgICAgIGNvYWNoSW5kZXgsXG4gICAgICAgIGNvYWNoRGVja0luZGV4LFxuICAgICAgKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBjcmVhdGVzIGEgcmVuZGVyZWQgZWxlbWVudCB3aXRoIGFuIGFyZWEgY29tcG9uZW50XG4gICAqIEBwYXJhbSBncmFwaGljYWxFbGVtZW50XG4gICAqIEBwYXJhbSByb3RhdGlvblxuICAgKiBAcGFyYW0gY29hY2hEaW1lbnNpb25cbiAgICogQHBhcmFtIGNvYWNoSW5kZXggdXNlZCB0byBnZW5lcmF0ZSBhIHVuaXF1ZSBpZCBmb3IgdGhlIHBvcG92ZXIgdHJpZ2dlclxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgcHJpdmF0ZSBfZ2V0UmVuZGVyRWxlbWVudFdpdGhBcmVhKFxuICAgIGdyYXBoaWNhbEVsZW1lbnQ6IEJhc2VFbGVtZW50LFxuICAgIHJvdGF0aW9uOiBudW1iZXIsXG4gICAgY29hY2hEaW1lbnNpb246IEVsZW1lbnREaW1lbnNpb24sXG4gICAgY29hY2hJbmRleDogbnVtYmVyLFxuICAgIGNvYWNoRGVja0luZGV4OiBudW1iZXIsXG4gICk6IFRlbXBsYXRlUmVzdWx0IHtcbiAgICAvLyBmb3IgVEFCTEUsIHdlIHVzZSB0aGUgYXJlYSBjb21wb25lbnQgaXRzZWxmIHRvIGRpc3BsYXkgdGhlIHRhYmxlIGluc3RlYWQgb2YgdGhlIFNWRyBncmFwaGljLlxuICAgIC8vIER1ZSB0byBkaWZmZXJlbnQgaGVpZ2h0cyBhbmQgd2lkdGhzLCBpdCB3b3VsZG4ndCBzaG93IGNvcnJlY3RseS4gVG8gY29ycmVjdCB0aGlzLCB3ZSB3b3VsZFxuICAgIC8vIG5lZWQgZGlmZmljdWx0IGNhbGN1bGF0aW9ucyBmb3IgcG9zaXRpb24sIHJvdGF0aW9uIGFuZCBkaW1lbnNpb24uXG4gICAgY29uc3QgaXNOb3RUYWJsZUdyYXBoaWMgPSBncmFwaGljYWxFbGVtZW50Lmljb24/LmluZGV4T2YoJ1RBQkxFJykgPT09IC0xO1xuICAgIGNvbnN0IGFyZWFQcm9wZXJ0eSA9IGdyYXBoaWNhbEVsZW1lbnQuaWNvbiAmJiBpc05vdFRhYmxlR3JhcGhpYyA/IGdyYXBoaWNhbEVsZW1lbnQuaWNvbiA6IG51bGw7XG4gICAgY29uc3Qgc3RyZXRjaEhlaWdodCA9IGFyZWFQcm9wZXJ0eSAhPT0gJ0VOVFJZX0VYSVQnO1xuICAgIGNvbnN0IGFyaWFMYWJlbEZvckFyZWEgPSBncmFwaGljYWxFbGVtZW50Lmljb25cbiAgICAgID8gZ2V0STE4blNlYXRSZXNlcnZhdGlvbihncmFwaGljYWxFbGVtZW50Lmljb24sIHRoaXMuX2xhbmd1YWdlLmN1cnJlbnQpXG4gICAgICA6IG5vdGhpbmc7XG4gICAgY29uc3QgY2FsY3VsYXRlZERpbWVuc2lvbiA9IHRoaXMuZ2V0Q2FsY3VsYXRlZERpbWVuc2lvbihcbiAgICAgIGdyYXBoaWNhbEVsZW1lbnQuZGltZW5zaW9uLFxuICAgICAgY29hY2hEaW1lbnNpb24sXG4gICAgICB0cnVlLFxuICAgICAgc3RyZXRjaEhlaWdodCxcbiAgICApO1xuICAgIGNvbnN0IGNhbGN1bGF0ZWRQb3NpdGlvbiA9IHRoaXMuZ2V0Q2FsY3VsYXRlZFBvc2l0aW9uKFxuICAgICAgZ3JhcGhpY2FsRWxlbWVudC5wb3NpdGlvbixcbiAgICAgIGdyYXBoaWNhbEVsZW1lbnQuZGltZW5zaW9uLFxuICAgICAgY29hY2hEaW1lbnNpb24sXG4gICAgICB0cnVlLFxuICAgICk7XG5cbiAgICAvL2dlbmVyYXRlIHVuaXF1ZSBpbmRleCBudW1iZXIgZm9yIHRoZSB0cmlnZ2VyIGVsZW1lbnRcbiAgICBjb25zdCB0cmlnZ2VySWQgPSBgcG9wb3Zlci10cmlnZ2VyLSR7Y29hY2hEZWNrSW5kZXh9LSR7Y29hY2hJbmRleH0tJHtjYWxjdWxhdGVkUG9zaXRpb24ueH0tJHtjYWxjdWxhdGVkUG9zaXRpb24ueX1gO1xuICAgIGxldCBlbGVtZW50TW91bnRpbmcgPSAnZnJlZSc7XG5cbiAgICBpZiAoZ3JhcGhpY2FsRWxlbWVudC5wb3NpdGlvbi55ID09PSB0aGlzLmNvYWNoQm9yZGVyT2Zmc2V0ICogLTEpIHtcbiAgICAgIGVsZW1lbnRNb3VudGluZyA9ICd1cHBlci1ib3JkZXInO1xuICAgIH0gZWxzZSBpZiAoXG4gICAgICBncmFwaGljYWxFbGVtZW50LnBvc2l0aW9uLnkgKyBncmFwaGljYWxFbGVtZW50LmRpbWVuc2lvbi5oID09PVxuICAgICAgY29hY2hEaW1lbnNpb24uaCArIHRoaXMuY29hY2hCb3JkZXJPZmZzZXRcbiAgICApIHtcbiAgICAgIGVsZW1lbnRNb3VudGluZyA9ICdsb3dlci1ib3JkZXInO1xuICAgIH1cblxuICAgIHJldHVybiBodG1sYFxuICAgICAgPHNiYi1zZWF0LXJlc2VydmF0aW9uLWFyZWFcbiAgICAgICAgaWQ9XCIke3RyaWdnZXJJZH1cIlxuICAgICAgICBjbGFzcz1cIiR7Y2xhc3NNYXAoeyAnc2JiLXNlYXQtcmVzZXJ2YXRpb24tYXJlYS0tY3Vyc29yLXBvaW50ZXInOiBhcmVhUHJvcGVydHkgIT09IG51bGwgfSl9XCJcbiAgICAgICAgc3R5bGU9JHtzdHlsZU1hcCh7XG4gICAgICAgICAgJy0tc2JiLXNlYXQtcmVzZXJ2YXRpb24tYXJlYS13aWR0aCc6IGNhbGN1bGF0ZWREaW1lbnNpb24udyxcbiAgICAgICAgICAnLS1zYmItc2VhdC1yZXNlcnZhdGlvbi1hcmVhLWhlaWdodCc6IGNhbGN1bGF0ZWREaW1lbnNpb24uaCxcbiAgICAgICAgICAnLS1zYmItc2VhdC1yZXNlcnZhdGlvbi1hcmVhLXRvcCc6IGNhbGN1bGF0ZWRQb3NpdGlvbi55LFxuICAgICAgICAgICctLXNiYi1zZWF0LXJlc2VydmF0aW9uLWFyZWEtbGVmdCc6IGNhbGN1bGF0ZWRQb3NpdGlvbi54LFxuICAgICAgICB9KX1cbiAgICAgICAgbW91bnRpbmc9JHtlbGVtZW50TW91bnRpbmd9XG4gICAgICAgIGJhY2tncm91bmQ9XCJkYXJrXCJcbiAgICAgICAgYXJpYS1oaWRkZW49XCJ0cnVlXCJcbiAgICAgID5cbiAgICAgICAgJHthcmVhUHJvcGVydHlcbiAgICAgICAgICA/IGh0bWxgXG4gICAgICAgICAgICAgIDxzYmItc2VhdC1yZXNlcnZhdGlvbi1ncmFwaGljXG4gICAgICAgICAgICAgICAgbmFtZT0ke2FyZWFQcm9wZXJ0eX1cbiAgICAgICAgICAgICAgICB3aWR0aD0ke3RoaXMuYmFzZUdyaWRTaXplfVxuICAgICAgICAgICAgICAgIGhlaWdodD0ke3RoaXMuYmFzZUdyaWRTaXplfVxuICAgICAgICAgICAgICAgIHJvdGF0aW9uPSR7cm90YXRpb259XG4gICAgICAgICAgICAgICAgcm9sZT1cImltZ1wiXG4gICAgICAgICAgICAgICAgYXJpYS1oaWRkZW49XCJ0cnVlXCJcbiAgICAgICAgICAgICAgPjwvc2JiLXNlYXQtcmVzZXJ2YXRpb24tZ3JhcGhpYz5cbiAgICAgICAgICAgIGBcbiAgICAgICAgICA6IG5vdGhpbmd9XG4gICAgICA8L3NiYi1zZWF0LXJlc2VydmF0aW9uLWFyZWE+XG4gICAgICAke2FyZWFQcm9wZXJ0eSA/IHRoaXMuX3BvcG92ZXIodHJpZ2dlcklkLCBhcmlhTGFiZWxGb3JBcmVhKSA6IG5vdGhpbmd9XG4gICAgYDtcbiAgfVxuXG4gIHByaXZhdGUgX2dldFJlbmRlckVsZW1lbnRXaXRob3V0QXJlYShcbiAgICBncmFwaGljYWxFbGVtZW50OiBCYXNlRWxlbWVudCxcbiAgICByb3RhdGlvbjogbnVtYmVyLFxuICAgIGNvYWNoRGltZW5zaW9uOiBFbGVtZW50RGltZW5zaW9uLFxuICApOiBUZW1wbGF0ZVJlc3VsdCB7XG4gICAgY29uc3QgY2FsY3VsYXRlZERpbWVuc2lvbiA9IHRoaXMuZ2V0Q2FsY3VsYXRlZERpbWVuc2lvbihcbiAgICAgIGdyYXBoaWNhbEVsZW1lbnQuZGltZW5zaW9uLFxuICAgICAgY29hY2hEaW1lbnNpb24sXG4gICAgKTtcbiAgICBjb25zdCBjYWxjdWxhdGVkUG9zaXRpb24gPSB0aGlzLmdldENhbGN1bGF0ZWRQb3NpdGlvbihcbiAgICAgIGdyYXBoaWNhbEVsZW1lbnQucG9zaXRpb24sXG4gICAgICBncmFwaGljYWxFbGVtZW50LmRpbWVuc2lvbixcbiAgICAgIGNvYWNoRGltZW5zaW9uLFxuICAgICk7XG5cbiAgICAvLyBJZiB0aGUgaWNvbiBpcyB0aGUgZHJpdmVyIGFyZWEsIHRoZW4gaGVyZSBjb25jYXQgdGhlIHZlaGljbGUgdHlwZSB0byBnZXQgdGhlIHJpZ2h0IHZlaGljbGUgY2hhc3NpZSBpY29uXG4gICAgY29uc3QgaWNvbiA9XG4gICAgICBncmFwaGljYWxFbGVtZW50Lmljb24gJiYgZ3JhcGhpY2FsRWxlbWVudC5pY29uLmluZGV4T2YoJ0RSSVZFUl9BUkVBJykgPT09IC0xXG4gICAgICAgID8gZ3JhcGhpY2FsRWxlbWVudC5pY29uXG4gICAgICAgIDogZ3JhcGhpY2FsRWxlbWVudC5pY29uPy5jb25jYXQoXG4gICAgICAgICAgICAnXycsXG4gICAgICAgICAgICB0aGlzLnNlYXRSZXNlcnZhdGlvbnNbdGhpcy5jdXJyU2VsZWN0ZWREZWNrSW5kZXhdLnZlaGljbGVUeXBlLFxuICAgICAgICAgICk7XG5cbiAgICByZXR1cm4gaHRtbGAgPHNiYi1zZWF0LXJlc2VydmF0aW9uLWdyYXBoaWNcbiAgICAgIHN0eWxlPSR7c3R5bGVNYXAoe1xuICAgICAgICAnLS1zYmItc2VhdC1yZXNlcnZhdGlvbi1ncmFwaGljLXdpZHRoJzogY2FsY3VsYXRlZERpbWVuc2lvbi53LFxuICAgICAgICAnLS1zYmItc2VhdC1yZXNlcnZhdGlvbi1ncmFwaGljLWhlaWdodCc6IGNhbGN1bGF0ZWREaW1lbnNpb24uaCxcbiAgICAgICAgJy0tc2JiLXNlYXQtcmVzZXJ2YXRpb24tZ3JhcGhpYy10b3AnOiBjYWxjdWxhdGVkUG9zaXRpb24ueSxcbiAgICAgICAgJy0tc2JiLXNlYXQtcmVzZXJ2YXRpb24tZ3JhcGhpYy1sZWZ0JzogY2FsY3VsYXRlZFBvc2l0aW9uLngsXG4gICAgICAgICctLXNiYi1zZWF0LXJlc2VydmF0aW9uLWdyYXBoaWMtcG9zaXRpb24nOiAnYWJzb2x1dGUnLFxuICAgICAgfSl9XG4gICAgICBuYW1lPSR7aWNvbiA/PyBub3RoaW5nfVxuICAgICAgcm90YXRpb249JHtyb3RhdGlvbn1cbiAgICAgIGFyaWEtaGlkZGVuPVwidHJ1ZVwiXG4gICAgICA/c3RyZXRjaD0ke3RydWV9XG4gICAgPjwvc2JiLXNlYXQtcmVzZXJ2YXRpb24tZ3JhcGhpYz5gO1xuICB9XG5cbiAgcHJpdmF0ZSBfZ2V0UmVuZGVyZWRTZXJ2aWNlRWxlbWVudHMoXG4gICAgY29hY2hJbmRleDogbnVtYmVyLFxuICAgIGNvYWNoRGVja0luZGV4OiBudW1iZXIsXG4gICAgc2VydmljZUVsZW1lbnRzPzogQmFzZUVsZW1lbnRbXSxcbiAgKTogVGVtcGxhdGVSZXN1bHRbXSB8IG51bGwge1xuICAgIGlmICghc2VydmljZUVsZW1lbnRzKSByZXR1cm4gbnVsbDtcblxuICAgIHJldHVybiBzZXJ2aWNlRWxlbWVudHM/Lm1hcCgoc2VydmljZUVsZW1lbnQ6IEJhc2VFbGVtZW50KSA9PiB7XG4gICAgICBjb25zdCB0aXRsZURlc2NyaXB0aW9uID0gc2VydmljZUVsZW1lbnQuaWNvblxuICAgICAgICA/IGdldEkxOG5TZWF0UmVzZXJ2YXRpb24oc2VydmljZUVsZW1lbnQuaWNvbiwgdGhpcy5fbGFuZ3VhZ2UuY3VycmVudClcbiAgICAgICAgOiBudWxsO1xuICAgICAgY29uc3QgY2FsY3VsYXRlZERpbWVuc2lvbiA9IHRoaXMuZ2V0Q2FsY3VsYXRlZERpbWVuc2lvbihzZXJ2aWNlRWxlbWVudC5kaW1lbnNpb24pO1xuICAgICAgY29uc3QgY2FsY3VsYXRlZFBvc2l0aW9uID0gdGhpcy5nZXRDYWxjdWxhdGVkUG9zaXRpb24oc2VydmljZUVsZW1lbnQucG9zaXRpb24pO1xuICAgICAgY29uc3QgZWxlbWVudFJvdGF0aW9uID0gc2VydmljZUVsZW1lbnQucm90YXRpb24gfHwgMDtcbiAgICAgIGNvbnN0IGVsZW1lbnRGaXhlZFJvdGF0aW9uID0gdGhpcy5hbGlnblZlcnRpY2FsID8gZWxlbWVudFJvdGF0aW9uIC0gOTAgOiBlbGVtZW50Um90YXRpb247XG5cbiAgICAgIC8vZ2VuZXJhdGUgdW5pcXVlIGluZGV4IG51bWJlciBmb3IgdGhlIHRyaWdnZXIgZWxlbWVudFxuICAgICAgY29uc3QgdHJpZ2dlcklkID0gYHBvcG92ZXItdHJpZ2dlci0ke2NvYWNoRGVja0luZGV4fS0ke2NvYWNoSW5kZXh9LSR7Y2FsY3VsYXRlZFBvc2l0aW9uLnh9LSR7Y2FsY3VsYXRlZFBvc2l0aW9uLnl9YDtcblxuICAgICAgcmV0dXJuIGh0bWxgXG4gICAgICAgIDxzYmItc2VhdC1yZXNlcnZhdGlvbi1ncmFwaGljXG4gICAgICAgICAgaWQ9XCIke3RyaWdnZXJJZH1cIlxuICAgICAgICAgIHN0eWxlPSR7c3R5bGVNYXAoe1xuICAgICAgICAgICAgJy0tc2JiLXNlYXQtcmVzZXJ2YXRpb24tZ3JhcGhpYy13aWR0aCc6IGNhbGN1bGF0ZWREaW1lbnNpb24udyxcbiAgICAgICAgICAgICctLXNiYi1zZWF0LXJlc2VydmF0aW9uLWdyYXBoaWMtaGVpZ2h0JzogY2FsY3VsYXRlZERpbWVuc2lvbi5oLFxuICAgICAgICAgICAgJy0tc2JiLXNlYXQtcmVzZXJ2YXRpb24tZ3JhcGhpYy10b3AnOiBjYWxjdWxhdGVkUG9zaXRpb24ueSxcbiAgICAgICAgICAgICctLXNiYi1zZWF0LXJlc2VydmF0aW9uLWdyYXBoaWMtbGVmdCc6IGNhbGN1bGF0ZWRQb3NpdGlvbi54LFxuICAgICAgICAgICAgJy0tc2JiLXNlYXQtcmVzZXJ2YXRpb24tZ3JhcGhpYy1wb3NpdGlvbic6ICdhYnNvbHV0ZScsXG4gICAgICAgICAgfSl9XG4gICAgICAgICAgY2xhc3M9XCJzYmItc2VhdC1yZXNlcnZhdGlvbi1ncmFwaGljLS1jdXJzb3ItcG9pbnRlclwiXG4gICAgICAgICAgbmFtZT0ke3NlcnZpY2VFbGVtZW50Lmljb24gPz8gbm90aGluZ31cbiAgICAgICAgICAucm90YXRpb249JHtlbGVtZW50Rml4ZWRSb3RhdGlvbn1cbiAgICAgICAgICByb2xlPVwiaW1nXCJcbiAgICAgICAgICBhcmlhLWhpZGRlbj1cInRydWVcIlxuICAgICAgICA+PC9zYmItc2VhdC1yZXNlcnZhdGlvbi1ncmFwaGljPlxuICAgICAgICAke3RoaXMuX3BvcG92ZXIodHJpZ2dlcklkLCB0aXRsZURlc2NyaXB0aW9uKX1cbiAgICAgIGA7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogTWFuYWdlcyB0aGUgc2VsZWN0ZWQgcGxhY2UgZXZlbnQgdHJpZ2dlcmVkIGZyb20gdGhlIHBsYWNlXG4gICAqIEVhY2ggc2VsZWN0aW9uIGVtaXRzIGFuIGFycmF5IG9mIGFsbCBzZWxlY3RlZCBwbGFjZXNcbiAgICogQHBhcmFtIHNlbGVjdFBsYWNlRXZlbnRcbiAgICovXG4gIHByaXZhdGUgX29uU2VsZWN0UGxhY2Uoc2VsZWN0UGxhY2VFdmVudDogQ3VzdG9tRXZlbnQ8UGxhY2VTZWxlY3Rpb24+KTogdm9pZCB7XG4gICAgY29uc3Qgc2VsZWN0ZWRQbGFjZSA9IHNlbGVjdFBsYWNlRXZlbnQuZGV0YWlsO1xuICAgIC8vIFdlIGhhdmUgdG8gc2V0IHByZXZlbnRDb2FjaFNjcm9sbEJ5UGxhY2VDbGljayB0byB0cnVlLCB0byBwcmV2ZW50IGF1dG9tYXRpYyBzY3JvbGxpbmcgdG8gdGhlIG5ldyBmb2N1c2VkIHBsYWNlXG4gICAgdGhpcy5wcmV2ZW50Q29hY2hTY3JvbGxCeVBsYWNlQ2xpY2sgPSB0cnVlO1xuICAgIHRoaXMuaXNDb2FjaEdyaWRGb2N1c2FibGUgPSBmYWxzZTtcbiAgICBpZiAoIXRoaXMucHJldmVudFBsYWNlQ2xpY2spIHtcbiAgICAgIC8vIFNldCBjdXJyZW50IGRlY2sgaW5kZXggaWYgYSBwbGFjZXMgd2FzIHNlbGVjdGVkXG4gICAgICB0aGlzLmN1cnJTZWxlY3RlZERlY2tJbmRleCA9IHNlbGVjdGVkUGxhY2UuZGVja0luZGV4O1xuICAgICAgLy8gQWRkIHBsYWNlIHRvIHBsYWNlIGNvbGxlY3Rpb25cbiAgICAgIHRoaXMudXBkYXRlU2VsZWN0ZWRTZWF0UmVzZXJ2YXRpb25QbGFjZXMoc2VsZWN0ZWRQbGFjZSk7XG4gICAgICB0aGlzLnVwZGF0ZUN1cnJlbnRTZWxlY3RlZFBsYWNlSW5Db2FjaChzZWxlY3RlZFBsYWNlKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9vblNlbGVjdE5hdkNvYWNoKGV2ZW50OiBDdXN0b21FdmVudDxudW1iZXI+KTogdm9pZCB7XG4gICAgY29uc3Qgc2VsZWN0ZWROYXZDb2FjaEluZGV4ID0gZXZlbnQuZGV0YWlsO1xuICAgIHRoaXMuaXNLZXlib2FyZE5hdmlnYXRpb24gPSBmYWxzZTtcblxuICAgIGlmIChzZWxlY3RlZE5hdkNvYWNoSW5kZXggIT09IG51bGwgJiYgc2VsZWN0ZWROYXZDb2FjaEluZGV4ICE9PSB0aGlzLmN1cnJTZWxlY3RlZENvYWNoSW5kZXgpIHtcbiAgICAgIHRoaXMudW5mb2N1c1BsYWNlRWxlbWVudCgpO1xuICAgICAgdGhpcy5zY3JvbGxUb1NlbGVjdGVkTmF2Q29hY2goc2VsZWN0ZWROYXZDb2FjaEluZGV4KTtcbiAgICB9IGVsc2UgaWYgKHNlbGVjdGVkTmF2Q29hY2hJbmRleCA9PT0gdGhpcy5jdXJyU2VsZWN0ZWRDb2FjaEluZGV4KSB7XG4gICAgICB0aGlzLnVwZGF0ZUN1cnJlbnRTZWxlY3RlZENvYWNoKCk7XG4gICAgICB0aGlzLnByZXNlbGVjdFBsYWNlSW5Db2FjaCgpO1xuICAgIH1cblxuICAgIC8vY2xvc2UgYWxsIG9wZW5lZCBwb3BvdmVyc1xuICAgIHRoaXMuX2Nsb3NlUG9wb3ZlcigpO1xuICB9XG5cbiAgcHJpdmF0ZSBfb25Gb2N1c05hdkNvYWNoKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5wcmV2ZW50Q29hY2hTY3JvbGxCeVBsYWNlQ2xpY2spIHtcbiAgICAgIHRoaXMucHJlc2VsZWN0UGxhY2VJbkNvYWNoKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZm9jdXNQbGFjZUVsZW1lbnQodGhpcy5jdXJyU2VsZWN0ZWRQbGFjZSk7XG4gICAgfVxuICAgIHRoaXMuaXNBdXRvU2Nyb2xsaW5nID0gZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhIHBvcG92ZXIgZm9yIGV4dHJhIHNlcnZpY2UgaW5mb3JtYXRpb25cbiAgICogQHBhcmFtIHRyaWdnZXJJZFxuICAgKiBAcGFyYW0gcG9wb3ZlckNvbnRlbnRcbiAgICogQHByaXZhdGVcbiAgICovXG4gIHByaXZhdGUgX3BvcG92ZXIoXG4gICAgdHJpZ2dlcklkOiBzdHJpbmcsXG4gICAgcG9wb3ZlckNvbnRlbnQ6IHN0cmluZyB8IG51bGwgfCB0eXBlb2Ygbm90aGluZyxcbiAgKTogVGVtcGxhdGVSZXN1bHQge1xuICAgIHJldHVybiBodG1sYFxuICAgICAgPHNiYi1wb3BvdmVyIHRyaWdnZXI9XCIke3RyaWdnZXJJZH1cIj5cbiAgICAgICAgPHAgY2xhc3M9XCJzYmItdGV4dC1zIHNiYi1zci1wb3BvdmVyXCI+JHtwb3BvdmVyQ29udGVudH08L3A+XG4gICAgICA8L3NiYi1wb3BvdmVyPlxuICAgIGA7XG4gIH1cblxuICAvKipcbiAgICogdHJpZ2dlciB0byBjbG9zZSBhbGwgb3BlbmVkIHBvcG92ZXJzIChub3JtYWxseSBvbmx5IG9uZSBpcyBvcGVuZWQgYXQgYSB0aW1lKVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgcHJpdmF0ZSBfY2xvc2VQb3BvdmVyKCk6IHZvaWQge1xuICAgIHRoaXMuc2hhZG93Um9vdFxuICAgICAgPy5xdWVyeVNlbGVjdG9yQWxsKCdzYmItcG9wb3ZlcltkYXRhLXN0YXRlPVwib3BlbmVkXCJdJylcbiAgICAgIC5mb3JFYWNoKChwb3BvdmVyKSA9PiBwb3BvdmVyLnNldEF0dHJpYnV0ZSgnZGF0YS1zdGF0ZScsICdjbG9zZWQnKSk7XG4gIH1cblxuICBwcml2YXRlIF9nZXREZXNjcmlwdGlvblRhYmxlQ29hY2goY29hY2hJdGVtOiBDb2FjaEl0ZW0sIGNvYWNoSW5kZXg6IG51bWJlcik6IHN0cmluZyB7XG4gICAgaWYgKCFjb2FjaEl0ZW0ucGxhY2VzPy5sZW5ndGgpIHtcbiAgICAgIHJldHVybiBnZXRJMThuU2VhdFJlc2VydmF0aW9uKCdDT0FDSF9CTE9DS0VEX1RBQkxFX0NBUFRJT04nLCB0aGlzLl9sYW5ndWFnZS5jdXJyZW50LCBbXG4gICAgICAgIGNvYWNoSXRlbS5pZCxcbiAgICAgIF0pO1xuICAgIH1cblxuICAgIGxldCB0YWJsZUNvYWNoRGVzY3JpcHRpb246IHN0cmluZztcbiAgICBjb25zdCBhcmVhRGVzY3JpcHRpb25zID0gdGhpcy5fZ2V0VGl0bGVEZXNjcmlwdGlvbkxpc3RTdHJpbmcoY29hY2hJdGVtLmdyYXBoaWNFbGVtZW50cyEpO1xuICAgIGNvbnN0IHNlcnZpY2VEZXNjcmlwdGlvbnMgPSB0aGlzLl9nZXRUaXRsZURlc2NyaXB0aW9uTGlzdFN0cmluZyhjb2FjaEl0ZW0uc2VydmljZUVsZW1lbnRzISk7XG5cbiAgICB0YWJsZUNvYWNoRGVzY3JpcHRpb24gPSBnZXRJMThuU2VhdFJlc2VydmF0aW9uKCdDT0FDSF9UQUJMRV9DQVBUSU9OJywgdGhpcy5fbGFuZ3VhZ2UuY3VycmVudCwgW1xuICAgICAgY29hY2hJdGVtLmlkLFxuICAgIF0pO1xuXG4gICAgaWYgKCF0aGlzLmhhc05hdmlnYXRpb24pIHtcbiAgICAgIC8vIEV4cGFuZHMgdGhlIG51bWJlciBvZiBhdmFpbGFibGUgc2VhdHMgYW5kIGJpY3ljbGUgc3BhY2VzIGFzIGluZm9cbiAgICAgIGNvbnN0IGZyZWVQbGFjZXMgPSB0aGlzLmdldEF2YWlsYWJsZUZyZWVQbGFjZXNOdW1Gcm9tQ29hY2goY29hY2hJbmRleCk7XG4gICAgICBjb25zdCBmcmVlUGxhY2VzVHh0ID0gZ2V0STE4blNlYXRSZXNlcnZhdGlvbihcbiAgICAgICAgJ0NPQUNIX0FWQUlMQUJMRV9OVU1CRVJfT0ZfUExBQ0VTJyxcbiAgICAgICAgdGhpcy5fbGFuZ3VhZ2UuY3VycmVudCxcbiAgICAgICAgW2ZyZWVQbGFjZXMuc2VhdHMsIGZyZWVQbGFjZXMuYmljeWNsZXNdLFxuICAgICAgKTtcbiAgICAgIHRhYmxlQ29hY2hEZXNjcmlwdGlvbiA9IHRhYmxlQ29hY2hEZXNjcmlwdGlvbi5jb25jYXQoJy4gJykuY29uY2F0KGZyZWVQbGFjZXNUeHQpLmNvbmNhdCgnLiAnKTtcbiAgICB9XG5cbiAgICBpZiAoISFhcmVhRGVzY3JpcHRpb25zIHx8ICEhc2VydmljZURlc2NyaXB0aW9ucykge1xuICAgICAgdGFibGVDb2FjaERlc2NyaXB0aW9uICs9XG4gICAgICAgICcuICcgKyBnZXRJMThuU2VhdFJlc2VydmF0aW9uKCdDT0FDSF9BVkFJTEFCTEVfU0VSVklDRVMnLCB0aGlzLl9sYW5ndWFnZS5jdXJyZW50KSArICc6ICc7XG4gICAgICB0YWJsZUNvYWNoRGVzY3JpcHRpb24gKz0gc2VydmljZURlc2NyaXB0aW9ucyArICcsICcgKyBhcmVhRGVzY3JpcHRpb25zICsgJy4nO1xuICAgIH1cbiAgICByZXR1cm4gdGFibGVDb2FjaERlc2NyaXB0aW9uO1xuICB9XG5cbiAgcHJpdmF0ZSBfZ2V0VGl0bGVEZXNjcmlwdGlvbkxpc3RTdHJpbmcoZGVzY3JpcHRpb25zRWxlbWVudHM6IEJhc2VFbGVtZW50W10pOiBzdHJpbmcge1xuICAgIGNvbnN0IHVuaXF1ZURlc2NyaXB0aW9uczogc3RyaW5nW10gPSBbXTtcblxuICAgIHJldHVybiBkZXNjcmlwdGlvbnNFbGVtZW50c1xuICAgICAgPy5tYXAoKGRlc2NyaXB0aW9uRWxlbWVudCkgPT4ge1xuICAgICAgICBjb25zdCBpY29uID0gZGVzY3JpcHRpb25FbGVtZW50Lmljb247XG4gICAgICAgIGlmICghaWNvbikgcmV0dXJuIG51bGw7XG5cbiAgICAgICAgY29uc3QgZGVzY3JpcHRpb25BbHJlYXlFeGlzdCA9IHVuaXF1ZURlc2NyaXB0aW9ucy5pbmRleE9mKGljb24pID4gLTE7XG4gICAgICAgIGNvbnN0IHRyYW5zbGF0aW9uID0gZ2V0STE4blNlYXRSZXNlcnZhdGlvbihcbiAgICAgICAgICBkZXNjcmlwdGlvbkVsZW1lbnQuaWNvbiEsXG4gICAgICAgICAgdGhpcy5fbGFuZ3VhZ2UuY3VycmVudCxcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3QgaXNWYWxpZERlc2NyaXB0aW9uID1cbiAgICAgICAgICB0aGlzLl9ub3RGaXhlZFJvdGF0YWJsZUFyZWFJY29ucy5pbmRleE9mKGljb24pID09PSAtMSAmJlxuICAgICAgICAgIHRoaXMuX25vdEFyZWFFbGVtZW50cy5pbmRleE9mKGljb24pID09PSAtMTtcblxuICAgICAgICBpZiAoIWRlc2NyaXB0aW9uQWxyZWF5RXhpc3QpIHtcbiAgICAgICAgICB1bmlxdWVEZXNjcmlwdGlvbnMucHVzaChkZXNjcmlwdGlvbkVsZW1lbnQuaWNvbiEpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAhIXRyYW5zbGF0aW9uICYmICFkZXNjcmlwdGlvbkFscmVheUV4aXN0ICYmIGlzVmFsaWREZXNjcmlwdGlvbiA/IHRyYW5zbGF0aW9uIDogbnVsbDtcbiAgICAgIH0pXG4gICAgICAuZmlsdGVyKChkZXNjcmlwdGlvbikgPT4gISFkZXNjcmlwdGlvbilcbiAgICAgIC5qb2luKCcsICcpO1xuICB9XG59XG5cbmRlY2xhcmUgZ2xvYmFsIHtcbiAgaW50ZXJmYWNlIEhUTUxFbGVtZW50VGFnTmFtZU1hcCB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uYW1pbmctY29udmVudGlvblxuICAgICdzYmItc2VhdC1yZXNlcnZhdGlvbic6IFNiYlNlYXRSZXNlcnZhdGlvbkVsZW1lbnQ7XG4gIH1cbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztJQW1DTSw2QkFBeUIsTUFBQTs7MEJBRDlCLGNBQWMsc0JBQXNCLENBQUM7Ozs7b0JBQ0U7QUFBUixFQUFBLG1CQUFRLFlBQTBCO0FBQUE7O0FBR3hELFdBQUEsWUFBWSxJQUFJLHNCQUFzQixJQUFJO0FBRzFDLFdBQUEsbUJBQW1CO0FBQUEsUUFDekI7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxNQUFBO0FBSU0sV0FBQSw4QkFBOEIsQ0FBQyxZQUFZO0FBQUEsSUF5cUJyRDtBQUFBLElBdnFCcUIsV0FBVyxtQkFBdUM7QUFDbkUsWUFBTSxXQUFXLGlCQUFpQjtBQUVsQyxVQUFJLGtCQUFrQixJQUFJLGVB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
|
|
895
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VhdC1yZXNlcnZhdGlvbi5jb21wb25lbnQuanMiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9lbGVtZW50cy1leHBlcmltZW50YWwvc2VhdC1yZXNlcnZhdGlvbi9zZWF0LXJlc2VydmF0aW9uL3NlYXQtcmVzZXJ2YXRpb24uY29tcG9uZW50LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFNiYkxhbmd1YWdlQ29udHJvbGxlciB9IGZyb20gJ0BzYmItZXN0YS9seW5lLWVsZW1lbnRzL2NvcmUvY29udHJvbGxlcnMuanMnO1xuaW1wb3J0IHsgaHRtbCwgbm90aGluZyB9IGZyb20gJ2xpdCc7XG5pbXBvcnQgdHlwZSB7IENTU1Jlc3VsdEdyb3VwLCBQcm9wZXJ0eVZhbHVlcywgVGVtcGxhdGVSZXN1bHQgfSBmcm9tICdsaXQnO1xuaW1wb3J0IHsgY3VzdG9tRWxlbWVudCB9IGZyb20gJ2xpdC9kZWNvcmF0b3JzLmpzJztcbmltcG9ydCB7IGNsYXNzTWFwIH0gZnJvbSAnbGl0L2RpcmVjdGl2ZXMvY2xhc3MtbWFwLmpzJztcbmltcG9ydCB7IHN0eWxlTWFwIH0gZnJvbSAnbGl0L2RpcmVjdGl2ZXMvc3R5bGUtbWFwLmpzJztcblxuaW1wb3J0IHsgZ2V0STE4blNlYXRSZXNlcnZhdGlvbiB9IGZyb20gJy4uL2NvbW1vbi5qcyc7XG5pbXBvcnQgdHlwZSB7XG4gIENvYWNoSXRlbSxcbiAgUGxhY2UsXG4gIEVsZW1lbnREaW1lbnNpb24sXG4gIEJhc2VFbGVtZW50LFxuICBQbGFjZVNlbGVjdGlvbixcbiAgU2VhdFJlc2VydmF0aW9uLFxufSBmcm9tICcuLi9jb21tb24uanMnO1xuXG5pbXBvcnQgeyBTZWF0UmVzZXJ2YXRpb25CYXNlRWxlbWVudCB9IGZyb20gJy4vc2VhdC1yZXNlcnZhdGlvbi1iYXNlLWVsZW1lbnQuanMnO1xuaW1wb3J0IHN0eWxlIGZyb20gJy4vc2VhdC1yZXNlcnZhdGlvbi5zY3NzP2xpdCZpbmxpbmUnO1xuXG5pbXBvcnQgJ0BzYmItZXN0YS9seW5lLWVsZW1lbnRzL2J1dHRvbi5qcyc7XG5pbXBvcnQgJ0BzYmItZXN0YS9seW5lLWVsZW1lbnRzL3NjcmVlbi1yZWFkZXItb25seS5qcyc7XG5pbXBvcnQgJy4uL3NlYXQtcmVzZXJ2YXRpb24tYXJlYS5qcyc7XG5pbXBvcnQgJy4uL3NlYXQtcmVzZXJ2YXRpb24tZ3JhcGhpYy5qcyc7XG5pbXBvcnQgJy4uL3NlYXQtcmVzZXJ2YXRpb24tcGxhY2UtY29udHJvbC5qcyc7XG5pbXBvcnQgJy4uL3NlYXQtcmVzZXJ2YXRpb24tbmF2aWdhdGlvbi1jb2FjaC5qcyc7XG5pbXBvcnQgJy4uL3NlYXQtcmVzZXJ2YXRpb24tc2NvcGVkLmpzJztcbmltcG9ydCAnQHNiYi1lc3RhL2x5bmUtZWxlbWVudHMvcG9wb3Zlci9wb3BvdmVyLmpzJztcblxuLyoqXG4gKiBNYWluIGNvbXBvbmVudCBmb3IgdGhlIHNlYXQgcmVzZXJ2YXRpb24uXG4gKlxuICovXG5leHBvcnRcbkBjdXN0b21FbGVtZW50KCdzYmItc2VhdC1yZXNlcnZhdGlvbicpXG5jbGFzcyBTYmJTZWF0UmVzZXJ2YXRpb25FbGVtZW50IGV4dGVuZHMgU2VhdFJlc2VydmF0aW9uQmFzZUVsZW1lbnQge1xuICBwdWJsaWMgc3RhdGljIG92ZXJyaWRlIHN0eWxlczogQ1NTUmVzdWx0R3JvdXAgPSBzdHlsZTtcblxuICBwcml2YXRlIF9sYW5ndWFnZSA9IG5ldyBTYmJMYW5ndWFnZUNvbnRyb2xsZXIodGhpcyk7XG4gIHByaXZhdGUgX2NvYWNoZXNIdG1sVGVtcGxhdGU/OiBUZW1wbGF0ZVJlc3VsdDtcbiAgLy8gR3JhcGhpY3MgdGhhdCBzaG91bGQgbm90IGJlIHJlbmRlcmVkIHdpdGggYW4gYXJlYVxuICBwcml2YXRlIF9ub3RBcmVhRWxlbWVudHMgPSBbXG4gICAgJ0RSSVZFUl9BUkVBJyxcbiAgICAnQ09BQ0hfUEFTU0FHRScsXG4gICAgJ0NPQUNIX1dBTExfTk9fUEFTU0FHRScsXG4gICAgJ0NPTVBBUlRNRU5UX1BBU1NBR0UnLFxuICAgICdDT01QQVJUTUVOVF9QQVNTQUdFX0hJR0gnLFxuICAgICdDT01QQVJUTUVOVF9QQVNTQUdFX01JRERMRScsXG4gICAgJ0NPTVBBUlRNRU5UX1BBU1NBR0VfTE9XJyxcbiAgXTtcblxuICAvLyBBcmVhIGljb25zIHRoYXQgc2hvdWxkIG5vdCBiZSBmaXhlZCBkdXJpbmcgcm90YXRpb24gd2hlbiB2ZXJ0aWNhbCBtb2RlIGlzIHNlbGVjdGVkXG4gIHByaXZhdGUgX25vdEZpeGVkUm90YXRhYmxlQXJlYUljb25zID0gWydFTlRSWV9FWElUJ107XG5cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIHdpbGxVcGRhdGUoY2hhbmdlZFByb3BlcnRpZXM6IFByb3BlcnR5VmFsdWVzPHRoaXM+KTogdm9pZCB7XG4gICAgc3VwZXIud2lsbFVwZGF0ZShjaGFuZ2VkUHJvcGVydGllcyk7XG5cbiAgICBpZiAoY2hhbmdlZFByb3BlcnRpZXMuaGFzKCdoYXNOYXZpZ2F0aW9uJykpIHtcbiAgICAgIGlmICh0aGlzLmhhc05hdmlnYXRpb24pIHtcbiAgICAgICAgdGhpcy5zaGFkb3dSb290XG4gICAgICAgICAgPy5xdWVyeVNlbGVjdG9yQWxsKCd0YWJsZScpXG4gICAgICAgICAgLmZvckVhY2goKHRhYmxlKSA9PiB0YWJsZS5yZW1vdmVBdHRyaWJ1dGUoJ3RhYmluZGV4JykpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5zaGFkb3dSb290XG4gICAgICAgICAgPy5xdWVyeVNlbGVjdG9yQWxsKCd0YWJsZScpXG4gICAgICAgICAgLmZvckVhY2goKHRhYmxlKSA9PiB0YWJsZS5zZXRBdHRyaWJ1dGUoJ3RhYmluZGV4JywgJzAnKSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIGZpcnN0VXBkYXRlZChjaGFuZ2VkUHJvcGVydGllczogUHJvcGVydHlWYWx1ZXM8dGhpcz4pOiB2b2lkIHtcbiAgICBzdXBlci5maXJzdFVwZGF0ZWQoY2hhbmdlZFByb3BlcnRpZXMpO1xuXG4gICAgLy8gV2UgbmVlZCB0byB3YWl0IHVudGlsIHRoZSBmaXJzdCB1cGRhdGUgaXMgY29tcGxldGUgdG8gaW5pdCBkaWZmZXJlbnQgaHRtbCBlbGVtZW50IGRpbWVuc2lvbnNcbiAgICB0aGlzLnVwZGF0ZUNvbXBsZXRlLnRoZW4oKCkgPT4ge1xuICAgICAgdGhpcy5pbml0UHJlcGFpclNlYXRSZXNlcnZhdGlvbkRhdGEoKTtcbiAgICAgIHRoaXMuaW5pdE5hdmlnYXRpb25TZWxlY3Rpb25CeVNjcm9sbEV2ZW50KCk7XG5cbiAgICAgIC8vIFdlIGhhdmUgdG8gaW5pdGlhdGUgdGhlIHJlbmRlciBwcm9jZXNzIG1hbnVhbGx5IHNvIHRoYXQgdGhlIHByZXBhcmVkIGRhdGEgaXMgYXBwbGllZCBkaXJlY3RseVxuICAgICAgLy8gYW5kIG5vdCBvbmx5IGFmdGVyIGFuIGludGVyYWN0aW9uIHdpdGggdGhlIGNvbXBvbmVudCBpdHNlbGZcbiAgICAgIHRoaXMucmVxdWVzdFVwZGF0ZSgpO1xuICAgIH0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIHJlbmRlcigpOiBUZW1wbGF0ZVJlc3VsdCB8IG51bGwge1xuICAgIHRoaXMuX2luaXRWZWhpY2xlU2VhdFJlc2VydmF0aW9uQ29uc3RydWN0aW9uKCk7XG4gICAgcmV0dXJuIHRoaXMuX2NvYWNoZXNIdG1sVGVtcGxhdGUgfHwgbnVsbDtcbiAgfVxuXG4gIHByaXZhdGUgX2luaXRWZWhpY2xlU2VhdFJlc2VydmF0aW9uQ29uc3RydWN0aW9uKCk6IHZvaWQge1xuICAgIHRoaXMuX2NvYWNoZXNIdG1sVGVtcGxhdGUgPSBodG1sYFxuICAgICAgPGRpdiBjbGFzcz1cInNiYi1zcl9fY29udGFpbmVyXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJzYmItc3Igc2JiLXNyX19ncmlkXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInNiYi1zci1uYXZpZ2F0aW9uLWZpcnN0LWdyaWRcIj5cbiAgICAgICAgICAgICR7dGhpcy5fcmVuZGVyTmF2aWdhdGlvbkNvbnRyb2xCdXR0b24oJ0RJUkVDVElPTl9MRUZUJyl9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3M9XCJzYmItc3JfX2NvbXBvbmVudFwiXG4gICAgICAgICAgICBAa2V5ZG93bj0keyhldnQ6IEtleWJvYXJkRXZlbnQpID0+IHRoaXMuaGFuZGxlS2V5Ym9hcmRFdmVudChldnQpfVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzYmItc3ItZ3JpZC1pbm5lclwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibmF2LWdyaWRcIj4ke3RoaXMuX3JlbmRlck5hdmlnYXRpb24oKX08L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvYWNoZXMtZ3JpZFwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzYmItc3JfX3dyYXBwZXItY29hY2gtZGVja3NcIj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzYmItc3JfX3dyYXBwZXItZGVjay1sYWJlbHNcIj4ke3RoaXMuX3JlbmRlckRlY2tMYWJlbHMoKX08L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9XCJzYmItc3JfX3dyYXBwZXItc2Nyb2xsYXJlYVwiIGNsYXNzPVwic2JiLXNyX193cmFwcGVyXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9XCJzYmItc3JfX3BhcmVudC1hcmVhXCIgY2xhc3M9XCJzYmItc3JfX3BhcmVudFwiIHRhYmluZGV4PVwiLTFcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8dWxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiJHtjbGFzc01hcCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICdzYmItc3JfX2xpc3QtZGVja3MnOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAnc2JiLXNyX19saXN0LWRlY2tzLS1nYXAnOiB0aGlzLmhhc011bHRpcGxlRGVja3MsXG4gICAgICAgICAgICAgICAgICAgICAgICB9KX1cIlxuICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICR7dGhpcy5zZWF0UmVzZXJ2YXRpb25zPy5tYXAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgIChzZWF0UmVzZXJ2YXRpb246IFNlYXRSZXNlcnZhdGlvbiwgaW5kZXg6IG51bWJlcikgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBodG1sYDxsaSBjbGFzcz1cInNiYi1zcl9fbGlzdC1pdGVtLWRlY2tcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bCBjbGFzcz1cInNiYi1zcl9fbGlzdC1jb2FjaGVzXCIgcm9sZT1cInByZXNlbnRhdGlvblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke3RoaXMuX3JlbmRlckNvYWNoZXMoc2VhdFJlc2VydmF0aW9uLCBpbmRleCl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3VsPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+YDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgICAgPC91bD5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwic2JiLXNyLW5hdmlnYXRpb24tbGFzdC1ncmlkXCI+XG4gICAgICAgICAgICAke3RoaXMuX3JlbmRlck5hdmlnYXRpb25Db250cm9sQnV0dG9uKCdESVJFQ1RJT05fUklHSFQnKX1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICBgO1xuICB9XG5cbiAgcHJpdmF0ZSBfcmVuZGVyRGVja0xhYmVscygpOiBUZW1wbGF0ZVJlc3VsdFtdIHwgbnVsbCB7XG4gICAgaWYgKCF0aGlzLmhhc011bHRpcGxlRGVja3MpIHJldHVybiBudWxsO1xuXG4gICAgcmV0dXJuIHRoaXMuc2VhdFJlc2VydmF0aW9ucy5tYXAoKHNlYXRSZXNlcnZhdGlvbikgPT4ge1xuICAgICAgY29uc3QgZGVja0Rlc2NyaXB0aW9uID0gZ2V0STE4blNlYXRSZXNlcnZhdGlvbihcbiAgICAgICAgc2VhdFJlc2VydmF0aW9uLmRlY2tDb2FjaExldmVsLFxuICAgICAgICB0aGlzLl9sYW5ndWFnZS5jdXJyZW50LFxuICAgICAgKTtcbiAgICAgIHJldHVybiBodG1sYDxiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPiR7ZGVja0Rlc2NyaXB0aW9ufTwvYj5gO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBfcmVuZGVyTmF2aWdhdGlvbkNvbnRyb2xCdXR0b24oYnRuRGlyZWN0aW9uOiBzdHJpbmcpOiBUZW1wbGF0ZVJlc3VsdCB8IG51bGwge1xuICAgIGlmICghdGhpcy5oYXNOYXZpZ2F0aW9uIHx8ICF0aGlzLnNlYXRSZXNlcnZhdGlvbnMpIHJldHVybiBudWxsO1xuXG4gICAgY29uc3QgYnRuSWQgPSBidG5EaXJlY3Rpb24gPT0gJ0RJUkVDVElPTl9SSUdIVCcgPyAnbGFzdC10YWItZWxlbWVudCcgOiAnZmlyc3QtdGFiLWVsZW1lbnQnO1xuICAgIGNvbnN0IGJ0bkljb24gPSBidG5EaXJlY3Rpb24gPT0gJ0RJUkVDVElPTl9SSUdIVCcgPyAnYXJyb3ctcmlnaHQtc21hbGwnIDogJ2Fycm93LWxlZnQtc21hbGwnO1xuICAgIGNvbnN0IGJ0bkFyaWFEZXNjcmlwdGlvbiA9XG4gICAgICBidG5EaXJlY3Rpb24gPT0gJ0RJUkVDVElPTl9SSUdIVCdcbiAgICAgICAgPyBnZXRJMThuU2VhdFJlc2VydmF0aW9uKCdTRUFUX1JFU0VSVkFUSU9OX0VORCcsIHRoaXMuX2xhbmd1YWdlLmN1cnJlbnQpXG4gICAgICAgIDogZ2V0STE4blNlYXRSZXNlcnZhdGlvbignU0VBVF9SRVNFUlZBVElPTl9CRUdJTicsIHRoaXMuX2xhbmd1YWdlLmN1cnJlbnQpO1xuICAgIGxldCBidG5EaXNhYmxlZCA9IHRydWU7XG5cbiAgICBpZiAoYnRuRGlyZWN0aW9uID09ICdESVJFQ1RJT05fTEVGVCcgJiYgdGhpcy5zZWxlY3RlZENvYWNoSW5kZXggPiAwKSB7XG4gICAgICBidG5EaXNhYmxlZCA9IGZhbHNlO1xuICAgIH0gZWxzZSBpZiAoXG4gICAgICBidG5EaXJlY3Rpb24gPT0gJ0RJUkVDVElPTl9SSUdIVCcgJiZcbiAgICAgIHRoaXMuc2VsZWN0ZWRDb2FjaEluZGV4IDxcbiAgICAgICAgdGhpcy5zZWF0UmVzZXJ2YXRpb25zW3RoaXMuY3VyclNlbGVjdGVkRGVja0luZGV4XS5jb2FjaEl0ZW1zLmxlbmd0aCAtIDFcbiAgICApIHtcbiAgICAgIGJ0bkRpc2FibGVkID0gZmFsc2U7XG4gICAgfVxuXG4gICAgcmV0dXJuIGh0bWxgPHNiYi1zZWNvbmRhcnktYnV0dG9uXG4gICAgICBAY2xpY2s9XCIkeygpID0+IHRoaXMubmF2aWdhdGVCeURpcmVjdGlvbkJ0bihidG5EaXJlY3Rpb24pfVwiXG4gICAgICBpZD1cIiR7YnRuSWR9XCJcbiAgICAgIGNsYXNzPVwic2JiLXNyX19uYXZpZ2F0aW9uLWNvbnRyb2wtYnV0dG9uXCJcbiAgICAgIHNpemU9XCJzXCJcbiAgICAgIGljb24tbmFtZT1cIiR7YnRuSWNvbn1cIlxuICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICBhcmlhLWxhYmVsPVwiJHtidG5BcmlhRGVzY3JpcHRpb259XCJcbiAgICAgIHJvbGU9XCJjb250ZW50aW5mb1wiXG4gICAgICAuZGlzYWJsZWRJbnRlcmFjdGl2ZT1cIiR7YnRuRGlzYWJsZWQgfHwgbm90aGluZ31cIlxuICAgID48L3NiYi1zZWNvbmRhcnktYnV0dG9uPmA7XG4gIH1cblxuICBwcml2YXRlIF9yZW5kZXJOYXZpZ2F0aW9uKCk6IFRlbXBsYXRlUmVzdWx0IHwgbnVsbCB7XG4gICAgaWYgKCF0aGlzLmhhc05hdmlnYXRpb24gfHwgIXRoaXMuc2VhdFJlc2VydmF0aW9ucykgcmV0dXJuIG51bGw7XG5cbiAgICByZXR1cm4gaHRtbGA8ZGl2IGNsYXNzPVwic2JiLXNyLW5hdmlnYXRpb24td3JhcHBlclwiPlxuICAgICAgPG5hdiBpZD1cInNiYi1zci1uYXZpZ2F0aW9uXCIgY2xhc3M9XCJzYmItc3ItbmF2aWdhdGlvblwiPlxuICAgICAgICA8dWxcbiAgICAgICAgICBpZD1cInNiYi1zcl9fbmF2aWdhdGlvbi1saXN0LWNvYWNoZXNcIlxuICAgICAgICAgIGNsYXNzPVwic2JiLXNyLW5hdmlnYXRpb25fX2xpc3QtY29hY2hlc1wiXG4gICAgICAgICAgYXJpYS1sYWJlbD1cIiR7Z2V0STE4blNlYXRSZXNlcnZhdGlvbihcbiAgICAgICAgICAgICdTRUFUX1JFU0VSVkFUSU9OX05BVklHQVRJT04nLFxuICAgICAgICAgICAgdGhpcy5fbGFuZ3VhZ2UuY3VycmVudCxcbiAgICAgICAgICApfVwiXG4gICAgICAgID5cbiAgICAgICAgICAke3RoaXMuc2VhdFJlc2VydmF0aW9uc1t0aGlzLmN1cnJTZWxlY3RlZERlY2tJbmRleF0/LmNvYWNoSXRlbXMubWFwKFxuICAgICAgICAgICAgKGNvYWNoSXRlbTogQ29hY2hJdGVtLCBpbmRleDogbnVtYmVyKSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IGNvYWNoRnJlZVBsYWNlcyA9IHRoaXMuZ2V0QXZhaWxhYmxlRnJlZVBsYWNlc051bUZyb21Db2FjaChpbmRleCk7XG4gICAgICAgICAgICAgIHJldHVybiBodG1sYDxsaT5cbiAgICAgICAgICAgICAgICA8c2JiLXNlYXQtcmVzZXJ2YXRpb24tbmF2aWdhdGlvbi1jb2FjaFxuICAgICAgICAgICAgICAgICAgQHNlbGVjdGNvYWNoPSR7KGV2ZW50OiBDdXN0b21FdmVudDxudW1iZXI+KSA9PiB0aGlzLl9vblNlbGVjdE5hdkNvYWNoKGV2ZW50KX1cbiAgICAgICAgICAgICAgICAgIEBmb2N1c2NvYWNoPSR7KCkgPT4gdGhpcy5fb25Gb2N1c05hdkNvYWNoKCl9XG4gICAgICAgICAgICAgICAgICBjbGFzcz1cIiR7Y2xhc3NNYXAoe1xuICAgICAgICAgICAgICAgICAgICAnc2JiLXNyX19uYXZpZ2F0aW9uLWNvYWNoLS1ob3Zlci1zY3JvbGwnOlxuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaG92ZXJlZFNjcm9sbENvYWNoSW5kZXggPT09IGluZGV4LFxuICAgICAgICAgICAgICAgICAgfSl9XCJcbiAgICAgICAgICAgICAgICAgIGluZGV4PVwiJHtpbmRleH1cIlxuICAgICAgICAgICAgICAgICAgY29hY2gtaWQ9XCIke2NvYWNoSXRlbS5pZH1cIlxuICAgICAgICAgICAgICAgICAgLmZyZWVQbGFjZXNCeVR5cGU9XCIke2NvYWNoRnJlZVBsYWNlc31cIlxuICAgICAgICAgICAgICAgICAgLnNlbGVjdGVkPSR7dGhpcy5zZWxlY3RlZENvYWNoSW5kZXggPT09IGluZGV4fVxuICAgICAgICAgICAgICAgICAgLmZvY3VzZWQ9JHt0aGlzLmZvY3VzZWRDb2FjaEluZGV4ID09PSBpbmRleH1cbiAgICAgICAgICAgICAgICAgIC5wcm9wZXJ0eUlkcz1cIiR7Y29hY2hJdGVtLnByb3BlcnR5SWRzfVwiXG4gICAgICAgICAgICAgICAgICAudHJhdmVsQ2xhc3M9XCIke2NvYWNoSXRlbS50cmF2ZWxDbGFzc31cIlxuICAgICAgICAgICAgICAgICAgP2RyaXZlci1hcmVhPVwiJHshY29hY2hJdGVtLnBsYWNlcz8ubGVuZ3RofVwiXG4gICAgICAgICAgICAgICAgICA/Zmlyc3Q9XCIke2NvYWNoSXRlbT8uZHJpdmVyQXJlYVNpZGU/LmxlZnR9XCJcbiAgICAgICAgICAgICAgICAgID9sYXN0PVwiJHtjb2FjaEl0ZW0/LmRyaXZlckFyZWFTaWRlPy5yaWdodH1cIlxuICAgICAgICAgICAgICAgICAgP3ZlcnRpY2FsPVwiJHt0aGlzLmFsaWduVmVydGljYWx9XCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPC9zYmItc2VhdC1yZXNlcnZhdGlvbi1uYXZpZ2F0aW9uLWNvYWNoPlxuICAgICAgICAgICAgICA8L2xpPmA7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICl9XG4gICAgICAgIDwvdWw+XG4gICAgICA8L25hdj5cbiAgICA8L2Rpdj5gO1xuICB9XG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0gY29hY2hlc1xuICAgKiBAcmV0dXJuc1xuICAgKi9cbiAgcHJpdmF0ZSBfcmVuZGVyQ29hY2hlcyhcbiAgICBzZWF0UmVzZXJ2YXRpb246IFNlYXRSZXNlcnZhdGlvbixcbiAgICBkZWNrSW5kZXg6IG51bWJlcixcbiAgKTogVGVtcGxhdGVSZXN1bHRbXSB8IG51bGwge1xuICAgIGNvbnN0IGNvYWNoZXMgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHNlYXRSZXNlcnZhdGlvbj8uY29hY2hJdGVtcykpO1xuXG4gICAgaWYgKCFjb2FjaGVzKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIGNvYWNoZXMubWFwKChjb2FjaEl0ZW06IENvYWNoSXRlbSwgY29hY2hJbmRleDogbnVtYmVyKSA9PiB7XG4gICAgICByZXR1cm4gaHRtbGBcbiAgICAgICAgPGxpIGNsYXNzPVwic2JiLXNyX19pdGVtLWNvYWNoXCI+XG4gICAgICAgICAgJHt0aGlzLl9yZW5kZXJDb2FjaEVsZW1lbnQoY29hY2hJdGVtLCBjb2FjaEluZGV4LCBkZWNrSW5kZXgpfVxuICAgICAgICA8L2xpPlxuICAgICAgYDtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgX3JlbmRlckNvYWNoRWxlbWVudChcbiAgICBjb2FjaEl0ZW06IENvYWNoSXRlbSxcbiAgICBjb2FjaEluZGV4OiBudW1iZXIsXG4gICAgY29hY2hEZWNrSW5kZXg6IG51bWJlcixcbiAgKTogVGVtcGxhdGVSZXN1bHQge1xuICAgIGNvbnN0IGNhbGN1bGF0ZWRDb2FjaERpbWVuc2lvbiA9IHRoaXMuZ2V0Q2FsY3VsYXRlZERpbWVuc2lvbihjb2FjaEl0ZW0uZGltZW5zaW9uKTtcbiAgICBjb25zdCBkZXNjcmlwdGlvblRhYmxlQ29hY2hXaXRoU2VydmljZXMgPSB0aGlzLl9nZXREZXNjcmlwdGlvblRhYmxlQ29hY2goY29hY2hJdGVtLCBjb2FjaEluZGV4KTtcblxuICAgIHJldHVybiBodG1sYDxzYmItc2VhdC1yZXNlcnZhdGlvbi1zY29wZWRcbiAgICAgIHN0eWxlPSR7c3R5bGVNYXAoe1xuICAgICAgICAnLS1zYmItc2VhdC1yZXNlcnZhdGlvbi1zY29wZWQtd2lkdGgnOiBjYWxjdWxhdGVkQ29hY2hEaW1lbnNpb24udyxcbiAgICAgICAgJy0tc2JiLXNlYXQtcmVzZXJ2YXRpb24tc2NvcGVkLWhlaWdodCc6IGNhbGN1bGF0ZWRDb2FjaERpbWVuc2lvbi5oLFxuICAgICAgfSl9XG4gICAgPlxuICAgICAgJHt0aGlzLl9nZXRSZW5kZXJlZENvYWNoQm9yZGVycyhjb2FjaEl0ZW0pfVxuICAgICAgJHt0aGlzLl9nZXRSZW5kZXJlZEdyYXBoaWNhbEVsZW1lbnRzKFxuICAgICAgICBjb2FjaEl0ZW0uZ3JhcGhpY0VsZW1lbnRzIHx8IFtdLFxuICAgICAgICBjb2FjaEl0ZW0uZGltZW5zaW9uLFxuICAgICAgICBjb2FjaEluZGV4LFxuICAgICAgICBjb2FjaERlY2tJbmRleCxcbiAgICAgICl9XG4gICAgICAke3RoaXMuX2dldFJlbmRlcmVkU2VydmljZUVsZW1lbnRzKGNvYWNoSW5kZXgsIGNvYWNoRGVja0luZGV4LCBjb2FjaEl0ZW0uc2VydmljZUVsZW1lbnRzKX1cblxuICAgICAgPHRhYmxlXG4gICAgICAgIEBmb2N1cz0keygpID0+IHRoaXMub25Gb2N1c1RhYmxlQ29hY2hBbmRQcmVzZWxlY3RQbGFjZShjb2FjaEluZGV4KX1cbiAgICAgICAgaWQ9XCJzYmItc3ItY29hY2gtJHtjb2FjaEluZGV4fVwiXG4gICAgICAgIGNsYXNzPVwic2JiLXNyLWNvYWNoLXdyYXBwZXJfX3RhYmxlXCJcbiAgICAgICAgYXJpYS1kZXNjcmliZWRieT1cInNiYi1zci1jb2FjaC1jYXB0aW9uLSR7Y29hY2hJbmRleH1cIlxuICAgICAgPlxuICAgICAgICA8Y2FwdGlvbiBpZD1cInNiYi1zci1jb2FjaC1jYXB0aW9uLSR7Y29hY2hJbmRleH1cIiB0YWJpbmRleD1cIi0xXCI+XG4gICAgICAgICAgPHNiYi1zY3JlZW4tcmVhZGVyLW9ubHk+JHtkZXNjcmlwdGlvblRhYmxlQ29hY2hXaXRoU2VydmljZXN9PC9zYmItc2NyZWVuLXJlYWRlci1vbmx5PlxuICAgICAgICA8L2NhcHRpb24+XG4gICAgICAgICR7dGhpcy5fZ2V0UmVuZGVyZWRSb3dQbGFjZXMoY29hY2hJdGVtLCBjb2FjaEluZGV4LCBjb2FjaERlY2tJbmRleCl9XG4gICAgICA8L3RhYmxlPlxuICAgIDwvc2JiLXNlYXQtcmVzZXJ2YXRpb24tc2NvcGVkPmA7XG4gIH1cblxuICAvKipcbiAgICogQHJldHVybnMgUmV0dXJucyB0aGUgYm9yZGVyIGdyYXBoaWMgKENPQUNIX0JPUkRFUl9NSURETEUpIG9mIGEgY29hY2ggd2l0aCBjYWxjdWxhdGVkIGJvcmRlciBnYXAgYW5kIGNvYWNoIHdpZHRoLFxuICAgKiBkZXBlbmRpbmcgb24gd2hldGhlciB0aGUgY29hY2ggaXMgd2l0aCBhIGRyaXZlciBhcmVhIG9yIHdpdGhvdXQuXG4gICAqL1xuICBwcml2YXRlIF9nZXRSZW5kZXJlZENvYWNoQm9yZGVycyhjb2FjaEl0ZW06IENvYWNoSXRlbSk6IFRlbXBsYXRlUmVzdWx0IHtcbiAgICBjb25zdCBDT0FDSF9QQVNTQUdFX1dJRFRIID0gMTtcbiAgICBjb25zdCBhbGxFbGVtZW50cyA9IGNvYWNoSXRlbS5ncmFwaGljRWxlbWVudHM7XG4gICAgY29uc3QgZHJpdmVyQXJlYSA9IGFsbEVsZW1lbnRzPy5maW5kKChlbGVtZW50OiBCYXNlRWxlbWVudCkgPT4gZWxlbWVudC5pY29uID09PSAnRFJJVkVSX0FSRUEnKTtcbiAgICBjb25zdCBib3JkZXJXaWR0aCA9IGRyaXZlckFyZWFcbiAgICAgID8gY29hY2hJdGVtLmRpbWVuc2lvbi53IC0gZHJpdmVyQXJlYS5kaW1lbnNpb24udyAtIENPQUNIX1BBU1NBR0VfV0lEVEhcbiAgICAgIDogY29hY2hJdGVtLmRpbWVuc2lvbi53IC0gQ09BQ0hfUEFTU0FHRV9XSURUSCAqIDI7XG4gICAgY29uc3QgYm9yZGVySGVpZ2h0ID0gKGNvYWNoSXRlbS5kaW1lbnNpb24uaCArIHRoaXMuY29hY2hCb3JkZXJPZmZzZXQgKiAyKSAqIHRoaXMuYmFzZUdyaWRTaXplO1xuICAgIGNvbnN0IGJvcmRlck9mZnNldFggPVxuICAgICAgZHJpdmVyQXJlYSAmJiBkcml2ZXJBcmVhLnBvc2l0aW9uLnggPT09IDBcbiAgICAgICAgPyBkcml2ZXJBcmVhPy5kaW1lbnNpb24udyAqIHRoaXMuYmFzZUdyaWRTaXplXG4gICAgICAgIDogdGhpcy5iYXNlR3JpZFNpemU7XG4gICAgcmV0dXJuIGh0bWxgXG4gICAgICA8c2JiLXNlYXQtcmVzZXJ2YXRpb24tZ3JhcGhpY1xuICAgICAgICBzdHlsZT0ke3N0eWxlTWFwKHtcbiAgICAgICAgICAnLS1zYmItc2VhdC1yZXNlcnZhdGlvbi1ncmFwaGljLXdpZHRoJzogYm9yZGVyV2lkdGggKiB0aGlzLmJhc2VHcmlkU2l6ZSxcbiAgICAgICAgICAnLS1zYmItc2VhdC1yZXNlcnZhdGlvbi1ncmFwaGljLWhlaWdodCc6IGJvcmRlckhlaWdodCxcbiAgICAgICAgICAnLS1zYmItc2VhdC1yZXNlcnZhdGlvbi1ncmFwaGljLXRvcCc6IHRoaXMuY29hY2hCb3JkZXJQYWRkaW5nICogLTEsXG4gICAgICAgICAgJy0tc2JiLXNlYXQtcmVzZXJ2YXRpb24tZ3JhcGhpYy1sZWZ0JzogYm9yZGVyT2Zmc2V0WCxcbiAgICAgICAgICAnLS1zYmItc2VhdC1yZXNlcnZhdGlvbi1ncmFwaGljLXBvc2l0aW9uJzogJ2Fic29sdXRlJyxcbiAgICAgICAgfSl9XG4gICAgICAgIG5hbWU9XCJDT0FDSF9CT1JERVJfTUlERExFXCJcbiAgICAgICAgP3N0cmV0Y2g9JHt0cnVlfVxuICAgICAgICByb2xlPVwicHJlc2VudGF0aW9uXCJcbiAgICAgID48L3NiYi1zZWF0LXJlc2VydmF0aW9uLWdyYXBoaWM+XG4gICAgYDtcbiAgfVxuXG4gIHByaXZhdGUgX2dldFJlbmRlcmVkUm93UGxhY2VzKFxuICAgIGNvYWNoOiBDb2FjaEl0ZW0sXG4gICAgY29hY2hJbmRleDogbnVtYmVyLFxuICAgIGRlY2tJbmRleDogbnVtYmVyLFxuICApOiBUZW1wbGF0ZVJlc3VsdFtdIHwgbnVsbCB7XG4gICAgaWYgKCFjb2FjaC5wbGFjZXMpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIC8vIFByZXBhaXIgcm93cyB3aXRoIHRoZSBwbGFjZXMgdG8gcmVuZGVyIGEgdGFibGVcbiAgICBjb25zdCB0YWJsZVJvd1BsYWNlczogUmVjb3JkPG51bWJlciwgUGxhY2VbXT4gPSB7fTtcbiAgICBmb3IgKGNvbnN0IHBsYWNlIG9mIGNvYWNoLnBsYWNlcykge1xuICAgICAgaWYgKCF0YWJsZVJvd1BsYWNlc1twbGFjZS5wb3NpdGlvbi55XSkge1xuICAgICAgICB0YWJsZVJvd1BsYWNlc1twbGFjZS5wb3NpdGlvbi55XSA9IFtwbGFjZV07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0YWJsZVJvd1BsYWNlc1twbGFjZS5wb3NpdGlvbi55XS5wdXNoKHBsYWNlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyh0YWJsZVJvd1BsYWNlcylcbiAgICAgIC5tYXAoKHJvd1BsYWNlczogUGxhY2VbXSwgaW5kZXgpID0+IHtcbiAgICAgICAgcmV0dXJuIGh0bWxgXG4gICAgICAgICAgPHRyIGlkPVwicm93LSR7Y29hY2hJbmRleH0tJHtyb3dQbGFjZXNbMF0ucG9zaXRpb24ueX1cIiBkYXRhLXJvdy1pbmRleD0ke2luZGV4fT5cbiAgICAgICAgICAgICR7dGhpcy5fZ2V0UmVuZGVyZWRDb2x1bW5QbGFjZXMocm93UGxhY2VzLCBjb2FjaEluZGV4LCBkZWNrSW5kZXgpfVxuICAgICAgICAgIDwvdHI+XG4gICAgICAgIGA7XG4gICAgICB9KVxuICAgICAgLmZsYXRNYXAoKHJvd1RlbXBsYXRlKSA9PiByb3dUZW1wbGF0ZSk7XG4gIH1cblxuICBwcml2YXRlIF9nZXRSZW5kZXJlZENvbHVtblBsYWNlcyhcbiAgICBwbGFjZXM6IFBsYWNlW10sXG4gICAgY29hY2hJbmRleDogbnVtYmVyLFxuICAgIGRlY2tJbmRleDogbnVtYmVyLFxuICApOiBUZW1wbGF0ZVJlc3VsdFtdIHwgbnVsbCB7XG4gICAgLy9Tb3J0cyBlYWNoIHBsYWNlIGJ5IGl0cyBhc2NlbmRpbmcgeCBjb29yZGluYXRlXG4gICAgcGxhY2VzLnNvcnQoXG4gICAgICAocGxhY2VBOiBQbGFjZSwgcGxhY2VCOiBQbGFjZSkgPT4gTnVtYmVyKHBsYWNlQS5wb3NpdGlvbi54KSAtIE51bWJlcihwbGFjZUIucG9zaXRpb24ueCksXG4gICAgKTtcblxuICAgIHJldHVybiBwbGFjZXM/Lm1hcCgocGxhY2U6IFBsYWNlLCBpbmRleDogbnVtYmVyKSA9PiB7XG4gICAgICBjb25zdCBjYWxjdWxhdGVkRGltZW5zaW9uID0gdGhpcy5nZXRDYWxjdWxhdGVkRGltZW5zaW9uKHBsYWNlLmRpbWVuc2lvbik7XG4gICAgICBjb25zdCBjYWxjdWxhdGVkUG9zaXRpb24gPSB0aGlzLmdldENhbGN1bGF0ZWRQb3NpdGlvbihwbGFjZS5wb3NpdGlvbik7XG4gICAgICBjb25zdCByb3RhdGlvbiA9IHBsYWNlLnJvdGF0aW9uIHx8IDA7XG4gICAgICBjb25zdCB0ZXh0Um90YXRpb24gPSB0aGlzLmFsaWduVmVydGljYWwgPyAtOTAgOiAwO1xuXG4gICAgICByZXR1cm4gaHRtbGBcbiAgICAgICAgPHRkXG4gICAgICAgICAgaWQ9XCJjZWxsLSR7ZGVja0luZGV4fS0ke2NvYWNoSW5kZXh9LSR7cGxhY2UucG9zaXRpb24ueX0tJHtpbmRleH1cIlxuICAgICAgICAgIGNsYXNzPVwiZ3JhcGhpY2FsLWVsZW1lbnRcIlxuICAgICAgICA+XG4gICAgICAgICAgPHNiYi1zZWF0LXJlc2VydmF0aW9uLXBsYWNlLWNvbnRyb2xcbiAgICAgICAgICAgIHN0eWxlPSR7c3R5bGVNYXAoe1xuICAgICAgICAgICAgICAnLS1zYmItc2VhdC1yZXNlcnZhdGlvbi1wbGFjZS1jb250cm9sLXRleHQtc2NhbGUtdmFsdWUnOiBNYXRoLm1pbihcbiAgICAgICAgICAgICAgICBjYWxjdWxhdGVkRGltZW5zaW9uLncsXG4gICAgICAgICAgICAgICAgY2FsY3VsYXRlZERpbWVuc2lvbi5oLFxuICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAnLS1zYmItc2VhdC1yZXNlcnZhdGlvbi1wbGFjZS1jb250cm9sLXdpZHRoJzogY2FsY3VsYXRlZERpbWVuc2lvbi53LFxuICAgICAgICAgICAgICAnLS1zYmItc2VhdC1yZXNlcnZhdGlvbi1wbGFjZS1jb250cm9sLWhlaWdodCc6IGNhbGN1bGF0ZWREaW1lbnNpb24uaCxcbiAgICAgICAgICAgICAgJy0tc2JiLXNlYXQtcmVzZXJ2YXRpb24tcGxhY2UtY29udHJvbC10b3AnOiBjYWxjdWxhdGVkUG9zaXRpb24ueSxcbiAgICAgICAgICAgICAgJy0tc2JiLXNlYXQtcmVzZXJ2YXRpb24tcGxhY2UtY29udHJvbC1sZWZ0JzogY2FsY3VsYXRlZFBvc2l0aW9uLngsXG4gICAgICAgICAgICAgICctLXNiYi1zZWF0LXJlc2VydmF0aW9uLXBsYWNlLWNvbnRyb2wtcm90YXRpb24nOiByb3RhdGlvbixcbiAgICAgICAgICAgICAgJy0tc2JiLXNlYXQtcmVzZXJ2YXRpb24tcGxhY2UtY29udHJvbC10ZXh0LXJvdGF0aW9uJzogdGV4dFJvdGF0aW9uLFxuICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICBAc2VsZWN0cGxhY2U9JHsoc2VsZWN0UGxhY2VFdmVudDogQ3VzdG9tRXZlbnQ8UGxhY2VTZWxlY3Rpb24+KSA9PlxuICAgICAgICAgICAgICB0aGlzLl9vblNlbGVjdFBsYWNlKHNlbGVjdFBsYWNlRXZlbnQpfVxuICAgICAgICAgICAgZXhwb3J0cGFydHM9XCJzYmItc3ItcGxhY2UtcGFydFwiXG4gICAgICAgICAgICBpZD1cInNlYXQtcmVzZXJ2YXRpb25fX3BsYWNlLWJ1dHRvbi0ke2RlY2tJbmRleH0tJHtjb2FjaEluZGV4fS0ke3BsYWNlLm51bWJlcn1cIlxuICAgICAgICAgICAgY2xhc3M9XCJzZWF0LXJlc2VydmF0aW9uLXBsYWNlLWNvbnRyb2xcIlxuICAgICAgICAgICAgdGV4dD0ke3BsYWNlLm51bWJlcn1cbiAgICAgICAgICAgIHR5cGU9JHtwbGFjZS50eXBlfVxuICAgICAgICAgICAgc3RhdGU9JHtwbGFjZS5zdGF0ZX1cbiAgICAgICAgICAgIGNvYWNoLWluZGV4PSR7Y29hY2hJbmRleH1cbiAgICAgICAgICAgIGRlY2staW5kZXg9JHtkZWNrSW5kZXh9XG4gICAgICAgICAgICAucHJvcGVydHlJZHM9JHtwbGFjZS5wcm9wZXJ0eUlkc31cbiAgICAgICAgICAgIC5wcmV2ZW50Q2xpY2s9JHt0aGlzLnByZXZlbnRQbGFjZUNsaWNrfVxuICAgICAgICAgID48L3NiYi1zZWF0LXJlc2VydmF0aW9uLXBsYWNlLWNvbnRyb2w+XG4gICAgICAgIDwvdGQ+XG4gICAgICBgO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBfZ2V0UmVuZGVyZWRHcmFwaGljYWxFbGVtZW50cyhcbiAgICBncmFwaGljYWxFbGVtZW50czogQmFzZUVsZW1lbnRbXSxcbiAgICBjb2FjaERpbWVuc2lvbjogRWxlbWVudERpbWVuc2lvbixcbiAgICBjb2FjaEluZGV4OiBudW1iZXIsXG4gICAgY29hY2hEZWNrSW5kZXg6IG51bWJlcixcbiAgKTogVGVtcGxhdGVSZXN1bHRbXSB8IG51bGwge1xuICAgIGlmICghZ3JhcGhpY2FsRWxlbWVudHMpIHJldHVybiBudWxsO1xuXG4gICAgcmV0dXJuIGdyYXBoaWNhbEVsZW1lbnRzPy5tYXAoKGdyYXBoaWNhbEVsZW1lbnQ6IEJhc2VFbGVtZW50KSA9PiB7XG4gICAgICBjb25zdCBpY29uID0gZ3JhcGhpY2FsRWxlbWVudC5pY29uID8/ICcnO1xuICAgICAgY29uc3QgZWxlbWVudFJvdGF0aW9uID0gZ3JhcGhpY2FsRWxlbWVudC5yb3RhdGlvbiB8fCAwO1xuICAgICAgY29uc3QgaXNOb3RGaXhlZFJvdGF0aW9uR3JhcGhpY2FsRWxlbWVudCA9XG4gICAgICAgIHRoaXMuX25vdEZpeGVkUm90YXRhYmxlQXJlYUljb25zLmluZGV4T2YoZ3JhcGhpY2FsRWxlbWVudC5pY29uISkgPT09IC0xO1xuICAgICAgY29uc3QgZWxlbWVudEZpeGVkUm90YXRpb24gPVxuICAgICAgICB0aGlzLmFsaWduVmVydGljYWwgJiYgaXNOb3RGaXhlZFJvdGF0aW9uR3JhcGhpY2FsRWxlbWVudFxuICAgICAgICAgID8gZWxlbWVudFJvdGF0aW9uIC0gOTBcbiAgICAgICAgICA6IGVsZW1lbnRSb3RhdGlvbjtcblxuICAgICAgLy9jaGVjayBpZiB0aGUgY3VycmVudCBlbGVtZW50IGlzIG5vdCBhbiBhcmVhIGVsZW1lbnQsIHNpbmNlIHRoaXMgZWxlbWVudCBpcyBkcmF3biB3aXRob3V0IGFuIGFyZWEgY29tcG9uZW50XG4gICAgICBpZiAodGhpcy5fbm90QXJlYUVsZW1lbnRzLmZpbmRJbmRleCgobm90QXJlYUVsZW1lbnQpID0+IG5vdEFyZWFFbGVtZW50ID09PSBpY29uKSA+IC0xKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9nZXRSZW5kZXJFbGVtZW50V2l0aG91dEFyZWEoZ3JhcGhpY2FsRWxlbWVudCwgZWxlbWVudFJvdGF0aW9uLCBjb2FjaERpbWVuc2lvbik7XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy5fZ2V0UmVuZGVyRWxlbWVudFdpdGhBcmVhKFxuICAgICAgICBncmFwaGljYWxFbGVtZW50LFxuICAgICAgICBlbGVtZW50Rml4ZWRSb3RhdGlvbixcbiAgICAgICAgY29hY2hEaW1lbnNpb24sXG4gICAgICAgIGNvYWNoSW5kZXgsXG4gICAgICAgIGNvYWNoRGVja0luZGV4LFxuICAgICAgKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBjcmVhdGVzIGEgcmVuZGVyZWQgZWxlbWVudCB3aXRoIGFuIGFyZWEgY29tcG9uZW50XG4gICAqIEBwYXJhbSBncmFwaGljYWxFbGVtZW50XG4gICAqIEBwYXJhbSByb3RhdGlvblxuICAgKiBAcGFyYW0gY29hY2hEaW1lbnNpb25cbiAgICogQHBhcmFtIGNvYWNoSW5kZXggdXNlZCB0byBnZW5lcmF0ZSBhIHVuaXF1ZSBpZCBmb3IgdGhlIHBvcG92ZXIgdHJpZ2dlclxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgcHJpdmF0ZSBfZ2V0UmVuZGVyRWxlbWVudFdpdGhBcmVhKFxuICAgIGdyYXBoaWNhbEVsZW1lbnQ6IEJhc2VFbGVtZW50LFxuICAgIHJvdGF0aW9uOiBudW1iZXIsXG4gICAgY29hY2hEaW1lbnNpb246IEVsZW1lbnREaW1lbnNpb24sXG4gICAgY29hY2hJbmRleDogbnVtYmVyLFxuICAgIGNvYWNoRGVja0luZGV4OiBudW1iZXIsXG4gICk6IFRlbXBsYXRlUmVzdWx0IHtcbiAgICAvLyBmb3IgVEFCTEUsIHdlIHVzZSB0aGUgYXJlYSBjb21wb25lbnQgaXRzZWxmIHRvIGRpc3BsYXkgdGhlIHRhYmxlIGluc3RlYWQgb2YgdGhlIFNWRyBncmFwaGljLlxuICAgIC8vIER1ZSB0byBkaWZmZXJlbnQgaGVpZ2h0cyBhbmQgd2lkdGhzLCBpdCB3b3VsZG4ndCBzaG93IGNvcnJlY3RseS4gVG8gY29ycmVjdCB0aGlzLCB3ZSB3b3VsZFxuICAgIC8vIG5lZWQgZGlmZmljdWx0IGNhbGN1bGF0aW9ucyBmb3IgcG9zaXRpb24sIHJvdGF0aW9uIGFuZCBkaW1lbnNpb24uXG4gICAgY29uc3QgaXNOb3RUYWJsZUdyYXBoaWMgPSBncmFwaGljYWxFbGVtZW50Lmljb24/LmluZGV4T2YoJ1RBQkxFJykgPT09IC0xO1xuICAgIGNvbnN0IGFyZWFQcm9wZXJ0eSA9IGdyYXBoaWNhbEVsZW1lbnQuaWNvbiAmJiBpc05vdFRhYmxlR3JhcGhpYyA/IGdyYXBoaWNhbEVsZW1lbnQuaWNvbiA6IG51bGw7XG4gICAgY29uc3Qgc3RyZXRjaEhlaWdodCA9IGFyZWFQcm9wZXJ0eSAhPT0gJ0VOVFJZX0VYSVQnO1xuICAgIGNvbnN0IGFyaWFMYWJlbEZvckFyZWEgPSBncmFwaGljYWxFbGVtZW50Lmljb25cbiAgICAgID8gZ2V0STE4blNlYXRSZXNlcnZhdGlvbihncmFwaGljYWxFbGVtZW50Lmljb24sIHRoaXMuX2xhbmd1YWdlLmN1cnJlbnQpXG4gICAgICA6IG5vdGhpbmc7XG4gICAgY29uc3QgY2FsY3VsYXRlZERpbWVuc2lvbiA9IHRoaXMuZ2V0Q2FsY3VsYXRlZERpbWVuc2lvbihcbiAgICAgIGdyYXBoaWNhbEVsZW1lbnQuZGltZW5zaW9uLFxuICAgICAgY29hY2hEaW1lbnNpb24sXG4gICAgICB0cnVlLFxuICAgICAgc3RyZXRjaEhlaWdodCxcbiAgICApO1xuICAgIGNvbnN0IGNhbGN1bGF0ZWRQb3NpdGlvbiA9IHRoaXMuZ2V0Q2FsY3VsYXRlZFBvc2l0aW9uKFxuICAgICAgZ3JhcGhpY2FsRWxlbWVudC5wb3NpdGlvbixcbiAgICAgIGdyYXBoaWNhbEVsZW1lbnQuZGltZW5zaW9uLFxuICAgICAgY29hY2hEaW1lbnNpb24sXG4gICAgICB0cnVlLFxuICAgICk7XG5cbiAgICAvL2dlbmVyYXRlIHVuaXF1ZSBpbmRleCBudW1iZXIgZm9yIHRoZSB0cmlnZ2VyIGVsZW1lbnRcbiAgICBjb25zdCB0cmlnZ2VySWQgPSBgcG9wb3Zlci10cmlnZ2VyLSR7Y29hY2hEZWNrSW5kZXh9LSR7Y29hY2hJbmRleH0tJHtjYWxjdWxhdGVkUG9zaXRpb24ueH0tJHtjYWxjdWxhdGVkUG9zaXRpb24ueX1gO1xuICAgIGxldCBlbGVtZW50TW91bnRpbmcgPSAnZnJlZSc7XG5cbiAgICBpZiAoZ3JhcGhpY2FsRWxlbWVudC5wb3NpdGlvbi55ID09PSB0aGlzLmNvYWNoQm9yZGVyT2Zmc2V0ICogLTEpIHtcbiAgICAgIGVsZW1lbnRNb3VudGluZyA9ICd1cHBlci1ib3JkZXInO1xuICAgIH0gZWxzZSBpZiAoXG4gICAgICBncmFwaGljYWxFbGVtZW50LnBvc2l0aW9uLnkgKyBncmFwaGljYWxFbGVtZW50LmRpbWVuc2lvbi5oID09PVxuICAgICAgY29hY2hEaW1lbnNpb24uaCArIHRoaXMuY29hY2hCb3JkZXJPZmZzZXRcbiAgICApIHtcbiAgICAgIGVsZW1lbnRNb3VudGluZyA9ICdsb3dlci1ib3JkZXInO1xuICAgIH1cblxuICAgIHJldHVybiBodG1sYFxuICAgICAgPHNiYi1zZWF0LXJlc2VydmF0aW9uLWFyZWFcbiAgICAgICAgaWQ9XCIke3RyaWdnZXJJZH1cIlxuICAgICAgICBjbGFzcz1cIiR7Y2xhc3NNYXAoeyAnc2JiLXNlYXQtcmVzZXJ2YXRpb24tYXJlYS0tY3Vyc29yLXBvaW50ZXInOiBhcmVhUHJvcGVydHkgIT09IG51bGwgfSl9XCJcbiAgICAgICAgc3R5bGU9JHtzdHlsZU1hcCh7XG4gICAgICAgICAgJy0tc2JiLXNlYXQtcmVzZXJ2YXRpb24tYXJlYS13aWR0aCc6IGNhbGN1bGF0ZWREaW1lbnNpb24udyxcbiAgICAgICAgICAnLS1zYmItc2VhdC1yZXNlcnZhdGlvbi1hcmVhLWhlaWdodCc6IGNhbGN1bGF0ZWREaW1lbnNpb24uaCxcbiAgICAgICAgICAnLS1zYmItc2VhdC1yZXNlcnZhdGlvbi1hcmVhLXRvcCc6IGNhbGN1bGF0ZWRQb3NpdGlvbi55LFxuICAgICAgICAgICctLXNiYi1zZWF0LXJlc2VydmF0aW9uLWFyZWEtbGVmdCc6IGNhbGN1bGF0ZWRQb3NpdGlvbi54LFxuICAgICAgICB9KX1cbiAgICAgICAgbW91bnRpbmc9JHtlbGVtZW50TW91bnRpbmd9XG4gICAgICAgIGJhY2tncm91bmQ9XCJkYXJrXCJcbiAgICAgICAgYXJpYS1oaWRkZW49XCJ0cnVlXCJcbiAgICAgID5cbiAgICAgICAgJHthcmVhUHJvcGVydHlcbiAgICAgICAgICA/IGh0bWxgXG4gICAgICAgICAgICAgIDxzYmItc2VhdC1yZXNlcnZhdGlvbi1ncmFwaGljXG4gICAgICAgICAgICAgICAgc3R5bGU9JHtzdHlsZU1hcCh7XG4gICAgICAgICAgICAgICAgICAnLS1zYmItc2VhdC1yZXNlcnZhdGlvbi1ncmFwaGljLXdpZHRoJzogdGhpcy5iYXNlR3JpZFNpemUsXG4gICAgICAgICAgICAgICAgICAnLS1zYmItc2VhdC1yZXNlcnZhdGlvbi1ncmFwaGljLWhlaWdodCc6IHRoaXMuYmFzZUdyaWRTaXplLFxuICAgICAgICAgICAgICAgICAgJy0tc2JiLXNlYXQtcmVzZXJ2YXRpb24tZ3JhcGhpYy1yb3RhdGlvbic6IHJvdGF0aW9uLFxuICAgICAgICAgICAgICAgIH0pfVxuICAgICAgICAgICAgICAgIG5hbWU9JHthcmVhUHJvcGVydHl9XG4gICAgICAgICAgICAgICAgcm9sZT1cImltZ1wiXG4gICAgICAgICAgICAgICAgYXJpYS1oaWRkZW49XCJ0cnVlXCJcbiAgICAgICAgICAgICAgPjwvc2JiLXNlYXQtcmVzZXJ2YXRpb24tZ3JhcGhpYz5cbiAgICAgICAgICAgIGBcbiAgICAgICAgICA6IG5vdGhpbmd9XG4gICAgICA8L3NiYi1zZWF0LXJlc2VydmF0aW9uLWFyZWE+XG4gICAgICAke2FyZWFQcm9wZXJ0eSA/IHRoaXMuX3BvcG92ZXIodHJpZ2dlcklkLCBhcmlhTGFiZWxGb3JBcmVhKSA6IG5vdGhpbmd9XG4gICAgYDtcbiAgfVxuXG4gIHByaXZhdGUgX2dldFJlbmRlckVsZW1lbnRXaXRob3V0QXJlYShcbiAgICBncmFwaGljYWxFbGVtZW50OiBCYXNlRWxlbWVudCxcbiAgICByb3RhdGlvbjogbnVtYmVyLFxuICAgIGNvYWNoRGltZW5zaW9uOiBFbGVtZW50RGltZW5zaW9uLFxuICApOiBUZW1wbGF0ZVJlc3VsdCB7XG4gICAgY29uc3QgY2FsY3VsYXRlZERpbWVuc2lvbiA9IHRoaXMuZ2V0Q2FsY3VsYXRlZERpbWVuc2lvbihcbiAgICAgIGdyYXBoaWNhbEVsZW1lbnQuZGltZW5zaW9uLFxuICAgICAgY29hY2hEaW1lbnNpb24sXG4gICAgKTtcbiAgICBjb25zdCBjYWxjdWxhdGVkUG9zaXRpb24gPSB0aGlzLmdldENhbGN1bGF0ZWRQb3NpdGlvbihcbiAgICAgIGdyYXBoaWNhbEVsZW1lbnQucG9zaXRpb24sXG4gICAgICBncmFwaGljYWxFbGVtZW50LmRpbWVuc2lvbixcbiAgICAgIGNvYWNoRGltZW5zaW9uLFxuICAgICk7XG5cbiAgICAvLyBJZiB0aGUgaWNvbiBpcyB0aGUgZHJpdmVyIGFyZWEsIHRoZW4gaGVyZSBjb25jYXQgdGhlIHZlaGljbGUgdHlwZSB0byBnZXQgdGhlIHJpZ2h0IHZlaGljbGUgY2hhc3NpZSBpY29uXG4gICAgY29uc3QgaWNvbiA9XG4gICAgICBncmFwaGljYWxFbGVtZW50Lmljb24gJiYgZ3JhcGhpY2FsRWxlbWVudC5pY29uLmluZGV4T2YoJ0RSSVZFUl9BUkVBJykgPT09IC0xXG4gICAgICAgID8gZ3JhcGhpY2FsRWxlbWVudC5pY29uXG4gICAgICAgIDogZ3JhcGhpY2FsRWxlbWVudC5pY29uPy5jb25jYXQoXG4gICAgICAgICAgICAnXycsXG4gICAgICAgICAgICB0aGlzLnNlYXRSZXNlcnZhdGlvbnNbdGhpcy5jdXJyU2VsZWN0ZWREZWNrSW5kZXhdLnZlaGljbGVUeXBlLFxuICAgICAgICAgICk7XG5cbiAgICByZXR1cm4gaHRtbGAgPHNiYi1zZWF0LXJlc2VydmF0aW9uLWdyYXBoaWNcbiAgICAgIHN0eWxlPSR7c3R5bGVNYXAoe1xuICAgICAgICAnLS1zYmItc2VhdC1yZXNlcnZhdGlvbi1ncmFwaGljLXdpZHRoJzogY2FsY3VsYXRlZERpbWVuc2lvbi53LFxuICAgICAgICAnLS1zYmItc2VhdC1yZXNlcnZhdGlvbi1ncmFwaGljLWhlaWdodCc6IGNhbGN1bGF0ZWREaW1lbnNpb24uaCxcbiAgICAgICAgJy0tc2JiLXNlYXQtcmVzZXJ2YXRpb24tZ3JhcGhpYy10b3AnOiBjYWxjdWxhdGVkUG9zaXRpb24ueSxcbiAgICAgICAgJy0tc2JiLXNlYXQtcmVzZXJ2YXRpb24tZ3JhcGhpYy1sZWZ0JzogY2FsY3VsYXRlZFBvc2l0aW9uLngsXG4gICAgICAgICctLXNiYi1zZWF0LXJlc2VydmF0aW9uLWdyYXBoaWMtcG9zaXRpb24nOiAnYWJzb2x1dGUnLFxuICAgICAgICAnLS1zYmItc2VhdC1yZXNlcnZhdGlvbi1ncmFwaGljLXJvdGF0aW9uJzogcm90YXRpb24sXG4gICAgICB9KX1cbiAgICAgIG5hbWU9JHtpY29uID8/IG5vdGhpbmd9XG4gICAgICBhcmlhLWhpZGRlbj1cInRydWVcIlxuICAgICAgP3N0cmV0Y2g9JHt0cnVlfVxuICAgID48L3NiYi1zZWF0LXJlc2VydmF0aW9uLWdyYXBoaWM+YDtcbiAgfVxuXG4gIHByaXZhdGUgX2dldFJlbmRlcmVkU2VydmljZUVsZW1lbnRzKFxuICAgIGNvYWNoSW5kZXg6IG51bWJlcixcbiAgICBjb2FjaERlY2tJbmRleDogbnVtYmVyLFxuICAgIHNlcnZpY2VFbGVtZW50cz86IEJhc2VFbGVtZW50W10sXG4gICk6IFRlbXBsYXRlUmVzdWx0W10gfCBudWxsIHtcbiAgICBpZiAoIXNlcnZpY2VFbGVtZW50cykgcmV0dXJuIG51bGw7XG5cbiAgICByZXR1cm4gc2VydmljZUVsZW1lbnRzPy5tYXAoKHNlcnZpY2VFbGVtZW50OiBCYXNlRWxlbWVudCkgPT4ge1xuICAgICAgY29uc3QgdGl0bGVEZXNjcmlwdGlvbiA9IHNlcnZpY2VFbGVtZW50Lmljb25cbiAgICAgICAgPyBnZXRJMThuU2VhdFJlc2VydmF0aW9uKHNlcnZpY2VFbGVtZW50Lmljb24sIHRoaXMuX2xhbmd1YWdlLmN1cnJlbnQpXG4gICAgICAgIDogbnVsbDtcbiAgICAgIGNvbnN0IGNhbGN1bGF0ZWREaW1lbnNpb24gPSB0aGlzLmdldENhbGN1bGF0ZWREaW1lbnNpb24oc2VydmljZUVsZW1lbnQuZGltZW5zaW9uKTtcbiAgICAgIGNvbnN0IGNhbGN1bGF0ZWRQb3NpdGlvbiA9IHRoaXMuZ2V0Q2FsY3VsYXRlZFBvc2l0aW9uKHNlcnZpY2VFbGVtZW50LnBvc2l0aW9uKTtcbiAgICAgIGNvbnN0IGVsZW1lbnRSb3RhdGlvbiA9IHNlcnZpY2VFbGVtZW50LnJvdGF0aW9uIHx8IDA7XG4gICAgICBjb25zdCBlbGVtZW50Rml4ZWRSb3RhdGlvbiA9IHRoaXMuYWxpZ25WZXJ0aWNhbCA/IGVsZW1lbnRSb3RhdGlvbiAtIDkwIDogZWxlbWVudFJvdGF0aW9uO1xuXG4gICAgICAvL2dlbmVyYXRlIHVuaXF1ZSBpbmRleCBudW1iZXIgZm9yIHRoZSB0cmlnZ2VyIGVsZW1lbnRcbiAgICAgIGNvbnN0IHRyaWdnZXJJZCA9IGBwb3BvdmVyLXRyaWdnZXItJHtjb2FjaERlY2tJbmRleH0tJHtjb2FjaEluZGV4fS0ke2NhbGN1bGF0ZWRQb3NpdGlvbi54fS0ke2NhbGN1bGF0ZWRQb3NpdGlvbi55fWA7XG5cbiAgICAgIHJldHVybiBodG1sYFxuICAgICAgICA8c2JiLXNlYXQtcmVzZXJ2YXRpb24tZ3JhcGhpY1xuICAgICAgICAgIGlkPVwiJHt0cmlnZ2VySWR9XCJcbiAgICAgICAgICBzdHlsZT0ke3N0eWxlTWFwKHtcbiAgICAgICAgICAgICctLXNiYi1zZWF0LXJlc2VydmF0aW9uLWdyYXBoaWMtd2lkdGgnOiBjYWxjdWxhdGVkRGltZW5zaW9uLncsXG4gICAgICAgICAgICAnLS1zYmItc2VhdC1yZXNlcnZhdGlvbi1ncmFwaGljLWhlaWdodCc6IGNhbGN1bGF0ZWREaW1lbnNpb24uaCxcbiAgICAgICAgICAgICctLXNiYi1zZWF0LXJlc2VydmF0aW9uLWdyYXBoaWMtdG9wJzogY2FsY3VsYXRlZFBvc2l0aW9uLnksXG4gICAgICAgICAgICAnLS1zYmItc2VhdC1yZXNlcnZhdGlvbi1ncmFwaGljLWxlZnQnOiBjYWxjdWxhdGVkUG9zaXRpb24ueCxcbiAgICAgICAgICAgICctLXNiYi1zZWF0LXJlc2VydmF0aW9uLWdyYXBoaWMtcG9zaXRpb24nOiAnYWJzb2x1dGUnLFxuICAgICAgICAgICAgJy0tc2JiLXNlYXQtcmVzZXJ2YXRpb24tZ3JhcGhpYy1yb3RhdGlvbic6IGVsZW1lbnRGaXhlZFJvdGF0aW9uLFxuICAgICAgICAgIH0pfVxuICAgICAgICAgIGNsYXNzPVwic2JiLXNlYXQtcmVzZXJ2YXRpb24tZ3JhcGhpYy0tY3Vyc29yLXBvaW50ZXJcIlxuICAgICAgICAgIG5hbWU9JHtzZXJ2aWNlRWxlbWVudC5pY29uID8/IG5vdGhpbmd9XG4gICAgICAgICAgcm9sZT1cImltZ1wiXG4gICAgICAgICAgYXJpYS1oaWRkZW49XCJ0cnVlXCJcbiAgICAgICAgPjwvc2JiLXNlYXQtcmVzZXJ2YXRpb24tZ3JhcGhpYz5cbiAgICAgICAgJHt0aGlzLl9wb3BvdmVyKHRyaWdnZXJJZCwgdGl0bGVEZXNjcmlwdGlvbil9XG4gICAgICBgO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIE1hbmFnZXMgdGhlIHNlbGVjdGVkIHBsYWNlIGV2ZW50IHRyaWdnZXJlZCBmcm9tIHRoZSBwbGFjZVxuICAgKiBFYWNoIHNlbGVjdGlvbiBlbWl0cyBhbiBhcnJheSBvZiBhbGwgc2VsZWN0ZWQgcGxhY2VzXG4gICAqIEBwYXJhbSBzZWxlY3RQbGFjZUV2ZW50XG4gICAqL1xuICBwcml2YXRlIF9vblNlbGVjdFBsYWNlKHNlbGVjdFBsYWNlRXZlbnQ6IEN1c3RvbUV2ZW50PFBsYWNlU2VsZWN0aW9uPik6IHZvaWQge1xuICAgIGNvbnN0IHNlbGVjdGVkUGxhY2UgPSBzZWxlY3RQbGFjZUV2ZW50LmRldGFpbDtcbiAgICAvLyBXZSBoYXZlIHRvIHNldCBwcmV2ZW50Q29hY2hTY3JvbGxCeVBsYWNlQ2xpY2sgdG8gdHJ1ZSwgdG8gcHJldmVudCBhdXRvbWF0aWMgc2Nyb2xsaW5nIHRvIHRoZSBuZXcgZm9jdXNlZCBwbGFjZVxuICAgIHRoaXMucHJldmVudENvYWNoU2Nyb2xsQnlQbGFjZUNsaWNrID0gdHJ1ZTtcbiAgICB0aGlzLmlzQ29hY2hHcmlkRm9jdXNhYmxlID0gZmFsc2U7XG4gICAgaWYgKCF0aGlzLnByZXZlbnRQbGFjZUNsaWNrKSB7XG4gICAgICAvLyBTZXQgY3VycmVudCBkZWNrIGluZGV4IGlmIGEgcGxhY2VzIHdhcyBzZWxlY3RlZFxuICAgICAgdGhpcy5jdXJyU2VsZWN0ZWREZWNrSW5kZXggPSBzZWxlY3RlZFBsYWNlLmRlY2tJbmRleDtcbiAgICAgIC8vIEFkZCBwbGFjZSB0byBwbGFjZSBjb2xsZWN0aW9uXG4gICAgICB0aGlzLnVwZGF0ZVNlbGVjdGVkU2VhdFJlc2VydmF0aW9uUGxhY2VzKHNlbGVjdGVkUGxhY2UpO1xuICAgICAgdGhpcy51cGRhdGVDdXJyZW50U2VsZWN0ZWRQbGFjZUluQ29hY2goc2VsZWN0ZWRQbGFjZSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfb25TZWxlY3ROYXZDb2FjaChldmVudDogQ3VzdG9tRXZlbnQ8bnVtYmVyPik6IHZvaWQge1xuICAgIGNvbnN0IHNlbGVjdGVkTmF2Q29hY2hJbmRleCA9IGV2ZW50LmRldGFpbDtcbiAgICB0aGlzLmlzS2V5Ym9hcmROYXZpZ2F0aW9uID0gZmFsc2U7XG5cbiAgICBpZiAoc2VsZWN0ZWROYXZDb2FjaEluZGV4ICE9PSBudWxsICYmIHNlbGVjdGVkTmF2Q29hY2hJbmRleCAhPT0gdGhpcy5jdXJyU2VsZWN0ZWRDb2FjaEluZGV4KSB7XG4gICAgICB0aGlzLnVuZm9jdXNQbGFjZUVsZW1lbnQoKTtcbiAgICAgIHRoaXMuc2Nyb2xsVG9TZWxlY3RlZE5hdkNvYWNoKHNlbGVjdGVkTmF2Q29hY2hJbmRleCk7XG4gICAgfSBlbHNlIGlmIChzZWxlY3RlZE5hdkNvYWNoSW5kZXggPT09IHRoaXMuY3VyclNlbGVjdGVkQ29hY2hJbmRleCkge1xuICAgICAgdGhpcy51cGRhdGVDdXJyZW50U2VsZWN0ZWRDb2FjaCgpO1xuICAgICAgdGhpcy5wcmVzZWxlY3RQbGFjZUluQ29hY2goKTtcbiAgICB9XG5cbiAgICAvL2Nsb3NlIGFsbCBvcGVuZWQgcG9wb3ZlcnNcbiAgICB0aGlzLl9jbG9zZVBvcG92ZXIoKTtcbiAgfVxuXG4gIHByaXZhdGUgX29uRm9jdXNOYXZDb2FjaCgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMucHJldmVudENvYWNoU2Nyb2xsQnlQbGFjZUNsaWNrKSB7XG4gICAgICB0aGlzLnByZXNlbGVjdFBsYWNlSW5Db2FjaCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmZvY3VzUGxhY2VFbGVtZW50KHRoaXMuY3VyclNlbGVjdGVkUGxhY2UpO1xuICAgIH1cbiAgICB0aGlzLmlzQXV0b1Njcm9sbGluZyA9IGZhbHNlO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBwb3BvdmVyIGZvciBleHRyYSBzZXJ2aWNlIGluZm9ybWF0aW9uXG4gICAqIEBwYXJhbSB0cmlnZ2VySWRcbiAgICogQHBhcmFtIHBvcG92ZXJDb250ZW50XG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBwcml2YXRlIF9wb3BvdmVyKFxuICAgIHRyaWdnZXJJZDogc3RyaW5nLFxuICAgIHBvcG92ZXJDb250ZW50OiBzdHJpbmcgfCBudWxsIHwgdHlwZW9mIG5vdGhpbmcsXG4gICk6IFRlbXBsYXRlUmVzdWx0IHtcbiAgICByZXR1cm4gaHRtbGBcbiAgICAgIDxzYmItcG9wb3ZlciB0cmlnZ2VyPVwiJHt0cmlnZ2VySWR9XCI+XG4gICAgICAgIDxwIGNsYXNzPVwic2JiLXRleHQtcyBzYmItc3ItcG9wb3ZlclwiPiR7cG9wb3ZlckNvbnRlbnR9PC9wPlxuICAgICAgPC9zYmItcG9wb3Zlcj5cbiAgICBgO1xuICB9XG5cbiAgLyoqXG4gICAqIHRyaWdnZXIgdG8gY2xvc2UgYWxsIG9wZW5lZCBwb3BvdmVycyAobm9ybWFsbHkgb25seSBvbmUgaXMgb3BlbmVkIGF0IGEgdGltZSlcbiAgICogQHByaXZhdGVcbiAgICovXG4gIHByaXZhdGUgX2Nsb3NlUG9wb3ZlcigpOiB2b2lkIHtcbiAgICB0aGlzLnNoYWRvd1Jvb3RcbiAgICAgID8ucXVlcnlTZWxlY3RvckFsbCgnc2JiLXBvcG92ZXJbZGF0YS1zdGF0ZT1cIm9wZW5lZFwiXScpXG4gICAgICAuZm9yRWFjaCgocG9wb3ZlcikgPT4gcG9wb3Zlci5zZXRBdHRyaWJ1dGUoJ2RhdGEtc3RhdGUnLCAnY2xvc2VkJykpO1xuICB9XG5cbiAgcHJpdmF0ZSBfZ2V0RGVzY3JpcHRpb25UYWJsZUNvYWNoKGNvYWNoSXRlbTogQ29hY2hJdGVtLCBjb2FjaEluZGV4OiBudW1iZXIpOiBzdHJpbmcge1xuICAgIGlmICghY29hY2hJdGVtLnBsYWNlcz8ubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gZ2V0STE4blNlYXRSZXNlcnZhdGlvbignQ09BQ0hfQkxPQ0tFRF9UQUJMRV9DQVBUSU9OJywgdGhpcy5fbGFuZ3VhZ2UuY3VycmVudCwgW1xuICAgICAgICBjb2FjaEl0ZW0uaWQsXG4gICAgICBdKTtcbiAgICB9XG5cbiAgICBsZXQgdGFibGVDb2FjaERlc2NyaXB0aW9uOiBzdHJpbmc7XG4gICAgY29uc3QgYXJlYURlc2NyaXB0aW9ucyA9IHRoaXMuX2dldFRpdGxlRGVzY3JpcHRpb25MaXN0U3RyaW5nKGNvYWNoSXRlbS5ncmFwaGljRWxlbWVudHMhKTtcbiAgICBjb25zdCBzZXJ2aWNlRGVzY3JpcHRpb25zID0gdGhpcy5fZ2V0VGl0bGVEZXNjcmlwdGlvbkxpc3RTdHJpbmcoY29hY2hJdGVtLnNlcnZpY2VFbGVtZW50cyEpO1xuXG4gICAgdGFibGVDb2FjaERlc2NyaXB0aW9uID0gZ2V0STE4blNlYXRSZXNlcnZhdGlvbignQ09BQ0hfVEFCTEVfQ0FQVElPTicsIHRoaXMuX2xhbmd1YWdlLmN1cnJlbnQsIFtcbiAgICAgIGNvYWNoSXRlbS5pZCxcbiAgICBdKTtcblxuICAgIGlmICghdGhpcy5oYXNOYXZpZ2F0aW9uKSB7XG4gICAgICAvLyBFeHBhbmRzIHRoZSBudW1iZXIgb2YgYXZhaWxhYmxlIHNlYXRzIGFuZCBiaWN5Y2xlIHNwYWNlcyBhcyBpbmZvXG4gICAgICBjb25zdCBmcmVlUGxhY2VzID0gdGhpcy5nZXRBdmFpbGFibGVGcmVlUGxhY2VzTnVtRnJvbUNvYWNoKGNvYWNoSW5kZXgpO1xuICAgICAgY29uc3QgZnJlZVBsYWNlc1R4dCA9IGdldEkxOG5TZWF0UmVzZXJ2YXRpb24oXG4gICAgICAgICdDT0FDSF9BVkFJTEFCTEVfTlVNQkVSX09GX1BMQUNFUycsXG4gICAgICAgIHRoaXMuX2xhbmd1YWdlLmN1cnJlbnQsXG4gICAgICAgIFtmcmVlUGxhY2VzLnNlYXRzLCBmcmVlUGxhY2VzLmJpY3ljbGVzXSxcbiAgICAgICk7XG4gICAgICB0YWJsZUNvYWNoRGVzY3JpcHRpb24gPSB0YWJsZUNvYWNoRGVzY3JpcHRpb24uY29uY2F0KCcuICcpLmNvbmNhdChmcmVlUGxhY2VzVHh0KS5jb25jYXQoJy4gJyk7XG4gICAgfVxuXG4gICAgaWYgKCEhYXJlYURlc2NyaXB0aW9ucyB8fCAhIXNlcnZpY2VEZXNjcmlwdGlvbnMpIHtcbiAgICAgIHRhYmxlQ29hY2hEZXNjcmlwdGlvbiArPVxuICAgICAgICAnLiAnICsgZ2V0STE4blNlYXRSZXNlcnZhdGlvbignQ09BQ0hfQVZBSUxBQkxFX1NFUlZJQ0VTJywgdGhpcy5fbGFuZ3VhZ2UuY3VycmVudCkgKyAnOiAnO1xuICAgICAgdGFibGVDb2FjaERlc2NyaXB0aW9uICs9IHNlcnZpY2VEZXNjcmlwdGlvbnMgKyAnLCAnICsgYXJlYURlc2NyaXB0aW9ucyArICcuJztcbiAgICB9XG4gICAgcmV0dXJuIHRhYmxlQ29hY2hEZXNjcmlwdGlvbjtcbiAgfVxuXG4gIHByaXZhdGUgX2dldFRpdGxlRGVzY3JpcHRpb25MaXN0U3RyaW5nKGRlc2NyaXB0aW9uc0VsZW1lbnRzOiBCYXNlRWxlbWVudFtdKTogc3RyaW5nIHtcbiAgICBjb25zdCB1bmlxdWVEZXNjcmlwdGlvbnM6IHN0cmluZ1tdID0gW107XG5cbiAgICByZXR1cm4gZGVzY3JpcHRpb25zRWxlbWVudHNcbiAgICAgID8ubWFwKChkZXNjcmlwdGlvbkVsZW1lbnQpID0+IHtcbiAgICAgICAgY29uc3QgaWNvbiA9IGRlc2NyaXB0aW9uRWxlbWVudC5pY29uO1xuICAgICAgICBpZiAoIWljb24pIHJldHVybiBudWxsO1xuXG4gICAgICAgIGNvbnN0IGRlc2NyaXB0aW9uQWxyZWF5RXhpc3QgPSB1bmlxdWVEZXNjcmlwdGlvbnMuaW5kZXhPZihpY29uKSA+IC0xO1xuICAgICAgICBjb25zdCB0cmFuc2xhdGlvbiA9IGdldEkxOG5TZWF0UmVzZXJ2YXRpb24oXG4gICAgICAgICAgZGVzY3JpcHRpb25FbGVtZW50Lmljb24hLFxuICAgICAgICAgIHRoaXMuX2xhbmd1YWdlLmN1cnJlbnQsXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IGlzVmFsaWREZXNjcmlwdGlvbiA9XG4gICAgICAgICAgdGhpcy5fbm90Rml4ZWRSb3RhdGFibGVBcmVhSWNvbnMuaW5kZXhPZihpY29uKSA9PT0gLTEgJiZcbiAgICAgICAgICB0aGlzLl9ub3RBcmVhRWxlbWVudHMuaW5kZXhPZihpY29uKSA9PT0gLTE7XG5cbiAgICAgICAgaWYgKCFkZXNjcmlwdGlvbkFscmVheUV4aXN0KSB7XG4gICAgICAgICAgdW5pcXVlRGVzY3JpcHRpb25zLnB1c2goZGVzY3JpcHRpb25FbGVtZW50Lmljb24hKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gISF0cmFuc2xhdGlvbiAmJiAhZGVzY3JpcHRpb25BbHJlYXlFeGlzdCAmJiBpc1ZhbGlkRGVzY3JpcHRpb24gPyB0cmFuc2xhdGlvbiA6IG51bGw7XG4gICAgICB9KVxuICAgICAgLmZpbHRlcigoZGVzY3JpcHRpb24pID0+ICEhZGVzY3JpcHRpb24pXG4gICAgICAuam9pbignLCAnKTtcbiAgfVxufVxuXG5kZWNsYXJlIGdsb2JhbCB7XG4gIGludGVyZmFjZSBIVE1MRWxlbWVudFRhZ05hbWVNYXAge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbmFtaW5nLWNvbnZlbnRpb25cbiAgICAnc2JiLXNlYXQtcmVzZXJ2YXRpb24nOiBTYmJTZWF0UmVzZXJ2YXRpb25FbGVtZW50O1xuICB9XG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7SUFtQ00sNkJBQXlCLE1BQUE7OzBCQUQ5QixjQUFjLHNCQUFzQixDQUFDOzs7O29CQUNFO0FBQVIsRUFBQSxtQkFBUSxZQUEwQjtBQUFBOztBQUd4RCxXQUFBLFlBQVksSUFBSSxzQkFBc0IsSUFBSTtBQUcxQyxXQUFBLG1CQUFtQjtBQUFBLFFBQ3pCO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxRQUNBO0FBQUEsTUFBQTtBQUlNLFdBQUEsOEJBQThCLENBQUMsWUFBWTtBQUFBLElBaXFCckQ7QUFBQSxJQS9wQnFCLFdBQVcsbUJBQXVDO0FBQ25FLFlBQU0sV0FBVyxpQkFBaUI7QUFFbEMsVUFBSSxrQkFBa0IsSUFBSSxlQUFlLEdBQUc7QUFDMUMsWUFBSSxLQUFLLGVBQWU7QUFDdEIsZUFBSyxZQUNELGlCQUFpQixPQUFPLEVBQ3pCLFFBQVEsQ0FBQyxVQUFVLE1BQU0sZ0JBQWdCLFVBQVUsQ0FBQztBQUFBLFFBQ3pELE9BQU87QUFDTCxlQUFLLFlBQ0QsaUJBQWlCLE9BQU8sRUFDekIsUUFBUSxDQUFDLFVBQVUsTUFBTSxhQUFhLFlBQVksR0FBRyxDQUFDO0FBQUEsUUFDM0Q7QUFBQSxNQUNGO0FBQUEsSUFDRjtBQUFBLElBRW1CLGFBQWEsbUJBQXVDO0FBQ3JFLFlBQU0sYUFBYSxpQkFBaUI7QUFHcEMsV0FBSyxlQUFlLEtBQUssTUFBSztBQUM1QixhQUFLLCtCQUFBO0FBQ0wsYUFBSyxxQ0FBQTtBQUlMLGFBQUssY0FBQTtBQUFBLE1BQ1AsQ0FBQztBQUFBLElBQ0g7QUFBQSxJQUVtQixTQUFNO0FBQ3ZCLFdBQUssd0NBQUE7QUFDTCxhQUFPLEtBQUssd0JBQXdCO0FBQUEsSUFDdEM7QUFBQSxJQUVRLDBDQUF1QztBQUM3QyxXQUFLLHVCQUF1QjtBQUFBO0FBQUE7QUFBQTtBQUFBLGNBSWxCLEtBQUssK0JBQStCLGdCQUFnQixDQUFDO0FBQUE7QUFBQTtBQUFBO0FBQUEsdUJBSTVDLENBQUMsUUFBdUIsS0FBSyxvQkFBb0IsR0FBRyxDQUFDO0FBQUE7QUFBQTtBQUFBLHNDQUd0QyxLQUFLLG1CQUFtQjtBQUFBO0FBQUE7QUFBQSw2REFHRCxLQUFLLG1CQUFtQjtBQUFBO0FBQUE7QUFBQTtBQUFBLGlDQUlwRCxTQUFTO0FBQUEsUUFDaEIsc0JBQXNCO0FBQUEsUUFDdEIsMkJBQTJCLEtBQUs7QUFBQSxNQUFBLENBQ2pDLENBQUM7QUFBQTtBQUFBLDBCQUVBLEtBQUssa0JBQWtCLElBQ3ZCLENBQUMsaUJBQWtDLFVBQWlCO0FBQ2xELGVBQU87QUFBQTtBQUFBLGtDQUVELEtBQUssZUFBZSxpQkFBaUIsS0FBSyxDQUFDO0FBQUE7QUFBQTtBQUFBLE1BR25ELENBQUMsQ0FDRjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxjQVNYLEtBQUssK0JBQStCLGlCQUFpQixDQUFDO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQUtsRTtBQUFBLElBRVEsb0JBQWlCO0FBQ3ZCLFVBQUksQ0FBQyxLQUFLO0FBQWtCLGVBQU87QUFFbkMsYUFBTyxLQUFLLGlCQUFpQixJQUFJLENBQUMsb0JBQW1CO0FBQ25ELGNBQU0sa0JBQWtCLHVCQUN0QixnQkFBZ0IsZ0JBQ2hCLEtBQUssVUFBVSxPQUFPO0FBRXhCLGVBQU8sNkJBQTZCLGVBQWU7QUFBQSxNQUNyRCxDQUFDO0FBQUEsSUFDSDtBQUFBLElBRVEsK0JBQStCLGNBQW9CO0FBQ3pELFVBQUksQ0FBQyxLQUFLLGlCQUFpQixDQUFDLEtBQUs7QUFBa0IsZUFBTztBQUUxRCxZQUFNLFFBQVEsZ0JBQWdCLG9CQUFvQixxQkFBcUI7QUFDdkUsWUFBTSxVQUFVLGdCQUFnQixvQkFBb0Isc0JBQXNCO0FBQzFFLFlBQU0scUJBQ0osZ0JBQWdCLG9CQUNaLHVCQUF1Qix3QkFBd0IsS0FBSyxVQUFVLE9BQU8sSUFDckUsdUJBQXVCLDBCQUEwQixLQUFLLFVBQVUsT0FBTztBQUM3RSxVQUFJLGNBQWM7QUFFbEIsVUFBSSxnQkFBZ0Isb0JBQW9CLEtBQUsscUJBQXFCLEdBQUc7QUFDbkUsc0JBQWM7QUFBQSxNQUNoQixXQUNFLGdCQUFnQixxQkFDaEIsS0FBSyxxQkFDSCxLQUFLLGlCQUFpQixLQUFLLHFCQUFxQixFQUFFLFdBQVcsU0FBUyxHQUN4RTtBQUNBLHNCQUFjO0FBQUEsTUFDaEI7QUFFQSxhQUFPO0FBQUEsZ0JBQ0ssTUFBTSxLQUFLLHVCQUF1QixZQUFZLENBQUM7QUFBQSxZQUNuRCxLQUFLO0FBQUE7QUFBQTtBQUFBLG1CQUdFLE9BQU87QUFBQTtBQUFBLG9CQUVOLGtCQUFrQjtBQUFBO0FBQUEsOEJBRVIsZUFBZSxPQUFPO0FBQUE7QUFBQSxJQUVsRDtBQUFBLElBRVEsb0JBQWlCO0FBQ3ZCLFVBQUksQ0FBQyxLQUFLLGlCQUFpQixDQUFDLEtBQUs7QUFBa0IsZUFBTztBQUUxRCxhQUFPO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSx3QkFLYSx1QkFDWiwrQkFDQSxLQUFLLFVBQVUsT0FBTyxDQUN2QjtBQUFBO0FBQUEsWUFFQyxLQUFLLGlCQUFpQixLQUFLLHFCQUFxQixHQUFHLFdBQVcsSUFDOUQsQ0FBQyxXQUFzQixVQUFpQjtBQUN0QyxjQUFNLGtCQUFrQixLQUFLLG1DQUFtQyxLQUFLO0FBQ3JFLGVBQU87QUFBQTtBQUFBLGlDQUVZLENBQUMsVUFBK0IsS0FBSyxrQkFBa0IsS0FBSyxDQUFDO0FBQUEsZ0NBQzlELE1BQU0sS0FBSyxpQkFBQSxDQUFrQjtBQUFBLDJCQUNsQyxTQUFTO0FBQUEsVUFDaEIsMENBQ0UsS0FBSyw0QkFBNEI7QUFBQSxRQUFBLENBQ3BDLENBQUM7QUFBQSwyQkFDTyxLQUFLO0FBQUEsOEJBQ0YsVUFBVSxFQUFFO0FBQUEsdUNBQ0gsZUFBZTtBQUFBLDhCQUN4QixLQUFLLHVCQUF1QixLQUFLO0FBQUEsNkJBQ2xDLEtBQUssc0JBQXNCLEtBQUs7QUFBQSxrQ0FDM0IsVUFBVSxXQUFXO0FBQUEsa0NBQ3JCLFVBQVUsV0FBVztBQUFBLGtDQUNyQixDQUFDLFVBQVUsUUFBUSxNQUFNO0FBQUEsNEJBQy9CLFdBQVcsZ0JBQWdCLElBQUk7QUFBQSwyQkFDaEMsV0FBVyxnQkFBZ0IsS0FBSztBQUFBLCtCQUM1QixLQUFLLGFBQWE7QUFBQTtBQUFBO0FBQUE7QUFBQSxNQUlyQyxDQUFDLENBQ0Y7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQUlUO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBTVEsZUFDTixpQkFDQSxXQUFpQjtBQUVqQixZQUFNLFVBQVUsS0FBSyxNQUFNLEtBQUssVUFBVSxpQkFBaUIsVUFBVSxDQUFDO0FBRXRFLFVBQUksQ0FBQyxTQUFTO0FBQ1osZUFBTztBQUFBLE1BQ1Q7QUFDQSxhQUFPLFFBQVEsSUFBSSxDQUFDLFdBQXNCLGVBQXNCO0FBQzlELGVBQU87QUFBQTtBQUFBLFlBRUQsS0FBSyxvQkFBb0IsV0FBVyxZQUFZLFNBQVMsQ0FBQztBQUFBO0FBQUE7QUFBQSxNQUdsRSxDQUFDO0FBQUEsSUFDSDtBQUFBLElBRVEsb0JBQ04sV0FDQSxZQUNBLGdCQUFzQjtBQUV0QixZQUFNLDJCQUEyQixLQUFLLHVCQUF1QixVQUFVLFNBQVM7QUFDaEYsWUFBTSxvQ0FBb0MsS0FBSywwQkFBMEIsV0FBVyxVQUFVO0FBRTlGLGFBQU87QUFBQSxjQUNHLFNBQVM7QUFBQSxRQUNmLHVDQUF1Qyx5QkFBeUI7QUFBQSxRQUNoRSx3Q0FBd0MseUJBQXlCO0FBQUEsTUFBQSxDQUNsRSxDQUFDO0FBQUE7QUFBQSxRQUVBLEtBQUsseUJBQXlCLFNBQVMsQ0FBQztBQUFBLFFBQ3hDLEtBQUssOEJBQ0wsVUFBVSxtQkFBbUIsQ0FBQSxHQUM3QixVQUFVLFdBQ1YsWUFDQSxjQUFjLENBQ2Y7QUFBQSxRQUNDLEtBQUssNEJBQTRCLFlBQVksZ0JBQWdCLFVBQVUsZUFBZSxDQUFDO0FBQUE7QUFBQTtBQUFBLGlCQUc5RSxNQUFNLEtBQUssbUNBQW1DLFVBQVUsQ0FBQztBQUFBLDJCQUMvQyxVQUFVO0FBQUE7QUFBQSxpREFFWSxVQUFVO0FBQUE7QUFBQSw0Q0FFZixVQUFVO0FBQUEsb0NBQ2xCLGlDQUFpQztBQUFBO0FBQUEsVUFFM0QsS0FBSyxzQkFBc0IsV0FBVyxZQUFZLGNBQWMsQ0FBQztBQUFBO0FBQUE7QUFBQSxJQUd6RTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFNUSx5QkFBeUIsV0FBb0I7QUFDbkQsWUFBTSxzQkFBc0I7QUFDNUIsWUFBTSxjQUFjLFVBQVU7QUFDOUIsWUFBTSxhQUFhLGFBQWEsS0FBSyxDQUFDLFlBQXlCLFFBQVEsU0FBUyxhQUFhO0FBQzdGLFlBQU0sY0FBYyxhQUNoQixVQUFVLFVBQVUsSUFBSSxXQUFXLFVBQVUsSUFBSSxzQkFDakQsVUFBVSxVQUFVLElBQUksc0JBQXNCO0FBQ2xELFlBQU0sZ0JBQWdCLFVBQVUsVUFBVSxJQUFJLEtBQUssb0JBQW9CLEtBQUssS0FBSztBQUNqRixZQUFNLGdCQUNKLGNBQWMsV0FBVyxTQUFTLE1BQU0sSUFDcEMsWUFBWSxVQUFVLElBQUksS0FBSyxlQUMvQixLQUFLO0FBQ1gsYUFBTztBQUFBO0FBQUEsZ0JBRUssU0FBUztBQUFBLFFBQ2Ysd0NBQXdDLGNBQWMsS0FBSztBQUFBLFFBQzNELHlDQUF5QztBQUFBLFFBQ3pDLHNDQUFzQyxLQUFLLHFCQUFxQjtBQUFBLFFBQ2hFLHVDQUF1QztBQUFBLFFBQ3ZDLDJDQUEyQztBQUFBLE1BQUEsQ0FDNUMsQ0FBQztBQUFBO0FBQUEsbUJBRVMsSUFBSTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBSXJCO0FBQUEsSUFFUSxzQkFDTixPQUNBLFlBQ0EsV0FBaUI7QUFFakIsVUFBSSxDQUFDLE1BQU0sUUFBUTtBQUNqQixlQUFPO0FBQUEsTUFDVDtBQUdBLFlBQU0saUJBQTBDLENBQUE7QUFDaEQsaUJBQVcsU0FBUyxNQUFNLFFBQVE7QUFDaEMsWUFBSSxDQUFDLGVBQWUsTUFBTSxTQUFTLENBQUMsR0FBRztBQUNyQyx5QkFBZSxNQUFNLFNBQVMsQ0FBQyxJQUFJLENBQUMsS0FBSztBQUFBLFFBQzNDLE9BQU87QUFDTCx5QkFBZSxNQUFNLFNBQVMsQ0FBQyxFQUFFLEtBQUssS0FBSztBQUFBLFFBQzdDO0FBQUEsTUFDRjtBQUVBLGFBQU8sT0FBTyxPQUFPLGNBQWMsRUFDaEMsSUFBSSxDQUFDLFdBQW9CLFVBQVM7QUFDakMsZUFBTztBQUFBLHdCQUNTLFVBQVUsSUFBSSxVQUFVLENBQUMsRUFBRSxTQUFTLENBQUMsb0JBQW9CLEtBQUs7QUFBQSxjQUN4RSxLQUFLLHlCQUF5QixXQUFXLFlBQVksU0FBUyxDQUFDO0FBQUE7QUFBQTtBQUFBLE1BR3ZFLENBQUMsRUFDQSxRQUFRLENBQUMsZ0JBQWdCLFdBQVc7QUFBQSxJQUN6QztBQUFBLElBRVEseUJBQ04sUUFDQSxZQUNBLFdBQWlCO0FBR2pCLGFBQU8sS0FDTCxDQUFDLFFBQWUsV0FBa0IsT0FBTyxPQUFPLFNBQVMsQ0FBQyxJQUFJLE9BQU8sT0FBTyxTQUFTLENBQUMsQ0FBQztBQUd6RixhQUFPLFFBQVEsSUFBSSxDQUFDLE9BQWMsVUFBaUI7QUFDakQsY0FBTSxzQkFBc0IsS0FBSyx1QkFBdUIsTUFBTSxTQUFTO0FBQ3ZFLGNBQU0scUJBQXFCLEtBQUssc0JBQXNCLE1BQU0sUUFBUTtBQUNwRSxjQUFNLFdBQVcsTUFBTSxZQUFZO0FBQ25DLGNBQU0sZUFBZSxLQUFLLGdCQUFnQixNQUFNO0FBRWhELGVBQU87QUFBQTtBQUFBLHFCQUVRLFNBQVMsSUFBSSxVQUFVLElBQUksTUFBTSxTQUFTLENBQUMsSUFBSSxLQUFLO0FBQUE7QUFBQTtBQUFBO0FBQUEsb0JBSXJELFNBQVM7QUFBQSxVQUNmLHlEQUF5RCxLQUFLLElBQzVELG9CQUFvQixHQUNwQixvQkFBb0IsQ0FBQztBQUFBLFVBRXZCLDhDQUE4QyxvQkFBb0I7QUFBQSxVQUNsRSwrQ0FBK0Msb0JBQW9CO0FBQUEsVUFDbkUsNENBQTRDLG1CQUFtQjtBQUFBLFVBQy9ELDZDQUE2QyxtQkFBbUI7QUFBQSxVQUNoRSxpREFBaUQ7QUFBQSxVQUNqRCxzREFBc0Q7QUFBQSxRQUFBLENBQ3ZELENBQUM7QUFBQSwyQkFDYSxDQUFDLHFCQUNkLEtBQUssZUFBZSxnQkFBZ0IsQ0FBQztBQUFBO0FBQUEsaURBRUYsU0FBUyxJQUFJLFVBQVUsSUFBSSxNQUFNLE1BQU07QUFBQTtBQUFBLG1CQUVyRSxNQUFNLE1BQU07QUFBQSxtQkFDWixNQUFNLElBQUk7QUFBQSxvQkFDVCxNQUFNLEtBQUs7QUFBQSwwQkFDTCxVQUFVO0FBQUEseUJBQ1gsU0FBUztBQUFBLDJCQUNQLE1BQU0sV0FBVztBQUFBLDRCQUNoQixLQUFLLGlCQUFpQjtBQUFBO0FBQUE7QUFBQTtBQUFBLE1BSTlDLENBQUM7QUFBQSxJQUNIO0FBQUEsSUFFUSw4QkFDTixtQkFDQSxnQkFDQSxZQUNBLGdCQUFzQjtBQUV0QixVQUFJLENBQUM7QUFBbUIsZUFBTztBQUUvQixhQUFPLG1CQUFtQixJQUFJLENBQUMscUJBQWlDO0FBQzlELGNBQU0sT0FBTyxpQkFBaUIsUUFBUTtBQUN0QyxjQUFNLGtCQUFrQixpQkFBaUIsWUFBWTtBQUNyRCxjQUFNLHFDQUNKLEtBQUssNEJBQTRCLFFBQVEsaUJBQWlCLElBQUssTUFBTTtBQUN2RSxjQUFNLHVCQUNKLEtBQUssaUJBQWlCLHFDQUNsQixrQkFBa0IsS0FDbEI7QUFHTixZQUFJLEtBQUssaUJBQWlCLFVBQVUsQ0FBQyxtQkFBbUIsbUJBQW1CLElBQUksSUFBSSxJQUFJO0FBQ3JGLGlCQUFPLEtBQUssNkJBQTZCLGtCQUFrQixpQkFBaUIsY0FBYztBQUFBLFFBQzVGO0FBQ0EsZUFBTyxLQUFLLDBCQUNWLGtCQUNBLHNCQUNBLGdCQUNBLFlBQ0EsY0FBYztBQUFBLE1BRWxCLENBQUM7QUFBQSxJQUNIO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBVVEsMEJBQ04sa0JBQ0EsVUFDQSxnQkFDQSxZQUNBLGdCQUFzQjtBQUt0QixZQUFNLG9CQUFvQixpQkFBaUIsTUFBTSxRQUFRLE9BQU8sTUFBTTtBQUN0RSxZQUFNLGVBQWUsaUJBQWlCLFFBQVEsb0JBQW9CLGlCQUFpQixPQUFPO0FBQzFGLFlBQU0sZ0JBQWdCLGlCQUFpQjtBQUN2QyxZQUFNLG1CQUFtQixpQkFBaUIsT0FDdEMsdUJBQXVCLGlCQUFpQixNQUFNLEtBQUssVUFBVSxPQUFPLElBQ3BFO0FBQ0osWUFBTSxzQkFBc0IsS0FBSyx1QkFDL0IsaUJBQWlCLFdBQ2pCLGdCQUNBLE1BQ0EsYUFBYTtBQUVmLFlBQU0scUJBQXFCLEtBQUssc0JBQzlCLGlCQUFpQixVQUNqQixpQkFBaUIsV0FDakIsZ0JBQ0EsSUFBSTtBQUlOLFlBQU0sWUFBWSxtQkFBbUIsY0FBYyxJQUFJLFVBQVUsSUFBSSxtQkFBbUIsQ0FBQyxJQUFJLG1CQUFtQixDQUFDO0FBQ2pILFVBQUksa0JBQWtCO0FBRXRCLFVBQUksaUJBQWlCLFNBQVMsTUFBTSxLQUFLLG9CQUFvQixJQUFJO0FBQy9ELDBCQUFrQjtBQUFBLE1BQ3BCLFdBQ0UsaUJBQWlCLFNBQVMsSUFBSSxpQkFBaUIsVUFBVSxNQUN6RCxlQUFlLElBQUksS0FBSyxtQkFDeEI7QUFDQSwwQkFBa0I7QUFBQSxNQUNwQjtBQUVBLGFBQU87QUFBQTtBQUFBLGNBRUcsU0FBUztBQUFBLGlCQUNOLFNBQVMsRUFBRSw2Q0FBNkMsaUJBQWlCLEtBQUEsQ0FBTSxDQUFDO0FBQUEsZ0JBQ2pGLFNBQVM7QUFBQSxRQUNmLHFDQUFxQyxvQkFBb0I7QUFBQSxRQUN6RCxzQ0FBc0Msb0JBQW9CO0FBQUEsUUFDMUQsbUNBQW1DLG1CQUFtQjtBQUFBLFFBQ3RELG9DQUFvQyxtQkFBbUI7QUFBQSxNQUFBLENBQ3hELENBQUM7QUFBQSxtQkFDUyxlQUFlO0FBQUE7QUFBQTtBQUFBO0FBQUEsVUFJeEIsZUFDRTtBQUFBO0FBQUEsd0JBRVksU0FBUztBQUFBLFFBQ2Ysd0NBQXdDLEtBQUs7QUFBQSxRQUM3Qyx5Q0FBeUMsS0FBSztBQUFBLFFBQzlDLDJDQUEyQztBQUFBLE1BQUEsQ0FDNUMsQ0FBQztBQUFBLHVCQUNLLFlBQVk7QUFBQTtBQUFBO0FBQUE7QUFBQSxnQkFLdkIsT0FBTztBQUFBO0FBQUEsUUFFWCxlQUFlLEtBQUssU0FBUyxXQUFXLGdCQUFnQixJQUFJLE9BQU87QUFBQTtBQUFBLElBRXpFO0FBQUEsSUFFUSw2QkFDTixrQkFDQSxVQUNBLGdCQUFnQztBQUVoQyxZQUFNLHNCQUFzQixLQUFLLHVCQUMvQixpQkFBaUIsV0FDakIsY0FBYztBQUVoQixZQUFNLHFCQUFxQixLQUFLLHNCQUM5QixpQkFBaUIsVUFDakIsaUJBQWlCLFdBQ2pCLGNBQWM7QUFJaEIsWUFBTSxPQUNKLGlCQUFpQixRQUFRLGlCQUFpQixLQUFLLFFBQVEsYUFBYSxNQUFNLEtBQ3RFLGlCQUFpQixPQUNqQixpQkFBaUIsTUFBTSxPQUNyQixLQUNBLEtBQUssaUJBQWlCLEtBQUsscUJBQXFCLEVBQUUsV0FBVztBQUdyRSxhQUFPO0FBQUEsY0FDRyxTQUFTO0FBQUEsUUFDZix3Q0FBd0Msb0JBQW9CO0FBQUEsUUFDNUQseUNBQXlDLG9CQUFvQjtBQUFBLFFBQzdELHNDQUFzQyxtQkFBbUI7QUFBQSxRQUN6RCx1Q0FBdUMsbUJBQW1CO0FBQUEsUUFDMUQsMkNBQTJDO0FBQUEsUUFDM0MsMkNBQTJDO0FBQUEsTUFBQSxDQUM1QyxDQUFDO0FBQUEsYUFDSyxRQUFRLE9BQU87QUFBQTtBQUFBLGlCQUVYLElBQUk7QUFBQTtBQUFBLElBRW5CO0FBQUEsSUFFUSw0QkFDTixZQUNBLGdCQUNBLGlCQUErQjtBQUUvQixVQUFJLENBQUM7QUFBaUIsZUFBTztBQUU3QixhQUFPLGlCQUFpQixJQUFJLENBQUMsbUJBQStCO0FBQzFELGNBQU0sbUJBQW1CLGVBQWUsT0FDcEMsdUJBQXVCLGVBQWUsTUFBTSxLQUFLLFVBQVUsT0FBTyxJQUNsRTtBQUNKLGNBQU0sc0JBQXNCLEtBQUssdUJBQXVCLGVBQWUsU0FBUztBQUNoRixjQUFNLHFCQUFxQixLQUFLLHNCQUFzQixlQUFlLFFBQVE7QUFDN0UsY0FBTSxrQkFBa0IsZUFBZSxZQUFZO0FBQ25ELGNBQU0sdUJBQXVCLEtBQUssZ0JBQWdCLGtCQUFrQixLQUFLO0FBR3pFLGNBQU0sWUFBWSxtQkFBbUIsY0FBYyxJQUFJLFVBQVUsSUFBSSxtQkFBbUIsQ0FBQyxJQUFJLG1CQUFtQixDQUFDO0FBRWpILGVBQU87QUFBQTtBQUFBLGdCQUVHLFNBQVM7QUFBQSxrQkFDUCxTQUFTO0FBQUEsVUFDZix3Q0FBd0Msb0JBQW9CO0FBQUEsVUFDNUQseUNBQXlDLG9CQUFvQjtBQUFBLFVBQzdELHNDQUFzQyxtQkFBbUI7QUFBQSxVQUN6RCx1Q0FBdUMsbUJBQW1CO0FBQUEsVUFDMUQsMkNBQTJDO0FBQUEsVUFDM0MsMkNBQTJDO0FBQUEsUUFBQSxDQUM1QyxDQUFDO0FBQUE7QUFBQSxpQkFFSyxlQUFlLFFBQVEsT0FBTztBQUFBO0FBQUE7QUFBQTtBQUFBLFVBSXJDLEtBQUssU0FBUyxXQUFXLGdCQUFnQixDQUFDO0FBQUE7QUFBQSxNQUVoRCxDQUFDO0FBQUEsSUFDSDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQU9RLGVBQWUsa0JBQTZDO0FBQ2xFLFlBQU0sZ0JBQWdCLGlCQUFpQjtBQUV2QyxXQUFLLGlDQUFpQztBQUN0QyxXQUFLLHVCQUF1QjtBQUM1QixVQUFJLENBQUMsS0FBSyxtQkFBbUI7QUFFM0IsYUFBSyx3QkFBd0IsY0FBYztBQUUzQyxhQUFLLG9DQUFvQyxhQUFhO0FBQ3RELGFBQUssa0NBQWtDLGFBQWE7QUFBQSxNQUN0RDtBQUFBLElBQ0Y7QUFBQSxJQUVRLGtCQUFrQixPQUEwQjtBQUNsRCxZQUFNLHdCQUF3QixNQUFNO0FBQ3BDLFdBQUssdUJBQXVCO0FBRTVCLFVBQUksMEJBQTBCLFFBQVEsMEJBQTBCLEtBQUssd0JBQXdCO0FBQzNGLGFBQUssb0JBQUE7QUFDTCxhQUFLLHlCQUF5QixxQkFBcUI7QUFBQSxNQUNyRCxXQUFXLDBCQUEwQixLQUFLLHdCQUF3QjtBQUNoRSxhQUFLLDJCQUFBO0FBQ0wsYUFBSyxzQkFBQTtBQUFBLE1BQ1A7QUFHQSxXQUFLLGNBQUE7QUFBQSxJQUNQO0FBQUEsSUFFUSxtQkFBZ0I7QUFDdEIsVUFBSSxDQUFDLEtBQUssZ0NBQWdDO0FBQ3hDLGFBQUssc0JBQUE7QUFBQSxNQUNQLE9BQU87QUFDTCxhQUFLLGtCQUFrQixLQUFLLGlCQUFpQjtBQUFBLE1BQy9DO0FBQ0EsV0FBSyxrQkFBa0I7QUFBQSxJQUN6QjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBUVEsU0FDTixXQUNBLGdCQUE4QztBQUU5QyxhQUFPO0FBQUEsOEJBQ21CLFNBQVM7QUFBQSwrQ0FDUSxjQUFjO0FBQUE7QUFBQTtBQUFBLElBRzNEO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQU1RLGdCQUFhO0FBQ25CLFdBQUssWUFDRCxpQkFBaUIsa0NBQWtDLEVBQ3BELFFBQVEsQ0FBQyxZQUFZLFFBQVEsYUFBYSxjQUFjLFFBQVEsQ0FBQztBQUFBLElBQ3RFO0FBQUEsSUFFUSwwQkFBMEIsV0FBc0IsWUFBa0I7QUFDeEUsVUFBSSxDQUFDLFVBQVUsUUFBUSxRQUFRO0FBQzdCLGVBQU8sdUJBQXVCLCtCQUErQixLQUFLLFVBQVUsU0FBUztBQUFBLFVBQ25GLFVBQVU7QUFBQSxRQUFBLENBQ1g7QUFBQSxNQUNIO0FBRUEsVUFBSTtBQUNKLFlBQU0sbUJBQW1CLEtBQUssK0JBQStCLFVBQVUsZUFBZ0I7QUFDdkYsWUFBTSxzQkFBc0IsS0FBSywrQkFBK0IsVUFBVSxlQUFnQjtBQUUxRiw4QkFBd0IsdUJBQXVCLHVCQUF1QixLQUFLLFVBQVUsU0FBUztBQUFBLFFBQzVGLFVBQVU7QUFBQSxNQUFBLENBQ1g7QUFFRCxVQUFJLENBQUMsS0FBSyxlQUFlO0FBRXZCLGNBQU0sYUFBYSxLQUFLLG1DQUFtQyxVQUFVO0FBQ3JFLGNBQU0sZ0JBQWdCLHVCQUNwQixvQ0FDQSxLQUFLLFVBQVUsU0FDZixDQUFDLFdBQVcsT0FBTyxXQUFXLFFBQVEsQ0FBQztBQUV6QyxnQ0FBd0Isc0JBQXNCLE9BQU8sSUFBSSxFQUFFLE9BQU8sYUFBYSxFQUFFLE9BQU8sSUFBSTtBQUFBLE1BQzlGO0FBRUEsVUFBSSxDQUFDLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxxQkFBcUI7QUFDL0MsaUNBQ0UsT0FBTyx1QkFBdUIsNEJBQTRCLEtBQUssVUFBVSxPQUFPLElBQUk7QUFDdEYsaUNBQXlCLHNCQUFzQixPQUFPLG1CQUFtQjtBQUFBLE1BQzNFO0FBQ0EsYUFBTztBQUFBLElBQ1Q7QUFBQSxJQUVRLCtCQUErQixzQkFBbUM7QUFDeEUsWUFBTSxxQkFBK0IsQ0FBQTtBQUVyQyxhQUFPLHNCQUNILElBQUksQ0FBQyx1QkFBc0I7QUFDM0IsY0FBTSxPQUFPLG1CQUFtQjtBQUNoQyxZQUFJLENBQUM7QUFBTSxpQkFBTztBQUVsQixjQUFNLHlCQUF5QixtQkFBbUIsUUFBUSxJQUFJLElBQUk7QUFDbEUsY0FBTSxjQUFjLHVCQUNsQixtQkFBbUIsTUFDbkIsS0FBSyxVQUFVLE9BQU87QUFFeEIsY0FBTSxxQkFDSixLQUFLLDRCQUE0QixRQUFRLElBQUksTUFBTSxNQUNuRCxLQUFLLGlCQUFpQixRQUFRLElBQUksTUFBTTtBQUUxQyxZQUFJLENBQUMsd0JBQXdCO0FBQzNCLDZCQUFtQixLQUFLLG1CQUFtQixJQUFLO0FBQUEsUUFDbEQ7QUFDQSxlQUFPLENBQUMsQ0FBQyxlQUFlLENBQUMsMEJBQTBCLHFCQUFxQixjQUFjO0FBQUEsTUFDeEYsQ0FBQyxFQUNBLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLFdBQVcsRUFDckMsS0FBSyxJQUFJO0FBQUEsSUFDZDtBQUFBOztBQWpyQkYsaUJBQUEsTUFBQSxtQkFBQSxFQUFBLE9BQUEsV0FBQSxHQUFBLGtCQUFBLEVBQUEsTUFBQSxTQUFBLE1BQUEsV0FBQSxNQUFBLFVBQUEsVUFBQSxHQUFBLE1BQUEsdUJBQUE7OztRQUN5QixHQUFBLFNBQXlCLE9BRDVDLGtCQUFBLFlBQUEsdUJBQUEsR0FBMEI7OzsifQ==
|
|
@@ -235,14 +235,14 @@ const chassisTable = html`
|
|
|
235
235
|
<td>DRIVER_AREA</td>
|
|
236
236
|
</tr>
|
|
237
237
|
<tr>
|
|
238
|
-
<td>${svgImageByOSDMCode("
|
|
238
|
+
<td>${svgImageByOSDMCode("DRIVER_AREA_TRAIN")}</td>
|
|
239
239
|
<td>Driver: Train</td>
|
|
240
|
-
<td>
|
|
240
|
+
<td>DRIVER_AREA_TRAIN</td>
|
|
241
241
|
</tr>
|
|
242
242
|
<tr>
|
|
243
|
-
<td>${svgImageByOSDMCode("
|
|
243
|
+
<td>${svgImageByOSDMCode("DRIVER_AREA_BUS")}</td>
|
|
244
244
|
<td>Driver: Bus</td>
|
|
245
|
-
<td>
|
|
245
|
+
<td>DRIVER_AREA_BUS</td>
|
|
246
246
|
</tr>
|
|
247
247
|
<tr>
|
|
248
248
|
<td>${svgImageByOSDMCode("COMPARTMENT_PASSAGE_HIGH")}</td>
|
|
@@ -317,4 +317,4 @@ export {
|
|
|
317
317
|
assetsTemplate,
|
|
318
318
|
svgImageByOSDMCode
|
|
319
319
|
};
|
|
320
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VhdC1yZXNlcnZhdGlvbi1hc3NldHMuanMiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9lbGVtZW50cy1leHBlcmltZW50YWwvc2VhdC1yZXNlcnZhdGlvbi9zZWF0LXJlc2VydmF0aW9uLWdyYXBoaWMvc2VhdC1yZXNlcnZhdGlvbi1hc3NldHMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaHRtbCwgdHlwZSBUZW1wbGF0ZVJlc3VsdCB9IGZyb20gJ2xpdCc7XG5pbXBvcnQgeyB1bnNhZmVIVE1MIH0gZnJvbSAnbGl0L2RpcmVjdGl2ZXMvdW5zYWZlLWh0bWwuanMnO1xuXG5pbXBvcnQgeyBzdmdzLCBtYXBJY29uVG9TdmcgfSBmcm9tICcuLi9jb21tb24uanMnO1xuXG5pbXBvcnQgJ0BzYmItZXN0YS9seW5lLWVsZW1lbnRzL3RhYmxlLmpzJztcbmltcG9ydCAnLi4vc2VhdC1yZXNlcnZhdGlvbi1ncmFwaGljLmpzJztcblxuY29uc3Qgc3ZnSW1hZ2UgPSAoc3JjOiBzdHJpbmcpOiBUZW1wbGF0ZVJlc3VsdCA9PiB7XG4gIHJldHVybiBodG1sYFxuICAgIDxkaXYgY2xhc3M9XCJzdG9yeS1hc3NldFwiPlxuICAgICAgPHNwYW4gY2xhc3M9XCJzdG9yeS1hc3NldF9fcHJldmlld1wiPiR7dW5zYWZlSFRNTChzcmMpfTwvc3Bhbj5cbiAgICA8L2Rpdj5cbiAgYDtcbn07XG5cbi8qKlxuICogc3ZnSW1hZ2VCeU9TRE1Db2RlIEZ1bmN0aW9uIHJldHVybnMgdGhlIGNvcnJlc3BvbmRpbmcgc3ZnIGltYWdlIGJ5IE9TRE0gQ29kZVxuICogQHBhcmFtIG9zZG1Db2RlXG4gKiBAcmV0dXJucyBUaGUgU1ZHIEltYWdlIGFzIFRlbXBsYXRlUmVzdWx0IGlmIGl0IG1hdGNoZXMgdGhlIE9TRE0gY29kZSwgb3IgbnVsbCBpZiBpdCdzIG5vdCBmb3VuZC5cbiAqL1xuZXhwb3J0IGNvbnN0IHN2Z0ltYWdlQnlPU0RNQ29kZSA9IChvc2RtQ29kZTogc3RyaW5nKTogVGVtcGxhdGVSZXN1bHQgfCBudWxsID0+IHtcbiAgcmV0dXJuIG1hcEljb25Ub1N2Z1tvc2RtQ29kZV0/LnN2Z1xuICAgID8gc3ZnSW1hZ2UobWFwSWNvblRvU3ZnW29zZG1Db2RlXS5zdmcpXG4gICAgOiBtYXBJY29uVG9Tdmdbb3NkbUNvZGVdPy5zdmdOYW1lXG4gICAgICA/IGh0bWxgPHNiYi1pY29uIG5hbWU9XCIke21hcEljb25Ub1N2Z1tvc2RtQ29kZV0uc3ZnTmFtZX1cIj48L3NiYi1pY29uPmBcbiAgICAgIDogbnVsbDtcbn07XG5cbmNvbnN0IGludGVyaW9yVGFibGUgPSBodG1sYFxuICA8c2JiLXRhYmxlLXdyYXBwZXI+XG4gICAgPHRhYmxlIGNsYXNzPVwic2JiLXRhYmxlXCI+XG4gICAgICA8dGhlYWQ+XG4gICAgICAgIDx0cj5cbiAgICAgICAgICA8dGggc2NvcGU9XCJjb2xcIj5TVkc8L3RoPlxuICAgICAgICAgIDx0aCBzY29wZT1cImNvbFwiPkZpZ21hPC90aD5cbiAgICAgICAgICA8dGggc2NvcGU9XCJjb2xcIj5Db2RlPC90aD5cbiAgICAgICAgPC90cj5cbiAgICAgIDwvdGhlYWQ+XG4gICAgICA8dGJvZHk+XG4gICAgICAgIDx0cj5cbiAgICAgICAgICA8dGQ+JHtzdmdJbWFnZUJ5T1NETUNvZGUoJ1BMQUNFX0JJQ1lDTEVfRlJFRScpfTwvdGQ+XG4gICAgICAgICAgPHRkPlBsYWNlLUJpa2U6IEF2YWlsYWJsZTwvdGQ+XG4gICAgICAgICAgPHRkPlBMQUNFX0JJQ1lDTEVfRlJFRTwvdGQ+XG4gICAgICAgIDwvdHI+XG4gICAgICAgIDx0cj5cbiAgICAgICAgICA8dGQ+JHtzdmdJbWFnZUJ5T1NETUNvZGUoJ1BMQUNFX0JJQ1lDTEVfU0VMRUNURUQnKX08L3RkPlxuICAgICAgICAgIDx0ZD5QbGFjZS1CaWtlOiBTZWxlY3RlZDwvdGQ+XG4gICAgICAgICAgPHRkPlBMQUNFX0JJQ1lDTEVfU0VMRUNURUQ8L3RkPlxuICAgICAgICA8L3RyPlxuICAgICAgICA8dHI+XG4gICAgICAgICAgPHRkPiR7c3ZnSW1hZ2VCeU9TRE1Db2RlKCdQTEFDRV9CSUNZQ0xFX0FMTE9DQVRFRCcpfTwvdGQ+XG4gICAgICAgICAgPHRkPlBsYWNlLUJpa2U6IFVuYXZhaWxhYmxlPC90ZD5cbiAgICAgICAgICA8dGQ+UExBQ0VfQklDWUNMRV9BTExPQ0FURUQ8L3RkPlxuICAgICAgICA8L3RyPlxuICAgICAgICA8dHI+XG4gICAgICAgICAgPHRkPiR7c3ZnSW1hZ2VCeU9TRE1Db2RlKCdQTEFDRV9CSUNZQ0xFX1JFU1RSSUNURUQnKX08L3RkPlxuICAgICAgICAgIDx0ZD5QbGFjZS1CaWtlOiBOb3QgYm9va2FibGU8L3RkPlxuICAgICAgICAgIDx0ZD5QTEFDRV9CSUNZQ0xFX1JFU1RSSUNURUQ8L3RkPlxuICAgICAgICA8L3RyPlxuICAgICAgICA8dHI+XG4gICAgICAgICAgPHRkPiR7c3ZnSW1hZ2VCeU9TRE1Db2RlKCdQTEFDRV9TRUFUX0ZSRUUnKX08L3RkPlxuICAgICAgICAgIDx0ZD5QbGFjZS1TZWF0OiBBdmFpbGFibGU8L3RkPlxuICAgICAgICAgIDx0ZD5QTEFDRV9TRUFUX0ZSRUU8L3RkPlxuICAgICAgICA8L3RyPlxuICAgICAgICA8dHI+XG4gICAgICAgICAgPHRkPiR7c3ZnSW1hZ2VCeU9TRE1Db2RlKCdQTEFDRV9TRUFUX1NFTEVDVEVEJyl9PC90ZD5cbiAgICAgICAgICA8dGQ+UGxhY2UtU2VhdDogU2VsZWN0ZWQ8L3RkPlxuICAgICAgICAgIDx0ZD5QTEFDRV9TRUFUX1NFTEVDVEVEPC90ZD5cbiAgICAgICAgPC90cj5cbiAgICAgICAgPHRyPlxuICAgICAgICAgIDx0ZD4ke3N2Z0ltYWdlQnlPU0RNQ29kZSgnUExBQ0VfU0VBVF9BTExPQ0FURUQnKX08L3RkPlxuICAgICAgICAgIDx0ZD5QbGFjZS1TZWF0OiBVbmF2YWlsYWJsZTwvdGQ+XG4gICAgICAgICAgPHRkPlBMQUNFX1NFQVRfQUxMT0NBVEVEPC90ZD5cbiAgICAgICAgPC90cj5cbiAgICAgICAgPHRyPlxuICAgICAgICAgIDx0ZD4ke3N2Z0ltYWdlQnlPU0RNQ29kZSgnUExBQ0VfU0VBVF9SRVNUUklDVEVEJyl9PC90ZD5cbiAgICAgICAgICA8dGQ+UGxhY2UtU2VhdDogTm90IGJvb2thYmxlPC90ZD5cbiAgICAgICAgICA8dGQ+UExBQ0VfU0VBVF9SRVNUUklDVEVEPC90ZD5cbiAgICAgICAgPC90cj5cbiAgICAgIDwvdGJvZHk+XG4gICAgPC90YWJsZT5cbiAgPC9zYmItdGFibGUtd3JhcHBlcj5cbmA7XG5jb25zdCBsYXlvdXRJdGVtc1RhYmxlID0gaHRtbGBcbiAgPHNiYi10YWJsZS13cmFwcGVyPlxuICAgIDx0YWJsZSBjbGFzcz1cInNiYi10YWJsZVwiPlxuICAgICAgPHRoZWFkPlxuICAgICAgICA8dHI+XG4gICAgICAgICAgPHRoIHNjb3BlPVwiY29sXCI+U1ZHPC90aD5cbiAgICAgICAgICA8dGggc2NvcGU9XCJjb2xcIj5GaWdtYTwvdGg+XG4gICAgICAgICAgPHRoIHNjb3BlPVwiY29sXCI+T1NETSBDb2RlPC90aD5cbiAgICAgICAgPC90cj5cbiAgICAgIDwvdGhlYWQ+XG4gICAgICA8dGJvZHk+XG4gICAgICAgIDx0cj5cbiAgICAgICAgICA8dGQ+JHtzdmdJbWFnZUJ5T1NETUNvZGUoJ0VBU1lfQUNDRVNTX0FSRUEnKX08L3RkPlxuICAgICAgICAgIDx0ZD5FYXN5IEFjY2VzcyBBcmVhPC90ZD5cbiAgICAgICAgICA8dGQ+RUFTWV9BQ0NFU1NfQVJFQTwvdGQ+XG4gICAgICAgIDwvdHI+XG4gICAgICAgIDx0cj5cbiAgICAgICAgICA8dGQ+JHtzdmdJbWFnZUJ5T1NETUNvZGUoJ0VOVFJZX0VYSVQnKX08L3RkPlxuICAgICAgICAgIDx0ZD5FbnRyYW5jZTwvdGQ+XG4gICAgICAgICAgPHRkPkVOVFJZX0VYSVQ8L3RkPlxuICAgICAgICA8L3RyPlxuICAgICAgICA8dHI+XG4gICAgICAgICAgPHRkPiR7c3ZnSW1hZ2VCeU9TRE1Db2RlKCdMVUdHQUdFX0FSRUEnKX08L3RkPlxuICAgICAgICAgIDx0ZD5MdWdnYWdlPC90ZD5cbiAgICAgICAgICA8dGQ+TFVHR0FHRV9BUkVBPC90ZD5cbiAgICAgICAgPC90cj5cbiAgICAgICAgPHRyPlxuICAgICAgICAgIDx0ZD4ke3N2Z0ltYWdlQnlPU0RNQ29kZSgnTVVMVElfRlVOQ1RJT05fQVJFQScpfTwvdGQ+XG4gICAgICAgICAgPHRkPk11bHRpIEZ1bmN0aW9uIEFyZWE8L3RkPlxuICAgICAgICAgIDx0ZD5NVUxUSV9GVU5DVElPTl9BUkVBPC90ZD5cbiAgICAgICAgPC90cj5cbiAgICAgICAgPHRyPlxuICAgICAgICAgIDx0ZD4ke3N2Z0ltYWdlQnlPU0RNQ29kZSgnUExBWUdST1VORF9BUkVBJyl9PC90ZD5cbiAgICAgICAgICA8dGQ+UGxheWdyb3VuZDwvdGQ+XG4gICAgICAgICAgPHRkPlBMQVlHUk9VTkRfQVJFQTwvdGQ+XG4gICAgICAgIDwvdHI+XG4gICAgICAgIDx0cj5cbiAgICAgICAgICA8dGQ+JHtzdmdJbWFnZUJ5T1NETUNvZGUoJ1BSQU1fQVJFQScpfTwvdGQ+XG4gICAgICAgICAgPHRkPlByYW08L3RkPlxuICAgICAgICAgIDx0ZD5QUkFNX0FSRUE8L3RkPlxuICAgICAgICA8L3RyPlxuICAgICAgICA8dHI+XG4gICAgICAgICAgPHRkPiR7c3ZnSW1hZ2VCeU9TRE1Db2RlKCdTS0lfQVJFQScpfTwvdGQ+XG4gICAgICAgICAgPHRkPlNraTwvdGQ+XG4gICAgICAgICAgPHRkPlNLSV9BUkVBPC90ZD5cbiAgICAgICAgPC90cj5cbiAgICAgICAgPHRyPlxuICAgICAgICAgIDx0ZD4ke3N2Z0ltYWdlQnlPU0RNQ29kZSgnU1RBSVJfQVJFQScpfTwvdGQ+XG4gICAgICAgICAgPHRkPlN0YWlyPC90ZD5cbiAgICAgICAgICA8dGQ+U1RBSVJfQVJFQTwvdGQ+XG4gICAgICAgIDwvdHI+XG4gICAgICAgIDx0cj5cbiAgICAgICAgICA8dGQ+JHtzdmdJbWFnZUJ5T1NETUNvZGUoJ1RPSUxFVF9BUkVBJyl9PC90ZD5cbiAgICAgICAgICA8dGQ+VG9pbGV0PC90ZD5cbiAgICAgICAgICA8dGQ+VE9JTEVUX0FSRUE8L3RkPlxuICAgICAgICA8L3RyPlxuICAgICAgICA8dHI+XG4gICAgICAgICAgPHRkPiR7c3ZnSW1hZ2VCeU9TRE1Db2RlKCdUT0lMRVRfV0hFRUxDSEFJUl9BUkVBJyl9PC90ZD5cbiAgICAgICAgICA8dGQ+VG9pbGV0LUhhbmRpY2FwPC90ZD5cbiAgICAgICAgICA8dGQ+VE9JTEVUX1dIRUVMQ0hBSVJfQVJFQTwvdGQ+XG4gICAgICAgIDwvdHI+XG4gICAgICAgIDx0cj5cbiAgICAgICAgICA8dGQ+JHtzdmdJbWFnZUJ5T1NETUNvZGUoJ1dBUkRST0JFX0FSRUEnKX08L3RkPlxuICAgICAgICAgIDx0ZD5XYXJkcm9iZTwvdGQ+XG4gICAgICAgICAgPHRkPldBUkRST0JFX0FSRUE8L3RkPlxuICAgICAgICA8L3RyPlxuICAgICAgPC90Ym9keT5cbiAgICA8L3RhYmxlPlxuICA8L3NiYi10YWJsZS13cmFwcGVyPlxuYDtcbmNvbnN0IHNlcnZpY2VJY29uVGFibGUgPSBodG1sYFxuICA8c2JiLXRhYmxlLXdyYXBwZXI+XG4gICAgPHRhYmxlIGFyaWEtbGFiZWw9XCJBdmFpbGFibGUgU2VydmljZSBJY29uc1wiIGNsYXNzPVwic2JiLXRhYmxlXCI+XG4gICAgICA8dGhlYWQ+XG4gICAgICAgIDx0cj5cbiAgICAgICAgICA8dGggc2NvcGU9XCJjb2xcIj5TVkc8L3RoPlxuICAgICAgICAgIDx0aCBzY29wZT1cImNvbFwiPkZpZ21hPC90aD5cbiAgICAgICAgICA8dGggc2NvcGU9XCJjb2xcIj5PU0RNIENvZGU8L3RoPlxuICAgICAgICA8L3RyPlxuICAgICAgPC90aGVhZD5cbiAgICAgIDx0Ym9keT5cbiAgICAgICAgPHRyPlxuICAgICAgICAgIDx0ZD4ke3N2Z0ltYWdlQnlPU0RNQ29kZSgnQklTVFJPJyl9PC90ZD5cbiAgICAgICAgICA8dGQ+QmlzdHJvPC90ZD5cbiAgICAgICAgICA8dGQ+QklTVFJPPC90ZD5cbiAgICAgICAgPC90cj5cbiAgICAgICAgPHRyPlxuICAgICAgICAgIDx0ZD4ke3N2Z0ltYWdlQnlPU0RNQ29kZSgnQlVTSU5FU1MnKX08L3RkPlxuICAgICAgICAgIDx0ZD5CdXNpbmVzczwvdGQ+XG4gICAgICAgICAgPHRkPkJVU0lORVNTPC90ZD5cbiAgICAgICAgPC90cj5cbiAgICAgICAgPHRyPlxuICAgICAgICAgIDx0ZD4ke3N2Z0ltYWdlQnlPU0RNQ29kZSgnUExBWUdST1VORF9JQ09OJyl9PC90ZD5cbiAgICAgICAgICA8dGQ+RmFtaWx5PC90ZD5cbiAgICAgICAgICA8dGQ+UExBWUdST1VORF9JQ09OPC90ZD5cbiAgICAgICAgPC90cj5cbiAgICAgICAgPHRyPlxuICAgICAgICAgIDx0ZD4ke3N2Z0ltYWdlQnlPU0RNQ29kZSgnTFVHR0FHRV9BUkVBJyl9PC90ZD5cbiAgICAgICAgICA8dGQ+THVnZ2FnZTwvdGQ+XG4gICAgICAgICAgPHRkPkxVR0dBR0VfQVJFQTwvdGQ+XG4gICAgICAgIDwvdHI+XG4gICAgICAgIDx0cj5cbiAgICAgICAgICA8dGQ+JHtzdmdJbWFnZUJ5T1NETUNvZGUoJ01VTFRJX0ZVTkNUSU9OX0FSRUEnKX08L3RkPlxuICAgICAgICAgIDx0ZD5NdWx0aWZ1bmN0aW9uPC90ZD5cbiAgICAgICAgICA8dGQ+TVVMVElfRlVOQ1RJT05fQVJFQTwvdGQ+XG4gICAgICAgIDwvdHI+XG4gICAgICAgIDx0cj5cbiAgICAgICAgICA8dGQ+JHtzdmdJbWFnZUJ5T1NETUNvZGUoJ1BSQU1fSUNPTicpfTwvdGQ+XG4gICAgICAgICAgPHRkPlByYW08L3RkPlxuICAgICAgICAgIDx0ZD5QUkFNX0lDT048L3RkPlxuICAgICAgICA8L3RyPlxuICAgICAgICA8dHI+XG4gICAgICAgICAgPHRkPiR7c3ZnSW1hZ2VCeU9TRE1Db2RlKCdFQVNZX0FDQ0VTU19BUkVBJyl9PC90ZD5cbiAgICAgICAgICA8dGQ+RWFzeSBBY2Nlc3MgQXJlYTwvdGQ+XG4gICAgICAgICAgPHRkPkVBU1lfQUNDRVNTX0FSRUE8L3RkPlxuICAgICAgICA8L3RyPlxuICAgICAgICA8dHI+XG4gICAgICAgICAgPHRkPiR7c3ZnSW1hZ2VCeU9TRE1Db2RlKCdSRVNUQVVSQU5UX0lDT04nKX08L3RkPlxuICAgICAgICAgIDx0ZD5SZXN0YXVyYW50PC90ZD5cbiAgICAgICAgICA8dGQ+UkVTVEFVUkFOVF9JQ09OPC90ZD5cbiAgICAgICAgPC90cj5cbiAgICAgICAgPHRyPlxuICAgICAgICAgIDx0ZD4ke3N2Z0ltYWdlQnlPU0RNQ29kZSgnU0lMRU5DRV9BUkVBX0lDT04nKX08L3RkPlxuICAgICAgICAgIDx0ZD5TaWxlbmNlPC90ZD5cbiAgICAgICAgICA8dGQ+U0lMRU5DRV9BUkVBX0lDT048L3RkPlxuICAgICAgICA8L3RyPlxuICAgICAgICA8dHI+XG4gICAgICAgICAgPHRkPiR7c3ZnSW1hZ2VCeU9TRE1Db2RlKCdUT0lMRVRfQVJFQScpfTwvdGQ+XG4gICAgICAgICAgPHRkPlRvaWxldDwvdGQ+XG4gICAgICAgICAgPHRkPlRPSUxFVF9BUkVBPC90ZD5cbiAgICAgICAgPC90cj5cbiAgICAgICAgPHRyPlxuICAgICAgICAgIDx0ZD4ke3N2Z0ltYWdlQnlPU0RNQ29kZSgnVE9JTEVUX1dIRUVMQ0hBSVJfQVJFQScpfTwvdGQ+XG4gICAgICAgICAgPHRkPlRvaWxldC1QUk08L3RkPlxuICAgICAgICAgIDx0ZD5UT0lMRVRfV0hFRUxDSEFJUl9BUkVBPC90ZD5cbiAgICAgICAgPC90cj5cbiAgICAgICAgPHRyPlxuICAgICAgICAgIDx0ZD4ke3N2Z0ltYWdlQnlPU0RNQ29kZSgnV0hFRUxDSEFJUl9JQ09OJyl9PC90ZD5cbiAgICAgICAgICA8dGQ+V2hlZWxjaGFpcjwvdGQ+XG4gICAgICAgICAgPHRkPldIRUVMQ0hBSVJfSUNPTjwvdGQ+XG4gICAgICAgIDwvdHI+XG4gICAgICAgIDx0cj5cbiAgICAgICAgICA8dGQ+JHtzdmdJbWFnZUJ5T1NETUNvZGUoJ1dJRkknKX08L3RkPlxuICAgICAgICAgIDx0ZD5XaWZpPC90ZD5cbiAgICAgICAgICA8dGQ+V0lGSTwvdGQ+XG4gICAgICAgIDwvdHI+XG4gICAgICA8L3Rib2R5PlxuICAgIDwvdGFibGU+XG4gIDwvc2JiLXRhYmxlLXdyYXBwZXI+XG5gO1xuY29uc3QgY2hhc3Npc1RhYmxlID0gaHRtbGBcbiAgPHNiYi10YWJsZS13cmFwcGVyPlxuICAgIDx0YWJsZSBjbGFzcz1cInNiYi10YWJsZVwiPlxuICAgICAgPHRoZWFkPlxuICAgICAgICA8dHI+XG4gICAgICAgICAgPHRoIHNjb3BlPVwiY29sXCI+U1ZHPC90aD5cbiAgICAgICAgICA8dGggc2NvcGU9XCJjb2xcIj5GaWdtYTwvdGg+XG4gICAgICAgICAgPHRoIHNjb3BlPVwiY29sXCI+T1NETSBDb2RlPC90aD5cbiAgICAgICAgPC90cj5cbiAgICAgIDwvdGhlYWQ+XG4gICAgICA8dGJvZHk+XG4gICAgICAgIDx0cj5cbiAgICAgICAgICA8dGQ+JHtzdmdJbWFnZUJ5T1NETUNvZGUoJ0RSSVZFUl9BUkVBJyl9PC90ZD5cbiAgICAgICAgICA8dGQ+RHJpdmVyOiBUcmFpbjwvdGQ+XG4gICAgICAgICAgPHRkPkRSSVZFUl9BUkVBPC90ZD5cbiAgICAgICAgPC90cj5cbiAgICAgICAgPHRyPlxuICAgICAgICAgIDx0ZD4ke3N2Z0ltYWdlQnlPU0RNQ29kZSgnRFJJVkVSX0FSRUFfRlVMTF9UUkFJTicpfTwvdGQ+XG4gICAgICAgICAgPHRkPkRyaXZlcjogVHJhaW48L3RkPlxuICAgICAgICAgIDx0ZD5EUklWRVJfQVJFQV9GVUxMX1RSQUlOPC90ZD5cbiAgICAgICAgPC90cj5cbiAgICAgICAgPHRyPlxuICAgICAgICAgIDx0ZD4ke3N2Z0ltYWdlQnlPU0RNQ29kZSgnRFJJVkVSX0FSRUFfRlVMTF9CVVMnKX08L3RkPlxuICAgICAgICAgIDx0ZD5Ecml2ZXI6IEJ1czwvdGQ+XG4gICAgICAgICAgPHRkPkRSSVZFUl9BUkVBX0ZVTExfQlVTPC90ZD5cbiAgICAgICAgPC90cj5cbiAgICAgICAgPHRyPlxuICAgICAgICAgIDx0ZD4ke3N2Z0ltYWdlQnlPU0RNQ29kZSgnQ09NUEFSVE1FTlRfUEFTU0FHRV9ISUdIJyl9PC90ZD5cbiAgICAgICAgICA8dGQ+UGFzc2FnZS1Db21wYXJ0bWVudDogVG9wPC90ZD5cbiAgICAgICAgICA8dGQ+Q09NUEFSVE1FTlRfUEFTU0FHRTxiciAvPkNPTVBBUlRNRU5UX1BBU1NBR0VfSElHSDwvdGQ+XG4gICAgICAgIDwvdHI+XG4gICAgICAgIDx0cj5cbiAgICAgICAgICA8dGQ+JHtzdmdJbWFnZUJ5T1NETUNvZGUoJ0NPTVBBUlRNRU5UX1BBU1NBR0UnKX08L3RkPlxuICAgICAgICAgIDx0ZD5QYXNzYWdlLUNvbXBhcnRtZW50OiBNaWRkbGU8L3RkPlxuICAgICAgICAgIDx0ZD5DT01QQVJUTUVOVF9QQVNTQUdFPGJyIC8+Q09NUEFSVE1FTlRfUEFTU0FHRV9NSURETEU8L3RkPlxuICAgICAgICA8L3RyPlxuICAgICAgICA8dHI+XG4gICAgICAgICAgPHRkPiR7c3ZnSW1hZ2VCeU9TRE1Db2RlKCdDT01QQVJUTUVOVF9QQVNTQUdFX0xPVycpfTwvdGQ+XG4gICAgICAgICAgPHRkPlBhc3NhZ2UtQ29tcGFydG1lbnQ6IEJvdHRvbTwvdGQ+XG4gICAgICAgICAgPHRkPkNPTVBBUlRNRU5UX1BBU1NBR0U8YnIgLz5DT01QQVJUTUVOVF9QQVNTQUdFX0xPVzwvdGQ+XG4gICAgICAgIDwvdHI+XG4gICAgICAgIDx0cj5cbiAgICAgICAgICA8dGQ+JHtzdmdJbWFnZUJ5T1NETUNvZGUoJ0NPQUNIX1BBU1NBR0UnKX08L3RkPlxuICAgICAgICAgIDx0ZD5QYXNzYWdlLVdhZ2dvbiBUeXBlOiBMZWZ0PC90ZD5cbiAgICAgICAgICA8dGQ+Q09BQ0hfUEFTU0FHRTwvdGQ+XG4gICAgICAgIDwvdHI+XG4gICAgICAgIDx0cj5cbiAgICAgICAgICA8dGQ+JHtzdmdJbWFnZShzdmdzLmNoYXNzaXNQYXNzYWdlV2FnZ29uQm90dG9tUmlnaHQpfTwvdGQ+XG4gICAgICAgICAgPHRkPlBhc3NhZ2UtV2FnZ29uIFR5cGU6IFJpZ2h0PC90ZD5cbiAgICAgICAgICA8dGRcbiAgICAgICAgICAgIHN0eWxlPVwiYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDkwZGVnLCB2YXIoLS1zYmItY29sb3Itd2hpdGUpIDUlLCB2YXIoLS1zYmItY29sb3ItcmVkKSk7XCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICBUT0RPOiBjaGVjayBpZiBzdGlsbCBpbiB1c2UsIG1heSBiZSBkZWxldGVkXG4gICAgICAgICAgPC90ZD5cbiAgICAgICAgPC90cj5cbiAgICAgICAgPHRyPlxuICAgICAgICAgIDx0ZD4ke3N2Z0ltYWdlQnlPU0RNQ29kZSgnQ09BQ0hfV0FMTF9OT19QQVNTQUdFJyl9PC90ZD5cbiAgICAgICAgICA8dGQ+Um93LUVtcHR5OiBUb3AvTGVmdDwvdGQ+XG4gICAgICAgICAgPHRkPkNPQUNIX1dBTExfTk9fUEFTU0FHRTwvdGQ+XG4gICAgICAgIDwvdHI+XG4gICAgICAgIDx0cj5cbiAgICAgICAgICA8dGQ+JHtzdmdJbWFnZUJ5T1NETUNvZGUoJ0NPQUNIX0JPUkRFUl9NSURETEUnKX08L3RkPlxuICAgICAgICAgIDx0ZD5Sb3ctRW1wdHk6IE1pZGRsZTwvdGQ+XG4gICAgICAgICAgPHRkPkNPQUNIX0JPUkRFUl9NSURETEU8L3RkPlxuICAgICAgICA8L3RyPlxuICAgICAgICA8dHI+XG4gICAgICAgICAgPHRkPiR7c3ZnSW1hZ2Uoc3Zncy5jaGFzc2lzU2VwYXJhdG9yKX08L3RkPlxuICAgICAgICAgIDx0ZD5TZXBhcmF0b3I8L3RkPlxuICAgICAgICAgIDx0ZFxuICAgICAgICAgICAgc3R5bGU9XCJiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoOTBkZWcsIHZhcigtLXNiYi1jb2xvci13aGl0ZSkgNSUsIHZhcigtLXNiYi1jb2xvci1yZWQpKVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgVE9ETzogY2hlY2sgaWYgc3RpbGwgaW4gdXNlLCBtYXkgYmUgZGVsZXRlZFxuICAgICAgICAgIDwvdGQ+XG4gICAgICAgIDwvdHI+XG4gICAgICA8L3Rib2R5PlxuICAgIDwvdGFibGU+XG4gIDwvc2JiLXRhYmxlLXdyYXBwZXI+XG5gO1xuXG5leHBvcnQgY29uc3QgYXNzZXRzVGVtcGxhdGU6IFRlbXBsYXRlUmVzdWx0ID0gaHRtbGBcbiAgPHN0eWxlPlxuICAgIC5zdG9yeS1hc3NldCB7XG4gICAgICB3aWR0aDogbWF4LWNvbnRlbnQ7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1zYmItY29sb3Itd2hpdGUpO1xuICAgIH1cbiAgPC9zdHlsZT5cbiAgPGgxPkxpc3Qgb2YgYWxsIGN1cnJlbnRseSBhdmFpbGFibGUgYXNzZXRzLjwvaDE+XG4gIDxoMj5JbnRlcmlvcjwvaDI+XG4gICR7aW50ZXJpb3JUYWJsZX1cbiAgPGgyPkxheW91dDwvaDI+XG4gICR7bGF5b3V0SXRlbXNUYWJsZX1cbiAgPGgyPlNlcnZpY2UgSWNvbnM8L2gyPlxuICAke3NlcnZpY2VJY29uVGFibGV9XG4gIDxoMj5DaGFzc2lzPC9oMj5cbiAgJHtjaGFzc2lzVGFibGV9XG5gO1xuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBUUEsTUFBTSxXQUFXLENBQUMsUUFBK0I7QUFDL0MsU0FBTztBQUFBO0FBQUEsMkNBRWtDLFdBQVcsR0FBRyxDQUFDO0FBQUE7QUFBQTtBQUcxRDtBQU9PLE1BQU0scUJBQXFCLENBQUMsYUFBMkM7QUFDNUUsU0FBTyxhQUFhLFFBQVEsR0FBRyxNQUMzQixTQUFTLGFBQWEsUUFBUSxFQUFFLEdBQUcsSUFDbkMsYUFBYSxRQUFRLEdBQUcsVUFDdEIsdUJBQXVCLGFBQWEsUUFBUSxFQUFFLE9BQU8sa0JBQ3JEO0FBQ1I7QUFFQSxNQUFNLGdCQUFnQjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxnQkFZTixtQkFBbUIsb0JBQW9CLENBQUM7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLGdCQUt4QyxtQkFBbUIsd0JBQXdCLENBQUM7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
|
|
320
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VhdC1yZXNlcnZhdGlvbi1hc3NldHMuanMiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9lbGVtZW50cy1leHBlcmltZW50YWwvc2VhdC1yZXNlcnZhdGlvbi9zZWF0LXJlc2VydmF0aW9uLWdyYXBoaWMvc2VhdC1yZXNlcnZhdGlvbi1hc3NldHMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaHRtbCwgdHlwZSBUZW1wbGF0ZVJlc3VsdCB9IGZyb20gJ2xpdCc7XG5pbXBvcnQgeyB1bnNhZmVIVE1MIH0gZnJvbSAnbGl0L2RpcmVjdGl2ZXMvdW5zYWZlLWh0bWwuanMnO1xuXG5pbXBvcnQgeyBzdmdzLCBtYXBJY29uVG9TdmcgfSBmcm9tICcuLi9jb21tb24uanMnO1xuXG5pbXBvcnQgJ0BzYmItZXN0YS9seW5lLWVsZW1lbnRzL3RhYmxlLmpzJztcbmltcG9ydCAnLi4vc2VhdC1yZXNlcnZhdGlvbi1ncmFwaGljLmpzJztcblxuY29uc3Qgc3ZnSW1hZ2UgPSAoc3JjOiBzdHJpbmcpOiBUZW1wbGF0ZVJlc3VsdCA9PiB7XG4gIHJldHVybiBodG1sYFxuICAgIDxkaXYgY2xhc3M9XCJzdG9yeS1hc3NldFwiPlxuICAgICAgPHNwYW4gY2xhc3M9XCJzdG9yeS1hc3NldF9fcHJldmlld1wiPiR7dW5zYWZlSFRNTChzcmMpfTwvc3Bhbj5cbiAgICA8L2Rpdj5cbiAgYDtcbn07XG5cbi8qKlxuICogc3ZnSW1hZ2VCeU9TRE1Db2RlIEZ1bmN0aW9uIHJldHVybnMgdGhlIGNvcnJlc3BvbmRpbmcgc3ZnIGltYWdlIGJ5IE9TRE0gQ29kZVxuICogQHBhcmFtIG9zZG1Db2RlXG4gKiBAcmV0dXJucyBUaGUgU1ZHIEltYWdlIGFzIFRlbXBsYXRlUmVzdWx0IGlmIGl0IG1hdGNoZXMgdGhlIE9TRE0gY29kZSwgb3IgbnVsbCBpZiBpdCdzIG5vdCBmb3VuZC5cbiAqL1xuZXhwb3J0IGNvbnN0IHN2Z0ltYWdlQnlPU0RNQ29kZSA9IChvc2RtQ29kZTogc3RyaW5nKTogVGVtcGxhdGVSZXN1bHQgfCBudWxsID0+IHtcbiAgcmV0dXJuIG1hcEljb25Ub1N2Z1tvc2RtQ29kZV0/LnN2Z1xuICAgID8gc3ZnSW1hZ2UobWFwSWNvblRvU3ZnW29zZG1Db2RlXS5zdmcpXG4gICAgOiBtYXBJY29uVG9Tdmdbb3NkbUNvZGVdPy5zdmdOYW1lXG4gICAgICA/IGh0bWxgPHNiYi1pY29uIG5hbWU9XCIke21hcEljb25Ub1N2Z1tvc2RtQ29kZV0uc3ZnTmFtZX1cIj48L3NiYi1pY29uPmBcbiAgICAgIDogbnVsbDtcbn07XG5cbmNvbnN0IGludGVyaW9yVGFibGUgPSBodG1sYFxuICA8c2JiLXRhYmxlLXdyYXBwZXI+XG4gICAgPHRhYmxlIGNsYXNzPVwic2JiLXRhYmxlXCI+XG4gICAgICA8dGhlYWQ+XG4gICAgICAgIDx0cj5cbiAgICAgICAgICA8dGggc2NvcGU9XCJjb2xcIj5TVkc8L3RoPlxuICAgICAgICAgIDx0aCBzY29wZT1cImNvbFwiPkZpZ21hPC90aD5cbiAgICAgICAgICA8dGggc2NvcGU9XCJjb2xcIj5Db2RlPC90aD5cbiAgICAgICAgPC90cj5cbiAgICAgIDwvdGhlYWQ+XG4gICAgICA8dGJvZHk+XG4gICAgICAgIDx0cj5cbiAgICAgICAgICA8dGQ+JHtzdmdJbWFnZUJ5T1NETUNvZGUoJ1BMQUNFX0JJQ1lDTEVfRlJFRScpfTwvdGQ+XG4gICAgICAgICAgPHRkPlBsYWNlLUJpa2U6IEF2YWlsYWJsZTwvdGQ+XG4gICAgICAgICAgPHRkPlBMQUNFX0JJQ1lDTEVfRlJFRTwvdGQ+XG4gICAgICAgIDwvdHI+XG4gICAgICAgIDx0cj5cbiAgICAgICAgICA8dGQ+JHtzdmdJbWFnZUJ5T1NETUNvZGUoJ1BMQUNFX0JJQ1lDTEVfU0VMRUNURUQnKX08L3RkPlxuICAgICAgICAgIDx0ZD5QbGFjZS1CaWtlOiBTZWxlY3RlZDwvdGQ+XG4gICAgICAgICAgPHRkPlBMQUNFX0JJQ1lDTEVfU0VMRUNURUQ8L3RkPlxuICAgICAgICA8L3RyPlxuICAgICAgICA8dHI+XG4gICAgICAgICAgPHRkPiR7c3ZnSW1hZ2VCeU9TRE1Db2RlKCdQTEFDRV9CSUNZQ0xFX0FMTE9DQVRFRCcpfTwvdGQ+XG4gICAgICAgICAgPHRkPlBsYWNlLUJpa2U6IFVuYXZhaWxhYmxlPC90ZD5cbiAgICAgICAgICA8dGQ+UExBQ0VfQklDWUNMRV9BTExPQ0FURUQ8L3RkPlxuICAgICAgICA8L3RyPlxuICAgICAgICA8dHI+XG4gICAgICAgICAgPHRkPiR7c3ZnSW1hZ2VCeU9TRE1Db2RlKCdQTEFDRV9CSUNZQ0xFX1JFU1RSSUNURUQnKX08L3RkPlxuICAgICAgICAgIDx0ZD5QbGFjZS1CaWtlOiBOb3QgYm9va2FibGU8L3RkPlxuICAgICAgICAgIDx0ZD5QTEFDRV9CSUNZQ0xFX1JFU1RSSUNURUQ8L3RkPlxuICAgICAgICA8L3RyPlxuICAgICAgICA8dHI+XG4gICAgICAgICAgPHRkPiR7c3ZnSW1hZ2VCeU9TRE1Db2RlKCdQTEFDRV9TRUFUX0ZSRUUnKX08L3RkPlxuICAgICAgICAgIDx0ZD5QbGFjZS1TZWF0OiBBdmFpbGFibGU8L3RkPlxuICAgICAgICAgIDx0ZD5QTEFDRV9TRUFUX0ZSRUU8L3RkPlxuICAgICAgICA8L3RyPlxuICAgICAgICA8dHI+XG4gICAgICAgICAgPHRkPiR7c3ZnSW1hZ2VCeU9TRE1Db2RlKCdQTEFDRV9TRUFUX1NFTEVDVEVEJyl9PC90ZD5cbiAgICAgICAgICA8dGQ+UGxhY2UtU2VhdDogU2VsZWN0ZWQ8L3RkPlxuICAgICAgICAgIDx0ZD5QTEFDRV9TRUFUX1NFTEVDVEVEPC90ZD5cbiAgICAgICAgPC90cj5cbiAgICAgICAgPHRyPlxuICAgICAgICAgIDx0ZD4ke3N2Z0ltYWdlQnlPU0RNQ29kZSgnUExBQ0VfU0VBVF9BTExPQ0FURUQnKX08L3RkPlxuICAgICAgICAgIDx0ZD5QbGFjZS1TZWF0OiBVbmF2YWlsYWJsZTwvdGQ+XG4gICAgICAgICAgPHRkPlBMQUNFX1NFQVRfQUxMT0NBVEVEPC90ZD5cbiAgICAgICAgPC90cj5cbiAgICAgICAgPHRyPlxuICAgICAgICAgIDx0ZD4ke3N2Z0ltYWdlQnlPU0RNQ29kZSgnUExBQ0VfU0VBVF9SRVNUUklDVEVEJyl9PC90ZD5cbiAgICAgICAgICA8dGQ+UGxhY2UtU2VhdDogTm90IGJvb2thYmxlPC90ZD5cbiAgICAgICAgICA8dGQ+UExBQ0VfU0VBVF9SRVNUUklDVEVEPC90ZD5cbiAgICAgICAgPC90cj5cbiAgICAgIDwvdGJvZHk+XG4gICAgPC90YWJsZT5cbiAgPC9zYmItdGFibGUtd3JhcHBlcj5cbmA7XG5jb25zdCBsYXlvdXRJdGVtc1RhYmxlID0gaHRtbGBcbiAgPHNiYi10YWJsZS13cmFwcGVyPlxuICAgIDx0YWJsZSBjbGFzcz1cInNiYi10YWJsZVwiPlxuICAgICAgPHRoZWFkPlxuICAgICAgICA8dHI+XG4gICAgICAgICAgPHRoIHNjb3BlPVwiY29sXCI+U1ZHPC90aD5cbiAgICAgICAgICA8dGggc2NvcGU9XCJjb2xcIj5GaWdtYTwvdGg+XG4gICAgICAgICAgPHRoIHNjb3BlPVwiY29sXCI+T1NETSBDb2RlPC90aD5cbiAgICAgICAgPC90cj5cbiAgICAgIDwvdGhlYWQ+XG4gICAgICA8dGJvZHk+XG4gICAgICAgIDx0cj5cbiAgICAgICAgICA8dGQ+JHtzdmdJbWFnZUJ5T1NETUNvZGUoJ0VBU1lfQUNDRVNTX0FSRUEnKX08L3RkPlxuICAgICAgICAgIDx0ZD5FYXN5IEFjY2VzcyBBcmVhPC90ZD5cbiAgICAgICAgICA8dGQ+RUFTWV9BQ0NFU1NfQVJFQTwvdGQ+XG4gICAgICAgIDwvdHI+XG4gICAgICAgIDx0cj5cbiAgICAgICAgICA8dGQ+JHtzdmdJbWFnZUJ5T1NETUNvZGUoJ0VOVFJZX0VYSVQnKX08L3RkPlxuICAgICAgICAgIDx0ZD5FbnRyYW5jZTwvdGQ+XG4gICAgICAgICAgPHRkPkVOVFJZX0VYSVQ8L3RkPlxuICAgICAgICA8L3RyPlxuICAgICAgICA8dHI+XG4gICAgICAgICAgPHRkPiR7c3ZnSW1hZ2VCeU9TRE1Db2RlKCdMVUdHQUdFX0FSRUEnKX08L3RkPlxuICAgICAgICAgIDx0ZD5MdWdnYWdlPC90ZD5cbiAgICAgICAgICA8dGQ+TFVHR0FHRV9BUkVBPC90ZD5cbiAgICAgICAgPC90cj5cbiAgICAgICAgPHRyPlxuICAgICAgICAgIDx0ZD4ke3N2Z0ltYWdlQnlPU0RNQ29kZSgnTVVMVElfRlVOQ1RJT05fQVJFQScpfTwvdGQ+XG4gICAgICAgICAgPHRkPk11bHRpIEZ1bmN0aW9uIEFyZWE8L3RkPlxuICAgICAgICAgIDx0ZD5NVUxUSV9GVU5DVElPTl9BUkVBPC90ZD5cbiAgICAgICAgPC90cj5cbiAgICAgICAgPHRyPlxuICAgICAgICAgIDx0ZD4ke3N2Z0ltYWdlQnlPU0RNQ29kZSgnUExBWUdST1VORF9BUkVBJyl9PC90ZD5cbiAgICAgICAgICA8dGQ+UGxheWdyb3VuZDwvdGQ+XG4gICAgICAgICAgPHRkPlBMQVlHUk9VTkRfQVJFQTwvdGQ+XG4gICAgICAgIDwvdHI+XG4gICAgICAgIDx0cj5cbiAgICAgICAgICA8dGQ+JHtzdmdJbWFnZUJ5T1NETUNvZGUoJ1BSQU1fQVJFQScpfTwvdGQ+XG4gICAgICAgICAgPHRkPlByYW08L3RkPlxuICAgICAgICAgIDx0ZD5QUkFNX0FSRUE8L3RkPlxuICAgICAgICA8L3RyPlxuICAgICAgICA8dHI+XG4gICAgICAgICAgPHRkPiR7c3ZnSW1hZ2VCeU9TRE1Db2RlKCdTS0lfQVJFQScpfTwvdGQ+XG4gICAgICAgICAgPHRkPlNraTwvdGQ+XG4gICAgICAgICAgPHRkPlNLSV9BUkVBPC90ZD5cbiAgICAgICAgPC90cj5cbiAgICAgICAgPHRyPlxuICAgICAgICAgIDx0ZD4ke3N2Z0ltYWdlQnlPU0RNQ29kZSgnU1RBSVJfQVJFQScpfTwvdGQ+XG4gICAgICAgICAgPHRkPlN0YWlyPC90ZD5cbiAgICAgICAgICA8dGQ+U1RBSVJfQVJFQTwvdGQ+XG4gICAgICAgIDwvdHI+XG4gICAgICAgIDx0cj5cbiAgICAgICAgICA8dGQ+JHtzdmdJbWFnZUJ5T1NETUNvZGUoJ1RPSUxFVF9BUkVBJyl9PC90ZD5cbiAgICAgICAgICA8dGQ+VG9pbGV0PC90ZD5cbiAgICAgICAgICA8dGQ+VE9JTEVUX0FSRUE8L3RkPlxuICAgICAgICA8L3RyPlxuICAgICAgICA8dHI+XG4gICAgICAgICAgPHRkPiR7c3ZnSW1hZ2VCeU9TRE1Db2RlKCdUT0lMRVRfV0hFRUxDSEFJUl9BUkVBJyl9PC90ZD5cbiAgICAgICAgICA8dGQ+VG9pbGV0LUhhbmRpY2FwPC90ZD5cbiAgICAgICAgICA8dGQ+VE9JTEVUX1dIRUVMQ0hBSVJfQVJFQTwvdGQ+XG4gICAgICAgIDwvdHI+XG4gICAgICAgIDx0cj5cbiAgICAgICAgICA8dGQ+JHtzdmdJbWFnZUJ5T1NETUNvZGUoJ1dBUkRST0JFX0FSRUEnKX08L3RkPlxuICAgICAgICAgIDx0ZD5XYXJkcm9iZTwvdGQ+XG4gICAgICAgICAgPHRkPldBUkRST0JFX0FSRUE8L3RkPlxuICAgICAgICA8L3RyPlxuICAgICAgPC90Ym9keT5cbiAgICA8L3RhYmxlPlxuICA8L3NiYi10YWJsZS13cmFwcGVyPlxuYDtcbmNvbnN0IHNlcnZpY2VJY29uVGFibGUgPSBodG1sYFxuICA8c2JiLXRhYmxlLXdyYXBwZXI+XG4gICAgPHRhYmxlIGFyaWEtbGFiZWw9XCJBdmFpbGFibGUgU2VydmljZSBJY29uc1wiIGNsYXNzPVwic2JiLXRhYmxlXCI+XG4gICAgICA8dGhlYWQ+XG4gICAgICAgIDx0cj5cbiAgICAgICAgICA8dGggc2NvcGU9XCJjb2xcIj5TVkc8L3RoPlxuICAgICAgICAgIDx0aCBzY29wZT1cImNvbFwiPkZpZ21hPC90aD5cbiAgICAgICAgICA8dGggc2NvcGU9XCJjb2xcIj5PU0RNIENvZGU8L3RoPlxuICAgICAgICA8L3RyPlxuICAgICAgPC90aGVhZD5cbiAgICAgIDx0Ym9keT5cbiAgICAgICAgPHRyPlxuICAgICAgICAgIDx0ZD4ke3N2Z0ltYWdlQnlPU0RNQ29kZSgnQklTVFJPJyl9PC90ZD5cbiAgICAgICAgICA8dGQ+QmlzdHJvPC90ZD5cbiAgICAgICAgICA8dGQ+QklTVFJPPC90ZD5cbiAgICAgICAgPC90cj5cbiAgICAgICAgPHRyPlxuICAgICAgICAgIDx0ZD4ke3N2Z0ltYWdlQnlPU0RNQ29kZSgnQlVTSU5FU1MnKX08L3RkPlxuICAgICAgICAgIDx0ZD5CdXNpbmVzczwvdGQ+XG4gICAgICAgICAgPHRkPkJVU0lORVNTPC90ZD5cbiAgICAgICAgPC90cj5cbiAgICAgICAgPHRyPlxuICAgICAgICAgIDx0ZD4ke3N2Z0ltYWdlQnlPU0RNQ29kZSgnUExBWUdST1VORF9JQ09OJyl9PC90ZD5cbiAgICAgICAgICA8dGQ+RmFtaWx5PC90ZD5cbiAgICAgICAgICA8dGQ+UExBWUdST1VORF9JQ09OPC90ZD5cbiAgICAgICAgPC90cj5cbiAgICAgICAgPHRyPlxuICAgICAgICAgIDx0ZD4ke3N2Z0ltYWdlQnlPU0RNQ29kZSgnTFVHR0FHRV9BUkVBJyl9PC90ZD5cbiAgICAgICAgICA8dGQ+THVnZ2FnZTwvdGQ+XG4gICAgICAgICAgPHRkPkxVR0dBR0VfQVJFQTwvdGQ+XG4gICAgICAgIDwvdHI+XG4gICAgICAgIDx0cj5cbiAgICAgICAgICA8dGQ+JHtzdmdJbWFnZUJ5T1NETUNvZGUoJ01VTFRJX0ZVTkNUSU9OX0FSRUEnKX08L3RkPlxuICAgICAgICAgIDx0ZD5NdWx0aWZ1bmN0aW9uPC90ZD5cbiAgICAgICAgICA8dGQ+TVVMVElfRlVOQ1RJT05fQVJFQTwvdGQ+XG4gICAgICAgIDwvdHI+XG4gICAgICAgIDx0cj5cbiAgICAgICAgICA8dGQ+JHtzdmdJbWFnZUJ5T1NETUNvZGUoJ1BSQU1fSUNPTicpfTwvdGQ+XG4gICAgICAgICAgPHRkPlByYW08L3RkPlxuICAgICAgICAgIDx0ZD5QUkFNX0lDT048L3RkPlxuICAgICAgICA8L3RyPlxuICAgICAgICA8dHI+XG4gICAgICAgICAgPHRkPiR7c3ZnSW1hZ2VCeU9TRE1Db2RlKCdFQVNZX0FDQ0VTU19BUkVBJyl9PC90ZD5cbiAgICAgICAgICA8dGQ+RWFzeSBBY2Nlc3MgQXJlYTwvdGQ+XG4gICAgICAgICAgPHRkPkVBU1lfQUNDRVNTX0FSRUE8L3RkPlxuICAgICAgICA8L3RyPlxuICAgICAgICA8dHI+XG4gICAgICAgICAgPHRkPiR7c3ZnSW1hZ2VCeU9TRE1Db2RlKCdSRVNUQVVSQU5UX0lDT04nKX08L3RkPlxuICAgICAgICAgIDx0ZD5SZXN0YXVyYW50PC90ZD5cbiAgICAgICAgICA8dGQ+UkVTVEFVUkFOVF9JQ09OPC90ZD5cbiAgICAgICAgPC90cj5cbiAgICAgICAgPHRyPlxuICAgICAgICAgIDx0ZD4ke3N2Z0ltYWdlQnlPU0RNQ29kZSgnU0lMRU5DRV9BUkVBX0lDT04nKX08L3RkPlxuICAgICAgICAgIDx0ZD5TaWxlbmNlPC90ZD5cbiAgICAgICAgICA8dGQ+U0lMRU5DRV9BUkVBX0lDT048L3RkPlxuICAgICAgICA8L3RyPlxuICAgICAgICA8dHI+XG4gICAgICAgICAgPHRkPiR7c3ZnSW1hZ2VCeU9TRE1Db2RlKCdUT0lMRVRfQVJFQScpfTwvdGQ+XG4gICAgICAgICAgPHRkPlRvaWxldDwvdGQ+XG4gICAgICAgICAgPHRkPlRPSUxFVF9BUkVBPC90ZD5cbiAgICAgICAgPC90cj5cbiAgICAgICAgPHRyPlxuICAgICAgICAgIDx0ZD4ke3N2Z0ltYWdlQnlPU0RNQ29kZSgnVE9JTEVUX1dIRUVMQ0hBSVJfQVJFQScpfTwvdGQ+XG4gICAgICAgICAgPHRkPlRvaWxldC1QUk08L3RkPlxuICAgICAgICAgIDx0ZD5UT0lMRVRfV0hFRUxDSEFJUl9BUkVBPC90ZD5cbiAgICAgICAgPC90cj5cbiAgICAgICAgPHRyPlxuICAgICAgICAgIDx0ZD4ke3N2Z0ltYWdlQnlPU0RNQ29kZSgnV0hFRUxDSEFJUl9JQ09OJyl9PC90ZD5cbiAgICAgICAgICA8dGQ+V2hlZWxjaGFpcjwvdGQ+XG4gICAgICAgICAgPHRkPldIRUVMQ0hBSVJfSUNPTjwvdGQ+XG4gICAgICAgIDwvdHI+XG4gICAgICAgIDx0cj5cbiAgICAgICAgICA8dGQ+JHtzdmdJbWFnZUJ5T1NETUNvZGUoJ1dJRkknKX08L3RkPlxuICAgICAgICAgIDx0ZD5XaWZpPC90ZD5cbiAgICAgICAgICA8dGQ+V0lGSTwvdGQ+XG4gICAgICAgIDwvdHI+XG4gICAgICA8L3Rib2R5PlxuICAgIDwvdGFibGU+XG4gIDwvc2JiLXRhYmxlLXdyYXBwZXI+XG5gO1xuY29uc3QgY2hhc3Npc1RhYmxlID0gaHRtbGBcbiAgPHNiYi10YWJsZS13cmFwcGVyPlxuICAgIDx0YWJsZSBjbGFzcz1cInNiYi10YWJsZVwiPlxuICAgICAgPHRoZWFkPlxuICAgICAgICA8dHI+XG4gICAgICAgICAgPHRoIHNjb3BlPVwiY29sXCI+U1ZHPC90aD5cbiAgICAgICAgICA8dGggc2NvcGU9XCJjb2xcIj5GaWdtYTwvdGg+XG4gICAgICAgICAgPHRoIHNjb3BlPVwiY29sXCI+T1NETSBDb2RlPC90aD5cbiAgICAgICAgPC90cj5cbiAgICAgIDwvdGhlYWQ+XG4gICAgICA8dGJvZHk+XG4gICAgICAgIDx0cj5cbiAgICAgICAgICA8dGQ+JHtzdmdJbWFnZUJ5T1NETUNvZGUoJ0RSSVZFUl9BUkVBJyl9PC90ZD5cbiAgICAgICAgICA8dGQ+RHJpdmVyOiBUcmFpbjwvdGQ+XG4gICAgICAgICAgPHRkPkRSSVZFUl9BUkVBPC90ZD5cbiAgICAgICAgPC90cj5cbiAgICAgICAgPHRyPlxuICAgICAgICAgIDx0ZD4ke3N2Z0ltYWdlQnlPU0RNQ29kZSgnRFJJVkVSX0FSRUFfVFJBSU4nKX08L3RkPlxuICAgICAgICAgIDx0ZD5Ecml2ZXI6IFRyYWluPC90ZD5cbiAgICAgICAgICA8dGQ+RFJJVkVSX0FSRUFfVFJBSU48L3RkPlxuICAgICAgICA8L3RyPlxuICAgICAgICA8dHI+XG4gICAgICAgICAgPHRkPiR7c3ZnSW1hZ2VCeU9TRE1Db2RlKCdEUklWRVJfQVJFQV9CVVMnKX08L3RkPlxuICAgICAgICAgIDx0ZD5Ecml2ZXI6IEJ1czwvdGQ+XG4gICAgICAgICAgPHRkPkRSSVZFUl9BUkVBX0JVUzwvdGQ+XG4gICAgICAgIDwvdHI+XG4gICAgICAgIDx0cj5cbiAgICAgICAgICA8dGQ+JHtzdmdJbWFnZUJ5T1NETUNvZGUoJ0NPTVBBUlRNRU5UX1BBU1NBR0VfSElHSCcpfTwvdGQ+XG4gICAgICAgICAgPHRkPlBhc3NhZ2UtQ29tcGFydG1lbnQ6IFRvcDwvdGQ+XG4gICAgICAgICAgPHRkPkNPTVBBUlRNRU5UX1BBU1NBR0U8YnIgLz5DT01QQVJUTUVOVF9QQVNTQUdFX0hJR0g8L3RkPlxuICAgICAgICA8L3RyPlxuICAgICAgICA8dHI+XG4gICAgICAgICAgPHRkPiR7c3ZnSW1hZ2VCeU9TRE1Db2RlKCdDT01QQVJUTUVOVF9QQVNTQUdFJyl9PC90ZD5cbiAgICAgICAgICA8dGQ+UGFzc2FnZS1Db21wYXJ0bWVudDogTWlkZGxlPC90ZD5cbiAgICAgICAgICA8dGQ+Q09NUEFSVE1FTlRfUEFTU0FHRTxiciAvPkNPTVBBUlRNRU5UX1BBU1NBR0VfTUlERExFPC90ZD5cbiAgICAgICAgPC90cj5cbiAgICAgICAgPHRyPlxuICAgICAgICAgIDx0ZD4ke3N2Z0ltYWdlQnlPU0RNQ29kZSgnQ09NUEFSVE1FTlRfUEFTU0FHRV9MT1cnKX08L3RkPlxuICAgICAgICAgIDx0ZD5QYXNzYWdlLUNvbXBhcnRtZW50OiBCb3R0b208L3RkPlxuICAgICAgICAgIDx0ZD5DT01QQVJUTUVOVF9QQVNTQUdFPGJyIC8+Q09NUEFSVE1FTlRfUEFTU0FHRV9MT1c8L3RkPlxuICAgICAgICA8L3RyPlxuICAgICAgICA8dHI+XG4gICAgICAgICAgPHRkPiR7c3ZnSW1hZ2VCeU9TRE1Db2RlKCdDT0FDSF9QQVNTQUdFJyl9PC90ZD5cbiAgICAgICAgICA8dGQ+UGFzc2FnZS1XYWdnb24gVHlwZTogTGVmdDwvdGQ+XG4gICAgICAgICAgPHRkPkNPQUNIX1BBU1NBR0U8L3RkPlxuICAgICAgICA8L3RyPlxuICAgICAgICA8dHI+XG4gICAgICAgICAgPHRkPiR7c3ZnSW1hZ2Uoc3Zncy5jaGFzc2lzUGFzc2FnZVdhZ2dvbkJvdHRvbVJpZ2h0KX08L3RkPlxuICAgICAgICAgIDx0ZD5QYXNzYWdlLVdhZ2dvbiBUeXBlOiBSaWdodDwvdGQ+XG4gICAgICAgICAgPHRkXG4gICAgICAgICAgICBzdHlsZT1cImJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCg5MGRlZywgdmFyKC0tc2JiLWNvbG9yLXdoaXRlKSA1JSwgdmFyKC0tc2JiLWNvbG9yLXJlZCkpO1wiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgVE9ETzogY2hlY2sgaWYgc3RpbGwgaW4gdXNlLCBtYXkgYmUgZGVsZXRlZFxuICAgICAgICAgIDwvdGQ+XG4gICAgICAgIDwvdHI+XG4gICAgICAgIDx0cj5cbiAgICAgICAgICA8dGQ+JHtzdmdJbWFnZUJ5T1NETUNvZGUoJ0NPQUNIX1dBTExfTk9fUEFTU0FHRScpfTwvdGQ+XG4gICAgICAgICAgPHRkPlJvdy1FbXB0eTogVG9wL0xlZnQ8L3RkPlxuICAgICAgICAgIDx0ZD5DT0FDSF9XQUxMX05PX1BBU1NBR0U8L3RkPlxuICAgICAgICA8L3RyPlxuICAgICAgICA8dHI+XG4gICAgICAgICAgPHRkPiR7c3ZnSW1hZ2VCeU9TRE1Db2RlKCdDT0FDSF9CT1JERVJfTUlERExFJyl9PC90ZD5cbiAgICAgICAgICA8dGQ+Um93LUVtcHR5OiBNaWRkbGU8L3RkPlxuICAgICAgICAgIDx0ZD5DT0FDSF9CT1JERVJfTUlERExFPC90ZD5cbiAgICAgICAgPC90cj5cbiAgICAgICAgPHRyPlxuICAgICAgICAgIDx0ZD4ke3N2Z0ltYWdlKHN2Z3MuY2hhc3Npc1NlcGFyYXRvcil9PC90ZD5cbiAgICAgICAgICA8dGQ+U2VwYXJhdG9yPC90ZD5cbiAgICAgICAgICA8dGRcbiAgICAgICAgICAgIHN0eWxlPVwiYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDkwZGVnLCB2YXIoLS1zYmItY29sb3Itd2hpdGUpIDUlLCB2YXIoLS1zYmItY29sb3ItcmVkKSlcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIFRPRE86IGNoZWNrIGlmIHN0aWxsIGluIHVzZSwgbWF5IGJlIGRlbGV0ZWRcbiAgICAgICAgICA8L3RkPlxuICAgICAgICA8L3RyPlxuICAgICAgPC90Ym9keT5cbiAgICA8L3RhYmxlPlxuICA8L3NiYi10YWJsZS13cmFwcGVyPlxuYDtcblxuZXhwb3J0IGNvbnN0IGFzc2V0c1RlbXBsYXRlOiBUZW1wbGF0ZVJlc3VsdCA9IGh0bWxgXG4gIDxzdHlsZT5cbiAgICAuc3RvcnktYXNzZXQge1xuICAgICAgd2lkdGg6IG1heC1jb250ZW50O1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tc2JiLWNvbG9yLXdoaXRlKTtcbiAgICB9XG4gIDwvc3R5bGU+XG4gIDxoMT5MaXN0IG9mIGFsbCBjdXJyZW50bHkgYXZhaWxhYmxlIGFzc2V0cy48L2gxPlxuICA8aDI+SW50ZXJpb3I8L2gyPlxuICAke2ludGVyaW9yVGFibGV9XG4gIDxoMj5MYXlvdXQ8L2gyPlxuICAke2xheW91dEl0ZW1zVGFibGV9XG4gIDxoMj5TZXJ2aWNlIEljb25zPC9oMj5cbiAgJHtzZXJ2aWNlSWNvblRhYmxlfVxuICA8aDI+Q2hhc3NpczwvaDI+XG4gICR7Y2hhc3Npc1RhYmxlfVxuYDtcbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQVFBLE1BQU0sV0FBVyxDQUFDLFFBQStCO0FBQy9DLFNBQU87QUFBQTtBQUFBLDJDQUVrQyxXQUFXLEdBQUcsQ0FBQztBQUFBO0FBQUE7QUFHMUQ7QUFPTyxNQUFNLHFCQUFxQixDQUFDLGFBQTJDO0FBQzVFLFNBQU8sYUFBYSxRQUFRLEdBQUcsTUFDM0IsU0FBUyxhQUFhLFFBQVEsRUFBRSxHQUFHLElBQ25DLGFBQWEsUUFBUSxHQUFHLFVBQ3RCLHVCQUF1QixhQUFhLFFBQVEsRUFBRSxPQUFPLGtCQUNyRDtBQUNSO0FBRUEsTUFBTSxnQkFBZ0I7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsZ0JBWU4sbUJBQW1CLG9CQUFvQixDQUFDO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxnQkFLeEMsbUJBQW1CLHdCQUF3QixDQUFDO0FBQUE7QUFBQTtBQUFBO0FBQUE7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
|