stream-chat-angular 4.15.1 → 4.16.0
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/assets/version.d.ts +1 -1
- package/bundles/stream-chat-angular.umd.js +47 -18
- package/bundles/stream-chat-angular.umd.js.map +1 -1
- package/esm2015/assets/version.js +2 -2
- package/esm2015/lib/message-actions-box/message-actions-box.component.js +1 -1
- package/esm2015/lib/message-input/autocomplete-textarea/autocomplete-textarea.component.js +10 -6
- package/esm2015/lib/message-input/message-input-config.service.js +5 -1
- package/esm2015/lib/message-input/message-input.component.js +8 -2
- package/esm2015/lib/message-input/textarea/textarea.component.js +9 -5
- package/esm2015/lib/message-input/textarea.directive.js +8 -2
- package/esm2015/lib/message-input/textarea.interface.js +1 -1
- package/esm2015/lib/message-list/message-list.component.js +11 -6
- package/fesm2015/stream-chat-angular.js +47 -18
- package/fesm2015/stream-chat-angular.js.map +1 -1
- package/lib/message-input/autocomplete-textarea/autocomplete-textarea.component.d.ts +6 -2
- package/lib/message-input/message-input-config.service.d.ts +4 -0
- package/lib/message-input/message-input.component.d.ts +5 -1
- package/lib/message-input/textarea/textarea.component.d.ts +6 -2
- package/lib/message-input/textarea.directive.d.ts +2 -1
- package/lib/message-input/textarea.interface.d.ts +1 -0
- package/lib/message-list/message-list.component.d.ts +5 -1
- package/package.json +1 -1
- package/src/assets/styles/v2/css/index.css +1 -1
- package/src/assets/styles/v2/css/index.css.map +1 -1
- package/src/assets/styles/v2/css/index.layout.css +1 -1
- package/src/assets/styles/v2/css/index.layout.css.map +1 -1
- package/src/assets/styles/v2/scss/Message/Message-layout.scss +38 -16
- package/src/assets/version.ts +1 -1
|
@@ -27,6 +27,10 @@ export class MessageListComponent {
|
|
|
27
27
|
* The direction of the messages in the list, `bottom-to-top` means newest message is at the bottom of the message list and users scroll upwards to load older messages
|
|
28
28
|
*/
|
|
29
29
|
this.direction = 'bottom-to-top';
|
|
30
|
+
/**
|
|
31
|
+
* Determines what triggers the appearance of the message options: by default you can hover (click on mobile) anywhere in the row of the message (`message-row` option), or you can set `message-bubble`, in that case only a hover (click on mobile) in the message bubble will trigger the options to appear.
|
|
32
|
+
*/
|
|
33
|
+
this.messageOptionsTrigger = 'message-row';
|
|
30
34
|
this.enabledMessageActions = [];
|
|
31
35
|
this.class = 'str-chat-angular__main-panel-inner str-chat-angular__message-list-host str-chat__main-panel-inner';
|
|
32
36
|
this.unreadMessageCount = 0;
|
|
@@ -139,10 +143,9 @@ export class MessageListComponent {
|
|
|
139
143
|
this.containerHeight = this.scrollContainer.nativeElement.scrollHeight;
|
|
140
144
|
this.olderMassagesLoaded = false;
|
|
141
145
|
}
|
|
142
|
-
else if (this.
|
|
143
|
-
this.
|
|
144
|
-
|
|
145
|
-
!this.isUserScrolled) {
|
|
146
|
+
else if (this.getScrollPosition() !== 'bottom' &&
|
|
147
|
+
!this.isUserScrolled &&
|
|
148
|
+
!this.highlightedMessageId) {
|
|
146
149
|
this.isLatestMessageInList
|
|
147
150
|
? this.scrollToBottom()
|
|
148
151
|
: this.jumpToLatestMessage();
|
|
@@ -345,7 +348,7 @@ export class MessageListComponent {
|
|
|
345
348
|
}
|
|
346
349
|
}
|
|
347
350
|
MessageListComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.5", ngImport: i0, type: MessageListComponent, deps: [{ token: i1.ChannelService }, { token: i2.ChatClientService }, { token: i3.CustomTemplatesService }], target: i0.ɵɵFactoryTarget.Component });
|
|
348
|
-
MessageListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.5", type: MessageListComponent, selector: "stream-message-list", inputs: { mode: "mode", direction: "direction" }, host: { properties: { "class": "this.class" } }, viewQueries: [{ propertyName: "scrollContainer", first: true, predicate: ["scrollContainer"], descendants: true }, { propertyName: "parentMessageElement", first: true, predicate: ["parentMessageElement"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div\n #scrollContainer\n data-testid=\"scroll-container\"\n class=\"str-chat__list\"\n (scroll)=\"scrolled()\"\n>\n <div class=\"str-chat__reverse-infinite-scroll str-chat__message-list-scroll\">\n <ul
|
|
351
|
+
MessageListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.5", type: MessageListComponent, selector: "stream-message-list", inputs: { mode: "mode", direction: "direction", messageOptionsTrigger: "messageOptionsTrigger" }, host: { properties: { "class": "this.class" } }, viewQueries: [{ propertyName: "scrollContainer", first: true, predicate: ["scrollContainer"], descendants: true }, { propertyName: "parentMessageElement", first: true, predicate: ["parentMessageElement"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div\n #scrollContainer\n data-testid=\"scroll-container\"\n class=\"str-chat__list\"\n (scroll)=\"scrolled()\"\n>\n <div class=\"str-chat__reverse-infinite-scroll str-chat__message-list-scroll\">\n <ul\n class=\"str-chat__ul\"\n [class.str-chat__message-options-in-bubble]=\"\n messageOptionsTrigger === 'message-bubble'\n \"\n >\n <li\n #parentMessageElement\n *ngIf=\"mode === 'thread'\"\n data-testid=\"parent-message\"\n class=\"str-chat__parent-message-li\"\n >\n <ng-container\n *ngTemplateOutlet=\"\n messageTemplateContainer;\n context: { message: parentMessage }\n \"\n ></ng-container>\n <div data-testid=\"reply-count\" class=\"str-chat__thread-start\">\n {{parentMessage?.reply_count === 1 ? ('streamChat.1 reply' | translate) : ('streamChat.{{ replyCount }}\n replies' | translate:replyCountParam)}}\n </div>\n </li>\n <stream-loading-indicator\n data-testid=\"top-loading-indicator\"\n *ngIf=\"isLoading && direction === 'bottom-to-top'\"\n ></stream-loading-indicator>\n <li\n tabindex=\"0\"\n data-testclass=\"message\"\n *ngFor=\"\n let message of messages$ | async;\n let i = index;\n trackBy: trackByMessageId\n \"\n class=\"str-chat__li str-chat__li--{{ groupStyles[i] }}\"\n id=\"{{ message.id }}\"\n >\n <ng-container\n *ngTemplateOutlet=\"\n messageTemplateContainer;\n context: { message: message }\n \"\n ></ng-container>\n </li>\n <stream-loading-indicator\n data-testid=\"bottom-loading-indicator\"\n *ngIf=\"isLoading && direction === 'top-to-bottom'\"\n ></stream-loading-indicator>\n </ul>\n <ng-template #defaultTypingIndicator let-usersTyping$=\"usersTyping$\">\n <!-- eslint-disable-next-line @angular-eslint/template/no-any -->\n <ng-container *ngIf=\"$any(usersTyping$ | async) as users\">\n <div\n *ngIf=\"users.length > 0\"\n data-testid=\"typing-indicator\"\n class=\"str-chat__typing-indicator str-chat__typing-indicator--typing\"\n >\n <div class=\"str-chat__typing-indicator__dots\">\n <span class=\"str-chat__typing-indicator__dot\"></span>\n <span class=\"str-chat__typing-indicator__dot\"></span>\n <span class=\"str-chat__typing-indicator__dot\"></span>\n </div>\n <div\n data-testid=\"typing-users\"\n class=\"str-chat__typing-indicator__users\"\n >\n {{\n users.length === 1\n ? (\"streamChat.user is typing\"\n | translate: { user: getTypingIndicatorText(users) })\n : (\"streamChat.users are typing\"\n | translate: { users: getTypingIndicatorText(users) })\n }}\n </div>\n </div>\n </ng-container>\n </ng-template>\n <ng-container\n *ngTemplateOutlet=\"\n typingIndicatorTemplate || defaultTypingIndicator;\n context: getTypingIndicatorContext()\n \"\n ></ng-container>\n </div>\n</div>\n<div class=\"str-chat__jump-to-latest-message\">\n <button\n data-testid=\"scroll-to-latest\"\n *ngIf=\"isUserScrolled\"\n class=\"\n str-chat__message-notification-scroll-to-latest\n str-chat__message-notification-scroll-to-latest-right\n str-chat__circle-fab\n \"\n (keyup.enter)=\"jumpToLatestMessage()\"\n (click)=\"jumpToLatestMessage()\"\n >\n <stream-icon\n class=\"str-chat__jump-to-latest-icon str-chat__circle-fab-icon\"\n [icon]=\"direction === 'bottom-to-top' ? 'arrow-down' : 'arrow-up'\"\n ></stream-icon>\n <div\n *ngIf=\"unreadMessageCount > 0\"\n class=\"\n str-chat__message-notification\n str-chat__message-notification-scroll-to-latest-unread-count\n str-chat__jump-to-latest-unread-count\n \"\n >\n {{ unreadMessageCount }}\n </div>\n </button>\n</div>\n\n<ng-template #messageTemplateContainer let-message=\"message\">\n <ng-template\n #defaultMessageTemplate\n let-messageInput=\"message\"\n let-isLastSentMessage=\"isLastSentMessage\"\n let-enabledMessageActions=\"enabledMessageActions\"\n let-mode=\"mode\"\n let-isHighlighted=\"isHighlighted\"\n >\n <stream-message\n [message]=\"messageInput\"\n [isLastSentMessage]=\"isLastSentMessage\"\n [enabledMessageActions]=\"enabledMessageActions\"\n [mode]=\"mode\"\n [isHighlighted]=\"isHighlighted\"\n ></stream-message>\n </ng-template>\n <ng-container\n *ngTemplateOutlet=\"\n messageTemplate || defaultMessageTemplate;\n context: getMessageContext(message)\n \"\n ></ng-container>\n</ng-template>\n", components: [{ type: i4.LoadingIndicatorComponent, selector: "stream-loading-indicator", inputs: ["size", "color"] }, { type: i5.IconComponent, selector: "stream-icon", inputs: ["icon", "size"] }, { type: i6.MessageComponent, selector: "stream-message", inputs: ["message", "enabledMessageActions", "isLastSentMessage", "mode", "isHighlighted"] }], directives: [{ type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i7.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: i7.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }], pipes: { "translate": i8.TranslatePipe, "async": i7.AsyncPipe } });
|
|
349
352
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.5", ngImport: i0, type: MessageListComponent, decorators: [{
|
|
350
353
|
type: Component,
|
|
351
354
|
args: [{
|
|
@@ -357,6 +360,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.5", ngImpor
|
|
|
357
360
|
type: Input
|
|
358
361
|
}], direction: [{
|
|
359
362
|
type: Input
|
|
363
|
+
}], messageOptionsTrigger: [{
|
|
364
|
+
type: Input
|
|
360
365
|
}], class: [{
|
|
361
366
|
type: HostBinding,
|
|
362
367
|
args: ['class']
|
|
@@ -367,4 +372,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.5", ngImpor
|
|
|
367
372
|
type: ViewChild,
|
|
368
373
|
args: ['parentMessageElement']
|
|
369
374
|
}] } });
|
|
370
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVzc2FnZS1saXN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3N0cmVhbS1jaGF0LWFuZ3VsYXIvc3JjL2xpYi9tZXNzYWdlLWxpc3QvbWVzc2FnZS1saXN0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3N0cmVhbS1jaGF0LWFuZ3VsYXIvc3JjL2xpYi9tZXNzYWdlLWxpc3QvbWVzc2FnZS1saXN0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFHTCxTQUFTLEVBRVQsV0FBVyxFQUNYLEtBQUssRUFNTCxTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUM7QUFHdkIsT0FBTyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFRbEQsT0FBTyxFQUFFLGNBQWMsRUFBYyxNQUFNLGdCQUFnQixDQUFDO0FBRzVELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7Ozs7Ozs7Ozs7QUFFMUM7O0dBRUc7QUFNSCxNQUFNLE9BQU8sb0JBQW9CO0lBNkMvQixZQUNVLGNBQThCLEVBQzlCLGlCQUFvQyxFQUNwQyxzQkFBOEM7UUFGOUMsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQzlCLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBbUI7UUFDcEMsMkJBQXNCLEdBQXRCLHNCQUFzQixDQUF3QjtRQTdDeEQ7O1dBRUc7UUFDTSxTQUFJLEdBQXNCLE1BQU0sQ0FBQztRQUMxQzs7V0FFRztRQUNNLGNBQVMsR0FBc0MsZUFBZSxDQUFDO1FBSXhFLDBCQUFxQixHQUFhLEVBQUUsQ0FBQztRQUNQLFVBQUssR0FDakMsbUdBQW1HLENBQUM7UUFDdEcsdUJBQWtCLEdBQUcsQ0FBQyxDQUFDO1FBRXZCLGdCQUFXLEdBQWlCLEVBQUUsQ0FBQztRQUkvQixjQUFTLEdBQUcsS0FBSyxDQUFDO1FB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K0I7b0JBQzVDLE1BQU0sRUFBRSxFQUFFO2lCQUNYOzBLQU9VLElBQUk7c0JBQVosS0FBSztnQkFJRyxTQUFTO3NCQUFqQixLQUFLO2dCQUt3QixLQUFLO3NCQUFsQyxXQUFXO3VCQUFDLE9BQU87Z0JBVVosZUFBZTtzQkFEdEIsU0FBUzt1QkFBQyxpQkFBaUI7Z0JBR3BCLG9CQUFvQjtzQkFEM0IsU0FBUzt1QkFBQyxzQkFBc0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBZnRlclZpZXdDaGVja2VkLFxuICBBZnRlclZpZXdJbml0LFxuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIEhvc3RCaW5kaW5nLFxuICBJbnB1dCxcbiAgT25DaGFuZ2VzLFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgU2ltcGxlQ2hhbmdlcyxcbiAgVGVtcGxhdGVSZWYsXG4gIFZpZXdDaGlsZCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDaGFubmVsU2VydmljZSB9IGZyb20gJy4uL2NoYW5uZWwuc2VydmljZSc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGZpbHRlciwgbWFwLCB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQge1xuICBNZXNzYWdlQ29udGV4dCxcbiAgRGVmYXVsdFN0cmVhbUNoYXRHZW5lcmljcyxcbiAgU3RyZWFtTWVzc2FnZSxcbiAgVHlwaW5nSW5kaWNhdG9yQ29udGV4dCxcbn0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHsgQ2hhdENsaWVudFNlcnZpY2UgfSBmcm9tICcuLi9jaGF0LWNsaWVudC5zZXJ2aWNlJztcbmltcG9ydCB7IGdldEdyb3VwU3R5bGVzLCBHcm91cFN0eWxlIH0gZnJvbSAnLi9ncm91cC1zdHlsZXMnO1xuaW1wb3J0IHsgVXNlclJlc3BvbnNlIH0gZnJvbSAnc3RyZWFtLWNoYXQnO1xuaW1wb3J0IHsgQ3VzdG9tVGVtcGxhdGVzU2VydmljZSB9IGZyb20gJy4uL2N1c3RvbS10ZW1wbGF0ZXMuc2VydmljZSc7XG5pbXBvcnQgeyBsaXN0VXNlcnMgfSBmcm9tICcuLi9saXN0LXVzZXJzJztcblxuLyoqXG4gKiBUaGUgYE1lc3NhZ2VMaXN0YCBjb21wb25lbnQgcmVuZGVycyBhIHNjcm9sbGFibGUgbGlzdCBvZiBtZXNzYWdlcy5cbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnc3RyZWFtLW1lc3NhZ2UtbGlzdCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9tZXNzYWdlLWxpc3QuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZXM6IFtdLFxufSlcbmV4cG9ydCBjbGFzcyBNZXNzYWdlTGlzdENvbXBvbmVudFxuICBpbXBsZW1lbnRzIEFmdGVyVmlld0NoZWNrZWQsIE9uQ2hhbmdlcywgT25Jbml0LCBPbkRlc3Ryb3ksIEFmdGVyVmlld0luaXRcbntcbiAgLyoqXG4gICAqIERldGVybWluZXMgaWYgdGhlIG1lc3NhZ2UgbGlzdCBzaG91bGQgZGlzcGxheSBjaGFubmVsIG1lc3NhZ2VzIG9yIFt0aHJlYWQgbWVzc2FnZXNdKGh0dHBzOi8vZ2V0c3RyZWFtLmlvL2NoYXQvZG9jcy9qYXZhc2NyaXB0L3RocmVhZHMvP2xhbmd1YWdlPWphdmFzY3JpcHQpLlxuICAgKi9cbiAgQElucHV0KCkgbW9kZTogJ21haW4nIHwgJ3RocmVhZCcgPSAnbWFpbic7XG4gIC8qKlxuICAgKiBUaGUgZGlyZWN0aW9uIG9mIHRoZSBtZXNzYWdlcyBpbiB0aGUgbGlzdCwgYGJvdHRvbS10by10b3BgIG1lYW5zIG5ld2VzdCBtZXNzYWdlIGlzIGF0IHRoZSBib3R0b20gb2YgdGhlIG1lc3NhZ2UgbGlzdCBhbmQgdXNlcnMgc2Nyb2xsIHVwd2FyZHMgdG8gbG9hZCBvbGRlciBtZXNzYWdlc1xuICAgKi9cbiAgQElucHV0KCkgZGlyZWN0aW9uOiAnYm90dG9tLXRvLXRvcCcgfCAndG9wLXRvLWJvdHRvbScgPSAnYm90dG9tLXRvLXRvcCc7XG4gIHR5cGluZ0luZGljYXRvclRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxUeXBpbmdJbmRpY2F0b3JDb250ZXh0PiB8IHVuZGVmaW5lZDtcbiAgbWVzc2FnZVRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxNZXNzYWdlQ29udGV4dD4gfCB1bmRlZmluZWQ7XG4gIG1lc3NhZ2VzJCE6IE9ic2VydmFibGU8U3RyZWFtTWVzc2FnZVtdPjtcbiAgZW5hYmxlZE1lc3NhZ2VBY3Rpb25zOiBzdHJpbmdbXSA9IFtdO1xuICBASG9zdEJpbmRpbmcoJ2NsYXNzJykgcHJpdmF0ZSBjbGFzcyA9XG4gICAgJ3N0ci1jaGF0LWFuZ3VsYXJfX21haW4tcGFuZWwtaW5uZXIgc3RyLWNoYXQtYW5ndWxhcl9fbWVzc2FnZS1saXN0LWhvc3Qgc3RyLWNoYXRfX21haW4tcGFuZWwtaW5uZXInO1xuICB1bnJlYWRNZXNzYWdlQ291bnQgPSAwO1xuICBpc1VzZXJTY3JvbGxlZDogYm9vbGVhbiB8IHVuZGVmaW5lZDtcbiAgZ3JvdXBTdHlsZXM6IEdyb3VwU3R5bGVbXSA9IFtdO1xuICBsYXN0U2VudE1lc3NhZ2VJZDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBwYXJlbnRNZXNzYWdlOiBTdHJlYW1NZXNzYWdlIHwgdW5kZWZpbmVkO1xuICBoaWdobGlnaHRlZE1lc3NhZ2VJZDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBpc0xvYWRpbmcgPSBmYWxzZTtcbiAgQFZpZXdDaGlsZCgnc2Nyb2xsQ29udGFpbmVyJylcbiAgcHJpdmF0ZSBzY3JvbGxDb250YWluZXIhOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PjtcbiAgQFZpZXdDaGlsZCgncGFyZW50TWVzc2FnZUVsZW1lbnQnKVxuICBwcml2YXRlIHBhcmVudE1lc3NhZ2VFbGVtZW50ITogRWxlbWVudFJlZjxIVE1MRWxlbWVudD47XG4gIHByaXZhdGUgbGF0ZXN0TWVzc2FnZTogeyBpZDogc3RyaW5nOyBjcmVhdGVkX2F0OiBEYXRlIH0gfCB1bmRlZmluZWQ7XG4gIHByaXZhdGUgaGFzTmV3TWVzc2FnZXM6IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gIHByaXZhdGUgY29udGFpbmVySGVpZ2h0OiBudW1iZXIgfCB1bmRlZmluZWQ7XG4gIHByaXZhdGUgb2xkZXN0TWVzc2FnZTogeyBpZDogc3RyaW5nOyBjcmVhdGVkX2F0OiBEYXRlIH0gfCB1bmRlZmluZWQ7XG4gIHByaXZhdGUgb2xkZXJNYXNzYWdlc0xvYWRlZDogYm9vbGVhbiB8IHVuZGVmaW5lZDtcbiAgcHJpdmF0ZSBpc05ld01lc3NhZ2VTZW50QnlVc2VyOiBib29sZWFuIHwgdW5kZWZpbmVkO1xuICBwcml2YXRlIHN1YnNjcmlwdGlvbnM6IFN1YnNjcmlwdGlvbltdID0gW107XG4gIHByaXZhdGUgbmV3TWVzc2FnZVN1YnNjcmlwdGlvbjogeyB1bnN1YnNjcmliZTogKCkgPT4gdm9pZCB9IHwgdW5kZWZpbmVkO1xuICBwcml2YXRlIHByZXZTY3JvbGxUb3A6IG51bWJlciB8IHVuZGVmaW5lZDtcbiAgcHJpdmF0ZSB1c2Vyc1R5cGluZ0luQ2hhbm5lbCQhOiBPYnNlcnZhYmxlPFxuICAgIFVzZXJSZXNwb25zZTxEZWZhdWx0U3RyZWFtQ2hhdEdlbmVyaWNzPltdXG4gID47XG4gIHByaXZhdGUgdXNlcnNUeXBpbmdJblRocmVhZCQhOiBPYnNlcnZhYmxlPFxuICAgIFVzZXJSZXNwb25zZTxEZWZhdWx0U3RyZWFtQ2hhdEdlbmVyaWNzPltdXG4gID47XG4gIHByaXZhdGUgaXNMYXRlc3RNZXNzYWdlSW5MaXN0ID0gdHJ1ZTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGNoYW5uZWxTZXJ2aWNlOiBDaGFubmVsU2VydmljZSxcbiAgICBwcml2YXRlIGNoYXRDbGllbnRTZXJ2aWNlOiBDaGF0Q2xpZW50U2VydmljZSxcbiAgICBwcml2YXRlIGN1c3RvbVRlbXBsYXRlc1NlcnZpY2U6IEN1c3RvbVRlbXBsYXRlc1NlcnZpY2VcbiAgKSB7XG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXG4gICAgICB0aGlzLmNoYW5uZWxTZXJ2aWNlLmFjdGl2ZUNoYW5uZWwkLnN1YnNjcmliZSgoY2hhbm5lbCkgPT4ge1xuICAgICAgICB0aGlzLnJlc2V0U2Nyb2xsU3RhdGUoKTtcbiAgICAgICAgY29uc3QgY2FwYWJpbGl0ZXMgPSBjaGFubmVsPy5kYXRhPy5vd25fY2FwYWJpbGl0aWVzIGFzIHN0cmluZ1tdO1xuICAgICAgICBpZiAoY2FwYWJpbGl0ZXMpIHtcbiAgICAgICAgICB0aGlzLmVuYWJsZWRNZXNzYWdlQWN0aW9ucyA9IGNhcGFiaWxpdGVzO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMubmV3TWVzc2FnZVN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgaWYgKGNoYW5uZWwpIHtcbiAgICAgICAgICB0aGlzLm5ld01lc3NhZ2VTdWJzY3JpcHRpb24gPSBjaGFubmVsLm9uKCdtZXNzYWdlLm5ldycsIChldmVudCkgPT4ge1xuICAgICAgICAgICAgLy8gSWYgd2UgZGlzcGxheSBtYWluIGNoYW5uZWwgbWVzc2FnZXMgYW5kIHdlJ3JlIHN3aXRjaGVkIHRvIGFuIG9sZGVyIG1lc3NhZ2Ugc2V0IC0+IHVzZSBtZXNzYWdlLm5ldyBldmVudCB0byB1cGRhdGUgdW5yZWFkIGNvdW50IGFuZCBkZXRlY3QgbmV3IG1lc3NhZ2VzIHNlbnQgYnkgY3VycmVudCB1c2VyXG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICFldmVudC5tZXNzYWdlIHx8XG4gICAgICAgICAgICAgIGNoYW5uZWwuc3RhdGUubWVzc2FnZXMgPT09IGNoYW5uZWwuc3RhdGUubGF0ZXN0TWVzc2FnZXMgfHxcbiAgICAgICAgICAgICAgdGhpcy5tb2RlID09PSAndGhyZWFkJ1xuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMubmV3TWVzc2FnZVJlY2VpdmVkKHtcbiAgICAgICAgICAgICAgaWQ6IGV2ZW50Lm1lc3NhZ2UuaWQsXG4gICAgICAgICAgICAgIHVzZXI6IGV2ZW50Lm1lc3NhZ2UudXNlcixcbiAgICAgICAgICAgICAgY3JlYXRlZF9hdDogbmV3IERhdGUoZXZlbnQubWVzc2FnZS5jcmVhdGVkX2F0IHx8ICcnKSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9KVxuICAgICk7XG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXG4gICAgICB0aGlzLmNoYW5uZWxTZXJ2aWNlLmFjdGl2ZVBhcmVudE1lc3NhZ2UkLnN1YnNjcmliZSgobWVzc2FnZSkgPT4ge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgbWVzc2FnZSAmJlxuICAgICAgICAgIHRoaXMucGFyZW50TWVzc2FnZSAmJlxuICAgICAgICAgIG1lc3NhZ2UuaWQgIT09IHRoaXMucGFyZW50TWVzc2FnZS5pZCAmJlxuICAgICAgICAgIHRoaXMubW9kZSA9PT0gJ3RocmVhZCdcbiAgICAgICAgKSB7XG4gICAgICAgICAgdGhpcy5yZXNldFNjcm9sbFN0YXRlKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5wYXJlbnRNZXNzYWdlID0gbWVzc2FnZTtcbiAgICAgIH0pXG4gICAgKTtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcbiAgICAgIHRoaXMuY3VzdG9tVGVtcGxhdGVzU2VydmljZS5tZXNzYWdlVGVtcGxhdGUkLnN1YnNjcmliZShcbiAgICAgICAgKHRlbXBsYXRlKSA9PiAodGhpcy5tZXNzYWdlVGVtcGxhdGUgPSB0ZW1wbGF0ZSlcbiAgICAgIClcbiAgICApO1xuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxuICAgICAgdGhpcy5jdXN0b21UZW1wbGF0ZXNTZXJ2aWNlLnR5cGluZ0luZGljYXRvclRlbXBsYXRlJC5zdWJzY3JpYmUoXG4gICAgICAgICh0ZW1wbGF0ZSkgPT4gKHRoaXMudHlwaW5nSW5kaWNhdG9yVGVtcGxhdGUgPSB0ZW1wbGF0ZSlcbiAgICAgIClcbiAgICApO1xuICAgIHRoaXMudXNlcnNUeXBpbmdJbkNoYW5uZWwkID0gdGhpcy5jaGFubmVsU2VydmljZS51c2Vyc1R5cGluZ0luQ2hhbm5lbCQ7XG4gICAgdGhpcy51c2Vyc1R5cGluZ0luVGhyZWFkJCA9IHRoaXMuY2hhbm5lbFNlcnZpY2UudXNlcnNUeXBpbmdJblRocmVhZCQ7XG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLnNldE1lc3NhZ2VzJCgpO1xuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGlmIChjaGFuZ2VzLm1vZGUgfHwgY2hhbmdlcy5kaXJlY3Rpb24pIHtcbiAgICAgIHRoaXMuc2V0TWVzc2FnZXMkKCk7XG4gICAgfVxuICAgIGlmIChjaGFuZ2VzLmRpcmVjdGlvbikge1xuICAgICAgaWYgKHRoaXMuc2Nyb2xsQ29udGFpbmVyPy5uYXRpdmVFbGVtZW50KSB7XG4gICAgICAgIHRoaXMuanVtcFRvTGF0ZXN0TWVzc2FnZSgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcbiAgICAgIHRoaXMuY2hhbm5lbFNlcnZpY2UuanVtcFRvTWVzc2FnZSRcbiAgICAgICAgLnBpcGUoZmlsdGVyKChjb25maWcpID0+ICEhY29uZmlnLmlkKSlcbiAgICAgICAgLnN1YnNjcmliZSgoY29uZmlnKSA9PiB7XG4gICAgICAgICAgbGV0IG1lc3NhZ2VJZDogc3RyaW5nIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkO1xuICAgICAgICAgIGlmICh0aGlzLm1vZGUgPT09ICdtYWluJykge1xuICAgICAgICAgICAgbWVzc2FnZUlkID0gY29uZmlnLnBhcmVudElkIHx8IGNvbmZpZy5pZDtcbiAgICAgICAgICB9IGVsc2UgaWYgKGNvbmZpZy5wYXJlbnRJZCkge1xuICAgICAgICAgICAgbWVzc2FnZUlkID0gY29uZmlnLmlkO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAobWVzc2FnZUlkKSB7XG4gICAgICAgICAgICBpZiAobWVzc2FnZUlkID09PSAnbGF0ZXN0Jykge1xuICAgICAgICAgICAgICB0aGlzLnNjcm9sbFRvTGF0ZXN0TWVzc2FnZSgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdGhpcy5zY3JvbGxNZXNzYWdlSW50b1ZpZXcobWVzc2FnZUlkKTtcbiAgICAgICAgICAgICAgdGhpcy5oaWdobGlnaHRlZE1lc3NhZ2VJZCA9IG1lc3NhZ2VJZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3Q2hlY2tlZCgpIHtcbiAgICBpZiAodGhpcy5oaWdobGlnaHRlZE1lc3NhZ2VJZCkge1xuICAgICAgLy8gVHVybiBvZmYgcHJvZ3JhbWF0aWMgc2Nyb2xsIGFkanVzdG1lbnRzIHdoaWxlIGp1bXAgdG8gbWVzc2FnZSBpcyBpbiBwcm9ncmVzc1xuICAgICAgdGhpcy5oYXNOZXdNZXNzYWdlcyA9IGZhbHNlO1xuICAgICAgdGhpcy5vbGRlck1hc3NhZ2VzTG9hZGVkID0gZmFsc2U7XG4gICAgfVxuICAgIGlmICh0aGlzLmRpcmVjdGlvbiA9PT0gJ3RvcC10by1ib3R0b20nKSB7XG4gICAgICBpZiAoXG4gICAgICAgIHRoaXMuaGFzTmV3TWVzc2FnZXMgJiZcbiAgICAgICAgKHRoaXMuaXNOZXdNZXNzYWdlU2VudEJ5VXNlciB8fCAhdGhpcy5pc1VzZXJTY3JvbGxlZClcbiAgICAgICkge1xuICAgICAgICB0aGlzLmlzTGF0ZXN0TWVzc2FnZUluTGlzdFxuICAgICAgICAgID8gdGhpcy5zY3JvbGxUb1RvcCgpXG4gICAgICAgICAgOiB0aGlzLmp1bXBUb0xhdGVzdE1lc3NhZ2UoKTtcbiAgICAgICAgdGhpcy5oYXNOZXdNZXNzYWdlcyA9IGZhbHNlO1xuICAgICAgICB0aGlzLmNvbnRhaW5lckhlaWdodCA9IHRoaXMuc2Nyb2xsQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsSGVpZ2h0O1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodGhpcy5oYXNOZXdNZXNzYWdlcykge1xuICAgICAgICBpZiAoIXRoaXMuaXNVc2VyU2Nyb2xsZWQgfHwgdGhpcy5pc05ld01lc3NhZ2VTZW50QnlVc2VyKSB7XG4gICAgICAgICAgdGhpcy5pc0xhdGVzdE1lc3NhZ2VJbkxpc3RcbiAgICAgICAgICAgID8gdGhpcy5zY3JvbGxUb0JvdHRvbSgpXG4gICAgICAgICAgICA6IHRoaXMuanVtcFRvTGF0ZXN0TWVzc2FnZSgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuaGFzTmV3TWVzc2FnZXMgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5jb250YWluZXJIZWlnaHQgPSB0aGlzLnNjcm9sbENvbnRhaW5lci5uYXRpdmVFbGVtZW50LnNjcm9sbEhlaWdodDtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5vbGRlck1hc3NhZ2VzTG9hZGVkKSB7XG4gICAgICAgIHRoaXMucHJlc2VydmVTY3JvbGxiYXJQb3NpdGlvbigpO1xuICAgICAgICB0aGlzLmNvbnRhaW5lckhlaWdodCA9IHRoaXMuc2Nyb2xsQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsSGVpZ2h0O1xuICAgICAgICB0aGlzLm9sZGVyTWFzc2FnZXNMb2FkZWQgPSBmYWxzZTtcbiAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgIHRoaXMuY29udGFpbmVySGVpZ2h0ICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgdGhpcy5jb250YWluZXJIZWlnaHQgPFxuICAgICAgICAgIHRoaXMuc2Nyb2xsQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsSGVpZ2h0ICYmXG4gICAgICAgICF0aGlzLmlzVXNlclNjcm9sbGVkXG4gICAgICApIHtcbiAgICAgICAgdGhpcy5pc0xhdGVzdE1lc3NhZ2VJbkxpc3RcbiAgICAgICAgICA/IHRoaXMuc2Nyb2xsVG9Cb3R0b20oKVxuICAgICAgICAgIDogdGhpcy5qdW1wVG9MYXRlc3RNZXNzYWdlKCk7XG4gICAgICAgIHRoaXMuY29udGFpbmVySGVpZ2h0ID0gdGhpcy5zY3JvbGxDb250YWluZXIubmF0aXZlRWxlbWVudC5zY3JvbGxIZWlnaHQ7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLmZvckVhY2goKHMpID0+IHMudW5zdWJzY3JpYmUoKSk7XG4gICAgdGhpcy5uZXdNZXNzYWdlU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICB9XG5cbiAgdHJhY2tCeU1lc3NhZ2VJZChpbmRleDogbnVtYmVyLCBpdGVtOiBTdHJlYW1NZXNzYWdlKSB7XG4gICAgcmV0dXJuIGl0ZW0uaWQ7XG4gIH1cblxuICB0cmFja0J5VXNlcklkKGluZGV4OiBudW1iZXIsIHVzZXI6IFVzZXJSZXNwb25zZSkge1xuICAgIHJldHVybiB1c2VyLmlkO1xuICB9XG5cbiAganVtcFRvTGF0ZXN0TWVzc2FnZSgpIHtcbiAgICB2b2lkIHRoaXMuY2hhbm5lbFNlcnZpY2UuanVtcFRvTWVzc2FnZShcbiAgICAgICdsYXRlc3QnLFxuICAgICAgdGhpcy5tb2RlID09PSAndGhyZWFkJyA/IHRoaXMucGFyZW50TWVzc2FnZT8uaWQgOiB1bmRlZmluZWRcbiAgICApO1xuICB9XG5cbiAgc2Nyb2xsVG9Cb3R0b20oKTogdm9pZCB7XG4gICAgdGhpcy5zY3JvbGxDb250YWluZXIubmF0aXZlRWxlbWVudC5zY3JvbGxUb3AgPVxuICAgICAgdGhpcy5zY3JvbGxDb250YWluZXIubmF0aXZlRWxlbWVudC5zY3JvbGxIZWlnaHQ7XG4gIH1cblxuICBzY3JvbGxUb1RvcCgpIHtcbiAgICB0aGlzLnNjcm9sbENvbnRhaW5lci5uYXRpdmVFbGVtZW50LnNjcm9sbFRvcCA9IDA7XG4gIH1cblxuICBzY3JvbGxlZCgpIHtcbiAgICBpZiAoXG4gICAgICB0aGlzLnNjcm9sbENvbnRhaW5lci5uYXRpdmVFbGVtZW50LnNjcm9sbEhlaWdodCA9PT1cbiAgICAgIHRoaXMuc2Nyb2xsQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQuY2xpZW50SGVpZ2h0XG4gICAgKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHNjcm9sbFBvc2l0aW9uID0gdGhpcy5nZXRTY3JvbGxQb3NpdGlvbigpO1xuXG4gICAgdGhpcy5pc1VzZXJTY3JvbGxlZCA9XG4gICAgICAodGhpcy5kaXJlY3Rpb24gPT09ICdib3R0b20tdG8tdG9wJ1xuICAgICAgICA/IHNjcm9sbFBvc2l0aW9uICE9PSAnYm90dG9tJ1xuICAgICAgICA6IHNjcm9sbFBvc2l0aW9uICE9PSAndG9wJykgfHwgIXRoaXMuaXNMYXRlc3RNZXNzYWdlSW5MaXN0O1xuICAgIGlmICghdGhpcy5pc1VzZXJTY3JvbGxlZCkge1xuICAgICAgdGhpcy51bnJlYWRNZXNzYWdlQ291bnQgPSAwO1xuICAgIH1cbiAgICBpZiAodGhpcy5zaG91bGRMb2FkTW9yZU1lc3NhZ2VzKHNjcm9sbFBvc2l0aW9uKSkge1xuICAgICAgdGhpcy5jb250YWluZXJIZWlnaHQgPSB0aGlzLnNjcm9sbENvbnRhaW5lci5uYXRpdmVFbGVtZW50LnNjcm9sbEhlaWdodDtcbiAgICAgIGxldCBkaXJlY3Rpb246ICduZXdlcicgfCAnb2xkZXInO1xuICAgICAgaWYgKHRoaXMuZGlyZWN0aW9uID09PSAndG9wLXRvLWJvdHRvbScpIHtcbiAgICAgICAgZGlyZWN0aW9uID0gc2Nyb2xsUG9zaXRpb24gPT09ICd0b3AnID8gJ25ld2VyJyA6ICdvbGRlcic7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkaXJlY3Rpb24gPSBzY3JvbGxQb3NpdGlvbiA9PT0gJ3RvcCcgPyAnb2xkZXInIDogJ25ld2VyJztcbiAgICAgIH1cbiAgICAgIHRoaXMubW9kZSA9PT0gJ21haW4nXG4gICAgICAgID8gdm9pZCB0aGlzLmNoYW5uZWxTZXJ2aWNlLmxvYWRNb3JlTWVzc2FnZXMoZGlyZWN0aW9uKVxuICAgICAgICA6IHZvaWQgdGhpcy5jaGFubmVsU2VydmljZS5sb2FkTW9yZVRocmVhZFJlcGxpZXMoZGlyZWN0aW9uKTtcbiAgICAgIHRoaXMuaXNMb2FkaW5nID0gdHJ1ZTtcbiAgICB9XG4gICAgdGhpcy5wcmV2U2Nyb2xsVG9wID0gdGhpcy5zY3JvbGxDb250YWluZXIubmF0aXZlRWxlbWVudC5zY3JvbGxUb3A7XG4gIH1cblxuICBnZXRUeXBpbmdJbmRpY2F0b3JDb250ZXh0KCk6IFR5cGluZ0luZGljYXRvckNvbnRleHQge1xuICAgIHJldHVybiB7XG4gICAgICB1c2Vyc1R5cGluZyQ6IHRoaXMudXNlcnNUeXBpbmckLFxuICAgIH07XG4gIH1cblxuICBnZXRNZXNzYWdlQ29udGV4dChtZXNzYWdlOiBTdHJlYW1NZXNzYWdlKTogTWVzc2FnZUNvbnRleHQge1xuICAgIHJldHVybiB7XG4gICAgICBtZXNzYWdlLFxuICAgICAgaXNMYXN0U2VudE1lc3NhZ2U6ICEhKFxuICAgICAgICB0aGlzLmxhc3RTZW50TWVzc2FnZUlkICYmIG1lc3NhZ2U/LmlkID09PSB0aGlzLmxhc3RTZW50TWVzc2FnZUlkXG4gICAgICApLFxuICAgICAgZW5hYmxlZE1lc3NhZ2VBY3Rpb25zOiB0aGlzLmVuYWJsZWRNZXNzYWdlQWN0aW9ucyxcbiAgICAgIG1vZGU6IHRoaXMubW9kZSxcbiAgICAgIGlzSGlnaGxpZ2h0ZWQ6IG1lc3NhZ2U/LmlkID09PSB0aGlzLmhpZ2hsaWdodGVkTWVzc2FnZUlkLFxuICAgIH07XG4gIH1cblxuICBnZXRUeXBpbmdJbmRpY2F0b3JUZXh0KHVzZXJzOiBVc2VyUmVzcG9uc2VbXSkge1xuICAgIGNvbnN0IHRleHQgPSBsaXN0VXNlcnModXNlcnMpO1xuXG4gICAgcmV0dXJuIHRleHQ7XG4gIH1cblxuICBnZXQgcmVwbHlDb3VudFBhcmFtKCkge1xuICAgIHJldHVybiB7IHJlcGx5Q291bnQ6IHRoaXMucGFyZW50TWVzc2FnZT8ucmVwbHlfY291bnQgfTtcbiAgfVxuXG4gIHByaXZhdGUgcHJlc2VydmVTY3JvbGxiYXJQb3NpdGlvbigpIHtcbiAgICB0aGlzLnNjcm9sbENvbnRhaW5lci5uYXRpdmVFbGVtZW50LnNjcm9sbFRvcCA9XG4gICAgICAodGhpcy5wcmV2U2Nyb2xsVG9wIHx8IDApICtcbiAgICAgICh0aGlzLnNjcm9sbENvbnRhaW5lci5uYXRpdmVFbGVtZW50LnNjcm9sbEhlaWdodCAtIHRoaXMuY29udGFpbmVySGVpZ2h0ISk7XG4gIH1cblxuICBwcml2YXRlIGdldFNjcm9sbFBvc2l0aW9uKCk6ICd0b3AnIHwgJ2JvdHRvbScgfCAnbWlkZGxlJyB7XG4gICAgbGV0IHBvc2l0aW9uOiAndG9wJyB8ICdib3R0b20nIHwgJ21pZGRsZScgPSAnbWlkZGxlJztcbiAgICBpZiAoXG4gICAgICBNYXRoLmZsb29yKHRoaXMuc2Nyb2xsQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsVG9wKSA8PVxuICAgICAgICAodGhpcy5wYXJlbnRNZXNzYWdlRWxlbWVudD8ubmF0aXZlRWxlbWVudC5jbGllbnRIZWlnaHQgfHwgMCkgJiZcbiAgICAgICh0aGlzLnByZXZTY3JvbGxUb3AgPT09IHVuZGVmaW5lZCB8fFxuICAgICAgICB0aGlzLnByZXZTY3JvbGxUb3AgPlxuICAgICAgICAgICh0aGlzLnBhcmVudE1lc3NhZ2VFbGVtZW50Py5uYXRpdmVFbGVtZW50LmNsaWVudEhlaWdodCB8fCAwKSlcbiAgICApIHtcbiAgICAgIHBvc2l0aW9uID0gJ3RvcCc7XG4gICAgfSBlbHNlIGlmIChcbiAgICAgIE1hdGguY2VpbCh0aGlzLnNjcm9sbENvbnRhaW5lci5uYXRpdmVFbGVtZW50LnNjcm9sbFRvcCkgK1xuICAgICAgICB0aGlzLnNjcm9sbENvbnRhaW5lci5uYXRpdmVFbGVtZW50LmNsaWVudEhlaWdodCA+PVxuICAgICAgdGhpcy5zY3JvbGxDb250YWluZXIubmF0aXZlRWxlbWVudC5zY3JvbGxIZWlnaHRcbiAgICApIHtcbiAgICAgIHBvc2l0aW9uID0gJ2JvdHRvbSc7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBvc2l0aW9uO1xuICB9XG5cbiAgcHJpdmF0ZSBzaG91bGRMb2FkTW9yZU1lc3NhZ2VzKHNjcm9sbFBvc2l0aW9uOiAndG9wJyB8ICdib3R0b20nIHwgJ21pZGRsZScpIHtcbiAgICByZXR1cm4gc2Nyb2xsUG9zaXRpb24gIT09ICdtaWRkbGUnICYmICF0aGlzLmhpZ2hsaWdodGVkTWVzc2FnZUlkO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRNZXNzYWdlcyQoKSB7XG4gICAgdGhpcy5tZXNzYWdlcyQgPSAoXG4gICAgICB0aGlzLm1vZGUgPT09ICdtYWluJ1xuICAgICAgICA/IHRoaXMuY2hhbm5lbFNlcnZpY2UuYWN0aXZlQ2hhbm5lbE1lc3NhZ2VzJFxuICAgICAgICA6IHRoaXMuY2hhbm5lbFNlcnZpY2UuYWN0aXZlVGhyZWFkTWVzc2FnZXMkXG4gICAgKS5waXBlKFxuICAgICAgdGFwKChtZXNzYWdlcykgPT4ge1xuICAgICAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xuICAgICAgICBpZiAobWVzc2FnZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGN1cnJlbnRMYXRlc3RNZXNzYWdlID0gbWVzc2FnZXNbbWVzc2FnZXMubGVuZ3RoIC0gMV07XG4gICAgICAgIHRoaXMubmV3TWVzc2FnZVJlY2VpdmVkKGN1cnJlbnRMYXRlc3RNZXNzYWdlKTtcbiAgICAgICAgY29uc3QgY3VycmVudE9sZGVzdE1lc3NhZ2UgPSBtZXNzYWdlc1swXTtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICF0aGlzLm9sZGVzdE1lc3NhZ2UgfHxcbiAgICAgICAgICAhbWVzc2FnZXMuZmluZCgobSkgPT4gbS5pZCA9PT0gdGhpcy5vbGRlc3RNZXNzYWdlIS5pZClcbiAgICAgICAgKSB7XG4gICAgICAgICAgdGhpcy5vbGRlc3RNZXNzYWdlID0gY3VycmVudE9sZGVzdE1lc3NhZ2U7XG4gICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgdGhpcy5vbGRlc3RNZXNzYWdlLmNyZWF0ZWRfYXQuZ2V0VGltZSgpID5cbiAgICAgICAgICBjdXJyZW50T2xkZXN0TWVzc2FnZS5jcmVhdGVkX2F0LmdldFRpbWUoKVxuICAgICAgICApIHtcbiAgICAgICAgICB0aGlzLm9sZGVzdE1lc3NhZ2UgPSBjdXJyZW50T2xkZXN0TWVzc2FnZTtcbiAgICAgICAgICB0aGlzLm9sZGVyTWFzc2FnZXNMb2FkZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9KSxcbiAgICAgIHRhcChcbiAgICAgICAgKG1lc3NhZ2VzKSA9PlxuICAgICAgICAgICh0aGlzLmxhc3RTZW50TWVzc2FnZUlkID0gWy4uLm1lc3NhZ2VzXVxuICAgICAgICAgICAgLnJldmVyc2UoKVxuICAgICAgICAgICAgLmZpbmQoXG4gICAgICAgICAgICAgIChtKSA9PlxuICAgICAgICAgICAgICAgIG0udXNlcj8uaWQgPT09IHRoaXMuY2hhdENsaWVudFNlcnZpY2UuY2hhdENsaWVudD8udXNlcj8uaWQgJiZcbiAgICAgICAgICAgICAgICBtLnN0YXR1cyAhPT0gJ3NlbmRpbmcnXG4gICAgICAgICAgICApPy5pZClcbiAgICAgICksXG4gICAgICB0YXAoKG1lc3NhZ2VzKSA9PiB7XG4gICAgICAgIHRoaXMuaXNMYXRlc3RNZXNzYWdlSW5MaXN0ID1cbiAgICAgICAgICAhdGhpcy5sYXRlc3RNZXNzYWdlIHx8XG4gICAgICAgICAgbWVzc2FnZXMubGVuZ3RoID09PSAwIHx8XG4gICAgICAgICAgbWVzc2FnZXNbbWVzc2FnZXMubGVuZ3RoIC0gMV0uaWQgPT09IHRoaXMubGF0ZXN0TWVzc2FnZS5pZDtcbiAgICAgICAgaWYgKCF0aGlzLmlzTGF0ZXN0TWVzc2FnZUluTGlzdCkge1xuICAgICAgICAgIHRoaXMuaXNVc2VyU2Nyb2xsZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9KSxcbiAgICAgIG1hcCgobWVzc2FnZXMpID0+XG4gICAgICAgIHRoaXMuZGlyZWN0aW9uID09PSAnYm90dG9tLXRvLXRvcCcgPyBtZXNzYWdlcyA6IFsuLi5tZXNzYWdlc10ucmV2ZXJzZSgpXG4gICAgICApLFxuICAgICAgdGFwKChtZXNzYWdlcykgPT4ge1xuICAgICAgICB0aGlzLmdyb3VwU3R5bGVzID0gbWVzc2FnZXMubWFwKChtLCBpKSA9PlxuICAgICAgICAgIGdldEdyb3VwU3R5bGVzKG0sIG1lc3NhZ2VzW2kgLSAxXSwgbWVzc2FnZXNbaSArIDFdKVxuICAgICAgICApO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSByZXNldFNjcm9sbFN0YXRlKCkge1xuICAgIHRoaXMubGF0ZXN0TWVzc2FnZSA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLmhhc05ld01lc3NhZ2VzID0gdHJ1ZTtcbiAgICB0aGlzLmlzVXNlclNjcm9sbGVkID0gZmFsc2U7XG4gICAgdGhpcy5jb250YWluZXJIZWlnaHQgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5vbGRlck1hc3NhZ2VzTG9hZGVkID0gZmFsc2U7XG4gICAgdGhpcy5vbGRlc3RNZXNzYWdlID0gdW5kZWZpbmVkO1xuICAgIHRoaXMudW5yZWFkTWVzc2FnZUNvdW50ID0gMDtcbiAgICB0aGlzLnByZXZTY3JvbGxUb3AgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5pc05ld01lc3NhZ2VTZW50QnlVc2VyID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuaXNMYXRlc3RNZXNzYWdlSW5MaXN0ID0gdHJ1ZTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0IHVzZXJzVHlwaW5nJCgpIHtcbiAgICByZXR1cm4gdGhpcy5tb2RlID09PSAndGhyZWFkJ1xuICAgICAgPyB0aGlzLnVzZXJzVHlwaW5nSW5UaHJlYWQkXG4gICAgICA6IHRoaXMudXNlcnNUeXBpbmdJbkNoYW5uZWwkO1xuICB9XG5cbiAgcHJpdmF0ZSBzY3JvbGxNZXNzYWdlSW50b1ZpZXcobWVzc2FnZUlkOiBzdHJpbmcsIHdpdGhSZXRyeSA9IHRydWUpIHtcbiAgICBjb25zdCBlbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQobWVzc2FnZUlkKTtcbiAgICBpZiAoIWVsZW1lbnQgJiYgd2l0aFJldHJ5KSB7XG4gICAgICAvLyBJZiB0aGUgbWVzc2FnZSB3YXMgbmV3bHkgaW5zZXJ0ZWQgaW50byBhY3RpdmVDaGFubmVsTWVzc2FnZXMkLCB0aGUgbWVzc2FnZSB3aWxsIGJlIHJlbmRlcmVkIGFmdGVyIHRoZSBjdXJyZW50IGNoYW5nZSBkZXRlY3Rpb24gY3ljbGUgLT4gd2FpdCBmb3IgdGhpcyBjeWNsZSB0byBjb21wbGV0ZVxuICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLnNjcm9sbE1lc3NhZ2VJbnRvVmlldyhtZXNzYWdlSWQsIGZhbHNlKSk7XG4gICAgfSBlbHNlIGlmIChlbGVtZW50KSB7XG4gICAgICBlbGVtZW50LnNjcm9sbEludG9WaWV3KHsgYmxvY2s6ICdjZW50ZXInIH0pO1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMuaGlnaGxpZ2h0ZWRNZXNzYWdlSWQgPSB1bmRlZmluZWQ7XG4gICAgICB9LCAxMDAwKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNjcm9sbFRvTGF0ZXN0TWVzc2FnZSh3aXRoUmV0cnkgPSB0cnVlKSB7XG4gICAgaWYgKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMubGF0ZXN0TWVzc2FnZSEuaWQpKSB7XG4gICAgICB0aGlzLmRpcmVjdGlvbiA9PT0gJ2JvdHRvbS10by10b3AnXG4gICAgICAgID8gdGhpcy5zY3JvbGxUb0JvdHRvbSgpXG4gICAgICAgIDogdGhpcy5zY3JvbGxUb1RvcCgpO1xuICAgIH0gZWxzZSBpZiAod2l0aFJldHJ5KSB7XG4gICAgICAvLyBJZiB0aGUgbWVzc2FnZSB3YXMgbmV3bHkgaW5zZXJ0ZWQgaW50byBhY3RpdmVDaGFubmVsTWVzc2FnZXMkLCB0aGUgbWVzc2FnZSB3aWxsIGJlIHJlbmRlcmVkIGFmdGVyIHRoZSBjdXJyZW50IGNoYW5nZSBkZXRlY3Rpb24gY3ljbGUgLT4gd2FpdCBmb3IgdGhpcyBjeWNsZSB0byBjb21wbGV0ZVxuICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLnNjcm9sbFRvTGF0ZXN0TWVzc2FnZShmYWxzZSksIDApO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgbmV3TWVzc2FnZVJlY2VpdmVkKG1lc3NhZ2U6IHtcbiAgICBpZDogc3RyaW5nO1xuICAgIGNyZWF0ZWRfYXQ6IERhdGU7XG4gICAgdXNlcj86IHsgaWQ6IHN0cmluZyB9IHwgbnVsbDtcbiAgfSkge1xuICAgIGlmIChcbiAgICAgICF0aGlzLmxhdGVzdE1lc3NhZ2UgfHxcbiAgICAgIHRoaXMubGF0ZXN0TWVzc2FnZS5jcmVhdGVkX2F0Py5nZXRUaW1lKCkgPCBtZXNzYWdlLmNyZWF0ZWRfYXQuZ2V0VGltZSgpXG4gICAgKSB7XG4gICAgICB0aGlzLmxhdGVzdE1lc3NhZ2UgPSBtZXNzYWdlO1xuICAgICAgdGhpcy5oYXNOZXdNZXNzYWdlcyA9IHRydWU7XG4gICAgICB0aGlzLmlzTmV3TWVzc2FnZVNlbnRCeVVzZXIgPVxuICAgICAgICBtZXNzYWdlLnVzZXI/LmlkID09PSB0aGlzLmNoYXRDbGllbnRTZXJ2aWNlLmNoYXRDbGllbnQ/LnVzZXI/LmlkO1xuICAgICAgaWYgKHRoaXMuaXNVc2VyU2Nyb2xsZWQpIHtcbiAgICAgICAgdGhpcy51bnJlYWRNZXNzYWdlQ291bnQrKztcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiIsIjxkaXZcbiAgI3Njcm9sbENvbnRhaW5lclxuICBkYXRhLXRlc3RpZD1cInNjcm9sbC1jb250YWluZXJcIlxuICBjbGFzcz1cInN0ci1jaGF0X19saXN0XCJcbiAgKHNjcm9sbCk9XCJzY3JvbGxlZCgpXCJcbj5cbiAgPGRpdiBjbGFzcz1cInN0ci1jaGF0X19yZXZlcnNlLWluZmluaXRlLXNjcm9sbCBzdHItY2hhdF9fbWVzc2FnZS1saXN0LXNjcm9sbFwiPlxuICAgIDx1bCBjbGFzcz1cInN0ci1jaGF0X191bFwiPlxuICAgICAgPGxpXG4gICAgICAgICNwYXJlbnRNZXNzYWdlRWxlbWVudFxuICAgICAgICAqbmdJZj1cIm1vZGUgPT09ICd0aHJlYWQnXCJcbiAgICAgICAgZGF0YS10ZXN0aWQ9XCJwYXJlbnQtbWVzc2FnZVwiXG4gICAgICAgIGNsYXNzPVwic3RyLWNoYXRfX3BhcmVudC1tZXNzYWdlLWxpXCJcbiAgICAgID5cbiAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgICAgICBtZXNzYWdlVGVtcGxhdGVDb250YWluZXI7XG4gICAgICAgICAgICBjb250ZXh0OiB7IG1lc3NhZ2U6IHBhcmVudE1lc3NhZ2UgfVxuICAgICAgICAgIFwiXG4gICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPGRpdiBkYXRhLXRlc3RpZD1cInJlcGx5LWNvdW50XCIgY2xhc3M9XCJzdHItY2hhdF9fdGhyZWFkLXN0YXJ0XCI+XG4gICAgICAgICAge3twYXJlbnRNZXNzYWdlPy5yZXBseV9jb3VudCA9PT0gMSA/ICgnc3RyZWFtQ2hhdC4xIHJlcGx5JyB8IHRyYW5zbGF0ZSkgOiAoJ3N0cmVhbUNoYXQue3sgcmVwbHlDb3VudCB9fVxuICAgICAgICAgIHJlcGxpZXMnIHwgdHJhbnNsYXRlOnJlcGx5Q291bnRQYXJhbSl9fVxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvbGk+XG4gICAgICA8c3RyZWFtLWxvYWRpbmctaW5kaWNhdG9yXG4gICAgICAgIGRhdGEtdGVzdGlkPVwidG9wLWxvYWRpbmctaW5kaWNhdG9yXCJcbiAgICAgICAgKm5nSWY9XCJpc0xvYWRpbmcgJiYgZGlyZWN0aW9uID09PSAnYm90dG9tLXRvLXRvcCdcIlxuICAgICAgPjwvc3RyZWFtLWxvYWRpbmctaW5kaWNhdG9yPlxuICAgICAgPGxpXG4gICAgICAgIHRhYmluZGV4PVwiMFwiXG4gICAgICAgIGRhdGEtdGVzdGNsYXNzPVwibWVzc2FnZVwiXG4gICAgICAgICpuZ0Zvcj1cIlxuICAgICAgICAgIGxldCBtZXNzYWdlIG9mIG1lc3NhZ2VzJCB8IGFzeW5jO1xuICAgICAgICAgIGxldCBpID0gaW5kZXg7XG4gICAgICAgICAgdHJhY2tCeTogdHJhY2tCeU1lc3NhZ2VJZFxuICAgICAgICBcIlxuICAgICAgICBjbGFzcz1cInN0ci1jaGF0X19saSBzdHItY2hhdF9fbGktLXt7IGdyb3VwU3R5bGVzW2ldIH19XCJcbiAgICAgICAgaWQ9XCJ7eyBtZXNzYWdlLmlkIH19XCJcbiAgICAgID5cbiAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgICAgICBtZXNzYWdlVGVtcGxhdGVDb250YWluZXI7XG4gICAgICAgICAgICBjb250ZXh0OiB7IG1lc3NhZ2U6IG1lc3NhZ2UgfVxuICAgICAgICAgIFwiXG4gICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvbGk+XG4gICAgICA8c3RyZWFtLWxvYWRpbmctaW5kaWNhdG9yXG4gICAgICAgIGRhdGEtdGVzdGlkPVwiYm90dG9tLWxvYWRpbmctaW5kaWNhdG9yXCJcbiAgICAgICAgKm5nSWY9XCJpc0xvYWRpbmcgJiYgZGlyZWN0aW9uID09PSAndG9wLXRvLWJvdHRvbSdcIlxuICAgICAgPjwvc3RyZWFtLWxvYWRpbmctaW5kaWNhdG9yPlxuICAgIDwvdWw+XG4gICAgPG5nLXRlbXBsYXRlICNkZWZhdWx0VHlwaW5nSW5kaWNhdG9yIGxldC11c2Vyc1R5cGluZyQ9XCJ1c2Vyc1R5cGluZyRcIj5cbiAgICAgIDwhLS0gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC90ZW1wbGF0ZS9uby1hbnkgLS0+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiJGFueSh1c2Vyc1R5cGluZyQgfCBhc3luYykgYXMgdXNlcnNcIj5cbiAgICAgICAgPGRpdlxuICAgICAgICAgICpuZ0lmPVwidXNlcnMubGVuZ3RoID4gMFwiXG4gICAgICAgICAgZGF0YS10ZXN0aWQ9XCJ0eXBpbmctaW5kaWNhdG9yXCJcbiAgICAgICAgICBjbGFzcz1cInN0ci1jaGF0X190eXBpbmctaW5kaWNhdG9yIHN0ci1jaGF0X190eXBpbmctaW5kaWNhdG9yLS10eXBpbmdcIlxuICAgICAgICA+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInN0ci1jaGF0X190eXBpbmctaW5kaWNhdG9yX19kb3RzXCI+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInN0ci1jaGF0X190eXBpbmctaW5kaWNhdG9yX19kb3RcIj48L3NwYW4+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInN0ci1jaGF0X190eXBpbmctaW5kaWNhdG9yX19kb3RcIj48L3NwYW4+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInN0ci1jaGF0X190eXBpbmctaW5kaWNhdG9yX19kb3RcIj48L3NwYW4+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgZGF0YS10ZXN0aWQ9XCJ0eXBpbmctdXNlcnNcIlxuICAgICAgICAgICAgY2xhc3M9XCJzdHItY2hhdF9fdHlwaW5nLWluZGljYXRvcl9fdXNlcnNcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIHt7XG4gICAgICAgICAgICAgIHVzZXJzLmxlbmd0aCA9PT0gMVxuICAgICAgICAgICAgICAgID8gKFwic3RyZWFtQ2hhdC51c2VyIGlzIHR5cGluZ1wiXG4gICAgICAgICAgICAgICAgICB8IHRyYW5zbGF0ZTogeyB1c2VyOiBnZXRUeXBpbmdJbmRpY2F0b3JUZXh0KHVzZXJzKSB9KVxuICAgICAgICAgICAgICAgIDogKFwic3RyZWFtQ2hhdC51c2VycyBhcmUgdHlwaW5nXCJcbiAgICAgICAgICAgICAgICAgIHwgdHJhbnNsYXRlOiB7IHVzZXJzOiBnZXRUeXBpbmdJbmRpY2F0b3JUZXh0KHVzZXJzKSB9KVxuICAgICAgICAgICAgfX1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L25nLXRlbXBsYXRlPlxuICAgIDxuZy1jb250YWluZXJcbiAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgIHR5cGluZ0luZGljYXRvclRlbXBsYXRlIHx8IGRlZmF1bHRUeXBpbmdJbmRpY2F0b3I7XG4gICAgICAgIGNvbnRleHQ6IGdldFR5cGluZ0luZGljYXRvckNvbnRleHQoKVxuICAgICAgXCJcbiAgICA+PC9uZy1jb250YWluZXI+XG4gIDwvZGl2PlxuPC9kaXY+XG48ZGl2IGNsYXNzPVwic3RyLWNoYXRfX2p1bXAtdG8tbGF0ZXN0LW1lc3NhZ2VcIj5cbiAgPGJ1dHRvblxuICAgIGRhdGEtdGVzdGlkPVwic2Nyb2xsLXRvLWxhdGVzdFwiXG4gICAgKm5nSWY9XCJpc1VzZXJTY3JvbGxlZFwiXG4gICAgY2xhc3M9XCJcbiAgICAgIHN0ci1jaGF0X19tZXNzYWdlLW5vdGlmaWNhdGlvbi1zY3JvbGwtdG8tbGF0ZXN0XG4gICAgICBzdHItY2hhdF9fbWVzc2FnZS1ub3RpZmljYXRpb24tc2Nyb2xsLXRvLWxhdGVzdC1yaWdodFxuICAgICAgc3RyLWNoYXRfX2NpcmNsZS1mYWJcbiAgICBcIlxuICAgIChrZXl1cC5lbnRlcik9XCJqdW1wVG9MYXRlc3RNZXNzYWdlKClcIlxuICAgIChjbGljayk9XCJqdW1wVG9MYXRlc3RNZXNzYWdlKClcIlxuICA+XG4gICAgPHN0cmVhbS1pY29uXG4gICAgICBjbGFzcz1cInN0ci1jaGF0X19qdW1wLXRvLWxhdGVzdC1pY29uIHN0ci1jaGF0X19jaXJjbGUtZmFiLWljb25cIlxuICAgICAgW2ljb25dPVwiZGlyZWN0aW9uID09PSAnYm90dG9tLXRvLXRvcCcgPyAnYXJyb3ctZG93bicgOiAnYXJyb3ctdXAnXCJcbiAgICA+PC9zdHJlYW0taWNvbj5cbiAgICA8ZGl2XG4gICAgICAqbmdJZj1cInVucmVhZE1lc3NhZ2VDb3VudCA+IDBcIlxuICAgICAgY2xhc3M9XCJcbiAgICAgICAgc3RyLWNoYXRfX21lc3NhZ2Utbm90aWZpY2F0aW9uXG4gICAgICAgIHN0ci1jaGF0X19tZXNzYWdlLW5vdGlmaWNhdGlvbi1zY3JvbGwtdG8tbGF0ZXN0LXVucmVhZC1jb3VudFxuICAgICAgICBzdHItY2hhdF9fanVtcC10by1sYXRlc3QtdW5yZWFkLWNvdW50XG4gICAgICBcIlxuICAgID5cbiAgICAgIHt7IHVucmVhZE1lc3NhZ2VDb3VudCB9fVxuICAgIDwvZGl2PlxuICA8L2J1dHRvbj5cbjwvZGl2PlxuXG48bmctdGVtcGxhdGUgI21lc3NhZ2VUZW1wbGF0ZUNvbnRhaW5lciBsZXQtbWVzc2FnZT1cIm1lc3NhZ2VcIj5cbiAgPG5nLXRlbXBsYXRlXG4gICAgI2RlZmF1bHRNZXNzYWdlVGVtcGxhdGVcbiAgICBsZXQtbWVzc2FnZUlucHV0PVwibWVzc2FnZVwiXG4gICAgbGV0LWlzTGFzdFNlbnRNZXNzYWdlPVwiaXNMYXN0U2VudE1lc3NhZ2VcIlxuICAgIGxldC1lbmFibGVkTWVzc2FnZUFjdGlvbnM9XCJlbmFibGVkTWVzc2FnZUFjdGlvbnNcIlxuICAgIGxldC1tb2RlPVwibW9kZVwiXG4gICAgbGV0LWlzSGlnaGxpZ2h0ZWQ9XCJpc0hpZ2hsaWdodGVkXCJcbiAgPlxuICAgIDxzdHJlYW0tbWVzc2FnZVxuICAgICAgW21lc3NhZ2VdPVwibWVzc2FnZUlucHV0XCJcbiAgICAgIFtpc0xhc3RTZW50TWVzc2FnZV09XCJpc0xhc3RTZW50TWVzc2FnZVwiXG4gICAgICBbZW5hYmxlZE1lc3NhZ2VBY3Rpb25zXT1cImVuYWJsZWRNZXNzYWdlQWN0aW9uc1wiXG4gICAgICBbbW9kZV09XCJtb2RlXCJcbiAgICAgIFtpc0hpZ2hsaWdodGVkXT1cImlzSGlnaGxpZ2h0ZWRcIlxuICAgID48L3N0cmVhbS1tZXNzYWdlPlxuICA8L25nLXRlbXBsYXRlPlxuICA8bmctY29udGFpbmVyXG4gICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgIG1lc3NhZ2VUZW1wbGF0ZSB8fCBkZWZhdWx0TWVzc2FnZVRlbXBsYXRlO1xuICAgICAgY29udGV4dDogZ2V0TWVzc2FnZUNvbnRleHQobWVzc2FnZSlcbiAgICBcIlxuICA+PC9uZy1jb250YWluZXI+XG48L25nLXRlbXBsYXRlPlxuIl19
|
|
375
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVzc2FnZS1saXN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3N0cmVhbS1jaGF0LWFuZ3VsYXIvc3JjL2xpYi9tZXNzYWdlLWxpc3QvbWVzc2FnZS1saXN0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3N0cmVhbS1jaGF0LWFuZ3VsYXIvc3JjL2xpYi9tZXNzYWdlLWxpc3QvbWVzc2FnZS1saXN0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFHTCxTQUFTLEVBRVQsV0FBVyxFQUNYLEtBQUssRUFNTCxTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUM7QUFHdkIsT0FBTyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFRbEQsT0FBTyxFQUFFLGNBQWMsRUFBYyxNQUFNLGdCQUFnQixDQUFDO0FBRzVELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7Ozs7Ozs7Ozs7QUFFMUM7O0dBRUc7QUFNSCxNQUFNLE9BQU8sb0JBQW9CO0lBa0QvQixZQUNVLGNBQThCLEVBQzlCLGlCQUFvQyxFQUNwQyxzQkFBOEM7UUFGOUMsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQzlCLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBbUI7UUFDcEMsMkJBQXNCLEdBQXRCLHNCQUFzQixDQUF3QjtRQWxEeEQ7O1dBRUc7UUFDTSxTQUFJLEdBQXNCLE1BQU0sQ0FBQztRQUMxQzs7V0FFRztRQUNNLGNBQVMsR0FBc0MsZUFBZSxDQUFDO1FBQ3hFOztXQUVHO1FBQ00sMEJBQXFCLEdBQzVCLGFBQWEsQ0FBQztRQUloQiwwQkFBcUIsR0FBYSxFQUFFLENBQUM7UUFDUCxVQUFLLEdBQ2pDLG1HQUFtRyxDQUFDO1FBQ3RHLHVCQUFrQixHQUFHLENBQUMsQ0FBQztRQUV2QixnQkFBVyxHQUFp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QVcsRUFBRSwrQkFBK0I7b0JBQzVDLE1BQU0sRUFBRSxFQUFFO2lCQUNYOzBLQU9VLElBQUk7c0JBQVosS0FBSztnQkFJRyxTQUFTO3NCQUFqQixLQUFLO2dCQUlHLHFCQUFxQjtzQkFBN0IsS0FBSztnQkFNd0IsS0FBSztzQkFBbEMsV0FBVzt1QkFBQyxPQUFPO2dCQVVaLGVBQWU7c0JBRHRCLFNBQVM7dUJBQUMsaUJBQWlCO2dCQUdwQixvQkFBb0I7c0JBRDNCLFNBQVM7dUJBQUMsc0JBQXNCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQWZ0ZXJWaWV3Q2hlY2tlZCxcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgQ29tcG9uZW50LFxuICBFbGVtZW50UmVmLFxuICBIb3N0QmluZGluZyxcbiAgSW5wdXQsXG4gIE9uQ2hhbmdlcyxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIFNpbXBsZUNoYW5nZXMsXG4gIFRlbXBsYXRlUmVmLFxuICBWaWV3Q2hpbGQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ2hhbm5lbFNlcnZpY2UgfSBmcm9tICcuLi9jaGFubmVsLnNlcnZpY2UnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBmaWx0ZXIsIG1hcCwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHtcbiAgTWVzc2FnZUNvbnRleHQsXG4gIERlZmF1bHRTdHJlYW1DaGF0R2VuZXJpY3MsXG4gIFN0cmVhbU1lc3NhZ2UsXG4gIFR5cGluZ0luZGljYXRvckNvbnRleHQsXG59IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7IENoYXRDbGllbnRTZXJ2aWNlIH0gZnJvbSAnLi4vY2hhdC1jbGllbnQuc2VydmljZSc7XG5pbXBvcnQgeyBnZXRHcm91cFN0eWxlcywgR3JvdXBTdHlsZSB9IGZyb20gJy4vZ3JvdXAtc3R5bGVzJztcbmltcG9ydCB7IFVzZXJSZXNwb25zZSB9IGZyb20gJ3N0cmVhbS1jaGF0JztcbmltcG9ydCB7IEN1c3RvbVRlbXBsYXRlc1NlcnZpY2UgfSBmcm9tICcuLi9jdXN0b20tdGVtcGxhdGVzLnNlcnZpY2UnO1xuaW1wb3J0IHsgbGlzdFVzZXJzIH0gZnJvbSAnLi4vbGlzdC11c2Vycyc7XG5cbi8qKlxuICogVGhlIGBNZXNzYWdlTGlzdGAgY29tcG9uZW50IHJlbmRlcnMgYSBzY3JvbGxhYmxlIGxpc3Qgb2YgbWVzc2FnZXMuXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3N0cmVhbS1tZXNzYWdlLWxpc3QnLFxuICB0ZW1wbGF0ZVVybDogJy4vbWVzc2FnZS1saXN0LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVzOiBbXSxcbn0pXG5leHBvcnQgY2xhc3MgTWVzc2FnZUxpc3RDb21wb25lbnRcbiAgaW1wbGVtZW50cyBBZnRlclZpZXdDaGVja2VkLCBPbkNoYW5nZXMsIE9uSW5pdCwgT25EZXN0cm95LCBBZnRlclZpZXdJbml0XG57XG4gIC8qKlxuICAgKiBEZXRlcm1pbmVzIGlmIHRoZSBtZXNzYWdlIGxpc3Qgc2hvdWxkIGRpc3BsYXkgY2hhbm5lbCBtZXNzYWdlcyBvciBbdGhyZWFkIG1lc3NhZ2VzXShodHRwczovL2dldHN0cmVhbS5pby9jaGF0L2RvY3MvamF2YXNjcmlwdC90aHJlYWRzLz9sYW5ndWFnZT1qYXZhc2NyaXB0KS5cbiAgICovXG4gIEBJbnB1dCgpIG1vZGU6ICdtYWluJyB8ICd0aHJlYWQnID0gJ21haW4nO1xuICAvKipcbiAgICogVGhlIGRpcmVjdGlvbiBvZiB0aGUgbWVzc2FnZXMgaW4gdGhlIGxpc3QsIGBib3R0b20tdG8tdG9wYCBtZWFucyBuZXdlc3QgbWVzc2FnZSBpcyBhdCB0aGUgYm90dG9tIG9mIHRoZSBtZXNzYWdlIGxpc3QgYW5kIHVzZXJzIHNjcm9sbCB1cHdhcmRzIHRvIGxvYWQgb2xkZXIgbWVzc2FnZXNcbiAgICovXG4gIEBJbnB1dCgpIGRpcmVjdGlvbjogJ2JvdHRvbS10by10b3AnIHwgJ3RvcC10by1ib3R0b20nID0gJ2JvdHRvbS10by10b3AnO1xuICAvKipcbiAgICogRGV0ZXJtaW5lcyB3aGF0IHRyaWdnZXJzIHRoZSBhcHBlYXJhbmNlIG9mIHRoZSBtZXNzYWdlIG9wdGlvbnM6IGJ5IGRlZmF1bHQgeW91IGNhbiBob3ZlciAoY2xpY2sgb24gbW9iaWxlKSBhbnl3aGVyZSBpbiB0aGUgcm93IG9mIHRoZSBtZXNzYWdlIChgbWVzc2FnZS1yb3dgIG9wdGlvbiksIG9yIHlvdSBjYW4gc2V0IGBtZXNzYWdlLWJ1YmJsZWAsIGluIHRoYXQgY2FzZSBvbmx5IGEgaG92ZXIgKGNsaWNrIG9uIG1vYmlsZSkgaW4gdGhlIG1lc3NhZ2UgYnViYmxlIHdpbGwgdHJpZ2dlciB0aGUgb3B0aW9ucyB0byBhcHBlYXIuXG4gICAqL1xuICBASW5wdXQoKSBtZXNzYWdlT3B0aW9uc1RyaWdnZXI6ICdtZXNzYWdlLXJvdycgfCAnbWVzc2FnZS1idWJibGUnID1cbiAgICAnbWVzc2FnZS1yb3cnO1xuICB0eXBpbmdJbmRpY2F0b3JUZW1wbGF0ZTogVGVtcGxhdGVSZWY8VHlwaW5nSW5kaWNhdG9yQ29udGV4dD4gfCB1bmRlZmluZWQ7XG4gIG1lc3NhZ2VUZW1wbGF0ZTogVGVtcGxhdGVSZWY8TWVzc2FnZUNvbnRleHQ+IHwgdW5kZWZpbmVkO1xuICBtZXNzYWdlcyQhOiBPYnNlcnZhYmxlPFN0cmVhbU1lc3NhZ2VbXT47XG4gIGVuYWJsZWRNZXNzYWdlQWN0aW9uczogc3RyaW5nW10gPSBbXTtcbiAgQEhvc3RCaW5kaW5nKCdjbGFzcycpIHByaXZhdGUgY2xhc3MgPVxuICAgICdzdHItY2hhdC1hbmd1bGFyX19tYWluLXBhbmVsLWlubmVyIHN0ci1jaGF0LWFuZ3VsYXJfX21lc3NhZ2UtbGlzdC1ob3N0IHN0ci1jaGF0X19tYWluLXBhbmVsLWlubmVyJztcbiAgdW5yZWFkTWVzc2FnZUNvdW50ID0gMDtcbiAgaXNVc2VyU2Nyb2xsZWQ6IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gIGdyb3VwU3R5bGVzOiBHcm91cFN0eWxlW10gPSBbXTtcbiAgbGFzdFNlbnRNZXNzYWdlSWQ6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgcGFyZW50TWVzc2FnZTogU3RyZWFtTWVzc2FnZSB8IHVuZGVmaW5lZDtcbiAgaGlnaGxpZ2h0ZWRNZXNzYWdlSWQ6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgaXNMb2FkaW5nID0gZmFsc2U7XG4gIEBWaWV3Q2hpbGQoJ3Njcm9sbENvbnRhaW5lcicpXG4gIHByaXZhdGUgc2Nyb2xsQ29udGFpbmVyITogRWxlbWVudFJlZjxIVE1MRWxlbWVudD47XG4gIEBWaWV3Q2hpbGQoJ3BhcmVudE1lc3NhZ2VFbGVtZW50JylcbiAgcHJpdmF0ZSBwYXJlbnRNZXNzYWdlRWxlbWVudCE6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+O1xuICBwcml2YXRlIGxhdGVzdE1lc3NhZ2U6IHsgaWQ6IHN0cmluZzsgY3JlYXRlZF9hdDogRGF0ZSB9IHwgdW5kZWZpbmVkO1xuICBwcml2YXRlIGhhc05ld01lc3NhZ2VzOiBib29sZWFuIHwgdW5kZWZpbmVkO1xuICBwcml2YXRlIGNvbnRhaW5lckhlaWdodDogbnVtYmVyIHwgdW5kZWZpbmVkO1xuICBwcml2YXRlIG9sZGVzdE1lc3NhZ2U6IHsgaWQ6IHN0cmluZzsgY3JlYXRlZF9hdDogRGF0ZSB9IHwgdW5kZWZpbmVkO1xuICBwcml2YXRlIG9sZGVyTWFzc2FnZXNMb2FkZWQ6IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gIHByaXZhdGUgaXNOZXdNZXNzYWdlU2VudEJ5VXNlcjogYm9vbGVhbiB8IHVuZGVmaW5lZDtcbiAgcHJpdmF0ZSBzdWJzY3JpcHRpb25zOiBTdWJzY3JpcHRpb25bXSA9IFtdO1xuICBwcml2YXRlIG5ld01lc3NhZ2VTdWJzY3JpcHRpb246IHsgdW5zdWJzY3JpYmU6ICgpID0+IHZvaWQgfSB8IHVuZGVmaW5lZDtcbiAgcHJpdmF0ZSBwcmV2U2Nyb2xsVG9wOiBudW1iZXIgfCB1bmRlZmluZWQ7XG4gIHByaXZhdGUgdXNlcnNUeXBpbmdJbkNoYW5uZWwkITogT2JzZXJ2YWJsZTxcbiAgICBVc2VyUmVzcG9uc2U8RGVmYXVsdFN0cmVhbUNoYXRHZW5lcmljcz5bXVxuICA+O1xuICBwcml2YXRlIHVzZXJzVHlwaW5nSW5UaHJlYWQkITogT2JzZXJ2YWJsZTxcbiAgICBVc2VyUmVzcG9uc2U8RGVmYXVsdFN0cmVhbUNoYXRHZW5lcmljcz5bXVxuICA+O1xuICBwcml2YXRlIGlzTGF0ZXN0TWVzc2FnZUluTGlzdCA9IHRydWU7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBjaGFubmVsU2VydmljZTogQ2hhbm5lbFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBjaGF0Q2xpZW50U2VydmljZTogQ2hhdENsaWVudFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBjdXN0b21UZW1wbGF0ZXNTZXJ2aWNlOiBDdXN0b21UZW1wbGF0ZXNTZXJ2aWNlXG4gICkge1xuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxuICAgICAgdGhpcy5jaGFubmVsU2VydmljZS5hY3RpdmVDaGFubmVsJC5zdWJzY3JpYmUoKGNoYW5uZWwpID0+IHtcbiAgICAgICAgdGhpcy5yZXNldFNjcm9sbFN0YXRlKCk7XG4gICAgICAgIGNvbnN0IGNhcGFiaWxpdGVzID0gY2hhbm5lbD8uZGF0YT8ub3duX2NhcGFiaWxpdGllcyBhcyBzdHJpbmdbXTtcbiAgICAgICAgaWYgKGNhcGFiaWxpdGVzKSB7XG4gICAgICAgICAgdGhpcy5lbmFibGVkTWVzc2FnZUFjdGlvbnMgPSBjYXBhYmlsaXRlcztcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm5ld01lc3NhZ2VTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIGlmIChjaGFubmVsKSB7XG4gICAgICAgICAgdGhpcy5uZXdNZXNzYWdlU3Vic2NyaXB0aW9uID0gY2hhbm5lbC5vbignbWVzc2FnZS5uZXcnLCAoZXZlbnQpID0+IHtcbiAgICAgICAgICAgIC8vIElmIHdlIGRpc3BsYXkgbWFpbiBjaGFubmVsIG1lc3NhZ2VzIGFuZCB3ZSdyZSBzd2l0Y2hlZCB0byBhbiBvbGRlciBtZXNzYWdlIHNldCAtPiB1c2UgbWVzc2FnZS5uZXcgZXZlbnQgdG8gdXBkYXRlIHVucmVhZCBjb3VudCBhbmQgZGV0ZWN0IG5ldyBtZXNzYWdlcyBzZW50IGJ5IGN1cnJlbnQgdXNlclxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAhZXZlbnQubWVzc2FnZSB8fFxuICAgICAgICAgICAgICBjaGFubmVsLnN0YXRlLm1lc3NhZ2VzID09PSBjaGFubmVsLnN0YXRlLmxhdGVzdE1lc3NhZ2VzIHx8XG4gICAgICAgICAgICAgIHRoaXMubW9kZSA9PT0gJ3RocmVhZCdcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLm5ld01lc3NhZ2VSZWNlaXZlZCh7XG4gICAgICAgICAgICAgIGlkOiBldmVudC5tZXNzYWdlLmlkLFxuICAgICAgICAgICAgICB1c2VyOiBldmVudC5tZXNzYWdlLnVzZXIsXG4gICAgICAgICAgICAgIGNyZWF0ZWRfYXQ6IG5ldyBEYXRlKGV2ZW50Lm1lc3NhZ2UuY3JlYXRlZF9hdCB8fCAnJyksXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICApO1xuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxuICAgICAgdGhpcy5jaGFubmVsU2VydmljZS5hY3RpdmVQYXJlbnRNZXNzYWdlJC5zdWJzY3JpYmUoKG1lc3NhZ2UpID0+IHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIG1lc3NhZ2UgJiZcbiAgICAgICAgICB0aGlzLnBhcmVudE1lc3NhZ2UgJiZcbiAgICAgICAgICBtZXNzYWdlLmlkICE9PSB0aGlzLnBhcmVudE1lc3NhZ2UuaWQgJiZcbiAgICAgICAgICB0aGlzLm1vZGUgPT09ICd0aHJlYWQnXG4gICAgICAgICkge1xuICAgICAgICAgIHRoaXMucmVzZXRTY3JvbGxTdGF0ZSgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucGFyZW50TWVzc2FnZSA9IG1lc3NhZ2U7XG4gICAgICB9KVxuICAgICk7XG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXG4gICAgICB0aGlzLmN1c3RvbVRlbXBsYXRlc1NlcnZpY2UubWVzc2FnZVRlbXBsYXRlJC5zdWJzY3JpYmUoXG4gICAgICAgICh0ZW1wbGF0ZSkgPT4gKHRoaXMubWVzc2FnZVRlbXBsYXRlID0gdGVtcGxhdGUpXG4gICAgICApXG4gICAgKTtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcbiAgICAgIHRoaXMuY3VzdG9tVGVtcGxhdGVzU2VydmljZS50eXBpbmdJbmRpY2F0b3JUZW1wbGF0ZSQuc3Vic2NyaWJlKFxuICAgICAgICAodGVtcGxhdGUpID0+ICh0aGlzLnR5cGluZ0luZGljYXRvclRlbXBsYXRlID0gdGVtcGxhdGUpXG4gICAgICApXG4gICAgKTtcbiAgICB0aGlzLnVzZXJzVHlwaW5nSW5DaGFubmVsJCA9IHRoaXMuY2hhbm5lbFNlcnZpY2UudXNlcnNUeXBpbmdJbkNoYW5uZWwkO1xuICAgIHRoaXMudXNlcnNUeXBpbmdJblRocmVhZCQgPSB0aGlzLmNoYW5uZWxTZXJ2aWNlLnVzZXJzVHlwaW5nSW5UaHJlYWQkO1xuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5zZXRNZXNzYWdlcyQoKTtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBpZiAoY2hhbmdlcy5tb2RlIHx8IGNoYW5nZXMuZGlyZWN0aW9uKSB7XG4gICAgICB0aGlzLnNldE1lc3NhZ2VzJCgpO1xuICAgIH1cbiAgICBpZiAoY2hhbmdlcy5kaXJlY3Rpb24pIHtcbiAgICAgIGlmICh0aGlzLnNjcm9sbENvbnRhaW5lcj8ubmF0aXZlRWxlbWVudCkge1xuICAgICAgICB0aGlzLmp1bXBUb0xhdGVzdE1lc3NhZ2UoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXG4gICAgICB0aGlzLmNoYW5uZWxTZXJ2aWNlLmp1bXBUb01lc3NhZ2UkXG4gICAgICAgIC5waXBlKGZpbHRlcigoY29uZmlnKSA9PiAhIWNvbmZpZy5pZCkpXG4gICAgICAgIC5zdWJzY3JpYmUoKGNvbmZpZykgPT4ge1xuICAgICAgICAgIGxldCBtZXNzYWdlSWQ6IHN0cmluZyB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcbiAgICAgICAgICBpZiAodGhpcy5tb2RlID09PSAnbWFpbicpIHtcbiAgICAgICAgICAgIG1lc3NhZ2VJZCA9IGNvbmZpZy5wYXJlbnRJZCB8fCBjb25maWcuaWQ7XG4gICAgICAgICAgfSBlbHNlIGlmIChjb25maWcucGFyZW50SWQpIHtcbiAgICAgICAgICAgIG1lc3NhZ2VJZCA9IGNvbmZpZy5pZDtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKG1lc3NhZ2VJZCkge1xuICAgICAgICAgICAgaWYgKG1lc3NhZ2VJZCA9PT0gJ2xhdGVzdCcpIHtcbiAgICAgICAgICAgICAgdGhpcy5zY3JvbGxUb0xhdGVzdE1lc3NhZ2UoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHRoaXMuc2Nyb2xsTWVzc2FnZUludG9WaWV3KG1lc3NhZ2VJZCk7XG4gICAgICAgICAgICAgIHRoaXMuaGlnaGxpZ2h0ZWRNZXNzYWdlSWQgPSBtZXNzYWdlSWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICk7XG4gIH1cblxuICBuZ0FmdGVyVmlld0NoZWNrZWQoKSB7XG4gICAgaWYgKHRoaXMuaGlnaGxpZ2h0ZWRNZXNzYWdlSWQpIHtcbiAgICAgIC8vIFR1cm4gb2ZmIHByb2dyYW1hdGljIHNjcm9sbCBhZGp1c3RtZW50cyB3aGlsZSBqdW1wIHRvIG1lc3NhZ2UgaXMgaW4gcHJvZ3Jlc3NcbiAgICAgIHRoaXMuaGFzTmV3TWVzc2FnZXMgPSBmYWxzZTtcbiAgICAgIHRoaXMub2xkZXJNYXNzYWdlc0xvYWRlZCA9IGZhbHNlO1xuICAgIH1cbiAgICBpZiAodGhpcy5kaXJlY3Rpb24gPT09ICd0b3AtdG8tYm90dG9tJykge1xuICAgICAgaWYgKFxuICAgICAgICB0aGlzLmhhc05ld01lc3NhZ2VzICYmXG4gICAgICAgICh0aGlzLmlzTmV3TWVzc2FnZVNlbnRCeVVzZXIgfHwgIXRoaXMuaXNVc2VyU2Nyb2xsZWQpXG4gICAgICApIHtcbiAgICAgICAgdGhpcy5pc0xhdGVzdE1lc3NhZ2VJbkxpc3RcbiAgICAgICAgICA/IHRoaXMuc2Nyb2xsVG9Ub3AoKVxuICAgICAgICAgIDogdGhpcy5qdW1wVG9MYXRlc3RNZXNzYWdlKCk7XG4gICAgICAgIHRoaXMuaGFzTmV3TWVzc2FnZXMgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5jb250YWluZXJIZWlnaHQgPSB0aGlzLnNjcm9sbENvbnRhaW5lci5uYXRpdmVFbGVtZW50LnNjcm9sbEhlaWdodDtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHRoaXMuaGFzTmV3TWVzc2FnZXMpIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzVXNlclNjcm9sbGVkIHx8IHRoaXMuaXNOZXdNZXNzYWdlU2VudEJ5VXNlcikge1xuICAgICAgICAgIHRoaXMuaXNMYXRlc3RNZXNzYWdlSW5MaXN0XG4gICAgICAgICAgICA/IHRoaXMuc2Nyb2xsVG9Cb3R0b20oKVxuICAgICAgICAgICAgOiB0aGlzLmp1bXBUb0xhdGVzdE1lc3NhZ2UoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmhhc05ld01lc3NhZ2VzID0gZmFsc2U7XG4gICAgICAgIHRoaXMuY29udGFpbmVySGVpZ2h0ID0gdGhpcy5zY3JvbGxDb250YWluZXIubmF0aXZlRWxlbWVudC5zY3JvbGxIZWlnaHQ7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMub2xkZXJNYXNzYWdlc0xvYWRlZCkge1xuICAgICAgICB0aGlzLnByZXNlcnZlU2Nyb2xsYmFyUG9zaXRpb24oKTtcbiAgICAgICAgdGhpcy5jb250YWluZXJIZWlnaHQgPSB0aGlzLnNjcm9sbENvbnRhaW5lci5uYXRpdmVFbGVtZW50LnNjcm9sbEhlaWdodDtcbiAgICAgICAgdGhpcy5vbGRlck1hc3NhZ2VzTG9hZGVkID0gZmFsc2U7XG4gICAgICB9IGVsc2UgaWYgKFxuICAgICAgICB0aGlzLmdldFNjcm9sbFBvc2l0aW9uKCkgIT09ICdib3R0b20nICYmXG4gICAgICAgICF0aGlzLmlzVXNlclNjcm9sbGVkICYmXG4gICAgICAgICF0aGlzLmhpZ2hsaWdodGVkTWVzc2FnZUlkXG4gICAgICApIHtcbiAgICAgICAgdGhpcy5pc0xhdGVzdE1lc3NhZ2VJbkxpc3RcbiAgICAgICAgICA/IHRoaXMuc2Nyb2xsVG9Cb3R0b20oKVxuICAgICAgICAgIDogdGhpcy5qdW1wVG9MYXRlc3RNZXNzYWdlKCk7XG4gICAgICAgIHRoaXMuY29udGFpbmVySGVpZ2h0ID0gdGhpcy5zY3JvbGxDb250YWluZXIubmF0aXZlRWxlbWVudC5zY3JvbGxIZWlnaHQ7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLmZvckVhY2goKHMpID0+IHMudW5zdWJzY3JpYmUoKSk7XG4gICAgdGhpcy5uZXdNZXNzYWdlU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICB9XG5cbiAgdHJhY2tCeU1lc3NhZ2VJZChpbmRleDogbnVtYmVyLCBpdGVtOiBTdHJlYW1NZXNzYWdlKSB7XG4gICAgcmV0dXJuIGl0ZW0uaWQ7XG4gIH1cblxuICB0cmFja0J5VXNlcklkKGluZGV4OiBudW1iZXIsIHVzZXI6IFVzZXJSZXNwb25zZSkge1xuICAgIHJldHVybiB1c2VyLmlkO1xuICB9XG5cbiAganVtcFRvTGF0ZXN0TWVzc2FnZSgpIHtcbiAgICB2b2lkIHRoaXMuY2hhbm5lbFNlcnZpY2UuanVtcFRvTWVzc2FnZShcbiAgICAgICdsYXRlc3QnLFxuICAgICAgdGhpcy5tb2RlID09PSAndGhyZWFkJyA/IHRoaXMucGFyZW50TWVzc2FnZT8uaWQgOiB1bmRlZmluZWRcbiAgICApO1xuICB9XG5cbiAgc2Nyb2xsVG9Cb3R0b20oKTogdm9pZCB7XG4gICAgdGhpcy5zY3JvbGxDb250YWluZXIubmF0aXZlRWxlbWVudC5zY3JvbGxUb3AgPVxuICAgICAgdGhpcy5zY3JvbGxDb250YWluZXIubmF0aXZlRWxlbWVudC5zY3JvbGxIZWlnaHQ7XG4gIH1cblxuICBzY3JvbGxUb1RvcCgpIHtcbiAgICB0aGlzLnNjcm9sbENvbnRhaW5lci5uYXRpdmVFbGVtZW50LnNjcm9sbFRvcCA9IDA7XG4gIH1cblxuICBzY3JvbGxlZCgpIHtcbiAgICBpZiAoXG4gICAgICB0aGlzLnNjcm9sbENvbnRhaW5lci5uYXRpdmVFbGVtZW50LnNjcm9sbEhlaWdodCA9PT1cbiAgICAgIHRoaXMuc2Nyb2xsQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQuY2xpZW50SGVpZ2h0XG4gICAgKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHNjcm9sbFBvc2l0aW9uID0gdGhpcy5nZXRTY3JvbGxQb3NpdGlvbigpO1xuXG4gICAgdGhpcy5pc1VzZXJTY3JvbGxlZCA9XG4gICAgICAodGhpcy5kaXJlY3Rpb24gPT09ICdib3R0b20tdG8tdG9wJ1xuICAgICAgICA/IHNjcm9sbFBvc2l0aW9uICE9PSAnYm90dG9tJ1xuICAgICAgICA6IHNjcm9sbFBvc2l0aW9uICE9PSAndG9wJykgfHwgIXRoaXMuaXNMYXRlc3RNZXNzYWdlSW5MaXN0O1xuICAgIGlmICghdGhpcy5pc1VzZXJTY3JvbGxlZCkge1xuICAgICAgdGhpcy51bnJlYWRNZXNzYWdlQ291bnQgPSAwO1xuICAgIH1cbiAgICBpZiAodGhpcy5zaG91bGRMb2FkTW9yZU1lc3NhZ2VzKHNjcm9sbFBvc2l0aW9uKSkge1xuICAgICAgdGhpcy5jb250YWluZXJIZWlnaHQgPSB0aGlzLnNjcm9sbENvbnRhaW5lci5uYXRpdmVFbGVtZW50LnNjcm9sbEhlaWdodDtcbiAgICAgIGxldCBkaXJlY3Rpb246ICduZXdlcicgfCAnb2xkZXInO1xuICAgICAgaWYgKHRoaXMuZGlyZWN0aW9uID09PSAndG9wLXRvLWJvdHRvbScpIHtcbiAgICAgICAgZGlyZWN0aW9uID0gc2Nyb2xsUG9zaXRpb24gPT09ICd0b3AnID8gJ25ld2VyJyA6ICdvbGRlcic7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkaXJlY3Rpb24gPSBzY3JvbGxQb3NpdGlvbiA9PT0gJ3RvcCcgPyAnb2xkZXInIDogJ25ld2VyJztcbiAgICAgIH1cbiAgICAgIHRoaXMubW9kZSA9PT0gJ21haW4nXG4gICAgICAgID8gdm9pZCB0aGlzLmNoYW5uZWxTZXJ2aWNlLmxvYWRNb3JlTWVzc2FnZXMoZGlyZWN0aW9uKVxuICAgICAgICA6IHZvaWQgdGhpcy5jaGFubmVsU2VydmljZS5sb2FkTW9yZVRocmVhZFJlcGxpZXMoZGlyZWN0aW9uKTtcbiAgICAgIHRoaXMuaXNMb2FkaW5nID0gdHJ1ZTtcbiAgICB9XG4gICAgdGhpcy5wcmV2U2Nyb2xsVG9wID0gdGhpcy5zY3JvbGxDb250YWluZXIubmF0aXZlRWxlbWVudC5zY3JvbGxUb3A7XG4gIH1cblxuICBnZXRUeXBpbmdJbmRpY2F0b3JDb250ZXh0KCk6IFR5cGluZ0luZGljYXRvckNvbnRleHQge1xuICAgIHJldHVybiB7XG4gICAgICB1c2Vyc1R5cGluZyQ6IHRoaXMudXNlcnNUeXBpbmckLFxuICAgIH07XG4gIH1cblxuICBnZXRNZXNzYWdlQ29udGV4dChtZXNzYWdlOiBTdHJlYW1NZXNzYWdlKTogTWVzc2FnZUNvbnRleHQge1xuICAgIHJldHVybiB7XG4gICAgICBtZXNzYWdlLFxuICAgICAgaXNMYXN0U2VudE1lc3NhZ2U6ICEhKFxuICAgICAgICB0aGlzLmxhc3RTZW50TWVzc2FnZUlkICYmIG1lc3NhZ2U/LmlkID09PSB0aGlzLmxhc3RTZW50TWVzc2FnZUlkXG4gICAgICApLFxuICAgICAgZW5hYmxlZE1lc3NhZ2VBY3Rpb25zOiB0aGlzLmVuYWJsZWRNZXNzYWdlQWN0aW9ucyxcbiAgICAgIG1vZGU6IHRoaXMubW9kZSxcbiAgICAgIGlzSGlnaGxpZ2h0ZWQ6IG1lc3NhZ2U/LmlkID09PSB0aGlzLmhpZ2hsaWdodGVkTWVzc2FnZUlkLFxuICAgIH07XG4gIH1cblxuICBnZXRUeXBpbmdJbmRpY2F0b3JUZXh0KHVzZXJzOiBVc2VyUmVzcG9uc2VbXSkge1xuICAgIGNvbnN0IHRleHQgPSBsaXN0VXNlcnModXNlcnMpO1xuXG4gICAgcmV0dXJuIHRleHQ7XG4gIH1cblxuICBnZXQgcmVwbHlDb3VudFBhcmFtKCkge1xuICAgIHJldHVybiB7IHJlcGx5Q291bnQ6IHRoaXMucGFyZW50TWVzc2FnZT8ucmVwbHlfY291bnQgfTtcbiAgfVxuXG4gIHByaXZhdGUgcHJlc2VydmVTY3JvbGxiYXJQb3NpdGlvbigpIHtcbiAgICB0aGlzLnNjcm9sbENvbnRhaW5lci5uYXRpdmVFbGVtZW50LnNjcm9sbFRvcCA9XG4gICAgICAodGhpcy5wcmV2U2Nyb2xsVG9wIHx8IDApICtcbiAgICAgICh0aGlzLnNjcm9sbENvbnRhaW5lci5uYXRpdmVFbGVtZW50LnNjcm9sbEhlaWdodCAtIHRoaXMuY29udGFpbmVySGVpZ2h0ISk7XG4gIH1cblxuICBwcml2YXRlIGdldFNjcm9sbFBvc2l0aW9uKCk6ICd0b3AnIHwgJ2JvdHRvbScgfCAnbWlkZGxlJyB7XG4gICAgbGV0IHBvc2l0aW9uOiAndG9wJyB8ICdib3R0b20nIHwgJ21pZGRsZScgPSAnbWlkZGxlJztcbiAgICBpZiAoXG4gICAgICBNYXRoLmZsb29yKHRoaXMuc2Nyb2xsQ29udGFpbmVyLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsVG9wKSA8PVxuICAgICAgICAodGhpcy5wYXJlbnRNZXNzYWdlRWxlbWVudD8ubmF0aXZlRWxlbWVudC5jbGllbnRIZWlnaHQgfHwgMCkgJiZcbiAgICAgICh0aGlzLnByZXZTY3JvbGxUb3AgPT09IHVuZGVmaW5lZCB8fFxuICAgICAgICB0aGlzLnByZXZTY3JvbGxUb3AgPlxuICAgICAgICAgICh0aGlzLnBhcmVudE1lc3NhZ2VFbGVtZW50Py5uYXRpdmVFbGVtZW50LmNsaWVudEhlaWdodCB8fCAwKSlcbiAgICApIHtcbiAgICAgIHBvc2l0aW9uID0gJ3RvcCc7XG4gICAgfSBlbHNlIGlmIChcbiAgICAgIE1hdGguY2VpbCh0aGlzLnNjcm9sbENvbnRhaW5lci5uYXRpdmVFbGVtZW50LnNjcm9sbFRvcCkgK1xuICAgICAgICB0aGlzLnNjcm9sbENvbnRhaW5lci5uYXRpdmVFbGVtZW50LmNsaWVudEhlaWdodCA+PVxuICAgICAgdGhpcy5zY3JvbGxDb250YWluZXIubmF0aXZlRWxlbWVudC5zY3JvbGxIZWlnaHRcbiAgICApIHtcbiAgICAgIHBvc2l0aW9uID0gJ2JvdHRvbSc7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBvc2l0aW9uO1xuICB9XG5cbiAgcHJpdmF0ZSBzaG91bGRMb2FkTW9yZU1lc3NhZ2VzKHNjcm9sbFBvc2l0aW9uOiAndG9wJyB8ICdib3R0b20nIHwgJ21pZGRsZScpIHtcbiAgICByZXR1cm4gc2Nyb2xsUG9zaXRpb24gIT09ICdtaWRkbGUnICYmICF0aGlzLmhpZ2hsaWdodGVkTWVzc2FnZUlkO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRNZXNzYWdlcyQoKSB7XG4gICAgdGhpcy5tZXNzYWdlcyQgPSAoXG4gICAgICB0aGlzLm1vZGUgPT09ICdtYWluJ1xuICAgICAgICA/IHRoaXMuY2hhbm5lbFNlcnZpY2UuYWN0aXZlQ2hhbm5lbE1lc3NhZ2VzJFxuICAgICAgICA6IHRoaXMuY2hhbm5lbFNlcnZpY2UuYWN0aXZlVGhyZWFkTWVzc2FnZXMkXG4gICAgKS5waXBlKFxuICAgICAgdGFwKChtZXNzYWdlcykgPT4ge1xuICAgICAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xuICAgICAgICBpZiAobWVzc2FnZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGN1cnJlbnRMYXRlc3RNZXNzYWdlID0gbWVzc2FnZXNbbWVzc2FnZXMubGVuZ3RoIC0gMV07XG4gICAgICAgIHRoaXMubmV3TWVzc2FnZVJlY2VpdmVkKGN1cnJlbnRMYXRlc3RNZXNzYWdlKTtcbiAgICAgICAgY29uc3QgY3VycmVudE9sZGVzdE1lc3NhZ2UgPSBtZXNzYWdlc1swXTtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICF0aGlzLm9sZGVzdE1lc3NhZ2UgfHxcbiAgICAgICAgICAhbWVzc2FnZXMuZmluZCgobSkgPT4gbS5pZCA9PT0gdGhpcy5vbGRlc3RNZXNzYWdlIS5pZClcbiAgICAgICAgKSB7XG4gICAgICAgICAgdGhpcy5vbGRlc3RNZXNzYWdlID0gY3VycmVudE9sZGVzdE1lc3NhZ2U7XG4gICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgdGhpcy5vbGRlc3RNZXNzYWdlLmNyZWF0ZWRfYXQuZ2V0VGltZSgpID5cbiAgICAgICAgICBjdXJyZW50T2xkZXN0TWVzc2FnZS5jcmVhdGVkX2F0LmdldFRpbWUoKVxuICAgICAgICApIHtcbiAgICAgICAgICB0aGlzLm9sZGVzdE1lc3NhZ2UgPSBjdXJyZW50T2xkZXN0TWVzc2FnZTtcbiAgICAgICAgICB0aGlzLm9sZGVyTWFzc2FnZXNMb2FkZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9KSxcbiAgICAgIHRhcChcbiAgICAgICAgKG1lc3NhZ2VzKSA9PlxuICAgICAgICAgICh0aGlzLmxhc3RTZW50TWVzc2FnZUlkID0gWy4uLm1lc3NhZ2VzXVxuICAgICAgICAgICAgLnJldmVyc2UoKVxuICAgICAgICAgICAgLmZpbmQoXG4gICAgICAgICAgICAgIChtKSA9PlxuICAgICAgICAgICAgICAgIG0udXNlcj8uaWQgPT09IHRoaXMuY2hhdENsaWVudFNlcnZpY2UuY2hhdENsaWVudD8udXNlcj8uaWQgJiZcbiAgICAgICAgICAgICAgICBtLnN0YXR1cyAhPT0gJ3NlbmRpbmcnXG4gICAgICAgICAgICApPy5pZClcbiAgICAgICksXG4gICAgICB0YXAoKG1lc3NhZ2VzKSA9PiB7XG4gICAgICAgIHRoaXMuaXNMYXRlc3RNZXNzYWdlSW5MaXN0ID1cbiAgICAgICAgICAhdGhpcy5sYXRlc3RNZXNzYWdlIHx8XG4gICAgICAgICAgbWVzc2FnZXMubGVuZ3RoID09PSAwIHx8XG4gICAgICAgICAgbWVzc2FnZXNbbWVzc2FnZXMubGVuZ3RoIC0gMV0uaWQgPT09IHRoaXMubGF0ZXN0TWVzc2FnZS5pZDtcbiAgICAgICAgaWYgKCF0aGlzLmlzTGF0ZXN0TWVzc2FnZUluTGlzdCkge1xuICAgICAgICAgIHRoaXMuaXNVc2VyU2Nyb2xsZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9KSxcbiAgICAgIG1hcCgobWVzc2FnZXMpID0+XG4gICAgICAgIHRoaXMuZGlyZWN0aW9uID09PSAnYm90dG9tLXRvLXRvcCcgPyBtZXNzYWdlcyA6IFsuLi5tZXNzYWdlc10ucmV2ZXJzZSgpXG4gICAgICApLFxuICAgICAgdGFwKChtZXNzYWdlcykgPT4ge1xuICAgICAgICB0aGlzLmdyb3VwU3R5bGVzID0gbWVzc2FnZXMubWFwKChtLCBpKSA9PlxuICAgICAgICAgIGdldEdyb3VwU3R5bGVzKG0sIG1lc3NhZ2VzW2kgLSAxXSwgbWVzc2FnZXNbaSArIDFdKVxuICAgICAgICApO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSByZXNldFNjcm9sbFN0YXRlKCkge1xuICAgIHRoaXMubGF0ZXN0TWVzc2FnZSA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLmhhc05ld01lc3NhZ2VzID0gdHJ1ZTtcbiAgICB0aGlzLmlzVXNlclNjcm9sbGVkID0gZmFsc2U7XG4gICAgdGhpcy5jb250YWluZXJIZWlnaHQgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5vbGRlck1hc3NhZ2VzTG9hZGVkID0gZmFsc2U7XG4gICAgdGhpcy5vbGRlc3RNZXNzYWdlID0gdW5kZWZpbmVkO1xuICAgIHRoaXMudW5yZWFkTWVzc2FnZUNvdW50ID0gMDtcbiAgICB0aGlzLnByZXZTY3JvbGxUb3AgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5pc05ld01lc3NhZ2VTZW50QnlVc2VyID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuaXNMYXRlc3RNZXNzYWdlSW5MaXN0ID0gdHJ1ZTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0IHVzZXJzVHlwaW5nJCgpIHtcbiAgICByZXR1cm4gdGhpcy5tb2RlID09PSAndGhyZWFkJ1xuICAgICAgPyB0aGlzLnVzZXJzVHlwaW5nSW5UaHJlYWQkXG4gICAgICA6IHRoaXMudXNlcnNUeXBpbmdJbkNoYW5uZWwkO1xuICB9XG5cbiAgcHJpdmF0ZSBzY3JvbGxNZXNzYWdlSW50b1ZpZXcobWVzc2FnZUlkOiBzdHJpbmcsIHdpdGhSZXRyeSA9IHRydWUpIHtcbiAgICBjb25zdCBlbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQobWVzc2FnZUlkKTtcbiAgICBpZiAoIWVsZW1lbnQgJiYgd2l0aFJldHJ5KSB7XG4gICAgICAvLyBJZiB0aGUgbWVzc2FnZSB3YXMgbmV3bHkgaW5zZXJ0ZWQgaW50byBhY3RpdmVDaGFubmVsTWVzc2FnZXMkLCB0aGUgbWVzc2FnZSB3aWxsIGJlIHJlbmRlcmVkIGFmdGVyIHRoZSBjdXJyZW50IGNoYW5nZSBkZXRlY3Rpb24gY3ljbGUgLT4gd2FpdCBmb3IgdGhpcyBjeWNsZSB0byBjb21wbGV0ZVxuICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLnNjcm9sbE1lc3NhZ2VJbnRvVmlldyhtZXNzYWdlSWQsIGZhbHNlKSk7XG4gICAgfSBlbHNlIGlmIChlbGVtZW50KSB7XG4gICAgICBlbGVtZW50LnNjcm9sbEludG9WaWV3KHsgYmxvY2s6ICdjZW50ZXInIH0pO1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMuaGlnaGxpZ2h0ZWRNZXNzYWdlSWQgPSB1bmRlZmluZWQ7XG4gICAgICB9LCAxMDAwKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNjcm9sbFRvTGF0ZXN0TWVzc2FnZSh3aXRoUmV0cnkgPSB0cnVlKSB7XG4gICAgaWYgKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMubGF0ZXN0TWVzc2FnZSEuaWQpKSB7XG4gICAgICB0aGlzLmRpcmVjdGlvbiA9PT0gJ2JvdHRvbS10by10b3AnXG4gICAgICAgID8gdGhpcy5zY3JvbGxUb0JvdHRvbSgpXG4gICAgICAgIDogdGhpcy5zY3JvbGxUb1RvcCgpO1xuICAgIH0gZWxzZSBpZiAod2l0aFJldHJ5KSB7XG4gICAgICAvLyBJZiB0aGUgbWVzc2FnZSB3YXMgbmV3bHkgaW5zZXJ0ZWQgaW50byBhY3RpdmVDaGFubmVsTWVzc2FnZXMkLCB0aGUgbWVzc2FnZSB3aWxsIGJlIHJlbmRlcmVkIGFmdGVyIHRoZSBjdXJyZW50IGNoYW5nZSBkZXRlY3Rpb24gY3ljbGUgLT4gd2FpdCBmb3IgdGhpcyBjeWNsZSB0byBjb21wbGV0ZVxuICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLnNjcm9sbFRvTGF0ZXN0TWVzc2FnZShmYWxzZSksIDApO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgbmV3TWVzc2FnZVJlY2VpdmVkKG1lc3NhZ2U6IHtcbiAgICBpZDogc3RyaW5nO1xuICAgIGNyZWF0ZWRfYXQ6IERhdGU7XG4gICAgdXNlcj86IHsgaWQ6IHN0cmluZyB9IHwgbnVsbDtcbiAgfSkge1xuICAgIGlmIChcbiAgICAgICF0aGlzLmxhdGVzdE1lc3NhZ2UgfHxcbiAgICAgIHRoaXMubGF0ZXN0TWVzc2FnZS5jcmVhdGVkX2F0Py5nZXRUaW1lKCkgPCBtZXNzYWdlLmNyZWF0ZWRfYXQuZ2V0VGltZSgpXG4gICAgKSB7XG4gICAgICB0aGlzLmxhdGVzdE1lc3NhZ2UgPSBtZXNzYWdlO1xuICAgICAgdGhpcy5oYXNOZXdNZXNzYWdlcyA9IHRydWU7XG4gICAgICB0aGlzLmlzTmV3TWVzc2FnZVNlbnRCeVVzZXIgPVxuICAgICAgICBtZXNzYWdlLnVzZXI/LmlkID09PSB0aGlzLmNoYXRDbGllbnRTZXJ2aWNlLmNoYXRDbGllbnQ/LnVzZXI/LmlkO1xuICAgICAgaWYgKHRoaXMuaXNVc2VyU2Nyb2xsZWQpIHtcbiAgICAgICAgdGhpcy51bnJlYWRNZXNzYWdlQ291bnQrKztcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiIsIjxkaXZcbiAgI3Njcm9sbENvbnRhaW5lclxuICBkYXRhLXRlc3RpZD1cInNjcm9sbC1jb250YWluZXJcIlxuICBjbGFzcz1cInN0ci1jaGF0X19saXN0XCJcbiAgKHNjcm9sbCk9XCJzY3JvbGxlZCgpXCJcbj5cbiAgPGRpdiBjbGFzcz1cInN0ci1jaGF0X19yZXZlcnNlLWluZmluaXRlLXNjcm9sbCBzdHItY2hhdF9fbWVzc2FnZS1saXN0LXNjcm9sbFwiPlxuICAgIDx1bFxuICAgICAgY2xhc3M9XCJzdHItY2hhdF9fdWxcIlxuICAgICAgW2NsYXNzLnN0ci1jaGF0X19tZXNzYWdlLW9wdGlvbnMtaW4tYnViYmxlXT1cIlxuICAgICAgICBtZXNzYWdlT3B0aW9uc1RyaWdnZXIgPT09ICdtZXNzYWdlLWJ1YmJsZSdcbiAgICAgIFwiXG4gICAgPlxuICAgICAgPGxpXG4gICAgICAgICNwYXJlbnRNZXNzYWdlRWxlbWVudFxuICAgICAgICAqbmdJZj1cIm1vZGUgPT09ICd0aHJlYWQnXCJcbiAgICAgICAgZGF0YS10ZXN0aWQ9XCJwYXJlbnQtbWVzc2FnZVwiXG4gICAgICAgIGNsYXNzPVwic3RyLWNoYXRfX3BhcmVudC1tZXNzYWdlLWxpXCJcbiAgICAgID5cbiAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgICAgICBtZXNzYWdlVGVtcGxhdGVDb250YWluZXI7XG4gICAgICAgICAgICBjb250ZXh0OiB7IG1lc3NhZ2U6IHBhcmVudE1lc3NhZ2UgfVxuICAgICAgICAgIFwiXG4gICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPGRpdiBkYXRhLXRlc3RpZD1cInJlcGx5LWNvdW50XCIgY2xhc3M9XCJzdHItY2hhdF9fdGhyZWFkLXN0YXJ0XCI+XG4gICAgICAgICAge3twYXJlbnRNZXNzYWdlPy5yZXBseV9jb3VudCA9PT0gMSA/ICgnc3RyZWFtQ2hhdC4xIHJlcGx5JyB8IHRyYW5zbGF0ZSkgOiAoJ3N0cmVhbUNoYXQue3sgcmVwbHlDb3VudCB9fVxuICAgICAgICAgIHJlcGxpZXMnIHwgdHJhbnNsYXRlOnJlcGx5Q291bnRQYXJhbSl9fVxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvbGk+XG4gICAgICA8c3RyZWFtLWxvYWRpbmctaW5kaWNhdG9yXG4gICAgICAgIGRhdGEtdGVzdGlkPVwidG9wLWxvYWRpbmctaW5kaWNhdG9yXCJcbiAgICAgICAgKm5nSWY9XCJpc0xvYWRpbmcgJiYgZGlyZWN0aW9uID09PSAnYm90dG9tLXRvLXRvcCdcIlxuICAgICAgPjwvc3RyZWFtLWxvYWRpbmctaW5kaWNhdG9yPlxuICAgICAgPGxpXG4gICAgICAgIHRhYmluZGV4PVwiMFwiXG4gICAgICAgIGRhdGEtdGVzdGNsYXNzPVwibWVzc2FnZVwiXG4gICAgICAgICpuZ0Zvcj1cIlxuICAgICAgICAgIGxldCBtZXNzYWdlIG9mIG1lc3NhZ2VzJCB8IGFzeW5jO1xuICAgICAgICAgIGxldCBpID0gaW5kZXg7XG4gICAgICAgICAgdHJhY2tCeTogdHJhY2tCeU1lc3NhZ2VJZFxuICAgICAgICBcIlxuICAgICAgICBjbGFzcz1cInN0ci1jaGF0X19saSBzdHItY2hhdF9fbGktLXt7IGdyb3VwU3R5bGVzW2ldIH19XCJcbiAgICAgICAgaWQ9XCJ7eyBtZXNzYWdlLmlkIH19XCJcbiAgICAgID5cbiAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgICAgICBtZXNzYWdlVGVtcGxhdGVDb250YWluZXI7XG4gICAgICAgICAgICBjb250ZXh0OiB7IG1lc3NhZ2U6IG1lc3NhZ2UgfVxuICAgICAgICAgIFwiXG4gICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvbGk+XG4gICAgICA8c3RyZWFtLWxvYWRpbmctaW5kaWNhdG9yXG4gICAgICAgIGRhdGEtdGVzdGlkPVwiYm90dG9tLWxvYWRpbmctaW5kaWNhdG9yXCJcbiAgICAgICAgKm5nSWY9XCJpc0xvYWRpbmcgJiYgZGlyZWN0aW9uID09PSAndG9wLXRvLWJvdHRvbSdcIlxuICAgICAgPjwvc3RyZWFtLWxvYWRpbmctaW5kaWNhdG9yPlxuICAgIDwvdWw+XG4gICAgPG5nLXRlbXBsYXRlICNkZWZhdWx0VHlwaW5nSW5kaWNhdG9yIGxldC11c2Vyc1R5cGluZyQ9XCJ1c2Vyc1R5cGluZyRcIj5cbiAgICAgIDwhLS0gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC90ZW1wbGF0ZS9uby1hbnkgLS0+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiJGFueSh1c2Vyc1R5cGluZyQgfCBhc3luYykgYXMgdXNlcnNcIj5cbiAgICAgICAgPGRpdlxuICAgICAgICAgICpuZ0lmPVwidXNlcnMubGVuZ3RoID4gMFwiXG4gICAgICAgICAgZGF0YS10ZXN0aWQ9XCJ0eXBpbmctaW5kaWNhdG9yXCJcbiAgICAgICAgICBjbGFzcz1cInN0ci1jaGF0X190eXBpbmctaW5kaWNhdG9yIHN0ci1jaGF0X190eXBpbmctaW5kaWNhdG9yLS10eXBpbmdcIlxuICAgICAgICA+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInN0ci1jaGF0X190eXBpbmctaW5kaWNhdG9yX19kb3RzXCI+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInN0ci1jaGF0X190eXBpbmctaW5kaWNhdG9yX19kb3RcIj48L3NwYW4+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInN0ci1jaGF0X190eXBpbmctaW5kaWNhdG9yX19kb3RcIj48L3NwYW4+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cInN0ci1jaGF0X190eXBpbmctaW5kaWNhdG9yX19kb3RcIj48L3NwYW4+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgZGF0YS10ZXN0aWQ9XCJ0eXBpbmctdXNlcnNcIlxuICAgICAgICAgICAgY2xhc3M9XCJzdHItY2hhdF9fdHlwaW5nLWluZGljYXRvcl9fdXNlcnNcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIHt7XG4gICAgICAgICAgICAgIHVzZXJzLmxlbmd0aCA9PT0gMVxuICAgICAgICAgICAgICAgID8gKFwic3RyZWFtQ2hhdC51c2VyIGlzIHR5cGluZ1wiXG4gICAgICAgICAgICAgICAgICB8IHRyYW5zbGF0ZTogeyB1c2VyOiBnZXRUeXBpbmdJbmRpY2F0b3JUZXh0KHVzZXJzKSB9KVxuICAgICAgICAgICAgICAgIDogKFwic3RyZWFtQ2hhdC51c2VycyBhcmUgdHlwaW5nXCJcbiAgICAgICAgICAgICAgICAgIHwgdHJhbnNsYXRlOiB7IHVzZXJzOiBnZXRUeXBpbmdJbmRpY2F0b3JUZXh0KHVzZXJzKSB9KVxuICAgICAgICAgICAgfX1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L25nLXRlbXBsYXRlPlxuICAgIDxuZy1jb250YWluZXJcbiAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgIHR5cGluZ0luZGljYXRvclRlbXBsYXRlIHx8IGRlZmF1bHRUeXBpbmdJbmRpY2F0b3I7XG4gICAgICAgIGNvbnRleHQ6IGdldFR5cGluZ0luZGljYXRvckNvbnRleHQoKVxuICAgICAgXCJcbiAgICA+PC9uZy1jb250YWluZXI+XG4gIDwvZGl2PlxuPC9kaXY+XG48ZGl2IGNsYXNzPVwic3RyLWNoYXRfX2p1bXAtdG8tbGF0ZXN0LW1lc3NhZ2VcIj5cbiAgPGJ1dHRvblxuICAgIGRhdGEtdGVzdGlkPVwic2Nyb2xsLXRvLWxhdGVzdFwiXG4gICAgKm5nSWY9XCJpc1VzZXJTY3JvbGxlZFwiXG4gICAgY2xhc3M9XCJcbiAgICAgIHN0ci1jaGF0X19tZXNzYWdlLW5vdGlmaWNhdGlvbi1zY3JvbGwtdG8tbGF0ZXN0XG4gICAgICBzdHItY2hhdF9fbWVzc2FnZS1ub3RpZmljYXRpb24tc2Nyb2xsLXRvLWxhdGVzdC1yaWdodFxuICAgICAgc3RyLWNoYXRfX2NpcmNsZS1mYWJcbiAgICBcIlxuICAgIChrZXl1cC5lbnRlcik9XCJqdW1wVG9MYXRlc3RNZXNzYWdlKClcIlxuICAgIChjbGljayk9XCJqdW1wVG9MYXRlc3RNZXNzYWdlKClcIlxuICA+XG4gICAgPHN0cmVhbS1pY29uXG4gICAgICBjbGFzcz1cInN0ci1jaGF0X19qdW1wLXRvLWxhdGVzdC1pY29uIHN0ci1jaGF0X19jaXJjbGUtZmFiLWljb25cIlxuICAgICAgW2ljb25dPVwiZGlyZWN0aW9uID09PSAnYm90dG9tLXRvLXRvcCcgPyAnYXJyb3ctZG93bicgOiAnYXJyb3ctdXAnXCJcbiAgICA+PC9zdHJlYW0taWNvbj5cbiAgICA8ZGl2XG4gICAgICAqbmdJZj1cInVucmVhZE1lc3NhZ2VDb3VudCA+IDBcIlxuICAgICAgY2xhc3M9XCJcbiAgICAgICAgc3RyLWNoYXRfX21lc3NhZ2Utbm90aWZpY2F0aW9uXG4gICAgICAgIHN0ci1jaGF0X19tZXNzYWdlLW5vdGlmaWNhdGlvbi1zY3JvbGwtdG8tbGF0ZXN0LXVucmVhZC1jb3VudFxuICAgICAgICBzdHItY2hhdF9fanVtcC10by1sYXRlc3QtdW5yZWFkLWNvdW50XG4gICAgICBcIlxuICAgID5cbiAgICAgIHt7IHVucmVhZE1lc3NhZ2VDb3VudCB9fVxuICAgIDwvZGl2PlxuICA8L2J1dHRvbj5cbjwvZGl2PlxuXG48bmctdGVtcGxhdGUgI21lc3NhZ2VUZW1wbGF0ZUNvbnRhaW5lciBsZXQtbWVzc2FnZT1cIm1lc3NhZ2VcIj5cbiAgPG5nLXRlbXBsYXRlXG4gICAgI2RlZmF1bHRNZXNzYWdlVGVtcGxhdGVcbiAgICBsZXQtbWVzc2FnZUlucHV0PVwibWVzc2FnZVwiXG4gICAgbGV0LWlzTGFzdFNlbnRNZXNzYWdlPVwiaXNMYXN0U2VudE1lc3NhZ2VcIlxuICAgIGxldC1lbmFibGVkTWVzc2FnZUFjdGlvbnM9XCJlbmFibGVkTWVzc2FnZUFjdGlvbnNcIlxuICAgIGxldC1tb2RlPVwibW9kZVwiXG4gICAgbGV0LWlzSGlnaGxpZ2h0ZWQ9XCJpc0hpZ2hsaWdodGVkXCJcbiAgPlxuICAgIDxzdHJlYW0tbWVzc2FnZVxuICAgICAgW21lc3NhZ2VdPVwibWVzc2FnZUlucHV0XCJcbiAgICAgIFtpc0xhc3RTZW50TWVzc2FnZV09XCJpc0xhc3RTZW50TWVzc2FnZVwiXG4gICAgICBbZW5hYmxlZE1lc3NhZ2VBY3Rpb25zXT1cImVuYWJsZWRNZXNzYWdlQWN0aW9uc1wiXG4gICAgICBbbW9kZV09XCJtb2RlXCJcbiAgICAgIFtpc0hpZ2hsaWdodGVkXT1cImlzSGlnaGxpZ2h0ZWRcIlxuICAgID48L3N0cmVhbS1tZXNzYWdlPlxuICA8L25nLXRlbXBsYXRlPlxuICA8bmctY29udGFpbmVyXG4gICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgIG1lc3NhZ2VUZW1wbGF0ZSB8fCBkZWZhdWx0TWVzc2FnZVRlbXBsYXRlO1xuICAgICAgY29udGV4dDogZ2V0TWVzc2FnZUNvbnRleHQobWVzc2FnZSlcbiAgICBcIlxuICA+PC9uZy1jb250YWluZXI+XG48L25nLXRlbXBsYXRlPlxuIl19
|