@sumaris-net/ngx-components 2.4.60 → 2.4.61

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.
@@ -1,4 +1,4 @@
1
- import { ChangeDetectionStrategy, Component, EventEmitter, Inject, Input } from '@angular/core';
1
+ import { ChangeDetectionStrategy, Component, EventEmitter, Inject, Input, Optional } from '@angular/core';
2
2
  import { Peer } from '../services/model/peer.model';
3
3
  import { Subject, Subscription } from 'rxjs';
4
4
  import { fadeInAnimation } from '../../shared/material/material.animations';
@@ -9,6 +9,7 @@ import { TextPopover } from '../form/text-popover/text-popover.component';
9
9
  import { isMobile } from '../../shared/platforms';
10
10
  import { Validators } from '@angular/forms';
11
11
  import { PEER_URL_REGEXP } from '../services/network.service';
12
+ import { APP_LOGGING_SERVICE } from '../../shared/logging/logging-service.class';
12
13
  import * as i0 from "@angular/core";
13
14
  import * as i1 from "@ionic/angular";
14
15
  import * as i2 from "@ngx-translate/core";
@@ -18,13 +19,14 @@ import * as i5 from "@angular/material/icon";
18
19
  import * as i6 from "@angular/material/tooltip";
19
20
  import * as i7 from "../../shared/pipes/arrays.pipe";
20
21
  export class SelectPeerModal {
21
- constructor(modalCtrl, popoverController, translate, http, cd, environment) {
22
+ constructor(modalCtrl, popoverController, translate, http, cd, environment, loggingService) {
22
23
  this.modalCtrl = modalCtrl;
23
24
  this.popoverController = popoverController;
24
25
  this.translate = translate;
25
26
  this.http = http;
26
27
  this.cd = cd;
27
28
  this.environment = environment;
29
+ this.loggingService = loggingService;
28
30
  this._subscription = new Subscription();
29
31
  this.loading = true;
30
32
  this.$peers = new Subject();
@@ -34,6 +36,7 @@ export class SelectPeerModal {
34
36
  this.onRefresh = new EventEmitter();
35
37
  this.showSetManuallyButton = true;
36
38
  this.mobile = isMobile(window);
39
+ this._logger = loggingService?.getLogger('network-modal');
37
40
  }
38
41
  set peers(peers) {
39
42
  this._subscription.add(peers.subscribe(res => this.refreshPeers(res)));
@@ -116,10 +119,10 @@ export class SelectPeerModal {
116
119
  peer.name = summary.nodeName;
117
120
  }
118
121
  catch (err) {
122
+ // If modal was not closed (e.g. response arrived too late => ignore)
119
123
  if (!this._subscription.closed) {
120
- if (err && err.message) {
121
- console.error('[select-peer] ' + err.message, err);
122
- }
124
+ console.error(`[select-peer] Error while calling '${peer.url}/api/node/info': ${err?.message || err}`, err);
125
+ this._logger?.error(`Error while calling '${peer.url}/api/node/info': ${JSON.stringify(err)}`);
123
126
  }
124
127
  peer.status = 'DOWN';
125
128
  }
@@ -154,7 +157,7 @@ export class SelectPeerModal {
154
157
  this.cd.markForCheck();
155
158
  }
156
159
  }
157
- SelectPeerModal.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: SelectPeerModal, deps: [{ token: i1.ModalController }, { token: i1.PopoverController }, { token: i2.TranslateService }, { token: i3.HttpClient }, { token: i0.ChangeDetectorRef }, { token: ENVIRONMENT }], target: i0.ɵɵFactoryTarget.Component });
160
+ SelectPeerModal.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: SelectPeerModal, deps: [{ token: i1.ModalController }, { token: i1.PopoverController }, { token: i2.TranslateService }, { token: i3.HttpClient }, { token: i0.ChangeDetectorRef }, { token: ENVIRONMENT }, { token: APP_LOGGING_SERVICE, optional: true }], target: i0.ɵɵFactoryTarget.Component });
158
161
  SelectPeerModal.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.12", type: SelectPeerModal, selector: "select-peer-modal", inputs: { canCancel: "canCancel", allowSelectDownPeer: "allowSelectDownPeer", onRefresh: "onRefresh", showSetManuallyButton: "showSetManuallyButton" }, ngImport: i0, template: "<ion-header>\n <ion-toolbar color=\"light\">\n <ion-buttons slot=\"start\">\n <ion-button (click)=\"cancel()\" *ngIf=\"canCancel\"\n visible-xs visible-sm visible-mobile>\n <ion-icon slot=\"icon-only\" name=\"arrow-back\"></ion-icon>\n </ion-button>\n </ion-buttons>\n\n <ion-title>\n {{'NETWORK.PEER.SELECT_MODAL.TITLE'|translate}}\n </ion-title>\n\n <ion-buttons slot=\"end\">\n <!-- loader -->\n <ion-spinner *ngIf=\"loading; else endButtons\"></ion-spinner>\n\n <ng-template #endButtons>\n <!-- refresh button -->\n <ion-button *ngIf=\"onRefresh.observers | isNotEmptyArray\"\n [matTooltip]=\"'COMMON.BTN_REFRESH'|translate\"\n (click)=\"refresh($event)\">\n <mat-icon slot=\"icon-only\">refresh</mat-icon>\n </ion-button>\n </ng-template>\n </ion-buttons>\n </ion-toolbar>\n</ion-header>\n\n<ion-content>\n\n <ion-list>\n\n <ion-list-header>\n <ion-label class=\"ion-text-wrap\">\n <p translate>NETWORK.PEER.SELECT_MODAL.HELP</p>\n </ion-label>\n </ion-list-header>\n\n <ion-item *ngFor=\"let peer of $peers | async\"\n tappable\n (click)=\"selectPeer(peer)\"\n detail\n @fadeInAnimation>\n\n <!-- icon -->\n <ion-avatar slot=\"start\" *ngIf=\"peer.reachable\" >\n <ion-img [src]=\"peer.favicon || (peer.url + '/api/favicon')\"></ion-img>\n </ion-avatar>\n <ion-icon slot=\"start\" *ngIf=\"!peer.reachable\" name=\"desktop\" color=\"medium\" class=\"ion-text-center\"></ion-icon>\n\n <!-- Peer is UP -->\n <ion-grid *ngIf=\"peer.reachable\">\n <ion-row class=\"ion-no-padding\">\n <ion-col class=\"ion-no-padding\">\n <ion-label class=\"ion-text-wrap\">\n <ion-text color=\"dark\">\n <h3>{{peer.hostAndPort}}{{peer.path}}</h3>\n </ion-text>\n <ion-text color=\"primary\">\n <h4>{{peer.label}}</h4>\n </ion-text>\n </ion-label>\n </ion-col>\n <ion-col class=\"ion-no-padding\">\n <ion-label class=\"ion-text-wrap ion-text-center\" color=\"medium\">\n <h3>{{peer.softwareName}}</h3>\n <h4 *ngIf=\"!peerMinVersion || isCompatible(peer); else invalidVersion\">\n <small>v{{peer.softwareVersion}}</small>\n </h4>\n <ng-template #invalidVersion>\n <ion-text color=\"danger\" [matTooltip]=\"'NETWORK.PEER.SELECT_MODAL.NOT_COMPATIBLE_HELP'|translate: {version: peerMinVersion} \">\n <h4 class=\"ion-color-danger\">\n <small><mat-icon>warning</mat-icon>v{{peer.softwareVersion}}</small>\n </h4>\n </ion-text>\n </ng-template>\n </ion-label>\n </ion-col>\n </ion-row>\n </ion-grid>\n\n <!-- Peer is DOWN -->\n <ion-label class=\"ion-text-wrap\" *ngIf=\"!peer.reachable\">\n <ion-text color=\"medium\">\n <h3>{{peer.hostAndPort}}{{peer.path}}</h3>\n </ion-text>\n <ion-text color=\"danger\">\n <h4>\n <small><ion-icon size=\"small\" name=\"close-circle\"></ion-icon></small>\n <span translate>NETWORK.PEER.OFFLINE</span>\n </h4>\n </ion-text>\n </ion-label>\n </ion-item>\n </ion-list>\n\n</ion-content>\n\n\n<ion-footer *ngIf=\"canCancel\" hidden-xs hidden-sm hidden-mobile>\n\n <ion-toolbar>\n\n <ion-row class=\"ion-no-padding\" nowrap>\n <ion-col></ion-col>\n\n <!-- buttons -->\n <ion-col size=\"auto\" *ngIf=\"showSetManuallyButton\">\n <ion-button fill=\"clear\" color=\"dark\" (click)=\"clickSetManually($event)\">\n <ion-label translate>NETWORK.PEER.SELECT_MODAL.BTN_SET_MANUALLY</ion-label>\n </ion-button>\n </ion-col>\n <ion-col size=\"auto\">\n <ion-button fill=\"clear\" color=\"dark\" (click)=\"cancel()\">\n <ion-label translate>COMMON.BTN_CANCEL</ion-label>\n </ion-button>\n </ion-col>\n </ion-row>\n\n\n </ion-toolbar>\n</ion-footer>\n", styles: ["ion-item h4 ion-icon,ion-item h4 mat-icon{height:14px;width:14px;font-size:14px;line-height:14px}ion-item h4 small ion-icon,ion-item h4 small mat-icon{height:12px;width:12px;font-size:12px;line-height:12px}\n"], dependencies: [{ kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i1.IonAvatar, selector: "ion-avatar" }, { kind: "component", type: i1.IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "form", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { kind: "component", type: i1.IonButtons, selector: "ion-buttons", inputs: ["collapse"] }, { kind: "component", type: i1.IonCol, selector: "ion-col", inputs: ["offset", "offsetLg", "offsetMd", "offsetSm", "offsetXl", "offsetXs", "pull", "pullLg", "pullMd", "pullSm", "pullXl", "pullXs", "push", "pushLg", "pushMd", "pushSm", "pushXl", "pushXs", "size", "sizeLg", "sizeMd", "sizeSm", "sizeXl", "sizeXs"] }, { kind: "component", type: i1.IonContent, selector: "ion-content", inputs: ["color", "forceOverscroll", "fullscreen", "scrollEvents", "scrollX", "scrollY"] }, { kind: "component", type: i1.IonFooter, selector: "ion-footer", inputs: ["collapse", "mode", "translucent"] }, { kind: "component", type: i1.IonGrid, selector: "ion-grid", inputs: ["fixed"] }, { kind: "component", type: i1.IonHeader, selector: "ion-header", inputs: ["collapse", "mode", "translucent"] }, { kind: "component", type: i1.IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: i1.IonImg, selector: "ion-img", inputs: ["alt", "src"] }, { kind: "component", type: i1.IonItem, selector: "ion-item", inputs: ["button", "color", "counter", "counterFormatter", "detail", "detailIcon", "disabled", "download", "fill", "href", "lines", "mode", "rel", "routerAnimation", "routerDirection", "shape", "target", "type"] }, { kind: "component", type: i1.IonLabel, selector: "ion-label", inputs: ["color", "mode", "position"] }, { kind: "component", type: i1.IonList, selector: "ion-list", inputs: ["inset", "lines", "mode"] }, { kind: "component", type: i1.IonListHeader, selector: "ion-list-header", inputs: ["color", "lines", "mode"] }, { kind: "component", type: i1.IonRow, selector: "ion-row" }, { kind: "component", type: i1.IonSpinner, selector: "ion-spinner", inputs: ["color", "duration", "name", "paused"] }, { kind: "component", type: i1.IonText, selector: "ion-text", inputs: ["color", "mode"] }, { kind: "component", type: i1.IonTitle, selector: "ion-title", inputs: ["color", "size"] }, { kind: "component", type: i1.IonToolbar, selector: "ion-toolbar", inputs: ["color", "mode"] }, { kind: "directive", type: i2.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i6.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }, { kind: "pipe", type: i2.TranslatePipe, name: "translate" }, { kind: "pipe", type: i7.NotEmptyArrayPipe, name: "isNotEmptyArray" }], animations: [fadeInAnimation], changeDetection: i0.ChangeDetectionStrategy.OnPush });
159
162
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: SelectPeerModal, decorators: [{
160
163
  type: Component,
@@ -162,6 +165,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImpo
162
165
  }], ctorParameters: function () { return [{ type: i1.ModalController }, { type: i1.PopoverController }, { type: i2.TranslateService }, { type: i3.HttpClient }, { type: i0.ChangeDetectorRef }, { type: undefined, decorators: [{
163
166
  type: Inject,
164
167
  args: [ENVIRONMENT]
168
+ }] }, { type: undefined, decorators: [{
169
+ type: Optional
170
+ }, {
171
+ type: Inject,
172
+ args: [APP_LOGGING_SERVICE]
165
173
  }] }]; }, propDecorators: { canCancel: [{
166
174
  type: Input
167
175
  }], allowSelectDownPeer: [{
@@ -171,4 +179,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImpo
171
179
  }], showSetManuallyButton: [{
172
180
  type: Input
173
181
  }] } });
