@cometchat/chat-uikit-angular 4.0.0-beta.1.4 → 4.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/Calls/CallingExtension.d.ts +4 -3
- package/Calls/CallingExtensionDecorator.d.ts +0 -1
- package/Calls/CometChatCallButtons/cometchat-call-buttons/cometchat-call-buttons.component.d.ts +4 -3
- package/Calls/CometChatIncomingCall/cometchat-incoming-call/cometchat-incoming-call.component.d.ts +4 -3
- package/Calls/CometChatOngoingCall/cometchat-ongoing-call/cometchat-ongoing-call.component.d.ts +14 -6
- package/Calls/CometChatOutgoingCall/cometchat-outgoing-call/cometchat-outgoing-call.component.d.ts +0 -1
- package/CometChatAddMembers/cometchat-add-members/cometchat-add-members.component.d.ts +5 -5
- package/CometChatBannedMembers/cometchat-banned-members/cometchat-banned-members.component.d.ts +6 -5
- package/CometChatContacts/cometchat-contacts/cometchat-contacts.component.d.ts +65 -0
- package/CometChatContacts/cometchat-contacts.module.d.ts +12 -0
- package/CometChatConversations/cometchat-conversations/cometchat-conversations.component.d.ts +21 -15
- package/CometChatConversationsWithMessages/cometchat-conversations-with-messages/cometchat-conversations-with-messages.component.d.ts +13 -4
- package/CometChatConversationsWithMessages/cometchat-conversations-with-messages.module.d.ts +2 -1
- package/CometChatDetails/cometchat-details/cometchat-details.component.d.ts +7 -7
- package/CometChatGroupMembers/cometchat-group-members/cometchat-group-members.component.d.ts +14 -12
- package/CometChatGroups/cometchat-groups/cometchat-groups.component.d.ts +12 -6
- package/CometChatGroupsWithMessages/cometchat-groups-with-messages/cometchat-groups-with-messages.component.d.ts +6 -4
- package/CometChatList/cometchat-list.component.d.ts +2 -1
- package/CometChatMessageBubble/cometchat-message-bubble/cometchat-message-bubble.component.d.ts +2 -2
- package/CometChatMessageComposer/cometchat-message-composer/cometchat-message-composer.component.d.ts +23 -6
- package/CometChatMessageHeader/cometchat-message-header/cometchat-message-header.component.d.ts +1 -1
- package/CometChatMessageInformation/cometchat-message-information/cometchat-message-information.component.d.ts +95 -0
- package/CometChatMessageInformation/cometchat-message-information.module.d.ts +10 -0
- package/CometChatMessageList/cometchat-message-list/cometchat-message-list.component.d.ts +45 -26
- package/CometChatMessageList/cometchat-message-list.module.d.ts +3 -1
- package/CometChatMessages/cometchat-messages/cometchat-messages.component.d.ts +5 -3
- package/CometChatThreadedMessages/cometchat-threaded-messages/cometchat-threaded-messages.component.d.ts +0 -1
- package/CometChatTransferOwnership/cometchat-transfer-ownership/cometchat-transfer-ownership.component.d.ts +3 -3
- package/CometChatUsers/cometchat-users/cometchat-users.component.d.ts +11 -5
- package/CometChatUsersWithMessages/cometchat-users-with-messages/cometchat-users-with-messages.component.d.ts +2 -2
- package/Extensions/CollaborativeDocument/CollaborativeDocumentExtension.d.ts +4 -8
- package/Extensions/CollaborativeDocument/CollaborativeDocumentExtensionDecorator.d.ts +1 -4
- package/Extensions/CollaborativeWhiteboard/CollaborativeWhiteboardExtension.d.ts +4 -8
- package/Extensions/CollaborativeWhiteboard/CollaborativeWhiteboardExtensionDecorator.d.ts +1 -4
- package/Extensions/ImageModeration/ImageModerationExtension.d.ts +4 -4
- package/Extensions/LinkPreviewExtension/LinkPreviewExtension.d.ts +4 -4
- package/Extensions/MessageTranslation/MessageTranslationExtension.d.ts +4 -8
- package/Extensions/MessageTranslation/MessageTranslationExtensionDecorator.d.ts +1 -4
- package/Extensions/PollsExtension/PollsExtension.d.ts +4 -4
- package/Extensions/PollsExtension/PollsExtensionDecorator.d.ts +0 -1
- package/Extensions/Reactions/ReactionExtension.d.ts +4 -4
- package/Extensions/Reactions/ReactionExtensionDecorator.d.ts +0 -1
- package/Extensions/SmartReplies/SmartRepliesExtension.d.ts +4 -8
- package/Extensions/SmartReplies/SmartRepliesExtensionDecorator.d.ts +2 -2
- package/Extensions/Stickers/StickersExtension.d.ts +4 -8
- package/Extensions/Stickers/StickersExtensionDecorator.d.ts +2 -2
- package/Extensions/TextModerator/TextModeratorExtension.d.ts +4 -3
- package/Extensions/TextModerator/TextModeratorExtensionDecorator.d.ts +0 -1
- package/Extensions/ThumbnailGeneration/ThumbnailGenerationExtension.d.ts +4 -4
- package/README.md +4 -7
- package/Shared/CometChatUIkit/CometChatUIKit.d.ts +10 -6
- package/Shared/Framework/DataSource.d.ts +0 -1
- package/Shared/Framework/DataSourceDecorator.d.ts +0 -1
- package/Shared/Utils/ComeChatException.d.ts +1 -2
- package/Shared/Utils/MessageUtils.d.ts +2 -1
- package/Shared/Views/CometChatTabs/cometchat-tabs/cometchat-tabs.component.d.ts +38 -9
- package/Shared/Views/CometChatTabs/cometchat-tabs.module.d.ts +1 -5
- package/assets/.gitkeep +0 -0
- package/assets/Reply@2x.svg +9 -0
- package/assets/call.svg +0 -0
- package/assets/chats.svg +0 -0
- package/assets/group.svg +0 -0
- package/assets/message-privately.svg +6 -0
- package/assets/mic.svg +11 -0
- package/assets/new-chat.svg +13 -0
- package/assets/open-thread.svg +0 -0
- package/assets/pause-icon.svg +14 -0
- package/assets/play-icon.svg +18 -0
- package/assets/record-icon.svg +8 -0
- package/assets/start-conversation.svg +46 -0
- package/assets/stop.svg +1 -0
- package/assets/user.svg +0 -0
- package/esm2020/Calls/CallingExtension.mjs +7 -4
- package/esm2020/Calls/CallingExtensionDecorator.mjs +4 -4
- package/esm2020/Calls/CometChatCallButtons/cometchat-call-buttons/cometchat-call-buttons.component.mjs +58 -21
- package/esm2020/Calls/CometChatIncomingCall/cometchat-incoming-call/cometchat-incoming-call.component.mjs +48 -17
- package/esm2020/Calls/CometChatOngoingCall/cometchat-ongoing-call/cometchat-ongoing-call.component.mjs +110 -9
- package/esm2020/Calls/CometChatOutgoingCall/cometchat-outgoing-call/cometchat-outgoing-call.component.mjs +9 -7
- package/esm2020/CometChatAddMembers/cometchat-add-members/cometchat-add-members.component.mjs +9 -6
- package/esm2020/CometChatBannedMembers/cometchat-banned-members/cometchat-banned-members.component.mjs +12 -7
- package/esm2020/CometChatContacts/cometchat-contacts/cometchat-contacts.component.mjs +273 -0
- package/esm2020/CometChatContacts/cometchat-contacts.module.mjs +23 -0
- package/esm2020/CometChatConversations/cometchat-conversations/cometchat-conversations.component.mjs +122 -65
- package/esm2020/CometChatConversationsWithMessages/cometchat-conversations-with-messages/cometchat-conversations-with-messages.component.mjs +105 -17
- package/esm2020/CometChatConversationsWithMessages/cometchat-conversations-with-messages.module.mjs +6 -2
- package/esm2020/CometChatDetails/cometchat-details/cometchat-details.component.mjs +13 -11
- package/esm2020/CometChatGroupMembers/cometchat-group-members/cometchat-group-members.component.mjs +45 -46
- package/esm2020/CometChatGroups/cometchat-groups/cometchat-groups.component.mjs +69 -28
- package/esm2020/CometChatGroupsWithMessages/cometchat-groups-with-messages/cometchat-groups-with-messages.component.mjs +60 -21
- package/esm2020/CometChatList/cometchat-list.component.mjs +8 -9
- package/esm2020/CometChatMessageBubble/cometchat-message-bubble/cometchat-message-bubble.component.mjs +4 -5
- package/esm2020/CometChatMessageComposer/cometchat-message-composer/cometchat-message-composer.component.mjs +200 -30
- package/esm2020/CometChatMessageHeader/cometchat-message-header/cometchat-message-header.component.mjs +4 -5
- package/esm2020/CometChatMessageInformation/cometchat-message-information/cometchat-message-information.component.mjs +288 -0
- package/esm2020/CometChatMessageInformation/cometchat-message-information.module.mjs +28 -0
- package/esm2020/CometChatMessageList/cometchat-message-list/cometchat-message-list.component.mjs +401 -185
- package/esm2020/CometChatMessageList/cometchat-message-list.module.mjs +12 -4
- package/esm2020/CometChatMessages/cometchat-messages/cometchat-messages.component.mjs +28 -15
- package/esm2020/CometChatThreadedMessages/cometchat-threaded-messages/cometchat-threaded-messages.component.mjs +3 -4
- package/esm2020/CometChatTransferOwnership/cometchat-transfer-ownership/cometchat-transfer-ownership.component.mjs +14 -15
- package/esm2020/CometChatUsers/cometchat-users/cometchat-users.component.mjs +72 -45
- package/esm2020/CometChatUsersWithMessages/cometchat-users-with-messages/cometchat-users-with-messages.component.mjs +21 -9
- package/esm2020/Extensions/CollaborativeDocument/CollaborativeDocumentExtension.mjs +7 -6
- package/esm2020/Extensions/CollaborativeDocument/CollaborativeDocumentExtensionDecorator.mjs +3 -4
- package/esm2020/Extensions/CollaborativeWhiteboard/CollaborativeWhiteboardExtension.mjs +7 -6
- package/esm2020/Extensions/CollaborativeWhiteboard/CollaborativeWhiteboardExtensionDecorator.mjs +3 -4
- package/esm2020/Extensions/ImageModeration/ImageModerationExtension.mjs +7 -5
- package/esm2020/Extensions/LinkPreviewExtension/LinkPreviewExtension.mjs +7 -5
- package/esm2020/Extensions/MessageTranslation/MessageTranslationExtension.mjs +7 -6
- package/esm2020/Extensions/MessageTranslation/MessageTranslationExtensionDecorator.mjs +2 -4
- package/esm2020/Extensions/PollsExtension/PollsExtension.mjs +7 -5
- package/esm2020/Extensions/PollsExtension/PollsExtensionDecorator.mjs +1 -1
- package/esm2020/Extensions/Reactions/ReactionExtension.mjs +7 -5
- package/esm2020/Extensions/Reactions/ReactionExtensionDecorator.mjs +3 -2
- package/esm2020/Extensions/SmartReplies/SmartRepliesExtension.mjs +7 -6
- package/esm2020/Extensions/SmartReplies/SmartRepliesExtensionDecorator.mjs +5 -7
- package/esm2020/Extensions/Stickers/StickersExtension.mjs +7 -10
- package/esm2020/Extensions/Stickers/StickersExtensionDecorator.mjs +5 -7
- package/esm2020/Extensions/TextModerator/TextModeratorExtension.mjs +16 -4
- package/esm2020/Extensions/TextModerator/TextModeratorExtensionDecorator.mjs +1 -1
- package/esm2020/Extensions/ThumbnailGeneration/ThumbnailGenerationExtension.mjs +7 -5
- package/esm2020/Shared/CometChatUIkit/CometChatUIKit.mjs +66 -32
- package/esm2020/Shared/Framework/DataSource.mjs +1 -1
- package/esm2020/Shared/Framework/DataSourceDecorator.mjs +1 -1
- package/esm2020/Shared/Utils/ComeChatException.mjs +2 -2
- package/esm2020/Shared/Utils/MessageUtils.mjs +36 -6
- package/esm2020/Shared/Views/CometChatTabs/cometchat-tabs/cometchat-tabs.component.mjs +61 -25
- package/esm2020/Shared/Views/CometChatTabs/cometchat-tabs.module.mjs +2 -18
- package/esm2020/public-api.mjs +8 -5
- package/fesm2015/cometchat-chat-uikit-angular.mjs +3658 -3185
- package/fesm2015/cometchat-chat-uikit-angular.mjs.map +1 -1
- package/fesm2020/cometchat-chat-uikit-angular.mjs +3639 -3164
- package/fesm2020/cometchat-chat-uikit-angular.mjs.map +1 -1
- package/package.json +5 -5
- package/public-api.d.ts +7 -4
- package/Calls/CometChatCallDetails/cometchat-call-details/cometchat-call-details.component.d.ts +0 -139
- package/Calls/CometChatCallDetails/cometchat-call-details.module.d.ts +0 -10
- package/Calls/CometChatCallHistory/cometchat-call-history/cometchat-call-history.component.d.ts +0 -125
- package/Calls/CometChatCallHistory/cometchat-call-history.module.d.ts +0 -10
- package/Calls/CometChatCallHistoryWithDetails/cometchat-call-history-with-details/cometchat-call-history-with-details.component.d.ts +0 -59
- package/Calls/CometChatCallHistoryWithDetails/cometchat-call-history-with-details.module.d.ts +0 -12
- package/esm2020/Calls/CometChatCallDetails/cometchat-call-details/cometchat-call-details.component.mjs +0 -452
- package/esm2020/Calls/CometChatCallDetails/cometchat-call-details.module.mjs +0 -31
- package/esm2020/Calls/CometChatCallHistory/cometchat-call-history/cometchat-call-history.component.mjs +0 -397
- package/esm2020/Calls/CometChatCallHistory/cometchat-call-history.module.mjs +0 -28
- package/esm2020/Calls/CometChatCallHistoryWithDetails/cometchat-call-history-with-details/cometchat-call-history-with-details.component.mjs +0 -143
- package/esm2020/Calls/CometChatCallHistoryWithDetails/cometchat-call-history-with-details.module.mjs +0 -39
package/esm2020/CometChatConversations/cometchat-conversations/cometchat-conversations.component.mjs
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { ChangeDetectionStrategy, Component, Input, } from "@angular/core";
|
|
2
|
-
import { CometChat } from "@cometchat
|
|
3
|
-
import {
|
|
4
|
-
import { fontHelper, localize, CometChatGroupEvents, CometChatUIKitConstants, CometChatUserEvents, CometChatMessageEvents, CometChatConversationEvents, DatePatterns, CometChatCallEvents } from '@cometchat/uikit-resources';
|
|
2
|
+
import { CometChat } from "@cometchat/chat-sdk-javascript";
|
|
3
|
+
import { ConversationUtils, MessageReceiptUtils, CometChatSoundManager, CometChatUIKitUtility, ConversationsStyle, ListStyle } from "@cometchat/uikit-shared";
|
|
4
|
+
import { fontHelper, localize, CometChatGroupEvents, CometChatUIKitConstants, MessageStatus, CometChatUserEvents, CometChatMessageEvents, CometChatConversationEvents, DatePatterns, CometChatCallEvents, SelectionMode, States, TitleAlignment, } from '@cometchat/uikit-resources';
|
|
5
5
|
import '@cometchat/uikit-elements';
|
|
6
6
|
import { AvatarStyle, ListItemStyle, ConfirmDialogStyle, ReceiptStyle, DateStyle, BadgeStyle } from '@cometchat/uikit-elements';
|
|
7
7
|
import { ChatConfigurator } from "../../Shared/Framework/ChatConfigurator";
|
|
@@ -75,7 +75,8 @@ export class CometChatConversationsComponent {
|
|
|
75
75
|
this.backdropStyle = {
|
|
76
76
|
height: "100%",
|
|
77
77
|
width: "100%",
|
|
78
|
-
background: "rgba(0, 0, 0, 0.5)"
|
|
78
|
+
background: "rgba(0, 0, 0, 0.5)",
|
|
79
|
+
position: "fixed"
|
|
79
80
|
};
|
|
80
81
|
this.badgeStyle = {
|
|
81
82
|
width: "25px",
|
|
@@ -98,13 +99,6 @@ export class CometChatConversationsComponent {
|
|
|
98
99
|
this.listItemStyle = {
|
|
99
100
|
height: "100%",
|
|
100
101
|
width: "100%",
|
|
101
|
-
background: "",
|
|
102
|
-
activeBackground: "",
|
|
103
|
-
borderRadius: "grey",
|
|
104
|
-
titleFont: "",
|
|
105
|
-
titleColor: "",
|
|
106
|
-
border: "",
|
|
107
|
-
separatorColor: "rgb(232, 232, 232)"
|
|
108
102
|
};
|
|
109
103
|
this.statusIndicatorStyle = {
|
|
110
104
|
height: "10px",
|
|
@@ -141,9 +135,9 @@ export class CometChatConversationsComponent {
|
|
|
141
135
|
};
|
|
142
136
|
this.typingListenerId = "conversation__LISTENER" + new Date().getTime();
|
|
143
137
|
this.callListenerId = "call_" + new Date().getTime();
|
|
138
|
+
this.connectionListenerId = "connection_" + new Date().getTime();
|
|
144
139
|
this.selectionmodeEnum = SelectionMode;
|
|
145
140
|
this.isDialogOpen = false;
|
|
146
|
-
// public loggedInUser!: CometChat.User | null;
|
|
147
141
|
this.isEmpty = false;
|
|
148
142
|
this.isLoading = true;
|
|
149
143
|
this.state = States.loading;
|
|
@@ -178,6 +172,9 @@ export class CometChatConversationsComponent {
|
|
|
178
172
|
height: "230px",
|
|
179
173
|
width: "270px"
|
|
180
174
|
};
|
|
175
|
+
this.firstReload = false;
|
|
176
|
+
this.isActive = true;
|
|
177
|
+
this.contactsNotFound = false;
|
|
181
178
|
/**
|
|
182
179
|
* Properties for internal use
|
|
183
180
|
*/
|
|
@@ -236,15 +233,13 @@ export class CometChatConversationsComponent {
|
|
|
236
233
|
background: "transparent",
|
|
237
234
|
border: "none"
|
|
238
235
|
};
|
|
239
|
-
this.isActive = true;
|
|
240
|
-
this.contactsNotFound = false;
|
|
241
236
|
/**
|
|
242
237
|
* Fetches Conversations Details with all the users
|
|
243
238
|
*/
|
|
244
|
-
this.getConversation = () => {
|
|
245
|
-
if (
|
|
246
|
-
this.state = States.loading;
|
|
239
|
+
this.getConversation = (states = States.loading) => {
|
|
240
|
+
if (this.requestBuilder && this.requestBuilder.pagination && (this.requestBuilder.pagination.current_page == 0 || this.requestBuilder.pagination.current_page != this.requestBuilder.pagination.total_pages)) {
|
|
247
241
|
try {
|
|
242
|
+
this.state = states;
|
|
248
243
|
CometChat.getLoggedinUser()
|
|
249
244
|
.then((user) => {
|
|
250
245
|
this.loggedInUser = user;
|
|
@@ -258,10 +253,17 @@ export class CometChatConversationsComponent {
|
|
|
258
253
|
}
|
|
259
254
|
}
|
|
260
255
|
});
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
256
|
+
if (states == States.loaded) {
|
|
257
|
+
this.conversationList = [
|
|
258
|
+
...conversationList,
|
|
259
|
+
];
|
|
260
|
+
}
|
|
261
|
+
else {
|
|
262
|
+
this.conversationList = [
|
|
263
|
+
...this.conversationList,
|
|
264
|
+
...conversationList,
|
|
265
|
+
];
|
|
266
|
+
}
|
|
265
267
|
if ((conversationList.length <= 0 && this.conversationList?.length <= 0) || (conversationList.length === 0 && this.conversationList?.length <= 0)) {
|
|
266
268
|
this.ngZone.run(() => {
|
|
267
269
|
if (this.state != States.empty) {
|
|
@@ -273,6 +275,7 @@ export class CometChatConversationsComponent {
|
|
|
273
275
|
}
|
|
274
276
|
else {
|
|
275
277
|
this.ngZone.run(() => {
|
|
278
|
+
this.ref.detectChanges();
|
|
276
279
|
if (this.state != States.loaded) {
|
|
277
280
|
this.state = States.loaded;
|
|
278
281
|
this.ref.detectChanges();
|
|
@@ -280,10 +283,19 @@ export class CometChatConversationsComponent {
|
|
|
280
283
|
this.ref.detach(); // Detach the change detector
|
|
281
284
|
});
|
|
282
285
|
}
|
|
286
|
+
if (this.firstReload) {
|
|
287
|
+
this.attachConnectionListeners();
|
|
288
|
+
this.firstReload = false;
|
|
289
|
+
}
|
|
283
290
|
})
|
|
284
291
|
.catch((error) => {
|
|
285
|
-
this.
|
|
286
|
-
|
|
292
|
+
if (this.onError) {
|
|
293
|
+
this.onError(error);
|
|
294
|
+
}
|
|
295
|
+
if (this.conversationList?.length <= 0) {
|
|
296
|
+
this.state = States.error;
|
|
297
|
+
this.ref.detectChanges();
|
|
298
|
+
}
|
|
287
299
|
});
|
|
288
300
|
})
|
|
289
301
|
.catch((error) => {
|
|
@@ -300,9 +312,6 @@ export class CometChatConversationsComponent {
|
|
|
300
312
|
}
|
|
301
313
|
}
|
|
302
314
|
}
|
|
303
|
-
else {
|
|
304
|
-
this.state = States.loaded;
|
|
305
|
-
}
|
|
306
315
|
};
|
|
307
316
|
/**
|
|
308
317
|
* Updates the conversation list's last message , badgeCount , user presence based on activities propagated by listeners
|
|
@@ -415,6 +424,12 @@ export class CometChatConversationsComponent {
|
|
|
415
424
|
};
|
|
416
425
|
};
|
|
417
426
|
}
|
|
427
|
+
onConversationSelected(conversation, event) {
|
|
428
|
+
let selected = event.detail.checked;
|
|
429
|
+
if (this.onSelect) {
|
|
430
|
+
this.onSelect(conversation, selected);
|
|
431
|
+
}
|
|
432
|
+
}
|
|
418
433
|
/**
|
|
419
434
|
* @param {CometChat.Conversation} conversation
|
|
420
435
|
*/
|
|
@@ -467,26 +482,30 @@ export class CometChatConversationsComponent {
|
|
|
467
482
|
return this.datePattern || DatePatterns.DayDateTime;
|
|
468
483
|
}
|
|
469
484
|
ngOnInit() {
|
|
470
|
-
this.
|
|
471
|
-
this.
|
|
472
|
-
|
|
473
|
-
this.conversationsRequestBuilder?.build();
|
|
485
|
+
this.firstReload = true;
|
|
486
|
+
if (!this.conversationsRequestBuilder) {
|
|
487
|
+
this.conversationsRequestBuilder = new CometChat.ConversationsRequestBuilder().setLimit(this.limit);
|
|
474
488
|
}
|
|
475
|
-
else {
|
|
476
|
-
this.conversationsRequestBuilder = new CometChat.ConversationsRequestBuilder().setLimit(this.limit).build();
|
|
477
|
-
}
|
|
478
|
-
this.state = States.loading;
|
|
479
489
|
this.setConversationOptions();
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
490
|
+
this.setThemeStyle();
|
|
491
|
+
this.subscribeToEvents();
|
|
492
|
+
this.attachListeners(this.conversationUpdated);
|
|
493
|
+
this.requestBuilder = this.conversationsRequestBuilder.build();
|
|
494
|
+
this.getConversation();
|
|
495
|
+
}
|
|
496
|
+
attachConnectionListeners() {
|
|
497
|
+
CometChat.addConnectionListener(this.connectionListenerId, new CometChat.ConnectionListener({
|
|
498
|
+
onConnected: () => {
|
|
499
|
+
console.log("ConnectionListener =>connected");
|
|
500
|
+
this.fetchNewConversations();
|
|
501
|
+
},
|
|
502
|
+
inConnecting: () => {
|
|
503
|
+
console.log("ConnectionListener => In connecting");
|
|
504
|
+
},
|
|
505
|
+
onDisconnected: () => {
|
|
506
|
+
console.log("ConnectionListener => On Disconnected");
|
|
487
507
|
}
|
|
488
|
-
}
|
|
489
|
-
this.ref.detectChanges();
|
|
508
|
+
}));
|
|
490
509
|
}
|
|
491
510
|
updateConversationObject(conversation) {
|
|
492
511
|
let index = this.conversationList.findIndex((element) => element.getConversationId() == conversation.getConversationId());
|
|
@@ -530,8 +549,14 @@ export class CometChatConversationsComponent {
|
|
|
530
549
|
}
|
|
531
550
|
});
|
|
532
551
|
this.ccGroupLeft = CometChatGroupEvents.ccGroupLeft.subscribe((item) => {
|
|
533
|
-
this.
|
|
534
|
-
|
|
552
|
+
let conversationKey = this.conversationList.findIndex((c) => c?.getConversationType() === CometChatUIKitConstants.MessageReceiverType.group && c?.getConversationWith().getGuid() == item.leftGroup.getGuid());
|
|
553
|
+
if (conversationKey >= 0) {
|
|
554
|
+
let conversation = this.conversationList[conversationKey];
|
|
555
|
+
this.removeConversation(conversation);
|
|
556
|
+
if (this.activeConversation && this.activeConversation?.getConversationId() == conversation?.getConversationId()) {
|
|
557
|
+
this.activeConversation = null;
|
|
558
|
+
}
|
|
559
|
+
}
|
|
535
560
|
});
|
|
536
561
|
this.ccUserBlocked = CometChatUserEvents.ccUserBlocked.subscribe((item) => {
|
|
537
562
|
let conversation = this.getConversationFromUser(item);
|
|
@@ -564,7 +589,7 @@ export class CometChatConversationsComponent {
|
|
|
564
589
|
});
|
|
565
590
|
});
|
|
566
591
|
this.ccCallEnded = CometChatCallEvents.ccCallEnded.subscribe((call) => {
|
|
567
|
-
if (call) {
|
|
592
|
+
if (call && Object.keys(call).length > 0) {
|
|
568
593
|
this.updateConversation(call);
|
|
569
594
|
}
|
|
570
595
|
});
|
|
@@ -609,6 +634,7 @@ export class CometChatConversationsComponent {
|
|
|
609
634
|
try {
|
|
610
635
|
if (change["activeConversation"]) {
|
|
611
636
|
this.resetUnreadCount();
|
|
637
|
+
this.ref.detectChanges();
|
|
612
638
|
}
|
|
613
639
|
/**
|
|
614
640
|
* When user sends message conversationList is updated with latest message
|
|
@@ -718,7 +744,6 @@ export class CometChatConversationsComponent {
|
|
|
718
744
|
nameTextColor: this.themeService.theme.palette.getAccent900(),
|
|
719
745
|
backgroundSize: "cover",
|
|
720
746
|
nameTextFont: fontHelper(this.themeService.theme.typography.subtitle1),
|
|
721
|
-
outerViewBorder: "",
|
|
722
747
|
outerViewBorderSpacing: "",
|
|
723
748
|
});
|
|
724
749
|
this.avatarStyle = { ...defaultStyle, ...this.avatarStyle };
|
|
@@ -771,6 +796,8 @@ export class CometChatConversationsComponent {
|
|
|
771
796
|
deliveredIconTint: this.themeService.theme.palette.getAccent600(),
|
|
772
797
|
readIconTint: this.themeService.theme.palette.getPrimary(),
|
|
773
798
|
errorIconTint: this.themeService.theme.palette.getError(),
|
|
799
|
+
height: "20px",
|
|
800
|
+
width: "20px"
|
|
774
801
|
});
|
|
775
802
|
this.receiptStyle = { ...defaultStyle, ...this.receiptStyle };
|
|
776
803
|
}
|
|
@@ -799,6 +826,7 @@ export class CometChatConversationsComponent {
|
|
|
799
826
|
background: this.themeService.theme.palette.getBackground(),
|
|
800
827
|
height: "100%",
|
|
801
828
|
width: "350px",
|
|
829
|
+
borderRadius: "8px"
|
|
802
830
|
});
|
|
803
831
|
this.deleteConversationDialogStyle = { ...defaultStyle, ...this.deleteConversationDialogStyle };
|
|
804
832
|
}
|
|
@@ -817,7 +845,7 @@ export class CometChatConversationsComponent {
|
|
|
817
845
|
*/
|
|
818
846
|
fetchNextConversation() {
|
|
819
847
|
try {
|
|
820
|
-
return this.
|
|
848
|
+
return this.requestBuilder.fetchNext();
|
|
821
849
|
}
|
|
822
850
|
catch (error) {
|
|
823
851
|
if (this.onError) {
|
|
@@ -925,6 +953,9 @@ export class CometChatConversationsComponent {
|
|
|
925
953
|
onOutgoingCallAccepted: (call) => {
|
|
926
954
|
this.updateConversation(call);
|
|
927
955
|
},
|
|
956
|
+
onCallEndedMessageReceived: (call) => {
|
|
957
|
+
this.updateConversation(call);
|
|
958
|
+
}
|
|
928
959
|
}));
|
|
929
960
|
}
|
|
930
961
|
catch (error) {
|
|
@@ -933,6 +964,11 @@ export class CometChatConversationsComponent {
|
|
|
933
964
|
}
|
|
934
965
|
}
|
|
935
966
|
}
|
|
967
|
+
fetchNewConversations() {
|
|
968
|
+
this.requestBuilder = this.conversationsRequestBuilder.build();
|
|
969
|
+
this.conversationList = [];
|
|
970
|
+
this.getConversation(States.loaded);
|
|
971
|
+
}
|
|
936
972
|
/**
|
|
937
973
|
* Removes all listeners
|
|
938
974
|
*/
|
|
@@ -941,6 +977,7 @@ export class CometChatConversationsComponent {
|
|
|
941
977
|
CometChat.removeMessageListener(this.conversationListenerId);
|
|
942
978
|
CometChat.removeUserListener(this.userListenerId);
|
|
943
979
|
CometChat.removeGroupListener(this.groupListenerId);
|
|
980
|
+
CometChat.removeConnectionListener(this.connectionListenerId);
|
|
944
981
|
}
|
|
945
982
|
catch (error) {
|
|
946
983
|
if (this.onError) {
|
|
@@ -971,6 +1008,7 @@ export class CometChatConversationsComponent {
|
|
|
971
1008
|
newConversationObject.getLastMessage().setMuid(this.getUinx());
|
|
972
1009
|
conversationlist.splice(conversationKey, 1, newConversationObject);
|
|
973
1010
|
this.conversationList = [...conversationlist];
|
|
1011
|
+
this.ref.detectChanges();
|
|
974
1012
|
}
|
|
975
1013
|
}
|
|
976
1014
|
}
|
|
@@ -1030,6 +1068,10 @@ export class CometChatConversationsComponent {
|
|
|
1030
1068
|
* @param {boolean} notification
|
|
1031
1069
|
*/
|
|
1032
1070
|
updateConversation(message, notification = true) {
|
|
1071
|
+
let metadata;
|
|
1072
|
+
if (message instanceof CometChat.CustomMessage) {
|
|
1073
|
+
metadata = message.getMetadata();
|
|
1074
|
+
}
|
|
1033
1075
|
try {
|
|
1034
1076
|
this.makeConversation(message)
|
|
1035
1077
|
.then((response) => {
|
|
@@ -1038,7 +1080,7 @@ export class CometChatConversationsComponent {
|
|
|
1038
1080
|
const conversationList = response.conversationList;
|
|
1039
1081
|
if (conversationKey > -1) {
|
|
1040
1082
|
// if sender is not logged in user then increment count
|
|
1041
|
-
let unreadMessageCount = this.loggedInUser?.getUid() != message.getSender().getUid() || this.loggedInUser?.getUid() == message.getReceiverId() ? this.makeUnreadMessageCount(conversationObj) : this.makeUnreadMessageCount(conversationObj) - 1;
|
|
1083
|
+
let unreadMessageCount = (this.loggedInUser?.getUid() != message.getSender().getUid() || this.loggedInUser?.getUid() == message.getReceiverId()) && (!metadata || !metadata.hasOwnProperty("incrementUnreadCount") || metadata.incrementUnreadCount == true) ? this.makeUnreadMessageCount(conversationObj) : this.makeUnreadMessageCount(conversationObj) - 1;
|
|
1042
1084
|
let lastMessageObj = this.makeLastMessage(message, conversationObj);
|
|
1043
1085
|
let newConversationObj = conversationObj;
|
|
1044
1086
|
newConversationObj.setLastMessage(lastMessageObj);
|
|
@@ -1047,6 +1089,9 @@ export class CometChatConversationsComponent {
|
|
|
1047
1089
|
conversationList.splice(conversationKey, 1);
|
|
1048
1090
|
conversationList.unshift(newConversationObj);
|
|
1049
1091
|
this.conversationList = [...conversationList];
|
|
1092
|
+
if (this.loggedInUser?.getUid() == message.getSender().getUid()) {
|
|
1093
|
+
this.activeConversation = newConversationObj;
|
|
1094
|
+
}
|
|
1050
1095
|
if (notification && this.loggedInUser?.getUid() != message?.getSender()?.getUid()) {
|
|
1051
1096
|
this.playAudio();
|
|
1052
1097
|
this.ref.detectChanges();
|
|
@@ -1065,6 +1110,9 @@ export class CometChatConversationsComponent {
|
|
|
1065
1110
|
this.ref.detectChanges();
|
|
1066
1111
|
}
|
|
1067
1112
|
}
|
|
1113
|
+
if (this.state != States.loaded) {
|
|
1114
|
+
this.state = States.loaded;
|
|
1115
|
+
}
|
|
1068
1116
|
this.ref.detectChanges();
|
|
1069
1117
|
})
|
|
1070
1118
|
.catch((error) => {
|
|
@@ -1143,22 +1191,31 @@ export class CometChatConversationsComponent {
|
|
|
1143
1191
|
*/
|
|
1144
1192
|
makeConversation(message) {
|
|
1145
1193
|
const promise = new Promise((resolve, reject) => {
|
|
1146
|
-
|
|
1147
|
-
|
|
1148
|
-
let
|
|
1149
|
-
let conversationKey = conversationList.findIndex((c) => c?.getConversationId() === conversation.getConversationId());
|
|
1150
|
-
let conversationObj = conversation;
|
|
1151
|
-
if (conversationKey > -1) {
|
|
1152
|
-
conversationObj = conversationList[conversationKey];
|
|
1153
|
-
}
|
|
1194
|
+
let conversationKey = this.conversationList.findIndex((c) => c?.getConversationId() === message?.getConversationId());
|
|
1195
|
+
if (conversationKey >= 0) {
|
|
1196
|
+
let conversation = this.conversationList[conversationKey];
|
|
1154
1197
|
resolve({
|
|
1155
1198
|
conversationKey: conversationKey,
|
|
1156
|
-
conversationObj:
|
|
1157
|
-
conversationList: conversationList,
|
|
1199
|
+
conversationObj: conversation,
|
|
1200
|
+
conversationList: this.conversationList,
|
|
1158
1201
|
});
|
|
1159
|
-
|
|
1160
|
-
|
|
1161
|
-
.
|
|
1202
|
+
}
|
|
1203
|
+
else {
|
|
1204
|
+
CometChat.CometChatHelper.getConversationFromMessage(message)
|
|
1205
|
+
.then((conversation) => {
|
|
1206
|
+
if (conversation?.getConversationWith() instanceof CometChat.Group && !conversation.getConversationWith().getScope()) {
|
|
1207
|
+
conversation.getConversationWith().setHasJoined(true);
|
|
1208
|
+
conversation.getConversationWith().setScope(CometChatUIKitConstants.groupMemberScope.participant);
|
|
1209
|
+
}
|
|
1210
|
+
resolve({
|
|
1211
|
+
conversationKey: -1,
|
|
1212
|
+
conversationObj: conversation,
|
|
1213
|
+
conversationList: this.conversationList,
|
|
1214
|
+
});
|
|
1215
|
+
this.ref.detectChanges();
|
|
1216
|
+
})
|
|
1217
|
+
.catch((error) => reject(error));
|
|
1218
|
+
}
|
|
1162
1219
|
});
|
|
1163
1220
|
return promise;
|
|
1164
1221
|
}
|
|
@@ -1292,10 +1349,10 @@ export class CometChatConversationsComponent {
|
|
|
1292
1349
|
}
|
|
1293
1350
|
}
|
|
1294
1351
|
CometChatConversationsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: CometChatConversationsComponent, deps: [{ token: i0.NgZone }, { token: i0.ChangeDetectorRef }, { token: i1.CometChatThemeService }], target: i0.ɵɵFactoryTarget.Component });
|
|
1295
|
-
CometChatConversationsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.11", type: CometChatConversationsComponent, selector: "cometchat-conversations", inputs: { subtitleView: "subtitleView", title: "title", options: "options", searchPlaceHolder: "searchPlaceHolder", disableUsersPresence: "disableUsersPresence", disableReceipt: "disableReceipt", disableTyping: "disableTyping", deliveredIcon: "deliveredIcon", readIcon: "readIcon", errorIcon: "errorIcon", datePattern: "datePattern", onError: "onError", sentIcon: "sentIcon", privateGroupIcon: "privateGroupIcon", protectedGroupIcon: "protectedGroupIcon", customSoundForMessages: "customSoundForMessages", activeConversation: "activeConversation", searchIconURL: "searchIconURL", hideSearch: "hideSearch", conversationsRequestBuilder: "conversationsRequestBuilder", emptyStateView: "emptyStateView", onSelect: "onSelect", loadingIconURL: "loadingIconURL", errorStateView: "errorStateView", loadingStateView: "loadingStateView", emptyStateText: "emptyStateText", errorStateText: "errorStateText", titleAlignment: "titleAlignment", listItemView: "listItemView", menu: "menu", hideSeparator: "hideSeparator", searchPlaceholder: "searchPlaceholder", hideError: "hideError", selectionMode: "selectionMode", disableSoundForMessages: "disableSoundForMessages", confirmDialogTitle: "confirmDialogTitle", confirmButtonText: "confirmButtonText", cancelButtonText: "cancelButtonText", confirmDialogMessage: "confirmDialogMessage", onItemClick: "onItemClick", deleteConversationDialogStyle: "deleteConversationDialogStyle", backdropStyle: "backdropStyle", badgeStyle: "badgeStyle", dateStyle: "dateStyle", conversationsStyle: "conversationsStyle", listItemStyle: "listItemStyle", statusIndicatorStyle: "statusIndicatorStyle", typingIndicatorText: "typingIndicatorText", threadIndicatorText: "threadIndicatorText", avatarStyle: "avatarStyle", receiptStyle: "receiptStyle", loggedInUser: "loggedInUser" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"cc-conversations\" [ngStyle]=\"styles.wrapperStyle()\">\n <cometchat-backdrop [backdropStyle]=\"backdropStyle\" *ngIf=\"isDialogOpen\">\n <cometchat-confirm-dialog [title]=\"confirmDialogTitle\" [messageText]=\"confirmDialogMessage\" [cancelButtonText]=\"cancelButtonText\" [confirmButtonText]=\"confirmButtonText\" (cc-confirm-clicked)=\"onConfirmClick()\" (cc-cancel-clicked)=\"onCancelClick()\" [confirmDialogStyle]=\"deleteConversationDialogStyle\">\n </cometchat-confirm-dialog>\n </cometchat-backdrop>\n <div class=\"cc-conversations__menus\" *ngIf=\"menu\">\n\n <ng-container *ngTemplateOutlet=\"menu\">\n </ng-container>\n\n </div>\n<cometchat-list [state]=\"state\"\n[searchIconURL]=\"searchIconURL\" [hideError]=\"hideError\"\n[emptyStateText]=\"emptyStateText\" [loadingIconURL]=\"loadingIconURL\"\n[titleAlignment]=\"titleAlignment\" [loadingView]=\"loadingStateView\" [listStyle]=\"listStyle\" [emptyStateView]=\"emptyStateView\"\n[errorStateText]=\"errorStateText\" [errorView]=\"errorStateView\"\n[onScrolledToBottom]=\"getConversation\" [list]=\"conversationList\" [listItemView]=\"listItemView ? listItemView : listItem\" [title]=\"title\" [hideSearch]=\"hideSearch\"></cometchat-list>\n</div>\n<ng-template #listItem let-conversation>\n <cometchat-list-item [hideSeparator]=\"hideSeparator\" [avatarStyle]=\"avatarStyle\" [statusIndicatorStyle]=\"setStatusIndicatorStyle(conversation)\"\n [id]=\"conversation?.conversationId\" [isActive]=\"getActiveConversation(conversation)\"\n (cc-listitem-clicked)=\"onClick(conversation)\" [title]=\"conversation?.conversationWith?.name\"\n [statusIndicatorIcon]=\"checkGroupType(conversation)\" [statusIndicatorColor]=\"checkStatusType(conversation)\"\n [listItemStyle]=\"listItemStyle\" [avatarURL]=\"conversation?.conversationWith?.avatar\" [avatarName]=\"conversation?.conversationWith?.name\">\n <div slot=\"subtitleView\" *ngIf=\"subtitleView;else conversationSubtitle\">\n <ng-container *ngTemplateOutlet=\"subtitleView\">\n </ng-container>\n </div>\n <ng-template #conversationSubtitle>\n\n <div class=\"cc-conversations__subtitle-view \" slot=\"subtitleView\" >\n <div class=\"cc-conversations__threadview\" *ngIf=\"conversation?.lastMessage?.parentMessageId\">\n <cometchat-label [labelStyle]=\"itemThreadIndicatorStyle()\" [text]=\"threadIndicatorText\"> </cometchat-label>\n <cometchat-icon [URL]=\"threadIconURL\" [iconStyle]=\"iconStyle\"></cometchat-icon>\n\n </div>\n<div class=\"cc-conversations__subtitle\">\n <div class=\"cc-conversations__readreceipt\" *ngIf=\"isReceiptDisable(conversation)\">\n <cometchat-receipt [receipt]=\"getMessageReceipt(conversation)\" [receiptStyle]=\"receiptStyle\" [sentIcon]=\"sentIcon\" [errorIcon]=\"errorIcon\" [deliveredIcon]=\"deliveredIcon\" [readIcon]=\"readIcon\"></cometchat-receipt>\n </div>\n\n <div [ngStyle]=\"subtitleStyle(conversation)\" class=\"cc-subtitle__text\"> {{setSubtitle(conversation)}} </div>\n</div>\n\n </div>\n </ng-template>\n <div slot=\"menuView\" class=\"cc-conversations__optionsview\" *ngIf=\"selectionMode == selectionmodeEnum.none\">\n <div *ngIf=\"options\">\n <cometchat-menu-list [data]=\"options(conversation)\" (cc-menu-clicked)=\"onOptionClick($event,conversation)\" [menuListStyle]=\"menustyle\">\n\n </cometchat-menu-list>\n </div>\n <div *ngIf=\"!options && conversationOptions\">\n <cometchat-menu-list [data]=\"conversationOptions\" (cc-menu-clicked)=\"onOptionClick($event,conversation)\" [menuListStyle]=\"menustyle\">\n\n </cometchat-menu-list>\n </div>\n</div>\n<div slot=\"tailView\" class=\"cc-conversations__tail-view\">\n<div class=\"tail__view\" *ngIf=\"selectionMode == selectionmodeEnum.none\">\n <div class=\"cc-date\">\n <cometchat-date [dateStyle]=\"dateStyle\" [timestamp]=\"conversation?.lastMessage?.sentAt\" [pattern]=\"getDate()\"></cometchat-date>\n </div>\n <div class=\"cc-conversations__badge\">\n <cometchat-badge [count]=\"conversation?.unreadMessageCount\" [badgeStyle]=\"badgeStyle\"></cometchat-badge>\n </div>\n</div>\n<div class=\"cc-conversations__selection-view\" *ngIf=\"selectionMode != selectionmodeEnum.none\">\n <ng-container *ngTemplateOutlet=\"tailView\">\n </ng-container>\n</div>\n</div>\n </cometchat-list-item>\n <ng-template #tailView>\n <div *ngIf=\"selectionMode == selectionmodeEnum.single\">\n <cometchat-radio-button (cc-radio-button-changed)=\"
|
|
1352
|
+
CometChatConversationsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.11", type: CometChatConversationsComponent, selector: "cometchat-conversations", inputs: { subtitleView: "subtitleView", title: "title", options: "options", searchPlaceHolder: "searchPlaceHolder", disableUsersPresence: "disableUsersPresence", disableReceipt: "disableReceipt", disableTyping: "disableTyping", deliveredIcon: "deliveredIcon", readIcon: "readIcon", errorIcon: "errorIcon", datePattern: "datePattern", onError: "onError", sentIcon: "sentIcon", privateGroupIcon: "privateGroupIcon", protectedGroupIcon: "protectedGroupIcon", customSoundForMessages: "customSoundForMessages", activeConversation: "activeConversation", searchIconURL: "searchIconURL", hideSearch: "hideSearch", conversationsRequestBuilder: "conversationsRequestBuilder", emptyStateView: "emptyStateView", onSelect: "onSelect", loadingIconURL: "loadingIconURL", errorStateView: "errorStateView", loadingStateView: "loadingStateView", emptyStateText: "emptyStateText", errorStateText: "errorStateText", titleAlignment: "titleAlignment", listItemView: "listItemView", menu: "menu", hideSeparator: "hideSeparator", searchPlaceholder: "searchPlaceholder", hideError: "hideError", selectionMode: "selectionMode", disableSoundForMessages: "disableSoundForMessages", confirmDialogTitle: "confirmDialogTitle", confirmButtonText: "confirmButtonText", cancelButtonText: "cancelButtonText", confirmDialogMessage: "confirmDialogMessage", onItemClick: "onItemClick", deleteConversationDialogStyle: "deleteConversationDialogStyle", backdropStyle: "backdropStyle", badgeStyle: "badgeStyle", dateStyle: "dateStyle", conversationsStyle: "conversationsStyle", listItemStyle: "listItemStyle", statusIndicatorStyle: "statusIndicatorStyle", typingIndicatorText: "typingIndicatorText", threadIndicatorText: "threadIndicatorText", avatarStyle: "avatarStyle", receiptStyle: "receiptStyle", loggedInUser: "loggedInUser" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"cc-conversations\" [ngStyle]=\"styles.wrapperStyle()\">\n <cometchat-backdrop [backdropStyle]=\"backdropStyle\" *ngIf=\"isDialogOpen\">\n <cometchat-confirm-dialog [title]=\"confirmDialogTitle\" [messageText]=\"confirmDialogMessage\" [cancelButtonText]=\"cancelButtonText\" [confirmButtonText]=\"confirmButtonText\" (cc-confirm-clicked)=\"onConfirmClick()\" (cc-cancel-clicked)=\"onCancelClick()\" [confirmDialogStyle]=\"deleteConversationDialogStyle\">\n </cometchat-confirm-dialog>\n </cometchat-backdrop>\n <div class=\"cc-conversations__menus\" *ngIf=\"menu\">\n\n <ng-container *ngTemplateOutlet=\"menu\">\n </ng-container>\n\n </div>\n<cometchat-list [state]=\"state\"\n[searchIconURL]=\"searchIconURL\" [hideError]=\"hideError\"\n[emptyStateText]=\"emptyStateText\" [loadingIconURL]=\"loadingIconURL\"\n[titleAlignment]=\"titleAlignment\" [loadingView]=\"loadingStateView\" [listStyle]=\"listStyle\" [emptyStateView]=\"emptyStateView\"\n[errorStateText]=\"errorStateText\" [errorView]=\"errorStateView\"\n[onScrolledToBottom]=\"getConversation\" [list]=\"conversationList\" [listItemView]=\"listItemView ? listItemView : listItem\" [title]=\"title\" [hideSearch]=\"hideSearch\"></cometchat-list>\n</div>\n<ng-template #listItem let-conversation>\n <cometchat-list-item [hideSeparator]=\"hideSeparator\" [avatarStyle]=\"avatarStyle\" [statusIndicatorStyle]=\"setStatusIndicatorStyle(conversation)\"\n [id]=\"conversation?.conversationId\" [isActive]=\"getActiveConversation(conversation)\"\n (cc-listitem-clicked)=\"onClick(conversation)\" [title]=\"conversation?.conversationWith?.name\"\n [statusIndicatorIcon]=\"checkGroupType(conversation)\" [statusIndicatorColor]=\"checkStatusType(conversation)\"\n [listItemStyle]=\"listItemStyle\" [avatarURL]=\"conversation?.conversationWith?.avatar\" [avatarName]=\"conversation?.conversationWith?.name\">\n <div slot=\"subtitleView\" *ngIf=\"subtitleView;else conversationSubtitle\">\n <ng-container *ngTemplateOutlet=\"subtitleView\">\n </ng-container>\n </div>\n <ng-template #conversationSubtitle>\n\n <div class=\"cc-conversations__subtitle-view \" slot=\"subtitleView\" >\n <div class=\"cc-conversations__threadview\" *ngIf=\"conversation?.lastMessage?.parentMessageId\">\n <cometchat-label [labelStyle]=\"itemThreadIndicatorStyle()\" [text]=\"threadIndicatorText\"> </cometchat-label>\n <cometchat-icon [URL]=\"threadIconURL\" [iconStyle]=\"iconStyle\"></cometchat-icon>\n\n </div>\n<div class=\"cc-conversations__subtitle\">\n <div class=\"cc-conversations__readreceipt\" *ngIf=\"isReceiptDisable(conversation)\">\n <cometchat-receipt [receipt]=\"getMessageReceipt(conversation)\" [receiptStyle]=\"receiptStyle\" [sentIcon]=\"sentIcon\" [errorIcon]=\"errorIcon\" [deliveredIcon]=\"deliveredIcon\" [readIcon]=\"readIcon\"></cometchat-receipt>\n </div>\n\n <div [ngStyle]=\"subtitleStyle(conversation)\" class=\"cc-subtitle__text\"> {{setSubtitle(conversation)}} </div>\n</div>\n\n </div>\n </ng-template>\n <div slot=\"menuView\" class=\"cc-conversations__optionsview\" *ngIf=\"selectionMode == selectionmodeEnum.none\">\n <div *ngIf=\"options\">\n <cometchat-menu-list [data]=\"options(conversation)\" (cc-menu-clicked)=\"onOptionClick($event,conversation)\" [menuListStyle]=\"menustyle\">\n\n </cometchat-menu-list>\n </div>\n <div *ngIf=\"!options && conversationOptions\">\n <cometchat-menu-list [data]=\"conversationOptions\" (cc-menu-clicked)=\"onOptionClick($event,conversation)\" [menuListStyle]=\"menustyle\">\n\n </cometchat-menu-list>\n </div>\n</div>\n<div slot=\"tailView\" class=\"cc-conversations__tail-view\">\n<div class=\"tail__view\" *ngIf=\"selectionMode == selectionmodeEnum.none\">\n <div class=\"cc-date\">\n <cometchat-date [dateStyle]=\"dateStyle\" [timestamp]=\"conversation?.lastMessage?.sentAt\" [pattern]=\"getDate()\"></cometchat-date>\n </div>\n <div class=\"cc-conversations__badge\">\n <cometchat-badge [count]=\"conversation?.unreadMessageCount\" [badgeStyle]=\"badgeStyle\"></cometchat-badge>\n </div>\n</div>\n<div class=\"cc-conversations__selection-view\" *ngIf=\"selectionMode != selectionmodeEnum.none\">\n <ng-container *ngTemplateOutlet=\"tailView\">\n </ng-container>\n</div>\n</div>\n </cometchat-list-item>\n <ng-template #tailView>\n <div *ngIf=\"selectionMode == selectionmodeEnum.single\">\n <cometchat-radio-button (cc-radio-button-changed)=\"onConversationSelected(conversation,$event)\"></cometchat-radio-button>\n </div>\n <div *ngIf=\"selectionMode == selectionmodeEnum.multiple\">\n <cometchat-checkbox (cc-checkbox-changed)=\"onConversationSelected(conversation,$event)\"></cometchat-checkbox>\n </div>\n </ng-template>\n</ng-template>\n\n\n", styles: [".cc-conversations{height:100%;width:100%;box-sizing:border-box;margin-bottom:16px;position:relative}.cc-conversations__selection-view{position:relative}.tail__view{display:flex;flex-direction:column;justify-content:flex-start;align-items:center}.cc-subtitle__text{text-overflow:ellipsis;overflow:hidden;white-space:nowrap}.cc-conversations__menus{position:absolute;right:12px;padding:4px;cursor:pointer}.cc-menus__icon{height:24px;width:24px}.cc-conversations__subtitle-view{display:flex;align-items:center;width:90%;flex-direction:column;justify-content:flex-start}.cc-conversations__subtitle{display:flex;justify-content:flex-start;width:100%;align-items:center;min-height:22px}.cc-conversations__threadview{height:12px;display:flex;justify-content:flex-start;width:100%;align-items:center}.cc-conversations__badge{display:flex;align-items:flex-end;justify-content:flex-end;width:100%;padding-right:8px}\n"], components: [{ type: i2.CometchatListComponent, selector: "cometchat-list", inputs: ["listItemView", "onScrolledToBottom", "onScrolledToTop", "list", "onSearch", "searchText", "searchIconURL", "listStyle", "searchPlaceholderText", "hideSearch", "hideError", "title", "titleAlignment", "errorStateView", "loadingStateView", "emptyStateView", "state", "errorStateText", "emptyStateText", "loadingIconURL", "showSectionHeader", "sectionHeaderField"] }], directives: [{ type: i3.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
1296
1353
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: CometChatConversationsComponent, decorators: [{
|
|
1297
1354
|
type: Component,
|
|
1298
|
-
args: [{ selector: "cometchat-conversations", changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"cc-conversations\" [ngStyle]=\"styles.wrapperStyle()\">\n <cometchat-backdrop [backdropStyle]=\"backdropStyle\" *ngIf=\"isDialogOpen\">\n <cometchat-confirm-dialog [title]=\"confirmDialogTitle\" [messageText]=\"confirmDialogMessage\" [cancelButtonText]=\"cancelButtonText\" [confirmButtonText]=\"confirmButtonText\" (cc-confirm-clicked)=\"onConfirmClick()\" (cc-cancel-clicked)=\"onCancelClick()\" [confirmDialogStyle]=\"deleteConversationDialogStyle\">\n </cometchat-confirm-dialog>\n </cometchat-backdrop>\n <div class=\"cc-conversations__menus\" *ngIf=\"menu\">\n\n <ng-container *ngTemplateOutlet=\"menu\">\n </ng-container>\n\n </div>\n<cometchat-list [state]=\"state\"\n[searchIconURL]=\"searchIconURL\" [hideError]=\"hideError\"\n[emptyStateText]=\"emptyStateText\" [loadingIconURL]=\"loadingIconURL\"\n[titleAlignment]=\"titleAlignment\" [loadingView]=\"loadingStateView\" [listStyle]=\"listStyle\" [emptyStateView]=\"emptyStateView\"\n[errorStateText]=\"errorStateText\" [errorView]=\"errorStateView\"\n[onScrolledToBottom]=\"getConversation\" [list]=\"conversationList\" [listItemView]=\"listItemView ? listItemView : listItem\" [title]=\"title\" [hideSearch]=\"hideSearch\"></cometchat-list>\n</div>\n<ng-template #listItem let-conversation>\n <cometchat-list-item [hideSeparator]=\"hideSeparator\" [avatarStyle]=\"avatarStyle\" [statusIndicatorStyle]=\"setStatusIndicatorStyle(conversation)\"\n [id]=\"conversation?.conversationId\" [isActive]=\"getActiveConversation(conversation)\"\n (cc-listitem-clicked)=\"onClick(conversation)\" [title]=\"conversation?.conversationWith?.name\"\n [statusIndicatorIcon]=\"checkGroupType(conversation)\" [statusIndicatorColor]=\"checkStatusType(conversation)\"\n [listItemStyle]=\"listItemStyle\" [avatarURL]=\"conversation?.conversationWith?.avatar\" [avatarName]=\"conversation?.conversationWith?.name\">\n <div slot=\"subtitleView\" *ngIf=\"subtitleView;else conversationSubtitle\">\n <ng-container *ngTemplateOutlet=\"subtitleView\">\n </ng-container>\n </div>\n <ng-template #conversationSubtitle>\n\n <div class=\"cc-conversations__subtitle-view \" slot=\"subtitleView\" >\n <div class=\"cc-conversations__threadview\" *ngIf=\"conversation?.lastMessage?.parentMessageId\">\n <cometchat-label [labelStyle]=\"itemThreadIndicatorStyle()\" [text]=\"threadIndicatorText\"> </cometchat-label>\n <cometchat-icon [URL]=\"threadIconURL\" [iconStyle]=\"iconStyle\"></cometchat-icon>\n\n </div>\n<div class=\"cc-conversations__subtitle\">\n <div class=\"cc-conversations__readreceipt\" *ngIf=\"isReceiptDisable(conversation)\">\n <cometchat-receipt [receipt]=\"getMessageReceipt(conversation)\" [receiptStyle]=\"receiptStyle\" [sentIcon]=\"sentIcon\" [errorIcon]=\"errorIcon\" [deliveredIcon]=\"deliveredIcon\" [readIcon]=\"readIcon\"></cometchat-receipt>\n </div>\n\n <div [ngStyle]=\"subtitleStyle(conversation)\" class=\"cc-subtitle__text\"> {{setSubtitle(conversation)}} </div>\n</div>\n\n </div>\n </ng-template>\n <div slot=\"menuView\" class=\"cc-conversations__optionsview\" *ngIf=\"selectionMode == selectionmodeEnum.none\">\n <div *ngIf=\"options\">\n <cometchat-menu-list [data]=\"options(conversation)\" (cc-menu-clicked)=\"onOptionClick($event,conversation)\" [menuListStyle]=\"menustyle\">\n\n </cometchat-menu-list>\n </div>\n <div *ngIf=\"!options && conversationOptions\">\n <cometchat-menu-list [data]=\"conversationOptions\" (cc-menu-clicked)=\"onOptionClick($event,conversation)\" [menuListStyle]=\"menustyle\">\n\n </cometchat-menu-list>\n </div>\n</div>\n<div slot=\"tailView\" class=\"cc-conversations__tail-view\">\n<div class=\"tail__view\" *ngIf=\"selectionMode == selectionmodeEnum.none\">\n <div class=\"cc-date\">\n <cometchat-date [dateStyle]=\"dateStyle\" [timestamp]=\"conversation?.lastMessage?.sentAt\" [pattern]=\"getDate()\"></cometchat-date>\n </div>\n <div class=\"cc-conversations__badge\">\n <cometchat-badge [count]=\"conversation?.unreadMessageCount\" [badgeStyle]=\"badgeStyle\"></cometchat-badge>\n </div>\n</div>\n<div class=\"cc-conversations__selection-view\" *ngIf=\"selectionMode != selectionmodeEnum.none\">\n <ng-container *ngTemplateOutlet=\"tailView\">\n </ng-container>\n</div>\n</div>\n </cometchat-list-item>\n <ng-template #tailView>\n <div *ngIf=\"selectionMode == selectionmodeEnum.single\">\n <cometchat-radio-button (cc-radio-button-changed)=\"
|
|
1355
|
+
args: [{ selector: "cometchat-conversations", changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"cc-conversations\" [ngStyle]=\"styles.wrapperStyle()\">\n <cometchat-backdrop [backdropStyle]=\"backdropStyle\" *ngIf=\"isDialogOpen\">\n <cometchat-confirm-dialog [title]=\"confirmDialogTitle\" [messageText]=\"confirmDialogMessage\" [cancelButtonText]=\"cancelButtonText\" [confirmButtonText]=\"confirmButtonText\" (cc-confirm-clicked)=\"onConfirmClick()\" (cc-cancel-clicked)=\"onCancelClick()\" [confirmDialogStyle]=\"deleteConversationDialogStyle\">\n </cometchat-confirm-dialog>\n </cometchat-backdrop>\n <div class=\"cc-conversations__menus\" *ngIf=\"menu\">\n\n <ng-container *ngTemplateOutlet=\"menu\">\n </ng-container>\n\n </div>\n<cometchat-list [state]=\"state\"\n[searchIconURL]=\"searchIconURL\" [hideError]=\"hideError\"\n[emptyStateText]=\"emptyStateText\" [loadingIconURL]=\"loadingIconURL\"\n[titleAlignment]=\"titleAlignment\" [loadingView]=\"loadingStateView\" [listStyle]=\"listStyle\" [emptyStateView]=\"emptyStateView\"\n[errorStateText]=\"errorStateText\" [errorView]=\"errorStateView\"\n[onScrolledToBottom]=\"getConversation\" [list]=\"conversationList\" [listItemView]=\"listItemView ? listItemView : listItem\" [title]=\"title\" [hideSearch]=\"hideSearch\"></cometchat-list>\n</div>\n<ng-template #listItem let-conversation>\n <cometchat-list-item [hideSeparator]=\"hideSeparator\" [avatarStyle]=\"avatarStyle\" [statusIndicatorStyle]=\"setStatusIndicatorStyle(conversation)\"\n [id]=\"conversation?.conversationId\" [isActive]=\"getActiveConversation(conversation)\"\n (cc-listitem-clicked)=\"onClick(conversation)\" [title]=\"conversation?.conversationWith?.name\"\n [statusIndicatorIcon]=\"checkGroupType(conversation)\" [statusIndicatorColor]=\"checkStatusType(conversation)\"\n [listItemStyle]=\"listItemStyle\" [avatarURL]=\"conversation?.conversationWith?.avatar\" [avatarName]=\"conversation?.conversationWith?.name\">\n <div slot=\"subtitleView\" *ngIf=\"subtitleView;else conversationSubtitle\">\n <ng-container *ngTemplateOutlet=\"subtitleView\">\n </ng-container>\n </div>\n <ng-template #conversationSubtitle>\n\n <div class=\"cc-conversations__subtitle-view \" slot=\"subtitleView\" >\n <div class=\"cc-conversations__threadview\" *ngIf=\"conversation?.lastMessage?.parentMessageId\">\n <cometchat-label [labelStyle]=\"itemThreadIndicatorStyle()\" [text]=\"threadIndicatorText\"> </cometchat-label>\n <cometchat-icon [URL]=\"threadIconURL\" [iconStyle]=\"iconStyle\"></cometchat-icon>\n\n </div>\n<div class=\"cc-conversations__subtitle\">\n <div class=\"cc-conversations__readreceipt\" *ngIf=\"isReceiptDisable(conversation)\">\n <cometchat-receipt [receipt]=\"getMessageReceipt(conversation)\" [receiptStyle]=\"receiptStyle\" [sentIcon]=\"sentIcon\" [errorIcon]=\"errorIcon\" [deliveredIcon]=\"deliveredIcon\" [readIcon]=\"readIcon\"></cometchat-receipt>\n </div>\n\n <div [ngStyle]=\"subtitleStyle(conversation)\" class=\"cc-subtitle__text\"> {{setSubtitle(conversation)}} </div>\n</div>\n\n </div>\n </ng-template>\n <div slot=\"menuView\" class=\"cc-conversations__optionsview\" *ngIf=\"selectionMode == selectionmodeEnum.none\">\n <div *ngIf=\"options\">\n <cometchat-menu-list [data]=\"options(conversation)\" (cc-menu-clicked)=\"onOptionClick($event,conversation)\" [menuListStyle]=\"menustyle\">\n\n </cometchat-menu-list>\n </div>\n <div *ngIf=\"!options && conversationOptions\">\n <cometchat-menu-list [data]=\"conversationOptions\" (cc-menu-clicked)=\"onOptionClick($event,conversation)\" [menuListStyle]=\"menustyle\">\n\n </cometchat-menu-list>\n </div>\n</div>\n<div slot=\"tailView\" class=\"cc-conversations__tail-view\">\n<div class=\"tail__view\" *ngIf=\"selectionMode == selectionmodeEnum.none\">\n <div class=\"cc-date\">\n <cometchat-date [dateStyle]=\"dateStyle\" [timestamp]=\"conversation?.lastMessage?.sentAt\" [pattern]=\"getDate()\"></cometchat-date>\n </div>\n <div class=\"cc-conversations__badge\">\n <cometchat-badge [count]=\"conversation?.unreadMessageCount\" [badgeStyle]=\"badgeStyle\"></cometchat-badge>\n </div>\n</div>\n<div class=\"cc-conversations__selection-view\" *ngIf=\"selectionMode != selectionmodeEnum.none\">\n <ng-container *ngTemplateOutlet=\"tailView\">\n </ng-container>\n</div>\n</div>\n </cometchat-list-item>\n <ng-template #tailView>\n <div *ngIf=\"selectionMode == selectionmodeEnum.single\">\n <cometchat-radio-button (cc-radio-button-changed)=\"onConversationSelected(conversation,$event)\"></cometchat-radio-button>\n </div>\n <div *ngIf=\"selectionMode == selectionmodeEnum.multiple\">\n <cometchat-checkbox (cc-checkbox-changed)=\"onConversationSelected(conversation,$event)\"></cometchat-checkbox>\n </div>\n </ng-template>\n</ng-template>\n\n\n", styles: [".cc-conversations{height:100%;width:100%;box-sizing:border-box;margin-bottom:16px;position:relative}.cc-conversations__selection-view{position:relative}.tail__view{display:flex;flex-direction:column;justify-content:flex-start;align-items:center}.cc-subtitle__text{text-overflow:ellipsis;overflow:hidden;white-space:nowrap}.cc-conversations__menus{position:absolute;right:12px;padding:4px;cursor:pointer}.cc-menus__icon{height:24px;width:24px}.cc-conversations__subtitle-view{display:flex;align-items:center;width:90%;flex-direction:column;justify-content:flex-start}.cc-conversations__subtitle{display:flex;justify-content:flex-start;width:100%;align-items:center;min-height:22px}.cc-conversations__threadview{height:12px;display:flex;justify-content:flex-start;width:100%;align-items:center}.cc-conversations__badge{display:flex;align-items:flex-end;justify-content:flex-end;width:100%;padding-right:8px}\n"] }]
|
|
1299
1356
|
}], ctorParameters: function () { return [{ type: i0.NgZone }, { type: i0.ChangeDetectorRef }, { type: i1.CometChatThemeService }]; }, propDecorators: { subtitleView: [{
|
|
1300
1357
|
type: Input
|
|
1301
1358
|
}], title: [{
|
|
@@ -1401,4 +1458,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImpo
|
|
|
1401
1458
|
}], loggedInUser: [{
|
|
1402
1459
|
type: Input
|
|
1403
1460
|
}] } });
|
|
1404
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tZXRjaGF0LWNvbnZlcnNhdGlvbnMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2hhdC11aWtpdC1hbmd1bGFyL3NyYy9Db21ldENoYXRDb252ZXJzYXRpb25zL2NvbWV0Y2hhdC1jb252ZXJzYXRpb25zL2NvbWV0Y2hhdC1jb252ZXJzYXRpb25zLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NoYXQtdWlraXQtYW5ndWxhci9zcmMvQ29tZXRDaGF0Q29udmVyc2F0aW9ucy9jb21ldGNoYXQtY29udmVyc2F0aW9ucy9jb21ldGNoYXQtY29udmVyc2F0aW9ucy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUwsdUJBQXVCLEVBRXZCLFNBQVMsRUFDVCxLQUFLLEdBT04sTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRWhELE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSxFQUFFLGNBQWMsRUFBQyxpQkFBaUIsRUFBRyxtQkFBbUIsRUFBRSxxQkFBcUIsRUFBQyxxQkFBcUIsRUFBYSxrQkFBa0IsRUFBRSxTQUFTLEVBQUcsYUFBYSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDN04sT0FBTyxFQUFpQixVQUFVLEVBQUUsUUFBUSxFQUFrQixvQkFBb0IsRUFBRSx1QkFBdUIsRUFBOEYsbUJBQW1CLEVBQUUsc0JBQXNCLEVBQUUsMkJBQTJCLEVBQUMsWUFBWSxFQUFFLG1CQUFtQixFQUFDLE1BQU0sNEJBQTRCLENBQUE7QUFDdFYsT0FBTywyQkFBMkIsQ0FBQTtBQUNsQyxPQUFRLEVBQUUsV0FBVyxFQUFFLGFBQWEsRUFBQyxrQkFBa0IsRUFBQyxZQUFZLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBQyxNQUFNLDJCQUEyQixDQUFBO0FBSTdILE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBQzNFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHNDQUFzQyxDQUFDOzs7OztBQUMxRTs7Ozs7Ozs7RUFRRTtBQU9GLE1BQU0sT0FBTywrQkFBK0I7SUFtVDFDLFlBQW9CLE1BQWMsRUFBUyxHQUFzQixFQUFTLFlBQWtDO1FBQXhGLFdBQU0sR0FBTixNQUFNLENBQVE7UUFBUyxRQUFHLEdBQUgsR0FBRyxDQUFtQjtRQUFTLGlCQUFZLEdBQVosWUFBWSxDQUFzQjtRQTlTbkcsVUFBSyxHQUFXLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLHdCQUF3QjtRQUUzRCxzQkFBaUIsR0FBVyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxtQ0FBbUM7UUFDbkYseUJBQW9CLEdBQVksS0FBSyxDQUFDO1FBQ3RDLG1CQUFjLEdBQVksSUFBSSxDQUFDO1FBQy9CLGtCQUFhLEdBQVcsS0FBSyxDQUFDO1FBQzlCLGtCQUFhLEdBQVUsOEJBQThCLENBQUE7UUFDckQsYUFBUSxHQUFVLHlCQUF5QixDQUFDO1FBQzVDLGNBQVMsR0FBVSwwQkFBMEIsQ0FBQztRQUM5QyxnQkFBVyxHQUFnQixZQUFZLENBQUMsV0FBVyxDQUFDO1FBQ3BELFlBQU8sR0FBOEMsQ0FBQyxLQUFrQyxFQUFDLEVBQUU7WUFDbEcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQTtRQUNwQixDQUFDLENBQUE7UUFDUSxhQUFRLEdBQVUseUJBQXlCLENBQUM7UUFDNUMscUJBQWdCLEdBQVMsb0JBQW9CLENBQUM7UUFDOUMsdUJBQWtCLEdBQVUsbUJBQW1CLENBQUM7UUFDaEQsMkJBQXNCLEdBQVUsRUFBRSxDQUFDO1FBQ25DLHVCQUFrQixHQUFrQyxJQUFJLENBQUMsQ0FBQyx1QkFBdUI7UUFDakYsa0JBQWEsR0FBVyxtQkFBbUIsQ0FBQyxDQUFDLDhCQUE4QjtRQUMzRSxlQUFVLEdBQVksSUFBSSxDQUFDLENBQUMsMkJBQTJCO1FBSXZELG1CQUFjLEdBQVUsb0JBQW9CLENBQUE7UUFHNUMsbUJBQWMsR0FBVyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsQ0FBQTtRQUNuRCxtQkFBYyxHQUFXLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBQ3JELG1CQUFjLEdBQW1CLGNBQWMsQ0FBQyxJQUFJLENBQUM7UUFJckQsa0JBQWEsR0FBWSxLQUFLLENBQUM7UUFDL0Isc0JBQWlCLEdBQVcsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQy9DLGNBQVMsR0FBWSxLQUFLLENBQUM7UUFDM0Isa0JBQWEsR0FBa0IsYUFBYSxDQUFDLElBQUksQ0FBQztRQUNsRCw0QkFBdUIsR0FBVyxLQUFLLENBQUM7UUFDeEMsdUJBQWtCLEdBQUcsUUFBUSxDQUFDLHFCQUFxQixDQUFDLENBQUE7UUFDcEQsc0JBQWlCLEdBQVcsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQy9DLHFCQUFnQixHQUFXLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUM5Qyx5QkFBb0IsR0FBVyxRQUFRLENBQUMsNkNBQTZDLENBQUMsQ0FBQztRQUV2RixrQ0FBNkIsR0FBdUI7WUFDM0QsdUJBQXVCLEVBQUUsRUFBRTtZQUMzQixzQkFBc0IsRUFBRSxFQUFFO1lBQzFCLHNCQUFzQixFQUFFLEVBQUU7WUFDMUIscUJBQXFCLEVBQUUsRUFBRTtZQUN6QixxQkFBcUIsRUFBRSxFQUFFO1lBQ3pCLG9CQUFvQixFQUFFLEVBQUU7WUFDeEIsU0FBUyxFQUFFLEVBQUU7WUFDYixVQUFVLEVBQUUsRUFBRTtZQUNkLGVBQWUsRUFBRSxFQUFFO1lBQ25CLGdCQUFnQixFQUFFLEVBQUU7WUFDcEIsVUFBVSxFQUFFLEVBQUU7WUFDZCxNQUFNLEVBQUMsbUJBQW1CO1lBQzFCLE1BQU0sRUFBQyxNQUFNO1lBQ2IsS0FBSyxFQUFDLE1BQU07U0FDYixDQUFBO1FBQ1Esa0JBQWEsR0FBYztZQUNsQyxNQUFNLEVBQUMsTUFBTTtZQUNiLEtBQUssRUFBQyxNQUFNO1lBQ1osVUFBVSxFQUFDLG9CQUFvQjtTQUNoQyxDQUFBO1FBQ1EsZUFBVSxHQUFlO1lBQ2hDLEtBQUssRUFBRSxNQUFNO1lBQ2IsTUFBTSxFQUFFLE1BQU07WUFDZCxVQUFVLEVBQUUsU0FBUztZQUNyQixTQUFTLEVBQUUsT0FBTztZQUNsQixRQUFRLEVBQUUsNEJBQTRCO1lBQ3RDLFlBQVksRUFBQyxNQUFNO1NBQ3BCLENBQUE7UUFDUSxjQUFTLEdBQWM7WUFDOUIsUUFBUSxFQUFFLDRCQUE0QjtZQUN0QyxTQUFTLEVBQUUsd0JBQXdCO1NBQ3BDLENBQUE7UUFDUSx1QkFBa0IsR0FBdUI7WUFDaEQsS0FBSyxFQUFDLEVBQUU7WUFDUixNQUFNLEVBQUMsRUFBRTtZQUNULE1BQU0sRUFBQyxFQUFFO1lBQ1QsWUFBWSxFQUFDLEVBQUU7U0FDaEIsQ0FBQTtRQUNRLGtCQUFhLEdBQWtCO1lBQ3RDLE1BQU0sRUFBRSxNQUFNO1lBQ2QsS0FBSyxFQUFFLE1BQU07WUFDYixVQUFVLEVBQUUsRUFBRTtZQUNkLGdCQUFnQixFQUFFLEVBQUU7WUFDcEIsWUFBWSxFQUFFLE1BQU07WUFDcEIsU0FBUyxFQUFFLEVBQUU7WUFDYixVQUFVLEVBQUUsRUFBRTtZQUNkLE1BQU0sRUFBRSxFQUFFO1lBQ1YsY0FBYyxFQUFDLG9CQUFvQjtTQUNwQyxDQUFDO1FBQ08seUJBQW9CLEdBQVE7WUFDbkMsTUFBTSxFQUFFLE1BQU07WUFDZCxLQUFLLEVBQUUsTUFBTTtZQUNiLFlBQVksRUFBRSxNQUFNO1NBQ3JCLENBQUM7UUFDTyx3QkFBbUIsR0FBVSxRQUFRLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDbkQsd0JBQW1CLEdBQVUsUUFBUSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ3JELGdCQUFXLEdBQWdCLEVBQUUsQ0FBQztRQUM5QixpQkFBWSxHQUFnQixFQUFFLENBQUE7UUFtQnZDLGNBQVMsR0FBTztZQUNkLFFBQVEsRUFBQyxXQUFXO1lBQ3BCLE1BQU0sRUFBQyxNQUFNO1lBQ2IsS0FBSyxFQUFDLE1BQU07U0FDYixDQUFBO1FBQ0QsY0FBUyxHQUFhLElBQUksU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFBO1FBQ3ZDLGNBQVMsR0FBRztZQUNWLEtBQUssRUFBRSxFQUFFO1lBQ1QsTUFBTSxFQUFFLEVBQUU7WUFDVixNQUFNLEVBQUUsTUFBTTtZQUNkLFlBQVksRUFBRSxLQUFLO1lBQ25CLFVBQVUsRUFBRSxhQUFhO1lBQ3pCLFFBQVEsRUFBRSxFQUFFO1lBQ1osU0FBUyxFQUFFLE9BQU87WUFDbEIsUUFBUSxFQUFFLE1BQU07WUFDaEIsY0FBYyxFQUFFLGFBQWE7WUFDN0IsVUFBVSxFQUFFLE1BQU07WUFDbEIsZ0JBQWdCLEVBQUUsR0FBRztZQUNyQixZQUFZLEVBQUUsTUFBTTtZQUNwQixhQUFhLEVBQUUsTUFBTTtZQUNyQixhQUFhLEVBQUUsbUJBQW1CO1lBQ2xDLG1CQUFtQixFQUFFLEtBQUs7WUFDMUIsaUJBQWlCLEVBQUUsT0FBTztTQUMzQixDQUFBO1FBRU0scUJBQWdCLEdBQVcsd0JBQXdCLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUMzRSxtQkFBYyxHQUFHLE9BQU8sR0FBRSxJQUFJLElBQUksRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ3RELHNCQUFpQixHQUF5QixhQUFhLENBQUM7UUFDakQsaUJBQVksR0FBWSxLQUFLLENBQUM7UUFDckMsK0NBQStDO1FBQ3hDLFlBQU8sR0FBWSxLQUFLLENBQUM7UUFDekIsY0FBUyxHQUFZLElBQUksQ0FBQztRQUMxQixVQUFLLEdBQVcsTUFBTSxDQUFDLE9BQU8sQ0FBQztRQUMvQixnQkFBVyxHQUFRO1lBQ3hCLE1BQU0sRUFBRSxFQUFFO1lBQ1YsT0FBTyxFQUFFLEVBQUU7WUFDWCxRQUFRLEVBQUUsU0FBUztZQUNuQixNQUFNLEVBQUUsRUFBRTtTQUNYLENBQUE7UUFDTSxVQUFLLEdBQVUsRUFBRSxDQUFDO1FBQ2xCLFlBQU8sR0FBWSxLQUFLLENBQUM7UUFDekIscUJBQWdCLEdBQTZCLEVBQUUsQ0FBQztRQUNoRCxxQkFBZ0IsR0FBWSxLQUFLLENBQUM7UUFDbEMsb0JBQWUsR0FBWSxLQUFLLENBQUM7UUFFakMsc0JBQWlCLEdBQVksS0FBSyxDQUFDO1FBQ25DLDRCQUF1QixHQUFrQyxJQUFJLENBQUM7UUFDOUQsMkJBQXNCLEdBQVcsV0FBVyxHQUFHLElBQUksSUFBSSxFQUFFLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDcEUsbUJBQWMsR0FBVyxnQkFBZ0IsR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ2pFLG9CQUFlLEdBQVcsaUJBQWlCLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNuRSxrQkFBYSxHQUF5QixFQUFFLENBQUM7UUFDaEQsZ0JBQVcsR0FBVyxLQUFLLENBQUM7UUFDNUIsbUJBQWMsR0FBVyxLQUFLLENBQUM7UUFDL0IscUJBQWdCLEdBQVcsS0FBSyxDQUFBO1FBQ2hDLG1CQUFjLEdBQVcsS0FBSyxDQUFBO1FBQzlCLGtCQUFhLEdBQVUseUJBQXlCLENBQUE7UUFDekMsdUJBQWtCLEdBQXVCO1lBQzlDLE1BQU0sRUFBRSxNQUFNO1lBQ2QsS0FBSyxFQUFFLE1BQU07WUFDYixZQUFZLEVBQUUsS0FBSztTQUNwQixDQUFBO1FBRUQsZUFBVSxHQUFhO1lBQ3JCLE1BQU0sRUFBQyxPQUFPO1lBQ2QsS0FBSyxFQUFDLE9BQU87U0FFZCxDQUFBO1FBQ0Q7O1lBRUk7UUFDRyxhQUFRLEdBQUcsUUFBUSxDQUFDO1FBSzNCOztVQUVFO1FBQ0Y7OztXQUdHO1FBQ0gsOEJBQXlCLEdBQXVCLEdBQUUsRUFBRTtZQUNuRCxJQUFJLENBQUMsc0JBQXNCLENBQUMsSUFBSSxDQUFDLHVCQUF3QixDQUFDLENBQUE7UUFDM0QsQ0FBQyxDQUFBO1FBQ0Qsc0NBQXNDO1FBQ3RDLG1CQUFjLEdBQUcsR0FBRyxFQUFFO1lBQ2xCLElBQUksQ0FBQywwQkFBMEIsRUFBRSxDQUFDO1FBQ3RDLENBQUMsQ0FBQTtRQUNELDRCQUF1QixHQUFHLENBQUMsWUFBb0MsRUFBRSxFQUFFO1lBQ2pFLElBQUksWUFBWSxDQUFDLG1CQUFtQixFQUFFLElBQUksdUJBQXVCLENBQUMsbUJBQW1CLENBQUMsS0FBSyxFQUFFO2dCQUMzRixPQUFPO29CQUNMLE1BQU0sRUFBRSxNQUFNO29CQUNkLEtBQUssRUFBRSxNQUFNO29CQUNiLFlBQVksRUFBRSxNQUFNO2lCQUNyQixDQUFBO2FBQ0Y7aUJBQ0k7Z0JBQ0gsT0FBTyxJQUFJLENBQUMsb0JBQW9CLENBQUE7YUFDakM7UUFDSCxDQUFDLENBQUE7UUFpQ0QsZ0JBQVcsR0FBRyxDQUFDLGtCQUEwQyxFQUFFLEVBQUU7WUFDM0QsSUFBSSxJQUFJLENBQUMsZUFBZSxFQUFFO2dCQUN4QixNQUFNLFFBQVEsR0FBSSxrQkFBMEIsRUFBRSxnQkFBZ0IsRUFBRSxJQUFJLElBQUksSUFBSSxDQUFDLGVBQWUsQ0FBQyxhQUFhLEVBQUUsQ0FBQztnQkFDN0csSUFBSSxRQUFRLEVBQUU7b0JBQ1osT0FBTyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsU0FBUyxFQUFFLENBQUMsT0FBTyxFQUFFLElBQUksSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7aUJBQ3BGO3FCQUFNLElBQUssa0JBQTBCLEVBQUUsZ0JBQWdCLEVBQUUsR0FBRyxJQUFJLElBQUksQ0FBQyxlQUFlLEVBQUUsU0FBUyxFQUFFLENBQUMsTUFBTSxFQUFFLElBQUksSUFBSSxDQUFDLGVBQWUsQ0FBQyxlQUFlLEVBQUUsS0FBSyx1QkFBdUIsQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLEVBQUU7b0JBQzNNLE9BQU8sSUFBSSxDQUFDLG1CQUFtQixDQUFDO2lCQUNqQzthQUNGO1lBQ0QsSUFBSSxRQUFRLEdBQUksZ0JBQWdCLENBQUMsYUFBYSxFQUFFLENBQUMsMEJBQTBCLENBQUMsa0JBQWtCLEVBQUUsSUFBSSxDQUFDLFlBQWEsQ0FBQyxDQUFBO1lBQ25ILElBQUksSUFBSSxHQUFHLGtCQUFrQixFQUFFLGNBQWMsRUFBRSxFQUFFLE9BQU8sRUFBRSxJQUFJLHVCQUF1QixDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFBO1lBQ3hILE9BQU8sa0JBQWtCLEVBQUUsY0FBYyxFQUFFLEVBQUUsV0FBVyxFQUFFLElBQUksdUJBQXVCLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFBO1FBQ3pJLENBQUMsQ0FBQTtRQWtCRCxzQ0FBc0M7UUFDdEMsa0JBQWEsR0FBRyxHQUFHLEVBQUU7WUFDbkIsSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUE7WUFDekIsSUFBSSxDQUFDLHVCQUF1QixHQUFHLElBQUksQ0FBQTtZQUNuQyxJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxDQUFBO1FBQzFCLENBQUMsQ0FBQTtRQUNELHNCQUFpQixHQUFHLENBQUMsWUFBb0MsRUFBRSxFQUFFO1lBQzNELElBQUksT0FBTyxHQUFHLG1CQUFtQixDQUFDLGdCQUFnQixDQUFDLFlBQVksQ0FBQyxjQUFjLEVBQUUsQ0FBQyxDQUFBO1lBQ2pGLE9BQU8sT0FBTyxDQUFBO1FBQ2hCLENBQUMsQ0FBQTtRQUlELGlCQUFZLEdBQUc7WUFDYixVQUFVLEVBQUUsYUFBYTtZQUN6QixNQUFNLEVBQUUsTUFBTTtTQUNmLENBQUE7UUFDRCxhQUFRLEdBQVksSUFBSSxDQUFDO1FBQ3pCLHFCQUFnQixHQUFZLEtBQUssQ0FBQztRQXdnQmxDOztXQUVHO1FBQ0gsb0JBQWUsR0FBRyxHQUFHLEVBQUU7WUFDckIsSUFBRyxDQUFDLElBQUksQ0FBQywyQkFBMkIsSUFBSSxDQUFDLElBQUksQ0FBQywyQkFBMkIsRUFBRSxVQUFVLENBQUMsSUFBSyxDQUFDLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxVQUFVLENBQUMsWUFBWSxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsMkJBQTJCLENBQUMsVUFBVSxDQUFDLFlBQVksSUFBSyxJQUFJLENBQUMsMkJBQTJCLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxFQUFDO2dCQUNqUixJQUFJLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUE7Z0JBQzNCLElBQUk7b0JBQ0YsU0FBUyxDQUFDLGVBQWUsRUFBRTt5QkFDeEIsSUFBSSxDQUFDLENBQUMsSUFBMkIsRUFBRSxFQUFFO3dCQUNwQyxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQzt3QkFDekIsSUFBSSxDQUFDLHFCQUFxQixFQUFFOzZCQUN6QixJQUFJLENBQUMsQ0FBQyxnQkFBMEMsRUFBRSxFQUFFOzRCQUNuRCxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsQ0FBQyxZQUFvQyxFQUFFLEVBQUU7Z0NBQ2hFLElBQ0UsSUFBSSxDQUFDLGtCQUFrQixJQUFJLElBQUksQ0FBQyxrQkFBa0IsS0FBSyxJQUFJO29DQUMzRCxJQUFJLENBQUMsa0JBQWtCLENBQUMsbUJBQW1CLEVBQUUsS0FBSyxZQUFZLENBQUMsbUJBQW1CLEVBQUUsRUFDcEY7b0NBQ0EsSUFDRSxJQUFJLENBQUMsa0JBQWtCLENBQUMsaUJBQWlCLEVBQUUsSUFBSSxZQUFZLENBQUMsaUJBQWlCLEVBQUUsRUFDL0U7d0NBQ0EsWUFBWSxDQUFDLHFCQUFxQixDQUFDLENBQUMsQ0FBQyxDQUFDO3FDQUN2QztpQ0FDRjs0QkFDSCxDQUFDLENBQUMsQ0FBQzs0QkFDSCxJQUFJLENBQUMsZ0JBQWdCLEdBQUc7Z0NBQ3RCLEdBQUcsSUFBSSxDQUFDLGdCQUFnQjtnQ0FDeEIsR0FBRyxnQkFBZ0I7NkJBQ3BCLENBQUM7NEJBQ0YsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLGdCQUFnQixFQUFFLE1BQU0sSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sS0FBSyxDQUFDLElBQUksSUFBSSxDQUFDLGdCQUFnQixFQUFFLE1BQU0sSUFBSSxDQUFDLENBQUMsRUFBRTtnQ0FDakosSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFO29DQUNuQixJQUFHLElBQUksQ0FBQyxLQUFLLElBQUksTUFBTSxDQUFDLEtBQUssRUFBQzt3Q0FDN0IsSUFBSSxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFBO3dDQUN6QixJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxDQUFBO3FDQUN4QjtvQ0FDQyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsNkJBQTZCO2dDQUNsRCxDQUFDLENBQUMsQ0FBQzs2QkFDTjtpQ0FBTTtnQ0FDTCxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUU7b0NBQ25CLElBQUcsSUFBSSxDQUFDLEtBQUssSUFBSSxNQUFNLENBQUMsTUFBTSxFQUFDO3dDQUM5QixJQUFJLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUE7d0NBQzFCLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUE7cUNBQ3hCO29DQUNDLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyw2QkFBNkI7Z0NBQ2xELENBQUMsQ0FBQyxDQUFDOzZCQUVOO3dCQUNILENBQUMsQ0FBQzs2QkFDRCxLQUFLLENBQUMsQ0FBQyxLQUFtQyxFQUFFLEVBQUU7NEJBQzdDLElBQUksQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQTs0QkFDekIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQzt3QkFDM0IsQ0FBQyxDQUFDLENBQUM7b0JBQ1AsQ0FBQyxDQUFDO3lCQUNELEtBQUssQ0FBQyxDQUFDLEtBQW1DLEVBQUUsRUFBRTt3QkFDN0MsSUFBRyxJQUFJLENBQUMsT0FBTyxFQUFDOzRCQUNkLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUE7eUJBQ3BCO3dCQUNELElBQUksQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQTt3QkFDekIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQztvQkFDM0IsQ0FBQyxDQUFDLENBQUM7aUJBQ047Z0JBQUMsT0FBTyxLQUFVLEVBQUU7b0JBQ2IsSUFBRyxJQUFJLENBQUMsT0FBTyxFQUFDO3dCQUNwQixJQUFJLENBQUMsT0FBTyxDQUFDLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUE7cUJBQ3hDO2lCQUNGO2FBQ0Y7aUJBQ0c7Z0JBQ0YsSUFBSSxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDO2FBQzVCO1FBQ0gsQ0FBQyxDQUFBO1FBZUQ7O1dBRUc7UUFDSCx3QkFBbUIsR0FBRyxDQUNwQixHQUFRLEVBQ1IsT0FBZ0QsSUFBSSxFQUNwRCxPQUE4QixFQUM5QixPQUFPLEdBQUcsSUFBSSxFQUNkLEVBQUU7WUFDRixJQUFJO2dCQUNGLFFBQVEsR0FBRyxFQUFFO29CQUNYLEtBQUssdUJBQXVCLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQztvQkFDbkQsS0FBSyx1QkFBdUIsQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUM7d0JBQ2xELElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7d0JBQ3RCLE1BQU07cUJBQ1A7b0JBQ0QsS0FBSyx1QkFBdUIsQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLENBQUM7d0JBQ2xELElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUE7d0JBQ3ZDLE1BQU07cUJBQ1A7b0JBQ0QsS0FBSyx1QkFBdUIsQ0FBQyxRQUFRLENBQUMsaUJBQWlCLENBQUMsQ0FBQzt3QkFDdkQsSUFBSSxDQUFDLGtCQUFrQixDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQTt3QkFDdkMsTUFBTTtxQkFDUDtvQkFDRCxLQUFLLHVCQUF1QixDQUFDLFFBQVEsQ0FBQyxxQkFBcUIsQ0FBQztvQkFDNUQsS0FBSyx1QkFBdUIsQ0FBQyxRQUFRLENBQUMsc0JBQXNCLENBQUM7b0JBQzdELEtBQUssdUJBQXVCLENBQUMsUUFBUSxDQUFDLHVCQUF1Qjt3QkFDM0QsSUFBRyxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUM7NEJBQ3RCLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxPQUFPLENBQUMsQ0FBQzt5QkFDdEM7d0JBQ0QsSUFBSSxDQUFDLGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxDQUFDO3dCQUNqQyxNQUFNO29CQUNSLEtBQUssdUJBQXVCLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDO29CQUNyRCxLQUFLLHVCQUF1QixDQUFDLGlCQUFpQixDQUFDLE1BQU0sQ0FBQztvQkFDdEQsS0FBSyx1QkFBdUIsQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLENBQUM7b0JBQ3RELEtBQUssdUJBQXVCLENBQUMsaUJBQWlCLENBQUMsTUFBTSxDQUFDO29CQUN0RCxLQUFLLHVCQUF1QixDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQztvQkFDcEQsS0FBSyx1QkFBdUIsQ0FBQyxpQkFBaUIsQ0FBQyxRQUFRLENBQUM7b0JBQ3hELEtBQUssdUJBQXVCLENBQUMsaUJBQWlCLENBQUMsWUFBWTt3QkFDekQsSUFBSSxDQUFDLGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxDQUFBO3dCQUNoQyxNQUFNO29CQUNSLEtBQUssdUJBQXVCLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQztvQkFDckQsS0FBSyx1QkFBdUIsQ0FBQyxRQUFRLENBQUMsZUFBZTt3QkFDbkQsSUFBSSxDQUFDLHlCQUF5QixDQUFDLE9BQU8sQ0FBQyxDQUFDO3dCQUN4QyxNQUFNO2lCQUNUO2FBQ0Y7WUFBQyxPQUFPLEtBQVUsRUFBRTtnQkFDYixJQUFHLElBQUksQ0FBQyxPQUFPLEVBQUM7b0JBQ3BCLElBQUksQ0FBQyxPQUFPLENBQUMsa0JBQWtCLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQTtpQkFDeEM7YUFDRjtRQUNILENBQUMsQ0FBQztRQUNGOztXQUVHO1FBQ0gsMkJBQXNCLEdBQUcsQ0FBQyxPQUE4QixFQUFFLEVBQUU7WUFDMUQsdURBQXVEO1lBQ3ZELElBQUksSUFBSSxDQUFDLGtCQUFrQixFQUFFLG1CQUFtQixFQUFFLElBQUksdUJBQXVCLENBQUMsbUJBQW1CLENBQUMsSUFBSSxFQUFFO2dCQUN0RyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLElBQUssSUFBSSxDQUFDLGtCQUFrQixFQUFFLG1CQUFtQixFQUFxQixFQUFFLE1BQU0sRUFBRSxLQUFLLE9BQU8sRUFBRSxTQUFTLEVBQUUsRUFBRSxNQUFNLEVBQUUsQ0FBQzt1QkFDNUksQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDLGFBQWEsQ0FBQyxFQUFFO29CQUMzQyxTQUFTLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxDQUFBO2lCQUNuQzthQUNGO2lCQUNJO2dCQUNILElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxrQkFBa0IsSUFBSyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsbUJBQW1CLEVBQXNCLEVBQUUsT0FBTyxFQUFFLEtBQUssT0FBTyxFQUFFLGFBQWEsRUFBRSxDQUFDO3VCQUN4SSxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUMsYUFBYSxDQUFDLEVBQUU7b0JBQzNDLFNBQVMsQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLENBQUE7aUJBQ25DO2FBQ0Y7UUFDSCxDQUFDLENBQUM7UUFDRjs7V0FFRztRQUNILFlBQU8sR0FBRyxHQUFHLEVBQUU7WUFDYixPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFBO1FBQy9DLENBQUMsQ0FBQTtRQTZSRDs7O1dBR0c7UUFDSCwyQkFBc0IsR0FBRyxDQUFDLFlBQW9DLEVBQUUsRUFBRTtZQUNoRSxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQztZQUN6QixJQUFJLENBQUMsdUJBQXVCLEdBQUcsWUFBWSxDQUFDO1lBQzVDLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUE7UUFDMUIsQ0FBQyxDQUFBO1FBMERELFdBQU0sR0FBUTtZQUNaLFlBQVksRUFBRSxHQUFHLEVBQUU7Z0JBQ2pCLE9BQU87b0JBQ0wsTUFBTSxFQUFFLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNO29CQUN0QyxLQUFLLEVBQUUsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEtBQUs7b0JBQ3BDLE1BQU0sRUFBRSxJQUFJLENBQUMsa0JBQWtCLENBQUMsTUFBTSxJQUFJLGFBQWEsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLFlBQVksRUFBRSxFQUFFO29CQUN2RyxZQUFZLEVBQUUsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFlBQVk7b0JBQ2xELFVBQVUsRUFBRSxJQUFJLENBQUMsa0JBQWtCLENBQUMsVUFBVSxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxhQUFhLEVBQUU7aUJBQ2xHLENBQUE7WUFDSCxDQUFDO1NBQ0YsQ0FBQTtRQUNELGtCQUFhLEdBQUcsQ0FBQyxZQUFnQixFQUFFLEVBQUU7WUFDcEMsSUFBRyxJQUFJLENBQUMsZUFBZSxJQUFJLENBQUUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxlQUFlLEVBQUUsSUFBSSx1QkFBdUIsQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLGVBQWUsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxNQUFNLEVBQUUsSUFBSSxZQUFZLENBQUMsZ0JBQWdCLEVBQUUsR0FBRyxJQUFJLElBQUksQ0FBQyxlQUFlLENBQUMsYUFBYSxFQUFFLElBQUksWUFBWSxDQUFDLGdCQUFnQixFQUFFLElBQUksQ0FBQyxFQUFDO2dCQUN4UixPQUFPO29CQUNMLElBQUksRUFBRSxJQUFJLENBQUMsa0JBQWtCLENBQUMsdUJBQXVCO29CQUNyRCxLQUFLLEVBQUUsSUFBSSxDQUFDLGtCQUFrQixDQUFDLHVCQUF1QjtpQkFDdkQsQ0FBQTthQUNIO1lBQ0EsT0FBTztnQkFDTCxJQUFJLEVBQUssSUFBSSxDQUFDLGtCQUFrQixDQUFDLG1CQUFtQjtnQkFDcEQsS0FBSyxFQUFJLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxvQkFBb0I7YUFDdEQsQ0FBQTtRQUNILENBQUMsQ0FBQTtRQUNELDZCQUF3QixHQUFHLEdBQUcsRUFBRTtZQUM5QixPQUFPO2dCQUNMLFFBQVEsRUFBRSxJQUFJLENBQUMsa0JBQWtCLENBQUMsdUJBQXVCLElBQUksVUFBVSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUM7Z0JBQ3BILFNBQVMsRUFBRSxJQUFJLENBQUMsa0JBQWtCLENBQUMsd0JBQXdCLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLFlBQVksRUFBRTthQUM5RyxDQUFDO1FBQ0osQ0FBQyxDQUFBO0lBOWhDRCxDQUFDO0lBbEZEOztLQUVDO0lBQ0QsZUFBZSxDQUFDLFlBQW9DO1FBQ2xELElBQUksSUFBSSxHQUFrQixZQUFZLENBQUMsbUJBQW1CLEVBQW9CLENBQUE7UUFDOUUsSUFBSSxZQUFZLENBQUMsbUJBQW1CLEVBQUUsSUFBSSx1QkFBdUIsQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsb0JBQW9CLEVBQUU7WUFDeEgsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFBO1NBQzFDO2FBQ0k7WUFDSCxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsWUFBWSxDQUFDLG1CQUFtQixFQUFFLENBQUMsQ0FBQTtTQUM1RDtJQUNILENBQUM7SUFDRCxnQkFBZ0IsQ0FBQyxhQUFvQztRQUNuRCxJQUFJLFdBQVcsQ0FBQTtRQUNmLHFCQUFxQjtRQUNyQixNQUFNLE9BQU8sR0FBRyxxQkFBcUIsQ0FBQyw2QkFBNkIsQ0FBQyxhQUFhLEVBQUUsWUFBWSxDQUFDLENBQUM7UUFDakcsSUFBSSxPQUFPLElBQUkscUJBQXFCLENBQUMsbUJBQW1CLENBQUMsT0FBTyxFQUFFLGdCQUFnQixDQUFDLElBQUkscUJBQXFCLENBQUMsbUJBQW1CLENBQUMsT0FBTyxFQUFFLFFBQVEsQ0FBQyxJQUFJLE9BQU8sQ0FBQyxNQUFNLEtBQUssS0FBSyxFQUFFO1lBQy9LLFdBQVcsR0FBRyxPQUFPLENBQUMsY0FBYyxDQUFDO1NBQ3RDO1FBQ0QsNkJBQTZCO1FBQzdCLE1BQU0sVUFBVSxHQUFHLHFCQUFxQixDQUFDLDZCQUE2QixDQUFDLGFBQWEsRUFBRSxjQUFjLENBQUMsQ0FBQztRQUN0RyxJQUFJLFVBQVUsSUFBSSxxQkFBcUIsQ0FBQyxtQkFBbUIsQ0FBQyxVQUFVLEVBQUUsTUFBTSxDQUFDLElBQUkscUJBQXFCLENBQUMsbUJBQW1CLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxnQkFBZ0IsQ0FBQyxJQUFJLHFCQUFxQixDQUFDLG1CQUFtQixDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsZ0JBQWdCLENBQUMsSUFBSSxVQUFVLENBQUMsSUFBSSxDQUFDLGNBQWMsS0FBSyxLQUFLLEVBQUU7WUFDM1IsV0FBVyxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDO1NBQzlDO1FBQ0QsMkJBQTJCO1FBQzNCLE1BQU0sV0FBVyxHQUFHLHFCQUFxQixDQUFDLDZCQUE2QixDQUFDLGFBQWEsRUFBRSxrQkFBa0IsQ0FBQyxDQUFDO1FBQzNHLElBQUksV0FBVyxJQUFJLHFCQUFxQixDQUFDLG1CQUFtQixDQUFDLFdBQVcsRUFBRSxXQUFXLENBQUMsSUFBSSxxQkFBcUIsQ0FBQyxtQkFBbUIsQ0FBQyxXQUFXLEVBQUUsZUFBZSxDQUFDLElBQUksV0FBVyxDQUFDLFNBQVMsS0FBSyxLQUFLLEVBQUU7WUFDcE0sV0FBVyxHQUFHLFdBQVcsQ0FBQyxhQUFhLENBQUM7U0FDekM7UUFDRCxPQUFPLFdBQVcsSUFBSyxhQUFxQixDQUFDLElBQUksQ0FBQTtJQUNuRCxDQUFDO0lBY0QsY0FBYyxDQUFDLFlBQW9DO1FBQ2pELElBQUksS0FBSyxHQUFXLEVBQUUsQ0FBQztRQUN2QixJQUFJLFlBQVksQ0FBQyxtQkFBbUIsRUFBRSxJQUFJLHVCQUF1QixDQUFDLG1CQUFtQixDQUFDLEtBQUssRUFBRTtZQUMzRixRQUFRLFlBQVksQ0FBQyxtQkFBbUIsRUFBRSxFQUFFO2dCQUMxQyxLQUFLLHVCQUF1QixDQUFDLFVBQVUsQ0FBQyxRQUFRO29CQUM5QyxLQUFLLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDO29CQUNoQyxNQUFNO2dCQUNSLEtBQUssdUJBQXVCLENBQUMsVUFBVSxDQUFDLE9BQU87b0JBQzdDLEtBQUssR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUM7b0JBQzlCLE1BQU07Z0JBQ1I7b0JBQ0UsS0FBSyxHQUFHLEVBQUUsQ0FBQTtvQkFDVixNQUFNO2FBQ1Q7U0FDRjtRQUNELE9BQU8sS0FBSyxDQUFBO0lBQ2QsQ0FBQztJQVdELE9BQU87UUFDTCxPQUFPLElBQUksQ0FBQyxXQUFXLElBQUksWUFBWSxDQUFDLFdBQVcsQ0FBQTtJQUNyRCxDQUFDO0lBV0QsUUFBUTtRQUNOLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUNyQixJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQTtRQUM1QixJQUFHLElBQUksQ0FBQywyQkFBMkIsRUFBQztZQUNsQyxJQUFJLENBQUMsMkJBQTJCLEVBQUUsS0FBSyxFQUFFLENBQUE7U0FDMUM7YUFDRztZQUNGLElBQUksQ0FBQywyQkFBMkIsR0FBRyxJQUFJLFNBQVMsQ0FBQywyQkFBMkIsRUFBRSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUE7U0FDNUc7UUFDRyxJQUFJLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUM7UUFDNUIsSUFBSSxDQUFDLHNCQUFzQixFQUFFLENBQUM7UUFDOUIsSUFBSTtZQUNGLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztZQUN2QixJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO1NBQ2hEO1FBQUMsT0FBTyxLQUFVLEVBQUU7WUFDbkIsSUFBRyxJQUFJLENBQUMsT0FBTyxFQUFDO2dCQUNkLElBQUksQ0FBQyxPQUFPLENBQUMsa0JBQWtCLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQTthQUN4QztTQUNGO1FBQ0QsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQTtJQUMxQixDQUFDO0lBQ0gsd0JBQXdCLENBQUMsWUFBbUM7UUFDMUQsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxDQUFDLE9BQStCLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxpQkFBaUIsRUFBRSxJQUFJLFlBQVksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDLENBQUM7UUFDbEosSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLFlBQVksQ0FBQyxDQUFDO1FBQ3JELElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUE7SUFDMUIsQ0FBQztJQUNDLGlCQUFpQjtRQUNmLElBQUksQ0FBQyx5QkFBeUIsR0FBRyxvQkFBb0IsQ0FBQyx5QkFBeUIsQ0FBQyxTQUFTLENBQUMsQ0FBQyxJQUE2QixFQUFDLEVBQUU7WUFDekgsSUFBSSxZQUFZLEdBQUcsSUFBSSxDQUFDLHdCQUF3QixDQUFDLElBQUksQ0FBQyxLQUFNLENBQUMsQ0FBQTtZQUM3RCxJQUFHLFlBQVksRUFBQztnQkFDZCxZQUFZLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQTtnQkFDekMsSUFBSSxDQUFDLHdCQUF3QixDQUFDLFlBQVksQ0FBQyxDQUFBO2FBQzVDO1FBQ0gsQ0FBQyxDQUFDLENBQUE7UUFDRixJQUFJLENBQUMsa0JBQWtCLEdBQUcsb0JBQW9CLENBQUMsa0JBQWtCLENBQUMsU0FBUyxDQUFDLENBQUMsSUFBc0IsRUFBQyxFQUFFO1lBQ3BHLElBQUksS0FBSyxHQUFtQixJQUFJLENBQUMsV0FBWSxDQUFBO1lBQzdDLElBQUksYUFBYSxHQUFzQixJQUFJLENBQUMsUUFBUyxDQUFBO1lBQ3JELElBQUksWUFBWSxHQUFpQyxJQUFJLENBQUMsd0JBQXdCLENBQUMsSUFBSSxDQUFDLFdBQVksQ0FBQyxDQUFBO1lBQ2pHLFlBQVksRUFBRSxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsQ0FBQTtZQUN4QyxZQUFZLEVBQUUsY0FBYyxDQUFDLGFBQWEsQ0FBQyxhQUFhLEVBQUUsTUFBTSxHQUFFLENBQUMsQ0FBQyxDQUFDLENBQUE7WUFDckUsSUFBSSxDQUFDLHdCQUF3QixDQUFDLFlBQWEsQ0FBQyxDQUFBO1FBQzlDLENBQUMsQ0FBQyxDQUFBO1FBQ0YsSUFBSSxDQUFDLG1CQUFtQixHQUFHLG9CQUFvQixDQUFDLG1CQUFtQixDQUFDLFNBQVMsQ0FBQyxDQUFDLElBQTZCLEVBQUMsRUFBRTtZQUMxRyxJQUFJLFlBQVksR0FBRyxJQUFJLENBQUMsd0JBQXdCLENBQUMsSUFBSSxDQUFDLFVBQVcsQ0FBQyxDQUFBO1lBQ2xFLElBQUcsWUFBWSxFQUFDO2dCQUNkLFlBQVksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFBO2dCQUN6QyxJQUFJLENBQUMsd0JBQXdCLENBQUMsWUFBWSxDQUFDLENBQUE7YUFDNUM7UUFDTixDQUFDLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxtQkFBbUIsR0FBRyxvQkFBb0IsQ0FBQyxtQkFBbUIsQ0FBQyxTQUFTLENBQUMsQ0FBQyxJQUE2QixFQUFDLEVBQUU7WUFDN0csSUFBSSxZQUFZLEdBQUcsSUFBSSxDQUFDLHdCQUF3QixDQUFDLElBQUksQ0FBQyxVQUFXLENBQUMsQ0FBQTtZQUNsRSxJQUFHLFlBQVksRUFBQztnQkFDZCxZQUFZLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQTtnQkFDekMsSUFBSSxDQUFDLHdCQUF3QixDQUFDLFlBQVksQ0FBQyxDQUFBO2FBQzVDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsY0FBYyxHQUFHLG9CQUFvQixDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxJQUFvQixFQUFDLEVBQUU7WUFDMUYsSUFBSSxZQUFZLEdBQWlDLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxJQUFJLENBQUMsQ0FBQTtZQUNwRixJQUFHLFlBQVksRUFBQztnQkFDakIsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFlBQVksQ0FBQyxDQUFBO2FBQ25DO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsV0FBVyxHQUFHLG9CQUFvQixDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxJQUFlLEVBQUMsRUFBRTtZQUUvRSxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLE9BQVEsQ0FBQyxDQUFBO1lBQ3RDLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDM0IsQ0FBQyxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsYUFBYSxHQUFHLG1CQUFtQixDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxJQUFtQixFQUFDLEVBQUU7WUFDdEYsSUFBSSxZQUFZLEdBQWlDLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxJQUFJLENBQUMsQ0FBQTtZQUNuRixJQUFHLFlBQVksRUFBQztnQkFDZCxJQUFJLENBQUMsa0JBQWtCLENBQUMsWUFBWSxDQUFDLENBQUE7YUFDbkM7UUFDTixDQUFDLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxhQUFhLEdBQUcsc0JBQXNCLENBQUMsZUFBZSxDQUFDLFNBQVMsQ0FBQyxDQUFDLE1BQWlCLEVBQUUsRUFBRTtZQUMxRixJQUFJLE9BQU8sR0FBMEIsTUFBTSxDQUFDLE9BQVEsQ0FBQTtZQUNwRCxJQUFHLE1BQU0sQ0FBQyxNQUFNLElBQUksYUFBYSxDQUFDLE9BQU8sRUFBQztnQkFDeEMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLE9BQWdDLENBQUMsQ0FBQTthQUMzRDtRQUNKLENBQUMsQ0FBQyxDQUFBO1FBQ0YsSUFBSSxDQUFDLGFBQWEsR0FBRyxzQkFBc0IsQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLENBQUMsR0FBYyxFQUFFLEVBQUU7WUFDckYsSUFBSSxPQUFPLEdBQTBCLEdBQUcsQ0FBQyxPQUFRLENBQUE7WUFDakQsSUFBRyxHQUFHLENBQUMsTUFBTSxJQUFJLGFBQWEsQ0FBQyxPQUFPLEVBQUM7Z0JBQ3JDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxPQUFPLENBQUMsQ0FBQTthQUNqQztRQUNILENBQUMsQ0FBQyxDQUFBO1FBQ0YsSUFBSSxDQUFDLGVBQWUsR0FBRyxzQkFBc0IsQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsQ0FBQyxhQUFvQyxFQUFFLEVBQUU7WUFDOUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLGFBQWEsQ0FBQyxDQUFBO1lBQ3RDLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDN0IsQ0FBQyxDQUFDLENBQUE7UUFDRixJQUFJLENBQUMsYUFBYSxHQUFHLHNCQUFzQixDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxhQUFvQyxFQUFFLEVBQUU7WUFDOUcsU0FBUyxDQUFDLGVBQWUsQ0FBQywwQkFBMEIsQ0FBQyxhQUFhLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxZQUFtQyxFQUFDLEVBQUU7Z0JBQzlHLElBQUcsWUFBWSxJQUFLLElBQUksQ0FBQyxrQkFBa0IsSUFBSSxZQUFZLEVBQUUsaUJBQWlCLEVBQUUsSUFBSSxJQUFJLENBQUMsa0JBQWtCLEVBQUUsaUJBQWlCLEVBQUUsRUFBQztvQkFDL0gsSUFBSSxDQUFDLG1CQUFtQixDQUFDLGFBQXNDLENBQUMsQ0FBQTtvQkFDaEUsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7aUJBQ3pCO1lBQ0gsQ0FBQyxDQUFDLENBQUE7UUFDRixDQUFDLENBQUMsQ0FBQTtRQUNGLElBQUksQ0FBQyxXQUFXLEdBQUcsbUJBQW1CLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxDQUFDLElBQW1CLEVBQUMsRUFBRTtZQUNsRixJQUFHLElBQUksRUFBQztnQkFDTixJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLENBQUE7YUFDOUI7UUFDSCxDQUFDLENBQUMsQ0FBQTtRQUNGLElBQUksQ0FBQyxjQUFjLEdBQUcsbUJBQW1CLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxDQUFDLElBQW9CLEVBQUUsRUFBRTtZQUMxRixJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLENBQUE7UUFDL0IsQ0FBQyxDQUFDLENBQUE7UUFDRixJQUFJLENBQUMsY0FBYyxHQUFHLG1CQUFtQixDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxJQUFvQixFQUFFLEVBQUU7WUFDMUYsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxDQUFBO1FBQy9CLENBQUMsQ0FBQyxDQUFBO1FBQ0YsSUFBSSxDQUFDLGNBQWMsR0FBRyxtQkFBbUIsQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLENBQUMsSUFBb0IsRUFBRSxFQUFFO1lBQzFGLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsQ0FBQTtRQUMvQixDQUFDLENBQUMsQ0FBQTtJQUNGLENBQUM7SUFDRCxtQkFBbUI7UUFDakIsSUFBSSxDQUFDLGtCQUFrQixFQUFFLFdBQVcsRUFBRSxDQUFDO1FBQ3ZDLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxXQUFXLEVBQUUsQ0FBQztRQUN4QyxJQUFJLENBQUMsbUJBQW1CLEVBQUUsV0FBVyxFQUFFLENBQUM7UUFDeEMsSUFBSSxDQUFDLGFBQWEsRUFBRSxXQUFXLEVBQUUsQ0FBQztRQUNsQyxJQUFJLENBQUMsYUFBYSxFQUFFLFdBQVcsRUFBRSxDQUFDO1FBQ2xDLElBQUksQ0FBQyxlQUFlLEVBQUUsV0FBVyxFQUFFLENBQUM7UUFDcEMsSUFBSSxDQUFDLGVBQWUsRUFBRSxXQUFXLEVBQUUsQ0FBQztRQUNwQyxJQUFJLENBQUMsY0FBYyxFQUFFLFdBQVcsRUFBRSxDQUFDO1FBQ25DLElBQUksQ0FBQyxXQUFXLEVBQUUsV0FBVyxFQUFFLENBQUM7UUFDaEMsSUFBSSxDQUFDLGFBQWEsRUFBRSxXQUFXLEVBQUUsQ0FBQztRQUNsQyxJQUFJLENBQUMsYUFBYSxFQUFFLFdBQVcsRUFBRSxDQUFDO0lBQ3BDLENBQUM7SUFDRCx1QkFBdUIsQ0FBQyxJQUFtQjtRQUN6QyxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxDQUFDLENBQUMsT0FBK0IsRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLG1CQUFtQixFQUFFLElBQUksdUJBQXVCLENBQUMsbUJBQW1CLENBQUMsSUFBSSxJQUFNLE9BQU8sQ0FBQyxtQkFBbUIsRUFBcUIsQ0FBQyxNQUFNLEVBQUUsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztRQUNwUCxJQUFHLEtBQUssSUFBSSxDQUFDLEVBQUM7WUFDWixPQUFPLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsQ0FBQTtTQUNwQztRQUNELE9BQU8sSUFBSSxDQUFBO0lBQ2IsQ0FBQztJQUNELHdCQUF3QixDQUFDLEtBQXFCO1FBQzlDLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsQ0FBQyxPQUErQixFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsbUJBQW1CLEVBQUUsSUFBSSx1QkFBdUIsQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLElBQU0sT0FBTyxDQUFDLG1CQUFtQixFQUFzQixDQUFDLE9BQU8sRUFBRSxJQUFJLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO1FBQ3ZQLElBQUcsS0FBSyxJQUFJLENBQUMsRUFBQztZQUNaLE9BQU8sSUFBSSxDQUFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxDQUFBO1NBQ3BDO1FBQ0QsT0FBTyxJQUFJLENBQUE7SUFDYixDQUFDO0lBQ0QsV0FBVyxDQUFDLE1BQXFCO1FBQy9CLElBQUk7WUFDRixJQUFHLE1BQU0sQ0FBQyxvQkFBb0IsQ0FBQyxFQUFDO2dCQUM5QixJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQTthQUN4QjtZQUNEOztlQUVHO1NBQ0o7UUFBQyxPQUFPLEtBQVUsRUFBRTtZQUNiLElBQUcsSUFBSSxDQUFDLE9BQU8sRUFBQztnQkFDcEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFBO2FBQ3hDO1NBQ0Y7SUFDSCxDQUFDO0lBQ0QsV0FBVztRQUNULElBQUk7WUFDRixJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7WUFDdkIsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUE7U0FDM0I7UUFBQyxPQUFPLEtBQVUsRUFBRTtZQUNiLElBQUcsSUFBSSxDQUFDLE9BQU8sRUFBQztnQkFDcEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFBO2FBQ3hDO1NBQ0Y7UUFDRCxJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxDQUFBO0lBQzFCLENBQUM7SUFDRCxnRUFBZ0U7SUFDaEUsc0JBQXNCO1FBQ3ZCLElBQUcsSUFBSSxDQUFDLE9BQU8sRUFBQztZQUNoQixPQUFPO1NBQ047UUFDRCxJQUFJLENBQUMsbUJBQW1CLEdBQUcsaUJBQWlCLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztRQUNqRSxJQUFJLENBQUMsbUJBQW1CLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBd0IsRUFBRSxFQUFFO1lBQzVELElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxJQUFJLE9BQU8sQ0FBQyxFQUFFLElBQUksdUJBQXVCLENBQUMsbUJBQW1CLENBQUMsTUFBTSxFQUFFO2dCQUN4RixPQUFPLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyx5QkFBeUIsQ0FBQTthQUNqRDtRQUNILENBQUMsQ0FBQyxDQUFDO1FBQ0gsT0FBTztJQUNOLENBQUM7SUFDRCxxQkFBcUI7SUFDckIsT0FBTyxDQUFDLFlBQW9DO1FBQzNDLElBQUcsSUFBSSxDQUFDLFdBQVcsRUFBQztZQUNsQixJQUFJLENBQUMsV0FBVyxDQUFDLFlBQVksQ0FBQyxDQUFBO1NBQy9CO0lBQ0YsQ0FBQztJQUNELG1CQUFtQjtJQUNuQixnQkFBZ0I7UUFDZCxJQUFJLElBQUksQ0FBQyxrQkFBa0IsRUFBRTtZQUMzQixNQUFNLGdCQUFnQixHQUE2QixDQUFDLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7WUFDOUUsbURBQW1EO1lBQ25ELE1BQU0sZUFBZSxHQUFHLGdCQUFnQixDQUFDLFNBQVMsQ0FDaEQsQ0FBQyxlQUF1QyxFQUFFLEVBQUUsQ0FDMUMsZUFBZSxFQUFFLGlCQUFpQixFQUFFLEtBQUssSUFBSSxDQUFDLGtCQUFrQixFQUFFLGlCQUFpQixFQUFFLENBQ3hGLENBQUM7WUFDRixJQUFJLGVBQWUsR0FBRyxDQUFDLENBQUMsRUFBRTtnQkFDeEIsSUFBSSxlQUFlLEdBQTJCLGdCQUFnQixDQUFDLGVBQWUsQ0FBQyxDQUFDO2dCQUNoRixJQUFJLGtCQUFrQixHQUEyQixlQUFlLENBQUE7Z0JBQ2hFLGtCQUFrQixDQUFDLHFCQUFxQixDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUMzQyxrQkFBa0IsQ0FBQyxjQUFjLEVBQTRCLEVBQUUsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFBO2dCQUN2RixnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsZUFBZSxFQUFFLENBQUMsRUFBRSxrQkFBa0IsQ0FBQyxDQUFDO2dCQUNoRSxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsQ0FBQyxHQUFHLGdCQUFnQixDQUFDLENBQUM7Z0JBQzlDLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUE7YUFDekI7U0FDRjtJQUNILENBQUM7SUFDRCwyQ0FBMkM7SUFDM0MsYUFBYTtRQUNYLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUN0QixJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDckIsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7UUFDN0IsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7UUFDN0IsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7UUFDeEIsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ3BCLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUN0QixJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDdkIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLEdBQUUsSUFBSSxDQUFDLGtCQUFrQixFQUFFLDBCQUEwQixDQUFFO1FBQy9FLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxHQUFFLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxpQkFBaUIsQ0FBRTtRQUNyRSxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsR0FBRSxJQUFJLENBQUMsa0JBQWtCLEVBQUUsMkJBQTJCLENBQUM7UUFDaEYsSUFBSSxDQUFDLFNBQVMsR0FBRTtZQUNkLGFBQWEsRUFBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsYUFBYTtZQUNyRCxjQUFjLEVBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLGNBQWM7WUFDdkQsa0JBQWtCLEVBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLGtCQUFrQjtZQUMvRCxtQkFBbUIsRUFBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsbUJBQW1CO1lBQ2pFLGtCQUFrQixFQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxrQkFBa0I7WUFDL0QsbUJBQW1CLEVBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLG1CQUFtQjtZQUNqRSxlQUFlLEVBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLGVBQWU7WUFDekQsY0FBYyxFQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxjQUFjO1NBQ3hELENBQUE7UUFDRCxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsR0FBTSxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDOUUsQ0FBQztJQUNELGdCQUFnQjtRQUNkLElBQUksWUFBWSxHQUFpQixJQUFJLGFBQWEsQ0FBQztZQUNqRCxNQUFNLEVBQUUsTUFBTTtZQUNkLEtBQUssRUFBRSxNQUFNO1lBQ2IsVUFBVSxFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxhQUFhLEVBQUU7WUFDM0QsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRTtZQUMvRCxZQUFZLEVBQUUsR0FBRztZQUNqQixTQUFTLEVBQUUsVUFBVSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUM7WUFDaEUsVUFBVSxFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUU7WUFDdkQsTUFBTSxFQUFFLE1BQU07WUFDZCxjQUFjLEVBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLFlBQVksRUFBRTtZQUM3RCxlQUFlLEVBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRTtTQUM5RCxDQUFDLENBQUE7UUFDRixJQUFJLENBQUMsYUFBYSxHQUFHLEVBQUMsR0FBRyxZQUFZLEVBQUMsR0FBRyxJQUFJLENBQUMsYUFBYSxFQUFDLENBQUE7SUFDOUQsQ0FBQztJQUNELGNBQWM7UUFDWixJQUFJLFlBQVksR0FBZSxJQUFJLFdBQVcsQ0FBQztZQUM3QyxZQUFZLEVBQUUsTUFBTTtZQUNwQixLQUFLLEVBQUUsTUFBTTtZQUNiLE1BQU0sRUFBRSxNQUFNO1lBQ2QsTUFBTSxFQUFFLGFBQWEsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLFlBQVksRUFBRSxFQUFFO1lBQ3JFLGVBQWUsRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsWUFBWSxFQUFFO1lBQy9ELGFBQWEsRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsWUFBWSxFQUFFO1lBQzdELGNBQWMsRUFBRSxPQUFPO1lBQ3ZCLFlBQVksRUFBRSxVQUFVLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQztZQUN0RSxlQUFlLEVBQUUsRUFBRTtZQUNuQixzQkFBc0IsRUFBRSxFQUFFO1NBQzNCLENBQUMsQ0FBQTtRQUNGLElBQUksQ0FBQyxXQUFXLEdBQUcsRUFBQyxHQUFHLFlBQVksRUFBQyxHQUFHLElBQUksQ0FBQyxXQUFXLEVBQUMsQ0FBQTtJQUMxRCxDQUFDO0lBQ0QsY0FBYztRQUNaLElBQUksWUFBWSxHQUFhO1lBQ3pCLE1BQU0sRUFBRSxNQUFNO1lBQ2QsS0FBSyxFQUFDLE1BQU07WUFDWixNQUFNLEVBQUMsTUFBTTtZQUNiLFlBQVksRUFBQyxNQUFNO1NBQ3RCLENBQUE7UUFDRCxJQUFJLENBQUMsb0JBQW9CLEdBQUcsRUFBQyxHQUFHLFlBQVksRUFBQyxHQUFHLElBQUksQ0FBQyxvQkFBb0IsRUFBQyxDQUFBO0lBQzVFLENBQUM7SUFDRCxxQkFBcUI7UUFDbkIsSUFBSSxZQUFZLEdBQXNCLElBQUksa0JBQWtCLENBQUM7WUFDM0QsbUJBQW1CLEVBQUUsVUFBVSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUM7WUFDN0Usb0JBQW9CLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLFlBQVksRUFBRTtZQUNwRSxVQUFVLEVBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLGFBQWEsRUFBRTtZQUMxRCxNQUFNLEVBQUMsYUFBYSxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFLEVBQUU7WUFDbkUsYUFBYSxFQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDO1lBQ25FLGNBQWMsRUFBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFO1lBQzFELGtCQUFrQixFQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDO1lBQ3hFLG1CQUFtQixFQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxZQUFZLEVBQUU7WUFDbEUsa0JBQWtCLEVBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUM7WUFDeEUsbUJBQW1CLEVBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLFlBQVksRUFBRTtZQUNsRSxlQUFlLEVBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLFlBQVksRUFBRTtZQUM5RCxpQkFBaUIsRUFBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFO1lBQzlELGNBQWMsRUFBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsWUFBWSxFQUFFO1lBQzdELDBCQUEwQixFQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxVQUFVLEVBQUU7WUFDdkUsMkJBQTJCLEVBQUMsa0JBQWtCO1lBQzlDLHVCQUF1QixFQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxVQUFVLEVBQUU7WUFDcEUsc0JBQXNCLEVBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUM7WUFDL0UsdUJBQXVCLEVBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUM7WUFDL0Usd0JBQXdCLEVBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLFlBQVksRUFBRTtTQUN4RSxDQUFDLENBQUE7UUFDRixJQUFJLENBQUMsa0JBQWtCLEdBQUcsRUFBQyxHQUFHLFlBQVksRUFBQyxHQUFHLElBQUksQ0FBQyxrQkFBa0IsRUFBQyxDQUFBO0lBQ3hFLENBQUM7SUFDRCxZQUFZO1FBQ1YsSUFBSSxZQUFZLEdBQWEsSUFBSSxTQUFTLENBQUM7WUFDekMsUUFBUSxFQUFFLFVBQVUsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDO1lBQ2pFLFNBQVMsRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsWUFBWSxFQUFFO1lBQ3pELFVBQVUsRUFBQyxhQUFhO1NBQ3pCLENBQUMsQ0FBQTtRQUNGLElBQUksQ0FBQyxTQUFTLEdBQUcsRUFBQyxHQUFHLFlBQVksRUFBQyxHQUFHLElBQUksQ0FBQyxTQUFTLEVBQUMsQ0FBQTtJQUN0RCxDQUFDO0lBQ0QsZUFBZTtRQUViLElBQUksWUFBWSxHQUFnQixJQUFJLFlBQVksQ0FBQztZQUNyRCxZQUFZLEVBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLFlBQVksRUFBRTtZQUMzRCxZQUFZLEVBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLFlBQVksRUFBRTtZQUMzRCxpQkFBaUIsRUFBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsWUFBWSxFQUFFO1lBQ2hFLFlBQVksRUFBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFO1lBQ3pELGFBQWEsRUFBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFO1NBQ25ELENBQUMsQ0FBQTtRQUNGLElBQUksQ0FBQyxZQUFZLEdBQUcsRUFBQyxHQUFHLFlBQVksRUFBQyxHQUFHLElBQUksQ0FBQyxZQUFZLEVBQUMsQ0FBQTtJQUM1RCxDQUFDO0lBQ0QsYUFBYTtRQUNYLElBQUksWUFBWSxHQUFjLElBQUksVUFBVSxDQUFDO1lBQzNDLFFBQVEsRUFBRSxVQUFVLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQztZQUNsRSxTQUFTLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUM7WUFDNUQsVUFBVSxFQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxVQUFVLEVBQUU7WUFDdkQsWUFBWSxFQUFDLE1BQU07WUFDbkIsS0FBSyxFQUFDLE1BQU07U0FDYixDQUFDLENBQUE7UUFDRixJQUFJLENBQUMsVUFBVSxHQUFHLEVBQUMsR0FBRyxZQUFZLEVBQUMsR0FBRyxJQUFJLENBQUMsVUFBVSxFQUFDLENBQUE7SUFDeEQsQ0FBQztJQUNELHFCQUFxQjtRQUNuQixJQUFJLFlBQVksR0FBc0IsSUFBSSxrQkFBa0IsQ0FBQztZQUMzRCx1QkFBdUIsRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFO1lBQ25FLHNCQUFzQixFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxZQUFZLEVBQUU7WUFDdEUsc0JBQXNCLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUM7WUFDN0UscUJBQXFCLEVBQUUsVUFBVSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUM7WUFDM0UscUJBQXFCLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUM7WUFDM0Usb0JBQW9CLEVBQUUsVUFBVSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUM7WUFDMUUsU0FBUyxFQUFFLFVBQVUsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDO1lBQ2hFLFVBQVUsRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFO1lBQ3ZELGVBQWUsRUFBRSxVQUFVLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQztZQUN6RSxnQkFBZ0IsRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsWUFBWSxFQUFFO1lBQ2hFLFVBQVUsRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsYUFBYSxFQUFFO1lBQzNELE1BQU0sRUFBQyxNQUFNO1lBQ2IsS0FBSyxFQUFDLE9BQU87U0FDZCxDQUFDLENBQUE7UUFDRixJQUFJLENBQUMsNkJBQTZCLEdBQUcsRUFBQyxHQUFHLFlBQVksRUFBQyxHQUFHLElBQUksQ0FBQyw2QkFBNkIsRUFBQyxDQUFBO0lBQzlGLENBQUM7SUFDRCxpRkFBaUY7SUFDakY7Ozs7T0FJRztJQUNILGdEQUFnRDtJQUNoRDs7T0FFRztJQUNIOztPQUVHO0lBQ0gscUJBQXFCO1FBQ25CLElBQUk7WUFDRixPQUFPLElBQUksQ0FBQywyQkFBMkIsRUFBRSxTQUFTLEVBQUUsQ0FBQztTQUN0RDtRQUFDLE9BQU8sS0FBVSxFQUFFO1lBQ25CLElBQUcsSUFBSSxDQUFDLE9BQU8sRUFBQztnQkFDZCxJQUFJLENBQUMsT0FBTyxDQUFDLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUE7YUFDeEM7U0FDRjtJQUNILENBQUM7SUFDRCxtQkFBbUIsQ0FBQyxPQUE2QjtRQUMvQyxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxDQUN6QyxDQUFDLGVBQXVDLEVBQUUsRUFBRSxDQUFDLGVBQWUsQ0FBQyxjQUFjLEVBQUUsSUFBSyxlQUFlLENBQUMsY0FBYyxFQUE0QixDQUFDLEtBQUssRUFBRSxJQUFJLE9BQU8sRUFBRSxLQUFLLEVBQUUsQ0FDekssQ0FBQztRQUNGLElBQUcsS0FBSyxJQUFJLENBQUMsRUFBQztZQUNaLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxPQUFPLENBQUMsQ0FBQTtTQUN4QztJQUNILENBQUM7SUFDRDs7O09BR0c7SUFDSDs7T0FFRztJQUNILGVBQWUsQ0FBQyxRQUFhO1FBQzNCLElBQUk7WUFDRixJQUFJLENBQUMsSUFBSSxDQUFDLG9CQUFvQixFQUFFO2dCQUM5QixTQUFTLENBQUMsZUFBZSxDQUN2QixJQUFJLENBQUMsY0FBYyxFQUNuQixJQUFJLFNBQVMsQ0FBQyxZQUFZLENBQUM7b0JBQ3pCLFlBQVksRUFBRSxDQUFDLFVBQWtCLEVBQUUsRUFBRTt3QkFDbkMsbUVBQW1FO3dCQUNuRSxRQUFRLENBQUMsdUJBQXVCLENBQUMsY0FBYyxDQUFDLE1BQU0sRUFBRSxVQUFVLENBQUMsQ0FBQztvQkFDdEUsQ0FBQztvQkFDRCxhQUFhLEVBQUUsQ0FBQyxXQUFtQixFQUFFLEVBQUU7d0JBQ3JDLG1FQUFtRTt3QkFDbkUsUUFBUSxDQUFDLHVCQUF1QixDQUFDLGNBQWMsQ0FBQyxPQUFPLEVBQUUsV0FBVyxDQUFDLENBQUM7b0JBQ3hFLENBQUM7aUJBQ0YsQ0FBQyxDQUNILENBQUM7YUFDSDtZQUNELFNBQVMsQ0FBQyxnQkFBZ0IsQ0FDeEIsSUFBSSxDQUFDLGVBQWUsRUFDcEIsSUFBSSxTQUFTLENBQUMsYUFBYSxDQUFDO2dCQUMxQix5QkFBeUIsRUFBRSxDQUN6QixPQUFZLEVBQ1osV0FBZ0IsRUFDaEIsUUFBYSxFQUNiLFFBQWEsRUFDYixZQUFpQixFQUNqQixFQUFFO29CQUNGLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxPQUFPLENBQUMsQ0FBQTtnQkFDbEMsQ0FBQztnQkFDRCxtQkFBbUIsRUFBRSxDQUFDLE9BQVksRUFBRSxVQUFlLEVBQUUsUUFBYSxFQUFFLFVBQWUsRUFBRSxFQUFFO29CQUNyRixJQUFJLENBQUMsa0JBQWtCLENBQUMsT0FBTyxDQUFDLENBQUE7Z0JBQ2xDLENBQUM7Z0JBQ0QsbUJBQW1CLEVBQUUsQ0FBQyxPQUFZLEVBQUUsVUFBZSxFQUFFLFFBQWEsRUFBRSxVQUFlLEVBQUUsRUFBRTtvQkFDckYsSUFBSSxDQUFDLGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxDQUFBO2dCQUNsQyxDQUFDO2dCQUNELHFCQUFxQixFQUFFLENBQ3JCLE9BQVksRUFDWixZQUFpQixFQUNqQixVQUFlLEVBQ2YsWUFBaUIsRUFDakIsRUFBRTtvQkFDRixtQ0FBbUM7Z0JBQ3JDLENBQUM7Z0JBQ0Qsb0JBQW9CLEVBQUUsQ0FDcEIsT0FBWSxFQUNaLFNBQWMsRUFDZCxXQUFnQixFQUNoQixXQUFnQixFQUNoQixFQUFFO29CQUNGLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxPQUFPLENBQUMsQ0FBQTtnQkFDbEMsQ0FBQztnQkFDRCxpQkFBaUIsRUFBRSxDQUFDLE9BQVksRUFBRSxXQUFnQixFQUFFLEtBQVUsRUFBRSxFQUFFO29CQUNoRSxJQUFJLENBQUMsa0JBQWtCLENBQUMsT0FBTyxDQUFDLENBQUE7Z0JBQ2xDLENBQUM7Z0JBQ0QsbUJBQW1CLEVBQUUsQ0FBQyxPQUFZLEVBQUUsVUFBZSxFQUFFLFdBQWdCLEVBQUUsRUFBRTtvQkFDdkUsSUFBSSxDQUFDLGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxDQUFBO2dCQUNsQyxDQUFDO2FBQ0YsQ0FBQyxDQUNILENBQUM7WUFDRixTQUFTLENBQUMsa0JBQWtCLENBQzFCLElBQUksQ0FBQyxzQkFBc0IsRUFDM0IsSUFBSSxTQUFTLENBQUMsZUFBZSxDQUFDO2dCQUM1QixxQkFBcUIsRUFBRSxDQUFDLFdBQWtDLEVBQUUsRUFBRTtvQkFDNUQsUUFBUSxDQUFDLHVCQUF1QixDQUFDLFFBQVEsQ0FBQyxxQkFBcUIsRUFBRSxJQUFJLEVBQUUsV0FBVyxDQUFDLENBQUM7Z0JBQ3RGLENBQUM7Z0JBQ0Qsc0JBQXNCLEVBQUUsQ0FBQyxZQUFvQyxFQUFFLEVBQUU7b0JBQy9ELFFBQVEsQ0FBQyx1QkFBdUIsQ0FBQyxRQUFRLENBQUMsc0JBQXNCLEVBQUUsSUFBSSxFQUFFLFlBQVksQ0FBQyxDQUFDO2dCQUN4RixDQUFDO2dCQUNELHVCQUF1QixFQUFFLENBQUMsYUFBb0MsRUFBRSxFQUFFO29CQUM5RCxRQUFRLENBQUMsdUJBQXVCLENBQUMsUUFBUSxDQUFDLHVCQUF1QixFQUFFLElBQUksRUFBRSxhQUFhLENBQUMsQ0FBQztnQkFFNUYsQ0FBQztnQkFDRCxjQUFjLEVBQUUsQ0FBQyxjQUF3QyxFQUFFLEVBQUU7b0JBQzNELElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFO3dCQUN4QixJQUFJLENBQUMsVUFBVSxDQUFDLGNBQWMsQ0FBQyxDQUFDO3FCQUNqQztnQkFDSCxDQUFDO2dCQUNELGdCQUFnQixFQUFFLENBQUMsY0FBcUMsRUFBRSxFQUFFO29CQUMxRCxRQUFRLENBQUMsdUJBQXVCLENBQUMsUUFBUSxDQUFDLGVBQWUsRUFBRSxJQUFJLEVBQUUsY0FBYyxDQUFDLENBQUM7Z0JBQ25GLENBQUM7Z0JBQ0QsZUFBZSxFQUFFLENBQUMsYUFBb0MsRUFBRSxFQUFFO29CQUN4RCxRQUFRLENBQUMsdUJBQXVCLENBQUMsUUFBUSxDQUFDLGNBQWMsRUFBRSxJQUFJLEVBQUUsYUFBYSxDQUFDLENBQUM7Z0JBQ2pGLENBQUM7Z0JBQ0QsbUJBQW1CLEVBQUUsQ0FBQyxjQUF3QyxFQUFFLEVBQUU7b0JBQ2hFLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFO3dCQUN4QixJQUFJLENBQUMsc0JBQXNCLENBQUMsY0FBYyxDQUFDLENBQUM7cUJBQzdDO2dCQUNILENBQUM7Z0JBQ0QsZUFBZSxFQUFFLENBQUMsZUFBMEMsRUFBRSxFQUFFO29CQUM5RCxJQUFHLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBQzt3QkFDckIsSUFBSSxDQUFDLGVBQWUsR0FBRyxlQUFlLENBQUE7d0JBQ3pDLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUE7cUJBQ3RCO2dCQUNILENBQUM7Z0JBQ0QsYUFBYSxFQUFFLENBQUMsZUFBMEMsRUFBRSxFQUFFO29CQUM1RCxJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQTtvQkFDM0IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQTtnQkFDMUIsQ0FBQzthQUNGLENBQUMsQ0FDSCxDQUFDO1lBQ0EsU0FBUyxDQUFDLGVBQWUsQ0FDdkIsSUFBSSxDQUFDLGNBQWMsRUFDbkIsSUFBSSxTQUFTLENBQUMsWUFBWSxDQUFDO2dCQUN6QixzQkFBc0IsRUFBRSxDQUFDLElBQW9CLEVBQUUsRUFBRTtvQkFDL0MsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxDQUFBO2dCQUMvQixDQUFDO2dCQUNELHVCQUF1QixFQUFFLENBQUMsSUFBb0IsRUFBRSxFQUFFO29CQUNoRCxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLENBQUE7Z0JBQy9CLENBQUM7Z0JBQ0Qsc0JBQXNCLEVBQUUsQ0FBQyxJQUFvQixFQUFFLEVBQUU7b0JBQy9DLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsQ0FBQTtnQkFFL0IsQ0FBQztnQkFDRCxzQkFBc0IsRUFBRSxDQUFDLElBQW9CLEVBQUUsRUFBRTtvQkFDL0MsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxDQUFBO2dCQUMvQixDQUFDO2FBRUYsQ0FBQyxDQUNILENBQUM7U0FFTDtRQUFDLE9BQU8sS0FBVSxFQUFFO1lBQ2IsSUFBRyxJQUFJLENBQUMsT0FBTyxFQUFDO2dCQUNwQixJQUFJLENBQUMsT0FBTyxDQUFDLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUE7YUFDeEM7U0FDRjtJQUNILENBQUM7SUFDRDs7T0FFRztJQUNILGVBQWU7UUFDYixJQUFJO1lBQ0YsU0FBUyxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO1lBQzdELFNBQVMsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7WUFDbEQsU0FBUyxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztTQUNyRDtRQUFDLE9BQU8sS0FBVSxFQUFFO1lBQ2IsSUFBRyxJQUFJLENBQUMsT0FBTyxFQUFDO2dCQUNwQixJQUFJLENBQUMsT0FBTyxDQUFDLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUE7YUFDeEM7U0FDRjtJQUNILENBQUM7SUFzRUQsZ0JBQWdCLENBQUMsWUFBbUM7UUFDbEQsSUFBSSxJQUFJLEdBQU8sWUFBWSxDQUFDLG1CQUFtQixFQUFFLENBQUE7UUFDakQsSUFBSSxPQUFPLEdBQXlCLFlBQVksQ0FBQyxjQUFjLEVBQUUsQ0FBQTtRQUNqRSxJQUFHLENBQUMsSUFBSSxDQUFDLGNBQWMsSUFBSSxPQUFPLElBQUksT0FBTyxFQUFFLFdBQVcsRUFBRSxJQUFJLHVCQUF1QixDQUFDLGVBQWUsQ0FBQyxNQUFNLElBQUksT0FBTyxFQUFFLFdBQVcsRUFBRSxJQUFJLHVCQUF1QixDQUFDLGVBQWUsQ0FBQyxJQUFJO2VBQ3JMLENBQUMsQ0FBQyxJQUFJLENBQUMsZUFBZSxJQUFJLENBQUMsSUFBSSxFQUFFLEdBQUcsSUFBSSxJQUFJLENBQUMsZUFBZSxDQUFDLGFBQWEsRUFBRSxJQUFJLElBQUksRUFBRSxJQUFJLElBQUksSUFBSSxDQUFDLGVBQWUsQ0FBQyxhQUFhLEVBQUUsQ0FBQyxDQUFDO2VBQ3BJLE9BQU8sQ0FBQyxTQUFTLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFLE1BQU0sRUFBRSxFQUUvRDtZQUNFLE9BQU8sSUFBSSxDQUFBO1NBQ1o7YUFDRztZQUNGLE9BQU8sS0FBSyxDQUFBO1NBQ2I7SUFDSCxDQUFDO0lBNkVELFVBQVUsQ0FBQyxXQUFxQztRQUM5QyxJQUFJLGdCQUFnQixHQUE2QixDQUFDLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUE7UUFDM0UsTUFBTSxlQUFlLEdBQUcsZ0JBQWdCLENBQUMsU0FBUyxDQUNoRCxDQUFDLGVBQXVDLEVBQUUsRUFBRSxDQUFFLGVBQWUsQ0FBQyxjQUFjLEVBQTRCLENBQUMsYUFBYSxFQUFFLElBQUksV0FBVyxDQUFDLFNBQVMsRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUM3SixDQUFDO1FBQ0YsSUFBSSxlQUFlLEdBQUcsQ0FBQyxDQUFDLEVBQUU7WUFDeEIsSUFBSSxxQkFBOEMsQ0FBQztZQUNuRCxJQUFJLENBQUUsZ0JBQWdCLENBQUMsZUFBZSxDQUFDLENBQUMsY0FBYyxFQUE0QixDQUFDLFNBQVMsRUFBRSxFQUFFO2dCQUM5RixxQkFBcUIsR0FBRyxnQkFBZ0IsQ0FBQyxlQUFlLENBQUMsQ0FBQztnQkFDekQscUJBQXFCLENBQUMsY0FBYyxFQUE0QixDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQztnQkFDcEcscUJBQXFCLENBQUMsY0FBYyxFQUE0QixDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztnQkFDMUYsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLGVBQWUsRUFBRSxDQUFDLEVBQUUscUJBQXFCLENBQUMsQ0FBQztnQkFDbkUsSUFBSSxDQUFDLGdCQUFnQixHQUFHLENBQUMsR0FBRyxnQkFBZ0IsQ0FBQyxDQUFDO2FBRS9DO1NBQ0Y7SUFDSCxDQUFDO0lBQ0Q7OztPQUdHO0lBQ0g7O09BRUc7SUFDSCxVQUFVLENBQUMsSUFBNkM7UUFDdEQsSUFBSTtZQUNGLG1CQUFtQjtZQUNuQixNQUFNLGdCQUFnQixHQUE2QixDQUFDLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7WUFDOUUsbURBQW1EO1lBQ25ELE1BQU0sZUFBZSxHQUFHLGdCQUFnQixDQUFDLFNBQVMsQ0FDaEQsQ0FBQyxlQUF1QyxFQUFFLEVBQUUsQ0FDMUMsZUFBZSxDQUFDLG1CQUFtQixFQUFFLEtBQUssdUJBQXVCLENBQUMsbUJBQW1CLENBQUMsSUFBSTtnQkFDekYsZUFBZSxDQUFDLG1CQUFtQixFQUFxQixDQUFDLE1BQU0sRUFBRSxLQUFNLElBQXVCLENBQUMsTUFBTSxFQUFFLENBQzNHLENBQUM7WUFDRixJQUFJLGVBQWUsR0FBRyxDQUFDLENBQUMsRUFBRTtnQkFDeEIsSUFBSSxlQUFlLEdBQTJCLGdCQUFnQixDQUFDLGVBQWUsQ0FBQyxDQUFDO2dCQUNoRixJQUFJLG1CQUFtQixHQUFvQixlQUFlLENBQUMsbUJBQW1CLEVBQXFCLENBQUE7Z0JBQ25HLG1CQUFtQixDQUFDLFNBQVMsQ0FBRSxJQUF1QixDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUE7Z0JBQ25FLElBQUksa0JBQWtCLEdBQTJCLGVBQWUsQ0FBQTtnQkFDaEUsa0JBQWtCLENBQUMsbUJBQW1CLENBQUMsbUJBQW1CLENBQUMsQ0FBQztnQkFDM0Qsa0JBQWtCLENBQUMsY0FBYyxFQUE0QixDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQTtnQkFDdEYsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLGVBQWUsRUFBRSxDQUFDLEVBQUUsa0JBQWtCLENBQUMsQ0FBQztnQkFDaEUsSUFBSSxDQUFDLGdCQUFnQixHQUFHLGdCQUFnQixDQUFDO2dCQUN6QyxJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxDQUFBO2FBQ3pCO1NBQ0Y7UUFBQyxPQUFPLEtBQVUsRUFBRTtZQUNiLElBQUcsSUFBSSxDQUFDLE9BQU8sRUFBQztnQkFDcEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFBO2FBQ3hDO1lBQ0QsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQztTQUMxQjtJQUNILENBQUM7SUFDRDs7Ozs7OztPQU9HO0lBQ0gsZUFBZSxDQUFDLE9BQThCLEVBQUUsZUFBNEMsRUFBRTtRQUM1RixNQUFNLFVBQVUsR0FBRyxPQUFPLENBQUM7UUFDM0IsT0FBTyxVQUFVLENBQUM7SUFDcEIsQ0FBQztJQUNEOzs7OztPQUtHO0lBQ0g7OztPQUdHO0lBQ0gsa0JBQWtCLENBQUMsT0FBOEIsRUFBRSxlQUF3QixJQUFJO1FBQzdFLElBQUk7WUFDRixJQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDO2lCQUMzQixJQUFJLENBQUMsQ0FBQyxRQUFhLEVBQUUsRUFBRTtnQkFFdEIsTUFBTSxlQUFlLEdBQUcsUUFBUSxDQUFDLGVBQWUsQ0FBQztnQkFDakQsTUFBTSxlQUFlLEdBQTJCLFFBQVEsQ0FBQyxlQUFlLENBQUM7Z0JBQ3pFLE1BQU0sZ0JBQWdCLEdBQUcsUUFBUSxDQUFDLGdCQUFnQixDQUFDO2dCQUNuRCxJQUFJLGVBQWUsR0FBRyxDQUFDLENBQUMsRUFBRTtvQkFDeEIsd0RBQXdEO29CQUN4RCxJQUFJLGtCQUFrQixHQUFHLElBQUksQ0FBQyxZQUFZLEVBQUUsTUFBTSxFQUFFLElBQUksT0FBTyxDQUFDLFNBQVMsRUFBRSxDQUFDLE1BQU0sRUFBRSxJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUUsTUFBTSxFQUFFLElBQUksT0FBTyxDQUFDLGFBQWEsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsc0JBQXNCLENBQzFLLGVBQWUsQ0FDaEIsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLHNCQUFzQixDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsQ0FBQztvQkFDckQsSUFBSSxjQUFjLEdBQTBCLElBQUksQ0FBQyxlQUFlLENBQUMsT0FBTyxFQUFFLGVBQWUsQ0FBQyxDQUFDO29CQUMzRixJQUFJLGtCQUFrQixHQUEyQixlQUFlLENBQUE7b0JBQ2hFLGtCQUFrQixDQUFDLGNBQWMsQ0FBQyxjQUFjLENBQUMsQ0FBQztvQkFDbEQsa0JBQWtCLENBQUMscUJBQXFCLENBQUMsa0JBQWtCLENBQUMsQ0FBQztvQkFDNUQsa0JBQWtCLENBQUMsY0FBYyxFQUE0QixDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQTtvQkFDdEYsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLGVBQWUsRUFBRSxDQUFDLENBQUMsQ0FBQztvQkFDNUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLGtCQUFrQixDQUFDLENBQUM7b0JBQzdDLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxDQUFDLEdBQUcsZ0JBQWdCLENBQUMsQ0FBQztvQkFDOUMsSUFBSSxZQUFZLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRSxNQUFNLEVBQUUsSUFBSSxPQUFPLEVBQUUsU0FBUyxFQUFFLEVBQUUsTUFBTSxFQUFFLEVBQUU7d0JBQ2pGLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQzt3QkFDakIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQTtxQkFDekI7aUJBQ0Y7cUJBQU07b0JBQ0wsSUFBSSxjQUFjLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsQ0FBQztvQkFDbkQsZUFBZSxDQUFDLGNBQWMsQ0FBQyxjQUFjLENBQUMsQ0FBQztvQkFDL0MsZUFBZSxDQUFDLHFCQUFxQixDQUFDLENBQUMsQ0FBQyxDQUFBO29CQUN4QyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDLENBQUM7b0JBQzFDLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxnQkFBZ0IsQ0FBQztvQkFDekMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQTtvQkFDeEIsMkJBQTJCO29CQUMzQixJQUFJLFlBQVksSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFLE1BQU0sRUFBRSxJQUFJLE9BQU8sRUFBRSxTQUFTLEVBQUUsRUFBRSxNQUFNLEVBQUUsRUFBRTt3QkFDakYsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO3dCQUNqQixJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxDQUFBO3FCQUN6QjtpQkFDRjtnQkFDRCxJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxDQUFBO1lBQzFCLENBQUMsQ0FBQztpQkFDRCxLQUFLLENBQUMsQ0FBQyxLQUFtQyxFQUFFLEVBQUU7Z0JBQzdDLElBQUcsSUFBSSxDQUFDLE9BQU8sRUFBQztvQkFDZCxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFBO2lCQUNwQjtnQkFDRCxJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxDQUFBO1lBQzFCLENBQUMsQ0FBQyxDQUFDO1NBQ047UUFBQyxPQUFPLEtBQVUsRUFBRTtZQUNiLElBQUcsSUFBSSxDQUFDLE9BQU8sRUFBQztnQkFDcEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFBO2FBQ3hDO1NBQ0Y7UUFDRCxJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxDQUFBO0lBQzFCLENBQUM7SUFDRCxzQkFBc0IsQ0FBQyxjQUF3QztRQUM3RCxJQUFJLGdCQUFnQixHQUE2QixDQUFDLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFDNUUsSUFBSSxlQUFlLEdBQVcsZ0JBQWdCLENBQUMsU0FBUyxDQUN0RCxDQUFDLENBQXlCLEVBQUUsRUFBRSxDQUFFLENBQUMsQ0FBQyxjQUFjLEVBQTRCLENBQUMsS0FBSyxFQUFFLElBQUksTUFBTSxDQUFDLGNBQWMsQ0FBQyxZQUFZLEVBQUUsQ0FBQyxDQUM5SCxDQUFDO1FBQ0YsSUFBSSxlQUF1QyxDQUFDO1FBQzVDLElBQUksZUFBZSxHQUFHLENBQUMsQ0FBQyxFQUFFO1lBQ3hCLGVBQWUsR0FBRyxnQkFBZ0IsQ0FBQyxlQUFlLENBQUMsQ0FBQztZQUNwRCxJQUFJLENBQUUsZUFBZSxDQUFDLGNBQWMsRUFBNEIsQ0FBQyxjQUFjLEVBQUUsRUFBRTtnQkFDaEYsZUFBZSxDQUFDLGNBQWMsRUFBNEIsQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUM7Z0JBQ2xHLGVBQWUsQ0FBQyxjQUFjLEVBQTRCLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO2dCQUNwRixnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsZUFBZSxFQUFFLENBQUMsRUFBRSxlQUFlLENBQUMsQ0FBQTtnQkFDNUQsSUFBSSxDQUFDLGdCQUFnQixHQUFHLENBQUMsR0FBRyxnQkFBZ0IsQ0FBQyxDQUFDO2dCQUM5QyxJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxDQUFBO2FBQ3pCO1NBQ0Y7SUFDSCxDQUFDO0lBQ0Q7Ozs7T0FJRztJQUNIOzs7T0FHRztJQUNILHNCQUFzQixDQUFDLFlBQW9DLEVBQUUsV0FBZ0IsSUFBSTtRQUMvRSxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtZQUMxQyxPQUFPLENBQUMsQ0FBQztTQUNWO1FBQ0QsSUFBSSxrQkFBa0IsR0FBVSxZQUFZLENBQUMscUJBQXFCLEVBQUUsQ0FBQztRQUNyRSxJQUNFLElBQUksQ0FBQyxrQkFBa0I7WUFDdkIsSUFBSSxDQUFDLGtCQUFrQixDQUFDLGlCQUFpQixFQUFFLEtBQUssWUFBWSxDQUFDLGlCQUFpQixFQUFFLEVBQ2hGO1lBQ0Esa0JBQWtCLElBQUksQ0FBQyxDQUFDO1NBQ3pCO2FBQU0sSUFDTCxDQUFDLElBQUksQ0FBQyxrQkFBa0I7WUFDdEIsSUFBSSxDQUFDLGtCQUFrQixDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUM7WUFDOUMsWUFBWSxDQUFDLG1CQUFtQixFQUFFLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQztZQUN4RCxJQUFJLENBQUMsa0JBQWtCLENBQUMsbUJBQW1CLEVBQXNCLENBQUMsT0FBTyxFQUFFLEtBQU0sWUFBWSxDQUFDLG1CQUFtQixFQUFzQixDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ3JKLENBQUMsSUFBSSxDQUFDLGtCQUFrQjtnQkFDdEIsSUFBSSxDQUFDLGtCQUFrQixDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUM7Z0JBQzdDLFlBQVksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUM7Z0JBQ3ZELElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxtQkFBbUIsRUFBcUIsQ0FBQyxNQUFNLEVBQUUsS0FBTSxZQUFZLENBQUMsbUJBQW1CLEVBQXFCLENBQUMsTUFBTSxFQUFFLENBQUMsRUFDako7WUFDQSxrQkFBa0IsR0FBRyxDQUFDLENBQUM7U0FDeEI7YUFBTTtZQUNMLElBQUksUUFBUSxJQUFJLFFBQVEsS0FBSyxXQUFXLEVBQUU7Z0JBQ3hDLGtCQUFrQixHQUFHLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxrQkFBa0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUN0RTtpQkFBTTtnQkFDTCxrQkFBa0IsR0FBRyxrQkFBa0IsR0FBRyxDQUFDLENBQUM7YUFDN0M7U0FDRjtRQUNELE9BQU8sa0JBQWtCLENBQUM7SUFDNUIsQ0FBQztJQUNEOzs7T0FHRztJQUNIOztPQUVHO0lBQ0gsZ0JBQWdCLENBQUMsT0FBOEI7UUFDN0MsTUFBTSxPQUFPLEdBQUcsSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUU7WUFDOUMsU0FBUyxDQUFDLGVBQWUsQ0FBQywwQkFBMEIsQ0FBQyxPQUFPLENBQUM7aUJBQzFELElBQUksQ0FBQyxDQUFDLFlBQW9DLEVBQUUsRUFBRTtnQkFDN0MsSUFBSSxnQkFBZ0IsR0FBNkIsQ0FBQyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO2dCQUM1RSxJQUFJLGVBQWUsR0FBVyxnQkFBZ0IsQ0FBQyxTQUFTLENBQ3RELENBQUMsQ0FBeUIsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLGlCQUFpQixFQUFFLEtBQUssWUFBWSxDQUFDLGlCQUFpQixFQUFFLENBQzNGLENBQUM7Z0JBQ0YsSUFBSSxlQUFlLEdBQTJCLFlBQVksQ0FBQztnQkFDM0QsSUFBSSxlQUFlLEdBQUcsQ0FBQyxDQUFDLEVBQUU7b0JBQ3hCLGVBQWUsR0FBRyxnQkFBZ0IsQ0FBQyxlQUFlLENBQUMsQ0FBQztpQkFDckQ7Z0JBQ0QsT0FBTyxDQUFDO29CQUNOLGVBQWUsRUFBRSxlQUFlO29CQUNoQyxlQUFlLEVBQUUsZUFBZTtvQkFDaEMsZ0JBQWdCLEVBQUUsZ0JBQWdCO2lCQUNuQyxDQUFDLENBQUM7Z0JBQ0gsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQTtZQUMxQixDQUFDLENBQUM7aUJBQ0QsS0FBSyxDQUFDLENBQUMsS0FBbUMsRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDbkUsQ0FBQyxDQUFDLENBQUM7UUFDSCxPQUFPLE9BQU8sQ0FBQztJQUNqQixDQUFDO0lBQ0Q7O09BRUc7SUFDSCx5QkFBeUIsQ0FBQyxPQUE4QjtRQUN0RCxJQUFJO1lBQ0YsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQztpQkFDM0IsSUFBSSxDQUFDLENBQUMsUUFBYSxFQUFFLEVBQUU7Z0JBQ3RCLE1BQU0sZUFBZSxHQUFHLFFBQVEsQ0FBQyxlQUFlLENBQUM7Z0JBQ2pELE1BQU0sZUFBZSxHQUEyQixRQUFRLENBQUMsZUFBZSxDQUFDO2dCQUN6RSxNQUFNLGdCQUFnQixHQUFHLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQztnQkFDbkQsSUFBSSxlQUFlLEdBQUcsQ0FBQyxDQUFDLEVBQUU7b0JBQ3hCLElBQUksY0FBYyxHQUEwQixlQUFlLENBQUMsY0FBYyxFQUFFLENBQUM7b0JBQzdFLElBQUksY0FBYyxDQUFDLEtBQUssRUFBRSxLQUFLLE9BQU8sQ0FBQyxLQUFLLEVBQUUsRUFBRTt3QkFDOUMsZUFBZSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsQ0FBQzt3QkFDdkMsZUFBZSxDQUFDLGNBQWMsRUFBNEIsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7d0JBQ3BGLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxlQUFlLEVBQUUsQ0FBQyxFQUFFLGVBQWUsQ0FBQyxDQUFDO3dCQUM3RCxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsQ0FBQyxHQUFHLGdCQUFnQixDQUFDLENBQUM7d0JBQzlDLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUE7cUJBQ3pCO2lCQUNGO1lBQ0gsQ0FBQyxDQUFDO2lCQUNELEtBQUssQ0FBQyxDQUFDLEtBQW1DLEVBQUUsRUFBRTtnQkFDN0MsSUFBRyxJQUFJLENBQUMsT0FBTyxFQUFDO29CQUNkLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUE7aUJBQ3BCO2dCQUNELElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUE7WUFDMUIsQ0FBQyxDQUFDLENBQUM7U0FDTjtRQUFDLE9BQU8sS0FBUyxFQUFFO1lBQ1osSUFBRyxJQUFJLENBQUMsT0FBTyxFQUFDO2dCQUNwQixJQUFJLENBQUMsT0FBTyxDQUFDLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUE7YUFDeEM7U0FDRjtJQUNILENBQUM7SUFDRDs7O09BR0c7SUFDSDs7T0FFRztJQUNILFNBQVM7UUFDUCxJQUFJO1lBQ0YsSUFBRyxDQUFDLElBQUksQ0FBQyx1QkFBdUIsRUFBQztnQkFDL0IsSUFBRyxJQUFJLENBQUMsc0JBQXNCLEVBQUM7b0JBQzdCLHFCQUFxQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsc0JBQXNCLENBQUMsQ0FBQTtpQkFDeEQ7cUJBQ0c7b0JBQ0YscUJBQXFCLENBQUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLEtBQUssQ0FBQyx3QkFBd0IsQ0FBQyxDQUFBO2lCQUNqRjthQUNGO2lCQUNHO2dCQUNGLE9BQU07YUFDUDtTQUNGO1FBQUMsT0FBTyxLQUFVLEVBQUU7WUFDYixJQUFHLElBQUksQ0FBQyxPQUFPLEVBQUM7Z0JBQ3BCLElBQUksQ0FBQyxPQUFPLENBQUMsa0JBQWtCLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQTthQUN4QztTQUNGO0lBQ0gsQ0FBQztJQUNEOzs7T0FHRztJQUNIOztPQUVHO0lBQ0gsc0JBQXNCLENBQUMsWUFBMkM7UUFDaEUsSUFBSSxLQUFLLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxDQUFDLE9BQStCLEVBQUUsRUFBRSxDQUFDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxJQUFJLFlBQVksRUFBRSxpQkFBaUIsRUFBRSxDQUFDLENBQUM7UUFDcEosSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDdkMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQTtJQUMxQixDQUFDO0lBVUQsYUFBYSxDQUFDLEtBQVMsRUFBQyxZQUFvQztRQUMxRCxJQUFJLE1BQU0sR0FBbUIsS0FBSyxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUE7UUFDaEQsSUFBSSxDQUFDLHVCQUF1QixHQUFHLFlBQVksQ0FBQztRQUM1QyxJQUFHLE1BQU0sRUFBQztZQUNSLE1BQU0sQ0FBQyxPQUFRLEVBQUUsQ0FBQTtTQUNsQjtJQUNILENBQUM7SUFDRDs7O09BR0c7SUFDSCxrRUFBa0U7SUFDbEUscUJBQXFCLENBQUMsWUFBb0M7UUFDeEQsSUFBRyxJQUFJLENBQUMsYUFBYSxJQUFJLGFBQWEsQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFHO1lBQ25FLE9BQU8sSUFBSSxDQUFDLGtCQUFrQixJQUFLLElBQUksQ0FBQyxrQkFBMEIsRUFBRSxjQUFjLElBQUssWUFBb0IsRUFBRSxjQUFjLENBQUE7U0FDNUg7YUFDSTtZQUNILE9BQU8sS0FBSyxDQUFBO1NBQ2I7SUFDSCxDQUFDO0lBQ0Q7OztPQUdHO0lBQ0gsOENBQThDO0lBQzlDLDBCQUEwQjtRQUN4QixJQUFJLElBQUksQ0FBQyx1QkFBdUIsRUFBRTtZQUNoQyxJQUFJLElBQUksQ0FBQyxrQkFBa0IsSUFBSSxJQUFJLENBQUMsa0JBQWtCLENBQUMsaUJBQWlCLEVBQUUsSUFBSSxJQUFJLENBQUMsdUJBQXVCLENBQUMsaUJBQWlCLEVBQUUsRUFBRTtnQkFDOUgsSUFBSSxDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQTthQUMvQjtZQUNELElBQUksZ0JBQWdCLENBQUM7WUFDckIsSUFBSSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsdUJBQXVCLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztZQUMxRSxJQUFJLGdCQUFnQixLQUFLLHVCQUF1QixDQUFDLG1CQUFtQixDQUFDLElBQUksRUFBRTtnQkFDekUsZ0JBQWdCLEdBQUksSUFBSSxDQUFDLHVCQUF1QixDQUFDLG1CQUFtQixFQUFxQixDQUFDLE1BQU0sRUFBRSxDQUFBO2FBQ25HO2lCQUNJO2dCQUNILGdCQUFnQixHQUFJLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxtQkFBbUIsRUFBc0IsQ0FBQyxPQUFPLEVBQUUsQ0FBQTthQUNyRztZQUNELFNBQVMsQ0FBQyxrQkFBa0IsQ0FBQyxnQkFBZ0IsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDLElBQUksQ0FDbkUsbUJBQW1CLENBQUMsRUFBRTtnQkFDcEIsMkJBQTJCLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyx1QkFBd0IsQ0FBQyxDQUFBO2dCQUNyRixJQUFJLENBQUMsc0JBQXNCLENBQUMsSUFBSSxDQUFDLHVCQUF1QixDQUFDLENBQUE7Z0JBQ3pELElBQUksQ0FBQyx1QkFBdUIsR0FBRyxJQUFJLENBQUM7Z0JBQ3BDLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUE7WUFDMUIsQ0FBQyxDQUNGLENBQUM7WUFDRixJQUFJLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQTtZQUN6QixJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxDQUFBO1NBQ3pCO0lBQ0gsQ0FBQztJQUNELDRCQUE0QjtJQUM1QixpQkFBaUIsQ0FBQyxPQUE4QjtRQUM5QyxJQUFJLENBQUMsa0JBQWtCLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDbkMsQ0FBQztJQUNELGtCQUFrQixDQUFDLFlBQW9DO1FBQ3JELElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUM1QyxDQUFDOzs2SEFyekNVLCtCQUErQjtpSEFBL0IsK0JBQStCLG8xREN2QzVDLHFzSkFvRkE7NEZEN0NhLCtCQUErQjtrQkFOM0MsU0FBUzsrQkFDRSx5QkFBeUIsbUJBR2xCLHVCQUF1QixDQUFDLE1BQU07aUtBTXRDLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUNLLE9BQU87c0JBQWpCLEtBQUs7Z0JBQ0csaUJBQWlCO3NCQUF6QixLQUFLO2dCQUNHLG9CQUFvQjtzQkFBNUIsS0FBSztnQkFDRyxjQUFjO3NCQUF0QixLQUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0csYUFBYTtzQkFBckIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBR0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBQ0csa0JBQWtCO3NCQUExQixLQUFLO2dCQUNHLHNCQUFzQjtzQkFBOUIsS0FBSztnQkFDRyxrQkFBa0I7c0JBQTFCLEtBQUs7Z0JBQ0csYUFBYTtzQkFBckIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLDJCQUEyQjtzQkFBbkMsS0FBSztnQkFDRyxjQUFjO3NCQUF0QixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csY0FBYztzQkFBdEIsS0FBSztnQkFDRyxjQUFjO3NCQUF0QixLQUFLO2dCQUNHLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFDRyxjQUFjO3NCQUF0QixLQUFLO2dCQUNHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ0csY0FBYztzQkFBdEIsS0FBSztnQkFFRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLO2dCQUNHLGlCQUFpQjtzQkFBekIsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0csdUJBQXVCO3NCQUEvQixLQUFLO2dCQUNHLGtCQUFrQjtzQkFBMUIsS0FBSztnQkFDRyxpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBQ0csZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUNHLG9CQUFvQjtzQkFBNUIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLDZCQUE2QjtzQkFBckMsS0FBSztnQkFnQkcsYUFBYTtzQkFBckIsS0FBSztnQkFLRyxVQUFVO3NCQUFsQixLQUFLO2dCQVFHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBSUcsa0JBQWtCO3NCQUExQixLQUFLO2dCQU1HLGFBQWE7c0JBQXJCLEtBQUs7Z0JBV0csb0JBQW9CO3NCQUE1QixLQUFLO2dCQUtHLG1CQUFtQjtzQkFBM0IsS0FBSztnQkFDRyxtQkFBbUI7c0JBQTNCLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQTZGRyxZQUFZO3NCQUFwQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQXBwbGljYXRpb25SZWYsXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBJbnB1dCxcbiAgTmdab25lLFxuICBPbkNoYW5nZXMsXG4gIE9uSW5pdCxcbiAgU2ltcGxlQ2hhbmdlcyxcbiAgVGVtcGxhdGVSZWYsXG4gIFZpZXdDaGlsZCxcbn0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IENvbWV0Q2hhdCB9IGZyb20gXCJAY29tZXRjaGF0LXByby9jaGF0XCI7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tIFwicnhqc1wiO1xuaW1wb3J0IHtTZWxlY3Rpb25Nb2RlLFN0YXRlcywgVGl0bGVBbGlnbm1lbnQsQ29udmVyc2F0aW9uVXRpbHMgLCBNZXNzYWdlUmVjZWlwdFV0aWxzLCBDb21ldENoYXRTb3VuZE1hbmFnZXIsQ29tZXRDaGF0VUlLaXRVdGlsaXR5LCBCYXNlU3R5bGUsIENvbnZlcnNhdGlvbnNTdHlsZSwgTGlzdFN0eWxlLCAgTWVzc2FnZVN0YXR1cyB9IGZyb20gXCJAY29tZXRjaGF0L3Vpa2l0LXNoYXJlZFwiO1xuaW1wb3J0IHtDb21ldENoYXRUaGVtZSwgZm9udEhlbHBlciwgbG9jYWxpemUsQ29tZXRDaGF0T3B0aW9uLCBDb21ldENoYXRHcm91cEV2ZW50cywgQ29tZXRDaGF0VUlLaXRDb25zdGFudHMsSUdyb3VwTGVmdCwgSUdyb3VwTWVtYmVyQWRkZWQsIElHcm91cE1lbWJlcktpY2tlZEJhbm5lZCwgSUdyb3VwTWVtYmVyU2NvcGVDaGFuZ2VkLElNZXNzYWdlcywgQ29tZXRDaGF0VXNlckV2ZW50cywgQ29tZXRDaGF0TWVzc2FnZUV2ZW50cywgQ29tZXRDaGF0Q29udmVyc2F0aW9uRXZlbnRzLERhdGVQYXR0ZXJucywgQ29tZXRDaGF0Q2FsbEV2ZW50c30gZnJvbSAnQGNvbWV0Y2hhdC91aWtpdC1yZXNvdXJjZXMnXG5pbXBvcnQgJ0Bjb21ldGNoYXQvdWlraXQtZWxlbWVudHMnXG5pbXBvcnQgIHsgQXZhdGFyU3R5bGUsIExpc3RJdGVtU3R5bGUsQ29uZmlybURpYWxvZ1N0eWxlLFJlY2VpcHRTdHlsZSwgRGF0ZVN0eWxlLCBCYWRnZVN0eWxlfSBmcm9tICdAY29tZXRjaGF0L3Vpa2l0LWVsZW1lbnRzJ1xuaW1wb3J0IHsgQ29tZXRjaGF0TGlzdENvbXBvbmVudCB9IGZyb20gXCIuLi8uLi9Db21ldENoYXRMaXN0L2NvbWV0Y2hhdC1saXN0LmNvbXBvbmVudFwiO1xuaW1wb3J0IHsgTWVzc2FnZSB9IGZyb20gXCJAYW5ndWxhci9jb21waWxlci9zcmMvaTE4bi9pMThuX2FzdFwiO1xuaW1wb3J0IHsgQ29tZXRDaGF0VGhlbWVTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL0NvbWV0Q2hhdFRoZW1lLnNlcnZpY2VcIjtcbmltcG9ydCB7IENoYXRDb25maWd1cmF0b3IgfSBmcm9tIFwiLi4vLi4vU2hhcmVkL0ZyYW1ld29yay9DaGF0Q29uZmlndXJhdG9yXCI7XG5pbXBvcnQgeyBDb21ldENoYXRFeGNlcHRpb24gfSBmcm9tIFwiLi4vLi4vU2hhcmVkL1V0aWxzL0NvbWVDaGF0RXhjZXB0aW9uXCI7XG4vKipcbipcbiogQ29tZXRDaGF0Q29udmVyc2F0aW9uIGlzIGEgd3JhcHBlciBjb21wb25lbnQgY29uc2lzdHMgb2YgQ29tZXRDaGF0TGlzdEJhc2VDb21wb25lbnQgYW5kIENvbnZlcnNhdGlvbkxpc3RDb21wb25lbnQuXG4qXG4qIEB2ZXJzaW9uIDEuMC4wXG4qIEBhdXRob3IgQ29tZXRDaGF0VGVhbVxuKiBAY29weXJpZ2h0IMKpIDIwMjIgQ29tZXRDaGF0IEluYy5cbipcbiovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6IFwiY29tZXRjaGF0LWNvbnZlcnNhdGlvbnNcIixcbiAgdGVtcGxhdGVVcmw6IFwiLi9jb21ldGNoYXQtY29udmVyc2F0aW9ucy5jb21wb25lbnQuaHRtbFwiLFxuICBzdHlsZVVybHM6IFtcIi4vY29tZXRjaGF0LWNvbnZlcnNhdGlvbnMuY29tcG9uZW50LnNjc3NcIl0sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBDb21ldENoYXRDb252ZXJzYXRpb25zQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMge1xuICAvKipcbiogVGhpcyBwcm9wZXJ0aWVzIHdpbGwgY29tZSBmcm9tIFBhcmVudC5cbiovXG4gIEBJbnB1dCgpIHN1YnRpdGxlVmlldyE6IFRlbXBsYXRlUmVmPGFueT47XG4gIEBJbnB1dCgpIHRpdGxlOiBzdHJpbmcgPSBsb2NhbGl6ZShcIkNIQVRTXCIpOyAvL1RpdGxlIG9mIHRoZSBjb21wb25lbnRcbiAgQElucHV0KCkgICBvcHRpb25zITogKChtZW1iZXI6Q29tZXRDaGF0LkNvbnZlcnNhdGlvbik9PkNvbWV0Q2hhdE9wdGlvbltdKSB8IG51bGw7XG4gIEBJbnB1dCgpIHNlYXJjaFBsYWNlSG9sZGVyOiBzdHJpbmcgPSBsb2NhbGl6ZShcIlNFQVJDSFwiKTsgLy8gcGxhY2Vob2xkZXIgdGV4dCBvZiBzZWFyY2ggaW5wdXRcbiAgQElucHV0KCkgZGlzYWJsZVVzZXJzUHJlc2VuY2U6IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgZGlzYWJsZVJlY2VpcHQ6IGJvb2xlYW4gPSB0cnVlO1xuICBASW5wdXQoKSBkaXNhYmxlVHlwaW5nOmJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgZGVsaXZlcmVkSWNvbjpzdHJpbmcgPSBcImFzc2V0cy9tZXNzYWdlLWRlbGl2ZXJlZC5zdmdcIlxuICBASW5wdXQoKSByZWFkSWNvbjpzdHJpbmcgPSBcImFzc2V0cy9tZXNzYWdlLXJlYWQuc3ZnXCI7XG4gIEBJbnB1dCgpIGVycm9ySWNvbjpzdHJpbmcgPSBcImFzc2V0cy93YXJuaW5nLXNtYWxsLnN2Z1wiO1xuICBASW5wdXQoKSBkYXRlUGF0dGVybjpEYXRlUGF0dGVybnMgPSBEYXRlUGF0dGVybnMuRGF5RGF0ZVRpbWU7XG4gIEBJbnB1dCgpIG9uRXJyb3I6KGVycm9yOkNvbWV0Q2hhdC5Db21ldENoYXRFeGNlcHRpb24pPT52b2lkID0gKGVycm9yOkNvbWV0Q2hhdC5Db21ldENoYXRFeGNlcHRpb24pPT57XG4gICAgY29uc29sZS5sb2coZXJyb3IpXG4gIH1cbiAgQElucHV0KCkgc2VudEljb246c3RyaW5nID0gXCJhc3NldHMvbWVzc2FnZS1zZW50LnN2Z1wiO1xuICBASW5wdXQoKSBwcml2YXRlR3JvdXBJY29uOnN0cmluZyA9XCJhc3NldHMvUHJpdmF0ZS5zdmdcIjtcbiAgQElucHV0KCkgcHJvdGVjdGVkR3JvdXBJY29uOnN0cmluZyA9IFwiYXNzZXRzL0xvY2tlZC5zdmdcIjtcbiAgQElucHV0KCkgY3VzdG9tU291bmRGb3JNZXNzYWdlczpzdHJpbmcgPSBcIlwiO1xuICBASW5wdXQoKSBhY3RpdmVDb252ZXJzYXRpb246IENvbWV0Q2hhdC5Db252ZXJzYXRpb24gfCBudWxsID0gbnVsbDsgLy9zZWxlY3RlZCBjb252ZXJzYXRpb25cbiAgQElucHV0KCkgc2VhcmNoSWNvblVSTDogc3RyaW5nID0gXCJhc3NldHMvc2VhcmNoLnN2Z1wiOyAvL2ltYWdlIFVSTCBvZiB0aGUgc2VhcmNoIGljb25cbiAgQElucHV0KCkgaGlkZVNlYXJjaDogYm9vbGVhbiA9IHRydWU7IC8vc3dpdGNoIG9uL2ZmIHNlYXJjaCBpbnB1dFxuICBASW5wdXQoKSBjb252ZXJzYXRpb25zUmVxdWVzdEJ1aWxkZXI6IGFueTtcbiAgQElucHV0KCkgZW1wdHlTdGF0ZVZpZXchOiBUZW1wbGF0ZVJlZjxhbnk+O1xuICBASW5wdXQoKSBvblNlbGVjdCE6IChjb252ZXJzYXRpb246Q29tZXRDaGF0LkNvbnZlcnNhdGlvbik9PnZvaWQ7XG4gIEBJbnB1dCgpIGxvYWRpbmdJY29uVVJMOnN0cmluZyA9IFwiYXNzZXRzL1NwaW5uZXIuc3ZnXCJcbiAgQElucHV0KCkgZXJyb3JTdGF0ZVZpZXchOiBUZW1wbGF0ZVJlZjxhbnk+O1xuICBASW5wdXQoKSBsb2FkaW5nU3RhdGVWaWV3ITogVGVtcGxhdGVSZWY8YW55PjtcbiAgQElucHV0KCkgZW1wdHlTdGF0ZVRleHQ6IHN0cmluZyA9IGxvY2FsaXplKFwiTk9fQ0hBVFNfRk9VTkRcIilcbiAgQElucHV0KCkgZXJyb3JTdGF0ZVRleHQ6IHN0cmluZyA9IGxvY2FsaXplKFwiU09NRVRISU5HX1dST05HXCIpO1xuICBASW5wdXQoKSB0aXRsZUFsaWdubWVudDogVGl0bGVBbGlnbm1lbnQgPSBUaXRsZUFsaWdubWVudC5sZWZ0O1xuXG4gIEBJbnB1dCgpIGxpc3RJdGVtVmlldyE6IFRlbXBsYXRlUmVmPGFueT47XG4gIEBJbnB1dCgpIG1lbnUhOiBUZW1wbGF0ZVJlZjxhbnk+O1xuICBASW5wdXQoKSBoaWRlU2VwYXJhdG9yOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIHNlYXJjaFBsYWNlaG9sZGVyOiBzdHJpbmcgPSBsb2NhbGl6ZShcIlNFQVJDSFwiKTtcbiAgQElucHV0KCkgaGlkZUVycm9yOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIHNlbGVjdGlvbk1vZGU6IFNlbGVjdGlvbk1vZGUgPSBTZWxlY3Rpb25Nb2RlLm5vbmU7XG4gIEBJbnB1dCgpIGRpc2FibGVTb3VuZEZvck1lc3NhZ2VzOmJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgY29uZmlybURpYWxvZ1RpdGxlID0gbG9jYWxpemUoXCJERUxFVEVfQ09OVkVSU0FUSU9OXCIpXG4gIEBJbnB1dCgpIGNvbmZpcm1CdXR0b25UZXh0OiBzdHJpbmcgPSBsb2NhbGl6ZShcIkRFTEVURVwiKTtcbiAgQElucHV0KCkgY2FuY2VsQnV0dG9uVGV4dDogc3RyaW5nID0gbG9jYWxpemUoXCJDQU5DRUxcIik7XG4gIEBJbnB1dCgpIGNvbmZpcm1EaWFsb2dNZXNzYWdlOiBzdHJpbmcgPSBsb2NhbGl6ZShcIldPVUxEX19ZT1VfTElLRV9UT19ERUxFVEVfVEhJU19DT05WRVJTQVRJT05cIik7XG4gIEBJbnB1dCgpIG9uSXRlbUNsaWNrITooY29udmVyc2F0aW9uOkNvbWV0Q2hhdC5Db252ZXJzYXRpb24pPT52b2lkO1xuICBASW5wdXQoKSBkZWxldGVDb252ZXJzYXRpb25EaWFsb2dTdHlsZTogQ29uZmlybURpYWxvZ1N0eWxlID0ge1xuICAgIGNvbmZpcm1CdXR0b25CYWNrZ3JvdW5kOiBcIlwiLFxuICAgIGNhbmNlbEJ1dHRvbkJhY2tncm91bmQ6IFwiXCIsXG4gICAgY29uZmlybUJ1dHRvblRleHRDb2xvcjogXCJcIixcbiAgICBjb25maXJtQnV0dG9uVGV4dEZvbnQ6IFwiXCIsXG4gICAgY2FuY2VsQnV0dG9uVGV4dENvbG9yOiBcIlwiLFxuICAgIGNhbmNlbEJ1dHRvblRleHRGb250OiBcIlwiLFxuICAgIHRpdGxlRm9udDogXCJcIixcbiAgICB0aXRsZUNvbG9yOiBcIlwiLFxuICAgIG1lc3NhZ2VUZXh0Rm9udDogXCJcIixcbiAgICBtZXNzYWdlVGV4dENvbG9yOiBcIlwiLFxuICAgIGJhY2tncm91bmQ6IFwiXCIsXG4gICAgYm9yZGVyOlwiMXB4IHNvbGlkICNmMmYyZjJcIixcbiAgICBoZWlnaHQ6XCIxMDAlXCIsXG4gICAgd2lkdGg6XCIxMDAlXCJcbiAgfVxuICBASW5wdXQoKSBiYWNrZHJvcFN0eWxlIDpCYXNlU3R5bGUgPSB7XG4gICAgaGVpZ2h0OlwiMTAwJVwiLFxuICAgIHdpZHRoOlwiMTAwJVwiLFxuICAgIGJhY2tncm91bmQ6XCJyZ2JhKDAsIDAsIDAsIDAuNSlcIlxuICB9XG4gIEBJbnB1dCgpIGJhZGdlU3R5bGU6IEJhZGdlU3R5bGUgPSB7XG4gICAgd2lkdGg6IFwiMjVweFwiLFxuICAgIGhlaWdodDogXCIxNXB4XCIsXG4gICAgYmFja2dyb3VuZDogXCIjNWFhZWZmXCIsXG4gICAgdGV4dENvbG9yOiBcIndoaXRlXCIsXG4gICAgdGV4dEZvbnQ6IFwiNDAwIDEzcHggSW50ZXIsIHNhbnMtc2VyaWZcIixcbiAgICBib3JkZXJSYWRpdXM6XCIxNnB4XCJcbiAgfVxuICBASW5wdXQoKSBkYXRlU3R5bGU6IERhdGVTdHlsZSA9IHtcbiAgICB0ZXh0Rm9udDogXCI0MDAgMTFweCBJbnRlciwgc2Fucy1zZXJpZlwiLFxuICAgIHRleHRDb2xvcjogXCJyZ2JhKDIwLCAyMCwgMjAsIDAuNTgpXCIsXG4gIH1cbiAgQElucHV0KCkgY29udmVyc2F0aW9uc1N0eWxlOiBDb252ZXJzYXRpb25zU3R5bGUgPSB7XG4gICAgd2lkdGg6XCJcIixcbiAgICBoZWlnaHQ6XCJcIixcbiAgICBib3JkZXI6XCJcIixcbiAgICBib3JkZXJSYWRpdXM6XCJcIixcbiAgfVxuICBASW5wdXQoKSBsaXN0SXRlbVN0eWxlOiBMaXN0SXRlbVN0eWxlID0ge1xuICAgIGhlaWdodDogXCIxMDAlXCIsXG4gICAgd2lkdGg6IFwiMTAwJVwiLFxuICAgIGJhY2tncm91bmQ6IFwiXCIsXG4gICAgYWN0aXZlQmFja2dyb3VuZDogXCJcIixcbiAgICBib3JkZXJSYWRpdXM6IFwiZ3JleVwiLFxuICAgIHRpdGxlRm9udDogXCJcIixcbiAgICB0aXRsZUNvbG9yOiBcIlwiLFxuICAgIGJvcmRlcjogXCJcIixcbiAgICBzZXBhcmF0b3JDb2xvcjpcInJnYigyMzIsIDIzMiwgMjMyKVwiXG4gIH07XG4gIEBJbnB1dCgpIHN0YXR1c0luZGljYXRvclN0eWxlOiBhbnkgPSB7XG4gICAgaGVpZ2h0OiBcIjEwcHhcIixcbiAgICB3aWR0aDogXCIxMHB4XCIsXG4gICAgYm9yZGVyUmFkaXVzOiBcIjE2cHhcIlxuICB9O1xuICBASW5wdXQoKSB0eXBpbmdJbmRpY2F0b3JUZXh0OnN0cmluZyA9IGxvY2FsaXplKFwiSVNfVFlQSU5HXCIpO1xuICBASW5wdXQoKSB0aHJlYWRJbmRpY2F0b3JUZXh0OnN0cmluZyA9IGxvY2FsaXplKFwiSU5fQV9USFJFQURcIik7XG4gIEBJbnB1dCgpIGF2YXRhclN0eWxlOiBBdmF0YXJTdHlsZSA9IHt9O1xuICBASW5wdXQoKSByZWNlaXB0U3R5bGU6UmVjZWlwdFN0eWxlID0ge31cbiAgY2NHcm91cE1lbWJlckFkZGVkITpTdWJzY3JpcHRpb247XG4gIGNjR3JvdXBNZW1iZXJKb2luZWQhOlN1YnNjcmlwdGlvbjtcbiAgY2NHcm91cE1lbWJlcktpY2tlZCE6U3Vic2NyaXB0aW9uO1xuICBjY0dyb3VwTWVtYmVyQmFubmVkITpTdWJzY3JpcHRpb247XG4gIGNjR3JvdXBNZW1iZXJTY29wZUNoYW5nZWQhOlN1YnNjcmlwdGlvbjtcbiAgY2NPd25lcnNoaXBDaGFuZ2VkITpTdWJzY3JpcHRpb247XG4gICBjY01lc3NhZ2VFZGl0ITogU3Vic2NyaXB0aW9uO1xuICAgY2NNZXNzYWdlU2VudCE6IFN1YnNjcmlwdGlvbjtcbiAgIGNjTWVzc2FnZUVkaXRlZCE6IFN1YnNjcmlwdGlvbjtcbiAgIGNjTWVzc2FnZURlbGV0ZSE6IFN1YnNjcmlwdGlvbjtcbiAgIGNjR3JvdXBEZWxldGVkITogU3Vic2NyaXB0aW9uO1xuICAgY2NHcm91cExlZnQhOiBTdWJzY3JpcHRpb247XG4gICBjY1VzZXJCbG9ja2VkITogU3Vic2NyaXB0aW9uO1xuICAgY2NNZXNzYWdlUmVhZCE6IFN1YnNjcmlwdGlvbjtcbiAgIHB1YmxpYyBjY091dGdvaW5nQ2FsbCE6IFN1YnNjcmlwdGlvbjtcbiAgIHB1YmxpYyBjY0NhbGxSZWplY3RlZCE6IFN1YnNjcmlwdGlvbjtcbiAgIHB1YmxpYyBjY0NhbGxFbmRlZCE6IFN1YnNjcmlwdGlvbjtcbiAgIHB1YmxpYyBjY0NhbGxBY2NlcHRlZCE6U3Vic2NyaXB0aW9uO1xuICBpY29uU3R5bGU6YW55ID0ge1xuICAgIGljb25UaW50OlwibGlnaHRncmV5XCIsXG4gICAgaGVpZ2h0OlwiMjBweFwiLFxuICAgIHdpZHRoOlwiMjBweFwiXG4gIH1cbiAgbGlzdFN0eWxlOkxpc3RTdHlsZSA9IG5ldyBMaXN0U3R5bGUoe30pXG4gIG1lbnVzdHlsZSA9IHtcbiAgICB3aWR0aDogXCJcIixcbiAgICBoZWlnaHQ6IFwiXCIsXG4gICAgYm9yZGVyOiBcIm5vbmVcIixcbiAgICBib3JkZXJSYWRpdXM6IFwiOHB4XCIsXG4gICAgYmFja2dyb3VuZDogXCJ0cmFuc3BhcmVudFwiLFxuICAgIHRleHRGb250OiBcIlwiLFxuICAgIHRleHRDb2xvcjogXCJibGFja1wiLFxuICAgIGljb25UaW50OiBcImdyZXlcIixcbiAgICBpY29uQmFja2dyb3VuZDogXCJ0cmFuc3BhcmVudFwiLFxuICAgIGljb25Cb3JkZXI6IFwibm9uZVwiLFxuICAgIGljb25Cb3JkZXJSYWRpdXM6IFwiMFwiLFxuICAgIHN1Ym1lbnVXaWR0aDogXCI3MHB4XCIsXG4gICAgc3VibWVudUhlaWdodDogXCIyMHB4XCIsXG4gICAgc3VibWVudUJvcmRlcjogXCIxcHggc29saWQgI2U4ZThlOFwiLFxuICAgIHN1Ym1lbnVCb3JkZXJSYWRpdXM6IFwiOHB4XCIsXG4gICAgc3VibWVudUJhY2tncm91bmQ6IFwid2hpdGVcIixcbiAgfVxuICBwdWJsaWMgdHlwaW5nSW5kaWNhdG9yITpDb21ldENoYXQuVHlwaW5nSW5kaWNhdG9yIHwgbnVsbFxuICBwdWJsaWMgdHlwaW5nTGlzdGVuZXJJZDogc3RyaW5nID0gXCJjb252ZXJzYXRpb25fX0xJU1RFTkVSXCIgKyBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcbiAgcHVibGljIGNhbGxMaXN0ZW5lcklkID0gXCJjYWxsX1wiKyBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcbiAgc2VsZWN0aW9ubW9kZUVudW06IHR5cGVvZiBTZWxlY3Rpb25Nb2RlID0gU2VsZWN0aW9uTW9kZTtcbiAgcHVibGljIGlzRGlhbG9nT3BlbjogYm9vbGVhbiA9IGZhbHNlO1xuICAvLyBwdWJsaWMgbG9nZ2VkSW5Vc2VyITogQ29tZXRDaGF0LlVzZXIgfCBudWxsO1xuICBwdWJsaWMgaXNFbXB0eTogYm9vbGVhbiA9IGZhbHNlO1xuICBwdWJsaWMgaXNMb2FkaW5nOiBib29sZWFuID0gdHJ1ZTtcbiAgcHVibGljIHN0YXRlOiBTdGF0ZXMgPSBTdGF0ZXMubG9hZGluZztcbiAgcHVibGljIHN0YXR1c0NvbG9yOiBhbnkgPSB7XG4gICAgb25saW5lOiBcIlwiLFxuICAgIHByaXZhdGU6IFwiXCIsXG4gICAgcGFzc3dvcmQ6IFwiI0Y3QTUwMFwiLFxuICAgIHB1YmxpYzogXCJcIlxuICB9XG4gIHB1YmxpYyBsaW1pdDpudW1iZXIgPSAzMDtcbiAgcHVibGljIGlzRXJyb3I6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHVibGljIGNvbnZlcnNhdGlvbkxpc3Q6IENvbWV0Q2hhdC5Db252ZXJzYXRpb25bXSA9IFtdO1xuICBwdWJsaWMgc2Nyb2xsZWRUb0JvdHRvbTogYm9vbGVhbiA9IGZhbHNlO1xuICBwdWJsaWMgY2hlY2tJdGVtQ2hhbmdlOiBib29sZWFuID0gZmFsc2U7XG4gIGNvbnZlcnNhdGlvbk9wdGlvbnMhOkNvbWV0Q2hhdE9wdGlvbltdO1xuICBwdWJsaWMgc2hvd0NvbmZpcm1EaWFsb2c6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHVibGljIGNvbnZlcnNhdGlvblRvQmVEZWxldGVkOiBDb21ldENoYXQuQ29udmVyc2F0aW9uIHwgbnVsbCA9IG51bGw7XG4gIHB1YmxpYyBjb252ZXJzYXRpb25MaXN0ZW5lcklkOiBzdHJpbmcgPSBcImNoYXRsaXN0X1wiICsgbmV3IERhdGUoKS5nZXRUaW1lKCk7XG4gIHB1YmxpYyB1c2VyTGlzdGVuZXJJZDogc3RyaW5nID0gXCJjaGF0bGlzdF91c2VyX1wiICsgbmV3IERhdGUoKS5nZXRUaW1lKCk7XG4gIHB1YmxpYyBncm91cExpc3RlbmVySWQ6IHN0cmluZyA9IFwiY2hhdGxpc3RfZ3JvdXBfXCIgKyBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcbiAgcHVibGljIGdyb3VwVG9VcGRhdGU6IENvbWV0Q2hhdC5Hcm91cCB8IHt9ID0ge307XG4gIGVuYWJsZVBvbGxzOmJvb2xlYW4gPSBmYWxzZTtcbiAgZW5hYmxlU3RpY2tlcnM6Ym9vbGVhbiA9IGZhbHNlO1xuICBlbmFibGVXaGl0ZWJvYXJkOmJvb2xlYW4gPSBmYWxzZVxuICBlbmFibGVEb2N1bWVudDpib29sZWFuID0gZmFsc2VcbiAgdGhyZWFkSWNvblVSTDpzdHJpbmcgPSBcImFzc2V0cy90aHJlYWQtYXJyb3cuc3ZnXCJcbiAgcHVibGljIGNvbmZpcm1EaWFsb2dTdHlsZTogQ29uZmlybURpYWxvZ1N0eWxlID0ge1xuICAgIGhlaWdodDogXCIxMDAlXCIsXG4gICAgd2lkdGg6IFwiMTAwJVwiLFxuICAgIGJvcmRlclJhZGl1czogXCI4cHhcIlxuICB9XG4gIHN1YnRpdGxlVmFsdWUhOiBzdHJpbmc7XG4gIG1vZGFsU3R5bGU6QmFzZVN0eWxlID0ge1xuICAgIGhlaWdodDpcIjIzMHB4XCIsXG4gICAgd2lkdGg6XCIyNzBweFwiXG5cbiAgfVxuICAvKipcbiAgICAqIFByb3BlcnRpZXMgZm9yIGludGVybmFsIHVzZVxuICAgICovXG4gIHB1YmxpYyBsb2NhbGl6ZSA9IGxvY2FsaXplO1xuICAvKipcbiogVGhpcyBwcm9wZXJ0aWVzIHdpbGwgY29tZSBmcm9tIFBhcmVudC5cbiovXG4gIEBJbnB1dCgpIGxvZ2dlZEluVXNlciE6IENvbWV0Q2hhdC5Vc2VyIHwgbnVsbDtcbiAgLyoqXG4gICogUHJvcGVydGllcyBmb3IgaW50ZXJuYWwgdXNlXG4gICovXG4gIC8qKlxuICAgKiBwYXNzaW5nIHRoaXMgY2FsbGJhY2sgdG8gbWVudUxpc3QgY29tcG9uZW50IG9uIGRlbGV0ZSBjbGlja1xuICAgKiBAcGFyYW0gIHtDb21ldENoYXQuQ29udmVyc2F0aW9ufSBjb252ZXJzYXRpb25cbiAgICovXG4gIGRlbGV0ZUNvbnZlcnNhdGlvbk9uQ2xpY2s6ICgoKT0+dm9pZCkgfCBudWxsID0gICgpPT4ge1xuICAgdGhpcy5zaG93Q29uZmlybWF0aW9uRGlhbG9nKHRoaXMuY29udmVyc2F0aW9uVG9CZURlbGV0ZWQhKVxuICB9XG4gIC8vIGNhbGxiYWNrIGZvciBjb25maXJtRGlhbG9nQ29tcG9uZW50XG4gIG9uQ29uZmlybUNsaWNrID0gKCkgPT4ge1xuICAgICAgdGhpcy5kZWxldGVTZWxlY3RlZENvbnZlcnNhdGlvbigpO1xuICB9XG4gIHNldFN0YXR1c0luZGljYXRvclN0eWxlID0gKGNvbnZlcnNhdGlvbjogQ29tZXRDaGF0LkNvbnZlcnNhdGlvbikgPT4ge1xuICAgIGlmIChjb252ZXJzYXRpb24uZ2V0Q29udmVyc2F0aW9uVHlwZSgpID09IENvbWV0Q2hhdFVJS2l0Q29uc3RhbnRzLk1lc3NhZ2VSZWNlaXZlclR5cGUuZ3JvdXApIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGhlaWdodDogXCIxMnB4XCIsXG4gICAgICAgIHdpZHRoOiBcIjEycHhcIixcbiAgICAgICAgYm9yZGVyUmFkaXVzOiBcIjE2cHhcIlxuICAgICAgfVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIHJldHVybiB0aGlzLnN0YXR1c0luZGljYXRvclN0eWxlXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gKiBAcGFyYW0gIHtDb21ldENoYXQuQ29udmVyc2F0aW9ufSBjb252ZXJzYXRpb25cbiAqL1xuICBjaGVja1N0YXR1c1R5cGUoY29udmVyc2F0aW9uOiBDb21ldENoYXQuQ29udmVyc2F0aW9uKSB7XG4gICAgbGV0IHVzZXI6Q29tZXRDaGF0LlVzZXIgPSBjb252ZXJzYXRpb24uZ2V0Q29udmVyc2F0aW9uV2l0aCgpIGFzIENvbWV0Q2hhdC5Vc2VyXG4gICAgaWYgKGNvbnZlcnNhdGlvbi5nZXRDb252ZXJzYXRpb25UeXBlKCkgPT0gQ29tZXRDaGF0VUlLaXRDb25zdGFudHMuTWVzc2FnZVJlY2VpdmVyVHlwZS51c2VyICYmICF0aGlzLmRpc2FibGVVc2Vyc1ByZXNlbmNlKSB7XG4gICAgICByZXR1cm4gdGhpcy5zdGF0dXNDb2xvclt1c2VyLmdldFN0YXR1cygpXVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIHJldHVybiB0aGlzLnN0YXR1c0NvbG9yW2NvbnZlcnNhdGlvbi5nZXRDb252ZXJzYXRpb25UeXBlKCldXG4gICAgfVxuICB9XG4gIGdldEV4dGVuc2lvbkRhdGEobWVzc2FnZU9iamVjdDogQ29tZXRDaGF0LkJhc2VNZXNzYWdlKSB7XG4gICAgbGV0IG1lc3NhZ2VUZXh0XG4gICAgLy94c3MgZXh0ZW5zaW9ucyBkYXRhXG4gICAgY29uc3QgeHNzRGF0YSA9IENvbWV0Q2hhdFVJS2l0VXRpbGl0eS5jaGVja01lc3NhZ2VGb3JFeHRlbnNpb25zRGF0YShtZXNzYWdlT2JqZWN0LCBcInhzcy1maWx0ZXJcIik7XG4gICAgaWYgKHhzc0RhdGEgJiYgQ29tZXRDaGF0VUlLaXRVdGlsaXR5LmNoZWNrSGFzT3duUHJvcGVydHkoeHNzRGF0YSwgXCJzYW5pdGl6ZWRfdGV4dFwiKSAmJiBDb21ldENoYXRVSUtpdFV0aWxpdHkuY2hlY2tIYXNPd25Qcm9wZXJ0eSh4c3NEYXRhLCBcImhhc1hTU1wiKSAmJiB4c3NEYXRhLmhhc1hTUyA9PT0gXCJ5ZXNcIikge1xuICAgICAgbWVzc2FnZVRleHQgPSB4c3NEYXRhLnNhbml0aXplZF90ZXh0O1xuICAgIH1cbiAgICAvL2RhdGFtYXNraW5nIGV4dGVuc2lvbnMgZGF0YVxuICAgIGNvbnN0IG1hc2tlZERhdGEgPSBDb21ldENoYXRVSUtpdFV0aWxpdHkuY2hlY2tNZXNzYWdlRm9yRXh0ZW5zaW9uc0RhdGEobWVzc2FnZU9iamVjdCwgXCJkYXRhLW1hc2tpbmdcIik7XG4gICAgaWYgKG1hc2tlZERhdGEgJiYgQ29tZXRDaGF0VUlLaXRVdGlsaXR5LmNoZWNrSGFzT3duUHJvcGVydHkobWFza2VkRGF0YSwgXCJkYXRhXCIpICYmIENvbWV0Q2hhdFVJS2l0VXRpbGl0eS5jaGVja0hhc093blByb3BlcnR5KG1hc2tlZERhdGEuZGF0YSwgXCJzZW5zaXRpdmVfZGF0YVwiKSAmJiBDb21ldENoYXRVSUtpdFV0aWxpdHkuY2hlY2tIYXNPd25Qcm9wZXJ0eShtYXNrZWREYXRhLmRhdGEsIFwibWVzc2FnZV9tYXNrZWRcIikgJiYgbWFza2VkRGF0YS5kYXRhLnNlbnNpdGl2ZV9kYXRhID09PSBcInllc1wiKSB7XG4gICAgICBtZXNzYWdlVGV4dCA9IG1hc2tlZERhdGEuZGF0YS5tZXNzYWdlX21hc2tlZDtcbiAgICB9XG4gICAgLy9wcm9mYW5pdHkgZXh0ZW5zaW9ucyBkYXRhXG4gICAgY29uc3QgcHJvZmFuZURhdGEgPSBDb21ldENoYXRVSUtpdFV0aWxpdHkuY2hlY2tNZXNzYWdlRm9yRXh0ZW5zaW9uc0RhdGEobWVzc2FnZU9iamVjdCwgXCJwcm9mYW5pdHktZmlsdGVyXCIpO1xuICAgIGlmIChwcm9mYW5lRGF0YSAmJiBDb21ldENoYXRVSUtpdFV0aWxpdHkuY2hlY2tIYXNPd25Qcm9wZXJ0eShwcm9mYW5lRGF0YSwgXCJwcm9mYW5pdHlcIikgJiYgQ29tZXRDaGF0VUlLaXRVdGlsaXR5LmNoZWNrSGFzT3duUHJvcGVydHkocHJvZmFuZURhdGEsIFwibWVzc2FnZV9jbGVhblwiKSAmJiBwcm9mYW5lRGF0YS5wcm9mYW5pdHkgPT09IFwieWVzXCIpIHtcbiAgICAgIG1lc3NhZ2VUZXh0ID0gcHJvZmFuZURhdGEubWVzc2FnZV9jbGVhbjtcbiAgICB9XG4gICAgcmV0dXJuIG1lc3NhZ2VUZXh0IHx8IChtZXNzYWdlT2JqZWN0IGFzIGFueSkudGV4dFxuICB9XG4gIHNldFN1YnRpdGxlID0gKGNvbnZlcnNhdGlvbk9iamVjdDogQ29tZXRDaGF0LkNvbnZlcnNhdGlvbikgPT4ge1xuICAgIGlmICh0aGlzLnR5cGluZ0luZGljYXRvcikge1xuICAgICAgY29uc3QgaXNUeXBpbmcgPSAoY29udmVyc2F0aW9uT2JqZWN0IGFzIGFueSk/LmNvbnZlcnNhdGlvbldpdGg/Lmd1aWQgPT0gdGhpcy50eXBpbmdJbmRpY2F0b3IuZ2V0UmVjZWl2ZXJJZCgpO1xuICAgICAgaWYgKGlzVHlwaW5nKSB7XG4gICAgICAgIHJldHVybiBgJHt0aGlzLnR5cGluZ0luZGljYXRvci5nZXRTZW5kZXIoKS5nZXROYW1lKCl9ICR7dGhpcy50eXBpbmdJbmRpY2F0b3JUZXh0fWA7XG4gICAgICB9IGVsc2UgaWYgKChjb252ZXJzYXRpb25PYmplY3QgYXMgYW55KT8uY29udmVyc2F0aW9uV2l0aD8udWlkID09IHRoaXMudHlwaW5nSW5kaWNhdG9yPy5nZXRTZW5kZXIoKS5nZXRVaWQoKSAmJiB0aGlzLnR5cGluZ0luZGljYXRvci5nZXRSZWNlaXZlclR5cGUoKSAhPT0gQ29tZXRDaGF0VUlLaXRDb25zdGFudHMuTWVzc2FnZVJlY2VpdmVyVHlwZS5ncm91cCkge1xuICAgICAgICByZXR1cm4gdGhpcy50eXBpbmdJbmRpY2F0b3JUZXh0O1xuICAgICAgfVxuICAgIH1cbiAgICBsZXQgc3VidGl0bGUgPSAgQ2hhdENvbmZpZ3VyYXRvci5nZXREYXRhU291cmNlKCkuZ2V0TGFzdENvbnZlcnNhdGlvbk1lc3NhZ2UoY29udmVyc2F0aW9uT2JqZWN0LCB0aGlzLmxvZ2dlZEluVXNlciEpXG4gICAgbGV0IGljb24gPSBjb252ZXJzYXRpb25PYmplY3Q/LmdldExhc3RNZXNzYWdlKCk/LmdldFR5cGUoKSA9PSBDb21ldENoYXRVSUtpdENvbnN0YW50cy5NZXNzYWdlVHlwZXMuYXVkaW8gPyBcIvCfk54gXCIgOiBcIvCfk7kgXCJcbiAgICByZXR1cm4gY29udmVyc2F0aW9uT2JqZWN0Py5nZXRMYXN0TWVzc2FnZSgpPy5nZXRDYXRlZ29yeSgpID09IENvbWV0Q2hhdFVJS2l0Q29uc3RhbnRzLk1lc3NhZ2VDYXRlZ29yeS5jYWxsID8gaWNvbiArIHN1YnRpdGxlIDogc3VidGl0bGVcbiAgfVxuICBjaGVja0dyb3VwVHlwZShjb252ZXJzYXRpb246IENvbWV0Q2hhdC5Db252ZXJzYXRpb24pOiBzdHJpbmcge1xuICAgIGxldCBpbWFnZTogc3RyaW5nID0gXCJcIjtcbiAgICBpZiAoY29udmVyc2F0aW9uLmdldENvbnZlcnNhdGlvblR5cGUoKSA9PSBDb21ldENoYXRVSUtpdENvbnN0YW50cy5NZXNzYWdlUmVjZWl2ZXJUeXBlLmdyb3VwKSB7XG4gICAgICBzd2l0Y2ggKGNvbnZlcnNhdGlvbi5nZXRDb252ZXJzYXRpb25UeXBlKCkpIHtcbiAgICAgICAgY2FzZSBDb21ldENoYXRVSUtpdENvbnN0YW50cy5Hcm91cFR5cGVzLnBhc3N3b3JkOlxuICAgICAgICAgIGltYWdlID0gdGhpcy5wcm90ZWN0ZWRHcm91cEljb247XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgQ29tZXRDaGF0VUlLaXRDb25zdGFudHMuR3JvdXBUeXBlcy5wcml2YXRlOlxuICAgICAgICAgIGltYWdlID0gdGhpcy5wcml2YXRlR3JvdXBJY29uO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGltYWdlID0gXCJcIlxuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gaW1hZ2VcbiAgfVxuICAvLyBjYWxsYmFjayBmb3IgY29uZmlybURpYWxvZ0NvbXBvbmVudFxuICBvbkNhbmNlbENsaWNrID0gKCkgPT4ge1xuICAgIHRoaXMuaXNEaWFsb2dPcGVuID0gZmFsc2VcbiAgICB0aGlzLmNvbnZlcnNhdGlvblRvQmVEZWxldGVkID0gbnVsbFxuICAgIHRoaXMucmVmLmRldGVjdENoYW5nZXMoKVxuICB9XG4gIGdldE1lc3NhZ2VSZWNlaXB0ID0gKGNvbnZlcnNhdGlvbjogQ29tZXRDaGF0LkNvbnZlcnNhdGlvbikgPT4ge1xuICAgIGxldCByZWNlaXB0ID0gTWVzc2FnZVJlY2VpcHRVdGlscy5nZXRSZWNlaXB0U3RhdHVzKGNvbnZlcnNhdGlvbi5nZXRMYXN0TWVzc2FnZSgpKVxuICAgIHJldHVybiByZWNlaXB0XG4gIH1cbiAgZ2V0RGF0ZSgpe1xuICAgIHJldHVybiB0aGlzLmRhdGVQYXR0ZXJuIHx8IERhdGVQYXR0ZXJucy5EYXlEYXRlVGltZVxuICB9XG4gIG9wdGlvbnNTdHlsZSA9IHtcbiAgICBiYWNrZ3JvdW5kOiBcInRyYW5zcGFyZW50XCIsXG4gICAgYm9yZGVyOiBcIm5vbmVcIlxuICB9XG4gIGlzQWN0aXZlOiBib29sZWFuID0gdHJ1ZTtcbiAgY29udGFjdHNOb3RGb3VuZDogYm9vbGVhbiA9IGZhbHNlO1xuICBjaGF0U2VhcmNoITogYm9vbGVhbjtcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBuZ1pvbmU6IE5nWm9uZSxwcml2YXRlIHJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYscHJpdmF0ZSB0aGVtZVNlcnZpY2U6Q29tZXRDaGF0VGhlbWVTZXJ2aWNlKSB7XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLnNldFRoZW1lU3R5bGUoKTtcbiAgICB0aGlzLnN1YnNjcmliZVRvRXZlbnRzKClcbmlmKHRoaXMuY29udmVyc2F0aW9uc1JlcXVlc3RCdWlsZGVyKXtcbiAgdGhpcy5jb252ZXJzYXRpb25zUmVxdWVzdEJ1aWxkZXI/LmJ1aWxkKClcbn1cbmVsc2V7XG4gIHRoaXMuY29udmVyc2F0aW9uc1JlcXVlc3RCdWlsZGVyID0gbmV3IENvbWV0Q2hhdC5Db252ZXJzYXRpb25zUmVxdWVzdEJ1aWxkZXIoKS5zZXRMaW1pdCh0aGlzLmxpbWl0KS5idWlsZCgpXG59XG4gICAgdGhpcy5zdGF0ZSA9IFN0YXRlcy5sb2FkaW5nO1xuICAgIHRoaXMuc2V0Q29udmVyc2F0aW9uT3B0aW9ucygpO1xuICAgIHRyeSB7XG4gICAgICB0aGlzLmdldENvbnZlcnNhdGlvbigpO1xuICAgICAgdGhpcy5hdHRhY2hMaXN0ZW5lcnModGhpcy5jb252ZXJzYXRpb25VcGRhdGVkKTtcbiAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICBpZih0aGlzLm9uRXJyb3Ipe1xuICAgICAgICB0aGlzLm9uRXJyb3IoQ29tZXRDaGF0RXhjZXB0aW9uKGVycm9yKSlcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5yZWYuZGV0ZWN0Q2hhbmdlcygpXG4gIH1cbnVwZGF0ZUNvbnZlcnNhdGlvbk9iamVjdChjb252ZXJzYXRpb246Q29tZXRDaGF0LkNvbnZlcnNhdGlvbil7XG4gIGxldCBpbmRleCA9IHRoaXMuY29udmVyc2F0aW9uTGlzdC5maW5kSW5kZXgoKGVsZW1lbnQ6IENvbWV0Q2hhdC5Db252ZXJzYXRpb24pID0+IGVsZW1lbnQuZ2V0Q29udmVyc2F0aW9uSWQoKSA9PSBjb252ZXJzYXRpb24uZ2V0Q29udmVyc2F0aW9uSWQoKSk7XG4gIHRoaXMuY29udmVyc2F0aW9uTGlzdC5zcGxpY2UoaW5kZXgsIDEsIGNvbnZlcnNhdGlvbik7XG4gIHRoaXMucmVmLmRldGVjdENoYW5nZXMoKVxufVxuICBzdWJzY3JpYmVUb0V2ZW50cygpe1xuICAgIHRoaXMuY2NHcm91cE1lbWJlclNjb3BlQ2hhbmdlZCA9IENvbWV0Q2hhdEdyb3VwRXZlbnRzLmNjR3JvdXBNZW1iZXJTY29wZUNoYW5nZWQuc3Vic2NyaWJlKChpdGVtOklHcm91cE1lbWJlclNjb3BlQ2hhbmdlZCk9PntcbiAgICAgIGxldCBjb252ZXJzYXRpb24gPSB0aGlzLmdldENvbnZlcnNhdGlvbkZyb21Hcm91cChpdGVtLmdyb3VwISlcbiAgICAgIGlmKGNvbnZlcnNhdGlvbil7XG4gICAgICAgIGNvbnZlcnNhdGlvbi5zZXRMYXN0TWVzc2FnZShpdGVtLm1lc3NhZ2UpXG4gICAgICAgIHRoaXMudXBkYXRlQ29udmVyc2F0aW9uT2JqZWN0KGNvbnZlcnNhdGlvbilcbiAgICAgIH1cbiAgICB9KVxuICAgIHRoaXMuY2NHcm91cE1lbWJlckFkZGVkID0gQ29tZXRDaGF0R3JvdXBFdmVudHMuY2NHcm91cE1lbWJlckFkZGVkLnN1YnNjcmliZSgoaXRlbTpJR3JvdXBNZW1iZXJBZGRlZCk9PntcbiAgICAgIGxldCBncm91cDpDb21ldENoYXQuR3JvdXAgPSBpdGVtLnVzZXJBZGRlZEluIVxuICAgICAgbGV0IGFjdGlvbk1lc3NhZ2U6Q29tZXRDaGF0LkFjdGlvbltdID0gaXRlbS5tZXNzYWdlcyFcbiAgICAgIGxldCBjb252ZXJzYXRpb246Q29tZXRDaGF0LkNvbnZlcnNhdGlvbiB8IG51bGwgPSB0aGlzLmdldENvbnZlcnNhdGlvbkZyb21Hcm91cChpdGVtLnVzZXJBZGRlZEluISlcbiAgICAgIGNvbnZlcnNhdGlvbj8uc2V0Q29udmVyc2F0aW9uV2l0aChncm91cClcbiAgICAgIGNvbnZlcnNhdGlvbj8uc2V0TGFzdE1lc3NhZ2UoYWN0aW9uTWVzc2FnZVthY3Rpb25NZXNzYWdlPy5sZW5ndGggLTFdKVxuICAgICAgdGhpcy51cGRhdGVDb252ZXJzYXRpb25PYmplY3QoY29udmVyc2F0aW9uISlcbiAgICB9KVxuICAgIHRoaXMuY2NHcm91cE1lbWJlcktpY2tlZCA9IENvbWV0Q2hhdEdyb3VwRXZlbnRzLmNjR3JvdXBNZW1iZXJLaWNrZWQuc3Vic2NyaWJlKChpdGVtOklHcm91cE1lbWJlcktpY2tlZEJhbm5lZCk9PntcbiAgICAgICAgIGxldCBjb252ZXJzYXRpb24gPSB0aGlzLmdldENvbnZlcnNhdGlvbkZyb21Hcm91cChpdGVtLmtpY2tlZEZyb20hKVxuICAgICAgICAgaWYoY29udmVyc2F0aW9uKXtcbiAgICAgICAgICAgY29udmVyc2F0aW9uLnNldExhc3RNZXNzYWdlKGl0ZW0ubWVzc2FnZSlcbiAgICAgICAgICAgdGhpcy51cGRhdGVDb252ZXJzYXRpb25PYmplY3QoY29udmVyc2F0aW9uKVxuICAgICAgICAgfVxuICAgIH0pO1xuICAgIHRoaXMuY2NHcm91cE1lbWJlckJhbm5lZCA9IENvbWV0Q2hhdEdyb3VwRXZlbnRzLmNjR3JvdXBNZW1iZXJCYW5uZWQuc3Vic2NyaWJlKChpdGVtOklHcm91cE1lbWJlcktpY2tlZEJhbm5lZCk9PntcbiAgICAgIGxldCBjb252ZXJzYXRpb24gPSB0aGlzLmdldENvbnZlcnNhdGlvbkZyb21Hcm91cChpdGVtLmtpY2tlZEZyb20hKVxuICAgICAgaWYoY29udmVyc2F0aW9uKXtcbiAgICAgICAgY29udmVyc2F0aW9uLnNldExhc3RNZXNzYWdlKGl0ZW0ubWVzc2FnZSlcbiAgICAgICAgdGhpcy51cGRhdGVDb252ZXJzYXRpb25PYmplY3QoY29udmVyc2F0aW9uKVxuICAgICAgfVxuICAgIH0pO1xuICAgIHRoaXMuY2NHcm91cERlbGV0ZWQgPSBDb21ldENoYXRHcm91cEV2ZW50cy5jY0dyb3VwRGVsZXRlZC5zdWJzY3JpYmUoKGl0ZW06Q29tZXRDaGF0Lkdyb3VwKT0+e1xuICAgICAgbGV0IGNvbnZlcnNhdGlvbjpDb21ldENoYXQuQ29udmVyc2F0aW9uIHwgbnVsbCA9IHRoaXMuZ2V0Q29udmVyc2F0aW9uRnJvbUdyb3VwKGl0ZW0pXG4gICAgICBpZihjb252ZXJzYXRpb24pe1xuICAgICB0aGlzLnJlbW92ZUNvbnZlcnNhdGlvbihjb252ZXJzYXRpb24pXG4gICAgICB9XG4gICAgfSk7XG4gICAgdGhpcy5jY0dyb3VwTGVmdCA9IENvbWV0Q2hhdEdyb3VwRXZlbnRzLmNjR3JvdXBMZWZ0LnN1YnNjcmliZSgoaXRlbTpJR3JvdXBMZWZ0KT0+e1xuXG4gICAgICB0aGlzLnVwZGF0ZUNvbnZlcnNhdGlvbihpdGVtLm1lc3NhZ2UhKVxuICAgICAgdGhpcy5yZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH0pO1xuICAgIHRoaXMuY2NVc2VyQmxvY2tlZCA9IENvbWV0Q2hhdFVzZXJFdmVudHMuY2NVc2VyQmxvY2tlZC5zdWJzY3JpYmUoKGl0ZW06Q29tZXRDaGF0LlVzZXIpPT57XG4gICAgICBsZXQgY29udmVyc2F0aW9uOkNvbWV0Q2hhdC5Db252ZXJzYXRpb24gfCBudWxsID0gdGhpcy5nZXRDb252ZXJzYXRpb25Gcm9tVXNlcihpdGVtKVxuICAgICAgaWYoY29udmVyc2F0aW9uKXtcbiAgICAgICAgdGhpcy5yZW1vdmVDb252ZXJzYXRpb24oY29udmVyc2F0aW9uKVxuICAgICAgICAgfVxuICAgIH0pO1xuICAgIHRoaXMuY2NNZXNzYWdlRWRpdCA9IENvbWV0Q2hhdE1lc3NhZ2VFdmVudHMuY2NNZXNzYWdlRWRpdGVkLnN1YnNjcmliZSgob2JqZWN0OiBJTWVzc2FnZXMpID0+IHtcbiAgICAgIGxldCBtZXNzYWdlOiBDb21ldENoYXQuQmFzZU1lc3NhZ2UgPSBvYmplY3QubWVzc2FnZSFcbiAgICAgIGlmKG9iamVjdC5zdGF0dXMgPT0gTWVzc2FnZVN0YXR1cy5zdWNjZXNzKXtcbiAgICAgICAgdGhpcy51cGRhdGVFZGl0ZWRNZXNzYWdlKG1lc3NhZ2UgYXMgQ29tZXRDaGF0LlRleHRNZXNzYWdlKVxuICAgICAgfVxuICAgfSlcbiAgIHRoaXMuY2NNZXNzYWdlU2VudCA9IENvbWV0Q2hhdE1lc3NhZ2VFdmVudHMuY2NNZXNzYWdlU2VudC5zdWJzY3JpYmUoKG9iajogSU1lc3NhZ2VzKSA9PiB7XG4gICAgIGxldCBtZXNzYWdlOiBDb21ldENoYXQuQmFzZU1lc3NhZ2UgPSBvYmoubWVzc2FnZSFcbiAgICAgaWYob2JqLnN0YXR1cyA9PSBNZXNzYWdlU3RhdHVzLnN1Y2Nlc3Mpe1xuICAgICAgIHRoaXMudXBkYXRlQ29udmVyc2F0aW9uKG1lc3NhZ2UpXG4gICAgIH1cbiAgIH0pXG4gICB0aGlzLmNjTWVzc2FnZURlbGV0ZSA9IENvbWV0Q2hhdE1lc3NhZ2VFdmVudHMuY2NNZXNzYWdlRGVsZXRlZC5zdWJzY3JpYmUoKG1lc3NhZ2VPYmplY3Q6IENvbWV0Q2hhdC5CYXNlTWVzc2FnZSkgPT4ge1xuICAgICAgIHRoaXMudXBkYXRlQ29udmVyc2F0aW9uKG1lc3NhZ2VPYmplY3QpXG4gICAgICAgdGhpcy5yZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgfSlcbiAgIHRoaXMuY2NNZXNzYWdlUmVhZCA9IENvbWV0Q2hhdE1lc3NhZ2VFdmVudHMuY2NNZXNzYWdlUmVhZC5zdWJzY3JpYmUoKG1lc3NhZ2VPYmplY3Q6IENvbWV0Q2hhdC5CYXNlTWVzc2FnZSkgPT4ge1xuICBDb21ldENoYXQuQ29tZXRDaGF0SGVscGVyLmdldENvbnZlcnNhdGlvbkZyb21NZXNzYWdlKG1lc3NhZ2VPYmplY3QpLnRoZW4oKGNvbnZlcnNhdGlvbjpDb21ldENoYXQuQ29udmVyc2F0aW9uKT0+e1xuICAgIGlmKGNvbnZlcnNhdGlvbiAmJiAgdGhpcy5hY3RpdmVDb252ZXJzYXRpb24gJiYgY29udmVyc2F0aW9uPy5nZXRDb252ZXJzYXRpb25JZCgpID09IHRoaXMuYWN0aXZlQ29udmVyc2F0aW9uPy5nZXRDb252ZXJzYXRpb25JZCgpKXtcbiAgICAgIHRoaXMudXBkYXRlRWRpdGVkTWVzc2FnZShtZXNzYWdlT2JqZWN0IGFzIENvbWV0Q2hhdC5UZXh0TWVzc2FnZSlcbiAgICAgIHRoaXMucmVzZXRVbnJlYWRDb3VudCgpO1xuICAgIH1cbiAgfSlcbiAgfSlcbiAgdGhpcy5jY0NhbGxFbmRlZCA9IENvbWV0Q2hhdENhbGxFdmVudHMuY2NDYWxsRW5kZWQuc3Vic2NyaWJlKChjYWxsOkNvbWV0Q2hhdC5DYWxsKT0+e1xuICAgIGlmKGNhbGwpe1xuICAgICAgdGhpcy51cGRhdGVDb252ZXJzYXRpb24oY2FsbClcbiAgICB9XG4gIH0pXG4gIHRoaXMuY2NDYWxsUmVqZWN0ZWQgPSBDb21ldENoYXRDYWxsRXZlbnRzLmNjQ2FsbFJlamVjdGVkLnN1YnNjcmliZSgoY2FsbDogQ29tZXRDaGF0LkNhbGwpID0+IHtcbiAgICB0aGlzLnVwZGF0ZUNvbnZlcnNhdGlvbihjYWxsKVxuICB9KVxuICB0aGlzLmNjT3V0Z29pbmdDYWxsID0gQ29tZXRDaGF0Q2FsbEV2ZW50cy5jY091dGdvaW5nQ2FsbC5zdWJzY3JpYmUoKGNhbGw6IENvbWV0Q2hhdC5DYWxsKSA9PiB7XG4gICAgdGhpcy51cGRhdGVDb252ZXJzYXRpb24oY2FsbClcbiAgfSlcbiAgdGhpcy5jY0NhbGxBY2NlcHRlZCA9IENvbWV0Q2hhdENhbGxFdmVudHMuY2NDYWxsQWNjZXB0ZWQuc3Vic2NyaWJlKChjYWxsOiBDb21ldENoYXQuQ2FsbCkgPT4ge1xuICAgIHRoaXMudXBkYXRlQ29udmVyc2F0aW9uKGNhbGwpXG4gIH0pXG4gIH1cbiAgdW5zdWJzY3JpYmVUb0V2ZW50cygpe1xuICAgIHRoaXMuY2NHcm91cE1lbWJlckFkZGVkPy51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMuY2NHcm91cE1lbWJlcktpY2tlZD8udW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLmNjR3JvdXBNZW1iZXJCYW5uZWQ/LnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5jY01lc3NhZ2VFZGl0Py51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMuY2NNZXNzYWdlU2VudD8udW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLmNjTWVzc2FnZUVkaXRlZD8udW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLmNjTWVzc2FnZURlbGV0ZT8udW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLmNjR3JvdXBEZWxldGVkPy51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMuY2NHcm91cExlZnQ/LnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5jY1VzZXJCbG9ja2VkPy51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMuY2NNZXNzYWdlUmVhZD8udW5zdWJzY3JpYmUoKTtcbiAgfVxuICBnZXRDb252ZXJzYXRpb25Gcm9tVXNlcih1c2VyOkNvbWV0Q2hhdC5Vc2VyKXtcbiAgICBsZXQgaW5kZXggPSB0aGlzLmNvbnZlcnNhdGlvbkxpc3QuZmluZEluZGV4KChlbGVtZW50OiBDb21ldENoYXQuQ29udmVyc2F0aW9uKSA9PiBlbGVtZW50LmdldENvbnZlcnNhdGlvblR5cGUoKSA9PSBDb21ldENoYXRVSUtpdENvbnN0YW50cy5NZXNzYWdlUmVjZWl2ZXJUeXBlLnVzZXIgJiYgIChlbGVtZW50LmdldENvbnZlcnNhdGlvbldpdGgoKSBhcyBDb21ldENoYXQuVXNlcikuZ2V0VWlkKCkgPT0gdXNlci5nZXRVaWQoKSk7XG4gICAgaWYoaW5kZXggPj0gMCl7XG4gICAgICByZXR1cm4gdGhpcy5jb252ZXJzYXRpb25MaXN0W2luZGV4XVxuICAgIH1cbiAgICByZXR1cm4gbnVsbFxuICB9XG4gIGdldENvbnZlcnNhdGlvbkZyb21Hcm91cChncm91cDpDb21ldENoYXQuR3JvdXApOkNvbWV0Q2hhdC5Db252ZXJzYXRpb24gfCBudWxse1xuICBsZXQgaW5kZXggPSB0aGlzLmNvbnZlcnNhdGlvbkxpc3QuZmluZEluZGV4KChlbGVtZW50OiBDb21ldENoYXQuQ29udmVyc2F0aW9uKSA9PiBlbGVtZW50LmdldENvbnZlcnNhdGlvblR5cGUoKSA9PSBDb21ldENoYXRVSUtpdENvbnN0YW50cy5NZXNzYWdlUmVjZWl2ZXJUeXBlLmdyb3VwICYmICAoZWxlbWVudC5nZXRDb252ZXJzYXRpb25XaXRoKCkgYXMgQ29tZXRDaGF0Lkdyb3VwKS5nZXRHdWlkKCkgPT0gZ3JvdXAuZ2V0R3VpZCgpKTtcbiAgICBpZihpbmRleCA+PSAwKXtcbiAgICAgIHJldHVybiB0aGlzLmNvbnZlcnNhdGlvbkxpc3RbaW5kZXhdXG4gICAgfVxuICAgIHJldHVybiBudWxsXG4gIH1cbiAgbmdPbkNoYW5nZXMoY2hhbmdlOiBTaW1wbGVDaGFuZ2VzKSB7XG4gICAgdHJ5IHtcbiAgICAgIGlmKGNoYW5nZVtcImFjdGl2ZUNvbnZlcnNhdGlvblwiXSl7XG4gICAgICAgIHRoaXMucmVzZXRVbnJlYWRDb3VudCgpXG4gICAgICB9XG4gICAgICAvKipcbiAgICAgICAqIFdoZW4gdXNlciBzZW5kcyBtZXNzYWdlIGNvbnZlcnNhdGlvbkxpc3QgaXMgdXBkYXRlZCB3aXRoIGxhdGVzdCBtZXNzYWdlXG4gICAgICAgKi9cbiAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICAgICAgICBpZih0aGlzLm9uRXJyb3Ipe1xuICAgICAgICB0aGlzLm9uRXJyb3IoQ29tZXRDaGF0RXhjZXB0aW9uKGVycm9yKSlcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMucmVtb3ZlTGlzdGVuZXJzKCk7XG4gICAgICB0aGlzLnVuc3Vic2NyaWJlVG9FdmVudHMoKVxuICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgICAgICAgIGlmKHRoaXMub25FcnJvcil7XG4gICAgICAgIHRoaXMub25FcnJvcihDb21ldENoYXRFeGNlcHRpb24oZXJyb3IpKVxuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLnJlZi5kZXRlY3RDaGFuZ2VzKClcbiAgfVxuICAvLyBnZXR0aW5nIGRlZmF1bHQgY29udmVyc2F0aW9uIG9wdGlvbiBhbmQgYWRkaW5nIGNhbGxiYWNrIGluIGl0XG4gIHNldENvbnZlcnNhdGlvbk9wdGlvbnMoKSB7XG4gaWYodGhpcy5vcHRpb25zKXtcbiByZXR1cm47XG4gfVxuIHRoaXMuY29udmVyc2F0aW9uT3B0aW9ucyA9IENvbnZlcnNhdGlvblV0aWxzLmdldERlZmF1bHRPcHRpb25zKCk7XG4gdGhpcy5jb252ZXJzYXRpb25PcHRpb25zLmZvckVhY2goKGVsZW1lbnQ6IENvbWV0Q2hhdE9wdGlvbikgPT4ge1xuICAgaWYgKCFlbGVtZW50Lm9uQ2xpY2sgJiYgZWxlbWVudC5pZCA9PSBDb21ldENoYXRVSUtpdENvbnN0YW50cy5Db252ZXJzYXRpb25PcHRpb25zLmRlbGV0ZSkge1xuICAgICBlbGVtZW50Lm9uQ2xpY2sgPSB0aGlzLmRlbGV0ZUNvbnZlcnNhdGlvbk9uQ2xpY2tcbiAgIH1cbiB9KTtcbiByZXR1cm47XG4gIH1cbiAgLy8gcmVzZXQgdW5yZWFkIGNvdW50XG4gIG9uQ2xpY2soY29udmVyc2F0aW9uOiBDb21ldENoYXQuQ29udmVyc2F0aW9uKSB7XG4gICBpZih0aGlzLm9uSXRlbUNsaWNrKXtcbiAgICAgdGhpcy5vbkl0ZW1DbGljayhjb252ZXJzYXRpb24pXG4gICB9XG4gIH1cbiAgLy8gc2V0IHVucmVhZCBjb3VudFxuICByZXNldFVucmVhZENvdW50KCkge1xuICAgIGlmICh0aGlzLmFjdGl2ZUNvbnZlcnNhdGlvbikge1xuICAgICAgY29uc3QgY29udmVyc2F0aW9ubGlzdDogQ29tZXRDaGF0LkNvbnZlcnNhdGlvbltdID0gWy4uLnRoaXMuY29udmVyc2F0aW9uTGlzdF07XG4gICAgICAvL0dldHMgdGhlIGluZGV4IG9mIHVzZXIgd2hpY2ggY29tZXMgb2ZmbGluZS9vbmxpbmVcbiAgICAgIGNvbnN0IGNvbnZlcnNhdGlvbktleSA9IGNvbnZlcnNhdGlvbmxpc3QuZmluZEluZGV4KFxuICAgICAgICAoY29udmVyc2F0aW9uT2JqOiBDb21ldENoYXQuQ29udmVyc2F0aW9uKSA9PlxuICAgICAgICAgIGNvbnZlcnNhdGlvbk9iaj8uZ2V0Q29udmVyc2F0aW9uSWQoKSA9PT0gdGhpcy5hY3RpdmVDb252ZXJzYXRpb24/LmdldENvbnZlcnNhdGlvbklkKClcbiAgICAgICk7XG4gICAgICBpZiAoY29udmVyc2F0aW9uS2V5ID4gLTEpIHtcbiAgICAgICAgbGV0IGNvbnZlcnNhdGlvbk9iajogQ29tZXRDaGF0LkNvbnZlcnNhdGlvbiA9IGNvbnZlcnNhdGlvbmxpc3RbY29udmVyc2F0aW9uS2V5XTtcbiAgICAgICAgbGV0IG5ld0NvbnZlcnNhdGlvbk9iajogQ29tZXRDaGF0LkNvbnZlcnNhdGlvbiA9IGNvbnZlcnNhdGlvbk9ialxuICAgICAgICBuZXdDb252ZXJzYXRpb25PYmouc2V0VW5yZWFkTWVzc2FnZUNvdW50KDApO1xuICAgICAgICAobmV3Q29udmVyc2F0aW9uT2JqLmdldExhc3RNZXNzYWdlKCkgYXMgQ29tZXRDaGF0LlRleHRNZXNzYWdlKT8uc2V0TXVpZCh0aGlzLmdldFVpbngoKSlcbiAgICAgICAgY29udmVyc2F0aW9ubGlzdC5zcGxpY2UoY29udmVyc2F0aW9uS2V5LCAxLCBuZXdDb252ZXJzYXRpb25PYmopO1xuICAgICAgICB0aGlzLmNvbnZlcnNhdGlvbkxpc3QgPSBbLi4uY29udmVyc2F0aW9ubGlzdF07XG4gICAgICAgIHRoaXMucmVmLmRldGVjdENoYW5nZXMoKVxuICAgICAgfVxuICAgIH1cbiAgfVxuICAvLyBzZXRzIHByb3BlcnR5IGZyb20gdGhlbWUgdG8gc3R5bGUgb2JqZWN0XG4gIHNldFRoZW1lU3R5bGUoKSB7XG4gICAgdGhpcy5zZXRBdmF0YXJTdHlsZSgpO1xuICAgIHRoaXMuc2V0QmFkZ2VTdHlsZSgpO1xuICAgIHRoaXMuc2V0Q29uZmlybURpYWxvZ1N0eWxlKCk7XG4gICAgdGhpcy5zZXRDb252ZXJzYXRpb25zU3R5bGUoKTtcbiAgICB0aGlzLnNldExpc3RJdGVtU3R5bGUoKTtcbiAgICB0aGlzLnNldERhdGVTdHlsZSgpO1xuICAgIHRoaXMuc2V0U3RhdHVzU3R5bGUoKTtcbiAgICB0aGlzLnNldFJlY2VpcHRTdHlsZSgpO1xuICAgIHRoaXMuc3RhdHVzQ29sb3IucHJpdmF0ZSA9dGhpcy5jb252ZXJzYXRpb25zU3R5bGU/LnByaXZhdGVHcm91cEljb25CYWNrZ3JvdW5kIDtcbiAgICB0aGlzLnN0YXR1c0NvbG9yLm9ubGluZSA9dGhpcy5jb252ZXJzYXRpb25zU3R5bGU/Lm9ubGluZVN0YXR1c0NvbG9yIDtcbiAgICB0aGlzLnN0YXR1c0NvbG9yLnBhc3N3b3JkID10aGlzLmNvbnZlcnNhdGlvbnNTdHlsZT8ucGFzc3dvcmRHcm91cEljb25CYWNrZ3JvdW5kO1xuICAgIHRoaXMubGlzdFN0eWxlID17XG4gICAgICB0aXRsZVRleHRGb250IDogdGhpcy5jb252ZXJzYXRpb25zU3R5bGUudGl0bGVUZXh0Rm9udCxcbiAgICAgIHRpdGxlVGV4dENvbG9yIDogdGhpcy5jb252ZXJzYXRpb25zU3R5bGUudGl0bGVUZXh0Q29sb3IsXG4gICAgICBlbXB0eVN0YXRlVGV4dEZvbnQgOiB0aGlzLmNvbnZlcnNhdGlvbnNTdHlsZS5lbXB0eVN0YXRlVGV4dEZvbnQsXG4gICAgICBlbXB0eVN0YXRlVGV4dENvbG9yIDogdGhpcy5jb252ZXJzYXRpb25zU3R5bGUuZW1wdHlTdGF0ZVRleHRDb2xvcixcbiAgICAgIGVycm9yU3RhdGVUZXh0Rm9udCA6IHRoaXMuY29udmVyc2F0aW9uc1N0eWxlLmVycm9yU3RhdGVUZXh0Rm9udCxcbiAgICAgIGVycm9yU3RhdGVUZXh0Q29sb3IgOiB0aGlzLmNvbnZlcnNhdGlvbnNTdHlsZS5lcnJvclN0YXRlVGV4dENvbG9yLFxuICAgICAgbG9hZGluZ0ljb25UaW50IDogdGhpcy5jb252ZXJzYXRpb25zU3R5bGUubG9hZGluZ0ljb25UaW50LFxuICAgICAgc2VwYXJhdG9yQ29sb3IgOiB0aGlzLmNvbnZlcnNhdGlvbnNTdHlsZS5zZXBhcmF0b3JDb2xvcixcbiAgICB9XG4gICAgdGhpcy5pY29uU3R5bGUuaWNvblRpbnQgPSAgICB0aGlzLnRoZW1lU2VydmljZS50aGVtZS5wYWxldHRlLmdldEFjY2VudDQwMCgpO1xuICB9XG4gIHNldExpc3RJdGVtU3R5bGUoKXtcbiAgICBsZXQgZGVmYXVsdFN0eWxlOkxpc3RJdGVtU3R5bGUgPSBuZXcgTGlzdEl0ZW1TdHlsZSh7XG4gICAgICBoZWlnaHQ6IFwiMTAwJVwiLFxuICAgICAgd2lkdGg6IFwiMTAwJVwiLFxuICAgICAgYmFja2dyb3VuZDogdGhpcy50aGVtZVNlcnZpY2UudGhlbWUucGFsZXR0ZS5nZXRCYWNrZ3JvdW5kKCksXG4gICAgICBhY3RpdmVCYWNrZ3JvdW5kOiB0aGlzLnRoZW1lU2VydmljZS50aGVtZS5wYWxldHRlLmdldEFjY2VudDUwKCksXG4gICAgICBib3JkZXJSYWRpdXM6IFwiMFwiLFxuICAgICAgdGl0bGVGb250OiBmb250SGVscGVyKHRoaXMudGhlbWVTZXJ2aWNlLnRoZW1lLnR5cG9ncmFwaHkudGl0bGUyKSxcbiAgICAgIHRpdGxlQ29sb3I6IHRoaXMudGhlbWVTZXJ2aWNlLnRoZW1lLnBhbGV0dGUuZ2V0QWNjZW50KCksXG4gICAgICBib3JkZXI6IFwibm9uZVwiLFxuICAgICAgc2VwYXJhdG9yQ29sb3I6dGhpcy50aGVtZVNlcnZpY2UudGhlbWUucGFsZXR0ZS5nZXRBY2NlbnQyMDAoKSxcbiAgICAgIGhvdmVyQmFja2dyb3VuZDp0aGlzLnRoZW1lU2VydmljZS50aGVtZS5wYWxldHRlLmdldEFjY2VudDUwKClcbiAgICB9KVxuICAgIHRoaXMubGlzdEl0ZW1TdHlsZSA9IHsuLi5kZWZhdWx0U3R5bGUsLi4udGhpcy5saXN0SXRlbVN0eWxlfVxuICB9XG4gIHNldEF2YXRhclN0eWxlKCl7XG4gICAgbGV0IGRlZmF1bHRTdHlsZTpBdmF0YXJTdHlsZSA9IG5ldyBBdmF0YXJTdHlsZSh7XG4gICAgICBib3JkZXJSYWRpdXM6IFwiMjRweFwiLFxuICAgICAgd2lkdGg6IFwiMzZweFwiLFxuICAgICAgaGVpZ2h0OiBcIjM2cHhcIixcbiAgICAgIGJvcmRlcjogYDFweCBzb2xpZCAke3RoaXMudGhlbWVTZXJ2aWNlLnRoZW1lLnBhbGV0dGUuZ2V0QWNjZW50MjAwKCl9YCxcbiAgICAgIGJhY2tncm91bmRDb2xvcjogdGhpcy50aGVtZVNlcnZpY2UudGhlbWUucGFsZXR0ZS5nZXRBY2NlbnQ3MDAoKSxcbiAgICAgIG5hbWVUZXh0Q29sb3I6IHRoaXMudGhlbWVTZXJ2aWNlLnRoZW1lLnBhbGV0dGUuZ2V0QWNjZW50OTAwKCksXG4gICAgICBiYWNrZ3JvdW5kU2l6ZTogXCJjb3ZlclwiLFxuICAgICAgbmFtZVRleHRGb250OiBmb250SGVscGVyKHRoaXMudGhlbWVTZXJ2aWNlLnRoZW1lLnR5cG9ncmFwaHkuc3VidGl0bGUxKSxcbiAgICAgIG91dGVyVmlld0JvcmRlcjogXCJcIixcbiAgICAgIG91dGVyVmlld0JvcmRlclNwYWNpbmc6IFwiXCIsXG4gICAgfSlcbiAgICB0aGlzLmF2YXRhclN0eWxlID0gey4uLmRlZmF1bHRTdHlsZSwuLi50aGlzLmF2YXRhclN0eWxlfVxuICB9XG4gIHNldFN0YXR1c1N0eWxlKCl7XG4gICAgbGV0IGRlZmF1bHRTdHlsZTpCYXNlU3R5bGUgPSB7XG4gICAgICAgIGhlaWdodDogXCIxMnB4XCIsXG4gICAgICAgIHdpZHRoOlwiMTJweFwiLFxuICAgICAgICBib3JkZXI6XCJub25lXCIsXG4gICAgICAgIGJvcmRlclJhZGl1czpcIjI0cHhcIixcbiAgICB9XG4gICAgdGhpcy5zdGF0dXNJbmRpY2F0b3JTdHlsZSA9IHsuLi5kZWZhdWx0U3R5bGUsLi4udGhpcy5zdGF0dXNJbmRpY2F0b3JTdHlsZX1cbiAgfVxuICBzZXRDb252ZXJzYXRpb25zU3R5bGUoKXtcbiAgICBsZXQgZGVmYXVsdFN0eWxlOkNvbnZlcnNhdGlvbnNTdHlsZSA9IG5ldyBDb252ZXJzYXRpb25zU3R5bGUoe1xuICAgICAgbGFzdE1lc3NhZ2VUZXh0Rm9udDogZm9udEhlbHBlcih0aGlzLnRoZW1lU2VydmljZS50aGVtZS50eXBvZ3JhcGh5LnN1YnRpdGxlMiksXG4gICAgICBsYXN0TWVzc2FnZVRleHRDb2xvcjogdGhpcy50aGVtZVNlcnZpY2UudGhlbWUucGFsZXR0ZS5nZXRBY2NlbnQ2MDAoKSxcbiAgICAgIGJhY2tncm91bmQ6dGhpcy50aGVtZVNlcnZpY2UudGhlbWUucGFsZXR0ZS5nZXRCYWNrZ3JvdW5kKCksXG4gICAgICBib3JkZXI6YDFweCBzb2xpZCAke3RoaXMudGhlbWVTZXJ2aWNlLnRoZW1lLnBhbGV0dGUuZ2V0QWNjZW50NTAoKX1gLFxuICAgICAgdGl0bGVUZXh0Rm9udDpmb250SGVscGVyKHRoaXMudGhlbWVTZXJ2aWNlLnRoZW1lLnR5cG9ncmFwaHkudGl0bGUxKSxcbiAgICAgIHRpdGxlVGV4dENvbG9yOnRoaXMudGhlbWVTZXJ2aWNlLnRoZW1lLnBhbGV0dGUuZ2V0QWNjZW50KCksXG4gICAgICBlbXB0eVN0YXRlVGV4dEZvbnQ6Zm9udEhlbHBlcih0aGlzLnRoZW1lU2VydmljZS50aGVtZS50eXBvZ3JhcGh5LnRpdGxlMSksXG4gICAgICBlbXB0eVN0YXRlVGV4dENvbG9yOnRoaXMudGhlbWVTZXJ2aWNlLnRoZW1lLnBhbGV0dGUuZ2V0QWNjZW50NjAwKCksXG4gICAgICBlcnJvclN0YXRlVGV4dEZvbnQ6Zm9udEhlbHBlcih0aGlzLnRoZW1lU2VydmljZS50aGVtZS50eXBvZ3JhcGh5LnRpdGxlMSksXG4gICAgICBlcnJvclN0YXRlVGV4dENvbG9yOnRoaXMudGhlbWVTZXJ2aWNlLnRoZW1lLnBhbGV0dGUuZ2V0QWNjZW50NjAwKCksXG4gICAgICBsb2FkaW5nSWNvblRpbnQ6dGhpcy50aGVtZVNlcnZpY2UudGhlbWUucGFsZXR0ZS5nZXRBY2NlbnQ2MDAoKSxcbiAgICAgIG9ubGluZVN0YXR1c0NvbG9yOnRoaXMudGhlbWVTZXJ2aWNlLnRoZW1lLnBhbGV0dGUuZ2V0U3VjY2VzcygpLFxuICAgICAgc2VwYXJhdG9yQ29sb3I6dGhpcy50aGVtZVNlcnZpY2UudGhlbWUucGFsZXR0ZS5nZXRBY2NlbnQ0MDAoKSxcbiAgICAgIHByaXZhdGVHcm91cEljb25CYWNrZ3JvdW5kOnRoaXMudGhlbWVTZXJ2aWNlLnRoZW1lLnBhbGV0dGUuZ2V0U3VjY2VzcygpLFxuICAgICAgcGFzc3dvcmRHcm91cEljb25CYWNrZ3JvdW5kOlwiUkdCKDI0NywgMTY1LCAwKVwiLFxuICAgICAgdHlwaW5nSW5kaWN0b3JUZXh0Q29sb3I6dGhpcy50aGVtZVNlcnZpY2UudGhlbWUucGFsZXR0ZS5nZXRQcmltYXJ5KCksXG4gICAgICB0eXBpbmdJbmRpY3RvclRleHRGb250OmZvbnRIZWxwZXIodGhpcy50aGVtZVNlcnZpY2UudGhlbWUudHlwb2dyYXBoeS5zdWJ0aXRsZTIpLFxuICAgICAgdGhyZWFkSW5kaWNhdG9yVGV4dEZvbnQ6Zm9udEhlbHBlcih0aGlzLnRoZW1lU2VydmljZS50aGVtZS50eXBvZ3JhcGh5LmNhcHRpb24yKSxcbiAgICAgIHRocmVhZEluZGljYXRvclRleHRDb2xvcjp0aGlzLnRoZW1lU2VydmljZS50aGVtZS5wYWxldHRlLmdldEFjY2VudDYwMCgpLFxuICAgIH0pXG4gICAgdGhpcy5jb252ZXJzYXRpb25zU3R5bGUgPSB7Li4uZGVmYXVsdFN0eWxlLC4uLnRoaXMuY29udmVyc2F0aW9uc1N0eWxlfVxuICB9XG4gIHNldERhdGVTdHlsZSgpe1xuICAgIGxldCBkZWZhdWx0U3R5bGU6RGF0ZVN0eWxlID0gbmV3IERhdGVTdHlsZSh7XG4gICAgICB0ZXh0Rm9udDogZm9udEhlbHBlcih0aGlzLnRoZW1lU2VydmljZS50aGVtZS50eXBvZ3JhcGh5LmNhcHRpb24yKSxcbiAgICAgIHRleHRDb2xvcjogdGhpcy50aGVtZVNlcnZpY2UudGhlbWUucGFsZXR0ZS5nZXRBY2NlbnQ2MDAoKSxcbiAgICAgIGJhY2tncm91bmQ6XCJ0cmFuc3BhcmVudFwiXG4gICAgfSlcbiAgICB0aGlzLmRhdGVTdHlsZSA9IHsuLi5kZWZhdWx0U3R5bGUsLi4udGhpcy5kYXRlU3R5bGV9XG4gIH1cbiAgc2V0UmVjZWlwdFN0eWxlKCl7XG5cbiAgICBsZXQgZGVmYXVsdFN0eWxlOlJlY2VpcHRTdHlsZSA9IG5ldyBSZWNlaXB0U3R5bGUoe1xud2FpdEljb25UaW50OnRoaXMudGhlbWVTZXJ2aWNlLnRoZW1lLnBhbGV0dGUuZ2V0QWNjZW50NzAwKCksXG5zZW50SWNvblRpbnQ6dGhpcy50aGVtZVNlcnZpY2UudGhlbWUucGFsZXR0ZS5nZXRBY2NlbnQ2MDAoKSxcbmRlbGl2ZXJlZEljb25UaW50OnRoaXMudGhlbWVTZXJ2aWNlLnRoZW1lLnBhbGV0dGUuZ2V0QWNjZW50NjAwKCksXG5yZWFkSWNvblRpbnQ6dGhpcy50aGVtZVNlcnZpY2UudGhlbWUucGFsZXR0ZS5nZXRQcmltYXJ5KCksXG5lcnJvckljb25UaW50OnRoaXMudGhlbWVTZXJ2aWNlLnRoZW1lLnBhbGV0dGUuZ2V0RXJyb3IoKSxcbiAgICB9KVxuICAgIHRoaXMucmVjZWlwdFN0eWxlID0gey4uLmRlZmF1bHRTdHlsZSwuLi50aGlzLnJlY2VpcHRTdHlsZX1cbiAgfVxuICBzZXRCYWRnZVN0eWxlKCl7XG4gICAgbGV0IGRlZmF1bHRTdHlsZTpCYWRnZVN0eWxlID0gbmV3IEJhZGdlU3R5bGUoe1xuICAgICAgdGV4dEZvbnQ6IGZvbnRIZWxwZXIodGhpcy50aGVtZVNlcnZpY2UudGhlbWUudHlwb2dyYXBoeS5zdWJ0aXRsZTIpLFxuICAgICAgdGV4dENvbG9yOiB0aGlzLnRoZW1lU2VydmljZS50aGVtZS5wYWxldHRlLmdldEFjY2VudChcImRhcmtcIiksXG4gICAgICBiYWNrZ3JvdW5kOnRoaXMudGhlbWVTZXJ2aWNlLnRoZW1lLnBhbGV0dGUuZ2V0UHJpbWFyeSgpLFxuICAgICAgYm9yZGVyUmFkaXVzOlwiMTZweFwiLFxuICAgICAgd2lkdGg6XCIyNHB4XCIsXG4gICAgfSlcbiAgICB0aGlzLmJhZGdlU3R5bGUgPSB7Li4uZGVmYXVsdFN0eWxlLC4uLnRoaXMuYmFkZ2VTdHlsZX1cbiAgfVxuICBzZXRDb25maXJtRGlhbG9nU3R5bGUoKXtcbiAgICBsZXQgZGVmYXVsdFN0eWxlOkNvbmZpcm1EaWFsb2dTdHlsZSA9IG5ldyBDb25maXJtRGlhbG9nU3R5bGUoe1xuICAgICAgY29uZmlybUJ1dHRvbkJhY2tncm91bmQ6IHRoaXMudGhlbWVTZXJ2aWNlLnRoZW1lLnBhbGV0dGUuZ2V0RXJyb3IoKSxcbiAgICAgIGNhbmNlbEJ1dHRvbkJhY2tncm91bmQ6IHRoaXMudGhlbWVTZXJ2aWNlLnRoZW1lLnBhbGV0dGUuZ2V0U2Vjb25kYXJ5KCksXG4gICAgICBjb25maXJtQnV0dG9uVGV4dENvbG9yOiB0aGlzLnRoZW1lU2VydmljZS50aGVtZS5wYWxldHRlLmdldEFjY2VudDkwMChcImxpZ2h0XCIpLFxuICAgICAgY29uZmlybUJ1dHRvblRleHRGb250OiBmb250SGVscGVyKHRoaXMudGhlbWVTZXJ2aWNlLnRoZW1lLnR5cG9ncmFwaHkudGV4dDIpLFxuICAgICAgY2FuY2VsQnV0dG9uVGV4dENvbG9yOiB0aGlzLnRoZW1lU2VydmljZS50aGVtZS5wYWxldHRlLmdldEFjY2VudDkwMChcImRhcmtcIiksXG4gICAgICBjYW5jZWxCdXR0b25UZXh0Rm9udDogZm9udEhlbHBlcih0aGlzLnRoZW1lU2VydmljZS50aGVtZS50eXBvZ3JhcGh5LnRleHQyKSxcbiAgICAgIHRpdGxlRm9udDogZm9udEhlbHBlcih0aGlzLnRoZW1lU2VydmljZS50aGVtZS50eXBvZ3JhcGh5LnRpdGxlMSksXG4gICAgICB0aXRsZUNvbG9yOiB0aGlzLnRoZW1lU2VydmljZS50aGVtZS5wYWxldHRlLmdldEFjY2VudCgpLFxuICAgICAgbWVzc2FnZVRleHRGb250OiBmb250SGVscGVyKHRoaXMudGhlbWVTZXJ2aWNlLnRoZW1lLnR5cG9ncmFwaHkuc3VidGl0bGUyKSxcbiAgICAgIG1lc3NhZ2VUZXh0Q29sb3I6IHRoaXMudGhlbWVTZXJ2aWNlLnRoZW1lLnBhbGV0dGUuZ2V0QWNjZW50NjAwKCksXG4gICAgICBiYWNrZ3JvdW5kOiB0aGlzLnRoZW1lU2VydmljZS50aGVtZS5wYWxldHRlLmdldEJhY2tncm91bmQoKSxcbiAgICAgIGhlaWdodDpcIjEwMCVcIixcbiAgICAgIHdpZHRoOlwiMzUwcHhcIixcbiAgICB9KVxuICAgIHRoaXMuZGVsZXRlQ29udmVyc2F0aW9uRGlhbG9nU3R5bGUgPSB7Li4uZGVmYXVsdFN0eWxlLC4uLnRoaXMuZGVsZXRlQ29udmVyc2F0aW9uRGlhbG9nU3R5bGV9XG4gIH1cbiAgLy8gY2hlY2tpbmcgaWYgdXNlciBoYXMgaGlzIG93biBjb25maWd1cmF0aW9uIGVsc2Ugd2lsbCB1c2UgZGVmYXVsdCBjb25maWd1cmF0aW9uXG4gIC8qKlxuICAgKiBAcGFyYW0gIHtPYmplY3Q9e319IGNvbmZpZ1xuICAgKiBAcGFyYW0gIHtPYmplY3R9IGRlZmF1bHRDb25maWc/XG4gICAqIEByZXR1cm5zIGRlZmF1bHRDb25maWdcbiAgICovXG4gIC8vIGNhbGxpbmcgc3VidGl0bGUgY2FsbGJhY2sgZnJvbSBjb25maWd1cmF0aW9uc1xuICAvKipcbiAgICogQHBhcmFtICB7Q29tZXRDaGF0LkNvbnZlcnNhdGlvbn0gY29udmVyc2F0aW9uXG4gICAqL1xuICAvKipcbiAgICogRmV0Y2hlcyB0aGUgY292ZXJzYXRpb24gYmFzZWQgb24gdGhlIGNvbnZlcnNhdGlvblJlcXVlc3QgY29uZmlnXG4gICAqL1xuICBmZXRjaE5leHRDb252ZXJzYXRpb24oKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiB0aGlzLmNvbnZlcnNhdGlvbnNSZXF1ZXN0QnVpbGRlcj8uZmV0Y2hOZXh0KCk7XG4gICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgaWYodGhpcy5vbkVycm9yKXtcbiAgICAgICAgdGhpcy5vbkVycm9yKENvbWV0Q2hhdEV4Y2VwdGlvbihlcnJvcikpXG4gICAgICB9XG4gICAgfVxuICB9XG4gIHVwZGF0ZUVkaXRlZE1lc3NhZ2UobWVzc2FnZTpDb21ldENoYXQuVGV4dE1lc3NhZ2Upe1xuICAgIGxldCBpbmRleCA9IHRoaXMuY29udmVyc2F0aW9uTGlzdC5maW5kSW5kZXgoXG4gICAgICAoY29udmVyc2F0aW9uT2JqOiBDb21ldENoYXQuQ29udmVyc2F0aW9uKSA9PiBjb252ZXJzYXRpb25PYmouZ2V0TGFzdE1lc3NhZ2UoKSAmJiAoY29udmVyc2F0aW9uT2JqLmdldExhc3RNZXNzYWdlKCkgYXMgQ29tZXRDaGF0LkJhc2VNZXNzYWdlKS5nZXRJZCgpID09IG1lc3NhZ2U/LmdldElkKClcbiAgICApO1xuICAgIGlmKGluZGV4ID49IDApe1xuICAgICAgdGhpcy5jb252ZXJzYXRpb25FZGl0ZWREZWxldGVkKG1lc3NhZ2UpXG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBhdHRhY2hlcyBMaXN0ZW5lcnMgZm9yIHVzZXIgYWN0aXZpdHkgLCBncm91cCBhY3Rpdml0aWVzIGFuZCBjYWxsaW5nXG4gICAqIEBwYXJhbSBjYWxsYmFja1xuICAgKi9cbiAgLyoqXG4gICAqIEBwYXJhbSAge0Z1bmN0aW9ufSBjYWxsYmFja1xuICAgKi9cbiAgYXR0YWNoTGlzdGVuZXJzKGNhbGxiYWNrOiBhbnkpIHtcbiAgICB0cnkge1xuICAgICAgaWYgKCF0aGlzLmRpc2FibGVVc2Vyc1ByZXNlbmNlKSB7XG4gICAgICAgIENvbWV0Q2hhdC5hZGRVc2VyTGlzdGVuZXIoXG4gICAgICAgICAgdGhpcy51c2VyTGlzdGVuZXJJZCxcbiAgICAgICAgICBuZXcgQ29tZXRDaGF0LlVzZXJMaXN0ZW5lcih7XG4gICAgICAgICAgICBvblVzZXJPbmxpbmU6IChvbmxpbmVVc2VyOiBvYmplY3QpID0+IHtcbiAgICAgICAgICAgICAgLyogd2hlbiBzb21ldXNlci9mcmllbmQgY29tZXMgb25saW5lLCB1c2VyIHdpbGwgYmUgcmVjZWl2ZWQgaGVyZSAqL1xuICAgICAgICAgICAgICBjYWxsYmFjayhDb21ldENoYXRVSUtpdENvbnN0YW50cy51c2VyU3RhdHVzVHlwZS5vbmxpbmUsIG9ubGluZVVzZXIpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG9uVXNlck9mZmxpbmU6IChvZmZsaW5lVXNlcjogb2JqZWN0KSA9PiB7XG4gICAgICAgICAgICAgIC8qIHdoZW4gc29tZXVzZXIvZnJpZW5kIHdlbnQgb2ZmbGluZSwgdXNlciB3aWxsIGJlIHJlY2VpdmVkIGhlcmUgKi9cbiAgICAgICAgICAgICAgY2FsbGJhY2soQ29tZXRDaGF0VUlLaXRDb25zdGFudHMudXNlclN0YXR1c1R5cGUub2ZmbGluZSwgb2ZmbGluZVVzZXIpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgQ29tZXRDaGF0LmFkZEdyb3VwTGlzdGVuZXIoXG4gICAgICAgIHRoaXMuZ3JvdXBMaXN0ZW5lcklkLFxuICAgICAgICBuZXcgQ29tZXRDaGF0Lkdyb3VwTGlzdGVuZXIoe1xuICAgICAgICAgIG9uR3JvdXBNZW1iZXJTY29wZUNoYW5nZWQ6IChcbiAgICAgICAgICAgIG1lc3NhZ2U6IGFueSxcbiAgICAgICAgICAgIGNoYW5nZWRVc2VyOiBhbnksXG4gICAgICAgICAgICBuZXdTY29wZTogYW55LFxuICAgICAgICAgICAgb2xkU2NvcGU6IGFueSxcbiAgICAgICAgICAgIGNoYW5nZWRHcm91cDogYW55XG4gICAgICAgICAgKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUNvbnZlcnNhdGlvbihtZXNzYWdlKVxuICAgICAgICAgIH0sXG4gICAgICAgICAgb25Hcm91cE1lbWJlcktpY2tlZDogKG1lc3NhZ2U6IGFueSwga2lja2VkVXNlcjogYW55LCBraWNrZWRCeTogYW55LCBraWNrZWRGcm9tOiBhbnkpID0+IHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlQ29udmVyc2F0aW9uKG1lc3NhZ2UpXG4gICAgICAgICAgfSxcbiAgICAgICAgICBvbkdyb3VwTWVtYmVyQmFubmVkOiAobWVzc2FnZTogYW55LCBiYW5uZWRVc2VyOiBhbnksIGJhbm5lZEJ5OiBhbnksIGJhbm5lZEZyb206IGFueSkgPT4ge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVDb252ZXJzYXRpb24obWVzc2FnZSlcbiAgICAgICAgICB9LFxuICAgICAgICAgIG9uR3JvdXBNZW1iZXJVbmJhbm5lZDogKFxuICAgICAgICAgICAgbWVzc2FnZTogYW55LFxuICAgICAgICAgICAgdW5iYW5uZWRVc2VyOiBhbnksXG4gICAgICAgICAgICB1bmJhbm5lZEJ5OiBhbnksXG4gICAgICAgICAgICB1bmJhbm5lZEZyb206IGFueVxuICAgICAgICAgICkgPT4ge1xuICAgICAgICAgICAgLy8gdGhpcy51cGRhdGVDb252ZXJzYXRpb24obWVzc2FnZSlcbiAgICAgICAgICB9LFxuICAgICAgICAgIG9uTWVtYmVyQWRkZWRUb0dyb3VwOiAoXG4gICAgICAgICAgICBtZXNzYWdlOiBhbnksXG4gICAgICAgICAgICB1c2VyQWRkZWQ6IGFueSxcbiAgICAgICAgICAgIHVzZXJBZGRlZEJ5OiBhbnksXG4gICAgICAgICAgICB1c2VyQWRkZWRJbjogYW55XG4gICAgICAgICAgKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUNvbnZlcnNhdGlvbihtZXNzYWdlKVxuICAgICAgICAgIH0sXG4gICAgICAgICAgb25Hcm91cE1lbWJlckxlZnQ6IChtZXNzYWdlOiBhbnksIGxlYXZpbmdVc2VyOiBhbnksIGdyb3VwOiBhbnkpID0+IHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlQ29udmVyc2F0aW9uKG1lc3NhZ2UpXG4gICAgICAgICAgfSxcbiAgICAgICAgICBvbkdyb3VwTWVtYmVySm9pbmVkOiAobWVzc2FnZTogYW55LCBqb2luZWRVc2VyOiBhbnksIGpvaW5lZEdyb3VwOiBhbnkpID0+IHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlQ29udmVyc2F0aW9uKG1lc3NhZ2UpXG4gICAgICAgICAgfSxcbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgICBDb21ldENoYXQuYWRkTWVzc2FnZUxpc3RlbmVyKFxuICAgICAgICB0aGlzLmNvbnZlcnNhdGlvbkxpc3RlbmVySWQsXG4gICAgICAgIG5ldyBDb21ldENoYXQuTWVzc2FnZUxpc3RlbmVyKHtcbiAgICAgICAgICBvblRleHRNZXNzYWdlUmVjZWl2ZWQ6ICh0ZXh0TWVzc2FnZTogQ29tZXRDaGF0LlRleHRNZXNzYWdlKSA9PiB7XG4gICAgICAgICAgICBjYWxsYmFjayhDb21ldENoYXRVSUtpdENvbnN0YW50cy5tZXNzYWdlcy5URVhUX01FU1NBR0VfUkVDRUlWRUQsIG51bGwsIHRleHRNZXNzYWdlKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIG9uTWVkaWFNZXNzYWdlUmVjZWl2ZWQ6IChtZWRpYU1lc3NhZ2U6IENvbWV0Q2hhdC5NZWRpYU1lc3NhZ2UpID0+IHtcbiAgICAgICAgICAgIGNhbGxiYWNrKENvbWV0Q2hhdFVJS2l0Q29uc3RhbnRzLm1lc3NhZ2VzLk1FRElBX01FU1NBR0VfUkVDRUlWRUQsIG51bGwsIG1lZGlhTWVzc2FnZSk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBvbkN1c3RvbU1lc3NhZ2VSZWNlaXZlZDogKGN1c3RvbU1lc3NhZ2U6IENvbWV0Q2hhdC5CYXNlTWVzc2FnZSkgPT4ge1xuICAgICAgICAgICAgICBjYWxsYmFjayhDb21ldENoYXRVSUtpdENvbnN0YW50cy5tZXNzYWdlcy5DVVNUT01fTUVTU0FHRV9SRUNFSVZFRCwgbnVsbCwgY3VzdG9tTWVzc2FnZSk7XG5cbiAgICAgICAgICB9LFxuICAgICAgICAgIG9uTWVzc2FnZXNSZWFkOiAobWVzc2FnZVJlY2VpcHQ6IENvbWV0Q2hhdC5NZXNzYWdlUmVjZWlwdCkgPT4ge1xuICAgICAgICAgICAgaWYgKCF0aGlzLmRpc2FibGVSZWNlaXB0KSB7XG4gICAgICAgICAgICAgIHRoaXMubWFya0FzUmVhZChtZXNzYWdlUmVjZWlwdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICBvbk1lc3NhZ2VEZWxldGVkOiAoZGVsZXRlZE1lc3NhZ2U6IENvbWV0Q2hhdC5CYXNlTWVzc2FnZSkgPT4ge1xuICAgICAgICAgICAgY2FsbGJhY2soQ29tZXRDaGF0VUlLaXRDb25zdGFudHMubWVzc2FnZXMuTUVTU0FHRV9ERUxFVEVELCBudWxsLCBkZWxldGVkTWVzc2FnZSk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBvbk1lc3NhZ2VFZGl0ZWQ6IChlZGl0ZWRNZXNzYWdlOiBDb21ldENoYXQuQmFzZU1lc3NhZ2UpID0+IHtcbiAgICAgICAgICAgIGNhbGxiYWNrKENvbWV0Q2hhdFVJS2l0Q29uc3RhbnRzLm1lc3NhZ2VzLk1FU1NBR0VfRURJVEVELCBudWxsLCBlZGl0ZWRNZXNzYWdlKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIG9uTWVzc2FnZXNEZWxpdmVyZWQ6IChtZXNzYWdlUmVjZWlwdDogQ29tZXRDaGF0Lk1lc3NhZ2VSZWNlaXB0KSA9PiB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuZGlzYWJsZVJlY2VpcHQpIHtcbiAgICAgICAgICAgICAgdGhpcy51cGRhdGVEZWxpdmVyZWRNZXNzYWdlKG1lc3NhZ2VSZWNlaXB0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIG9uVHlwaW5nU3RhcnRlZDogKHR5cGluZ0luZGljYXRvcjogQ29tZXRDaGF0LlR5cGluZ0luZGljYXRvcikgPT4ge1xuICAgICAgICAgICAgaWYoIXRoaXMuZGlzYWJsZVR5cGluZyl7XG4gICAgICAgICAgICAgIHRoaXMudHlwaW5nSW5kaWNhdG9yID0gdHlwaW5nSW5kaWNhdG9yXG4gICAgICAgICAgIHRoaXMucmVmLmRldGVjdENoYW5nZXMoKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgb25UeXBpbmdFbmRlZDogKHR5cGluZ0luZGljYXRvcjogQ29tZXRDaGF0LlR5cGluZ0luZGljYXRvcikgPT4ge1xuICAgICAgICAgICAgdGhpcy50eXBpbmdJbmRpY2F0b3IgPSBudWxsXG4gICAgICAgICAgICB0aGlzLnJlZi5kZXRlY3RDaGFuZ2VzKClcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICApO1xuICAgICAgICBDb21ldENoYXQuYWRkQ2FsbExpc3RlbmVyKFxuICAgICAgICAgIHRoaXMuY2FsbExpc3RlbmVySWQsXG4gICAgICAgICAgbmV3IENvbWV0Q2hhdC5DYWxsTGlzdGVuZXIoe1xuICAgICAgICAgICAgb25JbmNvbWluZ0NhbGxSZWNlaXZlZDogKGNhbGw6IENvbWV0Q2hhdC5DYWxsKSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMudXBkYXRlQ29udmVyc2F0aW9uKGNhbGwpXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgb25JbmNvbWluZ0NhbGxDYW5jZWxsZWQ6IChjYWxsOiBDb21ldENoYXQuQ2FsbCkgPT4ge1xuICAgICAgICAgICAgICB0aGlzLnVwZGF0ZUNvbnZlcnNhdGlvbihjYWxsKVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG9uT3V0Z29pbmdDYWxsUmVqZWN0ZWQ6IChjYWxsOiBDb21ldENoYXQuQ2FsbCkgPT4ge1xuICAgICAgICAgICAgICB0aGlzLnVwZGF0ZUNvbnZlcnNhdGlvbihjYWxsKVxuXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgb25PdXRnb2luZ0NhbGxBY2NlcHRlZDogKGNhbGw6IENvbWV0Q2hhdC5DYWxsKSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMudXBkYXRlQ29udmVyc2F0aW9uKGNhbGwpXG4gICAgICAgICAgICB9LFxuXG4gICAgICAgICAgfSlcbiAgICAgICAgKTtcblxuICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgICAgICAgIGlmKHRoaXMub25FcnJvcil7XG4gICAgICAgIHRoaXMub25FcnJvcihDb21ldENoYXRFeGNlcHRpb24oZXJyb3IpKVxuICAgICAgfVxuICAgIH1cbiAgfVxuICAvKipcbiAgICogUmVtb3ZlcyBhbGwgbGlzdGVuZXJzXG4gICAqL1xuICByZW1vdmVMaXN0ZW5lcnMoKSB7XG4gICAgdHJ5IHtcbiAgICAgIENvbWV0Q2hhdC5yZW1vdmVNZXNzYWdlTGlzdGVuZXIodGhpcy5jb252ZXJzYXRpb25MaXN0ZW5lcklkKTtcbiAgICAgIENvbWV0Q2hhdC5yZW1vdmVVc2VyTGlzdGVuZXIodGhpcy51c2VyTGlzdGVuZXJJZCk7XG4gICAgICBDb21ldENoYXQucmVtb3ZlR3JvdXBMaXN0ZW5lcih0aGlzLmdyb3VwTGlzdGVuZXJJZCk7XG4gICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgICAgICAgaWYodGhpcy5vbkVycm9yKXtcbiAgICAgICAgdGhpcy5vbkVycm9yKENvbWV0Q2hhdEV4Y2VwdGlvbihlcnJvcikpXG4gICAgICB9XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBGZXRjaGVzIENvbnZlcnNhdGlvbnMgRGV0YWlscyB3aXRoIGFsbCB0aGUgdXNlcnNcbiAgICovXG4gIGdldENvbnZlcnNhdGlvbiA9ICgpID0+IHtcbiAgICBpZigodGhpcy5jb252ZXJzYXRpb25zUmVxdWVzdEJ1aWxkZXIgJiYgIXRoaXMuY29udmVyc2F0aW9uc1JlcXVlc3RCdWlsZGVyPy5wYWdpbmF0aW9uKSB8fCAgKHRoaXMuY29udmVyc2F0aW9uc1JlcXVlc3RCdWlsZGVyLnBhZ2luYXRpb24uY3VycmVudF9wYWdlID09IDAgfHwgdGhpcy5jb252ZXJzYXRpb25zUmVxdWVzdEJ1aWxkZXIucGFnaW5hdGlvbi5jdXJyZW50X3BhZ2UgIT0gIHRoaXMuY29udmVyc2F0aW9uc1JlcXVlc3RCdWlsZGVyLnBhZ2luYXRpb24udG90YWxfcGFnZXMpKXtcbiAgICAgIHRoaXMuc3RhdGUgPSBTdGF0ZXMubG9hZGluZ1xuICAgICAgdHJ5IHtcbiAgICAgICAgQ29tZXRDaGF0LmdldExvZ2dlZGluVXNlcigpXG4gICAgICAgICAgLnRoZW4oKHVzZXI6IENvbWV0Q2hhdC5Vc2VyIHwgbnVsbCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5sb2dnZWRJblVzZXIgPSB1c2VyO1xuICAgICAgICAgICAgdGhpcy5mZXRjaE5leHRDb252ZXJzYXRpb24oKVxuICAgICAgICAgICAgICAudGhlbigoY29udmVyc2F0aW9uTGlzdDogQ29tZXRDaGF0LkNvbnZlcnNhdGlvbltdKSA9PiB7XG4gICAgICAgICAgICAgICAgY29udmVyc2F0aW9uTGlzdC5mb3JFYWNoKChjb252ZXJzYXRpb246IENvbWV0Q2hhdC5Db252ZXJzYXRpb24pID0+IHtcbiAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hY3RpdmVDb252ZXJzYXRpb24gJiYgdGhpcy5hY3RpdmVDb252ZXJzYXRpb24gIT09IG51bGwgJiZcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hY3RpdmVDb252ZXJzYXRpb24uZ2V0Q29udmVyc2F0aW9uVHlwZSgpID09PSBjb252ZXJzYXRpb24uZ2V0Q29udmVyc2F0aW9uVHlwZSgpXG4gICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYWN0aXZlQ29udmVyc2F0aW9uLmdldENvbnZlcnNhdGlvbklkKCkgPT0gY29udmVyc2F0aW9uLmdldENvbnZlcnNhdGlvbklkKClcbiAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgY29udmVyc2F0aW9uLnNldFVucmVhZE1lc3NhZ2VDb3VudCgwKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHRoaXMuY29udmVyc2F0aW9uTGlzdCA9IFtcbiAgICAgICAgICAgICAgICAgIC4uLnRoaXMuY29udmVyc2F0aW9uTGlzdCxcbiAgICAgICAgICAgICAgICAgIC4uLmNvbnZlcnNhdGlvbkxpc3QsXG4gICAgICAgICAgICAgICAgXTtcbiAgICAgICAgICAgICAgICBpZiAoKGNvbnZlcnNhdGlvbkxpc3QubGVuZ3RoIDw9IDAgJiYgdGhpcy5jb252ZXJzYXRpb25MaXN0Py5sZW5ndGggPD0gMCkgfHwgKGNvbnZlcnNhdGlvbkxpc3QubGVuZ3RoID09PSAwICYmIHRoaXMuY29udmVyc2F0aW9uTGlzdD8ubGVuZ3RoIDw9IDApKSB7XG4gICAgICAgICAgICAgICAgICB0aGlzLm5nWm9uZS5ydW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZih0aGlzLnN0YXRlICE9IFN0YXRlcy5lbXB0eSl7XG4gICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gU3RhdGVzLmVtcHR5XG4gICAgICAgICAgICAgICAgICAgICB0aGlzLnJlZi5kZXRlY3RDaGFuZ2VzKClcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVmLmRldGFjaCgpOyAvLyBEZXRhY2ggdGhlIGNoYW5nZSBkZXRlY3RvclxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYodGhpcy5zdGF0ZSAhPSBTdGF0ZXMubG9hZGVkKXtcbiAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBTdGF0ZXMubG9hZGVkXG4gICAgICAgICAgICAgICAgICAgICB0aGlzLnJlZi5kZXRlY3RDaGFuZ2VzKClcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVmLmRldGFjaCgpOyAvLyBEZXRhY2ggdGhlIGNoYW5nZSBkZXRlY3RvclxuICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgLmNhdGNoKChlcnJvcjogQ29tZXRDaGF0LkNvbWV0Q2hhdEV4Y2VwdGlvbikgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBTdGF0ZXMuZXJyb3JcbiAgICAgICAgICAgICAgICB0aGlzLnJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0pXG4gICAgICAgICAgLmNhdGNoKChlcnJvcjogQ29tZXRDaGF0LkNvbWV0Q2hhdEV4Y2VwdGlvbikgPT4ge1xuICAgICAgICAgICAgaWYodGhpcy5vbkVycm9yKXtcbiAgICAgICAgICAgICAgdGhpcy5vbkVycm9yKGVycm9yKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IFN0YXRlcy5lcnJvclxuICAgICAgICAgICAgdGhpcy5yZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgIH0pO1xuICAgICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgICAgICAgICBpZih0aGlzLm9uRXJyb3Ipe1xuICAgICAgICAgIHRoaXMub25FcnJvcihDb21ldENoYXRFeGNlcHRpb24oZXJyb3IpKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGVsc2V7XG4gICAgICB0aGlzLnN0YXRlID0gU3RhdGVzLmxvYWRlZDtcbiAgICB9XG4gIH1cbiAgaXNSZWNlaXB0RGlzYWJsZShjb252ZXJzYXRpb246Q29tZXRDaGF0LkNvbnZlcnNhdGlvbil7XG4gICAgbGV0IGl0ZW06YW55ID0gY29udmVyc2F0aW9uLmdldENvbnZlcnNhdGlvbldpdGgoKVxuICAgIGxldCBtZXNzYWdlOkNvbWV0Q2hhdC5CYXNlTWVzc2FnZSA9IGNvbnZlcnNhdGlvbi5nZXRMYXN0TWVzc2FnZSgpXG4gICAgaWYoIXRoaXMuZGlzYWJsZVJlY2VpcHQgJiYgbWVzc2FnZSAmJiBtZXNzYWdlPy5nZXRDYXRlZ29yeSgpICE9IENvbWV0Q2hhdFVJS2l0Q29uc3RhbnRzLk1lc3NhZ2VDYXRlZ29yeS5hY3Rpb24gJiYgbWVzc2FnZT8uZ2V0Q2F0ZWdvcnkoKSAhPSBDb21ldENoYXRVSUtpdENvbnN0YW50cy5NZXNzYWdlQ2F0ZWdvcnkuY2FsbFxuICAgICYmICghdGhpcy50eXBpbmdJbmRpY2F0b3IgfHwgKGl0ZW0/LnVpZCAhPSB0aGlzLnR5cGluZ0luZGljYXRvci5nZXRSZWNlaXZlcklkKCkgJiYgaXRlbT8uZ3VpZCAhPSB0aGlzLnR5cGluZ0luZGljYXRvci5nZXRSZWNlaXZlcklkKCkpKVxuICAgICYmIG1lc3NhZ2UuZ2V0U2VuZGVyKCk/LmdldFVpZCgpID09IHRoaXMubG9nZ2VkSW5Vc2VyPy5nZXRVaWQoKVxuICAgKVxuICAgIHtcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuICAgIGVsc2V7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIFVwZGF0ZXMgdGhlIGNvbnZlcnNhdGlvbiBsaXN0J3MgbGFzdCBtZXNzYWdlICwgYmFkZ2VDb3VudCAsIHVzZXIgcHJlc2VuY2UgYmFzZWQgb24gYWN0aXZpdGllcyBwcm9wYWdhdGVkIGJ5IGxpc3RlbmVyc1xuICAgKi9cbiAgY29udmVyc2F0aW9uVXBkYXRlZCA9IChcbiAgICBrZXk6IGFueSxcbiAgICBpdGVtOiBDb21ldENoYXQuVXNlciB8IENvbWV0Q2hhdC5Hcm91cCB8IG51bGwgPSBudWxsLFxuICAgIG1lc3NhZ2U6IENvbWV0Q2hhdC5CYXNlTWVzc2FnZSxcbiAgICBvcHRpb25zID0gbnVsbFxuICApID0+IHtcbiAgICB0cnkge1xuICAgICAgc3dpdGNoIChrZXkpIHtcbiAgICAgICAgY2FzZSBDb21ldENoYXRVSUtpdENvbnN0YW50cy51c2VyU3RhdHVzVHlwZS5vbmxpbmU6XG4gICAgICAgIGNhc2UgQ29tZXRDaGF0VUlLaXRDb25zdGFudHMudXNlclN0YXR1c1R5cGUub25saW5lOiB7XG4gICAgICAgICAgdGhpcy51cGRhdGVVc2VyKGl0ZW0pO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgQ29tZXRDaGF0VUlLaXRDb25zdGFudHMubWVzc2FnZXMuTUVTU0FHRV9SRUFEOiB7XG4gICAgICAgICAgdGhpcy51cGRhdGVDb252ZXJzYXRpb24obWVzc2FnZSwgZmFsc2UpXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBDb21ldENoYXRVSUtpdENvbnN0YW50cy5tZXNzYWdlcy5NRVNTQUdFX0RFTElWRVJFRDoge1xuICAgICAgICAgIHRoaXMudXBkYXRlQ29udmVyc2F0aW9uKG1lc3NhZ2UsIGZhbHNlKVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgQ29tZXRDaGF0VUlLaXRDb25zdGFudHMubWVzc2FnZXMuVEVYVF9NRVNTQUdFX1JFQ0VJVkVEOlxuICAgICAgICBjYXNlIENvbWV0Q2hhdFVJS2l0Q29uc3RhbnRzLm1lc3NhZ2VzLk1FRElBX01FU1NBR0VfUkVDRUlWRUQ6XG4gICAgICAgIGNhc2UgQ29tZXRDaGF0VUlLaXRDb25zdGFudHMubWVzc2FnZXMuQ1VTVE9NX01FU1NBR0VfUkVDRUlWRUQ6XG4gICAgICAgICAgaWYoIXRoaXMuZGlzYWJsZVJlY2VpcHQpe1xuICAgICAgICAgICAgdGhpcy5tYXJrTWVzc2FnZUFzRGVsaXZlcmVkKG1lc3NhZ2UpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLnVwZGF0ZUNvbnZlcnNhdGlvbihtZXNzYWdlKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBDb21ldENoYXRVSUtpdENvbnN0YW50cy5ncm91cE1lbWJlckFjdGlvbi5BRERFRDpcbiAgICAgICAgY2FzZSBDb21ldENoYXRVSUtpdENvbnN0YW50cy5ncm91cE1lbWJlckFjdGlvbi5CQU5ORUQ6XG4gICAgICAgIGNhc2UgQ29tZXRDaGF0VUlLaXRDb25zdGFudHMuZ3JvdXBNZW1iZXJBY3Rpb24uSk9JTkVEOlxuICAgICAgICBjYXNlIENvbWV0Q2hhdFVJS2l0Q29uc3RhbnRzLmdyb3VwTWVtYmVyQWN0aW9uLktJQ0tFRDpcbiAgICAgICAgY2FzZSBDb21ldENoYXRVSUtpdENvbnN0YW50cy5ncm91cE1lbWJlckFjdGlvbi5MRUZUOlxuICAgICAgICBjYXNlIENvbWV0Q2hhdFVJS2l0Q29uc3RhbnRzLmdyb3VwTWVtYmVyQWN0aW9uLlVOQkFOTkVEOlxuICAgICAgICBjYXNlIENvbWV0Q2hhdFVJS2l0Q29uc3RhbnRzLmdyb3VwTWVtYmVyQWN0aW9uLlNDT1BFX0NIQU5HRTpcbiAgICAgICAgICB0aGlzLnVwZGF0ZUNvbnZlcnNhdGlvbihtZXNzYWdlKVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIENvbWV0Q2hhdFVJS2l0Q29uc3RhbnRzLm1lc3NhZ2VzLk1FU1NBR0VfRURJVEVEOlxuICAgICAgICBjYXNlIENvbWV0Q2hhdFVJS2l0Q29uc3RhbnRzLm1lc3NhZ2VzLk1FU1NBR0VfREVMRVRFRDpcbiAgICAgICAgICB0aGlzLmNvbnZlcnNhdGlvbkVkaXRlZERlbGV0ZWQobWVzc2FnZSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgICAgICAgaWYodGhpcy5vbkVycm9yKXtcbiAgICAgICAgdGhpcy5vbkVycm9yKENvbWV0Q2hhdEV4Y2VwdGlvbihlcnJvcikpXG4gICAgICB9XG4gICAgfVxuICB9O1xuICAvKipcbiAgICogQHBhcmFtICB7Q29tZXRDaGF0LkJhc2VNZXNzYWdlfSBtZXNzYWdlXG4gICAqL1xuICBtYXJrTWVzc2FnZUFzRGVsaXZlcmVkID0gKG1lc3NhZ2U6IENvbWV0Q2hhdC5CYXNlTWVzc2FnZSkgPT4ge1xuICAgIC8vaWYgY2hhdCB3aW5kb3cgaXMgbm90IG9wZW4sIG1hcmsgbWVzc2FnZSBhcyBkZWxpdmVyZWRcbiAgICBpZiAodGhpcy5hY3RpdmVDb252ZXJzYXRpb24/LmdldENvbnZlcnNhdGlvblR5cGUoKSA9PSBDb21ldENoYXRVSUtpdENvbnN0YW50cy5NZXNzYWdlUmVjZWl2ZXJUeXBlLnVzZXIpIHtcbiAgICAgIGlmICgoIXRoaXMuYWN0aXZlQ29udmVyc2F0aW9uIHx8ICh0aGlzLmFjdGl2ZUNvbnZlcnNhdGlvbj8uZ2V0Q29udmVyc2F0aW9uV2l0aCgpIGFzIENvbWV0Q2hhdC5Vc2VyKT8uZ2V0VWlkKCkgIT09IG1lc3NhZ2U/LmdldFNlbmRlcigpPy5nZXRVaWQoKSlcbiAgICAgICAgJiYgIW1lc3NhZ2UuaGFzT3duUHJvcGVydHkoXCJkZWxpdmVyZWRBdFwiKSkge1xuICAgICAgICBDb21ldENoYXQubWFya0FzRGVsaXZlcmVkKG1lc3NhZ2UpXG4gICAgICB9XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgaWYgKCghdGhpcy5hY3RpdmVDb252ZXJzYXRpb24gfHwgKHRoaXMuYWN0aXZlQ29udmVyc2F0aW9uPy5nZXRDb252ZXJzYXRpb25XaXRoKCkgYXMgQ29tZXRDaGF0Lkdyb3VwKT8uZ2V0R3VpZCgpICE9PSBtZXNzYWdlPy5nZXRSZWNlaXZlcklkKCkpXG4gICAgICAgICYmICFtZXNzYWdlLmhhc093blByb3BlcnR5KFwiZGVsaXZlcmVkQXRcIikpIHtcbiAgICAgICAgQ29tZXRDaGF0Lm1hcmtBc0RlbGl2ZXJlZChtZXNzYWdlKVxuICAgICAgfVxuICAgIH1cbiAgfTtcbiAgLyoqXG4gICAqIEBwYXJhbSAge0NvbWV0Q2hhdC5CYXNlTWVzc2FnZX0gcmVhZE1lc3NhZ2VcbiAgICovXG4gIGdldFVpbnggPSAoKSA9PiB7XG4gICAgcmV0dXJuIFN0cmluZyhNYXRoLnJvdW5kKCtuZXcgRGF0ZSgpIC8gMTAwMCkpXG4gIH1cbiAgbWFya0FzUmVhZChyZWFkTWVzc2FnZTogQ29tZXRDaGF0Lk1lc3NhZ2VSZWNlaXB0KSB7XG4gICAgbGV0IGNvbnZlcnNhdGlvbmxpc3Q6IENvbWV0Q2hhdC5Db252ZXJzYXRpb25bXSA9IFsuLi50aGlzLmNvbnZlcnNhdGlvbkxpc3RdXG4gICAgY29uc3QgY29udmVyc2F0aW9uS2V5ID0gY29udmVyc2F0aW9ubGlzdC5maW5kSW5kZXgoXG4gICAgICAoY29udmVyc2F0aW9uT2JqOiBDb21ldENoYXQuQ29udmVyc2F0aW9uKSA9PiAoY29udmVyc2F0aW9uT2JqLmdldExhc3RNZXNzYWdlKCkgYXMgQ29tZXRDaGF0LkJhc2VNZXNzYWdlKS5nZXRSZWNlaXZlcklkKCkgPT0gcmVhZE1lc3NhZ2UuZ2V0U2VuZGVyKCkuZ2V0VWlkKClcbiAgICApO1xuICAgIGlmIChjb252ZXJzYXRpb25LZXkgPiAtMSkge1xuICAgICAgbGV0IG5ld0NvbnZlcnNhdGlvbk9iamVjdCE6IENvbWV0Q2hhdC5Db252ZXJzYXRpb247XG4gICAgICBpZiAoIShjb252ZXJzYXRpb25saXN0W2NvbnZlcnNhdGlvbktleV0uZ2V0TGFzdE1lc3NhZ2UoKSBhcyBDb21ldENoYXQuVGV4dE1lc3NhZ2UpLmdldFJlYWRBdCgpKSB7XG4gICAgICAgIG5ld0NvbnZlcnNhdGlvbk9iamVjdCA9IGNvbnZlcnNhdGlvbmxpc3RbY29udmVyc2F0aW9uS2V5XTtcbiAgICAgICAgKG5ld0NvbnZlcnNhdGlvbk9iamVjdC5nZXRMYXN0TWVzc2FnZSgpIGFzIENvbWV0Q2hhdC5UZXh0TWVzc2FnZSkuc2V0UmVhZEF0KHJlYWRNZXNzYWdlLmdldFJlYWRBdCgpKTtcbiAgICAgICAgKG5ld0NvbnZlcnNhdGlvbk9iamVjdC5nZXRMYXN0TWVzc2FnZSgpIGFzIENvbWV0Q2hhdC5UZXh0TWVzc2FnZSkuc2V0TXVpZCh0aGlzLmdldFVpbngoKSk7XG4gICAgICAgIGNvbnZlcnNhdGlvbmxpc3Quc3BsaWNlKGNvbnZlcnNhdGlvbktleSwgMSwgbmV3Q29udmVyc2F0aW9uT2JqZWN0KTtcbiAgICAgICAgdGhpcy5jb252ZXJzYXRpb25MaXN0ID0gWy4uLmNvbnZlcnNhdGlvbmxpc3RdO1xuXG4gICAgICB9XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBVcGRhdGVzIERldGFpbCB3aGVuIHVzZXIgY29tZXMgb25saW5lL29mZmxpbmVcbiAgICogQHBhcmFtXG4gICAqL1xuICAvKipcbiAgICogQHBhcmFtICB7Q29tZXRDaGF0LlVzZXJ8Q29tZXRDaGF0Lkdyb3VwfG51bGx9IHVzZXJcbiAgICovXG4gIHVwZGF0ZVVzZXIodXNlcjogQ29tZXRDaGF0LlVzZXIgfCBDb21ldENoYXQuR3JvdXAgfCBudWxsKSB7XG4gICAgdHJ5IHtcbiAgICAgIC8vd2hlbiB1c2VyIHVwZGF0ZXNcbiAgICAgIGNvbnN0IGNvbnZlcnNhdGlvbmxpc3Q6IENvbWV0Q2hhdC5Db252ZXJzYXRpb25bXSA9IFsuLi50aGlzLmNvbnZlcnNhdGlvbkxpc3RdO1xuICAgICAgLy9HZXRzIHRoZSBpbmRleCBvZiB1c2VyIHdoaWNoIGNvbWVzIG9mZmxpbmUvb25saW5lXG4gICAgICBjb25zdCBjb252ZXJzYXRpb25LZXkgPSBjb252ZXJzYXRpb25saXN0LmZpbmRJbmRleChcbiAgICAgICAgKGNvbnZlcnNhdGlvbk9iajogQ29tZXRDaGF0LkNvbnZlcnNhdGlvbikgPT5cbiAgICAgICAgICBjb252ZXJzYXRpb25PYmouZ2V0Q29udmVyc2F0aW9uVHlwZSgpID09PSBDb21ldENoYXRVSUtpdENvbnN0YW50cy5NZXNzYWdlUmVjZWl2ZXJUeXBlLnVzZXIgJiZcbiAgICAgICAgICAoY29udmVyc2F0aW9uT2JqLmdldENvbnZlcnNhdGlvbldpdGgoKSBhcyBDb21ldENoYXQuVXNlcikuZ2V0VWlkKCkgPT09ICh1c2VyIGFzIENvbWV0Q2hhdC5Vc2VyKS5nZXRVaWQoKVxuICAgICAgKTtcbiAgICAgIGlmIChjb252ZXJzYXRpb25LZXkgPiAtMSkge1xuICAgICAgICBsZXQgY29udmVyc2F0aW9uT2JqOiBDb21ldENoYXQuQ29udmVyc2F0aW9uID0gY29udmVyc2F0aW9ubGlzdFtjb252ZXJzYXRpb25LZXldO1xuICAgICAgICBsZXQgY29udmVyc2F0aW9uV2l0aE9iajogQ29tZXRDaGF0LlVzZXIgPSAoY29udmVyc2F0aW9uT2JqLmdldENvbnZlcnNhdGlvbldpdGgoKSBhcyBDb21ldENoYXQuVXNlcilcbiAgICAgICAgY29udmVyc2F0aW9uV2l0aE9iai5zZXRTdGF0dXMoKHVzZXIgYXMgQ29tZXRDaGF0LlVzZXIpLmdldFN0YXR1cygpKVxuICAgICAgICBsZXQgbmV3Q29udmVyc2F0aW9uT2JqOiBDb21ldENoYXQuQ29udmVyc2F0aW9uID0gY29udmVyc2F0aW9uT2JqXG4gICAgICAgIG5ld0NvbnZlcnNhdGlvbk9iai5zZXRDb252ZXJzYXRpb25XaXRoKGNvbnZlcnNhdGlvbldpdGhPYmopO1xuICAgICAgICAobmV3Q29udmVyc2F0aW9uT2JqLmdldExhc3RNZXNzYWdlKCkgYXMgQ29tZXRDaGF0LlRleHRNZXNzYWdlKS5zZXRNdWlkKHRoaXMuZ2V0VWlueCgpKVxuICAgICAgICBjb252ZXJzYXRpb25saXN0LnNwbGljZShjb252ZXJzYXRpb25LZXksIDEsIG5ld0NvbnZlcnNhdGlvbk9iaik7XG4gICAgICAgIHRoaXMuY29udmVyc2F0aW9uTGlzdCA9IGNvbnZlcnNhdGlvbmxpc3Q7XG4gICAgICAgIHRoaXMucmVmLmRldGVjdENoYW5nZXMoKVxuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgICAgICAgIGlmKHRoaXMub25FcnJvcil7XG4gICAgICAgIHRoaXMub25FcnJvcihDb21ldENoYXRFeGNlcHRpb24oZXJyb3IpKVxuICAgICAgfVxuICAgICAgdGhpcy5yZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICpcbiAgICogR2V0cyB0aGUgbGFzdCBtZXNzYWdlXG4gICAqIEBwYXJhbSBjb252ZXJzYXRpb25cbiAgLyoqXG4gICAqIEBwYXJhbSAge0NvbWV0Q2hhdC5CYXNlTWVzc2FnZX0gbWVzc2FnZVxuICAgKiBAcGFyYW0gIHtDb21ldENoYXQuQ29udmVyc2F0aW9ufHt9fSBjb252ZXJzYXRpb25cbiAgICovXG4gIG1ha2VMYXN0TWVzc2FnZShtZXNzYWdlOiBDb21ldENoYXQuQmFzZU1lc3NhZ2UsIGNvbnZlcnNhdGlvbjogQ29tZXRDaGF0LkNvbnZlcnNhdGlvbiB8IHt9ID0ge30pIHtcbiAgICBjb25zdCBuZXdNZXNzYWdlID0gbWVzc2FnZTtcbiAgICByZXR1cm4gbmV3TWVzc2FnZTtcbiAgfVxuICAvKipcbiAgICpcbiAgICogVXBkYXRlcyBDb252ZXJzYXRpb25zIGFzIFRleHQvQ3VzdG9tIE1lc3NhZ2VzIGFyZSByZWNlaXZlZFxuICAgKiBAcGFyYW1cbiAgICpcbiAgICovXG4gIC8qKlxuICAgKiBAcGFyYW0gIHtDb21ldENoYXQuQmFzZU1lc3NhZ2V9IG1lc3NhZ2VcbiAgICogQHBhcmFtICB7Ym9vbGVhbn0gbm90aWZpY2F0aW9uXG4gICAqL1xuICB1cGRhdGVDb252ZXJzYXRpb24obWVzc2FnZTogQ29tZXRDaGF0LkJhc2VNZXNzYWdlLCBub3RpZmljYXRpb246IGJvb2xlYW4gPSB0cnVlKSB7XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMubWFrZUNvbnZlcnNhdGlvbihtZXNzYWdlKVxuICAgICAgICAudGhlbigocmVzcG9uc2U6IGFueSkgPT4ge1xuXG4gICAgICAgICAgY29uc3QgY29udmVyc2F0aW9uS2V5ID0gcmVzcG9uc2UuY29udmVyc2F0aW9uS2V5O1xuICAgICAgICAgIGNvbnN0IGNvbnZlcnNhdGlvbk9iajogQ29tZXRDaGF0LkNvbnZlcnNhdGlvbiA9IHJlc3BvbnNlLmNvbnZlcnNhdGlvbk9iajtcbiAgICAgICAgICBjb25zdCBjb252ZXJzYXRpb25MaXN0ID0gcmVzcG9uc2UuY29udmVyc2F0aW9uTGlzdDtcbiAgICAgICAgICBpZiAoY29udmVyc2F0aW9uS2V5ID4gLTEpIHtcbiAgICAgICAgICAgIC8vIGlmIHNlbmRlciBpcyBub3QgbG9nZ2VkIGluIHVzZXIgdGhlbiAgaW5jcmVtZW50IGNvdW50XG4gICAgICAgICAgICBsZXQgdW5yZWFkTWVzc2FnZUNvdW50ID0gdGhpcy5sb2dnZWRJblVzZXI/LmdldFVpZCgpICE9IG1lc3NhZ2UuZ2V0U2VuZGVyKCkuZ2V0VWlkKCkgfHwgdGhpcy5sb2dnZWRJblVzZXI/LmdldFVpZCgpID09IG1lc3NhZ2UuZ2V0UmVjZWl2ZXJJZCgpID8gdGhpcy5tYWtlVW5yZWFkTWVzc2FnZUNvdW50KFxuICAgICAgICAgICAgICBjb252ZXJzYXRpb25PYmpcbiAgICAgICAgICAgICkgOiB0aGlzLm1ha2VVbnJlYWRNZXNzYWdlQ291bnQoY29udmVyc2F0aW9uT2JqKSAtIDE7XG4gICAgICAgICAgICBsZXQgbGFzdE1lc3NhZ2VPYmo6IENvbWV0Q2hhdC5CYXNlTWVzc2FnZSA9IHRoaXMubWFrZUxhc3RNZXNzYWdlKG1lc3NhZ2UsIGNvbnZlcnNhdGlvbk9iaik7XG4gICAgICAgICAgICBsZXQgbmV3Q29udmVyc2F0aW9uT2JqOiBDb21ldENoYXQuQ29udmVyc2F0aW9uID0gY29udmVyc2F0aW9uT2JqXG4gICAgICAgICAgICBuZXdDb252ZXJzYXRpb25PYmouc2V0TGFzdE1lc3NhZ2UobGFzdE1lc3NhZ2VPYmopO1xuICAgICAgICAgICAgbmV3Q29udmVyc2F0aW9uT2JqLnNldFVucmVhZE1lc3NhZ2VDb3VudCh1bnJlYWRNZXNzYWdlQ291bnQpO1xuICAgICAgICAgICAgKG5ld0NvbnZlcnNhdGlvbk9iai5nZXRMYXN0TWVzc2FnZSgpIGFzIENvbWV0Q2hhdC5UZXh0TWVzc2FnZSkuc2V0TXVpZCh0aGlzLmdldFVpbngoKSlcbiAgICAgICAgICAgIGNvbnZlcnNhdGlvbkxpc3Quc3BsaWNlKGNvbnZlcnNhdGlvbktleSwgMSk7XG4gICAgICAgICAgICBjb252ZXJzYXRpb25MaXN0LnVuc2hpZnQobmV3Q29udmVyc2F0aW9uT2JqKTtcbiAgICAgICAgICAgIHRoaXMuY29udmVyc2F0aW9uTGlzdCA9IFsuLi5jb252ZXJzYXRpb25MaXN0XTtcbiAgICAgICAgICAgIGlmIChub3RpZmljYXRpb24gJiYgdGhpcy5sb2dnZWRJblVzZXI/LmdldFVpZCgpICE9IG1lc3NhZ2U/LmdldFNlbmRlcigpPy5nZXRVaWQoKSkge1xuICAgICAgICAgICAgICB0aGlzLnBsYXlBdWRpbygpO1xuICAgICAgICAgICAgICB0aGlzLnJlZi5kZXRlY3RDaGFuZ2VzKClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbGV0IGxhc3RNZXNzYWdlT2JqID0gdGhpcy5tYWtlTGFzdE1lc3NhZ2UobWVzc2FnZSk7XG4gICAgICAgICAgICBjb252ZXJzYXRpb25PYmouc2V0TGFzdE1lc3NhZ2UobGFzdE1lc3NhZ2VPYmopO1xuICAgICAgICAgICAgY29udmVyc2F0aW9uT2JqLnNldFVucmVhZE1lc3NhZ2VDb3VudCgxKVxuICAgICAgICAgICAgY29udmVyc2F0aW9uTGlzdC51bnNoaWZ0KGNvbnZlcnNhdGlvbk9iaik7XG4gICAgICAgICAgICB0aGlzLmNvbnZlcnNhdGlvbkxpc3QgPSBjb252ZXJzYXRpb25MaXN0O1xuICAgICAgICAgICAgdGhpcy5yZWYuZGV0ZWN0Q2hhbmdlcygpXG4gICAgICAgICAgICAvLyB0aGlzLnJlZi5kZXRlY3RDaGFuZ2VzKClcbiAgICAgICAgICAgIGlmIChub3RpZmljYXRpb24gJiYgdGhpcy5sb2dnZWRJblVzZXI/LmdldFVpZCgpICE9IG1lc3NhZ2U/LmdldFNlbmRlcigpPy5nZXRVaWQoKSkge1xuICAgICAgICAgICAgICB0aGlzLnBsYXlBdWRpbygpO1xuICAgICAgICAgICAgICB0aGlzLnJlZi5kZXRlY3RDaGFuZ2VzKClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5yZWYuZGV0ZWN0Q2hhbmdlcygpXG4gICAgICAgIH0pXG4gICAgICAgIC5jYXRjaCgoZXJyb3I6IENvbWV0Q2hhdC5Db21ldENoYXRFeGNlcHRpb24pID0+IHtcbiAgICAgICAgICBpZih0aGlzLm9uRXJyb3Ipe1xuICAgICAgICAgICAgdGhpcy5vbkVycm9yKGVycm9yKVxuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLnJlZi5kZXRlY3RDaGFuZ2VzKClcbiAgICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgICAgICAgaWYodGhpcy5vbkVycm9yKXtcbiAgICAgICAgdGhpcy5vbkVycm9yKENvbWV0Q2hhdEV4Y2VwdGlvbihlcnJvcikpXG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMucmVmLmRldGVjdENoYW5nZXMoKVxuICB9XG4gIHVwZGF0ZURlbGl2ZXJlZE1lc3NhZ2UobWVzc2FnZVJlY2VpcHQ6IENvbWV0Q2hhdC5NZXNzYWdlUmVjZWlwdCkge1xuICAgIGxldCBjb252ZXJzYXRpb25MaXN0OiBDb21ldENoYXQuQ29udmVyc2F0aW9uW10gPSBbLi4udGhpcy5jb252ZXJzYXRpb25MaXN0XTtcbiAgICBsZXQgY29udmVyc2F0aW9uS2V5OiBudW1iZXIgPSBjb252ZXJzYXRpb25MaXN0LmZpbmRJbmRleChcbiAgICAgIChjOiBDb21ldENoYXQuQ29udmVyc2F0aW9uKSA9PiAoYy5nZXRMYXN0TWVzc2FnZSgpIGFzIENvbWV0Q2hhdC5UZXh0TWVzc2FnZSkuZ2V0SWQoKSA9PSBOdW1iZXIobWVzc2FnZVJlY2VpcHQuZ2V0TWVzc2FnZUlkKCkpXG4gICAgKTtcbiAgICBsZXQgY29udmVyc2F0aW9uT2JqOiBDb21ldENoYXQuQ29udmVyc2F0aW9uO1xuICAgIGlmIChjb252ZXJzYXRpb25LZXkgPiAtMSkge1xuICAgICAgY29udmVyc2F0aW9uT2JqID0gY29udmVyc2F0aW9uTGlzdFtjb252ZXJzYXRpb25LZXldO1xuICAgICAgaWYgKCEoY29udmVyc2F0aW9uT2JqLmdldExhc3RNZXNzYWdlKCkgYXMgQ29tZXRDaGF0LlRleHRNZXNzYWdlKS5nZXREZWxpdmVyZWRBdCgpKSB7XG4gICAgICAgIChjb252ZXJzYXRpb25PYmouZ2V0TGFzdE1lc3NhZ2UoKSBhcyBDb21ldENoYXQuVGV4dE1lc3NhZ2UpLnNldERlbGl2ZXJlZEF0KE51bWJlcih0aGlzLmdldFVpbngoKSkpO1xuICAgICAgICAoY29udmVyc2F0aW9uT2JqLmdldExhc3RNZXNzYWdlKCkgYXMgQ29tZXRDaGF0LlRleHRNZXNzYWdlKS5zZXRNdWlkKHRoaXMuZ2V0VWlueCgpKTtcbiAgICAgICAgY29udmVyc2F0aW9uTGlzdC5zcGxpY2UoY29udmVyc2F0aW9uS2V5LCAxLCBjb252ZXJzYXRpb25PYmopXG4gICAgICAgIHRoaXMuY29udmVyc2F0aW9uTGlzdCA9IFsuLi5jb252ZXJzYXRpb25MaXN0XTtcbiAgICAgICAgdGhpcy5yZWYuZGV0ZWN0Q2hhbmdlcygpXG4gICAgICB9XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKlxuICAgKiBHZXRzIFRoZSBDb3VudCBvZiBVbnJlYWQgTWVzc2FnZXNcbiAgICogQHBhcmFtXG4gICAqL1xuICAvKipcbiAgICogQHBhcmFtICB7YW55fSBjb252ZXJzYXRpb25cbiAgICogQHBhcmFtICB7YW55fSBvcGVyYXRvclxuICAgKi9cbiAgbWFrZVVucmVhZE1lc3NhZ2VDb3VudChjb252ZXJzYXRpb246IENvbWV0Q2hhdC5Db252ZXJzYXRpb24sIG9wZXJhdG9yOiBhbnkgPSBudWxsKSB7XG4gICAgaWYgKE9iamVjdC5rZXlzKGNvbnZlcnNhdGlvbikubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gMTtcbiAgICB9XG4gICAgbGV0IHVucmVhZE1lc3NhZ2VDb3VudDpudW1iZXIgPSBjb252ZXJzYXRpb24uZ2V0VW5yZWFkTWVzc2FnZUNvdW50KCk7XG4gICAgaWYgKFxuICAgICAgdGhpcy5hY3RpdmVDb252ZXJzYXRpb24gJiZcbiAgICAgIHRoaXMuYWN0aXZlQ29udmVyc2F0aW9uLmdldENvbnZlcnNhdGlvbklkKCkgPT09IGNvbnZlcnNhdGlvbi5nZXRDb252ZXJzYXRpb25JZCgpXG4gICAgKSB7XG4gICAgICB1bnJlYWRNZXNzYWdlQ291bnQgKz0gMTtcbiAgICB9IGVsc2UgaWYgKFxuICAgICAgKHRoaXMuYWN0aXZlQ29udmVyc2F0aW9uICYmXG4gICAgICAgIHRoaXMuYWN0aXZlQ29udmVyc2F0aW9uLmhhc093blByb3BlcnR5KFwiZ3VpZFwiKSAmJlxuICAgICAgICBjb252ZXJzYXRpb24uZ2V0Q29udmVyc2F0aW9uV2l0aCgpLmhhc093blByb3BlcnR5KFwiZ3VpZFwiKSAmJlxuICAgICAgICAodGhpcy5hY3RpdmVDb252ZXJzYXRpb24uZ2V0Q29udmVyc2F0aW9uV2l0aCgpIGFzIENvbWV0Q2hhdC5Hcm91cCkuZ2V0R3VpZCgpID09PSAoY29udmVyc2F0aW9uLmdldENvbnZlcnNhdGlvbldpdGgoKSBhcyBDb21ldENoYXQuR3JvdXApLmdldEd1aWQoKSkgfHxcbiAgICAgICh0aGlzLmFjdGl2ZUNvbnZlcnNhdGlvbiAmJlxuICAgICAgICB0aGlzLmFjdGl2ZUNvbnZlcnNhdGlvbi5oYXNPd25Qcm9wZXJ0eShcInVpZFwiKSAmJlxuICAgICAgICBjb252ZXJzYXRpb24uZ2V0Q29udmVyc2F0aW9uV2l0aCgpLmhhc093blByb3BlcnR5KFwidWlkXCIpICYmXG4gICAgICAgICh0aGlzLmFjdGl2ZUNvbnZlcnNhdGlvbi5nZXRDb252ZXJzYXRpb25XaXRoKCkgYXMgQ29tZXRDaGF0LlVzZXIpLmdldFVpZCgpID09PSAoY29udmVyc2F0aW9uLmdldENvbnZlcnNhdGlvbldpdGgoKSBhcyBDb21ldENoYXQuVXNlcikuZ2V0VWlkKCkpXG4gICAgKSB7XG4gICAgICB1bnJlYWRNZXNzYWdlQ291bnQgPSAwO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAob3BlcmF0b3IgJiYgb3BlcmF0b3IgPT09IFwiZGVjcmVtZW50XCIpIHtcbiAgICAgICAgdW5yZWFkTWVzc2FnZUNvdW50ID0gdW5yZWFkTWVzc2FnZUNvdW50ID8gdW5yZWFkTWVzc2FnZUNvdW50IC0gMSA6IDA7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB1bnJlYWRNZXNzYWdlQ291bnQgPSB1bnJlYWRNZXNzYWdlQ291bnQgKyAxO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdW5yZWFkTWVzc2FnZUNvdW50O1xuICB9XG4gIC8qKlxuICAgKiBDaGFuZ2VzIGRldGFpbCBvZiBjb252ZXJzYXRpb25zXG4gICAqIEBwYXJhbVxuICAgKi9cbiAgLyoqXG4gICAqIEBwYXJhbSAge0NvbWV0Q2hhdC5CYXNlTWVzc2FnZX0gbWVzc2FnZVxuICAgKi9cbiAgbWFrZUNvbnZlcnNhdGlvbihtZXNzYWdlOiBDb21ldENoYXQuQmFzZU1lc3NhZ2UpIHtcbiAgICBjb25zdCBwcm9taXNlID0gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgQ29tZXRDaGF0LkNvbWV0Q2hhdEhlbHBlci5nZXRDb252ZXJzYXRpb25Gcm9tTWVzc2FnZShtZXNzYWdlKVxuICAgICAgICAudGhlbigoY29udmVyc2F0aW9uOiBDb21ldENoYXQuQ29udmVyc2F0aW9uKSA9PiB7XG4gICAgICAgICAgbGV0IGNvbnZlcnNhdGlvbkxpc3Q6IENvbWV0Q2hhdC5Db252ZXJzYXRpb25bXSA9IFsuLi50aGlzLmNvbnZlcnNhdGlvbkxpc3RdO1xuICAgICAgICAgIGxldCBjb252ZXJzYXRpb25LZXk6IG51bWJlciA9IGNvbnZlcnNhdGlvbkxpc3QuZmluZEluZGV4KFxuICAgICAgICAgICAgKGM6IENvbWV0Q2hhdC5Db252ZXJzYXRpb24pID0+IGM/LmdldENvbnZlcnNhdGlvbklkKCkgPT09IGNvbnZlcnNhdGlvbi5nZXRDb252ZXJzYXRpb25JZCgpXG4gICAgICAgICAgKTtcbiAgICAgICAgICBsZXQgY29udmVyc2F0aW9uT2JqOiBDb21ldENoYXQuQ29udmVyc2F0aW9uID0gY29udmVyc2F0aW9uO1xuICAgICAgICAgIGlmIChjb252ZXJzYXRpb25LZXkgPiAtMSkge1xuICAgICAgICAgICAgY29udmVyc2F0aW9uT2JqID0gY29udmVyc2F0aW9uTGlzdFtjb252ZXJzYXRpb25LZXldO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXNvbHZlKHtcbiAgICAgICAgICAgIGNvbnZlcnNhdGlvbktleTogY29udmVyc2F0aW9uS2V5LFxuICAgICAgICAgICAgY29udmVyc2F0aW9uT2JqOiBjb252ZXJzYXRpb25PYmosXG4gICAgICAgICAgICBjb252ZXJzYXRpb25MaXN0OiBjb252ZXJzYXRpb25MaXN0LFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHRoaXMucmVmLmRldGVjdENoYW5nZXMoKVxuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goKGVycm9yOiBDb21ldENoYXQuQ29tZXRDaGF0RXhjZXB0aW9uKSA9PiByZWplY3QoZXJyb3IpKTtcbiAgICB9KTtcbiAgICByZXR1cm4gcHJvbWlzZTtcbiAgfVxuICAvKipcbiAgICogVXBkYXRlcyBDb252ZXJzYXRpb24gVmlldyB3aGVuIG1lc3NhZ2UgaXMgZWRpdGVkIG9yIGRlbGV0ZWRcbiAgICovXG4gIGNvbnZlcnNhdGlvbkVkaXRlZERlbGV0ZWQobWVzc2FnZTogQ29tZXRDaGF0LkJhc2VNZXNzYWdlKSB7XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMubWFrZUNvbnZlcnNhdGlvbihtZXNzYWdlKVxuICAgICAgICAudGhlbigocmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgICAgIGNvbnN0IGNvbnZlcnNhdGlvbktleSA9IHJlc3BvbnNlLmNvbnZlcnNhdGlvbktleTtcbiAgICAgICAgICBjb25zdCBjb252ZXJzYXRpb25PYmo6IENvbWV0Q2hhdC5Db252ZXJzYXRpb24gPSByZXNwb25zZS5jb252ZXJzYXRpb25PYmo7XG4gICAgICAgICAgY29uc3QgY29udmVyc2F0aW9uTGlzdCA9IHJlc3BvbnNlLmNvbnZlcnNhdGlvbkxpc3Q7XG4gICAgICAgICAgaWYgKGNvbnZlcnNhdGlvbktleSA+IC0xKSB7XG4gICAgICAgICAgICBsZXQgbGFzdE1lc3NhZ2VPYmo6IENvbWV0Q2hhdC5CYXNlTWVzc2FnZSA9IGNvbnZlcnNhdGlvbk9iai5nZXRMYXN0TWVzc2FnZSgpO1xuICAgICAgICAgICAgaWYgKGxhc3RNZXNzYWdlT2JqLmdldElkKCkgPT09IG1lc3NhZ2UuZ2V0SWQoKSkge1xuICAgICAgICAgICAgICBjb252ZXJzYXRpb25PYmouc2V0TGFzdE1lc3NhZ2UobWVzc2FnZSk7XG4gICAgICAgICAgICAgIChjb252ZXJzYXRpb25PYmouZ2V0TGFzdE1lc3NhZ2UoKSBhcyBDb21ldENoYXQuVGV4dE1lc3NhZ2UpLnNldE11aWQodGhpcy5nZXRVaW54KCkpO1xuICAgICAgICAgICAgICBjb252ZXJzYXRpb25MaXN0LnNwbGljZShjb252ZXJzYXRpb25LZXksIDEsIGNvbnZlcnNhdGlvbk9iaik7XG4gICAgICAgICAgICAgIHRoaXMuY29udmVyc2F0aW9uTGlzdCA9IFsuLi5jb252ZXJzYXRpb25MaXN0XTtcbiAgICAgICAgICAgICAgdGhpcy5yZWYuZGV0ZWN0Q2hhbmdlcygpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goKGVycm9yOiBDb21ldENoYXQuQ29tZXRDaGF0RXhjZXB0aW9uKSA9PiB7XG4gICAgICAgICAgaWYodGhpcy5vbkVycm9yKXtcbiAgICAgICAgICAgIHRoaXMub25FcnJvcihlcnJvcilcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5yZWYuZGV0ZWN0Q2hhbmdlcygpXG4gICAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGVycm9yOmFueSkge1xuICAgICAgICAgICAgaWYodGhpcy5vbkVycm9yKXtcbiAgICAgICAgdGhpcy5vbkVycm9yKENvbWV0Q2hhdEV4Y2VwdGlvbihlcnJvcikpXG4gICAgICB9XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBJZiBVc2VyIHNjcm9sbHMgdG8gdGhlIGJvdHRvbSBvZiB0aGUgY3VycmVudCBDb252ZXJzYXRpb24gbGlzdCB0aGFuIGZldGNoIG5leHQgaXRlbXMgb2YgdGhlIENvbnZlcnNhdGlvbiBsaXN0IGFuZCBhcHBlbmRcbiAgICogQHBhcmFtIEV2ZW50XG4gICAqL1xuICAvKipcbiAgICogUGxheXMgQXVkaW8gV2hlbiBNZXNzYWdlIGlzIFJlY2VpdmVkXG4gICAqL1xuICBwbGF5QXVkaW8oKSB7XG4gICAgdHJ5IHtcbiAgICAgIGlmKCF0aGlzLmRpc2FibGVTb3VuZEZvck1lc3NhZ2VzKXtcbiAgICAgICAgaWYodGhpcy5jdXN0b21Tb3VuZEZvck1lc3NhZ2VzKXtcbiAgICAgICAgICBDb21ldENoYXRTb3VuZE1hbmFnZXIucGxheSh0aGlzLmN1c3RvbVNvdW5kRm9yTWVzc2FnZXMpXG4gICAgICAgIH1cbiAgICAgICAgZWxzZXtcbiAgICAgICAgICBDb21ldENoYXRTb3VuZE1hbmFnZXIucGxheShDb21ldENoYXRTb3VuZE1hbmFnZXIuU291bmQuaW5jb21pbmdNZXNzYWdlRnJvbU90aGVyKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBlbHNle1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICAgICAgICBpZih0aGlzLm9uRXJyb3Ipe1xuICAgICAgICB0aGlzLm9uRXJyb3IoQ29tZXRDaGF0RXhjZXB0aW9uKGVycm9yKSlcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgLypcbiAgICogVXBkYXRlcyB0aGUgY29udmVzYXRpb24gbGlzdCB3aGVuIGRlbGV0ZWQuXG4gICAqIEFkZGluZyBDb252ZXJzYXRpb24gT2JqZWN0IHRvIENvbWV0Y2hhdFNlcnZpY2VcbiAgICovXG4gIC8qKlxuICAgKiBAcGFyYW0gIHtDb21ldENoYXQuQ29udmVyc2F0aW9ufHt9fSBjb252ZXJzYXRpb25cbiAgICovXG4gIHVwZGF0ZUNvbnZlcnNhdGlvbkxpc3QoY29udmVyc2F0aW9uOiBDb21ldENoYXQuQ29udmVyc2F0aW9uIHwgbnVsbCkge1xuICAgIGxldCBpbmRleCA9IHRoaXMuY29udmVyc2F0aW9uTGlzdC5maW5kSW5kZXgoKGVsZW1lbnQ6IENvbWV0Q2hhdC5Db252ZXJzYXRpb24pID0+IGVsZW1lbnQ/LmdldENvbnZlcnNhdGlvbklkKCkgPT0gY29udmVyc2F0aW9uPy5nZXRDb252ZXJzYXRpb25JZCgpKTtcbiAgICB0aGlzLmNvbnZlcnNhdGlvbkxpc3Quc3BsaWNlKGluZGV4LCAxKTtcbiAgICB0aGlzLnJlZi5kZXRlY3RDaGFuZ2VzKClcbiAgfVxuICAvKipcbiAgICogc2hvd2luZyBkaWFsb2cgZm9yIGNvbmZpcm0gYW5kIGNhbmNlbFxuICAgKiBAcGFyYW0gIHtDb21ldENoYXQuQ29udmVyc2F0aW9ufHt9fSBjb252ZXJzYXRpb25cbiAgICovXG4gIHNob3dDb25maXJtYXRpb25EaWFsb2cgPSAoY29udmVyc2F0aW9uOiBDb21ldENoYXQuQ29udmVyc2F0aW9uKSA9PiB7XG4gICAgdGhpcy5pc0RpYWxvZ09wZW4gPSB0cnVlO1xuICAgIHRoaXMuY29udmVyc2F0aW9uVG9CZURlbGV0ZWQgPSBjb252ZXJzYXRpb247XG4gICAgdGhpcy5yZWYuZGV0ZWN0Q2hhbmdlcygpXG4gIH1cbiAgb25PcHRpb25DbGljayhldmVudDphbnksY29udmVyc2F0aW9uOiBDb21ldENoYXQuQ29udmVyc2F0aW9uKXtcbiAgICBsZXQgb3B0aW9uOkNvbWV0Q2hhdE9wdGlvbiA9IGV2ZW50Py5kZXRhaWw/LmRhdGFcbiAgICB0aGlzLmNvbnZlcnNhdGlvblRvQmVEZWxldGVkID0gY29udmVyc2F0aW9uO1xuICAgIGlmKG9wdGlvbil7XG4gICAgICBvcHRpb24ub25DbGljayEoKVxuICAgIH1cbiAgfVxuICAvKipcbiAgICogc2hvdyBjb25maXJtIGRpYWxvZyBzY3JlZW5cbiAgICogQHBhcmFtICB7Q29tZXRDaGF0LkNvbnZlcnNhdGlvbnx7fX0gY29udmVyc2F0b25cbiAgICovXG4gIC8vIGNoZWNrIGlzIHRoZXJlIGlzIGFueSBhY3RpdmUgY29udmVyc2F0aW9uIGFuZCBtYXJrIGl0IGFzIGFjdGl2ZVxuICBnZXRBY3RpdmVDb252ZXJzYXRpb24oY29udmVyc2F0aW9uOiBDb21ldENoYXQuQ29udmVyc2F0aW9uKSB7XG4gICAgaWYodGhpcy5zZWxlY3Rpb25Nb2RlID09IFNlbGVjdGlvbk1vZGUubm9uZSB8fCAhdGhpcy5zZWxlY3Rpb25Nb2RlICkge1xuICAgICAgcmV0dXJuIHRoaXMuYWN0aXZlQ29udmVyc2F0aW9uICYmICh0aGlzLmFjdGl2ZUNvbnZlcnNhdGlvbiBhcyBhbnkpPy5jb252ZXJzYXRpb25JZCA9PSAoY29udmVyc2F0aW9uIGFzIGFueSk/LmNvbnZlcnNhdGlvbklkXG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBoYW5kbGUgY29uZmlybSBkaWFsb2cgcmVzcG9uc2VcbiAgICogQHBhcmFtICB7c3RyaW5nfSB2YWx1ZVxuICAgKi9cbiAgLy8gY2FsbGluZyBjb21ldGNoYXQuZGVsZXRlQ29udmVyc2F0aW9uIG1ldGhvZFxuICBkZWxldGVTZWxlY3RlZENvbnZlcnNhdGlvbigpe1xuICAgIGlmICh0aGlzLmNvbnZlcnNhdGlvblRvQmVEZWxldGVkKSB7XG4gICAgICBpZiAodGhpcy5hY3RpdmVDb252ZXJzYXRpb24gJiYgdGhpcy5hY3RpdmVDb252ZXJzYXRpb24uZ2V0Q29udmVyc2F0aW9uSWQoKSA9PSB0aGlzLmNvbnZlcnNhdGlvblRvQmVEZWxldGVkLmdldENvbnZlcnNhdGlvbklkKCkpIHtcbiAgICAgICAgdGhpcy5hY3RpdmVDb252ZXJzYXRpb24gPSBudWxsXG4gICAgICB9XG4gICAgICBsZXQgY29udmVyc2F0aW9uV2l0aDtcbiAgICAgIGxldCBjb252ZXJzYXRpb25UeXBlID0gdGhpcy5jb252ZXJzYXRpb25Ub0JlRGVsZXRlZC5nZXRDb252ZXJzYXRpb25UeXBlKCk7XG4gICAgICBpZiAoY29udmVyc2F0aW9uVHlwZSA9PT0gQ29tZXRDaGF0VUlLaXRDb25zdGFudHMuTWVzc2FnZVJlY2VpdmVyVHlwZS51c2VyKSB7XG4gICAgICAgIGNvbnZlcnNhdGlvbldpdGggPSAodGhpcy5jb252ZXJzYXRpb25Ub0JlRGVsZXRlZC5nZXRDb252ZXJzYXRpb25XaXRoKCkgYXMgQ29tZXRDaGF0LlVzZXIpLmdldFVpZCgpXG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgY29udmVyc2F0aW9uV2l0aCA9ICh0aGlzLmNvbnZlcnNhdGlvblRvQmVEZWxldGVkLmdldENvbnZlcnNhdGlvbldpdGgoKSBhcyBDb21ldENoYXQuR3JvdXApLmdldEd1aWQoKVxuICAgICAgfVxuICAgICAgQ29tZXRDaGF0LmRlbGV0ZUNvbnZlcnNhdGlvbihjb252ZXJzYXRpb25XaXRoLCBjb252ZXJzYXRpb25UeXBlKS50aGVuKFxuICAgICAgICBkZWxldGVkQ29udmVyc2F0aW9uID0+IHtcbiAgICAgICAgICBDb21ldENoYXRDb252ZXJzYXRpb25FdmVudHMuY2NDb252ZXJzYXRpb25EZWxldGVkLm5leHQodGhpcy5jb252ZXJzYXRpb25Ub0JlRGVsZXRlZCEpXG4gICAgICAgICAgdGhpcy51cGRhdGVDb252ZXJzYXRpb25MaXN0KHRoaXMuY29udmVyc2F0aW9uVG9CZURlbGV0ZWQpXG4gICAgICAgICAgdGhpcy5jb252ZXJzYXRpb25Ub0JlRGVsZXRlZCA9IG51bGw7XG4gICAgICAgICAgdGhpcy5yZWYuZGV0ZWN0Q2hhbmdlcygpXG4gICAgICAgIH0sXG4gICAgICApO1xuICAgICAgdGhpcy5pc0RpYWxvZ09wZW4gPSBmYWxzZVxuICAgICAgdGhpcy5yZWYuZGV0ZWN0Q2hhbmdlcygpXG4gICAgfVxuICB9XG4gIC8vIGV4cG9zZWQgbWV0aG9kcyB0byB1c2Vycy5cbiAgdXBkYXRlTGFzdE1lc3NhZ2UobWVzc2FnZTogQ29tZXRDaGF0LkJhc2VNZXNzYWdlKSB7XG4gICAgdGhpcy51cGRhdGVDb252ZXJzYXRpb24obWVzc2FnZSk7XG4gIH1cbiAgcmVtb3ZlQ29udmVyc2F0aW9uKGNvbnZlcnNhdGlvbjogQ29tZXRDaGF0LkNvbnZlcnNhdGlvbikge1xuICAgIHRoaXMudXBkYXRlQ29udmVyc2F0aW9uTGlzdChjb252ZXJzYXRpb24pO1xuICB9XG4gIHN0eWxlczogYW55ID0ge1xuICAgIHdyYXBwZXJTdHlsZTogKCkgPT4ge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaGVpZ2h0OiB0aGlzLmNvbnZlcnNhdGlvbnNTdHlsZS5oZWlnaHQsXG4gICAgICAgIHdpZHRoOiB0aGlzLmNvbnZlcnNhdGlvbnNTdHlsZS53aWR0aCxcbiAgICAgICAgYm9yZGVyOiB0aGlzLmNvbnZlcnNhdGlvbnNTdHlsZS5ib3JkZXIgfHwgYDFweCBzb2xpZCAke3RoaXMudGhlbWVTZXJ2aWNlLnRoZW1lLnBhbGV0dGUuZ2V0QWNjZW50NDAwKCl9YCxcbiAgICAgICAgYm9yZGVyUmFkaXVzOiB0aGlzLmNvbnZlcnNhdGlvbnNTdHlsZS5ib3JkZXJSYWRpdXMsXG4gICAgICAgIGJhY2tncm91bmQ6IHRoaXMuY29udmVyc2F0aW9uc1N0eWxlLmJhY2tncm91bmQgfHwgdGhpcy50aGVtZVNlcnZpY2UudGhlbWUucGFsZXR0ZS5nZXRCYWNrZ3JvdW5kKCksXG4gICAgICB9XG4gICAgfSxcbiAgfVxuICBzdWJ0aXRsZVN0eWxlID0gKGNvbnZlcnNhdGlvbjphbnkpID0+IHtcbiAgIGlmKHRoaXMudHlwaW5nSW5kaWNhdG9yICYmICggdGhpcy50eXBpbmdJbmRpY2F0b3IuZ2V0UmVjZWl2ZXJUeXBlKCkgPT0gQ29tZXRDaGF0VUlLaXRDb25zdGFudHMuTWVzc2FnZVJlY2VpdmVyVHlwZS51c2VyICYmIHRoaXMudHlwaW5nSW5kaWNhdG9yLmdldFNlbmRlcigpLmdldFVpZCgpID09IGNvbnZlcnNhdGlvbi5jb252ZXJzYXRpb25XaXRoPy51aWQgfHwgdGhpcy50eXBpbmdJbmRpY2F0b3IuZ2V0UmVjZWl2ZXJJZCgpID09IGNvbnZlcnNhdGlvbi5jb252ZXJzYXRpb25XaXRoPy5ndWlkKSl7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBmb250OiB0aGlzLmNvbnZlcnNhdGlvbnNTdHlsZS50eXBpbmdJbmRpY3RvclRleHRDb2xvcixcbiAgICAgICAgY29sb3I6IHRoaXMuY29udmVyc2F0aW9uc1N0eWxlLnR5cGluZ0luZGljdG9yVGV4dENvbG9yXG4gICAgICB9XG4gICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIGZvbnQ6ICAgIHRoaXMuY29udmVyc2F0aW9uc1N0eWxlLmxhc3RNZXNzYWdlVGV4dEZvbnQsXG4gICAgICBjb2xvcjogICB0aGlzLmNvbnZlcnNhdGlvbnNTdHlsZS5sYXN0TWVzc2FnZVRleHRDb2xvclxuICAgIH1cbiAgfVxuICBpdGVtVGhyZWFkSW5kaWNhdG9yU3R5bGUgPSAoKSA9PiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHRleHRGb250OiB0aGlzLmNvbnZlcnNhdGlvbnNTdHlsZS50aHJlYWRJbmRpY2F0b3JUZXh0Rm9udCB8fCBmb250SGVscGVyKHRoaXMudGhlbWVTZXJ2aWNlLnRoZW1lLnR5cG9ncmFwaHkuY2FwdGlvbjIpLFxuICAgICAgdGV4dENvbG9yOiB0aGlzLmNvbnZlcnNhdGlvbnNTdHlsZS50aHJlYWRJbmRpY2F0b3JUZXh0Q29sb3IgfHwgdGhpcy50aGVtZVNlcnZpY2UudGhlbWUucGFsZXR0ZS5nZXRBY2NlbnQ0MDAoKSxcbiAgICB9O1xuICB9XG59XG4iLCI8ZGl2ICBjbGFzcz1cImNjLWNvbnZlcnNhdGlvbnNcIiBbbmdTdHlsZV09XCJzdHlsZXMud3JhcHBlclN0eWxlKClcIj5cbiAgPGNvbWV0Y2hhdC1iYWNrZHJvcCBbYmFja2Ryb3BTdHlsZV09XCJiYWNrZHJvcFN0eWxlXCIgKm5nSWY9XCJpc0RpYWxvZ09wZW5cIj5cbiAgICA8Y29tZXRjaGF0LWNvbmZpcm0tZGlhbG9nIFt0aXRsZV09XCJjb25maXJtRGlhbG9nVGl0bGVcIiBbbWVzc2FnZVRleHRdPVwiY29uZmlybURpYWxvZ01lc3NhZ2VcIiBbY2FuY2VsQnV0dG9uVGV4dF09XCJjYW5jZWxCdXR0b25UZXh0XCIgW2NvbmZpcm1CdXR0b25UZXh0XT1cImNvbmZpcm1CdXR0b25UZXh0XCIgKGNjLWNvbmZpcm0tY2xpY2tlZCk9XCJvbkNvbmZpcm1DbGljaygpXCIgKGNjLWNhbmNlbC1jbGlja2VkKT1cIm9uQ2FuY2VsQ2xpY2soKVwiIFtjb25maXJtRGlhbG9nU3R5bGVdPVwiZGVsZXRlQ29udmVyc2F0aW9uRGlhbG9nU3R5bGVcIj5cbiAgICA8L2NvbWV0Y2hhdC1jb25maXJtLWRpYWxvZz5cbiAgPC9jb21ldGNoYXQtYmFja2Ryb3A+XG4gIDxkaXYgY2xhc3M9XCJjYy1jb252ZXJzYXRpb25zX19tZW51c1wiICpuZ0lmPVwibWVudVwiPlxuXG4gICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwibWVudVwiPlxuICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgPC9kaXY+XG48Y29tZXRjaGF0LWxpc3QgW3N0YXRlXT1cInN0YXRlXCJcbltzZWFyY2hJY29uVVJMXT1cInNlYXJjaEljb25VUkxcIiAgW2hpZGVFcnJvcl09XCJoaWRlRXJyb3JcIlxuW2VtcHR5U3RhdGVUZXh0XT1cImVtcHR5U3RhdGVUZXh0XCIgW2xvYWRpbmdJY29uVVJMXT1cImxvYWRpbmdJY29uVVJMXCJcblt0aXRsZUFsaWdubWVudF09XCJ0aXRsZUFsaWdubWVudFwiIFtsb2FkaW5nVmlld109XCJsb2FkaW5nU3RhdGVWaWV3XCIgW2xpc3RTdHlsZV09XCJsaXN0U3R5bGVcIiBbZW1wdHlTdGF0ZVZpZXddPVwiZW1wdHlTdGF0ZVZpZXdcIlxuW2Vycm9yU3RhdGVUZXh0XT1cImVycm9yU3RhdGVUZXh0XCIgW2Vycm9yVmlld109XCJlcnJvclN0YXRlVmlld1wiXG5bb25TY3JvbGxlZFRvQm90dG9tXT1cImdldENvbnZlcnNhdGlvblwiIFtsaXN0XT1cImNvbnZlcnNhdGlvbkxpc3RcIiAgW2xpc3RJdGVtVmlld109XCJsaXN0SXRlbVZpZXcgPyBsaXN0SXRlbVZpZXcgOiBsaXN0SXRlbVwiIFt0aXRsZV09XCJ0aXRsZVwiICBbaGlkZVNlYXJjaF09XCJoaWRlU2VhcmNoXCI+PC9jb21ldGNoYXQtbGlzdD5cbjwvZGl2PlxuPG5nLXRlbXBsYXRlICNsaXN0SXRlbSBsZXQtY29udmVyc2F0aW9uPlxuICA8Y29tZXRjaGF0LWxpc3QtaXRlbSBbaGlkZVNlcGFyYXRvcl09XCJoaWRlU2VwYXJhdG9yXCIgW2F2YXRhclN0eWxlXT1cImF2YXRhclN0eWxlXCIgW3N0YXR1c0luZGljYXRvclN0eWxlXT1cInNldFN0YXR1c0luZGljYXRvclN0eWxlKGNvbnZlcnNhdGlvbilcIlxuICBbaWRdPVwiY29udmVyc2F0aW9uPy5jb252ZXJzYXRpb25JZFwiIFtpc0FjdGl2ZV09XCJnZXRBY3RpdmVDb252ZXJzYXRpb24oY29udmVyc2F0aW9uKVwiXG4gIChjYy1saXN0aXRlbS1jbGlja2VkKT1cIm9uQ2xpY2soY29udmVyc2F0aW9uKVwiIFt0aXRsZV09XCJjb252ZXJzYXRpb24/LmNvbnZlcnNhdGlvbldpdGg/Lm5hbWVcIlxuICBbc3RhdHVzSW5kaWNhdG9ySWNvbl09XCJjaGVja0dyb3VwVHlwZShjb252ZXJzYXRpb24pXCIgW3N0YXR1c0luZGljYXRvckNvbG9yXT1cImNoZWNrU3RhdHVzVHlwZShjb252ZXJzYXRpb24pXCJcbiAgW2xpc3RJdGVtU3R5bGVdPVwibGlzdEl0ZW1TdHlsZVwiIFthdmF0YXJVUkxdPVwiY29udmVyc2F0aW9uPy5jb252ZXJzYXRpb25XaXRoPy5hdmF0YXJcIiBbYXZhdGFyTmFtZV09XCJjb252ZXJzYXRpb24/LmNvbnZlcnNhdGlvbldpdGg/Lm5hbWVcIj5cbiAgICA8ZGl2IHNsb3Q9XCJzdWJ0aXRsZVZpZXdcIiAqbmdJZj1cInN1YnRpdGxlVmlldztlbHNlIGNvbnZlcnNhdGlvblN1YnRpdGxlXCI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwic3VidGl0bGVWaWV3XCI+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgPC9kaXY+XG4gIDxuZy10ZW1wbGF0ZSAjY29udmVyc2F0aW9uU3VidGl0bGU+XG5cbiAgPGRpdiBjbGFzcz1cImNjLWNvbnZlcnNhdGlvbnNfX3N1YnRpdGxlLXZpZXcgXCIgc2xvdD1cInN1YnRpdGxlVmlld1wiID5cbiAgICA8ZGl2IGNsYXNzPVwiY2MtY29udmVyc2F0aW9uc19fdGhyZWFkdmlld1wiICpuZ0lmPVwiY29udmVyc2F0aW9uPy5sYXN0TWVzc2FnZT8ucGFyZW50TWVzc2FnZUlkXCI+XG4gICAgICA8Y29tZXRjaGF0LWxhYmVsIFtsYWJlbFN0eWxlXT1cIml0ZW1UaHJlYWRJbmRpY2F0b3JTdHlsZSgpXCIgW3RleHRdPVwidGhyZWFkSW5kaWNhdG9yVGV4dFwiPiA8L2NvbWV0Y2hhdC1sYWJlbD5cbiAgICAgIDxjb21ldGNoYXQtaWNvbiBbVVJMXT1cInRocmVhZEljb25VUkxcIiBbaWNvblN0eWxlXT1cImljb25TdHlsZVwiPjwvY29tZXRjaGF0LWljb24+XG5cbiAgICA8L2Rpdj5cbjxkaXYgY2xhc3M9XCJjYy1jb252ZXJzYXRpb25zX19zdWJ0aXRsZVwiPlxuICA8ZGl2IGNsYXNzPVwiY2MtY29udmVyc2F0aW9uc19fcmVhZHJlY2VpcHRcIiAqbmdJZj1cImlzUmVjZWlwdERpc2FibGUoY29udmVyc2F0aW9uKVwiPlxuICAgIDxjb21ldGNoYXQtcmVjZWlwdCAgW3JlY2VpcHRdPVwiZ2V0TWVzc2FnZVJlY2VpcHQoY29udmVyc2F0aW9uKVwiIFtyZWNlaXB0U3R5bGVdPVwicmVjZWlwdFN0eWxlXCIgW3NlbnRJY29uXT1cInNlbnRJY29uXCIgW2Vycm9ySWNvbl09XCJlcnJvckljb25cIiBbZGVsaXZlcmVkSWNvbl09XCJkZWxpdmVyZWRJY29uXCIgW3JlYWRJY29uXT1cInJlYWRJY29uXCI+PC9jb21ldGNoYXQtcmVjZWlwdD5cbiAgPC9kaXY+XG5cbiAgPGRpdiBbbmdTdHlsZV09XCJzdWJ0aXRsZVN0eWxlKGNvbnZlcnNhdGlvbilcIiBjbGFzcz1cImNjLXN1YnRpdGxlX190ZXh0XCI+IHt7c2V0U3VidGl0bGUoY29udmVyc2F0aW9uKX19IDwvZGl2PlxuPC9kaXY+XG5cbiAgPC9kaXY+XG4gIDwvbmctdGVtcGxhdGU+XG4gIDxkaXYgc2xvdD1cIm1lbnVWaWV3XCIgY2xhc3M9XCJjYy1jb252ZXJzYXRpb25zX19vcHRpb25zdmlld1wiICpuZ0lmPVwic2VsZWN0aW9uTW9kZSA9PSBzZWxlY3Rpb25tb2RlRW51bS5ub25lXCI+XG4gICAgPGRpdiAqbmdJZj1cIm9wdGlvbnNcIj5cbiAgICAgIDxjb21ldGNoYXQtbWVudS1saXN0IFtkYXRhXT1cIm9wdGlvbnMoY29udmVyc2F0aW9uKVwiIChjYy1tZW51LWNsaWNrZWQpPVwib25PcHRpb25DbGljaygkZXZlbnQsY29udmVyc2F0aW9uKVwiIFttZW51TGlzdFN0eWxlXT1cIm1lbnVzdHlsZVwiPlxuXG4gICAgICA8L2NvbWV0Y2hhdC1tZW51LWxpc3Q+XG4gICAgPC9kaXY+XG4gICAgPGRpdiAqbmdJZj1cIiFvcHRpb25zICYmIGNvbnZlcnNhdGlvbk9wdGlvbnNcIj5cbiAgICAgIDxjb21ldGNoYXQtbWVudS1saXN0IFtkYXRhXT1cImNvbnZlcnNhdGlvbk9wdGlvbnNcIiAoY2MtbWVudS1jbGlja2VkKT1cIm9uT3B0aW9uQ2xpY2soJGV2ZW50LGNvbnZlcnNhdGlvbilcIiBbbWVudUxpc3RTdHlsZV09XCJtZW51c3R5bGVcIj5cblxuICAgICAgPC9jb21ldGNoYXQtbWVudS1saXN0PlxuICAgIDwvZGl2PlxuPC9kaXY+XG48ZGl2IHNsb3Q9XCJ0YWlsVmlld1wiICBjbGFzcz1cImNjLWNvbnZlcnNhdGlvbnNfX3RhaWwtdmlld1wiPlxuPGRpdiBjbGFzcz1cInRhaWxfX3ZpZXdcIiAqbmdJZj1cInNlbGVjdGlvbk1vZGUgPT0gc2VsZWN0aW9ubW9kZUVudW0ubm9uZVwiPlxuICA8ZGl2IGNsYXNzPVwiY2MtZGF0ZVwiPlxuICAgIDxjb21ldGNoYXQtZGF0ZSBbZGF0ZVN0eWxlXT1cImRhdGVTdHlsZVwiIFt0aW1lc3RhbXBdPVwiY29udmVyc2F0aW9uPy5sYXN0TWVzc2FnZT8uc2VudEF0XCIgW3BhdHRlcm5dPVwiZ2V0RGF0ZSgpXCI+PC9jb21ldGNoYXQtZGF0ZT5cbiAgPC9kaXY+XG4gIDxkaXYgY2xhc3M9XCJjYy1jb252ZXJzYXRpb25zX19iYWRnZVwiPlxuICAgICA8Y29tZXRjaGF0LWJhZGdlIFtjb3VudF09XCJjb252ZXJzYXRpb24/LnVucmVhZE1lc3NhZ2VDb3VudFwiIFtiYWRnZVN0eWxlXT1cImJhZGdlU3R5bGVcIj48L2NvbWV0Y2hhdC1iYWRnZT5cbiAgPC9kaXY+XG48L2Rpdj5cbjxkaXYgY2xhc3M9XCJjYy1jb252ZXJzYXRpb25zX19zZWxlY3Rpb24tdmlld1wiICpuZ0lmPVwic2VsZWN0aW9uTW9kZSAhPSBzZWxlY3Rpb25tb2RlRW51bS5ub25lXCI+XG4gIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ0YWlsVmlld1wiPlxuICA8L25nLWNvbnRhaW5lcj5cbjwvZGl2PlxuPC9kaXY+XG4gIDwvY29tZXRjaGF0LWxpc3QtaXRlbT5cbiAgPG5nLXRlbXBsYXRlICN0YWlsVmlldz5cbiAgICA8ZGl2ICAqbmdJZj1cInNlbGVjdGlvbk1vZGUgPT0gc2VsZWN0aW9ubW9kZUVudW0uc2luZ2xlXCI+XG4gICAgICA8Y29tZXRjaGF0LXJhZGlvLWJ1dHRvbiAoY2MtcmFkaW8tYnV0dG9uLWNoYW5nZWQpPVwib25TZWxlY3QgPyBvblNlbGVjdChjb252ZXJzYXRpb24pIDogbnVsbFwiPjwvY29tZXRjaGF0LXJhZGlvLWJ1dHRvbj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2ICAqbmdJZj1cInNlbGVjdGlvbk1vZGUgPT0gc2VsZWN0aW9ubW9kZUVudW0ubXVsdGlwbGVcIj5cbiAgICAgIDxjb21ldGNoYXQtY2hlY2tib3ggKGNjLWNoZWNrYm94LWNoYW5nZWQpPVwib25TZWxlY3QgPyBvblNlbGVjdChjb252ZXJzYXRpb24pIDogbnVsbFwiPjwvY29tZXRjaGF0LWNoZWNrYm94PlxuICAgIDwvZGl2PlxuICA8L25nLXRlbXBsYXRlPlxuPC9uZy10ZW1wbGF0ZT5cblxuXG4iXX0=
|
|
1461
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tZXRjaGF0LWNvbnZlcnNhdGlvbnMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2hhdC11aWtpdC1hbmd1bGFyL3NyYy9Db21ldENoYXRDb252ZXJzYXRpb25zL2NvbWV0Y2hhdC1jb252ZXJzYXRpb25zL2NvbWV0Y2hhdC1jb252ZXJzYXRpb25zLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NoYXQtdWlraXQtYW5ndWxhci9zcmMvQ29tZXRDaGF0Q29udmVyc2F0aW9ucy9jb21ldGNoYXQtY29udmVyc2F0aW9ucy9jb21ldGNoYXQtY29udmVyc2F0aW9ucy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsdUJBQXVCLEVBRXZCLFNBQVMsRUFDVCxLQUFLLEdBT04sTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBRTNELE9BQU8sRUFBQyxpQkFBaUIsRUFBRyxtQkFBbUIsRUFBRSxxQkFBcUIsRUFBQyxxQkFBcUIsRUFBYSxrQkFBa0IsRUFBRSxTQUFTLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN4SyxPQUFPLEVBQUMsVUFBVSxFQUFFLFFBQVEsRUFBa0Isb0JBQW9CLEVBQUUsdUJBQXVCLEVBQStCLGFBQWEsRUFBZ0UsbUJBQW1CLEVBQUUsc0JBQXNCLEVBQUUsMkJBQTJCLEVBQUMsWUFBWSxFQUFFLG1CQUFtQixFQUFDLGFBQWEsRUFBQyxNQUFNLEVBQUUsY0FBYyxHQUFFLE1BQU0sNEJBQTRCLENBQUE7QUFDMVgsT0FBTywyQkFBMkIsQ0FBQTtBQUNsQyxPQUFRLEVBQUUsV0FBVyxFQUFFLGFBQWEsRUFBQyxrQkFBa0IsRUFBQyxZQUFZLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBZ0IsTUFBTSwyQkFBMkIsQ0FBQTtBQUU1SSxPQUFPLEVBQUUs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cEIsS0FBSztnQkFDRyxJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csYUFBYTtzQkFBckIsS0FBSztnQkFDRyxpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLO2dCQUNHLHVCQUF1QjtzQkFBL0IsS0FBSztnQkFDRyxrQkFBa0I7c0JBQTFCLEtBQUs7Z0JBQ0csaUJBQWlCO3NCQUF6QixLQUFLO2dCQUNHLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFDRyxvQkFBb0I7c0JBQTVCLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyw2QkFBNkI7c0JBQXJDLEtBQUs7Z0JBZ0JHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBTUcsVUFBVTtzQkFBbEIsS0FBSztnQkFRRyxTQUFTO3NCQUFqQixLQUFLO2dCQUlHLGtCQUFrQjtzQkFBMUIsS0FBSztnQkFNRyxhQUFhO3NCQUFyQixLQUFLO2dCQUtHLG9CQUFvQjtzQkFBNUIsS0FBSztnQkFLRyxtQkFBbUI7c0JBQTNCLEtBQUs7Z0JBQ0csbUJBQW1CO3NCQUEzQixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFrR0csWUFBWTtzQkFBcEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBJbnB1dCxcbiAgTmdab25lLFxuICBPbkNoYW5nZXMsXG4gIE9uSW5pdCxcbiAgU2ltcGxlQ2hhbmdlcyxcbiAgVGVtcGxhdGVSZWYsXG4gIFZpZXdDaGlsZCxcbn0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IENvbWV0Q2hhdCB9IGZyb20gXCJAY29tZXRjaGF0L2NoYXQtc2RrLWphdmFzY3JpcHRcIjtcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gXCJyeGpzXCI7XG5pbXBvcnQge0NvbnZlcnNhdGlvblV0aWxzICwgTWVzc2FnZVJlY2VpcHRVdGlscywgQ29tZXRDaGF0U291bmRNYW5hZ2VyLENvbWV0Q2hhdFVJS2l0VXRpbGl0eSwgQmFzZVN0eWxlLCBDb252ZXJzYXRpb25zU3R5bGUsIExpc3RTdHlsZSB9IGZyb20gXCJAY29tZXRjaGF0L3Vpa2l0LXNoYXJlZFwiO1xuaW1wb3J0IHtmb250SGVscGVyLCBsb2NhbGl6ZSxDb21ldENoYXRPcHRpb24sIENvbWV0Q2hhdEdyb3VwRXZlbnRzLCBDb21ldENoYXRVSUtpdENvbnN0YW50cyxJR3JvdXBMZWZ0LCBJR3JvdXBNZW1iZXJBZGRlZCxNZXNzYWdlU3RhdHVzLCBJR3JvdXBNZW1iZXJLaWNrZWRCYW5uZWQsIElHcm91cE1lbWJlclNjb3BlQ2hhbmdlZCxJTWVzc2FnZXMsIENvbWV0Q2hhdFVzZXJFdmVudHMsIENvbWV0Q2hhdE1lc3NhZ2VFdmVudHMsIENvbWV0Q2hhdENvbnZlcnNhdGlvbkV2ZW50cyxEYXRlUGF0dGVybnMsIENvbWV0Q2hhdENhbGxFdmVudHMsU2VsZWN0aW9uTW9kZSxTdGF0ZXMsIFRpdGxlQWxpZ25tZW50LH0gZnJvbSAnQGNvbWV0Y2hhdC91aWtpdC1yZXNvdXJjZXMnXG5pbXBvcnQgJ0Bjb21ldGNoYXQvdWlraXQtZWxlbWVudHMnXG5pbXBvcnQgIHsgQXZhdGFyU3R5bGUsIExpc3RJdGVtU3R5bGUsQ29uZmlybURpYWxvZ1N0eWxlLFJlY2VpcHRTdHlsZSwgRGF0ZVN0eWxlLCBCYWRnZVN0eWxlLCBCYWNrZHJvcFN0eWxlfSBmcm9tICdAY29tZXRjaGF0L3Vpa2l0LWVsZW1lbnRzJ1xuaW1wb3J0IHsgQ29tZXRDaGF0VGhlbWVTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL0NvbWV0Q2hhdFRoZW1lLnNlcnZpY2VcIjtcbmltcG9ydCB7IENoYXRDb25maWd1cmF0b3IgfSBmcm9tIFwiLi4vLi4vU2hhcmVkL0ZyYW1ld29yay9DaGF0Q29uZmlndXJhdG9yXCI7XG5pbXBvcnQgeyBDb21ldENoYXRFeGNlcHRpb24gfSBmcm9tIFwiLi4vLi4vU2hhcmVkL1V0aWxzL0NvbWVDaGF0RXhjZXB0aW9uXCI7XG4vKipcbipcbiogQ29tZXRDaGF0Q29udmVyc2F0aW9uIGlzIGEgd3JhcHBlciBjb21wb25lbnQgY29uc2lzdHMgb2YgQ29tZXRDaGF0TGlzdEJhc2VDb21wb25lbnQgYW5kIENvbnZlcnNhdGlvbkxpc3RDb21wb25lbnQuXG4qXG4qIEB2ZXJzaW9uIDEuMC4wXG4qIEBhdXRob3IgQ29tZXRDaGF0VGVhbVxuKiBAY29weXJpZ2h0IMKpIDIwMjIgQ29tZXRDaGF0IEluYy5cbipcbiovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6IFwiY29tZXRjaGF0LWNvbnZlcnNhdGlvbnNcIixcbiAgdGVtcGxhdGVVcmw6IFwiLi9jb21ldGNoYXQtY29udmVyc2F0aW9ucy5jb21wb25lbnQuaHRtbFwiLFxuICBzdHlsZVVybHM6IFtcIi4vY29tZXRjaGF0LWNvbnZlcnNhdGlvbnMuY29tcG9uZW50LnNjc3NcIl0sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBDb21ldENoYXRDb252ZXJzYXRpb25zQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMge1xuICAvKipcbiogVGhpcyBwcm9wZXJ0aWVzIHdpbGwgY29tZSBmcm9tIFBhcmVudC5cbiovXG4gIEBJbnB1dCgpIHN1YnRpdGxlVmlldyE6IFRlbXBsYXRlUmVmPGFueT47XG4gIEBJbnB1dCgpIHRpdGxlOiBzdHJpbmcgPSBsb2NhbGl6ZShcIkNIQVRTXCIpOyAvL1RpdGxlIG9mIHRoZSBjb21wb25lbnRcbiAgQElucHV0KCkgICBvcHRpb25zITogKChtZW1iZXI6Q29tZXRDaGF0LkNvbnZlcnNhdGlvbik9PkNvbWV0Q2hhdE9wdGlvbltdKSB8IG51bGw7XG4gIEBJbnB1dCgpIHNlYXJjaFBsYWNlSG9sZGVyOiBzdHJpbmcgPSBsb2NhbGl6ZShcIlNFQVJDSFwiKTsgLy8gcGxhY2Vob2xkZXIgdGV4dCBvZiBzZWFyY2ggaW5wdXRcbiAgQElucHV0KCkgZGlzYWJsZVVzZXJzUHJlc2VuY2U6IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgZGlzYWJsZVJlY2VpcHQ6IGJvb2xlYW4gPSB0cnVlO1xuICBASW5wdXQoKSBkaXNhYmxlVHlwaW5nOmJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgZGVsaXZlcmVkSWNvbjpzdHJpbmcgPSBcImFzc2V0cy9tZXNzYWdlLWRlbGl2ZXJlZC5zdmdcIlxuICBASW5wdXQoKSByZWFkSWNvbjpzdHJpbmcgPSBcImFzc2V0cy9tZXNzYWdlLXJlYWQuc3ZnXCI7XG4gIEBJbnB1dCgpIGVycm9ySWNvbjpzdHJpbmcgPSBcImFzc2V0cy93YXJuaW5nLXNtYWxsLnN2Z1wiO1xuICBASW5wdXQoKSBkYXRlUGF0dGVybjpEYXRlUGF0dGVybnMgPSBEYXRlUGF0dGVybnMuRGF5RGF0ZVRpbWU7XG4gIEBJbnB1dCgpIG9uRXJyb3I6KGVycm9yOkNvbWV0Q2hhdC5Db21ldENoYXRFeGNlcHRpb24pPT52b2lkID0gKGVycm9yOkNvbWV0Q2hhdC5Db21ldENoYXRFeGNlcHRpb24pPT57XG4gICAgY29uc29sZS5sb2coZXJyb3IpXG4gIH1cbiAgQElucHV0KCkgc2VudEljb246c3RyaW5nID0gXCJhc3NldHMvbWVzc2FnZS1zZW50LnN2Z1wiO1xuICBASW5wdXQoKSBwcml2YXRlR3JvdXBJY29uOnN0cmluZyA9XCJhc3NldHMvUHJpdmF0ZS5zdmdcIjtcbiAgQElucHV0KCkgcHJvdGVjdGVkR3JvdXBJY29uOnN0cmluZyA9IFwiYXNzZXRzL0xvY2tlZC5zdmdcIjtcbiAgQElucHV0KCkgY3VzdG9tU291bmRGb3JNZXNzYWdlczpzdHJpbmcgPSBcIlwiO1xuICBASW5wdXQoKSBhY3RpdmVDb252ZXJzYXRpb246IENvbWV0Q2hhdC5Db252ZXJzYXRpb24gfCBudWxsID0gbnVsbDsgLy9zZWxlY3RlZCBjb252ZXJzYXRpb25cbiAgQElucHV0KCkgc2VhcmNoSWNvblVSTDogc3RyaW5nID0gXCJhc3NldHMvc2VhcmNoLnN2Z1wiOyAvL2ltYWdlIFVSTCBvZiB0aGUgc2VhcmNoIGljb25cbiAgQElucHV0KCkgaGlkZVNlYXJjaDogYm9vbGVhbiA9IHRydWU7IC8vc3dpdGNoIG9uL2ZmIHNlYXJjaCBpbnB1dFxuICBASW5wdXQoKSBjb252ZXJzYXRpb25zUmVxdWVzdEJ1aWxkZXIhOiBDb21ldENoYXQuQ29udmVyc2F0aW9uc1JlcXVlc3RCdWlsZGVyO1xuICBASW5wdXQoKSBlbXB0eVN0YXRlVmlldyE6IFRlbXBsYXRlUmVmPGFueT47XG4gIEBJbnB1dCgpIG9uU2VsZWN0ITogKGNvbnZlcnNhdGlvbjpDb21ldENoYXQuQ29udmVyc2F0aW9uLHNlbGVjdGVkOmJvb2xlYW4pPT52b2lkO1xuICBASW5wdXQoKSBsb2FkaW5nSWNvblVSTDpzdHJpbmcgPSBcImFzc2V0cy9TcGlubmVyLnN2Z1wiXG4gIEBJbnB1dCgpIGVycm9yU3RhdGVWaWV3ITogVGVtcGxhdGVSZWY8YW55PjtcbiAgQElucHV0KCkgbG9hZGluZ1N0YXRlVmlldyE6IFRlbXBsYXRlUmVmPGFueT47XG4gIEBJbnB1dCgpIGVtcHR5U3RhdGVUZXh0OiBzdHJpbmcgPSBsb2NhbGl6ZShcIk5PX0NIQVRTX0ZPVU5EXCIpXG4gIEBJbnB1dCgpIGVycm9yU3RhdGVUZXh0OiBzdHJpbmcgPSBsb2NhbGl6ZShcIlNPTUVUSElOR19XUk9OR1wiKTtcbiAgQElucHV0KCkgdGl0bGVBbGlnbm1lbnQ6IFRpdGxlQWxpZ25tZW50ID0gVGl0bGVBbGlnbm1lbnQubGVmdDtcblxuICBASW5wdXQoKSBsaXN0SXRlbVZpZXchOiBUZW1wbGF0ZVJlZjxhbnk+O1xuICBASW5wdXQoKSBtZW51ITogVGVtcGxhdGVSZWY8YW55PjtcbiAgQElucHV0KCkgaGlkZVNlcGFyYXRvcjogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSBzZWFyY2hQbGFjZWhvbGRlcjogc3RyaW5nID0gbG9jYWxpemUoXCJTRUFSQ0hcIik7XG4gIEBJbnB1dCgpIGhpZGVFcnJvcjogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSBzZWxlY3Rpb25Nb2RlOiBTZWxlY3Rpb25Nb2RlID0gU2VsZWN0aW9uTW9kZS5ub25lO1xuICBASW5wdXQoKSBkaXNhYmxlU291bmRGb3JNZXNzYWdlczpib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIGNvbmZpcm1EaWFsb2dUaXRsZSA9IGxvY2FsaXplKFwiREVMRVRFX0NPTlZFUlNBVElPTlwiKVxuICBASW5wdXQoKSBjb25maXJtQnV0dG9uVGV4dDogc3RyaW5nID0gbG9jYWxpemUoXCJERUxFVEVcIik7XG4gIEBJbnB1dCgpIGNhbmNlbEJ1dHRvblRleHQ6IHN0cmluZyA9IGxvY2FsaXplKFwiQ0FOQ0VMXCIpO1xuICBASW5wdXQoKSBjb25maXJtRGlhbG9nTWVzc2FnZTogc3RyaW5nID0gbG9jYWxpemUoXCJXT1VMRF9fWU9VX0xJS0VfVE9fREVMRVRFX1RISVNfQ09OVkVSU0FUSU9OXCIpO1xuICBASW5wdXQoKSBvbkl0ZW1DbGljayE6KGNvbnZlcnNhdGlvbjpDb21ldENoYXQuQ29udmVyc2F0aW9uKT0+dm9pZDtcbiAgQElucHV0KCkgZGVsZXRlQ29udmVyc2F0aW9uRGlhbG9nU3R5bGU6IENvbmZpcm1EaWFsb2dTdHlsZSA9IHtcbiAgICBjb25maXJtQnV0dG9uQmFja2dyb3VuZDogXCJcIixcbiAgICBjYW5jZWxCdXR0b25CYWNrZ3JvdW5kOiBcIlwiLFxuICAgIGNvbmZpcm1CdXR0b25UZXh0Q29sb3I6IFwiXCIsXG4gICAgY29uZmlybUJ1dHRvblRleHRGb250OiBcIlwiLFxuICAgIGNhbmNlbEJ1dHRvblRleHRDb2xvcjogXCJcIixcbiAgICBjYW5jZWxCdXR0b25UZXh0Rm9udDogXCJcIixcbiAgICB0aXRsZUZvbnQ6IFwiXCIsXG4gICAgdGl0bGVDb2xvcjogXCJcIixcbiAgICBtZXNzYWdlVGV4dEZvbnQ6IFwiXCIsXG4gICAgbWVzc2FnZVRleHRDb2xvcjogXCJcIixcbiAgICBiYWNrZ3JvdW5kOiBcIlwiLFxuICAgIGJvcmRlcjpcIjFweCBzb2xpZCAjZjJmMmYyXCIsXG4gICAgaGVpZ2h0OlwiMTAwJVwiLFxuICAgIHdpZHRoOlwiMTAwJVwiXG4gIH1cbiAgQElucHV0KCkgYmFja2Ryb3BTdHlsZSA6QmFja2Ryb3BTdHlsZSA9IHtcbiAgICBoZWlnaHQ6XCIxMDAlXCIsXG4gICAgd2lkdGg6XCIxMDAlXCIsXG4gICAgYmFja2dyb3VuZDpcInJnYmEoMCwgMCwgMCwgMC41KVwiLFxuICAgIHBvc2l0aW9uOlwiZml4ZWRcIlxuICB9XG4gIEBJbnB1dCgpIGJhZGdlU3R5bGU6IEJhZGdlU3R5bGUgPSB7XG4gICAgd2lkdGg6IFwiMjVweFwiLFxuICAgIGhlaWdodDogXCIxNXB4XCIsXG4gICAgYmFja2dyb3VuZDogXCIjNWFhZWZmXCIsXG4gICAgdGV4dENvbG9yOiBcIndoaXRlXCIsXG4gICAgdGV4dEZvbnQ6IFwiNDAwIDEzcHggSW50ZXIsIHNhbnMtc2VyaWZcIixcbiAgICBib3JkZXJSYWRpdXM6XCIxNnB4XCJcbiAgfVxuICBASW5wdXQoKSBkYXRlU3R5bGU6IERhdGVTdHlsZSA9IHtcbiAgICB0ZXh0Rm9udDogXCI0MDAgMTFweCBJbnRlciwgc2Fucy1zZXJpZlwiLFxuICAgIHRleHRDb2xvcjogXCJyZ2JhKDIwLCAyMCwgMjAsIDAuNTgpXCIsXG4gIH1cbiAgQElucHV0KCkgY29udmVyc2F0aW9uc1N0eWxlOiBDb252ZXJzYXRpb25zU3R5bGUgPSB7XG4gICAgd2lkdGg6XCJcIixcbiAgICBoZWlnaHQ6XCJcIixcbiAgICBib3JkZXI6XCJcIixcbiAgICBib3JkZXJSYWRpdXM6XCJcIixcbiAgfVxuICBASW5wdXQoKSBsaXN0SXRlbVN0eWxlOiBMaXN0SXRlbVN0eWxlID0ge1xuICAgIGhlaWdodDogXCIxMDAlXCIsXG4gICAgd2lkdGg6IFwiMTAwJVwiLFxuXG4gIH07XG4gIEBJbnB1dCgpIHN0YXR1c0luZGljYXRvclN0eWxlOiBhbnkgPSB7XG4gICAgaGVpZ2h0OiBcIjEwcHhcIixcbiAgICB3aWR0aDogXCIxMHB4XCIsXG4gICAgYm9yZGVyUmFkaXVzOiBcIjE2cHhcIlxuICB9O1xuICBASW5wdXQoKSB0eXBpbmdJbmRpY2F0b3JUZXh0OnN0cmluZyA9IGxvY2FsaXplKFwiSVNfVFlQSU5HXCIpO1xuICBASW5wdXQoKSB0aHJlYWRJbmRpY2F0b3JUZXh0OnN0cmluZyA9IGxvY2FsaXplKFwiSU5fQV9USFJFQURcIik7XG4gIEBJbnB1dCgpIGF2YXRhclN0eWxlOiBBdmF0YXJTdHlsZSA9IHt9O1xuICBASW5wdXQoKSByZWNlaXB0U3R5bGU6UmVjZWlwdFN0eWxlID0ge31cbiAgY2NHcm91cE1lbWJlckFkZGVkITpTdWJzY3JpcHRpb247XG4gIGNjR3JvdXBNZW1iZXJKb2luZWQhOlN1YnNjcmlwdGlvbjtcbiAgY2NHcm91cE1lbWJlcktpY2tlZCE6U3Vic2NyaXB0aW9uO1xuICBjY0dyb3VwTWVtYmVyQmFubmVkITpTdWJzY3JpcHRpb247XG4gIGNjR3JvdXBNZW1iZXJTY29wZUNoYW5nZWQhOlN1YnNjcmlwdGlvbjtcbiAgY2NPd25lcnNoaXBDaGFuZ2VkITpTdWJzY3JpcHRpb247XG4gICBjY01lc3NhZ2VFZGl0ITogU3Vic2NyaXB0aW9uO1xuICAgY2NNZXNzYWdlU2VudCE6IFN1YnNjcmlwdGlvbjtcbiAgIGNjTWVzc2FnZUVkaXRlZCE6IFN1YnNjcmlwdGlvbjtcbiAgIGNjTWVzc2FnZURlbGV0ZSE6IFN1YnNjcmlwdGlvbjtcbiAgIGNjR3JvdXBEZWxldGVkITogU3Vic2NyaXB0aW9uO1xuICAgY2NHcm91cExlZnQhOiBTdWJzY3JpcHRpb247XG4gICBjY1VzZXJCbG9ja2VkITogU3Vic2NyaXB0aW9uO1xuICAgY2NNZXNzYWdlUmVhZCE6IFN1YnNjcmlwdGlvbjtcbiAgIHB1YmxpYyBjY091dGdvaW5nQ2FsbCE6IFN1YnNjcmlwdGlvbjtcbiAgIHB1YmxpYyBjY0NhbGxSZWplY3RlZCE6IFN1YnNjcmlwdGlvbjtcbiAgIHB1YmxpYyBjY0NhbGxFbmRlZCE6IFN1YnNjcmlwdGlvbjtcbiAgIHB1YmxpYyBjY0NhbGxBY2NlcHRlZCE6U3Vic2NyaXB0aW9uO1xuICBpY29uU3R5bGU6YW55ID0ge1xuICAgIGljb25UaW50OlwibGlnaHRncmV5XCIsXG4gICAgaGVpZ2h0OlwiMjBweFwiLFxuICAgIHdpZHRoOlwiMjBweFwiXG4gIH1cbiAgbGlzdFN0eWxlOkxpc3RTdHlsZSA9IG5ldyBMaXN0U3R5bGUoe30pXG4gIG1lbnVzdHlsZSA9IHtcbiAgICB3aWR0aDogXCJcIixcbiAgICBoZWlnaHQ6IFwiXCIsXG4gICAgYm9yZGVyOiBcIm5vbmVcIixcbiAgICBib3JkZXJSYWRpdXM6IFwiOHB4XCIsXG4gICAgYmFja2dyb3VuZDogXCJ0cmFuc3BhcmVudFwiLFxuICAgIHRleHRGb250OiBcIlwiLFxuICAgIHRleHRDb2xvcjogXCJibGFja1wiLFxuICAgIGljb25UaW50OiBcImdyZXlcIixcbiAgICBpY29uQmFja2dyb3VuZDogXCJ0cmFuc3BhcmVudFwiLFxuICAgIGljb25Cb3JkZXI6IFwibm9uZVwiLFxuICAgIGljb25Cb3JkZXJSYWRpdXM6IFwiMFwiLFxuICAgIHN1Ym1lbnVXaWR0aDogXCI3MHB4XCIsXG4gICAgc3VibWVudUhlaWdodDogXCIyMHB4XCIsXG4gICAgc3VibWVudUJvcmRlcjogXCIxcHggc29saWQgI2U4ZThlOFwiLFxuICAgIHN1Ym1lbnVCb3JkZXJSYWRpdXM6IFwiOHB4XCIsXG4gICAgc3VibWVudUJhY2tncm91bmQ6IFwid2hpdGVcIixcbiAgfVxuICBwdWJsaWMgdHlwaW5nSW5kaWNhdG9yITpDb21ldENoYXQuVHlwaW5nSW5kaWNhdG9yIHwgbnVsbFxuICBwdWJsaWMgdHlwaW5nTGlzdGVuZXJJZDogc3RyaW5nID0gXCJjb252ZXJzYXRpb25fX0xJU1RFTkVSXCIgKyBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcbiAgcHVibGljIGNhbGxMaXN0ZW5lcklkID0gXCJjYWxsX1wiKyBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcbiAgcHVibGljIGNvbm5lY3Rpb25MaXN0ZW5lcklkID0gXCJjb25uZWN0aW9uX1wiKyBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcbiAgc2VsZWN0aW9ubW9kZUVudW06IHR5cGVvZiBTZWxlY3Rpb25Nb2RlID0gU2VsZWN0aW9uTW9kZTtcbiAgcHVibGljIGlzRGlhbG9nT3BlbjogYm9vbGVhbiA9IGZhbHNlO1xuICBwdWJsaWMgaXNFbXB0eTogYm9vbGVhbiA9IGZhbHNlO1xuICBwdWJsaWMgaXNMb2FkaW5nOiBib29sZWFuID0gdHJ1ZTtcbiAgcHVibGljIHN0YXRlOiBTdGF0ZXMgPSBTdGF0ZXMubG9hZGluZztcbiAgcHVibGljIHN0YXR1c0NvbG9yOiBhbnkgPSB7XG4gICAgb25saW5lOiBcIlwiLFxuICAgIHByaXZhdGU6IFwiXCIsXG4gICAgcGFzc3dvcmQ6IFwiI0Y3QTUwMFwiLFxuICAgIHB1YmxpYzogXCJcIlxuICB9XG4gIHB1YmxpYyBsaW1pdDpudW1iZXIgPSAzMDtcbiAgcHVibGljIGlzRXJyb3I6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHVibGljIGNvbnZlcnNhdGlvbkxpc3Q6IENvbWV0Q2hhdC5Db252ZXJzYXRpb25bXSA9IFtdO1xuICBwdWJsaWMgc2Nyb2xsZWRUb0JvdHRvbTogYm9vbGVhbiA9IGZhbHNlO1xuICBwdWJsaWMgY2hlY2tJdGVtQ2hhbmdlOiBib29sZWFuID0gZmFsc2U7XG4gIGNvbnZlcnNhdGlvbk9wdGlvbnMhOkNvbWV0Q2hhdE9wdGlvbltdO1xuICBwdWJsaWMgc2hvd0NvbmZpcm1EaWFsb2c6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHVibGljIGNvbnZlcnNhdGlvblRvQmVEZWxldGVkOiBDb21ldENoYXQuQ29udmVyc2F0aW9uIHwgbnVsbCA9IG51bGw7XG4gIHB1YmxpYyBjb252ZXJzYXRpb25MaXN0ZW5lcklkOiBzdHJpbmcgPSBcImNoYXRsaXN0X1wiICsgbmV3IERhdGUoKS5nZXRUaW1lKCk7XG4gIHB1YmxpYyB1c2VyTGlzdGVuZXJJZDogc3RyaW5nID0gXCJjaGF0bGlzdF91c2VyX1wiICsgbmV3IERhdGUoKS5nZXRUaW1lKCk7XG4gIHB1YmxpYyBncm91cExpc3RlbmVySWQ6IHN0cmluZyA9IFwiY2hhdGxpc3RfZ3JvdXBfXCIgKyBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcbiAgcHVibGljIGdyb3VwVG9VcGRhdGU6IENvbWV0Q2hhdC5Hcm91cCB8IHt9ID0ge307XG4gIGVuYWJsZVBvbGxzOmJvb2xlYW4gPSBmYWxzZTtcbiAgZW5hYmxlU3RpY2tlcnM6Ym9vbGVhbiA9IGZhbHNlO1xuICBlbmFibGVXaGl0ZWJvYXJkOmJvb2xlYW4gPSBmYWxzZVxuICBlbmFibGVEb2N1bWVudDpib29sZWFuID0gZmFsc2VcbiAgdGhyZWFkSWNvblVSTDpzdHJpbmcgPSBcImFzc2V0cy90aHJlYWQtYXJyb3cuc3ZnXCJcbiAgcHVibGljIGNvbmZpcm1EaWFsb2dTdHlsZTogQ29uZmlybURpYWxvZ1N0eWxlID0ge1xuICAgIGhlaWdodDogXCIxMDAlXCIsXG4gICAgd2lkdGg6IFwiMTAwJVwiLFxuICAgIGJvcmRlclJhZGl1czogXCI4cHhcIlxuICB9XG4gIHN1YnRpdGxlVmFsdWUhOiBzdHJpbmc7XG4gIG1vZGFsU3R5bGU6QmFzZVN0eWxlID0ge1xuICAgIGhlaWdodDpcIjIzMHB4XCIsXG4gICAgd2lkdGg6XCIyNzBweFwiXG5cbiAgfVxuICBmaXJzdFJlbG9hZDpib29sZWFuID0gZmFsc2U7XG4gIGlzQWN0aXZlOiBib29sZWFuID0gdHJ1ZTtcbiAgY29udGFjdHNOb3RGb3VuZDogYm9vbGVhbiA9IGZhbHNlO1xuICBjaGF0U2VhcmNoITogYm9vbGVhbjtcbiAgcmVxdWVzdEJ1aWxkZXIhOkNvbWV0Q2hhdC5Db252ZXJzYXRpb25zUmVxdWVzdDtcbiAgLyoqXG4gICAgKiBQcm9wZXJ0aWVzIGZvciBpbnRlcm5hbCB1c2VcbiAgICAqL1xuICBwdWJsaWMgbG9jYWxpemUgPSBsb2NhbGl6ZTtcbiAgLyoqXG4qIFRoaXMgcHJvcGVydGllcyB3aWxsIGNvbWUgZnJvbSBQYXJlbnQuXG4qL1xuICBASW5wdXQoKSBsb2dnZWRJblVzZXIhOiBDb21ldENoYXQuVXNlciB8IG51bGw7XG4gIC8qKlxuICAqIFByb3BlcnRpZXMgZm9yIGludGVybmFsIHVzZVxuICAqL1xuICAvKipcbiAgICogcGFzc2luZyB0aGlzIGNhbGxiYWNrIHRvIG1lbnVMaXN0IGNvbXBvbmVudCBvbiBkZWxldGUgY2xpY2tcbiAgICogQHBhcmFtICB7Q29tZXRDaGF0LkNvbnZlcnNhdGlvbn0gY29udmVyc2F0aW9uXG4gICAqL1xuICBkZWxldGVDb252ZXJzYXRpb25PbkNsaWNrOiAoKCk9PnZvaWQpIHwgbnVsbCA9ICAoKT0+IHtcbiAgIHRoaXMuc2hvd0NvbmZpcm1hdGlvbkRpYWxvZyh0aGlzLmNvbnZlcnNhdGlvblRvQmVEZWxldGVkISlcbiAgfVxuICAvLyBjYWxsYmFjayBmb3IgY29uZmlybURpYWxvZ0NvbXBvbmVudFxuICBvbkNvbmZpcm1DbGljayA9ICgpID0+IHtcbiAgICAgIHRoaXMuZGVsZXRlU2VsZWN0ZWRDb252ZXJzYXRpb24oKTtcbiAgfVxuICBvbkNvbnZlcnNhdGlvblNlbGVjdGVkKGNvbnZlcnNhdGlvbjpDb21ldENoYXQuQ29udmVyc2F0aW9uLGV2ZW50OmFueSl7XG4gICAgbGV0IHNlbGVjdGVkOmJvb2xlYW4gPSBldmVudC5kZXRhaWwuY2hlY2tlZFxuICAgIGlmKHRoaXMub25TZWxlY3Qpe1xuICAgICAgdGhpcy5vblNlbGVjdChjb252ZXJzYXRpb24sc2VsZWN0ZWQpXG4gICAgfVxuICB9XG4gIHNldFN0YXR1c0luZGljYXRvclN0eWxlID0gKGNvbnZlcnNhdGlvbjogQ29tZXRDaGF0LkNvbnZlcnNhdGlvbikgPT4ge1xuICAgIGlmIChjb252ZXJzYXRpb24uZ2V0Q29udmVyc2F0aW9uVHlwZSgpID09IENvbWV0Q2hhdFVJS2l0Q29uc3RhbnRzLk1lc3NhZ2VSZWNlaXZlclR5cGUuZ3JvdXApIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGhlaWdodDogXCIxMnB4XCIsXG4gICAgICAgIHdpZHRoOiBcIjEycHhcIixcbiAgICAgICAgYm9yZGVyUmFkaXVzOiBcIjE2cHhcIlxuICAgICAgfVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIHJldHVybiB0aGlzLnN0YXR1c0luZGljYXRvclN0eWxlXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gKiBAcGFyYW0gIHtDb21ldENoYXQuQ29udmVyc2F0aW9ufSBjb252ZXJzYXRpb25cbiAqL1xuICBjaGVja1N0YXR1c1R5cGUoY29udmVyc2F0aW9uOiBDb21ldENoYXQuQ29udmVyc2F0aW9uKSB7XG4gICAgbGV0IHVzZXI6Q29tZXRDaGF0LlVzZXIgPSBjb252ZXJzYXRpb24uZ2V0Q29udmVyc2F0aW9uV2l0aCgpIGFzIENvbWV0Q2hhdC5Vc2VyXG4gICAgaWYgKGNvbnZlcnNhdGlvbi5nZXRDb252ZXJzYXRpb25UeXBlKCkgPT0gQ29tZXRDaGF0VUlLaXRDb25zdGFudHMuTWVzc2FnZVJlY2VpdmVyVHlwZS51c2VyICYmICF0aGlzLmRpc2FibGVVc2Vyc1ByZXNlbmNlKSB7XG4gICAgICByZXR1cm4gdGhpcy5zdGF0dXNDb2xvclt1c2VyLmdldFN0YXR1cygpXVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIHJldHVybiB0aGlzLnN0YXR1c0NvbG9yW2NvbnZlcnNhdGlvbi5nZXRDb252ZXJzYXRpb25UeXBlKCldXG4gICAgfVxuICB9XG4gIGdldEV4dGVuc2lvbkRhdGEobWVzc2FnZU9iamVjdDogQ29tZXRDaGF0LkJhc2VNZXNzYWdlKSB7XG4gICAgbGV0IG1lc3NhZ2VUZXh0XG4gICAgLy94c3MgZXh0ZW5zaW9ucyBkYXRhXG4gICAgY29uc3QgeHNzRGF0YSA9IENvbWV0Q2hhdFVJS2l0VXRpbGl0eS5jaGVja01lc3NhZ2VGb3JFeHRlbnNpb25zRGF0YShtZXNzYWdlT2JqZWN0LCBcInhzcy1maWx0ZXJcIik7XG4gICAgaWYgKHhzc0RhdGEgJiYgQ29tZXRDaGF0VUlLaXRVdGlsaXR5LmNoZWNrSGFzT3duUHJvcGVydHkoeHNzRGF0YSwgXCJzYW5pdGl6ZWRfdGV4dFwiKSAmJiBDb21ldENoYXRVSUtpdFV0aWxpdHkuY2hlY2tIYXNPd25Qcm9wZXJ0eSh4c3NEYXRhLCBcImhhc1hTU1wiKSAmJiB4c3NEYXRhLmhhc1hTUyA9PT0gXCJ5ZXNcIikge1xuICAgICAgbWVzc2FnZVRleHQgPSB4c3NEYXRhLnNhbml0aXplZF90ZXh0O1xuICAgIH1cbiAgICAvL2RhdGFtYXNraW5nIGV4dGVuc2lvbnMgZGF0YVxuICAgIGNvbnN0IG1hc2tlZERhdGEgPSBDb21ldENoYXRVSUtpdFV0aWxpdHkuY2hlY2tNZXNzYWdlRm9yRXh0ZW5zaW9uc0RhdGEobWVzc2FnZU9iamVjdCwgXCJkYXRhLW1hc2tpbmdcIik7XG4gICAgaWYgKG1hc2tlZERhdGEgJiYgQ29tZXRDaGF0VUlLaXRVdGlsaXR5LmNoZWNrSGFzT3duUHJvcGVydHkobWFza2VkRGF0YSwgXCJkYXRhXCIpICYmIENvbWV0Q2hhdFVJS2l0VXRpbGl0eS5jaGVja0hhc093blByb3BlcnR5KG1hc2tlZERhdGEuZGF0YSwgXCJzZW5zaXRpdmVfZGF0YVwiKSAmJiBDb21ldENoYXRVSUtpdFV0aWxpdHkuY2hlY2tIYXNPd25Qcm9wZXJ0eShtYXNrZWREYXRhLmRhdGEsIFwibWVzc2FnZV9tYXNrZWRcIikgJiYgbWFza2VkRGF0YS5kYXRhLnNlbnNpdGl2ZV9kYXRhID09PSBcInllc1wiKSB7XG4gICAgICBtZXNzYWdlVGV4dCA9IG1hc2tlZERhdGEuZGF0YS5tZXNzYWdlX21hc2tlZDtcbiAgICB9XG4gICAgLy9wcm9mYW5pdHkgZXh0ZW5zaW9ucyBkYXRhXG4gICAgY29uc3QgcHJvZmFuZURhdGEgPSBDb21ldENoYXRVSUtpdFV0aWxpdHkuY2hlY2tNZXNzYWdlRm9yRXh0ZW5zaW9uc0RhdGEobWVzc2FnZU9iamVjdCwgXCJwcm9mYW5pdHktZmlsdGVyXCIpO1xuICAgIGlmIChwcm9mYW5lRGF0YSAmJiBDb21ldENoYXRVSUtpdFV0aWxpdHkuY2hlY2tIYXNPd25Qcm9wZXJ0eShwcm9mYW5lRGF0YSwgXCJwcm9mYW5pdHlcIikgJiYgQ29tZXRDaGF0VUlLaXRVdGlsaXR5LmNoZWNrSGFzT3duUHJvcGVydHkocHJvZmFuZURhdGEsIFwibWVzc2FnZV9jbGVhblwiKSAmJiBwcm9mYW5lRGF0YS5wcm9mYW5pdHkgPT09IFwieWVzXCIpIHtcbiAgICAgIG1lc3NhZ2VUZXh0ID0gcHJvZmFuZURhdGEubWVzc2FnZV9jbGVhbjtcbiAgICB9XG4gICAgcmV0dXJuIG1lc3NhZ2VUZXh0IHx8IChtZXNzYWdlT2JqZWN0IGFzIGFueSkudGV4dFxuICB9XG4gIHNldFN1YnRpdGxlID0gKGNvbnZlcnNhdGlvbk9iamVjdDogQ29tZXRDaGF0LkNvbnZlcnNhdGlvbikgPT4ge1xuICAgIGlmICh0aGlzLnR5cGluZ0luZGljYXRvcikge1xuICAgICAgY29uc3QgaXNUeXBpbmcgPSAoY29udmVyc2F0aW9uT2JqZWN0IGFzIGFueSk/LmNvbnZlcnNhdGlvbldpdGg/Lmd1aWQgPT0gdGhpcy50eXBpbmdJbmRpY2F0b3IuZ2V0UmVjZWl2ZXJJZCgpO1xuICAgICAgaWYgKGlzVHlwaW5nKSB7XG4gICAgICAgIHJldHVybiBgJHt0aGlzLnR5cGluZ0luZGljYXRvci5nZXRTZW5kZXIoKS5nZXROYW1lKCl9ICR7dGhpcy50eXBpbmdJbmRpY2F0b3JUZXh0fWA7XG4gICAgICB9IGVsc2UgaWYgKChjb252ZXJzYXRpb25PYmplY3QgYXMgYW55KT8uY29udmVyc2F0aW9uV2l0aD8udWlkID09IHRoaXMudHlwaW5nSW5kaWNhdG9yPy5nZXRTZW5kZXIoKS5nZXRVaWQoKSAmJiB0aGlzLnR5cGluZ0luZGljYXRvci5nZXRSZWNlaXZlclR5cGUoKSAhPT0gQ29tZXRDaGF0VUlLaXRDb25zdGFudHMuTWVzc2FnZVJlY2VpdmVyVHlwZS5ncm91cCkge1xuICAgICAgICByZXR1cm4gdGhpcy50eXBpbmdJbmRpY2F0b3JUZXh0O1xuICAgICAgfVxuICAgIH1cbiAgICBsZXQgc3VidGl0bGUgPSAgQ2hhdENvbmZpZ3VyYXRvci5nZXREYXRhU291cmNlKCkuZ2V0TGFzdENvbnZlcnNhdGlvbk1lc3NhZ2UoY29udmVyc2F0aW9uT2JqZWN0LCB0aGlzLmxvZ2dlZEluVXNlciEpXG4gICAgbGV0IGljb24gPSBjb252ZXJzYXRpb25PYmplY3Q/LmdldExhc3RNZXNzYWdlKCk/LmdldFR5cGUoKSA9PSBDb21ldENoYXRVSUtpdENvbnN0YW50cy5NZXNzYWdlVHlwZXMuYXVkaW8gPyBcIvCfk54gXCIgOiBcIvCfk7kgXCJcbiAgICByZXR1cm4gY29udmVyc2F0aW9uT2JqZWN0Py5nZXRMYXN0TWVzc2FnZSgpPy5nZXRDYXRlZ29yeSgpID09IENvbWV0Q2hhdFVJS2l0Q29uc3RhbnRzLk1lc3NhZ2VDYXRlZ29yeS5jYWxsID8gaWNvbiArIHN1YnRpdGxlIDogc3VidGl0bGVcbiAgfVxuICBjaGVja0dyb3VwVHlwZShjb252ZXJzYXRpb246IENvbWV0Q2hhdC5Db252ZXJzYXRpb24pOiBzdHJpbmcge1xuICAgIGxldCBpbWFnZTogc3RyaW5nID0gXCJcIjtcbiAgICBpZiAoY29udmVyc2F0aW9uLmdldENvbnZlcnNhdGlvblR5cGUoKSA9PSBDb21ldENoYXRVSUtpdENvbnN0YW50cy5NZXNzYWdlUmVjZWl2ZXJUeXBlLmdyb3VwKSB7XG4gICAgICBzd2l0Y2ggKGNvbnZlcnNhdGlvbi5nZXRDb252ZXJzYXRpb25UeXBlKCkpIHtcbiAgICAgICAgY2FzZSBDb21ldENoYXRVSUtpdENvbnN0YW50cy5Hcm91cFR5cGVzLnBhc3N3b3JkOlxuICAgICAgICAgIGltYWdlID0gdGhpcy5wcm90ZWN0ZWRHcm91cEljb247XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgQ29tZXRDaGF0VUlLaXRDb25zdGFudHMuR3JvdXBUeXBlcy5wcml2YXRlOlxuICAgICAgICAgIGltYWdlID0gdGhpcy5wcml2YXRlR3JvdXBJY29uO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGltYWdlID0gXCJcIlxuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gaW1hZ2VcbiAgfVxuICAvLyBjYWxsYmFjayBmb3IgY29uZmlybURpYWxvZ0NvbXBvbmVudFxuICBvbkNhbmNlbENsaWNrID0gKCkgPT4ge1xuICAgIHRoaXMuaXNEaWFsb2dPcGVuID0gZmFsc2VcbiAgICB0aGlzLmNvbnZlcnNhdGlvblRvQmVEZWxldGVkID0gbnVsbFxuICAgIHRoaXMucmVmLmRldGVjdENoYW5nZXMoKVxuICB9XG4gIGdldE1lc3NhZ2VSZWNlaXB0ID0gKGNvbnZlcnNhdGlvbjogQ29tZXRDaGF0LkNvbnZlcnNhdGlvbikgPT4ge1xuICAgIGxldCByZWNlaXB0ID0gTWVzc2FnZVJlY2VpcHRVdGlscy5nZXRSZWNlaXB0U3RhdHVzKGNvbnZlcnNhdGlvbi5nZXRMYXN0TWVzc2FnZSgpKVxuICAgIHJldHVybiByZWNlaXB0XG4gIH1cbiAgZ2V0RGF0ZSgpe1xuICAgIHJldHVybiB0aGlzLmRhdGVQYXR0ZXJuIHx8ICBEYXRlUGF0dGVybnMuRGF5RGF0ZVRpbWVcbiAgfVxuICBvcHRpb25zU3R5bGUgPSB7XG4gICAgYmFja2dyb3VuZDogXCJ0cmFuc3BhcmVudFwiLFxuICAgIGJvcmRlcjogXCJub25lXCJcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgbmdab25lOiBOZ1pvbmUscHJpdmF0ZSByZWY6IENoYW5nZURldGVjdG9yUmVmLHByaXZhdGUgdGhlbWVTZXJ2aWNlOkNvbWV0Q2hhdFRoZW1lU2VydmljZSkge1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5maXJzdFJlbG9hZCA9IHRydWU7XG4gICAgaWYoIXRoaXMuY29udmVyc2F0aW9uc1JlcXVlc3RCdWlsZGVyKXtcbiAgICAgIHRoaXMuY29udmVyc2F0aW9uc1JlcXVlc3RCdWlsZGVyID0gIG5ldyBDb21ldENoYXQuQ29udmVyc2F0aW9uc1JlcXVlc3RCdWlsZGVyKCkuc2V0TGltaXQodGhpcy5saW1pdClcbiAgICB9XG4gICAgdGhpcy5zZXRDb252ZXJzYXRpb25PcHRpb25zKCk7XG4gICAgdGhpcy5zZXRUaGVtZVN0eWxlKCk7XG4gICAgdGhpcy5zdWJzY3JpYmVUb0V2ZW50cygpXG4gICAgdGhpcy5hdHRhY2hMaXN0ZW5lcnModGhpcy5jb252ZXJzYXRpb25VcGRhdGVkKTtcbiAgICB0aGlzLnJlcXVlc3RCdWlsZGVyID0gdGhpcy5jb252ZXJzYXRpb25zUmVxdWVzdEJ1aWxkZXIuYnVpbGQoKVxuICAgIHRoaXMuZ2V0Q29udmVyc2F0aW9uKCk7XG5cbiAgfVxuICBhdHRhY2hDb25uZWN0aW9uTGlzdGVuZXJzKCl7XG4gICAgQ29tZXRDaGF0LmFkZENvbm5lY3Rpb25MaXN0ZW5lcihcbiAgICAgIHRoaXMuY29ubmVjdGlvbkxpc3RlbmVySWQsXG4gICAgICBuZXcgQ29tZXRDaGF0LkNvbm5lY3Rpb25MaXN0ZW5lcih7XG4gICAgICBvbkNvbm5lY3RlZDogKCkgPT4ge1xuICAgICAgY29uc29sZS5sb2coXCJDb25uZWN0aW9uTGlzdGVuZXIgPT5jb25uZWN0ZWRcIik7XG4gICAgICB0aGlzLmZldGNoTmV3Q29udmVyc2F0aW9ucygpXG4gICAgICB9LFxuICAgICAgaW5Db25uZWN0aW5nOiAoKSA9PiB7XG4gICAgICAgICAgY29uc29sZS5sb2coXCJDb25uZWN0aW9uTGlzdGVuZXIgPT4gSW4gY29ubmVjdGluZ1wiKTtcbiAgICAgIH0sXG4gICAgICBvbkRpc2Nvbm5lY3RlZDogKCkgPT4ge1xuICAgICAgICBjb25zb2xlLmxvZyhcIkNvbm5lY3Rpb25MaXN0ZW5lciA9PiBPbiBEaXNjb25uZWN0ZWRcIik7XG4gICAgICB9XG4gIH0pXG4pO1xuICB9XG51cGRhdGVDb252ZXJzYXRpb25PYmplY3QoY29udmVyc2F0aW9uOkNvbWV0Q2hhdC5Db252ZXJzYXRpb24pe1xuICBsZXQgaW5kZXggPSB0aGlzLmNvbnZlcnNhdGlvbkxpc3QuZmluZEluZGV4KChlbGVtZW50OiBDb21ldENoYXQuQ29udmVyc2F0aW9uKSA9PiBlbGVtZW50LmdldENvbnZlcnNhdGlvbklkKCkgPT0gY29udmVyc2F0aW9uLmdldENvbnZlcnNhdGlvbklkKCkpO1xuICB0aGlzLmNvbnZlcnNhdGlvbkxpc3Quc3BsaWNlKGluZGV4LCAxLCBjb252ZXJzYXRpb24pO1xuICB0aGlzLnJlZi5kZXRlY3RDaGFuZ2VzKClcbn1cbiAgc3Vic2NyaWJlVG9FdmVudHMoKXtcbiAgICB0aGlzLmNjR3JvdXBNZW1iZXJTY29wZUNoYW5nZWQgPSBDb21ldENoYXRHcm91cEV2ZW50cy5jY0dyb3VwTWVtYmVyU2NvcGVDaGFuZ2VkLnN1YnNjcmliZSgoaXRlbTpJR3JvdXBNZW1iZXJTY29wZUNoYW5nZWQpPT57XG4gICAgICBsZXQgY29udmVyc2F0aW9uID0gdGhpcy5nZXRDb252ZXJzYXRpb25Gcm9tR3JvdXAoaXRlbS5ncm91cCEpXG4gICAgICBpZihjb252ZXJzYXRpb24pe1xuICAgICAgICBjb252ZXJzYXRpb24uc2V0TGFzdE1lc3NhZ2UoaXRlbS5tZXNzYWdlKVxuICAgICAgICB0aGlzLnVwZGF0ZUNvbnZlcnNhdGlvbk9iamVjdChjb252ZXJzYXRpb24pXG4gICAgICB9XG4gICAgfSlcbiAgICB0aGlzLmNjR3JvdXBNZW1iZXJBZGRlZCA9IENvbWV0Q2hhdEdyb3VwRXZlbnRzLmNjR3JvdXBNZW1iZXJBZGRlZC5zdWJzY3JpYmUoKGl0ZW06SUdyb3VwTWVtYmVyQWRkZWQpPT57XG4gICAgICBsZXQgZ3JvdXA6Q29tZXRDaGF0Lkdyb3VwID0gaXRlbS51c2VyQWRkZWRJbiFcbiAgICAgIGxldCBhY3Rpb25NZXNzYWdlOkNvbWV0Q2hhdC5BY3Rpb25bXSA9IGl0ZW0ubWVzc2FnZXMhXG4gICAgICBsZXQgY29udmVyc2F0aW9uOkNvbWV0Q2hhdC5Db252ZXJzYXRpb24gfCBudWxsID0gdGhpcy5nZXRDb252ZXJzYXRpb25Gcm9tR3JvdXAoaXRlbS51c2VyQWRkZWRJbiEpXG4gICAgICBjb252ZXJzYXRpb24/LnNldENvbnZlcnNhdGlvbldpdGgoZ3JvdXApXG4gICAgICBjb252ZXJzYXRpb24/LnNldExhc3RNZXNzYWdlKGFjdGlvbk1lc3NhZ2VbYWN0aW9uTWVzc2FnZT8ubGVuZ3RoIC0xXSlcbiAgICAgIHRoaXMudXBkYXRlQ29udmVyc2F0aW9uT2JqZWN0KGNvbnZlcnNhdGlvbiEpXG4gICAgfSlcbiAgICB0aGlzLmNjR3JvdXBNZW1iZXJLaWNrZWQgPSBDb21ldENoYXRHcm91cEV2ZW50cy5jY0dyb3VwTWVtYmVyS2lja2VkLnN1YnNjcmliZSgoaXRlbTpJR3JvdXBNZW1iZXJLaWNrZWRCYW5uZWQpPT57XG4gICAgICAgICBsZXQgY29udmVyc2F0aW9uID0gdGhpcy5nZXRDb252ZXJzYXRpb25Gcm9tR3JvdXAoaXRlbS5raWNrZWRGcm9tISlcbiAgICAgICAgIGlmKGNvbnZlcnNhdGlvbil7XG4gICAgICAgICAgIGNvbnZlcnNhdGlvbi5zZXRMYXN0TWVzc2FnZShpdGVtLm1lc3NhZ2UpXG4gICAgICAgICAgIHRoaXMudXBkYXRlQ29udmVyc2F0aW9uT2JqZWN0KGNvbnZlcnNhdGlvbilcbiAgICAgICAgIH1cbiAgICB9KTtcbiAgICB0aGlzLmNjR3JvdXBNZW1iZXJCYW5uZWQgPSBDb21ldENoYXRHcm91cEV2ZW50cy5jY0dyb3VwTWVtYmVyQmFubmVkLnN1YnNjcmliZSgoaXRlbTpJR3JvdXBNZW1iZXJLaWNrZWRCYW5uZWQpPT57XG4gICAgICBsZXQgY29udmVyc2F0aW9uID0gdGhpcy5nZXRDb252ZXJzYXRpb25Gcm9tR3JvdXAoaXRlbS5raWNrZWRGcm9tISlcbiAgICAgIGlmKGNvbnZlcnNhdGlvbil7XG4gICAgICAgIGNvbnZlcnNhdGlvbi5zZXRMYXN0TWVzc2FnZShpdGVtLm1lc3NhZ2UpXG4gICAgICAgIHRoaXMudXBkYXRlQ29udmVyc2F0aW9uT2JqZWN0KGNvbnZlcnNhdGlvbilcbiAgICAgIH1cbiAgICB9KTtcbiAgICB0aGlzLmNjR3JvdXBEZWxldGVkID0gQ29tZXRDaGF0R3JvdXBFdmVudHMuY2NHcm91cERlbGV0ZWQuc3Vic2NyaWJlKChpdGVtOkNvbWV0Q2hhdC5Hcm91cCk9PntcbiAgICAgIGxldCBjb252ZXJzYXRpb246Q29tZXRDaGF0LkNvbnZlcnNhdGlvbiB8IG51bGwgPSB0aGlzLmdldENvbnZlcnNhdGlvbkZyb21Hcm91cChpdGVtKVxuICAgICAgaWYoY29udmVyc2F0aW9uKXtcbiAgICAgdGhpcy5yZW1vdmVDb252ZXJzYXRpb24oY29udmVyc2F0aW9uKVxuICAgICAgfVxuICAgIH0pO1xuICAgIHRoaXMuY2NHcm91cExlZnQgPSBDb21ldENoYXRHcm91cEV2ZW50cy5jY0dyb3VwTGVmdC5zdWJzY3JpYmUoKGl0ZW06SUdyb3VwTGVmdCk9PntcbiAgICAgIGxldCBjb252ZXJzYXRpb25LZXk6IG51bWJlciA9IHRoaXMuY29udmVyc2F0aW9uTGlzdC5maW5kSW5kZXgoXG4gICAgICAgIChjOiBDb21ldENoYXQuQ29udmVyc2F0aW9uKSA9PiBjPy5nZXRDb252ZXJzYXRpb25UeXBlKCkgPT09IENvbWV0Q2hhdFVJS2l0Q29uc3RhbnRzLk1lc3NhZ2VSZWNlaXZlclR5cGUuZ3JvdXAgJiYgKGM/LmdldENvbnZlcnNhdGlvbldpdGgoKSBhcyBDb21ldENoYXQuR3JvdXApLmdldEd1aWQoKSA9PSBpdGVtLmxlZnRHcm91cC5nZXRHdWlkKClcbiAgICAgICk7XG4gICAgICBpZihjb252ZXJzYXRpb25LZXkgPj0gMCl7XG4gICAgICAgIGxldCBjb252ZXJzYXRpb246Q29tZXRDaGF0LkNvbnZlcnNhdGlvbiA9IHRoaXMuY29udmVyc2F0aW9uTGlzdFtjb252ZXJzYXRpb25LZXldXG4gICAgICAgIHRoaXMucmVtb3ZlQ29udmVyc2F0aW9uKGNvbnZlcnNhdGlvbilcbiAgICAgICAgaWYodGhpcy5hY3RpdmVDb252ZXJzYXRpb24gJiYgdGhpcy5hY3RpdmVDb252ZXJzYXRpb24/LmdldENvbnZlcnNhdGlvbklkKCkgPT0gY29udmVyc2F0aW9uPy5nZXRDb252ZXJzYXRpb25JZCgpKXtcbiAgICAgICAgICB0aGlzLmFjdGl2ZUNvbnZlcnNhdGlvbiA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgICB0aGlzLmNjVXNlckJsb2NrZWQgPSBDb21ldENoYXRVc2VyRXZlbnRzLmNjVXNlckJsb2NrZWQuc3Vic2NyaWJlKChpdGVtOkNvbWV0Q2hhdC5Vc2VyKT0+e1xuICAgICAgbGV0IGNvbnZlcnNhdGlvbjpDb21ldENoYXQuQ29udmVyc2F0aW9uIHwgbnVsbCA9IHRoaXMuZ2V0Q29udmVyc2F0aW9uRnJvbVVzZXIoaXRlbSlcbiAgICAgIGlmKGNvbnZlcnNhdGlvbil7XG4gICAgICAgIHRoaXMucmVtb3ZlQ29udmVyc2F0aW9uKGNvbnZlcnNhdGlvbilcbiAgICAgICAgIH1cbiAgICB9KTtcbiAgICB0aGlzLmNjTWVzc2FnZUVkaXQgPSBDb21ldENoYXRNZXNzYWdlRXZlbnRzLmNjTWVzc2FnZUVkaXRlZC5zdWJzY3JpYmUoKG9iamVjdDogSU1lc3NhZ2VzKSA9PiB7XG4gICAgICBsZXQgbWVzc2FnZTogQ29tZXRDaGF0LkJhc2VNZXNzYWdlID0gb2JqZWN0Lm1lc3NhZ2UhXG4gICAgICBpZihvYmplY3Quc3RhdHVzID09IE1lc3NhZ2VTdGF0dXMuc3VjY2Vzcyl7XG4gICAgICAgIHRoaXMudXBkYXRlRWRpdGVkTWVzc2FnZShtZXNzYWdlIGFzIENvbWV0Q2hhdC5UZXh0TWVzc2FnZSlcbiAgICAgIH1cbiAgIH0pXG4gICB0aGlzLmNjTWVzc2FnZVNlbnQgPSBDb21ldENoYXRNZXNzYWdlRXZlbnRzLmNjTWVzc2FnZVNlbnQuc3Vic2NyaWJlKChvYmo6IElNZXNzYWdlcykgPT4ge1xuICAgICBsZXQgbWVzc2FnZTogQ29tZXRDaGF0LkJhc2VNZXNzYWdlID0gb2JqLm1lc3NhZ2UhXG4gICAgIGlmKG9iai5zdGF0dXMgPT0gTWVzc2FnZVN0YXR1cy5zdWNjZXNzKXtcbiAgICAgICB0aGlzLnVwZGF0ZUNvbnZlcnNhdGlvbihtZXNzYWdlKVxuICAgICB9XG4gICB9KVxuICAgdGhpcy5jY01lc3NhZ2VEZWxldGUgPSBDb21ldENoYXRNZXNzYWdlRXZlbnRzLmNjTWVzc2FnZURlbGV0ZWQuc3Vic2NyaWJlKChtZXNzYWdlT2JqZWN0OiBDb21ldENoYXQuQmFzZU1lc3NhZ2UpID0+IHtcbiAgICAgICB0aGlzLnVwZGF0ZUNvbnZlcnNhdGlvbihtZXNzYWdlT2JqZWN0KVxuICAgICAgIHRoaXMucmVmLmRldGVjdENoYW5nZXMoKTtcbiAgIH0pXG4gICB0aGlzLmNjTWVzc2FnZVJlYWQgPSBDb21ldENoYXRNZXNzYWdlRXZlbnRzLmNjTWVzc2FnZVJlYWQuc3Vic2NyaWJlKChtZXNzYWdlT2JqZWN0OiBDb21ldENoYXQuQmFzZU1lc3NhZ2UpID0+IHtcbiAgQ29tZXRDaGF0LkNvbWV0Q2hhdEhlbHBlci5nZXRDb252ZXJzYXRpb25Gcm9tTWVzc2FnZShtZXNzYWdlT2JqZWN0KS50aGVuKChjb252ZXJzYXRpb246Q29tZXRDaGF0LkNvbnZlcnNhdGlvbik9PntcbiAgICBpZihjb252ZXJzYXRpb24gJiYgIHRoaXMuYWN0aXZlQ29udmVyc2F0aW9uICYmIGNvbnZlcnNhdGlvbj8uZ2V0Q29udmVyc2F0aW9uSWQoKSA9PSB0aGlzLmFjdGl2ZUNvbnZlcnNhdGlvbj8uZ2V0Q29udmVyc2F0aW9uSWQoKSl7XG4gICAgICB0aGlzLnVwZGF0ZUVkaXRlZE1lc3NhZ2UobWVzc2FnZU9iamVjdCBhcyBDb21ldENoYXQuVGV4dE1lc3NhZ2UpXG4gICAgICB0aGlzLnJlc2V0VW5yZWFkQ291bnQoKTtcbiAgICB9XG4gIH0pXG4gIH0pXG4gIHRoaXMuY2NDYWxsRW5kZWQgPSBDb21ldENoYXRDYWxsRXZlbnRzLmNjQ2FsbEVuZGVkLnN1YnNjcmliZSgoY2FsbDpDb21ldENoYXQuQ2FsbCk9PntcbiAgICBpZihjYWxsICAmJiBPYmplY3Qua2V5cyhjYWxsKS5sZW5ndGggPiAwKXtcbiAgICAgIHRoaXMudXBkYXRlQ29udmVyc2F0aW9uKGNhbGwpXG4gICAgfVxuICB9KVxuICB0aGlzLmNjQ2FsbFJlamVjdGVkID0gQ29tZXRDaGF0Q2FsbEV2ZW50cy5jY0NhbGxSZWplY3RlZC5zdWJzY3JpYmUoKGNhbGw6IENvbWV0Q2hhdC5DYWxsKSA9PiB7XG4gICAgdGhpcy51cGRhdGVDb252ZXJzYXRpb24oY2FsbClcbiAgfSlcbiAgdGhpcy5jY091dGdvaW5nQ2FsbCA9IENvbWV0Q2hhdENhbGxFdmVudHMuY2NPdXRnb2luZ0NhbGwuc3Vic2NyaWJlKChjYWxsOiBDb21ldENoYXQuQ2FsbCkgPT4ge1xuICAgIHRoaXMudXBkYXRlQ29udmVyc2F0aW9uKGNhbGwpXG4gIH0pXG4gIHRoaXMuY2NDYWxsQWNjZXB0ZWQgPSBDb21ldENoYXRDYWxsRXZlbnRzLmNjQ2FsbEFjY2VwdGVkLnN1YnNjcmliZSgoY2FsbDogQ29tZXRDaGF0LkNhbGwpID0+IHtcbiAgICB0aGlzLnVwZGF0ZUNvbnZlcnNhdGlvbihjYWxsKVxuICB9KVxuICB9XG4gIHVuc3Vic2NyaWJlVG9FdmVudHMoKXtcbiAgICB0aGlzLmNjR3JvdXBNZW1iZXJBZGRlZD8udW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLmNjR3JvdXBNZW1iZXJLaWNrZWQ/LnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5jY0dyb3VwTWVtYmVyQmFubmVkPy51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMuY2NNZXNzYWdlRWRpdD8udW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLmNjTWVzc2FnZVNlbnQ/LnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5jY01lc3NhZ2VFZGl0ZWQ/LnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5jY01lc3NhZ2VEZWxldGU/LnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5jY0dyb3VwRGVsZXRlZD8udW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLmNjR3JvdXBMZWZ0Py51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMuY2NVc2VyQmxvY2tlZD8udW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLmNjTWVzc2FnZVJlYWQ/LnVuc3Vic2NyaWJlKCk7XG4gIH1cbiAgZ2V0Q29udmVyc2F0aW9uRnJvbVVzZXIodXNlcjpDb21ldENoYXQuVXNlcil7XG4gICAgbGV0IGluZGV4ID0gdGhpcy5jb252ZXJzYXRpb25MaXN0LmZpbmRJbmRleCgoZWxlbWVudDogQ29tZXRDaGF0LkNvbnZlcnNhdGlvbikgPT4gZWxlbWVudC5nZXRDb252ZXJzYXRpb25UeXBlKCkgPT0gQ29tZXRDaGF0VUlLaXRDb25zdGFudHMuTWVzc2FnZVJlY2VpdmVyVHlwZS51c2VyICYmICAoZWxlbWVudC5nZXRDb252ZXJzYXRpb25XaXRoKCkgYXMgQ29tZXRDaGF0LlVzZXIpLmdldFVpZCgpID09IHVzZXIuZ2V0VWlkKCkpO1xuICAgIGlmKGluZGV4ID49IDApe1xuICAgICAgcmV0dXJuIHRoaXMuY29udmVyc2F0aW9uTGlzdFtpbmRleF1cbiAgICB9XG4gICAgcmV0dXJuIG51bGxcbiAgfVxuICBnZXRDb252ZXJzYXRpb25Gcm9tR3JvdXAoZ3JvdXA6Q29tZXRDaGF0Lkdyb3VwKTpDb21ldENoYXQuQ29udmVyc2F0aW9uIHwgbnVsbHtcbiAgbGV0IGluZGV4ID0gdGhpcy5jb252ZXJzYXRpb25MaXN0LmZpbmRJbmRleCgoZWxlbWVudDogQ29tZXRDaGF0LkNvbnZlcnNhdGlvbikgPT4gZWxlbWVudC5nZXRDb252ZXJzYXRpb25UeXBlKCkgPT0gQ29tZXRDaGF0VUlLaXRDb25zdGFudHMuTWVzc2FnZVJlY2VpdmVyVHlwZS5ncm91cCAmJiAgKGVsZW1lbnQuZ2V0Q29udmVyc2F0aW9uV2l0aCgpIGFzIENvbWV0Q2hhdC5Hcm91cCkuZ2V0R3VpZCgpID09IGdyb3VwLmdldEd1aWQoKSk7XG4gICAgaWYoaW5kZXggPj0gMCl7XG4gICAgICByZXR1cm4gdGhpcy5jb252ZXJzYXRpb25MaXN0W2luZGV4XVxuICAgIH1cbiAgICByZXR1cm4gbnVsbFxuICB9XG4gIG5nT25DaGFuZ2VzKGNoYW5nZTogU2ltcGxlQ2hhbmdlcykge1xuICAgIHRyeSB7XG4gICAgICBpZihjaGFuZ2VbXCJhY3RpdmVDb252ZXJzYXRpb25cIl0pe1xuICAgICAgICB0aGlzLnJlc2V0VW5yZWFkQ291bnQoKTtcbiAgICAgICAgdGhpcy5yZWYuZGV0ZWN0Q2hhbmdlcygpXG4gICAgICB9XG4gICAgICAvKipcbiAgICAgICAqIFdoZW4gdXNlciBzZW5kcyBtZXNzYWdlIGNvbnZlcnNhdGlvbkxpc3QgaXMgdXBkYXRlZCB3aXRoIGxhdGVzdCBtZXNzYWdlXG4gICAgICAgKi9cbiAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICAgICAgICBpZih0aGlzLm9uRXJyb3Ipe1xuICAgICAgICB0aGlzLm9uRXJyb3IoQ29tZXRDaGF0RXhjZXB0aW9uKGVycm9yKSlcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMucmVtb3ZlTGlzdGVuZXJzKCk7XG4gICAgICB0aGlzLnVuc3Vic2NyaWJlVG9FdmVudHMoKVxuICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgICAgICAgIGlmKHRoaXMub25FcnJvcil7XG4gICAgICAgIHRoaXMub25FcnJvcihDb21ldENoYXRFeGNlcHRpb24oZXJyb3IpKVxuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLnJlZi5kZXRlY3RDaGFuZ2VzKClcbiAgfVxuICAvLyBnZXR0aW5nIGRlZmF1bHQgY29udmVyc2F0aW9uIG9wdGlvbiBhbmQgYWRkaW5nIGNhbGxiYWNrIGluIGl0XG4gIHNldENvbnZlcnNhdGlvbk9wdGlvbnMoKSB7XG4gaWYodGhpcy5vcHRpb25zKXtcbiByZXR1cm47XG4gfVxuIHRoaXMuY29udmVyc2F0aW9uT3B0aW9ucyA9IENvbnZlcnNhdGlvblV0aWxzLmdldERlZmF1bHRPcHRpb25zKCk7XG4gdGhpcy5jb252ZXJzYXRpb25PcHRpb25zLmZvckVhY2goKGVsZW1lbnQ6IENvbWV0Q2hhdE9wdGlvbikgPT4ge1xuICAgaWYgKCFlbGVtZW50Lm9uQ2xpY2sgJiYgZWxlbWVudC5pZCA9PSBDb21ldENoYXRVSUtpdENvbnN0YW50cy5Db252ZXJzYXRpb25PcHRpb25zLmRlbGV0ZSkge1xuICAgICBlbGVtZW50Lm9uQ2xpY2sgPSB0aGlzLmRlbGV0ZUNvbnZlcnNhdGlvbk9uQ2xpY2tcbiAgIH1cbiB9KTtcbiByZXR1cm47XG4gIH1cbiAgLy8gcmVzZXQgdW5yZWFkIGNvdW50XG4gIG9uQ2xpY2soY29udmVyc2F0aW9uOiBDb21ldENoYXQuQ29udmVyc2F0aW9uKSB7XG4gICBpZih0aGlzLm9uSXRlbUNsaWNrKXtcbiAgICAgdGhpcy5vbkl0ZW1DbGljayhjb252ZXJzYXRpb24pXG4gICB9XG4gIH1cbiAgLy8gc2V0IHVucmVhZCBjb3VudFxuICByZXNldFVucmVhZENvdW50KCkge1xuICAgIGlmICh0aGlzLmFjdGl2ZUNvbnZlcnNhdGlvbikge1xuICAgICAgY29uc3QgY29udmVyc2F0aW9ubGlzdDogQ29tZXRDaGF0LkNvbnZlcnNhdGlvbltdID0gWy4uLnRoaXMuY29udmVyc2F0aW9uTGlzdF07XG4gICAgICAvL0dldHMgdGhlIGluZGV4IG9mIHVzZXIgd2hpY2ggY29tZXMgb2ZmbGluZS9vbmxpbmVcbiAgICAgIGNvbnN0IGNvbnZlcnNhdGlvbktleSA9IGNvbnZlcnNhdGlvbmxpc3QuZmluZEluZGV4KFxuICAgICAgICAoY29udmVyc2F0aW9uT2JqOiBDb21ldENoYXQuQ29udmVyc2F0aW9uKSA9PlxuICAgICAgICAgIGNvbnZlcnNhdGlvbk9iaj8uZ2V0Q29udmVyc2F0aW9uSWQoKSA9PT0gdGhpcy5hY3RpdmVDb252ZXJzYXRpb24/LmdldENvbnZlcnNhdGlvbklkKClcbiAgICAgICk7XG4gICAgICBpZiAoY29udmVyc2F0aW9uS2V5ID4gLTEpIHtcbiAgICAgICAgbGV0IGNvbnZlcnNhdGlvbk9iajogQ29tZXRDaGF0LkNvbnZlcnNhdGlvbiA9IGNvbnZlcnNhdGlvbmxpc3RbY29udmVyc2F0aW9uS2V5XTtcbiAgICAgICAgbGV0IG5ld0NvbnZlcnNhdGlvbk9iajogQ29tZXRDaGF0LkNvbnZlcnNhdGlvbiA9IGNvbnZlcnNhdGlvbk9ialxuICAgICAgICBuZXdDb252ZXJzYXRpb25PYmouc2V0VW5yZWFkTWVzc2FnZUNvdW50KDApO1xuICAgICAgICAobmV3Q29udmVyc2F0aW9uT2JqLmdldExhc3RNZXNzYWdlKCkgYXMgQ29tZXRDaGF0LlRleHRNZXNzYWdlKT8uc2V0TXVpZCh0aGlzLmdldFVpbngoKSlcbiAgICAgICAgY29udmVyc2F0aW9ubGlzdC5zcGxpY2UoY29udmVyc2F0aW9uS2V5LCAxLCBuZXdDb252ZXJzYXRpb25PYmopO1xuICAgICAgICB0aGlzLmNvbnZlcnNhdGlvbkxpc3QgPSBbLi4uY29udmVyc2F0aW9ubGlzdF07XG4gICAgICAgIHRoaXMucmVmLmRldGVjdENoYW5nZXMoKVxuICAgICAgfVxuICAgIH1cbiAgfVxuICAvLyBzZXRzIHByb3BlcnR5IGZyb20gdGhlbWUgdG8gc3R5bGUgb2JqZWN0XG4gIHNldFRoZW1lU3R5bGUoKSB7XG4gICAgdGhpcy5zZXRBdmF0YXJTdHlsZSgpO1xuICAgIHRoaXMuc2V0QmFkZ2VTdHlsZSgpO1xuICAgIHRoaXMuc2V0Q29uZmlybURpYWxvZ1N0eWxlKCk7XG4gICAgdGhpcy5zZXRDb252ZXJzYXRpb25zU3R5bGUoKTtcbiAgICB0aGlzLnNldExpc3RJdGVtU3R5bGUoKTtcbiAgICB0aGlzLnNldERhdGVTdHlsZSgpO1xuICAgIHRoaXMuc2V0U3RhdHVzU3R5bGUoKTtcbiAgICB0aGlzLnNldFJlY2VpcHRTdHlsZSgpO1xuICAgIHRoaXMuc3RhdHVzQ29sb3IucHJpdmF0ZSA9dGhpcy5jb252ZXJzYXRpb25zU3R5bGU/LnByaXZhdGVHcm91cEljb25CYWNrZ3JvdW5kIDtcbiAgICB0aGlzLnN0YXR1c0NvbG9yLm9ubGluZSA9dGhpcy5jb252ZXJzYXRpb25zU3R5bGU/Lm9ubGluZVN0YXR1c0NvbG9yIDtcbiAgICB0aGlzLnN0YXR1c0NvbG9yLnBhc3N3b3JkID10aGlzLmNvbnZlcnNhdGlvbnNTdHlsZT8ucGFzc3dvcmRHcm91cEljb25CYWNrZ3JvdW5kO1xuICAgIHRoaXMubGlzdFN0eWxlID17XG4gICAgICB0aXRsZVRleHRGb250IDogdGhpcy5jb252ZXJzYXRpb25zU3R5bGUudGl0bGVUZXh0Rm9udCxcbiAgICAgIHRpdGxlVGV4dENvbG9yIDogdGhpcy5jb252ZXJzYXRpb25zU3R5bGUudGl0bGVUZXh0Q29sb3IsXG4gICAgICBlbXB0eVN0YXRlVGV4dEZvbnQgOiB0aGlzLmNvbnZlcnNhdGlvbnNTdHlsZS5lbXB0eVN0YXRlVGV4dEZvbnQsXG4gICAgICBlbXB0eVN0YXRlVGV4dENvbG9yIDogdGhpcy5jb252ZXJzYXRpb25zU3R5bGUuZW1wdHlTdGF0ZVRleHRDb2xvcixcbiAgICAgIGVycm9yU3RhdGVUZXh0Rm9udCA6IHRoaXMuY29udmVyc2F0aW9uc1N0eWxlLmVycm9yU3RhdGVUZXh0Rm9udCxcbiAgICAgIGVycm9yU3RhdGVUZXh0Q29sb3IgOiB0aGlzLmNvbnZlcnNhdGlvbnNTdHlsZS5lcnJvclN0YXRlVGV4dENvbG9yLFxuICAgICAgbG9hZGluZ0ljb25UaW50IDogdGhpcy5jb252ZXJzYXRpb25zU3R5bGUubG9hZGluZ0ljb25UaW50LFxuICAgICAgc2VwYXJhdG9yQ29sb3IgOiB0aGlzLmNvbnZlcnNhdGlvbnNTdHlsZS5zZXBhcmF0b3JDb2xvcixcbiAgICB9XG4gICAgdGhpcy5pY29uU3R5bGUuaWNvblRpbnQgPSAgICB0aGlzLnRoZW1lU2VydmljZS50aGVtZS5wYWxldHRlLmdldEFjY2VudDQwMCgpO1xuICB9XG4gIHNldExpc3RJdGVtU3R5bGUoKXtcbiAgICBsZXQgZGVmYXVsdFN0eWxlOkxpc3RJdGVtU3R5bGUgPSBuZXcgTGlzdEl0ZW1TdHlsZSh7XG4gICAgICBoZWlnaHQ6IFwiMTAwJVwiLFxuICAgICAgd2lkdGg6IFwiMTAwJVwiLFxuICAgICAgYmFja2dyb3VuZDogdGhpcy50aGVtZVNlcnZpY2UudGhlbWUucGFsZXR0ZS5nZXRCYWNrZ3JvdW5kKCksXG4gICAgICBhY3RpdmVCYWNrZ3JvdW5kOiB0aGlzLnRoZW1lU2VydmljZS50aGVtZS5wYWxldHRlLmdldEFjY2VudDUwKCksXG4gICAgICBib3JkZXJSYWRpdXM6IFwiMFwiLFxuICAgICAgdGl0bGVGb250OiBmb250SGVscGVyKHRoaXMudGhlbWVTZXJ2aWNlLnRoZW1lLnR5cG9ncmFwaHkudGl0bGUyKSxcbiAgICAgIHRpdGxlQ29sb3I6IHRoaXMudGhlbWVTZXJ2aWNlLnRoZW1lLnBhbGV0dGUuZ2V0QWNjZW50KCksXG4gICAgICBib3JkZXI6IFwibm9uZVwiLFxuICAgICAgc2VwYXJhdG9yQ29sb3I6dGhpcy50aGVtZVNlcnZpY2UudGhlbWUucGFsZXR0ZS5nZXRBY2NlbnQyMDAoKSxcbiAgICAgIGhvdmVyQmFja2dyb3VuZDp0aGlzLnRoZW1lU2VydmljZS50aGVtZS5wYWxldHRlLmdldEFjY2VudDUwKClcbiAgICB9KVxuICAgIHRoaXMubGlzdEl0ZW1TdHlsZSA9IHsuLi5kZWZhdWx0U3R5bGUsLi4udGhpcy5saXN0SXRlbVN0eWxlfVxuICB9XG4gIHNldEF2YXRhclN0eWxlKCl7XG4gICAgbGV0IGRlZmF1bHRTdHlsZTpBdmF0YXJTdHlsZSA9IG5ldyBBdmF0YXJTdHlsZSh7XG4gICAgICBib3JkZXJSYWRpdXM6IFwiMjRweFwiLFxuICAgICAgd2lkdGg6IFwiMzZweFwiLFxuICAgICAgaGVpZ2h0OiBcIjM2cHhcIixcbiAgICAgIGJvcmRlcjogYDFweCBzb2xpZCAke3RoaXMudGhlbWVTZXJ2aWNlLnRoZW1lLnBhbGV0dGUuZ2V0QWNjZW50MjAwKCl9YCxcbiAgICAgIGJhY2tncm91bmRDb2xvcjogdGhpcy50aGVtZVNlcnZpY2UudGhlbWUucGFsZXR0ZS5nZXRBY2NlbnQ3MDAoKSxcbiAgICAgIG5hbWVUZXh0Q29sb3I6IHRoaXMudGhlbWVTZXJ2aWNlLnRoZW1lLnBhbGV0dGUuZ2V0QWNjZW50OTAwKCksXG4gICAgICBiYWNrZ3JvdW5kU2l6ZTogXCJjb3ZlclwiLFxuICAgICAgbmFtZVRleHRGb250OiBmb250SGVscGVyKHRoaXMudGhlbWVTZXJ2aWNlLnRoZW1lLnR5cG9ncmFwaHkuc3VidGl0bGUxKSxcbiAgICAgIFxuICAgICAgb3V0ZXJWaWV3Qm9yZGVyU3BhY2luZzogXCJcIixcbiAgICB9KVxuICAgIHRoaXMuYXZhdGFyU3R5bGUgPSB7Li4uZGVmYXVsdFN0eWxlLC4uLnRoaXMuYXZhdGFyU3R5bGV9XG4gIH1cbiAgc2V0U3RhdHVzU3R5bGUoKXtcbiAgICBsZXQgZGVmYXVsdFN0eWxlOkJhc2VTdHlsZSA9IHtcbiAgICAgICAgaGVpZ2h0OiBcIjEycHhcIixcbiAgICAgICAgd2lkdGg6XCIxMnB4XCIsXG4gICAgICAgIGJvcmRlcjpcIm5vbmVcIixcbiAgICAgICAgYm9yZGVyUmFkaXVzOlwiMjRweFwiLFxuICAgIH1cbiAgICB0aGlzLnN0YXR1c0luZGljYXRvclN0eWxlID0gey4uLmRlZmF1bHRTdHlsZSwuLi50aGlzLnN0YXR1c0luZGljYXRvclN0eWxlfVxuICB9XG4gIHNldENvbnZlcnNhdGlvbnNTdHlsZSgpe1xuICAgIGxldCBkZWZhdWx0U3R5bGU6Q29udmVyc2F0aW9uc1N0eWxlID0gbmV3IENvbnZlcnNhdGlvbnNTdHlsZSh7XG4gICAgICBsYXN0TWVzc2FnZVRleHRGb250OiBmb250SGVscGVyKHRoaXMudGhlbWVTZXJ2aWNlLnRoZW1lLnR5cG9ncmFwaHkuc3VidGl0bGUyKSxcbiAgICAgIGxhc3RNZXNzYWdlVGV4dENvbG9yOiB0aGlzLnRoZW1lU2VydmljZS50aGVtZS5wYWxldHRlLmdldEFjY2VudDYwMCgpLFxuICAgICAgYmFja2dyb3VuZDp0aGlzLnRoZW1lU2VydmljZS50aGVtZS5wYWxldHRlLmdldEJhY2tncm91bmQoKSxcbiAgICAgIGJvcmRlcjpgMXB4IHNvbGlkICR7dGhpcy50aGVtZVNlcnZpY2UudGhlbWUucGFsZXR0ZS5nZXRBY2NlbnQ1MCgpfWAsXG4gICAgICB0aXRsZVRleHRGb250OmZvbnRIZWxwZXIodGhpcy50aGVtZVNlcnZpY2UudGhlbWUudHlwb2dyYXBoeS50aXRsZTEpLFxuICAgICAgdGl0bGVUZXh0Q29sb3I6dGhpcy50aGVtZVNlcnZpY2UudGhlbWUucGFsZXR0ZS5nZXRBY2NlbnQoKSxcbiAgICAgIGVtcHR5U3RhdGVUZXh0Rm9udDpmb250SGVscGVyKHRoaXMudGhlbWVTZXJ2aWNlLnRoZW1lLnR5cG9ncmFwaHkudGl0bGUxKSxcbiAgICAgIGVtcHR5U3RhdGVUZXh0Q29sb3I6dGhpcy50aGVtZVNlcnZpY2UudGhlbWUucGFsZXR0ZS5nZXRBY2NlbnQ2MDAoKSxcbiAgICAgIGVycm9yU3RhdGVUZXh0Rm9udDpmb250SGVscGVyKHRoaXMudGhlbWVTZXJ2aWNlLnRoZW1lLnR5cG9ncmFwaHkudGl0bGUxKSxcbiAgICAgIGVycm9yU3RhdGVUZXh0Q29sb3I6dGhpcy50aGVtZVNlcnZpY2UudGhlbWUucGFsZXR0ZS5nZXRBY2NlbnQ2MDAoKSxcbiAgICAgIGxvYWRpbmdJY29uVGludDp0aGlzLnRoZW1lU2VydmljZS50aGVtZS5wYWxldHRlLmdldEFjY2VudDYwMCgpLFxuICAgICAgb25saW5lU3RhdHVzQ29sb3I6dGhpcy50aGVtZVNlcnZpY2UudGhlbWUucGFsZXR0ZS5nZXRTdWNjZXNzKCksXG4gICAgICBzZXBhcmF0b3JDb2xvcjp0aGlzLnRoZW1lU2VydmljZS50aGVtZS5wYWxldHRlLmdldEFjY2VudDQwMCgpLFxuICAgICAgcHJpdmF0ZUdyb3VwSWNvbkJhY2tncm91bmQ6dGhpcy50aGVtZVNlcnZpY2UudGhlbWUucGFsZXR0ZS5nZXRTdWNjZXNzKCksXG4gICAgICBwYXNzd29yZEdyb3VwSWNvbkJhY2tncm91bmQ6XCJSR0IoMjQ3LCAxNjUsIDApXCIsXG4gICAgICB0eXBpbmdJbmRpY3RvclRleHRDb2xvcjp0aGlzLnRoZW1lU2VydmljZS50aGVtZS5wYWxldHRlLmdldFByaW1hcnkoKSxcbiAgICAgIHR5cGluZ0luZGljdG9yVGV4dEZvbnQ6Zm9udEhlbHBlcih0aGlzLnRoZW1lU2VydmljZS50aGVtZS50eXBvZ3JhcGh5LnN1YnRpdGxlMiksXG4gICAgICB0aHJlYWRJbmRpY2F0b3JUZXh0Rm9udDpmb250SGVscGVyKHRoaXMudGhlbWVTZXJ2aWNlLnRoZW1lLnR5cG9ncmFwaHkuY2FwdGlvbjIpLFxuICAgICAgdGhyZWFkSW5kaWNhdG9yVGV4dENvbG9yOnRoaXMudGhlbWVTZXJ2aWNlLnRoZW1lLnBhbGV0dGUuZ2V0QWNjZW50NjAwKCksXG4gICAgfSlcbiAgICB0aGlzLmNvbnZlcnNhdGlvbnNTdHlsZSA9IHsuLi5kZWZhdWx0U3R5bGUsLi4udGhpcy5jb252ZXJzYXRpb25zU3R5bGV9XG4gIH1cbiAgc2V0RGF0ZVN0eWxlKCl7XG4gICAgbGV0IGRlZmF1bHRTdHlsZTpEYXRlU3R5bGUgPSBuZXcgRGF0ZVN0eWxlKHtcbiAgICAgIHRleHRGb250OiBmb250SGVscGVyKHRoaXMudGhlbWVTZXJ2aWNlLnRoZW1lLnR5cG9ncmFwaHkuY2FwdGlvbjIpLFxuICAgICAgdGV4dENvbG9yOiB0aGlzLnRoZW1lU2VydmljZS50aGVtZS5wYWxldHRlLmdldEFjY2VudDYwMCgpLFxuICAgICAgYmFja2dyb3VuZDpcInRyYW5zcGFyZW50XCJcbiAgICB9KVxuICAgIHRoaXMuZGF0ZVN0eWxlID0gey4uLmRlZmF1bHRTdHlsZSwuLi50aGlzLmRhdGVTdHlsZX1cbiAgfVxuICBzZXRSZWNlaXB0U3R5bGUoKXtcblxuICAgIGxldCBkZWZhdWx0U3R5bGU6UmVjZWlwdFN0eWxlID0gbmV3IFJlY2VpcHRTdHlsZSh7XG53YWl0SWNvblRpbnQ6dGhpcy50aGVtZVNlcnZpY2UudGhlbWUucGFsZXR0ZS5nZXRBY2NlbnQ3MDAoKSxcbnNlbnRJY29uVGludDp0aGlzLnRoZW1lU2VydmljZS50aGVtZS5wYWxldHRlLmdldEFjY2VudDYwMCgpLFxuZGVsaXZlcmVkSWNvblRpbnQ6dGhpcy50aGVtZVNlcnZpY2UudGhlbWUucGFsZXR0ZS5nZXRBY2NlbnQ2MDAoKSxcbnJlYWRJY29uVGludDp0aGlzLnRoZW1lU2VydmljZS50aGVtZS5wYWxldHRlLmdldFByaW1hcnkoKSxcbmVycm9ySWNvblRpbnQ6dGhpcy50aGVtZVNlcnZpY2UudGhlbWUucGFsZXR0ZS5nZXRFcnJvcigpLFxuaGVpZ2h0OlwiMjBweFwiLFxud2lkdGg6XCIyMHB4XCJcbiAgICB9KVxuICAgIHRoaXMucmVjZWlwdFN0eWxlID0gey4uLmRlZmF1bHRTdHlsZSwuLi50aGlzLnJlY2VpcHRTdHlsZX1cbiAgfVxuICBzZXRCYWRnZVN0eWxlKCl7XG4gICAgbGV0IGRlZmF1bHRTdHlsZTpCYWRnZVN0eWxlID0gbmV3IEJhZGdlU3R5bGUoe1xuICAgICAgdGV4dEZvbnQ6IGZvbnRIZWxwZXIodGhpcy50aGVtZVNlcnZpY2UudGhlbWUudHlwb2dyYXBoeS5zdWJ0aXRsZTIpLFxuICAgICAgdGV4dENvbG9yOiB0aGlzLnRoZW1lU2VydmljZS50aGVtZS5wYWxldHRlLmdldEFjY2VudChcImRhcmtcIiksXG4gICAgICBiYWNrZ3JvdW5kOnRoaXMudGhlbWVTZXJ2aWNlLnRoZW1lLnBhbGV0dGUuZ2V0UHJpbWFyeSgpLFxuICAgICAgYm9yZGVyUmFkaXVzOlwiMTZweFwiLFxuICAgICAgd2lkdGg6XCIyNHB4XCIsXG4gICAgfSlcbiAgICB0aGlzLmJhZGdlU3R5bGUgPSB7Li4uZGVmYXVsdFN0eWxlLC4uLnRoaXMuYmFkZ2VTdHlsZX1cbiAgfVxuICBzZXRDb25maXJtRGlhbG9nU3R5bGUoKXtcbiAgICBsZXQgZGVmYXVsdFN0eWxlOkNvbmZpcm1EaWFsb2dTdHlsZSA9IG5ldyBDb25maXJtRGlhbG9nU3R5bGUoe1xuICAgICAgY29uZmlybUJ1dHRvbkJhY2tncm91bmQ6IHRoaXMudGhlbWVTZXJ2aWNlLnRoZW1lLnBhbGV0dGUuZ2V0RXJyb3IoKSxcbiAgICAgIGNhbmNlbEJ1dHRvbkJhY2tncm91bmQ6IHRoaXMudGhlbWVTZXJ2aWNlLnRoZW1lLnBhbGV0dGUuZ2V0U2Vjb25kYXJ5KCksXG4gICAgICBjb25maXJtQnV0dG9uVGV4dENvbG9yOiB0aGlzLnRoZW1lU2VydmljZS50aGVtZS5wYWxldHRlLmdldEFjY2VudDkwMChcImxpZ2h0XCIpLFxuICAgICAgY29uZmlybUJ1dHRvblRleHRGb250OiBmb250SGVscGVyKHRoaXMudGhlbWVTZXJ2aWNlLnRoZW1lLnR5cG9ncmFwaHkudGV4dDIpLFxuICAgICAgY2FuY2VsQnV0dG9uVGV4dENvbG9yOiB0aGlzLnRoZW1lU2VydmljZS50aGVtZS5wYWxldHRlLmdldEFjY2VudDkwMChcImRhcmtcIiksXG4gICAgICBjYW5jZWxCdXR0b25UZXh0Rm9udDogZm9udEhlbHBlcih0aGlzLnRoZW1lU2VydmljZS50aGVtZS50eXBvZ3JhcGh5LnRleHQyKSxcbiAgICAgIHRpdGxlRm9udDogZm9udEhlbHBlcih0aGlzLnRoZW1lU2VydmljZS50aGVtZS50eXBvZ3JhcGh5LnRpdGxlMSksXG4gICAgICB0aXRsZUNvbG9yOiB0aGlzLnRoZW1lU2VydmljZS50aGVtZS5wYWxldHRlLmdldEFjY2VudCgpLFxuICAgICAgbWVzc2FnZVRleHRGb250OiBmb250SGVscGVyKHRoaXMudGhlbWVTZXJ2aWNlLnRoZW1lLnR5cG9ncmFwaHkuc3VidGl0bGUyKSxcbiAgICAgIG1lc3NhZ2VUZXh0Q29sb3I6IHRoaXMudGhlbWVTZXJ2aWNlLnRoZW1lLnBhbGV0dGUuZ2V0QWNjZW50NjAwKCksXG4gICAgICBiYWNrZ3JvdW5kOiB0aGlzLnRoZW1lU2VydmljZS50aGVtZS5wYWxldHRlLmdldEJhY2tncm91bmQoKSxcbiAgICAgIGhlaWdodDpcIjEwMCVcIixcbiAgICAgIHdpZHRoOlwiMzUwcHhcIixcbiAgICAgIGJvcmRlclJhZGl1czpcIjhweFwiXG4gICAgfSlcbiAgICB0aGlzLmRlbGV0ZUNvbnZlcnNhdGlvbkRpYWxvZ1N0eWxlID0gey4uLmRlZmF1bHRTdHlsZSwuLi50aGlzLmRlbGV0ZUNvbnZlcnNhdGlvbkRpYWxvZ1N0eWxlfVxuICB9XG4gIC8vIGNoZWNraW5nIGlmIHVzZXIgaGFzIGhpcyBvd24gY29uZmlndXJhdGlvbiBlbHNlIHdpbGwgdXNlIGRlZmF1bHQgY29uZmlndXJhdGlvblxuICAvKipcbiAgICogQHBhcmFtICB7T2JqZWN0PXt9fSBjb25maWdcbiAgICogQHBhcmFtICB7T2JqZWN0fSBkZWZhdWx0Q29uZmlnP1xuICAgKiBAcmV0dXJucyBkZWZhdWx0Q29uZmlnXG4gICAqL1xuICAvLyBjYWxsaW5nIHN1YnRpdGxlIGNhbGxiYWNrIGZyb20gY29uZmlndXJhdGlvbnNcbiAgLyoqXG4gICAqIEBwYXJhbSAge0NvbWV0Q2hhdC5Db252ZXJzYXRpb259IGNvbnZlcnNhdGlvblxuICAgKi9cbiAgLyoqXG4gICAqIEZldGNoZXMgdGhlIGNvdmVyc2F0aW9uIGJhc2VkIG9uIHRoZSBjb252ZXJzYXRpb25SZXF1ZXN0IGNvbmZpZ1xuICAgKi9cbiAgZmV0Y2hOZXh0Q29udmVyc2F0aW9uKCk6YW55IHtcbiAgICB0cnkge1xuXG4gICAgICByZXR1cm4gdGhpcy5yZXF1ZXN0QnVpbGRlci5mZXRjaE5leHQoKTtcbiAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICBpZih0aGlzLm9uRXJyb3Ipe1xuICAgICAgICB0aGlzLm9uRXJyb3IoQ29tZXRDaGF0RXhjZXB0aW9uKGVycm9yKSlcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgdXBkYXRlRWRpdGVkTWVzc2FnZShtZXNzYWdlOkNvbWV0Q2hhdC5UZXh0TWVzc2FnZSl7XG4gICAgbGV0IGluZGV4ID0gdGhpcy5jb252ZXJzYXRpb25MaXN0LmZpbmRJbmRleChcbiAgICAgIChjb252ZXJzYXRpb25PYmo6IENvbWV0Q2hhdC5Db252ZXJzYXRpb24pID0+IGNvbnZlcnNhdGlvbk9iai5nZXRMYXN0TWVzc2FnZSgpICYmIChjb252ZXJzYXRpb25PYmouZ2V0TGFzdE1lc3NhZ2UoKSBhcyBDb21ldENoYXQuQmFzZU1lc3NhZ2UpLmdldElkKCkgPT0gbWVzc2FnZT8uZ2V0SWQoKVxuICAgICk7XG4gICAgaWYoaW5kZXggPj0gMCl7XG4gICAgICB0aGlzLmNvbnZlcnNhdGlvbkVkaXRlZERlbGV0ZWQobWVzc2FnZSlcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIGF0dGFjaGVzIExpc3RlbmVycyBmb3IgdXNlciBhY3Rpdml0eSAsIGdyb3VwIGFjdGl2aXRpZXMgYW5kIGNhbGxpbmdcbiAgICogQHBhcmFtIGNhbGxiYWNrXG4gICAqL1xuICAvKipcbiAgICogQHBhcmFtICB7RnVuY3Rpb259IGNhbGxiYWNrXG4gICAqL1xuICBhdHRhY2hMaXN0ZW5lcnMoY2FsbGJhY2s6IGFueSkge1xuXG4gICAgdHJ5IHtcbiAgICAgIGlmICghdGhpcy5kaXNhYmxlVXNlcnNQcmVzZW5jZSkge1xuICAgICAgICBDb21ldENoYXQuYWRkVXNlckxpc3RlbmVyKFxuICAgICAgICAgIHRoaXMudXNlckxpc3RlbmVySWQsXG4gICAgICAgICAgbmV3IENvbWV0Q2hhdC5Vc2VyTGlzdGVuZXIoe1xuICAgICAgICAgICAgb25Vc2VyT25saW5lOiAob25saW5lVXNlcjogb2JqZWN0KSA9PiB7XG4gICAgICAgICAgICAgIC8qIHdoZW4gc29tZXVzZXIvZnJpZW5kIGNvbWVzIG9ubGluZSwgdXNlciB3aWxsIGJlIHJlY2VpdmVkIGhlcmUgKi9cbiAgICAgICAgICAgICAgY2FsbGJhY2soQ29tZXRDaGF0VUlLaXRDb25zdGFudHMudXNlclN0YXR1c1R5cGUub25saW5lLCBvbmxpbmVVc2VyKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBvblVzZXJPZmZsaW5lOiAob2ZmbGluZVVzZXI6IG9iamVjdCkgPT4ge1xuICAgICAgICAgICAgICAvKiB3aGVuIHNvbWV1c2VyL2ZyaWVuZCB3ZW50IG9mZmxpbmUsIHVzZXIgd2lsbCBiZSByZWNlaXZlZCBoZXJlICovXG4gICAgICAgICAgICAgIGNhbGxiYWNrKENvbWV0Q2hhdFVJS2l0Q29uc3RhbnRzLnVzZXJTdGF0dXNUeXBlLm9mZmxpbmUsIG9mZmxpbmVVc2VyKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIENvbWV0Q2hhdC5hZGRHcm91cExpc3RlbmVyKFxuICAgICAgICB0aGlzLmdyb3VwTGlzdGVuZXJJZCxcbiAgICAgICAgbmV3IENvbWV0Q2hhdC5Hcm91cExpc3RlbmVyKHtcbiAgICAgICAgICBvbkdyb3VwTWVtYmVyU2NvcGVDaGFuZ2VkOiAoXG4gICAgICAgICAgICBtZXNzYWdlOiBhbnksXG4gICAgICAgICAgICBjaGFuZ2VkVXNlcjogYW55LFxuICAgICAgICAgICAgbmV3U2NvcGU6IGFueSxcbiAgICAgICAgICAgIG9sZFNjb3BlOiBhbnksXG4gICAgICAgICAgICBjaGFuZ2VkR3JvdXA6IGFueVxuICAgICAgICAgICkgPT4ge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVDb252ZXJzYXRpb24obWVzc2FnZSlcbiAgICAgICAgICB9LFxuICAgICAgICAgIG9uR3JvdXBNZW1iZXJLaWNrZWQ6IChtZXNzYWdlOiBhbnksIGtpY2tlZFVzZXI6IGFueSwga2lja2VkQnk6IGFueSwga2lja2VkRnJvbTogYW55KSA9PiB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUNvbnZlcnNhdGlvbihtZXNzYWdlKVxuICAgICAgICAgIH0sXG4gICAgICAgICAgb25Hcm91cE1lbWJlckJhbm5lZDogKG1lc3NhZ2U6IGFueSwgYmFubmVkVXNlcjogYW55LCBiYW5uZWRCeTogYW55LCBiYW5uZWRGcm9tOiBhbnkpID0+IHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlQ29udmVyc2F0aW9uKG1lc3NhZ2UpXG4gICAgICAgICAgfSxcbiAgICAgICAgICBvbkdyb3VwTWVtYmVyVW5iYW5uZWQ6IChcbiAgICAgICAgICAgIG1lc3NhZ2U6IGFueSxcbiAgICAgICAgICAgIHVuYmFubmVkVXNlcjogYW55LFxuICAgICAgICAgICAgdW5iYW5uZWRCeTogYW55LFxuICAgICAgICAgICAgdW5iYW5uZWRGcm9tOiBhbnlcbiAgICAgICAgICApID0+IHtcbiAgICAgICAgICAgIC8vIHRoaXMudXBkYXRlQ29udmVyc2F0aW9uKG1lc3NhZ2UpXG4gICAgICAgICAgfSxcbiAgICAgICAgICBvbk1lbWJlckFkZGVkVG9Hcm91cDogKFxuICAgICAgICAgICAgbWVzc2FnZTogYW55LFxuICAgICAgICAgICAgdXNlckFkZGVkOiBhbnksXG4gICAgICAgICAgICB1c2VyQWRkZWRCeTogYW55LFxuICAgICAgICAgICAgdXNlckFkZGVkSW46IGFueVxuICAgICAgICAgICkgPT4ge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVDb252ZXJzYXRpb24obWVzc2FnZSlcbiAgICAgICAgICB9LFxuICAgICAgICAgIG9uR3JvdXBNZW1iZXJMZWZ0OiAobWVzc2FnZTogYW55LCBsZWF2aW5nVXNlcjogYW55LCBncm91cDogYW55KSA9PiB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUNvbnZlcnNhdGlvbihtZXNzYWdlKVxuICAgICAgICAgIH0sXG4gICAgICAgICAgb25Hcm91cE1lbWJlckpvaW5lZDogKG1lc3NhZ2U6IGFueSwgam9pbmVkVXNlcjogYW55LCBqb2luZWRHcm91cDogYW55KSA9PiB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUNvbnZlcnNhdGlvbihtZXNzYWdlKVxuICAgICAgICAgIH0sXG4gICAgICAgIH0pXG4gICAgICApO1xuICAgICAgQ29tZXRDaGF0LmFkZE1lc3NhZ2VMaXN0ZW5lcihcbiAgICAgICAgdGhpcy5jb252ZXJzYXRpb25MaXN0ZW5lcklkLFxuICAgICAgICBuZXcgQ29tZXRDaGF0Lk1lc3NhZ2VMaXN0ZW5lcih7XG4gICAgICAgICAgb25UZXh0TWVzc2FnZVJlY2VpdmVkOiAodGV4dE1lc3NhZ2U6IENvbWV0Q2hhdC5UZXh0TWVzc2FnZSkgPT4ge1xuICAgICAgICAgICAgY2FsbGJhY2soQ29tZXRDaGF0VUlLaXRDb25zdGFudHMubWVzc2FnZXMuVEVYVF9NRVNTQUdFX1JFQ0VJVkVELCBudWxsLCB0ZXh0TWVzc2FnZSk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBvbk1lZGlhTWVzc2FnZVJlY2VpdmVkOiAobWVkaWFNZXNzYWdlOiBDb21ldENoYXQuTWVkaWFNZXNzYWdlKSA9PiB7XG4gICAgICAgICAgICBjYWxsYmFjayhDb21ldENoYXRVSUtpdENvbnN0YW50cy5tZXNzYWdlcy5NRURJQV9NRVNTQUdFX1JFQ0VJVkVELCBudWxsLCBtZWRpYU1lc3NhZ2UpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgb25DdXN0b21NZXNzYWdlUmVjZWl2ZWQ6IChjdXN0b21NZXNzYWdlOiBDb21ldENoYXQuQmFzZU1lc3NhZ2UpID0+IHtcbiAgICAgICAgICAgICAgY2FsbGJhY2soQ29tZXRDaGF0VUlLaXRDb25zdGFudHMubWVzc2FnZXMuQ1VTVE9NX01FU1NBR0VfUkVDRUlWRUQsIG51bGwsIGN1c3RvbU1lc3NhZ2UpO1xuXG4gICAgICAgICAgfSxcbiAgICAgICAgICBvbk1lc3NhZ2VzUmVhZDogKG1lc3NhZ2VSZWNlaXB0OiBDb21ldENoYXQuTWVzc2FnZVJlY2VpcHQpID0+IHtcbiAgICAgICAgICAgIGlmICghdGhpcy5kaXNhYmxlUmVjZWlwdCkge1xuICAgICAgICAgICAgICB0aGlzLm1hcmtBc1JlYWQobWVzc2FnZVJlY2VpcHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgb25NZXNzYWdlRGVsZXRlZDogKGRlbGV0ZWRNZXNzYWdlOiBDb21ldENoYXQuQmFzZU1lc3NhZ2UpID0+IHtcbiAgICAgICAgICAgIGNhbGxiYWNrKENvbWV0Q2hhdFVJS2l0Q29uc3RhbnRzLm1lc3NhZ2VzLk1FU1NBR0VfREVMRVRFRCwgbnVsbCwgZGVsZXRlZE1lc3NhZ2UpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgb25NZXNzYWdlRWRpdGVkOiAoZWRpdGVkTWVzc2FnZTogQ29tZXRDaGF0LkJhc2VNZXNzYWdlKSA9PiB7XG4gICAgICAgICAgICBjYWxsYmFjayhDb21ldENoYXRVSUtpdENvbnN0YW50cy5tZXNzYWdlcy5NRVNTQUdFX0VESVRFRCwgbnVsbCwgZWRpdGVkTWVzc2FnZSk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBvbk1lc3NhZ2VzRGVsaXZlcmVkOiAobWVzc2FnZVJlY2VpcHQ6IENvbWV0Q2hhdC5NZXNzYWdlUmVjZWlwdCkgPT4ge1xuICAgICAgICAgICAgaWYgKCF0aGlzLmRpc2FibGVSZWNlaXB0KSB7XG4gICAgICAgICAgICAgIHRoaXMudXBkYXRlRGVsaXZlcmVkTWVzc2FnZShtZXNzYWdlUmVjZWlwdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICBvblR5cGluZ1N0YXJ0ZWQ6ICh0eXBpbmdJbmRpY2F0b3I6IENvbWV0Q2hhdC5UeXBpbmdJbmRpY2F0b3IpID0+IHtcbiAgICAgICAgICAgIGlmKCF0aGlzLmRpc2FibGVUeXBpbmcpe1xuICAgICAgICAgICAgICB0aGlzLnR5cGluZ0luZGljYXRvciA9IHR5cGluZ0luZGljYXRvclxuICAgICAgICAgICB0aGlzLnJlZi5kZXRlY3RDaGFuZ2VzKClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIG9uVHlwaW5nRW5kZWQ6ICh0eXBpbmdJbmRpY2F0b3I6IENvbWV0Q2hhdC5UeXBpbmdJbmRpY2F0b3IpID0+IHtcbiAgICAgICAgICAgIHRoaXMudHlwaW5nSW5kaWNhdG9yID0gbnVsbFxuICAgICAgICAgICAgdGhpcy5yZWYuZGV0ZWN0Q2hhbmdlcygpXG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgKTtcbiAgICAgICAgQ29tZXRDaGF0LmFkZENhbGxMaXN0ZW5lcihcbiAgICAgICAgICB0aGlzLmNhbGxMaXN0ZW5lcklkLFxuICAgICAgICAgIG5ldyBDb21ldENoYXQuQ2FsbExpc3RlbmVyKHtcbiAgICAgICAgICAgIG9uSW5jb21pbmdDYWxsUmVjZWl2ZWQ6IChjYWxsOiBDb21ldENoYXQuQ2FsbCkgPT4ge1xuICAgICAgICAgICAgICB0aGlzLnVwZGF0ZUNvbnZlcnNhdGlvbihjYWxsKVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG9uSW5jb21pbmdDYWxsQ2FuY2VsbGVkOiAoY2FsbDogQ29tZXRDaGF0LkNhbGwpID0+IHtcbiAgICAgICAgICAgICAgdGhpcy51cGRhdGVDb252ZXJzYXRpb24oY2FsbClcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBvbk91dGdvaW5nQ2FsbFJlamVjdGVkOiAoY2FsbDogQ29tZXRDaGF0LkNhbGwpID0+IHtcbiAgICAgICAgICAgICAgdGhpcy51cGRhdGVDb252ZXJzYXRpb24oY2FsbClcblxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG9uT3V0Z29pbmdDYWxsQWNjZXB0ZWQ6IChjYWxsOiBDb21ldENoYXQuQ2FsbCkgPT4ge1xuICAgICAgICAgICAgICB0aGlzLnVwZGF0ZUNvbnZlcnNhdGlvbihjYWxsKVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG9uQ2FsbEVuZGVkTWVzc2FnZVJlY2VpdmVkOihjYWxsOiBDb21ldENoYXQuQ2FsbCkgPT4ge1xuICAgICAgICAgICAgICB0aGlzLnVwZGF0ZUNvbnZlcnNhdGlvbihjYWxsKVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgfSlcbiAgICAgICAgKTtcblxuXG4gICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgICAgICAgaWYodGhpcy5vbkVycm9yKXtcbiAgICAgICAgdGhpcy5vbkVycm9yKENvbWV0Q2hhdEV4Y2VwdGlvbihlcnJvcikpXG4gICAgICB9XG4gICAgfVxuICB9XG4gIGZldGNoTmV3Q29udmVyc2F0aW9ucygpe1xuICAgIHRoaXMucmVxdWVzdEJ1aWxkZXIgPSB0aGlzLmNvbnZlcnNhdGlvbnNSZXF1ZXN0QnVpbGRlci5idWlsZCgpXG4gICAgdGhpcy5jb252ZXJzYXRpb25MaXN0ID0gW107XG4gICAgdGhpcy5nZXRDb252ZXJzYXRpb24oU3RhdGVzLmxvYWRlZCk7XG4gIH1cbiAgLyoqXG4gICAqIFJlbW92ZXMgYWxsIGxpc3RlbmVyc1xuICAgKi9cbiAgcmVtb3ZlTGlzdGVuZXJzKCkge1xuICAgIHRyeSB7XG4gICAgICBDb21ldENoYXQucmVtb3ZlTWVzc2FnZUxpc3RlbmVyKHRoaXMuY29udmVyc2F0aW9uTGlzdGVuZXJJZCk7XG4gICAgICBDb21ldENoYXQucmVtb3ZlVXNlckxpc3RlbmVyKHRoaXMudXNlckxpc3RlbmVySWQpO1xuICAgICAgQ29tZXRDaGF0LnJlbW92ZUdyb3VwTGlzdGVuZXIodGhpcy5ncm91cExpc3RlbmVySWQpO1xuICAgICAgQ29tZXRDaGF0LnJlbW92ZUNvbm5lY3Rpb25MaXN0ZW5lcih0aGlzLmNvbm5lY3Rpb25MaXN0ZW5lcklkKTtcbiAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICAgICAgICBpZih0aGlzLm9uRXJyb3Ipe1xuICAgICAgICB0aGlzLm9uRXJyb3IoQ29tZXRDaGF0RXhjZXB0aW9uKGVycm9yKSlcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIEZldGNoZXMgQ29udmVyc2F0aW9ucyBEZXRhaWxzIHdpdGggYWxsIHRoZSB1c2Vyc1xuICAgKi9cbiAgZ2V0Q29udmVyc2F0aW9uID0gKHN0YXRlczpTdGF0ZXMgPSBTdGF0ZXMubG9hZGluZykgPT4ge1xuICAgIGlmKHRoaXMucmVxdWVzdEJ1aWxkZXIgJiYgKHRoaXMucmVxdWVzdEJ1aWxkZXIgYXMgYW55KS5wYWdpbmF0aW9uICYmICgodGhpcy5yZXF1ZXN0QnVpbGRlciBhcyBhbnkpLnBhZ2luYXRpb24uY3VycmVudF9wYWdlID09IDAgfHwgKHRoaXMucmVxdWVzdEJ1aWxkZXIgYXMgYW55KS5wYWdpbmF0aW9uLmN1cnJlbnRfcGFnZSAhPSAgKHRoaXMucmVxdWVzdEJ1aWxkZXIgYXMgYW55KS5wYWdpbmF0aW9uLnRvdGFsX3BhZ2VzKSl7XG4gICAgICB0cnkge1xuICAgICAgICB0aGlzLnN0YXRlID0gc3RhdGVzXG4gICAgICAgIENvbWV0Q2hhdC5nZXRMb2dnZWRpblVzZXIoKVxuICAgICAgICAgIC50aGVuKCh1c2VyOiBDb21ldENoYXQuVXNlciB8IG51bGwpID0+IHtcbiAgICAgICAgICAgIHRoaXMubG9nZ2VkSW5Vc2VyID0gdXNlcjtcbiAgICAgICAgICAgIHRoaXMuZmV0Y2hOZXh0Q29udmVyc2F0aW9uKClcbiAgICAgICAgICAgICAgLnRoZW4oKGNvbnZlcnNhdGlvbkxpc3Q6IENvbWV0Q2hhdC5Db252ZXJzYXRpb25bXSkgPT4ge1xuXG4gICAgICAgICAgICAgICAgY29udmVyc2F0aW9uTGlzdC5mb3JFYWNoKChjb252ZXJzYXRpb246IENvbWV0Q2hhdC5Db252ZXJzYXRpb24pID0+IHtcbiAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hY3RpdmVDb252ZXJzYXRpb24gJiYgdGhpcy5hY3RpdmVDb252ZXJzYXRpb24gIT09IG51bGwgJiZcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hY3RpdmVDb252ZXJzYXRpb24uZ2V0Q29udmVyc2F0aW9uVHlwZSgpID09PSBjb252ZXJzYXRpb24uZ2V0Q29udmVyc2F0aW9uVHlwZSgpXG4gICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYWN0aXZlQ29udmVyc2F0aW9uLmdldENvbnZlcnNhdGlvbklkKCkgPT0gY29udmVyc2F0aW9uLmdldENvbnZlcnNhdGlvbklkKClcbiAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgY29udmVyc2F0aW9uLnNldFVucmVhZE1lc3NhZ2VDb3VudCgwKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGlmKHN0YXRlcyA9PSBTdGF0ZXMubG9hZGVkKXtcbiAgICAgICAgICAgICAgICAgIHRoaXMuY29udmVyc2F0aW9uTGlzdCA9IFtcbiAgICAgICAgICAgICAgICAgICAgLi4uY29udmVyc2F0aW9uTGlzdCxcbiAgICAgICAgICAgICAgICAgIF07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2V7XG4gICAgICAgICAgICAgICAgICB0aGlzLmNvbnZlcnNhdGlvbkxpc3QgPSBbXG4gICAgICAgICAgICAgICAgICAgIC4uLnRoaXMuY29udmVyc2F0aW9uTGlzdCxcbiAgICAgICAgICAgICAgICAgICAgLi4uY29udmVyc2F0aW9uTGlzdCxcbiAgICAgICAgICAgICAgICAgIF07XG4gICAgICAgICAgICAgICAgfVxuXG5cbiAgICAgICAgICAgICAgICBpZiAoKGNvbnZlcnNhdGlvbkxpc3QubGVuZ3RoIDw9IDAgJiYgdGhpcy5jb252ZXJzYXRpb25MaXN0Py5sZW5ndGggPD0gMCkgfHwgKGNvbnZlcnNhdGlvbkxpc3QubGVuZ3RoID09PSAwICYmIHRoaXMuY29udmVyc2F0aW9uTGlzdD8ubGVuZ3RoIDw9IDApKSB7XG4gICAgICAgICAgICAgICAgICB0aGlzLm5nWm9uZS5ydW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZih0aGlzLnN0YXRlICE9IFN0YXRlcy5lbXB0eSl7XG4gICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gU3RhdGVzLmVtcHR5XG4gICAgICAgICAgICAgICAgICAgICB0aGlzLnJlZi5kZXRlY3RDaGFuZ2VzKClcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVmLmRldGFjaCgpOyAvLyBEZXRhY2ggdGhlIGNoYW5nZSBkZXRlY3RvclxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZWYuZGV0ZWN0Q2hhbmdlcygpXG4gICAgICAgICAgICAgICAgICAgIGlmKHRoaXMuc3RhdGUgIT0gU3RhdGVzLmxvYWRlZCl7XG4gICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gU3RhdGVzLmxvYWRlZFxuICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZWYuZGV0ZWN0Q2hhbmdlcygpXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlZi5kZXRhY2goKTsgLy8gRGV0YWNoIHRoZSBjaGFuZ2UgZGV0ZWN0b3JcbiAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYodGhpcy5maXJzdFJlbG9hZCl7XG4gICAgICAgICAgICAgICAgICB0aGlzLmF0dGFjaENvbm5lY3Rpb25MaXN0ZW5lcnMoKTtcbiAgICAgICAgICAgICAgICAgIHRoaXMuZmlyc3RSZWxvYWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgLmNhdGNoKChlcnJvcjogQ29tZXRDaGF0LkNvbWV0Q2hhdEV4Y2VwdGlvbikgPT4ge1xuICAgICAgICAgICAgICAgIGlmKHRoaXMub25FcnJvcil7XG4gICAgICAgICAgICAgICAgICB0aGlzLm9uRXJyb3IoZXJyb3IpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmKHRoaXMuY29udmVyc2F0aW9uTGlzdD8ubGVuZ3RoIDw9IDApe1xuICAgICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IFN0YXRlcy5lcnJvcjtcbiAgICAgICAgICAgICAgICB0aGlzLnJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICB9KVxuICAgICAgICAgIC5jYXRjaCgoZXJyb3I6IENvbWV0Q2hhdC5Db21ldENoYXRFeGNlcHRpb24pID0+IHtcbiAgICAgICAgICAgIGlmKHRoaXMub25FcnJvcil7XG4gICAgICAgICAgICAgIHRoaXMub25FcnJvcihlcnJvcilcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBTdGF0ZXMuZXJyb3JcbiAgICAgICAgICAgIHRoaXMucmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICB9KTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgICAgICAgICAgaWYodGhpcy5vbkVycm9yKXtcbiAgICAgICAgICB0aGlzLm9uRXJyb3IoQ29tZXRDaGF0RXhjZXB0aW9uKGVycm9yKSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICB9XG4gIGlzUmVjZWlwdERpc2FibGUoY29udmVyc2F0aW9uOkNvbWV0Q2hhdC5Db252ZXJzYXRpb24pe1xuICAgIGxldCBpdGVtOmFueSA9IGNvbnZlcnNhdGlvbi5nZXRDb252ZXJzYXRpb25XaXRoKClcbiAgICBsZXQgbWVzc2FnZTpDb21ldENoYXQuQmFzZU1lc3NhZ2UgPSBjb252ZXJzYXRpb24uZ2V0TGFzdE1lc3NhZ2UoKVxuICAgIGlmKCF0aGlzLmRpc2FibGVSZWNlaXB0ICYmIG1lc3NhZ2UgJiYgbWVzc2FnZT8uZ2V0Q2F0ZWdvcnkoKSAhPSBDb21ldENoYXRVSUtpdENvbnN0YW50cy5NZXNzYWdlQ2F0ZWdvcnkuYWN0aW9uICYmIG1lc3NhZ2U/LmdldENhdGVnb3J5KCkgIT0gQ29tZXRDaGF0VUlLaXRDb25zdGFudHMuTWVzc2FnZUNhdGVnb3J5LmNhbGxcbiAgICAmJiAoIXRoaXMudHlwaW5nSW5kaWNhdG9yIHx8IChpdGVtPy51aWQgIT0gdGhpcy50eXBpbmdJbmRpY2F0b3IuZ2V0UmVjZWl2ZXJJZCgpICYmIGl0ZW0/Lmd1aWQgIT0gdGhpcy50eXBpbmdJbmRpY2F0b3IuZ2V0UmVjZWl2ZXJJZCgpKSlcbiAgICAmJiBtZXNzYWdlLmdldFNlbmRlcigpPy5nZXRVaWQoKSA9PSB0aGlzLmxvZ2dlZEluVXNlcj8uZ2V0VWlkKClcbiAgIClcbiAgICB7XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cbiAgICBlbHNle1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBVcGRhdGVzIHRoZSBjb252ZXJzYXRpb24gbGlzdCdzIGxhc3QgbWVzc2FnZSAsIGJhZGdlQ291bnQgLCB1c2VyIHByZXNlbmNlIGJhc2VkIG9uIGFjdGl2aXRpZXMgcHJvcGFnYXRlZCBieSBsaXN0ZW5lcnNcbiAgICovXG4gIGNvbnZlcnNhdGlvblVwZGF0ZWQgPSAoXG4gICAga2V5OiBhbnksXG4gICAgaXRlbTogQ29tZXRDaGF0LlVzZXIgfCBDb21ldENoYXQuR3JvdXAgfCBudWxsID0gbnVsbCxcbiAgICBtZXNzYWdlOiBDb21ldENoYXQuQmFzZU1lc3NhZ2UsXG4gICAgb3B0aW9ucyA9IG51bGxcbiAgKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIHN3aXRjaCAoa2V5KSB7XG4gICAgICAgIGNhc2UgQ29tZXRDaGF0VUlLaXRDb25zdGFudHMudXNlclN0YXR1c1R5cGUub25saW5lOlxuICAgICAgICBjYXNlIENvbWV0Q2hhdFVJS2l0Q29uc3RhbnRzLnVzZXJTdGF0dXNUeXBlLm9ubGluZToge1xuICAgICAgICAgIHRoaXMudXBkYXRlVXNlcihpdGVtKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlIENvbWV0Q2hhdFVJS2l0Q29uc3RhbnRzLm1lc3NhZ2VzLk1FU1NBR0VfUkVBRDoge1xuICAgICAgICAgIHRoaXMudXBkYXRlQ29udmVyc2F0aW9uKG1lc3NhZ2UsIGZhbHNlKVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgQ29tZXRDaGF0VUlLaXRDb25zdGFudHMubWVzc2FnZXMuTUVTU0FHRV9ERUxJVkVSRUQ6IHtcbiAgICAgICAgICB0aGlzLnVwZGF0ZUNvbnZlcnNhdGlvbihtZXNzYWdlLCBmYWxzZSlcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlIENvbWV0Q2hhdFVJS2l0Q29uc3RhbnRzLm1lc3NhZ2VzLlRFWFRfTUVTU0FHRV9SRUNFSVZFRDpcbiAgICAgICAgY2FzZSBDb21ldENoYXRVSUtpdENvbnN0YW50cy5tZXNzYWdlcy5NRURJQV9NRVNTQUdFX1JFQ0VJVkVEOlxuICAgICAgICBjYXNlIENvbWV0Q2hhdFVJS2l0Q29uc3RhbnRzLm1lc3NhZ2VzLkNVU1RPTV9NRVNTQUdFX1JFQ0VJVkVEOlxuICAgICAgICAgIGlmKCF0aGlzLmRpc2FibGVSZWNlaXB0KXtcbiAgICAgICAgICAgIHRoaXMubWFya01lc3NhZ2VBc0RlbGl2ZXJlZChtZXNzYWdlKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy51cGRhdGVDb252ZXJzYXRpb24obWVzc2FnZSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgQ29tZXRDaGF0VUlLaXRDb25zdGFudHMuZ3JvdXBNZW1iZXJBY3Rpb24uQURERUQ6XG4gICAgICAgIGNhc2UgQ29tZXRDaGF0VUlLaXRDb25zdGFudHMuZ3JvdXBNZW1iZXJBY3Rpb24uQkFOTkVEOlxuICAgICAgICBjYXNlIENvbWV0Q2hhdFVJS2l0Q29uc3RhbnRzLmdyb3VwTWVtYmVyQWN0aW9uLkpPSU5FRDpcbiAgICAgICAgY2FzZSBDb21ldENoYXRVSUtpdENvbnN0YW50cy5ncm91cE1lbWJlckFjdGlvbi5LSUNLRUQ6XG4gICAgICAgIGNhc2UgQ29tZXRDaGF0VUlLaXRDb25zdGFudHMuZ3JvdXBNZW1iZXJBY3Rpb24uTEVGVDpcbiAgICAgICAgY2FzZSBDb21ldENoYXRVSUtpdENvbnN0YW50cy5ncm91cE1lbWJlckFjdGlvbi5VTkJBTk5FRDpcbiAgICAgICAgY2FzZSBDb21ldENoYXRVSUtpdENvbnN0YW50cy5ncm91cE1lbWJlckFjdGlvbi5TQ09QRV9DSEFOR0U6XG4gICAgICAgICAgdGhpcy51cGRhdGVDb252ZXJzYXRpb24obWVzc2FnZSlcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBDb21ldENoYXRVSUtpdENvbnN0YW50cy5tZXNzYWdlcy5NRVNTQUdFX0VESVRFRDpcbiAgICAgICAgY2FzZSBDb21ldENoYXRVSUtpdENvbnN0YW50cy5tZXNzYWdlcy5NRVNTQUdFX0RFTEVURUQ6XG4gICAgICAgICAgdGhpcy5jb252ZXJzYXRpb25FZGl0ZWREZWxldGVkKG1lc3NhZ2UpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgICAgICAgIGlmKHRoaXMub25FcnJvcil7XG4gICAgICAgIHRoaXMub25FcnJvcihDb21ldENoYXRFeGNlcHRpb24oZXJyb3IpKVxuICAgICAgfVxuICAgIH1cbiAgfTtcbiAgLyoqXG4gICAqIEBwYXJhbSAge0NvbWV0Q2hhdC5CYXNlTWVzc2FnZX0gbWVzc2FnZVxuICAgKi9cbiAgbWFya01lc3NhZ2VBc0RlbGl2ZXJlZCA9IChtZXNzYWdlOiBDb21ldENoYXQuQmFzZU1lc3NhZ2UpID0+IHtcbiAgICAvL2lmIGNoYXQgd2luZG93IGlzIG5vdCBvcGVuLCBtYXJrIG1lc3NhZ2UgYXMgZGVsaXZlcmVkXG4gICAgaWYgKHRoaXMuYWN0aXZlQ29udmVyc2F0aW9uPy5nZXRDb252ZXJzYXRpb25UeXBlKCkgPT0gQ29tZXRDaGF0VUlLaXRDb25zdGFudHMuTWVzc2FnZVJlY2VpdmVyVHlwZS51c2VyKSB7XG4gICAgICBpZiAoKCF0aGlzLmFjdGl2ZUNvbnZlcnNhdGlvbiB8fCAodGhpcy5hY3RpdmVDb252ZXJzYXRpb24/LmdldENvbnZlcnNhdGlvbldpdGgoKSBhcyBDb21ldENoYXQuVXNlcik/LmdldFVpZCgpICE9PSBtZXNzYWdlPy5nZXRTZW5kZXIoKT8uZ2V0VWlkKCkpXG4gICAgICAgICYmICFtZXNzYWdlLmhhc093blByb3BlcnR5KFwiZGVsaXZlcmVkQXRcIikpIHtcbiAgICAgICAgQ29tZXRDaGF0Lm1hcmtBc0RlbGl2ZXJlZChtZXNzYWdlKVxuICAgICAgfVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIGlmICgoIXRoaXMuYWN0aXZlQ29udmVyc2F0aW9uIHx8ICh0aGlzLmFjdGl2ZUNvbnZlcnNhdGlvbj8uZ2V0Q29udmVyc2F0aW9uV2l0aCgpIGFzIENvbWV0Q2hhdC5Hcm91cCk/LmdldEd1aWQoKSAhPT0gbWVzc2FnZT8uZ2V0UmVjZWl2ZXJJZCgpKVxuICAgICAgICAmJiAhbWVzc2FnZS5oYXNPd25Qcm9wZXJ0eShcImRlbGl2ZXJlZEF0XCIpKSB7XG4gICAgICAgIENvbWV0Q2hhdC5tYXJrQXNEZWxpdmVyZWQobWVzc2FnZSlcbiAgICAgIH1cbiAgICB9XG4gIH07XG4gIC8qKlxuICAgKiBAcGFyYW0gIHtDb21ldENoYXQuQmFzZU1lc3NhZ2V9IHJlYWRNZXNzYWdlXG4gICAqL1xuICBnZXRVaW54ID0gKCkgPT4ge1xuICAgIHJldHVybiBTdHJpbmcoTWF0aC5yb3VuZCgrbmV3IERhdGUoKSAvIDEwMDApKVxuICB9XG4gIG1hcmtBc1JlYWQocmVhZE1lc3NhZ2U6IENvbWV0Q2hhdC5NZXNzYWdlUmVjZWlwdCkge1xuICAgIGxldCBjb252ZXJzYXRpb25saXN0OiBDb21ldENoYXQuQ29udmVyc2F0aW9uW10gPSBbLi4udGhpcy5jb252ZXJzYXRpb25MaXN0XVxuICAgIGNvbnN0IGNvbnZlcnNhdGlvbktleSA9IGNvbnZlcnNhdGlvbmxpc3QuZmluZEluZGV4KFxuICAgICAgKGNvbnZlcnNhdGlvbk9iajogQ29tZXRDaGF0LkNvbnZlcnNhdGlvbikgPT4gKGNvbnZlcnNhdGlvbk9iai5nZXRMYXN0TWVzc2FnZSgpIGFzIENvbWV0Q2hhdC5CYXNlTWVzc2FnZSkuZ2V0UmVjZWl2ZXJJZCgpID09IHJlYWRNZXNzYWdlLmdldFNlbmRlcigpLmdldFVpZCgpXG4gICAgKTtcbiAgICBpZiAoY29udmVyc2F0aW9uS2V5ID4gLTEpIHtcbiAgICAgIGxldCBuZXdDb252ZXJzYXRpb25PYmplY3QhOiBDb21ldENoYXQuQ29udmVyc2F0aW9uO1xuICAgICAgaWYgKCEoY29udmVyc2F0aW9ubGlzdFtjb252ZXJzYXRpb25LZXldLmdldExhc3RNZXNzYWdlKCkgYXMgQ29tZXRDaGF0LlRleHRNZXNzYWdlKS5nZXRSZWFkQXQoKSkge1xuICAgICAgICBuZXdDb252ZXJzYXRpb25PYmplY3QgPSBjb252ZXJzYXRpb25saXN0W2NvbnZlcnNhdGlvbktleV07XG4gICAgICAgIChuZXdDb252ZXJzYXRpb25PYmplY3QuZ2V0TGFzdE1lc3NhZ2UoKSBhcyBDb21ldENoYXQuVGV4dE1lc3NhZ2UpLnNldFJlYWRBdChyZWFkTWVzc2FnZS5nZXRSZWFkQXQoKSk7XG4gICAgICAgIChuZXdDb252ZXJzYXRpb25PYmplY3QuZ2V0TGFzdE1lc3NhZ2UoKSBhcyBDb21ldENoYXQuVGV4dE1lc3NhZ2UpLnNldE11aWQodGhpcy5nZXRVaW54KCkpO1xuICAgICAgICBjb252ZXJzYXRpb25saXN0LnNwbGljZShjb252ZXJzYXRpb25LZXksIDEsIG5ld0NvbnZlcnNhdGlvbk9iamVjdCk7XG4gICAgICAgIHRoaXMuY29udmVyc2F0aW9uTGlzdCA9IFsuLi5jb252ZXJzYXRpb25saXN0XTtcbiAgICAgICAgdGhpcy5yZWYuZGV0ZWN0Q2hhbmdlcygpXG5cbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIFVwZGF0ZXMgRGV0YWlsIHdoZW4gdXNlciBjb21lcyBvbmxpbmUvb2ZmbGluZVxuICAgKiBAcGFyYW1cbiAgICovXG4gIC8qKlxuICAgKiBAcGFyYW0gIHtDb21ldENoYXQuVXNlcnxDb21ldENoYXQuR3JvdXB8bnVsbH0gdXNlclxuICAgKi9cbiAgdXBkYXRlVXNlcih1c2VyOiBDb21ldENoYXQuVXNlciB8IENvbWV0Q2hhdC5Hcm91cCB8IG51bGwpIHtcbiAgICB0cnkge1xuICAgICAgLy93aGVuIHVzZXIgdXBkYXRlc1xuICAgICAgY29uc3QgY29udmVyc2F0aW9ubGlzdDogQ29tZXRDaGF0LkNvbnZlcnNhdGlvbltdID0gWy4uLnRoaXMuY29udmVyc2F0aW9uTGlzdF07XG4gICAgICAvL0dldHMgdGhlIGluZGV4IG9mIHVzZXIgd2hpY2ggY29tZXMgb2ZmbGluZS9vbmxpbmVcbiAgICAgIGNvbnN0IGNvbnZlcnNhdGlvbktleSA9IGNvbnZlcnNhdGlvbmxpc3QuZmluZEluZGV4KFxuICAgICAgICAoY29udmVyc2F0aW9uT2JqOiBDb21ldENoYXQuQ29udmVyc2F0aW9uKSA9PlxuICAgICAgICAgIGNvbnZlcnNhdGlvbk9iai5nZXRDb252ZXJzYXRpb25UeXBlKCkgPT09IENvbWV0Q2hhdFVJS2l0Q29uc3RhbnRzLk1lc3NhZ2VSZWNlaXZlclR5cGUudXNlciAmJlxuICAgICAgICAgIChjb252ZXJzYXRpb25PYmouZ2V0Q29udmVyc2F0aW9uV2l0aCgpIGFzIENvbWV0Q2hhdC5Vc2VyKS5nZXRVaWQoKSA9PT0gKHVzZXIgYXMgQ29tZXRDaGF0LlVzZXIpLmdldFVpZCgpXG4gICAgICApO1xuICAgICAgaWYgKGNvbnZlcnNhdGlvbktleSA+IC0xKSB7XG4gICAgICAgIGxldCBjb252ZXJzYXRpb25PYmo6IENvbWV0Q2hhdC5Db252ZXJzYXRpb24gPSBjb252ZXJzYXRpb25saXN0W2NvbnZlcnNhdGlvbktleV07XG4gICAgICAgIGxldCBjb252ZXJzYXRpb25XaXRoT2JqOiBDb21ldENoYXQuVXNlciA9IChjb252ZXJzYXRpb25PYmouZ2V0Q29udmVyc2F0aW9uV2l0aCgpIGFzIENvbWV0Q2hhdC5Vc2VyKVxuICAgICAgICBjb252ZXJzYXRpb25XaXRoT2JqLnNldFN0YXR1cygodXNlciBhcyBDb21ldENoYXQuVXNlcikuZ2V0U3RhdHVzKCkpXG4gICAgICAgIGxldCBuZXdDb252ZXJzYXRpb25PYmo6IENvbWV0Q2hhdC5Db252ZXJzYXRpb24gPSBjb252ZXJzYXRpb25PYmpcbiAgICAgICAgbmV3Q29udmVyc2F0aW9uT2JqLnNldENvbnZlcnNhdGlvbldpdGgoY29udmVyc2F0aW9uV2l0aE9iaik7XG4gICAgICAgIChuZXdDb252ZXJzYXRpb25PYmouZ2V0TGFzdE1lc3NhZ2UoKSBhcyBDb21ldENoYXQuVGV4dE1lc3NhZ2UpLnNldE11aWQodGhpcy5nZXRVaW54KCkpXG4gICAgICAgIGNvbnZlcnNhdGlvbmxpc3Quc3BsaWNlKGNvbnZlcnNhdGlvbktleSwgMSwgbmV3Q29udmVyc2F0aW9uT2JqKTtcbiAgICAgICAgdGhpcy5jb252ZXJzYXRpb25MaXN0ID0gY29udmVyc2F0aW9ubGlzdDtcbiAgICAgICAgdGhpcy5yZWYuZGV0ZWN0Q2hhbmdlcygpXG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgICAgICAgaWYodGhpcy5vbkVycm9yKXtcbiAgICAgICAgdGhpcy5vbkVycm9yKENvbWV0Q2hhdEV4Y2VwdGlvbihlcnJvcikpXG4gICAgICB9XG4gICAgICB0aGlzLnJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKlxuICAgKiBHZXRzIHRoZSBsYXN0IG1lc3NhZ2VcbiAgICogQHBhcmFtIGNvbnZlcnNhdGlvblxuICAvKipcbiAgICogQHBhcmFtICB7Q29tZXRDaGF0LkJhc2VNZXNzYWdlfSBtZXNzYWdlXG4gICAqIEBwYXJhbSAge0NvbWV0Q2hhdC5Db252ZXJzYXRpb258e319IGNvbnZlcnNhdGlvblxuICAgKi9cbiAgbWFrZUxhc3RNZXNzYWdlKG1lc3NhZ2U6IENvbWV0Q2hhdC5CYXNlTWVzc2FnZSwgY29udmVyc2F0aW9uOiBDb21ldENoYXQuQ29udmVyc2F0aW9uIHwge30gPSB7fSkge1xuICAgIGNvbnN0IG5ld01lc3NhZ2UgPSBtZXNzYWdlO1xuICAgIHJldHVybiBuZXdNZXNzYWdlO1xuICB9XG4gIC8qKlxuICAgKlxuICAgKiBVcGRhdGVzIENvbnZlcnNhdGlvbnMgYXMgVGV4dC9DdXN0b20gTWVzc2FnZXMgYXJlIHJlY2VpdmVkXG4gICAqIEBwYXJhbVxuICAgKlxuICAgKi9cbiAgLyoqXG4gICAqIEBwYXJhbSAge0NvbWV0Q2hhdC5CYXNlTWVzc2FnZX0gbWVzc2FnZVxuICAgKiBAcGFyYW0gIHtib29sZWFufSBub3RpZmljYXRpb25cbiAgICovXG4gIHVwZGF0ZUNvbnZlcnNhdGlvbihtZXNzYWdlOiBDb21ldENoYXQuQmFzZU1lc3NhZ2UsIG5vdGlmaWNhdGlvbjogYm9vbGVhbiA9IHRydWUpIHtcbiAgICBsZXQgbWV0YWRhdGE6YW55O1xuICAgIGlmKG1lc3NhZ2UgaW5zdGFuY2VvZiBDb21ldENoYXQuQ3VzdG9tTWVzc2FnZSl7XG4gICAgICBtZXRhZGF0YSA9IG1lc3NhZ2UuZ2V0TWV0YWRhdGEoKVxuICAgIH1cbiAgICB0cnkge1xuICAgICAgdGhpcy5tYWtlQ29udmVyc2F0aW9uKG1lc3NhZ2UpXG4gICAgICAgIC50aGVuKChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgICAgY29uc3QgY29udmVyc2F0aW9uS2V5ID0gcmVzcG9uc2UuY29udmVyc2F0aW9uS2V5O1xuICAgICAgICAgIGNvbnN0IGNvbnZlcnNhdGlvbk9iajogQ29tZXRDaGF0LkNvbnZlcnNhdGlvbiA9IHJlc3BvbnNlLmNvbnZlcnNhdGlvbk9iajtcbiAgICAgICAgICBjb25zdCBjb252ZXJzYXRpb25MaXN0ID0gcmVzcG9uc2UuY29udmVyc2F0aW9uTGlzdDtcbiAgICAgICAgICBpZiAoY29udmVyc2F0aW9uS2V5ID4gLTEpIHtcbiAgICAgICAgICAgIC8vIGlmIHNlbmRlciBpcyBub3QgbG9nZ2VkIGluIHVzZXIgdGhlbiAgaW5jcmVtZW50IGNvdW50XG4gICAgICAgICAgICBsZXQgdW5yZWFkTWVzc2FnZUNvdW50ID0gKHRoaXMubG9nZ2VkSW5Vc2VyPy5nZXRVaWQoKSAhPSBtZXNzYWdlLmdldFNlbmRlcigpLmdldFVpZCgpIHx8IHRoaXMubG9nZ2VkSW5Vc2VyPy5nZXRVaWQoKSA9PSBtZXNzYWdlLmdldFJlY2VpdmVySWQoKSkgJiYgKCFtZXRhZGF0YSB8fCAhbWV0YWRhdGEuaGFzT3duUHJvcGVydHkoXCJpbmNyZW1lbnRVbnJlYWRDb3VudFwiKSB8fCBtZXRhZGF0YS5pbmNyZW1lbnRVbnJlYWRDb3VudCA9PSB0cnVlKSA/IHRoaXMubWFrZVVucmVhZE1lc3NhZ2VDb3VudChcbiAgICAgICAgICAgICAgY29udmVyc2F0aW9uT2JqXG4gICAgICAgICAgICApIDogdGhpcy5tYWtlVW5yZWFkTWVzc2FnZUNvdW50KGNvbnZlcnNhdGlvbk9iaikgLSAxO1xuICAgICAgICAgICAgbGV0IGxhc3RNZXNzYWdlT2JqOiBDb21ldENoYXQuQmFzZU1lc3NhZ2UgPSB0aGlzLm1ha2VMYXN0TWVzc2FnZShtZXNzYWdlLCBjb252ZXJzYXRpb25PYmopO1xuICAgICAgICAgICAgbGV0IG5ld0NvbnZlcnNhdGlvbk9iajogQ29tZXRDaGF0LkNvbnZlcnNhdGlvbiA9IGNvbnZlcnNhdGlvbk9ialxuICAgICAgICAgICAgbmV3Q29udmVyc2F0aW9uT2JqLnNldExhc3RNZXNzYWdlKGxhc3RNZXNzYWdlT2JqKTtcbiAgICAgICAgICAgIG5ld0NvbnZlcnNhdGlvbk9iai5zZXRVbnJlYWRNZXNzYWdlQ291bnQodW5yZWFkTWVzc2FnZUNvdW50KTtcbiAgICAgICAgICAgIChuZXdDb252ZXJzYXRpb25PYmouZ2V0TGFzdE1lc3NhZ2UoKSBhcyBDb21ldENoYXQuVGV4dE1lc3NhZ2UpLnNldE11aWQodGhpcy5nZXRVaW54KCkpXG4gICAgICAgICAgICBjb252ZXJzYXRpb25MaXN0LnNwbGljZShjb252ZXJzYXRpb25LZXksIDEpO1xuICAgICAgICAgICAgY29udmVyc2F0aW9uTGlzdC51bnNoaWZ0KG5ld0NvbnZlcnNhdGlvbk9iaik7XG4gICAgICAgICAgICB0aGlzLmNvbnZlcnNhdGlvbkxpc3QgPSBbLi4uY29udmVyc2F0aW9uTGlzdF07XG4gICAgICAgICAgICBpZih0aGlzLmxvZ2dlZEluVXNlcj8uZ2V0VWlkKCkgPT0gbWVzc2FnZS5nZXRTZW5kZXIoKS5nZXRVaWQoKSl7XG4gICAgICAgICAgICAgICAgIHRoaXMuYWN0aXZlQ29udmVyc2F0aW9uID0gbmV3Q29udmVyc2F0aW9uT2JqXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobm90aWZpY2F0aW9uICYmIHRoaXMubG9nZ2VkSW5Vc2VyPy5nZXRVaWQoKSAhPSBtZXNzYWdlPy5nZXRTZW5kZXIoKT8uZ2V0VWlkKCkpIHtcbiAgICAgICAgICAgICAgdGhpcy5wbGF5QXVkaW8oKTtcbiAgICAgICAgICAgICAgdGhpcy5yZWYuZGV0ZWN0Q2hhbmdlcygpXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbGV0IGxhc3RNZXNzYWdlT2JqID0gdGhpcy5tYWtlTGFzdE1lc3NhZ2UobWVzc2FnZSk7XG4gICAgICAgICAgICBjb252ZXJzYXRpb25PYmouc2V0TGFzdE1lc3NhZ2UobGFzdE1lc3NhZ2VPYmopO1xuICAgICAgICAgICAgY29udmVyc2F0aW9uT2JqLnNldFVucmVhZE1lc3NhZ2VDb3VudCgxKVxuICAgICAgICAgICAgY29udmVyc2F0aW9uTGlzdC51bnNoaWZ0KGNvbnZlcnNhdGlvbk9iaik7XG4gICAgICAgICAgICB0aGlzLmNvbnZlcnNhdGlvbkxpc3QgPSBjb252ZXJzYXRpb25MaXN0O1xuICAgICAgICAgICAgdGhpcy5yZWYuZGV0ZWN0Q2hhbmdlcygpXG4gICAgICAgICAgICAvLyB0aGlzLnJlZi5kZXRlY3RDaGFuZ2VzKClcbiAgICAgICAgICAgIGlmIChub3RpZmljYXRpb24gJiYgdGhpcy5sb2dnZWRJblVzZXI/LmdldFVpZCgpICE9IG1lc3NhZ2U/LmdldFNlbmRlcigpPy5nZXRVaWQoKSkge1xuICAgICAgICAgICAgICB0aGlzLnBsYXlBdWRpbygpO1xuICAgICAgICAgICAgICB0aGlzLnJlZi5kZXRlY3RDaGFuZ2VzKClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYodGhpcy5zdGF0ZSAhPSBTdGF0ZXMubG9hZGVkKXtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBTdGF0ZXMubG9hZGVkXG5cbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5yZWYuZGV0ZWN0Q2hhbmdlcygpXG4gICAgICAgIH0pXG4gICAgICAgIC5jYXRjaCgoZXJyb3I6IENvbWV0Q2hhdC5Db21ldENoYXRFeGNlcHRpb24pID0+IHtcbiAgICAgICAgICBpZih0aGlzLm9uRXJyb3Ipe1xuICAgICAgICAgICAgdGhpcy5vbkVycm9yKGVycm9yKVxuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLnJlZi5kZXRlY3RDaGFuZ2VzKClcbiAgICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgICAgICAgaWYodGhpcy5vbkVycm9yKXtcbiAgICAgICAgdGhpcy5vbkVycm9yKENvbWV0Q2hhdEV4Y2VwdGlvbihlcnJvcikpXG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMucmVmLmRldGVjdENoYW5nZXMoKVxuICB9XG4gIHVwZGF0ZURlbGl2ZXJlZE1lc3NhZ2UobWVzc2FnZVJlY2VpcHQ6IENvbWV0Q2hhdC5NZXNzYWdlUmVjZWlwdCkge1xuICAgIGxldCBjb252ZXJzYXRpb25MaXN0OiBDb21ldENoYXQuQ29udmVyc2F0aW9uW10gPSBbLi4udGhpcy5jb252ZXJzYXRpb25MaXN0XTtcbiAgICBsZXQgY29udmVyc2F0aW9uS2V5OiBudW1iZXIgPSBjb252ZXJzYXRpb25MaXN0LmZpbmRJbmRleChcbiAgICAgIChjOiBDb21ldENoYXQuQ29udmVyc2F0aW9uKSA9PiAoYy5nZXRMYXN0TWVzc2FnZSgpIGFzIENvbWV0Q2hhdC5UZXh0TWVzc2FnZSkuZ2V0SWQoKSA9PSBOdW1iZXIobWVzc2FnZVJlY2VpcHQuZ2V0TWVzc2FnZUlkKCkpXG4gICAgKTtcbiAgICBsZXQgY29udmVyc2F0aW9uT2JqOiBDb21ldENoYXQuQ29udmVyc2F0aW9uO1xuICAgIGlmIChjb252ZXJzYXRpb25LZXkgPiAtMSkge1xuICAgICAgY29udmVyc2F0aW9uT2JqID0gY29udmVyc2F0aW9uTGlzdFtjb252ZXJzYXRpb25LZXldO1xuICAgICAgaWYgKCEoY29udmVyc2F0aW9uT2JqLmdldExhc3RNZXNzYWdlKCkgYXMgQ29tZXRDaGF0LlRleHRNZXNzYWdlKS5nZXREZWxpdmVyZWRBdCgpKSB7XG4gICAgICAgIChjb252ZXJzYXRpb25PYmouZ2V0TGFzdE1lc3NhZ2UoKSBhcyBDb21ldENoYXQuVGV4dE1lc3NhZ2UpLnNldERlbGl2ZXJlZEF0KE51bWJlcih0aGlzLmdldFVpbngoKSkpO1xuICAgICAgICAoY29udmVyc2F0aW9uT2JqLmdldExhc3RNZXNzYWdlKCkgYXMgQ29tZXRDaGF0LlRleHRNZXNzYWdlKS5zZXRNdWlkKHRoaXMuZ2V0VWlueCgpKTtcbiAgICAgICAgY29udmVyc2F0aW9uTGlzdC5zcGxpY2UoY29udmVyc2F0aW9uS2V5LCAxLCBjb252ZXJzYXRpb25PYmopXG4gICAgICAgIHRoaXMuY29udmVyc2F0aW9uTGlzdCA9IFsuLi5jb252ZXJzYXRpb25MaXN0XTtcbiAgICAgICAgdGhpcy5yZWYuZGV0ZWN0Q2hhbmdlcygpXG4gICAgICB9XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKlxuICAgKiBHZXRzIFRoZSBDb3VudCBvZiBVbnJlYWQgTWVzc2FnZXNcbiAgICogQHBhcmFtXG4gICAqL1xuICAvKipcbiAgICogQHBhcmFtICB7YW55fSBjb252ZXJzYXRpb25cbiAgICogQHBhcmFtICB7YW55fSBvcGVyYXRvclxuICAgKi9cbiAgbWFrZVVucmVhZE1lc3NhZ2VDb3VudChjb252ZXJzYXRpb246IENvbWV0Q2hhdC5Db252ZXJzYXRpb24sIG9wZXJhdG9yOiBhbnkgPSBudWxsKSB7XG4gICAgaWYgKE9iamVjdC5rZXlzKGNvbnZlcnNhdGlvbikubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gMTtcbiAgICB9XG4gICAgbGV0IHVucmVhZE1lc3NhZ2VDb3VudDpudW1iZXIgPSBjb252ZXJzYXRpb24uZ2V0VW5yZWFkTWVzc2FnZUNvdW50KCk7XG4gICAgaWYgKFxuICAgICAgdGhpcy5hY3RpdmVDb252ZXJzYXRpb24gJiZcbiAgICAgIHRoaXMuYWN0aXZlQ29udmVyc2F0aW9uLmdldENvbnZlcnNhdGlvbklkKCkgPT09IGNvbnZlcnNhdGlvbi5nZXRDb252ZXJzYXRpb25JZCgpXG4gICAgKSB7XG4gICAgICB1bnJlYWRNZXNzYWdlQ291bnQgKz0gMTtcbiAgICB9IGVsc2UgaWYgKFxuICAgICAgKHRoaXMuYWN0aXZlQ29udmVyc2F0aW9uICYmXG4gICAgICAgIHRoaXMuYWN0aXZlQ29udmVyc2F0aW9uLmhhc093blByb3BlcnR5KFwiZ3VpZFwiKSAmJlxuICAgICAgICBjb252ZXJzYXRpb24uZ2V0Q29udmVyc2F0aW9uV2l0aCgpLmhhc093blByb3BlcnR5KFwiZ3VpZFwiKSAmJlxuICAgICAgICAodGhpcy5hY3RpdmVDb252ZXJzYXRpb24uZ2V0Q29udmVyc2F0aW9uV2l0aCgpIGFzIENvbWV0Q2hhdC5Hcm91cCkuZ2V0R3VpZCgpID09PSAoY29udmVyc2F0aW9uLmdldENvbnZlcnNhdGlvbldpdGgoKSBhcyBDb21ldENoYXQuR3JvdXApLmdldEd1aWQoKSkgfHxcbiAgICAgICh0aGlzLmFjdGl2ZUNvbnZlcnNhdGlvbiAmJlxuICAgICAgICB0aGlzLmFjdGl2ZUNvbnZlcnNhdGlvbi5oYXNPd25Qcm9wZXJ0eShcInVpZFwiKSAmJlxuICAgICAgICBjb252ZXJzYXRpb24uZ2V0Q29udmVyc2F0aW9uV2l0aCgpLmhhc093blByb3BlcnR5KFwidWlkXCIpICYmXG4gICAgICAgICh0aGlzLmFjdGl2ZUNvbnZlcnNhdGlvbi5nZXRDb252ZXJzYXRpb25XaXRoKCkgYXMgQ29tZXRDaGF0LlVzZXIpLmdldFVpZCgpID09PSAoY29udmVyc2F0aW9uLmdldENvbnZlcnNhdGlvbldpdGgoKSBhcyBDb21ldENoYXQuVXNlcikuZ2V0VWlkKCkpXG4gICAgKSB7XG4gICAgICB1bnJlYWRNZXNzYWdlQ291bnQgPSAwO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAob3BlcmF0b3IgJiYgb3BlcmF0b3IgPT09IFwiZGVjcmVtZW50XCIpIHtcbiAgICAgICAgdW5yZWFkTWVzc2FnZUNvdW50ID0gdW5yZWFkTWVzc2FnZUNvdW50ID8gdW5yZWFkTWVzc2FnZUNvdW50IC0gMSA6IDA7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB1bnJlYWRNZXNzYWdlQ291bnQgPSB1bnJlYWRNZXNzYWdlQ291bnQgKyAxO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdW5yZWFkTWVzc2FnZUNvdW50O1xuICB9XG4gIC8qKlxuICAgKiBDaGFuZ2VzIGRldGFpbCBvZiBjb252ZXJzYXRpb25zXG4gICAqIEBwYXJhbVxuICAgKi9cbiAgLyoqXG4gICAqIEBwYXJhbSAge0NvbWV0Q2hhdC5CYXNlTWVzc2FnZX0gbWVzc2FnZVxuICAgKi9cbiAgbWFrZUNvbnZlcnNhdGlvbihtZXNzYWdlOiBDb21ldENoYXQuQmFzZU1lc3NhZ2UpIHtcbiAgICBjb25zdCBwcm9taXNlID0gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgbGV0IGNvbnZlcnNhdGlvbktleTogbnVtYmVyID0gdGhpcy5jb252ZXJzYXRpb25MaXN0LmZpbmRJbmRleChcbiAgICAgICAgKGM6IENvbWV0Q2hhdC5Db252ZXJzYXRpb24pID0+IGM/LmdldENvbnZlcnNhdGlvbklkKCkgPT09IG1lc3NhZ2U/LmdldENvbnZlcnNhdGlvbklkKClcbiAgICAgICk7XG4gICAgICBpZihjb252ZXJzYXRpb25LZXkgPj0gMCl7XG4gICAgICAgIGxldCBjb252ZXJzYXRpb246Q29tZXRDaGF0LkNvbnZlcnNhdGlvbiA9IHRoaXMuY29udmVyc2F0aW9uTGlzdFtjb252ZXJzYXRpb25LZXldO1xuICAgICAgICByZXNvbHZlKHtcbiAgICAgICAgICBjb252ZXJzYXRpb25LZXk6IGNvbnZlcnNhdGlvbktleSxcbiAgICAgICAgICBjb252ZXJzYXRpb25PYmo6IGNvbnZlcnNhdGlvbixcbiAgICAgICAgICBjb252ZXJzYXRpb25MaXN0OiB0aGlzLmNvbnZlcnNhdGlvbkxpc3QsXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIGVsc2V7XG4gICAgICBDb21ldENoYXQuQ29tZXRDaGF0SGVscGVyLmdldENvbnZlcnNhdGlvbkZyb21NZXNzYWdlKG1lc3NhZ2UpXG4gICAgICAudGhlbigoY29udmVyc2F0aW9uOiBDb21ldENoYXQuQ29udmVyc2F0aW9uKSA9PiB7XG4gICAgICAgIGlmKGNvbnZlcnNhdGlvbj8uZ2V0Q29udmVyc2F0aW9uV2l0aCgpIGluc3RhbmNlb2YgQ29tZXRDaGF0Lkdyb3VwICYmICEoY29udmVyc2F0aW9uLmdldENvbnZlcnNhdGlvbldpdGgoKSBhcyBDb21ldENoYXQuR3JvdXApLmdldFNjb3BlKCkpe1xuICAgICAgICAgIChjb252ZXJzYXRpb24uZ2V0Q29udmVyc2F0aW9uV2l0aCgpIGFzIENvbWV0Q2hhdC5Hcm91cCkuc2V0SGFzSm9pbmVkKHRydWUpO1xuICAgICAgICAgIChjb252ZXJzYXRpb24uZ2V0Q29udmVyc2F0aW9uV2l0aCgpIGFzIENvbWV0Q2hhdC5Hcm91cCkuc2V0U2NvcGUoQ29tZXRDaGF0VUlLaXRDb25zdGFudHMuZ3JvdXBNZW1iZXJTY29wZS5wYXJ0aWNpcGFudClcbiAgICAgICAgfVxuICAgICAgICByZXNvbHZlKHtcbiAgICAgICAgICBjb252ZXJzYXRpb25LZXk6IC0xLFxuICAgICAgICAgIGNvbnZlcnNhdGlvbk9iajogY29udmVyc2F0aW9uLFxuICAgICAgICAgIGNvbnZlcnNhdGlvbkxpc3Q6IHRoaXMuY29udmVyc2F0aW9uTGlzdCxcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMucmVmLmRldGVjdENoYW5nZXMoKVxuICAgICAgfSlcbiAgICAgIC5jYXRjaCgoZXJyb3I6IENvbWV0Q2hhdC5Db21ldENoYXRFeGNlcHRpb24pID0+IHJlamVjdChlcnJvcikpO1xuICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gcHJvbWlzZTtcbiAgfVxuICAvKipcbiAgICogVXBkYXRlcyBDb252ZXJzYXRpb24gVmlldyB3aGVuIG1lc3NhZ2UgaXMgZWRpdGVkIG9yIGRlbGV0ZWRcbiAgICovXG4gIGNvbnZlcnNhdGlvbkVkaXRlZERlbGV0ZWQobWVzc2FnZTogQ29tZXRDaGF0LkJhc2VNZXNzYWdlKSB7XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMubWFrZUNvbnZlcnNhdGlvbihtZXNzYWdlKVxuICAgICAgICAudGhlbigocmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgICAgIGNvbnN0IGNvbnZlcnNhdGlvbktleSA9IHJlc3BvbnNlLmNvbnZlcnNhdGlvbktleTtcbiAgICAgICAgICBjb25zdCBjb252ZXJzYXRpb25PYmo6IENvbWV0Q2hhdC5Db252ZXJzYXRpb24gPSByZXNwb25zZS5jb252ZXJzYXRpb25PYmo7XG4gICAgICAgICAgY29uc3QgY29udmVyc2F0aW9uTGlzdCA9IHJlc3BvbnNlLmNvbnZlcnNhdGlvbkxpc3Q7XG4gICAgICAgICAgaWYgKGNvbnZlcnNhdGlvbktleSA+IC0xKSB7XG4gICAgICAgICAgICBsZXQgbGFzdE1lc3NhZ2VPYmo6IENvbWV0Q2hhdC5CYXNlTWVzc2FnZSA9IGNvbnZlcnNhdGlvbk9iai5nZXRMYXN0TWVzc2FnZSgpO1xuICAgICAgICAgICAgaWYgKGxhc3RNZXNzYWdlT2JqLmdldElkKCkgPT09IG1lc3NhZ2UuZ2V0SWQoKSkge1xuICAgICAgICAgICAgICBjb252ZXJzYXRpb25PYmouc2V0TGFzdE1lc3NhZ2UobWVzc2FnZSk7XG4gICAgICAgICAgICAgIChjb252ZXJzYXRpb25PYmouZ2V0TGFzdE1lc3NhZ2UoKSBhcyBDb21ldENoYXQuVGV4dE1lc3NhZ2UpLnNldE11aWQodGhpcy5nZXRVaW54KCkpO1xuICAgICAgICAgICAgICBjb252ZXJzYXRpb25MaXN0LnNwbGljZShjb252ZXJzYXRpb25LZXksIDEsIGNvbnZlcnNhdGlvbk9iaik7XG4gICAgICAgICAgICAgIHRoaXMuY29udmVyc2F0aW9uTGlzdCA9IFsuLi5jb252ZXJzYXRpb25MaXN0XTtcbiAgICAgICAgICAgICAgdGhpcy5yZWYuZGV0ZWN0Q2hhbmdlcygpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goKGVycm9yOiBDb21ldENoYXQuQ29tZXRDaGF0RXhjZXB0aW9uKSA9PiB7XG4gICAgICAgICAgaWYodGhpcy5vbkVycm9yKXtcbiAgICAgICAgICAgIHRoaXMub25FcnJvcihlcnJvcilcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5yZWYuZGV0ZWN0Q2hhbmdlcygpXG4gICAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGVycm9yOmFueSkge1xuICAgICAgICAgICAgaWYodGhpcy5vbkVycm9yKXtcbiAgICAgICAgdGhpcy5vbkVycm9yKENvbWV0Q2hhdEV4Y2VwdGlvbihlcnJvcikpXG4gICAgICB9XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBJZiBVc2VyIHNjcm9sbHMgdG8gdGhlIGJvdHRvbSBvZiB0aGUgY3VycmVudCBDb252ZXJzYXRpb24gbGlzdCB0aGFuIGZldGNoIG5leHQgaXRlbXMgb2YgdGhlIENvbnZlcnNhdGlvbiBsaXN0IGFuZCBhcHBlbmRcbiAgICogQHBhcmFtIEV2ZW50XG4gICAqL1xuICAvKipcbiAgICogUGxheXMgQXVkaW8gV2hlbiBNZXNzYWdlIGlzIFJlY2VpdmVkXG4gICAqL1xuICBwbGF5QXVkaW8oKSB7XG4gICAgdHJ5IHtcbiAgICAgIGlmKCF0aGlzLmRpc2FibGVTb3VuZEZvck1lc3NhZ2VzKXtcbiAgICAgICAgaWYodGhpcy5jdXN0b21Tb3VuZEZvck1lc3NhZ2VzKXtcbiAgICAgICAgICBDb21ldENoYXRTb3VuZE1hbmFnZXIucGxheSh0aGlzLmN1c3RvbVNvdW5kRm9yTWVzc2FnZXMpXG4gICAgICAgIH1cbiAgICAgICAgZWxzZXtcbiAgICAgICAgICBDb21ldENoYXRTb3VuZE1hbmFnZXIucGxheShDb21ldENoYXRTb3VuZE1hbmFnZXIuU291bmQuaW5jb21pbmdNZXNzYWdlRnJvbU90aGVyKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBlbHNle1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICAgICAgICBpZih0aGlzLm9uRXJyb3Ipe1xuICAgICAgICB0aGlzLm9uRXJyb3IoQ29tZXRDaGF0RXhjZXB0aW9uKGVycm9yKSlcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgLypcbiAgICogVXBkYXRlcyB0aGUgY29udmVzYXRpb24gbGlzdCB3aGVuIGRlbGV0ZWQuXG4gICAqIEFkZGluZyBDb252ZXJzYXRpb24gT2JqZWN0IHRvIENvbWV0Y2hhdFNlcnZpY2VcbiAgICovXG4gIC8qKlxuICAgKiBAcGFyYW0gIHtDb21ldENoYXQuQ29udmVyc2F0aW9ufHt9fSBjb252ZXJzYXRpb25cbiAgICovXG4gIHVwZGF0ZUNvbnZlcnNhdGlvbkxpc3QoY29udmVyc2F0aW9uOiBDb21ldENoYXQuQ29udmVyc2F0aW9uIHwgbnVsbCkge1xuICAgIGxldCBpbmRleCA9IHRoaXMuY29udmVyc2F0aW9uTGlzdC5maW5kSW5kZXgoKGVsZW1lbnQ6IENvbWV0Q2hhdC5Db252ZXJzYXRpb24pID0+IGVsZW1lbnQ/LmdldENvbnZlcnNhdGlvbklkKCkgPT0gY29udmVyc2F0aW9uPy5nZXRDb252ZXJzYXRpb25JZCgpKTtcbiAgICB0aGlzLmNvbnZlcnNhdGlvbkxpc3Quc3BsaWNlKGluZGV4LCAxKTtcbiAgICB0aGlzLnJlZi5kZXRlY3RDaGFuZ2VzKClcbiAgfVxuICAvKipcbiAgICogc2hvd2luZyBkaWFsb2cgZm9yIGNvbmZpcm0gYW5kIGNhbmNlbFxuICAgKiBAcGFyYW0gIHtDb21ldENoYXQuQ29udmVyc2F0aW9ufHt9fSBjb252ZXJzYXRpb25cbiAgICovXG4gIHNob3dDb25maXJtYXRpb25EaWFsb2cgPSAoY29udmVyc2F0aW9uOiBDb21ldENoYXQuQ29udmVyc2F0aW9uKSA9PiB7XG4gICAgdGhpcy5pc0RpYWxvZ09wZW4gPSB0cnVlO1xuICAgIHRoaXMuY29udmVyc2F0aW9uVG9CZURlbGV0ZWQgPSBjb252ZXJzYXRpb247XG4gICAgdGhpcy5yZWYuZGV0ZWN0Q2hhbmdlcygpXG4gIH1cbiAgb25PcHRpb25DbGljayhldmVudDphbnksY29udmVyc2F0aW9uOiBDb21ldENoYXQuQ29udmVyc2F0aW9uKXtcbiAgICBsZXQgb3B0aW9uOkNvbWV0Q2hhdE9wdGlvbiA9IGV2ZW50Py5kZXRhaWw/LmRhdGFcbiAgICB0aGlzLmNvbnZlcnNhdGlvblRvQmVEZWxldGVkID0gY29udmVyc2F0aW9uO1xuICAgIGlmKG9wdGlvbil7XG4gICAgICBvcHRpb24ub25DbGljayEoKVxuICAgIH1cbiAgfVxuICAvKipcbiAgICogc2hvdyBjb25maXJtIGRpYWxvZyBzY3JlZW5cbiAgICogQHBhcmFtICB7Q29tZXRDaGF0LkNvbnZlcnNhdGlvbnx7fX0gY29udmVyc2F0b25cbiAgICovXG4gIC8vIGNoZWNrIGlzIHRoZXJlIGlzIGFueSBhY3RpdmUgY29udmVyc2F0aW9uIGFuZCBtYXJrIGl0IGFzIGFjdGl2ZVxuICBnZXRBY3RpdmVDb252ZXJzYXRpb24oY29udmVyc2F0aW9uOiBDb21ldENoYXQuQ29udmVyc2F0aW9uKSB7XG4gICAgaWYodGhpcy5zZWxlY3Rpb25Nb2RlID09IFNlbGVjdGlvbk1vZGUubm9uZSB8fCAhdGhpcy5zZWxlY3Rpb25Nb2RlICkge1xuICAgICAgcmV0dXJuIHRoaXMuYWN0aXZlQ29udmVyc2F0aW9uICYmICh0aGlzLmFjdGl2ZUNvbnZlcnNhdGlvbiBhcyBhbnkpPy5jb252ZXJzYXRpb25JZCA9PSAoY29udmVyc2F0aW9uIGFzIGFueSk/LmNvbnZlcnNhdGlvbklkXG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBoYW5kbGUgY29uZmlybSBkaWFsb2cgcmVzcG9uc2VcbiAgICogQHBhcmFtICB7c3RyaW5nfSB2YWx1ZVxuICAgKi9cbiAgLy8gY2FsbGluZyBjb21ldGNoYXQuZGVsZXRlQ29udmVyc2F0aW9uIG1ldGhvZFxuICBkZWxldGVTZWxlY3RlZENvbnZlcnNhdGlvbigpe1xuICAgIGlmICh0aGlzLmNvbnZlcnNhdGlvblRvQmVEZWxldGVkKSB7XG4gICAgICBpZiAodGhpcy5hY3RpdmVDb252ZXJzYXRpb24gJiYgdGhpcy5hY3RpdmVDb252ZXJzYXRpb24uZ2V0Q29udmVyc2F0aW9uSWQoKSA9PSB0aGlzLmNvbnZlcnNhdGlvblRvQmVEZWxldGVkLmdldENvbnZlcnNhdGlvbklkKCkpIHtcbiAgICAgICAgdGhpcy5hY3RpdmVDb252ZXJzYXRpb24gPSBudWxsXG4gICAgICB9XG4gICAgICBsZXQgY29udmVyc2F0aW9uV2l0aDtcbiAgICAgIGxldCBjb252ZXJzYXRpb25UeXBlID0gdGhpcy5jb252ZXJzYXRpb25Ub0JlRGVsZXRlZC5nZXRDb252ZXJzYXRpb25UeXBlKCk7XG4gICAgICBpZiAoY29udmVyc2F0aW9uVHlwZSA9PT0gQ29tZXRDaGF0VUlLaXRDb25zdGFudHMuTWVzc2FnZVJlY2VpdmVyVHlwZS51c2VyKSB7XG4gICAgICAgIGNvbnZlcnNhdGlvbldpdGggPSAodGhpcy5jb252ZXJzYXRpb25Ub0JlRGVsZXRlZC5nZXRDb252ZXJzYXRpb25XaXRoKCkgYXMgQ29tZXRDaGF0LlVzZXIpLmdldFVpZCgpXG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgY29udmVyc2F0aW9uV2l0aCA9ICh0aGlzLmNvbnZlcnNhdGlvblRvQmVEZWxldGVkLmdldENvbnZlcnNhdGlvbldpdGgoKSBhcyBDb21ldENoYXQuR3JvdXApLmdldEd1aWQoKVxuICAgICAgfVxuICAgICAgQ29tZXRDaGF0LmRlbGV0ZUNvbnZlcnNhdGlvbihjb252ZXJzYXRpb25XaXRoLCBjb252ZXJzYXRpb25UeXBlKS50aGVuKFxuICAgICAgICBkZWxldGVkQ29udmVyc2F0aW9uID0+IHtcbiAgICAgICAgICBDb21ldENoYXRDb252ZXJzYXRpb25FdmVudHMuY2NDb252ZXJzYXRpb25EZWxldGVkLm5leHQodGhpcy5jb252ZXJzYXRpb25Ub0JlRGVsZXRlZCEpXG4gICAgICAgICAgdGhpcy51cGRhdGVDb252ZXJzYXRpb25MaXN0KHRoaXMuY29udmVyc2F0aW9uVG9CZURlbGV0ZWQpXG4gICAgICAgICAgdGhpcy5jb252ZXJzYXRpb25Ub0JlRGVsZXRlZCA9IG51bGw7XG4gICAgICAgICAgdGhpcy5yZWYuZGV0ZWN0Q2hhbmdlcygpXG4gICAgICAgIH0sXG4gICAgICApO1xuICAgICAgdGhpcy5pc0RpYWxvZ09wZW4gPSBmYWxzZVxuICAgICAgdGhpcy5yZWYuZGV0ZWN0Q2hhbmdlcygpXG4gICAgfVxuICB9XG4gIC8vIGV4cG9zZWQgbWV0aG9kcyB0byB1c2Vycy5cbiAgdXBkYXRlTGFzdE1lc3NhZ2UobWVzc2FnZTogQ29tZXRDaGF0LkJhc2VNZXNzYWdlKSB7XG4gICAgdGhpcy51cGRhdGVDb252ZXJzYXRpb24obWVzc2FnZSk7XG4gIH1cbiAgcmVtb3ZlQ29udmVyc2F0aW9uKGNvbnZlcnNhdGlvbjogQ29tZXRDaGF0LkNvbnZlcnNhdGlvbikge1xuICAgIHRoaXMudXBkYXRlQ29udmVyc2F0aW9uTGlzdChjb252ZXJzYXRpb24pO1xuICB9XG4gIHN0eWxlczogYW55ID0ge1xuICAgIHdyYXBwZXJTdHlsZTogKCkgPT4ge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaGVpZ2h0OiB0aGlzLmNvbnZlcnNhdGlvbnNTdHlsZS5oZWlnaHQsXG4gICAgICAgIHdpZHRoOiB0aGlzLmNvbnZlcnNhdGlvbnNTdHlsZS53aWR0aCxcbiAgICAgICAgYm9yZGVyOiB0aGlzLmNvbnZlcnNhdGlvbnNTdHlsZS5ib3JkZXIgfHwgYDFweCBzb2xpZCAke3RoaXMudGhlbWVTZXJ2aWNlLnRoZW1lLnBhbGV0dGUuZ2V0QWNjZW50NDAwKCl9YCxcbiAgICAgICAgYm9yZGVyUmFkaXVzOiB0aGlzLmNvbnZlcnNhdGlvbnNTdHlsZS5ib3JkZXJSYWRpdXMsXG4gICAgICAgIGJhY2tncm91bmQ6IHRoaXMuY29udmVyc2F0aW9uc1N0eWxlLmJhY2tncm91bmQgfHwgdGhpcy50aGVtZVNlcnZpY2UudGhlbWUucGFsZXR0ZS5nZXRCYWNrZ3JvdW5kKCksXG4gICAgICB9XG4gICAgfSxcbiAgfVxuICBzdWJ0aXRsZVN0eWxlID0gKGNvbnZlcnNhdGlvbjphbnkpID0+IHtcbiAgIGlmKHRoaXMudHlwaW5nSW5kaWNhdG9yICYmICggdGhpcy50eXBpbmdJbmRpY2F0b3IuZ2V0UmVjZWl2ZXJUeXBlKCkgPT0gQ29tZXRDaGF0VUlLaXRDb25zdGFudHMuTWVzc2FnZVJlY2VpdmVyVHlwZS51c2VyICYmIHRoaXMudHlwaW5nSW5kaWNhdG9yLmdldFNlbmRlcigpLmdldFVpZCgpID09IGNvbnZlcnNhdGlvbi5jb252ZXJzYXRpb25XaXRoPy51aWQgfHwgdGhpcy50eXBpbmdJbmRpY2F0b3IuZ2V0UmVjZWl2ZXJJZCgpID09IGNvbnZlcnNhdGlvbi5jb252ZXJzYXRpb25XaXRoPy5ndWlkKSl7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBmb250OiB0aGlzLmNvbnZlcnNhdGlvbnNTdHlsZS50eXBpbmdJbmRpY3RvclRleHRDb2xvcixcbiAgICAgICAgY29sb3I6IHRoaXMuY29udmVyc2F0aW9uc1N0eWxlLnR5cGluZ0luZGljdG9yVGV4dENvbG9yXG4gICAgICB9XG4gICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIGZvbnQ6ICAgIHRoaXMuY29udmVyc2F0aW9uc1N0eWxlLmxhc3RNZXNzYWdlVGV4dEZvbnQsXG4gICAgICBjb2xvcjogICB0aGlzLmNvbnZlcnNhdGlvbnNTdHlsZS5sYXN0TWVzc2FnZVRleHRDb2xvclxuICAgIH1cbiAgfVxuICBpdGVtVGhyZWFkSW5kaWNhdG9yU3R5bGUgPSAoKSA9PiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHRleHRGb250OiB0aGlzLmNvbnZlcnNhdGlvbnNTdHlsZS50aHJlYWRJbmRpY2F0b3JUZXh0Rm9udCB8fCBmb250SGVscGVyKHRoaXMudGhlbWVTZXJ2aWNlLnRoZW1lLnR5cG9ncmFwaHkuY2FwdGlvbjIpLFxuICAgICAgdGV4dENvbG9yOiB0aGlzLmNvbnZlcnNhdGlvbnNTdHlsZS50aHJlYWRJbmRpY2F0b3JUZXh0Q29sb3IgfHwgdGhpcy50aGVtZVNlcnZpY2UudGhlbWUucGFsZXR0ZS5nZXRBY2NlbnQ0MDAoKSxcbiAgICB9O1xuICB9XG59XG4iLCI8ZGl2ICBjbGFzcz1cImNjLWNvbnZlcnNhdGlvbnNcIiBbbmdTdHlsZV09XCJzdHlsZXMud3JhcHBlclN0eWxlKClcIj5cbiAgPGNvbWV0Y2hhdC1iYWNrZHJvcCBbYmFja2Ryb3BTdHlsZV09XCJiYWNrZHJvcFN0eWxlXCIgKm5nSWY9XCJpc0RpYWxvZ09wZW5cIj5cbiAgICA8Y29tZXRjaGF0LWNvbmZpcm0tZGlhbG9nIFt0aXRsZV09XCJjb25maXJtRGlhbG9nVGl0bGVcIiBbbWVzc2FnZVRleHRdPVwiY29uZmlybURpYWxvZ01lc3NhZ2VcIiBbY2FuY2VsQnV0dG9uVGV4dF09XCJjYW5jZWxCdXR0b25UZXh0XCIgW2NvbmZpcm1CdXR0b25UZXh0XT1cImNvbmZpcm1CdXR0b25UZXh0XCIgKGNjLWNvbmZpcm0tY2xpY2tlZCk9XCJvbkNvbmZpcm1DbGljaygpXCIgKGNjLWNhbmNlbC1jbGlja2VkKT1cIm9uQ2FuY2VsQ2xpY2soKVwiIFtjb25maXJtRGlhbG9nU3R5bGVdPVwiZGVsZXRlQ29udmVyc2F0aW9uRGlhbG9nU3R5bGVcIj5cbiAgICA8L2NvbWV0Y2hhdC1jb25maXJtLWRpYWxvZz5cbiAgPC9jb21ldGNoYXQtYmFja2Ryb3A+XG4gIDxkaXYgY2xhc3M9XCJjYy1jb252ZXJzYXRpb25zX19tZW51c1wiICpuZ0lmPVwibWVudVwiPlxuXG4gICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwibWVudVwiPlxuICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgPC9kaXY+XG48Y29tZXRjaGF0LWxpc3QgW3N0YXRlXT1cInN0YXRlXCJcbltzZWFyY2hJY29uVVJMXT1cInNlYXJjaEljb25VUkxcIiAgW2hpZGVFcnJvcl09XCJoaWRlRXJyb3JcIlxuW2VtcHR5U3RhdGVUZXh0XT1cImVtcHR5U3RhdGVUZXh0XCIgW2xvYWRpbmdJY29uVVJMXT1cImxvYWRpbmdJY29uVVJMXCJcblt0aXRsZUFsaWdubWVudF09XCJ0aXRsZUFsaWdubWVudFwiIFtsb2FkaW5nVmlld109XCJsb2FkaW5nU3RhdGVWaWV3XCIgW2xpc3RTdHlsZV09XCJsaXN0U3R5bGVcIiBbZW1wdHlTdGF0ZVZpZXddPVwiZW1wdHlTdGF0ZVZpZXdcIlxuW2Vycm9yU3RhdGVUZXh0XT1cImVycm9yU3RhdGVUZXh0XCIgW2Vycm9yVmlld109XCJlcnJvclN0YXRlVmlld1wiXG5bb25TY3JvbGxlZFRvQm90dG9tXT1cImdldENvbnZlcnNhdGlvblwiIFtsaXN0XT1cImNvbnZlcnNhdGlvbkxpc3RcIiAgW2xpc3RJdGVtVmlld109XCJsaXN0SXRlbVZpZXcgPyBsaXN0SXRlbVZpZXcgOiBsaXN0SXRlbVwiIFt0aXRsZV09XCJ0aXRsZVwiICBbaGlkZVNlYXJjaF09XCJoaWRlU2VhcmNoXCI+PC9jb21ldGNoYXQtbGlzdD5cbjwvZGl2PlxuPG5nLXRlbXBsYXRlICNsaXN0SXRlbSBsZXQtY29udmVyc2F0aW9uPlxuICA8Y29tZXRjaGF0LWxpc3QtaXRlbSBbaGlkZVNlcGFyYXRvcl09XCJoaWRlU2VwYXJhdG9yXCIgW2F2YXRhclN0eWxlXT1cImF2YXRhclN0eWxlXCIgW3N0YXR1c0luZGljYXRvclN0eWxlXT1cInNldFN0YXR1c0luZGljYXRvclN0eWxlKGNvbnZlcnNhdGlvbilcIlxuICBbaWRdPVwiY29udmVyc2F0aW9uPy5jb252ZXJzYXRpb25JZFwiIFtpc0FjdGl2ZV09XCJnZXRBY3RpdmVDb252ZXJzYXRpb24oY29udmVyc2F0aW9uKVwiXG4gIChjYy1saXN0aXRlbS1jbGlja2VkKT1cIm9uQ2xpY2soY29udmVyc2F0aW9uKVwiIFt0aXRsZV09XCJjb252ZXJzYXRpb24/LmNvbnZlcnNhdGlvbldpdGg/Lm5hbWVcIlxuICBbc3RhdHVzSW5kaWNhdG9ySWNvbl09XCJjaGVja0dyb3VwVHlwZShjb252ZXJzYXRpb24pXCIgW3N0YXR1c0luZGljYXRvckNvbG9yXT1cImNoZWNrU3RhdHVzVHlwZShjb252ZXJzYXRpb24pXCJcbiAgW2xpc3RJdGVtU3R5bGVdPVwibGlzdEl0ZW1TdHlsZVwiIFthdmF0YXJVUkxdPVwiY29udmVyc2F0aW9uPy5jb252ZXJzYXRpb25XaXRoPy5hdmF0YXJcIiBbYXZhdGFyTmFtZV09XCJjb252ZXJzYXRpb24/LmNvbnZlcnNhdGlvbldpdGg/Lm5hbWVcIj5cbiAgICA8ZGl2IHNsb3Q9XCJzdWJ0aXRsZVZpZXdcIiAqbmdJZj1cInN1YnRpdGxlVmlldztlbHNlIGNvbnZlcnNhdGlvblN1YnRpdGxlXCI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwic3VidGl0bGVWaWV3XCI+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgPC9kaXY+XG4gIDxuZy10ZW1wbGF0ZSAjY29udmVyc2F0aW9uU3VidGl0bGU+XG5cbiAgPGRpdiBjbGFzcz1cImNjLWNvbnZlcnNhdGlvbnNfX3N1YnRpdGxlLXZpZXcgXCIgc2xvdD1cInN1YnRpdGxlVmlld1wiID5cbiAgICA8ZGl2IGNsYXNzPVwiY2MtY29udmVyc2F0aW9uc19fdGhyZWFkdmlld1wiICpuZ0lmPVwiY29udmVyc2F0aW9uPy5sYXN0TWVzc2FnZT8ucGFyZW50TWVzc2FnZUlkXCI+XG4gICAgICA8Y29tZXRjaGF0LWxhYmVsIFtsYWJlbFN0eWxlXT1cIml0ZW1UaHJlYWRJbmRpY2F0b3JTdHlsZSgpXCIgW3RleHRdPVwidGhyZWFkSW5kaWNhdG9yVGV4dFwiPiA8L2NvbWV0Y2hhdC1sYWJlbD5cbiAgICAgIDxjb21ldGNoYXQtaWNvbiBbVVJMXT1cInRocmVhZEljb25VUkxcIiBbaWNvblN0eWxlXT1cImljb25TdHlsZVwiPjwvY29tZXRjaGF0LWljb24+XG5cbiAgICA8L2Rpdj5cbjxkaXYgY2xhc3M9XCJjYy1jb252ZXJzYXRpb25zX19zdWJ0aXRsZVwiPlxuICA8ZGl2IGNsYXNzPVwiY2MtY29udmVyc2F0aW9uc19fcmVhZHJlY2VpcHRcIiAqbmdJZj1cImlzUmVjZWlwdERpc2FibGUoY29udmVyc2F0aW9uKVwiPlxuICAgIDxjb21ldGNoYXQtcmVjZWlwdCAgW3JlY2VpcHRdPVwiZ2V0TWVzc2FnZVJlY2VpcHQoY29udmVyc2F0aW9uKVwiIFtyZWNlaXB0U3R5bGVdPVwicmVjZWlwdFN0eWxlXCIgW3NlbnRJY29uXT1cInNlbnRJY29uXCIgW2Vycm9ySWNvbl09XCJlcnJvckljb25cIiBbZGVsaXZlcmVkSWNvbl09XCJkZWxpdmVyZWRJY29uXCIgW3JlYWRJY29uXT1cInJlYWRJY29uXCI+PC9jb21ldGNoYXQtcmVjZWlwdD5cbiAgPC9kaXY+XG5cbiAgPGRpdiBbbmdTdHlsZV09XCJzdWJ0aXRsZVN0eWxlKGNvbnZlcnNhdGlvbilcIiBjbGFzcz1cImNjLXN1YnRpdGxlX190ZXh0XCI+IHt7c2V0U3VidGl0bGUoY29udmVyc2F0aW9uKX19IDwvZGl2PlxuPC9kaXY+XG5cbiAgPC9kaXY+XG4gIDwvbmctdGVtcGxhdGU+XG4gIDxkaXYgc2xvdD1cIm1lbnVWaWV3XCIgY2xhc3M9XCJjYy1jb252ZXJzYXRpb25zX19vcHRpb25zdmlld1wiICpuZ0lmPVwic2VsZWN0aW9uTW9kZSA9PSBzZWxlY3Rpb25tb2RlRW51bS5ub25lXCI+XG4gICAgPGRpdiAqbmdJZj1cIm9wdGlvbnNcIj5cbiAgICAgIDxjb21ldGNoYXQtbWVudS1saXN0IFtkYXRhXT1cIm9wdGlvbnMoY29udmVyc2F0aW9uKVwiIChjYy1tZW51LWNsaWNrZWQpPVwib25PcHRpb25DbGljaygkZXZlbnQsY29udmVyc2F0aW9uKVwiIFttZW51TGlzdFN0eWxlXT1cIm1lbnVzdHlsZVwiPlxuXG4gICAgICA8L2NvbWV0Y2hhdC1tZW51LWxpc3Q+XG4gICAgPC9kaXY+XG4gICAgPGRpdiAqbmdJZj1cIiFvcHRpb25zICYmIGNvbnZlcnNhdGlvbk9wdGlvbnNcIj5cbiAgICAgIDxjb21ldGNoYXQtbWVudS1saXN0IFtkYXRhXT1cImNvbnZlcnNhdGlvbk9wdGlvbnNcIiAoY2MtbWVudS1jbGlja2VkKT1cIm9uT3B0aW9uQ2xpY2soJGV2ZW50LGNvbnZlcnNhdGlvbilcIiBbbWVudUxpc3RTdHlsZV09XCJtZW51c3R5bGVcIj5cblxuICAgICAgPC9jb21ldGNoYXQtbWVudS1saXN0PlxuICAgIDwvZGl2PlxuPC9kaXY+XG48ZGl2IHNsb3Q9XCJ0YWlsVmlld1wiICBjbGFzcz1cImNjLWNvbnZlcnNhdGlvbnNfX3RhaWwtdmlld1wiPlxuPGRpdiBjbGFzcz1cInRhaWxfX3ZpZXdcIiAqbmdJZj1cInNlbGVjdGlvbk1vZGUgPT0gc2VsZWN0aW9ubW9kZUVudW0ubm9uZVwiPlxuICA8ZGl2IGNsYXNzPVwiY2MtZGF0ZVwiPlxuICAgIDxjb21ldGNoYXQtZGF0ZSBbZGF0ZVN0eWxlXT1cImRhdGVTdHlsZVwiIFt0aW1lc3RhbXBdPVwiY29udmVyc2F0aW9uPy5sYXN0TWVzc2FnZT8uc2VudEF0XCIgW3BhdHRlcm5dPVwiZ2V0RGF0ZSgpXCI+PC9jb21ldGNoYXQtZGF0ZT5cbiAgPC9kaXY+XG4gIDxkaXYgY2xhc3M9XCJjYy1jb252ZXJzYXRpb25zX19iYWRnZVwiPlxuICAgICA8Y29tZXRjaGF0LWJhZGdlIFtjb3VudF09XCJjb252ZXJzYXRpb24/LnVucmVhZE1lc3NhZ2VDb3VudFwiIFtiYWRnZVN0eWxlXT1cImJhZGdlU3R5bGVcIj48L2NvbWV0Y2hhdC1iYWRnZT5cbiAgPC9kaXY+XG48L2Rpdj5cbjxkaXYgY2xhc3M9XCJjYy1jb252ZXJzYXRpb25zX19zZWxlY3Rpb24tdmlld1wiICpuZ0lmPVwic2VsZWN0aW9uTW9kZSAhPSBzZWxlY3Rpb25tb2RlRW51bS5ub25lXCI+XG4gIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ0YWlsVmlld1wiPlxuICA8L25nLWNvbnRhaW5lcj5cbjwvZGl2PlxuPC9kaXY+XG4gIDwvY29tZXRjaGF0LWxpc3QtaXRlbT5cbiAgPG5nLXRlbXBsYXRlICN0YWlsVmlldz5cbiAgICA8ZGl2ICAqbmdJZj1cInNlbGVjdGlvbk1vZGUgPT0gc2VsZWN0aW9ubW9kZUVudW0uc2luZ2xlXCI+XG4gICAgICA8Y29tZXRjaGF0LXJhZGlvLWJ1dHRvbiAoY2MtcmFkaW8tYnV0dG9uLWNoYW5nZWQpPVwib25Db252ZXJzYXRpb25TZWxlY3RlZChjb252ZXJzYXRpb24sJGV2ZW50KVwiPjwvY29tZXRjaGF0LXJhZGlvLWJ1dHRvbj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2ICAqbmdJZj1cInNlbGVjdGlvbk1vZGUgPT0gc2VsZWN0aW9ubW9kZUVudW0ubXVsdGlwbGVcIj5cbiAgICAgIDxjb21ldGNoYXQtY2hlY2tib3ggKGNjLWNoZWNrYm94LWNoYW5nZWQpPVwib25Db252ZXJzYXRpb25TZWxlY3RlZChjb252ZXJzYXRpb24sJGV2ZW50KVwiPjwvY29tZXRjaGF0LWNoZWNrYm94PlxuICAgIDwvZGl2PlxuICA8L25nLXRlbXBsYXRlPlxuPC9uZy10ZW1wbGF0ZT5cblxuXG4iXX0=
|