simpo-component-library 3.6.984 → 3.6.986

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.
@@ -0,0 +1,168 @@
1
+ import { Component, Inject, Input, PLATFORM_ID, ViewChild } from '@angular/core';
2
+ import { CommonModule } from '@angular/common';
3
+ import { FormsModule } from '@angular/forms';
4
+ import { AnimationDirective } from '../../../directive/animation-directive';
5
+ import { BackgroundDirective } from '../../../directive/background-directive';
6
+ import { BorderDirective } from '../../../directive/border-directive';
7
+ import { CornerDirective } from '../../../directive/corner-directive';
8
+ import { HoverDirective } from '../../../directive/hover-element-directive';
9
+ import { OverlayDirective } from '../../../directive/overlay-directive';
10
+ import { ContentFitDirective } from '../../../directive/content-fit-directive';
11
+ import { SimpoComponentModule } from '../../../components/index';
12
+ import BaseSection from '../../../sections/BaseSection';
13
+ import { SpacingHorizontalDirective } from '../../../directive/spacing-horizontal.directive';
14
+ import { SimpoContainerAligment } from '../../../directive/container-alignment.directive';
15
+ import { SvgDividerComponent } from '../../../elements/svg-divider/svg-divider.component';
16
+ import { TextEditorComponent } from '../../../elements/text-editor/text-editor.component';
17
+ import { SpacingAroundDirective } from '../../../directive/spacing-around.directive';
18
+ import { moveItemInArray } from '@angular/cdk/drag-drop';
19
+ import { BrandsWithImageBackgroundColumnsComponent } from "../brands-with-image-background-columns/brands-with-image-background-columns.component";
20
+ import * as i0 from "@angular/core";
21
+ import * as i1 from "@angular/router";
22
+ import * as i2 from "../../../services/rest.service";
23
+ import * as i3 from ".././../../services/events.service";
24
+ import * as i4 from "@angular/common";
25
+ import * as i5 from "../../../components/hover-elements/hover-elements.component";
26
+ import * as i6 from "../../../components/delete-hover-element/delete-hover-element.component";
27
+ import * as i7 from "ngx-skeleton-loader";
28
+ export class FeaturedBrandComponent extends BaseSection {
29
+ constructor(platformId, router, restService, _eventService) {
30
+ super();
31
+ this.platformId = platformId;
32
+ this.router = router;
33
+ this.restService = restService;
34
+ this._eventService = _eventService;
35
+ this.isLoading = false;
36
+ this.allBrands = [];
37
+ }
38
+ async ngOnInit() {
39
+ this.content = this.data?.content;
40
+ this.styles = this.data?.styles;
41
+ await this.getAllBrands();
42
+ this._eventService.showLoadingScreen.subscribe((response) => {
43
+ this.isLoading = response;
44
+ });
45
+ this._eventService.brandListEvent.subscribe((response) => {
46
+ if (response === 'DESELECTION') {
47
+ this.responseData = [];
48
+ this.data.content.brandsIds = [];
49
+ }
50
+ else if (response === 'ALL') {
51
+ this.allBrandsSelected();
52
+ }
53
+ else {
54
+ this.getBrandsById();
55
+ }
56
+ });
57
+ }
58
+ getAllBrands() {
59
+ this.restService.getAllBrands().subscribe((response) => {
60
+ this.allBrands = response;
61
+ if (this.data?.content?.brandsIds?.length >= 1) {
62
+ this.responseData = [];
63
+ this.data?.content?.brandsIds?.forEach((id) => {
64
+ const matchedBrand = this.allBrands.find((brand) => brand.brandId === id);
65
+ if (matchedBrand) {
66
+ this.responseData?.push(matchedBrand);
67
+ }
68
+ });
69
+ }
70
+ });
71
+ }
72
+ allBrandsSelected() {
73
+ this.responseData = this.allBrands;
74
+ this.data.content.brandsIds = this.allBrands.map((brand) => brand.brandId);
75
+ }
76
+ getBrandsById() {
77
+ this.responseData = this.allBrands.filter((brand) => this.data?.content?.brandsIds?.includes(brand.brandId));
78
+ this.content?.brandsIds?.forEach((id, brandIndex) => {
79
+ let index = -1;
80
+ this.responseData?.forEach((data, idx) => {
81
+ if (data.brandId == id)
82
+ index = idx;
83
+ });
84
+ this.dropBrand(index, brandIndex);
85
+ });
86
+ }
87
+ dropBrand(startIdx, endIdx) {
88
+ if (this.responseData)
89
+ moveItemInArray(this.responseData, startIdx, endIdx);
90
+ }
91
+ getSliceParameters() {
92
+ return [0, (this.styles?.maximumProduct || 0)];
93
+ }
94
+ redirectToListPage(brand) {
95
+ const brandName = brand?.brandName?.replaceAll(" ", "_");
96
+ this.router.navigate(['/list'], { queryParams: { brand: brandName } });
97
+ }
98
+ editSection() {
99
+ if (window.innerWidth <= 475)
100
+ return;
101
+ this._eventService.toggleEditorEvent.emit(false);
102
+ setTimeout(() => {
103
+ this._eventService.editSection.emit({ data: this.data });
104
+ }, 100);
105
+ }
106
+ get getDirection() {
107
+ return this.styles?.direction;
108
+ }
109
+ get stylesLayout() {
110
+ return { ...this.styles?.layout };
111
+ }
112
+ get isMobile() {
113
+ return window.innerWidth <= 475;
114
+ }
115
+ getJustifyContent() {
116
+ const el = this.brandParent?.nativeElement;
117
+ if (!el)
118
+ return '';
119
+ const isOverflowing = el.scrollWidth > el.clientWidth;
120
+ if (isOverflowing) {
121
+ return 'flex-start';
122
+ }
123
+ return this.styles?.layout?.align || '';
124
+ }
125
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FeaturedBrandComponent, deps: [{ token: PLATFORM_ID }, { token: i1.Router }, { token: i2.RestService }, { token: i3.EventsService }], target: i0.ɵɵFactoryTarget.Component }); }
126
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: FeaturedBrandComponent, isStandalone: true, selector: "simpo-featured-brand", inputs: { data: "data", responseData: "responseData", index: "index", edit: "edit", delete: "delete", customClass: "customClass", nextComponentColor: "nextComponentColor" }, viewQueries: [{ propertyName: "brandParent", first: true, predicate: ["brandParent1"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<ng-container *ngIf=\"!isLoading\">\n <section class=\"container-fluid total-container p-0\" [id]=\"data?.id\" simpoHover (hovering)=\"showEditTabs($event)\"\n [attr.style]=\"customClass\">\n <div [spacingAround]=\"stylesLayout\" [id]=\"data?.id\" [simpoBorder]=\"styles?.border\" class=\"border-radius-unset\">\n <div [id]=\"data?.id\" #mainContainer [simpoAnimation]=\"styles?.animation\" [simpoBackground]=\"styles?.background\"\n [simpoCorner]=\"styles?.corners\" class=\"d-flex w-100\">\n <div class=\"d-flex flex-column w-100\" [simpoOverlay]=\"styles?.background\" [simpoCorner]=\"styles?.corners\"\n [id]=\"data?.id\" [simpoLayout]=\"styles?.layout\" [spacingHorizontal]=\"stylesLayout\"\n [simpoAnimation]=\"styles?.animation\">\n <div *ngFor=\"let item of content?.inputText\" class=\"text-container\">\n <ng-container *ngIf=\"edit || item.value\">\n <div class=\"pt-3 w-100\">\n <simpo-text-editor [(value)]=\"item.value\" [editable]=\"edit || false\" [isRTE]=\"item.isRTE\"></simpo-text-editor>\n </div>\n </ng-container>\n </div>\n <ng-container *ngIf=\"styles?.componentStyle === 'Style1';else brandStyle2\">\n <div class=\"brand-parent\" [ngClass]=\"{'flex-wrap': getDirection == 'COLUMN'}\"\n [simpoContainerAlignment]=\"styles?.layout\" [id]=\"data?.id\"\n [style.justifyContent]=\"!isMobile ? getJustifyContent() : ''\" #brandParent1>\n <div\n *ngFor=\"let data of responseData | slice:getSliceParameters()[0]:getSliceParameters()[1]; let idx = index\"\n (click)=\"redirectToListPage(data)\" class=\"d-flex flex-column align-items-center w-fit-content\"\n [ngClass]=\"{ 'w-48 d-flex flex-column align-items-center' : isMobile}\">\n <img [simpoCorner]=\"styles?.corners\"\n [style.height.px]=\"(styles?.containerHeight ?? 1) / (isMobile ? 2 : 1)\"\n [style.width.px]=\"(styles?.containerWidth ?? 1) / (isMobile ? 2 : 1)\" loading=\"lazy\"\n onerror=\"this.src='https://i.postimg.cc/hPS2JpV0/no-image-available.jpg'\"\n [src]=\"data.imgUrl?.[0] ?? 'https://i.postimg.cc/hPS2JpV0/no-image-available.jpg'\" alt=\"\"\n class=\"brand-image\" [ngClass]=\"{'brand-new-image' : isMobile && getDirection == 'COLUMN'}\">\n <div *ngIf=\"content?.display?.showHeading\"\n [style.width.px]=\"(styles?.containerWidth ?? 1) / (isMobile ? 2 : 1)\">{{data.brandName}}</div>\n </div>\n </div>\n </ng-container>\n <ng-template #brandStyle2>\n <div class=\"w-100\">\n <simpo-brands-with-image-background-columns [responseData]=\"responseData\" [styles]=\"styles\"\n [content]=\"content\"></simpo-brands-with-image-background-columns>\n </div>\n </ng-template>\n </div>\n </div>\n </div>\n\n <ng-container *ngIf=\"styles?.devider?.display\">\n <simpo-svg-divider [dividerType]=\"styles?.devider?.deviderType\"\n [color]=\"nextComponentColor?.color\"></simpo-svg-divider>\n </ng-container>\n <div [ngClass]=\"{'hover_effect': edit}\" *ngIf=\"showEditors\">\n <simpo-hover-elements [data]=\"data\" [index]=\"index\" [editOptions]=\"edit\"></simpo-hover-elements>\n </div>\n <div *ngIf=\"showDelete\" [ngClass]=\"{'hover_effect': delete}\">\n <simpo-delete-hover-element [data]=\"data\" [index]=\"index\"></simpo-delete-hover-element>\n </div>\n\n </section>\n</ng-container>\n\n<ngx-skeleton-loader *ngIf=\"isLoading\" count=\"1\" appearance=\"circle\" [theme]=\"{\n width: '100%',\n height: '40vh',\n 'border-radius': '10px',\n 'position': 'relative',\n 'right': '5px'\n}\">\n</ngx-skeleton-loader>\n", styles: [".mt-15{margin-top:15px}*{font-family:var(--website-font-family)}mat-icon{font-family:Material Icons!important}.text-container{min-width:100px}.w-fit-content{width:fit-content!important}.total-container{height:fit-content!important;position:relative;display:block!important}.hover_effect{position:unset;width:100%;top:0;left:0;height:100%}.brand-parent{padding:25px 0% 2%;display:flex;width:100%;max-width:100%;gap:25px;overflow-x:scroll;font-size:16px!important;cursor:pointer}.hovering-effect:hover{font-size:22px!important;transition:.3s ease-in-out}.brand-image{display:flex;flex-wrap:wrap;margin-bottom:15px;transition-duration:.3s;-webkit-transform:scale(1);transform:scale(1);-webkit-transition:.3s ease-in-out;transition:.3s ease-in-out}.brand-image:hover{-webkit-transform:scale(1.1);transform:scale(1.1)}.brand-parent::-webkit-scrollbar{display:none}.span{width:141px;height:15px}.brand-name{color:#222;font-size:16px;line-height:normal;font-weight:600}.border-radius-unset{border-radius:unset!important}@media screen and (max-width : 475px){.main-container{padding-left:10px;padding-right:10px}.total-container{height:fit-content!important}.w-48{width:48%!important}.brand-new-image{height:150px!important;width:100%!important}.header{gap:7px}.brand-parent{gap:8px;margin-top:15px;padding-left:0!important;padding-right:0!important;padding-top:0!important}.brand-parent::-webkit-scrollbar{display:flex!important;height:3px}.span{width:70.5px;height:7.5px}.brand-name{font-size:12px}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i4.SlicePipe, name: "slice" }, { kind: "ngmodule", type: FormsModule }, { kind: "ngmodule", type: SimpoComponentModule }, { kind: "component", type: i5.HoverElementsComponent, selector: "simpo-hover-elements", inputs: ["data", "index", "editOptions", "isMerged", "isEcommerce"], outputs: ["edit"] }, { kind: "component", type: i6.DeleteHoverElementComponent, selector: "simpo-delete-hover-element", inputs: ["index", "data"], outputs: ["edit"] }, { kind: "component", type: i7.NgxSkeletonLoaderComponent, selector: "ngx-skeleton-loader", inputs: ["count", "loadingText", "appearance", "animation", "ariaLabel", "theme"] }, { kind: "directive", type:
127
+ //directive
128
+ AnimationDirective, selector: "[simpoAnimation]", inputs: ["simpoAnimation"] }, { kind: "directive", type: ContentFitDirective, selector: "[simpoLayout]", inputs: ["simpoLayout"] }, { kind: "directive", type: BackgroundDirective, selector: "[simpoBackground]", inputs: ["simpoBackground", "scrollValue"] }, { kind: "directive", type: BorderDirective, selector: "[simpoBorder]", inputs: ["simpoBorder"] }, { kind: "directive", type: CornerDirective, selector: "[simpoCorner]", inputs: ["simpoCorner"] }, { kind: "directive", type: HoverDirective, selector: "[simpoHover]", outputs: ["hovering"] }, { kind: "directive", type: SpacingHorizontalDirective, selector: "[spacingHorizontal]", inputs: ["spacingHorizontal", "isHeader"] }, { kind: "directive", type: SimpoContainerAligment, selector: "[simpoContainerAlignment]", inputs: ["simpoContainerAlignment"] }, { kind: "directive", type: OverlayDirective, selector: "[simpoOverlay]", inputs: ["simpoOverlay"] }, { kind: "component", type: SvgDividerComponent, selector: "simpo-svg-divider", inputs: ["dividerType", "color"] }, { kind: "component", type: TextEditorComponent, selector: "simpo-text-editor", inputs: ["value", "editable", "isRTE", "sectionId", "label", "type", "inputTextIndex", "itemIndex"], outputs: ["valueChange"] }, { kind: "directive", type: SpacingAroundDirective, selector: "[spacingAround]", inputs: ["spacingAround", "backgroundInfo"] }, { kind: "component", type: BrandsWithImageBackgroundColumnsComponent, selector: "simpo-brands-with-image-background-columns", inputs: ["responseData", "styles", "content"] }] }); }
129
+ }
130
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FeaturedBrandComponent, decorators: [{
131
+ type: Component,
132
+ args: [{ selector: 'simpo-featured-brand', standalone: true, imports: [CommonModule, FormsModule,
133
+ SimpoComponentModule,
134
+ //directive
135
+ AnimationDirective,
136
+ ContentFitDirective,
137
+ BackgroundDirective,
138
+ BorderDirective,
139
+ CornerDirective,
140
+ HoverDirective,
141
+ SpacingHorizontalDirective,
142
+ SimpoContainerAligment,
143
+ OverlayDirective,
144
+ SvgDividerComponent,
145
+ TextEditorComponent,
146
+ SpacingAroundDirective, BrandsWithImageBackgroundColumnsComponent], template: "<ng-container *ngIf=\"!isLoading\">\n <section class=\"container-fluid total-container p-0\" [id]=\"data?.id\" simpoHover (hovering)=\"showEditTabs($event)\"\n [attr.style]=\"customClass\">\n <div [spacingAround]=\"stylesLayout\" [id]=\"data?.id\" [simpoBorder]=\"styles?.border\" class=\"border-radius-unset\">\n <div [id]=\"data?.id\" #mainContainer [simpoAnimation]=\"styles?.animation\" [simpoBackground]=\"styles?.background\"\n [simpoCorner]=\"styles?.corners\" class=\"d-flex w-100\">\n <div class=\"d-flex flex-column w-100\" [simpoOverlay]=\"styles?.background\" [simpoCorner]=\"styles?.corners\"\n [id]=\"data?.id\" [simpoLayout]=\"styles?.layout\" [spacingHorizontal]=\"stylesLayout\"\n [simpoAnimation]=\"styles?.animation\">\n <div *ngFor=\"let item of content?.inputText\" class=\"text-container\">\n <ng-container *ngIf=\"edit || item.value\">\n <div class=\"pt-3 w-100\">\n <simpo-text-editor [(value)]=\"item.value\" [editable]=\"edit || false\" [isRTE]=\"item.isRTE\"></simpo-text-editor>\n </div>\n </ng-container>\n </div>\n <ng-container *ngIf=\"styles?.componentStyle === 'Style1';else brandStyle2\">\n <div class=\"brand-parent\" [ngClass]=\"{'flex-wrap': getDirection == 'COLUMN'}\"\n [simpoContainerAlignment]=\"styles?.layout\" [id]=\"data?.id\"\n [style.justifyContent]=\"!isMobile ? getJustifyContent() : ''\" #brandParent1>\n <div\n *ngFor=\"let data of responseData | slice:getSliceParameters()[0]:getSliceParameters()[1]; let idx = index\"\n (click)=\"redirectToListPage(data)\" class=\"d-flex flex-column align-items-center w-fit-content\"\n [ngClass]=\"{ 'w-48 d-flex flex-column align-items-center' : isMobile}\">\n <img [simpoCorner]=\"styles?.corners\"\n [style.height.px]=\"(styles?.containerHeight ?? 1) / (isMobile ? 2 : 1)\"\n [style.width.px]=\"(styles?.containerWidth ?? 1) / (isMobile ? 2 : 1)\" loading=\"lazy\"\n onerror=\"this.src='https://i.postimg.cc/hPS2JpV0/no-image-available.jpg'\"\n [src]=\"data.imgUrl?.[0] ?? 'https://i.postimg.cc/hPS2JpV0/no-image-available.jpg'\" alt=\"\"\n class=\"brand-image\" [ngClass]=\"{'brand-new-image' : isMobile && getDirection == 'COLUMN'}\">\n <div *ngIf=\"content?.display?.showHeading\"\n [style.width.px]=\"(styles?.containerWidth ?? 1) / (isMobile ? 2 : 1)\">{{data.brandName}}</div>\n </div>\n </div>\n </ng-container>\n <ng-template #brandStyle2>\n <div class=\"w-100\">\n <simpo-brands-with-image-background-columns [responseData]=\"responseData\" [styles]=\"styles\"\n [content]=\"content\"></simpo-brands-with-image-background-columns>\n </div>\n </ng-template>\n </div>\n </div>\n </div>\n\n <ng-container *ngIf=\"styles?.devider?.display\">\n <simpo-svg-divider [dividerType]=\"styles?.devider?.deviderType\"\n [color]=\"nextComponentColor?.color\"></simpo-svg-divider>\n </ng-container>\n <div [ngClass]=\"{'hover_effect': edit}\" *ngIf=\"showEditors\">\n <simpo-hover-elements [data]=\"data\" [index]=\"index\" [editOptions]=\"edit\"></simpo-hover-elements>\n </div>\n <div *ngIf=\"showDelete\" [ngClass]=\"{'hover_effect': delete}\">\n <simpo-delete-hover-element [data]=\"data\" [index]=\"index\"></simpo-delete-hover-element>\n </div>\n\n </section>\n</ng-container>\n\n<ngx-skeleton-loader *ngIf=\"isLoading\" count=\"1\" appearance=\"circle\" [theme]=\"{\n width: '100%',\n height: '40vh',\n 'border-radius': '10px',\n 'position': 'relative',\n 'right': '5px'\n}\">\n</ngx-skeleton-loader>\n", styles: [".mt-15{margin-top:15px}*{font-family:var(--website-font-family)}mat-icon{font-family:Material Icons!important}.text-container{min-width:100px}.w-fit-content{width:fit-content!important}.total-container{height:fit-content!important;position:relative;display:block!important}.hover_effect{position:unset;width:100%;top:0;left:0;height:100%}.brand-parent{padding:25px 0% 2%;display:flex;width:100%;max-width:100%;gap:25px;overflow-x:scroll;font-size:16px!important;cursor:pointer}.hovering-effect:hover{font-size:22px!important;transition:.3s ease-in-out}.brand-image{display:flex;flex-wrap:wrap;margin-bottom:15px;transition-duration:.3s;-webkit-transform:scale(1);transform:scale(1);-webkit-transition:.3s ease-in-out;transition:.3s ease-in-out}.brand-image:hover{-webkit-transform:scale(1.1);transform:scale(1.1)}.brand-parent::-webkit-scrollbar{display:none}.span{width:141px;height:15px}.brand-name{color:#222;font-size:16px;line-height:normal;font-weight:600}.border-radius-unset{border-radius:unset!important}@media screen and (max-width : 475px){.main-container{padding-left:10px;padding-right:10px}.total-container{height:fit-content!important}.w-48{width:48%!important}.brand-new-image{height:150px!important;width:100%!important}.header{gap:7px}.brand-parent{gap:8px;margin-top:15px;padding-left:0!important;padding-right:0!important;padding-top:0!important}.brand-parent::-webkit-scrollbar{display:flex!important;height:3px}.span{width:70.5px;height:7.5px}.brand-name{font-size:12px}}\n"] }]
147
+ }], ctorParameters: () => [{ type: Object, decorators: [{
148
+ type: Inject,
149
+ args: [PLATFORM_ID]
150
+ }] }, { type: i1.Router }, { type: i2.RestService }, { type: i3.EventsService }], propDecorators: { brandParent: [{
151
+ type: ViewChild,
152
+ args: ['brandParent1', { static: false }]
153
+ }], data: [{
154
+ type: Input
155
+ }], responseData: [{
156
+ type: Input
157
+ }], index: [{
158
+ type: Input
159
+ }], edit: [{
160
+ type: Input
161
+ }], delete: [{
162
+ type: Input
163
+ }], customClass: [{
164
+ type: Input
165
+ }], nextComponentColor: [{
166
+ type: Input
167
+ }] } });
168
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmVhdHVyZWQtYnJhbmQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2ltcG8tdWkvc3JjL2xpYi9lY29tbWVyY2Uvc2VjdGlvbnMvZmVhdHVyZWQtYnJhbmQvZmVhdHVyZWQtYnJhbmQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2ltcG8tdWkvc3JjL2xpYi9lY29tbWVyY2Uvc2VjdGlvbnMvZmVhdHVyZWQtYnJhbmQvZmVhdHVyZWQtYnJhbmQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBYyxNQUFNLEVBQUUsS0FBSyxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDN0YsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUM1RSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUM5RSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDdEUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQ3RFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQUM1RSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUN4RSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUUvRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNqRSxPQUFPLFdBQVcsTUFBTSwrQkFBK0IsQ0FBQztBQUt4RCxPQUFPLEVBQUUsMEJBQTBC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TTtzQkFBZCxLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBRUcsa0JBQWtCO3NCQUExQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBJbmplY3QsIElucHV0LCBQTEFURk9STV9JRCwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBBbmltYXRpb25EaXJlY3RpdmUgfSBmcm9tICcuLi8uLi8uLi9kaXJlY3RpdmUvYW5pbWF0aW9uLWRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBCYWNrZ3JvdW5kRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vLi4vZGlyZWN0aXZlL2JhY2tncm91bmQtZGlyZWN0aXZlJztcbmltcG9ydCB7IEJvcmRlckRpcmVjdGl2ZSB9IGZyb20gJy4uLy4uLy4uL2RpcmVjdGl2ZS9ib3JkZXItZGlyZWN0aXZlJztcbmltcG9ydCB7IENvcm5lckRpcmVjdGl2ZSB9IGZyb20gJy4uLy4uLy4uL2RpcmVjdGl2ZS9jb3JuZXItZGlyZWN0aXZlJztcbmltcG9ydCB7IEhvdmVyRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vLi4vZGlyZWN0aXZlL2hvdmVyLWVsZW1lbnQtZGlyZWN0aXZlJztcbmltcG9ydCB7IE92ZXJsYXlEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi8uLi9kaXJlY3RpdmUvb3ZlcmxheS1kaXJlY3RpdmUnO1xuaW1wb3J0IHsgQ29udGVudEZpdERpcmVjdGl2ZSB9IGZyb20gJy4uLy4uLy4uL2RpcmVjdGl2ZS9jb250ZW50LWZpdC1kaXJlY3RpdmUnO1xuaW1wb3J0IHsgRXZlbnRzU2VydmljZSB9IGZyb20gJy4uLy4vLi4vLi4vc2VydmljZXMvZXZlbnRzLnNlcnZpY2UnO1xuaW1wb3J0IHsgU2ltcG9Db21wb25lbnRNb2R1bGUgfSBmcm9tICcuLi8uLi8uLi9jb21wb25lbnRzL2luZGV4JztcbmltcG9ydCBCYXNlU2VjdGlvbiBmcm9tICcuLi8uLi8uLi9zZWN0aW9ucy9CYXNlU2VjdGlvbic7XG5pbXBvcnQgeyBGZWF0dXJlZEJyYW5kQ29udGVudE1vZGFsLCBGZWF0dXJlZEJyYW5kTW9kYWwsIEZlYXR1cmVkQnJhbmRTdHlsZXNNb2RlbCB9IGZyb20gJy4vZmVhdHVyZWQtYnJhbmQubW9kYWwnO1xuaW1wb3J0IHsgQnJhbmQgfSBmcm9tICcuLi8uLi9zdHlsZXMvQnJhbmQubW9kYWwnO1xuaW1wb3J0IHsgUmVzdFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9yZXN0LnNlcnZpY2UnO1xuaW1wb3J0IHsgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IFNwYWNpbmdIb3Jpem9udGFsRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vLi4vZGlyZWN0aXZlL3NwYWNpbmctaG9yaXpvbnRhbC5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgU2ltcG9Db250YWluZXJBbGlnbWVudCB9IGZyb20gJy4uLy4uLy4uL2RpcmVjdGl2ZS9jb250YWluZXItYWxpZ25tZW50LmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBCYWNrZ3JvdW5kTW9kZWwsIExheU91dE1vZGVsIH0gZnJvbSAnLi4vLi4vLi4vc3R5bGVzL3N0eWxlLm1vZGVsJztcbmltcG9ydCB7IFN2Z0RpdmlkZXJDb21wb25lbnQgfSBmcm9tICcuLi8uLi8uLi9lbGVtZW50cy9zdmctZGl2aWRlci9zdmctZGl2aWRlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgVGV4dEVkaXRvckNvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uL2VsZW1lbnRzL3RleHQtZWRpdG9yL3RleHQtZWRpdG9yLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBTcGFjaW5nQXJvdW5kRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vLi4vZGlyZWN0aXZlL3NwYWNpbmctYXJvdW5kLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBtb3ZlSXRlbUluQXJyYXkgfSBmcm9tICdAYW5ndWxhci9jZGsvZHJhZy1kcm9wJztcbmltcG9ydCB7IEJyYW5kc1dpdGhJbWFnZUJhY2tncm91bmRDb2x1bW5zQ29tcG9uZW50IH0gZnJvbSBcIi4uL2JyYW5kcy13aXRoLWltYWdlLWJhY2tncm91bmQtY29sdW1ucy9icmFuZHMtd2l0aC1pbWFnZS1iYWNrZ3JvdW5kLWNvbHVtbnMuY29tcG9uZW50XCI7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3NpbXBvLWZlYXR1cmVkLWJyYW5kJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgRm9ybXNNb2R1bGUsXG4gICAgU2ltcG9Db21wb25lbnRNb2R1bGUsXG4gICAgLy9kaXJlY3RpdmVcbiAgICBBbmltYXRpb25EaXJlY3RpdmUsXG4gICAgQ29udGVudEZpdERpcmVjdGl2ZSxcbiAgICBCYWNrZ3JvdW5kRGlyZWN0aXZlLFxuICAgIEJvcmRlckRpcmVjdGl2ZSxcbiAgICBDb3JuZXJEaXJlY3RpdmUsXG4gICAgSG92ZXJEaXJlY3RpdmUsXG4gICAgU3BhY2luZ0hvcml6b250YWxEaXJlY3RpdmUsXG4gICAgU2ltcG9Db250YWluZXJBbGlnbWVudCxcbiAgICBPdmVybGF5RGlyZWN0aXZlLFxuICAgIFN2Z0RpdmlkZXJDb21wb25lbnQsXG4gICAgVGV4dEVkaXRvckNvbXBvbmVudCxcbiAgICBTcGFjaW5nQXJvdW5kRGlyZWN0aXZlLCBCcmFuZHNXaXRoSW1hZ2VCYWNrZ3JvdW5kQ29sdW1uc0NvbXBvbmVudF0sXG4gIHRlbXBsYXRlVXJsOiAnLi9mZWF0dXJlZC1icmFuZC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsOiAnLi9mZWF0dXJlZC1icmFuZC5jb21wb25lbnQuY3NzJ1xufSlcbmV4cG9ydCBjbGFzcyBGZWF0dXJlZEJyYW5kQ29tcG9uZW50IGV4dGVuZHMgQmFzZVNlY3Rpb24ge1xuICBAVmlld0NoaWxkKCdicmFuZFBhcmVudDEnLCB7IHN0YXRpYzogZmFsc2UgfSkgYnJhbmRQYXJlbnQhOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PjtcblxuICBASW5wdXQoKSBkYXRhPzogRmVhdHVyZWRCcmFuZE1vZGFsIHwgYW55O1xuICBASW5wdXQoKSByZXNwb25zZURhdGE/OiBCcmFuZFtdIHwgYW55W107XG4gIEBJbnB1dCgpIGluZGV4PzogbnVtYmVyO1xuICBASW5wdXQoKSBlZGl0PzogYm9vbGVhbjtcbiAgQElucHV0KCkgZGVsZXRlPzogYm9vbGVhbjtcbiAgQElucHV0KCkgY3VzdG9tQ2xhc3M/OiBzdHJpbmc7XG4gIGlzTG9hZGluZzogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSBuZXh0Q29tcG9uZW50Q29sb3I/OiBCYWNrZ3JvdW5kTW9kZWw7XG5cblxuICBjb250ZW50PzogRmVhdHVyZWRCcmFuZENvbnRlbnRNb2RhbDtcbiAgc3R5bGVzPzogRmVhdHVyZWRCcmFuZFN0eWxlc01vZGVsO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIEBJbmplY3QoUExBVEZPUk1fSUQpIHByaXZhdGUgcGxhdGZvcm1JZDogT2JqZWN0LFxuICAgIHByaXZhdGUgcmVhZG9ubHkgcm91dGVyOiBSb3V0ZXIsXG4gICAgcHJpdmF0ZSByZWFkb25seSByZXN0U2VydmljZTogUmVzdFNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSBfZXZlbnRTZXJ2aWNlOiBFdmVudHNTZXJ2aWNlLFxuICApIHtcbiAgICBzdXBlcigpXG4gIH1cbiAgYXN5bmMgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5jb250ZW50ID0gdGhpcy5kYXRhPy5jb250ZW50O1xuICAgIHRoaXMuc3R5bGVzID0gdGhpcy5kYXRhPy5zdHlsZXM7XG4gICAgYXdhaXQgdGhpcy5nZXRBbGxCcmFuZHMoKTtcbiAgICB0aGlzLl9ldmVudFNlcnZpY2Uuc2hvd0xvYWRpbmdTY3JlZW4uc3Vic2NyaWJlKChyZXNwb25zZSkgPT4ge1xuICAgICAgdGhpcy5pc0xvYWRpbmcgPSByZXNwb25zZTtcbiAgICB9KVxuICAgIHRoaXMuX2V2ZW50U2VydmljZS5icmFuZExpc3RFdmVudC5zdWJzY3JpYmUoKHJlc3BvbnNlKSA9PiB7XG4gICAgICBpZiAocmVzcG9uc2UgPT09ICdERVNFTEVDVElPTicpIHtcbiAgICAgICAgdGhpcy5yZXNwb25zZURhdGEgPSBbXTtcbiAgICAgICAgdGhpcy5kYXRhLmNvbnRlbnQuYnJhbmRzSWRzID0gW107XG4gICAgICB9XG4gICAgICBlbHNlIGlmIChyZXNwb25zZSA9PT0gJ0FMTCcpIHtcbiAgICAgICAgdGhpcy5hbGxCcmFuZHNTZWxlY3RlZCgpXG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgdGhpcy5nZXRCcmFuZHNCeUlkKCk7XG4gICAgICB9XG4gICAgfSlcbiAgfVxuICBhbGxCcmFuZHM6IGFueVtdID0gW107XG4gIGdldEFsbEJyYW5kcygpIHtcbiAgICB0aGlzLnJlc3RTZXJ2aWNlLmdldEFsbEJyYW5kcygpLnN1YnNjcmliZSgocmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgdGhpcy5hbGxCcmFuZHMgPSByZXNwb25zZTtcbiAgICAgIGlmICh0aGlzLmRhdGE/LmNvbnRlbnQ/LmJyYW5kc0lkcz8ubGVuZ3RoID49IDEpIHtcbiAgICAgICAgdGhpcy5yZXNwb25zZURhdGEgPSBbXTtcbiAgICAgICAgdGhpcy5kYXRhPy5jb250ZW50Py5icmFuZHNJZHM/LmZvckVhY2goKGlkOiBhbnkpID0+IHtcbiAgICAgICAgICBjb25zdCBtYXRjaGVkQnJhbmQgPSB0aGlzLmFsbEJyYW5kcy5maW5kKFxuICAgICAgICAgICAgKGJyYW5kOiBhbnkpID0+IGJyYW5kLmJyYW5kSWQgPT09IGlkXG4gICAgICAgICAgKTtcbiAgICAgICAgICBpZiAobWF0Y2hlZEJyYW5kKSB7XG4gICAgICAgICAgICB0aGlzLnJlc3BvbnNlRGF0YT8ucHVzaChtYXRjaGVkQnJhbmQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSlcbiAgfVxuICBhbGxCcmFuZHNTZWxlY3RlZCgpIHtcbiAgICB0aGlzLnJlc3BvbnNlRGF0YSA9IHRoaXMuYWxsQnJhbmRzO1xuICAgIHRoaXMuZGF0YS5jb250ZW50LmJyYW5kc0lkcyA9IHRoaXMuYWxsQnJhbmRzLm1hcCgoYnJhbmQ6IGFueSkgPT4gYnJhbmQuYnJhbmRJZCk7XG4gIH1cbiAgZ2V0QnJhbmRzQnlJZCgpIHtcbiAgICB0aGlzLnJlc3BvbnNlRGF0YSA9IHRoaXMuYWxsQnJhbmRzLmZpbHRlcigoYnJhbmQ6IGFueSkgPT5cbiAgICAgIHRoaXMuZGF0YT8uY29udGVudD8uYnJhbmRzSWRzPy5pbmNsdWRlcyhicmFuZC5icmFuZElkKVxuICAgICk7XG4gICAgdGhpcy5jb250ZW50Py5icmFuZHNJZHM/LmZvckVhY2goKGlkOiBzdHJpbmcsIGJyYW5kSW5kZXg6IG51bWJlcikgPT4ge1xuICAgICAgbGV0IGluZGV4ID0gLTE7XG4gICAgICB0aGlzLnJlc3BvbnNlRGF0YT8uZm9yRWFjaCgoZGF0YTogYW55LCBpZHgpID0+IHtcbiAgICAgICAgaWYgKGRhdGEuYnJhbmRJZCA9PSBpZClcbiAgICAgICAgICBpbmRleCA9IGlkeDtcbiAgICAgIH0pXG4gICAgICB0aGlzLmRyb3BCcmFuZChpbmRleCwgYnJhbmRJbmRleCk7XG4gICAgfSlcbiAgfVxuICBkcm9wQnJhbmQoc3RhcnRJZHg6IG51bWJlciwgZW5kSWR4OiBudW1iZXIpIHtcbiAgICBpZiAodGhpcy5yZXNwb25zZURhdGEpXG4gICAgICBtb3ZlSXRlbUluQXJyYXkodGhpcy5yZXNwb25zZURhdGEsIHN0YXJ0SWR4LCBlbmRJZHgpO1xuICB9XG4gIGdldFNsaWNlUGFyYW1ldGVycygpIHtcbiAgICByZXR1cm4gWzAsICh0aGlzLnN0eWxlcz8ubWF4aW11bVByb2R1Y3QgfHwgMCldO1xuICB9XG5cbiAgcmVkaXJlY3RUb0xpc3RQYWdlKGJyYW5kOiBhbnkpIHtcbiAgICBjb25zdCBicmFuZE5hbWUgPSBicmFuZD8uYnJhbmROYW1lPy5yZXBsYWNlQWxsKFwiIFwiLCBcIl9cIik7XG4gICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycvbGlzdCddLCB7IHF1ZXJ5UGFyYW1zOiB7IGJyYW5kOiBicmFuZE5hbWUgfSB9KTtcbiAgfVxuXG4gIGVkaXRTZWN0aW9uKCkge1xuICAgIGlmICh3aW5kb3cuaW5uZXJXaWR0aCA8PSA0NzUpXG4gICAgICByZXR1cm47XG4gICAgdGhpcy5fZXZlbnRTZXJ2aWNlLnRvZ2dsZUVkaXRvckV2ZW50LmVtaXQoZmFsc2UpO1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5fZXZlbnRTZXJ2aWNlLmVkaXRTZWN0aW9uLmVtaXQoeyBkYXRhOiB0aGlzLmRhdGEgfSk7XG4gICAgfSwgMTAwKTtcbiAgfVxuICBnZXQgZ2V0RGlyZWN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLnN0eWxlcz8uZGlyZWN0aW9uO1xuICB9XG4gIGdldCBzdHlsZXNMYXlvdXQoKSB7XG4gICAgcmV0dXJuIHsgLi4udGhpcy5zdHlsZXM/LmxheW91dCB9IGFzIExheU91dE1vZGVsO1xuICB9XG4gIGdldCBpc01vYmlsZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gd2luZG93LmlubmVyV2lkdGggPD0gNDc1O1xuICB9XG4gIGdldEp1c3RpZnlDb250ZW50KCkge1xuICAgIGNvbnN0IGVsID0gdGhpcy5icmFuZFBhcmVudD8ubmF0aXZlRWxlbWVudDtcbiAgICBpZiAoIWVsKSByZXR1cm4gJyc7XG4gICAgY29uc3QgaXNPdmVyZmxvd2luZyA9IGVsLnNjcm9sbFdpZHRoID4gZWwuY2xpZW50V2lkdGg7XG4gICAgaWYgKGlzT3ZlcmZsb3dpbmcpIHtcbiAgICAgIHJldHVybiAnZmxleC1zdGFydCc7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnN0eWxlcz8ubGF5b3V0Py5hbGlnbiB8fCAnJztcbiAgfVxufVxuIiwiPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFpc0xvYWRpbmdcIj5cbiAgPHNlY3Rpb24gY2xhc3M9XCJjb250YWluZXItZmx1aWQgdG90YWwtY29udGFpbmVyIHAtMFwiIFtpZF09XCJkYXRhPy5pZFwiIHNpbXBvSG92ZXIgKGhvdmVyaW5nKT1cInNob3dFZGl0VGFicygkZXZlbnQpXCJcbiAgICBbYXR0ci5zdHlsZV09XCJjdXN0b21DbGFzc1wiPlxuICAgIDxkaXYgW3NwYWNpbmdBcm91bmRdPVwic3R5bGVzTGF5b3V0XCIgW2lkXT1cImRhdGE/LmlkXCIgW3NpbXBvQm9yZGVyXT1cInN0eWxlcz8uYm9yZGVyXCIgY2xhc3M9XCJib3JkZXItcmFkaXVzLXVuc2V0XCI+XG4gICAgICA8ZGl2IFtpZF09XCJkYXRhPy5pZFwiICNtYWluQ29udGFpbmVyIFtzaW1wb0FuaW1hdGlvbl09XCJzdHlsZXM/LmFuaW1hdGlvblwiIFtzaW1wb0JhY2tncm91bmRdPVwic3R5bGVzPy5iYWNrZ3JvdW5kXCJcbiAgICAgICAgW3NpbXBvQ29ybmVyXT1cInN0eWxlcz8uY29ybmVyc1wiIGNsYXNzPVwiZC1mbGV4IHctMTAwXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZmxleC1jb2x1bW4gdy0xMDBcIiBbc2ltcG9PdmVybGF5XT1cInN0eWxlcz8uYmFja2dyb3VuZFwiIFtzaW1wb0Nvcm5lcl09XCJzdHlsZXM/LmNvcm5lcnNcIlxuICAgICAgICAgIFtpZF09XCJkYXRhPy5pZFwiIFtzaW1wb0xheW91dF09XCJzdHlsZXM/LmxheW91dFwiIFtzcGFjaW5nSG9yaXpvbnRhbF09XCJzdHlsZXNMYXlvdXRcIlxuICAgICAgICAgIFtzaW1wb0FuaW1hdGlvbl09XCJzdHlsZXM/LmFuaW1hdGlvblwiPlxuICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGl0ZW0gb2YgY29udGVudD8uaW5wdXRUZXh0XCIgY2xhc3M9XCJ0ZXh0LWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImVkaXQgfHwgaXRlbS52YWx1ZVwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHQtMyB3LTEwMFwiPlxuICAgICAgICAgICAgICAgIDxzaW1wby10ZXh0LWVkaXRvciBbKHZhbHVlKV09XCJpdGVtLnZhbHVlXCIgW2VkaXRhYmxlXT1cImVkaXQgfHwgZmFsc2VcIiBbaXNSVEVdPVwiaXRlbS5pc1JURVwiPjwvc2ltcG8tdGV4dC1lZGl0b3I+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInN0eWxlcz8uY29tcG9uZW50U3R5bGUgPT09ICdTdHlsZTEnO2Vsc2UgYnJhbmRTdHlsZTJcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJicmFuZC1wYXJlbnRcIiBbbmdDbGFzc109XCJ7J2ZsZXgtd3JhcCc6IGdldERpcmVjdGlvbiA9PSAnQ09MVU1OJ31cIlxuICAgICAgICAgICAgICBbc2ltcG9Db250YWluZXJBbGlnbm1lbnRdPVwic3R5bGVzPy5sYXlvdXRcIiBbaWRdPVwiZGF0YT8uaWRcIlxuICAgICAgICAgICAgICBbc3R5bGUuanVzdGlmeUNvbnRlbnRdPVwiIWlzTW9iaWxlID8gZ2V0SnVzdGlmeUNvbnRlbnQoKSA6ICcnXCIgI2JyYW5kUGFyZW50MT5cbiAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBkYXRhIG9mIHJlc3BvbnNlRGF0YSB8IHNsaWNlOmdldFNsaWNlUGFyYW1ldGVycygpWzBdOmdldFNsaWNlUGFyYW1ldGVycygpWzFdOyBsZXQgaWR4ID0gaW5kZXhcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJyZWRpcmVjdFRvTGlzdFBhZ2UoZGF0YSlcIiBjbGFzcz1cImQtZmxleCBmbGV4LWNvbHVtbiBhbGlnbi1pdGVtcy1jZW50ZXIgdy1maXQtY29udGVudFwiXG4gICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieyAndy00OCBkLWZsZXggZmxleC1jb2x1bW4gYWxpZ24taXRlbXMtY2VudGVyJyA6IGlzTW9iaWxlfVwiPlxuICAgICAgICAgICAgICAgIDxpbWcgIFtzaW1wb0Nvcm5lcl09XCJzdHlsZXM/LmNvcm5lcnNcIlxuICAgICAgICAgICAgICAgICAgW3N0eWxlLmhlaWdodC5weF09XCIoc3R5bGVzPy5jb250YWluZXJIZWlnaHQgPz8gMSkgLyAoaXNNb2JpbGUgPyAyIDogMSlcIlxuICAgICAgICAgICAgICAgICAgW3N0eWxlLndpZHRoLnB4XT1cIihzdHlsZXM/LmNvbnRhaW5lcldpZHRoID8/IDEpIC8gKGlzTW9iaWxlID8gMiA6IDEpXCIgbG9hZGluZz1cImxhenlcIlxuICAgICAgICAgICAgICAgICAgb25lcnJvcj1cInRoaXMuc3JjPSdodHRwczovL2kucG9zdGltZy5jYy9oUFMySnBWMC9uby1pbWFnZS1hdmFpbGFibGUuanBnJ1wiXG4gICAgICAgICAgICAgICAgICBbc3JjXT1cImRhdGEuaW1nVXJsPy5bMF0gPz8gJ2h0dHBzOi8vaS5wb3N0aW1nLmNjL2hQUzJKcFYwL25vLWltYWdlLWF2YWlsYWJsZS5qcGcnXCIgYWx0PVwiXCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYnJhbmQtaW1hZ2VcIiBbbmdDbGFzc109XCJ7J2JyYW5kLW5ldy1pbWFnZScgOiBpc01vYmlsZSAmJiBnZXREaXJlY3Rpb24gPT0gJ0NPTFVNTid9XCI+XG4gICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImNvbnRlbnQ/LmRpc3BsYXk/LnNob3dIZWFkaW5nXCJcbiAgICAgICAgICAgICAgICAgIFtzdHlsZS53aWR0aC5weF09XCIoc3R5bGVzPy5jb250YWluZXJXaWR0aCA/PyAxKSAvIChpc01vYmlsZSA/IDIgOiAxKVwiPnt7ZGF0YS5icmFuZE5hbWV9fTwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjYnJhbmRTdHlsZTI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwidy0xMDBcIj5cbiAgICAgICAgICAgICAgPHNpbXBvLWJyYW5kcy13aXRoLWltYWdlLWJhY2tncm91bmQtY29sdW1ucyBbcmVzcG9uc2VEYXRhXT1cInJlc3BvbnNlRGF0YVwiIFtzdHlsZXNdPVwic3R5bGVzXCJcbiAgICAgICAgICAgICAgICBbY29udGVudF09XCJjb250ZW50XCI+PC9zaW1wby1icmFuZHMtd2l0aC1pbWFnZS1iYWNrZ3JvdW5kLWNvbHVtbnM+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInN0eWxlcz8uZGV2aWRlcj8uZGlzcGxheVwiPlxuICAgICAgPHNpbXBvLXN2Zy1kaXZpZGVyIFtkaXZpZGVyVHlwZV09XCJzdHlsZXM/LmRldmlkZXI/LmRldmlkZXJUeXBlXCJcbiAgICAgICAgW2NvbG9yXT1cIm5leHRDb21wb25lbnRDb2xvcj8uY29sb3JcIj48L3NpbXBvLXN2Zy1kaXZpZGVyPlxuICAgIDwvbmctY29udGFpbmVyPlxuICAgIDxkaXYgW25nQ2xhc3NdPVwieydob3Zlcl9lZmZlY3QnOiBlZGl0fVwiICpuZ0lmPVwic2hvd0VkaXRvcnNcIj5cbiAgICAgIDxzaW1wby1ob3Zlci1lbGVtZW50cyBbZGF0YV09XCJkYXRhXCIgW2luZGV4XT1cImluZGV4XCIgW2VkaXRPcHRpb25zXT1cImVkaXRcIj48L3NpbXBvLWhvdmVyLWVsZW1lbnRzPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgKm5nSWY9XCJzaG93RGVsZXRlXCIgW25nQ2xhc3NdPVwieydob3Zlcl9lZmZlY3QnOiBkZWxldGV9XCI+XG4gICAgICA8c2ltcG8tZGVsZXRlLWhvdmVyLWVsZW1lbnQgW2RhdGFdPVwiZGF0YVwiIFtpbmRleF09XCJpbmRleFwiPjwvc2ltcG8tZGVsZXRlLWhvdmVyLWVsZW1lbnQ+XG4gICAgPC9kaXY+XG5cbiAgPC9zZWN0aW9uPlxuPC9uZy1jb250YWluZXI+XG5cbjxuZ3gtc2tlbGV0b24tbG9hZGVyICpuZ0lmPVwiaXNMb2FkaW5nXCIgY291bnQ9XCIxXCIgYXBwZWFyYW5jZT1cImNpcmNsZVwiIFt0aGVtZV09XCJ7XG4gIHdpZHRoOiAnMTAwJScsXG4gIGhlaWdodDogJzQwdmgnLFxuICAnYm9yZGVyLXJhZGl1cyc6ICcxMHB4JyxcbiAgJ3Bvc2l0aW9uJzogJ3JlbGF0aXZlJyxcbiAgJ3JpZ2h0JzogJzVweCdcbn1cIj5cbjwvbmd4LXNrZWxldG9uLWxvYWRlcj5cbiJdfQ==
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmVhdHVyZWQtYnJhbmQubW9kYWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zaW1wby11aS9zcmMvbGliL2Vjb21tZXJjZS9zZWN0aW9ucy9mZWF0dXJlZC1icmFuZC9mZWF0dXJlZC1icmFuZC5tb2RhbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTElOS19UWVBFIH0gZnJvbSBcIi4uLy4uLy4uL3N0eWxlcy90eXBlc1wiO1xuaW1wb3J0IHsgSW5wdXRUZXh0TW9kZWwsIERpc3BsYXlTZWN0aW9uLCBTdHlsZXNNb2RlbCwgSW1hZ2VTdHlsZSB9IGZyb20gXCIuLi8uLi8uLi9zdHlsZXMvc3R5bGUubW9kZWxcIjtcbmltcG9ydCB7IENvcm5lcnMgfSBmcm9tIFwiLi4vLi4vLi4vLi9zdHlsZXMvaW5kZXhcIjtcbmltcG9ydCB7IERpc3BsYXkgfSBmcm9tIFwiLi4vZmVhdHVyZWQtcHJvZHVjdHMvZmVhdHVyZWQtcHJvZHVjdHMubW9kYWxcIjtcblxuZXhwb3J0IGludGVyZmFjZSBGZWF0dXJlZEJyYW5kTW9kYWwge1xuICBpZDogc3RyaW5nLFxuICBzZWN0aW9uVHlwZTogc3RyaW5nLFxuICBzZWN0aW9uTmFtZTogc3RyaW5nLFxuICBjb250ZW50OiBGZWF0dXJlZEJyYW5kQ29udGVudE1vZGFsO1xuICBzdHlsZXM6IEZlYXR1cmVkQnJhbmRTdHlsZXNNb2RlbDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBGZWF0dXJlZEJyYW5kQ29udGVudE1vZGFsIHtcbiAgaW5wdXRUZXh0OiBJbnB1dFRleHRNb2RlbFtdO1xuICBjb2xsZWN0aW9uSWQ/OiBzdHJpbmc7XG4gIGNvbGxlY3Rpb25JZHM/OiBzdHJpbmdbXTtcbiAgZGlzcGxheTogRGlzcGxheTtcbiAgYnJhbmRzSWRzOiBzdHJpbmdbXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBGZWF0dXJlZEJyYW5kU3R5bGVzTW9kZWwgZXh0ZW5kcyBTdHlsZXNNb2RlbCB7XG4gIG1heGltdW1Qcm9kdWN0OiBudW1iZXI7XG4gIGRpcmVjdGlvbjogXCJST1dcIiB8IFwiQ09MVU1OXCIsXG4gIGNvbnRhaW5lckhlaWdodDogbnVtYmVyLFxuICBjb250YWluZXJXaWR0aDogbnVtYmVyLFxuICBjb3JuZXJzOiBDb3JuZXJzO1xuICBjb21wb25lbnRTdHlsZTogc3RyaW5nO1xufVxuIl19
@@ -56,18 +56,6 @@ export class VerifyComponent extends BaseSection {
56
56
  const orderId = localStorage.getItem("orderId");
57
57
  const appointmentPaymentId = localStorage.getItem("appointmentPaymentId");
58
58
  console.log('calling verify payment');
59
- // Stripe redirects back with ?redirect_status=succeeded|processing|failed. When Stripe
60
- // already reports a failure there is nothing to poll, so show the failed screen directly.
61
- const stripeRedirectStatus = new URLSearchParams(window.location.search).get('redirect_status');
62
- if (stripeRedirectStatus === 'failed') {
63
- localStorage.removeItem("orderId");
64
- localStorage.removeItem("paymentFor");
65
- this.paymentStatus = 'FAILED';
66
- setTimeout(() => {
67
- this.router.navigate(['/']);
68
- }, 3000);
69
- return;
70
- }
71
59
  if (passBookOrderId) {
72
60
  this.checkPassbookPaymentStatus();
73
61
  }
@@ -126,9 +114,7 @@ export class VerifyComponent extends BaseSection {
126
114
  // })
127
115
  }
128
116
  else {
129
- // Stripe confirms the order asynchronously (webhook), so give the backend a moment
130
- // between polls instead of firing all retries back-to-back.
131
- setTimeout(() => this.checkPaymentStatus(), 1500);
117
+ this.checkPaymentStatus();
132
118
  }
133
119
  });