174
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0LXBlZXIubW9kYWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL2NvcmUvcGVlci9zZWxlY3QtcGVlci5tb2RhbC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvY29yZS9wZWVyL3NlbGVjdC1wZWVyLm1vZGFsLmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLHVCQUF1QixFQUFxQixTQUFTLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQVksTUFBTSxlQUFlLENBQUM7QUFFNUgsT0FBTyxFQUFDLElBQUksRUFBQyxNQUFNLDhCQUE4QixDQUFDO0FBQ2xELE9BQU8sRUFBYSxPQUFPLEVBQUUsWUFBWSxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBQ3ZELE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSwyQ0FBMkMsQ0FBQztBQUUxRSxPQUFPLEVBQUMsWUFBWSxFQUFXLE1BQU0sMkJBQTJCLENBQUM7QUFDakUsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLCtCQUErQixDQUFDO0FBQzNELE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSx5Q0FBeUMsQ0FBQztBQUNwRSxPQUFPLEVBQUMsV0FBVyxFQUFxQixNQUFNLDZDQUE2QyxDQUFDO0FBRTVGLE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSx3QkFBd0IsQ0FBQztBQUNoRCxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDMUMsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLDZCQUE2QixDQUFDOzs7Ozs7Ozs7QUFnQjVELE1BQU0sT0FBTyxlQUFlO0lBYTFCLFlBQ1UsU0FBMEIsRUFDMUIsaUJBQW9DLEVBQ3BDLFNBQTJCLEVBQzNCLElBQWdCLEVBQ2hCLEVBQXFCLEVBQ0UsV0FBVztRQUxsQyxjQUFTLEdBQVQsU0FBUyxDQUFpQjtRQUMxQixzQkFBaUIsR0FBakIsaUJBQWlCLENBQW1C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QUFJLENBQUMsTUFBTTtnQkFDdkIsWUFBWSxFQUFFLEtBQUs7Z0JBQ25CLFNBQVMsRUFBRSxVQUFVLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQztnQkFDOUMsU0FBUyxFQUFFLElBQUk7Z0JBQ2YsR0FBRyxJQUFJO2FBQ1I7WUFDRCxlQUFlLEVBQUUsS0FBSztZQUN0QixhQUFhLEVBQUUsS0FBSztZQUNwQixLQUFLO1lBQ0wsV0FBVyxFQUFFLElBQUk7WUFDakIsUUFBUSxFQUFFLGVBQWU7U0FDMUIsQ0FBQyxDQUFDO1FBRUgsTUFBTSxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDdEIsTUFBTSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsR0FBRyxNQUFNLEtBQUssQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUVsRCxJQUFJLElBQUksRUFBRTtZQUNSLE9BQU8sQ0FBQyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDdkMsT0FBTyxJQUFJLENBQUM7U0FDYjtJQUNILENBQUM7SUFFUyxZQUFZO1FBQ3BCLElBQUksQ0FBQyxFQUFFLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDekIsQ0FBQzs7NkdBaEtVLGVBQWUsNktBbUJoQixXQUFXO2lHQW5CVixlQUFlLGlOQzdCNUIsOG9JQTJIQSw4OEdEaEdjLENBQUMsZUFBZSxDQUFDOzRGQUVsQixlQUFlO2tCQVAzQixTQUFTOytCQUNFLG1CQUFtQixtQkFHWix1QkFBdUIsQ0FBQyxNQUFNLGNBQ25DLENBQUMsZUFBZSxDQUFDOzswQkFxQjFCLE1BQU07MkJBQUMsV0FBVzs0Q0FYWixTQUFTO3NCQUFqQixLQUFLO2dCQUNHLG1CQUFtQjtzQkFBM0IsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLHFCQUFxQjtzQkFBN0IsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Q2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5qZWN0LCBJbnB1dCwgT25EZXN0cm95fSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7TW9kYWxDb250cm9sbGVyLCBQb3BvdmVyQ29udHJvbGxlcn0gZnJvbSAnQGlvbmljL2FuZ3VsYXInO1xuaW1wb3J0IHtQZWVyfSBmcm9tICcuLi9zZXJ2aWNlcy9tb2RlbC9wZWVyLm1vZGVsJztcbmltcG9ydCB7T2JzZXJ2YWJsZSwgU3ViamVjdCwgU3Vic2NyaXB0aW9ufSBmcm9tICdyeGpzJztcbmltcG9ydCB7ZmFkZUluQW5pbWF0aW9ufSBmcm9tICcuLi8uLi9zaGFyZWQvbWF0ZXJpYWwvbWF0ZXJpYWwuYW5pbWF0aW9ucyc7XG5pbXBvcnQge0h0dHBDbGllbnR9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7TmV0d29ya1V0aWxzLCBOb2RlSW5mb30gZnJvbSAnLi4vc2VydmljZXMvbmV0d29yay51dGlscyc7XG5pbXBvcnQge1ZlcnNpb25VdGlsc30gZnJvbSAnLi4vLi4vc2hhcmVkL3ZlcnNpb24vdmVyc2lvbnMnO1xuaW1wb3J0IHtFTlZJUk9OTUVOVH0gZnJvbSAnLi4vLi4vLi4vZW52aXJvbm1lbnRzL2Vudmlyb25tZW50LmNsYXNzJztcbmltcG9ydCB7VGV4dFBvcG92ZXIsIFRleHRQb3BvdmVyT3B0aW9uc30gZnJvbSAnLi4vZm9ybS90ZXh0LXBvcG92ZXIvdGV4dC1wb3BvdmVyLmNvbXBvbmVudCc7XG5pbXBvcnQge1RyYW5zbGF0ZVNlcnZpY2V9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHtpc01vYmlsZX0gZnJvbSAnLi4vLi4vc2hhcmVkL3BsYXRmb3Jtcyc7XG5pbXBvcnQge1ZhbGlkYXRvcnN9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7UEVFUl9VUkxfUkVHRVhQfSBmcm9tICcuLi9zZXJ2aWNlcy9uZXR3b3JrLnNlcnZpY2UnO1xuXG5leHBvcnQgaW50ZXJmYWNlIElTZWxlY3RQZWVyTW9kYWxPcHRpb25zIHtcbiAgY2FuQ2FuY2VsOiBib29sZWFuO1xuICBhbGxvd1NlbGVjdERvd25QZWVyOiBib29sZWFuO1xuICBvblJlZnJlc2g6IEV2ZW50RW1pdHRlcjxFdmVudD47XG4gIHNob3dTZXRNYW51YWxseUJ1dHRvbjogYm9vbGVhbjtcbn1cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnc2VsZWN0LXBlZXItbW9kYWwnLFxuICB0ZW1wbGF0ZVVybDogJ3NlbGVjdC1wZWVyLm1vZGFsLmh0bWwnLFxuICBzdHlsZVVybHM6IFsgJy4vc2VsZWN0LXBlZXIubW9kYWwuc2NzcycgXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGFuaW1hdGlvbnM6IFtmYWRlSW5BbmltYXRpb25dXG59KVxuZXhwb3J0IGNsYXNzIFNlbGVjdFBlZXJNb2RhbCBpbXBsZW1lbnRzIE9uRGVzdHJveSwgSVNlbGVjdFBlZXJNb2RhbE9wdGlvbnMge1xuXG4gIHByaXZhdGUgX3N1YnNjcmlwdGlvbiA9IG5ldyBTdWJzY3JpcHRpb24oKTtcbiAgbG9hZGluZyA9IHRydWU7XG4gIG1vYmlsZTogYm9vbGVhbjtcbiAgJHBlZXJzID0gbmV3IFN1YmplY3Q8UGVlcltdPigpO1xuICBwZWVyTWluVmVyc2lvbiA9IHRoaXMuZW52aXJvbm1lbnQucGVlck1pblZlcnNpb247XG5cbiAgQElucHV0KCkgY2FuQ2FuY2VsID0gdHJ1ZTtcbiAgQElucHV0KCkgYWxsb3dTZWxlY3REb3duUGVlciA9IHRydWU7XG4gIEBJbnB1dCgpIG9uUmVmcmVzaCA9IG5ldyBFdmVudEVtaXR0ZXI8RXZlbnQ+KCk7XG4gIEBJbnB1dCgpIHNob3dTZXRNYW51YWxseUJ1dHRvbiA9IHRydWU7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBtb2RhbEN0cmw6IE1vZGFsQ29udHJvbGxlcixcbiAgICBwcml2YXRlIHBvcG92ZXJDb250cm9sbGVyOiBQb3BvdmVyQ29udHJvbGxlcixcbiAgICBwcml2YXRlIHRyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICBwcml2YXRlIGh0dHA6IEh0dHBDbGllbnQsXG4gICAgcHJpdmF0ZSBjZDogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgQEluamVjdChFTlZJUk9OTUVOVCkgcHJvdGVjdGVkIGVudmlyb25tZW50XG4gICkge1xuICAgIHRoaXMubW9iaWxlID0gaXNNb2JpbGUod2luZG93KTtcbiAgfVxuXG4gIHNldCBwZWVycyhwZWVyczogT2JzZXJ2YWJsZTxQZWVyW10+KSB7XG4gICAgdGhpcy5fc3Vic2NyaXB0aW9uLmFkZChcbiAgICAgIHBlZXJzLnN1YnNjcmliZShyZXMgPT4gdGhpcy5yZWZyZXNoUGVlcnMocmVzKSlcbiAgICApO1xuICB9XG5cbiAgY2FuY2VsKCkge1xuICAgIHRoaXMubW9kYWxDdHJsLmRpc21pc3MoKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuX3N1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICB9XG5cbiAgc2VsZWN0UGVlcihwZWVyOiBQZWVyKSB7XG4gICAgaWYgKHRoaXMuYWxsb3dTZWxlY3REb3duUGVlciB8fCAocGVlci5yZWFjaGFibGUgJiYgdGhpcy5pc0NvbXBhdGlibGUocGVlcikpKSB7XG4gICAgICBjb25zb2xlLmRlYnVnKGBbc2VsZWN0LXBlZXItbW9kYWxdIFNlbGVjdGVkIHBlZXI6IHt1cmw6ICcke3BlZXIudXJsfSd9YCk7XG4gICAgICB0aGlzLm1vZGFsQ3RybC5kaXNtaXNzKHBlZXIpO1xuICAgIH1cbiAgfVxuXG5cbiAgLyoqXG4gICAqICBDaGVjayB0aGUgbWluIHBvZCB2ZXJzaW9uLCBkZWZpbmVkIGJ5IHRoZSBhcHBcbiAgICpcbiAgICogQHBhcmFtIHBlZXJcbiAgICovXG4gIGlzQ29tcGF0aWJsZShwZWVyOiBQZWVyKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICF0aGlzLnBlZXJNaW5WZXJzaW9uIHx8IChwZWVyICYmIHBlZXIuc29mdHdhcmVWZXJzaW9uICYmIFZlcnNpb25VdGlscy5pc0NvbXBhdGlibGUodGhpcy5wZWVyTWluVmVyc2lvbiwgcGVlci5zb2Z0d2FyZVZlcnNpb24pKTtcbiAgfVxuXG4gIHJlZnJlc2goZXZlbnQpIHtcbiAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xuICAgIHRoaXMub25SZWZyZXNoLmVtaXQoZXZlbnQpO1xuICB9XG5cbiAgYXN5bmMgY2xpY2tTZXRNYW51YWxseShldmVudD86IEV2ZW50KSB7XG4gICAgY29uc3QgcGVlclVybCA9IGF3YWl0IHRoaXMub3BlblBlZXJVcmxQb3BvdmVyKGV2ZW50KTtcbiAgICBpZiAocGVlclVybCkge1xuICAgICAgY29uc3QgcGVlciA9IFBlZXIucGFyc2VVcmwocGVlclVybCk7XG4gICAgICBhd2FpdCB0aGlzLnJlZnJlc2hQZWVyKHBlZXIpO1xuICAgICAgdGhpcy5zZWxlY3RQZWVyKHBlZXIpO1xuICAgIH1cbiAgfVxuXG4gIC8qIC0tIHByb3RlY3RlZCBtZXRob2RzIC0tICovXG5cbiAgYXN5bmMgcmVmcmVzaFBlZXJzKHBlZXJzOiBQZWVyW10pIHtcbiAgICBwZWVycyA9IHBlZXJzIHx8IFtdO1xuXG4gICAgY29uc3QgZGF0YTogUGVlcltdID0gW107XG4gICAgY29uc3Qgam9icyA9IFByb21pc2UuYWxsKFxuICAgICAgcGVlcnMubWFwKGFzeW5jIChwZWVyKSA9PiB7XG4gICAgICAgIGF3YWl0IHRoaXMucmVmcmVzaFBlZXIocGVlcik7XG5cbiAgICAgICAgaWYgKHRoaXMuX3N1YnNjcmlwdGlvbi5jbG9zZWQpIHJldHVybjsgLy8gY29tcG9uZW50IGRlc3Ryb3llZFxuXG4gICAgICAgIGRhdGEucHVzaChwZWVyKTtcblxuICAgICAgICAvLyBTb3J0IChieSByZWFjaGFibGUsIHRoZW4gaG9zdClcbiAgICAgICAgZGF0YS5zb3J0KChhLCBiKSA9PiB7XG4gICAgICAgICAgaWYgKGEucmVhY2hhYmxlICYmICFiLnJlYWNoYWJsZSkgcmV0dXJuIC0xO1xuICAgICAgICAgIGlmICghYS5yZWFjaGFibGUgJiYgYi5yZWFjaGFibGUpIHJldHVybiAxO1xuICAgICAgICAgIGlmIChhLmhvc3RBbmRQb3J0IDwgYi5ob3N0QW5kUG9ydCkgcmV0dXJuIC0xO1xuICAgICAgICAgIGlmIChhLmhvc3RBbmRQb3J0ID4gYi5ob3N0QW5kUG9ydCkgcmV0dXJuIDE7XG4gICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuJHBlZXJzLm5leHQoZGF0YSk7XG4gICAgICAgIHJldHVybiBwZWVyO1xuICAgICAgfSkpO1xuXG4gICAgdGhpcy5fc3Vic2NyaXB0aW9uLmFkZChcbiAgICAgIHRoaXMuJHBlZXJzXG4gICAgICAgIC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5jZC5tYXJrRm9yQ2hlY2soKSlcbiAgICApO1xuXG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGpvYnM7XG4gICAgfVxuICAgIGNhdGNoKGVycikge1xuICAgICAgaWYgKCF0aGlzLl9zdWJzY3JpcHRpb24uY2xvc2VkKSBjb25zb2xlLmVycm9yKGVycik7XG4gICAgfVxuICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgIHRoaXMuY2QubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgcmVmcmVzaFBlZXIocGVlcjogUGVlcik6IFByb21pc2U8UGVlcj4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBzdW1tYXJ5OiBOb2RlSW5mbyA9IGF3YWl0IE5ldHdvcmtVdGlscy5nZXROb2RlSW5mbyh0aGlzLmh0dHAsIHBlZXIudXJsKTtcbiAgICAgIHBlZXIuc3RhdHVzID0gJ1VQJztcbiAgICAgIHBlZXIuc29mdHdhcmVOYW1lID0gc3VtbWFyeS5zb2Z0d2FyZU5hbWU7XG4gICAgICBwZWVyLnNvZnR3YXJlVmVyc2lvbiA9IHN1bW1hcnkuc29mdHdhcmVWZXJzaW9uO1xuICAgICAgcGVlci5sYWJlbCA9IHN1bW1hcnkubm9kZUxhYmVsO1xuICAgICAgcGVlci5uYW1lID0gc3VtbWFyeS5ub2RlTmFtZTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGlmICghdGhpcy5fc3Vic2NyaXB0aW9uLmNsb3NlZCkgIHtcbiAgICAgICAgaWYgKGVyciAmJiBlcnIubWVzc2FnZSkge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1tzZWxlY3QtcGVlcl0gJyArIGVyci5tZXNzYWdlLCBlcnIpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBwZWVyLnN0YXR1cyA9ICdET1dOJztcbiAgICB9XG4gICAgcmV0dXJuIHBlZXI7XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgb3BlblBlZXJVcmxQb3BvdmVyKGV2ZW50OiBFdmVudCwgb3B0cz86IFBhcnRpYWw8VGV4dFBvcG92ZXJPcHRpb25zPikge1xuICAgIGNvbnN0IG1vZGFsID0gYXdhaXQgdGhpcy5wb3BvdmVyQ29udHJvbGxlci5jcmVhdGUoe1xuICAgICAgY29tcG9uZW50OiBUZXh0UG9wb3ZlcixcbiAgICAgIGNvbXBvbmVudFByb3BzOiA8VGV4dFBvcG92ZXJPcHRpb25zPntcbiAgICAgICAgcGxhY2Vob2xkZXI6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoJ1NFVFRJTkdTLlBFRVJfVVJMJyksXG4gICAgICAgIG11bHRpbGluZTogZmFsc2UsXG4gICAgICAgIGF1dG9mb2N1czogIXRoaXMubW9iaWxlLFxuICAgICAgICBhdXRvY29tcGxldGU6IGZhbHNlLFxuICAgICAgICB2YWxpZGF0b3I6IFZhbGlkYXRvcnMucGF0dGVybihQRUVSX1VSTF9SRUdFWFApLFxuICAgICAgICBtYXhMZW5ndGg6IG51bGwsXG4gICAgICAgIC4uLm9wdHNcbiAgICAgIH0sXG4gICAgICBiYWNrZHJvcERpc21pc3M6IGZhbHNlLFxuICAgICAga2V5Ym9hcmRDbG9zZTogZmFsc2UsXG4gICAgICBldmVudCxcbiAgICAgIHRyYW5zbHVjZW50OiB0cnVlLFxuICAgICAgY3NzQ2xhc3M6ICdwb3BvdmVyLWxhcmdlJyxcbiAgICB9KTtcblxuICAgIGF3YWl0IG1vZGFsLnByZXNlbnQoKTtcbiAgICBjb25zdCB7IGRhdGEsIHJvbGUgfSA9IGF3YWl0IG1vZGFsLm9uRGlkRGlzbWlzcygpO1xuXG4gICAgaWYgKGRhdGEpIHtcbiAgICAgIGNvbnNvbGUuaW5mbygnUG9wb3ZlciByZXN1bHQ6ICcsIGRhdGEpO1xuICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIG1hcmtGb3JDaGVjaygpIHtcbiAgICB0aGlzLmNkLm1hcmtGb3JDaGVjaygpO1xuICB9XG59XG4iLCI8aW9uLWhlYWRlcj5cbiAgPGlvbi10b29sYmFyIGNvbG9yPVwibGlnaHRcIj5cbiAgICA8aW9uLWJ1dHRvbnMgc2xvdD1cInN0YXJ0XCI+XG4gICAgICA8aW9uLWJ1dHRvbiAoY2xpY2spPVwiY2FuY2VsKClcIiAqbmdJZj1cImNhbkNhbmNlbFwiXG4gICAgICAgICAgICAgICAgICB2aXNpYmxlLXhzIHZpc2libGUtc20gdmlzaWJsZS1tb2JpbGU+XG4gICAgICAgIDxpb24taWNvbiBzbG90PVwiaWNvbi1vbmx5XCIgbmFtZT1cImFycm93LWJhY2tcIj48L2lvbi1pY29uPlxuICAgICAgPC9pb24tYnV0dG9uPlxuICAgIDwvaW9uLWJ1dHRvbnM+XG5cbiAgICA8aW9uLXRpdGxlPlxuICAgICAge3snTkVUV09SSy5QRUVSLlNFTEVDVF9NT0RBTC5USVRMRSd8dHJhbnNsYXRlfX1cbiAgICA8L2lvbi10aXRsZT5cblxuICAgIDxpb24tYnV0dG9ucyBzbG90PVwiZW5kXCI+XG4gICAgICA8IS0tIGxvYWRlciAtLT5cbiAgICAgIDxpb24tc3Bpbm5lciAqbmdJZj1cImxvYWRpbmc7IGVsc2UgZW5kQnV0dG9uc1wiPjwvaW9uLXNwaW5uZXI+XG5cbiAgICAgIDxuZy10ZW1wbGF0ZSAjZW5kQnV0dG9ucz5cbiAgICAgICAgPCEtLSByZWZyZXNoIGJ1dHRvbiAtLT5cbiAgICAgICAgPGlvbi1idXR0b24gKm5nSWY9XCJvblJlZnJlc2gub2JzZXJ2ZXJzIHwgaXNOb3RFbXB0eUFycmF5XCJcbiAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPVwiJ0NPTU1PTi5CVE5fUkVGUkVTSCd8dHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInJlZnJlc2goJGV2ZW50KVwiPlxuICAgICAgICAgIDxtYXQtaWNvbiBzbG90PVwiaWNvbi1vbmx5XCI+cmVmcmVzaDwvbWF0LWljb24+XG4gICAgICAgIDwvaW9uLWJ1dHRvbj5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPC9pb24tYnV0dG9ucz5cbiAgPC9pb24tdG9vbGJhcj5cbjwvaW9uLWhlYWRlcj5cblxuPGlvbi1jb250ZW50PlxuXG4gIDxpb24tbGlzdD5cblxuICAgIDxpb24tbGlzdC1oZWFkZXI+XG4gICAgICA8aW9uLWxhYmVsIGNsYXNzPVwiaW9uLXRleHQtd3JhcFwiPlxuICAgICAgICA8cCB0cmFuc2xhdGU+TkVUV09SSy5QRUVSLlNFTEVDVF9NT0RBTC5IRUxQPC9wPlxuICAgICAgPC9pb24tbGFiZWw+XG4gICAgPC9pb24tbGlzdC1oZWFkZXI+XG5cbiAgICA8aW9uLWl0ZW0gKm5nRm9yPVwibGV0IHBlZXIgb2YgJHBlZXJzIHwgYXN5bmNcIlxuICAgICAgICAgICAgICB0YXBwYWJsZVxuICAgICAgICAgICAgICAoY2xpY2spPVwic2VsZWN0UGVlcihwZWVyKVwiXG4gICAgICAgICAgICAgIGRldGFpbFxuICAgICAgICAgICAgICBAZmFkZUluQW5pbWF0aW9uPlxuXG4gICAgICA8IS0tIGljb24gLS0+XG4gICAgICA8aW9uLWF2YXRhciBzbG90PVwic3RhcnRcIiAqbmdJZj1cInBlZXIucmVhY2hhYmxlXCIgPlxuICAgICAgICA8aW9uLWltZyBbc3JjXT1cInBlZXIuZmF2aWNvbiB8fCAocGVlci51cmwgKyAnL2FwaS9mYXZpY29uJylcIj48L2lvbi1pbWc+XG4gICAgICA8L2lvbi1hdmF0YXI+XG4gICAgICA8aW9uLWljb24gc2xvdD1cInN0YXJ0XCIgICpuZ0lmPVwiIXBlZXIucmVhY2hhYmxlXCIgbmFtZT1cImRlc2t0b3BcIiBjb2xvcj1cIm1lZGl1bVwiIGNsYXNzPVwiaW9uLXRleHQtY2VudGVyXCI+PC9pb24taWNvbj5cblxuICAgICAgPCEtLSBQZWVyIGlzIFVQIC0tPlxuICAgICAgPGlvbi1ncmlkICpuZ0lmPVwicGVlci5yZWFjaGFibGVcIj5cbiAgICAgICAgPGlvbi1yb3cgY2xhc3M9XCJpb24tbm8tcGFkZGluZ1wiPlxuICAgICAgICAgIDxpb24tY29sIGNsYXNzPVwiaW9uLW5vLXBhZGRpbmdcIj5cbiAgICAgICAgICAgIDxpb24tbGFiZWwgY2xhc3M9XCJpb24tdGV4dC13cmFwXCI+XG4gICAgICAgICAgICAgIDxpb24tdGV4dCBjb2xvcj1cImRhcmtcIj5cbiAgICAgICAgICAgICAgICA8aDM+e3twZWVyLmhvc3RBbmRQb3J0fX17e3BlZXIucGF0aH19PC9oMz5cbiAgICAgICAgICAgICAgPC9pb24tdGV4dD5cbiAgICAgICAgICAgICAgPGlvbi10ZXh0IGNvbG9yPVwicHJpbWFyeVwiPlxuICAgICAgICAgICAgICAgIDxoND57e3BlZXIubGFiZWx9fTwvaDQ+XG4gICAgICAgICAgICAgIDwvaW9uLXRleHQ+XG4gICAgICAgICAgICA8L2lvbi1sYWJlbD5cbiAgICAgICAgICA8L2lvbi1jb2w+XG4gICAgICAgICAgPGlvbi1jb2wgY2xhc3M9XCJpb24tbm8tcGFkZGluZ1wiPlxuICAgICAgICAgICAgPGlvbi1sYWJlbCBjbGFzcz1cImlvbi10ZXh0LXdyYXAgaW9uLXRleHQtY2VudGVyXCIgY29sb3I9XCJtZWRpdW1cIj5cbiAgICAgICAgICAgICAgPGgzPnt7cGVlci5zb2Z0d2FyZU5hbWV9fTwvaDM+XG4gICAgICAgICAgICAgIDxoNCAqbmdJZj1cIiFwZWVyTWluVmVyc2lvbiB8fCBpc0NvbXBhdGlibGUocGVlcik7IGVsc2UgaW52YWxpZFZlcnNpb25cIj5cbiAgICAgICAgICAgICAgICA8c21hbGw+dnt7cGVlci5zb2Z0d2FyZVZlcnNpb259fTwvc21hbGw+XG4gICAgICAgICAgICAgIDwvaDQ+XG4gICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjaW52YWxpZFZlcnNpb24+XG4gICAgICAgICAgICAgICAgPGlvbi10ZXh0IGNvbG9yPVwiZGFuZ2VyXCIgW21hdFRvb2x0aXBdPVwiJ05FVFdPUksuUEVFUi5TRUxFQ1RfTU9EQUwuTk9UX0NPTVBBVElCTEVfSEVMUCd8dHJhbnNsYXRlOiB7dmVyc2lvbjogcGVlck1pblZlcnNpb259IFwiPlxuICAgICAgICAgICAgICAgICAgPGg0IGNsYXNzPVwiaW9uLWNvbG9yLWRhbmdlclwiPlxuICAgICAgICAgICAgICAgICAgICA8c21hbGw+PG1hdC1pY29uPndhcm5pbmc8L21hdC1pY29uPnZ7e3BlZXIuc29mdHdhcmVWZXJzaW9ufX08L3NtYWxsPlxuICAgICAgICAgICAgICAgICAgPC9oND5cbiAgICAgICAgICAgICAgICA8L2lvbi10ZXh0PlxuICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPC9pb24tbGFiZWw+XG4gICAgICAgICAgPC9pb24tY29sPlxuICAgICAgICA8L2lvbi1yb3c+XG4gICAgICA8L2lvbi1ncmlkPlxuXG4gICAgICA8IS0tIFBlZXIgaXMgRE9XTiAtLT5cbiAgICAgIDxpb24tbGFiZWwgY2xhc3M9XCJpb24tdGV4dC13cmFwXCIgKm5nSWY9XCIhcGVlci5yZWFjaGFibGVcIj5cbiAgICAgICAgPGlvbi10ZXh0IGNvbG9yPVwibWVkaXVtXCI+XG4gICAgICAgICAgPGgzPnt7cGVlci5ob3N0QW5kUG9ydH19e3twZWVyLnBhdGh9fTwvaDM+XG4gICAgICAgIDwvaW9uLXRleHQ+XG4gICAgICAgIDxpb24tdGV4dCBjb2xvcj1cImRhbmdlclwiPlxuICAgICAgICAgIDxoND5cbiAgICAgICAgICAgIDxzbWFsbD48aW9uLWljb24gc2l6ZT1cInNtYWxsXCIgbmFtZT1cImNsb3NlLWNpcmNsZVwiPjwvaW9uLWljb24+PC9zbWFsbD5cbiAgICAgICAgICAgIDxzcGFuIHRyYW5zbGF0ZT5ORVRXT1JLLlBFRVIuT0ZGTElORTwvc3Bhbj5cbiAgICAgICAgICA8L2g0PlxuICAgICAgICA8L2lvbi10ZXh0PlxuICAgICAgPC9pb24tbGFiZWw+XG4gICAgPC9pb24taXRlbT5cbiAgPC9pb24tbGlzdD5cblxuPC9pb24tY29udGVudD5cblxuXG48aW9uLWZvb3RlciAqbmdJZj1cImNhbkNhbmNlbFwiIGhpZGRlbi14cyBoaWRkZW4tc20gaGlkZGVuLW1vYmlsZT5cblxuICA8aW9uLXRvb2xiYXI+XG5cbiAgICA8aW9uLXJvdyBjbGFzcz1cImlvbi1uby1wYWRkaW5nXCIgbm93cmFwPlxuICAgICAgPGlvbi1jb2w+PC9pb24tY29sPlxuXG4gICAgICA8IS0tIGJ1dHRvbnMgLS0+XG4gICAgICA8aW9uLWNvbCBzaXplPVwiYXV0b1wiICpuZ0lmPVwic2hvd1NldE1hbnVhbGx5QnV0dG9uXCI+XG4gICAgICAgIDxpb24tYnV0dG9uIGZpbGw9XCJjbGVhclwiIGNvbG9yPVwiZGFya1wiIChjbGljayk9XCJjbGlja1NldE1hbnVhbGx5KCRldmVudClcIj5cbiAgICAgICAgICA8aW9uLWxhYmVsIHRyYW5zbGF0ZT5ORVRXT1JLLlBFRVIuU0VMRUNUX01PREFMLkJUTl9TRVRfTUFOVUFMTFk8L2lvbi1sYWJlbD5cbiAgICAgICAgPC9pb24tYnV0dG9uPlxuICAgICAgPC9pb24tY29sPlxuICAgICAgPGlvbi1jb2wgc2l6ZT1cImF1dG9cIj5cbiAgICAgICAgPGlvbi1idXR0b24gZmlsbD1cImNsZWFyXCIgY29sb3I9XCJkYXJrXCIgKGNsaWNrKT1cImNhbmNlbCgpXCI+XG4gICAgICAgICAgPGlvbi1sYWJlbCB0cmFuc2xhdGU+Q09NTU9OLkJUTl9DQU5DRUw8L2lvbi1sYWJlbD5cbiAgICAgICAgPC9pb24tYnV0dG9uPlxuICAgICAgPC9pb24tY29sPlxuICAgIDwvaW9uLXJvdz5cblxuXG4gIDwvaW9uLXRvb2xiYXI+XG48L2lvbi1mb290ZXI+XG4iXX0=
182
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0LXBlZXIubW9kYWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL2NvcmUvcGVlci9zZWxlY3QtcGVlci5tb2RhbC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvY29yZS9wZWVyL3NlbGVjdC1wZWVyLm1vZGFsLmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLHVCQUF1QixFQUFxQixTQUFTLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQWEsUUFBUSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBRXRJLE9BQU8sRUFBQyxJQUFJLEVBQUMsTUFBTSw4QkFBOEIsQ0FBQztBQUNsRCxPQUFPLEVBQWEsT0FBTyxFQUFFLFlBQVksRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUN2RCxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sMkNBQTJDLENBQUM7QUFFMUUsT0FBTyxFQUFDLFlBQVksRUFBVyxNQUFNLDJCQUEyQixDQUFDO0FBQ2pFLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSwrQkFBK0IsQ0FBQztBQUMzRCxPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0seUNBQXlDLENBQUM7QUFDcEUsT0FBTyxFQUFDLFdBQVcsRUFBcUIsTUFBTSw2Q0FBNkMsQ0FBQztBQUU1RixPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0sd0JBQXdCLENBQUM7QUFDaEQsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQzFDLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSw2QkFBNkIsQ0FBQztBQUM1RCxPQUFPLEVBQUMsbUJBQW1CLEVBQUMsTUFBTSw0Q0FBNEMsQ0FBQzs7Ozs7Ozs7O0FBaUIvRSxNQUFNLE9BQU8sZUFBZTtJQWUxQixZQUNVLFNBQTBCLEVBQzFCLGlCQUFvQyxFQUNwQyxTQUEyQixFQUMzQixJQUFnQixFQUNoQixFQUFxQixFQUNFLFdBQVcsRUFD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LG1CQUdaLHVCQUF1QixDQUFDLE1BQU0sY0FDbkMsQ0FBQyxlQUFlLENBQUM7OzBCQXVCMUIsTUFBTTsyQkFBQyxXQUFXOzswQkFDbEIsUUFBUTs7MEJBQUksTUFBTTsyQkFBQyxtQkFBbUI7NENBWmhDLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csbUJBQW1CO3NCQUEzQixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0cscUJBQXFCO3NCQUE3QixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbmplY3QsIElucHV0LCBPbkRlc3Ryb3ksIE9wdGlvbmFsfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7TW9kYWxDb250cm9sbGVyLCBQb3BvdmVyQ29udHJvbGxlcn0gZnJvbSAnQGlvbmljL2FuZ3VsYXInO1xuaW1wb3J0IHtQZWVyfSBmcm9tICcuLi9zZXJ2aWNlcy9tb2RlbC9wZWVyLm1vZGVsJztcbmltcG9ydCB7T2JzZXJ2YWJsZSwgU3ViamVjdCwgU3Vic2NyaXB0aW9ufSBmcm9tICdyeGpzJztcbmltcG9ydCB7ZmFkZUluQW5pbWF0aW9ufSBmcm9tICcuLi8uLi9zaGFyZWQvbWF0ZXJpYWwvbWF0ZXJpYWwuYW5pbWF0aW9ucyc7XG5pbXBvcnQge0h0dHBDbGllbnR9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7TmV0d29ya1V0aWxzLCBOb2RlSW5mb30gZnJvbSAnLi4vc2VydmljZXMvbmV0d29yay51dGlscyc7XG5pbXBvcnQge1ZlcnNpb25VdGlsc30gZnJvbSAnLi4vLi4vc2hhcmVkL3ZlcnNpb24vdmVyc2lvbnMnO1xuaW1wb3J0IHtFTlZJUk9OTUVOVH0gZnJvbSAnLi4vLi4vLi4vZW52aXJvbm1lbnRzL2Vudmlyb25tZW50LmNsYXNzJztcbmltcG9ydCB7VGV4dFBvcG92ZXIsIFRleHRQb3BvdmVyT3B0aW9uc30gZnJvbSAnLi4vZm9ybS90ZXh0LXBvcG92ZXIvdGV4dC1wb3BvdmVyLmNvbXBvbmVudCc7XG5pbXBvcnQge1RyYW5zbGF0ZVNlcnZpY2V9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHtpc01vYmlsZX0gZnJvbSAnLi4vLi4vc2hhcmVkL3BsYXRmb3Jtcyc7XG5pbXBvcnQge1ZhbGlkYXRvcnN9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7UEVFUl9VUkxfUkVHRVhQfSBmcm9tICcuLi9zZXJ2aWNlcy9uZXR3b3JrLnNlcnZpY2UnO1xuaW1wb3J0IHtBUFBfTE9HR0lOR19TRVJWSUNFfSBmcm9tICcuLi8uLi9zaGFyZWQvbG9nZ2luZy9sb2dnaW5nLXNlcnZpY2UuY2xhc3MnO1xuaW1wb3J0IHtJTG9nZ2VyLCBJTG9nZ2luZ1NlcnZpY2V9IGZyb20gJy4uLy4uL3NoYXJlZC9sb2dnaW5nL2xvZ2dlci5tb2RlbCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVNlbGVjdFBlZXJNb2RhbE9wdGlvbnMge1xuICBjYW5DYW5jZWw6IGJvb2xlYW47XG4gIGFsbG93U2VsZWN0RG93blBlZXI6IGJvb2xlYW47XG4gIG9uUmVmcmVzaDogRXZlbnRFbWl0dGVyPEV2ZW50PjtcbiAgc2hvd1NldE1hbnVhbGx5QnV0dG9uOiBib29sZWFuO1xufVxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdzZWxlY3QtcGVlci1tb2RhbCcsXG4gIHRlbXBsYXRlVXJsOiAnc2VsZWN0LXBlZXIubW9kYWwuaHRtbCcsXG4gIHN0eWxlVXJsczogWyAnLi9zZWxlY3QtcGVlci5tb2RhbC5zY3NzJyBdLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgYW5pbWF0aW9uczogW2ZhZGVJbkFuaW1hdGlvbl1cbn0pXG5leHBvcnQgY2xhc3MgU2VsZWN0UGVlck1vZGFsIGltcGxlbWVudHMgT25EZXN0cm95LCBJU2VsZWN0UGVlck1vZGFsT3B0aW9ucyB7XG5cbiAgcHJpdmF0ZSBfc3Vic2NyaXB0aW9uID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9sb2dnZXI6IElMb2dnZXI7XG5cbiAgbG9hZGluZyA9IHRydWU7XG4gIG1vYmlsZTogYm9vbGVhbjtcbiAgJHBlZXJzID0gbmV3IFN1YmplY3Q8UGVlcltdPigpO1xuICBwZWVyTWluVmVyc2lvbiA9IHRoaXMuZW52aXJvbm1lbnQucGVlck1pblZlcnNpb247XG5cbiAgQElucHV0KCkgY2FuQ2FuY2VsID0gdHJ1ZTtcbiAgQElucHV0KCkgYWxsb3dTZWxlY3REb3duUGVlciA9IHRydWU7XG4gIEBJbnB1dCgpIG9uUmVmcmVzaCA9IG5ldyBFdmVudEVtaXR0ZXI8RXZlbnQ+KCk7XG4gIEBJbnB1dCgpIHNob3dTZXRNYW51YWxseUJ1dHRvbiA9IHRydWU7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBtb2RhbEN0cmw6IE1vZGFsQ29udHJvbGxlcixcbiAgICBwcml2YXRlIHBvcG92ZXJDb250cm9sbGVyOiBQb3BvdmVyQ29udHJvbGxlcixcbiAgICBwcml2YXRlIHRyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICBwcml2YXRlIGh0dHA6IEh0dHBDbGllbnQsXG4gICAgcHJpdmF0ZSBjZDogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgQEluamVjdChFTlZJUk9OTUVOVCkgcHJvdGVjdGVkIGVudmlyb25tZW50LFxuICAgIEBPcHRpb25hbCgpIEBJbmplY3QoQVBQX0xPR0dJTkdfU0VSVklDRSkgcHJvdGVjdGVkIGxvZ2dpbmdTZXJ2aWNlPzogSUxvZ2dpbmdTZXJ2aWNlXG4gICkge1xuICAgIHRoaXMubW9iaWxlID0gaXNNb2JpbGUod2luZG93KTtcbiAgICB0aGlzLl9sb2dnZXIgPSBsb2dnaW5nU2VydmljZT8uZ2V0TG9nZ2VyKCduZXR3b3JrLW1vZGFsJyk7XG4gIH1cblxuICBzZXQgcGVlcnMocGVlcnM6IE9ic2VydmFibGU8UGVlcltdPikge1xuICAgIHRoaXMuX3N1YnNjcmlwdGlvbi5hZGQoXG4gICAgICBwZWVycy5zdWJzY3JpYmUocmVzID0+IHRoaXMucmVmcmVzaFBlZXJzKHJlcykpXG4gICAgKTtcbiAgfVxuXG4gIGNhbmNlbCgpIHtcbiAgICB0aGlzLm1vZGFsQ3RybC5kaXNtaXNzKCk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLl9zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIHNlbGVjdFBlZXIocGVlcjogUGVlcikge1xuICAgIGlmICh0aGlzLmFsbG93U2VsZWN0RG93blBlZXIgfHwgKHBlZXIucmVhY2hhYmxlICYmIHRoaXMuaXNDb21wYXRpYmxlKHBlZXIpKSkge1xuICAgICAgY29uc29sZS5kZWJ1ZyhgW3NlbGVjdC1wZWVyLW1vZGFsXSBTZWxlY3RlZCBwZWVyOiB7dXJsOiAnJHtwZWVyLnVybH0nfWApO1xuICAgICAgdGhpcy5tb2RhbEN0cmwuZGlzbWlzcyhwZWVyKTtcbiAgICB9XG4gIH1cblxuXG4gIC8qKlxuICAgKiAgQ2hlY2sgdGhlIG1pbiBwb2QgdmVyc2lvbiwgZGVmaW5lZCBieSB0aGUgYXBwXG4gICAqXG4gICAqIEBwYXJhbSBwZWVyXG4gICAqL1xuICBpc0NvbXBhdGlibGUocGVlcjogUGVlcik6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhdGhpcy5wZWVyTWluVmVyc2lvbiB8fCAocGVlciAmJiBwZWVyLnNvZnR3YXJlVmVyc2lvbiAmJiBWZXJzaW9uVXRpbHMuaXNDb21wYXRpYmxlKHRoaXMucGVlck1pblZlcnNpb24sIHBlZXIuc29mdHdhcmVWZXJzaW9uKSk7XG4gIH1cblxuICByZWZyZXNoKGV2ZW50KSB7XG4gICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTtcbiAgICB0aGlzLm9uUmVmcmVzaC5lbWl0KGV2ZW50KTtcbiAgfVxuXG4gIGFzeW5jIGNsaWNrU2V0TWFudWFsbHkoZXZlbnQ/OiBFdmVudCkge1xuICAgIGNvbnN0IHBlZXJVcmwgPSBhd2FpdCB0aGlzLm9wZW5QZWVyVXJsUG9wb3ZlcihldmVudCk7XG4gICAgaWYgKHBlZXJVcmwpIHtcbiAgICAgIGNvbnN0IHBlZXIgPSBQZWVyLnBhcnNlVXJsKHBlZXJVcmwpO1xuICAgICAgYXdhaXQgdGhpcy5yZWZyZXNoUGVlcihwZWVyKTtcbiAgICAgIHRoaXMuc2VsZWN0UGVlcihwZWVyKTtcbiAgICB9XG4gIH1cblxuICAvKiAtLSBwcm90ZWN0ZWQgbWV0aG9kcyAtLSAqL1xuXG4gIGFzeW5jIHJlZnJlc2hQZWVycyhwZWVyczogUGVlcltdKSB7XG4gICAgcGVlcnMgPSBwZWVycyB8fCBbXTtcblxuICAgIGNvbnN0IGRhdGE6IFBlZXJbXSA9IFtdO1xuICAgIGNvbnN0IGpvYnMgPSBQcm9taXNlLmFsbChcbiAgICAgIHBlZXJzLm1hcChhc3luYyAocGVlcikgPT4ge1xuICAgICAgICBhd2FpdCB0aGlzLnJlZnJlc2hQZWVyKHBlZXIpO1xuXG4gICAgICAgIGlmICh0aGlzLl9zdWJzY3JpcHRpb24uY2xvc2VkKSByZXR1cm47IC8vIGNvbXBvbmVudCBkZXN0cm95ZWRcblxuICAgICAgICBkYXRhLnB1c2gocGVlcik7XG5cbiAgICAgICAgLy8gU29ydCAoYnkgcmVhY2hhYmxlLCB0aGVuIGhvc3QpXG4gICAgICAgIGRhdGEuc29ydCgoYSwgYikgPT4ge1xuICAgICAgICAgIGlmIChhLnJlYWNoYWJsZSAmJiAhYi5yZWFjaGFibGUpIHJldHVybiAtMTtcbiAgICAgICAgICBpZiAoIWEucmVhY2hhYmxlICYmIGIucmVhY2hhYmxlKSByZXR1cm4gMTtcbiAgICAgICAgICBpZiAoYS5ob3N0QW5kUG9ydCA8IGIuaG9zdEFuZFBvcnQpIHJldHVybiAtMTtcbiAgICAgICAgICBpZiAoYS5ob3N0QW5kUG9ydCA+IGIuaG9zdEFuZFBvcnQpIHJldHVybiAxO1xuICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLiRwZWVycy5uZXh0KGRhdGEpO1xuICAgICAgICByZXR1cm4gcGVlcjtcbiAgICAgIH0pKTtcblxuICAgIHRoaXMuX3N1YnNjcmlwdGlvbi5hZGQoXG4gICAgICB0aGlzLiRwZWVyc1xuICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHRoaXMuY2QubWFya0ZvckNoZWNrKCkpXG4gICAgKTtcblxuICAgIHRyeSB7XG4gICAgICBhd2FpdCBqb2JzO1xuICAgIH1cbiAgICBjYXRjaChlcnIpIHtcbiAgICAgIGlmICghdGhpcy5fc3Vic2NyaXB0aW9uLmNsb3NlZCkgY29uc29sZS5lcnJvcihlcnIpO1xuICAgIH1cbiAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgICB0aGlzLmNkLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIHJlZnJlc2hQZWVyKHBlZXI6IFBlZXIpOiBQcm9taXNlPFBlZXI+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3Qgc3VtbWFyeTogTm9kZUluZm8gPSBhd2FpdCBOZXR3b3JrVXRpbHMuZ2V0Tm9kZUluZm8odGhpcy5odHRwLCBwZWVyLnVybCk7XG4gICAgICBwZWVyLnN0YXR1cyA9ICdVUCc7XG4gICAgICBwZWVyLnNvZnR3YXJlTmFtZSA9IHN1bW1hcnkuc29mdHdhcmVOYW1lO1xuICAgICAgcGVlci5zb2Z0d2FyZVZlcnNpb24gPSBzdW1tYXJ5LnNvZnR3YXJlVmVyc2lvbjtcbiAgICAgIHBlZXIubGFiZWwgPSBzdW1tYXJ5Lm5vZGVMYWJlbDtcbiAgICAgIHBlZXIubmFtZSA9IHN1bW1hcnkubm9kZU5hbWU7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAvLyBJZiBtb2RhbCB3YXMgbm90IGNsb3NlZCAoZS5nLiByZXNwb25zZSBhcnJpdmVkIHRvbyBsYXRlID0+IGlnbm9yZSlcbiAgICAgIGlmICghdGhpcy5fc3Vic2NyaXB0aW9uLmNsb3NlZCkgIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihgW3NlbGVjdC1wZWVyXSBFcnJvciB3aGlsZSBjYWxsaW5nICcke3BlZXIudXJsfS9hcGkvbm9kZS9pbmZvJzogJHtlcnI/Lm1lc3NhZ2UgfHwgZXJyfWAsIGVycik7XG4gICAgICAgIHRoaXMuX2xvZ2dlcj8uZXJyb3IoYEVycm9yIHdoaWxlIGNhbGxpbmcgJyR7cGVlci51cmx9L2FwaS9ub2RlL2luZm8nOiAke0pTT04uc3RyaW5naWZ5KGVycil9YCk7XG4gICAgICB9XG4gICAgICBwZWVyLnN0YXR1cyA9ICdET1dOJztcbiAgICB9XG4gICAgcmV0dXJuIHBlZXI7XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgb3BlblBlZXJVcmxQb3BvdmVyKGV2ZW50OiBFdmVudCwgb3B0cz86IFBhcnRpYWw8VGV4dFBvcG92ZXJPcHRpb25zPikge1xuICAgIGNvbnN0IG1vZGFsID0gYXdhaXQgdGhpcy5wb3BvdmVyQ29udHJvbGxlci5jcmVhdGUoe1xuICAgICAgY29tcG9uZW50OiBUZXh0UG9wb3ZlcixcbiAgICAgIGNvbXBvbmVudFByb3BzOiA8VGV4dFBvcG92ZXJPcHRpb25zPntcbiAgICAgICAgcGxhY2Vob2xkZXI6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoJ1NFVFRJTkdTLlBFRVJfVVJMJyksXG4gICAgICAgIG11bHRpbGluZTogZmFsc2UsXG4gICAgICAgIGF1dG9mb2N1czogIXRoaXMubW9iaWxlLFxuICAgICAgICBhdXRvY29tcGxldGU6IGZhbHNlLFxuICAgICAgICB2YWxpZGF0b3I6IFZhbGlkYXRvcnMucGF0dGVybihQRUVSX1VSTF9SRUdFWFApLFxuICAgICAgICBtYXhMZW5ndGg6IG51bGwsXG4gICAgICAgIC4uLm9wdHNcbiAgICAgIH0sXG4gICAgICBiYWNrZHJvcERpc21pc3M6IGZhbHNlLFxuICAgICAga2V5Ym9hcmRDbG9zZTogZmFsc2UsXG4gICAgICBldmVudCxcbiAgICAgIHRyYW5zbHVjZW50OiB0cnVlLFxuICAgICAgY3NzQ2xhc3M6ICdwb3BvdmVyLWxhcmdlJyxcbiAgICB9KTtcblxuICAgIGF3YWl0IG1vZGFsLnByZXNlbnQoKTtcbiAgICBjb25zdCB7IGRhdGEsIHJvbGUgfSA9IGF3YWl0IG1vZGFsLm9uRGlkRGlzbWlzcygpO1xuXG4gICAgaWYgKGRhdGEpIHtcbiAgICAgIGNvbnNvbGUuaW5mbygnUG9wb3ZlciByZXN1bHQ6ICcsIGRhdGEpO1xuICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIG1hcmtGb3JDaGVjaygpIHtcbiAgICB0aGlzLmNkLm1hcmtGb3JDaGVjaygpO1xuICB9XG59XG4iLCI8aW9uLWhlYWRlcj5cbiAgPGlvbi10b29sYmFyIGNvbG9yPVwibGlnaHRcIj5cbiAgICA8aW9uLWJ1dHRvbnMgc2xvdD1cInN0YXJ0XCI+XG4gICAgICA8aW9uLWJ1dHRvbiAoY2xpY2spPVwiY2FuY2VsKClcIiAqbmdJZj1cImNhbkNhbmNlbFwiXG4gICAgICAgICAgICAgICAgICB2aXNpYmxlLXhzIHZpc2libGUtc20gdmlzaWJsZS1tb2JpbGU+XG4gICAgICAgIDxpb24taWNvbiBzbG90PVwiaWNvbi1vbmx5XCIgbmFtZT1cImFycm93LWJhY2tcIj48L2lvbi1pY29uPlxuICAgICAgPC9pb24tYnV0dG9uPlxuICAgIDwvaW9uLWJ1dHRvbnM+XG5cbiAgICA8aW9uLXRpdGxlPlxuICAgICAge3snTkVUV09SSy5QRUVSLlNFTEVDVF9NT0RBTC5USVRMRSd8dHJhbnNsYXRlfX1cbiAgICA8L2lvbi10aXRsZT5cblxuICAgIDxpb24tYnV0dG9ucyBzbG90PVwiZW5kXCI+XG4gICAgICA8IS0tIGxvYWRlciAtLT5cbiAgICAgIDxpb24tc3Bpbm5lciAqbmdJZj1cImxvYWRpbmc7IGVsc2UgZW5kQnV0dG9uc1wiPjwvaW9uLXNwaW5uZXI+XG5cbiAgICAgIDxuZy10ZW1wbGF0ZSAjZW5kQnV0dG9ucz5cbiAgICAgICAgPCEtLSByZWZyZXNoIGJ1dHRvbiAtLT5cbiAgICAgICAgPGlvbi1idXR0b24gKm5nSWY9XCJvblJlZnJlc2gub2JzZXJ2ZXJzIHwgaXNOb3RFbXB0eUFycmF5XCJcbiAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPVwiJ0NPTU1PTi5CVE5fUkVGUkVTSCd8dHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInJlZnJlc2goJGV2ZW50KVwiPlxuICAgICAgICAgIDxtYXQtaWNvbiBzbG90PVwiaWNvbi1vbmx5XCI+cmVmcmVzaDwvbWF0LWljb24+XG4gICAgICAgIDwvaW9uLWJ1dHRvbj5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPC9pb24tYnV0dG9ucz5cbiAgPC9pb24tdG9vbGJhcj5cbjwvaW9uLWhlYWRlcj5cblxuPGlvbi1jb250ZW50PlxuXG4gIDxpb24tbGlzdD5cblxuICAgIDxpb24tbGlzdC1oZWFkZXI+XG4gICAgICA8aW9uLWxhYmVsIGNsYXNzPVwiaW9uLXRleHQtd3JhcFwiPlxuICAgICAgICA8cCB0cmFuc2xhdGU+TkVUV09SSy5QRUVSLlNFTEVDVF9NT0RBTC5IRUxQPC9wPlxuICAgICAgPC9pb24tbGFiZWw+XG4gICAgPC9pb24tbGlzdC1oZWFkZXI+XG5cbiAgICA8aW9uLWl0ZW0gKm5nRm9yPVwibGV0IHBlZXIgb2YgJHBlZXJzIHwgYXN5bmNcIlxuICAgICAgICAgICAgICB0YXBwYWJsZVxuICAgICAgICAgICAgICAoY2xpY2spPVwic2VsZWN0UGVlcihwZWVyKVwiXG4gICAgICAgICAgICAgIGRldGFpbFxuICAgICAgICAgICAgICBAZmFkZUluQW5pbWF0aW9uPlxuXG4gICAgICA8IS0tIGljb24gLS0+XG4gICAgICA8aW9uLWF2YXRhciBzbG90PVwic3RhcnRcIiAqbmdJZj1cInBlZXIucmVhY2hhYmxlXCIgPlxuICAgICAgICA8aW9uLWltZyBbc3JjXT1cInBlZXIuZmF2aWNvbiB8fCAocGVlci51cmwgKyAnL2FwaS9mYXZpY29uJylcIj48L2lvbi1pbWc+XG4gICAgICA8L2lvbi1hdmF0YXI+XG4gICAgICA8aW9uLWljb24gc2xvdD1cInN0YXJ0XCIgICpuZ0lmPVwiIXBlZXIucmVhY2hhYmxlXCIgbmFtZT1cImRlc2t0b3BcIiBjb2xvcj1cIm1lZGl1bVwiIGNsYXNzPVwiaW9uLXRleHQtY2VudGVyXCI+PC9pb24taWNvbj5cblxuICAgICAgPCEtLSBQZWVyIGlzIFVQIC0tPlxuICAgICAgPGlvbi1ncmlkICpuZ0lmPVwicGVlci5yZWFjaGFibGVcIj5cbiAgICAgICAgPGlvbi1yb3cgY2xhc3M9XCJpb24tbm8tcGFkZGluZ1wiPlxuICAgICAgICAgIDxpb24tY29sIGNsYXNzPVwiaW9uLW5vLXBhZGRpbmdcIj5cbiAgICAgICAgICAgIDxpb24tbGFiZWwgY2xhc3M9XCJpb24tdGV4dC13cmFwXCI+XG4gICAgICAgICAgICAgIDxpb24tdGV4dCBjb2xvcj1cImRhcmtcIj5cbiAgICAgICAgICAgICAgICA8aDM+e3twZWVyLmhvc3RBbmRQb3J0fX17e3BlZXIucGF0aH19PC9oMz5cbiAgICAgICAgICAgICAgPC9pb24tdGV4dD5cbiAgICAgICAgICAgICAgPGlvbi10ZXh0IGNvbG9yPVwicHJpbWFyeVwiPlxuICAgICAgICAgICAgICAgIDxoND57e3BlZXIubGFiZWx9fTwvaDQ+XG4gICAgICAgICAgICAgIDwvaW9uLXRleHQ+XG4gICAgICAgICAgICA8L2lvbi1sYWJlbD5cbiAgICAgICAgICA8L2lvbi1jb2w+XG4gICAgICAgICAgPGlvbi1jb2wgY2xhc3M9XCJpb24tbm8tcGFkZGluZ1wiPlxuICAgICAgICAgICAgPGlvbi1sYWJlbCBjbGFzcz1cImlvbi10ZXh0LXdyYXAgaW9uLXRleHQtY2VudGVyXCIgY29sb3I9XCJtZWRpdW1cIj5cbiAgICAgICAgICAgICAgPGgzPnt7cGVlci5zb2Z0d2FyZU5hbWV9fTwvaDM+XG4gICAgICAgICAgICAgIDxoNCAqbmdJZj1cIiFwZWVyTWluVmVyc2lvbiB8fCBpc0NvbXBhdGlibGUocGVlcik7IGVsc2UgaW52YWxpZFZlcnNpb25cIj5cbiAgICAgICAgICAgICAgICA8c21hbGw+dnt7cGVlci5zb2Z0d2FyZVZlcnNpb259fTwvc21hbGw+XG4gICAgICAgICAgICAgIDwvaDQ+XG4gICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjaW52YWxpZFZlcnNpb24+XG4gICAgICAgICAgICAgICAgPGlvbi10ZXh0IGNvbG9yPVwiZGFuZ2VyXCIgW21hdFRvb2x0aXBdPVwiJ05FVFdPUksuUEVFUi5TRUxFQ1RfTU9EQUwuTk9UX0NPTVBBVElCTEVfSEVMUCd8dHJhbnNsYXRlOiB7dmVyc2lvbjogcGVlck1pblZlcnNpb259IFwiPlxuICAgICAgICAgICAgICAgICAgPGg0IGNsYXNzPVwiaW9uLWNvbG9yLWRhbmdlclwiPlxuICAgICAgICAgICAgICAgICAgICA8c21hbGw+PG1hdC1pY29uPndhcm5pbmc8L21hdC1pY29uPnZ7e3BlZXIuc29mdHdhcmVWZXJzaW9ufX08L3NtYWxsPlxuICAgICAgICAgICAgICAgICAgPC9oND5cbiAgICAgICAgICAgICAgICA8L2lvbi10ZXh0PlxuICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPC9pb24tbGFiZWw+XG4gICAgICAgICAgPC9pb24tY29sPlxuICAgICAgICA8L2lvbi1yb3c+XG4gICAgICA8L2lvbi1ncmlkPlxuXG4gICAgICA8IS0tIFBlZXIgaXMgRE9XTiAtLT5cbiAgICAgIDxpb24tbGFiZWwgY2xhc3M9XCJpb24tdGV4dC13cmFwXCIgKm5nSWY9XCIhcGVlci5yZWFjaGFibGVcIj5cbiAgICAgICAgPGlvbi10ZXh0IGNvbG9yPVwibWVkaXVtXCI+XG4gICAgICAgICAgPGgzPnt7cGVlci5ob3N0QW5kUG9ydH19e3twZWVyLnBhdGh9fTwvaDM+XG4gICAgICAgIDwvaW9uLXRleHQ+XG4gICAgICAgIDxpb24tdGV4dCBjb2xvcj1cImRhbmdlclwiPlxuICAgICAgICAgIDxoND5cbiAgICAgICAgICAgIDxzbWFsbD48aW9uLWljb24gc2l6ZT1cInNtYWxsXCIgbmFtZT1cImNsb3NlLWNpcmNsZVwiPjwvaW9uLWljb24+PC9zbWFsbD5cbiAgICAgICAgICAgIDxzcGFuIHRyYW5zbGF0ZT5ORVRXT1JLLlBFRVIuT0ZGTElORTwvc3Bhbj5cbiAgICAgICAgICA8L2g0PlxuICAgICAgICA8L2lvbi10ZXh0PlxuICAgICAgPC9pb24tbGFiZWw+XG4gICAgPC9pb24taXRlbT5cbiAgPC9pb24tbGlzdD5cblxuPC9pb24tY29udGVudD5cblxuXG48aW9uLWZvb3RlciAqbmdJZj1cImNhbkNhbmNlbFwiIGhpZGRlbi14cyBoaWRkZW4tc20gaGlkZGVuLW1vYmlsZT5cblxuICA8aW9uLXRvb2xiYXI+XG5cbiAgICA8aW9uLXJvdyBjbGFzcz1cImlvbi1uby1wYWRkaW5nXCIgbm93cmFwPlxuICAgICAgPGlvbi1jb2w+PC9pb24tY29sPlxuXG4gICAgICA8IS0tIGJ1dHRvbnMgLS0+XG4gICAgICA8aW9uLWNvbCBzaXplPVwiYXV0b1wiICpuZ0lmPVwic2hvd1NldE1hbnVhbGx5QnV0dG9uXCI+XG4gICAgICAgIDxpb24tYnV0dG9uIGZpbGw9XCJjbGVhclwiIGNvbG9yPVwiZGFya1wiIChjbGljayk9XCJjbGlja1NldE1hbnVhbGx5KCRldmVudClcIj5cbiAgICAgICAgICA8aW9uLWxhYmVsIHRyYW5zbGF0ZT5ORVRXT1JLLlBFRVIuU0VMRUNUX01PREFMLkJUTl9TRVRfTUFOVUFMTFk8L2lvbi1sYWJlbD5cbiAgICAgICAgPC9pb24tYnV0dG9uPlxuICAgICAgPC9pb24tY29sPlxuICAgICAgPGlvbi1jb2wgc2l6ZT1cImF1dG9cIj5cbiAgICAgICAgPGlvbi1idXR0b24gZmlsbD1cImNsZWFyXCIgY29sb3I9XCJkYXJrXCIgKGNsaWNrKT1cImNhbmNlbCgpXCI+XG4gICAgICAgICAgPGlvbi1sYWJlbCB0cmFuc2xhdGU+Q09NTU9OLkJUTl9DQU5DRUw8L2lvbi1sYWJlbD5cbiAgICAgICAgPC9pb24tYnV0dG9uPlxuICAgICAgPC9pb24tY29sPlxuICAgIDwvaW9uLXJvdz5cblxuXG4gIDwvaW9uLXRvb2xiYXI+XG48L2lvbi1mb290ZXI+XG4iXX0=
@@ -225,11 +225,8 @@ export class NetworkService extends StartableObservableService {
225
225
  return undefined; // No peer define. Skip
226
226
  peer = Peer.parseUrl(settings.peerUrl);
227
227
  }
