@smarterplan/ngx-smarterplan-core 0.4.55 → 0.4.56
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2020/lib/services/matterport.service.mjs +17 -1
- package/esm2020/lib/services/tag.service.mjs +5 -1
- package/esm2020/lib/types.service.mjs +2 -1
- package/fesm2015/smarterplan-ngx-smarterplan-core.mjs +23 -0
- package/fesm2015/smarterplan-ngx-smarterplan-core.mjs.map +1 -1
- package/fesm2020/smarterplan-ngx-smarterplan-core.mjs +21 -0
- package/fesm2020/smarterplan-ngx-smarterplan-core.mjs.map +1 -1
- package/lib/services/matterport.service.d.ts +1 -0
- package/lib/services/tag.service.d.ts +4 -0
- package/lib/types.service.d.ts +2 -1
- package/package.json +1 -1
|
@@ -488,6 +488,8 @@ export class MatterportService {
|
|
|
488
488
|
async updateInjectedHtmlForTagID(mattertagID, object, tagType) {
|
|
489
489
|
await this.injectHtmlInTag(tagType, object, mattertagID);
|
|
490
490
|
}
|
|
491
|
+
async editBillboardForTag(mattertagID, object, tagType) {
|
|
492
|
+
}
|
|
491
493
|
deleteMattertagFromId(mattertagID) {
|
|
492
494
|
this.sdk.Mattertag.remove(mattertagID);
|
|
493
495
|
this.dictionnaryTags.delete(mattertagID);
|
|
@@ -621,6 +623,20 @@ export class MatterportService {
|
|
|
621
623
|
})
|
|
622
624
|
.catch((error) => console.log("Cannot inject html for tag", tagID, error));
|
|
623
625
|
}
|
|
626
|
+
else {
|
|
627
|
+
// if html is empty, we edit billboard for Feature
|
|
628
|
+
const { comment, tagDescription } = this.tagService.getBillboardMediaToEmbed(object);
|
|
629
|
+
if (comment) {
|
|
630
|
+
this.sdk.Mattertag.editBillboard(tagID, {
|
|
631
|
+
label: object.title,
|
|
632
|
+
description: tagDescription,
|
|
633
|
+
media: {
|
|
634
|
+
type: "mattertag.media.rich",
|
|
635
|
+
src: comment.externalLink
|
|
636
|
+
}
|
|
637
|
+
});
|
|
638
|
+
}
|
|
639
|
+
}
|
|
624
640
|
}
|
|
625
641
|
async action_delete_all_mattertags() {
|
|
626
642
|
// await Promise.all(
|
|
@@ -947,4 +963,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.7", ngImpor
|
|
|
947
963
|
type: Inject,
|
|
948
964
|
args: ['config']
|
|
949
965
|
}] }, { type: i1.Router }, { type: i2.BaseVisibilityService }]; } });
|
|
950
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF0dGVycG9ydC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXNtYXJ0ZXJwbGFuLWNvcmUvc3JjL2xpYi9zZXJ2aWNlcy9tYXR0ZXJwb3J0LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFbkQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvQixPQUFPLEVBQUUsMkJBQTJCLEVBQUUsZUFBZSxFQUFFLElBQUksRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3hGLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNqRCxPQUFPLEVBQWdCLFdBQVcsRUFBTyxPQUFPLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBSXBILE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQzs7Ozs7QUFLOUMsTUFBTSxPQUFPLGlCQUFpQjtJQW9HMUIsWUFDc0IsTUFBYyxFQUN4QixNQUFjLEVBQ2QsaUJBQXdDO1FBRHhDLFdBQU0sR0FBTixNQUFNLENBQVE7UUFDZCxzQkFBaUIsR0FBakIsaUJBQWlCLENBQXVCO1FBeEZwRCxlQUFlO1FBQ1Asb0JBQWUsR0FBRyxLQUFLLENBQUM7UUFFaEMsU0FBUztRQUNELG1CQUFjLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFFcEIsb0JBQWUsR0FBVyxrQkFBa0IsQ0FBQyxPQUFPLENBQUM7UUFFckQsZUFBVSxHQUFrQixFQUFFLENBQUM7UUFFL0Isb0JBQWUsR0FBc0UsSUFBSSxHQUFHLENBQUM7UUFFN0YsZ0JBQVcsR0FBRyxFQUFFLENBQUM7UUFFakIseUJBQW9CLEdBQWEsRUFBRSxDQUFDO1FBRXBDLGVBQVUsR0FBRztZQUNqQixLQUFLLEVBQUUs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LE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7YUFDdEI7UUFDTCxDQUFDLENBQUMsQ0FDTCxDQUFDO1FBQ0YsT0FBTyxDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUM1QyxDQUFDOzs4R0FsdUNRLGlCQUFpQixrQkFxR2QsUUFBUTtrSEFyR1gsaUJBQWlCLGNBRmQsTUFBTTsyRkFFVCxpQkFBaUI7a0JBSDdCLFVBQVU7bUJBQUM7b0JBQ1IsVUFBVSxFQUFFLE1BQU07aUJBQ3JCOzswQkFzR1EsTUFBTTsyQkFBQyxRQUFRIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0LCBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgZ2V0RGlzdGFuY2VCZXR3ZWVuVHdvUG9pbnRzLCBwb2lUeXBlVG9TdHJpbmcsIHdhaXQgfSBmcm9tICcuLi9oZWxwZXJzLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBNYXR0ZXJ0YWdEYXRhIH0gZnJvbSAnLi4vbWF0dGVydGFnRGF0YSc7XHJcbmltcG9ydCB7IERiT2JqZWN0VHlwZSwgRmVhdHVyZVR5cGUsIFBPSSwgUG9pVHlwZSwgU3BNb2R1bGUsIFRhZ0FjdGlvbiwgVmlld2VySW50ZXJhY3Rpb25zIH0gZnJvbSAnLi4vdHlwZXMuc2VydmljZSc7XHJcbmltcG9ydCB7IEJhc2VUYWdTZXJ2aWNlIH0gZnJvbSAnLi90YWcuc2VydmljZSc7XHJcbmltcG9ydCB7IEJhc2VWaXNpYmlsaXR5U2VydmljZSB9IGZyb20gJy4vYmFzZVZpc2liaWxpdHkuc2VydmljZSc7XHJcbmltcG9ydCB7IENvbmZpZyB9IGZyb20gJy4uL2NvbmZpZyc7XHJcbmltcG9ydCB7IENhbWVyYU1vZGUgfSBmcm9tICcuLi90eXBlcy5zZXJ2aWNlJztcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICAgIHByb3ZpZGVkSW46ICdyb290J1xyXG59KVxyXG5leHBvcnQgY2xhc3MgTWF0dGVycG9ydFNlcnZpY2Uge1xyXG4gICAgcHVibGljIHNkazogYW55O1xyXG5cclxuICAgIHByaXZhdGUgY29udGFpbmVyOiBhbnk7XHJcblxyXG4gICAgLy8gUG9zaXRpb24gY2FtZXJhXHJcbiAgICBwcml2YXRlIHBvc2VNYXR0ZXJwb3J0OiBhbnk7XHJcblxyXG4gICAgcHVibGljIHBvc2VDYW1lcmE6IHsgcm90YXRpb246IGFueTsgcG9zaXRpb246IGFueTsgc3dlZXA6IGFueTsgfTtcclxuXHJcbiAgICAvLyBQb2ludGVyIHRyaWNrXHJcbiAgICBwcml2YXRlIHBvaW50ZXJCdXR0b246IGFueTtcclxuXHJcbiAgICBwcml2YXRlIG9sZFBvc2VNYXR0ZXJwb3J0UG9zaXRpb246IGFueTtcclxuXHJcbiAgICAvLyBNZWFzdXJlIG1vZGVcclxuICAgIHByaXZhdGUgaXNNZWFzdXJlTW9kZU9uID0gZmFsc2U7XHJcblxyXG4gICAgLy8gVGltZXJzXHJcbiAgICBwcml2YXRlIGxhc3RBY3Rpb25UaW1lID0gLTE7XHJcblxyXG4gICAgcHJpdmF0ZSBpbnRlcmFjdGlvbk1vZGU6IG51bWJlciA9IFZpZXdlckludGVyYWN0aW9ucy5ERUZBVUxUO1xyXG5cclxuICAgIHByaXZhdGUgbWF0dGVydGFnczogQXJyYXk8c3RyaW5nPiA9IFtdO1xyXG5cclxuICAgIHByaXZhdGUgZGljdGlvbm5hcnlUYWdzOiBNYXA8c3RyaW5nLCB7IG1hdHRlcnRhZ0RhdGE6IE1hdHRlcnRhZ0RhdGE7IGVsZW1lbnRJRDogc3RyaW5nOyB9PiA9IG5ldyBNYXA7XHJcblxyXG4gICAgcHJpdmF0ZSBsYXN0TWVhc3VyZSA9IFtdO1xyXG5cclxuICAgIHByaXZhdGUgZGlzdGFuY2VzTGFzdE1lYXN1cmU6IG51bWJlcltdID0gW107XHJcblxyXG4gICAgcHJpdmF0ZSByZXNvbHV0aW9uID0ge1xyXG4gICAgICAgIHdpZHRoOiA1MDAsXHJcbiAgICAgICAgaGVpZ2h0OiA2MDAsXHJcbiAgICB9O1xyXG5cclxuICAgIHByaXZhdGUgdmlzaWJpbGl0eSA9IHtcclxuICAgICAgICBtYXR0ZXJ0YWdzOiBmYWxzZSxcclxuICAgICAgICBzd2VlcHM6IHRydWUsXHJcbiAgICB9O1xyXG5cclxuICAgIHByaXZhdGUgbGFzdFNjcmVlbnNob3RVcmk6IGFueTtcclxuXHJcbiAgICBwdWJsaWMgc3dlZXBzOiBBcnJheTxzdHJpbmc+IHwgbnVsbDtcclxuXHJcbiAgICBwdWJsaWMgY3VycmVudFN3ZWVwOiBTdWJqZWN0PHN0cmluZz4gPSBuZXcgU3ViamVjdCgpO1xyXG5cclxuICAgIC8vY2FtZXJhIHBvc2l0aW9uIHdpdGggcm90YXRpb25cclxuICAgIHB1YmxpYyBjdXJyZW50Q2FtZXJhUG9zZTogU3ViamVjdDxhbnk+ID0gbmV3IFN1YmplY3QoKTtcclxuXHJcbiAgICBwcml2YXRlIGZsb29ycz86IEFycmF5PHsgaWQ6IHN0cmluZzsgbmFtZTogc3RyaW5nOyBzZXF1ZW5jZTogbnVtYmVyOyB9PiB8IG51bGw7XHJcblxyXG4gICAgcHJpdmF0ZSBfY3VycmVudFNwYWNlSUQ6IHN0cmluZztcclxuXHJcbiAgICBwdWJsaWMgZ2V0IGN1cnJlbnRTcGFjZUlEKCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2N1cnJlbnRTcGFjZUlEO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzZXQgY3VycmVudFNwYWNlSUQodmFsdWU6IHN0cmluZykge1xyXG4gICAgICAgIHRoaXMuX2N1cnJlbnRTcGFjZUlEID0gdmFsdWU7XHJcbiAgICB9XHJcblxyXG4gICAgdGltZXJQb2ludGVyOiBhbnk7XHJcblxyXG4gICAgZm9yYmlkZGVuU3dlZXBzOiBzdHJpbmdbXSA9IFtdO1xyXG5cclxuICAgIHB1YmxpYyB0YWdBY3Rpb246IFN1YmplY3Q8eyBhY3Rpb246IHN0cmluZzsgZGF0YTogc3RyaW5nOyB9PiA9IG5ldyBTdWJqZWN0KCk7XHJcblxyXG4gICAgcHVibGljIG1hdHRlcnRhZ1RvRm9sbG93OiBzdHJpbmcgfCBudWxsO1xyXG5cclxuICAgIHRhZ1NlcnZpY2U6IEJhc2VUYWdTZXJ2aWNlO1xyXG5cclxuICAgIGNvbmZpZzogQ29uZmlnO1xyXG5cclxuICAgIHB1YmxpYyBpblRyYW5zaXRpb25Nb2RlID0gZmFsc2U7XHJcblxyXG4gICAgcHVibGljIGluVHJhbnNpdGlvblN3ZWVwID0gZmFsc2U7XHJcblxyXG4gICAgcHVibGljIGN1cnJlbnRDYW1lcmFNb2RlOiBDYW1lcmFNb2RlID0gQ2FtZXJhTW9kZS5PVVRTSURFO1xyXG5cclxuICAgIHB1YmxpYyBvbkNhbWVyYU1vZGVDaGFuZ2VkID0gbmV3IFN1YmplY3Q8Q2FtZXJhTW9kZT4oKTtcclxuXHJcbiAgICBwdWJsaWMgb25Hb1RvVGFnID0gbmV3IFN1YmplY3Q8c3RyaW5nPigpO1xyXG5cclxuICAgIHRhZ01lc3Nlbmdlck9uID0gZmFsc2U7XHJcblxyXG4gICAgU1BNb2R1bGU6IFNwTW9kdWxlO1xyXG5cclxuICAgIHBvaW50ZXJMZWZ0Q2xpY2tIYW5kbGVyID0gKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuYWRkTWF0dGVydGFnKCk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVQb3NpdGlvbkluVGFnRGF0YSgpO1xyXG4gICAgfTtcclxuXHJcbiAgICBwb2ludGVyUmlnaHRDbGlja0hhbmRsZXIgPSAoZSkgPT4ge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKFwiY2FuY2VsIG9uIHJpZ2h0IGNsaWNrXCIpO1xyXG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICB0aGlzLmFjdGlvbl9jYW5jZWxlZCgpO1xyXG4gICAgICAgIGFsZXJ0KFwiYWN0aW9uIGNhbmNlbGxlZFwiKTtcclxuICAgIH07XHJcblxyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgQEluamVjdCgnY29uZmlnJykgY29uZmlnOiBDb25maWcsXHJcbiAgICAgICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcclxuICAgICAgICBwcml2YXRlIHZpc2liaWxpdHlTZXJ2aWNlOiBCYXNlVmlzaWJpbGl0eVNlcnZpY2VcclxuICAgICkge1xyXG4gICAgICAgIHRoaXMuY29uZmlnID0gY29uZmlnO1xyXG4gICAgfVxyXG5cclxuICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICBVdGlscyBhc3luY1xyXG4gIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXHJcblxyXG4gICAgYXN5bmMgaW5pdFNkayh0YWdTZXJ2aWNlOiBCYXNlVGFnU2VydmljZSwgbW9kdWxlOiBTcE1vZHVsZSA9IFNwTW9kdWxlLklNTU8pOiBQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgICAgICBpZiAodGhpcy5zZGspIHtcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5hY3Rpb25fZGVsZXRlX2FsbF9tYXR0ZXJ0YWdzKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMudGFnU2VydmljZSA9IHRhZ1NlcnZpY2U7XHJcbiAgICAgICAgdGhpcy5TUE1vZHVsZSA9IG1vZHVsZTtcclxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICAgICAgICAvLyBSZXRyaWV2ZSBET00gZWxlbWVudHNcclxuICAgICAgICAgICAgdGhpcy5wb2ludGVyQnV0dG9uID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcclxuICAgICAgICAgICAgICAgIFwiI3ZpZXdlci1wb2ludGVyLXRyaWNrXCIsXHJcbiAgICAgICAgICAgICkgYXMgSFRNTEVsZW1lbnQ7XHJcbiAgICAgICAgICAgIHRoaXMuY29udGFpbmVyID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcclxuICAgICAgICAgICAgICAgIFwiI3ZpZXdlci1tb2R1bGVcIixcclxuICAgICAgICAgICAgKSBhcyBIVE1MRWxlbWVudDtcclxuICAgICAgICAgICAgY29uc3QgaWZyYW1lID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcclxuICAgICAgICAgICAgICAgIFwiI3ZpZXdlci1tb2R1bGVcIixcclxuICAgICAgICAgICAgKSBhcyBIVE1MSUZyYW1lRWxlbWVudDtcclxuICAgICAgICAgICAgaWYgKCFpZnJhbWUpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy8gQWRkIGxpc3RlbmVyc1xyXG4gICAgICAgICAgICBpZiAodGhpcy5wb2ludGVyQnV0dG9uKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnBvaW50ZXJCdXR0b24uYWRkRXZlbnRMaXN0ZW5lcihcclxuICAgICAgICAgICAgICAgICAgICBcImNsaWNrXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wb2ludGVyTGVmdENsaWNrSGFuZGxlcixcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAvLyBjYW5jZWwgb24gcmlnaHQgY2xpY2tcclxuICAgICAgICAgICAgICAgIHRoaXMucG9pbnRlckJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKFxyXG4gICAgICAgICAgICAgICAgICAgIFwiY29udGV4dG1lbnVcIixcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnBvaW50ZXJSaWdodENsaWNrSGFuZGxlcixcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vIExvYWQgU0RLXHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiTG9hZGluZyBNYXR0ZXJwb3J0IFNES1wiKTtcclxuICAgICAgICAgICAgLy8gQHRzLWlnbm9yZVxyXG4gICAgICAgICAgICB3aW5kb3cuTVBfU0RLLmNvbm5lY3QoXHJcbiAgICAgICAgICAgICAgICBpZnJhbWUsXHJcbiAgICAgICAgICAgICAgICBcInFuOXdzYXN1eTVoMmZ6cmJybjFuenIwaWRcIixcclxuICAgICAgICAgICAgICAgIFwiMy4xMVwiLFxyXG4gICAgICAgICAgICApLnRoZW4oYXN5bmMgKHNkazogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAvLyBJbnN0YW5jaWF0ZSBzZGtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2RrID0gc2RrO1xyXG4gICAgICAgICAgICAgICAgc3dpdGNoIChtb2R1bGUpIHtcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIFNwTW9kdWxlLklNTU86XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2RrLk1hdHRlcnRhZy5yZWdpc3Rlckljb24oXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImljb24tdGlja2V0XCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbmZpZy5teV9jb25maWcuaWNvbl90aWNrZXQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2RrLk1hdHRlcnRhZy5yZWdpc3Rlckljb24oXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImljb24tZXF1aXBtZW50XCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbmZpZy5teV9jb25maWcuaWNvbl9lcXVpcG1lbnQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2RrLk1hdHRlcnRhZy5yZWdpc3Rlckljb24oXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImljb24tbWVhc3VyZVwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb25maWcubXlfY29uZmlnLmljb25fbWVhc3VyZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZGsuTWF0dGVydGFnLnJlZ2lzdGVySWNvbihcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiaWNvbi1kYXRhXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbmZpZy5teV9jb25maWcuaWNvbl9kYXRhLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZGsuTWVhc3VyZW1lbnRzLmRhdGEuc3Vic2NyaWJlKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQWRkZWQ6IGZ1bmN0aW9uIChpbmRleDogYW55LCBpdGVtOiB7IHBvaW50czogYW55OyB9LCBjb2xsZWN0aW9uOiBhbnkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgXCJpdGVtIGFkZGVkIHRvIHRoZSBjb2xsZWN0aW9uXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgIGluZGV4LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICBpdGVtLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhpcy5tZWFzdXJlbWVudHNbaW5kZXhdID0gaXRlbTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxhc3RNZWFzdXJlID0gaXRlbS5wb2ludHM7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LmJpbmQodGhpcyksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNvbGxlY3Rpb25VcGRhdGVkOiBmdW5jdGlvbiAoY29sbGVjdGlvbjogYW55KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coJ3RoZSBlbnRpcmUgdXAtdG8tZGF0ZSBjb2xsZWN0aW9uJywgY29sbGVjdGlvbik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5nZXREaXN0YW5jZUZvckxhc3RNZWFzdXJlbWVudCgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfS5iaW5kKHRoaXMpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZGsuTWVhc3VyZW1lbnRzLm1vZGUuc3Vic2NyaWJlKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gKG1lYXN1cmVtZW50TW9kZVN0YXRlOiB7IGFjdGl2ZTogYW55OyB9KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbWVhc3VyZW1lbnQgbW9kZSBzdGF0ZSBoYXMgY2hhbmdlZFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaXNNZWFzdXJlTW9kZU9uID0gbWVhc3VyZW1lbnRNb2RlU3RhdGUuYWN0aXZlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKCdJcyBtZWFzdXJlbWVudCBtb2RlIGN1cnJlbnRseSBhY3RpdmU/ICcsIG1lYXN1cmVtZW50TW9kZVN0YXRlLmFjdGl2ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LmJpbmQodGhpcyksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgU3BNb2R1bGUuTVVTRVVNOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNkay5NYXR0ZXJ0YWcucmVnaXN0ZXJJY29uKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJpY29uLWRhdGFcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29uZmlnLm15X2NvbmZpZy5pY29uX2RhdGEsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgU3BNb2R1bGUuSE9URUw6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2RrLk1hdHRlcnRhZy5yZWdpc3Rlckljb24oXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImljb25fcm9vbV9hdmFpbGFibGVcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29uZmlnLm15X2NvbmZpZy5pY29uX3Jvb21fYXZhaWxhYmxlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNkay5NYXR0ZXJ0YWcucmVnaXN0ZXJJY29uKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJpY29uX3Jvb21fdW5hdmFpbGFibGVcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29uZmlnLm15X2NvbmZpZy5pY29uX3Jvb21fdW5hdmFpbGFibGUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2RrLk1hdHRlcnRhZy5yZWdpc3Rlckljb24oXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImljb25fcm9vbV9jaG9zZW5cIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29uZmlnLm15X2NvbmZpZy5pY29uX3Jvb21fY2hvc2VuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2RrLk1hdHRlcnRhZy5yZWdpc3Rlckljb24oXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImljb25fcm9vbV92aWV3ZWRcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29uZmlnLm15X2NvbmZpZy5pY29uX3Jvb21fdmlld2VkXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgLy8gTG9hZCBNYXR0ZXJ0YWcgaWNvbnNcclxuICAgICAgICAgICAgICAgIHRoaXMuc2RrLk1hdHRlcnRhZy5yZWdpc3Rlckljb24oXHJcbiAgICAgICAgICAgICAgICAgICAgXCJpY29uLXBvc2l0aW9uXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb25maWcubXlfY29uZmlnLmljb25fcG9zaXRpb24sXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgLy8gM0QgcG9zaXRpb24ncyBwb2ludGVyXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNkay5Qb2ludGVyLmludGVyc2VjdGlvbi5zdWJzY3JpYmUoXHJcbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gKGludGVyc2VjdGlvbjogYW55KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucG9zZU1hdHRlcnBvcnQgPSBpbnRlcnNlY3Rpb247XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMub2xkUG9zZU1hdHRlcnBvcnRQb3NpdGlvbikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vbGRQb3NlTWF0dGVycG9ydFBvc2l0aW9uID0ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHg6IDAsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeTogMCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB6OiAwLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pbnRlcmFjdGlvbk1vZGUgIT09XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBWaWV3ZXJJbnRlcmFjdGlvbnMuREVGQVVMVCAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tYXR0ZXJ0YWdUb0ZvbGxvd1xyXG4gICAgICAgICAgICAgICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGZvbGxvdyB0aGUgcG9pbnRlciBhbmQgY2hhbmdlcyB0aGUgcG9zaXRpb24gb2YgdGhlIGxhc3QgdGFnXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAod2UgYXJlIGFib3V0IHRvIHZhbGlkYXRlLCBidXQgaXQgZXhpc3RzIGluIHNkayBhbHJlYWR5KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5lbmFibGVfZm9sbG93aW5nX3RhZyh0aGlzLm1hdHRlcnRhZ1RvRm9sbG93KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0uYmluZCh0aGlzKSxcclxuICAgICAgICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgICAgICAgLy9DYW1lcmEgbW9kZVxyXG4gICAgICAgICAgICAgICAgdGhpcy5zZGsuTW9kZS5jdXJyZW50LnN1YnNjcmliZSgobW9kZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaW5UcmFuc2l0aW9uU3dlZXAgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKG1vZGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnbW9kZS5kb2xsaG91c2UnOiB0aGlzLmN1cnJlbnRDYW1lcmFNb2RlID0gQ2FtZXJhTW9kZS5ET0xMSE9VU0U7IGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdtb2RlLmZsb29ycGxhbic6IHRoaXMuY3VycmVudENhbWVyYU1vZGUgPSBDYW1lcmFNb2RlLkZMT09SUExBTjsgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ21vZGUuaW5zaWRlJzogdGhpcy5jdXJyZW50Q2FtZXJhTW9kZSA9IENhbWVyYU1vZGUuSU5TSURFOyBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnbW9kZS50cmFuc2l0aW9uaW5nJzogdGhpcy5jdXJyZW50Q2FtZXJhTW9kZSA9IENhbWVyYU1vZGUuVFJBTlNJVElPTklORzsgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IHRoaXMuY3VycmVudENhbWVyYU1vZGUgPSBDYW1lcmFNb2RlLk9VVFNJREU7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMub25DYW1lcmFNb2RlQ2hhbmdlZC5uZXh0KHRoaXMuY3VycmVudENhbWVyYU1vZGUpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gQ2FtZXJhJ3Mgdmlld3BvaW50XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNkay5DYW1lcmEucG9zZS5zdWJzY3JpYmUoXHJcbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gc3Vic2NyKHBvc2U6IGFueSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBvc2VDYW1lcmEgPSBwb3NlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRDYW1lcmFQb3NlLm5leHQocG9zZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKCdDdXJyZW50IHBvc2l0aW9uIGlzICcsIHBvc2UucG9zaXRpb24pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZygnUm90YXRpb24gYW5nbGUgaXMgJywgcG9zZS5yb3RhdGlvbik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKFwiU3dlZXAgVVVJRCBpc1wiLCBwb3NlLnN3ZWVwKTtcclxuICAgICAgICAgICAgICAgICAgICB9LmJpbmQodGhpcyksXHJcbiAgICAgICAgICAgICAgICApO1xyXG5cclxuICAgICAgICAgICAgICAgIC8vIHN1YnNjcmliZSB0byBzd2VlcHNcclxuICAgICAgICAgICAgICAgIHRoaXMuc2RrLlN3ZWVwLmRhdGEuc3Vic2NyaWJlKHtcclxuICAgICAgICAgICAgICAgICAgICBvbkNvbGxlY3Rpb25VcGRhdGVkOiBmdW5jdGlvbiBzdWJzY3IoY29sbGVjdGlvbjoge30pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coY29sbGVjdGlvbik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3dlZXBzID0gT2JqZWN0LmtleXMoY29sbGVjdGlvbik7XHJcbiAgICAgICAgICAgICAgICAgICAgfS5iaW5kKHRoaXMpLFxyXG4gICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gc3Vic2NyaWJlIHRvIGN1cnJlbnQgc3dlZXBcclxuICAgICAgICAgICAgICAgIHRoaXMuc2RrLlN3ZWVwLmN1cnJlbnQuc3Vic2NyaWJlKFxyXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHN1YnNjcihjdXJyZW50U3dlZXA6IHsgc2lkOiBzdHJpbmc7IH0pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ2hhbmdlIHRvIHRoZSBjdXJyZW50IHN3ZWVwIGhhcyBvY2N1cnJlZC5cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRTd2VlcC5zaWQgPT09IFwiXCIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKCdOb3QgY3VycmVudGx5IHN0YXRpb25lZCBhdCBhIHN3ZWVwIHBvc2l0aW9uJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhcImVtbWl0aW5nIHN3ZWVwXCIsIGN1cnJlbnRTd2VlcC5zaWQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50U3dlZXAubmV4dChjdXJyZW50U3dlZXAuc2lkKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0uYmluZCh0aGlzKSxcclxuICAgICAgICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gU3Vic2NyaWJlIHRvIEZsb29yIGRhdGFcclxuICAgICAgICAgICAgICAgIHRoaXMuc2RrLkZsb29yLmRhdGEuc3Vic2NyaWJlKHtcclxuICAgICAgICAgICAgICAgICAgICBvbkNvbGxlY3Rpb25VcGRhdGVkOiBmdW5jdGlvbiB1cGQodGhpczogYW55LCBjb2xsZWN0aW9uOiBhbnkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5mbG9vcnMgPSBPYmplY3QudmFsdWVzKGNvbGxlY3Rpb24pO1xyXG4gICAgICAgICAgICAgICAgICAgIH0uYmluZCh0aGlzKSxcclxuICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgIC8vIG9uIHRhZyBjbGljayBvcGVuIGRldGFpbHMgcGFnZVxyXG4gICAgICAgICAgICAgICAgdGhpcy5zZGsub24oXCJ0YWcuY2xpY2tcIiwgKHNpZDogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gZ2V0IG9iamVjdCBvZiB0aGlzIHRhZ1xyXG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG1hdHRlcnRhZ0RhdGEgPSB0aGlzLmRpY3Rpb25uYXJ5VGFncy5nZXQoc2lkKT8ubWF0dGVydGFnRGF0YSE7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVybCA9IHRhZ1NlcnZpY2UuZ2V0VXJsRm9yU2VlRGV0YWlscyhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdHRlcnRhZ0RhdGEuZ2V0T2JqZWN0KCksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXR0ZXJ0YWdEYXRhLmdldFR5cGUoKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHVybCAhPT0gXCJcIikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy52aXNpYmlsaXR5U2VydmljZS5kZXRhaWxTaG93aW5nLm5leHQodHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbdXJsXSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJDYW5ub3Qgc2hvdyBkZXRhaWxzIGZvciB0YWdcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gUG9pbnRlciB0cmlja1xyXG4gICAgICAgICAgICAgICAgLy8gQ3JlYXRlIGEgZGl2IHRoYXQgd2lsbCBhcHBlYXIgd2hlbiB0aGUgY3Vyc29yIGlzIHN0aWxsXHJcbiAgICAgICAgICAgICAgICAvLyBJdCB3aWxsIGludGVyY2VwdCB0aGUgY2xpY2sgb2YgdGhlIG1vdXNlIGJlZm9yZSBpdCB0cmlnZXJyaW5nIHRoZSBNYXR0ZXJwb3J0J3MgdG91ciBuYXZpZ2F0aW9uXHJcbiAgICAgICAgICAgICAgICB0aGlzLnRpbWVyUG9pbnRlciA9IHNldEludGVydmFsKFxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlUG9pbnRlclRyaWNrLmJpbmQodGhpcyksXHJcbiAgICAgICAgICAgICAgICAgICAgNTAsXHJcbiAgICAgICAgICAgICAgICApO1xyXG5cclxuXHJcbiAgICAgICAgICAgICAgICAvKipcclxuICAgICAgICAgICAgICAgICAgICogVHJhbnNpdGlvbnNcclxuICAgICAgICAgICAgICAgICAgICovXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNkay5vbihcInZpZXdtb2RlLmNoYW5nZXN0YXJ0XCIsIGZ1bmN0aW9uICh0bywgZnJvbSkge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKCdTdGFydGluZyB0byBtb3ZlIHRvICcgKyB0byArICcgZnJvbSAnICsgZnJvbSk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pblRyYW5zaXRpb25Nb2RlID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIH0uYmluZCh0aGlzKSk7XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5zZGsub24oXCJ2aWV3bW9kZS5jaGFuZ2VlbmRcIiwgZnVuY3Rpb24gKG9sZE1vZGUsIG5ld01vZGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZygnRW5kZWQgdG8gbW92ZSB0byAnICsgbmV3TW9kZSArICcgZnJvbSAnICsgb2xkTW9kZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG5ld01vZGUgIT09IFwibW9kZS50cmFuc2l0aW9uaW5nXCIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pblRyYW5zaXRpb25Nb2RlID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfS5iaW5kKHRoaXMpKTtcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNkay5vbihzZGsuU3dlZXAuRXZlbnQuRU5URVIsXHJcbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gKG9sZFN3ZWVwLCBuZXdTd2VlcCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZygnTGVhdmluZyBzd2VlcCAnICsgb2xkU3dlZXApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZygnRW50ZXJpbmcgc3dlZXAgJyArIG5ld1N3ZWVwKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pblRyYW5zaXRpb25Td2VlcCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgIH0uYmluZCh0aGlzKVxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2RrLm9uKHNkay5Td2VlcC5FdmVudC5FWElULFxyXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIChmcm9tU3dlZXAsIHRvU3dlZXApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gICBjb25zb2xlLmxvZygnTGVhdmluZyBzd2VlcCAnICsgZnJvbVN3ZWVwKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gICBjb25zb2xlLmxvZygnVHJhbnNpdGlvbmluZyB0byBzd2VlcCAnICsgdG9Td2VlcCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaW5UcmFuc2l0aW9uU3dlZXAgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIH0uYmluZCh0aGlzKVxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgIHJlc29sdmUodHJ1ZSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQWRkIE1hdHRlcnRhZyB0byB0aGUgZGljdGlvbm5hcnkgb2YgdGhlIGN1cnJlbnQgdGFnc1xyXG4gICAgICogQHBhcmFtIG1hdHRlcnRhZ0lEXHJcbiAgICAgKiBAcGFyYW0gbWF0dGVydGFnRGF0YVxyXG4gICAgICogQHBhcmFtIHRhZ1R5cGVcclxuICAgICAqIEBwYXJhbSB0aWNrZXRJRFxyXG4gICAgICovXHJcbiAgICBhZGRNYXR0ZXJ0YWdUb09iamVjdChtYXR0ZXJ0YWdJRDogc3RyaW5nLCBtYXR0ZXJ0YWdEYXRhOiBNYXR0ZXJ0YWdEYXRhKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuc2RrKSB7XHJcbiAgICAgICAgICAgIHRoaXMubWF0dGVydGFncy5wdXNoKG1hdHRlcnRhZ0lEKTtcclxuICAgICAgICAgICAgdGhpcy5kaWN0aW9ubmFyeVRhZ3Muc2V0KG1hdHRlcnRhZ0lELCB7XHJcbiAgICAgICAgICAgICAgICBtYXR0ZXJ0YWdEYXRhLFxyXG4gICAgICAgICAgICAgICAgZWxlbWVudElEOiBtYXR0ZXJ0YWdEYXRhLmVsZW1lbnRJRCxcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHRoaXMuZWRpdFRhZ1N0eWxlKG1hdHRlcnRhZ0lELCBtYXR0ZXJ0YWdEYXRhKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0RGlzdGFuY2VGb3JMYXN0TWVhc3VyZW1lbnQoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMubGFzdE1lYXN1cmUubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICBjb25zdCBudW1iZXJQb2ludHMgPSB0aGlzLmxhc3RNZWFzdXJlLmxlbmd0aDtcclxuICAgICAgICAgICAgdGhpcy5kaXN0YW5jZXNMYXN0TWVhc3VyZSA9IFtdO1xyXG4gICAgICAgICAgICBmb3IgKGxldCBpbmRleCA9IDE7IGluZGV4IDwgbnVtYmVyUG9pbnRzOyBpbmRleCArPSAxKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBkaXN0YW5jZSA9IGdldERpc3RhbmNlQmV0d2VlblR3b1BvaW50cyhcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmxhc3RNZWFzdXJlW2luZGV4IC0gMV0sXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5sYXN0TWVhc3VyZVtpbmRleF0sXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5kaXN0YW5jZXNMYXN0TWVhc3VyZS5wdXNoKGRpc3RhbmNlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLnRha2VTY3JlZW5TaG90KCkudGhlbigocmVzKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmdvVG9NZW51KGB2aXNpdC8ke3RoaXMuY3VycmVudFNwYWNlSUR9L2FkZF9tZWFzdXJlbWVudGApO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbml0IHRoZSBNYXR0ZXJ0YWcgdGhhdCB3aWxsIGZvbGxvdyB0aGUgY3Vyc29yXHJcbiAgICAgKiBAcGFyYW0gdGFnVHlwZVxyXG4gICAgICovXHJcbiAgICBhc3luYyBhZGRfY3Vyc29yX21hdHRlcnRhZyhcclxuICAgICAgICB0YWdUeXBlOiBQb2lUeXBlLFxyXG4gICAgICAgIGVsZW1lbnQ/OiBhbnksXHJcbiAgICAgICAgcG9zaXRpb25pbmc6IGJvb2xlYW4gPSBmYWxzZSxcclxuICAgICkge1xyXG4gICAgICAgIGlmICghdGhpcy5wb3NlTWF0dGVycG9ydCkgcmV0dXJuO1xyXG4gICAgICAgIGNvbnN0IG1hdHRlcnRhZ0RhdGEgPSBuZXcgTWF0dGVydGFnRGF0YSh0YWdUeXBlKTtcclxuICAgICAgICBpZiAocG9zaXRpb25pbmcpIHtcclxuICAgICAgICAgICAgLy8gc2V0IHRoZSBjb29yZGluYXRlcyBvZiB0aGUgZXhpc3RpbmcgdGFnXHJcbiAgICAgICAgICAgIGNvbnN0IFtwb2ldID0gZWxlbWVudC5wb2lzLml0ZW1zO1xyXG4gICAgICAgICAgICBpZiAocG9pICYmIHBvaS5jb29yZGluYXRlKSB7XHJcbiAgICAgICAgICAgICAgICBtYXR0ZXJ0YWdEYXRhLnNldFBvc2l0aW9uKEpTT04ucGFyc2UocG9pLmNvb3JkaW5hdGUpKTtcclxuICAgICAgICAgICAgICAgIG1hdHRlcnRhZ0RhdGEuc2V0UG9pKHBvaSk7IC8vIHRvIGtlZXAgY3VzdG9tIHRhZ0lvbiBhbmQgb3BhY2l0eVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIG1hdHRlcnRhZ0RhdGEuc2V0U3dlZXBJRCh0aGlzLnBvc2VDYW1lcmEuc3dlZXApO1xyXG4gICAgICAgIG1hdHRlcnRhZ0RhdGEuc2V0Um90YXRpb24odGhpcy5wb3NlQ2FtZXJhLnJvdGF0aW9uKTtcclxuICAgICAgICBpZiAoZWxlbWVudCkge1xyXG4gICAgICAgICAgICBtYXR0ZXJ0YWdEYXRhLnNldE9iamVjdChlbGVtZW50LCB0YWdUeXBlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5tYXR0ZXJ0YWdUb0ZvbGxvdyA9IGF3YWl0IHRoaXMuYWRkX21hdHRlcnRhZ190b192aWV3ZXIoXHJcbiAgICAgICAgICAgIG1hdHRlcnRhZ0RhdGEsXHJcbiAgICAgICAgKTtcclxuICAgICAgICBpZiAocG9zaXRpb25pbmcpIHtcclxuICAgICAgICAgICAgdGhpcy5zZGsuTWF0dGVydGFnLmVkaXRJY29uKFxyXG4gICAgICAgICAgICAgICAgdGhpcy5tYXR0ZXJ0YWdUb0ZvbGxvdyxcclxuICAgICAgICAgICAgICAgIFwiaWNvbi1wb3NpdGlvblwiLFxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB0aGlzLnNkay5NYXR0ZXJ0YWcuZWRpdE9wYWNpdHkodGhpcy5tYXR0ZXJ0YWdUb0ZvbGxvdywgMSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQWRkIE1hdHRlcnRhZyBmcm9tIGl0cyBkYXRhXHJcbiAgICAgKiBAcGFyYW0gdGFnSURcclxuICAgICAqIEBwYXJhbSB0YWdUeXBlXHJcbiAgICAgKiBAcGFyYW0gbWF0dGVydGFnRGF0YVxyXG4gICAgICovXHJcbiAgICBhc3luYyBhZGRfbWF0dGVydGFnX3RvX3ZpZXdlcihcclxuICAgICAgICBtYXR0ZXJ0YWdEYXRhOiBNYXR0ZXJ0YWdEYXRhLFxyXG4gICAgKTogUHJvbWlzZTxzdHJpbmcgfCBudWxsPiB7XHJcbiAgICAgICAgbGV0IHNpZExpc3Q7XHJcbiAgICAgICAgaWYgKCF0aGlzLnNkaykge1xyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgc2lkTGlzdCA9IGF3YWl0IHRoaXMuc2RrLk1hdHRlcnRhZy5hZGQobWF0dGVydGFnRGF0YS5nZXREYXRhKCkpO1xyXG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFxyXG4gICAgICAgICAgICAgICAgXCJUYWcgZG9lcyBub3QgYmVsb25nIHRvIHRoZSB2aXNpdFwiLFxyXG4gICAgICAgICAgICAgICAgZXJyb3IsXHJcbiAgICAgICAgICAgICAgICBtYXR0ZXJ0YWdEYXRhLmdldERhdGEoKSxcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHNpZExpc3QpIHtcclxuICAgICAgICAgICAgY29uc3QgbWF0dGVydGFnSUQgPSBzaWRMaXN0WzBdO1xyXG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhcImFkZGVkIHRhZ1wiLCBtYXR0ZXJ0YWdEYXRhLmdldFR5cGUoKSwgbWF0dGVydGFnSUQpO1xyXG4gICAgICAgICAgICB0aGlzLmFkZE1hdHRlcnRhZ1RvT2JqZWN0KG1hdHRlcnRhZ0lELCBtYXR0ZXJ0YWdEYXRhKTtcclxuICAgICAgICAgICAgcmV0dXJuIG1hdHRlcnRhZ0lEO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgVXRpbHMgLSBNYXR0ZXJ0YWdcclxuICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xyXG5cclxuICAgIGFkZE1hdHRlcnRhZygpIHtcclxuICAgICAgICB0aGlzLnNldEludGVyYWN0aW9uTW9kZShWaWV3ZXJJbnRlcmFjdGlvbnMuREVGQVVMVCk7XHJcbiAgICAgICAgdGhpcy5hY3Rpb25fb3Blbl9tZW51KHRoaXMuZ2V0TWVudVRvT3BlbkZvckxhc3RUYWcoKSk7XHJcbiAgICAgICAgdGhpcy5yZXNldEFjdGlvblRpbWUoKTtcclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGVQb2ludGVyVHJpY2soKSB7XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICB0aGlzLmludGVyYWN0aW9uTW9kZSAhPT0gVmlld2VySW50ZXJhY3Rpb25zLkRFRkFVTFQgJiZcclxuICAgICAgICAgICAgdGhpcy5tYXR0ZXJ0YWdUb0ZvbGxvdyAmJlxyXG4gICAgICAgICAgICB0aGlzLnBvc2VNYXR0ZXJwb3J0ICYmXHJcbiAgICAgICAgICAgIHRoaXMuZ2V0RGlzdFBvc2l0aW9uKFxyXG4gICAgICAgICAgICAgICAgdGhpcy5wb3NlTWF0dGVycG9ydC5wb3NpdGlvbixcclxuICAgICAgICAgICAgICAgIHRoaXMub2xkUG9zZU1hdHRlcnBvcnRQb3NpdGlvbixcclxuICAgICAgICAgICAgKSA+IDI1XHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIHRoaXMucG9pbnRlckJ1dHRvbi5zdHlsZS5kaXNwbGF5ID0gXCJub25lXCI7XHJcblxyXG4gICAgICAgICAgICBjb25zdCBzaXplID0ge1xyXG4gICAgICAgICAgICAgICAgdzogdGhpcy5jb250YWluZXIuY2xpZW50V2lkdGgsXHJcbiAgICAgICAgICAgICAgICBoOiB0aGlzLmNvbnRhaW5lci5jbGllbnRIZWlnaHQsXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIGNvbnN0IGNvb3JkcyA9IHRoaXMuc2RrLkNvbnZlcnNpb24ud29ybGRUb1NjcmVlbihcclxuICAgICAgICAgICAgICAgIHRoaXMucG9zZU1hdHRlcnBvcnQucG9zaXRpb24sXHJcbiAgICAgICAgICAgICAgICB0aGlzLnBvc2VDYW1lcmEsXHJcbiAgICAgICAgICAgICAgICBzaXplLFxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB0aGlzLnBvaW50ZXJCdXR0b24uc3R5bGUubGVmdCA9IGAke2Nvb3Jkcy54ICogTWF0aC5zaWduKGNvb3Jkcy54KSAtIDI1XHJcbiAgICAgICAgICAgICAgICB9cHhgO1xyXG4gICAgICAgICAgICB0aGlzLnBvaW50ZXJCdXR0b24uc3R5bGUudG9wID0gYCR7Y29vcmRzLnkgKiBNYXRoLnNpZ24oY29vcmRzLngpIC0gMjVcclxuICAgICAgICAgICAgICAgIH1weGA7XHJcbiAgICAgICAgICAgIHRoaXMub2xkUG9zZU1hdHRlcnBvcnRQb3NpdGlvbiA9IHtcclxuICAgICAgICAgICAgICAgIC4uLnRoaXMucG9zZU1hdHRlcnBvcnQucG9zaXRpb24sXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5wb2ludGVyQnV0dG9uLnN0eWxlLmRpc3BsYXkgPSBcImJsb2NrXCI7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGFkZE5ld0ljb25BbmRTZXRGb3JUYWcobWF0dGVydGFnSUQ6IHN0cmluZywgaWNvblBhdGg6IHN0cmluZykge1xyXG4gICAgICAgIGF3YWl0IHRoaXMuc2RrLk1hdHRlcnRhZy5yZWdpc3Rlckljb24oXHJcbiAgICAgICAgICAgIGBpY29uXyR7bWF0dGVydGFnSUR9YCxcclxuICAgICAgICAgICAgaWNvblBhdGgsXHJcbiAgICAgICAgKTtcclxuICAgICAgICB0aGlzLnNkay5NYXR0ZXJ0YWcuZWRpdEljb24obWF0dGVydGFnSUQsIGBpY29uXyR7bWF0dGVydGFnSUR9YCk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgc2V0UmVnaXN0cmVkSWNvbkZvclRhZyhtYXR0ZXJ0YWdJRDogc3RyaW5nLCBpY29uTmFtZTogc3RyaW5nKSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgdGhpcy5zZGsuTWF0dGVydGFnLmVkaXRJY29uKG1hdHRlcnRhZ0lELCBpY29uTmFtZSk7XHJcbiAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcImNvdWxkIG5vdCBlZGl0IEljb24gd2l0aCBuYW1lIFwiLCBpY29uTmFtZSwgXCIuIElzIGl0IHJlZ2lzdGVyZWQ/XCIpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcblxyXG4gICAgYXN5bmMgZWRpdFRhZ1N0eWxlKG1hdHRlcnRhZ0lEOiBzdHJpbmcsIG1hdHRlcnRhZ0RhdGE6IE1hdHRlcnRhZ0RhdGEpIHtcclxuICAgICAgICBpZiAodGhpcy5TUE1vZHVsZSA9PT0gU3BNb2R1bGUuSE9URUwpIHtcclxuICAgICAgICAgICAgY29uc3Qgcm9vbSA9IG1hdHRlcnRhZ0RhdGEuZ2V0T2JqZWN0KCk7XHJcbiAgICAgICAgICAgIGxldCBpY29uTmFtZSA9IGBpY29uX3Jvb21gO1xyXG4gICAgICAgICAgICBpZiAocm9vbS5hdmFpbGFibGUpIHtcclxuICAgICAgICAgICAgICAgIGljb25OYW1lID0gYCR7aWNvbk5hbWV9X2F2YWlsYWJsZWA7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBpY29uTmFtZSA9IGAke2ljb25OYW1lfV91bmF2YWlsYWJsZWA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5zZGsuTWF0dGVydGFnLmVkaXRJY29uKG1hdHRlcnRhZ0lELCBpY29uTmFtZSk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3Qgc3RyaW5nVGFnVHlwZSA9IHBvaVR5cGVUb1N0cmluZyhtYXR0ZXJ0YWdEYXRhLmdldFR5cGUoKSk7XHJcbiAgICAgICAgbGV0IG9wYWNpdHkgPSB0aGlzLmNvbmZpZy5teV9jb25maWcuREVGQVVMVF9PUEFDSVRZX1RBRztcclxuICAgICAgICBsZXQgaWNvbk5hbWUgPSBgaWNvbi0ke3N0cmluZ1RhZ1R5cGV9YDtcclxuICAgICAgICBjb25zdCBwb2kgPSBtYXR0ZXJ0YWdEYXRhLmdldFBvaSgpO1xyXG4gICAgICAgIGlmIChwb2kgJiYgcG9pLnRhZ0ljb24pIHtcclxuICAgICAgICAgICAgY29uc3QgdGFnSWNvbiA9IEpTT04ucGFyc2UocG9pLnRhZ0ljb24pO1xyXG4gICAgICAgICAgICAvLyBUT0RPIGZvciBpbmRpY2F0b3JzXHJcbiAgICAgICAgICAgIGlmIChtYXR0ZXJ0YWdEYXRhLmdldFR5cGUoKSA9PT0gUG9pVHlwZS5EQVRBKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBmZWF0dXJlID0gbWF0dGVydGFnRGF0YS5nZXRPYmplY3QoKTtcclxuICAgICAgICAgICAgICAgIGlmIChmZWF0dXJlLnR5cGUgPT09IEZlYXR1cmVUeXBlLklORElDQVRPUl9URU1QKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGFnSWNvbi5zcmMgPSB0aGlzLnRhZ1NlcnZpY2UuZ2V0SWNvblRhZ0ltYWdlRm9yRmVhdHVyZShcclxuICAgICAgICAgICAgICAgICAgICAgICAgZmVhdHVyZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgcG9pLFxyXG4gICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHRhZ0ljb24uc3JjKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBwYXRoU2lnbmVkID0gYXdhaXQgdGhpcy50YWdTZXJ2aWNlLmdldFNpZ25lZFRhZ0ljb25Tb3VyY2UodGFnSWNvbi5zcmMpO1xyXG4gICAgICAgICAgICAgICAgaWYgKHBhdGhTaWduZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpY29uTmFtZSA9IGBpY29uLSR7c3RyaW5nVGFnVHlwZX0tJHttYXR0ZXJ0YWdJRH0tJHttYXR0ZXJ0YWdEYXRhLmN1c3RvbUljb25JbmRleH1gO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnNkay5NYXR0ZXJ0YWcucmVnaXN0ZXJJY29uKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWNvbk5hbWUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRoU2lnbmVkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXR0ZXJ0YWdEYXRhLmN1c3RvbUljb25JbmRleCArPSAxO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2gge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcImVycm9yIHJlZ2lzdGVySWNvblwiKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHRhZ0ljb24ub3BhY2l0eSkge1xyXG4gICAgICAgICAgICAgICAgb3BhY2l0eSA9IHRhZ0ljb24ub3BhY2l0eTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICB0aGlzLnNkay5NYXR0ZXJ0YWcuZWRpdEljb24obWF0dGVydGFnSUQsIGljb25OYW1lKTtcclxuICAgICAgICAgICAgdGhpcy5zZGsuTWF0dGVydGFnLmVkaXRPcGFjaXR5KG1hdHRlcnRhZ0lELCBvcGFjaXR5KTtcclxuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcIkVycm9yIGVkaXRJY29uIG9yIG9wYWNpdHlcIiwgZXJyb3IpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcblxyXG4gICAgZW5hYmxlX2ZvbGxvd2luZ190YWcobWF0dGVydGFnOiBhbnkpIHtcclxuICAgICAgICB0aGlzLnNkay5NYXR0ZXJ0YWcuZWRpdFBvc2l0aW9uKG1hdHRlcnRhZywge1xyXG4gICAgICAgICAgICBhbmNob3JQb3NpdGlvbjoge1xyXG4gICAgICAgICAgICAgICAgeDogdGhpcy5wb3NlTWF0dGVycG9ydC5wb3NpdGlvbi54ICogMSxcclxuICAgICAgICAgICAgICAgIHk6IHRoaXMucG9zZU1hdHRlcnBvcnQucG9zaXRpb24ueSAqIDEsXHJcbiAgICAgICAgICAgICAgICB6OiB0aGlzLnBvc2VNYXR0ZXJwb3J0LnBvc2l0aW9uLnogKiAxLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBzdGVtVmVjdG9yOiB7XHJcbiAgICAgICAgICAgICAgICB4OiB0aGlzLnBvc2VNYXR0ZXJwb3J0Lm5vcm1hbC54ICogMC4zLFxyXG4gICAgICAgICAgICAgICAgeTogdGhpcy5wb3NlTWF0dGVycG9ydC5ub3JtYWwueSAqIDAuMyxcclxuICAgICAgICAgICAgICAgIHo6IHRoaXMucG9zZU1hdHRlcnBvcnQubm9ybWFsLnogKiAwLjMsXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmVzZXRBY3Rpb25UaW1lKCkge1xyXG4gICAgICAgIHRoaXMubGFzdEFjdGlvblRpbWUgPSAtMTtcclxuICAgIH1cclxuXHJcbiAgICBnb1RvTGFzdFRhZygpIHtcclxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgbGFzdFRhZyA9IHRoaXMuZ2V0TGFzdFRhZygpO1xyXG4gICAgICAgICAgICB0aGlzLmdvVG9UYWcobGFzdFRhZyk7XHJcbiAgICAgICAgfSwgMjAwMCk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZ29Ub1RhZyhtYXR0ZXJ0YWdJRDogc3RyaW5nKSB7XHJcbiAgICAgICAgaWYgKG1hdHRlcnRhZ0lEID09PSBcIlwiKSByZXR1cm47XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgdGhpcy5vbkdvVG9UYWcubmV4dChtYXR0ZXJ0YWdJRCk7XHJcblxyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLnNkay5NYXR0ZXJ0YWcubmF2aWdhdGVUb1RhZyhcclxuICAgICAgICAgICAgICAgIG1hdHRlcnRhZ0lELFxyXG4gICAgICAgICAgICAgICAgdGhpcy5zZGsuTWF0dGVydGFnLlRyYW5zaXRpb24uRkxZLFxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiY2Fubm90IG5hdmlnYXRlIHRvIHRhZ1wiLCBlcnJvcik7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGdvVG9NZW51KG1lbnVVcmw6IGFueSkge1xyXG4gICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFttZW51VXJsXSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXQgdGhlIGRpc3RhbmNlIGJldHd3ZWVuIHR3byAzRCBwb3NpdGlvbnNcclxuICAgICAqIFVzZWQgaW4gb3JkZXIgdG8gc2VlIGhvdyBtdWNoIHRoZSBjdXJzb3IgaGFzIG1vdmVkIGZyb20gdGhlIHByZXZpb3VzIHBvc2l0aW9uXHJcbiAgICAgKiBAcGFyYW0gcG9zMVxyXG4gICAgICogQHBhcmFtIHBvczJcclxuICAgICAqL1xyXG4gICAgZ2V0RGlzdFBvc2l0aW9uKHBvczE6IGFueSwgcG9zMjogYW55KSB7XHJcbiAgICAgICAgY29uc3Qgc2l6ZSA9IHtcclxuICAgICAgICAgICAgdzogdGhpcy5jb250YWluZXIuY2xpZW50V2lkdGgsXHJcbiAgICAgICAgICAgIGg6IHRoaXMuY29udGFpbmVyLmNsaWVudEhlaWdodCxcclxuICAgICAgICB9O1xyXG4gICAgICAgIGNvbnN0IGNvb3JkczEgPSB0aGlzLnNkay5Db252ZXJzaW9uLndvcmxkVG9TY3JlZW4oXHJcbiAgICAgICAgICAgIHBvczEsXHJcbiAgICAgICAgICAgIHRoaXMucG9zZUNhbWVyYSxcclxuICAgICAgICAgICAgc2l6ZSxcclxuICAgICAgICApO1xyXG4gICAgICAgIGNvbnN0IGNvb3JkczIgPSB0aGlzLnNkay5Db252ZXJzaW9uLndvcmxkVG9TY3JlZW4oXHJcbiAgICAgICAgICAgIHBvczIsXHJcbiAgICAgICAgICAgIHRoaXMucG9zZUNhbWVyYSxcclxuICAgICAgICAgICAgc2l6ZSxcclxuICAgICAgICApO1xyXG4gICAgICAgIHJldHVybiBNYXRoLnNxcnQoXHJcbiAgICAgICAgICAgIChjb29yZHMxLnggLSBjb29yZHMyLngpICoqIDIgKyAoY29vcmRzMS55IC0gY29vcmRzMi55KSAqKiAyLFxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlUG9zaXRpb25JblRhZ0RhdGEoKSB7XHJcbiAgICAgICAgY29uc3QgbGFzdFRhZyA9IHRoaXMuZ2V0TGFzdFRhZygpO1xyXG4gICAgICAgIGlmIChsYXN0VGFnKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZGljdGlvbm5hcnlUYWdzLmdldChsYXN0VGFnKSEubWF0dGVydGFnRGF0YS5zZXRQb3NpdGlvbihcclxuICAgICAgICAgICAgICAgIHRoaXMucG9zZU1hdHRlcnBvcnQucG9zaXRpb24sXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIHRoaXMuZGljdGlvbm5hcnlUYWdzLmdldChsYXN0VGFnKSEubWF0dGVydGFnRGF0YS5zZXROb3JtYWwoXHJcbiAgICAgICAgICAgICAgICB0aGlzLnBvc2VNYXR0ZXJwb3J0Lm5vcm1hbCxcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgdGhpcy51cGRhdGVNYXR0ZXJUYWdGcm9tSWQobGFzdFRhZyk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIHVwZGF0ZU1hdHRlclRhZ0Zyb21JZChcclxuICAgICAgICBtYXR0ZXJ0YWdJRDogc3RyaW5nLFxyXG4gICAgICAgIG9iamVjdDogYW55ID0gbnVsbCxcclxuICAgICAgICB0YWdUeXBlOiBQb2lUeXBlIHwgbnVsbCA9IG51bGwsXHJcbiAgICApIHtcclxuICAgICAgICB0aGlzLnNkay5NYXR0ZXJ0YWcuZWRpdEJpbGxib2FyZChcclxuICAgICAgICAgICAgbWF0dGVydGFnSUQsXHJcbiAgICAgICAgICAgIHRoaXMuZGljdGlvbm5hcnlUYWdzLmdldChtYXR0ZXJ0YWdJRCkhLm1hdHRlcnRhZ0RhdGEuZ2V0RGF0YSgpLFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgaWYgKG9iamVjdCAmJiB0YWdUeXBlKSB7XHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuaW5qZWN0SHRtbEluVGFnKHRhZ1R5cGUsIG9iamVjdCwgbWF0dGVydGFnSUQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBhd2FpdCB0aGlzLmVkaXRUYWdTdHlsZShcclxuICAgICAgICAgICAgbWF0dGVydGFnSUQsXHJcbiAgICAgICAgICAgIHRoaXMuZGljdGlvbm5hcnlUYWdzLmdldChtYXR0ZXJ0YWdJRCkhLm1hdHRlcnRhZ0RhdGEsXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyB1cGRhdGVJbmplY3RlZEh0bWxGb3JUYWdJRChtYXR0ZXJ0YWdJRDogc3RyaW5nLFxyXG4gICAgICAgIG9iamVjdDogYW55LFxyXG4gICAgICAgIHRhZ1R5cGU6IFBvaVR5cGUpIHtcclxuICAgICAgICBhd2FpdCB0aGlzLmluamVjdEh0bWxJblRhZyh0YWdUeXBlLCBvYmplY3QsIG1hdHRlcnRhZ0lEKTtcclxuICAgIH1cclxuXHJcbiAgICBkZWxldGVNYXR0ZXJ0YWdGcm9tSWQobWF0dGVydGFnSUQ6IHN0cmluZykge1xyXG4gICAgICAgIHRoaXMuc2RrLk1hdHRlcnRhZy5yZW1vdmUobWF0dGVydGFnSUQpO1xyXG4gICAgICAgIHRoaXMuZGljdGlvbm5hcnlUYWdzLmRlbGV0ZShtYXR0ZXJ0YWdJRCk7XHJcbiAgICB9XHJcblxyXG4gICAgZGVsZXRlTGFzdE1hdHRlcnRhZygpIHtcclxuICAgICAgICBjb25zdCBtYXR0ZXJ0YWdJRCA9IHRoaXMubWF0dGVydGFncy5wb3AoKTtcclxuICAgICAgICBpZiAobWF0dGVydGFnSUQpIHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coXCJhYm91dCB0byBkZWxldGVcIiwgbWF0dGVydGFnSUQpO1xyXG4gICAgICAgICAgICB0aGlzLmRlbGV0ZU1hdHRlcnRhZ0Zyb21JZChtYXR0ZXJ0YWdJRCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbiAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgVXRpbHMgLSBUb29sYmFyXHJcbiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cclxuXHJcbiAgICBhc3luYyBhY3Rpb25fdG9vbGJveF9mbG9vcnBsYW4oKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuaW5UcmFuc2l0aW9uTW9kZSB8fCB0aGlzLmluVHJhbnNpdGlvblN3ZWVwKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwidmlld2VyIGlzIGluIHRyYW5zaXRpb24sIGNhbm5vdCBnbyBmbG9vcnBsYW5cIik7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5zZGsuTW9kZS5tb3ZlVG8oXCJtb2RlLmZsb29ycGxhblwiKTtcclxuICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiY2Fubm90IGdvIHRvIGZsb29ycGxhblwiLCBlKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgYWN0aW9uX3Rvb2xib3hfaW5zaWRlX3ZpZXcoKSB7XHJcbiAgICAgICAgdGhpcy5zZGsuTW9kZS5tb3ZlVG8oXCJtb2RlLmluc2lkZVwiKTtcclxuICAgIH1cclxuXHJcbiAgICBhY3Rpb25TaG93QWxsRmxvb3JzKCkge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2RrLkZsb29yLnNob3dBbGwoKTtcclxuICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiY2Fubm90IHNob3cgYWxsIGZsb29yc1wiLCBlKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgYWN0aW9uX3Rvb2xib3hfZG9sbGhvdXNlKCkge1xyXG4gICAgICAgIHNldFRpbWVvdXQoYXN5bmMgKCkgPT4ge1xyXG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhcIm1vZGU6IFwiLCB0aGlzLmluVHJhbnNpdGlvbk1vZGUsIFwiIHN3ZWVwOiBcIiwgdGhpcy5pblRyYW5zaXRpb25Td2VlcCk7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmluVHJhbnNpdGlvbk1vZGUgfHwgdGhpcy5pblRyYW5zaXRpb25Td2VlcCkge1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJ2aWV3ZXIgaXMgaW4gdHJhbnNpdGlvbiwgY2Fubm90IGdvIGRvbGxob3VzZVwiKTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5zZGsuTW9kZS5tb3ZlVG8oXCJtb2RlLmRvbGxob3VzZVwiKTtcclxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJjYW5ub3QgZ28gdG8gZG9sbGhvdXNlXCIsIGUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSwgMTIwMCk7XHJcbiAgICB9XHJcblxyXG4gICAgYWN0aW9uX3Rvb2xib3hfbWVzdXJlKCkge1xyXG4gICAgICAgIGNvbnN0IG5ld1N0YXRlID0gIXRoaXMuaXNNZWFzdXJlTW9kZU9uO1xyXG4gICAgICAgIHRoaXMuc2RrLk1lYXN1cmVtZW50cy50b2dnbGVNb2RlKG5ld1N0YXRlKS50aGVuKCgpID0+IHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coXHJcbiAgICAgICAgICAgICAgICBgTWVhc3VyZW1lbnQgbW9kZSBpcyBub3cgJHtuZXdTdGF0ZSA/IFwiZW5hYmxlZFwiIDogXCJkaXNhYmxlZFwifWAsXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgYWN0aW9uX3Rvb2xib3hfY2FuY2VsX21lc3VyZSgpIHtcclxuICAgICAgICBpZiAodGhpcy5pc01lYXN1cmVNb2RlT24pIHtcclxuICAgICAgICAgICAgdGhpcy5hY3Rpb25fdG9vbGJveF9tZXN1cmUoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIEFjdGlvbnNcclxuICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xyXG5cclxuICAgIGFzeW5jIGFjdGlvbl9hZGRfbWF0dGVydGFnX2Zyb21fUE9JKFxyXG4gICAgICAgIHRhZ1R5cGU6IFBvaVR5cGUsXHJcbiAgICAgICAgb2JqZWN0OiBEYk9iamVjdFR5cGUsXHJcbiAgICAgICAgcG9pOiBQT0ksXHJcbiAgICApOiBQcm9taXNlPGFueT4ge1xyXG4gICAgICAgIC8vIGNoZWNrIGlmIHRhZyBleGlzdHMgYWxyZWFkeVxyXG4gICAgICAgIGNvbnN0IHsgdGFnLCBzd2VlcCB9ID0gdGhpcy5nZXRUYWdGcm9tRWxlbWVudElkKG9iamVjdC5pZCk7XHJcbiAgICAgICAgaWYgKHRhZykge1xyXG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhcInRhZyBleGlzdHNcIiwgb2JqZWN0KVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IG1hdHRlcnRhZ0RhdGE6IE1hdHRlcnRhZ0RhdGEgPSBuZXcgTWF0dGVydGFnRGF0YSh0YWdUeXBlKTtcclxuICAgICAgICBtYXR0ZXJ0YWdEYXRhLnNldE9iamVjdChvYmplY3QsIHRhZ1R5cGUpO1xyXG4gICAgICAgIGlmIChwb2kuY29vcmRpbmF0ZSkge1xyXG4gICAgICAgICAgICBtYXR0ZXJ0YWdEYXRhLnNldFBvc2l0aW9uKEpTT04ucGFyc2UocG9pLmNvb3JkaW5hdGUpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHBvaS5tZXRhZGF0YSkge1xyXG4gICAgICAgICAgICBjb25zdCB0YWdNZXRhZGF0YSA9IEpTT04ucGFyc2UocG9pLm1ldGFkYXRhKTtcclxuICAgICAgICAgICAgaWYgKHRhZ01ldGFkYXRhLm5vcm1hbCkge1xyXG4gICAgICAgICAgICAgICAgbWF0dGVydGFnRGF0YS5zZXROb3JtYWwodGFnTWV0YWRhdGEubm9ybWFsKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIG1hdHRlcnRhZ0RhdGEuc2V0Tm9ybWFsKHsgeDogMCwgeTogLTAuMTUsIHo6IDAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHBvaS5tYXR0ZXJwb3J0U3dlZXBJRCkge1xyXG4gICAgICAgICAgICBtYXR0ZXJ0YWdEYXRhLnNldFN3ZWVwSUQocG9pLm1hdHRlcnBvcnRTd2VlcElEKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgbWF0dGVydGFnRGF0YS5zZXRQb2kocG9pKTtcclxuXHJcbiAgICAgICAgY29uc3QgY3JlYXRlZFRhZyA9IGF3YWl0IHRoaXMuYWRkX21hdHRlcnRhZ190b192aWV3ZXIobWF0dGVydGFnRGF0YSk7XHJcbiAgICAgICAgaWYgKGNyZWF0ZWRUYWcgJiYgdGhpcy5zZGspIHtcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5pbmplY3RIdG1sSW5UYWcodGFnVHlwZSwgb2JqZWN0LCBjcmVhdGVkVGFnKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgaW5qZWN0SHRtbEluVGFnKFxyXG4gICAgICAgIHRhZ1R5cGU6IFBvaVR5cGUsXHJcbiAgICAgICAgb2JqZWN0OiBEYk9iamVjdFR5cGUsXHJcbiAgICAgICAgdGFnSUQ6IHN0cmluZyxcclxuICAgICkge1xyXG4gICAgICAgIGxldCB7IGh0bWwsIGhlaWdodCB9ID0gYXdhaXQgdGhpcy50YWdTZXJ2aWNlLmdldEh0bWxUb0luamVjdChcclxuICAgICAgICAgICAgdGFnVHlwZSxcclxuICAgICAgICAgICAgb2JqZWN0LFxyXG4gICAgICAgICAgICB0aGlzLmNvbmZpZy5teV9jb25maWcuREVGQVVMVF9IRUlHSFRfSFRNTF9UQUdcclxuICAgICAgICApO1xyXG4gICAgICAgIGlmIChodG1sICE9PSBcIlwiICYmIHRoaXMuc2RrKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHNjcmlwdFRhZyA9IHRoaXMudGFnU2VydmljZS5nZXRTY3JpcHRGb3JUYWcob2JqZWN0LCB0YWdUeXBlKTtcclxuICAgICAgICAgICAgaHRtbCArPSBgJHtzY3JpcHRUYWd9YDtcclxuICAgICAgICAgICAgdGhpcy5zZGsuTWF0dGVydGFnLmluamVjdEhUTUwodGFnSUQsIGh0bWwsIHtcclxuICAgICAgICAgICAgICAgIHNpemU6IHtcclxuICAgICAgICAgICAgICAgICAgICB3OiB0aGlzLmNvbmZpZy5teV9jb25maWcuREVGQVVMVF9XSURUSF9IVE1MX1RBRyxcclxuICAgICAgICAgICAgICAgICAgICBoOiBoZWlnaHQsXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgLnRoZW4oKG1lc3NlbmdlcikgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnRhZ01lc3Nlbmdlck9uKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50YWdNZXNzZW5nZXJPbiA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaW1hZ2VDbGljayA9IChmZWF0dXJlSUQ6IHN0cmluZykgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhcImltYWdlIGNsaWNrIGhhbmRsZXJcIiwgZmVhdHVyZUlEKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50YWdTZXJ2aWNlLm9uQWN0aW9uSW1hZ2VDbGljayhmZWF0dXJlSUQpO1xyXG4gICAgICAgICAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGF1ZGlvQ2xpY2sgPSAoYXVkaW9Db21tZW50SUQ6IHN0cmluZykgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhcImF1ZGlvIGNsaWNrIGhhbmRsZXJcIiwgYXVkaW9Db21tZW50SUQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRhZ1NlcnZpY2Uub25BY3Rpb25BdWRpb0NsaWNrKGF1ZGlvQ29tbWVudElEKTtcclxuICAgICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHZpZGVvQ2xpY2sgPSAodXJsOiBzdHJpbmcpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50YWdTZXJ2aWNlLm9uQWN0aW9uQXVkaW9DbGljayh1cmwpO1xyXG4gICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICAgICAgbWVzc2VuZ2VyLm9uKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBUYWdBY3Rpb24uREVUQUlMX0NMSUNLLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRhZ1NlcnZpY2Uub25BY3Rpb25EZXRhaWxDbGljay5iaW5kKHRoaXMudGFnU2VydmljZSlcclxuICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgIG1lc3Nlbmdlci5vbihcclxuICAgICAgICAgICAgICAgICAgICAgICAgVGFnQWN0aW9uLlRJQ0tFVF9DTElDSyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50YWdTZXJ2aWNlLm9uQWN0aW9uRGV0YWlsQ2xpY2suYmluZCh0aGlzLnRhZ1NlcnZpY2UpXHJcbiAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgICBtZXNzZW5nZXIub24oXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFRhZ0FjdGlvbi5BVURJT19DTElDSywgYXVkaW9DbGlja1xyXG4gICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgbWVzc2VuZ2VyLm9uKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBUYWdBY3Rpb24uSU1BR0VfQ0xJQ0ssIGltYWdlQ2xpY2tcclxuICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgIG1lc3Nlbmdlci5vbihcclxuICAgICAgICAgICAgICAgICAgICAgICAgVGFnQWN0aW9uLlZJREVPX0NMSUNLLCB2aWRlb0NsaWNrXHJcbiAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgICBtZXNzZW5nZXIub24oXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFRhZ0FjdGlvbi5ET0NfQ0xJQ0ssXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudGFnU2VydmljZS5vbkFjdGlvbkRvY0NsaWNrLmJpbmQodGhpcy50YWdTZXJ2aWNlKVxyXG4gICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgbWVzc2VuZ2VyLm9uKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBUYWdBY3Rpb24uWU9VVFVCRV9DTElDSyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50YWdTZXJ2aWNlLm9uQWN0aW9uWW91dHViZUNsaWNrLmJpbmQodGhpcy50YWdTZXJ2aWNlKVxyXG4gICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgLmNhdGNoKChlcnJvcjogYW55KSA9PlxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiQ2Fubm90IGluamVjdCBodG1sIGZvciB0YWdcIiwgdGFnSUQsIGVycm9yKSxcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGFjdGlvbl9kZWxldGVfYWxsX21hdHRlcnRhZ3MoKSB7XHJcbiAgICAgICAgLy8gYXdhaXQgUHJvbWlzZS5hbGwoXHJcbiAgICAgICAgdGhpcy5tYXR0ZXJ0YWdzLm1hcChhc3luYyAodGFnKSA9PiB7XHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuc2RrLk1hdHRlcnRhZy5yZW1vdmUodGFnKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICAvLyApO1xyXG4gICAgICAgIHRoaXMubWF0dGVydGFncyA9IFtdO1xyXG4gICAgICAgIHRoaXMuZGljdGlvbm5hcnlUYWdzLmNsZWFyKCk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgYWN0aW9uX2RlbGV0ZV9lbGVtZW50KFxyXG4gICAgICAgIGVsZW1lbnQ6IERiT2JqZWN0VHlwZSxcclxuICAgICkge1xyXG4gICAgICAgIGNvbnN0IHNpZFRhZyA9IHRoaXMuZ2V0VGFnRnJvbUVsZW1lbnRJZChlbGVtZW50LmlkISkudGFnO1xyXG4gICAgICAgIGlmIChzaWRUYWcpIHtcclxuICAgICAgICAgICAgbGV0IHJlc3A7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICByZXNwID0gYXdhaXQgdGhpcy5zZGsuTWF0dGVydGFnLnJlbW92ZShzaWRUYWcpO1xyXG4gICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJDYW5ub3QgZGVsZXRlIHRhZ1wiLCBzaWRUYWcsIGVycm9yKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAocmVzcCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5kaWN0aW9ubmFyeVRhZ3MuZGVsZXRlKHNpZFRhZyk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMubWF0dGVydGFncy5pbmRleE9mKHNpZFRhZyk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm1hdHRlcnRhZ3Muc3BsaWNlKGluZGV4LCAxKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBhY3Rpb25fcG9zaXRpb25fZWxlbWVudChcclxuICAgICAgICBwb2lUeXBlOiBQb2lUeXBlLFxyXG4gICAgICAgIGVsZW1lbnQ6IERiT2JqZWN0VHlwZSxcclxuICAgICkge1xyXG4gICAgICAgIGF3YWl0IHRoaXMuYWRkX2N1cnNvcl9tYXR0ZXJ0YWcocG9pVHlwZSwgZWxlbWVudCwgdHJ1ZSk7XHJcbiAgICAgICAgdGhpcy5zZXRJbnRlcmFjdGlvbk1vZGUoVmlld2VySW50ZXJhY3Rpb25zLlBPU0lUSU9OSU5HKTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBhZGRFbGVtZW50QXNNYXR0ZXJ0YWcocG9pVHlwZTogUG9pVHlwZSkge1xyXG4gICAgICAgIGF3YWl0IHRoaXMuYWRkX2N1cnNvcl9tYXR0ZXJ0YWcocG9pVHlwZSk7XHJcbiAgICAgICAgc3dpdGNoIChwb2lUeXBlKSB7XHJcbiAgICAgICAgICAgIGNhc2UgUG9pVHlwZS5EQVRBOlxyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRJbnRlcmFjdGlvbk1vZGUoVmlld2VySW50ZXJhY3Rpb25zLkFERElOR19GRUFUVVJFKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIFBvaVR5cGUuREVTSzpcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0SW50ZXJhY3Rpb25Nb2RlKFZpZXdlckludGVyYWN0aW9ucy5BRERJTkdfRkVBVFVSRSk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSBQb2lUeXBlLlRJQ0tFVDpcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0SW50ZXJhY3Rpb25Nb2RlKFZpZXdlckludGVyYWN0aW9ucy5BRERJTkdfVElDS0VUKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIFBvaVR5cGUuRVFVSVBNRU5UOlxyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRJbnRlcmFjdGlvbk1vZGUoVmlld2VySW50ZXJhY3Rpb25zLkFERElOR19FUVVJUE1FTlQpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgUG9pVHlwZS5NRUFTVVJFOlxyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRJbnRlcmFjdGlvbk1vZGUoVmlld2VySW50ZXJhY3Rpb25zLkFERElOR19NRUFTVVJFKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIFBvaVR5cGUuUk9PTTpcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0SW50ZXJhY3Rpb25Nb2RlKFZpZXdlckludGVyYWN0aW9ucy5BRERJTkdfUk9PTSk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcblxyXG4gICAgYWN0aW9uX2NvbXBsZXRlZCgpIHtcclxuICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICBEYXRlLm5vdygpIC0gdGhpcy5sYXN0QWN0aW9uVGltZSA+IDIwMDAgJiZcclxuICAgICAgICAgICAgdGhpcy5sYXN0QWN0aW9uVGltZSAhPT0gLTFcclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIGFjdGlvbl9jYW5jZWxlZCgpIHtcclxuICAgICAgICBpZiAodGhpcy5pbnRlcmFjdGlvbk1vZGUgIT09IFZpZXdlckludGVyYWN0aW9ucy5ERUZBVUxUKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZGVsZXRlTGFzdE1hdHRlcnRhZygpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnNldEludGVyYWN0aW9uTW9kZShWaWV3ZXJJbnRlcmFjdGlvbnMuREVGQVVMVCk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIGFjdGlvbl9vcGVuX21lbnUobWVudTogc3RyaW5nKSB7XHJcbiAgICAgICAgdGhpcy52aXNpYmlsaXR5U2VydmljZS5kZXRhaWxTaG93aW5nLm5leHQodHJ1ZSk7XHJcbiAgICAgICAgY29uc3QgbGFzdFRhZyA9IHRoaXMuZ2V0TGFzdFRhZygpO1xyXG4gICAgICAgIHN3aXRjaCAobWVudSkge1xyXG4gICAgICAgICAgICBjYXNlIFwiYWRkX2VxdWlwXCI6XHJcbiAgICAgICAgICAgICAgICB0aGlzLmdvVG9MYXN0VGFnKCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmdvVG9NZW51KGB2aXNpdC8ke3RoaXMuY3VycmVudFNwYWNlSUR9L2FkZF9lcXVpcGApO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgXCJhZGRfdGlja2V0XCI6XHJcbiAgICAgICAgICAgICAgICB0aGlzLmdvVG9MYXN0VGFnKCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmdvVG9NZW51KGB2aXNpdC8ke3RoaXMuY3VycmVudFNwYWNlSUR9L2FkZF90aWNrZXRgKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIFwiYWRkX2ZlYXR1cmVcIjpcclxuICAgICAgICAgICAgICAgIHRoaXMuZ29Ub0xhc3RUYWcoKTtcclxuICAgICAgICAgICAgICAgIGxldCB1cmw6IHN0cmluZztcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLnJvdXRlci51cmwuaW5jbHVkZXMoXCI/XCIpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdXJsID0gdGhpcy5yb3V0ZXIudXJsLnN1YnN0cmluZygwLCB0aGlzLnJvdXRlci51cmwuaW5kZXhPZihcIj9cIikpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICB1cmwgPSB0aGlzLnJvdXRlci51cmw7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyh1cmwpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5nb1RvTWVudShgJHt1cmx9L2FkZF9mZWF0dXJlYCk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSBcImFkZF9kZXNrXCI6XHJcbiAgICAgICAgICAgICAgICB0aGlzLmdvVG9MYXN0VGFnKCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShcclxuICAgICAgICAgICAgICAgICAgICBbYHZpc2l0LyR7dGhpcy5jdXJyZW50U3BhY2VJRH0vYWRkX2ZlYXR1cmVgXSxcclxuICAgICAgICAgICAgICAgICAgICB7IHF1ZXJ5UGFyYW1zOiB7IGlzRGVzazogdHJ1ZSB9IH0sXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgICBjYXNlIFwiYWRkX3Jvb21cIjpcclxuICAgICAgICAgICAgICAgIHRoaXMuZ29Ub0xhc3RUYWcoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFxyXG4gICAgICAgICAgICAgICAgICAgIFtgdmlzaXQvJHt0aGlzLmN1cnJlbnRTcGFjZUlEfS9hZGRfcm9vbWBdXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgXCJwb3NpdGlvbmluZ190aWNrZXRcIjpcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwicG9zaXRpb25pbmdfdGlja2V0XCIpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGxhc3RUYWcpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShcclxuICAgICAgICAgICAgICAgICAgICAgICAgW1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYHZpc2l0LyR7dGhpcy5jdXJyZW50U3BhY2VJRH0vZGV0YWlsLyR7dGhpcy5kaWN0aW9ubmFyeVRhZ3MuZ2V0KGxhc3RUYWcpLmVsZW1lbnRJRH1gLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBdLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7IHF1ZXJ5UGFyYW1zOiB7IHBvc2l0aW9uaW5nOiB0cnVlIH0gfSxcclxuICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgXCJwb3NpdGlvbmluZ19lcXVpcFwiOlxyXG4gICAgICAgICAgICAgICAgaWYgKGxhc3RUYWcpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShcclxuICAgICAgICAgICAgICAgICAgICAgICAgW1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYHZpc2l0LyR7dGhpcy5jdXJyZW50U3BhY2VJRH0vZXF1aXAvJHt0aGlzLmRpY3Rpb25uYXJ5VGFncy5nZXQobGFzdFRhZykuZWxlbWVudElEfWAsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIF0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHsgcXVlcnlQYXJhbXM6IHsgcG9zaXRpb25pbmc6IHRydWUgfSB9LFxyXG4gICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSBcInBvc2l0aW9uaW5nX2ZlYXR1cmVcIjpcclxuICAgICAgICAgICAgICAgIGlmIChsYXN0VGFnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW2Ake3RoaXMucm91dGVyLnVybH1gXSwge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBxdWVyeVBhcmFtczogeyBwb3NpdGlvbmluZzogdHJ1ZSB9LFxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgXCJwb3NpdGlvbmluZ19yb29tXCI6XHJcbiAgICAgICAgICAgICAgICBpZiAobGFzdFRhZykge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtgJHt0aGlzLnJvdXRlci51cmx9YF0sIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcXVlcnlQYXJhbXM6IHsgcG9zaXRpb25pbmc6IHRydWUgfSxcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW2Ake3RoaXMucm91dGVyLnVybH1gXSk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgYWN0aW9uX2dvX3RvX2Zsb29yKGZsb29yTmFtZTogc3RyaW5nLCBtYXR0ZXJwb3J0Rmxvb3JTZXF1ZW5jZTogbnVtYmVyID0gbnVsbCkge1xyXG4gICAgICAgIGlmICghdGhpcy5mbG9vcnMpIHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coXCJGbG9vciBhcmUgbm90IGxvYWRlZCB5ZXRcIik7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gY29uc29sZS5sb2codGhpcy5mbG9vcnMpO1xyXG4gICAgICAgIC8vIGxvb2sgdXAgZm9yIHNlcXVlbmNlIG51bWJlciAodGhlIHNhZmVzdCBtZXRob2QpXHJcbiAgICAgICAgbGV0IGZsb29yTWF0dGVycG9ydCA9IHRoaXMuZmxvb3JzLmZpbmQoXHJcbiAgICAgICAgICAgIChmbG9vcikgPT4gZmxvb3Iuc2VxdWVuY2UgPT09IG1hdHRlcnBvcnRGbG9vclNlcXVlbmNlLFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgaWYgKCFmbG9vck1hdHRlcnBvcnQpIHtcclxuICAgICAgICAgICAgZmxvb3JNYXR0ZXJwb3J0ID0gdGhpcy5mbG9vcnMuZmluZChcclxuICAgICAgICAgICAgICAgIChmbG9vcikgPT4gZmxvb3JOYW1lLmluY2x1ZGVzKGZsb29yLm5hbWUpICYmIGZsb29yLm5hbWUgIT0gXCJcIixcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCFmbG9vck1hdHRlcnBvcnQpIHtcclxuICAgICAgICAgICAgZmxvb3JNYXR0ZXJwb3J0ID0gdGhpcy5mbG9vcnMuZmluZCgoZmxvb3IpID0+XHJcbiAgICAgICAgICAgICAgICBmbG9vck5hbWUuaW5jbHVkZXMoZmxvb3IuaWQpLFxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBjb25zb2xlLmxvZyhmbG9vck1hdHRlcnBvcnQpXHJcbiAgICAgICAgaWYgKGZsb29yTWF0dGVycG9ydCkge1xyXG4gICAgICAgICAgICBsZXQgcmV0cnkgPSB0cnVlO1xyXG4gICAgICAgICAgICB3aGlsZSAocmV0cnkpIHtcclxuICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZmxvb3JJbmRleCA9IGF3YWl0IHRoaXMuc2RrLkZsb29yLm1vdmVUbyhmbG9vck1hdHRlcnBvcnQuc2VxdWVuY2UpO1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKFwibW92ZWQgdG8gZmxvb3JJbmRleFwiLCBmbG9vckluZGV4KTtcclxuICAgICAgICAgICAgICAgICAgICByZXRyeSA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIkNhbm5vdCBtb3ZlIHRvIEZsb29yXCIsIGVycm9yKTtcclxuICAgICAgICAgICAgICAgICAgICBhd2FpdCB3YWl0KDEwMCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBjb25zb2xlLndhcm4oXCJObyBtYXR0ZXJwb3J0IGZsb29yIGZvdW5kIHRvIG1vdmUgdG9cIik7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGFjdGlvbl9nb190b19zd2VlcChcclxuICAgICAgICBzd2VlcDogc3RyaW5nLFxyXG4gICAgICAgIHJvdGF0aW9uOiB7IHg6IG51bWJlcjsgeTogbnVtYmVyOyB9ID0gbnVsbCxcclxuICAgICkge1xyXG4gICAgICAgIGlmICh0aGlzLmZvcmJpZGRlblN3ZWVwcy5pbmNsdWRlcyhzd2VlcCkpIHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coXCJ1c2VyIGlzIG5vdCBhbGxvd2VkIHRvIGdvIHRvIHRoaXMgc3dlZXBcIik7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gY29uc29sZS5sb2coXCJnb2luZyB0byBzd2VlcFwiLCBzd2VlcCwgXCJ3aXRoIHJvdGF0aW9uOlwiLCByb3RhdGlvbik7XHJcbiAgICAgICAgc2V0VGltZW91dChhc3luYyAoKSA9PiB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmluVHJhbnNpdGlvbk1vZGUgfHwgdGhpcy5pblRyYW5zaXRpb25Td2VlcCkge1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJDYW5ub3QgZ28gdG8gc3dlZXAsIGluIHRyYW5zaXRpb25cIik7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuaW5UcmFuc2l0aW9uU3dlZXAgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5zZGsuU3dlZXAubW92ZVRvKHN3ZWVwLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgdHJhbnNpdGlvbjogXCJ0cmFuc2l0aW9uLmZseVwiLFxyXG4gICAgICAgICAgICAgICAgICAgIHRyYW5zaXRpb25UaW1lOiAxNTAwLFxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5pblRyYW5zaXRpb25Td2VlcCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJDYW5ub3QgbW92ZSB0byBzd2VlcFwiLCBlcnJvcik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHJvdGF0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnNkay5DYW1lcmEuc2V0Um90YXRpb24ocm90YXRpb24sIHsgc3BlZWQ6IDEwMCB9KTsgLy8gc3BlZWQgaXMgZGVncmVlcyBwZXIgc2Vjb25kXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LCAxMDAwKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRDdXJyZW50U3dlZXAoKTogc3RyaW5nIHwgbnVsbCB7XHJcbiAgICAgICAgaWYgKHRoaXMucG9zZUNhbWVyYSkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wb3NlQ2FtZXJhLnN3ZWVwO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBnZXRDdXJyZW50Q2FtZXJhUG9zaXRpb24oKToge1xyXG4gICAgICAgIHJvdGF0aW9uOiBhbnk7XHJcbiAgICAgICAgcG9zaXRpb246IGFueTtcclxuICAgICAgICBzd2VlcDogYW55O1xyXG4gICAgfSB8IG51bGwge1xyXG4gICAgICAgIGlmICh0aGlzLnBvc2VDYW1lcmEpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMucG9zZUNhbWVyYTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIFNldHRlcnNcclxuICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xyXG5cclxuICAgIHNldEludGVyYWN0aW9uTW9kZShpbnRlcmFjdGlvbk1vZGU6IG51bWJlcikge1xyXG4gICAgICAgIHRoaXMuaW50ZXJhY3Rpb25Nb2RlID0gaW50ZXJhY3Rpb25Nb2RlO1xyXG4gICAgfVxyXG5cclxuICAgIHNldE9iamVjdEFuZFBvaUluVGFnKG1hdHRlcnRhZ0lEOiBzdHJpbmcsIG9iamVjdDogRGJPYmplY3RUeXBlLCBwb2lUeXBlOiBQb2lUeXBlLCBwb2k6IFBPSSB8IG51bGwgPSBudWxsKSB7XHJcbiAgICAgICAgdGhpcy5kaWN0aW9ubmFyeVRhZ3MuZ2V0KG1hdHRlcnRhZ0lEKS5tYXR0ZXJ0YWdEYXRhLnNldE9iamVjdChvYmplY3QsIHBvaVR5cGUpO1xyXG4gICAgICAgIGlmIChwb2kpIHtcclxuICAgICAgICAgICAgdGhpcy5kaWN0aW9ubmFyeVRhZ3MuZ2V0KG1hdHRlcnRhZ0lEKS5tYXR0ZXJ0YWdEYXRhLnNldFBvaShwb2kpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmRpY3Rpb25uYXJ5VGFncy5nZXQobWF0dGVydGFnSUQpLmVsZW1lbnRJRCA9IG9iamVjdC5pZDtcclxuICAgICAgICB0aGlzLnVwZGF0ZU1hdHRlclRhZ0Zyb21JZChtYXR0ZXJ0YWdJRCwgb2JqZWN0LCBwb2lUeXBlKTtcclxuICAgIH1cclxuXHJcbiAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgR2V0dGVyc1xyXG4gIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXHJcblxyXG4gICAgZ2V0SW50ZXJhY3Rpb25Nb2RlKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmludGVyYWN0aW9uTW9kZTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0VGFnRnJvbUVsZW1lbnRJZChlbGVtZW50SUQ6IHN0cmluZyk6IHtcclxuICAgICAgICB0YWc6IHN0cmluZyB8IG51bGw7XHJcbiAgICAgICAgc3dlZXA6IHN0cmluZyB8IG51bGw7XHJcbiAgICB9IHtcclxuICAgICAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgdGhpcy5tYXR0ZXJ0YWdzLmxlbmd0aDsgaW5kZXggKz0gMSkge1xyXG4gICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgICB0aGlzLmRpY3Rpb25uYXJ5VGFncy5nZXQodGhpcy5tYXR0ZXJ0YWdzW2luZGV4XSkuZWxlbWVudElEID09PVxyXG4gICAgICAgICAgICAgICAgZWxlbWVudElEXHJcbiAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgeyBtYXR0ZXJ0YWdEYXRhIH0gPVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGljdGlvbm5hcnlUYWdzLmdldCh0aGlzLm1hdHRlcnRhZ3NbaW5kZXhdKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHN3ZWVwID0gbWF0dGVydGFnRGF0YS5nZXRTd2VlcElEKCk7XHJcbiAgICAgICAgICAgICAgICBpZiAoc3dlZXAgJiYgdGhpcy5zd2VlcHMgJiYgdGhpcy5zd2VlcHMuaW5jbHVkZXMoc3dlZXApKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgdGFnOiB0aGlzLm1hdHRlcnRhZ3NbaW5kZXhdLCBzd2VlcCB9O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgdGFnOiB0aGlzLm1hdHRlcnRhZ3NbaW5kZXhdLCBzd2VlcDogbnVsbCB9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB7IHRhZzogbnVsbCwgc3dlZXA6IG51bGwgfTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRUYWdzKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLm1hdHRlcnRhZ3M7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0TGFzdFRhZygpOiBzdHJpbmcgfCBudWxsIHtcclxuICAgICAgICBpZiAodGhpcy5tYXR0ZXJ0YWdUb0ZvbGxvdykge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5tYXR0ZXJ0YWdUb0ZvbGxvdztcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5tYXR0ZXJ0YWdzLmxlbmd0aCA9PT0gMFxyXG4gICAgICAgICAgICAgICAgPyBudWxsXHJcbiAgICAgICAgICAgICAgICA6IHRoaXMubWF0dGVydGFnc1t0aGlzLm1hdHRlcnRhZ3MubGVuZ3RoIC0gMV07XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGdldE1lbnVUb09wZW5Gb3JMYXN0VGFnKCkge1xyXG4gICAgICAgIGNvbnN0IGxhc3RUYWcgPSB0aGlzLmdldExhc3RUYWcoKTtcclxuICAgICAgICBpZiAobGFzdFRhZykge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5kaWN0aW9ubmFyeVRhZ3MuZ2V0KGxhc3RUYWcpLm1hdHRlcnRhZ0RhdGEuZ2V0TWVudVRvT3BlbigpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBnZXRUYWdEYXRhRnJvbUlkKG1hdHRlcnRhZ0lEOiBzdHJpbmcpOiBNYXR0ZXJ0YWdEYXRhIHwgbnVsbCB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGljdGlvbm5hcnlUYWdzLmdldChtYXR0ZXJ0YWdJRCkhLm1hdHRlcnRhZ0RhdGE7XHJcbiAgICAgICAgfSBjYXRjaCB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiY2Fubm90IHJldHJpZXZlIG1hdHRlcnRhZ0RhdGEgZm9yIHRhZ1wiLCBtYXR0ZXJ0YWdJRCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIGdldExhc3REaXN0YW5jZXMoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZGlzdGFuY2VzTGFzdE1lYXN1cmU7XHJcbiAgICB9XHJcblxyXG4gICAgdGFrZVNjcmVlblNob3QoKTogUHJvbWlzZTxhbnk+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5zZGsuUmVuZGVyZXIudGFrZVNjcmVlblNob3QoXHJcbiAgICAgICAgICAgIHRoaXMucmVzb2x1dGlvbixcclxuICAgICAgICAgICAgdGhpcy52aXNpYmlsaXR5LFxyXG4gICAgICAgICkudGhlbihcclxuICAgICAgICAgICAgZnVuY3Rpb24gKHNjcmVlblNob3RVcmk6IGFueSkge1xyXG4gICAgICAgICAgICAgICAgLy8gYmFzZTY0IHN0cmluZ1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sYXN0U2NyZWVuc2hvdFVyaSA9IHNjcmVlblNob3RVcmk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XHJcbiAgICAgICAgICAgIH0uYmluZCh0aGlzKSxcclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIGdldFNjcmVlblNob3RVcmkoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubGFzdFNjcmVlbnNob3RVcmk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0TGFzdE1lYXN1cmVtZW50KCk6IE9iamVjdCB7XHJcbiAgICAgICAgY29uc3QgZGF0YSA9IHtcclxuICAgICAgICAgICAgbWVhc3VyZTogdGhpcy5sYXN0TWVhc3VyZSxcclxuICAgICAgICAgICAgc3dlZXA6IHRoaXMucG9zZUNhbWVyYS5zd2VlcCxcclxuICAgICAgICB9O1xyXG4gICAgICAgIHJldHVybiBkYXRhO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGNsZWFyQWxsKCkge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKFwicmVtb3Zpbmcgdmlld2VyXCIpO1xyXG4gICAgICAgIHRoaXMuYWN0aW9uX2RlbGV0ZV9hbGxfbWF0dGVydGFncygpO1xyXG4gICAgICAgIHRoaXMuZmxvb3JzID0gbnVsbDtcclxuICAgICAgICB0aGlzLnN3ZWVwcyA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5zZGsgPSBudWxsO1xyXG4gICAgICAgIGNsZWFySW50ZXJ2YWwodGhpcy50aW1lclBvaW50ZXIpO1xyXG4gICAgICAgIHRoaXMuZm9yYmlkZGVuU3dlZXBzID0gW107XHJcbiAgICAgICAgdGhpcy50YWdNZXNzZW5nZXJPbiA9IGZhbHNlO1xyXG4gICAgICAgIC8vIGNhbmNlbCBzdWJzY3JpcHRpb25zXHJcbiAgICAgICAgdGhpcy5wb2ludGVyQnV0dG9uLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCB0aGlzLnBvaW50ZXJMZWZ0Q2xpY2tIYW5kbGVyKTtcclxuICAgICAgICB0aGlzLnBvaW50ZXJCdXR0b24ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImNvbnRleHRtZW51XCIsIHRoaXMucG9pbnRlclJpZ2h0Q2xpY2tIYW5kbGVyKTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyByZW1vdmVGb3JiaWRkZW5Td2VlcHMoZm9yYmlkZGVuU3dlZXBzOiBzdHJpbmdbXSkge1xyXG4gICAgICAgIHRoaXMuZm9yYmlkZGVuU3dlZXBzID0gWy4uLmZvcmJpZGRlblN3ZWVwc107XHJcbiAgICAgICAgbGV0IHJlbW92ZWQgPSAwO1xyXG4gICAgICAgIGF3YWl0IFByb21pc2UuYWxsKFxyXG4gICAgICAgICAgICBmb3JiaWRkZW5Td2VlcHMubWFwKGFzeW5jIChzd2VlcCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnNkay5Td2VlcC5kaXNhYmxlKHN3ZWVwKTtcclxuICAgICAgICAgICAgICAgICAgICByZW1vdmVkICs9IDE7XHJcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGVycm9yKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSksXHJcbiAgICAgICAgKTtcclxuICAgICAgICBjb25zb2xlLmxvZyhcInJlbW92ZWQgc3dlZXBzOlwiLCByZW1vdmVkKTtcclxuICAgIH1cclxufVxyXG4iXX0=
|
|
966
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF0dGVycG9ydC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXNtYXJ0ZXJwbGFuLWNvcmUvc3JjL2xpYi9zZXJ2aWNlcy9tYXR0ZXJwb3J0LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFbkQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvQixPQUFPLEVBQUUsMkJBQTJCLEVBQUUsZUFBZSxFQUFFLElBQUksRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3hGLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNqRCxPQUFPLEVBQXlCLFdBQVcsRUFBTyxPQUFPLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBSTdILE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQzs7Ozs7QUFLOUMsTUFBTSxPQUFPLGlCQUFpQjtJQW9HMUIsWUFDc0IsTUFBYyxFQUN4QixNQUFjLEVBQ2QsaUJBQXdDO1FBRHhDLFdBQU0sR0FBTixNQUFNLENBQVE7UUFDZCxzQkFBaUIsR0FBakIsaUJBQWlCLENBQXVCO1FBeEZwRCxlQUFlO1FBQ1Asb0JBQWUsR0FBRyxLQUFLLENBQUM7UUFFaEMsU0FBUztRQUNELG1CQUFjLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFFcEIsb0JBQWUsR0FBVyxrQkFBa0IsQ0FBQyxPQUFPLENBQUM7UUFFckQsZUFBVSxHQUFrQixFQUFFLENBQUM7UUFFL0Isb0JBQWUsR0FBc0UsSUFBSSxHQUFHLENBQUM7UUFFN0YsZ0JBQVcsR0FBRyxFQUFFLENBQUM7UUFFakIseUJBQW9CLEdBQWEsRUFBRSxDQUFDO1FBRXBDLGVBQVUsR0FBRztZQUNqQixLQUFLLEVBQUUs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LElBQUksQ0FBQyxhQUFhLENBQUMsbUJBQW1CLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO0lBQ3pGLENBQUM7SUFFRCxLQUFLLENBQUMscUJBQXFCLENBQUMsZUFBeUI7UUFDakQsSUFBSSxDQUFDLGVBQWUsR0FBRyxDQUFDLEdBQUcsZUFBZSxDQUFDLENBQUM7UUFDNUMsSUFBSSxPQUFPLEdBQUcsQ0FBQyxDQUFDO1FBQ2hCLE1BQU0sT0FBTyxDQUFDLEdBQUcsQ0FDYixlQUFlLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsRUFBRTtZQUNoQyxJQUFJO2dCQUNBLE1BQU0sSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUNwQyxPQUFPLElBQUksQ0FBQyxDQUFDO2FBQ2hCO1lBQUMsT0FBTyxLQUFLLEVBQUU7Z0JBQ1osT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQzthQUN0QjtRQUNMLENBQUMsQ0FBQyxDQUNMLENBQUM7UUFDRixPQUFPLENBQUMsR0FBRyxDQUFDLGlCQUFpQixFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQzVDLENBQUM7OzhHQTF2Q1EsaUJBQWlCLGtCQXFHZCxRQUFRO2tIQXJHWCxpQkFBaUIsY0FGZCxNQUFNOzJGQUVULGlCQUFpQjtrQkFIN0IsVUFBVTttQkFBQztvQkFDUixVQUFVLEVBQUUsTUFBTTtpQkFDckI7OzBCQXNHUSxNQUFNOzJCQUFDLFFBQVEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBnZXREaXN0YW5jZUJldHdlZW5Ud29Qb2ludHMsIHBvaVR5cGVUb1N0cmluZywgd2FpdCB9IGZyb20gJy4uL2hlbHBlcnMuc2VydmljZSc7XHJcbmltcG9ydCB7IE1hdHRlcnRhZ0RhdGEgfSBmcm9tICcuLi9tYXR0ZXJ0YWdEYXRhJztcclxuaW1wb3J0IHsgRGJPYmplY3RUeXBlLCBGZWF0dXJlLCBGZWF0dXJlVHlwZSwgUE9JLCBQb2lUeXBlLCBTcE1vZHVsZSwgVGFnQWN0aW9uLCBWaWV3ZXJJbnRlcmFjdGlvbnMgfSBmcm9tICcuLi90eXBlcy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQmFzZVRhZ1NlcnZpY2UgfSBmcm9tICcuL3RhZy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQmFzZVZpc2liaWxpdHlTZXJ2aWNlIH0gZnJvbSAnLi9iYXNlVmlzaWJpbGl0eS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQ29uZmlnIH0gZnJvbSAnLi4vY29uZmlnJztcclxuaW1wb3J0IHsgQ2FtZXJhTW9kZSB9IGZyb20gJy4uL3R5cGVzLnNlcnZpY2UnO1xyXG5cclxuQEluamVjdGFibGUoe1xyXG4gICAgcHJvdmlkZWRJbjogJ3Jvb3QnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBNYXR0ZXJwb3J0U2VydmljZSB7XHJcbiAgICBwdWJsaWMgc2RrOiBhbnk7XHJcblxyXG4gICAgcHJpdmF0ZSBjb250YWluZXI6IGFueTtcclxuXHJcbiAgICAvLyBQb3NpdGlvbiBjYW1lcmFcclxuICAgIHByaXZhdGUgcG9zZU1hdHRlcnBvcnQ6IGFueTtcclxuXHJcbiAgICBwdWJsaWMgcG9zZUNhbWVyYTogeyByb3RhdGlvbjogYW55OyBwb3NpdGlvbjogYW55OyBzd2VlcDogYW55OyB9O1xyXG5cclxuICAgIC8vIFBvaW50ZXIgdHJpY2tcclxuICAgIHByaXZhdGUgcG9pbnRlckJ1dHRvbjogYW55O1xyXG5cclxuICAgIHByaXZhdGUgb2xkUG9zZU1hdHRlcnBvcnRQb3NpdGlvbjogYW55O1xyXG5cclxuICAgIC8vIE1lYXN1cmUgbW9kZVxyXG4gICAgcHJpdmF0ZSBpc01lYXN1cmVNb2RlT24gPSBmYWxzZTtcclxuXHJcbiAgICAvLyBUaW1lcnNcclxuICAgIHByaXZhdGUgbGFzdEFjdGlvblRpbWUgPSAtMTtcclxuXHJcbiAgICBwcml2YXRlIGludGVyYWN0aW9uTW9kZTogbnVtYmVyID0gVmlld2VySW50ZXJhY3Rpb25zLkRFRkFVTFQ7XHJcblxyXG4gICAgcHJpdmF0ZSBtYXR0ZXJ0YWdzOiBBcnJheTxzdHJpbmc+ID0gW107XHJcblxyXG4gICAgcHJpdmF0ZSBkaWN0aW9ubmFyeVRhZ3M6IE1hcDxzdHJpbmcsIHsgbWF0dGVydGFnRGF0YTogTWF0dGVydGFnRGF0YTsgZWxlbWVudElEOiBzdHJpbmc7IH0+ID0gbmV3IE1hcDtcclxuXHJcbiAgICBwcml2YXRlIGxhc3RNZWFzdXJlID0gW107XHJcblxyXG4gICAgcHJpdmF0ZSBkaXN0YW5jZXNMYXN0TWVhc3VyZTogbnVtYmVyW10gPSBbXTtcclxuXHJcbiAgICBwcml2YXRlIHJlc29sdXRpb24gPSB7XHJcbiAgICAgICAgd2lkdGg6IDUwMCxcclxuICAgICAgICBoZWlnaHQ6IDYwMCxcclxuICAgIH07XHJcblxyXG4gICAgcHJpdmF0ZSB2aXNpYmlsaXR5ID0ge1xyXG4gICAgICAgIG1hdHRlcnRhZ3M6IGZhbHNlLFxyXG4gICAgICAgIHN3ZWVwczogdHJ1ZSxcclxuICAgIH07XHJcblxyXG4gICAgcHJpdmF0ZSBsYXN0U2NyZWVuc2hvdFVyaTogYW55O1xyXG5cclxuICAgIHB1YmxpYyBzd2VlcHM6IEFycmF5PHN0cmluZz4gfCBudWxsO1xyXG5cclxuICAgIHB1YmxpYyBjdXJyZW50U3dlZXA6IFN1YmplY3Q8c3RyaW5nPiA9IG5ldyBTdWJqZWN0KCk7XHJcblxyXG4gICAgLy9jYW1lcmEgcG9zaXRpb24gd2l0aCByb3RhdGlvblxyXG4gICAgcHVibGljIGN1cnJlbnRDYW1lcmFQb3NlOiBTdWJqZWN0PGFueT4gPSBuZXcgU3ViamVjdCgpO1xyXG5cclxuICAgIHByaXZhdGUgZmxvb3JzPzogQXJyYXk8eyBpZDogc3RyaW5nOyBuYW1lOiBzdHJpbmc7IHNlcXVlbmNlOiBudW1iZXI7IH0+IHwgbnVsbDtcclxuXHJcbiAgICBwcml2YXRlIF9jdXJyZW50U3BhY2VJRDogc3RyaW5nO1xyXG5cclxuICAgIHB1YmxpYyBnZXQgY3VycmVudFNwYWNlSUQoKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fY3VycmVudFNwYWNlSUQ7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNldCBjdXJyZW50U3BhY2VJRCh2YWx1ZTogc3RyaW5nKSB7XHJcbiAgICAgICAgdGhpcy5fY3VycmVudFNwYWNlSUQgPSB2YWx1ZTtcclxuICAgIH1cclxuXHJcbiAgICB0aW1lclBvaW50ZXI6IGFueTtcclxuXHJcbiAgICBmb3JiaWRkZW5Td2VlcHM6IHN0cmluZ1tdID0gW107XHJcblxyXG4gICAgcHVibGljIHRhZ0FjdGlvbjogU3ViamVjdDx7IGFjdGlvbjogc3RyaW5nOyBkYXRhOiBzdHJpbmc7IH0+ID0gbmV3IFN1YmplY3QoKTtcclxuXHJcbiAgICBwdWJsaWMgbWF0dGVydGFnVG9Gb2xsb3c6IHN0cmluZyB8IG51bGw7XHJcblxyXG4gICAgdGFnU2VydmljZTogQmFzZVRhZ1NlcnZpY2U7XHJcblxyXG4gICAgY29uZmlnOiBDb25maWc7XHJcblxyXG4gICAgcHVibGljIGluVHJhbnNpdGlvbk1vZGUgPSBmYWxzZTtcclxuXHJcbiAgICBwdWJsaWMgaW5UcmFuc2l0aW9uU3dlZXAgPSBmYWxzZTtcclxuXHJcbiAgICBwdWJsaWMgY3VycmVudENhbWVyYU1vZGU6IENhbWVyYU1vZGUgPSBDYW1lcmFNb2RlLk9VVFNJREU7XHJcblxyXG4gICAgcHVibGljIG9uQ2FtZXJhTW9kZUNoYW5nZWQgPSBuZXcgU3ViamVjdDxDYW1lcmFNb2RlPigpO1xyXG5cclxuICAgIHB1YmxpYyBvbkdvVG9UYWcgPSBuZXcgU3ViamVjdDxzdHJpbmc+KCk7XHJcblxyXG4gICAgdGFnTWVzc2VuZ2VyT24gPSBmYWxzZTtcclxuXHJcbiAgICBTUE1vZHVsZTogU3BNb2R1bGU7XHJcblxyXG4gICAgcG9pbnRlckxlZnRDbGlja0hhbmRsZXIgPSAoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5hZGRNYXR0ZXJ0YWcoKTtcclxuICAgICAgICB0aGlzLnVwZGF0ZVBvc2l0aW9uSW5UYWdEYXRhKCk7XHJcbiAgICB9O1xyXG5cclxuICAgIHBvaW50ZXJSaWdodENsaWNrSGFuZGxlciA9IChlKSA9PiB7XHJcbiAgICAgICAgY29uc29sZS5sb2coXCJjYW5jZWwgb24gcmlnaHQgY2xpY2tcIik7XHJcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgIHRoaXMuYWN0aW9uX2NhbmNlbGVkKCk7XHJcbiAgICAgICAgYWxlcnQoXCJhY3Rpb24gY2FuY2VsbGVkXCIpO1xyXG4gICAgfTtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBASW5qZWN0KCdjb25maWcnKSBjb25maWc6IENvbmZpZyxcclxuICAgICAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyLFxyXG4gICAgICAgIHByaXZhdGUgdmlzaWJpbGl0eVNlcnZpY2U6IEJhc2VWaXNpYmlsaXR5U2VydmljZVxyXG4gICAgKSB7XHJcbiAgICAgICAgdGhpcy5jb25maWcgPSBjb25maWc7XHJcbiAgICB9XHJcblxyXG4gICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIFV0aWxzIGFzeW5jXHJcbiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cclxuXHJcbiAgICBhc3luYyBpbml0U2RrKHRhZ1NlcnZpY2U6IEJhc2VUYWdTZXJ2aWNlLCBtb2R1bGU6IFNwTW9kdWxlID0gU3BNb2R1bGUuSU1NTyk6IFByb21pc2U8Ym9vbGVhbj4ge1xyXG4gICAgICAgIGlmICh0aGlzLnNkaykge1xyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLmFjdGlvbl9kZWxldGVfYWxsX21hdHRlcnRhZ3MoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy50YWdTZXJ2aWNlID0gdGFnU2VydmljZTtcclxuICAgICAgICB0aGlzLlNQTW9kdWxlID0gbW9kdWxlO1xyXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgICAgIC8vIFJldHJpZXZlIERPTSBlbGVtZW50c1xyXG4gICAgICAgICAgICB0aGlzLnBvaW50ZXJCdXR0b24gPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFxyXG4gICAgICAgICAgICAgICAgXCIjdmlld2VyLXBvaW50ZXItdHJpY2tcIixcclxuICAgICAgICAgICAgKSBhcyBIVE1MRWxlbWVudDtcclxuICAgICAgICAgICAgdGhpcy5jb250YWluZXIgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFxyXG4gICAgICAgICAgICAgICAgXCIjdmlld2VyLW1vZHVsZVwiLFxyXG4gICAgICAgICAgICApIGFzIEhUTUxFbGVtZW50O1xyXG4gICAgICAgICAgICBjb25zdCBpZnJhbWUgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFxyXG4gICAgICAgICAgICAgICAgXCIjdmlld2VyLW1vZHVsZVwiLFxyXG4gICAgICAgICAgICApIGFzIEhUTUxJRnJhbWVFbGVtZW50O1xyXG4gICAgICAgICAgICBpZiAoIWlmcmFtZSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvLyBBZGQgbGlzdGVuZXJzXHJcbiAgICAgICAgICAgIGlmICh0aGlzLnBvaW50ZXJCdXR0b24pIHtcclxuICAgICAgICAgICAgICAgIHRoaXMucG9pbnRlckJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKFxyXG4gICAgICAgICAgICAgICAgICAgIFwiY2xpY2tcIixcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnBvaW50ZXJMZWZ0Q2xpY2tIYW5kbGVyLFxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgIC8vIGNhbmNlbCBvbiByaWdodCBjbGlja1xyXG4gICAgICAgICAgICAgICAgdGhpcy5wb2ludGVyQnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoXHJcbiAgICAgICAgICAgICAgICAgICAgXCJjb250ZXh0bWVudVwiLFxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucG9pbnRlclJpZ2h0Q2xpY2tIYW5kbGVyLFxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy8gTG9hZCBTREtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coXCJMb2FkaW5nIE1hdHRlcnBvcnQgU0RLXCIpO1xyXG4gICAgICAgICAgICAvLyBAdHMtaWdub3JlXHJcbiAgICAgICAgICAgIHdpbmRvdy5NUF9TREsuY29ubmVjdChcclxuICAgICAgICAgICAgICAgIGlmcmFtZSxcclxuICAgICAgICAgICAgICAgIFwicW45d3Nhc3V5NWgyZnpyYnJuMW56cjBpZFwiLFxyXG4gICAgICAgICAgICAgICAgXCIzLjExXCIsXHJcbiAgICAgICAgICAgICkudGhlbihhc3luYyAoc2RrOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgIC8vIEluc3RhbmNpYXRlIHNka1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZGsgPSBzZGs7XHJcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKG1vZHVsZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgU3BNb2R1bGUuSU1NTzpcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZGsuTWF0dGVydGFnLnJlZ2lzdGVySWNvbihcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiaWNvbi10aWNrZXRcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29uZmlnLm15X2NvbmZpZy5pY29uX3RpY2tldCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZGsuTWF0dGVydGFnLnJlZ2lzdGVySWNvbihcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiaWNvbi1lcXVpcG1lbnRcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29uZmlnLm15X2NvbmZpZy5pY29uX2VxdWlwbWVudCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZGsuTWF0dGVydGFnLnJlZ2lzdGVySWNvbihcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiaWNvbi1tZWFzdXJlXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbmZpZy5teV9jb25maWcuaWNvbl9tZWFzdXJlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNkay5NYXR0ZXJ0YWcucmVnaXN0ZXJJY29uKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJpY29uLWRhdGFcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29uZmlnLm15X2NvbmZpZy5pY29uX2RhdGEsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNkay5NZWFzdXJlbWVudHMuZGF0YS5zdWJzY3JpYmUoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb25BZGRlZDogZnVuY3Rpb24gKGluZGV4OiBhbnksIGl0ZW06IHsgcG9pbnRzOiBhbnk7IH0sIGNvbGxlY3Rpb246IGFueSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICBcIml0ZW0gYWRkZWQgdG8gdGhlIGNvbGxlY3Rpb25cIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgaW5kZXgsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgIGl0ZW0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0aGlzLm1lYXN1cmVtZW50c1tpbmRleF0gPSBpdGVtO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubGFzdE1lYXN1cmUgPSBpdGVtLnBvaW50cztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0uYmluZCh0aGlzKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ29sbGVjdGlvblVwZGF0ZWQ6IGZ1bmN0aW9uIChjb2xsZWN0aW9uOiBhbnkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZygndGhlIGVudGlyZSB1cC10by1kYXRlIGNvbGxlY3Rpb24nLCBjb2xsZWN0aW9uKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmdldERpc3RhbmNlRm9yTGFzdE1lYXN1cmVtZW50KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LmJpbmQodGhpcyksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNkay5NZWFzdXJlbWVudHMubW9kZS5zdWJzY3JpYmUoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiAobWVhc3VyZW1lbnRNb2RlU3RhdGU6IHsgYWN0aXZlOiBhbnk7IH0pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBtZWFzdXJlbWVudCBtb2RlIHN0YXRlIGhhcyBjaGFuZ2VkXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pc01lYXN1cmVNb2RlT24gPSBtZWFzdXJlbWVudE1vZGVTdGF0ZS5hY3RpdmU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coJ0lzIG1lYXN1cmVtZW50IG1vZGUgY3VycmVudGx5IGFjdGl2ZT8gJywgbWVhc3VyZW1lbnRNb2RlU3RhdGUuYWN0aXZlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0uYmluZCh0aGlzKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBTcE1vZHVsZS5NVVNFVU06XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2RrLk1hdHRlcnRhZy5yZWdpc3Rlckljb24oXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImljb24tZGF0YVwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb25maWcubXlfY29uZmlnLmljb25fZGF0YSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBTcE1vZHVsZS5IT1RFTDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZGsuTWF0dGVydGFnLnJlZ2lzdGVySWNvbihcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiaWNvbl9yb29tX2F2YWlsYWJsZVwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb25maWcubXlfY29uZmlnLmljb25fcm9vbV9hdmFpbGFibGUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2RrLk1hdHRlcnRhZy5yZWdpc3Rlckljb24oXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImljb25fcm9vbV91bmF2YWlsYWJsZVwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb25maWcubXlfY29uZmlnLmljb25fcm9vbV91bmF2YWlsYWJsZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZGsuTWF0dGVydGFnLnJlZ2lzdGVySWNvbihcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiaWNvbl9yb29tX2Nob3NlblwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb25maWcubXlfY29uZmlnLmljb25fcm9vbV9jaG9zZW5cclxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZGsuTWF0dGVydGFnLnJlZ2lzdGVySWNvbihcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiaWNvbl9yb29tX3ZpZXdlZFwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb25maWcubXlfY29uZmlnLmljb25fcm9vbV92aWV3ZWRcclxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAvLyBMb2FkIE1hdHRlcnRhZyBpY29uc1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZGsuTWF0dGVydGFnLnJlZ2lzdGVySWNvbihcclxuICAgICAgICAgICAgICAgICAgICBcImljb24tcG9zaXRpb25cIixcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbmZpZy5teV9jb25maWcuaWNvbl9wb3NpdGlvbixcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAvLyAzRCBwb3NpdGlvbidzIHBvaW50ZXJcclxuICAgICAgICAgICAgICAgIHRoaXMuc2RrLlBvaW50ZXIuaW50ZXJzZWN0aW9uLnN1YnNjcmliZShcclxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiAoaW50ZXJzZWN0aW9uOiBhbnkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wb3NlTWF0dGVycG9ydCA9IGludGVyc2VjdGlvbjtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5vbGRQb3NlTWF0dGVycG9ydFBvc2l0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9sZFBvc2VNYXR0ZXJwb3J0UG9zaXRpb24gPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeDogMCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5OiAwLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHo6IDAsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmludGVyYWN0aW9uTW9kZSAhPT1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZpZXdlckludGVyYWN0aW9ucy5ERUZBVUxUICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1hdHRlcnRhZ1RvRm9sbG93XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZm9sbG93IHRoZSBwb2ludGVyIGFuZCBjaGFuZ2VzIHRoZSBwb3NpdGlvbiBvZiB0aGUgbGFzdCB0YWdcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICh3ZSBhcmUgYWJvdXQgdG8gdmFsaWRhdGUsIGJ1dCBpdCBleGlzdHMgaW4gc2RrIGFscmVhZHkpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmVuYWJsZV9mb2xsb3dpbmdfdGFnKHRoaXMubWF0dGVydGFnVG9Gb2xsb3cpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfS5iaW5kKHRoaXMpLFxyXG4gICAgICAgICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICAgICAgICAvL0NhbWVyYSBtb2RlXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNkay5Nb2RlLmN1cnJlbnQuc3Vic2NyaWJlKChtb2RlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pblRyYW5zaXRpb25Td2VlcCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaCAobW9kZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdtb2RlLmRvbGxob3VzZSc6IHRoaXMuY3VycmVudENhbWVyYU1vZGUgPSBDYW1lcmFNb2RlLkRPTExIT1VTRTsgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ21vZGUuZmxvb3JwbGFuJzogdGhpcy5jdXJyZW50Q2FtZXJhTW9kZSA9IENhbWVyYU1vZGUuRkxPT1JQTEFOOyBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnbW9kZS5pbnNpZGUnOiB0aGlzLmN1cnJlbnRDYW1lcmFNb2RlID0gQ2FtZXJhTW9kZS5JTlNJREU7IGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdtb2RlLnRyYW5zaXRpb25pbmcnOiB0aGlzLmN1cnJlbnRDYW1lcmFNb2RlID0gQ2FtZXJhTW9kZS5UUkFOU0lUSU9OSU5HOyBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDogdGhpcy5jdXJyZW50Q2FtZXJhTW9kZSA9IENhbWVyYU1vZGUuT1VUU0lERTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vbkNhbWVyYU1vZGVDaGFuZ2VkLm5leHQodGhpcy5jdXJyZW50Q2FtZXJhTW9kZSk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICAvLyBDYW1lcmEncyB2aWV3cG9pbnRcclxuICAgICAgICAgICAgICAgIHRoaXMuc2RrLkNhbWVyYS5wb3NlLnN1YnNjcmliZShcclxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBzdWJzY3IocG9zZTogYW55KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucG9zZUNhbWVyYSA9IHBvc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudENhbWVyYVBvc2UubmV4dChwb3NlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coJ0N1cnJlbnQgcG9zaXRpb24gaXMgJywgcG9zZS5wb3NpdGlvbik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKCdSb3RhdGlvbiBhbmdsZSBpcyAnLCBwb3NlLnJvdGF0aW9uKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coXCJTd2VlcCBVVUlEIGlzXCIsIHBvc2Uuc3dlZXApO1xyXG4gICAgICAgICAgICAgICAgICAgIH0uYmluZCh0aGlzKSxcclxuICAgICAgICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gc3Vic2NyaWJlIHRvIHN3ZWVwc1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZGsuU3dlZXAuZGF0YS5zdWJzY3JpYmUoe1xyXG4gICAgICAgICAgICAgICAgICAgIG9uQ29sbGVjdGlvblVwZGF0ZWQ6IGZ1bmN0aW9uIHN1YnNjcihjb2xsZWN0aW9uOiB7fSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhjb2xsZWN0aW9uKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zd2VlcHMgPSBPYmplY3Qua2V5cyhjb2xsZWN0aW9uKTtcclxuICAgICAgICAgICAgICAgICAgICB9LmJpbmQodGhpcyksXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICAvLyBzdWJzY3JpYmUgdG8gY3VycmVudCBzd2VlcFxyXG4gICAgICAgICAgICAgICAgdGhpcy5zZGsuU3dlZXAuY3VycmVudC5zdWJzY3JpYmUoXHJcbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gc3Vic2NyKGN1cnJlbnRTd2VlcDogeyBzaWQ6IHN0cmluZzsgfSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBDaGFuZ2UgdG8gdGhlIGN1cnJlbnQgc3dlZXAgaGFzIG9jY3VycmVkLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY3VycmVudFN3ZWVwLnNpZCA9PT0gXCJcIikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coJ05vdCBjdXJyZW50bHkgc3RhdGlvbmVkIGF0IGEgc3dlZXAgcG9zaXRpb24nKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKFwiZW1taXRpbmcgc3dlZXBcIiwgY3VycmVudFN3ZWVwLnNpZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRTd2VlcC5uZXh0KGN1cnJlbnRTd2VlcC5zaWQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfS5iaW5kKHRoaXMpLFxyXG4gICAgICAgICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICAgICAgICAvLyBTdWJzY3JpYmUgdG8gRmxvb3IgZGF0YVxyXG4gICAgICAgICAgICAgICAgdGhpcy5zZGsuRmxvb3IuZGF0YS5zdWJzY3JpYmUoe1xyXG4gICAgICAgICAgICAgICAgICAgIG9uQ29sbGVjdGlvblVwZGF0ZWQ6IGZ1bmN0aW9uIHVwZCh0aGlzOiBhbnksIGNvbGxlY3Rpb246IGFueSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZsb29ycyA9IE9iamVjdC52YWx1ZXMoY29sbGVjdGlvbik7XHJcbiAgICAgICAgICAgICAgICAgICAgfS5iaW5kKHRoaXMpLFxyXG4gICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gb24gdGFnIGNsaWNrIG9wZW4gZGV0YWlscyBwYWdlXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNkay5vbihcInRhZy5jbGlja1wiLCAoc2lkOiBzdHJpbmcpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBnZXQgb2JqZWN0IG9mIHRoaXMgdGFnXHJcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbWF0dGVydGFnRGF0YSA9IHRoaXMuZGljdGlvbm5hcnlUYWdzLmdldChzaWQpPy5tYXR0ZXJ0YWdEYXRhITtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdXJsID0gdGFnU2VydmljZS5nZXRVcmxGb3JTZWVEZXRhaWxzKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0dGVydGFnRGF0YS5nZXRPYmplY3QoKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdHRlcnRhZ0RhdGEuZ2V0VHlwZSgpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodXJsICE9PSBcIlwiKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnZpc2liaWxpdHlTZXJ2aWNlLmRldGFpbFNob3dpbmcubmV4dCh0cnVlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFt1cmxdKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2gge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIkNhbm5vdCBzaG93IGRldGFpbHMgZm9yIHRhZ1wiKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICAvLyBQb2ludGVyIHRyaWNrXHJcbiAgICAgICAgICAgICAgICAvLyBDcmVhdGUgYSBkaXYgdGhhdCB3aWxsIGFwcGVhciB3aGVuIHRoZSBjdXJzb3IgaXMgc3RpbGxcclxuICAgICAgICAgICAgICAgIC8vIEl0IHdpbGwgaW50ZXJjZXB0IHRoZSBjbGljayBvZiB0aGUgbW91c2UgYmVmb3JlIGl0IHRyaWdlcnJpbmcgdGhlIE1hdHRlcnBvcnQncyB0b3VyIG5hdmlnYXRpb25cclxuICAgICAgICAgICAgICAgIHRoaXMudGltZXJQb2ludGVyID0gc2V0SW50ZXJ2YWwoXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51cGRhdGVQb2ludGVyVHJpY2suYmluZCh0aGlzKSxcclxuICAgICAgICAgICAgICAgICAgICA1MCxcclxuICAgICAgICAgICAgICAgICk7XHJcblxyXG5cclxuICAgICAgICAgICAgICAgIC8qKlxyXG4gICAgICAgICAgICAgICAgICAgKiBUcmFuc2l0aW9uc1xyXG4gICAgICAgICAgICAgICAgICAgKi9cclxuICAgICAgICAgICAgICAgIHRoaXMuc2RrLm9uKFwidmlld21vZGUuY2hhbmdlc3RhcnRcIiwgZnVuY3Rpb24gKHRvLCBmcm9tKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coJ1N0YXJ0aW5nIHRvIG1vdmUgdG8gJyArIHRvICsgJyBmcm9tICcgKyBmcm9tKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmluVHJhbnNpdGlvbk1vZGUgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgfS5iaW5kKHRoaXMpKTtcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNkay5vbihcInZpZXdtb2RlLmNoYW5nZWVuZFwiLCBmdW5jdGlvbiAob2xkTW9kZSwgbmV3TW9kZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKCdFbmRlZCB0byBtb3ZlIHRvICcgKyBuZXdNb2RlICsgJyBmcm9tICcgKyBvbGRNb2RlKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAobmV3TW9kZSAhPT0gXCJtb2RlLnRyYW5zaXRpb25pbmdcIikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmluVHJhbnNpdGlvbk1vZGUgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9LmJpbmQodGhpcykpO1xyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMuc2RrLm9uKHNkay5Td2VlcC5FdmVudC5FTlRFUixcclxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiAob2xkU3dlZXAsIG5ld1N3ZWVwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKCdMZWF2aW5nIHN3ZWVwICcgKyBvbGRTd2VlcCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKCdFbnRlcmluZyBzd2VlcCAnICsgbmV3U3dlZXApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmluVHJhbnNpdGlvblN3ZWVwID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgfS5iaW5kKHRoaXMpXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZGsub24oc2RrLlN3ZWVwLkV2ZW50LkVYSVQsXHJcbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gKGZyb21Td2VlcCwgdG9Td2VlcCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyAgIGNvbnNvbGUubG9nKCdMZWF2aW5nIHN3ZWVwICcgKyBmcm9tU3dlZXApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyAgIGNvbnNvbGUubG9nKCdUcmFuc2l0aW9uaW5nIHRvIHN3ZWVwICcgKyB0b1N3ZWVwKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pblRyYW5zaXRpb25Td2VlcCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgfS5iaW5kKHRoaXMpXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgcmVzb2x2ZSh0cnVlKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBZGQgTWF0dGVydGFnIHRvIHRoZSBkaWN0aW9ubmFyeSBvZiB0aGUgY3VycmVudCB0YWdzXHJcbiAgICAgKiBAcGFyYW0gbWF0dGVydGFnSURcclxuICAgICAqIEBwYXJhbSBtYXR0ZXJ0YWdEYXRhXHJcbiAgICAgKiBAcGFyYW0gdGFnVHlwZVxyXG4gICAgICogQHBhcmFtIHRpY2tldElEXHJcbiAgICAgKi9cclxuICAgIGFkZE1hdHRlcnRhZ1RvT2JqZWN0KG1hdHRlcnRhZ0lEOiBzdHJpbmcsIG1hdHRlcnRhZ0RhdGE6IE1hdHRlcnRhZ0RhdGEpIHtcclxuICAgICAgICBpZiAodGhpcy5zZGspIHtcclxuICAgICAgICAgICAgdGhpcy5tYXR0ZXJ0YWdzLnB1c2gobWF0dGVydGFnSUQpO1xyXG4gICAgICAgICAgICB0aGlzLmRpY3Rpb25uYXJ5VGFncy5zZXQobWF0dGVydGFnSUQsIHtcclxuICAgICAgICAgICAgICAgIG1hdHRlcnRhZ0RhdGEsXHJcbiAgICAgICAgICAgICAgICBlbGVtZW50SUQ6IG1hdHRlcnRhZ0RhdGEuZWxlbWVudElELFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgdGhpcy5lZGl0VGFnU3R5bGUobWF0dGVydGFnSUQsIG1hdHRlcnRhZ0RhdGEpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBnZXREaXN0YW5jZUZvckxhc3RNZWFzdXJlbWVudCgpIHtcclxuICAgICAgICBpZiAodGhpcy5sYXN0TWVhc3VyZS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG51bWJlclBvaW50cyA9IHRoaXMubGFzdE1lYXN1cmUubGVuZ3RoO1xyXG4gICAgICAgICAgICB0aGlzLmRpc3RhbmNlc0xhc3RNZWFzdXJlID0gW107XHJcbiAgICAgICAgICAgIGZvciAobGV0IGluZGV4ID0gMTsgaW5kZXggPCBudW1iZXJQb2ludHM7IGluZGV4ICs9IDEpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGRpc3RhbmNlID0gZ2V0RGlzdGFuY2VCZXR3ZWVuVHdvUG9pbnRzKFxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubGFzdE1lYXN1cmVbaW5kZXggLSAxXSxcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmxhc3RNZWFzdXJlW2luZGV4XSxcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmRpc3RhbmNlc0xhc3RNZWFzdXJlLnB1c2goZGlzdGFuY2UpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMudGFrZVNjcmVlblNob3QoKS50aGVuKChyZXMpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZ29Ub01lbnUoYHZpc2l0LyR7dGhpcy5jdXJyZW50U3BhY2VJRH0vYWRkX21lYXN1cmVtZW50YCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEluaXQgdGhlIE1hdHRlcnRhZyB0aGF0IHdpbGwgZm9sbG93IHRoZSBjdXJzb3JcclxuICAgICAqIEBwYXJhbSB0YWdUeXBlXHJcbiAgICAgKi9cclxuICAgIGFzeW5jIGFkZF9jdXJzb3JfbWF0dGVydGFnKFxyXG4gICAgICAgIHRhZ1R5cGU6IFBvaVR5cGUsXHJcbiAgICAgICAgZWxlbWVudD86IGFueSxcclxuICAgICAgICBwb3NpdGlvbmluZzogYm9vbGVhbiA9IGZhbHNlLFxyXG4gICAgKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnBvc2VNYXR0ZXJwb3J0KSByZXR1cm47XHJcbiAgICAgICAgY29uc3QgbWF0dGVydGFnRGF0YSA9IG5ldyBNYXR0ZXJ0YWdEYXRhKHRhZ1R5cGUpO1xyXG4gICAgICAgIGlmIChwb3NpdGlvbmluZykge1xyXG4gICAgICAgICAgICAvLyBzZXQgdGhlIGNvb3JkaW5hdGVzIG9mIHRoZSBleGlzdGluZyB0YWdcclxuICAgICAgICAgICAgY29uc3QgW3BvaV0gPSBlbGVtZW50LnBvaXMuaXRlbXM7XHJcbiAgICAgICAgICAgIGlmIChwb2kgJiYgcG9pLmNvb3JkaW5hdGUpIHtcclxuICAgICAgICAgICAgICAgIG1hdHRlcnRhZ0RhdGEuc2V0UG9zaXRpb24oSlNPTi5wYXJzZShwb2kuY29vcmRpbmF0ZSkpO1xyXG4gICAgICAgICAgICAgICAgbWF0dGVydGFnRGF0YS5zZXRQb2kocG9pKTsgLy8gdG8ga2VlcCBjdXN0b20gdGFnSW9uIGFuZCBvcGFjaXR5XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgbWF0dGVydGFnRGF0YS5zZXRTd2VlcElEKHRoaXMucG9zZUNhbWVyYS5zd2VlcCk7XHJcbiAgICAgICAgbWF0dGVydGFnRGF0YS5zZXRSb3RhdGlvbih0aGlzLnBvc2VDYW1lcmEucm90YXRpb24pO1xyXG4gICAgICAgIGlmIChlbGVtZW50KSB7XHJcbiAgICAgICAgICAgIG1hdHRlcnRhZ0RhdGEuc2V0T2JqZWN0KGVsZW1lbnQsIHRhZ1R5cGUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLm1hdHRlcnRhZ1RvRm9sbG93ID0gYXdhaXQgdGhpcy5hZGRfbWF0dGVydGFnX3RvX3ZpZXdlcihcclxuICAgICAgICAgICAgbWF0dGVydGFnRGF0YSxcclxuICAgICAgICApO1xyXG4gICAgICAgIGlmIChwb3NpdGlvbmluZykge1xyXG4gICAgICAgICAgICB0aGlzLnNkay5NYXR0ZXJ0YWcuZWRpdEljb24oXHJcbiAgICAgICAgICAgICAgICB0aGlzLm1hdHRlcnRhZ1RvRm9sbG93LFxyXG4gICAgICAgICAgICAgICAgXCJpY29uLXBvc2l0aW9uXCIsXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIHRoaXMuc2RrLk1hdHRlcnRhZy5lZGl0T3BhY2l0eSh0aGlzLm1hdHRlcnRhZ1RvRm9sbG93LCAxKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBZGQgTWF0dGVydGFnIGZyb20gaXRzIGRhdGFcclxuICAgICAqIEBwYXJhbSB0YWdJRFxyXG4gICAgICogQHBhcmFtIHRhZ1R5cGVcclxuICAgICAqIEBwYXJhbSBtYXR0ZXJ0YWdEYXRhXHJcbiAgICAgKi9cclxuICAgIGFzeW5jIGFkZF9tYXR0ZXJ0YWdfdG9fdmlld2VyKFxyXG4gICAgICAgIG1hdHRlcnRhZ0RhdGE6IE1hdHRlcnRhZ0RhdGEsXHJcbiAgICApOiBQcm9taXNlPHN0cmluZyB8IG51bGw+IHtcclxuICAgICAgICBsZXQgc2lkTGlzdDtcclxuICAgICAgICBpZiAoIXRoaXMuc2RrKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBzaWRMaXN0ID0gYXdhaXQgdGhpcy5zZGsuTWF0dGVydGFnLmFkZChtYXR0ZXJ0YWdEYXRhLmdldERhdGEoKSk7XHJcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coXHJcbiAgICAgICAgICAgICAgICBcIlRhZyBkb2VzIG5vdCBiZWxvbmcgdG8gdGhlIHZpc2l0XCIsXHJcbiAgICAgICAgICAgICAgICBlcnJvcixcclxuICAgICAgICAgICAgICAgIG1hdHRlcnRhZ0RhdGEuZ2V0RGF0YSgpLFxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoc2lkTGlzdCkge1xyXG4gICAgICAgICAgICBjb25zdCBtYXR0ZXJ0YWdJRCA9IHNpZExpc3RbMF07XHJcbiAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKFwiYWRkZWQgdGFnXCIsIG1hdHRlcnRhZ0RhdGEuZ2V0VHlwZSgpLCBtYXR0ZXJ0YWdJRCk7XHJcbiAgICAgICAgICAgIHRoaXMuYWRkTWF0dGVydGFnVG9PYmplY3QobWF0dGVydGFnSUQsIG1hdHRlcnRhZ0RhdGEpO1xyXG4gICAgICAgICAgICByZXR1cm4gbWF0dGVydGFnSUQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICBVdGlscyAtIE1hdHRlcnRhZ1xyXG4gIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXHJcblxyXG4gICAgYWRkTWF0dGVydGFnKCkge1xyXG4gICAgICAgIHRoaXMuc2V0SW50ZXJhY3Rpb25Nb2RlKFZpZXdlckludGVyYWN0aW9ucy5ERUZBVUxUKTtcclxuICAgICAgICB0aGlzLmFjdGlvbl9vcGVuX21lbnUodGhpcy5nZXRNZW51VG9PcGVuRm9yTGFzdFRhZygpKTtcclxuICAgICAgICB0aGlzLnJlc2V0QWN0aW9uVGltZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZVBvaW50ZXJUcmljaygpIHtcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgIHRoaXMuaW50ZXJhY3Rpb25Nb2RlICE9PSBWaWV3ZXJJbnRlcmFjdGlvbnMuREVGQVVMVCAmJlxyXG4gICAgICAgICAgICB0aGlzLm1hdHRlcnRhZ1RvRm9sbG93ICYmXHJcbiAgICAgICAgICAgIHRoaXMucG9zZU1hdHRlcnBvcnQgJiZcclxuICAgICAgICAgICAgdGhpcy5nZXREaXN0UG9zaXRpb24oXHJcbiAgICAgICAgICAgICAgICB0aGlzLnBvc2VNYXR0ZXJwb3J0LnBvc2l0aW9uLFxyXG4gICAgICAgICAgICAgICAgdGhpcy5vbGRQb3NlTWF0dGVycG9ydFBvc2l0aW9uLFxyXG4gICAgICAgICAgICApID4gMjVcclxuICAgICAgICApIHtcclxuICAgICAgICAgICAgdGhpcy5wb2ludGVyQnV0dG9uLnN0eWxlLmRpc3BsYXkgPSBcIm5vbmVcIjtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IHNpemUgPSB7XHJcbiAgICAgICAgICAgICAgICB3OiB0aGlzLmNvbnRhaW5lci5jbGllbnRXaWR0aCxcclxuICAgICAgICAgICAgICAgIGg6IHRoaXMuY29udGFpbmVyLmNsaWVudEhlaWdodCxcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgY29uc3QgY29vcmRzID0gdGhpcy5zZGsuQ29udmVyc2lvbi53b3JsZFRvU2NyZWVuKFxyXG4gICAgICAgICAgICAgICAgdGhpcy5wb3NlTWF0dGVycG9ydC5wb3NpdGlvbixcclxuICAgICAgICAgICAgICAgIHRoaXMucG9zZUNhbWVyYSxcclxuICAgICAgICAgICAgICAgIHNpemUsXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIHRoaXMucG9pbnRlckJ1dHRvbi5zdHlsZS5sZWZ0ID0gYCR7Y29vcmRzLnggKiBNYXRoLnNpZ24oY29vcmRzLngpIC0gMjVcclxuICAgICAgICAgICAgICAgIH1weGA7XHJcbiAgICAgICAgICAgIHRoaXMucG9pbnRlckJ1dHRvbi5zdHlsZS50b3AgPSBgJHtjb29yZHMueSAqIE1hdGguc2lnbihjb29yZHMueCkgLSAyNVxyXG4gICAgICAgICAgICAgICAgfXB4YDtcclxuICAgICAgICAgICAgdGhpcy5vbGRQb3NlTWF0dGVycG9ydFBvc2l0aW9uID0ge1xyXG4gICAgICAgICAgICAgICAgLi4udGhpcy5wb3NlTWF0dGVycG9ydC5wb3NpdGlvbixcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnBvaW50ZXJCdXR0b24uc3R5bGUuZGlzcGxheSA9IFwiYmxvY2tcIjtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgYWRkTmV3SWNvbkFuZFNldEZvclRhZyhtYXR0ZXJ0YWdJRDogc3RyaW5nLCBpY29uUGF0aDogc3RyaW5nKSB7XHJcbiAgICAgICAgYXdhaXQgdGhpcy5zZGsuTWF0dGVydGFnLnJlZ2lzdGVySWNvbihcclxuICAgICAgICAgICAgYGljb25fJHttYXR0ZXJ0YWdJRH1gLFxyXG4gICAgICAgICAgICBpY29uUGF0aCxcclxuICAgICAgICApO1xyXG4gICAgICAgIHRoaXMuc2RrLk1hdHRlcnRhZy5lZGl0SWNvbihtYXR0ZXJ0YWdJRCwgYGljb25fJHttYXR0ZXJ0YWdJRH1gKTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBzZXRSZWdpc3RyZWRJY29uRm9yVGFnKG1hdHRlcnRhZ0lEOiBzdHJpbmcsIGljb25OYW1lOiBzdHJpbmcpIHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICB0aGlzLnNkay5NYXR0ZXJ0YWcuZWRpdEljb24obWF0dGVydGFnSUQsIGljb25OYW1lKTtcclxuICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiY291bGQgbm90IGVkaXQgSWNvbiB3aXRoIG5hbWUgXCIsIGljb25OYW1lLCBcIi4gSXMgaXQgcmVnaXN0ZXJlZD9cIik7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuXHJcbiAgICBhc3luYyBlZGl0VGFnU3R5bGUobWF0dGVydGFnSUQ6IHN0cmluZywgbWF0dGVydGFnRGF0YTogTWF0dGVydGFnRGF0YSkge1xyXG4gICAgICAgIGlmICh0aGlzLlNQTW9kdWxlID09PSBTcE1vZHVsZS5IT1RFTCkge1xyXG4gICAgICAgICAgICBjb25zdCByb29tID0gbWF0dGVydGFnRGF0YS5nZXRPYmplY3QoKTtcclxuICAgICAgICAgICAgbGV0IGljb25OYW1lID0gYGljb25fcm9vbWA7XHJcbiAgICAgICAgICAgIGlmIChyb29tLmF2YWlsYWJsZSkge1xyXG4gICAgICAgICAgICAgICAgaWNvbk5hbWUgPSBgJHtpY29uTmFtZX1fYXZhaWxhYmxlYDtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGljb25OYW1lID0gYCR7aWNvbk5hbWV9X3VuYXZhaWxhYmxlYDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLnNkay5NYXR0ZXJ0YWcuZWRpdEljb24obWF0dGVydGFnSUQsIGljb25OYW1lKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBzdHJpbmdUYWdUeXBlID0gcG9pVHlwZVRvU3RyaW5nKG1hdHRlcnRhZ0RhdGEuZ2V0VHlwZSgpKTtcclxuICAgICAgICBsZXQgb3BhY2l0eSA9IHRoaXMuY29uZmlnLm15X2NvbmZpZy5ERUZBVUxUX09QQUNJVFlfVEFHO1xyXG4gICAgICAgIGxldCBpY29uTmFtZSA9IGBpY29uLSR7c3RyaW5nVGFnVHlwZX1gO1xyXG4gICAgICAgIGNvbnN0IHBvaSA9IG1hdHRlcnRhZ0RhdGEuZ2V0UG9pKCk7XHJcbiAgICAgICAgaWYgKHBvaSAmJiBwb2kudGFnSWNvbikge1xyXG4gICAgICAgICAgICBjb25zdCB0YWdJY29uID0gSlNPTi5wYXJzZShwb2kudGFnSWNvbik7XHJcbiAgICAgICAgICAgIC8vIFRPRE8gZm9yIGluZGljYXRvcnNcclxuICAgICAgICAgICAgaWYgKG1hdHRlcnRhZ0RhdGEuZ2V0VHlwZSgpID09PSBQb2lUeXBlLkRBVEEpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGZlYXR1cmUgPSBtYXR0ZXJ0YWdEYXRhLmdldE9iamVjdCgpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGZlYXR1cmUudHlwZSA9PT0gRmVhdHVyZVR5cGUuSU5ESUNBVE9SX1RFTVApIHtcclxuICAgICAgICAgICAgICAgICAgICB0YWdJY29uLnNyYyA9IHRoaXMudGFnU2VydmljZS5nZXRJY29uVGFnSW1hZ2VGb3JGZWF0dXJlKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBmZWF0dXJlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBwb2ksXHJcbiAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAodGFnSWNvbi5zcmMpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHBhdGhTaWduZWQgPSBhd2FpdCB0aGlzLnRhZ1NlcnZpY2UuZ2V0U2lnbmVkVGFnSWNvblNvdXJjZSh0YWdJY29uLnNyYyk7XHJcbiAgICAgICAgICAgICAgICBpZiAocGF0aFNpZ25lZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGljb25OYW1lID0gYGljb24tJHtzdHJpbmdUYWdUeXBlfS0ke21hdHRlcnRhZ0lEfS0ke21hdHRlcnRhZ0RhdGEuY3VzdG9tSWNvbkluZGV4fWA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuc2RrLk1hdHRlcnRhZy5yZWdpc3Rlckljb24oXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpY29uTmFtZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGhTaWduZWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdHRlcnRhZ0RhdGEuY3VzdG9tSWNvbkluZGV4ICs9IDE7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiZXJyb3IgcmVnaXN0ZXJJY29uXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAodGFnSWNvbi5vcGFjaXR5KSB7XHJcbiAgICAgICAgICAgICAgICBvcGFjaXR5ID0gdGFnSWNvbi5vcGFjaXR5O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2RrLk1hdHRlcnRhZy5lZGl0SWNvbihtYXR0ZXJ0YWdJRCwgaWNvbk5hbWUpO1xyXG4gICAgICAgICAgICB0aGlzLnNkay5NYXR0ZXJ0YWcuZWRpdE9wYWNpdHkobWF0dGVydGFnSUQsIG9wYWNpdHkpO1xyXG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiRXJyb3IgZWRpdEljb24gb3Igb3BhY2l0eVwiLCBlcnJvcik7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuXHJcbiAgICBlbmFibGVfZm9sbG93aW5nX3RhZyhtYXR0ZXJ0YWc6IGFueSkge1xyXG4gICAgICAgIHRoaXMuc2RrLk1hdHRlcnRhZy5lZGl0UG9zaXRpb24obWF0dGVydGFnLCB7XHJcbiAgICAgICAgICAgIGFuY2hvclBvc2l0aW9uOiB7XHJcbiAgICAgICAgICAgICAgICB4OiB0aGlzLnBvc2VNYXR0ZXJwb3J0LnBvc2l0aW9uLnggKiAxLFxyXG4gICAgICAgICAgICAgICAgeTogdGhpcy5wb3NlTWF0dGVycG9ydC5wb3NpdGlvbi55ICogMSxcclxuICAgICAgICAgICAgICAgIHo6IHRoaXMucG9zZU1hdHRlcnBvcnQucG9zaXRpb24ueiAqIDEsXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHN0ZW1WZWN0b3I6IHtcclxuICAgICAgICAgICAgICAgIHg6IHRoaXMucG9zZU1hdHRlcnBvcnQubm9ybWFsLnggKiAwLjMsXHJcbiAgICAgICAgICAgICAgICB5OiB0aGlzLnBvc2VNYXR0ZXJwb3J0Lm5vcm1hbC55ICogMC4zLFxyXG4gICAgICAgICAgICAgICAgejogdGhpcy5wb3NlTWF0dGVycG9ydC5ub3JtYWwueiAqIDAuMyxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICByZXNldEFjdGlvblRpbWUoKSB7XHJcbiAgICAgICAgdGhpcy5sYXN0QWN0aW9uVGltZSA9IC0xO1xyXG4gICAgfVxyXG5cclxuICAgIGdvVG9MYXN0VGFnKCkge1xyXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBsYXN0VGFnID0gdGhpcy5nZXRMYXN0VGFnKCk7XHJcbiAgICAgICAgICAgIHRoaXMuZ29Ub1RhZyhsYXN0VGFnKTtcclxuICAgICAgICB9LCAyMDAwKTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBnb1RvVGFnKG1hdHRlcnRhZ0lEOiBzdHJpbmcpIHtcclxuICAgICAgICBpZiAobWF0dGVydGFnSUQgPT09IFwiXCIpIHJldHVybjtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICB0aGlzLm9uR29Ub1RhZy5uZXh0KG1hdHRlcnRhZ0lEKTtcclxuXHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuc2RrLk1hdHRlcnRhZy5uYXZpZ2F0ZVRvVGFnKFxyXG4gICAgICAgICAgICAgICAgbWF0dGVydGFnSUQsXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNkay5NYXR0ZXJ0YWcuVHJhbnNpdGlvbi5GTFksXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coXCJjYW5ub3QgbmF2aWdhdGUgdG8gdGFnXCIsIGVycm9yKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZ29Ub01lbnUobWVudVVybDogYW55KSB7XHJcbiAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW21lbnVVcmxdKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldCB0aGUgZGlzdGFuY2UgYmV0d3dlZW4gdHdvIDNEIHBvc2l0aW9uc1xyXG4gICAgICogVXNlZCBpbiBvcmRlciB0byBzZWUgaG93IG11Y2ggdGhlIGN1cnNvciBoYXMgbW92ZWQgZnJvbSB0aGUgcHJldmlvdXMgcG9zaXRpb25cclxuICAgICAqIEBwYXJhbSBwb3MxXHJcbiAgICAgKiBAcGFyYW0gcG9zMlxyXG4gICAgICovXHJcbiAgICBnZXREaXN0UG9zaXRpb24ocG9zMTogYW55LCBwb3MyOiBhbnkpIHtcclxuICAgICAgICBjb25zdCBzaXplID0ge1xyXG4gICAgICAgICAgICB3OiB0aGlzLmNvbnRhaW5lci5jbGllbnRXaWR0aCxcclxuICAgICAgICAgICAgaDogdGhpcy5jb250YWluZXIuY2xpZW50SGVpZ2h0LFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgY29uc3QgY29vcmRzMSA9IHRoaXMuc2RrLkNvbnZlcnNpb24ud29ybGRUb1NjcmVlbihcclxuICAgICAgICAgICAgcG9zMSxcclxuICAgICAgICAgICAgdGhpcy5wb3NlQ2FtZXJhLFxyXG4gICAgICAgICAgICBzaXplLFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgY29uc3QgY29vcmRzMiA9IHRoaXMuc2RrLkNvbnZlcnNpb24ud29ybGRUb1NjcmVlbihcclxuICAgICAgICAgICAgcG9zMixcclxuICAgICAgICAgICAgdGhpcy5wb3NlQ2FtZXJhLFxyXG4gICAgICAgICAgICBzaXplLFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgcmV0dXJuIE1hdGguc3FydChcclxuICAgICAgICAgICAgKGNvb3JkczEueCAtIGNvb3JkczIueCkgKiogMiArIChjb29yZHMxLnkgLSBjb29yZHMyLnkpICoqIDIsXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGVQb3NpdGlvbkluVGFnRGF0YSgpIHtcclxuICAgICAgICBjb25zdCBsYXN0VGFnID0gdGhpcy5nZXRMYXN0VGFnKCk7XHJcbiAgICAgICAgaWYgKGxhc3RUYWcpIHtcclxuICAgICAgICAgICAgdGhpcy5kaWN0aW9ubmFyeVRhZ3MuZ2V0KGxhc3RUYWcpIS5tYXR0ZXJ0YWdEYXRhLnNldFBvc2l0aW9uKFxyXG4gICAgICAgICAgICAgICAgdGhpcy5wb3NlTWF0dGVycG9ydC5wb3NpdGlvbixcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgdGhpcy5kaWN0aW9ubmFyeVRhZ3MuZ2V0KGxhc3RUYWcpIS5tYXR0ZXJ0YWdEYXRhLnNldE5vcm1hbChcclxuICAgICAgICAgICAgICAgIHRoaXMucG9zZU1hdHRlcnBvcnQubm9ybWFsLFxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZU1hdHRlclRhZ0Zyb21JZChsYXN0VGFnKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgdXBkYXRlTWF0dGVyVGFnRnJvbUlkKFxyXG4gICAgICAgIG1hdHRlcnRhZ0lEOiBzdHJpbmcsXHJcbiAgICAgICAgb2JqZWN0OiBhbnkgPSBudWxsLFxyXG4gICAgICAgIHRhZ1R5cGU6IFBvaVR5cGUgfCBudWxsID0gbnVsbCxcclxuICAgICkge1xyXG4gICAgICAgIHRoaXMuc2RrLk1hdHRlcnRhZy5lZGl0QmlsbGJvYXJkKFxyXG4gICAgICAgICAgICBtYXR0ZXJ0YWdJRCxcclxuICAgICAgICAgICAgdGhpcy5kaWN0aW9ubmFyeVRhZ3MuZ2V0KG1hdHRlcnRhZ0lEKSEubWF0dGVydGFnRGF0YS5nZXREYXRhKCksXHJcbiAgICAgICAgKTtcclxuICAgICAgICBpZiAob2JqZWN0ICYmIHRhZ1R5cGUpIHtcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5pbmplY3RIdG1sSW5UYWcodGFnVHlwZSwgb2JqZWN0LCBtYXR0ZXJ0YWdJRCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGF3YWl0IHRoaXMuZWRpdFRhZ1N0eWxlKFxyXG4gICAgICAgICAgICBtYXR0ZXJ0YWdJRCxcclxuICAgICAgICAgICAgdGhpcy5kaWN0aW9ubmFyeVRhZ3MuZ2V0KG1hdHRlcnRhZ0lEKSEubWF0dGVydGFnRGF0YSxcclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIHVwZGF0ZUluamVjdGVkSHRtbEZvclRhZ0lEKG1hdHRlcnRhZ0lEOiBzdHJpbmcsXHJcbiAgICAgICAgb2JqZWN0OiBhbnksXHJcbiAgICAgICAgdGFnVHlwZTogUG9pVHlwZSkge1xyXG4gICAgICAgIGF3YWl0IHRoaXMuaW5qZWN0SHRtbEluVGFnKHRhZ1R5cGUsIG9iamVjdCwgbWF0dGVydGFnSUQpO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGVkaXRCaWxsYm9hcmRGb3JUYWcobWF0dGVydGFnSUQ6IHN0cmluZyxcclxuICAgICAgICBvYmplY3Q6IGFueSxcclxuICAgICAgICB0YWdUeXBlOiBQb2lUeXBlKSB7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIGRlbGV0ZU1hdHRlcnRhZ0Zyb21JZChtYXR0ZXJ0YWdJRDogc3RyaW5nKSB7XHJcbiAgICAgICAgdGhpcy5zZGsuTWF0dGVydGFnLnJlbW92ZShtYXR0ZXJ0YWdJRCk7XHJcbiAgICAgICAgdGhpcy5kaWN0aW9ubmFyeVRhZ3MuZGVsZXRlKG1hdHRlcnRhZ0lEKTtcclxuICAgIH1cclxuXHJcbiAgICBkZWxldGVMYXN0TWF0dGVydGFnKCkge1xyXG4gICAgICAgIGNvbnN0IG1hdHRlcnRhZ0lEID0gdGhpcy5tYXR0ZXJ0YWdzLnBvcCgpO1xyXG4gICAgICAgIGlmIChtYXR0ZXJ0YWdJRCkge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcImFib3V0IHRvIGRlbGV0ZVwiLCBtYXR0ZXJ0YWdJRCk7XHJcbiAgICAgICAgICAgIHRoaXMuZGVsZXRlTWF0dGVydGFnRnJvbUlkKG1hdHRlcnRhZ0lEKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICBVdGlscyAtIFRvb2xiYXJcclxuICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xyXG5cclxuICAgIGFzeW5jIGFjdGlvbl90b29sYm94X2Zsb29ycGxhbigpIHtcclxuICAgICAgICBpZiAodGhpcy5pblRyYW5zaXRpb25Nb2RlIHx8IHRoaXMuaW5UcmFuc2l0aW9uU3dlZXApIHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coXCJ2aWV3ZXIgaXMgaW4gdHJhbnNpdGlvbiwgY2Fubm90IGdvIGZsb29ycGxhblwiKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLnNkay5Nb2RlLm1vdmVUbyhcIm1vZGUuZmxvb3JwbGFuXCIpO1xyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coXCJjYW5ub3QgZ28gdG8gZmxvb3JwbGFuXCIsIGUpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBhY3Rpb25fdG9vbGJveF9pbnNpZGVfdmlldygpIHtcclxuICAgICAgICB0aGlzLnNkay5Nb2RlLm1vdmVUbyhcIm1vZGUuaW5zaWRlXCIpO1xyXG4gICAgfVxyXG5cclxuICAgIGFjdGlvblNob3dBbGxGbG9vcnMoKSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgdGhpcy5zZGsuRmxvb3Iuc2hvd0FsbCgpO1xyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coXCJjYW5ub3Qgc2hvdyBhbGwgZmxvb3JzXCIsIGUpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBhY3Rpb25fdG9vbGJveF9kb2xsaG91c2UoKSB7XHJcbiAgICAgICAgc2V0VGltZW91dChhc3luYyAoKSA9PiB7XHJcbiAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKFwibW9kZTogXCIsIHRoaXMuaW5UcmFuc2l0aW9uTW9kZSwgXCIgc3dlZXA6IFwiLCB0aGlzLmluVHJhbnNpdGlvblN3ZWVwKTtcclxuICAgICAgICAgICAgaWYgKHRoaXMuaW5UcmFuc2l0aW9uTW9kZSB8fCB0aGlzLmluVHJhbnNpdGlvblN3ZWVwKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcInZpZXdlciBpcyBpbiB0cmFuc2l0aW9uLCBjYW5ub3QgZ28gZG9sbGhvdXNlXCIpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnNkay5Nb2RlLm1vdmVUbyhcIm1vZGUuZG9sbGhvdXNlXCIpO1xyXG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcImNhbm5vdCBnbyB0byBkb2xsaG91c2VcIiwgZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LCAxMjAwKTtcclxuICAgIH1cclxuXHJcbiAgICBhY3Rpb25fdG9vbGJveF9tZXN1cmUoKSB7XHJcbiAgICAgICAgY29uc3QgbmV3U3RhdGUgPSAhdGhpcy5pc01lYXN1cmVNb2RlT247XHJcbiAgICAgICAgdGhpcy5zZGsuTWVhc3VyZW1lbnRzLnRvZ2dsZU1vZGUobmV3U3RhdGUpLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcclxuICAgICAgICAgICAgICAgIGBNZWFzdXJlbWVudCBtb2RlIGlzIG5vdyAke25ld1N0YXRlID8gXCJlbmFibGVkXCIgOiBcImRpc2FibGVkXCJ9YCxcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBhY3Rpb25fdG9vbGJveF9jYW5jZWxfbWVzdXJlKCkge1xyXG4gICAgICAgIGlmICh0aGlzLmlzTWVhc3VyZU1vZGVPbikge1xyXG4gICAgICAgICAgICB0aGlzLmFjdGlvbl90b29sYm94X21lc3VyZSgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgQWN0aW9uc1xyXG4gIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXHJcblxyXG4gICAgYXN5bmMgYWN0aW9uX2FkZF9tYXR0ZXJ0YWdfZnJvbV9QT0koXHJcbiAgICAgICAgdGFnVHlwZTogUG9pVHlwZSxcclxuICAgICAgICBvYmplY3Q6IERiT2JqZWN0VHlwZSxcclxuICAgICAgICBwb2k6IFBPSSxcclxuICAgICk6IFByb21pc2U8YW55PiB7XHJcbiAgICAgICAgLy8gY2hlY2sgaWYgdGFnIGV4aXN0cyBhbHJlYWR5XHJcbiAgICAgICAgY29uc3QgeyB0YWcsIHN3ZWVwIH0gPSB0aGlzLmdldFRhZ0Zyb21FbGVtZW50SWQob2JqZWN0LmlkKTtcclxuICAgICAgICBpZiAodGFnKSB7XHJcbiAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKFwidGFnIGV4aXN0c1wiLCBvYmplY3QpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgbWF0dGVydGFnRGF0YTogTWF0dGVydGFnRGF0YSA9IG5ldyBNYXR0ZXJ0YWdEYXRhKHRhZ1R5cGUpO1xyXG4gICAgICAgIG1hdHRlcnRhZ0RhdGEuc2V0T2JqZWN0KG9iamVjdCwgdGFnVHlwZSk7XHJcbiAgICAgICAgaWYgKHBvaS5jb29yZGluYXRlKSB7XHJcbiAgICAgICAgICAgIG1hdHRlcnRhZ0RhdGEuc2V0UG9zaXRpb24oSlNPTi5wYXJzZShwb2kuY29vcmRpbmF0ZSkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAocG9pLm1ldGFkYXRhKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHRhZ01ldGFkYXRhID0gSlNPTi5wYXJzZShwb2kubWV0YWRhdGEpO1xyXG4gICAgICAgICAgICBpZiAodGFnTWV0YWRhdGEubm9ybWFsKSB7XHJcbiAgICAgICAgICAgICAgICBtYXR0ZXJ0YWdEYXRhLnNldE5vcm1hbCh0YWdNZXRhZGF0YS5ub3JtYWwpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgbWF0dGVydGFnRGF0YS5zZXROb3JtYWwoeyB4OiAwLCB5OiAtMC4xNSwgejogMCB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAocG9pLm1hdHRlcnBvcnRTd2VlcElEKSB7XHJcbiAgICAgICAgICAgIG1hdHRlcnRhZ0RhdGEuc2V0U3dlZXBJRChwb2kubWF0dGVycG9ydFN3ZWVwSUQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBtYXR0ZXJ0YWdEYXRhLnNldFBvaShwb2kpO1xyXG5cclxuICAgICAgICBjb25zdCBjcmVhdGVkVGFnID0gYXdhaXQgdGhpcy5hZGRfbWF0dGVydGFnX3RvX3ZpZXdlcihtYXR0ZXJ0YWdEYXRhKTtcclxuICAgICAgICBpZiAoY3JlYXRlZFRhZyAmJiB0aGlzLnNkaykge1xyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLmluamVjdEh0bWxJblRhZyh0YWdUeXBlLCBvYmplY3QsIGNyZWF0ZWRUYWcpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBpbmplY3RIdG1sSW5UYWcoXHJcbiAgICAgICAgdGFnVHlwZTogUG9pVHlwZSxcclxuICAgICAgICBvYmplY3Q6IERiT2JqZWN0VHlwZSxcclxuICAgICAgICB0YWdJRDogc3RyaW5nLFxyXG4gICAgKSB7XHJcbiAgICAgICAgbGV0IHsgaHRtbCwgaGVpZ2h0IH0gPSBhd2FpdCB0aGlzLnRhZ1NlcnZpY2UuZ2V0SHRtbFRvSW5qZWN0KFxyXG4gICAgICAgICAgICB0YWdUeXBlLFxyXG4gICAgICAgICAgICBvYmplY3QsXHJcbiAgICAgICAgICAgIHRoaXMuY29uZmlnLm15X2NvbmZpZy5ERUZBVUxUX0hFSUdIVF9IVE1MX1RBR1xyXG4gICAgICAgICk7XHJcbiAgICAgICAgaWYgKGh0bWwgIT09IFwiXCIgJiYgdGhpcy5zZGspIHtcclxuICAgICAgICAgICAgY29uc3Qgc2NyaXB0VGFnID0gdGhpcy50YWdTZXJ2aWNlLmdldFNjcmlwdEZvclRhZyhvYmplY3QsIHRhZ1R5cGUpO1xyXG4gICAgICAgICAgICBodG1sICs9IGAke3NjcmlwdFRhZ31gO1xyXG4gICAgICAgICAgICB0aGlzLnNkay5NYXR0ZXJ0YWcuaW5qZWN0SFRNTCh0YWdJRCwgaHRtbCwge1xyXG4gICAgICAgICAgICAgICAgc2l6ZToge1xyXG4gICAgICAgICAgICAgICAgICAgIHc6IHRoaXMuY29uZmlnLm15X2NvbmZpZy5ERUZBVUxUX1dJRFRIX0hUTUxfVEFHLFxyXG4gICAgICAgICAgICAgICAgICAgIGg6IGhlaWdodCxcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAudGhlbigobWVzc2VuZ2VyKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMudGFnTWVzc2VuZ2VyT24pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnRhZ01lc3Nlbmdlck9uID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBpbWFnZUNsaWNrID0gKGZlYXR1cmVJRDogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKFwiaW1hZ2UgY2xpY2sgaGFuZGxlclwiLCBmZWF0dXJlSUQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRhZ1NlcnZpY2Uub25BY3Rpb25JbWFnZUNsaWNrKGZlYXR1cmVJRCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYXVkaW9DbGljayA9IChhdWRpb0NvbW1lbnRJRDogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKFwiYXVkaW8gY2xpY2sgaGFuZGxlclwiLCBhdWRpb0NvbW1lbnRJRCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudGFnU2VydmljZS5vbkFjdGlvbkF1ZGlvQ2xpY2soYXVkaW9Db21tZW50SUQpO1xyXG4gICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdmlkZW9DbGljayA9ICh1cmw6IHN0cmluZykgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRhZ1NlcnZpY2Uub25BY3Rpb25BdWRpb0NsaWNrKHVybCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgICAgICBtZXNzZW5nZXIub24oXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFRhZ0FjdGlvbi5ERVRBSUxfQ0xJQ0ssXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudGFnU2VydmljZS5vbkFjdGlvbkRldGFpbENsaWNrLmJpbmQodGhpcy50YWdTZXJ2aWNlKVxyXG4gICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgbWVzc2VuZ2VyLm9uKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBUYWdBY3Rpb24uVElDS0VUX0NMSUNLLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRhZ1NlcnZpY2Uub25BY3Rpb25EZXRhaWxDbGljay5iaW5kKHRoaXMudGFnU2VydmljZSlcclxuICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgIG1lc3Nlbmdlci5vbihcclxuICAgICAgICAgICAgICAgICAgICAgICAgVGFnQWN0aW9uLkFVRElPX0NMSUNLLCBhdWRpb0NsaWNrXHJcbiAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgICBtZXNzZW5nZXIub24oXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFRhZ0FjdGlvbi5JTUFHRV9DTElDSywgaW1hZ2VDbGlja1xyXG4gICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgbWVzc2VuZ2VyLm9uKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBUYWdBY3Rpb24uVklERU9fQ0xJQ0ssIHZpZGVvQ2xpY2tcclxuICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgIG1lc3Nlbmdlci5vbihcclxuICAgICAgICAgICAgICAgICAgICAgICAgVGFnQWN0aW9uLkRPQ19DTElDSyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50YWdTZXJ2aWNlLm9uQWN0aW9uRG9jQ2xpY2suYmluZCh0aGlzLnRhZ1NlcnZpY2UpXHJcbiAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgICBtZXNzZW5nZXIub24oXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFRhZ0FjdGlvbi5ZT1VUVUJFX0NMSUNLLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRhZ1NlcnZpY2Uub25BY3Rpb25Zb3V0dWJlQ2xpY2suYmluZCh0aGlzLnRhZ1NlcnZpY2UpXHJcbiAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAuY2F0Y2goKGVycm9yOiBhbnkpID0+XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJDYW5ub3QgaW5qZWN0IGh0bWwgZm9yIHRhZ1wiLCB0YWdJRCwgZXJyb3IpLFxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAvLyBpZiBodG1sIGlzIGVtcHR5LCB3ZSBlZGl0IGJpbGxib2FyZCBmb3IgRmVhdHVyZVxyXG4gICAgICAgICAgICBjb25zdCB7IGNvbW1lbnQsIHRhZ0Rlc2NyaXB0aW9uIH0gPSB0aGlzLnRhZ1NlcnZpY2UuZ2V0QmlsbGJvYXJkTWVkaWFUb0VtYmVkKG9iamVjdCk7XHJcbiAgICAgICAgICAgIGlmIChjb21tZW50KSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNkay5NYXR0ZXJ0YWcuZWRpdEJpbGxib2FyZChcclxuICAgICAgICAgICAgICAgICAgICB0YWdJRCxcclxuICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsOiBvYmplY3QudGl0bGUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiB0YWdEZXNjcmlwdGlvbixcclxuICAgICAgICAgICAgICAgICAgICAgICAgbWVkaWE6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFwibWF0dGVydGFnLm1lZGlhLnJpY2hcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyYzogY29tbWVudC5leHRlcm5hbExpbmtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBhY3Rpb25fZGVsZXRlX2FsbF9tYXR0ZXJ0YWdzKCkge1xyXG4gICAgICAgIC8vIGF3YWl0IFByb21pc2UuYWxsKFxyXG4gICAgICAgIHRoaXMubWF0dGVydGFncy5tYXAoYXN5bmMgKHRhZykgPT4ge1xyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLnNkay5NYXR0ZXJ0YWcucmVtb3ZlKHRhZyk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgLy8gKTtcclxuICAgICAgICB0aGlzLm1hdHRlcnRhZ3MgPSBbXTtcclxuICAgICAgICB0aGlzLmRpY3Rpb25uYXJ5VGFncy5jbGVhcigpO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGFjdGlvbl9kZWxldGVfZWxlbWVudChcclxuICAgICAgICBlbGVtZW50OiBEYk9iamVjdFR5cGUsXHJcbiAgICApIHtcclxuICAgICAgICBjb25zdCBzaWRUYWcgPSB0aGlzLmdldFRhZ0Zyb21FbGVtZW50SWQoZWxlbWVudC5pZCEpLnRhZztcclxuICAgICAgICBpZiAoc2lkVGFnKSB7XHJcbiAgICAgICAgICAgIGxldCByZXNwO1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgcmVzcCA9IGF3YWl0IHRoaXMuc2RrLk1hdHRlcnRhZy5yZW1vdmUoc2lkVGFnKTtcclxuICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiQ2Fubm90IGRlbGV0ZSB0YWdcIiwgc2lkVGFnLCBlcnJvcik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHJlc3ApIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZGljdGlvbm5hcnlUYWdzLmRlbGV0ZShzaWRUYWcpO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLm1hdHRlcnRhZ3MuaW5kZXhPZihzaWRUYWcpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5tYXR0ZXJ0YWdzLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgYWN0aW9uX3Bvc2l0aW9uX2VsZW1lbnQoXHJcbiAgICAgICAgcG9pVHlwZTogUG9pVHlwZSxcclxuICAgICAgICBlbGVtZW50OiBEYk9iamVjdFR5cGUsXHJcbiAgICApIHtcclxuICAgICAgICBhd2FpdCB0aGlzLmFkZF9jdXJzb3JfbWF0dGVydGFnKHBvaVR5cGUsIGVsZW1lbnQsIHRydWUpO1xyXG4gICAgICAgIHRoaXMuc2V0SW50ZXJhY3Rpb25Nb2RlKFZpZXdlckludGVyYWN0aW9ucy5QT1NJVElPTklORyk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgYWRkRWxlbWVudEFzTWF0dGVydGFnKHBvaVR5cGU6IFBvaVR5cGUpIHtcclxuICAgICAgICBhd2FpdCB0aGlzLmFkZF9jdXJzb3JfbWF0dGVydGFnKHBvaVR5cGUpO1xyXG4gICAgICAgIHN3aXRjaCAocG9pVHlwZSkge1xyXG4gICAgICAgICAgICBjYXNlIFBvaVR5cGUuREFUQTpcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0SW50ZXJhY3Rpb25Nb2RlKFZpZXdlckludGVyYWN0aW9ucy5BRERJTkdfRkVBVFVSRSk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSBQb2lUeXBlLkRFU0s6XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldEludGVyYWN0aW9uTW9kZShWaWV3ZXJJbnRlcmFjdGlvbnMuQURESU5HX0ZFQVRVUkUpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgUG9pVHlwZS5USUNLRVQ6XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldEludGVyYWN0aW9uTW9kZShWaWV3ZXJJbnRlcmFjdGlvbnMuQURESU5HX1RJQ0tFVCk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSBQb2lUeXBlLkVRVUlQTUVOVDpcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0SW50ZXJhY3Rpb25Nb2RlKFZpZXdlckludGVyYWN0aW9ucy5BRERJTkdfRVFVSVBNRU5UKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIFBvaVR5cGUuTUVBU1VSRTpcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0SW50ZXJhY3Rpb25Nb2RlKFZpZXdlckludGVyYWN0aW9ucy5BRERJTkdfTUVBU1VSRSk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSBQb2lUeXBlLlJPT006XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldEludGVyYWN0aW9uTW9kZShWaWV3ZXJJbnRlcmFjdGlvbnMuQURESU5HX1JPT00pO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuICAgIGFjdGlvbl9jb21wbGV0ZWQoKSB7XHJcbiAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgRGF0ZS5ub3coKSAtIHRoaXMubGFzdEFjdGlvblRpbWUgPiAyMDAwICYmXHJcbiAgICAgICAgICAgIHRoaXMubGFzdEFjdGlvblRpbWUgIT09IC0xXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBhY3Rpb25fY2FuY2VsZWQoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuaW50ZXJhY3Rpb25Nb2RlICE9PSBWaWV3ZXJJbnRlcmFjdGlvbnMuREVGQVVMVCkge1xyXG4gICAgICAgICAgICB0aGlzLmRlbGV0ZUxhc3RNYXR0ZXJ0YWcoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5zZXRJbnRlcmFjdGlvbk1vZGUoVmlld2VySW50ZXJhY3Rpb25zLkRFRkFVTFQpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBhY3Rpb25fb3Blbl9tZW51KG1lbnU6IHN0cmluZykge1xyXG4gICAgICAgIHRoaXMudmlzaWJpbGl0eVNlcnZpY2UuZGV0YWlsU2hvd2luZy5uZXh0KHRydWUpO1xyXG4gICAgICAgIGNvbnN0IGxhc3RUYWcgPSB0aGlzLmdldExhc3RUYWcoKTtcclxuICAgICAgICBzd2l0Y2ggKG1lbnUpIHtcclxuICAgICAgICAgICAgY2FzZSBcImFkZF9lcXVpcFwiOlxyXG4gICAgICAgICAgICAgICAgdGhpcy5nb1RvTGFzdFRhZygpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5nb1RvTWVudShgdmlzaXQvJHt0aGlzLmN1cnJlbnRTcGFjZUlEfS9hZGRfZXF1aXBgKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIFwiYWRkX3RpY2tldFwiOlxyXG4gICAgICAgICAgICAgICAgdGhpcy5nb1RvTGFzdFRhZygpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5nb1RvTWVudShgdmlzaXQvJHt0aGlzLmN1cnJlbnRTcGFjZUlEfS9hZGRfdGlja2V0YCk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSBcImFkZF9mZWF0dXJlXCI6XHJcbiAgICAgICAgICAgICAgICB0aGlzLmdvVG9MYXN0VGFnKCk7XHJcbiAgICAgICAgICAgICAgICBsZXQgdXJsOiBzdHJpbmc7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5yb3V0ZXIudXJsLmluY2x1ZGVzKFwiP1wiKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHVybCA9IHRoaXMucm91dGVyLnVybC5zdWJzdHJpbmcoMCwgdGhpcy5yb3V0ZXIudXJsLmluZGV4T2YoXCI/XCIpKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdXJsID0gdGhpcy5yb3V0ZXIudXJsO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2codXJsKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuZ29Ub01lbnUoYCR7dXJsfS9hZGRfZmVhdHVyZWApO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgXCJhZGRfZGVza1wiOlxyXG4gICAgICAgICAgICAgICAgdGhpcy5nb1RvTGFzdFRhZygpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoXHJcbiAgICAgICAgICAgICAgICAgICAgW2B2aXNpdC8ke3RoaXMuY3VycmVudFNwYWNlSUR9L2FkZF9mZWF0dXJlYF0sXHJcbiAgICAgICAgICAgICAgICAgICAgeyBxdWVyeVBhcmFtczogeyBpc0Rlc2s6IHRydWUgfSB9LFxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgY2FzZSBcImFkZF9yb29tXCI6XHJcbiAgICAgICAgICAgICAgICB0aGlzLmdvVG9MYXN0VGFnKCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShcclxuICAgICAgICAgICAgICAgICAgICBbYHZpc2l0LyR7dGhpcy5jdXJyZW50U3BhY2VJRH0vYWRkX3Jvb21gXVxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIFwicG9zaXRpb25pbmdfdGlja2V0XCI6XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcInBvc2l0aW9uaW5nX3RpY2tldFwiKTtcclxuICAgICAgICAgICAgICAgIGlmIChsYXN0VGFnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGB2aXNpdC8ke3RoaXMuY3VycmVudFNwYWNlSUR9L2RldGFpbC8ke3RoaXMuZGljdGlvbm5hcnlUYWdzLmdldChsYXN0VGFnKS5lbGVtZW50SUR9YCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgXSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgeyBxdWVyeVBhcmFtczogeyBwb3NpdGlvbmluZzogdHJ1ZSB9IH0sXHJcbiAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIFwicG9zaXRpb25pbmdfZXF1aXBcIjpcclxuICAgICAgICAgICAgICAgIGlmIChsYXN0VGFnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGB2aXNpdC8ke3RoaXMuY3VycmVudFNwYWNlSUR9L2VxdWlwLyR7dGhpcy5kaWN0aW9ubmFyeVRhZ3MuZ2V0KGxhc3RUYWcpLmVsZW1lbnRJRH1gLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBdLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7IHF1ZXJ5UGFyYW1zOiB7IHBvc2l0aW9uaW5nOiB0cnVlIH0gfSxcclxuICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgXCJwb3NpdGlvbmluZ19mZWF0dXJlXCI6XHJcbiAgICAgICAgICAgICAgICBpZiAobGFzdFRhZykge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtgJHt0aGlzLnJvdXRlci51cmx9YF0sIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcXVlcnlQYXJhbXM6IHsgcG9zaXRpb25pbmc6IHRydWUgfSxcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIFwicG9zaXRpb25pbmdfcm9vbVwiOlxyXG4gICAgICAgICAgICAgICAgaWYgKGxhc3RUYWcpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbYCR7dGhpcy5yb3V0ZXIudXJsfWBdLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXJ5UGFyYW1zOiB7IHBvc2l0aW9uaW5nOiB0cnVlIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtgJHt0aGlzLnJvdXRlci51cmx9YF0pO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGFjdGlvbl9nb190b19mbG9vcihmbG9vck5hbWU6IHN0cmluZywgbWF0dGVycG9ydEZsb29yU2VxdWVuY2U6IG51bWJlciA9IG51bGwpIHtcclxuICAgICAgICBpZiAoIXRoaXMuZmxvb3JzKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiRmxvb3IgYXJlIG5vdCBsb2FkZWQgeWV0XCIpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKHRoaXMuZmxvb3JzKTtcclxuICAgICAgICAvLyBsb29rIHVwIGZvciBzZXF1ZW5jZSBudW1iZXIgKHRoZSBzYWZlc3QgbWV0aG9kKVxyXG4gICAgICAgIGxldCBmbG9vck1hdHRlcnBvcnQgPSB0aGlzLmZsb29ycy5maW5kKFxyXG4gICAgICAgICAgICAoZmxvb3IpID0+IGZsb29yLnNlcXVlbmNlID09PSBtYXR0ZXJwb3J0Rmxvb3JTZXF1ZW5jZSxcclxuICAgICAgICApO1xyXG4gICAgICAgIGlmICghZmxvb3JNYXR0ZXJwb3J0KSB7XHJcbiAgICAgICAgICAgIGZsb29yTWF0dGVycG9ydCA9IHRoaXMuZmxvb3JzLmZpbmQoXHJcbiAgICAgICAgICAgICAgICAoZmxvb3IpID0+IGZsb29yTmFtZS5pbmNsdWRlcyhmbG9vci5uYW1lKSAmJiBmbG9vci5uYW1lICE9IFwiXCIsXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghZmxvb3JNYXR0ZXJwb3J0KSB7XHJcbiAgICAgICAgICAgIGZsb29yTWF0dGVycG9ydCA9IHRoaXMuZmxvb3JzLmZpbmQoKGZsb29yKSA9PlxyXG4gICAgICAgICAgICAgICAgZmxvb3JOYW1lLmluY2x1ZGVzKGZsb29yLmlkKSxcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gY29uc29sZS5sb2coZmxvb3JNYXR0ZXJwb3J0KVxyXG4gICAgICAgIGlmIChmbG9vck1hdHRlcnBvcnQpIHtcclxuICAgICAgICAgICAgbGV0IHJldHJ5ID0gdHJ1ZTtcclxuICAgICAgICAgICAgd2hpbGUgKHJldHJ5KSB7XHJcbiAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGZsb29ySW5kZXggPSBhd2FpdCB0aGlzLnNkay5GbG9vci5tb3ZlVG8oZmxvb3JNYXR0ZXJwb3J0LnNlcXVlbmNlKTtcclxuICAgICAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhcIm1vdmVkIHRvIGZsb29ySW5kZXhcIiwgZmxvb3JJbmRleCk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0cnkgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJDYW5ub3QgbW92ZSB0byBGbG9vclwiLCBlcnJvcik7XHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgd2FpdCgxMDApO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgY29uc29sZS53YXJuKFwiTm8gbWF0dGVycG9ydCBmbG9vciBmb3VuZCB0byBtb3ZlIHRvXCIpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBhY3Rpb25fZ29fdG9fc3dlZXAoXHJcbiAgICAgICAgc3dlZXA6IHN0cmluZyxcclxuICAgICAgICByb3RhdGlvbjogeyB4OiBudW1iZXI7IHk6IG51bWJlcjsgfSA9IG51bGwsXHJcbiAgICApIHtcclxuICAgICAgICBpZiAodGhpcy5mb3JiaWRkZW5Td2VlcHMuaW5jbHVkZXMoc3dlZXApKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwidXNlciBpcyBub3QgYWxsb3dlZCB0byBnbyB0byB0aGlzIHN3ZWVwXCIpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKFwiZ29pbmcgdG8gc3dlZXBcIiwgc3dlZXAsIFwid2l0aCByb3RhdGlvbjpcIiwgcm90YXRpb24pO1xyXG4gICAgICAgIHNldFRpbWVvdXQoYXN5bmMgKCkgPT4ge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5pblRyYW5zaXRpb25Nb2RlIHx8IHRoaXMuaW5UcmFuc2l0aW9uU3dlZXApIHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiQ2Fubm90IGdvIHRvIHN3ZWVwLCBpbiB0cmFuc2l0aW9uXCIpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmluVHJhbnNpdGlvblN3ZWVwID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuc2RrLlN3ZWVwLm1vdmVUbyhzd2VlcCwge1xyXG4gICAgICAgICAgICAgICAgICAgIHRyYW5zaXRpb246IFwidHJhbnNpdGlvbi5mbHlcIixcclxuICAgICAgICAgICAgICAgICAgICB0cmFuc2l0aW9uVGltZTogMTUwMCxcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMuaW5UcmFuc2l0aW9uU3dlZXAgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiQ2Fubm90IG1vdmUgdG8gc3dlZXBcIiwgZXJyb3IpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChyb3RhdGlvbikge1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5zZGsuQ2FtZXJhLnNldFJvdGF0aW9uKHJvdGF0aW9uLCB7IHNwZWVkOiAxMDAgfSk7IC8vIHNwZWVkIGlzIGRlZ3JlZXMgcGVyIHNlY29uZFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSwgMTAwMCk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0Q3VycmVudFN3ZWVwKCk6IHN0cmluZyB8IG51bGwge1xyXG4gICAgICAgIGlmICh0aGlzLnBvc2VDYW1lcmEpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMucG9zZUNhbWVyYS5zd2VlcDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0Q3VycmVudENhbWVyYVBvc2l0aW9uKCk6IHtcclxuICAgICAgICByb3RhdGlvbjogYW55O1xyXG4gICAgICAgIHBvc2l0aW9uOiBhbnk7XHJcbiAgICAgICAgc3dlZXA6IGFueTtcclxuICAgIH0gfCBudWxsIHtcclxuICAgICAgICBpZiAodGhpcy5wb3NlQ2FtZXJhKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnBvc2VDYW1lcmE7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICBTZXR0ZXJzXHJcbiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cclxuXHJcbiAgICBzZXRJbnRlcmFjdGlvbk1vZGUoaW50ZXJhY3Rpb25Nb2RlOiBudW1iZXIpIHtcclxuICAgICAgICB0aGlzLmludGVyYWN0aW9uTW9kZSA9IGludGVyYWN0aW9uTW9kZTtcclxuICAgIH1cclxuXHJcbiAgICBzZXRPYmplY3RBbmRQb2lJblRhZyhtYXR0ZXJ0YWdJRDogc3RyaW5nLCBvYmplY3Q6IERiT2JqZWN0VHlwZSwgcG9pVHlwZTogUG9pVHlwZSwgcG9pOiBQT0kgfCBudWxsID0gbnVsbCkge1xyXG4gICAgICAgIHRoaXMuZGljdGlvbm5hcnlUYWdzLmdldChtYXR0ZXJ0YWdJRCkubWF0dGVydGFnRGF0YS5zZXRPYmplY3Qob2JqZWN0LCBwb2lUeXBlKTtcclxuICAgICAgICBpZiAocG9pKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZGljdGlvbm5hcnlUYWdzLmdldChtYXR0ZXJ0YWdJRCkubWF0dGVydGFnRGF0YS5zZXRQb2kocG9pKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5kaWN0aW9ubmFyeVRhZ3MuZ2V0KG1hdHRlcnRhZ0lEKS5lbGVtZW50SUQgPSBvYmplY3QuaWQ7XHJcbiAgICAgICAgdGhpcy51cGRhdGVNYXR0ZXJUYWdGcm9tSWQobWF0dGVydGFnSUQsIG9iamVjdCwgcG9pVHlwZSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gIEdldHRlcnNcclxuICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xyXG5cclxuICAgIGdldEludGVyYWN0aW9uTW9kZSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5pbnRlcmFjdGlvbk1vZGU7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldFRhZ0Zyb21FbGVtZW50SWQoZWxlbWVudElEOiBzdHJpbmcpOiB7XHJcbiAgICAgICAgdGFnOiBzdHJpbmcgfCBudWxsO1xyXG4gICAgICAgIHN3ZWVwOiBzdHJpbmcgfCBudWxsO1xyXG4gICAgfSB7XHJcbiAgICAgICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IHRoaXMubWF0dGVydGFncy5sZW5ndGg7IGluZGV4ICs9IDEpIHtcclxuICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgdGhpcy5kaWN0aW9ubmFyeVRhZ3MuZ2V0KHRoaXMubWF0dGVydGFnc1tpbmRleF0pLmVsZW1lbnRJRCA9PT1cclxuICAgICAgICAgICAgICAgIGVsZW1lbnRJRFxyXG4gICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHsgbWF0dGVydGFnRGF0YSB9ID1cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRpY3Rpb25uYXJ5VGFncy5nZXQodGhpcy5tYXR0ZXJ0YWdzW2luZGV4XSk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBzd2VlcCA9IG1hdHRlcnRhZ0RhdGEuZ2V0U3dlZXBJRCgpO1xyXG4gICAgICAgICAgICAgICAgaWYgKHN3ZWVwICYmIHRoaXMuc3dlZXBzICYmIHRoaXMuc3dlZXBzLmluY2x1ZGVzKHN3ZWVwKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7IHRhZzogdGhpcy5tYXR0ZXJ0YWdzW2luZGV4XSwgc3dlZXAgfTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybiB7IHRhZzogdGhpcy5tYXR0ZXJ0YWdzW2luZGV4XSwgc3dlZXA6IG51bGwgfTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4geyB0YWc6IG51bGwsIHN3ZWVwOiBudWxsIH07XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0VGFncygpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5tYXR0ZXJ0YWdzO1xyXG4gICAgfVxyXG5cclxuICAgIGdldExhc3RUYWcoKTogc3RyaW5nIHwgbnVsbCB7XHJcbiAgICAgICAgaWYgKHRoaXMubWF0dGVydGFnVG9Gb2xsb3cpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubWF0dGVydGFnVG9Gb2xsb3c7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubWF0dGVydGFncy5sZW5ndGggPT09IDBcclxuICAgICAgICAgICAgICAgID8gbnVsbFxyXG4gICAgICAgICAgICAgICAgOiB0aGlzLm1hdHRlcnRhZ3NbdGhpcy5tYXR0ZXJ0YWdzLmxlbmd0aCAtIDFdO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBnZXRNZW51VG9PcGVuRm9yTGFzdFRhZygpIHtcclxuICAgICAgICBjb25zdCBsYXN0VGFnID0gdGhpcy5nZXRMYXN0VGFnKCk7XHJcbiAgICAgICAgaWYgKGxhc3RUYWcpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGljdGlvbm5hcnlUYWdzLmdldChsYXN0VGFnKS5tYXR0ZXJ0YWdEYXRhLmdldE1lbnVUb09wZW4oKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0VGFnRGF0YUZyb21JZChtYXR0ZXJ0YWdJRDogc3RyaW5nKTogTWF0dGVydGFnRGF0YSB8IG51bGwge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmRpY3Rpb25uYXJ5VGFncy5nZXQobWF0dGVydGFnSUQpIS5tYXR0ZXJ0YWdEYXRhO1xyXG4gICAgICAgIH0gY2F0Y2gge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcImNhbm5vdCByZXRyaWV2ZSBtYXR0ZXJ0YWdEYXRhIGZvciB0YWdcIiwgbWF0dGVydGFnSUQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBnZXRMYXN0RGlzdGFuY2VzKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmRpc3RhbmNlc0xhc3RNZWFzdXJlO1xyXG4gICAgfVxyXG5cclxuICAgIHRha2VTY3JlZW5TaG90KCk6IFByb21pc2U8YW55PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc2RrLlJlbmRlcmVyLnRha2VTY3JlZW5TaG90KFxyXG4gICAgICAgICAgICB0aGlzLnJlc29sdXRpb24sXHJcbiAgICAgICAgICAgIHRoaXMudmlzaWJpbGl0eSxcclxuICAgICAgICApLnRoZW4oXHJcbiAgICAgICAgICAgIGZ1bmN0aW9uIChzY3JlZW5TaG90VXJpOiBhbnkpIHtcclxuICAgICAgICAgICAgICAgIC8vIGJhc2U2NCBzdHJpbmdcclxuICAgICAgICAgICAgICAgIHRoaXMubGFzdFNjcmVlbnNob3RVcmkgPSBzY3JlZW5TaG90VXJpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xyXG4gICAgICAgICAgICB9LmJpbmQodGhpcyksXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRTY3JlZW5TaG90VXJpKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmxhc3RTY3JlZW5zaG90VXJpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldExhc3RNZWFzdXJlbWVudCgpOiBPYmplY3Qge1xyXG4gICAgICAgIGNvbnN0IGRhdGEgPSB7XHJcbiAgICAgICAgICAgIG1lYXN1cmU6IHRoaXMubGFzdE1lYXN1cmUsXHJcbiAgICAgICAgICAgIHN3ZWVwOiB0aGlzLnBvc2VDYW1lcmEuc3dlZXAsXHJcbiAgICAgICAgfTtcclxuICAgICAgICByZXR1cm4gZGF0YTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBjbGVhckFsbCgpIHtcclxuICAgICAgICBjb25zb2xlLmxvZyhcInJlbW92aW5nIHZpZXdlclwiKTtcclxuICAgICAgICB0aGlzLmFjdGlvbl9kZWxldGVfYWxsX21hdHRlcnRhZ3MoKTtcclxuICAgICAgICB0aGlzLmZsb29ycyA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5zd2VlcHMgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuc2RrID0gbnVsbDtcclxuICAgICAgICBjbGVhckludGVydmFsKHRoaXMudGltZXJQb2ludGVyKTtcclxuICAgICAgICB0aGlzLmZvcmJpZGRlblN3ZWVwcyA9IFtdO1xyXG4gICAgICAgIHRoaXMudGFnTWVzc2VuZ2VyT24gPSBmYWxzZTtcclxuICAgICAgICAvLyBjYW5jZWwgc3Vic2NyaXB0aW9uc1xyXG4gICAgICAgIHRoaXMucG9pbnRlckJ1dHRvbi5yZW1vdmVFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgdGhpcy5wb2ludGVyTGVmdENsaWNrSGFuZGxlcik7XHJcbiAgICAgICAgdGhpcy5wb2ludGVyQnV0dG9uLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJjb250ZXh0bWVudVwiLCB0aGlzLnBvaW50ZXJSaWdodENsaWNrSGFuZGxlcik7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgcmVtb3ZlRm9yYmlkZGVuU3dlZXBzKGZvcmJpZGRlblN3ZWVwczogc3RyaW5nW10pIHtcclxuICAgICAgICB0aGlzLmZvcmJpZGRlblN3ZWVwcyA9IFsuLi5mb3JiaWRkZW5Td2VlcHNdO1xyXG4gICAgICAgIGxldCByZW1vdmVkID0gMDtcclxuICAgICAgICBhd2FpdCBQcm9taXNlLmFsbChcclxuICAgICAgICAgICAgZm9yYmlkZGVuU3dlZXBzLm1hcChhc3luYyAoc3dlZXApID0+IHtcclxuICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5zZGsuU3dlZXAuZGlzYWJsZShzd2VlcCk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVtb3ZlZCArPSAxO1xyXG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhlcnJvcik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgY29uc29sZS5sb2coXCJyZW1vdmVkIHN3ZWVwczpcIiwgcmVtb3ZlZCk7XHJcbiAgICB9XHJcbn1cclxuIl19
|
|
@@ -67,6 +67,10 @@ export class BaseTagService {
|
|
|
67
67
|
throw new Error(`getScriptForTag is not implemented in the base class.
|
|
68
68
|
Please override this method in your extended class.`);
|
|
69
69
|
}
|
|
70
|
+
getBillboardMediaToEmbed(object) {
|
|
71
|
+
throw new Error(`getBillboardMediaToEmbed is not implemented in the base class.
|
|
72
|
+
Please override this method in your extended class.`);
|
|
73
|
+
}
|
|
70
74
|
onActionDetailClick(url) {
|
|
71
75
|
throw new Error(`onActionDetailClick is not implemented in the base class.
|
|
72
76
|
Please override this method in your extended class.`);
|
|
@@ -100,4 +104,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.7", ngImpor
|
|
|
100
104
|
providedIn: "root",
|
|
101
105
|
}]
|
|
102
106
|
}], ctorParameters: function () { return []; } });
|
|
103
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFnLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtc21hcnRlcnBsYW4tY29yZS9zcmMvbGliL3NlcnZpY2VzL3RhZy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHlDQUF5QztBQUN6QywyQ0FBMkM7QUFDM0MsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQWtELE9BQU8sRUFBcUIsTUFBTSxrQkFBa0IsQ0FBQzs7QUFLOUcsTUFBTSxPQUFPLGNBQWM7SUFFdkIsZ0JBQWUsQ0FBQztJQUVoQixLQUFLLENBQUMsZUFBZSxDQUNqQixPQUFnQixFQUNoQixNQUFvQixFQUNwQixZQUFvQjtRQUVwQixNQUFNLElBQUksS0FBSyxDQUFDOzREQUNvQyxDQUFDLENBQUM7SUFDMUQsQ0FBQztJQUVELG1CQUFtQixDQUNmLE1BQW9CLEVBQ3BCLE9BQWdCO1FBRWhCLFFBQVEsT0FBTyxFQUFFO1lBQ2IsS0FBSyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQ2pCLE9BQU8sU0FBUyxNQUFNLENBQUMsT0FBTyxXQUFXLE1BQU0sQ0FBQyxFQUFFLEVBQUUsQ0FBQzthQUN4RDtZQUNELEtBQUssT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDO2dCQUNwQixPQUFPLFNBQVMsTUFBTSxDQUFDLE9BQU8sVUFBVSxNQUFNLENBQUMsRUFBRSxFQUFFLENBQUM7YUFDdkQ7WUFDRCxLQUFLLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFDbEIsT0FBTyxTQUFTLE1BQU0sQ0FBQyxPQUFPLGdCQUFnQixNQUFNLENBQUMsRUFBRSxFQUFFLENBQUM7YUFDN0Q7WUFDRCxLQUFLLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDZixPQUFPLFNBQVMsTUFBTSxDQUFDLE9BQU8sWUFBWSxNQUFNLENBQUMsRUFBRSxFQUFFLENBQUM7YUFDekQ7WUFDRCxLQUFLLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDZixPQUFPLFNBQVMsTUFBTSxDQUFDLE9BQU8sZ0JBQWdCLE1BQU0sQ0FBQyxFQUFFLEVBQUUsQ0FBQzthQUM3RDtZQUNEO2dCQUNJLE9BQU8sRUFBRSxDQUFDO1NBQ2pCO0lBQ0wsQ0FBQztJQUVELEtBQUssQ0FBQyxvQkFBb0IsQ0FDdEIsS0FBZ0I7UUFFaEIsTUFBTSxJQUFJLEtBQUssQ0FBQzs0REFDb0MsQ0FBQyxDQUFDO0lBQzFELENBQUM7SUFFRCxLQUFLLENBQUMsaUJBQWlCLENBQ25CLE1BQWM7UUFFZCxNQUFNLElBQUksS0FBSyxDQUFDOzZFQUNxRCxDQUFDLENBQUM7SUFDM0UsQ0FBQztJQUVELEtBQUssQ0FBQyxrQkFBa0IsQ0FDcEIsT0FBZ0I7UUFFaEIsTUFBTSxJQUFJLEtBQUssQ0FBQzs2RUFDcUQsQ0FBQyxDQUFDO0lBQzNFLENBQUM7SUFFRCxLQUFLLENBQUMsc0JBQXNCLENBQ3hCLE9BQWdCO1FBRWhCLE1BQU0sSUFBSSxLQUFLLENBQUM7NkVBQ3FELENBQUMsQ0FBQztJQUMzRSxDQUFDO0lBRUQsS0FBSyxDQUFDLGVBQWUsQ0FDakIsT0FBZ0I7UUFFaEIsTUFBTSxJQUFJLEtBQUssQ0FBQzs2RUFDcUQsQ0FBQyxDQUFDO0lBQzNFLENBQUM7SUFFRCxLQUFLLENBQUMsb0JBQW9CLENBQ3RCLE9BQWdCO1FBRWhCLE1BQU0sSUFBSSxLQUFLLENBQUM7NkVBQ3FELENBQUMsQ0FBQztJQUMzRSxDQUFDO0lBRUQsS0FBSyxDQUFDLHNCQUFzQixDQUFDLFVBQWtCO1FBQzNDLE1BQU0sSUFBSSxLQUFLLENBQUMsOERBQThELENBQUMsQ0FBQztJQUNwRixDQUFDO0lBRUQseUJBQXlCLENBQUMsT0FBcUIsRUFBRSxHQUFRO1FBQ3JELDJDQUEyQztRQUMzQyxzQkFBc0I7UUFDdEIsTUFBTSxJQUFJLEtBQUssQ0FBQzs2RUFDcUQsQ0FBQyxDQUFDO0lBQzNFLENBQUM7SUFHRCxlQUFlLENBQUMsTUFBTSxFQUFFLE9BQWdCO1FBQ3BDLE1BQU0sSUFBSSxLQUFLLENBQUM7NERBQ29DLENBQUMsQ0FBQztJQUMxRCxDQUFDO0lBRUQsbUJBQW1CLENBQUMsR0FBVztRQUMzQixNQUFNLElBQUksS0FBSyxDQUFDOzREQUNvQyxDQUFDLENBQUM7SUFDMUQsQ0FBQztJQUVELGtCQUFrQixDQUFDLGNBQXNCO1FBQ3JDLE1BQU0sSUFBSSxLQUFLLENBQUM7NERBQ29DLENBQUMsQ0FBQztJQUMxRCxDQUFDO0lBRUQsa0JBQWtCLENBQUMsR0FBVztRQUMxQixNQUFNLElBQUksS0FBSyxDQUFDOzREQUNvQyxDQUFDLENBQUM7SUFDMUQsQ0FBQztJQUVELGtCQUFrQixDQUFDLGNBQXNCO1FBQ3JDLE1BQU0sSUFBSSxLQUFLLENBQUM7NERBQ29DLENBQUMsQ0FBQztJQUMxRCxDQUFDO0lBRUQsZ0JBQWdCLENBQUMsR0FBVztRQUN4QixNQUFNLElBQUksS0FBSyxDQUFDOzREQUNvQyxDQUFDLENBQUM7SUFDMUQsQ0FBQztJQUVELG9CQUFvQixDQUFDLEdBQVc7UUFDNUIsTUFBTSxJQUFJLEtBQUssQ0FBQzs0REFDb0MsQ0FBQyxDQUFDO0lBQzFELENBQUM7OzJHQTdIUSxjQUFjOytHQUFkLGNBQWMsY0FGWCxNQUFNOzJGQUVULGNBQWM7a0JBSDFCLFVBQVU7bUJBQUM7b0JBQ1IsVUFBVSxFQUFFLE1BQU07aUJBQ3JCIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgbm8tY2FzZS1kZWNsYXJhdGlvbnMgKi9cclxuLyogZXNsaW50LWRpc2FibGUgY2xhc3MtbWV0aG9kcy11c2UtdGhpcyAqL1xyXG5pbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgQ29tbWVudCwgRGJPYmplY3RUeXBlLCBFcXVpcG1lbnQsIEZlYXR1cmUsIFBPSSwgUG9pVHlwZSwgVGFnQWN0aW9uLCBUaWNrZXQgfSBmcm9tIFwiLi4vdHlwZXMuc2VydmljZVwiO1xyXG5cclxuQEluamVjdGFibGUoe1xyXG4gICAgcHJvdmlkZWRJbjogXCJyb290XCIsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBCYXNlVGFnU2VydmljZSB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoKSB7fVxyXG5cclxuICAgIGFzeW5jIGdldEh0bWxUb0luamVjdChcclxuICAgICAgICB0YWdUeXBlOiBQb2lUeXBlLFxyXG4gICAgICAgIG9iamVjdDogRGJPYmplY3RUeXBlLFxyXG4gICAgICAgIG1heEhlaWdodERpdjogbnVtYmVyXHJcbiAgICApOiBQcm9taXNlPHsgaHRtbDogc3RyaW5nOyBoZWlnaHQ6IG51bWJlciB9PiB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBnZXRIdG1sVG9JbmplY3QgaXMgbm90IGltcGxlbWVudGVkIGluIHRoZSBiYXNlIGNsYXNzLiBcclxuICAgICAgICBQbGVhc2Ugb3ZlcnJpZGUgdGhpcyBtZXRob2QgaW4geW91ciBleHRlbmRlZCBjbGFzcy5gKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRVcmxGb3JTZWVEZXRhaWxzKFxyXG4gICAgICAgIG9iamVjdDogRGJPYmplY3RUeXBlLFxyXG4gICAgICAgIHRhZ1R5cGU6IFBvaVR5cGUsXHJcbiAgICApOiBzdHJpbmcge1xyXG4gICAgICAgIHN3aXRjaCAodGFnVHlwZSkge1xyXG4gICAgICAgICAgICBjYXNlIFBvaVR5cGUuVElDS0VUOiB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gYHZpc2l0LyR7b2JqZWN0LnNwYWNlSUR9L2RldGFpbC8ke29iamVjdC5pZH1gO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNhc2UgUG9pVHlwZS5FUVVJUE1FTlQ6IHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBgdmlzaXQvJHtvYmplY3Quc3BhY2VJRH0vZXF1aXAvJHtvYmplY3QuaWR9YDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYXNlIFBvaVR5cGUuTUVBU1VSRToge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGB2aXNpdC8ke29iamVjdC5zcGFjZUlEfS9tZWFzdXJlbWVudC8ke29iamVjdC5pZH1gO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNhc2UgUG9pVHlwZS5EQVRBOiB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gYHZpc2l0LyR7b2JqZWN0LnNwYWNlSUR9L2ZlYXR1cmUvJHtvYmplY3QuaWR9YDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYXNlIFBvaVR5cGUuREVTSzoge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGB2aXNpdC8ke29iamVjdC5zcGFjZUlEfS9hZGRfYm9va2luZy8ke29iamVjdC5pZH1gO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJcIjtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgcHJlcGFyZUVxdWlwbWVudEh0bWwoXHJcbiAgICAgICAgZXF1aXA6IEVxdWlwbWVudCxcclxuICAgICk6IFByb21pc2U8eyBodG1sT2JqZWN0OiBzdHJpbmc7IGhlaWdodDogbnVtYmVyIH0+IHtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYHByZXBhcmVFcXVpcG1lbnRIdG1sIGlzIG5vdCBpbXBsZW1lbnRlZCBpbiB0aGUgYmFzZSBjbGFzcy4gXHJcbiAgICAgICAgUGxlYXNlIG92ZXJyaWRlIHRoaXMgbWV0aG9kIGluIHlvdXIgZXh0ZW5kZWQgY2xhc3MuYCk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgcHJlcGFyZVRpY2tldEh0bWwoXHJcbiAgICAgICAgdGlja2V0OiBUaWNrZXQsXHJcbiAgICApOiBQcm9taXNlPHsgaHRtbE9iamVjdDogc3RyaW5nOyBoZWlnaHQ6IG51bWJlciB9PiB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBwcmVwYXJlVGlja2V0SHRtbCBpcyBub3QgaW1wbGVtZW50ZWQgaW4gdGhlIGJhc2UgY2xhc3MuIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgUGxlYXNlIG92ZXJyaWRlIHRoaXMgbWV0aG9kIGluIHlvdXIgZXh0ZW5kZWQgY2xhc3MuYCk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgcHJlcGFyZUZlYXR1cmVIdG1sKFxyXG4gICAgICAgIGZlYXR1cmU6IEZlYXR1cmUsXHJcbiAgICApOiBQcm9taXNlPHsgaHRtbE9iamVjdDogc3RyaW5nOyBoZWlnaHQ6IG51bWJlciB9PiB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBwcmVwYXJlRmVhdHVyZUh0bWwgaXMgbm90IGltcGxlbWVudGVkIGluIHRoZSBiYXNlIGNsYXNzLiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgIFBsZWFzZSBvdmVycmlkZSB0aGlzIG1ldGhvZCBpbiB5b3VyIGV4dGVuZGVkIGNsYXNzLmApO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIHByZXBhcmVNZWFzdXJlbWVudEh0bWwoXHJcbiAgICAgICAgbWVhc3VyZTogQ29tbWVudCxcclxuICAgICk6IFByb21pc2U8eyBodG1sT2JqZWN0OiBzdHJpbmc7IGhlaWdodDogbnVtYmVyIH0+IHtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYHByZXBhcmVNZWFzdXJlbWVudEh0bWwgaXMgbm90IGltcGxlbWVudGVkIGluIHRoZSBiYXNlIGNsYXNzLiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgIFBsZWFzZSBvdmVycmlkZSB0aGlzIG1ldGhvZCBpbiB5b3VyIGV4dGVuZGVkIGNsYXNzLmApO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIHByZXBhcmVEZXNrSHRtbChcclxuICAgICAgICBmZWF0dXJlOiBGZWF0dXJlLFxyXG4gICAgKTogUHJvbWlzZTx7IGh0bWxPYmplY3Q6IHN0cmluZzsgaGVpZ2h0OiBudW1iZXIgfT4ge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgcHJlcGFyZURlc2tIdG1sIGlzIG5vdCBpbXBsZW1lbnRlZCBpbiB0aGUgYmFzZSBjbGFzcy4gXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICBQbGVhc2Ugb3ZlcnJpZGUgdGhpcyBtZXRob2QgaW4geW91ciBleHRlbmRlZCBjbGFzcy5gKTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBwcmVwYXJlSW5kaWNhdG9ySHRtbChcclxuICAgICAgICBmZWF0dXJlOiBGZWF0dXJlLFxyXG4gICAgKTogUHJvbWlzZTx7IGh0bWxPYmplY3Q6IHN0cmluZzsgaGVpZ2h0OiBudW1iZXIgfT4ge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgcHJlcGFyZURlc2tIdG1sIGlzIG5vdCBpbXBsZW1lbnRlZCBpbiB0aGUgYmFzZSBjbGFzcy4gXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICBQbGVhc2Ugb3ZlcnJpZGUgdGhpcyBtZXRob2QgaW4geW91ciBleHRlbmRlZCBjbGFzcy5gKTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBnZXRTaWduZWRUYWdJY29uU291cmNlKHRhZ0ljb25TcmM6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nIHwgbnVsbD4ge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgZ2V0U2lnbmVkVGFnSWNvblNvdXJjZSBpcyBub3QgaW1wbGVtZW50ZWQgaW4gdGhlIGJhc2UgY2xhc3MuYCk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0SWNvblRhZ0ltYWdlRm9yRmVhdHVyZShmZWF0dXJlOiBEYk9iamVjdFR5cGUsIHBvaTogUE9JKTogc3RyaW5nIHtcclxuICAgICAgICAvLyBjb25zdCB0YWdJY29uID0gSlNPTi5wYXJzZShwb2kudGFnSWNvbik7XHJcbiAgICAgICAgLy8gcmV0dXJuIHRhZ0ljb24uc3JjO1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgZ2V0SWNvblRhZ0ltYWdlRm9yRmVhdHVyZSBpcyBub3QgaW1wbGVtZW50ZWQgaW4gdGhlIGJhc2UgY2xhc3MuIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgUGxlYXNlIG92ZXJyaWRlIHRoaXMgbWV0aG9kIGluIHlvdXIgZXh0ZW5kZWQgY2xhc3MuYCk7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIGdldFNjcmlwdEZvclRhZyhvYmplY3QsIHRhZ1R5cGU6IFBvaVR5cGUpOiBzdHJpbmcge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgZ2V0U2NyaXB0Rm9yVGFnIGlzIG5vdCBpbXBsZW1lbnRlZCBpbiB0aGUgYmFzZSBjbGFzcy4gXHJcbiAgICAgICAgUGxlYXNlIG92ZXJyaWRlIHRoaXMgbWV0aG9kIGluIHlvdXIgZXh0ZW5kZWQgY2xhc3MuYCk7XHJcbiAgICB9XHJcblxyXG4gICAgb25BY3Rpb25EZXRhaWxDbGljayh1cmw6IHN0cmluZykge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgb25BY3Rpb25EZXRhaWxDbGljayBpcyBub3QgaW1wbGVtZW50ZWQgaW4gdGhlIGJhc2UgY2xhc3MuIFxyXG4gICAgICAgIFBsZWFzZSBvdmVycmlkZSB0aGlzIG1ldGhvZCBpbiB5b3VyIGV4dGVuZGVkIGNsYXNzLmApO1xyXG4gICAgfVxyXG5cclxuICAgIG9uQWN0aW9uQXVkaW9DbGljayhhdWRpb0NvbW1lbnRJRDogc3RyaW5nKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBvbkFjdGlvbkRldGFpbENsaWNrIGlzIG5vdCBpbXBsZW1lbnRlZCBpbiB0aGUgYmFzZSBjbGFzcy4gXHJcbiAgICAgICAgUGxlYXNlIG92ZXJyaWRlIHRoaXMgbWV0aG9kIGluIHlvdXIgZXh0ZW5kZWQgY2xhc3MuYCk7XHJcbiAgICB9XHJcblxyXG4gICAgb25BY3Rpb25WaWRlb0NsaWNrKHVybDogc3RyaW5nKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBvbkFjdGlvblZpZGVvQ2xpY2sgaXMgbm90IGltcGxlbWVudGVkIGluIHRoZSBiYXNlIGNsYXNzLiBcclxuICAgICAgICBQbGVhc2Ugb3ZlcnJpZGUgdGhpcyBtZXRob2QgaW4geW91ciBleHRlbmRlZCBjbGFzcy5gKTtcclxuICAgIH1cclxuXHJcbiAgICBvbkFjdGlvbkltYWdlQ2xpY2soaW1hZ2VDb21tZW50SUQ6IHN0cmluZykge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgb25BY3Rpb25JbWFnZUNsaWNrIGlzIG5vdCBpbXBsZW1lbnRlZCBpbiB0aGUgYmFzZSBjbGFzcy5cclxuICAgICAgICBQbGVhc2Ugb3ZlcnJpZGUgdGhpcyBtZXRob2QgaW4geW91ciBleHRlbmRlZCBjbGFzcy5gKTtcclxuICAgIH1cclxuXHJcbiAgICBvbkFjdGlvbkRvY0NsaWNrKHVybDogc3RyaW5nKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBvbkFjdGlvbkRvY0NsaWNrIGlzIG5vdCBpbXBsZW1lbnRlZCBpbiB0aGUgYmFzZSBjbGFzcy4gXHJcbiAgICAgICAgUGxlYXNlIG92ZXJyaWRlIHRoaXMgbWV0aG9kIGluIHlvdXIgZXh0ZW5kZWQgY2xhc3MuYCk7XHJcbiAgICB9XHJcbiAgICBcclxuICAgIG9uQWN0aW9uWW91dHViZUNsaWNrKHVybDogc3RyaW5nKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBvbkFjdGlvbllvdXR1YmVDbGljayBpcyBub3QgaW1wbGVtZW50ZWQgaW4gdGhlIGJhc2UgY2xhc3MuIFxyXG4gICAgICAgIFBsZWFzZSBvdmVycmlkZSB0aGlzIG1ldGhvZCBpbiB5b3VyIGV4dGVuZGVkIGNsYXNzLmApO1xyXG4gICAgfVxyXG59XHJcbiJdfQ==
|
|
107
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFnLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtc21hcnRlcnBsYW4tY29yZS9zcmMvbGliL3NlcnZpY2VzL3RhZy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHlDQUF5QztBQUN6QywyQ0FBMkM7QUFDM0MsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQWtELE9BQU8sRUFBcUIsTUFBTSxrQkFBa0IsQ0FBQzs7QUFLOUcsTUFBTSxPQUFPLGNBQWM7SUFFdkIsZ0JBQWdCLENBQUM7SUFFakIsS0FBSyxDQUFDLGVBQWUsQ0FDakIsT0FBZ0IsRUFDaEIsTUFBb0IsRUFDcEIsWUFBb0I7UUFFcEIsTUFBTSxJQUFJLEtBQUssQ0FBQzs0REFDb0MsQ0FBQyxDQUFDO0lBQzFELENBQUM7SUFFRCxtQkFBbUIsQ0FDZixNQUFvQixFQUNwQixPQUFnQjtRQUVoQixRQUFRLE9BQU8sRUFBRTtZQUNiLEtBQUssT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO2dCQUNqQixPQUFPLFNBQVMsTUFBTSxDQUFDLE9BQU8sV0FBVyxNQUFNLENBQUMsRUFBRSxFQUFFLENBQUM7YUFDeEQ7WUFDRCxLQUFLLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQztnQkFDcEIsT0FBTyxTQUFTLE1BQU0sQ0FBQyxPQUFPLFVBQVUsTUFBTSxDQUFDLEVBQUUsRUFBRSxDQUFDO2FBQ3ZEO1lBQ0QsS0FBSyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBQ2xCLE9BQU8sU0FBUyxNQUFNLENBQUMsT0FBTyxnQkFBZ0IsTUFBTSxDQUFDLEVBQUUsRUFBRSxDQUFDO2FBQzdEO1lBQ0QsS0FBSyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ2YsT0FBTyxTQUFTLE1BQU0sQ0FBQyxPQUFPLFlBQVksTUFBTSxDQUFDLEVBQUUsRUFBRSxDQUFDO2FBQ3pEO1lBQ0QsS0FBSyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ2YsT0FBTyxTQUFTLE1BQU0sQ0FBQyxPQUFPLGdCQUFnQixNQUFNLENBQUMsRUFBRSxFQUFFLENBQUM7YUFDN0Q7WUFDRDtnQkFDSSxPQUFPLEVBQUUsQ0FBQztTQUNqQjtJQUNMLENBQUM7SUFFRCxLQUFLLENBQUMsb0JBQW9CLENBQ3RCLEtBQWdCO1FBRWhCLE1BQU0sSUFBSSxLQUFLLENBQUM7NERBQ29DLENBQUMsQ0FBQztJQUMxRCxDQUFDO0lBRUQsS0FBSyxDQUFDLGlCQUFpQixDQUNuQixNQUFjO1FBRWQsTUFBTSxJQUFJLEtBQUssQ0FBQzs2RUFDcUQsQ0FBQyxDQUFDO0lBQzNFLENBQUM7SUFFRCxLQUFLLENBQUMsa0JBQWtCLENBQ3BCLE9BQWdCO1FBRWhCLE1BQU0sSUFBSSxLQUFLLENBQUM7NkVBQ3FELENBQUMsQ0FBQztJQUMzRSxDQUFDO0lBRUQsS0FBSyxDQUFDLHNCQUFzQixDQUN4QixPQUFnQjtRQUVoQixNQUFNLElBQUksS0FBSyxDQUFDOzZFQUNxRCxDQUFDLENBQUM7SUFDM0UsQ0FBQztJQUVELEtBQUssQ0FBQyxlQUFlLENBQ2pCLE9BQWdCO1FBRWhCLE1BQU0sSUFBSSxLQUFLLENBQUM7NkVBQ3FELENBQUMsQ0FBQztJQUMzRSxDQUFDO0lBRUQsS0FBSyxDQUFDLG9CQUFvQixDQUN0QixPQUFnQjtRQUVoQixNQUFNLElBQUksS0FBSyxDQUFDOzZFQUNxRCxDQUFDLENBQUM7SUFDM0UsQ0FBQztJQUVELEtBQUssQ0FBQyxzQkFBc0IsQ0FBQyxVQUFrQjtRQUMzQyxNQUFNLElBQUksS0FBSyxDQUFDLDhEQUE4RCxDQUFDLENBQUM7SUFDcEYsQ0FBQztJQUVELHlCQUF5QixDQUFDLE9BQXFCLEVBQUUsR0FBUTtRQUNyRCwyQ0FBMkM7UUFDM0Msc0JBQXNCO1FBQ3RCLE1BQU0sSUFBSSxLQUFLLENBQUM7NkVBQ3FELENBQUMsQ0FBQztJQUMzRSxDQUFDO0lBR0QsZUFBZSxDQUFDLE1BQU0sRUFBRSxPQUFnQjtRQUNwQyxNQUFNLElBQUksS0FBSyxDQUFDOzREQUNvQyxDQUFDLENBQUM7SUFDMUQsQ0FBQztJQUVELHdCQUF3QixDQUFDLE1BQW9CO1FBQ3pDLE1BQU0sSUFBSSxLQUFLLENBQUM7NERBQ29DLENBQUMsQ0FBQztJQUMxRCxDQUFDO0lBRUQsbUJBQW1CLENBQUMsR0FBVztRQUMzQixNQUFNLElBQUksS0FBSyxDQUFDOzREQUNvQyxDQUFDLENBQUM7SUFDMUQsQ0FBQztJQUVELGtCQUFrQixDQUFDLGNBQXNCO1FBQ3JDLE1BQU0sSUFBSSxLQUFLLENBQUM7NERBQ29DLENBQUMsQ0FBQztJQUMxRCxDQUFDO0lBRUQsa0JBQWtCLENBQUMsR0FBVztRQUMxQixNQUFNLElBQUksS0FBSyxDQUFDOzREQUNvQyxDQUFDLENBQUM7SUFDMUQsQ0FBQztJQUVELGtCQUFrQixDQUFDLGNBQXNCO1FBQ3JDLE1BQU0sSUFBSSxLQUFLLENBQUM7NERBQ29DLENBQUMsQ0FBQztJQUMxRCxDQUFDO0lBRUQsZ0JBQWdCLENBQUMsR0FBVztRQUN4QixNQUFNLElBQUksS0FBSyxDQUFDOzREQUNvQyxDQUFDLENBQUM7SUFDMUQsQ0FBQztJQUVELG9CQUFvQixDQUFDLEdBQVc7UUFDNUIsTUFBTSxJQUFJLEtBQUssQ0FBQzs0REFDb0MsQ0FBQyxDQUFDO0lBQzFELENBQUM7OzJHQWxJUSxjQUFjOytHQUFkLGNBQWMsY0FGWCxNQUFNOzJGQUVULGNBQWM7a0JBSDFCLFVBQVU7bUJBQUM7b0JBQ1IsVUFBVSxFQUFFLE1BQU07aUJBQ3JCIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgbm8tY2FzZS1kZWNsYXJhdGlvbnMgKi9cclxuLyogZXNsaW50LWRpc2FibGUgY2xhc3MtbWV0aG9kcy11c2UtdGhpcyAqL1xyXG5pbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgQ29tbWVudCwgRGJPYmplY3RUeXBlLCBFcXVpcG1lbnQsIEZlYXR1cmUsIFBPSSwgUG9pVHlwZSwgVGFnQWN0aW9uLCBUaWNrZXQgfSBmcm9tIFwiLi4vdHlwZXMuc2VydmljZVwiO1xyXG5cclxuQEluamVjdGFibGUoe1xyXG4gICAgcHJvdmlkZWRJbjogXCJyb290XCIsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBCYXNlVGFnU2VydmljZSB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoKSB7IH1cclxuXHJcbiAgICBhc3luYyBnZXRIdG1sVG9JbmplY3QoXHJcbiAgICAgICAgdGFnVHlwZTogUG9pVHlwZSxcclxuICAgICAgICBvYmplY3Q6IERiT2JqZWN0VHlwZSxcclxuICAgICAgICBtYXhIZWlnaHREaXY6IG51bWJlclxyXG4gICAgKTogUHJvbWlzZTx7IGh0bWw6IHN0cmluZzsgaGVpZ2h0OiBudW1iZXI7IH0+IHtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGdldEh0bWxUb0luamVjdCBpcyBub3QgaW1wbGVtZW50ZWQgaW4gdGhlIGJhc2UgY2xhc3MuIFxyXG4gICAgICAgIFBsZWFzZSBvdmVycmlkZSB0aGlzIG1ldGhvZCBpbiB5b3VyIGV4dGVuZGVkIGNsYXNzLmApO1xyXG4gICAgfVxyXG5cclxuICAgIGdldFVybEZvclNlZURldGFpbHMoXHJcbiAgICAgICAgb2JqZWN0OiBEYk9iamVjdFR5cGUsXHJcbiAgICAgICAgdGFnVHlwZTogUG9pVHlwZSxcclxuICAgICk6IHN0cmluZyB7XHJcbiAgICAgICAgc3dpdGNoICh0YWdUeXBlKSB7XHJcbiAgICAgICAgICAgIGNhc2UgUG9pVHlwZS5USUNLRVQ6IHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBgdmlzaXQvJHtvYmplY3Quc3BhY2VJRH0vZGV0YWlsLyR7b2JqZWN0LmlkfWA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2FzZSBQb2lUeXBlLkVRVUlQTUVOVDoge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGB2aXNpdC8ke29iamVjdC5zcGFjZUlEfS9lcXVpcC8ke29iamVjdC5pZH1gO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNhc2UgUG9pVHlwZS5NRUFTVVJFOiB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gYHZpc2l0LyR7b2JqZWN0LnNwYWNlSUR9L21lYXN1cmVtZW50LyR7b2JqZWN0LmlkfWA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2FzZSBQb2lUeXBlLkRBVEE6IHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBgdmlzaXQvJHtvYmplY3Quc3BhY2VJRH0vZmVhdHVyZS8ke29iamVjdC5pZH1gO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNhc2UgUG9pVHlwZS5ERVNLOiB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gYHZpc2l0LyR7b2JqZWN0LnNwYWNlSUR9L2FkZF9ib29raW5nLyR7b2JqZWN0LmlkfWA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgIHJldHVybiBcIlwiO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBwcmVwYXJlRXF1aXBtZW50SHRtbChcclxuICAgICAgICBlcXVpcDogRXF1aXBtZW50LFxyXG4gICAgKTogUHJvbWlzZTx7IGh0bWxPYmplY3Q6IHN0cmluZzsgaGVpZ2h0OiBudW1iZXI7IH0+IHtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYHByZXBhcmVFcXVpcG1lbnRIdG1sIGlzIG5vdCBpbXBsZW1lbnRlZCBpbiB0aGUgYmFzZSBjbGFzcy4gXHJcbiAgICAgICAgUGxlYXNlIG92ZXJyaWRlIHRoaXMgbWV0aG9kIGluIHlvdXIgZXh0ZW5kZWQgY2xhc3MuYCk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgcHJlcGFyZVRpY2tldEh0bWwoXHJcbiAgICAgICAgdGlja2V0OiBUaWNrZXQsXHJcbiAgICApOiBQcm9taXNlPHsgaHRtbE9iamVjdDogc3RyaW5nOyBoZWlnaHQ6IG51bWJlcjsgfT4ge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgcHJlcGFyZVRpY2tldEh0bWwgaXMgbm90IGltcGxlbWVudGVkIGluIHRoZSBiYXNlIGNsYXNzLiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgIFBsZWFzZSBvdmVycmlkZSB0aGlzIG1ldGhvZCBpbiB5b3VyIGV4dGVuZGVkIGNsYXNzLmApO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIHByZXBhcmVGZWF0dXJlSHRtbChcclxuICAgICAgICBmZWF0dXJlOiBGZWF0dXJlLFxyXG4gICAgKTogUHJvbWlzZTx7IGh0bWxPYmplY3Q6IHN0cmluZzsgaGVpZ2h0OiBudW1iZXI7IH0+IHtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYHByZXBhcmVGZWF0dXJlSHRtbCBpcyBub3QgaW1wbGVtZW50ZWQgaW4gdGhlIGJhc2UgY2xhc3MuIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgUGxlYXNlIG92ZXJyaWRlIHRoaXMgbWV0aG9kIGluIHlvdXIgZXh0ZW5kZWQgY2xhc3MuYCk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgcHJlcGFyZU1lYXN1cmVtZW50SHRtbChcclxuICAgICAgICBtZWFzdXJlOiBDb21tZW50LFxyXG4gICAgKTogUHJvbWlzZTx7IGh0bWxPYmplY3Q6IHN0cmluZzsgaGVpZ2h0OiBudW1iZXI7IH0+IHtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYHByZXBhcmVNZWFzdXJlbWVudEh0bWwgaXMgbm90IGltcGxlbWVudGVkIGluIHRoZSBiYXNlIGNsYXNzLiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgIFBsZWFzZSBvdmVycmlkZSB0aGlzIG1ldGhvZCBpbiB5b3VyIGV4dGVuZGVkIGNsYXNzLmApO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIHByZXBhcmVEZXNrSHRtbChcclxuICAgICAgICBmZWF0dXJlOiBGZWF0dXJlLFxyXG4gICAgKTogUHJvbWlzZTx7IGh0bWxPYmplY3Q6IHN0cmluZzsgaGVpZ2h0OiBudW1iZXI7IH0+IHtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYHByZXBhcmVEZXNrSHRtbCBpcyBub3QgaW1wbGVtZW50ZWQgaW4gdGhlIGJhc2UgY2xhc3MuIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgUGxlYXNlIG92ZXJyaWRlIHRoaXMgbWV0aG9kIGluIHlvdXIgZXh0ZW5kZWQgY2xhc3MuYCk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgcHJlcGFyZUluZGljYXRvckh0bWwoXHJcbiAgICAgICAgZmVhdHVyZTogRmVhdHVyZSxcclxuICAgICk6IFByb21pc2U8eyBodG1sT2JqZWN0OiBzdHJpbmc7IGhlaWdodDogbnVtYmVyOyB9PiB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBwcmVwYXJlRGVza0h0bWwgaXMgbm90IGltcGxlbWVudGVkIGluIHRoZSBiYXNlIGNsYXNzLiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgIFBsZWFzZSBvdmVycmlkZSB0aGlzIG1ldGhvZCBpbiB5b3VyIGV4dGVuZGVkIGNsYXNzLmApO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGdldFNpZ25lZFRhZ0ljb25Tb3VyY2UodGFnSWNvblNyYzogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmcgfCBudWxsPiB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBnZXRTaWduZWRUYWdJY29uU291cmNlIGlzIG5vdCBpbXBsZW1lbnRlZCBpbiB0aGUgYmFzZSBjbGFzcy5gKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRJY29uVGFnSW1hZ2VGb3JGZWF0dXJlKGZlYXR1cmU6IERiT2JqZWN0VHlwZSwgcG9pOiBQT0kpOiBzdHJpbmcge1xyXG4gICAgICAgIC8vIGNvbnN0IHRhZ0ljb24gPSBKU09OLnBhcnNlKHBvaS50YWdJY29uKTtcclxuICAgICAgICAvLyByZXR1cm4gdGFnSWNvbi5zcmM7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBnZXRJY29uVGFnSW1hZ2VGb3JGZWF0dXJlIGlzIG5vdCBpbXBsZW1lbnRlZCBpbiB0aGUgYmFzZSBjbGFzcy4gXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICBQbGVhc2Ugb3ZlcnJpZGUgdGhpcyBtZXRob2QgaW4geW91ciBleHRlbmRlZCBjbGFzcy5gKTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgZ2V0U2NyaXB0Rm9yVGFnKG9iamVjdCwgdGFnVHlwZTogUG9pVHlwZSk6IHN0cmluZyB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBnZXRTY3JpcHRGb3JUYWcgaXMgbm90IGltcGxlbWVudGVkIGluIHRoZSBiYXNlIGNsYXNzLiBcclxuICAgICAgICBQbGVhc2Ugb3ZlcnJpZGUgdGhpcyBtZXRob2QgaW4geW91ciBleHRlbmRlZCBjbGFzcy5gKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRCaWxsYm9hcmRNZWRpYVRvRW1iZWQob2JqZWN0OiBEYk9iamVjdFR5cGUpOiB7IGNvbW1lbnQ6IENvbW1lbnQsIHRhZ0Rlc2NyaXB0aW9uOiBzdHJpbmc7IH0ge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgZ2V0QmlsbGJvYXJkTWVkaWFUb0VtYmVkIGlzIG5vdCBpbXBsZW1lbnRlZCBpbiB0aGUgYmFzZSBjbGFzcy4gXHJcbiAgICAgICAgUGxlYXNlIG92ZXJyaWRlIHRoaXMgbWV0aG9kIGluIHlvdXIgZXh0ZW5kZWQgY2xhc3MuYCk7XHJcbiAgICB9XHJcblxyXG4gICAgb25BY3Rpb25EZXRhaWxDbGljayh1cmw6IHN0cmluZykge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgb25BY3Rpb25EZXRhaWxDbGljayBpcyBub3QgaW1wbGVtZW50ZWQgaW4gdGhlIGJhc2UgY2xhc3MuIFxyXG4gICAgICAgIFBsZWFzZSBvdmVycmlkZSB0aGlzIG1ldGhvZCBpbiB5b3VyIGV4dGVuZGVkIGNsYXNzLmApO1xyXG4gICAgfVxyXG5cclxuICAgIG9uQWN0aW9uQXVkaW9DbGljayhhdWRpb0NvbW1lbnRJRDogc3RyaW5nKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBvbkFjdGlvbkRldGFpbENsaWNrIGlzIG5vdCBpbXBsZW1lbnRlZCBpbiB0aGUgYmFzZSBjbGFzcy4gXHJcbiAgICAgICAgUGxlYXNlIG92ZXJyaWRlIHRoaXMgbWV0aG9kIGluIHlvdXIgZXh0ZW5kZWQgY2xhc3MuYCk7XHJcbiAgICB9XHJcblxyXG4gICAgb25BY3Rpb25WaWRlb0NsaWNrKHVybDogc3RyaW5nKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBvbkFjdGlvblZpZGVvQ2xpY2sgaXMgbm90IGltcGxlbWVudGVkIGluIHRoZSBiYXNlIGNsYXNzLiBcclxuICAgICAgICBQbGVhc2Ugb3ZlcnJpZGUgdGhpcyBtZXRob2QgaW4geW91ciBleHRlbmRlZCBjbGFzcy5gKTtcclxuICAgIH1cclxuXHJcbiAgICBvbkFjdGlvbkltYWdlQ2xpY2soaW1hZ2VDb21tZW50SUQ6IHN0cmluZykge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgb25BY3Rpb25JbWFnZUNsaWNrIGlzIG5vdCBpbXBsZW1lbnRlZCBpbiB0aGUgYmFzZSBjbGFzcy5cclxuICAgICAgICBQbGVhc2Ugb3ZlcnJpZGUgdGhpcyBtZXRob2QgaW4geW91ciBleHRlbmRlZCBjbGFzcy5gKTtcclxuICAgIH1cclxuXHJcbiAgICBvbkFjdGlvbkRvY0NsaWNrKHVybDogc3RyaW5nKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBvbkFjdGlvbkRvY0NsaWNrIGlzIG5vdCBpbXBsZW1lbnRlZCBpbiB0aGUgYmFzZSBjbGFzcy4gXHJcbiAgICAgICAgUGxlYXNlIG92ZXJyaWRlIHRoaXMgbWV0aG9kIGluIHlvdXIgZXh0ZW5kZWQgY2xhc3MuYCk7XHJcbiAgICB9XHJcblxyXG4gICAgb25BY3Rpb25Zb3V0dWJlQ2xpY2sodXJsOiBzdHJpbmcpIHtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYG9uQWN0aW9uWW91dHViZUNsaWNrIGlzIG5vdCBpbXBsZW1lbnRlZCBpbiB0aGUgYmFzZSBjbGFzcy4gXHJcbiAgICAgICAgUGxlYXNlIG92ZXJyaWRlIHRoaXMgbWV0aG9kIGluIHlvdXIgZXh0ZW5kZWQgY2xhc3MuYCk7XHJcbiAgICB9XHJcbn1cclxuIl19
|