@projectcor/maia-components 2.11.31 → 2.11.32-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/lib/components/atoms/icons/MaiaChatLayoutMenuIcon.js +33 -0
- package/lib/components/atoms/icons/index.js +2 -1
- package/lib/components/molecules/ChatAIMessages/ChatAIMessages.js +178 -165
- package/lib/components/molecules/ChatAIModal/ChatAIModal.js +196 -61
- package/lib/components/molecules/ChatAIModal/ChatAIModal.styles.js +28 -15
- package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.js +91 -18
- package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.styles.js +17 -2
- package/lib/components/molecules/ChatAIModal/floatingPanelMotion/FloatingPanelMotion.js +16 -0
- package/lib/components/molecules/ChatAIModal/floatingPanelMotion/FloatingPanelMotion.styles.js +12 -0
- package/lib/components/molecules/ChatAIModal/floatingPanelMotion/constants.js +13 -0
- package/lib/components/molecules/ChatAIModal/floatingPanelMotion/index.js +3 -0
- package/lib/components/molecules/ChatAIModal/floatingPanelMotion/useFloatingPanelDragTilt.js +57 -0
- package/lib/components/molecules/ChatAIModal/layout.js +35 -0
- package/lib/hooks/useChatManager/useChatManager.js +78 -16
- package/lib/hooks/useOrchestratorStream/useOrchestratorStream.js +139 -70
- package/lib/hooks/useSmoothStreamText/index.js +2 -0
- package/lib/hooks/useSmoothStreamText/useSmoothStreamText.js +189 -0
- package/lib/hooks/useStreamingMessage/index.js +3 -0
- package/lib/hooks/useStreamingMessage/streamingStore.js +69 -0
- package/lib/hooks/useStreamingMessage/useStreamingMessage.js +22 -0
- package/lib/lang/br/index.js +5 -1
- package/lib/lang/en/index.js +5 -1
- package/lib/lang/es/index.js +5 -1
- package/lib/lang/fr/index.js +5 -1
- package/package.json +1 -1
|
@@ -26,6 +26,7 @@ import { useTabTaskDefault } from '../useTabTaskDefault';
|
|
|
26
26
|
import { TASK_URL_REGEX_PATTERN } from '../../constants/taskUrls';
|
|
27
27
|
import { fetchAgentDetail } from '../../services/maia/Agents/fetchAgentDetail';
|
|
28
28
|
import { buildHitlActionTypeList, getHitlAnalyticsAgentType } from '../../utils/hitlAnalytics';
|
|
29
|
+
import { streamingStore } from '../useStreamingMessage';
|
|
29
30
|
var normalizeSendMessageArgs = function normalizeSendMessageArgs(attachmentsOrOptions) {
|
|
30
31
|
var _options$attachments;
|
|
31
32
|
if (Array.isArray(attachmentsOrOptions)) {
|
|
@@ -292,6 +293,19 @@ export var useChatManager = function useChatManager(_ref3) {
|
|
|
292
293
|
var messagesRef = useRef([]);
|
|
293
294
|
var isProcessingRef = useRef(false);
|
|
294
295
|
var firstTimeRef = useRef(false);
|
|
296
|
+
/** Id del placeholder del mensaje en streaming activo (si hay). */
|
|
297
|
+
var streamingPlaceholderIdRef = useRef(null);
|
|
298
|
+
/**
|
|
299
|
+
* Chat al que pertenece el stream actualmente activo. Si cambia el chat
|
|
300
|
+
* mientras un stream está en vuelo, descartamos los tokens residuales
|
|
301
|
+
* que puedan llegar antes de que el abort se complete.
|
|
302
|
+
*/
|
|
303
|
+
var activeStreamChatIdRef = useRef(null);
|
|
304
|
+
/** Setter indirecto para abortar el stream antes de que el hook de
|
|
305
|
+
* orquestador esté inicializado (se linkea más abajo). */
|
|
306
|
+
var abortStreamSilentlyRef = useRef(function () {
|
|
307
|
+
return undefined;
|
|
308
|
+
});
|
|
295
309
|
var _useState = useState({}),
|
|
296
310
|
_useState2 = _slicedToArray(_useState, 2),
|
|
297
311
|
activeLoadings = _useState2[0],
|
|
@@ -327,6 +341,10 @@ export var useChatManager = function useChatManager(_ref3) {
|
|
|
327
341
|
}, [loadingMessages]);
|
|
328
342
|
useEffect(function () {
|
|
329
343
|
if (initialChatId && initialChatId !== currentChatId.current) {
|
|
344
|
+
// Si hay un stream en curso, abortarlo silenciosamente para que los
|
|
345
|
+
// tokens residuales no se escriban en el chat nuevo.
|
|
346
|
+
abortStreamSilentlyRef.current();
|
|
347
|
+
|
|
330
348
|
// Limpiar contexto global al cambiar de conversación
|
|
331
349
|
setProject(null);
|
|
332
350
|
setClient === null || setClient === void 0 || setClient(null);
|
|
@@ -336,6 +354,9 @@ export var useChatManager = function useChatManager(_ref3) {
|
|
|
336
354
|
currentUserQuestion.current = null;
|
|
337
355
|
reportedEvent.current = false;
|
|
338
356
|
isProcessingRef.current = false;
|
|
357
|
+
streamingPlaceholderIdRef.current = null;
|
|
358
|
+
activeStreamChatIdRef.current = null;
|
|
359
|
+
streamingStore.clear();
|
|
339
360
|
loadMessages();
|
|
340
361
|
}
|
|
341
362
|
}, [initialChatId, project, setProject, setClient, setChipsProject, loadMessages]);
|
|
@@ -392,6 +413,11 @@ export var useChatManager = function useChatManager(_ref3) {
|
|
|
392
413
|
});
|
|
393
414
|
}, [messages, client, loadingMessages, setClient]);
|
|
394
415
|
var handleStreamError = useCallback(function (errorMessage) {
|
|
416
|
+
var tempMessageId = "answer-".concat(currentMessageId.current, "-streaming");
|
|
417
|
+
streamingStore.clear();
|
|
418
|
+
streamingPlaceholderIdRef.current = null;
|
|
419
|
+
activeStreamChatIdRef.current = null;
|
|
420
|
+
removeMessage(tempMessageId);
|
|
395
421
|
var message = errorMessage === "Access denied: You don't have permission to access this agent" ? t('chat.errorAccessDenied') : t('chat.error');
|
|
396
422
|
addMessage({
|
|
397
423
|
id: "answer-".concat(currentMessageId.current),
|
|
@@ -405,21 +431,37 @@ export var useChatManager = function useChatManager(_ref3) {
|
|
|
405
431
|
role: ChatHistoryRole.ASSISTANT
|
|
406
432
|
});
|
|
407
433
|
isProcessingRef.current = false;
|
|
408
|
-
}, [addMessage, t]);
|
|
434
|
+
}, [addMessage, removeMessage, t]);
|
|
409
435
|
var handleStreamUpdate = useCallback(function (content, sources, memorySessionId) {
|
|
436
|
+
// Si el chat cambió mientras el stream estaba en vuelo, descartar el
|
|
437
|
+
// token residual: no debe pintarse en el nuevo chat.
|
|
438
|
+
if (activeStreamChatIdRef.current != null && activeStreamChatIdRef.current !== currentChatId.current) {
|
|
439
|
+
return;
|
|
440
|
+
}
|
|
410
441
|
var tempMessageId = "answer-".concat(currentMessageId.current, "-streaming");
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
442
|
+
|
|
443
|
+
// Primera llamada de este stream: insertamos el placeholder en el
|
|
444
|
+
// array de `messages` una única vez. Las llamadas subsiguientes ya no
|
|
445
|
+
// tocan `messages`; el texto vive en el streamingStore (externo), por
|
|
446
|
+
// lo que React no re-renderiza el árbol completo en cada token.
|
|
447
|
+
if (streamingPlaceholderIdRef.current !== tempMessageId) {
|
|
448
|
+
streamingPlaceholderIdRef.current = tempMessageId;
|
|
449
|
+
activeStreamChatIdRef.current = currentChatId.current;
|
|
450
|
+
streamingStore.start(tempMessageId);
|
|
451
|
+
addMessage({
|
|
452
|
+
id: tempMessageId,
|
|
453
|
+
message: '',
|
|
454
|
+
date: new Date(),
|
|
455
|
+
user: {
|
|
456
|
+
id: 'assistant',
|
|
457
|
+
name: 'Assistant'
|
|
458
|
+
},
|
|
459
|
+
role: ChatHistoryRole.ASSISTANT,
|
|
460
|
+
sources: sources,
|
|
461
|
+
memorySessionId: memorySessionId
|
|
462
|
+
});
|
|
463
|
+
}
|
|
464
|
+
streamingStore.setText(tempMessageId, content);
|
|
423
465
|
}, [addMessage]);
|
|
424
466
|
var handleStreamFinish = useCallback(/*#__PURE__*/function () {
|
|
425
467
|
var _ref6 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee2(content, sources, memorySessionId, rawAttachments, suggestions, completedAgentId) {
|
|
@@ -429,6 +471,9 @@ export var useChatManager = function useChatManager(_ref3) {
|
|
|
429
471
|
while (1) switch (_context2.prev = _context2.next) {
|
|
430
472
|
case 0:
|
|
431
473
|
tempMessageId = "answer-".concat(currentMessageId.current, "-streaming");
|
|
474
|
+
streamingStore.clear();
|
|
475
|
+
streamingPlaceholderIdRef.current = null;
|
|
476
|
+
activeStreamChatIdRef.current = null;
|
|
432
477
|
removeMessage(tempMessageId);
|
|
433
478
|
attachments = normalizeAssistantAttachments(rawAttachments); // Detectar todas las URLs de tareas (.../tasks/123/detail|message|messages|files|history|hours)
|
|
434
479
|
taskUrlRegex = new RegExp(TASK_URL_REGEX_PATTERN, 'g');
|
|
@@ -590,6 +635,11 @@ export var useChatManager = function useChatManager(_ref3) {
|
|
|
590
635
|
};
|
|
591
636
|
}(), [addMessage, removeMessage, project, getTabTaskDefault, event, agent]);
|
|
592
637
|
var handleStreamStop = useCallback(function () {
|
|
638
|
+
var tempMessageId = "answer-".concat(currentMessageId.current, "-streaming");
|
|
639
|
+
streamingStore.clear();
|
|
640
|
+
streamingPlaceholderIdRef.current = null;
|
|
641
|
+
activeStreamChatIdRef.current = null;
|
|
642
|
+
removeMessage(tempMessageId);
|
|
593
643
|
addMessage({
|
|
594
644
|
id: "answer-".concat(currentMessageId.current, "-cancelled"),
|
|
595
645
|
message: t('chat.cancelled'),
|
|
@@ -606,9 +656,12 @@ export var useChatManager = function useChatManager(_ref3) {
|
|
|
606
656
|
var customEvent = new CustomEvent('refetch-session');
|
|
607
657
|
document.dispatchEvent(customEvent);
|
|
608
658
|
}, 500);
|
|
609
|
-
}, [addMessage, t]);
|
|
659
|
+
}, [addMessage, removeMessage, t]);
|
|
610
660
|
var handleApprovalRequired = useCallback(function (approval, accumulatedContent) {
|
|
611
661
|
var tempMessageId = "answer-".concat(currentMessageId.current, "-streaming");
|
|
662
|
+
streamingStore.clear();
|
|
663
|
+
streamingPlaceholderIdRef.current = null;
|
|
664
|
+
activeStreamChatIdRef.current = null;
|
|
612
665
|
removeMessage(tempMessageId);
|
|
613
666
|
if (approval.manual_approval_detected) {
|
|
614
667
|
isProcessingRef.current = false;
|
|
@@ -641,7 +694,12 @@ export var useChatManager = function useChatManager(_ref3) {
|
|
|
641
694
|
waitingResponse = _useOrchestratorStrea.isLoading,
|
|
642
695
|
isWriting = _useOrchestratorStrea.isWriting,
|
|
643
696
|
loadingMessage = _useOrchestratorStrea.loadingMessage,
|
|
644
|
-
stopStreaming = _useOrchestratorStrea.stopStreaming
|
|
697
|
+
stopStreaming = _useOrchestratorStrea.stopStreaming,
|
|
698
|
+
abortStreamSilently = _useOrchestratorStrea.abortStreamSilently;
|
|
699
|
+
|
|
700
|
+
// Mantenemos el setter más reciente en una ref para que pueda usarse desde
|
|
701
|
+
// efectos definidos antes en el archivo (cambio de chat, reset, etc.).
|
|
702
|
+
abortStreamSilentlyRef.current = abortStreamSilently;
|
|
645
703
|
var currentProject = project;
|
|
646
704
|
var sendMessage = useCallback(/*#__PURE__*/function () {
|
|
647
705
|
var _ref7 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee3(message, attachmentsOrOptions, faqId, agentSuggestionId) {
|
|
@@ -1036,10 +1094,14 @@ export var useChatManager = function useChatManager(_ref3) {
|
|
|
1036
1094
|
}, _callee6);
|
|
1037
1095
|
})), [initialChatId, userInitialMessage, project, client, authUser, agent, askMaia, isWebSearchActive, isDeepSearchActive]);
|
|
1038
1096
|
var resetChat = useCallback(function () {
|
|
1097
|
+
abortStreamSilentlyRef.current();
|
|
1039
1098
|
currentMessageId.current = uuidv4();
|
|
1040
1099
|
currentUserQuestion.current = null;
|
|
1041
1100
|
currentChatId.current = uuidv4();
|
|
1042
1101
|
reportedEvent.current = false;
|
|
1102
|
+
streamingPlaceholderIdRef.current = null;
|
|
1103
|
+
activeStreamChatIdRef.current = null;
|
|
1104
|
+
streamingStore.clear();
|
|
1043
1105
|
}, []);
|
|
1044
1106
|
var stopGeneration = useCallback(function () {
|
|
1045
1107
|
stopStreaming();
|
|
@@ -1067,4 +1129,4 @@ export var useChatManager = function useChatManager(_ref3) {
|
|
|
1067
1129
|
isDisabled: waitingResponse || loadingMessages
|
|
1068
1130
|
};
|
|
1069
1131
|
};
|
|
1070
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1c2VDYWxsYmFjayIsInVzZVJlZiIsInVzZUVmZmVjdCIsInVzZVN0YXRlIiwidjQiLCJ1dWlkdjQiLCJ1c2VDaGF0TWVzc2FnZXMiLCJ1c2VPcmNoZXN0cmF0b3JTdHJlYW0iLCJ1c2VUIiwidXNlVXNlciIsInVzZUdsb2JhbENvbnRleHQiLCJFVkVOVFMiLCJ1c2VFdmVudCIsIm1haWEiLCJGZWVkYmFjayIsIkNoYXRIaXN0b3J5Um9sZSIsInVzZVByb2plY3RzIiwidXNlVGFiVGFza0RlZmF1bHQiLCJUQVNLX1VSTF9SRUdFWF9QQVRURVJOIiwiZmV0Y2hBZ2VudERldGFpbCIsImJ1aWxkSGl0bEFjdGlvblR5cGVMaXN0IiwiZ2V0SGl0bEFuYWx5dGljc0FnZW50VHlwZSIsIm5vcm1hbGl6ZVNlbmRNZXNzYWdlQXJncyIsImF0dGFjaG1lbnRzT3JPcHRpb25zIiwiX29wdGlvbnMkYXR0YWNobWVudHMiLCJBcnJheSIsImlzQXJyYXkiLCJhdHRhY2htZW50cyIsIm9wdGlvbnMiLCJub3JtYWxpemVBc3Npc3RhbnRBdHRhY2htZW50cyIsInJhd0F0dGFjaG1lbnRzIiwiZmlsdGVyIiwiYXR0YWNobWVudCIsIl90eXBlb2YiLCJtYXAiLCJpbmRleCIsIm5hbWUiLCJ0cmltIiwiY29uY2F0IiwidHlwZSIsIm1pbWVUeXBlIiwibWltZV90eXBlIiwiZnVsbEZpbGVOYW1lIiwiaW5jbHVkZXMiLCJudW1lcmljU2l6ZSIsInNpemUiLCJOdW1iZXIiLCJpc0Zpbml0ZSIsImZpbGUiLCJGaWxlIiwiaWQiLCJ1cmxfb3JpZ2luYWwiLCJ1bmRlZmluZWQiLCJ1cmxfdGh1bWJuYWlsIiwidXJsX2ZpbGUiLCJyb2xlIiwiZXh0cmFjdFRhc2tJZHNGcm9tRGVsZXRlUGVuZGluZ0FjdGlvbnMiLCJwZW5kaW5nQWN0aW9ucyIsImlkcyIsImZvckVhY2giLCJhY3Rpb24iLCJhcmdzIiwidG9vbF9hcmdzIiwicmVjIiwidG9vbF9uYW1lIiwiX3JlYyR0YXNrX2lkIiwicmF3IiwidGFza19pZCIsIm4iLCJwYXJzZUludCIsIlN0cmluZyIsImlzTmFOIiwicHVzaCIsImxpc3QiLCJ0YXNrX2lkcyIsInRpZCIsImV4dHJhY3RBZ2VudElkRnJvbUVkaXRBZ2VudFBlbmRpbmdBY3Rpb25zIiwiX3JlYyRhZ2VudF9pZCIsImVkaXRBY3Rpb24iLCJmaW5kIiwiYSIsInRvTG93ZXJDYXNlIiwiYWdlbnRfaWQiLCJhZ2VudElkIiwiZXh0cmFjdEFnZW50SWRGcm9tUGVuZGluZ0FjdGlvbnNCeVRvb2xOYW1lIiwidG9vbE5hbWUiLCJfcmVmIiwiX3JlYyRhZ2VudF9pZDIiLCJleHRyYWN0VGFza0lkc0Zyb21Bc3Npc3RhbnREZWxldGlvblRleHQiLCJ0ZXh0IiwibGFiZWxlZCIsIm1hdGNoIiwiYm9sZCIsInVzZVN0YWJsZUNhbGxiYWNrcyIsImF1dGhVc2VyIiwiY3VycmVudFVzZXIiLCJ0b1N0cmluZyIsImZpcnN0TmFtZSIsImF2YXRhciIsInBpY3R1cmUiLCJjdXJyZW50IiwicGFyc2VTU0VMaW5lIiwibGluZSIsIl9saW5lJHNwbGl0Iiwic3BsaXQiLCJfbGluZSRzcGxpdDIiLCJfc2xpY2VkVG9BcnJheSIsImV2ZW50TGluZSIsImRhdGFMaW5lIiwiZXZlbnRUeXBlIiwicmVwbGFjZSIsImRhdGFTdHIiLCJkYXRhIiwiSlNPTiIsInBhcnNlIiwicGFyc2VFcnJvciIsImNvbnNvbGUiLCJlcnJvciIsInByb2Nlc3NTU0VTdHJlYW0iLCJfcmVmMiIsIl9hc3luY1RvR2VuZXJhdG9yIiwiX3JlZ2VuZXJhdG9yUnVudGltZSIsIm1hcmsiLCJfY2FsbGVlIiwicmVzcG9uc2UiLCJ0aHJlYWRJZCIsImNhbGxiYWNrcyIsIl9yZXNwb25zZSRib2R5IiwicmVhZGVyIiwiZGVjb2RlciIsImJ1ZmZlciIsImFjY3VtdWxhdGVkQ29udGVudCIsImlzU3RyZWFtQ29tcGxldGUiLCJoYW5kbGVMaW5lIiwiX3lpZWxkJHJlYWRlciRyZWFkIiwiZG9uZSIsInZhbHVlIiwibGluZXMiLCJpIiwid3JhcCIsIl9jb250ZXh0IiwicHJldiIsIm5leHQiLCJfaGFuZGxlTGluZSIsInBhcnNlZCIsImV2ZW50RGF0YSIsImNvbnRlbnQiLCJvblRva2VuIiwibWVzc2FnZSIsIm9uTm9kZSIsIl9ldmVudERhdGEkYWdlbnRfaWQiLCJmaW5hbENvbnRlbnQiLCJzb3VyY2VzIiwibWVtb3J5U2Vzc2lvbklkIiwibWVtb3J5X3Nlc3Npb25faWQiLCJzdWdnZXN0aW9ucyIsInN1Z2dlc3RfcmVwbHkiLCJhZ2VudElkUmF3IiwiY29tcGxldGVkQWdlbnRJZCIsIm9uQ29tcGxldGUiLCJfY2FsbGJhY2tzJG9uQXBwcm92YWwiLCJvbkFwcHJvdmFsUmVxdWlyZWQiLCJjYWxsIiwib25FcnJvciIsImJvZHkiLCJnZXRSZWFkZXIiLCJFcnJvciIsIlRleHREZWNvZGVyIiwicmVhZCIsInNlbnQiLCJhYnJ1cHQiLCJkZWNvZGUiLCJzdHJlYW0iLCJwb3AiLCJsZW5ndGgiLCJzdG9wIiwiX3giLCJfeDIiLCJfeDMiLCJhcHBseSIsImFyZ3VtZW50cyIsInVzZUNoYXRNYW5hZ2VyIiwiX3JlZjMiLCJpbml0aWFsQ2hhdElkIiwiY2hhdElkIiwidXNlckluaXRpYWxNZXNzYWdlIiwiX3JlZjMkYWdlbnRzIiwiYWdlbnRzIiwiX3VzZVQiLCJ0IiwiX3VzZUdsb2JhbENvbnRleHQiLCJwcm9qZWN0Iiwic2V0UHJvamVjdCIsImNsaWVudCIsInNldENsaWVudCIsImFnZW50IiwiaXNXZWJTZWFyY2hBY3RpdmUiLCJpc0RlZXBTZWFyY2hBY3RpdmUiLCJjaGlwc1Byb2plY3QiLCJzZXRDaGlwc1Byb2plY3QiLCJldmVudCIsIl91c2VQcm9qZWN0cyIsImZldGNoUHJvamVjdHMiLCJfdXNlU3RhYmxlQ2FsbGJhY2tzIiwiX3VzZVRhYlRhc2tEZWZhdWx0IiwiZ2V0VGFiVGFza0RlZmF1bHQiLCJjdXJyZW50TWVzc2FnZUlkIiwiY3VycmVudFVzZXJRdWVzdGlvbiIsImN1cnJlbnRDaGF0SWQiLCJyZXBvcnRlZEV2ZW50IiwibWVzc2FnZXNSZWYiLCJpc1Byb2Nlc3NpbmdSZWYiLCJmaXJzdFRpbWVSZWYiLCJfdXNlU3RhdGUiLCJfdXNlU3RhdGUyIiwiYWN0aXZlTG9hZGluZ3MiLCJzZXRBY3RpdmVMb2FkaW5ncyIsImlzV2ViU2VhcmNoQWN0aXZlUmVmIiwiaXNEZWVwU2VhcmNoQWN0aXZlUmVmIiwiX3VzZUNoYXRNZXNzYWdlcyIsImxvYWRpbmdNZXNzYWdlcyIsIm1lc3NhZ2VzIiwiaXNMb2FkaW5nTW9yZU1lc3NhZ2VzIiwibG9hZE1lc3NhZ2VzIiwiYWRkTWVzc2FnZSIsInJlbW92ZU1lc3NhZ2UiLCJoYW5kbGVTY3JvbGwiLCJjdXN0b21FdmVudCIsIkN1c3RvbUV2ZW50IiwiZGV0YWlsIiwiZG9jdW1lbnQiLCJkaXNwYXRjaEV2ZW50IiwibGFzdE1zZ1dpdGhQcm9qZWN0IiwibXNnIiwicHJvamVjdElkIiwiYXQiLCJfcmVmNCIsInByb2plY3ROYW1lIiwidGhlbiIsInByb2plY3RzIiwiZm91bmQiLCJwIiwiX2ZvdW5kJGNsaWVudCIsImNsaWVudE5hbWUiLCJsYXN0TXNnV2l0aENsaWVudCIsImNsaWVudElkIiwiX3JlZjUiLCJtc2dDbGllbnRJZCIsIm1zZ0NsaWVudE5hbWUiLCJoYW5kbGVTdHJlYW1FcnJvciIsImVycm9yTWVzc2FnZSIsImlzRXJyb3IiLCJkYXRlIiwiRGF0ZSIsInVzZXIiLCJBU1NJU1RBTlQiLCJoYW5kbGVTdHJlYW1VcGRhdGUiLCJ0ZW1wTWVzc2FnZUlkIiwiaGFuZGxlU3RyZWFtRmluaXNoIiwiX3JlZjYiLCJfY2FsbGVlMiIsIl9wcmV2aW91c01lc3NhZ2UkYXBwciIsIl9jcmVhdGVBZ2VudEZvbGxvd1VwIiwiX2VkaXRBZ2VudEZvbGxvd1VwIiwidGFza1VybFJlZ2V4IiwibWF0Y2hlcyIsImNvbnRlbnRUb0FkZCIsInByZXZpb3VzTWVzc2FnZSIsImhhc0FwcHJvdmFsSW5QcmV2aW91c01lc3NhZ2UiLCJUQVNLX0NSRUFUSU9OX1RPT0xTIiwiVEFTS19FRElUX1RPT0xTIiwiVEFTS19ERUxFVEVfVE9PTFMiLCJ3YXNUYXNrQ3JlYXRpb24iLCJ3YXNUYXNrRWRpdCIsIndhc1Rhc2tEZWxldGUiLCJ3YXNDcmVhdGVBZ2VudEFwcHJvdmVkIiwid2FzQ29uZmlndXJlQWdlbnRBY2Nlc3NBcHByb3ZlZCIsImNyZWF0ZUFnZW50Rm9sbG93VXAiLCJjb25maWd1cmVkQWdlbnRJZCIsIndhc0VkaXRBZ2VudEFwcHJvdmVkIiwiZWRpdEFnZW50Rm9sbG93VXAiLCJmcm9tU3RyZWFtIiwiZnJvbUFyZ3MiLCJyZXNvbHZlZEFnZW50SWQiLCJ0YXNrSWRzRnJvbVVybHMiLCJ0YXNrSWRzRnJvbURlbGV0ZUFwcHJvdmFsIiwidGFza0lkc0Zyb21EZWxldGlvblRleHQiLCJ0YXNrSWRzRm9yRGFzaGJvYXJkIiwic2hvdWxkU3luY0Rhc2hib2FyZCIsInRhc2tJZHMiLCJ0YWIiLCJ0YWJTZWdtZW50IiwibGFzdFByb2plY3RNZXNzYWdlIiwiY29udGV4dFByb2plY3RJZFJhdyIsImNvbnRleHRQcm9qZWN0SWQiLCJwYXRoTWF0Y2giLCJyb3V0ZVByb2plY3RJZCIsImlzT25Qcm9qZWN0Um91dGUiLCJfd2luZG93JG5ld1Byb2plY3REYXMiLCJfd2luZG93JG5ld1Byb2plY3REYXMyIiwiX3dpbmRvdyRuZXdQcm9qZWN0RGFzMyIsIl93aW5kb3ckbmV3UHJvamVjdERhczQiLCJfd2luZG93JG5ld1Byb2plY3REYXM1IiwiX3dpbmRvdyRuZXdQcm9qZWN0RGFzNiIsIl9jb250ZXh0MiIsIlJlZ0V4cCIsIl90b0NvbnN1bWFibGVBcnJheSIsIm1hdGNoQWxsIiwibSIsImFwcHJvdmFsIiwicGVuZGluZ19hY3Rpb25zIiwic29tZSIsImFwcHJvdmFsU3RhdHVzIiwid2luZG93IiwiTUFJQV9DSEFUX0FJX0ZFQVRVUkVfQUNDRVNTX01VTFRJX0FHRU5UUyIsImFpQ2hhdEhpdGxPcHRpb24iLCJfb2JqZWN0U3ByZWFkIiwiYWdlbnRfdHlwZSIsImFjdGlvbl90eXBlIiwiZGVjaXNpb24iLCJvcHRpb24iLCJjcmVhdGVkX2FnZW50X2lkIiwidXJsIiwibG9jYXRpb24iLCJwYXRobmFtZSIsIm5ld1Byb2plY3REYXNoYm9hcmQiLCJhZGRFeGlzdGluZ1Rhc2tUb0Rhc2hib2FyZCIsImVkaXRFeGlzdGluZ1Rhc2tJbkRhc2hib2FyZCIsImRlbGV0ZUV4aXN0aW5nVGFza0Zyb21EYXNoYm9hcmQiLCJjaGF0QWdlbnQiLCJlcnIiLCJfeDQiLCJfeDUiLCJfeDYiLCJfeDciLCJfeDgiLCJfeDkiLCJoYW5kbGVTdHJlYW1TdG9wIiwiaXNGcm9udGVuZENhbmNlbGxlZCIsInNldFRpbWVvdXQiLCJoYW5kbGVBcHByb3ZhbFJlcXVpcmVkIiwibWFudWFsX2FwcHJvdmFsX2RldGVjdGVkIiwib3JpZ2luYWxfdGhyZWFkX2lkIiwiX3VzZU9yY2hlc3RyYXRvclN0cmVhIiwib25TdHJlYW1VcGRhdGUiLCJvbkZpbmlzaFN0cmVhbSIsIm9uU3RvcCIsImFza01haWEiLCJ3YWl0aW5nUmVzcG9uc2UiLCJpc0xvYWRpbmciLCJpc1dyaXRpbmciLCJsb2FkaW5nTWVzc2FnZSIsInN0b3BTdHJlYW1pbmciLCJjdXJyZW50UHJvamVjdCIsInNlbmRNZXNzYWdlIiwiX3JlZjciLCJfY2FsbGVlMyIsImZhcUlkIiwiYWdlbnRTdWdnZXN0aW9uSWQiLCJfbWVzc2FnZXNSZWYkY3VycmVudCIsIl9wcm9qZWN0JGNsaWVudCIsIl9ub3JtYWxpemVTZW5kTWVzc2FnZSIsIm5ld01lc3NhZ2VJZCIsImxhc3RNZXNzYWdlV2l0aFByb2plY3QiLCJjdXJyZW50QWdlbnRGcm9tTWVzc2FnZXMiLCJmaW5hbE1lc3NhZ2UiLCJfb3B0aW9ucyRwcm9qZWN0Q2hhbmciLCJoaXN0b3J5IiwibGFzdE1lc3NhZ2VQcm9qZWN0SWQiLCJwcm9qZWN0VG9SZXF1ZXN0IiwicGF5bG9hZEZhcUlkIiwicGF5bG9hZEFnZW50U3VnZ2VzdGlvbklkIiwicGF5bG9hZERhdGEiLCJfY29udGV4dDMiLCJwbUFpVHlwZWRUZXh0IiwiVVNFUiIsInByb2plY3RDaGFuZ2VkIiwiaW5jb21lVHlwZSIsImhpc3RvcnlNZXNzYWdlIiwibGFuZyIsInVzZXJJZCIsImxhc3ROYW1lIiwiY29tcGFueUlkIiwiY29tcGFueV9pZCIsIm1lc3NhZ2VJZCIsImFnZW50TmFtZSIsImVudGl0eSIsImFnZW50RW50aXR5IiwiX3gwIiwiX3gxIiwiX3gxMCIsIl94MTEiLCJjaGFuZ2VQcm9qZWN0IiwiaGFuZGxlRmVlZGJhY2siLCJfcmVmOCIsIl9jYWxsZWU0IiwiZmVlZGJhY2tQcm9wIiwiY2hhdE1lc3NhZ2VJZCIsIl9jb250ZXh0NCIsIkNoYXRzIiwid2FzSGVscGZ1bENoYXQiLCJUSFVNQlNfVVAiLCJ3YXNIZWxwZnVsIiwiX3gxMiIsIl94MTMiLCJoYW5kbGVBcHByb3ZhbERlY2lzaW9uIiwiX3JlZjkiLCJfY2FsbGVlNSIsInRocmVhZElkcyIsImVkaXRlZEFjdGlvbnMiLCJtZXNzYWdlV2l0aEFwcHJvdmFsIiwibG9hZGluZ0tleSIsImV4aXN0aW5nTWVzc2FnZSIsIm5ld1N0YXR1cyIsIl90IiwiX2NvbnRleHQ1IiwiX20kYXBwcm92YWwiLCJ0aHJlYWRfaWQiLCJfZGVmaW5lUHJvcGVydHkiLCJPcmNoZXN0cmF0b3IiLCJjb250aW51ZVRocmVhZCIsInNlc3Npb25JZCIsInNlc3Npb25faWQiLCJvayIsIm5ld0xvYWRpbmdzIiwiY3VycmVudFRocmVhZElkIiwiZGlzcGxheU1zZyIsImFwcHJvdmFsUGF5bG9hZCIsIl94MTQiLCJfeDE1IiwiX3gxNiIsImluaXRpYWxpemVDaGF0IiwiX2NhbGxlZTYiLCJfdXNlckluaXRpYWxNZXNzYWdlJG0iLCJfdXNlckluaXRpYWxNZXNzYWdlJGEiLCJfcHJvamVjdCRjbGllbnQyIiwiX3Byb2plY3QkY2xpZW50MyIsImhhc0luaXRpYWxNZXNzYWdlIiwiaGFzSW5pdGlhbEF0dGFjaG1lbnRzIiwiaGFzSW5pdGlhbEZhcSIsIl9jb250ZXh0NiIsIkJvb2xlYW4iLCJyZXNldENoYXQiLCJzdG9wR2VuZXJhdGlvbiIsImlzRGlzYWJsZWQiXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvaG9va3MvdXNlQ2hhdE1hbmFnZXIvdXNlQ2hhdE1hbmFnZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgcmFkaXggKi9cbi8qIGVzbGludC1kaXNhYmxlIG5vLW5lc3RlZC10ZXJuYXJ5ICovXG4vKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tbm9uLW51bGwtYXNzZXJ0ZWQtb3B0aW9uYWwtY2hhaW4gKi9cbi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkgKi9cbmltcG9ydCB7IHVzZUNhbGxiYWNrLCB1c2VSZWYsIHVzZUVmZmVjdCwgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IHY0IGFzIHV1aWR2NCB9IGZyb20gJ3V1aWQnXG5pbXBvcnQgeyB1c2VDaGF0TWVzc2FnZXMgfSBmcm9tICcuLi91c2VDaGF0TWVzc2FnZXMnXG5pbXBvcnQgeyB1c2VPcmNoZXN0cmF0b3JTdHJlYW0gfSBmcm9tICcuLi91c2VPcmNoZXN0cmF0b3JTdHJlYW0nXG5pbXBvcnQgeyB1c2VUIH0gZnJvbSAnLi4vdXNlVCdcbmltcG9ydCB7IEF0dGFjaG1lbnRGaWxlIH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9tb2xlY3VsZXMvQ2hhdEZvb3Rlci9DaGF0Rm9vdGVyJ1xuaW1wb3J0IHsgU2VuZE1lc3NhZ2VPcHRpb25zLCBVc2VDaGF0TWFuYWdlclByb3BzIH0gZnJvbSAnLi91c2VDaGF0TWFuYWdlci5pbnRlcmZhY2UnXG5pbXBvcnQgeyB1c2VVc2VyLCBDT1JVc2VyIH0gZnJvbSAnLi4vLi4vY29udGV4dC9jb3ItdXNlcidcbmltcG9ydCB7IHVzZUdsb2JhbENvbnRleHQgfSBmcm9tICcuLi8uLi9jb250ZXh0L2dsb2JhbC1jb250ZXh0J1xuaW1wb3J0IHsgRVZFTlRTLCB1c2VFdmVudCB9IGZyb20gJy4uL3VzZUV2ZW50J1xuaW1wb3J0IG1haWEgZnJvbSAnLi4vLi4vc2VydmljZXMvbWFpYSdcbmltcG9ydCB7IEZlZWRiYWNrIH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9tb2xlY3VsZXMvTWVzc2FnZUZlZWRiYWNrL01lc3NhZ2VGZWVkYmFjaydcbmltcG9ydCB7IENoYXRNZXNzYWdlLCBDaGF0TWVzc2FnZVVzZXIsIENoYXRIaXN0b3J5Um9sZSwgQXBwcm92YWxSZXF1ZXN0LCBQZW5kaW5nQWN0aW9uIH0gZnJvbSAnLi4vLi4vdHlwZXMvQ2hhdCdcblxuaW1wb3J0IHsgUHJvamVjdCB9IGZyb20gJy4uLy4uL3R5cGVzL1Byb2plY3QnXG5pbXBvcnQgeyB1c2VQcm9qZWN0cyB9IGZyb20gJy4uL3VzZVByb2plY3RzJ1xuaW1wb3J0IHsgdXNlVGFiVGFza0RlZmF1bHQgfSBmcm9tICcuLi91c2VUYWJUYXNrRGVmYXVsdCdcbmltcG9ydCB7IFRBU0tfVVJMX1JFR0VYX1BBVFRFUk4gfSBmcm9tICcuLi8uLi9jb25zdGFudHMvdGFza1VybHMnXG5pbXBvcnQgeyBmZXRjaEFnZW50RGV0YWlsIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvbWFpYS9BZ2VudHMvZmV0Y2hBZ2VudERldGFpbCdcbmltcG9ydCB7IGJ1aWxkSGl0bEFjdGlvblR5cGVMaXN0LCBnZXRIaXRsQW5hbHl0aWNzQWdlbnRUeXBlIH0gZnJvbSAnLi4vLi4vdXRpbHMvaGl0bEFuYWx5dGljcydcblxudHlwZSBBdHRhY2htZW50c09yT3B0aW9ucyA9IEF0dGFjaG1lbnRGaWxlW10gfCBTZW5kTWVzc2FnZU9wdGlvbnNcblxuY29uc3Qgbm9ybWFsaXplU2VuZE1lc3NhZ2VBcmdzID0gKGF0dGFjaG1lbnRzT3JPcHRpb25zPzogQXR0YWNobWVudHNPck9wdGlvbnMpID0+IHtcbiAgaWYgKEFycmF5LmlzQXJyYXkoYXR0YWNobWVudHNPck9wdGlvbnMpKSB7XG4gICAgcmV0dXJuIHsgYXR0YWNobWVudHM6IGF0dGFjaG1lbnRzT3JPcHRpb25zLCBvcHRpb25zOiB7fSBhcyBTZW5kTWVzc2FnZU9wdGlvbnMgfVxuICB9XG5cbiAgY29uc3Qgb3B0aW9uczogU2VuZE1lc3NhZ2VPcHRpb25zID0gYXR0YWNobWVudHNPck9wdGlvbnMgPz8ge31cbiAgcmV0dXJuIHsgYXR0YWNobWVudHM6IG9wdGlvbnMuYXR0YWNobWVudHMgPz8gW10sIG9wdGlvbnMgfVxufVxuXG5jb25zdCBub3JtYWxpemVBc3Npc3RhbnRBdHRhY2htZW50cyA9IChyYXdBdHRhY2htZW50czogdW5rbm93bik6IEF0dGFjaG1lbnRGaWxlW10gPT4ge1xuICBpZiAoIUFycmF5LmlzQXJyYXkocmF3QXR0YWNobWVudHMpKSB7XG4gICAgcmV0dXJuIFtdXG4gIH1cblxuICByZXR1cm4gcmF3QXR0YWNobWVudHNcbiAgICAuZmlsdGVyKChhdHRhY2htZW50KTogYXR0YWNobWVudCBpcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9PiAhIWF0dGFjaG1lbnQgJiYgdHlwZW9mIGF0dGFjaG1lbnQgPT09ICdvYmplY3QnKVxuICAgIC5tYXAoKGF0dGFjaG1lbnQsIGluZGV4KSA9PiB7XG4gICAgICBjb25zdCBuYW1lID1cbiAgICAgICAgdHlwZW9mIGF0dGFjaG1lbnQubmFtZSA9PT0gJ3N0cmluZycgJiYgYXR0YWNobWVudC5uYW1lLnRyaW0oKSA/IGF0dGFjaG1lbnQubmFtZS50cmltKCkgOiBgZmlsZS0ke2luZGV4ICsgMX1gXG4gICAgICBjb25zdCB0eXBlID0gdHlwZW9mIGF0dGFjaG1lbnQudHlwZSA9PT0gJ3N0cmluZycgJiYgYXR0YWNobWVudC50eXBlLnRyaW0oKSA/IGF0dGFjaG1lbnQudHlwZS50cmltKCkgOiAncGRmJ1xuICAgICAgY29uc3QgbWltZVR5cGUgPSB0eXBlb2YgYXR0YWNobWVudC5taW1lX3R5cGUgPT09ICdzdHJpbmcnID8gYXR0YWNobWVudC5taW1lX3R5cGUgOiAnJ1xuICAgICAgY29uc3QgZnVsbEZpbGVOYW1lID0gbmFtZS5pbmNsdWRlcygnLicpID8gbmFtZSA6IGAke25hbWV9LiR7dHlwZX1gXG4gICAgICBjb25zdCBudW1lcmljU2l6ZSA9XG4gICAgICAgIHR5cGVvZiBhdHRhY2htZW50LnNpemUgPT09ICdudW1iZXInXG4gICAgICAgICAgPyBhdHRhY2htZW50LnNpemVcbiAgICAgICAgICA6IE51bWJlci5pc0Zpbml0ZShOdW1iZXIoYXR0YWNobWVudC5zaXplKSlcbiAgICAgICAgICAgID8gTnVtYmVyKGF0dGFjaG1lbnQuc2l6ZSlcbiAgICAgICAgICAgIDogMFxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBmaWxlOiBuZXcgRmlsZShbXSwgZnVsbEZpbGVOYW1lLCB7IHR5cGU6IG1pbWVUeXBlIH0pLFxuICAgICAgICBpZDpcbiAgICAgICAgICB0eXBlb2YgYXR0YWNobWVudC5pZCA9PT0gJ3N0cmluZycgJiYgYXR0YWNobWVudC5pZC50cmltKClcbiAgICAgICAgICAgID8gYXR0YWNobWVudC5pZFxuICAgICAgICAgICAgOiBgYXNzaXN0YW50LWZpbGUtJHtpbmRleH0tJHtmdWxsRmlsZU5hbWV9YCxcbiAgICAgICAgbmFtZSxcbiAgICAgICAgc2l6ZTogbnVtZXJpY1NpemUsXG4gICAgICAgIHR5cGUsXG4gICAgICAgIHVybF9vcmlnaW5hbDogdHlwZW9mIGF0dGFjaG1lbnQudXJsX29yaWdpbmFsID09PSAnc3RyaW5nJyA/IGF0dGFjaG1lbnQudXJsX29yaWdpbmFsIDogdW5kZWZpbmVkLFxuICAgICAgICB1cmxfdGh1bWJuYWlsOiB0eXBlb2YgYXR0YWNobWVudC51cmxfdGh1bWJuYWlsID09PSAnc3RyaW5nJyA/IGF0dGFjaG1lbnQudXJsX3RodW1ibmFpbCA6IHVuZGVmaW5lZCxcbiAgICAgICAgdXJsX2ZpbGU6IHR5cGVvZiBhdHRhY2htZW50LnVybF9maWxlID09PSAnc3RyaW5nJyA/IGF0dGFjaG1lbnQudXJsX2ZpbGUgOiB1bmRlZmluZWQsXG4gICAgICAgIHJvbGU6IGF0dGFjaG1lbnQucm9sZSA9PT0gJ2Fzc2lzdGFudCcgPyAnYXNzaXN0YW50JyA6ICd1c2VyJyxcbiAgICAgIH1cbiAgICB9KVxufVxuXG4vKiogdGFza19pZCAvIHRhc2tfaWRzIGVuIHBlbmRpbmdfYWN0aW9ucyBkZSBkZWxldGVfKiAobGEgcmVzcHVlc3RhIHB1ZWRlIG5vIGluY2x1aXIgVVJMcyAvdGFza3Mv4oCmL2RldGFpbCkuICovXG5mdW5jdGlvbiBleHRyYWN0VGFza0lkc0Zyb21EZWxldGVQZW5kaW5nQWN0aW9ucyhwZW5kaW5nQWN0aW9uczogUGVuZGluZ0FjdGlvbltdKTogbnVtYmVyW10ge1xuICBjb25zdCBpZHM6IG51bWJlcltdID0gW11cbiAgcGVuZGluZ0FjdGlvbnMuZm9yRWFjaChhY3Rpb24gPT4ge1xuICAgIGlmICghYWN0aW9uIHx8IHR5cGVvZiBhY3Rpb24gIT09ICdvYmplY3QnKSByZXR1cm5cbiAgICBjb25zdCBhcmdzID0gYWN0aW9uLnRvb2xfYXJnc1xuICAgIGlmICghKGFyZ3MgJiYgdHlwZW9mIGFyZ3MgPT09ICdvYmplY3QnICYmICFBcnJheS5pc0FycmF5KGFyZ3MpKSkgcmV0dXJuXG4gICAgY29uc3QgcmVjID0gYXJncyBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxuICAgIGlmIChhY3Rpb24udG9vbF9uYW1lID09PSAnZGVsZXRlX3Rhc2snKSB7XG4gICAgICBjb25zdCByYXcgPSByZWMudGFza19pZCA/PyByZWMuaWRcbiAgICAgIGlmIChyYXcgIT0gbnVsbCkge1xuICAgICAgICBjb25zdCBuID0gcGFyc2VJbnQoU3RyaW5nKHJhdyksIDEwKVxuICAgICAgICBpZiAoIU51bWJlci5pc05hTihuKSkgaWRzLnB1c2gobilcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGFjdGlvbi50b29sX25hbWUgPT09ICdkZWxldGVfdGFza3NfYmF0Y2gnKSB7XG4gICAgICBjb25zdCBsaXN0ID0gcmVjLnRhc2tfaWRzXG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShsaXN0KSkge1xuICAgICAgICBsaXN0LmZvckVhY2godGlkID0+IHtcbiAgICAgICAgICBjb25zdCBuID0gcGFyc2VJbnQoU3RyaW5nKHRpZCksIDEwKVxuICAgICAgICAgIGlmICghTnVtYmVyLmlzTmFOKG4pKSBpZHMucHVzaChuKVxuICAgICAgICB9KVxuICAgICAgfVxuICAgIH1cbiAgfSlcbiAgcmV0dXJuIGlkc1xufVxuXG5mdW5jdGlvbiBleHRyYWN0QWdlbnRJZEZyb21FZGl0QWdlbnRQZW5kaW5nQWN0aW9ucyhwZW5kaW5nQWN0aW9uczogUGVuZGluZ0FjdGlvbltdKTogc3RyaW5nIHwgbnVsbCB7XG4gIGNvbnN0IGVkaXRBY3Rpb24gPSBwZW5kaW5nQWN0aW9ucy5maW5kKGEgPT4gKGEudG9vbF9uYW1lIHx8ICcnKS50b0xvd2VyQ2FzZSgpID09PSAnZWRpdF9hZ2VudCcpXG4gIGlmIChcbiAgICAhZWRpdEFjdGlvbiB8fFxuICAgICFlZGl0QWN0aW9uLnRvb2xfYXJncyB8fFxuICAgIHR5cGVvZiBlZGl0QWN0aW9uLnRvb2xfYXJncyAhPT0gJ29iamVjdCcgfHxcbiAgICBBcnJheS5pc0FycmF5KGVkaXRBY3Rpb24udG9vbF9hcmdzKVxuICApIHtcbiAgICByZXR1cm4gbnVsbFxuICB9XG4gIGNvbnN0IHJlYyA9IGVkaXRBY3Rpb24udG9vbF9hcmdzIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+XG4gIGNvbnN0IHJhdyA9IHJlYy5hZ2VudF9pZCA/PyByZWMuYWdlbnRJZFxuICByZXR1cm4gcmF3ICE9IG51bGwgPyBTdHJpbmcocmF3KSA6IG51bGxcbn1cblxuZnVuY3Rpb24gZXh0cmFjdEFnZW50SWRGcm9tUGVuZGluZ0FjdGlvbnNCeVRvb2xOYW1lKHBlbmRpbmdBY3Rpb25zOiBQZW5kaW5nQWN0aW9uW10sIHRvb2xOYW1lOiBzdHJpbmcpOiBzdHJpbmcgfCBudWxsIHtcbiAgY29uc3QgYWN0aW9uID0gcGVuZGluZ0FjdGlvbnMuZmluZChhID0+IChhLnRvb2xfbmFtZSB8fCAnJykudG9Mb3dlckNhc2UoKSA9PT0gdG9vbE5hbWUudG9Mb3dlckNhc2UoKSlcbiAgaWYgKCFhY3Rpb24gfHwgIWFjdGlvbi50b29sX2FyZ3MgfHwgdHlwZW9mIGFjdGlvbi50b29sX2FyZ3MgIT09ICdvYmplY3QnIHx8IEFycmF5LmlzQXJyYXkoYWN0aW9uLnRvb2xfYXJncykpIHtcbiAgICByZXR1cm4gbnVsbFxuICB9XG4gIGNvbnN0IHJlYyA9IGFjdGlvbi50b29sX2FyZ3MgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj5cbiAgY29uc3QgcmF3ID0gcmVjLmFnZW50X2lkID8/IHJlYy5hZ2VudElkID8/IHJlYy5pZFxuICByZXR1cm4gcmF3ICE9IG51bGwgPyBTdHJpbmcocmF3KSA6IG51bGxcbn1cblxuLyoqIMOabHRpbW8gcmVjdXJzbyBzaSBubyBoYXkgbGlua3MgbmkgdG9vbF9hcmdzIHBhcnNlYWJsZXMgKHAuIGVqLiBcIklEICoqNzU5NzEwNioqXCIpLiAqL1xuZnVuY3Rpb24gZXh0cmFjdFRhc2tJZHNGcm9tQXNzaXN0YW50RGVsZXRpb25UZXh0KHRleHQ6IHN0cmluZyk6IG51bWJlcltdIHtcbiAgY29uc3QgbGFiZWxlZCA9IHRleHQubWF0Y2goL1xcYklEXFxzKlxcKlxcKihcXGQrKVxcKlxcKi9pKVxuICBpZiAobGFiZWxlZCkge1xuICAgIGNvbnN0IG4gPSBwYXJzZUludChsYWJlbGVkWzFdLCAxMClcbiAgICByZXR1cm4gTnVtYmVyLmlzTmFOKG4pID8gW10gOiBbbl1cbiAgfVxuICBjb25zdCBib2xkID0gdGV4dC5tYXRjaCgvXFwqXFwqKFxcZHs1LH0pXFwqXFwqLylcbiAgaWYgKGJvbGQpIHtcbiAgICBjb25zdCBuID0gcGFyc2VJbnQoYm9sZFsxXSwgMTApXG4gICAgcmV0dXJuIE51bWJlci5pc05hTihuKSA/IFtdIDogW25dXG4gIH1cbiAgcmV0dXJuIFtdXG59XG5cbmNvbnN0IHVzZVN0YWJsZUNhbGxiYWNrcyA9IChhdXRoVXNlcjogQ09SVXNlcikgPT4ge1xuICBjb25zdCBjdXJyZW50VXNlciA9IHVzZVJlZjxDaGF0TWVzc2FnZVVzZXI+KHtcbiAgICBpZDogYXV0aFVzZXIuaWQudG9TdHJpbmcoKSxcbiAgICBuYW1lOiBhdXRoVXNlci5maXJzdE5hbWUsXG4gICAgYXZhdGFyOiBhdXRoVXNlci5waWN0dXJlLFxuICB9KVxuXG4gIGlmIChcbiAgICBjdXJyZW50VXNlci5jdXJyZW50LmlkICE9PSBhdXRoVXNlci5pZC50b1N0cmluZygpIHx8XG4gICAgY3VycmVudFVzZXIuY3VycmVudC5uYW1lICE9PSBhdXRoVXNlci5maXJzdE5hbWUgfHxcbiAgICBjdXJyZW50VXNlci5jdXJyZW50LmF2YXRhciAhPT0gYXV0aFVzZXIucGljdHVyZVxuICApIHtcbiAgICBjdXJyZW50VXNlci5jdXJyZW50ID0ge1xuICAgICAgaWQ6IGF1dGhVc2VyLmlkLnRvU3RyaW5nKCksXG4gICAgICBuYW1lOiBhdXRoVXNlci5maXJzdE5hbWUsXG4gICAgICBhdmF0YXI6IGF1dGhVc2VyLnBpY3R1cmUsXG4gICAgfVxuICB9XG4gIHJldHVybiB7XG4gICAgY3VycmVudFVzZXI6IGN1cnJlbnRVc2VyLmN1cnJlbnQsXG4gIH1cbn1cblxuY29uc3QgcGFyc2VTU0VMaW5lID0gKGxpbmU6IHN0cmluZyk6IHsgZXZlbnRUeXBlOiBzdHJpbmc7IGRhdGE6IHVua25vd24gfSB8IG51bGwgPT4ge1xuICBpZiAoIWxpbmUudHJpbSgpKSByZXR1cm4gbnVsbFxuXG4gIGNvbnN0IFtldmVudExpbmUsIGRhdGFMaW5lXSA9IGxpbmUuc3BsaXQoJ1xcbicpXG4gIGlmICghZXZlbnRMaW5lIHx8ICFkYXRhTGluZSkgcmV0dXJuIG51bGxcblxuICBjb25zdCBldmVudFR5cGUgPSBldmVudExpbmUucmVwbGFjZSgnZXZlbnQ6ICcsICcnKS50cmltKClcbiAgY29uc3QgZGF0YVN0ciA9IGRhdGFMaW5lLnJlcGxhY2UoJ2RhdGE6ICcsICcnKS50cmltKClcblxuICB0cnkge1xuICAgIGNvbnN0IGRhdGEgPSBKU09OLnBhcnNlKGRhdGFTdHIpXG4gICAgcmV0dXJuIHsgZXZlbnRUeXBlLCBkYXRhIH1cbiAgfSBjYXRjaCAocGFyc2VFcnJvcikge1xuICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIHBhcnNpbmcgU1NFIGRhdGE6JywgcGFyc2VFcnJvciwgZGF0YVN0cilcbiAgICByZXR1cm4gbnVsbFxuICB9XG59XG5cbmNvbnN0IHByb2Nlc3NTU0VTdHJlYW0gPSBhc3luYyAoXG4gIHJlc3BvbnNlOiBSZXNwb25zZSxcbiAgdGhyZWFkSWQ6IHN0cmluZyxcbiAgY2FsbGJhY2tzOiB7XG4gICAgb25Ub2tlbjogKGNvbnRlbnQ6IHN0cmluZykgPT4gdm9pZFxuICAgIG9uTm9kZTogKG1lc3NhZ2U6IHN0cmluZywgdGhyZWFkSWQ6IHN0cmluZykgPT4gdm9pZFxuICAgIG9uQ29tcGxldGU6IChcbiAgICAgIGZpbmFsQ29udGVudDogc3RyaW5nLFxuICAgICAgc291cmNlczogYW55LFxuICAgICAgbWVtb3J5U2Vzc2lvbklkOiBzdHJpbmcsXG4gICAgICBjdXJyZW50VGhyZWFkSWQ6IHN0cmluZyxcbiAgICAgIGF0dGFjaG1lbnRzPzogYW55W10gfCBudWxsLFxuICAgICAgc3VnZ2VzdGlvbnM/OiBzdHJpbmdbXSB8IG51bGwsXG4gICAgICBhZ2VudElkPzogc3RyaW5nIHwgbnVsbFxuICAgICkgPT4gdm9pZFxuICAgIG9uRXJyb3I6IChlcnJvcjogYW55LCB0aHJlYWRJZDogc3RyaW5nKSA9PiB2b2lkXG4gICAgb25BcHByb3ZhbFJlcXVpcmVkPzogKGFwcHJvdmFsOiBhbnksIGFjY3VtdWxhdGVkQ29udGVudDogc3RyaW5nLCBjdXJyZW50VGhyZWFkSWQ6IHN0cmluZykgPT4gdm9pZFxuICB9XG4pOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgY29uc3QgcmVhZGVyID0gcmVzcG9uc2UuYm9keT8uZ2V0UmVhZGVyKClcbiAgaWYgKCFyZWFkZXIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIHJlYWRlciBhdmFpbGFibGUnKVxuICB9XG5cbiAgY29uc3QgZGVjb2RlciA9IG5ldyBUZXh0RGVjb2RlcigpXG4gIGxldCBidWZmZXIgPSAnJ1xuICBsZXQgYWNjdW11bGF0ZWRDb250ZW50ID0gJydcbiAgbGV0IGlzU3RyZWFtQ29tcGxldGUgPSBmYWxzZVxuXG4gIGZ1bmN0aW9uIGhhbmRsZUxpbmUobGluZTogc3RyaW5nKSB7XG4gICAgY29uc3QgcGFyc2VkID0gcGFyc2VTU0VMaW5lKGxpbmUpXG4gICAgaWYgKCFwYXJzZWQpIHJldHVyblxuXG4gICAgY29uc3QgeyBldmVudFR5cGUsIGRhdGEgfSA9IHBhcnNlZFxuICAgIGNvbnN0IGV2ZW50RGF0YSA9IGRhdGEgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj5cblxuICAgIGlmIChldmVudFR5cGUgPT09ICd0b2tlbicpIHtcbiAgICAgIGNvbnN0IGNvbnRlbnQgPSBldmVudERhdGEuY29udGVudCBhcyBzdHJpbmdcbiAgICAgIGFjY3VtdWxhdGVkQ29udGVudCArPSBjb250ZW50XG4gICAgICBjYWxsYmFja3Mub25Ub2tlbihhY2N1bXVsYXRlZENvbnRlbnQpXG4gICAgfSBlbHNlIGlmIChldmVudFR5cGUgPT09ICdub2RlJykge1xuICAgICAgaWYgKGV2ZW50RGF0YS5tZXNzYWdlICYmIHR5cGVvZiBldmVudERhdGEubWVzc2FnZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgY2FsbGJhY2tzLm9uTm9kZShldmVudERhdGEubWVzc2FnZSwgdGhyZWFkSWQpXG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChldmVudFR5cGUgPT09ICdjb21wbGV0ZScpIHtcbiAgICAgIGNvbnN0IGZpbmFsQ29udGVudCA9IChldmVudERhdGEuY29udGVudCBhcyBzdHJpbmcpIHx8IGFjY3VtdWxhdGVkQ29udGVudFxuICAgICAgY29uc3Qgc291cmNlcyA9IChldmVudERhdGEuc291cmNlcyBhcyB1bmtub3duKSB8fCBudWxsXG4gICAgICBjb25zdCBtZW1vcnlTZXNzaW9uSWQgPSAoZXZlbnREYXRhLm1lbW9yeV9zZXNzaW9uX2lkIGFzIHN0cmluZykgfHwgJydcbiAgICAgIGNvbnN0IGF0dGFjaG1lbnRzID0gQXJyYXkuaXNBcnJheShldmVudERhdGEuYXR0YWNobWVudHMpID8gZXZlbnREYXRhLmF0dGFjaG1lbnRzIDogbnVsbFxuICAgICAgY29uc3Qgc3VnZ2VzdGlvbnMgPSBBcnJheS5pc0FycmF5KGV2ZW50RGF0YS5zdWdnZXN0X3JlcGx5KVxuICAgICAgICA/IChldmVudERhdGEuc3VnZ2VzdF9yZXBseSBhcyBzdHJpbmdbXSlcbiAgICAgICAgOiBBcnJheS5pc0FycmF5KGV2ZW50RGF0YS5zdWdnZXN0aW9ucylcbiAgICAgICAgICA/IChldmVudERhdGEuc3VnZ2VzdGlvbnMgYXMgc3RyaW5nW10pXG4gICAgICAgICAgOiBudWxsXG4gICAgICBjb25zdCBhZ2VudElkUmF3ID0gZXZlbnREYXRhLmFnZW50X2lkID8/IGV2ZW50RGF0YS5hZ2VudElkXG4gICAgICBjb25zdCBjb21wbGV0ZWRBZ2VudElkID0gYWdlbnRJZFJhdyAhPSBudWxsICYmIFN0cmluZyhhZ2VudElkUmF3KS50cmltKCkgIT09ICcnID8gU3RyaW5nKGFnZW50SWRSYXcpLnRyaW0oKSA6IG51bGxcbiAgICAgIGNhbGxiYWNrcy5vbkNvbXBsZXRlKGZpbmFsQ29udGVudCwgc291cmNlcywgbWVtb3J5U2Vzc2lvbklkLCB0aHJlYWRJZCwgYXR0YWNobWVudHMsIHN1Z2dlc3Rpb25zLCBjb21wbGV0ZWRBZ2VudElkKVxuICAgIH0gZWxzZSBpZiAoZXZlbnRUeXBlID09PSAnYXBwcm92YWxfcmVxdWlyZWQnKSB7XG4gICAgICBjYWxsYmFja3Mub25BcHByb3ZhbFJlcXVpcmVkPy4oZXZlbnREYXRhLCBhY2N1bXVsYXRlZENvbnRlbnQsIHRocmVhZElkKVxuICAgIH0gZWxzZSBpZiAoZXZlbnRUeXBlID09PSAnZXJyb3InKSB7XG4gICAgICBjYWxsYmFja3Mub25FcnJvcihldmVudERhdGEuZXJyb3IsIHRocmVhZElkKVxuICAgIH1cbiAgfVxuXG4gIHdoaWxlICghaXNTdHJlYW1Db21wbGV0ZSkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1hd2FpdC1pbi1sb29wXG4gICAgY29uc3QgeyBkb25lLCB2YWx1ZSB9ID0gYXdhaXQgcmVhZGVyLnJlYWQoKVxuICAgIGlmIChkb25lKSB7XG4gICAgICBpc1N0cmVhbUNvbXBsZXRlID0gdHJ1ZVxuICAgICAgYnJlYWtcbiAgICB9XG5cbiAgICBidWZmZXIgKz0gZGVjb2Rlci5kZWNvZGUodmFsdWUsIHsgc3RyZWFtOiB0cnVlIH0pXG4gICAgY29uc3QgbGluZXMgPSBidWZmZXIuc3BsaXQoJ1xcblxcbicpXG4gICAgYnVmZmVyID0gbGluZXMucG9wKCkgfHwgJydcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGluZXMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgIGhhbmRsZUxpbmUobGluZXNbaV0pXG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBjb25zdCB1c2VDaGF0TWFuYWdlciA9ICh7XG4gIGNoYXRJZDogaW5pdGlhbENoYXRJZCxcbiAgdXNlckluaXRpYWxNZXNzYWdlLFxuICBvbkVycm9yLFxuICBhZ2VudHMgPSBbXSxcbn06IFVzZUNoYXRNYW5hZ2VyUHJvcHMpID0+IHtcbiAgY29uc3QgeyB0IH0gPSB1c2VUKClcbiAgY29uc3QgYXV0aFVzZXIgPSB1c2VVc2VyKClcbiAgY29uc3Qge1xuICAgIHByb2plY3QsXG4gICAgc2V0UHJvamVjdCxcbiAgICBjbGllbnQsXG4gICAgc2V0Q2xpZW50LFxuICAgIGFnZW50LFxuICAgIGlzV2ViU2VhcmNoQWN0aXZlLFxuICAgIGlzRGVlcFNlYXJjaEFjdGl2ZSxcbiAgICBjaGlwc1Byb2plY3QsXG4gICAgc2V0Q2hpcHNQcm9qZWN0LFxuICB9ID0gdXNlR2xvYmFsQ29udGV4dCgpXG4gIGNvbnN0IGV2ZW50ID0gdXNlRXZlbnQoKVxuICBjb25zdCB7IGZldGNoUHJvamVjdHMgfSA9IHVzZVByb2plY3RzKClcbiAgY29uc3QgeyBjdXJyZW50VXNlciB9ID0gdXNlU3RhYmxlQ2FsbGJhY2tzKGF1dGhVc2VyKVxuICBjb25zdCB7IGdldFRhYlRhc2tEZWZhdWx0IH0gPSB1c2VUYWJUYXNrRGVmYXVsdCgpXG4gIGNvbnN0IGN1cnJlbnRNZXNzYWdlSWQgPSB1c2VSZWYodXVpZHY0KCkpXG4gIGNvbnN0IGN1cnJlbnRVc2VyUXVlc3Rpb24gPSB1c2VSZWY8c3RyaW5nIHwgbnVsbD4obnVsbClcbiAgY29uc3QgY3VycmVudENoYXRJZCA9IHVzZVJlZihpbml0aWFsQ2hhdElkIHx8IHV1aWR2NCgpKVxuICBjb25zdCByZXBvcnRlZEV2ZW50ID0gdXNlUmVmKGZhbHNlKVxuICBjb25zdCBtZXNzYWdlc1JlZiA9IHVzZVJlZjxDaGF0TWVzc2FnZVtdPihbXSlcbiAgY29uc3QgaXNQcm9jZXNzaW5nUmVmID0gdXNlUmVmKGZhbHNlKVxuICBjb25zdCBmaXJzdFRpbWVSZWYgPSB1c2VSZWYoZmFsc2UpXG4gIGNvbnN0IFthY3RpdmVMb2FkaW5ncywgc2V0QWN0aXZlTG9hZGluZ3NdID0gdXNlU3RhdGU8UmVjb3JkPHN0cmluZywgc3RyaW5nPj4oe30pXG5cbiAgY29uc3QgaXNXZWJTZWFyY2hBY3RpdmVSZWYgPSB1c2VSZWYoaXNXZWJTZWFyY2hBY3RpdmUpXG4gIGNvbnN0IGlzRGVlcFNlYXJjaEFjdGl2ZVJlZiA9IHVzZVJlZihpc0RlZXBTZWFyY2hBY3RpdmUpXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpc1dlYlNlYXJjaEFjdGl2ZVJlZi5jdXJyZW50ID0gaXNXZWJTZWFyY2hBY3RpdmVcbiAgICBpc0RlZXBTZWFyY2hBY3RpdmVSZWYuY3VycmVudCA9IGlzRGVlcFNlYXJjaEFjdGl2ZVxuICB9LCBbaXNXZWJTZWFyY2hBY3RpdmUsIGlzRGVlcFNlYXJjaEFjdGl2ZV0pXG5cbiAgY29uc3QgeyBsb2FkaW5nTWVzc2FnZXMsIG1lc3NhZ2VzLCBpc0xvYWRpbmdNb3JlTWVzc2FnZXMsIGxvYWRNZXNzYWdlcywgYWRkTWVzc2FnZSwgcmVtb3ZlTWVzc2FnZSwgaGFuZGxlU2Nyb2xsIH0gPVxuICAgIHVzZUNoYXRNZXNzYWdlcyh7XG4gICAgICBjaGF0SWQ6IGluaXRpYWxDaGF0SWQgfHwgY3VycmVudENoYXRJZC5jdXJyZW50LFxuICAgICAgY3VycmVudFVzZXIsXG4gICAgICB1c2VySW5pdGlhbE1lc3NhZ2UsXG4gICAgICBvbkVycm9yLFxuICAgICAgYWdlbnRzLFxuICAgIH0pXG5cbiAgbWVzc2FnZXNSZWYuY3VycmVudCA9IG1lc3NhZ2VzXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBjdXN0b21FdmVudCA9IG5ldyBDdXN0b21FdmVudCgnY2hhdC1sb2FkaW5nLW1lc3NhZ2VzLWNoYW5nZWQnLCB7XG4gICAgICBkZXRhaWw6IHsgbG9hZGluZ01lc3NhZ2VzIH0sXG4gICAgfSlcbiAgICBkb2N1bWVudC5kaXNwYXRjaEV2ZW50KGN1c3RvbUV2ZW50KVxuICB9LCBbbG9hZGluZ01lc3NhZ2VzXSlcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChpbml0aWFsQ2hhdElkICYmIGluaXRpYWxDaGF0SWQgIT09IGN1cnJlbnRDaGF0SWQuY3VycmVudCkge1xuICAgICAgLy8gTGltcGlhciBjb250ZXh0byBnbG9iYWwgYWwgY2FtYmlhciBkZSBjb252ZXJzYWNpw7NuXG4gICAgICBzZXRQcm9qZWN0KG51bGwpXG4gICAgICBzZXRDbGllbnQ/LihudWxsKVxuICAgICAgc2V0Q2hpcHNQcm9qZWN0KG51bGwpXG5cbiAgICAgIGN1cnJlbnRDaGF0SWQuY3VycmVudCA9IGluaXRpYWxDaGF0SWRcbiAgICAgIGN1cnJlbnRNZXNzYWdlSWQuY3VycmVudCA9IHV1aWR2NCgpXG4gICAgICBjdXJyZW50VXNlclF1ZXN0aW9uLmN1cnJlbnQgPSBudWxsXG4gICAgICByZXBvcnRlZEV2ZW50LmN1cnJlbnQgPSBmYWxzZVxuICAgICAgaXNQcm9jZXNzaW5nUmVmLmN1cnJlbnQgPSBmYWxzZVxuXG4gICAgICBsb2FkTWVzc2FnZXMoKVxuICAgIH1cbiAgfSwgW2luaXRpYWxDaGF0SWQsIHByb2plY3QsIHNldFByb2plY3QsIHNldENsaWVudCwgc2V0Q2hpcHNQcm9qZWN0LCBsb2FkTWVzc2FnZXNdKVxuXG4gIC8vIFNpbmNyb25pemFyIGNoaXBzUHJvamVjdCBjdWFuZG8gaGF5IG1lbnNhamVzIGNvbiBwcm9qZWN0SWQgcGVybyBjaGlwc1Byb2plY3Qgbm8gc2UgaGEgc2V0ZWFkb1xuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChjaGlwc1Byb2plY3QgfHwgbG9hZGluZ01lc3NhZ2VzKSByZXR1cm5cbiAgICBjb25zdCBsYXN0TXNnV2l0aFByb2plY3QgPSBtZXNzYWdlcy5maWx0ZXIobXNnID0+IG1zZy5wcm9qZWN0SWQpLmF0KC0xKVxuICAgIGNvbnN0IHsgcHJvamVjdElkLCBwcm9qZWN0TmFtZSB9ID0gbGFzdE1zZ1dpdGhQcm9qZWN0IHx8IHt9XG4gICAgaWYgKCFwcm9qZWN0SWQpIHJldHVyblxuXG4gICAgZmV0Y2hQcm9qZWN0cyhwcm9qZWN0SWQpLnRoZW4ocHJvamVjdHMgPT4ge1xuICAgICAgY29uc3QgZm91bmQgPSBwcm9qZWN0cz8uZmluZChwID0+IE51bWJlcihwLmlkKSA9PT0gTnVtYmVyKHByb2plY3RJZCkpXG4gICAgICBpZiAoZm91bmQpIHtcbiAgICAgICAgc2V0Q2hpcHNQcm9qZWN0KHtcbiAgICAgICAgICBwcm9qZWN0TmFtZTogZm91bmQubmFtZSxcbiAgICAgICAgICBjbGllbnROYW1lOiBmb3VuZC5jbGllbnQ/Lm5hbWUgfHwgJycsXG4gICAgICAgICAgcHJvamVjdElkOiBTdHJpbmcoZm91bmQuaWQpLFxuICAgICAgICB9KVxuICAgICAgICBzZXRQcm9qZWN0KGZvdW5kKVxuICAgICAgfSBlbHNlIGlmIChwcm9qZWN0TmFtZSkge1xuICAgICAgICBzZXRDaGlwc1Byb2plY3Qoe1xuICAgICAgICAgIHByb2plY3ROYW1lLFxuICAgICAgICAgIGNsaWVudE5hbWU6ICcnLFxuICAgICAgICAgIHByb2plY3RJZDogU3RyaW5nKHByb2plY3RJZCksXG4gICAgICAgIH0pXG4gICAgICAgIHNldFByb2plY3QoeyBpZDogTnVtYmVyKHByb2plY3RJZCksIG5hbWU6IHByb2plY3ROYW1lIH0pXG4gICAgICB9XG4gICAgfSlcbiAgfSwgW21lc3NhZ2VzLCBjaGlwc1Byb2plY3QsIGxvYWRpbmdNZXNzYWdlcywgZmV0Y2hQcm9qZWN0cywgc2V0Q2hpcHNQcm9qZWN0LCBzZXRQcm9qZWN0XSlcblxuICAvLyBTaW5jcm9uaXphciBjbGllbnQgY3VhbmRvIGhheSBtZW5zYWplcyBjb24gY2xpZW50SWQgcGVybyBjbGllbnQgbm8gc2UgaGEgc2V0ZWFkb1xuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChjbGllbnQgfHwgbG9hZGluZ01lc3NhZ2VzKSByZXR1cm5cbiAgICBjb25zdCBsYXN0TXNnV2l0aENsaWVudCA9IG1lc3NhZ2VzLmZpbHRlcihtc2cgPT4gbXNnLmNsaWVudElkICE9IG51bGwgJiYgbXNnLmNsaWVudE5hbWUpLmF0KC0xKVxuICAgIGNvbnN0IHsgY2xpZW50SWQ6IG1zZ0NsaWVudElkLCBjbGllbnROYW1lOiBtc2dDbGllbnROYW1lIH0gPSBsYXN0TXNnV2l0aENsaWVudCB8fCB7fVxuICAgIGlmIChtc2dDbGllbnRJZCA9PSBudWxsIHx8ICFtc2dDbGllbnROYW1lKSByZXR1cm5cblxuICAgIHNldENsaWVudD8uKHsgaWQ6IE51bWJlcihtc2dDbGllbnRJZCksIG5hbWU6IG1zZ0NsaWVudE5hbWUgfSlcbiAgfSwgW21lc3NhZ2VzLCBjbGllbnQsIGxvYWRpbmdNZXNzYWdlcywgc2V0Q2xpZW50XSlcblxuICBjb25zdCBoYW5kbGVTdHJlYW1FcnJvciA9IHVzZUNhbGxiYWNrKFxuICAgIChlcnJvck1lc3NhZ2U/OiBzdHJpbmcpID0+IHtcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPVxuICAgICAgICBlcnJvck1lc3NhZ2UgPT09IFwiQWNjZXNzIGRlbmllZDogWW91IGRvbid0IGhhdmUgcGVybWlzc2lvbiB0byBhY2Nlc3MgdGhpcyBhZ2VudFwiXG4gICAgICAgICAgPyB0KCdjaGF0LmVycm9yQWNjZXNzRGVuaWVkJylcbiAgICAgICAgICA6IHQoJ2NoYXQuZXJyb3InKVxuXG4gICAgICBhZGRNZXNzYWdlKHtcbiAgICAgICAgaWQ6IGBhbnN3ZXItJHtjdXJyZW50TWVzc2FnZUlkLmN1cnJlbnR9YCxcbiAgICAgICAgbWVzc2FnZSxcbiAgICAgICAgaXNFcnJvcjogdHJ1ZSxcbiAgICAgICAgZGF0ZTogbmV3IERhdGUoKSxcbiAgICAgICAgdXNlcjogeyBpZDogJ2Fzc2lzdGFudCcsIG5hbWU6ICdBc3Npc3RhbnQnIH0sXG4gICAgICAgIHJvbGU6IENoYXRIaXN0b3J5Um9sZS5BU1NJU1RBTlQsXG4gICAgICB9KVxuICAgICAgaXNQcm9jZXNzaW5nUmVmLmN1cnJlbnQgPSBmYWxzZVxuICAgIH0sXG4gICAgW2FkZE1lc3NhZ2UsIHRdXG4gIClcblxuICBjb25zdCBoYW5kbGVTdHJlYW1VcGRhdGUgPSB1c2VDYWxsYmFjayhcbiAgICAoY29udGVudDogc3RyaW5nLCBzb3VyY2VzOiBhbnksIG1lbW9yeVNlc3Npb25JZDogc3RyaW5nKSA9PiB7XG4gICAgICBjb25zdCB0ZW1wTWVzc2FnZUlkID0gYGFuc3dlci0ke2N1cnJlbnRNZXNzYWdlSWQuY3VycmVudH0tc3RyZWFtaW5nYFxuXG4gICAgICBhZGRNZXNzYWdlKHtcbiAgICAgICAgaWQ6IHRlbXBNZXNzYWdlSWQsXG4gICAgICAgIG1lc3NhZ2U6IGNvbnRlbnQsXG4gICAgICAgIGRhdGU6IG5ldyBEYXRlKCksXG4gICAgICAgIHVzZXI6IHsgaWQ6ICdhc3Npc3RhbnQnLCBuYW1lOiAnQXNzaXN0YW50JyB9LFxuICAgICAgICByb2xlOiBDaGF0SGlzdG9yeVJvbGUuQVNTSVNUQU5ULFxuICAgICAgICBzb3VyY2VzLFxuICAgICAgICBtZW1vcnlTZXNzaW9uSWQsXG4gICAgICB9KVxuICAgIH0sXG4gICAgW2FkZE1lc3NhZ2VdXG4gIClcblxuICBjb25zdCBoYW5kbGVTdHJlYW1GaW5pc2ggPSB1c2VDYWxsYmFjayhcbiAgICBhc3luYyAoXG4gICAgICBjb250ZW50OiBzdHJpbmcsXG4gICAgICBzb3VyY2VzOiBhbnksXG4gICAgICBtZW1vcnlTZXNzaW9uSWQ6IHN0cmluZyxcbiAgICAgIHJhd0F0dGFjaG1lbnRzPzogYW55W10gfCBudWxsLFxuICAgICAgc3VnZ2VzdGlvbnM/OiBzdHJpbmdbXSB8IG51bGwsXG4gICAgICBjb21wbGV0ZWRBZ2VudElkPzogc3RyaW5nIHwgbnVsbFxuICAgICkgPT4ge1xuICAgICAgY29uc3QgdGVtcE1lc3NhZ2VJZCA9IGBhbnN3ZXItJHtjdXJyZW50TWVzc2FnZUlkLmN1cnJlbnR9LXN0cmVhbWluZ2BcbiAgICAgIHJlbW92ZU1lc3NhZ2UodGVtcE1lc3NhZ2VJZClcbiAgICAgIGNvbnN0IGF0dGFjaG1lbnRzID0gbm9ybWFsaXplQXNzaXN0YW50QXR0YWNobWVudHMocmF3QXR0YWNobWVudHMpXG5cbiAgICAgIC8vIERldGVjdGFyIHRvZGFzIGxhcyBVUkxzIGRlIHRhcmVhcyAoLi4uL3Rhc2tzLzEyMy9kZXRhaWx8bWVzc2FnZXxtZXNzYWdlc3xmaWxlc3xoaXN0b3J5fGhvdXJzKVxuICAgICAgY29uc3QgdGFza1VybFJlZ2V4ID0gbmV3IFJlZ0V4cChUQVNLX1VSTF9SRUdFWF9QQVRURVJOLCAnZycpXG4gICAgICBjb25zdCBtYXRjaGVzID0gWy4uLmNvbnRlbnQubWF0Y2hBbGwodGFza1VybFJlZ2V4KV1cblxuICAgICAgbGV0IGNvbnRlbnRUb0FkZCA9IGNvbnRlbnRcbiAgICAgIGNvbnN0IHByZXZpb3VzTWVzc2FnZSA9IG1lc3NhZ2VzUmVmLmN1cnJlbnQuZmlsdGVyKG0gPT4gbS5pZCAhPT0gdGVtcE1lc3NhZ2VJZCkuYXQoLTEpXG4gICAgICBjb25zdCBoYXNBcHByb3ZhbEluUHJldmlvdXNNZXNzYWdlID0gcHJldmlvdXNNZXNzYWdlPy5hcHByb3ZhbCAhPSBudWxsXG4gICAgICBjb25zdCBUQVNLX0NSRUFUSU9OX1RPT0xTID0gWydjcmVhdGVfdGFzaycsICdjcmVhdGVfdGFza3NfYmF0Y2gnLCAnY2xvbmVfdGFzayddXG4gICAgICBjb25zdCBUQVNLX0VESVRfVE9PTFMgPSBbXG4gICAgICAgICdlZGl0X3Rhc2snLFxuICAgICAgICAnZWRpdF90YXNrc19iYXRjaCcsXG4gICAgICAgICd0YXNrX2Fzc2lnbicsXG4gICAgICAgICd0YXNrX3VuYXNzaWduJyxcbiAgICAgICAgJ3VwZGF0ZV90YXNrX3R5cGUnLFxuICAgICAgICAndXBkYXRlX2VzdGltYXRlZF9ob3VycycsXG4gICAgICAgICdhc3NpZ25fdGFza19sYWJlbCcsXG4gICAgICBdXG4gICAgICBjb25zdCBUQVNLX0RFTEVURV9UT09MUyA9IFsnZGVsZXRlX3Rhc2snLCAnZGVsZXRlX3Rhc2tzX2JhdGNoJ11cbiAgICAgIGNvbnN0IHBlbmRpbmdBY3Rpb25zID0gcHJldmlvdXNNZXNzYWdlPy5hcHByb3ZhbD8ucGVuZGluZ19hY3Rpb25zIHx8IFtdXG4gICAgICBjb25zdCB3YXNUYXNrQ3JlYXRpb24gPVxuICAgICAgICBoYXNBcHByb3ZhbEluUHJldmlvdXNNZXNzYWdlICYmXG4gICAgICAgIHBlbmRpbmdBY3Rpb25zLnNvbWUoKGFjdGlvbjogYW55KSA9PiBUQVNLX0NSRUFUSU9OX1RPT0xTLmluY2x1ZGVzKGFjdGlvbi50b29sX25hbWUpKVxuICAgICAgY29uc3Qgd2FzVGFza0VkaXQgPVxuICAgICAgICBoYXNBcHByb3ZhbEluUHJldmlvdXNNZXNzYWdlICYmIHBlbmRpbmdBY3Rpb25zLnNvbWUoKGFjdGlvbjogYW55KSA9PiBUQVNLX0VESVRfVE9PTFMuaW5jbHVkZXMoYWN0aW9uLnRvb2xfbmFtZSkpXG4gICAgICBjb25zdCB3YXNUYXNrRGVsZXRlID1cbiAgICAgICAgaGFzQXBwcm92YWxJblByZXZpb3VzTWVzc2FnZSAmJlxuICAgICAgICBwZW5kaW5nQWN0aW9ucy5zb21lKChhY3Rpb246IGFueSkgPT4gVEFTS19ERUxFVEVfVE9PTFMuaW5jbHVkZXMoYWN0aW9uLnRvb2xfbmFtZSkpXG4gICAgICBjb25zdCB3YXNDcmVhdGVBZ2VudEFwcHJvdmVkID1cbiAgICAgICAgaGFzQXBwcm92YWxJblByZXZpb3VzTWVzc2FnZSAmJlxuICAgICAgICBwcmV2aW91c01lc3NhZ2U/LmFwcHJvdmFsU3RhdHVzID09PSAnYXBwcm92ZWQnICYmXG4gICAgICAgIHBlbmRpbmdBY3Rpb25zLnNvbWUoKGFjdGlvbjogYW55KSA9PiBhY3Rpb24udG9vbF9uYW1lID09PSAnY3JlYXRlX2FnZW50JylcbiAgICAgIGNvbnN0IHdhc0NvbmZpZ3VyZUFnZW50QWNjZXNzQXBwcm92ZWQgPVxuICAgICAgICBoYXNBcHByb3ZhbEluUHJldmlvdXNNZXNzYWdlICYmXG4gICAgICAgIHByZXZpb3VzTWVzc2FnZT8uYXBwcm92YWxTdGF0dXMgPT09ICdhcHByb3ZlZCcgJiZcbiAgICAgICAgcGVuZGluZ0FjdGlvbnMuc29tZSgoYWN0aW9uOiBhbnkpID0+IChhY3Rpb24udG9vbF9uYW1lIHx8ICcnKS50b0xvd2VyQ2FzZSgpID09PSAnY29uZmlndXJlX2FnZW50X2FjY2VzcycpXG4gICAgICBsZXQgY3JlYXRlQWdlbnRGb2xsb3dVcDogeyBhZ2VudElkOiBzdHJpbmcgfSB8IHVuZGVmaW5lZFxuICAgICAgaWYgKHdhc0NyZWF0ZUFnZW50QXBwcm92ZWQgJiYgd2luZG93Lk1BSUFfQ0hBVF9BSV9GRUFUVVJFX0FDQ0VTU19NVUxUSV9BR0VOVFMgJiYgY29tcGxldGVkQWdlbnRJZD8udHJpbSgpKSB7XG4gICAgICAgIGNyZWF0ZUFnZW50Rm9sbG93VXAgPSB7IGFnZW50SWQ6IGNvbXBsZXRlZEFnZW50SWQudHJpbSgpIH1cbiAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgIHdhc0NvbmZpZ3VyZUFnZW50QWNjZXNzQXBwcm92ZWQgJiZcbiAgICAgICAgd2luZG93Lk1BSUFfQ0hBVF9BSV9GRUFUVVJFX0FDQ0VTU19NVUxUSV9BR0VOVFMgJiZcbiAgICAgICAgKGNvbXBsZXRlZEFnZW50SWQ/LnRyaW0oKSB8fFxuICAgICAgICAgIGV4dHJhY3RBZ2VudElkRnJvbVBlbmRpbmdBY3Rpb25zQnlUb29sTmFtZShwZW5kaW5nQWN0aW9ucywgJ2NvbmZpZ3VyZV9hZ2VudF9hY2Nlc3MnKSlcbiAgICAgICkge1xuICAgICAgICBjb25zdCBjb25maWd1cmVkQWdlbnRJZCA9XG4gICAgICAgICAgY29tcGxldGVkQWdlbnRJZD8udHJpbSgpIHx8XG4gICAgICAgICAgZXh0cmFjdEFnZW50SWRGcm9tUGVuZGluZ0FjdGlvbnNCeVRvb2xOYW1lKHBlbmRpbmdBY3Rpb25zLCAnY29uZmlndXJlX2FnZW50X2FjY2VzcycpXG4gICAgICAgIGNyZWF0ZUFnZW50Rm9sbG93VXAgPSB7XG4gICAgICAgICAgYWdlbnRJZDogY29uZmlndXJlZEFnZW50SWQgYXMgc3RyaW5nLFxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICh3YXNDcmVhdGVBZ2VudEFwcHJvdmVkKSB7XG4gICAgICAgIGV2ZW50KEVWRU5UUy5haUNoYXRIaXRsT3B0aW9uLCB7XG4gICAgICAgICAgYWdlbnRfdHlwZTogZ2V0SGl0bEFuYWx5dGljc0FnZW50VHlwZShhZ2VudCksXG4gICAgICAgICAgYWN0aW9uX3R5cGU6IGJ1aWxkSGl0bEFjdGlvblR5cGVMaXN0KHBlbmRpbmdBY3Rpb25zKSxcbiAgICAgICAgICBkZWNpc2lvbjogJ2FjY2VwdCcsXG4gICAgICAgICAgb3B0aW9uOiAnY3JlYXRlX2FnZW50JyxcbiAgICAgICAgICAuLi4oY29tcGxldGVkQWdlbnRJZD8udHJpbSgpID8geyBjcmVhdGVkX2FnZW50X2lkOiBjb21wbGV0ZWRBZ2VudElkLnRyaW0oKSB9IDoge30pLFxuICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICBjb25zdCB3YXNFZGl0QWdlbnRBcHByb3ZlZCA9XG4gICAgICAgIGhhc0FwcHJvdmFsSW5QcmV2aW91c01lc3NhZ2UgJiZcbiAgICAgICAgcHJldmlvdXNNZXNzYWdlPy5hcHByb3ZhbFN0YXR1cyA9PT0gJ2FwcHJvdmVkJyAmJlxuICAgICAgICBwZW5kaW5nQWN0aW9ucy5zb21lKChhY3Rpb246IGFueSkgPT4gKGFjdGlvbi50b29sX25hbWUgfHwgJycpLnRvTG93ZXJDYXNlKCkgPT09ICdlZGl0X2FnZW50JylcblxuICAgICAgbGV0IGVkaXRBZ2VudEZvbGxvd1VwOiB7IGFnZW50SWQ6IHN0cmluZyB9IHwgdW5kZWZpbmVkXG4gICAgICBpZiAod2FzRWRpdEFnZW50QXBwcm92ZWQpIHtcbiAgICAgICAgY29uc3QgZnJvbVN0cmVhbSA9IGNvbXBsZXRlZEFnZW50SWQ/LnRyaW0oKVxuICAgICAgICBjb25zdCBmcm9tQXJncyA9IGV4dHJhY3RBZ2VudElkRnJvbUVkaXRBZ2VudFBlbmRpbmdBY3Rpb25zKHBlbmRpbmdBY3Rpb25zKVxuICAgICAgICBjb25zdCByZXNvbHZlZEFnZW50SWQgPSBmcm9tU3RyZWFtIHx8IGZyb21BcmdzXG4gICAgICAgIGlmIChyZXNvbHZlZEFnZW50SWQpIHtcbiAgICAgICAgICBlZGl0QWdlbnRGb2xsb3dVcCA9IHsgYWdlbnRJZDogcmVzb2x2ZWRBZ2VudElkIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjb25zdCB0YXNrSWRzRnJvbVVybHMgPSBtYXRjaGVzLm1hcChtYXRjaCA9PiBwYXJzZUludChtYXRjaFsxXSwgMTApKVxuICAgICAgY29uc3QgdGFza0lkc0Zyb21EZWxldGVBcHByb3ZhbCA9IGV4dHJhY3RUYXNrSWRzRnJvbURlbGV0ZVBlbmRpbmdBY3Rpb25zKHBlbmRpbmdBY3Rpb25zKVxuICAgICAgY29uc3QgdGFza0lkc0Zyb21EZWxldGlvblRleHQgPVxuICAgICAgICB3YXNUYXNrRGVsZXRlICYmIHRhc2tJZHNGcm9tVXJscy5sZW5ndGggPT09IDAgJiYgdGFza0lkc0Zyb21EZWxldGVBcHByb3ZhbC5sZW5ndGggPT09IDBcbiAgICAgICAgICA/IGV4dHJhY3RUYXNrSWRzRnJvbUFzc2lzdGFudERlbGV0aW9uVGV4dChjb250ZW50KVxuICAgICAgICAgIDogW11cbiAgICAgIGNvbnN0IHRhc2tJZHNGb3JEYXNoYm9hcmQgPVxuICAgICAgICB0YXNrSWRzRnJvbVVybHMubGVuZ3RoID4gMFxuICAgICAgICAgID8gdGFza0lkc0Zyb21VcmxzXG4gICAgICAgICAgOiB0YXNrSWRzRnJvbURlbGV0ZUFwcHJvdmFsLmxlbmd0aCA+IDBcbiAgICAgICAgICAgID8gdGFza0lkc0Zyb21EZWxldGVBcHByb3ZhbFxuICAgICAgICAgICAgOiB0YXNrSWRzRnJvbURlbGV0aW9uVGV4dFxuXG4gICAgICBjb25zdCBzaG91bGRTeW5jRGFzaGJvYXJkID1cbiAgICAgICAgaGFzQXBwcm92YWxJblByZXZpb3VzTWVzc2FnZSAmJlxuICAgICAgICAod2FzVGFza0NyZWF0aW9uIHx8IHdhc1Rhc2tFZGl0IHx8IHdhc1Rhc2tEZWxldGUpICYmXG4gICAgICAgIHRhc2tJZHNGb3JEYXNoYm9hcmQubGVuZ3RoID4gMFxuXG4gICAgICBpZiAoc2hvdWxkU3luY0Rhc2hib2FyZCkge1xuICAgICAgICBjb25zdCB0YXNrSWRzID0gdGFza0lkc0ZvckRhc2hib2FyZFxuICAgICAgICBpZiAobWF0Y2hlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgY29uc3QgdGFiID0gYXdhaXQgZ2V0VGFiVGFza0RlZmF1bHQodGFza0lkc1swXSlcbiAgICAgICAgICBjb25zdCB0YWJTZWdtZW50ID0gdGFiID8gYC8ke3RhYn1gIDogJy9kZXRhaWwnXG4gICAgICAgICAgY29udGVudFRvQWRkID0gY29udGVudC5yZXBsYWNlKHRhc2tVcmxSZWdleCwgdXJsID0+XG4gICAgICAgICAgICB1cmwucmVwbGFjZSgvXFwvKGRldGFpbHxtZXNzYWdlfG1lc3NhZ2VzfGZpbGVzfGhpc3Rvcnl8aG91cnMpKD89JHxcXD8pLywgdGFiU2VnbWVudClcbiAgICAgICAgICApXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBsYXN0UHJvamVjdE1lc3NhZ2UgPSBtZXNzYWdlc1JlZi5jdXJyZW50LmZpbHRlcihtc2cgPT4gbXNnLnByb2plY3RJZCkuYXQoLTEpXG4gICAgICAgIGNvbnN0IGNvbnRleHRQcm9qZWN0SWRSYXcgPSBwcm9qZWN0Py5pZCB8fCBsYXN0UHJvamVjdE1lc3NhZ2U/LnByb2plY3RJZFxuICAgICAgICBjb25zdCBjb250ZXh0UHJvamVjdElkID0gY29udGV4dFByb2plY3RJZFJhdyA/IHBhcnNlSW50KFN0cmluZyhjb250ZXh0UHJvamVjdElkUmF3KSwgMTApIDogbnVsbFxuICAgICAgICBjb25zdCBwYXRoTWF0Y2ggPSB3aW5kb3cubG9jYXRpb24ucGF0aG5hbWUubWF0Y2goL15cXC9wcm9qZWN0c1xcLyhcXGQrKVxcLy8pXG4gICAgICAgIGNvbnN0IHJvdXRlUHJvamVjdElkID0gcGF0aE1hdGNoID8gcGFyc2VJbnQocGF0aE1hdGNoWzFdLCAxMCkgOiBudWxsXG4gICAgICAgIGNvbnN0IGlzT25Qcm9qZWN0Um91dGUgPSBjb250ZXh0UHJvamVjdElkICYmIHJvdXRlUHJvamVjdElkICYmIGNvbnRleHRQcm9qZWN0SWQgPT09IHJvdXRlUHJvamVjdElkXG5cbiAgICAgICAgaWYgKGlzT25Qcm9qZWN0Um91dGUpIHtcbiAgICAgICAgICBpZiAod2FzVGFza0NyZWF0aW9uKSB7XG4gICAgICAgICAgICB3aW5kb3cubmV3UHJvamVjdERhc2hib2FyZD8uYWRkRXhpc3RpbmdUYXNrVG9EYXNoYm9hcmQ/Lih0YXNrSWRzKVxuICAgICAgICAgIH0gZWxzZSBpZiAod2FzVGFza0VkaXQpIHtcbiAgICAgICAgICAgIHdpbmRvdy5uZXdQcm9qZWN0RGFzaGJvYXJkPy5lZGl0RXhpc3RpbmdUYXNrSW5EYXNoYm9hcmQ/Lih0YXNrSWRzKVxuICAgICAgICAgIH0gZWxzZSBpZiAod2FzVGFza0RlbGV0ZSkge1xuICAgICAgICAgICAgd2luZG93Lm5ld1Byb2plY3REYXNoYm9hcmQ/LmRlbGV0ZUV4aXN0aW5nVGFza0Zyb21EYXNoYm9hcmQ/Lih0YXNrSWRzKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBhZGRNZXNzYWdlKHtcbiAgICAgICAgaWQ6IGBhbnN3ZXItJHttZW1vcnlTZXNzaW9uSWR9YCxcbiAgICAgICAgbWVzc2FnZTogY29udGVudFRvQWRkLFxuICAgICAgICBkYXRlOiBuZXcgRGF0ZSgpLFxuICAgICAgICB1c2VyOiB7IGlkOiAnYXNzaXN0YW50JywgbmFtZTogJ0Fzc2lzdGFudCcgfSxcbiAgICAgICAgcm9sZTogQ2hhdEhpc3RvcnlSb2xlLkFTU0lTVEFOVCxcbiAgICAgICAgc291cmNlcyxcbiAgICAgICAgLi4uKGF0dGFjaG1lbnRzLmxlbmd0aCA+IDAgPyB7IGF0dGFjaG1lbnRzIH0gOiB7fSksXG4gICAgICAgIG1lbW9yeVNlc3Npb25JZCxcbiAgICAgICAgc3VnZ2VzdGlvbnM6IHN1Z2dlc3Rpb25zIHx8IFtdLFxuICAgICAgICAuLi4oY3JlYXRlQWdlbnRGb2xsb3dVcCA/IHsgY3JlYXRlQWdlbnRGb2xsb3dVcCB9IDoge30pLFxuICAgICAgfSlcblxuICAgICAgaWYgKGNyZWF0ZUFnZW50Rm9sbG93VXA/LmFnZW50SWQpIHtcbiAgICAgICAgZmV0Y2hBZ2VudERldGFpbChjcmVhdGVBZ2VudEZvbGxvd1VwLmFnZW50SWQpXG4gICAgICAgICAgLnRoZW4oY2hhdEFnZW50ID0+IHtcbiAgICAgICAgICAgIGRvY3VtZW50LmRpc3BhdGNoRXZlbnQoXG4gICAgICAgICAgICAgIG5ldyBDdXN0b21FdmVudCgnbWFpYS1tZXJnZS1jcmVhdGVkLWFnZW50LWludG8tbGlzdCcsIHtcbiAgICAgICAgICAgICAgICBkZXRhaWw6IHsgYWdlbnQ6IGNoYXRBZ2VudCB9LFxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKVxuICAgICAgICAgIH0pXG4gICAgICAgICAgLmNhdGNoKGVyciA9PiB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdbdXNlQ2hhdE1hbmFnZXJdIE5vIHNlIHB1ZG8gYcOxYWRpciBlbCBhZ2VudGUgcmVjacOpbiBjcmVhZG8gYWwgbGlzdGFkbycsIGVycilcbiAgICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICBpZiAoZWRpdEFnZW50Rm9sbG93VXA/LmFnZW50SWQpIHtcbiAgICAgICAgZmV0Y2hBZ2VudERldGFpbChlZGl0QWdlbnRGb2xsb3dVcC5hZ2VudElkKVxuICAgICAgICAgIC50aGVuKGNoYXRBZ2VudCA9PiB7XG4gICAgICAgICAgICBkb2N1bWVudC5kaXNwYXRjaEV2ZW50KFxuICAgICAgICAgICAgICBuZXcgQ3VzdG9tRXZlbnQoJ21haWEtc3luYy1lZGl0ZWQtYWdlbnQtZnJvbS1jaGF0Jywge1xuICAgICAgICAgICAgICAgIGRldGFpbDogeyBhZ2VudDogY2hhdEFnZW50IH0sXG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApXG4gICAgICAgICAgfSlcbiAgICAgICAgICAuY2F0Y2goZXJyID0+IHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1t1c2VDaGF0TWFuYWdlcl0gTm8gc2UgcHVkbyByZWZyZXNjYXIgZWwgYWdlbnRlIGVkaXRhZG8nLCBlcnIpXG4gICAgICAgICAgfSlcbiAgICAgIH1cblxuICAgICAgaXNQcm9jZXNzaW5nUmVmLmN1cnJlbnQgPSBmYWxzZVxuICAgICAgaWYgKGZpcnN0VGltZVJlZi5jdXJyZW50KSB7XG4gICAgICAgIGNvbnN0IGN1c3RvbUV2ZW50ID0gbmV3IEN1c3RvbUV2ZW50KCdyZWZldGNoLXNlc3Npb24nKVxuICAgICAgICBkb2N1bWVudC5kaXNwYXRjaEV2ZW50KGN1c3RvbUV2ZW50KVxuICAgICAgICBmaXJzdFRpbWVSZWYuY3VycmVudCA9IGZhbHNlXG4gICAgICB9XG4gICAgfSxcbiAgICBbYWRkTWVzc2FnZSwgcmVtb3ZlTWVzc2FnZSwgcHJvamVjdCwgZ2V0VGFiVGFza0RlZmF1bHQsIGV2ZW50LCBhZ2VudF1cbiAgKVxuXG4gIGNvbnN0IGhhbmRsZVN0cmVhbVN0b3AgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgYWRkTWVzc2FnZSh7XG4gICAgICBpZDogYGFuc3dlci0ke2N1cnJlbnRNZXNzYWdlSWQuY3VycmVudH0tY2FuY2VsbGVkYCxcbiAgICAgIG1lc3NhZ2U6IHQoJ2NoYXQuY2FuY2VsbGVkJyksXG4gICAgICBkYXRlOiBuZXcgRGF0ZSgpLFxuICAgICAgdXNlcjogeyBpZDogJ2Fzc2lzdGFudCcsIG5hbWU6ICdBc3Npc3RhbnQnIH0sXG4gICAgICByb2xlOiBDaGF0SGlzdG9yeVJvbGUuQVNTSVNUQU5ULFxuICAgICAgaXNGcm9udGVuZENhbmNlbGxlZDogdHJ1ZSxcbiAgICB9KVxuICAgIGlzUHJvY2Vzc2luZ1JlZi5jdXJyZW50ID0gZmFsc2VcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGNvbnN0IGN1c3RvbUV2ZW50ID0gbmV3IEN1c3RvbUV2ZW50KCdyZWZldGNoLXNlc3Npb24nKVxuICAgICAgZG9jdW1lbnQuZGlzcGF0Y2hFdmVudChjdXN0b21FdmVudClcbiAgICB9LCA1MDApXG4gIH0sIFthZGRNZXNzYWdlLCB0XSlcblxuICBjb25zdCBoYW5kbGVBcHByb3ZhbFJlcXVpcmVkID0gdXNlQ2FsbGJhY2soXG4gICAgKGFwcHJvdmFsOiBBcHByb3ZhbFJlcXVlc3QsIGFjY3VtdWxhdGVkQ29udGVudDogc3RyaW5nKSA9PiB7XG4gICAgICBjb25zdCB0ZW1wTWVzc2FnZUlkID0gYGFuc3dlci0ke2N1cnJlbnRNZXNzYWdlSWQuY3VycmVudH0tc3RyZWFtaW5nYFxuICAgICAgcmVtb3ZlTWVzc2FnZSh0ZW1wTWVzc2FnZUlkKVxuXG4gICAgICBpZiAoYXBwcm92YWwubWFudWFsX2FwcHJvdmFsX2RldGVjdGVkKSB7XG4gICAgICAgIGlzUHJvY2Vzc2luZ1JlZi5jdXJyZW50ID0gZmFsc2VcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIC8vIEFkZCBhIG1lc3NhZ2Ugd2l0aCB0aGUgYXBwcm92YWwgcmVxdWVzdFxuICAgICAgYWRkTWVzc2FnZSh7XG4gICAgICAgIGlkOiBgYXBwcm92YWwtJHthcHByb3ZhbC5vcmlnaW5hbF90aHJlYWRfaWR9YCxcbiAgICAgICAgbWVzc2FnZTogYWNjdW11bGF0ZWRDb250ZW50IHx8ICcnLFxuICAgICAgICBkYXRlOiBuZXcgRGF0ZSgpLFxuICAgICAgICB1c2VyOiB7IGlkOiAnYXNzaXN0YW50JywgbmFtZTogJ0Fzc2lzdGFudCcgfSxcbiAgICAgICAgcm9sZTogQ2hhdEhpc3RvcnlSb2xlLkFTU0lTVEFOVCxcbiAgICAgICAgYXBwcm92YWwsXG4gICAgICAgIGFwcHJvdmFsU3RhdHVzOiAncGVuZGluZycsXG4gICAgICB9KVxuICAgICAgaXNQcm9jZXNzaW5nUmVmLmN1cnJlbnQgPSBmYWxzZVxuICAgIH0sXG4gICAgW2FkZE1lc3NhZ2UsIHJlbW92ZU1lc3NhZ2VdXG4gIClcblxuICBjb25zdCB7XG4gICAgYXNrTWFpYSxcbiAgICBpc0xvYWRpbmc6IHdhaXRpbmdSZXNwb25zZSxcbiAgICBpc1dyaXRpbmcsXG4gICAgbG9hZGluZ01lc3NhZ2UsXG4gICAgc3RvcFN0cmVhbWluZyxcbiAgfSA9IHVzZU9yY2hlc3RyYXRvclN0cmVhbSh7XG4gICAgb25FcnJvcjogaGFuZGxlU3RyZWFtRXJyb3IsXG4gICAgb25TdHJlYW1VcGRhdGU6IGhhbmRsZVN0cmVhbVVwZGF0ZSxcbiAgICBvbkZpbmlzaFN0cmVhbTogaGFuZGxlU3RyZWFtRmluaXNoLFxuICAgIG9uU3RvcDogaGFuZGxlU3RyZWFtU3RvcCxcbiAgICBvbkFwcHJvdmFsUmVxdWlyZWQ6IGhhbmRsZUFwcHJvdmFsUmVxdWlyZWQsXG4gIH0pXG5cbiAgY29uc3QgY3VycmVudFByb2plY3QgPSBwcm9qZWN0XG5cbiAgY29uc3Qgc2VuZE1lc3NhZ2UgPSB1c2VDYWxsYmFjayhcbiAgICBhc3luYyAoXG4gICAgICBtZXNzYWdlOiBzdHJpbmcsXG4gICAgICBhdHRhY2htZW50c09yT3B0aW9ucz86IEF0dGFjaG1lbnRGaWxlW10gfCBTZW5kTWVzc2FnZU9wdGlvbnMsXG4gICAgICBmYXFJZD86IHN0cmluZyxcbiAgICAgIGFnZW50U3VnZ2VzdGlvbklkPzogc3RyaW5nXG4gICAgKSA9PiB7XG4gICAgICBpZiAoaXNQcm9jZXNzaW5nUmVmLmN1cnJlbnQgfHwgd2FpdGluZ1Jlc3BvbnNlIHx8IGxvYWRpbmdNZXNzYWdlcykge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgY29uc3QgeyBhdHRhY2htZW50cywgb3B0aW9ucyB9ID0gbm9ybWFsaXplU2VuZE1lc3NhZ2VBcmdzKGF0dGFjaG1lbnRzT3JPcHRpb25zKVxuXG4gICAgICBpc1Byb2Nlc3NpbmdSZWYuY3VycmVudCA9IHRydWVcbiAgICAgIGNvbnN0IG5ld01lc3NhZ2VJZCA9IHV1aWR2NCgpXG4gICAgICBjdXJyZW50TWVzc2FnZUlkLmN1cnJlbnQgPSBuZXdNZXNzYWdlSWRcbiAgICAgIGN1cnJlbnRVc2VyUXVlc3Rpb24uY3VycmVudCA9IG1lc3NhZ2VcblxuICAgICAgaWYgKCFyZXBvcnRlZEV2ZW50LmN1cnJlbnQpIHtcbiAgICAgICAgZXZlbnQoRVZFTlRTLnBtQWlUeXBlZFRleHQpXG4gICAgICAgIHJlcG9ydGVkRXZlbnQuY3VycmVudCA9IHRydWVcbiAgICAgIH1cblxuICAgICAgLy8gVmVyaWZpY2FyIHNpIGVsIGNvbnRleHRvIGdsb2JhbCBlc3TDoSBkZXNhY3R1YWxpemFkb1xuICAgICAgY29uc3QgbGFzdE1lc3NhZ2VXaXRoUHJvamVjdCA9IG1lc3NhZ2VzUmVmLmN1cnJlbnQuZmlsdGVyKG1zZyA9PiBtc2cucHJvamVjdElkKS5hdCgtMSlcblxuICAgICAgY29uc3QgY3VycmVudEFnZW50RnJvbU1lc3NhZ2VzID0gbWVzc2FnZXNSZWYuY3VycmVudD8uW21lc3NhZ2VzUmVmLmN1cnJlbnQubGVuZ3RoIC0gMV0/LmFnZW50SWRcblxuICAgICAgLy8gTm8gYWdyZWdhciBwcm9qZWN0SWQgYWwgbWVuc2FqZSBkZWwgdXN1YXJpbyAtIHNlIGRldGVybWluYXLDoSBkZXNwdcOpc1xuICAgICAgYWRkTWVzc2FnZSh7XG4gICAgICAgIGlkOiBgcXVlc3Rpb24tJHtjdXJyZW50TWVzc2FnZUlkLmN1cnJlbnR9YCxcbiAgICAgICAgbWVzc2FnZSxcbiAgICAgICAgZGF0ZTogbmV3IERhdGUoKSxcbiAgICAgICAgdXNlcjogY3VycmVudFVzZXIsXG4gICAgICAgIHJvbGU6IENoYXRIaXN0b3J5Um9sZS5VU0VSLFxuICAgICAgICBzb3VyY2VzOiBhdHRhY2htZW50cyxcbiAgICAgIH0pXG5cbiAgICAgIGN1cnJlbnRNZXNzYWdlSWQuY3VycmVudCA9IHV1aWR2NCgpXG4gICAgICBsZXQgZmluYWxNZXNzYWdlID0gbWVzc2FnZVxuXG4gICAgICBpZiAobWVzc2FnZSA9PT0gdCgncWEuaXRlbXMucmVudGFiaWxpZGFkX3Byb3llY3RvJykpIHtcbiAgICAgICAgZmluYWxNZXNzYWdlID0gYEZBUTogJHt0KCdxYS5pdGVtcy5yZW50YWJpbGlkYWRfcHJveWVjdG8nKX0gLSBUaXBvIGRlIHJlbnRhYmlsaWRhZDogJHtcbiAgICAgICAgICBvcHRpb25zLnByb2plY3RDaGFuZ2VkPy5pbmNvbWVUeXBlIHx8IHByb2plY3Q/LmluY29tZVR5cGVcbiAgICAgICAgfWBcbiAgICAgIH1cblxuICAgICAgY29uc3QgaGlzdG9yeSA9IG1lc3NhZ2VzUmVmLmN1cnJlbnQubWFwKGhpc3RvcnlNZXNzYWdlID0+ICh7XG4gICAgICAgIGNvbnRlbnQ6IGhpc3RvcnlNZXNzYWdlLm1lc3NhZ2UsXG4gICAgICAgIHJvbGU6IGhpc3RvcnlNZXNzYWdlLnVzZXIuaWQgPT09IGF1dGhVc2VyLmlkLnRvU3RyaW5nKCkgPyBDaGF0SGlzdG9yeVJvbGUuVVNFUiA6IENoYXRIaXN0b3J5Um9sZS5BU1NJU1RBTlQsXG4gICAgICB9KSlcblxuICAgICAgLy8gVmVyaWZpY2FyIGNvbnNpc3RlbmNpYSBlbnRyZSBjb250ZXh0byBnbG9iYWwgeSDDumx0aW1vIG1lbnNhamVcbiAgICAgIGNvbnN0IGNvbnRleHRQcm9qZWN0SWQgPSBwcm9qZWN0Py5pZFxuICAgICAgY29uc3QgbGFzdE1lc3NhZ2VQcm9qZWN0SWQgPSBsYXN0TWVzc2FnZVdpdGhQcm9qZWN0Py5wcm9qZWN0SWRcblxuICAgICAgbGV0IHByb2plY3RUb1JlcXVlc3Q6IG51bWJlciB8IG51bGwgPSBudWxsXG5cbiAgICAgIC8vIFNpIGhheSDDumx0aW1vIG1lbnNhamUgY29uIHByb2plY3RJZCwgdXNhcmxvIChtw6FzIGNvbmZpYWJsZSlcbiAgICAgIGlmIChsYXN0TWVzc2FnZVByb2plY3RJZCAhPSBudWxsKSB7XG4gICAgICAgIGNvbnN0IHBhcnNlZCA9IE51bWJlcihsYXN0TWVzc2FnZVByb2plY3RJZClcbiAgICAgICAgcHJvamVjdFRvUmVxdWVzdCA9IE51bWJlci5pc0Zpbml0ZShwYXJzZWQpID8gcGFyc2VkIDogbnVsbFxuICAgICAgfVxuICAgICAgLy8gU2kgbm8gaGF5IMO6bHRpbW8gbWVuc2FqZSwgdXNhciBlbCBjb250ZXh0byBnbG9iYWxcbiAgICAgIGVsc2UgaWYgKGNvbnRleHRQcm9qZWN0SWQgIT0gbnVsbCkge1xuICAgICAgICBwcm9qZWN0VG9SZXF1ZXN0ID0gY29udGV4dFByb2plY3RJZFxuICAgICAgfVxuXG4gICAgICBjb25zdCBwcm9qZWN0cyA9IGF3YWl0IGZldGNoUHJvamVjdHMoW3Byb2plY3RUb1JlcXVlc3RdKVxuXG4gICAgICBjb25zdCBwYXlsb2FkRmFxSWQgPSBmYXFJZCA/PyBvcHRpb25zLmZhcUlkXG4gICAgICBjb25zdCBwYXlsb2FkQWdlbnRTdWdnZXN0aW9uSWQgPSBhZ2VudFN1Z2dlc3Rpb25JZCA/PyBvcHRpb25zLmFnZW50U3VnZ2VzdGlvbklkXG5cbiAgICAgIGNvbnN0IHBheWxvYWREYXRhID0ge1xuICAgICAgICBtZXNzYWdlOiBmaW5hbE1lc3NhZ2UsXG4gICAgICAgIGhpc3RvcnksXG4gICAgICAgIHByb2plY3RJZDogcHJvamVjdFRvUmVxdWVzdCxcbiAgICAgICAgbGFuZzogYXV0aFVzZXIubGFuZyxcbiAgICAgICAgdXNlcklkOiBhdXRoVXNlci5pZC50b1N0cmluZygpLFxuICAgICAgICBmaXJzdE5hbWU6IGF1dGhVc2VyLmZpcnN0TmFtZSxcbiAgICAgICAgbGFzdE5hbWU6IGF1dGhVc2VyLmxhc3ROYW1lLFxuICAgICAgICBjb21wYW55SWQ6IGF1dGhVc2VyLmNvbXBhbnlfaWQudG9TdHJpbmcoKSxcbiAgICAgICAgY2hhdElkOiBjdXJyZW50Q2hhdElkLmN1cnJlbnQsXG4gICAgICAgIG1lc3NhZ2VJZDogY3VycmVudE1lc3NhZ2VJZC5jdXJyZW50LFxuICAgICAgICBhZ2VudE5hbWU6IGFnZW50Py5uYW1lIHx8ICcnLFxuICAgICAgICBhZ2VudElkOiBjdXJyZW50QWdlbnRGcm9tTWVzc2FnZXMgfHwgYWdlbnQ/LmlkISxcbiAgICAgICAgaXNXZWJTZWFyY2hBY3RpdmU6IGlzV2ViU2VhcmNoQWN0aXZlUmVmLmN1cnJlbnQsXG4gICAgICAgIGlzRGVlcFNlYXJjaEFjdGl2ZTogaXNEZWVwU2VhcmNoQWN0aXZlUmVmLmN1cnJlbnQsXG4gICAgICAgIC4uLihjbGllbnQ/LmlkXG4gICAgICAgICAgPyB7IGNsaWVudElkOiBjbGllbnQuaWQsIC4uLihjbGllbnQubmFtZSA/IHsgY2xpZW50TmFtZTogY2xpZW50Lm5hbWUgfSA6IHt9KSB9XG4gICAgICAgICAgOiBwcm9qZWN0Py5jbGllbnQ/LmlkXG4gICAgICAgICAgICA/IHsgY2xpZW50SWQ6IHByb2plY3QuY2xpZW50LmlkLCAuLi4ocHJvamVjdC5jbGllbnQubmFtZSA/IHsgY2xpZW50TmFtZTogcHJvamVjdC5jbGllbnQubmFtZSB9IDoge30pIH1cbiAgICAgICAgICAgIDoge30pLFxuICAgICAgICAuLi4ocHJvamVjdHM/Lmxlbmd0aCA/IHsgcHJvamVjdE5hbWU6IHByb2plY3RzWzBdLm5hbWUgfSA6IHt9KSxcbiAgICAgICAgLi4uKGF0dGFjaG1lbnRzLmxlbmd0aCA+IDAgPyB7IGF0dGFjaG1lbnRzIH0gOiB7fSksXG4gICAgICAgIC4uLihwYXlsb2FkRmFxSWQgPyB7IGZhcUlkOiBwYXlsb2FkRmFxSWQgfSA6IHt9KSxcbiAgICAgICAgLi4uKHBheWxvYWRBZ2VudFN1Z2dlc3Rpb25JZCA/IHsgYWdlbnRTdWdnZXN0aW9uSWQ6IHBheWxvYWRBZ2VudFN1Z2dlc3Rpb25JZCB9IDoge30pLFxuICAgICAgICAuLi4oYWdlbnQ/LmVudGl0eSAhPSBudWxsID8geyBhZ2VudEVudGl0eTogYWdlbnQuZW50aXR5IH0gOiB7fSksXG4gICAgICB9XG5cbiAgICAgIGFza01haWEocGF5bG9hZERhdGEpXG4gICAgfSxcbiAgICBbXG4gICAgICBhZGRNZXNzYWdlLFxuICAgICAgZXZlbnQsXG4gICAgICBhc2tNYWlhLFxuICAgICAgcHJvamVjdCxcbiAgICAgIGNsaWVudCxcbiAgICAgIGF1dGhVc2VyLFxuICAgICAgYWdlbnQsXG4gICAgICB0LFxuICAgICAgd2FpdGluZ1Jlc3BvbnNlLFxuICAgICAgbG9hZGluZ01lc3NhZ2VzLFxuICAgICAgaXNXZWJTZWFyY2hBY3RpdmUsXG4gICAgICBpc0RlZXBTZWFyY2hBY3RpdmUsXG4gICAgXVxuICApXG5cbiAgY29uc3QgY2hhbmdlUHJvamVjdCA9IHVzZUNhbGxiYWNrKFxuICAgIChvcHRpb246IFByb2plY3QpID0+IHtcbiAgICAgIGlmICghY3VycmVudFVzZXJRdWVzdGlvbi5jdXJyZW50KSByZXR1cm5cblxuICAgICAgaWYgKG9wdGlvbi5pZCAhPT0gcHJvamVjdD8uaWQpIHtcbiAgICAgICAgc2V0UHJvamVjdChvcHRpb24pXG4gICAgICB9XG5cbiAgICAgIGlmIChwcm9qZWN0ICYmIGN1cnJlbnRVc2VyUXVlc3Rpb24uY3VycmVudCkge1xuICAgICAgICBjb25zdCBoaXN0b3J5ID0gbWVzc2FnZXNSZWYuY3VycmVudC5tYXAoaGlzdG9yeU1lc3NhZ2UgPT4gKHtcbiAgICAgICAgICBjb250ZW50OiBoaXN0b3J5TWVzc2FnZS5tZXNzYWdlLFxuICAgICAgICAgIHJvbGU6IGhpc3RvcnlNZXNzYWdlLnVzZXIuaWQgPT09IGF1dGhVc2VyLmlkLnRvU3RyaW5nKCkgPyBDaGF0SGlzdG9yeVJvbGUuVVNFUiA6IENoYXRIaXN0b3J5Um9sZS5BU1NJU1RBTlQsXG4gICAgICAgIH0pKVxuXG4gICAgICAgIGFza01haWEoe1xuICAgICAgICAgIG1lc3NhZ2U6IGN1cnJlbnRVc2VyUXVlc3Rpb24uY3VycmVudCxcbiAgICAgICAgICBoaXN0b3J5LFxuICAgICAgICAgIHByb2plY3RJZDogb3B0aW9uLmlkLFxuICAgICAgICAgIGxhbmc6IGF1dGhVc2VyLmxhbmcsXG4gICAgICAgICAgdXNlcklkOiBhdXRoVXNlci5pZC50b1N0cmluZygpLFxuICAgICAgICAgIGZpcnN0TmFtZTogYXV0aFVzZXIuZmlyc3ROYW1lLFxuICAgICAgICAgIGxhc3ROYW1lOiBhdXRoVXNlci5sYXN0TmFtZSxcbiAgICAgICAgICBjb21wYW55SWQ6IGF1dGhVc2VyLmNvbXBhbnlfaWQudG9TdHJpbmcoKSxcbiAgICAgICAgICBjaGF0SWQ6IGN1cnJlbnRDaGF0SWQuY3VycmVudCxcbiAgICAgICAgICBtZXNzYWdlSWQ6IGN1cnJlbnRNZXNzYWdlSWQuY3VycmVudCxcbiAgICAgICAgICBhZ2VudE5hbWU6IGFnZW50Py5uYW1lIHx8ICcnLFxuICAgICAgICAgIGFnZW50SWQ6IGFnZW50Py5pZCB8fCAnJyxcbiAgICAgICAgICBpc1dlYlNlYXJjaEFjdGl2ZTogaXNXZWJTZWFyY2hBY3RpdmVSZWYuY3VycmVudCxcbiAgICAgICAgICBpc0RlZXBTZWFyY2hBY3RpdmU6IGlzRGVlcFNlYXJjaEFjdGl2ZVJlZi5jdXJyZW50LFxuICAgICAgICAgIC4uLihhZ2VudD8uZW50aXR5ICE9IG51bGwgPyB7IGFnZW50RW50aXR5OiBhZ2VudC5lbnRpdHkgfSA6IHt9KSxcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9LFxuICAgIFtwcm9qZWN0LCBzZXRQcm9qZWN0LCBhc2tNYWlhLCBhdXRoVXNlciwgaXNXZWJTZWFyY2hBY3RpdmUsIGFnZW50XVxuICApXG5cbiAgY29uc3QgaGFuZGxlRmVlZGJhY2sgPSB1c2VDYWxsYmFjayhhc3luYyAoZmVlZGJhY2tQcm9wOiBGZWVkYmFjaywgY2hhdE1lc3NhZ2VJZDogc3RyaW5nKSA9PiB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBtYWlhLkNoYXRzLndhc0hlbHBmdWxDaGF0KGNoYXRNZXNzYWdlSWQsIGZlZWRiYWNrUHJvcCA9PT0gRmVlZGJhY2suVEhVTUJTX1VQKVxuICAgIGlmIChyZXNwb25zZSkge1xuICAgICAgbWVzc2FnZXNSZWYuY3VycmVudCA9IG1lc3NhZ2VzUmVmLmN1cnJlbnQubWFwKG1lc3NhZ2UgPT4ge1xuICAgICAgICBpZiAobWVzc2FnZS5pZCA9PT0gY2hhdE1lc3NhZ2VJZCAmJiBtZXNzYWdlLnJvbGUgPT09ICdhc3Npc3RhbnQnKSB7XG4gICAgICAgICAgcmV0dXJuIHsgLi4ubWVzc2FnZSwgd2FzSGVscGZ1bDogZmVlZGJhY2tQcm9wID09PSBGZWVkYmFjay5USFVNQlNfVVAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtZXNzYWdlXG4gICAgICB9KVxuICAgIH1cbiAgfSwgW10pXG5cbiAgY29uc3QgaGFuZGxlQXBwcm92YWxEZWNpc2lvbiA9IHVzZUNhbGxiYWNrKFxuICAgIGFzeW5jIChcbiAgICAgIHRocmVhZElkczogc3RyaW5nW10sXG4gICAgICBkZWNpc2lvbjogJ2FwcHJvdmUnIHwgJ3JlamVjdCcsXG4gICAgICBlZGl0ZWRBY3Rpb25zPzogQXJyYXk8eyB0b29sX25hbWU6IHN0cmluZzsgYXJnczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfT5cbiAgICApID0+IHtcbiAgICAgIGlmICghdGhyZWFkSWRzPy5sZW5ndGgpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignTm8gdGhyZWFkX2lkcyBwcm92aWRlZCBmb3IgYXBwcm92YWwgZGVjaXNpb24nKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgLy8gQnVzY2FyIGVsIG1lbnNhamUgcXVlIGNvbnRpZW5lIGFsZ3VubyBkZSBlc3RvcyB0aHJlYWRJZHMgZW4gc3VzIHBlbmRpbmdfYWN0aW9uc1xuICAgICAgY29uc3QgbWVzc2FnZVdpdGhBcHByb3ZhbCA9IG1lc3NhZ2VzUmVmLmN1cnJlbnQuZmluZChtID0+XG4gICAgICAgIG0uYXBwcm92YWw/LnBlbmRpbmdfYWN0aW9ucz8uc29tZShhY3Rpb24gPT4gdGhyZWFkSWRzLmluY2x1ZGVzKGFjdGlvbi50aHJlYWRfaWQpKVxuICAgICAgKVxuXG4gICAgICBpZiAoIW1lc3NhZ2VXaXRoQXBwcm92YWwgfHwgIW1lc3NhZ2VXaXRoQXBwcm92YWwuYXBwcm92YWwpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignTm8gc2UgZW5jb250csOzIG1lbnNhamUgY29uIGFwcHJvdmFsIHBhcmEgdGhyZWFkX2lkczonLCB0aHJlYWRJZHMpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBjb25zdCB7IGFwcHJvdmFsIH0gPSBtZXNzYWdlV2l0aEFwcHJvdmFsXG4gICAgICBjb25zdCBtZXNzYWdlSWQgPSBtZXNzYWdlV2l0aEFwcHJvdmFsLmlkXG4gICAgICAvLyBVc2UgZmlyc3QgdGhyZWFkSWQgYXMgdGhlIGxvYWRpbmcga2V5XG4gICAgICBjb25zdCBsb2FkaW5nS2V5ID0gdGhyZWFkSWRzWzBdXG4gICAgICAvLyBVcGRhdGUgbWVzc2FnZSBzdGF0dXMgaW1tZWRpYXRlbHlcbiAgICAgIG1lc3NhZ2VzUmVmLmN1cnJlbnQgPSBtZXNzYWdlc1JlZi5jdXJyZW50Lm1hcChtZXNzYWdlID0+IHtcbiAgICAgICAgaWYgKG1lc3NhZ2UuaWQgPT09IG1lc3NhZ2VJZCkge1xuICAgICAgICAgIGNvbnN0IG5ld1N0YXR1cyA9IGRlY2lzaW9uID09PSAnYXBwcm92ZScgPyAnYXBwcm92ZWQnIDogJ3JlamVjdGVkJ1xuICAgICAgICAgIHJldHVybiB7IC4uLm1lc3NhZ2UsIGFwcHJvdmFsU3RhdHVzOiBuZXdTdGF0dXMgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtZXNzYWdlXG4gICAgICB9KVxuXG4gICAgICAvLyBUcmlnZ2VyIHJlLXJlbmRlclxuICAgICAgY29uc3QgZXhpc3RpbmdNZXNzYWdlID0gbWVzc2FnZXNSZWYuY3VycmVudC5maW5kKG0gPT4gbS5pZCA9PT0gbWVzc2FnZUlkKVxuICAgICAgaWYgKGV4aXN0aW5nTWVzc2FnZSkge1xuICAgICAgICBjb25zdCBuZXdTdGF0dXMgPSBkZWNpc2lvbiA9PT0gJ2FwcHJvdmUnID8gJ2FwcHJvdmVkJyA6ICdyZWplY3RlZCdcbiAgICAgICAgYWRkTWVzc2FnZSh7IC4uLmV4aXN0aW5nTWVzc2FnZSwgYXBwcm92YWxTdGF0dXM6IG5ld1N0YXR1cyB9KVxuICAgICAgfVxuXG4gICAgICAvLyBDYWxsIGNvbnRpbnVlLXRocmVhZCBlbmRwb2ludCB3aXRoIEFMTCB0aHJlYWRfaWRzIGluIGEgc2luZ2xlIHJlcXVlc3RcbiAgICAgIGlzUHJvY2Vzc2luZ1JlZi5jdXJyZW50ID0gdHJ1ZVxuICAgICAgY3VycmVudE1lc3NhZ2VJZC5jdXJyZW50ID0gdXVpZHY0KClcblxuICAgICAgLy8gQWRkIGxvYWRpbmdcbiAgICAgIHNldEFjdGl2ZUxvYWRpbmdzKHByZXYgPT4gKHtcbiAgICAgICAgLi4ucHJldixcbiAgICAgICAgW2xvYWRpbmdLZXldOiB0KCdjaGF0LnByb2Nlc3NpbmcnKSxcbiAgICAgIH0pKVxuXG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IG1haWEuT3JjaGVzdHJhdG9yLmNvbnRpbnVlVGhyZWFkKHtcbiAgICAgICAgICB0aHJlYWRJZHMsIC8vIFNlbmQgYWxsIGFjdGlvbiB0aHJlYWRfaWRzIGF0IG9uY2VcbiAgICAgICAgICBzZXNzaW9uSWQ6IGFwcHJvdmFsLnNlc3Npb25faWQsXG4gICAgICAgICAgZGVjaXNpb246IGVkaXRlZEFjdGlvbnMgPyAnZWRpdCcgOiBkZWNpc2lvbixcbiAgICAgICAgICBlZGl0ZWRBY3Rpb25zLFxuICAgICAgICAgIGFnZW50SWQ6IGFnZW50Py5pZCB8fCAnJyxcbiAgICAgICAgICBsYW5nOiBhdXRoVXNlci5sYW5nLFxuICAgICAgICB9KVxuXG4gICAgICAgIGlmICghcmVzcG9uc2Uub2spIHtcbiAgICAgICAgICBoYW5kbGVTdHJlYW1FcnJvcigpXG4gICAgICAgICAgc2V0QWN0aXZlTG9hZGluZ3MocHJldiA9PiB7XG4gICAgICAgICAgICBjb25zdCBuZXdMb2FkaW5ncyA9IHsgLi4ucHJldiB9XG4gICAgICAgICAgICBkZWxldGUgbmV3TG9hZGluZ3NbbG9hZGluZ0tleV1cbiAgICAgICAgICAgIHJldHVybiBuZXdMb2FkaW5nc1xuICAgICAgICAgIH0pXG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cblxuICAgICAgICAvLyBQcm9jZXNzIFNTRSBzdHJlYW1cbiAgICAgICAgYXdhaXQgcHJvY2Vzc1NTRVN0cmVhbShyZXNwb25zZSwgbG9hZGluZ0tleSwge1xuICAgICAgICAgIG9uVG9rZW46IChjb250ZW50OiBzdHJpbmcpID0+IHtcbiAgICAgICAgICAgIGhhbmRsZVN0cmVhbVVwZGF0ZShjb250ZW50LCBudWxsLCAnJylcbiAgICAgICAgICB9LFxuICAgICAgICAgIG9uTm9kZTogKG1lc3NhZ2U6IHN0cmluZywgY3VycmVudFRocmVhZElkOiBzdHJpbmcpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGRpc3BsYXlNc2cgPVxuICAgICAgICAgICAgICBtZXNzYWdlLmluY2x1ZGVzKCdjcmVhdGVfdGFzaycpIHx8IG1lc3NhZ2UuaW5jbHVkZXMoJ2Nsb25lX3Rhc2snKSA/IG1lc3NhZ2UgOiB0KCdjaGF0LmV4ZWN1dGluZ0FjdGlvbicpXG4gICAgICAgICAgICBzZXRBY3RpdmVMb2FkaW5ncyhwcmV2ID0+ICh7XG4gICAgICAgICAgICAgIC4uLnByZXYsXG4gICAgICAgICAgICAgIFtjdXJyZW50VGhyZWFkSWRdOiBkaXNwbGF5TXNnLFxuICAgICAgICAgICAgfSkpXG4gICAgICAgICAgfSxcbiAgICAgICAgICBvbkNvbXBsZXRlOiAoXG4gICAgICAgICAgICBmaW5hbENvbnRlbnQ6IHN0cmluZyxcbiAgICAgICAgICAgIHNvdXJjZXM6IGFueSxcbiAgICAgICAgICAgIG1lbW9yeVNlc3Npb25JZDogc3RyaW5nLFxuICAgICAgICAgICAgY3VycmVudFRocmVhZElkOiBzdHJpbmcsXG4gICAgICAgICAgICBhdHRhY2htZW50cz86IGFueVtdIHwgbnVsbCxcbiAgICAgICAgICAgIHN1Z2dlc3Rpb25zPzogc3RyaW5nW10gfCBudWxsLFxuICAgICAgICAgICAgYWdlbnRJZD86IHN0cmluZyB8IG51bGxcbiAgICAgICAgICApID0+IHtcbiAgICAgICAgICAgIGhhbmRsZVN0cmVhbUZpbmlzaChmaW5hbENvbnRlbnQsIHNvdXJjZXMsIG1lbW9yeVNlc3Npb25JZCwgYXR0YWNobWVudHMsIHN1Z2dlc3Rpb25zLCBhZ2VudElkKVxuICAgICAgICAgICAgc2V0QWN0aXZlTG9hZGluZ3MocHJldiA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IG5ld0xvYWRpbmdzID0geyAuLi5wcmV2IH1cbiAgICAgICAgICAgICAgZGVsZXRlIG5ld0xvYWRpbmdzW2N1cnJlbnRUaHJlYWRJZF1cbiAgICAgICAgICAgICAgcmV0dXJuIG5ld0xvYWRpbmdzXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH0sXG4gICAgICAgICAgb25BcHByb3ZhbFJlcXVpcmVkOiAoYXBwcm92YWxQYXlsb2FkOiBhbnksIGFjY3VtdWxhdGVkQ29udGVudDogc3RyaW5nLCBjdXJyZW50VGhyZWFkSWQ6IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgLy8gTmV3IEhJVEwgaW50ZXJydXB0aW9uIGRldGVjdGVkIGFmdGVyIHJlc3VtZSAoY2hhaW5lZCBhY3Rpb25zKVxuICAgICAgICAgICAgc2V0QWN0aXZlTG9hZGluZ3MocHJldiA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IG5ld0xvYWRpbmdzID0geyAuLi5wcmV2IH1cbiAgICAgICAgICAgICAgZGVsZXRlIG5ld0xvYWRpbmdzW2N1cnJlbnRUaHJlYWRJZF1cbiAgICAgICAgICAgICAgcmV0dXJuIG5ld0xvYWRpbmdzXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgaGFuZGxlQXBwcm92YWxSZXF1aXJlZChhcHByb3ZhbFBheWxvYWQgYXMgQXBwcm92YWxSZXF1ZXN0LCBhY2N1bXVsYXRlZENvbnRlbnQpXG4gICAgICAgICAgfSxcbiAgICAgICAgICBvbkVycm9yOiAoZXJyb3I6IGFueSwgY3VycmVudFRocmVhZElkOiBzdHJpbmcpID0+IHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1NTRSBFcnJvcjonLCBlcnJvcilcbiAgICAgICAgICAgIGhhbmRsZVN0cmVhbUVycm9yKClcbiAgICAgICAgICAgIHNldEFjdGl2ZUxvYWRpbmdzKHByZXYgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBuZXdMb2FkaW5ncyA9IHsgLi4ucHJldiB9XG4gICAgICAgICAgICAgIGRlbGV0ZSBuZXdMb2FkaW5nc1tjdXJyZW50VGhyZWFkSWRdXG4gICAgICAgICAgICAgIHJldHVybiBuZXdMb2FkaW5nc1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9LFxuICAgICAgICB9KVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgaGFuZGxlU3RyZWFtRXJyb3IoKVxuICAgICAgICBzZXRBY3RpdmVMb2FkaW5ncyhwcmV2ID0+IHtcbiAgICAgICAgICBjb25zdCBuZXdMb2FkaW5ncyA9IHsgLi4ucHJldiB9XG4gICAgICAgICAgZGVsZXRlIG5ld0xvYWRpbmdzW2xvYWRpbmdLZXldXG4gICAgICAgICAgcmV0dXJuIG5ld0xvYWRpbmdzXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfSxcbiAgICBbYXV0aFVzZXIsIGFnZW50LCBhZGRNZXNzYWdlLCBoYW5kbGVTdHJlYW1FcnJvciwgaGFuZGxlU3RyZWFtVXBkYXRlLCBoYW5kbGVTdHJlYW1GaW5pc2gsIGhhbmRsZUFwcHJvdmFsUmVxdWlyZWRdXG4gIClcblxuICBjb25zdCBpbml0aWFsaXplQ2hhdCA9IHVzZUNhbGxiYWNrKGFzeW5jICgpID0+IHtcbiAgICBpZiAoIWZpcnN0VGltZVJlZi5jdXJyZW50KSB7XG4gICAgICBmaXJzdFRpbWVSZWYuY3VycmVudCA9IHRydWVcbiAgICB9XG4gICAgaWYgKGluaXRpYWxDaGF0SWQpIHtcbiAgICAgIGF3YWl0IGxvYWRNZXNzYWdlcygpXG4gICAgfSBlbHNlIGlmICh1c2VySW5pdGlhbE1lc3NhZ2UpIHtcbiAgICAgIGNvbnN0IGhhc0luaXRpYWxNZXNzYWdlID0gQm9vbGVhbih1c2VySW5pdGlhbE1lc3NhZ2UubWVzc2FnZT8udHJpbSgpKVxuICAgICAgY29uc3QgaGFzSW5pdGlhbEF0dGFjaG1lbnRzID0gQm9vbGVhbih1c2VySW5pdGlhbE1lc3NhZ2UuYXR0YWNobWVudHM/Lmxlbmd0aClcbiAgICAgIGNvbnN0IGhhc0luaXRpYWxGYXEgPSBCb29sZWFuKHVzZXJJbml0aWFsTWVzc2FnZS5mYXFJZClcblxuICAgICAgaWYgKCFoYXNJbml0aWFsTWVzc2FnZSAmJiAhaGFzSW5pdGlhbEF0dGFjaG1lbnRzICYmICFoYXNJbml0aWFsRmFxKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBjb25zdCBoaXN0b3J5ID0gbWVzc2FnZXNSZWYuY3VycmVudC5tYXAoaGlzdG9yeU1lc3NhZ2UgPT4gKHtcbiAgICAgICAgY29udGVudDogaGlzdG9yeU1lc3NhZ2UubWVzc2FnZSxcbiAgICAgICAgcm9sZTogaGlzdG9yeU1lc3NhZ2UudXNlci5pZCA9PT0gYXV0aFVzZXIuaWQudG9TdHJpbmcoKSA/IENoYXRIaXN0b3J5Um9sZS5VU0VSIDogQ2hhdEhpc3RvcnlSb2xlLkFTU0lTVEFOVCxcbiAgICAgIH0pKVxuXG4gICAgICBhc2tNYWlhKHtcbiAgICAgICAgbWVzc2FnZTogdXNlckluaXRpYWxNZXNzYWdlLm1lc3NhZ2UsXG4gICAgICAgIGhpc3RvcnksXG4gICAgICAgIHByb2plY3RJZDogcHJvamVjdD8uaWQgfHwgbnVsbCxcbiAgICAgICAgbGFuZzogYXV0aFVzZXIubGFuZyxcbiAgICAgICAgdXNlcklkOiBhdXRoVXNlci5pZC50b1N0cmluZygpLFxuICAgICAgICBmaXJzdE5hbWU6IGF1dGhVc2VyLmZpcnN0TmFtZSxcbiAgICAgICAgbGFzdE5hbWU6IGF1dGhVc2VyLmxhc3ROYW1lLFxuICAgICAgICBjb21wYW55SWQ6IGF1dGhVc2VyLmNvbXBhbnlfaWQudG9TdHJpbmcoKSxcbiAgICAgICAgY2hhdElkOiBjdXJyZW50Q2hhdElkLmN1cnJlbnQsXG4gICAgICAgIG1lc3NhZ2VJZDogY3VycmVudE1lc3NhZ2VJZC5jdXJyZW50LFxuICAgICAgICBhZ2VudE5hbWU6IGFnZW50Py5uYW1lISxcbiAgICAgICAgYWdlbnRJZDogYWdlbnQ/LmlkISxcbiAgICAgICAgaXNXZWJTZWFyY2hBY3RpdmU6IGlzV2ViU2VhcmNoQWN0aXZlUmVmLmN1cnJlbnQsXG4gICAgICAgIGlzRGVlcFNlYXJjaEFjdGl2ZTogaXNEZWVwU2VhcmNoQWN0aXZlUmVmLmN1cnJlbnQsXG4gICAgICAgIC4uLihjbGllbnQ/LmlkID8geyBjbGllbnRJZDogY2xpZW50LmlkIH0gOiBwcm9qZWN0Py5jbGllbnQ/LmlkID8geyBjbGllbnRJZDogcHJvamVjdC5jbGllbnQuaWQgfSA6IHt9KSxcbiAgICAgICAgLi4uKHByb2plY3Q/Lm5hbWUgPyB7IHByb2plY3ROYW1lOiBwcm9qZWN0Lm5hbWUgfSA6IHt9KSxcbiAgICAgICAgLi4uKHByb2plY3Q/LmNsaWVudD8ubmFtZVxuICAgICAgICAgID8geyBjbGllbnROYW1lOiBwcm9qZWN0LmNsaWVudC5uYW1lIH1cbiAgICAgICAgICA6IGNsaWVudD8ubmFtZVxuICAgICAgICAgICAgPyB7IGNsaWVudE5hbWU6IGNsaWVudC5uYW1lIH1cbiAgICAgICAgICAgIDoge30pLFxuICAgICAgICAuLi4odXNlckluaXRpYWxNZXNzYWdlLmF0dGFjaG1lbnRzID8geyBhdHRhY2htZW50czogdXNlckluaXRpYWxNZXNzYWdlLmF0dGFjaG1lbnRzIH0gOiB7fSksXG4gICAgICAgIC4uLih1c2VySW5pdGlhbE1lc3NhZ2UuZmFxSWQgPyB7IGZhcUlkOiB1c2VySW5pdGlhbE1lc3NhZ2UuZmFxSWQgfSA6IHt9KSxcbiAgICAgICAgLi4uKHVzZXJJbml0aWFsTWVzc2FnZS5hZ2VudFN1Z2dlc3Rpb25JZCA/IHsgYWdlbnRTdWdnZXN0aW9uSWQ6IHVzZXJJbml0aWFsTWVzc2FnZS5hZ2VudFN1Z2dlc3Rpb25JZCB9IDoge30pLFxuICAgICAgICAuLi4oYWdlbnQ/LmVudGl0eSAhPSBudWxsID8geyBhZ2VudEVudGl0eTogYWdlbnQuZW50aXR5IH0gOiB7fSksXG4gICAgICB9KVxuICAgIH1cbiAgfSwgW1xuICAgIGluaXRpYWxDaGF0SWQsXG4gICAgdXNlckluaXRpYWxNZXNzYWdlLFxuICAgIHByb2plY3QsXG4gICAgY2xpZW50LFxuICAgIGF1dGhVc2VyLFxuICAgIGFnZW50LFxuICAgIGFza01haWEsXG4gICAgaXNXZWJTZWFyY2hBY3RpdmUsXG4gICAgaXNEZWVwU2VhcmNoQWN0aXZlLFxuICBdKVxuXG4gIGNvbnN0IHJlc2V0Q2hhdCA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBjdXJyZW50TWVzc2FnZUlkLmN1cnJlbnQgPSB1dWlkdjQoKVxuICAgIGN1cnJlbnRVc2VyUXVlc3Rpb24uY3VycmVudCA9IG51bGxcbiAgICBjdXJyZW50Q2hhdElkLmN1cnJlbnQgPSB1dWlkdjQoKVxuICAgIHJlcG9ydGVkRXZlbnQuY3VycmVudCA9IGZhbHNlXG4gIH0sIFtdKVxuXG4gIGNvbnN0IHN0b3BHZW5lcmF0aW9uID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIHN0b3BTdHJlYW1pbmcoKVxuICAgIGlzUHJvY2Vzc2luZ1JlZi5jdXJyZW50ID0gZmFsc2VcbiAgfSwgW3N0b3BTdHJlYW1pbmddKVxuXG4gIHJldHVybiB7XG4gICAgbWVzc2FnZXMsXG4gICAgbG9hZGluZ01lc3NhZ2VzLFxuICAgIGlzTG9hZGluZ01vcmVNZXNzYWdlcyxcbiAgICB3YWl0aW5nUmVzcG9uc2UsXG4gICAgaXNXcml0aW5nLFxuICAgIGxvYWRpbmdNZXNzYWdlLFxuICAgIGFjdGl2ZUxvYWRpbmdzLFxuICAgIGN1cnJlbnRQcm9qZWN0LFxuICAgIGN1cnJlbnRDaGF0SWQ6IGN1cnJlbnRDaGF0SWQuY3VycmVudCxcbiAgICBjdXJyZW50TWVzc2FnZUlkOiBjdXJyZW50TWVzc2FnZUlkLmN1cnJlbnQsXG5cbiAgICBzZW5kTWVzc2FnZSxcbiAgICBjaGFuZ2VQcm9qZWN0LFxuICAgIGhhbmRsZUZlZWRiYWNrLFxuICAgIGhhbmRsZUFwcHJvdmFsRGVjaXNpb24sXG4gICAgaGFuZGxlU2Nyb2xsLFxuICAgIGluaXRpYWxpemVDaGF0LFxuICAgIHJlc2V0Q2hhdCxcbiAgICBzdG9wR2VuZXJhdGlvbixcblxuICAgIGlzRGlzYWJsZWQ6IHdhaXRpbmdSZXNwb25zZSB8fCBsb2FkaW5nTWVzc2FnZXMsXG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVNBLFdBQVcsRUFBRUMsTUFBTSxFQUFFQyxTQUFTLEVBQUVDLFFBQVEsUUFBUSxPQUFPO0FBQ2hFLFNBQVNDLEVBQUUsSUFBSUMsTUFBTSxRQUFRLE1BQU07QUFDbkMsU0FBU0MsZUFBZSxRQUFRLG9CQUFvQjtBQUNwRCxTQUFTQyxxQkFBcUIsUUFBUSwwQkFBMEI7QUFDaEUsU0FBU0MsSUFBSSxRQUFRLFNBQVM7QUFHOUIsU0FBU0MsT0FBTyxRQUFpQix3QkFBd0I7QUFDekQsU0FBU0MsZ0JBQWdCLFFBQVEsOEJBQThCO0FBQy9ELFNBQVNDLE1BQU0sRUFBRUMsUUFBUSxRQUFRLGFBQWE7QUFDOUMsT0FBT0MsSUFBSSxNQUFNLHFCQUFxQjtBQUN0QyxTQUFTQyxRQUFRLFFBQVEsNERBQTREO0FBQ3JGLFNBQXVDQyxlQUFlLFFBQXdDLGtCQUFrQjtBQUdoSCxTQUFTQyxXQUFXLFFBQVEsZ0JBQWdCO0FBQzVDLFNBQVNDLGlCQUFpQixRQUFRLHNCQUFzQjtBQUN4RCxTQUFTQyxzQkFBc0IsUUFBUSwwQkFBMEI7QUFDakUs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
|
|
1132
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1c2VDYWxsYmFjayIsInVzZVJlZiIsInVzZUVmZmVjdCIsInVzZVN0YXRlIiwidjQiLCJ1dWlkdjQiLCJ1c2VDaGF0TWVzc2FnZXMiLCJ1c2VPcmNoZXN0cmF0b3JTdHJlYW0iLCJ1c2VUIiwidXNlVXNlciIsInVzZUdsb2JhbENvbnRleHQiLCJFVkVOVFMiLCJ1c2VFdmVudCIsIm1haWEiLCJGZWVkYmFjayIsIkNoYXRIaXN0b3J5Um9sZSIsInVzZVByb2plY3RzIiwidXNlVGFiVGFza0RlZmF1bHQiLCJUQVNLX1VSTF9SRUdFWF9QQVRURVJOIiwiZmV0Y2hBZ2VudERldGFpbCIsImJ1aWxkSGl0bEFjdGlvblR5cGVMaXN0IiwiZ2V0SGl0bEFuYWx5dGljc0FnZW50VHlwZSIsInN0cmVhbWluZ1N0b3JlIiwibm9ybWFsaXplU2VuZE1lc3NhZ2VBcmdzIiwiYXR0YWNobWVudHNPck9wdGlvbnMiLCJfb3B0aW9ucyRhdHRhY2htZW50cyIsIkFycmF5IiwiaXNBcnJheSIsImF0dGFjaG1lbnRzIiwib3B0aW9ucyIsIm5vcm1hbGl6ZUFzc2lzdGFudEF0dGFjaG1lbnRzIiwicmF3QXR0YWNobWVudHMiLCJmaWx0ZXIiLCJhdHRhY2htZW50IiwiX3R5cGVvZiIsIm1hcCIsImluZGV4IiwibmFtZSIsInRyaW0iLCJjb25jYXQiLCJ0eXBlIiwibWltZVR5cGUiLCJtaW1lX3R5cGUiLCJmdWxsRmlsZU5hbWUiLCJpbmNsdWRlcyIsIm51bWVyaWNTaXplIiwic2l6ZSIsIk51bWJlciIsImlzRmluaXRlIiwiZmlsZSIsIkZpbGUiLCJpZCIsInVybF9vcmlnaW5hbCIsInVuZGVmaW5lZCIsInVybF90aHVtYm5haWwiLCJ1cmxfZmlsZSIsInJvbGUiLCJleHRyYWN0VGFza0lkc0Zyb21EZWxldGVQZW5kaW5nQWN0aW9ucyIsInBlbmRpbmdBY3Rpb25zIiwiaWRzIiwiZm9yRWFjaCIsImFjdGlvbiIsImFyZ3MiLCJ0b29sX2FyZ3MiLCJyZWMiLCJ0b29sX25hbWUiLCJfcmVjJHRhc2tfaWQiLCJyYXciLCJ0YXNrX2lkIiwibiIsInBhcnNlSW50IiwiU3RyaW5nIiwiaXNOYU4iLCJwdXNoIiwibGlzdCIsInRhc2tfaWRzIiwidGlkIiwiZXh0cmFjdEFnZW50SWRGcm9tRWRpdEFnZW50UGVuZGluZ0FjdGlvbnMiLCJfcmVjJGFnZW50X2lkIiwiZWRpdEFjdGlvbiIsImZpbmQiLCJhIiwidG9Mb3dlckNhc2UiLCJhZ2VudF9pZCIsImFnZW50SWQiLCJleHRyYWN0QWdlbnRJZEZyb21QZW5kaW5nQWN0aW9uc0J5VG9vbE5hbWUiLCJ0b29sTmFtZSIsIl9yZWYiLCJfcmVjJGFnZW50X2lkMiIsImV4dHJhY3RUYXNrSWRzRnJvbUFzc2lzdGFudERlbGV0aW9uVGV4dCIsInRleHQiLCJsYWJlbGVkIiwibWF0Y2giLCJib2xkIiwidXNlU3RhYmxlQ2FsbGJhY2tzIiwiYXV0aFVzZXIiLCJjdXJyZW50VXNlciIsInRvU3RyaW5nIiwiZmlyc3ROYW1lIiwiYXZhdGFyIiwicGljdHVyZSIsImN1cnJlbnQiLCJwYXJzZVNTRUxpbmUiLCJsaW5lIiwiX2xpbmUkc3BsaXQiLCJzcGxpdCIsIl9saW5lJHNwbGl0MiIsIl9zbGljZWRUb0FycmF5IiwiZXZlbnRMaW5lIiwiZGF0YUxpbmUiLCJldmVudFR5cGUiLCJyZXBsYWNlIiwiZGF0YVN0ciIsImRhdGEiLCJKU09OIiwicGFyc2UiLCJwYXJzZUVycm9yIiwiY29uc29sZSIsImVycm9yIiwicHJvY2Vzc1NTRVN0cmVhbSIsIl9yZWYyIiwiX2FzeW5jVG9HZW5lcmF0b3IiLCJfcmVnZW5lcmF0b3JSdW50aW1lIiwibWFyayIsIl9jYWxsZWUiLCJyZXNwb25zZSIsInRocmVhZElkIiwiY2FsbGJhY2tzIiwiX3Jlc3BvbnNlJGJvZHkiLCJyZWFkZXIiLCJkZWNvZGVyIiwiYnVmZmVyIiwiYWNjdW11bGF0ZWRDb250ZW50IiwiaXNTdHJlYW1Db21wbGV0ZSIsImhhbmRsZUxpbmUiLCJfeWllbGQkcmVhZGVyJHJlYWQiLCJkb25lIiwidmFsdWUiLCJsaW5lcyIsImkiLCJ3cmFwIiwiX2NvbnRleHQiLCJwcmV2IiwibmV4dCIsIl9oYW5kbGVMaW5lIiwicGFyc2VkIiwiZXZlbnREYXRhIiwiY29udGVudCIsIm9uVG9rZW4iLCJtZXNzYWdlIiwib25Ob2RlIiwiX2V2ZW50RGF0YSRhZ2VudF9pZCIsImZpbmFsQ29udGVudCIsInNvdXJjZXMiLCJtZW1vcnlTZXNzaW9uSWQiLCJtZW1vcnlfc2Vzc2lvbl9pZCIsInN1Z2dlc3Rpb25zIiwic3VnZ2VzdF9yZXBseSIsImFnZW50SWRSYXciLCJjb21wbGV0ZWRBZ2VudElkIiwib25Db21wbGV0ZSIsIl9jYWxsYmFja3Mkb25BcHByb3ZhbCIsIm9uQXBwcm92YWxSZXF1aXJlZCIsImNhbGwiLCJvbkVycm9yIiwiYm9keSIsImdldFJlYWRlciIsIkVycm9yIiwiVGV4dERlY29kZXIiLCJyZWFkIiwic2VudCIsImFicnVwdCIsImRlY29kZSIsInN0cmVhbSIsInBvcCIsImxlbmd0aCIsInN0b3AiLCJfeCIsIl94MiIsIl94MyIsImFwcGx5IiwiYXJndW1lbnRzIiwidXNlQ2hhdE1hbmFnZXIiLCJfcmVmMyIsImluaXRpYWxDaGF0SWQiLCJjaGF0SWQiLCJ1c2VySW5pdGlhbE1lc3NhZ2UiLCJfcmVmMyRhZ2VudHMiLCJhZ2VudHMiLCJfdXNlVCIsInQiLCJfdXNlR2xvYmFsQ29udGV4dCIsInByb2plY3QiLCJzZXRQcm9qZWN0IiwiY2xpZW50Iiwic2V0Q2xpZW50IiwiYWdlbnQiLCJpc1dlYlNlYXJjaEFjdGl2ZSIsImlzRGVlcFNlYXJjaEFjdGl2ZSIsImNoaXBzUHJvamVjdCIsInNldENoaXBzUHJvamVjdCIsImV2ZW50IiwiX3VzZVByb2plY3RzIiwiZmV0Y2hQcm9qZWN0cyIsIl91c2VTdGFibGVDYWxsYmFja3MiLCJfdXNlVGFiVGFza0RlZmF1bHQiLCJnZXRUYWJUYXNrRGVmYXVsdCIsImN1cnJlbnRNZXNzYWdlSWQiLCJjdXJyZW50VXNlclF1ZXN0aW9uIiwiY3VycmVudENoYXRJZCIsInJlcG9ydGVkRXZlbnQiLCJtZXNzYWdlc1JlZiIsImlzUHJvY2Vzc2luZ1JlZiIsImZpcnN0VGltZVJlZiIsInN0cmVhbWluZ1BsYWNlaG9sZGVySWRSZWYiLCJhY3RpdmVTdHJlYW1DaGF0SWRSZWYiLCJhYm9ydFN0cmVhbVNpbGVudGx5UmVmIiwiX3VzZVN0YXRlIiwiX3VzZVN0YXRlMiIsImFjdGl2ZUxvYWRpbmdzIiwic2V0QWN0aXZlTG9hZGluZ3MiLCJpc1dlYlNlYXJjaEFjdGl2ZVJlZiIsImlzRGVlcFNlYXJjaEFjdGl2ZVJlZiIsIl91c2VDaGF0TWVzc2FnZXMiLCJsb2FkaW5nTWVzc2FnZXMiLCJtZXNzYWdlcyIsImlzTG9hZGluZ01vcmVNZXNzYWdlcyIsImxvYWRNZXNzYWdlcyIsImFkZE1lc3NhZ2UiLCJyZW1vdmVNZXNzYWdlIiwiaGFuZGxlU2Nyb2xsIiwiY3VzdG9tRXZlbnQiLCJDdXN0b21FdmVudCIsImRldGFpbCIsImRvY3VtZW50IiwiZGlzcGF0Y2hFdmVudCIsImNsZWFyIiwibGFzdE1zZ1dpdGhQcm9qZWN0IiwibXNnIiwicHJvamVjdElkIiwiYXQiLCJfcmVmNCIsInByb2plY3ROYW1lIiwidGhlbiIsInByb2plY3RzIiwiZm91bmQiLCJwIiwiX2ZvdW5kJGNsaWVudCIsImNsaWVudE5hbWUiLCJsYXN0TXNnV2l0aENsaWVudCIsImNsaWVudElkIiwiX3JlZjUiLCJtc2dDbGllbnRJZCIsIm1zZ0NsaWVudE5hbWUiLCJoYW5kbGVTdHJlYW1FcnJvciIsImVycm9yTWVzc2FnZSIsInRlbXBNZXNzYWdlSWQiLCJpc0Vycm9yIiwiZGF0ZSIsIkRhdGUiLCJ1c2VyIiwiQVNTSVNUQU5UIiwiaGFuZGxlU3RyZWFtVXBkYXRlIiwic3RhcnQiLCJzZXRUZXh0IiwiaGFuZGxlU3RyZWFtRmluaXNoIiwiX3JlZjYiLCJfY2FsbGVlMiIsIl9wcmV2aW91c01lc3NhZ2UkYXBwciIsIl9jcmVhdGVBZ2VudEZvbGxvd1VwIiwiX2VkaXRBZ2VudEZvbGxvd1VwIiwidGFza1VybFJlZ2V4IiwibWF0Y2hlcyIsImNvbnRlbnRUb0FkZCIsInByZXZpb3VzTWVzc2FnZSIsImhhc0FwcHJvdmFsSW5QcmV2aW91c01lc3NhZ2UiLCJUQVNLX0NSRUFUSU9OX1RPT0xTIiwiVEFTS19FRElUX1RPT0xTIiwiVEFTS19ERUxFVEVfVE9PTFMiLCJ3YXNUYXNrQ3JlYXRpb24iLCJ3YXNUYXNrRWRpdCIsIndhc1Rhc2tEZWxldGUiLCJ3YXNDcmVhdGVBZ2VudEFwcHJvdmVkIiwid2FzQ29uZmlndXJlQWdlbnRBY2Nlc3NBcHByb3ZlZCIsImNyZWF0ZUFnZW50Rm9sbG93VXAiLCJjb25maWd1cmVkQWdlbnRJZCIsIndhc0VkaXRBZ2VudEFwcHJvdmVkIiwiZWRpdEFnZW50Rm9sbG93VXAiLCJmcm9tU3RyZWFtIiwiZnJvbUFyZ3MiLCJyZXNvbHZlZEFnZW50SWQiLCJ0YXNrSWRzRnJvbVVybHMiLCJ0YXNrSWRzRnJvbURlbGV0ZUFwcHJvdmFsIiwidGFza0lkc0Zyb21EZWxldGlvblRleHQiLCJ0YXNrSWRzRm9yRGFzaGJvYXJkIiwic2hvdWxkU3luY0Rhc2hib2FyZCIsInRhc2tJZHMiLCJ0YWIiLCJ0YWJTZWdtZW50IiwibGFzdFByb2plY3RNZXNzYWdlIiwiY29udGV4dFByb2plY3RJZFJhdyIsImNvbnRleHRQcm9qZWN0SWQiLCJwYXRoTWF0Y2giLCJyb3V0ZVByb2plY3RJZCIsImlzT25Qcm9qZWN0Um91dGUiLCJfd2luZG93JG5ld1Byb2plY3REYXMiLCJfd2luZG93JG5ld1Byb2plY3REYXMyIiwiX3dpbmRvdyRuZXdQcm9qZWN0RGFzMyIsIl93aW5kb3ckbmV3UHJvamVjdERhczQiLCJfd2luZG93JG5ld1Byb2plY3REYXM1IiwiX3dpbmRvdyRuZXdQcm9qZWN0RGFzNiIsIl9jb250ZXh0MiIsIlJlZ0V4cCIsIl90b0NvbnN1bWFibGVBcnJheSIsIm1hdGNoQWxsIiwibSIsImFwcHJvdmFsIiwicGVuZGluZ19hY3Rpb25zIiwic29tZSIsImFwcHJvdmFsU3RhdHVzIiwid2luZG93IiwiTUFJQV9DSEFUX0FJX0ZFQVRVUkVfQUNDRVNTX01VTFRJX0FHRU5UUyIsImFpQ2hhdEhpdGxPcHRpb24iLCJfb2JqZWN0U3ByZWFkIiwiYWdlbnRfdHlwZSIsImFjdGlvbl90eXBlIiwiZGVjaXNpb24iLCJvcHRpb24iLCJjcmVhdGVkX2FnZW50X2lkIiwidXJsIiwibG9jYXRpb24iLCJwYXRobmFtZSIsIm5ld1Byb2plY3REYXNoYm9hcmQiLCJhZGRFeGlzdGluZ1Rhc2tUb0Rhc2hib2FyZCIsImVkaXRFeGlzdGluZ1Rhc2tJbkRhc2hib2FyZCIsImRlbGV0ZUV4aXN0aW5nVGFza0Zyb21EYXNoYm9hcmQiLCJjaGF0QWdlbnQiLCJlcnIiLCJfeDQiLCJfeDUiLCJfeDYiLCJfeDciLCJfeDgiLCJfeDkiLCJoYW5kbGVTdHJlYW1TdG9wIiwiaXNGcm9udGVuZENhbmNlbGxlZCIsInNldFRpbWVvdXQiLCJoYW5kbGVBcHByb3ZhbFJlcXVpcmVkIiwibWFudWFsX2FwcHJvdmFsX2RldGVjdGVkIiwib3JpZ2luYWxfdGhyZWFkX2lkIiwiX3VzZU9yY2hlc3RyYXRvclN0cmVhIiwib25TdHJlYW1VcGRhdGUiLCJvbkZpbmlzaFN0cmVhbSIsIm9uU3RvcCIsImFza01haWEiLCJ3YWl0aW5nUmVzcG9uc2UiLCJpc0xvYWRpbmciLCJpc1dyaXRpbmciLCJsb2FkaW5nTWVzc2FnZSIsInN0b3BTdHJlYW1pbmciLCJhYm9ydFN0cmVhbVNpbGVudGx5IiwiY3VycmVudFByb2plY3QiLCJzZW5kTWVzc2FnZSIsIl9yZWY3IiwiX2NhbGxlZTMiLCJmYXFJZCIsImFnZW50U3VnZ2VzdGlvbklkIiwiX21lc3NhZ2VzUmVmJGN1cnJlbnQiLCJfcHJvamVjdCRjbGllbnQiLCJfbm9ybWFsaXplU2VuZE1lc3NhZ2UiLCJuZXdNZXNzYWdlSWQiLCJsYXN0TWVzc2FnZVdpdGhQcm9qZWN0IiwiY3VycmVudEFnZW50RnJvbU1lc3NhZ2VzIiwiZmluYWxNZXNzYWdlIiwiX29wdGlvbnMkcHJvamVjdENoYW5nIiwiaGlzdG9yeSIsImxhc3RNZXNzYWdlUHJvamVjdElkIiwicHJvamVjdFRvUmVxdWVzdCIsInBheWxvYWRGYXFJZCIsInBheWxvYWRBZ2VudFN1Z2dlc3Rpb25JZCIsInBheWxvYWREYXRhIiwiX2NvbnRleHQzIiwicG1BaVR5cGVkVGV4dCIsIlVTRVIiLCJwcm9qZWN0Q2hhbmdlZCIsImluY29tZVR5cGUiLCJoaXN0b3J5TWVzc2FnZSIsImxhbmciLCJ1c2VySWQiLCJsYXN0TmFtZSIsImNvbXBhbnlJZCIsImNvbXBhbnlfaWQiLCJtZXNzYWdlSWQiLCJhZ2VudE5hbWUiLCJlbnRpdHkiLCJhZ2VudEVudGl0eSIsIl94MCIsIl94MSIsIl94MTAiLCJfeDExIiwiY2hhbmdlUHJvamVjdCIsImhhbmRsZUZlZWRiYWNrIiwiX3JlZjgiLCJfY2FsbGVlNCIsImZlZWRiYWNrUHJvcCIsImNoYXRNZXNzYWdlSWQiLCJfY29udGV4dDQiLCJDaGF0cyIsIndhc0hlbHBmdWxDaGF0IiwiVEhVTUJTX1VQIiwid2FzSGVscGZ1bCIsIl94MTIiLCJfeDEzIiwiaGFuZGxlQXBwcm92YWxEZWNpc2lvbiIsIl9yZWY5IiwiX2NhbGxlZTUiLCJ0aHJlYWRJZHMiLCJlZGl0ZWRBY3Rpb25zIiwibWVzc2FnZVdpdGhBcHByb3ZhbCIsImxvYWRpbmdLZXkiLCJleGlzdGluZ01lc3NhZ2UiLCJuZXdTdGF0dXMiLCJfdCIsIl9jb250ZXh0NSIsIl9tJGFwcHJvdmFsIiwidGhyZWFkX2lkIiwiX2RlZmluZVByb3BlcnR5IiwiT3JjaGVzdHJhdG9yIiwiY29udGludWVUaHJlYWQiLCJzZXNzaW9uSWQiLCJzZXNzaW9uX2lkIiwib2siLCJuZXdMb2FkaW5ncyIsImN1cnJlbnRUaHJlYWRJZCIsImRpc3BsYXlNc2ciLCJhcHByb3ZhbFBheWxvYWQiLCJfeDE0IiwiX3gxNSIsIl94MTYiLCJpbml0aWFsaXplQ2hhdCIsIl9jYWxsZWU2IiwiX3VzZXJJbml0aWFsTWVzc2FnZSRtIiwiX3VzZXJJbml0aWFsTWVzc2FnZSRhIiwiX3Byb2plY3QkY2xpZW50MiIsIl9wcm9qZWN0JGNsaWVudDMiLCJoYXNJbml0aWFsTWVzc2FnZSIsImhhc0luaXRpYWxBdHRhY2htZW50cyIsImhhc0luaXRpYWxGYXEiLCJfY29udGV4dDYiLCJCb29sZWFuIiwicmVzZXRDaGF0Iiwic3RvcEdlbmVyYXRpb24iLCJpc0Rpc2FibGVkIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2hvb2tzL3VzZUNoYXRNYW5hZ2VyL3VzZUNoYXRNYW5hZ2VyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIHJhZGl4ICovXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1uZXN0ZWQtdGVybmFyeSAqL1xuLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLW5vbi1udWxsLWFzc2VydGVkLW9wdGlvbmFsLWNoYWluICovXG4vKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55ICovXG5pbXBvcnQgeyB1c2VDYWxsYmFjaywgdXNlUmVmLCB1c2VFZmZlY3QsIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyB2NCBhcyB1dWlkdjQgfSBmcm9tICd1dWlkJ1xuaW1wb3J0IHsgdXNlQ2hhdE1lc3NhZ2VzIH0gZnJvbSAnLi4vdXNlQ2hhdE1lc3NhZ2VzJ1xuaW1wb3J0IHsgdXNlT3JjaGVzdHJhdG9yU3RyZWFtIH0gZnJvbSAnLi4vdXNlT3JjaGVzdHJhdG9yU3RyZWFtJ1xuaW1wb3J0IHsgdXNlVCB9IGZyb20gJy4uL3VzZVQnXG5pbXBvcnQgeyBBdHRhY2htZW50RmlsZSB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvbW9sZWN1bGVzL0NoYXRGb290ZXIvQ2hhdEZvb3RlcidcbmltcG9ydCB7IFNlbmRNZXNzYWdlT3B0aW9ucywgVXNlQ2hhdE1hbmFnZXJQcm9wcyB9IGZyb20gJy4vdXNlQ2hhdE1hbmFnZXIuaW50ZXJmYWNlJ1xuaW1wb3J0IHsgdXNlVXNlciwgQ09SVXNlciB9IGZyb20gJy4uLy4uL2NvbnRleHQvY29yLXVzZXInXG5pbXBvcnQgeyB1c2VHbG9iYWxDb250ZXh0IH0gZnJvbSAnLi4vLi4vY29udGV4dC9nbG9iYWwtY29udGV4dCdcbmltcG9ydCB7IEVWRU5UUywgdXNlRXZlbnQgfSBmcm9tICcuLi91c2VFdmVudCdcbmltcG9ydCBtYWlhIGZyb20gJy4uLy4uL3NlcnZpY2VzL21haWEnXG5pbXBvcnQgeyBGZWVkYmFjayB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvbW9sZWN1bGVzL01lc3NhZ2VGZWVkYmFjay9NZXNzYWdlRmVlZGJhY2snXG5pbXBvcnQgeyBDaGF0TWVzc2FnZSwgQ2hhdE1lc3NhZ2VVc2VyLCBDaGF0SGlzdG9yeVJvbGUsIEFwcHJvdmFsUmVxdWVzdCwgUGVuZGluZ0FjdGlvbiB9IGZyb20gJy4uLy4uL3R5cGVzL0NoYXQnXG5cbmltcG9ydCB7IFByb2plY3QgfSBmcm9tICcuLi8uLi90eXBlcy9Qcm9qZWN0J1xuaW1wb3J0IHsgdXNlUHJvamVjdHMgfSBmcm9tICcuLi91c2VQcm9qZWN0cydcbmltcG9ydCB7IHVzZVRhYlRhc2tEZWZhdWx0IH0gZnJvbSAnLi4vdXNlVGFiVGFza0RlZmF1bHQnXG5pbXBvcnQgeyBUQVNLX1VSTF9SRUdFWF9QQVRURVJOIH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzL3Rhc2tVcmxzJ1xuaW1wb3J0IHsgZmV0Y2hBZ2VudERldGFpbCB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL21haWEvQWdlbnRzL2ZldGNoQWdlbnREZXRhaWwnXG5pbXBvcnQgeyBidWlsZEhpdGxBY3Rpb25UeXBlTGlzdCwgZ2V0SGl0bEFuYWx5dGljc0FnZW50VHlwZSB9IGZyb20gJy4uLy4uL3V0aWxzL2hpdGxBbmFseXRpY3MnXG5pbXBvcnQgeyBzdHJlYW1pbmdTdG9yZSB9IGZyb20gJy4uL3VzZVN0cmVhbWluZ01lc3NhZ2UnXG5cbnR5cGUgQXR0YWNobWVudHNPck9wdGlvbnMgPSBBdHRhY2htZW50RmlsZVtdIHwgU2VuZE1lc3NhZ2VPcHRpb25zXG5cbmNvbnN0IG5vcm1hbGl6ZVNlbmRNZXNzYWdlQXJncyA9IChhdHRhY2htZW50c09yT3B0aW9ucz86IEF0dGFjaG1lbnRzT3JPcHRpb25zKSA9PiB7XG4gIGlmIChBcnJheS5pc0FycmF5KGF0dGFjaG1lbnRzT3JPcHRpb25zKSkge1xuICAgIHJldHVybiB7IGF0dGFjaG1lbnRzOiBhdHRhY2htZW50c09yT3B0aW9ucywgb3B0aW9uczoge30gYXMgU2VuZE1lc3NhZ2VPcHRpb25zIH1cbiAgfVxuXG4gIGNvbnN0IG9wdGlvbnM6IFNlbmRNZXNzYWdlT3B0aW9ucyA9IGF0dGFjaG1lbnRzT3JPcHRpb25zID8/IHt9XG4gIHJldHVybiB7IGF0dGFjaG1lbnRzOiBvcHRpb25zLmF0dGFjaG1lbnRzID8/IFtdLCBvcHRpb25zIH1cbn1cblxuY29uc3Qgbm9ybWFsaXplQXNzaXN0YW50QXR0YWNobWVudHMgPSAocmF3QXR0YWNobWVudHM6IHVua25vd24pOiBBdHRhY2htZW50RmlsZVtdID0+IHtcbiAgaWYgKCFBcnJheS5pc0FycmF5KHJhd0F0dGFjaG1lbnRzKSkge1xuICAgIHJldHVybiBbXVxuICB9XG5cbiAgcmV0dXJuIHJhd0F0dGFjaG1lbnRzXG4gICAgLmZpbHRlcigoYXR0YWNobWVudCk6IGF0dGFjaG1lbnQgaXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPT4gISFhdHRhY2htZW50ICYmIHR5cGVvZiBhdHRhY2htZW50ID09PSAnb2JqZWN0JylcbiAgICAubWFwKChhdHRhY2htZW50LCBpbmRleCkgPT4ge1xuICAgICAgY29uc3QgbmFtZSA9XG4gICAgICAgIHR5cGVvZiBhdHRhY2htZW50Lm5hbWUgPT09ICdzdHJpbmcnICYmIGF0dGFjaG1lbnQubmFtZS50cmltKCkgPyBhdHRhY2htZW50Lm5hbWUudHJpbSgpIDogYGZpbGUtJHtpbmRleCArIDF9YFxuICAgICAgY29uc3QgdHlwZSA9IHR5cGVvZiBhdHRhY2htZW50LnR5cGUgPT09ICdzdHJpbmcnICYmIGF0dGFjaG1lbnQudHlwZS50cmltKCkgPyBhdHRhY2htZW50LnR5cGUudHJpbSgpIDogJ3BkZidcbiAgICAgIGNvbnN0IG1pbWVUeXBlID0gdHlwZW9mIGF0dGFjaG1lbnQubWltZV90eXBlID09PSAnc3RyaW5nJyA/IGF0dGFjaG1lbnQubWltZV90eXBlIDogJydcbiAgICAgIGNvbnN0IGZ1bGxGaWxlTmFtZSA9IG5hbWUuaW5jbHVkZXMoJy4nKSA/IG5hbWUgOiBgJHtuYW1lfS4ke3R5cGV9YFxuICAgICAgY29uc3QgbnVtZXJpY1NpemUgPVxuICAgICAgICB0eXBlb2YgYXR0YWNobWVudC5zaXplID09PSAnbnVtYmVyJ1xuICAgICAgICAgID8gYXR0YWNobWVudC5zaXplXG4gICAgICAgICAgOiBOdW1iZXIuaXNGaW5pdGUoTnVtYmVyKGF0dGFjaG1lbnQuc2l6ZSkpXG4gICAgICAgICAgICA/IE51bWJlcihhdHRhY2htZW50LnNpemUpXG4gICAgICAgICAgICA6IDBcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZmlsZTogbmV3IEZpbGUoW10sIGZ1bGxGaWxlTmFtZSwgeyB0eXBlOiBtaW1lVHlwZSB9KSxcbiAgICAgICAgaWQ6XG4gICAgICAgICAgdHlwZW9mIGF0dGFjaG1lbnQuaWQgPT09ICdzdHJpbmcnICYmIGF0dGFjaG1lbnQuaWQudHJpbSgpXG4gICAgICAgICAgICA/IGF0dGFjaG1lbnQuaWRcbiAgICAgICAgICAgIDogYGFzc2lzdGFudC1maWxlLSR7aW5kZXh9LSR7ZnVsbEZpbGVOYW1lfWAsXG4gICAgICAgIG5hbWUsXG4gICAgICAgIHNpemU6IG51bWVyaWNTaXplLFxuICAgICAgICB0eXBlLFxuICAgICAgICB1cmxfb3JpZ2luYWw6IHR5cGVvZiBhdHRhY2htZW50LnVybF9vcmlnaW5hbCA9PT0gJ3N0cmluZycgPyBhdHRhY2htZW50LnVybF9vcmlnaW5hbCA6IHVuZGVmaW5lZCxcbiAgICAgICAgdXJsX3RodW1ibmFpbDogdHlwZW9mIGF0dGFjaG1lbnQudXJsX3RodW1ibmFpbCA9PT0gJ3N0cmluZycgPyBhdHRhY2htZW50LnVybF90aHVtYm5haWwgOiB1bmRlZmluZWQsXG4gICAgICAgIHVybF9maWxlOiB0eXBlb2YgYXR0YWNobWVudC51cmxfZmlsZSA9PT0gJ3N0cmluZycgPyBhdHRhY2htZW50LnVybF9maWxlIDogdW5kZWZpbmVkLFxuICAgICAgICByb2xlOiBhdHRhY2htZW50LnJvbGUgPT09ICdhc3Npc3RhbnQnID8gJ2Fzc2lzdGFudCcgOiAndXNlcicsXG4gICAgICB9XG4gICAgfSlcbn1cblxuLyoqIHRhc2tfaWQgLyB0YXNrX2lkcyBlbiBwZW5kaW5nX2FjdGlvbnMgZGUgZGVsZXRlXyogKGxhIHJlc3B1ZXN0YSBwdWVkZSBubyBpbmNsdWlyIFVSTHMgL3Rhc2tzL+KApi9kZXRhaWwpLiAqL1xuZnVuY3Rpb24gZXh0cmFjdFRhc2tJZHNGcm9tRGVsZXRlUGVuZGluZ0FjdGlvbnMocGVuZGluZ0FjdGlvbnM6IFBlbmRpbmdBY3Rpb25bXSk6IG51bWJlcltdIHtcbiAgY29uc3QgaWRzOiBudW1iZXJbXSA9IFtdXG4gIHBlbmRpbmdBY3Rpb25zLmZvckVhY2goYWN0aW9uID0+IHtcbiAgICBpZiAoIWFjdGlvbiB8fCB0eXBlb2YgYWN0aW9uICE9PSAnb2JqZWN0JykgcmV0dXJuXG4gICAgY29uc3QgYXJncyA9IGFjdGlvbi50b29sX2FyZ3NcbiAgICBpZiAoIShhcmdzICYmIHR5cGVvZiBhcmdzID09PSAnb2JqZWN0JyAmJiAhQXJyYXkuaXNBcnJheShhcmdzKSkpIHJldHVyblxuICAgIGNvbnN0IHJlYyA9IGFyZ3MgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj5cbiAgICBpZiAoYWN0aW9uLnRvb2xfbmFtZSA9PT0gJ2RlbGV0ZV90YXNrJykge1xuICAgICAgY29uc3QgcmF3ID0gcmVjLnRhc2tfaWQgPz8gcmVjLmlkXG4gICAgICBpZiAocmF3ICE9IG51bGwpIHtcbiAgICAgICAgY29uc3QgbiA9IHBhcnNlSW50KFN0cmluZyhyYXcpLCAxMClcbiAgICAgICAgaWYgKCFOdW1iZXIuaXNOYU4obikpIGlkcy5wdXNoKG4pXG4gICAgICB9XG4gICAgfVxuICAgIGlmIChhY3Rpb24udG9vbF9uYW1lID09PSAnZGVsZXRlX3Rhc2tzX2JhdGNoJykge1xuICAgICAgY29uc3QgbGlzdCA9IHJlYy50YXNrX2lkc1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkobGlzdCkpIHtcbiAgICAgICAgbGlzdC5mb3JFYWNoKHRpZCA9PiB7XG4gICAgICAgICAgY29uc3QgbiA9IHBhcnNlSW50KFN0cmluZyh0aWQpLCAxMClcbiAgICAgICAgICBpZiAoIU51bWJlci5pc05hTihuKSkgaWRzLnB1c2gobilcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9XG4gIH0pXG4gIHJldHVybiBpZHNcbn1cblxuZnVuY3Rpb24gZXh0cmFjdEFnZW50SWRGcm9tRWRpdEFnZW50UGVuZGluZ0FjdGlvbnMocGVuZGluZ0FjdGlvbnM6IFBlbmRpbmdBY3Rpb25bXSk6IHN0cmluZyB8IG51bGwge1xuICBjb25zdCBlZGl0QWN0aW9uID0gcGVuZGluZ0FjdGlvbnMuZmluZChhID0+IChhLnRvb2xfbmFtZSB8fCAnJykudG9Mb3dlckNhc2UoKSA9PT0gJ2VkaXRfYWdlbnQnKVxuICBpZiAoXG4gICAgIWVkaXRBY3Rpb24gfHxcbiAgICAhZWRpdEFjdGlvbi50b29sX2FyZ3MgfHxcbiAgICB0eXBlb2YgZWRpdEFjdGlvbi50b29sX2FyZ3MgIT09ICdvYmplY3QnIHx8XG4gICAgQXJyYXkuaXNBcnJheShlZGl0QWN0aW9uLnRvb2xfYXJncylcbiAgKSB7XG4gICAgcmV0dXJuIG51bGxcbiAgfVxuICBjb25zdCByZWMgPSBlZGl0QWN0aW9uLnRvb2xfYXJncyBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxuICBjb25zdCByYXcgPSByZWMuYWdlbnRfaWQgPz8gcmVjLmFnZW50SWRcbiAgcmV0dXJuIHJhdyAhPSBudWxsID8gU3RyaW5nKHJhdykgOiBudWxsXG59XG5cbmZ1bmN0aW9uIGV4dHJhY3RBZ2VudElkRnJvbVBlbmRpbmdBY3Rpb25zQnlUb29sTmFtZShwZW5kaW5nQWN0aW9uczogUGVuZGluZ0FjdGlvbltdLCB0b29sTmFtZTogc3RyaW5nKTogc3RyaW5nIHwgbnVsbCB7XG4gIGNvbnN0IGFjdGlvbiA9IHBlbmRpbmdBY3Rpb25zLmZpbmQoYSA9PiAoYS50b29sX25hbWUgfHwgJycpLnRvTG93ZXJDYXNlKCkgPT09IHRvb2xOYW1lLnRvTG93ZXJDYXNlKCkpXG4gIGlmICghYWN0aW9uIHx8ICFhY3Rpb24udG9vbF9hcmdzIHx8IHR5cGVvZiBhY3Rpb24udG9vbF9hcmdzICE9PSAnb2JqZWN0JyB8fCBBcnJheS5pc0FycmF5KGFjdGlvbi50b29sX2FyZ3MpKSB7XG4gICAgcmV0dXJuIG51bGxcbiAgfVxuICBjb25zdCByZWMgPSBhY3Rpb24udG9vbF9hcmdzIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+XG4gIGNvbnN0IHJhdyA9IHJlYy5hZ2VudF9pZCA/PyByZWMuYWdlbnRJZCA/PyByZWMuaWRcbiAgcmV0dXJuIHJhdyAhPSBudWxsID8gU3RyaW5nKHJhdykgOiBudWxsXG59XG5cbi8qKiDDmmx0aW1vIHJlY3Vyc28gc2kgbm8gaGF5IGxpbmtzIG5pIHRvb2xfYXJncyBwYXJzZWFibGVzIChwLiBlai4gXCJJRCAqKjc1OTcxMDYqKlwiKS4gKi9cbmZ1bmN0aW9uIGV4dHJhY3RUYXNrSWRzRnJvbUFzc2lzdGFudERlbGV0aW9uVGV4dCh0ZXh0OiBzdHJpbmcpOiBudW1iZXJbXSB7XG4gIGNvbnN0IGxhYmVsZWQgPSB0ZXh0Lm1hdGNoKC9cXGJJRFxccypcXCpcXCooXFxkKylcXCpcXCovaSlcbiAgaWYgKGxhYmVsZWQpIHtcbiAgICBjb25zdCBuID0gcGFyc2VJbnQobGFiZWxlZFsxXSwgMTApXG4gICAgcmV0dXJuIE51bWJlci5pc05hTihuKSA/IFtdIDogW25dXG4gIH1cbiAgY29uc3QgYm9sZCA9IHRleHQubWF0Y2goL1xcKlxcKihcXGR7NSx9KVxcKlxcKi8pXG4gIGlmIChib2xkKSB7XG4gICAgY29uc3QgbiA9IHBhcnNlSW50KGJvbGRbMV0sIDEwKVxuICAgIHJldHVybiBOdW1iZXIuaXNOYU4obikgPyBbXSA6IFtuXVxuICB9XG4gIHJldHVybiBbXVxufVxuXG5jb25zdCB1c2VTdGFibGVDYWxsYmFja3MgPSAoYXV0aFVzZXI6IENPUlVzZXIpID0+IHtcbiAgY29uc3QgY3VycmVudFVzZXIgPSB1c2VSZWY8Q2hhdE1lc3NhZ2VVc2VyPih7XG4gICAgaWQ6IGF1dGhVc2VyLmlkLnRvU3RyaW5nKCksXG4gICAgbmFtZTogYXV0aFVzZXIuZmlyc3ROYW1lLFxuICAgIGF2YXRhcjogYXV0aFVzZXIucGljdHVyZSxcbiAgfSlcblxuICBpZiAoXG4gICAgY3VycmVudFVzZXIuY3VycmVudC5pZCAhPT0gYXV0aFVzZXIuaWQudG9TdHJpbmcoKSB8fFxuICAgIGN1cnJlbnRVc2VyLmN1cnJlbnQubmFtZSAhPT0gYXV0aFVzZXIuZmlyc3ROYW1lIHx8XG4gICAgY3VycmVudFVzZXIuY3VycmVudC5hdmF0YXIgIT09IGF1dGhVc2VyLnBpY3R1cmVcbiAgKSB7XG4gICAgY3VycmVudFVzZXIuY3VycmVudCA9IHtcbiAgICAgIGlkOiBhdXRoVXNlci5pZC50b1N0cmluZygpLFxuICAgICAgbmFtZTogYXV0aFVzZXIuZmlyc3ROYW1lLFxuICAgICAgYXZhdGFyOiBhdXRoVXNlci5waWN0dXJlLFxuICAgIH1cbiAgfVxuICByZXR1cm4ge1xuICAgIGN1cnJlbnRVc2VyOiBjdXJyZW50VXNlci5jdXJyZW50LFxuICB9XG59XG5cbmNvbnN0IHBhcnNlU1NFTGluZSA9IChsaW5lOiBzdHJpbmcpOiB7IGV2ZW50VHlwZTogc3RyaW5nOyBkYXRhOiB1bmtub3duIH0gfCBudWxsID0+IHtcbiAgaWYgKCFsaW5lLnRyaW0oKSkgcmV0dXJuIG51bGxcblxuICBjb25zdCBbZXZlbnRMaW5lLCBkYXRhTGluZV0gPSBsaW5lLnNwbGl0KCdcXG4nKVxuICBpZiAoIWV2ZW50TGluZSB8fCAhZGF0YUxpbmUpIHJldHVybiBudWxsXG5cbiAgY29uc3QgZXZlbnRUeXBlID0gZXZlbnRMaW5lLnJlcGxhY2UoJ2V2ZW50OiAnLCAnJykudHJpbSgpXG4gIGNvbnN0IGRhdGFTdHIgPSBkYXRhTGluZS5yZXBsYWNlKCdkYXRhOiAnLCAnJykudHJpbSgpXG5cbiAgdHJ5IHtcbiAgICBjb25zdCBkYXRhID0gSlNPTi5wYXJzZShkYXRhU3RyKVxuICAgIHJldHVybiB7IGV2ZW50VHlwZSwgZGF0YSB9XG4gIH0gY2F0Y2ggKHBhcnNlRXJyb3IpIHtcbiAgICBjb25zb2xlLmVycm9yKCdFcnJvciBwYXJzaW5nIFNTRSBkYXRhOicsIHBhcnNlRXJyb3IsIGRhdGFTdHIpXG4gICAgcmV0dXJuIG51bGxcbiAgfVxufVxuXG5jb25zdCBwcm9jZXNzU1NFU3RyZWFtID0gYXN5bmMgKFxuICByZXNwb25zZTogUmVzcG9uc2UsXG4gIHRocmVhZElkOiBzdHJpbmcsXG4gIGNhbGxiYWNrczoge1xuICAgIG9uVG9rZW46IChjb250ZW50OiBzdHJpbmcpID0+IHZvaWRcbiAgICBvbk5vZGU6IChtZXNzYWdlOiBzdHJpbmcsIHRocmVhZElkOiBzdHJpbmcpID0+IHZvaWRcbiAgICBvbkNvbXBsZXRlOiAoXG4gICAgICBmaW5hbENvbnRlbnQ6IHN0cmluZyxcbiAgICAgIHNvdXJjZXM6IGFueSxcbiAgICAgIG1lbW9yeVNlc3Npb25JZDogc3RyaW5nLFxuICAgICAgY3VycmVudFRocmVhZElkOiBzdHJpbmcsXG4gICAgICBhdHRhY2htZW50cz86IGFueVtdIHwgbnVsbCxcbiAgICAgIHN1Z2dlc3Rpb25zPzogc3RyaW5nW10gfCBudWxsLFxuICAgICAgYWdlbnRJZD86IHN0cmluZyB8IG51bGxcbiAgICApID0+IHZvaWRcbiAgICBvbkVycm9yOiAoZXJyb3I6IGFueSwgdGhyZWFkSWQ6IHN0cmluZykgPT4gdm9pZFxuICAgIG9uQXBwcm92YWxSZXF1aXJlZD86IChhcHByb3ZhbDogYW55LCBhY2N1bXVsYXRlZENvbnRlbnQ6IHN0cmluZywgY3VycmVudFRocmVhZElkOiBzdHJpbmcpID0+IHZvaWRcbiAgfVxuKTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gIGNvbnN0IHJlYWRlciA9IHJlc3BvbnNlLmJvZHk/LmdldFJlYWRlcigpXG4gIGlmICghcmVhZGVyKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdObyByZWFkZXIgYXZhaWxhYmxlJylcbiAgfVxuXG4gIGNvbnN0IGRlY29kZXIgPSBuZXcgVGV4dERlY29kZXIoKVxuICBsZXQgYnVmZmVyID0gJydcbiAgbGV0IGFjY3VtdWxhdGVkQ29udGVudCA9ICcnXG4gIGxldCBpc1N0cmVhbUNvbXBsZXRlID0gZmFsc2VcblxuICBmdW5jdGlvbiBoYW5kbGVMaW5lKGxpbmU6IHN0cmluZykge1xuICAgIGNvbnN0IHBhcnNlZCA9IHBhcnNlU1NFTGluZShsaW5lKVxuICAgIGlmICghcGFyc2VkKSByZXR1cm5cblxuICAgIGNvbnN0IHsgZXZlbnRUeXBlLCBkYXRhIH0gPSBwYXJzZWRcbiAgICBjb25zdCBldmVudERhdGEgPSBkYXRhIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+XG5cbiAgICBpZiAoZXZlbnRUeXBlID09PSAndG9rZW4nKSB7XG4gICAgICBjb25zdCBjb250ZW50ID0gZXZlbnREYXRhLmNvbnRlbnQgYXMgc3RyaW5nXG4gICAgICBhY2N1bXVsYXRlZENvbnRlbnQgKz0gY29udGVudFxuICAgICAgY2FsbGJhY2tzLm9uVG9rZW4oYWNjdW11bGF0ZWRDb250ZW50KVxuICAgIH0gZWxzZSBpZiAoZXZlbnRUeXBlID09PSAnbm9kZScpIHtcbiAgICAgIGlmIChldmVudERhdGEubWVzc2FnZSAmJiB0eXBlb2YgZXZlbnREYXRhLm1lc3NhZ2UgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGNhbGxiYWNrcy5vbk5vZGUoZXZlbnREYXRhLm1lc3NhZ2UsIHRocmVhZElkKVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoZXZlbnRUeXBlID09PSAnY29tcGxldGUnKSB7XG4gICAgICBjb25zdCBmaW5hbENvbnRlbnQgPSAoZXZlbnREYXRhLmNvbnRlbnQgYXMgc3RyaW5nKSB8fCBhY2N1bXVsYXRlZENvbnRlbnRcbiAgICAgIGNvbnN0IHNvdXJjZXMgPSAoZXZlbnREYXRhLnNvdXJjZXMgYXMgdW5rbm93bikgfHwgbnVsbFxuICAgICAgY29uc3QgbWVtb3J5U2Vzc2lvbklkID0gKGV2ZW50RGF0YS5tZW1vcnlfc2Vzc2lvbl9pZCBhcyBzdHJpbmcpIHx8ICcnXG4gICAgICBjb25zdCBhdHRhY2htZW50cyA9IEFycmF5LmlzQXJyYXkoZXZlbnREYXRhLmF0dGFjaG1lbnRzKSA/IGV2ZW50RGF0YS5hdHRhY2htZW50cyA6IG51bGxcbiAgICAgIGNvbnN0IHN1Z2dlc3Rpb25zID0gQXJyYXkuaXNBcnJheShldmVudERhdGEuc3VnZ2VzdF9yZXBseSlcbiAgICAgICAgPyAoZXZlbnREYXRhLnN1Z2dlc3RfcmVwbHkgYXMgc3RyaW5nW10pXG4gICAgICAgIDogQXJyYXkuaXNBcnJheShldmVudERhdGEuc3VnZ2VzdGlvbnMpXG4gICAgICAgICAgPyAoZXZlbnREYXRhLnN1Z2dlc3Rpb25zIGFzIHN0cmluZ1tdKVxuICAgICAgICAgIDogbnVsbFxuICAgICAgY29uc3QgYWdlbnRJZFJhdyA9IGV2ZW50RGF0YS5hZ2VudF9pZCA/PyBldmVudERhdGEuYWdlbnRJZFxuICAgICAgY29uc3QgY29tcGxldGVkQWdlbnRJZCA9IGFnZW50SWRSYXcgIT0gbnVsbCAmJiBTdHJpbmcoYWdlbnRJZFJhdykudHJpbSgpICE9PSAnJyA/IFN0cmluZyhhZ2VudElkUmF3KS50cmltKCkgOiBudWxsXG4gICAgICBjYWxsYmFja3Mub25Db21wbGV0ZShmaW5hbENvbnRlbnQsIHNvdXJjZXMsIG1lbW9yeVNlc3Npb25JZCwgdGhyZWFkSWQsIGF0dGFjaG1lbnRzLCBzdWdnZXN0aW9ucywgY29tcGxldGVkQWdlbnRJZClcbiAgICB9IGVsc2UgaWYgKGV2ZW50VHlwZSA9PT0gJ2FwcHJvdmFsX3JlcXVpcmVkJykge1xuICAgICAgY2FsbGJhY2tzLm9uQXBwcm92YWxSZXF1aXJlZD8uKGV2ZW50RGF0YSwgYWNjdW11bGF0ZWRDb250ZW50LCB0aHJlYWRJZClcbiAgICB9IGVsc2UgaWYgKGV2ZW50VHlwZSA9PT0gJ2Vycm9yJykge1xuICAgICAgY2FsbGJhY2tzLm9uRXJyb3IoZXZlbnREYXRhLmVycm9yLCB0aHJlYWRJZClcbiAgICB9XG4gIH1cblxuICB3aGlsZSAoIWlzU3RyZWFtQ29tcGxldGUpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tYXdhaXQtaW4tbG9vcFxuICAgIGNvbnN0IHsgZG9uZSwgdmFsdWUgfSA9IGF3YWl0IHJlYWRlci5yZWFkKClcbiAgICBpZiAoZG9uZSkge1xuICAgICAgaXNTdHJlYW1Db21wbGV0ZSA9IHRydWVcbiAgICAgIGJyZWFrXG4gICAgfVxuXG4gICAgYnVmZmVyICs9IGRlY29kZXIuZGVjb2RlKHZhbHVlLCB7IHN0cmVhbTogdHJ1ZSB9KVxuICAgIGNvbnN0IGxpbmVzID0gYnVmZmVyLnNwbGl0KCdcXG5cXG4nKVxuICAgIGJ1ZmZlciA9IGxpbmVzLnBvcCgpIHx8ICcnXG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxpbmVzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICBoYW5kbGVMaW5lKGxpbmVzW2ldKVxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgY29uc3QgdXNlQ2hhdE1hbmFnZXIgPSAoe1xuICBjaGF0SWQ6IGluaXRpYWxDaGF0SWQsXG4gIHVzZXJJbml0aWFsTWVzc2FnZSxcbiAgb25FcnJvcixcbiAgYWdlbnRzID0gW10sXG59OiBVc2VDaGF0TWFuYWdlclByb3BzKSA9PiB7XG4gIGNvbnN0IHsgdCB9ID0gdXNlVCgpXG4gIGNvbnN0IGF1dGhVc2VyID0gdXNlVXNlcigpXG4gIGNvbnN0IHtcbiAgICBwcm9qZWN0LFxuICAgIHNldFByb2plY3QsXG4gICAgY2xpZW50LFxuICAgIHNldENsaWVudCxcbiAgICBhZ2VudCxcbiAgICBpc1dlYlNlYXJjaEFjdGl2ZSxcbiAgICBpc0RlZXBTZWFyY2hBY3RpdmUsXG4gICAgY2hpcHNQcm9qZWN0LFxuICAgIHNldENoaXBzUHJvamVjdCxcbiAgfSA9IHVzZUdsb2JhbENvbnRleHQoKVxuICBjb25zdCBldmVudCA9IHVzZUV2ZW50KClcbiAgY29uc3QgeyBmZXRjaFByb2plY3RzIH0gPSB1c2VQcm9qZWN0cygpXG4gIGNvbnN0IHsgY3VycmVudFVzZXIgfSA9IHVzZVN0YWJsZUNhbGxiYWNrcyhhdXRoVXNlcilcbiAgY29uc3QgeyBnZXRUYWJUYXNrRGVmYXVsdCB9ID0gdXNlVGFiVGFza0RlZmF1bHQoKVxuICBjb25zdCBjdXJyZW50TWVzc2FnZUlkID0gdXNlUmVmKHV1aWR2NCgpKVxuICBjb25zdCBjdXJyZW50VXNlclF1ZXN0aW9uID0gdXNlUmVmPHN0cmluZyB8IG51bGw+KG51bGwpXG4gIGNvbnN0IGN1cnJlbnRDaGF0SWQgPSB1c2VSZWYoaW5pdGlhbENoYXRJZCB8fCB1dWlkdjQoKSlcbiAgY29uc3QgcmVwb3J0ZWRFdmVudCA9IHVzZVJlZihmYWxzZSlcbiAgY29uc3QgbWVzc2FnZXNSZWYgPSB1c2VSZWY8Q2hhdE1lc3NhZ2VbXT4oW10pXG4gIGNvbnN0IGlzUHJvY2Vzc2luZ1JlZiA9IHVzZVJlZihmYWxzZSlcbiAgY29uc3QgZmlyc3RUaW1lUmVmID0gdXNlUmVmKGZhbHNlKVxuICAvKiogSWQgZGVsIHBsYWNlaG9sZGVyIGRlbCBtZW5zYWplIGVuIHN0cmVhbWluZyBhY3Rpdm8gKHNpIGhheSkuICovXG4gIGNvbnN0IHN0cmVhbWluZ1BsYWNlaG9sZGVySWRSZWYgPSB1c2VSZWY8c3RyaW5nIHwgbnVsbD4obnVsbClcbiAgLyoqXG4gICAqIENoYXQgYWwgcXVlIHBlcnRlbmVjZSBlbCBzdHJlYW0gYWN0dWFsbWVudGUgYWN0aXZvLiBTaSBjYW1iaWEgZWwgY2hhdFxuICAgKiBtaWVudHJhcyB1biBzdHJlYW0gZXN0w6EgZW4gdnVlbG8sIGRlc2NhcnRhbW9zIGxvcyB0b2tlbnMgcmVzaWR1YWxlc1xuICAgKiBxdWUgcHVlZGFuIGxsZWdhciBhbnRlcyBkZSBxdWUgZWwgYWJvcnQgc2UgY29tcGxldGUuXG4gICAqL1xuICBjb25zdCBhY3RpdmVTdHJlYW1DaGF0SWRSZWYgPSB1c2VSZWY8c3RyaW5nIHwgbnVsbD4obnVsbClcbiAgLyoqIFNldHRlciBpbmRpcmVjdG8gcGFyYSBhYm9ydGFyIGVsIHN0cmVhbSBhbnRlcyBkZSBxdWUgZWwgaG9vayBkZVxuICAgKiBvcnF1ZXN0YWRvciBlc3TDqSBpbmljaWFsaXphZG8gKHNlIGxpbmtlYSBtw6FzIGFiYWpvKS4gKi9cbiAgY29uc3QgYWJvcnRTdHJlYW1TaWxlbnRseVJlZiA9IHVzZVJlZjwoKSA9PiB2b2lkPigoKSA9PiB1bmRlZmluZWQpXG4gIGNvbnN0IFthY3RpdmVMb2FkaW5ncywgc2V0QWN0aXZlTG9hZGluZ3NdID0gdXNlU3RhdGU8UmVjb3JkPHN0cmluZywgc3RyaW5nPj4oe30pXG5cbiAgY29uc3QgaXNXZWJTZWFyY2hBY3RpdmVSZWYgPSB1c2VSZWYoaXNXZWJTZWFyY2hBY3RpdmUpXG4gIGNvbnN0IGlzRGVlcFNlYXJjaEFjdGl2ZVJlZiA9IHVzZVJlZihpc0RlZXBTZWFyY2hBY3RpdmUpXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpc1dlYlNlYXJjaEFjdGl2ZVJlZi5jdXJyZW50ID0gaXNXZWJTZWFyY2hBY3RpdmVcbiAgICBpc0RlZXBTZWFyY2hBY3RpdmVSZWYuY3VycmVudCA9IGlzRGVlcFNlYXJjaEFjdGl2ZVxuICB9LCBbaXNXZWJTZWFyY2hBY3RpdmUsIGlzRGVlcFNlYXJjaEFjdGl2ZV0pXG5cbiAgY29uc3QgeyBsb2FkaW5nTWVzc2FnZXMsIG1lc3NhZ2VzLCBpc0xvYWRpbmdNb3JlTWVzc2FnZXMsIGxvYWRNZXNzYWdlcywgYWRkTWVzc2FnZSwgcmVtb3ZlTWVzc2FnZSwgaGFuZGxlU2Nyb2xsIH0gPVxuICAgIHVzZUNoYXRNZXNzYWdlcyh7XG4gICAgICBjaGF0SWQ6IGluaXRpYWxDaGF0SWQgfHwgY3VycmVudENoYXRJZC5jdXJyZW50LFxuICAgICAgY3VycmVudFVzZXIsXG4gICAgICB1c2VySW5pdGlhbE1lc3NhZ2UsXG4gICAgICBvbkVycm9yLFxuICAgICAgYWdlbnRzLFxuICAgIH0pXG5cbiAgbWVzc2FnZXNSZWYuY3VycmVudCA9IG1lc3NhZ2VzXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBjdXN0b21FdmVudCA9IG5ldyBDdXN0b21FdmVudCgnY2hhdC1sb2FkaW5nLW1lc3NhZ2VzLWNoYW5nZWQnLCB7XG4gICAgICBkZXRhaWw6IHsgbG9hZGluZ01lc3NhZ2VzIH0sXG4gICAgfSlcbiAgICBkb2N1bWVudC5kaXNwYXRjaEV2ZW50KGN1c3RvbUV2ZW50KVxuICB9LCBbbG9hZGluZ01lc3NhZ2VzXSlcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChpbml0aWFsQ2hhdElkICYmIGluaXRpYWxDaGF0SWQgIT09IGN1cnJlbnRDaGF0SWQuY3VycmVudCkge1xuICAgICAgLy8gU2kgaGF5IHVuIHN0cmVhbSBlbiBjdXJzbywgYWJvcnRhcmxvIHNpbGVuY2lvc2FtZW50ZSBwYXJhIHF1ZSBsb3NcbiAgICAgIC8vIHRva2VucyByZXNpZHVhbGVzIG5vIHNlIGVzY3JpYmFuIGVuIGVsIGNoYXQgbnVldm8uXG4gICAgICBhYm9ydFN0cmVhbVNpbGVudGx5UmVmLmN1cnJlbnQoKVxuXG4gICAgICAvLyBMaW1waWFyIGNvbnRleHRvIGdsb2JhbCBhbCBjYW1iaWFyIGRlIGNvbnZlcnNhY2nDs25cbiAgICAgIHNldFByb2plY3QobnVsbClcbiAgICAgIHNldENsaWVudD8uKG51bGwpXG4gICAgICBzZXRDaGlwc1Byb2plY3QobnVsbClcblxuICAgICAgY3VycmVudENoYXRJZC5jdXJyZW50ID0gaW5pdGlhbENoYXRJZFxuICAgICAgY3VycmVudE1lc3NhZ2VJZC5jdXJyZW50ID0gdXVpZHY0KClcbiAgICAgIGN1cnJlbnRVc2VyUXVlc3Rpb24uY3VycmVudCA9IG51bGxcbiAgICAgIHJlcG9ydGVkRXZlbnQuY3VycmVudCA9IGZhbHNlXG4gICAgICBpc1Byb2Nlc3NpbmdSZWYuY3VycmVudCA9IGZhbHNlXG4gICAgICBzdHJlYW1pbmdQbGFjZWhvbGRlcklkUmVmLmN1cnJlbnQgPSBudWxsXG4gICAgICBhY3RpdmVTdHJlYW1DaGF0SWRSZWYuY3VycmVudCA9IG51bGxcbiAgICAgIHN0cmVhbWluZ1N0b3JlLmNsZWFyKClcblxuICAgICAgbG9hZE1lc3NhZ2VzKClcbiAgICB9XG4gIH0sIFtpbml0aWFsQ2hhdElkLCBwcm9qZWN0LCBzZXRQcm9qZWN0LCBzZXRDbGllbnQsIHNldENoaXBzUHJvamVjdCwgbG9hZE1lc3NhZ2VzXSlcblxuICAvLyBTaW5jcm9uaXphciBjaGlwc1Byb2plY3QgY3VhbmRvIGhheSBtZW5zYWplcyBjb24gcHJvamVjdElkIHBlcm8gY2hpcHNQcm9qZWN0IG5vIHNlIGhhIHNldGVhZG9cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoY2hpcHNQcm9qZWN0IHx8IGxvYWRpbmdNZXNzYWdlcykgcmV0dXJuXG4gICAgY29uc3QgbGFzdE1zZ1dpdGhQcm9qZWN0ID0gbWVzc2FnZXMuZmlsdGVyKG1zZyA9PiBtc2cucHJvamVjdElkKS5hdCgtMSlcbiAgICBjb25zdCB7IHByb2plY3RJZCwgcHJvamVjdE5hbWUgfSA9IGxhc3RNc2dXaXRoUHJvamVjdCB8fCB7fVxuICAgIGlmICghcHJvamVjdElkKSByZXR1cm5cblxuICAgIGZldGNoUHJvamVjdHMocHJvamVjdElkKS50aGVuKHByb2plY3RzID0+IHtcbiAgICAgIGNvbnN0IGZvdW5kID0gcHJvamVjdHM/LmZpbmQocCA9PiBOdW1iZXIocC5pZCkgPT09IE51bWJlcihwcm9qZWN0SWQpKVxuICAgICAgaWYgKGZvdW5kKSB7XG4gICAgICAgIHNldENoaXBzUHJvamVjdCh7XG4gICAgICAgICAgcHJvamVjdE5hbWU6IGZvdW5kLm5hbWUsXG4gICAgICAgICAgY2xpZW50TmFtZTogZm91bmQuY2xpZW50Py5uYW1lIHx8ICcnLFxuICAgICAgICAgIHByb2plY3RJZDogU3RyaW5nKGZvdW5kLmlkKSxcbiAgICAgICAgfSlcbiAgICAgICAgc2V0UHJvamVjdChmb3VuZClcbiAgICAgIH0gZWxzZSBpZiAocHJvamVjdE5hbWUpIHtcbiAgICAgICAgc2V0Q2hpcHNQcm9qZWN0KHtcbiAgICAgICAgICBwcm9qZWN0TmFtZSxcbiAgICAgICAgICBjbGllbnROYW1lOiAnJyxcbiAgICAgICAgICBwcm9qZWN0SWQ6IFN0cmluZyhwcm9qZWN0SWQpLFxuICAgICAgICB9KVxuICAgICAgICBzZXRQcm9qZWN0KHsgaWQ6IE51bWJlcihwcm9qZWN0SWQpLCBuYW1lOiBwcm9qZWN0TmFtZSB9KVxuICAgICAgfVxuICAgIH0pXG4gIH0sIFttZXNzYWdlcywgY2hpcHNQcm9qZWN0LCBsb2FkaW5nTWVzc2FnZXMsIGZldGNoUHJvamVjdHMsIHNldENoaXBzUHJvamVjdCwgc2V0UHJvamVjdF0pXG5cbiAgLy8gU2luY3Jvbml6YXIgY2xpZW50IGN1YW5kbyBoYXkgbWVuc2FqZXMgY29uIGNsaWVudElkIHBlcm8gY2xpZW50IG5vIHNlIGhhIHNldGVhZG9cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoY2xpZW50IHx8IGxvYWRpbmdNZXNzYWdlcykgcmV0dXJuXG4gICAgY29uc3QgbGFzdE1zZ1dpdGhDbGllbnQgPSBtZXNzYWdlcy5maWx0ZXIobXNnID0+IG1zZy5jbGllbnRJZCAhPSBudWxsICYmIG1zZy5jbGllbnROYW1lKS5hdCgtMSlcbiAgICBjb25zdCB7IGNsaWVudElkOiBtc2dDbGllbnRJZCwgY2xpZW50TmFtZTogbXNnQ2xpZW50TmFtZSB9ID0gbGFzdE1zZ1dpdGhDbGllbnQgfHwge31cbiAgICBpZiAobXNnQ2xpZW50SWQgPT0gbnVsbCB8fCAhbXNnQ2xpZW50TmFtZSkgcmV0dXJuXG5cbiAgICBzZXRDbGllbnQ/Lih7IGlkOiBOdW1iZXIobXNnQ2xpZW50SWQpLCBuYW1lOiBtc2dDbGllbnROYW1lIH0pXG4gIH0sIFttZXNzYWdlcywgY2xpZW50LCBsb2FkaW5nTWVzc2FnZXMsIHNldENsaWVudF0pXG5cbiAgY29uc3QgaGFuZGxlU3RyZWFtRXJyb3IgPSB1c2VDYWxsYmFjayhcbiAgICAoZXJyb3JNZXNzYWdlPzogc3RyaW5nKSA9PiB7XG4gICAgICBjb25zdCB0ZW1wTWVzc2FnZUlkID0gYGFuc3dlci0ke2N1cnJlbnRNZXNzYWdlSWQuY3VycmVudH0tc3RyZWFtaW5nYFxuICAgICAgc3RyZWFtaW5nU3RvcmUuY2xlYXIoKVxuICAgICAgc3RyZWFtaW5nUGxhY2Vob2xkZXJJZFJlZi5jdXJyZW50ID0gbnVsbFxuICAgICAgYWN0aXZlU3RyZWFtQ2hhdElkUmVmLmN1cnJlbnQgPSBudWxsXG4gICAgICByZW1vdmVNZXNzYWdlKHRlbXBNZXNzYWdlSWQpXG5cbiAgICAgIGNvbnN0IG1lc3NhZ2UgPVxuICAgICAgICBlcnJvck1lc3NhZ2UgPT09IFwiQWNjZXNzIGRlbmllZDogWW91IGRvbid0IGhhdmUgcGVybWlzc2lvbiB0byBhY2Nlc3MgdGhpcyBhZ2VudFwiXG4gICAgICAgICAgPyB0KCdjaGF0LmVycm9yQWNjZXNzRGVuaWVkJylcbiAgICAgICAgICA6IHQoJ2NoYXQuZXJyb3InKVxuXG4gICAgICBhZGRNZXNzYWdlKHtcbiAgICAgICAgaWQ6IGBhbnN3ZXItJHtjdXJyZW50TWVzc2FnZUlkLmN1cnJlbnR9YCxcbiAgICAgICAgbWVzc2FnZSxcbiAgICAgICAgaXNFcnJvcjogdHJ1ZSxcbiAgICAgICAgZGF0ZTogbmV3IERhdGUoKSxcbiAgICAgICAgdXNlcjogeyBpZDogJ2Fzc2lzdGFudCcsIG5hbWU6ICdBc3Npc3RhbnQnIH0sXG4gICAgICAgIHJvbGU6IENoYXRIaXN0b3J5Um9sZS5BU1NJU1RBTlQsXG4gICAgICB9KVxuICAgICAgaXNQcm9jZXNzaW5nUmVmLmN1cnJlbnQgPSBmYWxzZVxuICAgIH0sXG4gICAgW2FkZE1lc3NhZ2UsIHJlbW92ZU1lc3NhZ2UsIHRdXG4gIClcblxuICBjb25zdCBoYW5kbGVTdHJlYW1VcGRhdGUgPSB1c2VDYWxsYmFjayhcbiAgICAoY29udGVudDogc3RyaW5nLCBzb3VyY2VzOiBhbnksIG1lbW9yeVNlc3Npb25JZDogc3RyaW5nKSA9PiB7XG4gICAgICAvLyBTaSBlbCBjaGF0IGNhbWJpw7MgbWllbnRyYXMgZWwgc3RyZWFtIGVzdGFiYSBlbiB2dWVsbywgZGVzY2FydGFyIGVsXG4gICAgICAvLyB0b2tlbiByZXNpZHVhbDogbm8gZGViZSBwaW50YXJzZSBlbiBlbCBudWV2byBjaGF0LlxuICAgICAgaWYgKGFjdGl2ZVN0cmVhbUNoYXRJZFJlZi5jdXJyZW50ICE9IG51bGwgJiYgYWN0aXZlU3RyZWFtQ2hhdElkUmVmLmN1cnJlbnQgIT09IGN1cnJlbnRDaGF0SWQuY3VycmVudCkge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgY29uc3QgdGVtcE1lc3NhZ2VJZCA9IGBhbnN3ZXItJHtjdXJyZW50TWVzc2FnZUlkLmN1cnJlbnR9LXN0cmVhbWluZ2BcblxuICAgICAgLy8gUHJpbWVyYSBsbGFtYWRhIGRlIGVzdGUgc3RyZWFtOiBpbnNlcnRhbW9zIGVsIHBsYWNlaG9sZGVyIGVuIGVsXG4gICAgICAvLyBhcnJheSBkZSBgbWVzc2FnZXNgIHVuYSDDum5pY2EgdmV6LiBMYXMgbGxhbWFkYXMgc3Vic2lndWllbnRlcyB5YSBub1xuICAgICAgLy8gdG9jYW4gYG1lc3NhZ2VzYDsgZWwgdGV4dG8gdml2ZSBlbiBlbCBzdHJlYW1pbmdTdG9yZSAoZXh0ZXJubyksIHBvclxuICAgICAgLy8gbG8gcXVlIFJlYWN0IG5vIHJlLXJlbmRlcml6YSBlbCDDoXJib2wgY29tcGxldG8gZW4gY2FkYSB0b2tlbi5cbiAgICAgIGlmIChzdHJlYW1pbmdQbGFjZWhvbGRlcklkUmVmLmN1cnJlbnQgIT09IHRlbXBNZXNzYWdlSWQpIHtcbiAgICAgICAgc3RyZWFtaW5nUGxhY2Vob2xkZXJJZFJlZi5jdXJyZW50ID0gdGVtcE1lc3NhZ2VJZFxuICAgICAgICBhY3RpdmVTdHJlYW1DaGF0SWRSZWYuY3VycmVudCA9IGN1cnJlbnRDaGF0SWQuY3VycmVudFxuICAgICAgICBzdHJlYW1pbmdTdG9yZS5zdGFydCh0ZW1wTWVzc2FnZUlkKVxuICAgICAgICBhZGRNZXNzYWdlKHtcbiAgICAgICAgICBpZDogdGVtcE1lc3NhZ2VJZCxcbiAgICAgICAgICBtZXNzYWdlOiAnJyxcbiAgICAgICAgICBkYXRlOiBuZXcgRGF0ZSgpLFxuICAgICAgICAgIHVzZXI6IHsgaWQ6ICdhc3Npc3RhbnQnLCBuYW1lOiAnQXNzaXN0YW50JyB9LFxuICAgICAgICAgIHJvbGU6IENoYXRIaXN0b3J5Um9sZS5BU1NJU1RBTlQsXG4gICAgICAgICAgc291cmNlcyxcbiAgICAgICAgICBtZW1vcnlTZXNzaW9uSWQsXG4gICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIHN0cmVhbWluZ1N0b3JlLnNldFRleHQodGVtcE1lc3NhZ2VJZCwgY29udGVudClcbiAgICB9LFxuICAgIFthZGRNZXNzYWdlXVxuICApXG5cbiAgY29uc3QgaGFuZGxlU3RyZWFtRmluaXNoID0gdXNlQ2FsbGJhY2soXG4gICAgYXN5bmMgKFxuICAgICAgY29udGVudDogc3RyaW5nLFxuICAgICAgc291cmNlczogYW55LFxuICAgICAgbWVtb3J5U2Vzc2lvbklkOiBzdHJpbmcsXG4gICAgICByYXdBdHRhY2htZW50cz86IGFueVtdIHwgbnVsbCxcbiAgICAgIHN1Z2dlc3Rpb25zPzogc3RyaW5nW10gfCBudWxsLFxuICAgICAgY29tcGxldGVkQWdlbnRJZD86IHN0cmluZyB8IG51bGxcbiAgICApID0+IHtcbiAgICAgIGNvbnN0IHRlbXBNZXNzYWdlSWQgPSBgYW5zd2VyLSR7Y3VycmVudE1lc3NhZ2VJZC5jdXJyZW50fS1zdHJlYW1pbmdgXG4gICAgICBzdHJlYW1pbmdTdG9yZS5jbGVhcigpXG4gICAgICBzdHJlYW1pbmdQbGFjZWhvbGRlcklkUmVmLmN1cnJlbnQgPSBudWxsXG4gICAgICBhY3RpdmVTdHJlYW1DaGF0SWRSZWYuY3VycmVudCA9IG51bGxcbiAgICAgIHJlbW92ZU1lc3NhZ2UodGVtcE1lc3NhZ2VJZClcbiAgICAgIGNvbnN0IGF0dGFjaG1lbnRzID0gbm9ybWFsaXplQXNzaXN0YW50QXR0YWNobWVudHMocmF3QXR0YWNobWVudHMpXG5cbiAgICAgIC8vIERldGVjdGFyIHRvZGFzIGxhcyBVUkxzIGRlIHRhcmVhcyAoLi4uL3Rhc2tzLzEyMy9kZXRhaWx8bWVzc2FnZXxtZXNzYWdlc3xmaWxlc3xoaXN0b3J5fGhvdXJzKVxuICAgICAgY29uc3QgdGFza1VybFJlZ2V4ID0gbmV3IFJlZ0V4cChUQVNLX1VSTF9SRUdFWF9QQVRURVJOLCAnZycpXG4gICAgICBjb25zdCBtYXRjaGVzID0gWy4uLmNvbnRlbnQubWF0Y2hBbGwodGFza1VybFJlZ2V4KV1cblxuICAgICAgbGV0IGNvbnRlbnRUb0FkZCA9IGNvbnRlbnRcbiAgICAgIGNvbnN0IHByZXZpb3VzTWVzc2FnZSA9IG1lc3NhZ2VzUmVmLmN1cnJlbnQuZmlsdGVyKG0gPT4gbS5pZCAhPT0gdGVtcE1lc3NhZ2VJZCkuYXQoLTEpXG4gICAgICBjb25zdCBoYXNBcHByb3ZhbEluUHJldmlvdXNNZXNzYWdlID0gcHJldmlvdXNNZXNzYWdlPy5hcHByb3ZhbCAhPSBudWxsXG4gICAgICBjb25zdCBUQVNLX0NSRUFUSU9OX1RPT0xTID0gWydjcmVhdGVfdGFzaycsICdjcmVhdGVfdGFza3NfYmF0Y2gnLCAnY2xvbmVfdGFzayddXG4gICAgICBjb25zdCBUQVNLX0VESVRfVE9PTFMgPSBbXG4gICAgICAgICdlZGl0X3Rhc2snLFxuICAgICAgICAnZWRpdF90YXNrc19iYXRjaCcsXG4gICAgICAgICd0YXNrX2Fzc2lnbicsXG4gICAgICAgICd0YXNrX3VuYXNzaWduJyxcbiAgICAgICAgJ3VwZGF0ZV90YXNrX3R5cGUnLFxuICAgICAgICAndXBkYXRlX2VzdGltYXRlZF9ob3VycycsXG4gICAgICAgICdhc3NpZ25fdGFza19sYWJlbCcsXG4gICAgICBdXG4gICAgICBjb25zdCBUQVNLX0RFTEVURV9UT09MUyA9IFsnZGVsZXRlX3Rhc2snLCAnZGVsZXRlX3Rhc2tzX2JhdGNoJ11cbiAgICAgIGNvbnN0IHBlbmRpbmdBY3Rpb25zID0gcHJldmlvdXNNZXNzYWdlPy5hcHByb3ZhbD8ucGVuZGluZ19hY3Rpb25zIHx8IFtdXG4gICAgICBjb25zdCB3YXNUYXNrQ3JlYXRpb24gPVxuICAgICAgICBoYXNBcHByb3ZhbEluUHJldmlvdXNNZXNzYWdlICYmXG4gICAgICAgIHBlbmRpbmdBY3Rpb25zLnNvbWUoKGFjdGlvbjogYW55KSA9PiBUQVNLX0NSRUFUSU9OX1RPT0xTLmluY2x1ZGVzKGFjdGlvbi50b29sX25hbWUpKVxuICAgICAgY29uc3Qgd2FzVGFza0VkaXQgPVxuICAgICAgICBoYXNBcHByb3ZhbEluUHJldmlvdXNNZXNzYWdlICYmIHBlbmRpbmdBY3Rpb25zLnNvbWUoKGFjdGlvbjogYW55KSA9PiBUQVNLX0VESVRfVE9PTFMuaW5jbHVkZXMoYWN0aW9uLnRvb2xfbmFtZSkpXG4gICAgICBjb25zdCB3YXNUYXNrRGVsZXRlID1cbiAgICAgICAgaGFzQXBwcm92YWxJblByZXZpb3VzTWVzc2FnZSAmJlxuICAgICAgICBwZW5kaW5nQWN0aW9ucy5zb21lKChhY3Rpb246IGFueSkgPT4gVEFTS19ERUxFVEVfVE9PTFMuaW5jbHVkZXMoYWN0aW9uLnRvb2xfbmFtZSkpXG4gICAgICBjb25zdCB3YXNDcmVhdGVBZ2VudEFwcHJvdmVkID1cbiAgICAgICAgaGFzQXBwcm92YWxJblByZXZpb3VzTWVzc2FnZSAmJlxuICAgICAgICBwcmV2aW91c01lc3NhZ2U/LmFwcHJvdmFsU3RhdHVzID09PSAnYXBwcm92ZWQnICYmXG4gICAgICAgIHBlbmRpbmdBY3Rpb25zLnNvbWUoKGFjdGlvbjogYW55KSA9PiBhY3Rpb24udG9vbF9uYW1lID09PSAnY3JlYXRlX2FnZW50JylcbiAgICAgIGNvbnN0IHdhc0NvbmZpZ3VyZUFnZW50QWNjZXNzQXBwcm92ZWQgPVxuICAgICAgICBoYXNBcHByb3ZhbEluUHJldmlvdXNNZXNzYWdlICYmXG4gICAgICAgIHByZXZpb3VzTWVzc2FnZT8uYXBwcm92YWxTdGF0dXMgPT09ICdhcHByb3ZlZCcgJiZcbiAgICAgICAgcGVuZGluZ0FjdGlvbnMuc29tZSgoYWN0aW9uOiBhbnkpID0+IChhY3Rpb24udG9vbF9uYW1lIHx8ICcnKS50b0xvd2VyQ2FzZSgpID09PSAnY29uZmlndXJlX2FnZW50X2FjY2VzcycpXG4gICAgICBsZXQgY3JlYXRlQWdlbnRGb2xsb3dVcDogeyBhZ2VudElkOiBzdHJpbmcgfSB8IHVuZGVmaW5lZFxuICAgICAgaWYgKHdhc0NyZWF0ZUFnZW50QXBwcm92ZWQgJiYgd2luZG93Lk1BSUFfQ0hBVF9BSV9GRUFUVVJFX0FDQ0VTU19NVUxUSV9BR0VOVFMgJiYgY29tcGxldGVkQWdlbnRJZD8udHJpbSgpKSB7XG4gICAgICAgIGNyZWF0ZUFnZW50Rm9sbG93VXAgPSB7IGFnZW50SWQ6IGNvbXBsZXRlZEFnZW50SWQudHJpbSgpIH1cbiAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgIHdhc0NvbmZpZ3VyZUFnZW50QWNjZXNzQXBwcm92ZWQgJiZcbiAgICAgICAgd2luZG93Lk1BSUFfQ0hBVF9BSV9GRUFUVVJFX0FDQ0VTU19NVUxUSV9BR0VOVFMgJiZcbiAgICAgICAgKGNvbXBsZXRlZEFnZW50SWQ/LnRyaW0oKSB8fFxuICAgICAgICAgIGV4dHJhY3RBZ2VudElkRnJvbVBlbmRpbmdBY3Rpb25zQnlUb29sTmFtZShwZW5kaW5nQWN0aW9ucywgJ2NvbmZpZ3VyZV9hZ2VudF9hY2Nlc3MnKSlcbiAgICAgICkge1xuICAgICAgICBjb25zdCBjb25maWd1cmVkQWdlbnRJZCA9XG4gICAgICAgICAgY29tcGxldGVkQWdlbnRJZD8udHJpbSgpIHx8XG4gICAgICAgICAgZXh0cmFjdEFnZW50SWRGcm9tUGVuZGluZ0FjdGlvbnNCeVRvb2xOYW1lKHBlbmRpbmdBY3Rpb25zLCAnY29uZmlndXJlX2FnZW50X2FjY2VzcycpXG4gICAgICAgIGNyZWF0ZUFnZW50Rm9sbG93VXAgPSB7XG4gICAgICAgICAgYWdlbnRJZDogY29uZmlndXJlZEFnZW50SWQgYXMgc3RyaW5nLFxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICh3YXNDcmVhdGVBZ2VudEFwcHJvdmVkKSB7XG4gICAgICAgIGV2ZW50KEVWRU5UUy5haUNoYXRIaXRsT3B0aW9uLCB7XG4gICAgICAgICAgYWdlbnRfdHlwZTogZ2V0SGl0bEFuYWx5dGljc0FnZW50VHlwZShhZ2VudCksXG4gICAgICAgICAgYWN0aW9uX3R5cGU6IGJ1aWxkSGl0bEFjdGlvblR5cGVMaXN0KHBlbmRpbmdBY3Rpb25zKSxcbiAgICAgICAgICBkZWNpc2lvbjogJ2FjY2VwdCcsXG4gICAgICAgICAgb3B0aW9uOiAnY3JlYXRlX2FnZW50JyxcbiAgICAgICAgICAuLi4oY29tcGxldGVkQWdlbnRJZD8udHJpbSgpID8geyBjcmVhdGVkX2FnZW50X2lkOiBjb21wbGV0ZWRBZ2VudElkLnRyaW0oKSB9IDoge30pLFxuICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICBjb25zdCB3YXNFZGl0QWdlbnRBcHByb3ZlZCA9XG4gICAgICAgIGhhc0FwcHJvdmFsSW5QcmV2aW91c01lc3NhZ2UgJiZcbiAgICAgICAgcHJldmlvdXNNZXNzYWdlPy5hcHByb3ZhbFN0YXR1cyA9PT0gJ2FwcHJvdmVkJyAmJlxuICAgICAgICBwZW5kaW5nQWN0aW9ucy5zb21lKChhY3Rpb246IGFueSkgPT4gKGFjdGlvbi50b29sX25hbWUgfHwgJycpLnRvTG93ZXJDYXNlKCkgPT09ICdlZGl0X2FnZW50JylcblxuICAgICAgbGV0IGVkaXRBZ2VudEZvbGxvd1VwOiB7IGFnZW50SWQ6IHN0cmluZyB9IHwgdW5kZWZpbmVkXG4gICAgICBpZiAod2FzRWRpdEFnZW50QXBwcm92ZWQpIHtcbiAgICAgICAgY29uc3QgZnJvbVN0cmVhbSA9IGNvbXBsZXRlZEFnZW50SWQ/LnRyaW0oKVxuICAgICAgICBjb25zdCBmcm9tQXJncyA9IGV4dHJhY3RBZ2VudElkRnJvbUVkaXRBZ2VudFBlbmRpbmdBY3Rpb25zKHBlbmRpbmdBY3Rpb25zKVxuICAgICAgICBjb25zdCByZXNvbHZlZEFnZW50SWQgPSBmcm9tU3RyZWFtIHx8IGZyb21BcmdzXG4gICAgICAgIGlmIChyZXNvbHZlZEFnZW50SWQpIHtcbiAgICAgICAgICBlZGl0QWdlbnRGb2xsb3dVcCA9IHsgYWdlbnRJZDogcmVzb2x2ZWRBZ2VudElkIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjb25zdCB0YXNrSWRzRnJvbVVybHMgPSBtYXRjaGVzLm1hcChtYXRjaCA9PiBwYXJzZUludChtYXRjaFsxXSwgMTApKVxuICAgICAgY29uc3QgdGFza0lkc0Zyb21EZWxldGVBcHByb3ZhbCA9IGV4dHJhY3RUYXNrSWRzRnJvbURlbGV0ZVBlbmRpbmdBY3Rpb25zKHBlbmRpbmdBY3Rpb25zKVxuICAgICAgY29uc3QgdGFza0lkc0Zyb21EZWxldGlvblRleHQgPVxuICAgICAgICB3YXNUYXNrRGVsZXRlICYmIHRhc2tJZHNGcm9tVXJscy5sZW5ndGggPT09IDAgJiYgdGFza0lkc0Zyb21EZWxldGVBcHByb3ZhbC5sZW5ndGggPT09IDBcbiAgICAgICAgICA/IGV4dHJhY3RUYXNrSWRzRnJvbUFzc2lzdGFudERlbGV0aW9uVGV4dChjb250ZW50KVxuICAgICAgICAgIDogW11cbiAgICAgIGNvbnN0IHRhc2tJZHNGb3JEYXNoYm9hcmQgPVxuICAgICAgICB0YXNrSWRzRnJvbVVybHMubGVuZ3RoID4gMFxuICAgICAgICAgID8gdGFza0lkc0Zyb21VcmxzXG4gICAgICAgICAgOiB0YXNrSWRzRnJvbURlbGV0ZUFwcHJvdmFsLmxlbmd0aCA+IDBcbiAgICAgICAgICAgID8gdGFza0lkc0Zyb21EZWxldGVBcHByb3ZhbFxuICAgICAgICAgICAgOiB0YXNrSWRzRnJvbURlbGV0aW9uVGV4dFxuXG4gICAgICBjb25zdCBzaG91bGRTeW5jRGFzaGJvYXJkID1cbiAgICAgICAgaGFzQXBwcm92YWxJblByZXZpb3VzTWVzc2FnZSAmJlxuICAgICAgICAod2FzVGFza0NyZWF0aW9uIHx8IHdhc1Rhc2tFZGl0IHx8IHdhc1Rhc2tEZWxldGUpICYmXG4gICAgICAgIHRhc2tJZHNGb3JEYXNoYm9hcmQubGVuZ3RoID4gMFxuXG4gICAgICBpZiAoc2hvdWxkU3luY0Rhc2hib2FyZCkge1xuICAgICAgICBjb25zdCB0YXNrSWRzID0gdGFza0lkc0ZvckRhc2hib2FyZFxuICAgICAgICBpZiAobWF0Y2hlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgY29uc3QgdGFiID0gYXdhaXQgZ2V0VGFiVGFza0RlZmF1bHQodGFza0lkc1swXSlcbiAgICAgICAgICBjb25zdCB0YWJTZWdtZW50ID0gdGFiID8gYC8ke3RhYn1gIDogJy9kZXRhaWwnXG4gICAgICAgICAgY29udGVudFRvQWRkID0gY29udGVudC5yZXBsYWNlKHRhc2tVcmxSZWdleCwgdXJsID0+XG4gICAgICAgICAgICB1cmwucmVwbGFjZSgvXFwvKGRldGFpbHxtZXNzYWdlfG1lc3NhZ2VzfGZpbGVzfGhpc3Rvcnl8aG91cnMpKD89JHxcXD8pLywgdGFiU2VnbWVudClcbiAgICAgICAgICApXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBsYXN0UHJvamVjdE1lc3NhZ2UgPSBtZXNzYWdlc1JlZi5jdXJyZW50LmZpbHRlcihtc2cgPT4gbXNnLnByb2plY3RJZCkuYXQoLTEpXG4gICAgICAgIGNvbnN0IGNvbnRleHRQcm9qZWN0SWRSYXcgPSBwcm9qZWN0Py5pZCB8fCBsYXN0UHJvamVjdE1lc3NhZ2U/LnByb2plY3RJZFxuICAgICAgICBjb25zdCBjb250ZXh0UHJvamVjdElkID0gY29udGV4dFByb2plY3RJZFJhdyA/IHBhcnNlSW50KFN0cmluZyhjb250ZXh0UHJvamVjdElkUmF3KSwgMTApIDogbnVsbFxuICAgICAgICBjb25zdCBwYXRoTWF0Y2ggPSB3aW5kb3cubG9jYXRpb24ucGF0aG5hbWUubWF0Y2goL15cXC9wcm9qZWN0c1xcLyhcXGQrKVxcLy8pXG4gICAgICAgIGNvbnN0IHJvdXRlUHJvamVjdElkID0gcGF0aE1hdGNoID8gcGFyc2VJbnQocGF0aE1hdGNoWzFdLCAxMCkgOiBudWxsXG4gICAgICAgIGNvbnN0IGlzT25Qcm9qZWN0Um91dGUgPSBjb250ZXh0UHJvamVjdElkICYmIHJvdXRlUHJvamVjdElkICYmIGNvbnRleHRQcm9qZWN0SWQgPT09IHJvdXRlUHJvamVjdElkXG5cbiAgICAgICAgaWYgKGlzT25Qcm9qZWN0Um91dGUpIHtcbiAgICAgICAgICBpZiAod2FzVGFza0NyZWF0aW9uKSB7XG4gICAgICAgICAgICB3aW5kb3cubmV3UHJvamVjdERhc2hib2FyZD8uYWRkRXhpc3RpbmdUYXNrVG9EYXNoYm9hcmQ/Lih0YXNrSWRzKVxuICAgICAgICAgIH0gZWxzZSBpZiAod2FzVGFza0VkaXQpIHtcbiAgICAgICAgICAgIHdpbmRvdy5uZXdQcm9qZWN0RGFzaGJvYXJkPy5lZGl0RXhpc3RpbmdUYXNrSW5EYXNoYm9hcmQ/Lih0YXNrSWRzKVxuICAgICAgICAgIH0gZWxzZSBpZiAod2FzVGFza0RlbGV0ZSkge1xuICAgICAgICAgICAgd2luZG93Lm5ld1Byb2plY3REYXNoYm9hcmQ/LmRlbGV0ZUV4aXN0aW5nVGFza0Zyb21EYXNoYm9hcmQ/Lih0YXNrSWRzKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBhZGRNZXNzYWdlKHtcbiAgICAgICAgaWQ6IGBhbnN3ZXItJHttZW1vcnlTZXNzaW9uSWR9YCxcbiAgICAgICAgbWVzc2FnZTogY29udGVudFRvQWRkLFxuICAgICAgICBkYXRlOiBuZXcgRGF0ZSgpLFxuICAgICAgICB1c2VyOiB7IGlkOiAnYXNzaXN0YW50JywgbmFtZTogJ0Fzc2lzdGFudCcgfSxcbiAgICAgICAgcm9sZTogQ2hhdEhpc3RvcnlSb2xlLkFTU0lTVEFOVCxcbiAgICAgICAgc291cmNlcyxcbiAgICAgICAgLi4uKGF0dGFjaG1lbnRzLmxlbmd0aCA+IDAgPyB7IGF0dGFjaG1lbnRzIH0gOiB7fSksXG4gICAgICAgIG1lbW9yeVNlc3Npb25JZCxcbiAgICAgICAgc3VnZ2VzdGlvbnM6IHN1Z2dlc3Rpb25zIHx8IFtdLFxuICAgICAgICAuLi4oY3JlYXRlQWdlbnRGb2xsb3dVcCA/IHsgY3JlYXRlQWdlbnRGb2xsb3dVcCB9IDoge30pLFxuICAgICAgfSlcblxuICAgICAgaWYgKGNyZWF0ZUFnZW50Rm9sbG93VXA/LmFnZW50SWQpIHtcbiAgICAgICAgZmV0Y2hBZ2VudERldGFpbChjcmVhdGVBZ2VudEZvbGxvd1VwLmFnZW50SWQpXG4gICAgICAgICAgLnRoZW4oY2hhdEFnZW50ID0+IHtcbiAgICAgICAgICAgIGRvY3VtZW50LmRpc3BhdGNoRXZlbnQoXG4gICAgICAgICAgICAgIG5ldyBDdXN0b21FdmVudCgnbWFpYS1tZXJnZS1jcmVhdGVkLWFnZW50LWludG8tbGlzdCcsIHtcbiAgICAgICAgICAgICAgICBkZXRhaWw6IHsgYWdlbnQ6IGNoYXRBZ2VudCB9LFxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKVxuICAgICAgICAgIH0pXG4gICAgICAgICAgLmNhdGNoKGVyciA9PiB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdbdXNlQ2hhdE1hbmFnZXJdIE5vIHNlIHB1ZG8gYcOxYWRpciBlbCBhZ2VudGUgcmVjacOpbiBjcmVhZG8gYWwgbGlzdGFkbycsIGVycilcbiAgICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICBpZiAoZWRpdEFnZW50Rm9sbG93VXA/LmFnZW50SWQpIHtcbiAgICAgICAgZmV0Y2hBZ2VudERldGFpbChlZGl0QWdlbnRGb2xsb3dVcC5hZ2VudElkKVxuICAgICAgICAgIC50aGVuKGNoYXRBZ2VudCA9PiB7XG4gICAgICAgICAgICBkb2N1bWVudC5kaXNwYXRjaEV2ZW50KFxuICAgICAgICAgICAgICBuZXcgQ3VzdG9tRXZlbnQoJ21haWEtc3luYy1lZGl0ZWQtYWdlbnQtZnJvbS1jaGF0Jywge1xuICAgICAgICAgICAgICAgIGRldGFpbDogeyBhZ2VudDogY2hhdEFnZW50IH0sXG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApXG4gICAgICAgICAgfSlcbiAgICAgICAgICAuY2F0Y2goZXJyID0+IHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1t1c2VDaGF0TWFuYWdlcl0gTm8gc2UgcHVkbyByZWZyZXNjYXIgZWwgYWdlbnRlIGVkaXRhZG8nLCBlcnIpXG4gICAgICAgICAgfSlcbiAgICAgIH1cblxuICAgICAgaXNQcm9jZXNzaW5nUmVmLmN1cnJlbnQgPSBmYWxzZVxuICAgICAgaWYgKGZpcnN0VGltZVJlZi5jdXJyZW50KSB7XG4gICAgICAgIGNvbnN0IGN1c3RvbUV2ZW50ID0gbmV3IEN1c3RvbUV2ZW50KCdyZWZldGNoLXNlc3Npb24nKVxuICAgICAgICBkb2N1bWVudC5kaXNwYXRjaEV2ZW50KGN1c3RvbUV2ZW50KVxuICAgICAgICBmaXJzdFRpbWVSZWYuY3VycmVudCA9IGZhbHNlXG4gICAgICB9XG4gICAgfSxcbiAgICBbYWRkTWVzc2FnZSwgcmVtb3ZlTWVzc2FnZSwgcHJvamVjdCwgZ2V0VGFiVGFza0RlZmF1bHQsIGV2ZW50LCBhZ2VudF1cbiAgKVxuXG4gIGNvbnN0IGhhbmRsZVN0cmVhbVN0b3AgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgY29uc3QgdGVtcE1lc3NhZ2VJZCA9IGBhbnN3ZXItJHtjdXJyZW50TWVzc2FnZUlkLmN1cnJlbnR9LXN0cmVhbWluZ2BcbiAgICBzdHJlYW1pbmdTdG9yZS5jbGVhcigpXG4gICAgc3RyZWFtaW5nUGxhY2Vob2xkZXJJZFJlZi5jdXJyZW50ID0gbnVsbFxuICAgIGFjdGl2ZVN0cmVhbUNoYXRJZFJlZi5jdXJyZW50ID0gbnVsbFxuICAgIHJlbW92ZU1lc3NhZ2UodGVtcE1lc3NhZ2VJZClcblxuICAgIGFkZE1lc3NhZ2Uoe1xuICAgICAgaWQ6IGBhbnN3ZXItJHtjdXJyZW50TWVzc2FnZUlkLmN1cnJlbnR9LWNhbmNlbGxlZGAsXG4gICAgICBtZXNzYWdlOiB0KCdjaGF0LmNhbmNlbGxlZCcpLFxuICAgICAgZGF0ZTogbmV3IERhdGUoKSxcbiAgICAgIHVzZXI6IHsgaWQ6ICdhc3Npc3RhbnQnLCBuYW1lOiAnQXNzaXN0YW50JyB9LFxuICAgICAgcm9sZTogQ2hhdEhpc3RvcnlSb2xlLkFTU0lTVEFOVCxcbiAgICAgIGlzRnJvbnRlbmRDYW5jZWxsZWQ6IHRydWUsXG4gICAgfSlcbiAgICBpc1Byb2Nlc3NpbmdSZWYuY3VycmVudCA9IGZhbHNlXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBjb25zdCBjdXN0b21FdmVudCA9IG5ldyBDdXN0b21FdmVudCgncmVmZXRjaC1zZXNzaW9uJylcbiAgICAgIGRvY3VtZW50LmRpc3BhdGNoRXZlbnQoY3VzdG9tRXZlbnQpXG4gICAgfSwgNTAwKVxuICB9LCBbYWRkTWVzc2FnZSwgcmVtb3ZlTWVzc2FnZSwgdF0pXG5cbiAgY29uc3QgaGFuZGxlQXBwcm92YWxSZXF1aXJlZCA9IHVzZUNhbGxiYWNrKFxuICAgIChhcHByb3ZhbDogQXBwcm92YWxSZXF1ZXN0LCBhY2N1bXVsYXRlZENvbnRlbnQ6IHN0cmluZykgPT4ge1xuICAgICAgY29uc3QgdGVtcE1lc3NhZ2VJZCA9IGBhbnN3ZXItJHtjdXJyZW50TWVzc2FnZUlkLmN1cnJlbnR9LXN0cmVhbWluZ2BcbiAgICAgIHN0cmVhbWluZ1N0b3JlLmNsZWFyKClcbiAgICAgIHN0cmVhbWluZ1BsYWNlaG9sZGVySWRSZWYuY3VycmVudCA9IG51bGxcbiAgICAgIGFjdGl2ZVN0cmVhbUNoYXRJZFJlZi5jdXJyZW50ID0gbnVsbFxuICAgICAgcmVtb3ZlTWVzc2FnZSh0ZW1wTWVzc2FnZUlkKVxuXG4gICAgICBpZiAoYXBwcm92YWwubWFudWFsX2FwcHJvdmFsX2RldGVjdGVkKSB7XG4gICAgICAgIGlzUHJvY2Vzc2luZ1JlZi5jdXJyZW50ID0gZmFsc2VcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIC8vIEFkZCBhIG1lc3NhZ2Ugd2l0aCB0aGUgYXBwcm92YWwgcmVxdWVzdFxuICAgICAgYWRkTWVzc2FnZSh7XG4gICAgICAgIGlkOiBgYXBwcm92YWwtJHthcHByb3ZhbC5vcmlnaW5hbF90aHJlYWRfaWR9YCxcbiAgICAgICAgbWVzc2FnZTogYWNjdW11bGF0ZWRDb250ZW50IHx8ICcnLFxuICAgICAgICBkYXRlOiBuZXcgRGF0ZSgpLFxuICAgICAgICB1c2VyOiB7IGlkOiAnYXNzaXN0YW50JywgbmFtZTogJ0Fzc2lzdGFudCcgfSxcbiAgICAgICAgcm9sZTogQ2hhdEhpc3RvcnlSb2xlLkFTU0lTVEFOVCxcbiAgICAgICAgYXBwcm92YWwsXG4gICAgICAgIGFwcHJvdmFsU3RhdHVzOiAncGVuZGluZycsXG4gICAgICB9KVxuICAgICAgaXNQcm9jZXNzaW5nUmVmLmN1cnJlbnQgPSBmYWxzZVxuICAgIH0sXG4gICAgW2FkZE1lc3NhZ2UsIHJlbW92ZU1lc3NhZ2VdXG4gIClcblxuICBjb25zdCB7XG4gICAgYXNrTWFpYSxcbiAgICBpc0xvYWRpbmc6IHdhaXRpbmdSZXNwb25zZSxcbiAgICBpc1dyaXRpbmcsXG4gICAgbG9hZGluZ01lc3NhZ2UsXG4gICAgc3RvcFN0cmVhbWluZyxcbiAgICBhYm9ydFN0cmVhbVNpbGVudGx5LFxuICB9ID0gdXNlT3JjaGVzdHJhdG9yU3RyZWFtKHtcbiAgICBvbkVycm9yOiBoYW5kbGVTdHJlYW1FcnJvcixcbiAgICBvblN0cmVhbVVwZGF0ZTogaGFuZGxlU3RyZWFtVXBkYXRlLFxuICAgIG9uRmluaXNoU3RyZWFtOiBoYW5kbGVTdHJlYW1GaW5pc2gsXG4gICAgb25TdG9wOiBoYW5kbGVTdHJlYW1TdG9wLFxuICAgIG9uQXBwcm92YWxSZXF1aXJlZDogaGFuZGxlQXBwcm92YWxSZXF1aXJlZCxcbiAgfSlcblxuICAvLyBNYW50ZW5lbW9zIGVsIHNldHRlciBtw6FzIHJlY2llbnRlIGVuIHVuYSByZWYgcGFyYSBxdWUgcHVlZGEgdXNhcnNlIGRlc2RlXG4gIC8vIGVmZWN0b3MgZGVmaW5pZG9zIGFudGVzIGVuIGVsIGFyY2hpdm8gKGNhbWJpbyBkZSBjaGF0LCByZXNldCwgZXRjLikuXG4gIGFib3J0U3RyZWFtU2lsZW50bHlSZWYuY3VycmVudCA9IGFib3J0U3RyZWFtU2lsZW50bHlcblxuICBjb25zdCBjdXJyZW50UHJvamVjdCA9IHByb2plY3RcblxuICBjb25zdCBzZW5kTWVzc2FnZSA9IHVzZUNhbGxiYWNrKFxuICAgIGFzeW5jIChcbiAgICAgIG1lc3NhZ2U6IHN0cmluZyxcbiAgICAgIGF0dGFjaG1lbnRzT3JPcHRpb25zPzogQXR0YWNobWVudEZpbGVbXSB8IFNlbmRNZXNzYWdlT3B0aW9ucyxcbiAgICAgIGZhcUlkPzogc3RyaW5nLFxuICAgICAgYWdlbnRTdWdnZXN0aW9uSWQ/OiBzdHJpbmdcbiAgICApID0+IHtcbiAgICAgIGlmIChpc1Byb2Nlc3NpbmdSZWYuY3VycmVudCB8fCB3YWl0aW5nUmVzcG9uc2UgfHwgbG9hZGluZ01lc3NhZ2VzKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBjb25zdCB7IGF0dGFjaG1lbnRzLCBvcHRpb25zIH0gPSBub3JtYWxpemVTZW5kTWVzc2FnZUFyZ3MoYXR0YWNobWVudHNPck9wdGlvbnMpXG5cbiAgICAgIGlzUHJvY2Vzc2luZ1JlZi5jdXJyZW50ID0gdHJ1ZVxuICAgICAgY29uc3QgbmV3TWVzc2FnZUlkID0gdXVpZHY0KClcbiAgICAgIGN1cnJlbnRNZXNzYWdlSWQuY3VycmVudCA9IG5ld01lc3NhZ2VJZFxuICAgICAgY3VycmVudFVzZXJRdWVzdGlvbi5jdXJyZW50ID0gbWVzc2FnZVxuXG4gICAgICBpZiAoIXJlcG9ydGVkRXZlbnQuY3VycmVudCkge1xuICAgICAgICBldmVudChFVkVOVFMucG1BaVR5cGVkVGV4dClcbiAgICAgICAgcmVwb3J0ZWRFdmVudC5jdXJyZW50ID0gdHJ1ZVxuICAgICAgfVxuXG4gICAgICAvLyBWZXJpZmljYXIgc2kgZWwgY29udGV4dG8gZ2xvYmFsIGVzdMOhIGRlc2FjdHVhbGl6YWRvXG4gICAgICBjb25zdCBsYXN0TWVzc2FnZVdpdGhQcm9qZWN0ID0gbWVzc2FnZXNSZWYuY3VycmVudC5maWx0ZXIobXNnID0+IG1zZy5wcm9qZWN0SWQpLmF0KC0xKVxuXG4gICAgICBjb25zdCBjdXJyZW50QWdlbnRGcm9tTWVzc2FnZXMgPSBtZXNzYWdlc1JlZi5jdXJyZW50Py5bbWVzc2FnZXNSZWYuY3VycmVudC5sZW5ndGggLSAxXT8uYWdlbnRJZFxuXG4gICAgICAvLyBObyBhZ3JlZ2FyIHByb2plY3RJZCBhbCBtZW5zYWplIGRlbCB1c3VhcmlvIC0gc2UgZGV0ZXJtaW5hcsOhIGRlc3B1w6lzXG4gICAgICBhZGRNZXNzYWdlKHtcbiAgICAgICAgaWQ6IGBxdWVzdGlvbi0ke2N1cnJlbnRNZXNzYWdlSWQuY3VycmVudH1gLFxuICAgICAgICBtZXNzYWdlLFxuICAgICAgICBkYXRlOiBuZXcgRGF0ZSgpLFxuICAgICAgICB1c2VyOiBjdXJyZW50VXNlcixcbiAgICAgICAgcm9sZTogQ2hhdEhpc3RvcnlSb2xlLlVTRVIsXG4gICAgICAgIHNvdXJjZXM6IGF0dGFjaG1lbnRzLFxuICAgICAgfSlcblxuICAgICAgY3VycmVudE1lc3NhZ2VJZC5jdXJyZW50ID0gdXVpZHY0KClcbiAgICAgIGxldCBmaW5hbE1lc3NhZ2UgPSBtZXNzYWdlXG5cbiAgICAgIGlmIChtZXNzYWdlID09PSB0KCdxYS5pdGVtcy5yZW50YWJpbGlkYWRfcHJveWVjdG8nKSkge1xuICAgICAgICBmaW5hbE1lc3NhZ2UgPSBgRkFROiAke3QoJ3FhLml0ZW1zLnJlbnRhYmlsaWRhZF9wcm95ZWN0bycpfSAtIFRpcG8gZGUgcmVudGFiaWxpZGFkOiAke1xuICAgICAgICAgIG9wdGlvbnMucHJvamVjdENoYW5nZWQ/LmluY29tZVR5cGUgfHwgcHJvamVjdD8uaW5jb21lVHlwZVxuICAgICAgICB9YFxuICAgICAgfVxuXG4gICAgICBjb25zdCBoaXN0b3J5ID0gbWVzc2FnZXNSZWYuY3VycmVudC5tYXAoaGlzdG9yeU1lc3NhZ2UgPT4gKHtcbiAgICAgICAgY29udGVudDogaGlzdG9yeU1lc3NhZ2UubWVzc2FnZSxcbiAgICAgICAgcm9sZTogaGlzdG9yeU1lc3NhZ2UudXNlci5pZCA9PT0gYXV0aFVzZXIuaWQudG9TdHJpbmcoKSA/IENoYXRIaXN0b3J5Um9sZS5VU0VSIDogQ2hhdEhpc3RvcnlSb2xlLkFTU0lTVEFOVCxcbiAgICAgIH0pKVxuXG4gICAgICAvLyBWZXJpZmljYXIgY29uc2lzdGVuY2lhIGVudHJlIGNvbnRleHRvIGdsb2JhbCB5IMO6bHRpbW8gbWVuc2FqZVxuICAgICAgY29uc3QgY29udGV4dFByb2plY3RJZCA9IHByb2plY3Q/LmlkXG4gICAgICBjb25zdCBsYXN0TWVzc2FnZVByb2plY3RJZCA9IGxhc3RNZXNzYWdlV2l0aFByb2plY3Q/LnByb2plY3RJZFxuXG4gICAgICBsZXQgcHJvamVjdFRvUmVxdWVzdDogbnVtYmVyIHwgbnVsbCA9IG51bGxcblxuICAgICAgLy8gU2kgaGF5IMO6bHRpbW8gbWVuc2FqZSBjb24gcHJvamVjdElkLCB1c2FybG8gKG3DoXMgY29uZmlhYmxlKVxuICAgICAgaWYgKGxhc3RNZXNzYWdlUHJvamVjdElkICE9IG51bGwpIHtcbiAgICAgICAgY29uc3QgcGFyc2VkID0gTnVtYmVyKGxhc3RNZXNzYWdlUHJvamVjdElkKVxuICAgICAgICBwcm9qZWN0VG9SZXF1ZXN0ID0gTnVtYmVyLmlzRmluaXRlKHBhcnNlZCkgPyBwYXJzZWQgOiBudWxsXG4gICAgICB9XG4gICAgICAvLyBTaSBubyBoYXkgw7psdGltbyBtZW5zYWplLCB1c2FyIGVsIGNvbnRleHRvIGdsb2JhbFxuICAgICAgZWxzZSBpZiAoY29udGV4dFByb2plY3RJZCAhPSBudWxsKSB7XG4gICAgICAgIHByb2plY3RUb1JlcXVlc3QgPSBjb250ZXh0UHJvamVjdElkXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHByb2plY3RzID0gYXdhaXQgZmV0Y2hQcm9qZWN0cyhbcHJvamVjdFRvUmVxdWVzdF0pXG5cbiAgICAgIGNvbnN0IHBheWxvYWRGYXFJZCA9IGZhcUlkID8/IG9wdGlvbnMuZmFxSWRcbiAgICAgIGNvbnN0IHBheWxvYWRBZ2VudFN1Z2dlc3Rpb25JZCA9IGFnZW50U3VnZ2VzdGlvbklkID8/IG9wdGlvbnMuYWdlbnRTdWdnZXN0aW9uSWRcblxuICAgICAgY29uc3QgcGF5bG9hZERhdGEgPSB7XG4gICAgICAgIG1lc3NhZ2U6IGZpbmFsTWVzc2FnZSxcbiAgICAgICAgaGlzdG9yeSxcbiAgICAgICAgcHJvamVjdElkOiBwcm9qZWN0VG9SZXF1ZXN0LFxuICAgICAgICBsYW5nOiBhdXRoVXNlci5sYW5nLFxuICAgICAgICB1c2VySWQ6IGF1dGhVc2VyLmlkLnRvU3RyaW5nKCksXG4gICAgICAgIGZpcnN0TmFtZTogYXV0aFVzZXIuZmlyc3ROYW1lLFxuICAgICAgICBsYXN0TmFtZTogYXV0aFVzZXIubGFzdE5hbWUsXG4gICAgICAgIGNvbXBhbnlJZDogYXV0aFVzZXIuY29tcGFueV9pZC50b1N0cmluZygpLFxuICAgICAgICBjaGF0SWQ6IGN1cnJlbnRDaGF0SWQuY3VycmVudCxcbiAgICAgICAgbWVzc2FnZUlkOiBjdXJyZW50TWVzc2FnZUlkLmN1cnJlbnQsXG4gICAgICAgIGFnZW50TmFtZTogYWdlbnQ/Lm5hbWUgfHwgJycsXG4gICAgICAgIGFnZW50SWQ6IGN1cnJlbnRBZ2VudEZyb21NZXNzYWdlcyB8fCBhZ2VudD8uaWQhLFxuICAgICAgICBpc1dlYlNlYXJjaEFjdGl2ZTogaXNXZWJTZWFyY2hBY3RpdmVSZWYuY3VycmVudCxcbiAgICAgICAgaXNEZWVwU2VhcmNoQWN0aXZlOiBpc0RlZXBTZWFyY2hBY3RpdmVSZWYuY3VycmVudCxcbiAgICAgICAgLi4uKGNsaWVudD8uaWRcbiAgICAgICAgICA/IHsgY2xpZW50SWQ6IGNsaWVudC5pZCwgLi4uKGNsaWVudC5uYW1lID8geyBjbGllbnROYW1lOiBjbGllbnQubmFtZSB9IDoge30pIH1cbiAgICAgICAgICA6IHByb2plY3Q/LmNsaWVudD8uaWRcbiAgICAgICAgICAgID8geyBjbGllbnRJZDogcHJvamVjdC5jbGllbnQuaWQsIC4uLihwcm9qZWN0LmNsaWVudC5uYW1lID8geyBjbGllbnROYW1lOiBwcm9qZWN0LmNsaWVudC5uYW1lIH0gOiB7fSkgfVxuICAgICAgICAgICAgOiB7fSksXG4gICAgICAgIC4uLihwcm9qZWN0cz8ubGVuZ3RoID8geyBwcm9qZWN0TmFtZTogcHJvamVjdHNbMF0ubmFtZSB9IDoge30pLFxuICAgICAgICAuLi4oYXR0YWNobWVudHMubGVuZ3RoID4gMCA/IHsgYXR0YWNobWVudHMgfSA6IHt9KSxcbiAgICAgICAgLi4uKHBheWxvYWRGYXFJZCA/IHsgZmFxSWQ6IHBheWxvYWRGYXFJZCB9IDoge30pLFxuICAgICAgICAuLi4ocGF5bG9hZEFnZW50U3VnZ2VzdGlvbklkID8geyBhZ2VudFN1Z2dlc3Rpb25JZDogcGF5bG9hZEFnZW50U3VnZ2VzdGlvbklkIH0gOiB7fSksXG4gICAgICAgIC4uLihhZ2VudD8uZW50aXR5ICE9IG51bGwgPyB7IGFnZW50RW50aXR5OiBhZ2VudC5lbnRpdHkgfSA6IHt9KSxcbiAgICAgIH1cblxuICAgICAgYXNrTWFpYShwYXlsb2FkRGF0YSlcbiAgICB9LFxuICAgIFtcbiAgICAgIGFkZE1lc3NhZ2UsXG4gICAgICBldmVudCxcbiAgICAgIGFza01haWEsXG4gICAgICBwcm9qZWN0LFxuICAgICAgY2xpZW50LFxuICAgICAgYXV0aFVzZXIsXG4gICAgICBhZ2VudCxcbiAgICAgIHQsXG4gICAgICB3YWl0aW5nUmVzcG9uc2UsXG4gICAgICBsb2FkaW5nTWVzc2FnZXMsXG4gICAgICBpc1dlYlNlYXJjaEFjdGl2ZSxcbiAgICAgIGlzRGVlcFNlYXJjaEFjdGl2ZSxcbiAgICBdXG4gIClcblxuICBjb25zdCBjaGFuZ2VQcm9qZWN0ID0gdXNlQ2FsbGJhY2soXG4gICAgKG9wdGlvbjogUHJvamVjdCkgPT4ge1xuICAgICAgaWYgKCFjdXJyZW50VXNlclF1ZXN0aW9uLmN1cnJlbnQpIHJldHVyblxuXG4gICAgICBpZiAob3B0aW9uLmlkICE9PSBwcm9qZWN0Py5pZCkge1xuICAgICAgICBzZXRQcm9qZWN0KG9wdGlvbilcbiAgICAgIH1cblxuICAgICAgaWYgKHByb2plY3QgJiYgY3VycmVudFVzZXJRdWVzdGlvbi5jdXJyZW50KSB7XG4gICAgICAgIGNvbnN0IGhpc3RvcnkgPSBtZXNzYWdlc1JlZi5jdXJyZW50Lm1hcChoaXN0b3J5TWVzc2FnZSA9PiAoe1xuICAgICAgICAgIGNvbnRlbnQ6IGhpc3RvcnlNZXNzYWdlLm1lc3NhZ2UsXG4gICAgICAgICAgcm9sZTogaGlzdG9yeU1lc3NhZ2UudXNlci5pZCA9PT0gYXV0aFVzZXIuaWQudG9TdHJpbmcoKSA/IENoYXRIaXN0b3J5Um9sZS5VU0VSIDogQ2hhdEhpc3RvcnlSb2xlLkFTU0lTVEFOVCxcbiAgICAgICAgfSkpXG5cbiAgICAgICAgYXNrTWFpYSh7XG4gICAgICAgICAgbWVzc2FnZTogY3VycmVudFVzZXJRdWVzdGlvbi5jdXJyZW50LFxuICAgICAgICAgIGhpc3RvcnksXG4gICAgICAgICAgcHJvamVjdElkOiBvcHRpb24uaWQsXG4gICAgICAgICAgbGFuZzogYXV0aFVzZXIubGFuZyxcbiAgICAgICAgICB1c2VySWQ6IGF1dGhVc2VyLmlkLnRvU3RyaW5nKCksXG4gICAgICAgICAgZmlyc3ROYW1lOiBhdXRoVXNlci5maXJzdE5hbWUsXG4gICAgICAgICAgbGFzdE5hbWU6IGF1dGhVc2VyLmxhc3ROYW1lLFxuICAgICAgICAgIGNvbXBhbnlJZDogYXV0aFVzZXIuY29tcGFueV9pZC50b1N0cmluZygpLFxuICAgICAgICAgIGNoYXRJZDogY3VycmVudENoYXRJZC5jdXJyZW50LFxuICAgICAgICAgIG1lc3NhZ2VJZDogY3VycmVudE1lc3NhZ2VJZC5jdXJyZW50LFxuICAgICAgICAgIGFnZW50TmFtZTogYWdlbnQ/Lm5hbWUgfHwgJycsXG4gICAgICAgICAgYWdlbnRJZDogYWdlbnQ/LmlkIHx8ICcnLFxuICAgICAgICAgIGlzV2ViU2VhcmNoQWN0aXZlOiBpc1dlYlNlYXJjaEFjdGl2ZVJlZi5jdXJyZW50LFxuICAgICAgICAgIGlzRGVlcFNlYXJjaEFjdGl2ZTogaXNEZWVwU2VhcmNoQWN0aXZlUmVmLmN1cnJlbnQsXG4gICAgICAgICAgLi4uKGFnZW50Py5lbnRpdHkgIT0gbnVsbCA/IHsgYWdlbnRFbnRpdHk6IGFnZW50LmVudGl0eSB9IDoge30pLFxuICAgICAgICB9KVxuICAgICAgfVxuICAgIH0sXG4gICAgW3Byb2plY3QsIHNldFByb2plY3QsIGFza01haWEsIGF1dGhVc2VyLCBpc1dlYlNlYXJjaEFjdGl2ZSwgYWdlbnRdXG4gIClcblxuICBjb25zdCBoYW5kbGVGZWVkYmFjayA9IHVzZUNhbGxiYWNrKGFzeW5jIChmZWVkYmFja1Byb3A6IEZlZWRiYWNrLCBjaGF0TWVzc2FnZUlkOiBzdHJpbmcpID0+IHtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IG1haWEuQ2hhdHMud2FzSGVscGZ1bENoYXQoY2hhdE1lc3NhZ2VJZCwgZmVlZGJhY2tQcm9wID09PSBGZWVkYmFjay5USFVNQlNfVVApXG4gICAgaWYgKHJlc3BvbnNlKSB7XG4gICAgICBtZXNzYWdlc1JlZi5jdXJyZW50ID0gbWVzc2FnZXNSZWYuY3VycmVudC5tYXAobWVzc2FnZSA9PiB7XG4gICAgICAgIGlmIChtZXNzYWdlLmlkID09PSBjaGF0TWVzc2FnZUlkICYmIG1lc3NhZ2Uucm9sZSA9PT0gJ2Fzc2lzdGFudCcpIHtcbiAgICAgICAgICByZXR1cm4geyAuLi5tZXNzYWdlLCB3YXNIZWxwZnVsOiBmZWVkYmFja1Byb3AgPT09IEZlZWRiYWNrLlRIVU1CU19VUCB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG1lc3NhZ2VcbiAgICAgIH0pXG4gICAgfVxuICB9LCBbXSlcblxuICBjb25zdCBoYW5kbGVBcHByb3ZhbERlY2lzaW9uID0gdXNlQ2FsbGJhY2soXG4gICAgYXN5bmMgKFxuICAgICAgdGhyZWFkSWRzOiBzdHJpbmdbXSxcbiAgICAgIGRlY2lzaW9uOiAnYXBwcm92ZScgfCAncmVqZWN0JyxcbiAgICAgIGVkaXRlZEFjdGlvbnM/OiBBcnJheTx7IHRvb2xfbmFtZTogc3RyaW5nOyBhcmdzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB9PlxuICAgICkgPT4ge1xuICAgICAgaWYgKCF0aHJlYWRJZHM/Lmxlbmd0aCkge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdObyB0aHJlYWRfaWRzIHByb3ZpZGVkIGZvciBhcHByb3ZhbCBkZWNpc2lvbicpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICAvLyBCdXNjYXIgZWwgbWVuc2FqZSBxdWUgY29udGllbmUgYWxndW5vIGRlIGVzdG9zIHRocmVhZElkcyBlbiBzdXMgcGVuZGluZ19hY3Rpb25zXG4gICAgICBjb25zdCBtZXNzYWdlV2l0aEFwcHJvdmFsID0gbWVzc2FnZXNSZWYuY3VycmVudC5maW5kKG0gPT5cbiAgICAgICAgbS5hcHByb3ZhbD8ucGVuZGluZ19hY3Rpb25zPy5zb21lKGFjdGlvbiA9PiB0aHJlYWRJZHMuaW5jbHVkZXMoYWN0aW9uLnRocmVhZF9pZCkpXG4gICAgICApXG5cbiAgICAgIGlmICghbWVzc2FnZVdpdGhBcHByb3ZhbCB8fCAhbWVzc2FnZVdpdGhBcHByb3ZhbC5hcHByb3ZhbCkge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdObyBzZSBlbmNvbnRyw7MgbWVuc2FqZSBjb24gYXBwcm92YWwgcGFyYSB0aHJlYWRfaWRzOicsIHRocmVhZElkcylcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHsgYXBwcm92YWwgfSA9IG1lc3NhZ2VXaXRoQXBwcm92YWxcbiAgICAgIGNvbnN0IG1lc3NhZ2VJZCA9IG1lc3NhZ2VXaXRoQXBwcm92YWwuaWRcbiAgICAgIC8vIFVzZSBmaXJzdCB0aHJlYWRJZCBhcyB0aGUgbG9hZGluZyBrZXlcbiAgICAgIGNvbnN0IGxvYWRpbmdLZXkgPSB0aHJlYWRJZHNbMF1cbiAgICAgIC8vIFVwZGF0ZSBtZXNzYWdlIHN0YXR1cyBpbW1lZGlhdGVseVxuICAgICAgbWVzc2FnZXNSZWYuY3VycmVudCA9IG1lc3NhZ2VzUmVmLmN1cnJlbnQubWFwKG1lc3NhZ2UgPT4ge1xuICAgICAgICBpZiAobWVzc2FnZS5pZCA9PT0gbWVzc2FnZUlkKSB7XG4gICAgICAgICAgY29uc3QgbmV3U3RhdHVzID0gZGVjaXNpb24gPT09ICdhcHByb3ZlJyA/ICdhcHByb3ZlZCcgOiAncmVqZWN0ZWQnXG4gICAgICAgICAgcmV0dXJuIHsgLi4ubWVzc2FnZSwgYXBwcm92YWxTdGF0dXM6IG5ld1N0YXR1cyB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG1lc3NhZ2VcbiAgICAgIH0pXG5cbiAgICAgIC8vIFRyaWdnZXIgcmUtcmVuZGVyXG4gICAgICBjb25zdCBleGlzdGluZ01lc3NhZ2UgPSBtZXNzYWdlc1JlZi5jdXJyZW50LmZpbmQobSA9PiBtLmlkID09PSBtZXNzYWdlSWQpXG4gICAgICBpZiAoZXhpc3RpbmdNZXNzYWdlKSB7XG4gICAgICAgIGNvbnN0IG5ld1N0YXR1cyA9IGRlY2lzaW9uID09PSAnYXBwcm92ZScgPyAnYXBwcm92ZWQnIDogJ3JlamVjdGVkJ1xuICAgICAgICBhZGRNZXNzYWdlKHsgLi4uZXhpc3RpbmdNZXNzYWdlLCBhcHByb3ZhbFN0YXR1czogbmV3U3RhdHVzIH0pXG4gICAgICB9XG5cbiAgICAgIC8vIENhbGwgY29udGludWUtdGhyZWFkIGVuZHBvaW50IHdpdGggQUxMIHRocmVhZF9pZHMgaW4gYSBzaW5nbGUgcmVxdWVzdFxuICAgICAgaXNQcm9jZXNzaW5nUmVmLmN1cnJlbnQgPSB0cnVlXG4gICAgICBjdXJyZW50TWVzc2FnZUlkLmN1cnJlbnQgPSB1dWlkdjQoKVxuXG4gICAgICAvLyBBZGQgbG9hZGluZ1xuICAgICAgc2V0QWN0aXZlTG9hZGluZ3MocHJldiA9PiAoe1xuICAgICAgICAuLi5wcmV2LFxuICAgICAgICBbbG9hZGluZ0tleV06IHQoJ2NoYXQucHJvY2Vzc2luZycpLFxuICAgICAgfSkpXG5cbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgbWFpYS5PcmNoZXN0cmF0b3IuY29udGludWVUaHJlYWQoe1xuICAgICAgICAgIHRocmVhZElkcywgLy8gU2VuZCBhbGwgYWN0aW9uIHRocmVhZF9pZHMgYXQgb25jZVxuICAgICAgICAgIHNlc3Npb25JZDogYXBwcm92YWwuc2Vzc2lvbl9pZCxcbiAgICAgICAgICBkZWNpc2lvbjogZWRpdGVkQWN0aW9ucyA/ICdlZGl0JyA6IGRlY2lzaW9uLFxuICAgICAgICAgIGVkaXRlZEFjdGlvbnMsXG4gICAgICAgICAgYWdlbnRJZDogYWdlbnQ/LmlkIHx8ICcnLFxuICAgICAgICAgIGxhbmc6IGF1dGhVc2VyLmxhbmcsXG4gICAgICAgIH0pXG5cbiAgICAgICAgaWYgKCFyZXNwb25zZS5vaykge1xuICAgICAgICAgIGhhbmRsZVN0cmVhbUVycm9yKClcbiAgICAgICAgICBzZXRBY3RpdmVMb2FkaW5ncyhwcmV2ID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG5ld0xvYWRpbmdzID0geyAuLi5wcmV2IH1cbiAgICAgICAgICAgIGRlbGV0ZSBuZXdMb2FkaW5nc1tsb2FkaW5nS2V5XVxuICAgICAgICAgICAgcmV0dXJuIG5ld0xvYWRpbmdzXG4gICAgICAgICAgfSlcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFByb2Nlc3MgU1NFIHN0cmVhbVxuICAgICAgICBhd2FpdCBwcm9jZXNzU1NFU3RyZWFtKHJlc3BvbnNlLCBsb2FkaW5nS2V5LCB7XG4gICAgICAgICAgb25Ub2tlbjogKGNvbnRlbnQ6IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgaGFuZGxlU3RyZWFtVXBkYXRlKGNvbnRlbnQsIG51bGwsICcnKVxuICAgICAgICAgIH0sXG4gICAgICAgICAgb25Ob2RlOiAobWVzc2FnZTogc3RyaW5nLCBjdXJyZW50VGhyZWFkSWQ6IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgY29uc3QgZGlzcGxheU1zZyA9XG4gICAgICAgICAgICAgIG1lc3NhZ2UuaW5jbHVkZXMoJ2NyZWF0ZV90YXNrJykgfHwgbWVzc2FnZS5pbmNsdWRlcygnY2xvbmVfdGFzaycpID8gbWVzc2FnZSA6IHQoJ2NoYXQuZXhlY3V0aW5nQWN0aW9uJylcbiAgICAgICAgICAgIHNldEFjdGl2ZUxvYWRpbmdzKHByZXYgPT4gKHtcbiAgICAgICAgICAgICAgLi4ucHJldixcbiAgICAgICAgICAgICAgW2N1cnJlbnRUaHJlYWRJZF06IGRpc3BsYXlNc2csXG4gICAgICAgICAgICB9KSlcbiAgICAgICAgICB9LFxuICAgICAgICAgIG9uQ29tcGxldGU6IChcbiAgICAgICAgICAgIGZpbmFsQ29udGVudDogc3RyaW5nLFxuICAgICAgICAgICAgc291cmNlczogYW55LFxuICAgICAgICAgICAgbWVtb3J5U2Vzc2lvbklkOiBzdHJpbmcsXG4gICAgICAgICAgICBjdXJyZW50VGhyZWFkSWQ6IHN0cmluZyxcbiAgICAgICAgICAgIGF0dGFjaG1lbnRzPzogYW55W10gfCBudWxsLFxuICAgICAgICAgICAgc3VnZ2VzdGlvbnM/OiBzdHJpbmdbXSB8IG51bGwsXG4gICAgICAgICAgICBhZ2VudElkPzogc3RyaW5nIHwgbnVsbFxuICAgICAgICAgICkgPT4ge1xuICAgICAgICAgICAgaGFuZGxlU3RyZWFtRmluaXNoKGZpbmFsQ29udGVudCwgc291cmNlcywgbWVtb3J5U2Vzc2lvbklkLCBhdHRhY2htZW50cywgc3VnZ2VzdGlvbnMsIGFnZW50SWQpXG4gICAgICAgICAgICBzZXRBY3RpdmVMb2FkaW5ncyhwcmV2ID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgbmV3TG9hZGluZ3MgPSB7IC4uLnByZXYgfVxuICAgICAgICAgICAgICBkZWxldGUgbmV3TG9hZGluZ3NbY3VycmVudFRocmVhZElkXVxuICAgICAgICAgICAgICByZXR1cm4gbmV3TG9hZGluZ3NcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfSxcbiAgICAgICAgICBvbkFwcHJvdmFsUmVxdWlyZWQ6IChhcHByb3ZhbFBheWxvYWQ6IGFueSwgYWNjdW11bGF0ZWRDb250ZW50OiBzdHJpbmcsIGN1cnJlbnRUaHJlYWRJZDogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICAvLyBOZXcgSElUTCBpbnRlcnJ1cHRpb24gZGV0ZWN0ZWQgYWZ0ZXIgcmVzdW1lIChjaGFpbmVkIGFjdGlvbnMpXG4gICAgICAgICAgICBzZXRBY3RpdmVMb2FkaW5ncyhwcmV2ID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgbmV3TG9hZGluZ3MgPSB7IC4uLnByZXYgfVxuICAgICAgICAgICAgICBkZWxldGUgbmV3TG9hZGluZ3NbY3VycmVudFRocmVhZElkXVxuICAgICAgICAgICAgICByZXR1cm4gbmV3TG9hZGluZ3NcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICBoYW5kbGVBcHByb3ZhbFJlcXVpcmVkKGFwcHJvdmFsUGF5bG9hZCBhcyBBcHByb3ZhbFJlcXVlc3QsIGFjY3VtdWxhdGVkQ29udGVudClcbiAgICAgICAgICB9LFxuICAgICAgICAgIG9uRXJyb3I6IChlcnJvcjogYW55LCBjdXJyZW50VGhyZWFkSWQ6IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcignU1NFIEVycm9yOicsIGVycm9yKVxuICAgICAgICAgICAgaGFuZGxlU3RyZWFtRXJyb3IoKVxuICAgICAgICAgICAgc2V0QWN0aXZlTG9hZGluZ3MocHJldiA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IG5ld0xvYWRpbmdzID0geyAuLi5wcmV2IH1cbiAgICAgICAgICAgICAgZGVsZXRlIG5ld0xvYWRpbmdzW2N1cnJlbnRUaHJlYWRJZF1cbiAgICAgICAgICAgICAgcmV0dXJuIG5ld0xvYWRpbmdzXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH0sXG4gICAgICAgIH0pXG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBoYW5kbGVTdHJlYW1FcnJvcigpXG4gICAgICAgIHNldEFjdGl2ZUxvYWRpbmdzKHByZXYgPT4ge1xuICAgICAgICAgIGNvbnN0IG5ld0xvYWRpbmdzID0geyAuLi5wcmV2IH1cbiAgICAgICAgICBkZWxldGUgbmV3TG9hZGluZ3NbbG9hZGluZ0tleV1cbiAgICAgICAgICByZXR1cm4gbmV3TG9hZGluZ3NcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9LFxuICAgIFthdXRoVXNlciwgYWdlbnQsIGFkZE1lc3NhZ2UsIGhhbmRsZVN0cmVhbUVycm9yLCBoYW5kbGVTdHJlYW1VcGRhdGUsIGhhbmRsZVN0cmVhbUZpbmlzaCwgaGFuZGxlQXBwcm92YWxSZXF1aXJlZF1cbiAgKVxuXG4gIGNvbnN0IGluaXRpYWxpemVDaGF0ID0gdXNlQ2FsbGJhY2soYXN5bmMgKCkgPT4ge1xuICAgIGlmICghZmlyc3RUaW1lUmVmLmN1cnJlbnQpIHtcbiAgICAgIGZpcnN0VGltZVJlZi5jdXJyZW50ID0gdHJ1ZVxuICAgIH1cbiAgICBpZiAoaW5pdGlhbENoYXRJZCkge1xuICAgICAgYXdhaXQgbG9hZE1lc3NhZ2VzKClcbiAgICB9IGVsc2UgaWYgKHVzZXJJbml0aWFsTWVzc2FnZSkge1xuICAgICAgY29uc3QgaGFzSW5pdGlhbE1lc3NhZ2UgPSBCb29sZWFuKHVzZXJJbml0aWFsTWVzc2FnZS5tZXNzYWdlPy50cmltKCkpXG4gICAgICBjb25zdCBoYXNJbml0aWFsQXR0YWNobWVudHMgPSBCb29sZWFuKHVzZXJJbml0aWFsTWVzc2FnZS5hdHRhY2htZW50cz8ubGVuZ3RoKVxuICAgICAgY29uc3QgaGFzSW5pdGlhbEZhcSA9IEJvb2xlYW4odXNlckluaXRpYWxNZXNzYWdlLmZhcUlkKVxuXG4gICAgICBpZiAoIWhhc0luaXRpYWxNZXNzYWdlICYmICFoYXNJbml0aWFsQXR0YWNobWVudHMgJiYgIWhhc0luaXRpYWxGYXEpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGhpc3RvcnkgPSBtZXNzYWdlc1JlZi5jdXJyZW50Lm1hcChoaXN0b3J5TWVzc2FnZSA9PiAoe1xuICAgICAgICBjb250ZW50OiBoaXN0b3J5TWVzc2FnZS5tZXNzYWdlLFxuICAgICAgICByb2xlOiBoaXN0b3J5TWVzc2FnZS51c2VyLmlkID09PSBhdXRoVXNlci5pZC50b1N0cmluZygpID8gQ2hhdEhpc3RvcnlSb2xlLlVTRVIgOiBDaGF0SGlzdG9yeVJvbGUuQVNTSVNUQU5ULFxuICAgICAgfSkpXG5cbiAgICAgIGFza01haWEoe1xuICAgICAgICBtZXNzYWdlOiB1c2VySW5pdGlhbE1lc3NhZ2UubWVzc2FnZSxcbiAgICAgICAgaGlzdG9yeSxcbiAgICAgICAgcHJvamVjdElkOiBwcm9qZWN0Py5pZCB8fCBudWxsLFxuICAgICAgICBsYW5nOiBhdXRoVXNlci5sYW5nLFxuICAgICAgICB1c2VySWQ6IGF1dGhVc2VyLmlkLnRvU3RyaW5nKCksXG4gICAgICAgIGZpcnN0TmFtZTogYXV0aFVzZXIuZmlyc3ROYW1lLFxuICAgICAgICBsYXN0TmFtZTogYXV0aFVzZXIubGFzdE5hbWUsXG4gICAgICAgIGNvbXBhbnlJZDogYXV0aFVzZXIuY29tcGFueV9pZC50b1N0cmluZygpLFxuICAgICAgICBjaGF0SWQ6IGN1cnJlbnRDaGF0SWQuY3VycmVudCxcbiAgICAgICAgbWVzc2FnZUlkOiBjdXJyZW50TWVzc2FnZUlkLmN1cnJlbnQsXG4gICAgICAgIGFnZW50TmFtZTogYWdlbnQ/Lm5hbWUhLFxuICAgICAgICBhZ2VudElkOiBhZ2VudD8uaWQhLFxuICAgICAgICBpc1dlYlNlYXJjaEFjdGl2ZTogaXNXZWJTZWFyY2hBY3RpdmVSZWYuY3VycmVudCxcbiAgICAgICAgaXNEZWVwU2VhcmNoQWN0aXZlOiBpc0RlZXBTZWFyY2hBY3RpdmVSZWYuY3VycmVudCxcbiAgICAgICAgLi4uKGNsaWVudD8uaWQgPyB7IGNsaWVudElkOiBjbGllbnQuaWQgfSA6IHByb2plY3Q/LmNsaWVudD8uaWQgPyB7IGNsaWVudElkOiBwcm9qZWN0LmNsaWVudC5pZCB9IDoge30pLFxuICAgICAgICAuLi4ocHJvamVjdD8ubmFtZSA/IHsgcHJvamVjdE5hbWU6IHByb2plY3QubmFtZSB9IDoge30pLFxuICAgICAgICAuLi4ocHJvamVjdD8uY2xpZW50Py5uYW1lXG4gICAgICAgICAgPyB7IGNsaWVudE5hbWU6IHByb2plY3QuY2xpZW50Lm5hbWUgfVxuICAgICAgICAgIDogY2xpZW50Py5uYW1lXG4gICAgICAgICAgICA/IHsgY2xpZW50TmFtZTogY2xpZW50Lm5hbWUgfVxuICAgICAgICAgICAgOiB7fSksXG4gICAgICAgIC4uLih1c2VySW5pdGlhbE1lc3NhZ2UuYXR0YWNobWVudHMgPyB7IGF0dGFjaG1lbnRzOiB1c2VySW5pdGlhbE1lc3NhZ2UuYXR0YWNobWVudHMgfSA6IHt9KSxcbiAgICAgICAgLi4uKHVzZXJJbml0aWFsTWVzc2FnZS5mYXFJZCA/IHsgZmFxSWQ6IHVzZXJJbml0aWFsTWVzc2FnZS5mYXFJZCB9IDoge30pLFxuICAgICAgICAuLi4odXNlckluaXRpYWxNZXNzYWdlLmFnZW50U3VnZ2VzdGlvbklkID8geyBhZ2VudFN1Z2dlc3Rpb25JZDogdXNlckluaXRpYWxNZXNzYWdlLmFnZW50U3VnZ2VzdGlvbklkIH0gOiB7fSksXG4gICAgICAgIC4uLihhZ2VudD8uZW50aXR5ICE9IG51bGwgPyB7IGFnZW50RW50aXR5OiBhZ2VudC5lbnRpdHkgfSA6IHt9KSxcbiAgICAgIH0pXG4gICAgfVxuICB9LCBbXG4gICAgaW5pdGlhbENoYXRJZCxcbiAgICB1c2VySW5pdGlhbE1lc3NhZ2UsXG4gICAgcHJvamVjdCxcbiAgICBjbGllbnQsXG4gICAgYXV0aFVzZXIsXG4gICAgYWdlbnQsXG4gICAgYXNrTWFpYSxcbiAgICBpc1dlYlNlYXJjaEFjdGl2ZSxcbiAgICBpc0RlZXBTZWFyY2hBY3RpdmUsXG4gIF0pXG5cbiAgY29uc3QgcmVzZXRDaGF0ID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGFib3J0U3RyZWFtU2lsZW50bHlSZWYuY3VycmVudCgpXG4gICAgY3VycmVudE1lc3NhZ2VJZC5jdXJyZW50ID0gdXVpZHY0KClcbiAgICBjdXJyZW50VXNlclF1ZXN0aW9uLmN1cnJlbnQgPSBudWxsXG4gICAgY3VycmVudENoYXRJZC5jdXJyZW50ID0gdXVpZHY0KClcbiAgICByZXBvcnRlZEV2ZW50LmN1cnJlbnQgPSBmYWxzZVxuICAgIHN0cmVhbWluZ1BsYWNlaG9sZGVySWRSZWYuY3VycmVudCA9IG51bGxcbiAgICBhY3RpdmVTdHJlYW1DaGF0SWRSZWYuY3VycmVudCA9IG51bGxcbiAgICBzdHJlYW1pbmdTdG9yZS5jbGVhcigpXG4gIH0sIFtdKVxuXG4gIGNvbnN0IHN0b3BHZW5lcmF0aW9uID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIHN0b3BTdHJlYW1pbmcoKVxuICAgIGlzUHJvY2Vzc2luZ1JlZi5jdXJyZW50ID0gZmFsc2VcbiAgfSwgW3N0b3BTdHJlYW1pbmddKVxuXG4gIHJldHVybiB7XG4gICAgbWVzc2FnZXMsXG4gICAgbG9hZGluZ01lc3NhZ2VzLFxuICAgIGlzTG9hZGluZ01vcmVNZXNzYWdlcyxcbiAgICB3YWl0aW5nUmVzcG9uc2UsXG4gICAgaXNXcml0aW5nLFxuICAgIGxvYWRpbmdNZXNzYWdlLFxuICAgIGFjdGl2ZUxvYWRpbmdzLFxuICAgIGN1cnJlbnRQcm9qZWN0LFxuICAgIGN1cnJlbnRDaGF0SWQ6IGN1cnJlbnRDaGF0SWQuY3VycmVudCxcbiAgICBjdXJyZW50TWVzc2FnZUlkOiBjdXJyZW50TWVzc2FnZUlkLmN1cnJlbnQsXG5cbiAgICBzZW5kTWVzc2FnZSxcbiAgICBjaGFuZ2VQcm9qZWN0LFxuICAgIGhhbmRsZUZlZWRiYWNrLFxuICAgIGhhbmRsZUFwcHJvdmFsRGVjaXNpb24sXG4gICAgaGFuZGxlU2Nyb2xsLFxuICAgIGluaXRpYWxpemVDaGF0LFxuICAgIHJlc2V0Q2hhdCxcbiAgICBzdG9wR2VuZXJhdGlvbixcblxuICAgIGlzRGlzYWJsZWQ6IHdhaXRpbmdSZXNwb25zZSB8fCBsb2FkaW5nTWVzc2FnZXMsXG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVNBLFdBQVcsRUFBRUMs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
|