228
- const peerUrl = typeof peer === 'string' ? peer : peer.url;
229
- this._logger?.info('checkPeerAlive', `Checking if peer {${peerUrl}} is alive, by calling /api/node/info ...`);
230
228
  try {
231
229
  const data = await this.getNodeInfo(peer);
232
- this._logger?.info('checkPeerAlive', `Peer {${peerUrl}} is alive:\n${JSON.stringify(data)}`);
233
230
  return data;
234
231
  }
235
232
  catch (err) {
@@ -256,9 +253,19 @@ export class NetworkService extends StartableObservableService {
256
253
  }
257
254
  return isCompatible;
258
255
  }
259
- getNodeInfo(peer) {
256
+ async getNodeInfo(peer) {
260
257
  const path = this.computePeerPath(peer, '/api/node/info');
261
- return this.get(path);
258
+ this._logger?.info('checkPeerAlive', `Getting '${path}' ...`);
259
+ try {
260
+ const data = await this.get(path);
261
+ this._logger?.debug('checkPeerAlive', `Result:\n${JSON.stringify(data)}`);
262
+ return data;
263
+ }
264
+ catch (err) {
265
+ console.debug(`[network] Error while getting '${path}': ${err && err.message || err}`, err);
266
+ this._logger?.error('checkPeerAlive', `[network] Error while getting '${path}': ${err?.message || ''}' ${JSON.stringify(err)}`);
267
+ return undefined;
268
+ }
262
269
  }
263
270
  async getAppManifest(peer, opts) {
264
271
  try {
@@ -482,12 +489,10 @@ export class NetworkService extends StartableObservableService {
482
489
  this._timerSubscription.add(() => console.debug('[network] Refresh timer stopped'));
483
490
  }
484
491
  async getText(path, opts) {
485
- let uri = this.getUri(path);
486
- return HttpUtils.getText(this.http, uri, opts);
492
+ return HttpUtils.getText(this.http, this.getUri(path), opts);
487
493
  }
488
- async get(path, opts) {
489
- let uri = this.getUri(path);
490
- return HttpUtils.getJson(this.http, uri, opts);
494
+ get(path, opts) {
495
+ return HttpUtils.getJson(this.http, this.getUri(path), opts);
491
496
  }
492
497
  /* -- Protected methods -- */
493
498
  getUri(path) {
@@ -591,4 +596,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImpo
591
596
  }] }, { type: i1.ToastController, decorators: [{
592
597
  type: Optional
593
598
  }] }]; } });
