@banta/sdk 4.7.9 → 4.7.11
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/banta-sdk.module.mjs +5 -6
- package/esm2020/lib/chat-backend.mjs +18 -6
- package/esm2020/lib/chat-source-base.mjs +1 -1
- package/esm2020/lib/chat-source.mjs +39 -10
- package/esm2020/lib/comments/banta-comments/banta-comments.component.mjs +2 -2
- package/esm2020/lib/comments/comment-field/comment-field.component.mjs +5 -2
- package/esm2020/lib/common/attachment/attachment.component.mjs +3 -5
- package/esm2020/lib/common/attachments/attachments.component.mjs +6 -3
- package/esm2020/lib/common/common.module.mjs +10 -1
- package/esm2020/lib/common/timer-pool.service.mjs +83 -0
- package/esm2020/lib/common/timestamp.component.mjs +24 -14
- package/fesm2015/banta-sdk.mjs +117 -51
- package/fesm2015/banta-sdk.mjs.map +1 -1
- package/fesm2020/banta-sdk.mjs +113 -51
- package/fesm2020/banta-sdk.mjs.map +1 -1
- package/lib/chat-backend.d.ts +5 -0
- package/lib/chat-source-base.d.ts +1 -0
- package/lib/chat-source.d.ts +4 -0
- package/lib/common/attachments/attachments.component.d.ts +1 -0
- package/lib/common/common.module.d.ts +2 -0
- package/lib/common/timer-pool.service.d.ts +15 -0
- package/lib/common/timestamp.component.d.ts +6 -1
- package/package.json +1 -1
|
@@ -261,7 +261,7 @@ export class BantaCommentsComponent {
|
|
|
261
261
|
return this.threadView;
|
|
262
262
|
}
|
|
263
263
|
updateLoading() {
|
|
264
|
-
if (this.source?.state && this.source?.state
|
|
264
|
+
if (this.source?.state && !['connecting', 'lost'].includes(this.source?.state)) {
|
|
265
265
|
clearInterval(this._loadingTimer);
|
|
266
266
|
this.loadingMessage = `Here we go!`;
|
|
267
267
|
setTimeout(() => {
|
|
@@ -663,4 +663,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImpo
|
|
|
663
663
|
}], shared: [{
|
|
664
664
|
type: Output
|
|
665
665
|
}] } });
|
|
666
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFudGEtY29tbWVudHMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2RrL3NyYy9saWIvY29tbWVudHMvYmFudGEtY29tbWVudHMvYmFudGEtY29tbWVudHMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2RrL3NyYy9saWIvY29tbWVudHMvYmFudGEtY29tbWVudHMvYmFudGEtY29tbWVudHMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsd0RBQXdEO0FBQXhELHdEQUF3RDtBQUV4RCxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBYyxXQUFXLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBYSxXQUFXLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6SixPQUFPLEVBQXFCLGFBQWEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVqRSxPQUFPLEVBQUUsT0FBTyxFQUFjLFlBQVksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN6RCxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFNdEMsT0FBTyxFQUFFLDhCQUE4QixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFFakYsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sd0NBQXdDLENBQUM7Ozs7Ozs7Ozs7Ozs7O0FBRzlFOztHQUVHO0FBTUgsTUFBTSxPQUFPLHNCQUFzQjtJQUMvQixZQUNZLE9BQXdCLEVBQ3hCLFVBQW1DLEVBQ25DLGNBQThCLEVBQzlCLFdBQXdCLEVBQ3hCLE1BQWM7UUFKZCxZQUFPLEdBQVAsT0FBTyxDQUFpQjtRQUN4QixlQUFVLEdBQVYsVUFBVSxDQUF5QjtRQUNuQyxtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFDOUIsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFDeEIsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQXNG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Q0cscUJBQXFCO3NCQUE3QixLQUFLO2dCQUNHLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFDRyxjQUFjO3NCQUF0QixLQUFLO2dCQUNHLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csa0JBQWtCO3NCQUExQixLQUFLO2dCQUNHLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFFRywwQkFBMEI7c0JBQWxDLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFLRixNQUFNO3NCQURULEtBQUs7Z0JBNkNOLFFBQVE7c0JBRFAsS0FBSztnQkFPRixPQUFPO3NCQURWLEtBQUs7Z0JBV1EsY0FBYztzQkFBM0IsTUFBTTtnQkFDTyxrQkFBa0I7c0JBQS9CLE1BQU07Z0JBQ08scUJBQXFCO3NCQUFsQyxNQUFNO2dCQUNPLE9BQU87c0JBQXBCLE1BQU07Z0JBQ08sUUFBUTtzQkFBckIsTUFBTTtnQkFDTyxRQUFRO3NCQUFyQixNQUFNO2dCQUNPLFlBQVk7c0JBQXpCLE1BQU07Z0JBQ08sZ0JBQWdCO3NCQUE3QixNQUFNO2dCQUNPLGNBQWM7c0JBQTNCLE1BQU07Z0JBQ08sTUFBTTtzQkFBbkIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbIi8vLyA8cmVmZXJlbmNlIHR5cGVzPVwiQHR5cGVzL3Jlc2l6ZS1vYnNlcnZlci1icm93c2VyXCIgLz5cclxuXHJcbmltcG9ydCB7IENvbXBvbmVudCwgQ29udGVudENoaWxkLCBFbGVtZW50UmVmLCBIb3N0QmluZGluZywgSW5wdXQsIE5nWm9uZSwgT3V0cHV0LCBRdWVyeUxpc3QsIFRlbXBsYXRlUmVmLCBWaWV3Q2hpbGQsIFZpZXdDaGlsZHJlbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBVc2VyLCBDaGF0TWVzc2FnZSwgQ29tbWVudHNPcmRlciB9IGZyb20gJ0BiYW50YS9jb21tb24nO1xyXG5pbXBvcnQgeyBIYXNoVGFnIH0gZnJvbSAnLi4vY29tbWVudC1maWVsZC9jb21tZW50LWZpZWxkLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFN1YmplY3QsIE9ic2VydmFibGUsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyB0YWtlIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5cclxuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQgeyBDaGF0QmFja2VuZEJhc2UgfSBmcm9tICcuLi8uLi9jaGF0LWJhY2tlbmQtYmFzZSc7XHJcbmltcG9ydCB7IENoYXRTb3VyY2VCYXNlIH0gZnJvbSAnLi4vLi4vY2hhdC1zb3VyY2UtYmFzZSc7XHJcbmltcG9ydCB7IE1hdFNuYWNrQmFyIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc25hY2stYmFyJztcclxuaW1wb3J0IHsgQmFudGFSZXBseVNlbmRPcHRpb25zRGlyZWN0aXZlIH0gZnJvbSAnLi4vcmVwbHktc2VuZC1vcHRpb25zLmRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IE1lc3NhZ2VNZW51SXRlbSB9IGZyb20gJy4uLy4uL21lc3NhZ2UtbWVudS1pdGVtJztcclxuaW1wb3J0IHsgQ29tbWVudFZpZXdDb21wb25lbnQgfSBmcm9tICcuLi9jb21tZW50LXZpZXcvY29tbWVudC12aWV3LmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IENvbW1lbnRDb21wb25lbnQgfSBmcm9tICcuLi9jb21tZW50L2NvbW1lbnQuY29tcG9uZW50JztcclxuXHJcbi8qKlxyXG4gKiBDb21tZW50cyBjb21wb25lbnRcclxuICovXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICdiYW50YS1jb21tZW50cycsXHJcbiAgICB0ZW1wbGF0ZVVybDogJy4vYmFudGEtY29tbWVudHMuY29tcG9uZW50Lmh0bWwnLFxyXG4gICAgc3R5bGVVcmxzOiBbJy4vYmFudGEtY29tbWVudHMuY29tcG9uZW50LnNjc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgQmFudGFDb21tZW50c0NvbXBvbmVudCB7XHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBwcml2YXRlIGJhY2tlbmQ6IENoYXRCYWNrZW5kQmFzZSxcclxuICAgICAgICBwcml2YXRlIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+LFxyXG4gICAgICAgIHByaXZhdGUgYWN0aXZhdGVkUm91dGU6IEFjdGl2YXRlZFJvdXRlLFxyXG4gICAgICAgIHByaXZhdGUgbWF0U25hY2tCYXI6IE1hdFNuYWNrQmFyLFxyXG4gICAgICAgIHByaXZhdGUgbmdab25lOiBOZ1pvbmVcclxuICAgICkge1xyXG4gICAgICAgIHRoaXMuc2VuZE1lc3NhZ2UgPSBhc3luYyAobWVzc2FnZTogQ2hhdE1lc3NhZ2UpID0+IHtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGludGVyY2VwdCA9IGF3YWl0IHRoaXMuc2hvdWxkSW50ZXJjZXB0TWVzc2FnZVNlbmQ/LihtZXNzYWdlLCB0aGlzLnNvdXJjZSk7XHJcbiAgICAgICAgICAgICAgICBpZiAoIWludGVyY2VwdCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuc291cmNlLnNlbmQobWVzc2FnZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuc291cmNlLnNvcnRPcmRlciAhPT0gQ29tbWVudHNPcmRlci5ORVdFU1QpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNvcnRPcmRlciA9IENvbW1lbnRzT3JkZXIuTkVXRVNUO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlQmFja2VuZEV4Y2VwdGlvbihlLCAnQ291bGQgbm90IHNlbmQ6ICcpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnNlbmRSZXBseSA9IGFzeW5jIChtZXNzYWdlOiBDaGF0TWVzc2FnZSkgPT4ge1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgaW50ZXJjZXB0ID0gYXdhaXQgdGhpcy5zaG91bGRJbnRlcmNlcHRNZXNzYWdlU2VuZD8uKG1lc3NhZ2UsIHRoaXMuc2VsZWN0ZWRNZXNzYWdlVGhyZWFkKTtcclxuICAgICAgICAgICAgICAgIGlmICghaW50ZXJjZXB0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5zZWxlY3RlZE1lc3NhZ2VUaHJlYWQuc2VuZChtZXNzYWdlKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZUJhY2tlbmRFeGNlcHRpb24oZSwgJ0NvdWxkIG5vdCBzZW5kIHJlcGx5OiAnKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBnZXQgZWxlbWVudCgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBoYW5kbGVCYWNrZW5kRXhjZXB0aW9uQXNBbGVydChlOiBFcnJvciwgcHJlZml4OiBzdHJpbmcgPSAnJykge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlQmFja2VuZEV4Y2VwdGlvbihlLCBwcmVmaXgpO1xyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgYWxlcnQoZS5tZXNzYWdlKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBoYW5kbGVCYWNrZW5kRXhjZXB0aW9uKGU6IEVycm9yLCBwcmVmaXg6IHN0cmluZyA9ICcnKSB7XHJcbiAgICAgICAgbGV0IGVycm9yTWVzc2FnZSA9IGUubWVzc2FnZTtcclxuXHJcbiAgICAgICAgaWYgKGVycm9yTWVzc2FnZS5zdGFydHNXaXRoKCdwZXJtaXNzaW9uLWRlbmllZHwnKSkge1xyXG4gICAgICAgICAgICBlcnJvck1lc3NhZ2UgPSBlcnJvck1lc3NhZ2UucmVwbGFjZSgvXnBlcm1pc3Npb24tZGVuaWVkXFx8LywgJycpO1xyXG5cclxuICAgICAgICAgICAgaWYgKGVycm9yTWVzc2FnZS5zdGFydHNXaXRoKGBhcHAtaGFuZGxlfGApKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBJZiB0aGlzIGlzIGFuIGVycm9yIGR1cmluZyBhdXRob3JpemVBY3Rpb24gb24gdGhlIGJhY2tlbmQsIHBhc3MgY29udHJvbCB0byB0aGUgdXNlci1wcm92aWRlZCBcclxuICAgICAgICAgICAgICAgIC8vIHBlcm1pc3Npb24tZGVuaWVkIGhhbmRsZXIuXHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5zZW5kUGVybWlzc2lvbkRlbmllZChlcnJvck1lc3NhZ2UucmVwbGFjZSgvXmFwcC1oYW5kbGVcXHwvLCAnJykpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7cHJlZml4fSR7ZXJyb3JNZXNzYWdlfWApO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIExpZmVjeWNsZSBFdmVudHMgLyBJbml0aWFsaXphdGlvblxyXG5cclxuICAgIG5nT25Jbml0KCkge1xyXG4gICAgICAgIHRoaXMuX3N1YnMuYWRkKHRoaXMuYmFja2VuZC51c2VyQ2hhbmdlZC5zdWJzY3JpYmUodXNlciA9PiB0aGlzLnVzZXIgPSB1c2VyKSk7XHJcbiAgICAgICAgdGhpcy5zdGFydExvYWRpbmcoKTtcclxuXHJcbiAgICAgICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICAgICAgICAgIGxldCBxdWVyeVN0cmluZyA9IHdpbmRvdy5sb2NhdGlvbi5zZWFyY2guc3Vic3RyaW5nKDEpO1xyXG4gICAgICAgICAgICBsZXQgcXVlcnkgPSBxdWVyeVN0cmluZy5zcGxpdCgnJicpXHJcbiAgICAgICAgICAgICAgICAubWFwKHMgPT4gcy5zcGxpdCgnPScpKVxyXG4gICAgICAgICAgICAgICAgLnJlZHVjZSgobywgW2ssIHZdKSA9PiAob1tkZWNvZGVVUklDb21wb25lbnQoayldID0gZGVjb2RlVVJJQ29tcG9uZW50KHYpLCBvKSwge30pXHJcbiAgICAgICAgICAgIDtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IGNvbW1lbnRJRCA9IHF1ZXJ5Wydjb21tZW50J107XHJcbiAgICAgICAgICAgIGlmIChjb21tZW50SUQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2hhcmVkQ29tbWVudElEID0gY29tbWVudElEO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgcmVzaXplT2JzZXJ2ZXI6IFJlc2l6ZU9ic2VydmVyO1xyXG4gICAgcHJpdmF0ZSB3aWR0aDogbnVtYmVyO1xyXG4gICAgcHJpdmF0ZSBoZWlnaHQ6IG51bWJlcjtcclxuXHJcbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLmJhbnRhLW1vYmlsZScpXHJcbiAgICBpc01vYmlsZVNpemVkOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gICAgQENvbnRlbnRDaGlsZChCYW50YVJlcGx5U2VuZE9wdGlvbnNEaXJlY3RpdmUsIHtyZWFkOiBUZW1wbGF0ZVJlZn0pIFxyXG4gICAgc2VuZFJlcGx5T3B0aW9uc1RlbXBsYXRlOiBhbnk7XHJcblxyXG4gICAgbWFya1ZpZXdSZWFkeTogKCkgPT4gdm9pZDtcclxuICAgIHZpZXdSZWFkeSA9IG5ldyBQcm9taXNlPHZvaWQ+KHIgPT4gdGhpcy5tYXJrVmlld1JlYWR5ID0gcik7XHJcblxyXG4gICAgbmdBZnRlclZpZXdJbml0KCkge1xyXG4gICAgICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xyXG4gICAgICAgICAgICBsZXQgY2FsbGJhY2sgPSAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBsZXQgc2l6ZSA9IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy53aWR0aCA9IHNpemUud2lkdGg7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaGVpZ2h0ID0gc2l6ZS5oZWlnaHQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaXNNb2JpbGVTaXplZCA9IHRoaXMud2lkdGggPCA1MDA7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgaWYgKHR5cGVvZiBSZXNpemVPYnNlcnZlciAhPT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMucmVzaXplT2JzZXJ2ZXIgPSBuZXcgUmVzaXplT2JzZXJ2ZXIoY2FsbGJhY2spO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yZXNpemVPYnNlcnZlci5vYnNlcnZlKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50KTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIC8vIE9uZSBjaGVjayBpcyBiZXR0ZXIgdGhhbiBub3RoaW5nIVxyXG4gICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy53aWR0aCA9IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmNsaWVudFdpZHRoO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaGVpZ2h0ID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuY2xpZW50SGVpZ2h0O1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaXNNb2JpbGVTaXplZCA9IHRoaXMud2lkdGggPCA1MDA7XHJcbiAgICAgICAgICAgICAgICB9LCAxMDAwKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY2FsbGJhY2soKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMubWFya1ZpZXdSZWFkeSgpO1xyXG4gICAgfVxyXG5cclxuICAgIG5nT25EZXN0cm95KCkge1xyXG4gICAgICAgIHRoaXMuX3N1YnMudW5zdWJzY3JpYmUoKTtcclxuICAgICAgICBpZiAodGhpcy5yZXNpemVPYnNlcnZlcilcclxuICAgICAgICAgICAgdGhpcy5yZXNpemVPYnNlcnZlci5kaXNjb25uZWN0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBhc3luYyBzZXRTb3VyY2VGcm9tVG9waWNJRCh0b3BpY0lEOiBzdHJpbmcpIHtcclxuICAgICAgICBpZiAodHlwZW9mIHdpbmRvdyA9PT0gJ3VuZGVmaW5lZCcpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuXHJcbiAgICAgICAgc2V0VGltZW91dChhc3luYyAoKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGBbYmFudGEtY29tbWVudHNdIFN1YnNjcmliaW5nIHRvIHRvcGljIHNvdXJjZSAnJHt0b3BpY0lEfSdgKTtcclxuICAgICAgICAgICAgdGhpcy5zb3VyY2UgPSBhd2FpdCB0aGlzLmJhY2tlbmQuZ2V0U291cmNlRm9yVG9waWModG9waWNJRCwgeyBzb3J0T3JkZXI6IHRoaXMuc29ydE9yZGVyIH0pO1xyXG4gICAgICAgICAgICB0aGlzLl9zb3VyY2VJc093bmVkID0gdHJ1ZTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBMb2FkaW5nIFNjcmVlblxyXG4gICAgcHJpdmF0ZSBfbG9hZGluZ01lc3NhZ2UgPSAnJztcclxuICAgIGxvYWRpbmdNZXNzYWdlVmlzaWJsZSA9IGZhbHNlO1xyXG5cclxuICAgIGdldCBsb2FkaW5nTWVzc2FnZSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fbG9hZGluZ01lc3NhZ2U7XHJcbiAgICB9XHJcblxyXG4gICAgc2V0IGxvYWRpbmdNZXNzYWdlKHZhbHVlKSB7XHJcbiAgICAgICAgdGhpcy5sb2FkaW5nTWVzc2FnZVZpc2libGUgPSBmYWxzZTtcclxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5fbG9hZGluZ01lc3NhZ2UgPSB2YWx1ZTtcclxuICAgICAgICAgICAgdGhpcy5fbG9hZGluZ01lc3NhZ2UgPSB2YWx1ZTtcclxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvYWRpbmdNZXNzYWdlVmlzaWJsZSA9IHRydWU7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgfSwgNTAwKTtcclxuICAgIH1cclxuXHJcbiAgICBsb2FkaW5nOiBib29sZWFuID0gdHJ1ZTtcclxuICAgIHNob3dMb2FkaW5nU2NyZWVuID0gZmFsc2U7XHJcbiAgICBsb2FkaW5nU3RhcnRlZEF0OiBudW1iZXI7XHJcbiAgICBtZXNzYWdlQ2hhbmdlZEF0OiBudW1iZXI7XHJcbiAgICBzaGFyZWRDb21tZW50SUQ6IHN0cmluZztcclxuICAgIGxhc3RTaGFyZWRDb21tZW50SUQ6IHN0cmluZztcclxuXHJcbiAgICBASW5wdXQoKSBjdXN0b21NZW51SXRlbXM6IE1lc3NhZ2VNZW51SXRlbVtdID0gW107XHJcblxyXG4gICAgcHJpdmF0ZSBhc3luYyBzdGFydExvYWRpbmcoKSB7XHJcbiAgICAgICAgdGhpcy5sb2FkaW5nU3RhcnRlZEF0ID0gdGhpcy5tZXNzYWdlQ2hhbmdlZEF0ID0gRGF0ZS5ub3coKTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMudXBkYXRlTG9hZGluZygpKSByZXR1cm47XHJcbiAgICAgICAgYXdhaXQgbmV3IFByb21pc2U8dm9pZD4ocmVzb2x2ZSA9PiBzZXRUaW1lb3V0KCgpID0+IHJlc29sdmUoKSwgMTAwKSk7XHJcbiAgICAgICAgaWYgKHRoaXMudXBkYXRlTG9hZGluZygpKSByZXR1cm47XHJcbiAgICAgICAgYXdhaXQgbmV3IFByb21pc2U8dm9pZD4ocmVzb2x2ZSA9PiBzZXRUaW1lb3V0KCgpID0+IHJlc29sdmUoKSwgMjUwKSk7XHJcbiAgICAgICAgaWYgKHRoaXMudXBkYXRlTG9hZGluZygpKSByZXR1cm47XHJcbiAgICAgICAgYXdhaXQgbmV3IFByb21pc2U8dm9pZD4ocmVzb2x2ZSA9PiBzZXRUaW1lb3V0KCgpID0+IHJlc29sdmUoKSwgNTAwKSk7XHJcbiAgICAgICAgaWYgKHRoaXMudXBkYXRlTG9hZGluZygpKSByZXR1cm47XHJcblxyXG4gICAgICAgIGNvbnNvbGUubG9nKGBbQmFudGFdIExvYWRpbmcgaXMgdGFraW5nIGEgbG9uZyB0aW1lISBTaG93aW5nIGxvYWRpbmcgc2NyZWVuLmApO1xyXG4gICAgICAgIHRoaXMuc2hvd0xvYWRpbmdTY3JlZW4gPSB0cnVlO1xyXG4gICAgICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJylcclxuICAgICAgICAgICAgdGhpcy5fbG9hZGluZ1RpbWVyID0gc2V0SW50ZXJ2YWwoKCkgPT4gdGhpcy51cGRhdGVMb2FkaW5nKCksIDEwMDApO1xyXG4gICAgfVxyXG4gICAgXHJcbiAgICBwcml2YXRlIF9sb2FkaW5nVGltZXI7XHJcbiAgICBwcml2YXRlIF9sb2FkaW5nTWVzc2FnZUluZGV4ID0gMDtcclxuXHJcbiAgICBASW5wdXQoKSBtYXhDb21tZW50TGVuZ3RoOiBudW1iZXIgPSAxNTAwO1xyXG4gICAgQElucHV0KCkgbG9hZGluZ01lc3NhZ2VzOiBzdHJpbmdbXSA9IFtcclxuICAgICAgICBgSnVzdCBhIHNlY29uZC4uLmAsXHJcbiAgICAgICAgYFdlJ3JlIGRlZmluaXRlbHkgd29ya2luZyBvbiBpdC5gLFxyXG4gICAgICAgIGBUaGVyZSdzIG5vIG5lZWQgdG8gcmVmcmVzaC5gLFxyXG4gICAgICAgIGBJdCdzIGRlZmluaXRlbHkgd29ydGggdGhlIHdhaXQhYCxcclxuICAgICAgICBgVGhpcyBoYXMgbmV2ZXIgaGFwcGVuZWQgYmVmb3JlLmAsXHJcbiAgICAgICAgYFdlJ2xsIGtlZXAgdHJ5aW5nLCBidXQgaXQncyBub3QgbG9va2luZyBncmVhdC4gXHJcbiAgICAgICAgICAgIENvbW1lbnRpbmcgJiBjaGF0IHNlcnZpY2VzIG1heSBiZSBkb3duLiBcclxuICAgICAgICAgICAgSWYgeW91IGNvbnRpbnVlIHRvIGV4cGVyaWVuY2UgaXNzdWVzLCBwbGVhc2UgY29udGFjdCBzdXBwb3J0LlxyXG4gICAgICAgIGBcclxuICAgIF07XHJcblxyXG4gICAgQElucHV0KCkgdXNlSW5saW5lUmVwbGllcyA9IHRydWU7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBY2Nlc3MgdGhlIENvbW1lbnRWaWV3Q29tcG9uZW50IGZvciB0aGlzIEJhbnRhQ29tbWVudHNDb21wb25lbnQuIFxyXG4gICAgICogQ29tbWVudFZpZXdDb21wb25lbnQgaXMgcmVzcG9uc2libGUgZm9yIGludGVyYWN0aW5nIHdpdGggdGhlIENoYXRTb3VyY2UgXHJcbiAgICAgKiBvYmplY3QgYW5kIHJlbmRlcmluZyBjb21tZW50cyBhcyBDb21tZW50Q29tcG9uZW50cy4gSXQgaXMgdGhlIHNvdXJjZSBvZiBcclxuICAgICAqIHRydXRoIGZvciB3aGljaCBDb21tZW50Q29tcG9uZW50IGNvcnJlc3BvbmRzIHRvIHdoaWNoIENoYXRNZXNzYWdlLiBcclxuICAgICAqIFxyXG4gICAgICogTm90ZSB0aGF0IHRoaXMgQ29tbWVudFZpZXdDb21wb25lbnQgaXMgb25seSBmb3IgdGhlIHRvcCBsZXZlbCBjb21tZW50cy5cclxuICAgICAqIFJlcGxpZXMgYXJlIGhhbmRsZWQgYnkgYSBzZXBhcmF0ZSBDb21tZW50Vmlld0NvbXBvbmVudCB3aGljaCBjYW4gYmUgXHJcbiAgICAgKiByZXRyaWV2ZWQgdXNpbmcgdGhlIHRocmVhZFZpZXcgcHJvcGVydHkuXHJcbiAgICAgKi9cclxuICAgIEBWaWV3Q2hpbGQoJ2NvbW1lbnRWaWV3JylcclxuICAgIGNvbW1lbnRWaWV3OiBDb21tZW50Vmlld0NvbXBvbmVudDtcclxuXHJcbiAgICBAVmlld0NoaWxkcmVuKENvbW1lbnRWaWV3Q29tcG9uZW50KVxyXG4gICAgdGhyZWFkVmlld1F1ZXJ5OiBRdWVyeUxpc3Q8Q29tbWVudFZpZXdDb21wb25lbnQ+O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQXR0ZW1wdHMgdG8gZmluZCB0aGUgQ29tbWVudENvbXBvbmVudCB0aGF0IGNvcnJlc3BvbmRzIHRvIHRoZSBnaXZlbiBDaGF0TWVzc2FnZS5cclxuICAgICAqIFRoZSBDaGF0TWVzc2FnZSBjb3VsZCBiZSBhIHRvcC1sZXZlbCBtZXNzYWdlIGluIHRoaXMgY29udmVyc2F0aW9uLCBvciBhIHJlcGx5LCBcclxuICAgICAqIGJ1dCBub3RlIHRoYXQgYSBDb21tZW50Q29tcG9uZW50IHdpbGwgb25seSBleGlzdCBmb3IgYSByZXBseSBpZiB0aGUgdXNlciBoYXMgXHJcbiAgICAgKiB0aGUgcmVsZXZhbnQgcmVwbHkgdGhyZWFkIG9wZW4uXHJcbiAgICAgKiBAcGFyYW0gbWVzc2FnZSBUaGUgbWVzc2FnZSB0byBsb29rIGZvclxyXG4gICAgICovXHJcbiAgICBnZXRDb21tZW50Q29tcG9uZW50Rm9yTWVzc2FnZShtZXNzYWdlOiBDaGF0TWVzc2FnZSk6IENvbW1lbnRDb21wb25lbnQge1xyXG4gICAgICAgIGlmIChtZXNzYWdlLnBhcmVudE1lc3NhZ2VJZClcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMudGhyZWFkVmlldz8uZ2V0Q29tbWVudENvbXBvbmVudEZvck1lc3NhZ2UobWVzc2FnZSk7XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jb21tZW50Vmlldy5nZXRDb21tZW50Q29tcG9uZW50Rm9yTWVzc2FnZShtZXNzYWdlKVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQWNjZXNzIHRoZSBDb21tZW50Vmlld0NvbXBvbmVudCBjb3JyZXNwb25kaW5nIHRvIHRoZSBjdXJyZW50bHkgb3BlbiByZXBseSB0aHJlYWQuXHJcbiAgICAgKiBUaGlzIGlzIG5vdCB0aGUgdG9wIGxldmVsIGNvbW1lbnRzLCBidXQgaW5zdGVhZCB0aGUgcmVwbHkgdGhyZWFkIHRoYXQgdGhlIHVzZXIgaGFzIFxyXG4gICAgICogb3BlbmVkIChvbmx5IG9uZSBzZXQgb2YgcmVwbGllcyBjYW4gYmUgb3BlbiBhdCBhIHRpbWUpLlxyXG4gICAgICogXHJcbiAgICAgKiBGb3IgZGV0YWlscyBhYm91dCB3aGF0IENvbW1lbnRWaWV3Q29tcG9uZW50IGFmZm9yZHMgeW91LCBzZWUgdGhlIGNvbW1lbnRWaWV3IHByb3BlcnR5LlxyXG4gICAgICovXHJcbiAgICBnZXQgdGhyZWFkVmlldygpIHtcclxuICAgICAgICByZXR1cm4gQXJyYXkuZnJvbSh0aGlzLnRocmVhZFZpZXdRdWVyeSkuZmlsdGVyKHggPT4geCAhPT0gdGhpcy5jb21tZW50VmlldylbMF07XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgd2FpdEZvclRocmVhZFZpZXcoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMudGhyZWFkVmlldylcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMudGhyZWFkVmlldztcclxuICAgICAgICBcclxuICAgICAgICBhd2FpdCB0aGlzLnRocmVhZFZpZXdRdWVyeS5jaGFuZ2VzLnBpcGUodGFrZSgxKSkudG9Qcm9taXNlKCk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudGhyZWFkVmlldztcclxuICAgIH1cclxuXHJcbiAgICBtYXJrTG9hZGVkOiAoKSA9PiB2b2lkO1xyXG4gICAgbG9hZGVkID0gbmV3IFByb21pc2U8dm9pZD4ociA9PiB0aGlzLm1hcmtMb2FkZWQgPSByKTtcclxuXHJcbiAgICBwcml2YXRlIHVwZGF0ZUxvYWRpbmcoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgaWYgKHRoaXMuc291cmNlPy5zdGF0ZSAmJiB0aGlzLnNvdXJjZT8uc3RhdGUgIT09ICdjb25uZWN0aW5nJykge1xyXG4gICAgICAgICAgICBjbGVhckludGVydmFsKHRoaXMuX2xvYWRpbmdUaW1lcik7XHJcbiAgICAgICAgICAgIHRoaXMubG9hZGluZ01lc3NhZ2UgPSBgSGVyZSB3ZSBnbyFgO1xyXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5tYXJrTG9hZGVkKCk7XHJcbiAgICAgICAgICAgIH0sIDc1MCk7XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IG1lc3NhZ2VTd2l0Y2hUaW1lID0gNSoxMDAwO1xyXG4gICAgICAgIGlmICh0aGlzLm1lc3NhZ2VDaGFuZ2VkQXQgKyBtZXNzYWdlU3dpdGNoVGltZSA8IERhdGUubm93KCkpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMubG9hZGluZ01lc3NhZ2VzW3RoaXMuX2xvYWRpbmdNZXNzYWdlSW5kZXhdKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvYWRpbmdNZXNzYWdlID0gdGhpcy5sb2FkaW5nTWVzc2FnZXNbdGhpcy5fbG9hZGluZ01lc3NhZ2VJbmRleCsrXTtcclxuICAgICAgICAgICAgICAgIHRoaXMubWVzc2FnZUNoYW5nZWRBdCA9IERhdGUubm93KCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBQcm9wZXJ0aWVzXHJcblxyXG4gICAgcHJpdmF0ZSBfc2lnbkluU2VsZWN0ZWQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xyXG4gICAgcHJpdmF0ZSBfcGVybWlzc2lvbkRlbmllZEVycm9yID0gbmV3IFN1YmplY3Q8c3RyaW5nPigpO1xyXG4gICAgcHJpdmF0ZSBfZWRpdEF2YXRhclNlbGVjdGVkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcclxuICAgIHByaXZhdGUgX3Vwdm90ZWQgPSBuZXcgU3ViamVjdDxDaGF0TWVzc2FnZT4oKTtcclxuICAgIHByaXZhdGUgX3JlcG9ydGVkID0gbmV3IFN1YmplY3Q8Q2hhdE1lc3NhZ2U+KCk7XHJcbiAgICBwcml2YXRlIF9zZWxlY3RlZCA9IG5ldyBTdWJqZWN0PENoYXRNZXNzYWdlPigpO1xyXG4gICAgcHJpdmF0ZSBfdXNlclNlbGVjdGVkID0gbmV3IFN1YmplY3Q8Q2hhdE1lc3NhZ2U+KCk7XHJcbiAgICBwcml2YXRlIF9zaGFyZWQgPSBuZXcgU3ViamVjdDxDaGF0TWVzc2FnZT4oKTtcclxuICAgIHByaXZhdGUgX3VzZXJuYW1lU2VsZWN0ZWQgPSBuZXcgU3ViamVjdDxVc2VyPigpO1xyXG4gICAgcHJpdmF0ZSBfYXZhdGFyU2VsZWN0ZWQgPSBuZXcgU3ViamVjdDxVc2VyPigpO1xyXG4gICAgcHJpdmF0ZSBfc291cmNlOiBDaGF0U291cmNlQmFzZTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRyYWNrIHdoZXRoZXIgd2UgY3JlYXRlZCB0aGlzIHNvdXJjZS4gSWYgd2UgZGlkIG5vdCAoaWUgaXQgd2FzIHBhc3NlZCBpbiBmcm9tIHRoZSBjYWxsZXIpLFxyXG4gICAgICogdGhlbiB3ZSBhcmUgbm90IHJlc3BvbnNpYmxlIGZvciBjYWxsaW5nIGNsb3NlKCkuIElmIHdlIGRvIG93biBpdCB0aG91Z2gsIHdlIHdpbGwgY2FsbCBjbG9zZSgpIFxyXG4gICAgICogd2hlbiB3ZSBhcmUgZG9uZSB3aXRoIGl0LlxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIF9zb3VyY2VJc093bmVkID0gZmFsc2U7XHJcbiAgICBwcml2YXRlIF9zdWJzID0gbmV3IFN1YnNjcmlwdGlvbigpO1xyXG4gICAgcHJpdmF0ZSBfc29ydE9yZGVyOiBDb21tZW50c09yZGVyID0gQ29tbWVudHNPcmRlci5ORVdFU1Q7XHJcbiAgICBwcml2YXRlIF90b3BpY0lEOiBzdHJpbmc7XHJcbiAgICBcclxuICAgIHVzZXI6IFVzZXI7XHJcbiAgICBzZWxlY3RlZE1lc3NhZ2U6IENoYXRNZXNzYWdlO1xyXG4gICAgc2VsZWN0ZWRNZXNzYWdlVGhyZWFkOiBDaGF0U291cmNlQmFzZTtcclxuICAgIHNlbGVjdGVkTWVzc2FnZVZpc2libGUgPSBmYWxzZTtcclxuXHJcbiAgICAvLyBJbnB1dHNcclxuXHJcbiAgICBASW5wdXQoKSBzaWduSW5MYWJlbCA9ICdTaWduIEluJztcclxuICAgIEBJbnB1dCgpIHNlbmRMYWJlbCA9ICdTZW5kJztcclxuICAgIEBJbnB1dCgpIHJlcGx5TGFiZWwgPSAnUmVwbHknO1xyXG4gICAgQElucHV0KCkgc2VuZGluZ0xhYmVsID0gJ1NlbmRpbmcnO1xyXG4gICAgQElucHV0KCkgcGVybWlzc2lvbkRlbmllZExhYmVsID0gJ1NlbmQnO1xyXG4gICAgQElucHV0KCkgcG9zdENvbW1lbnRMYWJlbCA9ICdQb3N0IGEgY29tbWVudCc7XHJcbiAgICBASW5wdXQoKSBwb3N0UmVwbHlMYWJlbCA9ICdQb3N0IGEgcmVwbHknO1xyXG4gICAgQElucHV0KCkgYWxsb3dBdHRhY2htZW50cyA9IHRydWU7XHJcbiAgICBASW5wdXQoKSBmaXhlZEhlaWdodDogYm9vbGVhbjtcclxuICAgIEBJbnB1dCgpIG1heE1lc3NhZ2VzOiBudW1iZXI7XHJcbiAgICBASW5wdXQoKSBtYXhWaXNpYmxlTWVzc2FnZXM6IG51bWJlciA9IDIwO1xyXG4gICAgQElucHV0KCkgZ2VuZXJpY0F2YXRhclVybCA9IGBodHRwczovL2dyYXZhdGFyLmNvbS9hdmF0YXIvJHtEYXRlLm5vdygpLnRvU3RyaW5nKDE2KX0/cz01MTImZD1yb2JvaGFzaGA7XHJcblxyXG4gICAgQElucHV0KCkgc2hvdWxkSW50ZXJjZXB0TWVzc2FnZVNlbmQ/OiAobWVzc2FnZTogQ2hhdE1lc3NhZ2UsIHNvdXJjZTogQ2hhdFNvdXJjZUJhc2UpID0+IGJvb2xlYW4gfCBQcm9taXNlPGJvb2xlYW4+O1xyXG4gICAgQElucHV0KCkgcGFydGljaXBhbnRzOiBVc2VyW10gPSBbXTtcclxuXHJcbiAgICBwcml2YXRlIF9zb3VyY2VTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcclxuXHJcbiAgICBASW5wdXQoKVxyXG4gICAgZ2V0IHNvdXJjZSgpOiBDaGF0U291cmNlQmFzZSB7IHJldHVybiB0aGlzLl9zb3VyY2U7IH1cclxuICAgIHNldCBzb3VyY2UodmFsdWUpIHsgXHJcbiAgICAgICAgaWYgKHRoaXMuX3NvdXJjZSAmJiB0aGlzLl9zb3VyY2VJc093bmVkKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3NvdXJjZS5jbG9zZSgpO1xyXG4gICAgICAgICAgICB0aGlzLl9zb3VyY2VTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XHJcbiAgICAgICAgICAgIHRoaXMuX3NvdXJjZSA9IG51bGw7XHJcbiAgICAgICAgICAgIHRoaXMucGFydGljaXBhbnRzID0gW107XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLl9zb3VyY2UgPSB2YWx1ZTtcclxuICAgICAgICB0aGlzLl9zb3VyY2VJc093bmVkID0gZmFsc2U7IC8vIEFzc3VtZSB3ZSBkb24ndCBvd24gdGhpcyBzb3VyY2UuXHJcbiAgICAgICAgdGhpcy5fc291cmNlU3Vic2NyaXB0aW9uID0gbmV3IFN1YnNjcmlwdGlvbigpO1xyXG4gICAgICAgIFxyXG4gICAgICAgIGlmICh2YWx1ZSkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5zaGFyZWRDb21tZW50SUQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubmF2aWdhdGVUb1NoYXJlZENvbW1lbnQodGhpcy5zaGFyZWRDb21tZW50SUQpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sYXN0U2hhcmVkQ29tbWVudElEID0gdGhpcy5zaGFyZWRDb21tZW50SUQ7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNoYXJlZENvbW1lbnRJRCA9IG51bGw7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHRoaXMuX3NvdXJjZS5tZXNzYWdlcy5mb3JFYWNoKG0gPT4gdGhpcy5hZGRQYXJ0aWNpcGFudChtKSk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLl9zb3VyY2VTdWJzY3JpcHRpb24uYWRkKHRoaXMuX3NvdXJjZS5tZXNzYWdlUmVjZWl2ZWQuc3Vic2NyaWJlKG0gPT4gdGhpcy5hZGRQYXJ0aWNpcGFudChtKSkpO1xyXG4gICAgICAgICAgICB0aGlzLl9zb3VyY2VTdWJzY3JpcHRpb24uYWRkKHRoaXMuX3NvdXJjZS5tZXNzYWdlU2VudC5zdWJzY3JpYmUobSA9PiB0aGlzLmFkZFBhcnRpY2lwYW50KG0pKSk7XHJcbiAgICAgICAgICAgIHRoaXMuX3NvdXJjZVN1YnNjcmlwdGlvbi5hZGQodGhpcy5fc291cmNlLm1lc3NhZ2VPYnNlcnZlZC5zdWJzY3JpYmUobSA9PiB0aGlzLmFkZFBhcnRpY2lwYW50KG0pKSk7XHJcbiAgICAgICAgICAgIHRoaXMuX3NvdXJjZVN1YnNjcmlwdGlvbi5hZGQoXHJcbiAgICAgICAgICAgICAgICB0aGlzLl9zb3VyY2UubWVzc2FnZVVwZGF0ZWQuc3Vic2NyaWJlKG1zZyA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coYGNvbW1lbnRzIHJlY2VpdmVkIG1lc3NhZ2U6IGAsIG1zZyk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG1zZy5pZCA9PT0gdGhpcy5zZWxlY3RlZE1lc3NhZ2U/LmlkICYmIG1zZy5oaWRkZW4pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy51bnNlbGVjdE1lc3NhZ2UoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tYXRTbmFja0Jhci5vcGVuKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJUaGUgdGhyZWFkIHlvdSB3ZXJlIHZpZXdpbmcgd2FzIHJlbW92ZWQuXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmRlZmluZWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHVyYXRpb246IDI1MDBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICk7XHJcblxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIEBJbnB1dCgpIFxyXG4gICAgaGFzaHRhZ3M6IEhhc2hUYWdbXSA9IFtcclxuICAgICAgICB7aGFzaHRhZzogJ2Vycm9yJywgZGVzY3JpcHRpb246ICdDYXVzZSBhbiBlcnJvcid9LFxyXG4gICAgICAgIHtoYXNodGFnOiAndGltZW91dCcsIGRlc2NyaXB0aW9uOiAnQ2F1c2UgYSBzbG93IHRpbWVvdXQgZXJyb3InfSxcclxuICAgICAgICB7aGFzaHRhZzogJ3Nsb3cnLCBkZXNjcmlwdGlvbjogJ0JlIHNsb3cgd2hlbiB0aGlzIG1lc3NhZ2UgaXMgcG9zdGVkJ30sXHJcbiAgICBdO1xyXG4gICAgQElucHV0KClcclxuICAgIGdldCB0b3BpY0lEKCk6IHN0cmluZyB7IHJldHVybiB0aGlzLl90b3BpY0lEOyB9XHJcbiAgICBzZXQgdG9waWNJRCh2YWx1ZSkge1xyXG4gICAgICAgIGlmICh0aGlzLl90b3BpY0lEICE9PSB2YWx1ZSkge1xyXG4gICAgICAgICAgICB0aGlzLl90b3BpY0lEID0gdmFsdWU7XHJcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5zZXRTb3VyY2VGcm9tVG9waWNJRCh2YWx1ZSkpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyBPdXRwdXRzXHJcblxyXG4gICAgQE91dHB1dCgpIGdldCBzaWduSW5TZWxlY3RlZCgpOiBPYnNlcnZhYmxlPHZvaWQ+IHsgcmV0dXJuIHRoaXMuX3NpZ25JblNlbGVjdGVkOyB9XHJcbiAgICBAT3V0cHV0KCkgZ2V0IGVkaXRBdmF0YXJTZWxlY3RlZCgpIHsgcmV0dXJuIHRoaXMuX2VkaXRBdmF0YXJTZWxlY3RlZDsgfVxyXG4gICAgQE91dHB1dCgpIGdldCBwZXJtaXNzaW9uRGVuaWVkRXJyb3IoKTogT2JzZXJ2YWJsZTxzdHJpbmc+IHsgcmV0dXJuIHRoaXMuX3Blcm1pc3Npb25EZW5pZWRFcnJvcjsgfVxyXG4gICAgQE91dHB1dCgpIGdldCB1cHZvdGVkKCkgeyByZXR1cm4gdGhpcy5fdXB2b3RlZC5hc09ic2VydmFibGUoKTsgfVxyXG4gICAgQE91dHB1dCgpIGdldCByZXBvcnRlZCgpIHsgcmV0dXJuIHRoaXMuX3JlcG9ydGVkLmFzT2JzZXJ2YWJsZSgpOyB9XHJcbiAgICBAT3V0cHV0KCkgZ2V0IHNlbGVjdGVkKCkgeyByZXR1cm4gdGhpcy5fc2VsZWN0ZWQuYXNPYnNlcnZhYmxlKCk7IH1cclxuICAgIEBPdXRwdXQoKSBnZXQgdXNlclNlbGVjdGVkKCkgeyByZXR1cm4gdGhpcy5fdXNlclNlbGVjdGVkLmFzT2JzZXJ2YWJsZSgpOyB9XHJcbiAgICBAT3V0cHV0KCkgZ2V0IHVzZXJuYW1lU2VsZWN0ZWQoKSB7IHJldHVybiB0aGlzLl91c2VybmFtZVNlbGVjdGVkLmFzT2JzZXJ2YWJsZSgpOyB9XHJcbiAgICBAT3V0cHV0KCkgZ2V0IGF2YXRhclNlbGVjdGVkKCkgeyByZXR1cm4gdGhpcy5fYXZhdGFyU2VsZWN0ZWQuYXNPYnNlcnZhYmxlKCk7IH1cclxuICAgIEBPdXRwdXQoKSBnZXQgc2hhcmVkKCkgeyByZXR1cm4gdGhpcy5fc2hhcmVkLmFzT2JzZXJ2YWJsZSgpOyB9XHJcblxyXG4gICAgZ2V0IHNvcnRPcmRlcigpIHsgcmV0dXJuIHRoaXMuX3NvcnRPcmRlcjsgfVxyXG4gICAgc2V0IHNvcnRPcmRlcih2YWx1ZSkge1xyXG4gICAgICAgIGlmICh0aGlzLl9zb3J0T3JkZXIgIT09IHZhbHVlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3NvcnRPcmRlciA9IHZhbHVlO1xyXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U291cmNlRnJvbVRvcGljSUQodGhpcy50b3BpY0lEKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHNlbmRNZXNzYWdlOiAobWVzc2FnZTogQ2hhdE1lc3NhZ2UpID0+IHZvaWQ7XHJcbiAgICBzZW5kUmVwbHk6IChtZXNzYWdlOiBDaGF0TWVzc2FnZSkgPT4gdm9pZDtcclxuXHJcbiAgICAvLyBVSSBJbnRlcmFjdGlvbnNcclxuXHJcbiAgICBhc3luYyBzY3JvbGxUb0NvbW1lbnQoY29tbWVudElkOiBDaGF0TWVzc2FnZVsnaWQnXSkge1xyXG4gICAgICAgIGlmICh0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJylcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIFxyXG4gICAgICAgIGF3YWl0IHRoaXMuY29tbWVudFZpZXcud2FpdEZvckFsbENvbW1lbnRzVG9Mb2FkKCk7XHJcblxyXG4gICAgICAgIGNvbnN0IGNvbW1lbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGBbZGF0YS1jb21tZW50LWlkPVwiJHtjb21tZW50SWR9XCJdYCk7XHJcbiAgICAgICAgaWYgKGNvbW1lbnQpIHtcclxuICAgICAgICAgICAgY29tbWVudC5zY3JvbGxJbnRvVmlldyh7XHJcbiAgICAgICAgICAgICAgICBpbmxpbmU6ICdjZW50ZXInLFxyXG4gICAgICAgICAgICAgICAgYmxvY2s6ICdjZW50ZXInXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBsb2FkaW5nU2hhcmVkQ29tbWVudCA9IGZhbHNlO1xyXG4gICAgc2hhcmVkQ29tbWVudE1pc3NpbmcgPSBmYWxzZTtcclxuXHJcbiAgICBhc3luYyBuYXZpZ2F0ZVRvU2hhcmVkQ29tbWVudChpZDogc3RyaW5nKSB7XHJcbiAgICAgICAgdGhpcy5sb2FkaW5nU2hhcmVkQ29tbWVudCA9IHRydWU7XHJcbiAgICAgICAgYXdhaXQgbmV3IFByb21pc2UociA9PiBzZXRUaW1lb3V0KHIsIDEwKSk7XHJcbiAgICAgICAgdGhpcy5zaGFyZWRDb21tZW50TWlzc2luZyA9IGZhbHNlO1xyXG4gICAgICAgIGxldCBzb3VyY2UgPSB0aGlzLnNvdXJjZTtcclxuXHJcbiAgICAgICAgYXdhaXQgc291cmNlLnJlYWR5O1xyXG4gICAgICAgIGF3YWl0IHRoaXMudmlld1JlYWR5O1xyXG4gICAgICAgIGF3YWl0IHRoaXMubG9hZGVkO1xyXG4gICAgICAgIFxyXG4gICAgICAgIGNvbnNvbGUubG9nKGBOYXZpZ2F0aW5nIHRvIHNoYXJlZCBjb21tZW50IHdpdGggSUQgJyR7aWR9Jy4uLmApO1xyXG4gICAgICAgIGxldCBtZXNzYWdlOiBDaGF0TWVzc2FnZTtcclxuICAgICAgICBcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBtZXNzYWdlID0gYXdhaXQgdGhpcy5zb3VyY2UuZ2V0KGlkKTtcclxuICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYEZhaWxlZCB0byBmaW5kIGNvbW1lbnQgZnJvbSBVUkw6ICR7ZS5tZXNzYWdlfWApO1xyXG4gICAgICAgICAgICB0aGlzLnNoYXJlZENvbW1lbnRNaXNzaW5nID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5sb2FkaW5nU2hhcmVkQ29tbWVudCA9IGZhbHNlO1xyXG5cclxuICAgICAgICAgICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgbm90aWNlID0gdGhpcy5lbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJy5sb2FkaW5nLWNvbW1lbnQnKTtcclxuICAgICAgICAgICAgICAgICAgICBub3RpY2Uuc2Nyb2xsSW50b1ZpZXcoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBibG9jazogJ2NlbnRlcicsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlubGluZTogJ2NlbnRlcidcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH0sIDIwMCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbWVzc2FnZS50cmFuc2llbnRTdGF0ZSA/Pz0ge307XHJcblxyXG4gICAgICAgIC8vIElmIHRoZXJlIGlzIGEgcGFyZW50IG1lc3NhZ2UsIHdlIHNob3VsZCBpbnN0ZWFkIGZvY3VzIHRoYXQgYW5kIGxldCB0aGUgXHJcbiAgICAgICAgLy8gc2Nyb2xsVG9Db21tZW50IGFuZCBoaWdobGlnaHQgZG8gdGhlIHdvcmsuXHJcblxyXG4gICAgICAgIGlmIChtZXNzYWdlLnBhcmVudE1lc3NhZ2VJZCkge1xyXG5cclxuICAgICAgICAgICAgbGV0IHBhcmVudE1lc3NhZ2UgPSBhd2FpdCB0aGlzLnNvdXJjZS5nZXQobWVzc2FnZS5wYXJlbnRNZXNzYWdlSWQpO1xyXG4gICAgICAgICAgICBwYXJlbnRNZXNzYWdlLnRyYW5zaWVudFN0YXRlID8/PSB7fTtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIC8vIE1ha2Ugc3VyZSB0aGF0IHRoaXMgbWVzc2FnZSBpcyBsb2FkZWQgYW5kIHZpc2libGUgdG8gdGhlIHVzZXJcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5jb21tZW50Vmlldy5sb2FkTWVzc2FnZUluQ29udGV4dChwYXJlbnRNZXNzYWdlKTtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGxldCB0aHJlYWQgPSBhd2FpdCB0aGlzLnNlbGVjdE1lc3NhZ2UocGFyZW50TWVzc2FnZSk7IFxyXG5cclxuICAgICAgICAgICAgLy8gTmVlZCB0byByZS1yZXRyaWV2ZSB0aGUgbWVzc2FnZSB3aXRoaW4gdGhlIG5ldyBjaGF0IHNvdXJjZSB0byBhZmZlY3QgaXRzXHJcbiAgICAgICAgICAgIC8vIHRyYW5zaWVudCBzdGF0ZS5cclxuICAgICAgICAgICAgYXdhaXQgdGhyZWFkLnJlYWR5O1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgLy8gTWFrZSBzdXJlIHRoYXQgdGhpcyBtZXNzYWdlIGlzIGxvYWRlZCBhbmQgdmlzaWJsZSB0byB0aGUgdXNlclxyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLndhaXRGb3JUaHJlYWRWaWV3KCk7XHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMudGhyZWFkVmlldy5sb2FkTWVzc2FnZUluQ29udGV4dChtZXNzYWdlKTtcclxuXHJcbiAgICAgICAgICAgIG1lc3NhZ2UgPSBhd2FpdCB0aHJlYWQuZ2V0KG1lc3NhZ2UuaWQpO1xyXG4gICAgICAgICAgICBtZXNzYWdlLnRyYW5zaWVudFN0YXRlID8/PSB7fTtcclxuICAgICAgICAgICAgbWVzc2FnZS50cmFuc2llbnRTdGF0ZS5oaWdobGlnaHRlZCA9IHRydWU7XHJcbiAgICAgICAgICAgIGNvbnNvbGUuZGlyKG1lc3NhZ2UpO1xyXG4gICAgICAgICAgICBhd2FpdCBuZXcgUHJvbWlzZTx2b2lkPihyZXNvbHZlID0+IHNldFRpbWVvdXQoKCkgPT4gcmVzb2x2ZSgpLCA1MDApKTtcclxuXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgLy8gTWFrZSBzdXJlIHRoYXQgdGhpcyBtZXNzYWdlIGlzIGxvYWRlZCBhbmQgdmlzaWJsZSB0byB0aGUgdXNlclxyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLmNvbW1lbnRWaWV3LmxvYWRNZXNzYWdlSW5Db250ZXh0KG1lc3NhZ2UpO1xyXG5cclxuICAgICAgICAgICAgbWVzc2FnZS50cmFuc2llbnRTdGF0ZSA/Pz0ge307XHJcbiAgICAgICAgICAgIG1lc3NhZ2UudHJhbnNpZW50U3RhdGUuaGlnaGxpZ2h0ZWQgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5sb2FkaW5nU2hhcmVkQ29tbWVudCA9IGZhbHNlO1xyXG4gICAgICAgIGF3YWl0IHRoaXMuc2Nyb2xsVG9Db21tZW50KGlkKTtcclxuICAgIH1cclxuXHJcbiAgICBoYW5kbGVQZXJtaXNzaW9uRGVuaWVkKGVycm9yTWVzc2FnZTogc3RyaW5nKSB7XHJcbiAgICAgICAgLy8gVGhpcyBpcyB3aGF0IG90aGVyIGNvbXBvbmVudHMgY2FsbCB3aGVuIGhhbmRsaW5nIHBlcm1pc3Npb24gZXJyb3JzXHJcbiAgICAgICAgXHJcbiAgICAgICAgaWYgKGVycm9yTWVzc2FnZS5zdGFydHNXaXRoKGBhcHAtaGFuZGxlfGApKSB7XHJcbiAgICAgICAgICAgIC8vIElmIHRoaXMgaXMgYW4gZXJyb3IgZHVyaW5nIGF1dGhvcml6ZUFjdGlvbiBvbiB0aGUgYmFja2VuZCwgcGFzcyBjb250cm9sIHRvIHRoZSB1c2VyLXByb3ZpZGVkIFxyXG4gICAgICAgICAgICAvLyBwZXJtaXNzaW9uLWRlbmllZCBoYW5kbGVyLlxyXG5cclxuICAgICAgICAgICAgdGhpcy5zZW5kUGVybWlzc2lvbkRlbmllZChlcnJvck1lc3NhZ2UucmVwbGFjZSgvXmFwcC1oYW5kbGVcXHwvLCAnJykpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBhbGVydChlcnJvck1lc3NhZ2UpO1xyXG4gICAgfVxyXG5cclxuICAgIHNlbmRQZXJtaXNzaW9uRGVuaWVkKG1lc3NhZ2U6IHN0cmluZykge1xyXG4gICAgICAgIHRoaXMuX3Blcm1pc3Npb25EZW5pZWRFcnJvci5uZXh0KG1lc3NhZ2UpO1xyXG4gICAgfVxyXG5cclxuICAgIHNjcm9sbFRvTWVzc2FnZShtZXNzYWdlOiBDaGF0TWVzc2FnZSkge1xyXG4gICAgICAgIGxldCBlbCA9IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoYFtkYXRhLWNvbW1lbnQtaWQ9XCIke21lc3NhZ2UuaWR9XCJdYCk7XHJcbiAgICAgICAgaWYgKCFlbClcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIGVsLnNjcm9sbEludG9WaWV3KHtibG9jazogJ2NlbnRlcicsIGlubGluZTogJ3N0YXJ0J30pO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgYWRkUGFydGljaXBhbnQobWVzc2FnZTogQ2hhdE1lc3NhZ2UpIHtcclxuICAgICAgICBpZiAoIW1lc3NhZ2UgfHwgIW1lc3NhZ2UudXNlciB8fCAhbWVzc2FnZS51c2VyLmlkKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcblxyXG4gICAgICAgIGxldCBleGlzdGluZyA9IHRoaXMucGFydGljaXBhbnRzLmZpbmQoeCA9PiB4LmlkID09PSBtZXNzYWdlLnVzZXIuaWQpO1xyXG4gICAgICAgIGlmIChleGlzdGluZylcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMucGFydGljaXBhbnRzLnB1c2gobWVzc2FnZS51c2VyKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBBY3Rpb25zXHJcblxyXG4gICAgYXN5bmMgbGlrZU1lc3NhZ2Uoc291cmNlOiBDaGF0U291cmNlQmFzZSwgbWVzc2FnZTogQ2hhdE1lc3NhZ2UpIHtcclxuICAgICAgICBpZiAoIXRoaXMudXNlcikge1xyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLnNob3dTaWduSW4oKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5fdXB2b3RlZC5uZXh0KG1lc3NhZ2UpO1xyXG4gICAgICAgIG1lc3NhZ2UudHJhbnNpZW50U3RhdGUubGlraW5nID0gdHJ1ZTtcclxuICAgICAgICBcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBhd2FpdCBzb3VyY2UubGlrZU1lc3NhZ2UobWVzc2FnZS5pZCk7XHJcbiAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICB0aGlzLmhhbmRsZUJhY2tlbmRFeGNlcHRpb25Bc0FsZXJ0KGUsICdDb3VsZCBub3QgbGlrZSB0aGlzIG1lc3NhZ2U6ICcpO1xyXG4gICAgICAgIH0gZmluYWxseSB7XHJcbiAgICAgICAgICAgIGF3YWl0IG5ldyBQcm9taXNlPHZvaWQ+KHJlc29sdmUgPT4gc2V0VGltZW91dCgoKSA9PiByZXNvbHZlKCksIDI1MCkpO1xyXG4gICAgICAgICAgICBtZXNzYWdlLnRyYW5zaWVudFN0YXRlLmxpa2luZyA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBhc3luYyB1bmxpa2VNZXNzYWdlKHNvdXJjZTogQ2hhdFNvdXJjZUJhc2UsIG1lc3NhZ2U6IENoYXRNZXNzYWdlKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnVzZXIpIHtcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5zaG93U2lnbkluKCk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuX3Vwdm90ZWQubmV4dChtZXNzYWdlKTtcclxuICAgICAgICBtZXNzYWdlLnRyYW5zaWVudFN0YXRlLmxpa2luZyA9IHRydWU7XHJcblxyXG4gICAgICAgIGlmIChtZXNzYWdlLnVzZXJTdGF0ZT8ubGlrZWQpXHJcbiAgICAgICAgICAgIG1lc3NhZ2UubGlrZXMgPSAobWVzc2FnZS5saWtlcyB8fCAwKSAtIDE7XHJcblxyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGF3YWl0IHNvdXJjZS51bmxpa2VNZXNzYWdlKG1lc3NhZ2UuaWQpO1xyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgdGhpcy5oYW5kbGVCYWNrZW5kRXhjZXB0aW9uQXNBbGVydChlLCAnRmFpbGVkIHRvIHVubGlrZSB0aGlzIG1lc3NhZ2U6ICcpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgYXdhaXQgbmV3IFByb21pc2U8dm9pZD4ocmVzb2x2ZSA9PiBzZXRUaW1lb3V0KCgpID0+IHJlc29sdmUoKSwgMjUwKSk7XHJcbiAgICAgICAgbWVzc2FnZS50cmFuc2llbnRTdGF0ZS5saWtpbmcgPSBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyByZXBvcnRNZXNzYWdlKG1lc3NhZ2U6IENoYXRNZXNzYWdlKSB7XHJcbiAgICAgICAgdGhpcy5fcmVwb3J0ZWQubmV4dChtZXNzYWdlKTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyB1bnNlbGVjdE1lc3NhZ2UoKSB7XHJcbiAgICAgICAgbGV0IG1lc3NhZ2UgPSB0aGlzLnNlbGVjdGVkTWVzc2FnZTtcclxuXHJcbiAgICAgICAgdGhpcy5fc2VsZWN0ZWQubmV4dChudWxsKTtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkTWVzc2FnZSA9IG51bGw7XHJcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRNZXNzYWdlVGhyZWFkKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGVkTWVzc2FnZVRocmVhZC5jbG9zZSlcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRNZXNzYWdlVGhyZWFkLmNsb3NlKCk7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRNZXNzYWdlVGhyZWFkID0gbnVsbDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChtZXNzYWdlKVxyXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMuc2Nyb2xsVG9NZXNzYWdlKG1lc3NhZ2UpKTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyB0b2dnbGVTZWxlY3RlZE1lc3NhZ2UobWVzc2FnZTogQ2hhdE1lc3NhZ2UpIHtcclxuICAgICAgICBpZiAodGhpcy5zZWxlY3RlZE1lc3NhZ2UgPT09IG1lc3NhZ2UpIHtcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy51bnNlbGVjdE1lc3NhZ2UoKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLnNlbGVjdE1lc3NhZ2UobWVzc2FnZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIHNlbGVjdE1lc3NhZ2UobWVzc2FnZTogQ2hhdE1lc3NhZ2UpIHtcclxuICAgICAgICBpZiAodGhpcy5zZWxlY3RlZE1lc3NhZ2UgPT09IG1lc3NhZ2UpIHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coYFtCYW50YV0gVGhyZWFkICR7dGhpcy50b3BpY0lEfS8ke21lc3NhZ2UuaWR9IGlzIGFscmVhZHkgb3Blbi5gKTtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRNZXNzYWdlVGhyZWFkO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5fc2VsZWN0ZWQubmV4dChtZXNzYWdlKTtcclxuXHJcbiAgICAgICAgY29uc29sZS5sb2coYFtCYW50YV0gT3BlbmluZyB0aHJlYWQgZm9yICR7dGhpcy50b3BpY0lEfS8ke21lc3NhZ2UuaWR9Li4uYCk7XHJcbiAgICAgICAgbGV0IHNlbGVjdGVkTWVzc2FnZVRocmVhZCA9IGF3YWl0IHRoaXMuYmFja2VuZC5nZXRTb3VyY2VGb3JUaHJlYWQodGhpcy50b3BpY0lELCBtZXNzYWdlLmlkKTtcclxuXHJcbiAgICAgICAgaWYgKCFzZWxlY3RlZE1lc3NhZ2VUaHJlYWQpIHtcclxuICAgICAgICAgICAgY29uc29sZS53YXJuKGBGYWlsZWQgdG8gbG9jYXRlIHRocmVhZCBmb3IgbWVzc2FnZSAke3RoaXMudG9waWNJRH0vJHttZXNzYWdlLmlkfSFgKTtcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zb2xlLmxvZyhgW0JhbnRhXSBUaHJlYWQgb3BlbmVkIGZvciAke3RoaXMudG9waWNJRH0vJHttZXNzYWdlLmlkfS5gKTtcclxuXHJcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLnNlbGVjdGVkTWVzc2FnZVZpc2libGUgPSB0cnVlKTtcclxuICAgICAgICBzZXRUaW1lb3V0KGFzeW5jICgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE1lc3NhZ2UgPSBtZXNzYWdlO1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkTWVzc2FnZVRocmVhZCA9IHNlbGVjdGVkTWVzc2FnZVRocmVhZDtcclxuICAgICAgICB9LCAyNTApO1xyXG5cclxuICAgICAgICByZXR1cm4gc2VsZWN0ZWRNZXNzYWdlVGhyZWFkO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIHNob3dTaWduSW4oKSB7XHJcbiAgICAgICAgdGhpcy5fc2lnbkluU2VsZWN0ZWQubmV4dCgpO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIHNob3dFZGl0QXZhdGFyKCkge1xyXG4gICAgICAgIHRoaXMuX2VkaXRBdmF0YXJTZWxlY3RlZC5uZXh0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgc2VsZWN0TWVzc2FnZVVzZXIobWVzc2FnZTogQ2hhdE1lc3NhZ2UpIHtcclxuICAgICAgICB0aGlzLl91c2VyU2VsZWN0ZWQubmV4dChtZXNzYWdlKTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBzZWxlY3RVc2VybmFtZSh1c2VyOiBVc2VyKSB7XHJcbiAgICAgICAgdGhpcy5fdXNlcm5hbWVTZWxlY3RlZC5uZXh0KHVzZXIpO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIHNlbGVjdEF2YXRhcih1c2VyOiBVc2VyKSB7XHJcbiAgICAgICAgdGhpcy5fYXZhdGFyU2VsZWN0ZWQubmV4dCh1c2VyKTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBzaGFyZU1lc3NhZ2UobWVzc2FnZTogQ2hhdE1lc3NhZ2UpIHtcclxuICAgICAgICB0aGlzLl9zaGFyZWQubmV4dChtZXNzYWdlKTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBkZWxldGVNZXNzYWdlKG1lc3NhZ2U6IENoYXRNZXNzYWdlKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnVzZXIpIHtcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5zaG93U2lnbkluKCk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghY29uZmlybShcIkFyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBkZWxldGUgdGhpcyBjb21tZW50PyBZb3UgY2Fubm90IHVuZG8gdGhpcyBhY3Rpb24uXCIpKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcblxyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuc291cmNlLmRlbGV0ZU1lc3NhZ2UobWVzc2FnZS5pZCk7XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5zZWxlY3RlZE1lc3NhZ2U/LmlkID09PSBtZXNzYWdlLmlkKVxyXG4gICAgICAgICAgICAgICAgdGhpcy51bnNlbGVjdE1lc3NhZ2UoKTtcclxuXHJcbiAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICB0aGlzLmhhbmRsZUJhY2tlbmRFeGNlcHRpb25Bc0FsZXJ0KGUsIGBDb3VsZCBub3QgZGVsZXRlIG1lc3NhZ2U6IGApO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBlZGl0TWVzc2FnZShzb3VyY2U6IENoYXRTb3VyY2VCYXNlLCBtZXNzYWdlOiBDaGF0TWVzc2FnZSwgbmV3VGV4dDogc3RyaW5nKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnVzZXIpIHtcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5zaG93U2lnbkluKCk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGF3YWl0IHNvdXJjZS5lZGl0TWVzc2FnZShtZXNzYWdlLmlkLCBuZXdUZXh0KTtcclxuICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlQmFja2VuZEV4Y2VwdGlvbkFzQWxlcnQoZSwgJ0NvdWxkIG5vdCBlZGl0IHRoaXMgbWVzc2FnZTogJyk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIG1lc3NhZ2UubWVzc2FnZSA9IG5ld1RleHQ7XHJcbiAgICAgICAgbWVzc2FnZS50cmFuc2llbnRTdGF0ZS5lZGl0aW5nID0gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgc3RhcnRFZGl0aW5nKG1lc3NhZ2U6IENoYXRNZXNzYWdlKSB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZE1lc3NhZ2UudHJhbnNpZW50U3RhdGUuZWRpdGluZyA9IGZhbHNlO1xyXG4gICAgICAgIG1lc3NhZ2UudHJhbnNpZW50U3RhdGUuZWRpdGluZyA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgc2F2ZUVkaXQobWVzc2FnZTogQ2hhdE1lc3NhZ2UsIHRleHQ6IHN0cmluZykge1xyXG4gICAgICAgIGlmICghdGhpcy51c2VyKSB7XHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuc2hvd1NpZ25JbigpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuc291cmNlLmVkaXRNZXNzYWdlKG1lc3NhZ2UuaWQsIHRleHQpO1xyXG4gICAgICAgICAgICBtZXNzYWdlLnRyYW5zaWVudFN0YXRlLmVkaXRpbmcgPSBmYWxzZTtcclxuICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlQmFja2VuZEV4Y2VwdGlvbkFzQWxlcnQoZSwgYENvdWxkIG5vdCBlZGl0IG1lc3NhZ2U6IGApO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG4iLCI8bmctY29udGFpbmVyICpuZ0lmPVwibG9hZGluZ1wiPlxyXG4gICAgPGRpdiBjbGFzcz1cImxvYWRpbmctc2NyZWVuXCIgW2NsYXNzLnZpc2libGVdPVwic2hvd0xvYWRpbmdTY3JlZW5cIj5cclxuICAgICAgICA8aDE+TG9hZGluZy4uLjwvaDE+XHJcbiAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgPG1hdC1zcGlubmVyIFtkaWFtZXRlcl09XCIzMDBcIiBbc3Ryb2tlV2lkdGhdPVwiMlwiPjwvbWF0LXNwaW5uZXI+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDxwIGNsYXNzPVwibG9hZGluZy1tZXNzYWdlXCIgW2NsYXNzLnZpc2libGVdPVwibG9hZGluZ01lc3NhZ2VWaXNpYmxlXCI+e3tsb2FkaW5nTWVzc2FnZX19PC9wPlxyXG4gICAgPC9kaXY+XHJcbjwvbmctY29udGFpbmVyPlxyXG48bmctY29udGFpbmVyICpuZ0lmPVwiIWxvYWRpbmdcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJmb2N1c2VkXCIgW2NsYXNzLnZpc2libGVdPVwic2VsZWN0ZWRNZXNzYWdlVmlzaWJsZVwiICpuZ0lmPVwic2VsZWN0ZWRNZXNzYWdlICYmICF1c2VJbmxpbmVSZXBsaWVzXCI+XHJcblxyXG4gICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgIDxhIG1hdC1idXR0b24gaHJlZj1cImphdmFzY3JpcHQ6O1wiIChjbGljayk9XCJ1bnNlbGVjdE1lc3NhZ2UoKVwiPlxyXG4gICAgICAgICAgICAgICAgPG1hdC1pY29uPmFycm93X2JhY2s8L21hdC1pY29uPlxyXG4gICAgICAgICAgICAgICAgTGF0ZXN0IENvbW1lbnRzXHJcbiAgICAgICAgICAgIDwvYT5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPGJhbnRhLWNvbW1lbnRcclxuICAgICAgICAgICAgW21lc3NhZ2VdPVwic2VsZWN0ZWRNZXNzYWdlXCJcclxuICAgICAgICAgICAgW2xpa2luZ109XCJzZWxlY3RlZE1lc3NhZ2UudHJhbnNpZW50U3RhdGUubGlraW5nXCJcclxuICAgICAgICAgICAgW21pbmVdPVwidXNlcj8uaWQgPT09IHNlbGVjdGVkTWVzc2FnZS51c2VyPy5pZFwiXHJcbiAgICAgICAgICAgIFtwZXJtaXNzaW9uc109XCJzb3VyY2U/LnBlcm1pc3Npb25zXCJcclxuICAgICAgICAgICAgW3Nob3dSZXBseUFjdGlvbl09XCJmYWxzZVwiXHJcbiAgICAgICAgICAgIFtlZGl0aW5nXT1cInNlbGVjdGVkTWVzc2FnZS50cmFuc2llbnRTdGF0ZS5lZGl0aW5nXCJcclxuICAgICAgICAgICAgW21heExlbmd0aF09XCJtYXhDb21tZW50TGVuZ3RoXCJcclxuICAgICAgICAgICAgW2dlbmVyaWNBdmF0YXJVcmxdPVwiZ2VuZXJpY0F2YXRhclVybFwiXHJcbiAgICAgICAgICAgIChlZGl0U3RhcnRlZCk9XCJzdGFydEVkaXRpbmcoc2VsZWN0ZWRNZXNzYWdlKVwiXHJcbiAgICAgICAgICAgIChlZGl0RW5kZWQpPVwic2VsZWN0ZWRNZXNzYWdlLnRyYW5zaWVudFN0YXRlLmVkaXRpbmcgPSBmYWxzZVwiXHJcbiAgICAgICAgICAgIChlZGl0ZWQpPVwic2F2ZUVkaXQoc2VsZWN0ZWRNZXNzYWdlLCAkZXZlbnQpXCJcclxuICAgICAgICAgICAgKHVzZXJTZWxlY3RlZCk9XCJzZWxlY3RNZXNzYWdlVXNlcihzZWxlY3RlZE1lc3NhZ2UpXCJcclxuICAgICAgICAgICAgKGF2YXRhclNlbGVjdGVkKT1cInNlbGVjdEF2YXRhcigkZXZlbnQpXCJcclxuICAgICAgICAgICAgKHVzZXJuYW1lU2VsZWN0ZWQpPVwic2VsZWN0VXNlcm5hbWUoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgIChsaWtlZCk9XCJsaWtlTWVzc2FnZShzb3VyY2UsIHNlbGVjdGVkTWVzc2FnZSlcIlxyXG4gICAgICAgICAgICAodW5saWtlZCk9XCJ1bmxpa2VNZXNzYWdlKHNvdXJjZSwgc2VsZWN0ZWRNZXNzYWdlKVwiXHJcbiAgICAgICAgICAgIChyZXBvcnRlZCk9XCJyZXBvcnRNZXNzYWdlKHNlbGVjdGVkTWVzc2FnZSlcIlxyXG4gICAgICAgICAgICAoc2VsZWN0ZWQpPVwidG9nZ2xlU2VsZWN0ZWRNZXNzYWdlKHNlbGVjdGVkTWVzc2FnZSlcIlxyXG4gICAgICAgICAgICAoc2hhcmVkKT1cInNoYXJlTWVzc2FnZSgkZXZlbnQpXCJcclxuICAgICAgICAgICAgKGRlbGV0ZWQpPVwiZGVsZXRlTWVzc2FnZShzZWxlY3RlZE1lc3NhZ2UpXCJcclxuICAgICAgICAgICAgPjwvYmFudGEtY29tbWVudD5cclxuXHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInJlcGxpZXNcIj5cclxuXHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhc2VsZWN0ZWRNZXNzYWdlVGhyZWFkXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibG9hZGluZ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxtYXQtc3Bpbm5lcj48L21hdC1zcGlubmVyPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNlbGVjdGVkTWVzc2FnZVRocmVhZFwiPlxyXG4gICAgICAgICAgICAgICAgPGJhbnRhLWNvbW1lbnQtdmlld1xyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwicmVwbGllc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgI3RocmVhZFZpZXdcclxuICAgICAgICAgICAgICAgICAgICBbc291cmNlXT1cInNlbGVjdGVkTWVzc2FnZVRocmVhZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2FsbG93UmVwbGllc109XCJmYWxzZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2ZpeGVkSGVpZ2h0XT1cImZhbHNlXCJcclxuICAgICAgICAgICAgICAgICAgICBbc2hvd0VtcHR5U3RhdGVdPVwiZmFsc2VcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtuZXdlc3RMYXN0XT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtnZW5lcmljQXZhdGFyVXJsXT1cImdlbmVyaWNBdmF0YXJVcmxcIlxyXG4gICAgICAgICAgICAgICAgICAgIChsaWtlZCk9XCJsaWtlTWVzc2FnZShzZWxlY3RlZE1lc3NhZ2VUaHJlYWQsICRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICh1bmxpa2VkKT1cInVubGlrZU1lc3NhZ2Uoc2VsZWN0ZWRNZXNzYWdlVGhyZWFkLCAkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAobWVzc2FnZUVkaXRlZCk9XCJlZGl0TWVzc2FnZShzZWxlY3RlZE1lc3NhZ2VUaHJlYWQsICRldmVudC5tZXNzYWdlLCAkZXZlbnQubmV3TWVzc2FnZSlcIlxyXG4gICAgICAgICAgICAgICAgICAgIChyZXBvcnRlZCk9XCJyZXBvcnRNZXNzYWdlKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICh1c2VybmFtZVNlbGVjdGVkKT1cInNlbGVjdFVzZXJuYW1lKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgIChhdmF0YXJTZWxlY3RlZCk9XCJzZWxlY3RBdmF0YXIoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgKHNoYXJlZCk9XCJzaGFyZU1lc3NhZ2UoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgKGRlbGV0ZWQpPVwiZGVsZXRlTWVzc2FnZSgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICBbY3VzdG9tTWVudUl0ZW1zXT1cImN1c3RvbU1lbnVJdGVtc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgPjwvYmFudGEtY29tbWVudC12aWV3PlxyXG5cclxuICAgICAgICAgICAgICAgIDxiYW50YS1jb21tZW50LWZpZWxkXHJcbiAgICAgICAgICAgICAgICAgICAgW3NlbmRMYWJlbF09XCJyZXBseUxhYmVsXCJcclxuICAgICAgICAgICAgICAgICAgICBbc2VuZGluZ0xhYmVsXT1cInNlbmRpbmdMYWJlbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2hhc2h0YWdzXT1cImhhc2h0YWdzXCJcclxuICAgICAgICAgICAgICAgICAgICBbcGFydGljaXBhbnRzXT1cInBhcnRpY2lwYW50c1wiXHJcbiAgICAgICAgICAgICAgICAgICAgKHNpZ25JblNlbGVjdGVkKT1cInNob3dTaWduSW4oKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgKGVkaXRBdmF0YXJTZWxlY3RlZCk9XCJzaG93RWRpdEF2YXRhcigpXCJcclxuICAgICAgICAgICAgICAgICAgICBbc291cmNlXT1cInNlbGVjdGVkTWVzc2FnZVRocmVhZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgW21heExlbmd0aF09XCJtYXhDb21tZW50TGVuZ3RoXCJcclxuICAgICAgICAgICAgICAgICAgICBbY2FuQ29tbWVudF09XCJzb3VyY2U/LnBlcm1pc3Npb25zPy5jYW5Qb3N0XCJcclxuICAgICAgICAgICAgICAgICAgICBbc2lnbkluTGFiZWxdPVwic2lnbkluTGFiZWxcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtwZXJtaXNzaW9uRGVuaWVkTGFiZWxdPVwic291cmNlPy5wZXJtaXNzaW9ucz8uY2FuUG9zdEVycm9yTWVzc2FnZSB8fCBwZXJtaXNzaW9uRGVuaWVkTGFiZWxcIlxyXG4gICAgICAgICAgICAgICAgICAgIChwZXJtaXNzaW9uRGVuaWVkRXJyb3IpPVwiaGFuZGxlUGVybWlzc2lvbkRlbmllZCgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICBbc2hvdWxkSW50ZXJjZXB0TWVzc2FnZVNlbmRdPVwic2hvdWxkSW50ZXJjZXB0TWVzc2FnZVNlbmRcIlxyXG4gICAgICAgICAgICAgICAgICAgIFt1c2VyXT1cInVzZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCJwb3N0UmVwbHlMYWJlbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgW3N1Ym1pdF09XCJzZW5kUmVwbHlcIlxyXG4gICAgICAgICAgICAgICAgICAgIFthbGxvd0F0dGFjaG1lbnRzXT1cImFsbG93QXR0YWNobWVudHNcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtnZW5lcmljQXZhdGFyVXJsXT1cImdlbmVyaWNBdmF0YXJVcmxcIlxyXG4gICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwic2VuZFJlcGx5T3B0aW9uc1RlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICA8L2JhbnRhLWNvbW1lbnQtZmllbGQ+XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPGRpdiBjbGFzcz1cIm1haW5cIiBbY2xhc3MuaGlkZGVuXT1cInNlbGVjdGVkTWVzc2FnZSAmJiAhdXNlSW5saW5lUmVwbGllc1wiPlxyXG4gICAgICAgIDxiYW50YS1jb21tZW50LWZpZWxkXHJcbiAgICAgICAgICAgIFtzb3VyY2VdPVwic291cmNlXCJcclxuICAgICAgICAgICAgW3VzZXJdPVwidXNlclwiXHJcbiAgICAgICAgICAgIFtzZW5kTGFiZWxdPVwic2VuZExhYmVsXCJcclxuICAgICAgICAgICAgW3NlbmRpbmdMYWJlbF09XCJzZW5kaW5nTGFiZWxcIlxyXG4gICAgICAgICAgICBbc2lnbkluTGFiZWxdPVwic2lnbkluTGFiZWxcIlxyXG4gICAgICAgICAgICBbY2FuQ29tbWVudF09XCJzb3VyY2U/LnBlcm1pc3Npb25zPy5jYW5Qb3N0XCJcclxuICAgICAgICAgICAgW2hhc2h0YWdzXT1cImhhc2h0YWdzXCJcclxuICAgICAgICAgICAgW3BhcnRpY2lwYW50c109XCJwYXJ0aWNpcGFudHNcIlxyXG4gICAgICAgICAgICBbbGFiZWxdPVwicG9zdENvbW1lbnRMYWJlbFwiXHJcbiAgICAgICAgICAgIFttYXhMZW5ndGhdPVwibWF4Q29tbWVudExlbmd0aFwiXHJcbiAgICAgICAgICAgIChlZGl0QXZhdGFyU2VsZWN0ZWQpPVwic2hvd0VkaXRBdmF0YXIoKVwiXHJcbiAgICAgICAgICAgIChzaWduSW5TZWxlY3RlZCk9XCJzaG93U2lnbkluKClcIlxyXG4gICAgICAgICAgICBbcGVybWlzc2lvbkRlbmllZExhYmVsXT1cInNvdXJjZT8ucGVybWlzc2lvbnM/LmNhblBvc3RFcnJvck1lc3NhZ2UgfHwgcGVybWlzc2lvbkRlbmllZExhYmVsXCJcclxuICAgICAgICAgICAgKHBlcm1pc3Npb25EZW5pZWRFcnJvcik9XCJoYW5kbGVQZXJtaXNzaW9uRGVuaWVkKCRldmVudClcIlxyXG4gICAgICAgICAgICBbc2hvdWxkSW50ZXJjZXB0TWVzc2FnZVNlbmRdPVwic2hvdWxkSW50ZXJjZXB0TWVzc2FnZVNlbmRcIlxyXG4gICAgICAgICAgICBbc3VibWl0XT1cInNlbmRNZXNzYWdlXCJcclxuICAgICAgICAgICAgW2FsbG93QXR0YWNobWVudHNdPVwiYWxsb3dBdHRhY2htZW50c1wiXHJcbiAgICAgICAgICAgIFtnZW5lcmljQXZhdGFyVXJsXT1cImdlbmVyaWNBdmF0YXJVcmxcIlxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgXHJcbiAgICAgICAgPC9iYW50YS1jb21tZW50LWZpZWxkPlxyXG5cclxuICAgICAgICA8YmFudGEtY29tbWVudC1zb3J0XHJcbiAgICAgICAgICAgIFsoc29ydCldPVwic29ydE9yZGVyXCI+PC9iYW50YS1jb21tZW50LXNvcnQ+XHJcblxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJsb2FkaW5nLWNvbW1lbnRcIiAqbmdJZj1cImxvYWRpbmdTaGFyZWRDb21tZW50XCI+XHJcbiAgICAgICAgICAgIDxoMT5Mb2FkaW5nIHRoZSBjb21tZW50IHlvdSBsaW5rZWQgdG8uLi48L2gxPlxyXG4gICAgICAgICAgICA8bWF0LXNwaW5uZXIgW2RpYW1ldGVyXT1cIjMwMFwiIFtzdHJva2VXaWR0aF09XCIyXCI+PC9tYXQtc3Bpbm5lcj5cclxuICAgICAgICAgICAgPHA+XHJcbiAgICAgICAgICAgICAgICBJZiB0aGVyZSBhcmUgYSBsb3Qgb2YgY29tbWVudHMsIHRoaXMgbWlnaHQgdGFrZSBhd2hpbGUhXHJcbiAgICAgICAgICAgIDwvcD5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwibG9hZGluZy1jb21tZW50XCIgKm5nSWY9XCIhbG9hZGluZ1NoYXJlZENvbW1lbnQgJiYgbGFzdFNoYXJlZENvbW1lbnRJRFwiPlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2hhcmVkQ29tbWVudE1pc3NpbmdcIj5cclxuXHJcbiAgICAgICAgICAgICAgICA8YSBjbGFzcz1cImNsb3NlXCIgbWF0LWljb24tYnV0dG9uIG1hdFRvb2x0aXA9XCJDbG9zZSB0aGlzIG5vdGljZVwiIGhyZWY9XCJqYXZhc2NyaXB0OjtcIiAoY2xpY2spPVwibGFzdFNoYXJlZENvbW1lbnRJRCA9IG51bGxcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24+Y2xvc2U8L21hdC1pY29uPlxyXG4gICAgICAgICAgICAgICAgPC9hPlxyXG5cclxuICAgICAgICAgICAgICAgIDxoMT5cclxuICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24+ZXJyb3I8L21hdC1pY29uPlxyXG4gICAgICAgICAgICAgICAgICAgIFVoIG9oIVxyXG4gICAgICAgICAgICAgICAgPC9oMT5cclxuXHJcbiAgICAgICAgICAgICAgICA8cD5UaGUgY29tbWVudCB5b3UgbGlua2VkIHRvIGNhbid0IGJlIGZvdW5kISBJdCBtYXkgaGF2ZSBiZWVuIHJlbW92ZWQuPC9wPlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFzaGFyZWRDb21tZW50TWlzc2luZ1wiPlxyXG4gICAgICAgICAgICAgICAgPGEgY2xhc3M9XCJjbG9zZVwiIG1hdC1pY29uLWJ1dHRvbiBtYXRUb29sdGlwPVwiQ2xvc2UgdGhpcyBub3RpY2VcIiBocmVmPVwiamF2YXNjcmlwdDo7XCIgKGNsaWNrKT1cImxhc3RTaGFyZWRDb21tZW50SUQgPSBudWxsXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uPmNsb3NlPC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgICAgIDwvYT5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gbWF0LWJ1dHRvbiAoY2xpY2spPVwibmF2aWdhdGVUb1NoYXJlZENvbW1lbnQobGFzdFNoYXJlZENvbW1lbnRJRClcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24+bW92ZV9kb3duPC9tYXQtaWNvbj4gSnVtcCB0byBzaGFyZWQgY29tbWVudFxyXG4gICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8YmFudGEtY29tbWVudC12aWV3XHJcbiAgICAgICAgICAgICNjb21tZW50Vmlld1xyXG4gICAgICAgICAgICBbY2xhc3MuZmFkZWRdPVwic2VsZWN0ZWRNZXNzYWdlICYmICF1c2VJbmxpbmVSZXBsaWVzXCJcclxuICAgICAgICAgICAgW3NvdXJjZV09XCJzb3VyY2VcIlxyXG4gICAgICAgICAgICBbZml4ZWRIZWlnaHRdPVwiZml4ZWRIZWlnaHRcIlxyXG4gICAgICAgICAgICBbbWF4TWVzc2FnZXNdPVwibWF4TWVzc2FnZXNcIlxyXG4gICAgICAgICAgICBbbWF4VmlzaWJsZU1lc3NhZ2VzXT1cIm1heFZpc2libGVNZXNzYWdlc1wiXHJcbiAgICAgICAgICAgIFtnZW5lcmljQXZhdGFyVXJsXT1cImdlbmVyaWNBdmF0YXJVcmxcIlxyXG4gICAgICAgICAgICBbY3VzdG9tTWVudUl0ZW1zXT1cImN1c3RvbU1lbnVJdGVtc1wiXHJcbiAgICAgICAgICAgICh1c2VyU2VsZWN0ZWQpPVwic2VsZWN0TWVzc2FnZVVzZXIoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgIChzb3J0T3JkZXJDaGFuZ2VkKT1cInNvcnRPcmRlciA9ICRldmVudFwiXHJcbiAgICAgICAgICAgIChzZWxlY3RlZCk9XCJ0b2dnbGVTZWxlY3RlZE1lc3NhZ2UoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgIChsaWtlZCk9XCJsaWtlTWVzc2FnZShzb3VyY2UsICRldmVudClcIlxyXG4gICAgICAgICAgICAodW5saWtlZCk9XCJ1bmxpa2VNZXNzYWdlKHNvdXJjZSwgJGV2ZW50KVwiXHJcbiAgICAgICAgICAgIChtZXNzYWdlRWRpdGVkKT1cImVkaXRNZXNzYWdlKHNvdXJjZSwgJGV2ZW50Lm1lc3NhZ2UsICRldmVudC5uZXdNZXNzYWdlKVwiXHJcbiAgICAgICAgICAgIChyZXBvcnRlZCk9XCJyZXBvcnRNZXNzYWdlKCRldmVudClcIlxyXG4gICAgICAgICAgICAodXNlcm5hbWVTZWxlY3RlZCk9XCJzZWxlY3RVc2VybmFtZSgkZXZlbnQpXCJcclxuICAgICAgICAgICAgKGF2YXRhclNlbGVjdGVkKT1cInNlbGVjdEF2YXRhcigkZXZlbnQpXCJcclxuICAgICAgICAgICAgKHNoYXJlZCk9XCJzaGFyZU1lc3NhZ2UoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgIFtzZWxlY3RlZE1lc3NhZ2VdPVwic2VsZWN0ZWRNZXNzYWdlXCJcclxuICAgICAgICAgICAgKGRlbGV0ZWQpPVwiZGVsZXRlTWVzc2FnZSgkZXZlbnQpXCJcclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5saW5lLXJlcGxpZXNcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb2N1c2VkXCIgW2NsYXNzLnZpc2libGVdPVwic2VsZWN0ZWRNZXNzYWdlVmlzaWJsZVwiICpuZ0lmPVwic2VsZWN0ZWRNZXNzYWdlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJlcGxpZXNcIj5cclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhc2VsZWN0ZWRNZXNzYWdlVGhyZWFkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibG9hZGluZ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtc3Bpbm5lcj48L21hdC1zcGlubmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNlbGVjdGVkTWVzc2FnZVRocmVhZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJhbnRhLWNvbW1lbnQtdmlld1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzb3VyY2VdPVwic2VsZWN0ZWRNZXNzYWdlVGhyZWFkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYWxsb3dSZXBsaWVzXT1cImZhbHNlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZml4ZWRIZWlnaHRdPVwiZmFsc2VcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzaG93RW1wdHlTdGF0ZV09XCJmYWxzZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25ld2VzdExhc3RdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2dlbmVyaWNBdmF0YXJVcmxdPVwiZ2VuZXJpY0F2YXRhclVybFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpa2VkKT1cImxpa2VNZXNzYWdlKHNlbGVjdGVkTWVzc2FnZVRocmVhZCwgJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVubGlrZWQpPVwidW5saWtlTWVzc2FnZShzZWxlY3RlZE1lc3NhZ2VUaHJlYWQsICRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtZXNzYWdlRWRpdGVkKT1cImVkaXRNZXNzYWdlKHNlbGVjdGVkTWVzc2FnZVRocmVhZCwgJGV2ZW50Lm1lc3NhZ2UsICRldmVudC5uZXdNZXNzYWdlKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHJlcG9ydGVkKT1cInJlcG9ydE1lc3NhZ2UoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVzZXJuYW1lU2VsZWN0ZWQpPVwic2VsZWN0VXNlcm5hbWUoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGF2YXRhclNlbGVjdGVkKT1cInNlbGVjdEF2YXRhcigkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc2hhcmVkKT1cInNoYXJlTWVzc2FnZSgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZGVsZXRlZCk9XCJkZWxldGVNZXNzYWdlKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID48L2JhbnRhLWNvbW1lbnQtdmlldz5cclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YmFudGEtY29tbWVudC1maWVsZFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzZW5kTGFiZWxdPVwicmVwbHlMYWJlbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3NlbmRpbmdMYWJlbF09XCJzZW5kaW5nTGFiZWxcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtoYXNodGFnc109XCJoYXNodGFnc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3BhcnRpY2lwYW50c109XCJwYXJ0aWNpcGFudHNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzaWduSW5TZWxlY3RlZCk9XCJzaG93U2lnbkluKClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXhMZW5ndGhdPVwibWF4Q29tbWVudExlbmd0aFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGVkaXRBdmF0YXJTZWxlY3RlZCk9XCJzaG93RWRpdEF2YXRhcigpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc291cmNlXT1cInNlbGVjdGVkTWVzc2FnZVRocmVhZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NhbkNvbW1lbnRdPVwic291cmNlPy5wZXJtaXNzaW9ucz8uY2FuUG9zdFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3NpZ25JbkxhYmVsXT1cInNpZ25JbkxhYmVsXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcGVybWlzc2lvbkRlbmllZExhYmVsXT1cInNvdXJjZT8ucGVybWlzc2lvbnM/LmNhblBvc3RFcnJvck1lc3NhZ2UgfHwgcGVybWlzc2lvbkRlbmllZExhYmVsXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocGVybWlzc2lvbkRlbmllZEVycm9yKT1cImhhbmRsZVBlcm1pc3Npb25EZW5pZWQoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Nob3VsZEludGVyY2VwdE1lc3NhZ2VTZW5kXT1cInNob3VsZEludGVyY2VwdE1lc3NhZ2VTZW5kXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdXNlcl09XCJ1c2VyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwicG9zdFJlcGx5TGFiZWxcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzdWJtaXRdPVwic2VuZFJlcGx5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYWxsb3dBdHRhY2htZW50c109XCJhbGxvd0F0dGFjaG1lbnRzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZ2VuZXJpY0F2YXRhclVybF09XCJnZW5lcmljQXZhdGFyVXJsXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInNlbmRSZXBseU9wdGlvbnNUZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9iYW50YS1jb21tZW50LWZpZWxkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2JhbnRhLWNvbW1lbnQtdmlldz5cclxuICAgIDwvZGl2PlxyXG48L25nLWNvbnRhaW5lcj5cclxuIl19
|
|
666
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFudGEtY29tbWVudHMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2RrL3NyYy9saWIvY29tbWVudHMvYmFudGEtY29tbWVudHMvYmFudGEtY29tbWVudHMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2RrL3NyYy9saWIvY29tbWVudHMvYmFudGEtY29tbWVudHMvYmFudGEtY29tbWVudHMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsd0RBQXdEO0FBQXhELHdEQUF3RDtBQUV4RCxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBYyxXQUFXLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBYSxXQUFXLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6SixPQUFPLEVBQXFCLGFBQWEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVqRSxPQUFPLEVBQUUsT0FBTyxFQUFjLFlBQVksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN6RCxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFNdEMsT0FBTyxFQUFFLDhCQUE4QixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFFakYsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sd0NBQXdDLENBQUM7Ozs7Ozs7Ozs7Ozs7O0FBRzlFOztHQUVHO0FBTUgsTUFBTSxPQUFPLHNCQUFzQjtJQUMvQixZQUNZLE9BQXdCLEVBQ3hCLFVBQW1DLEVBQ25DLGNBQThCLEVBQzlCLFdBQXdCLEVBQ3hCLE1BQWM7UUFKZCxZQUFPLEdBQVAsT0FBTyxDQUFpQjtRQUN4QixlQUFVLEdBQVYsVUFBVSxDQUF5QjtRQUNuQyxtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFDOUIsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFDeEIsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQXNG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VTtzQkFBbEIsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLHFCQUFxQjtzQkFBN0IsS0FBSztnQkFDRyxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBQ0csY0FBYztzQkFBdEIsS0FBSztnQkFDRyxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLGtCQUFrQjtzQkFBMUIsS0FBSztnQkFDRyxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBRUcsMEJBQTBCO3NCQUFsQyxLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBS0YsTUFBTTtzQkFEVCxLQUFLO2dCQTZDTixRQUFRO3NCQURQLEtBQUs7Z0JBT0YsT0FBTztzQkFEVixLQUFLO2dCQVdRLGNBQWM7c0JBQTNCLE1BQU07Z0JBQ08sa0JBQWtCO3NCQUEvQixNQUFNO2dCQUNPLHFCQUFxQjtzQkFBbEMsTUFBTTtnQkFDTyxPQUFPO3NCQUFwQixNQUFNO2dCQUNPLFFBQVE7c0JBQXJCLE1BQU07Z0JBQ08sUUFBUTtzQkFBckIsTUFBTTtnQkFDTyxZQUFZO3NCQUF6QixNQUFNO2dCQUNPLGdCQUFnQjtzQkFBN0IsTUFBTTtnQkFDTyxjQUFjO3NCQUEzQixNQUFNO2dCQUNPLE1BQU07c0JBQW5CLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyIvLy8gPHJlZmVyZW5jZSB0eXBlcz1cIkB0eXBlcy9yZXNpemUtb2JzZXJ2ZXItYnJvd3NlclwiIC8+XHJcblxyXG5pbXBvcnQgeyBDb21wb25lbnQsIENvbnRlbnRDaGlsZCwgRWxlbWVudFJlZiwgSG9zdEJpbmRpbmcsIElucHV0LCBOZ1pvbmUsIE91dHB1dCwgUXVlcnlMaXN0LCBUZW1wbGF0ZVJlZiwgVmlld0NoaWxkLCBWaWV3Q2hpbGRyZW4gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgVXNlciwgQ2hhdE1lc3NhZ2UsIENvbW1lbnRzT3JkZXIgfSBmcm9tICdAYmFudGEvY29tbW9uJztcclxuaW1wb3J0IHsgSGFzaFRhZyB9IGZyb20gJy4uL2NvbW1lbnQtZmllbGQvY29tbWVudC1maWVsZC5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBTdWJqZWN0LCBPYnNlcnZhYmxlLCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgdGFrZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuXHJcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHsgQ2hhdEJhY2tlbmRCYXNlIH0gZnJvbSAnLi4vLi4vY2hhdC1iYWNrZW5kLWJhc2UnO1xyXG5pbXBvcnQgeyBDaGF0U291cmNlQmFzZSB9IGZyb20gJy4uLy4uL2NoYXQtc291cmNlLWJhc2UnO1xyXG5pbXBvcnQgeyBNYXRTbmFja0JhciB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NuYWNrLWJhcic7XHJcbmltcG9ydCB7IEJhbnRhUmVwbHlTZW5kT3B0aW9uc0RpcmVjdGl2ZSB9IGZyb20gJy4uL3JlcGx5LXNlbmQtb3B0aW9ucy5kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBNZXNzYWdlTWVudUl0ZW0gfSBmcm9tICcuLi8uLi9tZXNzYWdlLW1lbnUtaXRlbSc7XHJcbmltcG9ydCB7IENvbW1lbnRWaWV3Q29tcG9uZW50IH0gZnJvbSAnLi4vY29tbWVudC12aWV3L2NvbW1lbnQtdmlldy5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBDb21tZW50Q29tcG9uZW50IH0gZnJvbSAnLi4vY29tbWVudC9jb21tZW50LmNvbXBvbmVudCc7XHJcblxyXG4vKipcclxuICogQ29tbWVudHMgY29tcG9uZW50XHJcbiAqL1xyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAnYmFudGEtY29tbWVudHMnLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuL2JhbnRhLWNvbW1lbnRzLmNvbXBvbmVudC5odG1sJyxcclxuICAgIHN0eWxlVXJsczogWycuL2JhbnRhLWNvbW1lbnRzLmNvbXBvbmVudC5zY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIEJhbnRhQ29tbWVudHNDb21wb25lbnQge1xyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgcHJpdmF0ZSBiYWNrZW5kOiBDaGF0QmFja2VuZEJhc2UsXHJcbiAgICAgICAgcHJpdmF0ZSBlbGVtZW50UmVmOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PixcclxuICAgICAgICBwcml2YXRlIGFjdGl2YXRlZFJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcclxuICAgICAgICBwcml2YXRlIG1hdFNuYWNrQmFyOiBNYXRTbmFja0JhcixcclxuICAgICAgICBwcml2YXRlIG5nWm9uZTogTmdab25lXHJcbiAgICApIHtcclxuICAgICAgICB0aGlzLnNlbmRNZXNzYWdlID0gYXN5bmMgKG1lc3NhZ2U6IENoYXRNZXNzYWdlKSA9PiB7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBpbnRlcmNlcHQgPSBhd2FpdCB0aGlzLnNob3VsZEludGVyY2VwdE1lc3NhZ2VTZW5kPy4obWVzc2FnZSwgdGhpcy5zb3VyY2UpO1xyXG4gICAgICAgICAgICAgICAgaWYgKCFpbnRlcmNlcHQpIHtcclxuICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnNvdXJjZS5zZW5kKG1lc3NhZ2UpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLnNvdXJjZS5zb3J0T3JkZXIgIT09IENvbW1lbnRzT3JkZXIuTkVXRVNUKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zb3J0T3JkZXIgPSBDb21tZW50c09yZGVyLk5FV0VTVDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZUJhY2tlbmRFeGNlcHRpb24oZSwgJ0NvdWxkIG5vdCBzZW5kOiAnKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5zZW5kUmVwbHkgPSBhc3luYyAobWVzc2FnZTogQ2hhdE1lc3NhZ2UpID0+IHtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGludGVyY2VwdCA9IGF3YWl0IHRoaXMuc2hvdWxkSW50ZXJjZXB0TWVzc2FnZVNlbmQ/LihtZXNzYWdlLCB0aGlzLnNlbGVjdGVkTWVzc2FnZVRocmVhZCk7XHJcbiAgICAgICAgICAgICAgICBpZiAoIWludGVyY2VwdCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuc2VsZWN0ZWRNZXNzYWdlVGhyZWFkLnNlbmQobWVzc2FnZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVCYWNrZW5kRXhjZXB0aW9uKGUsICdDb3VsZCBub3Qgc2VuZCByZXBseTogJyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGVsZW1lbnQoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgaGFuZGxlQmFja2VuZEV4Y2VwdGlvbkFzQWxlcnQoZTogRXJyb3IsIHByZWZpeDogc3RyaW5nID0gJycpIHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICB0aGlzLmhhbmRsZUJhY2tlbmRFeGNlcHRpb24oZSwgcHJlZml4KTtcclxuICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIGFsZXJ0KGUubWVzc2FnZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgaGFuZGxlQmFja2VuZEV4Y2VwdGlvbihlOiBFcnJvciwgcHJlZml4OiBzdHJpbmcgPSAnJykge1xyXG4gICAgICAgIGxldCBlcnJvck1lc3NhZ2UgPSBlLm1lc3NhZ2U7XHJcblxyXG4gICAgICAgIGlmIChlcnJvck1lc3NhZ2Uuc3RhcnRzV2l0aCgncGVybWlzc2lvbi1kZW5pZWR8JykpIHtcclxuICAgICAgICAgICAgZXJyb3JNZXNzYWdlID0gZXJyb3JNZXNzYWdlLnJlcGxhY2UoL15wZXJtaXNzaW9uLWRlbmllZFxcfC8sICcnKTtcclxuXHJcbiAgICAgICAgICAgIGlmIChlcnJvck1lc3NhZ2Uuc3RhcnRzV2l0aChgYXBwLWhhbmRsZXxgKSkge1xyXG4gICAgICAgICAgICAgICAgLy8gSWYgdGhpcyBpcyBhbiBlcnJvciBkdXJpbmcgYXV0aG9yaXplQWN0aW9uIG9uIHRoZSBiYWNrZW5kLCBwYXNzIGNvbnRyb2wgdG8gdGhlIHVzZXItcHJvdmlkZWQgXHJcbiAgICAgICAgICAgICAgICAvLyBwZXJtaXNzaW9uLWRlbmllZCBoYW5kbGVyLlxyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMuc2VuZFBlcm1pc3Npb25EZW5pZWQoZXJyb3JNZXNzYWdlLnJlcGxhY2UoL15hcHAtaGFuZGxlXFx8LywgJycpKTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAke3ByZWZpeH0ke2Vycm9yTWVzc2FnZX1gKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBMaWZlY3ljbGUgRXZlbnRzIC8gSW5pdGlhbGl6YXRpb25cclxuXHJcbiAgICBuZ09uSW5pdCgpIHtcclxuICAgICAgICB0aGlzLl9zdWJzLmFkZCh0aGlzLmJhY2tlbmQudXNlckNoYW5nZWQuc3Vic2NyaWJlKHVzZXIgPT4gdGhpcy51c2VyID0gdXNlcikpO1xyXG4gICAgICAgIHRoaXMuc3RhcnRMb2FkaW5nKCk7XHJcblxyXG4gICAgICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xyXG4gICAgICAgICAgICBsZXQgcXVlcnlTdHJpbmcgPSB3aW5kb3cubG9jYXRpb24uc2VhcmNoLnN1YnN0cmluZygxKTtcclxuICAgICAgICAgICAgbGV0IHF1ZXJ5ID0gcXVlcnlTdHJpbmcuc3BsaXQoJyYnKVxyXG4gICAgICAgICAgICAgICAgLm1hcChzID0+IHMuc3BsaXQoJz0nKSlcclxuICAgICAgICAgICAgICAgIC5yZWR1Y2UoKG8sIFtrLCB2XSkgPT4gKG9bZGVjb2RlVVJJQ29tcG9uZW50KGspXSA9IGRlY29kZVVSSUNvbXBvbmVudCh2KSwgbyksIHt9KVxyXG4gICAgICAgICAgICA7XHJcblxyXG4gICAgICAgICAgICBjb25zdCBjb21tZW50SUQgPSBxdWVyeVsnY29tbWVudCddO1xyXG4gICAgICAgICAgICBpZiAoY29tbWVudElEKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNoYXJlZENvbW1lbnRJRCA9IGNvbW1lbnRJRDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHJlc2l6ZU9ic2VydmVyOiBSZXNpemVPYnNlcnZlcjtcclxuICAgIHByaXZhdGUgd2lkdGg6IG51bWJlcjtcclxuICAgIHByaXZhdGUgaGVpZ2h0OiBudW1iZXI7XHJcblxyXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5iYW50YS1tb2JpbGUnKVxyXG4gICAgaXNNb2JpbGVTaXplZDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAgIEBDb250ZW50Q2hpbGQoQmFudGFSZXBseVNlbmRPcHRpb25zRGlyZWN0aXZlLCB7cmVhZDogVGVtcGxhdGVSZWZ9KSBcclxuICAgIHNlbmRSZXBseU9wdGlvbnNUZW1wbGF0ZTogYW55O1xyXG5cclxuICAgIG1hcmtWaWV3UmVhZHk6ICgpID0+IHZvaWQ7XHJcbiAgICB2aWV3UmVhZHkgPSBuZXcgUHJvbWlzZTx2b2lkPihyID0+IHRoaXMubWFya1ZpZXdSZWFkeSA9IHIpO1xyXG5cclxuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcclxuICAgICAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcclxuICAgICAgICAgICAgbGV0IGNhbGxiYWNrID0gKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgbGV0IHNpemUgPSB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMubmdab25lLnJ1bigoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMud2lkdGggPSBzaXplLndpZHRoO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmhlaWdodCA9IHNpemUuaGVpZ2h0O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmlzTW9iaWxlU2l6ZWQgPSB0aGlzLndpZHRoIDwgNTAwO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgIGlmICh0eXBlb2YgUmVzaXplT2JzZXJ2ZXIgIT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJlc2l6ZU9ic2VydmVyID0gbmV3IFJlc2l6ZU9ic2VydmVyKGNhbGxiYWNrKTtcclxuICAgICAgICAgICAgICAgIHRoaXMucmVzaXplT2JzZXJ2ZXIub2JzZXJ2ZSh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAvLyBPbmUgY2hlY2sgaXMgYmV0dGVyIHRoYW4gbm90aGluZyFcclxuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMud2lkdGggPSB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5jbGllbnRXaWR0aDtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmhlaWdodCA9IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmNsaWVudEhlaWdodDtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmlzTW9iaWxlU2l6ZWQgPSB0aGlzLndpZHRoIDwgNTAwO1xyXG4gICAgICAgICAgICAgICAgfSwgMTAwMCk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNhbGxiYWNrKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLm1hcmtWaWV3UmVhZHkoKTtcclxuICAgIH1cclxuXHJcbiAgICBuZ09uRGVzdHJveSgpIHtcclxuICAgICAgICB0aGlzLl9zdWJzLnVuc3Vic2NyaWJlKCk7XHJcbiAgICAgICAgaWYgKHRoaXMucmVzaXplT2JzZXJ2ZXIpXHJcbiAgICAgICAgICAgIHRoaXMucmVzaXplT2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgYXN5bmMgc2V0U291cmNlRnJvbVRvcGljSUQodG9waWNJRDogc3RyaW5nKSB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiB3aW5kb3cgPT09ICd1bmRlZmluZWQnKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcblxyXG4gICAgICAgIHNldFRpbWVvdXQoYXN5bmMgKCkgPT4ge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhgW2JhbnRhLWNvbW1lbnRzXSBTdWJzY3JpYmluZyB0byB0b3BpYyBzb3VyY2UgJyR7dG9waWNJRH0nYCk7XHJcbiAgICAgICAgICAgIHRoaXMuc291cmNlID0gYXdhaXQgdGhpcy5iYWNrZW5kLmdldFNvdXJjZUZvclRvcGljKHRvcGljSUQsIHsgc29ydE9yZGVyOiB0aGlzLnNvcnRPcmRlciB9KTtcclxuICAgICAgICAgICAgdGhpcy5fc291cmNlSXNPd25lZCA9IHRydWU7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gTG9hZGluZyBTY3JlZW5cclxuICAgIHByaXZhdGUgX2xvYWRpbmdNZXNzYWdlID0gJyc7XHJcbiAgICBsb2FkaW5nTWVzc2FnZVZpc2libGUgPSBmYWxzZTtcclxuXHJcbiAgICBnZXQgbG9hZGluZ01lc3NhZ2UoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2xvYWRpbmdNZXNzYWdlO1xyXG4gICAgfVxyXG5cclxuICAgIHNldCBsb2FkaW5nTWVzc2FnZSh2YWx1ZSkge1xyXG4gICAgICAgIHRoaXMubG9hZGluZ01lc3NhZ2VWaXNpYmxlID0gZmFsc2U7XHJcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuX2xvYWRpbmdNZXNzYWdlID0gdmFsdWU7XHJcbiAgICAgICAgICAgIHRoaXMuX2xvYWRpbmdNZXNzYWdlID0gdmFsdWU7XHJcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2FkaW5nTWVzc2FnZVZpc2libGUgPSB0cnVlO1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgIH0sIDUwMCk7XHJcbiAgICB9XHJcblxyXG4gICAgbG9hZGluZzogYm9vbGVhbiA9IHRydWU7XHJcbiAgICBzaG93TG9hZGluZ1NjcmVlbiA9IGZhbHNlO1xyXG4gICAgbG9hZGluZ1N0YXJ0ZWRBdDogbnVtYmVyO1xyXG4gICAgbWVzc2FnZUNoYW5nZWRBdDogbnVtYmVyO1xyXG4gICAgc2hhcmVkQ29tbWVudElEOiBzdHJpbmc7XHJcbiAgICBsYXN0U2hhcmVkQ29tbWVudElEOiBzdHJpbmc7XHJcblxyXG4gICAgQElucHV0KCkgY3VzdG9tTWVudUl0ZW1zOiBNZXNzYWdlTWVudUl0ZW1bXSA9IFtdO1xyXG5cclxuICAgIHByaXZhdGUgYXN5bmMgc3RhcnRMb2FkaW5nKCkge1xyXG4gICAgICAgIHRoaXMubG9hZGluZ1N0YXJ0ZWRBdCA9IHRoaXMubWVzc2FnZUNoYW5nZWRBdCA9IERhdGUubm93KCk7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnVwZGF0ZUxvYWRpbmcoKSkgcmV0dXJuO1xyXG4gICAgICAgIGF3YWl0IG5ldyBQcm9taXNlPHZvaWQ+KHJlc29sdmUgPT4gc2V0VGltZW91dCgoKSA9PiByZXNvbHZlKCksIDEwMCkpO1xyXG4gICAgICAgIGlmICh0aGlzLnVwZGF0ZUxvYWRpbmcoKSkgcmV0dXJuO1xyXG4gICAgICAgIGF3YWl0IG5ldyBQcm9taXNlPHZvaWQ+KHJlc29sdmUgPT4gc2V0VGltZW91dCgoKSA9PiByZXNvbHZlKCksIDI1MCkpO1xyXG4gICAgICAgIGlmICh0aGlzLnVwZGF0ZUxvYWRpbmcoKSkgcmV0dXJuO1xyXG4gICAgICAgIGF3YWl0IG5ldyBQcm9taXNlPHZvaWQ+KHJlc29sdmUgPT4gc2V0VGltZW91dCgoKSA9PiByZXNvbHZlKCksIDUwMCkpO1xyXG4gICAgICAgIGlmICh0aGlzLnVwZGF0ZUxvYWRpbmcoKSkgcmV0dXJuO1xyXG5cclxuICAgICAgICBjb25zb2xlLmxvZyhgW0JhbnRhXSBMb2FkaW5nIGlzIHRha2luZyBhIGxvbmcgdGltZSEgU2hvd2luZyBsb2FkaW5nIHNjcmVlbi5gKTtcclxuICAgICAgICB0aGlzLnNob3dMb2FkaW5nU2NyZWVuID0gdHJ1ZTtcclxuICAgICAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpXHJcbiAgICAgICAgICAgIHRoaXMuX2xvYWRpbmdUaW1lciA9IHNldEludGVydmFsKCgpID0+IHRoaXMudXBkYXRlTG9hZGluZygpLCAxMDAwKTtcclxuICAgIH1cclxuICAgIFxyXG4gICAgcHJpdmF0ZSBfbG9hZGluZ1RpbWVyO1xyXG4gICAgcHJpdmF0ZSBfbG9hZGluZ01lc3NhZ2VJbmRleCA9IDA7XHJcblxyXG4gICAgQElucHV0KCkgbWF4Q29tbWVudExlbmd0aDogbnVtYmVyID0gMTUwMDtcclxuICAgIEBJbnB1dCgpIGxvYWRpbmdNZXNzYWdlczogc3RyaW5nW10gPSBbXHJcbiAgICAgICAgYEp1c3QgYSBzZWNvbmQuLi5gLFxyXG4gICAgICAgIGBXZSdyZSBkZWZpbml0ZWx5IHdvcmtpbmcgb24gaXQuYCxcclxuICAgICAgICBgVGhlcmUncyBubyBuZWVkIHRvIHJlZnJlc2guYCxcclxuICAgICAgICBgSXQncyBkZWZpbml0ZWx5IHdvcnRoIHRoZSB3YWl0IWAsXHJcbiAgICAgICAgYFRoaXMgaGFzIG5ldmVyIGhhcHBlbmVkIGJlZm9yZS5gLFxyXG4gICAgICAgIGBXZSdsbCBrZWVwIHRyeWluZywgYnV0IGl0J3Mgbm90IGxvb2tpbmcgZ3JlYXQuIFxyXG4gICAgICAgICAgICBDb21tZW50aW5nICYgY2hhdCBzZXJ2aWNlcyBtYXkgYmUgZG93bi4gXHJcbiAgICAgICAgICAgIElmIHlvdSBjb250aW51ZSB0byBleHBlcmllbmNlIGlzc3VlcywgcGxlYXNlIGNvbnRhY3Qgc3VwcG9ydC5cclxuICAgICAgICBgXHJcbiAgICBdO1xyXG5cclxuICAgIEBJbnB1dCgpIHVzZUlubGluZVJlcGxpZXMgPSB0cnVlO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQWNjZXNzIHRoZSBDb21tZW50Vmlld0NvbXBvbmVudCBmb3IgdGhpcyBCYW50YUNvbW1lbnRzQ29tcG9uZW50LiBcclxuICAgICAqIENvbW1lbnRWaWV3Q29tcG9uZW50IGlzIHJlc3BvbnNpYmxlIGZvciBpbnRlcmFjdGluZyB3aXRoIHRoZSBDaGF0U291cmNlIFxyXG4gICAgICogb2JqZWN0IGFuZCByZW5kZXJpbmcgY29tbWVudHMgYXMgQ29tbWVudENvbXBvbmVudHMuIEl0IGlzIHRoZSBzb3VyY2Ugb2YgXHJcbiAgICAgKiB0cnV0aCBmb3Igd2hpY2ggQ29tbWVudENvbXBvbmVudCBjb3JyZXNwb25kcyB0byB3aGljaCBDaGF0TWVzc2FnZS4gXHJcbiAgICAgKiBcclxuICAgICAqIE5vdGUgdGhhdCB0aGlzIENvbW1lbnRWaWV3Q29tcG9uZW50IGlzIG9ubHkgZm9yIHRoZSB0b3AgbGV2ZWwgY29tbWVudHMuXHJcbiAgICAgKiBSZXBsaWVzIGFyZSBoYW5kbGVkIGJ5IGEgc2VwYXJhdGUgQ29tbWVudFZpZXdDb21wb25lbnQgd2hpY2ggY2FuIGJlIFxyXG4gICAgICogcmV0cmlldmVkIHVzaW5nIHRoZSB0aHJlYWRWaWV3IHByb3BlcnR5LlxyXG4gICAgICovXHJcbiAgICBAVmlld0NoaWxkKCdjb21tZW50VmlldycpXHJcbiAgICBjb21tZW50VmlldzogQ29tbWVudFZpZXdDb21wb25lbnQ7XHJcblxyXG4gICAgQFZpZXdDaGlsZHJlbihDb21tZW50Vmlld0NvbXBvbmVudClcclxuICAgIHRocmVhZFZpZXdRdWVyeTogUXVlcnlMaXN0PENvbW1lbnRWaWV3Q29tcG9uZW50PjtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEF0dGVtcHRzIHRvIGZpbmQgdGhlIENvbW1lbnRDb21wb25lbnQgdGhhdCBjb3JyZXNwb25kcyB0byB0aGUgZ2l2ZW4gQ2hhdE1lc3NhZ2UuXHJcbiAgICAgKiBUaGUgQ2hhdE1lc3NhZ2UgY291bGQgYmUgYSB0b3AtbGV2ZWwgbWVzc2FnZSBpbiB0aGlzIGNvbnZlcnNhdGlvbiwgb3IgYSByZXBseSwgXHJcbiAgICAgKiBidXQgbm90ZSB0aGF0IGEgQ29tbWVudENvbXBvbmVudCB3aWxsIG9ubHkgZXhpc3QgZm9yIGEgcmVwbHkgaWYgdGhlIHVzZXIgaGFzIFxyXG4gICAgICogdGhlIHJlbGV2YW50IHJlcGx5IHRocmVhZCBvcGVuLlxyXG4gICAgICogQHBhcmFtIG1lc3NhZ2UgVGhlIG1lc3NhZ2UgdG8gbG9vayBmb3JcclxuICAgICAqL1xyXG4gICAgZ2V0Q29tbWVudENvbXBvbmVudEZvck1lc3NhZ2UobWVzc2FnZTogQ2hhdE1lc3NhZ2UpOiBDb21tZW50Q29tcG9uZW50IHtcclxuICAgICAgICBpZiAobWVzc2FnZS5wYXJlbnRNZXNzYWdlSWQpXHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnRocmVhZFZpZXc/LmdldENvbW1lbnRDb21wb25lbnRGb3JNZXNzYWdlKG1lc3NhZ2UpO1xyXG4gICAgICAgIGVsc2VcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29tbWVudFZpZXcuZ2V0Q29tbWVudENvbXBvbmVudEZvck1lc3NhZ2UobWVzc2FnZSlcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEFjY2VzcyB0aGUgQ29tbWVudFZpZXdDb21wb25lbnQgY29ycmVzcG9uZGluZyB0byB0aGUgY3VycmVudGx5IG9wZW4gcmVwbHkgdGhyZWFkLlxyXG4gICAgICogVGhpcyBpcyBub3QgdGhlIHRvcCBsZXZlbCBjb21tZW50cywgYnV0IGluc3RlYWQgdGhlIHJlcGx5IHRocmVhZCB0aGF0IHRoZSB1c2VyIGhhcyBcclxuICAgICAqIG9wZW5lZCAob25seSBvbmUgc2V0IG9mIHJlcGxpZXMgY2FuIGJlIG9wZW4gYXQgYSB0aW1lKS5cclxuICAgICAqIFxyXG4gICAgICogRm9yIGRldGFpbHMgYWJvdXQgd2hhdCBDb21tZW50Vmlld0NvbXBvbmVudCBhZmZvcmRzIHlvdSwgc2VlIHRoZSBjb21tZW50VmlldyBwcm9wZXJ0eS5cclxuICAgICAqL1xyXG4gICAgZ2V0IHRocmVhZFZpZXcoKSB7XHJcbiAgICAgICAgcmV0dXJuIEFycmF5LmZyb20odGhpcy50aHJlYWRWaWV3UXVlcnkpLmZpbHRlcih4ID0+IHggIT09IHRoaXMuY29tbWVudFZpZXcpWzBdO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIHdhaXRGb3JUaHJlYWRWaWV3KCkge1xyXG4gICAgICAgIGlmICh0aGlzLnRocmVhZFZpZXcpXHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnRocmVhZFZpZXc7XHJcbiAgICAgICAgXHJcbiAgICAgICAgYXdhaXQgdGhpcy50aHJlYWRWaWV3UXVlcnkuY2hhbmdlcy5waXBlKHRha2UoMSkpLnRvUHJvbWlzZSgpO1xyXG4gICAgICAgIHJldHVybiB0aGlzLnRocmVhZFZpZXc7XHJcbiAgICB9XHJcblxyXG4gICAgbWFya0xvYWRlZDogKCkgPT4gdm9pZDtcclxuICAgIGxvYWRlZCA9IG5ldyBQcm9taXNlPHZvaWQ+KHIgPT4gdGhpcy5tYXJrTG9hZGVkID0gcik7XHJcblxyXG4gICAgcHJpdmF0ZSB1cGRhdGVMb2FkaW5nKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGlmICh0aGlzLnNvdXJjZT8uc3RhdGUgJiYgIVsnY29ubmVjdGluZycsICdsb3N0J10uaW5jbHVkZXModGhpcy5zb3VyY2U/LnN0YXRlKSkge1xyXG4gICAgICAgICAgICBjbGVhckludGVydmFsKHRoaXMuX2xvYWRpbmdUaW1lcik7XHJcbiAgICAgICAgICAgIHRoaXMubG9hZGluZ01lc3NhZ2UgPSBgSGVyZSB3ZSBnbyFgO1xyXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5tYXJrTG9hZGVkKCk7XHJcbiAgICAgICAgICAgIH0sIDc1MCk7XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IG1lc3NhZ2VTd2l0Y2hUaW1lID0gNSoxMDAwO1xyXG4gICAgICAgIGlmICh0aGlzLm1lc3NhZ2VDaGFuZ2VkQXQgKyBtZXNzYWdlU3dpdGNoVGltZSA8IERhdGUubm93KCkpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMubG9hZGluZ01lc3NhZ2VzW3RoaXMuX2xvYWRpbmdNZXNzYWdlSW5kZXhdKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvYWRpbmdNZXNzYWdlID0gdGhpcy5sb2FkaW5nTWVzc2FnZXNbdGhpcy5fbG9hZGluZ01lc3NhZ2VJbmRleCsrXTtcclxuICAgICAgICAgICAgICAgIHRoaXMubWVzc2FnZUNoYW5nZWRBdCA9IERhdGUubm93KCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBQcm9wZXJ0aWVzXHJcblxyXG4gICAgcHJpdmF0ZSBfc2lnbkluU2VsZWN0ZWQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xyXG4gICAgcHJpdmF0ZSBfcGVybWlzc2lvbkRlbmllZEVycm9yID0gbmV3IFN1YmplY3Q8c3RyaW5nPigpO1xyXG4gICAgcHJpdmF0ZSBfZWRpdEF2YXRhclNlbGVjdGVkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcclxuICAgIHByaXZhdGUgX3Vwdm90ZWQgPSBuZXcgU3ViamVjdDxDaGF0TWVzc2FnZT4oKTtcclxuICAgIHByaXZhdGUgX3JlcG9ydGVkID0gbmV3IFN1YmplY3Q8Q2hhdE1lc3NhZ2U+KCk7XHJcbiAgICBwcml2YXRlIF9zZWxlY3RlZCA9IG5ldyBTdWJqZWN0PENoYXRNZXNzYWdlPigpO1xyXG4gICAgcHJpdmF0ZSBfdXNlclNlbGVjdGVkID0gbmV3IFN1YmplY3Q8Q2hhdE1lc3NhZ2U+KCk7XHJcbiAgICBwcml2YXRlIF9zaGFyZWQgPSBuZXcgU3ViamVjdDxDaGF0TWVzc2FnZT4oKTtcclxuICAgIHByaXZhdGUgX3VzZXJuYW1lU2VsZWN0ZWQgPSBuZXcgU3ViamVjdDxVc2VyPigpO1xyXG4gICAgcHJpdmF0ZSBfYXZhdGFyU2VsZWN0ZWQgPSBuZXcgU3ViamVjdDxVc2VyPigpO1xyXG4gICAgcHJpdmF0ZSBfc291cmNlOiBDaGF0U291cmNlQmFzZTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRyYWNrIHdoZXRoZXIgd2UgY3JlYXRlZCB0aGlzIHNvdXJjZS4gSWYgd2UgZGlkIG5vdCAoaWUgaXQgd2FzIHBhc3NlZCBpbiBmcm9tIHRoZSBjYWxsZXIpLFxyXG4gICAgICogdGhlbiB3ZSBhcmUgbm90IHJlc3BvbnNpYmxlIGZvciBjYWxsaW5nIGNsb3NlKCkuIElmIHdlIGRvIG93biBpdCB0aG91Z2gsIHdlIHdpbGwgY2FsbCBjbG9zZSgpIFxyXG4gICAgICogd2hlbiB3ZSBhcmUgZG9uZSB3aXRoIGl0LlxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIF9zb3VyY2VJc093bmVkID0gZmFsc2U7XHJcbiAgICBwcml2YXRlIF9zdWJzID0gbmV3IFN1YnNjcmlwdGlvbigpO1xyXG4gICAgcHJpdmF0ZSBfc29ydE9yZGVyOiBDb21tZW50c09yZGVyID0gQ29tbWVudHNPcmRlci5ORVdFU1Q7XHJcbiAgICBwcml2YXRlIF90b3BpY0lEOiBzdHJpbmc7XHJcbiAgICBcclxuICAgIHVzZXI6IFVzZXI7XHJcbiAgICBzZWxlY3RlZE1lc3NhZ2U6IENoYXRNZXNzYWdlO1xyXG4gICAgc2VsZWN0ZWRNZXNzYWdlVGhyZWFkOiBDaGF0U291cmNlQmFzZTtcclxuICAgIHNlbGVjdGVkTWVzc2FnZVZpc2libGUgPSBmYWxzZTtcclxuXHJcbiAgICAvLyBJbnB1dHNcclxuXHJcbiAgICBASW5wdXQoKSBzaWduSW5MYWJlbCA9ICdTaWduIEluJztcclxuICAgIEBJbnB1dCgpIHNlbmRMYWJlbCA9ICdTZW5kJztcclxuICAgIEBJbnB1dCgpIHJlcGx5TGFiZWwgPSAnUmVwbHknO1xyXG4gICAgQElucHV0KCkgc2VuZGluZ0xhYmVsID0gJ1NlbmRpbmcnO1xyXG4gICAgQElucHV0KCkgcGVybWlzc2lvbkRlbmllZExhYmVsID0gJ1NlbmQnO1xyXG4gICAgQElucHV0KCkgcG9zdENvbW1lbnRMYWJlbCA9ICdQb3N0IGEgY29tbWVudCc7XHJcbiAgICBASW5wdXQoKSBwb3N0UmVwbHlMYWJlbCA9ICdQb3N0IGEgcmVwbHknO1xyXG4gICAgQElucHV0KCkgYWxsb3dBdHRhY2htZW50cyA9IHRydWU7XHJcbiAgICBASW5wdXQoKSBmaXhlZEhlaWdodDogYm9vbGVhbjtcclxuICAgIEBJbnB1dCgpIG1heE1lc3NhZ2VzOiBudW1iZXI7XHJcbiAgICBASW5wdXQoKSBtYXhWaXNpYmxlTWVzc2FnZXM6IG51bWJlciA9IDIwO1xyXG4gICAgQElucHV0KCkgZ2VuZXJpY0F2YXRhclVybCA9IGBodHRwczovL2dyYXZhdGFyLmNvbS9hdmF0YXIvJHtEYXRlLm5vdygpLnRvU3RyaW5nKDE2KX0/cz01MTImZD1yb2JvaGFzaGA7XHJcblxyXG4gICAgQElucHV0KCkgc2hvdWxkSW50ZXJjZXB0TWVzc2FnZVNlbmQ/OiAobWVzc2FnZTogQ2hhdE1lc3NhZ2UsIHNvdXJjZTogQ2hhdFNvdXJjZUJhc2UpID0+IGJvb2xlYW4gfCBQcm9taXNlPGJvb2xlYW4+O1xyXG4gICAgQElucHV0KCkgcGFydGljaXBhbnRzOiBVc2VyW10gPSBbXTtcclxuXHJcbiAgICBwcml2YXRlIF9zb3VyY2VTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcclxuXHJcbiAgICBASW5wdXQoKVxyXG4gICAgZ2V0IHNvdXJjZSgpOiBDaGF0U291cmNlQmFzZSB7IHJldHVybiB0aGlzLl9zb3VyY2U7IH1cclxuICAgIHNldCBzb3VyY2UodmFsdWUpIHsgXHJcbiAgICAgICAgaWYgKHRoaXMuX3NvdXJjZSAmJiB0aGlzLl9zb3VyY2VJc093bmVkKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3NvdXJjZS5jbG9zZSgpO1xyXG4gICAgICAgICAgICB0aGlzLl9zb3VyY2VTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XHJcbiAgICAgICAgICAgIHRoaXMuX3NvdXJjZSA9IG51bGw7XHJcbiAgICAgICAgICAgIHRoaXMucGFydGljaXBhbnRzID0gW107XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLl9zb3VyY2UgPSB2YWx1ZTtcclxuICAgICAgICB0aGlzLl9zb3VyY2VJc093bmVkID0gZmFsc2U7IC8vIEFzc3VtZSB3ZSBkb24ndCBvd24gdGhpcyBzb3VyY2UuXHJcbiAgICAgICAgdGhpcy5fc291cmNlU3Vic2NyaXB0aW9uID0gbmV3IFN1YnNjcmlwdGlvbigpO1xyXG4gICAgICAgIFxyXG4gICAgICAgIGlmICh2YWx1ZSkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5zaGFyZWRDb21tZW50SUQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubmF2aWdhdGVUb1NoYXJlZENvbW1lbnQodGhpcy5zaGFyZWRDb21tZW50SUQpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sYXN0U2hhcmVkQ29tbWVudElEID0gdGhpcy5zaGFyZWRDb21tZW50SUQ7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNoYXJlZENvbW1lbnRJRCA9IG51bGw7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHRoaXMuX3NvdXJjZS5tZXNzYWdlcy5mb3JFYWNoKG0gPT4gdGhpcy5hZGRQYXJ0aWNpcGFudChtKSk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLl9zb3VyY2VTdWJzY3JpcHRpb24uYWRkKHRoaXMuX3NvdXJjZS5tZXNzYWdlUmVjZWl2ZWQuc3Vic2NyaWJlKG0gPT4gdGhpcy5hZGRQYXJ0aWNpcGFudChtKSkpO1xyXG4gICAgICAgICAgICB0aGlzLl9zb3VyY2VTdWJzY3JpcHRpb24uYWRkKHRoaXMuX3NvdXJjZS5tZXNzYWdlU2VudC5zdWJzY3JpYmUobSA9PiB0aGlzLmFkZFBhcnRpY2lwYW50KG0pKSk7XHJcbiAgICAgICAgICAgIHRoaXMuX3NvdXJjZVN1YnNjcmlwdGlvbi5hZGQodGhpcy5fc291cmNlLm1lc3NhZ2VPYnNlcnZlZC5zdWJzY3JpYmUobSA9PiB0aGlzLmFkZFBhcnRpY2lwYW50KG0pKSk7XHJcbiAgICAgICAgICAgIHRoaXMuX3NvdXJjZVN1YnNjcmlwdGlvbi5hZGQoXHJcbiAgICAgICAgICAgICAgICB0aGlzLl9zb3VyY2UubWVzc2FnZVVwZGF0ZWQuc3Vic2NyaWJlKG1zZyA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coYGNvbW1lbnRzIHJlY2VpdmVkIG1lc3NhZ2U6IGAsIG1zZyk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG1zZy5pZCA9PT0gdGhpcy5zZWxlY3RlZE1lc3NhZ2U/LmlkICYmIG1zZy5oaWRkZW4pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy51bnNlbGVjdE1lc3NhZ2UoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tYXRTbmFja0Jhci5vcGVuKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJUaGUgdGhyZWFkIHlvdSB3ZXJlIHZpZXdpbmcgd2FzIHJlbW92ZWQuXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmRlZmluZWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHVyYXRpb246IDI1MDBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICk7XHJcblxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIEBJbnB1dCgpIFxyXG4gICAgaGFzaHRhZ3M6IEhhc2hUYWdbXSA9IFtcclxuICAgICAgICB7aGFzaHRhZzogJ2Vycm9yJywgZGVzY3JpcHRpb246ICdDYXVzZSBhbiBlcnJvcid9LFxyXG4gICAgICAgIHtoYXNodGFnOiAndGltZW91dCcsIGRlc2NyaXB0aW9uOiAnQ2F1c2UgYSBzbG93IHRpbWVvdXQgZXJyb3InfSxcclxuICAgICAgICB7aGFzaHRhZzogJ3Nsb3cnLCBkZXNjcmlwdGlvbjogJ0JlIHNsb3cgd2hlbiB0aGlzIG1lc3NhZ2UgaXMgcG9zdGVkJ30sXHJcbiAgICBdO1xyXG4gICAgQElucHV0KClcclxuICAgIGdldCB0b3BpY0lEKCk6IHN0cmluZyB7IHJldHVybiB0aGlzLl90b3BpY0lEOyB9XHJcbiAgICBzZXQgdG9waWNJRCh2YWx1ZSkge1xyXG4gICAgICAgIGlmICh0aGlzLl90b3BpY0lEICE9PSB2YWx1ZSkge1xyXG4gICAgICAgICAgICB0aGlzLl90b3BpY0lEID0gdmFsdWU7XHJcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5zZXRTb3VyY2VGcm9tVG9waWNJRCh2YWx1ZSkpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyBPdXRwdXRzXHJcblxyXG4gICAgQE91dHB1dCgpIGdldCBzaWduSW5TZWxlY3RlZCgpOiBPYnNlcnZhYmxlPHZvaWQ+IHsgcmV0dXJuIHRoaXMuX3NpZ25JblNlbGVjdGVkOyB9XHJcbiAgICBAT3V0cHV0KCkgZ2V0IGVkaXRBdmF0YXJTZWxlY3RlZCgpIHsgcmV0dXJuIHRoaXMuX2VkaXRBdmF0YXJTZWxlY3RlZDsgfVxyXG4gICAgQE91dHB1dCgpIGdldCBwZXJtaXNzaW9uRGVuaWVkRXJyb3IoKTogT2JzZXJ2YWJsZTxzdHJpbmc+IHsgcmV0dXJuIHRoaXMuX3Blcm1pc3Npb25EZW5pZWRFcnJvcjsgfVxyXG4gICAgQE91dHB1dCgpIGdldCB1cHZvdGVkKCkgeyByZXR1cm4gdGhpcy5fdXB2b3RlZC5hc09ic2VydmFibGUoKTsgfVxyXG4gICAgQE91dHB1dCgpIGdldCByZXBvcnRlZCgpIHsgcmV0dXJuIHRoaXMuX3JlcG9ydGVkLmFzT2JzZXJ2YWJsZSgpOyB9XHJcbiAgICBAT3V0cHV0KCkgZ2V0IHNlbGVjdGVkKCkgeyByZXR1cm4gdGhpcy5fc2VsZWN0ZWQuYXNPYnNlcnZhYmxlKCk7IH1cclxuICAgIEBPdXRwdXQoKSBnZXQgdXNlclNlbGVjdGVkKCkgeyByZXR1cm4gdGhpcy5fdXNlclNlbGVjdGVkLmFzT2JzZXJ2YWJsZSgpOyB9XHJcbiAgICBAT3V0cHV0KCkgZ2V0IHVzZXJuYW1lU2VsZWN0ZWQoKSB7IHJldHVybiB0aGlzLl91c2VybmFtZVNlbGVjdGVkLmFzT2JzZXJ2YWJsZSgpOyB9XHJcbiAgICBAT3V0cHV0KCkgZ2V0IGF2YXRhclNlbGVjdGVkKCkgeyByZXR1cm4gdGhpcy5fYXZhdGFyU2VsZWN0ZWQuYXNPYnNlcnZhYmxlKCk7IH1cclxuICAgIEBPdXRwdXQoKSBnZXQgc2hhcmVkKCkgeyByZXR1cm4gdGhpcy5fc2hhcmVkLmFzT2JzZXJ2YWJsZSgpOyB9XHJcblxyXG4gICAgZ2V0IHNvcnRPcmRlcigpIHsgcmV0dXJuIHRoaXMuX3NvcnRPcmRlcjsgfVxyXG4gICAgc2V0IHNvcnRPcmRlcih2YWx1ZSkge1xyXG4gICAgICAgIGlmICh0aGlzLl9zb3J0T3JkZXIgIT09IHZhbHVlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3NvcnRPcmRlciA9IHZhbHVlO1xyXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U291cmNlRnJvbVRvcGljSUQodGhpcy50b3BpY0lEKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHNlbmRNZXNzYWdlOiAobWVzc2FnZTogQ2hhdE1lc3NhZ2UpID0+IHZvaWQ7XHJcbiAgICBzZW5kUmVwbHk6IChtZXNzYWdlOiBDaGF0TWVzc2FnZSkgPT4gdm9pZDtcclxuXHJcbiAgICAvLyBVSSBJbnRlcmFjdGlvbnNcclxuXHJcbiAgICBhc3luYyBzY3JvbGxUb0NvbW1lbnQoY29tbWVudElkOiBDaGF0TWVzc2FnZVsnaWQnXSkge1xyXG4gICAgICAgIGlmICh0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJylcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIFxyXG4gICAgICAgIGF3YWl0IHRoaXMuY29tbWVudFZpZXcud2FpdEZvckFsbENvbW1lbnRzVG9Mb2FkKCk7XHJcblxyXG4gICAgICAgIGNvbnN0IGNvbW1lbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGBbZGF0YS1jb21tZW50LWlkPVwiJHtjb21tZW50SWR9XCJdYCk7XHJcbiAgICAgICAgaWYgKGNvbW1lbnQpIHtcclxuICAgICAgICAgICAgY29tbWVudC5zY3JvbGxJbnRvVmlldyh7XHJcbiAgICAgICAgICAgICAgICBpbmxpbmU6ICdjZW50ZXInLFxyXG4gICAgICAgICAgICAgICAgYmxvY2s6ICdjZW50ZXInXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBsb2FkaW5nU2hhcmVkQ29tbWVudCA9IGZhbHNlO1xyXG4gICAgc2hhcmVkQ29tbWVudE1pc3NpbmcgPSBmYWxzZTtcclxuXHJcbiAgICBhc3luYyBuYXZpZ2F0ZVRvU2hhcmVkQ29tbWVudChpZDogc3RyaW5nKSB7XHJcbiAgICAgICAgdGhpcy5sb2FkaW5nU2hhcmVkQ29tbWVudCA9IHRydWU7XHJcbiAgICAgICAgYXdhaXQgbmV3IFByb21pc2UociA9PiBzZXRUaW1lb3V0KHIsIDEwKSk7XHJcbiAgICAgICAgdGhpcy5zaGFyZWRDb21tZW50TWlzc2luZyA9IGZhbHNlO1xyXG4gICAgICAgIGxldCBzb3VyY2UgPSB0aGlzLnNvdXJjZTtcclxuXHJcbiAgICAgICAgYXdhaXQgc291cmNlLnJlYWR5O1xyXG4gICAgICAgIGF3YWl0IHRoaXMudmlld1JlYWR5O1xyXG4gICAgICAgIGF3YWl0IHRoaXMubG9hZGVkO1xyXG4gICAgICAgIFxyXG4gICAgICAgIGNvbnNvbGUubG9nKGBOYXZpZ2F0aW5nIHRvIHNoYXJlZCBjb21tZW50IHdpdGggSUQgJyR7aWR9Jy4uLmApO1xyXG4gICAgICAgIGxldCBtZXNzYWdlOiBDaGF0TWVzc2FnZTtcclxuICAgICAgICBcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBtZXNzYWdlID0gYXdhaXQgdGhpcy5zb3VyY2UuZ2V0KGlkKTtcclxuICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYEZhaWxlZCB0byBmaW5kIGNvbW1lbnQgZnJvbSBVUkw6ICR7ZS5tZXNzYWdlfWApO1xyXG4gICAgICAgICAgICB0aGlzLnNoYXJlZENvbW1lbnRNaXNzaW5nID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5sb2FkaW5nU2hhcmVkQ29tbWVudCA9IGZhbHNlO1xyXG5cclxuICAgICAgICAgICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgbm90aWNlID0gdGhpcy5lbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJy5sb2FkaW5nLWNvbW1lbnQnKTtcclxuICAgICAgICAgICAgICAgICAgICBub3RpY2Uuc2Nyb2xsSW50b1ZpZXcoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBibG9jazogJ2NlbnRlcicsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlubGluZTogJ2NlbnRlcidcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH0sIDIwMCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbWVzc2FnZS50cmFuc2llbnRTdGF0ZSA/Pz0ge307XHJcblxyXG4gICAgICAgIC8vIElmIHRoZXJlIGlzIGEgcGFyZW50IG1lc3NhZ2UsIHdlIHNob3VsZCBpbnN0ZWFkIGZvY3VzIHRoYXQgYW5kIGxldCB0aGUgXHJcbiAgICAgICAgLy8gc2Nyb2xsVG9Db21tZW50IGFuZCBoaWdobGlnaHQgZG8gdGhlIHdvcmsuXHJcblxyXG4gICAgICAgIGlmIChtZXNzYWdlLnBhcmVudE1lc3NhZ2VJZCkge1xyXG5cclxuICAgICAgICAgICAgbGV0IHBhcmVudE1lc3NhZ2UgPSBhd2FpdCB0aGlzLnNvdXJjZS5nZXQobWVzc2FnZS5wYXJlbnRNZXNzYWdlSWQpO1xyXG4gICAgICAgICAgICBwYXJlbnRNZXNzYWdlLnRyYW5zaWVudFN0YXRlID8/PSB7fTtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIC8vIE1ha2Ugc3VyZSB0aGF0IHRoaXMgbWVzc2FnZSBpcyBsb2FkZWQgYW5kIHZpc2libGUgdG8gdGhlIHVzZXJcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5jb21tZW50Vmlldy5sb2FkTWVzc2FnZUluQ29udGV4dChwYXJlbnRNZXNzYWdlKTtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGxldCB0aHJlYWQgPSBhd2FpdCB0aGlzLnNlbGVjdE1lc3NhZ2UocGFyZW50TWVzc2FnZSk7IFxyXG5cclxuICAgICAgICAgICAgLy8gTmVlZCB0byByZS1yZXRyaWV2ZSB0aGUgbWVzc2FnZSB3aXRoaW4gdGhlIG5ldyBjaGF0IHNvdXJjZSB0byBhZmZlY3QgaXRzXHJcbiAgICAgICAgICAgIC8vIHRyYW5zaWVudCBzdGF0ZS5cclxuICAgICAgICAgICAgYXdhaXQgdGhyZWFkLnJlYWR5O1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgLy8gTWFrZSBzdXJlIHRoYXQgdGhpcyBtZXNzYWdlIGlzIGxvYWRlZCBhbmQgdmlzaWJsZSB0byB0aGUgdXNlclxyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLndhaXRGb3JUaHJlYWRWaWV3KCk7XHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMudGhyZWFkVmlldy5sb2FkTWVzc2FnZUluQ29udGV4dChtZXNzYWdlKTtcclxuXHJcbiAgICAgICAgICAgIG1lc3NhZ2UgPSBhd2FpdCB0aHJlYWQuZ2V0KG1lc3NhZ2UuaWQpO1xyXG4gICAgICAgICAgICBtZXNzYWdlLnRyYW5zaWVudFN0YXRlID8/PSB7fTtcclxuICAgICAgICAgICAgbWVzc2FnZS50cmFuc2llbnRTdGF0ZS5oaWdobGlnaHRlZCA9IHRydWU7XHJcbiAgICAgICAgICAgIGNvbnNvbGUuZGlyKG1lc3NhZ2UpO1xyXG4gICAgICAgICAgICBhd2FpdCBuZXcgUHJvbWlzZTx2b2lkPihyZXNvbHZlID0+IHNldFRpbWVvdXQoKCkgPT4gcmVzb2x2ZSgpLCA1MDApKTtcclxuXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgLy8gTWFrZSBzdXJlIHRoYXQgdGhpcyBtZXNzYWdlIGlzIGxvYWRlZCBhbmQgdmlzaWJsZSB0byB0aGUgdXNlclxyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLmNvbW1lbnRWaWV3LmxvYWRNZXNzYWdlSW5Db250ZXh0KG1lc3NhZ2UpO1xyXG5cclxuICAgICAgICAgICAgbWVzc2FnZS50cmFuc2llbnRTdGF0ZSA/Pz0ge307XHJcbiAgICAgICAgICAgIG1lc3NhZ2UudHJhbnNpZW50U3RhdGUuaGlnaGxpZ2h0ZWQgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5sb2FkaW5nU2hhcmVkQ29tbWVudCA9IGZhbHNlO1xyXG4gICAgICAgIGF3YWl0IHRoaXMuc2Nyb2xsVG9Db21tZW50KGlkKTtcclxuICAgIH1cclxuXHJcbiAgICBoYW5kbGVQZXJtaXNzaW9uRGVuaWVkKGVycm9yTWVzc2FnZTogc3RyaW5nKSB7XHJcbiAgICAgICAgLy8gVGhpcyBpcyB3aGF0IG90aGVyIGNvbXBvbmVudHMgY2FsbCB3aGVuIGhhbmRsaW5nIHBlcm1pc3Npb24gZXJyb3JzXHJcbiAgICAgICAgXHJcbiAgICAgICAgaWYgKGVycm9yTWVzc2FnZS5zdGFydHNXaXRoKGBhcHAtaGFuZGxlfGApKSB7XHJcbiAgICAgICAgICAgIC8vIElmIHRoaXMgaXMgYW4gZXJyb3IgZHVyaW5nIGF1dGhvcml6ZUFjdGlvbiBvbiB0aGUgYmFja2VuZCwgcGFzcyBjb250cm9sIHRvIHRoZSB1c2VyLXByb3ZpZGVkIFxyXG4gICAgICAgICAgICAvLyBwZXJtaXNzaW9uLWRlbmllZCBoYW5kbGVyLlxyXG5cclxuICAgICAgICAgICAgdGhpcy5zZW5kUGVybWlzc2lvbkRlbmllZChlcnJvck1lc3NhZ2UucmVwbGFjZSgvXmFwcC1oYW5kbGVcXHwvLCAnJykpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBhbGVydChlcnJvck1lc3NhZ2UpO1xyXG4gICAgfVxyXG5cclxuICAgIHNlbmRQZXJtaXNzaW9uRGVuaWVkKG1lc3NhZ2U6IHN0cmluZykge1xyXG4gICAgICAgIHRoaXMuX3Blcm1pc3Npb25EZW5pZWRFcnJvci5uZXh0KG1lc3NhZ2UpO1xyXG4gICAgfVxyXG5cclxuICAgIHNjcm9sbFRvTWVzc2FnZShtZXNzYWdlOiBDaGF0TWVzc2FnZSkge1xyXG4gICAgICAgIGxldCBlbCA9IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoYFtkYXRhLWNvbW1lbnQtaWQ9XCIke21lc3NhZ2UuaWR9XCJdYCk7XHJcbiAgICAgICAgaWYgKCFlbClcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIGVsLnNjcm9sbEludG9WaWV3KHtibG9jazogJ2NlbnRlcicsIGlubGluZTogJ3N0YXJ0J30pO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgYWRkUGFydGljaXBhbnQobWVzc2FnZTogQ2hhdE1lc3NhZ2UpIHtcclxuICAgICAgICBpZiAoIW1lc3NhZ2UgfHwgIW1lc3NhZ2UudXNlciB8fCAhbWVzc2FnZS51c2VyLmlkKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcblxyXG4gICAgICAgIGxldCBleGlzdGluZyA9IHRoaXMucGFydGljaXBhbnRzLmZpbmQoeCA9PiB4LmlkID09PSBtZXNzYWdlLnVzZXIuaWQpO1xyXG4gICAgICAgIGlmIChleGlzdGluZylcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMucGFydGljaXBhbnRzLnB1c2gobWVzc2FnZS51c2VyKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBBY3Rpb25zXHJcblxyXG4gICAgYXN5bmMgbGlrZU1lc3NhZ2Uoc291cmNlOiBDaGF0U291cmNlQmFzZSwgbWVzc2FnZTogQ2hhdE1lc3NhZ2UpIHtcclxuICAgICAgICBpZiAoIXRoaXMudXNlcikge1xyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLnNob3dTaWduSW4oKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5fdXB2b3RlZC5uZXh0KG1lc3NhZ2UpO1xyXG4gICAgICAgIG1lc3NhZ2UudHJhbnNpZW50U3RhdGUubGlraW5nID0gdHJ1ZTtcclxuICAgICAgICBcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBhd2FpdCBzb3VyY2UubGlrZU1lc3NhZ2UobWVzc2FnZS5pZCk7XHJcbiAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICB0aGlzLmhhbmRsZUJhY2tlbmRFeGNlcHRpb25Bc0FsZXJ0KGUsICdDb3VsZCBub3QgbGlrZSB0aGlzIG1lc3NhZ2U6ICcpO1xyXG4gICAgICAgIH0gZmluYWxseSB7XHJcbiAgICAgICAgICAgIGF3YWl0IG5ldyBQcm9taXNlPHZvaWQ+KHJlc29sdmUgPT4gc2V0VGltZW91dCgoKSA9PiByZXNvbHZlKCksIDI1MCkpO1xyXG4gICAgICAgICAgICBtZXNzYWdlLnRyYW5zaWVudFN0YXRlLmxpa2luZyA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBhc3luYyB1bmxpa2VNZXNzYWdlKHNvdXJjZTogQ2hhdFNvdXJjZUJhc2UsIG1lc3NhZ2U6IENoYXRNZXNzYWdlKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnVzZXIpIHtcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5zaG93U2lnbkluKCk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuX3Vwdm90ZWQubmV4dChtZXNzYWdlKTtcclxuICAgICAgICBtZXNzYWdlLnRyYW5zaWVudFN0YXRlLmxpa2luZyA9IHRydWU7XHJcblxyXG4gICAgICAgIGlmIChtZXNzYWdlLnVzZXJTdGF0ZT8ubGlrZWQpXHJcbiAgICAgICAgICAgIG1lc3NhZ2UubGlrZXMgPSAobWVzc2FnZS5saWtlcyB8fCAwKSAtIDE7XHJcblxyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGF3YWl0IHNvdXJjZS51bmxpa2VNZXNzYWdlKG1lc3NhZ2UuaWQpO1xyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgdGhpcy5oYW5kbGVCYWNrZW5kRXhjZXB0aW9uQXNBbGVydChlLCAnRmFpbGVkIHRvIHVubGlrZSB0aGlzIG1lc3NhZ2U6ICcpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgYXdhaXQgbmV3IFByb21pc2U8dm9pZD4ocmVzb2x2ZSA9PiBzZXRUaW1lb3V0KCgpID0+IHJlc29sdmUoKSwgMjUwKSk7XHJcbiAgICAgICAgbWVzc2FnZS50cmFuc2llbnRTdGF0ZS5saWtpbmcgPSBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyByZXBvcnRNZXNzYWdlKG1lc3NhZ2U6IENoYXRNZXNzYWdlKSB7XHJcbiAgICAgICAgdGhpcy5fcmVwb3J0ZWQubmV4dChtZXNzYWdlKTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyB1bnNlbGVjdE1lc3NhZ2UoKSB7XHJcbiAgICAgICAgbGV0IG1lc3NhZ2UgPSB0aGlzLnNlbGVjdGVkTWVzc2FnZTtcclxuXHJcbiAgICAgICAgdGhpcy5fc2VsZWN0ZWQubmV4dChudWxsKTtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkTWVzc2FnZSA9IG51bGw7XHJcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRNZXNzYWdlVGhyZWFkKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGVkTWVzc2FnZVRocmVhZC5jbG9zZSlcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRNZXNzYWdlVGhyZWFkLmNsb3NlKCk7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRNZXNzYWdlVGhyZWFkID0gbnVsbDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChtZXNzYWdlKVxyXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMuc2Nyb2xsVG9NZXNzYWdlKG1lc3NhZ2UpKTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyB0b2dnbGVTZWxlY3RlZE1lc3NhZ2UobWVzc2FnZTogQ2hhdE1lc3NhZ2UpIHtcclxuICAgICAgICBpZiAodGhpcy5zZWxlY3RlZE1lc3NhZ2UgPT09IG1lc3NhZ2UpIHtcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy51bnNlbGVjdE1lc3NhZ2UoKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLnNlbGVjdE1lc3NhZ2UobWVzc2FnZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIHNlbGVjdE1lc3NhZ2UobWVzc2FnZTogQ2hhdE1lc3NhZ2UpIHtcclxuICAgICAgICBpZiAodGhpcy5zZWxlY3RlZE1lc3NhZ2UgPT09IG1lc3NhZ2UpIHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coYFtCYW50YV0gVGhyZWFkICR7dGhpcy50b3BpY0lEfS8ke21lc3NhZ2UuaWR9IGlzIGFscmVhZHkgb3Blbi5gKTtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRNZXNzYWdlVGhyZWFkO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5fc2VsZWN0ZWQubmV4dChtZXNzYWdlKTtcclxuXHJcbiAgICAgICAgY29uc29sZS5sb2coYFtCYW50YV0gT3BlbmluZyB0aHJlYWQgZm9yICR7dGhpcy50b3BpY0lEfS8ke21lc3NhZ2UuaWR9Li4uYCk7XHJcbiAgICAgICAgbGV0IHNlbGVjdGVkTWVzc2FnZVRocmVhZCA9IGF3YWl0IHRoaXMuYmFja2VuZC5nZXRTb3VyY2VGb3JUaHJlYWQodGhpcy50b3BpY0lELCBtZXNzYWdlLmlkKTtcclxuXHJcbiAgICAgICAgaWYgKCFzZWxlY3RlZE1lc3NhZ2VUaHJlYWQpIHtcclxuICAgICAgICAgICAgY29uc29sZS53YXJuKGBGYWlsZWQgdG8gbG9jYXRlIHRocmVhZCBmb3IgbWVzc2FnZSAke3RoaXMudG9waWNJRH0vJHttZXNzYWdlLmlkfSFgKTtcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zb2xlLmxvZyhgW0JhbnRhXSBUaHJlYWQgb3BlbmVkIGZvciAke3RoaXMudG9waWNJRH0vJHttZXNzYWdlLmlkfS5gKTtcclxuXHJcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLnNlbGVjdGVkTWVzc2FnZVZpc2libGUgPSB0cnVlKTtcclxuICAgICAgICBzZXRUaW1lb3V0KGFzeW5jICgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE1lc3NhZ2UgPSBtZXNzYWdlO1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkTWVzc2FnZVRocmVhZCA9IHNlbGVjdGVkTWVzc2FnZVRocmVhZDtcclxuICAgICAgICB9LCAyNTApO1xyXG5cclxuICAgICAgICByZXR1cm4gc2VsZWN0ZWRNZXNzYWdlVGhyZWFkO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIHNob3dTaWduSW4oKSB7XHJcbiAgICAgICAgdGhpcy5fc2lnbkluU2VsZWN0ZWQubmV4dCgpO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIHNob3dFZGl0QXZhdGFyKCkge1xyXG4gICAgICAgIHRoaXMuX2VkaXRBdmF0YXJTZWxlY3RlZC5uZXh0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgc2VsZWN0TWVzc2FnZVVzZXIobWVzc2FnZTogQ2hhdE1lc3NhZ2UpIHtcclxuICAgICAgICB0aGlzLl91c2VyU2VsZWN0ZWQubmV4dChtZXNzYWdlKTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBzZWxlY3RVc2VybmFtZSh1c2VyOiBVc2VyKSB7XHJcbiAgICAgICAgdGhpcy5fdXNlcm5hbWVTZWxlY3RlZC5uZXh0KHVzZXIpO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIHNlbGVjdEF2YXRhcih1c2VyOiBVc2VyKSB7XHJcbiAgICAgICAgdGhpcy5fYXZhdGFyU2VsZWN0ZWQubmV4dCh1c2VyKTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBzaGFyZU1lc3NhZ2UobWVzc2FnZTogQ2hhdE1lc3NhZ2UpIHtcclxuICAgICAgICB0aGlzLl9zaGFyZWQubmV4dChtZXNzYWdlKTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBkZWxldGVNZXNzYWdlKG1lc3NhZ2U6IENoYXRNZXNzYWdlKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnVzZXIpIHtcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5zaG93U2lnbkluKCk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghY29uZmlybShcIkFyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBkZWxldGUgdGhpcyBjb21tZW50PyBZb3UgY2Fubm90IHVuZG8gdGhpcyBhY3Rpb24uXCIpKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcblxyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuc291cmNlLmRlbGV0ZU1lc3NhZ2UobWVzc2FnZS5pZCk7XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5zZWxlY3RlZE1lc3NhZ2U/LmlkID09PSBtZXNzYWdlLmlkKVxyXG4gICAgICAgICAgICAgICAgdGhpcy51bnNlbGVjdE1lc3NhZ2UoKTtcclxuXHJcbiAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICB0aGlzLmhhbmRsZUJhY2tlbmRFeGNlcHRpb25Bc0FsZXJ0KGUsIGBDb3VsZCBub3QgZGVsZXRlIG1lc3NhZ2U6IGApO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBlZGl0TWVzc2FnZShzb3VyY2U6IENoYXRTb3VyY2VCYXNlLCBtZXNzYWdlOiBDaGF0TWVzc2FnZSwgbmV3VGV4dDogc3RyaW5nKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnVzZXIpIHtcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5zaG93U2lnbkluKCk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGF3YWl0IHNvdXJjZS5lZGl0TWVzc2FnZShtZXNzYWdlLmlkLCBuZXdUZXh0KTtcclxuICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlQmFja2VuZEV4Y2VwdGlvbkFzQWxlcnQoZSwgJ0NvdWxkIG5vdCBlZGl0IHRoaXMgbWVzc2FnZTogJyk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIG1lc3NhZ2UubWVzc2FnZSA9IG5ld1RleHQ7XHJcbiAgICAgICAgbWVzc2FnZS50cmFuc2llbnRTdGF0ZS5lZGl0aW5nID0gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgc3RhcnRFZGl0aW5nKG1lc3NhZ2U6IENoYXRNZXNzYWdlKSB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZE1lc3NhZ2UudHJhbnNpZW50U3RhdGUuZWRpdGluZyA9IGZhbHNlO1xyXG4gICAgICAgIG1lc3NhZ2UudHJhbnNpZW50U3RhdGUuZWRpdGluZyA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgc2F2ZUVkaXQobWVzc2FnZTogQ2hhdE1lc3NhZ2UsIHRleHQ6IHN0cmluZykge1xyXG4gICAgICAgIGlmICghdGhpcy51c2VyKSB7XHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuc2hvd1NpZ25JbigpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuc291cmNlLmVkaXRNZXNzYWdlKG1lc3NhZ2UuaWQsIHRleHQpO1xyXG4gICAgICAgICAgICBtZXNzYWdlLnRyYW5zaWVudFN0YXRlLmVkaXRpbmcgPSBmYWxzZTtcclxuICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlQmFja2VuZEV4Y2VwdGlvbkFzQWxlcnQoZSwgYENvdWxkIG5vdCBlZGl0IG1lc3NhZ2U6IGApO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG4iLCI8bmctY29udGFpbmVyICpuZ0lmPVwibG9hZGluZ1wiPlxyXG4gICAgPGRpdiBjbGFzcz1cImxvYWRpbmctc2NyZWVuXCIgW2NsYXNzLnZpc2libGVdPVwic2hvd0xvYWRpbmdTY3JlZW5cIj5cclxuICAgICAgICA8aDE+TG9hZGluZy4uLjwvaDE+XHJcbiAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgPG1hdC1zcGlubmVyIFtkaWFtZXRlcl09XCIzMDBcIiBbc3Ryb2tlV2lkdGhdPVwiMlwiPjwvbWF0LXNwaW5uZXI+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDxwIGNsYXNzPVwibG9hZGluZy1tZXNzYWdlXCIgW2NsYXNzLnZpc2libGVdPVwibG9hZGluZ01lc3NhZ2VWaXNpYmxlXCI+e3tsb2FkaW5nTWVzc2FnZX19PC9wPlxyXG4gICAgPC9kaXY+XHJcbjwvbmctY29udGFpbmVyPlxyXG48bmctY29udGFpbmVyICpuZ0lmPVwiIWxvYWRpbmdcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJmb2N1c2VkXCIgW2NsYXNzLnZpc2libGVdPVwic2VsZWN0ZWRNZXNzYWdlVmlzaWJsZVwiICpuZ0lmPVwic2VsZWN0ZWRNZXNzYWdlICYmICF1c2VJbmxpbmVSZXBsaWVzXCI+XHJcblxyXG4gICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgIDxhIG1hdC1idXR0b24gaHJlZj1cImphdmFzY3JpcHQ6O1wiIChjbGljayk9XCJ1bnNlbGVjdE1lc3NhZ2UoKVwiPlxyXG4gICAgICAgICAgICAgICAgPG1hdC1pY29uPmFycm93X2JhY2s8L21hdC1pY29uPlxyXG4gICAgICAgICAgICAgICAgTGF0ZXN0IENvbW1lbnRzXHJcbiAgICAgICAgICAgIDwvYT5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPGJhbnRhLWNvbW1lbnRcclxuICAgICAgICAgICAgW21lc3NhZ2VdPVwic2VsZWN0ZWRNZXNzYWdlXCJcclxuICAgICAgICAgICAgW2xpa2luZ109XCJzZWxlY3RlZE1lc3NhZ2UudHJhbnNpZW50U3RhdGUubGlraW5nXCJcclxuICAgICAgICAgICAgW21pbmVdPVwidXNlcj8uaWQgPT09IHNlbGVjdGVkTWVzc2FnZS51c2VyPy5pZFwiXHJcbiAgICAgICAgICAgIFtwZXJtaXNzaW9uc109XCJzb3VyY2U/LnBlcm1pc3Npb25zXCJcclxuICAgICAgICAgICAgW3Nob3dSZXBseUFjdGlvbl09XCJmYWxzZVwiXHJcbiAgICAgICAgICAgIFtlZGl0aW5nXT1cInNlbGVjdGVkTWVzc2FnZS50cmFuc2llbnRTdGF0ZS5lZGl0aW5nXCJcclxuICAgICAgICAgICAgW21heExlbmd0aF09XCJtYXhDb21tZW50TGVuZ3RoXCJcclxuICAgICAgICAgICAgW2dlbmVyaWNBdmF0YXJVcmxdPVwiZ2VuZXJpY0F2YXRhclVybFwiXHJcbiAgICAgICAgICAgIChlZGl0U3RhcnRlZCk9XCJzdGFydEVkaXRpbmcoc2VsZWN0ZWRNZXNzYWdlKVwiXHJcbiAgICAgICAgICAgIChlZGl0RW5kZWQpPVwic2VsZWN0ZWRNZXNzYWdlLnRyYW5zaWVudFN0YXRlLmVkaXRpbmcgPSBmYWxzZVwiXHJcbiAgICAgICAgICAgIChlZGl0ZWQpPVwic2F2ZUVkaXQoc2VsZWN0ZWRNZXNzYWdlLCAkZXZlbnQpXCJcclxuICAgICAgICAgICAgKHVzZXJTZWxlY3RlZCk9XCJzZWxlY3RNZXNzYWdlVXNlcihzZWxlY3RlZE1lc3NhZ2UpXCJcclxuICAgICAgICAgICAgKGF2YXRhclNlbGVjdGVkKT1cInNlbGVjdEF2YXRhcigkZXZlbnQpXCJcclxuICAgICAgICAgICAgKHVzZXJuYW1lU2VsZWN0ZWQpPVwic2VsZWN0VXNlcm5hbWUoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgIChsaWtlZCk9XCJsaWtlTWVzc2FnZShzb3VyY2UsIHNlbGVjdGVkTWVzc2FnZSlcIlxyXG4gICAgICAgICAgICAodW5saWtlZCk9XCJ1bmxpa2VNZXNzYWdlKHNvdXJjZSwgc2VsZWN0ZWRNZXNzYWdlKVwiXHJcbiAgICAgICAgICAgIChyZXBvcnRlZCk9XCJyZXBvcnRNZXNzYWdlKHNlbGVjdGVkTWVzc2FnZSlcIlxyXG4gICAgICAgICAgICAoc2VsZWN0ZWQpPVwidG9nZ2xlU2VsZWN0ZWRNZXNzYWdlKHNlbGVjdGVkTWVzc2FnZSlcIlxyXG4gICAgICAgICAgICAoc2hhcmVkKT1cInNoYXJlTWVzc2FnZSgkZXZlbnQpXCJcclxuICAgICAgICAgICAgKGRlbGV0ZWQpPVwiZGVsZXRlTWVzc2FnZShzZWxlY3RlZE1lc3NhZ2UpXCJcclxuICAgICAgICAgICAgPjwvYmFudGEtY29tbWVudD5cclxuXHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInJlcGxpZXNcIj5cclxuXHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhc2VsZWN0ZWRNZXNzYWdlVGhyZWFkXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibG9hZGluZ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxtYXQtc3Bpbm5lcj48L21hdC1zcGlubmVyPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNlbGVjdGVkTWVzc2FnZVRocmVhZFwiPlxyXG4gICAgICAgICAgICAgICAgPGJhbnRhLWNvbW1lbnQtdmlld1xyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwicmVwbGllc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgI3RocmVhZFZpZXdcclxuICAgICAgICAgICAgICAgICAgICBbc291cmNlXT1cInNlbGVjdGVkTWVzc2FnZVRocmVhZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2FsbG93UmVwbGllc109XCJmYWxzZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2ZpeGVkSGVpZ2h0XT1cImZhbHNlXCJcclxuICAgICAgICAgICAgICAgICAgICBbc2hvd0VtcHR5U3RhdGVdPVwiZmFsc2VcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtuZXdlc3RMYXN0XT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtnZW5lcmljQXZhdGFyVXJsXT1cImdlbmVyaWNBdmF0YXJVcmxcIlxyXG4gICAgICAgICAgICAgICAgICAgIChsaWtlZCk9XCJsaWtlTWVzc2FnZShzZWxlY3RlZE1lc3NhZ2VUaHJlYWQsICRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICh1bmxpa2VkKT1cInVubGlrZU1lc3NhZ2Uoc2VsZWN0ZWRNZXNzYWdlVGhyZWFkLCAkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAobWVzc2FnZUVkaXRlZCk9XCJlZGl0TWVzc2FnZShzZWxlY3RlZE1lc3NhZ2VUaHJlYWQsICRldmVudC5tZXNzYWdlLCAkZXZlbnQubmV3TWVzc2FnZSlcIlxyXG4gICAgICAgICAgICAgICAgICAgIChyZXBvcnRlZCk9XCJyZXBvcnRNZXNzYWdlKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICh1c2VybmFtZVNlbGVjdGVkKT1cInNlbGVjdFVzZXJuYW1lKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgIChhdmF0YXJTZWxlY3RlZCk9XCJzZWxlY3RBdmF0YXIoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgKHNoYXJlZCk9XCJzaGFyZU1lc3NhZ2UoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgKGRlbGV0ZWQpPVwiZGVsZXRlTWVzc2FnZSgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICBbY3VzdG9tTWVudUl0ZW1zXT1cImN1c3RvbU1lbnVJdGVtc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgPjwvYmFudGEtY29tbWVudC12aWV3PlxyXG5cclxuICAgICAgICAgICAgICAgIDxiYW50YS1jb21tZW50LWZpZWxkXHJcbiAgICAgICAgICAgICAgICAgICAgW3NlbmRMYWJlbF09XCJyZXBseUxhYmVsXCJcclxuICAgICAgICAgICAgICAgICAgICBbc2VuZGluZ0xhYmVsXT1cInNlbmRpbmdMYWJlbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2hhc2h0YWdzXT1cImhhc2h0YWdzXCJcclxuICAgICAgICAgICAgICAgICAgICBbcGFydGljaXBhbnRzXT1cInBhcnRpY2lwYW50c1wiXHJcbiAgICAgICAgICAgICAgICAgICAgKHNpZ25JblNlbGVjdGVkKT1cInNob3dTaWduSW4oKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgKGVkaXRBdmF0YXJTZWxlY3RlZCk9XCJzaG93RWRpdEF2YXRhcigpXCJcclxuICAgICAgICAgICAgICAgICAgICBbc291cmNlXT1cInNlbGVjdGVkTWVzc2FnZVRocmVhZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgW21heExlbmd0aF09XCJtYXhDb21tZW50TGVuZ3RoXCJcclxuICAgICAgICAgICAgICAgICAgICBbY2FuQ29tbWVudF09XCJzb3VyY2U/LnBlcm1pc3Npb25zPy5jYW5Qb3N0XCJcclxuICAgICAgICAgICAgICAgICAgICBbc2lnbkluTGFiZWxdPVwic2lnbkluTGFiZWxcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtwZXJtaXNzaW9uRGVuaWVkTGFiZWxdPVwic291cmNlPy5wZXJtaXNzaW9ucz8uY2FuUG9zdEVycm9yTWVzc2FnZSB8fCBwZXJtaXNzaW9uRGVuaWVkTGFiZWxcIlxyXG4gICAgICAgICAgICAgICAgICAgIChwZXJtaXNzaW9uRGVuaWVkRXJyb3IpPVwiaGFuZGxlUGVybWlzc2lvbkRlbmllZCgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICBbc2hvdWxkSW50ZXJjZXB0TWVzc2FnZVNlbmRdPVwic2hvdWxkSW50ZXJjZXB0TWVzc2FnZVNlbmRcIlxyXG4gICAgICAgICAgICAgICAgICAgIFt1c2VyXT1cInVzZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCJwb3N0UmVwbHlMYWJlbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgW3N1Ym1pdF09XCJzZW5kUmVwbHlcIlxyXG4gICAgICAgICAgICAgICAgICAgIFthbGxvd0F0dGFjaG1lbnRzXT1cImFsbG93QXR0YWNobWVudHNcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtnZW5lcmljQXZhdGFyVXJsXT1cImdlbmVyaWNBdmF0YXJVcmxcIlxyXG4gICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwic2VuZFJlcGx5T3B0aW9uc1RlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICA8L2JhbnRhLWNvbW1lbnQtZmllbGQ+XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPGRpdiBjbGFzcz1cIm1haW5cIiBbY2xhc3MuaGlkZGVuXT1cInNlbGVjdGVkTWVzc2FnZSAmJiAhdXNlSW5saW5lUmVwbGllc1wiPlxyXG4gICAgICAgIDxiYW50YS1jb21tZW50LWZpZWxkXHJcbiAgICAgICAgICAgIFtzb3VyY2VdPVwic291cmNlXCJcclxuICAgICAgICAgICAgW3VzZXJdPVwidXNlclwiXHJcbiAgICAgICAgICAgIFtzZW5kTGFiZWxdPVwic2VuZExhYmVsXCJcclxuICAgICAgICAgICAgW3NlbmRpbmdMYWJlbF09XCJzZW5kaW5nTGFiZWxcIlxyXG4gICAgICAgICAgICBbc2lnbkluTGFiZWxdPVwic2lnbkluTGFiZWxcIlxyXG4gICAgICAgICAgICBbY2FuQ29tbWVudF09XCJzb3VyY2U/LnBlcm1pc3Npb25zPy5jYW5Qb3N0XCJcclxuICAgICAgICAgICAgW2hhc2h0YWdzXT1cImhhc2h0YWdzXCJcclxuICAgICAgICAgICAgW3BhcnRpY2lwYW50c109XCJwYXJ0aWNpcGFudHNcIlxyXG4gICAgICAgICAgICBbbGFiZWxdPVwicG9zdENvbW1lbnRMYWJlbFwiXHJcbiAgICAgICAgICAgIFttYXhMZW5ndGhdPVwibWF4Q29tbWVudExlbmd0aFwiXHJcbiAgICAgICAgICAgIChlZGl0QXZhdGFyU2VsZWN0ZWQpPVwic2hvd0VkaXRBdmF0YXIoKVwiXHJcbiAgICAgICAgICAgIChzaWduSW5TZWxlY3RlZCk9XCJzaG93U2lnbkluKClcIlxyXG4gICAgICAgICAgICBbcGVybWlzc2lvbkRlbmllZExhYmVsXT1cInNvdXJjZT8ucGVybWlzc2lvbnM/LmNhblBvc3RFcnJvck1lc3NhZ2UgfHwgcGVybWlzc2lvbkRlbmllZExhYmVsXCJcclxuICAgICAgICAgICAgKHBlcm1pc3Npb25EZW5pZWRFcnJvcik9XCJoYW5kbGVQZXJtaXNzaW9uRGVuaWVkKCRldmVudClcIlxyXG4gICAgICAgICAgICBbc2hvdWxkSW50ZXJjZXB0TWVzc2FnZVNlbmRdPVwic2hvdWxkSW50ZXJjZXB0TWVzc2FnZVNlbmRcIlxyXG4gICAgICAgICAgICBbc3VibWl0XT1cInNlbmRNZXNzYWdlXCJcclxuICAgICAgICAgICAgW2FsbG93QXR0YWNobWVudHNdPVwiYWxsb3dBdHRhY2htZW50c1wiXHJcbiAgICAgICAgICAgIFtnZW5lcmljQXZhdGFyVXJsXT1cImdlbmVyaWNBdmF0YXJVcmxcIlxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgXHJcbiAgICAgICAgPC9iYW50YS1jb21tZW50LWZpZWxkPlxyXG5cclxuICAgICAgICA8YmFudGEtY29tbWVudC1zb3J0XHJcbiAgICAgICAgICAgIFsoc29ydCldPVwic29ydE9yZGVyXCI+PC9iYW50YS1jb21tZW50LXNvcnQ+XHJcblxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJsb2FkaW5nLWNvbW1lbnRcIiAqbmdJZj1cImxvYWRpbmdTaGFyZWRDb21tZW50XCI+XHJcbiAgICAgICAgICAgIDxoMT5Mb2FkaW5nIHRoZSBjb21tZW50IHlvdSBsaW5rZWQgdG8uLi48L2gxPlxyXG4gICAgICAgICAgICA8bWF0LXNwaW5uZXIgW2RpYW1ldGVyXT1cIjMwMFwiIFtzdHJva2VXaWR0aF09XCIyXCI+PC9tYXQtc3Bpbm5lcj5cclxuICAgICAgICAgICAgPHA+XHJcbiAgICAgICAgICAgICAgICBJZiB0aGVyZSBhcmUgYSBsb3Qgb2YgY29tbWVudHMsIHRoaXMgbWlnaHQgdGFrZSBhd2hpbGUhXHJcbiAgICAgICAgICAgIDwvcD5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwibG9hZGluZy1jb21tZW50XCIgKm5nSWY9XCIhbG9hZGluZ1NoYXJlZENvbW1lbnQgJiYgbGFzdFNoYXJlZENvbW1lbnRJRFwiPlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2hhcmVkQ29tbWVudE1pc3NpbmdcIj5cclxuXHJcbiAgICAgICAgICAgICAgICA8YSBjbGFzcz1cImNsb3NlXCIgbWF0LWljb24tYnV0dG9uIG1hdFRvb2x0aXA9XCJDbG9zZSB0aGlzIG5vdGljZVwiIGhyZWY9XCJqYXZhc2NyaXB0OjtcIiAoY2xpY2spPVwibGFzdFNoYXJlZENvbW1lbnRJRCA9IG51bGxcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24+Y2xvc2U8L21hdC1pY29uPlxyXG4gICAgICAgICAgICAgICAgPC9hPlxyXG5cclxuICAgICAgICAgICAgICAgIDxoMT5cclxuICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24+ZXJyb3I8L21hdC1pY29uPlxyXG4gICAgICAgICAgICAgICAgICAgIFVoIG9oIVxyXG4gICAgICAgICAgICAgICAgPC9oMT5cclxuXHJcbiAgICAgICAgICAgICAgICA8cD5UaGUgY29tbWVudCB5b3UgbGlua2VkIHRvIGNhbid0IGJlIGZvdW5kISBJdCBtYXkgaGF2ZSBiZWVuIHJlbW92ZWQuPC9wPlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFzaGFyZWRDb21tZW50TWlzc2luZ1wiPlxyXG4gICAgICAgICAgICAgICAgPGEgY2xhc3M9XCJjbG9zZVwiIG1hdC1pY29uLWJ1dHRvbiBtYXRUb29sdGlwPVwiQ2xvc2UgdGhpcyBub3RpY2VcIiBocmVmPVwiamF2YXNjcmlwdDo7XCIgKGNsaWNrKT1cImxhc3RTaGFyZWRDb21tZW50SUQgPSBudWxsXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uPmNsb3NlPC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgICAgIDwvYT5cclxuICAgICAgICAgICAgICAgIDxidXR0b24gbWF0LWJ1dHRvbiAoY2xpY2spPVwibmF2aWdhdGVUb1NoYXJlZENvbW1lbnQobGFzdFNoYXJlZENvbW1lbnRJRClcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24+bW92ZV9kb3duPC9tYXQtaWNvbj4gSnVtcCB0byBzaGFyZWQgY29tbWVudFxyXG4gICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8YmFudGEtY29tbWVudC12aWV3XHJcbiAgICAgICAgICAgICNjb21tZW50Vmlld1xyXG4gICAgICAgICAgICBbY2xhc3MuZmFkZWRdPVwic2VsZWN0ZWRNZXNzYWdlICYmICF1c2VJbmxpbmVSZXBsaWVzXCJcclxuICAgICAgICAgICAgW3NvdXJjZV09XCJzb3VyY2VcIlxyXG4gICAgICAgICAgICBbZml4ZWRIZWlnaHRdPVwiZml4ZWRIZWlnaHRcIlxyXG4gICAgICAgICAgICBbbWF4TWVzc2FnZXNdPVwibWF4TWVzc2FnZXNcIlxyXG4gICAgICAgICAgICBbbWF4VmlzaWJsZU1lc3NhZ2VzXT1cIm1heFZpc2libGVNZXNzYWdlc1wiXHJcbiAgICAgICAgICAgIFtnZW5lcmljQXZhdGFyVXJsXT1cImdlbmVyaWNBdmF0YXJVcmxcIlxyXG4gICAgICAgICAgICBbY3VzdG9tTWVudUl0ZW1zXT1cImN1c3RvbU1lbnVJdGVtc1wiXHJcbiAgICAgICAgICAgICh1c2VyU2VsZWN0ZWQpPVwic2VsZWN0TWVzc2FnZVVzZXIoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgIChzb3J0T3JkZXJDaGFuZ2VkKT1cInNvcnRPcmRlciA9ICRldmVudFwiXHJcbiAgICAgICAgICAgIChzZWxlY3RlZCk9XCJ0b2dnbGVTZWxlY3RlZE1lc3NhZ2UoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgIChsaWtlZCk9XCJsaWtlTWVzc2FnZShzb3VyY2UsICRldmVudClcIlxyXG4gICAgICAgICAgICAodW5saWtlZCk9XCJ1bmxpa2VNZXNzYWdlKHNvdXJjZSwgJGV2ZW50KVwiXHJcbiAgICAgICAgICAgIChtZXNzYWdlRWRpdGVkKT1cImVkaXRNZXNzYWdlKHNvdXJjZSwgJGV2ZW50Lm1lc3NhZ2UsICRldmVudC5uZXdNZXNzYWdlKVwiXHJcbiAgICAgICAgICAgIChyZXBvcnRlZCk9XCJyZXBvcnRNZXNzYWdlKCRldmVudClcIlxyXG4gICAgICAgICAgICAodXNlcm5hbWVTZWxlY3RlZCk9XCJzZWxlY3RVc2VybmFtZSgkZXZlbnQpXCJcclxuICAgICAgICAgICAgKGF2YXRhclNlbGVjdGVkKT1cInNlbGVjdEF2YXRhcigkZXZlbnQpXCJcclxuICAgICAgICAgICAgKHNoYXJlZCk9XCJzaGFyZU1lc3NhZ2UoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgIFtzZWxlY3RlZE1lc3NhZ2VdPVwic2VsZWN0ZWRNZXNzYWdlXCJcclxuICAgICAgICAgICAgKGRlbGV0ZWQpPVwiZGVsZXRlTWVzc2FnZSgkZXZlbnQpXCJcclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5saW5lLXJlcGxpZXNcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb2N1c2VkXCIgW2NsYXNzLnZpc2libGVdPVwic2VsZWN0ZWRNZXNzYWdlVmlzaWJsZVwiICpuZ0lmPVwic2VsZWN0ZWRNZXNzYWdlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJlcGxpZXNcIj5cclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhc2VsZWN0ZWRNZXNzYWdlVGhyZWFkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibG9hZGluZ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtc3Bpbm5lcj48L21hdC1zcGlubmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNlbGVjdGVkTWVzc2FnZVRocmVhZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJhbnRhLWNvbW1lbnQtdmlld1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzb3VyY2VdPVwic2VsZWN0ZWRNZXNzYWdlVGhyZWFkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYWxsb3dSZXBsaWVzXT1cImZhbHNlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZml4ZWRIZWlnaHRdPVwiZmFsc2VcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzaG93RW1wdHlTdGF0ZV09XCJmYWxzZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25ld2VzdExhc3RdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2dlbmVyaWNBdmF0YXJVcmxdPVwiZ2VuZXJpY0F2YXRhclVybFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpa2VkKT1cImxpa2VNZXNzYWdlKHNlbGVjdGVkTWVzc2FnZVRocmVhZCwgJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVubGlrZWQpPVwidW5saWtlTWVzc2FnZShzZWxlY3RlZE1lc3NhZ2VUaHJlYWQsICRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtZXNzYWdlRWRpdGVkKT1cImVkaXRNZXNzYWdlKHNlbGVjdGVkTWVzc2FnZVRocmVhZCwgJGV2ZW50Lm1lc3NhZ2UsICRldmVudC5uZXdNZXNzYWdlKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHJlcG9ydGVkKT1cInJlcG9ydE1lc3NhZ2UoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVzZXJuYW1lU2VsZWN0ZWQpPVwic2VsZWN0VXNlcm5hbWUoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGF2YXRhclNlbGVjdGVkKT1cInNlbGVjdEF2YXRhcigkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc2hhcmVkKT1cInNoYXJlTWVzc2FnZSgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZGVsZXRlZCk9XCJkZWxldGVNZXNzYWdlKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID48L2JhbnRhLWNvbW1lbnQtdmlldz5cclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YmFudGEtY29tbWVudC1maWVsZFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzZW5kTGFiZWxdPVwicmVwbHlMYWJlbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3NlbmRpbmdMYWJlbF09XCJzZW5kaW5nTGFiZWxcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtoYXNodGFnc109XCJoYXNodGFnc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3BhcnRpY2lwYW50c109XCJwYXJ0aWNpcGFudHNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzaWduSW5TZWxlY3RlZCk9XCJzaG93U2lnbkluKClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXhMZW5ndGhdPVwibWF4Q29tbWVudExlbmd0aFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGVkaXRBdmF0YXJTZWxlY3RlZCk9XCJzaG93RWRpdEF2YXRhcigpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc291cmNlXT1cInNlbGVjdGVkTWVzc2FnZVRocmVhZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NhbkNvbW1lbnRdPVwic291cmNlPy5wZXJtaXNzaW9ucz8uY2FuUG9zdFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3NpZ25JbkxhYmVsXT1cInNpZ25JbkxhYmVsXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcGVybWlzc2lvbkRlbmllZExhYmVsXT1cInNvdXJjZT8ucGVybWlzc2lvbnM/LmNhblBvc3RFcnJvck1lc3NhZ2UgfHwgcGVybWlzc2lvbkRlbmllZExhYmVsXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocGVybWlzc2lvbkRlbmllZEVycm9yKT1cImhhbmRsZVBlcm1pc3Npb25EZW5pZWQoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Nob3VsZEludGVyY2VwdE1lc3NhZ2VTZW5kXT1cInNob3VsZEludGVyY2VwdE1lc3NhZ2VTZW5kXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdXNlcl09XCJ1c2VyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwicG9zdFJlcGx5TGFiZWxcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzdWJtaXRdPVwic2VuZFJlcGx5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYWxsb3dBdHRhY2htZW50c109XCJhbGxvd0F0dGFjaG1lbnRzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZ2VuZXJpY0F2YXRhclVybF09XCJnZW5lcmljQXZhdGFyVXJsXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInNlbmRSZXBseU9wdGlvbnNUZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9iYW50YS1jb21tZW50LWZpZWxkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2JhbnRhLWNvbW1lbnQtdmlldz5cclxuICAgIDwvZGl2PlxyXG48L25nLWNvbnRhaW5lcj5cclxuIl19
|
|
@@ -57,7 +57,10 @@ export class CommentFieldComponent {
|
|
|
57
57
|
if (this._source.connectionStateChanged) {
|
|
58
58
|
this._subs.add(this._source.connectionStateChanged.subscribe(state => {
|
|
59
59
|
if (state === 'lost') {
|
|
60
|
-
this.
|
|
60
|
+
if (this._source.errorState === 'server-issue')
|
|
61
|
+
this.transientMessage = `Error occurred, trying again...`;
|
|
62
|
+
else
|
|
63
|
+
this.transientMessage = `Reconnecting...`;
|
|
61
64
|
}
|
|
62
65
|
else if (state === 'restored') {
|
|
63
66
|
this.transientMessage = undefined;
|
|
@@ -374,4 +377,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImpo
|
|
|
374
377
|
}], submit: [{
|
|
375
378
|
type: Input
|
|
376
379
|
}] } });
|
|
377
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbWVudC1maWVsZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zZGsvc3JjL2xpYi9jb21tZW50cy9jb21tZW50LWZpZWxkL2NvbW1lbnQtZmllbGQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2RrL3NyYy9saWIvY29tbWVudHMvY29tbWVudC1maWVsZC9jb21tZW50LWZpZWxkLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQWMsV0FBVyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTdGLE9BQU8sRUFBYyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBSXpELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxhQUFhLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7QUFzQnJDLE1BQU0sT0FBTyxxQkFBcUI7SUFDOUIsWUFBb0IsV0FBNEI7UUFBNUIsZ0JBQVcsR0FBWCxXQUFXLENBQWlCO1FBa0N4QyxVQUFLLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUtuQyxlQUFVLEdBQUcsSUFBSSxDQUFDO1FBQ1QscUJBQWdCLEdBQUcsS0FBSyxDQUFDO1FBRXhCLG1CQUFjLEdBQUcsSUFBSSxPQUFPLEVBQVEsQ0FBQztRQUNyQyx1QkFBa0IsR0FBRyxJQUFJLE9BQU8sRUFBUSxDQUFDO1FBRW5ELFlBQU8sR0FBRyxLQUFLLENBQUM7UUFFaEIsZ0JBQVcsR0FBRyxLQUFLLENBQUM7UUFHWixVQUFLLEdBQVksRUFBRSxDQUFDO1FBU25CLGNBQVMsR0FBRyxNQUFNLENBQUM7UUFDbkIsaUJBQVksR0FBRyxTQUFTLENBQUM7UUFDekIsVUFBSyxHQUFHLGdCQUFnQixDQUFDO1FBQ3pCLDBCQUFxQixHQUFHLGFBQWEsQ0FBQztRQUN0Qyxn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Z0JBS0UsZ0JBQWdCO3NCQUF4QixLQUFLO2dCQVdHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0cscUJBQXFCO3NCQUE3QixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNJLFdBQVc7c0JBQXBCLE1BQU07Z0JBQ0UsMEJBQTBCO3NCQUFsQyxLQUFLO2dCQUVxQixjQUFjO3NCQUF4QyxTQUFTO3VCQUFDLGNBQWM7Z0JBQ1csdUJBQXVCO3NCQUExRCxTQUFTO3VCQUFDLHVCQUF1QjtnQkFDWCxVQUFVO3NCQUFoQyxTQUFTO3VCQUFDLFVBQVU7Z0JBRVosUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFRRixxQkFBcUI7c0JBRHhCLE1BQU07Z0JBOE5QLE1BQU07c0JBREwsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRWxlbWVudFJlZiwgSG9zdEJpbmRpbmcsIElucHV0LCBPdXRwdXQsIFZpZXdDaGlsZCB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7IENoYXRNZXNzYWdlLCBDaGF0TWVzc2FnZUF0dGFjaG1lbnQsIFVzZXIgfSBmcm9tIFwiQGJhbnRhL2NvbW1vblwiO1xyXG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBTdWJqZWN0LCBTdWJzY3JpcHRpb24gfSBmcm9tIFwicnhqc1wiO1xyXG5pbXBvcnQgeyBDaGF0QmFja2VuZEJhc2UgfSBmcm9tIFwiLi4vLi4vY2hhdC1iYWNrZW5kLWJhc2VcIjtcclxuaW1wb3J0IHsgQ2hhdFNvdXJjZUJhc2UgfSBmcm9tIFwiLi4vLi4vY2hhdC1zb3VyY2UtYmFzZVwiO1xyXG5pbXBvcnQgeyBBdHRhY2htZW50RnJhZ21lbnQgfSBmcm9tIFwiLi4vLi4vYXR0YWNobWVudC1zY3JhcGVyXCI7XHJcbmltcG9ydCB7IEVNT0pJUyB9IGZyb20gXCIuLi8uLi9lbW9qaVwiO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBBdXRvQ29tcGxldGVPcHRpb24ge1xyXG4gICAgbGFiZWwgOiBzdHJpbmc7XHJcbiAgICBhY3Rpb24/IDogKCkgPT4gdm9pZDtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBIYXNoVGFnIHtcclxuICAgIGhhc2h0YWcgOiBzdHJpbmc7XHJcbiAgICBkZXNjcmlwdGlvbiA6IHN0cmluZztcclxufVxyXG5cclxuaW50ZXJmYWNlIEF0dGFjaG1lbnRGcmFnbWVudFN0YXRlIHtcclxuICAgIGZyYWdtZW50OiBBdHRhY2htZW50RnJhZ21lbnQ7XHJcbiAgICByZXNvbHV0aW9uOiBQcm9taXNlPENoYXRNZXNzYWdlQXR0YWNobWVudD47XHJcbn1cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICdiYW50YS1jb21tZW50LWZpZWxkJyxcclxuICAgIHRlbXBsYXRlVXJsOiAnLi9jb21tZW50LWZpZWxkLmNvbXBvbmVudC5odG1sJyxcclxuICAgIHN0eWxlVXJsczogWycuL2NvbW1lbnQtZmllbGQuY29tcG9uZW50LnNjc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgQ29tbWVudEZpZWxkQ29tcG9uZW50IHtcclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgY2hhdEJhY2tlbmQ6IENoYXRCYWNrZW5kQmFzZSkge1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgX3NvdXJjZSA6IENoYXRTb3VyY2VCYXNlO1xyXG4gICAgQElucHV0KCkgXHJcbiAgICBnZXQgc291cmNlKCkgOiBDaGF0U291cmNlQmFzZSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NvdXJjZTtcclxuICAgIH1cclxuXHJcbiAgICBzZXQgc291cmNlKHZhbHVlKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX3NvdXJjZSkge1xyXG4gICAgICAgICAgICB0aGlzLl9zdWJzPy51bnN1YnNjcmliZSgpO1xyXG4gICAgICAgICAgICB0aGlzLl9zb3VyY2UgPSBudWxsO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5fc291cmNlID0gdmFsdWU7XHJcbiAgICAgICAgdGhpcy5fc3VicyA9IG5ldyBTdWJzY3JpcHRpb24oKTtcclxuICAgICAgICBpZiAodGhpcy5fc291cmNlKSB7XHJcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX3NvdXJjZS5jb25uZWN0aW9uU3RhdGVDaGFuZ2VkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fc3Vicy5hZGQodGhpcy5fc291cmNlLmNvbm5lY3Rpb25TdGF0ZUNoYW5nZWQuc3Vic2NyaWJlKHN0YXRlID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXRlID09PSAnbG9zdCcpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudHJhbnNpZW50TWVzc2FnZSA9IGBSZWNvbm5lY3RpbmcuLi5gO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHN0YXRlID09PSAncmVzdG9yZWQnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRyYW5zaWVudE1lc3NhZ2UgPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RhdGUgPT09ICdjb25uZWN0aW5nJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50cmFuc2llbnRNZXNzYWdlID0gYENvbm5lY3RpbmcuLi5gO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSkpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBfc3VicyA9IG5ldyBTdWJzY3JpcHRpb24oKTtcclxuICAgIEBJbnB1dCgpIHVzZXIgOiBVc2VyO1xyXG5cclxuICAgIEBIb3N0QmluZGluZygnY2xhc3MuY2FuLWNvbW1lbnQnKVxyXG4gICAgQElucHV0KCkgXHJcbiAgICBjYW5Db21tZW50ID0gdHJ1ZTtcclxuICAgIEBJbnB1dCgpIGFsbG93QXR0YWNobWVudHMgPSBmYWxzZTtcclxuXHJcbiAgICBAT3V0cHV0KCkgc2lnbkluU2VsZWN0ZWQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xyXG4gICAgQE91dHB1dCgpIGVkaXRBdmF0YXJTZWxlY3RlZCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XHJcblxyXG4gICAgc2VuZGluZyA9IGZhbHNlO1xyXG4gICAgc2VuZEVycm9yIDogRXJyb3I7XHJcbiAgICBleHBhbmRFcnJvciA9IGZhbHNlO1xyXG4gICAgQElucHV0KCkgdHJhbnNpZW50TWVzc2FnZTogc3RyaW5nO1xyXG5cclxuICAgIHByaXZhdGUgX3RleHQgOiBzdHJpbmcgPSAnJztcclxuICAgIGdldCB0ZXh0KCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl90ZXh0O1xyXG4gICAgfVxyXG5cclxuICAgIHNldCB0ZXh0KHZhbHVlKSB7XHJcbiAgICAgICAgdGhpcy5fdGV4dCA9IHZhbHVlO1xyXG4gICAgfVxyXG5cclxuICAgIEBJbnB1dCgpIHNlbmRMYWJlbCA9ICdTZW5kJztcclxuICAgIEBJbnB1dCgpIHNlbmRpbmdMYWJlbCA9ICdTZW5kaW5nJztcclxuICAgIEBJbnB1dCgpIGxhYmVsID0gJ1Bvc3QgYSBjb21tZW50JztcclxuICAgIEBJbnB1dCgpIHBlcm1pc3Npb25EZW5pZWRMYWJlbCA9ICdVbmF2YWlsYWJsZSc7XHJcbiAgICBASW5wdXQoKSBzaWduSW5MYWJlbCA9ICdTaWduIEluJztcclxuICAgIEBJbnB1dCgpIG1heExlbmd0aCA9IDE1MDA7XHJcbiAgICBASW5wdXQoKSBwbGFjZWhvbGRlciA9ICcnO1xyXG4gICAgQE91dHB1dCgpIHRleHRDaGFuZ2VkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcclxuICAgIEBJbnB1dCgpIHNob3VsZEludGVyY2VwdE1lc3NhZ2VTZW5kPzogKG1lc3NhZ2U6IENoYXRNZXNzYWdlLCBzb3VyY2U6IENoYXRTb3VyY2VCYXNlKSA9PiBib29sZWFuIHwgUHJvbWlzZTxib29sZWFuPjtcclxuXHJcbiAgICBAVmlld0NoaWxkKCdhdXRvY29tcGxldGUnKSBhdXRvY29tcGxldGVFbCA6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+O1xyXG4gICAgQFZpZXdDaGlsZCgnYXV0b2NvbXBsZXRlQ29udGFpbmVyJykgYXV0b2NvbXBsZXRlQ29udGFpbmVyRWwgOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PjtcclxuICAgIEBWaWV3Q2hpbGQoJ3RleHRhcmVhJykgdGV4dGFyZWFFbCA6IEVsZW1lbnRSZWY8SFRNTFRleHRBcmVhRWxlbWVudD47XHJcblxyXG4gICAgQElucHV0KCkgaGFzaHRhZ3MgOiBIYXNoVGFnW107XHJcbiAgICBASW5wdXQoKSBwYXJ0aWNpcGFudHMgOiBVc2VyW10gPSBbXTtcclxuICAgIEBJbnB1dCgpIGdlbmVyaWNBdmF0YXJVcmw6IHN0cmluZztcclxuXHJcbiAgICBnZXQgdXNlckF2YXRhclVybCgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy51c2VyPy5hdmF0YXJVcmwgfHwgdGhpcy5nZW5lcmljQXZhdGFyVXJsO1xyXG4gICAgfVxyXG4gICAgcHJpdmF0ZSBfcGVybWlzc2lvbkRlbmllZEVycm9yID0gbmV3IFN1YmplY3Q8c3RyaW5nPigpO1xyXG5cclxuICAgIEBPdXRwdXQoKVxyXG4gICAgZ2V0IHBlcm1pc3Npb25EZW5pZWRFcnJvcigpOiBPYnNlcnZhYmxlPHN0cmluZz4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9wZXJtaXNzaW9uRGVuaWVkRXJyb3I7XHJcbiAgICB9XHJcblxyXG4gICAgbmdBZnRlclZpZXdJbml0KCkge1xyXG4gICAgICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xyXG4gICAgICAgICAgICBsZXQgcm9vdCA9IGRvY3VtZW50LmJvZHkucXVlcnlTZWxlY3RvcignW25nLXZlcnNpb25dJykgfHwgZG9jdW1lbnQuYm9keTtcclxuICAgICAgICAgICAgcm9vdC5hcHBlbmRDaGlsZCh0aGlzLmF1dG9jb21wbGV0ZUVsLm5hdGl2ZUVsZW1lbnQpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBzZW5kUGVybWlzc2lvbkRlbmllZChtZXNzYWdlOiBzdHJpbmcpIHtcclxuICAgICAgICB0aGlzLl9wZXJtaXNzaW9uRGVuaWVkRXJyb3IubmV4dChtZXNzYWdlKTtcclxuICAgIH1cclxuXHJcbiAgICBzaG93QXV0b0NvbXBsZXRlKG9wdGlvbnMgOiBBdXRvQ29tcGxldGVPcHRpb25bXSkge1xyXG4gICAgICAgIGlmICh0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJylcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMuYXV0b0NvbXBsZXRlU2VsZWN0ZWQgPSAwO1xyXG4gICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlT3B0aW9ucyA9IG9wdGlvbnM7XHJcbiAgICAgICAgbGV0IHBvcyA9IHRoaXMuYXV0b2NvbXBsZXRlQ29udGFpbmVyRWwubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcclxuICAgICAgICBsZXQgc2l6ZSA9IHRoaXMuYXV0b2NvbXBsZXRlRWwubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcclxuXHJcbiAgICAgICAgdGhpcy5hdXRvY29tcGxldGVFbC5uYXRpdmVFbGVtZW50LnN0eWxlLmxlZnQgPSBgJHt3aW5kb3cuc2Nyb2xsWCArIHBvcy5sZWZ0fXB4YDtcclxuICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZUVsLm5hdGl2ZUVsZW1lbnQuc3R5bGUudG9wID0gYCR7d2luZG93LnNjcm9sbFkgKyBwb3MudG9wfXB4YDtcclxuICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZUVsLm5hdGl2ZUVsZW1lbnQuc3R5bGUud2lkdGggPSBgJHtwb3Mud2lkdGh9cHhgO1xyXG4gICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlVmlzaWJsZSA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgYXV0b2NvbXBsZXRlVmlzaWJsZSA9IGZhbHNlO1xyXG4gICAgYXV0b2NvbXBsZXRlT3B0aW9ucyA6IEF1dG9Db21wbGV0ZU9wdGlvbltdID0gW107XHJcblxyXG4gICAgYWN0aXZhdGVBdXRvQ29tcGxldGUob3B0aW9uIDogQXV0b0NvbXBsZXRlT3B0aW9uKSB7XHJcbiAgICAgICAgb3B0aW9uLmFjdGlvbigpO1xyXG4gICAgICAgIHRoaXMuZGlzbWlzc0F1dG9Db21wbGV0ZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIGRpc21pc3NBdXRvQ29tcGxldGUoKSB7XHJcbiAgICAgICAgdGhpcy5hdXRvY29tcGxldGVWaXNpYmxlID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5jb21wbGV0aW9uRnVuYyA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5jb21wbGV0aW9uUHJlZml4ID0gJyc7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBlcnJvclRpbWVvdXQ7XHJcbiAgICBpbmRpY2F0ZUVycm9yKG1lc3NhZ2UgOiBzdHJpbmcpIHtcclxuICAgICAgICB0aGlzLnNlbmRFcnJvciA9IG5ldyBFcnJvcihtZXNzYWdlKTtcclxuICAgICAgICB0aGlzLmV4cGFuZEVycm9yID0gZmFsc2U7XHJcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuZXJyb3JUaW1lb3V0KTtcclxuICAgICAgICB0aGlzLmVycm9yVGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmV4cGFuZEVycm9yID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5lcnJvclRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZXhwYW5kRXJyb3IgPSBmYWxzZTtcclxuICAgICAgICAgICAgfSwgNSoxMDAwKTtcclxuICAgICAgICB9LCAxMDApO1xyXG5cclxuICAgICAgICAvLyBPbiBtb2JpbGUsIGp1c3Qgc2hvdyBhbiBhbGVydCBkaWFsb2dcclxuICAgICAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgd2luZG93LmlubmVyV2lkdGggPCA0MzApXHJcbiAgICAgICAgICAgIGFsZXJ0KG1lc3NhZ2UpO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbXBsZXRpb25GdW5jIDogKHN0ciA6IHN0cmluZykgPT4gQXV0b0NvbXBsZXRlT3B0aW9uW107XHJcblxyXG4gICAgY29tcGxldGlvblByZWZpeCA6IHN0cmluZztcclxuICAgIGF1dG9Db21wbGV0ZVNlbGVjdGVkIDogbnVtYmVyID0gMDtcclxuXHJcbiAgICBnZXQgaXNWYWxpZE1lc3NhZ2UoKSB7XHJcbiAgICAgICAgcmV0dXJuICh0aGlzLnRleHQgfHwgdGhpcy5jaGF0TWVzc2FnZUF0dGFjaG1lbnRzLmxlbmd0aCA+IDApO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBoYXNQZW5kaW5nQXR0YWNobWVudHMoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY2hhdE1lc3NhZ2VBdHRhY2htZW50cy5zb21lKHggPT4geC50cmFuc2llbnRTdGF0ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IHNlbmRCdXR0b25FbmFibGVkKCkge1xyXG4gICAgICAgIGlmICghdGhpcy5jYW5Db21tZW50KSB7XHJcbiAgICAgICAgICAgIC8vIEluIHRoaXMgY2FzZSwgd2Ugd2FudCB0byBlbmFibGUgdGhlIGJ1dHRvbiBiZWNhdXNlIHdlIHdhbnQgdG8gYmUgYWJsZSB0byBcclxuICAgICAgICAgICAgLy8gc2VuZCB0aGUgcGVybWlzc2lvbkRlbmllZCBtZXNzYWdlIHVwIHRvIHRoZSBob3N0LlxyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLmlzVmFsaWRNZXNzYWdlXHJcbiAgICAgICAgICAgICYmICF0aGlzLmhhc1BlbmRpbmdBdHRhY2htZW50c1xyXG4gICAgICAgICAgICAmJiAhdGhpcy5zZW5kaW5nXHJcbiAgICAgICAgO1xyXG4gICAgfVxyXG4gICAgYXN5bmMgYXV0b2NvbXBsZXRlKHJlcGxhY2VtZW50IDogc3RyaW5nKSB7XHJcbiAgICAgICAgbGV0IGVsID0gdGhpcy50ZXh0YXJlYUVsLm5hdGl2ZUVsZW1lbnQ7XHJcbiAgICAgICAgdGhpcy50ZXh0ID0gdGhpcy50ZXh0LnNsaWNlKDAsIGVsLnNlbGVjdGlvblN0YXJ0IC0gdGhpcy5jb21wbGV0aW9uUHJlZml4Lmxlbmd0aCkgKyByZXBsYWNlbWVudCArIHRoaXMudGV4dC5zbGljZShlbC5zZWxlY3Rpb25TdGFydCk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgaW5zZXJ0KHN0ciA6IHN0cmluZykge1xyXG4gICAgICAgIGxldCBlbCA9IHRoaXMudGV4dGFyZWFFbC5uYXRpdmVFbGVtZW50O1xyXG4gICAgICAgIHRoaXMudGV4dCA9IHRoaXMudGV4dC5zbGljZSgwLCBlbC5zZWxlY3Rpb25TdGFydCkgKyBzdHIgKyB0aGlzLnRleHQuc2xpY2UoZWwuc2VsZWN0aW9uU3RhcnQpO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIG9uS2V5RG93bihldmVudCA6IEtleWJvYXJkRXZlbnQpIHtcclxuICAgICAgICBpZiAodGhpcy5hdXRvY29tcGxldGVWaXNpYmxlKSB7XHJcbiAgICAgICAgICAgIGlmIChldmVudC5rZXkgPT09ICdFc2NhcGUnKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmRpc21pc3NBdXRvQ29tcGxldGUoKTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKGV2ZW50LmtleSA9PT0gJ1NoaWZ0Jykge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoZXZlbnQua2V5ID09PSAnRW50ZXInKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5hdXRvY29tcGxldGVPcHRpb25zW3RoaXMuYXV0b0NvbXBsZXRlU2VsZWN0ZWRdKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hY3RpdmF0ZUF1dG9Db21wbGV0ZSh0aGlzLmF1dG9jb21wbGV0ZU9wdGlvbnNbdGhpcy5hdXRvQ29tcGxldGVTZWxlY3RlZF0pO1xyXG4gICAgICAgICAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoZXZlbnQua2V5ID09PSAnQXJyb3dVcCcpIHtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmF1dG9Db21wbGV0ZVNlbGVjdGVkID09PSAwKVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYXV0b0NvbXBsZXRlU2VsZWN0ZWQgPSB0aGlzLmF1dG9jb21wbGV0ZU9wdGlvbnMubGVuZ3RoIC0gMTtcclxuICAgICAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmF1dG9Db21wbGV0ZVNlbGVjdGVkID0gdGhpcy5hdXRvQ29tcGxldGVTZWxlY3RlZCAtIDE7XHJcbiAgICAgICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZXZlbnQua2V5ID09PSAnQXJyb3dEb3duJykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5hdXRvQ29tcGxldGVTZWxlY3RlZCA9ICh0aGlzLmF1dG9Db21wbGV0ZVNlbGVjdGVkICsgMSkgJSB0aGlzLmF1dG9jb21wbGV0ZU9wdGlvbnMubGVuZ3RoO1xyXG4gICAgICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoZXZlbnQua2V5ID09PSAnRW50ZXInICYmIGV2ZW50LmN0cmxLZXkpIHtcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5zZW5kTWVzc2FnZSgpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5jb21wbGV0aW9uRnVuYykge1xyXG4gICAgICAgICAgICBpZiAoZXZlbnQua2V5ID09PSAnQmFja3NwYWNlJykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jb21wbGV0aW9uUHJlZml4ID0gdGhpcy5jb21wbGV0aW9uUHJlZml4LnNsaWNlKDAsIHRoaXMuY29tcGxldGlvblByZWZpeC5sZW5ndGggLSAxKTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5jb21wbGV0aW9uUHJlZml4ID09PSAnJykge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGlzbWlzc0F1dG9Db21wbGV0ZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIGlmIChldmVudC5rZXkgPT09ICcgJyB8fCBldmVudC5rZXkubGVuZ3RoID4gMSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5kaXNtaXNzQXV0b0NvbXBsZXRlKCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvbXBsZXRpb25QcmVmaXggKz0gZXZlbnQua2V5O1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLnNob3dBdXRvQ29tcGxldGUodGhpcy5jb21wbGV0aW9uRnVuYyh0aGlzLmNvbXBsZXRpb25QcmVmaXgpKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAoZXZlbnQua2V5ID09PSAnOicpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc3RhcnRBdXRvQ29tcGxldGUoZXZlbnQsIHByZWZpeCA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgcHJlZml4ID0gcHJlZml4LnNsaWNlKDEpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAvLyBtYWtlcyA6LSksIDotKCBldGMgd29yayAoYXMgdGhleSBhcmUgXCI6KVwiIGV0YyBpbiB0aGUgZGIpXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHByZWZpeC5zdGFydHNXaXRoKCctJykpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHByZWZpeCA9IHByZWZpeC5zbGljZSgxKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKEVNT0pJUylcclxuICAgICAgICAgICAgICAgICAgICAgICAgLmZpbHRlcihrID0+IGsuaW5jbHVkZXMocHJlZml4KSB8fCBFTU9KSVNba10ua2V5d29yZHMuc29tZShrdyA9PiBrdy5pbmNsdWRlcyhwcmVmaXgpKSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgLm1hcChrID0+ICh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogYCR7RU1PSklTW2tdLmNoYXJ9ICR7a31gLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uOiAoKSA9PiB0aGlzLmF1dG9jb21wbGV0ZShFTU9KSVNba10uY2hhcilcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSkpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC5zbGljZSgwLCA1KVxyXG4gICAgICAgICAgICAgICAgICAgIDtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGV2ZW50LmtleSA9PT0gJ0AnKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXJ0QXV0b0NvbXBsZXRlKGV2ZW50LCBwcmVmaXggPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHByZWZpeCA9IHByZWZpeC5zbGljZSgxKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5wYXJ0aWNpcGFudHMuZmlsdGVyKHggPT4geC51c2VybmFtZS5pbmNsdWRlcyhwcmVmaXgpKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAubWFwKHAgPT4gKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsOiBgQCR7cC51c2VybmFtZX0gLS0gJHtwLmRpc3BsYXlOYW1lfWAsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb246ICgpID0+IHRoaXMuYXV0b2NvbXBsZXRlKGBAJHtwLnVzZXJuYW1lfWApXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pKVxyXG4gICAgICAgICAgICAgICAgICAgIDtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGV2ZW50LmtleSA9PT0gJyMnKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXJ0QXV0b0NvbXBsZXRlKGV2ZW50LCBwcmVmaXggPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHByZWZpeCA9IHByZWZpeC5zbGljZSgxKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuaGFzaHRhZ3NcclxuICAgICAgICAgICAgICAgICAgICAgICAgLmZpbHRlcihodCA9PiBodC5oYXNodGFnLmluY2x1ZGVzKHByZWZpeCkpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC5tYXAoaHQgPT4gKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsOiBgIyR7aHQuaGFzaHRhZ30ke2h0LmRlc2NyaXB0aW9uID8gYCAtLSAke2h0LmRlc2NyaXB0aW9ufWAgOiBgYH1gLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uOiAoKSA9PiB0aGlzLmF1dG9jb21wbGV0ZShgIyR7aHQuaGFzaHRhZ31gKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgLnNsaWNlKDAsIDUpXHJcbiAgICAgICAgICAgICAgICAgICAgO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgc3RhcnRBdXRvQ29tcGxldGUoZXZlbnQgOiBLZXlib2FyZEV2ZW50LCBjb21wbGV0aW9uRnVuYyA6IChzdHIgOiBzdHJpbmcpID0+IEF1dG9Db21wbGV0ZU9wdGlvbltdKSB7XHJcbiAgICAgICAgdGhpcy5jb21wbGV0aW9uUHJlZml4ID0gZXZlbnQua2V5O1xyXG4gICAgICAgIHRoaXMuY29tcGxldGlvbkZ1bmMgPSBjb21wbGV0aW9uRnVuYztcclxuICAgICAgICB0aGlzLnNob3dBdXRvQ29tcGxldGUodGhpcy5jb21wbGV0aW9uRnVuYyh0aGlzLmNvbXBsZXRpb25QcmVmaXgpKTtcclxuICAgIH1cclxuXHJcbiAgICBvbkJsdXIoKSB7XHJcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLmRpc21pc3NBdXRvQ29tcGxldGUoKSwgMjUwKTtcclxuICAgIH1cclxuXHJcbiAgICBpbnNlcnRFbW9qaSh0ZXh0IDogc3RyaW5nKSB7XHJcbiAgICAgICAgdGhpcy50ZXh0ICs9IHRleHQ7XHJcbiAgICB9XHJcblxyXG4gICAgc2hvd1NpZ25JbigpIHtcclxuICAgICAgICB0aGlzLnNpZ25JblNlbGVjdGVkLm5leHQoKTtcclxuICAgIH1cclxuXHJcbiAgICBzaG93RWRpdEF2YXRhcigpIHtcclxuICAgICAgICB0aGlzLmVkaXRBdmF0YXJTZWxlY3RlZC5uZXh0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgQElucHV0KClcclxuICAgIHN1Ym1pdDogKG1lc3NhZ2U6IENoYXRNZXNzYWdlKSA9PiBib29sZWFuO1xyXG5cclxuICAgIGFzeW5jIHNlbmRNZXNzYWdlKCkge1xyXG4gICAgICAgIGlmICghdGhpcy5zb3VyY2UpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuXHJcbiAgICAgICAgdGhpcy5zZW5kaW5nID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnNlbmRFcnJvciA9IG51bGw7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgbGV0IHRleHQgPSAodGhpcy50ZXh0IHx8ICcnKS50cmltKCk7XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5jYW5Db21tZW50ICYmICF0aGlzLmlzVmFsaWRNZXNzYWdlKVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG5cclxuICAgICAgICAgICAgbGV0IG1lc3NhZ2UgOiBDaGF0TWVzc2FnZSA9IHtcclxuICAgICAgICAgICAgICAgIHVzZXI6IHRoaXMudXNlcixcclxuICAgICAgICAgICAgICAgIHNlbnRBdDogRGF0ZS5ub3coKSxcclxuICAgICAgICAgICAgICAgIHVybDogdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgPyBsb2NhdGlvbi5ocmVmIDogdW5kZWZpbmVkLFxyXG4gICAgICAgICAgICAgICAgbGlrZXM6IDAsXHJcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiB0ZXh0LFxyXG4gICAgICAgICAgICAgICAgYXR0YWNobWVudHM6IHRoaXMuY2hhdE1lc3NhZ2VBdHRhY2htZW50cy5maWx0ZXIoeCA9PiB4LnVybClcclxuICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnN1Ym1pdChtZXNzYWdlKTtcclxuICAgICAgICAgICAgICAgIHRoaXMudGV4dCA9ICcnO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jaGF0TWVzc2FnZUF0dGFjaG1lbnRzID0gW107XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIGF3YWl0IG5ldyBQcm9taXNlPHZvaWQ+KHJlc29sdmUgPT4gc2V0VGltZW91dCgoKSA9PiByZXNvbHZlKCksIDEwMDApKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuaW5kaWNhdGVFcnJvcihlLm1lc3NhZ2UpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH0gZmluYWxseSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2VuZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMudGV4dGFyZWFFbC5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XHJcbiAgICAgICAgICAgIH0sIDEwMCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGNoYXRNZXNzYWdlQXR0YWNobWVudHM6IENoYXRNZXNzYWdlQXR0YWNobWVudFtdID0gW107XHJcblxyXG4gICAgYWRkZWRBdHRhY2htZW50KGF0dGFjaG1lbnQ6IENoYXRNZXNzYWdlQXR0YWNobWVudCkge1xyXG4gICAgICAgIHRoaXMuY2hhdE1lc3NhZ2VBdHRhY2htZW50cy5wdXNoKGF0dGFjaG1lbnQpO1xyXG4gICAgfVxyXG5cclxuICAgIGF0dGFjaG1lbnRFcnJvcihhdHRhY2htZW50OiBDaGF0TWVzc2FnZUF0dGFjaG1lbnQpIHtcclxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5jaGF0TWVzc2FnZUF0dGFjaG1lbnRzID0gdGhpcy5jaGF0TWVzc2FnZUF0dGFjaG1lbnRzLmZpbHRlcih4ID0+IHggIT09IGF0dGFjaG1lbnQpO1xyXG4gICAgICAgIH0sIDMwMDApO1xyXG4gICAgfVxyXG5cclxuXHRyZW1vdmVBdHRhY2htZW50KGF0dGFjaG1lbnQ6IENoYXRNZXNzYWdlQXR0YWNobWVudCkge1xyXG4gICAgICAgIGxldCBpbmRleCA9IHRoaXMuY2hhdE1lc3NhZ2VBdHRhY2htZW50cy5pbmRleE9mKGF0dGFjaG1lbnQpO1xyXG4gICAgICAgIGlmIChpbmRleCA+PSAwKVxyXG5cdFx0ICAgIHRoaXMuY2hhdE1lc3NhZ2VBdHRhY2htZW50cy5zcGxpY2UoaW5kZXgsIDEpO1xyXG5cdH1cclxuXHJcbiAgICBhbGVydEVycm9yKCkge1xyXG4gICAgICAgIGlmICghdGhpcy5zZW5kRXJyb3IpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBhbGVydCh0aGlzLnNlbmRFcnJvci5tZXNzYWdlKTtcclxuICAgIH1cclxufVxyXG4iLCI8Zm9ybSBjbGFzcz1cIm5ldy1tZXNzYWdlXCIgKHN1Ym1pdCk9XCJzZW5kTWVzc2FnZSgpXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiYXZhdGFyLWNvbnRhaW5lclwiPlxyXG4gICAgICAgIDxhICBocmVmPVwiamF2YXNjcmlwdDo7XCJcclxuICAgICAgICAgICAgY2xhc3M9XCJhdmF0YXJcIlxyXG4gICAgICAgICAgICAoY2xpY2spPVwic2hvd0VkaXRBdmF0YXIoKVwiXHJcbiAgICAgICAgICAgIFtzdHlsZS5iYWNrZ3JvdW5kLWltYWdlXT1cIid1cmwoJyArIHVzZXJBdmF0YXJVcmwgKyAnKSdcIlxyXG4gICAgICAgICAgICA+PC9hPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwidGV4dC1jb250YWluZXJcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZmllbGQtY29udGFpbmVyXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmaWVsZC1yb3dcIj5cclxuICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cIm1lc3NhZ2UtZmllbGRcIiBhcHBlYXJhbmNlPVwib3V0bGluZVwiIGZsb2F0TGFiZWw9XCJhbHdheXNcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bWF0LWxhYmVsPnt7bGFiZWx9fTwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgIDx0ZXh0YXJlYVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAjdGV4dGFyZWFcclxuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZT1cIm1lc3NhZ2VcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBhdHRhY2htZW50U2NyYXBlclxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbKGF0dGFjaG1lbnRzKV09XCJjaGF0TWVzc2FnZUF0dGFjaG1lbnRzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cInBsYWNlaG9sZGVyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0SW5wdXRcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2RrVGV4dGFyZWFBdXRvc2l6ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbbWF4bGVuZ3RoXT1cIm1heExlbmd0aFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChrZXlkb3duKT1cIm9uS2V5RG93bigkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKGJsdXIpPVwib25CbHVyKClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwic2VuZGluZ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwidGV4dFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGF1dG9jb21wbGV0ZT1cIm9mZlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgID48L3RleHRhcmVhPlxyXG4gICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJvcHRpb25zLWxpbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bWF0LXNwaW5uZXIgKm5nSWY9XCJzZW5kaW5nXCIgY2xhc3M9XCJpY29uIGxvYWRpbmdcIiBkaWFtZXRlcj1cIjE4XCIgc3Ryb2tlV2lkdGg9XCIyXCI+PC9tYXQtc3Bpbm5lcj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwic2VuZEVycm9yXCIgY2xhc3M9XCJlcnJvci1tZXNzYWdlXCIgW2NsYXNzLmV4cGFuZGVkXT1cImV4cGFuZEVycm9yXCIgW21hdFRvb2x0aXBdPVwic2VuZEVycm9yLm1lc3NhZ2VcIiAoY2xpY2spPVwiYWxlcnRFcnJvcigpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiAqbmdJZj1cInNlbmRFcnJvclwiPmVycm9yPC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAge3tzZW5kRXJyb3IubWVzc2FnZX19XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cIiFzZW5kRXJyb3IgJiYgdHJhbnNpZW50TWVzc2FnZVwiIGNsYXNzPVwidHJhbnNpZW50LW1lc3NhZ2VcIiBbY2xhc3MuZXhwYW5kZWRdPVwidHJ1ZVwiIFttYXRUb29sdGlwXT1cInRyYW5zaWVudE1lc3NhZ2VcIiAoY2xpY2spPVwiYWxlcnRFcnJvcigpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtc3Bpbm5lciBbaW5saW5lXT1cInRydWVcIiBbZGlhbWV0ZXJdPVwiMTVcIj48L21hdC1zcGlubmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7e3RyYW5zaWVudE1lc3NhZ2V9fVxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzcGFjZXJcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3VzdG9tXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8YmFudGEtYXR0YWNobWVudC1idXR0b24gXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiYWxsb3dBdHRhY2htZW50c1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChhZGRlZEF0dGFjaG1lbnQpPVwiYWRkZWRBdHRhY2htZW50KCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAoYXR0YWNobWVudEVycm9yKT1cImF0dGFjaG1lbnRFcnJvcigkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgPjwvYmFudGEtYXR0YWNobWVudC1idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgPGVtb2ppLXNlbGVjdG9yLWJ1dHRvbiAoc2VsZWN0ZWQpPVwiaW5zZXJ0RW1vamkoJGV2ZW50KVwiPjwvZW1vamktc2VsZWN0b3ItYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgI2F1dG9jb21wbGV0ZUNvbnRhaW5lciBjbGFzcz1cImF1dG9jb21wbGV0ZS1jb250YWluZXJcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgI2F1dG9jb21wbGV0ZSBjbGFzcz1cImF1dG9jb21wbGV0ZVwiIFtjbGFzcy52aXNpYmxlXT1cImF1dG9jb21wbGV0ZVZpc2libGVcIj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHN0cm9uZz57e2NvbXBsZXRpb25QcmVmaXh9fTwvc3Ryb25nPi4uLlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxhXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdC1idXR0b25cclxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IG9wdGlvbiBvZiBhdXRvY29tcGxldGVPcHRpb25zOyBpbmRleCBhcyBpbmRleFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJhY3RpdmF0ZUF1dG9Db21wbGV0ZShvcHRpb24pXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmFjdGl2ZV09XCJhdXRvQ29tcGxldGVTZWxlY3RlZCA9PT0gaW5kZXhcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHt7b3B0aW9uLmxhYmVsfX1cclxuICAgICAgICAgICAgICAgICAgICA8L2E+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8YmFudGEtYXR0YWNobWVudHMgXHJcbiAgICAgICAgICAgICAgICBbYXR0YWNobWVudHNdPVwiY2hhdE1lc3NhZ2VBdHRhY2htZW50c1wiXHJcbiAgICAgICAgICAgICAgICBbZWRpdGluZ109XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgIChyZW1vdmUpPVwicmVtb3ZlQXR0YWNobWVudCgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgID48L2JhbnRhLWF0dGFjaG1lbnRzPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwiYWN0aW9uc1wiPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhdXNlclwiPlxyXG4gICAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgICBtYXQtcmFpc2VkLWJ1dHRvblxyXG4gICAgICAgICAgICAgICAgY29sb3I9XCJwcmltYXJ5XCJcclxuICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cInNob3dTaWduSW4oKVwiXHJcbiAgICAgICAgICAgICAgICA+e3tzaWduSW5MYWJlbH19PC9idXR0b24+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInVzZXJcIj5cclxuICAgICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICAgICAgbWF0LXJhaXNlZC1idXR0b25cclxuICAgICAgICAgICAgICAgIGNsYXNzPVwic2VuZFwiXHJcbiAgICAgICAgICAgICAgICBjb2xvcj1cInByaW1hcnlcIlxyXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIiFzZW5kQnV0dG9uRW5hYmxlZFwiXHJcbiAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY2FuQ29tbWVudFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiAqbmdJZj1cIiFzZW5kaW5nXCI+Y2hldnJvbl9yaWdodDwvbWF0LWljb24+XHJcbiAgICAgICAgICAgICAgICAgICAgPG1hdC1zcGlubmVyICpuZ0lmPVwic2VuZGluZ1wiIGNsYXNzPVwiaWNvblwiIGRpYW1ldGVyPVwiMThcIiBzdHJva2VXaWR0aD1cIjJcIj48L21hdC1zcGlubmVyPlxyXG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImxhYmVsXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFjYW5Db21tZW50XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHt7cGVybWlzc2lvbkRlbmllZExhYmVsfX1cclxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY2FuQ29tbWVudFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIXNlbmRpbmdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7c2VuZExhYmVsfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzZW5kaW5nXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e3NlbmRpbmdMYWJlbH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgIDwvZGl2PlxyXG48L2Zvcm0+Il19
|
|
380
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbWVudC1maWVsZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zZGsvc3JjL2xpYi9jb21tZW50cy9jb21tZW50LWZpZWxkL2NvbW1lbnQtZmllbGQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2RrL3NyYy9saWIvY29tbWVudHMvY29tbWVudC1maWVsZC9jb21tZW50LWZpZWxkLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQWMsV0FBVyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTdGLE9BQU8sRUFBYyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBSXpELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxhQUFhLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7QUFzQnJDLE1BQU0sT0FBTyxxQkFBcUI7SUFDOUIsWUFBb0IsV0FBNEI7UUFBNUIsZ0JBQVcsR0FBWCxXQUFXLENBQWlCO1FBcUN4QyxVQUFLLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUtuQyxlQUFVLEdBQUcsSUFBSSxDQUFDO1FBQ1QscUJBQWdCLEdBQUcsS0FBSyxDQUFDO1FBRXhCLG1CQUFjLEdBQUcsSUFBSSxPQUFPLEVBQVEsQ0FBQztRQUNyQyx1QkFBa0IsR0FBRyxJQUFJLE9BQU8sRUFBUSxDQUFDO1FBRW5ELFlBQU8sR0FBRyxLQUFLLENBQUM7UUFFaEIsZ0JBQVcsR0FBRyxLQUFLLENBQUM7UUFHWixVQUFLLEdBQVksRUFBRSxDQUFDO1FBU25CLGNBQVMsR0FBRyxNQUFNLENBQUM7UUFDbkIsaUJBQVksR0FBRyxTQUFTLENBQUM7UUFDekIsVUFBSyxHQUFHLGdCQUFnQixDQUFDO1FBQ3pCLDBCQUFxQixHQUFHLGFBQWEsQ0FBQztRQUN0Qyxn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bUI7O3NCQUMvQixLQUFLO2dCQUVHLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFFSSxjQUFjO3NCQUF2QixNQUFNO2dCQUNHLGtCQUFrQjtzQkFBM0IsTUFBTTtnQkFLRSxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBV0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxxQkFBcUI7c0JBQTdCLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0ksV0FBVztzQkFBcEIsTUFBTTtnQkFDRSwwQkFBMEI7c0JBQWxDLEtBQUs7Z0JBRXFCLGNBQWM7c0JBQXhDLFNBQVM7dUJBQUMsY0FBYztnQkFDVyx1QkFBdUI7c0JBQTFELFNBQVM7dUJBQUMsdUJBQXVCO2dCQUNYLFVBQVU7c0JBQWhDLFNBQVM7dUJBQUMsVUFBVTtnQkFFWixRQUFRO3NCQUFoQixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csZ0JBQWdCO3NCQUF4QixLQUFLO2dCQVFGLHFCQUFxQjtzQkFEeEIsTUFBTTtnQkE4TlAsTUFBTTtzQkFETCxLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBIb3N0QmluZGluZywgSW5wdXQsIE91dHB1dCwgVmlld0NoaWxkIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgQ2hhdE1lc3NhZ2UsIENoYXRNZXNzYWdlQXR0YWNobWVudCwgVXNlciB9IGZyb20gXCJAYmFudGEvY29tbW9uXCI7XHJcbmltcG9ydCB7IE9ic2VydmFibGUsIFN1YmplY3QsIFN1YnNjcmlwdGlvbiB9IGZyb20gXCJyeGpzXCI7XHJcbmltcG9ydCB7IENoYXRCYWNrZW5kQmFzZSB9IGZyb20gXCIuLi8uLi9jaGF0LWJhY2tlbmQtYmFzZVwiO1xyXG5pbXBvcnQgeyBDaGF0U291cmNlQmFzZSB9IGZyb20gXCIuLi8uLi9jaGF0LXNvdXJjZS1iYXNlXCI7XHJcbmltcG9ydCB7IEF0dGFjaG1lbnRGcmFnbWVudCB9IGZyb20gXCIuLi8uLi9hdHRhY2htZW50LXNjcmFwZXJcIjtcclxuaW1wb3J0IHsgRU1PSklTIH0gZnJvbSBcIi4uLy4uL2Vtb2ppXCI7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIEF1dG9Db21wbGV0ZU9wdGlvbiB7XHJcbiAgICBsYWJlbCA6IHN0cmluZztcclxuICAgIGFjdGlvbj8gOiAoKSA9PiB2b2lkO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIEhhc2hUYWcge1xyXG4gICAgaGFzaHRhZyA6IHN0cmluZztcclxuICAgIGRlc2NyaXB0aW9uIDogc3RyaW5nO1xyXG59XHJcblxyXG5pbnRlcmZhY2UgQXR0YWNobWVudEZyYWdtZW50U3RhdGUge1xyXG4gICAgZnJhZ21lbnQ6IEF0dGFjaG1lbnRGcmFnbWVudDtcclxuICAgIHJlc29sdXRpb246IFByb21pc2U8Q2hhdE1lc3NhZ2VBdHRhY2htZW50PjtcclxufVxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ2JhbnRhLWNvbW1lbnQtZmllbGQnLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuL2NvbW1lbnQtZmllbGQuY29tcG9uZW50Lmh0bWwnLFxyXG4gICAgc3R5bGVVcmxzOiBbJy4vY29tbWVudC1maWVsZC5jb21wb25lbnQuc2NzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDb21tZW50RmllbGRDb21wb25lbnQge1xyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBjaGF0QmFja2VuZDogQ2hhdEJhY2tlbmRCYXNlKSB7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBfc291cmNlIDogQ2hhdFNvdXJjZUJhc2U7XHJcbiAgICBASW5wdXQoKSBcclxuICAgIGdldCBzb3VyY2UoKSA6IENoYXRTb3VyY2VCYXNlIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fc291cmNlO1xyXG4gICAgfVxyXG5cclxuICAgIHNldCBzb3VyY2UodmFsdWUpIHtcclxuICAgICAgICBpZiAodGhpcy5fc291cmNlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3N1YnM/LnVuc3Vic2NyaWJlKCk7XHJcbiAgICAgICAgICAgIHRoaXMuX3NvdXJjZSA9IG51bGw7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLl9zb3VyY2UgPSB2YWx1ZTtcclxuICAgICAgICB0aGlzLl9zdWJzID0gbmV3IFN1YnNjcmlwdGlvbigpO1xyXG4gICAgICAgIGlmICh0aGlzLl9zb3VyY2UpIHtcclxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fc291cmNlLmNvbm5lY3Rpb25TdGF0ZUNoYW5nZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9zdWJzLmFkZCh0aGlzLl9zb3VyY2UuY29ubmVjdGlvblN0YXRlQ2hhbmdlZC5zdWJzY3JpYmUoc3RhdGUgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdGUgPT09ICdsb3N0Jykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX3NvdXJjZS5lcnJvclN0YXRlID09PSAnc2VydmVyLWlzc3VlJylcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRyYW5zaWVudE1lc3NhZ2UgPSBgRXJyb3Igb2NjdXJyZWQsIHRyeWluZyBhZ2Fpbi4uLmA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50cmFuc2llbnRNZXNzYWdlID0gYFJlY29ubmVjdGluZy4uLmA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RhdGUgPT09ICdyZXN0b3JlZCcpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudHJhbnNpZW50TWVzc2FnZSA9IHVuZGVmaW5lZDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzdGF0ZSA9PT0gJ2Nvbm5lY3RpbmcnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRyYW5zaWVudE1lc3NhZ2UgPSBgQ29ubmVjdGluZy4uLmA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9KSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIF9zdWJzID0gbmV3IFN1YnNjcmlwdGlvbigpO1xyXG4gICAgQElucHV0KCkgdXNlciA6IFVzZXI7XHJcblxyXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5jYW4tY29tbWVudCcpXHJcbiAgICBASW5wdXQoKSBcclxuICAgIGNhbkNvbW1lbnQgPSB0cnVlO1xyXG4gICAgQElucHV0KCkgYWxsb3dBdHRhY2htZW50cyA9IGZhbHNlO1xyXG5cclxuICAgIEBPdXRwdXQoKSBzaWduSW5TZWxlY3RlZCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XHJcbiAgICBAT3V0cHV0KCkgZWRpdEF2YXRhclNlbGVjdGVkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcclxuXHJcbiAgICBzZW5kaW5nID0gZmFsc2U7XHJcbiAgICBzZW5kRXJyb3IgOiBFcnJvcjtcclxuICAgIGV4cGFuZEVycm9yID0gZmFsc2U7XHJcbiAgICBASW5wdXQoKSB0cmFuc2llbnRNZXNzYWdlOiBzdHJpbmc7XHJcblxyXG4gICAgcHJpdmF0ZSBfdGV4dCA6IHN0cmluZyA9ICcnO1xyXG4gICAgZ2V0IHRleHQoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3RleHQ7XHJcbiAgICB9XHJcblxyXG4gICAgc2V0IHRleHQodmFsdWUpIHtcclxuICAgICAgICB0aGlzLl90ZXh0ID0gdmFsdWU7XHJcbiAgICB9XHJcblxyXG4gICAgQElucHV0KCkgc2VuZExhYmVsID0gJ1NlbmQnO1xyXG4gICAgQElucHV0KCkgc2VuZGluZ0xhYmVsID0gJ1NlbmRpbmcnO1xyXG4gICAgQElucHV0KCkgbGFiZWwgPSAnUG9zdCBhIGNvbW1lbnQnO1xyXG4gICAgQElucHV0KCkgcGVybWlzc2lvbkRlbmllZExhYmVsID0gJ1VuYXZhaWxhYmxlJztcclxuICAgIEBJbnB1dCgpIHNpZ25JbkxhYmVsID0gJ1NpZ24gSW4nO1xyXG4gICAgQElucHV0KCkgbWF4TGVuZ3RoID0gMTUwMDtcclxuICAgIEBJbnB1dCgpIHBsYWNlaG9sZGVyID0gJyc7XHJcbiAgICBAT3V0cHV0KCkgdGV4dENoYW5nZWQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xyXG4gICAgQElucHV0KCkgc2hvdWxkSW50ZXJjZXB0TWVzc2FnZVNlbmQ/OiAobWVzc2FnZTogQ2hhdE1lc3NhZ2UsIHNvdXJjZTogQ2hhdFNvdXJjZUJhc2UpID0+IGJvb2xlYW4gfCBQcm9taXNlPGJvb2xlYW4+O1xyXG5cclxuICAgIEBWaWV3Q2hpbGQoJ2F1dG9jb21wbGV0ZScpIGF1dG9jb21wbGV0ZUVsIDogRWxlbWVudFJlZjxIVE1MRWxlbWVudD47XHJcbiAgICBAVmlld0NoaWxkKCdhdXRvY29tcGxldGVDb250YWluZXInKSBhdXRvY29tcGxldGVDb250YWluZXJFbCA6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+O1xyXG4gICAgQFZpZXdDaGlsZCgndGV4dGFyZWEnKSB0ZXh0YXJlYUVsIDogRWxlbWVudFJlZjxIVE1MVGV4dEFyZWFFbGVtZW50PjtcclxuXHJcbiAgICBASW5wdXQoKSBoYXNodGFncyA6IEhhc2hUYWdbXTtcclxuICAgIEBJbnB1dCgpIHBhcnRpY2lwYW50cyA6IFVzZXJbXSA9IFtdO1xyXG4gICAgQElucHV0KCkgZ2VuZXJpY0F2YXRhclVybDogc3RyaW5nO1xyXG5cclxuICAgIGdldCB1c2VyQXZhdGFyVXJsKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnVzZXI/LmF2YXRhclVybCB8fCB0aGlzLmdlbmVyaWNBdmF0YXJVcmw7XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIF9wZXJtaXNzaW9uRGVuaWVkRXJyb3IgPSBuZXcgU3ViamVjdDxzdHJpbmc+KCk7XHJcblxyXG4gICAgQE91dHB1dCgpXHJcbiAgICBnZXQgcGVybWlzc2lvbkRlbmllZEVycm9yKCk6IE9ic2VydmFibGU8c3RyaW5nPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Blcm1pc3Npb25EZW5pZWRFcnJvcjtcclxuICAgIH1cclxuXHJcbiAgICBuZ0FmdGVyVmlld0luaXQoKSB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICAgICAgICAgIGxldCByb290ID0gZG9jdW1lbnQuYm9keS5xdWVyeVNlbGVjdG9yKCdbbmctdmVyc2lvbl0nKSB8fCBkb2N1bWVudC5ib2R5O1xyXG4gICAgICAgICAgICByb290LmFwcGVuZENoaWxkKHRoaXMuYXV0b2NvbXBsZXRlRWwubmF0aXZlRWxlbWVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHNlbmRQZXJtaXNzaW9uRGVuaWVkKG1lc3NhZ2U6IHN0cmluZykge1xyXG4gICAgICAgIHRoaXMuX3Blcm1pc3Npb25EZW5pZWRFcnJvci5uZXh0KG1lc3NhZ2UpO1xyXG4gICAgfVxyXG5cclxuICAgIHNob3dBdXRvQ29tcGxldGUob3B0aW9ucyA6IEF1dG9Db21wbGV0ZU9wdGlvbltdKSB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiB3aW5kb3cgPT09ICd1bmRlZmluZWQnKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5hdXRvQ29tcGxldGVTZWxlY3RlZCA9IDA7XHJcbiAgICAgICAgdGhpcy5hdXRvY29tcGxldGVPcHRpb25zID0gb3B0aW9ucztcclxuICAgICAgICBsZXQgcG9zID0gdGhpcy5hdXRvY29tcGxldGVDb250YWluZXJFbC5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xyXG4gICAgICAgIGxldCBzaXplID0gdGhpcy5hdXRvY29tcGxldGVFbC5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xyXG5cclxuICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZUVsLm5hdGl2ZUVsZW1lbnQuc3R5bGUubGVmdCA9IGAke3dpbmRvdy5zY3JvbGxYICsgcG9zLmxlZnR9cHhgO1xyXG4gICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlRWwubmF0aXZlRWxlbWVudC5zdHlsZS50b3AgPSBgJHt3aW5kb3cuc2Nyb2xsWSArIHBvcy50b3B9cHhgO1xyXG4gICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlRWwubmF0aXZlRWxlbWVudC5zdHlsZS53aWR0aCA9IGAke3Bvcy53aWR0aH1weGA7XHJcbiAgICAgICAgdGhpcy5hdXRvY29tcGxldGVWaXNpYmxlID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBhdXRvY29tcGxldGVWaXNpYmxlID0gZmFsc2U7XHJcbiAgICBhdXRvY29tcGxldGVPcHRpb25zIDogQXV0b0NvbXBsZXRlT3B0aW9uW10gPSBbXTtcclxuXHJcbiAgICBhY3RpdmF0ZUF1dG9Db21wbGV0ZShvcHRpb24gOiBBdXRvQ29tcGxldGVPcHRpb24pIHtcclxuICAgICAgICBvcHRpb24uYWN0aW9uKCk7XHJcbiAgICAgICAgdGhpcy5kaXNtaXNzQXV0b0NvbXBsZXRlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgZGlzbWlzc0F1dG9Db21wbGV0ZSgpIHtcclxuICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZVZpc2libGUgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmNvbXBsZXRpb25GdW5jID0gbnVsbDtcclxuICAgICAgICB0aGlzLmNvbXBsZXRpb25QcmVmaXggPSAnJztcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGVycm9yVGltZW91dDtcclxuICAgIGluZGljYXRlRXJyb3IobWVzc2FnZSA6IHN0cmluZykge1xyXG4gICAgICAgIHRoaXMuc2VuZEVycm9yID0gbmV3IEVycm9yKG1lc3NhZ2UpO1xyXG4gICAgICAgIHRoaXMuZXhwYW5kRXJyb3IgPSBmYWxzZTtcclxuICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5lcnJvclRpbWVvdXQpO1xyXG4gICAgICAgIHRoaXMuZXJyb3JUaW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuZXhwYW5kRXJyb3IgPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLmVycm9yVGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5leHBhbmRFcnJvciA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9LCA1KjEwMDApO1xyXG4gICAgICAgIH0sIDEwMCk7XHJcblxyXG4gICAgICAgIC8vIE9uIG1vYmlsZSwganVzdCBzaG93IGFuIGFsZXJ0IGRpYWxvZ1xyXG4gICAgICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB3aW5kb3cuaW5uZXJXaWR0aCA8IDQzMClcclxuICAgICAgICAgICAgYWxlcnQobWVzc2FnZSk7XHJcbiAgICB9XHJcblxyXG4gICAgY29tcGxldGlvbkZ1bmMgOiAoc3RyIDogc3RyaW5nKSA9PiBBdXRvQ29tcGxldGVPcHRpb25bXTtcclxuXHJcbiAgICBjb21wbGV0aW9uUHJlZml4IDogc3RyaW5nO1xyXG4gICAgYXV0b0NvbXBsZXRlU2VsZWN0ZWQgOiBudW1iZXIgPSAwO1xyXG5cclxuICAgIGdldCBpc1ZhbGlkTWVzc2FnZSgpIHtcclxuICAgICAgICByZXR1cm4gKHRoaXMudGV4dCB8fCB0aGlzLmNoYXRNZXNzYWdlQXR0YWNobWVudHMubGVuZ3RoID4gMCk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGhhc1BlbmRpbmdBdHRhY2htZW50cygpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5jaGF0TWVzc2FnZUF0dGFjaG1lbnRzLnNvbWUoeCA9PiB4LnRyYW5zaWVudFN0YXRlKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgc2VuZEJ1dHRvbkVuYWJsZWQoKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmNhbkNvbW1lbnQpIHtcclxuICAgICAgICAgICAgLy8gSW4gdGhpcyBjYXNlLCB3ZSB3YW50IHRvIGVuYWJsZSB0aGUgYnV0dG9uIGJlY2F1c2Ugd2Ugd2FudCB0byBiZSBhYmxlIHRvIFxyXG4gICAgICAgICAgICAvLyBzZW5kIHRoZSBwZXJtaXNzaW9uRGVuaWVkIG1lc3NhZ2UgdXAgdG8gdGhlIGhvc3QuXHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNWYWxpZE1lc3NhZ2VcclxuICAgICAgICAgICAgJiYgIXRoaXMuaGFzUGVuZGluZ0F0dGFjaG1lbnRzXHJcbiAgICAgICAgICAgICYmICF0aGlzLnNlbmRpbmdcclxuICAgICAgICA7XHJcbiAgICB9XHJcbiAgICBhc3luYyBhdXRvY29tcGxldGUocmVwbGFjZW1lbnQgOiBzdHJpbmcpIHtcclxuICAgICAgICBsZXQgZWwgPSB0aGlzLnRleHRhcmVhRWwubmF0aXZlRWxlbWVudDtcclxuICAgICAgICB0aGlzLnRleHQgPSB0aGlzLnRleHQuc2xpY2UoMCwgZWwuc2VsZWN0aW9uU3RhcnQgLSB0aGlzLmNvbXBsZXRpb25QcmVmaXgubGVuZ3RoKSArIHJlcGxhY2VtZW50ICsgdGhpcy50ZXh0LnNsaWNlKGVsLnNlbGVjdGlvblN0YXJ0KTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBpbnNlcnQoc3RyIDogc3RyaW5nKSB7XHJcbiAgICAgICAgbGV0IGVsID0gdGhpcy50ZXh0YXJlYUVsLm5hdGl2ZUVsZW1lbnQ7XHJcbiAgICAgICAgdGhpcy50ZXh0ID0gdGhpcy50ZXh0LnNsaWNlKDAsIGVsLnNlbGVjdGlvblN0YXJ0KSArIHN0ciArIHRoaXMudGV4dC5zbGljZShlbC5zZWxlY3Rpb25TdGFydCk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgb25LZXlEb3duKGV2ZW50IDogS2V5Ym9hcmRFdmVudCkge1xyXG4gICAgICAgIGlmICh0aGlzLmF1dG9jb21wbGV0ZVZpc2libGUpIHtcclxuICAgICAgICAgICAgaWYgKGV2ZW50LmtleSA9PT0gJ0VzY2FwZScpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZGlzbWlzc0F1dG9Db21wbGV0ZSgpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoZXZlbnQua2V5ID09PSAnU2hpZnQnKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChldmVudC5rZXkgPT09ICdFbnRlcicpIHtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmF1dG9jb21wbGV0ZU9wdGlvbnNbdGhpcy5hdXRvQ29tcGxldGVTZWxlY3RlZF0pIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmFjdGl2YXRlQXV0b0NvbXBsZXRlKHRoaXMuYXV0b2NvbXBsZXRlT3B0aW9uc1t0aGlzLmF1dG9Db21wbGV0ZVNlbGVjdGVkXSk7XHJcbiAgICAgICAgICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChldmVudC5rZXkgPT09ICdBcnJvd1VwJykge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuYXV0b0NvbXBsZXRlU2VsZWN0ZWQgPT09IDApXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hdXRvQ29tcGxldGVTZWxlY3RlZCA9IHRoaXMuYXV0b2NvbXBsZXRlT3B0aW9ucy5sZW5ndGggLSAxO1xyXG4gICAgICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYXV0b0NvbXBsZXRlU2VsZWN0ZWQgPSB0aGlzLmF1dG9Db21wbGV0ZVNlbGVjdGVkIC0gMTtcclxuICAgICAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfSBlbHNlIGlmIChldmVudC5rZXkgPT09ICdBcnJvd0Rvd24nKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmF1dG9Db21wbGV0ZVNlbGVjdGVkID0gKHRoaXMuYXV0b0NvbXBsZXRlU2VsZWN0ZWQgKyAxKSAlIHRoaXMuYXV0b2NvbXBsZXRlT3B0aW9ucy5sZW5ndGg7XHJcbiAgICAgICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChldmVudC5rZXkgPT09ICdFbnRlcicgJiYgZXZlbnQuY3RybEtleSkge1xyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLnNlbmRNZXNzYWdlKCk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmNvbXBsZXRpb25GdW5jKSB7XHJcbiAgICAgICAgICAgIGlmIChldmVudC5rZXkgPT09ICdCYWNrc3BhY2UnKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvbXBsZXRpb25QcmVmaXggPSB0aGlzLmNvbXBsZXRpb25QcmVmaXguc2xpY2UoMCwgdGhpcy5jb21wbGV0aW9uUHJlZml4Lmxlbmd0aCAtIDEpO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmNvbXBsZXRpb25QcmVmaXggPT09ICcnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kaXNtaXNzQXV0b0NvbXBsZXRlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGV2ZW50LmtleSA9PT0gJyAnIHx8IGV2ZW50LmtleS5sZW5ndGggPiAxKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmRpc21pc3NBdXRvQ29tcGxldGUoKTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY29tcGxldGlvblByZWZpeCArPSBldmVudC5rZXk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHRoaXMuc2hvd0F1dG9Db21wbGV0ZSh0aGlzLmNvbXBsZXRpb25GdW5jKHRoaXMuY29tcGxldGlvblByZWZpeCkpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGlmIChldmVudC5rZXkgPT09ICc6Jykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zdGFydEF1dG9Db21wbGV0ZShldmVudCwgcHJlZml4ID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBwcmVmaXggPSBwcmVmaXguc2xpY2UoMSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIC8vIG1ha2VzIDotKSwgOi0oIGV0YyB3b3JrIChhcyB0aGV5IGFyZSBcIjopXCIgZXRjIGluIHRoZSBkYilcclxuICAgICAgICAgICAgICAgICAgICBpZiAocHJlZml4LnN0YXJ0c1dpdGgoJy0nKSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgcHJlZml4ID0gcHJlZml4LnNsaWNlKDEpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gT2JqZWN0LmtleXMoRU1PSklTKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAuZmlsdGVyKGsgPT4gay5pbmNsdWRlcyhwcmVmaXgpIHx8IEVNT0pJU1trXS5rZXl3b3Jkcy5zb21lKGt3ID0+IGt3LmluY2x1ZGVzKHByZWZpeCkpKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAubWFwKGsgPT4gKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsOiBgJHtFTU9KSVNba10uY2hhcn0gJHtrfWAsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb246ICgpID0+IHRoaXMuYXV0b2NvbXBsZXRlKEVNT0pJU1trXS5jaGFyKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgLnNsaWNlKDAsIDUpXHJcbiAgICAgICAgICAgICAgICAgICAgO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZXZlbnQua2V5ID09PSAnQCcpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc3RhcnRBdXRvQ29tcGxldGUoZXZlbnQsIHByZWZpeCA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgcHJlZml4ID0gcHJlZml4LnNsaWNlKDEpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnBhcnRpY2lwYW50cy5maWx0ZXIoeCA9PiB4LnVzZXJuYW1lLmluY2x1ZGVzKHByZWZpeCkpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC5tYXAocCA9PiAoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw6IGBAJHtwLnVzZXJuYW1lfSAtLSAke3AuZGlzcGxheU5hbWV9YCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbjogKCkgPT4gdGhpcy5hdXRvY29tcGxldGUoYEAke3AudXNlcm5hbWV9YClcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSkpXHJcbiAgICAgICAgICAgICAgICAgICAgO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZXZlbnQua2V5ID09PSAnIycpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc3RhcnRBdXRvQ29tcGxldGUoZXZlbnQsIHByZWZpeCA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgcHJlZml4ID0gcHJlZml4LnNsaWNlKDEpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5oYXNodGFnc1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAuZmlsdGVyKGh0ID0+IGh0Lmhhc2h0YWcuaW5jbHVkZXMocHJlZml4KSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgLm1hcChodCA9PiAoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw6IGAjJHtodC5oYXNodGFnfSR7aHQuZGVzY3JpcHRpb24gPyBgIC0tICR7aHQuZGVzY3JpcHRpb259YCA6IGBgfWAsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb246ICgpID0+IHRoaXMuYXV0b2NvbXBsZXRlKGAjJHtodC5oYXNodGFnfWApXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAuc2xpY2UoMCwgNSlcclxuICAgICAgICAgICAgICAgICAgICA7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBzdGFydEF1dG9Db21wbGV0ZShldmVudCA6IEtleWJvYXJkRXZlbnQsIGNvbXBsZXRpb25GdW5jIDogKHN0ciA6IHN0cmluZykgPT4gQXV0b0NvbXBsZXRlT3B0aW9uW10pIHtcclxuICAgICAgICB0aGlzLmNvbXBsZXRpb25QcmVmaXggPSBldmVudC5rZXk7XHJcbiAgICAgICAgdGhpcy5jb21wbGV0aW9uRnVuYyA9IGNvbXBsZXRpb25GdW5jO1xyXG4gICAgICAgIHRoaXMuc2hvd0F1dG9Db21wbGV0ZSh0aGlzLmNvbXBsZXRpb25GdW5jKHRoaXMuY29tcGxldGlvblByZWZpeCkpO1xyXG4gICAgfVxyXG5cclxuICAgIG9uQmx1cigpIHtcclxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMuZGlzbWlzc0F1dG9Db21wbGV0ZSgpLCAyNTApO1xyXG4gICAgfVxyXG5cclxuICAgIGluc2VydEVtb2ppKHRleHQgOiBzdHJpbmcpIHtcclxuICAgICAgICB0aGlzLnRleHQgKz0gdGV4dDtcclxuICAgIH1cclxuXHJcbiAgICBzaG93U2lnbkluKCkge1xyXG4gICAgICAgIHRoaXMuc2lnbkluU2VsZWN0ZWQubmV4dCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHNob3dFZGl0QXZhdGFyKCkge1xyXG4gICAgICAgIHRoaXMuZWRpdEF2YXRhclNlbGVjdGVkLm5leHQoKTtcclxuICAgIH1cclxuXHJcbiAgICBASW5wdXQoKVxyXG4gICAgc3VibWl0OiAobWVzc2FnZTogQ2hhdE1lc3NhZ2UpID0+IGJvb2xlYW47XHJcblxyXG4gICAgYXN5bmMgc2VuZE1lc3NhZ2UoKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnNvdXJjZSlcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG5cclxuICAgICAgICB0aGlzLnNlbmRpbmcgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuc2VuZEVycm9yID0gbnVsbDtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBsZXQgdGV4dCA9ICh0aGlzLnRleHQgfHwgJycpLnRyaW0oKTtcclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLmNhbkNvbW1lbnQgJiYgIXRoaXMuaXNWYWxpZE1lc3NhZ2UpXHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcblxyXG4gICAgICAgICAgICBsZXQgbWVzc2FnZSA6IENoYXRNZXNzYWdlID0ge1xyXG4gICAgICAgICAgICAgICAgdXNlcjogdGhpcy51c2VyLFxyXG4gICAgICAgICAgICAgICAgc2VudEF0OiBEYXRlLm5vdygpLFxyXG4gICAgICAgICAgICAgICAgdXJsOiB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyA/IGxvY2F0aW9uLmhyZWYgOiB1bmRlZmluZWQsXHJcbiAgICAgICAgICAgICAgICBsaWtlczogMCxcclxuICAgICAgICAgICAgICAgIG1lc3NhZ2U6IHRleHQsXHJcbiAgICAgICAgICAgICAgICBhdHRhY2htZW50czogdGhpcy5jaGF0TWVzc2FnZUF0dGFjaG1lbnRzLmZpbHRlcih4ID0+IHgudXJsKVxyXG4gICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuc3VibWl0KG1lc3NhZ2UpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy50ZXh0ID0gJyc7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNoYXRNZXNzYWdlQXR0YWNobWVudHMgPSBbXTtcclxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgbmV3IFByb21pc2U8dm9pZD4ocmVzb2x2ZSA9PiBzZXRUaW1lb3V0KCgpID0+IHJlc29sdmUoKSwgMTAwMCkpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pbmRpY2F0ZUVycm9yKGUubWVzc2FnZSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfSBmaW5hbGx5IHtcclxuICAgICAgICAgICAgdGhpcy5zZW5kaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy50ZXh0YXJlYUVsLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcclxuICAgICAgICAgICAgfSwgMTAwKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgY2hhdE1lc3NhZ2VBdHRhY2htZW50czogQ2hhdE1lc3NhZ2VBdHRhY2htZW50W10gPSBbXTtcclxuXHJcbiAgICBhZGRlZEF0dGFjaG1lbnQoYXR0YWNobWVudDogQ2hhdE1lc3NhZ2VBdHRhY2htZW50KSB7XHJcbiAgICAgICAgdGhpcy5jaGF0TWVzc2FnZUF0dGFjaG1lbnRzLnB1c2goYXR0YWNobWVudCk7XHJcbiAgICB9XHJcblxyXG4gICAgYXR0YWNobWVudEVycm9yKGF0dGFjaG1lbnQ6IENoYXRNZXNzYWdlQXR0YWNobWVudCkge1xyXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmNoYXRNZXNzYWdlQXR0YWNobWVudHMgPSB0aGlzLmNoYXRNZXNzYWdlQXR0YWNobWVudHMuZmlsdGVyKHggPT4geCAhPT0gYXR0YWNobWVudCk7XHJcbiAgICAgICAgfSwgMzAwMCk7XHJcbiAgICB9XHJcblxyXG5cdHJlbW92ZUF0dGFjaG1lbnQoYXR0YWNobWVudDogQ2hhdE1lc3NhZ2VBdHRhY2htZW50KSB7XHJcbiAgICAgICAgbGV0IGluZGV4ID0gdGhpcy5jaGF0TWVzc2FnZUF0dGFjaG1lbnRzLmluZGV4T2YoYXR0YWNobWVudCk7XHJcbiAgICAgICAgaWYgKGluZGV4ID49IDApXHJcblx0XHQgICAgdGhpcy5jaGF0TWVzc2FnZUF0dGFjaG1lbnRzLnNwbGljZShpbmRleCwgMSk7XHJcblx0fVxyXG5cclxuICAgIGFsZXJ0RXJyb3IoKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnNlbmRFcnJvcilcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIGFsZXJ0KHRoaXMuc2VuZEVycm9yLm1lc3NhZ2UpO1xyXG4gICAgfVxyXG59XHJcbiIsIjxmb3JtIGNsYXNzPVwibmV3LW1lc3NhZ2VcIiAoc3VibWl0KT1cInNlbmRNZXNzYWdlKClcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJhdmF0YXItY29udGFpbmVyXCI+XHJcbiAgICAgICAgPGEgIGhyZWY9XCJqYXZhc2NyaXB0OjtcIlxyXG4gICAgICAgICAgICBjbGFzcz1cImF2YXRhclwiXHJcbiAgICAgICAgICAgIChjbGljayk9XCJzaG93RWRpdEF2YXRhcigpXCJcclxuICAgICAgICAgICAgW3N0eWxlLmJhY2tncm91bmQtaW1hZ2VdPVwiJ3VybCgnICsgdXNlckF2YXRhclVybCArICcpJ1wiXHJcbiAgICAgICAgICAgID48L2E+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWNvbnRhaW5lclwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJmaWVsZC1jb250YWluZXJcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZpZWxkLXJvd1wiPlxyXG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwibWVzc2FnZS1maWVsZFwiIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCIgZmxvYXRMYWJlbD1cImFsd2F5c1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWw+e3tsYWJlbH19PC9tYXQtbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgPHRleHRhcmVhXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICN0ZXh0YXJlYVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lPVwibWVzc2FnZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGF0dGFjaG1lbnRTY3JhcGVyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFsoYXR0YWNobWVudHMpXT1cImNoYXRNZXNzYWdlQXR0YWNobWVudHNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwicGxhY2Vob2xkZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRJbnB1dFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjZGtUZXh0YXJlYUF1dG9zaXplXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFttYXhsZW5ndGhdPVwibWF4TGVuZ3RoXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKGtleWRvd24pPVwib25LZXlEb3duKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAoYmx1cik9XCJvbkJsdXIoKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJzZW5kaW5nXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJ0ZXh0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXV0b2NvbXBsZXRlPVwib2ZmXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgPjwvdGV4dGFyZWE+XHJcbiAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm9wdGlvbnMtbGluZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxtYXQtc3Bpbm5lciAqbmdJZj1cInNlbmRpbmdcIiBjbGFzcz1cImljb24gbG9hZGluZ1wiIGRpYW1ldGVyPVwiMThcIiBzdHJva2VXaWR0aD1cIjJcIj48L21hdC1zcGlubmVyPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJzZW5kRXJyb3JcIiBjbGFzcz1cImVycm9yLW1lc3NhZ2VcIiBbY2xhc3MuZXhwYW5kZWRdPVwiZXhwYW5kRXJyb3JcIiBbbWF0VG9vbHRpcF09XCJzZW5kRXJyb3IubWVzc2FnZVwiIChjbGljayk9XCJhbGVydEVycm9yKClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uICpuZ0lmPVwic2VuZEVycm9yXCI+ZXJyb3I8L21hdC1pY29uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7e3NlbmRFcnJvci5tZXNzYWdlfX1cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiIXNlbmRFcnJvciAmJiB0cmFuc2llbnRNZXNzYWdlXCIgY2xhc3M9XCJ0cmFuc2llbnQtbWVzc2FnZVwiIFtjbGFzcy5leHBhbmRlZF09XCJ0cnVlXCIgW21hdFRvb2x0aXBdPVwidHJhbnNpZW50TWVzc2FnZVwiIChjbGljayk9XCJhbGVydEVycm9yKClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1zcGlubmVyIFtpbmxpbmVdPVwidHJ1ZVwiIFtkaWFtZXRlcl09XCIxNVwiPjwvbWF0LXNwaW5uZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHt7dHJhbnNpZW50TWVzc2FnZX19XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNwYWNlclwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjdXN0b21cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxiYW50YS1hdHRhY2htZW50LWJ1dHRvbiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJhbGxvd0F0dGFjaG1lbnRzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKGFkZGVkQXR0YWNobWVudCk9XCJhZGRlZEF0dGFjaG1lbnQoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChhdHRhY2htZW50RXJyb3IpPVwiYXR0YWNobWVudEVycm9yKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA+PC9iYW50YS1hdHRhY2htZW50LWJ1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICA8ZW1vamktc2VsZWN0b3ItYnV0dG9uIChzZWxlY3RlZCk9XCJpbnNlcnRFbW9qaSgkZXZlbnQpXCI+PC9lbW9qaS1zZWxlY3Rvci1idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiAjYXV0b2NvbXBsZXRlQ29udGFpbmVyIGNsYXNzPVwiYXV0b2NvbXBsZXRlLWNvbnRhaW5lclwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiAjYXV0b2NvbXBsZXRlIGNsYXNzPVwiYXV0b2NvbXBsZXRlXCIgW2NsYXNzLnZpc2libGVdPVwiYXV0b2NvbXBsZXRlVmlzaWJsZVwiPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3Ryb25nPnt7Y29tcGxldGlvblByZWZpeH19PC9zdHJvbmc+Li4uXHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGFcclxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0LWJ1dHRvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgb3B0aW9uIG9mIGF1dG9jb21wbGV0ZU9wdGlvbnM7IGluZGV4IGFzIGluZGV4XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImFjdGl2YXRlQXV0b0NvbXBsZXRlKG9wdGlvbilcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuYWN0aXZlXT1cImF1dG9Db21wbGV0ZVNlbGVjdGVkID09PSBpbmRleFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAge3tvcHRpb24ubGFiZWx9fVxyXG4gICAgICAgICAgICAgICAgICAgIDwvYT5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgIDxiYW50YS1hdHRhY2htZW50cyBcclxuICAgICAgICAgICAgICAgIFthdHRhY2htZW50c109XCJjaGF0TWVzc2FnZUF0dGFjaG1lbnRzXCJcclxuICAgICAgICAgICAgICAgIFtlZGl0aW5nXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgKHJlbW92ZSk9XCJyZW1vdmVBdHRhY2htZW50KCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgPjwvYmFudGEtYXR0YWNobWVudHM+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJhY3Rpb25zXCI+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiF1c2VyXCI+XHJcbiAgICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgICAgIG1hdC1yYWlzZWQtYnV0dG9uXHJcbiAgICAgICAgICAgICAgICBjb2xvcj1cInByaW1hcnlcIlxyXG4gICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwic2hvd1NpZ25JbigpXCJcclxuICAgICAgICAgICAgICAgID57e3NpZ25JbkxhYmVsfX08L2J1dHRvbj5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwidXNlclwiPlxyXG4gICAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgICBtYXQtcmFpc2VkLWJ1dHRvblxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJzZW5kXCJcclxuICAgICAgICAgICAgICAgIGNvbG9yPVwicHJpbWFyeVwiXHJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiIXNlbmRCdXR0b25FbmFibGVkXCJcclxuICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjYW5Db21tZW50XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uICpuZ0lmPVwiIXNlbmRpbmdcIj5jaGV2cm9uX3JpZ2h0PC9tYXQtaWNvbj5cclxuICAgICAgICAgICAgICAgICAgICA8bWF0LXNwaW5uZXIgKm5nSWY9XCJzZW5kaW5nXCIgY2xhc3M9XCJpY29uXCIgZGlhbWV0ZXI9XCIxOFwiIHN0cm9rZVdpZHRoPVwiMlwiPjwvbWF0LXNwaW5uZXI+XHJcbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibGFiZWxcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWNhbkNvbW1lbnRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAge3twZXJtaXNzaW9uRGVuaWVkTGFiZWx9fVxyXG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjYW5Db21tZW50XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhc2VuZGluZ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3tzZW5kTGFiZWx9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNlbmRpbmdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7c2VuZGluZ0xhYmVsfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgPC9kaXY+XHJcbjwvZm9ybT4iXX0=
|