raain-app 1.0.3 → 1.0.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2020/raain-map/raain-map.component.mjs +3 -3
- package/esm2020/tools/CompareManager.mjs +13 -71
- package/esm2020/tools/RefreshManager.mjs +13 -6
- package/fesm2015/raain-app.mjs +26 -78
- package/fesm2015/raain-app.mjs.map +1 -1
- package/fesm2020/raain-app.mjs +26 -77
- package/fesm2020/raain-app.mjs.map +1 -1
- package/package.json +1 -1
- package/tools/CompareManager.d.ts +9 -9
- package/tools/RefreshManager.d.ts +2 -2
|
@@ -265,10 +265,10 @@ export class RaainMapComponent {
|
|
|
265
265
|
}
|
|
266
266
|
}
|
|
267
267
|
RaainMapComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: RaainMapComponent, deps: [{ token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Component });
|
|
268
|
-
RaainMapComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: RaainMapComponent, selector: "raain-map", inputs: { coordinates: "coordinates", markers: "markers", timeframeContainers: "timeframeContainers", autoplay: "autoplay", showMarkers: "showMarkers", currentHeight: "currentHeight", timeframeDates: "timeframeDates", defaultDate: "defaultDate", sumValues: "sumValues", sumFn: "sumFn" }, outputs: { selectedMarker: "selectedMarker", changedDate: "changedDate" }, host: { listeners: { "window:resize": "onResize($event)" } }, viewQueries: [{ propertyName: "mapDivRef", first: true, predicate: ["primaryMap"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<ion-grid>\n\n <ion-row class=\"ion-align-items-end\">\n <ion-col id=\"map-buttons\" size-sm=\"3\">\n <ion-button (click)=\"previous()\" color=\"medium\" fill=\"outline\" shape=\"round\">\n <ion-icon name=\"play-back\" slot=\"icon-only\"></ion-icon>\n </ion-button>\n <!--\n <ion-button (click)=\"play()\" [hidden]=\"autoplay\" color=\"medium\" fill=\"outline\"\n shape=\"round\">\n <ion-icon name=\"play\" slot=\"icon-only\"></ion-icon>\n </ion-button>\n -->\n <ion-button (click)=\"stop()\" [hidden]=\"!autoplay\" color=\"medium\" fill=\"outline\"\n shape=\"round\">\n <ion-icon name=\"stop\" slot=\"icon-only\"></ion-icon>\n </ion-button>\n\n <ion-button (click)=\"next()\" color=\"medium\" fill=\"outline\" shape=\"round\">\n <ion-icon name=\"play-forward\" slot=\"icon-only\"></ion-icon>\n </ion-button>\n </ion-col>\n\n <!--\n <ion-col id=\"map-timeframe\" size-sm=\"4\">\n <ion-select (ionChange)=\"showTimeframe()\" [(ngModel)]=\"timeframeNameToShow\" [value]=\"timeframeNameToShow\"\n interface=\"popover\" placeholder=\"Name\">\n <ion-select-option *ngFor=\"let name of possibleNames\" [value]=\"name\">{{ name }}</ion-select-option>\n </ion-select>\n </ion-col> -->\n\n <ion-col class=\"ion-text-start\" id=\"map-date\">\n <ion-select (ionDismiss)=\"showTimeframe()\" [(ngModel)]=\"dateToShowAsString\" interface=\"popover\"\n placeholder=\"Period\" value=\"{{dateToShowAsString}}\">\n <ion-select-option *ngFor=\"let dateToSelect of possibleDates\" value=\"{{dateToSelect.toISOString()}}\">\n {{ dateToSelect | date:'yyyy-MM-dd HH:mm' }}\n </ion-select-option>\n </ion-select>\n </ion-col>\n <ion-col>\n <ion-toggle (ionChange)=\"changeShowMarkers()\" [(ngModel)]=\"showMarkers\" [checked]=\"showMarkers\"></ion-toggle>\n </ion-col>\n </ion-row>\n\n <ion-row>\n <ion-col>\n <div id=\"map-container\">\n <div #primaryMap id=\"map-div\"></div>\n </div>\n </ion-col>\n <ion-col class=\"ion-hide-xl-down\">\n <ion-img id=\"map-range\" src=\"assets/r2r_range.svg\"/>\n </ion-col>\n </ion-row>\n\n <ion-row>\n <ion-col size-sm=\"
|
|
268
|
+
RaainMapComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: RaainMapComponent, selector: "raain-map", inputs: { coordinates: "coordinates", markers: "markers", timeframeContainers: "timeframeContainers", autoplay: "autoplay", showMarkers: "showMarkers", currentHeight: "currentHeight", timeframeDates: "timeframeDates", defaultDate: "defaultDate", sumValues: "sumValues", sumFn: "sumFn" }, outputs: { selectedMarker: "selectedMarker", changedDate: "changedDate" }, host: { listeners: { "window:resize": "onResize($event)" } }, viewQueries: [{ propertyName: "mapDivRef", first: true, predicate: ["primaryMap"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<ion-grid>\n\n <ion-row class=\"ion-align-items-end\">\n <ion-col id=\"map-buttons\" size-sm=\"3\">\n <ion-button (click)=\"previous()\" color=\"medium\" fill=\"outline\" shape=\"round\">\n <ion-icon name=\"play-back\" slot=\"icon-only\"></ion-icon>\n </ion-button>\n <!--\n <ion-button (click)=\"play()\" [hidden]=\"autoplay\" color=\"medium\" fill=\"outline\"\n shape=\"round\">\n <ion-icon name=\"play\" slot=\"icon-only\"></ion-icon>\n </ion-button>\n -->\n <ion-button (click)=\"stop()\" [hidden]=\"!autoplay\" color=\"medium\" fill=\"outline\"\n shape=\"round\">\n <ion-icon name=\"stop\" slot=\"icon-only\"></ion-icon>\n </ion-button>\n\n <ion-button (click)=\"next()\" color=\"medium\" fill=\"outline\" shape=\"round\">\n <ion-icon name=\"play-forward\" slot=\"icon-only\"></ion-icon>\n </ion-button>\n </ion-col>\n\n <!--\n <ion-col id=\"map-timeframe\" size-sm=\"4\">\n <ion-select (ionChange)=\"showTimeframe()\" [(ngModel)]=\"timeframeNameToShow\" [value]=\"timeframeNameToShow\"\n interface=\"popover\" placeholder=\"Name\">\n <ion-select-option *ngFor=\"let name of possibleNames\" [value]=\"name\">{{ name }}</ion-select-option>\n </ion-select>\n </ion-col> -->\n\n <ion-col class=\"ion-text-start\" id=\"map-date\">\n <ion-select (ionDismiss)=\"showTimeframe()\" [(ngModel)]=\"dateToShowAsString\" interface=\"popover\"\n placeholder=\"Period\" value=\"{{dateToShowAsString}}\">\n <ion-select-option *ngFor=\"let dateToSelect of possibleDates\" value=\"{{dateToSelect.toISOString()}}\">\n {{ dateToSelect | date:'yyyy-MM-dd HH:mm' }}\n </ion-select-option>\n </ion-select>\n </ion-col>\n <ion-col>\n <ion-toggle (ionChange)=\"changeShowMarkers()\" [(ngModel)]=\"showMarkers\" [checked]=\"showMarkers\"></ion-toggle>\n </ion-col>\n </ion-row>\n\n <ion-row>\n <ion-col>\n <div id=\"map-container\">\n <div #primaryMap id=\"map-div\"></div>\n </div>\n </ion-col>\n <ion-col class=\"ion-hide-xl-down\">\n <ion-img id=\"map-range\" src=\"assets/r2r_range.svg\"/>\n </ion-col>\n </ion-row>\n\n <ion-row>\n <ion-col size-sm=\"8\">\n <span [innerHTML]=\"mcText\"></span>\n </ion-col>\n <ion-col size-sm=\"1\">\n <ion-button disabled=\"true\" fill=\"clear\">{{ sumResult }}</ion-button>\n </ion-col>\n <ion-col size-sm=\"3\">\n <ion-button disabled=\"true\" fill=\"clear\">{{ dateToShow?.toISOString() }}</ion-button>\n </ion-col>\n </ion-row>\n\n</ion-grid>\n", styles: ["#map-container{position:relative;width:800px;height:400px}#map-div{position:absolute;left:0;top:0;right:0;bottom:0}#map-range{height:400px}#map-buttons{min-width:180px}ion-select{width:100%;max-width:-webkit-fit-content;max-width:-moz-fit-content;max-width:fit-content;font-size:16px;color:var(--ion-color-dark)}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i3.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: i3.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: i3.IonGrid, selector: "ion-grid", inputs: ["fixed"] }, { kind: "component", type: i3.IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: i3.IonImg, selector: "ion-img", inputs: ["alt", "src"] }, { kind: "component", type: i3.IonRow, selector: "ion-row" }, { kind: "component", type: i3.IonSelect, selector: "ion-select", inputs: ["cancelText", "compareWith", "disabled", "interface", "interfaceOptions", "mode", "multiple", "name", "okText", "placeholder", "selectedText", "value"] }, { kind: "component", type: i3.IonSelectOption, selector: "ion-select-option", inputs: ["disabled", "value"] }, { kind: "component", type: i3.IonToggle, selector: "ion-toggle", inputs: ["checked", "color", "disabled", "enableOnOffLabels", "mode", "name", "value"] }, { kind: "directive", type: i3.BooleanValueAccessor, selector: "ion-checkbox,ion-toggle" }, { kind: "directive", type: i3.SelectValueAccessor, selector: "ion-range, ion-select, ion-radio-group, ion-segment, ion-datetime" }, { kind: "pipe", type: i1.DatePipe, name: "date" }] });
|
|
269
269
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: RaainMapComponent, decorators: [{
|
|
270
270
|
type: Component,
|
|
271
|
-
args: [{ selector: 'raain-map', template: "<ion-grid>\n\n <ion-row class=\"ion-align-items-end\">\n <ion-col id=\"map-buttons\" size-sm=\"3\">\n <ion-button (click)=\"previous()\" color=\"medium\" fill=\"outline\" shape=\"round\">\n <ion-icon name=\"play-back\" slot=\"icon-only\"></ion-icon>\n </ion-button>\n <!--\n <ion-button (click)=\"play()\" [hidden]=\"autoplay\" color=\"medium\" fill=\"outline\"\n shape=\"round\">\n <ion-icon name=\"play\" slot=\"icon-only\"></ion-icon>\n </ion-button>\n -->\n <ion-button (click)=\"stop()\" [hidden]=\"!autoplay\" color=\"medium\" fill=\"outline\"\n shape=\"round\">\n <ion-icon name=\"stop\" slot=\"icon-only\"></ion-icon>\n </ion-button>\n\n <ion-button (click)=\"next()\" color=\"medium\" fill=\"outline\" shape=\"round\">\n <ion-icon name=\"play-forward\" slot=\"icon-only\"></ion-icon>\n </ion-button>\n </ion-col>\n\n <!--\n <ion-col id=\"map-timeframe\" size-sm=\"4\">\n <ion-select (ionChange)=\"showTimeframe()\" [(ngModel)]=\"timeframeNameToShow\" [value]=\"timeframeNameToShow\"\n interface=\"popover\" placeholder=\"Name\">\n <ion-select-option *ngFor=\"let name of possibleNames\" [value]=\"name\">{{ name }}</ion-select-option>\n </ion-select>\n </ion-col> -->\n\n <ion-col class=\"ion-text-start\" id=\"map-date\">\n <ion-select (ionDismiss)=\"showTimeframe()\" [(ngModel)]=\"dateToShowAsString\" interface=\"popover\"\n placeholder=\"Period\" value=\"{{dateToShowAsString}}\">\n <ion-select-option *ngFor=\"let dateToSelect of possibleDates\" value=\"{{dateToSelect.toISOString()}}\">\n {{ dateToSelect | date:'yyyy-MM-dd HH:mm' }}\n </ion-select-option>\n </ion-select>\n </ion-col>\n <ion-col>\n <ion-toggle (ionChange)=\"changeShowMarkers()\" [(ngModel)]=\"showMarkers\" [checked]=\"showMarkers\"></ion-toggle>\n </ion-col>\n </ion-row>\n\n <ion-row>\n <ion-col>\n <div id=\"map-container\">\n <div #primaryMap id=\"map-div\"></div>\n </div>\n </ion-col>\n <ion-col class=\"ion-hide-xl-down\">\n <ion-img id=\"map-range\" src=\"assets/r2r_range.svg\"/>\n </ion-col>\n </ion-row>\n\n <ion-row>\n <ion-col size-sm=\"
|
|
271
|
+
args: [{ selector: 'raain-map', template: "<ion-grid>\n\n <ion-row class=\"ion-align-items-end\">\n <ion-col id=\"map-buttons\" size-sm=\"3\">\n <ion-button (click)=\"previous()\" color=\"medium\" fill=\"outline\" shape=\"round\">\n <ion-icon name=\"play-back\" slot=\"icon-only\"></ion-icon>\n </ion-button>\n <!--\n <ion-button (click)=\"play()\" [hidden]=\"autoplay\" color=\"medium\" fill=\"outline\"\n shape=\"round\">\n <ion-icon name=\"play\" slot=\"icon-only\"></ion-icon>\n </ion-button>\n -->\n <ion-button (click)=\"stop()\" [hidden]=\"!autoplay\" color=\"medium\" fill=\"outline\"\n shape=\"round\">\n <ion-icon name=\"stop\" slot=\"icon-only\"></ion-icon>\n </ion-button>\n\n <ion-button (click)=\"next()\" color=\"medium\" fill=\"outline\" shape=\"round\">\n <ion-icon name=\"play-forward\" slot=\"icon-only\"></ion-icon>\n </ion-button>\n </ion-col>\n\n <!--\n <ion-col id=\"map-timeframe\" size-sm=\"4\">\n <ion-select (ionChange)=\"showTimeframe()\" [(ngModel)]=\"timeframeNameToShow\" [value]=\"timeframeNameToShow\"\n interface=\"popover\" placeholder=\"Name\">\n <ion-select-option *ngFor=\"let name of possibleNames\" [value]=\"name\">{{ name }}</ion-select-option>\n </ion-select>\n </ion-col> -->\n\n <ion-col class=\"ion-text-start\" id=\"map-date\">\n <ion-select (ionDismiss)=\"showTimeframe()\" [(ngModel)]=\"dateToShowAsString\" interface=\"popover\"\n placeholder=\"Period\" value=\"{{dateToShowAsString}}\">\n <ion-select-option *ngFor=\"let dateToSelect of possibleDates\" value=\"{{dateToSelect.toISOString()}}\">\n {{ dateToSelect | date:'yyyy-MM-dd HH:mm' }}\n </ion-select-option>\n </ion-select>\n </ion-col>\n <ion-col>\n <ion-toggle (ionChange)=\"changeShowMarkers()\" [(ngModel)]=\"showMarkers\" [checked]=\"showMarkers\"></ion-toggle>\n </ion-col>\n </ion-row>\n\n <ion-row>\n <ion-col>\n <div id=\"map-container\">\n <div #primaryMap id=\"map-div\"></div>\n </div>\n </ion-col>\n <ion-col class=\"ion-hide-xl-down\">\n <ion-img id=\"map-range\" src=\"assets/r2r_range.svg\"/>\n </ion-col>\n </ion-row>\n\n <ion-row>\n <ion-col size-sm=\"8\">\n <span [innerHTML]=\"mcText\"></span>\n </ion-col>\n <ion-col size-sm=\"1\">\n <ion-button disabled=\"true\" fill=\"clear\">{{ sumResult }}</ion-button>\n </ion-col>\n <ion-col size-sm=\"3\">\n <ion-button disabled=\"true\" fill=\"clear\">{{ dateToShow?.toISOString() }}</ion-button>\n </ion-col>\n </ion-row>\n\n</ion-grid>\n", styles: ["#map-container{position:relative;width:800px;height:400px}#map-div{position:absolute;left:0;top:0;right:0;bottom:0}#map-range{height:400px}#map-buttons{min-width:180px}ion-select{width:100%;max-width:-webkit-fit-content;max-width:-moz-fit-content;max-width:fit-content;font-size:16px;color:var(--ion-color-dark)}\n"] }]
|
|
272
272
|
}], ctorParameters: function () { return [{ type: i0.NgZone }]; }, propDecorators: { coordinates: [{
|
|
273
273
|
type: Input
|
|
274
274
|
}], markers: [{
|
|
@@ -300,4 +300,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
|
|
|
300
300
|
type: HostListener,
|
|
301
301
|
args: ['window:resize', ['$event']]
|
|
302
302
|
}] } });
|
|
303
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmFhaW4tbWFwLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hcHAvc2hhcmVkL3JhYWluLW1hcC9yYWFpbi1tYXAuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vc3JjL2FwcC9zaGFyZWQvcmFhaW4tbWFwL3JhYWluLW1hcC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUwsU0FBUyxFQUVULFlBQVksRUFDWixZQUFZLEVBQ1osS0FBSyxFQUlMLE1BQU0sRUFFTixTQUFTLEVBQ1YsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFvQixlQUFlLEVBQThCLFNBQVMsRUFBc0IsTUFBTSxVQUFVLENBQUM7Ozs7O0FBT3hILE1BQU0sT0FBTyxpQkFBaUI7SUFnRTVCLFlBQW9CLE1BQWM7UUFBZCxXQUFNLEdBQU4sTUFBTSxDQUFRO1FBaEQzQixhQUFRLEdBQUcsS0FBSyxDQUFDO1FBRWpCLGdCQUFXLEdBQUcsSUFBSSxDQUFDO1FBTW5CLG1CQUFjLEdBQVcsRUFBRSxDQUFDO1FBVzVCLG1CQUFjLEdBQUcsSUFBSSxZQUFZLEVBQWEsQ0FBQztRQUcvQyxnQkFBVyxHQUFHLElBQUksWUFBWSxFQUFRLENBQUM7UUEyQjVDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUVkLGNBQWM7UUFDZCxNQUFNLFFBQVEsR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLG1CQUFtQjtRQUM5QyxNQUFNLFVBQVUsR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLCtEQUErRDtRQUM1RixNQUFNLFNBQVMsR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUMzQixNQUFNLFdBQVcsR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUM3QixNQUFNLFdBQVcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUs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LEtBQUs7Z0JBR0MsT0FBTztzQkFEYixLQUFLO2dCQVVDLG1CQUFtQjtzQkFEekIsS0FBSztnQkFHQyxRQUFRO3NCQURkLEtBQUs7Z0JBR0MsV0FBVztzQkFEakIsS0FBSztnQkFHQyxhQUFhO3NCQURuQixLQUFLO2dCQUtDLGNBQWM7c0JBRHBCLEtBQUs7Z0JBR0MsV0FBVztzQkFEakIsS0FBSztnQkFJQyxTQUFTO3NCQURmLEtBQUs7Z0JBR0MsS0FBSztzQkFEWCxLQUFLO2dCQUtDLGNBQWM7c0JBRHBCLE1BQU07Z0JBSUEsV0FBVztzQkFEakIsTUFBTTtnQkFhRyxTQUFTO3NCQURsQixTQUFTO3VCQUFDLFlBQVk7Z0JBMFNmLFFBQVE7c0JBRGYsWUFBWTt1QkFBQyxlQUFlLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBZnRlclZpZXdDaGVja2VkLFxuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgSG9zdExpc3RlbmVyLFxuICBJbnB1dCxcbiAgTmdab25lLFxuICBPbkNoYW5nZXMsXG4gIE9uRGVzdHJveSxcbiAgT3V0cHV0LFxuICBTaW1wbGVDaGFuZ2VzLFxuICBWaWV3Q2hpbGRcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0ljb25PcHRpb25zfSBmcm9tICdsZWFmbGV0JztcbmltcG9ydCB7Q2FydGVzaWFuTWFwVmFsdWUsIEVsZW1lbnRzRmFjdG9yeSwgRnJhbWVDb250YWluZXIsIE1hcEVsZW1lbnQsIE1hcExhdExuZywgVGltZWZyYW1lQ29udGFpbmVyc30gZnJvbSAncmFhaW4tdWknO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdyYWFpbi1tYXAnLFxuICB0ZW1wbGF0ZVVybDogJy4vcmFhaW4tbWFwLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vcmFhaW4tbWFwLmNvbXBvbmVudC5zY3NzJ10sXG59KVxuZXhwb3J0IGNsYXNzIFJhYWluTWFwQ29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3Q2hlY2tlZCwgT25EZXN0cm95LCBPbkNoYW5nZXMge1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBjb29yZGluYXRlczogTWFwTGF0TG5nO1xuICBASW5wdXQoKVxuICBwdWJsaWMgbWFya2Vyczoge1xuICAgIGdhdWdlczogTWFwTGF0TG5nW10sXG4gICAgc2VsZWN0ZWRHYXVnZXM6IE1hcExhdExuZ1tdLFxuICAgIHBpeGVsczogTWFwTGF0TG5nW10sXG4gICAgYm9yZGVyczogTWFwTGF0TG5nW10sXG4gICAgZ2F1Z2VzSW5Db21wYXJlOiBNYXBMYXRMbmdbXSxcbiAgICBwaXhlbHNTb2x1dGlvbjogTWFwTGF0TG5nW10sXG4gIH07XG4gIEBJbnB1dCgpXG4gIHB1YmxpYyB0aW1lZnJhbWVDb250YWluZXJzOiBUaW1lZnJhbWVDb250YWluZXJzO1xuICBASW5wdXQoKVxuICBwdWJsaWMgYXV0b3BsYXkgPSBmYWxzZTtcbiAgQElucHV0KClcbiAgcHVibGljIHNob3dNYXJrZXJzID0gdHJ1ZTtcbiAgQElucHV0KClcbiAgcHVibGljIGN1cnJlbnRIZWlnaHQ6IG51bWJlcjtcbiAgcHVibGljIGN1cnJlbnRXaWR0aDogbnVtYmVyO1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyB0aW1lZnJhbWVEYXRlczogRGF0ZVtdID0gW107XG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBkZWZhdWx0RGF0ZTogRGF0ZTtcblxuICBASW5wdXQoKVxuICBwdWJsaWMgc3VtVmFsdWVzOiBhbnk7XG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzdW1GbjogYW55O1xuICBwdWJsaWMgc3VtUmVzdWx0OiBzdHJpbmc7XG5cbiAgQE91dHB1dCgpXG4gIHB1YmxpYyBzZWxlY3RlZE1hcmtlciA9IG5ldyBFdmVudEVtaXR0ZXI8TWFwTGF0TG5nPigpO1xuXG4gIEBPdXRwdXQoKVxuICBwdWJsaWMgY2hhbmdlZERhdGUgPSBuZXcgRXZlbnRFbWl0dGVyPERhdGU+KCk7XG5cbiAgcHVibGljIG1jVGV4dDtcbiAgcHVibGljIG5leHREYXRlOiBEYXRlO1xuICBwdWJsaWMgcG9zc2libGVOYW1lczogc3RyaW5nW107XG4gIHB1YmxpYyBwb3NzaWJsZURhdGVzOiBEYXRlW107XG4gIHB1YmxpYyBkYXRlVG9TaG93OiBEYXRlO1xuICBwdWJsaWMgZGF0ZVRvU2hvd0FzU3RyaW5nOiBzdHJpbmc7XG4gIHB1YmxpYyB0aW1lZnJhbWVOYW1lVG9TaG93OiBzdHJpbmc7XG4gIHByb3RlY3RlZCBjdXJyZW50RnJhbWVDb250YWluZXI6IEZyYW1lQ29udGFpbmVyO1xuXG4gIEBWaWV3Q2hpbGQoJ3ByaW1hcnlNYXAnKVxuICBwcm90ZWN0ZWQgbWFwRGl2UmVmOiBFbGVtZW50UmVmO1xuXG4gIHByaXZhdGUgbWFwRWxlbWVudDogTWFwRWxlbWVudDtcbiAgcHJpdmF0ZSBvblNpemVDaGFuZ2VkO1xuICBwcml2YXRlIGNyZWF0ZWQ7XG4gIHByaXZhdGUgaWNvbk9wdGlvbnM6IHtcbiAgICBnYXVnZXM6IEljb25PcHRpb25zLFxuICAgIHNlbGVjdGVkR2F1Z2VzOiBJY29uT3B0aW9ucyxcbiAgICBwaXhlbHM6IEljb25PcHRpb25zLFxuICAgIGJvcmRlcnM6IEljb25PcHRpb25zLFxuICAgIGdhdWdlc0luQ29tcGFyZTogSWNvbk9wdGlvbnMsXG4gICAgcGl4ZWxzU29sdXRpb246IEljb25PcHRpb25zLFxuICB9O1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgbmdab25lOiBOZ1pvbmUpIHtcbiAgICB0aGlzLmRlbGV0ZSgpO1xuXG4gICAgLy8gc2hhZG93VXJsID9cbiAgICBjb25zdCBpY29uU2l6ZSA9IFs0MCwgNDBdOyAvLyBzaXplIG9mIHRoZSBpY29uXG4gICAgY29uc3QgaWNvbkFuY2hvciA9IFsyMCwgMjBdOyAvLyBwb2ludCBvZiB0aGUgaWNvbiB3aGljaCB3aWxsIGNvcnJlc3BvbmQgdG8gbWFya2VyJ3MgbG9jYXRpb25cbiAgICBjb25zdCBwaXhlbFNpemUgPSBbNDEsIDQxXTtcbiAgICBjb25zdCBwaXhlbEFuY2hvciA9IFsyMCwgMjBdO1xuICAgIGNvbnN0IHBvcHVwQW5jaG9yID0gWzAsIC0yMF07IC8vIHBvaW50IGZyb20gd2hpY2ggdGhlIHBvcHVwIHNob3VsZCBvcGVuIHJlbGF0aXZlIHRvIHRoZSBpY29uQW5jaG9yXG4gICAgdGhpcy5pY29uT3B0aW9ucyA9IHtcbiAgICAgIGdhdWdlczoge2ljb25Vcmw6ICcuL2Fzc2V0cy9tYXBzL21hcmtlci1wbHV2aW8ucG5nJywgaWNvblNpemUsIGljb25BbmNob3IsIHBvcHVwQW5jaG9yfSxcbiAgICAgIGdhdWdlc0luQ29tcGFyZToge2ljb25Vcmw6ICcuL2Fzc2V0cy9tYXBzL21hcmtlci1wbHV2aW8tZGlhZy5wbmcnLCBpY29uU2l6ZSwgaWNvbkFuY2hvciwgcG9wdXBBbmNob3J9LFxuICAgICAgc2VsZWN0ZWRHYXVnZXM6IHtpY29uVXJsOiAnLi9hc3NldHMvbWFwcy9tYXJrZXItcGx1dmlvLWRpYWctc2VsZWN0LnBuZycsIGljb25TaXplLCBpY29uQW5jaG9yLCBwb3B1cEFuY2hvcn0sXG4gICAgICBwaXhlbHM6IHtpY29uVXJsOiAnLi9hc3NldHMvbWFwcy9tYXJrZXItcmFpbi5wbmcnLCBpY29uU2l6ZSwgaWNvbkFuY2hvciwgcG9wdXBBbmNob3J9LFxuICAgICAgcGl4ZWxzU29sdXRpb246IHtpY29uVXJsOiAnLi9hc3NldHMvbWFwcy9tYXJrZXItcmFpbjIucG5nJywgaWNvblNpemU6IHBpeGVsU2l6ZSwgaWNvbkFuY2hvcjogcGl4ZWxBbmNob3IsIHBvcHVwQW5jaG9yfSxcbiAgICAgIGJvcmRlcnM6IHtpY29uVXJsOiAnLi9hc3NldHMvbWFwcy9tYXJrZXItc2hhZG93LnBuZycsIGljb25TaXplLCBpY29uQW5jaG9yLCBwb3B1cEFuY2hvcn0sXG4gICAgfTtcbiAgfVxuXG4gIHB1YmxpYyBuZ0FmdGVyVmlld0NoZWNrZWQoKTogdm9pZCB7XG4gICAgdGhpcy5jcmVhdGUoKTtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgdGhpcy5jaGFuZ2UoY2hhbmdlcyk7XG4gIH1cblxuICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5kZWxldGUoKTtcbiAgfVxuXG4gIHB1YmxpYyBzaG93VGltZWZyYW1lKGZvcmNlID0gZmFsc2UpIHtcblxuICAgIC8vIGNvbnN0IHtmcmFtZUNvbnRhaW5lciwgbGF5ZXJ9ID0gdGhpcy50aW1lZnJhbWVDb250YWluZXJzLnNob3dUaW1lZnJhbWUodGhpcy50aW1lZnJhbWVOYW1lVG9TaG93KTtcbiAgICAvLyB0aGlzLmN1cnJlbnRGcmFtZUNvbnRhaW5lciA9IGZyYW1lQ29udGFpbmVyO1xuXG4gICAgaWYgKCF0aGlzLmRhdGVUb1Nob3dBc1N0cmluZ1xuICAgICAgfHwgKCFmb3JjZSAmJiBuZXcgRGF0ZSh0aGlzLmRhdGVUb1Nob3dBc1N0cmluZykuZ2V0VGltZSgpID09PSB0aGlzLmRhdGVUb1Nob3c/LmdldFRpbWUoKSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmRhdGVUb1Nob3cgPSBuZXcgRGF0ZSh0aGlzLmRhdGVUb1Nob3dBc1N0cmluZyk7XG4gICAgdGhpcy5jaGFuZ2VkRGF0ZS5lbWl0KHRoaXMuZGF0ZVRvU2hvdyk7XG4gIH1cblxuICBwdWJsaWMgbmV4dCgpIHtcbiAgICBpZiAoIXRoaXMucG9zc2libGVEYXRlcyB8fCB0aGlzLnBvc3NpYmxlRGF0ZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgaW5kZXggPSB0aGlzLmdldERhdGVUb1Nob3dJbmRleCgpO1xuICAgIHRoaXMuZGF0ZVRvU2hvdyA9IChpbmRleCArIDEpIDwgdGhpcy5wb3NzaWJsZURhdGVzLmxlbmd0aCA/IHRoaXMucG9zc2libGVEYXRlc1tpbmRleCArIDFdIDogdGhpcy5wb3NzaWJsZURhdGVzWzBdO1xuICAgIHRoaXMuZGF0ZVRvU2hvd0FzU3RyaW5nID0gdGhpcy5kYXRlVG9TaG93LnRvSVNPU3RyaW5nKCk7XG5cbiAgICB0aGlzLnNob3dUaW1lZnJhbWUodHJ1ZSk7XG4gICAgaWYgKHRoaXMuYXV0b3BsYXkpIHtcbiAgICAgIHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHRoaXMubmV4dCgpLCAyMDAwKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgcHJldmlvdXMoKSB7XG4gICAgdGhpcy5zdG9wKCk7XG4gICAgaWYgKCF0aGlzLnBvc3NpYmxlRGF0ZXMgfHwgdGhpcy5wb3NzaWJsZURhdGVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGluZGV4ID0gdGhpcy5nZXREYXRlVG9TaG93SW5kZXgoKTtcbiAgICB0aGlzLmRhdGVUb1Nob3cgPSBpbmRleCA+IDAgPyB0aGlzLnBvc3NpYmxlRGF0ZXNbaW5kZXggLSAxXSA6IHRoaXMucG9zc2libGVEYXRlc1swXTtcbiAgICB0aGlzLmRhdGVUb1Nob3dBc1N0cmluZyA9IHRoaXMuZGF0ZVRvU2hvdy50b0lTT1N0cmluZygpO1xuXG4gICAgdGhpcy5zaG93VGltZWZyYW1lKHRydWUpO1xuICB9XG5cbiAgcHVibGljIHBsYXkoKSB7XG4gICAgdGhpcy5hdXRvcGxheSA9IHRydWU7XG4gICAgdGhpcy5uZXh0KCk7XG4gIH1cblxuICBwdWJsaWMgc3RvcCgpIHtcbiAgICB0aGlzLmF1dG9wbGF5ID0gZmFsc2U7XG4gIH1cblxuICBwdWJsaWMgY2hhbmdlU2hvd01hcmtlcnMoKSB7XG4gICAgaWYgKCF0aGlzLm1hcEVsZW1lbnQ/Lm1hcmtlcnNMYXllciB8fCAhdGhpcy5tYXBFbGVtZW50Py5tYXBMZWFmbGV0KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuc2hvd01hcmtlcnMpIHtcbiAgICAgIHRoaXMubWFwRWxlbWVudC5tYXJrZXJzTGF5ZXIuYWRkVG9NYXAodGhpcy5tYXBFbGVtZW50Lm1hcExlYWZsZXQpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLm1hcEVsZW1lbnQubWFya2Vyc0xheWVyLnJlbW92ZUZyb21NYXAodGhpcy5tYXBFbGVtZW50Lm1hcExlYWZsZXQpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlKCkge1xuXG4gICAgY29uc3QgY3JlYXRlZCA9IHRoaXMuY3JlYXRlZDtcbiAgICBpZiAoY3JlYXRlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmNyZWF0ZWQgPSB0cnVlO1xuICAgIGNvbnN0IG1hcmtlcnMgPSBbXG4gICAgICB7aWNvbnNMYXRMbmc6IHRoaXMubWFya2Vycy5nYXVnZXMsIGljb25zT3B0aW9uczogdGhpcy5pY29uT3B0aW9ucy5nYXVnZXN9LFxuICAgICAge2ljb25zTGF0TG5nOiB0aGlzLm1hcmtlcnMuc2VsZWN0ZWRHYXVnZXMsIGljb25zT3B0aW9uczogdGhpcy5pY29uT3B0aW9ucy5zZWxlY3RlZEdhdWdlc30sXG4gICAgICB7aWNvbnNMYXRMbmc6IHRoaXMubWFya2Vycy5nYXVnZXNJbkNvbXBhcmUsIGljb25zT3B0aW9uczogdGhpcy5pY29uT3B0aW9ucy5nYXVnZXNJbkNvbXBhcmV9LFxuICAgICAge2ljb25zTGF0TG5nOiB0aGlzLm1hcmtlcnMucGl4ZWxzLCBpY29uc09wdGlvbnM6IHRoaXMuaWNvbk9wdGlvbnMucGl4ZWxzfSxcbiAgICAgIHtpY29uc0xhdExuZzogdGhpcy5tYXJrZXJzLnBpeGVsc1NvbHV0aW9uLCBpY29uc09wdGlvbnM6IHRoaXMuaWNvbk9wdGlvbnMucGl4ZWxzU29sdXRpb259LFxuICAgICAgLy8ge2ljb25zTGF0TG5nOiB0aGlzLm1hcmtlcnMuYm9yZGVycywgaWNvbnNPcHRpb25zOiB0aGlzLmljb25PcHRpb25zLmJvcmRlcnN9LFxuICAgIF07XG5cbiAgICBjb25zdCBmYWN0b3J5ID0gbmV3IEVsZW1lbnRzRmFjdG9yeSh0aGlzLmNvb3JkaW5hdGVzLCB0cnVlKTtcbiAgICB0aGlzLm5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcblxuICAgICAgICBjb25zdCBjcmVhdGVkT3V0c2lkZSA9IHRoaXMuY3JlYXRlZDtcbiAgICAgICAgaWYgKCFjcmVhdGVkT3V0c2lkZSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMubWFwRWxlbWVudCA9IGZhY3RvcnkuY3JlYXRlTWFwKHRoaXMubWFwRGl2UmVmLm5hdGl2ZUVsZW1lbnQsIHt0aW1lZnJhbWVDb250YWluZXJzOiB0aGlzLnRpbWVmcmFtZUNvbnRhaW5lcnMsIG1hcmtlcnN9KTtcblxuICAgICAgICB0aGlzLm1hcEVsZW1lbnQubWFwTGVhZmxldD8ub24oJ21vdXNlbW92ZScsIChldnQpID0+IHRoaXMub25NYXBNb3VzZU1vdmUoZXZ0KSk7XG4gICAgICAgIHRoaXMubWFwRWxlbWVudC5tYXJrZXJzUHJvZHVjZWQ/LmZvckVhY2gobSA9PiBtLm9uKCdjbGljaycsIGV2dCA9PiB0aGlzLm9uTWFwQ2xpY2soZXZ0KSkpO1xuICAgICAgICB0aGlzLm9uU2l6ZUNoYW5nZWQgPSAoKSA9PiB7XG4gICAgICAgICAgdGhpcy5tYXBFbGVtZW50Lm1hcmtlcnNMYXllcj8uc2V0Q3VycmVudFdpZHRoKHRoaXMuY3VycmVudFdpZHRoKTtcbiAgICAgICAgICB0aGlzLm1hcEVsZW1lbnQubWFya2Vyc0xheWVyPy5zZXRDdXJyZW50SGVpZ2h0KHRoaXMuY3VycmVudEhlaWdodCk7XG4gICAgICAgICAgdGhpcy5tYXBFbGVtZW50LmNvbXBvc2l0ZUxheWVyPy5zZXRDdXJyZW50V2lkdGgodGhpcy5jdXJyZW50V2lkdGgpO1xuICAgICAgICAgIHRoaXMubWFwRWxlbWVudC5jb21wb3NpdGVMYXllcj8uc2V0Q3VycmVudEhlaWdodCh0aGlzLmN1cnJlbnRIZWlnaHQpO1xuICAgICAgICAgIHRoaXMubWFwRWxlbWVudC5tYXBMZWFmbGV0Py5pbnZhbGlkYXRlU2l6ZSh7YW5pbWF0ZTogdHJ1ZX0pO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudXBkYXRlTWFwU2l6ZSgpO1xuICAgICAgICAvLyB0aGlzLnRpbWVmcmFtZU5hbWVUb1Nob3cgPSB0aGlzLnBvc3NpYmxlTmFtZXMubGVuZ3RoID4gMCA/IHRoaXMucG9zc2libGVOYW1lc1swXSA6IG51bGw7XG4gICAgICAgIC8vIHRoaXMudG9nZ2xlSGlkZU1hcmtlcnMoIXRoaXMuaGlkZU1hcmtlcnMpO1xuICAgICAgICB0aGlzLmNoYW5nZU5hdmlnYXRpb24odGhpcy5kZWZhdWx0RGF0ZSk7XG4gICAgICB9LCAxMDApO1xuICAgIH0pO1xuXG4gIH1cblxuICBwcml2YXRlIGRlbGV0ZSgpIHtcbiAgICB0aGlzLm1hcEVsZW1lbnQ/Lm1hcExlYWZsZXQ/LnJlbW92ZSgpO1xuICAgIHRoaXMubWFwRWxlbWVudCA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLm1jVGV4dCA9ICcnO1xuICAgIHRoaXMubmV4dERhdGUgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5wb3NzaWJsZU5hbWVzID0gW107XG4gICAgdGhpcy5wb3NzaWJsZURhdGVzID0gW107XG4gICAgdGhpcy50aW1lZnJhbWVOYW1lVG9TaG93ID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuZGF0ZVRvU2hvdyA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLmRhdGVUb1Nob3dBc1N0cmluZyA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLm9uU2l6ZUNoYW5nZWQgPSAoKSA9PiB7XG4gICAgfTtcbiAgICB0aGlzLmN1cnJlbnRGcmFtZUNvbnRhaW5lciA9IG51bGw7XG5cbiAgICB0aGlzLmNyZWF0ZWQgPSBmYWxzZTtcbiAgfVxuXG4gIHByaXZhdGUgY2hhbmdlKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcbiAgICAvLyBjb25zb2xlLmxvZygnbWFwIGNoYW5nZXMnLCBjaGFuZ2VzKTtcblxuICAgIGxldCBwb3NzaWJsZU5ld0RlZmF1bHREYXRlOiBEYXRlO1xuICAgIGlmIChjaGFuZ2VzLmRlZmF1bHREYXRlKSB7XG4gICAgICBpZiAobmV3IERhdGUoY2hhbmdlcy5kZWZhdWx0RGF0ZS5jdXJyZW50VmFsdWUpLmdldFRpbWUoKSA9PT0gbmV3IERhdGUoY2hhbmdlcy5kZWZhdWx0RGF0ZS5wcmV2aW91c1ZhbHVlKS5nZXRUaW1lKCkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgcG9zc2libGVOZXdEZWZhdWx0RGF0ZSA9IHRoaXMuZGVmYXVsdERhdGU7XG4gICAgfVxuXG4gICAgaWYgKGNoYW5nZXMubWFya2VycyAmJiB0aGlzLm1hcEVsZW1lbnQ/Lm1hcmtlcnNMYXllcikge1xuXG4gICAgICBjb25zdCBtYXJrZXJzID0gW1xuICAgICAgICB7aWNvbnNMYXRMbmc6IHRoaXMubWFya2Vycy5nYXVnZXMsIGljb25PcHRpb25zOiB0aGlzLmljb25PcHRpb25zLmdhdWdlc30sXG4gICAgICAgIHtpY29uc0xhdExuZzogdGhpcy5tYXJrZXJzLnNlbGVjdGVkR2F1Z2VzLCBpY29uT3B0aW9uczogdGhpcy5pY29uT3B0aW9ucy5zZWxlY3RlZEdhdWdlc30sXG4gICAgICAgIHtpY29uc0xhdExuZzogdGhpcy5tYXJrZXJzLmdhdWdlc0luQ29tcGFyZSwgaWNvbk9wdGlvbnM6IHRoaXMuaWNvbk9wdGlvbnMuZ2F1Z2VzSW5Db21wYXJlfSxcbiAgICAgICAge2ljb25zTGF0TG5nOiB0aGlzLm1hcmtlcnMucGl4ZWxzLCBpY29uT3B0aW9uczogdGhpcy5pY29uT3B0aW9ucy5waXhlbHN9LFxuICAgICAgICB7aWNvbnNMYXRMbmc6IHRoaXMubWFya2Vycy5waXhlbHNTb2x1dGlvbiwgaWNvbk9wdGlvbnM6IHRoaXMuaWNvbk9wdGlvbnMucGl4ZWxzU29sdXRpb259LFxuICAgICAgICAvLyAge2ljb25zTGF0TG5nOiB0aGlzLm1hcmtlcnMuYm9yZGVycywgaWNvbk9wdGlvbnM6IHRoaXMuaWNvbk9wdGlvbnMuYm9yZGVyc30sXG4gICAgICBdO1xuICAgICAgY29uc3QgbWFya2Vyc1Byb2R1Y2VkID0gdGhpcy5tYXBFbGVtZW50Lm1hcmtlcnNMYXllci5yZW5kZXIobWFya2VycykubWFya2VycztcbiAgICAgIGlmIChtYXJrZXJzUHJvZHVjZWQpIHtcbiAgICAgICAgbWFya2Vyc1Byb2R1Y2VkLmZvckVhY2gobSA9PiBtLm9uKCdjbGljaycsIGV2dCA9PiB0aGlzLm9uTWFwQ2xpY2soZXZ0KSkpO1xuICAgICAgICBpZiAodGhpcy5zaG93TWFya2Vycykge1xuICAgICAgICAgIHRoaXMubWFwRWxlbWVudC5tYXJrZXJzTGF5ZXIucmVtb3ZlRnJvbU1hcCh0aGlzLm1hcEVsZW1lbnQubWFwTGVhZmxldCk7XG4gICAgICAgICAgdGhpcy5tYXBFbGVtZW50Lm1hcmtlcnNMYXllci5hZGRUb01hcCh0aGlzLm1hcEVsZW1lbnQubWFwTGVhZmxldCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoY2hhbmdlcy5tYXJrZXJzICYmIHRoaXMubWFya2Vycy5zZWxlY3RlZEdhdWdlcy5sZW5ndGggPT09IDEpIHtcbiAgICAgIGNvbnN0IHNlbGVjdGVkR2F1Z2UgPSB0aGlzLm1hcmtlcnMuc2VsZWN0ZWRHYXVnZXNbMF07XG4gICAgICB0aGlzLm1hcEVsZW1lbnQubWFwTGVhZmxldC5zZXRWaWV3KHNlbGVjdGVkR2F1Z2UsIDEwKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5tYXBFbGVtZW50ICYmIGNoYW5nZXMudGltZWZyYW1lQ29udGFpbmVycykge1xuICAgICAgdGhpcy5tYXBFbGVtZW50LnVwZGF0ZU1hcFRpbWVmcmFtZSh0aGlzLnRpbWVmcmFtZUNvbnRhaW5lcnMpO1xuICAgICAgdGhpcy5jdXJyZW50RnJhbWVDb250YWluZXIgPSB0aGlzLnRpbWVmcmFtZUNvbnRhaW5lcnM/LmNvbnRhaW5lcnNbMF0/LnRpbWVmcmFtZVswXTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5tYXBFbGVtZW50Py5jb21wb3NpdGVMYXllciAmJiBjaGFuZ2VzLnN1bVZhbHVlcykge1xuICAgICAgY29uc3QgZHJhd2VyID0gdGhpcy5tYXBFbGVtZW50LmNvbXBvc2l0ZUxheWVyLmdldEZpcnN0RHJhd2VyKCk7XG4gICAgICB0aGlzLnN1bVJlc3VsdCA9IGRyYXdlcj8uZ2V0RXhlY09mVmlzaWJsZVBvaW50cyh0aGlzLnN1bVZhbHVlcywgdGhpcy5zdW1Gbik7XG4gICAgfVxuXG4gICAgdGhpcy5jaGFuZ2VOYXZpZ2F0aW9uKHBvc3NpYmxlTmV3RGVmYXVsdERhdGUpO1xuICB9XG5cbiAgcHJpdmF0ZSBjaGFuZ2VOYXZpZ2F0aW9uKGRlZmF1bHREYXRlPzogRGF0ZSkge1xuICAgIC8vIHVwZGF0ZSBwb3NzaWJsZSBuYW1lc1xuICAgIGlmICh0aGlzLnRpbWVmcmFtZUNvbnRhaW5lcnMgJiYgdGhpcy50aW1lZnJhbWVDb250YWluZXJzLmNvbnRhaW5lcnMubGVuZ3RoKSB7XG4gICAgICB0aGlzLnBvc3NpYmxlTmFtZXMgPSBbXTtcbiAgICAgIHRoaXMudGltZWZyYW1lQ29udGFpbmVycz8uY29udGFpbmVycy5mb3JFYWNoKGMgPT4ge1xuICAgICAgICBpZiAodGhpcy5wb3NzaWJsZU5hbWVzLmluZGV4T2YoYy5uYW1lKSA8IDApIHtcbiAgICAgICAgICB0aGlzLnBvc3NpYmxlTmFtZXMucHVzaChjLm5hbWUpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHRoaXMudGltZWZyYW1lTmFtZVRvU2hvdyA9IHRoaXMucG9zc2libGVOYW1lcy5sZW5ndGggPiAwID8gdGhpcy5wb3NzaWJsZU5hbWVzWzBdIDogbnVsbDtcbiAgICB9XG5cbiAgICAvLyB1cGRhdGUgcG9zc2libGUgZGF0ZXNcbiAgICB0aGlzLnBvc3NpYmxlRGF0ZXMgPSB0aGlzLnRpbWVmcmFtZURhdGVzO1xuICAgIGlmICghdGhpcy5wb3NzaWJsZURhdGVzIHx8IHRoaXMucG9zc2libGVEYXRlcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyB1cGRhdGUgZGF0ZVRvU2hvd1xuICAgIGlmIChkZWZhdWx0RGF0ZSAmJiB0aGlzLnBvc3NpYmxlRGF0ZXMuZmlsdGVyKGQgPT4gZC5nZXRUaW1lKCkgPT09IGRlZmF1bHREYXRlLmdldFRpbWUoKSkubGVuZ3RoID09PSAxKSB7XG4gICAgICB0aGlzLmRhdGVUb1Nob3cgPSBkZWZhdWx0RGF0ZTtcbiAgICB9XG4gICAgaWYgKCF0aGlzLmRhdGVUb1Nob3cgJiYgdGhpcy5wb3NzaWJsZURhdGVzLmxlbmd0aCA+IDAgJiZcbiAgICAgIHRoaXMucG9zc2libGVEYXRlcy5maWx0ZXIoZCA9PiBkLmdldFRpbWUoKSA9PT0gdGhpcy5kYXRlVG9TaG93Py5nZXRUaW1lKCkpLmxlbmd0aCAhPT0gMSkge1xuICAgICAgdGhpcy5kYXRlVG9TaG93ID0gdGhpcy5wb3NzaWJsZURhdGVzWzBdO1xuICAgIH1cbiAgICB0aGlzLmRhdGVUb1Nob3dBc1N0cmluZyA9IHRoaXMuZGF0ZVRvU2hvdy50b0lTT1N0cmluZygpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXREYXRlVG9TaG93SW5kZXgoKTogbnVtYmVyIHtcblxuICAgIGxldCBpbmRleCA9IDA7XG4gICAgZm9yIChjb25zdCBkYXRlIG9mIHRoaXMucG9zc2libGVEYXRlcykge1xuICAgICAgaWYgKGRhdGUudG9JU09TdHJpbmcoKS5zdWJzdHJpbmcoMCwgMTkpID09PSB0aGlzLmRhdGVUb1Nob3dBc1N0cmluZy5zdWJzdHJpbmcoMCwgMTkpKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgaW5kZXgrKztcbiAgICB9XG4gICAgcmV0dXJuIGluZGV4O1xuICB9XG5cbiAgcHJpdmF0ZSBvbk1hcE1vdXNlTW92ZShldnQ6IHsgbGF0bG5nOiB7IGxhdDogbnVtYmVyLCBsbmc6IG51bWJlciB9IH0pOiB2b2lkIHtcblxuICAgIGNvbnN0IGxhdDogc3RyaW5nID0gZXZ0LmxhdGxuZy5sYXQudG9GaXhlZCgzKTtcbiAgICBjb25zdCBsbmc6IHN0cmluZyA9IGV2dC5sYXRsbmcubG5nLnRvRml4ZWQoMyk7XG5cbiAgICBsZXQgdmFsdWUgPSBOYU47XG4gICAgbGV0IHZhbHVlTGF0ID0gTmFOLCB2YWx1ZUxuZyA9IE5hTiwgdmFsdWVMYXQyID0gTmFOLCB2YWx1ZUxuZzIgPSBOYU47XG4gICAgaWYgKHRoaXMuY3VycmVudEZyYW1lQ29udGFpbmVyKSB7XG4gICAgICBjb25zdCB2YWx1ZVNlbGVjdGVkID0gKHRoaXMuY3VycmVudEZyYW1lQ29udGFpbmVyLnZhbHVlcyBhcyBDYXJ0ZXNpYW5NYXBWYWx1ZVtdKVxuICAgICAgICAuZmlsdGVyKCh2OiBDYXJ0ZXNpYW5NYXBWYWx1ZSkgPT4ge1xuICAgICAgICAgIHJldHVybiB2LmxhdCA8PSBldnQubGF0bG5nLmxhdCAmJiBldnQubGF0bG5nLmxhdCA8IHYubGF0MiAmJlxuICAgICAgICAgICAgdi5sbmcgPD0gZXZ0LmxhdGxuZy5sbmcgJiYgZXZ0LmxhdGxuZy5sbmcgPCB2LmxuZzI7XG4gICAgICAgIH0pO1xuXG4gICAgICBpZiAodmFsdWVTZWxlY3RlZC5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgdmFsdWUgPSBNYXRoLnJvdW5kKHZhbHVlU2VsZWN0ZWRbMF0udmFsdWUgKiAxMDAwKSAvIDEwMDA7XG4gICAgICAgIHZhbHVlTGF0ID0gTWF0aC5yb3VuZCh2YWx1ZVNlbGVjdGVkWzBdLmxhdCAqIDEwMDApIC8gMTAwMDtcbiAgICAgICAgdmFsdWVMbmcgPSBNYXRoLnJvdW5kKHZhbHVlU2VsZWN0ZWRbMF0ubG5nICogMTAwMCkgLyAxMDAwO1xuICAgICAgICB2YWx1ZUxhdDIgPSBNYXRoLnJvdW5kKHZhbHVlU2VsZWN0ZWRbMF0ubGF0MiAqIDEwMDApIC8gMTAwMDtcbiAgICAgICAgdmFsdWVMbmcyID0gTWF0aC5yb3VuZCh2YWx1ZVNlbGVjdGVkWzBdLmxuZzIgKiAxMDAwKSAvIDEwMDA7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBjb25zb2xlLndhcm4oJ3ZhbHVlU2VsZWN0ZWQgaXNzdWUgPycsIHZhbHVlU2VsZWN0ZWQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMubmdab25lLnJ1bigoKSA9PiB7XG4gICAgICB0aGlzLm1jVGV4dCA9IGBMYXRpdHVkZTogJHtsYXR9ICZuYnNwOyAmbmJzcDsgTG9uZ2l0dWRlOiAke2xuZ30gJm5ic3A7ICZuYnNwOyBWYWx1ZTogWyR7dmFsdWVMYXR9ICR7dmFsdWVMbmd9IHwgJHt2YWx1ZUxhdDJ9ICR7dmFsdWVMbmcyfV0gJHt2YWx1ZX1gO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBvbk1hcENsaWNrKGV2dDogYW55KTogdm9pZCB7XG4gICAgdGhpcy5zZWxlY3RlZE1hcmtlci5lbWl0KG5ldyBNYXBMYXRMbmcoXG4gICAgICBldnQubGF0bG5nPy5sYXQsIGV2dC5sYXRsbmc/LmxuZywgdW5kZWZpbmVkLFxuICAgICAgZXZ0LmlkLCBldnQubmFtZSkpO1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignd2luZG93OnJlc2l6ZScsIFsnJGV2ZW50J10pXG4gIHByaXZhdGUgb25SZXNpemUoZXZlbnQ6IGFueSk6IHZvaWQge1xuICAgIHRoaXMudXBkYXRlTWFwU2l6ZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVNYXBTaXplKCk6IHZvaWQge1xuXG4gICAgY29uc3QgbWFwRGl2V2lkdGggPSB0aGlzLm1hcERpdlJlZi5uYXRpdmVFbGVtZW50LnBhcmVudE5vZGU/LnBhcmVudE5vZGVbJ2NsaWVudFdpZHRoJ107XG4gICAgY29uc3QgcGFkZGluZyA9IDIxO1xuICAgIGxldCBjdXJyZW50V2lkdGggPSBtYXBEaXZXaWR0aCB8fFxuICAgICAgKHdpbmRvdy5pbm5lcldpZHRoIHx8IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRXaWR0aCB8fCBkb2N1bWVudC5ib2R5LmNsaWVudFdpZHRoKTtcbiAgICBjb25zdCBjdXJyZW50SGVpZ2h0ID0gdGhpcy5jdXJyZW50SGVpZ2h0IHx8XG4gICAgICAod2luZG93LmlubmVySGVpZ2h0IHx8IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQgfHwgZG9jdW1lbnQuYm9keS5jbGllbnRIZWlnaHQpO1xuICAgIGN1cnJlbnRXaWR0aCAtPSBwYWRkaW5nO1xuICAgIHRoaXMuY3VycmVudFdpZHRoID0gY3VycmVudFdpZHRoO1xuICAgIHRoaXMuY3VycmVudEhlaWdodCA9IGN1cnJlbnRIZWlnaHQ7XG5cbiAgICB0aGlzLm5nWm9uZS5ydW4oKCkgPT4ge1xuICAgICAgdGhpcy5vblNpemVDaGFuZ2VkKCk7XG4gICAgfSk7XG4gIH1cblxufVxuIiwiPGlvbi1ncmlkPlxuXG4gIDxpb24tcm93IGNsYXNzPVwiaW9uLWFsaWduLWl0ZW1zLWVuZFwiPlxuICAgIDxpb24tY29sIGlkPVwibWFwLWJ1dHRvbnNcIiBzaXplLXNtPVwiM1wiPlxuICAgICAgPGlvbi1idXR0b24gKGNsaWNrKT1cInByZXZpb3VzKClcIiBjb2xvcj1cIm1lZGl1bVwiIGZpbGw9XCJvdXRsaW5lXCIgc2hhcGU9XCJyb3VuZFwiPlxuICAgICAgICA8aW9uLWljb24gbmFtZT1cInBsYXktYmFja1wiIHNsb3Q9XCJpY29uLW9ubHlcIj48L2lvbi1pY29uPlxuICAgICAgPC9pb24tYnV0dG9uPlxuICAgICAgPCEtLVxuICAgICAgPGlvbi1idXR0b24gKGNsaWNrKT1cInBsYXkoKVwiIFtoaWRkZW5dPVwiYXV0b3BsYXlcIiBjb2xvcj1cIm1lZGl1bVwiIGZpbGw9XCJvdXRsaW5lXCJcbiAgICAgICAgICAgICAgICAgIHNoYXBlPVwicm91bmRcIj5cbiAgICAgICAgPGlvbi1pY29uIG5hbWU9XCJwbGF5XCIgc2xvdD1cImljb24tb25seVwiPjwvaW9uLWljb24+XG4gICAgICA8L2lvbi1idXR0b24+XG4gICAgICAtLT5cbiAgICAgIDxpb24tYnV0dG9uIChjbGljayk9XCJzdG9wKClcIiBbaGlkZGVuXT1cIiFhdXRvcGxheVwiIGNvbG9yPVwibWVkaXVtXCIgZmlsbD1cIm91dGxpbmVcIlxuICAgICAgICAgICAgICAgICAgc2hhcGU9XCJyb3VuZFwiPlxuICAgICAgICA8aW9uLWljb24gbmFtZT1cInN0b3BcIiBzbG90PVwiaWNvbi1vbmx5XCI+PC9pb24taWNvbj5cbiAgICAgIDwvaW9uLWJ1dHRvbj5cblxuICAgICAgPGlvbi1idXR0b24gKGNsaWNrKT1cIm5leHQoKVwiIGNvbG9yPVwibWVkaXVtXCIgZmlsbD1cIm91dGxpbmVcIiBzaGFwZT1cInJvdW5kXCI+XG4gICAgICAgIDxpb24taWNvbiBuYW1lPVwicGxheS1mb3J3YXJkXCIgc2xvdD1cImljb24tb25seVwiPjwvaW9uLWljb24+XG4gICAgICA8L2lvbi1idXR0b24+XG4gICAgPC9pb24tY29sPlxuXG4gICAgPCEtLVxuICAgIDxpb24tY29sIGlkPVwibWFwLXRpbWVmcmFtZVwiIHNpemUtc209XCI0XCI+XG4gICAgICA8aW9uLXNlbGVjdCAoaW9uQ2hhbmdlKT1cInNob3dUaW1lZnJhbWUoKVwiIFsobmdNb2RlbCldPVwidGltZWZyYW1lTmFtZVRvU2hvd1wiIFt2YWx1ZV09XCJ0aW1lZnJhbWVOYW1lVG9TaG93XCJcbiAgICAgICAgICAgICAgICAgIGludGVyZmFjZT1cInBvcG92ZXJcIiBwbGFjZWhvbGRlcj1cIk5hbWVcIj5cbiAgICAgICAgPGlvbi1zZWxlY3Qtb3B0aW9uICpuZ0Zvcj1cImxldCBuYW1lIG9mIHBvc3NpYmxlTmFtZXNcIiBbdmFsdWVdPVwibmFtZVwiPnt7IG5hbWUgfX08L2lvbi1zZWxlY3Qtb3B0aW9uPlxuICAgICAgPC9pb24tc2VsZWN0PlxuICAgIDwvaW9uLWNvbD4gLS0+XG5cbiAgICA8aW9uLWNvbCBjbGFzcz1cImlvbi10ZXh0LXN0YXJ0XCIgaWQ9XCJtYXAtZGF0ZVwiPlxuICAgICAgPGlvbi1zZWxlY3QgKGlvbkRpc21pc3MpPVwic2hvd1RpbWVmcmFtZSgpXCIgWyhuZ01vZGVsKV09XCJkYXRlVG9TaG93QXNTdHJpbmdcIiBpbnRlcmZhY2U9XCJwb3BvdmVyXCJcbiAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiUGVyaW9kXCIgdmFsdWU9XCJ7e2RhdGVUb1Nob3dBc1N0cmluZ319XCI+XG4gICAgICAgIDxpb24tc2VsZWN0LW9wdGlvbiAqbmdGb3I9XCJsZXQgZGF0ZVRvU2VsZWN0IG9mIHBvc3NpYmxlRGF0ZXNcIiB2YWx1ZT1cInt7ZGF0ZVRvU2VsZWN0LnRvSVNPU3RyaW5nKCl9fVwiPlxuICAgICAgICAgIHt7IGRhdGVUb1NlbGVjdCB8IGRhdGU6J3l5eXktTU0tZGQgSEg6bW0nIH19XG4gICAgICAgIDwvaW9uLXNlbGVjdC1vcHRpb24+XG4gICAgICA8L2lvbi1zZWxlY3Q+XG4gICAgPC9pb24tY29sPlxuICAgIDxpb24tY29sPlxuICAgICAgPGlvbi10b2dnbGUgKGlvbkNoYW5nZSk9XCJjaGFuZ2VTaG93TWFya2VycygpXCIgWyhuZ01vZGVsKV09XCJzaG93TWFya2Vyc1wiIFtjaGVja2VkXT1cInNob3dNYXJrZXJzXCI+PC9pb24tdG9nZ2xlPlxuICAgIDwvaW9uLWNvbD5cbiAgPC9pb24tcm93PlxuXG4gIDxpb24tcm93PlxuICAgIDxpb24tY29sPlxuICAgICAgPGRpdiBpZD1cIm1hcC1jb250YWluZXJcIj5cbiAgICAgICAgPGRpdiAjcHJpbWFyeU1hcCBpZD1cIm1hcC1kaXZcIj48L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvaW9uLWNvbD5cbiAgICA8aW9uLWNvbCBjbGFzcz1cImlvbi1oaWRlLXhsLWRvd25cIj5cbiAgICAgIDxpb24taW1nIGlkPVwibWFwLXJhbmdlXCIgc3JjPVwiYXNzZXRzL3Iycl9yYW5nZS5zdmdcIi8+XG4gICAgPC9pb24tY29sPlxuICA8L2lvbi1yb3c+XG5cbiAgPGlvbi1yb3c+XG4gICAgPGlvbi1jb2wgc2l6ZS1zbT1cIjZcIj5cbiAgICAgIDxzcGFuIFtpbm5lckhUTUxdPVwibWNUZXh0XCI+PC9zcGFuPlxuICAgIDwvaW9uLWNvbD5cbiAgICA8aW9uLWNvbCBzaXplLXNtPVwiM1wiPlxuICAgICAgPGlvbi1idXR0b24gZGlzYWJsZWQ9XCJ0cnVlXCIgZmlsbD1cImNsZWFyXCI+e3sgc3VtUmVzdWx0IH19PC9pb24tYnV0dG9uPlxuICAgIDwvaW9uLWNvbD5cbiAgICA8aW9uLWNvbCBzaXplLXNtPVwiM1wiPlxuICAgICAgPGlvbi1idXR0b24gZGlzYWJsZWQ9XCJ0cnVlXCIgZmlsbD1cImNsZWFyXCI+e3sgZGF0ZVRvU2hvdz8udG9JU09TdHJpbmcoKSB9fTwvaW9uLWJ1dHRvbj5cbiAgICA8L2lvbi1jb2w+XG4gIDwvaW9uLXJvdz5cblxuPC9pb24tZ3JpZD5cbiJdfQ==
|
|
303
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmFhaW4tbWFwLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hcHAvc2hhcmVkL3JhYWluLW1hcC9yYWFpbi1tYXAuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vc3JjL2FwcC9zaGFyZWQvcmFhaW4tbWFwL3JhYWluLW1hcC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUwsU0FBUyxFQUVULFlBQVksRUFDWixZQUFZLEVBQ1osS0FBSyxFQUlMLE1BQU0sRUFFTixTQUFTLEVBQ1YsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFvQixlQUFlLEVBQThCLFNBQVMsRUFBc0IsTUFBTSxVQUFVLENBQUM7Ozs7O0FBT3hILE1BQU0sT0FBTyxpQkFBaUI7SUFnRTVCLFlBQW9CLE1BQWM7UUFBZCxXQUFNLEdBQU4sTUFBTSxDQUFRO1FBaEQzQixhQUFRLEdBQUcsS0FBSyxDQUFDO1FBRWpCLGdCQUFXLEdBQUcsSUFBSSxDQUFDO1FBTW5CLG1CQUFjLEdBQVcsRUFBRSxDQUFDO1FBVzVCLG1CQUFjLEdBQUcsSUFBSSxZQUFZLEVBQWEsQ0FBQztRQUcvQyxnQkFBVyxHQUFHLElBQUksWUFBWSxFQUFRLENBQUM7UUEyQjVDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUVkLGNBQWM7UUFDZCxNQUFNLFFBQVEsR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLG1CQUFtQjtRQUM5QyxNQUFNLFVBQVUsR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLCtEQUErRDtRQUM1RixNQUFNLFNBQVMsR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUMzQixNQUFNLFdBQVcsR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUM3QixNQUFNLFdBQVcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUs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LEtBQUs7Z0JBR0MsT0FBTztzQkFEYixLQUFLO2dCQVVDLG1CQUFtQjtzQkFEekIsS0FBSztnQkFHQyxRQUFRO3NCQURkLEtBQUs7Z0JBR0MsV0FBVztzQkFEakIsS0FBSztnQkFHQyxhQUFhO3NCQURuQixLQUFLO2dCQUtDLGNBQWM7c0JBRHBCLEtBQUs7Z0JBR0MsV0FBVztzQkFEakIsS0FBSztnQkFJQyxTQUFTO3NCQURmLEtBQUs7Z0JBR0MsS0FBSztzQkFEWCxLQUFLO2dCQUtDLGNBQWM7c0JBRHBCLE1BQU07Z0JBSUEsV0FBVztzQkFEakIsTUFBTTtnQkFhRyxTQUFTO3NCQURsQixTQUFTO3VCQUFDLFlBQVk7Z0JBMFNmLFFBQVE7c0JBRGYsWUFBWTt1QkFBQyxlQUFlLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBZnRlclZpZXdDaGVja2VkLFxuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgSG9zdExpc3RlbmVyLFxuICBJbnB1dCxcbiAgTmdab25lLFxuICBPbkNoYW5nZXMsXG4gIE9uRGVzdHJveSxcbiAgT3V0cHV0LFxuICBTaW1wbGVDaGFuZ2VzLFxuICBWaWV3Q2hpbGRcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0ljb25PcHRpb25zfSBmcm9tICdsZWFmbGV0JztcbmltcG9ydCB7Q2FydGVzaWFuTWFwVmFsdWUsIEVsZW1lbnRzRmFjdG9yeSwgRnJhbWVDb250YWluZXIsIE1hcEVsZW1lbnQsIE1hcExhdExuZywgVGltZWZyYW1lQ29udGFpbmVyc30gZnJvbSAncmFhaW4tdWknO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdyYWFpbi1tYXAnLFxuICB0ZW1wbGF0ZVVybDogJy4vcmFhaW4tbWFwLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vcmFhaW4tbWFwLmNvbXBvbmVudC5zY3NzJ10sXG59KVxuZXhwb3J0IGNsYXNzIFJhYWluTWFwQ29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3Q2hlY2tlZCwgT25EZXN0cm95LCBPbkNoYW5nZXMge1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBjb29yZGluYXRlczogTWFwTGF0TG5nO1xuICBASW5wdXQoKVxuICBwdWJsaWMgbWFya2Vyczoge1xuICAgIGdhdWdlczogTWFwTGF0TG5nW10sXG4gICAgc2VsZWN0ZWRHYXVnZXM6IE1hcExhdExuZ1tdLFxuICAgIHBpeGVsczogTWFwTGF0TG5nW10sXG4gICAgYm9yZGVyczogTWFwTGF0TG5nW10sXG4gICAgZ2F1Z2VzSW5Db21wYXJlOiBNYXBMYXRMbmdbXSxcbiAgICBwaXhlbHNTb2x1dGlvbjogTWFwTGF0TG5nW10sXG4gIH07XG4gIEBJbnB1dCgpXG4gIHB1YmxpYyB0aW1lZnJhbWVDb250YWluZXJzOiBUaW1lZnJhbWVDb250YWluZXJzO1xuICBASW5wdXQoKVxuICBwdWJsaWMgYXV0b3BsYXkgPSBmYWxzZTtcbiAgQElucHV0KClcbiAgcHVibGljIHNob3dNYXJrZXJzID0gdHJ1ZTtcbiAgQElucHV0KClcbiAgcHVibGljIGN1cnJlbnRIZWlnaHQ6IG51bWJlcjtcbiAgcHVibGljIGN1cnJlbnRXaWR0aDogbnVtYmVyO1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyB0aW1lZnJhbWVEYXRlczogRGF0ZVtdID0gW107XG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBkZWZhdWx0RGF0ZTogRGF0ZTtcblxuICBASW5wdXQoKVxuICBwdWJsaWMgc3VtVmFsdWVzOiBhbnk7XG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzdW1GbjogYW55O1xuICBwdWJsaWMgc3VtUmVzdWx0OiBzdHJpbmc7XG5cbiAgQE91dHB1dCgpXG4gIHB1YmxpYyBzZWxlY3RlZE1hcmtlciA9IG5ldyBFdmVudEVtaXR0ZXI8TWFwTGF0TG5nPigpO1xuXG4gIEBPdXRwdXQoKVxuICBwdWJsaWMgY2hhbmdlZERhdGUgPSBuZXcgRXZlbnRFbWl0dGVyPERhdGU+KCk7XG5cbiAgcHVibGljIG1jVGV4dDtcbiAgcHVibGljIG5leHREYXRlOiBEYXRlO1xuICBwdWJsaWMgcG9zc2libGVOYW1lczogc3RyaW5nW107XG4gIHB1YmxpYyBwb3NzaWJsZURhdGVzOiBEYXRlW107XG4gIHB1YmxpYyBkYXRlVG9TaG93OiBEYXRlO1xuICBwdWJsaWMgZGF0ZVRvU2hvd0FzU3RyaW5nOiBzdHJpbmc7XG4gIHB1YmxpYyB0aW1lZnJhbWVOYW1lVG9TaG93OiBzdHJpbmc7XG4gIHByb3RlY3RlZCBjdXJyZW50RnJhbWVDb250YWluZXI6IEZyYW1lQ29udGFpbmVyO1xuXG4gIEBWaWV3Q2hpbGQoJ3ByaW1hcnlNYXAnKVxuICBwcm90ZWN0ZWQgbWFwRGl2UmVmOiBFbGVtZW50UmVmO1xuXG4gIHByaXZhdGUgbWFwRWxlbWVudDogTWFwRWxlbWVudDtcbiAgcHJpdmF0ZSBvblNpemVDaGFuZ2VkO1xuICBwcml2YXRlIGNyZWF0ZWQ7XG4gIHByaXZhdGUgaWNvbk9wdGlvbnM6IHtcbiAgICBnYXVnZXM6IEljb25PcHRpb25zLFxuICAgIHNlbGVjdGVkR2F1Z2VzOiBJY29uT3B0aW9ucyxcbiAgICBwaXhlbHM6IEljb25PcHRpb25zLFxuICAgIGJvcmRlcnM6IEljb25PcHRpb25zLFxuICAgIGdhdWdlc0luQ29tcGFyZTogSWNvbk9wdGlvbnMsXG4gICAgcGl4ZWxzU29sdXRpb246IEljb25PcHRpb25zLFxuICB9O1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgbmdab25lOiBOZ1pvbmUpIHtcbiAgICB0aGlzLmRlbGV0ZSgpO1xuXG4gICAgLy8gc2hhZG93VXJsID9cbiAgICBjb25zdCBpY29uU2l6ZSA9IFs0MCwgNDBdOyAvLyBzaXplIG9mIHRoZSBpY29uXG4gICAgY29uc3QgaWNvbkFuY2hvciA9IFsyMCwgMjBdOyAvLyBwb2ludCBvZiB0aGUgaWNvbiB3aGljaCB3aWxsIGNvcnJlc3BvbmQgdG8gbWFya2VyJ3MgbG9jYXRpb25cbiAgICBjb25zdCBwaXhlbFNpemUgPSBbNDEsIDQxXTtcbiAgICBjb25zdCBwaXhlbEFuY2hvciA9IFsyMCwgMjBdO1xuICAgIGNvbnN0IHBvcHVwQW5jaG9yID0gWzAsIC0yMF07IC8vIHBvaW50IGZyb20gd2hpY2ggdGhlIHBvcHVwIHNob3VsZCBvcGVuIHJlbGF0aXZlIHRvIHRoZSBpY29uQW5jaG9yXG4gICAgdGhpcy5pY29uT3B0aW9ucyA9IHtcbiAgICAgIGdhdWdlczoge2ljb25Vcmw6ICcuL2Fzc2V0cy9tYXBzL21hcmtlci1wbHV2aW8ucG5nJywgaWNvblNpemUsIGljb25BbmNob3IsIHBvcHVwQW5jaG9yfSxcbiAgICAgIGdhdWdlc0luQ29tcGFyZToge2ljb25Vcmw6ICcuL2Fzc2V0cy9tYXBzL21hcmtlci1wbHV2aW8tZGlhZy5wbmcnLCBpY29uU2l6ZSwgaWNvbkFuY2hvciwgcG9wdXBBbmNob3J9LFxuICAgICAgc2VsZWN0ZWRHYXVnZXM6IHtpY29uVXJsOiAnLi9hc3NldHMvbWFwcy9tYXJrZXItcGx1dmlvLWRpYWctc2VsZWN0LnBuZycsIGljb25TaXplLCBpY29uQW5jaG9yLCBwb3B1cEFuY2hvcn0sXG4gICAgICBwaXhlbHM6IHtpY29uVXJsOiAnLi9hc3NldHMvbWFwcy9tYXJrZXItcmFpbi5wbmcnLCBpY29uU2l6ZSwgaWNvbkFuY2hvciwgcG9wdXBBbmNob3J9LFxuICAgICAgcGl4ZWxzU29sdXRpb246IHtpY29uVXJsOiAnLi9hc3NldHMvbWFwcy9tYXJrZXItcmFpbjIucG5nJywgaWNvblNpemU6IHBpeGVsU2l6ZSwgaWNvbkFuY2hvcjogcGl4ZWxBbmNob3IsIHBvcHVwQW5jaG9yfSxcbiAgICAgIGJvcmRlcnM6IHtpY29uVXJsOiAnLi9hc3NldHMvbWFwcy9tYXJrZXItc2hhZG93LnBuZycsIGljb25TaXplLCBpY29uQW5jaG9yLCBwb3B1cEFuY2hvcn0sXG4gICAgfTtcbiAgfVxuXG4gIHB1YmxpYyBuZ0FmdGVyVmlld0NoZWNrZWQoKTogdm9pZCB7XG4gICAgdGhpcy5jcmVhdGUoKTtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgdGhpcy5jaGFuZ2UoY2hhbmdlcyk7XG4gIH1cblxuICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5kZWxldGUoKTtcbiAgfVxuXG4gIHB1YmxpYyBzaG93VGltZWZyYW1lKGZvcmNlID0gZmFsc2UpIHtcblxuICAgIC8vIGNvbnN0IHtmcmFtZUNvbnRhaW5lciwgbGF5ZXJ9ID0gdGhpcy50aW1lZnJhbWVDb250YWluZXJzLnNob3dUaW1lZnJhbWUodGhpcy50aW1lZnJhbWVOYW1lVG9TaG93KTtcbiAgICAvLyB0aGlzLmN1cnJlbnRGcmFtZUNvbnRhaW5lciA9IGZyYW1lQ29udGFpbmVyO1xuXG4gICAgaWYgKCF0aGlzLmRhdGVUb1Nob3dBc1N0cmluZ1xuICAgICAgfHwgKCFmb3JjZSAmJiBuZXcgRGF0ZSh0aGlzLmRhdGVUb1Nob3dBc1N0cmluZykuZ2V0VGltZSgpID09PSB0aGlzLmRhdGVUb1Nob3c/LmdldFRpbWUoKSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmRhdGVUb1Nob3cgPSBuZXcgRGF0ZSh0aGlzLmRhdGVUb1Nob3dBc1N0cmluZyk7XG4gICAgdGhpcy5jaGFuZ2VkRGF0ZS5lbWl0KHRoaXMuZGF0ZVRvU2hvdyk7XG4gIH1cblxuICBwdWJsaWMgbmV4dCgpIHtcbiAgICBpZiAoIXRoaXMucG9zc2libGVEYXRlcyB8fCB0aGlzLnBvc3NpYmxlRGF0ZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgaW5kZXggPSB0aGlzLmdldERhdGVUb1Nob3dJbmRleCgpO1xuICAgIHRoaXMuZGF0ZVRvU2hvdyA9IChpbmRleCArIDEpIDwgdGhpcy5wb3NzaWJsZURhdGVzLmxlbmd0aCA/IHRoaXMucG9zc2libGVEYXRlc1tpbmRleCArIDFdIDogdGhpcy5wb3NzaWJsZURhdGVzWzBdO1xuICAgIHRoaXMuZGF0ZVRvU2hvd0FzU3RyaW5nID0gdGhpcy5kYXRlVG9TaG93LnRvSVNPU3RyaW5nKCk7XG5cbiAgICB0aGlzLnNob3dUaW1lZnJhbWUodHJ1ZSk7XG4gICAgaWYgKHRoaXMuYXV0b3BsYXkpIHtcbiAgICAgIHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHRoaXMubmV4dCgpLCAyMDAwKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgcHJldmlvdXMoKSB7XG4gICAgdGhpcy5zdG9wKCk7XG4gICAgaWYgKCF0aGlzLnBvc3NpYmxlRGF0ZXMgfHwgdGhpcy5wb3NzaWJsZURhdGVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGluZGV4ID0gdGhpcy5nZXREYXRlVG9TaG93SW5kZXgoKTtcbiAgICB0aGlzLmRhdGVUb1Nob3cgPSBpbmRleCA+IDAgPyB0aGlzLnBvc3NpYmxlRGF0ZXNbaW5kZXggLSAxXSA6IHRoaXMucG9zc2libGVEYXRlc1swXTtcbiAgICB0aGlzLmRhdGVUb1Nob3dBc1N0cmluZyA9IHRoaXMuZGF0ZVRvU2hvdy50b0lTT1N0cmluZygpO1xuXG4gICAgdGhpcy5zaG93VGltZWZyYW1lKHRydWUpO1xuICB9XG5cbiAgcHVibGljIHBsYXkoKSB7XG4gICAgdGhpcy5hdXRvcGxheSA9IHRydWU7XG4gICAgdGhpcy5uZXh0KCk7XG4gIH1cblxuICBwdWJsaWMgc3RvcCgpIHtcbiAgICB0aGlzLmF1dG9wbGF5ID0gZmFsc2U7XG4gIH1cblxuICBwdWJsaWMgY2hhbmdlU2hvd01hcmtlcnMoKSB7XG4gICAgaWYgKCF0aGlzLm1hcEVsZW1lbnQ/Lm1hcmtlcnNMYXllciB8fCAhdGhpcy5tYXBFbGVtZW50Py5tYXBMZWFmbGV0KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuc2hvd01hcmtlcnMpIHtcbiAgICAgIHRoaXMubWFwRWxlbWVudC5tYXJrZXJzTGF5ZXIuYWRkVG9NYXAodGhpcy5tYXBFbGVtZW50Lm1hcExlYWZsZXQpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLm1hcEVsZW1lbnQubWFya2Vyc0xheWVyLnJlbW92ZUZyb21NYXAodGhpcy5tYXBFbGVtZW50Lm1hcExlYWZsZXQpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlKCkge1xuXG4gICAgY29uc3QgY3JlYXRlZCA9IHRoaXMuY3JlYXRlZDtcbiAgICBpZiAoY3JlYXRlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmNyZWF0ZWQgPSB0cnVlO1xuICAgIGNvbnN0IG1hcmtlcnMgPSBbXG4gICAgICB7aWNvbnNMYXRMbmc6IHRoaXMubWFya2Vycy5nYXVnZXMsIGljb25zT3B0aW9uczogdGhpcy5pY29uT3B0aW9ucy5nYXVnZXN9LFxuICAgICAge2ljb25zTGF0TG5nOiB0aGlzLm1hcmtlcnMuc2VsZWN0ZWRHYXVnZXMsIGljb25zT3B0aW9uczogdGhpcy5pY29uT3B0aW9ucy5zZWxlY3RlZEdhdWdlc30sXG4gICAgICB7aWNvbnNMYXRMbmc6IHRoaXMubWFya2Vycy5nYXVnZXNJbkNvbXBhcmUsIGljb25zT3B0aW9uczogdGhpcy5pY29uT3B0aW9ucy5nYXVnZXNJbkNvbXBhcmV9LFxuICAgICAge2ljb25zTGF0TG5nOiB0aGlzLm1hcmtlcnMucGl4ZWxzLCBpY29uc09wdGlvbnM6IHRoaXMuaWNvbk9wdGlvbnMucGl4ZWxzfSxcbiAgICAgIHtpY29uc0xhdExuZzogdGhpcy5tYXJrZXJzLnBpeGVsc1NvbHV0aW9uLCBpY29uc09wdGlvbnM6IHRoaXMuaWNvbk9wdGlvbnMucGl4ZWxzU29sdXRpb259LFxuICAgICAgLy8ge2ljb25zTGF0TG5nOiB0aGlzLm1hcmtlcnMuYm9yZGVycywgaWNvbnNPcHRpb25zOiB0aGlzLmljb25PcHRpb25zLmJvcmRlcnN9LFxuICAgIF07XG5cbiAgICBjb25zdCBmYWN0b3J5ID0gbmV3IEVsZW1lbnRzRmFjdG9yeSh0aGlzLmNvb3JkaW5hdGVzLCB0cnVlKTtcbiAgICB0aGlzLm5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcblxuICAgICAgICBjb25zdCBjcmVhdGVkT3V0c2lkZSA9IHRoaXMuY3JlYXRlZDtcbiAgICAgICAgaWYgKCFjcmVhdGVkT3V0c2lkZSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMubWFwRWxlbWVudCA9IGZhY3RvcnkuY3JlYXRlTWFwKHRoaXMubWFwRGl2UmVmLm5hdGl2ZUVsZW1lbnQsIHt0aW1lZnJhbWVDb250YWluZXJzOiB0aGlzLnRpbWVmcmFtZUNvbnRhaW5lcnMsIG1hcmtlcnN9KTtcblxuICAgICAgICB0aGlzLm1hcEVsZW1lbnQubWFwTGVhZmxldD8ub24oJ21vdXNlbW92ZScsIChldnQpID0+IHRoaXMub25NYXBNb3VzZU1vdmUoZXZ0KSk7XG4gICAgICAgIHRoaXMubWFwRWxlbWVudC5tYXJrZXJzUHJvZHVjZWQ/LmZvckVhY2gobSA9PiBtLm9uKCdjbGljaycsIGV2dCA9PiB0aGlzLm9uTWFwQ2xpY2soZXZ0KSkpO1xuICAgICAgICB0aGlzLm9uU2l6ZUNoYW5nZWQgPSAoKSA9PiB7XG4gICAgICAgICAgdGhpcy5tYXBFbGVtZW50Lm1hcmtlcnNMYXllcj8uc2V0Q3VycmVudFdpZHRoKHRoaXMuY3VycmVudFdpZHRoKTtcbiAgICAgICAgICB0aGlzLm1hcEVsZW1lbnQubWFya2Vyc0xheWVyPy5zZXRDdXJyZW50SGVpZ2h0KHRoaXMuY3VycmVudEhlaWdodCk7XG4gICAgICAgICAgdGhpcy5tYXBFbGVtZW50LmNvbXBvc2l0ZUxheWVyPy5zZXRDdXJyZW50V2lkdGgodGhpcy5jdXJyZW50V2lkdGgpO1xuICAgICAgICAgIHRoaXMubWFwRWxlbWVudC5jb21wb3NpdGVMYXllcj8uc2V0Q3VycmVudEhlaWdodCh0aGlzLmN1cnJlbnRIZWlnaHQpO1xuICAgICAgICAgIHRoaXMubWFwRWxlbWVudC5tYXBMZWFmbGV0Py5pbnZhbGlkYXRlU2l6ZSh7YW5pbWF0ZTogdHJ1ZX0pO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudXBkYXRlTWFwU2l6ZSgpO1xuICAgICAgICAvLyB0aGlzLnRpbWVmcmFtZU5hbWVUb1Nob3cgPSB0aGlzLnBvc3NpYmxlTmFtZXMubGVuZ3RoID4gMCA/IHRoaXMucG9zc2libGVOYW1lc1swXSA6IG51bGw7XG4gICAgICAgIC8vIHRoaXMudG9nZ2xlSGlkZU1hcmtlcnMoIXRoaXMuaGlkZU1hcmtlcnMpO1xuICAgICAgICB0aGlzLmNoYW5nZU5hdmlnYXRpb24odGhpcy5kZWZhdWx0RGF0ZSk7XG4gICAgICB9LCAxMDApO1xuICAgIH0pO1xuXG4gIH1cblxuICBwcml2YXRlIGRlbGV0ZSgpIHtcbiAgICB0aGlzLm1hcEVsZW1lbnQ/Lm1hcExlYWZsZXQ/LnJlbW92ZSgpO1xuICAgIHRoaXMubWFwRWxlbWVudCA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLm1jVGV4dCA9ICcnO1xuICAgIHRoaXMubmV4dERhdGUgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5wb3NzaWJsZU5hbWVzID0gW107XG4gICAgdGhpcy5wb3NzaWJsZURhdGVzID0gW107XG4gICAgdGhpcy50aW1lZnJhbWVOYW1lVG9TaG93ID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuZGF0ZVRvU2hvdyA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLmRhdGVUb1Nob3dBc1N0cmluZyA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLm9uU2l6ZUNoYW5nZWQgPSAoKSA9PiB7XG4gICAgfTtcbiAgICB0aGlzLmN1cnJlbnRGcmFtZUNvbnRhaW5lciA9IG51bGw7XG5cbiAgICB0aGlzLmNyZWF0ZWQgPSBmYWxzZTtcbiAgfVxuXG4gIHByaXZhdGUgY2hhbmdlKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcbiAgICAvLyBjb25zb2xlLmxvZygnbWFwIGNoYW5nZXMnLCBjaGFuZ2VzKTtcblxuICAgIGxldCBwb3NzaWJsZU5ld0RlZmF1bHREYXRlOiBEYXRlO1xuICAgIGlmIChjaGFuZ2VzLmRlZmF1bHREYXRlKSB7XG4gICAgICBpZiAobmV3IERhdGUoY2hhbmdlcy5kZWZhdWx0RGF0ZS5jdXJyZW50VmFsdWUpLmdldFRpbWUoKSA9PT0gbmV3IERhdGUoY2hhbmdlcy5kZWZhdWx0RGF0ZS5wcmV2aW91c1ZhbHVlKS5nZXRUaW1lKCkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgcG9zc2libGVOZXdEZWZhdWx0RGF0ZSA9IHRoaXMuZGVmYXVsdERhdGU7XG4gICAgfVxuXG4gICAgaWYgKGNoYW5nZXMubWFya2VycyAmJiB0aGlzLm1hcEVsZW1lbnQ/Lm1hcmtlcnNMYXllcikge1xuXG4gICAgICBjb25zdCBtYXJrZXJzID0gW1xuICAgICAgICB7aWNvbnNMYXRMbmc6IHRoaXMubWFya2Vycy5nYXVnZXMsIGljb25PcHRpb25zOiB0aGlzLmljb25PcHRpb25zLmdhdWdlc30sXG4gICAgICAgIHtpY29uc0xhdExuZzogdGhpcy5tYXJrZXJzLnNlbGVjdGVkR2F1Z2VzLCBpY29uT3B0aW9uczogdGhpcy5pY29uT3B0aW9ucy5zZWxlY3RlZEdhdWdlc30sXG4gICAgICAgIHtpY29uc0xhdExuZzogdGhpcy5tYXJrZXJzLmdhdWdlc0luQ29tcGFyZSwgaWNvbk9wdGlvbnM6IHRoaXMuaWNvbk9wdGlvbnMuZ2F1Z2VzSW5Db21wYXJlfSxcbiAgICAgICAge2ljb25zTGF0TG5nOiB0aGlzLm1hcmtlcnMucGl4ZWxzLCBpY29uT3B0aW9uczogdGhpcy5pY29uT3B0aW9ucy5waXhlbHN9LFxuICAgICAgICB7aWNvbnNMYXRMbmc6IHRoaXMubWFya2Vycy5waXhlbHNTb2x1dGlvbiwgaWNvbk9wdGlvbnM6IHRoaXMuaWNvbk9wdGlvbnMucGl4ZWxzU29sdXRpb259LFxuICAgICAgICAvLyAge2ljb25zTGF0TG5nOiB0aGlzLm1hcmtlcnMuYm9yZGVycywgaWNvbk9wdGlvbnM6IHRoaXMuaWNvbk9wdGlvbnMuYm9yZGVyc30sXG4gICAgICBdO1xuICAgICAgY29uc3QgbWFya2Vyc1Byb2R1Y2VkID0gdGhpcy5tYXBFbGVtZW50Lm1hcmtlcnNMYXllci5yZW5kZXIobWFya2VycykubWFya2VycztcbiAgICAgIGlmIChtYXJrZXJzUHJvZHVjZWQpIHtcbiAgICAgICAgbWFya2Vyc1Byb2R1Y2VkLmZvckVhY2gobSA9PiBtLm9uKCdjbGljaycsIGV2dCA9PiB0aGlzLm9uTWFwQ2xpY2soZXZ0KSkpO1xuICAgICAgICBpZiAodGhpcy5zaG93TWFya2Vycykge1xuICAgICAgICAgIHRoaXMubWFwRWxlbWVudC5tYXJrZXJzTGF5ZXIucmVtb3ZlRnJvbU1hcCh0aGlzLm1hcEVsZW1lbnQubWFwTGVhZmxldCk7XG4gICAgICAgICAgdGhpcy5tYXBFbGVtZW50Lm1hcmtlcnNMYXllci5hZGRUb01hcCh0aGlzLm1hcEVsZW1lbnQubWFwTGVhZmxldCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoY2hhbmdlcy5tYXJrZXJzICYmIHRoaXMubWFya2Vycy5zZWxlY3RlZEdhdWdlcy5sZW5ndGggPT09IDEpIHtcbiAgICAgIGNvbnN0IHNlbGVjdGVkR2F1Z2UgPSB0aGlzLm1hcmtlcnMuc2VsZWN0ZWRHYXVnZXNbMF07XG4gICAgICB0aGlzLm1hcEVsZW1lbnQubWFwTGVhZmxldC5zZXRWaWV3KHNlbGVjdGVkR2F1Z2UsIDEwKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5tYXBFbGVtZW50ICYmIGNoYW5nZXMudGltZWZyYW1lQ29udGFpbmVycykge1xuICAgICAgdGhpcy5tYXBFbGVtZW50LnVwZGF0ZU1hcFRpbWVmcmFtZSh0aGlzLnRpbWVmcmFtZUNvbnRhaW5lcnMpO1xuICAgICAgdGhpcy5jdXJyZW50RnJhbWVDb250YWluZXIgPSB0aGlzLnRpbWVmcmFtZUNvbnRhaW5lcnM/LmNvbnRhaW5lcnNbMF0/LnRpbWVmcmFtZVswXTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5tYXBFbGVtZW50Py5jb21wb3NpdGVMYXllciAmJiBjaGFuZ2VzLnN1bVZhbHVlcykge1xuICAgICAgY29uc3QgZHJhd2VyID0gdGhpcy5tYXBFbGVtZW50LmNvbXBvc2l0ZUxheWVyLmdldEZpcnN0RHJhd2VyKCk7XG4gICAgICB0aGlzLnN1bVJlc3VsdCA9IGRyYXdlcj8uZ2V0RXhlY09mVmlzaWJsZVBvaW50cyh0aGlzLnN1bVZhbHVlcywgdGhpcy5zdW1Gbik7XG4gICAgfVxuXG4gICAgdGhpcy5jaGFuZ2VOYXZpZ2F0aW9uKHBvc3NpYmxlTmV3RGVmYXVsdERhdGUpO1xuICB9XG5cbiAgcHJpdmF0ZSBjaGFuZ2VOYXZpZ2F0aW9uKGRlZmF1bHREYXRlPzogRGF0ZSkge1xuICAgIC8vIHVwZGF0ZSBwb3NzaWJsZSBuYW1lc1xuICAgIGlmICh0aGlzLnRpbWVmcmFtZUNvbnRhaW5lcnMgJiYgdGhpcy50aW1lZnJhbWVDb250YWluZXJzLmNvbnRhaW5lcnMubGVuZ3RoKSB7XG4gICAgICB0aGlzLnBvc3NpYmxlTmFtZXMgPSBbXTtcbiAgICAgIHRoaXMudGltZWZyYW1lQ29udGFpbmVycz8uY29udGFpbmVycy5mb3JFYWNoKGMgPT4ge1xuICAgICAgICBpZiAodGhpcy5wb3NzaWJsZU5hbWVzLmluZGV4T2YoYy5uYW1lKSA8IDApIHtcbiAgICAgICAgICB0aGlzLnBvc3NpYmxlTmFtZXMucHVzaChjLm5hbWUpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHRoaXMudGltZWZyYW1lTmFtZVRvU2hvdyA9IHRoaXMucG9zc2libGVOYW1lcy5sZW5ndGggPiAwID8gdGhpcy5wb3NzaWJsZU5hbWVzWzBdIDogbnVsbDtcbiAgICB9XG5cbiAgICAvLyB1cGRhdGUgcG9zc2libGUgZGF0ZXNcbiAgICB0aGlzLnBvc3NpYmxlRGF0ZXMgPSB0aGlzLnRpbWVmcmFtZURhdGVzO1xuICAgIGlmICghdGhpcy5wb3NzaWJsZURhdGVzIHx8IHRoaXMucG9zc2libGVEYXRlcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyB1cGRhdGUgZGF0ZVRvU2hvd1xuICAgIGlmIChkZWZhdWx0RGF0ZSAmJiB0aGlzLnBvc3NpYmxlRGF0ZXMuZmlsdGVyKGQgPT4gZC5nZXRUaW1lKCkgPT09IGRlZmF1bHREYXRlLmdldFRpbWUoKSkubGVuZ3RoID09PSAxKSB7XG4gICAgICB0aGlzLmRhdGVUb1Nob3cgPSBkZWZhdWx0RGF0ZTtcbiAgICB9XG4gICAgaWYgKCF0aGlzLmRhdGVUb1Nob3cgJiYgdGhpcy5wb3NzaWJsZURhdGVzLmxlbmd0aCA+IDAgJiZcbiAgICAgIHRoaXMucG9zc2libGVEYXRlcy5maWx0ZXIoZCA9PiBkLmdldFRpbWUoKSA9PT0gdGhpcy5kYXRlVG9TaG93Py5nZXRUaW1lKCkpLmxlbmd0aCAhPT0gMSkge1xuICAgICAgdGhpcy5kYXRlVG9TaG93ID0gdGhpcy5wb3NzaWJsZURhdGVzWzBdO1xuICAgIH1cbiAgICB0aGlzLmRhdGVUb1Nob3dBc1N0cmluZyA9IHRoaXMuZGF0ZVRvU2hvdy50b0lTT1N0cmluZygpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXREYXRlVG9TaG93SW5kZXgoKTogbnVtYmVyIHtcblxuICAgIGxldCBpbmRleCA9IDA7XG4gICAgZm9yIChjb25zdCBkYXRlIG9mIHRoaXMucG9zc2libGVEYXRlcykge1xuICAgICAgaWYgKGRhdGUudG9JU09TdHJpbmcoKS5zdWJzdHJpbmcoMCwgMTkpID09PSB0aGlzLmRhdGVUb1Nob3dBc1N0cmluZy5zdWJzdHJpbmcoMCwgMTkpKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgaW5kZXgrKztcbiAgICB9XG4gICAgcmV0dXJuIGluZGV4O1xuICB9XG5cbiAgcHJpdmF0ZSBvbk1hcE1vdXNlTW92ZShldnQ6IHsgbGF0bG5nOiB7IGxhdDogbnVtYmVyLCBsbmc6IG51bWJlciB9IH0pOiB2b2lkIHtcblxuICAgIGNvbnN0IGxhdDogc3RyaW5nID0gZXZ0LmxhdGxuZy5sYXQudG9GaXhlZCgzKTtcbiAgICBjb25zdCBsbmc6IHN0cmluZyA9IGV2dC5sYXRsbmcubG5nLnRvRml4ZWQoMyk7XG5cbiAgICBsZXQgdmFsdWUgPSBOYU47XG4gICAgbGV0IHZhbHVlTGF0ID0gTmFOLCB2YWx1ZUxuZyA9IE5hTiwgdmFsdWVMYXQyID0gTmFOLCB2YWx1ZUxuZzIgPSBOYU47XG4gICAgaWYgKHRoaXMuY3VycmVudEZyYW1lQ29udGFpbmVyKSB7XG4gICAgICBjb25zdCB2YWx1ZVNlbGVjdGVkID0gKHRoaXMuY3VycmVudEZyYW1lQ29udGFpbmVyLnZhbHVlcyBhcyBDYXJ0ZXNpYW5NYXBWYWx1ZVtdKVxuICAgICAgICAuZmlsdGVyKCh2OiBDYXJ0ZXNpYW5NYXBWYWx1ZSkgPT4ge1xuICAgICAgICAgIHJldHVybiB2LmxhdCA8PSBldnQubGF0bG5nLmxhdCAmJiBldnQubGF0bG5nLmxhdCA8IHYubGF0MiAmJlxuICAgICAgICAgICAgdi5sbmcgPD0gZXZ0LmxhdGxuZy5sbmcgJiYgZXZ0LmxhdGxuZy5sbmcgPCB2LmxuZzI7XG4gICAgICAgIH0pO1xuXG4gICAgICBpZiAodmFsdWVTZWxlY3RlZC5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgdmFsdWUgPSBNYXRoLnJvdW5kKHZhbHVlU2VsZWN0ZWRbMF0udmFsdWUgKiAxMDAwKSAvIDEwMDA7XG4gICAgICAgIHZhbHVlTGF0ID0gTWF0aC5yb3VuZCh2YWx1ZVNlbGVjdGVkWzBdLmxhdCAqIDEwMDApIC8gMTAwMDtcbiAgICAgICAgdmFsdWVMbmcgPSBNYXRoLnJvdW5kKHZhbHVlU2VsZWN0ZWRbMF0ubG5nICogMTAwMCkgLyAxMDAwO1xuICAgICAgICB2YWx1ZUxhdDIgPSBNYXRoLnJvdW5kKHZhbHVlU2VsZWN0ZWRbMF0ubGF0MiAqIDEwMDApIC8gMTAwMDtcbiAgICAgICAgdmFsdWVMbmcyID0gTWF0aC5yb3VuZCh2YWx1ZVNlbGVjdGVkWzBdLmxuZzIgKiAxMDAwKSAvIDEwMDA7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBjb25zb2xlLndhcm4oJ3ZhbHVlU2VsZWN0ZWQgaXNzdWUgPycsIHZhbHVlU2VsZWN0ZWQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMubmdab25lLnJ1bigoKSA9PiB7XG4gICAgICB0aGlzLm1jVGV4dCA9IGBMYXRpdHVkZTogJHtsYXR9ICZuYnNwOyAmbmJzcDsgTG9uZ2l0dWRlOiAke2xuZ30gJm5ic3A7ICZuYnNwOyBWYWx1ZTogWyR7dmFsdWVMYXR9ICR7dmFsdWVMbmd9IHwgJHt2YWx1ZUxhdDJ9ICR7dmFsdWVMbmcyfV0gJHt2YWx1ZX1gO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBvbk1hcENsaWNrKGV2dDogYW55KTogdm9pZCB7XG4gICAgdGhpcy5zZWxlY3RlZE1hcmtlci5lbWl0KG5ldyBNYXBMYXRMbmcoXG4gICAgICBldnQubGF0bG5nPy5sYXQsIGV2dC5sYXRsbmc/LmxuZywgdW5kZWZpbmVkLFxuICAgICAgZXZ0LmlkLCBldnQubmFtZSkpO1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignd2luZG93OnJlc2l6ZScsIFsnJGV2ZW50J10pXG4gIHByaXZhdGUgb25SZXNpemUoZXZlbnQ6IGFueSk6IHZvaWQge1xuICAgIHRoaXMudXBkYXRlTWFwU2l6ZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVNYXBTaXplKCk6IHZvaWQge1xuXG4gICAgY29uc3QgbWFwRGl2V2lkdGggPSB0aGlzLm1hcERpdlJlZi5uYXRpdmVFbGVtZW50LnBhcmVudE5vZGU/LnBhcmVudE5vZGVbJ2NsaWVudFdpZHRoJ107XG4gICAgY29uc3QgcGFkZGluZyA9IDIxO1xuICAgIGxldCBjdXJyZW50V2lkdGggPSBtYXBEaXZXaWR0aCB8fFxuICAgICAgKHdpbmRvdy5pbm5lcldpZHRoIHx8IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRXaWR0aCB8fCBkb2N1bWVudC5ib2R5LmNsaWVudFdpZHRoKTtcbiAgICBjb25zdCBjdXJyZW50SGVpZ2h0ID0gdGhpcy5jdXJyZW50SGVpZ2h0IHx8XG4gICAgICAod2luZG93LmlubmVySGVpZ2h0IHx8IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQgfHwgZG9jdW1lbnQuYm9keS5jbGllbnRIZWlnaHQpO1xuICAgIGN1cnJlbnRXaWR0aCAtPSBwYWRkaW5nO1xuICAgIHRoaXMuY3VycmVudFdpZHRoID0gY3VycmVudFdpZHRoO1xuICAgIHRoaXMuY3VycmVudEhlaWdodCA9IGN1cnJlbnRIZWlnaHQ7XG5cbiAgICB0aGlzLm5nWm9uZS5ydW4oKCkgPT4ge1xuICAgICAgdGhpcy5vblNpemVDaGFuZ2VkKCk7XG4gICAgfSk7XG4gIH1cblxufVxuIiwiPGlvbi1ncmlkPlxuXG4gIDxpb24tcm93IGNsYXNzPVwiaW9uLWFsaWduLWl0ZW1zLWVuZFwiPlxuICAgIDxpb24tY29sIGlkPVwibWFwLWJ1dHRvbnNcIiBzaXplLXNtPVwiM1wiPlxuICAgICAgPGlvbi1idXR0b24gKGNsaWNrKT1cInByZXZpb3VzKClcIiBjb2xvcj1cIm1lZGl1bVwiIGZpbGw9XCJvdXRsaW5lXCIgc2hhcGU9XCJyb3VuZFwiPlxuICAgICAgICA8aW9uLWljb24gbmFtZT1cInBsYXktYmFja1wiIHNsb3Q9XCJpY29uLW9ubHlcIj48L2lvbi1pY29uPlxuICAgICAgPC9pb24tYnV0dG9uPlxuICAgICAgPCEtLVxuICAgICAgPGlvbi1idXR0b24gKGNsaWNrKT1cInBsYXkoKVwiIFtoaWRkZW5dPVwiYXV0b3BsYXlcIiBjb2xvcj1cIm1lZGl1bVwiIGZpbGw9XCJvdXRsaW5lXCJcbiAgICAgICAgICAgICAgICAgIHNoYXBlPVwicm91bmRcIj5cbiAgICAgICAgPGlvbi1pY29uIG5hbWU9XCJwbGF5XCIgc2xvdD1cImljb24tb25seVwiPjwvaW9uLWljb24+XG4gICAgICA8L2lvbi1idXR0b24+XG4gICAgICAtLT5cbiAgICAgIDxpb24tYnV0dG9uIChjbGljayk9XCJzdG9wKClcIiBbaGlkZGVuXT1cIiFhdXRvcGxheVwiIGNvbG9yPVwibWVkaXVtXCIgZmlsbD1cIm91dGxpbmVcIlxuICAgICAgICAgICAgICAgICAgc2hhcGU9XCJyb3VuZFwiPlxuICAgICAgICA8aW9uLWljb24gbmFtZT1cInN0b3BcIiBzbG90PVwiaWNvbi1vbmx5XCI+PC9pb24taWNvbj5cbiAgICAgIDwvaW9uLWJ1dHRvbj5cblxuICAgICAgPGlvbi1idXR0b24gKGNsaWNrKT1cIm5leHQoKVwiIGNvbG9yPVwibWVkaXVtXCIgZmlsbD1cIm91dGxpbmVcIiBzaGFwZT1cInJvdW5kXCI+XG4gICAgICAgIDxpb24taWNvbiBuYW1lPVwicGxheS1mb3J3YXJkXCIgc2xvdD1cImljb24tb25seVwiPjwvaW9uLWljb24+XG4gICAgICA8L2lvbi1idXR0b24+XG4gICAgPC9pb24tY29sPlxuXG4gICAgPCEtLVxuICAgIDxpb24tY29sIGlkPVwibWFwLXRpbWVmcmFtZVwiIHNpemUtc209XCI0XCI+XG4gICAgICA8aW9uLXNlbGVjdCAoaW9uQ2hhbmdlKT1cInNob3dUaW1lZnJhbWUoKVwiIFsobmdNb2RlbCldPVwidGltZWZyYW1lTmFtZVRvU2hvd1wiIFt2YWx1ZV09XCJ0aW1lZnJhbWVOYW1lVG9TaG93XCJcbiAgICAgICAgICAgICAgICAgIGludGVyZmFjZT1cInBvcG92ZXJcIiBwbGFjZWhvbGRlcj1cIk5hbWVcIj5cbiAgICAgICAgPGlvbi1zZWxlY3Qtb3B0aW9uICpuZ0Zvcj1cImxldCBuYW1lIG9mIHBvc3NpYmxlTmFtZXNcIiBbdmFsdWVdPVwibmFtZVwiPnt7IG5hbWUgfX08L2lvbi1zZWxlY3Qtb3B0aW9uPlxuICAgICAgPC9pb24tc2VsZWN0PlxuICAgIDwvaW9uLWNvbD4gLS0+XG5cbiAgICA8aW9uLWNvbCBjbGFzcz1cImlvbi10ZXh0LXN0YXJ0XCIgaWQ9XCJtYXAtZGF0ZVwiPlxuICAgICAgPGlvbi1zZWxlY3QgKGlvbkRpc21pc3MpPVwic2hvd1RpbWVmcmFtZSgpXCIgWyhuZ01vZGVsKV09XCJkYXRlVG9TaG93QXNTdHJpbmdcIiBpbnRlcmZhY2U9XCJwb3BvdmVyXCJcbiAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiUGVyaW9kXCIgdmFsdWU9XCJ7e2RhdGVUb1Nob3dBc1N0cmluZ319XCI+XG4gICAgICAgIDxpb24tc2VsZWN0LW9wdGlvbiAqbmdGb3I9XCJsZXQgZGF0ZVRvU2VsZWN0IG9mIHBvc3NpYmxlRGF0ZXNcIiB2YWx1ZT1cInt7ZGF0ZVRvU2VsZWN0LnRvSVNPU3RyaW5nKCl9fVwiPlxuICAgICAgICAgIHt7IGRhdGVUb1NlbGVjdCB8IGRhdGU6J3l5eXktTU0tZGQgSEg6bW0nIH19XG4gICAgICAgIDwvaW9uLXNlbGVjdC1vcHRpb24+XG4gICAgICA8L2lvbi1zZWxlY3Q+XG4gICAgPC9pb24tY29sPlxuICAgIDxpb24tY29sPlxuICAgICAgPGlvbi10b2dnbGUgKGlvbkNoYW5nZSk9XCJjaGFuZ2VTaG93TWFya2VycygpXCIgWyhuZ01vZGVsKV09XCJzaG93TWFya2Vyc1wiIFtjaGVja2VkXT1cInNob3dNYXJrZXJzXCI+PC9pb24tdG9nZ2xlPlxuICAgIDwvaW9uLWNvbD5cbiAgPC9pb24tcm93PlxuXG4gIDxpb24tcm93PlxuICAgIDxpb24tY29sPlxuICAgICAgPGRpdiBpZD1cIm1hcC1jb250YWluZXJcIj5cbiAgICAgICAgPGRpdiAjcHJpbWFyeU1hcCBpZD1cIm1hcC1kaXZcIj48L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvaW9uLWNvbD5cbiAgICA8aW9uLWNvbCBjbGFzcz1cImlvbi1oaWRlLXhsLWRvd25cIj5cbiAgICAgIDxpb24taW1nIGlkPVwibWFwLXJhbmdlXCIgc3JjPVwiYXNzZXRzL3Iycl9yYW5nZS5zdmdcIi8+XG4gICAgPC9pb24tY29sPlxuICA8L2lvbi1yb3c+XG5cbiAgPGlvbi1yb3c+XG4gICAgPGlvbi1jb2wgc2l6ZS1zbT1cIjhcIj5cbiAgICAgIDxzcGFuIFtpbm5lckhUTUxdPVwibWNUZXh0XCI+PC9zcGFuPlxuICAgIDwvaW9uLWNvbD5cbiAgICA8aW9uLWNvbCBzaXplLXNtPVwiMVwiPlxuICAgICAgPGlvbi1idXR0b24gZGlzYWJsZWQ9XCJ0cnVlXCIgZmlsbD1cImNsZWFyXCI+e3sgc3VtUmVzdWx0IH19PC9pb24tYnV0dG9uPlxuICAgIDwvaW9uLWNvbD5cbiAgICA8aW9uLWNvbCBzaXplLXNtPVwiM1wiPlxuICAgICAgPGlvbi1idXR0b24gZGlzYWJsZWQ9XCJ0cnVlXCIgZmlsbD1cImNsZWFyXCI+e3sgZGF0ZVRvU2hvdz8udG9JU09TdHJpbmcoKSB9fTwvaW9uLWJ1dHRvbj5cbiAgICA8L2lvbi1jb2w+XG4gIDwvaW9uLXJvdz5cblxuPC9pb24tZ3JpZD5cbiJdfQ==
|
|
@@ -17,7 +17,8 @@ export class CompareManager {
|
|
|
17
17
|
return diff === 0;
|
|
18
18
|
}
|
|
19
19
|
static async BuildCompare(frameSet, targetsOrdered, rainComputationQualities, withCompareDuplicate) {
|
|
20
|
-
let compareSpeedMatrix, compareTrustedIndicator
|
|
20
|
+
let compareSpeedMatrix, compareTrustedIndicator;
|
|
21
|
+
let compares = [];
|
|
21
22
|
const currentTarget = targetsOrdered.filter(t => t.date === '' + frameSet.date.getTime())[0];
|
|
22
23
|
const currentPos = targetsOrdered.indexOf(currentTarget);
|
|
23
24
|
const previousTarget = currentPos >= 0 ? targetsOrdered[currentPos - 1] : null;
|
|
@@ -35,76 +36,17 @@ export class CompareManager {
|
|
|
35
36
|
const qualitySpeedMatrixContainer = currentQuality.qualitySpeedMatrixContainer;
|
|
36
37
|
compareSpeedMatrix = qualitySpeedMatrixContainer.renderMergedMatrix({ normalize: true });
|
|
37
38
|
compareTrustedIndicator = qualitySpeedMatrixContainer.getTrustedIndicators()[0];
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
const maxValue = Math.max(qualitySpeedMatrixContainer.getMaxGauge(), qualitySpeedMatrixContainer.getMaxRain());
|
|
47
|
-
const remarks = qualitySpeedMatrixContainer.getMatrix(index)?.remarks;
|
|
48
|
-
const delta = parseInt(name, 10);
|
|
49
|
-
let renamed = new Date(currentQuality.date.getTime() - delta * 60 * 1000).toLocaleString();
|
|
50
|
-
renamed += delta > 0 ? ' since ' : ' in ';
|
|
51
|
-
renamed += Math.abs(delta) + ' minutes';
|
|
52
|
-
console.log('index:', index, 'delta:', delta, 'renamed:', renamed);
|
|
53
|
-
// remove previous or next better values from comparePoints
|
|
54
|
-
let qualityPoints = comparePointsHistory.filter((p) => p); // no real filter
|
|
55
|
-
const removeDuplicates = !withCompareDuplicate;
|
|
56
|
-
if (removeDuplicates) {
|
|
57
|
-
if (index === compareNames.length - 1) {
|
|
58
|
-
if (!previousQuality?.qualitySpeedMatrixContainer) {
|
|
59
|
-
qualityPoints = [];
|
|
60
|
-
}
|
|
61
|
-
else {
|
|
62
|
-
qualityPoints = qualityPoints.filter((p) => {
|
|
63
|
-
const previousQPs = previousQuality.qualitySpeedMatrixContainer
|
|
64
|
-
.getQualityPointsByHistoricalPosition(0)
|
|
65
|
-
.filter(previousQP => p.gaugeId === previousQP.gaugeId);
|
|
66
|
-
// better before ?
|
|
67
|
-
const betterBefore = (previousQPs.length === 1 && p.getDelta() > previousQPs[0].getDelta());
|
|
68
|
-
if (betterBefore) {
|
|
69
|
-
console.log('removed from', renamed, p.gaugeLabel, previousQuality.date.toISOString(), p.getDelta(), previousQPs.length === 1 ? previousQPs[0].getDelta() + ' dated ' + previousQPs[0].gaugeDate.toISOString() : 0);
|
|
70
|
-
return false; // => remove it
|
|
71
|
-
}
|
|
72
|
-
return true;
|
|
73
|
-
});
|
|
74
|
-
}
|
|
75
|
-
}
|
|
76
|
-
else if (index === 0) {
|
|
77
|
-
if (!nextQuality?.qualitySpeedMatrixContainer) {
|
|
78
|
-
qualityPoints = [];
|
|
79
|
-
}
|
|
80
|
-
else {
|
|
81
|
-
qualityPoints = qualityPoints.filter((p) => {
|
|
82
|
-
const nextQPs = nextQuality.qualitySpeedMatrixContainer
|
|
83
|
-
.getQualityPointsByHistoricalPosition(1)
|
|
84
|
-
.filter(nextQP => p.gaugeId === nextQP.gaugeId);
|
|
85
|
-
// better after ?
|
|
86
|
-
const betterAfter = (nextQPs.length === 1 && p.getDelta() > nextQPs[0].getDelta());
|
|
87
|
-
if (betterAfter) {
|
|
88
|
-
console.log('removed from', renamed, p.gaugeLabel, nextQuality.date.toISOString(), p.getDelta(), nextQPs.length === 1 ? nextQPs[0].getDelta() + ' dated ' + nextQPs[0].gaugeDate.toISOString() : 0);
|
|
89
|
-
return false; // => remove it
|
|
90
|
-
}
|
|
91
|
-
return true;
|
|
92
|
-
});
|
|
93
|
-
}
|
|
94
|
-
}
|
|
95
|
-
}
|
|
96
|
-
const comparePoints = qualityPoints.map((qualityPoint) => new XYType(qualityPoint.getGaugeValue(), qualityPoint.getRainValue(), 2, qualityPoint.gaugeLabel, qualityPoint.gaugeId));
|
|
97
|
-
const compare = {
|
|
98
|
-
name: renamed,
|
|
99
|
-
comparePointsHistory,
|
|
100
|
-
comparePoints,
|
|
101
|
-
maxValue,
|
|
102
|
-
comparePointsMax: new XYType(maxValue + 20, maxValue + 20),
|
|
103
|
-
remarks,
|
|
39
|
+
const comparesToMap = SpeedMatrixContainer.BuildCompares(currentQuality, previousQuality, nextQuality, withCompareDuplicate);
|
|
40
|
+
compares = comparesToMap.map(c => {
|
|
41
|
+
return {
|
|
42
|
+
name: c.name,
|
|
43
|
+
comparePoints: c.qualityPoints.map(p => new XYType(p.getGaugeValue(), p.getRainValue(), 2, p.gaugeLabel, p.gaugeId)),
|
|
44
|
+
comparePointsMax: new XYType(c.maxValue + 20, c.maxValue + 20),
|
|
45
|
+
comparePointsHistory: c.qualityPointsLegacy,
|
|
46
|
+
remarks: c.remarks
|
|
104
47
|
};
|
|
105
|
-
|
|
106
|
-
}
|
|
107
|
-
return compares;
|
|
48
|
+
});
|
|
49
|
+
return { currentQuality, compareSpeedMatrix, compareTrustedIndicator, compares };
|
|
108
50
|
}
|
|
109
51
|
cleanAll() {
|
|
110
52
|
this.gaugesInCompare = [];
|
|
@@ -288,4 +230,4 @@ export class CompareManager {
|
|
|
288
230
|
this.selectGaugeInCompare();
|
|
289
231
|
}
|
|
290
232
|
}
|
|
291
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29tcGFyZU1hbmFnZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXBwL3NoYXJlZC90b29scy9Db21wYXJlTWFuYWdlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sVUFBVSxDQUFDO0FBQ25DLE9BQU8sRUFBZ0Usb0JBQW9CLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFDaEgsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUlqQyxNQUFNLE9BQU8sY0FBYztJQStCekIsWUFDWSxRQUFrQixFQUNsQixjQUE4QixFQUNqQyxZQUF3QixHQUFHLEVBQUU7SUFDcEMsQ0FBQztRQUhTLGFBQVEsR0FBUixRQUFRLENBQVU7UUFDbEIsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQ2pDLGNBQVMsR0FBVCxTQUFTLENBQ2Y7UUFFRCxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDbEIsQ0FBQztJQUVTLE1BQU0sQ0FBQyxXQUFXLENBQUMsS0FBYSxFQUFFLEtBQWEsRUFBRSxPQUFlO1FBRXhFLE1BQU0sV0FBVyxHQUFTLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUN4RCxNQUFNLFNBQVMsR0FBRyxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDaEQsU0FBUyxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsVUFBVSxFQUFFLEdBQUcsT0FBTyxDQUFDLENBQUM7UUFDdkQsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLFdBQVcsQ0FBQyxPQUFPLEVBQUUsR0FBRyxTQUFTLENBQUMsT0FBTyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQ3JGLE9BQU8sSUFBSSxLQUFLLENBQUMs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QzFCLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO0lBQzlCLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7TWFwTGF0TG5nfSBmcm9tICdyYWFpbi11aSc7XG5pbXBvcnQge1Bvc2l0aW9uVmFsdWUsIFF1YWxpdHlQb2ludCwgUmFpbkNvbXB1dGF0aW9uUXVhbGl0eSwgUmFpbk5vZGUsIFNwZWVkTWF0cml4Q29udGFpbmVyfSBmcm9tICdyYWFpbi1tb2RlbCc7XG5pbXBvcnQge1hZVHlwZX0gZnJvbSAnLi4veHl0eXBlJztcbmltcG9ydCB7UHJvZmlsZVNlcnZpY2V9IGZyb20gJy4uL3Byb2ZpbGUuc2VydmljZSc7XG5pbXBvcnQge0ZyYW1lU2V0fSBmcm9tICcuL0ZyYW1lU2V0JztcblxuZXhwb3J0IGNsYXNzIENvbXBhcmVNYW5hZ2VyIHtcblxuICAvLyBwdWJsaWMgY29tcHV0ZWQkOiBPYnNlcnZhYmxlPGJvb2xlYW4+O1xuXG4gIHB1YmxpYyBnYXVnZXNJbkNvbXBhcmU6IE1hcExhdExuZ1tdO1xuICBwdWJsaWMgc2VsZWN0ZWRHYXVnZXM6IE1hcExhdExuZ1tdO1xuICBwdWJsaWMgc2VsZWN0ZWRQaXhlbHM6IE1hcExhdExuZ1tdO1xuICBwdWJsaWMgcGl4ZWxzU29sdXRpb25zOiBNYXBMYXRMbmdbXVtdO1xuXG4gIHB1YmxpYyBjb21wYXJlTmFtZXM6IHN0cmluZ1tdO1xuICBwdWJsaWMgY29tcGFyZXM6IHtcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgY29tcGFyZVBvaW50czogWFlUeXBlW107XG4gICAgY29tcGFyZVBvaW50c01heDogWFlUeXBlO1xuICAgIGNvbXBhcmVQb2ludHNIaXN0b3J5OiBRdWFsaXR5UG9pbnRbXTtcbiAgICByZW1hcmtzOiBzdHJpbmc7XG4gIH1bXTtcbiAgcHVibGljIGNvbXBhcmVTcGVlZE1hdHJpeDogUG9zaXRpb25WYWx1ZVtdO1xuICBwdWJsaWMgY29tcGFyZVZlcnNpb246IHN0cmluZztcbiAgcHVibGljIGNvbXBhcmVUcnVzdGVkSW5kaWNhdG9yOiBudW1iZXI7XG4gIHB1YmxpYyBjdXJyZW50UXVhbGl0eURvbmVEYXRlOiBEYXRlO1xuICBwdWJsaWMgY3VycmVudFF1YWxpdHlMYXVuY2hlZEJ5OiBzdHJpbmc7XG4gIHB1YmxpYyBjdXJyZW50UXVhbGl0eVRpbWVTcGVudEluTXM6IG51bWJlcjtcbiAgcHVibGljIGdsb2JhbENvbXBhcmVQb2ludHM6IFhZVHlwZVtdO1xuICBwdWJsaWMgZ2xvYmFsQ29tcGFyZVBvaW50c01heDogWFlUeXBlO1xuXG4gIHByb3RlY3RlZCBzZWxlY3RlZEdhdWdlOiBRdWFsaXR5UG9pbnQ7XG4gIHByb3RlY3RlZCBzZWxlY3RlZEdhdWdlSW5Qb2ludHM6IFF1YWxpdHlQb2ludDtcbiAgcHJvdGVjdGVkIHNlbGVjdGVkR2F1Z2VJblBvaW50c0RldGFpbDogc3RyaW5nO1xuICBwcm90ZWN0ZWQgcmFpbkNvbXB1dGF0aW9uUXVhbGl0aWVzOiBhbnk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJvdGVjdGVkIHJhaW5Ob2RlOiBSYWluTm9kZSxcbiAgICBwcm90ZWN0ZWQgcHJvZmlsZVNlcnZpY2U6IFByb2ZpbGVTZXJ2aWNlLFxuICAgIHB1YmxpYyBvbkNoYW5nZXM6ICgpID0+IHZvaWQgPSAoKSA9PiB7XG4gICAgfVxuICApIHtcbiAgICB0aGlzLmNsZWFuQWxsKCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgc3RhdGljIENvbXBhcmVEYXRlKGRhdGUxOiBzdHJpbmcsIGRhdGUyOiBzdHJpbmcsIG1pbnV0ZXM6IG51bWJlcik6IGJvb2xlYW4ge1xuXG4gICAgY29uc3QgZGF0ZTFBc0RhdGU6IERhdGUgPSBuZXcgRGF0ZShwYXJzZUludChkYXRlMSwgMTApKTtcbiAgICBjb25zdCBkYXRlMkRpZmYgPSBuZXcgRGF0ZShwYXJzZUludChkYXRlMiwgMTApKTtcbiAgICBkYXRlMkRpZmYuc2V0TWludXRlcyhkYXRlMkRpZmYuZ2V0TWludXRlcygpICsgbWludXRlcyk7XG4gICAgY29uc3QgZGlmZiA9IE1hdGgucm91bmQoKGRhdGUxQXNEYXRlLmdldFRpbWUoKSAtIGRhdGUyRGlmZi5nZXRUaW1lKCkpIC8gKDYwICogMTAwMCkpO1xuICAgIHJldHVybiBkaWZmID09PSAwO1xuICB9XG5cbiAgcHJvdGVjdGVkIHN0YXRpYyBhc3luYyBCdWlsZENvbXBhcmUoZnJhbWVTZXQ6IHsgZGF0ZTogRGF0ZSB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRzT3JkZXJlZDogeyBkYXRlOiBzdHJpbmc7IHJhaW5Db21wdXRhdGlvbklkOiBzdHJpbmc7IHJhaW5Db21wdXRhdGlvblF1YWxpdHlJZDogc3RyaW5nIH1bXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFpbkNvbXB1dGF0aW9uUXVhbGl0aWVzOiBhbnksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpdGhDb21wYXJlRHVwbGljYXRlOiBib29sZWFuKSB7XG5cbiAgICBsZXQgY29tcGFyZVNwZWVkTWF0cml4LCBjb21wYXJlVHJ1c3RlZEluZGljYXRvciwgY29tcGFyZXNcbiAgICBjb25zdCBjdXJyZW50VGFyZ2V0ID0gdGFyZ2V0c09yZGVyZWQuZmlsdGVyKHQgPT4gdC5kYXRlID09PSAnJyArIGZyYW1lU2V0LmRhdGUuZ2V0VGltZSgpKVswXTtcbiAgICBjb25zdCBjdXJyZW50UG9zID0gdGFyZ2V0c09yZGVyZWQuaW5kZXhPZihjdXJyZW50VGFyZ2V0KTtcbiAgICBjb25zdCBwcmV2aW91c1RhcmdldCA9IGN1cnJlbnRQb3MgPj0gMCA/IHRhcmdldHNPcmRlcmVkW2N1cnJlbnRQb3MgLSAxXSA6IG51bGw7XG4gICAgY29uc3QgbmV4dFRhcmdldCA9IGN1cnJlbnRQb3MgPj0gMCAmJiBjdXJyZW50UG9zIDwgdGFyZ2V0c09yZGVyZWQubGVuZ3RoIC0gMSA/IHRhcmdldHNPcmRlcmVkW2N1cnJlbnRQb3MgKyAxXSA6IG51bGw7XG5cblxuICAgIGNvbnN0IGN1cnJlbnRRdWFsaXR5OiBSYWluQ29tcHV0YXRpb25RdWFsaXR5ID0gcmFpbkNvbXB1dGF0aW9uUXVhbGl0aWVzW2N1cnJlbnRUYXJnZXQ/LmRhdGVdO1xuICAgIGlmICghY3VycmVudFF1YWxpdHkpIHtcbiAgICAgIHJldHVybiB7Y3VycmVudFF1YWxpdHksIGNvbXBhcmVTcGVlZE1hdHJpeCwgY29tcGFyZVRydXN0ZWRJbmRpY2F0b3IsIGNvbXBhcmVzfTtcbiAgICB9XG5cbiAgICBjb25zdCBwcmV2aW91c1F1YWxpdHk6IFJhaW5Db21wdXRhdGlvblF1YWxpdHkgPSBwcmV2aW91c1RhcmdldCAmJlxuICAgIENvbXBhcmVNYW5hZ2VyLkNvbXBhcmVEYXRlKHByZXZpb3VzVGFyZ2V0LmRhdGUsIGN1cnJlbnRUYXJnZXQuZGF0ZSwgLTUpID9cbiAgICAgIHJhaW5Db21wdXRhdGlvblF1YWxpdGllc1twcmV2aW91c1RhcmdldC5kYXRlXSA6IG51bGw7XG4gICAgY29uc3QgbmV4dFF1YWxpdHk6IFJhaW5Db21wdXRhdGlvblF1YWxpdHkgPSBuZXh0VGFyZ2V0XG4gICAgJiYgQ29tcGFyZU1hbmFnZXIuQ29tcGFyZURhdGUobmV4dFRhcmdldC5kYXRlLCBjdXJyZW50VGFyZ2V0LmRhdGUsICs1KSA/XG4gICAgICByYWluQ29tcHV0YXRpb25RdWFsaXRpZXNbbmV4dFRhcmdldC5kYXRlXSA6IG51bGw7XG5cbiAgICBjb25zdCBxdWFsaXR5U3BlZWRNYXRyaXhDb250YWluZXIgPSBjdXJyZW50UXVhbGl0eS5xdWFsaXR5U3BlZWRNYXRyaXhDb250YWluZXI7XG4gICAgY29tcGFyZVNwZWVkTWF0cml4ID0gcXVhbGl0eVNwZWVkTWF0cml4Q29udGFpbmVyLnJlbmRlck1lcmdlZE1hdHJpeCh7bm9ybWFsaXplOiB0cnVlfSk7XG4gICAgY29tcGFyZVRydXN0ZWRJbmRpY2F0b3IgPSBxdWFsaXR5U3BlZWRNYXRyaXhDb250YWluZXIuZ2V0VHJ1c3RlZEluZGljYXRvcnMoKVswXTtcblxuICAgIGNvbXBhcmVzID0gU3BlZWRNYXRyaXhDb250YWluZXIuQnVpbGRDb21wYXJlcyhjdXJyZW50UXVhbGl0eSwgcHJldmlvdXNRdWFsaXR5LCBuZXh0UXVhbGl0eSwgd2l0aENvbXBhcmVEdXBsaWNhdGUpO1xuICAgIHJldHVybiB7Y3VycmVudFF1YWxpdHksIGNvbXBhcmVTcGVlZE1hdHJpeCwgY29tcGFyZVRydXN0ZWRJbmRpY2F0b3IsIGNvbXBhcmVzfTtcbiAgfVxuXG4gIHByb3RlY3RlZCBzdGF0aWMgQnVpbGRDb21wYXJlcyhjb21wYXJlTmFtZXM6IHN0cmluZ1tdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudFF1YWxpdHk6IFJhaW5Db21wdXRhdGlvblF1YWxpdHksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2aW91c1F1YWxpdHk6IFJhaW5Db21wdXRhdGlvblF1YWxpdHksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0UXVhbGl0eTogUmFpbkNvbXB1dGF0aW9uUXVhbGl0eSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpdGhDb21wYXJlRHVwbGljYXRlOiBib29sZWFuKSB7XG4gICAgY29uc3QgY29tcGFyZXMgPSBbXTtcbiAgICBjb25zdCBxdWFsaXR5U3BlZWRNYXRyaXhDb250YWluZXIgPSBjdXJyZW50UXVhbGl0eS5xdWFsaXR5U3BlZWRNYXRyaXhDb250YWluZXI7XG4gICAgZm9yIChjb25zdCBbaW5kZXgsIG5hbWVdIG9mIGNvbXBhcmVOYW1lcy5lbnRyaWVzKCkpIHtcblxuICAgICAgY29uc3QgY29tcGFyZVBvaW50c0hpc3RvcnkgPSBxdWFsaXR5U3BlZWRNYXRyaXhDb250YWluZXIuZ2V0UXVhbGl0eVBvaW50cyhuYW1lKTtcbiAgICAgIGNvbnN0IG1heFZhbHVlID0gTWF0aC5tYXgocXVhbGl0eVNwZWVkTWF0cml4Q29udGFpbmVyLmdldE1heEdhdWdlKCksIHF1YWxpdHlTcGVlZE1hdHJpeENvbnRhaW5lci5nZXRNYXhSYWluKCkpO1xuICAgICAgY29uc3QgcmVtYXJrcyA9IHF1YWxpdHlTcGVlZE1hdHJpeENvbnRhaW5lci5nZXRNYXRyaXgoaW5kZXgpPy5yZW1hcmtzO1xuXG4gICAgICBjb25zdCBkZWx0YSA9IHBhcnNlSW50KG5hbWUsIDEwKTtcbiAgICAgIGxldCByZW5hbWVkID0gbmV3IERhdGUoY3VycmVudFF1YWxpdHkuZGF0ZS5nZXRUaW1lKCkgLSBkZWx0YSAqIDYwICogMTAwMCkudG9Mb2NhbGVTdHJpbmcoKTtcbiAgICAgIHJlbmFtZWQgKz0gZGVsdGEgPiAwID8gJyBzaW5jZSAnIDogJyBpbiAnO1xuICAgICAgcmVuYW1lZCArPSBNYXRoLmFicyhkZWx0YSkgKyAnIG1pbnV0ZXMnO1xuXG4gICAgICBjb25zb2xlLmxvZygnaW5kZXg6JywgaW5kZXgsICdkZWx0YTonLCBkZWx0YSwgJ3JlbmFtZWQ6JywgcmVuYW1lZCk7XG5cbiAgICAgIC8vIHJlbW92ZSBwcmV2aW91cyBvciBuZXh0IGJldHRlciB2YWx1ZXMgZnJvbSBjb21wYXJlUG9pbnRzXG4gICAgICBsZXQgcXVhbGl0eVBvaW50cyA9IGNvbXBhcmVQb2ludHNIaXN0b3J5LmZpbHRlcigocDogYW55KSA9PiBwKTsgLy8gbm8gcmVhbCBmaWx0ZXJcblxuICAgICAgY29uc3QgcmVtb3ZlRHVwbGljYXRlcyA9ICF3aXRoQ29tcGFyZUR1cGxpY2F0ZTtcbiAgICAgIGlmIChyZW1vdmVEdXBsaWNhdGVzKSB7XG4gICAgICAgIGlmIChpbmRleCA9PT0gY29tcGFyZU5hbWVzLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICBpZiAoIXByZXZpb3VzUXVhbGl0eT8ucXVhbGl0eVNwZWVkTWF0cml4Q29udGFpbmVyKSB7XG4gICAgICAgICAgICBxdWFsaXR5UG9pbnRzID0gW107XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHF1YWxpdHlQb2ludHMgPSBxdWFsaXR5UG9pbnRzLmZpbHRlcigocDogUXVhbGl0eVBvaW50KSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IHByZXZpb3VzUVBzID0gcHJldmlvdXNRdWFsaXR5LnF1YWxpdHlTcGVlZE1hdHJpeENvbnRhaW5lclxuICAgICAgICAgICAgICAgIC5nZXRRdWFsaXR5UG9pbnRzQnlIaXN0b3JpY2FsUG9zaXRpb24oMClcbiAgICAgICAgICAgICAgICAuZmlsdGVyKHByZXZpb3VzUVAgPT4gcC5nYXVnZUlkID09PSBwcmV2aW91c1FQLmdhdWdlSWQpO1xuXG4gICAgICAgICAgICAgIC8vIGJldHRlciBiZWZvcmUgP1xuICAgICAgICAgICAgICBjb25zdCBiZXR0ZXJCZWZvcmUgPSAocHJldmlvdXNRUHMubGVuZ3RoID09PSAxICYmIHAuZ2V0RGVsdGEoKSA+IHByZXZpb3VzUVBzWzBdLmdldERlbHRhKCkpO1xuICAgICAgICAgICAgICBpZiAoYmV0dGVyQmVmb3JlKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ3JlbW92ZWQgZnJvbScsIHJlbmFtZWQsIHAuZ2F1Z2VMYWJlbCwgcHJldmlvdXNRdWFsaXR5LmRhdGUudG9JU09TdHJpbmcoKSxcbiAgICAgICAgICAgICAgICAgIHAuZ2V0RGVsdGEoKSxcbiAgICAgICAgICAgICAgICAgIHByZXZpb3VzUVBzLmxlbmd0aCA9PT0gMSA/IHByZXZpb3VzUVBzWzBdLmdldERlbHRhKCkgKyAnIGRhdGVkICcgKyBwcmV2aW91c1FQc1swXS5nYXVnZURhdGUudG9JU09TdHJpbmcoKSA6IDApO1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gPT4gcmVtb3ZlIGl0XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoaW5kZXggPT09IDApIHtcbiAgICAgICAgICBpZiAoIW5leHRRdWFsaXR5Py5xdWFsaXR5U3BlZWRNYXRyaXhDb250YWluZXIpIHtcbiAgICAgICAgICAgIHF1YWxpdHlQb2ludHMgPSBbXTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcXVhbGl0eVBvaW50cyA9IHF1YWxpdHlQb2ludHMuZmlsdGVyKChwOiBRdWFsaXR5UG9pbnQpID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgbmV4dFFQcyA9IG5leHRRdWFsaXR5LnF1YWxpdHlTcGVlZE1hdHJpeENvbnRhaW5lclxuICAgICAgICAgICAgICAgIC5nZXRRdWFsaXR5UG9pbnRzQnlIaXN0b3JpY2FsUG9zaXRpb24oMSlcbiAgICAgICAgICAgICAgICAuZmlsdGVyKG5leHRRUCA9PiBwLmdhdWdlSWQgPT09IG5leHRRUC5nYXVnZUlkKTtcblxuICAgICAgICAgICAgICAvLyBiZXR0ZXIgYWZ0ZXIgP1xuICAgICAgICAgICAgICBjb25zdCBiZXR0ZXJBZnRlciA9IChuZXh0UVBzLmxlbmd0aCA9PT0gMSAmJiBwLmdldERlbHRhKCkgPiBuZXh0UVBzWzBdLmdldERlbHRhKCkpO1xuICAgICAgICAgICAgICBpZiAoYmV0dGVyQWZ0ZXIpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygncmVtb3ZlZCBmcm9tJywgcmVuYW1lZCwgcC5nYXVnZUxhYmVsLCBuZXh0UXVhbGl0eS5kYXRlLnRvSVNPU3RyaW5nKCksXG4gICAgICAgICAgICAgICAgICBwLmdldERlbHRhKCksXG4gICAgICAgICAgICAgICAgICBuZXh0UVBzLmxlbmd0aCA9PT0gMSA/IG5leHRRUHNbMF0uZ2V0RGVsdGEoKSArICcgZGF0ZWQgJyArIG5leHRRUHNbMF0uZ2F1Z2VEYXRlLnRvSVNPU3RyaW5nKCkgOiAwKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vID0+IHJlbW92ZSBpdFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGNvbXBhcmVQb2ludHMgPSBxdWFsaXR5UG9pbnRzLm1hcCgocXVhbGl0eVBvaW50OiBRdWFsaXR5UG9pbnQpID0+XG4gICAgICAgIG5ldyBYWVR5cGUocXVhbGl0eVBvaW50LmdldEdhdWdlVmFsdWUoKSwgcXVhbGl0eVBvaW50LmdldFJhaW5WYWx1ZSgpLCAyLCBxdWFsaXR5UG9pbnQuZ2F1Z2VMYWJlbCwgcXVhbGl0eVBvaW50LmdhdWdlSWQpKTtcblxuICAgICAgY29uc3QgY29tcGFyZSA9IHtcbiAgICAgICAgbmFtZTogcmVuYW1lZCxcbiAgICAgICAgY29tcGFyZVBvaW50c0hpc3RvcnksXG4gICAgICAgIGNvbXBhcmVQb2ludHMsXG4gICAgICAgIG1heFZhbHVlLFxuICAgICAgICBjb21wYXJlUG9pbnRzTWF4OiBuZXcgWFlUeXBlKG1heFZhbHVlICsgMjAsIG1heFZhbHVlICsgMjApLFxuICAgICAgICByZW1hcmtzLFxuICAgICAgfTtcblxuICAgICAgY29tcGFyZXMucHVzaChjb21wYXJlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gY29tcGFyZXM7XG4gIH1cblxuICBwdWJsaWMgY2xlYW5BbGwoKSB7XG4gICAgdGhpcy5nYXVnZXNJbkNvbXBhcmUgPSBbXTtcbiAgICB0aGlzLnNlbGVjdGVkR2F1Z2VzID0gW107XG4gICAgdGhpcy5zZWxlY3RlZFBpeGVscyA9IFtdO1xuICAgIHRoaXMucGl4ZWxzU29sdXRpb25zID0gW107XG5cbiAgICB0aGlzLnNlbGVjdGVkR2F1Z2UgPSBudWxsO1xuICAgIHRoaXMuc2VsZWN0ZWRHYXVnZUluUG9pbnRzID0gbnVsbDtcbiAgICB0aGlzLmNsZWFuQ29tcGFyZVF1YWxpdHkoJ25vIGNvbXBhcmUnKTtcbiAgfVxuXG4gIGFzeW5jIHJlZnJlc2hDb21wYXJlUXVhbGl0eShmcmFtZVNldDogRnJhbWVTZXQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRzOiB7IGRhdGU6IERhdGU7IHJhaW5Db21wdXRhdGlvbklkOiBzdHJpbmc7IHJhaW5Db21wdXRhdGlvblF1YWxpdHlJZDogc3RyaW5nIH1bXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpdGhDb21wYXJlRHVwbGljYXRlOiBib29sZWFuKSB7XG5cbiAgICBjb25zdCB0YXJnZXRzT3JkZXJlZCA9IHRhcmdldHNcbiAgICAgIC5zb3J0KChhLCBiKSA9PiBhLmRhdGUuZ2V0VGltZSgpIC0gYi5kYXRlLmdldFRpbWUoKSlcbiAgICAgIC5tYXAodCA9PiB7XG4gICAgICAgIHJldHVybiB7ZGF0ZTogJycgKyB0LmRhdGUuZ2V0VGltZSgpLCByYWluQ29tcHV0YXRpb25JZDogdC5yYWluQ29tcHV0YXRpb25JZCwgcmFpbkNvbXB1dGF0aW9uUXVhbGl0eUlkOiB0LnJhaW5Db21wdXRhdGlvblF1YWxpdHlJZH07XG4gICAgICB9KTtcblxuICAgIGF3YWl0IHRoaXMuZmV0Y2hSYWluQ29tcHV0YXRpb25RdWFsaXRpZXModGFyZ2V0c09yZGVyZWQpO1xuXG4gICAgY29uc3Qge2N1cnJlbnRRdWFsaXR5LCBjb21wYXJlU3BlZWRNYXRyaXgsIGNvbXBhcmVUcnVzdGVkSW5kaWNhdG9yLCBjb21wYXJlc30gPVxuICAgICAgYXdhaXQgQ29tcGFyZU1hbmFnZXIuQnVpbGRDb21wYXJlKGZyYW1lU2V0LCB0YXJnZXRzT3JkZXJlZCwgdGhpcy5yYWluQ29tcHV0YXRpb25RdWFsaXRpZXMsIHdpdGhDb21wYXJlRHVwbGljYXRlKTtcblxuICAgIGlmICghY3VycmVudFF1YWxpdHkpIHtcbiAgICAgIHRoaXMuY2xlYW5Db21wYXJlUXVhbGl0eSgnbm8gY3VycmVudCBxdWFsaXR5ICcgKyBPYmplY3Qua2V5cyh0aGlzLnJhaW5Db21wdXRhdGlvblF1YWxpdGllcykpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmN1cnJlbnRRdWFsaXR5RG9uZURhdGUgPSBjdXJyZW50UXVhbGl0eS5pc0RvbmVEYXRlO1xuICAgICAgdGhpcy5jdXJyZW50UXVhbGl0eVRpbWVTcGVudEluTXMgPSBjdXJyZW50UXVhbGl0eS50aW1lU3BlbnRJbk1zO1xuICAgICAgdGhpcy5jdXJyZW50UXVhbGl0eUxhdW5jaGVkQnkgPSBjdXJyZW50UXVhbGl0eS5sYXVuY2hlZEJ5O1xuICAgICAgdGhpcy5jb21wYXJlVmVyc2lvbiA9IGN1cnJlbnRRdWFsaXR5LmdldFZlcnNpb24oKTtcbiAgICAgIHRoaXMuY29tcGFyZVNwZWVkTWF0cml4ID0gY29tcGFyZVNwZWVkTWF0cml4O1xuICAgICAgdGhpcy5jb21wYXJlVHJ1c3RlZEluZGljYXRvciA9IGNvbXBhcmVUcnVzdGVkSW5kaWNhdG9yO1xuICAgICAgdGhpcy5jb21wYXJlcyA9IGNvbXBhcmVzO1xuICAgIH1cblxuICAgIHRoaXMub25DaGFuZ2VzKCk7XG4gIH1cblxuICBhc3luYyByZWZyZXNoR2xvYmFsQ29tcGFyZVF1YWxpdHkodGFyZ2V0czogeyBkYXRlOiBEYXRlOyByYWluQ29tcHV0YXRpb25JZDogc3RyaW5nOyByYWluQ29tcHV0YXRpb25RdWFsaXR5SWQ6IHN0cmluZyB9W10sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aXRoQ29tcGFyZUR1cGxpY2F0ZTogYm9vbGVhbikge1xuXG4gICAgY29uc3QgdGFyZ2V0c09yZGVyZWQgPSB0YXJnZXRzXG4gICAgICAuc29ydCgoYSwgYikgPT4gYS5kYXRlLmdldFRpbWUoKSAtIGIuZGF0ZS5nZXRUaW1lKCkpXG4gICAgICAubWFwKHQgPT4ge1xuICAgICAgICByZXR1cm4ge2RhdGU6ICcnICsgdC5kYXRlLmdldFRpbWUoKSwgcmFpbkNvbXB1dGF0aW9uSWQ6IHQucmFpbkNvbXB1dGF0aW9uSWQsIHJhaW5Db21wdXRhdGlvblF1YWxpdHlJZDogdC5yYWluQ29tcHV0YXRpb25RdWFsaXR5SWR9O1xuICAgICAgfSk7XG5cbiAgICBhd2FpdCB0aGlzLmZldGNoUmFpbkNvbXB1dGF0aW9uUXVhbGl0aWVzKHRhcmdldHNPcmRlcmVkKTtcblxuICAgIGxldCBnbG9iYWxDb21wYXJlUG9pbnRzOiBYWVR5cGVbXSA9IFtdO1xuICAgIGZvciAoY29uc3QgZnJhbWVTZXQgb2YgdGFyZ2V0cykge1xuICAgICAgY29uc3Qge2N1cnJlbnRRdWFsaXR5LCBjb21wYXJlU3BlZWRNYXRyaXgsIGNvbXBhcmVUcnVzdGVkSW5kaWNhdG9yLCBjb21wYXJlc30gPVxuICAgICAgICBhd2FpdCBDb21wYXJlTWFuYWdlci5CdWlsZENvbXBhcmUoZnJhbWVTZXQsIHRhcmdldHNPcmRlcmVkLCB0aGlzLnJhaW5Db21wdXRhdGlvblF1YWxpdGllcywgd2l0aENvbXBhcmVEdXBsaWNhdGUpO1xuICAgICAgZm9yIChjb25zdCBjb21wYXJlIG9mIGNvbXBhcmVzID8gY29tcGFyZXMgOiBbXSkge1xuICAgICAgICBnbG9iYWxDb21wYXJlUG9pbnRzID0gZ2xvYmFsQ29tcGFyZVBvaW50cy5jb25jYXQoY29tcGFyZS5jb21wYXJlUG9pbnRzKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBsZXQgbWF4WCA9IDAsIG1heFkgPSAwO1xuICAgIGNvbnN0IGdsb2JhbENvbXBhcmVQb2ludHNHcm91cGVkID0gW107XG4gICAgY29uc3QgcG9pbnRzR3JvdXBlZEJ5SWQgPSBnbG9iYWxDb21wYXJlUG9pbnRzLnJlZHVjZSgocmVzLCB2YWx1ZSkgPT4ge1xuICAgICAgaWYgKCFyZXNbdmFsdWUuaWRdKSB7XG4gICAgICAgIHJlc1t2YWx1ZS5pZF0gPSB2YWx1ZTtcbiAgICAgICAgZ2xvYmFsQ29tcGFyZVBvaW50c0dyb3VwZWQucHVzaChyZXNbdmFsdWUuaWRdKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc1t2YWx1ZS5pZF0ueCArPSB2YWx1ZS54O1xuICAgICAgICByZXNbdmFsdWUuaWRdLnkgKz0gdmFsdWUueTtcbiAgICAgIH1cbiAgICAgIG1heFggPSBNYXRoLm1heChtYXhYLCByZXNbdmFsdWUuaWRdLngpO1xuICAgICAgbWF4WSA9IE1hdGgubWF4KG1heFksIHJlc1t2YWx1ZS5pZF0ueSk7XG4gICAgICByZXR1cm4gcmVzO1xuICAgIH0sIHt9KTtcbiAgICB0aGlzLmdsb2JhbENvbXBhcmVQb2ludHMgPSBnbG9iYWxDb21wYXJlUG9pbnRzR3JvdXBlZDtcbiAgICB0aGlzLmdsb2JhbENvbXBhcmVQb2ludHNNYXggPSBuZXcgWFlUeXBlKG1heFgsIG1heFkpO1xuICB9XG5cbiAgYXN5bmMgc2V0R2F1Z2VzKCkge1xuICAgIC8vIGNvbnNvbGUubG9nKCdzZXRHYXVnZXMnKTtcblxuICAgIGNvbnN0IHF1YWxpdHlQb2ludHM6IFF1YWxpdHlQb2ludFtdID0gW107XG4gICAgZm9yIChjb25zdCBjb21wYXJlIG9mIHRoaXMuY29tcGFyZXMpIHtcbiAgICAgIGZvciAoY29uc3QgcXVhbGl0eVBvaW50IG9mIGNvbXBhcmUuY29tcGFyZVBvaW50c0hpc3RvcnkpIHtcbiAgICAgICAgY29uc3QgYWxyZWFkeUFkZGVkID0gcXVhbGl0eVBvaW50cy5maWx0ZXIocCA9PiBwPy5nYXVnZUlkID09PSBxdWFsaXR5UG9pbnQuZ2F1Z2VJZCk7XG4gICAgICAgIGlmIChhbHJlYWR5QWRkZWQubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgcXVhbGl0eVBvaW50cy5wdXNoKHF1YWxpdHlQb2ludCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmdhdWdlc0luQ29tcGFyZSA9IHF1YWxpdHlQb2ludHMubWFwKHAgPT4ge1xuICAgICAgcmV0dXJuIG5ldyBNYXBMYXRMbmcocC5nYXVnZUNhcnRlc2lhblZhbHVlLmxhdCwgcC5nYXVnZUNhcnRlc2lhblZhbHVlLmxuZywgMCxcbiAgICAgICAgcC5nYXVnZUlkLCBwLmdhdWdlTGFiZWwgKyAnPicgKyBwLmdldEdhdWdlVmFsdWUoKSxcbiAgICAgICAgcC5nZXRHYXVnZVZhbHVlKCkpO1xuICAgIH0pO1xuXG4gICAgdGhpcy5yZXNldFNlbGVjdGVkR2F1Z2VzKCk7XG4gIH1cblxuICBhc3luYyBzZWxlY3RHYXVnZShnYXVnZUlkOiBzdHJpbmcsIGNvbXBhcmVJbmRleDogbnVtYmVyKSB7XG4gICAgLy8gY29uc29sZS5sb2coJ3NlbGVjdEdhdWdlJywgZ2F1Z2VJZCwgY29tcGFyZUluZGV4KTtcblxuICAgIGlmIChnYXVnZUlkKSB7XG4gICAgICBjb25zdCB4eXMgPSB0aGlzLmdldEN1cnJlbnRRdWFsaXR5UG9pbnRzKGNvbXBhcmVJbmRleCkuZmlsdGVyKHAgPT4gcC5nYXVnZUlkID09PSBnYXVnZUlkKTtcbiAgICAgIHRoaXMuc2VsZWN0ZWRHYXVnZSA9IHh5cy5sZW5ndGggPT09IDEgPyB4eXNbMF0gOiBudWxsO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNlbGVjdGVkR2F1Z2UgPSBudWxsO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5zZWxlY3RlZEdhdWdlKSB7XG4gICAgICByZXR1cm4gdGhpcy5yZXNldFNlbGVjdGVkR2F1Z2VzKCk7XG4gICAgfVxuXG4gICAgY29uc3Qgc2VsZWN0ZWRHYXVnZUluUG9pbnRzID0gdGhpcy5nZXRDdXJyZW50UXVhbGl0eVBvaW50cyhjb21wYXJlSW5kZXgpLmZpbHRlcihwID0+IHAuZ2F1Z2VJZCA9PT0gdGhpcy5zZWxlY3RlZEdhdWdlLmdhdWdlSWQpO1xuICAgIGxldCBwaXhlbHNTb2x1dGlvbnM6IE1hcExhdExuZ1tdW10gPSBbXTtcblxuICAgIGlmIChzZWxlY3RlZEdhdWdlSW5Qb2ludHMubGVuZ3RoID09PSAxKSB7XG4gICAgICBjb25zdCByZW1hcmtzID0gSlNPTi5wYXJzZShzZWxlY3RlZEdhdWdlSW5Qb2ludHNbMF0ucmVtYXJrKVxuICAgICAgICAuc29ydCgoYSwgYikgPT4gYS5jcml0ZXJpYUF0dGVtcHRlZFRvQmVNaW5pbXVtIC0gYi5jcml0ZXJpYUF0dGVtcHRlZFRvQmVNaW5pbXVtKTtcbiAgICAgIGNvbnNvbGUubG9nKHJlbWFya3MpO1xuICAgICAgcGl4ZWxzU29sdXRpb25zID0gcmVtYXJrc1xuICAgICAgICAubWFwKHJlbWFyayA9PiByZW1hcmsuc29sdXRpb25Gb3JHYXVnZS5waXhlbHNcbiAgICAgICAgICAubWFwKHAgPT4gbmV3IE1hcExhdExuZyhwLnkgKyAwLjAwNSwgcC54ICsgMC4wMSwgMCwgJycgKyAhcmVtYXJrLm5vdFBvc3NpYmxlLCAnJyArICFyZW1hcmsubm90UG9zc2libGUsIDEpKSk7XG5cbiAgICAgIGNvbnN0IHRpbWVEZWx0YUluTWludXRlcyA9IHNlbGVjdGVkR2F1Z2VJblBvaW50c1swXS5nZXRUaW1lRGVsdGFJbk1pbnV0ZXMoKTtcbiAgICAgIHRoaXMuc2VsZWN0ZWRHYXVnZUluUG9pbnRzRGV0YWlsID0gJycgKyBzZWxlY3RlZEdhdWdlSW5Qb2ludHNbMF0uZ2F1Z2VMYWJlbCArICcgPiAnXG4gICAgICAgICsgTWF0aC5yb3VuZChzZWxlY3RlZEdhdWdlSW5Qb2ludHNbMF0uZ2V0R2F1Z2VWYWx1ZSgpICogMTAwKSAvIDEwMCArICcgLyAnXG4gICAgICAgICsgTWF0aC5yb3VuZChzZWxlY3RlZEdhdWdlSW5Qb2ludHNbMF0uZ2V0UmFpblZhbHVlKCkgKiAxMDApIC8gMTAwXG4gICAgICAgICsgJyBkVD0nICsgdGltZURlbHRhSW5NaW51dGVzO1xuXG4gICAgICB0aGlzLnNlbGVjdGVkR2F1Z2VJblBvaW50cyA9IHNlbGVjdGVkR2F1Z2VJblBvaW50c1swXTtcblxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNlbGVjdGVkR2F1Z2VJblBvaW50cyA9IG51bGw7XG4gICAgICB0aGlzLnNlbGVjdGVkR2F1Z2VzID0gW107XG4gICAgICB0aGlzLnNlbGVjdGVkUGl4ZWxzID0gW107XG4gICAgICB0aGlzLnBpeGVsc1NvbHV0aW9ucyA9IFtdO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuc2VsZWN0ZWRHYXVnZXMgPSBbXG4gICAgICBuZXcgTWFwTGF0TG5nKHRoaXMuc2VsZWN0ZWRHYXVnZUluUG9pbnRzLmdhdWdlQ2FydGVzaWFuVmFsdWUubGF0LCB0aGlzLnNlbGVjdGVkR2F1Z2VJblBvaW50cy5nYXVnZUNhcnRlc2lhblZhbHVlLmxuZywgdW5kZWZpbmVkLFxuICAgICAgICB0aGlzLnNlbGVjdGVkR2F1Z2VJblBvaW50cy5nYXVnZUlkLFxuICAgICAgICB0aGlzLnNlbGVjdGVkR2F1Z2VJblBvaW50cy5nYXVnZUxhYmVsICsgJz4nICsgdGhpcy5zZWxlY3RlZEdhdWdlSW5Qb2ludHMuZ2F1Z2VDYXJ0ZXNpYW5WYWx1ZS52YWx1ZSxcbiAgICAgICAgdGhpcy5zZWxlY3RlZEdhdWdlSW5Qb2ludHMuZ2F1Z2VDYXJ0ZXNpYW5WYWx1ZS52YWx1ZSksXG4gICAgXTtcblxuICAgIHRoaXMuc2VsZWN0R2F1Z2VJbkNvbXBhcmUoKTtcblxuICAgIGNvbnN0IHBpeGVsczogTWFwTGF0TG5nW10gPSBbXTtcbiAgICBmb3IgKGNvbnN0IHJhaW5DYXJ0ZXNpYW5WYWx1ZSBvZiB0aGlzLnNlbGVjdGVkR2F1Z2VJblBvaW50cy5yYWluQ2FydGVzaWFuVmFsdWVzKSB7XG4gICAgICBwaXhlbHMucHVzaChuZXcgTWFwTGF0TG5nKHJhaW5DYXJ0ZXNpYW5WYWx1ZS5sYXQgKyAwLjAwNSwgcmFpbkNhcnRlc2lhblZhbHVlLmxuZyArIDAuMDEpKTtcbiAgICB9XG4gICAgdGhpcy5zZWxlY3RlZFBpeGVscyA9IHBpeGVscztcblxuICAgIHRoaXMucGl4ZWxzU29sdXRpb25zID0gcGl4ZWxzU29sdXRpb25zO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldEN1cnJlbnRRdWFsaXR5UG9pbnRzKGNvbXBhcmVJbmRleDogbnVtYmVyKSB7XG4gICAgaWYgKGNvbXBhcmVJbmRleCA8IDAgfHwgdGhpcy5jb21wYXJlTmFtZXMubGVuZ3RoIDwgY29tcGFyZUluZGV4KSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuY29tcGFyZXNbY29tcGFyZUluZGV4XS5jb21wYXJlUG9pbnRzSGlzdG9yeTtcbiAgfVxuXG4gIHByb3RlY3RlZCBjbGVhbkNvbXBhcmVRdWFsaXR5KGRldGFpbHM/OiBzdHJpbmcpIHtcbiAgICB0aGlzLmNvbXBhcmVWZXJzaW9uID0gZGV0YWlscztcbiAgICB0aGlzLmNvbXBhcmVOYW1lcyA9IFtdO1xuICAgIHRoaXMuY29tcGFyZXMgPSBbXTtcbiAgICB0aGlzLmNvbXBhcmVTcGVlZE1hdHJpeCA9IFtdO1xuICAgIHRoaXMuY29tcGFyZVRydXN0ZWRJbmRpY2F0b3IgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5yYWluQ29tcHV0YXRpb25RdWFsaXRpZXMgPSB7fTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBmZXRjaFJhaW5Db21wdXRhdGlvblF1YWxpdGllcyh0YXJnZXRzT3JkZXJlZDoge1xuICAgIGRhdGU6IHN0cmluZztcbiAgICByYWluQ29tcHV0YXRpb25JZDogc3RyaW5nO1xuICAgIHJhaW5Db21wdXRhdGlvblF1YWxpdHlJZDogc3RyaW5nXG4gIH1bXSkge1xuXG4gICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXModGhpcy5yYWluQ29tcHV0YXRpb25RdWFsaXRpZXMpKSB7XG4gICAgICBjb25zdCBmb3VuZCA9IHRhcmdldHNPcmRlcmVkLmZpbHRlcih0ID0+IHQuZGF0ZSA9PT0ga2V5KTtcbiAgICAgIGlmIChmb3VuZC5sZW5ndGggPCAwKSB7XG4gICAgICAgIGRlbGV0ZSB0aGlzLnJhaW5Db21wdXRhdGlvblF1YWxpdGllc1trZXldO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZvciAoY29uc3QgdGFyZ2V0IG9mIHRhcmdldHNPcmRlcmVkKSB7XG4gICAgICBpZiAoIXRoaXMucmFpbkNvbXB1dGF0aW9uUXVhbGl0aWVzW3RhcmdldC5kYXRlXSAmJiB0YXJnZXQucmFpbkNvbXB1dGF0aW9uUXVhbGl0eUlkKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgdGhpcy5yYWluQ29tcHV0YXRpb25RdWFsaXRpZXNbdGFyZ2V0LmRhdGVdID0gYXdhaXQgdGhpcy5wcm9maWxlU2VydmljZVxuICAgICAgICAgICAgLmdldFJhaW5Db21wYXJlQnlJZCh0aGlzLnJhaW5Ob2RlLmdldElkKCksIHRhcmdldC5yYWluQ29tcHV0YXRpb25JZCwgdGFyZ2V0LnJhaW5Db21wdXRhdGlvblF1YWxpdHlJZCk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBzZWxlY3RHYXVnZUluQ29tcGFyZSgpIHtcbiAgICBmb3IgKGNvbnN0IGNvbXBhcmUgb2YgdGhpcy5jb21wYXJlcykge1xuICAgICAgY29uc3QgY29tcGFyZVBvaW50cyA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoY29tcGFyZS5jb21wYXJlUG9pbnRzKSk7XG4gICAgICBjb21wYXJlUG9pbnRzLmZvckVhY2gocCA9PiB7XG4gICAgICAgIGlmIChwLmlkID09PSB0aGlzLnNlbGVjdGVkR2F1Z2VJblBvaW50cz8uZ2F1Z2VJZCkge1xuICAgICAgICAgIHAuciA9IDEwO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHAuciA9IDM7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgY29tcGFyZS5jb21wYXJlUG9pbnRzID0gY29tcGFyZVBvaW50cztcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgcmVzZXRTZWxlY3RlZEdhdWdlcygpIHtcbiAgICAvLyBjb25zb2xlLmxvZygncmVzZXRTZWxlY3RlZEdhdWdlcyByZXNldCcpO1xuICAgIHRoaXMuc2VsZWN0ZWRHYXVnZSA9IG51bGw7XG4gICAgdGhpcy5zZWxlY3RlZEdhdWdlSW5Qb2ludHMgPSBudWxsO1xuICAgIHRoaXMuc2VsZWN0ZWRHYXVnZXMgPSBbXTtcbiAgICB0aGlzLnNlbGVjdGVkUGl4ZWxzID0gW107XG4gICAgdGhpcy5waXhlbHNTb2x1dGlvbnMgPSBbXTtcbiAgICB0aGlzLnNlbGVjdEdhdWdlSW5Db21wYXJlKCk7XG4gIH1cbn1cbiJdfQ==
|
|
233
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29tcGFyZU1hbmFnZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXBwL3NoYXJlZC90b29scy9Db21wYXJlTWFuYWdlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sVUFBVSxDQUFDO0FBQ25DLE9BQU8sRUFBZ0Usb0JBQW9CLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFDaEgsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLFdBQVcsQ0FBQztBQVlqQyxNQUFNLE9BQU8sY0FBYztJQXlCekIsWUFDWSxRQUFrQixFQUNsQixjQUE4QixFQUNqQyxZQUF3QixHQUFHLEVBQUU7SUFDcEMsQ0FBQztRQUhTLGFBQVEsR0FBUixRQUFRLENBQVU7UUFDbEIsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQ2pDLGNBQVMsR0FBVCxTQUFTLENBQ2Y7UUFFRCxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDbEIsQ0FBQztJQUVTLE1BQU0sQ0FBQyxXQUFXLENBQUMsS0FBYSxFQUFFLEtBQWEsRUFBRSxPQUFlO1FBRXhFLE1BQU0sV0FBVyxHQUFTLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUN4RCxNQUFNLFNBQVMsR0FBRyxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDaEQsU0FBUyxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsVUFBVSxFQUFFLEdBQUcsT0FBTyxDQUFDLENBQUM7UUFDdkQsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLFdBQVcsQ0FBQyxPQUFPLEVBQUUsR0FBRyxTQUFTLENBQUMsT0FBTyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQ3JGLE9BQU8sSUFBSSxLQUFLLENBQUMs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QzlCLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7TWFwTGF0TG5nfSBmcm9tICdyYWFpbi11aSc7XG5pbXBvcnQge1Bvc2l0aW9uVmFsdWUsIFF1YWxpdHlQb2ludCwgUmFpbkNvbXB1dGF0aW9uUXVhbGl0eSwgUmFpbk5vZGUsIFNwZWVkTWF0cml4Q29udGFpbmVyfSBmcm9tICdyYWFpbi1tb2RlbCc7XG5pbXBvcnQge1hZVHlwZX0gZnJvbSAnLi4veHl0eXBlJztcbmltcG9ydCB7UHJvZmlsZVNlcnZpY2V9IGZyb20gJy4uL3Byb2ZpbGUuc2VydmljZSc7XG5pbXBvcnQge0ZyYW1lU2V0fSBmcm9tICcuL0ZyYW1lU2V0JztcblxuZXhwb3J0IGludGVyZmFjZSBJQ29tcGFyZSB7XG4gIG5hbWU6IHN0cmluZztcbiAgY29tcGFyZVBvaW50czogWFlUeXBlW107XG4gIGNvbXBhcmVQb2ludHNNYXg6IFhZVHlwZTtcbiAgY29tcGFyZVBvaW50c0hpc3Rvcnk6IFF1YWxpdHlQb2ludFtdO1xuICByZW1hcmtzOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBjbGFzcyBDb21wYXJlTWFuYWdlciB7XG5cbiAgLy8gcHVibGljIGNvbXB1dGVkJDogT2JzZXJ2YWJsZTxib29sZWFuPjtcblxuICBwdWJsaWMgZ2F1Z2VzSW5Db21wYXJlOiBNYXBMYXRMbmdbXTtcbiAgcHVibGljIHNlbGVjdGVkR2F1Z2VzOiBNYXBMYXRMbmdbXTtcbiAgcHVibGljIHNlbGVjdGVkUGl4ZWxzOiBNYXBMYXRMbmdbXTtcbiAgcHVibGljIHBpeGVsc1NvbHV0aW9uczogTWFwTGF0TG5nW11bXTtcblxuICBwdWJsaWMgY29tcGFyZU5hbWVzOiBzdHJpbmdbXTtcbiAgcHVibGljIGNvbXBhcmVzOiBJQ29tcGFyZVtdO1xuICBwdWJsaWMgY29tcGFyZVNwZWVkTWF0cml4OiBQb3NpdGlvblZhbHVlW107XG4gIHB1YmxpYyBjb21wYXJlVmVyc2lvbjogc3RyaW5nO1xuICBwdWJsaWMgY29tcGFyZVRydXN0ZWRJbmRpY2F0b3I6IG51bWJlcjtcbiAgcHVibGljIGN1cnJlbnRRdWFsaXR5RG9uZURhdGU6IERhdGU7XG4gIHB1YmxpYyBjdXJyZW50UXVhbGl0eUxhdW5jaGVkQnk6IHN0cmluZztcbiAgcHVibGljIGN1cnJlbnRRdWFsaXR5VGltZVNwZW50SW5NczogbnVtYmVyO1xuICBwdWJsaWMgZ2xvYmFsQ29tcGFyZVBvaW50czogWFlUeXBlW107XG4gIHB1YmxpYyBnbG9iYWxDb21wYXJlUG9pbnRzTWF4OiBYWVR5cGU7XG5cbiAgcHJvdGVjdGVkIHNlbGVjdGVkR2F1Z2U6IFF1YWxpdHlQb2ludDtcbiAgcHJvdGVjdGVkIHNlbGVjdGVkR2F1Z2VJblBvaW50czogUXVhbGl0eVBvaW50O1xuICBwcm90ZWN0ZWQgc2VsZWN0ZWRHYXVnZUluUG9pbnRzRGV0YWlsOiBzdHJpbmc7XG4gIHByb3RlY3RlZCByYWluQ29tcHV0YXRpb25RdWFsaXRpZXM6IGFueTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcm90ZWN0ZWQgcmFpbk5vZGU6IFJhaW5Ob2RlLFxuICAgIHByb3RlY3RlZCBwcm9maWxlU2VydmljZTogUHJvZmlsZVNlcnZpY2UsXG4gICAgcHVibGljIG9uQ2hhbmdlczogKCkgPT4gdm9pZCA9ICgpID0+IHtcbiAgICB9XG4gICkge1xuICAgIHRoaXMuY2xlYW5BbGwoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBzdGF0aWMgQ29tcGFyZURhdGUoZGF0ZTE6IHN0cmluZywgZGF0ZTI6IHN0cmluZywgbWludXRlczogbnVtYmVyKTogYm9vbGVhbiB7XG5cbiAgICBjb25zdCBkYXRlMUFzRGF0ZTogRGF0ZSA9IG5ldyBEYXRlKHBhcnNlSW50KGRhdGUxLCAxMCkpO1xuICAgIGNvbnN0IGRhdGUyRGlmZiA9IG5ldyBEYXRlKHBhcnNlSW50KGRhdGUyLCAxMCkpO1xuICAgIGRhdGUyRGlmZi5zZXRNaW51dGVzKGRhdGUyRGlmZi5nZXRNaW51dGVzKCkgKyBtaW51dGVzKTtcbiAgICBjb25zdCBkaWZmID0gTWF0aC5yb3VuZCgoZGF0ZTFBc0RhdGUuZ2V0VGltZSgpIC0gZGF0ZTJEaWZmLmdldFRpbWUoKSkgLyAoNjAgKiAxMDAwKSk7XG4gICAgcmV0dXJuIGRpZmYgPT09IDA7XG4gIH1cblxuICBwcm90ZWN0ZWQgc3RhdGljIGFzeW5jIEJ1aWxkQ29tcGFyZShmcmFtZVNldDogeyBkYXRlOiBEYXRlIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldHNPcmRlcmVkOiB7IGRhdGU6IHN0cmluZzsgcmFpbkNvbXB1dGF0aW9uSWQ6IHN0cmluZzsgcmFpbkNvbXB1dGF0aW9uUXVhbGl0eUlkOiBzdHJpbmcgfVtdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYWluQ29tcHV0YXRpb25RdWFsaXRpZXM6IGFueSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2l0aENvbXBhcmVEdXBsaWNhdGU6IGJvb2xlYW4pIHtcblxuICAgIGxldCBjb21wYXJlU3BlZWRNYXRyaXgsIGNvbXBhcmVUcnVzdGVkSW5kaWNhdG9yO1xuICAgIGxldCBjb21wYXJlczogSUNvbXBhcmVbXSA9IFtdO1xuICAgIGNvbnN0IGN1cnJlbnRUYXJnZXQgPSB0YXJnZXRzT3JkZXJlZC5maWx0ZXIodCA9PiB0LmRhdGUgPT09ICcnICsgZnJhbWVTZXQuZGF0ZS5nZXRUaW1lKCkpWzBdO1xuICAgIGNvbnN0IGN1cnJlbnRQb3MgPSB0YXJnZXRzT3JkZXJlZC5pbmRleE9mKGN1cnJlbnRUYXJnZXQpO1xuICAgIGNvbnN0IHByZXZpb3VzVGFyZ2V0ID0gY3VycmVudFBvcyA+PSAwID8gdGFyZ2V0c09yZGVyZWRbY3VycmVudFBvcyAtIDFdIDogbnVsbDtcbiAgICBjb25zdCBuZXh0VGFyZ2V0ID0gY3VycmVudFBvcyA+PSAwICYmIGN1cnJlbnRQb3MgPCB0YXJnZXRzT3JkZXJlZC5sZW5ndGggLSAxID8gdGFyZ2V0c09yZGVyZWRbY3VycmVudFBvcyArIDFdIDogbnVsbDtcblxuXG4gICAgY29uc3QgY3VycmVudFF1YWxpdHk6IFJhaW5Db21wdXRhdGlvblF1YWxpdHkgPSByYWluQ29tcHV0YXRpb25RdWFsaXRpZXNbY3VycmVudFRhcmdldD8uZGF0ZV07XG4gICAgaWYgKCFjdXJyZW50UXVhbGl0eSkge1xuICAgICAgcmV0dXJuIHtjdXJyZW50UXVhbGl0eSwgY29tcGFyZVNwZWVkTWF0cml4LCBjb21wYXJlVHJ1c3RlZEluZGljYXRvciwgY29tcGFyZXN9O1xuICAgIH1cblxuICAgIGNvbnN0IHByZXZpb3VzUXVhbGl0eTogUmFpbkNvbXB1dGF0aW9uUXVhbGl0eSA9IHByZXZpb3VzVGFyZ2V0ICYmXG4gICAgQ29tcGFyZU1hbmFnZXIuQ29tcGFyZURhdGUocHJldmlvdXNUYXJnZXQuZGF0ZSwgY3VycmVudFRhcmdldC5kYXRlLCAtNSkgP1xuICAgICAgcmFpbkNvbXB1dGF0aW9uUXVhbGl0aWVzW3ByZXZpb3VzVGFyZ2V0LmRhdGVdIDogbnVsbDtcbiAgICBjb25zdCBuZXh0UXVhbGl0eTogUmFpbkNvbXB1dGF0aW9uUXVhbGl0eSA9IG5leHRUYXJnZXRcbiAgICAmJiBDb21wYXJlTWFuYWdlci5Db21wYXJlRGF0ZShuZXh0VGFyZ2V0LmRhdGUsIGN1cnJlbnRUYXJnZXQuZGF0ZSwgKzUpID9cbiAgICAgIHJhaW5Db21wdXRhdGlvblF1YWxpdGllc1tuZXh0VGFyZ2V0LmRhdGVdIDogbnVsbDtcblxuICAgIGNvbnN0IHF1YWxpdHlTcGVlZE1hdHJpeENvbnRhaW5lciA9IGN1cnJlbnRRdWFsaXR5LnF1YWxpdHlTcGVlZE1hdHJpeENvbnRhaW5lcjtcbiAgICBjb21wYXJlU3BlZWRNYXRyaXggPSBxdWFsaXR5U3BlZWRNYXRyaXhDb250YWluZXIucmVuZGVyTWVyZ2VkTWF0cml4KHtub3JtYWxpemU6IHRydWV9KTtcbiAgICBjb21wYXJlVHJ1c3RlZEluZGljYXRvciA9IHF1YWxpdHlTcGVlZE1hdHJpeENvbnRhaW5lci5nZXRUcnVzdGVkSW5kaWNhdG9ycygpWzBdO1xuXG4gICAgY29uc3QgY29tcGFyZXNUb01hcCA9IFNwZWVkTWF0cml4Q29udGFpbmVyLkJ1aWxkQ29tcGFyZXMoY3VycmVudFF1YWxpdHksIHByZXZpb3VzUXVhbGl0eSwgbmV4dFF1YWxpdHksIHdpdGhDb21wYXJlRHVwbGljYXRlKTtcbiAgICBjb21wYXJlcyA9IGNvbXBhcmVzVG9NYXAubWFwKGMgPT4ge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbmFtZTogYy5uYW1lLFxuICAgICAgICBjb21wYXJlUG9pbnRzOiBjLnF1YWxpdHlQb2ludHMubWFwKHAgPT4gbmV3IFhZVHlwZShwLmdldEdhdWdlVmFsdWUoKSwgcC5nZXRSYWluVmFsdWUoKSwgMiwgcC5nYXVnZUxhYmVsLCBwLmdhdWdlSWQpKSxcbiAgICAgICAgY29tcGFyZVBvaW50c01heDogbmV3IFhZVHlwZShjLm1heFZhbHVlICsgMjAsIGMubWF4VmFsdWUgKyAyMCksXG4gICAgICAgIGNvbXBhcmVQb2ludHNIaXN0b3J5OiBjLnF1YWxpdHlQb2ludHNMZWdhY3ksXG4gICAgICAgIHJlbWFya3M6IGMucmVtYXJrc1xuICAgICAgfTtcbiAgICB9KTtcbiAgICByZXR1cm4ge2N1cnJlbnRRdWFsaXR5LCBjb21wYXJlU3BlZWRNYXRyaXgsIGNvbXBhcmVUcnVzdGVkSW5kaWNhdG9yLCBjb21wYXJlc307XG4gIH1cblxuICBwdWJsaWMgY2xlYW5BbGwoKSB7XG4gICAgdGhpcy5nYXVnZXNJbkNvbXBhcmUgPSBbXTtcbiAgICB0aGlzLnNlbGVjdGVkR2F1Z2VzID0gW107XG4gICAgdGhpcy5zZWxlY3RlZFBpeGVscyA9IFtdO1xuICAgIHRoaXMucGl4ZWxzU29sdXRpb25zID0gW107XG5cbiAgICB0aGlzLnNlbGVjdGVkR2F1Z2UgPSBudWxsO1xuICAgIHRoaXMuc2VsZWN0ZWRHYXVnZUluUG9pbnRzID0gbnVsbDtcbiAgICB0aGlzLmNsZWFuQ29tcGFyZVF1YWxpdHkoJ25vIGNvbXBhcmUnKTtcbiAgfVxuXG4gIGFzeW5jIHJlZnJlc2hDb21wYXJlUXVhbGl0eShmcmFtZVNldDogRnJhbWVTZXQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRzOiB7IGRhdGU6IERhdGU7IHJhaW5Db21wdXRhdGlvbklkOiBzdHJpbmc7IHJhaW5Db21wdXRhdGlvblF1YWxpdHlJZDogc3RyaW5nIH1bXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpdGhDb21wYXJlRHVwbGljYXRlOiBib29sZWFuKSB7XG5cbiAgICBjb25zdCB0YXJnZXRzT3JkZXJlZCA9IHRhcmdldHNcbiAgICAgIC5zb3J0KChhLCBiKSA9PiBhLmRhdGUuZ2V0VGltZSgpIC0gYi5kYXRlLmdldFRpbWUoKSlcbiAgICAgIC5tYXAodCA9PiB7XG4gICAgICAgIHJldHVybiB7ZGF0ZTogJycgKyB0LmRhdGUuZ2V0VGltZSgpLCByYWluQ29tcHV0YXRpb25JZDogdC5yYWluQ29tcHV0YXRpb25JZCwgcmFpbkNvbXB1dGF0aW9uUXVhbGl0eUlkOiB0LnJhaW5Db21wdXRhdGlvblF1YWxpdHlJZH07XG4gICAgICB9KTtcblxuICAgIGF3YWl0IHRoaXMuZmV0Y2hSYWluQ29tcHV0YXRpb25RdWFsaXRpZXModGFyZ2V0c09yZGVyZWQpO1xuXG4gICAgY29uc3Qge2N1cnJlbnRRdWFsaXR5LCBjb21wYXJlU3BlZWRNYXRyaXgsIGNvbXBhcmVUcnVzdGVkSW5kaWNhdG9yLCBjb21wYXJlc30gPVxuICAgICAgYXdhaXQgQ29tcGFyZU1hbmFnZXIuQnVpbGRDb21wYXJlKGZyYW1lU2V0LCB0YXJnZXRzT3JkZXJlZCwgdGhpcy5yYWluQ29tcHV0YXRpb25RdWFsaXRpZXMsIHdpdGhDb21wYXJlRHVwbGljYXRlKTtcblxuICAgIGlmICghY3VycmVudFF1YWxpdHkpIHtcbiAgICAgIHRoaXMuY2xlYW5Db21wYXJlUXVhbGl0eSgnbm8gY3VycmVudCBxdWFsaXR5ICcgKyBPYmplY3Qua2V5cyh0aGlzLnJhaW5Db21wdXRhdGlvblF1YWxpdGllcykpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmN1cnJlbnRRdWFsaXR5RG9uZURhdGUgPSBjdXJyZW50UXVhbGl0eS5pc0RvbmVEYXRlO1xuICAgICAgdGhpcy5jdXJyZW50UXVhbGl0eVRpbWVTcGVudEluTXMgPSBjdXJyZW50UXVhbGl0eS50aW1lU3BlbnRJbk1zO1xuICAgICAgdGhpcy5jdXJyZW50UXVhbGl0eUxhdW5jaGVkQnkgPSBjdXJyZW50UXVhbGl0eS5sYXVuY2hlZEJ5O1xuICAgICAgdGhpcy5jb21wYXJlVmVyc2lvbiA9IGN1cnJlbnRRdWFsaXR5LmdldFZlcnNpb24oKTtcbiAgICAgIHRoaXMuY29tcGFyZVNwZWVkTWF0cml4ID0gY29tcGFyZVNwZWVkTWF0cml4O1xuICAgICAgdGhpcy5jb21wYXJlVHJ1c3RlZEluZGljYXRvciA9IGNvbXBhcmVUcnVzdGVkSW5kaWNhdG9yO1xuICAgICAgdGhpcy5jb21wYXJlcyA9IGNvbXBhcmVzO1xuICAgIH1cblxuICAgIHRoaXMub25DaGFuZ2VzKCk7XG4gIH1cblxuICBhc3luYyByZWZyZXNoR2xvYmFsQ29tcGFyZVF1YWxpdHkodGFyZ2V0czogeyBkYXRlOiBEYXRlOyByYWluQ29tcHV0YXRpb25JZDogc3RyaW5nOyByYWluQ29tcHV0YXRpb25RdWFsaXR5SWQ6IHN0cmluZyB9W10sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aXRoQ29tcGFyZUR1cGxpY2F0ZTogYm9vbGVhbikge1xuXG4gICAgY29uc3QgdGFyZ2V0c09yZGVyZWQgPSB0YXJnZXRzXG4gICAgICAuc29ydCgoYSwgYikgPT4gYS5kYXRlLmdldFRpbWUoKSAtIGIuZGF0ZS5nZXRUaW1lKCkpXG4gICAgICAubWFwKHQgPT4ge1xuICAgICAgICByZXR1cm4ge2RhdGU6ICcnICsgdC5kYXRlLmdldFRpbWUoKSwgcmFpbkNvbXB1dGF0aW9uSWQ6IHQucmFpbkNvbXB1dGF0aW9uSWQsIHJhaW5Db21wdXRhdGlvblF1YWxpdHlJZDogdC5yYWluQ29tcHV0YXRpb25RdWFsaXR5SWR9O1xuICAgICAgfSk7XG5cbiAgICBhd2FpdCB0aGlzLmZldGNoUmFpbkNvbXB1dGF0aW9uUXVhbGl0aWVzKHRhcmdldHNPcmRlcmVkKTtcblxuICAgIGxldCBnbG9iYWxDb21wYXJlUG9pbnRzOiBYWVR5cGVbXSA9IFtdO1xuICAgIGZvciAoY29uc3QgZnJhbWVTZXQgb2YgdGFyZ2V0cykge1xuICAgICAgY29uc3Qge2N1cnJlbnRRdWFsaXR5LCBjb21wYXJlU3BlZWRNYXRyaXgsIGNvbXBhcmVUcnVzdGVkSW5kaWNhdG9yLCBjb21wYXJlc30gPVxuICAgICAgICBhd2FpdCBDb21wYXJlTWFuYWdlci5CdWlsZENvbXBhcmUoZnJhbWVTZXQsIHRhcmdldHNPcmRlcmVkLCB0aGlzLnJhaW5Db21wdXRhdGlvblF1YWxpdGllcywgd2l0aENvbXBhcmVEdXBsaWNhdGUpO1xuICAgICAgZm9yIChjb25zdCBjb21wYXJlIG9mIGNvbXBhcmVzID8gY29tcGFyZXMgOiBbXSkge1xuICAgICAgICBnbG9iYWxDb21wYXJlUG9pbnRzID0gZ2xvYmFsQ29tcGFyZVBvaW50cy5jb25jYXQoY29tcGFyZS5jb21wYXJlUG9pbnRzKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBsZXQgbWF4WCA9IDAsIG1heFkgPSAwO1xuICAgIGNvbnN0IGdsb2JhbENvbXBhcmVQb2ludHNHcm91cGVkID0gW107XG4gICAgY29uc3QgcG9pbnRzR3JvdXBlZEJ5SWQgPSBnbG9iYWxDb21wYXJlUG9pbnRzLnJlZHVjZSgocmVzLCB2YWx1ZSkgPT4ge1xuICAgICAgaWYgKCFyZXNbdmFsdWUuaWRdKSB7XG4gICAgICAgIHJlc1t2YWx1ZS5pZF0gPSB2YWx1ZTtcbiAgICAgICAgZ2xvYmFsQ29tcGFyZVBvaW50c0dyb3VwZWQucHVzaChyZXNbdmFsdWUuaWRdKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc1t2YWx1ZS5pZF0ueCArPSB2YWx1ZS54O1xuICAgICAgICByZXNbdmFsdWUuaWRdLnkgKz0gdmFsdWUueTtcbiAgICAgIH1cbiAgICAgIG1heFggPSBNYXRoLm1heChtYXhYLCByZXNbdmFsdWUuaWRdLngpO1xuICAgICAgbWF4WSA9IE1hdGgubWF4KG1heFksIHJlc1t2YWx1ZS5pZF0ueSk7XG4gICAgICByZXR1cm4gcmVzO1xuICAgIH0sIHt9KTtcbiAgICB0aGlzLmdsb2JhbENvbXBhcmVQb2ludHMgPSBnbG9iYWxDb21wYXJlUG9pbnRzR3JvdXBlZDtcbiAgICB0aGlzLmdsb2JhbENvbXBhcmVQb2ludHNNYXggPSBuZXcgWFlUeXBlKG1heFgsIG1heFkpO1xuICB9XG5cbiAgYXN5bmMgc2V0R2F1Z2VzKCkge1xuICAgIC8vIGNvbnNvbGUubG9nKCdzZXRHYXVnZXMnKTtcblxuICAgIGNvbnN0IHF1YWxpdHlQb2ludHM6IFF1YWxpdHlQb2ludFtdID0gW107XG4gICAgZm9yIChjb25zdCBjb21wYXJlIG9mIHRoaXMuY29tcGFyZXMpIHtcbiAgICAgIGZvciAoY29uc3QgcXVhbGl0eVBvaW50IG9mIGNvbXBhcmUuY29tcGFyZVBvaW50c0hpc3RvcnkpIHtcbiAgICAgICAgY29uc3QgYWxyZWFkeUFkZGVkID0gcXVhbGl0eVBvaW50cy5maWx0ZXIocCA9PiBwPy5nYXVnZUlkID09PSBxdWFsaXR5UG9pbnQuZ2F1Z2VJZCk7XG4gICAgICAgIGlmIChhbHJlYWR5QWRkZWQubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgcXVhbGl0eVBvaW50cy5wdXNoKHF1YWxpdHlQb2ludCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmdhdWdlc0luQ29tcGFyZSA9IHF1YWxpdHlQb2ludHMubWFwKHAgPT4ge1xuICAgICAgcmV0dXJuIG5ldyBNYXBMYXRMbmcocC5nYXVnZUNhcnRlc2lhblZhbHVlLmxhdCwgcC5nYXVnZUNhcnRlc2lhblZhbHVlLmxuZywgMCxcbiAgICAgICAgcC5nYXVnZUlkLCBwLmdhdWdlTGFiZWwgKyAnPicgKyBwLmdldEdhdWdlVmFsdWUoKSxcbiAgICAgICAgcC5nZXRHYXVnZVZhbHVlKCkpO1xuICAgIH0pO1xuXG4gICAgdGhpcy5yZXNldFNlbGVjdGVkR2F1Z2VzKCk7XG4gIH1cblxuICBhc3luYyBzZWxlY3RHYXVnZShnYXVnZUlkOiBzdHJpbmcsIGNvbXBhcmVJbmRleDogbnVtYmVyKSB7XG4gICAgLy8gY29uc29sZS5sb2coJ3NlbGVjdEdhdWdlJywgZ2F1Z2VJZCwgY29tcGFyZUluZGV4KTtcblxuICAgIGlmIChnYXVnZUlkKSB7XG4gICAgICBjb25zdCB4eXMgPSB0aGlzLmdldEN1cnJlbnRRdWFsaXR5UG9pbnRzKGNvbXBhcmVJbmRleCkuZmlsdGVyKHAgPT4gcC5nYXVnZUlkID09PSBnYXVnZUlkKTtcbiAgICAgIHRoaXMuc2VsZWN0ZWRHYXVnZSA9IHh5cy5sZW5ndGggPT09IDEgPyB4eXNbMF0gOiBudWxsO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNlbGVjdGVkR2F1Z2UgPSBudWxsO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5zZWxlY3RlZEdhdWdlKSB7XG4gICAgICByZXR1cm4gdGhpcy5yZXNldFNlbGVjdGVkR2F1Z2VzKCk7XG4gICAgfVxuXG4gICAgY29uc3Qgc2VsZWN0ZWRHYXVnZUluUG9pbnRzID0gdGhpcy5nZXRDdXJyZW50UXVhbGl0eVBvaW50cyhjb21wYXJlSW5kZXgpLmZpbHRlcihwID0+IHAuZ2F1Z2VJZCA9PT0gdGhpcy5zZWxlY3RlZEdhdWdlLmdhdWdlSWQpO1xuICAgIGxldCBwaXhlbHNTb2x1dGlvbnM6IE1hcExhdExuZ1tdW10gPSBbXTtcblxuICAgIGlmIChzZWxlY3RlZEdhdWdlSW5Qb2ludHMubGVuZ3RoID09PSAxKSB7XG4gICAgICBjb25zdCByZW1hcmtzID0gSlNPTi5wYXJzZShzZWxlY3RlZEdhdWdlSW5Qb2ludHNbMF0ucmVtYXJrKVxuICAgICAgICAuc29ydCgoYSwgYikgPT4gYS5jcml0ZXJpYUF0dGVtcHRlZFRvQmVNaW5pbXVtIC0gYi5jcml0ZXJpYUF0dGVtcHRlZFRvQmVNaW5pbXVtKTtcbiAgICAgIGNvbnNvbGUubG9nKHJlbWFya3MpO1xuICAgICAgcGl4ZWxzU29sdXRpb25zID0gcmVtYXJrc1xuICAgICAgICAubWFwKHJlbWFyayA9PiByZW1hcmsuc29sdXRpb25Gb3JHYXVnZS5waXhlbHNcbiAgICAgICAgICAubWFwKHAgPT4gbmV3IE1hcExhdExuZyhwLnkgKyAwLjAwNSwgcC54ICsgMC4wMSwgMCwgJycgKyAhcmVtYXJrLm5vdFBvc3NpYmxlLCAnJyArICFyZW1hcmsubm90UG9zc2libGUsIDEpKSk7XG5cbiAgICAgIGNvbnN0IHRpbWVEZWx0YUluTWludXRlcyA9IHNlbGVjdGVkR2F1Z2VJblBvaW50c1swXS5nZXRUaW1lRGVsdGFJbk1pbnV0ZXMoKTtcbiAgICAgIHRoaXMuc2VsZWN0ZWRHYXVnZUluUG9pbnRzRGV0YWlsID0gJycgKyBzZWxlY3RlZEdhdWdlSW5Qb2ludHNbMF0uZ2F1Z2VMYWJlbCArICcgPiAnXG4gICAgICAgICsgTWF0aC5yb3VuZChzZWxlY3RlZEdhdWdlSW5Qb2ludHNbMF0uZ2V0R2F1Z2VWYWx1ZSgpICogMTAwKSAvIDEwMCArICcgLyAnXG4gICAgICAgICsgTWF0aC5yb3VuZChzZWxlY3RlZEdhdWdlSW5Qb2ludHNbMF0uZ2V0UmFpblZhbHVlKCkgKiAxMDApIC8gMTAwXG4gICAgICAgICsgJyBkVD0nICsgdGltZURlbHRhSW5NaW51dGVzO1xuXG4gICAgICB0aGlzLnNlbGVjdGVkR2F1Z2VJblBvaW50cyA9IHNlbGVjdGVkR2F1Z2VJblBvaW50c1swXTtcblxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNlbGVjdGVkR2F1Z2VJblBvaW50cyA9IG51bGw7XG4gICAgICB0aGlzLnNlbGVjdGVkR2F1Z2VzID0gW107XG4gICAgICB0aGlzLnNlbGVjdGVkUGl4ZWxzID0gW107XG4gICAgICB0aGlzLnBpeGVsc1NvbHV0aW9ucyA9IFtdO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuc2VsZWN0ZWRHYXVnZXMgPSBbXG4gICAgICBuZXcgTWFwTGF0TG5nKHRoaXMuc2VsZWN0ZWRHYXVnZUluUG9pbnRzLmdhdWdlQ2FydGVzaWFuVmFsdWUubGF0LCB0aGlzLnNlbGVjdGVkR2F1Z2VJblBvaW50cy5nYXVnZUNhcnRlc2lhblZhbHVlLmxuZywgdW5kZWZpbmVkLFxuICAgICAgICB0aGlzLnNlbGVjdGVkR2F1Z2VJblBvaW50cy5nYXVnZUlkLFxuICAgICAgICB0aGlzLnNlbGVjdGVkR2F1Z2VJblBvaW50cy5nYXVnZUxhYmVsICsgJz4nICsgdGhpcy5zZWxlY3RlZEdhdWdlSW5Qb2ludHMuZ2F1Z2VDYXJ0ZXNpYW5WYWx1ZS52YWx1ZSxcbiAgICAgICAgdGhpcy5zZWxlY3RlZEdhdWdlSW5Qb2ludHMuZ2F1Z2VDYXJ0ZXNpYW5WYWx1ZS52YWx1ZSksXG4gICAgXTtcblxuICAgIHRoaXMuc2VsZWN0R2F1Z2VJbkNvbXBhcmUoKTtcblxuICAgIGNvbnN0IHBpeGVsczogTWFwTGF0TG5nW10gPSBbXTtcbiAgICBmb3IgKGNvbnN0IHJhaW5DYXJ0ZXNpYW5WYWx1ZSBvZiB0aGlzLnNlbGVjdGVkR2F1Z2VJblBvaW50cy5yYWluQ2FydGVzaWFuVmFsdWVzKSB7XG4gICAgICBwaXhlbHMucHVzaChuZXcgTWFwTGF0TG5nKHJhaW5DYXJ0ZXNpYW5WYWx1ZS5sYXQgKyAwLjAwNSwgcmFpbkNhcnRlc2lhblZhbHVlLmxuZyArIDAuMDEpKTtcbiAgICB9XG4gICAgdGhpcy5zZWxlY3RlZFBpeGVscyA9IHBpeGVscztcblxuICAgIHRoaXMucGl4ZWxzU29sdXRpb25zID0gcGl4ZWxzU29sdXRpb25zO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldEN1cnJlbnRRdWFsaXR5UG9pbnRzKGNvbXBhcmVJbmRleDogbnVtYmVyKSB7XG4gICAgaWYgKGNvbXBhcmVJbmRleCA8IDAgfHwgdGhpcy5jb21wYXJlTmFtZXMubGVuZ3RoIDwgY29tcGFyZUluZGV4KSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuY29tcGFyZXNbY29tcGFyZUluZGV4XS5jb21wYXJlUG9pbnRzSGlzdG9yeTtcbiAgfVxuXG4gIHByb3RlY3RlZCBjbGVhbkNvbXBhcmVRdWFsaXR5KGRldGFpbHM/OiBzdHJpbmcpIHtcbiAgICB0aGlzLmNvbXBhcmVWZXJzaW9uID0gZGV0YWlscztcbiAgICB0aGlzLmNvbXBhcmVOYW1lcyA9IFtdO1xuICAgIHRoaXMuY29tcGFyZXMgPSBbXTtcbiAgICB0aGlzLmNvbXBhcmVTcGVlZE1hdHJpeCA9IFtdO1xuICAgIHRoaXMuY29tcGFyZVRydXN0ZWRJbmRpY2F0b3IgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5yYWluQ29tcHV0YXRpb25RdWFsaXRpZXMgPSB7fTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhc3luYyBmZXRjaFJhaW5Db21wdXRhdGlvblF1YWxpdGllcyh0YXJnZXRzT3JkZXJlZDoge1xuICAgIGRhdGU6IHN0cmluZztcbiAgICByYWluQ29tcHV0YXRpb25JZDogc3RyaW5nO1xuICAgIHJhaW5Db21wdXRhdGlvblF1YWxpdHlJZDogc3RyaW5nXG4gIH1bXSkge1xuXG4gICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXModGhpcy5yYWluQ29tcHV0YXRpb25RdWFsaXRpZXMpKSB7XG4gICAgICBjb25zdCBmb3VuZCA9IHRhcmdldHNPcmRlcmVkLmZpbHRlcih0ID0+IHQuZGF0ZSA9PT0ga2V5KTtcbiAgICAgIGlmIChmb3VuZC5sZW5ndGggPCAwKSB7XG4gICAgICAgIGRlbGV0ZSB0aGlzLnJhaW5Db21wdXRhdGlvblF1YWxpdGllc1trZXldO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZvciAoY29uc3QgdGFyZ2V0IG9mIHRhcmdldHNPcmRlcmVkKSB7XG4gICAgICBpZiAoIXRoaXMucmFpbkNvbXB1dGF0aW9uUXVhbGl0aWVzW3RhcmdldC5kYXRlXSAmJiB0YXJnZXQucmFpbkNvbXB1dGF0aW9uUXVhbGl0eUlkKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgdGhpcy5yYWluQ29tcHV0YXRpb25RdWFsaXRpZXNbdGFyZ2V0LmRhdGVdID0gYXdhaXQgdGhpcy5wcm9maWxlU2VydmljZVxuICAgICAgICAgICAgLmdldFJhaW5Db21wYXJlQnlJZCh0aGlzLnJhaW5Ob2RlLmdldElkKCksIHRhcmdldC5yYWluQ29tcHV0YXRpb25JZCwgdGFyZ2V0LnJhaW5Db21wdXRhdGlvblF1YWxpdHlJZCk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBzZWxlY3RHYXVnZUluQ29tcGFyZSgpIHtcbiAgICBmb3IgKGNvbnN0IGNvbXBhcmUgb2YgdGhpcy5jb21wYXJlcykge1xuICAgICAgY29uc3QgY29tcGFyZVBvaW50cyA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoY29tcGFyZS5jb21wYXJlUG9pbnRzKSk7XG4gICAgICBjb21wYXJlUG9pbnRzLmZvckVhY2gocCA9PiB7XG4gICAgICAgIGlmIChwLmlkID09PSB0aGlzLnNlbGVjdGVkR2F1Z2VJblBvaW50cz8uZ2F1Z2VJZCkge1xuICAgICAgICAgIHAuciA9IDEwO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHAuciA9IDM7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgY29tcGFyZS5jb21wYXJlUG9pbnRzID0gY29tcGFyZVBvaW50cztcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgcmVzZXRTZWxlY3RlZEdhdWdlcygpIHtcbiAgICAvLyBjb25zb2xlLmxvZygncmVzZXRTZWxlY3RlZEdhdWdlcyByZXNldCcpO1xuICAgIHRoaXMuc2VsZWN0ZWRHYXVnZSA9IG51bGw7XG4gICAgdGhpcy5zZWxlY3RlZEdhdWdlSW5Qb2ludHMgPSBudWxsO1xuICAgIHRoaXMuc2VsZWN0ZWRHYXVnZXMgPSBbXTtcbiAgICB0aGlzLnNlbGVjdGVkUGl4ZWxzID0gW107XG4gICAgdGhpcy5waXhlbHNTb2x1dGlvbnMgPSBbXTtcbiAgICB0aGlzLnNlbGVjdEdhdWdlSW5Db21wYXJlKCk7XG4gIH1cbn1cbiJdfQ==
|