594
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmV0d29yay5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9jb3JlL3NlcnZpY2VzL25ldHdvcmsuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsWUFBWSxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBSXpFLE9BQU8sRUFBQyxJQUFJLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUd4QyxPQUFPLEVBQTBCLGVBQWUsRUFBQyxNQUFNLDJCQUEyQixDQUFDO0FBQ25GLE9BQU8sRUFBQyxlQUFlLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUMxRCxPQUFPLEVBQXVCLG9CQUFvQixFQUFDLE1BQU0sMEJBQTBCLENBQUM7QUFDcEYsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLDBCQUEwQixDQUFDO0FBRXRELE9BQU8sRUFBQyxlQUFlLEVBQUUsZUFBZSxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUMsTUFBTSx3QkFBd0IsQ0FBQztBQUUxRixPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFFekMsT0FBTyxFQUFtQixNQUFNLEVBQUMsTUFBTSwyQkFBMkIsQ0FBQztBQUNuRSxPQUFPLEVBQUMsb0JBQW9CLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUdsRyxPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sOEJBQThCLENBQUM7QUFDdkQsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLCtCQUErQixDQUFDO0FBQzNELE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSx5Q0FBeUMsQ0FBQztBQUNwRSxPQUFPLEVBQUMsMEJBQTBCLEVBQUMsTUFBTSwwREFBMEQsQ0FBQztB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QyxDQUFDLENBQUM7WUFDeEYsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUNMO0lBQ0gsQ0FBQzs7NEdBbnJCVSxjQUFjLGtCQTZDZixRQUFRLGtOQVFSLFdBQVcsYUFDQyxtQkFBbUI7Z0hBdEQ5QixjQUFjLGNBREYsTUFBTTs0RkFDbEIsY0FBYztrQkFEMUIsVUFBVTttQkFBQyxFQUFDLFVBQVUsRUFBRSxNQUFNLEVBQUM7OzBCQThDM0IsTUFBTTsyQkFBQyxRQUFROzswQkFRZixNQUFNOzJCQUFDLFdBQVc7OzBCQUNsQixRQUFROzswQkFBSSxNQUFNOzJCQUFDLG1CQUFtQjs7MEJBQ3RDLFFBQVE7OzBCQUNSLFFBQVE7OzBCQUNSLFFBQVEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0V2ZW50RW1pdHRlciwgSW5qZWN0LCBJbmplY3RhYmxlLCBPcHRpb25hbH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0NyeXB0b1NlcnZpY2V9IGZyb20gJy4vY3J5cHRvLnNlcnZpY2UnO1xuaW1wb3J0IHtUcmFuc2xhdGVTZXJ2aWNlfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7U3RvcmFnZX0gZnJvbSAnQGlvbmljL3N0b3JhZ2UtYW5ndWxhcic7XG5pbXBvcnQge1BlZXJ9IGZyb20gJy4vbW9kZWwvcGVlci5tb2RlbCc7XG5pbXBvcnQge0xvY2FsU2V0dGluZ3N9IGZyb20gJy4vbW9kZWwvc2V0dGluZ3MubW9kZWwnO1xuaW1wb3J0IHtNb2RhbENvbnRyb2xsZXIsIFBsYXRmb3JtLCBUb2FzdENvbnRyb2xsZXJ9IGZyb20gJ0Bpb25pYy9hbmd1bGFyJztcbmltcG9ydCB7SVNlbGVjdFBlZXJNb2RhbE9wdGlvbnMsIFNlbGVjdFBlZXJNb2RhbH0gZnJvbSAnLi4vcGVlci9zZWxlY3QtcGVlci5tb2RhbCc7XG5pbXBvcnQge0JlaGF2aW9yU3ViamVjdCwgU3Vic2NyaXB0aW9uLCB0aW1lcn0gZnJvbSAncnhqcyc7XG5pbXBvcnQge0xvY2FsU2V0dGluZ3NTZXJ2aWNlLCBTRVRUSU5HU19TVE9SQUdFX0tFWX0gZnJvbSAnLi9sb2NhbC1zZXR0aW5ncy5zZXJ2aWNlJztcbmltcG9ydCB7U3BsYXNoU2NyZWVufSBmcm9tICdAY2FwYWNpdG9yL3NwbGFzaC1zY3JlZW4nO1xuaW1wb3J0IHtIdHRwQ2xpZW50LCBIdHRwSGVhZGVyc30gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHtpc05vdEVtcHR5QXJyYXksIGlzTm90TmlsT3JCbGFuaywgc2xlZXAsIHRvQm9vbGVhbn0gZnJvbSAnLi4vLi4vc2hhcmVkL2Z1bmN0aW9ucyc7XG5pbXBvcnQge05ldHdvcmt9IGZyb20gJ0Bhd2Vzb21lLWNvcmRvdmEtcGx1Z2lucy9uZXR3b3JrL25neCc7XG5pbXBvcnQge0RPQ1VNRU5UfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtDYWNoZVNlcnZpY2V9IGZyb20gJ2lvbmljLWNhY2hlJztcbmltcG9ydCB7U2hvd1RvYXN0T3B0aW9ucywgVG9hc3RzfSBmcm9tICcuLi8uLi9zaGFyZWQvdG9hc3QvdG9hc3RzJztcbmltcG9ydCB7ZGlzdGluY3RVbnRpbENoYW5nZWQsIGZpbHRlciwgZmlyc3QsIG1hcCwgbWVyZ2VNYXAsIHRha2VVbnRpbCwgdGFwfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQge092ZXJsYXlFdmVudERldGFpbH0gZnJvbSAnQGlvbmljL2NvcmUnO1xuaW1wb3J0IHtBcHBNYW5pZmVzdCwgTm9kZUluZm99IGZyb20gJy4vbmV0d29yay51dGlscyc7XG5pbXBvcnQge0h0dHBVdGlsc30gZnJvbSAnLi4vLi4vc2hhcmVkL2h0dHAvaHR0cC51dGlscyc7XG5pbXBvcnQge1ZlcnNpb25VdGlsc30gZnJvbSAnLi4vLi4vc2hhcmVkL3ZlcnNpb24vdmVyc2lvbnMnO1xuaW1wb3J0IHtFTlZJUk9OTUVOVH0gZnJvbSAnLi4vLi4vLi4vZW52aXJvbm1lbnRzL2Vudmlyb25tZW50LmNsYXNzJztcbmltcG9ydCB7U3RhcnRhYmxlT2JzZXJ2YWJsZVNlcnZpY2V9IGZyb20gJy4uLy4uL3NoYXJlZC9zZXJ2aWNlcy9zdGFydGFibGUtb2JzZXJ2YWJsZS1zZXJ2aWNlLmNsYXNzJztcbmltcG9ydCB7Q29ubmVjdGlvblR5cGUsIGdldENvbm5lY3Rpb25UeXBlLCBOZXR3b3JrRXZlbnRUeXBlfSBmcm9tICcuL25ldHdvcmsudHlwZXMnO1xuaW1wb3J0IHtBUFBfTE9HR0lOR19TRVJWSUNFfSBmcm9tICcuLi8uLi9zaGFyZWQvbG9nZ2luZy9sb2dnaW5nLXNlcnZpY2UuY2xhc3MnO1xuaW1wb3J0IHtJTG9nZ2VyLCBJTG9nZ2luZ1NlcnZpY2V9IGZyb20gJy4uLy4uL3NoYXJlZC9sb2dnaW5nL2xvZ2dlci5tb2RlbCc7XG5cbmNvbnN0IE5ldHdvcmtSZWZyZXNoVGltZXJQZXJpb2QgPSB7XG4gICAgTU9CSUxFOiAgMTAwMCAqIDYwICogMTAgLyogZXZlcnkgMTAgbWluICovLFxuICAgIERFU0tUT1A6IDEwMDAgKiA2MCAqIDUgLyogZXZlcnkgNSBtaW4gKi9cbn07XG5cbmV4cG9ydCBjb25zdCBQRUVSX1VSTF9SRUdFWFAgPSAvXihodHRwfGh0dHBzKTpcXC9cXC9bXiBcIj8jQF0rJC87XG5cbi8qIC0tIERFViBvbmx5ICh0byBkZWJ1ZyByZWZyZXNoIHRpbWVyKVxuY29uc3QgTmV0d29ya1JlZnJlc2hUaW1lclBlcmlvZCA9IHtcbiAgICBNT0JJTEU6ICAxMDAwLFxuICAgIERFU0tUT1A6IDEwMDBcbn0qL1xuXG5ASW5qZWN0YWJsZSh7cHJvdmlkZWRJbjogJ3Jvb3QnfSlcbmV4cG9ydCBjbGFzcyBOZXR3b3JrU2VydmljZSBleHRlbmRzIFN0YXJ0YWJsZU9ic2VydmFibGVTZXJ2aWNlPFBlZXIsIFBlZXI+IHtcblxuICBvblBlZXJDaGFuZ2VzID0gdGhpcy5zdGFydFN1YmplY3QucGlwZShcbiAgICBtYXAocGVlciA9PiBwZWVyPy51cmwpLFxuICAgIGZpbHRlcihpc05vdE5pbE9yQmxhbmspLFxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkPHN0cmluZz4oKVxuICApO1xuICBvbk5ldHdvcmtTdGF0dXNDaGFuZ2VzID0gbmV3IEJlaGF2aW9yU3ViamVjdDxDb25uZWN0aW9uVHlwZT4obnVsbCk7XG4gIG9uUmVzZXROZXR3b3JrQ2FjaGUgPSBuZXcgRXZlbnRFbWl0dGVyKHRydWUpO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX21vYmlsZTogYm9vbGVhbjtcbiAgcHJpdmF0ZSByZWFkb25seSBfbG9nZ2VyOiBJTG9nZ2VyO1xuICBwcml2YXRlIF90aW1lclN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuICBwcml2YXRlIHJlYWRvbmx5IF90aW1lclJlZnJlc2hQZXJpb2Q6IG51bWJlcjtcbiAgcHJpdmF0ZSByZWFkb25seSBfdGltZXJSZWZyZXNoQ29uZGl0aW9uOiAoKSA9PiBib29sZWFuO1xuICBwcml2YXRlIF9kZXZpY2VDb25uZWN0aW9uVHlwZTogQ29ubmVjdGlvblR5cGU7XG4gIHByaXZhdGUgX2ZvcmNlT2ZmbGluZTogYm9vbGVhbjtcbiAgcHJpdmF0ZSBfbGlzdGVuZXJzOiB7XG4gICBba2V5OiBzdHJpbmddOiAoKGRhdGE/OiBhbnkpID0+IFByb21pc2U8dm9pZD4pW107XG4gIH0gPSB7fTtcblxuICBnZXQgb25saW5lKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmNvbm5lY3Rpb25UeXBlICE9PSAnbm9uZSc7XG4gIH1cblxuICBnZXQgb2ZmbGluZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5jb25uZWN0aW9uVHlwZSA9PT0gJ25vbmUnO1xuICB9XG5cbiAgZ2V0IGNvbm5lY3Rpb25UeXBlKCk6IENvbm5lY3Rpb25UeXBle1xuICAgIC8vIElmIGZvcmNlIG9mZmxpbmU6IHJldHVybiAnbm9uZSdcbiAgICByZXR1cm4gdGhpcy5fZm9yY2VPZmZsaW5lICYmICdub25lJ1xuICAgICAgLy8gRWxzZSwgcmV0dXJuIGRldmljZSBjb25uZWN0aW9uIHR5cGUgKG9yIHVua25vd24pXG4gICAgICB8fCAodGhpcy5zdGFydGVkICYmIHRoaXMuX2RldmljZUNvbm5lY3Rpb25UeXBlIHx8ICd1bmtub3duJyk7XG4gIH1cblxuICBnZXQgcGVlcigpOiBQZWVyIHtcbiAgICByZXR1cm4gdGhpcy5kYXRhU3ViamVjdC52YWx1ZT8uY2xvbmUoKTtcbiAgfVxuXG4gIHNldCBwZWVyKHBlZXI6IFBlZXIpIHtcbiAgICB0aGlzLnJlc3RhcnQocGVlcik7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihcbiAgICBASW5qZWN0KERPQ1VNRU5UKSBwcml2YXRlIF9kb2N1bWVudDogYW55LFxuICAgIHByaXZhdGUgcGxhdGZvcm06IFBsYXRmb3JtLFxuICAgIHByaXZhdGUgbW9kYWxDdHJsOiBNb2RhbENvbnRyb2xsZXIsXG4gICAgcHJpdmF0ZSBjcnlwdG9TZXJ2aWNlOiBDcnlwdG9TZXJ2aWNlLFxuICAgIHByaXZhdGUgc3RvcmFnZTogU3RvcmFnZSxcbiAgICBwcml2YXRlIHNldHRpbmdzOiBMb2NhbFNldHRpbmdzU2VydmljZSxcbiAgICBwcml2YXRlIGNhY2hlOiBDYWNoZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBodHRwOiBIdHRwQ2xpZW50LFxuICAgIEBJbmplY3QoRU5WSVJPTk1FTlQpIHByb3RlY3RlZCBlbnZpcm9ubWVudCxcbiAgICBAT3B0aW9uYWwoKSBASW5qZWN0KEFQUF9MT0dHSU5HX1NFUlZJQ0UpIHByaXZhdGUgbG9nZ2luZ1NlcnZpY2U6IElMb2dnaW5nU2VydmljZSxcbiAgICBAT3B0aW9uYWwoKSBwcml2YXRlIG5ldHdvcms6IE5ldHdvcmssXG4gICAgQE9wdGlvbmFsKCkgcHJpdmF0ZSB0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgQE9wdGlvbmFsKCkgcHJpdmF0ZSB0b2FzdENvbnRyb2xsZXI6IFRvYXN0Q29udHJvbGxlclxuICApIHtcbiAgICBzdXBlcihwbGF0Zm9ybSk7XG4gICAgdGhpcy5fbW9iaWxlID0gdGhpcy5zZXR0aW5ncy5tb2JpbGU7XG4gICAgdGhpcy5fbG9nZ2VyID0gdGhpcy5sb2dnaW5nU2VydmljZT8uZ2V0TG9nZ2VyKCduZXR3b3JrJyk7XG5cbiAgICBpZiAodGhpcy5fbW9iaWxlKSB7XG4gICAgICB0aGlzLl90aW1lclJlZnJlc2hQZXJpb2QgPSBOZXR3b3JrUmVmcmVzaFRpbWVyUGVyaW9kLk1PQklMRTtcbiAgICAgIHRoaXMuX3RpbWVyUmVmcmVzaENvbmRpdGlvbiA9ICgpID0+IHRoaXMub25saW5lOyAvLyBDaGVjayBvbmx5IHdoZW4gb25saW5lLCBhbmQgc3RvcCB3aGVuIG9mZmxpbmVcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICB0aGlzLl90aW1lclJlZnJlc2hQZXJpb2QgPSBOZXR3b3JrUmVmcmVzaFRpbWVyUGVyaW9kLkRFU0tUT1A7XG4gICAgICB0aGlzLl90aW1lclJlZnJlc2hDb25kaXRpb24gPSAoKSA9PiB0cnVlOyAvLyBBbHdheXMgY2hlY2tcbiAgICB9XG5cbiAgICB0aGlzLnN0YXJ0U3ViamVjdC5zdWJzY3JpYmUocGVlciA9PiB0aGlzLm5nT25BZnRlclN0YXJ0KHBlZXIpKTtcblxuICAgIC8vIEZvciBERVYgb25seVxuICAgIHRoaXMuX2RlYnVnID0gIWVudmlyb25tZW50LnByb2R1Y3Rpb247XG5cbiAgfVxuXG4gIC8qKlxuICAgKiBSZWdpc3RlciB0byBuZXR3b3JrIGV2ZW50XG4gICAqXG4gICAqIEBwYXJhbSBldmVudFR5cGVcbiAgICogQHBhcmFtIGNhbGxiYWNrXG4gICAqL1xuICBvbjxUPSBhbnk+KGV2ZW50VHlwZTogTmV0d29ya0V2ZW50VHlwZSwgY2FsbGJhY2s6IChkYXRhPzogVCkgPT4gUHJvbWlzZTxhbnk+KTogU3Vic2NyaXB0aW9uIHtcbiAgICBzd2l0Y2ggKGV2ZW50VHlwZSkge1xuICAgICAgY2FzZSAnc3RhcnQnOlxuICAgICAgICByZXR1cm4gdGhpcy5zdGFydFN1YmplY3Quc3Vic2NyaWJlKCgpID0+IGNhbGxiYWNrKCkpO1xuXG4gICAgICBjYXNlICdwZWVyQ2hhbmdlZCc6XG4gICAgICAgIHJldHVybiB0aGlzLm9uUGVlckNoYW5nZXMuc3Vic2NyaWJlKCgpID0+IGNhbGxiYWNrKCkpO1xuXG4gICAgICBjYXNlICdzdGF0dXNDaGFuZ2VkJzpcbiAgICAgICAgcmV0dXJuIHRoaXMub25OZXR3b3JrU3RhdHVzQ2hhbmdlcy5zdWJzY3JpYmUoKHR5cGUpID0+IGNhbGxiYWNrKHR5cGUgYXMgdW5rbm93biBhcyBUKSk7XG5cbiAgICAgIGNhc2UgJ3Jlc2V0Q2FjaGUnOlxuICAgICAgICByZXR1cm4gdGhpcy5vblJlc2V0TmV0d29ya0NhY2hlLnN1YnNjcmliZSgoKSA9PiBjYWxsYmFjaygpKTtcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIHRoaXMuYWRkTGlzdGVuZXIoZXZlbnRUeXBlLCBjYWxsYmFjayk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgdHJ5T25saW5lKG9wdHM/OiB7XG4gICAgc2hvd09mZmxpbmVUb2FzdD86IGJvb2xlYW47XG4gICAgc2hvd09ubGluZVRvYXN0PzogYm9vbGVhbjtcbiAgICBzaG93TG9hZGluZ1RvYXN0PzogYm9vbGVhbjtcbiAgICBhZnRlclJldHJ5RGVsYXk/OiBudW1iZXI7XG4gICAgYWZ0ZXJSZXRyeVByb21pc2U/OiAoKSA9PiBQcm9taXNlPGFueT47XG4gIH0pOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICAvLyBJZiBvZmZsaW5lIG1vZGUgbm90IGZvcmNlZCwgYW5kIGRldmljZSBzYXlzIHRoZXJlIGlzIG5vIGNvbm5lY3Rpb246IHNraXBcbiAgICBpZiAoIXRoaXMuX2ZvcmNlT2ZmbGluZSB8fCB0aGlzLl9kZXZpY2VDb25uZWN0aW9uVHlwZSA9PT0gJ25vbmUnKSByZXR1cm4gZmFsc2U7XG5cbiAgICAvLyBTSG93IGxvYWRpbmcgdG9hc3RcbiAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICAgIGNvbnN0IHNob3dMb2FkaW5nVG9hc3QgPSAhb3B0cyB8fCBvcHRzLnNob3dMb2FkaW5nVG9hc3QgIT09IGZhbHNlO1xuICAgIGxldCBsb2FkaW5nVG9hc3Q6IEhUTUxJb25Ub2FzdEVsZW1lbnQ7XG4gICAgaWYgKHNob3dMb2FkaW5nVG9hc3QpIHtcbiAgICAgIGF3YWl0IHRoaXMuc2hvd1RvYXN0KHttZXNzYWdlOiAnTkVUV09SSy5JTkZPLlJFVFJZX1RPX0NPTk5FQ1QnLFxuICAgICAgICBkdXJhdGlvbjogMTAwMDAsXG4gICAgICAgIG9uV2lsbFByZXNlbnQ6IHQgPT4gbG9hZGluZ1RvYXN0ID0gdH0pO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBjb25zb2xlLmluZm8oJ1tuZXR3b3JrXSBDaGVja2luZyBjb25uZWN0aW9uIHRvIHBvZC4uLicpO1xuICAgICAgY29uc3Qgc2V0dGluZ3M6IExvY2FsU2V0dGluZ3MgPSBhd2FpdCB0aGlzLnNldHRpbmdzLnJlYWR5KCk7XG5cbiAgICAgIGlmICghc2V0dGluZ3MucGVlclVybCkgcmV0dXJuIGZhbHNlOyAvLyBObyBwZWVyIGRlZmluZS4gU2tpcFxuXG4gICAgICBjb25zdCBwZWVyID0gUGVlci5wYXJzZVVybChzZXR0aW5ncy5wZWVyVXJsKTtcbiAgICAgIGNvbnN0IHBlZXJJbmZvID0gYXdhaXQgdGhpcy5jaGVja1BlZXJBbGl2ZShwZWVyKTtcbiAgICAgIGNvbnN0IHBlZXJBbGl2ZUFuZENvbXBhdGlibGUgPSBwZWVySW5mbyAmJiBhd2FpdCB0aGlzLmNoZWNrUGVlckNvbXBhdGlibGUocGVlckluZm8pO1xuICAgICAgaWYgKHBlZXJBbGl2ZUFuZENvbXBhdGlibGUpIHtcblxuICAgICAgICAvLyBEaXNhYmxlIHRoZSBvZmZsaW5lIG1vZGVcbiAgICAgICAgdGhpcy5zZXRGb3JjZU9mZmxpbmUoZmFsc2UpO1xuXG4gICAgICAgIC8vIFJlc3RhcnRcbiAgICAgICAgYXdhaXQgdGhpcy5yZXN0YXJ0KHBlZXIpO1xuXG4gICAgICAgIC8vIFdhaXQgYSBwcm9taXNlLCBiZWZvcmUgcmVjaGVja1xuICAgICAgICBhd2FpdCB0aGlzLmVtaXQoJ2JlZm9yZVRyeU9ubGluZUZpbmlzaCcsIHRoaXMub25saW5lKTtcblxuICAgICAgfVxuICAgIH1cbiAgICBjYXRjaCAoZXJyKSB7XG4gICAgICBjb25zb2xlLmVycm9yKGVyciAmJiBlcnIubWVzc2FnZSB8fCBlcnIpO1xuICAgICAgLy8gQ29udGludWVcbiAgICB9XG5cbiAgICAvLyBDbG9zZSBsb2FkaW5nIHRvYXN0ICh3aXRoIGEgbWluaW1hbCBkaXNwbGF5IGR1cmF0aW9uIG9mIDJzKVxuICAgIGlmIChzaG93TG9hZGluZ1RvYXN0KSB7XG4gICAgICBhd2FpdCBzbGVlcCgyMDAwIC0gKERhdGUubm93KCkgLSBub3cpKTtcbiAgICAgIGlmIChsb2FkaW5nVG9hc3QpIGF3YWl0IGxvYWRpbmdUb2FzdC5kaXNtaXNzKCk7XG4gICAgfVxuXG4gICAgLy8gUmVjaGVjayBuZXR3b3JrIHN0YXR1c1xuICAgIGNvbnN0IG9ubGluZSA9IHRoaXMub25saW5lO1xuXG4gICAgLy8gRGlzcGxheSBhIHRvYXN0IHRvIHVzZXJcbiAgICBpZiAob25saW5lKSB7XG4gICAgICBpZiAoIW9wdHMgfHwgb3B0cy5zaG93T25saW5lVG9hc3QgIT09IGZhbHNlKSB7XG4gICAgICAgIC8vIERpc3BsYXkgdG9hc3QgKHdpdGhvdXQgYXdhaXQsIGJlY2F1c2Ugbm90IG5lZWQgdG8gd2FpdCB0b2FzdCBjbG9zZSBldmVudClcbiAgICAgICAgdGhpcy5zaG93VG9hc3Qoe21lc3NhZ2U6ICdORVRXT1JLLklORk8uT05MSU5FJywgdHlwZTogJ2luZm8nfSk7XG4gICAgICB9XG4gICAgfVxuICAgIGVsc2UgaWYgKG9wdHMgJiYgb3B0cy5zaG93T2ZmbGluZVRvYXN0ID09PSB0cnVlKSB7XG4gICAgICAvLyBEaXNwbGF5IHRvYXN0ICh3aXRob3V0IGF3YWl0LCBiZWNhdXNlIG5vdCBuZWVkIHRvIHdhaXQgdG9hc3QgY2xvc2UgZXZlbnQpXG4gICAgICByZXR1cm4gdGhpcy5zaG93T2ZmbGluZVRvYXN0KHtzaG93UmV0cnlCdXR0b246IGZhbHNlfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuc3RhcnRlZCAmJiBvbmxpbmU7XG4gIH1cblxuICBhc3luYyBzaG93T2ZmbGluZVRvYXN0KG9wdHM/OiB7XG4gICAgbWVzc2FnZT86IHN0cmluZztcbiAgICBzaG93Q2xvc2VCdXR0b24/OiBib29sZWFuO1xuICAgIHNob3dSZXRyeUJ1dHRvbj86IGJvb2xlYW47XG4gICAgc2hvd1JldHJ5U3VjY2Vzc1RvYXN0PzogYm9vbGVhbjtcbiAgICBzaG93UmV0cnlMb2FkaW5nVG9hc3Q/OiBib29sZWFuO1xuICAgIG9uUmV0cnlTdWNjZXNzPzogKCkgPT4gdm9pZDtcbiAgfSk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGlmICh0aGlzLm9ubGluZSkgcmV0dXJuOyAvLyBTa2lwIGlmIG9ubGluZVxuXG4gICAgLy8gVG9hc3Qgd2l0aCBhIHJldHJ5IGJ1dHRvblxuICAgIGlmICghb3B0cyB8fCBvcHRzLnNob3dSZXRyeUJ1dHRvbiAhPT0gZmFsc2UpIHtcblxuICAgICAgY29uc3QgdG9hc3RSZXN1bHQgPSBhd2FpdCB0aGlzLnNob3dUb2FzdCh7XG4gICAgICAgIG1lc3NhZ2U6IChvcHRzICYmIG9wdHMubWVzc2FnZSB8fCAnRVJST1IuTkVUV09SS19SRVFVSVJFRCcpLFxuICAgICAgICB0eXBlOiAnd2FybmluZycsXG4gICAgICAgIHNob3dDbG9zZUJ1dHRvbjogdHJ1ZSxcbiAgICAgICAgZHVyYXRpb246IDEwMDAwMCxcbiAgICAgICAgYnV0dG9uczogW1xuICAgICAgICAgIC8vIHJlY29ubmVjdCBidXR0b25cbiAgICAgICAgICB7XG4gICAgICAgICAgICByb2xlOiAncmVmcmVzaCcsXG4gICAgICAgICAgICB0ZXh0OiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdORVRXT1JLLkJUTl9DSEVDS19BTElWRScpXG4gICAgICAgICAgfVxuICAgICAgICBdXG4gICAgICB9KTtcblxuICAgICAgLy8gVXNlciBkb24ndCBjbGljayByZWNvbm5lY3Q6IHJldHVyblxuICAgICAgaWYgKCF0b2FzdFJlc3VsdCB8fCB0b2FzdFJlc3VsdC5yb2xlICE9PSAncmVmcmVzaCcpIHJldHVybiBmYWxzZTtcblxuICAgICAgLy8gaWYgbmV0d29yayBzdGF0ZSBjaGFuZ2VkIHRvIG9ubGluZTogZXhpdCBoZXJlXG4gICAgICBpZiAodGhpcy5vbmxpbmUpIHJldHVybiB0cnVlO1xuXG4gICAgICAvLyBUcnkgdG8gcmVjb25uZWN0XG4gICAgICBjb25zdCBvbmxpbmUgPSBhd2FpdCB0aGlzLnRyeU9ubGluZSh7XG4gICAgICAgIHNob3dPZmZsaW5lVG9hc3Q6IGZhbHNlLFxuICAgICAgICBzaG93T25saW5lVG9hc3Q6IHRvQm9vbGVhbihvcHRzICYmIG9wdHMuc2hvd1JldHJ5U3VjY2Vzc1RvYXN0LCB0cnVlKSxcbiAgICAgICAgc2hvd0xvYWRpbmdUb2FzdDogdG9Cb29sZWFuKG9wdHMgJiYgb3B0cy5zaG93UmV0cnlMb2FkaW5nVG9hc3QsIHRydWUpXG4gICAgICB9KTtcbiAgICAgIGlmIChvbmxpbmUpIHtcbiAgICAgICAgLy8gQ2FsbCBzdWNjZXNzIGNhbGxiYWNrIChhc3luYylcbiAgICAgICAgaWYgKG9wdHMgJiYgb3B0cy5vblJldHJ5U3VjY2Vzcykge1xuICAgICAgICAgIHNldFRpbWVvdXQob3B0cy5vblJldHJ5U3VjY2Vzcyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG5cbiAgICAgIG9wdHMgPSB7XG4gICAgICAgIC4uLm9wdHMsXG4gICAgICAgIHNob3dSZXRyeUJ1dHRvbjogZmFsc2UsXG4gICAgICAgIHNob3dDbG9zZUJ1dHRvbjogdHJ1ZVxuICAgICAgfTtcbiAgICB9XG5cbiAgICAvLyBTaW1wbGUgdG9hc3QsIHdpdGhvdXQgJ2F3YWl0JywgYmVjYXVzZSBub3QgbmVlZCB0byB3YWl0IHRvYXN0J3MgZGlzbWlzc1xuICAgIHRoaXMuc2hvd1RvYXN0KHtcbiAgICAgIG1lc3NhZ2U6ICdFUlJPUi5ORVRXT1JLX1JFUVVJUkVEJyxcbiAgICAgIHR5cGU6ICdlcnJvcicsXG4gICAgICAuLi5vcHRzXG4gICAgfSk7XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiB0aGUgcGVlciBpcyBhbGl2ZVxuICAgKlxuICAgKiBAcGFyYW0gcGVlclxuICAgKiBAcGFyYW0gb3B0c1xuICAgKi9cbiAgYXN5bmMgY2hlY2tQZWVyQWxpdmUocGVlcj86IHN0cmluZyB8IFBlZXIsIG9wdHM/OiB7IGNoZWNrQ29tcGF0aWJsZT86IGJvb2xlYW47IGRpc3BsYXlUb2FzdD86IGJvb2xlYW4gfSApOiBQcm9taXNlPE5vZGVJbmZvPiB7XG4gICAgcGVlciA9IHBlZXIgfHwgdGhpcy5wZWVyO1xuICAgIGlmICghcGVlcikge1xuICAgICAgY29uc3Qgc2V0dGluZ3M6IExvY2FsU2V0dGluZ3MgPSBhd2FpdCB0aGlzLnNldHRpbmdzLnJlYWR5KCk7XG4gICAgICBpZiAoIXNldHRpbmdzLnBlZXJVcmwpIHJldHVybiB1bmRlZmluZWQ7IC8vIE5vIHBlZXIgZGVmaW5lLiBTa2lwXG4gICAgICBwZWVyID0gUGVlci5wYXJzZVVybChzZXR0aW5ncy5wZWVyVXJsKTtcbiAgICB9XG5cbiAgICBjb25zdCBwZWVyVXJsID0gdHlwZW9mIHBlZXIgPT09ICdzdHJpbmcnID8gcGVlciA6IHBlZXIudXJsO1xuICAgIHRoaXMuX2xvZ2dlcj8uaW5mbygnY2hlY2tQZWVyQWxpdmUnLCBgQ2hlY2tpbmcgaWYgcGVlciB7JHtwZWVyVXJsfX0gaXMgYWxpdmUsIGJ5IGNhbGxpbmcgL2FwaS9ub2RlL2luZm8gLi4uYCk7XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IHRoaXMuZ2V0Tm9kZUluZm8ocGVlcik7XG4gICAgICB0aGlzLl9sb2dnZXI/LmluZm8oJ2NoZWNrUGVlckFsaXZlJywgYFBlZXIgeyR7cGVlclVybH19IGlzIGFsaXZlOlxcbiR7SlNPTi5zdHJpbmdpZnkoZGF0YSl9YCk7XG5cbiAgICAgIHJldHVybiBkYXRhO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgY29uc29sZS5kZWJ1ZygnW25ldHdvcmtdIENhbm5vdCBnZXQgL2FwaS9ub2RlL2luZm8gZnJvbSBwZWVyOiAnICsgKGVyciAmJiBlcnIubWVzc2FnZSB8fCBlcnIpLCBlcnIpO1xuICAgICAgdGhpcy5fbG9nZ2VyPy5lcnJvcignY2hlY2tQZWVyQWxpdmUnLCAnW25ldHdvcmtdIENhbm5vdCBnZXQgL2FwaS9ub2RlL2luZm8gZnJvbSBwZWVyOiAnICsgKGVyciAmJiBlcnIubWVzc2FnZSB8fCBlcnIpICsgJzpcXG4nICsgSlNPTi5zdHJpbmdpZnkoZXJyKSApO1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cblxuICBhc3luYyBjaGVja1BlZXJDb21wYXRpYmxlKHBlZXJJbmZvOiBOb2RlSW5mbywgb3B0cz86IHsgc2hvd1RvYXN0PzogYm9vbGVhbiB9KTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgaWYgKCF0aGlzLmVudmlyb25tZW50LnBlZXJNaW5WZXJzaW9uKSByZXR1cm4gdHJ1ZTsgLy8gU2tpcCBjb21wYXRpYmlsaXR5IGNoZWNrXG5cbiAgICAvLyBDaGVjayB0aGUgbWluIHBvZCB2ZXJzaW9uLCBkZWZpbmVkIGJ5IHRoZSBhcHBcbiAgICBjb25zdCBpc0NvbXBhdGlibGUgPSBwZWVySW5mbyAmJiBwZWVySW5mby5zb2Z0d2FyZVZlcnNpb24gJiYgVmVyc2lvblV0aWxzLmlzQ29tcGF0aWJsZSh0aGlzLmVudmlyb25tZW50LnBlZXJNaW5WZXJzaW9uLCBwZWVySW5mby5zb2Z0d2FyZVZlcnNpb24pO1xuXG4gICAgLy8gRGlzcGxheSB0b2FzdCwgaWYgbm90IGNvbXBhdGlibGVcbiAgICBpZiAoIWlzQ29tcGF0aWJsZSAmJiAoIW9wdHMgfHwgb3B0cy5zaG93VG9hc3QgIT09IGZhbHNlKSkge1xuICAgICAgYXdhaXQgdGhpcy5zaG93VG9hc3Qoe1xuICAgICAgICB0eXBlOiAnZXJyb3InLFxuICAgICAgICBtZXNzYWdlOiAnTkVUV09SSy5FUlJPUi5OT1RfQ09NUEFUSUJMRV9QRUVSJyxcbiAgICAgICAgbWVzc2FnZVBhcmFtczoge1xuICAgICAgICAgIHZlcnNpb246IHRoaXMuZW52aXJvbm1lbnQucGVlck1pblZlcnNpb25cbiAgICAgICAgfSxcbiAgICAgICAgc2hvd0Nsb3NlQnV0dG9uOiB0cnVlXG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGlzQ29tcGF0aWJsZTtcbiAgfVxuXG4gIGdldE5vZGVJbmZvKHBlZXI/OiBzdHJpbmcgfCBQZWVyKTogUHJvbWlzZTxOb2RlSW5mbz4ge1xuICAgIGNvbnN0IHBhdGggPSB0aGlzLmNvbXB1dGVQZWVyUGF0aChwZWVyLCAnL2FwaS9ub2RlL2luZm8nKTtcbiAgICByZXR1cm4gdGhpcy5nZXQocGF0aCk7XG4gIH1cblxuICBhc3luYyBnZXRBcHBNYW5pZmVzdChwZWVyPzogc3RyaW5nIHwgUGVlciwgb3B0cz86IHtub2NhY2hlPzogYm9vbGVhbn0pOiBQcm9taXNlPEFwcE1hbmlmZXN0fHVuZGVmaW5lZD4ge1xuICAgIHRyeSB7XG4gICAgICBsZXQgcGF0aCA9IHRoaXMuY29tcHV0ZVBlZXJQYXRoKHBlZXIsICdtYW5pZmVzdC5qc29uJyk7XG4gICAgICBpZiAob3B0cz8ubm9jYWNoZSkge1xuICAgICAgICBwYXRoICs9ICc/dD0nICsgRGF0ZS5ub3coKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBhd2FpdCB0aGlzLmdldChwYXRoLCBvcHRzKTtcbiAgICB9XG4gICAgY2F0Y2ggKGVycikge1xuICAgICAgaWYgKHRoaXMuZW52aXJvbm1lbnQucHJvZHVjdGlvbikgY29uc29sZS5lcnJvcignW25ldHdvcmtdIENhbm5vdCBsb2FkIGZpbGUgXFwnbWFuaWZlc3QuanNvblxcJy4gUGxlYXNlIG1ha2Ugc3VyZSB3ZWJzZXJ2ZXIgY29uZmlnIGFsbG93IENPUlMgYWNjZXNzJywgZXJyKTtcbiAgICAgIGVsc2UgY29uc29sZS5lcnJvcignW25ldHdvcmtdIENhbm5vdCBsb2FkIGZpbGUgXFwnbWFuaWZlc3QuanNvblxcJy4nLCBlcnIpO1xuICAgICAgLy8gQ29udGludWVcbiAgICB9XG4gIH1cblxuICBhc3luYyBnZXRBcHBWZXJzaW9uKHBlZXI/OiBzdHJpbmcgfCBQZWVyLCBvcHRzID0ge25vY2FjaGU6IHRydWV9KTogUHJvbWlzZTxzdHJpbmd8dW5kZWZpbmVkPiB7XG4gICAgdHJ5IHtcbiAgICAgIGxldCBwYXRoID0gdGhpcy5jb21wdXRlUGVlclBhdGgocGVlciwgJ3ZlcnNpb24uYXBwdXAnKTtcbiAgICAgIGlmIChvcHRzLm5vY2FjaGUpIHtcbiAgICAgICAgcGF0aCArPSAnP3Q9JyArIERhdGUubm93KCk7XG4gICAgICB9XG4gICAgICBjb25zdCBhcHBWZXJzaW9uOiBzdHJpbmcgPSBhd2FpdCB0aGlzLmdldFRleHQocGF0aCwgb3B0cyk7XG4gICAgICBpZiAoaXNOb3ROaWxPckJsYW5rKGFwcFZlcnNpb24pKSByZXR1cm4gYXBwVmVyc2lvbjtcbiAgICB9XG4gICAgY2F0Y2ggKGVycikge1xuICAgICAgaWYgKHRoaXMuZW52aXJvbm1lbnQucHJvZHVjdGlvbikgY29uc29sZS5lcnJvcignW25ldHdvcmtdIENhbm5vdCBsb2FkIGZpbGUgXFwndmVyc2lvbi5hcHB1cFxcJy4gUGxlYXNlIG1ha2Ugc3VyZSB3ZWJzZXJ2ZXIgY29uZmlnIGFsbG93IENPUlMgYWNjZXNzJyk7XG4gICAgICBlbHNlIGNvbnNvbGUuZXJyb3IoJ1tuZXR3b3JrXSBDYW5ub3QgbG9hZCBmaWxlIFxcJ3ZlcnNpb24uYXBwdXBcXCcuJywgZXJyKTtcbiAgICAgIC8vIENvbnRpbnVlXG4gICAgfVxuXG4gICAgLy8gVHJ5IGxvYWRpbmcgbWFuaWZlc3QuanNvblxuICAgIGNvbnN0IG1hbmlmZXN0ID0gYXdhaXQgdGhpcy5nZXRBcHBNYW5pZmVzdChwZWVyLCBvcHRzKTtcbiAgICByZXR1cm4gbWFuaWZlc3Q/LnZlcnNpb247XG4gIH1cblxuICBjb21wdXRlUGVlclBhdGgocGVlcjogc3RyaW5nIHwgUGVlciB8IHVuZGVmaW5lZCwgcGF0aDogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICBwZWVyID0gcGVlciB8fCB0aGlzLnBlZXI7XG4gICAgaWYgKCFwZWVyKSByZXR1cm4gdW5kZWZpbmVkO1xuXG4gICAgbGV0IHBlZXJVcmwgPSAocGVlciBpbnN0YW5jZW9mIFBlZXIpID8gcGVlci51cmwgOiAocGVlciBhcyBzdHJpbmcpO1xuXG4gICAgLy8gUmVtb3ZlIHRyYWlsaW5nIHNsYXNoXG4gICAgaWYgKHBlZXJVcmwuZW5kc1dpdGgoJy8nKSkge1xuICAgICAgcGVlclVybCA9IHBlZXJVcmwuc3Vic3RyKDAsIHBlZXJVcmwubGVuZ3RoIC0gMSk7XG4gICAgfVxuXG4gICAgLy8gQWRkIGZpcnN0IHBhdGhcbiAgICBpZiAoIXBhdGguc3RhcnRzV2l0aCgnLycpKSB7XG4gICAgICBwYXRoID0gJy8nICsgcGF0aDtcbiAgICB9XG5cbiAgICAvLyBDb25jYXQgcGVlciBVUkwgYW5kIHBhdGhcbiAgICByZXR1cm4gcGVlclVybCArIHBhdGg7XG4gIH1cblxuXG4gIC8qKlxuICAgKiBBbGxvdyB0byBmb3JjZSBvZmZsaW5lIG1vZGVcbiAgICovXG4gIHNldEZvcmNlT2ZmbGluZSh2YWx1ZT86IGJvb2xlYW4sIG9wdHM/OiB7XG4gICAgc2hvd1RvYXN0PzogYm9vbGVhbjsgLy8gRGlzcGxheSBhIHRvYXN0LCB3aGVuIG9mZmxpbmUgP1xuICB9KSB7XG4gICAgdmFsdWUgPSB0b0Jvb2xlYW4odmFsdWUsIHRydWUpO1xuICAgIGlmICh0aGlzLl9mb3JjZU9mZmxpbmUgIT09IHZhbHVlKSB7XG4gICAgICBjb25zdCBwcmV2aW91c0Nvbm5lY3Rpb25UeXBlID0gdGhpcy5jb25uZWN0aW9uVHlwZTtcbiAgICAgIHRoaXMuX2ZvcmNlT2ZmbGluZSA9IHZhbHVlO1xuICAgICAgY29uc3QgY3VycmVudENvbm5lY3Rpb25UeXBlID0gdGhpcy5jb25uZWN0aW9uVHlwZTtcblxuICAgICAgaWYgKHByZXZpb3VzQ29ubmVjdGlvblR5cGUgIT09IGN1cnJlbnRDb25uZWN0aW9uVHlwZSkge1xuICAgICAgICBjb25zb2xlLmluZm8oYFtuZXR3b3JrXSBDb25uZWN0aW9uIGNoYW5nZWQgdG8geyR7Y3VycmVudENvbm5lY3Rpb25UeXBlfX1gKTtcbiAgICAgICAgdGhpcy5vbk5ldHdvcmtTdGF0dXNDaGFuZ2VzLm5leHQoY3VycmVudENvbm5lY3Rpb25UeXBlKTtcblxuICAgICAgICAvLyBPZmZsaW5lIG1vZGU6IGFsZXJ0IHRoZSB1c2VyXG4gICAgICAgIGlmIChjdXJyZW50Q29ubmVjdGlvblR5cGUgPT09ICdub25lJyAmJiAoIW9wdHMgfHwgb3B0cy5zaG93VG9hc3QgIT09IGZhbHNlKSkge1xuICAgICAgICAgIHRoaXMuc2hvd1RvYXN0KHttZXNzYWdlOiAnTkVUV09SSy5JTkZPLk9GRkxJTkVfSEVMUCcsIHR5cGU6ICd3YXJuaW5nJ30pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgc2hvd1NlbGVjdFBlZXJNb2RhbChvcHRzPzogUGFydGlhbDxJU2VsZWN0UGVlck1vZGFsT3B0aW9ucz4pOiBQcm9taXNlPFBlZXIgfCB1bmRlZmluZWQ+IHtcblxuICAgIG9wdHMgPSBvcHRzIHx8IHt9O1xuXG4gICAgY29uc3QgJG9uUmVmcmVzaCA9IG5ldyBFdmVudEVtaXR0ZXI8RXZlbnQ+KCk7XG4gICAgY29uc3QgcGVlcnMkID0gJG9uUmVmcmVzaC5waXBlKFxuICAgICAgbWVyZ2VNYXAoKF8pID0+IHRoaXMuZ2V0RGVmYXVsdFBlZXJzKCkpLFxuICAgICAgbWFwKHBlZXJzID0+IHBlZXJzIHx8IFtdKVxuICAgICk7XG5cbiAgICBjb25zdCBtb2RhbCA9IGF3YWl0IHRoaXMubW9kYWxDdHJsLmNyZWF0ZSh7XG4gICAgICBjb21wb25lbnQ6IFNlbGVjdFBlZXJNb2RhbCxcbiAgICAgIGNvbXBvbmVudFByb3BzOiA8SVNlbGVjdFBlZXJNb2RhbE9wdGlvbnM+e1xuICAgICAgICBvblJlZnJlc2g6ICRvblJlZnJlc2gsXG4gICAgICAgIHBlZXJzOiBwZWVycyQsXG4gICAgICAgIC4uLm9wdHNcbiAgICAgIH0sXG4gICAgICBrZXlib2FyZENsb3NlOiB0cnVlLFxuICAgICAgc2hvd0JhY2tkcm9wOiB0cnVlXG4gICAgfSk7XG4gICAgYXdhaXQgbW9kYWwucHJlc2VudCgpO1xuICAgICRvblJlZnJlc2guZW1pdCgpO1xuXG4gICAgY29uc3QgeyBkYXRhIH0gPSBhd2FpdCBtb2RhbC5vbldpbGxEaXNtaXNzKCk7XG4gICAgJG9uUmVmcmVzaC5jb21wbGV0ZSgpO1xuXG4gICAgcmV0dXJuIGRhdGEgJiYgKGRhdGEgYXMgUGVlcikgfHwgdW5kZWZpbmVkO1xuICB9XG5cbiAgYXN5bmMgY2xlYXJDYWNoZShvcHRzPzogeyBlbWl0RXZlbnQ/OiBib29sZWFuIH0pOiBQcm9taXNlPHZvaWQ+IHtcblxuICAgIGNvbnN0IG5vdyA9IHRoaXMuX2RlYnVnICYmIERhdGUubm93KCk7XG5cbiAgICBjb25zb2xlLmluZm8oJ1tuZXR3b3JrXSBDbGVhcmluZyBhbGwgY2FjaGVzLi4uJyk7XG4gICAgcmV0dXJuIHRoaXMuY2FjaGUuY2xlYXJBbGwoKVxuICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICAvLyBFbWl0IGV2ZW50XG4gICAgICAgIGlmICghb3B0cyB8fCBvcHRzLmVtaXRFdmVudCAhPT0gZmFsc2UgJiYgdGhpcy5vblJlc2V0TmV0d29ya0NhY2hlLm9ic2VydmVycy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgdGhpcy5vblJlc2V0TmV0d29ya0NhY2hlLmVtaXQoKTtcblxuICAgICAgICAgIC8vIFdhaXQgb2JzZXJ2ZXJzIGNsZWFuIHRoZWlyIGNhY2hlcywgaWYgbmVlZFxuICAgICAgICAgIHJldHVybiBzbGVlcCg1MDApO1xuICAgICAgICB9XG4gICAgICB9KVxuICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICBpZiAodGhpcy5fZGVidWcpIGNvbnNvbGUuZGVidWcoYFtuZXR3b3JrXSBBbGwgY2FjaGUgY2xlYXJlZCwgaW4gJHtEYXRlLm5vdygpIC0gbm93fW1zYCk7XG4gICAgICB9KTtcbiAgfVxuXG4gIC8qIC0tIHByb3RlY3RlZCBmdW5jdGlvbnMgLS0gKi9cblxuICBwcm90ZWN0ZWQgYXN5bmMgbmdPblN0YXJ0KHBlZXI/OiBQZWVyKTogUHJvbWlzZTxQZWVyPiB7XG5cbiAgICBjb25zb2xlLmluZm8oJ1tuZXR3b3JrXSBTdGFydGluZyBuZXR3b3JrLi4uJyk7XG5cbiAgICAvLyBSZXN0b3JpbmcgbG9jYWwgc2V0dGluZ3NcbiAgICBwZWVyID0gcGVlciB8fCAoYXdhaXQgdGhpcy5yZXN0b3JlTG9jYWxseSgpKTtcblxuICAgIC8vIE1ha2Ugc3VyZSB0byBoaWRlIHRoZSBzcGxhc2hzY3JlZW4sIGJlZm9yZSBvcGVuIHRoZSBtb2RhbFxuICAgIGlmICghcGVlcikgYXdhaXQgU3BsYXNoU2NyZWVuLmhpZGUoKTtcblxuICAgIC8vIE5vIHBlZXIgaW4gc2V0dGluZ3M6IGFzayB1c2VyIHRvIGNob29zZVxuICAgIHdoaWxlICghcGVlcikge1xuICAgICAgY29uc29sZS5kZWJ1ZygnW25ldHdvcmtdIE5vIHBlZXIgZGVmaW5lZC4gQXNraW5nIHVzZXIgdG8gY2hvb3NlIGEgcGVlci4nKTtcbiAgICAgIHBlZXIgPSBhd2FpdCB0aGlzLnNob3dTZWxlY3RQZWVyTW9kYWwoe2FsbG93U2VsZWN0RG93blBlZXI6IGZhbHNlfSk7XG4gICAgfVxuXG4gICAgY29uc29sZS5pbmZvKGBbbmV0d29ya10gU3RhcnRpbmcgc2VydmljZSBbT0tdIHtwZWVyOiAnJHtwZWVyLnVybH0nLCBvbmxpbmU6ICR7dGhpcy5vbmxpbmV9fWApO1xuXG4gICAgcmV0dXJuIHBlZXI7XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgbmdPbkFmdGVyU3RhcnQocGVlcjogUGVlcikge1xuXG4gICAgLy8gV2FpdCBzZXR0aW5ncyBzdGFydHMsIHRoZW4gc2F2ZSBwZWVyIGluIHNldHRpbmdzXG4gICAgYXdhaXQgdGhpcy5zZXR0aW5ncy5hcHBseSh7cGVlclVybDogcGVlci51cmx9KTtcblxuICAgIHRoaXMub25EZXZpY2VDb25uZWN0aW9uQ2hhbmdlZCh0aGlzLm5ldHdvcms/LnR5cGUgfHwgJ3Vua25vd24nKTtcblxuICAgIC8vIFN0YXJ0IHRoZSByZWZyZXNoIHRpbWVyXG4gICAgdGhpcy5zdGFydFJlZnJlc2hUaW1lcigpO1xuXG4gICAgLy8gTGlzdGVuIGZvciBkZXZpY2UgbmV0d29yayBjaGFuZ2VzXG4gICAgaWYgKHRoaXMubmV0d29yaykge1xuICAgICAgdGhpcy5yZWdpc3RlclN1YnNjcmlwdGlvbih0aGlzLm5ldHdvcmsub25EaXNjb25uZWN0KCkuc3Vic2NyaWJlKCgpID0+IHRoaXMub25EZXZpY2VDb25uZWN0aW9uQ2hhbmdlZCgnbm9uZScpKSk7XG4gICAgICB0aGlzLnJlZ2lzdGVyU3Vic2NyaXB0aW9uKHRoaXMubmV0d29yay5vbkNvbm5lY3QoKS5zdWJzY3JpYmUoKCkgPT4gdGhpcy5vbkRldmljZUNvbm5lY3Rpb25DaGFuZ2VkKHRoaXMubmV0d29yay50eXBlKSkpO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBuZ09uU3RvcCgpIHtcbiAgICAvLyBTdG9wIHRpbWVyLCBpZiBjYW5ub3QgcmVmcmVzaCBhbnltb3JlXG4gICAgaWYgKHRoaXMuX3RpbWVyUmVmcmVzaENvbmRpdGlvbigpID09PSBmYWxzZSkge1xuICAgICAgdGhpcy5zdG9wUmVmcmVzaFRpbWVyKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFRyeSB0byByZXN0b3JlIHBlZXIgZnJvbSB0aGUgbG9jYWwgc3RvcmFnZVxuICAgKi9cbiAgcHJvdGVjdGVkIGFzeW5jIHJlc3RvcmVMb2NhbGx5KCk6IFByb21pc2U8UGVlciB8IHVuZGVmaW5lZD4ge1xuXG4gICAgLy8gUmVzdG9yZSBmcm9tIHN0b3JhZ2VcbiAgICBsZXQgc2V0dGluZ3MgPSBhd2FpdCB0aGlzLnN0b3JhZ2UuZ2V0KFNFVFRJTkdTX1NUT1JBR0VfS0VZKTtcbiAgICBzZXR0aW5ncyA9ICh0eXBlb2Ygc2V0dGluZ3MgPT09ICdzdHJpbmcnKSA/IEpTT04ucGFyc2Uoc2V0dGluZ3MpIDogc2V0dGluZ3M7XG4gICAgaWYgKHNldHRpbmdzICYmIHNldHRpbmdzLnBlZXJVcmwpIHtcbiAgICAgIGNvbnNvbGUuZGVidWcoYFtuZXR3b3JrXSBVc2UgcGVlciB7JHtzZXR0aW5ncy5wZWVyVXJsfX0gKGZvdW5kIGluIHRoZSBsb2NhbCBzdG9yYWdlKWApO1xuICAgICAgcmV0dXJuIFBlZXIucGFyc2VVcmwoc2V0dGluZ3MucGVlclVybCk7XG4gICAgfVxuXG4gICAgLy8gRWxzZSwgdXNlIGRlZmF1bHQgcGVlciBpbiBlbnYsIGlmIGV4aXN0c1xuICAgIGlmICh0aGlzLmVudmlyb25tZW50LmRlZmF1bHRQZWVyKSB7XG4gICAgICByZXR1cm4gUGVlci5mcm9tT2JqZWN0KHRoaXMuZW52aXJvbm1lbnQuZGVmYXVsdFBlZXIpO1xuICAgIH1cblxuICAgIC8vIEVsc2UsIGlmIEFwcCBpcyBob3N0ZWQsIHRyeSB0aGUgd2ViIHNpdGUgYXMgYSBwZWVyXG4gICAgY29uc3QgbG9jYXRpb24gPSB0aGlzLl9kb2N1bWVudCAmJiB0aGlzLl9kb2N1bWVudC5sb2NhdGlvbjtcbiAgICBpZiAobG9jYXRpb24gJiYgbG9jYXRpb24ucHJvdG9jb2wgJiYgbG9jYXRpb24ucHJvdG9jb2wuc3RhcnRzV2l0aCgnaHR0cCcpKSB7XG4gICAgICBjb25zdCBob3N0bmFtZSA9IHRoaXMuX2RvY3VtZW50LmxvY2F0aW9uLmhvc3Q7XG4gICAgICBjb25zdCBkZXRlY3RlZFBlZXIgPSBQZWVyLnBhcnNlVXJsKGAke3RoaXMuX2RvY3VtZW50LmxvY2F0aW9uLnByb3RvY29sfSR7aG9zdG5hbWV9JHt0aGlzLmVudmlyb25tZW50LmJhc2VVcmx9YCk7XG5cbiAgICAgIGlmIChhd2FpdCB0aGlzLmNoZWNrUGVlckFsaXZlKGRldGVjdGVkUGVlcikpIHtcbiAgICAgICAgcmV0dXJuIGRldGVjdGVkUGVlcjtcbiAgICAgIH1cblxuICAgICAgLy8gUGVlciBub3QgYWxpdmUsIGJ1dCBzaG91bGQgYmUgYXQgdGhlIHNhbWUgVVJMLCByZXRyeWluZyBlYWNoIDFzXG4gICAgICBpZiAodGhpcy5lbnZpcm9ubWVudC5zYW1lVXJsUGVlcikge1xuICAgICAgICByZXR1cm4gYXdhaXQgdGltZXIoMTAwMCwgMTAwMClcbiAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLnN0b3BTdWJqZWN0KSxcbiAgICAgICAgICAgIHRhcCgoKSA9PiBjb25zb2xlLndhcm4oYFtuZXR3b3JrLXNlcnZpY2VdIFdhaXRpbmcgcGVlciBiZSBiZSBhbGl2ZSwgYXQgeyR7ZGV0ZWN0ZWRQZWVyLnVybH19IC4uLmApKSxcbiAgICAgICAgICAgIG1lcmdlTWFwKCgpID0+IHRoaXMuY2hlY2tQZWVyQWxpdmUoZGV0ZWN0ZWRQZWVyKSksXG4gICAgICAgICAgICBmaWx0ZXIoYWxpdmUgPT4gISFhbGl2ZSksXG4gICAgICAgICAgICBtYXAoKCkgPT4gZGV0ZWN0ZWRQZWVyKSxcbiAgICAgICAgICAgIGZpcnN0KClcbiAgICAgICAgICApLnRvUHJvbWlzZSgpO1xuXG4gICAgICAgIC8vIFN0b3BcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdTZXJ2aWNlIGhhdmUgYmVlbiBzdG9wcGVkJyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdG9wIHRvIG5ldHdvcmsgc3RhdGVcbiAgICpcbiAgICogQHByb3RlY3RlZFxuICAgKi9cbiAgcHJvdGVjdGVkIHN0b3BSZWZyZXNoVGltZXIoKSB7XG4gICAgaWYgKHRoaXMuX3RpbWVyU3Vic2NyaXB0aW9uKSB7XG4gICAgICB0aGlzLl90aW1lclN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgdGhpcy5fdGltZXJTdWJzY3JpcHRpb24gPSB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlZnJlc2ggdGhlIG5ldHdvcmsgc3RhdGVcbiAgICpcbiAgICogQHByb3RlY3RlZFxuICAgKi9cbiAgcHJvdGVjdGVkIHN0YXJ0UmVmcmVzaFRpbWVyKCl7XG4gICAgaWYgKHRoaXMuX3RpbWVyU3Vic2NyaXB0aW9uKSByZXR1cm47IC8vIEFscmVhZHkgcnVubmluZzogc2tpcFxuXG4gICAgY29uc29sZS5pbmZvKGBbbmV0d29ya10gU3RhcnRpbmcgcmVmcmVzaCB0aW1lciwgZXZlcnkgJHt0aGlzLl90aW1lclJlZnJlc2hQZXJpb2R9bXMuLi5gKTtcblxuICAgIGxldCBsYXN0SW5mbzogTm9kZUluZm87XG4gICAgdGhpcy5fdGltZXJTdWJzY3JpcHRpb24gPSB0aW1lcih0aGlzLl90aW1lclJlZnJlc2hQZXJpb2QsIHRoaXMuX3RpbWVyUmVmcmVzaFBlcmlvZClcbiAgICAgIC5waXBlKFxuICAgICAgICAvLyBTa2lwIHNvbWUgdGltZXIgZXZlbnQgKHNlZSBjb25zdHJ1Y3RvcilcbiAgICAgICAgZmlsdGVyKHRoaXMuX3RpbWVyUmVmcmVzaENvbmRpdGlvbiksXG5cbiAgICAgICAgLy8gQ2hlY2tpbiBpZiBwZWVyIGFsaXZlXG4gICAgICAgIHRhcCgoKSA9PiAgY29uc29sZS5kZWJ1ZygnW25ldHdvcmtdIENoZWNraW5nIGNvbm5lY3Rpb24gdG8gcG9kLi4uJykpLFxuICAgICAgICBtZXJnZU1hcCgoKSA9PiB0aGlzLmNoZWNrUGVlckFsaXZlKHRoaXMucGVlcikpLFxuXG4gICAgICAgIC8vIEZpbHRlciB0byBrZWVwIG9ubHkgY2hhbmdlc1xuICAgICAgICBmaWx0ZXIoaW5mbyA9PiAhIWluZm8gIT09ICEhbGFzdEluZm8pLFxuICAgICAgICB0YXAoaW5mbyA9PiBsYXN0SW5mbyA9IGluZm8pLFxuXG4gICAgICAgIC8vIENoZWNrIGNvbXBhdGliaWxpdHlcbiAgICAgICAgbWVyZ2VNYXAoKGluZm8pID0+IHRoaXMuY2hlY2tQZWVyQ29tcGF0aWJsZShpbmZvLCB7c2hvd1RvYXN0OiB0cnVlfSkpLFxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZShhbGl2ZSA9PiB7XG4gICAgICAgICAgaWYgKGFsaXZlICYmIHRoaXMub2ZmbGluZSkge1xuICAgICAgICAgICAgdGhpcy5zZXRGb3JjZU9mZmxpbmUoZmFsc2UpO1xuXG4gICAgICAgICAgICAvLyBSZXN0YXJ0IHRoZSBzZXJ2aWNlICh0byBmb3JjZSByZSBhdXRoKVxuICAgICAgICAgICAgdGhpcy5yZXN0YXJ0KCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGVsc2UgaWYgKCFhbGl2ZSAmJiB0aGlzLm9ubGluZSl7XG4gICAgICAgICAgICB0aGlzLnNldEZvcmNlT2ZmbGluZSh0cnVlKTtcblxuICAgICAgICAgICAgLy8gU3RvcCB0aGUgc2VydmljZVxuICAgICAgICAgICAgdGhpcy5zdG9wKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgIHRoaXMuX3RpbWVyU3Vic2NyaXB0aW9uLmFkZCgoKSA9PiBjb25zb2xlLmRlYnVnKCdbbmV0d29ya10gUmVmcmVzaCB0aW1lciBzdG9wcGVkJykpO1xuICB9XG5cblxuICBwcm90ZWN0ZWQgYXN5bmMgZ2V0VGV4dChwYXRoOiBzdHJpbmcsIG9wdHM/OiB7XG4gICAgaGVhZGVycz86IEh0dHBIZWFkZXJzIHwge1xuICAgICAgW2hlYWRlcjogc3RyaW5nXTogc3RyaW5nIHwgc3RyaW5nW107XG4gICAgfTtcbiAgICByZXNwb25zZVR5cGU/OiAndGV4dCc7XG4gICAgbm9jYWNoZT86IGJvb2xlYW47XG4gIH0pOiBQcm9taXNlPHN0cmluZz4ge1xuXG4gICAgbGV0IHVyaSA9IHRoaXMuZ2V0VXJpKHBhdGgpO1xuICAgIHJldHVybiBIdHRwVXRpbHMuZ2V0VGV4dCh0aGlzLmh0dHAsIHVyaSwgb3B0cyk7XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgZ2V0PFQ+KHBhdGg6IHN0cmluZywgb3B0cz86IHtcbiAgICBoZWFkZXJzPzogSHR0cEhlYWRlcnMgfCB7XG4gICAgICBbaGVhZGVyOiBzdHJpbmddOiBzdHJpbmcgfCBzdHJpbmdbXTtcbiAgICB9O1xuICAgIHJlc3BvbnNlVHlwZT86ICdqc29uJztcbiAgICBub2NhY2hlPzogYm9vbGVhbjtcbiAgfSk6IFByb21pc2U8VD4ge1xuXG4gICAgbGV0IHVyaSA9IHRoaXMuZ2V0VXJpKHBhdGgpO1xuICAgIHJldHVybiBIdHRwVXRpbHMuZ2V0SnNvbjxUPih0aGlzLmh0dHAsIHVyaSwgb3B0cyk7XG4gIH1cblxuICAvKiAtLSBQcm90ZWN0ZWQgbWV0aG9kcyAtLSAqL1xuXG4gIHByb3RlY3RlZCBnZXRVcmkocGF0aDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBsZXQgdXJpID0gcGF0aDtcblxuICAgIC8vIElmIHBhdGggaXMgbm90IGFuIFVSSTogcHJlcGVuZCB3aXRoIHBlZXIgVVJMXG4gICAgaWYgKCF1cmkuc3RhcnRzV2l0aCgnaHR0cDovLycpICYmICF1cmkuc3RhcnRzV2l0aCgnaHR0cHM6Ly8nKSkge1xuICAgICAgbGV0IHBlZXJVcmwgPSAodGhpcy5wZWVyICYmIHRoaXMucGVlci51cmwpO1xuXG4gICAgICAvLyBSZW1vdmUgdHJhaWxpbmcgc2xhc2hcbiAgICAgIGlmIChwZWVyVXJsLmVuZHNXaXRoKCcvJykpIHtcbiAgICAgICAgcGVlclVybCA9IHBlZXJVcmwuc3Vic3RyKDAsIHBlZXJVcmwubGVuZ3RoIC0gMSApO1xuICAgICAgfVxuXG4gICAgICAvLyBBZGQgZmlyc3QgcGF0aFxuICAgICAgaWYgKCFwYXRoLnN0YXJ0c1dpdGgoJy8nKSkge1xuICAgICAgICBwYXRoID0gJy8nICsgcGF0aDtcbiAgICAgIH1cblxuICAgICAgLy8gQ3JlYXRlIHRoZSBVUkk6IGNvbmNhdCBwZWVyIFVSTCBhbmQgcGF0aFxuICAgICAgdXJpID0gcGVlclVybCArIHBhdGg7XG4gICAgfVxuICAgIHJldHVybiB1cmk7XG4gIH1cbiAgcHJvdGVjdGVkIG9uRGV2aWNlQ29ubmVjdGlvbkNoYW5nZWQoY29ubmVjdGlvblR5cGU/OiBzdHJpbmcpIHtcbiAgICBjb25uZWN0aW9uVHlwZSA9IGdldENvbm5lY3Rpb25UeXBlKGNvbm5lY3Rpb25UeXBlKTtcbiAgICBpZiAoY29ubmVjdGlvblR5cGUgIT09IHRoaXMuX2RldmljZUNvbm5lY3Rpb25UeXBlKSB7XG4gICAgICB0aGlzLl9kZXZpY2VDb25uZWN0aW9uVHlwZSA9IGNvbm5lY3Rpb25UeXBlIGFzIENvbm5lY3Rpb25UeXBlO1xuXG4gICAgICAvLyBJZiBOT1QgIGFscmVhZHkgZm9yY2VkIGFzIG9mZmxpbmUsIGVtaXQgZXZlbnRcbiAgICAgIGlmICghdGhpcy5fZm9yY2VPZmZsaW5lKSB7XG4gICAgICAgIGNvbnNvbGUuaW5mbyhgW25ldHdvcmtdIENvbm5lY3Rpb24gY2hhbmdlZCB0byB7JHt0aGlzLl9kZXZpY2VDb25uZWN0aW9uVHlwZX19YCk7XG4gICAgICAgIHRoaXMub25OZXR3b3JrU3RhdHVzQ2hhbmdlcy5uZXh0KHRoaXMuX2RldmljZUNvbm5lY3Rpb25UeXBlKTtcblxuICAgICAgICAvLyBDaGFuZ2UgdG8gb2ZmbGluZVxuICAgICAgICBpZiAodGhpcy5fZGV2aWNlQ29ubmVjdGlvblR5cGUgPT09ICdub25lJykge1xuICAgICAgICAgIGlmICh0aGlzLl9tb2JpbGUpIHtcbiAgICAgICAgICAgIC8vIEZvcmNlIG9mZmxpbmUgbW9kZVxuICAgICAgICAgICAgdGhpcy5fZm9yY2VPZmZsaW5lID0gdHJ1ZTtcblxuICAgICAgICAgICAgLy8gQWxlcnQgdGhlIHVzZXJcbiAgICAgICAgICAgIHRoaXMuc2hvd1RvYXN0KHttZXNzYWdlOiAnTkVUV09SSy5JTkZPLk9GRkxJTkVfSEVMUCcsIHR5cGU6ICd3YXJuaW5nJ30pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIC8vIEFsZXJ0IHRoZSB1c2VyXG4gICAgICAgICAgICB0aGlzLnNob3dUb2FzdCh7bWVzc2FnZTogJ05FVFdPUksuSU5GTy5PRkZMSU5FJywgdHlwZTogJ3dhcm5pbmcnfSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gU3RvcCB0aGUgbmV0d29yayBzZXJ2aWNlXG4gICAgICAgICAgdGhpcy5zdG9wKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogR2V0IGRlZmF1bHQgcGVlcnMsIGZyb20gZW52aXJvbm1lbnRcbiAgICovXG4gIHByb3RlY3RlZCBhc3luYyBnZXREZWZhdWx0UGVlcnMoKTogUHJvbWlzZTxQZWVyW10+IHtcbiAgICBjb25zdCBwZWVycyA9ICh0aGlzLmVudmlyb25tZW50LmRlZmF1bHRQZWVycyB8fCBbXSkubWFwKFBlZXIuZnJvbU9iamVjdCk7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShwZWVycyk7XG4gIH1cblxuICBwcm90ZWN0ZWQgc2hvd1RvYXN0PFQgPSBhbnk+KG9wdHM6IFNob3dUb2FzdE9wdGlvbnMpOiBQcm9taXNlPE92ZXJsYXlFdmVudERldGFpbDxUPj4ge1xuICAgIHJldHVybiBUb2FzdHMuc2hvdyh0aGlzLnRvYXN0Q29udHJvbGxlciwgdGhpcy50cmFuc2xhdGUsIG9wdHMpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFkZExpc3RlbmVyPFQ9IGFueT4obmFtZTogTmV0d29ya0V2ZW50VHlwZSwgY2FsbGJhY2s6IChkYXRhPzogVCkgPT4gUHJvbWlzZTx2b2lkPik6IFN1YnNjcmlwdGlvbiB7XG4gICAgdGhpcy5fbGlzdGVuZXJzW25hbWVdID0gdGhpcy5fbGlzdGVuZXJzW25hbWVdIHx8IFtdO1xuICAgIHRoaXMuX2xpc3RlbmVyc1tuYW1lXS5wdXNoKGNhbGxiYWNrKTtcblxuICAgIC8vIFdoZW4gdW5zdWJzY3JpYmUsIHJlbW92ZSBmcm9tIHRoZSBsaXN0ZW5lclxuICAgIHJldHVybiBuZXcgU3Vic2NyaXB0aW9uKCgpID0+IHtcbiAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5fbGlzdGVuZXJzW25hbWVdLmluZGV4T2YoY2FsbGJhY2spO1xuICAgICAgaWYgKGluZGV4ICE9PSAtMSkge1xuICAgICAgICB0aGlzLl9saXN0ZW5lcnNbbmFtZV0uc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBlbWl0PFQ9IGFueT4obmFtZTogTmV0d29ya0V2ZW50VHlwZSwgZGF0YT86IFQpIHtcbiAgICBjb25zdCBob29rcyA9IHRoaXMuX2xpc3RlbmVyc1tuYW1lXTtcbiAgICBpZiAoaXNOb3RFbXB0eUFycmF5KGhvb2tzKSkge1xuICAgICAgY29uc29sZS5pbmZvKGBbbmV0d29yay1zZXJ2aWNlXSBUcmlnZ2VyICR7bmFtZX0gaG9vazogRXhlY3V0aW5nICR7aG9va3MubGVuZ3RofSBjYWxsYmFja3MuLi5gKTtcblxuICAgICAgcmV0dXJuIFByb21pc2UuYWxsKGhvb2tzLm1hcChjYWxsYmFjayA9PiB7XG4gICAgICAgIGNvbnN0IHByb21pc2UgPSBjYWxsYmFjayhkYXRhKTtcbiAgICAgICAgaWYgKCFwcm9taXNlKSByZXR1cm47XG4gICAgICAgIHJldHVybiBwcm9taXNlLmNhdGNoKGVyciA9PiBjb25zb2xlLmVycm9yKCdFcnJvciB3aGlsZSBleGVjdXRpbmcgaG9vayAnICsgbmFtZSwgZXJyKSk7XG4gICAgICB9KSk7XG4gICAgfVxuICB9XG59XG4iXX0=
599
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmV0d29yay5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9jb3JlL3NlcnZpY2VzL25ldHdvcmsuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsWUFBWSxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBSXpFLE9BQU8sRUFBQyxJQUFJLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUd4QyxPQUFPLEVBQTBCLGVBQWUsRUFBQyxNQUFNLDJCQUEyQixDQUFDO0FBQ25GLE9BQU8sRUFBQyxlQUFlLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUMxRCxPQUFPLEVBQXVCLG9CQUFvQixFQUFDLE1BQU0sMEJBQTBCLENBQUM7QUFDcEYsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLDBCQUEwQixDQUFDO0FBRXRELE9BQU8sRUFBQyxlQUFlLEVBQUUsZUFBZSxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUMsTUFBTSx3QkFBd0IsQ0FBQztBQUUxRixPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFFekMsT0FBTyxFQUFtQixNQUFNLEVBQUMsTUFBTSwyQkFBMkIsQ0FBQztBQUNuRSxPQUFPLEVBQUMsb0JBQW9CLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUdsRyxPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sOEJBQThCLENBQUM7QUFDdkQsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLCtCQUErQixDQUFDO0FBQzNELE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSx5Q0FBeUMsQ0FBQztBQUNwRSxPQUFPLEVBQUMsMEJBQTBCLEVBQUMsTUFBTSwwREFBMEQsQ0FBQztB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R0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQy9CLElBQUksQ0FBQyxPQUFPO29CQUFFLE9BQU87Z0JBQ3JCLE9BQU8sT0FBTyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsNkJBQTZCLEdBQUcsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDeEYsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUNMO0lBQ0gsQ0FBQzs7NEdBeHJCVSxjQUFjLGtCQTZDZixRQUFRLGtOQVFSLFdBQVcsYUFDQyxtQkFBbUI7Z0hBdEQ5QixjQUFjLGNBREYsTUFBTTs0RkFDbEIsY0FBYztrQkFEMUIsVUFBVTttQkFBQyxFQUFDLFVBQVUsRUFBRSxNQUFNLEVBQUM7OzBCQThDM0IsTUFBTTsyQkFBQyxRQUFROzswQkFRZixNQUFNOzJCQUFDLFdBQVc7OzBCQUNsQixRQUFROzswQkFBSSxNQUFNOzJCQUFDLG1CQUFtQjs7MEJBQ3RDLFFBQVE7OzBCQUNSLFFBQVE7OzBCQUNSLFFBQVEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0V2ZW50RW1pdHRlciwgSW5qZWN0LCBJbmplY3RhYmxlLCBPcHRpb25hbH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0NyeXB0b1NlcnZpY2V9IGZyb20gJy4vY3J5cHRvLnNlcnZpY2UnO1xuaW1wb3J0IHtUcmFuc2xhdGVTZXJ2aWNlfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7U3RvcmFnZX0gZnJvbSAnQGlvbmljL3N0b3JhZ2UtYW5ndWxhcic7XG5pbXBvcnQge1BlZXJ9IGZyb20gJy4vbW9kZWwvcGVlci5tb2RlbCc7XG5pbXBvcnQge0xvY2FsU2V0dGluZ3N9IGZyb20gJy4vbW9kZWwvc2V0dGluZ3MubW9kZWwnO1xuaW1wb3J0IHtNb2RhbENvbnRyb2xsZXIsIFBsYXRmb3JtLCBUb2FzdENvbnRyb2xsZXJ9IGZyb20gJ0Bpb25pYy9hbmd1bGFyJztcbmltcG9ydCB7SVNlbGVjdFBlZXJNb2RhbE9wdGlvbnMsIFNlbGVjdFBlZXJNb2RhbH0gZnJvbSAnLi4vcGVlci9zZWxlY3QtcGVlci5tb2RhbCc7XG5pbXBvcnQge0JlaGF2aW9yU3ViamVjdCwgU3Vic2NyaXB0aW9uLCB0aW1lcn0gZnJvbSAncnhqcyc7XG5pbXBvcnQge0xvY2FsU2V0dGluZ3NTZXJ2aWNlLCBTRVRUSU5HU19TVE9SQUdFX0tFWX0gZnJvbSAnLi9sb2NhbC1zZXR0aW5ncy5zZXJ2aWNlJztcbmltcG9ydCB7U3BsYXNoU2NyZWVufSBmcm9tICdAY2FwYWNpdG9yL3NwbGFzaC1zY3JlZW4nO1xuaW1wb3J0IHtIdHRwQ2xpZW50LCBIdHRwSGVhZGVyc30gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHtpc05vdEVtcHR5QXJyYXksIGlzTm90TmlsT3JCbGFuaywgc2xlZXAsIHRvQm9vbGVhbn0gZnJvbSAnLi4vLi4vc2hhcmVkL2Z1bmN0aW9ucyc7XG5pbXBvcnQge05ldHdvcmt9IGZyb20gJ0Bhd2Vzb21lLWNvcmRvdmEtcGx1Z2lucy9uZXR3b3JrL25neCc7XG5pbXBvcnQge0RPQ1VNRU5UfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtDYWNoZVNlcnZpY2V9IGZyb20gJ2lvbmljLWNhY2hlJztcbmltcG9ydCB7U2hvd1RvYXN0T3B0aW9ucywgVG9hc3RzfSBmcm9tICcuLi8uLi9zaGFyZWQvdG9hc3QvdG9hc3RzJztcbmltcG9ydCB7ZGlzdGluY3RVbnRpbENoYW5nZWQsIGZpbHRlciwgZmlyc3QsIG1hcCwgbWVyZ2VNYXAsIHRha2VVbnRpbCwgdGFwfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQge092ZXJsYXlFdmVudERldGFpbH0gZnJvbSAnQGlvbmljL2NvcmUnO1xuaW1wb3J0IHtBcHBNYW5pZmVzdCwgTm9kZUluZm99IGZyb20gJy4vbmV0d29yay51dGlscyc7XG5pbXBvcnQge0h0dHBVdGlsc30gZnJvbSAnLi4vLi4vc2hhcmVkL2h0dHAvaHR0cC51dGlscyc7XG5pbXBvcnQge1ZlcnNpb25VdGlsc30gZnJvbSAnLi4vLi4vc2hhcmVkL3ZlcnNpb24vdmVyc2lvbnMnO1xuaW1wb3J0IHtFTlZJUk9OTUVOVH0gZnJvbSAnLi4vLi4vLi4vZW52aXJvbm1lbnRzL2Vudmlyb25tZW50LmNsYXNzJztcbmltcG9ydCB7U3RhcnRhYmxlT2JzZXJ2YWJsZVNlcnZpY2V9IGZyb20gJy4uLy4uL3NoYXJlZC9zZXJ2aWNlcy9zdGFydGFibGUtb2JzZXJ2YWJsZS1zZXJ2aWNlLmNsYXNzJztcbmltcG9ydCB7Q29ubmVjdGlvblR5cGUsIGdldENvbm5lY3Rpb25UeXBlLCBOZXR3b3JrRXZlbnRUeXBlfSBmcm9tICcuL25ldHdvcmsudHlwZXMnO1xuaW1wb3J0IHtBUFBfTE9HR0lOR19TRVJWSUNFfSBmcm9tICcuLi8uLi9zaGFyZWQvbG9nZ2luZy9sb2dnaW5nLXNlcnZpY2UuY2xhc3MnO1xuaW1wb3J0IHtJTG9nZ2VyLCBJTG9nZ2luZ1NlcnZpY2V9IGZyb20gJy4uLy4uL3NoYXJlZC9sb2dnaW5nL2xvZ2dlci5tb2RlbCc7XG5cbmNvbnN0IE5ldHdvcmtSZWZyZXNoVGltZXJQZXJpb2QgPSB7XG4gICAgTU9CSUxFOiAgMTAwMCAqIDYwICogMTAgLyogZXZlcnkgMTAgbWluICovLFxuICAgIERFU0tUT1A6IDEwMDAgKiA2MCAqIDUgLyogZXZlcnkgNSBtaW4gKi9cbn07XG5cbmV4cG9ydCBjb25zdCBQRUVSX1VSTF9SRUdFWFAgPSAvXihodHRwfGh0dHBzKTpcXC9cXC9bXiBcIj8jQF0rJC87XG5cbi8qIC0tIERFViBvbmx5ICh0byBkZWJ1ZyByZWZyZXNoIHRpbWVyKVxuY29uc3QgTmV0d29ya1JlZnJlc2hUaW1lclBlcmlvZCA9IHtcbiAgICBNT0JJTEU6ICAxMDAwLFxuICAgIERFU0tUT1A6IDEwMDBcbn0qL1xuXG5ASW5qZWN0YWJsZSh7cHJvdmlkZWRJbjogJ3Jvb3QnfSlcbmV4cG9ydCBjbGFzcyBOZXR3b3JrU2VydmljZSBleHRlbmRzIFN0YXJ0YWJsZU9ic2VydmFibGVTZXJ2aWNlPFBlZXIsIFBlZXI+IHtcblxuICBvblBlZXJDaGFuZ2VzID0gdGhpcy5zdGFydFN1YmplY3QucGlwZShcbiAgICBtYXAocGVlciA9PiBwZWVyPy51cmwpLFxuICAgIGZpbHRlcihpc05vdE5pbE9yQmxhbmspLFxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkPHN0cmluZz4oKVxuICApO1xuICBvbk5ldHdvcmtTdGF0dXNDaGFuZ2VzID0gbmV3IEJlaGF2aW9yU3ViamVjdDxDb25uZWN0aW9uVHlwZT4obnVsbCk7XG4gIG9uUmVzZXROZXR3b3JrQ2FjaGUgPSBuZXcgRXZlbnRFbWl0dGVyKHRydWUpO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX21vYmlsZTogYm9vbGVhbjtcbiAgcHJpdmF0ZSByZWFkb25seSBfbG9nZ2VyOiBJTG9nZ2VyO1xuICBwcml2YXRlIF90aW1lclN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuICBwcml2YXRlIHJlYWRvbmx5IF90aW1lclJlZnJlc2hQZXJpb2Q6IG51bWJlcjtcbiAgcHJpdmF0ZSByZWFkb25seSBfdGltZXJSZWZyZXNoQ29uZGl0aW9uOiAoKSA9PiBib29sZWFuO1xuICBwcml2YXRlIF9kZXZpY2VDb25uZWN0aW9uVHlwZTogQ29ubmVjdGlvblR5cGU7XG4gIHByaXZhdGUgX2ZvcmNlT2ZmbGluZTogYm9vbGVhbjtcbiAgcHJpdmF0ZSBfbGlzdGVuZXJzOiB7XG4gICBba2V5OiBzdHJpbmddOiAoKGRhdGE/OiBhbnkpID0+IFByb21pc2U8dm9pZD4pW107XG4gIH0gPSB7fTtcblxuICBnZXQgb25saW5lKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmNvbm5lY3Rpb25UeXBlICE9PSAnbm9uZSc7XG4gIH1cblxuICBnZXQgb2ZmbGluZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5jb25uZWN0aW9uVHlwZSA9PT0gJ25vbmUnO1xuICB9XG5cbiAgZ2V0IGNvbm5lY3Rpb25UeXBlKCk6IENvbm5lY3Rpb25UeXBle1xuICAgIC8vIElmIGZvcmNlIG9mZmxpbmU6IHJldHVybiAnbm9uZSdcbiAgICByZXR1cm4gdGhpcy5fZm9yY2VPZmZsaW5lICYmICdub25lJ1xuICAgICAgLy8gRWxzZSwgcmV0dXJuIGRldmljZSBjb25uZWN0aW9uIHR5cGUgKG9yIHVua25vd24pXG4gICAgICB8fCAodGhpcy5zdGFydGVkICYmIHRoaXMuX2RldmljZUNvbm5lY3Rpb25UeXBlIHx8ICd1bmtub3duJyk7XG4gIH1cblxuICBnZXQgcGVlcigpOiBQZWVyIHtcbiAgICByZXR1cm4gdGhpcy5kYXRhU3ViamVjdC52YWx1ZT8uY2xvbmUoKTtcbiAgfVxuXG4gIHNldCBwZWVyKHBlZXI6IFBlZXIpIHtcbiAgICB0aGlzLnJlc3RhcnQocGVlcik7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihcbiAgICBASW5qZWN0KERPQ1VNRU5UKSBwcml2YXRlIF9kb2N1bWVudDogYW55LFxuICAgIHByaXZhdGUgcGxhdGZvcm06IFBsYXRmb3JtLFxuICAgIHByaXZhdGUgbW9kYWxDdHJsOiBNb2RhbENvbnRyb2xsZXIsXG4gICAgcHJpdmF0ZSBjcnlwdG9TZXJ2aWNlOiBDcnlwdG9TZXJ2aWNlLFxuICAgIHByaXZhdGUgc3RvcmFnZTogU3RvcmFnZSxcbiAgICBwcml2YXRlIHNldHRpbmdzOiBMb2NhbFNldHRpbmdzU2VydmljZSxcbiAgICBwcml2YXRlIGNhY2hlOiBDYWNoZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBodHRwOiBIdHRwQ2xpZW50LFxuICAgIEBJbmplY3QoRU5WSVJPTk1FTlQpIHByb3RlY3RlZCBlbnZpcm9ubWVudCxcbiAgICBAT3B0aW9uYWwoKSBASW5qZWN0KEFQUF9MT0dHSU5HX1NFUlZJQ0UpIHByaXZhdGUgbG9nZ2luZ1NlcnZpY2U6IElMb2dnaW5nU2VydmljZSxcbiAgICBAT3B0aW9uYWwoKSBwcml2YXRlIG5ldHdvcms6IE5ldHdvcmssXG4gICAgQE9wdGlvbmFsKCkgcHJpdmF0ZSB0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgQE9wdGlvbmFsKCkgcHJpdmF0ZSB0b2FzdENvbnRyb2xsZXI6IFRvYXN0Q29udHJvbGxlclxuICApIHtcbiAgICBzdXBlcihwbGF0Zm9ybSk7XG4gICAgdGhpcy5fbW9iaWxlID0gdGhpcy5zZXR0aW5ncy5tb2JpbGU7XG4gICAgdGhpcy5fbG9nZ2VyID0gdGhpcy5sb2dnaW5nU2VydmljZT8uZ2V0TG9nZ2VyKCduZXR3b3JrJyk7XG5cbiAgICBpZiAodGhpcy5fbW9iaWxlKSB7XG4gICAgICB0aGlzLl90aW1lclJlZnJlc2hQZXJpb2QgPSBOZXR3b3JrUmVmcmVzaFRpbWVyUGVyaW9kLk1PQklMRTtcbiAgICAgIHRoaXMuX3RpbWVyUmVmcmVzaENvbmRpdGlvbiA9ICgpID0+IHRoaXMub25saW5lOyAvLyBDaGVjayBvbmx5IHdoZW4gb25saW5lLCBhbmQgc3RvcCB3aGVuIG9mZmxpbmVcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICB0aGlzLl90aW1lclJlZnJlc2hQZXJpb2QgPSBOZXR3b3JrUmVmcmVzaFRpbWVyUGVyaW9kLkRFU0tUT1A7XG4gICAgICB0aGlzLl90aW1lclJlZnJlc2hDb25kaXRpb24gPSAoKSA9PiB0cnVlOyAvLyBBbHdheXMgY2hlY2tcbiAgICB9XG5cbiAgICB0aGlzLnN0YXJ0U3ViamVjdC5zdWJzY3JpYmUocGVlciA9PiB0aGlzLm5nT25BZnRlclN0YXJ0KHBlZXIpKTtcblxuICAgIC8vIEZvciBERVYgb25seVxuICAgIHRoaXMuX2RlYnVnID0gIWVudmlyb25tZW50LnByb2R1Y3Rpb247XG5cbiAgfVxuXG4gIC8qKlxuICAgKiBSZWdpc3RlciB0byBuZXR3b3JrIGV2ZW50XG4gICAqXG4gICAqIEBwYXJhbSBldmVudFR5cGVcbiAgICogQHBhcmFtIGNhbGxiYWNrXG4gICAqL1xuICBvbjxUPSBhbnk+KGV2ZW50VHlwZTogTmV0d29ya0V2ZW50VHlwZSwgY2FsbGJhY2s6IChkYXRhPzogVCkgPT4gUHJvbWlzZTxhbnk+KTogU3Vic2NyaXB0aW9uIHtcbiAgICBzd2l0Y2ggKGV2ZW50VHlwZSkge1xuICAgICAgY2FzZSAnc3RhcnQnOlxuICAgICAgICByZXR1cm4gdGhpcy5zdGFydFN1YmplY3Quc3Vic2NyaWJlKCgpID0+IGNhbGxiYWNrKCkpO1xuXG4gICAgICBjYXNlICdwZWVyQ2hhbmdlZCc6XG4gICAgICAgIHJldHVybiB0aGlzLm9uUGVlckNoYW5nZXMuc3Vic2NyaWJlKCgpID0+IGNhbGxiYWNrKCkpO1xuXG4gICAgICBjYXNlICdzdGF0dXNDaGFuZ2VkJzpcbiAgICAgICAgcmV0dXJuIHRoaXMub25OZXR3b3JrU3RhdHVzQ2hhbmdlcy5zdWJzY3JpYmUoKHR5cGUpID0+IGNhbGxiYWNrKHR5cGUgYXMgdW5rbm93biBhcyBUKSk7XG5cbiAgICAgIGNhc2UgJ3Jlc2V0Q2FjaGUnOlxuICAgICAgICByZXR1cm4gdGhpcy5vblJlc2V0TmV0d29ya0NhY2hlLnN1YnNjcmliZSgoKSA9PiBjYWxsYmFjaygpKTtcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIHRoaXMuYWRkTGlzdGVuZXIoZXZlbnRUeXBlLCBjYWxsYmFjayk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgdHJ5T25saW5lKG9wdHM/OiB7XG4gICAgc2hvd09mZmxpbmVUb2FzdD86IGJvb2xlYW47XG4gICAgc2hvd09ubGluZVRvYXN0PzogYm9vbGVhbjtcbiAgICBzaG93TG9hZGluZ1RvYXN0PzogYm9vbGVhbjtcbiAgICBhZnRlclJldHJ5RGVsYXk/OiBudW1iZXI7XG4gICAgYWZ0ZXJSZXRyeVByb21pc2U/OiAoKSA9PiBQcm9taXNlPGFueT47XG4gIH0pOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICAvLyBJZiBvZmZsaW5lIG1vZGUgbm90IGZvcmNlZCwgYW5kIGRldmljZSBzYXlzIHRoZXJlIGlzIG5vIGNvbm5lY3Rpb246IHNraXBcbiAgICBpZiAoIXRoaXMuX2ZvcmNlT2ZmbGluZSB8fCB0aGlzLl9kZXZpY2VDb25uZWN0aW9uVHlwZSA9PT0gJ25vbmUnKSByZXR1cm4gZmFsc2U7XG5cbiAgICAvLyBTSG93IGxvYWRpbmcgdG9hc3RcbiAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICAgIGNvbnN0IHNob3dMb2FkaW5nVG9hc3QgPSAhb3B0cyB8fCBvcHRzLnNob3dMb2FkaW5nVG9hc3QgIT09IGZhbHNlO1xuICAgIGxldCBsb2FkaW5nVG9hc3Q6IEhUTUxJb25Ub2FzdEVsZW1lbnQ7XG4gICAgaWYgKHNob3dMb2FkaW5nVG9hc3QpIHtcbiAgICAgIGF3YWl0IHRoaXMuc2hvd1RvYXN0KHttZXNzYWdlOiAnTkVUV09SSy5JTkZPLlJFVFJZX1RPX0NPTk5FQ1QnLFxuICAgICAgICBkdXJhdGlvbjogMTAwMDAsXG4gICAgICAgIG9uV2lsbFByZXNlbnQ6IHQgPT4gbG9hZGluZ1RvYXN0ID0gdH0pO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBjb25zb2xlLmluZm8oJ1tuZXR3b3JrXSBDaGVja2luZyBjb25uZWN0aW9uIHRvIHBvZC4uLicpO1xuICAgICAgY29uc3Qgc2V0dGluZ3M6IExvY2FsU2V0dGluZ3MgPSBhd2FpdCB0aGlzLnNldHRpbmdzLnJlYWR5KCk7XG5cbiAgICAgIGlmICghc2V0dGluZ3MucGVlclVybCkgcmV0dXJuIGZhbHNlOyAvLyBObyBwZWVyIGRlZmluZS4gU2tpcFxuXG4gICAgICBjb25zdCBwZWVyID0gUGVlci5wYXJzZVVybChzZXR0aW5ncy5wZWVyVXJsKTtcbiAgICAgIGNvbnN0IHBlZXJJbmZvID0gYXdhaXQgdGhpcy5jaGVja1BlZXJBbGl2ZShwZWVyKTtcbiAgICAgIGNvbnN0IHBlZXJBbGl2ZUFuZENvbXBhdGlibGUgPSBwZWVySW5mbyAmJiBhd2FpdCB0aGlzLmNoZWNrUGVlckNvbXBhdGlibGUocGVlckluZm8pO1xuICAgICAgaWYgKHBlZXJBbGl2ZUFuZENvbXBhdGlibGUpIHtcblxuICAgICAgICAvLyBEaXNhYmxlIHRoZSBvZmZsaW5lIG1vZGVcbiAgICAgICAgdGhpcy5zZXRGb3JjZU9mZmxpbmUoZmFsc2UpO1xuXG4gICAgICAgIC8vIFJlc3RhcnRcbiAgICAgICAgYXdhaXQgdGhpcy5yZXN0YXJ0KHBlZXIpO1xuXG4gICAgICAgIC8vIFdhaXQgYSBwcm9taXNlLCBiZWZvcmUgcmVjaGVja1xuICAgICAgICBhd2FpdCB0aGlzLmVtaXQoJ2JlZm9yZVRyeU9ubGluZUZpbmlzaCcsIHRoaXMub25saW5lKTtcblxuICAgICAgfVxuICAgIH1cbiAgICBjYXRjaCAoZXJyKSB7XG4gICAgICBjb25zb2xlLmVycm9yKGVyciAmJiBlcnIubWVzc2FnZSB8fCBlcnIpO1xuICAgICAgLy8gQ29udGludWVcbiAgICB9XG5cbiAgICAvLyBDbG9zZSBsb2FkaW5nIHRvYXN0ICh3aXRoIGEgbWluaW1hbCBkaXNwbGF5IGR1cmF0aW9uIG9mIDJzKVxuICAgIGlmIChzaG93TG9hZGluZ1RvYXN0KSB7XG4gICAgICBhd2FpdCBzbGVlcCgyMDAwIC0gKERhdGUubm93KCkgLSBub3cpKTtcbiAgICAgIGlmIChsb2FkaW5nVG9hc3QpIGF3YWl0IGxvYWRpbmdUb2FzdC5kaXNtaXNzKCk7XG4gICAgfVxuXG4gICAgLy8gUmVjaGVjayBuZXR3b3JrIHN0YXR1c1xuICAgIGNvbnN0IG9ubGluZSA9IHRoaXMub25saW5lO1xuXG4gICAgLy8gRGlzcGxheSBhIHRvYXN0IHRvIHVzZXJcbiAgICBpZiAob25saW5lKSB7XG4gICAgICBpZiAoIW9wdHMgfHwgb3B0cy5zaG93T25saW5lVG9hc3QgIT09IGZhbHNlKSB7XG4gICAgICAgIC8vIERpc3BsYXkgdG9hc3QgKHdpdGhvdXQgYXdhaXQsIGJlY2F1c2Ugbm90IG5lZWQgdG8gd2FpdCB0b2FzdCBjbG9zZSBldmVudClcbiAgICAgICAgdGhpcy5zaG93VG9hc3Qoe21lc3NhZ2U6ICdORVRXT1JLLklORk8uT05MSU5FJywgdHlwZTogJ2luZm8nfSk7XG4gICAgICB9XG4gICAgfVxuICAgIGVsc2UgaWYgKG9wdHMgJiYgb3B0cy5zaG93T2ZmbGluZVRvYXN0ID09PSB0cnVlKSB7XG4gICAgICAvLyBEaXNwbGF5IHRvYXN0ICh3aXRob3V0IGF3YWl0LCBiZWNhdXNlIG5vdCBuZWVkIHRvIHdhaXQgdG9hc3QgY2xvc2UgZXZlbnQpXG4gICAgICByZXR1cm4gdGhpcy5zaG93T2ZmbGluZVRvYXN0KHtzaG93UmV0cnlCdXR0b246IGZhbHNlfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuc3RhcnRlZCAmJiBvbmxpbmU7XG4gIH1cblxuICBhc3luYyBzaG93T2ZmbGluZVRvYXN0KG9wdHM/OiB7XG4gICAgbWVzc2FnZT86IHN0cmluZztcbiAgICBzaG93Q2xvc2VCdXR0b24/OiBib29sZWFuO1xuICAgIHNob3dSZXRyeUJ1dHRvbj86IGJvb2xlYW47XG4gICAgc2hvd1JldHJ5U3VjY2Vzc1RvYXN0PzogYm9vbGVhbjtcbiAgICBzaG93UmV0cnlMb2FkaW5nVG9hc3Q/OiBib29sZWFuO1xuICAgIG9uUmV0cnlTdWNjZXNzPzogKCkgPT4gdm9pZDtcbiAgfSk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGlmICh0aGlzLm9ubGluZSkgcmV0dXJuOyAvLyBTa2lwIGlmIG9ubGluZVxuXG4gICAgLy8gVG9hc3Qgd2l0aCBhIHJldHJ5IGJ1dHRvblxuICAgIGlmICghb3B0cyB8fCBvcHRzLnNob3dSZXRyeUJ1dHRvbiAhPT0gZmFsc2UpIHtcblxuICAgICAgY29uc3QgdG9hc3RSZXN1bHQgPSBhd2FpdCB0aGlzLnNob3dUb2FzdCh7XG4gICAgICAgIG1lc3NhZ2U6IChvcHRzICYmIG9wdHMubWVzc2FnZSB8fCAnRVJST1IuTkVUV09SS19SRVFVSVJFRCcpLFxuICAgICAgICB0eXBlOiAnd2FybmluZycsXG4gICAgICAgIHNob3dDbG9zZUJ1dHRvbjogdHJ1ZSxcbiAgICAgICAgZHVyYXRpb246IDEwMDAwMCxcbiAgICAgICAgYnV0dG9uczogW1xuICAgICAgICAgIC8vIHJlY29ubmVjdCBidXR0b25cbiAgICAgICAgICB7XG4gICAgICAgICAgICByb2xlOiAncmVmcmVzaCcsXG4gICAgICAgICAgICB0ZXh0OiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdORVRXT1JLLkJUTl9DSEVDS19BTElWRScpXG4gICAgICAgICAgfVxuICAgICAgICBdXG4gICAgICB9KTtcblxuICAgICAgLy8gVXNlciBkb24ndCBjbGljayByZWNvbm5lY3Q6IHJldHVyblxuICAgICAgaWYgKCF0b2FzdFJlc3VsdCB8fCB0b2FzdFJlc3VsdC5yb2xlICE9PSAncmVmcmVzaCcpIHJldHVybiBmYWxzZTtcblxuICAgICAgLy8gaWYgbmV0d29yayBzdGF0ZSBjaGFuZ2VkIHRvIG9ubGluZTogZXhpdCBoZXJlXG4gICAgICBpZiAodGhpcy5vbmxpbmUpIHJldHVybiB0cnVlO1xuXG4gICAgICAvLyBUcnkgdG8gcmVjb25uZWN0XG4gICAgICBjb25zdCBvbmxpbmUgPSBhd2FpdCB0aGlzLnRyeU9ubGluZSh7XG4gICAgICAgIHNob3dPZmZsaW5lVG9hc3Q6IGZhbHNlLFxuICAgICAgICBzaG93T25saW5lVG9hc3Q6IHRvQm9vbGVhbihvcHRzICYmIG9wdHMuc2hvd1JldHJ5U3VjY2Vzc1RvYXN0LCB0cnVlKSxcbiAgICAgICAgc2hvd0xvYWRpbmdUb2FzdDogdG9Cb29sZWFuKG9wdHMgJiYgb3B0cy5zaG93UmV0cnlMb2FkaW5nVG9hc3QsIHRydWUpXG4gICAgICB9KTtcbiAgICAgIGlmIChvbmxpbmUpIHtcbiAgICAgICAgLy8gQ2FsbCBzdWNjZXNzIGNhbGxiYWNrIChhc3luYylcbiAgICAgICAgaWYgKG9wdHMgJiYgb3B0cy5vblJldHJ5U3VjY2Vzcykge1xuICAgICAgICAgIHNldFRpbWVvdXQob3B0cy5vblJldHJ5U3VjY2Vzcyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG5cbiAgICAgIG9wdHMgPSB7XG4gICAgICAgIC4uLm9wdHMsXG4gICAgICAgIHNob3dSZXRyeUJ1dHRvbjogZmFsc2UsXG4gICAgICAgIHNob3dDbG9zZUJ1dHRvbjogdHJ1ZVxuICAgICAgfTtcbiAgICB9XG5cbiAgICAvLyBTaW1wbGUgdG9hc3QsIHdpdGhvdXQgJ2F3YWl0JywgYmVjYXVzZSBub3QgbmVlZCB0byB3YWl0IHRvYXN0J3MgZGlzbWlzc1xuICAgIHRoaXMuc2hvd1RvYXN0KHtcbiAgICAgIG1lc3NhZ2U6ICdFUlJPUi5ORVRXT1JLX1JFUVVJUkVEJyxcbiAgICAgIHR5cGU6ICdlcnJvcicsXG4gICAgICAuLi5vcHRzXG4gICAgfSk7XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiB0aGUgcGVlciBpcyBhbGl2ZVxuICAgKlxuICAgKiBAcGFyYW0gcGVlclxuICAgKiBAcGFyYW0gb3B0c1xuICAgKi9cbiAgYXN5bmMgY2hlY2tQZWVyQWxpdmUocGVlcj86IHN0cmluZyB8IFBlZXIsIG9wdHM/OiB7IGNoZWNrQ29tcGF0aWJsZT86IGJvb2xlYW47IGRpc3BsYXlUb2FzdD86IGJvb2xlYW4gfSApOiBQcm9taXNlPE5vZGVJbmZvPiB7XG4gICAgcGVlciA9IHBlZXIgfHwgdGhpcy5wZWVyO1xuICAgIGlmICghcGVlcikge1xuICAgICAgY29uc3Qgc2V0dGluZ3M6IExvY2FsU2V0dGluZ3MgPSBhd2FpdCB0aGlzLnNldHRpbmdzLnJlYWR5KCk7XG4gICAgICBpZiAoIXNldHRpbmdzLnBlZXJVcmwpIHJldHVybiB1bmRlZmluZWQ7IC8vIE5vIHBlZXIgZGVmaW5lLiBTa2lwXG4gICAgICBwZWVyID0gUGVlci5wYXJzZVVybChzZXR0aW5ncy5wZWVyVXJsKTtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IHRoaXMuZ2V0Tm9kZUluZm8ocGVlcik7XG5cbiAgICAgIHJldHVybiBkYXRhO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgY29uc29sZS5kZWJ1ZygnW25ldHdvcmtdIENhbm5vdCBnZXQgL2FwaS9ub2RlL2luZm8gZnJvbSBwZWVyOiAnICsgKGVyciAmJiBlcnIubWVzc2FnZSB8fCBlcnIpLCBlcnIpO1xuICAgICAgdGhpcy5fbG9nZ2VyPy5lcnJvcignY2hlY2tQZWVyQWxpdmUnLCAnW25ldHdvcmtdIENhbm5vdCBnZXQgL2FwaS9ub2RlL2luZm8gZnJvbSBwZWVyOiAnICsgKGVyciAmJiBlcnIubWVzc2FnZSB8fCBlcnIpICsgJzpcXG4nICsgSlNPTi5zdHJpbmdpZnkoZXJyKSApO1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cblxuICBhc3luYyBjaGVja1BlZXJDb21wYXRpYmxlKHBlZXJJbmZvOiBOb2RlSW5mbywgb3B0cz86IHsgc2hvd1RvYXN0PzogYm9vbGVhbiB9KTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgaWYgKCF0aGlzLmVudmlyb25tZW50LnBlZXJNaW5WZXJzaW9uKSByZXR1cm4gdHJ1ZTsgLy8gU2tpcCBjb21wYXRpYmlsaXR5IGNoZWNrXG5cbiAgICAvLyBDaGVjayB0aGUgbWluIHBvZCB2ZXJzaW9uLCBkZWZpbmVkIGJ5IHRoZSBhcHBcbiAgICBjb25zdCBpc0NvbXBhdGlibGUgPSBwZWVySW5mbyAmJiBwZWVySW5mby5zb2Z0d2FyZVZlcnNpb24gJiYgVmVyc2lvblV0aWxzLmlzQ29tcGF0aWJsZSh0aGlzLmVudmlyb25tZW50LnBlZXJNaW5WZXJzaW9uLCBwZWVySW5mby5zb2Z0d2FyZVZlcnNpb24pO1xuXG4gICAgLy8gRGlzcGxheSB0b2FzdCwgaWYgbm90IGNvbXBhdGlibGVcbiAgICBpZiAoIWlzQ29tcGF0aWJsZSAmJiAoIW9wdHMgfHwgb3B0cy5zaG93VG9hc3QgIT09IGZhbHNlKSkge1xuICAgICAgYXdhaXQgdGhpcy5zaG93VG9hc3Qoe1xuICAgICAgICB0eXBlOiAnZXJyb3InLFxuICAgICAgICBtZXNzYWdlOiAnTkVUV09SSy5FUlJPUi5OT1RfQ09NUEFUSUJMRV9QRUVSJyxcbiAgICAgICAgbWVzc2FnZVBhcmFtczoge1xuICAgICAgICAgIHZlcnNpb246IHRoaXMuZW52aXJvbm1lbnQucGVlck1pblZlcnNpb25cbiAgICAgICAgfSxcbiAgICAgICAgc2hvd0Nsb3NlQnV0dG9uOiB0cnVlXG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGlzQ29tcGF0aWJsZTtcbiAgfVxuXG4gIGFzeW5jIGdldE5vZGVJbmZvKHBlZXI/OiBzdHJpbmcgfCBQZWVyKTogUHJvbWlzZTxOb2RlSW5mbz4ge1xuXG4gICAgY29uc3QgcGF0aCA9IHRoaXMuY29tcHV0ZVBlZXJQYXRoKHBlZXIsICcvYXBpL25vZGUvaW5mbycpO1xuICAgIHRoaXMuX2xvZ2dlcj8uaW5mbygnY2hlY2tQZWVyQWxpdmUnLCBgR2V0dGluZyAnJHtwYXRofScgLi4uYCk7XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgZGF0YTpOb2RlSW5mbyA9IGF3YWl0IHRoaXMuZ2V0KHBhdGgpO1xuICAgICAgdGhpcy5fbG9nZ2VyPy5kZWJ1ZygnY2hlY2tQZWVyQWxpdmUnLCBgUmVzdWx0OlxcbiR7SlNPTi5zdHJpbmdpZnkoZGF0YSl9YCk7XG4gICAgICByZXR1cm4gZGF0YTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGNvbnNvbGUuZGVidWcoYFtuZXR3b3JrXSBFcnJvciB3aGlsZSBnZXR0aW5nICcke3BhdGh9JzogJHtlcnIgJiYgZXJyLm1lc3NhZ2UgfHwgZXJyfWAsIGVycik7XG4gICAgICB0aGlzLl9sb2dnZXI/LmVycm9yKCdjaGVja1BlZXJBbGl2ZScsIGBbbmV0d29ya10gRXJyb3Igd2hpbGUgZ2V0dGluZyAnJHtwYXRofSc6ICR7ZXJyPy5tZXNzYWdlIHx8ICcnfScgJHtKU09OLnN0cmluZ2lmeShlcnIpfWApO1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cblxuICBhc3luYyBnZXRBcHBNYW5pZmVzdChwZWVyPzogc3RyaW5nIHwgUGVlciwgb3B0cz86IHtub2NhY2hlPzogYm9vbGVhbn0pOiBQcm9taXNlPEFwcE1hbmlmZXN0fHVuZGVmaW5lZD4ge1xuICAgIHRyeSB7XG4gICAgICBsZXQgcGF0aCA9IHRoaXMuY29tcHV0ZVBlZXJQYXRoKHBlZXIsICdtYW5pZmVzdC5qc29uJyk7XG4gICAgICBpZiAob3B0cz8ubm9jYWNoZSkge1xuICAgICAgICBwYXRoICs9ICc/dD0nICsgRGF0ZS5ub3coKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBhd2FpdCB0aGlzLmdldChwYXRoLCBvcHRzKTtcbiAgICB9XG4gICAgY2F0Y2ggKGVycikge1xuICAgICAgaWYgKHRoaXMuZW52aXJvbm1lbnQucHJvZHVjdGlvbikgY29uc29sZS5lcnJvcignW25ldHdvcmtdIENhbm5vdCBsb2FkIGZpbGUgXFwnbWFuaWZlc3QuanNvblxcJy4gUGxlYXNlIG1ha2Ugc3VyZSB3ZWJzZXJ2ZXIgY29uZmlnIGFsbG93IENPUlMgYWNjZXNzJywgZXJyKTtcbiAgICAgIGVsc2UgY29uc29sZS5lcnJvcignW25ldHdvcmtdIENhbm5vdCBsb2FkIGZpbGUgXFwnbWFuaWZlc3QuanNvblxcJy4nLCBlcnIpO1xuICAgICAgLy8gQ29udGludWVcbiAgICB9XG4gIH1cblxuICBhc3luYyBnZXRBcHBWZXJzaW9uKHBlZXI/OiBzdHJpbmcgfCBQZWVyLCBvcHRzID0ge25vY2FjaGU6IHRydWV9KTogUHJvbWlzZTxzdHJpbmd8dW5kZWZpbmVkPiB7XG4gICAgdHJ5IHtcbiAgICAgIGxldCBwYXRoID0gdGhpcy5jb21wdXRlUGVlclBhdGgocGVlciwgJ3ZlcnNpb24uYXBwdXAnKTtcbiAgICAgIGlmIChvcHRzLm5vY2FjaGUpIHtcbiAgICAgICAgcGF0aCArPSAnP3Q9JyArIERhdGUubm93KCk7XG4gICAgICB9XG4gICAgICBjb25zdCBhcHBWZXJzaW9uOiBzdHJpbmcgPSBhd2FpdCB0aGlzLmdldFRleHQocGF0aCwgb3B0cyk7XG4gICAgICBpZiAoaXNOb3ROaWxPckJsYW5rKGFwcFZlcnNpb24pKSByZXR1cm4gYXBwVmVyc2lvbjtcbiAgICB9XG4gICAgY2F0Y2ggKGVycikge1xuICAgICAgaWYgKHRoaXMuZW52aXJvbm1lbnQucHJvZHVjdGlvbikgY29uc29sZS5lcnJvcignW25ldHdvcmtdIENhbm5vdCBsb2FkIGZpbGUgXFwndmVyc2lvbi5hcHB1cFxcJy4gUGxlYXNlIG1ha2Ugc3VyZSB3ZWJzZXJ2ZXIgY29uZmlnIGFsbG93IENPUlMgYWNjZXNzJyk7XG4gICAgICBlbHNlIGNvbnNvbGUuZXJyb3IoJ1tuZXR3b3JrXSBDYW5ub3QgbG9hZCBmaWxlIFxcJ3ZlcnNpb24uYXBwdXBcXCcuJywgZXJyKTtcbiAgICAgIC8vIENvbnRpbnVlXG4gICAgfVxuXG4gICAgLy8gVHJ5IGxvYWRpbmcgbWFuaWZlc3QuanNvblxuICAgIGNvbnN0IG1hbmlmZXN0ID0gYXdhaXQgdGhpcy5nZXRBcHBNYW5pZmVzdChwZWVyLCBvcHRzKTtcbiAgICByZXR1cm4gbWFuaWZlc3Q/LnZlcnNpb247XG4gIH1cblxuICBjb21wdXRlUGVlclBhdGgocGVlcjogc3RyaW5nIHwgUGVlciB8IHVuZGVmaW5lZCwgcGF0aDogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICBwZWVyID0gcGVlciB8fCB0aGlzLnBlZXI7XG4gICAgaWYgKCFwZWVyKSByZXR1cm4gdW5kZWZpbmVkO1xuXG4gICAgbGV0IHBlZXJVcmwgPSAocGVlciBpbnN0YW5jZW9mIFBlZXIpID8gcGVlci51cmwgOiAocGVlciBhcyBzdHJpbmcpO1xuXG4gICAgLy8gUmVtb3ZlIHRyYWlsaW5nIHNsYXNoXG4gICAgaWYgKHBlZXJVcmwuZW5kc1dpdGgoJy8nKSkge1xuICAgICAgcGVlclVybCA9IHBlZXJVcmwuc3Vic3RyKDAsIHBlZXJVcmwubGVuZ3RoIC0gMSk7XG4gICAgfVxuXG4gICAgLy8gQWRkIGZpcnN0IHBhdGhcbiAgICBpZiAoIXBhdGguc3RhcnRzV2l0aCgnLycpKSB7XG4gICAgICBwYXRoID0gJy8nICsgcGF0aDtcbiAgICB9XG5cbiAgICAvLyBDb25jYXQgcGVlciBVUkwgYW5kIHBhdGhcbiAgICByZXR1cm4gcGVlclVybCArIHBhdGg7XG4gIH1cblxuXG4gIC8qKlxuICAgKiBBbGxvdyB0byBmb3JjZSBvZmZsaW5lIG1vZGVcbiAgICovXG4gIHNldEZvcmNlT2ZmbGluZSh2YWx1ZT86IGJvb2xlYW4sIG9wdHM/OiB7XG4gICAgc2hvd1RvYXN0PzogYm9vbGVhbjsgLy8gRGlzcGxheSBhIHRvYXN0LCB3aGVuIG9mZmxpbmUgP1xuICB9KSB7XG4gICAgdmFsdWUgPSB0b0Jvb2xlYW4odmFsdWUsIHRydWUpO1xuICAgIGlmICh0aGlzLl9mb3JjZU9mZmxpbmUgIT09IHZhbHVlKSB7XG4gICAgICBjb25zdCBwcmV2aW91c0Nvbm5lY3Rpb25UeXBlID0gdGhpcy5jb25uZWN0aW9uVHlwZTtcbiAgICAgIHRoaXMuX2ZvcmNlT2ZmbGluZSA9IHZhbHVlO1xuICAgICAgY29uc3QgY3VycmVudENvbm5lY3Rpb25UeXBlID0gdGhpcy5jb25uZWN0aW9uVHlwZTtcblxuICAgICAgaWYgKHByZXZpb3VzQ29ubmVjdGlvblR5cGUgIT09IGN1cnJlbnRDb25uZWN0aW9uVHlwZSkge1xuICAgICAgICBjb25zb2xlLmluZm8oYFtuZXR3b3JrXSBDb25uZWN0aW9uIGNoYW5nZWQgdG8geyR7Y3VycmVudENvbm5lY3Rpb25UeXBlfX1gKTtcbiAgICAgICAgdGhpcy5vbk5ldHdvcmtTdGF0dXNDaGFuZ2VzLm5leHQoY3VycmVudENvbm5lY3Rpb25UeXBlKTtcblxuICAgICAgICAvLyBPZmZsaW5lIG1vZGU6IGFsZXJ0IHRoZSB1c2VyXG4gICAgICAgIGlmIChjdXJyZW50Q29ubmVjdGlvblR5cGUgPT09ICdub25lJyAmJiAoIW9wdHMgfHwgb3B0cy5zaG93VG9hc3QgIT09IGZhbHNlKSkge1xuICAgICAgICAgIHRoaXMuc2hvd1RvYXN0KHttZXNzYWdlOiAnTkVUV09SSy5JTkZPLk9GRkxJTkVfSEVMUCcsIHR5cGU6ICd3YXJuaW5nJ30pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgc2hvd1NlbGVjdFBlZXJNb2RhbChvcHRzPzogUGFydGlhbDxJU2VsZWN0UGVlck1vZGFsT3B0aW9ucz4pOiBQcm9taXNlPFBlZXIgfCB1bmRlZmluZWQ+IHtcblxuICAgIG9wdHMgPSBvcHRzIHx8IHt9O1xuXG4gICAgY29uc3QgJG9uUmVmcmVzaCA9IG5ldyBFdmVudEVtaXR0ZXI8RXZlbnQ+KCk7XG4gICAgY29uc3QgcGVlcnMkID0gJG9uUmVmcmVzaC5waXBlKFxuICAgICAgbWVyZ2VNYXAoKF8pID0+IHRoaXMuZ2V0RGVmYXVsdFBlZXJzKCkpLFxuICAgICAgbWFwKHBlZXJzID0+IHBlZXJzIHx8IFtdKVxuICAgICk7XG5cbiAgICBjb25zdCBtb2RhbCA9IGF3YWl0IHRoaXMubW9kYWxDdHJsLmNyZWF0ZSh7XG4gICAgICBjb21wb25lbnQ6IFNlbGVjdFBlZXJNb2RhbCxcbiAgICAgIGNvbXBvbmVudFByb3BzOiA8SVNlbGVjdFBlZXJNb2RhbE9wdGlvbnM+e1xuICAgICAgICBvblJlZnJlc2g6ICRvblJlZnJlc2gsXG4gICAgICAgIHBlZXJzOiBwZWVycyQsXG4gICAgICAgIC4uLm9wdHNcbiAgICAgIH0sXG4gICAgICBrZXlib2FyZENsb3NlOiB0cnVlLFxuICAgICAgc2hvd0JhY2tkcm9wOiB0cnVlXG4gICAgfSk7XG4gICAgYXdhaXQgbW9kYWwucHJlc2VudCgpO1xuICAgICRvblJlZnJlc2guZW1pdCgpO1xuXG4gICAgY29uc3QgeyBkYXRhIH0gPSBhd2FpdCBtb2RhbC5vbldpbGxEaXNtaXNzKCk7XG4gICAgJG9uUmVmcmVzaC5jb21wbGV0ZSgpO1xuXG4gICAgcmV0dXJuIGRhdGEgJiYgKGRhdGEgYXMgUGVlcikgfHwgdW5kZWZpbmVkO1xuICB9XG5cbiAgYXN5bmMgY2xlYXJDYWNoZShvcHRzPzogeyBlbWl0RXZlbnQ/OiBib29sZWFuIH0pOiBQcm9taXNlPHZvaWQ+IHtcblxuICAgIGNvbnN0IG5vdyA9IHRoaXMuX2RlYnVnICYmIERhdGUubm93KCk7XG5cbiAgICBjb25zb2xlLmluZm8oJ1tuZXR3b3JrXSBDbGVhcmluZyBhbGwgY2FjaGVzLi4uJyk7XG4gICAgcmV0dXJuIHRoaXMuY2FjaGUuY2xlYXJBbGwoKVxuICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICAvLyBFbWl0IGV2ZW50XG4gICAgICAgIGlmICghb3B0cyB8fCBvcHRzLmVtaXRFdmVudCAhPT0gZmFsc2UgJiYgdGhpcy5vblJlc2V0TmV0d29ya0NhY2hlLm9ic2VydmVycy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgdGhpcy5vblJlc2V0TmV0d29ya0NhY2hlLmVtaXQoKTtcblxuICAgICAgICAgIC8vIFdhaXQgb2JzZXJ2ZXJzIGNsZWFuIHRoZWlyIGNhY2hlcywgaWYgbmVlZFxuICAgICAgICAgIHJldHVybiBzbGVlcCg1MDApO1xuICAgICAgICB9XG4gICAgICB9KVxuICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICBpZiAodGhpcy5fZGVidWcpIGNvbnNvbGUuZGVidWcoYFtuZXR3b3JrXSBBbGwgY2FjaGUgY2xlYXJlZCwgaW4gJHtEYXRlLm5vdygpIC0gbm93fW1zYCk7XG4gICAgICB9KTtcbiAgfVxuXG4gIC8qIC0tIHByb3RlY3RlZCBmdW5jdGlvbnMgLS0gKi9cblxuICBwcm90ZWN0ZWQgYXN5bmMgbmdPblN0YXJ0KHBlZXI/OiBQZWVyKTogUHJvbWlzZTxQZWVyPiB7XG5cbiAgICBjb25zb2xlLmluZm8oJ1tuZXR3b3JrXSBTdGFydGluZyBuZXR3b3JrLi4uJyk7XG5cbiAgICAvLyBSZXN0b3JpbmcgbG9jYWwgc2V0dGluZ3NcbiAgICBwZWVyID0gcGVlciB8fCAoYXdhaXQgdGhpcy5yZXN0b3JlTG9jYWxseSgpKTtcblxuICAgIC8vIE1ha2Ugc3VyZSB0byBoaWRlIHRoZSBzcGxhc2hzY3JlZW4sIGJlZm9yZSBvcGVuIHRoZSBtb2RhbFxuICAgIGlmICghcGVlcikgYXdhaXQgU3BsYXNoU2NyZWVuLmhpZGUoKTtcblxuICAgIC8vIE5vIHBlZXIgaW4gc2V0dGluZ3M6IGFzayB1c2VyIHRvIGNob29zZVxuICAgIHdoaWxlICghcGVlcikge1xuICAgICAgY29uc29sZS5kZWJ1ZygnW25ldHdvcmtdIE5vIHBlZXIgZGVmaW5lZC4gQXNraW5nIHVzZXIgdG8gY2hvb3NlIGEgcGVlci4nKTtcbiAgICAgIHBlZXIgPSBhd2FpdCB0aGlzLnNob3dTZWxlY3RQZWVyTW9kYWwoe2FsbG93U2VsZWN0RG93blBlZXI6IGZhbHNlfSk7XG4gICAgfVxuXG4gICAgY29uc29sZS5pbmZvKGBbbmV0d29ya10gU3RhcnRpbmcgc2VydmljZSBbT0tdIHtwZWVyOiAnJHtwZWVyLnVybH0nLCBvbmxpbmU6ICR7dGhpcy5vbmxpbmV9fWApO1xuXG4gICAgcmV0dXJuIHBlZXI7XG4gIH1cblxuICBwcm90ZWN0ZWQgYXN5bmMgbmdPbkFmdGVyU3RhcnQocGVlcjogUGVlcikge1xuXG4gICAgLy8gV2FpdCBzZXR0aW5ncyBzdGFydHMsIHRoZW4gc2F2ZSBwZWVyIGluIHNldHRpbmdzXG4gICAgYXdhaXQgdGhpcy5zZXR0aW5ncy5hcHBseSh7cGVlclVybDogcGVlci51cmx9KTtcblxuICAgIHRoaXMub25EZXZpY2VDb25uZWN0aW9uQ2hhbmdlZCh0aGlzLm5ldHdvcms/LnR5cGUgfHwgJ3Vua25vd24nKTtcblxuICAgIC8vIFN0YXJ0IHRoZSByZWZyZXNoIHRpbWVyXG4gICAgdGhpcy5zdGFydFJlZnJlc2hUaW1lcigpO1xuXG4gICAgLy8gTGlzdGVuIGZvciBkZXZpY2UgbmV0d29yayBjaGFuZ2VzXG4gICAgaWYgKHRoaXMubmV0d29yaykge1xuICAgICAgdGhpcy5yZWdpc3RlclN1YnNjcmlwdGlvbih0aGlzLm5ldHdvcmsub25EaXNjb25uZWN0KCkuc3Vic2NyaWJlKCgpID0+IHRoaXMub25EZXZpY2VDb25uZWN0aW9uQ2hhbmdlZCgnbm9uZScpKSk7XG4gICAgICB0aGlzLnJlZ2lzdGVyU3Vic2NyaXB0aW9uKHRoaXMubmV0d29yay5vbkNvbm5lY3QoKS5zdWJzY3JpYmUoKCkgPT4gdGhpcy5vbkRldmljZUNvbm5lY3Rpb25DaGFuZ2VkKHRoaXMubmV0d29yay50eXBlKSkpO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBuZ09uU3RvcCgpIHtcbiAgICAvLyBTdG9wIHRpbWVyLCBpZiBjYW5ub3QgcmVmcmVzaCBhbnltb3JlXG4gICAgaWYgKHRoaXMuX3RpbWVyUmVmcmVzaENvbmRpdGlvbigpID09PSBmYWxzZSkge1xuICAgICAgdGhpcy5zdG9wUmVmcmVzaFRpbWVyKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFRyeSB0byByZXN0b3JlIHBlZXIgZnJvbSB0aGUgbG9jYWwgc3RvcmFnZVxuICAgKi9cbiAgcHJvdGVjdGVkIGFzeW5jIHJlc3RvcmVMb2NhbGx5KCk6IFByb21pc2U8UGVlciB8IHVuZGVmaW5lZD4ge1xuXG4gICAgLy8gUmVzdG9yZSBmcm9tIHN0b3JhZ2VcbiAgICBsZXQgc2V0dGluZ3MgPSBhd2FpdCB0aGlzLnN0b3JhZ2UuZ2V0KFNFVFRJTkdTX1NUT1JBR0VfS0VZKTtcbiAgICBzZXR0aW5ncyA9ICh0eXBlb2Ygc2V0dGluZ3MgPT09ICdzdHJpbmcnKSA/IEpTT04ucGFyc2Uoc2V0dGluZ3MpIDogc2V0dGluZ3M7XG4gICAgaWYgKHNldHRpbmdzICYmIHNldHRpbmdzLnBlZXJVcmwpIHtcbiAgICAgIGNvbnNvbGUuZGVidWcoYFtuZXR3b3JrXSBVc2UgcGVlciB7JHtzZXR0aW5ncy5wZWVyVXJsfX0gKGZvdW5kIGluIHRoZSBsb2NhbCBzdG9yYWdlKWApO1xuICAgICAgcmV0dXJuIFBlZXIucGFyc2VVcmwoc2V0dGluZ3MucGVlclVybCk7XG4gICAgfVxuXG4gICAgLy8gRWxzZSwgdXNlIGRlZmF1bHQgcGVlciBpbiBlbnYsIGlmIGV4aXN0c1xuICAgIGlmICh0aGlzLmVudmlyb25tZW50LmRlZmF1bHRQZWVyKSB7XG4gICAgICByZXR1cm4gUGVlci5mcm9tT2JqZWN0KHRoaXMuZW52aXJvbm1lbnQuZGVmYXVsdFBlZXIpO1xuICAgIH1cblxuICAgIC8vIEVsc2UsIGlmIEFwcCBpcyBob3N0ZWQsIHRyeSB0aGUgd2ViIHNpdGUgYXMgYSBwZWVyXG4gICAgY29uc3QgbG9jYXRpb24gPSB0aGlzLl9kb2N1bWVudCAmJiB0aGlzLl9kb2N1bWVudC5sb2NhdGlvbjtcbiAgICBpZiAobG9jYXRpb24gJiYgbG9jYXRpb24ucHJvdG9jb2wgJiYgbG9jYXRpb24ucHJvdG9jb2wuc3RhcnRzV2l0aCgnaHR0cCcpKSB7XG4gICAgICBjb25zdCBob3N0bmFtZSA9IHRoaXMuX2RvY3VtZW50LmxvY2F0aW9uLmhvc3Q7XG4gICAgICBjb25zdCBkZXRlY3RlZFBlZXIgPSBQZWVyLnBhcnNlVXJsKGAke3RoaXMuX2RvY3VtZW50LmxvY2F0aW9uLnByb3RvY29sfSR7aG9zdG5hbWV9JHt0aGlzLmVudmlyb25tZW50LmJhc2VVcmx9YCk7XG5cbiAgICAgIGlmIChhd2FpdCB0aGlzLmNoZWNrUGVlckFsaXZlKGRldGVjdGVkUGVlcikpIHtcbiAgICAgICAgcmV0dXJuIGRldGVjdGVkUGVlcjtcbiAgICAgIH1cblxuICAgICAgLy8gUGVlciBub3QgYWxpdmUsIGJ1dCBzaG91bGQgYmUgYXQgdGhlIHNhbWUgVVJMLCByZXRyeWluZyBlYWNoIDFzXG4gICAgICBpZiAodGhpcy5lbnZpcm9ubWVudC5zYW1lVXJsUGVlcikge1xuICAgICAgICByZXR1cm4gYXdhaXQgdGltZXIoMTAwMCwgMTAwMClcbiAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLnN0b3BTdWJqZWN0KSxcbiAgICAgICAgICAgIHRhcCgoKSA9PiBjb25zb2xlLndhcm4oYFtuZXR3b3JrLXNlcnZpY2VdIFdhaXRpbmcgcGVlciBiZSBiZSBhbGl2ZSwgYXQgeyR7ZGV0ZWN0ZWRQZWVyLnVybH19IC4uLmApKSxcbiAgICAgICAgICAgIG1lcmdlTWFwKCgpID0+IHRoaXMuY2hlY2tQZWVyQWxpdmUoZGV0ZWN0ZWRQZWVyKSksXG4gICAgICAgICAgICBmaWx0ZXIoYWxpdmUgPT4gISFhbGl2ZSksXG4gICAgICAgICAgICBtYXAoKCkgPT4gZGV0ZWN0ZWRQZWVyKSxcbiAgICAgICAgICAgIGZpcnN0KClcbiAgICAgICAgICApLnRvUHJvbWlzZSgpO1xuXG4gICAgICAgIC8vIFN0b3BcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdTZXJ2aWNlIGhhdmUgYmVlbiBzdG9wcGVkJyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdG9wIHRvIG5ldHdvcmsgc3RhdGVcbiAgICpcbiAgICogQHByb3RlY3RlZFxuICAgKi9cbiAgcHJvdGVjdGVkIHN0b3BSZWZyZXNoVGltZXIoKSB7XG4gICAgaWYgKHRoaXMuX3RpbWVyU3Vic2NyaXB0aW9uKSB7XG4gICAgICB0aGlzLl90aW1lclN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgdGhpcy5fdGltZXJTdWJzY3JpcHRpb24gPSB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlZnJlc2ggdGhlIG5ldHdvcmsgc3RhdGVcbiAgICpcbiAgICogQHByb3RlY3RlZFxuICAgKi9cbiAgcHJvdGVjdGVkIHN0YXJ0UmVmcmVzaFRpbWVyKCl7XG4gICAgaWYgKHRoaXMuX3RpbWVyU3Vic2NyaXB0aW9uKSByZXR1cm47IC8vIEFscmVhZHkgcnVubmluZzogc2tpcFxuXG4gICAgY29uc29sZS5pbmZvKGBbbmV0d29ya10gU3RhcnRpbmcgcmVmcmVzaCB0aW1lciwgZXZlcnkgJHt0aGlzLl90aW1lclJlZnJlc2hQZXJpb2R9bXMuLi5gKTtcblxuICAgIGxldCBsYXN0SW5mbzogTm9kZUluZm87XG4gICAgdGhpcy5fdGltZXJTdWJzY3JpcHRpb24gPSB0aW1lcih0aGlzLl90aW1lclJlZnJlc2hQZXJpb2QsIHRoaXMuX3RpbWVyUmVmcmVzaFBlcmlvZClcbiAgICAgIC5waXBlKFxuICAgICAgICAvLyBTa2lwIHNvbWUgdGltZXIgZXZlbnQgKHNlZSBjb25zdHJ1Y3RvcilcbiAgICAgICAgZmlsdGVyKHRoaXMuX3RpbWVyUmVmcmVzaENvbmRpdGlvbiksXG5cbiAgICAgICAgLy8gQ2hlY2tpbiBpZiBwZWVyIGFsaXZlXG4gICAgICAgIHRhcCgoKSA9PiAgY29uc29sZS5kZWJ1ZygnW25ldHdvcmtdIENoZWNraW5nIGNvbm5lY3Rpb24gdG8gcG9kLi4uJykpLFxuICAgICAgICBtZXJnZU1hcCgoKSA9PiB0aGlzLmNoZWNrUGVlckFsaXZlKHRoaXMucGVlcikpLFxuXG4gICAgICAgIC8vIEZpbHRlciB0byBrZWVwIG9ubHkgY2hhbmdlc1xuICAgICAgICBmaWx0ZXIoaW5mbyA9PiAhIWluZm8gIT09ICEhbGFzdEluZm8pLFxuICAgICAgICB0YXAoaW5mbyA9PiBsYXN0SW5mbyA9IGluZm8pLFxuXG4gICAgICAgIC8vIENoZWNrIGNvbXBhdGliaWxpdHlcbiAgICAgICAgbWVyZ2VNYXAoKGluZm8pID0+IHRoaXMuY2hlY2tQZWVyQ29tcGF0aWJsZShpbmZvLCB7c2hvd1RvYXN0OiB0cnVlfSkpLFxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZShhbGl2ZSA9PiB7XG4gICAgICAgICAgaWYgKGFsaXZlICYmIHRoaXMub2ZmbGluZSkge1xuICAgICAgICAgICAgdGhpcy5zZXRGb3JjZU9mZmxpbmUoZmFsc2UpO1xuXG4gICAgICAgICAgICAvLyBSZXN0YXJ0IHRoZSBzZXJ2aWNlICh0byBmb3JjZSByZSBhdXRoKVxuICAgICAgICAgICAgdGhpcy5yZXN0YXJ0KCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGVsc2UgaWYgKCFhbGl2ZSAmJiB0aGlzLm9ubGluZSl7XG4gICAgICAgICAgICB0aGlzLnNldEZvcmNlT2ZmbGluZSh0cnVlKTtcblxuICAgICAgICAgICAgLy8gU3RvcCB0aGUgc2VydmljZVxuICAgICAgICAgICAgdGhpcy5zdG9wKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgIHRoaXMuX3RpbWVyU3Vic2NyaXB0aW9uLmFkZCgoKSA9PiBjb25zb2xlLmRlYnVnKCdbbmV0d29ya10gUmVmcmVzaCB0aW1lciBzdG9wcGVkJykpO1xuICB9XG5cblxuICBwcm90ZWN0ZWQgYXN5bmMgZ2V0VGV4dChwYXRoOiBzdHJpbmcsIG9wdHM/OiB7XG4gICAgaGVhZGVycz86IEh0dHBIZWFkZXJzIHwge1xuICAgICAgW2hlYWRlcjogc3RyaW5nXTogc3RyaW5nIHwgc3RyaW5nW107XG4gICAgfTtcbiAgICByZXNwb25zZVR5cGU/OiAndGV4dCc7XG4gICAgbm9jYWNoZT86IGJvb2xlYW47XG4gIH0pOiBQcm9taXNlPHN0cmluZz4ge1xuXG4gICAgcmV0dXJuIEh0dHBVdGlscy5nZXRUZXh0KHRoaXMuaHR0cCwgdGhpcy5nZXRVcmkocGF0aCksIG9wdHMpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldDxUPihwYXRoOiBzdHJpbmcsIG9wdHM/OiB7XG4gICAgaGVhZGVycz86IEh0dHBIZWFkZXJzIHwge1xuICAgICAgW2hlYWRlcjogc3RyaW5nXTogc3RyaW5nIHwgc3RyaW5nW107XG4gICAgfTtcbiAgICByZXNwb25zZVR5cGU/OiAnanNvbic7XG4gICAgbm9jYWNoZT86IGJvb2xlYW47XG4gIH0pOiBQcm9taXNlPFQ+IHtcblxuICAgIHJldHVybiBIdHRwVXRpbHMuZ2V0SnNvbjxUPih0aGlzLmh0dHAsIHRoaXMuZ2V0VXJpKHBhdGgpLCBvcHRzKTtcbiAgfVxuXG4gIC8qIC0tIFByb3RlY3RlZCBtZXRob2RzIC0tICovXG5cbiAgcHJvdGVjdGVkIGdldFVyaShwYXRoOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGxldCB1cmkgPSBwYXRoO1xuXG4gICAgLy8gSWYgcGF0aCBpcyBub3QgYW4gVVJJOiBwcmVwZW5kIHdpdGggcGVlciBVUkxcbiAgICBpZiAoIXVyaS5zdGFydHNXaXRoKCdodHRwOi8vJykgJiYgIXVyaS5zdGFydHNXaXRoKCdodHRwczovLycpKSB7XG4gICAgICBsZXQgcGVlclVybCA9ICh0aGlzLnBlZXIgJiYgdGhpcy5wZWVyLnVybCk7XG5cbiAgICAgIC8vIFJlbW92ZSB0cmFpbGluZyBzbGFzaFxuICAgICAgaWYgKHBlZXJVcmwuZW5kc1dpdGgoJy8nKSkge1xuICAgICAgICBwZWVyVXJsID0gcGVlclVybC5zdWJzdHIoMCwgcGVlclVybC5sZW5ndGggLSAxICk7XG4gICAgICB9XG5cbiAgICAgIC8vIEFkZCBmaXJzdCBwYXRoXG4gICAgICBpZiAoIXBhdGguc3RhcnRzV2l0aCgnLycpKSB7XG4gICAgICAgIHBhdGggPSAnLycgKyBwYXRoO1xuICAgICAgfVxuXG4gICAgICAvLyBDcmVhdGUgdGhlIFVSSTogY29uY2F0IHBlZXIgVVJMIGFuZCBwYXRoXG4gICAgICB1cmkgPSBwZWVyVXJsICsgcGF0aDtcbiAgICB9XG4gICAgcmV0dXJuIHVyaTtcbiAgfVxuICBwcm90ZWN0ZWQgb25EZXZpY2VDb25uZWN0aW9uQ2hhbmdlZChjb25uZWN0aW9uVHlwZT86IHN0cmluZykge1xuICAgIGNvbm5lY3Rpb25UeXBlID0gZ2V0Q29ubmVjdGlvblR5cGUoY29ubmVjdGlvblR5cGUpO1xuICAgIGlmIChjb25uZWN0aW9uVHlwZSAhPT0gdGhpcy5fZGV2aWNlQ29ubmVjdGlvblR5cGUpIHtcbiAgICAgIHRoaXMuX2RldmljZUNvbm5lY3Rpb25UeXBlID0gY29ubmVjdGlvblR5cGUgYXMgQ29ubmVjdGlvblR5cGU7XG5cbiAgICAgIC8vIElmIE5PVCAgYWxyZWFkeSBmb3JjZWQgYXMgb2ZmbGluZSwgZW1pdCBldmVudFxuICAgICAgaWYgKCF0aGlzLl9mb3JjZU9mZmxpbmUpIHtcbiAgICAgICAgY29uc29sZS5pbmZvKGBbbmV0d29ya10gQ29ubmVjdGlvbiBjaGFuZ2VkIHRvIHske3RoaXMuX2RldmljZUNvbm5lY3Rpb25UeXBlfX1gKTtcbiAgICAgICAgdGhpcy5vbk5ldHdvcmtTdGF0dXNDaGFuZ2VzLm5leHQodGhpcy5fZGV2aWNlQ29ubmVjdGlvblR5cGUpO1xuXG4gICAgICAgIC8vIENoYW5nZSB0byBvZmZsaW5lXG4gICAgICAgIGlmICh0aGlzLl9kZXZpY2VDb25uZWN0aW9uVHlwZSA9PT0gJ25vbmUnKSB7XG4gICAgICAgICAgaWYgKHRoaXMuX21vYmlsZSkge1xuICAgICAgICAgICAgLy8gRm9yY2Ugb2ZmbGluZSBtb2RlXG4gICAgICAgICAgICB0aGlzLl9mb3JjZU9mZmxpbmUgPSB0cnVlO1xuXG4gICAgICAgICAgICAvLyBBbGVydCB0aGUgdXNlclxuICAgICAgICAgICAgdGhpcy5zaG93VG9hc3Qoe21lc3NhZ2U6ICdORVRXT1JLLklORk8uT0ZGTElORV9IRUxQJywgdHlwZTogJ3dhcm5pbmcnfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgLy8gQWxlcnQgdGhlIHVzZXJcbiAgICAgICAgICAgIHRoaXMuc2hvd1RvYXN0KHttZXNzYWdlOiAnTkVUV09SSy5JTkZPLk9GRkxJTkUnLCB0eXBlOiAnd2FybmluZyd9KTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBTdG9wIHRoZSBuZXR3b3JrIHNlcnZpY2VcbiAgICAgICAgICB0aGlzLnN0b3AoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgZGVmYXVsdCBwZWVycywgZnJvbSBlbnZpcm9ubWVudFxuICAgKi9cbiAgcHJvdGVjdGVkIGFzeW5jIGdldERlZmF1bHRQZWVycygpOiBQcm9taXNlPFBlZXJbXT4ge1xuICAgIGNvbnN0IHBlZXJzID0gKHRoaXMuZW52aXJvbm1lbnQuZGVmYXVsdFBlZXJzIHx8IFtdKS5tYXAoUGVlci5mcm9tT2JqZWN0KTtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHBlZXJzKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBzaG93VG9hc3Q8VCA9IGFueT4ob3B0czogU2hvd1RvYXN0T3B0aW9ucyk6IFByb21pc2U8T3ZlcmxheUV2ZW50RGV0YWlsPFQ+PiB7XG4gICAgcmV0dXJuIFRvYXN0cy5zaG93KHRoaXMudG9hc3RDb250cm9sbGVyLCB0aGlzLnRyYW5zbGF0ZSwgb3B0cyk7XG4gIH1cblxuICBwcm90ZWN0ZWQgYWRkTGlzdGVuZXI8VD0gYW55PihuYW1lOiBOZXR3b3JrRXZlbnRUeXBlLCBjYWxsYmFjazogKGRhdGE/OiBUKSA9PiBQcm9taXNlPHZvaWQ+KTogU3Vic2NyaXB0aW9uIHtcbiAgICB0aGlzLl9saXN0ZW5lcnNbbmFtZV0gPSB0aGlzLl9saXN0ZW5lcnNbbmFtZV0gfHwgW107XG4gICAgdGhpcy5fbGlzdGVuZXJzW25hbWVdLnB1c2goY2FsbGJhY2spO1xuXG4gICAgLy8gV2hlbiB1bnN1YnNjcmliZSwgcmVtb3ZlIGZyb20gdGhlIGxpc3RlbmVyXG4gICAgcmV0dXJuIG5ldyBTdWJzY3JpcHRpb24oKCkgPT4ge1xuICAgICAgY29uc3QgaW5kZXggPSB0aGlzLl9saXN0ZW5lcnNbbmFtZV0uaW5kZXhPZihjYWxsYmFjayk7XG4gICAgICBpZiAoaW5kZXggIT09IC0xKSB7XG4gICAgICAgIHRoaXMuX2xpc3RlbmVyc1tuYW1lXS5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFzeW5jIGVtaXQ8VD0gYW55PihuYW1lOiBOZXR3b3JrRXZlbnRUeXBlLCBkYXRhPzogVCkge1xuICAgIGNvbnN0IGhvb2tzID0gdGhpcy5fbGlzdGVuZXJzW25hbWVdO1xuICAgIGlmIChpc05vdEVtcHR5QXJyYXkoaG9va3MpKSB7XG4gICAgICBjb25zb2xlLmluZm8oYFtuZXR3b3JrLXNlcnZpY2VdIFRyaWdnZXIgJHtuYW1lfSBob29rOiBFeGVjdXRpbmcgJHtob29rcy5sZW5ndGh9IGNhbGxiYWNrcy4uLmApO1xuXG4gICAgICByZXR1cm4gUHJvbWlzZS5hbGwoaG9va3MubWFwKGNhbGxiYWNrID0+IHtcbiAgICAgICAgY29uc3QgcHJvbWlzZSA9IGNhbGxiYWNrKGRhdGEpO1xuICAgICAgICBpZiAoIXByb21pc2UpIHJldHVybjtcbiAgICAgICAgcmV0dXJuIHByb21pc2UuY2F0Y2goZXJyID0+IGNvbnNvbGUuZXJyb3IoJ0Vycm9yIHdoaWxlIGV4ZWN1dGluZyBob29rICcgKyBuYW1lLCBlcnIpKTtcbiAgICAgIH0pKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
@@ -45,8 +45,8 @@ export class HttpUtils {
45
45
  else {
46
46
  console.error(`[network] Error on get request ${uri}: ${err && err.statusText} - ${JSON.stringify(err)}`);
47
47
  }
48
- throw { code: err.status, message: 'ERROR.UNKNOWN_NETWORK_ERROR' };
48
+ throw err;
49
49
  }
