stream-chat-angular 5.0.0-v5.8 → 5.0.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.
Files changed (118) hide show
  1. package/assets/i18n/en.d.ts +1 -0
  2. package/assets/version.d.ts +1 -1
  3. package/esm2020/assets/i18n/en.mjs +3 -2
  4. package/esm2020/assets/version.mjs +2 -2
  5. package/esm2020/lib/attachment-list/attachment-list.component.mjs +3 -3
  6. package/esm2020/lib/attachment-preview-list/attachment-preview-list.component.mjs +3 -3
  7. package/esm2020/lib/attachment.service.mjs +103 -7
  8. package/esm2020/lib/avatar/avatar.component.mjs +3 -9
  9. package/esm2020/lib/avatar-placeholder/avatar-placeholder.component.mjs +3 -11
  10. package/esm2020/lib/channel/channel.component.mjs +5 -6
  11. package/esm2020/lib/channel-header/channel-header.component.mjs +3 -3
  12. package/esm2020/lib/channel-list/channel-list.component.mjs +5 -6
  13. package/esm2020/lib/channel-preview/channel-preview.component.mjs +3 -3
  14. package/esm2020/lib/channel-query.mjs +77 -0
  15. package/esm2020/lib/channel.service.mjs +197 -135
  16. package/esm2020/lib/chat-client.service.mjs +33 -11
  17. package/esm2020/lib/custom-templates.service.mjs +6 -10
  18. package/esm2020/lib/icon/icon.component.mjs +3 -7
  19. package/esm2020/lib/icon-placeholder/icon-placeholder.component.mjs +4 -7
  20. package/esm2020/lib/loading-indicator/loading-indicator.component.mjs +6 -22
  21. package/esm2020/lib/loading-indicator-placeholder/loading-indicator-placeholder.component.mjs +5 -23
  22. package/esm2020/lib/message/message.component.mjs +129 -16
  23. package/esm2020/lib/message-actions-box/message-actions-box.component.mjs +39 -14
  24. package/esm2020/lib/message-actions.service.mjs +66 -2
  25. package/esm2020/lib/message-input/autocomplete-textarea/autocomplete-textarea.component.mjs +16 -6
  26. package/esm2020/lib/message-input/message-input.component.mjs +76 -74
  27. package/esm2020/lib/message-input/textarea/textarea.component.mjs +13 -1
  28. package/esm2020/lib/message-list/message-list.component.mjs +83 -15
  29. package/esm2020/lib/message-reactions/message-reactions.component.mjs +7 -78
  30. package/esm2020/lib/message-reactions-selector/message-reactions-selector.component.mjs +61 -0
  31. package/esm2020/lib/message-reactions.service.mjs +3 -4
  32. package/esm2020/lib/modal/modal.component.mjs +1 -1
  33. package/esm2020/lib/stream-chat.module.mjs +8 -8
  34. package/esm2020/lib/thread/thread.component.mjs +3 -3
  35. package/esm2020/lib/types.mjs +1 -1
  36. package/esm2020/lib/voice-recording/voice-recording.component.mjs +3 -3
  37. package/esm2020/public-api.mjs +3 -2
  38. package/fesm2015/stream-chat-angular.mjs +2747 -2338
  39. package/fesm2015/stream-chat-angular.mjs.map +1 -1
  40. package/fesm2020/stream-chat-angular.mjs +2687 -2284
  41. package/fesm2020/stream-chat-angular.mjs.map +1 -1
  42. package/lib/attachment.service.d.ts +11 -4
  43. package/lib/avatar/avatar.component.d.ts +1 -5
  44. package/lib/avatar-placeholder/avatar-placeholder.component.d.ts +1 -5
  45. package/lib/channel-query.d.ts +26 -0
  46. package/lib/channel.service.d.ts +86 -57
  47. package/lib/chat-client.service.d.ts +7 -3
  48. package/lib/custom-templates.service.d.ts +8 -12
  49. package/lib/icon/icon.component.d.ts +2 -6
  50. package/lib/icon-placeholder/icon-placeholder.component.d.ts +1 -5
  51. package/lib/loading-indicator/loading-indicator.component.d.ts +1 -10
  52. package/lib/loading-indicator-placeholder/loading-indicator-placeholder.component.d.ts +1 -11
  53. package/lib/message/message.component.d.ts +31 -9
  54. package/lib/message-actions-box/message-actions-box.component.d.ts +11 -6
  55. package/lib/message-actions.service.d.ts +3 -2
  56. package/lib/message-input/autocomplete-textarea/autocomplete-textarea.component.d.ts +1 -0
  57. package/lib/message-input/message-input.component.d.ts +19 -7
  58. package/lib/message-input/textarea/textarea.component.d.ts +1 -0
  59. package/lib/message-list/message-list.component.d.ts +11 -6
  60. package/lib/message-reactions/message-reactions.component.d.ts +6 -30
  61. package/lib/message-reactions-selector/message-reactions-selector.component.d.ts +35 -0
  62. package/lib/stream-chat.module.d.ts +5 -5
  63. package/lib/types.d.ts +28 -29
  64. package/package.json +5 -5
  65. package/public-api.d.ts +2 -1
  66. package/src/assets/assets/EmojiOneColor.woff2 +0 -0
  67. package/src/assets/assets/NotoColorEmoji-flags.woff2 +0 -0
  68. package/src/assets/assets/Poweredby_100px-White_VertText.png +0 -0
  69. package/src/assets/assets/icons/stream-chat-icons.eot +0 -0
  70. package/src/assets/assets/icons/stream-chat-icons.svg +46 -0
  71. package/src/assets/assets/icons/stream-chat-icons.ttf +0 -0
  72. package/src/assets/assets/icons/stream-chat-icons.woff +0 -0
  73. package/src/assets/assets/icons/stream-chat-icons.woff2 +0 -0
  74. package/src/assets/assets/str-chat__reaction-list-sprite@1x.png +0 -0
  75. package/src/assets/assets/str-chat__reaction-list-sprite@2x.png +0 -0
  76. package/src/assets/assets/str-chat__reaction-list-sprite@3x.png +0 -0
  77. package/src/assets/i18n/en.ts +2 -1
  78. package/src/assets/styles/css/index.css +2 -2
  79. package/src/assets/styles/css/index.layout.css +2 -2
  80. package/src/assets/styles/scss/AttachmentList/AttachmentList-layout.scss +74 -12
  81. package/src/assets/styles/scss/AttachmentList/AttachmentList-theme.scss +52 -0
  82. package/src/assets/styles/scss/AttachmentPreviewList/AttachmentPreviewList-layout.scss +24 -9
  83. package/src/assets/styles/scss/AttachmentPreviewList/AttachmentPreviewList-theme.scss +29 -0
  84. package/src/assets/styles/scss/AudioRecorder/AudioRecorder-layout.scss +89 -0
  85. package/src/assets/styles/scss/AudioRecorder/AudioRecorder-theme.scss +51 -0
  86. package/src/assets/styles/scss/Autocomplete/Autocomplete-layout.scss +1 -1
  87. package/src/assets/styles/scss/Avatar/Avatar-layout.scss +46 -0
  88. package/src/assets/styles/scss/Channel/Channel-layout.scss +1 -0
  89. package/src/assets/styles/scss/Channel/Channel-theme.scss +1 -0
  90. package/src/assets/styles/scss/ChannelList/ChannelList-layout.scss +2 -2
  91. package/src/assets/styles/scss/ChannelList/ChannelList-theme.scss +4 -2
  92. package/src/assets/styles/scss/ChannelPreview/ChannelPreview-layout.scss +2 -0
  93. package/src/assets/styles/scss/ChannelPreview/ChannelPreview-theme.scss +1 -0
  94. package/src/assets/styles/scss/EditMessageForm/EditMessageForm-theme.scss +9 -9
  95. package/src/assets/styles/scss/Icon/Icon-layout.scss +87 -0
  96. package/src/assets/styles/scss/Icon/Icon-theme.scss +13 -0
  97. package/src/assets/styles/scss/ImageCarousel/ImageCarousel-layout.scss +1 -0
  98. package/src/assets/styles/scss/ImageCarousel/ImageCarousel-theme.scss +1 -0
  99. package/src/assets/styles/scss/LoadingIndicator/LoadingIndicator-layout.scss +10 -1
  100. package/src/assets/styles/scss/LoadingIndicator/LoadingIndicator-theme.scss +6 -4
  101. package/src/assets/styles/scss/Message/Message-layout.scss +45 -6
  102. package/src/assets/styles/scss/Message/Message-theme.scss +6 -0
  103. package/src/assets/styles/scss/MessageInput/MessageInput-layout.scss +33 -1
  104. package/src/assets/styles/scss/MessageInput/MessageInput-theme.scss +65 -2
  105. package/src/assets/styles/scss/MessageList/MessageList-theme.scss +2 -0
  106. package/src/assets/styles/scss/MessageReactions/MessageReactionsSelector-layout.scss +18 -0
  107. package/src/assets/styles/scss/MessageReactions/MessageReactionsSelector-theme.scss +5 -0
  108. package/src/assets/styles/scss/Modal/Modal-layout.scss +1 -0
  109. package/src/assets/styles/scss/Modal/Modal-theme.scss +6 -0
  110. package/src/assets/styles/scss/_base.scss +4 -2
  111. package/src/assets/styles/scss/_emoji-replacement.scss +4 -2
  112. package/src/assets/styles/scss/_icons.scss +24 -2
  113. package/src/assets/styles/scss/_variables.scss +2 -0
  114. package/src/assets/styles/scss/index.layout.scss +2 -0
  115. package/src/assets/styles/scss/index.scss +2 -0
  116. package/src/assets/version.ts +1 -1
  117. package/esm2020/lib/edit-message-form/edit-message-form.component.mjs +0 -83
  118. package/lib/edit-message-form/edit-message-form.component.d.ts +0 -31
@@ -3,7 +3,8 @@ import * as i0 from "@angular/core";
3
3
  import * as i1 from "../custom-templates.service";
4
4
  import * as i2 from "../message-actions.service";
5
5
  import * as i3 from "@angular/common";
6
- import * as i4 from "@ngx-translate/core";
6
+ import * as i4 from "../message-reactions-selector/message-reactions-selector.component";
7
+ import * as i5 from "@ngx-translate/core";
7
8
  /**
8
9
  * The `MessageActionsBox` component displays a list of message actions (i.e edit), that can be opened or closed. You can find the [list of the supported actions](../concepts/message-interactions.mdx) in the message interaction guide.
9
10
  */
@@ -64,35 +65,59 @@ export class MessageActionsBoxComponent {
64
65
  ? actionLabelOrTranslationKey
65
66
  : actionLabelOrTranslationKey(this.message);
66
67
  }
67
- getMessageActionTemplateContext(item) {
68
+ getReactionSelectorTemplateContext() {
68
69
  return {
69
- actionHandler: item.actionHandler,
70
- isMine: this.isMine,
71
- actionName: item.actionName,
72
- message: this.message,
73
- actionLabelOrTranslationKey: item.actionLabelOrTranslationKey,
70
+ messageId: this.message?.id,
71
+ ownReactions: this.message?.own_reactions || [],
74
72
  };
75
73
  }
74
+ getMessageActionTemplateContext(item) {
75
+ if (this.isReactAction(item)) {
76
+ return {};
77
+ }
78
+ else {
79
+ return {
80
+ actionHandler: item.actionHandler,
81
+ actionHandlerExtraParams: {
82
+ isMine: this.isMine,
83
+ messageTextHtmlElement: this.messageTextHtmlElement,
84
+ },
85
+ actionName: item.actionName,
86
+ message: this.message,
87
+ actionLabelOrTranslationKey: item.actionLabelOrTranslationKey,
88
+ };
89
+ }
90
+ }
76
91
  trackByActionName(_, item) {
77
92
  return item.actionName;
78
93
  }
94
+ isReactAction(item) {
95
+ return item.actionName === 'react';
96
+ }
79
97
  setVisibleActions() {
80
- this.visibleMessageActionItems = [
81
- ...this.messageActionItems,
82
- ...this.customActions,
83
- ].filter((item) => item.isVisible(this.enabledActions, this.isMine, this.message));
98
+ if (!this.message) {
99
+ this.visibleMessageActionItems = [];
100
+ }
101
+ else {
102
+ this.visibleMessageActionItems = [
103
+ ...this.messageActionItems,
104
+ ...this.customActions,
105
+ ].filter((item) => item.isVisible(this.enabledActions, this.isMine, this.message));
106
+ }
84
107
  }
85
108
  }