134
120
  }
@@ -239,4 +225,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
239
225
  }], customClass: [{
240
226
  type: Input
241
227
  }] } });
242
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyaWZ5LXBheW1lbnQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2ltcG8tdWkvc3JjL2xpYi9lY29tbWVyY2Uvc2VjdGlvbnMvdmVyaWZ5LXBheW1lbnQvdmVyaWZ5LXBheW1lbnQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2ltcG8tdWkvc3JjL2xpYi9lY29tbWVyY2Uvc2VjdGlvbnMvdmVyaWZ5LXBheW1lbnQvdmVyaWZ5LXBheW1lbnQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFPekQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUM3QyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzVDLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBRTlFLE9BQU8sV0FBVyxNQUFNLCtCQUErQixDQUFDO0FBQ3hELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQUM1RSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSw2REFBNkQsQ0FBQztBQUNyRyxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSx5RUFBeUUsQ0FBQztBQUN0SCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sb0NBQW9DLENBQUM7Ozs7Ozs7OztBQWtCOUUsTUFBTSxPQUFPLGVBQWdCLFNBQVEsV0FBVztJQWE5QyxZQUNtQixXQUF3QixFQUN4QixNQUFjLEVBQ2QsY0FBcUMsRUFDckMsY0FBOEIsRUFDOUIsYUFBNEI7UUFFN0MsS0FBSyxFQUFFLENBQUM7UUFOUyxnQkFBVyxHQUFYLFdB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QUNWLENBQUM7K0dBNU5VLGVBQWU7bUdBQWYsZUFBZSx1TUFKZixDQUFDLGNBQWMsQ0FBQyxpREM5QjdCLDY3RkF5RUEsdytCRGpESSxXQUFXLDhCQUNYLFlBQVksa0lBR1osd0JBQXdCOzs0RkFNZixlQUFlO2tCQWhCM0IsU0FBUzsrQkFDRSxzQkFBc0IsY0FDcEIsSUFBSSxXQUNQO3dCQUNQLG1CQUFtQjt3QkFDbkIsY0FBYzt3QkFDZCxXQUFXO3dCQUNYLFlBQVk7d0JBQ1osc0JBQXNCO3dCQUN0QiwyQkFBMkI7d0JBQzNCLHdCQUF3QjtxQkFDekIsYUFDVSxDQUFDLGNBQWMsQ0FBQztrTUFNbEIsSUFBSTtzQkFBWixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgUmVzdFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9yZXN0LnNlcnZpY2UnO1xuaW1wb3J0IHsgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IFN0b3JhZ2VTZXJ2aWNlU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL3N0b3JhZ2Uuc2VydmljZSc7XG5pbXBvcnQgeyBWZXJpZnlQYXltZW50Q29udGVudE1vZGVsLCBWZXJpZnlQYXltZW50U2VjdGlvbk1vZGFsLCBWZXJpZnlQYXltZW50U3R5bGVzTW9kZWwgfSBmcm9tICcuL3ZlcmlmeS1wYXltZW50Lm1vZGVsJztcbmltcG9ydCBTd2FsIGZyb20gJ3N3ZWV0YWxlcnQyJztcbmltcG9ydCB7IFVzZXIgfSBmcm9tICcuLi8uLi9zdHlsZXMvdXNlci5tb2RhbCc7XG5pbXBvcnQgeyBNZXNzYWdlU2VydmljZSB9IGZyb20gJ3ByaW1lbmcvYXBpJztcbmltcG9ydCB7IFRvYXN0TW9kdWxlIH0gZnJvbSAncHJpbWVuZy90b2FzdCc7XG5pbXBvcnQgeyBCYWNrZ3JvdW5kRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vLi4vZGlyZWN0aXZlL2JhY2tncm91bmQtZGlyZWN0aXZlJztcbmltcG9ydCB7IEV2ZW50c1NlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9ldmVudHMuc2VydmljZSc7XG5pbXBvcnQgQmFzZVNlY3Rpb24gZnJvbSAnLi4vLi4vLi4vc2VjdGlvbnMvQmFzZVNlY3Rpb24nO1xuaW1wb3J0IHsgSG92ZXJEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi8uLi9kaXJlY3RpdmUvaG92ZXItZWxlbWVudC1kaXJlY3RpdmUnO1xuaW1wb3J0IHsgSG92ZXJFbGVtZW50c0NvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uL2NvbXBvbmVudHMvaG92ZXItZWxlbWVudHMvaG92ZXItZWxlbWVudHMuY29tcG9uZW50JztcbmltcG9ydCB7IERlbGV0ZUhvdmVyRWxlbWVudENvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uL2NvbXBvbmVudHMvZGVsZXRlLWhvdmVyLWVsZW1lbnQvZGVsZXRlLWhvdmVyLWVsZW1lbnQuY29tcG9uZW50JztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBNYXRQcm9ncmVzc1NwaW5uZXJNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9wcm9ncmVzcy1zcGlubmVyJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnc2ltcG8tdmVyaWZ5LXBheW1lbnQnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbXG4gICAgQmFja2dyb3VuZERpcmVjdGl2ZSxcbiAgICBIb3ZlckRpcmVjdGl2ZSxcbiAgICBUb2FzdE1vZHVsZSxcbiAgICBDb21tb25Nb2R1bGUsXG4gICAgSG92ZXJFbGVtZW50c0NvbXBvbmVudCxcbiAgICBEZWxldGVIb3ZlckVsZW1lbnRDb21wb25lbnQsXG4gICAgTWF0UHJvZ3Jlc3NTcGlubmVyTW9kdWxlXG4gIF0sXG4gIHByb3ZpZGVyczogW01lc3NhZ2VTZXJ2aWNlXSxcbiAgdGVtcGxhdGVVcmw6ICcuL3ZlcmlmeS1wYXltZW50LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmw6ICcuL3ZlcmlmeS1wYXltZW50LmNvbXBvbmVudC5jc3MnXG59KVxuZXhwb3J0IGNsYXNzIFZlcmlmeUNvbXBvbmVudCBleHRlbmRzIEJhc2VTZWN0aW9uIGltcGxlbWVudHMgT25Jbml0IHtcblxuICBASW5wdXQoKSBkYXRhPzogVmVyaWZ5UGF5bWVudFNlY3Rpb25Nb2RhbDtcbiAgQElucHV0KCkgcmVzcG9uc2VEYXRhOiBhbnk7XG4gIEBJbnB1dCgpIGVkaXQ/OiBib29sZWFuO1xuICBASW5wdXQoKSBpbmRleD86IG51bWJlcjtcbiAgQElucHV0KCkgZGVsZXRlPzogYm9vbGVhbjtcbiAgQElucHV0KCkgY3VzdG9tQ2xhc3M/OiBzdHJpbmc7XG4gIHN0eWxlcz86IFZlcmlmeVBheW1lbnRTdHlsZXNNb2RlbDtcbiAgY29udGVudD86IFZlcmlmeVBheW1lbnRDb250ZW50TW9kZWw7XG4gIHByaXZhdGUgdXNlckRldGFpbHM6IFVzZXIgfCBudWxsID0gbnVsbDtcbiAgcGF5bWVudFN0YXR1czogJ1NVQ0NFU1MnIHwgJ0ZBSUxFRCcgfCAnT05HT0lORycgPSAnT05HT0lORydcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IHJlc3RTZXJ2aWNlOiBSZXN0U2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHJvdXRlcjogUm91dGVyLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgc3RvcmFnZVNlcnZpY2U6IFN0b3JhZ2VTZXJ2aWNlU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IG1lc3NhZ2VTZXJ2aWNlOiBNZXNzYWdlU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9ldmVudFNlcnZpY2U6IEV2ZW50c1NlcnZpY2VcbiAgKSB7XG4gICAgc3VwZXIoKTtcbiAgfVxuXG4gIHB1YmxpYyBsb2FkaW5nVGV4dDogc3RyaW5nID0gXCJQbGVhc2Ugd2FpdC4uLlwiO1xuICBwcml2YXRlIEFQSV9DT1VOVDogbnVtYmVyID0gMDtcbiAgcHJpdmF0ZSBNQVhfQVBJX0NPVU5UOiBudW1iZXIgPSAyMDtcbiAgcHJpdmF0ZSBQQVNTQk9PS19BUElfQ09VTlQ6IG51bWJlciA9IDA7XG4gIHByaXZhdGUgQVBQT0lOVE1FTlRfQVBJX0NPVU5UOiBudW1iZXIgPSAwO1xuICBwcml2YXRlIE1BWF9QQVNTQk9PS19BUElfQ09VTlQgPSAyMDtcblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmNvbnRlbnQgPSB0aGlzLmRhdGE/LmNvbnRlbnQ7XG4gICAgdGhpcy5zdHlsZXMgPSB0aGlzLmRhdGE/LnN0eWxlcztcblxuICAgIHRoaXMudXNlckRldGFpbHMgPSB0aGlzLnN0b3JhZ2VTZXJ2aWNlLmdldFVzZXIoKSBhcyBVc2VyO1xuICAgIGlmICghdGhpcy51c2VyRGV0YWlscyAmJiAobG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJSRVFVRVNUX0ZST01cIikgPT0gXCJVU0VSXCIpKSB7XG4gICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmFkZCh7IHNldmVyaXR5OiAnZXJyb3InLCBzdW1tYXJ5OiAnRXJyb3InLCBkZXRhaWw6ICdQbGVhc2UgbG9naW4gdG8gYWNjZXNzIHByb2ZpbGUnIH0pO1xuICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycvJ10pO1xuICAgIH1cblxuICAgIC8vIGlmIChsb2NhbFN0b3JhZ2UuZ2V0SXRlbShcIlJFUVVFU1RfRlJPTVwiKSA9PSBcIkVDT01NRVJDRVwiKVxuICAgIC8vICAgcmV0dXJuO1xuXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLmxvYWRpbmdUZXh0ID0gJ1RoYW5rcyBmb3IgY2hvb3NpbmcgdXMnO1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMubG9hZGluZ1RleHQgPSAnV2UgYXJlIHByb2Nlc3NpbmcgeW91ciBwYXltZW50cyc7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIHRoaXMubG9hZGluZ1RleHQgPSAnSG9sZCBPbi4uLic7XG4gICAgICAgIH0sIDMwMDApO1xuICAgICAgfSwgMzAwMCk7XG4gICAgfSwgMzAwMCk7XG5cbiAgICBjb25zdCBwYXNzQm9va09yZGVySWQgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShcInBhc3Nib29rT3JkZXJJZFwiKTtcbiAgICBjb25zdCBvcmRlcklkID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJvcmRlcklkXCIpO1xuICAgIGNvbnN0IGFwcG9pbnRtZW50UGF5bWVudElkID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJhcHBvaW50bWVudFBheW1lbnRJZFwiKTtcbiAgICBjb25zb2xlLmxvZygnY2FsbGluZyB2ZXJpZnkgcGF5bWVudCcpO1xuXG4gICAgLy8gU3RyaXBlIHJlZGlyZWN0cyBiYWNrIHdpdGggP3JlZGlyZWN0X3N0YXR1cz1zdWNjZWVkZWR8cHJvY2Vzc2luZ3xmYWlsZWQuIFdoZW4gU3RyaXBlXG4gICAgLy8gYWxyZWFkeSByZXBvcnRzIGEgZmFpbHVyZSB0aGVyZSBpcyBub3RoaW5nIHRvIHBvbGwsIHNvIHNob3cgdGhlIGZhaWxlZCBzY3JlZW4gZGlyZWN0bHkuXG4gICAgY29uc3Qgc3RyaXBlUmVkaXJlY3RTdGF0dXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKHdpbmRvdy5sb2NhdGlvbi5zZWFyY2gpLmdldCgncmVkaXJlY3Rfc3RhdHVzJyk7XG4gICAgaWYgKHN0cmlwZVJlZGlyZWN0U3RhdHVzID09PSAnZmFpbGVkJykge1xuICAgICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oXCJvcmRlcklkXCIpO1xuICAgICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oXCJwYXltZW50Rm9yXCIpO1xuICAgICAgdGhpcy5wYXltZW50U3RhdHVzID0gJ0ZBSUxFRCc7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycvJ10pO1xuICAgICAgfSwgMzAwMCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHBhc3NCb29rT3JkZXJJZCkge1xuICAgICAgdGhpcy5jaGVja1Bhc3Nib29rUGF5bWVudFN0YXR1cygpO1xuICAgIH1cbiAgICBlbHNlIGlmIChvcmRlcklkKSB7XG4gICAgICB0aGlzLmNoZWNrUGF5bWVudFN0YXR1cygpO1xuICAgIH1cbiAgICBlbHNlIGlmIChhcHBvaW50bWVudFBheW1lbnRJZCkge1xuICAgICAgdGhpcy5jaGVja0FwcG9pbnRtZW50UGF5bWVudFN0YXR1cygpO1xuICAgIH1cbiAgfVxuXG4gIGdldCBnZXRJbWFnZVVybCgpIHtcbiAgICByZXR1cm4gdGhpcy5jb250ZW50Py5pbWFnZT8udXJsO1xuICB9XG4gIGdldCBpc01vYmlsZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gd2luZG93LmlubmVyV2lkdGggPCA0NzU7XG4gIH1cblxuICBwdWJsaWMgY2hlY2tQYXltZW50U3RhdHVzKCkge1xuICAgIGNvbnN0IHBheWxvYWQgPSB7XG4gICAgICBcIm9yZGVySWRcIjogbG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJvcmRlcklkXCIpXG4gICAgfVxuICAgIHRoaXMuQVBJX0NPVU5UKys7XG4gICAgdGhpcy5yZXN0U2VydmljZS5jaGVja1BheW1lbnRTdGF0dXMocGF5bG9hZCkuc3Vic2NyaWJlKChyZXNwb25zZSkgPT4ge1xuICAgICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oXCJvcmRlcklkXCIpO1xuICAgICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oXCJjYXJ0SWRcIik7XG4gICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShcInBheW1lbnRGb3JcIik7XG4gICAgICB0aGlzLnN0b3JhZ2VTZXJ2aWNlLmNsZWFyVXNlckNhcnQoKTtcbiAgICAgIHRoaXMucGF5bWVudFN0YXR1cyA9ICdTVUNDRVNTJ1xuXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycvcHJvZmlsZSddKTtcbiAgICAgIH0sIDMwMDApO1xuICAgICAgLy8gU3dhbC5maXJlKHtcbiAgICAgIC8vICAgaWNvbjogXCJzdWNjZXNzXCIsXG4gICAgICAvLyAgIHRpdGxlOiBcIkh1cnJheVwiLFxuICAgICAgLy8gICB0ZXh0OiBcIk9yZGVyIHBsYWNlZCBzdWNjZXNzZnVsbHlcIixcbiAgICAgIC8vICAgY29uZmlybUJ1dHRvblRleHQ6IFwiU2VlIERldGFpbHNcIlxuICAgICAgLy8gfSkudGhlbigocmVzcG9uc2UpID0+IHtcbiAgICAgIC8vICAgaWYgKHJlc3BvbnNlLmlzQ29uZmlybWVkKSB7XG4gICAgICAvLyAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycvcHJvZmlsZSddKTtcbiAgICAgIC8vICAgfVxuICAgICAgLy8gfSlcbiAgICB9LCAoZXJyb3IpID0+IHtcbiAgICAgIGlmICh0aGlzLkFQSV9DT1VOVCA+PSB0aGlzLk1BWF9BUElfQ09VTlQpIHtcbiAgICAgICAgdGhpcy5wYXltZW50U3RhdHVzID0gJ0ZBSUxFRCdcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycvJ10pO1xuICAgICAgICB9LCAzMDAwKTtcbiAgICAgICAgLy8gU3dhbC5maXJlKHtcbiAgICAgICAgLy8gICBpY29uOiBcImVycm9yXCIsXG4gICAgICAgIC8vICAgdGl0bGU6IFwiU29ycnlcIixcbiAgICAgICAgLy8gICB0ZXh0OiBcIldlIGVuY291bnRlcmVkIHNvbWUgaXNzdWUgd2hpbGUgcGxhY2luZyB5b3VyIG9yZGVyXCIsXG4gICAgICAgIC8vICAgY29uZmlybUJ1dHRvblRleHQ6IFwiR28gVG8gSG9tZVwiXG4gICAgICAgIC8vIH0pLnRoZW4oKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgIC8vICAgaWYgKHJlc3BvbnNlLmlzQ29uZmlybWVkKSB7XG4gICAgICAgIC8vICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy8nXSk7XG4gICAgICAgIC8vICAgfVxuICAgICAgICAvLyB9KVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gU3RyaXBlIGNvbmZpcm1zIHRoZSBvcmRlciBhc3luY2hyb25vdXNseSAod2ViaG9vayksIHNvIGdpdmUgdGhlIGJhY2tlbmQgYSBtb21lbnRcbiAgICAgICAgLy8gYmV0d2VlbiBwb2xscyBpbnN0ZWFkIG9mIGZpcmluZyBhbGwgcmV0cmllcyBiYWNrLXRvLWJhY2suXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5jaGVja1BheW1lbnRTdGF0dXMoKSwgMTUwMCk7XG4gICAgICB9XG4gICAgfSlcbiAgfVxuICBwdWJsaWMgY2hlY2tQYXNzYm9va1BheW1lbnRTdGF0dXMoKSB7XG4gICAgY29uc3Qgb3JkZXJJZCA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKFwicGFzc2Jvb2tPcmRlcklkXCIpXG4gICAgdGhpcy5QQVNTQk9PS19BUElfQ09VTlQrKztcbiAgICB0aGlzLnJlc3RTZXJ2aWNlLmdldFBhc3Nib29rT3JkZXJTdGF0dXMob3JkZXJJZCkuc3Vic2NyaWJlKChyZXNwb25zZSkgPT4ge1xuICAgICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oXCJwYXNzYm9va09yZGVySWRcIik7XG4gICAgICB0aGlzLnBheW1lbnRTdGF0dXMgPSAnU1VDQ0VTUydcblxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnL3Byb2ZpbGUnXSk7XG4gICAgICB9LCAzMDAwKTtcbiAgICAgIC8vIFN3YWwuZmlyZSh7XG4gICAgICAvLyAgIGljb246IFwic3VjY2Vzc1wiLFxuICAgICAgLy8gICB0aXRsZTogXCJIdXJyYXlcIixcbiAgICAgIC8vICAgdGV4dDogXCJQYXltZW50IFN1Y2Nlc3NmdWxcIixcbiAgICAgIC8vICAgY29uZmlybUJ1dHRvblRleHQ6IFwiU2VlIERldGFpbHNcIlxuICAgICAgLy8gfSkudGhlbigocmVzcG9uc2UpID0+IHtcbiAgICAgIC8vICAgaWYgKHJlc3BvbnNlLmlzQ29uZmlybWVkKSB7XG4gICAgICAvLyAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycvcHJvZmlsZSddLCB7cXVlcnlQYXJhbXM6IHt0YWI6ICdTY2hlbWUgUGFzc2Jvb2snfX0pO1xuICAgICAgLy8gICB9XG4gICAgICAvLyB9KVxuXG4gICAgfSwgKGVycm9yKSA9PiB7XG4gICAgICBpZiAodGhpcy5QQVNTQk9PS19BUElfQ09VTlQgPj0gdGhpcy5NQVhfUEFTU0JPT0tfQVBJX0NPVU5UKSB7XG4gICAgICAgIC8vIFN3YWwuZmlyZSh7XG4gICAgICAgIC8vICAgaWNvbjogXCJlcnJvclwiLFxuICAgICAgICAvLyAgIHRpdGxlOiBcIlNvcnJ5XCIsXG4gICAgICAgIC8vICAgdGV4dDogXCJXZSBlbmNvdW50ZXJlZCBzb21lIGlzc3VlIHdoaWxlIHBsYWNpbmcgeW91ciBvcmRlclwiLFxuICAgICAgICAvLyAgIGNvbmZpcm1CdXR0b25UZXh0OiBcIkdvIFRvIEhvbWVcIlxuICAgICAgICAvLyB9KS50aGVuKChyZXNwb25zZSkgPT4ge1xuICAgICAgICAvLyAgIGlmIChyZXNwb25zZS5pc0NvbmZpcm1lZCkge1xuICAgICAgICAvLyAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycvJ10pO1xuICAgICAgICAvLyAgIH1cbiAgICAgICAgLy8gfSlcbiAgICAgICAgdGhpcy5wYXltZW50U3RhdHVzID0gJ0ZBSUxFRCdcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycvJ10pO1xuICAgICAgICB9LCAzMDAwKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuY2hlY2tQYXNzYm9va1BheW1lbnRTdGF0dXMoKTtcbiAgICAgIH1cbiAgICB9KVxuICB9XG4gIHB1YmxpYyBjaGVja0FwcG9pbnRtZW50UGF5bWVudFN0YXR1cygpIHtcbiAgICBjb25zdCBvcmRlcklkID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJhcHBvaW50bWVudFBheW1lbnRJZFwiKVxuICAgIHRoaXMuQVBQT0lOVE1FTlRfQVBJX0NPVU5UKys7XG4gICAgdGhpcy5yZXN0U2VydmljZS5nZXRBcHBvaW50bWVudFBheW1lbnRTdGF0dXMob3JkZXJJZCkuc3Vic2NyaWJlKChyZXNwb25zZSkgPT4ge1xuICAgICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oXCJhcHBvaW50bWVudFBheW1lbnRJZFwiKTtcbiAgICAgIHRoaXMucGF5bWVudFN0YXR1cyA9ICdTVUNDRVNTJ1xuXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycvcHJvZmlsZSddKTtcbiAgICAgIH0sIDMwMDApO1xuXG4gICAgfSwgKGVycm9yKSA9PiB7XG4gICAgICBpZiAodGhpcy5BUFBPSU5UTUVOVF9BUElfQ09VTlQgPj0gdGhpcy5NQVhfQVBJX0NPVU5UKSB7XG4gICAgICAgIC8vIFN3YWwuZmlyZSh7XG4gICAgICAgIC8vICAgaWNvbjogXCJlcnJvclwiLFxuICAgICAgICAvLyAgIHRpdGxlOiBcIlNvcnJ5XCIsXG4gICAgICAgIC8vICAgdGV4dDogXCJXZSBlbmNvdW50ZXJlZCBzb21lIGlzc3VlIHdoaWxlIHBsYWNpbmcgeW91ciBvcmRlclwiLFxuICAgICAgICAvLyAgIGNvbmZpcm1CdXR0b25UZXh0OiBcIkdvIFRvIEhvbWVcIlxuICAgICAgICAvLyB9KS50aGVuKChyZXNwb25zZSkgPT4ge1xuICAgICAgICAvLyAgIGlmIChyZXNwb25zZS5pc0NvbmZpcm1lZCkge1xuICAgICAgICAvLyAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycvJ10pO1xuICAgICAgICAvLyAgIH1cbiAgICAgICAgLy8gfSlcbiAgICAgICAgdGhpcy5wYXltZW50U3RhdHVzID0gJ0ZBSUxFRCdcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycvJ10pO1xuICAgICAgICB9LCAzMDAwKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuY2hlY2tBcHBvaW50bWVudFBheW1lbnRTdGF0dXMoKTtcbiAgICAgIH1cbiAgICB9KVxuICB9XG4gIGVkaXRTZWN0aW9uKCkge1xuXG4gICAgaWYgKHdpbmRvdy5pbm5lcldpZHRoIDw9IDQ3NSlcbiAgICAgIHJldHVybjtcblxuICAgIHRoaXMuX2V2ZW50U2VydmljZS50b2dnbGVFZGl0b3JFdmVudC5lbWl0KGZhbHNlKTtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuX2V2ZW50U2VydmljZS5lZGl0U2VjdGlvbi5lbWl0KHsgZGF0YTogdGhpcy5kYXRhIH0pO1xuICAgIH0sIDEwMCk7XG4gIH1cbn1cbiIsIjwhLS0gPHAtdG9hc3QgcG9zaXRpb249XCJib3R0b20tcmlnaHRcIiBbYmFzZVpJbmRleF09XCIxMDAwMDAwMDAwMFwiIFthdXRvWkluZGV4XT1cInRydWVcIiBbc2hvd1RyYW5zZm9ybU9wdGlvbnNdPVwiaXNNb2JpbGUgPyAndHJhbnNsYXRlWSgtMTAwJSknIDogJydcIj48L3AtdG9hc3Q+XG48c2VjdGlvbiBjbGFzcz1cImQtZmxleCBmbGV4LWNvbHVtbiBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWNlbnRlciB0b3RhbC1jb250YWluZXJcIiBzdHlsZT1cImhlaWdodDogMTAwdmg7XCIgW3NpbXBvQmFja2dyb3VuZF09XCJzdHlsZXM/LmJhY2tncm91bmRcIiBzaW1wb0hvdmVyIChob3ZlcmluZyk9XCJzaG93RWRpdFRhYnMoJGV2ZW50KVwiIFthdHRyLnN0eWxlXT1cImN1c3RvbUNsYXNzXCI+XG4gICAgPGltZyBsb2FkaW5nPVwibGF6eVwiIG9uZXJyb3I9XCJ0aGlzLnNyYz0naHR0cHM6Ly9pLnBvc3RpbWcuY2MvaFBTMkpwVjAvbm8taW1hZ2UtYXZhaWxhYmxlLmpwZydcIiAgIFtzcmNdPVwiZ2V0SW1hZ2VVcmxcIiBzdHlsZT1cImhlaWdodDogMjAwcHg7IHdpZHRoOiAyMDBweDtcIiBbYWx0XT1cImNvbnRlbnQ/LmltYWdlPy5hbHRUZXh0XCI+XG4gICAgPHNwYW4gY2xhc3M9XCJmb250LWJvbGRcIj57e2xvYWRpbmdUZXh0fX08L3NwYW4+XG5cbiAgICA8ZGl2IFtuZ0NsYXNzXT1cInsnaG92ZXJfZWZmZWN0JzogZWRpdH1cIiAqbmdJZj1cInNob3dFZGl0b3JzXCI+XG4gICAgICA8c2ltcG8taG92ZXItZWxlbWVudHMgW2RhdGFdPVwiZGF0YVwiIFtpbmRleF09XCJpbmRleFwiIFtlZGl0T3B0aW9uc109XCJlZGl0XCIgW2lzRWNvbW1lcmNlXT1cInRydWVcIj48L3NpbXBvLWhvdmVyLWVsZW1lbnRzPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgKm5nSWY9XCJzaG93RGVsZXRlXCIgW25nQ2xhc3NdPVwieydob3Zlcl9lZmZlY3QnOiBkZWxldGV9XCI+XG4gICAgICA8c2ltcG8tZGVsZXRlLWhvdmVyLWVsZW1lbnQgW2RhdGFdPVwiZGF0YVwiIFtpbmRleF09XCJpbmRleFwiPjwvc2ltcG8tZGVsZXRlLWhvdmVyLWVsZW1lbnQ+XG4gIDwvZGl2PlxuPC9zZWN0aW9uPiAtLT5cbjxzZWN0aW9uICpuZ0lmPVwicGF5bWVudFN0YXR1cyA9PT0gJ1NVQ0NFU1MnXCIgY2xhc3M9XCJtYWluX3NlY3Rpb25cIj5cbiAgPGRpdiBjbGFzcz1cImltYWdlX3NlY3Rpb25cIj5cbiAgICA8aW1nIGFsdD1cImxvYWRlclwiIHNyYz1cImh0dHBzOi8vZDJ6OTQ5N3hwOHhiMTIuY2xvdWRmcm9udC5uZXQvcHJvZC1pbWFnZXMvNjg4OTk2YzE3NTU5MzQ5MDg1Mjc5NjIzNy1zdWNjZXNzLmdpZlwiPlxuICA8L2Rpdj5cbiAgPGRpdiBjbGFzcz1cInN1Y2Nlc3NfaGVhZGluZyBoZWFkaW5nXCI+XG4gICAgUGF5bWVudCBTdWNjZXNzZnVsbFxuICA8L2Rpdj5cbiAgPGRpdiBjbGFzcz1cInBheW1lbnRfc3ViX3RleHRcIj5cbiAgICBZb3VyIHBheW1lbnQgaGFzIGJlZW4gc3VjY2Vzc2Z1bGx5IHByb2Nlc3NlZC5cbiAgPC9kaXY+XG4gIDwhLS0gPGRpdiBjbGFzcz1cInBsYW5fZGVzY3JpcHRpb25cIj5cbiAgICA8ZGl2IGNsYXNzPVwidGl0bGVfdmFsdWVcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJwbGFuX3RpdGxlXCI+XG4gICAgICAgIFN1YnNjcmliZWQgUGxhblxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwicGxhbl92YWx1ZVwiPlxuICAgICAgICB7eyBwbGFuTmFtZSB8IHRpdGxlY2FzZSB9fVxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cInRpdGxlX3ZhbHVlXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwicGxhbl90aXRsZVwiPlxuICAgICAgICBBbW91bnQgUGFpZFxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwicGxhbl92YWx1ZVwiPlxuICAgICAgICA8c3Bhbj7igrk8L3NwYW4+PHNwYW4+e3sgcGxhbkFtb3VudCB9fTwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJ0aXRsZV92YWx1ZVwiPlxuICAgICAgPGRpdiBjbGFzcz1cInBsYW5fdGl0bGVcIj5cbiAgICAgICAgVmFsaWQgdGlsbFxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwicGxhbl92YWx1ZVwiPlxuICAgICAgICB7eyB2YWxpZGl0eSB8IGRhdGUgfX1cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj4gLS0+XG48L3NlY3Rpb24+XG48c2VjdGlvbiAqbmdJZj1cInBheW1lbnRTdGF0dXMgPT09ICdGQUlMRUQnXCIgY2xhc3M9XCJtYWluX3NlY3Rpb25cIj5cbiAgPGRpdiBjbGFzcz1cImltYWdlX3NlY3Rpb25cIj5cbiAgICA8aW1nIGFsdD1cImxvYWRlclwiIHNyYz1cImh0dHBzOi8vZDJ6OTQ5N3hwOHhiMTIuY2xvdWRmcm9udC5uZXQvcHJvZC1pbWFnZXMvNjYzODc4YzE3NTU5MzQ5MzI1NzNwYXltZW50ZmFpbGVkLmdpZlwiPlxuICA8L2Rpdj5cbiAgPGRpdiBjbGFzcz1cInN1Y2Nlc3NfaGVhZGluZyBoZWFkaW5nXCI+XG4gICAgUGF5bWVudCBGYWlsZWRcbiAgPC9kaXY+XG4gIDxkaXYgY2xhc3M9XCJwYXltZW50X3N1Yl90ZXh0XCI+XG4gICAgVW5mb3J0dW5hdGVseSBQYXltZW50IHdhcyByZWplY3RlZFxuICA8L2Rpdj5cbiAgPGRpdiBjbGFzcz1cInBheW1lbnRfbWluaW1hbF90ZXh0XCI+XG4gICAgUGFnZSB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgcmVkaXJlY3QgdG8gaG9tZXBhZ2VcbiAgPC9kaXY+XG4gIDwhLS0gPGRpdiBjbGFzcz1cInBsYW5fZGVzY3JpcHRpb25cIj5cbiAgICAgIDxidXR0b24gKGNsaWNrKT1cImRvbmUoKVwiPkRvbmU8L2J1dHRvbj5cbiAgPC9kaXY+IC0tPlxuPC9zZWN0aW9uPlxuXG48c2VjdGlvbiAqbmdJZj1cInBheW1lbnRTdGF0dXMgPT09ICdPTkdPSU5HJ1wiIGNsYXNzPVwibWFpbl9zZWN0aW9uIHNwaW5uZXJcIj5cbiAgPGRpdiBjbGFzcz1cInBheW1lbnQtb25nb2luZ1wiPlxuICAgIDxtYXQtc3Bpbm5lciBzdHlsZT1cIndpZHRoOiAxMDAlO1wiPjwvbWF0LXNwaW5uZXI+XG4gICAgPHA+e3tsb2FkaW5nVGV4dH19PC9wPlxuICA8L2Rpdj5cbjwvc2VjdGlvbj5cbiJdfQ==
228
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyaWZ5LXBheW1lbnQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2ltcG8tdWkvc3JjL2xpYi9lY29tbWVyY2Uvc2VjdGlvbnMvdmVyaWZ5LXBheW1lbnQvdmVyaWZ5LXBheW1lbnQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2ltcG8tdWkvc3JjL2xpYi9lY29tbWVyY2Uvc2VjdGlvbnMvdmVyaWZ5LXBheW1lbnQvdmVyaWZ5LXBheW1lbnQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFPekQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUM3QyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzVDLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBRTlFLE9BQU8sV0FBVyxNQUFNLCtCQUErQixDQUFDO0FBQ3hELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQUM1RSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSw2REFBNkQsQ0FBQztBQUNyRyxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSx5RUFBeUUsQ0FBQztBQUN0SCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sb0NBQW9DLENBQUM7Ozs7Ozs7OztBQWtCOUUsTUFBTSxPQUFPLGVBQWdCLFNBQVEsV0FBVztJQWE5QyxZQUNtQixXQUF3QixFQUN4QixNQUFjLEVBQ2QsY0FBcUMsRUFDckMsY0FBOEIsRUFDOUIsYUFBNEI7UUFFN0MsS0FBSyxFQUFFLENBQUM7UUFOUyxnQkFBVyxHQUFYLFdB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R0FBRyxDQUFDLENBQUMsQ0FBQztnQkFDOUIsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQ1gsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLElBQUksQ0FBQyw2QkFBNkIsRUFBRSxDQUFDO1lBQ3ZDLENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQTtJQUNKLENBQUM7SUFDRCxXQUFXO1FBRVQsSUFBSSxNQUFNLENBQUMsVUFBVSxJQUFJLEdBQUc7WUFDMUIsT0FBTztRQUVULElBQUksQ0FBQyxhQUFhLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2pELFVBQVUsQ0FBQyxHQUFHLEVBQUU7WUFDZCxJQUFJLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7UUFDM0QsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ1YsQ0FBQzsrR0E1TVUsZUFBZTttR0FBZixlQUFlLHVNQUpmLENBQUMsY0FBYyxDQUFDLGlEQzlCN0IsNjdGQXlFQSx3K0JEakRJLFdBQVcsOEJBQ1gsWUFBWSxrSUFHWix3QkFBd0I7OzRGQU1mLGVBQWU7a0JBaEIzQixTQUFTOytCQUNFLHNCQUFzQixjQUNwQixJQUFJLFdBQ1A7d0JBQ1AsbUJBQW1CO3dCQUNuQixjQUFjO3dCQUNkLFdBQVc7d0JBQ1gsWUFBWTt3QkFDWixzQkFBc0I7d0JBQ3RCLDJCQUEyQjt3QkFDM0Isd0JBQXdCO3FCQUN6QixhQUNVLENBQUMsY0FBYyxDQUFDO2tNQU1sQixJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBSZXN0U2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL3Jlc3Quc2VydmljZSc7XG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgU3RvcmFnZVNlcnZpY2VTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvc3RvcmFnZS5zZXJ2aWNlJztcbmltcG9ydCB7IFZlcmlmeVBheW1lbnRDb250ZW50TW9kZWwsIFZlcmlmeVBheW1lbnRTZWN0aW9uTW9kYWwsIFZlcmlmeVBheW1lbnRTdHlsZXNNb2RlbCB9IGZyb20gJy4vdmVyaWZ5LXBheW1lbnQubW9kZWwnO1xuaW1wb3J0IFN3YWwgZnJvbSAnc3dlZXRhbGVydDInO1xuaW1wb3J0IHsgVXNlciB9IGZyb20gJy4uLy4uL3N0eWxlcy91c2VyLm1vZGFsJztcbmltcG9ydCB7IE1lc3NhZ2VTZXJ2aWNlIH0gZnJvbSAncHJpbWVuZy9hcGknO1xuaW1wb3J0IHsgVG9hc3RNb2R1bGUgfSBmcm9tICdwcmltZW5nL3RvYXN0JztcbmltcG9ydCB7IEJhY2tncm91bmREaXJlY3RpdmUgfSBmcm9tICcuLi8uLi8uLi9kaXJlY3RpdmUvYmFja2dyb3VuZC1kaXJlY3RpdmUnO1xuaW1wb3J0IHsgRXZlbnRzU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2V2ZW50cy5zZXJ2aWNlJztcbmltcG9ydCBCYXNlU2VjdGlvbiBmcm9tICcuLi8uLi8uLi9zZWN0aW9ucy9CYXNlU2VjdGlvbic7XG5pbXBvcnQgeyBIb3ZlckRpcmVjdGl2ZSB9IGZyb20gJy4uLy4uLy4uL2RpcmVjdGl2ZS9ob3Zlci1lbGVtZW50LWRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBIb3ZlckVsZW1lbnRzQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vY29tcG9uZW50cy9ob3Zlci1lbGVtZW50cy9ob3Zlci1lbGVtZW50cy5jb21wb25lbnQnO1xuaW1wb3J0IHsgRGVsZXRlSG92ZXJFbGVtZW50Q29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vY29tcG9uZW50cy9kZWxldGUtaG92ZXItZWxlbWVudC9kZWxldGUtaG92ZXItZWxlbWVudC5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IE1hdFByb2dyZXNzU3Bpbm5lck1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3Byb2dyZXNzLXNwaW5uZXInO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdzaW1wby12ZXJpZnktcGF5bWVudCcsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtcbiAgICBCYWNrZ3JvdW5kRGlyZWN0aXZlLFxuICAgIEhvdmVyRGlyZWN0aXZlLFxuICAgIFRvYXN0TW9kdWxlLFxuICAgIENvbW1vbk1vZHVsZSxcbiAgICBIb3ZlckVsZW1lbnRzQ29tcG9uZW50LFxuICAgIERlbGV0ZUhvdmVyRWxlbWVudENvbXBvbmVudCxcbiAgICBNYXRQcm9ncmVzc1NwaW5uZXJNb2R1bGVcbiAgXSxcbiAgcHJvdmlkZXJzOiBbTWVzc2FnZVNlcnZpY2VdLFxuICB0ZW1wbGF0ZVVybDogJy4vdmVyaWZ5LXBheW1lbnQuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybDogJy4vdmVyaWZ5LXBheW1lbnQuY29tcG9uZW50LmNzcydcbn0pXG5leHBvcnQgY2xhc3MgVmVyaWZ5Q29tcG9uZW50IGV4dGVuZHMgQmFzZVNlY3Rpb24gaW1wbGVtZW50cyBPbkluaXQge1xuXG4gIEBJbnB1dCgpIGRhdGE/OiBWZXJpZnlQYXltZW50U2VjdGlvbk1vZGFsO1xuICBASW5wdXQoKSByZXNwb25zZURhdGE6IGFueTtcbiAgQElucHV0KCkgZWRpdD86IGJvb2xlYW47XG4gIEBJbnB1dCgpIGluZGV4PzogbnVtYmVyO1xuICBASW5wdXQoKSBkZWxldGU/OiBib29sZWFuO1xuICBASW5wdXQoKSBjdXN0b21DbGFzcz86IHN0cmluZztcbiAgc3R5bGVzPzogVmVyaWZ5UGF5bWVudFN0eWxlc01vZGVsO1xuICBjb250ZW50PzogVmVyaWZ5UGF5bWVudENvbnRlbnRNb2RlbDtcbiAgcHJpdmF0ZSB1c2VyRGV0YWlsczogVXNlciB8IG51bGwgPSBudWxsO1xuICBwYXltZW50U3RhdHVzOiAnU1VDQ0VTUycgfCAnRkFJTEVEJyB8ICdPTkdPSU5HJyA9ICdPTkdPSU5HJ1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgcmVzdFNlcnZpY2U6IFJlc3RTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgcm91dGVyOiBSb3V0ZXIsXG4gICAgcHJpdmF0ZSByZWFkb25seSBzdG9yYWdlU2VydmljZTogU3RvcmFnZVNlcnZpY2VTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgbWVzc2FnZVNlcnZpY2U6IE1lc3NhZ2VTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgX2V2ZW50U2VydmljZTogRXZlbnRzU2VydmljZVxuICApIHtcbiAgICBzdXBlcigpO1xuICB9XG5cbiAgcHVibGljIGxvYWRpbmdUZXh0OiBzdHJpbmcgPSBcIlBsZWFzZSB3YWl0Li4uXCI7XG4gIHByaXZhdGUgQVBJX0NPVU5UOiBudW1iZXIgPSAwO1xuICBwcml2YXRlIE1BWF9BUElfQ09VTlQ6IG51bWJlciA9IDIwO1xuICBwcml2YXRlIFBBU1NCT09LX0FQSV9DT1VOVDogbnVtYmVyID0gMDtcbiAgcHJpdmF0ZSBBUFBPSU5UTUVOVF9BUElfQ09VTlQ6IG51bWJlciA9IDA7XG4gIHByaXZhdGUgTUFYX1BBU1NCT09LX0FQSV9DT1VOVCA9IDIwO1xuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuY29udGVudCA9IHRoaXMuZGF0YT8uY29udGVudDtcbiAgICB0aGlzLnN0eWxlcyA9IHRoaXMuZGF0YT8uc3R5bGVzO1xuXG4gICAgdGhpcy51c2VyRGV0YWlscyA9IHRoaXMuc3RvcmFnZVNlcnZpY2UuZ2V0VXNlcigpIGFzIFVzZXI7XG4gICAgaWYgKCF0aGlzLnVzZXJEZXRhaWxzICYmIChsb2NhbFN0b3JhZ2UuZ2V0SXRlbShcIlJFUVVFU1RfRlJPTVwiKSA9PSBcIlVTRVJcIikpIHtcbiAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuYWRkKHsgc2V2ZXJpdHk6ICdlcnJvcicsIHN1bW1hcnk6ICdFcnJvcicsIGRldGFpbDogJ1BsZWFzZSBsb2dpbiB0byBhY2Nlc3MgcHJvZmlsZScgfSk7XG4gICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy8nXSk7XG4gICAgfVxuXG4gICAgLy8gaWYgKGxvY2FsU3RvcmFnZS5nZXRJdGVtKFwiUkVRVUVTVF9GUk9NXCIpID09IFwiRUNPTU1FUkNFXCIpXG4gICAgLy8gICByZXR1cm47XG5cbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMubG9hZGluZ1RleHQgPSAnVGhhbmtzIGZvciBjaG9vc2luZyB1cyc7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5sb2FkaW5nVGV4dCA9ICdXZSBhcmUgcHJvY2Vzc2luZyB5b3VyIHBheW1lbnRzJztcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgdGhpcy5sb2FkaW5nVGV4dCA9ICdIb2xkIE9uLi4uJztcbiAgICAgICAgfSwgMzAwMCk7XG4gICAgICB9LCAzMDAwKTtcbiAgICB9LCAzMDAwKTtcblxuICAgIGNvbnN0IHBhc3NCb29rT3JkZXJJZCA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKFwicGFzc2Jvb2tPcmRlcklkXCIpO1xuICAgIGNvbnN0IG9yZGVySWQgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShcIm9yZGVySWRcIik7XG4gICAgY29uc3QgYXBwb2ludG1lbnRQYXltZW50SWQgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShcImFwcG9pbnRtZW50UGF5bWVudElkXCIpO1xuICAgIGNvbnNvbGUubG9nKCdjYWxsaW5nIHZlcmlmeSBwYXltZW50Jyk7XG4gICAgaWYgKHBhc3NCb29rT3JkZXJJZCkge1xuICAgICAgdGhpcy5jaGVja1Bhc3Nib29rUGF5bWVudFN0YXR1cygpO1xuICAgIH1cbiAgICBlbHNlIGlmIChvcmRlcklkKSB7XG4gICAgICB0aGlzLmNoZWNrUGF5bWVudFN0YXR1cygpO1xuICAgIH1cbiAgICBlbHNlIGlmIChhcHBvaW50bWVudFBheW1lbnRJZCkge1xuICAgICAgdGhpcy5jaGVja0FwcG9pbnRtZW50UGF5bWVudFN0YXR1cygpO1xuICAgIH1cbiAgfVxuXG4gIGdldCBnZXRJbWFnZVVybCgpIHtcbiAgICByZXR1cm4gdGhpcy5jb250ZW50Py5pbWFnZT8udXJsO1xuICB9XG4gIGdldCBpc01vYmlsZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gd2luZG93LmlubmVyV2lkdGggPCA0NzU7XG4gIH1cblxuICBwdWJsaWMgY2hlY2tQYXltZW50U3RhdHVzKCkge1xuICAgIGNvbnN0IHBheWxvYWQgPSB7XG4gICAgICBcIm9yZGVySWRcIjogbG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJvcmRlcklkXCIpXG4gICAgfVxuICAgIHRoaXMuQVBJX0NPVU5UKys7XG4gICAgdGhpcy5yZXN0U2VydmljZS5jaGVja1BheW1lbnRTdGF0dXMocGF5bG9hZCkuc3Vic2NyaWJlKChyZXNwb25zZSkgPT4ge1xuICAgICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oXCJvcmRlcklkXCIpO1xuICAgICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oXCJjYXJ0SWRcIik7XG4gICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShcInBheW1lbnRGb3JcIik7XG4gICAgICB0aGlzLnN0b3JhZ2VTZXJ2aWNlLmNsZWFyVXNlckNhcnQoKTtcbiAgICAgIHRoaXMucGF5bWVudFN0YXR1cyA9ICdTVUNDRVNTJ1xuXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycvcHJvZmlsZSddKTtcbiAgICAgIH0sIDMwMDApO1xuICAgICAgLy8gU3dhbC5maXJlKHtcbiAgICAgIC8vICAgaWNvbjogXCJzdWNjZXNzXCIsXG4gICAgICAvLyAgIHRpdGxlOiBcIkh1cnJheVwiLFxuICAgICAgLy8gICB0ZXh0OiBcIk9yZGVyIHBsYWNlZCBzdWNjZXNzZnVsbHlcIixcbiAgICAgIC8vICAgY29uZmlybUJ1dHRvblRleHQ6IFwiU2VlIERldGFpbHNcIlxuICAgICAgLy8gfSkudGhlbigocmVzcG9uc2UpID0+IHtcbiAgICAgIC8vICAgaWYgKHJlc3BvbnNlLmlzQ29uZmlybWVkKSB7XG4gICAgICAvLyAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycvcHJvZmlsZSddKTtcbiAgICAgIC8vICAgfVxuICAgICAgLy8gfSlcbiAgICB9LCAoZXJyb3IpID0+IHtcbiAgICAgIGlmICh0aGlzLkFQSV9DT1VOVCA+PSB0aGlzLk1BWF9BUElfQ09VTlQpIHtcbiAgICAgICAgdGhpcy5wYXltZW50U3RhdHVzID0gJ0ZBSUxFRCdcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycvJ10pO1xuICAgICAgICB9LCAzMDAwKTtcbiAgICAgICAgLy8gU3dhbC5maXJlKHtcbiAgICAgICAgLy8gICBpY29uOiBcImVycm9yXCIsXG4gICAgICAgIC8vICAgdGl0bGU6IFwiU29ycnlcIixcbiAgICAgICAgLy8gICB0ZXh0OiBcIldlIGVuY291bnRlcmVkIHNvbWUgaXNzdWUgd2hpbGUgcGxhY2luZyB5b3VyIG9yZGVyXCIsXG4gICAgICAgIC8vICAgY29uZmlybUJ1dHRvblRleHQ6IFwiR28gVG8gSG9tZVwiXG4gICAgICAgIC8vIH0pLnRoZW4oKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgIC8vICAgaWYgKHJlc3BvbnNlLmlzQ29uZmlybWVkKSB7XG4gICAgICAgIC8vICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy8nXSk7XG4gICAgICAgIC8vICAgfVxuICAgICAgICAvLyB9KVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5jaGVja1BheW1lbnRTdGF0dXMoKTtcbiAgICAgIH1cbiAgICB9KVxuICB9XG4gIHB1YmxpYyBjaGVja1Bhc3Nib29rUGF5bWVudFN0YXR1cygpIHtcbiAgICBjb25zdCBvcmRlcklkID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJwYXNzYm9va09yZGVySWRcIilcbiAgICB0aGlzLlBBU1NCT09LX0FQSV9DT1VOVCsrO1xuICAgIHRoaXMucmVzdFNlcnZpY2UuZ2V0UGFzc2Jvb2tPcmRlclN0YXR1cyhvcmRlcklkKS5zdWJzY3JpYmUoKHJlc3BvbnNlKSA9PiB7XG4gICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShcInBhc3Nib29rT3JkZXJJZFwiKTtcbiAgICAgIHRoaXMucGF5bWVudFN0YXR1cyA9ICdTVUNDRVNTJ1xuXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycvcHJvZmlsZSddKTtcbiAgICAgIH0sIDMwMDApO1xuICAgICAgLy8gU3dhbC5maXJlKHtcbiAgICAgIC8vICAgaWNvbjogXCJzdWNjZXNzXCIsXG4gICAgICAvLyAgIHRpdGxlOiBcIkh1cnJheVwiLFxuICAgICAgLy8gICB0ZXh0OiBcIlBheW1lbnQgU3VjY2Vzc2Z1bFwiLFxuICAgICAgLy8gICBjb25maXJtQnV0dG9uVGV4dDogXCJTZWUgRGV0YWlsc1wiXG4gICAgICAvLyB9KS50aGVuKChyZXNwb25zZSkgPT4ge1xuICAgICAgLy8gICBpZiAocmVzcG9uc2UuaXNDb25maXJtZWQpIHtcbiAgICAgIC8vICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy9wcm9maWxlJ10sIHtxdWVyeVBhcmFtczoge3RhYjogJ1NjaGVtZSBQYXNzYm9vayd9fSk7XG4gICAgICAvLyAgIH1cbiAgICAgIC8vIH0pXG5cbiAgICB9LCAoZXJyb3IpID0+IHtcbiAgICAgIGlmICh0aGlzLlBBU1NCT09LX0FQSV9DT1VOVCA+PSB0aGlzLk1BWF9QQVNTQk9PS19BUElfQ09VTlQpIHtcbiAgICAgICAgLy8gU3dhbC5maXJlKHtcbiAgICAgICAgLy8gICBpY29uOiBcImVycm9yXCIsXG4gICAgICAgIC8vICAgdGl0bGU6IFwiU29ycnlcIixcbiAgICAgICAgLy8gICB0ZXh0OiBcIldlIGVuY291bnRlcmVkIHNvbWUgaXNzdWUgd2hpbGUgcGxhY2luZyB5b3VyIG9yZGVyXCIsXG4gICAgICAgIC8vICAgY29uZmlybUJ1dHRvblRleHQ6IFwiR28gVG8gSG9tZVwiXG4gICAgICAgIC8vIH0pLnRoZW4oKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgIC8vICAgaWYgKHJlc3BvbnNlLmlzQ29uZmlybWVkKSB7XG4gICAgICAgIC8vICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy8nXSk7XG4gICAgICAgIC8vICAgfVxuICAgICAgICAvLyB9KVxuICAgICAgICB0aGlzLnBheW1lbnRTdGF0dXMgPSAnRkFJTEVEJ1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy8nXSk7XG4gICAgICAgIH0sIDMwMDApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5jaGVja1Bhc3Nib29rUGF5bWVudFN0YXR1cygpO1xuICAgICAgfVxuICAgIH0pXG4gIH1cbiAgcHVibGljIGNoZWNrQXBwb2ludG1lbnRQYXltZW50U3RhdHVzKCkge1xuICAgIGNvbnN0IG9yZGVySWQgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShcImFwcG9pbnRtZW50UGF5bWVudElkXCIpXG4gICAgdGhpcy5BUFBPSU5UTUVOVF9BUElfQ09VTlQrKztcbiAgICB0aGlzLnJlc3RTZXJ2aWNlLmdldEFwcG9pbnRtZW50UGF5bWVudFN0YXR1cyhvcmRlcklkKS5zdWJzY3JpYmUoKHJlc3BvbnNlKSA9PiB7XG4gICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShcImFwcG9pbnRtZW50UGF5bWVudElkXCIpO1xuICAgICAgdGhpcy5wYXltZW50U3RhdHVzID0gJ1NVQ0NFU1MnXG5cbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy9wcm9maWxlJ10pO1xuICAgICAgfSwgMzAwMCk7XG5cbiAgICB9LCAoZXJyb3IpID0+IHtcbiAgICAgIGlmICh0aGlzLkFQUE9JTlRNRU5UX0FQSV9DT1VOVCA+PSB0aGlzLk1BWF9BUElfQ09VTlQpIHtcbiAgICAgICAgLy8gU3dhbC5maXJlKHtcbiAgICAgICAgLy8gICBpY29uOiBcImVycm9yXCIsXG4gICAgICAgIC8vICAgdGl0bGU6IFwiU29ycnlcIixcbiAgICAgICAgLy8gICB0ZXh0OiBcIldlIGVuY291bnRlcmVkIHNvbWUgaXNzdWUgd2hpbGUgcGxhY2luZyB5b3VyIG9yZGVyXCIsXG4gICAgICAgIC8vICAgY29uZmlybUJ1dHRvblRleHQ6IFwiR28gVG8gSG9tZVwiXG4gICAgICAgIC8vIH0pLnRoZW4oKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgIC8vICAgaWYgKHJlc3BvbnNlLmlzQ29uZmlybWVkKSB7XG4gICAgICAgIC8vICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy8nXSk7XG4gICAgICAgIC8vICAgfVxuICAgICAgICAvLyB9KVxuICAgICAgICB0aGlzLnBheW1lbnRTdGF0dXMgPSAnRkFJTEVEJ1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy8nXSk7XG4gICAgICAgIH0sIDMwMDApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5jaGVja0FwcG9pbnRtZW50UGF5bWVudFN0YXR1cygpO1xuICAgICAgfVxuICAgIH0pXG4gIH1cbiAgZWRpdFNlY3Rpb24oKSB7XG5cbiAgICBpZiAod2luZG93LmlubmVyV2lkdGggPD0gNDc1KVxuICAgICAgcmV0dXJuO1xuXG4gICAgdGhpcy5fZXZlbnRTZXJ2aWNlLnRvZ2dsZUVkaXRvckV2ZW50LmVtaXQoZmFsc2UpO1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5fZXZlbnRTZXJ2aWNlLmVkaXRTZWN0aW9uLmVtaXQoeyBkYXRhOiB0aGlzLmRhdGEgfSk7XG4gICAgfSwgMTAwKTtcbiAgfVxufVxuIiwiPCEtLSA8cC10b2FzdCBwb3NpdGlvbj1cImJvdHRvbS1yaWdodFwiIFtiYXNlWkluZGV4XT1cIjEwMDAwMDAwMDAwXCIgW2F1dG9aSW5kZXhdPVwidHJ1ZVwiIFtzaG93VHJhbnNmb3JtT3B0aW9uc109XCJpc01vYmlsZSA/ICd0cmFuc2xhdGVZKC0xMDAlKScgOiAnJ1wiPjwvcC10b2FzdD5cbjxzZWN0aW9uIGNsYXNzPVwiZC1mbGV4IGZsZXgtY29sdW1uIGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIHRvdGFsLWNvbnRhaW5lclwiIHN0eWxlPVwiaGVpZ2h0OiAxMDB2aDtcIiBbc2ltcG9CYWNrZ3JvdW5kXT1cInN0eWxlcz8uYmFja2dyb3VuZFwiIHNpbXBvSG92ZXIgKGhvdmVyaW5nKT1cInNob3dFZGl0VGFicygkZXZlbnQpXCIgW2F0dHIuc3R5bGVdPVwiY3VzdG9tQ2xhc3NcIj5cbiAgICA8aW1nIGxvYWRpbmc9XCJsYXp5XCIgb25lcnJvcj1cInRoaXMuc3JjPSdodHRwczovL2kucG9zdGltZy5jYy9oUFMySnBWMC9uby1pbWFnZS1hdmFpbGFibGUuanBnJ1wiICAgW3NyY109XCJnZXRJbWFnZVVybFwiIHN0eWxlPVwiaGVpZ2h0OiAyMDBweDsgd2lkdGg6IDIwMHB4O1wiIFthbHRdPVwiY29udGVudD8uaW1hZ2U/LmFsdFRleHRcIj5cbiAgICA8c3BhbiBjbGFzcz1cImZvbnQtYm9sZFwiPnt7bG9hZGluZ1RleHR9fTwvc3Bhbj5cblxuICAgIDxkaXYgW25nQ2xhc3NdPVwieydob3Zlcl9lZmZlY3QnOiBlZGl0fVwiICpuZ0lmPVwic2hvd0VkaXRvcnNcIj5cbiAgICAgIDxzaW1wby1ob3Zlci1lbGVtZW50cyBbZGF0YV09XCJkYXRhXCIgW2luZGV4XT1cImluZGV4XCIgW2VkaXRPcHRpb25zXT1cImVkaXRcIiBbaXNFY29tbWVyY2VdPVwidHJ1ZVwiPjwvc2ltcG8taG92ZXItZWxlbWVudHM+XG4gICAgPC9kaXY+XG4gICAgPGRpdiAqbmdJZj1cInNob3dEZWxldGVcIiBbbmdDbGFzc109XCJ7J2hvdmVyX2VmZmVjdCc6IGRlbGV0ZX1cIj5cbiAgICAgIDxzaW1wby1kZWxldGUtaG92ZXItZWxlbWVudCBbZGF0YV09XCJkYXRhXCIgW2luZGV4XT1cImluZGV4XCI+PC9zaW1wby1kZWxldGUtaG92ZXItZWxlbWVudD5cbiAgPC9kaXY+XG48L3NlY3Rpb24+IC0tPlxuPHNlY3Rpb24gKm5nSWY9XCJwYXltZW50U3RhdHVzID09PSAnU1VDQ0VTUydcIiBjbGFzcz1cIm1haW5fc2VjdGlvblwiPlxuICA8ZGl2IGNsYXNzPVwiaW1hZ2Vfc2VjdGlvblwiPlxuICAgIDxpbWcgYWx0PVwibG9hZGVyXCIgc3JjPVwiaHR0cHM6Ly9kMno5NDk3eHA4eGIxMi5jbG91ZGZyb250Lm5ldC9wcm9kLWltYWdlcy82ODg5OTZjMTc1NTkzNDkwODUyNzk2MjM3LXN1Y2Nlc3MuZ2lmXCI+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPVwic3VjY2Vzc19oZWFkaW5nIGhlYWRpbmdcIj5cbiAgICBQYXltZW50IFN1Y2Nlc3NmdWxsXG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPVwicGF5bWVudF9zdWJfdGV4dFwiPlxuICAgIFlvdXIgcGF5bWVudCBoYXMgYmVlbiBzdWNjZXNzZnVsbHkgcHJvY2Vzc2VkLlxuICA8L2Rpdj5cbiAgPCEtLSA8ZGl2IGNsYXNzPVwicGxhbl9kZXNjcmlwdGlvblwiPlxuICAgIDxkaXYgY2xhc3M9XCJ0aXRsZV92YWx1ZVwiPlxuICAgICAgPGRpdiBjbGFzcz1cInBsYW5fdGl0bGVcIj5cbiAgICAgICAgU3Vic2NyaWJlZCBQbGFuXG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJwbGFuX3ZhbHVlXCI+XG4gICAgICAgIHt7IHBsYW5OYW1lIHwgdGl0bGVjYXNlIH19XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwidGl0bGVfdmFsdWVcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJwbGFuX3RpdGxlXCI+XG4gICAgICAgIEFtb3VudCBQYWlkXG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJwbGFuX3ZhbHVlXCI+XG4gICAgICAgIDxzcGFuPuKCuTwvc3Bhbj48c3Bhbj57eyBwbGFuQW1vdW50IH19PC9zcGFuPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cInRpdGxlX3ZhbHVlXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwicGxhbl90aXRsZVwiPlxuICAgICAgICBWYWxpZCB0aWxsXG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJwbGFuX3ZhbHVlXCI+XG4gICAgICAgIHt7IHZhbGlkaXR5IHwgZGF0ZSB9fVxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PiAtLT5cbjwvc2VjdGlvbj5cbjxzZWN0aW9uICpuZ0lmPVwicGF5bWVudFN0YXR1cyA9PT0gJ0ZBSUxFRCdcIiBjbGFzcz1cIm1haW5fc2VjdGlvblwiPlxuICA8ZGl2IGNsYXNzPVwiaW1hZ2Vfc2VjdGlvblwiPlxuICAgIDxpbWcgYWx0PVwibG9hZGVyXCIgc3JjPVwiaHR0cHM6Ly9kMno5NDk3eHA4eGIxMi5jbG91ZGZyb250Lm5ldC9wcm9kLWltYWdlcy82NjM4NzhjMTc1NTkzNDkzMjU3M3BheW1lbnRmYWlsZWQuZ2lmXCI+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPVwic3VjY2Vzc19oZWFkaW5nIGhlYWRpbmdcIj5cbiAgICBQYXltZW50IEZhaWxlZFxuICA8L2Rpdj5cbiAgPGRpdiBjbGFzcz1cInBheW1lbnRfc3ViX3RleHRcIj5cbiAgICBVbmZvcnR1bmF0ZWx5IFBheW1lbnQgd2FzIHJlamVjdGVkXG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPVwicGF5bWVudF9taW5pbWFsX3RleHRcIj5cbiAgICBQYWdlIHdpbGwgYmUgYXV0b21hdGljYWxseSByZWRpcmVjdCB0byBob21lcGFnZVxuICA8L2Rpdj5cbiAgPCEtLSA8ZGl2IGNsYXNzPVwicGxhbl9kZXNjcmlwdGlvblwiPlxuICAgICAgPGJ1dHRvbiAoY2xpY2spPVwiZG9uZSgpXCI+RG9uZTwvYnV0dG9uPlxuICA8L2Rpdj4gLS0+XG48L3NlY3Rpb24+XG5cbjxzZWN0aW9uICpuZ0lmPVwicGF5bWVudFN0YXR1cyA9PT0gJ09OR09JTkcnXCIgY2xhc3M9XCJtYWluX3NlY3Rpb24gc3Bpbm5lclwiPlxuICA8ZGl2IGNsYXNzPVwicGF5bWVudC1vbmdvaW5nXCI+XG4gICAgPG1hdC1zcGlubmVyIHN0eWxlPVwid2lkdGg6IDEwMCU7XCI+PC9tYXQtc3Bpbm5lcj5cbiAgICA8cD57e2xvYWRpbmdUZXh0fX08L3A+XG4gIDwvZGl2PlxuPC9zZWN0aW9uPlxuIl19