stream-chat-angular 4.55.2-perf-message-list.1 → 4.56.0-perf-message-list.1

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.
@@ -148,7 +148,7 @@ export class MessageActionsBoxComponent {
148
148
  }
149
149
  }
150
150
  MessageActionsBoxComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.5", ngImport: i0, type: MessageActionsBoxComponent, deps: [{ token: i1.CustomTemplatesService }, { token: i2.MessageActionsService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
151
- MessageActionsBoxComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.5", type: MessageActionsBoxComponent, selector: "stream-message-actions-box", inputs: { isOpen: "isOpen", isMine: "isMine", message: "message", enabledActions: "enabledActions", customActions: "customActions" }, outputs: { displayedActionsCount: "displayedActionsCount", isEditing: "isEditing" }, viewQueries: [{ propertyName: "modalContent", first: true, predicate: ["modalContent"], descendants: true, static: true }], usesOnChanges: true, ngImport: i0, template: "<div\n #actionBox\n data-testid=\"action-box\"\n class=\"str-chat__message-actions-box str-chat__message-actions-box-angular\"\n [class.str-chat__message-actions-box--open]=\"true\"\n *ngIf=\"isOpen\"\n>\n <ul class=\"str-chat__message-actions-list\">\n <ng-container\n *ngFor=\"let item of visibleMessageActionItems; trackBy: trackByActionName\"\n >\n <ng-container\n *ngTemplateOutlet=\"\n (customTemplatesService.messageActionsBoxItemTemplate$ | async) ||\n defaultMessageActionItem;\n context: getMessageActionTemplateContext(item)\n \"\n ></ng-container>\n </ng-container>\n </ul>\n</div>\n\n<ng-template\n #defaultMessageActionItem\n let-actionName=\"actionName\"\n let-actionHandler=\"actionHandler\"\n let-actionLabelOrTranslationKey=\"actionLabelOrTranslationKey\"\n>\n <button\n class=\"str-chat__message-actions-list-item-button\"\n [attr.data-testid]=\"actionName + '-action'\"\n (click)=\"actionHandler(message, isMine)\"\n >\n <li class=\"str-chat__message-actions-list-item\">\n {{ getActionLabel(actionLabelOrTranslationKey) | translate }}\n </li>\n </button>\n</ng-template>\n\n<ng-container\n *ngTemplateOutlet=\"\n (customTemplatesService.modalTemplate$ | async) || defaultModal;\n context: getEditModalContext()\n \"\n></ng-container>\n\n<ng-template\n #defaultModal\n let-isOpen=\"isOpen\"\n let-isOpenChangeHandler=\"isOpenChangeHandler\"\n let-content=\"content\"\n>\n <stream-modal\n [isOpen]=\"isOpen\"\n *ngIf=\"isOpen\"\n (isOpenChange)=\"isOpenChangeHandler($event)\"\n [content]=\"content\"\n >\n </stream-modal>\n</ng-template>\n\n<ng-template #modalContent>\n <div class=\"str-chat__edit-message-form\" *ngIf=\"isEditModalOpen\">\n <ng-template\n #defaultInput\n let-messageInput=\"message\"\n let-messageUpdateHandler=\"messageUpdateHandler\"\n let-sendMessage$Input=\"sendMessage$\"\n >\n <stream-message-input\n [message]=\"messageInput\"\n (messageUpdate)=\"messageUpdateHandler()\"\n [sendMessage$]=\"sendMessage$Input\"\n ></stream-message-input>\n </ng-template>\n <ng-container\n *ngTemplateOutlet=\"\n (customTemplatesService.messageInputTemplate$ | async) || defaultInput;\n context: getMessageInputContext()\n \"\n >\n </ng-container>\n\n <stream-notification-list></stream-notification-list>\n <div\n class=\"\n str-chat__message-team-form-footer\n str-chat__message-team-form-footer-angular\n \"\n >\n <div class=\"str-chat__edit-message-form-options\">\n <button\n class=\"str-chat__edit-message-cancel\"\n translate\n data-testid=\"cancel-button\"\n (click)=\"modalClosed()\"\n >\n streamChat.Cancel\n </button>\n <button\n type=\"submit\"\n translate\n class=\"str-chat__edit-message-send\"\n data-testid=\"send-button\"\n (click)=\"sendClicked()\"\n (keyup.enter)=\"sendClicked()\"\n >\n streamChat.Send\n </button>\n </div>\n </div>\n </div>\n</ng-template>\n", components: [{ type: i3.ModalComponent, selector: "stream-modal", inputs: ["isOpen", "content"], outputs: ["isOpenChange"] }, { type: i4.MessageInputComponent, selector: "stream-message-input", inputs: ["isFileUploadEnabled", "areMentionsEnabled", "mentionScope", "mode", "isMultipleFileUploadEnabled", "message", "sendMessage$", "inputMode", "autoFocus"], outputs: ["messageUpdate"] }, { type: i5.NotificationListComponent, selector: "stream-notification-list" }], directives: [{ type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i6.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i6.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: i7.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }], pipes: { "async": i6.AsyncPipe, "translate": i7.TranslatePipe } });
151
+ MessageActionsBoxComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.5", type: MessageActionsBoxComponent, selector: "stream-message-actions-box", inputs: { isOpen: "isOpen", isMine: "isMine", message: "message", enabledActions: "enabledActions", customActions: "customActions" }, outputs: { displayedActionsCount: "displayedActionsCount", isEditing: "isEditing" }, viewQueries: [{ propertyName: "modalContent", first: true, predicate: ["modalContent"], descendants: true, static: true }], usesOnChanges: true, ngImport: i0, template: "<div\n #actionBox\n data-testid=\"action-box\"\n class=\"str-chat__message-actions-box str-chat__message-actions-box-angular\"\n [class.str-chat__message-actions-box--open]=\"true\"\n>\n <ul class=\"str-chat__message-actions-list\">\n <ng-container\n *ngFor=\"let item of visibleMessageActionItems; trackBy: trackByActionName\"\n >\n <ng-container\n *ngTemplateOutlet=\"\n (customTemplatesService.messageActionsBoxItemTemplate$ | async) ||\n defaultMessageActionItem;\n context: getMessageActionTemplateContext(item)\n \"\n ></ng-container>\n </ng-container>\n </ul>\n</div>\n\n<ng-template\n #defaultMessageActionItem\n let-actionName=\"actionName\"\n let-actionHandler=\"actionHandler\"\n let-actionLabelOrTranslationKey=\"actionLabelOrTranslationKey\"\n>\n <button\n class=\"str-chat__message-actions-list-item-button\"\n [attr.data-testid]=\"actionName + '-action'\"\n (click)=\"actionHandler(message, isMine)\"\n >\n <li class=\"str-chat__message-actions-list-item\">\n {{ getActionLabel(actionLabelOrTranslationKey) | translate }}\n </li>\n </button>\n</ng-template>\n\n<ng-container\n *ngTemplateOutlet=\"\n (customTemplatesService.modalTemplate$ | async) || defaultModal;\n context: getEditModalContext()\n \"\n></ng-container>\n\n<ng-template\n #defaultModal\n let-isOpen=\"isOpen\"\n let-isOpenChangeHandler=\"isOpenChangeHandler\"\n let-content=\"content\"\n>\n <stream-modal\n [isOpen]=\"isOpen\"\n *ngIf=\"isOpen\"\n (isOpenChange)=\"isOpenChangeHandler($event)\"\n [content]=\"content\"\n >\n </stream-modal>\n</ng-template>\n\n<ng-template #modalContent>\n <div class=\"str-chat__edit-message-form\" *ngIf=\"isEditModalOpen\">\n <ng-template\n #defaultInput\n let-messageInput=\"message\"\n let-messageUpdateHandler=\"messageUpdateHandler\"\n let-sendMessage$Input=\"sendMessage$\"\n >\n <stream-message-input\n [message]=\"messageInput\"\n (messageUpdate)=\"messageUpdateHandler()\"\n [sendMessage$]=\"sendMessage$Input\"\n ></stream-message-input>\n </ng-template>\n <ng-container\n *ngTemplateOutlet=\"\n (customTemplatesService.messageInputTemplate$ | async) || defaultInput;\n context: getMessageInputContext()\n \"\n >\n </ng-container>\n\n <stream-notification-list></stream-notification-list>\n <div\n class=\"\n str-chat__message-team-form-footer\n str-chat__message-team-form-footer-angular\n \"\n >\n <div class=\"str-chat__edit-message-form-options\">\n <button\n class=\"str-chat__edit-message-cancel\"\n translate\n data-testid=\"cancel-button\"\n (click)=\"modalClosed()\"\n >\n streamChat.Cancel\n </button>\n <button\n type=\"submit\"\n translate\n class=\"str-chat__edit-message-send\"\n data-testid=\"send-button\"\n (click)=\"sendClicked()\"\n (keyup.enter)=\"sendClicked()\"\n >\n streamChat.Send\n </button>\n </div>\n </div>\n </div>\n</ng-template>\n", components: [{ type: i3.ModalComponent, selector: "stream-modal", inputs: ["isOpen", "content"], outputs: ["isOpenChange"] }, { type: i4.MessageInputComponent, selector: "stream-message-input", inputs: ["isFileUploadEnabled", "areMentionsEnabled", "mentionScope", "mode", "isMultipleFileUploadEnabled", "message", "sendMessage$", "inputMode", "autoFocus"], outputs: ["messageUpdate"] }, { type: i5.NotificationListComponent, selector: "stream-notification-list" }], directives: [{ type: i6.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i6.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i7.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }], pipes: { "async": i6.AsyncPipe, "translate": i7.TranslatePipe } });
152
152
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.5", ngImport: i0, type: MessageActionsBoxComponent, decorators: [{
153
153
  type: Component,
