@cometchat/chat-uikit-angular 4.1.1 → 4.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/Calls/CallingExtensionDecorator.d.ts +1 -1
- package/CometChatConversations/cometchat-conversations/cometchat-conversations.component.d.ts +32 -26
- package/CometChatDetails/cometchat-details/cometchat-details.component.d.ts +3 -3
- package/CometChatGroupMembers/cometchat-group-members/cometchat-group-members.component.d.ts +24 -14
- package/CometChatMessageBubble/cometchat-message-bubble/cometchat-message-bubble.component.d.ts +3 -2
- package/CometChatMessageComposer/cometchat-message-composer/cometchat-message-composer.component.d.ts +84 -5
- package/CometChatMessageComposer/cometchat-message-composer.module.d.ts +2 -1
- package/CometChatMessageList/cometchat-message-list/cometchat-message-list.component.d.ts +258 -51
- package/CometChatMessages/cometchat-messages/cometchat-messages.component.d.ts +1 -0
- package/CometChatThreadedMessages/cometchat-threaded-messages/cometchat-threaded-messages.component.d.ts +7 -0
- package/CometChatUserMemberWrapper/cometchat-user-member-wrapper.component.d.ts +41 -0
- package/CometChatUserMemberWrapper/cometchat-user-member-wrapper.module.d.ts +11 -0
- package/CometChatUsers/cometchat-users/cometchat-users.component.d.ts +22 -12
- package/Extensions/CollaborativeDocument/CollaborativeDocumentExtensionDecorator.d.ts +1 -1
- package/Extensions/CollaborativeWhiteboard/CollaborativeWhiteboardExtensionDecorator.d.ts +1 -1
- package/Extensions/PollsExtension/PollsExtensionDecorator.d.ts +1 -1
- package/Extensions/Stickers/StickersExtensionDecorator.d.ts +3 -3
- package/Extensions/TextModerator/TextModeratorExtensionDecorator.d.ts +1 -1
- package/README.md +7 -8
- package/Shared/CometChatUIkit/CometChatUIKit.d.ts +8 -1
- package/Shared/Framework/DataSource.d.ts +11 -3
- package/Shared/Framework/DataSourceDecorator.d.ts +11 -3
- package/Shared/Utils/MessageUtils.d.ts +100 -2
- package/Shared/Views/AIAssistBotMessageList/aiassist-bot-message-list/aiassist-bot-message-list.component.d.ts +2 -2
- package/assets/InfoSimpleIcon.svg +4 -0
- package/assets/empty-slot.svg +14 -0
- package/assets/message-delivered.svg +4 -3
- package/assets/message-read.svg +4 -3
- package/assets/threadIndicatorIcon.svg +11 -0
- package/esm2020/Calls/CallingExtensionDecorator.mjs +26 -13
- package/esm2020/CometChatAddMembers/cometchat-add-members/cometchat-add-members.component.mjs +1 -1
- package/esm2020/CometChatContacts/cometchat-contacts/cometchat-contacts.component.mjs +3 -3
- package/esm2020/CometChatConversations/cometchat-conversations/cometchat-conversations.component.mjs +286 -130
- package/esm2020/CometChatConversationsWithMessages/cometchat-conversations-with-messages/cometchat-conversations-with-messages.component.mjs +3 -4
- package/esm2020/CometChatDetails/cometchat-details/cometchat-details.component.mjs +6 -8
- package/esm2020/CometChatGroupMembers/cometchat-group-members/cometchat-group-members.component.mjs +155 -58
- package/esm2020/CometChatGroupsWithMessages/cometchat-groups-with-messages/cometchat-groups-with-messages.component.mjs +3 -3
- package/esm2020/CometChatMessageBubble/cometchat-message-bubble/cometchat-message-bubble.component.mjs +11 -5
- package/esm2020/CometChatMessageComposer/cometchat-message-composer/cometchat-message-composer.component.mjs +354 -64
- package/esm2020/CometChatMessageComposer/cometchat-message-composer.module.mjs +5 -4
- package/esm2020/CometChatMessageHeader/cometchat-message-header/cometchat-message-header.component.mjs +3 -3
- package/esm2020/CometChatMessageInformation/cometchat-message-information/cometchat-message-information.component.mjs +2 -2
- package/esm2020/CometChatMessageList/cometchat-message-list/cometchat-message-list.component.mjs +947 -317
- package/esm2020/CometChatMessages/cometchat-messages/cometchat-messages.component.mjs +10 -4
- package/esm2020/CometChatThreadedMessages/cometchat-threaded-messages/cometchat-threaded-messages.component.mjs +52 -3
- package/esm2020/CometChatTransferOwnership/cometchat-transfer-ownership/cometchat-transfer-ownership.component.mjs +1 -1
- package/esm2020/CometChatUserMemberWrapper/cometchat-user-member-wrapper.component.mjs +75 -0
- package/esm2020/CometChatUserMemberWrapper/cometchat-user-member-wrapper.module.mjs +21 -0
- package/esm2020/CometChatUsers/cometchat-users/cometchat-users.component.mjs +114 -36
- package/esm2020/CometChatUsersWithMessages/cometchat-users-with-messages/cometchat-users-with-messages.component.mjs +1 -1
- package/esm2020/Extensions/CollaborativeDocument/CollaborativeDocumentExtensionDecorator.mjs +18 -13
- package/esm2020/Extensions/CollaborativeWhiteboard/CollaborativeWhiteboardExtensionDecorator.mjs +19 -13
- package/esm2020/Extensions/PollsExtension/PollsExtensionDecorator.mjs +10 -8
- package/esm2020/Extensions/Stickers/StickersExtensionDecorator.mjs +22 -18
- package/esm2020/Extensions/TextModerator/TextModeratorExtensionDecorator.mjs +62 -7
- package/esm2020/Shared/CometChatUIkit/CometChatUIKit.mjs +51 -3
- package/esm2020/Shared/Framework/DataSource.mjs +1 -1
- package/esm2020/Shared/Framework/DataSourceDecorator.mjs +27 -3
- package/esm2020/Shared/Utils/MessageUtils.mjs +261 -10
- package/esm2020/Shared/Views/AIAssistBotMessageList/aiassist-bot-message-list/aiassist-bot-message-list.component.mjs +5 -4
- package/esm2020/public-api.mjs +4 -4
- package/fesm2015/cometchat-chat-uikit-angular.mjs +3941 -2204
- package/fesm2015/cometchat-chat-uikit-angular.mjs.map +1 -1
- package/fesm2020/cometchat-chat-uikit-angular.mjs +4542 -2786
- package/fesm2020/cometchat-chat-uikit-angular.mjs.map +1 -1
- package/package.json +6 -6
- package/public-api.d.ts +3 -3
- package/Extensions/Reactions/ReactionExtension.d.ts +0 -5
- package/Extensions/Reactions/ReactionExtensionDecorator.d.ts +0 -9
- package/esm2020/Extensions/Reactions/ReactionExtension.mjs +0 -12
- package/esm2020/Extensions/Reactions/ReactionExtensionDecorator.mjs +0 -31
|
@@ -1,8 +1,13 @@
|
|
|
1
|
-
import { CometChatMessageOption, CometChatMessageTemplate, CometChatMessageComposerAction, localize, CometChatUIKitConstants, fontHelper, } from "@cometchat/uikit-resources";
|
|
2
|
-
import { ConversationUtils } from "@cometchat/uikit-shared";
|
|
1
|
+
import { CometChatMessageOption, MessageBubbleAlignment, CometChatMessageTemplate, CometChatMessageComposerAction, localize, CometChatUIKitConstants, fontHelper, MentionsTargetElement, } from "@cometchat/uikit-resources";
|
|
2
|
+
import { CometChatMentionsTextFormatter, CometChatUIKitLoginListener, CometChatUrlTextFormatter, ConversationUtils, UserMentionStyle, } from "@cometchat/uikit-shared";
|
|
3
3
|
import { CometChat } from "@cometchat/chat-sdk-javascript";
|
|
4
4
|
import { ChatConfigurator } from "../Framework/ChatConfigurator";
|
|
5
5
|
export class MessageUtils {
|
|
6
|
+
/**
|
|
7
|
+
* Creates an option to edit message.
|
|
8
|
+
* @param {CometChatTheme} theme - The theme object.
|
|
9
|
+
* @return {CometChatMessageOption} - Returns a new message option.
|
|
10
|
+
*/
|
|
6
11
|
getEditOption(theme) {
|
|
7
12
|
return new CometChatMessageOption({
|
|
8
13
|
id: CometChatUIKitConstants.MessageOption.editMessage,
|
|
@@ -15,6 +20,28 @@ export class MessageUtils {
|
|
|
15
20
|
titleColor: theme.palette.getAccent600(),
|
|
16
21
|
});
|
|
17
22
|
}
|
|
23
|
+
/**
|
|
24
|
+
* Creates an option to react to a message.
|
|
25
|
+
* @param {CometChatTheme} theme - The theme object.
|
|
26
|
+
* @return {CometChatMessageOption} - Returns a new message option.
|
|
27
|
+
*/
|
|
28
|
+
getReactionOption(theme) {
|
|
29
|
+
return new CometChatMessageOption({
|
|
30
|
+
id: CometChatUIKitConstants.MessageOption.reactToMessage,
|
|
31
|
+
title: localize("REACT_TO_MESSAGE"),
|
|
32
|
+
iconURL: "assets/addreaction.svg",
|
|
33
|
+
onClick: undefined,
|
|
34
|
+
iconTint: theme.palette.getAccent600(),
|
|
35
|
+
backgroundColor: "transparent",
|
|
36
|
+
titleFont: fontHelper(theme.typography.subtitle1),
|
|
37
|
+
titleColor: theme.palette.getAccent600(),
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Creates an option to get info about a message.
|
|
42
|
+
* @param {CometChatTheme} theme - The theme object.
|
|
43
|
+
* @return {CometChatMessageOption} - Returns a new message option.
|
|
44
|
+
*/
|
|
18
45
|
getMessageInfoOption(theme) {
|
|
19
46
|
return new CometChatMessageOption({
|
|
20
47
|
id: CometChatUIKitConstants.MessageOption.messageInformation,
|
|
@@ -27,6 +54,11 @@ export class MessageUtils {
|
|
|
27
54
|
titleColor: theme.palette.getAccent600(),
|
|
28
55
|
});
|
|
29
56
|
}
|
|
57
|
+
/**
|
|
58
|
+
* Creates an option to send a private message.
|
|
59
|
+
* @param {CometChatTheme} theme - The theme object.
|
|
60
|
+
* @return {CometChatMessageOption} - Returns a new message option.
|
|
61
|
+
*/
|
|
30
62
|
getMessagePrivatelyOption(theme) {
|
|
31
63
|
return new CometChatMessageOption({
|
|
32
64
|
id: CometChatUIKitConstants.MessageOption.sendMessagePrivately,
|
|
@@ -39,6 +71,11 @@ export class MessageUtils {
|
|
|
39
71
|
titleColor: theme.palette.getAccent600(),
|
|
40
72
|
});
|
|
41
73
|
}
|
|
74
|
+
/**
|
|
75
|
+
* Creates an option to delete a message.
|
|
76
|
+
* @param {CometChatTheme} theme - The theme object.
|
|
77
|
+
* @return {CometChatMessageOption} - Returns a new message option.
|
|
78
|
+
*/
|
|
42
79
|
getDeleteOption(theme) {
|
|
43
80
|
return new CometChatMessageOption({
|
|
44
81
|
id: CometChatUIKitConstants.MessageOption.deleteMessage,
|
|
@@ -51,6 +88,11 @@ export class MessageUtils {
|
|
|
51
88
|
titleColor: theme.palette.getAccent600(),
|
|
52
89
|
});
|
|
53
90
|
}
|
|
91
|
+
/**
|
|
92
|
+
* Creates an option to reply to a message in a thread.
|
|
93
|
+
* @param {CometChatTheme} theme - The theme object.
|
|
94
|
+
* @return {CometChatMessageOption} - Returns a new message option.
|
|
95
|
+
*/
|
|
54
96
|
getReplyInThreadOption(theme) {
|
|
55
97
|
return new CometChatMessageOption({
|
|
56
98
|
id: CometChatUIKitConstants.MessageOption.replyInThread,
|
|
@@ -63,6 +105,11 @@ export class MessageUtils {
|
|
|
63
105
|
titleColor: theme.palette.getAccent600(),
|
|
64
106
|
});
|
|
65
107
|
}
|
|
108
|
+
/**
|
|
109
|
+
* Creates an option to copy a message.
|
|
110
|
+
* @param {CometChatTheme} theme - The theme object.
|
|
111
|
+
* @return {CometChatMessageOption} - Returns a new message option.
|
|
112
|
+
*/
|
|
66
113
|
getCopyOption(theme) {
|
|
67
114
|
return new CometChatMessageOption({
|
|
68
115
|
id: CometChatUIKitConstants.MessageOption.copyMessage,
|
|
@@ -75,9 +122,23 @@ export class MessageUtils {
|
|
|
75
122
|
titleColor: theme.palette.getAccent600(),
|
|
76
123
|
});
|
|
77
124
|
}
|
|
125
|
+
/**
|
|
126
|
+
* Checks if a message is sent by current logged in user.
|
|
127
|
+
* @param {CometChat.User} loggedInUser - The current logged in user.
|
|
128
|
+
* @param {CometChat.BaseMessage} message - The message to check.
|
|
129
|
+
* @return {boolean} - Returns true if message is sent by current logged in user, otherwise false.
|
|
130
|
+
*/
|
|
78
131
|
isSentByMe(loggedInUser, message) {
|
|
79
132
|
return loggedInUser.getUid() === message.getSender().getUid();
|
|
80
133
|
}
|
|
134
|
+
/**
|
|
135
|
+
* Fetches options for text messages.
|
|
136
|
+
* @param {CometChat.User} loggedInUser - The current logged in user.
|
|
137
|
+
* @param {CometChat.BaseMessage} messageObject - The message object.
|
|
138
|
+
* @param {CometChatTheme} theme - The theme object.
|
|
139
|
+
* @param {CometChat.Group} group - The group object.
|
|
140
|
+
* @return {Array<CometChatMessageOption>} - Returns an array of message options.
|
|
141
|
+
*/
|
|
81
142
|
getTextMessageOptions(loggedInUser, messageObject, theme, group) {
|
|
82
143
|
let _isSentByMe = this.isSentByMe(loggedInUser, messageObject);
|
|
83
144
|
let _isModerator = false;
|
|
@@ -92,21 +153,53 @@ export class MessageUtils {
|
|
|
92
153
|
messageOptionList.unshift(this.getCopyOption(theme));
|
|
93
154
|
return messageOptionList;
|
|
94
155
|
}
|
|
156
|
+
/**
|
|
157
|
+
* Fetches options for image messages.
|
|
158
|
+
* @param {CometChat.User} loggedInUser - The current logged in user.
|
|
159
|
+
* @param {CometChat.BaseMessage} messageObject - The message object.
|
|
160
|
+
* @param {CometChatTheme} theme - The theme object.
|
|
161
|
+
* @param {CometChat.Group} group - The group object.
|
|
162
|
+
* @return {Array<CometChatMessageOption>} - Returns an array of message options.
|
|
163
|
+
*/
|
|
95
164
|
getImageMessageOptions(loggedInUser, messageObject, theme, group) {
|
|
96
165
|
let messageOptionList = [];
|
|
97
166
|
messageOptionList = ChatConfigurator.getDataSource().getCommonOptions(loggedInUser, messageObject, theme, group);
|
|
98
167
|
return messageOptionList;
|
|
99
168
|
}
|
|
169
|
+
/**
|
|
170
|
+
* Fetches options for video messages.
|
|
171
|
+
* @param {CometChat.User} loggedInUser - The current logged in user.
|
|
172
|
+
* @param {CometChat.BaseMessage} messageObject - The message object.
|
|
173
|
+
* @param {CometChatTheme} theme - The theme object.
|
|
174
|
+
* @param {CometChat.Group} group - (Optional) The group object.
|
|
175
|
+
* @return {Array<CometChatMessageOption>} - Returns an array of message options.
|
|
176
|
+
*/
|
|
100
177
|
getVideoMessageOptions(loggedInUser, messageObject, theme, group) {
|
|
101
178
|
let messageOptionList = [];
|
|
102
179
|
messageOptionList = ChatConfigurator.getDataSource().getCommonOptions(loggedInUser, messageObject, theme, group);
|
|
103
180
|
return messageOptionList;
|
|
104
181
|
}
|
|
182
|
+
/**
|
|
183
|
+
* Fetches options for audio messages.
|
|
184
|
+
* @param {CometChat.User} loggedInUser - The current logged in user.
|
|
185
|
+
* @param {CometChat.BaseMessage} messageObject - The message object.
|
|
186
|
+
* @param {CometChatTheme} theme - The theme object.
|
|
187
|
+
* @param {CometChat.Group} group - (Optional) The group object.
|
|
188
|
+
* @return {Array<CometChatMessageOption>} - Returns an array of message options.
|
|
189
|
+
*/
|
|
105
190
|
getAudioMessageOptions(loggedInUser, messageObject, theme, group) {
|
|
106
191
|
let messageOptionList = [];
|
|
107
192
|
messageOptionList = ChatConfigurator.getDataSource().getCommonOptions(loggedInUser, messageObject, theme, group);
|
|
108
193
|
return messageOptionList;
|
|
109
194
|
}
|
|
195
|
+
/**
|
|
196
|
+
* Fetches options for file messages.
|
|
197
|
+
* @param {CometChat.User} loggedInUser - The current logged in user.
|
|
198
|
+
* @param {CometChat.BaseMessage} messageObject - The message object.
|
|
199
|
+
* @param {CometChatTheme} theme - The theme object.
|
|
200
|
+
* @param {CometChat.Group} group - (Optional) The group object.
|
|
201
|
+
* @return {Array<CometChatMessageOption>} - Returns an array of message options.
|
|
202
|
+
*/
|
|
110
203
|
getFileMessageOptions(loggedInUser, messageObject, theme, group) {
|
|
111
204
|
let messageOptionList = [];
|
|
112
205
|
messageOptionList = ChatConfigurator.getDataSource().getCommonOptions(loggedInUser, messageObject, theme, group);
|
|
@@ -115,6 +208,13 @@ export class MessageUtils {
|
|
|
115
208
|
getBottomView(_messageObject, _alignment) {
|
|
116
209
|
return null;
|
|
117
210
|
}
|
|
211
|
+
getSchedulerMessageTemplate() {
|
|
212
|
+
return new CometChatMessageTemplate({
|
|
213
|
+
type: CometChatUIKitConstants.MessageTypes.scheduler,
|
|
214
|
+
category: CometChatUIKitConstants.MessageCategory.interactive,
|
|
215
|
+
options: ChatConfigurator.getDataSource().getMessageOptions,
|
|
216
|
+
});
|
|
217
|
+
}
|
|
118
218
|
getTextMessageTemplate() {
|
|
119
219
|
return new CometChatMessageTemplate({
|
|
120
220
|
type: CometChatUIKitConstants.MessageTypes.text,
|
|
@@ -179,7 +279,8 @@ export class MessageUtils {
|
|
|
179
279
|
ChatConfigurator.getDataSource().getFileMessageTemplate(),
|
|
180
280
|
ChatConfigurator.getDataSource().getGroupActionTemplate(),
|
|
181
281
|
ChatConfigurator.getDataSource().getFormMessageTemplate(),
|
|
182
|
-
ChatConfigurator.getDataSource().getCardMessageTemplate()
|
|
282
|
+
ChatConfigurator.getDataSource().getCardMessageTemplate(),
|
|
283
|
+
ChatConfigurator.getDataSource().getSchedulerMessageTemplate(),
|
|
183
284
|
];
|
|
184
285
|
}
|
|
185
286
|
getMessageTemplate(messageType, messageCategory) {
|
|
@@ -213,6 +314,10 @@ export class MessageUtils {
|
|
|
213
314
|
case CometChatUIKitConstants.MessageTypes.card:
|
|
214
315
|
_template = ChatConfigurator.getDataSource().getCardMessageTemplate();
|
|
215
316
|
break;
|
|
317
|
+
case CometChatUIKitConstants.MessageTypes.scheduler:
|
|
318
|
+
_template =
|
|
319
|
+
ChatConfigurator.getDataSource().getSchedulerMessageTemplate();
|
|
320
|
+
break;
|
|
216
321
|
}
|
|
217
322
|
}
|
|
218
323
|
return _template;
|
|
@@ -246,8 +351,10 @@ export class MessageUtils {
|
|
|
246
351
|
break;
|
|
247
352
|
}
|
|
248
353
|
}
|
|
249
|
-
else if (
|
|
250
|
-
|
|
354
|
+
else if (messageObject.getCategory() ==
|
|
355
|
+
CometChatUIKitConstants.MessageCategory.custom ||
|
|
356
|
+
messageObject.getCategory() ==
|
|
357
|
+
CometChatUIKitConstants.MessageCategory.interactive) {
|
|
251
358
|
_optionList = ChatConfigurator.getDataSource().getCommonOptions(loggedInUser, messageObject, theme, group);
|
|
252
359
|
}
|
|
253
360
|
return _optionList;
|
|
@@ -258,6 +365,7 @@ export class MessageUtils {
|
|
|
258
365
|
if (group?.getScope() == CometChatUIKitConstants.groupMemberScope.moderator)
|
|
259
366
|
_isModerator = true;
|
|
260
367
|
let messageOptionList = [];
|
|
368
|
+
messageOptionList.push(this.getReactionOption(theme));
|
|
261
369
|
if (!messageObject.getParentMessageId()) {
|
|
262
370
|
messageOptionList.push(this.getReplyInThreadOption(theme));
|
|
263
371
|
}
|
|
@@ -280,7 +388,8 @@ export class MessageUtils {
|
|
|
280
388
|
CometChatUIKitConstants.MessageTypes.file,
|
|
281
389
|
CometChatUIKitConstants.MessageTypes.groupMember,
|
|
282
390
|
CometChatUIKitConstants.MessageTypes.form,
|
|
283
|
-
CometChatUIKitConstants.MessageTypes.card
|
|
391
|
+
CometChatUIKitConstants.MessageTypes.card,
|
|
392
|
+
CometChatUIKitConstants.MessageTypes.scheduler,
|
|
284
393
|
];
|
|
285
394
|
}
|
|
286
395
|
addList() {
|
|
@@ -290,7 +399,7 @@ export class MessageUtils {
|
|
|
290
399
|
return [
|
|
291
400
|
CometChatUIKitConstants.MessageCategory.message,
|
|
292
401
|
CometChatUIKitConstants.MessageCategory.action,
|
|
293
|
-
CometChatUIKitConstants.MessageCategory.interactive
|
|
402
|
+
CometChatUIKitConstants.MessageCategory.interactive,
|
|
294
403
|
];
|
|
295
404
|
}
|
|
296
405
|
getAuxiliaryOptions(id, user, group) {
|
|
@@ -398,11 +507,153 @@ export class MessageUtils {
|
|
|
398
507
|
];
|
|
399
508
|
return actions;
|
|
400
509
|
}
|
|
401
|
-
getLastConversationMessage(conversation, loggedInUser) {
|
|
402
|
-
|
|
510
|
+
getLastConversationMessage(conversation, loggedInUser, additionalConfigurations) {
|
|
511
|
+
let message = ConversationUtils.getLastConversationMessage(conversation, loggedInUser);
|
|
512
|
+
let messageObject = conversation.getLastMessage();
|
|
513
|
+
let config = {
|
|
514
|
+
...additionalConfigurations,
|
|
515
|
+
textFormatters: additionalConfigurations?.textFormatters &&
|
|
516
|
+
additionalConfigurations?.textFormatters.length
|
|
517
|
+
? [...additionalConfigurations.textFormatters]
|
|
518
|
+
: [this.getMentionsTextFormatter({ theme: additionalConfigurations.theme, disableMentions: additionalConfigurations.disableMentions })],
|
|
519
|
+
};
|
|
520
|
+
let textFormatters = config.textFormatters;
|
|
521
|
+
if (config && !config.disableMentions) {
|
|
522
|
+
let mentionsTextFormatter;
|
|
523
|
+
for (let i = 0; i < textFormatters.length; i++) {
|
|
524
|
+
if (textFormatters[i] instanceof CometChatMentionsTextFormatter) {
|
|
525
|
+
mentionsTextFormatter = textFormatters[i];
|
|
526
|
+
mentionsTextFormatter.setMessage(messageObject);
|
|
527
|
+
if (messageObject.getMentionedUsers().length) {
|
|
528
|
+
mentionsTextFormatter.setCometChatUserGroupMembers(messageObject.getMentionedUsers());
|
|
529
|
+
}
|
|
530
|
+
mentionsTextFormatter.setLoggedInUser(CometChatUIKitLoginListener.getLoggedInUser());
|
|
531
|
+
}
|
|
532
|
+
if (mentionsTextFormatter) {
|
|
533
|
+
break;
|
|
534
|
+
}
|
|
535
|
+
}
|
|
536
|
+
if (!mentionsTextFormatter) {
|
|
537
|
+
mentionsTextFormatter =
|
|
538
|
+
ChatConfigurator.getDataSource().getMentionsTextFormatter({
|
|
539
|
+
messageObject,
|
|
540
|
+
...config,
|
|
541
|
+
alignment: null,
|
|
542
|
+
theme: additionalConfigurations.theme,
|
|
543
|
+
});
|
|
544
|
+
textFormatters.push(mentionsTextFormatter);
|
|
545
|
+
}
|
|
546
|
+
}
|
|
547
|
+
if (messageObject &&
|
|
548
|
+
messageObject instanceof CometChat.TextMessage) {
|
|
549
|
+
for (let i = 0; i < textFormatters.length; i++) {
|
|
550
|
+
message = textFormatters[i].getFormattedText(message, { mentionsTargetElement: MentionsTargetElement.conversation });
|
|
551
|
+
}
|
|
552
|
+
}
|
|
553
|
+
return message;
|
|
554
|
+
}
|
|
555
|
+
/**
|
|
556
|
+
* Adds styled @ for every mention in the text by matching uid
|
|
557
|
+
*
|
|
558
|
+
* @param {CometChat.TextMessage} message
|
|
559
|
+
* @param {string} subtitle
|
|
560
|
+
* @returns {void}
|
|
561
|
+
*/
|
|
562
|
+
getMentionsFormattedText(message, subtitle, mentionsFormatterParams) {
|
|
563
|
+
const regex = /<@uid:(.*?)>/g;
|
|
564
|
+
let messageText = message.getText();
|
|
565
|
+
let messageTextTmp = subtitle;
|
|
566
|
+
let match = regex.exec(messageText);
|
|
567
|
+
let cometChatUsers = [];
|
|
568
|
+
let mentionedUsers = message.getMentionedUsers();
|
|
569
|
+
while (match !== null) {
|
|
570
|
+
let user;
|
|
571
|
+
for (let i = 0; i < mentionedUsers.length; i++) {
|
|
572
|
+
if (match[1] == mentionedUsers[i].getUid()) {
|
|
573
|
+
user = mentionedUsers[i];
|
|
574
|
+
}
|
|
575
|
+
}
|
|
576
|
+
if (user) {
|
|
577
|
+
cometChatUsers.push(user);
|
|
578
|
+
}
|
|
579
|
+
match = regex.exec(messageText);
|
|
580
|
+
}
|
|
581
|
+
let mentionsFormatter = this.getMentionsTextFormatter(mentionsFormatterParams);
|
|
582
|
+
mentionsFormatter.setClasses(["cc-mentions"]);
|
|
583
|
+
mentionsFormatter.setCometChatUserGroupMembers(cometChatUsers);
|
|
584
|
+
messageTextTmp = mentionsFormatter.getFormattedText(messageTextTmp, mentionsFormatterParams);
|
|
585
|
+
return messageTextTmp;
|
|
403
586
|
}
|
|
404
587
|
getAIOptions(theme, id) {
|
|
405
588
|
return [];
|
|
406
589
|
}
|
|
590
|
+
getAllTextFormatters(formatterParams) {
|
|
591
|
+
let formatters = [];
|
|
592
|
+
const mentionsFormatter = formatterParams.disableMentions ? null : ChatConfigurator.getDataSource().getMentionsTextFormatter(formatterParams);
|
|
593
|
+
const urlTextFormatter = ChatConfigurator.getDataSource().getUrlTextFormatter(formatterParams);
|
|
594
|
+
if (mentionsFormatter) {
|
|
595
|
+
formatters.push(mentionsFormatter);
|
|
596
|
+
}
|
|
597
|
+
if (urlTextFormatter) {
|
|
598
|
+
formatters.push(urlTextFormatter);
|
|
599
|
+
}
|
|
600
|
+
return formatters;
|
|
601
|
+
}
|
|
602
|
+
getMentionsTextFormatter(params) {
|
|
603
|
+
let mentionsTextFormatter = new CometChatMentionsTextFormatter();
|
|
604
|
+
if (params && params.theme) {
|
|
605
|
+
mentionsTextFormatter.setComposerMentionStyle(new UserMentionStyle({
|
|
606
|
+
loggedInUserTextFont: fontHelper(params.theme.typography.text2),
|
|
607
|
+
loggedInUserTextColor: params.theme.palette.getPrimary(),
|
|
608
|
+
loggedInUserTextBackground: "",
|
|
609
|
+
mentionTextFont: fontHelper(params.theme.typography.text2),
|
|
610
|
+
mentionTextColor: params.theme.palette.getPrimary(),
|
|
611
|
+
mentionTextBackground: "",
|
|
612
|
+
}));
|
|
613
|
+
mentionsTextFormatter.setConversationMentionStyle(new UserMentionStyle({
|
|
614
|
+
loggedInUserTextFont: fontHelper(params.theme.typography.text3),
|
|
615
|
+
loggedInUserTextColor: params.theme.palette.getPrimary(),
|
|
616
|
+
loggedInUserTextBackground: "",
|
|
617
|
+
mentionTextFont: fontHelper(params.theme.typography.text3),
|
|
618
|
+
mentionTextColor: params.theme.palette.getPrimary(),
|
|
619
|
+
mentionTextBackground: "",
|
|
620
|
+
}));
|
|
621
|
+
mentionsTextFormatter.setRightBubbleMentionStyle(new UserMentionStyle({
|
|
622
|
+
loggedInUserTextFont: fontHelper(params.theme.typography.text3),
|
|
623
|
+
loggedInUserTextColor: params.theme.palette.getTertiary(),
|
|
624
|
+
loggedInUserTextBackground: "",
|
|
625
|
+
mentionTextFont: fontHelper(params.theme.typography.text3),
|
|
626
|
+
mentionTextColor: params.theme.palette.getTertiary(),
|
|
627
|
+
mentionTextBackground: "",
|
|
628
|
+
}));
|
|
629
|
+
mentionsTextFormatter.setLeftBubbleMentionStyle(new UserMentionStyle({
|
|
630
|
+
loggedInUserTextFont: fontHelper(params.theme.typography.text3),
|
|
631
|
+
loggedInUserTextColor: params.theme.palette.getPrimary(),
|
|
632
|
+
loggedInUserTextBackground: "",
|
|
633
|
+
mentionTextFont: fontHelper(params.theme.typography.text3),
|
|
634
|
+
mentionTextColor: params.theme.palette.getPrimary(),
|
|
635
|
+
mentionTextBackground: "",
|
|
636
|
+
}));
|
|
637
|
+
}
|
|
638
|
+
return mentionsTextFormatter;
|
|
639
|
+
}
|
|
640
|
+
getUrlTextFormatter(params = {}) {
|
|
641
|
+
let urlTextFormatter = new CometChatUrlTextFormatter([
|
|
642
|
+
/(https?:\/\/[^\s]+)/g,
|
|
643
|
+
]);
|
|
644
|
+
if (params.alignment == MessageBubbleAlignment.left) {
|
|
645
|
+
urlTextFormatter.setStyle({
|
|
646
|
+
formattedTextColor: params.theme.palette.getPrimary(),
|
|
647
|
+
formattedTextFont: fontHelper(params.theme.typography.text3),
|
|
648
|
+
});
|
|
649
|
+
}
|
|
650
|
+
else {
|
|
651
|
+
urlTextFormatter.setStyle({
|
|
652
|
+
formattedTextColor: params.theme.palette.getTertiary(),
|
|
653
|
+
formattedTextFont: fontHelper(params.theme.typography.text3),
|
|
654
|
+
});
|
|
655
|
+
}
|
|
656
|
+
return urlTextFormatter;
|
|
657
|
+
}
|
|
407
658
|
}
|
|
408
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWVzc2FnZVV0aWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2hhdC11aWtpdC1hbmd1bGFyL3NyYy9TaGFyZWQvVXRpbHMvTWVzc2FnZVV0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxzQkFBc0IsRUFFdEIsd0JBQXdCLEVBQ3hCLDhCQUE4QixFQUU5QixRQUFRLEVBQ1IsdUJBQXVCLEVBQ3ZCLFVBQVUsR0FFWCxNQUFNLDRCQUE0QixDQUFDO0FBQ3BDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzVELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUUzRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUNqRSxNQUFNLE9BQU8sWUFBWTtJQUN2QixhQUFhLENBQUMsS0FBcUI7UUFDakMsT0FBTyxJQUFJLHNCQUFzQixDQUFDO1lBQ2hDLEVBQUUsRUFBRSx1QkFBdUIsQ0FBQyxhQUFhLENBQUMsV0FBVztZQUNyRCxLQUFLLEVBQUUsUUFBUSxDQUFDLGNBQWMsQ0FBQztZQUMvQixPQUFPLEVBQUUscUJBQXFCO1lBQzlCLE9BQU8sRUFBRSxJQUFJO1lBQ2IsUUFBUSxFQUFFLEtBQUssQ0FBQyxPQUFPLENBQUMsWUFBWSxFQUFFO1lBQ3RDLGVBQWUsRUFBRSxhQUFhO1lBQzlCLFNBQVMsRUFBRSxVQUFVLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUM7WUFDakQsVUFBVSxFQUFFLEtBQUssQ0FBQyxPQUFPLENBQUMsWUFBWSxFQUFFO1NBQ3pDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFDRCxvQkFBb0IsQ0FBQyxLQUFxQjtRQUN4QyxPQUFPLElBQUksc0JBQXNCLENBQUM7WUFDaEMsRUFBRSxFQUFFLHVCQUF1QixDQUFDLGFBQWEsQ0FBQyxrQkFBa0I7WUFDNUQsS0FBSyxF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QUNwQyxZQUE0QjtRQUU1QixPQUFPLGlCQUFpQixDQUFDLDBCQUEwQixDQUNqRCxZQUFZLEVBQ1osWUFBWSxDQUNiLENBQUM7SUFDSixDQUFDO0lBRUQsWUFBWSxDQUNWLEtBQXFCLEVBQ3JCLEVBQXFCO1FBRXJCLE9BQU8sRUFBRSxDQUFDO0lBQ1osQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tZXRDaGF0TWVzc2FnZU9wdGlvbixcbiAgTWVzc2FnZUJ1YmJsZUFsaWdubWVudCxcbiAgQ29tZXRDaGF0TWVzc2FnZVRlbXBsYXRlLFxuICBDb21ldENoYXRNZXNzYWdlQ29tcG9zZXJBY3Rpb24sXG4gIENvbWV0Q2hhdFRoZW1lLFxuICBsb2NhbGl6ZSxcbiAgQ29tZXRDaGF0VUlLaXRDb25zdGFudHMsXG4gIGZvbnRIZWxwZXIsXG4gIENvbWV0Q2hhdEFjdGlvbnNWaWV3LFxufSBmcm9tIFwiQGNvbWV0Y2hhdC91aWtpdC1yZXNvdXJjZXNcIjtcbmltcG9ydCB7IENvbnZlcnNhdGlvblV0aWxzIH0gZnJvbSBcIkBjb21ldGNoYXQvdWlraXQtc2hhcmVkXCI7XG5pbXBvcnQgeyBDb21ldENoYXQgfSBmcm9tIFwiQGNvbWV0Y2hhdC9jaGF0LXNkay1qYXZhc2NyaXB0XCI7XG5pbXBvcnQgeyBEYXRhU291cmNlIH0gZnJvbSBcIi4uL0ZyYW1ld29yay9EYXRhU291cmNlXCI7XG5pbXBvcnQgeyBDaGF0Q29uZmlndXJhdG9yIH0gZnJvbSBcIi4uL0ZyYW1ld29yay9DaGF0Q29uZmlndXJhdG9yXCI7XG5leHBvcnQgY2xhc3MgTWVzc2FnZVV0aWxzIGltcGxlbWVudHMgRGF0YVNvdXJjZSB7XG4gIGdldEVkaXRPcHRpb24odGhlbWU6IENvbWV0Q2hhdFRoZW1lKTogQ29tZXRDaGF0TWVzc2FnZU9wdGlvbiB7XG4gICAgcmV0dXJuIG5ldyBDb21ldENoYXRNZXNzYWdlT3B0aW9uKHtcbiAgICAgIGlkOiBDb21ldENoYXRVSUtpdENvbnN0YW50cy5NZXNzYWdlT3B0aW9uLmVkaXRNZXNzYWdlLFxuICAgICAgdGl0bGU6IGxvY2FsaXplKFwiRURJVF9NRVNTQUdFXCIpLFxuICAgICAgaWNvblVSTDogXCJhc3NldHMvZWRpdGljb24uc3ZnXCIsXG4gICAgICBvbkNsaWNrOiBudWxsLFxuICAgICAgaWNvblRpbnQ6IHRoZW1lLnBhbGV0dGUuZ2V0QWNjZW50NjAwKCksXG4gICAgICBiYWNrZ3JvdW5kQ29sb3I6IFwidHJhbnNwYXJlbnRcIixcbiAgICAgIHRpdGxlRm9udDogZm9udEhlbHBlcih0aGVtZS50eXBvZ3JhcGh5LnN1YnRpdGxlMSksXG4gICAgICB0aXRsZUNvbG9yOiB0aGVtZS5wYWxldHRlLmdldEFjY2VudDYwMCgpLFxuICAgIH0pO1xuICB9XG4gIGdldE1lc3NhZ2VJbmZvT3B0aW9uKHRoZW1lOiBDb21ldENoYXRUaGVtZSk6IENvbWV0Q2hhdE1lc3NhZ2VPcHRpb24ge1xuICAgIHJldHVybiBuZXcgQ29tZXRDaGF0TWVzc2FnZU9wdGlvbih7XG4gICAgICBpZDogQ29tZXRDaGF0VUlLaXRDb25zdGFudHMuTWVzc2FnZU9wdGlvbi5tZXNzYWdlSW5mb3JtYXRpb24sXG4gICAgICB0aXRsZTogbG9jYWxpemUoXCJNRVNTQUdFX0lORk9STUFUSU9OXCIpLFxuICAgICAgaWNvblVSTDogXCJhc3NldHMvSW5mby5zdmdcIixcbiAgICAgIG9uQ2xpY2s6IG51bGwsXG4gICAgICBpY29uVGludDogdGhlbWUucGFsZXR0ZS5nZXRBY2NlbnQ2MDAoKSxcbiAgICAgIGJhY2tncm91bmRDb2xvcjogXCJ0cmFuc3BhcmVudFwiLFxuICAgICAgdGl0bGVGb250OiBmb250SGVscGVyKHRoZW1lLnR5cG9ncmFwaHkuc3VidGl0bGUxKSxcbiAgICAgIHRpdGxlQ29sb3I6IHRoZW1lLnBhbGV0dGUuZ2V0QWNjZW50NjAwKCksXG4gICAgfSk7XG4gIH1cbiAgZ2V0TWVzc2FnZVByaXZhdGVseU9wdGlvbih0aGVtZTogQ29tZXRDaGF0VGhlbWUpOiBDb21ldENoYXRNZXNzYWdlT3B0aW9uIHtcbiAgICByZXR1cm4gbmV3IENvbWV0Q2hhdE1lc3NhZ2VPcHRpb24oe1xuICAgICAgaWQ6IENvbWV0Q2hhdFVJS2l0Q29uc3RhbnRzLk1lc3NhZ2VPcHRpb24uc2VuZE1lc3NhZ2VQcml2YXRlbHksXG4gICAgICB0aXRsZTogbG9jYWxpemUoXCJTRU5EX01FU1NBR0VfSU5fUFJJVkFURVwiKSxcbiAgICAgIGljb25VUkw6IFwiYXNzZXRzL21lc3NhZ2UtcHJpdmF0ZWx5LnN2Z1wiLFxuICAgICAgb25DbGljazogbnVsbCxcbiAgICAgIGljb25UaW50OiB0aGVtZS5wYWxldHRlLmdldEFjY2VudDYwMCgpLFxuICAgICAgYmFja2dyb3VuZENvbG9yOiBcInRyYW5zcGFyZW50XCIsXG4gICAgICB0aXRsZUZvbnQ6IGZvbnRIZWxwZXIodGhlbWUudHlwb2dyYXBoeS5zdWJ0aXRsZTEpLFxuICAgICAgdGl0bGVDb2xvcjogdGhlbWUucGFsZXR0ZS5nZXRBY2NlbnQ2MDAoKSxcbiAgICB9KTtcbiAgfVxuICBnZXREZWxldGVPcHRpb24odGhlbWU6IENvbWV0Q2hhdFRoZW1lKTogQ29tZXRDaGF0TWVzc2FnZU9wdGlvbiB7XG4gICAgcmV0dXJuIG5ldyBDb21ldENoYXRNZXNzYWdlT3B0aW9uKHtcbiAgICAgIGlkOiBDb21ldENoYXRVSUtpdENvbnN0YW50cy5NZXNzYWdlT3B0aW9uLmRlbGV0ZU1lc3NhZ2UsXG4gICAgICB0aXRsZTogbG9jYWxpemUoXCJERUxFVEVcIiksXG4gICAgICBpY29uVVJMOiBcImFzc2V0cy9kZWxldGVpY29uLnN2Z1wiLFxuICAgICAgb25DbGljazogbnVsbCxcbiAgICAgIGljb25UaW50OiB0aGVtZS5wYWxldHRlLmdldEFjY2VudDYwMCgpLFxuICAgICAgYmFja2dyb3VuZENvbG9yOiBcInRyYW5zcGFyZW50XCIsXG4gICAgICB0aXRsZUZvbnQ6IGZvbnRIZWxwZXIodGhlbWUudHlwb2dyYXBoeS5zdWJ0aXRsZTEpLFxuICAgICAgdGl0bGVDb2xvcjogdGhlbWUucGFsZXR0ZS5nZXRBY2NlbnQ2MDAoKSxcbiAgICB9KTtcbiAgfVxuICBnZXRSZXBseUluVGhyZWFkT3B0aW9uKHRoZW1lOiBDb21ldENoYXRUaGVtZSk6IENvbWV0Q2hhdE1lc3NhZ2VPcHRpb24ge1xuICAgIHJldHVybiBuZXcgQ29tZXRDaGF0TWVzc2FnZU9wdGlvbih7XG4gICAgICBpZDogQ29tZXRDaGF0VUlLaXRDb25zdGFudHMuTWVzc2FnZU9wdGlvbi5yZXBseUluVGhyZWFkLFxuICAgICAgdGl0bGU6IGxvY2FsaXplKFwiUkVQTFlfSU5fVEhSRUFEXCIpLFxuICAgICAgaWNvblVSTDogXCJhc3NldHMvdGhyZWFkaWNvbi5zdmdcIixcbiAgICAgIG9uQ2xpY2s6IG51bGwsXG4gICAgICBpY29uVGludDogdGhlbWUucGFsZXR0ZS5nZXRBY2NlbnQ2MDAoKSxcbiAgICAgIGJhY2tncm91bmRDb2xvcjogXCJ0cmFuc3BhcmVudFwiLFxuICAgICAgdGl0bGVGb250OiBmb250SGVscGVyKHRoZW1lLnR5cG9ncmFwaHkuc3VidGl0bGUxKSxcbiAgICAgIHRpdGxlQ29sb3I6IHRoZW1lLnBhbGV0dGUuZ2V0QWNjZW50NjAwKCksXG4gICAgfSk7XG4gIH1cbiAgZ2V0Q29weU9wdGlvbih0aGVtZTogQ29tZXRDaGF0VGhlbWUpOiBDb21ldENoYXRNZXNzYWdlT3B0aW9uIHtcbiAgICByZXR1cm4gbmV3IENvbWV0Q2hhdE1lc3NhZ2VPcHRpb24oe1xuICAgICAgaWQ6IENvbWV0Q2hhdFVJS2l0Q29uc3RhbnRzLk1lc3NhZ2VPcHRpb24uY29weU1lc3NhZ2UsXG4gICAgICB0aXRsZTogbG9jYWxpemUoXCJDT1BZX01FU1NBR0VcIiksXG4gICAgICBpY29uVVJMOiBcImFzc2V0cy9Db3B5LnN2Z1wiLFxuICAgICAgb25DbGljazogbnVsbCxcbiAgICAgIGljb25UaW50OiB0aGVtZS5wYWxldHRlLmdldEFjY2VudDYwMCgpLFxuICAgICAgYmFja2dyb3VuZENvbG9yOiBcInRyYW5zcGFyZW50XCIsXG4gICAgICB0aXRsZUZvbnQ6IGZvbnRIZWxwZXIodGhlbWUudHlwb2dyYXBoeS5zdWJ0aXRsZTEpLFxuICAgICAgdGl0bGVDb2xvcjogdGhlbWUucGFsZXR0ZS5nZXRBY2NlbnQ2MDAoKSxcbiAgICB9KTtcbiAgfVxuICBpc1NlbnRCeU1lKFxuICAgIGxvZ2dlZEluVXNlcjogQ29tZXRDaGF0LlVzZXIsXG4gICAgbWVzc2FnZTogQ29tZXRDaGF0LkJhc2VNZXNzYWdlXG4gICk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBsb2dnZWRJblVzZXIuZ2V0VWlkKCkgPT09IG1lc3NhZ2UuZ2V0U2VuZGVyKCkuZ2V0VWlkKCk7XG4gIH1cbiAgZ2V0VGV4dE1lc3NhZ2VPcHRpb25zKFxuICAgIGxvZ2dlZEluVXNlcjogQ29tZXRDaGF0LlVzZXIsXG4gICAgbWVzc2FnZU9iamVjdDogQ29tZXRDaGF0LkJhc2VNZXNzYWdlLFxuICAgIHRoZW1lOiBDb21ldENoYXRUaGVtZSxcbiAgICBncm91cD86IENvbWV0Q2hhdC5Hcm91cFxuICApOiBBcnJheTxDb21ldENoYXRNZXNzYWdlT3B0aW9uPiB7XG4gICAgbGV0IF9pc1NlbnRCeU1lOiBib29sZWFuID0gdGhpcy5pc1NlbnRCeU1lKGxvZ2dlZEluVXNlciwgbWVzc2FnZU9iamVjdCk7XG4gICAgbGV0IF9pc01vZGVyYXRvcjogYm9vbGVhbiA9IGZhbHNlO1xuICAgIGlmIChcbiAgICAgIGdyb3VwPy5nZXRTY29wZSgpID09IENvbWV0Q2hhdFVJS2l0Q29uc3RhbnRzLmdyb3VwTWVtYmVyU2NvcGUubW9kZXJhdG9yXG4gICAgKSB7XG4gICAgICBfaXNNb2RlcmF0b3IgPSB0cnVlO1xuICAgIH1cbiAgICBsZXQgbWVzc2FnZU9wdGlvbkxpc3Q6IEFycmF5PENvbWV0Q2hhdE1lc3NhZ2VPcHRpb24+ID0gW107XG4gICAgbWVzc2FnZU9wdGlvbkxpc3QgPSBDaGF0Q29uZmlndXJhdG9yLmdldERhdGFTb3VyY2UoKS5nZXRDb21tb25PcHRpb25zKFxuICAgICAgbG9nZ2VkSW5Vc2VyLFxuICAgICAgbWVzc2FnZU9iamVjdCxcbiAgICAgIHRoZW1lLFxuICAgICAgZ3JvdXBcbiAgICApO1xuICAgIGlmIChfaXNTZW50QnlNZSkge1xuICAgICAgbWVzc2FnZU9wdGlvbkxpc3QudW5zaGlmdCh0aGlzLmdldEVkaXRPcHRpb24odGhlbWUpKTtcbiAgICB9XG4gICAgbWVzc2FnZU9wdGlvbkxpc3QudW5zaGlmdCh0aGlzLmdldENvcHlPcHRpb24odGhlbWUpKTtcbiAgICByZXR1cm4gbWVzc2FnZU9wdGlvbkxpc3Q7XG4gIH1cbiAgZ2V0SW1hZ2VNZXNzYWdlT3B0aW9ucyhcbiAgICBsb2dnZWRJblVzZXI6IENvbWV0Q2hhdC5Vc2VyLFxuICAgIG1lc3NhZ2VPYmplY3Q6IENvbWV0Q2hhdC5CYXNlTWVzc2FnZSxcbiAgICB0aGVtZTogQ29tZXRDaGF0VGhlbWUsXG4gICAgZ3JvdXA/OiBDb21ldENoYXQuR3JvdXBcbiAgKTogQXJyYXk8Q29tZXRDaGF0TWVzc2FnZU9wdGlvbj4ge1xuICAgIGxldCBtZXNzYWdlT3B0aW9uTGlzdDogQ29tZXRDaGF0TWVzc2FnZU9wdGlvbltdID0gW107XG4gICAgbWVzc2FnZU9wdGlvbkxpc3QgPSBDaGF0Q29uZmlndXJhdG9yLmdldERhdGFTb3VyY2UoKS5nZXRDb21tb25PcHRpb25zKFxuICAgICAgbG9nZ2VkSW5Vc2VyLFxuICAgICAgbWVzc2FnZU9iamVjdCxcbiAgICAgIHRoZW1lLFxuICAgICAgZ3JvdXBcbiAgICApO1xuICAgIHJldHVybiBtZXNzYWdlT3B0aW9uTGlzdDtcbiAgfVxuICBnZXRWaWRlb01lc3NhZ2VPcHRpb25zKFxuICAgIGxvZ2dlZEluVXNlcjogQ29tZXRDaGF0LlVzZXIsXG4gICAgbWVzc2FnZU9iamVjdDogQ29tZXRDaGF0LkJhc2VNZXNzYWdlLFxuICAgIHRoZW1lOiBDb21ldENoYXRUaGVtZSxcbiAgICBncm91cD86IENvbWV0Q2hhdC5Hcm91cFxuICApOiBBcnJheTxDb21ldENoYXRNZXNzYWdlT3B0aW9uPiB7XG4gICAgbGV0IG1lc3NhZ2VPcHRpb25MaXN0OiBDb21ldENoYXRNZXNzYWdlT3B0aW9uW10gPSBbXTtcbiAgICBtZXNzYWdlT3B0aW9uTGlzdCA9IENoYXRDb25maWd1cmF0b3IuZ2V0RGF0YVNvdXJjZSgpLmdldENvbW1vbk9wdGlvbnMoXG4gICAgICBsb2dnZWRJblVzZXIsXG4gICAgICBtZXNzYWdlT2JqZWN0LFxuICAgICAgdGhlbWUsXG4gICAgICBncm91cFxuICAgICk7XG4gICAgcmV0dXJuIG1lc3NhZ2VPcHRpb25MaXN0O1xuICB9XG4gIGdldEF1ZGlvTWVzc2FnZU9wdGlvbnMoXG4gICAgbG9nZ2VkSW5Vc2VyOiBDb21ldENoYXQuVXNlcixcbiAgICBtZXNzYWdlT2JqZWN0OiBDb21ldENoYXQuQmFzZU1lc3NhZ2UsXG4gICAgdGhlbWU6IENvbWV0Q2hhdFRoZW1lLFxuICAgIGdyb3VwPzogQ29tZXRDaGF0Lkdyb3VwXG4gICk6IEFycmF5PENvbWV0Q2hhdE1lc3NhZ2VPcHRpb24+IHtcbiAgICBsZXQgbWVzc2FnZU9wdGlvbkxpc3Q6IENvbWV0Q2hhdE1lc3NhZ2VPcHRpb25bXSA9IFtdO1xuICAgIG1lc3NhZ2VPcHRpb25MaXN0ID0gQ2hhdENvbmZpZ3VyYXRvci5nZXREYXRhU291cmNlKCkuZ2V0Q29tbW9uT3B0aW9ucyhcbiAgICAgIGxvZ2dlZEluVXNlcixcbiAgICAgIG1lc3NhZ2VPYmplY3QsXG4gICAgICB0aGVtZSxcbiAgICAgIGdyb3VwXG4gICAgKTtcbiAgICByZXR1cm4gbWVzc2FnZU9wdGlvbkxpc3Q7XG4gIH1cbiAgZ2V0RmlsZU1lc3NhZ2VPcHRpb25zKFxuICAgIGxvZ2dlZEluVXNlcjogQ29tZXRDaGF0LlVzZXIsXG4gICAgbWVzc2FnZU9iamVjdDogQ29tZXRDaGF0LkJhc2VNZXNzYWdlLFxuICAgIHRoZW1lOiBDb21ldENoYXRUaGVtZSxcbiAgICBncm91cD86IENvbWV0Q2hhdC5Hcm91cFxuICApOiBBcnJheTxDb21ldENoYXRNZXNzYWdlT3B0aW9uPiB7XG4gICAgbGV0IG1lc3NhZ2VPcHRpb25MaXN0OiBDb21ldENoYXRNZXNzYWdlT3B0aW9uW10gPSBbXTtcbiAgICBtZXNzYWdlT3B0aW9uTGlzdCA9IENoYXRDb25maWd1cmF0b3IuZ2V0RGF0YVNvdXJjZSgpLmdldENvbW1vbk9wdGlvbnMoXG4gICAgICBsb2dnZWRJblVzZXIsXG4gICAgICBtZXNzYWdlT2JqZWN0LFxuICAgICAgdGhlbWUsXG4gICAgICBncm91cFxuICAgICk7XG4gICAgcmV0dXJuIG1lc3NhZ2VPcHRpb25MaXN0O1xuICB9XG4gIGdldEJvdHRvbVZpZXcoXG4gICAgX21lc3NhZ2VPYmplY3Q6IENvbWV0Q2hhdC5CYXNlTWVzc2FnZSxcbiAgICBfYWxpZ25tZW50OiBNZXNzYWdlQnViYmxlQWxpZ25tZW50XG4gICkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIGdldFRleHRNZXNzYWdlVGVtcGxhdGUoKTogQ29tZXRDaGF0TWVzc2FnZVRlbXBsYXRlIHtcbiAgICByZXR1cm4gbmV3IENvbWV0Q2hhdE1lc3NhZ2VUZW1wbGF0ZSh7XG4gICAgICB0eXBlOiBDb21ldENoYXRVSUtpdENvbnN0YW50cy5NZXNzYWdlVHlwZXMudGV4dCxcbiAgICAgIGNhdGVnb3J5OiBDb21ldENoYXRVSUtpdENvbnN0YW50cy5NZXNzYWdlQ2F0ZWdvcnkubWVzc2FnZSxcbiAgICAgIG9wdGlvbnM6IENoYXRDb25maWd1cmF0b3IuZ2V0RGF0YVNvdXJjZSgpLmdldE1lc3NhZ2VPcHRpb25zLFxuICAgIH0pO1xuICB9XG4gIGdldEF1ZGlvTWVzc2FnZVRlbXBsYXRlKCk6IENvbWV0Q2hhdE1lc3NhZ2VUZW1wbGF0ZSB7XG4gICAgcmV0dXJuIG5ldyBDb21ldENoYXRNZXNzYWdlVGVtcGxhdGUoe1xuICAgICAgdHlwZTogQ29tZXRDaGF0VUlLaXRDb25zdGFudHMuTWVzc2FnZVR5cGVzLmF1ZGlvLFxuICAgICAgY2F0ZWdvcnk6IENvbWV0Q2hhdFVJS2l0Q29uc3RhbnRzLk1lc3NhZ2VDYXRlZ29yeS5tZXNzYWdlLFxuICAgICAgb3B0aW9uczogQ2hhdENvbmZpZ3VyYXRvci5nZXREYXRhU291cmNlKCkuZ2V0TWVzc2FnZU9wdGlvbnMsXG4gICAgfSk7XG4gIH1cbiAgZ2V0VmlkZW9NZXNzYWdlVGVtcGxhdGUoKTogQ29tZXRDaGF0TWVzc2FnZVRlbXBsYXRlIHtcbiAgICByZXR1cm4gbmV3IENvbWV0Q2hhdE1lc3NhZ2VUZW1wbGF0ZSh7XG4gICAgICB0eXBlOiBDb21ldENoYXRVSUtpdENvbnN0YW50cy5NZXNzYWdlVHlwZXMudmlkZW8sXG4gICAgICBjYXRlZ29yeTogQ29tZXRDaGF0VUlLaXRDb25zdGFudHMuTWVzc2FnZUNhdGVnb3J5Lm1lc3NhZ2UsXG4gICAgICBvcHRpb25zOiBDaGF0Q29uZmlndXJhdG9yLmdldERhdGFTb3VyY2UoKS5nZXRNZXNzYWdlT3B0aW9ucyxcbiAgICB9KTtcbiAgfVxuICBnZXRJbWFnZU1lc3NhZ2VUZW1wbGF0ZSgpOiBDb21ldENoYXRNZXNzYWdlVGVtcGxhdGUge1xuICAgIHJldHVybiBuZXcgQ29tZXRDaGF0TWVzc2FnZVRlbXBsYXRlKHtcbiAgICAgIHR5cGU6IENvbWV0Q2hhdFVJS2l0Q29uc3RhbnRzLk1lc3NhZ2VUeXBlcy5pbWFnZSxcbiAgICAgIGNhdGVnb3J5OiBDb21ldENoYXRVSUtpdENvbnN0YW50cy5NZXNzYWdlQ2F0ZWdvcnkubWVzc2FnZSxcbiAgICAgIG9wdGlvbnM6IENoYXRDb25maWd1cmF0b3IuZ2V0RGF0YVNvdXJjZSgpLmdldE1lc3NhZ2VPcHRpb25zLFxuICAgIH0pO1xuICB9XG4gIGdldEdyb3VwQWN0aW9uVGVtcGxhdGUoKTogQ29tZXRDaGF0TWVzc2FnZVRlbXBsYXRlIHtcbiAgICByZXR1cm4gbmV3IENvbWV0Q2hhdE1lc3NhZ2VUZW1wbGF0ZSh7XG4gICAgICB0eXBlOiBDb21ldENoYXRVSUtpdENvbnN0YW50cy5NZXNzYWdlVHlwZXMuZ3JvdXBNZW1iZXIsXG4gICAgICBjYXRlZ29yeTogQ29tZXRDaGF0VUlLaXRDb25zdGFudHMuTWVzc2FnZUNhdGVnb3J5LmFjdGlvbixcbiAgICB9KTtcbiAgfVxuICBnZXRGaWxlTWVzc2FnZVRlbXBsYXRlKCk6IENvbWV0Q2hhdE1lc3NhZ2VUZW1wbGF0ZSB7XG4gICAgcmV0dXJuIG5ldyBDb21ldENoYXRNZXNzYWdlVGVtcGxhdGUoe1xuICAgICAgdHlwZTogQ29tZXRDaGF0VUlLaXRDb25zdGFudHMuTWVzc2FnZVR5cGVzLmZpbGUsXG4gICAgICBjYXRlZ29yeTogQ29tZXRDaGF0VUlLaXRDb25zdGFudHMuTWVzc2FnZUNhdGVnb3J5Lm1lc3NhZ2UsXG4gICAgICBvcHRpb25zOiBDaGF0Q29uZmlndXJhdG9yLmdldERhdGFTb3VyY2UoKS5nZXRNZXNzYWdlT3B0aW9ucyxcbiAgICB9KTtcbiAgfVxuICBnZXRGb3JtTWVzc2FnZVRlbXBsYXRlKCk6IENvbWV0Q2hhdE1lc3NhZ2VUZW1wbGF0ZSB7XG4gICAgcmV0dXJuIG5ldyBDb21ldENoYXRNZXNzYWdlVGVtcGxhdGUoe1xuICAgICAgdHlwZTogQ29tZXRDaGF0VUlLaXRDb25zdGFudHMuTWVzc2FnZVR5cGVzLmZvcm0sXG4gICAgICBjYXRlZ29yeTogQ29tZXRDaGF0VUlLaXRDb25zdGFudHMuTWVzc2FnZUNhdGVnb3J5LmludGVyYWN0aXZlLFxuICAgICAgb3B0aW9uczogQ2hhdENvbmZpZ3VyYXRvci5nZXREYXRhU291cmNlKCkuZ2V0TWVzc2FnZU9wdGlvbnMsXG4gICAgfSk7XG4gIH1cblxuICBnZXRDYXJkTWVzc2FnZVRlbXBsYXRlKCk6IENvbWV0Q2hhdE1lc3NhZ2VUZW1wbGF0ZSB7XG4gICAgcmV0dXJuIG5ldyBDb21ldENoYXRNZXNzYWdlVGVtcGxhdGUoe1xuICAgICAgdHlwZTogQ29tZXRDaGF0VUlLaXRDb25zdGFudHMuTWVzc2FnZVR5cGVzLmNhcmQsXG4gICAgICBjYXRlZ29yeTogQ29tZXRDaGF0VUlLaXRDb25zdGFudHMuTWVzc2FnZUNhdGVnb3J5LmludGVyYWN0aXZlLFxuICAgICAgb3B0aW9uczogQ2hhdENvbmZpZ3VyYXRvci5nZXREYXRhU291cmNlKCkuZ2V0TWVzc2FnZU9wdGlvbnMsXG4gICAgfSk7XG4gIH1cbiAgZ2V0QWxsTWVzc2FnZVRlbXBsYXRlcygpOiBBcnJheTxDb21ldENoYXRNZXNzYWdlVGVtcGxhdGU+IHtcbiAgICByZXR1cm4gW1xuICAgICAgQ2hhdENvbmZpZ3VyYXRvci5nZXREYXRhU291cmNlKCkuZ2V0VGV4dE1lc3NhZ2VUZW1wbGF0ZSgpLFxuICAgICAgQ2hhdENvbmZpZ3VyYXRvci5nZXREYXRhU291cmNlKCkuZ2V0SW1hZ2VNZXNzYWdlVGVtcGxhdGUoKSxcbiAgICAgIENoYXRDb25maWd1cmF0b3IuZ2V0RGF0YVNvdXJjZSgpLmdldFZpZGVvTWVzc2FnZVRlbXBsYXRlKCksXG4gICAgICBDaGF0Q29uZmlndXJhdG9yLmdldERhdGFTb3VyY2UoKS5nZXRBdWRpb01lc3NhZ2VUZW1wbGF0ZSgpLFxuICAgICAgQ2hhdENvbmZpZ3VyYXRvci5nZXREYXRhU291cmNlKCkuZ2V0RmlsZU1lc3NhZ2VUZW1wbGF0ZSgpLFxuICAgICAgQ2hhdENvbmZpZ3VyYXRvci5nZXREYXRhU291cmNlKCkuZ2V0R3JvdXBBY3Rpb25UZW1wbGF0ZSgpLFxuICAgICAgQ2hhdENvbmZpZ3VyYXRvci5nZXREYXRhU291cmNlKCkuZ2V0Rm9ybU1lc3NhZ2VUZW1wbGF0ZSgpLFxuICAgICAgQ2hhdENvbmZpZ3VyYXRvci5nZXREYXRhU291cmNlKCkuZ2V0Q2FyZE1lc3NhZ2VUZW1wbGF0ZSgpXG4gICAgXTtcbiAgfVxuICBnZXRNZXNzYWdlVGVtcGxhdGUoXG4gICAgbWVzc2FnZVR5cGU6IHN0cmluZyxcbiAgICBtZXNzYWdlQ2F0ZWdvcnk6IHN0cmluZ1xuICApOiBDb21ldENoYXRNZXNzYWdlVGVtcGxhdGUgfCBudWxsIHtcbiAgICBsZXQgX3RlbXBsYXRlOiBDb21ldENoYXRNZXNzYWdlVGVtcGxhdGUgfCBudWxsID0gbnVsbDtcbiAgICBpZiAobWVzc2FnZUNhdGVnb3J5ICE9IENvbWV0Q2hhdFVJS2l0Q29uc3RhbnRzLk1lc3NhZ2VDYXRlZ29yeS5jYWxsKSB7XG4gICAgICBzd2l0Y2ggKG1lc3NhZ2VUeXBlKSB7XG4gICAgICAgIGNhc2UgQ29tZXRDaGF0VUlLaXRDb25zdGFudHMuTWVzc2FnZVR5cGVzLnRleHQ6XG4gICAgICAgICAgX3RlbXBsYXRlID0gQ2hhdENvbmZpZ3VyYXRvci5nZXREYXRhU291cmNlKCkuZ2V0VGV4dE1lc3NhZ2VUZW1wbGF0ZSgpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIENvbWV0Q2hhdFVJS2l0Q29uc3RhbnRzLk1lc3NhZ2VUeXBlcy5pbWFnZTpcbiAgICAgICAgICBfdGVtcGxhdGUgPVxuICAgICAgICAgICAgQ2hhdENvbmZpZ3VyYXRvci5nZXREYXRhU291cmNlKCkuZ2V0SW1hZ2VNZXNzYWdlVGVtcGxhdGUoKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBDb21ldENoYXRVSUtpdENvbnN0YW50cy5NZXNzYWdlVHlwZXMudmlkZW86XG4gICAgICAgICAgX3RlbXBsYXRlID1cbiAgICAgICAgICAgIENoYXRDb25maWd1cmF0b3IuZ2V0RGF0YVNvdXJjZSgpLmdldFZpZGVvTWVzc2FnZVRlbXBsYXRlKCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgQ29tZXRDaGF0VUlLaXRDb25zdGFudHMuTWVzc2FnZVR5cGVzLmdyb3VwTWVtYmVyOlxuICAgICAgICAgIF90ZW1wbGF0ZSA9IENoYXRDb25maWd1cmF0b3IuZ2V0RGF0YVNvdXJjZSgpLmdldEdyb3VwQWN0aW9uVGVtcGxhdGUoKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBDb21ldENoYXRVSUtpdENvbnN0YW50cy5NZXNzYWdlVHlwZXMuZmlsZTpcbiAgICAgICAgICBfdGVtcGxhdGUgPSBDaGF0Q29uZmlndXJhdG9yLmdldERhdGFTb3VyY2UoKS5nZXRGaWxlTWVzc2FnZVRlbXBsYXRlKCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgQ29tZXRDaGF0VUlLaXRDb25zdGFudHMuTWVzc2FnZVR5cGVzLmF1ZGlvOlxuICAgICAgICAgIF90ZW1wbGF0ZSA9XG4gICAgICAgICAgICBDaGF0Q29uZmlndXJhdG9yLmdldERhdGFTb3VyY2UoKS5nZXRBdWRpb01lc3NhZ2VUZW1wbGF0ZSgpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIENvbWV0Q2hhdFVJS2l0Q29uc3RhbnRzLk1lc3NhZ2VUeXBlcy5mb3JtOlxuICAgICAgICAgIF90ZW1wbGF0ZSA9IENoYXRDb25maWd1cmF0b3IuZ2V0RGF0YVNvdXJjZSgpLmdldEZvcm1NZXNzYWdlVGVtcGxhdGUoKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBDb21ldENoYXRVSUtpdENvbnN0YW50cy5NZXNzYWdlVHlwZXMuY2FyZDpcbiAgICAgICAgICBfdGVtcGxhdGUgPSBDaGF0Q29uZmlndXJhdG9yLmdldERhdGFTb3VyY2UoKS5nZXRDYXJkTWVzc2FnZVRlbXBsYXRlKCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBfdGVtcGxhdGU7XG4gIH1cbiAgZ2V0TWVzc2FnZU9wdGlvbnMoXG4gICAgbG9nZ2VkSW5Vc2VyOiBDb21ldENoYXQuVXNlcixcbiAgICBtZXNzYWdlT2JqZWN0OiBDb21ldENoYXQuQmFzZU1lc3NhZ2UsXG4gICAgdGhlbWU6IENvbWV0Q2hhdFRoZW1lLFxuICAgIGdyb3VwPzogQ29tZXRDaGF0Lkdyb3VwXG4gICk6IEFycmF5PENvbWV0Q2hhdE1lc3NhZ2VPcHRpb24+IHtcbiAgICBsZXQgX29wdGlvbkxpc3Q6IEFycmF5PENvbWV0Q2hhdE1lc3NhZ2VPcHRpb24+ID0gW107XG4gICAgbGV0IF9pc1NlbnRCeU1lOiBib29sZWFuID0gZmFsc2U7XG4gICAgaWYgKGxvZ2dlZEluVXNlci5nZXRVaWQoKSA9PSBtZXNzYWdlT2JqZWN0LmdldFNlbmRlcigpPy5nZXRVaWQoKSkge1xuICAgICAgX2lzU2VudEJ5TWUgPSB0cnVlO1xuICAgIH1cbiAgICBpZiAoXG4gICAgICBtZXNzYWdlT2JqZWN0LmdldENhdGVnb3J5KCkgPT1cbiAgICAgIENvbWV0Q2hhdFVJS2l0Q29uc3RhbnRzLk1lc3NhZ2VDYXRlZ29yeS5tZXNzYWdlXG4gICAgKSB7XG4gICAgICBzd2l0Y2ggKG1lc3NhZ2VPYmplY3QuZ2V0VHlwZSgpKSB7XG4gICAgICAgIGNhc2UgQ29tZXRDaGF0VUlLaXRDb25zdGFudHMuTWVzc2FnZVR5cGVzLnRleHQ6XG4gICAgICAgICAgX29wdGlvbkxpc3QgPSBDaGF0Q29uZmlndXJhdG9yLmdldERhdGFTb3VyY2UoKS5nZXRUZXh0TWVzc2FnZU9wdGlvbnMoXG4gICAgICAgICAgICBsb2dnZWRJblVzZXIsXG4gICAgICAgICAgICBtZXNzYWdlT2JqZWN0LFxuICAgICAgICAgICAgdGhlbWUsXG4gICAgICAgICAgICBncm91cFxuICAgICAgICAgICk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgQ29tZXRDaGF0VUlLaXRDb25zdGFudHMuTWVzc2FnZVR5cGVzLmltYWdlOlxuICAgICAgICAgIF9vcHRpb25MaXN0ID0gQ2hhdENvbmZpZ3VyYXRvci5nZXREYXRhU291cmNlKCkuZ2V0SW1hZ2VNZXNzYWdlT3B0aW9ucyhcbiAgICAgICAgICAgIGxvZ2dlZEluVXNlcixcbiAgICAgICAgICAgIG1lc3NhZ2VPYmplY3QsXG4gICAgICAgICAgICB0aGVtZSxcbiAgICAgICAgICAgIGdyb3VwXG4gICAgICAgICAgKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBDb21ldENoYXRVSUtpdENvbnN0YW50cy5NZXNzYWdlVHlwZXMudmlkZW86XG4gICAgICAgICAgX29wdGlvbkxpc3QgPSBDaGF0Q29uZmlndXJhdG9yLmdldERhdGFTb3VyY2UoKS5nZXRWaWRlb01lc3NhZ2VPcHRpb25zKFxuICAgICAgICAgICAgbG9nZ2VkSW5Vc2VyLFxuICAgICAgICAgICAgbWVzc2FnZU9iamVjdCxcbiAgICAgICAgICAgIHRoZW1lLFxuICAgICAgICAgICAgZ3JvdXBcbiAgICAgICAgICApO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIENvbWV0Q2hhdFVJS2l0Q29uc3RhbnRzLk1lc3NhZ2VUeXBlcy5ncm91cE1lbWJlcjpcbiAgICAgICAgICBfb3B0aW9uTGlzdCA9IFtdO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIENvbWV0Q2hhdFVJS2l0Q29uc3RhbnRzLk1lc3NhZ2VUeXBlcy5maWxlOlxuICAgICAgICAgIF9vcHRpb25MaXN0ID0gQ2hhdENvbmZpZ3VyYXRvci5nZXREYXRhU291cmNlKCkuZ2V0RmlsZU1lc3NhZ2VPcHRpb25zKFxuICAgICAgICAgICAgbG9nZ2VkSW5Vc2VyLFxuICAgICAgICAgICAgbWVzc2FnZU9iamVjdCxcbiAgICAgICAgICAgIHRoZW1lLFxuICAgICAgICAgICAgZ3JvdXBcbiAgICAgICAgICApO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIENvbWV0Q2hhdFVJS2l0Q29uc3RhbnRzLk1lc3NhZ2VUeXBlcy5hdWRpbzpcbiAgICAgICAgICBfb3B0aW9uTGlzdCA9IENoYXRDb25maWd1cmF0b3IuZ2V0RGF0YVNvdXJjZSgpLmdldEF1ZGlvTWVzc2FnZU9wdGlvbnMoXG4gICAgICAgICAgICBsb2dnZWRJblVzZXIsXG4gICAgICAgICAgICBtZXNzYWdlT2JqZWN0LFxuICAgICAgICAgICAgdGhlbWUsXG4gICAgICAgICAgICBncm91cFxuICAgICAgICAgICk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChcbiAgICAgIChtZXNzYWdlT2JqZWN0LmdldENhdGVnb3J5KCkgPT0gQ29tZXRDaGF0VUlLaXRDb25zdGFudHMuTWVzc2FnZUNhdGVnb3J5LmN1c3RvbSkgfHxcbiAgICAgIChtZXNzYWdlT2JqZWN0LmdldENhdGVnb3J5KCkgPT0gQ29tZXRDaGF0VUlLaXRDb25zdGFudHMuTWVzc2FnZUNhdGVnb3J5LmludGVyYWN0aXZlKVxuICAgICkge1xuICAgICAgX29wdGlvbkxpc3QgPSBDaGF0Q29uZmlndXJhdG9yLmdldERhdGFTb3VyY2UoKS5nZXRDb21tb25PcHRpb25zKFxuICAgICAgICBsb2dnZWRJblVzZXIsXG4gICAgICAgIG1lc3NhZ2VPYmplY3QsXG4gICAgICAgIHRoZW1lLFxuICAgICAgICBncm91cFxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIF9vcHRpb25MaXN0O1xuICB9XG4gIGdldENvbW1vbk9wdGlvbnMoXG4gICAgbG9nZ2VkSW5Vc2VyOiBDb21ldENoYXQuVXNlcixcbiAgICBtZXNzYWdlT2JqZWN0OiBDb21ldENoYXQuQmFzZU1lc3NhZ2UsXG4gICAgdGhlbWU6IENvbWV0Q2hhdFRoZW1lLFxuICAgIGdyb3VwPzogQ29tZXRDaGF0Lkdyb3VwXG4gICk6IEFycmF5PENvbWV0Q2hhdE1lc3NhZ2VPcHRpb24+IHtcbiAgICBsZXQgX2lzU2VudEJ5TWU6IGJvb2xlYW4gPSB0aGlzLmlzU2VudEJ5TWUobG9nZ2VkSW5Vc2VyLCBtZXNzYWdlT2JqZWN0KTtcbiAgICBsZXQgX2lzTW9kZXJhdG9yOiBib29sZWFuID0gZmFsc2U7XG4gICAgaWYgKGdyb3VwPy5nZXRTY29wZSgpID09IENvbWV0Q2hhdFVJS2l0Q29uc3RhbnRzLmdyb3VwTWVtYmVyU2NvcGUubW9kZXJhdG9yKVxuICAgICAgX2lzTW9kZXJhdG9yID0gdHJ1ZTtcbiAgICBsZXQgbWVzc2FnZU9wdGlvbkxpc3Q6IEFycmF5PENvbWV0Q2hhdE1lc3NhZ2VPcHRpb24+ID0gW107XG4gICAgaWYgKCFtZXNzYWdlT2JqZWN0LmdldFBhcmVudE1lc3NhZ2VJZCgpKSB7XG4gICAgICBtZXNzYWdlT3B0aW9uTGlzdC5wdXNoKHRoaXMuZ2V0UmVwbHlJblRocmVhZE9wdGlvbih0aGVtZSkpO1xuICAgIH1cbiAgICBpZiAoX2lzU2VudEJ5TWUpIHtcbiAgICAgIG1lc3NhZ2VPcHRpb25MaXN0LnB1c2godGhpcy5nZXRNZXNzYWdlSW5mb09wdGlvbih0aGVtZSkpO1xuICAgIH1cbiAgICBpZiAoZ3JvdXAgJiYgIV9pc1NlbnRCeU1lKSB7XG4gICAgICBtZXNzYWdlT3B0aW9uTGlzdC5wdXNoKHRoaXMuZ2V0TWVzc2FnZVByaXZhdGVseU9wdGlvbih0aGVtZSkpO1xuICAgIH1cbiAgICBpZiAoX2lzU2VudEJ5TWUgPT0gdHJ1ZSB8fCBfaXNNb2RlcmF0b3IgPT0gdHJ1ZSlcbiAgICAgIG1lc3NhZ2VPcHRpb25MaXN0LnB1c2godGhpcy5nZXREZWxldGVPcHRpb24odGhlbWUpKTtcblxuICAgIHJldHVybiBtZXNzYWdlT3B0aW9uTGlzdDtcbiAgfVxuICBnZXRBbGxNZXNzYWdlVHlwZXMoKTogQXJyYXk8c3RyaW5nPiB7XG4gICAgcmV0dXJuIFtcbiAgICAgIENvbWV0Q2hhdFVJS2l0Q29uc3RhbnRzLk1lc3NhZ2VUeXBlcy50ZXh0LFxuICAgICAgQ29tZXRDaGF0VUlLaXRDb25zdGFudHMuTWVzc2FnZVR5cGVzLmltYWdlLFxuICAgICAgQ29tZXRDaGF0VUlLaXRDb25zdGFudHMuTWVzc2FnZVR5cGVzLmF1ZGlvLFxuICAgICAgQ29tZXRDaGF0VUlLaXRDb25zdGFudHMuTWVzc2FnZVR5cGVzLnZpZGVvLFxuICAgICAgQ29tZXRDaGF0VUlLaXRDb25zdGFudHMuTWVzc2FnZVR5cGVzLmZpbGUsXG4gICAgICBDb21ldENoYXRVSUtpdENvbnN0YW50cy5NZXNzYWdlVHlwZXMuZ3JvdXBNZW1iZXIsXG4gICAgICBDb21ldENoYXRVSUtpdENvbnN0YW50cy5NZXNzYWdlVHlwZXMuZm9ybSxcbiAgICAgIENvbWV0Q2hhdFVJS2l0Q29uc3RhbnRzLk1lc3NhZ2VUeXBlcy5jYXJkXG4gICAgXTtcbiAgfVxuICBhZGRMaXN0KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFwiPE1lc3NhZ2UgVXRpbHM+XCI7XG4gIH1cbiAgZ2V0QWxsTWVzc2FnZUNhdGVnb3JpZXMoKTogQXJyYXk8c3RyaW5nPiB7XG4gICAgcmV0dXJuIFtcbiAgICAgIENvbWV0Q2hhdFVJS2l0Q29uc3RhbnRzLk1lc3NhZ2VDYXRlZ29yeS5tZXNzYWdlLFxuICAgICAgQ29tZXRDaGF0VUlLaXRDb25zdGFudHMuTWVzc2FnZUNhdGVnb3J5LmFjdGlvbixcbiAgICAgIENvbWV0Q2hhdFVJS2l0Q29uc3RhbnRzLk1lc3NhZ2VDYXRlZ29yeS5pbnRlcmFjdGl2ZVxuICAgIF07XG4gIH1cbiAgZ2V0QXV4aWxpYXJ5T3B0aW9ucyhcbiAgICBpZDogQ29tcG9zZXJJZCxcbiAgICB1c2VyPzogQ29tZXRDaGF0LlVzZXIsXG4gICAgZ3JvdXA/OiBDb21ldENoYXQuR3JvdXBcbiAgKTogYW55IHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBnZXRJZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiBcIm1lc3NhZ2VVdGlsc1wiO1xuICB9XG4gIGdldEFjdGlvbk1lc3NhZ2UobWVzc2FnZTogQ29tZXRDaGF0LkFjdGlvbik6IHN0cmluZyB7XG4gICAgdHJ5IHtcbiAgICAgIGlmIChtZXNzYWdlIGluc3RhbmNlb2YgQ29tZXRDaGF0LkFjdGlvbikge1xuICAgICAgICBjb25zdCBhY3Rpb24gPSBtZXNzYWdlLmdldEFjdGlvbigpO1xuICAgICAgICBjb25zdCBhY3Rpb25CeSA9IG1lc3NhZ2UuZ2V0QWN0aW9uQnkoKTtcbiAgICAgICAgY29uc3QgYWN0aW9uT24gPSBtZXNzYWdlLmdldEFjdGlvbk9uKCk7XG5cbiAgICAgICAgY29uc3QgYnlTdHJpbmcgPSAoYWN0aW9uQnkgYXMgQ29tZXRDaGF0LlVzZXIpLmdldE5hbWUoKTtcbiAgICAgICAgY29uc3QgZm9yU3RyaW5nID1cbiAgICAgICAgICBhY3Rpb24gPT09IENvbWV0Q2hhdFVJS2l0Q29uc3RhbnRzLmdyb3VwTWVtYmVyQWN0aW9uLkpPSU5FRCB8fFxuICAgICAgICAgICAgYWN0aW9uID09PSBDb21ldENoYXRVSUtpdENvbnN0YW50cy5ncm91cE1lbWJlckFjdGlvbi5MRUZUXG4gICAgICAgICAgICA/IFwiXCJcbiAgICAgICAgICAgIDogKGFjdGlvbk9uIGFzIENvbWV0Q2hhdC5Vc2VyKS5nZXROYW1lKCk7XG5cbiAgICAgICAgc3dpdGNoIChhY3Rpb24pIHtcbiAgICAgICAgICBjYXNlIENvbWV0Q2hhdFVJS2l0Q29uc3RhbnRzLmdyb3VwTWVtYmVyQWN0aW9uLkFEREVEOlxuICAgICAgICAgICAgcmV0dXJuIGAke2J5U3RyaW5nfSAke2xvY2FsaXplKFwiQURERURcIil9ICR7Zm9yU3RyaW5nfWA7XG4gICAgICAgICAgY2FzZSBDb21ldENoYXRVSUtpdENvbnN0YW50cy5ncm91cE1lbWJlckFjdGlvbi5KT0lORUQ6XG4gICAgICAgICAgICByZXR1cm4gYCR7YnlTdHJpbmd9ICR7bG9jYWxpemUoXCJKT0lORURcIil9YDtcbiAgICAgICAgICBjYXNlIENvbWV0Q2hhdFVJS2l0Q29uc3RhbnRzLmdyb3VwTWVtYmVyQWN0aW9uLkxFRlQ6XG4gICAgICAgICAgICByZXR1cm4gYCR7YnlTdHJpbmd9ICR7bG9jYWxpemUoXCJMRUZUXCIpfWA7XG4gICAgICAgICAgY2FzZSBDb21ldENoYXRVSUtpdENvbnN0YW50cy5ncm91cE1lbWJlckFjdGlvbi5LSUNLRUQ6XG4gICAgICAgICAgICByZXR1cm4gYCR7YnlTdHJpbmd9ICR7bG9jYWxpemUoXCJLSUNLRURcIil9ICR7Zm9yU3RyaW5nfWA7XG4gICAgICAgICAgY2FzZSBDb21ldENoYXRVSUtpdENvbnN0YW50cy5ncm91cE1lbWJlckFjdGlvbi5CQU5ORUQ6XG4gICAgICAgICAgICByZXR1cm4gYCR7YnlTdHJpbmd9ICR7bG9jYWxpemUoXCJCQU5ORURcIil9ICR7Zm9yU3RyaW5nfWA7XG4gICAgICAgICAgY2FzZSBDb21ldENoYXRVSUtpdENvbnN0YW50cy5ncm91cE1lbWJlckFjdGlvbi5VTkJBTk5FRDpcbiAgICAgICAgICAgIHJldHVybiBgJHtieVN0cmluZ30gJHtsb2NhbGl6ZShcIlVOQkFOTkVEXCIpfSAke2ZvclN0cmluZ31gO1xuICAgICAgICAgIGNhc2UgQ29tZXRDaGF0VUlLaXRDb25zdGFudHMuZ3JvdXBNZW1iZXJBY3Rpb24uU0NPUEVfQ0hBTkdFOlxuICAgICAgICAgICAgcmV0dXJuIGAke2J5U3RyaW5nfSAke2xvY2FsaXplKFxuICAgICAgICAgICAgICBcIk1BREVcIlxuICAgICAgICAgICAgKX0gJHtmb3JTdHJpbmd9ICR7bWVzc2FnZS5nZXROZXdTY29wZSgpfWA7XG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHJldHVybiBcIlwiO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gXCJcIjtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXR1cm4gXCJcIjtcbiAgICB9XG4gIH1cblxuICBpbWFnZUF0dGFjaG1lbnRPcHRpb24odGhlbWU6IENvbWV0Q2hhdFRoZW1lKTogQ29tZXRDaGF0TWVzc2FnZUNvbXBvc2VyQWN0aW9uIHtcbiAgICByZXR1cm4gbmV3IENvbWV0Q2hhdE1lc3NhZ2VDb21wb3NlckFjdGlvbih7XG4gICAgICBpZDogQ29tZXRDaGF0VUlLaXRDb25zdGFudHMuTWVzc2FnZVR5cGVzLmltYWdlLFxuICAgICAgdGl0bGU6IGxvY2FsaXplKFwiQVRUQUNIX0lNQUdFXCIpLFxuICAgICAgaWNvblVSTDogXCJhc3NldHMvcGhvdG9saWJyYXJ5LnN2Z1wiLFxuICAgICAgb25DbGljazogbnVsbCxcbiAgICAgIGljb25UaW50OiB0aGVtZS5wYWxldHRlLmdldEFjY2VudDcwMCgpLFxuICAgICAgdGl0bGVGb250OiBmb250SGVscGVyKHRoZW1lLnR5cG9ncmFwaHkuc3VidGl0bGUxKSxcbiAgICAgIHRpdGxlQ29sb3I6IHRoZW1lLnBhbGV0dGUuZ2V0QWNjZW50NzAwKCksXG4gICAgICBib3JkZXJSYWRpdXM6IFwiOHB4XCIsXG4gICAgICBiYWNrZ3JvdW5kOiB0aGVtZS5wYWxldHRlLmdldEFjY2VudDEwMCgpLFxuICAgIH0pO1xuICB9XG4gIHZpZGVvQXR0YWNobWVudE9wdGlvbih0aGVtZTogQ29tZXRDaGF0VGhlbWUpOiBDb21ldENoYXRNZXNzYWdlQ29tcG9zZXJBY3Rpb24ge1xuICAgIHJldHVybiBuZXcgQ29tZXRDaGF0TWVzc2FnZUNvbXBvc2VyQWN0aW9uKHtcbiAgICAgIGlkOiBDb21ldENoYXRVSUtpdENvbnN0YW50cy5NZXNzYWdlVHlwZXMudmlkZW8sXG4gICAgICB0aXRsZTogbG9jYWxpemUoXCJBVFRBQ0hfVklERU9cIiksXG4gICAgICBpY29uVVJMOiBcImFzc2V0cy92aWRlby5zdmdcIixcbiAgICAgIG9uQ2xpY2s6IG51bGwsXG4gICAgICBpY29uVGludDogdGhlbWUucGFsZXR0ZS5nZXRBY2NlbnQ3MDAoKSxcbiAgICAgIHRpdGxlRm9udDogZm9udEhlbHBlcih0aGVtZS50eXBvZ3JhcGh5LnN1YnRpdGxlMSksXG4gICAgICB0aXRsZUNvbG9yOiB0aGVtZS5wYWxldHRlLmdldEFjY2VudDcwMCgpLFxuICAgICAgYm9yZGVyUmFkaXVzOiBcIjhweFwiLFxuICAgICAgYmFja2dyb3VuZDogdGhlbWUucGFsZXR0ZS5nZXRBY2NlbnQxMDAoKSxcbiAgICB9KTtcbiAgfVxuICBhdWRpb0F0dGFjaG1lbnRPcHRpb24odGhlbWU6IENvbWV0Q2hhdFRoZW1lKTogQ29tZXRDaGF0TWVzc2FnZUNvbXBvc2VyQWN0aW9uIHtcbiAgICByZXR1cm4gbmV3IENvbWV0Q2hhdE1lc3NhZ2VDb21wb3NlckFjdGlvbih7XG4gICAgICBpZDogQ29tZXRDaGF0VUlLaXRDb25zdGFudHMuTWVzc2FnZVR5cGVzLmF1ZGlvLFxuICAgICAgdGl0bGU6IGxvY2FsaXplKFwiQVRUQUNIX0FVRElPXCIpLFxuICAgICAgaWNvblVSTDogXCJhc3NldHMvYXVkaW8tZmlsZS5zdmdcIixcbiAgICAgIG9uQ2xpY2s6IG51bGwsXG4gICAgICBpY29uVGludDogdGhlbWUucGFsZXR0ZS5nZXRBY2NlbnQ3MDAoKSxcbiAgICAgIHRpdGxlRm9udDogZm9udEhlbHBlcih0aGVtZS50eXBvZ3JhcGh5LnN1YnRpdGxlMSksXG4gICAgICB0aXRsZUNvbG9yOiB0aGVtZS5wYWxldHRlLmdldEFjY2VudDcwMCgpLFxuICAgICAgYm9yZGVyUmFkaXVzOiBcIjhweFwiLFxuICAgICAgYmFja2dyb3VuZDogdGhlbWUucGFsZXR0ZS5nZXRBY2NlbnQxMDAoKSxcbiAgICB9KTtcbiAgfVxuICBmaWxlQXR0YWNobWVudE9wdGlvbih0aGVtZTogQ29tZXRDaGF0VGhlbWUpOiBDb21ldENoYXRNZXNzYWdlQ29tcG9zZXJBY3Rpb24ge1xuICAgIHJldHVybiBuZXcgQ29tZXRDaGF0TWVzc2FnZUNvbXBvc2VyQWN0aW9uKHtcbiAgICAgIGlkOiBDb21ldENoYXRVSUtpdENvbnN0YW50cy5NZXNzYWdlVHlwZXMuZmlsZSxcbiAgICAgIHRpdGxlOiBsb2NhbGl6ZShcIkFUVEFDSF9GSUxFXCIpLFxuICAgICAgaWNvblVSTDogXCJhc3NldHMvYXR0YWNobWVudC1maWxlLnN2Z1wiLFxuICAgICAgb25DbGljazogbnVsbCxcbiAgICAgIGljb25UaW50OiB0aGVtZS5wYWxldHRlLmdldEFjY2VudDcwMCgpLFxuICAgICAgdGl0bGVGb250OiBmb250SGVscGVyKHRoZW1lLnR5cG9ncmFwaHkuc3VidGl0bGUxKSxcbiAgICAgIHRpdGxlQ29sb3I6IHRoZW1lLnBhbGV0dGUuZ2V0QWNjZW50NzAwKCksXG4gICAgICBib3JkZXJSYWRpdXM6IFwiOHB4XCIsXG4gICAgICBiYWNrZ3JvdW5kOiB0aGVtZS5wYWxldHRlLmdldEFjY2VudDEwMCgpLFxuICAgIH0pO1xuICB9XG4gIGdldEF0dGFjaG1lbnRPcHRpb25zKFxuICAgIHRoZW1lOiBDb21ldENoYXRUaGVtZSxcbiAgICB1c2VyPzogQ29tZXRDaGF0LlVzZXIsXG4gICAgZ3JvdXA/OiBDb21ldENoYXQuR3JvdXAsXG4gICAgaWQ/OiBDb21wb3NlcklkXG4gICk6IENvbWV0Q2hhdE1lc3NhZ2VDb21wb3NlckFjdGlvbltdIHtcbiAgICBsZXQgYWN0aW9uczogQXJyYXk8Q29tZXRDaGF0TWVzc2FnZUNvbXBvc2VyQWN0aW9uPiA9IFtcbiAgICAgIHRoaXMuaW1hZ2VBdHRhY2htZW50T3B0aW9uKHRoZW1lKSxcbiAgICAgIHRoaXMudmlkZW9BdHRhY2htZW50T3B0aW9uKHRoZW1lKSxcbiAgICAgIHRoaXMuYXVkaW9BdHRhY2htZW50T3B0aW9uKHRoZW1lKSxcbiAgICAgIHRoaXMuZmlsZUF0dGFjaG1lbnRPcHRpb24odGhlbWUpLFxuICAgIF07XG4gICAgcmV0dXJuIGFjdGlvbnM7XG4gIH1cbiAgZ2V0TGFzdENvbnZlcnNhdGlvbk1lc3NhZ2UoXG4gICAgY29udmVyc2F0aW9uOiBDb21ldENoYXQuQ29udmVyc2F0aW9uLFxuICAgIGxvZ2dlZEluVXNlcjogQ29tZXRDaGF0LlVzZXJcbiAgKTogc3RyaW5nIHtcbiAgICByZXR1cm4gQ29udmVyc2F0aW9uVXRpbHMuZ2V0TGFzdENvbnZlcnNhdGlvbk1lc3NhZ2UoXG4gICAgICBjb252ZXJzYXRpb24sXG4gICAgICBsb2dnZWRJblVzZXJcbiAgICApO1xuICB9XG5cbiAgZ2V0QUlPcHRpb25zKFxuICAgIHRoZW1lOiBDb21ldENoYXRUaGVtZSxcbiAgICBpZD86IE1hcDxTdHJpbmcsIGFueT5cbiAgKTogQXJyYXk8Q29tZXRDaGF0TWVzc2FnZUNvbXBvc2VyQWN0aW9uIHwgQ29tZXRDaGF0QWN0aW9uc1ZpZXc+IHtcbiAgICByZXR1cm4gW107XG4gIH1cbn1cbmV4cG9ydCB0eXBlIENvbXBvc2VySWQgPSB7XG4gIHBhcmVudE1lc3NhZ2VJZDogbnVtYmVyIHwgbnVsbDtcbiAgdXNlcjogc3RyaW5nIHwgbnVsbDtcbiAgZ3JvdXA6IHN0cmluZyB8IG51bGw7XG59O1xuIl19
|
|
659
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWVzc2FnZVV0aWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2hhdC11aWtpdC1hbmd1bGFyL3NyYy9TaGFyZWQvVXRpbHMvTWVzc2FnZVV0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxzQkFBc0IsRUFDdEIsc0JBQXNCLEVBQ3RCLHdCQUF3QixFQUN4Qiw4QkFBOEIsRUFFOUIsUUFBUSxFQUNSLHVCQUF1QixFQUN2QixVQUFVLEVBRVYscUJBQXFCLEdBQ3RCLE1BQU0sNEJBQTRCLENBQUM7QUFDcEMsT0FBTyxFQUNMLDhCQUE4QixFQUU5QiwyQkFBMkIsRUFDM0IseUJBQXlCLEVBQ3pCLGlCQUFpQixFQUNqQixnQkFBZ0IsR0FDakIsTUFBTSx5QkFBeUIsQ0FBQztBQUNqQyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFFM0QsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFFakUsTUFBTSxPQUFPLFlBQVk7SUFDdkI7Ozs7S0FJQztJQUVELGFBQWEsQ0FBQyxLQUFxQjtRQUNqQyxPQUFPLElBQUksc0JBQXNCLENBQUM7WUFDaEMsRUFBRSxFQUFFLHVCQUF1QixDQUFDLGFBQWEsQ0FBQyxXQUFXO1lBQ3JELEtBQUssRUFBRSxRQUFRLENBQUMsY0FBYyxDQUFDO1lBQy9CLE9BQU8sRUFBRSxxQkFBcUI7WUFDOUIsT0FBTyxFQUFFLElBQUk7WUFDYixRQUFRLEVBQUUsS0FBSyxDQUFDLE9BQU8sQ0FBQyxZQUFZLEVBQUU7WUFDdEMsZUFBZSxFQUFFLGFBQWE7WUFDOUIsU0FBUyxFQUFFLFVBQVUsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQztZQUNqRCxVQUFVLEVBQUUsS0FBSyxDQUFDLE9BQU8sQ0FBQyxZQUFZLEVBQUU7U0FDekMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUNEOzs7O0tBSUM7SUFF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TUFBTSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFO2dCQUN4RCwwQkFBMEIsRUFBRSxFQUFFO2dCQUM5QixlQUFlLEVBQUUsVUFBVSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQztnQkFDMUQsZ0JBQWdCLEVBQUUsTUFBTSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFO2dCQUNuRCxxQkFBcUIsRUFBRSxFQUFFO2FBQzFCLENBQUMsQ0FDSCxDQUFDO1NBQ0g7UUFDRCxPQUFPLHFCQUFxQixDQUFDO0lBQy9CLENBQUM7SUFFRCxtQkFBbUIsQ0FBQyxTQUFjLEVBQUU7UUFDbEMsSUFBSSxnQkFBZ0IsR0FBRyxJQUFJLHlCQUF5QixDQUFDO1lBQ25ELHNCQUFzQjtTQUN2QixDQUFDLENBQUM7UUFDSCxJQUFJLE1BQU0sQ0FBQyxTQUFTLElBQUksc0JBQXNCLENBQUMsSUFBSSxFQUFFO1lBQ25ELGdCQUFnQixDQUFDLFFBQVEsQ0FBQztnQkFDeEIsa0JBQWtCLEVBQUUsTUFBTSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFO2dCQUNyRCxpQkFBaUIsRUFBRSxVQUFVLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDO2FBQzdELENBQUMsQ0FBQztTQUNKO2FBQU07WUFDTCxnQkFBZ0IsQ0FBQyxRQUFRLENBQUM7Z0JBQ3hCLGtCQUFrQixFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRTtnQkFDdEQsaUJBQWlCLEVBQUUsVUFBVSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQzthQUM3RCxDQUFDLENBQUM7U0FDSjtRQUNELE9BQU8sZ0JBQWdCLENBQUM7SUFDMUIsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tZXRDaGF0TWVzc2FnZU9wdGlvbixcbiAgTWVzc2FnZUJ1YmJsZUFsaWdubWVudCxcbiAgQ29tZXRDaGF0TWVzc2FnZVRlbXBsYXRlLFxuICBDb21ldENoYXRNZXNzYWdlQ29tcG9zZXJBY3Rpb24sXG4gIENvbWV0Q2hhdFRoZW1lLFxuICBsb2NhbGl6ZSxcbiAgQ29tZXRDaGF0VUlLaXRDb25zdGFudHMsXG4gIGZvbnRIZWxwZXIsXG4gIENvbWV0Q2hhdEFjdGlvbnNWaWV3LFxuICBNZW50aW9uc1RhcmdldEVsZW1lbnQsXG59IGZyb20gXCJAY29tZXRjaGF0L3Vpa2l0LXJlc291cmNlc1wiO1xuaW1wb3J0IHtcbiAgQ29tZXRDaGF0TWVudGlvbnNUZXh0Rm9ybWF0dGVyLFxuICBDb21ldENoYXRUZXh0Rm9ybWF0dGVyLFxuICBDb21ldENoYXRVSUtpdExvZ2luTGlzdGVuZXIsXG4gIENvbWV0Q2hhdFVybFRleHRGb3JtYXR0ZXIsXG4gIENvbnZlcnNhdGlvblV0aWxzLFxuICBVc2VyTWVudGlvblN0eWxlLFxufSBmcm9tIFwiQGNvbWV0Y2hhdC91aWtpdC1zaGFyZWRcIjtcbmltcG9ydCB7IENvbWV0Q2hhdCB9IGZyb20gXCJAY29tZXRjaGF0L2NoYXQtc2RrLWphdmFzY3JpcHRcIjtcbmltcG9ydCB7IERhdGFTb3VyY2UgfSBmcm9tIFwiLi4vRnJhbWV3b3JrL0RhdGFTb3VyY2VcIjtcbmltcG9ydCB7IENoYXRDb25maWd1cmF0b3IgfSBmcm9tIFwiLi4vRnJhbWV3b3JrL0NoYXRDb25maWd1cmF0b3JcIjtcbmltcG9ydCB7IENvbWV0Q2hhdFVJS2l0IH0gZnJvbSBcIi4uL0NvbWV0Q2hhdFVJa2l0L0NvbWV0Q2hhdFVJS2l0XCI7XG5leHBvcnQgY2xhc3MgTWVzc2FnZVV0aWxzIGltcGxlbWVudHMgRGF0YVNvdXJjZSB7XG4gIC8qKlxuICogQ3JlYXRlcyBhbiBvcHRpb24gdG8gZWRpdCBtZXNzYWdlLlxuICogQHBhcmFtIHtDb21ldENoYXRUaGVtZX0gdGhlbWUgLSBUaGUgdGhlbWUgb2JqZWN0LlxuICogQHJldHVybiB7Q29tZXRDaGF0TWVzc2FnZU9wdGlvbn0gLSBSZXR1cm5zIGEgbmV3IG1lc3NhZ2Ugb3B0aW9uLlxuICovXG5cbiAgZ2V0RWRpdE9wdGlvbih0aGVtZTogQ29tZXRDaGF0VGhlbWUpOiBDb21ldENoYXRNZXNzYWdlT3B0aW9uIHtcbiAgICByZXR1cm4gbmV3IENvbWV0Q2hhdE1lc3NhZ2VPcHRpb24oe1xuICAgICAgaWQ6IENvbWV0Q2hhdFVJS2l0Q29uc3RhbnRzLk1lc3NhZ2VPcHRpb24uZWRpdE1lc3NhZ2UsXG4gICAgICB0aXRsZTogbG9jYWxpemUoXCJFRElUX01FU1NBR0VcIiksXG4gICAgICBpY29uVVJMOiBcImFzc2V0cy9lZGl0aWNvbi5zdmdcIixcbiAgICAgIG9uQ2xpY2s6IG51bGwsXG4gICAgICBpY29uVGludDogdGhlbWUucGFsZXR0ZS5nZXRBY2NlbnQ2MDAoKSxcbiAgICAgIGJhY2tncm91bmRDb2xvcjogXCJ0cmFuc3BhcmVudFwiLFxuICAgICAgdGl0bGVGb250OiBmb250SGVscGVyKHRoZW1lLnR5cG9ncmFwaHkuc3VidGl0bGUxKSxcbiAgICAgIHRpdGxlQ29sb3I6IHRoZW1lLnBhbGV0dGUuZ2V0QWNjZW50NjAwKCksXG4gICAgfSk7XG4gIH1cbiAgLyoqXG4gKiBDcmVhdGVzIGFuIG9wdGlvbiB0byByZWFjdCB0byBhIG1lc3NhZ2UuXG4gKiBAcGFyYW0ge0NvbWV0Q2hhdFRoZW1lfSB0aGVtZSAtIFRoZSB0aGVtZSBvYmplY3QuXG4gKiBAcmV0dXJuIHtDb21ldENoYXRNZXNzYWdlT3B0aW9ufSAtIFJldHVybnMgYSBuZXcgbWVzc2FnZSBvcHRpb24uXG4gKi9cblxuICBnZXRSZWFjdGlvbk9wdGlvbih0aGVtZTogQ29tZXRDaGF0VGhlbWUpOiBDb21ldENoYXRNZXNzYWdlT3B0aW9uIHtcbiAgICByZXR1cm4gbmV3IENvbWV0Q2hhdE1lc3NhZ2VPcHRpb24oe1xuICAgICAgaWQ6IENvbWV0Q2hhdFVJS2l0Q29uc3RhbnRzLk1lc3NhZ2VPcHRpb24ucmVhY3RUb01lc3NhZ2UsXG4gICAgICB0aXRsZTogbG9jYWxpemUoXCJSRUFDVF9UT19NRVNTQUdFXCIpLFxuICAgICAgaWNvblVSTDogXCJhc3NldHMvYWRkcmVhY3Rpb24uc3ZnXCIsXG4gICAgICBvbkNsaWNrOiB1bmRlZmluZWQsXG4gICAgICBpY29uVGludDogdGhlbWUucGFsZXR0ZS5nZXRBY2NlbnQ2MDAoKSxcbiAgICAgIGJhY2tncm91bmRDb2xvcjogXCJ0cmFuc3BhcmVudFwiLFxuICAgICAgdGl0bGVGb250OiBmb250SGVscGVyKHRoZW1lLnR5cG9ncmFwaHkuc3VidGl0bGUxKSxcbiAgICAgIHRpdGxlQ29sb3I6IHRoZW1lLnBhbGV0dGUuZ2V0QWNjZW50NjAwKCksXG4gICAgfSk7XG4gIH1cbiAgLyoqXG4gKiBDcmVhdGVzIGFuIG9wdGlvbiB0byBnZXQgaW5mbyBhYm91dCBhIG1lc3NhZ2UuXG4gKiBAcGFyYW0ge0NvbWV0Q2hhdFRoZW1lfSB0aGVtZSAtIFRoZSB0aGVtZSBvYmplY3QuXG4gKiBAcmV0dXJuIHtDb21ldENoYXRNZXNzYWdlT3B0aW9ufSAtIFJldHVybnMgYSBuZXcgbWVzc2FnZSBvcHRpb24uXG4gKi9cblxuICBnZXRNZXNzYWdlSW5mb09wdGlvbih0aGVtZTogQ29tZXRDaGF0VGhlbWUpOiBDb21ldENoYXRNZXNzYWdlT3B0aW9uIHtcbiAgICByZXR1cm4gbmV3IENvbWV0Q2hhdE1lc3NhZ2VPcHRpb24oe1xuICAgICAgaWQ6IENvbWV0Q2hhdFVJS2l0Q29uc3RhbnRzLk1lc3NhZ2VPcHRpb24ubWVzc2FnZUluZm9ybWF0aW9uLFxuICAgICAgdGl0bGU6IGxvY2FsaXplKFwiTUVTU0FHRV9JTkZPUk1BVElPTlwiKSxcbiAgICAgIGljb25VUkw6IFwiYXNzZXRzL0luZm8uc3ZnXCIsXG4gICAgICBvbkNsaWNrOiBudWxsLFxuICAgICAgaWNvblRpbnQ6IHRoZW1lLnBhbGV0dGUuZ2V0QWNjZW50NjAwKCksXG4gICAgICBiYWNrZ3JvdW5kQ29sb3I6IFwidHJhbnNwYXJlbnRcIixcbiAgICAgIHRpdGxlRm9udDogZm9udEhlbHBlcih0aGVtZS50eXBvZ3JhcGh5LnN1YnRpdGxlMSksXG4gICAgICB0aXRsZUNvbG9yOiB0aGVtZS5wYWxldHRlLmdldEFjY2VudDYwMCgpLFxuICAgIH0pO1xuICB9XG4gIC8qKlxuICAqIENyZWF0ZXMgYW4gb3B0aW9uIHRvIHNlbmQgYSBwcml2YXRlIG1lc3NhZ2UuXG4gICogQHBhcmFtIHtDb21ldENoYXRUaGVtZX0gdGhlbWUgLSBUaGUgdGhlbWUgb2JqZWN0LlxuICAqIEByZXR1cm4ge0NvbWV0Q2hhdE1lc3NhZ2VPcHRpb259IC0gUmV0dXJucyBhIG5ldyBtZXNzYWdlIG9wdGlvbi5cbiAgKi9cbiAgZ2V0TWVzc2FnZVByaXZhdGVseU9wdGlvbih0aGVtZTogQ29tZXRDaGF0VGhlbWUpOiBDb21ldENoYXRNZXNzYWdlT3B0aW9uIHtcbiAgICByZXR1cm4gbmV3IENvbWV0Q2hhdE1lc3NhZ2VPcHRpb24oe1xuICAgICAgaWQ6IENvbWV0Q2hhdFVJS2l0Q29uc3RhbnRzLk1lc3NhZ2VPcHRpb24uc2VuZE1lc3NhZ2VQcml2YXRlbHksXG4gICAgICB0aXRsZTogbG9jYWxpemUoXCJTRU5EX01FU1NBR0VfSU5fUFJJVkFURVwiKSxcbiAgICAgIGljb25VUkw6IFwiYXNzZXRzL21lc3NhZ2UtcHJpdmF0ZWx5LnN2Z1wiLFxuICAgICAgb25DbGljazogbnVsbCxcbiAgICAgIGljb25UaW50OiB0aGVtZS5wYWxldHRlLmdldEFjY2VudDYwMCgpLFxuICAgICAgYmFja2dyb3VuZENvbG9yOiBcInRyYW5zcGFyZW50XCIsXG4gICAgICB0aXRsZUZvbnQ6IGZvbnRIZWxwZXIodGhlbWUudHlwb2dyYXBoeS5zdWJ0aXRsZTEpLFxuICAgICAgdGl0bGVDb2xvcjogdGhlbWUucGFsZXR0ZS5nZXRBY2NlbnQ2MDAoKSxcbiAgICB9KTtcbiAgfVxuICAvKipcbiAqIENyZWF0ZXMgYW4gb3B0aW9uIHRvIGRlbGV0ZSBhIG1lc3NhZ2UuXG4gKiBAcGFyYW0ge0NvbWV0Q2hhdFRoZW1lfSB0aGVtZSAtIFRoZSB0aGVtZSBvYmplY3QuXG4gKiBAcmV0dXJuIHtDb21ldENoYXRNZXNzYWdlT3B0aW9ufSAtIFJldHVybnMgYSBuZXcgbWVzc2FnZSBvcHRpb24uXG4gKi9cblxuICBnZXREZWxldGVPcHRpb24odGhlbWU6IENvbWV0Q2hhdFRoZW1lKTogQ29tZXRDaGF0TWVzc2FnZU9wdGlvbiB7XG4gICAgcmV0dXJuIG5ldyBDb21ldENoYXRNZXNzYWdlT3B0aW9uKHtcbiAgICAgIGlkOiBDb21ldENoYXRVSUtpdENvbnN0YW50cy5NZXNzYWdlT3B0aW9uLmRlbGV0ZU1lc3NhZ2UsXG4gICAgICB0aXRsZTogbG9jYWxpemUoXCJERUxFVEVcIiksXG4gICAgICBpY29uVVJMOiBcImFzc2V0cy9kZWxldGVpY29uLnN2Z1wiLFxuICAgICAgb25DbGljazogbnVsbCxcbiAgICAgIGljb25UaW50OiB0aGVtZS5wYWxldHRlLmdldEFjY2VudDYwMCgpLFxuICAgICAgYmFja2dyb3VuZENvbG9yOiBcInRyYW5zcGFyZW50XCIsXG4gICAgICB0aXRsZUZvbnQ6IGZvbnRIZWxwZXIodGhlbWUudHlwb2dyYXBoeS5zdWJ0aXRsZTEpLFxuICAgICAgdGl0bGVDb2xvcjogdGhlbWUucGFsZXR0ZS5nZXRBY2NlbnQ2MDAoKSxcbiAgICB9KTtcbiAgfVxuICAvKipcbiAqIENyZWF0ZXMgYW4gb3B0aW9uIHRvIHJlcGx5IHRvIGEgbWVzc2FnZSBpbiBhIHRocmVhZC5cbiAqIEBwYXJhbSB7Q29tZXRDaGF0VGhlbWV9IHRoZW1lIC0gVGhlIHRoZW1lIG9iamVjdC5cbiAqIEByZXR1cm4ge0NvbWV0Q2hhdE1lc3NhZ2VPcHRpb259IC0gUmV0dXJucyBhIG5ldyBtZXNzYWdlIG9wdGlvbi5cbiAqL1xuXG4gIGdldFJlcGx5SW5UaHJlYWRPcHRpb24odGhlbWU6IENvbWV0Q2hhdFRoZW1lKTogQ29tZXRDaGF0TWVzc2FnZU9wdGlvbiB7XG4gICAgcmV0dXJuIG5ldyBDb21ldENoYXRNZXNzYWdlT3B0aW9uKHtcbiAgICAgIGlkOiBDb21ldENoYXRVSUtpdENvbnN0YW50cy5NZXNzYWdlT3B0aW9uLnJlcGx5SW5UaHJlYWQsXG4gICAgICB0aXRsZTogbG9jYWxpemUoXCJSRVBMWV9JTl9USFJFQURcIiksXG4gICAgICBpY29uVVJMOiBcImFzc2V0cy90aHJlYWRpY29uLnN2Z1wiLFxuICAgICAgb25DbGljazogbnVsbCxcbiAgICAgIGljb25UaW50OiB0aGVtZS5wYWxldHRlLmdldEFjY2VudDYwMCgpLFxuICAgICAgYmFja2dyb3VuZENvbG9yOiBcInRyYW5zcGFyZW50XCIsXG4gICAgICB0aXRsZUZvbnQ6IGZvbnRIZWxwZXIodGhlbWUudHlwb2dyYXBoeS5zdWJ0aXRsZTEpLFxuICAgICAgdGl0bGVDb2xvcjogdGhlbWUucGFsZXR0ZS5nZXRBY2NlbnQ2MDAoKSxcbiAgICB9KTtcbiAgfVxuICAvKipcbiAqIENyZWF0ZXMgYW4gb3B0aW9uIHRvIGNvcHkgYSBtZXNzYWdlLlxuICogQHBhcmFtIHtDb21ldENoYXRUaGVtZX0gdGhlbWUgLSBUaGUgdGhlbWUgb2JqZWN0LlxuICogQHJldHVybiB7Q29tZXRDaGF0TWVzc2FnZU9wdGlvbn0gLSBSZXR1cm5zIGEgbmV3IG1lc3NhZ2Ugb3B0aW9uLlxuICovXG4gIGdldENvcHlPcHRpb24odGhlbWU6IENvbWV0Q2hhdFRoZW1lKTogQ29tZXRDaGF0TWVzc2FnZU9wdGlvbiB7XG4gICAgcmV0dXJuIG5ldyBDb21ldENoYXRNZXNzYWdlT3B0aW9uKHtcbiAgICAgIGlkOiBDb21ldENoYXRVSUtpdENvbnN0YW50cy5NZXNzYWdlT3B0aW9uLmNvcHlNZXNzYWdlLFxuICAgICAgdGl0bGU6IGxvY2FsaXplKFwiQ09QWV9NRVNTQUdFXCIpLFxuICAgICAgaWNvblVSTDogXCJhc3NldHMvQ29weS5zdmdcIixcbiAgICAgIG9uQ2xpY2s6IG51bGwsXG4gICAgICBpY29uVGludDogdGhlbWUucGFsZXR0ZS5nZXRBY2NlbnQ2MDAoKSxcbiAgICAgIGJhY2tncm91bmRDb2xvcjogXCJ0cmFuc3BhcmVudFwiLFxuICAgICAgdGl0bGVGb250OiBmb250SGVscGVyKHRoZW1lLnR5cG9ncmFwaHkuc3VidGl0bGUxKSxcbiAgICAgIHRpdGxlQ29sb3I6IHRoZW1lLnBhbGV0dGUuZ2V0QWNjZW50NjAwKCksXG4gICAgfSk7XG4gIH1cbiAgLyoqXG4gKiBDaGVja3MgaWYgYSBtZXNzYWdlIGlzIHNlbnQgYnkgY3VycmVudCBsb2dnZWQgaW4gdXNlci5cbiAqIEBwYXJhbSB7Q29tZXRDaGF0LlVzZXJ9IGxvZ2dlZEluVXNlciAtIFRoZSBjdXJyZW50IGxvZ2dlZCBpbiB1c2VyLlxuICogQHBhcmFtIHtDb21ldENoYXQuQmFzZU1lc3NhZ2V9IG1lc3NhZ2UgLSBUaGUgbWVzc2FnZSB0byBjaGVjay5cbiAqIEByZXR1cm4ge2Jvb2xlYW59IC0gUmV0dXJucyB0cnVlIGlmIG1lc3NhZ2UgaXMgc2VudCBieSBjdXJyZW50IGxvZ2dlZCBpbiB1c2VyLCBvdGhlcndpc2UgZmFsc2UuXG4gKi9cblxuICBpc1NlbnRCeU1lKFxuICAgIGxvZ2dlZEluVXNlcjogQ29tZXRDaGF0LlVzZXIsXG4gICAgbWVzc2FnZTogQ29tZXRDaGF0LkJhc2VNZXNzYWdlXG4gICk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBsb2dnZWRJblVzZXIuZ2V0VWlkKCkgPT09IG1lc3NhZ2UuZ2V0U2VuZGVyKCkuZ2V0VWlkKCk7XG4gIH1cbiAgLyoqXG4gKiBGZXRjaGVzIG9wdGlvbnMgZm9yIHRleHQgbWVzc2FnZXMuXG4gKiBAcGFyYW0ge0NvbWV0Q2hhdC5Vc2VyfSBsb2dnZWRJblVzZXIgLSBUaGUgY3VycmVudCBsb2dnZWQgaW4gdXNlci5cbiAqIEBwYXJhbSB7Q29tZXRDaGF0LkJhc2VNZXNzYWdlfSBtZXNzYWdlT2JqZWN0IC0gVGhlIG1lc3NhZ2Ugb2JqZWN0LlxuICogQHBhcmFtIHtDb21ldENoYXRUaGVtZX0gdGhlbWUgLSBUaGUgdGhlbWUgb2JqZWN0LlxuICogQHBhcmFtIHtDb21ldENoYXQuR3JvdXB9IGdyb3VwIC0gVGhlIGdyb3VwIG9iamVjdC5cbiAqIEByZXR1cm4ge0FycmF5PENvbWV0Q2hhdE1lc3NhZ2VPcHRpb24+fSAtIFJldHVybnMgYW4gYXJyYXkgb2YgbWVzc2FnZSBvcHRpb25zLlxuICovXG5cbiAgZ2V0VGV4dE1lc3NhZ2VPcHRpb25zKFxuICAgIGxvZ2dlZEluVXNlcjogQ29tZXRDaGF0LlVzZXIsXG4gICAgbWVzc2FnZU9iamVjdDogQ29tZXRDaGF0LkJhc2VNZXNzYWdlLFxuICAgIHRoZW1lOiBDb21ldENoYXRUaGVtZSxcbiAgICBncm91cD86IENvbWV0Q2hhdC5Hcm91cFxuICApOiBBcnJheTxDb21ldENoYXRNZXNzYWdlT3B0aW9uPiB7XG4gICAgbGV0IF9pc1NlbnRCeU1lOiBib29sZWFuID0gdGhpcy5pc1NlbnRCeU1lKGxvZ2dlZEluVXNlciwgbWVzc2FnZU9iamVjdCk7XG4gICAgbGV0IF9pc01vZGVyYXRvcjogYm9vbGVhbiA9IGZhbHNlO1xuICAgIGlmIChcbiAgICAgIGdyb3VwPy5nZXRTY29wZSgpID09IENvbWV0Q2hhdFVJS2l0Q29uc3RhbnRzLmdyb3VwTWVtYmVyU2NvcGUubW9kZXJhdG9yXG4gICAgKSB7XG4gICAgICBfaXNNb2RlcmF0b3IgPSB0cnVlO1xuICAgIH1cbiAgICBsZXQgbWVzc2FnZU9wdGlvbkxpc3Q6IEFycmF5PENvbWV0Q2hhdE1lc3NhZ2VPcHRpb24+ID0gW107XG4gICAgbWVzc2FnZU9wdGlvbkxpc3QgPSBDaGF0Q29uZmlndXJhdG9yLmdldERhdGFTb3VyY2UoKS5nZXRDb21tb25PcHRpb25zKFxuICAgICAgbG9nZ2VkSW5Vc2VyLFxuICAgICAgbWVzc2FnZU9iamVjdCxcbiAgICAgIHRoZW1lLFxuICAgICAgZ3JvdXBcbiAgICApO1xuICAgIGlmIChfaXNTZW50QnlNZSkge1xuICAgICAgbWVzc2FnZU9wdGlvbkxpc3QudW5zaGlmdCh0aGlzLmdldEVkaXRPcHRpb24odGhlbWUpKTtcbiAgICB9XG4gICAgbWVzc2FnZU9wdGlvbkxpc3QudW5zaGlmdCh0aGlzLmdldENvcHlPcHRpb24odGhlbWUpKTtcbiAgICByZXR1cm4gbWVzc2FnZU9wdGlvbkxpc3Q7XG4gIH1cbiAgLyoqXG4gKiBGZXRjaGVzIG9wdGlvbnMgZm9yIGltYWdlIG1lc3NhZ2VzLlxuICogQHBhcmFtIHtDb21ldENoYXQuVXNlcn0gbG9nZ2VkSW5Vc2VyIC0gVGhlIGN1cnJlbnQgbG9nZ2VkIGluIHVzZXIuXG4gKiBAcGFyYW0ge0NvbWV0Q2hhdC5CYXNlTWVzc2FnZX0gbWVzc2FnZU9iamVjdCAtIFRoZSBtZXNzYWdlIG9iamVjdC5cbiAqIEBwYXJhbSB7Q29tZXRDaGF0VGhlbWV9IHRoZW1lIC0gVGhlIHRoZW1lIG9iamVjdC5cbiAqIEBwYXJhbSB7Q29tZXRDaGF0Lkdyb3VwfSBncm91cCAtIFRoZSBncm91cCBvYmplY3QuXG4gKiBAcmV0dXJuIHtBcnJheTxDb21ldENoYXRNZXNzYWdlT3B0aW9uPn0gLSBSZXR1cm5zIGFuIGFycmF5IG9mIG1lc3NhZ2Ugb3B0aW9ucy5cbiAqL1xuICBnZXRJbWFnZU1lc3NhZ2VPcHRpb25zKFxuICAgIGxvZ2dlZEluVXNlcjogQ29tZXRDaGF0LlVzZXIsXG4gICAgbWVzc2FnZU9iamVjdDogQ29tZXRDaGF0LkJhc2VNZXNzYWdlLFxuICAgIHRoZW1lOiBDb21ldENoYXRUaGVtZSxcbiAgICBncm91cD86IENvbWV0Q2hhdC5Hcm91cFxuICApOiBBcnJheTxDb21ldENoYXRNZXNzYWdlT3B0aW9uPiB7XG4gICAgbGV0IG1lc3NhZ2VPcHRpb25MaXN0OiBDb21ldENoYXRNZXNzYWdlT3B0aW9uW10gPSBbXTtcbiAgICBtZXNzYWdlT3B0aW9uTGlzdCA9IENoYXRDb25maWd1cmF0b3IuZ2V0RGF0YVNvdXJjZSgpLmdldENvbW1vbk9wdGlvbnMoXG4gICAgICBsb2dnZWRJblVzZXIsXG4gICAgICBtZXNzYWdlT2JqZWN0LFxuICAgICAgdGhlbWUsXG4gICAgICBncm91cFxuICAgICk7XG4gICAgcmV0dXJuIG1lc3NhZ2VPcHRpb25MaXN0O1xuICB9XG4gIC8qKlxuICogRmV0Y2hlcyBvcHRpb25zIGZvciB2aWRlbyBtZXNzYWdlcy5cbiAqIEBwYXJhbSB7Q29tZXRDaGF0LlVzZXJ9IGxvZ2dlZEluVXNlciAtIFRoZSBjdXJyZW50IGxvZ2dlZCBpbiB1c2VyLlxuICogQHBhcmFtIHtDb21ldENoYXQuQmFzZU1lc3NhZ2V9IG1lc3NhZ2VPYmplY3QgLSBUaGUgbWVzc2FnZSBvYmplY3QuXG4gKiBAcGFyYW0ge0NvbWV0Q2hhdFRoZW1lfSB0aGVtZSAtIFRoZSB0aGVtZSBvYmplY3QuXG4gKiBAcGFyYW0ge0NvbWV0Q2hhdC5Hcm91cH0gZ3JvdXAgLSAoT3B0aW9uYWwpIFRoZSBncm91cCBvYmplY3QuXG4gKiBAcmV0dXJuIHtBcnJheTxDb21ldENoYXRNZXNzYWdlT3B0aW9uPn0gLSBSZXR1cm5zIGFuIGFycmF5IG9mIG1lc3NhZ2Ugb3B0aW9ucy5cbiAqL1xuICBnZXRWaWRlb01lc3NhZ2VPcHRpb25zKFxuICAgIGxvZ2dlZEluVXNlcjogQ29tZXRDaGF0LlVzZXIsXG4gICAgbWVzc2FnZU9iamVjdDogQ29tZXRDaGF0LkJhc2VNZXNzYWdlLFxuICAgIHRoZW1lOiBDb21ldENoYXRUaGVtZSxcbiAgICBncm91cD86IENvbWV0Q2hhdC5Hcm91cFxuICApOiBBcnJheTxDb21ldENoYXRNZXNzYWdlT3B0aW9uPiB7XG4gICAgbGV0IG1lc3NhZ2VPcHRpb25MaXN0OiBDb21ldENoYXRNZXNzYWdlT3B0aW9uW10gPSBbXTtcbiAgICBtZXNzYWdlT3B0aW9uTGlzdCA9IENoYXRDb25maWd1cmF0b3IuZ2V0RGF0YVNvdXJjZSgpLmdldENvbW1vbk9wdGlvbnMoXG4gICAgICBsb2dnZWRJblVzZXIsXG4gICAgICBtZXNzYWdlT2JqZWN0LFxuICAgICAgdGhlbWUsXG4gICAgICBncm91cFxuICAgICk7XG4gICAgcmV0dXJuIG1lc3NhZ2VPcHRpb25MaXN0O1xuICB9XG4gIC8qKlxuICogRmV0Y2hlcyBvcHRpb25zIGZvciBhdWRpbyBtZXNzYWdlcy5cbiAqIEBwYXJhbSB7Q29tZXRDaGF0LlVzZXJ9IGxvZ2dlZEluVXNlciAtIFRoZSBjdXJyZW50IGxvZ2dlZCBpbiB1c2VyLlxuICogQHBhcmFtIHtDb21ldENoYXQuQmFzZU1lc3NhZ2V9IG1lc3NhZ2VPYmplY3QgLSBUaGUgbWVzc2FnZSBvYmplY3QuXG4gKiBAcGFyYW0ge0NvbWV0Q2hhdFRoZW1lfSB0aGVtZSAtIFRoZSB0aGVtZSBvYmplY3QuXG4gKiBAcGFyYW0ge0NvbWV0Q2hhdC5Hcm91cH0gZ3JvdXAgLSAoT3B0aW9uYWwpIFRoZSBncm91cCBvYmplY3QuXG4gKiBAcmV0dXJuIHtBcnJheTxDb21ldENoYXRNZXNzYWdlT3B0aW9uPn0gLSBSZXR1cm5zIGFuIGFycmF5IG9mIG1lc3NhZ2Ugb3B0aW9ucy5cbiAqL1xuICBnZXRBdWRpb01lc3NhZ2VPcHRpb25zKFxuICAgIGxvZ2dlZEluVXNlcjogQ29tZXRDaGF0LlVzZXIsXG4gICAgbWVzc2FnZU9iamVjdDogQ29tZXRDaGF0LkJhc2VNZXNzYWdlLFxuICAgIHRoZW1lOiBDb21ldENoYXRUaGVtZSxcbiAgICBncm91cD86IENvbWV0Q2hhdC5Hcm91cFxuICApOiBBcnJheTxDb21ldENoYXRNZXNzYWdlT3B0aW9uPiB7XG4gICAgbGV0IG1lc3NhZ2VPcHRpb25MaXN0OiBDb21ldENoYXRNZXNzYWdlT3B0aW9uW10gPSBbXTtcbiAgICBtZXNzYWdlT3B0aW9uTGlzdCA9IENoYXRDb25maWd1cmF0b3IuZ2V0RGF0YVNvdXJjZSgpLmdldENvbW1vbk9wdGlvbnMoXG4gICAgICBsb2dnZWRJblVzZXIsXG4gICAgICBtZXNzYWdlT2JqZWN0LFxuICAgICAgdGhlbWUsXG4gICAgICBncm91cFxuICAgICk7XG4gICAgcmV0dXJuIG1lc3NhZ2VPcHRpb25MaXN0O1xuICB9XG4gIC8qKlxuICogRmV0Y2hlcyBvcHRpb25zIGZvciBmaWxlIG1lc3NhZ2VzLlxuICogQHBhcmFtIHtDb21ldENoYXQuVXNlcn0gbG9nZ2VkSW5Vc2VyIC0gVGhlIGN1cnJlbnQgbG9nZ2VkIGluIHVzZXIuXG4gKiBAcGFyYW0ge0NvbWV0Q2hhdC5CYXNlTWVzc2FnZX0gbWVzc2FnZU9iamVjdCAtIFRoZSBtZXNzYWdlIG9iamVjdC5cbiAqIEBwYXJhbSB7Q29tZXRDaGF0VGhlbWV9IHRoZW1lIC0gVGhlIHRoZW1lIG9iamVjdC5cbiAqIEBwYXJhbSB7Q29tZXRDaGF0Lkdyb3VwfSBncm91cCAtIChPcHRpb25hbCkgVGhlIGdyb3VwIG9iamVjdC5cbiAqIEByZXR1cm4ge0FycmF5PENvbWV0Q2hhdE1lc3NhZ2VPcHRpb24+fSAtIFJldHVybnMgYW4gYXJyYXkgb2YgbWVzc2FnZSBvcHRpb25zLlxuICovXG4gIGdldEZpbGVNZXNzYWdlT3B0aW9ucyhcbiAgICBsb2dnZWRJblVzZXI6IENvbWV0Q2hhdC5Vc2VyLFxuICAgIG1lc3NhZ2VPYmplY3Q6IENvbWV0Q2hhdC5CYXNlTWVzc2FnZSxcbiAgICB0aGVtZTogQ29tZXRDaGF0VGhlbWUsXG4gICAgZ3JvdXA/OiBDb21ldENoYXQuR3JvdXBcbiAgKTogQXJyYXk8Q29tZXRDaGF0TWVzc2FnZU9wdGlvbj4ge1xuICAgIGxldCBtZXNzYWdlT3B0aW9uTGlzdDogQ29tZXRDaGF0TWVzc2FnZU9wdGlvbltdID0gW107XG4gICAgbWVzc2FnZU9wdGlvbkxpc3QgPSBDaGF0Q29uZmlndXJhdG9yLmdldERhdGFTb3VyY2UoKS5nZXRDb21tb25PcHRpb25zKFxuICAgICAgbG9nZ2VkSW5Vc2VyLFxuICAgICAgbWVzc2FnZU9iamVjdCxcbiAgICAgIHRoZW1lLFxuICAgICAgZ3JvdXBcbiAgICApO1xuICAgIHJldHVybiBtZXNzYWdlT3B0aW9uTGlzdDtcbiAgfVxuICBnZXRCb3R0b21WaWV3KFxuICAgIF9tZXNzYWdlT2JqZWN0OiBDb21ldENoYXQuQmFzZU1lc3NhZ2UsXG4gICAgX2FsaWdubWVudDogTWVzc2FnZUJ1YmJsZUFsaWdubWVudFxuICApIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBnZXRTY2hlZHVsZXJNZXNzYWdlVGVtcGxhdGUoKTogQ29tZXRDaGF0TWVzc2FnZVRlbXBsYXRlIHtcbiAgICByZXR1cm4gbmV3IENvbWV0Q2hhdE1lc3NhZ2VUZW1wbGF0ZSh7XG4gICAgICB0eXBlOiBDb21ldENoYXRVSUtpdENvbnN0YW50cy5NZXNzYWdlVHlwZXMuc2NoZWR1bGVyLFxuICAgICAgY2F0ZWdvcnk6IENvbWV0Q2hhdFVJS2l0Q29uc3RhbnRzLk1lc3NhZ2VDYXRlZ29yeS5pbnRlcmFjdGl2ZSxcbiAgICAgIG9wdGlvbnM6IENoYXRDb25maWd1cmF0b3IuZ2V0RGF0YVNvdXJjZSgpLmdldE1lc3NhZ2VPcHRpb25zLFxuICAgIH0pO1xuICB9XG4gIGdldFRleHRNZXNzYWdlVGVtcGxhdGUoKTogQ29tZXRDaGF0TWVzc2FnZVRlbXBsYXRlIHtcbiAgICByZXR1cm4gbmV3IENvbWV0Q2hhdE1lc3NhZ2VUZW1wbGF0ZSh7XG4gICAgICB0eXBlOiBDb21ldENoYXRVSUtpdENvbnN0YW50cy5NZXNzYWdlVHlwZXMudGV4dCxcbiAgICAgIGNhdGVnb3J5OiBDb21ldENoYXRVSUtpdENvbnN0YW50cy5NZXNzYWdlQ2F0ZWdvcnkubWVzc2FnZSxcbiAgICAgIG9wdGlvbnM6IENoYXRDb25maWd1cmF0b3IuZ2V0RGF0YVNvdXJjZSgpLmdldE1lc3NhZ2VPcHRpb25zLFxuICAgIH0pO1xuICB9XG4gIGdldEF1ZGlvTWVzc2FnZVRlbXBsYXRlKCk6IENvbWV0Q2hhdE1lc3NhZ2VUZW1wbGF0ZSB7XG4gICAgcmV0dXJuIG5ldyBDb21ldENoYXRNZXNzYWdlVGVtcGxhdGUoe1xuICAgICAgdHlwZTogQ29tZXRDaGF0VUlLaXRDb25zdGFudHMuTWVzc2FnZVR5cGVzLmF1ZGlvLFxuICAgICAgY2F0ZWdvcnk6IENvbWV0Q2hhdFVJS2l0Q29uc3RhbnRzLk1lc3NhZ2VDYXRlZ29yeS5tZXNzYWdlLFxuICAgICAgb3B0aW9uczogQ2hhdENvbmZpZ3VyYXRvci5nZXREYXRhU291cmNlKCkuZ2V0TWVzc2FnZU9wdGlvbnMsXG4gICAgfSk7XG4gIH1cbiAgZ2V0VmlkZW9NZXNzYWdlVGVtcGxhdGUoKTogQ29tZXRDaGF0TWVzc2FnZVRlbXBsYXRlIHtcbiAgICByZXR1cm4gbmV3IENvbWV0Q2hhdE1lc3NhZ2VUZW1wbGF0ZSh7XG4gICAgICB0eXBlOiBDb21ldENoYXRVSUtpdENvbnN0YW50cy5NZXNzYWdlVHlwZXMudmlkZW8sXG4gICAgICBjYXRlZ29yeTogQ29tZXRDaGF0VUlLaXRDb25zdGFudHMuTWVzc2FnZUNhdGVnb3J5Lm1lc3NhZ2UsXG4gICAgICBvcHRpb25zOiBDaGF0Q29uZmlndXJhdG9yLmdldERhdGFTb3VyY2UoKS5nZXRNZXNzYWdlT3B0aW9ucyxcbiAgICB9KTtcbiAgfVxuICBnZXRJbWFnZU1lc3NhZ2VUZW1wbGF0ZSgpOiBDb21ldENoYXRNZXNzYWdlVGVtcGxhdGUge1xuICAgIHJldHVybiBuZXcgQ29tZXRDaGF0TWVzc2FnZVRlbXBsYXRlKHtcbiAgICAgIHR5cGU6IENvbWV0Q2hhdFVJS2l0Q29uc3RhbnRzLk1lc3NhZ2VUeXBlcy5pbWFnZSxcbiAgICAgIGNhdGVnb3J5OiBDb21ldENoYXRVSUtpdENvbnN0YW50cy5NZXNzYWdlQ2F0ZWdvcnkubWVzc2FnZSxcbiAgICAgIG9wdGlvbnM6IENoYXRDb25maWd1cmF0b3IuZ2V0RGF0YVNvdXJjZSgpLmdldE1lc3NhZ2VPcHRpb25zLFxuICAgIH0pO1xuICB9XG4gIGdldEdyb3VwQWN0aW9uVGVtcGxhdGUoKTogQ29tZXRDaGF0TWVzc2FnZVRlbXBsYXRlIHtcbiAgICByZXR1cm4gbmV3IENvbWV0Q2hhdE1lc3NhZ2VUZW1wbGF0ZSh7XG4gICAgICB0eXBlOiBDb21ldENoYXRVSUtpdENvbnN0YW50cy5NZXNzYWdlVHlwZXMuZ3JvdXBNZW1iZXIsXG4gICAgICBjYXRlZ29yeTogQ29tZXRDaGF0VUlLaXRDb25zdGFudHMuTWVzc2FnZUNhdGVnb3J5LmFjdGlvbixcbiAgICB9KTtcbiAgfVxuICBnZXRGaWxlTWVzc2FnZVRlbXBsYXRlKCk6IENvbWV0Q2hhdE1lc3NhZ2VUZW1wbGF0ZSB7XG4gICAgcmV0dXJuIG5ldyBDb21ldENoYXRNZXNzYWdlVGVtcGxhdGUoe1xuICAgICAgdHlwZTogQ29tZXRDaGF0VUlLaXRDb25zdGFudHMuTWVzc2FnZVR5cGVzLmZpbGUsXG4gICAgICBjYXRlZ29yeTogQ29tZXRDaGF0VUlLaXRDb25zdGFudHMuTWVzc2FnZUNhdGVnb3J5Lm1lc3NhZ2UsXG4gICAgICBvcHRpb25zOiBDaGF0Q29uZmlndXJhdG9yLmdldERhdGFTb3VyY2UoKS5nZXRNZXNzYWdlT3B0aW9ucyxcbiAgICB9KTtcbiAgfVxuICBnZXRGb3JtTWVzc2FnZVRlbXBsYXRlKCk6IENvbWV0Q2hhdE1lc3NhZ2VUZW1wbGF0ZSB7XG4gICAgcmV0dXJuIG5ldyBDb21ldENoYXRNZXNzYWdlVGVtcGxhdGUoe1xuICAgICAgdHlwZTogQ29tZXRDaGF0VUlLaXRDb25zdGFudHMuTWVzc2FnZVR5cGVzLmZvcm0sXG4gICAgICBjYXRlZ29yeTogQ29tZXRDaGF0VUlLaXRDb25zdGFudHMuTWVzc2FnZUNhdGVnb3J5LmludGVyYWN0aXZlLFxuICAgICAgb3B0aW9uczogQ2hhdENvbmZpZ3VyYXRvci5nZXREYXRhU291cmNlKCkuZ2V0TWVzc2FnZU9wdGlvbnMsXG4gICAgfSk7XG4gIH1cblxuICBnZXRDYXJkTWVzc2FnZVRlbXBsYXRlKCk6IENvbWV0Q2hhdE1lc3NhZ2VUZW1wbGF0ZSB7XG4gICAgcmV0dXJuIG5ldyBDb21ldENoYXRNZXNzYWdlVGVtcGxhdGUoe1xuICAgICAgdHlwZTogQ29tZXRDaGF0VUlLaXRDb25zdGFudHMuTWVzc2FnZVR5cGVzLmNhcmQsXG4gICAgICBjYXRlZ29yeTogQ29tZXRDaGF0VUlLaXRDb25zdGFudHMuTWVzc2FnZUNhdGVnb3J5LmludGVyYWN0aXZlLFxuICAgICAgb3B0aW9uczogQ2hhdENvbmZpZ3VyYXRvci5nZXREYXRhU291cmNlKCkuZ2V0TWVzc2FnZU9wdGlvbnMsXG4gICAgfSk7XG4gIH1cbiAgZ2V0QWxsTWVzc2FnZVRlbXBsYXRlcygpOiBBcnJheTxDb21ldENoYXRNZXNzYWdlVGVtcGxhdGU+IHtcbiAgICByZXR1cm4gW1xuICAgICAgQ2hhdENvbmZpZ3VyYXRvci5nZXREYXRhU291cmNlKCkuZ2V0VGV4dE1lc3NhZ2VUZW1wbGF0ZSgpLFxuICAgICAgQ2hhdENvbmZpZ3VyYXRvci5nZXREYXRhU291cmNlKCkuZ2V0SW1hZ2VNZXNzYWdlVGVtcGxhdGUoKSxcbiAgICAgIENoYXRDb25maWd1cmF0b3IuZ2V0RGF0YVNvdXJjZSgpLmdldFZpZGVvTWVzc2FnZVRlbXBsYXRlKCksXG4gICAgICBDaGF0Q29uZmlndXJhdG9yLmdldERhdGFTb3VyY2UoKS5nZXRBdWRpb01lc3NhZ2VUZW1wbGF0ZSgpLFxuICAgICAgQ2hhdENvbmZpZ3VyYXRvci5nZXREYXRhU291cmNlKCkuZ2V0RmlsZU1lc3NhZ2VUZW1wbGF0ZSgpLFxuICAgICAgQ2hhdENvbmZpZ3VyYXRvci5nZXREYXRhU291cmNlKCkuZ2V0R3JvdXBBY3Rpb25UZW1wbGF0ZSgpLFxuICAgICAgQ2hhdENvbmZpZ3VyYXRvci5nZXREYXRhU291cmNlKCkuZ2V0Rm9ybU1lc3NhZ2VUZW1wbGF0ZSgpLFxuICAgICAgQ2hhdENvbmZpZ3VyYXRvci5nZXREYXRhU291cmNlKCkuZ2V0Q2FyZE1lc3NhZ2VUZW1wbGF0ZSgpLFxuICAgICAgQ2hhdENvbmZpZ3VyYXRvci5nZXREYXRhU291cmNlKCkuZ2V0U2NoZWR1bGVyTWVzc2FnZVRlbXBsYXRlKCksXG4gICAgXTtcbiAgfVxuICBnZXRNZXNzYWdlVGVtcGxhdGUoXG4gICAgbWVzc2FnZVR5cGU6IHN0cmluZyxcbiAgICBtZXNzYWdlQ2F0ZWdvcnk6IHN0cmluZ1xuICApOiBDb21ldENoYXRNZXNzYWdlVGVtcGxhdGUgfCBudWxsIHtcbiAgICBsZXQgX3RlbXBsYXRlOiBDb21ldENoYXRNZXNzYWdlVGVtcGxhdGUgfCBudWxsID0gbnVsbDtcbiAgICBpZiAobWVzc2FnZUNhdGVnb3J5ICE9IENvbWV0Q2hhdFVJS2l0Q29uc3RhbnRzLk1lc3NhZ2VDYXRlZ29yeS5jYWxsKSB7XG4gICAgICBzd2l0Y2ggKG1lc3NhZ2VUeXBlKSB7XG4gICAgICAgIGNhc2UgQ29tZXRDaGF0VUlLaXRDb25zdGFudHMuTWVzc2FnZVR5cGVzLnRleHQ6XG4gICAgICAgICAgX3RlbXBsYXRlID0gQ2hhdENvbmZpZ3VyYXRvci5nZXREYXRhU291cmNlKCkuZ2V0VGV4dE1lc3NhZ2VUZW1wbGF0ZSgpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIENvbWV0Q2hhdFVJS2l0Q29uc3RhbnRzLk1lc3NhZ2VUeXBlcy5pbWFnZTpcbiAgICAgICAgICBfdGVtcGxhdGUgPVxuICAgICAgICAgICAgQ2hhdENvbmZpZ3VyYXRvci5nZXREYXRhU291cmNlKCkuZ2V0SW1hZ2VNZXNzYWdlVGVtcGxhdGUoKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBDb21ldENoYXRVSUtpdENvbnN0YW50cy5NZXNzYWdlVHlwZXMudmlkZW86XG4gICAgICAgICAgX3RlbXBsYXRlID1cbiAgICAgICAgICAgIENoYXRDb25maWd1cmF0b3IuZ2V0RGF0YVNvdXJjZSgpLmdldFZpZGVvTWVzc2FnZVRlbXBsYXRlKCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgQ29tZXRDaGF0VUlLaXRDb25zdGFudHMuTWVzc2FnZVR5cGVzLmdyb3VwTWVtYmVyOlxuICAgICAgICAgIF90ZW1wbGF0ZSA9IENoYXRDb25maWd1cmF0b3IuZ2V0RGF0YVNvdXJjZSgpLmdldEdyb3VwQWN0aW9uVGVtcGxhdGUoKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBDb21ldENoYXRVSUtpdENvbnN0YW50cy5NZXNzYWdlVHlwZXMuZmlsZTpcbiAgICAgICAgICBfdGVtcGxhdGUgPSBDaGF0Q29uZmlndXJhdG9yLmdldERhdGFTb3VyY2UoKS5nZXRGaWxlTWVzc2FnZVRlbXBsYXRlKCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgQ29tZXRDaGF0VUlLaXRDb25zdGFudHMuTWVzc2FnZVR5cGVzLmF1ZGlvOlxuICAgICAgICAgIF90ZW1wbGF0ZSA9XG4gICAgICAgICAgICBDaGF0Q29uZmlndXJhdG9yLmdldERhdGFTb3VyY2UoKS5nZXRBdWRpb01lc3NhZ2VUZW1wbGF0ZSgpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIENvbWV0Q2hhdFVJS2l0Q29uc3RhbnRzLk1lc3NhZ2VUeXBlcy5mb3JtOlxuICAgICAgICAgIF90ZW1wbGF0ZSA9IENoYXRDb25maWd1cmF0b3IuZ2V0RGF0YVNvdXJjZSgpLmdldEZvcm1NZXNzYWdlVGVtcGxhdGUoKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBDb21ldENoYXRVSUtpdENvbnN0YW50cy5NZXNzYWdlVHlwZXMuY2FyZDpcbiAgICAgICAgICBfdGVtcGxhdGUgPSBDaGF0Q29uZmlndXJhdG9yLmdldERhdGFTb3VyY2UoKS5nZXRDYXJkTWVzc2FnZVRlbXBsYXRlKCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgQ29tZXRDaGF0VUlLaXRDb25zdGFudHMuTWVzc2FnZVR5cGVzLnNjaGVkdWxlcjpcbiAgICAgICAgICBfdGVtcGxhdGUgPVxuICAgICAgICAgICAgQ2hhdENvbmZpZ3VyYXRvci5nZXREYXRhU291cmNlKCkuZ2V0U2NoZWR1bGVyTWVzc2FnZVRlbXBsYXRlKCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBfdGVtcGxhdGU7XG4gIH1cbiAgZ2V0TWVzc2FnZU9wdGlvbnMoXG4gICAgbG9nZ2VkSW5Vc2VyOiBDb21ldENoYXQuVXNlcixcbiAgICBtZXNzYWdlT2JqZWN0OiBDb21ldENoYXQuQmFzZU1lc3NhZ2UsXG4gICAgdGhlbWU6IENvbWV0Q2hhdFRoZW1lLFxuICAgIGdyb3VwPzogQ29tZXRDaGF0Lkdyb3VwXG4gICk6IEFycmF5PENvbWV0Q2hhdE1lc3NhZ2VPcHRpb24+IHtcbiAgICBsZXQgX29wdGlvbkxpc3Q6IEFycmF5PENvbWV0Q2hhdE1lc3NhZ2VPcHRpb24+ID0gW107XG4gICAgbGV0IF9pc1NlbnRCeU1lOiBib29sZWFuID0gZmFsc2U7XG4gICAgaWYgKGxvZ2dlZEluVXNlci5nZXRVaWQoKSA9PSBtZXNzYWdlT2JqZWN0LmdldFNlbmRlcigpPy5nZXRVaWQoKSkge1xuICAgICAgX2lzU2VudEJ5TWUgPSB0cnVlO1xuICAgIH1cbiAgICBpZiAoXG4gICAgICBtZXNzYWdlT2JqZWN0LmdldENhdGVnb3J5KCkgPT1cbiAgICAgIENvbWV0Q2hhdFVJS2l0Q29uc3RhbnRzLk1lc3NhZ2VDYXRlZ29yeS5tZXNzYWdlXG4gICAgKSB7XG4gICAgICBzd2l0Y2ggKG1lc3NhZ2VPYmplY3QuZ2V0VHlwZSgpKSB7XG4gICAgICAgIGNhc2UgQ29tZXRDaGF0VUlLaXRDb25zdGFudHMuTWVzc2FnZVR5cGVzLnRleHQ6XG4gICAgICAgICAgX29wdGlvbkxpc3QgPSBDaGF0Q29uZmlndXJhdG9yLmdldERhdGFTb3VyY2UoKS5nZXRUZXh0TWVzc2FnZU9wdGlvbnMoXG4gICAgICAgICAgICBsb2dnZWRJblVzZXIsXG4gICAgICAgICAgICBtZXNzYWdlT2JqZWN0LFxuICAgICAgICAgICAgdGhlbWUsXG4gICAgICAgICAgICBncm91cFxuICAgICAgICAgICk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgQ29tZXRDaGF0VUlLaXRDb25zdGFudHMuTWVzc2FnZVR5cGVzLmltYWdlOlxuICAgICAgICAgIF9vcHRpb25MaXN0ID0gQ2hhdENvbmZpZ3VyYXRvci5nZXREYXRhU291cmNlKCkuZ2V0SW1hZ2VNZXNzYWdlT3B0aW9ucyhcbiAgICAgICAgICAgIGxvZ2dlZEluVXNlcixcbiAgICAgICAgICAgIG1lc3NhZ2VPYmplY3QsXG4gICAgICAgICAgICB0aGVtZSxcbiAgICAgICAgICAgIGdyb3VwXG4gICAgICAgICAgKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBDb21ldENoYXRVSUtpdENvbnN0YW50cy5NZXNzYWdlVHlwZXMudmlkZW86XG4gICAgICAgICAgX29wdGlvbkxpc3QgPSBDaGF0Q29uZmlndXJhdG9yLmdldERhdGFTb3VyY2UoKS5nZXRWaWRlb01lc3NhZ2VPcHRpb25zKFxuICAgICAgICAgICAgbG9nZ2VkSW5Vc2VyLFxuICAgICAgICAgICAgbWVzc2FnZU9iamVjdCxcbiAgICAgICAgICAgIHRoZW1lLFxuICAgICAgICAgICAgZ3JvdXBcbiAgICAgICAgICApO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIENvbWV0Q2hhdFVJS2l0Q29uc3RhbnRzLk1lc3NhZ2VUeXBlcy5ncm91cE1lbWJlcjpcbiAgICAgICAgICBfb3B0aW9uTGlzdCA9IFtdO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIENvbWV0Q2hhdFVJS2l0Q29uc3RhbnRzLk1lc3NhZ2VUeXBlcy5maWxlOlxuICAgICAgICAgIF9vcHRpb25MaXN0ID0gQ2hhdENvbmZpZ3VyYXRvci5nZXREYXRhU291cmNlKCkuZ2V0RmlsZU1lc3NhZ2VPcHRpb25zKFxuICAgICAgICAgICAgbG9nZ2VkSW5Vc2VyLFxuICAgICAgICAgICAgbWVzc2FnZU9iamVjdCxcbiAgICAgICAgICAgIHRoZW1lLFxuICAgICAgICAgICAgZ3JvdXBcbiAgICAgICAgICApO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIENvbWV0Q2hhdFVJS2l0Q29uc3RhbnRzLk1lc3NhZ2VUeXBlcy5hdWRpbzpcbiAgICAgICAgICBfb3B0aW9uTGlzdCA9IENoYXRDb25maWd1cmF0b3IuZ2V0RGF0YVNvdXJjZSgpLmdldEF1ZGlvTWVzc2FnZU9wdGlvbnMoXG4gICAgICAgICAgICBsb2dnZWRJblVzZXIsXG4gICAgICAgICAgICBtZXNzYWdlT2JqZWN0LFxuICAgICAgICAgICAgdGhlbWUsXG4gICAgICAgICAgICBncm91cFxuICAgICAgICAgICk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChcbiAgICAgIG1lc3NhZ2VPYmplY3QuZ2V0Q2F0ZWdvcnkoKSA9PVxuICAgICAgQ29tZXRDaGF0VUlLaXRDb25zdGFudHMuTWVzc2FnZUNhdGVnb3J5LmN1c3RvbSB8fFxuICAgICAgbWVzc2FnZU9iamVjdC5nZXRDYXRlZ29yeSgpID09XG4gICAgICBDb21ldENoYXRVSUtpdENvbnN0YW50cy5NZXNzYWdlQ2F0ZWdvcnkuaW50ZXJhY3RpdmVcbiAgICApIHtcbiAgICAgIF9vcHRpb25MaXN0ID0gQ2hhdENvbmZpZ3VyYXRvci5nZXREYXRhU291cmNlKCkuZ2V0Q29tbW9uT3B0aW9ucyhcbiAgICAgICAgbG9nZ2VkSW5Vc2VyLFxuICAgICAgICBtZXNzYWdlT2JqZWN0LFxuICAgICAgICB0aGVtZSxcbiAgICAgICAgZ3JvdXBcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiBfb3B0aW9uTGlzdDtcbiAgfVxuICBnZXRDb21tb25PcHRpb25zKFxuICAgIGxvZ2dlZEluVXNlcjogQ29tZXRDaGF0LlVzZXIsXG4gICAgbWVzc2FnZU9iamVjdDogQ29tZXRDaGF0LkJhc2VNZXNzYWdlLFxuICAgIHRoZW1lOiBDb21ldENoYXRUaGVtZSxcbiAgICBncm91cD86IENvbWV0Q2hhdC5Hcm91cFxuICApOiBBcnJheTxDb21ldENoYXRNZXNzYWdlT3B0aW9uPiB7XG4gICAgbGV0IF9pc1NlbnRCeU1lOiBib29sZWFuID0gdGhpcy5pc1NlbnRCeU1lKGxvZ2dlZEluVXNlciwgbWVzc2FnZU9iamVjdCk7XG4gICAgbGV0IF9pc01vZGVyYXRvcjogYm9vbGVhbiA9IGZhbHNlO1xuICAgIGlmIChncm91cD8uZ2V0U2NvcGUoKSA9PSBDb21ldENoYXRVSUtpdENvbnN0YW50cy5ncm91cE1lbWJlclNjb3BlLm1vZGVyYXRvcilcbiAgICAgIF9pc01vZGVyYXRvciA9IHRydWU7XG4gICAgbGV0IG1lc3NhZ2VPcHRpb25MaXN0OiBBcnJheTxDb21ldENoYXRNZXNzYWdlT3B0aW9uPiA9IFtdO1xuICAgIG1lc3NhZ2VPcHRpb25MaXN0LnB1c2godGhpcy5nZXRSZWFjdGlvbk9wdGlvbih0aGVtZSkpO1xuXG4gICAgaWYgKCFtZXNzYWdlT2JqZWN0LmdldFBhcmVudE1lc3NhZ2VJZCgpKSB7XG4gICAgICBtZXNzYWdlT3B0aW9uTGlzdC5wdXNoKHRoaXMuZ2V0UmVwbHlJblRocmVhZE9wdGlvbih0aGVtZSkpO1xuICAgIH1cbiAgICBpZiAoX2lzU2VudEJ5TWUpIHtcbiAgICAgIG1lc3NhZ2VPcHRpb25MaXN0LnB1c2godGhpcy5nZXRNZXNzYWdlSW5mb09wdGlvbih0aGVtZSkpO1xuICAgIH1cbiAgICBpZiAoZ3JvdXAgJiYgIV9pc1NlbnRCeU1lKSB7XG4gICAgICBtZXNzYWdlT3B0aW9uTGlzdC5wdXNoKHRoaXMuZ2V0TWVzc2FnZVByaXZhdGVseU9wdGlvbih0aGVtZSkpO1xuICAgIH1cbiAgICBpZiAoX2lzU2VudEJ5TWUgPT0gdHJ1ZSB8fCBfaXNNb2RlcmF0b3IgPT0gdHJ1ZSlcbiAgICAgIG1lc3NhZ2VPcHRpb25MaXN0LnB1c2godGhpcy5nZXREZWxldGVPcHRpb24odGhlbWUpKTtcblxuICAgIHJldHVybiBtZXNzYWdlT3B0aW9uTGlzdDtcbiAgfVxuICBnZXRBbGxNZXNzYWdlVHlwZXMoKTogQXJyYXk8c3RyaW5nPiB7XG4gICAgcmV0dXJuIFtcbiAgICAgIENvbWV0Q2hhdFVJS2l0Q29uc3RhbnRzLk1lc3NhZ2VUeXBlcy50ZXh0LFxuICAgICAgQ29tZXRDaGF0VUlLaXRDb25zdGFudHMuTWVzc2FnZVR5cGVzLmltYWdlLFxuICAgICAgQ29tZXRDaGF0VUlLaXRDb25zdGFudHMuTWVzc2FnZVR5cGVzLmF1ZGlvLFxuICAgICAgQ29tZXRDaGF0VUlLaXRDb25zdGFudHMuTWVzc2FnZVR5cGVzLnZpZGVvLFxuICAgICAgQ29tZXRDaGF0VUlLaXRDb25zdGFudHMuTWVzc2FnZVR5cGVzLmZpbGUsXG4gICAgICBDb21ldENoYXRVSUtpdENvbnN0YW50cy5NZXNzYWdlVHlwZXMuZ3JvdXBNZW1iZXIsXG4gICAgICBDb21ldENoYXRVSUtpdENvbnN0YW50cy5NZXNzYWdlVHlwZXMuZm9ybSxcbiAgICAgIENvbWV0Q2hhdFVJS2l0Q29uc3RhbnRzLk1lc3NhZ2VUeXBlcy5jYXJkLFxuICAgICAgQ29tZXRDaGF0VUlLaXRDb25zdGFudHMuTWVzc2FnZVR5cGVzLnNjaGVkdWxlcixcbiAgICBdO1xuICB9XG4gIGFkZExpc3QoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gXCI8TWVzc2FnZSBVdGlscz5cIjtcbiAgfVxuICBnZXRBbGxNZXNzYWdlQ2F0ZWdvcmllcygpOiBBcnJheTxzdHJpbmc+IHtcbiAgICByZXR1cm4gW1xuICAgICAgQ29tZXRDaGF0VUlLaXRDb25zdGFudHMuTWVzc2FnZUNhdGVnb3J5Lm1lc3NhZ2UsXG4gICAgICBDb21ldENoYXRVSUtpdENvbnN0YW50cy5NZXNzYWdlQ2F0ZWdvcnkuYWN0aW9uLFxuICAgICAgQ29tZXRDaGF0VUlLaXRDb25zdGFudHMuTWVzc2FnZUNhdGVnb3J5LmludGVyYWN0aXZlLFxuICAgIF07XG4gIH1cbiAgZ2V0QXV4aWxpYXJ5T3B0aW9ucyhcbiAgICBpZDogQ29tcG9zZXJJZCxcbiAgICB1c2VyPzogQ29tZXRDaGF0LlVzZXIsXG4gICAgZ3JvdXA/OiBDb21ldENoYXQuR3JvdXBcbiAgKTogYW55IHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBnZXRJZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiBcIm1lc3NhZ2VVdGlsc1wiO1xuICB9XG4gIGdldEFjdGlvbk1lc3NhZ2UobWVzc2FnZTogQ29tZXRDaGF0LkFjdGlvbik6IHN0cmluZyB7XG4gICAgdHJ5IHtcbiAgICAgIGlmIChtZXNzYWdlIGluc3RhbmNlb2YgQ29tZXRDaGF0LkFjdGlvbikge1xuICAgICAgICBjb25zdCBhY3Rpb24gPSBtZXNzYWdlLmdldEFjdGlvbigpO1xuICAgICAgICBjb25zdCBhY3Rpb25CeSA9IG1lc3NhZ2UuZ2V0QWN0aW9uQnkoKTtcbiAgICAgICAgY29uc3QgYWN0aW9uT24gPSBtZXNzYWdlLmdldEFjdGlvbk9uKCk7XG5cbiAgICAgICAgY29uc3QgYnlTdHJpbmcgPSAoYWN0aW9uQnkgYXMgQ29tZXRDaGF0LlVzZXIpLmdldE5hbWUoKTtcbiAgICAgICAgY29uc3QgZm9yU3RyaW5nID1cbiAgICAgICAgICBhY3Rpb24gPT09IENvbWV0Q2hhdFVJS2l0Q29uc3RhbnRzLmdyb3VwTWVtYmVyQWN0aW9uLkpPSU5FRCB8fFxuICAgICAgICAgICAgYWN0aW9uID09PSBDb21ldENoYXRVSUtpdENvbnN0YW50cy5ncm91cE1lbWJlckFjdGlvbi5MRUZUXG4gICAgICAgICAgICA/IFwiXCJcbiAgICAgICAgICAgIDogKGFjdGlvbk9uIGFzIENvbWV0Q2hhdC5Vc2VyKS5nZXROYW1lKCk7XG5cbiAgICAgICAgc3dpdGNoIChhY3Rpb24pIHtcbiAgICAgICAgICBjYXNlIENvbWV0Q2hhdFVJS2l0Q29uc3RhbnRzLmdyb3VwTWVtYmVyQWN0aW9uLkFEREVEOlxuICAgICAgICAgICAgcmV0dXJuIGAke2J5U3RyaW5nfSAke2xvY2FsaXplKFwiQURERURcIil9ICR7Zm9yU3RyaW5nfWA7XG4gICAgICAgICAgY2FzZSBDb21ldENoYXRVSUtpdENvbnN0YW50cy5ncm91cE1lbWJlckFjdGlvbi5KT0lORUQ6XG4gICAgICAgICAgICByZXR1cm4gYCR7YnlTdHJpbmd9ICR7bG9jYWxpemUoXCJKT0lORURcIil9YDtcbiAgICAgICAgICBjYXNlIENvbWV0Q2hhdFVJS2l0Q29uc3RhbnRzLmdyb3VwTWVtYmVyQWN0aW9uLkxFRlQ6XG4gICAgICAgICAgICByZXR1cm4gYCR7YnlTdHJpbmd9ICR7bG9jYWxpemUoXCJMRUZUXCIpfWA7XG4gICAgICAgICAgY2FzZSBDb21ldENoYXRVSUtpdENvbnN0YW50cy5ncm91cE1lbWJlckFjdGlvbi5LSUNLRUQ6XG4gICAgICAgICAgICByZXR1cm4gYCR7YnlTdHJpbmd9ICR7bG9jYWxpemUoXCJLSUNLRURcIil9ICR7Zm9yU3RyaW5nfWA7XG4gICAgICAgICAgY2FzZSBDb21ldENoYXRVSUtpdENvbnN0YW50cy5ncm91cE1lbWJlckFjdGlvbi5CQU5ORUQ6XG4gICAgICAgICAgICByZXR1cm4gYCR7YnlTdHJpbmd9ICR7bG9jYWxpemUoXCJCQU5ORURcIil9ICR7Zm9yU3RyaW5nfWA7XG4gICAgICAgICAgY2FzZSBDb21ldENoYXRVSUtpdENvbnN0YW50cy5ncm91cE1lbWJlckFjdGlvbi5VTkJBTk5FRDpcbiAgICAgICAgICAgIHJldHVybiBgJHtieVN0cmluZ30gJHtsb2NhbGl6ZShcIlVOQkFOTkVEXCIpfSAke2ZvclN0cmluZ31gO1xuICAgICAgICAgIGNhc2UgQ29tZXRDaGF0VUlLaXRDb25zdGFudHMuZ3JvdXBNZW1iZXJBY3Rpb24uU0NPUEVfQ0hBTkdFOlxuICAgICAgICAgICAgcmV0dXJuIGAke2J5U3RyaW5nfSAke2xvY2FsaXplKFxuICAgICAgICAgICAgICBcIk1BREVcIlxuICAgICAgICAgICAgKX0gJHtmb3JTdHJpbmd9ICR7bWVzc2FnZS5nZXROZXdTY29wZSgpfWA7XG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHJldHVybiBcIlwiO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gXCJcIjtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXR1cm4gXCJcIjtcbiAgICB9XG4gIH1cblxuICBpbWFnZUF0dGFjaG1lbnRPcHRpb24odGhlbWU6IENvbWV0Q2hhdFRoZW1lKTogQ29tZXRDaGF0TWVzc2FnZUNvbXBvc2VyQWN0aW9uIHtcbiAgICByZXR1cm4gbmV3IENvbWV0Q2hhdE1lc3NhZ2VDb21wb3NlckFjdGlvbih7XG4gICAgICBpZDogQ29tZXRDaGF0VUlLaXRDb25zdGFudHMuTWVzc2FnZVR5cGVzLmltYWdlLFxuICAgICAgdGl0bGU6IGxvY2FsaXplKFwiQVRUQUNIX0lNQUdFXCIpLFxuICAgICAgaWNvblVSTDogXCJhc3NldHMvcGhvdG9saWJyYXJ5LnN2Z1wiLFxuICAgICAgb25DbGljazogbnVsbCxcbiAgICAgIGljb25UaW50OiB0aGVtZS5wYWxldHRlLmdldEFjY2VudDcwMCgpLFxuICAgICAgdGl0bGVGb250OiBmb250SGVscGVyKHRoZW1lLnR5cG9ncmFwaHkuc3VidGl0bGUxKSxcbiAgICAgIHRpdGxlQ29sb3I6IHRoZW1lLnBhbGV0dGUuZ2V0QWNjZW50NzAwKCksXG4gICAgICBib3JkZXJSYWRpdXM6IFwiOHB4XCIsXG4gICAgICBiYWNrZ3JvdW5kOiB0aGVtZS5wYWxldHRlLmdldEFjY2VudDEwMCgpLFxuICAgIH0pO1xuICB9XG4gIHZpZGVvQXR0YWNobWVudE9wdGlvbih0aGVtZTogQ29tZXRDaGF0VGhlbWUpOiBDb21ldENoYXRNZXNzYWdlQ29tcG9zZXJBY3Rpb24ge1xuICAgIHJldHVybiBuZXcgQ29tZXRDaGF0TWVzc2FnZUNvbXBvc2VyQWN0aW9uKHtcbiAgICAgIGlkOiBDb21ldENoYXRVSUtpdENvbnN0YW50cy5NZXNzYWdlVHlwZXMudmlkZW8sXG4gICAgICB0aXRsZTogbG9jYWxpemUoXCJBVFRBQ0hfVklERU9cIiksXG4gICAgICBpY29uVVJMOiBcImFzc2V0cy92aWRlby5zdmdcIixcbiAgICAgIG9uQ2xpY2s6IG51bGwsXG4gICAgICBpY29uVGludDogdGhlbWUucGFsZXR0ZS5nZXRBY2NlbnQ3MDAoKSxcbiAgICAgIHRpdGxlRm9udDogZm9udEhlbHBlcih0aGVtZS50eXBvZ3JhcGh5LnN1YnRpdGxlMSksXG4gICAgICB0aXRsZUNvbG9yOiB0aGVtZS5wYWxldHRlLmdldEFjY2VudDcwMCgpLFxuICAgICAgYm9yZGVyUmFkaXVzOiBcIjhweFwiLFxuICAgICAgYmFja2dyb3VuZDogdGhlbWUucGFsZXR0ZS5nZXRBY2NlbnQxMDAoKSxcbiAgICB9KTtcbiAgfVxuICBhdWRpb0F0dGFjaG1lbnRPcHRpb24odGhlbWU6IENvbWV0Q2hhdFRoZW1lKTogQ29tZXRDaGF0TWVzc2FnZUNvbXBvc2VyQWN0aW9uIHtcbiAgICByZXR1cm4gbmV3IENvbWV0Q2hhdE1lc3NhZ2VDb21wb3NlckFjdGlvbih7XG4gICAgICBpZDogQ29tZXRDaGF0VUlLaXRDb25zdGFudHMuTWVzc2FnZVR5cGVzLmF1ZGlvLFxuICAgICAgdGl0bGU6IGxvY2FsaXplKFwiQVRUQUNIX0FVRElPXCIpLFxuICAgICAgaWNvblVSTDogXCJhc3NldHMvYXVkaW8tZmlsZS5zdmdcIixcbiAgICAgIG9uQ2xpY2s6IG51bGwsXG4gICAgICBpY29uVGludDogdGhlbWUucGFsZXR0ZS5nZXRBY2NlbnQ3MDAoKSxcbiAgICAgIHRpdGxlRm9udDogZm9udEhlbHBlcih0aGVtZS50eXBvZ3JhcGh5LnN1YnRpdGxlMSksXG4gICAgICB0aXRsZUNvbG9yOiB0aGVtZS5wYWxldHRlLmdldEFjY2VudDcwMCgpLFxuICAgICAgYm9yZGVyUmFkaXVzOiBcIjhweFwiLFxuICAgICAgYmFja2dyb3VuZDogdGhlbWUucGFsZXR0ZS5nZXRBY2NlbnQxMDAoKSxcbiAgICB9KTtcbiAgfVxuICBmaWxlQXR0YWNobWVudE9wdGlvbih0aGVtZTogQ29tZXRDaGF0VGhlbWUpOiBDb21ldENoYXRNZXNzYWdlQ29tcG9zZXJBY3Rpb24ge1xuICAgIHJldHVybiBuZXcgQ29tZXRDaGF0TWVzc2FnZUNvbXBvc2VyQWN0aW9uKHtcbiAgICAgIGlkOiBDb21ldENoYXRVSUtpdENvbnN0YW50cy5NZXNzYWdlVHlwZXMuZmlsZSxcbiAgICAgIHRpdGxlOiBsb2NhbGl6ZShcIkFUVEFDSF9GSUxFXCIpLFxuICAgICAgaWNvblVSTDogXCJhc3NldHMvYXR0YWNobWVudC1maWxlLnN2Z1wiLFxuICAgICAgb25DbGljazogbnVsbCxcbiAgICAgIGljb25UaW50OiB0aGVtZS5wYWxldHRlLmdldEFjY2VudDcwMCgpLFxuICAgICAgdGl0bGVGb250OiBmb250SGVscGVyKHRoZW1lLnR5cG9ncmFwaHkuc3VidGl0bGUxKSxcbiAgICAgIHRpdGxlQ29sb3I6IHRoZW1lLnBhbGV0dGUuZ2V0QWNjZW50NzAwKCksXG4gICAgICBib3JkZXJSYWRpdXM6IFwiOHB4XCIsXG4gICAgICBiYWNrZ3JvdW5kOiB0aGVtZS5wYWxldHRlLmdldEFjY2VudDEwMCgpLFxuICAgIH0pO1xuICB9XG4gIGdldEF0dGFjaG1lbnRPcHRpb25zKFxuICAgIHRoZW1lOiBDb21ldENoYXRUaGVtZSxcbiAgICB1c2VyPzogQ29tZXRDaGF0LlVzZXIsXG4gICAgZ3JvdXA/OiBDb21ldENoYXQuR3JvdXAsXG4gICAgaWQ/OiBDb21wb3NlcklkXG4gICk6IENvbWV0Q2hhdE1lc3NhZ2VDb21wb3NlckFjdGlvbltdIHtcbiAgICBsZXQgYWN0aW9uczogQXJyYXk8Q29tZXRDaGF0TWVzc2FnZUNvbXBvc2VyQWN0aW9uPiA9IFtcbiAgICAgIHRoaXMuaW1hZ2VBdHRhY2htZW50T3B0aW9uKHRoZW1lKSxcbiAgICAgIHRoaXMudmlkZW9BdHRhY2htZW50T3B0aW9uKHRoZW1lKSxcbiAgICAgIHRoaXMuYXVkaW9BdHRhY2htZW50T3B0aW9uKHRoZW1lKSxcbiAgICAgIHRoaXMuZmlsZUF0dGFjaG1lbnRPcHRpb24odGhlbWUpLFxuICAgIF07XG4gICAgcmV0dXJuIGFjdGlvbnM7XG4gIH1cblxuICBnZXRMYXN0Q29udmVyc2F0aW9uTWVzc2FnZShcbiAgICBjb252ZXJzYXRpb246IENvbWV0Q2hhdC5Db252ZXJzYXRpb24sXG4gICAgbG9nZ2VkSW5Vc2VyOiBDb21ldENoYXQuVXNlcixcbiAgICBhZGRpdGlvbmFsQ29uZmlndXJhdGlvbnM6IGFueVxuICApOiBzdHJpbmcge1xuICAgIGxldCBtZXNzYWdlID0gQ29udmVyc2F0aW9uVXRpbHMuZ2V0TGFzdENvbnZlcnNhdGlvbk1lc3NhZ2UoXG4gICAgICBjb252ZXJzYXRpb24sXG4gICAgICBsb2dnZWRJblVzZXJcbiAgICApO1xuICAgIGxldCBtZXNzYWdlT2JqZWN0ID0gY29udmVyc2F0aW9uLmdldExhc3RNZXNzYWdlKCk7XG5cbiAgICBsZXQgY29uZmlnID0ge1xuICAgICAgLi4uYWRkaXRpb25hbENvbmZpZ3VyYXRpb25zLFxuICAgICAgdGV4dEZvcm1hdHRlcnM6XG4gICAgICAgIGFkZGl0aW9uYWxDb25maWd1cmF0aW9ucz8udGV4dEZvcm1hdHRlcnMgJiZcbiAgICAgICAgYWRkaXRpb25hbENvbmZpZ3VyYXRpb25zPy50ZXh0Rm9ybWF0dGVycy5sZW5ndGhcbiAgICAgICAgICA/IFsuLi5hZGRpdGlvbmFsQ29uZmlndXJhdGlvbnMudGV4dEZvcm1hdHRlcnNdXG4gICAgICAgICAgOiBbdGhpcy5nZXRNZW50aW9uc1RleHRGb3JtYXR0ZXIoeyB0aGVtZTogYWRkaXRpb25hbENvbmZpZ3VyYXRpb25zLnRoZW1lLCBkaXNhYmxlTWVudGlvbnM6IGFkZGl0aW9uYWxDb25maWd1cmF0aW9ucy5kaXNhYmxlTWVudGlvbnMgfSldLFxuICAgIH07XG5cbiAgICBsZXQgdGV4dEZvcm1hdHRlcnM6IEFycmF5PENvbWV0Q2hhdFRleHRGb3JtYXR0ZXI+ID0gY29uZmlnLnRleHRGb3JtYXR0ZXJzO1xuICAgIGlmIChjb25maWcgJiYgIWNvbmZpZy5kaXNhYmxlTWVudGlvbnMpIHtcbiAgICAgIGxldCBtZW50aW9uc1RleHRGb3JtYXR0ZXIhOiBDb21ldENoYXRNZW50aW9uc1RleHRGb3JtYXR0ZXI7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRleHRGb3JtYXR0ZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmICh0ZXh0Rm9ybWF0dGVyc1tpXSBpbnN0YW5jZW9mIENvbWV0Q2hhdE1lbnRpb25zVGV4dEZvcm1hdHRlcikge1xuICAgICAgICAgIG1lbnRpb25zVGV4dEZvcm1hdHRlciA9IHRleHRGb3JtYXR0ZXJzW1xuICAgICAgICAgICAgaVxuICAgICAgICAgIF0gYXMgQ29tZXRDaGF0TWVudGlvbnNUZXh0Rm9ybWF0dGVyO1xuICAgICAgICAgIG1lbnRpb25zVGV4dEZvcm1hdHRlci5zZXRNZXNzYWdlKG1lc3NhZ2VPYmplY3QpO1xuICAgICAgICAgIGlmIChtZXNzYWdlT2JqZWN0LmdldE1lbnRpb25lZFVzZXJzKCkubGVuZ3RoKSB7XG4gICAgICAgICAgICBtZW50aW9uc1RleHRGb3JtYXR0ZXIuc2V0Q29tZXRDaGF0VXNlckdyb3VwTWVtYmVycyhcbiAgICAgICAgICAgICAgbWVzc2FnZU9iamVjdC5nZXRNZW50aW9uZWRVc2VycygpXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgICBtZW50aW9uc1RleHRGb3JtYXR0ZXIuc2V0TG9nZ2VkSW5Vc2VyKFxuICAgICAgICAgICAgQ29tZXRDaGF0VUlLaXRMb2dpbkxpc3RlbmVyLmdldExvZ2dlZEluVXNlcigpIVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgaWYobWVudGlvbnNUZXh0Rm9ybWF0dGVyKSB7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICghbWVudGlvbnNUZXh0Rm9ybWF0dGVyKSB7XG4gICAgICAgIG1lbnRpb25zVGV4dEZvcm1hdHRlciA9XG4gICAgICAgICAgQ2hhdENvbmZpZ3VyYXRvci5nZXREYXRhU291cmNlKCkuZ2V0TWVudGlvbnNUZXh0Rm9ybWF0dGVyKHtcbiAgICAgICAgICAgIG1lc3NhZ2VPYmplY3QsXG4gICAgICAgICAgICAuLi5jb25maWcsXG4gICAgICAgICAgICBhbGlnbm1lbnQ6IG51bGwsXG4gICAgICAgICAgICB0aGVtZTogYWRkaXRpb25hbENvbmZpZ3VyYXRpb25zLnRoZW1lLFxuICAgICAgICAgIH0pO1xuICAgICAgICB0ZXh0Rm9ybWF0dGVycy5wdXNoKG1lbnRpb25zVGV4dEZvcm1hdHRlcik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgbWVzc2FnZU9iamVjdCAmJlxuICAgICAgbWVzc2FnZU9iamVjdCBpbnN0YW5jZW9mIENvbWV0Q2hhdC5UZXh0TWVzc2FnZVxuICAgICkge1xuICAgICAgZm9yKGxldCBpID0wOyBpIDwgdGV4dEZvcm1hdHRlcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgbWVzc2FnZSA9IHRleHRGb3JtYXR0ZXJzW2ldLmdldEZvcm1hdHRlZFRleHQobWVzc2FnZSwge21lbnRpb25zVGFyZ2V0RWxlbWVudDogTWVudGlvbnNUYXJnZXRFbGVtZW50LmNvbnZlcnNhdGlvbn0pO1xuICAgICAgfVxuICAgIH1cblxuXG4gICAgcmV0dXJuIG1lc3NhZ2U7XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBzdHlsZWQgQCBmb3IgZXZlcnkgbWVudGlvbiBpbiB0aGUgdGV4dCBieSBtYXRjaGluZyB1aWRcbiAgICpcbiAgICogQHBhcmFtIHtDb21ldENoYXQuVGV4dE1lc3NhZ2V9IG1lc3NhZ2VcbiAgICogQHBhcmFtIHtzdHJpbmd9IHN1YnRpdGxlXG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKi9cbiAgZ2V0TWVudGlvbnNGb3JtYXR0ZWRUZXh0KFxuICAgIG1lc3NhZ2U6IENvbWV0Q2hhdC5UZXh0TWVzc2FnZSxcbiAgICBzdWJ0aXRsZTogc3RyaW5nLFxuICAgIG1lbnRpb25zRm9ybWF0dGVyUGFyYW1zOiB7XG4gICAgICBtZW50aW9uc1RhcmdldEVsZW1lbnQ6IE1lbnRpb25zVGFyZ2V0RWxlbWVudDtcbiAgICAgIHRoZW1lOiBDb21ldENoYXRUaGVtZTtcbiAgICB9XG4gICkge1xuICAgIGNvbnN0IHJlZ2V4ID0gLzxAdWlkOiguKj8pPi9nO1xuICAgIGxldCBtZXNzYWdlVGV4dCA9IG1lc3NhZ2UuZ2V0VGV4dCgpO1xuICAgIGxldCBtZXNzYWdlVGV4dFRtcDogc3RyaW5nID0gc3VidGl0bGU7XG4gICAgbGV0IG1hdGNoID0gcmVnZXguZXhlYyhtZXNzYWdlVGV4dCk7XG4gICAgbGV0IGNvbWV0Q2hhdFVzZXJzOiBBcnJheTxDb21ldENoYXQuVXNlciB8IENvbWV0Q2hhdC5Hcm91cE1lbWJlcj4gPSBbXTtcbiAgICBsZXQgbWVudGlvbmVkVXNlcnMgPSBtZXNzYWdlLmdldE1lbnRpb25lZFVzZXJzKCk7XG4gICAgd2hpbGUgKG1hdGNoICE9PSBudWxsKSB7XG4gICAgICBsZXQgdXNlcjtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbWVudGlvbmVkVXNlcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKG1hdGNoWzFdID09IG1lbnRpb25lZFVzZXJzW2ldLmdldFVpZCgpKSB7XG4gICAgICAgICAgdXNlciA9IG1lbnRpb25lZFVzZXJzW2ldO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAodXNlcikge1xuICAgICAgICBjb21ldENoYXRVc2Vycy5wdXNoKHVzZXIpO1xuICAgICAgfVxuICAgICAgbWF0Y2ggPSByZWdleC5leGVjKG1lc3NhZ2VUZXh0KTtcbiAgICB9XG4gICAgbGV0IG1lbnRpb25zRm9ybWF0dGVyID0gdGhpcy5nZXRNZW50aW9uc1RleHRGb3JtYXR0ZXIoXG4gICAgICBtZW50aW9uc0Zvcm1hdHRlclBhcmFtc1xuICAgICk7XG4gICAgbWVudGlvbnNGb3JtYXR0ZXIuc2V0Q2xhc3NlcyhbXCJjYy1tZW50aW9uc1wiXSk7XG4gICAgbWVudGlvbnNGb3JtYXR0ZXIuc2V0Q29tZXRDaGF0VXNlckdyb3VwTWVtYmVycyhjb21ldENoYXRVc2Vycyk7XG4gICAgbWVzc2FnZVRleHRUbXAgPSBtZW50aW9uc0Zvcm1hdHRlci5nZXRGb3JtYXR0ZWRUZXh0KFxuICAgICAgbWVzc2FnZVRleHRUbXAsXG4gICAgICBtZW50aW9uc0Zvcm1hdHRlclBhcmFtc1xuICAgICkgYXMgc3RyaW5nO1xuICAgIHJldHVybiBtZXNzYWdlVGV4dFRtcDtcbiAgfVxuXG4gIGdldEFJT3B0aW9ucyhcbiAgICB0aGVtZTogQ29tZXRDaGF0VGhlbWUsXG4gICAgaWQ/OiBNYXA8U3RyaW5nLCBhbnk+XG4gICk6IEFycmF5PENvbWV0Q2hhdE1lc3NhZ2VDb21wb3NlckFjdGlvbiB8IENvbWV0Q2hhdEFjdGlvbnNWaWV3PiB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgZ2V0QWxsVGV4dEZvcm1hdHRlcnMoZm9ybWF0dGVyUGFyYW1zOiBhbnkpOiBDb21ldENoYXRUZXh0Rm9ybWF0dGVyW10ge1xuICAgIGxldCBmb3JtYXR0ZXJzID0gW107XG4gICAgY29uc3QgbWVudGlvbnNGb3JtYXR0ZXIgPSAgZm9ybWF0dGVyUGFyYW1zLmRpc2FibGVNZW50aW9ucyA/IG51bGwgOiBDaGF0Q29uZmlndXJhdG9yLmdldERhdGFTb3VyY2UoKS5nZXRNZW50aW9uc1RleHRGb3JtYXR0ZXIoXG4gICAgICBmb3JtYXR0ZXJQYXJhbXNcbiAgICApO1xuICAgIGNvbnN0IHVybFRleHRGb3JtYXR0ZXIgPSAgQ2hhdENvbmZpZ3VyYXRvci5nZXREYXRhU291cmNlKCkuZ2V0VXJsVGV4dEZvcm1hdHRlcihmb3JtYXR0ZXJQYXJhbXMpO1xuICAgIGlmKG1lbnRpb25zRm9ybWF0dGVyKSB7XG4gICAgICBmb3JtYXR0ZXJzLnB1c2gobWVudGlvbnNGb3JtYXR0ZXIpO1xuICAgIH1cbiAgICBpZih1cmxUZXh0Rm9ybWF0dGVyKSB7XG4gICAgICBmb3JtYXR0ZXJzLnB1c2godXJsVGV4dEZvcm1hdHRlcik7XG4gICAgfVxuICAgIHJldHVybiBmb3JtYXR0ZXJzO1xuICB9XG5cbiAgZ2V0TWVudGlvbnNUZXh0Rm9ybWF0dGVyKHBhcmFtczogYW55KTogQ29tZXRDaGF0TWVudGlvbnNUZXh0Rm9ybWF0dGVyIHtcbiAgICBsZXQgbWVudGlvbnNUZXh0Rm9ybWF0dGVyID0gbmV3IENvbWV0Q2hhdE1lbnRpb25zVGV4dEZvcm1hdHRlcigpO1xuICAgIGlmIChwYXJhbXMgJiYgcGFyYW1zLnRoZW1lKSB7XG4gICAgICBtZW50aW9uc1RleHRGb3JtYXR0ZXIuc2V0Q29tcG9zZXJNZW50aW9uU3R5bGUoXG4gICAgICAgIG5ldyBVc2VyTWVudGlvblN0eWxlKHtcbiAgICAgICAgICBsb2dnZWRJblVzZXJUZXh0Rm9udDogZm9udEhlbHBlcihwYXJhbXMudGhlbWUudHlwb2dyYXBoeS50ZXh0MiksXG4gICAgICAgICAgbG9nZ2VkSW5Vc2VyVGV4dENvbG9yOiBwYXJhbXMudGhlbWUucGFsZXR0ZS5nZXRQcmltYXJ5KCksXG4gICAgICAgICAgbG9nZ2VkSW5Vc2VyVGV4dEJhY2tncm91bmQ6IFwiXCIsXG4gICAgICAgICAgbWVudGlvblRleHRGb250OiBmb250SGVscGVyKHBhcmFtcy50aGVtZS50eXBvZ3JhcGh5LnRleHQyKSxcbiAgICAgICAgICBtZW50aW9uVGV4dENvbG9yOiBwYXJhbXMudGhlbWUucGFsZXR0ZS5nZXRQcmltYXJ5KCksXG4gICAgICAgICAgbWVudGlvblRleHRCYWNrZ3JvdW5kOiBcIlwiLFxuICAgICAgICB9KVxuICAgICAgKTtcbiAgICAgIG1lbnRpb25zVGV4dEZvcm1hdHRlci5zZXRDb252ZXJzYXRpb25NZW50aW9uU3R5bGUoXG4gICAgICAgIG5ldyBVc2VyTWVudGlvblN0eWxlKHtcbiAgICAgICAgICBsb2dnZWRJblVzZXJUZXh0Rm9udDogZm9udEhlbHBlcihwYXJhbXMudGhlbWUudHlwb2dyYXBoeS50ZXh0MyksXG4gICAgICAgICAgbG9nZ2VkSW5Vc2VyVGV4dENvbG9yOiBwYXJhbXMudGhlbWUucGFsZXR0ZS5nZXRQcmltYXJ5KCksXG4gICAgICAgICAgbG9nZ2VkSW5Vc2VyVGV4dEJhY2tncm91bmQ6IFwiXCIsXG4gICAgICAgICAgbWVudGlvblRleHRGb250OiBmb250SGVscGVyKHBhcmFtcy50aGVtZS50eXBvZ3JhcGh5LnRleHQzKSxcbiAgICAgICAgICBtZW50aW9uVGV4dENvbG9yOiBwYXJhbXMudGhlbWUucGFsZXR0ZS5nZXRQcmltYXJ5KCksXG4gICAgICAgICAgbWVudGlvblRleHRCYWNrZ3JvdW5kOiBcIlwiLFxuICAgICAgICB9KVxuICAgICAgKTtcbiAgICAgIG1lbnRpb25zVGV4dEZvcm1hdHRlci5zZXRSaWdodEJ1YmJsZU1lbnRpb25TdHlsZShcbiAgICAgICAgbmV3IFVzZXJNZW50aW9uU3R5bGUoe1xuICAgICAgICAgIGxvZ2dlZEluVXNlclRleHRGb250OiBmb250SGVscGVyKHBhcmFtcy50aGVtZS50eXBvZ3JhcGh5LnRleHQzKSxcbiAgICAgICAgICBsb2dnZWRJblVzZXJUZXh0Q29sb3I6IHBhcmFtcy50aGVtZS5wYWxldHRlLmdldFRlcnRpYXJ5KCksXG4gICAgICAgICAgbG9nZ2VkSW5Vc2VyVGV4dEJhY2tncm91bmQ6IFwiXCIsXG4gICAgICAgICAgbWVudGlvblRleHRGb250OiBmb250SGVscGVyKHBhcmFtcy50aGVtZS50eXBvZ3JhcGh5LnRleHQzKSxcbiAgICAgICAgICBtZW50aW9uVGV4dENvbG9yOiBwYXJhbXMudGhlbWUucGFsZXR0ZS5nZXRUZXJ0aWFyeSgpLFxuICAgICAgICAgIG1lbnRpb25UZXh0QmFja2dyb3VuZDogXCJcIixcbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgICBtZW50aW9uc1RleHRGb3JtYXR0ZXIuc2V0TGVmdEJ1YmJsZU1lbnRpb25TdHlsZShcbiAgICAgICAgbmV3IFVzZXJNZW50aW9uU3R5bGUoe1xuICAgICAgICAgIGxvZ2dlZEluVXNlclRleHRGb250OiBmb250SGVscGVyKHBhcmFtcy50aGVtZS50eXBvZ3JhcGh5LnRleHQzKSxcbiAgICAgICAgICBsb2dnZWRJblVzZXJUZXh0Q29sb3I6IHBhcmFtcy50aGVtZS5wYWxldHRlLmdldFByaW1hcnkoKSxcbiAgICAgICAgICBsb2dnZWRJblVzZXJUZXh0QmFja2dyb3VuZDogXCJcIixcbiAgICAgICAgICBtZW50aW9uVGV4dEZvbnQ6IGZvbnRIZWxwZXIocGFyYW1zLnRoZW1lLnR5cG9ncmFwaHkudGV4dDMpLFxuICAgICAgICAgIG1lbnRpb25UZXh0Q29sb3I6IHBhcmFtcy50aGVtZS5wYWxldHRlLmdldFByaW1hcnkoKSxcbiAgICAgICAgICBtZW50aW9uVGV4dEJhY2tncm91bmQ6IFwiXCIsXG4gICAgICAgIH0pXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gbWVudGlvbnNUZXh0Rm9ybWF0dGVyO1xuICB9XG5cbiAgZ2V0VXJsVGV4dEZvcm1hdHRlcihwYXJhbXM6IGFueSA9IHt9KTogQ29tZXRDaGF0VXJsVGV4dEZvcm1hdHRlciB7XG4gICAgbGV0IHVybFRleHRGb3JtYXR0ZXIgPSBuZXcgQ29tZXRDaGF0VXJsVGV4dEZvcm1hdHRlcihbXG4gICAgICAvKGh0dHBzPzpcXC9cXC9bXlxcc10rKS9nLFxuICAgIF0pO1xuICAgIGlmIChwYXJhbXMuYWxpZ25tZW50ID09IE1lc3NhZ2VCdWJibGVBbGlnbm1lbnQubGVmdCkge1xuICAgICAgdXJsVGV4dEZvcm1hdHRlci5zZXRTdHlsZSh7XG4gICAgICAgIGZvcm1hdHRlZFRleHRDb2xvcjogcGFyYW1zLnRoZW1lLnBhbGV0dGUuZ2V0UHJpbWFyeSgpLFxuICAgICAgICBmb3JtYXR0ZWRUZXh0Rm9udDogZm9udEhlbHBlcihwYXJhbXMudGhlbWUudHlwb2dyYXBoeS50ZXh0MyksXG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdXJsVGV4dEZvcm1hdHRlci5zZXRTdHlsZSh7XG4gICAgICAgIGZvcm1hdHRlZFRleHRDb2xvcjogcGFyYW1zLnRoZW1lLnBhbGV0dGUuZ2V0VGVydGlhcnkoKSxcbiAgICAgICAgZm9ybWF0dGVkVGV4dEZvbnQ6IGZvbnRIZWxwZXIocGFyYW1zLnRoZW1lLnR5cG9ncmFwaHkudGV4dDMpLFxuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiB1cmxUZXh0Rm9ybWF0dGVyO1xuICB9XG59XG5leHBvcnQgdHlwZSBDb21wb3NlcklkID0ge1xuICBwYXJlbnRNZXNzYWdlSWQ6IG51bWJlciB8IG51bGw7XG4gIHVzZXI6IHN0cmluZyB8IG51bGw7XG4gIGdyb3VwOiBzdHJpbmcgfCBudWxsO1xufTtcbiJdfQ==
|