86
109
  MessageActionsBoxComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: MessageActionsBoxComponent, deps: [{ token: i1.CustomTemplatesService }, { token: i2.MessageActionsService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
87
- MessageActionsBoxComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.4", type: MessageActionsBoxComponent, selector: "stream-message-actions-box", inputs: { isMine: "isMine", message: "message", enabledActions: "enabledActions" }, 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", dependencies: [{ kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: i4.TranslatePipe, name: "translate" }] });
110
+ MessageActionsBoxComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.4", type: MessageActionsBoxComponent, selector: "stream-message-actions-box", inputs: { isMine: "isMine", message: "message", messageTextHtmlElement: "messageTextHtmlElement", enabledActions: "enabledActions" }, usesOnChanges: true, ngImport: i0, template: "<div\n #actionBox\n data-testid=\"action-box\"\n class=\"\n str-chat__message-actions-box\n str-chat__message-actions-box-angular\n str-chat__message-actions-box--open\n \"\n>\n <ul class=\"str-chat__message-actions-list\">\n <ng-container\n *ngFor=\"let item of visibleMessageActionItems; trackBy: trackByActionName\"\n >\n <ng-container [ngSwitch]=\"item.actionName\">\n <ng-container *ngSwitchCase=\"'react'\">\n <ng-container\n *ngTemplateOutlet=\"\n (customTemplatesService.messageReactionsSelectorTemplate$\n | async) || defaultReactionSelector;\n context: getReactionSelectorTemplateContext()\n \"\n ></ng-container>\n </ng-container>\n <ng-container *ngSwitchDefault>\n <ng-container\n *ngTemplateOutlet=\"\n (customTemplatesService.messageActionsBoxItemTemplate$ | async) ||\n defaultMessageActionItem;\n context: getMessageActionTemplateContext(item)\n \"\n ></ng-container>\n </ng-container>\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 let-actionHandlerExtraParams=\"actionHandlerExtraParams\"\n>\n <button\n class=\"str-chat__message-actions-list-item-button\"\n [attr.data-testid]=\"actionName + '-action'\"\n (click)=\"actionHandler(message, actionHandlerExtraParams)\"\n >\n <li class=\"str-chat__message-actions-list-item\">\n {{ getActionLabel(actionLabelOrTranslationKey) | translate }}\n </li>\n </button>\n</ng-template>\n\n<ng-template\n #defaultReactionSelector\n let-messageId=\"messageId\"\n let-ownReactions=\"ownReactions\"\n>\n <stream-message-reactions-selector\n [messageId]=\"message?.id\"\n [ownReactions]=\"message?.own_reactions || []\"\n ></stream-message-reactions-selector>\n</ng-template>\n", dependencies: [{ kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i3.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i3.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i3.NgSwitchDefault, selector: "[ngSwitchDefault]" }, { kind: "component", type: i4.MessageReactionsSelectorComponent, selector: "stream-message-reactions-selector", inputs: ["ownReactions", "messageId"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: i5.TranslatePipe, name: "translate" }] });
88
111
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: MessageActionsBoxComponent, decorators: [{
89
112
  type: Component,
90
- args: [{ selector: 'stream-message-actions-box', 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" }]
113
+ args: [{ selector: 'stream-message-actions-box', template: "<div\n #actionBox\n data-testid=\"action-box\"\n class=\"\n str-chat__message-actions-box\n str-chat__message-actions-box-angular\n str-chat__message-actions-box--open\n \"\n>\n <ul class=\"str-chat__message-actions-list\">\n <ng-container\n *ngFor=\"let item of visibleMessageActionItems; trackBy: trackByActionName\"\n >\n <ng-container [ngSwitch]=\"item.actionName\">\n <ng-container *ngSwitchCase=\"'react'\">\n <ng-container\n *ngTemplateOutlet=\"\n (customTemplatesService.messageReactionsSelectorTemplate$\n | async) || defaultReactionSelector;\n context: getReactionSelectorTemplateContext()\n \"\n ></ng-container>\n </ng-container>\n <ng-container *ngSwitchDefault>\n <ng-container\n *ngTemplateOutlet=\"\n (customTemplatesService.messageActionsBoxItemTemplate$ | async) ||\n defaultMessageActionItem;\n context: getMessageActionTemplateContext(item)\n \"\n ></ng-container>\n </ng-container>\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 let-actionHandlerExtraParams=\"actionHandlerExtraParams\"\n>\n <button\n class=\"str-chat__message-actions-list-item-button\"\n [attr.data-testid]=\"actionName + '-action'\"\n (click)=\"actionHandler(message, actionHandlerExtraParams)\"\n >\n <li class=\"str-chat__message-actions-list-item\">\n {{ getActionLabel(actionLabelOrTranslationKey) | translate }}\n </li>\n </button>\n</ng-template>\n\n<ng-template\n #defaultReactionSelector\n let-messageId=\"messageId\"\n let-ownReactions=\"ownReactions\"\n>\n <stream-message-reactions-selector\n [messageId]=\"message?.id\"\n [ownReactions]=\"message?.own_reactions || []\"\n ></stream-message-reactions-selector>\n</ng-template>\n" }]
91
114
  }], ctorParameters: function () { return [{ type: i1.CustomTemplatesService }, { type: i2.MessageActionsService }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { isMine: [{
92
115
  type: Input
93
116
  }], message: [{
94
117
  type: Input
118
+ }], messageTextHtmlElement: [{
119
+ type: Input
95
120
  }], enabledActions: [{
96
121
  type: Input
97
122
  }] } });
98
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVzc2FnZS1hY3Rpb25zLWJveC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zdHJlYW0tY2hhdC1hbmd1bGFyL3NyYy9saWIvbWVzc2FnZS1hY3Rpb25zLWJveC9tZXNzYWdlLWFjdGlvbnMtYm94LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3N0cmVhbS1jaGF0LWFuZ3VsYXIvc3JjL2xpYi9tZXNzYWdlLWFjdGlvbnMtYm94L21lc3NhZ2UtYWN0aW9ucy1ib3guY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUdMLFNBQVMsRUFDVCxLQUFLLEdBTU4sTUFBTSxlQUFlLENBQUM7Ozs7OztBQVd2Qjs7R0FFRztBQU1ILE1BQU0sT0FBTywwQkFBMEI7SUEwQnJDLFlBQ2tCLHNCQUE4QyxFQUN0RCxxQkFBNEMsRUFDNUMsS0FBd0I7UUFGaEIsMkJBQXNCLEdBQXRCLHNCQUFzQixDQUF3QjtRQUN0RCwwQkFBcUIsR0FBckIscUJBQXFCLENBQXVCO1FBQzVDLFVBQUssR0FBTCxLQUFLLENBQW1CO1FBMUJsQzs7V0FFRztRQUNNLFdBQU0sR0FBRyxLQUFLLENBQUM7UUFLeEI7O1dBRUc7UUFDTSxtQkFBYyxHQUFhLEVBQUUsQ0FBQztRQUt2Qyw4QkFBeUIsR0FDdkIsRUFBRSxDQUFDO1FBQ0wsb0JBQWUsR0FBRyxLQUFLLENBQUM7UUFDeEIsa0JBQWEsR0FBOEIsRUFBRSxDQUFDO1FBRXRDLGtCQUFhLEdBQW1CLEVBQUUsQ0FBQztRQUNuQyxpQkFBWSxHQUFHLEtBQUssQ0FBQztRQU0zQixJQUFJLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDLGNBQWMsQ0FBQztJQUN0RSxDQUFDO0lBRUQsUUFBUTtRQUNOLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUNyQixJQUFJLENBQUMscUJBQXFCLENBQUMs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cnQge1xuICBBZnRlclZpZXdJbml0LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBJbnB1dCxcbiAgT25DaGFuZ2VzLFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgU2ltcGxlQ2hhbmdlcyxcbiAgVGVtcGxhdGVSZWYsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBDdXN0b21UZW1wbGF0ZXNTZXJ2aWNlIH0gZnJvbSAnLi4vY3VzdG9tLXRlbXBsYXRlcy5zZXJ2aWNlJztcbmltcG9ydCB7XG4gIEN1c3RvbU1lc3NhZ2VBY3Rpb25JdGVtLFxuICBNZXNzYWdlQWN0aW9uQm94SXRlbUNvbnRleHQsXG4gIE1lc3NhZ2VBY3Rpb25JdGVtLFxuICBNZXNzYWdlSW5wdXRDb250ZXh0LFxuICBTdHJlYW1NZXNzYWdlLFxufSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgeyBNZXNzYWdlQWN0aW9uc1NlcnZpY2UgfSBmcm9tICcuLi9tZXNzYWdlLWFjdGlvbnMuc2VydmljZSc7XG4vKipcbiAqIFRoZSBgTWVzc2FnZUFjdGlvbnNCb3hgIGNvbXBvbmVudCBkaXNwbGF5cyBhIGxpc3Qgb2YgbWVzc2FnZSBhY3Rpb25zIChpLmUgZWRpdCksIHRoYXQgY2FuIGJlIG9wZW5lZCBvciBjbG9zZWQuIFlvdSBjYW4gZmluZCB0aGUgW2xpc3Qgb2YgdGhlIHN1cHBvcnRlZCBhY3Rpb25zXSguLi9jb25jZXB0cy9tZXNzYWdlLWludGVyYWN0aW9ucy5tZHgpIGluIHRoZSBtZXNzYWdlIGludGVyYWN0aW9uIGd1aWRlLlxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdzdHJlYW0tbWVzc2FnZS1hY3Rpb25zLWJveCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9tZXNzYWdlLWFjdGlvbnMtYm94LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVzOiBbXSxcbn0pXG5leHBvcnQgY2xhc3MgTWVzc2FnZUFjdGlvbnNCb3hDb21wb25lbnRcbiAgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcywgT25EZXN0cm95LCBBZnRlclZpZXdJbml0XG57XG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgaWYgdGhlIG1lc3NhZ2UgYWN0aW9ucyBhcmUgYmVsb25naW5nIHRvIGEgbWVzc2FnZSB0aGF0IHdhcyBzZW50IGJ5IHRoZSBjdXJyZW50IHVzZXIgb3Igbm90LlxuICAgKi9cbiAgQElucHV0KCkgaXNNaW5lID0gZmFsc2U7XG4gIC8qKlxuICAgKiBUaGUgbWVzc2FnZSB0aGUgYWN0aW9ucyB3aWxsIGJlIGV4ZWN1dGVkIG9uXG4gICAqL1xuICBASW5wdXQoKSBtZXNzYWdlOiBTdHJlYW1NZXNzYWdlIHwgdW5kZWZpbmVkO1xuICAvKipcbiAgICogVGhlIGxpc3Qgb2YgW2NoYW5uZWwgY2FwYWJpbGl0aWVzXShodHRwczovL2dldHN0cmVhbS5pby9jaGF0L2RvY3MvamF2YXNjcmlwdC9jaGFubmVsX2NhcGFiaWxpdGllcy8/bGFuZ3VhZ2U9amF2YXNjcmlwdCkgdGhhdCBhcmUgZW5hYmxlZCBmb3IgdGhlIGN1cnJlbnQgdXNlciwgdGhlIGxpc3Qgb2YgW3N1cHBvcnRlZCBpbnRlcmFjdGlvbnNdKC4uL2NvbmNlcHRzL21lc3NhZ2UtaW50ZXJhY3Rpb25zLm1keCkgY2FuIGJlIGZvdW5kIGluIG91ciBtZXNzYWdlIGludGVyYWN0aW9uIGd1aWRlLiBVbmF0aG9yaXplZCBhY3Rpb25zIHdvbid0IGJlIGRpc3BsYXllZCBvbiB0aGUgVUkuXG4gICAqL1xuICBASW5wdXQoKSBlbmFibGVkQWN0aW9uczogc3RyaW5nW10gPSBbXTtcbiAgbWVzc2FnZUlucHV0VGVtcGxhdGU6IFRlbXBsYXRlUmVmPE1lc3NhZ2VJbnB1dENvbnRleHQ+IHwgdW5kZWZpbmVkO1xuICBtZXNzYWdlQWN0aW9uSXRlbVRlbXBsYXRlOlxuICAgIHwgVGVtcGxhdGVSZWY8TWVzc2FnZUFjdGlvbkJveEl0ZW1Db250ZXh0PlxuICAgIHwgdW5kZWZpbmVkO1xuICB2aXNpYmxlTWVzc2FnZUFjdGlvbkl0ZW1zOiAoTWVzc2FnZUFjdGlvbkl0ZW0gfCBDdXN0b21NZXNzYWdlQWN0aW9uSXRlbSlbXSA9XG4gICAgW107XG4gIGlzRWRpdE1vZGFsT3BlbiA9IGZhbHNlO1xuICBjdXN0b21BY3Rpb25zOiBDdXN0b21NZXNzYWdlQWN0aW9uSXRlbVtdID0gW107XG4gIHByaXZhdGUgcmVhZG9ubHkgbWVzc2FnZUFjdGlvbkl0ZW1zOiBNZXNzYWdlQWN0aW9uSXRlbVtdO1xuICBwcml2YXRlIHN1YnNjcmlwdGlvbnM6IFN1YnNjcmlwdGlvbltdID0gW107XG4gIHByaXZhdGUgaXNWaWV3SW5pdGVkID0gZmFsc2U7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyByZWFkb25seSBjdXN0b21UZW1wbGF0ZXNTZXJ2aWNlOiBDdXN0b21UZW1wbGF0ZXNTZXJ2aWNlLFxuICAgIHByaXZhdGUgbWVzc2FnZUFjdGlvbnNTZXJ2aWNlOiBNZXNzYWdlQWN0aW9uc1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBjZFJlZjogQ2hhbmdlRGV0ZWN0b3JSZWZcbiAgKSB7XG4gICAgdGhpcy5tZXNzYWdlQWN0aW9uSXRlbXMgPSB0aGlzLm1lc3NhZ2VBY3Rpb25zU2VydmljZS5kZWZhdWx0QWN0aW9ucztcbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxuICAgICAgdGhpcy5tZXNzYWdlQWN0aW9uc1NlcnZpY2UuY3VzdG9tQWN0aW9ucyQuc3Vic2NyaWJlKChhY3Rpb25zKSA9PiB7XG4gICAgICAgIHRoaXMuY3VzdG9tQWN0aW9ucyA9IGFjdGlvbnM7XG4gICAgICAgIHRoaXMuc2V0VmlzaWJsZUFjdGlvbnMoKTtcbiAgICAgICAgaWYgKHRoaXMuaXNWaWV3SW5pdGVkKSB7XG4gICAgICAgICAgdGhpcy5jZFJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgKTtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcbiAgICAgIHRoaXMubWVzc2FnZUFjdGlvbnNTZXJ2aWNlLm1lc3NhZ2VUb0VkaXQkLnN1YnNjcmliZSgobSkgPT4ge1xuICAgICAgICBsZXQgaXNFZGl0TW9kYWxPcGVuID0gZmFsc2U7XG4gICAgICAgIGlmIChtICYmIG0uaWQgPT09IHRoaXMubWVzc2FnZT8uaWQpIHtcbiAgICAgICAgICBpc0VkaXRNb2RhbE9wZW4gPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc0VkaXRNb2RhbE9wZW4gIT09IHRoaXMuaXNFZGl0TW9kYWxPcGVuKSB7XG4gICAgICAgICAgdGhpcy5pc0VkaXRNb2RhbE9wZW4gPSBpc0VkaXRNb2RhbE9wZW47XG4gICAgICAgICAgaWYgKHRoaXMuaXNWaWV3SW5pdGVkKSB7XG4gICAgICAgICAgICB0aGlzLmNkUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBpZiAoY2hhbmdlcy5pc01pbmUgfHwgY2hhbmdlcy5lbmFibGVkQWN0aW9ucyB8fCBjaGFuZ2VzLm1lc3NhZ2UpIHtcbiAgICAgIHRoaXMuc2V0VmlzaWJsZUFjdGlvbnMoKTtcbiAgICB9XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgdGhpcy5pc1ZpZXdJbml0ZWQgPSB0cnVlO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLmZvckVhY2goKHMpID0+IHMudW5zdWJzY3JpYmUoKSk7XG4gIH1cblxuICBnZXRBY3Rpb25MYWJlbChcbiAgICBhY3Rpb25MYWJlbE9yVHJhbnNsYXRpb25LZXk6ICgobWVzc2FnZTogU3RyZWFtTWVzc2FnZSkgPT4gc3RyaW5nKSB8IHN0cmluZ1xuICApIHtcbiAgICByZXR1cm4gdHlwZW9mIGFjdGlvbkxhYmVsT3JUcmFuc2xhdGlvbktleSA9PT0gJ3N0cmluZydcbiAgICAgID8gYWN0aW9uTGFiZWxPclRyYW5zbGF0aW9uS2V5XG4gICAgICA6IGFjdGlvbkxhYmVsT3JUcmFuc2xhdGlvbktleSh0aGlzLm1lc3NhZ2UhKTtcbiAgfVxuXG4gIGdldE1lc3NhZ2VBY3Rpb25UZW1wbGF0ZUNvbnRleHQoXG4gICAgaXRlbTogTWVzc2FnZUFjdGlvbkl0ZW0gfCBDdXN0b21NZXNzYWdlQWN0aW9uSXRlbVxuICApOiBNZXNzYWdlQWN0aW9uQm94SXRlbUNvbnRleHQge1xuICAgIHJldHVybiB7XG4gICAgICBhY3Rpb25IYW5kbGVyOiBpdGVtLmFjdGlvbkhhbmRsZXIsXG4gICAgICBpc01pbmU6IHRoaXMuaXNNaW5lLFxuICAgICAgYWN0aW9uTmFtZTogaXRlbS5hY3Rpb25OYW1lLFxuICAgICAgbWVzc2FnZTogdGhpcy5tZXNzYWdlISxcbiAgICAgIGFjdGlvbkxhYmVsT3JUcmFuc2xhdGlvbktleTogaXRlbS5hY3Rpb25MYWJlbE9yVHJhbnNsYXRpb25LZXksXG4gICAgfTtcbiAgfVxuXG4gIHRyYWNrQnlBY3Rpb25OYW1lKFxuICAgIF86IG51bWJlcixcbiAgICBpdGVtOiBNZXNzYWdlQWN0aW9uSXRlbSB8IEN1c3RvbU1lc3NhZ2VBY3Rpb25JdGVtXG4gICkge1xuICAgIHJldHVybiBpdGVtLmFjdGlvbk5hbWU7XG4gIH1cblxuICBwcml2YXRlIHNldFZpc2libGVBY3Rpb25zKCkge1xuICAgIHRoaXMudmlzaWJsZU1lc3NhZ2VBY3Rpb25JdGVtcyA9IFtcbiAgICAgIC4uLnRoaXMubWVzc2FnZUFjdGlvbkl0ZW1zLFxuICAgICAgLi4udGhpcy5jdXN0b21BY3Rpb25zLFxuICAgIF0uZmlsdGVyKChpdGVtKSA9PlxuICAgICAgaXRlbS5pc1Zpc2libGUodGhpcy5lbmFibGVkQWN0aW9ucywgdGhpcy5pc01pbmUsIHRoaXMubWVzc2FnZSEpXG4gICAgKTtcbiAgfVxufVxuIiwiPGRpdlxuICAjYWN0aW9uQm94XG4gIGRhdGEtdGVzdGlkPVwiYWN0aW9uLWJveFwiXG4gIGNsYXNzPVwic3RyLWNoYXRfX21lc3NhZ2UtYWN0aW9ucy1ib3ggc3RyLWNoYXRfX21lc3NhZ2UtYWN0aW9ucy1ib3gtYW5ndWxhclwiXG4gIFtjbGFzcy5zdHItY2hhdF9fbWVzc2FnZS1hY3Rpb25zLWJveC0tb3Blbl09XCJ0cnVlXCJcbj5cbiAgPHVsIGNsYXNzPVwic3RyLWNoYXRfX21lc3NhZ2UtYWN0aW9ucy1saXN0XCI+XG4gICAgPG5nLWNvbnRhaW5lclxuICAgICAgKm5nRm9yPVwibGV0IGl0ZW0gb2YgdmlzaWJsZU1lc3NhZ2VBY3Rpb25JdGVtczsgdHJhY2tCeTogdHJhY2tCeUFjdGlvbk5hbWVcIlxuICAgID5cbiAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgICAoY3VzdG9tVGVtcGxhdGVzU2VydmljZS5tZXNzYWdlQWN0aW9uc0JveEl0ZW1UZW1wbGF0ZSQgfCBhc3luYykgfHxcbiAgICAgICAgICAgIGRlZmF1bHRNZXNzYWdlQWN0aW9uSXRlbTtcbiAgICAgICAgICBjb250ZXh0OiBnZXRNZXNzYWdlQWN0aW9uVGVtcGxhdGVDb250ZXh0KGl0ZW0pXG4gICAgICAgIFwiXG4gICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgPC9uZy1jb250YWluZXI+XG4gIDwvdWw+XG48L2Rpdj5cblxuPG5nLXRlbXBsYXRlXG4gICNkZWZhdWx0TWVzc2FnZUFjdGlvbkl0ZW1cbiAgbGV0LWFjdGlvbk5hbWU9XCJhY3Rpb25OYW1lXCJcbiAgbGV0LWFjdGlvbkhhbmRsZXI9XCJhY3Rpb25IYW5kbGVyXCJcbiAgbGV0LWFjdGlvbkxhYmVsT3JUcmFuc2xhdGlvbktleT1cImFjdGlvbkxhYmVsT3JUcmFuc2xhdGlvbktleVwiXG4+XG4gIDxidXR0b25cbiAgICBjbGFzcz1cInN0ci1jaGF0X19tZXNzYWdlLWFjdGlvbnMtbGlzdC1pdGVtLWJ1dHRvblwiXG4gICAgW2F0dHIuZGF0YS10ZXN0aWRdPVwiYWN0aW9uTmFtZSArICctYWN0aW9uJ1wiXG4gICAgKGNsaWNrKT1cImFjdGlvbkhhbmRsZXIobWVzc2FnZSwgaXNNaW5lKVwiXG4gID5cbiAgICA8bGkgY2xhc3M9XCJzdHItY2hhdF9fbWVzc2FnZS1hY3Rpb25zLWxpc3QtaXRlbVwiPlxuICAgICAge3sgZ2V0QWN0aW9uTGFiZWwoYWN0aW9uTGFiZWxPclRyYW5zbGF0aW9uS2V5KSB8IHRyYW5zbGF0ZSB9fVxuICAgIDwvbGk+XG4gIDwvYnV0dG9uPlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
123
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVzc2FnZS1hY3Rpb25zLWJveC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zdHJlYW0tY2hhdC1hbmd1bGFyL3NyYy9saWIvbWVzc2FnZS1hY3Rpb25zLWJveC9tZXNzYWdlLWFjdGlvbnMtYm94LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3N0cmVhbS1jaGF0LWFuZ3VsYXIvc3JjL2xpYi9tZXNzYWdlLWFjdGlvbnMtYm94L21lc3NhZ2UtYWN0aW9ucy1ib3guY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUdMLFNBQVMsRUFDVCxLQUFLLEdBTU4sTUFBTSxlQUFlLENBQUM7Ozs7Ozs7QUFZdkI7O0dBRUc7QUFNSCxNQUFNLE9BQU8sMEJBQTBCO0lBbUNyQyxZQUNrQixzQkFBOEMsRUFDdEQscUJBQTRDLEVBQzVDLEtBQXdCO1FBRmhCLDJCQUFzQixHQUF0QixzQkFBc0IsQ0FBd0I7UUFDdEQsMEJBQXFCLEdBQXJCLHFCQUFxQixDQUF1QjtRQUM1QyxVQUFLLEdBQUwsS0FBSyxDQUFtQjtRQW5DbEM7O1dBRUc7UUFDTSxXQUFNLEdBQUcsS0FBSyxDQUFDO1FBU3hCOztXQUVHO1FBQ00sbUJBQWMsR0FBYSxFQUFFLENBQUM7UUFJdkMsOEJBQXlCLEdBSW5CLEVBQUUsQ0FBQztRQUNULG9CQUFlLEdBQUcsS0FBSyxDQUFDO1FBQ3hCLGtCQUFhLEdBQThCLEVBQUUsQ0FBQztRQUt0QyxrQkFBYSxHQUFtQixFQUFFLENBQUM7UUFDbkMsaUJBQVksR0FBRyxLQUFLLENBQUM7UUFNM0IsSUFBSSxDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxjQUFjLENBQUM7SUFDdEUsQ0FBQztJQUVELFFBQVE7UUFDTixJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FDckIsSUFBSSxDQUFDLHFCQUFxQixDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRTtZQUM5RCxJQUFJLENBQUMsYUFBYSxHQUFHLE9BQU8sQ0FBQztZQUM3QixJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztZQUN6QixJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUU7Z0JBQ3JCLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxFQUFFLENBQUM7YUFDNUI7UUFDSCxDQUFDLENBQUMsQ0FDSCxDQUFDO1FBQ0YsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQ3JCLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7WUFDeEQsSUFBSSxlQUFlLEdBQUcsS0FBSyxDQUFDO1lBQzVCLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLEtBQUssSUFBSSxDQUFDLE9BQU8sRUFBRSxFQUFFLEVBQUU7Z0JBQ2xDLGVBQWUsR0FBRyxJQUFJLENBQUM7YUFDeEI7WUFDRCxJQUFJLGVBQWUsS0FBSyxJQUFJLENBQUMsZUFBZSxFQUFFO2dCQUM1QyxJQUFJLENBQUMsZUFBZSxHQUFHLGVBQWUsQ0FBQztnQkFDdkMsSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFO29CQUNyQixJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsRUFBRSxDQUFDO2lCQUM1QjthQUNGO1FBQ0gsQ0FBQyxDQUFDLENBQ0gsQ0FBQztJQUNKLENBQUM7SUFFRCxXQUFXLENBQUMsT0FBc0I7UUFDaEMsSUFBSSxPQUFPLENBQUMsTUFBTSxJQUFJLE9BQU8sQ0FBQyxjQUFjLElBQUksT0FBTyxDQUFDLE9BQU8sRUFBRTtZQUMvRCxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztTQUMxQjtJQUNILENBQUM7SUFFRCxlQUFlO1FBQ2IsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUM7SUFDM0IsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7SUFDckQsQ0FBQztJQUVELGNBQWMsQ0FDWiwyQkFBMEU7UUFFMUUsT0FBTyxPQUFPLDJCQUEyQixLQUFLLFFBQVE7WUFDcEQsQ0FBQyxDQUFDLDJCQUEyQjtZQUM3QixDQUFDLENBQUMsMkJBQTJCLENBQUMsSUFBSSxDQUFDLE9BQVEsQ0FBQyxDQUFDO0lBQ2pELENBQUM7SUFFRCxrQ0FBa0M7UUFDaEMsT0FBTztZQUNMLFNBQVMsRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFLEVBQUU7WUFDM0IsWUFBWSxFQUFFLElBQUksQ0FBQyxPQUFPLEVBQUUsYUFBYSxJQUFJLEVBQUU7U0FDaEQsQ0FBQztJQUNKLENBQUM7SUFFRCwrQkFBK0IsQ0FDN0IsSUFHNkI7UUFFN0IsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQzVCLE9BQU8sRUFBaUMsQ0FBQztTQUMxQzthQUFNO1lBQ0wsT0FBTztnQkFDTCxhQUFhLEVBQUUsSUFBSSxDQUFDLGFBQWE7Z0JBQ2pDLHdCQUF3QixFQUFFO29CQUN4QixNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU07b0JBQ25CLHNCQUFzQixFQUFFLElBQUksQ0FBQyxzQkFBc0I7aUJBQ3BEO2dCQUNELFVBQVUsRUFBRSxJQUFJLENBQUMsVUFBVTtnQkFDM0IsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFRO2dCQUN0QiwyQkFBMkIsRUFBRSxJQUFJLENBQUMsMkJBQTJCO2FBQzlELENBQUM7U0FDSDtJQUNILENBQUM7SUFFRCxpQkFBaUIsQ0FDZixDQUFTLEVBQ1QsSUFHNkI7UUFFN0IsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDO0lBQ3pCLENBQUM7SUFFTyxhQUFhLENBQ25CLElBRzZCO1FBRTdCLE9BQU8sSUFBSSxDQUFDLFVBQVUsS0FBSyxPQUFPLENBQUM7SUFDckMsQ0FBQztJQUVPLGlCQUFpQjtRQUN2QixJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRTtZQUNqQixJQUFJLENBQUMseUJBQXlCLEdBQUcsRUFBRSxDQUFDO1NBQ3JDO2FBQU07WUFDTCxJQUFJLENBQUMseUJBQXlCLEdBQUc7Z0JBQy9CLEdBQUcsSUFBSSxDQUFDLGtCQUFrQjtnQkFDMUIsR0FBRyxJQUFJLENBQUMsYUFBYTthQUN0QixDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQ2hCLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxPQUFRLENBQUMsQ0FDaEUsQ0FBQztTQUNIO0lBQ0gsQ0FBQzs7dUhBdEpVLDBCQUEwQjsyR0FBMUIsMEJBQTBCLDZOQzlCdkMsdWlFQWlFQTsyRkRuQ2EsMEJBQTBCO2tCQUx0QyxTQUFTOytCQUNFLDRCQUE0QjtpTEFVN0IsTUFBTTtzQkFBZCxLQUFLO2dCQUlHLE9BQU87c0JBQWYsS0FBSztnQkFJRyxzQkFBc0I7c0JBQTlCLEtBQUs7Z0JBSUcsY0FBYztzQkFBdEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEFmdGVyVmlld0luaXQsXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIElucHV0LFxuICBPbkNoYW5nZXMsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBTaW1wbGVDaGFuZ2VzLFxuICBUZW1wbGF0ZVJlZixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEN1c3RvbVRlbXBsYXRlc1NlcnZpY2UgfSBmcm9tICcuLi9jdXN0b20tdGVtcGxhdGVzLnNlcnZpY2UnO1xuaW1wb3J0IHtcbiAgQ3VzdG9tTWVzc2FnZUFjdGlvbkl0ZW0sXG4gIE1lc3NhZ2VBY3Rpb25Cb3hJdGVtQ29udGV4dCxcbiAgTWVzc2FnZUFjdGlvbkl0ZW0sXG4gIE1lc3NhZ2VSZWFjdGlvbkFjdGlvbkl0ZW0sXG4gIE1lc3NhZ2VSZWFjdGlvbnNTZWxlY3RvckNvbnRleHQsXG4gIFN0cmVhbU1lc3NhZ2UsXG59IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7IE1lc3NhZ2VBY3Rpb25zU2VydmljZSB9IGZyb20gJy4uL21lc3NhZ2UtYWN0aW9ucy5zZXJ2aWNlJztcbi8qKlxuICogVGhlIGBNZXNzYWdlQWN0aW9uc0JveGAgY29tcG9uZW50IGRpc3BsYXlzIGEgbGlzdCBvZiBtZXNzYWdlIGFjdGlvbnMgKGkuZSBlZGl0KSwgdGhhdCBjYW4gYmUgb3BlbmVkIG9yIGNsb3NlZC4gWW91IGNhbiBmaW5kIHRoZSBbbGlzdCBvZiB0aGUgc3VwcG9ydGVkIGFjdGlvbnNdKC4uL2NvbmNlcHRzL21lc3NhZ2UtaW50ZXJhY3Rpb25zLm1keCkgaW4gdGhlIG1lc3NhZ2UgaW50ZXJhY3Rpb24gZ3VpZGUuXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3N0cmVhbS1tZXNzYWdlLWFjdGlvbnMtYm94JyxcbiAgdGVtcGxhdGVVcmw6ICcuL21lc3NhZ2UtYWN0aW9ucy1ib3guY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZXM6IFtdLFxufSlcbmV4cG9ydCBjbGFzcyBNZXNzYWdlQWN0aW9uc0JveENvbXBvbmVudFxuICBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3ksIEFmdGVyVmlld0luaXRcbntcbiAgLyoqXG4gICAqIEluZGljYXRlcyBpZiB0aGUgbWVzc2FnZSBhY3Rpb25zIGFyZSBiZWxvbmdpbmcgdG8gYSBtZXNzYWdlIHRoYXQgd2FzIHNlbnQgYnkgdGhlIGN1cnJlbnQgdXNlciBvciBub3QuXG4gICAqL1xuICBASW5wdXQoKSBpc01pbmUgPSBmYWxzZTtcbiAgLyoqXG4gICAqIFRoZSBtZXNzYWdlIHRoZSBhY3Rpb25zIHdpbGwgYmUgZXhlY3V0ZWQgb25cbiAgICovXG4gIEBJbnB1dCgpIG1lc3NhZ2U6IFN0cmVhbU1lc3NhZ2UgfCB1bmRlZmluZWQ7XG4gIC8qKlxuICAgKiBUaGUgSFRNTCBlbGVtZW50IHdoaWNoIGNvbnRhaW5zIHRoZSBtZXNzYWdlIHRleHQsIGl0J3MgdXNlZCBmb3IgdGhlIFwiY29weSBtZXNzYWdlIHRleHRcIiBhY3Rpb25cbiAgICovXG4gIEBJbnB1dCgpIG1lc3NhZ2VUZXh0SHRtbEVsZW1lbnQ6IEhUTUxFbGVtZW50IHwgdW5kZWZpbmVkO1xuICAvKipcbiAgICogVGhlIGxpc3Qgb2YgW2NoYW5uZWwgY2FwYWJpbGl0aWVzXShodHRwczovL2dldHN0cmVhbS5pby9jaGF0L2RvY3MvamF2YXNjcmlwdC9jaGFubmVsX2NhcGFiaWxpdGllcy8/bGFuZ3VhZ2U9amF2YXNjcmlwdCkgdGhhdCBhcmUgZW5hYmxlZCBmb3IgdGhlIGN1cnJlbnQgdXNlciwgdGhlIGxpc3Qgb2YgW3N1cHBvcnRlZCBpbnRlcmFjdGlvbnNdKC4uL2NvbmNlcHRzL21lc3NhZ2UtaW50ZXJhY3Rpb25zLm1keCkgY2FuIGJlIGZvdW5kIGluIG91ciBtZXNzYWdlIGludGVyYWN0aW9uIGd1aWRlLiBVbmF0aG9yaXplZCBhY3Rpb25zIHdvbid0IGJlIGRpc3BsYXllZCBvbiB0aGUgVUkuXG4gICAqL1xuICBASW5wdXQoKSBlbmFibGVkQWN0aW9uczogc3RyaW5nW10gPSBbXTtcbiAgbWVzc2FnZUFjdGlvbkl0ZW1UZW1wbGF0ZTpcbiAgICB8IFRlbXBsYXRlUmVmPE1lc3NhZ2VBY3Rpb25Cb3hJdGVtQ29udGV4dD5cbiAgICB8IHVuZGVmaW5lZDtcbiAgdmlzaWJsZU1lc3NhZ2VBY3Rpb25JdGVtczogKFxuICAgIHwgTWVzc2FnZUFjdGlvbkl0ZW1cbiAgICB8IEN1c3RvbU1lc3NhZ2VBY3Rpb25JdGVtXG4gICAgfCBNZXNzYWdlUmVhY3Rpb25BY3Rpb25JdGVtXG4gIClbXSA9IFtdO1xuICBpc0VkaXRNb2RhbE9wZW4gPSBmYWxzZTtcbiAgY3VzdG9tQWN0aW9uczogQ3VzdG9tTWVzc2FnZUFjdGlvbkl0ZW1bXSA9IFtdO1xuICBwcml2YXRlIHJlYWRvbmx5IG1lc3NhZ2VBY3Rpb25JdGVtczogKFxuICAgIHwgTWVzc2FnZUFjdGlvbkl0ZW1cbiAgICB8IE1lc3NhZ2VSZWFjdGlvbkFjdGlvbkl0ZW1cbiAgKVtdO1xuICBwcml2YXRlIHN1YnNjcmlwdGlvbnM6IFN1YnNjcmlwdGlvbltdID0gW107XG4gIHByaXZhdGUgaXNWaWV3SW5pdGVkID0gZmFsc2U7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyByZWFkb25seSBjdXN0b21UZW1wbGF0ZXNTZXJ2aWNlOiBDdXN0b21UZW1wbGF0ZXNTZXJ2aWNlLFxuICAgIHByaXZhdGUgbWVzc2FnZUFjdGlvbnNTZXJ2aWNlOiBNZXNzYWdlQWN0aW9uc1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBjZFJlZjogQ2hhbmdlRGV0ZWN0b3JSZWZcbiAgKSB7XG4gICAgdGhpcy5tZXNzYWdlQWN0aW9uSXRlbXMgPSB0aGlzLm1lc3NhZ2VBY3Rpb25zU2VydmljZS5kZWZhdWx0QWN0aW9ucztcbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxuICAgICAgdGhpcy5tZXNzYWdlQWN0aW9uc1NlcnZpY2UuY3VzdG9tQWN0aW9ucyQuc3Vic2NyaWJlKChhY3Rpb25zKSA9PiB7XG4gICAgICAgIHRoaXMuY3VzdG9tQWN0aW9ucyA9IGFjdGlvbnM7XG4gICAgICAgIHRoaXMuc2V0VmlzaWJsZUFjdGlvbnMoKTtcbiAgICAgICAgaWYgKHRoaXMuaXNWaWV3SW5pdGVkKSB7XG4gICAgICAgICAgdGhpcy5jZFJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgKTtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcbiAgICAgIHRoaXMubWVzc2FnZUFjdGlvbnNTZXJ2aWNlLm1lc3NhZ2VUb0VkaXQkLnN1YnNjcmliZSgobSkgPT4ge1xuICAgICAgICBsZXQgaXNFZGl0TW9kYWxPcGVuID0gZmFsc2U7XG4gICAgICAgIGlmIChtICYmIG0uaWQgPT09IHRoaXMubWVzc2FnZT8uaWQpIHtcbiAgICAgICAgICBpc0VkaXRNb2RhbE9wZW4gPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc0VkaXRNb2RhbE9wZW4gIT09IHRoaXMuaXNFZGl0TW9kYWxPcGVuKSB7XG4gICAgICAgICAgdGhpcy5pc0VkaXRNb2RhbE9wZW4gPSBpc0VkaXRNb2RhbE9wZW47XG4gICAgICAgICAgaWYgKHRoaXMuaXNWaWV3SW5pdGVkKSB7XG4gICAgICAgICAgICB0aGlzLmNkUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBpZiAoY2hhbmdlcy5pc01pbmUgfHwgY2hhbmdlcy5lbmFibGVkQWN0aW9ucyB8fCBjaGFuZ2VzLm1lc3NhZ2UpIHtcbiAgICAgIHRoaXMuc2V0VmlzaWJsZUFjdGlvbnMoKTtcbiAgICB9XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgdGhpcy5pc1ZpZXdJbml0ZWQgPSB0cnVlO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLmZvckVhY2goKHMpID0+IHMudW5zdWJzY3JpYmUoKSk7XG4gIH1cblxuICBnZXRBY3Rpb25MYWJlbChcbiAgICBhY3Rpb25MYWJlbE9yVHJhbnNsYXRpb25LZXk6ICgobWVzc2FnZTogU3RyZWFtTWVzc2FnZSkgPT4gc3RyaW5nKSB8IHN0cmluZ1xuICApIHtcbiAgICByZXR1cm4gdHlwZW9mIGFjdGlvbkxhYmVsT3JUcmFuc2xhdGlvbktleSA9PT0gJ3N0cmluZydcbiAgICAgID8gYWN0aW9uTGFiZWxPclRyYW5zbGF0aW9uS2V5XG4gICAgICA6IGFjdGlvbkxhYmVsT3JUcmFuc2xhdGlvbktleSh0aGlzLm1lc3NhZ2UhKTtcbiAgfVxuXG4gIGdldFJlYWN0aW9uU2VsZWN0b3JUZW1wbGF0ZUNvbnRleHQoKTogTWVzc2FnZVJlYWN0aW9uc1NlbGVjdG9yQ29udGV4dCB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG1lc3NhZ2VJZDogdGhpcy5tZXNzYWdlPy5pZCxcbiAgICAgIG93blJlYWN0aW9uczogdGhpcy5tZXNzYWdlPy5vd25fcmVhY3Rpb25zIHx8IFtdLFxuICAgIH07XG4gIH1cblxuICBnZXRNZXNzYWdlQWN0aW9uVGVtcGxhdGVDb250ZXh0KFxuICAgIGl0ZW06XG4gICAgICB8IE1lc3NhZ2VBY3Rpb25JdGVtXG4gICAgICB8IEN1c3RvbU1lc3NhZ2VBY3Rpb25JdGVtXG4gICAgICB8IE1lc3NhZ2VSZWFjdGlvbkFjdGlvbkl0ZW1cbiAgKTogTWVzc2FnZUFjdGlvbkJveEl0ZW1Db250ZXh0IHtcbiAgICBpZiAodGhpcy5pc1JlYWN0QWN0aW9uKGl0ZW0pKSB7XG4gICAgICByZXR1cm4ge30gYXMgTWVzc2FnZUFjdGlvbkJveEl0ZW1Db250ZXh0O1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBhY3Rpb25IYW5kbGVyOiBpdGVtLmFjdGlvbkhhbmRsZXIsXG4gICAgICAgIGFjdGlvbkhhbmRsZXJFeHRyYVBhcmFtczoge1xuICAgICAgICAgIGlzTWluZTogdGhpcy5pc01pbmUsXG4gICAgICAgICAgbWVzc2FnZVRleHRIdG1sRWxlbWVudDogdGhpcy5tZXNzYWdlVGV4dEh0bWxFbGVtZW50LFxuICAgICAgICB9LFxuICAgICAgICBhY3Rpb25OYW1lOiBpdGVtLmFjdGlvbk5hbWUsXG4gICAgICAgIG1lc3NhZ2U6IHRoaXMubWVzc2FnZSEsXG4gICAgICAgIGFjdGlvbkxhYmVsT3JUcmFuc2xhdGlvbktleTogaXRlbS5hY3Rpb25MYWJlbE9yVHJhbnNsYXRpb25LZXksXG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIHRyYWNrQnlBY3Rpb25OYW1lKFxuICAgIF86IG51bWJlcixcbiAgICBpdGVtOlxuICAgICAgfCBNZXNzYWdlQWN0aW9uSXRlbVxuICAgICAgfCBDdXN0b21NZXNzYWdlQWN0aW9uSXRlbVxuICAgICAgfCBNZXNzYWdlUmVhY3Rpb25BY3Rpb25JdGVtXG4gICkge1xuICAgIHJldHVybiBpdGVtLmFjdGlvbk5hbWU7XG4gIH1cblxuICBwcml2YXRlIGlzUmVhY3RBY3Rpb24oXG4gICAgaXRlbTpcbiAgICAgIHwgTWVzc2FnZUFjdGlvbkl0ZW1cbiAgICAgIHwgQ3VzdG9tTWVzc2FnZUFjdGlvbkl0ZW1cbiAgICAgIHwgTWVzc2FnZVJlYWN0aW9uQWN0aW9uSXRlbVxuICApOiBpdGVtIGlzIE1lc3NhZ2VSZWFjdGlvbkFjdGlvbkl0ZW0ge1xuICAgIHJldHVybiBpdGVtLmFjdGlvbk5hbWUgPT09ICdyZWFjdCc7XG4gIH1cblxuICBwcml2YXRlIHNldFZpc2libGVBY3Rpb25zKCkge1xuICAgIGlmICghdGhpcy5tZXNzYWdlKSB7XG4gICAgICB0aGlzLnZpc2libGVNZXNzYWdlQWN0aW9uSXRlbXMgPSBbXTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy52aXNpYmxlTWVzc2FnZUFjdGlvbkl0ZW1zID0gW1xuICAgICAgICAuLi50aGlzLm1lc3NhZ2VBY3Rpb25JdGVtcyxcbiAgICAgICAgLi4udGhpcy5jdXN0b21BY3Rpb25zLFxuICAgICAgXS5maWx0ZXIoKGl0ZW0pID0+XG4gICAgICAgIGl0ZW0uaXNWaXNpYmxlKHRoaXMuZW5hYmxlZEFjdGlvbnMsIHRoaXMuaXNNaW5lLCB0aGlzLm1lc3NhZ2UhKVxuICAgICAgKTtcbiAgICB9XG4gIH1cbn1cbiIsIjxkaXZcbiAgI2FjdGlvbkJveFxuICBkYXRhLXRlc3RpZD1cImFjdGlvbi1ib3hcIlxuICBjbGFzcz1cIlxuICAgIHN0ci1jaGF0X19tZXNzYWdlLWFjdGlvbnMtYm94XG4gICAgc3RyLWNoYXRfX21lc3NhZ2UtYWN0aW9ucy1ib3gtYW5ndWxhclxuICAgIHN0ci1jaGF0X19tZXNzYWdlLWFjdGlvbnMtYm94LS1vcGVuXG4gIFwiXG4+XG4gIDx1bCBjbGFzcz1cInN0ci1jaGF0X19tZXNzYWdlLWFjdGlvbnMtbGlzdFwiPlxuICAgIDxuZy1jb250YWluZXJcbiAgICAgICpuZ0Zvcj1cImxldCBpdGVtIG9mIHZpc2libGVNZXNzYWdlQWN0aW9uSXRlbXM7IHRyYWNrQnk6IHRyYWNrQnlBY3Rpb25OYW1lXCJcbiAgICA+XG4gICAgICA8bmctY29udGFpbmVyIFtuZ1N3aXRjaF09XCJpdGVtLmFjdGlvbk5hbWVcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ3JlYWN0J1wiPlxuICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgICAgICAgIChjdXN0b21UZW1wbGF0ZXNTZXJ2aWNlLm1lc3NhZ2VSZWFjdGlvbnNTZWxlY3RvclRlbXBsYXRlJFxuICAgICAgICAgICAgICAgIHwgYXN5bmMpIHx8IGRlZmF1bHRSZWFjdGlvblNlbGVjdG9yO1xuICAgICAgICAgICAgICBjb250ZXh0OiBnZXRSZWFjdGlvblNlbGVjdG9yVGVtcGxhdGVDb250ZXh0KClcbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hEZWZhdWx0PlxuICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgICAgICAgIChjdXN0b21UZW1wbGF0ZXNTZXJ2aWNlLm1lc3NhZ2VBY3Rpb25zQm94SXRlbVRlbXBsYXRlJCB8IGFzeW5jKSB8fFxuICAgICAgICAgICAgICAgIGRlZmF1bHRNZXNzYWdlQWN0aW9uSXRlbTtcbiAgICAgICAgICAgICAgY29udGV4dDogZ2V0TWVzc2FnZUFjdGlvblRlbXBsYXRlQ29udGV4dChpdGVtKVxuICAgICAgICAgICAgXCJcbiAgICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9uZy1jb250YWluZXI+XG4gIDwvdWw+XG48L2Rpdj5cblxuPG5nLXRlbXBsYXRlXG4gICNkZWZhdWx0TWVzc2FnZUFjdGlvbkl0ZW1cbiAgbGV0LWFjdGlvbk5hbWU9XCJhY3Rpb25OYW1lXCJcbiAgbGV0LWFjdGlvbkhhbmRsZXI9XCJhY3Rpb25IYW5kbGVyXCJcbiAgbGV0LWFjdGlvbkxhYmVsT3JUcmFuc2xhdGlvbktleT1cImFjdGlvbkxhYmVsT3JUcmFuc2xhdGlvbktleVwiXG4gIGxldC1hY3Rpb25IYW5kbGVyRXh0cmFQYXJhbXM9XCJhY3Rpb25IYW5kbGVyRXh0cmFQYXJhbXNcIlxuPlxuICA8YnV0dG9uXG4gICAgY2xhc3M9XCJzdHItY2hhdF9fbWVzc2FnZS1hY3Rpb25zLWxpc3QtaXRlbS1idXR0b25cIlxuICAgIFthdHRyLmRhdGEtdGVzdGlkXT1cImFjdGlvbk5hbWUgKyAnLWFjdGlvbidcIlxuICAgIChjbGljayk9XCJhY3Rpb25IYW5kbGVyKG1lc3NhZ2UsIGFjdGlvbkhhbmRsZXJFeHRyYVBhcmFtcylcIlxuICA+XG4gICAgPGxpIGNsYXNzPVwic3RyLWNoYXRfX21lc3NhZ2UtYWN0aW9ucy1saXN0LWl0ZW1cIj5cbiAgICAgIHt7IGdldEFjdGlvbkxhYmVsKGFjdGlvbkxhYmVsT3JUcmFuc2xhdGlvbktleSkgfCB0cmFuc2xhdGUgfX1cbiAgICA8L2xpPlxuICA8L2J1dHRvbj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZVxuICAjZGVmYXVsdFJlYWN0aW9uU2VsZWN0b3JcbiAgbGV0LW1lc3NhZ2VJZD1cIm1lc3NhZ2VJZFwiXG4gIGxldC1vd25SZWFjdGlvbnM9XCJvd25SZWFjdGlvbnNcIlxuPlxuICA8c3RyZWFtLW1lc3NhZ2UtcmVhY3Rpb25zLXNlbGVjdG9yXG4gICAgW21lc3NhZ2VJZF09XCJtZXNzYWdlPy5pZFwiXG4gICAgW293blJlYWN0aW9uc109XCJtZXNzYWdlPy5vd25fcmVhY3Rpb25zIHx8IFtdXCJcbiAgPjwvc3RyZWFtLW1lc3NhZ2UtcmVhY3Rpb25zLXNlbGVjdG9yPlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
@@ -1,5 +1,5 @@
1
1
  import { Injectable } from '@angular/core';
2
- import { BehaviorSubject } from 'rxjs';
2
+ import { BehaviorSubject, combineLatest } from 'rxjs';
3
3
  import * as i0 from "@angular/core";
4
4
  import * as i1 from "./chat-client.service";
5
5
  import * as i2 from "./notification.service";
@@ -16,6 +16,12 @@ export class MessageActionsService {
16
16
  * Default actions - these are the actions that are handled by the built-in component
17
17
  */
18
18
  this.defaultActions = [
19
+ {
20
+ actionName: 'react',
21
+ isVisible: (enabledActions) => {
22
+ return enabledActions.indexOf('send-reaction') !== -1;
23
+ },
24
+ },
19
25
  {
20
26
  actionName: 'mark-unread',
21
27
  actionLabelOrTranslationKey: 'streamChat.Mark as unread',
@@ -32,6 +38,14 @@ export class MessageActionsService {
32
38
  },
33
39
  isVisible: (enabledActions) => enabledActions.indexOf('quote-message') !== -1,
34
40
  },
41
+ {
42
+ actionName: 'thread-reply',
43
+ actionLabelOrTranslationKey: 'streamChat.Thread',
44
+ actionHandler: (message) => {
45
+ void this.channelService.setAsActiveParentMessage(message);
46
+ },
47
+ isVisible: (enabledActions, isMine, message) => enabledActions.indexOf('send-reply') !== -1 && !message.parent_id,
48
+ },
35
49
  {
36
50
  actionName: 'pin',
37
51
  actionLabelOrTranslationKey: (message) => message.pinned ? 'streamChat.Unpin' : 'streamChat.Pin',
@@ -84,6 +98,36 @@ export class MessageActionsService {
84
98
  enabledActions.indexOf('delete-any') !== -1 ||
85
99
  enabledActions.indexOf('delete-any-message') !== -1,
86
100
  },
101
+ {
102
+ actionName: 'copy-message-text',
103
+ actionLabelOrTranslationKey: 'streamChat.Copy text',
104
+ isVisible: (_, __, message) => {
105
+ const isClipboardSupported = navigator?.clipboard?.write !== undefined;
106
+ if (!isClipboardSupported && !this.hasDisplayedClipboardWarning) {
107
+ console.warn(`[Stream Chat] Copy action is disabled because clipboard API isn't available, please check security and browser requirements: https://developer.mozilla.org/en-US/docs/Web/API/Clipboard/write#security_considerations`);
108
+ this.hasDisplayedClipboardWarning = true;
109
+ }
110
+ return (!!message.text &&
111
+ (message.type === 'regular' || message.type === 'reply') &&
112
+ isClipboardSupported);
113
+ },
114
+ actionHandler: (message, extraParams) => {
115
+ const fallbackContent = message.text || '';
116
+ // Android Chrome can only copy plain text: https://issues.chromium.org/issues/40851502
117
+ void navigator.clipboard.write([
118
+ new ClipboardItem({
119
+ 'text/plain': new Blob([
120
+ extraParams.messageTextHtmlElement?.innerText ||
121
+ fallbackContent,
122
+ ], { type: 'text/plain' }),
123
+ 'text/html': new Blob([
124
+ extraParams.messageTextHtmlElement?.innerHTML ||
125
+ fallbackContent,
126
+ ], { type: 'text/html' }),
127
+ }),
128
+ ]);
129
+ },
130
+ },
87
131
  ];
88
132
  /**
89
133
  * The built-in components will handle changes to this observable.
@@ -93,6 +137,26 @@ export class MessageActionsService {
93
137
  * You can pass your own custom actions that will be displayed inside the built-in message actions component
94
138
  */
95
139
  this.customActions$ = new BehaviorSubject([]);
140
+ this.hasDisplayedClipboardWarning = false;
141
+ combineLatest([
142
+ this.messageToEdit$,
143
+ this.channelService.activeChannel$,
144
+ ]).subscribe(([messageToEdit, activeChannel]) => {
145
+ if (messageToEdit &&
146
+ (!activeChannel || activeChannel?.cid !== messageToEdit.cid)) {
147
+ this.messageToEdit$.next(undefined);
148
+ }
149
+ });
150
+ combineLatest([
151
+ this.messageToEdit$,
152
+ this.channelService.activeParentMessageId$,
153
+ ]).subscribe(([messageToEdit, parentMessageId]) => {
154
+ if (messageToEdit &&
155
+ messageToEdit.parent_id &&
156
+ messageToEdit.parent_id !== parentMessageId) {
157
+ this.messageToEdit$.next(undefined);
158
+ }
159
+ });
96
160
  }
97
161
  /**
98
162
  * This method returns how many authorized actions are available to the given message
@@ -116,4 +180,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImpor
116
180
  providedIn: 'root',
117
181
  }]
118
182
  }], ctorParameters: function () { return [{ type: i1.ChatClientService }, { type: i2.NotificationService }, { type: i3.ChannelService }]; } });
119
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVzc2FnZS1hY3Rpb25zLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9zdHJlYW0tY2hhdC1hbmd1bGFyL3NyYy9saWIvbWVzc2FnZS1hY3Rpb25zLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sTUFBTSxDQUFDOzs7OztBQVl2Qzs7R0FFRztBQUlILE1BQU0sT0FBTyxxQkFBcUI7SUF3R2hDLFlBQ1UsaUJBQW9DLEVBQ3BDLG1CQUF3QyxFQUN4QyxjQUE4QjtRQUY5QixzQkFBaUIsR0FBakIsaUJBQWlCLENBQW1CO1FBQ3BDLHdCQUFtQixHQUFuQixtQkFBbUIsQ0FBcUI7UUFDeEMsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBeEd4Qzs7V0FFRztRQUNNLG1CQUFjLEdBQTJCO1lBQ2hEO2dCQUNFLFVBQVUsRUFBRSxhQUFhO2dCQUN6QiwyQkFBMkIsRUFBRSwyQkFBMkI7Z0JBQ3hELGFBQWEsRUFBRSxDQUFDLE9BQXlCLEVBQUUsRUFBRTtvQkFDM0MsS0FBSyxJQUFJLENBQUMsY0FBYyxDQUFDLGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQztnQkFDekQsQ0FBQztnQkFDRCxTQUFTLEVBQUUsQ0FDVCxjQUF3QixFQUN4QixNQUFlLEVBQ2YsT0FBeUIsRUFDekIsRUFBRSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUzthQUN4RTtZQUNEO2dCQUNFLFVBQVUsRUFBRSxPQUFPO2dCQUNuQiwyQkFBMkIsRUFBRSxrQkFBa0I7Z0JBQy9DLGFBQWEsRUFBRSxDQUFDLE9BQXlCLEVBQUUsRUFBRTtvQkFDM0MsSUFBSSxDQUFDLGNBQWMsQ0FBQyxvQkFBb0Is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QUFDLENBQUMsQ0FBQztvQkFDcEQsTUFBTSxDQUFDO29CQUNULGNBQWMsQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDO29CQUMzQyxjQUFjLENBQUMsT0FBTyxDQUFDLG9CQUFvQixDQUFDLEtBQUssQ0FBQyxDQUFDO2FBQ3REO1NBQ0YsQ0FBQztRQUNGOztXQUVHO1FBQ0gsbUJBQWMsR0FBRyxJQUFJLGVBQWUsQ0FBK0IsU0FBUyxDQUFDLENBQUM7UUFDOUU7O1dBRUc7UUFDSCxtQkFBYyxHQUFHLElBQUksZUFBZSxDQUE0QixFQUFFLENBQUMsQ0FBQztJQVVqRSxDQUFDO0lBRUo7Ozs7O09BS0c7SUFDSCxnQ0FBZ0MsQ0FDOUIsT0FBeUIsRUFDekIsY0FBd0I7UUFFeEIsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUM7UUFDM0QsTUFBTSxVQUFVLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxjQUFjLEVBQUUsR0FBRyxhQUFhLENBQUMsQ0FBQztRQUM5RCxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxFQUFFLENBQUM7UUFDakUsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLE9BQU8sS0FBSyxhQUFhLENBQUM7UUFFakQsT0FBTyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FDaEMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxjQUFjLEVBQUUsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUNoRCxDQUFDLE1BQU0sQ0FBQztJQUNYLENBQUM7O2tIQWhJVSxxQkFBcUI7c0hBQXJCLHFCQUFxQixjQUZwQixNQUFNOzJGQUVQLHFCQUFxQjtrQkFIakMsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7XG4gIEN1c3RvbU1lc3NhZ2VBY3Rpb25JdGVtLFxuICBEZWZhdWx0U3RyZWFtQ2hhdEdlbmVyaWNzLFxuICBNZXNzYWdlQWN0aW9uSXRlbSxcbiAgTWVzc2FnZUFjdGlvbnNDbGlja0RldGFpbHMsXG4gIFN0cmVhbU1lc3NhZ2UsXG59IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IHsgQ2hhdENsaWVudFNlcnZpY2UgfSBmcm9tICcuL2NoYXQtY2xpZW50LnNlcnZpY2UnO1xuaW1wb3J0IHsgTm90aWZpY2F0aW9uU2VydmljZSB9IGZyb20gJy4vbm90aWZpY2F0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ2hhbm5lbFNlcnZpY2UgfSBmcm9tICcuL2NoYW5uZWwuc2VydmljZSc7XG5cbi8qKlxuICogVGhlIG1lc3NhZ2UgYWN0aW9ucyBzZXJ2aWNlIHByb3ZpZGVzIGN1c3RvbWl6YXRpb24gb3B0aW9ucyBmb3IgdGhlIFttZXNzYWdlIGFjdGlvbnNdKC4uLy4uL2NvbXBvbmVudHMvTWVzc2FnZUFjdGlvbnNCb3hDb21wb25lbnQpXG4gKi9cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBNZXNzYWdlQWN0aW9uc1NlcnZpY2U8XG4gIFQgZXh0ZW5kcyBEZWZhdWx0U3RyZWFtQ2hhdEdlbmVyaWNzID0gRGVmYXVsdFN0cmVhbUNoYXRHZW5lcmljc1xuPiB7XG4gIC8qKlxuICAgKiBEZWZhdWx0IGFjdGlvbnMgLSB0aGVzZSBhcmUgdGhlIGFjdGlvbnMgdGhhdCBhcmUgaGFuZGxlZCBieSB0aGUgYnVpbHQtaW4gY29tcG9uZW50XG4gICAqL1xuICByZWFkb25seSBkZWZhdWx0QWN0aW9uczogTWVzc2FnZUFjdGlvbkl0ZW08VD5bXSA9IFtcbiAgICB7XG4gICAgICBhY3Rpb25OYW1lOiAnbWFyay11bnJlYWQnLFxuICAgICAgYWN0aW9uTGFiZWxPclRyYW5zbGF0aW9uS2V5OiAnc3RyZWFtQ2hhdC5NYXJrIGFzIHVucmVhZCcsXG4gICAgICBhY3Rpb25IYW5kbGVyOiAobWVzc2FnZTogU3RyZWFtTWVzc2FnZTxUPikgPT4ge1xuICAgICAgICB2b2lkIHRoaXMuY2hhbm5lbFNlcnZpY2UubWFya01lc3NhZ2VVbnJlYWQobWVzc2FnZS5pZCk7XG4gICAgICB9LFxuICAgICAgaXNWaXNpYmxlOiAoXG4gICAgICAgIGVuYWJsZWRBY3Rpb25zOiBzdHJpbmdbXSxcbiAgICAgICAgaXNNaW5lOiBib29sZWFuLFxuICAgICAgICBtZXNzYWdlOiBTdHJlYW1NZXNzYWdlPFQ+XG4gICAgICApID0+IGVuYWJsZWRBY3Rpb25zLmluZGV4T2YoJ3JlYWQtZXZlbnRzJykgIT09IC0xICYmICFtZXNzYWdlLnBhcmVudF9pZCxcbiAgICB9LFxuICAgIHtcbiAgICAgIGFjdGlvbk5hbWU6ICdxdW90ZScsXG4gICAgICBhY3Rpb25MYWJlbE9yVHJhbnNsYXRpb25LZXk6ICdzdHJlYW1DaGF0LlJlcGx5JyxcbiAgICAgIGFjdGlvbkhhbmRsZXI6IChtZXNzYWdlOiBTdHJlYW1NZXNzYWdlPFQ+KSA9PiB7XG4gICAgICAgIHRoaXMuY2hhbm5lbFNlcnZpY2Uuc2VsZWN0TWVzc2FnZVRvUXVvdGUobWVzc2FnZSk7XG4gICAgICB9LFxuICAgICAgaXNWaXNpYmxlOiAoZW5hYmxlZEFjdGlvbnM6IHN0cmluZ1tdKSA9PlxuICAgICAgICBlbmFibGVkQWN0aW9ucy5pbmRleE9mKCdxdW90ZS1tZXNzYWdlJykgIT09IC0xLFxuICAgIH0sXG4gICAge1xuICAgICAgYWN0aW9uTmFtZTogJ3BpbicsXG4gICAgICBhY3Rpb25MYWJlbE9yVHJhbnNsYXRpb25LZXk6IChtZXNzYWdlOiBTdHJlYW1NZXNzYWdlPFQ+KSA9PlxuICAgICAgICBtZXNzYWdlLnBpbm5lZCA/ICdzdHJlYW1DaGF0LlVucGluJyA6ICdzdHJlYW1DaGF0LlBpbicsXG4gICAgICBhY3Rpb25IYW5kbGVyOiAobWVzc2FnZTogU3RyZWFtTWVzc2FnZTxUPikgPT4ge1xuICAgICAgICBtZXNzYWdlLnBpbm5lZFxuICAgICAgICAgID8gdm9pZCB0aGlzLmNoYW5uZWxTZXJ2aWNlLnVucGluTWVzc2FnZShtZXNzYWdlKVxuICAgICAgICAgIDogdm9pZCB0aGlzLmNoYW5uZWxTZXJ2aWNlLnBpbk1lc3NhZ2UobWVzc2FnZSk7XG4gICAgICB9LFxuICAgICAgaXNWaXNpYmxlOiAoZW5hYmxlZEFjdGlvbnM6IHN0cmluZ1tdKSA9PlxuICAgICAgICBlbmFibGVkQWN0aW9ucy5pbmRleE9mKCdwaW4tbWVzc2FnZScpICE9PSAtMSxcbiAgICB9LFxuICAgIHtcbiAgICAgIGFjdGlvbk5hbWU6ICdmbGFnJyxcbiAgICAgIGFjdGlvbkxhYmVsT3JUcmFuc2xhdGlvbktleTogJ3N0cmVhbUNoYXQuRmxhZycsXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLW1pc3VzZWQtcHJvbWlzZXNcbiAgICAgIGFjdGlvbkhhbmRsZXI6IGFzeW5jIChtZXNzYWdlOiBTdHJlYW1NZXNzYWdlPFQ+KSA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgYXdhaXQgdGhpcy5jaGF0Q2xpZW50U2VydmljZS5mbGFnTWVzc2FnZShtZXNzYWdlLmlkKTtcbiAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2UuYWRkVGVtcG9yYXJ5Tm90aWZpY2F0aW9uKFxuICAgICAgICAgICAgJ3N0cmVhbUNoYXQuTWVzc2FnZSBoYXMgYmVlbiBzdWNjZXNzZnVsbHkgZmxhZ2dlZCcsXG4gICAgICAgICAgICAnc3VjY2VzcydcbiAgICAgICAgICApO1xuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2UuYWRkVGVtcG9yYXJ5Tm90aWZpY2F0aW9uKFxuICAgICAgICAgICAgJ3N0cmVhbUNoYXQuRXJyb3IgYWRkaW5nIGZsYWcnXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIGlzVmlzaWJsZTogKGVuYWJsZWRBY3Rpb25zOiBzdHJpbmdbXSwgaXNNaW5lOiBib29sZWFuKSA9PlxuICAgICAgICBlbmFibGVkQWN0aW9ucy5pbmRleE9mKCdmbGFnLW1lc3NhZ2UnKSAhPT0gLTEgJiYgIWlzTWluZSxcbiAgICB9LFxuICAgIHtcbiAgICAgIGFjdGlvbk5hbWU6ICdlZGl0JyxcbiAgICAgIGFjdGlvbkxhYmVsT3JUcmFuc2xhdGlvbktleTogJ3N0cmVhbUNoYXQuRWRpdCBNZXNzYWdlJyxcbiAgICAgIGFjdGlvbkhhbmRsZXI6IChtZXNzYWdlOiBTdHJlYW1NZXNzYWdlPFQ+KSA9PiB7XG4gICAgICAgIHRoaXMubWVzc2FnZVRvRWRpdCQubmV4dChtZXNzYWdlKTtcbiAgICAgIH0sXG4gICAgICBpc1Zpc2libGU6IChlbmFibGVkQWN0aW9uczogc3RyaW5nW10sIGlzTWluZTogYm9vbGVhbikgPT5cbiAgICAgICAgKGVuYWJsZWRBY3Rpb25zLmluZGV4T2YoJ3VwZGF0ZS1vd24tbWVzc2FnZScpICE9PSAtMSAmJiBpc01pbmUpIHx8XG4gICAgICAgIGVuYWJsZWRBY3Rpb25zLmluZGV4T2YoJ3VwZGF0ZS1hbnktbWVzc2FnZScpICE9PSAtMSxcbiAgICB9LFxuICAgIHtcbiAgICAgIGFjdGlvbk5hbWU6ICdkZWxldGUnLFxuICAgICAgYWN0aW9uTGFiZWxPclRyYW5zbGF0aW9uS2V5OiAnc3RyZWFtQ2hhdC5EZWxldGUnLFxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1taXN1c2VkLXByb21pc2VzXG4gICAgICBhY3Rpb25IYW5kbGVyOiBhc3luYyAobWVzc2FnZTogU3RyZWFtTWVzc2FnZTxUPikgPT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGF3YWl0IHRoaXMuY2hhbm5lbFNlcnZpY2UuZGVsZXRlTWVzc2FnZShtZXNzYWdlKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2UuYWRkVGVtcG9yYXJ5Tm90aWZpY2F0aW9uKFxuICAgICAgICAgICAgJ3N0cmVhbUNoYXQuRXJyb3IgZGVsZXRpbmcgbWVzc2FnZSdcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgaXNWaXNpYmxlOiAoZW5hYmxlZEFjdGlvbnM6IHN0cmluZ1tdLCBpc01pbmU6IGJvb2xlYW4pID0+XG4gICAgICAgICgoZW5hYmxlZEFjdGlvbnMuaW5kZXhPZignZGVsZXRlJykgIT09IC0xIHx8XG4gICAgICAgICAgZW5hYmxlZEFjdGlvbnMuaW5kZXhPZignZGVsZXRlLW93bi1tZXNzYWdlJykgIT09IC0xKSAmJlxuICAgICAgICAgIGlzTWluZSkgfHxcbiAgICAgICAgZW5hYmxlZEFjdGlvbnMuaW5kZXhPZignZGVsZXRlLWFueScpICE9PSAtMSB8fFxuICAgICAgICBlbmFibGVkQWN0aW9ucy5pbmRleE9mKCdkZWxldGUtYW55LW1lc3NhZ2UnKSAhPT0gLTEsXG4gICAgfSxcbiAgXTtcbiAgLyoqXG4gICAqIFRoZSBidWlsdC1pbiBjb21wb25lbnRzIHdpbGwgaGFuZGxlIGNoYW5nZXMgdG8gdGhpcyBvYnNlcnZhYmxlLlxuICAgKi9cbiAgbWVzc2FnZVRvRWRpdCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFN0cmVhbU1lc3NhZ2U8VD4gfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG4gIC8qKlxuICAgKiBZb3UgY2FuIHBhc3MgeW91ciBvd24gY3VzdG9tIGFjdGlvbnMgdGhhdCB3aWxsIGJlIGRpc3BsYXllZCBpbnNpZGUgdGhlIGJ1aWx0LWluIG1lc3NhZ2UgYWN0aW9ucyBjb21wb25lbnRcbiAgICovXG4gIGN1c3RvbUFjdGlvbnMkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxDdXN0b21NZXNzYWdlQWN0aW9uSXRlbVtdPihbXSk7XG4gIC8qKlxuICAgKiBCeSBkZWZhdWx0IHRoZSBbYE1lc3NhZ2VDb21wb25lbnRgXSguLi8uLi9jb21wb25lbnRzL01lc3NhZ2VDb21wb25lbnQpIHdpbGwgZGlzcGxheSB0aGUgW2BNZXNzYWdlQWN0aW9uc0JveENvbXBvbmVudGBdKC4uLy4uL2NvbXBvbmVudHMvTWVzc2FnZUFjdGlvbnNCb3hDb21wb25lbnQpLiBZb3UgY2FuIG92ZXJyaWRlIHRoYXQgYmVoYXZpb3IgYnkgcHJvdmlkaW5nIHlvdXIgb3duIGV2ZW50IGhhbmRsZXIuXG4gICAqL1xuICBjdXN0b21BY3Rpb25DbGlja0hhbmRsZXI/OiAoZGV0YWlsczogTWVzc2FnZUFjdGlvbnNDbGlja0RldGFpbHM8VD4pID0+IHZvaWQ7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBjaGF0Q2xpZW50U2VydmljZTogQ2hhdENsaWVudFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBub3RpZmljYXRpb25TZXJ2aWNlOiBOb3RpZmljYXRpb25TZXJ2aWNlLFxuICAgIHByaXZhdGUgY2hhbm5lbFNlcnZpY2U6IENoYW5uZWxTZXJ2aWNlXG4gICkge31cblxuICAvKipcbiAgICogVGhpcyBtZXRob2QgcmV0dXJucyBob3cgbWFueSBhdXRob3JpemVkIGFjdGlvbnMgYXJlIGF2YWlsYWJsZSB0byB0aGUgZ2l2ZW4gbWVzc2FnZVxuICAgKiBAcGFyYW0gbWVzc2FnZVxuICAgKiBAcGFyYW0gZW5hYmxlZEFjdGlvbnNcbiAgICogQHJldHVybnMgdGhlIGNvdW50XG4gICAqL1xuICBnZXRBdXRob3JpemVkTWVzc2FnZUFjdGlvbnNDb3VudChcbiAgICBtZXNzYWdlOiBTdHJlYW1NZXNzYWdlPFQ+LFxuICAgIGVuYWJsZWRBY3Rpb25zOiBzdHJpbmdbXVxuICApIHtcbiAgICBjb25zdCBjdXN0b21BY3Rpb25zID0gdGhpcy5jdXN0b21BY3Rpb25zJC5nZXRWYWx1ZSgpIHx8IFtdO1xuICAgIGNvbnN0IGFsbEFjdGlvbnMgPSBbLi4udGhpcy5kZWZhdWx0QWN0aW9ucywgLi4uY3VzdG9tQWN0aW9uc107XG4gICAgY29uc3QgY3VycmVudFVzZXJJZCA9IHRoaXMuY2hhdENsaWVudFNlcnZpY2UuY2hhdENsaWVudC51c2VyPy5pZDtcbiAgICBjb25zdCBpc01pbmUgPSBtZXNzYWdlLnVzZXJfaWQgPT09IGN1cnJlbnRVc2VySWQ7XG5cbiAgICByZXR1cm4gYWxsQWN0aW9ucy5maWx0ZXIoKGl0ZW0pID0+XG4gICAgICBpdGVtLmlzVmlzaWJsZShlbmFibGVkQWN0aW9ucywgaXNNaW5lLCBtZXNzYWdlKVxuICAgICkubGVuZ3RoO1xuICB9XG59XG4iXX0=
183
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVzc2FnZS1hY3Rpb25zLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9zdHJlYW0tY2hhdC1hbmd1bGFyL3NyYy9saWIvbWVzc2FnZS1hY3Rpb25zLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsZUFBZSxFQUFFLGFBQWEsRUFBRSxNQUFNLE1BQU0sQ0FBQzs7Ozs7QUFjdEQ7O0dBRUc7QUFJSCxNQUFNLE9BQU8scUJBQXFCO0lBeUtoQyxZQUNVLGlCQUFvQyxFQUNwQyxtQkFBd0MsRUFDeEMsY0FBOEI7UUFGOUIsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFtQjtRQUNwQyx3QkFBbUIsR0FBbkIsbUJBQW1CLENBQXFCO1FBQ3hDLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQXpLeEM7O1dBRUc7UUFDTSxtQkFBYyxHQUdqQjtZQUNKO2dCQUNFLFVBQVUsRUFBRSxPQUFPO2dCQUNuQixTQUFTLEVBQUUsQ0FBQyxjQUF3QixFQUFFLEVBQUU7b0JBQ3RDLE9BQU8sY0FBYyxDQUFDLE9BQU8sQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztnQkFDeEQsQ0FBQzthQUNGO1lBQ0Q7Z0JBQ0UsVUFBVSxFQUFFLGFBQWE7Z0JBQ3pCLDJCQUEyQixFQUFFLDJCQUEyQjtnQkFDeEQsYUFBYSxFQUFFLENBQUMsT0FBeUIsRUFBRSxFQUFFO29CQUMzQyxLQUFLLElBQUksQ0FBQyxjQUFjLENBQUMsaUJBQWlCLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDO2dCQUN6RCxDQUFDO2dCQUNELFNBQVMsRUFBRSxDQUNULGNBQXdCLEVBQ3hCLE1BQWUsRUFDZixPQUF5QixFQUN6QixFQUFFLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUMsSUFB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RCxDQUFDLE1BQU0sQ0FBQztJQUNYLENBQUM7O2tIQXpOVSxxQkFBcUI7c0hBQXJCLHFCQUFxQixjQUZwQixNQUFNOzJGQUVQLHFCQUFxQjtrQkFIakMsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIGNvbWJpbmVMYXRlc3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7XG4gIEN1c3RvbU1lc3NhZ2VBY3Rpb25JdGVtLFxuICBEZWZhdWx0U3RyZWFtQ2hhdEdlbmVyaWNzLFxuICBNZXNzYWdlQWN0aW9uSGFuZGxlckV4dHJhUGFyYW1zLFxuICBNZXNzYWdlQWN0aW9uSXRlbSxcbiAgTWVzc2FnZUFjdGlvbnNDbGlja0RldGFpbHMsXG4gIE1lc3NhZ2VSZWFjdGlvbkFjdGlvbkl0ZW0sXG4gIFN0cmVhbU1lc3NhZ2UsXG59IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IHsgQ2hhdENsaWVudFNlcnZpY2UgfSBmcm9tICcuL2NoYXQtY2xpZW50LnNlcnZpY2UnO1xuaW1wb3J0IHsgTm90aWZpY2F0aW9uU2VydmljZSB9IGZyb20gJy4vbm90aWZpY2F0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ2hhbm5lbFNlcnZpY2UgfSBmcm9tICcuL2NoYW5uZWwuc2VydmljZSc7XG5cbi8qKlxuICogVGhlIG1lc3NhZ2UgYWN0aW9ucyBzZXJ2aWNlIHByb3ZpZGVzIGN1c3RvbWl6YXRpb24gb3B0aW9ucyBmb3IgdGhlIFttZXNzYWdlIGFjdGlvbnNdKC4uLy4uL2NvbXBvbmVudHMvTWVzc2FnZUFjdGlvbnNCb3hDb21wb25lbnQpXG4gKi9cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBNZXNzYWdlQWN0aW9uc1NlcnZpY2U8XG4gIFQgZXh0ZW5kcyBEZWZhdWx0U3RyZWFtQ2hhdEdlbmVyaWNzID0gRGVmYXVsdFN0cmVhbUNoYXRHZW5lcmljc1xuPiB7XG4gIC8qKlxuICAgKiBEZWZhdWx0IGFjdGlvbnMgLSB0aGVzZSBhcmUgdGhlIGFjdGlvbnMgdGhhdCBhcmUgaGFuZGxlZCBieSB0aGUgYnVpbHQtaW4gY29tcG9uZW50XG4gICAqL1xuICByZWFkb25seSBkZWZhdWx0QWN0aW9uczogKFxuICAgIHwgTWVzc2FnZUFjdGlvbkl0ZW08VD5cbiAgICB8IE1lc3NhZ2VSZWFjdGlvbkFjdGlvbkl0ZW08VD5cbiAgKVtdID0gW1xuICAgIHtcbiAgICAgIGFjdGlvbk5hbWU6ICdyZWFjdCcsXG4gICAgICBpc1Zpc2libGU6IChlbmFibGVkQWN0aW9uczogc3RyaW5nW10pID0+IHtcbiAgICAgICAgcmV0dXJuIGVuYWJsZWRBY3Rpb25zLmluZGV4T2YoJ3NlbmQtcmVhY3Rpb24nKSAhPT0gLTE7XG4gICAgICB9LFxuICAgIH0sXG4gICAge1xuICAgICAgYWN0aW9uTmFtZTogJ21hcmstdW5yZWFkJyxcbiAgICAgIGFjdGlvbkxhYmVsT3JUcmFuc2xhdGlvbktleTogJ3N0cmVhbUNoYXQuTWFyayBhcyB1bnJlYWQnLFxuICAgICAgYWN0aW9uSGFuZGxlcjogKG1lc3NhZ2U6IFN0cmVhbU1lc3NhZ2U8VD4pID0+IHtcbiAgICAgICAgdm9pZCB0aGlzLmNoYW5uZWxTZXJ2aWNlLm1hcmtNZXNzYWdlVW5yZWFkKG1lc3NhZ2UuaWQpO1xuICAgICAgfSxcbiAgICAgIGlzVmlzaWJsZTogKFxuICAgICAgICBlbmFibGVkQWN0aW9uczogc3RyaW5nW10sXG4gICAgICAgIGlzTWluZTogYm9vbGVhbixcbiAgICAgICAgbWVzc2FnZTogU3RyZWFtTWVzc2FnZTxUPlxuICAgICAgKSA9PiBlbmFibGVkQWN0aW9ucy5pbmRleE9mKCdyZWFkLWV2ZW50cycpICE9PSAtMSAmJiAhbWVzc2FnZS5wYXJlbnRfaWQsXG4gICAgfSxcbiAgICB7XG4gICAgICBhY3Rpb25OYW1lOiAncXVvdGUnLFxuICAgICAgYWN0aW9uTGFiZWxPclRyYW5zbGF0aW9uS2V5OiAnc3RyZWFtQ2hhdC5SZXBseScsXG4gICAgICBhY3Rpb25IYW5kbGVyOiAobWVzc2FnZTogU3RyZWFtTWVzc2FnZTxUPikgPT4ge1xuICAgICAgICB0aGlzLmNoYW5uZWxTZXJ2aWNlLnNlbGVjdE1lc3NhZ2VUb1F1b3RlKG1lc3NhZ2UpO1xuICAgICAgfSxcbiAgICAgIGlzVmlzaWJsZTogKGVuYWJsZWRBY3Rpb25zOiBzdHJpbmdbXSkgPT5cbiAgICAgICAgZW5hYmxlZEFjdGlvbnMuaW5kZXhPZigncXVvdGUtbWVzc2FnZScpICE9PSAtMSxcbiAgICB9LFxuICAgIHtcbiAgICAgIGFjdGlvbk5hbWU6ICd0aHJlYWQtcmVwbHknLFxuICAgICAgYWN0aW9uTGFiZWxPclRyYW5zbGF0aW9uS2V5OiAnc3RyZWFtQ2hhdC5UaHJlYWQnLFxuICAgICAgYWN0aW9uSGFuZGxlcjogKG1lc3NhZ2U6IFN0cmVhbU1lc3NhZ2U8VD4pID0+IHtcbiAgICAgICAgdm9pZCB0aGlzLmNoYW5uZWxTZXJ2aWNlLnNldEFzQWN0aXZlUGFyZW50TWVzc2FnZShtZXNzYWdlKTtcbiAgICAgIH0sXG4gICAgICBpc1Zpc2libGU6IChcbiAgICAgICAgZW5hYmxlZEFjdGlvbnM6IHN0cmluZ1tdLFxuICAgICAgICBpc01pbmU6IGJvb2xlYW4sXG4gICAgICAgIG1lc3NhZ2U6IFN0cmVhbU1lc3NhZ2U8VD5cbiAgICAgICkgPT4gZW5hYmxlZEFjdGlvbnMuaW5kZXhPZignc2VuZC1yZXBseScpICE9PSAtMSAmJiAhbWVzc2FnZS5wYXJlbnRfaWQsXG4gICAgfSxcbiAgICB7XG4gICAgICBhY3Rpb25OYW1lOiAncGluJyxcbiAgICAgIGFjdGlvbkxhYmVsT3JUcmFuc2xhdGlvbktleTogKG1lc3NhZ2U6IFN0cmVhbU1lc3NhZ2U8VD4pID0+XG4gICAgICAgIG1lc3NhZ2UucGlubmVkID8gJ3N0cmVhbUNoYXQuVW5waW4nIDogJ3N0cmVhbUNoYXQuUGluJyxcbiAgICAgIGFjdGlvbkhhbmRsZXI6IChtZXNzYWdlOiBTdHJlYW1NZXNzYWdlPFQ+KSA9PiB7XG4gICAgICAgIG1lc3NhZ2UucGlubmVkXG4gICAgICAgICAgPyB2b2lkIHRoaXMuY2hhbm5lbFNlcnZpY2UudW5waW5NZXNzYWdlKG1lc3NhZ2UpXG4gICAgICAgICAgOiB2b2lkIHRoaXMuY2hhbm5lbFNlcnZpY2UucGluTWVzc2FnZShtZXNzYWdlKTtcbiAgICAgIH0sXG4gICAgICBpc1Zpc2libGU6IChlbmFibGVkQWN0aW9uczogc3RyaW5nW10pID0+XG4gICAgICAgIGVuYWJsZWRBY3Rpb25zLmluZGV4T2YoJ3Bpbi1tZXNzYWdlJykgIT09IC0xLFxuICAgIH0sXG4gICAge1xuICAgICAgYWN0aW9uTmFtZTogJ2ZsYWcnLFxuICAgICAgYWN0aW9uTGFiZWxPclRyYW5zbGF0aW9uS2V5OiAnc3RyZWFtQ2hhdC5GbGFnJyxcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tbWlzdXNlZC1wcm9taXNlc1xuICAgICAgYWN0aW9uSGFuZGxlcjogYXN5bmMgKG1lc3NhZ2U6IFN0cmVhbU1lc3NhZ2U8VD4pID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBhd2FpdCB0aGlzLmNoYXRDbGllbnRTZXJ2aWNlLmZsYWdNZXNzYWdlKG1lc3NhZ2UuaWQpO1xuICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5hZGRUZW1wb3JhcnlOb3RpZmljYXRpb24oXG4gICAgICAgICAgICAnc3RyZWFtQ2hhdC5NZXNzYWdlIGhhcyBiZWVuIHN1Y2Nlc3NmdWxseSBmbGFnZ2VkJyxcbiAgICAgICAgICAgICdzdWNjZXNzJ1xuICAgICAgICAgICk7XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5hZGRUZW1wb3JhcnlOb3RpZmljYXRpb24oXG4gICAgICAgICAgICAnc3RyZWFtQ2hhdC5FcnJvciBhZGRpbmcgZmxhZydcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgaXNWaXNpYmxlOiAoZW5hYmxlZEFjdGlvbnM6IHN0cmluZ1tdLCBpc01pbmU6IGJvb2xlYW4pID0+XG4gICAgICAgIGVuYWJsZWRBY3Rpb25zLmluZGV4T2YoJ2ZsYWctbWVzc2FnZScpICE9PSAtMSAmJiAhaXNNaW5lLFxuICAgIH0sXG4gICAge1xuICAgICAgYWN0aW9uTmFtZTogJ2VkaXQnLFxuICAgICAgYWN0aW9uTGFiZWxPclRyYW5zbGF0aW9uS2V5OiAnc3RyZWFtQ2hhdC5FZGl0IE1lc3NhZ2UnLFxuICAgICAgYWN0aW9uSGFuZGxlcjogKG1lc3NhZ2U6IFN0cmVhbU1lc3NhZ2U8VD4pID0+IHtcbiAgICAgICAgdGhpcy5tZXNzYWdlVG9FZGl0JC5uZXh0KG1lc3NhZ2UpO1xuICAgICAgfSxcbiAgICAgIGlzVmlzaWJsZTogKGVuYWJsZWRBY3Rpb25zOiBzdHJpbmdbXSwgaXNNaW5lOiBib29sZWFuKSA9PlxuICAgICAgICAoZW5hYmxlZEFjdGlvbnMuaW5kZXhPZigndXBkYXRlLW93bi1tZXNzYWdlJykgIT09IC0xICYmIGlzTWluZSkgfHxcbiAgICAgICAgZW5hYmxlZEFjdGlvbnMuaW5kZXhPZigndXBkYXRlLWFueS1tZXNzYWdlJykgIT09IC0xLFxuICAgIH0sXG4gICAge1xuICAgICAgYWN0aW9uTmFtZTogJ2RlbGV0ZScsXG4gICAgICBhY3Rpb25MYWJlbE9yVHJhbnNsYXRpb25LZXk6ICdzdHJlYW1DaGF0LkRlbGV0ZScsXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLW1pc3VzZWQtcHJvbWlzZXNcbiAgICAgIGFjdGlvbkhhbmRsZXI6IGFzeW5jIChtZXNzYWdlOiBTdHJlYW1NZXNzYWdlPFQ+KSA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgYXdhaXQgdGhpcy5jaGFubmVsU2VydmljZS5kZWxldGVNZXNzYWdlKG1lc3NhZ2UpO1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5hZGRUZW1wb3JhcnlOb3RpZmljYXRpb24oXG4gICAgICAgICAgICAnc3RyZWFtQ2hhdC5FcnJvciBkZWxldGluZyBtZXNzYWdlJ1xuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBpc1Zpc2libGU6IChlbmFibGVkQWN0aW9uczogc3RyaW5nW10sIGlzTWluZTogYm9vbGVhbikgPT5cbiAgICAgICAgKChlbmFibGVkQWN0aW9ucy5pbmRleE9mKCdkZWxldGUnKSAhPT0gLTEgfHxcbiAgICAgICAgICBlbmFibGVkQWN0aW9ucy5pbmRleE9mKCdkZWxldGUtb3duLW1lc3NhZ2UnKSAhPT0gLTEpICYmXG4gICAgICAgICAgaXNNaW5lKSB8fFxuICAgICAgICBlbmFibGVkQWN0aW9ucy5pbmRleE9mKCdkZWxldGUtYW55JykgIT09IC0xIHx8XG4gICAgICAgIGVuYWJsZWRBY3Rpb25zLmluZGV4T2YoJ2RlbGV0ZS1hbnktbWVzc2FnZScpICE9PSAtMSxcbiAgICB9LFxuICAgIHtcbiAgICAgIGFjdGlvbk5hbWU6ICdjb3B5LW1lc3NhZ2UtdGV4dCcsXG4gICAgICBhY3Rpb25MYWJlbE9yVHJhbnNsYXRpb25LZXk6ICdzdHJlYW1DaGF0LkNvcHkgdGV4dCcsXG4gICAgICBpc1Zpc2libGU6IChfOiBzdHJpbmdbXSwgX186IGJvb2xlYW4sIG1lc3NhZ2U6IFN0cmVhbU1lc3NhZ2U8VD4pID0+IHtcbiAgICAgICAgY29uc3QgaXNDbGlwYm9hcmRTdXBwb3J0ZWQgPSBuYXZpZ2F0b3I/LmNsaXBib2FyZD8ud3JpdGUgIT09IHVuZGVmaW5lZDtcbiAgICAgICAgaWYgKCFpc0NsaXBib2FyZFN1cHBvcnRlZCAmJiAhdGhpcy5oYXNEaXNwbGF5ZWRDbGlwYm9hcmRXYXJuaW5nKSB7XG4gICAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgICAgYFtTdHJlYW0gQ2hhdF0gQ29weSBhY3Rpb24gaXMgZGlzYWJsZWQgYmVjYXVzZSBjbGlwYm9hcmQgQVBJIGlzbid0IGF2YWlsYWJsZSwgcGxlYXNlIGNoZWNrIHNlY3VyaXR5IGFuZCBicm93c2VyIHJlcXVpcmVtZW50czogaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0NsaXBib2FyZC93cml0ZSNzZWN1cml0eV9jb25zaWRlcmF0aW9uc2BcbiAgICAgICAgICApO1xuICAgICAgICAgIHRoaXMuaGFzRGlzcGxheWVkQ2xpcGJvYXJkV2FybmluZyA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAhIW1lc3NhZ2UudGV4dCAmJlxuICAgICAgICAgIChtZXNzYWdlLnR5cGUgPT09ICdyZWd1bGFyJyB8fCBtZXNzYWdlLnR5cGUgPT09ICdyZXBseScpICYmXG4gICAgICAgICAgaXNDbGlwYm9hcmRTdXBwb3J0ZWRcbiAgICAgICAgKTtcbiAgICAgIH0sXG4gICAgICBhY3Rpb25IYW5kbGVyOiAoXG4gICAgICAgIG1lc3NhZ2U6IFN0cmVhbU1lc3NhZ2U8VD4sXG4gICAgICAgIGV4dHJhUGFyYW1zOiBNZXNzYWdlQWN0aW9uSGFuZGxlckV4dHJhUGFyYW1zXG4gICAgICApID0+IHtcbiAgICAgICAgY29uc3QgZmFsbGJhY2tDb250ZW50ID0gbWVzc2FnZS50ZXh0IHx8ICcnO1xuICAgICAgICAvLyBBbmRyb2lkIENocm9tZSBjYW4gb25seSBjb3B5IHBsYWluIHRleHQ6IGh0dHBzOi8vaXNzdWVzLmNocm9taXVtLm9yZy9pc3N1ZXMvNDA4NTE1MDJcbiAgICAgICAgdm9pZCBuYXZpZ2F0b3IuY2xpcGJvYXJkLndyaXRlKFtcbiAgICAgICAgICBuZXcgQ2xpcGJvYXJkSXRlbSh7XG4gICAgICAgICAgICAndGV4dC9wbGFpbic6IG5ldyBCbG9iKFxuICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgZXh0cmFQYXJhbXMubWVzc2FnZVRleHRIdG1sRWxlbWVudD8uaW5uZXJUZXh0IHx8XG4gICAgICAgICAgICAgICAgICBmYWxsYmFja0NvbnRlbnQsXG4gICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgIHsgdHlwZTogJ3RleHQvcGxhaW4nIH1cbiAgICAgICAgICAgICksXG4gICAgICAgICAgICAndGV4dC9odG1sJzogbmV3IEJsb2IoXG4gICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBleHRyYVBhcmFtcy5tZXNzYWdlVGV4dEh0bWxFbGVtZW50Py5pbm5lckhUTUwgfHxcbiAgICAgICAgICAgICAgICAgIGZhbGxiYWNrQ29udGVudCxcbiAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgeyB0eXBlOiAndGV4dC9odG1sJyB9XG4gICAgICAgICAgICApLFxuICAgICAgICAgIH0pLFxuICAgICAgICBdKTtcbiAgICAgIH0sXG4gICAgfSxcbiAgXTtcbiAgLyoqXG4gICAqIFRoZSBidWlsdC1pbiBjb21wb25lbnRzIHdpbGwgaGFuZGxlIGNoYW5nZXMgdG8gdGhpcyBvYnNlcnZhYmxlLlxuICAgKi9cbiAgbWVzc2FnZVRvRWRpdCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFN0cmVhbU1lc3NhZ2U8VD4gfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG4gIC8qKlxuICAgKiBZb3UgY2FuIHBhc3MgeW91ciBvd24gY3VzdG9tIGFjdGlvbnMgdGhhdCB3aWxsIGJlIGRpc3BsYXllZCBpbnNpZGUgdGhlIGJ1aWx0LWluIG1lc3NhZ2UgYWN0aW9ucyBjb21wb25lbnRcbiAgICovXG4gIGN1c3RvbUFjdGlvbnMkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxDdXN0b21NZXNzYWdlQWN0aW9uSXRlbVtdPihbXSk7XG4gIC8qKlxuICAgKiBCeSBkZWZhdWx0IHRoZSBbYE1lc3NhZ2VDb21wb25lbnRgXSguLi8uLi9jb21wb25lbnRzL01lc3NhZ2VDb21wb25lbnQpIHdpbGwgZGlzcGxheSB0aGUgW2BNZXNzYWdlQWN0aW9uc0JveENvbXBvbmVudGBdKC4uLy4uL2NvbXBvbmVudHMvTWVzc2FnZUFjdGlvbnNCb3hDb21wb25lbnQpLiBZb3UgY2FuIG92ZXJyaWRlIHRoYXQgYmVoYXZpb3IgYnkgcHJvdmlkaW5nIHlvdXIgb3duIGV2ZW50IGhhbmRsZXIuXG4gICAqL1xuICBjdXN0b21BY3Rpb25DbGlja0hhbmRsZXI/OiAoZGV0YWlsczogTWVzc2FnZUFjdGlvbnNDbGlja0RldGFpbHM8VD4pID0+IHZvaWQ7XG4gIHByaXZhdGUgaGFzRGlzcGxheWVkQ2xpcGJvYXJkV2FybmluZyA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgY2hhdENsaWVudFNlcnZpY2U6IENoYXRDbGllbnRTZXJ2aWNlLFxuICAgIHByaXZhdGUgbm90aWZpY2F0aW9uU2VydmljZTogTm90aWZpY2F0aW9uU2VydmljZSxcbiAgICBwcml2YXRlIGNoYW5uZWxTZXJ2aWNlOiBDaGFubmVsU2VydmljZVxuICApIHtcbiAgICBjb21iaW5lTGF0ZXN0KFtcbiAgICAgIHRoaXMubWVzc2FnZVRvRWRpdCQsXG4gICAgICB0aGlzLmNoYW5uZWxTZXJ2aWNlLmFjdGl2ZUNoYW5uZWwkLFxuICAgIF0pLnN1YnNjcmliZSgoW21lc3NhZ2VUb0VkaXQsIGFjdGl2ZUNoYW5uZWxdKSA9PiB7XG4gICAgICBpZiAoXG4gICAgICAgIG1lc3NhZ2VUb0VkaXQgJiZcbiAgICAgICAgKCFhY3RpdmVDaGFubmVsIHx8IGFjdGl2ZUNoYW5uZWw/LmNpZCAhPT0gbWVzc2FnZVRvRWRpdC5jaWQpXG4gICAgICApIHtcbiAgICAgICAgdGhpcy5tZXNzYWdlVG9FZGl0JC5uZXh0KHVuZGVmaW5lZCk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgY29tYmluZUxhdGVzdChbXG4gICAgICB0aGlzLm1lc3NhZ2VUb0VkaXQkLFxuICAgICAgdGhpcy5jaGFubmVsU2VydmljZS5hY3RpdmVQYXJlbnRNZXNzYWdlSWQkLFxuICAgIF0pLnN1YnNjcmliZSgoW21lc3NhZ2VUb0VkaXQsIHBhcmVudE1lc3NhZ2VJZF0pID0+IHtcbiAgICAgIGlmIChcbiAgICAgICAgbWVzc2FnZVRvRWRpdCAmJlxuICAgICAgICBtZXNzYWdlVG9FZGl0LnBhcmVudF9pZCAmJlxuICAgICAgICBtZXNzYWdlVG9FZGl0LnBhcmVudF9pZCAhPT0gcGFyZW50TWVzc2FnZUlkXG4gICAgICApIHtcbiAgICAgICAgdGhpcy5tZXNzYWdlVG9FZGl0JC5uZXh0KHVuZGVmaW5lZCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogVGhpcyBtZXRob2QgcmV0dXJucyBob3cgbWFueSBhdXRob3JpemVkIGFjdGlvbnMgYXJlIGF2YWlsYWJsZSB0byB0aGUgZ2l2ZW4gbWVzc2FnZVxuICAgKiBAcGFyYW0gbWVzc2FnZVxuICAgKiBAcGFyYW0gZW5hYmxlZEFjdGlvbnNcbiAgICogQHJldHVybnMgdGhlIGNvdW50XG4gICAqL1xuICBnZXRBdXRob3JpemVkTWVzc2FnZUFjdGlvbnNDb3VudChcbiAgICBtZXNzYWdlOiBTdHJlYW1NZXNzYWdlPFQ+LFxuICAgIGVuYWJsZWRBY3Rpb25zOiBzdHJpbmdbXVxuICApIHtcbiAgICBjb25zdCBjdXN0b21BY3Rpb25zID0gdGhpcy5jdXN0b21BY3Rpb25zJC5nZXRWYWx1ZSgpIHx8IFtdO1xuICAgIGNvbnN0IGFsbEFjdGlvbnMgPSBbLi4udGhpcy5kZWZhdWx0QWN0aW9ucywgLi4uY3VzdG9tQWN0aW9uc107XG4gICAgY29uc3QgY3VycmVudFVzZXJJZCA9IHRoaXMuY2hhdENsaWVudFNlcnZpY2UuY2hhdENsaWVudC51c2VyPy5pZDtcbiAgICBjb25zdCBpc01pbmUgPSBtZXNzYWdlLnVzZXJfaWQgPT09IGN1cnJlbnRVc2VySWQ7XG5cbiAgICByZXR1cm4gYWxsQWN0aW9ucy5maWx0ZXIoKGl0ZW0pID0+XG4gICAgICBpdGVtLmlzVmlzaWJsZShlbmFibGVkQWN0aW9ucywgaXNNaW5lLCBtZXNzYWdlKVxuICAgICkubGVuZ3RoO1xuICB9XG59XG4iXX0=
@@ -82,6 +82,7 @@ export class AutocompleteTextareaComponent {
82
82
  mentionSelect: (item, triggerChar) => this.itemSelectedFromAutocompleteList(item, triggerChar),
83
83
  };
84
84
  this.searchTerm$ = new BehaviorSubject('');
85
+ this.isViewInited = false;
85
86
  this.searchTerm$.pipe(debounceTime(300)).subscribe((searchTerm) => {
86
87
  if (searchTerm.startsWith(this.mentionTriggerChar)) {
87
88
  void this.updateMentionOptions(searchTerm);
@@ -136,8 +137,19 @@ export class AutocompleteTextareaComponent {
136
137
  this.messageInput.nativeElement.style.height = 'auto';
137
138
  this.updateMentionedUsersFromText();
138
139
  }
140
+ else if (changes.value &&
141
+ this.value &&
142
+ this.messageInput &&
143
+ this.isViewInited) {
144
+ setTimeout(() => {
145
+ if (this.messageInput.nativeElement.scrollHeight > 0) {
146
+ this.adjustTextareaHeight();
147
+ }
148
+ }, 0);
149
+ }
139
150
  }
140
151
  ngAfterViewInit() {
152
+ this.isViewInited = true;
141
153
  if (this.messageInput.nativeElement.scrollHeight > 0) {
142
154
  this.adjustTextareaHeight();
143
155
  }
@@ -150,9 +162,7 @@ export class AutocompleteTextareaComponent {
150
162
  this.mentionedUsers.push((item.user ? item.user : item));
151
163
  this.userMentions.next([...this.mentionedUsers]);
152
164
  }
153
- return (triggerChar +
154
- item.autocompleteLabel +
155
- (triggerChar === this.commandTriggerChar ? ' ' : ''));
165
+ return triggerChar + item.autocompleteLabel + ' ';
156
166
  }
157
167
  autcompleteSearchTermChanged(searchTerm) {
158
168
  if (searchTerm === this.mentionTriggerChar) {
@@ -228,10 +238,10 @@ export class AutocompleteTextareaComponent {
228
238
  }
229
239
  }
230
240
  AutocompleteTextareaComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: AutocompleteTextareaComponent, deps: [{ token: i1.ChannelService }, { token: i2.ChatClientService }, { token: i3.TransliterationService }, { token: i4.EmojiInputService }, { token: i5.CustomTemplatesService }, { token: i6.ThemeService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
231
- AutocompleteTextareaComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.4", type: AutocompleteTextareaComponent, selector: "stream-autocomplete-textarea", inputs: { value: "value", placeholder: "placeholder", areMentionsEnabled: "areMentionsEnabled", inputMode: "inputMode", mentionScope: "mentionScope", autoFocus: "autoFocus" }, outputs: { valueChange: "valueChange", send: "send", userMentions: "userMentions" }, host: { properties: { "class": "this.class" } }, viewQueries: [{ propertyName: "messageInput", first: true, predicate: ["input"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<textarea\n #input\n data-testid=\"textarea\"\n class=\"\n rta__textarea\n str-chat__textarea__textarea\n str-chat__angular-textarea\n str-chat__message-textarea\n \"\n rows=\"1\"\n [value]=\"value || ''\"\n [autofocus]=\"autoFocus\"\n placeholder=\"{{ placeholder | translate }}\"\n [mentionConfig]=\"autocompleteConfig\"\n [mentionListTemplate]=\"autocompleteItem\"\n (input)=\"inputChanged()\"\n (keydown.enter)=\"enterHit($event)\"\n (searchTerm)=\"autcompleteSearchTermChanged($event)\"\n (blur)=\"inputLeft()\"\n></textarea>\n<ng-template #autocompleteItem let-item=\"item\">\n <div class=\"rta rta__item str-chat__emojisearch__item\" [ngSwitch]=\"item.type\">\n <div *ngSwitchCase=\"'mention'\" class=\"rta__entity\">\n <ng-container\n *ngTemplateOutlet=\"\n mentionAutocompleteItemTemplate || defaultMentionTemplate;\n context: { item: item }\n \"\n ></ng-container>\n </div>\n <div *ngSwitchCase=\"'command'\" class=\"rta__entity\">\n <ng-container\n *ngTemplateOutlet=\"\n commandAutocompleteItemTemplate || defaultCommandTemplate;\n context: { item: item }\n \"\n ></ng-container>\n </div>\n </div>\n</ng-template>\n\n<ng-template #defaultCommandTemplate let-item=\"item\">\n <div class=\"str-chat__slash-command\">\n <span class=\"str-chat__slash-command-header\">\n <strong\n class=\"str-chat__slash-command-name\"\n data-testclass=\"command-name\"\n >{{ item.name }}</strong\n >\n <span class=\"str-chat__slash-command-args\"\n >/{{ item.name }} {{ item.args }}</span\n >\n </span>\n <br />\n </div>\n</ng-template>\n\n<ng-template #defaultMentionTemplate let-item=\"item\">\n <div class=\"str-chat__user-item\">\n <stream-avatar-placeholder\n data-testclass=\"avatar\"\n class=\"str-chat__avatar str-chat__avatar--circle\"\n type=\"user\"\n location=\"autocomplete-item\"\n [ngStyle]=\"{ height: '30px' }\"\n [size]=\"30\"\n [imageUrl]=\"item.image || item.user?.image\"\n [name]=\"item.autocompleteLabel\"\n [user]=\"item.user || item\"\n ></stream-avatar-placeholder>\n <span data-testclass=\"username\" class=\"str-chat__user-item--name\">{{\n item.autocompleteLabel\n }}</span>\n </div>\n</ng-template>\n", dependencies: [{ kind: "directive", type: i7.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i7.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i7.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i7.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i8.MentionDirective, selector: "[mention], [mentionConfig]", inputs: ["mentionConfig", "mention", "mentionListTemplate"], outputs: ["searchTerm", "itemSelected", "opened", "closed"] }, { kind: "component", type: i9.AvatarPlaceholderComponent, selector: "stream-avatar-placeholder", inputs: ["name", "imageUrl", "size", "location", "channel", "user", "type", "initialsType", "showOnlineIndicator"] }, { kind: "pipe", type: i10.TranslatePipe, name: "translate" }] });
241
+ AutocompleteTextareaComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.0.4", type: AutocompleteTextareaComponent, selector: "stream-autocomplete-textarea", inputs: { value: "value", placeholder: "placeholder", areMentionsEnabled: "areMentionsEnabled", inputMode: "inputMode", mentionScope: "mentionScope", autoFocus: "autoFocus" }, outputs: { valueChange: "valueChange", send: "send", userMentions: "userMentions" }, host: { properties: { "class": "this.class" } }, viewQueries: [{ propertyName: "messageInput", first: true, predicate: ["input"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<textarea\n #input\n data-testid=\"textarea\"\n class=\"\n rta__textarea\n str-chat__textarea__textarea\n str-chat__angular-textarea\n str-chat__message-textarea\n \"\n rows=\"1\"\n [value]=\"value || ''\"\n [autofocus]=\"autoFocus\"\n placeholder=\"{{ placeholder | translate }}\"\n [mentionConfig]=\"autocompleteConfig\"\n [mentionListTemplate]=\"autocompleteItem\"\n (input)=\"inputChanged()\"\n (keydown.enter)=\"enterHit($event)\"\n (searchTerm)=\"autcompleteSearchTermChanged($event)\"\n (blur)=\"inputLeft()\"\n></textarea>\n<ng-template #autocompleteItem let-item=\"item\">\n <div class=\"rta rta__item str-chat__emojisearch__item\" [ngSwitch]=\"item.type\">\n <div *ngSwitchCase=\"'mention'\" class=\"rta__entity\">\n <ng-container\n *ngTemplateOutlet=\"\n mentionAutocompleteItemTemplate || defaultMentionTemplate;\n context: { item: item }\n \"\n ></ng-container>\n </div>\n <div *ngSwitchCase=\"'command'\" class=\"rta__entity\">\n <ng-container\n *ngTemplateOutlet=\"\n commandAutocompleteItemTemplate || defaultCommandTemplate;\n context: { item: item }\n \"\n ></ng-container>\n </div>\n </div>\n</ng-template>\n\n<ng-template #defaultCommandTemplate let-item=\"item\">\n <div class=\"str-chat__slash-command\">\n <span class=\"str-chat__slash-command-header\">\n <strong\n class=\"str-chat__slash-command-name\"\n data-testclass=\"command-name\"\n >{{ item.name }}</strong\n >\n <span class=\"str-chat__slash-command-args\"\n >/{{ item.name }} {{ item.args }}</span\n >\n </span>\n <br />\n </div>\n</ng-template>\n\n<ng-template #defaultMentionTemplate let-item=\"item\">\n <div class=\"str-chat__user-item\">\n <stream-avatar-placeholder\n data-testclass=\"avatar\"\n class=\"str-chat__avatar str-chat__avatar--circle\"\n type=\"user\"\n location=\"autocomplete-item\"\n [imageUrl]=\"item.image || item.user?.image\"\n [name]=\"item.autocompleteLabel\"\n [user]=\"item.user || item\"\n ></stream-avatar-placeholder>\n <span data-testclass=\"username\" class=\"str-chat__user-item--name\">{{\n item.autocompleteLabel\n }}</span>\n </div>\n</ng-template>\n", dependencies: [{ kind: "directive", type: i7.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i7.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i7.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i8.MentionDirective, selector: "[mention], [mentionConfig]", inputs: ["mentionConfig", "mention", "mentionListTemplate"], outputs: ["searchTerm", "itemSelected", "opened", "closed"] }, { kind: "component", type: i9.AvatarPlaceholderComponent, selector: "stream-avatar-placeholder", inputs: ["name", "imageUrl", "location", "channel", "user", "type", "initialsType", "showOnlineIndicator"] }, { kind: "pipe", type: i10.TranslatePipe, name: "translate" }] });
232
242
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImport: i0, type: AutocompleteTextareaComponent, decorators: [{
233
243
  type: Component,
234
- args: [{ selector: 'stream-autocomplete-textarea', template: "<textarea\n #input\n data-testid=\"textarea\"\n class=\"\n rta__textarea\n str-chat__textarea__textarea\n str-chat__angular-textarea\n str-chat__message-textarea\n \"\n rows=\"1\"\n [value]=\"value || ''\"\n [autofocus]=\"autoFocus\"\n placeholder=\"{{ placeholder | translate }}\"\n [mentionConfig]=\"autocompleteConfig\"\n [mentionListTemplate]=\"autocompleteItem\"\n (input)=\"inputChanged()\"\n (keydown.enter)=\"enterHit($event)\"\n (searchTerm)=\"autcompleteSearchTermChanged($event)\"\n (blur)=\"inputLeft()\"\n></textarea>\n<ng-template #autocompleteItem let-item=\"item\">\n <div class=\"rta rta__item str-chat__emojisearch__item\" [ngSwitch]=\"item.type\">\n <div *ngSwitchCase=\"'mention'\" class=\"rta__entity\">\n <ng-container\n *ngTemplateOutlet=\"\n mentionAutocompleteItemTemplate || defaultMentionTemplate;\n context: { item: item }\n \"\n ></ng-container>\n </div>\n <div *ngSwitchCase=\"'command'\" class=\"rta__entity\">\n <ng-container\n *ngTemplateOutlet=\"\n commandAutocompleteItemTemplate || defaultCommandTemplate;\n context: { item: item }\n \"\n ></ng-container>\n </div>\n </div>\n</ng-template>\n\n<ng-template #defaultCommandTemplate let-item=\"item\">\n <div class=\"str-chat__slash-command\">\n <span class=\"str-chat__slash-command-header\">\n <strong\n class=\"str-chat__slash-command-name\"\n data-testclass=\"command-name\"\n >{{ item.name }}</strong\n >\n <span class=\"str-chat__slash-command-args\"\n >/{{ item.name }} {{ item.args }}</span\n >\n </span>\n <br />\n </div>\n</ng-template>\n\n<ng-template #defaultMentionTemplate let-item=\"item\">\n <div class=\"str-chat__user-item\">\n <stream-avatar-placeholder\n data-testclass=\"avatar\"\n class=\"str-chat__avatar str-chat__avatar--circle\"\n type=\"user\"\n location=\"autocomplete-item\"\n [ngStyle]=\"{ height: '30px' }\"\n [size]=\"30\"\n [imageUrl]=\"item.image || item.user?.image\"\n [name]=\"item.autocompleteLabel\"\n [user]=\"item.user || item\"\n ></stream-avatar-placeholder>\n <span data-testclass=\"username\" class=\"str-chat__user-item--name\">{{\n item.autocompleteLabel\n }}</span>\n </div>\n</ng-template>\n" }]
244
+ args: [{ selector: 'stream-autocomplete-textarea', template: "<textarea\n #input\n data-testid=\"textarea\"\n class=\"\n rta__textarea\n str-chat__textarea__textarea\n str-chat__angular-textarea\n str-chat__message-textarea\n \"\n rows=\"1\"\n [value]=\"value || ''\"\n [autofocus]=\"autoFocus\"\n placeholder=\"{{ placeholder | translate }}\"\n [mentionConfig]=\"autocompleteConfig\"\n [mentionListTemplate]=\"autocompleteItem\"\n (input)=\"inputChanged()\"\n (keydown.enter)=\"enterHit($event)\"\n (searchTerm)=\"autcompleteSearchTermChanged($event)\"\n (blur)=\"inputLeft()\"\n></textarea>\n<ng-template #autocompleteItem let-item=\"item\">\n <div class=\"rta rta__item str-chat__emojisearch__item\" [ngSwitch]=\"item.type\">\n <div *ngSwitchCase=\"'mention'\" class=\"rta__entity\">\n <ng-container\n *ngTemplateOutlet=\"\n mentionAutocompleteItemTemplate || defaultMentionTemplate;\n context: { item: item }\n \"\n ></ng-container>\n </div>\n <div *ngSwitchCase=\"'command'\" class=\"rta__entity\">\n <ng-container\n *ngTemplateOutlet=\"\n commandAutocompleteItemTemplate || defaultCommandTemplate;\n context: { item: item }\n \"\n ></ng-container>\n </div>\n </div>\n</ng-template>\n\n<ng-template #defaultCommandTemplate let-item=\"item\">\n <div class=\"str-chat__slash-command\">\n <span class=\"str-chat__slash-command-header\">\n <strong\n class=\"str-chat__slash-command-name\"\n data-testclass=\"command-name\"\n >{{ item.name }}</strong\n >\n <span class=\"str-chat__slash-command-args\"\n >/{{ item.name }} {{ item.args }}</span\n >\n </span>\n <br />\n </div>\n</ng-template>\n\n<ng-template #defaultMentionTemplate let-item=\"item\">\n <div class=\"str-chat__user-item\">\n <stream-avatar-placeholder\n data-testclass=\"avatar\"\n class=\"str-chat__avatar str-chat__avatar--circle\"\n type=\"user\"\n location=\"autocomplete-item\"\n [imageUrl]=\"item.image || item.user?.image\"\n [name]=\"item.autocompleteLabel\"\n [user]=\"item.user || item\"\n ></stream-avatar-placeholder>\n <span data-testclass=\"username\" class=\"str-chat__user-item--name\">{{\n item.autocompleteLabel\n }}</span>\n </div>\n</ng-template>\n" }]
235
245
  }], ctorParameters: function () { return [{ type: i1.ChannelService }, { type: i2.ChatClientService }, { type: i3.TransliterationService }, { type: i4.EmojiInputService }, { type: i5.CustomTemplatesService }, { type: i6.ThemeService }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { class: [{
236
246
  type: HostBinding
237
247
  }], value: [{
@@ -256,4 +266,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.4", ngImpor
256
266
  type: ViewChild,
257
267
  args: ['input']
258
268
  }] } });
259
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0b2NvbXBsZXRlLXRleHRhcmVhLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3N0cmVhbS1jaGF0LWFuZ3VsYXIvc3JjL2xpYi9tZXNzYWdlLWlucHV0L2F1dG9jb21wbGV0ZS10ZXh0YXJlYS9hdXRvY29tcGxldGUtdGV4dGFyZWEuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc3RyZWFtLWNoYXQtYW5ndWxhci9zcmMvbGliL21lc3NhZ2UtaW5wdXQvYXV0b2NvbXBsZXRlLXRleHRhcmVhL2F1dG9jb21wbGV0ZS10ZXh0YXJlYS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBR0wsU0FBUyxFQUVULFlBQVksRUFDWixXQUFXLEVBQ1gsS0FBSyxFQUVMLE1BQU0sRUFHTixTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUM7QUFRdkIsT0FBTyxFQUFFLGVBQWUsRUFBZ0IsTUFBTSxNQUFNLENBQUM7QUFLckQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7Ozs7Ozs7Ozs7QUFNOUM7O0dBRUc7QUFNSCxNQUFNLE9BQU8sNkJBQTZCO0lBd0Z4QyxZQUNVLGNBQThCLEVBQzlCLGlCQUFvQyxFQUNwQyxzQkFBOEMsRUFDOUMsaUJBQW9DLEVBQ3BDLHNCQUE4QyxFQUM5QyxZQUEwQixFQUMxQixLQUF3QjtRQU54QixtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFDOUIsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFtQjtRQUNwQywyQkFBc0IsR0FBdEIsc0JBQXNCLENBQXdCO1FBQzlDLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBbUI7UUFDcEMsMkJBQXNCLEdBQXRCLHNCQUFzQixDQUF3QjtRQUM5QyxpQkFBWSxHQUFaLFlBQVksQ0FBYztRQUMxQixVQUFLLEdBQUwsS0FBSyxDQUFtQjtRQTVGbkIsVUFB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Z0JBYXFCLFlBQVk7c0JBQXZDLFNBQVM7dUJBQUMsT0FBTyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEFmdGVyVmlld0luaXQsXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgSG9zdEJpbmRpbmcsXG4gIElucHV0LFxuICBPbkNoYW5nZXMsXG4gIE91dHB1dCxcbiAgU2ltcGxlQ2hhbmdlcyxcbiAgVGVtcGxhdGVSZWYsXG4gIFZpZXdDaGlsZCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBNZW50aW9uQ29uZmlnLCBNZW50aW9ucyB9IGZyb20gJ2FuZ3VsYXItbWVudGlvbnMnO1xuaW1wb3J0IHtcbiAgTWVudGlvbkF1dGNvbXBsZXRlTGlzdEl0ZW1Db250ZXh0LFxuICBNZW50aW9uQXV0Y29tcGxldGVMaXN0SXRlbSxcbiAgQ29tbWFuZEF1dG9jb21wbGV0ZUxpc3RJdGVtQ29udGV4dCxcbn0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuXG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgVXNlclJlc3BvbnNlIH0gZnJvbSAnc3RyZWFtLWNoYXQnO1xuaW1wb3J0IHsgQ2hhbm5lbFNlcnZpY2UgfSBmcm9tICcuLi8uLi9jaGFubmVsLnNlcnZpY2UnO1xuaW1wb3J0IHsgVGV4dGFyZWFJbnRlcmZhY2UgfSBmcm9tICcuLi90ZXh0YXJlYS5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgQ2hhdENsaWVudFNlcnZpY2UgfSBmcm9tICcuLi8uLi9jaGF0LWNsaWVudC5zZXJ2aWNlJztcbmltcG9ydCB7IGRlYm91bmNlVGltZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IFRyYW5zbGl0ZXJhdGlvblNlcnZpY2UgfSBmcm9tICcuLi8uLi90cmFuc2xpdGVyYXRpb24uc2VydmljZSc7XG5pbXBvcnQgeyBFbW9qaUlucHV0U2VydmljZSB9IGZyb20gJy4uL2Vtb2ppLWlucHV0LnNlcnZpY2UnO1xuaW1wb3J0IHsgQ3VzdG9tVGVtcGxhdGVzU2VydmljZSB9IGZyb20gJy4uLy4uL2N1c3RvbS10ZW1wbGF0ZXMuc2VydmljZSc7XG5pbXBvcnQgeyBUaGVtZVNlcnZpY2UgfSBmcm9tICcuLi8uLi90aGVtZS5zZXJ2aWNlJztcblxuLyoqXG4gKiBUaGUgYEF1dG9jb21wbGV0ZVRleHRhcmVhYCBjb21wb25lbnQgaXMgdXNlZCBieSB0aGUgW2BNZXNzYWdlSW5wdXRgXSguL01lc3NhZ2VJbnB1dENvbXBvbmVudC5tZHgpIGNvbXBvbmVudCB0byBkaXNwbGF5IHRoZSBpbnB1dCBIVE1MIGVsZW1lbnQgd2hlcmUgdXNlcnMgY2FuIHR5cGUgdGhlaXIgbWVzc2FnZS5cbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnc3RyZWFtLWF1dG9jb21wbGV0ZS10ZXh0YXJlYScsXG4gIHRlbXBsYXRlVXJsOiAnLi9hdXRvY29tcGxldGUtdGV4dGFyZWEuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZXM6IFtdLFxufSlcbmV4cG9ydCBjbGFzcyBBdXRvY29tcGxldGVUZXh0YXJlYUNvbXBvbmVudFxuICBpbXBsZW1lbnRzIFRleHRhcmVhSW50ZXJmYWNlLCBPbkNoYW5nZXMsIEFmdGVyVmlld0luaXRcbntcbiAgQEhvc3RCaW5kaW5nKCkgY2xhc3MgPVxuICAgICdzdHItY2hhdF9fdGV4dGFyZWEgc3RyLWNoYXRfX21lc3NhZ2UtdGV4dGFyZWEtYW5ndWxhci1ob3N0JztcbiAgLyoqXG4gICAqIFRoZSB2YWx1ZSBvZiB0aGUgaW5wdXQgSFRNTCBlbGVtZW50LlxuICAgKi9cbiAgQElucHV0KCkgdmFsdWUgPSAnJztcbiAgLyoqXG4gICAqIFBsYWNlaG9sZGVyIG9mIHRoZSB0ZXh0YXJlYVxuICAgKi9cbiAgQElucHV0KCkgcGxhY2Vob2xkZXIgPSAnJztcbiAgLyoqXG4gICAqIElmIHRydWUsIHVzZXJzIGNhbiBtZW50aW9uIG90aGVyIHVzZXJzIGluIG1lc3NhZ2VzLiBZb3UgY2FuIGFsc28gc2V0IHRoaXMgaW5wdXQgb24gdGhlIFtgTWVzc2FnZUlucHV0YF0oLi9NZXNzYWdlSW5wdXRDb21wb25lbnQubWR4LyNpbnB1dHMtYW5kLW91dHB1dHMpIGNvbXBvbmVudC5cbiAgICovXG4gIEBJbnB1dCgpIGFyZU1lbnRpb25zRW5hYmxlZDogYm9vbGVhbiB8IHVuZGVmaW5lZCA9IHRydWU7XG4gIC8qKlxuICAgKiBTZWUgW2BNZXNzYWdlSW5wdXRDb25maWdTZXJ2aWNlYF0oLi4vc2VydmljZXMvTWVzc2FnZUlucHV0Q29uZmlnU2VydmljZS5tZHgpIGZvciBtb3JlIGluZm9ybWF0aW9uXG4gICAqL1xuICBASW5wdXQoKSBpbnB1dE1vZGUhOiAnZGVza3RvcCcgfCAnbW9iaWxlJztcbiAgLyoqXG4gICAqIFRoZSBzY29wZSBmb3IgdXNlciBtZW50aW9ucywgZWl0aGVyIG1lbWJlcnMgb2YgdGhlIGN1cnJlbnQgY2hhbm5lbCBvZiBtZW1iZXJzIG9mIHRoZSBhcHBsaWNhdGlvbi4gWW91IGNhbiBhbHNvIHNldCB0aGlzIGlucHV0IG9uIHRoZSBbYE1lc3NhZ2VJbnB1dGBdKC4vTWVzc2FnZUlucHV0Q29tcG9uZW50Lm1keC8jaW5wdXRzLWFuZC1vdXRwdXRzKSBjb21wb25lbnQuXG4gICAqL1xuICBASW5wdXQoKSBtZW50aW9uU2NvcGU6ICdjaGFubmVsJyB8ICdhcHBsaWNhdGlvbicgPSAnY2hhbm5lbCc7XG4gIC8qKlxuICAgKiBFbmFibGVzIG9yIGRpc2FibGVzIGF1dG8gZm9jdXMgb24gdGhlIHRleHRhcmVhIGVsZW1lbnRcbiAgICovXG4gIEBJbnB1dCgpIGF1dG9Gb2N1cyA9IHRydWU7XG4gIC8qKlxuICAgKiBFbWl0cyB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgaW5wdXQgZWxlbWVudCB3aGVuIGEgdXNlciB0eXBlcy5cbiAgICovXG4gIEBPdXRwdXQoKSByZWFkb25seSB2YWx1ZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xuICAvKipcbiAgICogRW1pdHMgd2hlbiBhIHVzZXIgdHJpZ2dlcnMgYSBtZXNzYWdlIHNlbmQgZXZlbnQgKHRoaXMgaGFwcGVucyB3aGVuIHRoZXkgaGl0IHRoZSBgRW50ZXJgIGtleSkuXG4gICAqL1xuICBAT3V0cHV0KCkgcmVhZG9ubHkgc2VuZCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcbiAgLyoqXG4gICAqIEVtaXRzIHRoZSBhcnJheSBvZiB1c2VycyB0aGF0IGFyZSBtZW50aW9uZWQgaW4gdGhlIG1lc3NhZ2UsIGl0IGlzIHVwZGF0ZWQgd2hlbiBhIHVzZXIgbWVudGlvbnMgYSBuZXcgdXNlciBvciBkZWxldGVzIGEgbWVudGlvbi5cbiAgICovXG4gIEBPdXRwdXQoKSByZWFkb25seSB1c2VyTWVudGlvbnMgPSBuZXcgRXZlbnRFbWl0dGVyPFVzZXJSZXNwb25zZVtdPigpO1xuICBtZW50aW9uQXV0b2NvbXBsZXRlSXRlbVRlbXBsYXRlOlxuICAgIHwgVGVtcGxhdGVSZWY8TWVudGlvbkF1dGNvbXBsZXRlTGlzdEl0ZW1Db250ZXh0PlxuICAgIHwgdW5kZWZpbmVkO1xuICBjb21tYW5kQXV0b2NvbXBsZXRlSXRlbVRlbXBsYXRlOlxuICAgIHwgVGVtcGxhdGVSZWY8Q29tbWFuZEF1dG9jb21wbGV0ZUxpc3RJdGVtQ29udGV4dD5cbiAgICB8IHVuZGVmaW5lZDtcbiAgcHJpdmF0ZSByZWFkb25seSBhdXRvY29tcGxldGVLZXkgPSAnYXV0b2NvbXBsZXRlTGFiZWwnO1xuICBwcml2YXRlIHJlYWRvbmx5IG1lbnRpb25UcmlnZ2VyQ2hhciA9ICdAJztcbiAgcHJpdmF0ZSByZWFkb25seSBjb21tYW5kVHJpZ2dlckNoYXIgPSAnLyc7XG4gIGF1dG9jb21wbGV0ZUNvbmZpZzogTWVudGlvbkNvbmZpZyA9IHtcbiAgICBtZW50aW9uczogW10sXG4gIH07XG4gIEBWaWV3Q2hpbGQoJ2lucHV0JykgcHJpdmF0ZSBtZXNzYWdlSW5wdXQhOiBFbGVtZW50UmVmPEhUTUxJbnB1dEVsZW1lbnQ+O1xuICBwcml2YXRlIHN1YnNjcmlwdGlvbnM6IFN1YnNjcmlwdGlvbltdID0gW107XG4gIHByaXZhdGUgbWVudGlvbmVkVXNlcnM6IFVzZXJSZXNwb25zZVtdID0gW107XG4gIHByaXZhdGUgdXNlck1lbnRpb25Db25maWc6IE1lbnRpb25zID0ge1xuICAgIHRyaWdnZXJDaGFyOiB0aGlzLm1lbnRpb25UcmlnZ2VyQ2hhcixcbiAgICBkcm9wVXA6IHRydWUsXG4gICAgbGFiZWxLZXk6IHRoaXMuYXV0b2NvbXBsZXRlS2V5LFxuICAgIHJldHVyblRyaWdnZXI6IHRydWUsXG4gICAgbWVudGlvbkZpbHRlcjogKFxuICAgICAgc2VhcmNoU3RyaW5nOiBzdHJpbmcsXG4gICAgICBpdGVtczogeyBhdXRvY29tcGxldGVMYWJlbDogc3RyaW5nIH1bXVxuICAgICkgPT4gdGhpcy5maWx0ZXIoc2VhcmNoU3RyaW5nLCBpdGVtcyksXG4gICAgbWVudGlvblNlbGVjdDogKGl0ZW0sIHRyaWdnZXJDaGFyKSA9PlxuICAgICAgdGhpcy5pdGVtU2VsZWN0ZWRGcm9tQXV0b2NvbXBsZXRlTGlzdChcbiAgICAgICAgaXRlbSBhcyBNZW50aW9uQXV0Y29tcGxldGVMaXN0SXRlbSxcbiAgICAgICAgdHJpZ2dlckNoYXJcbiAgICAgICksXG4gIH07XG4gIHByaXZhdGUgc2xhc2hDb21tYW5kQ29uZmlnOiBNZW50aW9ucyA9IHtcbiAgICB0cmlnZ2VyQ2hhcjogdGhpcy5jb21tYW5kVHJpZ2dlckNoYXIsXG4gICAgZHJvcFVwOiB0cnVlLFxuICAgIGxhYmVsS2V5OiAnbmFtZScsXG4gICAgcmV0dXJuVHJpZ2dlcjogdHJ1ZSxcbiAgICBtZW50aW9uRmlsdGVyOiAoXG4gICAgICBzZWFyY2hTdHJpbmc6IHN0cmluZyxcbiAgICAgIGl0ZW1zOiB7IGF1dG9jb21wbGV0ZUxhYmVsOiBzdHJpbmcgfVtdXG4gICAgKSA9PiB0aGlzLmZpbHRlcihzZWFyY2hTdHJpbmcsIGl0ZW1zKSxcbiAgICBtZW50aW9uU2VsZWN0OiAoaXRlbSwgdHJpZ2dlckNoYXIpID0+XG4gICAgICB0aGlzLml0ZW1TZWxlY3RlZEZyb21BdXRvY29tcGxldGVMaXN0KFxuICAgICAgICBpdGVtIGFzIE1lbnRpb25BdXRjb21wbGV0ZUxpc3RJdGVtLFxuICAgICAgICB0cmlnZ2VyQ2hhclxuICAgICAgKSxcbiAgfTtcbiAgcHJpdmF0ZSBzZWFyY2hUZXJtJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nPignJyk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBjaGFubmVsU2VydmljZTogQ2hhbm5lbFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBjaGF0Q2xpZW50U2VydmljZTogQ2hhdENsaWVudFNlcnZpY2UsXG4gICAgcHJpdmF0ZSB0cmFuc2xpdGVyYXRpb25TZXJ2aWNlOiBUcmFuc2xpdGVyYXRpb25TZXJ2aWNlLFxuICAgIHByaXZhdGUgZW1vamlJbnB1dFNlcnZpY2U6IEVtb2ppSW5wdXRTZXJ2aWNlLFxuICAgIHByaXZhdGUgY3VzdG9tVGVtcGxhdGVzU2VydmljZTogQ3VzdG9tVGVtcGxhdGVzU2VydmljZSxcbiAgICBwcml2YXRlIHRoZW1lU2VydmljZTogVGhlbWVTZXJ2aWNlLFxuICAgIHByaXZhdGUgY2RSZWY6IENoYW5nZURldGVjdG9yUmVmXG4gICkge1xuICAgIHRoaXMuc2VhcmNoVGVybSQucGlwZShkZWJvdW5jZVRpbWUoMzAwKSkuc3Vic2NyaWJlKChzZWFyY2hUZXJtKSA9PiB7XG4gICAgICBpZiAoc2VhcmNoVGVybS5zdGFydHNXaXRoKHRoaXMubWVudGlvblRyaWdnZXJDaGFyKSkge1xuICAgICAgICB2b2lkIHRoaXMudXBkYXRlTWVudGlvbk9wdGlvbnMoc2VhcmNoVGVybSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXG4gICAgICB0aGlzLmNoYW5uZWxTZXJ2aWNlLmFjdGl2ZUNoYW5uZWwkLnN1YnNjcmliZSgoY2hhbm5lbCkgPT4ge1xuICAgICAgICBjb25zdCBjb21tYW5kcyA9IGNoYW5uZWw/LmdldENvbmZpZygpPy5jb21tYW5kcyB8fCBbXTtcbiAgICAgICAgdGhpcy5zbGFzaENvbW1hbmRDb25maWcuaXRlbXMgPSBjb21tYW5kcy5tYXAoKGMpID0+ICh7XG4gICAgICAgICAgLi4uYyxcbiAgICAgICAgICBbdGhpcy5hdXRvY29tcGxldGVLZXldOiBjLm5hbWUsXG4gICAgICAgICAgdHlwZTogJ2NvbW1hbmQnLFxuICAgICAgICB9KSk7XG4gICAgICAgIHRoaXMubWVudGlvbmVkVXNlcnMgPSBbXTtcbiAgICAgICAgdGhpcy51c2VyTWVudGlvbnMubmV4dChbLi4udGhpcy5tZW50aW9uZWRVc2Vyc10pO1xuICAgICAgICB2b2lkIHRoaXMudXBkYXRlTWVudGlvbk9wdGlvbnModGhpcy5zZWFyY2hUZXJtJC5nZXRWYWx1ZSgpKTtcbiAgICAgIH0pXG4gICAgKTtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcbiAgICAgIHRoaXMuZW1vamlJbnB1dFNlcnZpY2UuZW1vamlJbnB1dCQuc3Vic2NyaWJlKChlbW9qaSkgPT4ge1xuICAgICAgICB0aGlzLm1lc3NhZ2VJbnB1dC5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgICAgIGNvbnN0IHsgc2VsZWN0aW9uU3RhcnQgfSA9IHRoaXMubWVzc2FnZUlucHV0Lm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgIHRoaXMubWVzc2FnZUlucHV0Lm5hdGl2ZUVsZW1lbnQuc2V0UmFuZ2VUZXh0KGVtb2ppKTtcbiAgICAgICAgdGhpcy5tZXNzYWdlSW5wdXQubmF0aXZlRWxlbWVudC5zZWxlY3Rpb25TdGFydCA9XG4gICAgICAgICAgc2VsZWN0aW9uU3RhcnQhICsgZW1vamkubGVuZ3RoO1xuICAgICAgICB0aGlzLm1lc3NhZ2VJbnB1dC5uYXRpdmVFbGVtZW50LnNlbGVjdGlvbkVuZCA9XG4gICAgICAgICAgc2VsZWN0aW9uU3RhcnQhICsgZW1vamkubGVuZ3RoO1xuICAgICAgICB0aGlzLmlucHV0Q2hhbmdlZCgpO1xuICAgICAgfSlcbiAgICApO1xuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxuICAgICAgdGhpcy5jdXN0b21UZW1wbGF0ZXNTZXJ2aWNlLm1lbnRpb25BdXRvY29tcGxldGVJdGVtVGVtcGxhdGUkLnN1YnNjcmliZShcbiAgICAgICAgKHRlbXBsYXRlKSA9PiAodGhpcy5tZW50aW9uQXV0b2NvbXBsZXRlSXRlbVRlbXBsYXRlID0gdGVtcGxhdGUpXG4gICAgICApXG4gICAgKTtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcbiAgICAgIHRoaXMuY3VzdG9tVGVtcGxhdGVzU2VydmljZS5jb21tYW5kQXV0b2NvbXBsZXRlSXRlbVRlbXBsYXRlJC5zdWJzY3JpYmUoXG4gICAgICAgICh0ZW1wbGF0ZSkgPT4gKHRoaXMuY29tbWFuZEF1dG9jb21wbGV0ZUl0ZW1UZW1wbGF0ZSA9IHRlbXBsYXRlKVxuICAgICAgKVxuICAgICk7XG4gICAgdGhpcy5hdXRvY29tcGxldGVDb25maWcubWVudGlvbnMgPSBbXG4gICAgICB0aGlzLnVzZXJNZW50aW9uQ29uZmlnLFxuICAgICAgdGhpcy5zbGFzaENvbW1hbmRDb25maWcsXG4gICAgXTtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBpZiAoY2hhbmdlcy5hcmVNZW50aW9uc0VuYWJsZWQpIHtcbiAgICAgIGlmICh0aGlzLmFyZU1lbnRpb25zRW5hYmxlZCkge1xuICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZUNvbmZpZy5tZW50aW9ucyA9IFtcbiAgICAgICAgICB0aGlzLnVzZXJNZW50aW9uQ29uZmlnLFxuICAgICAgICAgIHRoaXMuc2xhc2hDb21tYW5kQ29uZmlnLFxuICAgICAgICBdO1xuICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZUNvbmZpZyA9IHsgLi4udGhpcy5hdXRvY29tcGxldGVDb25maWcgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlQ29uZmlnLm1lbnRpb25zID0gW3RoaXMuc2xhc2hDb21tYW5kQ29uZmlnXTtcbiAgICAgICAgdGhpcy5hdXRvY29tcGxldGVDb25maWcgPSB7IC4uLnRoaXMuYXV0b2NvbXBsZXRlQ29uZmlnIH07XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChjaGFuZ2VzLm1lbnRpb25TY29wZSkge1xuICAgICAgdm9pZCB0aGlzLnVwZGF0ZU1lbnRpb25PcHRpb25zKHRoaXMuc2VhcmNoVGVybSQuZ2V0VmFsdWUoKSk7XG4gICAgfVxuICAgIGlmIChjaGFuZ2VzLnZhbHVlICYmICF0aGlzLnZhbHVlICYmIHRoaXMubWVzc2FnZUlucHV0KSB7XG4gICAgICB0aGlzLm1lc3NhZ2VJbnB1dC5uYXRpdmVFbGVtZW50LnN0eWxlLmhlaWdodCA9ICdhdXRvJztcbiAgICAgIHRoaXMudXBkYXRlTWVudGlvbmVkVXNlcnNGcm9tVGV4dCgpO1xuICAgIH1cbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5tZXNzYWdlSW5wdXQubmF0aXZlRWxlbWVudC5zY3JvbGxIZWlnaHQgPiAwKSB7XG4gICAgICB0aGlzLmFkanVzdFRleHRhcmVhSGVpZ2h0KCk7XG4gICAgfVxuICB9XG5cbiAgZmlsdGVyKHNlYXJjaFN0cmluZzogc3RyaW5nLCBpdGVtczogeyBhdXRvY29tcGxldGVMYWJlbDogc3RyaW5nIH1bXSkge1xuICAgIHJldHVybiBpdGVtcy5maWx0ZXIoKGl0ZW0pID0+XG4gICAgICB0aGlzLnRyYW5zbGl0ZXJhdGUoaXRlbS5hdXRvY29tcGxldGVMYWJlbC50b0xvd2VyQ2FzZSgpKS5pbmNsdWRlcyhcbiAgICAgICAgdGhpcy50cmFuc2xpdGVyYXRlKHNlYXJjaFN0cmluZy50b0xvd2VyQ2FzZSgpKVxuICAgICAgKVxuICAgICk7XG4gIH1cblxuICBpdGVtU2VsZWN0ZWRGcm9tQXV0b2NvbXBsZXRlTGlzdChcbiAgICBpdGVtOiBNZW50aW9uQXV0Y29tcGxldGVMaXN0SXRlbSxcbiAgICB0cmlnZ2VyQ2hhciA9ICcnXG4gICkge1xuICAgIGlmICh0cmlnZ2VyQ2hhciA9PT0gdGhpcy5tZW50aW9uVHJpZ2dlckNoYXIpIHtcbiAgICAgIHRoaXMubWVudGlvbmVkVXNlcnMucHVzaCgoaXRlbS51c2VyID8gaXRlbS51c2VyIDogaXRlbSkgYXMgVXNlclJlc3BvbnNlKTtcbiAgICAgIHRoaXMudXNlck1lbnRpb25zLm5leHQoWy4uLnRoaXMubWVudGlvbmVkVXNlcnNdKTtcbiAgICB9XG4gICAgcmV0dXJuIChcbiAgICAgIHRyaWdnZXJDaGFyICtcbiAgICAgIGl0ZW0uYXV0b2NvbXBsZXRlTGFiZWwgK1xuICAgICAgKHRyaWdnZXJDaGFyID09PSB0aGlzLmNvbW1hbmRUcmlnZ2VyQ2hhciA/ICcgJyA6ICcnKVxuICAgICk7XG4gIH1cblxuICBhdXRjb21wbGV0ZVNlYXJjaFRlcm1DaGFuZ2VkKHNlYXJjaFRlcm06IHN0cmluZykge1xuICAgIGlmIChzZWFyY2hUZXJtID09PSB0aGlzLm1lbnRpb25UcmlnZ2VyQ2hhcikge1xuICAgICAgdm9pZCB0aGlzLnVwZGF0ZU1lbnRpb25PcHRpb25zKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2VhcmNoVGVybSQubmV4dChzZWFyY2hUZXJtKTtcbiAgICB9XG4gIH1cblxuICBpbnB1dENoYW5nZWQoKSB7XG4gICAgdGhpcy52YWx1ZUNoYW5nZS5lbWl0KHRoaXMubWVzc2FnZUlucHV0Lm5hdGl2ZUVsZW1lbnQudmFsdWUpO1xuICAgIHRoaXMuYWRqdXN0VGV4dGFyZWFIZWlnaHQoKTtcbiAgfVxuXG4gIGlucHV0TGVmdCgpIHtcbiAgICB0aGlzLnVwZGF0ZU1lbnRpb25lZFVzZXJzRnJvbVRleHQoKTtcbiAgfVxuXG4gIGVudGVySGl0KGV2ZW50OiBFdmVudCkge1xuICAgIGlmICh0aGlzLmlucHV0TW9kZSA9PT0gJ2Rlc2t0b3AnKSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgdGhpcy51cGRhdGVNZW50aW9uZWRVc2Vyc0Zyb21UZXh0KCk7XG4gICAgICB0aGlzLnNlbmQubmV4dCgpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYWRqdXN0VGV4dGFyZWFIZWlnaHQoKSB7XG4gICAgdGhpcy5tZXNzYWdlSW5wdXQubmF0aXZlRWxlbWVudC5zdHlsZS5oZWlnaHQgPSAnJztcbiAgICB0aGlzLm1lc3NhZ2VJbnB1dC5uYXRpdmVFbGVtZW50LnN0eWxlLmhlaWdodCA9IGAke3RoaXMubWVzc2FnZUlucHV0Lm5hdGl2ZUVsZW1lbnQuc2Nyb2xsSGVpZ2h0fXB4YDtcbiAgfVxuXG4gIHByaXZhdGUgdHJhbnNsaXRlcmF0ZShzOiBzdHJpbmcpIHtcbiAgICBpZiAodGhpcy50cmFuc2xpdGVyYXRpb25TZXJ2aWNlKSB7XG4gICAgICByZXR1cm4gdGhpcy50cmFuc2xpdGVyYXRpb25TZXJ2aWNlLnRyYW5zbGl0ZXJhdGUocyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBzO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgdXBkYXRlTWVudGlvbk9wdGlvbnMoc2VhcmNoVGVybT86IHN0cmluZykge1xuICAgIGlmICghdGhpcy5hcmVNZW50aW9uc0VuYWJsZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgc2VhcmNoVGVybSA9IHNlYXJjaFRlcm0/LnJlcGxhY2UodGhpcy5tZW50aW9uVHJpZ2dlckNoYXIsICcnKTtcbiAgICBjb25zdCByZXF1ZXN0ID1cbiAgICAgIHRoaXMubWVudGlvblNjb3BlID09PSAnYXBwbGljYXRpb24nXG4gICAgICAgID8gKHM6IHN0cmluZykgPT4gdGhpcy5jaGF0Q2xpZW50U2VydmljZS5hdXRvY29tcGxldGVVc2VycyhzKVxuICAgICAgICA6IChzOiBzdHJpbmcpID0+IHRoaXMuY2hhbm5lbFNlcnZpY2UuYXV0b2NvbXBsZXRlTWVtYmVycyhzKTtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCByZXF1ZXN0KHNlYXJjaFRlcm0gfHwgJycpO1xuICAgIGNvbnN0IGl0ZW1zID0gdGhpcy5maWx0ZXIoXG4gICAgICBzZWFyY2hUZXJtIHx8ICcnLFxuICAgICAgcmVzdWx0Lm1hcCgoaSkgPT4ge1xuICAgICAgICBjb25zdCB1c2VyID0gKGkudXNlciA/IGkudXNlciA6IGkpIGFzIFVzZXJSZXNwb25zZTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAuLi5pLFxuICAgICAgICAgIGF1dG9jb21wbGV0ZUxhYmVsOiB1c2VyLm5hbWUgfHwgdXNlci5pZCxcbiAgICAgICAgICB0eXBlOiAnbWVudGlvbicsXG4gICAgICAgIH07XG4gICAgICB9KVxuICAgICk7XG4gICAgdGhpcy51c2VyTWVudGlvbkNvbmZpZy5pdGVtcyA9IGl0ZW1zO1xuICAgIHRoaXMuYXV0b2NvbXBsZXRlQ29uZmlnLm1lbnRpb25zID0gW1xuICAgICAgdGhpcy51c2VyTWVudGlvbkNvbmZpZyxcbiAgICAgIHRoaXMuc2xhc2hDb21tYW5kQ29uZmlnLFxuICAgIF07XG4gICAgdGhpcy5hdXRvY29tcGxldGVDb25maWcgPSB7IC4uLnRoaXMuYXV0b2NvbXBsZXRlQ29uZmlnIH07XG4gICAgdGhpcy5jZFJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZU1lbnRpb25lZFVzZXJzRnJvbVRleHQoKSB7XG4gICAgY29uc3QgdXBkYXRlZE1lbnRpb25lZFVzZXJzOiBVc2VyUmVzcG9uc2VbXSA9IFtdO1xuICAgIHRoaXMubWVudGlvbmVkVXNlcnMuZm9yRWFjaCgodSkgPT4ge1xuICAgICAgY29uc3Qga2V5ID0gdS5uYW1lIHx8IHUuaWQ7XG4gICAgICBpZiAodGhpcy52YWx1ZS5pbmNsdWRlcyhgJHt0aGlzLm1lbnRpb25UcmlnZ2VyQ2hhcn0ke2tleX1gKSkge1xuICAgICAgICB1cGRhdGVkTWVudGlvbmVkVXNlcnMucHVzaCh1KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBpZiAodXBkYXRlZE1lbnRpb25lZFVzZXJzLmxlbmd0aCAhPT0gdGhpcy5tZW50aW9uZWRVc2Vycy5sZW5ndGgpIHtcbiAgICAgIHRoaXMudXNlck1lbnRpb25zLm5leHQoWy4uLnVwZGF0ZWRNZW50aW9uZWRVc2Vyc10pO1xuICAgICAgdGhpcy5tZW50aW9uZWRVc2VycyA9IHVwZGF0ZWRNZW50aW9uZWRVc2VycztcbiAgICB9XG4gIH1cbn1cbiIsIjx0ZXh0YXJlYVxuICAjaW5wdXRcbiAgZGF0YS10ZXN0aWQ9XCJ0ZXh0YXJlYVwiXG4gIGNsYXNzPVwiXG4gICAgcnRhX190ZXh0YXJlYVxuICAgIHN0ci1jaGF0X190ZXh0YXJlYV9fdGV4dGFyZWFcbiAgICBzdHItY2hhdF9fYW5ndWxhci10ZXh0YXJlYVxuICAgIHN0ci1jaGF0X19tZXNzYWdlLXRleHRhcmVhXG4gIFwiXG4gIHJvd3M9XCIxXCJcbiAgW3ZhbHVlXT1cInZhbHVlIHx8ICcnXCJcbiAgW2F1dG9mb2N1c109XCJhdXRvRm9jdXNcIlxuICBwbGFjZWhvbGRlcj1cInt7IHBsYWNlaG9sZGVyIHwgdHJhbnNsYXRlIH19XCJcbiAgW21lbnRpb25Db25maWddPVwiYXV0b2NvbXBsZXRlQ29uZmlnXCJcbiAgW21lbnRpb25MaXN0VGVtcGxhdGVdPVwiYXV0b2NvbXBsZXRlSXRlbVwiXG4gIChpbnB1dCk9XCJpbnB1dENoYW5nZWQoKVwiXG4gIChrZXlkb3duLmVudGVyKT1cImVudGVySGl0KCRldmVudClcIlxuICAoc2VhcmNoVGVybSk9XCJhdXRjb21wbGV0ZVNlYXJjaFRlcm1DaGFuZ2VkKCRldmVudClcIlxuICAoYmx1cik9XCJpbnB1dExlZnQoKVwiXG4+PC90ZXh0YXJlYT5cbjxuZy10ZW1wbGF0ZSAjYXV0b2NvbXBsZXRlSXRlbSBsZXQtaXRlbT1cIml0ZW1cIj5cbiAgPGRpdiBjbGFzcz1cInJ0YSBydGFfX2l0ZW0gc3RyLWNoYXRfX2Vtb2ppc2VhcmNoX19pdGVtXCIgW25nU3dpdGNoXT1cIml0ZW0udHlwZVwiPlxuICAgIDxkaXYgKm5nU3dpdGNoQ2FzZT1cIidtZW50aW9uJ1wiIGNsYXNzPVwicnRhX19lbnRpdHlcIj5cbiAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgICBtZW50aW9uQXV0b2NvbXBsZXRlSXRlbVRlbXBsYXRlIHx8IGRlZmF1bHRNZW50aW9uVGVtcGxhdGU7XG4gICAgICAgICAgY29udGV4dDogeyBpdGVtOiBpdGVtIH1cbiAgICAgICAgXCJcbiAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2ICpuZ1N3aXRjaENhc2U9XCInY29tbWFuZCdcIiBjbGFzcz1cInJ0YV9fZW50aXR5XCI+XG4gICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgICAgY29tbWFuZEF1dG9jb21wbGV0ZUl0ZW1UZW1wbGF0ZSB8fCBkZWZhdWx0Q29tbWFuZFRlbXBsYXRlO1xuICAgICAgICAgIGNvbnRleHQ6IHsgaXRlbTogaXRlbSB9XG4gICAgICAgIFwiXG4gICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNkZWZhdWx0Q29tbWFuZFRlbXBsYXRlIGxldC1pdGVtPVwiaXRlbVwiPlxuICA8ZGl2IGNsYXNzPVwic3RyLWNoYXRfX3NsYXNoLWNvbW1hbmRcIj5cbiAgICA8c3BhbiBjbGFzcz1cInN0ci1jaGF0X19zbGFzaC1jb21tYW5kLWhlYWRlclwiPlxuICAgICAgPHN0cm9uZ1xuICAgICAgICBjbGFzcz1cInN0ci1jaGF0X19zbGFzaC1jb21tYW5kLW5hbWVcIlxuICAgICAgICBkYXRhLXRlc3RjbGFzcz1cImNvbW1hbmQtbmFtZVwiXG4gICAgICAgID57eyBpdGVtLm5hbWUgfX08L3N0cm9uZ1xuICAgICAgPlxuICAgICAgPHNwYW4gY2xhc3M9XCJzdHItY2hhdF9fc2xhc2gtY29tbWFuZC1hcmdzXCJcbiAgICAgICAgPi97eyBpdGVtLm5hbWUgfX0ge3sgaXRlbS5hcmdzIH19PC9zcGFuXG4gICAgICA+XG4gICAgPC9zcGFuPlxuICAgIDxiciAvPlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjZGVmYXVsdE1lbnRpb25UZW1wbGF0ZSBsZXQtaXRlbT1cIml0ZW1cIj5cbiAgPGRpdiBjbGFzcz1cInN0ci1jaGF0X191c2VyLWl0ZW1cIj5cbiAgICA8c3RyZWFtLWF2YXRhci1wbGFjZWhvbGRlclxuICAgICAgZGF0YS10ZXN0Y2xhc3M9XCJhdmF0YXJcIlxuICAgICAgY2xhc3M9XCJzdHItY2hhdF9fYXZhdGFyIHN0ci1jaGF0X19hdmF0YXItLWNpcmNsZVwiXG4gICAgICB0eXBlPVwidXNlclwiXG4gICAgICBsb2NhdGlvbj1cImF1dG9jb21wbGV0ZS1pdGVtXCJcbiAgICAgIFtuZ1N0eWxlXT1cInsgaGVpZ2h0OiAnMzBweCcgfVwiXG4gICAgICBbc2l6ZV09XCIzMFwiXG4gICAgICBbaW1hZ2VVcmxdPVwiaXRlbS5pbWFnZSB8fCBpdGVtLnVzZXI/LmltYWdlXCJcbiAgICAgIFtuYW1lXT1cIml0ZW0uYXV0b2NvbXBsZXRlTGFiZWxcIlxuICAgICAgW3VzZXJdPVwiaXRlbS51c2VyIHx8IGl0ZW1cIlxuICAgID48L3N0cmVhbS1hdmF0YXItcGxhY2Vob2xkZXI+XG4gICAgPHNwYW4gZGF0YS10ZXN0Y2xhc3M9XCJ1c2VybmFtZVwiIGNsYXNzPVwic3RyLWNoYXRfX3VzZXItaXRlbS0tbmFtZVwiPnt7XG4gICAgICBpdGVtLmF1dG9jb21wbGV0ZUxhYmVsXG4gICAgfX08L3NwYW4+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
269
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0b2NvbXBsZXRlLXRleHRhcmVhLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3N0cmVhbS1jaGF0LWFuZ3VsYXIvc3JjL2xpYi9tZXNzYWdlLWlucHV0L2F1dG9jb21wbGV0ZS10ZXh0YXJlYS9hdXRvY29tcGxldGUtdGV4dGFyZWEuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc3RyZWFtLWNoYXQtYW5ndWxhci9zcmMvbGliL21lc3NhZ2UtaW5wdXQvYXV0b2NvbXBsZXRlLXRleHRhcmVhL2F1dG9jb21wbGV0ZS10ZXh0YXJlYS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBR0wsU0FBUyxFQUVULFlBQVksRUFDWixXQUFXLEVBQ1gsS0FBSyxFQUVMLE1BQU0sRUFHTixTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUM7QUFRdkIsT0FBTyxFQUFFLGVBQWUsRUFBZ0IsTUFBTSxNQUFNLENBQUM7QUFLckQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7Ozs7Ozs7Ozs7QUFNOUM7O0dBRUc7QUFNSCxNQUFNLE9BQU8sNkJBQTZCO0lBeUZ4QyxZQUNVLGNBQThCLEVBQzlCLGlCQUFvQyxFQUNwQyxzQkFBOEMsRUFDOUMsaUJBQW9DLEVBQ3BDLHNCQUE4QyxFQUM5QyxZQUEwQixFQUMxQixLQUF3QjtRQU54QixtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFDOUIsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFtQjtRQUNwQywyQkFBc0IsR0FBdEIsc0JBQXNCLENBQXdCO1FBQzlDLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBbUI7UUFDcEMsMkJBQXNCLEdBQXRCLHNCQUFzQixDQUF3QjtRQUM5QyxpQkFBWSxHQUFaLFlBQVksQ0FBYztRQUMxQixVQUFLLEdBQUwsS0FBSyxDQUFtQjtRQTdGbkIsVUFB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QjswU0FPekIsS0FBSztzQkFBbkIsV0FBVztnQkFLSCxLQUFLO3NCQUFiLEtBQUs7Z0JBSUcsV0FBVztzQkFBbkIsS0FBSztnQkFJRyxrQkFBa0I7c0JBQTFCLEtBQUs7Z0JBSUcsU0FBUztzQkFBakIsS0FBSztnQkFJRyxZQUFZO3NCQUFwQixLQUFLO2dCQUlHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBSWEsV0FBVztzQkFBN0IsTUFBTTtnQkFJWSxJQUFJO3NCQUF0QixNQUFNO2dCQUlZLFlBQVk7c0JBQTlCLE1BQU07Z0JBYXFCLFlBQVk7c0JBQXZDLFNBQVM7dUJBQUMsT0FBTyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEFmdGVyVmlld0luaXQsXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgSG9zdEJpbmRpbmcsXG4gIElucHV0LFxuICBPbkNoYW5nZXMsXG4gIE91dHB1dCxcbiAgU2ltcGxlQ2hhbmdlcyxcbiAgVGVtcGxhdGVSZWYsXG4gIFZpZXdDaGlsZCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBNZW50aW9uQ29uZmlnLCBNZW50aW9ucyB9IGZyb20gJ2FuZ3VsYXItbWVudGlvbnMnO1xuaW1wb3J0IHtcbiAgTWVudGlvbkF1dGNvbXBsZXRlTGlzdEl0ZW1Db250ZXh0LFxuICBNZW50aW9uQXV0Y29tcGxldGVMaXN0SXRlbSxcbiAgQ29tbWFuZEF1dG9jb21wbGV0ZUxpc3RJdGVtQ29udGV4dCxcbn0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuXG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgVXNlclJlc3BvbnNlIH0gZnJvbSAnc3RyZWFtLWNoYXQnO1xuaW1wb3J0IHsgQ2hhbm5lbFNlcnZpY2UgfSBmcm9tICcuLi8uLi9jaGFubmVsLnNlcnZpY2UnO1xuaW1wb3J0IHsgVGV4dGFyZWFJbnRlcmZhY2UgfSBmcm9tICcuLi90ZXh0YXJlYS5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgQ2hhdENsaWVudFNlcnZpY2UgfSBmcm9tICcuLi8uLi9jaGF0LWNsaWVudC5zZXJ2aWNlJztcbmltcG9ydCB7IGRlYm91bmNlVGltZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IFRyYW5zbGl0ZXJhdGlvblNlcnZpY2UgfSBmcm9tICcuLi8uLi90cmFuc2xpdGVyYXRpb24uc2VydmljZSc7XG5pbXBvcnQgeyBFbW9qaUlucHV0U2VydmljZSB9IGZyb20gJy4uL2Vtb2ppLWlucHV0LnNlcnZpY2UnO1xuaW1wb3J0IHsgQ3VzdG9tVGVtcGxhdGVzU2VydmljZSB9IGZyb20gJy4uLy4uL2N1c3RvbS10ZW1wbGF0ZXMuc2VydmljZSc7XG5pbXBvcnQgeyBUaGVtZVNlcnZpY2UgfSBmcm9tICcuLi8uLi90aGVtZS5zZXJ2aWNlJztcblxuLyoqXG4gKiBUaGUgYEF1dG9jb21wbGV0ZVRleHRhcmVhYCBjb21wb25lbnQgaXMgdXNlZCBieSB0aGUgW2BNZXNzYWdlSW5wdXRgXSguL01lc3NhZ2VJbnB1dENvbXBvbmVudC5tZHgpIGNvbXBvbmVudCB0byBkaXNwbGF5IHRoZSBpbnB1dCBIVE1MIGVsZW1lbnQgd2hlcmUgdXNlcnMgY2FuIHR5cGUgdGhlaXIgbWVzc2FnZS5cbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnc3RyZWFtLWF1dG9jb21wbGV0ZS10ZXh0YXJlYScsXG4gIHRlbXBsYXRlVXJsOiAnLi9hdXRvY29tcGxldGUtdGV4dGFyZWEuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZXM6IFtdLFxufSlcbmV4cG9ydCBjbGFzcyBBdXRvY29tcGxldGVUZXh0YXJlYUNvbXBvbmVudFxuICBpbXBsZW1lbnRzIFRleHRhcmVhSW50ZXJmYWNlLCBPbkNoYW5nZXMsIEFmdGVyVmlld0luaXRcbntcbiAgQEhvc3RCaW5kaW5nKCkgY2xhc3MgPVxuICAgICdzdHItY2hhdF9fdGV4dGFyZWEgc3RyLWNoYXRfX21lc3NhZ2UtdGV4dGFyZWEtYW5ndWxhci1ob3N0JztcbiAgLyoqXG4gICAqIFRoZSB2YWx1ZSBvZiB0aGUgaW5wdXQgSFRNTCBlbGVtZW50LlxuICAgKi9cbiAgQElucHV0KCkgdmFsdWUgPSAnJztcbiAgLyoqXG4gICAqIFBsYWNlaG9sZGVyIG9mIHRoZSB0ZXh0YXJlYVxuICAgKi9cbiAgQElucHV0KCkgcGxhY2Vob2xkZXIgPSAnJztcbiAgLyoqXG4gICAqIElmIHRydWUsIHVzZXJzIGNhbiBtZW50aW9uIG90aGVyIHVzZXJzIGluIG1lc3NhZ2VzLiBZb3UgY2FuIGFsc28gc2V0IHRoaXMgaW5wdXQgb24gdGhlIFtgTWVzc2FnZUlucHV0YF0oLi9NZXNzYWdlSW5wdXRDb21wb25lbnQubWR4LyNpbnB1dHMtYW5kLW91dHB1dHMpIGNvbXBvbmVudC5cbiAgICovXG4gIEBJbnB1dCgpIGFyZU1lbnRpb25zRW5hYmxlZDogYm9vbGVhbiB8IHVuZGVmaW5lZCA9IHRydWU7XG4gIC8qKlxuICAgKiBTZWUgW2BNZXNzYWdlSW5wdXRDb25maWdTZXJ2aWNlYF0oLi4vc2VydmljZXMvTWVzc2FnZUlucHV0Q29uZmlnU2VydmljZS5tZHgpIGZvciBtb3JlIGluZm9ybWF0aW9uXG4gICAqL1xuICBASW5wdXQoKSBpbnB1dE1vZGUhOiAnZGVza3RvcCcgfCAnbW9iaWxlJztcbiAgLyoqXG4gICAqIFRoZSBzY29wZSBmb3IgdXNlciBtZW50aW9ucywgZWl0aGVyIG1lbWJlcnMgb2YgdGhlIGN1cnJlbnQgY2hhbm5lbCBvZiBtZW1iZXJzIG9mIHRoZSBhcHBsaWNhdGlvbi4gWW91IGNhbiBhbHNvIHNldCB0aGlzIGlucHV0IG9uIHRoZSBbYE1lc3NhZ2VJbnB1dGBdKC4vTWVzc2FnZUlucHV0Q29tcG9uZW50Lm1keC8jaW5wdXRzLWFuZC1vdXRwdXRzKSBjb21wb25lbnQuXG4gICAqL1xuICBASW5wdXQoKSBtZW50aW9uU2NvcGU6ICdjaGFubmVsJyB8ICdhcHBsaWNhdGlvbicgPSAnY2hhbm5lbCc7XG4gIC8qKlxuICAgKiBFbmFibGVzIG9yIGRpc2FibGVzIGF1dG8gZm9jdXMgb24gdGhlIHRleHRhcmVhIGVsZW1lbnRcbiAgICovXG4gIEBJbnB1dCgpIGF1dG9Gb2N1cyA9IHRydWU7XG4gIC8qKlxuICAgKiBFbWl0cyB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgaW5wdXQgZWxlbWVudCB3aGVuIGEgdXNlciB0eXBlcy5cbiAgICovXG4gIEBPdXRwdXQoKSByZWFkb25seSB2YWx1ZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xuICAvKipcbiAgICogRW1pdHMgd2hlbiBhIHVzZXIgdHJpZ2dlcnMgYSBtZXNzYWdlIHNlbmQgZXZlbnQgKHRoaXMgaGFwcGVucyB3aGVuIHRoZXkgaGl0IHRoZSBgRW50ZXJgIGtleSkuXG4gICAqL1xuICBAT3V0cHV0KCkgcmVhZG9ubHkgc2VuZCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcbiAgLyoqXG4gICAqIEVtaXRzIHRoZSBhcnJheSBvZiB1c2VycyB0aGF0IGFyZSBtZW50aW9uZWQgaW4gdGhlIG1lc3NhZ2UsIGl0IGlzIHVwZGF0ZWQgd2hlbiBhIHVzZXIgbWVudGlvbnMgYSBuZXcgdXNlciBvciBkZWxldGVzIGEgbWVudGlvbi5cbiAgICovXG4gIEBPdXRwdXQoKSByZWFkb25seSB1c2VyTWVudGlvbnMgPSBuZXcgRXZlbnRFbWl0dGVyPFVzZXJSZXNwb25zZVtdPigpO1xuICBtZW50aW9uQXV0b2NvbXBsZXRlSXRlbVRlbXBsYXRlOlxuICAgIHwgVGVtcGxhdGVSZWY8TWVudGlvbkF1dGNvbXBsZXRlTGlzdEl0ZW1Db250ZXh0PlxuICAgIHwgdW5kZWZpbmVkO1xuICBjb21tYW5kQXV0b2NvbXBsZXRlSXRlbVRlbXBsYXRlOlxuICAgIHwgVGVtcGxhdGVSZWY8Q29tbWFuZEF1dG9jb21wbGV0ZUxpc3RJdGVtQ29udGV4dD5cbiAgICB8IHVuZGVmaW5lZDtcbiAgcHJpdmF0ZSByZWFkb25seSBhdXRvY29tcGxldGVLZXkgPSAnYXV0b2NvbXBsZXRlTGFiZWwnO1xuICBwcml2YXRlIHJlYWRvbmx5IG1lbnRpb25UcmlnZ2VyQ2hhciA9ICdAJztcbiAgcHJpdmF0ZSByZWFkb25seSBjb21tYW5kVHJpZ2dlckNoYXIgPSAnLyc7XG4gIGF1dG9jb21wbGV0ZUNvbmZpZzogTWVudGlvbkNvbmZpZyA9IHtcbiAgICBtZW50aW9uczogW10sXG4gIH07XG4gIEBWaWV3Q2hpbGQoJ2lucHV0JykgcHJpdmF0ZSBtZXNzYWdlSW5wdXQhOiBFbGVtZW50UmVmPEhUTUxJbnB1dEVsZW1lbnQ+O1xuICBwcml2YXRlIHN1YnNjcmlwdGlvbnM6IFN1YnNjcmlwdGlvbltdID0gW107XG4gIHByaXZhdGUgbWVudGlvbmVkVXNlcnM6IFVzZXJSZXNwb25zZVtdID0gW107XG4gIHByaXZhdGUgdXNlck1lbnRpb25Db25maWc6IE1lbnRpb25zID0ge1xuICAgIHRyaWdnZXJDaGFyOiB0aGlzLm1lbnRpb25UcmlnZ2VyQ2hhcixcbiAgICBkcm9wVXA6IHRydWUsXG4gICAgbGFiZWxLZXk6IHRoaXMuYXV0b2NvbXBsZXRlS2V5LFxuICAgIHJldHVyblRyaWdnZXI6IHRydWUsXG4gICAgbWVudGlvbkZpbHRlcjogKFxuICAgICAgc2VhcmNoU3RyaW5nOiBzdHJpbmcsXG4gICAgICBpdGVtczogeyBhdXRvY29tcGxldGVMYWJlbDogc3RyaW5nIH1bXVxuICAgICkgPT4gdGhpcy5maWx0ZXIoc2VhcmNoU3RyaW5nLCBpdGVtcyksXG4gICAgbWVudGlvblNlbGVjdDogKGl0ZW0sIHRyaWdnZXJDaGFyKSA9PlxuICAgICAgdGhpcy5pdGVtU2VsZWN0ZWRGcm9tQXV0b2NvbXBsZXRlTGlzdChcbiAgICAgICAgaXRlbSBhcyBNZW50aW9uQXV0Y29tcGxldGVMaXN0SXRlbSxcbiAgICAgICAgdHJpZ2dlckNoYXJcbiAgICAgICksXG4gIH07XG4gIHByaXZhdGUgc2xhc2hDb21tYW5kQ29uZmlnOiBNZW50aW9ucyA9IHtcbiAgICB0cmlnZ2VyQ2hhcjogdGhpcy5jb21tYW5kVHJpZ2dlckNoYXIsXG4gICAgZHJvcFVwOiB0cnVlLFxuICAgIGxhYmVsS2V5OiAnbmFtZScsXG4gICAgcmV0dXJuVHJpZ2dlcjogdHJ1ZSxcbiAgICBtZW50aW9uRmlsdGVyOiAoXG4gICAgICBzZWFyY2hTdHJpbmc6IHN0cmluZyxcbiAgICAgIGl0ZW1zOiB7IGF1dG9jb21wbGV0ZUxhYmVsOiBzdHJpbmcgfVtdXG4gICAgKSA9PiB0aGlzLmZpbHRlcihzZWFyY2hTdHJpbmcsIGl0ZW1zKSxcbiAgICBtZW50aW9uU2VsZWN0OiAoaXRlbSwgdHJpZ2dlckNoYXIpID0+XG4gICAgICB0aGlzLml0ZW1TZWxlY3RlZEZyb21BdXRvY29tcGxldGVMaXN0KFxuICAgICAgICBpdGVtIGFzIE1lbnRpb25BdXRjb21wbGV0ZUxpc3RJdGVtLFxuICAgICAgICB0cmlnZ2VyQ2hhclxuICAgICAgKSxcbiAgfTtcbiAgcHJpdmF0ZSBzZWFyY2hUZXJtJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nPignJyk7XG4gIHByaXZhdGUgaXNWaWV3SW5pdGVkID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBjaGFubmVsU2VydmljZTogQ2hhbm5lbFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBjaGF0Q2xpZW50U2VydmljZTogQ2hhdENsaWVudFNlcnZpY2UsXG4gICAgcHJpdmF0ZSB0cmFuc2xpdGVyYXRpb25TZXJ2aWNlOiBUcmFuc2xpdGVyYXRpb25TZXJ2aWNlLFxuICAgIHByaXZhdGUgZW1vamlJbnB1dFNlcnZpY2U6IEVtb2ppSW5wdXRTZXJ2aWNlLFxuICAgIHByaXZhdGUgY3VzdG9tVGVtcGxhdGVzU2VydmljZTogQ3VzdG9tVGVtcGxhdGVzU2VydmljZSxcbiAgICBwcml2YXRlIHRoZW1lU2VydmljZTogVGhlbWVTZXJ2aWNlLFxuICAgIHByaXZhdGUgY2RSZWY6IENoYW5nZURldGVjdG9yUmVmXG4gICkge1xuICAgIHRoaXMuc2VhcmNoVGVybSQucGlwZShkZWJvdW5jZVRpbWUoMzAwKSkuc3Vic2NyaWJlKChzZWFyY2hUZXJtKSA9PiB7XG4gICAgICBpZiAoc2VhcmNoVGVybS5zdGFydHNXaXRoKHRoaXMubWVudGlvblRyaWdnZXJDaGFyKSkge1xuICAgICAgICB2b2lkIHRoaXMudXBkYXRlTWVudGlvbk9wdGlvbnMoc2VhcmNoVGVybSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXG4gICAgICB0aGlzLmNoYW5uZWxTZXJ2aWNlLmFjdGl2ZUNoYW5uZWwkLnN1YnNjcmliZSgoY2hhbm5lbCkgPT4ge1xuICAgICAgICBjb25zdCBjb21tYW5kcyA9IGNoYW5uZWw/LmdldENvbmZpZygpPy5jb21tYW5kcyB8fCBbXTtcbiAgICAgICAgdGhpcy5zbGFzaENvbW1hbmRDb25maWcuaXRlbXMgPSBjb21tYW5kcy5tYXAoKGMpID0+ICh7XG4gICAgICAgICAgLi4uYyxcbiAgICAgICAgICBbdGhpcy5hdXRvY29tcGxldGVLZXldOiBjLm5hbWUsXG4gICAgICAgICAgdHlwZTogJ2NvbW1hbmQnLFxuICAgICAgICB9KSk7XG4gICAgICAgIHRoaXMubWVudGlvbmVkVXNlcnMgPSBbXTtcbiAgICAgICAgdGhpcy51c2VyTWVudGlvbnMubmV4dChbLi4udGhpcy5tZW50aW9uZWRVc2Vyc10pO1xuICAgICAgICB2b2lkIHRoaXMudXBkYXRlTWVudGlvbk9wdGlvbnModGhpcy5zZWFyY2hUZXJtJC5nZXRWYWx1ZSgpKTtcbiAgICAgIH0pXG4gICAgKTtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcbiAgICAgIHRoaXMuZW1vamlJbnB1dFNlcnZpY2UuZW1vamlJbnB1dCQuc3Vic2NyaWJlKChlbW9qaSkgPT4ge1xuICAgICAgICB0aGlzLm1lc3NhZ2VJbnB1dC5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgICAgIGNvbnN0IHsgc2VsZWN0aW9uU3RhcnQgfSA9IHRoaXMubWVzc2FnZUlucHV0Lm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgIHRoaXMubWVzc2FnZUlucHV0Lm5hdGl2ZUVsZW1lbnQuc2V0UmFuZ2VUZXh0KGVtb2ppKTtcbiAgICAgICAgdGhpcy5tZXNzYWdlSW5wdXQubmF0aXZlRWxlbWVudC5zZWxlY3Rpb25TdGFydCA9XG4gICAgICAgICAgc2VsZWN0aW9uU3RhcnQhICsgZW1vamkubGVuZ3RoO1xuICAgICAgICB0aGlzLm1lc3NhZ2VJbnB1dC5uYXRpdmVFbGVtZW50LnNlbGVjdGlvbkVuZCA9XG4gICAgICAgICAgc2VsZWN0aW9uU3RhcnQhICsgZW1vamkubGVuZ3RoO1xuICAgICAgICB0aGlzLmlucHV0Q2hhbmdlZCgpO1xuICAgICAgfSlcbiAgICApO1xuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxuICAgICAgdGhpcy5jdXN0b21UZW1wbGF0ZXNTZXJ2aWNlLm1lbnRpb25BdXRvY29tcGxldGVJdGVtVGVtcGxhdGUkLnN1YnNjcmliZShcbiAgICAgICAgKHRlbXBsYXRlKSA9PiAodGhpcy5tZW50aW9uQXV0b2NvbXBsZXRlSXRlbVRlbXBsYXRlID0gdGVtcGxhdGUpXG4gICAgICApXG4gICAgKTtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcbiAgICAgIHRoaXMuY3VzdG9tVGVtcGxhdGVzU2VydmljZS5jb21tYW5kQXV0b2NvbXBsZXRlSXRlbVRlbXBsYXRlJC5zdWJzY3JpYmUoXG4gICAgICAgICh0ZW1wbGF0ZSkgPT4gKHRoaXMuY29tbWFuZEF1dG9jb21wbGV0ZUl0ZW1UZW1wbGF0ZSA9IHRlbXBsYXRlKVxuICAgICAgKVxuICAgICk7XG4gICAgdGhpcy5hdXRvY29tcGxldGVDb25maWcubWVudGlvbnMgPSBbXG4gICAgICB0aGlzLnVzZXJNZW50aW9uQ29uZmlnLFxuICAgICAgdGhpcy5zbGFzaENvbW1hbmRDb25maWcsXG4gICAgXTtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBpZiAoY2hhbmdlcy5hcmVNZW50aW9uc0VuYWJsZWQpIHtcbiAgICAgIGlmICh0aGlzLmFyZU1lbnRpb25zRW5hYmxlZCkge1xuICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZUNvbmZpZy5tZW50aW9ucyA9IFtcbiAgICAgICAgICB0aGlzLnVzZXJNZW50aW9uQ29uZmlnLFxuICAgICAgICAgIHRoaXMuc2xhc2hDb21tYW5kQ29uZmlnLFxuICAgICAgICBdO1xuICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZUNvbmZpZyA9IHsgLi4udGhpcy5hdXRvY29tcGxldGVDb25maWcgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlQ29uZmlnLm1lbnRpb25zID0gW3RoaXMuc2xhc2hDb21tYW5kQ29uZmlnXTtcbiAgICAgICAgdGhpcy5hdXRvY29tcGxldGVDb25maWcgPSB7IC4uLnRoaXMuYXV0b2NvbXBsZXRlQ29uZmlnIH07XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChjaGFuZ2VzLm1lbnRpb25TY29wZSkge1xuICAgICAgdm9pZCB0aGlzLnVwZGF0ZU1lbnRpb25PcHRpb25zKHRoaXMuc2VhcmNoVGVybSQuZ2V0VmFsdWUoKSk7XG4gICAgfVxuICAgIGlmIChjaGFuZ2VzLnZhbHVlICYmICF0aGlzLnZhbHVlICYmIHRoaXMubWVzc2FnZUlucHV0KSB7XG4gICAgICB0aGlzLm1lc3NhZ2VJbnB1dC5uYXRpdmVFbGVtZW50LnN0eWxlLmhlaWdodCA9ICdhdXRvJztcbiAgICAgIHRoaXMudXBkYXRlTWVudGlvbmVkVXNlcnNGcm9tVGV4dCgpO1xuICAgIH0gZWxzZSBpZiAoXG4gICAgICBjaGFuZ2VzLnZhbHVlICYmXG4gICAgICB0aGlzLnZhbHVlICYmXG4gICAgICB0aGlzLm1lc3NhZ2VJbnB1dCAmJlxuICAgICAgdGhpcy5pc1ZpZXdJbml0ZWRcbiAgICApIHtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBpZiAodGhpcy5tZXNzYWdlSW5wdXQubmF0aXZlRWxlbWVudC5zY3JvbGxIZWlnaHQgPiAwKSB7XG4gICAgICAgICAgdGhpcy5hZGp1c3RUZXh0YXJlYUhlaWdodCgpO1xuICAgICAgICB9XG4gICAgICB9LCAwKTtcbiAgICB9XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgdGhpcy5pc1ZpZXdJbml0ZWQgPSB0cnVlO1xuICAgIGlmICh0aGlzLm1lc3NhZ2VJbnB1dC5uYXRpdmVFbGVtZW50LnNjcm9sbEhlaWdodCA+IDApIHtcbiAgICAgIHRoaXMuYWRqdXN0VGV4dGFyZWFIZWlnaHQoKTtcbiAgICB9XG4gIH1cblxuICBmaWx0ZXIoc2VhcmNoU3RyaW5nOiBzdHJpbmcsIGl0ZW1zOiB7IGF1dG9jb21wbGV0ZUxhYmVsOiBzdHJpbmcgfVtdKSB7XG4gICAgcmV0dXJuIGl0ZW1zLmZpbHRlcigoaXRlbSkgPT5cbiAgICAgIHRoaXMudHJhbnNsaXRlcmF0ZShpdGVtLmF1dG9jb21wbGV0ZUxhYmVsLnRvTG93ZXJDYXNlKCkpLmluY2x1ZGVzKFxuICAgICAgICB0aGlzLnRyYW5zbGl0ZXJhdGUoc2VhcmNoU3RyaW5nLnRvTG93ZXJDYXNlKCkpXG4gICAgICApXG4gICAgKTtcbiAgfVxuXG4gIGl0ZW1TZWxlY3RlZEZyb21BdXRvY29tcGxldGVMaXN0KFxuICAgIGl0ZW06IE1lbnRpb25BdXRjb21wbGV0ZUxpc3RJdGVtLFxuICAgIHRyaWdnZXJDaGFyID0gJydcbiAgKSB7XG4gICAgaWYgKHRyaWdnZXJDaGFyID09PSB0aGlzLm1lbnRpb25UcmlnZ2VyQ2hhcikge1xuICAgICAgdGhpcy5tZW50aW9uZWRVc2Vycy5wdXNoKChpdGVtLnVzZXIgPyBpdGVtLnVzZXIgOiBpdGVtKSBhcyBVc2VyUmVzcG9uc2UpO1xuICAgICAgdGhpcy51c2VyTWVudGlvbnMubmV4dChbLi4udGhpcy5tZW50aW9uZWRVc2Vyc10pO1xuICAgIH1cbiAgICByZXR1cm4gdHJpZ2dlckNoYXIgKyBpdGVtLmF1dG9jb21wbGV0ZUxhYmVsICsgJyAnO1xuICB9XG5cbiAgYXV0Y29tcGxldGVTZWFyY2hUZXJtQ2hhbmdlZChzZWFyY2hUZXJtOiBzdHJpbmcpIHtcbiAgICBpZiAoc2VhcmNoVGVybSA9PT0gdGhpcy5tZW50aW9uVHJpZ2dlckNoYXIpIHtcbiAgICAgIHZvaWQgdGhpcy51cGRhdGVNZW50aW9uT3B0aW9ucygpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNlYXJjaFRlcm0kLm5leHQoc2VhcmNoVGVybSk7XG4gICAgfVxuICB9XG5cbiAgaW5wdXRDaGFuZ2VkKCkge1xuICAgIHRoaXMudmFsdWVDaGFuZ2UuZW1pdCh0aGlzLm1lc3NhZ2VJbnB1dC5uYXRpdmVFbGVtZW50LnZhbHVlKTtcbiAgICB0aGlzLmFkanVzdFRleHRhcmVhSGVpZ2h0KCk7XG4gIH1cblxuICBpbnB1dExlZnQoKSB7XG4gICAgdGhpcy51cGRhdGVNZW50aW9uZWRVc2Vyc0Zyb21UZXh0KCk7XG4gIH1cblxuICBlbnRlckhpdChldmVudDogRXZlbnQpIHtcbiAgICBpZiAodGhpcy5pbnB1dE1vZGUgPT09ICdkZXNrdG9wJykge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIHRoaXMudXBkYXRlTWVudGlvbmVkVXNlcnNGcm9tVGV4dCgpO1xuICAgICAgdGhpcy5zZW5kLm5leHQoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFkanVzdFRleHRhcmVhSGVpZ2h0KCkge1xuICAgIHRoaXMubWVzc2FnZUlucHV0Lm5hdGl2ZUVsZW1lbnQuc3R5bGUuaGVpZ2h0ID0gJyc7XG4gICAgdGhpcy5tZXNzYWdlSW5wdXQubmF0aXZlRWxlbWVudC5zdHlsZS5oZWlnaHQgPSBgJHt0aGlzLm1lc3NhZ2VJbnB1dC5uYXRpdmVFbGVtZW50LnNjcm9sbEhlaWdodH1weGA7XG4gIH1cblxuICBwcml2YXRlIHRyYW5zbGl0ZXJhdGUoczogc3RyaW5nKSB7XG4gICAgaWYgKHRoaXMudHJhbnNsaXRlcmF0aW9uU2VydmljZSkge1xuICAgICAgcmV0dXJuIHRoaXMudHJhbnNsaXRlcmF0aW9uU2VydmljZS50cmFuc2xpdGVyYXRlKHMpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gcztcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHVwZGF0ZU1lbnRpb25PcHRpb25zKHNlYXJjaFRlcm0/OiBzdHJpbmcpIHtcbiAgICBpZiAoIXRoaXMuYXJlTWVudGlvbnNFbmFibGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHNlYXJjaFRlcm0gPSBzZWFyY2hUZXJtPy5yZXBsYWNlKHRoaXMubWVudGlvblRyaWdnZXJDaGFyLCAnJyk7XG4gICAgY29uc3QgcmVxdWVzdCA9XG4gICAgICB0aGlzLm1lbnRpb25TY29wZSA9PT0gJ2FwcGxpY2F0aW9uJ1xuICAgICAgICA/IChzOiBzdHJpbmcpID0+IHRoaXMuY2hhdENsaWVudFNlcnZpY2UuYXV0b2NvbXBsZXRlVXNlcnMocylcbiAgICAgICAgOiAoczogc3RyaW5nKSA9PiB0aGlzLmNoYW5uZWxTZXJ2aWNlLmF1dG9jb21wbGV0ZU1lbWJlcnMocyk7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcmVxdWVzdChzZWFyY2hUZXJtIHx8ICcnKTtcbiAgICBjb25zdCBpdGVtcyA9IHRoaXMuZmlsdGVyKFxuICAgICAgc2VhcmNoVGVybSB8fCAnJyxcbiAgICAgIHJlc3VsdC5tYXAoKGkpID0+IHtcbiAgICAgICAgY29uc3QgdXNlciA9IChpLnVzZXIgPyBpLnVzZXIgOiBpKSBhcyBVc2VyUmVzcG9uc2U7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgLi4uaSxcbiAgICAgICAgICBhdXRvY29tcGxldGVMYWJlbDogdXNlci5uYW1lIHx8IHVzZXIuaWQsXG4gICAgICAgICAgdHlwZTogJ21lbnRpb24nLFxuICAgICAgICB9O1xuICAgICAgfSlcbiAgICApO1xuICAgIHRoaXMudXNlck1lbnRpb25Db25maWcuaXRlbXMgPSBpdGVtcztcbiAgICB0aGlzLmF1dG9jb21wbGV0ZUNvbmZpZy5tZW50aW9ucyA9IFtcbiAgICAgIHRoaXMudXNlck1lbnRpb25Db25maWcsXG4gICAgICB0aGlzLnNsYXNoQ29tbWFuZENvbmZpZyxcbiAgICBdO1xuICAgIHRoaXMuYXV0b2NvbXBsZXRlQ29uZmlnID0geyAuLi50aGlzLmF1dG9jb21wbGV0ZUNvbmZpZyB9O1xuICAgIHRoaXMuY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVNZW50aW9uZWRVc2Vyc0Zyb21UZXh0KCkge1xuICAgIGNvbnN0IHVwZGF0ZWRNZW50aW9uZWRVc2VyczogVXNlclJlc3BvbnNlW10gPSBbXTtcbiAgICB0aGlzLm1lbnRpb25lZFVzZXJzLmZvckVhY2goKHUpID0+IHtcbiAgICAgIGNvbnN0IGtleSA9IHUubmFtZSB8fCB1LmlkO1xuICAgICAgaWYgKHRoaXMudmFsdWUuaW5jbHVkZXMoYCR7dGhpcy5tZW50aW9uVHJpZ2dlckNoYXJ9JHtrZXl9YCkpIHtcbiAgICAgICAgdXBkYXRlZE1lbnRpb25lZFVzZXJzLnB1c2godSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgaWYgKHVwZGF0ZWRNZW50aW9uZWRVc2Vycy5sZW5ndGggIT09IHRoaXMubWVudGlvbmVkVXNlcnMubGVuZ3RoKSB7XG4gICAgICB0aGlzLnVzZXJNZW50aW9ucy5uZXh0KFsuLi51cGRhdGVkTWVudGlvbmVkVXNlcnNdKTtcbiAgICAgIHRoaXMubWVudGlvbmVkVXNlcnMgPSB1cGRhdGVkTWVudGlvbmVkVXNlcnM7XG4gICAgfVxuICB9XG59XG4iLCI8dGV4dGFyZWFcbiAgI2lucHV0XG4gIGRhdGEtdGVzdGlkPVwidGV4dGFyZWFcIlxuICBjbGFzcz1cIlxuICAgIHJ0YV9fdGV4dGFyZWFcbiAgICBzdHItY2hhdF9fdGV4dGFyZWFfX3RleHRhcmVhXG4gICAgc3RyLWNoYXRfX2FuZ3VsYXItdGV4dGFyZWFcbiAgICBzdHItY2hhdF9fbWVzc2FnZS10ZXh0YXJlYVxuICBcIlxuICByb3dzPVwiMVwiXG4gIFt2YWx1ZV09XCJ2YWx1ZSB8fCAnJ1wiXG4gIFthdXRvZm9jdXNdPVwiYXV0b0ZvY3VzXCJcbiAgcGxhY2Vob2xkZXI9XCJ7eyBwbGFjZWhvbGRlciB8IHRyYW5zbGF0ZSB9fVwiXG4gIFttZW50aW9uQ29uZmlnXT1cImF1dG9jb21wbGV0ZUNvbmZpZ1wiXG4gIFttZW50aW9uTGlzdFRlbXBsYXRlXT1cImF1dG9jb21wbGV0ZUl0ZW1cIlxuICAoaW5wdXQpPVwiaW5wdXRDaGFuZ2VkKClcIlxuICAoa2V5ZG93bi5lbnRlcik9XCJlbnRlckhpdCgkZXZlbnQpXCJcbiAgKHNlYXJjaFRlcm0pPVwiYXV0Y29tcGxldGVTZWFyY2hUZXJtQ2hhbmdlZCgkZXZlbnQpXCJcbiAgKGJsdXIpPVwiaW5wdXRMZWZ0KClcIlxuPjwvdGV4dGFyZWE+XG48bmctdGVtcGxhdGUgI2F1dG9jb21wbGV0ZUl0ZW0gbGV0LWl0ZW09XCJpdGVtXCI+XG4gIDxkaXYgY2xhc3M9XCJydGEgcnRhX19pdGVtIHN0ci1jaGF0X19lbW9qaXNlYXJjaF9faXRlbVwiIFtuZ1N3aXRjaF09XCJpdGVtLnR5cGVcIj5cbiAgICA8ZGl2ICpuZ1N3aXRjaENhc2U9XCInbWVudGlvbidcIiBjbGFzcz1cInJ0YV9fZW50aXR5XCI+XG4gICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgICAgbWVudGlvbkF1dG9jb21wbGV0ZUl0ZW1UZW1wbGF0ZSB8fCBkZWZhdWx0TWVudGlvblRlbXBsYXRlO1xuICAgICAgICAgIGNvbnRleHQ6IHsgaXRlbTogaXRlbSB9XG4gICAgICAgIFwiXG4gICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgPC9kaXY+XG4gICAgPGRpdiAqbmdTd2l0Y2hDYXNlPVwiJ2NvbW1hbmQnXCIgY2xhc3M9XCJydGFfX2VudGl0eVwiPlxuICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICAgIGNvbW1hbmRBdXRvY29tcGxldGVJdGVtVGVtcGxhdGUgfHwgZGVmYXVsdENvbW1hbmRUZW1wbGF0ZTtcbiAgICAgICAgICBjb250ZXh0OiB7IGl0ZW06IGl0ZW0gfVxuICAgICAgICBcIlxuICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjZGVmYXVsdENvbW1hbmRUZW1wbGF0ZSBsZXQtaXRlbT1cIml0ZW1cIj5cbiAgPGRpdiBjbGFzcz1cInN0ci1jaGF0X19zbGFzaC1jb21tYW5kXCI+XG4gICAgPHNwYW4gY2xhc3M9XCJzdHItY2hhdF9fc2xhc2gtY29tbWFuZC1oZWFkZXJcIj5cbiAgICAgIDxzdHJvbmdcbiAgICAgICAgY2xhc3M9XCJzdHItY2hhdF9fc2xhc2gtY29tbWFuZC1uYW1lXCJcbiAgICAgICAgZGF0YS10ZXN0Y2xhc3M9XCJjb21tYW5kLW5hbWVcIlxuICAgICAgICA+e3sgaXRlbS5uYW1lIH19PC9zdHJvbmdcbiAgICAgID5cbiAgICAgIDxzcGFuIGNsYXNzPVwic3RyLWNoYXRfX3NsYXNoLWNvbW1hbmQtYXJnc1wiXG4gICAgICAgID4ve3sgaXRlbS5uYW1lIH19IHt7IGl0ZW0uYXJncyB9fTwvc3BhblxuICAgICAgPlxuICAgIDwvc3Bhbj5cbiAgICA8YnIgLz5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2RlZmF1bHRNZW50aW9uVGVtcGxhdGUgbGV0LWl0ZW09XCJpdGVtXCI+XG4gIDxkaXYgY2xhc3M9XCJzdHItY2hhdF9fdXNlci1pdGVtXCI+XG4gICAgPHN0cmVhbS1hdmF0YXItcGxhY2Vob2xkZXJcbiAgICAgIGRhdGEtdGVzdGNsYXNzPVwiYXZhdGFyXCJcbiAgICAgIGNsYXNzPVwic3RyLWNoYXRfX2F2YXRhciBzdHItY2hhdF9fYXZhdGFyLS1jaXJjbGVcIlxuICAgICAgdHlwZT1cInVzZXJcIlxuICAgICAgbG9jYXRpb249XCJhdXRvY29tcGxldGUtaXRlbVwiXG4gICAgICBbaW1hZ2VVcmxdPVwiaXRlbS5pbWFnZSB8fCBpdGVtLnVzZXI/LmltYWdlXCJcbiAgICAgIFtuYW1lXT1cIml0ZW0uYXV0b2NvbXBsZXRlTGFiZWxcIlxuICAgICAgW3VzZXJdPVwiaXRlbS51c2VyIHx8IGl0ZW1cIlxuICAgID48L3N0cmVhbS1hdmF0YXItcGxhY2Vob2xkZXI+XG4gICAgPHNwYW4gZGF0YS10ZXN0Y2xhc3M9XCJ1c2VybmFtZVwiIGNsYXNzPVwic3RyLWNoYXRfX3VzZXItaXRlbS0tbmFtZVwiPnt7XG4gICAgICBpdGVtLmF1dG9jb21wbGV0ZUxhYmVsXG4gICAgfX08L3NwYW4+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==