50
50
  }
51
51
  }
52
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHR0cC51dGlscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvc2hhcmVkL2h0dHAvaHR0cC51dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWEsV0FBVyxFQUFhLE1BQU0sc0JBQXNCLENBQUM7QUFFekUsTUFBTSxPQUFPLFNBQVM7SUFDcEIsTUFBTSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBZ0IsRUFDaEIsR0FBVyxFQUNYLElBV0k7UUFFdkIsY0FBYztRQUNkLElBQUksR0FBRyxJQUFJLElBQUksRUFBQyxZQUFZLEVBQUUsTUFBTSxFQUFDLENBQUM7UUFFdEMsaUJBQWlCO1FBQ2pCLElBQUksSUFBSSxDQUFDLE9BQU8sS0FBSyxJQUFJLEVBQUU7WUFDekIsSUFBSSxDQUFDLE9BQU8sR0FBRyxDQUFDLElBQUksQ0FBQyxPQUFPLFlBQVksV0FBVyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLFdBQVcsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztZQUNwRyxJQUFJLENBQUMsT0FBTztpQkFDVCxNQUFNLENBQUMsZUFBZSxFQUFFLFVBQVUsQ0FBQztpQkFDbkMsTUFBTSxDQUFDLFFBQVEsRUFBRSxVQUFVLENBQUMsQ0FBQztTQUNqQztRQUVELHNCQUFzQjtRQUN0QixJQUFJO1lBQ0YsT0FBTyxDQUFDLE1BQU0sSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsRUFBQyxHQUFHLElBQUksRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFDLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDO1NBQzNFO1FBQ0QsT0FBTyxHQUFHLEVBQUU7WUFDVixJQUFJLEdBQUcsSUFBSSxHQUFHLENBQUMsT0FBTyxFQUFFO2dCQUN0QixPQUFPLENBQUMsS0FBSyxDQUFDLGtDQUFrQyxHQUFHLEtBQUssR0FBRyxDQUFDLE9BQU8sRUFBRSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQzthQUM3RjtpQkFDSTtnQkFDSCxPQUFPLENBQUMsS0FBSyxDQUFDLGtDQUFrQyxHQUFHLEtBQUssR0FBRyxJQUFJLEdBQUcsQ0FBQyxVQUFVLE1BQU0sSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7YUFDM0c7WUFDRCxNQUFNLEVBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxNQUFNLEVBQUUsT0FBTyxFQUFFLDZCQUE2QixFQUFDLENBQUM7U0FDbEU7SUFDSCxDQUFDO0lBRUQsTUFBTSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUksSUFBZ0IsRUFDaEIsR0FBVyxFQUNYLElBV0c7UUFFekIsY0FBYztRQUNkLElBQUksR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDO1FBRWxCLGlCQUFpQjtRQUNqQixJQUFJLElBQUksQ0FBQyxPQUFPLEtBQUssSUFBSSxFQUFFO1lBQ3pCLElBQUksQ0FBQyxPQUFPLEdBQUcsQ0FBQyxJQUFJLENBQUMsT0FBTyxZQUFZLFdBQVcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxXQUFXLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7WUFDcEcsSUFBSSxDQUFDLE9BQU87aUJBQ1QsTUFBTSxDQUFDLGVBQWUsRUFBRSxVQUFVLENBQUM7aUJBQ25DLE1BQU0sQ0FBQyxRQUFRLEVBQUUsVUFBVSxDQUFDLENBQUM7U0FDakM7UUFFRCxzQkFBc0I7UUFDdEIsSUFBSTtZQUNGLE9BQU8sQ0FBQyxNQUFNLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLEVBQUMsR0FBRyxJQUFJLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBQyxDQUFDLENBQUMsU0FBUyxFQUFFLENBQU0sQ0FBQztTQUNoRjtRQUNELE9BQU8sR0FBRyxFQUFFO1lBQ1YsSUFBSSxHQUFHLElBQUksR0FBRyxDQUFDLE9BQU8sRUFBRTtnQkFDdEIsT0FBTyxDQUFDLEtBQUssQ0FBQyxrQ0FBa0MsR0FBRyxLQUFLLEdBQUcsQ0FBQyxPQUFPLEVBQUUsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7YUFDN0Y7aUJBQ0k7Z0JBQ0gsT0FBTyxDQUFDLEtBQUssQ0FBQyxrQ0FBa0MsR0FBRyxLQUFLLEdBQUcsSUFBSSxHQUFHLENBQUMsVUFBVSxNQUFNLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO2FBQzNHO1lBQ0QsTUFBTSxFQUFDLElBQUksRUFBRSxHQUFHLENBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSw2QkFBNkIsRUFBQyxDQUFDO1NBQ2xFO0lBQ0gsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtIdHRwQ2xpZW50LCBIdHRwSGVhZGVycywgSHR0cFBhcmFtc30gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuXG5leHBvcnQgY2xhc3MgSHR0cFV0aWxzIHtcbiAgc3RhdGljIGFzeW5jIGdldFRleHQoaHR0cDogSHR0cENsaWVudCxcbiAgICAgICAgICAgICAgICAgICAgICAgdXJpOiBzdHJpbmcsXG4gICAgICAgICAgICAgICAgICAgICAgIG9wdHM/OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9jYWNoZT86IGJvb2xlYW47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVycz86IEh0dHBIZWFkZXJzIHwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2hlYWRlcjogc3RyaW5nXTogc3RyaW5nIHwgc3RyaW5nW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXM/OiBIdHRwUGFyYW1zIHwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3BhcmFtOiBzdHJpbmddOiBzdHJpbmcgfCBzdHJpbmdbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcG9ydFByb2dyZXNzPzogYm9vbGVhbjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZVR5cGU/OiAndGV4dCc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2l0aENyZWRlbnRpYWxzPzogYm9vbGVhbjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfSk6IFByb21pc2U8c3RyaW5nPiB7XG5cbiAgICAvLyBBZGQgaGVhZGVyc1xuICAgIG9wdHMgPSBvcHRzIHx8IHtyZXNwb25zZVR5cGU6ICd0ZXh0J307XG5cbiAgICAvLyBGb3JjZSBubyBjYWNoZVxuICAgIGlmIChvcHRzLm5vY2FjaGUgPT09IHRydWUpIHtcbiAgICAgIG9wdHMuaGVhZGVycyA9IChvcHRzLmhlYWRlcnMgaW5zdGFuY2VvZiBIdHRwSGVhZGVycyA/IG9wdHMuaGVhZGVycyA6IG5ldyBIdHRwSGVhZGVycyhvcHRzLmhlYWRlcnMpKTtcbiAgICAgIG9wdHMuaGVhZGVyc1xuICAgICAgICAuYXBwZW5kKCdDYWNoZS1Db250cm9sJywgJ25vLWNhY2hlJylcbiAgICAgICAgLmFwcGVuZCgnUHJhZ21hJywgJ25vLWNhY2hlJyk7XG4gICAgfVxuXG4gICAgLy8gVXNlIHdlYiBodHRwIGNsaWVudFxuICAgIHRyeSB7XG4gICAgICByZXR1cm4gKGF3YWl0IGh0dHAuZ2V0KHVyaSwgey4uLm9wdHMsIHJlc3BvbnNlVHlwZTogJ3RleHQnfSkudG9Qcm9taXNlKCkpO1xuICAgIH1cbiAgICBjYXRjaCAoZXJyKSB7XG4gICAgICBpZiAoZXJyICYmIGVyci5tZXNzYWdlKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoYFtuZXR3b3JrXSBFcnJvciBvbiBnZXQgcmVxdWVzdCAke3VyaX06ICR7ZXJyLm1lc3NhZ2V9YCwgSlNPTi5zdHJpbmdpZnkoZXJyKSk7XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihgW25ldHdvcmtdIEVycm9yIG9uIGdldCByZXF1ZXN0ICR7dXJpfTogJHtlcnIgJiYgZXJyLnN0YXR1c1RleHR9IC0gJHtKU09OLnN0cmluZ2lmeShlcnIpfWApO1xuICAgICAgfVxuICAgICAgdGhyb3cge2NvZGU6IGVyci5zdGF0dXMsIG1lc3NhZ2U6ICdFUlJPUi5VTktOT1dOX05FVFdPUktfRVJST1InfTtcbiAgICB9XG4gIH1cblxuICBzdGF0aWMgYXN5bmMgZ2V0SnNvbjxUPihodHRwOiBIdHRwQ2xpZW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgICB1cmk6IHN0cmluZyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0cz86IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vY2FjaGU/OiBib29sZWFuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVycz86IEh0dHBIZWFkZXJzIHwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaGVhZGVyOiBzdHJpbmddOiBzdHJpbmcgfCBzdHJpbmdbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXM/OiBIdHRwUGFyYW1zIHwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcGFyYW06IHN0cmluZ106IHN0cmluZyB8IHN0cmluZ1tdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcG9ydFByb2dyZXNzPzogYm9vbGVhbjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlVHlwZT86ICdqc29uJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpdGhDcmVkZW50aWFscz86IGJvb2xlYW47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk6IFByb21pc2U8VD4ge1xuXG4gICAgLy8gQWRkIGhlYWRlcnNcbiAgICBvcHRzID0gb3B0cyB8fCB7fTtcblxuICAgIC8vIEZvcmNlIG5vIGNhY2hlXG4gICAgaWYgKG9wdHMubm9jYWNoZSA9PT0gdHJ1ZSkge1xuICAgICAgb3B0cy5oZWFkZXJzID0gKG9wdHMuaGVhZGVycyBpbnN0YW5jZW9mIEh0dHBIZWFkZXJzID8gb3B0cy5oZWFkZXJzIDogbmV3IEh0dHBIZWFkZXJzKG9wdHMuaGVhZGVycykpO1xuICAgICAgb3B0cy5oZWFkZXJzXG4gICAgICAgIC5hcHBlbmQoJ0NhY2hlLUNvbnRyb2wnLCAnbm8tY2FjaGUnKVxuICAgICAgICAuYXBwZW5kKCdQcmFnbWEnLCAnbm8tY2FjaGUnKTtcbiAgICB9XG5cbiAgICAvLyBVc2Ugd2ViIGh0dHAgY2xpZW50XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiAoYXdhaXQgaHR0cC5nZXQodXJpLCB7Li4ub3B0cywgcmVzcG9uc2VUeXBlOiAnanNvbid9KS50b1Byb21pc2UoKSkgYXMgVDtcbiAgICB9XG4gICAgY2F0Y2ggKGVycikge1xuICAgICAgaWYgKGVyciAmJiBlcnIubWVzc2FnZSkge1xuICAgICAgICBjb25zb2xlLmVycm9yKGBbbmV0d29ya10gRXJyb3Igb24gZ2V0IHJlcXVlc3QgJHt1cml9OiAke2Vyci5tZXNzYWdlfWAsIEpTT04uc3RyaW5naWZ5KGVycikpO1xuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoYFtuZXR3b3JrXSBFcnJvciBvbiBnZXQgcmVxdWVzdCAke3VyaX06ICR7ZXJyICYmIGVyci5zdGF0dXNUZXh0fSAtICR7SlNPTi5zdHJpbmdpZnkoZXJyKX1gKTtcbiAgICAgIH1cbiAgICAgIHRocm93IHtjb2RlOiBlcnIuc3RhdHVzLCBtZXNzYWdlOiAnRVJST1IuVU5LTk9XTl9ORVRXT1JLX0VSUk9SJ307XG4gICAgfVxuICB9XG59XG5cblxuXG4iXX0=
52
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHR0cC51dGlscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvc2hhcmVkL2h0dHAvaHR0cC51dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWEsV0FBVyxFQUFhLE1BQU0sc0JBQXNCLENBQUM7QUFFekUsTUFBTSxPQUFPLFNBQVM7SUFDcEIsTUFBTSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBZ0IsRUFDaEIsR0FBVyxFQUNYLElBV0k7UUFFdkIsY0FBYztRQUNkLElBQUksR0FBRyxJQUFJLElBQUksRUFBQyxZQUFZLEVBQUUsTUFBTSxFQUFDLENBQUM7UUFFdEMsaUJBQWlCO1FBQ2pCLElBQUksSUFBSSxDQUFDLE9BQU8sS0FBSyxJQUFJLEVBQUU7WUFDekIsSUFBSSxDQUFDLE9BQU8sR0FBRyxDQUFDLElBQUksQ0FBQyxPQUFPLFlBQVksV0FBVyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLFdBQVcsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztZQUNwRyxJQUFJLENBQUMsT0FBTztpQkFDVCxNQUFNLENBQUMsZUFBZSxFQUFFLFVBQVUsQ0FBQztpQkFDbkMsTUFBTSxDQUFDLFFBQVEsRUFBRSxVQUFVLENBQUMsQ0FBQztTQUNqQztRQUVELHNCQUFzQjtRQUN0QixJQUFJO1lBQ0YsT0FBTyxDQUFDLE1BQU0sSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsRUFBQyxHQUFHLElBQUksRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFDLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDO1NBQzNFO1FBQ0QsT0FBTyxHQUFHLEVBQUU7WUFDVixJQUFJLEdBQUcsSUFBSSxHQUFHLENBQUMsT0FBTyxFQUFFO2dCQUN0QixPQUFPLENBQUMsS0FBSyxDQUFDLGtDQUFrQyxHQUFHLEtBQUssR0FBRyxDQUFDLE9BQU8sRUFBRSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQzthQUM3RjtpQkFDSTtnQkFDSCxPQUFPLENBQUMsS0FBSyxDQUFDLGtDQUFrQyxHQUFHLEtBQUssR0FBRyxJQUFJLEdBQUcsQ0FBQyxVQUFVLE1BQU0sSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7YUFDM0c7WUFDRCxNQUFNLEVBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxNQUFNLEVBQUUsT0FBTyxFQUFFLDZCQUE2QixFQUFDLENBQUM7U0FDbEU7SUFDSCxDQUFDO0lBRUQsTUFBTSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUksSUFBZ0IsRUFDaEIsR0FBVyxFQUNYLElBV0c7UUFFekIsY0FBYztRQUNkLElBQUksR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDO1FBRWxCLGlCQUFpQjtRQUNqQixJQUFJLElBQUksQ0FBQyxPQUFPLEtBQUssSUFBSSxFQUFFO1lBQ3pCLElBQUksQ0FBQyxPQUFPLEdBQUcsQ0FBQyxJQUFJLENBQUMsT0FBTyxZQUFZLFdBQVcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxXQUFXLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7WUFDcEcsSUFBSSxDQUFDLE9BQU87aUJBQ1QsTUFBTSxDQUFDLGVBQWUsRUFBRSxVQUFVLENBQUM7aUJBQ25DLE1BQU0sQ0FBQyxRQUFRLEVBQUUsVUFBVSxDQUFDLENBQUM7U0FDakM7UUFFRCxzQkFBc0I7UUFDdEIsSUFBSTtZQUNGLE9BQU8sQ0FBQyxNQUFNLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLEVBQUMsR0FBRyxJQUFJLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBQyxDQUFDLENBQUMsU0FBUyxFQUFFLENBQU0sQ0FBQztTQUNoRjtRQUNELE9BQU8sR0FBRyxFQUFFO1lBQ1YsSUFBSSxHQUFHLElBQUksR0FBRyxDQUFDLE9BQU8sRUFBRTtnQkFDdEIsT0FBTyxDQUFDLEtBQUssQ0FBQyxrQ0FBa0MsR0FBRyxLQUFLLEdBQUcsQ0FBQyxPQUFPLEVBQUUsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7YUFDN0Y7aUJBQ0k7Z0JBQ0gsT0FBTyxDQUFDLEtBQUssQ0FBQyxrQ0FBa0MsR0FBRyxLQUFLLEdBQUcsSUFBSSxHQUFHLENBQUMsVUFBVSxNQUFNLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO2FBQzNHO1lBQ0QsTUFBTSxHQUFHLENBQUM7U0FDWDtJQUNILENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7SHR0cENsaWVudCwgSHR0cEhlYWRlcnMsIEh0dHBQYXJhbXN9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcblxuZXhwb3J0IGNsYXNzIEh0dHBVdGlscyB7XG4gIHN0YXRpYyBhc3luYyBnZXRUZXh0KGh0dHA6IEh0dHBDbGllbnQsXG4gICAgICAgICAgICAgICAgICAgICAgIHVyaTogc3RyaW5nLFxuICAgICAgICAgICAgICAgICAgICAgICBvcHRzPzoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vY2FjaGU/OiBib29sZWFuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcnM/OiBIdHRwSGVhZGVycyB8IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtoZWFkZXI6IHN0cmluZ106IHN0cmluZyB8IHN0cmluZ1tdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zPzogSHR0cFBhcmFtcyB8IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtwYXJhbTogc3RyaW5nXTogc3RyaW5nIHwgc3RyaW5nW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXBvcnRQcm9ncmVzcz86IGJvb2xlYW47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2VUeXBlPzogJ3RleHQnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpdGhDcmVkZW50aWFscz86IGJvb2xlYW47XG4gICAgICAgICAgICAgICAgICAgICAgICAgIH0pOiBQcm9taXNlPHN0cmluZz4ge1xuXG4gICAgLy8gQWRkIGhlYWRlcnNcbiAgICBvcHRzID0gb3B0cyB8fCB7cmVzcG9uc2VUeXBlOiAndGV4dCd9O1xuXG4gICAgLy8gRm9yY2Ugbm8gY2FjaGVcbiAgICBpZiAob3B0cy5ub2NhY2hlID09PSB0cnVlKSB7XG4gICAgICBvcHRzLmhlYWRlcnMgPSAob3B0cy5oZWFkZXJzIGluc3RhbmNlb2YgSHR0cEhlYWRlcnMgPyBvcHRzLmhlYWRlcnMgOiBuZXcgSHR0cEhlYWRlcnMob3B0cy5oZWFkZXJzKSk7XG4gICAgICBvcHRzLmhlYWRlcnNcbiAgICAgICAgLmFwcGVuZCgnQ2FjaGUtQ29udHJvbCcsICduby1jYWNoZScpXG4gICAgICAgIC5hcHBlbmQoJ1ByYWdtYScsICduby1jYWNoZScpO1xuICAgIH1cblxuICAgIC8vIFVzZSB3ZWIgaHR0cCBjbGllbnRcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIChhd2FpdCBodHRwLmdldCh1cmksIHsuLi5vcHRzLCByZXNwb25zZVR5cGU6ICd0ZXh0J30pLnRvUHJvbWlzZSgpKTtcbiAgICB9XG4gICAgY2F0Y2ggKGVycikge1xuICAgICAgaWYgKGVyciAmJiBlcnIubWVzc2FnZSkge1xuICAgICAgICBjb25zb2xlLmVycm9yKGBbbmV0d29ya10gRXJyb3Igb24gZ2V0IHJlcXVlc3QgJHt1cml9OiAke2Vyci5tZXNzYWdlfWAsIEpTT04uc3RyaW5naWZ5KGVycikpO1xuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoYFtuZXR3b3JrXSBFcnJvciBvbiBnZXQgcmVxdWVzdCAke3VyaX06ICR7ZXJyICYmIGVyci5zdGF0dXNUZXh0fSAtICR7SlNPTi5zdHJpbmdpZnkoZXJyKX1gKTtcbiAgICAgIH1cbiAgICAgIHRocm93IHtjb2RlOiBlcnIuc3RhdHVzLCBtZXNzYWdlOiAnRVJST1IuVU5LTk9XTl9ORVRXT1JLX0VSUk9SJ307XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIGFzeW5jIGdldEpzb248VD4oaHR0cDogSHR0cENsaWVudCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdXJpOiBzdHJpbmcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIG9wdHM/OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2NhY2hlPzogYm9vbGVhbjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcnM/OiBIdHRwSGVhZGVycyB8IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2hlYWRlcjogc3RyaW5nXTogc3RyaW5nIHwgc3RyaW5nW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zPzogSHR0cFBhcmFtcyB8IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3BhcmFtOiBzdHJpbmddOiBzdHJpbmcgfCBzdHJpbmdbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXBvcnRQcm9ncmVzcz86IGJvb2xlYW47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZVR5cGU/OiAnanNvbic7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aXRoQ3JlZGVudGlhbHM/OiBib29sZWFuO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOiBQcm9taXNlPFQ+IHtcblxuICAgIC8vIEFkZCBoZWFkZXJzXG4gICAgb3B0cyA9IG9wdHMgfHwge307XG5cbiAgICAvLyBGb3JjZSBubyBjYWNoZVxuICAgIGlmIChvcHRzLm5vY2FjaGUgPT09IHRydWUpIHtcbiAgICAgIG9wdHMuaGVhZGVycyA9IChvcHRzLmhlYWRlcnMgaW5zdGFuY2VvZiBIdHRwSGVhZGVycyA/IG9wdHMuaGVhZGVycyA6IG5ldyBIdHRwSGVhZGVycyhvcHRzLmhlYWRlcnMpKTtcbiAgICAgIG9wdHMuaGVhZGVyc1xuICAgICAgICAuYXBwZW5kKCdDYWNoZS1Db250cm9sJywgJ25vLWNhY2hlJylcbiAgICAgICAgLmFwcGVuZCgnUHJhZ21hJywgJ25vLWNhY2hlJyk7XG4gICAgfVxuXG4gICAgLy8gVXNlIHdlYiBodHRwIGNsaWVudFxuICAgIHRyeSB7XG4gICAgICByZXR1cm4gKGF3YWl0IGh0dHAuZ2V0KHVyaSwgey4uLm9wdHMsIHJlc3BvbnNlVHlwZTogJ2pzb24nfSkudG9Qcm9taXNlKCkpIGFzIFQ7XG4gICAgfVxuICAgIGNhdGNoIChlcnIpIHtcbiAgICAgIGlmIChlcnIgJiYgZXJyLm1lc3NhZ2UpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihgW25ldHdvcmtdIEVycm9yIG9uIGdldCByZXF1ZXN0ICR7dXJpfTogJHtlcnIubWVzc2FnZX1gLCBKU09OLnN0cmluZ2lmeShlcnIpKTtcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICBjb25zb2xlLmVycm9yKGBbbmV0d29ya10gRXJyb3Igb24gZ2V0IHJlcXVlc3QgJHt1cml9OiAke2VyciAmJiBlcnIuc3RhdHVzVGV4dH0gLSAke0pTT04uc3RyaW5naWZ5KGVycil9YCk7XG4gICAgICB9XG4gICAgICB0aHJvdyBlcnI7XG4gICAgfVxuICB9XG59XG5cblxuXG4iXX0=