@smarterplan/ngx-smarterplan-core 1.4.9 → 1.4.10
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/esm2022/lib/matterport-extensions/security-camera/SecurityCamera.mjs +10 -4
- package/esm2022/lib/services/filter.service.mjs +19 -16
- package/esm2022/lib/services/matterport-import.service.mjs +179 -13
- package/esm2022/lib/services/matterport-navigation.service.mjs +85 -6
- package/esm2022/lib/services/matterport-tag.service.mjs +32 -17
- package/esm2022/lib/services/matterport.service.mjs +15 -9
- package/esm2022/lib/services/models/comment.service.mjs +6 -3
- package/esm2022/lib/services/models/equipment.service.mjs +51 -59
- package/esm2022/lib/services/models/ticket.service.mjs +33 -33
- package/esm2022/lib/services/navigator.service.mjs +4 -5
- package/esm2022/lib/services/viewer.service.mjs +11 -2
- package/fesm2022/smarterplan-ngx-smarterplan-core.mjs +431 -153
- package/fesm2022/smarterplan-ngx-smarterplan-core.mjs.map +1 -1
- package/lib/services/matterport-import.service.d.ts +10 -0
- package/lib/services/matterport-navigation.service.d.ts +30 -0
- package/lib/services/matterport.service.d.ts +4 -0
- package/lib/services/models/ticket.service.d.ts +1 -1
- package/lib/services/viewer.service.d.ts +12 -1
- package/package.json +1 -1
|
@@ -21,8 +21,11 @@ export class CommentService {
|
|
|
21
21
|
if (comment.ticketID && !comment.ticket) {
|
|
22
22
|
comment.ticket = await this.API.__proto__.GetTicket(comment.ticketID);
|
|
23
23
|
}
|
|
24
|
-
|
|
25
|
-
|
|
24
|
+
let values = comment.dimensions;
|
|
25
|
+
let numberPoints = 0;
|
|
26
|
+
if (values) {
|
|
27
|
+
numberPoints = values.length + 1;
|
|
28
|
+
}
|
|
26
29
|
const poi = await this.poiService.getPoiByElementId(commentID);
|
|
27
30
|
const measure = {
|
|
28
31
|
id: comment.id,
|
|
@@ -97,4 +100,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
97
100
|
type: Inject,
|
|
98
101
|
args: ['currentAPIService']
|
|
99
102
|
}] }, { type: i1.PoiService }] });
|
|
100
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
103
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbWVudC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXNtYXJ0ZXJwbGFuLWNvcmUvc3JjL2xpYi9zZXJ2aWNlcy9tb2RlbHMvY29tbWVudC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25ELE9BQU8sRUFBMEMsV0FBVyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDMUYsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7O0FBTS9DLE1BQU0sT0FBTyxjQUFjO0lBSVg7SUFGWixHQUFHLENBQU0sQ0FBQyxNQUFNO0lBQ2hCLFlBQXlDLFdBQWdCLEVBQzdDLFVBQXNCO1FBQXRCLGVBQVUsR0FBVixVQUFVLENBQVk7UUFDOUIsSUFBSSxDQUFDLEdBQUcsR0FBRyxXQUFXLENBQUM7SUFDM0IsQ0FBQztJQUVELHVCQUF1QixDQUFDLFFBQWdCO1FBQ3BDLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDbEYsQ0FBQztJQUVELEtBQUssQ0FBQyxvQkFBb0IsQ0FBQyxPQUFlO1FBQ3RDLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FDbkQsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQy9CLENBQUM7SUFDTixDQUFDO0lBRUQsS0FBSyxDQUFDLHdCQUF3QixDQUFDLFNBQWlCO1FBQzVDLE1BQU0sT0FBTyxHQUFHLE1BQU0sSUFBSSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsQ0FB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UUFDSCxNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQ2IsT0FBTyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsRUFBRTtZQUN2QyxJQUNJLEtBQUssQ0FBQyxJQUFJLEtBQUssV0FBVyxDQUFDLEtBQUs7Z0JBQ2hDLEtBQUssQ0FBQyxFQUFFLEtBQUssU0FBUyxFQUN4QixDQUFDO2dCQUNDLE1BQU0sSUFBSSxDQUFDLGFBQWEsQ0FBQztvQkFDckIsRUFBRSxFQUFFLEtBQUssQ0FBQyxFQUFFO29CQUNaLFlBQVksRUFBRSxLQUFLO2lCQUN0QixDQUFDLENBQUM7WUFDUCxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQ0wsQ0FBQztRQUNGLE9BQU8sY0FBYyxDQUFDO0lBQzFCLENBQUM7d0dBbkhRLGNBQWMsa0JBR0gsbUJBQW1COzRHQUg5QixjQUFjLGNBRlgsTUFBTTs7NEZBRVQsY0FBYztrQkFIMUIsVUFBVTttQkFBQztvQkFDUixVQUFVLEVBQUUsTUFBTTtpQkFDckI7OzBCQUlnQixNQUFNOzJCQUFDLG1CQUFtQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdCwgSW5qZWN0YWJsZSB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7IE1lYXN1cmVtZW50LCBGZWF0dXJlLCBDb21tZW50LCBJVXBkYXRlLCBDb21tZW50VHlwZSB9IGZyb20gXCIuLi8uLi90eXBlcy5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IHVwbG9hZEZpbGVUb1MzIH0gZnJvbSBcIi4uL3MzLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgUG9pU2VydmljZSB9IGZyb20gXCIuL3BvaS5zZXJ2aWNlXCI7XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgICBwcm92aWRlZEluOiBcInJvb3RcIixcclxufSlcclxuZXhwb3J0IGNsYXNzIENvbW1lbnRTZXJ2aWNlIHtcclxuXHJcbiAgICBBUEk6IGFueTsgLy8gQVdTXHJcbiAgICBjb25zdHJ1Y3RvcihASW5qZWN0KCdjdXJyZW50QVBJU2VydmljZScpIGFwaUluamVjdGVkOiBhbnksXHJcbiAgICAgICAgcHJpdmF0ZSBwb2lTZXJ2aWNlOiBQb2lTZXJ2aWNlKSB7XHJcbiAgICAgICAgdGhpcy5BUEkgPSBhcGlJbmplY3RlZDtcclxuICAgIH1cclxuXHJcbiAgICBnZXRDb21tZW50c0Zyb21UaWNrZXRJRCh0aWNrZXRJRDogc3RyaW5nKTogUHJvbWlzZTxDb21tZW50W10+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5BUEkuX19wcm90b19fLkNvbW1lbnRzQnlUaWNrZXQodGlja2V0SUQpLnRoZW4oKHJlcykgPT4gcmVzLml0ZW1zKTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBnZXRDb21tZW50c0J5U3BhY2VJRChzcGFjZUlEOiBzdHJpbmcpOiBQcm9taXNlPENvbW1lbnRbXT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLkFQSS5fX3Byb3RvX18uQ29tbWVudHNCeVNwYWNlKHNwYWNlSUQpLnRoZW4oXHJcbiAgICAgICAgICAgIChjb21tZW50cykgPT4gY29tbWVudHMuaXRlbXMsXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyByZWFkQ29tbWVudEFzTWVhc3VyZW1lbnQoY29tbWVudElEOiBzdHJpbmcpOiBQcm9taXNlPE1lYXN1cmVtZW50PiB7XHJcbiAgICAgICAgY29uc3QgY29tbWVudCA9IGF3YWl0IHRoaXMuZ2V0Q29tbWVudChjb21tZW50SUQpO1xyXG4gICAgICAgIGlmIChjb21tZW50LnRpY2tldElEICYmICFjb21tZW50LnRpY2tldCkge1xyXG4gICAgICAgICAgICBjb21tZW50LnRpY2tldCA9IGF3YWl0IHRoaXMuQVBJLl9fcHJvdG9fXy5HZXRUaWNrZXQoY29tbWVudC50aWNrZXRJRCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxldCB2YWx1ZXMgPSBjb21tZW50LmRpbWVuc2lvbnM7XHJcbiAgICAgICAgbGV0IG51bWJlclBvaW50cyA9IDBcclxuICAgICAgICBpZiAodmFsdWVzKSB7XHJcbiAgICAgICAgICAgIG51bWJlclBvaW50cyA9IHZhbHVlcy5sZW5ndGggKyAxO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBwb2kgPSBhd2FpdCB0aGlzLnBvaVNlcnZpY2UuZ2V0UG9pQnlFbGVtZW50SWQoY29tbWVudElEKTtcclxuICAgICAgICBjb25zdCBtZWFzdXJlID0ge1xyXG4gICAgICAgICAgICBpZDogY29tbWVudC5pZCxcclxuICAgICAgICAgICAgY29tbWVudCxcclxuICAgICAgICAgICAgcG9pLFxyXG4gICAgICAgICAgICBudW1iZXJQb2ludHMsXHJcbiAgICAgICAgICAgIHZhbHVlcyxcclxuICAgICAgICB9IGFzIE1lYXN1cmVtZW50O1xyXG4gICAgICAgIHJldHVybiBtZWFzdXJlO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ1JVRFxyXG4gICAgICpcclxuICAgICAqL1xyXG4gICAgYXN5bmMgZ2V0Q29tbWVudChjb21tZW50SUQ6IHN0cmluZyk6IFByb21pc2U8Q29tbWVudD4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLkFQSS5fX3Byb3RvX18uR2V0Q29tbWVudChjb21tZW50SUQpO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGRlbGV0ZUNvbW1lbnQoY29tbWVudElEOiBzdHJpbmcpOiBQcm9taXNlPENvbW1lbnQ+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5BUEkuX19wcm90b19fLkRlbGV0ZUNvbW1lbnQoeyBpZDogY29tbWVudElEIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGNyZWF0ZUNvbW1lbnQoY29tbWVudDogQ29tbWVudCk6IFByb21pc2U8Q29tbWVudD4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLkFQSS5fX3Byb3RvX18uQ3JlYXRlQ29tbWVudChjb21tZW50KTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyB1cGRhdGVDb21tZW50KGlucHV0OiBhbnkpOiBQcm9taXNlPENvbW1lbnQ+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5BUEkuX19wcm90b19fLlVwZGF0ZUNvbW1lbnQoaW5wdXQpO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIHVwbG9hZEZpbGVGb3JDb21tZW50KGZpbGU6IEZpbGUsIGlkOiBzdHJpbmcgPSBudWxsKTogUHJvbWlzZTxzdHJpbmc+IHtcclxuICAgICAgICByZXR1cm4gdXBsb2FkRmlsZVRvUzMoXCJjb21tZW50cy9cIiwgZmlsZSwgaWQpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKiBDcmVhdGUgYSBuZXcgY29tbWVudCB3aXRoIGFuIGV4aXN0aW5nIEFubmV4ZSAqL1xyXG4gICAgYXN5bmMgY3JlYXRlQ29tbWVudFdpdGhGaWxlVVJMKFxyXG4gICAgICAgIGNvbW1lbnQ6IENvbW1lbnQsXHJcbiAgICAgICAgdXJsOiBzdHJpbmcsXHJcbiAgICApOiBQcm9taXNlPENvbW1lbnQ+IHtcclxuICAgICAgICBjb25zdCBuZXdDb21tZW50ID0gY29tbWVudDtcclxuICAgICAgICBuZXdDb21tZW50LmFubmV4ZSA9IHVybDtcclxuICAgICAgICByZXR1cm4gdGhpcy5jcmVhdGVDb21tZW50KG5ld0NvbW1lbnQpO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGNyZWF0ZUNvbW1lbnRXaXRoRmlsZShcclxuICAgICAgICBjb21tZW50OiBDb21tZW50LFxyXG4gICAgICAgIGZpbGU6IEZpbGUsXHJcbiAgICApOiBQcm9taXNlPENvbW1lbnQ+IHtcclxuICAgICAgICBsZXQgY3JlYXRlZENvbW1lbnQgPSBhd2FpdCB0aGlzLmNyZWF0ZUNvbW1lbnQoY29tbWVudCk7XHJcbiAgICAgICAgaWYgKGZpbGUpIHtcclxuICAgICAgICAgICAgY29uc3QgdXJsID0gYXdhaXQgdGhpcy51cGxvYWRGaWxlRm9yQ29tbWVudChcclxuICAgICAgICAgICAgICAgIGZpbGUsXHJcbiAgICAgICAgICAgICAgICBjcmVhdGVkQ29tbWVudC5pZCxcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgY3JlYXRlZENvbW1lbnQgPSBhd2FpdCB0aGlzLnVwZGF0ZUNvbW1lbnQoe1xyXG4gICAgICAgICAgICAgICAgaWQ6IGNyZWF0ZWRDb21tZW50LmlkLFxyXG4gICAgICAgICAgICAgICAgYW5uZXhlOiB1cmwsXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gY3JlYXRlZENvbW1lbnQ7XHJcbiAgICB9XHJcblxyXG5cclxuXHJcbiAgICBhc3luYyBzZXRDb21tZW50QXNDb3ZlckZvckZlYXR1cmUoXHJcbiAgICAgICAgY29tbWVudElEOiBzdHJpbmcsXHJcbiAgICAgICAgZmVhdHVyZTogRmVhdHVyZSxcclxuICAgICk6IFByb21pc2U8Q29tbWVudD4ge1xyXG4gICAgICAgIGNvbnN0IHVwZGF0ZWRDb21tZW50ID0gYXdhaXQgdGhpcy51cGRhdGVDb21tZW50KHtcclxuICAgICAgICAgICAgaWQ6IGNvbW1lbnRJRCxcclxuICAgICAgICAgICAgaXNDb3ZlckltYWdlOiB0cnVlLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGF3YWl0IFByb21pc2UuYWxsKFxyXG4gICAgICAgICAgICBmZWF0dXJlLmNvbW1lbnRzLml0ZW1zLm1hcChhc3luYyAoaW1hZ2UpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAgICAgICBpbWFnZS50eXBlID09PSBDb21tZW50VHlwZS5JTUFHRSAmJlxyXG4gICAgICAgICAgICAgICAgICAgIGltYWdlLmlkICE9PSBjb21tZW50SURcclxuICAgICAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMudXBkYXRlQ29tbWVudCh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBpbWFnZS5pZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgaXNDb3ZlckltYWdlOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSksXHJcbiAgICAgICAgKTtcclxuICAgICAgICByZXR1cm4gdXBkYXRlZENvbW1lbnQ7XHJcbiAgICB9XHJcbn1cclxuIl19
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { Injectable, Inject } from '@angular/core';
|
|
2
2
|
import { BehaviorSubject, Subject, takeUntil } from 'rxjs';
|
|
3
3
|
import { openModalForVisitSwitch, removeNullKeysFromObject, } from '../../helpers.service';
|
|
4
|
-
import { TypeNote, EventStatus, EventType, PoiType, RoleStatus, } from '../../types.service';
|
|
4
|
+
import { TypeNote, EventStatus, EventType, PoiType, RoleStatus, SpModule, } from '../../types.service';
|
|
5
5
|
import { deleteFromS3, getSignedFile, getSignedImageUrlForEquipment, uploadFileToS3, } from '../s3.service';
|
|
6
6
|
import { BaseObjectService } from './base-object.service';
|
|
7
7
|
import * as i0 from "@angular/core";
|
|
@@ -387,7 +387,7 @@ export class EquipmentService extends BaseObjectService {
|
|
|
387
387
|
});
|
|
388
388
|
}
|
|
389
389
|
async initEquips() {
|
|
390
|
-
if (!this.currentSpaceID) {
|
|
390
|
+
if (!this.currentSpaceID || this.userService.getSpModule() === SpModule.MUSEUM) {
|
|
391
391
|
return;
|
|
392
392
|
}
|
|
393
393
|
this.updating.next(true);
|
|
@@ -615,64 +615,56 @@ export class EquipmentService extends BaseObjectService {
|
|
|
615
615
|
}); // for lateral menu
|
|
616
616
|
}
|
|
617
617
|
initSubscriptions() {
|
|
618
|
-
if (
|
|
619
|
-
|
|
620
|
-
|
|
621
|
-
|
|
622
|
-
|
|
623
|
-
|
|
624
|
-
|
|
625
|
-
|
|
626
|
-
|
|
627
|
-
|
|
628
|
-
|
|
629
|
-
|
|
630
|
-
|
|
631
|
-
|
|
632
|
-
}
|
|
633
|
-
|
|
634
|
-
|
|
635
|
-
|
|
636
|
-
|
|
637
|
-
|
|
638
|
-
|
|
639
|
-
|
|
640
|
-
// zone,
|
|
641
|
-
// );
|
|
642
|
-
this.updateEquipsForZone();
|
|
643
|
-
}
|
|
644
|
-
else {
|
|
645
|
-
this.currentSpaceID = this.navigatorService.currentSpaceID;
|
|
646
|
-
// console.log(
|
|
647
|
-
// "going to init equips for zone for new space",
|
|
648
|
-
// this.currentSpaceID,
|
|
649
|
-
// );
|
|
650
|
-
this.initEquips();
|
|
651
|
-
}
|
|
652
|
-
}
|
|
653
|
-
});
|
|
654
|
-
this.deleteObservable
|
|
655
|
-
.pipe(takeUntil(this.destroy$))
|
|
656
|
-
.subscribe((equipment) => {
|
|
657
|
-
if (this.currentSpaceID) {
|
|
658
|
-
this.updateDueToDelete(equipment);
|
|
659
|
-
}
|
|
660
|
-
});
|
|
661
|
-
this.createObservable
|
|
662
|
-
.pipe(takeUntil(this.destroy$))
|
|
663
|
-
.subscribe((equipment) => {
|
|
664
|
-
if (this.currentSpaceID) {
|
|
665
|
-
this.updateDueToCreate(equipment);
|
|
618
|
+
if (this.userService.getSpModule() === SpModule.MUSEUM) {
|
|
619
|
+
return;
|
|
620
|
+
}
|
|
621
|
+
this.zoneChangeService.zoneChange
|
|
622
|
+
.pipe(takeUntil(this.destroy$))
|
|
623
|
+
.subscribe((zone) => {
|
|
624
|
+
if (!zone || !this.navigatorService.currentSpaceID) {
|
|
625
|
+
this.currentSpaceID = this.navigatorService.currentSpaceID;
|
|
626
|
+
this.equipmentsTags.next(null);
|
|
627
|
+
this.equipmentsUpdated.next({ space: [], zone: null });
|
|
628
|
+
this.zoneIDFilter = null;
|
|
629
|
+
this.currentEquipments = {
|
|
630
|
+
space: [],
|
|
631
|
+
zonesMap: new Map(),
|
|
632
|
+
};
|
|
633
|
+
return;
|
|
634
|
+
}
|
|
635
|
+
if (zone.id !== this.zoneIDFilter) {
|
|
636
|
+
this.zoneIDFilter = zone.id;
|
|
637
|
+
this.currentZone = zone;
|
|
638
|
+
if (this.currentSpaceID === this.navigatorService.currentSpaceID) {
|
|
639
|
+
this.updateEquipsForZone();
|
|
666
640
|
}
|
|
667
|
-
|
|
668
|
-
|
|
669
|
-
|
|
670
|
-
.subscribe((equipment) => {
|
|
671
|
-
if (this.currentSpaceID) {
|
|
672
|
-
this.updateDueToEquipUpdated(equipment);
|
|
641
|
+
else {
|
|
642
|
+
this.currentSpaceID = this.navigatorService.currentSpaceID;
|
|
643
|
+
this.initEquips();
|
|
673
644
|
}
|
|
674
|
-
}
|
|
675
|
-
}
|
|
645
|
+
}
|
|
646
|
+
});
|
|
647
|
+
this.deleteObservable
|
|
648
|
+
.pipe(takeUntil(this.destroy$))
|
|
649
|
+
.subscribe((equipment) => {
|
|
650
|
+
if (this.currentSpaceID) {
|
|
651
|
+
this.updateDueToDelete(equipment);
|
|
652
|
+
}
|
|
653
|
+
});
|
|
654
|
+
this.createObservable
|
|
655
|
+
.pipe(takeUntil(this.destroy$))
|
|
656
|
+
.subscribe((equipment) => {
|
|
657
|
+
if (this.currentSpaceID) {
|
|
658
|
+
this.updateDueToCreate(equipment);
|
|
659
|
+
}
|
|
660
|
+
});
|
|
661
|
+
this.updateObservable
|
|
662
|
+
.pipe(takeUntil(this.destroy$))
|
|
663
|
+
.subscribe((equipment) => {
|
|
664
|
+
if (this.currentSpaceID) {
|
|
665
|
+
this.updateDueToEquipUpdated(equipment);
|
|
666
|
+
}
|
|
667
|
+
});
|
|
676
668
|
}
|
|
677
669
|
unsubscribe() {
|
|
678
670
|
this.destroy$.next(true);
|
|
@@ -693,4 +685,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
693
685
|
type: Inject,
|
|
694
686
|
args: ['currentAwsKinesisAnalyticsService']
|
|
695
687
|
}] }, { type: i1.PoiService }, { type: i2.NavigationService }, { type: i3.OperationService }, { type: i4.TicketsService }, { type: i5.NavigatorService }, { type: i6.FilterService }, { type: i7.BaseUserService }, { type: i8.ViewerService }, { type: i9.NgbModal }, { type: i10.ZoneChangeService }] });
|
|
696
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXF1aXBtZW50LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtc21hcnRlcnBsYW4tY29yZS9zcmMvbGliL3NlcnZpY2VzL21vZGVscy9lcXVpcG1lbnQuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVuRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDM0QsT0FBTyxFQUNMLHVCQUF1QixFQUN2Qix3QkFBd0IsR0FFekIsTUFBTSx1QkFBdUIsQ0FBQztBQUUvQixPQUFPLEVBTUwsUUFBUSxFQUVSLFdBQVcsRUFDWCxTQUFTLEVBR1QsT0FBTyxFQUNQLFVBQVUsR0FDWCxNQUFNLHFCQUFxQixDQUFDO0FBRzdCLE9BQU8sRUFDTCxZQUFZLEVBQ1osYUFBYSxFQUNiLDZCQUE2QixFQUM3QixjQUFjLEdBQ2YsTUFBTSxlQUFlLENBQUM7QUFHdkIsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7Ozs7Ozs7Ozs7OztBQVUxRCxNQUFNLE9BQU8sZ0JBQWlCLFNBQVEsaUJBQWlCO0lBK0QzQztJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBckVGLE1BQU0sR0FBRztRQUNmLFNBQVMsRUFBRSw0QkFBNEI7UUFDdkMsS0FBSyxFQUFFLHdCQUF3QjtRQUMvQixTQUFTLEVBQUUsNEJBQTRCO1FBQ3ZDLFdBQVcsRUFBRSw4QkFBOEI7UUFDM0MsS0FBSyxFQUFFLHdCQUF3QjtRQUMvQixXQUFXLEVBQUUsOEJBQThCO0tBQzVDLENBQUM7SUFFRixpQkFBaUIsR0FHWixJQUFJLE9BQU8sRUFBRSxDQUFDO0lBRW5CLGlCQUFpQixHQUdiO1FBQ0EsS0FBSyxFQUFFLEVBQUU7UUFDVCxRQUFRLEVBQUUsSUFBSSxHQUFHLEVBQUU7S0FDcEIsQ0FBQztJQUVKLGNBQWMsR0FBaUMsSUFBSSxlQUFlLENBQWMsSUFBSSxDQUFDLENBQUM7SUFFdEYsWUFBWSxDQUFTO0lBRXJCLFdBQVcsQ0FBTztJQUVsQixjQUFjLENBQVM7SUFFdkIsY0FBYyxHQUFXLElBQUksQ0FBQztJQUU5QixpR0FBaUc7SUFDakcscUJBQXFCLEdBQWEsSUFBSSxDQUFDO0lBRXZDLFFBQVEsR0FBcUIsSUFBSSxPQUFPLEVBQUUsQ0FBQztJQUUzQyxpQkFBaUIsR0FBRyxLQUFLLENBQUM7SUFFMUIsWUFBWSxDQUFTO0lBRXJCLGdCQUFnQixHQUF1QixJQUFJLE9BQU8sRUFBRSxDQUFDO0lBRXJELGdCQUFnQixHQUF1QixJQUFJLE9BQU8sRUFBRSxDQUFDO0lBRXJELGdCQUFnQixHQUF1QixJQUFJLE9BQU8sRUFBRSxDQUFDO0lBRXJELGFBQWEsR0FBUyxJQUFJLENBQUM7SUFFM0IsR0FBRyxDQUFNLENBQUMsS0FBSztJQUNmLG1CQUFtQixDQUFNLENBQUMsS0FBSztJQUUvQixZQUFZLEdBQUcsS0FBSyxDQUFDO0lBRWIsUUFBUSxHQUFHLElBQUksT0FBTyxFQUFFLENBQUM7SUFFakMsWUFDK0IsV0FBZ0IsRUFFN0MsMkJBQWdDLEVBQ2hDLFVBQXNCLEVBQ3RCLGlCQUFvQyxFQUM1QixnQkFBa0MsRUFDbEMsY0FBOEIsRUFDOUIsZ0JBQWtDLEVBQ2xDLGFBQTRCLEVBQzVCLFdBQTRCLEVBQzVCLGFBQTRCLEVBQzVCLFlBQXNCLEVBQ3RCLGlCQUFvQztRQUU1QyxLQUFLLENBQUMsVUFBVSxFQUFFLGlCQUFpQixDQUFDLENBQUM7UUFUN0IscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtRQUNsQyxtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFDOUIscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtRQUNsQyxrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQUM1QixnQkFBVyxHQUFYLFdBQVcsQ0FBaUI7UUFDNUIsa0JBQWEsR0FBYixhQUFhLENBQWU7UUFDNUIsaUJBQVksR0FBWixZQUFZLENBQVU7UUFDdEIsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFtQjtRQUk1QyxJQUFJLENBQUMsR0FBRyxHQUFHLFdBQVcsQ0FBQztRQUN2QixJQUFJLENBQUMsbUJBQW1CLEdBQUcsMkJBQTJCLENBQUM7UUFFdkQsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLGlCQUFpQixFQUFFLENBQUM7UUFDekQsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7UUFDekIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLENBQUMsV0FBVyxFQUFFLEVBQUU7WUFDbkQsSUFBSSxXQUFXLEVBQUUsQ0FBQztnQkFDaEIsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLGlCQUFpQixFQUFFLENBQUM7Z0JBQ3pELElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1lBQzNCLENBQUM7aUJBQU0sQ0FBQztnQkFDTixJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDckIsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLGlCQUFpQixDQUFDLGVBQWUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUN6RCxJQUFJLEtBQUssRUFBRSxDQUFDO2dCQUNWLElBQUksQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFDO1lBQzdCLENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxLQUFLLENBQUMsYUFBYSxDQUFDLEVBQVU7UUFDNUIsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxhQUFhLEVBQUUsRUFBRTtZQUN0RSxJQUFJLEtBQWdCLENBQUM7WUFDckIsSUFBSSxhQUFhLEVBQUUsQ0FBQztnQkFDbEIsS0FBSyxHQUFHLGFBQWEsQ0FBQztnQkFDdEIsS0FBSyxHQUFHLE1BQU0sSUFBSSxDQUFDLHlCQUF5QixDQUFDLGFBQWEsQ0FBQyxDQUFDO2dCQUM1RCxJQUFJLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQztvQkFDakIsSUFBSSxLQUFLLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDO3dCQUMxQixLQUFLLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUM7d0JBQ2pDLEtBQUssQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUM7b0JBQzNDLENBQUM7eUJBQU0sQ0FBQzt3QkFDTixLQUFLLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUM7b0JBQ3BDLENBQUM7Z0JBQ0gsQ0FBQztnQkFDRCxJQUFJLEtBQUssQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO29CQUMzQixNQUFNLFNBQVMsR0FBRyxFQUFFLENBQUM7b0JBQ3JCLE1BQU0sT0FBTyxDQUFDLEdBQUcsQ0FDZixLQUFLLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsRUFBRTt3QkFDekMsTUFBTSxRQUFRLEdBQUcsTUFBTSxJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQzt3QkFDcEQsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztvQkFDM0IsQ0FBQyxDQUFDLENBQ0gsQ0FBQztvQkFDRixLQUFLLENBQUMsYUFBYSxHQUFHLFNBQVMsQ0FBQztnQkFDbEMsQ0FBQztZQUNILENBQUM7WUFDRCxPQUFPLEtBQUssQ0FBQztRQUNmLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELEtBQUssQ0FBQyxlQUFlLENBQ25CLEtBQWdCLEVBQ2hCLFNBQWUsRUFDZixZQUFrQjtRQUVsQix3QkFBd0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNoQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLG1CQUFtQixDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUM7WUFDekcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFdBQVcsRUFBRSxDQUFDLE1BQU07WUFDM0MsYUFBYTtZQUNiO2dCQUNFLElBQUksRUFBRTtvQkFDSixTQUFTLEVBQUUsaUJBQWlCO29CQUM1QixVQUFVLEVBQUUsV0FBVztvQkFDdkIsR0FBRyxFQUFFLEtBQUs7b0JBQ1YsSUFBSSxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsRUFBRTtvQkFDekIsVUFBVSxFQUFFLElBQUksQ0FBQyxjQUFjO29CQUMvQixTQUFTLEVBQUUsSUFBSSxJQUFJLEVBQUU7b0JBQ3JCLE1BQU0sRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLEVBQUU7b0JBQzNCLE9BQU8sRUFBRSxJQUFJLENBQUMsYUFBYSxFQUFFLEVBQUU7aUJBQ2hDO2dCQUNELFVBQVUsRUFBRSw4QkFBOEI7Z0JBQzFDLG9CQUFvQjthQUNyQixFQUNELFlBQVksQ0FDYixDQUFDO1FBQ0osQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxpQkFBaUIsRUFBRSxFQUFFO1lBQ3RFLElBQUksU0FBUyxHQUFHLGlCQUE4QixDQUFDO1lBQy9DLElBQUksU0FBUyxFQUFFLENBQUM7Z0JBQ2QsT0FBTyxDQUFDLEdBQUcsQ0FBQyxvQkFBb0IsRUFBRSxTQUFTLENBQUMsQ0FBQztnQkFDN0MsSUFBSSxZQUFZLEVBQUUsQ0FBQztvQkFDakIsTUFBTSxJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsRUFBRSxZQUFZLEVBQUUsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDO2dCQUNwRSxDQUFDO2dCQUNELElBQUksU0FBUyxFQUFFLENBQUM7b0JBQ2QsTUFBTSxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsRUFBRSxTQUFTLENBQUMsQ0FBQztnQkFDL0MsQ0FBQztZQUNILENBQUM7WUFDRCxPQUFPLFNBQVMsQ0FBQztRQUNuQixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxLQUFLLENBQUMseUJBQXlCLENBQUMsS0FBZ0I7UUFDOUMsTUFBTSxTQUFTLEdBQUcsRUFBRSxHQUFHLEtBQUssRUFBRSxDQUFDO1FBQy9CLElBQUksU0FBUyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ3JDLE1BQU0sSUFBSSxHQUFHLEVBQUUsQ0FBQztZQUNoQixNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQ2YsU0FBUyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsRUFBRTtnQkFDdkMsU0FBUyxDQUFDLDJCQUEyQjtvQkFDbkMsTUFBTSw2QkFBNkIsQ0FBQyxTQUFTLENBQUMsQ0FBQztnQkFDakQsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7b0JBQ3BCLE1BQU0sRUFBRSxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztvQkFDOUMsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO29CQUN4RCxNQUFNLFVBQVUsR0FBRyxNQUFNLGFBQWEsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7b0JBQ3hELElBQUksVUFBVSxFQUFFLENBQUM7d0JBQ2YsSUFBSSxDQUFDLElBQUksQ0FBQzs0QkFDUixRQUFROzRCQUNSLEdBQUcsRUFBRSxJQUFJLENBQUMsVUFBVTs0QkFDcEIsU0FBUyxFQUFFLFVBQVU7NEJBQ3JCLE1BQU0sRUFBRSxJQUFJLENBQUMsRUFBRTt5QkFDSyxDQUFDLENBQUM7b0JBQzFCLENBQUM7Z0JBQ0gsQ0FBQztZQUNILENBQUMsQ0FBQyxDQUNILENBQUM7WUFDRixTQUFTLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztZQUMzQixPQUFPLFNBQVMsQ0FBQztRQUNuQixDQUFDO1FBQ0QsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQztJQUVELEtBQUssQ0FBQyxzQkFBc0IsQ0FBQyxNQUFjO1FBQ3pDLE1BQU0sVUFBVSxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDO1FBQzNDLElBQUksVUFBVSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUMxQixVQUFVLENBQUMsSUFBSSxDQUNiLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ1AsYUFBYTtZQUNiLDZDQUE2QztZQUM3QyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUNoRCxDQUFDO1lBQ0YsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUNmLFVBQVUsQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLFNBQVMsRUFBRSxFQUFFO2dCQUNqQyxTQUFTLENBQUMsU0FBUyxHQUFHLE1BQU0sSUFBSSxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDeEUsQ0FBQyxDQUFDLENBQ0gsQ0FBQztRQUNKLENBQUM7UUFDRCxtQ0FBbUM7UUFDbkMsT0FBTyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDNUMsQ0FBQztJQUVELEtBQUssQ0FBQyxxQkFBcUIsQ0FBQyxPQUFlO1FBQ3pDLGVBQWU7UUFDZixNQUFNLEtBQUssR0FBRyxHQUFHLENBQUM7UUFDbEIsSUFBSSxXQUFXLEdBQUcsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsQ0FBQztRQUNsRCxHQUFHLENBQUM7WUFDRixXQUFXLEdBQUcsTUFBTSxJQUFJLENBQUMsNkNBQTZDLENBQ3BFLE9BQU8sRUFDUCxLQUFLLEVBQ0wsV0FBVyxDQUNaLENBQUM7UUFDSixDQUFDLFFBQVEsV0FBVyxDQUFDLFNBQVMsRUFBRTtRQUNoQyxPQUFPLFdBQVcsQ0FBQyxNQUFNLENBQUM7SUFDNUIsQ0FBQztJQUVELEtBQUssQ0FBQyw2Q0FBNkMsQ0FDakQsT0FBZSxFQUNmLEtBQWEsRUFDYixXQUE4RDtRQUU5RCxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsU0FBUzthQUN0QixpQkFBaUIsQ0FDaEIsT0FBTyxFQUNQLElBQUksRUFDSixNQUFNLEVBQ04sSUFBSSxFQUNKLEtBQUssRUFDTCxXQUFXLENBQUMsU0FBUyxDQUFDLFlBQVk7U0FDbkM7YUFDQSxJQUFJLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFBRTtZQUNqQixNQUFNLFdBQVcsR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDO1lBQ25DLE1BQU0sWUFBWSxHQUFHO2dCQUNuQixNQUFNLEVBQUUsQ0FBQyxHQUFHLFdBQVcsQ0FBQyxNQUFNLEVBQUUsR0FBRyxXQUFXLENBQUM7Z0JBQy9DLFNBQVMsRUFBRSxRQUFRLENBQUMsU0FBUzthQUM5QixDQUFDO1lBQ0YsT0FBTyxZQUFZLENBQUM7UUFDdEIsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQsS0FBSyxDQUFDLDJCQUEyQixDQUMvQixVQUF1QixFQUN2QixTQUFlO1FBRWYsSUFBSSxVQUFVLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQzVCLE9BQU8sRUFBRSxDQUFDO1FBQ1osQ0FBQztRQUVELE9BQU8sY0FBYyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLFNBQVMsRUFBRSxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQy9ELEtBQUssRUFBRSxHQUFHLEVBQUUsRUFBRTtZQUNaLElBQUksR0FBRyxFQUFFLENBQUM7Z0JBQ1IsTUFBTSxNQUFNLEdBQUcsRUFBRSxDQUFDO2dCQUNsQixLQUFLLE1BQU0sS0FBSyxJQUFJLFVBQVUsRUFBRSxDQUFDO29CQUMvQixNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLGNBQWMsQ0FDcEQsS0FBSyxDQUFDLE9BQU8sQ0FDZCxDQUFDO29CQUNGLE1BQU0sSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDO3dCQUNsQyxVQUFVLEVBQUUsR0FBRzt3QkFDZixJQUFJLEVBQUUsUUFBUSxDQUFDLEtBQUs7d0JBQ3BCLFdBQVcsRUFBRSxLQUFLLENBQUMsRUFBRTt3QkFDckIsY0FBYyxFQUFFLGNBQWMsQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSTtxQkFDMUQsQ0FBQyxDQUFDO29CQUNILE1BQU0sTUFBTSxHQUFHLE1BQU0sSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsZUFBZSxDQUFDO3dCQUN0RCxFQUFFLEVBQUUsS0FBSyxDQUFDLEVBQUU7d0JBQ1osS0FBSyxFQUFFLEdBQUc7cUJBQ1gsQ0FBQyxDQUFDO29CQUNILE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQ3RCLENBQUM7Z0JBQ0QsT0FBTyxNQUFNLENBQUM7WUFDaEIsQ0FBQztZQUNELE9BQU8sRUFBRSxDQUFDO1FBQ1osQ0FBQyxDQUNGLENBQUM7SUFDSixDQUFDO0lBRUQsS0FBSyxDQUFDLFdBQVcsQ0FBQyxTQUFvQixFQUFFLFNBQWU7UUFDckQsT0FBTyxjQUFjLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsU0FBUyxFQUFFLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQ3BFLEtBQUssRUFBRSxHQUFHLEVBQUUsRUFBRTtZQUNaLElBQUksR0FBRyxFQUFFLENBQUM7Z0JBQ1IsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxjQUFjLENBQ3BELFNBQVMsQ0FBQyxPQUFPLENBQ2xCLENBQUM7Z0JBQ0YsTUFBTSxJQUFJLEdBQUcsTUFBTSxJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUM7b0JBQy9DLFVBQVUsRUFBRSxHQUFHO29CQUNmLElBQUksRUFBRSxRQUFRLENBQUMsS0FBSztvQkFDcEIsV0FBVyxFQUFFLFNBQVMsQ0FBQyxFQUFFO29CQUN6QixjQUFjLEVBQUUsY0FBYyxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJO2lCQUMxRCxDQUFDLENBQUM7Z0JBQ0gsTUFBTSxJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxlQUFlLENBQUM7b0JBQ3ZDLEVBQUUsRUFBRSxTQUFTLENBQUMsRUFBRTtvQkFDaEIsS0FBSyxFQUFFLEdBQUc7aUJBQ1gsQ0FBQyxDQUFDO2dCQUNILE9BQU8sSUFBSSxDQUFDO1lBQ2QsQ0FBQztZQUNELE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQyxDQUNGLENBQUM7SUFDSixDQUFDO0lBRUQsS0FBSyxDQUFDLGVBQWUsQ0FDbkIsS0FBVSxFQUNWLE9BQWEsSUFBSSxFQUNqQixXQUFxQixJQUFJO1FBRXpCLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTO2FBQ3RCLGVBQWUsQ0FBQyxLQUFLLENBQUM7YUFDdEIsSUFBSSxDQUFDLEtBQUssRUFBRSxpQkFBaUIsRUFBRSxFQUFFO1lBQ2hDLElBQUksU0FBUyxHQUFHLGlCQUE4QixDQUFDO1lBQy9DLElBQUksU0FBUyxFQUFFLENBQUM7Z0JBQ2QsT0FBTyxDQUFDLEdBQUcsQ0FBQyxvQkFBb0IsRUFBRSxTQUFTLENBQUMsQ0FBQztnQkFDN0MsSUFBSSxRQUFRLEVBQUUsQ0FBQztvQkFDYixRQUFRLFFBQVEsRUFBRSxDQUFDO3dCQUNqQixLQUFLLFFBQVEsQ0FBQyxLQUFLOzRCQUNqQixNQUFNLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxDQUFDOzRCQUN4QyxNQUFNO3dCQUNSOzRCQUNFLE1BQU0sSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLEVBQUUsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFDOzRCQUNoRCxNQUFNO29CQUNWLENBQUM7Z0JBQ0gsQ0FBQztZQUNILENBQUM7WUFDRCxPQUFPLFNBQVMsQ0FBQztRQUNuQixDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCxZQUFZLENBQUMsSUFBYztRQUN6QixJQUFJLE1BQU0sQ0FBQztRQUNYLFFBQVEsSUFBSSxFQUFFLENBQUM7WUFDYixLQUFLLFFBQVEsQ0FBQyxXQUFXO2dCQUN2QixNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUM7Z0JBQ2pDLE1BQU07WUFDUixLQUFLLFFBQVEsQ0FBQyxTQUFTO2dCQUNyQixNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUM7Z0JBQy9CLE1BQU07WUFDUixLQUFLLFFBQVEsQ0FBQyxXQUFXO2dCQUN2QixNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUM7Z0JBQ2pDLE1BQU07WUFDUixLQUFLLFFBQVEsQ0FBQyxLQUFLO2dCQUNqQixNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUM7Z0JBQzNCLE1BQU07WUFDUixLQUFLLFFBQVEsQ0FBQyxLQUFLO2dCQUNqQixNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUM7Z0JBQzNCLE1BQU07WUFDUjtnQkFDRSxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUM7Z0JBQy9CLE1BQU07UUFDVixDQUFDO1FBQ0QsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztJQUVELEtBQUssQ0FBQyx5QkFBeUIsQ0FDN0IsVUFBdUIsRUFDdkIsWUFBa0IsRUFDbEIsSUFBYztRQUVkLElBQUksVUFBVSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUM1QixPQUFPLEVBQUUsQ0FBQztRQUNaLENBQUM7UUFDRCxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3ZDLE1BQU0sR0FBRyxHQUFHLE1BQU0sY0FBYyxDQUFDLE1BQU0sRUFBRSxZQUFZLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDaEUsSUFBSSxHQUFHLEVBQUUsQ0FBQztZQUNSLE1BQU0sVUFBVSxHQUFHLEVBQUUsQ0FBQztZQUN0QixLQUFLLE1BQU0sS0FBSyxJQUFJLFVBQVUsRUFBRSxDQUFDO2dCQUMvQixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBQy9ELE1BQU0sUUFBUSxHQUFHLE1BQU0sSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDO29CQUNuRCxVQUFVLEVBQUUsR0FBRztvQkFDZixJQUFJO29CQUNKLFdBQVcsRUFBRSxLQUFLLENBQUMsRUFBRTtvQkFDckIsY0FBYyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSTtpQkFDNUMsQ0FBQyxDQUFDO2dCQUNILFVBQVUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDNUIsQ0FBQztZQUNELE9BQU8sVUFBVSxDQUFDO1FBQ3BCLENBQUM7UUFDRCxPQUFPLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRCxLQUFLLENBQUMsU0FBUyxDQUNiLFNBQW9CLEVBQ3BCLFlBQWtCLEVBQ2xCLElBQWM7UUFFZCxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3ZDLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNuRSxPQUFPLGNBQWMsQ0FBQyxNQUFNLEVBQUUsWUFBWSxFQUFFLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQzVELEtBQUssRUFBRSxHQUFHLEVBQUUsRUFBRTtZQUNaLElBQUksR0FBRyxFQUFFLENBQUM7Z0JBQ1IsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUM7b0JBQ25DLFVBQVUsRUFBRSxHQUFHO29CQUNmLElBQUk7b0JBQ0osV0FBVyxFQUFFLFNBQVMsQ0FBQyxFQUFFO29CQUN6QixjQUFjLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJO2lCQUM1QyxDQUFDLENBQUM7WUFDTCxDQUFDO1lBQ0QsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDLENBQ0YsQ0FBQztJQUNKLENBQUM7SUFFRCxLQUFLLENBQUMsZUFBZSxDQUFDLEtBQWdCO1FBQ3BDLE1BQU0sT0FBTyxHQUFHLE1BQU0sSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsZUFBZSxDQUFDLEVBQUUsRUFBRSxFQUFFLEtBQUssQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQzNFLE9BQU8sQ0FBQyxHQUFHLENBQUMsbUJBQW1CLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFFMUMsYUFBYTtRQUNiLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQztRQUMvQixJQUFJLEdBQUcsRUFBRSxDQUFDO1lBQ1IsTUFBTSxJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDMUMsQ0FBQztRQUNELHVCQUF1QjtRQUN2QixJQUFJLEtBQUssQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUNqQyxNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQ2YsS0FBSyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxJQUFVLEVBQUUsRUFBRTtnQkFDekMsdUJBQXVCO2dCQUN2QixzQ0FBc0M7Z0JBQ3RDLElBQ0UsSUFBSSxDQUFDLFVBQVU7b0JBQ2YsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLEVBQ3RELENBQUM7b0JBQ0QsTUFBTSxZQUFZLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO2dCQUN0QyxDQUFDO2dCQUNELE1BQU0sSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLEVBQUUsRUFBRSxFQUFFLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQ3ZELENBQUMsQ0FBQyxDQUNILENBQUM7UUFDSixDQUFDO1FBQ0QsaURBQWlEO1FBQ2pELE1BQU0sSUFBSSxDQUFDLGdCQUFnQixDQUFDLDRCQUE0QixDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNuRSxPQUFPLE9BQU8sQ0FBQztJQUNqQixDQUFDO0lBRUQsS0FBSyxDQUFDLHVCQUF1QixDQUMzQixLQUFnQixFQUNoQixPQUFzQjtRQUV0QixNQUFNLFFBQVEsR0FBRztZQUNmLFVBQVUsRUFBRSxPQUFPLENBQUMsbUJBQW1CLEVBQUU7WUFDekMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxTQUFTO1lBQ3ZCLFNBQVMsRUFBRSxLQUFLLENBQUMsRUFBRTtZQUNuQixRQUFRLEVBQUUsT0FBTyxDQUFDLGlCQUFpQixFQUFFO1lBQ3JDLGlCQUFpQixFQUFFLE9BQU8sQ0FBQyxVQUFVLEVBQUU7U0FDakMsQ0FBQztRQUNULE1BQU0sR0FBRyxHQUFHLE1BQU0sSUFBSSxDQUFDLFVBQVUsQ0FBQyxtQkFBbUIsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNoRSxPQUFPLEdBQUcsQ0FBQztJQUNiLENBQUM7SUFFRCxLQUFLLENBQUMseUJBQXlCLENBQzdCLE1BQWMsRUFDZCxLQUFnQjtRQUVoQixNQUFNLGNBQWMsR0FDbEIsTUFBTSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsMEJBQTBCLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ25FLE1BQU0saUJBQWlCLEdBQUcsY0FBYyxDQUFDLElBQUksQ0FDM0MsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxRQUFRLEtBQUssTUFBTSxDQUFDLEVBQUUsQ0FDbEMsQ0FBQztRQUNGLE9BQU8sSUFBSSxDQUFDLGdCQUFnQjthQUN6QixlQUFlLENBQUMsaUJBQWlCLENBQUMsRUFBRSxDQUFDO2FBQ3JDLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO1lBQ1osSUFBSSxDQUFDLGNBQWMsQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFnQixFQUFFO2dCQUNyRCxLQUFLLEVBQUUsNkJBQTZCO2dCQUNwQyxXQUFXLEVBQUUsY0FBYyxLQUFLLENBQUMsSUFBSSx5QkFBeUI7Z0JBQzlELE1BQU0sRUFBRSxXQUFXLENBQUMsdUJBQXVCO2dCQUMzQyxJQUFJLEVBQUUsU0FBUyxDQUFDLE1BQU07Z0JBQ3RCLGVBQWUsRUFBRSwwQ0FBMEM7Z0JBQzNELFFBQVEsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsU0FBUyxFQUFFLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQzthQUNwRCxDQUFDLENBQUM7WUFDSCxPQUFPLEdBQUcsQ0FBQztRQUNiLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELEtBQUssQ0FBQyxVQUFVO1FBQ2QsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUN6QixPQUFPO1FBQ1QsQ0FBQztRQUNELElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3pCLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUM7UUFFOUIsSUFBSSxNQUFNLEdBQUcsTUFBTSxJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQ25FLE1BQU0sR0FBRyxNQUFNLElBQUksQ0FBQyxhQUFhLENBQUMscUNBQXFDLENBQ3JFLElBQUksQ0FBQyxjQUFjLEVBQ25CLE1BQU0sQ0FDUCxDQUFDO1FBQ0YsdUJBQXVCO1FBQ3ZCLElBQUksTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUN0QixJQUFJLGNBQWMsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUNoQyxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxDQUMzQyxDQUFDO1lBRUYsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUNmLGNBQWMsQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxFQUFFO2dCQUNqQyxLQUFLLENBQUMsMkJBQTJCO29CQUMvQixNQUFNLDZCQUE2QixDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQy9DLENBQUMsQ0FBQyxDQUNILENBQUM7WUFDRixJQUFJLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO2dCQUMvQixjQUFjLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyw0QkFBNEIsQ0FDOUQsY0FBYyxFQUNkLElBQUksQ0FBQyxxQkFBcUIsQ0FDM0IsQ0FBQztZQUNKLENBQUM7WUFDRCxJQUFJLENBQUMsaUJBQWlCLENBQUMsS0FBSyxHQUFHLGNBQWMsQ0FBQztZQUM5QyxJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztnQkFDdEIsY0FBYyxHQUFHLENBQUMsTUFBTSxJQUFJLENBQUMsYUFBYSxDQUFDLG9CQUFvQixDQUM3RCxjQUFjLEVBQ2QsSUFBSSxDQUFDLFlBQVksRUFDakIsSUFBSSxDQUFDLFdBQVcsQ0FDakIsQ0FBZ0IsQ0FBQztZQUNwQixDQUFDO1lBQ0QsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxjQUFjLENBQUMsQ0FBQztZQUN2RSxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLHdDQUF3QztZQUNsRixJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDO2dCQUMxQixLQUFLLEVBQUUsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEtBQUs7Z0JBQ25DLElBQUksRUFBRSxjQUFjO2FBQ3JCLENBQUMsQ0FBQyxDQUFDLG1CQUFtQjtRQUN6QixDQUFDO2FBQU0sQ0FBQztZQUNOLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO2dCQUN0QixJQUFJLENBQUMsaUJBQWlCLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQzdELENBQUM7WUFDRCxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLG1CQUFtQjtRQUMzRSxDQUFDO1FBQ0QsdUNBQXVDO1FBQ3ZDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzFCLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxLQUFLLENBQUM7SUFDakMsQ0FBQztJQUVELEtBQUssQ0FBQyxtQ0FBbUMsQ0FDdkMsT0FBTyxFQUNQLFFBQW1CO1FBRW5CLElBQUksT0FBTyxHQUFHLEVBQUUsQ0FBQztRQUVqQixNQUFNLGFBQWEsR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxLQUFLLE9BQU8sQ0FBQyxDQUFDO1FBQ3BFLElBQUksYUFBYSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUMvQixPQUFPLE9BQU8sQ0FBQztRQUNqQixDQUFDO1FBQ0QsTUFBTSxZQUFZLEdBQUcsYUFBYSxDQUFDLElBQUksQ0FDckMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUNKLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1lBQzFDLENBQUMsQ0FBQyxJQUFJLEtBQUssVUFBVSxDQUFDLE9BQU8sQ0FDaEMsQ0FBQztRQUNGLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUNsQixPQUFPLE9BQU8sQ0FBQztRQUNqQixDQUFDO1FBQ0QsSUFBSSxPQUFPLEdBQUcsRUFBRSxDQUFDO1FBQ2pCLEtBQUssTUFBTSxDQUFDLElBQUksYUFBYSxFQUFFLENBQUM7WUFDOUIsT0FBTyxHQUFHLENBQUMsR0FBRyxPQUFPLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3BDLENBQUM7UUFDRCxJQUFJLE9BQU8sQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDekIsT0FBTyxPQUFPLENBQUM7UUFDakIsQ0FBQztRQUNELE9BQU8sR0FBRyxNQUFNLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNwRCw2REFBNkQ7UUFDN0QsZUFBZTtRQUNmLGVBQWU7UUFDZixLQUFLO1FBQ0wsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQztJQUVELEtBQUssQ0FBQyxpQ0FBaUMsQ0FDckMsT0FBZSxFQUNmLE9BQWUsRUFDZixXQUFtQixJQUFJO1FBRXZCLElBQUksTUFBTSxHQUFHLE1BQU0sSUFBSSxDQUFDLHFCQUFxQixDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3ZELElBQUksUUFBUSxFQUFFLENBQUM7WUFDYixNQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLFFBQVEsS0FBSyxRQUFRLENBQUMsQ0FBQztRQUNqRSxDQUFDO1FBQ0QsTUFBTSxJQUFJLEdBQUcsTUFBTSxJQUFJLENBQUMsdUJBQXVCLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQ2pFLE9BQU8sRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLENBQUM7SUFDMUIsQ0FBQztJQUVELGtFQUFrRTtJQUNsRSxVQUFVLENBQUMsU0FBb0I7UUFDN0IsT0FBTyxTQUFTLENBQUMsb0JBQW9CO1lBQ25DLENBQUMsQ0FBQyxTQUFTLENBQUMsb0JBQW9CLENBQUMsUUFBUSxDQUN2QyxJQUFJLENBQUMsV0FBVyxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBRSxDQUN0RDtZQUNELENBQUMsQ0FBQyxLQUFLLENBQUM7SUFDWixDQUFDO0lBRUQsV0FBVyxDQUFDLFNBQW9CLEVBQUUsUUFBaUI7UUFDakQsSUFBSSxZQUFZLEdBQUcsU0FBUyxDQUFDLG9CQUFvQjtZQUMvQyxDQUFDLENBQUMsU0FBUyxDQUFDLG9CQUFvQjtZQUNoQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ1AsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUV4RSxZQUFZLEdBQUcsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxLQUFLLFNBQVMsQ0FBQyxDQUFDO1FBRTNELElBQUksUUFBUSxFQUFFLENBQUM7WUFDYixZQUFZLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQy9CLENBQUM7UUFFRCxPQUFPLElBQUksQ0FBQyxlQUFlLENBQUM7WUFDMUIsRUFBRSxFQUFFLFNBQVMsQ0FBQyxFQUFFO1lBQ2hCLG9CQUFvQixFQUFFLFlBQVk7U0FDbkMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELEtBQUssQ0FBQyxVQUFVLENBQUMsU0FBNEI7UUFDM0MsTUFBTSxZQUFZLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2xDLE1BQU0sSUFBSSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsRUFBRSxFQUFFLEVBQUUsU0FBUyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7SUFDdEQsQ0FBQztJQUVELEtBQUssQ0FBQyx1QkFBdUIsQ0FDM0IsU0FBb0IsRUFDcEIsbUJBQTRCLEtBQUs7UUFFakMsSUFBSSxHQUFHLEdBQUcsU0FBUyxTQUFTLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDdkMsSUFBSSxnQkFBZ0IsRUFBRSxDQUFDO1lBQ3JCLEdBQUcsSUFBSSxVQUFVLFNBQVMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztRQUNsQyxDQUFDO1FBQ0QsTUFBTSxVQUFVLEdBQUcsTUFBTSxJQUFJLENBQUMsYUFBYSxDQUFDLGtCQUFrQixDQUM1RCxHQUFHLFNBQVMsQ0FBQyxFQUFFLEVBQUUsQ0FDbEIsQ0FBQztRQUNGLElBQUksVUFBVSxFQUFFLENBQUM7WUFDZixPQUFPO1FBQ1QsQ0FBQztRQUNELE1BQU0sTUFBTSxHQUFHLE1BQU0sSUFBSSxDQUFDLGtCQUFrQixDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBRXhELElBQUksQ0FBQyxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDL0IsS0FBSyxDQUFDLHlDQUF5QyxDQUFDLENBQUM7WUFDakQsT0FBTztRQUNULENBQUM7UUFDRCxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztZQUN0QixrREFBa0Q7WUFDbEQsTUFBTSxZQUFZLEdBQUcsWUFBWSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUNyRCxJQUFJLFlBQVksSUFBSSxZQUFZLEtBQUssTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDO2dCQUNwRCwwQkFBMEI7Z0JBQzFCLE1BQU0sR0FBRyxHQUFHLFNBQVMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNwQyxJQUFJLEdBQUcsQ0FBQyxVQUFVLEVBQUUsQ0FBQztvQkFDbkIsc0RBQXNEO29CQUN0RCxNQUFNLElBQUksQ0FBQyxhQUFhLENBQUMsc0JBQXNCLENBQUMsU0FBUyxFQUFFLEdBQUcsQ0FBQyxDQUFDO29CQUNoRSxNQUFNLElBQUksQ0FBQyxhQUFhLENBQUMsa0JBQWtCLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDO2dCQUM1RCxDQUFDO1lBQ0gsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLHNFQUFzRTtnQkFDdEUsdUJBQXVCLENBQ3JCLElBQUksQ0FBQyxZQUFZLEVBQ2pCLE1BQU0sQ0FBQyxPQUFPLEVBQ2QsU0FBUyxDQUFDLE9BQU8sRUFDakIsRUFBRSxXQUFXLEVBQUUsTUFBTSxDQUFDLEtBQUssRUFBRSxRQUFRLEVBQUUsTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUN6RCxDQUFDO1lBQ0osQ0FBQztRQUNILENBQUM7YUFBTSxDQUFDO1lBQ04sTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsWUFBWSxNQUFNLENBQUMsT0FBTyxhQUFhLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDdkUsQ0FBQztJQUNILENBQUM7SUFFRCxLQUFLLENBQUMsbUJBQW1CO1FBQ3ZCLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3pCLElBQUksY0FBYyxHQUFHLEVBQUUsQ0FBQztRQUN4QixJQUFJLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQzVDLElBQ0UsSUFBSSxDQUFDLFlBQVk7Z0JBQ2pCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsRUFDdEQsQ0FBQztnQkFDRCxjQUFjLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO2dCQUN4RSw4REFBOEQ7WUFDaEUsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLGNBQWMsR0FBRyxDQUFDLE1BQU0sSUFBSSxDQUFDLGFBQWEsQ0FBQyxvQkFBb0IsQ0FDN0QsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEtBQUssRUFDNUIsSUFBSSxDQUFDLFlBQVksRUFDakIsSUFBSSxDQUFDLFdBQVcsQ0FDakIsQ0FBZ0IsQ0FBQztnQkFFbEIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRTtvQkFDckQsR0FBRyxjQUFjO2lCQUNsQixDQUFDLENBQUM7WUFDTCxDQUFDO1lBQ0QsSUFBSSxJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQztnQkFDL0IsY0FBYyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsNEJBQTRCLENBQzlELGNBQWMsRUFDZCxJQUFJLENBQUMscUJBQXFCLENBQzNCLENBQUM7WUFDSixDQUFDO1lBQ0QsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyx3Q0FBd0M7WUFDbEYsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQztnQkFDMUIsS0FBSyxFQUFFLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLO2dCQUNuQyxJQUFJLEVBQUUsY0FBYzthQUNyQixDQUFDLENBQUMsQ0FBQyxtQkFBbUI7UUFDekIsQ0FBQzthQUFNLENBQUM7WUFDTixJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLG1CQUFtQjtRQUMzRSxDQUFDO1FBQ0QsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDNUIsQ0FBQztJQUVELGlCQUFpQixDQUFDLGdCQUEyQjtRQUMzQyx5REFBeUQ7UUFDekQsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxJQUFJLENBQzdDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsRUFBRSxLQUFLLGdCQUFnQixDQUFDLEVBQUUsQ0FDOUMsQ0FBQztRQUNGLElBQUksS0FBSyxFQUFFLENBQUM7WUFDVixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUMxRCxJQUFJLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDaEQsQ0FBQztRQUNELEtBQUssTUFBTSxJQUFJLElBQUksSUFBSSxDQUFDLGlCQUFpQixDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDO1lBQzFELE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxRQUFRO2lCQUNsRCxHQUFHLENBQUMsSUFBSSxDQUFDO2lCQUNULElBQUksQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLEVBQUUsS0FBSyxnQkFBZ0IsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUN2RCxJQUFJLGFBQWEsRUFBRSxDQUFDO2dCQUNsQixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsUUFBUTtxQkFDMUMsR0FBRyxDQUFDLElBQUksQ0FBQztxQkFDVCxPQUFPLENBQUMsYUFBYSxDQUFDLENBQUM7Z0JBQzFCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDN0QsQ0FBQztRQUNILENBQUM7UUFDRCxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDO1lBQzFCLEtBQUssRUFBRSxJQUFJLENBQUMsaUJBQWlCLENBQUMsS0FBSztZQUNuQyxJQUFJLEVBQUUsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQztTQUM3RCxDQUFDLENBQUMsQ0FBQyxtQkFBbUI7SUFDekIsQ0FBQztJQUVELGlCQUFpQixDQUFDLFlBQXVCO1FBQ3ZDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ25ELElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxRQUFRO2FBQzVCLEdBQUcsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDO2FBQ3RCLE9BQU8sQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUN6QixJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDO1lBQzFCLEtBQUssRUFBRSxJQUFJLENBQUMsaUJBQWlCLENBQUMsS0FBSztZQUNuQyxJQUFJLEVBQUUsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQztTQUM3RCxDQUFDLENBQUMsQ0FBQyxtQkFBbUI7SUFDekIsQ0FBQztJQUVELHVCQUF1QixDQUFDLFlBQXVCO1FBQzdDLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUM3QyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLEVBQUUsS0FBSyxZQUFZLENBQUMsRUFBRSxDQUMxQyxDQUFDO1FBQ0YsSUFBSSxLQUFLLEVBQUUsQ0FBQztZQUNWLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzFELElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO2dCQUMzQiwrQkFBK0I7Z0JBQy9CLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztZQUNoRCxDQUFDO2lCQUFNLENBQUM7Z0JBQ04sSUFBSSxDQUFDLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUMsRUFBRSxZQUFZLENBQUMsQ0FBQztZQUM5RCxDQUFDO1FBQ0gsQ0FBQztRQUNELEtBQUssTUFBTSxJQUFJLElBQUksSUFBSSxDQUFDLGlCQUFpQixDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDO1lBQzFELE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxRQUFRO2lCQUMvQyxHQUFHLENBQUMsSUFBSSxDQUFDO2lCQUNULElBQUksQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLEVBQUUsS0FBSyxZQUFZLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDbkQsSUFBSSxVQUFVLEVBQUUsQ0FBQztnQkFDZixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsUUFBUTtxQkFDMUMsR0FBRyxDQUFDLElBQUksQ0FBQztxQkFDVCxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUM7Z0JBQ3ZCLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO29CQUMzQixJQUFJLENBQUMsaUJBQWlCLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO2dCQUM3RCxDQUFDO3FCQUFNLENBQUM7b0JBQ04sSUFBSSxDQUFDLGlCQUFpQixDQUFDLFFBQVE7eUJBQzVCLEdBQUcsQ0FBQyxJQUFJLENBQUM7eUJBQ1QsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsWUFBWSxDQUFDLENBQUM7Z0JBQ3BDLENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQztRQUNELElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUM7WUFDMUIsS0FBSyxFQUFFLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLO1lBQ25DLElBQUksRUFBRSxJQUFJLENBQUMsaUJBQWlCLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDO1NBQzdELENBQUMsQ0FBQyxDQUFDLG1CQUFtQjtJQUN6QixDQUFDO0lBRUQsaUJBQWlCO1FBQ2YsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUN2QixJQUFJLENBQUMsaUJBQWlCLENBQUMsVUFBVTtpQkFDOUIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7aUJBQzlCLFNBQVMsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO2dCQUNsQixJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLGNBQWMsRUFBRSxDQUFDO29CQUNuRCxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxjQUFjLENBQUM7b0JBQzNELElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO29CQUMvQixJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztvQkFDdkQsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUM7b0JBQ3pCLElBQUksQ0FBQyxpQkFBaUIsR0FBRzt3QkFDdkIsS0FBSyxFQUFFLEVBQUU7d0JBQ1QsUUFBUSxFQUFFLElBQUksR0FBRyxFQUFFO3FCQUNwQixDQUFDO29CQUNGLE9BQU87Z0JBQ1QsQ0FBQztnQkFDRCxJQUFJLElBQUksQ0FBQyxFQUFFLEtBQUssSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO29CQUNsQyxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7b0JBQzVCLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO29CQUN4QixJQUFJLElBQUksQ0FBQyxjQUFjLEtBQUssSUFBSSxDQUFDLGdCQUFnQixDQUFDLGNBQWMsRUFBRSxDQUFDO3dCQUNqRSxnQ0FBZ0M7d0JBQ2hDLGVBQWU7d0JBQ2Ysc0RBQXNEO3dCQUN0RCxZQUFZO3dCQUNaLEtBQUs7d0JBRUwsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7b0JBQzdCLENBQUM7eUJBQU0sQ0FBQzt3QkFDTixJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxjQUFjLENBQUM7d0JBQzNELGVBQWU7d0JBQ2YscURBQXFEO3dCQUNyRCwyQkFBMkI7d0JBQzNCLEtBQUs7d0JBQ0wsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO29CQUNwQixDQUFDO2dCQUNILENBQUM7WUFDSCxDQUFDLENBQUMsQ0FBQztZQUVMLElBQUksQ0FBQyxnQkFBZ0I7aUJBQ2xCLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO2lCQUM5QixTQUFTLENBQUMsQ0FBQyxTQUFTLEVBQUUsRUFBRTtnQkFDdkIsSUFBSSxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7b0JBQ3hCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxTQUFTLENBQUMsQ0FBQztnQkFDcEMsQ0FBQztZQUNILENBQUMsQ0FBQyxDQUFDO1lBRUwsSUFBSSxDQUFDLGdCQUFnQjtpQkFDbEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7aUJBQzlCLFNBQVMsQ0FBQyxDQUFDLFNBQVMsRUFBRSxFQUFFO2dCQUN2QixJQUFJLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztvQkFDeEIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFNBQVMsQ0FBQyxDQUFDO2dCQUNwQyxDQUFDO1lBQ0gsQ0FBQyxDQUFDLENBQUM7WUFFTCxJQUFJLENBQUMsZ0JBQWdCO2lCQUNsQixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztpQkFDOUIsU0FBUyxDQUFDLENBQUMsU0FBUyxFQUFFLEVBQUU7Z0JBQ3ZCLElBQUksSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO29CQUN4QixJQUFJLENBQUMsdUJBQXVCLENBQUMsU0FBUyxDQUFDLENBQUM7Z0JBQzFDLENBQUM7WUFDSCxDQUFDLENBQUMsQ0FBQztRQUNQLENBQUM7SUFDSCxDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3pCLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDM0IsQ0FBQzt3R0FuMEJVLGdCQUFnQixrQkEwRGpCLG1CQUFtQixhQUNuQixtQ0FBbUM7NEdBM0RsQyxnQkFBZ0IsY0FGZixNQUFNOzs0RkFFUCxnQkFBZ0I7a0JBSDVCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25COzswQkEyREksTUFBTTsyQkFBQyxtQkFBbUI7OzBCQUMxQixNQUFNOzJCQUFDLG1DQUFtQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIEluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBOZ2JNb2RhbCB9IGZyb20gJ0BuZy1ib290c3RyYXAvbmctYm9vdHN0cmFwJztcclxuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBTdWJqZWN0LCB0YWtlVW50aWwgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHtcclxuICBvcGVuTW9kYWxGb3JWaXNpdFN3aXRjaCxcclxuICByZW1vdmVOdWxsS2V5c0Zyb21PYmplY3QsXHJcbiAgd2FpdFVudGlsLFxyXG59IGZyb20gJy4uLy4uL2hlbHBlcnMuc2VydmljZSc7XHJcbmltcG9ydCB7IE1hdHRlcnRhZ0RhdGEgfSBmcm9tICcuLi8uLi9tYXR0ZXJ0YWdEYXRhJztcclxuaW1wb3J0IHtcclxuICBOb3RlLFxyXG4gIFpvbmUsXHJcbiAgRXF1aXBtZW50LFxyXG4gIEVxdWlwbWVudERvY3VtZW50LFxyXG4gIFRpY2tldCxcclxuICBUeXBlTm90ZSxcclxuICBNaXNzaW9uLFxyXG4gIEV2ZW50U3RhdHVzLFxyXG4gIEV2ZW50VHlwZSxcclxuICBPcGVyYXRpb24sXHJcbiAgUE9JLFxyXG4gIFBvaVR5cGUsXHJcbiAgUm9sZVN0YXR1cyxcclxufSBmcm9tICcuLi8uLi90eXBlcy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRmlsdGVyU2VydmljZSB9IGZyb20gJy4uL2ZpbHRlci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgTmF2aWdhdG9yU2VydmljZSB9IGZyb20gJy4uL25hdmlnYXRvci5zZXJ2aWNlJztcclxuaW1wb3J0IHtcclxuICBkZWxldGVGcm9tUzMsXHJcbiAgZ2V0U2lnbmVkRmlsZSxcclxuICBnZXRTaWduZWRJbWFnZVVybEZvckVxdWlwbWVudCxcclxuICB1cGxvYWRGaWxlVG9TMyxcclxufSBmcm9tICcuLi9zMy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQmFzZVVzZXJTZXJ2aWNlIH0gZnJvbSAnLi4vdXNlci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgVmlld2VyU2VydmljZSB9IGZyb20gJy4uL3ZpZXdlci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQmFzZU9iamVjdFNlcnZpY2UgfSBmcm9tICcuL2Jhc2Utb2JqZWN0LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBOYXZpZ2F0aW9uU2VydmljZSB9IGZyb20gJy4vbmF2aWdhdGlvbi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgT3BlcmF0aW9uU2VydmljZSB9IGZyb20gJy4vb3BlcmF0aW9uLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBQb2lTZXJ2aWNlIH0gZnJvbSAnLi9wb2kuc2VydmljZSc7XHJcbmltcG9ydCB7IFRpY2tldHNTZXJ2aWNlIH0gZnJvbSAnLi90aWNrZXQuc2VydmljZSc7XHJcbmltcG9ydCB7IFpvbmVDaGFuZ2VTZXJ2aWNlIH0gZnJvbSBcIi4uL3pvbmVDaGFuZ2Uuc2VydmljZVwiO1xyXG5cclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46ICdyb290JyxcclxufSlcclxuZXhwb3J0IGNsYXNzIEVxdWlwbWVudFNlcnZpY2UgZXh0ZW5kcyBCYXNlT2JqZWN0U2VydmljZSB7XHJcbiAgcHJpdmF0ZSBwcmVmaXggPSB7XHJcbiAgICB0ZWNobmljYWw6ICdlcXVpcG1lbnRzL25vdGUvdGVjaG5pY2FsLycsXHJcbiAgICBpbWFnZTogJ2VxdWlwbWVudHMvbm90ZS9pbWFnZS8nLFxyXG4gICAgZmluYW5jaWFsOiAnZXF1aXBtZW50cy9ub3RlL2ZpbmFuY2lhbC8nLFxyXG4gICAgaW5mb3JtYXRpb246ICdlcXVpcG1lbnRzL25vdGUvaW5mb3JtYXRpb24vJyxcclxuICAgIG90aGVyOiAnZXF1aXBtZW50cy9ub3RlL290aGVyLycsXHJcbiAgICBjb250cmFjdHVhbDogJ2VxdWlwbWVudHMvbm90ZS9jb250cmFjdHVhbC8nLFxyXG4gIH07XHJcblxyXG4gIGVxdWlwbWVudHNVcGRhdGVkOiBTdWJqZWN0PHtcclxuICAgIHNwYWNlOiBFcXVpcG1lbnRbXTtcclxuICAgIHpvbmU6IEVxdWlwbWVudFtdO1xyXG4gIH0+ID0gbmV3IFN1YmplY3QoKTtcclxuXHJcbiAgY3VycmVudEVxdWlwbWVudHM6IHtcclxuICAgIHNwYWNlOiBFcXVpcG1lbnRbXTtcclxuICAgIHpvbmVzTWFwOiBNYXA8c3RyaW5nLCBFcXVpcG1lbnRbXT47XHJcbiAgfSA9IHtcclxuICAgICAgc3BhY2U6IFtdLFxyXG4gICAgICB6b25lc01hcDogbmV3IE1hcCgpLFxyXG4gICAgfTtcclxuXHJcbiAgZXF1aXBtZW50c1RhZ3M6IEJlaGF2aW9yU3ViamVjdDxFcXVpcG1lbnRbXT4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEVxdWlwbWVudFtdPihudWxsKTtcclxuXHJcbiAgem9uZUlERmlsdGVyOiBzdHJpbmc7XHJcblxyXG4gIGN1cnJlbnRab25lOiBab25lO1xyXG5cclxuICBjdXJyZW50U3BhY2VJRDogc3RyaW5nO1xyXG5cclxuICBmbG9vcnNQZXJTcGFjZTogWm9uZVtdID0gbnVsbDtcclxuXHJcbiAgLyoqIE51bGwgbWVhbnMgd2UgZG8gbm90IGFwcGx5IGEgZmlsdGVyLCBlbXB0eSBhcnJheSAoW10pLCBtZWFucyB3ZSB0aGF0IHdlIGhpZGUgYWxsIGVxdWlwbWVudCAqL1xyXG4gIGVxdWlwbWVudERvbWFpbkZpbHRlcjogc3RyaW5nW10gPSBudWxsO1xyXG5cclxuICB1cGRhdGluZzogU3ViamVjdDxib29sZWFuPiA9IG5ldyBTdWJqZWN0KCk7XHJcblxyXG4gIGN1cnJlbnRseVVwZGF0aW5nID0gZmFsc2U7XHJcblxyXG4gIGN1cnJlbnRTd2VlcDogc3RyaW5nO1xyXG5cclxuICBkZWxldGVPYnNlcnZhYmxlOiBTdWJqZWN0PEVxdWlwbWVudD4gPSBuZXcgU3ViamVjdCgpO1xyXG5cclxuICBjcmVhdGVPYnNlcnZhYmxlOiBTdWJqZWN0PEVxdWlwbWVudD4gPSBuZXcgU3ViamVjdCgpO1xyXG5cclxuICB1cGRhdGVPYnNlcnZhYmxlOiBTdWJqZWN0PEVxdWlwbWVudD4gPSBuZXcgU3ViamVjdCgpO1xyXG5cclxuICBzZWxlY3RlZEZsb29yOiBab25lID0gbnVsbDtcclxuXHJcbiAgQVBJOiBhbnk7IC8vQVdTXHJcbiAgYXdzS2luZXNpc0FuYWx5dGljczogYW55OyAvL0FXU1xyXG5cclxuICBpc011c2V1bVVzZXIgPSBmYWxzZTtcclxuXHJcbiAgcHJpdmF0ZSBkZXN0cm95JCA9IG5ldyBTdWJqZWN0KCk7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgQEluamVjdCgnY3VycmVudEFQSVNlcnZpY2UnKSBhcGlJbmplY3RlZDogYW55LFxyXG4gICAgQEluamVjdCgnY3VycmVudEF3c0tpbmVzaXNBbmFseXRpY3NTZXJ2aWNlJylcclxuICAgIGF3c0tpbmVzaXNBbmFseXRpY3NJbmplY3RlZDogYW55LFxyXG4gICAgcG9pU2VydmljZTogUG9pU2VydmljZSxcclxuICAgIG5hdmlnYXRpb25TZXJ2aWNlOiBOYXZpZ2F0aW9uU2VydmljZSxcclxuICAgIHByaXZhdGUgb3BlcmF0aW9uU2VydmljZTogT3BlcmF0aW9uU2VydmljZSxcclxuICAgIHByaXZhdGUgdGlja2V0c1NlcnZpY2U6IFRpY2tldHNTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBuYXZpZ2F0b3JTZXJ2aWNlOiBOYXZpZ2F0b3JTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBmaWx0ZXJTZXJ2aWNlOiBGaWx0ZXJTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSB1c2VyU2VydmljZTogQmFzZVVzZXJTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSB2aWV3ZXJTZXJ2aWNlOiBWaWV3ZXJTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBtb2RhbFNlcnZpY2U6IE5nYk1vZGFsLFxyXG4gICAgcHJpdmF0ZSB6b25lQ2hhbmdlU2VydmljZTogWm9uZUNoYW5nZVNlcnZpY2VcclxuICApIHtcclxuICAgIHN1cGVyKHBvaVNlcnZpY2UsIG5hdmlnYXRpb25TZXJ2aWNlKTtcclxuXHJcbiAgICB0aGlzLkFQSSA9IGFwaUluamVjdGVkO1xyXG4gICAgdGhpcy5hd3NLaW5lc2lzQW5hbHl0aWNzID0gYXdzS2luZXNpc0FuYWx5dGljc0luamVjdGVkO1xyXG5cclxuICAgIHRoaXMuaXNNdXNldW1Vc2VyID0gdGhpcy51c2VyU2VydmljZS5oYXNPbmx5TXVzZXVtUm9sZSgpO1xyXG4gICAgdGhpcy5pbml0U3Vic2NyaXB0aW9ucygpO1xyXG4gICAgdGhpcy51c2VyU2VydmljZS5pc0NoYW5nZWQuc3Vic2NyaWJlKChpc0Nvbm5lY3RlZCkgPT4ge1xyXG4gICAgICBpZiAoaXNDb25uZWN0ZWQpIHtcclxuICAgICAgICB0aGlzLmlzTXVzZXVtVXNlciA9IHRoaXMudXNlclNlcnZpY2UuaGFzT25seU11c2V1bVJvbGUoKTtcclxuICAgICAgICB0aGlzLmluaXRTdWJzY3JpcHRpb25zKCk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy51bnN1YnNjcmliZSgpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLnpvbmVDaGFuZ2VTZXJ2aWNlLmZsb29ySGFzQ2hhbmdlZC5zdWJzY3JpYmUoKGZsb29yKSA9PiB7XHJcbiAgICAgIGlmIChmbG9vcikge1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRGbG9vciA9IGZsb29yO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGFzeW5jIHJlYWRFcXVpcG1lbnQoaWQ6IHN0cmluZyk6IFByb21pc2U8RXF1aXBtZW50PiB7XHJcbiAgICByZXR1cm4gdGhpcy5BUEkuX19wcm90b19fLkdldEVxdWlwbWVudChpZCkudGhlbihhc3luYyAocmVjZWl2ZWRFcXVpcCkgPT4ge1xyXG4gICAgICBsZXQgZXF1aXA6IEVxdWlwbWVudDtcclxuICAgICAgaWYgKHJlY2VpdmVkRXF1aXApIHtcclxuICAgICAgICBlcXVpcCA9IHJlY2VpdmVkRXF1aXA7XHJcbiAgICAgICAgZXF1aXAgPSBhd2FpdCB0aGlzLmdldFNpZ25lZFVybHNGb3JFcXVpcG1lbnQocmVjZWl2ZWRFcXVpcCk7XHJcbiAgICAgICAgaWYgKGVxdWlwLmRvbWFpbikge1xyXG4gICAgICAgICAgaWYgKGVxdWlwLmRvbWFpbi5wYXJlbnRJRCkge1xyXG4gICAgICAgICAgICBlcXVpcC5jaGlsZERvbWFpbiA9IGVxdWlwLmRvbWFpbjtcclxuICAgICAgICAgICAgZXF1aXAucGFyZW50RG9tYWluID0gZXF1aXAuZG9tYWluLnBhcmVudDtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGVxdWlwLnBhcmVudERvbWFpbiA9IGVxdWlwLmRvbWFpbjtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGVxdWlwLnN1YmVxdWlwbWVudHNJRHMpIHtcclxuICAgICAgICAgIGNvbnN0IHN1YkVxdWlwcyA9IFtdO1xyXG4gICAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoXHJcbiAgICAgICAgICAgIGVxdWlwLnN1YmVxdWlwbWVudHNJRHMubWFwKGFzeW5jIChzdWJJZCkgPT4ge1xyXG4gICAgICAgICAgICAgIGNvbnN0IHN1YkVxdWlwID0gYXdhaXQgdGhpcy5BUEkuR2V0RXF1aXBtZW50KHN1YklkKTtcclxuICAgICAgICAgICAgICBzdWJFcXVpcHMucHVzaChzdWJFcXVpcCk7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgZXF1aXAuc3ViRXF1aXBtZW50cyA9IHN1YkVxdWlwcztcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIGVxdWlwO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBhc3luYyBjcmVhdGVFcXVpcG1lbnQoXHJcbiAgICBlcXVpcDogRXF1aXBtZW50LFxyXG4gICAgaW1hZ2VGaWxlOiBGaWxlLFxyXG4gICAgZG9jdW1lbnRGaWxlOiBGaWxlXHJcbiAgKTogUHJvbWlzZTxFcXVpcG1lbnQgfCB2b2lkPiB7XHJcbiAgICByZW1vdmVOdWxsS2V5c0Zyb21PYmplY3QoZXF1aXApO1xyXG4gICAgaWYgKCEhdGhpcy5hd3NLaW5lc2lzQW5hbHl0aWNzICYmICEhdGhpcy5hd3NLaW5lc2lzQW5hbHl0aWNzLnJlY29yZCAmJiB0aGlzLmF3c0tpbmVzaXNBbmFseXRpY3MucmVjb3JkKCkpIHtcclxuICAgICAgdGhpcy5hd3NLaW5lc2lzQW5hbHl0aWNzLmdldEluc3RhbmNlKCkucmVjb3JkKFxyXG4gICAgICAgIC8vIEB0cy1pZ25vcmVcclxuICAgICAgICB7XHJcbiAgICAgICAgICBkYXRhOiB7XHJcbiAgICAgICAgICAgIGV2ZW50VHlwZTogJ09iamVjdCBDcmVhdGlvbicsXHJcbiAgICAgICAgICAgIG9iamVjdFR5cGU6ICdlcXVpcG1lbnQnLFxyXG4gICAgICAgICAgICBwb2k6IGVxdWlwLFxyXG4gICAgICAgICAgICB1c2VyOiB0aGlzLnVzZXJTZXJ2aWNlLmN1LFxyXG4gICAgICAgICAgICBsb2NhdGlvbklkOiB0aGlzLmN1cnJlbnRTcGFjZUlELFxyXG4gICAgICAgICAgICB0aW1lc3RhbXA6IG5ldyBEYXRlKCksXHJcbiAgICAgICAgICAgIHpvbmVJZDogdGhpcy5jdXJyZW50Wm9uZS5pZCxcclxuICAgICAgICAgICAgZmxvb3JJZDogdGhpcy5zZWxlY3RlZEZsb29yPy5pZCxcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBzdHJlYW1OYW1lOiAnc21hcnRlcnBsYW5LaW5lc2lzLWFuYWx5dGljcycsXHJcbiAgICAgICAgICAvLyBwYXJ0aXRpb25LZXk6IFwiXCIsXHJcbiAgICAgICAgfSxcclxuICAgICAgICAnQVdTS2luZXNpcydcclxuICAgICAgKTtcclxuICAgIH1cclxuICAgIHJldHVybiB0aGlzLkFQSS5DcmVhdGVFcXVpcG1lbnQoZXF1aXApLnRoZW4oYXN5bmMgKHJlY2VpdmVkRXF1aXBtZW50KSA9PiB7XHJcbiAgICAgIGxldCBlcXVpcG1lbnQgPSByZWNlaXZlZEVxdWlwbWVudCBhcyBFcXVpcG1lbnQ7XHJcbiAgICAgIGlmIChlcXVpcG1lbnQpIHtcclxuICAgICAgICBjb25zb2xlLmxvZygnZXF1aXBtZW50IGNyZWF0ZWQ6JywgZXF1aXBtZW50KTtcclxuICAgICAgICBpZiAoZG9jdW1lbnRGaWxlKSB7XHJcbiAgICAgICAgICBhd2FpdCB0aGlzLnVwbG9hZERvYyhlcXVpcG1lbnQsIGRvY3VtZW50RmlsZSwgVHlwZU5vdGUuVEVDSE5JQ0FMKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGltYWdlRmlsZSkge1xyXG4gICAgICAgICAgYXdhaXQgdGhpcy51cGxvYWRJbWFnZShlcXVpcG1lbnQsIGltYWdlRmlsZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBlcXVpcG1lbnQ7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGFzeW5jIGdldFNpZ25lZFVybHNGb3JFcXVpcG1lbnQoZXF1aXA6IEVxdWlwbWVudCk6IFByb21pc2U8RXF1aXBtZW50PiB7XHJcbiAgICBjb25zdCBlcXVpcG1lbnQgPSB7IC4uLmVxdWlwIH07XHJcbiAgICBpZiAoZXF1aXBtZW50Lm5vdGVzLml0ZW1zLmxlbmd0aCA+IDApIHtcclxuICAgICAgY29uc3QgZG9jcyA9IFtdO1xyXG4gICAgICBhd2FpdCBQcm9taXNlLmFsbChcclxuICAgICAgICBlcXVpcG1lbnQubm90ZXMuaXRlbXMubWFwKGFzeW5jIChub3RlKSA9PiB7XHJcbiAgICAgICAgICBlcXVpcG1lbnQuZG9jdW1lbnRhdGlvbkltYWdlVXJsU2lnbmVkID1cclxuICAgICAgICAgICAgYXdhaXQgZ2V0U2lnbmVkSW1hZ2VVcmxGb3JFcXVpcG1lbnQoZXF1aXBtZW50KTtcclxuICAgICAgICAgIGlmIChub3RlLmF0dGFjaG1lbnQpIHtcclxuICAgICAgICAgICAgY29uc3QgeyBsZW5ndGggfSA9IG5vdGUuYXR0YWNobWVudC5zcGxpdCgnLycpO1xyXG4gICAgICAgICAgICBjb25zdCBmaWxlbmFtZSA9IG5vdGUuYXR0YWNobWVudC5zcGxpdCgnLycpW2xlbmd0aCAtIDFdO1xyXG4gICAgICAgICAgICBjb25zdCBhdHRhY2htZW50ID0gYXdhaXQgZ2V0U2lnbmVkRmlsZShub3RlLmF0dGFjaG1lbnQpO1xyXG4gICAgICAgICAgICBpZiAoYXR0YWNobWVudCkge1xyXG4gICAgICAgICAgICAgIGRvY3MucHVzaCh7XHJcbiAgICAgICAgICAgICAgICBmaWxlbmFtZSxcclxuICAgICAgICAgICAgICAgIHVybDogbm90ZS5hdHRhY2htZW50LFxyXG4gICAgICAgICAgICAgICAgdXJsU2lnbmVkOiBhdHRhY2htZW50LFxyXG4gICAgICAgICAgICAgICAgbm90ZUlEOiBub3RlLmlkLFxyXG4gICAgICAgICAgICAgIH0gYXMgRXF1aXBtZW50RG9jdW1lbnQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICAgICAgZXF1aXBtZW50LmRvY3VtZW50cyA9IGRvY3M7XHJcbiAgICAgIHJldHVybiBlcXVpcG1lbnQ7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZXF1aXBtZW50O1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgZ2V0RXF1aXBtZW50c0ZvclRpY2tldCh0aWNrZXQ6IFRpY2tldCk6IFByb21pc2U8RXF1aXBtZW50W10+IHtcclxuICAgIGNvbnN0IG9wZXJhdGlvbnMgPSB0aWNrZXQub3BlcmF0aW9ucy5pdGVtcztcclxuICAgIGlmIChvcGVyYXRpb25zLmxlbmd0aCA+IDApIHtcclxuICAgICAgb3BlcmF0aW9ucy5zb3J0KFxyXG4gICAgICAgIChhLCBiKSA9PlxyXG4gICAgICAgICAgLy8gQHRzLWlnbm9yZVxyXG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHByZXR0aWVyL3ByZXR0aWVyXHJcbiAgICAgICAgICBuZXcgRGF0ZShiLmNyZWF0ZWRBdCkgLSBuZXcgRGF0ZShhLmNyZWF0ZWRBdClcclxuICAgICAgKTtcclxuICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoXHJcbiAgICAgICAgb3BlcmF0aW9ucy5tYXAoYXN5bmMgKG9wZXJhdGlvbikgPT4ge1xyXG4gICAgICAgICAgb3BlcmF0aW9uLmVxdWlwbWVudCA9IGF3YWl0IHRoaXMucmVhZEVxdWlwbWVudChvcGVyYXRpb24uZXF1aXBtZW50SUQpO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgICAvLyB0byBrZWVwIHRoZSBzb3J0aW5nIGJ5IGNyZWF0ZWRBdFxyXG4gICAgcmV0dXJuIG9wZXJhdGlvbnMubWFwKChvKSA9PiBvLmVxdWlwbWVudCk7XHJcbiAgfVxyXG5cclxuICBhc3luYyBnZXRFcXVpcG1lbnRzRm9yU3BhY2Uoc3BhY2VJRDogc3RyaW5nKTogUHJvbWlzZTxFcXVpcG1lbnRbXT4ge1xyXG4gICAgLy8gc3BsaXQgYnkgMTAwXHJcbiAgICBjb25zdCBsaW1pdCA9IDEwMDtcclxuICAgIGxldCBlcXVpcHNUb2tlbiA9IHsgZXF1aXBzOiBbXSwgbmV4dFRva2VuOiBudWxsIH07XHJcbiAgICBkbyB7XHJcbiAgICAgIGVxdWlwc1Rva2VuID0gYXdhaXQgdGhpcy5tZXJnZUVxdWlwbWVudHNGb3JTcGFjZVdpdGhOZXh0VG9rZW5XaXRoTGltaXQoXHJcbiAgICAgICAgc3BhY2VJRCxcclxuICAgICAgICBsaW1pdCxcclxuICAgICAgICBlcXVpcHNUb2tlblxyXG4gICAgICApO1xyXG4gICAgfSB3aGlsZSAoZXF1aXBzVG9rZW4ubmV4dFRva2VuKTtcclxuICAgIHJldHVybiBlcXVpcHNUb2tlbi5lcXVpcHM7XHJcbiAgfVxyXG5cclxuICBhc3luYyBtZXJnZUVxdWlwbWVudHNGb3JTcGFjZVdpdGhOZXh0VG9rZW5XaXRoTGltaXQoXHJcbiAgICBzcGFjZUlEOiBzdHJpbmcsXHJcbiAgICBsaW1pdDogbnVtYmVyLFxyXG4gICAgZXF1aXBzVG9rZW46IHsgZXF1aXBzOiBFcXVpcG1lbnRbXTsgbmV4dFRva2VuOiBzdHJpbmcgfCBudWxsIH1cclxuICApOiBQcm9taXNlPHsgZXF1aXBzOiBFcXVpcG1lbnRbXTsgbmV4dFRva2VuOiBzdHJpbmcgfCBudWxsIH0+IHtcclxuICAgIHJldHVybiB0aGlzLkFQSS5fX3Byb3RvX19cclxuICAgICAgLkVxdWlwbWVudHNCeVNwYWNlKFxyXG4gICAgICAgIHNwYWNlSUQsXHJcbiAgICAgICAgbnVsbCxcclxuICAgICAgICAnREVTQycsXHJcbiAgICAgICAgbnVsbCxcclxuICAgICAgICBsaW1pdCxcclxuICAgICAgICBlcXVpcHNUb2tlbi5uZXh0VG9rZW4gLy8gbmV4dFRva2VuXHJcbiAgICAgIClcclxuICAgICAgLnRoZW4oKHJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgY29uc3QgZXF1aXBzTGltaXQgPSByZXNwb25zZS5pdGVtcztcclxuICAgICAgICBjb25zdCBlcXVpcHNPYmplY3QgPSB7XHJcbiAgICAgICAgICBlcXVpcHM6IFsuLi5lcXVpcHNUb2tlbi5lcXVpcHMsIC4uLmVxdWlwc0xpbWl0XSxcclxuICAgICAgICAgIG5leHRUb2tlbjogcmVzcG9uc2UubmV4dFRva2VuLFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgcmV0dXJuIGVxdWlwc09iamVjdDtcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICBhc3luYyB1cGxvYWRJbWFnZUZvckFsbEVxdWlwbWVudHMoXHJcbiAgICBlcXVpcG1lbnRzOiBFcXVpcG1lbnRbXSxcclxuICAgIGltYWdlRmlsZTogRmlsZVxyXG4gICk6IFByb21pc2U8RXF1aXBtZW50W10+IHtcclxuICAgIGlmIChlcXVpcG1lbnRzLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICByZXR1cm4gW107XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHVwbG9hZEZpbGVUb1MzKHRoaXMucHJlZml4LmltYWdlLCBpbWFnZUZpbGUsICdCQVRDSCcpLnRoZW4oXHJcbiAgICAgIGFzeW5jICh1cmwpID0+IHtcclxuICAgICAgICBpZiAodXJsKSB7XHJcbiAgICAgICAgICBjb25zdCBlcXVpcHMgPSBbXTtcclxuICAgICAgICAgIGZvciAoY29uc3QgZXF1aXAgb2YgZXF1aXBtZW50cykge1xyXG4gICAgICAgICAgICBjb25zdCBjdXJyZW50TWlzc2lvbiA9IHRoaXMudXNlclNlcnZpY2UuY3VycmVudE1pc3Npb24oXHJcbiAgICAgICAgICAgICAgZXF1aXAuc3BhY2VJRFxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLkFQSS5fX3Byb3RvX18uQ3JlYXRlTm90ZSh7XHJcbiAgICAgICAgICAgICAgYXR0YWNobWVudDogdXJsLFxyXG4gICAgICAgICAgICAgIHR5cGU6IFR5cGVOb3RlLklNQUdFLFxyXG4gICAgICAgICAgICAgIGVxdWlwbWVudElEOiBlcXVpcC5pZCxcclxuICAgICAgICAgICAgICBvd25lck1pc3Npb25JRDogY3VycmVudE1pc3Npb24gPyBjdXJyZW50TWlzc2lvbi5pZCA6IG51bGwsXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBjb25zdCB1cGRhdGUgPSBhd2FpdCB0aGlzLkFQSS5fX3Byb3RvX18uVXBkYXRlRXF1aXBtZW50KHtcclxuICAgICAgICAgICAgICBpZDogZXF1aXAuaWQsXHJcbiAgICAgICAgICAgICAgcGhvdG86IHVybCxcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGVxdWlwcy5wdXNoKHVwZGF0ZSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICByZXR1cm4gZXF1aXBzO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gW107XHJcbiAgICAgIH1cclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBhc3luYyB1cGxvYWRJbWFnZShlcXVpcG1lbnQ6IEVxdWlwbWVudCwgaW1hZ2VGaWxlOiBGaWxlKTogUHJvbWlzZTxOb3RlPiB7XHJcbiAgICByZXR1cm4gdXBsb2FkRmlsZVRvUzModGhpcy5wcmVmaXguaW1hZ2UsIGltYWdlRmlsZSwgZXF1aXBtZW50LmlkKS50aGVuKFxyXG4gICAgICBhc3luYyAodXJsKSA9PiB7XHJcbiAgICAgICAgaWYgKHVybCkge1xyXG4gICAgICAgICAgY29uc3QgY3VycmVudE1pc3Npb24gPSB0aGlzLnVzZXJTZXJ2aWNlLmN1cnJlbnRNaXNzaW9uKFxyXG4gICAgICAgICAgICBlcXVpcG1lbnQuc3BhY2VJRFxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIGNvbnN0IG5vdGUgPSBhd2FpdCB0aGlzLkFQSS5fX3Byb3RvX18uQ3JlYXRlTm90ZSh7XHJcbiAgICAgICAgICAgIGF0dGFjaG1lbnQ6IHVybCxcclxuICAgICAgICAgICAgdHlwZTogVHlwZU5vdGUuSU1BR0UsXHJcbiAgICAgICAgICAgIGVxdWlwbWVudElEOiBlcXVpcG1lbnQuaWQsXHJcbiAgICAgICAgICAgIG93bmVyTWlzc2lvbklEOiBjdXJyZW50TWlzc2lvbiA/IGN1cnJlbnRNaXNzaW9uLmlkIDogbnVsbCxcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgYXdhaXQgdGhpcy5BUEkuX19wcm90b19fLlVwZGF0ZUVxdWlwbWVudCh7XHJcbiAgICAgICAgICAgIGlkOiBlcXVpcG1lbnQuaWQsXHJcbiAgICAgICAgICAgIHBob3RvOiB1cmwsXHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICAgIHJldHVybiBub3RlO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgfVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIGFzeW5jIHVwZGF0ZUVxdWlwbWVudChcclxuICAgIGVxdWlwOiBhbnksXHJcbiAgICBmaWxlOiBGaWxlID0gbnVsbCxcclxuICAgIG5vdGVUeXBlOiBUeXBlTm90ZSA9IG51bGxcclxuICApOiBQcm9taXNlPEVxdWlwbWVudD4ge1xyXG4gICAgcmV0dXJuIHRoaXMuQVBJLl9fcHJvdG9fX1xyXG4gICAgICAuVXBkYXRlRXF1aXBtZW50KGVxdWlwKVxyXG4gICAgICAudGhlbihhc3luYyAocmVjZWl2ZWRFcXVpcG1lbnQpID0+IHtcclxuICAgICAgICBsZXQgZXF1aXBtZW50ID0gcmVjZWl2ZWRFcXVpcG1lbnQgYXMgRXF1aXBtZW50O1xyXG4gICAgICAgIGlmIChlcXVpcG1lbnQpIHtcclxuICAgICAgICAgIGNvbnNvbGUubG9nKCdlcXVpcG1lbnQgdXBkYXRlZDonLCBlcXVpcG1lbnQpO1xyXG4gICAgICAgICAgaWYgKG5vdGVUeXBlKSB7XHJcbiAgICAgICAgICAgIHN3aXRjaCAobm90ZVR5cGUpIHtcclxuICAgICAgICAgICAgICBjYXNlIFR5cGVOb3RlLklNQUdFOlxyXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy51cGxvYWRJbWFnZShlcXVpcG1lbnQsIGZpbGUpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMudXBsb2FkRG9jKGVxdWlwbWVudCwgZmlsZSwgbm90ZVR5cGUpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGVxdWlwbWVudDtcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICBnZXRQcmVmaXhEb2ModHlwZTogVHlwZU5vdGUpIHtcclxuICAgIGxldCBwcmVmaXg7XHJcbiAgICBzd2l0Y2ggKHR5cGUpIHtcclxuICAgICAgY2FzZSBUeXBlTm90ZS5JTkZPUk1BVElPTjpcclxuICAgICAgICBwcmVmaXggPSB0aGlzLnByZWZpeC5pbmZvcm1hdGlvbjtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBUeXBlTm90ZS5GSU5BTkNJQUw6XHJcbiAgICAgICAgcHJlZml4ID0gdGhpcy5wcmVmaXguZmluYW5jaWFsO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIFR5cGVOb3RlLkNPTlRSQUNUVUFMOlxyXG4gICAgICAgIHByZWZpeCA9IHRoaXMucHJlZml4LmNvbnRyYWN0dWFsO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIFR5cGVOb3RlLk9USEVSOlxyXG4gICAgICAgIHByZWZpeCA9IHRoaXMucHJlZml4Lm90aGVyO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIFR5cGVOb3RlLklNQUdFOlxyXG4gICAgICAgIHByZWZpeCA9IHRoaXMucHJlZml4LmltYWdlO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIHByZWZpeCA9IHRoaXMucHJlZml4LnRlY2huaWNhbDtcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuICAgIHJldHVybiBwcmVmaXg7XHJcbiAgfVxyXG5cclxuICBhc3luYyB1cGxvYWREb2NGb3JBbGxFcXVpcG1lbnRzKFxyXG4gICAgZXF1aXBtZW50czogRXF1aXBtZW50W10sXHJcbiAgICBkb2N1bWVudEZpbGU6IEZpbGUsXHJcbiAgICB0eXBlOiBUeXBlTm90ZVxyXG4gICkge1xyXG4gICAgaWYgKGVxdWlwbWVudHMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgIHJldHVybiBbXTtcclxuICAgIH1cclxuICAgIGNvbnN0IHByZWZpeCA9IHRoaXMuZ2V0UHJlZml4RG9jKHR5cGUpO1xyXG4gICAgY29uc3QgdXJsID0gYXdhaXQgdXBsb2FkRmlsZVRvUzMocHJlZml4LCBkb2N1bWVudEZpbGUsICdCQVRDSCcpO1xyXG4gICAgaWYgKHVybCkge1xyXG4gICAgICBjb25zdCB1cGRhdGVMaXN0ID0gW107XHJcbiAgICAgIGZvciAoY29uc3QgZXF1aXAgb2YgZXF1aXBtZW50cykge1xyXG4gICAgICAgIGNvbnN0IG1pc3Npb24gPSB0aGlzLnVzZXJTZXJ2aWNlLmN1cnJlbnRNaXNzaW9uKGVxdWlwLnNwYWNlSUQpO1xyXG4gICAgICAgIGNvbnN0IG5ld0VxdWlwID0gYXdhaXQgdGhpcy5BUEkuX19wcm90b19fLkNyZWF0ZU5vdGUoe1xyXG4gICAgICAgICAgYXR0YWNobWVudDogdXJsLFxyXG4gICAgICAgICAgdHlwZSxcclxuICAgICAgICAgIGVxdWlwbWVudElEOiBlcXVpcC5pZCxcclxuICAgICAgICAgIG93bmVyTWlzc2lvbklEOiBtaXNzaW9uID8gbWlzc2lvbi5pZCA6IG51bGwsXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdXBkYXRlTGlzdC5wdXNoKG5ld0VxdWlwKTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gdXBkYXRlTGlzdDtcclxuICAgIH1cclxuICAgIHJldHVybiBbXTtcclxuICB9XHJcblxyXG4gIGFzeW5jIHVwbG9hZERvYyhcclxuICAgIGVxdWlwbWVudDogRXF1aXBtZW50LFxyXG4gICAgZG9jdW1lbnRGaWxlOiBGaWxlLFxyXG4gICAgdHlwZTogVHlwZU5vdGVcclxuICApOiBQcm9taXNlPE5vdGU+IHtcclxuICAgIGNvbnN0IHByZWZpeCA9IHRoaXMuZ2V0UHJlZml4RG9jKHR5cGUpO1xyXG4gICAgY29uc3QgbWlzc2lvbiA9IHRoaXMudXNlclNlcnZpY2UuY3VycmVudE1pc3Npb24oZXF1aXBtZW50LnNwYWNlSUQpO1xyXG4gICAgcmV0dXJuIHVwbG9hZEZpbGVUb1MzKHByZWZpeCwgZG9jdW1lbnRGaWxlLCBlcXVpcG1lbnQuaWQpLnRoZW4oXHJcbiAgICAgIGFzeW5jICh1cmwpID0+IHtcclxuICAgICAgICBpZiAodXJsKSB7XHJcbiAgICAgICAgICByZXR1cm4gdGhpcy5BUEkuX19wcm90b19fLkNyZWF0ZU5vdGUoe1xyXG4gICAgICAgICAgICBhdHRhY2htZW50OiB1cmwsXHJcbiAgICAgICAgICAgIHR5cGUsXHJcbiAgICAgICAgICAgIGVxdWlwbWVudElEOiBlcXVpcG1lbnQuaWQsXHJcbiAgICAgICAgICAgIG93bmVyTWlzc2lvbklEOiBtaXNzaW9uID8gbWlzc2lvbi5pZCA6IG51bGwsXHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgIH1cclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBhc3luYyBkZWxldGVFcXVpcG1lbnQoZXF1aXA6IEVxdWlwbWVudCk6IFByb21pc2U8RXF1aXBtZW50PiB7XHJcbiAgICBjb25zdCBkZWxldGVkID0gYXdhaXQgdGhpcy5BUEkuX19wcm90b19fLkRlbGV0ZUVxdWlwbWVudCh7IGlkOiBlcXVpcC5pZCB9KTtcclxuICAgIGNvbnNvbGUubG9nKCdEZWxldGVkIGVxdWlwbWVudCcsIGRlbGV0ZWQpO1xyXG5cclxuICAgIC8vIGRlbGV0ZSBQT0lcclxuICAgIGNvbnN0IFtwb2ldID0gZXF1aXAucG9pcy5pdGVtcztcclxuICAgIGlmIChwb2kpIHtcclxuICAgICAgYXdhaXQgdGhpcy5wb2lTZXJ2aWNlLmRlbGV0ZVBvaShwb2kuaWQpO1xyXG4gICAgfVxyXG4gICAgLy8gZGVsZXRlIG5vdGVzIHJlbGF0ZWRcclxuICAgIGlmIChlcXVpcC5ub3Rlcy5pdGVtcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIGF3YWl0IFByb21pc2UuYWxsKFxyXG4gICAgICAgIGVxdWlwLm5vdGVzLml0ZW1zLm1hcChhc3luYyAobm90ZTogTm90ZSkgPT4ge1xyXG4gICAgICAgICAgLy8gZGVsZXRlIGZpbGVzIGZyb20gUzNcclxuICAgICAgICAgIC8qKiBOb3Qgc2hhcmVkIHdpdGggb3RoZXIgZXF1aXBtZW50ICovXHJcbiAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgIG5vdGUuYXR0YWNobWVudCAmJlxyXG4gICAgICAgICAgICAhbm90ZS5hdHRhY2htZW50LnNwbGl0KCcvJykucG9wKCkuc3RhcnRzV2l0aCgnQkFUQ0hfJylcclxuICAgICAgICAgICkge1xyXG4gICAgICAgICAgICBhd2FpdCBkZWxldGVGcm9tUzMobm90ZS5hdHRhY2htZW50KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGF3YWl0IHRoaXMuQVBJLl9fcHJvdG9fXy5EZWxldGVOb3RlKHsgaWQ6IG5vdGUuaWQgfSk7XHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICAgIH1cclxuICAgIC8vIGRlbGV0ZSBvcGVyYXRpb25zIChyZW1vdmUgZnJvbSBsaW5rZWQgdGlja2V0cylcclxuICAgIGF3YWl0IHRoaXMub3BlcmF0aW9uU2VydmljZS5kZWxldGVPcGVyYXRpb25zRm9yRXF1aXBtZW50KGVxdWlwLmlkKTtcclxuICAgIHJldHVybiBkZWxldGVkO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgdXBkYXRlRXF1aXBtZW50TG9jYXRpb24oXHJcbiAgICBlcXVpcDogRXF1aXBtZW50LFxyXG4gICAgdGFnRGF0YTogTWF0dGVydGFnRGF0YVxyXG4gICk6IFByb21pc2U8UE9JPiB7XHJcbiAgICBjb25zdCBwb2lJbnB1dCA9IHtcclxuICAgICAgY29vcmRpbmF0ZTogdGFnRGF0YS5nZXRDb29yZGluYXRlU3RyaW5nKCksXHJcbiAgICAgIHR5cGU6IFBvaVR5cGUuRVFVSVBNRU5ULFxyXG4gICAgICBlbGVtZW50SUQ6IGVxdWlwLmlkLFxyXG4gICAgICBtZXRhZGF0YTogdGFnRGF0YS5nZXRNZXRhZGF0YVN0cmluZygpLFxyXG4gICAgICBtYXR0ZXJwb3J0U3dlZXBJRDogdGFnRGF0YS5nZXRTd2VlcElEKCksXHJcbiAgICB9IGFzIFBPSTtcclxuICAgIGNvbnN0IHBvaSA9IGF3YWl0IHRoaXMucG9pU2VydmljZS5jcmVhdGVQT0lGb3JTcGFjZUlEKHBvaUlucHV0KTtcclxuICAgIHJldHVybiBwb2k7XHJcbiAgfVxyXG5cclxuICBhc3luYyByZW1vdmVUaWNrZXRGcm9tRXF1aXBtZW50KFxyXG4gICAgdGlja2V0OiBUaWNrZXQsXHJcbiAgICBlcXVpcDogRXF1aXBtZW50XHJcbiAgKTogUHJvbWlzZTxPcGVyYXRpb24+IHtcclxuICAgIGNvbnN0IG9wZXJhdGlvbkVxdWlwID1cclxuICAgICAgYXdhaXQgdGhpcy5vcGVyYXRpb25TZXJ2aWNlLmdldE9wZXJhdGlvbnNCeUVxdWlwbWVudElEKGVxdWlwLmlkKTtcclxuICAgIGNvbnN0IG9wZXJhdGlvblRvRGVsZXRlID0gb3BlcmF0aW9uRXF1aXAuZmluZChcclxuICAgICAgKG9wKSA9PiBvcC50aWNrZXRJRCA9PT0gdGlja2V0LmlkXHJcbiAgICApO1xyXG4gICAgcmV0dXJuIHRoaXMub3BlcmF0aW9uU2VydmljZVxyXG4gICAgICAuZGVsZXRlT3BlcmF0aW9uKG9wZXJhdGlvblRvRGVsZXRlLmlkKVxyXG4gICAgICAudGhlbigocmVzKSA9PiB7XHJcbiAgICAgICAgdGhpcy50aWNrZXRzU2VydmljZS5hZGRFdmVudFRvVGlja2V0KHRpY2tldCBhcyBUaWNrZXQsIHtcclxuICAgICAgICAgIHRpdGxlOiAnRXF1aXBlbWVudCByZXRpcsOpIGR1IHRpY2tldCcsXHJcbiAgICAgICAgICBkZXNjcmlwdGlvbjogYEVxdWlwZW1lbnQgJHtlcXVpcC5uYW1lfSBhIMOpdMOpIHJldGlyw6kgZHUgdGlja2V0YCxcclxuICAgICAgICAgIHN0YXR1czogRXZlbnRTdGF0dXMuVU5MSU5LRURfRlJPTV9FUVVJUE1FTlQsXHJcbiAgICAgICAgICB0eXBlOiBFdmVudFR5cGUuVElDS0VULFxyXG4gICAgICAgICAgdHJhbnNsYXRpb25QYXRoOiAndGlja2V0RXZlbnQudGlja2V0LnVubGlua2VkRnJvbUVxdWlwbWVudCcsXHJcbiAgICAgICAgICBtZXRhZGF0YTogSlNPTi5zdHJpbmdpZnkoeyBlcXVpcG1lbnQ6IGVxdWlwLm5hbWUgfSksXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIHJlcztcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICBhc3luYyBpbml0RXF1aXBzKCkge1xyXG4gICAgaWYgKCF0aGlzLmN1cnJlbnRTcGFjZUlEKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRoaXMudXBkYXRpbmcubmV4dCh0cnVlKTtcclxuICAgIHRoaXMuY3VycmVudGx5VXBkYXRpbmcgPSB0cnVlO1xyXG5cclxuICAgIGxldCBlcUxpc3QgPSBhd2FpdCB0aGlzLmdldEVxdWlwbWVudHNGb3JTcGFjZSh0aGlzLmN1cnJlbnRTcGFjZUlEKTtcclxuICAgIGVxTGlzdCA9IGF3YWl0IHRoaXMuZmlsdGVyU2VydmljZS5maWx0ZXJFcXVpcG1lbnRzRm9yQ3VycmVudFVzZXJJblNwYWNlKFxyXG4gICAgICB0aGlzLmN1cnJlbnRTcGFjZUlELFxyXG4gICAgICBlcUxpc3RcclxuICAgICk7XHJcbiAgICAvLyBjb25zb2xlLmxvZyhlcUxpc3QpO1xyXG4gICAgaWYgKGVxTGlzdC5sZW5ndGggPiAwKSB7XHJcbiAgICAgIGxldCBmaWx0ZXJlZEVxdWlwcyA9IGVxTGlzdC5maWx0ZXIoXHJcbiAgICAgICAgKGVxdWlwbWVudCkgPT4gIXRoaXMuaXNBcmNoaXZlZChlcXVpcG1lbnQpXHJcbiAgICAgICk7XHJcblxyXG4gICAgICBhd2FpdCBQcm9taXNlLmFsbChcclxuICAgICAgICBmaWx0ZXJlZEVxdWlwcy5tYXAoYXN5bmMgKGVxdWlwKSA9PiB7XHJcbiAgICAgICAgICBlcXVpcC5kb2N1bWVudGF0aW9uSW1hZ2VVcmxTaWduZWQgPVxyXG4gICAgICAgICAgICBhd2FpdCBnZXRTaWduZWRJbWFnZVVybEZvckVxdWlwbWVudChlcXVpcCk7XHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICAgICAgaWYgKHRoaXMuZXF1aXBtZW50RG9tYWluRmlsdGVyKSB7XHJcbiAgICAgICAgZmlsdGVyZWRFcXVpcHMgPSB0aGlzLmZpbHRlclNlcnZpY2UuZmlsdGVyRXF1aXBtZW50c0J5RG9tYWluTGlzdChcclxuICAgICAgICAgIGZpbHRlcmVkRXF1aXBzLFxyXG4gICAgICAgICAgdGhpcy5lcXVpcG1lbnREb21haW5GaWx0ZXJcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuY3VycmVudEVxdWlwbWVudHMuc3BhY2UgPSBmaWx0ZXJlZEVxdWlwcztcclxuICAgICAgaWYgKHRoaXMuem9uZUlERmlsdGVyKSB7XHJcbiAgICAgICAgZmlsdGVyZWRFcXVpcHMgPSAoYXdhaXQgdGhpcy5maWx0ZXJTZXJ2aWNlLmZpbHRlck9iamVjdHNGb3Jab25lKFxyXG4gICAgICAgICAgZmlsdGVyZWRFcXVpcHMsXHJcbiAgICAgICAgICB0aGlzLnpvbmVJREZpbHRlcixcclxuICAgICAgICAgIHRoaXMuY3VycmVudFpvbmVcclxuICAgICAgICApKSBhcyBFcXVpcG1lbnRbXTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmN1cnJlbnRFcXVpcG1lbnRzLnpvbmVzTWFwLnNldCh0aGlzLnpvbmVJREZpbHRlciwgZmlsdGVyZWRFcXVpcHMpO1xyXG4gICAgICB0aGlzLmVxdWlwbWVudHNUYWdzLm5leHQoZmlsdGVyZWRFcXVpcHMpOyAvLyBhZGRpbmcgdGFncyBvbmx5IGZvciB0aGUgY3VycmVudCB6b25lXHJcbiAgICAgIHRoaXMuZXF1aXBtZW50c1VwZGF0ZWQubmV4dCh7XHJcbiAgICAgICAgc3BhY2U6IHRoaXMuY3VycmVudEVxdWlwbWVudHMuc3BhY2UsXHJcbiAgICAgICAgem9uZTogZmlsdGVyZWRFcXVpcHMsXHJcbiAgICAgIH0pOyAvLyBmb3IgbGF0ZXJhbCBtZW51XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAodGhpcy56b25lSURGaWx0ZXIpIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRFcXVpcG1lbnRzLnpvbmVzTWFwLnNldCh0aGlzLnpvbmVJREZpbHRlciwgW10pO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuZXF1aXBtZW50c1VwZGF0ZWQubmV4dCh7IHNwYWNlOiBbXSwgem9uZTogW10gfSk7IC8vIGZvciBsYXRlcmFsIG1lbnVcclxuICAgIH1cclxuICAgIC8vIGNvbnNvbGUubG9nKHRoaXMuY3VycmVudEVxdWlwbWVudHMpO1xyXG4gICAgdGhpcy51cGRhdGluZy5uZXh0KGZhbHNlKTtcclxuICAgIHRoaXMuY3VycmVudGx5VXBkYXRpbmcgPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIGFzeW5jIGdldEVxdWlwbWVudHNGb3JDdXJyZW50VXNlckZvclNwYWNlKFxyXG4gICAgc3BhY2VJRCxcclxuICAgIG1pc3Npb25zOiBNaXNzaW9uW11cclxuICApOiBQcm9taXNlPEVxdWlwbWVudFtdPiB7XHJcbiAgICBsZXQgcmVzdWx0cyA9IFtdO1xyXG5cclxuICAgIGNvbnN0IHNwYWNlTWlzc2lvbnMgPSBtaXNzaW9ucy5maWx0ZXIoKG0pID0+IG0uc3BhY2VJRCA9PT0gc3BhY2VJRCk7XHJcbiAgICBpZiAoc3BhY2VNaXNzaW9ucy5sZW5ndGggPT09IDApIHtcclxuICAgICAgcmV0dXJuIHJlc3VsdHM7XHJcbiAgICB9XHJcbiAgICBjb25zdCBjYW5TZWVFcXVpcHMgPSBzcGFjZU1pc3Npb25zLnNvbWUoXHJcbiAgICAgIChtKSA9PlxyXG4gICAgICAgIHRoaXMudXNlclNlcnZpY2UubWFuYWdlcnMuaW5jbHVkZXMobS5yb2xlKSB8fFxyXG4gICAgICAgIG0ucm9sZSA9PT0gUm9sZVN0YXR1cy5TRVJWSUNFXHJcbiAgICApO1xyXG4gICAgaWYgKCFjYW5TZWVFcXVpcHMpIHtcclxuICAgICAgcmV0dXJuIHJlc3VsdHM7XHJcbiAgICB9XHJcbiAgICBsZXQgZG9tYWlucyA9IFtdO1xyXG4gICAgZm9yIChjb25zdCBtIG9mIHNwYWNlTWlzc2lvbnMpIHtcclxuICAgICAgZG9tYWlucyA9IFsuLi5kb21haW5zLCBtLmRvbWFpbnNdO1xyXG4gICAgfVxyXG4gICAgaWYgKGRvbWFpbnMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgIHJldHVybiByZXN1bHRzO1xyXG4gICAgfVxyXG4gICAgcmVzdWx0cyA9IGF3YWl0IHRoaXMuZ2V0RXF1aXBtZW50c0ZvclNwYWNlKHNwYWNlSUQpO1xyXG4gICAgLy8gcmVzdWx0cyA9IHRoaXMuZmlsdGVyU2VydmljZS5maWx0ZXJFcXVpcG1lbnRzQnlEb21haW5MaXN0KFxyXG4gICAgLy8gICAgIHJlc3VsdHMsXHJcbiAgICAvLyAgICAgZG9tYWlucyxcclxuICAgIC8vICk7XHJcbiAgICByZXR1cm4gcmVzdWx0cztcclxuICB9XHJcblxyXG4gIGFzeW5jIHVwZGF0ZUljb25Gb3JBbGxFcXVpcG1lbnRzSW5TcGFjZShcclxuICAgIHRhZ0ljb246IHN0cmluZyxcclxuICAgIHNwYWNlSUQ6IHN0cmluZyxcclxuICAgIGRvbWFpbklEOiBzdHJpbmcgPSBudWxsXHJcbiAgKTogUHJvbWlzZTx7IGVxdWlwczogRXF1aXBtZW50W107IHBvaXM6IFBPSVtdIH0+IHtcclxuICAgIGxldCBlcXVpcHMgPSBhd2FpdCB0aGlzLmdldEVxdWlwbWVudHNGb3JTcGFjZShzcGFjZUlEKTtcclxuICAgIGlmIChkb21haW5JRCkge1xyXG4gICAgICBlcXVpcHMgPSBlcXVpcHMuZmlsdGVyKChlcXVpcCkgPT4gZXF1aXAuZG9tYWluSUQgPT09IGRvbWFpbklEKTtcclxuICAgIH1cclxuICAgIGNvbnN0IHBvaXMgPSBhd2FpdCB0aGlzLnVwZGF0ZUljb25Gb3JBbGxPYmplY3RzKGVxdWlwcywgdGFnSWNvbik7XHJcbiAgICByZXR1cm4geyBlcXVpcHMsIHBvaXMgfTtcclxuICB9XHJcblxyXG4gIC8qKiBSZXR1cm4gdHJ1ZSBpZiB0aGUgY3VycmVudCB1c2VyIGhhcyBhcmNoaXZlZCB0aGlzIGVxdWlwbWVudCAqL1xyXG4gIGlzQXJjaGl2ZWQoZXF1aXBtZW50OiBFcXVpcG1lbnQpOiBib29sZWFuIHtcclxuICAgIHJldHVybiBlcXVpcG1lbnQuYXJjaGl2ZWRGb3JNaXNzaW9uSURcclxuICAgICAgPyBlcXVpcG1lbnQuYXJjaGl2ZWRGb3JNaXNzaW9uSUQuaW5jbHVkZXMoXHJcbiAgICAgICAgdGhpcy51c2VyU2VydmljZS5jdXJyZW50TWlzc2lvbihlcXVpcG1lbnQuc3BhY2VJRCkuaWRcclxuICAgICAgKVxyXG4gICAgICA6IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgc2V0QXJjaGl2ZWQoZXF1aXBtZW50OiBFcXVpcG1lbnQsIGFyY2hpdmVkOiBib29sZWFuKSB7XHJcbiAgICBsZXQgYXJjaGl2ZWRMaXN0ID0gZXF1aXBtZW50LmFyY2hpdmVkRm9yTWlzc2lvbklEXHJcbiAgICAgID8gZXF1aXBtZW50LmFyY2hpdmVkRm9yTWlzc2lvbklEXHJcbiAgICAgIDogW107XHJcbiAgICBjb25zdCBtaXNzaW9uSUQgPSB0aGlzLnVzZXJTZXJ2aWNlLmN1cnJlbnRNaXNzaW9uKGVxdWlwbWVudC5zcGFjZUlEKS5pZDtcclxuXHJcbiAgICBhcmNoaXZlZExpc3QgPSBhcmNoaXZlZExpc3QuZmlsdGVyKChtKSA9PiBtICE9PSBtaXNzaW9uSUQpO1xyXG5cclxuICAgIGlmIChhcmNoaXZlZCkge1xyXG4gICAgICBhcmNoaXZlZExpc3QucHVzaChtaXNzaW9uSUQpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0aGlzLnVwZGF0ZUVxdWlwbWVudCh7XHJcbiAgICAgIGlkOiBlcXVpcG1lbnQuaWQsXHJcbiAgICAgIGFyY2hpdmVkRm9yTWlzc2lvbklEOiBhcmNoaXZlZExpc3QsXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGFzeW5jIGRlbGV0ZUZpbGUoZG9jdW1lbnRfOiBFcXVpcG1lbnREb2N1bWVudCkge1xyXG4gICAgYXdhaXQgZGVsZXRlRnJvbVMzKGRvY3VtZW50Xy51cmwpO1xyXG4gICAgYXdhaXQgdGhpcy5BUEkuRGVsZXRlTm90ZSh7IGlkOiBkb2N1bWVudF8ubm90ZUlEIH0pO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgbmF2aWdhdGVUb0VxdWlwbWVudEluM0QoXHJcbiAgICBlcXVpcG1lbnQ6IEVxdWlwbWVudCxcclxuICAgIGZvcmNlU3dpdGNoVmlzaXQ6IGJvb2xlYW4gPSBmYWxzZVxyXG4gICkge1xyXG4gICAgbGV0IHVybCA9IGB2aXNpdC8ke2VxdWlwbWVudC5zcGFjZUlEfWA7XHJcbiAgICBpZiAoZm9yY2VTd2l0Y2hWaXNpdCkge1xyXG4gICAgICB1cmwgKz0gYC9lcXVpcC8ke2VxdWlwbWVudC5pZH1gO1xyXG4gICAgfVxyXG4gICAgY29uc3QgY2FuR29Ub1RhZyA9IGF3YWl0IHRoaXMudmlld2VyU2VydmljZS5hY3Rpb25fbW92ZV90b190YWcoXHJcbiAgICAgIGAke2VxdWlwbWVudC5pZH1gXHJcbiAgICApO1xyXG4gICAgaWYgKGNhbkdvVG9UYWcpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5nZXRNb2RlbDNkQW5kU3dlZXAoZXF1aXBtZW50KTtcclxuXHJcbiAgICBpZiAoIXJlc3VsdCB8fCAhcmVzdWx0Lm1vZGVsM0QpIHtcclxuICAgICAgYWxlcnQoJ0Vycm9yIHdoaWxlIGdldHRpbmcgdmlydHVhbCB2aXNpdCBtb2RlbCcpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBpZiAoIWZvcmNlU3dpdGNoVmlzaXQpIHtcclxuICAgICAgLy8gY2hlY2sgaWYgd2UgYXJlIG1vdmluZyB3aXRoaW4gdGhlIHNhbWUgM0QgbW9kZWxcclxuICAgICAgY29uc3QgY3VycmVudE1vZGVsID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ21vZGVsM0QnKTtcclxuICAgICAgaWYgKGN1cnJlbnRNb2RlbCAmJiBjdXJyZW50TW9kZWwgPT09IHJlc3VsdC5tb2RlbDNEKSB7XHJcbiAgICAgICAgLy8gd2UgYWRkIHRhZyB0byB0aGUgdmlzaXRcclxuICAgICAgICBjb25zdCBwb2kgPSBlcXVpcG1lbnQucG9pcy5pdGVtc1swXTtcclxuICAgICAgICBpZiAocG9pLmNvb3JkaW5hdGUpIHtcclxuICAgICAgICAgIC8vIHdlIGZvcmNlIGFkZCBiZWNhdXNlIHdlIG1pZ2h0IGJlIGluIGFuIGFub3RoZXIgem9uZVxyXG4gICAgICAgICAgYXdhaXQgdGhpcy52aWV3ZXJTZXJ2aWNlLmFjdGlvbkFkZE9iamVjdEZyb21QT0koZXF1aXBtZW50LCBwb2kpO1xyXG4gICAgICAgICAgYXdhaXQgdGhpcy52aWV3ZXJTZXJ2aWNlLmFjdGlvbl9tb3ZlX3RvX3RhZyhlcXVpcG1lbnQuaWQpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICAvKiogU2kgb24gbmUgZm9yY2UgcGFzIGxhIHZpc2l0ZSwgb24gZGVtYW5kZSBzaSBvbiB2ZXV0IGV0cmUgc3dpdGNoICovXHJcbiAgICAgICAgb3Blbk1vZGFsRm9yVmlzaXRTd2l0Y2goXHJcbiAgICAgICAgICB0aGlzLm1vZGFsU2VydmljZSxcclxuICAgICAgICAgIHJlc3VsdC5tb2RlbDNELFxyXG4gICAgICAgICAgZXF1aXBtZW50LnNwYWNlSUQsXHJcbiAgICAgICAgICB7IHN3ZWVwVG9Nb3ZlOiByZXN1bHQuc3dlZXAsIHJvdGF0aW9uOiByZXN1bHQucm90YXRpb24gfVxyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHdpbmRvdy5vcGVuKGAke3VybH0/bW9kZWwzRD0ke3Jlc3VsdC5tb2RlbDNEfSZzd2VlcD10cnVlYCwgJ19ibGFuaycpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYXN5bmMgdXBkYXRlRXF1aXBzRm9yWm9uZSgpIHtcclxuICAgIHRoaXMudXBkYXRpbmcubmV4dCh0cnVlKTtcclxuICAgIGxldCBmaWx0ZXJlZEVxdWlwcyA9IFtdO1xyXG4gICAgaWYgKHRoaXMuY3VycmVudEVxdWlwbWVudHMuc3BhY2UubGVuZ3RoID4gMCkge1xyXG4gICAgICBpZiAoXHJcbiAgICAgICAgdGhpcy56b25lSURGaWx0ZXIgJiZcclxuICAgICAgICB0aGlzLmN1cnJlbnRFcXVpcG1lbnRzLnpvbmVzTWFwLmhhcyh0aGlzLnpvbmVJREZpbHRlcilcclxuICAgICAgKSB7XHJcbiAgICAgICAgZmlsdGVyZWRFcXVpcHMgPSB0aGlzLmN1cnJlbnRFcXVpcG1lbnRzLnpvbmVzTWFwLmdldCh0aGlzLnpvbmVJREZpbHRlcik7XHJcbiAgICAgICAgLy8gY29uc29sZS5sb2coXCJpIGhhdmUgZXF1aXBzIGZvciB0aGlzIHpvbmVcIiwgZmlsdGVyZWRFcXVpcHMpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGZpbHRlcmVkRXF1aXBzID0gKGF3YWl0IHRoaXMuZmlsdGVyU2VydmljZS5maWx0ZXJPYmplY3RzRm9yWm9uZShcclxuICAgICAgICAgIHRoaXMuY3VycmVudEVxdWlwbWVudHMuc3BhY2UsXHJcbiAgICAgICAgICB0aGlzLnpvbmVJREZpbHRlcixcclxuICAgICAgICAgIHRoaXMuY3VycmVudFpvbmVcclxuICAgICAgICApKSBhcyBFcXVpcG1lbnRbXTtcclxuXHJcbiAgICAgICAgdGhpcy5jdXJyZW50RXF1aXBtZW50cy56b25lc01hcC5zZXQodGhpcy56b25lSURGaWx0ZXIsIFtcclxuICAgICAgICAgIC4uLmZpbHRlcmVkRXF1aXBzLFxyXG4gICAgICAgIF0pO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICh0aGlzLmVxdWlwbWVudERvbWFpbkZpbHRlcikge1xyXG4gICAgICAgIGZpbHRlcmVkRXF1aXBzID0gdGhpcy5maWx0ZXJTZXJ2aWNlLmZpbHRlckVxdWlwbWVudHNCeURvbWFpbkxpc3QoXHJcbiAgICAgICAgICBmaWx0ZXJlZEVxdWlwcyxcclxuICAgICAgICAgIHRoaXMuZXF1aXBtZW50RG9tYWluRmlsdGVyXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmVxdWlwbWVudHNUYWdzLm5leHQoZmlsdGVyZWRFcXVpcHMpOyAvLyBhZGRpbmcgdGFncyBvbmx5IGZvciB0aGUgY3VycmVudCB6b25lXHJcbiAgICAgIHRoaXMuZXF1aXBtZW50c1VwZGF0ZWQubmV4dCh7XHJcbiAgICAgICAgc3BhY2U6IHRoaXMuY3VycmVudEVxdWlwbWVudHMuc3BhY2UsXHJcbiAgICAgICAgem9uZTogZmlsdGVyZWRFcXVpcHMsXHJcbiAgICAgIH0pOyAvLyBmb3IgbGF0ZXJhbCBtZW51XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmVxdWlwbWVudHNVcGRhdGVkLm5leHQoeyBzcGFjZTogW10sIHpvbmU6IFtdIH0pOyAvLyBmb3IgbGF0ZXJhbCBtZW51XHJcbiAgICB9XHJcbiAgICB0aGlzLnVwZGF0aW5nLm5leHQoZmFsc2UpO1xyXG4gIH1cclxuXHJcbiAgdXBkYXRlRHVlVG9EZWxldGUoZGVsZXRlZEVxdWlwbWVudDogRXF1aXBtZW50KSB7XHJcbiAgICAvLyBjb25zb2xlLmxvZyhcInVwZGF0ZSBkdWUgdG8gZGVsZXRlXCIsIGRlbGV0ZWRFcXVpcG1lbnQpO1xyXG4gICAgY29uc3QgZXF1aXAgPSB0aGlzLmN1cnJlbnRFcXVpcG1lbnRzLnNwYWNlLmZpbmQoXHJcbiAgICAgIChfZXF1aXApID0+IF9lcXVpcC5pZCA9PT0gZGVsZXRlZEVxdWlwbWVudC5pZFxyXG4gICAgKTtcclxuICAgIGlmIChlcXVpcCkge1xyXG4gICAgICBjb25zdCBpbmRleCA9IHRoaXMuY3VycmVudEVxdWlwbWVudHMuc3BhY2UuaW5kZXhPZihlcXVpcCk7XHJcbiAgICAgIHRoaXMuY3VycmVudEVxdWlwbWVudHMuc3BhY2Uuc3BsaWNlKGluZGV4LCAxKTtcclxuICAgIH1cclxuICAgIGZvciAoY29uc3Qgem9uZSBvZiB0aGlzLmN1cnJlbnRFcXVpcG1lbnRzLnpvbmVzTWFwLmtleXMoKSkge1xyXG4gICAgICBjb25zdCBlcXVpcFRvRGVsZXRlID0gdGhpcy5jdXJyZW50RXF1aXBtZW50cy56b25lc01hcFxyXG4gICAgICAgIC5nZXQoem9uZSlcclxuICAgICAgICAuZmluZCgoX2VxdWlwKSA9PiBfZXF1aXAuaWQgPT09IGRlbGV0ZWRFcXVpcG1lbnQuaWQpO1xyXG4gICAgICBpZiAoZXF1aXBUb0RlbGV0ZSkge1xyXG4gICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5jdXJyZW50RXF1aXBtZW50cy56b25lc01hcFxyXG4gICAgICAgICAgLmdldCh6b25lKVxyXG4gICAgICAgICAgLmluZGV4T2YoZXF1aXBUb0RlbGV0ZSk7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50RXF1aXBtZW50cy56b25lc01hcC5nZXQoem9uZSkuc3BsaWNlKGluZGV4LCAxKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgdGhpcy5lcXVpcG1lbnRzVXBkYXRlZC5uZXh0KHtcclxuICAgICAgc3BhY2U6IHRoaXMuY3VycmVudEVxdWlwbWVudHMuc3BhY2UsXHJcbiAgICAgIHpvbmU6IHRoaXMuY3VycmVudEVxdWlwbWVudHMuem9uZXNNYXAuZ2V0KHRoaXMuem9uZUlERmlsdGVyKSxcclxuICAgIH0pOyAvLyBmb3IgbGF0ZXJhbCBtZW51XHJcbiAgfVxyXG5cclxuICB1cGRhdGVEdWVUb0NyZWF0ZShjcmVhdGVkRXF1aXA6IEVxdWlwbWVudCkge1xyXG4gICAgdGhpcy5jdXJyZW50RXF1aXBtZW50cy5zcGFjZS51bnNoaWZ0KGNyZWF0ZWRFcXVpcCk7XHJcbiAgICB0aGlzLmN1cnJlbnRFcXVpcG1lbnRzLnpvbmVzTWFwXHJcbiAgICAgIC5nZXQodGhpcy56b25lSURGaWx0ZXIpXHJcbiAgICAgIC51bnNoaWZ0KGNyZWF0ZWRFcXVpcCk7XHJcbiAgICB0aGlzLmVxdWlwbWVudHNVcGRhdGVkLm5leHQoe1xyXG4gICAgICBzcGFjZTogdGhpcy5jdXJyZW50RXF1aXBtZW50cy5zcGFjZSxcclxuICAgICAgem9uZTogdGhpcy5jdXJyZW50RXF1aXBtZW50cy56b25lc01hcC5nZXQodGhpcy56b25lSURGaWx0ZXIpLFxyXG4gICAgfSk7IC8vIGZvciBsYXRlcmFsIG1lbnVcclxuICB9XHJcblxyXG4gIHVwZGF0ZUR1ZVRvRXF1aXBVcGRhdGVkKHVwZGF0ZWRFcXVpcDogRXF1aXBtZW50KSB7XHJcbiAgICBjb25zdCBlcXVpcCA9IHRoaXMuY3VycmVudEVxdWlwbWVudHMuc3BhY2UuZmluZChcclxuICAgICAgKF9lcXVpcCkgPT4gX2VxdWlwLmlkID09PSB1cGRhdGVkRXF1aXAuaWRcclxuICAgICk7XHJcbiAgICBpZiAoZXF1aXApIHtcclxuICAgICAgY29uc3QgaW5kZXggPSB0aGlzLmN1cnJlbnRFcXVpcG1lbnRzLnNwYWNlLmluZGV4T2YoZXF1aXApO1xyXG4gICAgICBpZiAodGhpcy5pc0FyY2hpdmVkKGVxdWlwKSkge1xyXG4gICAgICAgIC8vIHdlIHJlbW92ZSBhcmNoaXZlZCBlcXVpcG1lbnRcclxuICAgICAgICB0aGlzLmN1cnJlbnRFcXVpcG1lbnRzLnNwYWNlLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50RXF1aXBtZW50cy5zcGFjZS5zcGxpY2UoaW5kZXgsIDEsIHVwZGF0ZWRFcXVpcCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGZvciAoY29uc3Qgem9uZSBvZiB0aGlzLmN1cnJlbnRFcXVpcG1lbnRzLnpvbmVzTWFwLmtleXMoKSkge1xyXG4gICAgICBjb25zdCBlcXVpcFRvVXBkID0gdGhpcy5jdXJyZW50RXF1aXBtZW50cy56b25lc01hcFxyXG4gICAgICAgIC5nZXQoem9uZSlcclxuICAgICAgICAuZmluZCgoX2VxdWlwKSA9PiBfZXF1aXAuaWQgPT09IHVwZGF0ZWRFcXVpcC5pZCk7XHJcbiAgICAgIGlmIChlcXVpcFRvVXBkKSB7XHJcbiAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLmN1cnJlbnRFcXVpcG1lbnRzLnpvbmVzTWFwXHJcbiAgICAgICAgICAuZ2V0KHpvbmUpXHJcbiAgICAgICAgICAuaW5kZXhPZihlcXVpcFRvVXBkKTtcclxuICAgICAgICBpZiAodGhpcy5pc0FyY2hpdmVkKGVxdWlwKSkge1xyXG4gICAgICAgICAgdGhpcy5jdXJyZW50RXF1aXBtZW50cy56b25lc01hcC5nZXQoem9uZSkuc3BsaWNlKGluZGV4LCAxKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5jdXJyZW50RXF1aXBtZW50cy56b25lc01hcFxyXG4gICAgICAgICAgICAuZ2V0KHpvbmUpXHJcbiAgICAgICAgICAgIC5zcGxpY2UoaW5kZXgsIDEsIHVwZGF0ZWRFcXVpcCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICB0aGlzLmVxdWlwbWVudHNVcGRhdGVkLm5leHQoe1xyXG4gICAgICBzcGFjZTogdGhpcy5jdXJyZW50RXF1aXBtZW50cy5zcGFjZSxcclxuICAgICAgem9uZTogdGhpcy5jdXJyZW50RXF1aXBtZW50cy56b25lc01hcC5nZXQodGhpcy56b25lSURGaWx0ZXIpLFxyXG4gICAgfSk7IC8vIGZvciBsYXRlcmFsIG1lbnVcclxuICB9XHJcblxyXG4gIGluaXRTdWJzY3JpcHRpb25zKCkge1xyXG4gICAgaWYgKCF0aGlzLmlzTXVzZXVtVXNlcikge1xyXG4gICAgICB0aGlzLnpvbmVDaGFuZ2VTZXJ2aWNlLnpvbmVDaGFuZ2VcclxuICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXHJcbiAgICAgICAgLnN1YnNjcmliZSgoem9uZSkgPT4ge1xyXG4gICAgICAgICAgaWYgKCF6b25lIHx8ICF0aGlzLm5hdmlnYXRvclNlcnZpY2UuY3VycmVudFNwYWNlSUQpIHtcclxuICAgICAgICAgICAgdGhpcy5jdXJyZW50U3BhY2VJRCA9IHRoaXMubmF2aWdhdG9yU2VydmljZS5jdXJyZW50U3BhY2VJRDtcclxuICAgICAgICAgICAgdGhpcy5lcXVpcG1lbnRzVGFncy5uZXh0KG51bGwpO1xyXG4gICAgICAgICAgICB0aGlzLmVxdWlwbWVudHNVcGRhdGVkLm5leHQoeyBzcGFjZTogW10sIHpvbmU6IG51bGwgfSk7XHJcbiAgICAgICAgICAgIHRoaXMuem9uZUlERmlsdGVyID0gbnVsbDtcclxuICAgICAgICAgICAgdGhpcy5jdXJyZW50RXF1aXBtZW50cyA9IHtcclxuICAgICAgICAgICAgICBzcGFjZTogW10sXHJcbiAgICAgICAgICAgICAgem9uZXNNYXA6IG5ldyBNYXAoKSxcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKHpvbmUuaWQgIT09IHRoaXMuem9uZUlERmlsdGVyKSB7XHJcbiAgICAgICAgICAgIHRoaXMuem9uZUlERmlsdGVyID0gem9uZS5pZDtcclxuICAgICAgICAgICAgdGhpcy5jdXJyZW50Wm9uZSA9IHpvbmU7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmN1cnJlbnRTcGFjZUlEID09PSB0aGlzLm5hdmlnYXRvclNlcnZpY2UuY3VycmVudFNwYWNlSUQpIHtcclxuICAgICAgICAgICAgICAvLyBzYW1lIHNwYWNlLCAgb25seSB6b25lIHVwZGF0ZVxyXG4gICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKFxyXG4gICAgICAgICAgICAgIC8vICAgICBcImdvaW5nIHRvIHVwZGF0ZSBlcXVpcHMgZm9yIHpvbmUgKHNhbWUgc3BhY2UpXCIsXHJcbiAgICAgICAgICAgICAgLy8gICAgIHpvbmUsXHJcbiAgICAgICAgICAgICAgLy8gKTtcclxuXHJcbiAgICAgICAgICAgICAgdGhpcy51cGRhdGVFcXVpcHNGb3Jab25lKCk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5jdXJyZW50U3BhY2VJRCA9IHRoaXMubmF2aWdhdG9yU2VydmljZS5jdXJyZW50U3BhY2VJRDtcclxuICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhcclxuICAgICAgICAgICAgICAvLyAgICAgXCJnb2luZyB0byBpbml0IGVxdWlwcyBmb3Igem9uZSBmb3IgbmV3IHNwYWNlXCIsXHJcbiAgICAgICAgICAgICAgLy8gICAgIHRoaXMuY3VycmVudFNwYWNlSUQsXHJcbiAgICAgICAgICAgICAgLy8gKTtcclxuICAgICAgICAgICAgICB0aGlzLmluaXRFcXVpcHMoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgdGhpcy5kZWxldGVPYnNlcnZhYmxlXHJcbiAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxyXG4gICAgICAgIC5zdWJzY3JpYmUoKGVxdWlwbWVudCkgPT4ge1xyXG4gICAgICAgICAgaWYgKHRoaXMuY3VycmVudFNwYWNlSUQpIHtcclxuICAgICAgICAgICAgdGhpcy51cGRhdGVEdWVUb0RlbGV0ZShlcXVpcG1lbnQpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgdGhpcy5jcmVhdGVPYnNlcnZhYmxlXHJcbiAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxyXG4gICAgICAgIC5zdWJzY3JpYmUoKGVxdWlwbWVudCkgPT4ge1xyXG4gICAgICAgICAgaWYgKHRoaXMuY3VycmVudFNwYWNlSUQpIHtcclxuICAgICAgICAgICAgdGhpcy51cGRhdGVEdWVUb0NyZWF0ZShlcXVpcG1lbnQpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgdGhpcy51cGRhdGVPYnNlcnZhYmxlXHJcbiAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxyXG4gICAgICAgIC5zdWJzY3JpYmUoKGVxdWlwbWVudCkgPT4ge1xyXG4gICAgICAgICAgaWYgKHRoaXMuY3VycmVudFNwYWNlSUQpIHtcclxuICAgICAgICAgICAgdGhpcy51cGRhdGVEdWVUb0VxdWlwVXBkYXRlZChlcXVpcG1lbnQpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgdW5zdWJzY3JpYmUoKSB7XHJcbiAgICB0aGlzLmRlc3Ryb3kkLm5leHQodHJ1ZSk7XHJcbiAgICB0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCk7XHJcbiAgfVxyXG59XHJcbiJdfQ==
|
|
688
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXF1aXBtZW50LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtc21hcnRlcnBsYW4tY29yZS9zcmMvbGliL3NlcnZpY2VzL21vZGVscy9lcXVpcG1lbnQuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVuRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDM0QsT0FBTyxFQUNMLHVCQUF1QixFQUN2Qix3QkFBd0IsR0FFekIsTUFBTSx1QkFBdUIsQ0FBQztBQUUvQixPQUFPLEVBTUwsUUFBUSxFQUVSLFdBQVcsRUFDWCxTQUFTLEVBR1QsT0FBTyxFQUNQLFVBQVUsRUFDVixRQUFRLEdBQ1QsTUFBTSxxQkFBcUIsQ0FBQztBQUc3QixPQUFPLEVBQ0wsWUFBWSxFQUNaLGFBQWEsRUFDYiw2QkFBNkIsRUFDN0IsY0FBYyxHQUNmLE1BQU0sZUFBZSxDQUFDO0FBR3ZCLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDOzs7Ozs7Ozs7Ozs7QUFVMUQsTUFBTSxPQUFPLGdCQUFpQixTQUFRLGlCQUFpQjtJQStEM0M7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQXJFRixNQUFNLEdBQUc7UUFDZixTQUFTLEVBQUUsNEJBQTRCO1FBQ3ZDLEtBQUssRUFBRSx3QkFBd0I7UUFDL0IsU0FBUyxFQUFFLDRCQUE0QjtRQUN2QyxXQUFXLEVBQUUsOEJBQThCO1FBQzNDLEtBQUssRUFBRSx3QkFBd0I7UUFDL0IsV0FBVyxFQUFFLDhCQUE4QjtLQUM1QyxDQUFDO0lBRUYsaUJBQWlCLEdBR1osSUFBSSxPQUFPLEVBQUUsQ0FBQztJQUVuQixpQkFBaUIsR0FHYjtRQUNBLEtBQUssRUFBRSxFQUFFO1FB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QixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQzthQUM5QixTQUFTLENBQUMsQ0FBQyxTQUFTLEVBQUUsRUFBRTtZQUN2QixJQUFJLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztnQkFDeEIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQ3BDLENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQztRQUVMLElBQUksQ0FBQyxnQkFBZ0I7YUFDbEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7YUFDOUIsU0FBUyxDQUFDLENBQUMsU0FBUyxFQUFFLEVBQUU7WUFDdkIsSUFBSSxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7Z0JBQ3hCLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUMxQyxDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3pCLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDM0IsQ0FBQzt3R0ExekJVLGdCQUFnQixrQkEwRGpCLG1CQUFtQixhQUNuQixtQ0FBbUM7NEdBM0RsQyxnQkFBZ0IsY0FGZixNQUFNOzs0RkFFUCxnQkFBZ0I7a0JBSDVCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25COzswQkEyREksTUFBTTsyQkFBQyxtQkFBbUI7OzBCQUMxQixNQUFNOzJCQUFDLG1DQUFtQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIEluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBOZ2JNb2RhbCB9IGZyb20gJ0BuZy1ib290c3RyYXAvbmctYm9vdHN0cmFwJztcclxuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBTdWJqZWN0LCB0YWtlVW50aWwgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHtcclxuICBvcGVuTW9kYWxGb3JWaXNpdFN3aXRjaCxcclxuICByZW1vdmVOdWxsS2V5c0Zyb21PYmplY3QsXHJcbiAgd2FpdFVudGlsLFxyXG59IGZyb20gJy4uLy4uL2hlbHBlcnMuc2VydmljZSc7XHJcbmltcG9ydCB7IE1hdHRlcnRhZ0RhdGEgfSBmcm9tICcuLi8uLi9tYXR0ZXJ0YWdEYXRhJztcclxuaW1wb3J0IHtcclxuICBOb3RlLFxyXG4gIFpvbmUsXHJcbiAgRXF1aXBtZW50LFxyXG4gIEVxdWlwbWVudERvY3VtZW50LFxyXG4gIFRpY2tldCxcclxuICBUeXBlTm90ZSxcclxuICBNaXNzaW9uLFxyXG4gIEV2ZW50U3RhdHVzLFxyXG4gIEV2ZW50VHlwZSxcclxuICBPcGVyYXRpb24sXHJcbiAgUE9JLFxyXG4gIFBvaVR5cGUsXHJcbiAgUm9sZVN0YXR1cyxcclxuICBTcE1vZHVsZSxcclxufSBmcm9tICcuLi8uLi90eXBlcy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRmlsdGVyU2VydmljZSB9IGZyb20gJy4uL2ZpbHRlci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgTmF2aWdhdG9yU2VydmljZSB9IGZyb20gJy4uL25hdmlnYXRvci5zZXJ2aWNlJztcclxuaW1wb3J0IHtcclxuICBkZWxldGVGcm9tUzMsXHJcbiAgZ2V0U2lnbmVkRmlsZSxcclxuICBnZXRTaWduZWRJbWFnZVVybEZvckVxdWlwbWVudCxcclxuICB1cGxvYWRGaWxlVG9TMyxcclxufSBmcm9tICcuLi9zMy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQmFzZVVzZXJTZXJ2aWNlIH0gZnJvbSAnLi4vdXNlci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgVmlld2VyU2VydmljZSB9IGZyb20gJy4uL3ZpZXdlci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQmFzZU9iamVjdFNlcnZpY2UgfSBmcm9tICcuL2Jhc2Utb2JqZWN0LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBOYXZpZ2F0aW9uU2VydmljZSB9IGZyb20gJy4vbmF2aWdhdGlvbi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgT3BlcmF0aW9uU2VydmljZSB9IGZyb20gJy4vb3BlcmF0aW9uLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBQb2lTZXJ2aWNlIH0gZnJvbSAnLi9wb2kuc2VydmljZSc7XHJcbmltcG9ydCB7IFRpY2tldHNTZXJ2aWNlIH0gZnJvbSAnLi90aWNrZXQuc2VydmljZSc7XHJcbmltcG9ydCB7IFpvbmVDaGFuZ2VTZXJ2aWNlIH0gZnJvbSBcIi4uL3pvbmVDaGFuZ2Uuc2VydmljZVwiO1xyXG5cclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46ICdyb290JyxcclxufSlcclxuZXhwb3J0IGNsYXNzIEVxdWlwbWVudFNlcnZpY2UgZXh0ZW5kcyBCYXNlT2JqZWN0U2VydmljZSB7XHJcbiAgcHJpdmF0ZSBwcmVmaXggPSB7XHJcbiAgICB0ZWNobmljYWw6ICdlcXVpcG1lbnRzL25vdGUvdGVjaG5pY2FsLycsXHJcbiAgICBpbWFnZTogJ2VxdWlwbWVudHMvbm90ZS9pbWFnZS8nLFxyXG4gICAgZmluYW5jaWFsOiAnZXF1aXBtZW50cy9ub3RlL2ZpbmFuY2lhbC8nLFxyXG4gICAgaW5mb3JtYXRpb246ICdlcXVpcG1lbnRzL25vdGUvaW5mb3JtYXRpb24vJyxcclxuICAgIG90aGVyOiAnZXF1aXBtZW50cy9ub3RlL290aGVyLycsXHJcbiAgICBjb250cmFjdHVhbDogJ2VxdWlwbWVudHMvbm90ZS9jb250cmFjdHVhbC8nLFxyXG4gIH07XHJcblxyXG4gIGVxdWlwbWVudHNVcGRhdGVkOiBTdWJqZWN0PHtcclxuICAgIHNwYWNlOiBFcXVpcG1lbnRbXTtcclxuICAgIHpvbmU6IEVxdWlwbWVudFtdO1xyXG4gIH0+ID0gbmV3IFN1YmplY3QoKTtcclxuXHJcbiAgY3VycmVudEVxdWlwbWVudHM6IHtcclxuICAgIHNwYWNlOiBFcXVpcG1lbnRbXTtcclxuICAgIHpvbmVzTWFwOiBNYXA8c3RyaW5nLCBFcXVpcG1lbnRbXT47XHJcbiAgfSA9IHtcclxuICAgICAgc3BhY2U6IFtdLFxyXG4gICAgICB6b25lc01hcDogbmV3IE1hcCgpLFxyXG4gICAgfTtcclxuXHJcbiAgZXF1aXBtZW50c1RhZ3M6IEJlaGF2aW9yU3ViamVjdDxFcXVpcG1lbnRbXT4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEVxdWlwbWVudFtdPihudWxsKTtcclxuXHJcbiAgem9uZUlERmlsdGVyOiBzdHJpbmc7XHJcblxyXG4gIGN1cnJlbnRab25lOiBab25lO1xyXG5cclxuICBjdXJyZW50U3BhY2VJRDogc3RyaW5nO1xyXG5cclxuICBmbG9vcnNQZXJTcGFjZTogWm9uZVtdID0gbnVsbDtcclxuXHJcbiAgLyoqIE51bGwgbWVhbnMgd2UgZG8gbm90IGFwcGx5IGEgZmlsdGVyLCBlbXB0eSBhcnJheSAoW10pLCBtZWFucyB3ZSB0aGF0IHdlIGhpZGUgYWxsIGVxdWlwbWVudCAqL1xyXG4gIGVxdWlwbWVudERvbWFpbkZpbHRlcjogc3RyaW5nW10gPSBudWxsO1xyXG5cclxuICB1cGRhdGluZzogU3ViamVjdDxib29sZWFuPiA9IG5ldyBTdWJqZWN0KCk7XHJcblxyXG4gIGN1cnJlbnRseVVwZGF0aW5nID0gZmFsc2U7XHJcblxyXG4gIGN1cnJlbnRTd2VlcDogc3RyaW5nO1xyXG5cclxuICBkZWxldGVPYnNlcnZhYmxlOiBTdWJqZWN0PEVxdWlwbWVudD4gPSBuZXcgU3ViamVjdCgpO1xyXG5cclxuICBjcmVhdGVPYnNlcnZhYmxlOiBTdWJqZWN0PEVxdWlwbWVudD4gPSBuZXcgU3ViamVjdCgpO1xyXG5cclxuICB1cGRhdGVPYnNlcnZhYmxlOiBTdWJqZWN0PEVxdWlwbWVudD4gPSBuZXcgU3ViamVjdCgpO1xyXG5cclxuICBzZWxlY3RlZEZsb29yOiBab25lID0gbnVsbDtcclxuXHJcbiAgQVBJOiBhbnk7IC8vQVdTXHJcbiAgYXdzS2luZXNpc0FuYWx5dGljczogYW55OyAvL0FXU1xyXG5cclxuICBpc011c2V1bVVzZXIgPSBmYWxzZTtcclxuXHJcbiAgcHJpdmF0ZSBkZXN0cm95JCA9IG5ldyBTdWJqZWN0KCk7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgQEluamVjdCgnY3VycmVudEFQSVNlcnZpY2UnKSBhcGlJbmplY3RlZDogYW55LFxyXG4gICAgQEluamVjdCgnY3VycmVudEF3c0tpbmVzaXNBbmFseXRpY3NTZXJ2aWNlJylcclxuICAgIGF3c0tpbmVzaXNBbmFseXRpY3NJbmplY3RlZDogYW55LFxyXG4gICAgcG9pU2VydmljZTogUG9pU2VydmljZSxcclxuICAgIG5hdmlnYXRpb25TZXJ2aWNlOiBOYXZpZ2F0aW9uU2VydmljZSxcclxuICAgIHByaXZhdGUgb3BlcmF0aW9uU2VydmljZTogT3BlcmF0aW9uU2VydmljZSxcclxuICAgIHByaXZhdGUgdGlja2V0c1NlcnZpY2U6IFRpY2tldHNTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBuYXZpZ2F0b3JTZXJ2aWNlOiBOYXZpZ2F0b3JTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBmaWx0ZXJTZXJ2aWNlOiBGaWx0ZXJTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSB1c2VyU2VydmljZTogQmFzZVVzZXJTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSB2aWV3ZXJTZXJ2aWNlOiBWaWV3ZXJTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBtb2RhbFNlcnZpY2U6IE5nYk1vZGFsLFxyXG4gICAgcHJpdmF0ZSB6b25lQ2hhbmdlU2VydmljZTogWm9uZUNoYW5nZVNlcnZpY2VcclxuICApIHtcclxuICAgIHN1cGVyKHBvaVNlcnZpY2UsIG5hdmlnYXRpb25TZXJ2aWNlKTtcclxuXHJcbiAgICB0aGlzLkFQSSA9IGFwaUluamVjdGVkO1xyXG4gICAgdGhpcy5hd3NLaW5lc2lzQW5hbHl0aWNzID0gYXdzS2luZXNpc0FuYWx5dGljc0luamVjdGVkO1xyXG5cclxuICAgIHRoaXMuaXNNdXNldW1Vc2VyID0gdGhpcy51c2VyU2VydmljZS5oYXNPbmx5TXVzZXVtUm9sZSgpO1xyXG4gICAgdGhpcy5pbml0U3Vic2NyaXB0aW9ucygpO1xyXG4gICAgdGhpcy51c2VyU2VydmljZS5pc0NoYW5nZWQuc3Vic2NyaWJlKChpc0Nvbm5lY3RlZCkgPT4ge1xyXG4gICAgICBpZiAoaXNDb25uZWN0ZWQpIHtcclxuICAgICAgICB0aGlzLmlzTXVzZXVtVXNlciA9IHRoaXMudXNlclNlcnZpY2UuaGFzT25seU11c2V1bVJvbGUoKTtcclxuICAgICAgICB0aGlzLmluaXRTdWJzY3JpcHRpb25zKCk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy51bnN1YnNjcmliZSgpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLnpvbmVDaGFuZ2VTZXJ2aWNlLmZsb29ySGFzQ2hhbmdlZC5zdWJzY3JpYmUoKGZsb29yKSA9PiB7XHJcbiAgICAgIGlmIChmbG9vcikge1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRGbG9vciA9IGZsb29yO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGFzeW5jIHJlYWRFcXVpcG1lbnQoaWQ6IHN0cmluZyk6IFByb21pc2U8RXF1aXBtZW50PiB7XHJcbiAgICByZXR1cm4gdGhpcy5BUEkuX19wcm90b19fLkdldEVxdWlwbWVudChpZCkudGhlbihhc3luYyAocmVjZWl2ZWRFcXVpcCkgPT4ge1xyXG4gICAgICBsZXQgZXF1aXA6IEVxdWlwbWVudDtcclxuICAgICAgaWYgKHJlY2VpdmVkRXF1aXApIHtcclxuICAgICAgICBlcXVpcCA9IHJlY2VpdmVkRXF1aXA7XHJcbiAgICAgICAgZXF1aXAgPSBhd2FpdCB0aGlzLmdldFNpZ25lZFVybHNGb3JFcXVpcG1lbnQocmVjZWl2ZWRFcXVpcCk7XHJcbiAgICAgICAgaWYgKGVxdWlwLmRvbWFpbikge1xyXG4gICAgICAgICAgaWYgKGVxdWlwLmRvbWFpbi5wYXJlbnRJRCkge1xyXG4gICAgICAgICAgICBlcXVpcC5jaGlsZERvbWFpbiA9IGVxdWlwLmRvbWFpbjtcclxuICAgICAgICAgICAgZXF1aXAucGFyZW50RG9tYWluID0gZXF1aXAuZG9tYWluLnBhcmVudDtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGVxdWlwLnBhcmVudERvbWFpbiA9IGVxdWlwLmRvbWFpbjtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGVxdWlwLnN1YmVxdWlwbWVudHNJRHMpIHtcclxuICAgICAgICAgIGNvbnN0IHN1YkVxdWlwcyA9IFtdO1xyXG4gICAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoXHJcbiAgICAgICAgICAgIGVxdWlwLnN1YmVxdWlwbWVudHNJRHMubWFwKGFzeW5jIChzdWJJZCkgPT4ge1xyXG4gICAgICAgICAgICAgIGNvbnN0IHN1YkVxdWlwID0gYXdhaXQgdGhpcy5BUEkuR2V0RXF1aXBtZW50KHN1YklkKTtcclxuICAgICAgICAgICAgICBzdWJFcXVpcHMucHVzaChzdWJFcXVpcCk7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgZXF1aXAuc3ViRXF1aXBtZW50cyA9IHN1YkVxdWlwcztcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIGVxdWlwO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBhc3luYyBjcmVhdGVFcXVpcG1lbnQoXHJcbiAgICBlcXVpcDogRXF1aXBtZW50LFxyXG4gICAgaW1hZ2VGaWxlOiBGaWxlLFxyXG4gICAgZG9jdW1lbnRGaWxlOiBGaWxlXHJcbiAgKTogUHJvbWlzZTxFcXVpcG1lbnQgfCB2b2lkPiB7XHJcbiAgICByZW1vdmVOdWxsS2V5c0Zyb21PYmplY3QoZXF1aXApO1xyXG4gICAgaWYgKCEhdGhpcy5hd3NLaW5lc2lzQW5hbHl0aWNzICYmICEhdGhpcy5hd3NLaW5lc2lzQW5hbHl0aWNzLnJlY29yZCAmJiB0aGlzLmF3c0tpbmVzaXNBbmFseXRpY3MucmVjb3JkKCkpIHtcclxuICAgICAgdGhpcy5hd3NLaW5lc2lzQW5hbHl0aWNzLmdldEluc3RhbmNlKCkucmVjb3JkKFxyXG4gICAgICAgIC8vIEB0cy1pZ25vcmVcclxuICAgICAgICB7XHJcbiAgICAgICAgICBkYXRhOiB7XHJcbiAgICAgICAgICAgIGV2ZW50VHlwZTogJ09iamVjdCBDcmVhdGlvbicsXHJcbiAgICAgICAgICAgIG9iamVjdFR5cGU6ICdlcXVpcG1lbnQnLFxyXG4gICAgICAgICAgICBwb2k6IGVxdWlwLFxyXG4gICAgICAgICAgICB1c2VyOiB0aGlzLnVzZXJTZXJ2aWNlLmN1LFxyXG4gICAgICAgICAgICBsb2NhdGlvbklkOiB0aGlzLmN1cnJlbnRTcGFjZUlELFxyXG4gICAgICAgICAgICB0aW1lc3RhbXA6IG5ldyBEYXRlKCksXHJcbiAgICAgICAgICAgIHpvbmVJZDogdGhpcy5jdXJyZW50Wm9uZS5pZCxcclxuICAgICAgICAgICAgZmxvb3JJZDogdGhpcy5zZWxlY3RlZEZsb29yPy5pZCxcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBzdHJlYW1OYW1lOiAnc21hcnRlcnBsYW5LaW5lc2lzLWFuYWx5dGljcycsXHJcbiAgICAgICAgICAvLyBwYXJ0aXRpb25LZXk6IFwiXCIsXHJcbiAgICAgICAgfSxcclxuICAgICAgICAnQVdTS2luZXNpcydcclxuICAgICAgKTtcclxuICAgIH1cclxuICAgIHJldHVybiB0aGlzLkFQSS5DcmVhdGVFcXVpcG1lbnQoZXF1aXApLnRoZW4oYXN5bmMgKHJlY2VpdmVkRXF1aXBtZW50KSA9PiB7XHJcbiAgICAgIGxldCBlcXVpcG1lbnQgPSByZWNlaXZlZEVxdWlwbWVudCBhcyBFcXVpcG1lbnQ7XHJcbiAgICAgIGlmIChlcXVpcG1lbnQpIHtcclxuICAgICAgICBjb25zb2xlLmxvZygnZXF1aXBtZW50IGNyZWF0ZWQ6JywgZXF1aXBtZW50KTtcclxuICAgICAgICBpZiAoZG9jdW1lbnRGaWxlKSB7XHJcbiAgICAgICAgICBhd2FpdCB0aGlzLnVwbG9hZERvYyhlcXVpcG1lbnQsIGRvY3VtZW50RmlsZSwgVHlwZU5vdGUuVEVDSE5JQ0FMKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGltYWdlRmlsZSkge1xyXG4gICAgICAgICAgYXdhaXQgdGhpcy51cGxvYWRJbWFnZShlcXVpcG1lbnQsIGltYWdlRmlsZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBlcXVpcG1lbnQ7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGFzeW5jIGdldFNpZ25lZFVybHNGb3JFcXVpcG1lbnQoZXF1aXA6IEVxdWlwbWVudCk6IFByb21pc2U8RXF1aXBtZW50PiB7XHJcbiAgICBjb25zdCBlcXVpcG1lbnQgPSB7IC4uLmVxdWlwIH07XHJcbiAgICBpZiAoZXF1aXBtZW50Lm5vdGVzLml0ZW1zLmxlbmd0aCA+IDApIHtcclxuICAgICAgY29uc3QgZG9jcyA9IFtdO1xyXG4gICAgICBhd2FpdCBQcm9taXNlLmFsbChcclxuICAgICAgICBlcXVpcG1lbnQubm90ZXMuaXRlbXMubWFwKGFzeW5jIChub3RlKSA9PiB7XHJcbiAgICAgICAgICBlcXVpcG1lbnQuZG9jdW1lbnRhdGlvbkltYWdlVXJsU2lnbmVkID1cclxuICAgICAgICAgICAgYXdhaXQgZ2V0U2lnbmVkSW1hZ2VVcmxGb3JFcXVpcG1lbnQoZXF1aXBtZW50KTtcclxuICAgICAgICAgIGlmIChub3RlLmF0dGFjaG1lbnQpIHtcclxuICAgICAgICAgICAgY29uc3QgeyBsZW5ndGggfSA9IG5vdGUuYXR0YWNobWVudC5zcGxpdCgnLycpO1xyXG4gICAgICAgICAgICBjb25zdCBmaWxlbmFtZSA9IG5vdGUuYXR0YWNobWVudC5zcGxpdCgnLycpW2xlbmd0aCAtIDFdO1xyXG4gICAgICAgICAgICBjb25zdCBhdHRhY2htZW50ID0gYXdhaXQgZ2V0U2lnbmVkRmlsZShub3RlLmF0dGFjaG1lbnQpO1xyXG4gICAgICAgICAgICBpZiAoYXR0YWNobWVudCkge1xyXG4gICAgICAgICAgICAgIGRvY3MucHVzaCh7XHJcbiAgICAgICAgICAgICAgICBmaWxlbmFtZSxcclxuICAgICAgICAgICAgICAgIHVybDogbm90ZS5hdHRhY2htZW50LFxyXG4gICAgICAgICAgICAgICAgdXJsU2lnbmVkOiBhdHRhY2htZW50LFxyXG4gICAgICAgICAgICAgICAgbm90ZUlEOiBub3RlLmlkLFxyXG4gICAgICAgICAgICAgIH0gYXMgRXF1aXBtZW50RG9jdW1lbnQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICAgICAgZXF1aXBtZW50LmRvY3VtZW50cyA9IGRvY3M7XHJcbiAgICAgIHJldHVybiBlcXVpcG1lbnQ7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZXF1aXBtZW50O1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgZ2V0RXF1aXBtZW50c0ZvclRpY2tldCh0aWNrZXQ6IFRpY2tldCk6IFByb21pc2U8RXF1aXBtZW50W10+IHtcclxuICAgIGNvbnN0IG9wZXJhdGlvbnMgPSB0aWNrZXQub3BlcmF0aW9ucy5pdGVtcztcclxuICAgIGlmIChvcGVyYXRpb25zLmxlbmd0aCA+IDApIHtcclxuICAgICAgb3BlcmF0aW9ucy5zb3J0KFxyXG4gICAgICAgIChhLCBiKSA9PlxyXG4gICAgICAgICAgLy8gQHRzLWlnbm9yZVxyXG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHByZXR0aWVyL3ByZXR0aWVyXHJcbiAgICAgICAgICBuZXcgRGF0ZShiLmNyZWF0ZWRBdCkgLSBuZXcgRGF0ZShhLmNyZWF0ZWRBdClcclxuICAgICAgKTtcclxuICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoXHJcbiAgICAgICAgb3BlcmF0aW9ucy5tYXAoYXN5bmMgKG9wZXJhdGlvbikgPT4ge1xyXG4gICAgICAgICAgb3BlcmF0aW9uLmVxdWlwbWVudCA9IGF3YWl0IHRoaXMucmVhZEVxdWlwbWVudChvcGVyYXRpb24uZXF1aXBtZW50SUQpO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgICAvLyB0byBrZWVwIHRoZSBzb3J0aW5nIGJ5IGNyZWF0ZWRBdFxyXG4gICAgcmV0dXJuIG9wZXJhdGlvbnMubWFwKChvKSA9PiBvLmVxdWlwbWVudCk7XHJcbiAgfVxyXG5cclxuICBhc3luYyBnZXRFcXVpcG1lbnRzRm9yU3BhY2Uoc3BhY2VJRDogc3RyaW5nKTogUHJvbWlzZTxFcXVpcG1lbnRbXT4ge1xyXG4gICAgLy8gc3BsaXQgYnkgMTAwXHJcbiAgICBjb25zdCBsaW1pdCA9IDEwMDtcclxuICAgIGxldCBlcXVpcHNUb2tlbiA9IHsgZXF1aXBzOiBbXSwgbmV4dFRva2VuOiBudWxsIH07XHJcbiAgICBkbyB7XHJcbiAgICAgIGVxdWlwc1Rva2VuID0gYXdhaXQgdGhpcy5tZXJnZUVxdWlwbWVudHNGb3JTcGFjZVdpdGhOZXh0VG9rZW5XaXRoTGltaXQoXHJcbiAgICAgICAgc3BhY2VJRCxcclxuICAgICAgICBsaW1pdCxcclxuICAgICAgICBlcXVpcHNUb2tlblxyXG4gICAgICApO1xyXG4gICAgfSB3aGlsZSAoZXF1aXBzVG9rZW4ubmV4dFRva2VuKTtcclxuICAgIHJldHVybiBlcXVpcHNUb2tlbi5lcXVpcHM7XHJcbiAgfVxyXG5cclxuICBhc3luYyBtZXJnZUVxdWlwbWVudHNGb3JTcGFjZVdpdGhOZXh0VG9rZW5XaXRoTGltaXQoXHJcbiAgICBzcGFjZUlEOiBzdHJpbmcsXHJcbiAgICBsaW1pdDogbnVtYmVyLFxyXG4gICAgZXF1aXBzVG9rZW46IHsgZXF1aXBzOiBFcXVpcG1lbnRbXTsgbmV4dFRva2VuOiBzdHJpbmcgfCBudWxsIH1cclxuICApOiBQcm9taXNlPHsgZXF1aXBzOiBFcXVpcG1lbnRbXTsgbmV4dFRva2VuOiBzdHJpbmcgfCBudWxsIH0+IHtcclxuICAgIHJldHVybiB0aGlzLkFQSS5fX3Byb3RvX19cclxuICAgICAgLkVxdWlwbWVudHNCeVNwYWNlKFxyXG4gICAgICAgIHNwYWNlSUQsXHJcbiAgICAgICAgbnVsbCxcclxuICAgICAgICAnREVTQycsXHJcbiAgICAgICAgbnVsbCxcclxuICAgICAgICBsaW1pdCxcclxuICAgICAgICBlcXVpcHNUb2tlbi5uZXh0VG9rZW4gLy8gbmV4dFRva2VuXHJcbiAgICAgIClcclxuICAgICAgLnRoZW4oKHJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgY29uc3QgZXF1aXBzTGltaXQgPSByZXNwb25zZS5pdGVtcztcclxuICAgICAgICBjb25zdCBlcXVpcHNPYmplY3QgPSB7XHJcbiAgICAgICAgICBlcXVpcHM6IFsuLi5lcXVpcHNUb2tlbi5lcXVpcHMsIC4uLmVxdWlwc0xpbWl0XSxcclxuICAgICAgICAgIG5leHRUb2tlbjogcmVzcG9uc2UubmV4dFRva2VuLFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgcmV0dXJuIGVxdWlwc09iamVjdDtcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICBhc3luYyB1cGxvYWRJbWFnZUZvckFsbEVxdWlwbWVudHMoXHJcbiAgICBlcXVpcG1lbnRzOiBFcXVpcG1lbnRbXSxcclxuICAgIGltYWdlRmlsZTogRmlsZVxyXG4gICk6IFByb21pc2U8RXF1aXBtZW50W10+IHtcclxuICAgIGlmIChlcXVpcG1lbnRzLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICByZXR1cm4gW107XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHVwbG9hZEZpbGVUb1MzKHRoaXMucHJlZml4LmltYWdlLCBpbWFnZUZpbGUsICdCQVRDSCcpLnRoZW4oXHJcbiAgICAgIGFzeW5jICh1cmwpID0+IHtcclxuICAgICAgICBpZiAodXJsKSB7XHJcbiAgICAgICAgICBjb25zdCBlcXVpcHMgPSBbXTtcclxuICAgICAgICAgIGZvciAoY29uc3QgZXF1aXAgb2YgZXF1aXBtZW50cykge1xyXG4gICAgICAgICAgICBjb25zdCBjdXJyZW50TWlzc2lvbiA9IHRoaXMudXNlclNlcnZpY2UuY3VycmVudE1pc3Npb24oXHJcbiAgICAgICAgICAgICAgZXF1aXAuc3BhY2VJRFxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLkFQSS5fX3Byb3RvX18uQ3JlYXRlTm90ZSh7XHJcbiAgICAgICAgICAgICAgYXR0YWNobWVudDogdXJsLFxyXG4gICAgICAgICAgICAgIHR5cGU6IFR5cGVOb3RlLklNQUdFLFxyXG4gICAgICAgICAgICAgIGVxdWlwbWVudElEOiBlcXVpcC5pZCxcclxuICAgICAgICAgICAgICBvd25lck1pc3Npb25JRDogY3VycmVudE1pc3Npb24gPyBjdXJyZW50TWlzc2lvbi5pZCA6IG51bGwsXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBjb25zdCB1cGRhdGUgPSBhd2FpdCB0aGlzLkFQSS5fX3Byb3RvX18uVXBkYXRlRXF1aXBtZW50KHtcclxuICAgICAgICAgICAgICBpZDogZXF1aXAuaWQsXHJcbiAgICAgICAgICAgICAgcGhvdG86IHVybCxcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGVxdWlwcy5wdXNoKHVwZGF0ZSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICByZXR1cm4gZXF1aXBzO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gW107XHJcbiAgICAgIH1cclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBhc3luYyB1cGxvYWRJbWFnZShlcXVpcG1lbnQ6IEVxdWlwbWVudCwgaW1hZ2VGaWxlOiBGaWxlKTogUHJvbWlzZTxOb3RlPiB7XHJcbiAgICByZXR1cm4gdXBsb2FkRmlsZVRvUzModGhpcy5wcmVmaXguaW1hZ2UsIGltYWdlRmlsZSwgZXF1aXBtZW50LmlkKS50aGVuKFxyXG4gICAgICBhc3luYyAodXJsKSA9PiB7XHJcbiAgICAgICAgaWYgKHVybCkge1xyXG4gICAgICAgICAgY29uc3QgY3VycmVudE1pc3Npb24gPSB0aGlzLnVzZXJTZXJ2aWNlLmN1cnJlbnRNaXNzaW9uKFxyXG4gICAgICAgICAgICBlcXVpcG1lbnQuc3BhY2VJRFxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIGNvbnN0IG5vdGUgPSBhd2FpdCB0aGlzLkFQSS5fX3Byb3RvX18uQ3JlYXRlTm90ZSh7XHJcbiAgICAgICAgICAgIGF0dGFjaG1lbnQ6IHVybCxcclxuICAgICAgICAgICAgdHlwZTogVHlwZU5vdGUuSU1BR0UsXHJcbiAgICAgICAgICAgIGVxdWlwbWVudElEOiBlcXVpcG1lbnQuaWQsXHJcbiAgICAgICAgICAgIG93bmVyTWlzc2lvbklEOiBjdXJyZW50TWlzc2lvbiA/IGN1cnJlbnRNaXNzaW9uLmlkIDogbnVsbCxcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgYXdhaXQgdGhpcy5BUEkuX19wcm90b19fLlVwZGF0ZUVxdWlwbWVudCh7XHJcbiAgICAgICAgICAgIGlkOiBlcXVpcG1lbnQuaWQsXHJcbiAgICAgICAgICAgIHBob3RvOiB1cmwsXHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICAgIHJldHVybiBub3RlO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgfVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIGFzeW5jIHVwZGF0ZUVxdWlwbWVudChcclxuICAgIGVxdWlwOiBhbnksXHJcbiAgICBmaWxlOiBGaWxlID0gbnVsbCxcclxuICAgIG5vdGVUeXBlOiBUeXBlTm90ZSA9IG51bGxcclxuICApOiBQcm9taXNlPEVxdWlwbWVudD4ge1xyXG4gICAgcmV0dXJuIHRoaXMuQVBJLl9fcHJvdG9fX1xyXG4gICAgICAuVXBkYXRlRXF1aXBtZW50KGVxdWlwKVxyXG4gICAgICAudGhlbihhc3luYyAocmVjZWl2ZWRFcXVpcG1lbnQpID0+IHtcclxuICAgICAgICBsZXQgZXF1aXBtZW50ID0gcmVjZWl2ZWRFcXVpcG1lbnQgYXMgRXF1aXBtZW50O1xyXG4gICAgICAgIGlmIChlcXVpcG1lbnQpIHtcclxuICAgICAgICAgIGNvbnNvbGUubG9nKCdlcXVpcG1lbnQgdXBkYXRlZDonLCBlcXVpcG1lbnQpO1xyXG4gICAgICAgICAgaWYgKG5vdGVUeXBlKSB7XHJcbiAgICAgICAgICAgIHN3aXRjaCAobm90ZVR5cGUpIHtcclxuICAgICAgICAgICAgICBjYXNlIFR5cGVOb3RlLklNQUdFOlxyXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy51cGxvYWRJbWFnZShlcXVpcG1lbnQsIGZpbGUpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMudXBsb2FkRG9jKGVxdWlwbWVudCwgZmlsZSwgbm90ZVR5cGUpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGVxdWlwbWVudDtcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICBnZXRQcmVmaXhEb2ModHlwZTogVHlwZU5vdGUpIHtcclxuICAgIGxldCBwcmVmaXg7XHJcbiAgICBzd2l0Y2ggKHR5cGUpIHtcclxuICAgICAgY2FzZSBUeXBlTm90ZS5JTkZPUk1BVElPTjpcclxuICAgICAgICBwcmVmaXggPSB0aGlzLnByZWZpeC5pbmZvcm1hdGlvbjtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBUeXBlTm90ZS5GSU5BTkNJQUw6XHJcbiAgICAgICAgcHJlZml4ID0gdGhpcy5wcmVmaXguZmluYW5jaWFsO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIFR5cGVOb3RlLkNPTlRSQUNUVUFMOlxyXG4gICAgICAgIHByZWZpeCA9IHRoaXMucHJlZml4LmNvbnRyYWN0dWFsO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIFR5cGVOb3RlLk9USEVSOlxyXG4gICAgICAgIHByZWZpeCA9IHRoaXMucHJlZml4Lm90aGVyO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIFR5cGVOb3RlLklNQUdFOlxyXG4gICAgICAgIHByZWZpeCA9IHRoaXMucHJlZml4LmltYWdlO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIHByZWZpeCA9IHRoaXMucHJlZml4LnRlY2huaWNhbDtcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuICAgIHJldHVybiBwcmVmaXg7XHJcbiAgfVxyXG5cclxuICBhc3luYyB1cGxvYWREb2NGb3JBbGxFcXVpcG1lbnRzKFxyXG4gICAgZXF1aXBtZW50czogRXF1aXBtZW50W10sXHJcbiAgICBkb2N1bWVudEZpbGU6IEZpbGUsXHJcbiAgICB0eXBlOiBUeXBlTm90ZVxyXG4gICkge1xyXG4gICAgaWYgKGVxdWlwbWVudHMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgIHJldHVybiBbXTtcclxuICAgIH1cclxuICAgIGNvbnN0IHByZWZpeCA9IHRoaXMuZ2V0UHJlZml4RG9jKHR5cGUpO1xyXG4gICAgY29uc3QgdXJsID0gYXdhaXQgdXBsb2FkRmlsZVRvUzMocHJlZml4LCBkb2N1bWVudEZpbGUsICdCQVRDSCcpO1xyXG4gICAgaWYgKHVybCkge1xyXG4gICAgICBjb25zdCB1cGRhdGVMaXN0ID0gW107XHJcbiAgICAgIGZvciAoY29uc3QgZXF1aXAgb2YgZXF1aXBtZW50cykge1xyXG4gICAgICAgIGNvbnN0IG1pc3Npb24gPSB0aGlzLnVzZXJTZXJ2aWNlLmN1cnJlbnRNaXNzaW9uKGVxdWlwLnNwYWNlSUQpO1xyXG4gICAgICAgIGNvbnN0IG5ld0VxdWlwID0gYXdhaXQgdGhpcy5BUEkuX19wcm90b19fLkNyZWF0ZU5vdGUoe1xyXG4gICAgICAgICAgYXR0YWNobWVudDogdXJsLFxyXG4gICAgICAgICAgdHlwZSxcclxuICAgICAgICAgIGVxdWlwbWVudElEOiBlcXVpcC5pZCxcclxuICAgICAgICAgIG93bmVyTWlzc2lvbklEOiBtaXNzaW9uID8gbWlzc2lvbi5pZCA6IG51bGwsXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdXBkYXRlTGlzdC5wdXNoKG5ld0VxdWlwKTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gdXBkYXRlTGlzdDtcclxuICAgIH1cclxuICAgIHJldHVybiBbXTtcclxuICB9XHJcblxyXG4gIGFzeW5jIHVwbG9hZERvYyhcclxuICAgIGVxdWlwbWVudDogRXF1aXBtZW50LFxyXG4gICAgZG9jdW1lbnRGaWxlOiBGaWxlLFxyXG4gICAgdHlwZTogVHlwZU5vdGVcclxuICApOiBQcm9taXNlPE5vdGU+IHtcclxuICAgIGNvbnN0IHByZWZpeCA9IHRoaXMuZ2V0UHJlZml4RG9jKHR5cGUpO1xyXG4gICAgY29uc3QgbWlzc2lvbiA9IHRoaXMudXNlclNlcnZpY2UuY3VycmVudE1pc3Npb24oZXF1aXBtZW50LnNwYWNlSUQpO1xyXG4gICAgcmV0dXJuIHVwbG9hZEZpbGVUb1MzKHByZWZpeCwgZG9jdW1lbnRGaWxlLCBlcXVpcG1lbnQuaWQpLnRoZW4oXHJcbiAgICAgIGFzeW5jICh1cmwpID0+IHtcclxuICAgICAgICBpZiAodXJsKSB7XHJcbiAgICAgICAgICByZXR1cm4gdGhpcy5BUEkuX19wcm90b19fLkNyZWF0ZU5vdGUoe1xyXG4gICAgICAgICAgICBhdHRhY2htZW50OiB1cmwsXHJcbiAgICAgICAgICAgIHR5cGUsXHJcbiAgICAgICAgICAgIGVxdWlwbWVudElEOiBlcXVpcG1lbnQuaWQsXHJcbiAgICAgICAgICAgIG93bmVyTWlzc2lvbklEOiBtaXNzaW9uID8gbWlzc2lvbi5pZCA6IG51bGwsXHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgIH1cclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBhc3luYyBkZWxldGVFcXVpcG1lbnQoZXF1aXA6IEVxdWlwbWVudCk6IFByb21pc2U8RXF1aXBtZW50PiB7XHJcbiAgICBjb25zdCBkZWxldGVkID0gYXdhaXQgdGhpcy5BUEkuX19wcm90b19fLkRlbGV0ZUVxdWlwbWVudCh7IGlkOiBlcXVpcC5pZCB9KTtcclxuICAgIGNvbnNvbGUubG9nKCdEZWxldGVkIGVxdWlwbWVudCcsIGRlbGV0ZWQpO1xyXG5cclxuICAgIC8vIGRlbGV0ZSBQT0lcclxuICAgIGNvbnN0IFtwb2ldID0gZXF1aXAucG9pcy5pdGVtcztcclxuICAgIGlmIChwb2kpIHtcclxuICAgICAgYXdhaXQgdGhpcy5wb2lTZXJ2aWNlLmRlbGV0ZVBvaShwb2kuaWQpO1xyXG4gICAgfVxyXG4gICAgLy8gZGVsZXRlIG5vdGVzIHJlbGF0ZWRcclxuICAgIGlmIChlcXVpcC5ub3Rlcy5pdGVtcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIGF3YWl0IFByb21pc2UuYWxsKFxyXG4gICAgICAgIGVxdWlwLm5vdGVzLml0ZW1zLm1hcChhc3luYyAobm90ZTogTm90ZSkgPT4ge1xyXG4gICAgICAgICAgLy8gZGVsZXRlIGZpbGVzIGZyb20gUzNcclxuICAgICAgICAgIC8qKiBOb3Qgc2hhcmVkIHdpdGggb3RoZXIgZXF1aXBtZW50ICovXHJcbiAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgIG5vdGUuYXR0YWNobWVudCAmJlxyXG4gICAgICAgICAgICAhbm90ZS5hdHRhY2htZW50LnNwbGl0KCcvJykucG9wKCkuc3RhcnRzV2l0aCgnQkFUQ0hfJylcclxuICAgICAgICAgICkge1xyXG4gICAgICAgICAgICBhd2FpdCBkZWxldGVGcm9tUzMobm90ZS5hdHRhY2htZW50KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGF3YWl0IHRoaXMuQVBJLl9fcHJvdG9fXy5EZWxldGVOb3RlKHsgaWQ6IG5vdGUuaWQgfSk7XHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICAgIH1cclxuICAgIC8vIGRlbGV0ZSBvcGVyYXRpb25zIChyZW1vdmUgZnJvbSBsaW5rZWQgdGlja2V0cylcclxuICAgIGF3YWl0IHRoaXMub3BlcmF0aW9uU2VydmljZS5kZWxldGVPcGVyYXRpb25zRm9yRXF1aXBtZW50KGVxdWlwLmlkKTtcclxuICAgIHJldHVybiBkZWxldGVkO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgdXBkYXRlRXF1aXBtZW50TG9jYXRpb24oXHJcbiAgICBlcXVpcDogRXF1aXBtZW50LFxyXG4gICAgdGFnRGF0YTogTWF0dGVydGFnRGF0YVxyXG4gICk6IFByb21pc2U8UE9JPiB7XHJcbiAgICBjb25zdCBwb2lJbnB1dCA9IHtcclxuICAgICAgY29vcmRpbmF0ZTogdGFnRGF0YS5nZXRDb29yZGluYXRlU3RyaW5nKCksXHJcbiAgICAgIHR5cGU6IFBvaVR5cGUuRVFVSVBNRU5ULFxyXG4gICAgICBlbGVtZW50SUQ6IGVxdWlwLmlkLFxyXG4gICAgICBtZXRhZGF0YTogdGFnRGF0YS5nZXRNZXRhZGF0YVN0cmluZygpLFxyXG4gICAgICBtYXR0ZXJwb3J0U3dlZXBJRDogdGFnRGF0YS5nZXRTd2VlcElEKCksXHJcbiAgICB9IGFzIFBPSTtcclxuICAgIGNvbnN0IHBvaSA9IGF3YWl0IHRoaXMucG9pU2VydmljZS5jcmVhdGVQT0lGb3JTcGFjZUlEKHBvaUlucHV0KTtcclxuICAgIHJldHVybiBwb2k7XHJcbiAgfVxyXG5cclxuICBhc3luYyByZW1vdmVUaWNrZXRGcm9tRXF1aXBtZW50KFxyXG4gICAgdGlja2V0OiBUaWNrZXQsXHJcbiAgICBlcXVpcDogRXF1aXBtZW50XHJcbiAgKTogUHJvbWlzZTxPcGVyYXRpb24+IHtcclxuICAgIGNvbnN0IG9wZXJhdGlvbkVxdWlwID1cclxuICAgICAgYXdhaXQgdGhpcy5vcGVyYXRpb25TZXJ2aWNlLmdldE9wZXJhdGlvbnNCeUVxdWlwbWVudElEKGVxdWlwLmlkKTtcclxuICAgIGNvbnN0IG9wZXJhdGlvblRvRGVsZXRlID0gb3BlcmF0aW9uRXF1aXAuZmluZChcclxuICAgICAgKG9wKSA9PiBvcC50aWNrZXRJRCA9PT0gdGlja2V0LmlkXHJcbiAgICApO1xyXG4gICAgcmV0dXJuIHRoaXMub3BlcmF0aW9uU2VydmljZVxyXG4gICAgICAuZGVsZXRlT3BlcmF0aW9uKG9wZXJhdGlvblRvRGVsZXRlLmlkKVxyXG4gICAgICAudGhlbigocmVzKSA9PiB7XHJcbiAgICAgICAgdGhpcy50aWNrZXRzU2VydmljZS5hZGRFdmVudFRvVGlja2V0KHRpY2tldCBhcyBUaWNrZXQsIHtcclxuICAgICAgICAgIHRpdGxlOiAnRXF1aXBlbWVudCByZXRpcsOpIGR1IHRpY2tldCcsXHJcbiAgICAgICAgICBkZXNjcmlwdGlvbjogYEVxdWlwZW1lbnQgJHtlcXVpcC5uYW1lfSBhIMOpdMOpIHJldGlyw6kgZHUgdGlja2V0YCxcclxuICAgICAgICAgIHN0YXR1czogRXZlbnRTdGF0dXMuVU5MSU5LRURfRlJPTV9FUVVJUE1FTlQsXHJcbiAgICAgICAgICB0eXBlOiBFdmVudFR5cGUuVElDS0VULFxyXG4gICAgICAgICAgdHJhbnNsYXRpb25QYXRoOiAndGlja2V0RXZlbnQudGlja2V0LnVubGlua2VkRnJvbUVxdWlwbWVudCcsXHJcbiAgICAgICAgICBtZXRhZGF0YTogSlNPTi5zdHJpbmdpZnkoeyBlcXVpcG1lbnQ6IGVxdWlwLm5hbWUgfSksXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIHJlcztcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICBhc3luYyBpbml0RXF1aXBzKCkge1xyXG4gICAgaWYgKCF0aGlzLmN1cnJlbnRTcGFjZUlEIHx8IHRoaXMudXNlclNlcnZpY2UuZ2V0U3BNb2R1bGUoKSA9PT0gU3BNb2R1bGUuTVVTRVVNKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRoaXMudXBkYXRpbmcubmV4dCh0cnVlKTtcclxuICAgIHRoaXMuY3VycmVudGx5VXBkYXRpbmcgPSB0cnVlO1xyXG4gICAgbGV0IGVxTGlzdCA9IGF3YWl0IHRoaXMuZ2V0RXF1aXBtZW50c0ZvclNwYWNlKHRoaXMuY3VycmVudFNwYWNlSUQpO1xyXG4gICAgZXFMaXN0ID0gYXdhaXQgdGhpcy5maWx0ZXJTZXJ2aWNlLmZpbHRlckVxdWlwbWVudHNGb3JDdXJyZW50VXNlckluU3BhY2UoXHJcbiAgICAgIHRoaXMuY3VycmVudFNwYWNlSUQsXHJcbiAgICAgIGVxTGlzdFxyXG4gICAgKTtcclxuICAgIC8vIGNvbnNvbGUubG9nKGVxTGlzdCk7XHJcbiAgICBpZiAoZXFMaXN0Lmxlbmd0aCA+IDApIHtcclxuICAgICAgbGV0IGZpbHRlcmVkRXF1aXBzID0gZXFMaXN0LmZpbHRlcihcclxuICAgICAgICAoZXF1aXBtZW50KSA9PiAhdGhpcy5pc0FyY2hpdmVkKGVxdWlwbWVudClcclxuICAgICAgKTtcclxuXHJcbiAgICAgIGF3YWl0IFByb21pc2UuYWxsKFxyXG4gICAgICAgIGZpbHRlcmVkRXF1aXBzLm1hcChhc3luYyAoZXF1aXApID0+IHtcclxuICAgICAgICAgIGVxdWlwLmRvY3VtZW50YXRpb25JbWFnZVVybFNpZ25lZCA9XHJcbiAgICAgICAgICAgIGF3YWl0IGdldFNpZ25lZEltYWdlVXJsRm9yRXF1aXBtZW50KGVxdWlwKTtcclxuICAgICAgICB9KVxyXG4gICAgICApO1xyXG4gICAgICBpZiAodGhpcy5lcXVpcG1lbnREb21haW5GaWx0ZXIpIHtcclxuICAgICAgICBmaWx0ZXJlZEVxdWlwcyA9IHRoaXMuZmlsdGVyU2VydmljZS5maWx0ZXJFcXVpcG1lbnRzQnlEb21haW5MaXN0KFxyXG4gICAgICAgICAgZmlsdGVyZWRFcXVpcHMsXHJcbiAgICAgICAgICB0aGlzLmVxdWlwbWVudERvbWFpbkZpbHRlclxyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5jdXJyZW50RXF1aXBtZW50cy5zcGFjZSA9IGZpbHRlcmVkRXF1aXBzO1xyXG4gICAgICBpZiAodGhpcy56b25lSURGaWx0ZXIpIHtcclxuICAgICAgICBmaWx0ZXJlZEVxdWlwcyA9IChhd2FpdCB0aGlzLmZpbHRlclNlcnZpY2UuZmlsdGVyT2JqZWN0c0ZvclpvbmUoXHJcbiAgICAgICAgICBmaWx0ZXJlZEVxdWlwcyxcclxuICAgICAgICAgIHRoaXMuem9uZUlERmlsdGVyLFxyXG4gICAgICAgICAgdGhpcy5jdXJyZW50Wm9uZVxyXG4gICAgICAgICkpIGFzIEVxdWlwbWVudFtdO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuY3VycmVudEVxdWlwbWVudHMuem9uZXNNYXAuc2V0KHRoaXMuem9uZUlERmlsdGVyLCBmaWx0ZXJlZEVxdWlwcyk7XHJcbiAgICAgIHRoaXMuZXF1aXBtZW50c1RhZ3MubmV4dChmaWx0ZXJlZEVxdWlwcyk7IC8vIGFkZGluZyB0YWdzIG9ubHkgZm9yIHRoZSBjdXJyZW50IHpvbmVcclxuICAgICAgdGhpcy5lcXVpcG1lbnRzVXBkYXRlZC5uZXh0KHtcclxuICAgICAgICBzcGFjZTogdGhpcy5jdXJyZW50RXF1aXBtZW50cy5zcGFjZSxcclxuICAgICAgICB6b25lOiBmaWx0ZXJlZEVxdWlwcyxcclxuICAgICAgfSk7IC8vIGZvciBsYXRlcmFsIG1lbnVcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmICh0aGlzLnpvbmVJREZpbHRlcikge1xyXG4gICAgICAgIHRoaXMuY3VycmVudEVxdWlwbWVudHMuem9uZXNNYXAuc2V0KHRoaXMuem9uZUlERmlsdGVyLCBbXSk7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5lcXVpcG1lbnRzVXBkYXRlZC5uZXh0KHsgc3BhY2U6IFtdLCB6b25lOiBbXSB9KTsgLy8gZm9yIGxhdGVyYWwgbWVudVxyXG4gICAgfVxyXG4gICAgLy8gY29uc29sZS5sb2codGhpcy5jdXJyZW50RXF1aXBtZW50cyk7XHJcbiAgICB0aGlzLnVwZGF0aW5nLm5leHQoZmFsc2UpO1xyXG4gICAgdGhpcy5jdXJyZW50bHlVcGRhdGluZyA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgZ2V0RXF1aXBtZW50c0ZvckN1cnJlbnRVc2VyRm9yU3BhY2UoXHJcbiAgICBzcGFjZUlELFxyXG4gICAgbWlzc2lvbnM6IE1pc3Npb25bXVxyXG4gICk6IFByb21pc2U8RXF1aXBtZW50W10+IHtcclxuICAgIGxldCByZXN1bHRzID0gW107XHJcblxyXG4gICAgY29uc3Qgc3BhY2VNaXNzaW9ucyA9IG1pc3Npb25zLmZpbHRlcigobSkgPT4gbS5zcGFjZUlEID09PSBzcGFjZUlEKTtcclxuICAgIGlmIChzcGFjZU1pc3Npb25zLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICByZXR1cm4gcmVzdWx0cztcclxuICAgIH1cclxuICAgIGNvbnN0IGNhblNlZUVxdWlwcyA9IHNwYWNlTWlzc2lvbnMuc29tZShcclxuICAgICAgKG0pID0+XHJcbiAgICAgICAgdGhpcy51c2VyU2VydmljZS5tYW5hZ2Vycy5pbmNsdWRlcyhtLnJvbGUpIHx8XHJcbiAgICAgICAgbS5yb2xlID09PSBSb2xlU3RhdHVzLlNFUlZJQ0VcclxuICAgICk7XHJcbiAgICBpZiAoIWNhblNlZUVxdWlwcykge1xyXG4gICAgICByZXR1cm4gcmVzdWx0cztcclxuICAgIH1cclxuICAgIGxldCBkb21haW5zID0gW107XHJcbiAgICBmb3IgKGNvbnN0IG0gb2Ygc3BhY2VNaXNzaW9ucykge1xyXG4gICAgICBkb21haW5zID0gWy4uLmRvbWFpbnMsIG0uZG9tYWluc107XHJcbiAgICB9XHJcbiAgICBpZiAoZG9tYWlucy5sZW5ndGggPT09IDApIHtcclxuICAgICAgcmV0dXJuIHJlc3VsdHM7XHJcbiAgICB9XHJcbiAgICByZXN1bHRzID0gYXdhaXQgdGhpcy5nZXRFcXVpcG1lbnRzRm9yU3BhY2Uoc3BhY2VJRCk7XHJcbiAgICAvLyByZXN1bHRzID0gdGhpcy5maWx0ZXJTZXJ2aWNlLmZpbHRlckVxdWlwbWVudHNCeURvbWFpbkxpc3QoXHJcbiAgICAvLyAgICAgcmVzdWx0cyxcclxuICAgIC8vICAgICBkb21haW5zLFxyXG4gICAgLy8gKTtcclxuICAgIHJldHVybiByZXN1bHRzO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgdXBkYXRlSWNvbkZvckFsbEVxdWlwbWVudHNJblNwYWNlKFxyXG4gICAgdGFnSWNvbjogc3RyaW5nLFxyXG4gICAgc3BhY2VJRDogc3RyaW5nLFxyXG4gICAgZG9tYWluSUQ6IHN0cmluZyA9IG51bGxcclxuICApOiBQcm9taXNlPHsgZXF1aXBzOiBFcXVpcG1lbnRbXTsgcG9pczogUE9JW10gfT4ge1xyXG4gICAgbGV0IGVxdWlwcyA9IGF3YWl0IHRoaXMuZ2V0RXF1aXBtZW50c0ZvclNwYWNlKHNwYWNlSUQpO1xyXG4gICAgaWYgKGRvbWFpbklEKSB7XHJcbiAgICAgIGVxdWlwcyA9IGVxdWlwcy5maWx0ZXIoKGVxdWlwKSA9PiBlcXVpcC5kb21haW5JRCA9PT0gZG9tYWluSUQpO1xyXG4gICAgfVxyXG4gICAgY29uc3QgcG9pcyA9IGF3YWl0IHRoaXMudXBkYXRlSWNvbkZvckFsbE9iamVjdHMoZXF1aXBzLCB0YWdJY29uKTtcclxuICAgIHJldHVybiB7IGVxdWlwcywgcG9pcyB9O1xyXG4gIH1cclxuXHJcbiAgLyoqIFJldHVybiB0cnVlIGlmIHRoZSBjdXJyZW50IHVzZXIgaGFzIGFyY2hpdmVkIHRoaXMgZXF1aXBtZW50ICovXHJcbiAgaXNBcmNoaXZlZChlcXVpcG1lbnQ6IEVxdWlwbWVudCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIGVxdWlwbWVudC5hcmNoaXZlZEZvck1pc3Npb25JRFxyXG4gICAgICA/IGVxdWlwbWVudC5hcmNoaXZlZEZvck1pc3Npb25JRC5pbmNsdWRlcyhcclxuICAgICAgICB0aGlzLnVzZXJTZXJ2aWNlLmN1cnJlbnRNaXNzaW9uKGVxdWlwbWVudC5zcGFjZUlEKS5pZFxyXG4gICAgICApXHJcbiAgICAgIDogZmFsc2U7XHJcbiAgfVxyXG5cclxuICBzZXRBcmNoaXZlZChlcXVpcG1lbnQ6IEVxdWlwbWVudCwgYXJjaGl2ZWQ6IGJvb2xlYW4pIHtcclxuICAgIGxldCBhcmNoaXZlZExpc3QgPSBlcXVpcG1lbnQuYXJjaGl2ZWRGb3JNaXNzaW9uSURcclxuICAgICAgPyBlcXVpcG1lbnQuYXJjaGl2ZWRGb3JNaXNzaW9uSURcclxuICAgICAgOiBbXTtcclxuICAgIGNvbnN0IG1pc3Npb25JRCA9IHRoaXMudXNlclNlcnZpY2UuY3VycmVudE1pc3Npb24oZXF1aXBtZW50LnNwYWNlSUQpLmlkO1xyXG5cclxuICAgIGFyY2hpdmVkTGlzdCA9IGFyY2hpdmVkTGlzdC5maWx0ZXIoKG0pID0+IG0gIT09IG1pc3Npb25JRCk7XHJcblxyXG4gICAgaWYgKGFyY2hpdmVkKSB7XHJcbiAgICAgIGFyY2hpdmVkTGlzdC5wdXNoKG1pc3Npb25JRCk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRoaXMudXBkYXRlRXF1aXBtZW50KHtcclxuICAgICAgaWQ6IGVxdWlwbWVudC5pZCxcclxuICAgICAgYXJjaGl2ZWRGb3JNaXNzaW9uSUQ6IGFyY2hpdmVkTGlzdCxcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgZGVsZXRlRmlsZShkb2N1bWVudF86IEVxdWlwbWVudERvY3VtZW50KSB7XHJcbiAgICBhd2FpdCBkZWxldGVGcm9tUzMoZG9jdW1lbnRfLnVybCk7XHJcbiAgICBhd2FpdCB0aGlzLkFQSS5EZWxldGVOb3RlKHsgaWQ6IGRvY3VtZW50Xy5ub3RlSUQgfSk7XHJcbiAgfVxyXG5cclxuICBhc3luYyBuYXZpZ2F0ZVRvRXF1aXBtZW50SW4zRChcclxuICAgIGVxdWlwbWVudDogRXF1aXBtZW50LFxyXG4gICAgZm9yY2VTd2l0Y2hWaXNpdDogYm9vbGVhbiA9IGZhbHNlXHJcbiAgKSB7XHJcbiAgICBsZXQgdXJsID0gYHZpc2l0LyR7ZXF1aXBtZW50LnNwYWNlSUR9YDtcclxuICAgIGlmIChmb3JjZVN3aXRjaFZpc2l0KSB7XHJcbiAgICAgIHVybCArPSBgL2VxdWlwLyR7ZXF1aXBtZW50LmlkfWA7XHJcbiAgICB9XHJcbiAgICBjb25zdCBjYW5Hb1RvVGFnID0gYXdhaXQgdGhpcy52aWV3ZXJTZXJ2aWNlLmFjdGlvbl9tb3ZlX3RvX3RhZyhcclxuICAgICAgYCR7ZXF1aXBtZW50LmlkfWBcclxuICAgICk7XHJcbiAgICBpZiAoY2FuR29Ub1RhZykge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLmdldE1vZGVsM2RBbmRTd2VlcChlcXVpcG1lbnQpO1xyXG5cclxuICAgIGlmICghcmVzdWx0IHx8ICFyZXN1bHQubW9kZWwzRCkge1xyXG4gICAgICBhbGVydCgnRXJyb3Igd2hpbGUgZ2V0dGluZyB2aXJ0dWFsIHZpc2l0IG1vZGVsJyk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGlmICghZm9yY2VTd2l0Y2hWaXNpdCkge1xyXG4gICAgICAvLyBjaGVjayBpZiB3ZSBhcmUgbW92aW5nIHdpdGhpbiB0aGUgc2FtZSAzRCBtb2RlbFxyXG4gICAgICBjb25zdCBjdXJyZW50TW9kZWwgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnbW9kZWwzRCcpO1xyXG4gICAgICBpZiAoY3VycmVudE1vZGVsICYmIGN1cnJlbnRNb2RlbCA9PT0gcmVzdWx0Lm1vZGVsM0QpIHtcclxuICAgICAgICAvLyB3ZSBhZGQgdGFnIHRvIHRoZSB2aXNpdFxyXG4gICAgICAgIGNvbnN0IHBvaSA9IGVxdWlwbWVudC5wb2lzLml0ZW1zWzBdO1xyXG4gICAgICAgIGlmIChwb2kuY29vcmRpbmF0ZSkge1xyXG4gICAgICAgICAgLy8gd2UgZm9yY2UgYWRkIGJlY2F1c2Ugd2UgbWlnaHQgYmUgaW4gYW4gYW5vdGhlciB6b25lXHJcbiAgICAgICAgICBhd2FpdCB0aGlzLnZpZXdlclNlcnZpY2UuYWN0aW9uQWRkT2JqZWN0RnJvbVBPSShlcXVpcG1lbnQsIHBvaSk7XHJcbiAgICAgICAgICBhd2FpdCB0aGlzLnZpZXdlclNlcnZpY2UuYWN0aW9uX21vdmVfdG9fdGFnKGVxdWlwbWVudC5pZCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIC8qKiBTaSBvbiBuZSBmb3JjZSBwYXMgbGEgdmlzaXRlLCBvbiBkZW1hbmRlIHNpIG9uIHZldXQgZXRyZSBzd2l0Y2ggKi9cclxuICAgICAgICBvcGVuTW9kYWxGb3JWaXNpdFN3aXRjaChcclxuICAgICAgICAgIHRoaXMubW9kYWxTZXJ2aWNlLFxyXG4gICAgICAgICAgcmVzdWx0Lm1vZGVsM0QsXHJcbiAgICAgICAgICBlcXVpcG1lbnQuc3BhY2VJRCxcclxuICAgICAgICAgIHsgc3dlZXBUb01vdmU6IHJlc3VsdC5zd2VlcCwgcm90YXRpb246IHJlc3VsdC5yb3RhdGlvbiB9XHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgd2luZG93Lm9wZW4oYCR7dXJsfT9tb2RlbDNEPSR7cmVzdWx0Lm1vZGVsM0R9JnN3ZWVwPXRydWVgLCAnX2JsYW5rJyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhc3luYyB1cGRhdGVFcXVpcHNGb3Jab25lKCkge1xyXG4gICAgdGhpcy51cGRhdGluZy5uZXh0KHRydWUpO1xyXG4gICAgbGV0IGZpbHRlcmVkRXF1aXBzID0gW107XHJcbiAgICBpZiAodGhpcy5jdXJyZW50RXF1aXBtZW50cy5zcGFjZS5sZW5ndGggPiAwKSB7XHJcbiAgICAgIGlmIChcclxuICAgICAgICB0aGlzLnpvbmVJREZpbHRlciAmJlxyXG4gICAgICAgIHRoaXMuY3VycmVudEVxdWlwbWVudHMuem9uZXNNYXAuaGFzKHRoaXMuem9uZUlERmlsdGVyKVxyXG4gICAgICApIHtcclxuICAgICAgICBmaWx0ZXJlZEVxdWlwcyA9IHRoaXMuY3VycmVudEVxdWlwbWVudHMuem9uZXNNYXAuZ2V0KHRoaXMuem9uZUlERmlsdGVyKTtcclxuICAgICAgICAvLyBjb25zb2xlLmxvZyhcImkgaGF2ZSBlcXVpcHMgZm9yIHRoaXMgem9uZVwiLCBmaWx0ZXJlZEVxdWlwcyk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgZmlsdGVyZWRFcXVpcHMgPSAoYXdhaXQgdGhpcy5maWx0ZXJTZXJ2aWNlLmZpbHRlck9iamVjdHNGb3Jab25lKFxyXG4gICAgICAgICAgdGhpcy5jdXJyZW50RXF1aXBtZW50cy5zcGFjZSxcclxuICAgICAgICAgIHRoaXMuem9uZUlERmlsdGVyLFxyXG4gICAgICAgICAgdGhpcy5jdXJyZW50Wm9uZVxyXG4gICAgICAgICkpIGFzIEVxdWlwbWVudFtdO1xyXG5cclxuICAgICAgICB0aGlzLmN1cnJlbnRFcXVpcG1lbnRzLnpvbmVzTWFwLnNldCh0aGlzLnpvbmVJREZpbHRlciwgW1xyXG4gICAgICAgICAgLi4uZmlsdGVyZWRFcXVpcHMsXHJcbiAgICAgICAgXSk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHRoaXMuZXF1aXBtZW50RG9tYWluRmlsdGVyKSB7XHJcbiAgICAgICAgZmlsdGVyZWRFcXVpcHMgPSB0aGlzLmZpbHRlclNlcnZpY2UuZmlsdGVyRXF1aXBtZW50c0J5RG9tYWluTGlzdChcclxuICAgICAgICAgIGZpbHRlcmVkRXF1aXBzLFxyXG4gICAgICAgICAgdGhpcy5lcXVpcG1lbnREb21haW5GaWx0ZXJcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuZXF1aXBtZW50c1RhZ3MubmV4dChmaWx0ZXJlZEVxdWlwcyk7IC8vIGFkZGluZyB0YWdzIG9ubHkgZm9yIHRoZSBjdXJyZW50IHpvbmVcclxuICAgICAgdGhpcy5lcXVpcG1lbnRzVXBkYXRlZC5uZXh0KHtcclxuICAgICAgICBzcGFjZTogdGhpcy5jdXJyZW50RXF1aXBtZW50cy5zcGFjZSxcclxuICAgICAgICB6b25lOiBmaWx0ZXJlZEVxdWlwcyxcclxuICAgICAgfSk7IC8vIGZvciBsYXRlcmFsIG1lbnVcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuZXF1aXBtZW50c1VwZGF0ZWQubmV4dCh7IHNwYWNlOiBbXSwgem9uZTogW10gfSk7IC8vIGZvciBsYXRlcmFsIG1lbnVcclxuICAgIH1cclxuICAgIHRoaXMudXBkYXRpbmcubmV4dChmYWxzZSk7XHJcbiAgfVxyXG5cclxuICB1cGRhdGVEdWVUb0RlbGV0ZShkZWxldGVkRXF1aXBtZW50OiBFcXVpcG1lbnQpIHtcclxuICAgIC8vIGNvbnNvbGUubG9nKFwidXBkYXRlIGR1ZSB0byBkZWxldGVcIiwgZGVsZXRlZEVxdWlwbWVudCk7XHJcbiAgICBjb25zdCBlcXVpcCA9IHRoaXMuY3VycmVudEVxdWlwbWVudHMuc3BhY2UuZmluZChcclxuICAgICAgKF9lcXVpcCkgPT4gX2VxdWlwLmlkID09PSBkZWxldGVkRXF1aXBtZW50LmlkXHJcbiAgICApO1xyXG4gICAgaWYgKGVxdWlwKSB7XHJcbiAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5jdXJyZW50RXF1aXBtZW50cy5zcGFjZS5pbmRleE9mKGVxdWlwKTtcclxuICAgICAgdGhpcy5jdXJyZW50RXF1aXBtZW50cy5zcGFjZS5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgfVxyXG4gICAgZm9yIChjb25zdCB6b25lIG9mIHRoaXMuY3VycmVudEVxdWlwbWVudHMuem9uZXNNYXAua2V5cygpKSB7XHJcbiAgICAgIGNvbnN0IGVxdWlwVG9EZWxldGUgPSB0aGlzLmN1cnJlbnRFcXVpcG1lbnRzLnpvbmVzTWFwXHJcbiAgICAgICAgLmdldCh6b25lKVxyXG4gICAgICAgIC5maW5kKChfZXF1aXApID0+IF9lcXVpcC5pZCA9PT0gZGVsZXRlZEVxdWlwbWVudC5pZCk7XHJcbiAgICAgIGlmIChlcXVpcFRvRGVsZXRlKSB7XHJcbiAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLmN1cnJlbnRFcXVpcG1lbnRzLnpvbmVzTWFwXHJcbiAgICAgICAgICAuZ2V0KHpvbmUpXHJcbiAgICAgICAgICAuaW5kZXhPZihlcXVpcFRvRGVsZXRlKTtcclxuICAgICAgICB0aGlzLmN1cnJlbnRFcXVpcG1lbnRzLnpvbmVzTWFwLmdldCh6b25lKS5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICB0aGlzLmVxdWlwbWVudHNVcGRhdGVkLm5leHQoe1xyXG4gICAgICBzcGFjZTogdGhpcy5jdXJyZW50RXF1aXBtZW50cy5zcGFjZSxcclxuICAgICAgem9uZTogdGhpcy5jdXJyZW50RXF1aXBtZW50cy56b25lc01hcC5nZXQodGhpcy56b25lSURGaWx0ZXIpLFxyXG4gICAgfSk7IC8vIGZvciBsYXRlcmFsIG1lbnVcclxuICB9XHJcblxyXG4gIHVwZGF0ZUR1ZVRvQ3JlYXRlKGNyZWF0ZWRFcXVpcDogRXF1aXBtZW50KSB7XHJcbiAgICB0aGlzLmN1cnJlbnRFcXVpcG1lbnRzLnNwYWNlLnVuc2hpZnQoY3JlYXRlZEVxdWlwKTtcclxuICAgIHRoaXMuY3VycmVudEVxdWlwbWVudHMuem9uZXNNYXBcclxuICAgICAgLmdldCh0aGlzLnpvbmVJREZpbHRlcilcclxuICAgICAgLnVuc2hpZnQoY3JlYXRlZEVxdWlwKTtcclxuICAgIHRoaXMuZXF1aXBtZW50c1VwZGF0ZWQubmV4dCh7XHJcbiAgICAgIHNwYWNlOiB0aGlzLmN1cnJlbnRFcXVpcG1lbnRzLnNwYWNlLFxyXG4gICAgICB6b25lOiB0aGlzLmN1cnJlbnRFcXVpcG1lbnRzLnpvbmVzTWFwLmdldCh0aGlzLnpvbmVJREZpbHRlciksXHJcbiAgICB9KTsgLy8gZm9yIGxhdGVyYWwgbWVudVxyXG4gIH1cclxuXHJcbiAgdXBkYXRlRHVlVG9FcXVpcFVwZGF0ZWQodXBkYXRlZEVxdWlwOiBFcXVpcG1lbnQpIHtcclxuICAgIGNvbnN0IGVxdWlwID0gdGhpcy5jdXJyZW50RXF1aXBtZW50cy5zcGFjZS5maW5kKFxyXG4gICAgICAoX2VxdWlwKSA9PiBfZXF1aXAuaWQgPT09IHVwZGF0ZWRFcXVpcC5pZFxyXG4gICAgKTtcclxuICAgIGlmIChlcXVpcCkge1xyXG4gICAgICBjb25zdCBpbmRleCA9IHRoaXMuY3VycmVudEVxdWlwbWVudHMuc3BhY2UuaW5kZXhPZihlcXVpcCk7XHJcbiAgICAgIGlmICh0aGlzLmlzQXJjaGl2ZWQoZXF1aXApKSB7XHJcbiAgICAgICAgLy8gd2UgcmVtb3ZlIGFyY2hpdmVkIGVxdWlwbWVudFxyXG4gICAgICAgIHRoaXMuY3VycmVudEVxdWlwbWVudHMuc3BhY2Uuc3BsaWNlKGluZGV4LCAxKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRFcXVpcG1lbnRzLnNwYWNlLnNwbGljZShpbmRleCwgMSwgdXBkYXRlZEVxdWlwKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgZm9yIChjb25zdCB6b25lIG9mIHRoaXMuY3VycmVudEVxdWlwbWVudHMuem9uZXNNYXAua2V5cygpKSB7XHJcbiAgICAgIGNvbnN0IGVxdWlwVG9VcGQgPSB0aGlzLmN1cnJlbnRFcXVpcG1lbnRzLnpvbmVzTWFwXHJcbiAgICAgICAgLmdldCh6b25lKVxyXG4gICAgICAgIC5maW5kKChfZXF1aXApID0+IF9lcXVpcC5pZCA9PT0gdXBkYXRlZEVxdWlwLmlkKTtcclxuICAgICAgaWYgKGVxdWlwVG9VcGQpIHtcclxuICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMuY3VycmVudEVxdWlwbWVudHMuem9uZXNNYXBcclxuICAgICAgICAgIC5nZXQoem9uZSlcclxuICAgICAgICAgIC5pbmRleE9mKGVxdWlwVG9VcGQpO1xyXG4gICAgICAgIGlmICh0aGlzLmlzQXJjaGl2ZWQoZXF1aXApKSB7XHJcbiAgICAgICAgICB0aGlzLmN1cnJlbnRFcXVpcG1lbnRzLnpvbmVzTWFwLmdldCh6b25lKS5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLmN1cnJlbnRFcXVpcG1lbnRzLnpvbmVzTWFwXHJcbiAgICAgICAgICAgIC5nZXQoem9uZSlcclxuICAgICAgICAgICAgLnNwbGljZShpbmRleCwgMSwgdXBkYXRlZEVxdWlwKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHRoaXMuZXF1aXBtZW50c1VwZGF0ZWQubmV4dCh7XHJcbiAgICAgIHNwYWNlOiB0aGlzLmN1cnJlbnRFcXVpcG1lbnRzLnNwYWNlLFxyXG4gICAgICB6b25lOiB0aGlzLmN1cnJlbnRFcXVpcG1lbnRzLnpvbmVzTWFwLmdldCh0aGlzLnpvbmVJREZpbHRlciksXHJcbiAgICB9KTsgLy8gZm9yIGxhdGVyYWwgbWVudVxyXG4gIH1cclxuXHJcbiAgaW5pdFN1YnNjcmlwdGlvbnMoKSB7XHJcbiAgICBpZiAodGhpcy51c2VyU2VydmljZS5nZXRTcE1vZHVsZSgpID09PSBTcE1vZHVsZS5NVVNFVU0pIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdGhpcy56b25lQ2hhbmdlU2VydmljZS56b25lQ2hhbmdlXHJcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcclxuICAgICAgLnN1YnNjcmliZSgoem9uZSkgPT4ge1xyXG4gICAgICAgIGlmICghem9uZSB8fCAhdGhpcy5uYXZpZ2F0b3JTZXJ2aWNlLmN1cnJlbnRTcGFjZUlEKSB7XHJcbiAgICAgICAgICB0aGlzLmN1cnJlbnRTcGFjZUlEID0gdGhpcy5uYXZpZ2F0b3JTZXJ2aWNlLmN1cnJlbnRTcGFjZUlEO1xyXG4gICAgICAgICAgdGhpcy5lcXVpcG1lbnRzVGFncy5uZXh0KG51bGwpO1xyXG4gICAgICAgICAgdGhpcy5lcXVpcG1lbnRzVXBkYXRlZC5uZXh0KHsgc3BhY2U6IFtdLCB6b25lOiBudWxsIH0pO1xyXG4gICAgICAgICAgdGhpcy56b25lSURGaWx0ZXIgPSBudWxsO1xyXG4gICAgICAgICAgdGhpcy5jdXJyZW50RXF1aXBtZW50cyA9IHtcclxuICAgICAgICAgICAgc3BhY2U6IFtdLFxyXG4gICAgICAgICAgICB6b25lc01hcDogbmV3IE1hcCgpLFxyXG4gICAgICAgICAgfTtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHpvbmUuaWQgIT09IHRoaXMuem9uZUlERmlsdGVyKSB7XHJcbiAgICAgICAgICB0aGlzLnpvbmVJREZpbHRlciA9IHpvbmUuaWQ7XHJcbiAgICAgICAgICB0aGlzLmN1cnJlbnRab25lID0gem9uZTtcclxuICAgICAgICAgIGlmICh0aGlzLmN1cnJlbnRTcGFjZUlEID09PSB0aGlzLm5hdmlnYXRvclNlcnZpY2UuY3VycmVudFNwYWNlSUQpIHtcclxuXHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlRXF1aXBzRm9yWm9uZSgpO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5jdXJyZW50U3BhY2VJRCA9IHRoaXMubmF2aWdhdG9yU2VydmljZS5jdXJyZW50U3BhY2VJRDtcclxuICAgICAgICAgICAgdGhpcy5pbml0RXF1aXBzKCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuXHJcbiAgICB0aGlzLmRlbGV0ZU9ic2VydmFibGVcclxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxyXG4gICAgICAuc3Vic2NyaWJlKChlcXVpcG1lbnQpID0+IHtcclxuICAgICAgICBpZiAodGhpcy5jdXJyZW50U3BhY2VJRCkge1xyXG4gICAgICAgICAgdGhpcy51cGRhdGVEdWVUb0RlbGV0ZShlcXVpcG1lbnQpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcblxyXG4gICAgdGhpcy5jcmVhdGVPYnNlcnZhYmxlXHJcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcclxuICAgICAgLnN1YnNjcmliZSgoZXF1aXBtZW50KSA9PiB7XHJcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudFNwYWNlSUQpIHtcclxuICAgICAgICAgIHRoaXMudXBkYXRlRHVlVG9DcmVhdGUoZXF1aXBtZW50KTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG5cclxuICAgIHRoaXMudXBkYXRlT2JzZXJ2YWJsZVxyXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXHJcbiAgICAgIC5zdWJzY3JpYmUoKGVxdWlwbWVudCkgPT4ge1xyXG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRTcGFjZUlEKSB7XHJcbiAgICAgICAgICB0aGlzLnVwZGF0ZUR1ZVRvRXF1aXBVcGRhdGVkKGVxdWlwbWVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIHVuc3Vic2NyaWJlKCkge1xyXG4gICAgdGhpcy5kZXN0cm95JC5uZXh0KHRydWUpO1xyXG4gICAgdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpO1xyXG4gIH1cclxufVxyXG4iXX0=
|