154
154
  args: [{
@@ -174,4 +174,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.5", ngImpor
174
174
  type: ViewChild,
175
175
  args: ['modalContent', { static: true }]
176
176
  }] } });
177
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVzc2FnZS1hY3Rpb25zLWJveC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zdHJlYW0tY2hhdC1hbmd1bGFyL3NyYy9saWIvbWVzc2FnZS1hY3Rpb25zLWJveC9tZXNzYWdlLWFjdGlvbnMtYm94LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3N0cmVhbS1jaGF0LWFuZ3VsYXIvc3JjL2xpYi9tZXNzYWdlLWFjdGlvbnMtYm94L21lc3NhZ2UtYWN0aW9ucy1ib3guY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUdMLFNBQVMsRUFDVCxZQUFZLEVBQ1osS0FBSyxFQUlMLE1BQU0sRUFHTixTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFjLE9BQU8sRUFBZ0IsTUFBTSxNQUFNLENBQUM7Ozs7Ozs7OztBQVd6RDs7R0FFRztBQU1ILE1BQU0sT0FBTywwQkFBMEI7SUEyRHJDLFlBQ2tCLHNCQUE4QyxFQUN0RCxxQkFBNEMsRUFDNUMsS0FBd0I7UUFGaEIsMkJBQXNCLEdBQXRCLHNCQUFzQixDQUF3QjtRQUN0RCwwQkFBcUIsR0FBckIscUJBQXFCLENBQXVCO1FBQzVDLFVBQUssR0FBTCxLQUFLLENBQW1CO1FBM0RsQzs7O1dBR0c7UUFDTSxXQUFNLEdBQUcsS0FBSyxDQUFDO1FBQ3hCOztXQUVHO1FBQ00sV0FBTSxHQUFHLEtBQUssQ0FBQztRQUt4Qjs7V0FFRztRQUNNLG1CQUFjLEdBQWEsRUFBRSxDQUFDO1FBQ3ZDOzs7Ozs7V0FNRztRQUNNLGtCQUFhLEdBQThCLEVBQUUsQ0FBQztRQUN2RDs7Ozs7O1dBTUc7UUFDZ0IsMEJBQXFCLEdBQUcsSUFBSSxZQUFZLEVBQVUsQ0FBQztRQUN0RTs7Ozs7O1dBTUc7UUFDZ0IsY0FBUyxHQUFHLElBQUksWUFBWSxFQUFXLENBQUM7UUFDM0Qsb0JBQWUsR0FB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QztvQkFDbkQsTUFBTSxFQUFFLEVBQUU7aUJBQ1g7aUxBUVUsTUFBTTtzQkFBZCxLQUFLO2dCQUlHLE1BQU07c0JBQWQsS0FBSztnQkFJRyxPQUFPO3NCQUFmLEtBQUs7Z0JBSUcsY0FBYztzQkFBdEIsS0FBSztnQkFRRyxhQUFhO3NCQUFyQixLQUFLO2dCQVFhLHFCQUFxQjtzQkFBdkMsTUFBTTtnQkFRWSxTQUFTO3NCQUEzQixNQUFNO2dCQVlDLFlBQVk7c0JBRG5CLFNBQVM7dUJBQUMsY0FBYyxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEFmdGVyVmlld0luaXQsXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIEV2ZW50RW1pdHRlcixcbiAgSW5wdXQsXG4gIE9uQ2hhbmdlcyxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIE91dHB1dCxcbiAgU2ltcGxlQ2hhbmdlcyxcbiAgVGVtcGxhdGVSZWYsXG4gIFZpZXdDaGlsZCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBTdWJqZWN0LCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEN1c3RvbVRlbXBsYXRlc1NlcnZpY2UgfSBmcm9tICcuLi9jdXN0b20tdGVtcGxhdGVzLnNlcnZpY2UnO1xuaW1wb3J0IHtcbiAgQ3VzdG9tTWVzc2FnZUFjdGlvbkl0ZW0sXG4gIE1lc3NhZ2VBY3Rpb25Cb3hJdGVtQ29udGV4dCxcbiAgTWVzc2FnZUFjdGlvbkl0ZW0sXG4gIE1lc3NhZ2VJbnB1dENvbnRleHQsXG4gIE1vZGFsQ29udGV4dCxcbiAgU3RyZWFtTWVzc2FnZSxcbn0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHsgTWVzc2FnZUFjdGlvbnNTZXJ2aWNlIH0gZnJvbSAnLi4vbWVzc2FnZS1hY3Rpb25zLnNlcnZpY2UnO1xuLyoqXG4gKiBUaGUgYE1lc3NhZ2VBY3Rpb25zQm94YCBjb21wb25lbnQgZGlzcGxheXMgYSBsaXN0IG9mIG1lc3NhZ2UgYWN0aW9ucyAoaS5lIGVkaXQpLCB0aGF0IGNhbiBiZSBvcGVuZWQgb3IgY2xvc2VkLiBZb3UgY2FuIGZpbmQgdGhlIFtsaXN0IG9mIHRoZSBzdXBwb3J0ZWQgYWN0aW9uc10oLi4vY29uY2VwdHMvbWVzc2FnZS1pbnRlcmFjdGlvbnMubWR4KSBpbiB0aGUgbWVzc2FnZSBpbnRlcmFjdGlvbiBndWlkZS5cbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnc3RyZWFtLW1lc3NhZ2UtYWN0aW9ucy1ib3gnLFxuICB0ZW1wbGF0ZVVybDogJy4vbWVzc2FnZS1hY3Rpb25zLWJveC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlczogW10sXG59KVxuZXhwb3J0IGNsYXNzIE1lc3NhZ2VBY3Rpb25zQm94Q29tcG9uZW50XG4gIGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMsIE9uRGVzdHJveSwgQWZ0ZXJWaWV3SW5pdFxue1xuICAvKipcbiAgICogSW5kaWNhdGVzIGlmIHRoZSBsaXN0IHNob3VsZCBiZSBvcGVuZWQgb3IgY2xvc2VkLiBBZGRpbmcgYSBVSSBlbGVtZW50IHRvIG9wZW4gYW5kIGNsb3NlIHRoZSBsaXN0IGlzIHRoZSBwYXJlbnQncyBjb21wb25lbnQgcmVzcG9uc2liaWxpdHkuXG4gICAqIEBkZXByZWNhdGVkIE5vIG5lZWQgZm9yIHRoaXMgc2luY2UgW3RoZW1lLXYyXSguLi90aGVtaW5nL2ludHJvZHVjdGlvbi5tZHgpXG4gICAqL1xuICBASW5wdXQoKSBpc09wZW4gPSBmYWxzZTtcbiAgLyoqXG4gICAqIEluZGljYXRlcyBpZiB0aGUgbWVzc2FnZSBhY3Rpb25zIGFyZSBiZWxvbmdpbmcgdG8gYSBtZXNzYWdlIHRoYXQgd2FzIHNlbnQgYnkgdGhlIGN1cnJlbnQgdXNlciBvciBub3QuXG4gICAqL1xuICBASW5wdXQoKSBpc01pbmUgPSBmYWxzZTtcbiAgLyoqXG4gICAqIFRoZSBtZXNzYWdlIHRoZSBhY3Rpb25zIHdpbGwgYmUgZXhlY3V0ZWQgb25cbiAgICovXG4gIEBJbnB1dCgpIG1lc3NhZ2U6IFN0cmVhbU1lc3NhZ2UgfCB1bmRlZmluZWQ7XG4gIC8qKlxuICAgKiBUaGUgbGlzdCBvZiBbY2hhbm5lbCBjYXBhYmlsaXRpZXNdKGh0dHBzOi8vZ2V0c3RyZWFtLmlvL2NoYXQvZG9jcy9qYXZhc2NyaXB0L2NoYW5uZWxfY2FwYWJpbGl0aWVzLz9sYW5ndWFnZT1qYXZhc2NyaXB0KSB0aGF0IGFyZSBlbmFibGVkIGZvciB0aGUgY3VycmVudCB1c2VyLCB0aGUgbGlzdCBvZiBbc3VwcG9ydGVkIGludGVyYWN0aW9uc10oLi4vY29uY2VwdHMvbWVzc2FnZS1pbnRlcmFjdGlvbnMubWR4KSBjYW4gYmUgZm91bmQgaW4gb3VyIG1lc3NhZ2UgaW50ZXJhY3Rpb24gZ3VpZGUuIFVuYXRob3JpemVkIGFjdGlvbnMgd29uJ3QgYmUgZGlzcGxheWVkIG9uIHRoZSBVSS5cbiAgICovXG4gIEBJbnB1dCgpIGVuYWJsZWRBY3Rpb25zOiBzdHJpbmdbXSA9IFtdO1xuICAvKipcbiAgICogQSBsaXN0IG9mIGN1c3RvbSBtZXNzYWdlIGFjdGlvbnMgdG8gYmUgZGlzcGxheWVkIGluIHRoZSBhY3Rpb24gYm94XG4gICAqXG4gICAqIEluIHRoZSBuZXh0IG1ham9yIHJlbGVhc2UgdGhpcyB3aWxsIGJlIHJlbGVhc2VkIHdpdGggYG1lc3NhZ2VSZWFjdGlvbnNTZXJ2aWNlLmN1c3RvbUFjdGlvbnMkYFxuICAgKlxuICAgKiBNb3JlIGluZm9ybWF0aW9uOiBodHRwczovL2dldHN0cmVhbS5pby9jaGF0L2RvY3Mvc2RrL2FuZ3VsYXIvc2VydmljZXMvTWVzc2FnZUFjdGlvbnNTZXJ2aWNlXG4gICAqL1xuICBASW5wdXQoKSBjdXN0b21BY3Rpb25zOiBDdXN0b21NZXNzYWdlQWN0aW9uSXRlbVtdID0gW107XG4gIC8qKlxuICAgKiBUaGUgbnVtYmVyIG9mIGF1dGhvcml6ZWQgYWN0aW9ucyAoaXQgY2FuIGJlIGxlc3Mgb3IgZXF1YWwgdGhhbiB0aGUgbnVtYmVyIG9mIGVuYWJsZWQgYWN0aW9ucylcbiAgICpcbiAgICogQGRlcHJlY2F0ZWQgY29tcG9uZW50cyBzaG91bGQgdXNlIGBtZXNzYWdlUmVhY3Rpb25zU2VydmljZS5nZXRBdXRob3JpemVkTWVzc2FnZUFjdGlvbnNDb3VudGAgbWV0aG9kXG4gICAqXG4gICAqIE1vcmUgaW5mb3JtYXRpb246IGh0dHBzOi8vZ2V0c3RyZWFtLmlvL2NoYXQvZG9jcy9zZGsvYW5ndWxhci9zZXJ2aWNlcy9NZXNzYWdlQWN0aW9uc1NlcnZpY2VcbiAgICovXG4gIEBPdXRwdXQoKSByZWFkb25seSBkaXNwbGF5ZWRBY3Rpb25zQ291bnQgPSBuZXcgRXZlbnRFbWl0dGVyPG51bWJlcj4oKTtcbiAgLyoqXG4gICAqIEFuIGV2ZW50IHdoaWNoIGVtaXRzIGB0cnVlYCBpZiB0aGUgZWRpdCBtZXNzYWdlIG1vZGFsIGlzIG9wZW4sIGFuZCBgZmFsc2VgIHdoZW4gaXQgaXMgY2xvc2VkLlxuICAgKlxuICAgKiBAZGVwcmVjYXRlZCBjb21wb25lbnRzIHNob3VsZCB1c2UgYG1lc3NhZ2VSZWFjdGlvbnNTZXJ2aWNlLmdldEF1dGhvcml6ZWRNZXNzYWdlQWN0aW9uc0NvdW50YCBtZXRob2RcbiAgICpcbiAgICogTW9yZSBpbmZvcm1hdGlvbjogaHR0cHM6Ly9nZXRzdHJlYW0uaW8vY2hhdC9kb2NzL3Nkay9hbmd1bGFyL3NlcnZpY2VzL01lc3NhZ2VBY3Rpb25zU2VydmljZVxuICAgKi9cbiAgQE91dHB1dCgpIHJlYWRvbmx5IGlzRWRpdGluZyA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcbiAgaXNFZGl0TW9kYWxPcGVuID0gZmFsc2U7XG4gIG1lc3NhZ2VJbnB1dFRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxNZXNzYWdlSW5wdXRDb250ZXh0PiB8IHVuZGVmaW5lZDtcbiAgbWVzc2FnZUFjdGlvbkl0ZW1UZW1wbGF0ZTpcbiAgICB8IFRlbXBsYXRlUmVmPE1lc3NhZ2VBY3Rpb25Cb3hJdGVtQ29udGV4dD5cbiAgICB8IHVuZGVmaW5lZDtcbiAgbW9kYWxUZW1wbGF0ZTogVGVtcGxhdGVSZWY8TW9kYWxDb250ZXh0PiB8IHVuZGVmaW5lZDtcbiAgdmlzaWJsZU1lc3NhZ2VBY3Rpb25JdGVtczogKE1lc3NhZ2VBY3Rpb25JdGVtIHwgQ3VzdG9tTWVzc2FnZUFjdGlvbkl0ZW0pW10gPVxuICAgIFtdO1xuICBzZW5kTWVzc2FnZSQ6IE9ic2VydmFibGU8dm9pZD47XG4gIHByaXZhdGUgcmVhZG9ubHkgbWVzc2FnZUFjdGlvbkl0ZW1zOiBNZXNzYWdlQWN0aW9uSXRlbVtdO1xuICBAVmlld0NoaWxkKCdtb2RhbENvbnRlbnQnLCB7IHN0YXRpYzogdHJ1ZSB9KVxuICBwcml2YXRlIG1vZGFsQ29udGVudCE6IFRlbXBsYXRlUmVmPHZvaWQ+O1xuICBwcml2YXRlIHNlbmRNZXNzYWdlU3ViamVjdCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG4gIHByaXZhdGUgc3Vic2NyaXB0aW9uczogU3Vic2NyaXB0aW9uW10gPSBbXTtcbiAgcHJpdmF0ZSBpc1ZpZXdJbml0ZWQgPSBmYWxzZTtcbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIHJlYWRvbmx5IGN1c3RvbVRlbXBsYXRlc1NlcnZpY2U6IEN1c3RvbVRlbXBsYXRlc1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBtZXNzYWdlQWN0aW9uc1NlcnZpY2U6IE1lc3NhZ2VBY3Rpb25zU2VydmljZSxcbiAgICBwcml2YXRlIGNkUmVmOiBDaGFuZ2VEZXRlY3RvclJlZlxuICApIHtcbiAgICB0aGlzLm1lc3NhZ2VBY3Rpb25JdGVtcyA9IHRoaXMubWVzc2FnZUFjdGlvbnNTZXJ2aWNlLmRlZmF1bHRBY3Rpb25zO1xuICAgIHRoaXMuc2VuZE1lc3NhZ2UkID0gdGhpcy5zZW5kTWVzc2FnZVN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcbiAgICAgIHRoaXMubWVzc2FnZUFjdGlvbnNTZXJ2aWNlLm1lc3NhZ2VUb0VkaXQkLnN1YnNjcmliZSgobSkgPT4ge1xuICAgICAgICBsZXQgaXNFZGl0TW9kYWxPcGVuID0gZmFsc2U7XG4gICAgICAgIGlmIChtICYmIG0uaWQgPT09IHRoaXMubWVzc2FnZT8uaWQpIHtcbiAgICAgICAgICBpc0VkaXRNb2RhbE9wZW4gPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc0VkaXRNb2RhbE9wZW4gIT09IHRoaXMuaXNFZGl0TW9kYWxPcGVuKSB7XG4gICAgICAgICAgdGhpcy5pc0VkaXRNb2RhbE9wZW4gPSBpc0VkaXRNb2RhbE9wZW47XG4gICAgICAgICAgdGhpcy5pc0VkaXRpbmcuZW1pdCh0aGlzLmlzRWRpdE1vZGFsT3Blbik7XG4gICAgICAgICAgaWYgKHRoaXMuaXNWaWV3SW5pdGVkKSB7XG4gICAgICAgICAgICB0aGlzLmNkUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBpZiAoXG4gICAgICBjaGFuZ2VzLmlzTWluZSB8fFxuICAgICAgY2hhbmdlcy5lbmFibGVkQWN0aW9ucyB8fFxuICAgICAgY2hhbmdlcy5tZXNzYWdlIHx8XG4gICAgICBjaGFuZ2VzLmN1c3RvbUFjdGlvbnNcbiAgICApIHtcbiAgICAgIHRoaXMuc2V0VmlzaWJsZUFjdGlvbnMoKTtcbiAgICB9XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgdGhpcy5pc1ZpZXdJbml0ZWQgPSB0cnVlO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLmZvckVhY2goKHMpID0+IHMudW5zdWJzY3JpYmUoKSk7XG4gIH1cblxuICBnZXRBY3Rpb25MYWJlbChcbiAgICBhY3Rpb25MYWJlbE9yVHJhbnNsYXRpb25LZXk6ICgobWVzc2FnZTogU3RyZWFtTWVzc2FnZSkgPT4gc3RyaW5nKSB8IHN0cmluZ1xuICApIHtcbiAgICByZXR1cm4gdHlwZW9mIGFjdGlvbkxhYmVsT3JUcmFuc2xhdGlvbktleSA9PT0gJ3N0cmluZydcbiAgICAgID8gYWN0aW9uTGFiZWxPclRyYW5zbGF0aW9uS2V5XG4gICAgICA6IGFjdGlvbkxhYmVsT3JUcmFuc2xhdGlvbktleSh0aGlzLm1lc3NhZ2UhKTtcbiAgfVxuXG4gIGdldE1lc3NhZ2VBY3Rpb25UZW1wbGF0ZUNvbnRleHQoXG4gICAgaXRlbTogTWVzc2FnZUFjdGlvbkl0ZW0gfCBDdXN0b21NZXNzYWdlQWN0aW9uSXRlbVxuICApOiBNZXNzYWdlQWN0aW9uQm94SXRlbUNvbnRleHQ8YW55PiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGFjdGlvbkhhbmRsZXI6IGl0ZW0uYWN0aW9uSGFuZGxlcixcbiAgICAgIGlzTWluZTogdGhpcy5pc01pbmUsXG4gICAgICBhY3Rpb25OYW1lOiBpdGVtLmFjdGlvbk5hbWUsXG4gICAgICBtZXNzYWdlOiB0aGlzLm1lc3NhZ2UsXG4gICAgICBhY3Rpb25MYWJlbE9yVHJhbnNsYXRpb25LZXk6IGl0ZW0uYWN0aW9uTGFiZWxPclRyYW5zbGF0aW9uS2V5LFxuICAgIH07XG4gIH1cblxuICBzZW5kQ2xpY2tlZCgpIHtcbiAgICB0aGlzLnNlbmRNZXNzYWdlU3ViamVjdC5uZXh0KCk7XG4gIH1cblxuICBtb2RhbENsb3NlZCA9ICgpID0+IHtcbiAgICB0aGlzLmlzRWRpdE1vZGFsT3BlbiA9IGZhbHNlO1xuICAgIHRoaXMubWVzc2FnZUFjdGlvbnNTZXJ2aWNlLm1lc3NhZ2VUb0VkaXQkLm5leHQodW5kZWZpbmVkKTtcbiAgfTtcblxuICBnZXRNZXNzYWdlSW5wdXRDb250ZXh0KCk6IE1lc3NhZ2VJbnB1dENvbnRleHQge1xuICAgIHJldHVybiB7XG4gICAgICBtZXNzYWdlOiB0aGlzLm1lc3NhZ2UsXG4gICAgICBtZXNzYWdlVXBkYXRlSGFuZGxlcjogdGhpcy5tb2RhbENsb3NlZCxcbiAgICAgIGlzRmlsZVVwbG9hZEVuYWJsZWQ6IHVuZGVmaW5lZCxcbiAgICAgIGFyZU1lbnRpb25zRW5hYmxlZDogdW5kZWZpbmVkLFxuICAgICAgaXNNdWx0aXBsZUZpbGVVcGxvYWRFbmFibGVkOiB1bmRlZmluZWQsXG4gICAgICBtZW50aW9uU2NvcGU6IHVuZGVmaW5lZCxcbiAgICAgIG1vZGU6IHVuZGVmaW5lZCxcbiAgICAgIHNlbmRNZXNzYWdlJDogdGhpcy5zZW5kTWVzc2FnZSQsXG4gICAgfTtcbiAgfVxuXG4gIGdldEVkaXRNb2RhbENvbnRleHQoKTogTW9kYWxDb250ZXh0IHtcbiAgICByZXR1cm4ge1xuICAgICAgaXNPcGVuOiB0aGlzLmlzRWRpdE1vZGFsT3BlbixcbiAgICAgIGlzT3BlbkNoYW5nZUhhbmRsZXI6IChpc09wZW4pID0+IHtcbiAgICAgICAgdGhpcy5pc0VkaXRNb2RhbE9wZW4gPSBpc09wZW47XG4gICAgICAgIGlmICghdGhpcy5pc0VkaXRNb2RhbE9wZW4pIHtcbiAgICAgICAgICB0aGlzLm1vZGFsQ2xvc2VkKCk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBjb250ZW50OiB0aGlzLm1vZGFsQ29udGVudCxcbiAgICB9O1xuICB9XG5cbiAgdHJhY2tCeUFjdGlvbk5hbWUoXG4gICAgXzogbnVtYmVyLFxuICAgIGl0ZW06IE1lc3NhZ2VBY3Rpb25JdGVtIHwgQ3VzdG9tTWVzc2FnZUFjdGlvbkl0ZW1cbiAgKSB7XG4gICAgcmV0dXJuIGl0ZW0uYWN0aW9uTmFtZTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0VmlzaWJsZUFjdGlvbnMoKSB7XG4gICAgdGhpcy52aXNpYmxlTWVzc2FnZUFjdGlvbkl0ZW1zID0gW1xuICAgICAgLi4udGhpcy5tZXNzYWdlQWN0aW9uSXRlbXMsXG4gICAgICAuLi50aGlzLmN1c3RvbUFjdGlvbnMsXG4gICAgXS5maWx0ZXIoKGl0ZW0pID0+XG4gICAgICBpdGVtLmlzVmlzaWJsZSh0aGlzLmVuYWJsZWRBY3Rpb25zLCB0aGlzLmlzTWluZSwgdGhpcy5tZXNzYWdlISlcbiAgICApO1xuICAgIHRoaXMuZGlzcGxheWVkQWN0aW9uc0NvdW50LmVtaXQodGhpcy52aXNpYmxlTWVzc2FnZUFjdGlvbkl0ZW1zLmxlbmd0aCk7XG4gIH1cbn1cbiIsIjxkaXZcbiAgI2FjdGlvbkJveFxuICBkYXRhLXRlc3RpZD1cImFjdGlvbi1ib3hcIlxuICBjbGFzcz1cInN0ci1jaGF0X19tZXNzYWdlLWFjdGlvbnMtYm94IHN0ci1jaGF0X19tZXNzYWdlLWFjdGlvbnMtYm94LWFuZ3VsYXJcIlxuICBbY2xhc3Muc3RyLWNoYXRfX21lc3NhZ2UtYWN0aW9ucy1ib3gtLW9wZW5dPVwidHJ1ZVwiXG4gICpuZ0lmPVwiaXNPcGVuXCJcbj5cbiAgPHVsIGNsYXNzPVwic3RyLWNoYXRfX21lc3NhZ2UtYWN0aW9ucy1saXN0XCI+XG4gICAgPG5nLWNvbnRhaW5lclxuICAgICAgKm5nRm9yPVwibGV0IGl0ZW0gb2YgdmlzaWJsZU1lc3NhZ2VBY3Rpb25JdGVtczsgdHJhY2tCeTogdHJhY2tCeUFjdGlvbk5hbWVcIlxuICAgID5cbiAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgICAoY3VzdG9tVGVtcGxhdGVzU2VydmljZS5tZXNzYWdlQWN0aW9uc0JveEl0ZW1UZW1wbGF0ZSQgfCBhc3luYykgfHxcbiAgICAgICAgICAgIGRlZmF1bHRNZXNzYWdlQWN0aW9uSXRlbTtcbiAgICAgICAgICBjb250ZXh0OiBnZXRNZXNzYWdlQWN0aW9uVGVtcGxhdGVDb250ZXh0KGl0ZW0pXG4gICAgICAgIFwiXG4gICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgPC9uZy1jb250YWluZXI+XG4gIDwvdWw+XG48L2Rpdj5cblxuPG5nLXRlbXBsYXRlXG4gICNkZWZhdWx0TWVzc2FnZUFjdGlvbkl0ZW1cbiAgbGV0LWFjdGlvbk5hbWU9XCJhY3Rpb25OYW1lXCJcbiAgbGV0LWFjdGlvbkhhbmRsZXI9XCJhY3Rpb25IYW5kbGVyXCJcbiAgbGV0LWFjdGlvbkxhYmVsT3JUcmFuc2xhdGlvbktleT1cImFjdGlvbkxhYmVsT3JUcmFuc2xhdGlvbktleVwiXG4+XG4gIDxidXR0b25cbiAgICBjbGFzcz1cInN0ci1jaGF0X19tZXNzYWdlLWFjdGlvbnMtbGlzdC1pdGVtLWJ1dHRvblwiXG4gICAgW2F0dHIuZGF0YS10ZXN0aWRdPVwiYWN0aW9uTmFtZSArICctYWN0aW9uJ1wiXG4gICAgKGNsaWNrKT1cImFjdGlvbkhhbmRsZXIobWVzc2FnZSwgaXNNaW5lKVwiXG4gID5cbiAgICA8bGkgY2xhc3M9XCJzdHItY2hhdF9fbWVzc2FnZS1hY3Rpb25zLWxpc3QtaXRlbVwiPlxuICAgICAge3sgZ2V0QWN0aW9uTGFiZWwoYWN0aW9uTGFiZWxPclRyYW5zbGF0aW9uS2V5KSB8IHRyYW5zbGF0ZSB9fVxuICAgIDwvbGk+XG4gIDwvYnV0dG9uPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLWNvbnRhaW5lclxuICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgIChjdXN0b21UZW1wbGF0ZXNTZXJ2aWNlLm1vZGFsVGVtcGxhdGUkIHwgYXN5bmMpIHx8IGRlZmF1bHRNb2RhbDtcbiAgICBjb250ZXh0OiBnZXRFZGl0TW9kYWxDb250ZXh0KClcbiAgXCJcbj48L25nLWNvbnRhaW5lcj5cblxuPG5nLXRlbXBsYXRlXG4gICNkZWZhdWx0TW9kYWxcbiAgbGV0LWlzT3Blbj1cImlzT3BlblwiXG4gIGxldC1pc09wZW5DaGFuZ2VIYW5kbGVyPVwiaXNPcGVuQ2hhbmdlSGFuZGxlclwiXG4gIGxldC1jb250ZW50PVwiY29udGVudFwiXG4+XG4gIDxzdHJlYW0tbW9kYWxcbiAgICBbaXNPcGVuXT1cImlzT3BlblwiXG4gICAgKm5nSWY9XCJpc09wZW5cIlxuICAgIChpc09wZW5DaGFuZ2UpPVwiaXNPcGVuQ2hhbmdlSGFuZGxlcigkZXZlbnQpXCJcbiAgICBbY29udGVudF09XCJjb250ZW50XCJcbiAgPlxuICA8L3N0cmVhbS1tb2RhbD5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjbW9kYWxDb250ZW50PlxuICA8ZGl2IGNsYXNzPVwic3RyLWNoYXRfX2VkaXQtbWVzc2FnZS1mb3JtXCIgKm5nSWY9XCJpc0VkaXRNb2RhbE9wZW5cIj5cbiAgICA8bmctdGVtcGxhdGVcbiAgICAgICNkZWZhdWx0SW5wdXRcbiAgICAgIGxldC1tZXNzYWdlSW5wdXQ9XCJtZXNzYWdlXCJcbiAgICAgIGxldC1tZXNzYWdlVXBkYXRlSGFuZGxlcj1cIm1lc3NhZ2VVcGRhdGVIYW5kbGVyXCJcbiAgICAgIGxldC1zZW5kTWVzc2FnZSRJbnB1dD1cInNlbmRNZXNzYWdlJFwiXG4gICAgPlxuICAgICAgPHN0cmVhbS1tZXNzYWdlLWlucHV0XG4gICAgICAgIFttZXNzYWdlXT1cIm1lc3NhZ2VJbnB1dFwiXG4gICAgICAgIChtZXNzYWdlVXBkYXRlKT1cIm1lc3NhZ2VVcGRhdGVIYW5kbGVyKClcIlxuICAgICAgICBbc2VuZE1lc3NhZ2UkXT1cInNlbmRNZXNzYWdlJElucHV0XCJcbiAgICAgID48L3N0cmVhbS1tZXNzYWdlLWlucHV0PlxuICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPG5nLWNvbnRhaW5lclxuICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgKGN1c3RvbVRlbXBsYXRlc1NlcnZpY2UubWVzc2FnZUlucHV0VGVtcGxhdGUkIHwgYXN5bmMpIHx8IGRlZmF1bHRJbnB1dDtcbiAgICAgICAgY29udGV4dDogZ2V0TWVzc2FnZUlucHV0Q29udGV4dCgpXG4gICAgICBcIlxuICAgID5cbiAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgIDxzdHJlYW0tbm90aWZpY2F0aW9uLWxpc3Q+PC9zdHJlYW0tbm90aWZpY2F0aW9uLWxpc3Q+XG4gICAgPGRpdlxuICAgICAgY2xhc3M9XCJcbiAgICAgICAgc3RyLWNoYXRfX21lc3NhZ2UtdGVhbS1mb3JtLWZvb3RlclxuICAgICAgICBzdHItY2hhdF9fbWVzc2FnZS10ZWFtLWZvcm0tZm9vdGVyLWFuZ3VsYXJcbiAgICAgIFwiXG4gICAgPlxuICAgICAgPGRpdiBjbGFzcz1cInN0ci1jaGF0X19lZGl0LW1lc3NhZ2UtZm9ybS1vcHRpb25zXCI+XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICBjbGFzcz1cInN0ci1jaGF0X19lZGl0LW1lc3NhZ2UtY2FuY2VsXCJcbiAgICAgICAgICB0cmFuc2xhdGVcbiAgICAgICAgICBkYXRhLXRlc3RpZD1cImNhbmNlbC1idXR0b25cIlxuICAgICAgICAgIChjbGljayk9XCJtb2RhbENsb3NlZCgpXCJcbiAgICAgICAgPlxuICAgICAgICAgIHN0cmVhbUNoYXQuQ2FuY2VsXG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgdHlwZT1cInN1Ym1pdFwiXG4gICAgICAgICAgdHJhbnNsYXRlXG4gICAgICAgICAgY2xhc3M9XCJzdHItY2hhdF9fZWRpdC1tZXNzYWdlLXNlbmRcIlxuICAgICAgICAgIGRhdGEtdGVzdGlkPVwic2VuZC1idXR0b25cIlxuICAgICAgICAgIChjbGljayk9XCJzZW5kQ2xpY2tlZCgpXCJcbiAgICAgICAgICAoa2V5dXAuZW50ZXIpPVwic2VuZENsaWNrZWQoKVwiXG4gICAgICAgID5cbiAgICAgICAgICBzdHJlYW1DaGF0LlNlbmRcbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuIl19
177
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVzc2FnZS1hY3Rpb25zLWJveC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zdHJlYW0tY2hhdC1hbmd1bGFyL3NyYy9saWIvbWVzc2FnZS1hY3Rpb25zLWJveC9tZXNzYWdlLWFjdGlvbnMtYm94LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3N0cmVhbS1jaGF0LWFuZ3VsYXIvc3JjL2xpYi9tZXNzYWdlLWFjdGlvbnMtYm94L21lc3NhZ2UtYWN0aW9ucy1ib3guY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUdMLFNBQVMsRUFDVCxZQUFZLEVBQ1osS0FBSyxFQUlMLE1BQU0sRUFHTixTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFjLE9BQU8sRUFBZ0IsTUFBTSxNQUFNLENBQUM7Ozs7Ozs7OztBQVd6RDs7R0FFRztBQU1ILE1BQU0sT0FBTywwQkFBMEI7SUEyRHJDLFlBQ2tCLHNCQUE4QyxFQUN0RCxxQkFBNEMsRUFDNUMsS0FBd0I7UUFGaEIsMkJBQXNCLEdBQXRCLHNCQUFzQixDQUF3QjtRQUN0RCwwQkFBcUIsR0FBckIscUJBQXFCLENBQXVCO1FBQzVDLFVBQUssR0FBTCxLQUFLLENBQW1CO1FBM0RsQzs7O1dBR0c7UUFDTSxXQUFNLEdBQUcsS0FBSyxDQUFDO1FBQ3hCOztXQUVHO1FBQ00sV0FBTSxHQUFHLEtBQUssQ0FBQztRQUt4Qjs7V0FFRztRQUNNLG1CQUFjLEdBQWEsRUFBRSxDQUFDO1FBQ3ZDOzs7Ozs7V0FNRztRQUNNLGtCQUFhLEdBQThCLEVBQUUsQ0FBQztRQUN2RDs7Ozs7O1dBTUc7UUFDZ0IsMEJBQXFCLEdBQUcsSUFBSSxZQUFZLEVBQVUsQ0FBQztRQUN0RTs7Ozs7O1dBTUc7UUFDZ0IsY0FBUyxHQUFHLElBQUksWUFBWSxFQUFXLENBQUM7UUFDM0Qsb0JBQWUsR0FB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QztvQkFDbkQsTUFBTSxFQUFFLEVBQUU7aUJBQ1g7aUxBUVUsTUFBTTtzQkFBZCxLQUFLO2dCQUlHLE1BQU07c0JBQWQsS0FBSztnQkFJRyxPQUFPO3NCQUFmLEtBQUs7Z0JBSUcsY0FBYztzQkFBdEIsS0FBSztnQkFRRyxhQUFhO3NCQUFyQixLQUFLO2dCQVFhLHFCQUFxQjtzQkFBdkMsTUFBTTtnQkFRWSxTQUFTO3NCQUEzQixNQUFNO2dCQVlDLFlBQVk7c0JBRG5CLFNBQVM7dUJBQUMsY0FBYyxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEFmdGVyVmlld0luaXQsXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIEV2ZW50RW1pdHRlcixcbiAgSW5wdXQsXG4gIE9uQ2hhbmdlcyxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIE91dHB1dCxcbiAgU2ltcGxlQ2hhbmdlcyxcbiAgVGVtcGxhdGVSZWYsXG4gIFZpZXdDaGlsZCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBTdWJqZWN0LCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEN1c3RvbVRlbXBsYXRlc1NlcnZpY2UgfSBmcm9tICcuLi9jdXN0b20tdGVtcGxhdGVzLnNlcnZpY2UnO1xuaW1wb3J0IHtcbiAgQ3VzdG9tTWVzc2FnZUFjdGlvbkl0ZW0sXG4gIE1lc3NhZ2VBY3Rpb25Cb3hJdGVtQ29udGV4dCxcbiAgTWVzc2FnZUFjdGlvbkl0ZW0sXG4gIE1lc3NhZ2VJbnB1dENvbnRleHQsXG4gIE1vZGFsQ29udGV4dCxcbiAgU3RyZWFtTWVzc2FnZSxcbn0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHsgTWVzc2FnZUFjdGlvbnNTZXJ2aWNlIH0gZnJvbSAnLi4vbWVzc2FnZS1hY3Rpb25zLnNlcnZpY2UnO1xuLyoqXG4gKiBUaGUgYE1lc3NhZ2VBY3Rpb25zQm94YCBjb21wb25lbnQgZGlzcGxheXMgYSBsaXN0IG9mIG1lc3NhZ2UgYWN0aW9ucyAoaS5lIGVkaXQpLCB0aGF0IGNhbiBiZSBvcGVuZWQgb3IgY2xvc2VkLiBZb3UgY2FuIGZpbmQgdGhlIFtsaXN0IG9mIHRoZSBzdXBwb3J0ZWQgYWN0aW9uc10oLi4vY29uY2VwdHMvbWVzc2FnZS1pbnRlcmFjdGlvbnMubWR4KSBpbiB0aGUgbWVzc2FnZSBpbnRlcmFjdGlvbiBndWlkZS5cbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnc3RyZWFtLW1lc3NhZ2UtYWN0aW9ucy1ib3gnLFxuICB0ZW1wbGF0ZVVybDogJy4vbWVzc2FnZS1hY3Rpb25zLWJveC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlczogW10sXG59KVxuZXhwb3J0IGNsYXNzIE1lc3NhZ2VBY3Rpb25zQm94Q29tcG9uZW50XG4gIGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMsIE9uRGVzdHJveSwgQWZ0ZXJWaWV3SW5pdFxue1xuICAvKipcbiAgICogSW5kaWNhdGVzIGlmIHRoZSBsaXN0IHNob3VsZCBiZSBvcGVuZWQgb3IgY2xvc2VkLiBBZGRpbmcgYSBVSSBlbGVtZW50IHRvIG9wZW4gYW5kIGNsb3NlIHRoZSBsaXN0IGlzIHRoZSBwYXJlbnQncyBjb21wb25lbnQgcmVzcG9uc2liaWxpdHkuXG4gICAqIEBkZXByZWNhdGVkIE5vIG5lZWQgZm9yIHRoaXMgc2luY2UgW3RoZW1lLXYyXSguLi90aGVtaW5nL2ludHJvZHVjdGlvbi5tZHgpXG4gICAqL1xuICBASW5wdXQoKSBpc09wZW4gPSBmYWxzZTtcbiAgLyoqXG4gICAqIEluZGljYXRlcyBpZiB0aGUgbWVzc2FnZSBhY3Rpb25zIGFyZSBiZWxvbmdpbmcgdG8gYSBtZXNzYWdlIHRoYXQgd2FzIHNlbnQgYnkgdGhlIGN1cnJlbnQgdXNlciBvciBub3QuXG4gICAqL1xuICBASW5wdXQoKSBpc01pbmUgPSBmYWxzZTtcbiAgLyoqXG4gICAqIFRoZSBtZXNzYWdlIHRoZSBhY3Rpb25zIHdpbGwgYmUgZXhlY3V0ZWQgb25cbiAgICovXG4gIEBJbnB1dCgpIG1lc3NhZ2U6IFN0cmVhbU1lc3NhZ2UgfCB1bmRlZmluZWQ7XG4gIC8qKlxuICAgKiBUaGUgbGlzdCBvZiBbY2hhbm5lbCBjYXBhYmlsaXRpZXNdKGh0dHBzOi8vZ2V0c3RyZWFtLmlvL2NoYXQvZG9jcy9qYXZhc2NyaXB0L2NoYW5uZWxfY2FwYWJpbGl0aWVzLz9sYW5ndWFnZT1qYXZhc2NyaXB0KSB0aGF0IGFyZSBlbmFibGVkIGZvciB0aGUgY3VycmVudCB1c2VyLCB0aGUgbGlzdCBvZiBbc3VwcG9ydGVkIGludGVyYWN0aW9uc10oLi4vY29uY2VwdHMvbWVzc2FnZS1pbnRlcmFjdGlvbnMubWR4KSBjYW4gYmUgZm91bmQgaW4gb3VyIG1lc3NhZ2UgaW50ZXJhY3Rpb24gZ3VpZGUuIFVuYXRob3JpemVkIGFjdGlvbnMgd29uJ3QgYmUgZGlzcGxheWVkIG9uIHRoZSBVSS5cbiAgICovXG4gIEBJbnB1dCgpIGVuYWJsZWRBY3Rpb25zOiBzdHJpbmdbXSA9IFtdO1xuICAvKipcbiAgICogQSBsaXN0IG9mIGN1c3RvbSBtZXNzYWdlIGFjdGlvbnMgdG8gYmUgZGlzcGxheWVkIGluIHRoZSBhY3Rpb24gYm94XG4gICAqXG4gICAqIEluIHRoZSBuZXh0IG1ham9yIHJlbGVhc2UgdGhpcyB3aWxsIGJlIHJlbGVhc2VkIHdpdGggYG1lc3NhZ2VSZWFjdGlvbnNTZXJ2aWNlLmN1c3RvbUFjdGlvbnMkYFxuICAgKlxuICAgKiBNb3JlIGluZm9ybWF0aW9uOiBodHRwczovL2dldHN0cmVhbS5pby9jaGF0L2RvY3Mvc2RrL2FuZ3VsYXIvc2VydmljZXMvTWVzc2FnZUFjdGlvbnNTZXJ2aWNlXG4gICAqL1xuICBASW5wdXQoKSBjdXN0b21BY3Rpb25zOiBDdXN0b21NZXNzYWdlQWN0aW9uSXRlbVtdID0gW107XG4gIC8qKlxuICAgKiBUaGUgbnVtYmVyIG9mIGF1dGhvcml6ZWQgYWN0aW9ucyAoaXQgY2FuIGJlIGxlc3Mgb3IgZXF1YWwgdGhhbiB0aGUgbnVtYmVyIG9mIGVuYWJsZWQgYWN0aW9ucylcbiAgICpcbiAgICogQGRlcHJlY2F0ZWQgY29tcG9uZW50cyBzaG91bGQgdXNlIGBtZXNzYWdlUmVhY3Rpb25zU2VydmljZS5nZXRBdXRob3JpemVkTWVzc2FnZUFjdGlvbnNDb3VudGAgbWV0aG9kXG4gICAqXG4gICAqIE1vcmUgaW5mb3JtYXRpb246IGh0dHBzOi8vZ2V0c3RyZWFtLmlvL2NoYXQvZG9jcy9zZGsvYW5ndWxhci9zZXJ2aWNlcy9NZXNzYWdlQWN0aW9uc1NlcnZpY2VcbiAgICovXG4gIEBPdXRwdXQoKSByZWFkb25seSBkaXNwbGF5ZWRBY3Rpb25zQ291bnQgPSBuZXcgRXZlbnRFbWl0dGVyPG51bWJlcj4oKTtcbiAgLyoqXG4gICAqIEFuIGV2ZW50IHdoaWNoIGVtaXRzIGB0cnVlYCBpZiB0aGUgZWRpdCBtZXNzYWdlIG1vZGFsIGlzIG9wZW4sIGFuZCBgZmFsc2VgIHdoZW4gaXQgaXMgY2xvc2VkLlxuICAgKlxuICAgKiBAZGVwcmVjYXRlZCBjb21wb25lbnRzIHNob3VsZCB1c2UgYG1lc3NhZ2VSZWFjdGlvbnNTZXJ2aWNlLmdldEF1dGhvcml6ZWRNZXNzYWdlQWN0aW9uc0NvdW50YCBtZXRob2RcbiAgICpcbiAgICogTW9yZSBpbmZvcm1hdGlvbjogaHR0cHM6Ly9nZXRzdHJlYW0uaW8vY2hhdC9kb2NzL3Nkay9hbmd1bGFyL3NlcnZpY2VzL01lc3NhZ2VBY3Rpb25zU2VydmljZVxuICAgKi9cbiAgQE91dHB1dCgpIHJlYWRvbmx5IGlzRWRpdGluZyA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcbiAgaXNFZGl0TW9kYWxPcGVuID0gZmFsc2U7XG4gIG1lc3NhZ2VJbnB1dFRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxNZXNzYWdlSW5wdXRDb250ZXh0PiB8IHVuZGVmaW5lZDtcbiAgbWVzc2FnZUFjdGlvbkl0ZW1UZW1wbGF0ZTpcbiAgICB8IFRlbXBsYXRlUmVmPE1lc3NhZ2VBY3Rpb25Cb3hJdGVtQ29udGV4dD5cbiAgICB8IHVuZGVmaW5lZDtcbiAgbW9kYWxUZW1wbGF0ZTogVGVtcGxhdGVSZWY8TW9kYWxDb250ZXh0PiB8IHVuZGVmaW5lZDtcbiAgdmlzaWJsZU1lc3NhZ2VBY3Rpb25JdGVtczogKE1lc3NhZ2VBY3Rpb25JdGVtIHwgQ3VzdG9tTWVzc2FnZUFjdGlvbkl0ZW0pW10gPVxuICAgIFtdO1xuICBzZW5kTWVzc2FnZSQ6IE9ic2VydmFibGU8dm9pZD47XG4gIHByaXZhdGUgcmVhZG9ubHkgbWVzc2FnZUFjdGlvbkl0ZW1zOiBNZXNzYWdlQWN0aW9uSXRlbVtdO1xuICBAVmlld0NoaWxkKCdtb2RhbENvbnRlbnQnLCB7IHN0YXRpYzogdHJ1ZSB9KVxuICBwcml2YXRlIG1vZGFsQ29udGVudCE6IFRlbXBsYXRlUmVmPHZvaWQ+O1xuICBwcml2YXRlIHNlbmRNZXNzYWdlU3ViamVjdCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG4gIHByaXZhdGUgc3Vic2NyaXB0aW9uczogU3Vic2NyaXB0aW9uW10gPSBbXTtcbiAgcHJpdmF0ZSBpc1ZpZXdJbml0ZWQgPSBmYWxzZTtcbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIHJlYWRvbmx5IGN1c3RvbVRlbXBsYXRlc1NlcnZpY2U6IEN1c3RvbVRlbXBsYXRlc1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBtZXNzYWdlQWN0aW9uc1NlcnZpY2U6IE1lc3NhZ2VBY3Rpb25zU2VydmljZSxcbiAgICBwcml2YXRlIGNkUmVmOiBDaGFuZ2VEZXRlY3RvclJlZlxuICApIHtcbiAgICB0aGlzLm1lc3NhZ2VBY3Rpb25JdGVtcyA9IHRoaXMubWVzc2FnZUFjdGlvbnNTZXJ2aWNlLmRlZmF1bHRBY3Rpb25zO1xuICAgIHRoaXMuc2VuZE1lc3NhZ2UkID0gdGhpcy5zZW5kTWVzc2FnZVN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcbiAgICAgIHRoaXMubWVzc2FnZUFjdGlvbnNTZXJ2aWNlLm1lc3NhZ2VUb0VkaXQkLnN1YnNjcmliZSgobSkgPT4ge1xuICAgICAgICBsZXQgaXNFZGl0TW9kYWxPcGVuID0gZmFsc2U7XG4gICAgICAgIGlmIChtICYmIG0uaWQgPT09IHRoaXMubWVzc2FnZT8uaWQpIHtcbiAgICAgICAgICBpc0VkaXRNb2RhbE9wZW4gPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc0VkaXRNb2RhbE9wZW4gIT09IHRoaXMuaXNFZGl0TW9kYWxPcGVuKSB7XG4gICAgICAgICAgdGhpcy5pc0VkaXRNb2RhbE9wZW4gPSBpc0VkaXRNb2RhbE9wZW47XG4gICAgICAgICAgdGhpcy5pc0VkaXRpbmcuZW1pdCh0aGlzLmlzRWRpdE1vZGFsT3Blbik7XG4gICAgICAgICAgaWYgKHRoaXMuaXNWaWV3SW5pdGVkKSB7XG4gICAgICAgICAgICB0aGlzLmNkUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBpZiAoXG4gICAgICBjaGFuZ2VzLmlzTWluZSB8fFxuICAgICAgY2hhbmdlcy5lbmFibGVkQWN0aW9ucyB8fFxuICAgICAgY2hhbmdlcy5tZXNzYWdlIHx8XG4gICAgICBjaGFuZ2VzLmN1c3RvbUFjdGlvbnNcbiAgICApIHtcbiAgICAgIHRoaXMuc2V0VmlzaWJsZUFjdGlvbnMoKTtcbiAgICB9XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgdGhpcy5pc1ZpZXdJbml0ZWQgPSB0cnVlO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLmZvckVhY2goKHMpID0+IHMudW5zdWJzY3JpYmUoKSk7XG4gIH1cblxuICBnZXRBY3Rpb25MYWJlbChcbiAgICBhY3Rpb25MYWJlbE9yVHJhbnNsYXRpb25LZXk6ICgobWVzc2FnZTogU3RyZWFtTWVzc2FnZSkgPT4gc3RyaW5nKSB8IHN0cmluZ1xuICApIHtcbiAgICByZXR1cm4gdHlwZW9mIGFjdGlvbkxhYmVsT3JUcmFuc2xhdGlvbktleSA9PT0gJ3N0cmluZydcbiAgICAgID8gYWN0aW9uTGFiZWxPclRyYW5zbGF0aW9uS2V5XG4gICAgICA6IGFjdGlvbkxhYmVsT3JUcmFuc2xhdGlvbktleSh0aGlzLm1lc3NhZ2UhKTtcbiAgfVxuXG4gIGdldE1lc3NhZ2VBY3Rpb25UZW1wbGF0ZUNvbnRleHQoXG4gICAgaXRlbTogTWVzc2FnZUFjdGlvbkl0ZW0gfCBDdXN0b21NZXNzYWdlQWN0aW9uSXRlbVxuICApOiBNZXNzYWdlQWN0aW9uQm94SXRlbUNvbnRleHQ8YW55PiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGFjdGlvbkhhbmRsZXI6IGl0ZW0uYWN0aW9uSGFuZGxlcixcbiAgICAgIGlzTWluZTogdGhpcy5pc01pbmUsXG4gICAgICBhY3Rpb25OYW1lOiBpdGVtLmFjdGlvbk5hbWUsXG4gICAgICBtZXNzYWdlOiB0aGlzLm1lc3NhZ2UsXG4gICAgICBhY3Rpb25MYWJlbE9yVHJhbnNsYXRpb25LZXk6IGl0ZW0uYWN0aW9uTGFiZWxPclRyYW5zbGF0aW9uS2V5LFxuICAgIH07XG4gIH1cblxuICBzZW5kQ2xpY2tlZCgpIHtcbiAgICB0aGlzLnNlbmRNZXNzYWdlU3ViamVjdC5uZXh0KCk7XG4gIH1cblxuICBtb2RhbENsb3NlZCA9ICgpID0+IHtcbiAgICB0aGlzLmlzRWRpdE1vZGFsT3BlbiA9IGZhbHNlO1xuICAgIHRoaXMubWVzc2FnZUFjdGlvbnNTZXJ2aWNlLm1lc3NhZ2VUb0VkaXQkLm5leHQodW5kZWZpbmVkKTtcbiAgfTtcblxuICBnZXRNZXNzYWdlSW5wdXRDb250ZXh0KCk6IE1lc3NhZ2VJbnB1dENvbnRleHQge1xuICAgIHJldHVybiB7XG4gICAgICBtZXNzYWdlOiB0aGlzLm1lc3NhZ2UsXG4gICAgICBtZXNzYWdlVXBkYXRlSGFuZGxlcjogdGhpcy5tb2RhbENsb3NlZCxcbiAgICAgIGlzRmlsZVVwbG9hZEVuYWJsZWQ6IHVuZGVmaW5lZCxcbiAgICAgIGFyZU1lbnRpb25zRW5hYmxlZDogdW5kZWZpbmVkLFxuICAgICAgaXNNdWx0aXBsZUZpbGVVcGxvYWRFbmFibGVkOiB1bmRlZmluZWQsXG4gICAgICBtZW50aW9uU2NvcGU6IHVuZGVmaW5lZCxcbiAgICAgIG1vZGU6IHVuZGVmaW5lZCxcbiAgICAgIHNlbmRNZXNzYWdlJDogdGhpcy5zZW5kTWVzc2FnZSQsXG4gICAgfTtcbiAgfVxuXG4gIGdldEVkaXRNb2RhbENvbnRleHQoKTogTW9kYWxDb250ZXh0IHtcbiAgICByZXR1cm4ge1xuICAgICAgaXNPcGVuOiB0aGlzLmlzRWRpdE1vZGFsT3BlbixcbiAgICAgIGlzT3BlbkNoYW5nZUhhbmRsZXI6IChpc09wZW4pID0+IHtcbiAgICAgICAgdGhpcy5pc0VkaXRNb2RhbE9wZW4gPSBpc09wZW47XG4gICAgICAgIGlmICghdGhpcy5pc0VkaXRNb2RhbE9wZW4pIHtcbiAgICAgICAgICB0aGlzLm1vZGFsQ2xvc2VkKCk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBjb250ZW50OiB0aGlzLm1vZGFsQ29udGVudCxcbiAgICB9O1xuICB9XG5cbiAgdHJhY2tCeUFjdGlvbk5hbWUoXG4gICAgXzogbnVtYmVyLFxuICAgIGl0ZW06IE1lc3NhZ2VBY3Rpb25JdGVtIHwgQ3VzdG9tTWVzc2FnZUFjdGlvbkl0ZW1cbiAgKSB7XG4gICAgcmV0dXJuIGl0ZW0uYWN0aW9uTmFtZTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0VmlzaWJsZUFjdGlvbnMoKSB7XG4gICAgdGhpcy52aXNpYmxlTWVzc2FnZUFjdGlvbkl0ZW1zID0gW1xuICAgICAgLi4udGhpcy5tZXNzYWdlQWN0aW9uSXRlbXMsXG4gICAgICAuLi50aGlzLmN1c3RvbUFjdGlvbnMsXG4gICAgXS5maWx0ZXIoKGl0ZW0pID0+XG4gICAgICBpdGVtLmlzVmlzaWJsZSh0aGlzLmVuYWJsZWRBY3Rpb25zLCB0aGlzLmlzTWluZSwgdGhpcy5tZXNzYWdlISlcbiAgICApO1xuICAgIHRoaXMuZGlzcGxheWVkQWN0aW9uc0NvdW50LmVtaXQodGhpcy52aXNpYmxlTWVzc2FnZUFjdGlvbkl0ZW1zLmxlbmd0aCk7XG4gIH1cbn1cbiIsIjxkaXZcbiAgI2FjdGlvbkJveFxuICBkYXRhLXRlc3RpZD1cImFjdGlvbi1ib3hcIlxuICBjbGFzcz1cInN0ci1jaGF0X19tZXNzYWdlLWFjdGlvbnMtYm94IHN0ci1jaGF0X19tZXNzYWdlLWFjdGlvbnMtYm94LWFuZ3VsYXJcIlxuICBbY2xhc3Muc3RyLWNoYXRfX21lc3NhZ2UtYWN0aW9ucy1ib3gtLW9wZW5dPVwidHJ1ZVwiXG4+XG4gIDx1bCBjbGFzcz1cInN0ci1jaGF0X19tZXNzYWdlLWFjdGlvbnMtbGlzdFwiPlxuICAgIDxuZy1jb250YWluZXJcbiAgICAgICpuZ0Zvcj1cImxldCBpdGVtIG9mIHZpc2libGVNZXNzYWdlQWN0aW9uSXRlbXM7IHRyYWNrQnk6IHRyYWNrQnlBY3Rpb25OYW1lXCJcbiAgICA+XG4gICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgICAgKGN1c3RvbVRlbXBsYXRlc1NlcnZpY2UubWVzc2FnZUFjdGlvbnNCb3hJdGVtVGVtcGxhdGUkIHwgYXN5bmMpIHx8XG4gICAgICAgICAgICBkZWZhdWx0TWVzc2FnZUFjdGlvbkl0ZW07XG4gICAgICAgICAgY29udGV4dDogZ2V0TWVzc2FnZUFjdGlvblRlbXBsYXRlQ29udGV4dChpdGVtKVxuICAgICAgICBcIlxuICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgIDwvbmctY29udGFpbmVyPlxuICA8L3VsPlxuPC9kaXY+XG5cbjxuZy10ZW1wbGF0ZVxuICAjZGVmYXVsdE1lc3NhZ2VBY3Rpb25JdGVtXG4gIGxldC1hY3Rpb25OYW1lPVwiYWN0aW9uTmFtZVwiXG4gIGxldC1hY3Rpb25IYW5kbGVyPVwiYWN0aW9uSGFuZGxlclwiXG4gIGxldC1hY3Rpb25MYWJlbE9yVHJhbnNsYXRpb25LZXk9XCJhY3Rpb25MYWJlbE9yVHJhbnNsYXRpb25LZXlcIlxuPlxuICA8YnV0dG9uXG4gICAgY2xhc3M9XCJzdHItY2hhdF9fbWVzc2FnZS1hY3Rpb25zLWxpc3QtaXRlbS1idXR0b25cIlxuICAgIFthdHRyLmRhdGEtdGVzdGlkXT1cImFjdGlvbk5hbWUgKyAnLWFjdGlvbidcIlxuICAgIChjbGljayk9XCJhY3Rpb25IYW5kbGVyKG1lc3NhZ2UsIGlzTWluZSlcIlxuICA+XG4gICAgPGxpIGNsYXNzPVwic3RyLWNoYXRfX21lc3NhZ2UtYWN0aW9ucy1saXN0LWl0ZW1cIj5cbiAgICAgIHt7IGdldEFjdGlvbkxhYmVsKGFjdGlvbkxhYmVsT3JUcmFuc2xhdGlvbktleSkgfCB0cmFuc2xhdGUgfX1cbiAgICA8L2xpPlxuICA8L2J1dHRvbj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy1jb250YWluZXJcbiAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAoY3VzdG9tVGVtcGxhdGVzU2VydmljZS5tb2RhbFRlbXBsYXRlJCB8IGFzeW5jKSB8fCBkZWZhdWx0TW9kYWw7XG4gICAgY29udGV4dDogZ2V0RWRpdE1vZGFsQ29udGV4dCgpXG4gIFwiXG4+PC9uZy1jb250YWluZXI+XG5cbjxuZy10ZW1wbGF0ZVxuICAjZGVmYXVsdE1vZGFsXG4gIGxldC1pc09wZW49XCJpc09wZW5cIlxuICBsZXQtaXNPcGVuQ2hhbmdlSGFuZGxlcj1cImlzT3BlbkNoYW5nZUhhbmRsZXJcIlxuICBsZXQtY29udGVudD1cImNvbnRlbnRcIlxuPlxuICA8c3RyZWFtLW1vZGFsXG4gICAgW2lzT3Blbl09XCJpc09wZW5cIlxuICAgICpuZ0lmPVwiaXNPcGVuXCJcbiAgICAoaXNPcGVuQ2hhbmdlKT1cImlzT3BlbkNoYW5nZUhhbmRsZXIoJGV2ZW50KVwiXG4gICAgW2NvbnRlbnRdPVwiY29udGVudFwiXG4gID5cbiAgPC9zdHJlYW0tbW9kYWw+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI21vZGFsQ29udGVudD5cbiAgPGRpdiBjbGFzcz1cInN0ci1jaGF0X19lZGl0LW1lc3NhZ2UtZm9ybVwiICpuZ0lmPVwiaXNFZGl0TW9kYWxPcGVuXCI+XG4gICAgPG5nLXRlbXBsYXRlXG4gICAgICAjZGVmYXVsdElucHV0XG4gICAgICBsZXQtbWVzc2FnZUlucHV0PVwibWVzc2FnZVwiXG4gICAgICBsZXQtbWVzc2FnZVVwZGF0ZUhhbmRsZXI9XCJtZXNzYWdlVXBkYXRlSGFuZGxlclwiXG4gICAgICBsZXQtc2VuZE1lc3NhZ2UkSW5wdXQ9XCJzZW5kTWVzc2FnZSRcIlxuICAgID5cbiAgICAgIDxzdHJlYW0tbWVzc2FnZS1pbnB1dFxuICAgICAgICBbbWVzc2FnZV09XCJtZXNzYWdlSW5wdXRcIlxuICAgICAgICAobWVzc2FnZVVwZGF0ZSk9XCJtZXNzYWdlVXBkYXRlSGFuZGxlcigpXCJcbiAgICAgICAgW3NlbmRNZXNzYWdlJF09XCJzZW5kTWVzc2FnZSRJbnB1dFwiXG4gICAgICA+PC9zdHJlYW0tbWVzc2FnZS1pbnB1dD5cbiAgICA8L25nLXRlbXBsYXRlPlxuICAgIDxuZy1jb250YWluZXJcbiAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgIChjdXN0b21UZW1wbGF0ZXNTZXJ2aWNlLm1lc3NhZ2VJbnB1dFRlbXBsYXRlJCB8IGFzeW5jKSB8fCBkZWZhdWx0SW5wdXQ7XG4gICAgICAgIGNvbnRleHQ6IGdldE1lc3NhZ2VJbnB1dENvbnRleHQoKVxuICAgICAgXCJcbiAgICA+XG4gICAgPC9uZy1jb250YWluZXI+XG5cbiAgICA8c3RyZWFtLW5vdGlmaWNhdGlvbi1saXN0Pjwvc3RyZWFtLW5vdGlmaWNhdGlvbi1saXN0PlxuICAgIDxkaXZcbiAgICAgIGNsYXNzPVwiXG4gICAgICAgIHN0ci1jaGF0X19tZXNzYWdlLXRlYW0tZm9ybS1mb290ZXJcbiAgICAgICAgc3RyLWNoYXRfX21lc3NhZ2UtdGVhbS1mb3JtLWZvb3Rlci1hbmd1bGFyXG4gICAgICBcIlxuICAgID5cbiAgICAgIDxkaXYgY2xhc3M9XCJzdHItY2hhdF9fZWRpdC1tZXNzYWdlLWZvcm0tb3B0aW9uc1wiPlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgY2xhc3M9XCJzdHItY2hhdF9fZWRpdC1tZXNzYWdlLWNhbmNlbFwiXG4gICAgICAgICAgdHJhbnNsYXRlXG4gICAgICAgICAgZGF0YS10ZXN0aWQ9XCJjYW5jZWwtYnV0dG9uXCJcbiAgICAgICAgICAoY2xpY2spPVwibW9kYWxDbG9zZWQoKVwiXG4gICAgICAgID5cbiAgICAgICAgICBzdHJlYW1DaGF0LkNhbmNlbFxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgIHR5cGU9XCJzdWJtaXRcIlxuICAgICAgICAgIHRyYW5zbGF0ZVxuICAgICAgICAgIGNsYXNzPVwic3RyLWNoYXRfX2VkaXQtbWVzc2FnZS1zZW5kXCJcbiAgICAgICAgICBkYXRhLXRlc3RpZD1cInNlbmQtYnV0dG9uXCJcbiAgICAgICAgICAoY2xpY2spPVwic2VuZENsaWNrZWQoKVwiXG4gICAgICAgICAgKGtleXVwLmVudGVyKT1cInNlbmRDbGlja2VkKClcIlxuICAgICAgICA+XG4gICAgICAgICAgc3RyZWFtQ2hhdC5TZW5kXG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==