@projectcor/maia-components 2.11.108 → 2.11.109-1
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/ApprovalBox/ApprovalBox.js +8 -2
- package/lib/components/atoms/MAIAInput/MAIAInput.js +73 -14
- package/lib/components/atoms/ReasoningBlock/ReasoningBlock.js +121 -0
- package/lib/components/atoms/ReasoningBlock/ReasoningBlock.styles.js +55 -0
- package/lib/components/atoms/ReasoningBlock/index.js +2 -0
- package/lib/components/molecules/ChatAIMessages/ChatAIMessages.js +210 -65
- package/lib/components/molecules/ChatAIMessages/newStyles.js +33 -18
- package/lib/context/global-context.js +1 -1
- package/lib/hooks/useChatManager/useChatManager.js +63 -50
- package/lib/hooks/useOrchestratorStream/useOrchestratorStream.interface.js +1 -1
- package/lib/hooks/useOrchestratorStream/useOrchestratorStream.js +4 -3
- package/lib/hooks/useProjectSummaryConfig.js +36 -17
- package/lib/hooks/useReasoningTrace/index.js +3 -0
- package/lib/hooks/useReasoningTrace/reasoningStore.js +142 -0
- package/lib/hooks/useReasoningTrace/useReasoningTrace.js +14 -0
- package/lib/lang/br/index.js +235 -31
- package/lib/lang/en/index.js +235 -31
- package/lib/lang/es/index.js +235 -31
- package/lib/lang/fr/index.js +235 -31
- package/lib/services/maia/Orchestrator/orchestrator.js +9 -7
- package/lib/services/utils/mapChatMessages.js +21 -18
- package/lib/store/sessions/sessionStreamManager.js +90 -50
- package/lib/store/sessions/sessions.types.js +1 -1
- package/lib/types/Chat.js +1 -1
- package/lib/types/reasoning.js +2 -0
- package/lib/utils/autoApproveStorage.js +26 -0
- package/lib/utils/hitlAnalytics.js +1 -35
- package/lib/utils/reasoningMappers.js +62 -0
- package/lib/utils/streamActivityMessages.js +106 -41
- package/package.json +1 -1
|
@@ -35,12 +35,13 @@ import { useSmoothStreamText } from '../../../hooks/useSmoothStreamText';
|
|
|
35
35
|
import { useStreamingMessage } from '../../../hooks/useStreamingMessage';
|
|
36
36
|
import { LoadingText } from '../../atoms/LoadingText';
|
|
37
37
|
import { AgentActivityIndicator } from '../../atoms/AgentActivityIndicator';
|
|
38
|
+
import { ReasoningBlock } from '../../atoms/ReasoningBlock';
|
|
38
39
|
import { isStreamingPlaceholderMessageId, resolveStreamLoadingDisplay } from '../../../utils/streamActivityMessages';
|
|
39
40
|
import { Loader } from '../../atoms/Loader';
|
|
40
41
|
import { Fade } from '../../atoms/Fade';
|
|
41
42
|
import { MessageFromUser, MessageFromOther, MessageContentFromUser, MessageContentFromOther } from './styles';
|
|
42
43
|
import { MessageFeedback } from '../MessageFeedback';
|
|
43
|
-
import { SCCAIMessageWrapper, ScrollToBottomButton, SCMessagesOuter, SCMessagesScroll, SCMessagesInner,
|
|
44
|
+
import { SCCAIMessageWrapper, ScrollToBottomButton, SCMessagesOuter, SCMessagesScroll, SCMessagesInner, SCTurnSpacer, SCOptionsList, SCOptionItem, SCMessageItemWrapper, SCMessageItemInner, SCAttachmentsRow, SCApprovalActionsColumn, SCLoadingMessagesColumn, SCMessagesGradientTop, SCMessagesGradientBottom } from './newStyles';
|
|
44
45
|
import { Feedback } from '../MessageFeedback/MessageFeedback';
|
|
45
46
|
import { useGlobalContext } from '../../../context/global-context';
|
|
46
47
|
import { EntityLinkCustomLink, getEntityLinkWrapperClassName } from '../../../utils/entityLinkRender';
|
|
@@ -49,6 +50,14 @@ import { ChatAICreateAgentActions } from './ChatAICreateAgentActions';
|
|
|
49
50
|
import { EVENTS, useEvent } from '../../../hooks/useEvent';
|
|
50
51
|
import { downloadFileFromUrl } from '../../../utils/fileDownloadHelper';
|
|
51
52
|
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
53
|
+
/**
|
|
54
|
+
* Al anclar el turno, la pregunta no se pega al borde superior: dejamos asomar
|
|
55
|
+
* la cola del mensaje anterior para no perder el hilo de la conversación.
|
|
56
|
+
* Relativo al viewport porque un valor fijo se come demasiado en pantallas cortas.
|
|
57
|
+
*/
|
|
58
|
+
var turnAnchorOffset = function turnAnchorOffset(viewportHeight) {
|
|
59
|
+
return Math.min(viewportHeight * 0.18, 200);
|
|
60
|
+
};
|
|
52
61
|
var MessageWrapper = function MessageWrapper(_ref) {
|
|
53
62
|
var isCurrentUser = _ref.isCurrentUser,
|
|
54
63
|
children = _ref.children,
|
|
@@ -175,7 +184,7 @@ var StreamingMessageBody = /*#__PURE__*/memo(function (props) {
|
|
|
175
184
|
});
|
|
176
185
|
});
|
|
177
186
|
var MessageItem = /*#__PURE__*/memo(function (props) {
|
|
178
|
-
var _props$projectMetadat;
|
|
187
|
+
var _props$reasoning, _props$projectMetadat;
|
|
179
188
|
var id = props.id,
|
|
180
189
|
user = props.user,
|
|
181
190
|
message = props.message,
|
|
@@ -197,22 +206,18 @@ var MessageItem = /*#__PURE__*/memo(function (props) {
|
|
|
197
206
|
suggestions = props.suggestions,
|
|
198
207
|
createAgentFollowUp = props.createAgentFollowUp,
|
|
199
208
|
hasSelectedSuggestion = props.hasSelectedSuggestion,
|
|
200
|
-
isLastMessage = props.isLastMessage
|
|
209
|
+
isLastMessage = props.isLastMessage,
|
|
210
|
+
streamActivity = props.streamActivity;
|
|
201
211
|
var _useState3 = useState(null),
|
|
202
212
|
_useState4 = _slicedToArray(_useState3, 2),
|
|
203
213
|
previewAttachment = _useState4[0],
|
|
204
214
|
setPreviewAttachment = _useState4[1];
|
|
205
215
|
var isCurrentUser = role === ChatHistoryRole.USER || user.id === authUser.id.toString();
|
|
206
216
|
var isAssistant = role === ChatHistoryRole.ASSISTANT || user.id === 'assistant';
|
|
207
|
-
// Mientras el agente "piensa" (streaming sin texto) no montamos el MessageItem:
|
|
208
|
-
// un placeholder vacío sumaría otro gap de 36px encima del indicador de actividad.
|
|
209
217
|
var isStreamingPlaceholder = isStreamingPlaceholderMessageId(id);
|
|
210
218
|
var streamingText = useStreamingMessage(isStreaming || isStreamingPlaceholder ? id : null);
|
|
211
219
|
var isActiveStreaming = !!isStreaming || isStreamingPlaceholder;
|
|
212
|
-
var
|
|
213
|
-
if (isThinking) {
|
|
214
|
-
return null;
|
|
215
|
-
}
|
|
220
|
+
var hasStreamText = Boolean(streamingText);
|
|
216
221
|
var messageAttachments = attachments && attachments.length > 0 ? attachments : !isAssistant && Array.isArray(sources) ? sources : [];
|
|
217
222
|
var handleAttachmentClick = function handleAttachmentClick(attachment) {
|
|
218
223
|
// Permitir previsualización si tiene archivo local o URLs del backend
|
|
@@ -310,8 +315,12 @@ var MessageItem = /*#__PURE__*/memo(function (props) {
|
|
|
310
315
|
};
|
|
311
316
|
return /*#__PURE__*/_jsxs(SCMessageItemWrapper, {
|
|
312
317
|
$isAssistant: isAssistant,
|
|
318
|
+
"data-message-id": id,
|
|
313
319
|
children: [/*#__PURE__*/_jsxs(SCMessageItemInner, {
|
|
314
|
-
children: [
|
|
320
|
+
children: [isAssistant && !isActiveStreaming && /*#__PURE__*/_jsx(ReasoningBlock, {
|
|
321
|
+
messageId: id,
|
|
322
|
+
trace: (_props$reasoning = props.reasoning) !== null && _props$reasoning !== void 0 ? _props$reasoning : null
|
|
323
|
+
}), !!messageAttachments.length && /*#__PURE__*/_jsx(SCAttachmentsRow, {
|
|
315
324
|
$isAssistant: isAssistant,
|
|
316
325
|
children: messageAttachments.map(function (attachment, index) {
|
|
317
326
|
var _attachment$type, _attachment$name;
|
|
@@ -337,9 +346,9 @@ var MessageItem = /*#__PURE__*/memo(function (props) {
|
|
|
337
346
|
}
|
|
338
347
|
}, "".concat(attachment.id, "-").concat(attachment.name));
|
|
339
348
|
})
|
|
340
|
-
}), (!!message || isActiveStreaming) && !(isAssistant && !!messageAttachments.length) && /*#__PURE__*/_jsx(StreamingMessageBody, {
|
|
349
|
+
}), (!!message || isActiveStreaming && hasStreamText) && !(isAssistant && !!messageAttachments.length) && /*#__PURE__*/_jsx(StreamingMessageBody, {
|
|
341
350
|
message: message !== null && message !== void 0 ? message : '',
|
|
342
|
-
isStreaming: isActiveStreaming,
|
|
351
|
+
isStreaming: isActiveStreaming && hasStreamText,
|
|
343
352
|
isCurrentUser: isCurrentUser,
|
|
344
353
|
isAssistant: isAssistant,
|
|
345
354
|
isFrontendCancelled: props.isFrontendCancelled,
|
|
@@ -354,6 +363,8 @@ var MessageItem = /*#__PURE__*/memo(function (props) {
|
|
|
354
363
|
suggestionsDisabled: isActiveStreaming || !!hasSelectedSuggestion,
|
|
355
364
|
messageId: id,
|
|
356
365
|
isLastMessage: isLastMessage
|
|
366
|
+
}), isAssistant && isActiveStreaming && streamActivity && /*#__PURE__*/_jsx(AgentActivityIndicator, {
|
|
367
|
+
activity: streamActivity
|
|
357
368
|
}), approval && approval.pending_actions && /*#__PURE__*/_jsx(SCApprovalActionsColumn, {
|
|
358
369
|
children: /*#__PURE__*/_jsx(ApprovalBox, {
|
|
359
370
|
actions: approval.pending_actions,
|
|
@@ -402,17 +413,35 @@ var ChatAIMessagesInner = function ChatAIMessagesInner(_ref5) {
|
|
|
402
413
|
var scrollThresholdRef = useRef(39);
|
|
403
414
|
var lastScrollTopRef = useRef(0);
|
|
404
415
|
var showScrollToBottomRef = useRef(false);
|
|
416
|
+
var showTopGradientRef = useRef(false);
|
|
417
|
+
var showBottomGradientRef = useRef(false);
|
|
405
418
|
var scrollRafRef = useRef(null);
|
|
419
|
+
/**
|
|
420
|
+
* Turno con el scroll bajo control del usuario: desde que envía el mensaje y
|
|
421
|
+
* hasta el próximo envío no movemos el scroll por ningún motivo. Es
|
|
422
|
+
* independiente de la altura del spacer, que puede llegar a 0 sin desanclar.
|
|
423
|
+
*/
|
|
424
|
+
var anchoredTurnIdRef = useRef(null);
|
|
425
|
+
var spacerElRef = useRef(null);
|
|
426
|
+
var spacerHeightRef = useRef(0);
|
|
406
427
|
var wasLoadingMessagesRef = useRef(false);
|
|
407
428
|
var lastScrolledSessionRef = useRef(null);
|
|
408
429
|
var _useState5 = useState(false),
|
|
409
430
|
_useState6 = _slicedToArray(_useState5, 2),
|
|
410
431
|
showScrollToBottom = _useState6[0],
|
|
411
432
|
setShowScrollToBottom = _useState6[1];
|
|
412
|
-
var _useState7 = useState(
|
|
433
|
+
var _useState7 = useState(false),
|
|
413
434
|
_useState8 = _slicedToArray(_useState7, 2),
|
|
414
|
-
|
|
415
|
-
|
|
435
|
+
showTopGradient = _useState8[0],
|
|
436
|
+
setShowTopGradient = _useState8[1];
|
|
437
|
+
var _useState9 = useState(false),
|
|
438
|
+
_useState0 = _slicedToArray(_useState9, 2),
|
|
439
|
+
showBottomGradient = _useState0[0],
|
|
440
|
+
setShowBottomGradient = _useState0[1];
|
|
441
|
+
var _useState1 = useState({}),
|
|
442
|
+
_useState10 = _slicedToArray(_useState1, 2),
|
|
443
|
+
selectedSuggestionMessageIds = _useState10[0],
|
|
444
|
+
setSelectedSuggestionMessageIds = _useState10[1];
|
|
416
445
|
var _useChatManager = useChatManager({
|
|
417
446
|
chatId: initialChatId || undefined,
|
|
418
447
|
userInitialMessage: userInitialMessage,
|
|
@@ -466,22 +495,34 @@ var ChatAIMessagesInner = function ChatAIMessagesInner(_ref5) {
|
|
|
466
495
|
}, [sendMessage, selectedSuggestionMessageIds, event, agent === null || agent === void 0 ? void 0 : agent.entity, agent === null || agent === void 0 ? void 0 : agent.name, agent === null || agent === void 0 ? void 0 : agent.type, messages, t, authUser.id]);
|
|
467
496
|
|
|
468
497
|
/**
|
|
469
|
-
*
|
|
470
|
-
*
|
|
471
|
-
*
|
|
498
|
+
* Recalcula el botón "scroll to bottom" y los gradientes de borde a partir de
|
|
499
|
+
* la posición del scroll. Los refs evitan `setState` cuando el valor no cambia:
|
|
500
|
+
* esto corre en cada frame del stream.
|
|
472
501
|
*/
|
|
473
|
-
var
|
|
502
|
+
var updateScrollAffordances = useCallback(function () {
|
|
474
503
|
var el = messagesRef.current;
|
|
475
504
|
if (!el) return;
|
|
476
505
|
var scrollTop = el.scrollTop,
|
|
477
506
|
scrollHeight = el.scrollHeight,
|
|
478
507
|
clientHeight = el.clientHeight;
|
|
479
|
-
|
|
508
|
+
// El spacer del turno es alto reservado, no contenido: si no lo descontamos
|
|
509
|
+
// la flecha y el gradiente de abajo quedan encendidos durante todo el turno.
|
|
510
|
+
var distanceFromBottom = scrollHeight - spacerHeightRef.current - scrollTop - clientHeight;
|
|
480
511
|
var shouldShow = distanceFromBottom > 50;
|
|
481
512
|
if (showScrollToBottomRef.current !== shouldShow) {
|
|
482
513
|
showScrollToBottomRef.current = shouldShow;
|
|
483
514
|
setShowScrollToBottom(shouldShow);
|
|
484
515
|
}
|
|
516
|
+
var nextTopGradient = scrollTop > 1;
|
|
517
|
+
if (showTopGradientRef.current !== nextTopGradient) {
|
|
518
|
+
showTopGradientRef.current = nextTopGradient;
|
|
519
|
+
setShowTopGradient(nextTopGradient);
|
|
520
|
+
}
|
|
521
|
+
var nextBottomGradient = distanceFromBottom > 1;
|
|
522
|
+
if (showBottomGradientRef.current !== nextBottomGradient) {
|
|
523
|
+
showBottomGradientRef.current = nextBottomGradient;
|
|
524
|
+
setShowBottomGradient(nextBottomGradient);
|
|
525
|
+
}
|
|
485
526
|
}, []);
|
|
486
527
|
|
|
487
528
|
/**
|
|
@@ -501,33 +542,91 @@ var ChatAIMessagesInner = function ChatAIMessagesInner(_ref5) {
|
|
|
501
542
|
if (!el) return;
|
|
502
543
|
if (skipIfUserScrolling && userScrollingRef.current) return;
|
|
503
544
|
el.scrollTop = el.scrollHeight;
|
|
504
|
-
|
|
545
|
+
updateScrollAffordances();
|
|
505
546
|
});
|
|
506
547
|
};
|
|
507
548
|
if (delayMs > 0) setTimeout(run, delayMs);else run();
|
|
508
|
-
}, [
|
|
549
|
+
}, [updateScrollAffordances]);
|
|
550
|
+
var setSpacerHeight = useCallback(function (next) {
|
|
551
|
+
if (Math.abs(spacerHeightRef.current - next) < 1) return;
|
|
552
|
+
spacerHeightRef.current = next;
|
|
553
|
+
if (spacerElRef.current) {
|
|
554
|
+
spacerElRef.current.style.height = "".concat(next, "px");
|
|
555
|
+
}
|
|
556
|
+
}, []);
|
|
557
|
+
var clearTurnSpace = useCallback(function () {
|
|
558
|
+
anchoredTurnIdRef.current = null;
|
|
559
|
+
setSpacerHeight(0);
|
|
560
|
+
}, [setSpacerHeight]);
|
|
561
|
+
var measureTurn = useCallback(function (questionId) {
|
|
562
|
+
var el = messagesRef.current;
|
|
563
|
+
var spacerEl = spacerElRef.current;
|
|
564
|
+
if (!el || !spacerEl) return null;
|
|
565
|
+
var questionEl = el.querySelector("[data-message-id=\"".concat(questionId, "\"]"));
|
|
566
|
+
if (!questionEl) return null;
|
|
567
|
+
var containerTop = el.getBoundingClientRect().top;
|
|
568
|
+
var questionTop = questionEl.getBoundingClientRect().top - containerTop + el.scrollTop;
|
|
569
|
+
var contentBottom = spacerEl.getBoundingClientRect().top - containerTop + el.scrollTop;
|
|
570
|
+
return {
|
|
571
|
+
el: el,
|
|
572
|
+
questionTop: questionTop,
|
|
573
|
+
turnHeight: contentBottom - questionTop
|
|
574
|
+
};
|
|
575
|
+
}, []);
|
|
576
|
+
var reserveTurnSpace = useCallback(function (questionId) {
|
|
577
|
+
var measured = measureTurn(questionId);
|
|
578
|
+
if (!measured) return;
|
|
579
|
+
var el = measured.el,
|
|
580
|
+
questionTop = measured.questionTop,
|
|
581
|
+
turnHeight = measured.turnHeight;
|
|
582
|
+
|
|
583
|
+
// Anclamos siempre, incluso cuando no haga falta reservar: durante el
|
|
584
|
+
// turno el scroll no se mueve solo en ningún caso.
|
|
585
|
+
anchoredTurnIdRef.current = questionId;
|
|
586
|
+
var offset = turnAnchorOffset(el.clientHeight);
|
|
587
|
+
var targetScrollTop = Math.max(0, questionTop - offset);
|
|
588
|
+
// Chat recién iniciado o conversación que aún entra en pantalla: la
|
|
589
|
+
// pregunta ya está arriba, no hay nada que subir ni que reservar.
|
|
590
|
+
if (targetScrollTop <= el.scrollTop) {
|
|
591
|
+
setSpacerHeight(0);
|
|
592
|
+
updateScrollAffordances();
|
|
593
|
+
return;
|
|
594
|
+
}
|
|
595
|
+
|
|
596
|
+
// Reservamos lo mínimo para que `targetScrollTop` sea alcanzable.
|
|
597
|
+
setSpacerHeight(Math.max(0, el.clientHeight - turnHeight - offset));
|
|
598
|
+
el.scrollTop = targetScrollTop;
|
|
599
|
+
updateScrollAffordances();
|
|
600
|
+
}, [measureTurn, setSpacerHeight, updateScrollAffordances]);
|
|
601
|
+
|
|
602
|
+
/**
|
|
603
|
+
* Encoge el spacer a medida que crece la respuesta: el alto total del scroll
|
|
604
|
+
* queda constante y la vista no se mueve sola. Solo achica, nunca agranda,
|
|
605
|
+
* para no inyectar espacio en turnos que arrancaron sin reserva.
|
|
606
|
+
* Devuelve si el turno sigue anclado (aunque el spacer ya sea 0).
|
|
607
|
+
*/
|
|
608
|
+
var syncTurnSpace = useCallback(function () {
|
|
609
|
+
if (!anchoredTurnIdRef.current) return false;
|
|
610
|
+
if (spacerHeightRef.current > 0) {
|
|
611
|
+
var measured = measureTurn(anchoredTurnIdRef.current);
|
|
612
|
+
if (measured) {
|
|
613
|
+
var offset = turnAnchorOffset(measured.el.clientHeight);
|
|
614
|
+
var reserved = Math.max(0, measured.el.clientHeight - measured.turnHeight - offset);
|
|
615
|
+
setSpacerHeight(Math.min(spacerHeightRef.current, reserved));
|
|
616
|
+
}
|
|
617
|
+
}
|
|
618
|
+
return true;
|
|
619
|
+
}, [measureTurn, setSpacerHeight]);
|
|
509
620
|
var handleClickScrollToBottom = useCallback(function () {
|
|
510
621
|
if (!messagesRef.current) return;
|
|
622
|
+
clearTurnSpace();
|
|
511
623
|
messagesRef.current.scrollTo({
|
|
512
624
|
top: messagesRef.current.scrollHeight,
|
|
513
625
|
behavior: 'smooth'
|
|
514
626
|
});
|
|
515
627
|
// Dar tiempo al smooth-scroll antes de recalcular la visibilidad del botón.
|
|
516
|
-
setTimeout(
|
|
517
|
-
}, [
|
|
518
|
-
|
|
519
|
-
// Al decidir en el ApprovalBox: el box colapsa (botones -> badge) y el stream
|
|
520
|
-
// continúa abajo. Reactivar el auto-scroll y seguir el fondo para que la vista
|
|
521
|
-
// no quede atrás (evita que aparezca la flecha de scroll-to-bottom).
|
|
522
|
-
var handleApprovalDecisionWithScroll = useCallback(function () {
|
|
523
|
-
userScrollingRef.current = false;
|
|
524
|
-
scrollThresholdRef.current = 39;
|
|
525
|
-
handleApprovalDecision.apply(void 0, arguments);
|
|
526
|
-
scrollToBottomRaf();
|
|
527
|
-
scrollToBottomRaf({
|
|
528
|
-
delayMs: 100
|
|
529
|
-
});
|
|
530
|
-
}, [handleApprovalDecision, scrollToBottomRaf]);
|
|
628
|
+
setTimeout(updateScrollAffordances, 500);
|
|
629
|
+
}, [clearTurnSpace, updateScrollAffordances]);
|
|
531
630
|
var handleScrollToBottom = useCallback(function (e) {
|
|
532
631
|
var container = e.currentTarget;
|
|
533
632
|
if (scrollRafRef.current !== null) {
|
|
@@ -548,13 +647,13 @@ var ChatAIMessagesInner = function ChatAIMessagesInner(_ref5) {
|
|
|
548
647
|
}
|
|
549
648
|
userScrollingRef.current = !isNearBottom;
|
|
550
649
|
lastScrollTopRef.current = scrollTop;
|
|
551
|
-
|
|
650
|
+
updateScrollAffordances();
|
|
552
651
|
if (isNearBottom && onScrollToBottom) {
|
|
553
652
|
onScrollToBottom();
|
|
554
653
|
}
|
|
555
654
|
handleScroll(container);
|
|
556
655
|
});
|
|
557
|
-
}, [onScrollToBottom, handleScroll,
|
|
656
|
+
}, [onScrollToBottom, handleScroll, updateScrollAffordances]);
|
|
558
657
|
|
|
559
658
|
// refs to stabilize functions and avoid unnecessary re-renders
|
|
560
659
|
var sendMessageRef = useRef(sendMessage);
|
|
@@ -600,6 +699,7 @@ var ChatAIMessagesInner = function ChatAIMessagesInner(_ref5) {
|
|
|
600
699
|
// contra el último valor observado y ajusta solo cuando cambia. Así el
|
|
601
700
|
// scroll queda perfectamente sincronizado con la animación del texto sin
|
|
602
701
|
// depender de la cadencia del streamingStore.
|
|
702
|
+
// Con el turno anclado este loop solo encoge el spacer: no toca el scroll.
|
|
603
703
|
useEffect(function () {
|
|
604
704
|
if (!waitingResponse && !isWriting) return undefined;
|
|
605
705
|
if (!messagesRef.current) return undefined;
|
|
@@ -611,13 +711,20 @@ var ChatAIMessagesInner = function ChatAIMessagesInner(_ref5) {
|
|
|
611
711
|
rafId = null;
|
|
612
712
|
return;
|
|
613
713
|
}
|
|
714
|
+
if (syncTurnSpace()) {
|
|
715
|
+
// El scroll no se mueve, pero el contenido crece: la flecha y el
|
|
716
|
+
// gradiente de abajo tienen que encenderse apenas se pasa del viewport.
|
|
717
|
+
updateScrollAffordances();
|
|
718
|
+
rafId = requestAnimationFrame(_tick);
|
|
719
|
+
return;
|
|
720
|
+
}
|
|
614
721
|
var currentHeight = el.scrollHeight;
|
|
615
722
|
if (currentHeight !== lastHeight) {
|
|
616
723
|
lastHeight = currentHeight;
|
|
617
724
|
if (!userScrollingRef.current) {
|
|
618
725
|
el.scrollTop = currentHeight;
|
|
619
726
|
}
|
|
620
|
-
|
|
727
|
+
updateScrollAffordances();
|
|
621
728
|
}
|
|
622
729
|
rafId = requestAnimationFrame(_tick);
|
|
623
730
|
};
|
|
@@ -625,16 +732,43 @@ var ChatAIMessagesInner = function ChatAIMessagesInner(_ref5) {
|
|
|
625
732
|
return function () {
|
|
626
733
|
if (rafId != null) cancelAnimationFrame(rafId);
|
|
627
734
|
};
|
|
628
|
-
}, [waitingResponse, isWriting,
|
|
735
|
+
}, [waitingResponse, isWriting, syncTurnSpace, updateScrollAffordances]);
|
|
629
736
|
|
|
630
737
|
// Al comenzar a esperar la respuesta del backend, scroll inicial al fondo.
|
|
631
738
|
useEffect(function () {
|
|
632
|
-
if (waitingResponse && messagesRef.current) {
|
|
739
|
+
if (waitingResponse && messagesRef.current && !anchoredTurnIdRef.current) {
|
|
633
740
|
scrollToBottomRaf({
|
|
634
741
|
skipIfUserScrolling: true
|
|
635
742
|
});
|
|
636
743
|
}
|
|
637
744
|
}, [waitingResponse, scrollToBottomRaf]);
|
|
745
|
+
var lastReservedQuestionRef = useRef(null);
|
|
746
|
+
|
|
747
|
+
// Cambio de chat: el ancla y el spacer del turno anterior dejan de aplicar.
|
|
748
|
+
useEffect(function () {
|
|
749
|
+
if (!loadingMessages) return;
|
|
750
|
+
lastReservedQuestionRef.current = null;
|
|
751
|
+
clearTurnSpace();
|
|
752
|
+
}, [loadingMessages, clearTurnSpace]);
|
|
753
|
+
|
|
754
|
+
// Al enviar un mensaje: anclamos el turno y hacemos el único scroll del ciclo.
|
|
755
|
+
useEffect(function () {
|
|
756
|
+
if (loadingMessages || isLoadingMoreMessages) return;
|
|
757
|
+
var questionId = null;
|
|
758
|
+
for (var index = messages.length - 1; index >= 0; index -= 1) {
|
|
759
|
+
var _messages$index;
|
|
760
|
+
if ((_messages$index = messages[index]) !== null && _messages$index !== void 0 && (_messages$index = _messages$index.id) !== null && _messages$index !== void 0 && _messages$index.startsWith('question-')) {
|
|
761
|
+
questionId = messages[index].id;
|
|
762
|
+
break;
|
|
763
|
+
}
|
|
764
|
+
}
|
|
765
|
+
if (!questionId || questionId === lastReservedQuestionRef.current) return;
|
|
766
|
+
lastReservedQuestionRef.current = questionId;
|
|
767
|
+
userScrollingRef.current = false;
|
|
768
|
+
requestAnimationFrame(function () {
|
|
769
|
+
return reserveTurnSpace(questionId);
|
|
770
|
+
});
|
|
771
|
+
}, [messages, loadingMessages, isLoadingMoreMessages, reserveTurnSpace]);
|
|
638
772
|
|
|
639
773
|
// Scroll cuando cambian los mensajes: distingue "nuevo mensaje" (agregado)
|
|
640
774
|
// de "reemplazo" (mismo id/length, ej. feedback o approvalStatus). En
|
|
@@ -681,7 +815,14 @@ var ChatAIMessagesInner = function ChatAIMessagesInner(_ref5) {
|
|
|
681
815
|
lastMessagesLengthRef.current = messages.length;
|
|
682
816
|
var isNewMessage = lastId !== prevId || messages.length !== prevLen;
|
|
683
817
|
if (!isNewMessage) {
|
|
684
|
-
|
|
818
|
+
updateScrollAffordances();
|
|
819
|
+
return;
|
|
820
|
+
}
|
|
821
|
+
|
|
822
|
+
// Turno anclado: ni el reemplazo del placeholder por el mensaje final, ni la
|
|
823
|
+
// aparición del ApprovalBox mueven el scroll. Solo se ajusta el spacer.
|
|
824
|
+
if (anchoredTurnIdRef.current) {
|
|
825
|
+
requestAnimationFrame(syncTurnSpace);
|
|
685
826
|
return;
|
|
686
827
|
}
|
|
687
828
|
var container = messagesRef.current;
|
|
@@ -692,18 +833,6 @@ var ChatAIMessagesInner = function ChatAIMessagesInner(_ref5) {
|
|
|
692
833
|
var isApproval = !!lastMessage && (lastMessage.id.startsWith('approval-') || !!lastMessage.approval);
|
|
693
834
|
var isAnswerOrQuestion = !!lastMessage && (lastMessage.id.startsWith('answer-') || lastMessage.id.startsWith('question-'));
|
|
694
835
|
|
|
695
|
-
// Approval: secuencia de scrolls con delay porque el ApprovalBox necesita
|
|
696
|
-
// un tick para medirse. Scrollea aunque el usuario no esté al fondo si no
|
|
697
|
-
// está scrolleando manualmente.
|
|
698
|
-
if (isApproval && (isAtBottom || !userScrollingRef.current)) {
|
|
699
|
-
scrollToBottomRaf();
|
|
700
|
-
scrollToBottomRaf();
|
|
701
|
-
scrollToBottomRaf({
|
|
702
|
-
delayMs: 100
|
|
703
|
-
});
|
|
704
|
-
return;
|
|
705
|
-
}
|
|
706
|
-
|
|
707
836
|
// Nuevos answer/question: scroll si el usuario ya estaba al fondo.
|
|
708
837
|
if (isAnswerOrQuestion && isAtBottom) {
|
|
709
838
|
scrollToBottomRaf();
|
|
@@ -716,8 +845,8 @@ var ChatAIMessagesInner = function ChatAIMessagesInner(_ref5) {
|
|
|
716
845
|
scrollToBottomRaf();
|
|
717
846
|
return;
|
|
718
847
|
}
|
|
719
|
-
|
|
720
|
-
}, [messages, loadingMessages, isLoadingMoreMessages, scrollToBottomRaf,
|
|
848
|
+
updateScrollAffordances();
|
|
849
|
+
}, [messages, loadingMessages, isLoadingMoreMessages, scrollToBottomRaf, syncTurnSpace, updateScrollAffordances]);
|
|
721
850
|
|
|
722
851
|
// Al abrir/cargar una conversación el contenedor se remonta (Loader → lista) con
|
|
723
852
|
// scrollTop=0. Forzamos ir al fondo al terminar loadMessages, sin afectar paginación hacia arriba.
|
|
@@ -736,6 +865,13 @@ var ChatAIMessagesInner = function ChatAIMessagesInner(_ref5) {
|
|
|
736
865
|
});
|
|
737
866
|
}, [loadingMessages, messages.length, scrollToBottomRaf]);
|
|
738
867
|
|
|
868
|
+
// Estado inicial del botón scroll-to-bottom al terminar loadingMessages.
|
|
869
|
+
useEffect(function () {
|
|
870
|
+
if (!loadingMessages) {
|
|
871
|
+
updateScrollAffordances();
|
|
872
|
+
}
|
|
873
|
+
}, [loadingMessages, messages.length, updateScrollAffordances]);
|
|
874
|
+
|
|
739
875
|
// Obtener el último mensaje del usuario para verificar si tiene attachments
|
|
740
876
|
var lastUserMessage = messages.filter(function (msg) {
|
|
741
877
|
return msg.role === ChatHistoryRole.USER || msg.user.id === authUser.id.toString();
|
|
@@ -753,7 +889,6 @@ var ChatAIMessagesInner = function ChatAIMessagesInner(_ref5) {
|
|
|
753
889
|
t: t
|
|
754
890
|
});
|
|
755
891
|
var isScrollOnParent = !!expanded;
|
|
756
|
-
var isMarketplaceGlobalAgent = isMaiakerAgent(agent);
|
|
757
892
|
|
|
758
893
|
// Al expandir/contraer el modal el ref pasa a otro contenedor (scrollTop se resetea a 0).
|
|
759
894
|
// Restaurar la posición de scroll antes del paint para evitar que la conversación salte arriba.
|
|
@@ -773,6 +908,8 @@ var ChatAIMessagesInner = function ChatAIMessagesInner(_ref5) {
|
|
|
773
908
|
children: /*#__PURE__*/_jsx(Loader, {})
|
|
774
909
|
});
|
|
775
910
|
}
|
|
911
|
+
var lastMessage = messages[messages.length - 1];
|
|
912
|
+
var hasMessageLevelIndicator = !!lastMessage && isStreamingPlaceholderMessageId(lastMessage.id) && (waitingResponse || isWriting);
|
|
776
913
|
var messagesContent = /*#__PURE__*/_jsxs(_Fragment, {
|
|
777
914
|
children: [isLoadingMoreMessages && /*#__PURE__*/_jsx(LoadingText, {
|
|
778
915
|
text: t('chat.loadingMore')
|
|
@@ -796,37 +933,45 @@ var ChatAIMessagesInner = function ChatAIMessagesInner(_ref5) {
|
|
|
796
933
|
authUser: authUser,
|
|
797
934
|
handleSelectOption: handleSelectOption,
|
|
798
935
|
handleFeedback: handleFeedback,
|
|
799
|
-
handleApprovalDecision:
|
|
936
|
+
handleApprovalDecision: handleApprovalDecision,
|
|
800
937
|
handleSuggestionClick: handleSuggestionClick,
|
|
801
938
|
hasSelectedSuggestion: !!selectedSuggestionMessageIds[message.id],
|
|
802
939
|
disableFeedback: messageFeedback,
|
|
803
940
|
isStreaming: isStreaming,
|
|
804
941
|
isLastMessage: isLastMessage,
|
|
805
|
-
expanded: expanded
|
|
942
|
+
expanded: expanded,
|
|
943
|
+
streamActivity: isStreaming ? streamLoadingDisplay : null
|
|
806
944
|
}));
|
|
807
945
|
})
|
|
808
|
-
}), streamLoadingDisplay && /*#__PURE__*/_jsx(SCLoadingMessagesColumn, {
|
|
946
|
+
}), !hasMessageLevelIndicator && streamLoadingDisplay && /*#__PURE__*/_jsx(SCLoadingMessagesColumn, {
|
|
809
947
|
children: /*#__PURE__*/_jsx(AgentActivityIndicator, {
|
|
810
948
|
activity: streamLoadingDisplay
|
|
811
949
|
})
|
|
950
|
+
}), /*#__PURE__*/_jsx(SCTurnSpacer, {
|
|
951
|
+
ref: spacerElRef,
|
|
952
|
+
"aria-hidden": "true"
|
|
812
953
|
})]
|
|
813
954
|
});
|
|
814
955
|
return /*#__PURE__*/_jsxs(SCMessagesOuter, {
|
|
815
956
|
$scrollOnParent: isScrollOnParent,
|
|
816
|
-
children: [
|
|
957
|
+
children: [/*#__PURE__*/_jsx(SCMessagesGradientTop, {
|
|
958
|
+
$show: showTopGradient,
|
|
959
|
+
"aria-hidden": "true"
|
|
960
|
+
}), isScrollOnParent ? /*#__PURE__*/_jsx(SCMessagesScroll, {
|
|
817
961
|
ref: messagesRef,
|
|
818
962
|
onScroll: handleScrollToBottom,
|
|
819
963
|
children: /*#__PURE__*/_jsx(SCMessagesInner, {
|
|
820
964
|
$scrollOnParent: isScrollOnParent,
|
|
821
|
-
$isMarketplaceGlobal: isMarketplaceGlobalAgent,
|
|
822
965
|
children: messagesContent
|
|
823
966
|
})
|
|
824
967
|
}) : /*#__PURE__*/_jsx(SCMessagesInner, {
|
|
825
968
|
ref: messagesRef,
|
|
826
969
|
onScroll: handleScrollToBottom,
|
|
827
970
|
$scrollOnParent: false,
|
|
828
|
-
$isMarketplaceGlobal: isMarketplaceGlobalAgent,
|
|
829
971
|
children: messagesContent
|
|
972
|
+
}), /*#__PURE__*/_jsx(SCMessagesGradientBottom, {
|
|
973
|
+
$show: showBottomGradient,
|
|
974
|
+
"aria-hidden": "true"
|
|
830
975
|
}), showScrollToBottom && /*#__PURE__*/_jsx(ScrollToBottomButton, {
|
|
831
976
|
type: "button",
|
|
832
977
|
onClick: handleClickScrollToBottom,
|
|
@@ -839,4 +984,4 @@ var ChatAIMessagesInner = function ChatAIMessagesInner(_ref5) {
|
|
|
839
984
|
});
|
|
840
985
|
};
|
|
841
986
|
export var ChatAIMessages = /*#__PURE__*/React.memo(ChatAIMessagesInner);
|
|
842
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSZWFjdCIsIm1lbW8iLCJ1c2VDYWxsYmFjayIsInVzZUVmZmVjdCIsInVzZUxheW91dEVmZmVjdCIsInVzZVJlZiIsInVzZVN0YXRlIiwiY3JlYXRlRWxlbWVudCIsIl9jcmVhdGVFbGVtZW50IiwiQXJyb3dTbWFsbERvd24iLCJBdHRhY2htZW50Q2FyZCIsIkFwcHJvdmFsQm94IiwiQXR0YWNobWVudFByZXZpZXdNb2RhbCIsIkF0dGFjaG1lbnRDYXJkQXVkaW8iLCJNYWlhU3RyZWFtZG93biIsIkNoYXRIaXN0b3J5Um9sZSIsInJlbmRlclRleHRXaXRoTWVudGlvbnMiLCJoYXNJbmxpbmVNYXJrZXJzIiwiaXNNYWlha2VyQWdlbnQiLCJ1c2VVc2VyIiwidXNlVCIsInVzZUNoYXRNYW5hZ2VyIiwidXNlU21vb3RoU3RyZWFtVGV4dCIsInVzZVN0cmVhbWluZ01lc3NhZ2UiLCJMb2FkaW5nVGV4dCIsIkFnZW50QWN0aXZpdHlJbmRpY2F0b3IiLCJpc1N0cmVhbWluZ1BsYWNlaG9sZGVyTWVzc2FnZUlkIiwicmVzb2x2ZVN0cmVhbUxvYWRpbmdEaXNwbGF5IiwiTG9hZGVyIiwiRmFkZSIsIk1lc3NhZ2VGcm9tVXNlciIsIk1lc3NhZ2VGcm9tT3RoZXIiLCJNZXNzYWdlQ29udGVudEZyb21Vc2VyIiwiTWVzc2FnZUNvbnRlbnRGcm9tT3RoZXIiLCJNZXNzYWdlRmVlZGJhY2siLCJTQ0NBSU1lc3NhZ2VXcmFwcGVyIiwiU2Nyb2xsVG9Cb3R0b21CdXR0b24iLCJTQ01lc3NhZ2VzT3V0ZXIiLCJTQ01lc3NhZ2VzU2Nyb2xsIiwiU0NNZXNzYWdlc0lubmVyIiwiU0NMb2FkaW5nTWVzc2FnZXNDb2x1bW4iLCJTQ09wdGlvbnNMaXN0IiwiU0NPcHRpb25JdGVtIiwiU0NNZXNzYWdlSXRlbVdyYXBwZXIiLCJTQ01lc3NhZ2VJdGVtSW5uZXIiLCJTQ0F0dGFjaG1lbnRzUm93IiwiU0NBcHByb3ZhbEFjdGlvbnNDb2x1bW4iLCJGZWVkYmFjayIsInVzZUdsb2JhbENvbnRleHQiLCJFbnRpdHlMaW5rQ3VzdG9tTGluayIsImdldEVudGl0eUxpbmtXcmFwcGVyQ2xhc3NOYW1lIiwiQ2hhdEFJU3VnZ2VzdGlvbnMiLCJDaGF0QUlDcmVhdGVBZ2VudEFjdGlvbnMiLCJFVkVOVFMiLCJ1c2VFdmVudCIsImRvd25sb2FkRmlsZUZyb21VcmwiLCJqc3giLCJfanN4IiwiRnJhZ21lbnQiLCJfRnJhZ21lbnQiLCJqc3hzIiwiX2pzeHMiLCJNZXNzYWdlV3JhcHBlciIsIl9yZWYiLCJpc0N1cnJlbnRVc2VyIiwiY2hpbGRyZW4iLCJwcm9wcyIsIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsIl9leGNsdWRlZCIsIk1lc3NhZ2VDb21wb25lbnQiLCJfb2JqZWN0U3ByZWFkIiwiTWVzc2FnZUNvbnRlbnRXcmFwcGVyIiwiX3JlZjIiLCJfZXhjbHVkZWQyIiwiTWVzc2FnZUNvbnRlbnRDb21wb25lbnQiLCJNZXNzYWdlT3B0aW9ucyIsIl9yZWYzIiwib3B0aW9ucyIsImhhbmRsZVNlbGVjdE9wdGlvbiIsIl91c2VTdGF0ZSIsIl91c2VTdGF0ZTIiLCJfc2xpY2VkVG9BcnJheSIsInNlbGVjdGVkT3B0aW9uIiwic2V0U2VsZWN0ZWRPcHRpb24iLCJoYW5kbGVTZWxlY3QiLCJvcHRpb24iLCJtYXAiLCIkaGFzU2VsZWN0aW9uIiwiJGRpbW1lZCIsImlkIiwib25DbGljayIsIm5hbWUiLCJTdHJlYW1pbmdNZXNzYWdlQm9keSIsIl9wcm9wcyRjcmVhdGVBZ2VudEZvbCIsIl9wcm9wcyRzdWdnZXN0aW9ucyIsInN0cmVhbWluZ1RleHQiLCJpc1N0cmVhbWluZyIsIm1lc3NhZ2VJZCIsInJhd1RleHQiLCJtZXNzYWdlIiwid2luRmxhZ3MiLCJ3aW5kb3ciLCJkaXNwbGF5VGV4dCIsImVuYWJsZWQiLCJtYXhDaGFyc1BlckZyYW1lIiwic25hcFRvV29yZEJvdW5kYXJ5Iiwic3RyZWFtTGFnTXMiLCJ0YXJnZXRMYWdNcyIsInN0cmVhbUFkYXB0IiwiYWRhcHRUb0JhY2tlbmRSYXRlIiwic3RyZWFtQnVmZmVyTXMiLCJ0YXJnZXRCdWZmZXJNcyIsInN0cmVhbU1pbkJ1ZmZlciIsIm1pbkJ1ZmZlckNoYXJzIiwic3RyZWFtV2FybXVwTXMiLCJ3YXJtdXBNcyIsImNyZWF0ZUFnZW50QWN0aW9uc0FnZW50SWQiLCJjcmVhdGVBZ2VudEZvbGxvd1VwIiwiYWdlbnRJZCIsImhhc01lbnRpb25zIiwibWVudGlvbk5vZGVzIiwiaXNGcm9udGVuZENhbmNlbGxlZCIsImNsYXNzTmFtZSIsInN0eWxlIiwiZGlzcGxheSIsInZhcmlhbnQiLCJjb21wb25lbnRzIiwiYSIsImlzQW5pbWF0aW5nIiwiaXNBc3Npc3RhbnQiLCJpc0Vycm9yIiwiYXBwcm92YWwiLCJjb250ZW50Iiwic291cmNlcyIsImhhbmRsZUZlZWRiYWNrIiwiaGFuZGxlRmVlZGJhY2tDbGljayIsImRpc2FibGVGZWVkYmFjayIsInN1Z2dlc3Rpb25zIiwibGVuZ3RoIiwib25TZWxlY3RTdWdnZXN0aW9uIiwic3VnZ2VzdGlvbiIsImhhbmRsZVN1Z2dlc3Rpb25DbGljayIsImRpc2FibGVkIiwic3VnZ2VzdGlvbnNEaXNhYmxlZCIsImhpZGRlbiIsImlzTGFzdE1lc3NhZ2UiLCJNZXNzYWdlSXRlbSIsIl9wcm9wcyRwcm9qZWN0TWV0YWRhdCIsInVzZXIiLCJhdXRoVXNlciIsImlzQ2hhbmdlUHJvamVjdCIsImhhbmRsZUFwcHJvdmFsRGVjaXNpb24iLCJyb2xlIiwiYXR0YWNobWVudHMiLCJhcHByb3ZhbFN0YXR1cyIsImhhc1NlbGVjdGVkU3VnZ2VzdGlvbiIsIl91c2VTdGF0ZTMiLCJfdXNlU3RhdGU0IiwicHJldmlld0F0dGFjaG1lbnQiLCJzZXRQcmV2aWV3QXR0YWNobWVudCIsIlVTRVIiLCJ0b1N0cmluZyIsIkFTU0lTVEFOVCIsImlzU3RyZWFtaW5nUGxhY2Vob2xkZXIiLCJpc0FjdGl2ZVN0cmVhbWluZyIsImlzVGhpbmtpbmciLCJtZXNzYWdlQXR0YWNobWVudHMiLCJBcnJheSIsImlzQXJyYXkiLCJoYW5kbGVBdHRhY2htZW50Q2xpY2siLCJhdHRhY2htZW50IiwiZmlsZSIsIkZpbGUiLCJvcmlnaW5hbEZpbGUiLCJ1cmxfdGh1bWJuYWlsIiwidXJsX29yaWdpbmFsIiwidXJsX2ZpbGUiLCJoYW5kbGVDbG9zZVByZXZpZXciLCJoYW5kbGVBdHRhY2htZW50RG93bmxvYWQiLCJfcmVmNCIsIl9hc3luY1RvR2VuZXJhdG9yIiwiX3JlZ2VuZXJhdG9yUnVudGltZSIsIm1hcmsiLCJfY2FsbGVlIiwiZXh0ZW5zaW9uIiwiZmlsZU5hbWUiLCJmaWxlVXJsIiwiYmxvYlVybCIsImRvd25sb2FkZWRGaWxlIiwibGluayIsIl90Iiwid3JhcCIsIl9jb250ZXh0IiwicHJldiIsIm5leHQiLCJpbmNsdWRlcyIsImNvbmNhdCIsInR5cGUiLCJzZW50IiwiVVJMIiwiY3JlYXRlT2JqZWN0VVJMIiwiYWJydXB0IiwiZG9jdW1lbnQiLCJocmVmIiwiZG93bmxvYWQiLCJib2R5IiwiYXBwZW5kQ2hpbGQiLCJjbGljayIsInNldFRpbWVvdXQiLCJyZW1vdmVDaGlsZCIsInJldm9rZU9iamVjdFVSTCIsImNvbnNvbGUiLCJlcnJvciIsInN0b3AiLCJfeCIsImFwcGx5IiwiYXJndW1lbnRzIiwiaGFzRmVlZGJhY2siLCIkaXNBc3Npc3RhbnQiLCJtZXNzYWdlRXh0cmFDb250ZW50IiwiZmVlZGJhY2siLCJzZXNzaW9uSWQiLCJzcGxpdCIsImZpbHRlciIsInF1ZXN0aW9uSWQiLCJqb2luIiwiaW5kZXgiLCJfYXR0YWNobWVudCR0eXBlIiwiX2F0dGFjaG1lbnQkbmFtZSIsImF0dGFjaG1lbnRUeXBlIiwidG9Mb3dlckNhc2UiLCJhdHRhY2htZW50TmFtZSIsImlzQXVkaW9GaWxlIiwic3RhcnRzV2l0aCIsInNvbWUiLCJleHQiLCJlbmRzV2l0aCIsInBvc2l0aW9uSW5kZXgiLCJvbkRvd25sb2FkIiwicGVuZGluZ19hY3Rpb25zIiwiYWN0aW9ucyIsInN0YXR1cyIsIm9uQXBwcm92ZSIsInRocmVhZElkcyIsIm9uUmVqZWN0IiwiaXNQcm9qZWN0RGVsZXRlZCIsInByb2plY3RNZXRhZGF0YSIsImlzX2RlbGV0ZWQiLCJpc0V4cGFuZGVkIiwiZXhwYW5kZWQiLCJoaXRsSW5zdGFuY2VJZCIsIm9yaWdpbmFsX3RocmVhZF9pZCIsIndhcm5pbmdNZXNzYWdlIiwid2FybmluZ19tZXNzYWdlIiwibWFudWFsQXBwcm92YWxEZXRlY3RlZCIsIm1hbnVhbF9hcHByb3ZhbF9kZXRlY3RlZCIsImlzT3BlbiIsIm9uQ2xvc2UiLCJDaGF0QUlNZXNzYWdlc0lubmVyIiwiX3JlZjUiLCJ1c2VySW5pdGlhbE1lc3NhZ2UiLCJpbml0aWFsQ2hhdElkIiwib25FcnJvciIsIm9uU2VuZE1lc3NhZ2VSZWFkeSIsIm9uU2Nyb2xsVG9Cb3R0b20iLCJhZ2VudHMiLCJfdXNlVCIsInQiLCJfdXNlR2xvYmFsQ29udGV4dCIsImlzV2ViU2VhcmNoQWN0aXZlIiwiaXNEZWVwU2VhcmNoQWN0aXZlIiwiYWdlbnQiLCJldmVudCIsIm1lc3NhZ2VzUmVmIiwiY2hhdEluaXRpYWxpemVkUmVmIiwiaXNMb2FkaW5nTW9yZVJlZiIsInVzZXJTY3JvbGxpbmdSZWYiLCJzY3JvbGxUaHJlc2hvbGRSZWYiLCJsYXN0U2Nyb2xsVG9wUmVmIiwic2hvd1Njcm9sbFRvQm90dG9tUmVmIiwic2Nyb2xsUmFmUmVmIiwid2FzTG9hZGluZ01lc3NhZ2VzUmVmIiwibGFzdFNjcm9sbGVkU2Vzc2lvblJlZiIsIl91c2VTdGF0ZTUiLCJfdXNlU3RhdGU2Iiwic2hvd1Njcm9sbFRvQm90dG9tIiwic2V0U2hvd1Njcm9sbFRvQm90dG9tIiwiX3VzZVN0YXRlNyIsIl91c2VTdGF0ZTgiLCJzZWxlY3RlZFN1Z2dlc3Rpb25NZXNzYWdlSWRzIiwic2V0U2VsZWN0ZWRTdWdnZXN0aW9uTWVzc2FnZUlkcyIsIl91c2VDaGF0TWFuYWdlciIsImNoYXRJZCIsInVuZGVmaW5lZCIsIm1lc3NhZ2VzIiwibG9hZGluZ01lc3NhZ2VzIiwiaXNMb2FkaW5nTW9yZU1lc3NhZ2VzIiwid2FpdGluZ1Jlc3BvbnNlIiwiaXNXcml0aW5nIiwibG9hZGluZ01lc3NhZ2UiLCJzdHJlYW1BY3Rpdml0eSIsImFjdGl2ZUxvYWRpbmdzIiwic2VuZE1lc3NhZ2UiLCJjaGFuZ2VQcm9qZWN0IiwiaW5pdGlhbGl6ZUNoYXQiLCJoYW5kbGVTY3JvbGwiLCJzdG9wR2VuZXJhdGlvbiIsInRyaW0iLCJpc01hcmtldHBsYWNlR2xvYmFsQWdlbnQiLCJhaUNoYXRTdWdnZXN0ZWRBbnN3ZXIiLCJhZ2VudF90eXBlIiwiX2RlZmluZVByb3BlcnR5IiwidGFyZ2V0TWVzc2FnZSIsImZpbmQiLCJtc2ciLCJpc1JldHJ5U3VnZ2VzdGlvbiIsImxhc3RVc2VyTWVzc2FnZSIsImF0IiwicmV0cnlBdHRhY2htZW50cyIsImVudGl0eSIsInVwZGF0ZVNjcm9sbEJvdHRvbVZpc2liaWxpdHkiLCJlbCIsImN1cnJlbnQiLCJzY3JvbGxUb3AiLCJzY3JvbGxIZWlnaHQiLCJjbGllbnRIZWlnaHQiLCJkaXN0YW5jZUZyb21Cb3R0b20iLCJzaG91bGRTaG93Iiwic2Nyb2xsVG9Cb3R0b21SYWYiLCJvcHRzIiwiX29wdHMkc2tpcElmVXNlclNjcm9sIiwic2tpcElmVXNlclNjcm9sbGluZyIsIl9vcHRzJGRlbGF5TXMiLCJkZWxheU1zIiwicnVuIiwicmVxdWVzdEFuaW1hdGlvbkZyYW1lIiwiaGFuZGxlQ2xpY2tTY3JvbGxUb0JvdHRvbSIsInNjcm9sbFRvIiwidG9wIiwiYmVoYXZpb3IiLCJoYW5kbGVBcHByb3ZhbERlY2lzaW9uV2l0aFNjcm9sbCIsImhhbmRsZVNjcm9sbFRvQm90dG9tIiwiZSIsImNvbnRhaW5lciIsImN1cnJlbnRUYXJnZXQiLCJjYW5jZWxBbmltYXRpb25GcmFtZSIsImlzU2Nyb2xsaW5nVXAiLCJpc05lYXJCb3R0b20iLCJzZW5kTWVzc2FnZVJlZiIsInN0b3BHZW5lcmF0aW9uUmVmIiwib25TZW5kTWVzc2FnZVJlYWR5UmVmIiwic2VuZE1lc3NhZ2VQcm94eVJlZiIsImZhcUlkIiwiYWdlbnRTdWdnZXN0aW9uSWQiLCJtZW50aW9ucyIsImZ1YUlkIiwic2NJZCIsInN0b3BHZW5lcmF0aW9uUHJveHlSZWYiLCJyYWZJZCIsImxhc3RIZWlnaHQiLCJ0aWNrIiwiY3VycmVudEhlaWdodCIsImxhc3RNZXNzYWdlSWRSZWYiLCJsYXN0TWVzc2FnZXNMZW5ndGhSZWYiLCJfbWVzc2FnZXMkaWQiLCJfbWVzc2FnZXMiLCJfbGFzdE1lc3NhZ2UkaWQiLCJsYXN0TWVzc2FnZSIsImxhc3RJZCIsInByZXZJZCIsInByZXZMZW4iLCJpc05ld01lc3NhZ2UiLCJpc0F0Qm90dG9tIiwiaGFzSW5pdGlhbE1lc3NhZ2UiLCJpc0FwcHJvdmFsIiwiaXNBbnN3ZXJPclF1ZXN0aW9uIiwiX21lc3NhZ2VzJGlkMiIsIl9tZXNzYWdlczIiLCJqdXN0RmluaXNoZWRMb2FkaW5nIiwiYXR0YWNobWVudHNDb3VudCIsInN0cmVhbUxvYWRpbmdEaXNwbGF5IiwiaGFzQXR0YWNobWVudHMiLCJCb29sZWFuIiwiaXNTY3JvbGxPblBhcmVudCIsImV4cGFuZGVkUmVmIiwic2F2ZWRTY3JvbGxUb3AiLCJmaWxsIiwibWVzc2FnZXNDb250ZW50IiwidGV4dCIsIl9tZXNzYWdlJGF0dGFjaG1lbnRzIiwiX21lc3NhZ2Ukc291cmNlcyIsIl9tZXNzYWdlJHByb2plY3QiLCJfbWVzc2FnZSRpZCIsImlzQXNzaXN0YW50TWVzc2FnZSIsInByb2plY3QiLCJtZXNzYWdlRmVlZGJhY2siLCJ3YXNIZWxwZnVsIiwiVEhVTUJTX1VQIiwiVEhVTUJTX0RPV04iLCJtZXNzYWdlS2V5Iiwia2V5IiwiYWN0aXZpdHkiLCIkc2Nyb2xsT25QYXJlbnQiLCJyZWYiLCJvblNjcm9sbCIsIiRpc01hcmtldHBsYWNlR2xvYmFsIiwiY29sb3IiLCJ3aWR0aCIsImhlaWdodCIsIkNoYXRBSU1lc3NhZ2VzIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvbW9sZWN1bGVzL0NoYXRBSU1lc3NhZ2VzL0NoYXRBSU1lc3NhZ2VzLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBpbXBvcnQvbm8tZXh0cmFuZW91cy1kZXBlbmRlbmNpZXMgKi9cbi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9pbmRlbnQgKi9cbi8qIGVzbGludC1kaXNhYmxlIHJlYWN0L25vLXVuc3RhYmxlLW5lc3RlZC1jb21wb25lbnRzICovXG4vKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tc2hhZG93ICovXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1uZXN0ZWQtdGVybmFyeSAqL1xuLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSAqL1xuLyogZXNsaW50LWRpc2FibGUgbm8tdW5kZWYgKi9cbi8qIGVzbGludC1kaXNhYmxlIHJlYWN0L2Z1bmN0aW9uLWNvbXBvbmVudC1kZWZpbml0aW9uICovXG4vKiBlc2xpbnQtZGlzYWJsZSByZWFjdC9yZXF1aXJlLWRlZmF1bHQtcHJvcHMgKi9cbi8qIGVzbGludC1kaXNhYmxlIGpzeC1hMTF5L2NsaWNrLWV2ZW50cy1oYXZlLWtleS1ldmVudHMgKi9cbi8qIGVzbGludC1kaXNhYmxlIGpzeC1hMTF5L25vLXN0YXRpYy1lbGVtZW50LWludGVyYWN0aW9ucyAqL1xuaW1wb3J0IFJlYWN0LCB7IEZDLCBtZW1vLCBSZWFjdE5vZGUsIHVzZUNhbGxiYWNrLCB1c2VFZmZlY3QsIHVzZUxheW91dEVmZmVjdCwgdXNlUmVmLCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgQXJyb3dTbWFsbERvd24gfSBmcm9tICdAcHJvamVjdGNvci9pY29ucy9saWIvY29tcG9uZW50cy9BcnJvd1NtYWxsRG93bidcblxuaW1wb3J0IHsgQXR0YWNobWVudENhcmQgfSBmcm9tICcuLi8uLi9hdG9tcy9BdHRhY2htZW50Q2FyZC9BdHRhY2htZW50Q2FyZCdcbmltcG9ydCB7IEFwcHJvdmFsQm94IH0gZnJvbSAnLi4vLi4vYXRvbXMvQXBwcm92YWxCb3gvQXBwcm92YWxCb3gnXG5pbXBvcnQgeyBBdHRhY2htZW50UHJldmlld01vZGFsIH0gZnJvbSAnLi4vLi4vYXRvbXMvQXR0YWNobWVudFByZXZpZXdNb2RhbCdcbmltcG9ydCB7IEF0dGFjaG1lbnRDYXJkQXVkaW8gfSBmcm9tICcuLi8uLi9hdG9tcy9BdHRhY2htZW50Q2FyZC9BdHRhY2htZW50Q2FyZEF1ZGlvJ1xuaW1wb3J0IHsgTWFpYVN0cmVhbWRvd24gfSBmcm9tICcuLi8uLi9hdG9tcy9NYWlhU3RyZWFtZG93bidcbmltcG9ydCB0eXBlIHsgTWFpYVN0cmVhbWRvd25Qcm9wcyB9IGZyb20gJy4uLy4uL2F0b21zL01haWFTdHJlYW1kb3duJ1xuaW1wb3J0IHsgTUFJQU1lc3NhZ2VQcm9wcyB9IGZyb20gJy4uLy4uL2F0b21zL01BSUFNZXNzYWdlL01BSUFNZXNzYWdlLmludGVyZmFjZXMnXG5pbXBvcnQgeyBDaGF0TWVzc2FnZSwgQ2hhdEhpc3RvcnlSb2xlIH0gZnJvbSAnLi4vLi4vLi4vdHlwZXMvQ2hhdCdcbmltcG9ydCB7IHJlbmRlclRleHRXaXRoTWVudGlvbnMsIGhhc0lubGluZU1hcmtlcnMgfSBmcm9tICcuLi8uLi8uLi91dGlscy9yZW5kZXJDb250ZXh0TWVudGlvbnMnXG5cbmltcG9ydCB7IGlzTWFpYWtlckFnZW50IH0gZnJvbSAnLi4vLi4vLi4vdXRpbHMvYWdlbnREaXNwbGF5TmFtZSdcbmltcG9ydCB7IENPUlVzZXIsIHVzZVVzZXIgfSBmcm9tICcuLi8uLi8uLi9jb250ZXh0L2Nvci11c2VyJ1xuXG5pbXBvcnQgeyB1c2VUIH0gZnJvbSAnLi4vLi4vLi4vaG9va3MvdXNlVCdcbmltcG9ydCB7IHVzZUNoYXRNYW5hZ2VyIH0gZnJvbSAnLi4vLi4vLi4vaG9va3MvdXNlQ2hhdE1hbmFnZXIvdXNlQ2hhdE1hbmFnZXInXG5pbXBvcnQgeyB1c2VTbW9vdGhTdHJlYW1UZXh0IH0gZnJvbSAnLi4vLi4vLi4vaG9va3MvdXNlU21vb3RoU3RyZWFtVGV4dCdcbmltcG9ydCB7IHVzZVN0cmVhbWluZ01lc3NhZ2UgfSBmcm9tICcuLi8uLi8uLi9ob29rcy91c2VTdHJlYW1pbmdNZXNzYWdlJ1xuXG5pbXBvcnQgeyBMb2FkaW5nVGV4dCB9IGZyb20gJy4uLy4uL2F0b21zL0xvYWRpbmdUZXh0J1xuaW1wb3J0IHsgQWdlbnRBY3Rpdml0eUluZGljYXRvciB9IGZyb20gJy4uLy4uL2F0b21zL0FnZW50QWN0aXZpdHlJbmRpY2F0b3InXG5pbXBvcnQgeyBpc1N0cmVhbWluZ1BsYWNlaG9sZGVyTWVzc2FnZUlkLCByZXNvbHZlU3RyZWFtTG9hZGluZ0Rpc3BsYXkgfSBmcm9tICcuLi8uLi8uLi91dGlscy9zdHJlYW1BY3Rpdml0eU1lc3NhZ2VzJ1xuaW1wb3J0IHsgTG9hZGVyIH0gZnJvbSAnLi4vLi4vYXRvbXMvTG9hZGVyJ1xuaW1wb3J0IHsgRmFkZSB9IGZyb20gJy4uLy4uL2F0b21zL0ZhZGUnXG5cbmltcG9ydCB7IFByb2plY3QgfSBmcm9tICcuLi8uLi8uLi90eXBlcy9Qcm9qZWN0J1xuXG5pbXBvcnQgeyBNZXNzYWdlRnJvbVVzZXIsIE1lc3NhZ2VGcm9tT3RoZXIsIE1lc3NhZ2VDb250ZW50RnJvbVVzZXIsIE1lc3NhZ2VDb250ZW50RnJvbU90aGVyIH0gZnJvbSAnLi9zdHlsZXMnXG5pbXBvcnQgeyBNZXNzYWdlRmVlZGJhY2sgfSBmcm9tICcuLi9NZXNzYWdlRmVlZGJhY2snXG5pbXBvcnQge1xuICBTQ0NBSU1lc3NhZ2VXcmFwcGVyLFxuICBTY3JvbGxUb0JvdHRvbUJ1dHRvbixcbiAgU0NNZXNzYWdlc091dGVyLFxuICBTQ01lc3NhZ2VzU2Nyb2xsLFxuICBTQ01lc3NhZ2VzSW5uZXIsXG4gIFNDTG9hZGluZ01lc3NhZ2VzQ29sdW1uLFxuICBTQ09wdGlvbnNMaXN0LFxuICBTQ09wdGlvbkl0ZW0sXG4gIFNDTWVzc2FnZUl0ZW1XcmFwcGVyLFxuICBTQ01lc3NhZ2VJdGVtSW5uZXIsXG4gIFNDQXR0YWNobWVudHNSb3csXG4gIFNDQXBwcm92YWxBY3Rpb25zQ29sdW1uLFxufSBmcm9tICcuL25ld1N0eWxlcydcbmltcG9ydCB7IEZlZWRiYWNrIH0gZnJvbSAnLi4vTWVzc2FnZUZlZWRiYWNrL01lc3NhZ2VGZWVkYmFjaydcbmltcG9ydCB7IHVzZUdsb2JhbENvbnRleHQgfSBmcm9tICcuLi8uLi8uLi9jb250ZXh0L2dsb2JhbC1jb250ZXh0J1xuaW1wb3J0IHsgQWdlbnQgfSBmcm9tICcuLi8uLi8uLi90eXBlcy9hZ2VudCdcbmltcG9ydCB7IEF0dGFjaG1lbnRGaWxlIH0gZnJvbSAnLi4vQ2hhdEZvb3Rlci9DaGF0Rm9vdGVyJ1xuaW1wb3J0IHsgQ29udGV4dE1lbnRpb24gfSBmcm9tICcuLi8uLi8uLi90eXBlcy9jb250ZXh0TWVudGlvbidcbmltcG9ydCB7IEVudGl0eUxpbmtDdXN0b21MaW5rLCBnZXRFbnRpdHlMaW5rV3JhcHBlckNsYXNzTmFtZSB9IGZyb20gJy4uLy4uLy4uL3V0aWxzL2VudGl0eUxpbmtSZW5kZXInXG5pbXBvcnQgeyBDaGF0QUlTdWdnZXN0aW9ucyB9IGZyb20gJy4vQ2hhdEFJU3VnZ2VzdGlvbnMnXG5pbXBvcnQgeyBDaGF0QUlDcmVhdGVBZ2VudEFjdGlvbnMgfSBmcm9tICcuL0NoYXRBSUNyZWF0ZUFnZW50QWN0aW9ucydcbmltcG9ydCB7IEVWRU5UUywgdXNlRXZlbnQgfSBmcm9tICcuLi8uLi8uLi9ob29rcy91c2VFdmVudCdcbmltcG9ydCB7IGRvd25sb2FkRmlsZUZyb21VcmwgfSBmcm9tICcuLi8uLi8uLi91dGlscy9maWxlRG93bmxvYWRIZWxwZXInXG5cbnR5cGUgQ2hhdEFJTWVzc2FnZXNQcm9wcyA9IHtcbiAgdXNlckluaXRpYWxNZXNzYWdlOiB7XG4gICAgbWVzc2FnZTogc3RyaW5nXG4gICAgYXR0YWNobWVudHM6IEF0dGFjaG1lbnRGaWxlW11cbiAgICBmYXFJZD86IHN0cmluZ1xuICAgIGFnZW50U3VnZ2VzdGlvbklkPzogc3RyaW5nXG4gICAgbWVudGlvbnM/OiBDb250ZXh0TWVudGlvbltdXG4gICAgZnVhSWQ/OiBzdHJpbmdcbiAgICBzY0lkPzogc3RyaW5nXG4gIH1cbiAgaW5pdGlhbENoYXRJZDogc3RyaW5nIHwgbnVsbFxuICBvbkVycm9yOiAoKSA9PiB2b2lkXG4gIG9uU2VuZE1lc3NhZ2VSZWFkeT86IChcbiAgICBzZW5kTWVzc2FnZTogKFxuICAgICAgbWVzc2FnZTogc3RyaW5nLFxuICAgICAgYXR0YWNobWVudHM/OiBBdHRhY2htZW50RmlsZVtdLFxuICAgICAgZmFxSWQ/OiBzdHJpbmcsXG4gICAgICBhZ2VudFN1Z2dlc3Rpb25JZD86IHN0cmluZyxcbiAgICAgIG1lbnRpb25zPzogQ29udGV4dE1lbnRpb25bXSxcbiAgICAgIGZ1YUlkPzogc3RyaW5nLFxuICAgICAgc2NJZD86IHN0cmluZ1xuICAgICkgPT4gdm9pZCxcbiAgICBzdG9wR2VuZXJhdGlvbjogKCkgPT4gdm9pZCxcbiAgICBpc1N0cmVhbWluZzogYm9vbGVhbixcbiAgICBpc1dyaXRpbmc6IGJvb2xlYW5cbiAgKSA9PiB2b2lkXG4gIGlzRGlzYWJsZWQ/OiBib29sZWFuXG4gIG9uU2Nyb2xsVG9Cb3R0b20/OiAoKSA9PiB2b2lkXG4gIGF0dGFjaG1lbnRzPzogQXR0YWNobWVudEZpbGVbXVxuICBhZ2VudHM/OiBBZ2VudFtdXG4gIGV4cGFuZGVkPzogYm9vbGVhblxufVxuXG50eXBlIE1lc3NhZ2VJdGVtUHJvcHMgPSBDaGF0TWVzc2FnZSAmIHtcbiAgYXV0aFVzZXI6IENPUlVzZXJcbiAgaGFuZGxlU2VsZWN0T3B0aW9uOiAob3B0aW9uOiBQcm9qZWN0KSA9PiB2b2lkXG4gIGhhbmRsZVN1Z2dlc3Rpb25DbGljazogKG1lc3NhZ2VJZDogc3RyaW5nLCBzdWdnZXN0aW9uOiBzdHJpbmcpID0+IHZvaWRcbiAgaGFzU2VsZWN0ZWRTdWdnZXN0aW9uPzogYm9vbGVhblxuICBoYW5kbGVGZWVkYmFjazogKGZlZWRiYWNrOiBGZWVkYmFjaywgY2hhdE1lc3NhZ2VJZDogc3RyaW5nKSA9PiB2b2lkXG4gIGhhbmRsZUFwcHJvdmFsRGVjaXNpb246ICh0aHJlYWRJZHM6IHN0cmluZ1tdLCBkZWNpc2lvbjogJ2FwcHJvdmUnIHwgJ3JlamVjdCcpID0+IHZvaWRcbiAgZGlzYWJsZUZlZWRiYWNrPzogRmVlZGJhY2sgfCBudWxsXG4gIHNvdXJjZXM/OiBhbnlcbiAgYXR0YWNobWVudHM/OiBBdHRhY2htZW50RmlsZVtdXG4gIGlzU3RyZWFtaW5nPzogYm9vbGVhblxuICBpc0xhc3RNZXNzYWdlPzogYm9vbGVhblxuICBleHBhbmRlZD86IGJvb2xlYW5cbn1cblxuaW50ZXJmYWNlIE1lc3NhZ2VXcmFwcGVyUHJvcHMge1xuICBpc0N1cnJlbnRVc2VyOiBib29sZWFuXG4gIGNoaWxkcmVuOiBSZWFjdE5vZGVcbiAgJ2RhdGEtbWVzc2FnZS1pZCc/OiBzdHJpbmdcbiAgaGFzRmVlZGJhY2s/OiBib29sZWFuXG59XG5cbnR5cGUgTWVzc2FnZUNvbnRlbnRXcmFwcGVyUHJvcHMgPSBNQUlBTWVzc2FnZVByb3BzICYge1xuICBpc0N1cnJlbnRVc2VyOiBib29sZWFuXG4gIGlzRXJyb3I/OiBib29sZWFuXG4gIGlzQ2hhbmdlUHJvamVjdD86IGJvb2xlYW5cbn1cblxuY29uc3QgTWVzc2FnZVdyYXBwZXI6IEZDPE1lc3NhZ2VXcmFwcGVyUHJvcHM+ID0gKHsgaXNDdXJyZW50VXNlciwgY2hpbGRyZW4sIC4uLnByb3BzIH0pID0+IHtcbiAgY29uc3QgTWVzc2FnZUNvbXBvbmVudCA9IGlzQ3VycmVudFVzZXIgPyBNZXNzYWdlRnJvbVVzZXIgOiBNZXNzYWdlRnJvbU90aGVyXG4gIHJldHVybiA8TWVzc2FnZUNvbXBvbmVudCB7Li4ucHJvcHN9PntjaGlsZHJlbn08L01lc3NhZ2VDb21wb25lbnQ+XG59XG5cbmNvbnN0IE1lc3NhZ2VDb250ZW50V3JhcHBlcjogRkM8TWVzc2FnZUNvbnRlbnRXcmFwcGVyUHJvcHM+ID0gKHsgaXNDdXJyZW50VXNlciwgLi4ucHJvcHMgfSkgPT4ge1xuICBjb25zdCBNZXNzYWdlQ29udGVudENvbXBvbmVudCA9IGlzQ3VycmVudFVzZXIgPyBNZXNzYWdlQ29udGVudEZyb21Vc2VyIDogTWVzc2FnZUNvbnRlbnRGcm9tT3RoZXJcbiAgcmV0dXJuIDxNZXNzYWdlQ29udGVudENvbXBvbmVudCB7Li4ucHJvcHN9IC8+XG59XG5cbmZ1bmN0aW9uIE1lc3NhZ2VPcHRpb25zKHtcbiAgb3B0aW9ucyxcbiAgaGFuZGxlU2VsZWN0T3B0aW9uLFxufToge1xuICBvcHRpb25zOiBQcm9qZWN0W10gfCBudWxsXG4gIGhhbmRsZVNlbGVjdE9wdGlvbjogKG9wdGlvbjogUHJvamVjdCkgPT4gdm9pZFxufSkge1xuICBjb25zdCBbc2VsZWN0ZWRPcHRpb24sIHNldFNlbGVjdGVkT3B0aW9uXSA9IHVzZVN0YXRlPFByb2plY3QgfCBudWxsPihudWxsKVxuXG4gIGNvbnN0IGhhbmRsZVNlbGVjdCA9IChvcHRpb246IFByb2plY3QpID0+IHtcbiAgICBpZiAoc2VsZWN0ZWRPcHRpb24pIHJldHVyblxuICAgIHNldFNlbGVjdGVkT3B0aW9uKG9wdGlvbilcbiAgICBoYW5kbGVTZWxlY3RPcHRpb24ob3B0aW9uKVxuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8U0NPcHRpb25zTGlzdD5cbiAgICAgIHsob3B0aW9ucyB8fCBbXSkubWFwKG9wdGlvbiA9PiAoXG4gICAgICAgIDxTQ09wdGlvbkl0ZW1cbiAgICAgICAgICAkaGFzU2VsZWN0aW9uPXshIXNlbGVjdGVkT3B0aW9ufVxuICAgICAgICAgICRkaW1tZWQ9eyEhc2VsZWN0ZWRPcHRpb24gJiYgc2VsZWN0ZWRPcHRpb24/LmlkICE9PSBvcHRpb24uaWR9XG4gICAgICAgICAgb25DbGljaz17KCkgPT4gaGFuZGxlU2VsZWN0KG9wdGlvbil9XG4gICAgICAgICAga2V5PXtvcHRpb24uaWR9XG4gICAgICAgID5cbiAgICAgICAgICB7b3B0aW9uLm5hbWV9XG4gICAgICAgIDwvU0NPcHRpb25JdGVtPlxuICAgICAgKSl9XG4gICAgPC9TQ09wdGlvbnNMaXN0PlxuICApXG59XG5cbi8qKiBTb2xvIGVzdGUgY29tcG9uZW50ZSByZS1yZW5kZXJpemEgY3VhbmRvIGNhbWJpYSBlbCB0ZXh0byBlbiBzdHJlYW1pbmcgKGxlZSBkZWwgY29udGV4dCkuICovXG5jb25zdCBTdHJlYW1pbmdNZXNzYWdlQm9keSA9IG1lbW8oXG4gIChwcm9wczoge1xuICAgIG1lc3NhZ2U6IHN0cmluZ1xuICAgIGlzU3RyZWFtaW5nOiBib29sZWFuXG4gICAgaXNDdXJyZW50VXNlcjogYm9vbGVhblxuICAgIGlzQXNzaXN0YW50OiBib29sZWFuXG4gICAgaXNGcm9udGVuZENhbmNlbGxlZD86IGJvb2xlYW5cbiAgICBhcHByb3ZhbD86IE1lc3NhZ2VJdGVtUHJvcHNbJ2FwcHJvdmFsJ11cbiAgICBpc0Vycm9yPzogYm9vbGVhblxuICAgIHNvdXJjZXM/OiBNZXNzYWdlSXRlbVByb3BzWydzb3VyY2VzJ11cbiAgICBzdWdnZXN0aW9ucz86IHN0cmluZ1tdIHwgbnVsbFxuICAgIGNyZWF0ZUFnZW50Rm9sbG93VXA/OiB7IGFnZW50SWQ6IHN0cmluZyB9IHwgbnVsbFxuICAgIGhhbmRsZUZlZWRiYWNrQ2xpY2s6IChmOiBGZWVkYmFjaykgPT4gdm9pZFxuICAgIGRpc2FibGVGZWVkYmFjazogRmVlZGJhY2sgfCBudWxsXG4gICAgaGFuZGxlU3VnZ2VzdGlvbkNsaWNrOiAobWVzc2FnZUlkOiBzdHJpbmcsIHN1Z2dlc3Rpb246IHN0cmluZykgPT4gdm9pZFxuICAgIHN1Z2dlc3Rpb25zRGlzYWJsZWQ/OiBib29sZWFuXG4gICAgbWVzc2FnZUlkOiBzdHJpbmdcbiAgICBpc0xhc3RNZXNzYWdlPzogYm9vbGVhblxuICB9KSA9PiB7XG4gICAgLy8gVGV4dG8gZGVsIHN0cmVhbTogc29sbyBzZSBsZWUgZGVsIHN0b3JlIGN1YW5kbyBlc3RlIG1lbnNhamUgZXMgZWxcbiAgICAvLyBxdWUgZXN0w6EgZW4gc3RyZWFtaW5nLiB1c2VTeW5jRXh0ZXJuYWxTdG9yZSBhw61zbGEgZWwgcmUtcmVuZGVyIGFcbiAgICAvLyBlc3RlIGNvbXBvbmVudGUsIHNpbiB0b2NhciBlbCByZXN0byBkZWwgw6FyYm9sLlxuICAgIGNvbnN0IHN0cmVhbWluZ1RleHQgPSB1c2VTdHJlYW1pbmdNZXNzYWdlKHByb3BzLmlzU3RyZWFtaW5nID8gcHJvcHMubWVzc2FnZUlkIDogbnVsbClcbiAgICBjb25zdCByYXdUZXh0ID0gcHJvcHMuaXNTdHJlYW1pbmcgPyBzdHJlYW1pbmdUZXh0IDogcHJvcHMubWVzc2FnZVxuICAgIC8vIFNtb290aCBzdHJlYW1pbmc6IGRlc2Fjb3BsYSBsYSBjYWRlbmNpYSBkZWwgYmFja2VuZCBkZWwgcmVuZGVyLlxuICAgIC8vIER1cmFudGUgZWwgc3RyZWFtaW5nIGxpYmVyYSBjaGFycyBhIHJpdG1vIGNvbnN0YW50ZSB2w61hIHJBRjsgY3VhbmRvXG4gICAgLy8gdGVybWluYSwgbXVlc3RyYSBlbCB0ZXh0byBmaW5hbCBhbCBpbnN0YW50ZSAoc2luIGFuaW1hY2nDs24gcmVzaWR1YWwpLlxuICAgIC8vIExvcyBkZWZhdWx0cyBkZWwgaG9vayBzZSBhanVzdGFyb24gZW1ww61yaWNhbWVudGUgZW4gc3RhZ2luZzsgYXVuIGFzw61cbiAgICAvLyBzZSBleHBvbmVuIGZsYWdzIGRlIHJ1bnRpbWUgKHdpbmRvdy4qKSBwYXJhIHBvZGVyIHR1bmVhciBzaW4gcmVjb21waWxhclxuICAgIC8vIHNpIGFsZ8O6biBiYWNrZW5kIHByZXNlbnRhIHVuYSBjYWRlbmNpYSBtdXkgZGlzdGludGEgZW4gcHJvZHVjY2nDs24uXG4gICAgLy8gICB3aW5kb3cuc3RyZWFtQWRhcHQgPSBmYWxzZSAgICAgIC8vIGRlc2FjdGl2YSBhZGFwdGFjacOzbiBhbCBiYWNrZW5kXG4gICAgLy8gICB3aW5kb3cuc3RyZWFtQnVmZmVyTXMgPSA2MDAgICAgIC8vIGNvbGNow7NuIG9iamV0aXZvIChtcylcbiAgICAvLyAgIHdpbmRvdy5zdHJlYW1MYWdNcyA9IDQ1MCAgICAgICAgLy8gbGFnIG3DoXhpbW8gYmFzZSAobXMpXG4gICAgLy8gICB3aW5kb3cuc3RyZWFtTWluQnVmZmVyID0gNzAgICAgIC8vIHBpc28gZGVsIGNvbGNow7NuIGVuIGNoYXJzXG4gICAgLy8gICB3aW5kb3cuc3RyZWFtV2FybXVwTXMgPSA0MDAgICAgIC8vIHdhcm11cCBpbmljaWFsIChtcylcbiAgICBjb25zdCB3aW5GbGFncyA9XG4gICAgICB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICA/ICh3aW5kb3cgYXMgdW5rbm93biBhcyB7XG4gICAgICAgICAgICBzdHJlYW1BZGFwdD86IGJvb2xlYW5cbiAgICAgICAgICAgIHN0cmVhbUJ1ZmZlck1zPzogbnVtYmVyXG4gICAgICAgICAgICBzdHJlYW1MYWdNcz86IG51bWJlclxuICAgICAgICAgICAgc3RyZWFtTWluQnVmZmVyPzogbnVtYmVyXG4gICAgICAgICAgICBzdHJlYW1XYXJtdXBNcz86IG51bWJlclxuICAgICAgICAgIH0pXG4gICAgICAgIDoge31cbiAgICBjb25zdCBkaXNwbGF5VGV4dCA9IHVzZVNtb290aFN0cmVhbVRleHQocmF3VGV4dCwge1xuICAgICAgZW5hYmxlZDogISFwcm9wcy5pc1N0cmVhbWluZyxcbiAgICAgIG1heENoYXJzUGVyRnJhbWU6IDI0LFxuICAgICAgc25hcFRvV29yZEJvdW5kYXJ5OiB0cnVlLFxuICAgICAgLi4uKHdpbkZsYWdzLnN0cmVhbUxhZ01zICE9IG51bGwgJiYgeyB0YXJnZXRMYWdNczogd2luRmxhZ3Muc3RyZWFtTGFnTXMgfSksXG4gICAgICAuLi4od2luRmxhZ3Muc3RyZWFtQWRhcHQgIT0gbnVsbCAmJiB7IGFkYXB0VG9CYWNrZW5kUmF0ZTogd2luRmxhZ3Muc3RyZWFtQWRhcHQgfSksXG4gICAgICAuLi4od2luRmxhZ3Muc3RyZWFtQnVmZmVyTXMgIT0gbnVsbCAmJiB7IHRhcmdldEJ1ZmZlck1zOiB3aW5GbGFncy5zdHJlYW1CdWZmZXJNcyB9KSxcbiAgICAgIC4uLih3aW5GbGFncy5zdHJlYW1NaW5CdWZmZXIgIT0gbnVsbCAmJiB7IG1pbkJ1ZmZlckNoYXJzOiB3aW5GbGFncy5zdHJlYW1NaW5CdWZmZXIgfSksXG4gICAgICAuLi4od2luRmxhZ3Muc3RyZWFtV2FybXVwTXMgIT0gbnVsbCAmJiB7IHdhcm11cE1zOiB3aW5GbGFncy5zdHJlYW1XYXJtdXBNcyB9KSxcbiAgICB9KVxuICAgIGNvbnN0IGNyZWF0ZUFnZW50QWN0aW9uc0FnZW50SWQgPSBwcm9wcy5jcmVhdGVBZ2VudEZvbGxvd1VwPy5hZ2VudElkXG5cbiAgICBpZiAoIWRpc3BsYXlUZXh0ICYmICFwcm9wcy5pc1N0cmVhbWluZykgcmV0dXJuIG51bGxcbiAgICBjb25zdCBoYXNNZW50aW9ucyA9IGhhc0lubGluZU1hcmtlcnMoZGlzcGxheVRleHQpXG4gICAgY29uc3QgbWVudGlvbk5vZGVzID0gaGFzTWVudGlvbnMgPyByZW5kZXJUZXh0V2l0aE1lbnRpb25zKGRpc3BsYXlUZXh0KSA6IG51bGxcbiAgICByZXR1cm4gKFxuICAgICAgPD5cbiAgICAgICAgPFNDQ0FJTWVzc2FnZVdyYXBwZXJcbiAgICAgICAgICBpc0N1cnJlbnRVc2VyPXtwcm9wcy5pc0N1cnJlbnRVc2VyfVxuICAgICAgICAgIGlzRnJvbnRlbmRDYW5jZWxsZWQ9e3Byb3BzLmlzRnJvbnRlbmRDYW5jZWxsZWR9XG4gICAgICAgICAgY2xhc3NOYW1lPXtnZXRFbnRpdHlMaW5rV3JhcHBlckNsYXNzTmFtZShkaXNwbGF5VGV4dCl9XG4gICAgICAgID5cbiAgICAgICAgICB7aGFzTWVudGlvbnMgJiYgbWVudGlvbk5vZGVzID8gKFxuICAgICAgICAgICAgLy8gU2kgaGF5IG1lbnRpb25zLCByZW5kZXJpemFyIGRpcmVjdGFtZW50ZSAoc2luIG1hcmtkb3duIGVuIGVsIG1pc21vIHDDoXJyYWZvKVxuICAgICAgICAgICAgPHNwYW4gc3R5bGU9e3sgZGlzcGxheTogJ2lubGluZScgfX0+e21lbnRpb25Ob2Rlc308L3NwYW4+XG4gICAgICAgICAgKSA6IChcbiAgICAgICAgICAgIC8vIFNpbiBtZW50aW9ucywgcGFzYXIgYSBTdHJlYW1kb3duIHBhcmEgbWFya2Rvd24gc3VwcG9ydFxuICAgICAgICAgICAgPE1haWFTdHJlYW1kb3duXG4gICAgICAgICAgICAgIHZhcmlhbnQ9XCJjaGF0XCJcbiAgICAgICAgICAgICAgaXNDdXJyZW50VXNlcj17cHJvcHMuaXNDdXJyZW50VXNlcn1cbiAgICAgICAgICAgICAgaXNGcm9udGVuZENhbmNlbGxlZD17cHJvcHMuaXNGcm9udGVuZENhbmNlbGxlZH1cbiAgICAgICAgICAgICAgY29tcG9uZW50cz17eyBhOiBFbnRpdHlMaW5rQ3VzdG9tTGluayB9IGFzIE1haWFTdHJlYW1kb3duUHJvcHNbJ2NvbXBvbmVudHMnXX1cbiAgICAgICAgICAgICAgaXNBbmltYXRpbmc9eyEhcHJvcHMuaXNTdHJlYW1pbmd9XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIHtkaXNwbGF5VGV4dH1cbiAgICAgICAgICAgIDwvTWFpYVN0cmVhbWRvd24+XG4gICAgICAgICAgKX1cbiAgICAgICAgPC9TQ0NBSU1lc3NhZ2VXcmFwcGVyPlxuICAgICAgICB7cHJvcHMuaXNBc3Npc3RhbnQgJiYgIXByb3BzLmlzRXJyb3IgJiYgIXByb3BzLmlzRnJvbnRlbmRDYW5jZWxsZWQgJiYgIXByb3BzLmFwcHJvdmFsICYmICFwcm9wcy5pc1N0cmVhbWluZyAmJiAoXG4gICAgICAgICAgPE1lc3NhZ2VGZWVkYmFja1xuICAgICAgICAgICAgY29udGVudD17ZGlzcGxheVRleHR9XG4gICAgICAgICAgICBzb3VyY2VzPXtwcm9wcy5zb3VyY2VzfVxuICAgICAgICAgICAgaGFuZGxlRmVlZGJhY2s9e3Byb3BzLmhhbmRsZUZlZWRiYWNrQ2xpY2t9XG4gICAgICAgICAgICBkaXNhYmxlRmVlZGJhY2s9e3Byb3BzLmRpc2FibGVGZWVkYmFja31cbiAgICAgICAgICAvPlxuICAgICAgICApfVxuICAgICAgICB7cHJvcHMuaXNBc3Npc3RhbnQgJiZcbiAgICAgICAgICAhcHJvcHMuaXNGcm9udGVuZENhbmNlbGxlZCAmJlxuICAgICAgICAgICFwcm9wcy5hcHByb3ZhbCAmJlxuICAgICAgICAgICghcHJvcHMuaXNFcnJvciB8fCBwcm9wcy5zdWdnZXN0aW9ucz8ubGVuZ3RoKSAmJiAoXG4gICAgICAgICAgICA8Q2hhdEFJU3VnZ2VzdGlvbnNcbiAgICAgICAgICAgICAgc3VnZ2VzdGlvbnM9e3Byb3BzLnN1Z2dlc3Rpb25zIHx8IFtdfVxuICAgICAgICAgICAgICBvblNlbGVjdFN1Z2dlc3Rpb249e3N1Z2dlc3Rpb24gPT4gcHJvcHMuaGFuZGxlU3VnZ2VzdGlvbkNsaWNrKHByb3BzLm1lc3NhZ2VJZCwgc3VnZ2VzdGlvbil9XG4gICAgICAgICAgICAgIGRpc2FibGVkPXtwcm9wcy5zdWdnZXN0aW9uc0Rpc2FibGVkfVxuICAgICAgICAgICAgICBoaWRkZW49eyEhcHJvcHMuaXNTdHJlYW1pbmcgfHwgIXByb3BzLmlzTGFzdE1lc3NhZ2UgfHwgISFwcm9wcy5zdWdnZXN0aW9uc0Rpc2FibGVkfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICApfVxuICAgICAgICB7cHJvcHMuaXNBc3Npc3RhbnQgJiZcbiAgICAgICAgICAhcHJvcHMuaXNFcnJvciAmJlxuICAgICAgICAgICFwcm9wcy5pc0Zyb250ZW5kQ2FuY2VsbGVkICYmXG4gICAgICAgICAgIXByb3BzLmFwcHJvdmFsICYmXG4gICAgICAgICAgISFjcmVhdGVBZ2VudEFjdGlvbnNBZ2VudElkICYmIChcbiAgICAgICAgICAgIDxDaGF0QUlDcmVhdGVBZ2VudEFjdGlvbnNcbiAgICAgICAgICAgICAgYWdlbnRJZD17Y3JlYXRlQWdlbnRBY3Rpb25zQWdlbnRJZH1cbiAgICAgICAgICAgICAgZGlzYWJsZWQ9e3Byb3BzLnN1Z2dlc3Rpb25zRGlzYWJsZWR9XG4gICAgICAgICAgICAgIGhpZGRlbj17ISFwcm9wcy5pc1N0cmVhbWluZyB8fCAhcHJvcHMuaXNMYXN0TWVzc2FnZSB8fCAhIXByb3BzLnN1Z2dlc3Rpb25zRGlzYWJsZWR9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICl9XG4gICAgICA8Lz5cbiAgICApXG4gIH1cbilcblxuY29uc3QgTWVzc2FnZUl0ZW0gPSBtZW1vKChwcm9wczogTWVzc2FnZUl0ZW1Qcm9wcykgPT4ge1xuICBjb25zdCB7XG4gICAgaWQsXG4gICAgdXNlcixcbiAgICBtZXNzYWdlLFxuICAgIGlzU3RyZWFtaW5nLFxuICAgIGlzRXJyb3IsXG4gICAgYXV0aFVzZXIsXG4gICAgb3B0aW9ucyxcbiAgICBpc0NoYW5nZVByb2plY3QsXG4gICAgaGFuZGxlU2VsZWN0T3B0aW9uLFxuICAgIGhhbmRsZVN1Z2dlc3Rpb25DbGljayxcbiAgICBoYW5kbGVGZWVkYmFjayxcbiAgICBoYW5kbGVBcHByb3ZhbERlY2lzaW9uLFxuICAgIGRpc2FibGVGZWVkYmFjayxcbiAgICByb2xlLFxuICAgIHNvdXJjZXMsXG4gICAgYXR0YWNobWVudHMsXG4gICAgYXBwcm92YWwsXG4gICAgYXBwcm92YWxTdGF0dXMsXG4gICAgc3VnZ2VzdGlvbnMsXG4gICAgY3JlYXRlQWdlbnRGb2xsb3dVcCxcbiAgICBoYXNTZWxlY3RlZFN1Z2dlc3Rpb24sXG4gICAgaXNMYXN0TWVzc2FnZSxcbiAgfSA9IHByb3BzXG5cbiAgY29uc3QgW3ByZXZpZXdBdHRhY2htZW50LCBzZXRQcmV2aWV3QXR0YWNobWVudF0gPSB1c2VTdGF0ZTxBdHRhY2htZW50RmlsZSB8IG51bGw+KG51bGwpXG4gIGNvbnN0IGlzQ3VycmVudFVzZXIgPSByb2xlID09PSBDaGF0SGlzdG9yeVJvbGUuVVNFUiB8fCB1c2VyLmlkID09PSBhdXRoVXNlci5pZC50b1N0cmluZygpXG4gIGNvbnN0IGlzQXNzaXN0YW50ID0gcm9sZSA9PT0gQ2hhdEhpc3RvcnlSb2xlLkFTU0lTVEFOVCB8fCB1c2VyLmlkID09PSAnYXNzaXN0YW50J1xuICAvLyBNaWVudHJhcyBlbCBhZ2VudGUgXCJwaWVuc2FcIiAoc3RyZWFtaW5nIHNpbiB0ZXh0bykgbm8gbW9udGFtb3MgZWwgTWVzc2FnZUl0ZW06XG4gIC8vIHVuIHBsYWNlaG9sZGVyIHZhY8OtbyBzdW1hcsOtYSBvdHJvIGdhcCBkZSAzNnB4IGVuY2ltYSBkZWwgaW5kaWNhZG9yIGRlIGFjdGl2aWRhZC5cbiAgY29uc3QgaXNTdHJlYW1pbmdQbGFjZWhvbGRlciA9IGlzU3RyZWFtaW5nUGxhY2Vob2xkZXJNZXNzYWdlSWQoaWQpXG4gIGNvbnN0IHN0cmVhbWluZ1RleHQgPSB1c2VTdHJlYW1pbmdNZXNzYWdlKGlzU3RyZWFtaW5nIHx8IGlzU3RyZWFtaW5nUGxhY2Vob2xkZXIgPyBpZCA6IG51bGwpXG4gIGNvbnN0IGlzQWN0aXZlU3RyZWFtaW5nID0gISFpc1N0cmVhbWluZyB8fCBpc1N0cmVhbWluZ1BsYWNlaG9sZGVyXG4gIGNvbnN0IGlzVGhpbmtpbmcgPSBpc0FjdGl2ZVN0cmVhbWluZyAmJiAhc3RyZWFtaW5nVGV4dFxuICBpZiAoaXNUaGlua2luZykge1xuICAgIHJldHVybiBudWxsXG4gIH1cbiAgY29uc3QgbWVzc2FnZUF0dGFjaG1lbnRzID1cbiAgICBhdHRhY2htZW50cyAmJiBhdHRhY2htZW50cy5sZW5ndGggPiAwXG4gICAgICA/IGF0dGFjaG1lbnRzXG4gICAgICA6ICFpc0Fzc2lzdGFudCAmJiBBcnJheS5pc0FycmF5KHNvdXJjZXMpXG4gICAgICAgID8gKHNvdXJjZXMgYXMgQXR0YWNobWVudEZpbGVbXSlcbiAgICAgICAgOiBbXVxuXG4gIGNvbnN0IGhhbmRsZUF0dGFjaG1lbnRDbGljayA9IChhdHRhY2htZW50OiBBdHRhY2htZW50RmlsZSkgPT4ge1xuICAgIC8vIFBlcm1pdGlyIHByZXZpc3VhbGl6YWNpw7NuIHNpIHRpZW5lIGFyY2hpdm8gbG9jYWwgbyBVUkxzIGRlbCBiYWNrZW5kXG4gICAgaWYgKFxuICAgICAgYXR0YWNobWVudC5maWxlIGluc3RhbmNlb2YgRmlsZSB8fFxuICAgICAgYXR0YWNobWVudC5vcmlnaW5hbEZpbGUgaW5zdGFuY2VvZiBGaWxlIHx8XG4gICAgICBhdHRhY2htZW50LnVybF90aHVtYm5haWwgfHxcbiAgICAgIGF0dGFjaG1lbnQudXJsX29yaWdpbmFsIHx8XG4gICAgICBhdHRhY2htZW50LnVybF9maWxlXG4gICAgKSB7XG4gICAgICBzZXRQcmV2aWV3QXR0YWNobWVudChhdHRhY2htZW50KVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGhhbmRsZUNsb3NlUHJldmlldyA9ICgpID0+IHtcbiAgICBzZXRQcmV2aWV3QXR0YWNobWVudChudWxsKVxuICB9XG5cbiAgY29uc3QgaGFuZGxlQXR0YWNobWVudERvd25sb2FkID0gYXN5bmMgKGF0dGFjaG1lbnQ6IEF0dGFjaG1lbnRGaWxlKSA9PiB7XG4gICAgY29uc3QgZXh0ZW5zaW9uID0gYXR0YWNobWVudC5uYW1lLmluY2x1ZGVzKCcuJykgPyAnJyA6IGAuJHthdHRhY2htZW50LnR5cGV9YFxuICAgIGNvbnN0IGZpbGVOYW1lID0gYCR7YXR0YWNobWVudC5uYW1lfSR7ZXh0ZW5zaW9ufWBcbiAgICBjb25zdCBmaWxlVXJsID0gYXR0YWNobWVudC51cmxfb3JpZ2luYWwgfHwgYXR0YWNobWVudC51cmxfZmlsZSB8fCBhdHRhY2htZW50LnVybF90aHVtYm5haWxcblxuICAgIHRyeSB7XG4gICAgICBsZXQgYmxvYlVybDogc3RyaW5nIHwgbnVsbCA9IG51bGxcblxuICAgICAgaWYgKGZpbGVVcmwpIHtcbiAgICAgICAgY29uc3QgZG93bmxvYWRlZEZpbGUgPSBhd2FpdCBkb3dubG9hZEZpbGVGcm9tVXJsKGZpbGVVcmwsIGZpbGVOYW1lLCBhdHRhY2htZW50LnR5cGUpXG4gICAgICAgIGJsb2JVcmwgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKGRvd25sb2FkZWRGaWxlKVxuICAgICAgfSBlbHNlIGlmIChhdHRhY2htZW50LmZpbGUgaW5zdGFuY2VvZiBGaWxlKSB7XG4gICAgICAgIGJsb2JVcmwgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKGF0dGFjaG1lbnQuZmlsZSlcbiAgICAgIH1cblxuICAgICAgaWYgKCFibG9iVXJsKSByZXR1cm5cblxuICAgICAgY29uc3QgbGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKVxuICAgICAgbGluay5ocmVmID0gYmxvYlVybFxuICAgICAgbGluay5kb3dubG9hZCA9IGZpbGVOYW1lXG4gICAgICBsaW5rLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSdcbiAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQobGluaylcbiAgICAgIGxpbmsuY2xpY2soKVxuXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChsaW5rKVxuICAgICAgICBVUkwucmV2b2tlT2JqZWN0VVJMKGJsb2JVcmwpXG4gICAgICB9LCAxMDApXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0ZhaWxlZCB0byBkb3dubG9hZCBhdHRhY2htZW50JywgZXJyb3IpXG4gICAgfVxuICB9XG5cbiAgaWYgKGlzQ2hhbmdlUHJvamVjdCAmJiBvcHRpb25zKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxNZXNzYWdlV3JhcHBlciBrZXk9e2lkfSBpc0N1cnJlbnRVc2VyPXtpc0N1cnJlbnRVc2VyfSBkYXRhLW1lc3NhZ2UtaWQ9e2lkfSBoYXNGZWVkYmFjaz17ZmFsc2V9PlxuICAgICAgICA8U0NNZXNzYWdlSXRlbVdyYXBwZXIgJGlzQXNzaXN0YW50PXtpc0Fzc2lzdGFudH0+XG4gICAgICAgICAgPE1lc3NhZ2VDb250ZW50V3JhcHBlclxuICAgICAgICAgICAgaXNDaGFuZ2VQcm9qZWN0PXtpc0NoYW5nZVByb2plY3R9XG4gICAgICAgICAgICBtZXNzYWdlPXttZXNzYWdlfVxuICAgICAgICAgICAgaXNDdXJyZW50VXNlcj17aXNDdXJyZW50VXNlcn1cbiAgICAgICAgICAgIGlzRXJyb3I9e2lzRXJyb3J9XG4gICAgICAgICAgICBtZXNzYWdlRXh0cmFDb250ZW50PXs8TWVzc2FnZU9wdGlvbnMgb3B0aW9ucz17b3B0aW9ucyBhcyBhbnl9IGhhbmRsZVNlbGVjdE9wdGlvbj17aGFuZGxlU2VsZWN0T3B0aW9ufSAvPn1cbiAgICAgICAgICAvPlxuICAgICAgICA8L1NDTWVzc2FnZUl0ZW1XcmFwcGVyPlxuICAgICAgPC9NZXNzYWdlV3JhcHBlcj5cbiAgICApXG4gIH1cblxuICBjb25zdCBoYW5kbGVGZWVkYmFja0NsaWNrID0gKGZlZWRiYWNrOiBGZWVkYmFjaykgPT4ge1xuICAgIGNvbnN0IHNlc3Npb25JZCA9IGlkXG4gICAgICAuc3BsaXQoJy0nKVxuICAgICAgLmZpbHRlcihxdWVzdGlvbklkID0+IHF1ZXN0aW9uSWQgIT09ICdhbnN3ZXInKVxuICAgICAgLmpvaW4oJy0nKVxuICAgIGhhbmRsZUZlZWRiYWNrPy4oZmVlZGJhY2ssIHNlc3Npb25JZClcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPFNDTWVzc2FnZUl0ZW1XcmFwcGVyICRpc0Fzc2lzdGFudD17aXNBc3Npc3RhbnR9PlxuICAgICAgPFNDTWVzc2FnZUl0ZW1Jbm5lcj5cbiAgICAgICAgeyEhbWVzc2FnZUF0dGFjaG1lbnRzLmxlbmd0aCAmJiAoXG4gICAgICAgICAgPFNDQXR0YWNobWVudHNSb3cgJGlzQXNzaXN0YW50PXtpc0Fzc2lzdGFudH0+XG4gICAgICAgICAgICB7bWVzc2FnZUF0dGFjaG1lbnRzLm1hcCgoYXR0YWNobWVudCwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgLy8gRGV0ZWN0YXIgc2kgZXMgdW4gYXJjaGl2byBkZSBhdWRpb1xuICAgICAgICAgICAgICBjb25zdCBhdHRhY2htZW50VHlwZSA9IGF0dGFjaG1lbnQ/LnR5cGU/LnRvTG93ZXJDYXNlKCkgfHwgJydcbiAgICAgICAgICAgICAgY29uc3QgYXR0YWNobWVudE5hbWUgPSBhdHRhY2htZW50Py5uYW1lPy50b0xvd2VyQ2FzZSgpIHx8ICcnXG4gICAgICAgICAgICAgIGNvbnN0IGlzQXVkaW9GaWxlID1cbiAgICAgICAgICAgICAgICBhdHRhY2htZW50VHlwZS5zdGFydHNXaXRoKCdhdWRpby8nKSB8fFxuICAgICAgICAgICAgICAgIFsnZmxhYycsICdtNGEnLCAnbXAzJywgJ21wNCcsICdvZ2EnLCAnb2dnJywgJ3dhdicsICd3ZWJtJ10uaW5jbHVkZXMoYXR0YWNobWVudFR5cGUpIHx8XG4gICAgICAgICAgICAgICAgWycuZmxhYycsICcubTRhJywgJy5tcDMnLCAnLm1wNCcsICcub2dhJywgJy5vZ2cnLCAnLndhdicsICcud2VibSddLnNvbWUoZXh0ID0+XG4gICAgICAgICAgICAgICAgICBhdHRhY2htZW50TmFtZS5lbmRzV2l0aChleHQpXG4gICAgICAgICAgICAgICAgKVxuXG4gICAgICAgICAgICAgIGlmIChpc0F1ZGlvRmlsZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiA8QXR0YWNobWVudENhcmRBdWRpbyBrZXk9e2Ake2F0dGFjaG1lbnQuaWR9LSR7YXR0YWNobWVudC5uYW1lfWB9IGF0dGFjaG1lbnQ9e2F0dGFjaG1lbnR9IC8+XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgIDxBdHRhY2htZW50Q2FyZFxuICAgICAgICAgICAgICAgICAga2V5PXtgJHthdHRhY2htZW50LmlkfS0ke2F0dGFjaG1lbnQubmFtZX1gfVxuICAgICAgICAgICAgICAgICAgYXR0YWNobWVudD17YXR0YWNobWVudH1cbiAgICAgICAgICAgICAgICAgIHBvc2l0aW9uSW5kZXg9e2luZGV4fVxuICAgICAgICAgICAgICAgICAgb25Eb3dubG9hZD17KCkgPT4gaGFuZGxlQXR0YWNobWVudERvd25sb2FkKGF0dGFjaG1lbnQpfVxuICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gaGFuZGxlQXR0YWNobWVudENsaWNrKGF0dGFjaG1lbnQpfVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIH0pfVxuICAgICAgICAgIDwvU0NBdHRhY2htZW50c1Jvdz5cbiAgICAgICAgKX1cbiAgICAgICAgeyghIW1lc3NhZ2UgfHwgaXNBY3RpdmVTdHJlYW1pbmcpICYmICEoaXNBc3Npc3RhbnQgJiYgISFtZXNzYWdlQXR0YWNobWVudHMubGVuZ3RoKSAmJiAoXG4gICAgICAgICAgPFN0cmVhbWluZ01lc3NhZ2VCb2R5XG4gICAgICAgICAgICBtZXNzYWdlPXttZXNzYWdlID8/ICcnfVxuICAgICAgICAgICAgaXNTdHJlYW1pbmc9e2lzQWN0aXZlU3RyZWFtaW5nfVxuICAgICAgICAgICAgaXNDdXJyZW50VXNlcj17aXNDdXJyZW50VXNlcn1cbiAgICAgICAgICAgIGlzQXNzaXN0YW50PXtpc0Fzc2lzdGFudH1cbiAgICAgICAgICAgIGlzRnJvbnRlbmRDYW5jZWxsZWQ9e3Byb3BzLmlzRnJvbnRlbmRDYW5jZWxsZWR9XG4gICAgICAgICAgICBhcHByb3ZhbD17YXBwcm92YWx9XG4gICAgICAgICAgICBpc0Vycm9yPXtpc0Vycm9yfVxuICAgICAgICAgICAgc291cmNlcz17c291cmNlc31cbiAgICAgICAgICAgIHN1Z2dlc3Rpb25zPXtzdWdnZXN0aW9uc31cbiAgICAgICAgICAgIGNyZWF0ZUFnZW50Rm9sbG93VXA9e2NyZWF0ZUFnZW50Rm9sbG93VXB9XG4gICAgICAgICAgICBoYW5kbGVGZWVkYmFja0NsaWNrPXtoYW5kbGVGZWVkYmFja0NsaWNrfVxuICAgICAgICAgICAgZGlzYWJsZUZlZWRiYWNrPXtkaXNhYmxlRmVlZGJhY2sgPz8gbnVsbH1cbiAgICAgICAgICAgIGhhbmRsZVN1Z2dlc3Rpb25DbGljaz17aGFuZGxlU3VnZ2VzdGlvbkNsaWNrfVxuICAgICAgICAgICAgc3VnZ2VzdGlvbnNEaXNhYmxlZD17aXNBY3RpdmVTdHJlYW1pbmcgfHwgISFoYXNTZWxlY3RlZFN1Z2dlc3Rpb259XG4gICAgICAgICAgICBtZXNzYWdlSWQ9e2lkfVxuICAgICAgICAgICAgaXNMYXN0TWVzc2FnZT17aXNMYXN0TWVzc2FnZX1cbiAgICAgICAgICAvPlxuICAgICAgICApfVxuICAgICAgICB7YXBwcm92YWwgJiYgYXBwcm92YWwucGVuZGluZ19hY3Rpb25zICYmIChcbiAgICAgICAgICA8U0NBcHByb3ZhbEFjdGlvbnNDb2x1bW4+XG4gICAgICAgICAgICA8QXBwcm92YWxCb3hcbiAgICAgICAgICAgICAgYWN0aW9ucz17YXBwcm92YWwucGVuZGluZ19hY3Rpb25zfVxuICAgICAgICAgICAgICBzdGF0dXM9e2FwcHJvdmFsU3RhdHVzfVxuICAgICAgICAgICAgICBvbkFwcHJvdmU9e3RocmVhZElkcyA9PiBoYW5kbGVBcHByb3ZhbERlY2lzaW9uKHRocmVhZElkcywgJ2FwcHJvdmUnKX1cbiAgICAgICAgICAgICAgb25SZWplY3Q9e3RocmVhZElkcyA9PiBoYW5kbGVBcHByb3ZhbERlY2lzaW9uKHRocmVhZElkcywgJ3JlamVjdCcpfVxuICAgICAgICAgICAgICBpc1Byb2plY3REZWxldGVkPXtwcm9wcy5wcm9qZWN0TWV0YWRhdGE/LmlzX2RlbGV0ZWQgPT09IHRydWV9XG4gICAgICAgICAgICAgIGlzRXhwYW5kZWQ9e3Byb3BzLmV4cGFuZGVkfVxuICAgICAgICAgICAgICBoaXRsSW5zdGFuY2VJZD17YXBwcm92YWwub3JpZ2luYWxfdGhyZWFkX2lkfVxuICAgICAgICAgICAgICB3YXJuaW5nTWVzc2FnZT17YXBwcm92YWwud2FybmluZ19tZXNzYWdlfVxuICAgICAgICAgICAgICBtYW51YWxBcHByb3ZhbERldGVjdGVkPXthcHByb3ZhbC5tYW51YWxfYXBwcm92YWxfZGV0ZWN0ZWR9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvU0NBcHByb3ZhbEFjdGlvbnNDb2x1bW4+XG4gICAgICAgICl9XG4gICAgICA8L1NDTWVzc2FnZUl0ZW1Jbm5lcj5cbiAgICAgIDxBdHRhY2htZW50UHJldmlld01vZGFsXG4gICAgICAgIGlzT3Blbj17ISFwcmV2aWV3QXR0YWNobWVudH1cbiAgICAgICAgb25DbG9zZT17aGFuZGxlQ2xvc2VQcmV2aWV3fVxuICAgICAgICBhdHRhY2htZW50PXtwcmV2aWV3QXR0YWNobWVudH1cbiAgICAgIC8+XG4gICAgPC9TQ01lc3NhZ2VJdGVtV3JhcHBlcj5cbiAgKVxufSlcblxuY29uc3QgQ2hhdEFJTWVzc2FnZXNJbm5lciA9ICh7XG4gIHVzZXJJbml0aWFsTWVzc2FnZSxcbiAgaW5pdGlhbENoYXRJZCxcbiAgb25FcnJvcixcbiAgb25TZW5kTWVzc2FnZVJlYWR5LFxuICBvblNjcm9sbFRvQm90dG9tLFxuICBhdHRhY2htZW50cyxcbiAgYWdlbnRzLFxuICBleHBhbmRlZCxcbn06IENoYXRBSU1lc3NhZ2VzUHJvcHMpID0+IHtcbiAgY29uc3QgeyB0IH0gPSB1c2VUKClcbiAgY29uc3QgeyBpc1dlYlNlYXJjaEFjdGl2ZSwgaXNEZWVwU2VhcmNoQWN0aXZlLCBhZ2VudCB9ID0gdXNlR2xvYmFsQ29udGV4dCgpXG4gIGNvbnN0IGV2ZW50ID0gdXNlRXZlbnQoKVxuICBjb25zdCBhdXRoVXNlciA9IHVzZVVzZXIoKVxuICBjb25zdCBtZXNzYWdlc1JlZiA9IHVzZVJlZjxIVE1MRGl2RWxlbWVudD4obnVsbClcbiAgY29uc3QgY2hhdEluaXRpYWxpemVkUmVmID0gdXNlUmVmKGZhbHNlKVxuICBjb25zdCBpc0xvYWRpbmdNb3JlUmVmID0gdXNlUmVmKGZhbHNlKVxuICBjb25zdCB1c2VyU2Nyb2xsaW5nUmVmID0gdXNlUmVmKGZhbHNlKVxuICBjb25zdCBzY3JvbGxUaHJlc2hvbGRSZWYgPSB1c2VSZWYoMzkpXG4gIGNvbnN0IGxhc3RTY3JvbGxUb3BSZWYgPSB1c2VSZWYoMClcbiAgY29uc3Qgc2hvd1Njcm9sbFRvQm90dG9tUmVmID0gdXNlUmVmKGZhbHNlKVxuICBjb25zdCBzY3JvbGxSYWZSZWYgPSB1c2VSZWY8bnVtYmVyIHwgbnVsbD4obnVsbClcbiAgY29uc3Qgd2FzTG9hZGluZ01lc3NhZ2VzUmVmID0gdXNlUmVmKGZhbHNlKVxuICBjb25zdCBsYXN0U2Nyb2xsZWRTZXNzaW9uUmVmID0gdXNlUmVmPHN0cmluZyB8IG51bGw+KG51bGwpXG4gIGNvbnN0IFtzaG93U2Nyb2xsVG9Cb3R0b20sIHNldFNob3dTY3JvbGxUb0JvdHRvbV0gPSB1c2VTdGF0ZShmYWxzZSlcbiAgY29uc3QgW3NlbGVjdGVkU3VnZ2VzdGlvbk1lc3NhZ2VJZHMsIHNldFNlbGVjdGVkU3VnZ2VzdGlvbk1lc3NhZ2VJZHNdID0gdXNlU3RhdGU8UmVjb3JkPHN0cmluZywgYm9vbGVhbj4+KHt9KVxuXG4gIGNvbnN0IHtcbiAgICBtZXNzYWdlcyxcbiAgICBsb2FkaW5nTWVzc2FnZXMsXG4gICAgaXNMb2FkaW5nTW9yZU1lc3NhZ2VzLFxuICAgIHdhaXRpbmdSZXNwb25zZSxcbiAgICBpc1dyaXRpbmcsXG4gICAgbG9hZGluZ01lc3NhZ2UsXG4gICAgc3RyZWFtQWN0aXZpdHksXG4gICAgYWN0aXZlTG9hZGluZ3MsXG4gICAgc2VuZE1lc3NhZ2UsXG4gICAgY2hhbmdlUHJvamVjdCxcbiAgICBoYW5kbGVGZWVkYmFjayxcbiAgICBoYW5kbGVBcHByb3ZhbERlY2lzaW9uLFxuICAgIGluaXRpYWxpemVDaGF0LFxuICAgIGhhbmRsZVNjcm9sbCxcbiAgICBzdG9wR2VuZXJhdGlvbixcbiAgfSA9IHVzZUNoYXRNYW5hZ2VyKHtcbiAgICBjaGF0SWQ6IGluaXRpYWxDaGF0SWQgfHwgdW5kZWZpbmVkLFxuICAgIHVzZXJJbml0aWFsTWVzc2FnZSxcbiAgICBvbkVycm9yLFxuICAgIGF0dGFjaG1lbnRzLFxuICAgIGFnZW50cyxcbiAgfSlcblxuICBjb25zdCBoYW5kbGVTZWxlY3RPcHRpb24gPSB1c2VDYWxsYmFjayhcbiAgICAob3B0aW9uOiBQcm9qZWN0KSA9PiB7XG4gICAgICBjaGFuZ2VQcm9qZWN0KG9wdGlvbilcbiAgICB9LFxuICAgIFtjaGFuZ2VQcm9qZWN0XVxuICApXG5cbiAgY29uc3QgaGFuZGxlU3VnZ2VzdGlvbkNsaWNrID0gdXNlQ2FsbGJhY2soXG4gICAgKG1lc3NhZ2VJZDogc3RyaW5nLCBzdWdnZXN0aW9uOiBzdHJpbmcpID0+IHtcbiAgICAgIGlmICghc3VnZ2VzdGlvbj8udHJpbSgpKSByZXR1cm5cbiAgICAgIGlmIChzZWxlY3RlZFN1Z2dlc3Rpb25NZXNzYWdlSWRzW21lc3NhZ2VJZF0pIHJldHVyblxuICAgICAgY29uc3QgaXNNYXJrZXRwbGFjZUdsb2JhbEFnZW50ID0gaXNNYWlha2VyQWdlbnQoYWdlbnQpXG4gICAgICBldmVudChFVkVOVFMuYWlDaGF0U3VnZ2VzdGVkQW5zd2VyLCB7XG4gICAgICAgIGFnZW50X3R5cGU6IGlzTWFya2V0cGxhY2VHbG9iYWxBZ2VudCA/ICdtYXJrZXRwbGFjZScgOiBhZ2VudD8udHlwZSxcbiAgICAgIH0pXG4gICAgICBzZXRTZWxlY3RlZFN1Z2dlc3Rpb25NZXNzYWdlSWRzKHByZXYgPT4gKHsgLi4ucHJldiwgW21lc3NhZ2VJZF06IHRydWUgfSkpXG5cbiAgICAgIGNvbnN0IHRhcmdldE1lc3NhZ2UgPSBtZXNzYWdlcy5maW5kKG1zZyA9PiBtc2cuaWQgPT09IG1lc3NhZ2VJZClcbiAgICAgIGNvbnN0IGlzUmV0cnlTdWdnZXN0aW9uID0gISF0YXJnZXRNZXNzYWdlPy5pc0Vycm9yICYmIHN1Z2dlc3Rpb24gPT09IHQoJ2NoYXQucmV0cnknKVxuICAgICAgaWYgKGlzUmV0cnlTdWdnZXN0aW9uKSB7XG4gICAgICAgIGNvbnN0IGxhc3RVc2VyTWVzc2FnZSA9IG1lc3NhZ2VzXG4gICAgICAgICAgLmZpbHRlcihtc2cgPT4gbXNnLnJvbGUgPT09IENoYXRIaXN0b3J5Um9sZS5VU0VSIHx8IG1zZy51c2VyLmlkID09PSBhdXRoVXNlci5pZC50b1N0cmluZygpKVxuICAgICAgICAgIC5hdCgtMSlcbiAgICAgICAgaWYgKGxhc3RVc2VyTWVzc2FnZT8ubWVzc2FnZSkge1xuICAgICAgICAgIGNvbnN0IHJldHJ5QXR0YWNobWVudHMgPSBBcnJheS5pc0FycmF5KGxhc3RVc2VyTWVzc2FnZS5hdHRhY2htZW50cylcbiAgICAgICAgICAgID8gbGFzdFVzZXJNZXNzYWdlLmF0dGFjaG1lbnRzXG4gICAgICAgICAgICA6IEFycmF5LmlzQXJyYXkobGFzdFVzZXJNZXNzYWdlLnNvdXJjZXMpXG4gICAgICAgICAgICAgID8gbGFzdFVzZXJNZXNzYWdlLnNvdXJjZXNcbiAgICAgICAgICAgICAgOiBbXVxuICAgICAgICAgIHNlbmRNZXNzYWdlKGxhc3RVc2VyTWVzc2FnZS5tZXNzYWdlLCByZXRyeUF0dGFjaG1lbnRzKVxuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHNlbmRNZXNzYWdlKHN1Z2dlc3Rpb24pXG4gICAgfSxcbiAgICBbXG4gICAgICBzZW5kTWVzc2FnZSxcbiAgICAgIHNlbGVjdGVkU3VnZ2VzdGlvbk1lc3NhZ2VJZHMsXG4gICAgICBldmVudCxcbiAgICAgIGFnZW50Py5lbnRpdHksXG4gICAgICBhZ2VudD8ubmFtZSxcbiAgICAgIGFnZW50Py50eXBlLFxuICAgICAgbWVzc2FnZXMsXG4gICAgICB0LFxuICAgICAgYXV0aFVzZXIuaWQsXG4gICAgXVxuICApXG5cbiAgLyoqXG4gICAqIEFjdHVhbGl6YSBlbCBlc3RhZG8gZGVsIGJvdMOzbiBcInNjcm9sbCB0byBib3R0b21cIiBjb21wYXJhbmRvIGxhIHBvc2ljacOzblxuICAgKiBhY3R1YWwgZGVsIHNjcm9sbCBjb24gZWwgZm9uZG8uIFVzYSB1biByZWYgcGFyYSBldml0YXIgYHNldFN0YXRlYCBjdWFuZG9cbiAgICogZWwgdmFsb3Igbm8gY2FtYmlhLlxuICAgKi9cbiAgY29uc3QgdXBkYXRlU2Nyb2xsQm90dG9tVmlzaWJpbGl0eSA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBjb25zdCBlbCA9IG1lc3NhZ2VzUmVmLmN1cnJlbnRcbiAgICBpZiAoIWVsKSByZXR1cm5cbiAgICBjb25zdCB7IHNjcm9sbFRvcCwgc2Nyb2xsSGVpZ2h0LCBjbGllbnRIZWlnaHQgfSA9IGVsXG4gICAgY29uc3QgZGlzdGFuY2VGcm9tQm90dG9tID0gc2Nyb2xsSGVpZ2h0IC0gc2Nyb2xsVG9wIC0gY2xpZW50SGVpZ2h0XG4gICAgY29uc3Qgc2hvdWxkU2hvdyA9IGRpc3RhbmNlRnJvbUJvdHRvbSA+IDUwXG4gICAgaWYgKHNob3dTY3JvbGxUb0JvdHRvbVJlZi5jdXJyZW50ICE9PSBzaG91bGRTaG93KSB7XG4gICAgICBzaG93U2Nyb2xsVG9Cb3R0b21SZWYuY3VycmVudCA9IHNob3VsZFNob3dcbiAgICAgIHNldFNob3dTY3JvbGxUb0JvdHRvbShzaG91bGRTaG93KVxuICAgIH1cbiAgfSwgW10pXG5cbiAgLyoqXG4gICAqIFNjcm9sbCBpbm1lZGlhdG8gYWwgZm9uZG8gKGRlbnRybyBkZSByQUYgcGFyYSBjb29yZGluYXIgY29uIGVsIHBhaW50KVxuICAgKiB5IGFjdHVhbGl6YSBsYSB2aXNpYmlsaWRhZCBkZWwgYm90w7NuLiBSZXNwZXRhIGBza2lwSWZVc2VyU2Nyb2xsaW5nYCBwYXJhXG4gICAqIG5vIHNvYnJlc2NyaWJpciBlbCBzY3JvbGwgbWFudWFsIGRlbCB1c3VhcmlvIGR1cmFudGUgZWwgc3RyZWFtaW5nLlxuICAgKi9cbiAgY29uc3Qgc2Nyb2xsVG9Cb3R0b21SYWYgPSB1c2VDYWxsYmFjayhcbiAgICAob3B0czogeyBza2lwSWZVc2VyU2Nyb2xsaW5nPzogYm9vbGVhbjsgZGVsYXlNcz86IG51bWJlciB9ID0ge30pID0+IHtcbiAgICAgIGNvbnN0IHsgc2tpcElmVXNlclNjcm9sbGluZyA9IGZhbHNlLCBkZWxheU1zID0gMCB9ID0gb3B0c1xuICAgICAgY29uc3QgcnVuID0gKCkgPT4ge1xuICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGVsID0gbWVzc2FnZXNSZWYuY3VycmVudFxuICAgICAgICAgIGlmICghZWwpIHJldHVyblxuICAgICAgICAgIGlmIChza2lwSWZVc2VyU2Nyb2xsaW5nICYmIHVzZXJTY3JvbGxpbmdSZWYuY3VycmVudCkgcmV0dXJuXG4gICAgICAgICAgZWwuc2Nyb2xsVG9wID0gZWwuc2Nyb2xsSGVpZ2h0XG4gICAgICAgICAgdXBkYXRlU2Nyb2xsQm90dG9tVmlzaWJpbGl0eSgpXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgICBpZiAoZGVsYXlNcyA+IDApIHNldFRpbWVvdXQocnVuLCBkZWxheU1zKVxuICAgICAgZWxzZSBydW4oKVxuICAgIH0sXG4gICAgW3VwZGF0ZVNjcm9sbEJvdHRvbVZpc2liaWxpdHldXG4gIClcblxuICBjb25zdCBoYW5kbGVDbGlja1Njcm9sbFRvQm90dG9tID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGlmICghbWVzc2FnZXNSZWYuY3VycmVudCkgcmV0dXJuXG4gICAgbWVzc2FnZXNSZWYuY3VycmVudC5zY3JvbGxUbyh7XG4gICAgICB0b3A6IG1lc3NhZ2VzUmVmLmN1cnJlbnQuc2Nyb2xsSGVpZ2h0LFxuICAgICAgYmVoYXZpb3I6ICdzbW9vdGgnLFxuICAgIH0pXG4gICAgLy8gRGFyIHRpZW1wbyBhbCBzbW9vdGgtc2Nyb2xsIGFudGVzIGRlIHJlY2FsY3VsYXIgbGEgdmlzaWJpbGlkYWQgZGVsIGJvdMOzbi5cbiAgICBzZXRUaW1lb3V0KHVwZGF0ZVNjcm9sbEJvdHRvbVZpc2liaWxpdHksIDUwMClcbiAgfSwgW3VwZGF0ZVNjcm9sbEJvdHRvbVZpc2liaWxpdHldKVxuXG4gIC8vIEFsIGRlY2lkaXIgZW4gZWwgQXBwcm92YWxCb3g6IGVsIGJveCBjb2xhcHNhIChib3RvbmVzIC0+IGJhZGdlKSB5IGVsIHN0cmVhbVxuICAvLyBjb250aW7DumEgYWJham8uIFJlYWN0aXZhciBlbCBhdXRvLXNjcm9sbCB5IHNlZ3VpciBlbCBmb25kbyBwYXJhIHF1ZSBsYSB2aXN0YVxuICAvLyBubyBxdWVkZSBhdHLDoXMgKGV2aXRhIHF1ZSBhcGFyZXpjYSBsYSBmbGVjaGEgZGUgc2Nyb2xsLXRvLWJvdHRvbSkuXG4gIGNvbnN0IGhhbmRsZUFwcHJvdmFsRGVjaXNpb25XaXRoU2Nyb2xsID0gdXNlQ2FsbGJhY2soXG4gICAgKC4uLmFyZ3M6IFBhcmFtZXRlcnM8dHlwZW9mIGhhbmRsZUFwcHJvdmFsRGVjaXNpb24+KSA9PiB7XG4gICAgICB1c2VyU2Nyb2xsaW5nUmVmLmN1cnJlbnQgPSBmYWxzZVxuICAgICAgc2Nyb2xsVGhyZXNob2xkUmVmLmN1cnJlbnQgPSAzOVxuICAgICAgaGFuZGxlQXBwcm92YWxEZWNpc2lvbiguLi5hcmdzKVxuICAgICAgc2Nyb2xsVG9Cb3R0b21SYWYoKVxuICAgICAgc2Nyb2xsVG9Cb3R0b21SYWYoeyBkZWxheU1zOiAxMDAgfSlcbiAgICB9LFxuICAgIFtoYW5kbGVBcHByb3ZhbERlY2lzaW9uLCBzY3JvbGxUb0JvdHRvbVJhZl1cbiAgKVxuXG4gIGNvbnN0IGhhbmRsZVNjcm9sbFRvQm90dG9tID0gdXNlQ2FsbGJhY2soXG4gICAgKGU6IFJlYWN0LlVJRXZlbnQ8SFRNTERpdkVsZW1lbnQ+KSA9PiB7XG4gICAgICBjb25zdCBjb250YWluZXIgPSBlLmN1cnJlbnRUYXJnZXRcblxuICAgICAgaWYgKHNjcm9sbFJhZlJlZi5jdXJyZW50ICE9PSBudWxsKSB7XG4gICAgICAgIGNhbmNlbEFuaW1hdGlvbkZyYW1lKHNjcm9sbFJhZlJlZi5jdXJyZW50KVxuICAgICAgfVxuXG4gICAgICBzY3JvbGxSYWZSZWYuY3VycmVudCA9IHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICAgIHNjcm9sbFJhZlJlZi5jdXJyZW50ID0gbnVsbFxuICAgICAgICBjb25zdCB7IHNjcm9sbFRvcCwgc2Nyb2xsSGVpZ2h0LCBjbGllbnRIZWlnaHQgfSA9IGNvbnRhaW5lclxuXG4gICAgICAgIGNvbnN0IGlzU2Nyb2xsaW5nVXAgPSBzY3JvbGxUb3AgPCBsYXN0U2Nyb2xsVG9wUmVmLmN1cnJlbnRcblxuICAgICAgICBpZiAoaXNTY3JvbGxpbmdVcCkge1xuICAgICAgICAgIHNjcm9sbFRocmVzaG9sZFJlZi5jdXJyZW50ID0gMTVcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGlzTmVhckJvdHRvbSA9IHNjcm9sbEhlaWdodCAtIHNjcm9sbFRvcCAtIGNsaWVudEhlaWdodCA8IHNjcm9sbFRocmVzaG9sZFJlZi5jdXJyZW50XG5cbiAgICAgICAgaWYgKGlzTmVhckJvdHRvbSkge1xuICAgICAgICAgIHNjcm9sbFRocmVzaG9sZFJlZi5jdXJyZW50ID0gMzlcbiAgICAgICAgfVxuXG4gICAgICAgIHVzZXJTY3JvbGxpbmdSZWYuY3VycmVudCA9ICFpc05lYXJCb3R0b21cbiAgICAgICAgbGFzdFNjcm9sbFRvcFJlZi5jdXJyZW50ID0gc2Nyb2xsVG9wXG5cbiAgICAgICAgdXBkYXRlU2Nyb2xsQm90dG9tVmlzaWJpbGl0eSgpXG5cbiAgICAgICAgaWYgKGlzTmVhckJvdHRvbSAmJiBvblNjcm9sbFRvQm90dG9tKSB7XG4gICAgICAgICAgb25TY3JvbGxUb0JvdHRvbSgpXG4gICAgICAgIH1cblxuICAgICAgICBoYW5kbGVTY3JvbGwoY29udGFpbmVyKVxuICAgICAgfSlcbiAgICB9LFxuICAgIFtvblNjcm9sbFRvQm90dG9tLCBoYW5kbGVTY3JvbGwsIHVwZGF0ZVNjcm9sbEJvdHRvbVZpc2liaWxpdHldXG4gIClcblxuICAvLyByZWZzIHRvIHN0YWJpbGl6ZSBmdW5jdGlvbnMgYW5kIGF2b2lkIHVubmVjZXNzYXJ5IHJlLXJlbmRlcnNcbiAgY29uc3Qgc2VuZE1lc3NhZ2VSZWYgPSB1c2VSZWYoc2VuZE1lc3NhZ2UpXG4gIGNvbnN0IHN0b3BHZW5lcmF0aW9uUmVmID0gdXNlUmVmKHN0b3BHZW5lcmF0aW9uKVxuICBjb25zdCBvblNlbmRNZXNzYWdlUmVhZHlSZWYgPSB1c2VSZWYob25TZW5kTWVzc2FnZVJlYWR5KVxuICBjb25zdCBzZW5kTWVzc2FnZVByb3h5UmVmID0gdXNlUmVmKFxuICAgIChcbiAgICAgIG1lc3NhZ2U6IHN0cmluZyxcbiAgICAgIGF0dGFjaG1lbnRzPzogQXR0YWNobWVudEZpbGVbXSxcbiAgICAgIGZhcUlkPzogc3RyaW5nLFxuICAgICAgYWdlbnRTdWdnZXN0aW9uSWQ/OiBzdHJpbmcsXG4gICAgICBtZW50aW9ucz86IENvbnRleHRNZW50aW9uW10sXG4gICAgICBmdWFJZD86IHN0cmluZyxcbiAgICAgIHNjSWQ/OiBzdHJpbmdcbiAgICApID0+IHNlbmRNZXNzYWdlUmVmLmN1cnJlbnQobWVzc2FnZSwgYXR0YWNobWVudHMsIGZhcUlkLCBhZ2VudFN1Z2dlc3Rpb25JZCwgbWVudGlvbnMsIGZ1YUlkLCBzY0lkKVxuICApXG4gIGNvbnN0IHN0b3BHZW5lcmF0aW9uUHJveHlSZWYgPSB1c2VSZWYoKCkgPT4gc3RvcEdlbmVyYXRpb25SZWYuY3VycmVudCgpKVxuXG4gIC8vIHVwZGF0ZSByZWZzIHdoZW4gZnVuY3Rpb25zIGNoYW5nZVxuICBzZW5kTWVzc2FnZVJlZi5jdXJyZW50ID0gc2VuZE1lc3NhZ2VcbiAgc3RvcEdlbmVyYXRpb25SZWYuY3VycmVudCA9IHN0b3BHZW5lcmF0aW9uXG4gIG9uU2VuZE1lc3NhZ2VSZWFkeVJlZi5jdXJyZW50ID0gb25TZW5kTWVzc2FnZVJlYWR5XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAob25TZW5kTWVzc2FnZVJlYWR5UmVmLmN1cnJlbnQpIHtcbiAgICAgIG9uU2VuZE1lc3NhZ2VSZWFkeVJlZi5jdXJyZW50KFxuICAgICAgICBzZW5kTWVzc2FnZVByb3h5UmVmLmN1cnJlbnQsXG4gICAgICAgIHN0b3BHZW5lcmF0aW9uUHJveHlSZWYuY3VycmVudCxcbiAgICAgICAgd2FpdGluZ1Jlc3BvbnNlLFxuICAgICAgICBpc1dyaXRpbmdcbiAgICAgIClcbiAgICB9XG4gIH0sIFt3YWl0aW5nUmVzcG9uc2UsIGlzV3JpdGluZ10pXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpc0xvYWRpbmdNb3JlUmVmLmN1cnJlbnQgPSBpc0xvYWRpbmdNb3JlTWVzc2FnZXNcbiAgfSwgW2lzTG9hZGluZ01vcmVNZXNzYWdlc10pXG5cbiAgLy8gQ3VhbmRvIGVsIGFnZW50ZSBlbXBpZXphIGEgcmVzcG9uZGVyLCByZXNldGVhciBlbCBmbGFnIHkgZWwgdW1icmFsIHBhcmEgYWN0aXZhciBlbCBhdXRvLXNjcm9sbFxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICh3YWl0aW5nUmVzcG9uc2UpIHtcbiAgICAgIHVzZXJTY3JvbGxpbmdSZWYuY3VycmVudCA9IGZhbHNlXG4gICAgICBzY3JvbGxUaHJlc2hvbGRSZWYuY3VycmVudCA9IDM5XG4gICAgfVxuICB9LCBbd2FpdGluZ1Jlc3BvbnNlXSlcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghY2hhdEluaXRpYWxpemVkUmVmLmN1cnJlbnQpIHtcbiAgICAgIGNoYXRJbml0aWFsaXplZFJlZi5jdXJyZW50ID0gdHJ1ZVxuICAgICAgaW5pdGlhbGl6ZUNoYXQoKVxuICAgIH1cbiAgfSwgW10pXG5cbiAgLy8gQXV0b3Njcm9sbCBtaWVudHJhcyBlbCB0ZXh0byBkZWwgc3RyZWFtIGNyZWNlLiBFbCB0ZXh0byBzZSBwaW50YSBhbCByaXRtb1xuICAvLyBkZSBgdXNlU21vb3RoU3RyZWFtVGV4dGAgKH42MGZwcyksIG5vIGFsIHJpdG1vIGRlIGxsZWdhZGEgZGUgdG9rZW5zIGRlbFxuICAvLyBiYWNrZW5kOiBwb3IgZXNvIGFjw6EgdXNhbW9zIHVuIGxvb3AgZGUgckFGIHF1ZSBjb21wYXJhIGBzY3JvbGxIZWlnaHRgXG4gIC8vIGNvbnRyYSBlbCDDumx0aW1vIHZhbG9yIG9ic2VydmFkbyB5IGFqdXN0YSBzb2xvIGN1YW5kbyBjYW1iaWEuIEFzw60gZWxcbiAgLy8gc2Nyb2xsIHF1ZWRhIHBlcmZlY3RhbWVudGUgc2luY3Jvbml6YWRvIGNvbiBsYSBhbmltYWNpw7NuIGRlbCB0ZXh0byBzaW5cbiAgLy8gZGVwZW5kZXIgZGUgbGEgY2FkZW5jaWEgZGVsIHN0cmVhbWluZ1N0b3JlLlxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghd2FpdGluZ1Jlc3BvbnNlICYmICFpc1dyaXRpbmcpIHJldHVybiB1bmRlZmluZWRcbiAgICBpZiAoIW1lc3NhZ2VzUmVmLmN1cnJlbnQpIHJldHVybiB1bmRlZmluZWRcblxuICAgIGxldCByYWZJZDogbnVtYmVyIHwgbnVsbCA9IG51bGxcbiAgICBsZXQgbGFzdEhlaWdodCA9IG1lc3NhZ2VzUmVmLmN1cnJlbnQuc2Nyb2xsSGVpZ2h0XG5cbiAgICBjb25zdCB0aWNrID0gKCkgPT4ge1xuICAgICAgY29uc3QgZWwgPSBtZXNzYWdlc1JlZi5jdXJyZW50XG4gICAgICBpZiAoIWVsKSB7XG4gICAgICAgIHJhZklkID0gbnVsbFxuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICAgIGNvbnN0IGN1cnJlbnRIZWlnaHQgPSBlbC5zY3JvbGxIZWlnaHRcbiAgICAgIGlmIChjdXJyZW50SGVpZ2h0ICE9PSBsYXN0SGVpZ2h0KSB7XG4gICAgICAgIGxhc3RIZWlnaHQgPSBjdXJyZW50SGVpZ2h0XG4gICAgICAgIGlmICghdXNlclNjcm9sbGluZ1JlZi5jdXJyZW50KSB7XG4gICAgICAgICAgZWwuc2Nyb2xsVG9wID0gY3VycmVudEhlaWdodFxuICAgICAgICB9XG4gICAgICAgIHVwZGF0ZVNjcm9sbEJvdHRvbVZpc2liaWxpdHkoKVxuICAgICAgfVxuICAgICAgcmFmSWQgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUodGljaylcbiAgICB9XG5cbiAgICByYWZJZCA9IHJlcXVlc3RBbmltYXRpb25GcmFtZSh0aWNrKVxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBpZiAocmFmSWQgIT0gbnVsbCkgY2FuY2VsQW5pbWF0aW9uRnJhbWUocmFmSWQpXG4gICAgfVxuICB9LCBbd2FpdGluZ1Jlc3BvbnNlLCBpc1dyaXRpbmcsIHVwZGF0ZVNjcm9sbEJvdHRvbVZpc2liaWxpdHldKVxuXG4gIC8vIEFsIGNvbWVuemFyIGEgZXNwZXJhciBsYSByZXNwdWVzdGEgZGVsIGJhY2tlbmQsIHNjcm9sbCBpbmljaWFsIGFsIGZvbmRvLlxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICh3YWl0aW5nUmVzcG9uc2UgJiYgbWVzc2FnZXNSZWYuY3VycmVudCkge1xuICAgICAgc2Nyb2xsVG9Cb3R0b21SYWYoeyBza2lwSWZVc2VyU2Nyb2xsaW5nOiB0cnVlIH0pXG4gICAgfVxuICB9LCBbd2FpdGluZ1Jlc3BvbnNlLCBzY3JvbGxUb0JvdHRvbVJhZl0pXG5cbiAgLy8gU2Nyb2xsIGN1YW5kbyBjYW1iaWFuIGxvcyBtZW5zYWplczogZGlzdGluZ3VlIFwibnVldm8gbWVuc2FqZVwiIChhZ3JlZ2FkbylcbiAgLy8gZGUgXCJyZWVtcGxhem9cIiAobWlzbW8gaWQvbGVuZ3RoLCBlai4gZmVlZGJhY2sgbyBhcHByb3ZhbFN0YXR1cykuIEVuXG4gIC8vIHJlZW1wbGF6b3Mgc29sbyBzZSByZWNhbGN1bGEgbGEgdmlzaWJpbGlkYWQgZGVsIGJvdMOzbiBzaW4gZm9yemFyIHNjcm9sbC5cbiAgY29uc3QgbGFzdE1lc3NhZ2VJZFJlZiA9IHVzZVJlZjxzdHJpbmcgfCBudWxsPihudWxsKVxuICBjb25zdCBsYXN0TWVzc2FnZXNMZW5ndGhSZWYgPSB1c2VSZWY8bnVtYmVyPigwKVxuXG4gIC8vIEFsIGNhbWJpYXIgZGUgc2VzacOzbiwgcmVzZXRlYXIgZXN0YWRvIGRlIHNjcm9sbCBtYW51YWwgcGFyYSBubyBoZXJlZGFyIGVsIGNoYXQgYW50ZXJpb3IuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgd2FzTG9hZGluZ01lc3NhZ2VzUmVmLmN1cnJlbnQgPSBmYWxzZVxuICAgIGxhc3RTY3JvbGxlZFNlc3Npb25SZWYuY3VycmVudCA9IG51bGxcbiAgICB1c2VyU2Nyb2xsaW5nUmVmLmN1cnJlbnQgPSBmYWxzZVxuICAgIHNjcm9sbFRocmVzaG9sZFJlZi5jdXJyZW50ID0gMzlcbiAgICBsYXN0U2Nyb2xsVG9wUmVmLmN1cnJlbnQgPSAwXG4gICAgbGFzdE1lc3NhZ2VJZFJlZi5jdXJyZW50ID0gbnVsbFxuICAgIGxhc3RNZXNzYWdlc0xlbmd0aFJlZi5jdXJyZW50ID0gMFxuICB9LCBbaW5pdGlhbENoYXRJZF0pXG5cbiAgLy8gUmVzdGF1cmFjacOzbiBkZXNkZSBjYWNoZSAoc2luIExvYWRlcik6IGJhamFyIGFsIGZvbmRvIGFsIHJlYWJyaXIgc2VzacOzbiB2aXNpdGFkYS5cbiAgdXNlTGF5b3V0RWZmZWN0KCgpID0+IHtcbiAgICBpZiAobG9hZGluZ01lc3NhZ2VzIHx8ICFpbml0aWFsQ2hhdElkIHx8IG1lc3NhZ2VzLmxlbmd0aCA9PT0gMCkgcmV0dXJuXG4gICAgaWYgKGxhc3RTY3JvbGxlZFNlc3Npb25SZWYuY3VycmVudCA9PT0gaW5pdGlhbENoYXRJZCkgcmV0dXJuXG4gICAgbGFzdFNjcm9sbGVkU2Vzc2lvblJlZi5jdXJyZW50ID0gaW5pdGlhbENoYXRJZFxuXG4gICAgdXNlclNjcm9sbGluZ1JlZi5jdXJyZW50ID0gZmFsc2VcbiAgICBzY3JvbGxUaHJlc2hvbGRSZWYuY3VycmVudCA9IDM5XG4gICAgbGFzdE1lc3NhZ2VJZFJlZi5jdXJyZW50ID0gbWVzc2FnZXNbbWVzc2FnZXMubGVuZ3RoIC0gMV0/LmlkID8/IG51bGxcbiAgICBsYXN0TWVzc2FnZXNMZW5ndGhSZWYuY3VycmVudCA9IG1lc3NhZ2VzLmxlbmd0aFxuXG4gICAgc2Nyb2xsVG9Cb3R0b21SYWYoKVxuICAgIHNjcm9sbFRvQm90dG9tUmFmKHsgZGVsYXlNczogMTAwIH0pXG4gIH0sIFtpbml0aWFsQ2hhdElkLCBsb2FkaW5nTWVzc2FnZXMsIG1lc3NhZ2VzLmxlbmd0aCwgbWVzc2FnZXMsIHNjcm9sbFRvQm90dG9tUmFmXSlcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghbWVzc2FnZXNSZWYuY3VycmVudCB8fCBsb2FkaW5nTWVzc2FnZXMgfHwgaXNMb2FkaW5nTW9yZU1lc3NhZ2VzIHx8IGlzTG9hZGluZ01vcmVSZWYuY3VycmVudCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY29uc3QgbGFzdE1lc3NhZ2UgPSBtZXNzYWdlc1ttZXNzYWdlcy5sZW5ndGggLSAxXVxuICAgIGNvbnN0IGxhc3RJZCA9IGxhc3RNZXNzYWdlPy5pZCA/PyBudWxsXG4gICAgY29uc3QgcHJldklkID0gbGFzdE1lc3NhZ2VJZFJlZi5jdXJyZW50XG4gICAgY29uc3QgcHJldkxlbiA9IGxhc3RNZXNzYWdlc0xlbmd0aFJlZi5jdXJyZW50XG4gICAgbGFzdE1lc3NhZ2VJZFJlZi5jdXJyZW50ID0gbGFzdElkXG4gICAgbGFzdE1lc3NhZ2VzTGVuZ3RoUmVmLmN1cnJlbnQgPSBtZXNzYWdlcy5sZW5ndGhcblxuICAgIGNvbnN0IGlzTmV3TWVzc2FnZSA9IGxhc3RJZCAhPT0gcHJldklkIHx8IG1lc3NhZ2VzLmxlbmd0aCAhPT0gcHJldkxlblxuICAgIGlmICghaXNOZXdNZXNzYWdlKSB7XG4gICAgICB1cGRhdGVTY3JvbGxCb3R0b21WaXNpYmlsaXR5KClcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IGNvbnRhaW5lciA9IG1lc3NhZ2VzUmVmLmN1cnJlbnRcbiAgICBjb25zdCBpc0F0Qm90dG9tID0gY29udGFpbmVyLnNjcm9sbEhlaWdodCAtIGNvbnRhaW5lci5zY3JvbGxUb3AgPD0gY29udGFpbmVyLmNsaWVudEhlaWdodCArIDEwMFxuICAgIGNvbnN0IGhhc0luaXRpYWxNZXNzYWdlID0gbWVzc2FnZXMuc29tZShtc2cgPT4gbXNnLmlkID09PSAndXNlci1pbml0aWFsLW1lc3NhZ2UnKVxuICAgIGNvbnN0IGlzQXBwcm92YWwgPSAhIWxhc3RNZXNzYWdlICYmIChsYXN0TWVzc2FnZS5pZC5zdGFydHNXaXRoKCdhcHByb3ZhbC0nKSB8fCAhIWxhc3RNZXNzYWdlLmFwcHJvdmFsKVxuICAgIGNvbnN0IGlzQW5zd2VyT3JRdWVzdGlvbiA9XG4gICAgICAhIWxhc3RNZXNzYWdlICYmIChsYXN0TWVzc2FnZS5pZC5zdGFydHNXaXRoKCdhbnN3ZXItJykgfHwgbGFzdE1lc3NhZ2UuaWQuc3RhcnRzV2l0aCgncXVlc3Rpb24tJykpXG5cbiAgICAvLyBBcHByb3ZhbDogc2VjdWVuY2lhIGRlIHNjcm9sbHMgY29uIGRlbGF5IHBvcnF1ZSBlbCBBcHByb3ZhbEJveCBuZWNlc2l0YVxuICAgIC8vIHVuIHRpY2sgcGFyYSBtZWRpcnNlLiBTY3JvbGxlYSBhdW5xdWUgZWwgdXN1YXJpbyBubyBlc3TDqSBhbCBmb25kbyBzaSBub1xuICAgIC8vIGVzdMOhIHNjcm9sbGVhbmRvIG1hbnVhbG1lbnRlLlxuICAgIGlmIChpc0FwcHJvdmFsICYmIChpc0F0Qm90dG9tIHx8ICF1c2VyU2Nyb2xsaW5nUmVmLmN1cnJlbnQpKSB7XG4gICAgICBzY3JvbGxUb0JvdHRvbVJhZigpXG4gICAgICBzY3JvbGxUb0JvdHRvbVJhZigpXG4gICAgICBzY3JvbGxUb0JvdHRvbVJhZih7IGRlbGF5TXM6IDEwMCB9KVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgLy8gTnVldm9zIGFuc3dlci9xdWVzdGlvbjogc2Nyb2xsIHNpIGVsIHVzdWFyaW8geWEgZXN0YWJhIGFsIGZvbmRvLlxuICAgIGlmIChpc0Fuc3dlck9yUXVlc3Rpb24gJiYgaXNBdEJvdHRvbSkge1xuICAgICAgc2Nyb2xsVG9Cb3R0b21SYWYoKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgLy8gQ2FzbyBib3JkZTogY2FtYmlvcyBkZSBtZW5zYWplcyBzaW4gc2VyIG51ZXZvIGFuc3dlci91c2VyL2FwcHJvdmFsXG4gICAgLy8gcGVybyBzw60gdW4gbWVuc2FqZSBudWV2byAobm8gZWwgXCJ1c2VyLWluaXRpYWwtbWVzc2FnZVwiKS4gU2Nyb2xsZWEuXG4gICAgaWYgKCFpc0Fuc3dlck9yUXVlc3Rpb24gJiYgIWlzQXBwcm92YWwgJiYgIWhhc0luaXRpYWxNZXNzYWdlICYmIG1lc3NhZ2VzLmxlbmd0aCA+IHByZXZMZW4pIHtcbiAgICAgIHNjcm9sbFRvQm90dG9tUmFmKClcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIHVwZGF0ZVNjcm9sbEJvdHRvbVZpc2liaWxpdHkoKVxuICB9LCBbbWVzc2FnZXMsIGxvYWRpbmdNZXNzYWdlcywgaXNMb2FkaW5nTW9yZU1lc3NhZ2VzLCBzY3JvbGxUb0JvdHRvbVJhZiwgdXBkYXRlU2Nyb2xsQm90dG9tVmlzaWJpbGl0eV0pXG5cbiAgLy8gQWwgYWJyaXIvY2FyZ2FyIHVuYSBjb252ZXJzYWNpw7NuIGVsIGNvbnRlbmVkb3Igc2UgcmVtb250YSAoTG9hZGVyIOKGkiBsaXN0YSkgY29uXG4gIC8vIHNjcm9sbFRvcD0wLiBGb3J6YW1vcyBpciBhbCBmb25kbyBhbCB0ZXJtaW5hciBsb2FkTWVzc2FnZXMsIHNpbiBhZmVjdGFyIHBhZ2luYWNpw7NuIGhhY2lhIGFycmliYS5cbiAgdXNlTGF5b3V0RWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBqdXN0RmluaXNoZWRMb2FkaW5nID0gd2FzTG9hZGluZ01lc3NhZ2VzUmVmLmN1cnJlbnQgJiYgIWxvYWRpbmdNZXNzYWdlc1xuICAgIHdhc0xvYWRpbmdNZXNzYWdlc1JlZi5jdXJyZW50ID0gbG9hZGluZ01lc3NhZ2VzXG5cbiAgICBpZiAoIWp1c3RGaW5pc2hlZExvYWRpbmcgfHwgbWVzc2FnZXMubGVuZ3RoID09PSAwKSByZXR1cm5cblxuICAgIHVzZXJTY3JvbGxpbmdSZWYuY3VycmVudCA9IGZhbHNlXG4gICAgc2Nyb2xsVGhyZXNob2xkUmVmLmN1cnJlbnQgPSAzOVxuICAgIGxhc3RNZXNzYWdlSWRSZWYuY3VycmVudCA9IG1lc3NhZ2VzW21lc3NhZ2VzLmxlbmd0aCAtIDFdPy5pZCA/PyBudWxsXG4gICAgbGFzdE1lc3NhZ2VzTGVuZ3RoUmVmLmN1cnJlbnQgPSBtZXNzYWdlcy5sZW5ndGhcblxuICAgIHNjcm9sbFRvQm90dG9tUmFmKClcbiAgICBzY3JvbGxUb0JvdHRvbVJhZih7IGRlbGF5TXM6IDEwMCB9KVxuICB9LCBbbG9hZGluZ01lc3NhZ2VzLCBtZXNzYWdlcy5sZW5ndGgsIHNjcm9sbFRvQm90dG9tUmFmXSlcblxuICAvLyBPYnRlbmVyIGVsIMO6bHRpbW8gbWVuc2FqZSBkZWwgdXN1YXJpbyBwYXJhIHZlcmlmaWNhciBzaSB0aWVuZSBhdHRhY2htZW50c1xuICBjb25zdCBsYXN0VXNlck1lc3NhZ2UgPSBtZXNzYWdlc1xuICAgIC5maWx0ZXIobXNnID0+IG1zZy5yb2xlID09PSBDaGF0SGlzdG9yeVJvbGUuVVNFUiB8fCBtc2cudXNlci5pZCA9PT0gYXV0aFVzZXIuaWQudG9TdHJpbmcoKSlcbiAgICAuYXQoLTEpXG5cbiAgY29uc3QgYXR0YWNobWVudHNDb3VudCA9XG4gICAgKEFycmF5LmlzQXJyYXkobGFzdFVzZXJNZXNzYWdlPy5hdHRhY2htZW50cykgPyBsYXN0VXNlck1lc3NhZ2UuYXR0YWNobWVudHMubGVuZ3RoIDogMCkgfHxcbiAgICAoQXJyYXkuaXNBcnJheShsYXN0VXNlck1lc3NhZ2U/LnNvdXJjZXMpID8gbGFzdFVzZXJNZXNzYWdlLnNvdXJjZXMubGVuZ3RoIDogMClcblxuICBjb25zdCBzdHJlYW1Mb2FkaW5nRGlzcGxheSA9IHJlc29sdmVTdHJlYW1Mb2FkaW5nRGlzcGxheSh7XG4gICAgc3RyZWFtQWN0aXZpdHksXG4gICAgbG9hZGluZ01lc3NhZ2UsXG4gICAgYWN0aXZlTG9hZGluZ3M6IGFjdGl2ZUxvYWRpbmdzIHx8IHt9LFxuICAgIHdhaXRpbmdSZXNwb25zZSxcbiAgICBpc1dlYlNlYXJjaEFjdGl2ZSxcbiAgICBpc0RlZXBTZWFyY2hBY3RpdmUsXG4gICAgaGFzQXR0YWNobWVudHM6IEJvb2xlYW4oYXR0YWNobWVudHNDb3VudCksXG4gICAgYXR0YWNobWVudHNDb3VudCxcbiAgICB0LFxuICB9KVxuXG4gIGNvbnN0IGlzU2Nyb2xsT25QYXJlbnQgPSAhIWV4cGFuZGVkXG4gIGNvbnN0IGlzTWFya2V0cGxhY2VHbG9iYWxBZ2VudCA9IGlzTWFpYWtlckFnZW50KGFnZW50KVxuXG4gIC8vIEFsIGV4cGFuZGlyL2NvbnRyYWVyIGVsIG1vZGFsIGVsIHJlZiBwYXNhIGEgb3RybyBjb250ZW5lZG9yIChzY3JvbGxUb3Agc2UgcmVzZXRlYSBhIDApLlxuICAvLyBSZXN0YXVyYXIgbGEgcG9zaWNpw7NuIGRlIHNjcm9sbCBhbnRlcyBkZWwgcGFpbnQgcGFyYSBldml0YXIgcXVlIGxhIGNvbnZlcnNhY2nDs24gc2FsdGUgYXJyaWJhLlxuICBjb25zdCBleHBhbmRlZFJlZiA9IHVzZVJlZihleHBhbmRlZClcbiAgdXNlTGF5b3V0RWZmZWN0KCgpID0+IHtcbiAgICBpZiAoZXhwYW5kZWRSZWYuY3VycmVudCAhPT0gZXhwYW5kZWQgJiYgbWVzc2FnZXNSZWYuY3VycmVudCkge1xuICAgICAgY29uc3Qgc2F2ZWRTY3JvbGxUb3AgPSBsYXN0U2Nyb2xsVG9wUmVmLmN1cnJlbnRcbiAgICAgIG1lc3NhZ2VzUmVmLmN1cnJlbnQuc2Nyb2xsVG9wID0gc2F2ZWRTY3JvbGxUb3BcbiAgICAgIGV4cGFuZGVkUmVmLmN1cnJlbnQgPSBleHBhbmRlZFxuICAgIH0gZWxzZSB7XG4gICAgICBleHBhbmRlZFJlZi5jdXJyZW50ID0gZXhwYW5kZWRcbiAgICB9XG4gIH0sIFtleHBhbmRlZF0pXG5cbiAgaWYgKGxvYWRpbmdNZXNzYWdlcykge1xuICAgIHJldHVybiAoXG4gICAgICA8RmFkZSBmaWxsPlxuICAgICAgICA8TG9hZGVyIC8+XG4gICAgICA8L0ZhZGU+XG4gICAgKVxuICB9XG5cbiAgY29uc3QgbWVzc2FnZXNDb250ZW50ID0gKFxuICAgIDw+XG4gICAgICB7aXNMb2FkaW5nTW9yZU1lc3NhZ2VzICYmIDxMb2FkaW5nVGV4dCB0ZXh0PXt0KCdjaGF0LmxvYWRpbmdNb3JlJyl9IC8+fVxuICAgICAgPD5cbiAgICAgICAge21lc3NhZ2VzLm1hcCgobWVzc2FnZSwgaW5kZXgpID0+IHtcbiAgICAgICAgICBjb25zdCBpc0Fzc2lzdGFudE1lc3NhZ2UgPSBtZXNzYWdlLnJvbGUgPT09IENoYXRIaXN0b3J5Um9sZS5BU1NJU1RBTlQgfHwgbWVzc2FnZS51c2VyLmlkID09PSAnYXNzaXN0YW50J1xuICAgICAgICAgIGNvbnN0IGlzTGFzdE1lc3NhZ2UgPSBpbmRleCA9PT0gbWVzc2FnZXMubGVuZ3RoIC0gMVxuICAgICAgICAgIGNvbnN0IGlzU3RyZWFtaW5nUGxhY2Vob2xkZXIgPVxuICAgICAgICAgICAgaXNBc3Npc3RhbnRNZXNzYWdlICYmIGlzTGFzdE1lc3NhZ2UgJiYgaXNTdHJlYW1pbmdQbGFjZWhvbGRlck1lc3NhZ2VJZChtZXNzYWdlLmlkKVxuICAgICAgICAgIGNvbnN0IGlzU3RyZWFtaW5nID0gaXNTdHJlYW1pbmdQbGFjZWhvbGRlciAmJiAod2FpdGluZ1Jlc3BvbnNlIHx8IGlzV3JpdGluZylcblxuICAgICAgICAgIC8vIE5vIGZpbHRyYXIgZWwgcGxhY2Vob2xkZXIgZGVsIG1lbnNhamUgZW4gc3RyZWFtaW5nOiBzdSB0ZXh0byB2aXZlXG4gICAgICAgICAgLy8gZW4gZWwgc3RyZWFtaW5nU3RvcmUgeSBgbWVzc2FnZS5tZXNzYWdlYCBlcyAnJyBoYXN0YSBlbCBjb21wbGV0ZS5cbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAhaXNTdHJlYW1pbmdQbGFjZWhvbGRlciAmJlxuICAgICAgICAgICAgIWlzU3RyZWFtaW5nICYmXG4gICAgICAgICAgICAhKG1lc3NhZ2UuYXR0YWNobWVudHM/Lmxlbmd0aCB8fCBtZXNzYWdlLnNvdXJjZXM/Lmxlbmd0aCkgJiZcbiAgICAgICAgICAgICFtZXNzYWdlLm1lc3NhZ2UgJiZcbiAgICAgICAgICAgICFtZXNzYWdlLnByb2plY3Q/Lm5hbWUgJiZcbiAgICAgICAgICAgICFtZXNzYWdlLmFwcHJvdmFsXG4gICAgICAgICAgKVxuICAgICAgICAgICAgcmV0dXJuIG51bGxcblxuICAgICAgICAgIGNvbnN0IG1lc3NhZ2VGZWVkYmFjayA9XG4gICAgICAgICAgICBtZXNzYWdlPy53YXNIZWxwZnVsID09PSB1bmRlZmluZWQgfHwgbWVzc2FnZS53YXNIZWxwZnVsID09PSBudWxsXG4gICAgICAgICAgICAgID8gbnVsbFxuICAgICAgICAgICAgICA6IG1lc3NhZ2Uud2FzSGVscGZ1bFxuICAgICAgICAgICAgICAgID8gRmVlZGJhY2suVEhVTUJTX1VQXG4gICAgICAgICAgICAgICAgOiBGZWVkYmFjay5USFVNQlNfRE9XTlxuXG4gICAgICAgICAgLy8gS2V5IGVzdGFibGU6IHNvbG8gbWVzc2FnZS5pZCBwYXJhIGV2aXRhciByZW1vdW50IGR1cmFudGUgc3RyZWFtaW5nIChtZXNzYWdlLmRhdGUgcHVlZGUgY2FtYmlhcilcbiAgICAgICAgICBjb25zdCBtZXNzYWdlS2V5ID0gbWVzc2FnZS5pZCA/PyBgbXNnLSR7aW5kZXh9YFxuXG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxNZXNzYWdlSXRlbVxuICAgICAgICAgICAgICB7Li4ubWVzc2FnZX1cbiAgICAgICAgICAgICAga2V5PXttZXNzYWdlS2V5fVxuICAgICAgICAgICAgICBhdXRoVXNlcj17YXV0aFVzZXJ9XG4gICAgICAgICAgICAgIGhhbmRsZVNlbGVjdE9wdGlvbj17aGFuZGxlU2VsZWN0T3B0aW9ufVxuICAgICAgICAgICAgICBoYW5kbGVGZWVkYmFjaz17aGFuZGxlRmVlZGJhY2t9XG4gICAgICAgICAgICAgIGhhbmRsZUFwcHJvdmFsRGVjaXNpb249e2hhbmRsZUFwcHJvdmFsRGVjaXNpb25XaXRoU2Nyb2xsfVxuICAgICAgICAgICAgICBoYW5kbGVTdWdnZXN0aW9uQ2xpY2s9e2hhbmRsZVN1Z2dlc3Rpb25DbGlja31cbiAgICAgICAgICAgICAgaGFzU2VsZWN0ZWRTdWdnZXN0aW9uPXshIXNlbGVjdGVkU3VnZ2VzdGlvbk1lc3NhZ2VJZHNbbWVzc2FnZS5pZF19XG4gICAgICAgICAgICAgIGRpc2FibGVGZWVkYmFjaz17bWVzc2FnZUZlZWRiYWNrfVxuICAgICAgICAgICAgICBpc1N0cmVhbWluZz17aXNTdHJlYW1pbmd9XG4gICAgICAgICAgICAgIGlzTGFzdE1lc3NhZ2U9e2lzTGFzdE1lc3NhZ2V9XG4gICAgICAgICAgICAgIGV4cGFuZGVkPXtleHBhbmRlZH1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgKVxuICAgICAgICB9KX1cbiAgICAgIDwvPlxuICAgICAge3N0cmVhbUxvYWRpbmdEaXNwbGF5ICYmIChcbiAgICAgICAgPFNDTG9hZGluZ01lc3NhZ2VzQ29sdW1uPlxuICAgICAgICAgIDxBZ2VudEFjdGl2aXR5SW5kaWNhdG9yIGFjdGl2aXR5PXtzdHJlYW1Mb2FkaW5nRGlzcGxheX0gLz5cbiAgICAgICAgPC9TQ0xvYWRpbmdNZXNzYWdlc0NvbHVtbj5cbiAgICAgICl9XG4gICAgPC8+XG4gIClcblxuICByZXR1cm4gKFxuICAgIDxTQ01lc3NhZ2VzT3V0ZXIgJHNjcm9sbE9uUGFyZW50PXtpc1Njcm9sbE9uUGFyZW50fT5cbiAgICAgIHtpc1Njcm9sbE9uUGFyZW50ID8gKFxuICAgICAgICA8U0NNZXNzYWdlc1Njcm9sbCByZWY9e21lc3NhZ2VzUmVmfSBvblNjcm9sbD17aGFuZGxlU2Nyb2xsVG9Cb3R0b219PlxuICAgICAgICAgIDxTQ01lc3NhZ2VzSW5uZXIgJHNjcm9sbE9uUGFyZW50PXtpc1Njcm9sbE9uUGFyZW50fSAkaXNNYXJrZXRwbGFjZUdsb2JhbD17aXNNYXJrZXRwbGFjZUdsb2JhbEFnZW50fT5cbiAgICAgICAgICAgIHttZXNzYWdlc0NvbnRlbnR9XG4gICAgICAgICAgPC9TQ01lc3NhZ2VzSW5uZXI+XG4gICAgICAgIDwvU0NNZXNzYWdlc1Njcm9sbD5cbiAgICAgICkgOiAoXG4gICAgICAgIDxTQ01lc3NhZ2VzSW5uZXJcbiAgICAgICAgICByZWY9e21lc3NhZ2VzUmVmfVxuICAgICAgICAgIG9uU2Nyb2xsPXtoYW5kbGVTY3JvbGxUb0JvdHRvbX1cbiAgICAgICAgICAkc2Nyb2xsT25QYXJlbnQ9e2ZhbHNlfVxuICAgICAgICAgICRpc01hcmtldHBsYWNlR2xvYmFsPXtpc01hcmtldHBsYWNlR2xvYmFsQWdlbnR9XG4gICAgICAgID5cbiAgICAgICAgICB7bWVzc2FnZXNDb250ZW50fVxuICAgICAgICA8L1NDTWVzc2FnZXNJbm5lcj5cbiAgICAgICl9XG5cbiAgICAgIHtzaG93U2Nyb2xsVG9Cb3R0b20gJiYgKFxuICAgICAgICA8U2Nyb2xsVG9Cb3R0b21CdXR0b24gdHlwZT1cImJ1dHRvblwiIG9uQ2xpY2s9e2hhbmRsZUNsaWNrU2Nyb2xsVG9Cb3R0b219PlxuICAgICAgICAgIDxBcnJvd1NtYWxsRG93biBjb2xvcj1cIiM2NjZcIiB3aWR0aD1cIjIwcHhcIiBoZWlnaHQ9XCIyMHB4XCIgLz5cbiAgICAgICAgPC9TY3JvbGxUb0JvdHRvbUJ1dHRvbj5cbiAgICAgICl9XG4gICAgPC9TQ01lc3NhZ2VzT3V0ZXI+XG4gIClcbn1cblxuZXhwb3J0IGNvbnN0IENoYXRBSU1lc3NhZ2VzID0gUmVhY3QubWVtbyhDaGF0QUlNZXNzYWdlc0lubmVyKVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBT0EsS0FBSyxJQUFRQyxJQUFJLEVBQWFDLFdBQVcsRUFBRUMsU0FBUyxFQUFFQyxlQUFlLEVBQUVDLE1BQU0sRUFBRUMsUUFBUSxFQUFBQyxhQUFBLElBQUFDLGNBQUEsUUFBUSxPQUFPO0FBQzdHLFNBQVNDLGNBQWMsUUFBUSxpREFBaUQ7QUFFaEYsU0FBU0MsY0FBYyxRQUFRLDJDQUEyQztBQUMxRSxTQUFTQyxXQUFXLFFBQVEscUNBQXFDO0FBQ2pFLFNBQVNDLHNCQUFzQixRQUFRLG9DQUFvQztBQUMzRSxTQUFTQyxtQkFBbUIsUUFBUSxnREFBZ0Q7QUFDcEYsU0FBU0MsY0FBYyxRQUFRLDRCQUE0QjtBQUczRCxTQUFzQkMsZUFBZSxRQUFRLHFCQUFxQjtBQUNsRSxTQUFTQyxzQkFBc0IsRUFBRUMsZ0JBQWdCLFFBQVEsc0NBQXNDO0FBRS9GLFNBQVNDLGNBQWMsUUFBUSxpQ0FBaUM7QUFDaEUsU0FBa0JDLE9BQU8sUUFBUSwyQkFBMkI7QUFFNUQsU0FBU0MsSUFBSSxRQUFRLHFCQUFxQjtBQUMxQyxTQUFTQyxjQUFjLFFBQVEsOENBQThDO0FBQzdFLFNBQVNDLG1CQUFtQixRQUFRLG9DQUFvQztBQUN4RSxTQUFTQyxtQkFBbUIsUUFBUSxvQ0FBb0M7QUFFeEUsU0FBU0MsV0FBVyxRQUFRLHlCQUF5QjtBQUNyRCxTQUFTQyxzQkFBc0IsUUFBUSxvQ0FBb0M7QUFDM0UsU0FBU0MsK0JBQStCLEVBQUVDLDJCQUEyQixRQUFRLHVDQUF1QztBQUNwSCxTQUFTQyxNQUFNLFFBQVEsb0JBQW9CO0FBQzNDLFNBQVNDLElBQUksUUFBUSxrQkFBa0I7QUFJdkMsU0FB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
|
|
987
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSZWFjdCIsIm1lbW8iLCJ1c2VDYWxsYmFjayIsInVzZUVmZmVjdCIsInVzZUxheW91dEVmZmVjdCIsInVzZVJlZiIsInVzZVN0YXRlIiwiY3JlYXRlRWxlbWVudCIsIl9jcmVhdGVFbGVtZW50IiwiQXJyb3dTbWFsbERvd24iLCJBdHRhY2htZW50Q2FyZCIsIkFwcHJvdmFsQm94IiwiQXR0YWNobWVudFByZXZpZXdNb2RhbCIsIkF0dGFjaG1lbnRDYXJkQXVkaW8iLCJNYWlhU3RyZWFtZG93biIsIkNoYXRIaXN0b3J5Um9sZSIsInJlbmRlclRleHRXaXRoTWVudGlvbnMiLCJoYXNJbmxpbmVNYXJrZXJzIiwiaXNNYWlha2VyQWdlbnQiLCJ1c2VVc2VyIiwidXNlVCIsInVzZUNoYXRNYW5hZ2VyIiwidXNlU21vb3RoU3RyZWFtVGV4dCIsInVzZVN0cmVhbWluZ01lc3NhZ2UiLCJMb2FkaW5nVGV4dCIsIkFnZW50QWN0aXZpdHlJbmRpY2F0b3IiLCJSZWFzb25pbmdCbG9jayIsImlzU3RyZWFtaW5nUGxhY2Vob2xkZXJNZXNzYWdlSWQiLCJyZXNvbHZlU3RyZWFtTG9hZGluZ0Rpc3BsYXkiLCJMb2FkZXIiLCJGYWRlIiwiTWVzc2FnZUZyb21Vc2VyIiwiTWVzc2FnZUZyb21PdGhlciIsIk1lc3NhZ2VDb250ZW50RnJvbVVzZXIiLCJNZXNzYWdlQ29udGVudEZyb21PdGhlciIsIk1lc3NhZ2VGZWVkYmFjayIsIlNDQ0FJTWVzc2FnZVdyYXBwZXIiLCJTY3JvbGxUb0JvdHRvbUJ1dHRvbiIsIlNDTWVzc2FnZXNPdXRlciIsIlNDTWVzc2FnZXNTY3JvbGwiLCJTQ01lc3NhZ2VzSW5uZXIiLCJTQ1R1cm5TcGFjZXIiLCJTQ09wdGlvbnNMaXN0IiwiU0NPcHRpb25JdGVtIiwiU0NNZXNzYWdlSXRlbVdyYXBwZXIiLCJTQ01lc3NhZ2VJdGVtSW5uZXIiLCJTQ0F0dGFjaG1lbnRzUm93IiwiU0NBcHByb3ZhbEFjdGlvbnNDb2x1bW4iLCJTQ0xvYWRpbmdNZXNzYWdlc0NvbHVtbiIsIlNDTWVzc2FnZXNHcmFkaWVudFRvcCIsIlNDTWVzc2FnZXNHcmFkaWVudEJvdHRvbSIsIkZlZWRiYWNrIiwidXNlR2xvYmFsQ29udGV4dCIsIkVudGl0eUxpbmtDdXN0b21MaW5rIiwiZ2V0RW50aXR5TGlua1dyYXBwZXJDbGFzc05hbWUiLCJDaGF0QUlTdWdnZXN0aW9ucyIsIkNoYXRBSUNyZWF0ZUFnZW50QWN0aW9ucyIsIkVWRU5UUyIsInVzZUV2ZW50IiwiZG93bmxvYWRGaWxlRnJvbVVybCIsImpzeCIsIl9qc3giLCJGcmFnbWVudCIsIl9GcmFnbWVudCIsImpzeHMiLCJfanN4cyIsInR1cm5BbmNob3JPZmZzZXQiLCJ2aWV3cG9ydEhlaWdodCIsIk1hdGgiLCJtaW4iLCJNZXNzYWdlV3JhcHBlciIsIl9yZWYiLCJpc0N1cnJlbnRVc2VyIiwiY2hpbGRyZW4iLCJwcm9wcyIsIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsIl9leGNsdWRlZCIsIk1lc3NhZ2VDb21wb25lbnQiLCJfb2JqZWN0U3ByZWFkIiwiTWVzc2FnZUNvbnRlbnRXcmFwcGVyIiwiX3JlZjIiLCJfZXhjbHVkZWQyIiwiTWVzc2FnZUNvbnRlbnRDb21wb25lbnQiLCJNZXNzYWdlT3B0aW9ucyIsIl9yZWYzIiwib3B0aW9ucyIsImhhbmRsZVNlbGVjdE9wdGlvbiIsIl91c2VTdGF0ZSIsIl91c2VTdGF0ZTIiLCJfc2xpY2VkVG9BcnJheSIsInNlbGVjdGVkT3B0aW9uIiwic2V0U2VsZWN0ZWRPcHRpb24iLCJoYW5kbGVTZWxlY3QiLCJvcHRpb24iLCJtYXAiLCIkaGFzU2VsZWN0aW9uIiwiJGRpbW1lZCIsImlkIiwib25DbGljayIsIm5hbWUiLCJTdHJlYW1pbmdNZXNzYWdlQm9keSIsIl9wcm9wcyRjcmVhdGVBZ2VudEZvbCIsIl9wcm9wcyRzdWdnZXN0aW9ucyIsInN0cmVhbWluZ1RleHQiLCJpc1N0cmVhbWluZyIsIm1lc3NhZ2VJZCIsInJhd1RleHQiLCJtZXNzYWdlIiwid2luRmxhZ3MiLCJ3aW5kb3ciLCJkaXNwbGF5VGV4dCIsImVuYWJsZWQiLCJtYXhDaGFyc1BlckZyYW1lIiwic25hcFRvV29yZEJvdW5kYXJ5Iiwic3RyZWFtTGFnTXMiLCJ0YXJnZXRMYWdNcyIsInN0cmVhbUFkYXB0IiwiYWRhcHRUb0JhY2tlbmRSYXRlIiwic3RyZWFtQnVmZmVyTXMiLCJ0YXJnZXRCdWZmZXJNcyIsInN0cmVhbU1pbkJ1ZmZlciIsIm1pbkJ1ZmZlckNoYXJzIiwic3RyZWFtV2FybXVwTXMiLCJ3YXJtdXBNcyIsImNyZWF0ZUFnZW50QWN0aW9uc0FnZW50SWQiLCJjcmVhdGVBZ2VudEZvbGxvd1VwIiwiYWdlbnRJZCIsImhhc01lbnRpb25zIiwibWVudGlvbk5vZGVzIiwiaXNGcm9udGVuZENhbmNlbGxlZCIsImNsYXNzTmFtZSIsInN0eWxlIiwiZGlzcGxheSIsInZhcmlhbnQiLCJjb21wb25lbnRzIiwiYSIsImlzQW5pbWF0aW5nIiwiaXNBc3Npc3RhbnQiLCJpc0Vycm9yIiwiYXBwcm92YWwiLCJjb250ZW50Iiwic291cmNlcyIsImhhbmRsZUZlZWRiYWNrIiwiaGFuZGxlRmVlZGJhY2tDbGljayIsImRpc2FibGVGZWVkYmFjayIsInN1Z2dlc3Rpb25zIiwibGVuZ3RoIiwib25TZWxlY3RTdWdnZXN0aW9uIiwic3VnZ2VzdGlvbiIsImhhbmRsZVN1Z2dlc3Rpb25DbGljayIsImRpc2FibGVkIiwic3VnZ2VzdGlvbnNEaXNhYmxlZCIsImhpZGRlbiIsImlzTGFzdE1lc3NhZ2UiLCJNZXNzYWdlSXRlbSIsIl9wcm9wcyRyZWFzb25pbmciLCJfcHJvcHMkcHJvamVjdE1ldGFkYXQiLCJ1c2VyIiwiYXV0aFVzZXIiLCJpc0NoYW5nZVByb2plY3QiLCJoYW5kbGVBcHByb3ZhbERlY2lzaW9uIiwicm9sZSIsImF0dGFjaG1lbnRzIiwiYXBwcm92YWxTdGF0dXMiLCJoYXNTZWxlY3RlZFN1Z2dlc3Rpb24iLCJzdHJlYW1BY3Rpdml0eSIsIl91c2VTdGF0ZTMiLCJfdXNlU3RhdGU0IiwicHJldmlld0F0dGFjaG1lbnQiLCJzZXRQcmV2aWV3QXR0YWNobWVudCIsIlVTRVIiLCJ0b1N0cmluZyIsIkFTU0lTVEFOVCIsImlzU3RyZWFtaW5nUGxhY2Vob2xkZXIiLCJpc0FjdGl2ZVN0cmVhbWluZyIsImhhc1N0cmVhbVRleHQiLCJCb29sZWFuIiwibWVzc2FnZUF0dGFjaG1lbnRzIiwiQXJyYXkiLCJpc0FycmF5IiwiaGFuZGxlQXR0YWNobWVudENsaWNrIiwiYXR0YWNobWVudCIsImZpbGUiLCJGaWxlIiwib3JpZ2luYWxGaWxlIiwidXJsX3RodW1ibmFpbCIsInVybF9vcmlnaW5hbCIsInVybF9maWxlIiwiaGFuZGxlQ2xvc2VQcmV2aWV3IiwiaGFuZGxlQXR0YWNobWVudERvd25sb2FkIiwiX3JlZjQiLCJfYXN5bmNUb0dlbmVyYXRvciIsIl9yZWdlbmVyYXRvclJ1bnRpbWUiLCJtYXJrIiwiX2NhbGxlZSIsImV4dGVuc2lvbiIsImZpbGVOYW1lIiwiZmlsZVVybCIsImJsb2JVcmwiLCJkb3dubG9hZGVkRmlsZSIsImxpbmsiLCJfdCIsIndyYXAiLCJfY29udGV4dCIsInByZXYiLCJuZXh0IiwiaW5jbHVkZXMiLCJjb25jYXQiLCJ0eXBlIiwic2VudCIsIlVSTCIsImNyZWF0ZU9iamVjdFVSTCIsImFicnVwdCIsImRvY3VtZW50IiwiaHJlZiIsImRvd25sb2FkIiwiYm9keSIsImFwcGVuZENoaWxkIiwiY2xpY2siLCJzZXRUaW1lb3V0IiwicmVtb3ZlQ2hpbGQiLCJyZXZva2VPYmplY3RVUkwiLCJjb25zb2xlIiwiZXJyb3IiLCJzdG9wIiwiX3giLCJhcHBseSIsImFyZ3VtZW50cyIsImhhc0ZlZWRiYWNrIiwiJGlzQXNzaXN0YW50IiwibWVzc2FnZUV4dHJhQ29udGVudCIsImZlZWRiYWNrIiwic2Vzc2lvbklkIiwic3BsaXQiLCJmaWx0ZXIiLCJxdWVzdGlvbklkIiwiam9pbiIsInRyYWNlIiwicmVhc29uaW5nIiwiaW5kZXgiLCJfYXR0YWNobWVudCR0eXBlIiwiX2F0dGFjaG1lbnQkbmFtZSIsImF0dGFjaG1lbnRUeXBlIiwidG9Mb3dlckNhc2UiLCJhdHRhY2htZW50TmFtZSIsImlzQXVkaW9GaWxlIiwic3RhcnRzV2l0aCIsInNvbWUiLCJleHQiLCJlbmRzV2l0aCIsInBvc2l0aW9uSW5kZXgiLCJvbkRvd25sb2FkIiwiYWN0aXZpdHkiLCJwZW5kaW5nX2FjdGlvbnMiLCJhY3Rpb25zIiwic3RhdHVzIiwib25BcHByb3ZlIiwidGhyZWFkSWRzIiwib25SZWplY3QiLCJpc1Byb2plY3REZWxldGVkIiwicHJvamVjdE1ldGFkYXRhIiwiaXNfZGVsZXRlZCIsImlzRXhwYW5kZWQiLCJleHBhbmRlZCIsImhpdGxJbnN0YW5jZUlkIiwib3JpZ2luYWxfdGhyZWFkX2lkIiwid2FybmluZ01lc3NhZ2UiLCJ3YXJuaW5nX21lc3NhZ2UiLCJtYW51YWxBcHByb3ZhbERldGVjdGVkIiwibWFudWFsX2FwcHJvdmFsX2RldGVjdGVkIiwiaXNPcGVuIiwib25DbG9zZSIsIkNoYXRBSU1lc3NhZ2VzSW5uZXIiLCJfcmVmNSIsInVzZXJJbml0aWFsTWVzc2FnZSIsImluaXRpYWxDaGF0SWQiLCJvbkVycm9yIiwib25TZW5kTWVzc2FnZVJlYWR5Iiwib25TY3JvbGxUb0JvdHRvbSIsImFnZW50cyIsIl91c2VUIiwidCIsIl91c2VHbG9iYWxDb250ZXh0IiwiaXNXZWJTZWFyY2hBY3RpdmUiLCJpc0RlZXBTZWFyY2hBY3RpdmUiLCJhZ2VudCIsImV2ZW50IiwibWVzc2FnZXNSZWYiLCJjaGF0SW5pdGlhbGl6ZWRSZWYiLCJpc0xvYWRpbmdNb3JlUmVmIiwidXNlclNjcm9sbGluZ1JlZiIsInNjcm9sbFRocmVzaG9sZFJlZiIsImxhc3RTY3JvbGxUb3BSZWYiLCJzaG93U2Nyb2xsVG9Cb3R0b21SZWYiLCJzaG93VG9wR3JhZGllbnRSZWYiLCJzaG93Qm90dG9tR3JhZGllbnRSZWYiLCJzY3JvbGxSYWZSZWYiLCJhbmNob3JlZFR1cm5JZFJlZiIsInNwYWNlckVsUmVmIiwic3BhY2VySGVpZ2h0UmVmIiwid2FzTG9hZGluZ01lc3NhZ2VzUmVmIiwibGFzdFNjcm9sbGVkU2Vzc2lvblJlZiIsIl91c2VTdGF0ZTUiLCJfdXNlU3RhdGU2Iiwic2hvd1Njcm9sbFRvQm90dG9tIiwic2V0U2hvd1Njcm9sbFRvQm90dG9tIiwiX3VzZVN0YXRlNyIsIl91c2VTdGF0ZTgiLCJzaG93VG9wR3JhZGllbnQiLCJzZXRTaG93VG9wR3JhZGllbnQiLCJfdXNlU3RhdGU5IiwiX3VzZVN0YXRlMCIsInNob3dCb3R0b21HcmFkaWVudCIsInNldFNob3dCb3R0b21HcmFkaWVudCIsIl91c2VTdGF0ZTEiLCJfdXNlU3RhdGUxMCIsInNlbGVjdGVkU3VnZ2VzdGlvbk1lc3NhZ2VJZHMiLCJzZXRTZWxlY3RlZFN1Z2dlc3Rpb25NZXNzYWdlSWRzIiwiX3VzZUNoYXRNYW5hZ2VyIiwiY2hhdElkIiwidW5kZWZpbmVkIiwibWVzc2FnZXMiLCJsb2FkaW5nTWVzc2FnZXMiLCJpc0xvYWRpbmdNb3JlTWVzc2FnZXMiLCJ3YWl0aW5nUmVzcG9uc2UiLCJpc1dyaXRpbmciLCJsb2FkaW5nTWVzc2FnZSIsImFjdGl2ZUxvYWRpbmdzIiwic2VuZE1lc3NhZ2UiLCJjaGFuZ2VQcm9qZWN0IiwiaW5pdGlhbGl6ZUNoYXQiLCJoYW5kbGVTY3JvbGwiLCJzdG9wR2VuZXJhdGlvbiIsInRyaW0iLCJpc01hcmtldHBsYWNlR2xvYmFsQWdlbnQiLCJhaUNoYXRTdWdnZXN0ZWRBbnN3ZXIiLCJhZ2VudF90eXBlIiwiX2RlZmluZVByb3BlcnR5IiwidGFyZ2V0TWVzc2FnZSIsImZpbmQiLCJtc2ciLCJpc1JldHJ5U3VnZ2VzdGlvbiIsImxhc3RVc2VyTWVzc2FnZSIsImF0IiwicmV0cnlBdHRhY2htZW50cyIsImVudGl0eSIsInVwZGF0ZVNjcm9sbEFmZm9yZGFuY2VzIiwiZWwiLCJjdXJyZW50Iiwic2Nyb2xsVG9wIiwic2Nyb2xsSGVpZ2h0IiwiY2xpZW50SGVpZ2h0IiwiZGlzdGFuY2VGcm9tQm90dG9tIiwic2hvdWxkU2hvdyIsIm5leHRUb3BHcmFkaWVudCIsIm5leHRCb3R0b21HcmFkaWVudCIsInNjcm9sbFRvQm90dG9tUmFmIiwib3B0cyIsIl9vcHRzJHNraXBJZlVzZXJTY3JvbCIsInNraXBJZlVzZXJTY3JvbGxpbmciLCJfb3B0cyRkZWxheU1zIiwiZGVsYXlNcyIsInJ1biIsInJlcXVlc3RBbmltYXRpb25GcmFtZSIsInNldFNwYWNlckhlaWdodCIsImFicyIsImhlaWdodCIsImNsZWFyVHVyblNwYWNlIiwibWVhc3VyZVR1cm4iLCJzcGFjZXJFbCIsInF1ZXN0aW9uRWwiLCJxdWVyeVNlbGVjdG9yIiwiY29udGFpbmVyVG9wIiwiZ2V0Qm91bmRpbmdDbGllbnRSZWN0IiwidG9wIiwicXVlc3Rpb25Ub3AiLCJjb250ZW50Qm90dG9tIiwidHVybkhlaWdodCIsInJlc2VydmVUdXJuU3BhY2UiLCJtZWFzdXJlZCIsIm9mZnNldCIsInRhcmdldFNjcm9sbFRvcCIsIm1heCIsInN5bmNUdXJuU3BhY2UiLCJyZXNlcnZlZCIsImhhbmRsZUNsaWNrU2Nyb2xsVG9Cb3R0b20iLCJzY3JvbGxUbyIsImJlaGF2aW9yIiwiaGFuZGxlU2Nyb2xsVG9Cb3R0b20iLCJlIiwiY29udGFpbmVyIiwiY3VycmVudFRhcmdldCIsImNhbmNlbEFuaW1hdGlvbkZyYW1lIiwiaXNTY3JvbGxpbmdVcCIsImlzTmVhckJvdHRvbSIsInNlbmRNZXNzYWdlUmVmIiwic3RvcEdlbmVyYXRpb25SZWYiLCJvblNlbmRNZXNzYWdlUmVhZHlSZWYiLCJzZW5kTWVzc2FnZVByb3h5UmVmIiwiZmFxSWQiLCJhZ2VudFN1Z2dlc3Rpb25JZCIsIm1lbnRpb25zIiwiZnVhSWQiLCJzY0lkIiwic3RvcEdlbmVyYXRpb25Qcm94eVJlZiIsInJhZklkIiwibGFzdEhlaWdodCIsInRpY2siLCJjdXJyZW50SGVpZ2h0IiwibGFzdFJlc2VydmVkUXVlc3Rpb25SZWYiLCJfbWVzc2FnZXMkaW5kZXgiLCJsYXN0TWVzc2FnZUlkUmVmIiwibGFzdE1lc3NhZ2VzTGVuZ3RoUmVmIiwiX21lc3NhZ2VzJGlkIiwiX21lc3NhZ2VzIiwiX2xhc3RNZXNzYWdlJGlkIiwibGFzdE1lc3NhZ2UiLCJsYXN0SWQiLCJwcmV2SWQiLCJwcmV2TGVuIiwiaXNOZXdNZXNzYWdlIiwiaXNBdEJvdHRvbSIsImhhc0luaXRpYWxNZXNzYWdlIiwiaXNBcHByb3ZhbCIsImlzQW5zd2VyT3JRdWVzdGlvbiIsIl9tZXNzYWdlcyRpZDIiLCJfbWVzc2FnZXMyIiwianVzdEZpbmlzaGVkTG9hZGluZyIsImF0dGFjaG1lbnRzQ291bnQiLCJzdHJlYW1Mb2FkaW5nRGlzcGxheSIsImhhc0F0dGFjaG1lbnRzIiwiaXNTY3JvbGxPblBhcmVudCIsImV4cGFuZGVkUmVmIiwic2F2ZWRTY3JvbGxUb3AiLCJmaWxsIiwiaGFzTWVzc2FnZUxldmVsSW5kaWNhdG9yIiwibWVzc2FnZXNDb250ZW50IiwidGV4dCIsIl9tZXNzYWdlJGF0dGFjaG1lbnRzIiwiX21lc3NhZ2Ukc291cmNlcyIsIl9tZXNzYWdlJHByb2plY3QiLCJfbWVzc2FnZSRpZCIsImlzQXNzaXN0YW50TWVzc2FnZSIsInByb2plY3QiLCJtZXNzYWdlRmVlZGJhY2siLCJ3YXNIZWxwZnVsIiwiVEhVTUJTX1VQIiwiVEhVTUJTX0RPV04iLCJtZXNzYWdlS2V5Iiwia2V5IiwicmVmIiwiJHNjcm9sbE9uUGFyZW50IiwiJHNob3ciLCJvblNjcm9sbCIsImNvbG9yIiwid2lkdGgiLCJDaGF0QUlNZXNzYWdlcyJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL21vbGVjdWxlcy9DaGF0QUlNZXNzYWdlcy9DaGF0QUlNZXNzYWdlcy50c3giXSwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgaW1wb3J0L25vLWV4dHJhbmVvdXMtZGVwZW5kZW5jaWVzICovXG4vKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvaW5kZW50ICovXG4vKiBlc2xpbnQtZGlzYWJsZSByZWFjdC9uby11bnN0YWJsZS1uZXN0ZWQtY29tcG9uZW50cyAqL1xuLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXNoYWRvdyAqL1xuLyogZXNsaW50LWRpc2FibGUgbm8tbmVzdGVkLXRlcm5hcnkgKi9cbi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkgKi9cbi8qIGVzbGludC1kaXNhYmxlIG5vLXVuZGVmICovXG4vKiBlc2xpbnQtZGlzYWJsZSByZWFjdC9mdW5jdGlvbi1jb21wb25lbnQtZGVmaW5pdGlvbiAqL1xuLyogZXNsaW50LWRpc2FibGUgcmVhY3QvcmVxdWlyZS1kZWZhdWx0LXByb3BzICovXG4vKiBlc2xpbnQtZGlzYWJsZSBqc3gtYTExeS9jbGljay1ldmVudHMtaGF2ZS1rZXktZXZlbnRzICovXG4vKiBlc2xpbnQtZGlzYWJsZSBqc3gtYTExeS9uby1zdGF0aWMtZWxlbWVudC1pbnRlcmFjdGlvbnMgKi9cbmltcG9ydCBSZWFjdCwgeyBGQywgbWVtbywgUmVhY3ROb2RlLCB1c2VDYWxsYmFjaywgdXNlRWZmZWN0LCB1c2VMYXlvdXRFZmZlY3QsIHVzZVJlZiwgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IEFycm93U21hbGxEb3duIH0gZnJvbSAnQHByb2plY3Rjb3IvaWNvbnMvbGliL2NvbXBvbmVudHMvQXJyb3dTbWFsbERvd24nXG5cbmltcG9ydCB7IEF0dGFjaG1lbnRDYXJkIH0gZnJvbSAnLi4vLi4vYXRvbXMvQXR0YWNobWVudENhcmQvQXR0YWNobWVudENhcmQnXG5pbXBvcnQgeyBBcHByb3ZhbEJveCB9IGZyb20gJy4uLy4uL2F0b21zL0FwcHJvdmFsQm94L0FwcHJvdmFsQm94J1xuaW1wb3J0IHsgQXR0YWNobWVudFByZXZpZXdNb2RhbCB9IGZyb20gJy4uLy4uL2F0b21zL0F0dGFjaG1lbnRQcmV2aWV3TW9kYWwnXG5pbXBvcnQgeyBBdHRhY2htZW50Q2FyZEF1ZGlvIH0gZnJvbSAnLi4vLi4vYXRvbXMvQXR0YWNobWVudENhcmQvQXR0YWNobWVudENhcmRBdWRpbydcbmltcG9ydCB7IE1haWFTdHJlYW1kb3duIH0gZnJvbSAnLi4vLi4vYXRvbXMvTWFpYVN0cmVhbWRvd24nXG5pbXBvcnQgdHlwZSB7IE1haWFTdHJlYW1kb3duUHJvcHMgfSBmcm9tICcuLi8uLi9hdG9tcy9NYWlhU3RyZWFtZG93bidcbmltcG9ydCB7IE1BSUFNZXNzYWdlUHJvcHMgfSBmcm9tICcuLi8uLi9hdG9tcy9NQUlBTWVzc2FnZS9NQUlBTWVzc2FnZS5pbnRlcmZhY2VzJ1xuaW1wb3J0IHsgQ2hhdE1lc3NhZ2UsIENoYXRIaXN0b3J5Um9sZSB9IGZyb20gJy4uLy4uLy4uL3R5cGVzL0NoYXQnXG5pbXBvcnQgeyByZW5kZXJUZXh0V2l0aE1lbnRpb25zLCBoYXNJbmxpbmVNYXJrZXJzIH0gZnJvbSAnLi4vLi4vLi4vdXRpbHMvcmVuZGVyQ29udGV4dE1lbnRpb25zJ1xuXG5pbXBvcnQgeyBpc01haWFrZXJBZ2VudCB9IGZyb20gJy4uLy4uLy4uL3V0aWxzL2FnZW50RGlzcGxheU5hbWUnXG5pbXBvcnQgeyBDT1JVc2VyLCB1c2VVc2VyIH0gZnJvbSAnLi4vLi4vLi4vY29udGV4dC9jb3ItdXNlcidcblxuaW1wb3J0IHsgdXNlVCB9IGZyb20gJy4uLy4uLy4uL2hvb2tzL3VzZVQnXG5pbXBvcnQgeyB1c2VDaGF0TWFuYWdlciB9IGZyb20gJy4uLy4uLy4uL2hvb2tzL3VzZUNoYXRNYW5hZ2VyL3VzZUNoYXRNYW5hZ2VyJ1xuaW1wb3J0IHsgdXNlU21vb3RoU3RyZWFtVGV4dCB9IGZyb20gJy4uLy4uLy4uL2hvb2tzL3VzZVNtb290aFN0cmVhbVRleHQnXG5pbXBvcnQgeyB1c2VTdHJlYW1pbmdNZXNzYWdlIH0gZnJvbSAnLi4vLi4vLi4vaG9va3MvdXNlU3RyZWFtaW5nTWVzc2FnZSdcblxuaW1wb3J0IHsgTG9hZGluZ1RleHQgfSBmcm9tICcuLi8uLi9hdG9tcy9Mb2FkaW5nVGV4dCdcbmltcG9ydCB7IEFnZW50QWN0aXZpdHlJbmRpY2F0b3IgfSBmcm9tICcuLi8uLi9hdG9tcy9BZ2VudEFjdGl2aXR5SW5kaWNhdG9yJ1xuaW1wb3J0IHsgUmVhc29uaW5nQmxvY2sgfSBmcm9tICcuLi8uLi9hdG9tcy9SZWFzb25pbmdCbG9jaydcbmltcG9ydCB0eXBlIHsgU3RyZWFtQWN0aXZpdHkgfSBmcm9tICcuLi8uLi8uLi90eXBlcy9zdHJlYW1BY3Rpdml0eSdcbmltcG9ydCB7IGlzU3RyZWFtaW5nUGxhY2Vob2xkZXJNZXNzYWdlSWQsIHJlc29sdmVTdHJlYW1Mb2FkaW5nRGlzcGxheSB9IGZyb20gJy4uLy4uLy4uL3V0aWxzL3N0cmVhbUFjdGl2aXR5TWVzc2FnZXMnXG5pbXBvcnQgeyBMb2FkZXIgfSBmcm9tICcuLi8uLi9hdG9tcy9Mb2FkZXInXG5pbXBvcnQgeyBGYWRlIH0gZnJvbSAnLi4vLi4vYXRvbXMvRmFkZSdcblxuaW1wb3J0IHsgUHJvamVjdCB9IGZyb20gJy4uLy4uLy4uL3R5cGVzL1Byb2plY3QnXG5cbmltcG9ydCB7IE1lc3NhZ2VGcm9tVXNlciwgTWVzc2FnZUZyb21PdGhlciwgTWVzc2FnZUNvbnRlbnRGcm9tVXNlciwgTWVzc2FnZUNvbnRlbnRGcm9tT3RoZXIgfSBmcm9tICcuL3N0eWxlcydcbmltcG9ydCB7IE1lc3NhZ2VGZWVkYmFjayB9IGZyb20gJy4uL01lc3NhZ2VGZWVkYmFjaydcbmltcG9ydCB7XG4gIFNDQ0FJTWVzc2FnZVdyYXBwZXIsXG4gIFNjcm9sbFRvQm90dG9tQnV0dG9uLFxuICBTQ01lc3NhZ2VzT3V0ZXIsXG4gIFNDTWVzc2FnZXNTY3JvbGwsXG4gIFNDTWVzc2FnZXNJbm5lcixcbiAgU0NUdXJuU3BhY2VyLFxuICBTQ09wdGlvbnNMaXN0LFxuICBTQ09wdGlvbkl0ZW0sXG4gIFNDTWVzc2FnZUl0ZW1XcmFwcGVyLFxuICBTQ01lc3NhZ2VJdGVtSW5uZXIsXG4gIFNDQXR0YWNobWVudHNSb3csXG4gIFNDQXBwcm92YWxBY3Rpb25zQ29sdW1uLFxuICBTQ0xvYWRpbmdNZXNzYWdlc0NvbHVtbixcbiAgU0NNZXNzYWdlc0dyYWRpZW50VG9wLFxuICBTQ01lc3NhZ2VzR3JhZGllbnRCb3R0b20sXG59IGZyb20gJy4vbmV3U3R5bGVzJ1xuaW1wb3J0IHsgRmVlZGJhY2sgfSBmcm9tICcuLi9NZXNzYWdlRmVlZGJhY2svTWVzc2FnZUZlZWRiYWNrJ1xuaW1wb3J0IHsgdXNlR2xvYmFsQ29udGV4dCB9IGZyb20gJy4uLy4uLy4uL2NvbnRleHQvZ2xvYmFsLWNvbnRleHQnXG5pbXBvcnQgeyBBZ2VudCB9IGZyb20gJy4uLy4uLy4uL3R5cGVzL2FnZW50J1xuaW1wb3J0IHsgQXR0YWNobWVudEZpbGUgfSBmcm9tICcuLi9DaGF0Rm9vdGVyL0NoYXRGb290ZXInXG5pbXBvcnQgeyBDb250ZXh0TWVudGlvbiB9IGZyb20gJy4uLy4uLy4uL3R5cGVzL2NvbnRleHRNZW50aW9uJ1xuaW1wb3J0IHsgRW50aXR5TGlua0N1c3RvbUxpbmssIGdldEVudGl0eUxpbmtXcmFwcGVyQ2xhc3NOYW1lIH0gZnJvbSAnLi4vLi4vLi4vdXRpbHMvZW50aXR5TGlua1JlbmRlcidcbmltcG9ydCB7IENoYXRBSVN1Z2dlc3Rpb25zIH0gZnJvbSAnLi9DaGF0QUlTdWdnZXN0aW9ucydcbmltcG9ydCB7IENoYXRBSUNyZWF0ZUFnZW50QWN0aW9ucyB9IGZyb20gJy4vQ2hhdEFJQ3JlYXRlQWdlbnRBY3Rpb25zJ1xuaW1wb3J0IHsgRVZFTlRTLCB1c2VFdmVudCB9IGZyb20gJy4uLy4uLy4uL2hvb2tzL3VzZUV2ZW50J1xuaW1wb3J0IHsgZG93bmxvYWRGaWxlRnJvbVVybCB9IGZyb20gJy4uLy4uLy4uL3V0aWxzL2ZpbGVEb3dubG9hZEhlbHBlcidcblxudHlwZSBDaGF0QUlNZXNzYWdlc1Byb3BzID0ge1xuICB1c2VySW5pdGlhbE1lc3NhZ2U6IHtcbiAgICBtZXNzYWdlOiBzdHJpbmdcbiAgICBhdHRhY2htZW50czogQXR0YWNobWVudEZpbGVbXVxuICAgIGZhcUlkPzogc3RyaW5nXG4gICAgYWdlbnRTdWdnZXN0aW9uSWQ/OiBzdHJpbmdcbiAgICBtZW50aW9ucz86IENvbnRleHRNZW50aW9uW11cbiAgICBmdWFJZD86IHN0cmluZ1xuICAgIHNjSWQ/OiBzdHJpbmdcbiAgfVxuICBpbml0aWFsQ2hhdElkOiBzdHJpbmcgfCBudWxsXG4gIG9uRXJyb3I6ICgpID0+IHZvaWRcbiAgb25TZW5kTWVzc2FnZVJlYWR5PzogKFxuICAgIHNlbmRNZXNzYWdlOiAoXG4gICAgICBtZXNzYWdlOiBzdHJpbmcsXG4gICAgICBhdHRhY2htZW50cz86IEF0dGFjaG1lbnRGaWxlW10sXG4gICAgICBmYXFJZD86IHN0cmluZyxcbiAgICAgIGFnZW50U3VnZ2VzdGlvbklkPzogc3RyaW5nLFxuICAgICAgbWVudGlvbnM/OiBDb250ZXh0TWVudGlvbltdLFxuICAgICAgZnVhSWQ/OiBzdHJpbmcsXG4gICAgICBzY0lkPzogc3RyaW5nXG4gICAgKSA9PiB2b2lkLFxuICAgIHN0b3BHZW5lcmF0aW9uOiAoKSA9PiB2b2lkLFxuICAgIGlzU3RyZWFtaW5nOiBib29sZWFuLFxuICAgIGlzV3JpdGluZzogYm9vbGVhblxuICApID0+IHZvaWRcbiAgaXNEaXNhYmxlZD86IGJvb2xlYW5cbiAgb25TY3JvbGxUb0JvdHRvbT86ICgpID0+IHZvaWRcbiAgYXR0YWNobWVudHM/OiBBdHRhY2htZW50RmlsZVtdXG4gIGFnZW50cz86IEFnZW50W11cbiAgZXhwYW5kZWQ/OiBib29sZWFuXG59XG5cbi8qKlxuICogQWwgYW5jbGFyIGVsIHR1cm5vLCBsYSBwcmVndW50YSBubyBzZSBwZWdhIGFsIGJvcmRlIHN1cGVyaW9yOiBkZWphbW9zIGFzb21hclxuICogbGEgY29sYSBkZWwgbWVuc2FqZSBhbnRlcmlvciBwYXJhIG5vIHBlcmRlciBlbCBoaWxvIGRlIGxhIGNvbnZlcnNhY2nDs24uXG4gKiBSZWxhdGl2byBhbCB2aWV3cG9ydCBwb3JxdWUgdW4gdmFsb3IgZmlqbyBzZSBjb21lIGRlbWFzaWFkbyBlbiBwYW50YWxsYXMgY29ydGFzLlxuICovXG5jb25zdCB0dXJuQW5jaG9yT2Zmc2V0ID0gKHZpZXdwb3J0SGVpZ2h0OiBudW1iZXIpOiBudW1iZXIgPT4gTWF0aC5taW4odmlld3BvcnRIZWlnaHQgKiAwLjE4LCAyMDApXG5cbnR5cGUgTWVzc2FnZUl0ZW1Qcm9wcyA9IENoYXRNZXNzYWdlICYge1xuICBhdXRoVXNlcjogQ09SVXNlclxuICBoYW5kbGVTZWxlY3RPcHRpb246IChvcHRpb246IFByb2plY3QpID0+IHZvaWRcbiAgaGFuZGxlU3VnZ2VzdGlvbkNsaWNrOiAobWVzc2FnZUlkOiBzdHJpbmcsIHN1Z2dlc3Rpb246IHN0cmluZykgPT4gdm9pZFxuICBoYXNTZWxlY3RlZFN1Z2dlc3Rpb24/OiBib29sZWFuXG4gIGhhbmRsZUZlZWRiYWNrOiAoZmVlZGJhY2s6IEZlZWRiYWNrLCBjaGF0TWVzc2FnZUlkOiBzdHJpbmcpID0+IHZvaWRcbiAgaGFuZGxlQXBwcm92YWxEZWNpc2lvbjogKHRocmVhZElkczogc3RyaW5nW10sIGRlY2lzaW9uOiAnYXBwcm92ZScgfCAncmVqZWN0JykgPT4gdm9pZFxuICBkaXNhYmxlRmVlZGJhY2s/OiBGZWVkYmFjayB8IG51bGxcbiAgc291cmNlcz86IGFueVxuICBhdHRhY2htZW50cz86IEF0dGFjaG1lbnRGaWxlW11cbiAgaXNTdHJlYW1pbmc/OiBib29sZWFuXG4gIGlzTGFzdE1lc3NhZ2U/OiBib29sZWFuXG4gIGV4cGFuZGVkPzogYm9vbGVhblxuICBzdHJlYW1BY3Rpdml0eT86IFN0cmVhbUFjdGl2aXR5IHwgbnVsbFxufVxuXG5pbnRlcmZhY2UgTWVzc2FnZVdyYXBwZXJQcm9wcyB7XG4gIGlzQ3VycmVudFVzZXI6IGJvb2xlYW5cbiAgY2hpbGRyZW46IFJlYWN0Tm9kZVxuICAnZGF0YS1tZXNzYWdlLWlkJz86IHN0cmluZ1xuICBoYXNGZWVkYmFjaz86IGJvb2xlYW5cbn1cblxudHlwZSBNZXNzYWdlQ29udGVudFdyYXBwZXJQcm9wcyA9IE1BSUFNZXNzYWdlUHJvcHMgJiB7XG4gIGlzQ3VycmVudFVzZXI6IGJvb2xlYW5cbiAgaXNFcnJvcj86IGJvb2xlYW5cbiAgaXNDaGFuZ2VQcm9qZWN0PzogYm9vbGVhblxufVxuXG5jb25zdCBNZXNzYWdlV3JhcHBlcjogRkM8TWVzc2FnZVdyYXBwZXJQcm9wcz4gPSAoeyBpc0N1cnJlbnRVc2VyLCBjaGlsZHJlbiwgLi4ucHJvcHMgfSkgPT4ge1xuICBjb25zdCBNZXNzYWdlQ29tcG9uZW50ID0gaXNDdXJyZW50VXNlciA/IE1lc3NhZ2VGcm9tVXNlciA6IE1lc3NhZ2VGcm9tT3RoZXJcbiAgcmV0dXJuIDxNZXNzYWdlQ29tcG9uZW50IHsuLi5wcm9wc30+e2NoaWxkcmVufTwvTWVzc2FnZUNvbXBvbmVudD5cbn1cblxuY29uc3QgTWVzc2FnZUNvbnRlbnRXcmFwcGVyOiBGQzxNZXNzYWdlQ29udGVudFdyYXBwZXJQcm9wcz4gPSAoeyBpc0N1cnJlbnRVc2VyLCAuLi5wcm9wcyB9KSA9PiB7XG4gIGNvbnN0IE1lc3NhZ2VDb250ZW50Q29tcG9uZW50ID0gaXNDdXJyZW50VXNlciA/IE1lc3NhZ2VDb250ZW50RnJvbVVzZXIgOiBNZXNzYWdlQ29udGVudEZyb21PdGhlclxuICByZXR1cm4gPE1lc3NhZ2VDb250ZW50Q29tcG9uZW50IHsuLi5wcm9wc30gLz5cbn1cblxuZnVuY3Rpb24gTWVzc2FnZU9wdGlvbnMoe1xuICBvcHRpb25zLFxuICBoYW5kbGVTZWxlY3RPcHRpb24sXG59OiB7XG4gIG9wdGlvbnM6IFByb2plY3RbXSB8IG51bGxcbiAgaGFuZGxlU2VsZWN0T3B0aW9uOiAob3B0aW9uOiBQcm9qZWN0KSA9PiB2b2lkXG59KSB7XG4gIGNvbnN0IFtzZWxlY3RlZE9wdGlvbiwgc2V0U2VsZWN0ZWRPcHRpb25dID0gdXNlU3RhdGU8UHJvamVjdCB8IG51bGw+KG51bGwpXG5cbiAgY29uc3QgaGFuZGxlU2VsZWN0ID0gKG9wdGlvbjogUHJvamVjdCkgPT4ge1xuICAgIGlmIChzZWxlY3RlZE9wdGlvbikgcmV0dXJuXG4gICAgc2V0U2VsZWN0ZWRPcHRpb24ob3B0aW9uKVxuICAgIGhhbmRsZVNlbGVjdE9wdGlvbihvcHRpb24pXG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxTQ09wdGlvbnNMaXN0PlxuICAgICAgeyhvcHRpb25zIHx8IFtdKS5tYXAob3B0aW9uID0+IChcbiAgICAgICAgPFNDT3B0aW9uSXRlbVxuICAgICAgICAgICRoYXNTZWxlY3Rpb249eyEhc2VsZWN0ZWRPcHRpb259XG4gICAgICAgICAgJGRpbW1lZD17ISFzZWxlY3RlZE9wdGlvbiAmJiBzZWxlY3RlZE9wdGlvbj8uaWQgIT09IG9wdGlvbi5pZH1cbiAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBoYW5kbGVTZWxlY3Qob3B0aW9uKX1cbiAgICAgICAgICBrZXk9e29wdGlvbi5pZH1cbiAgICAgICAgPlxuICAgICAgICAgIHtvcHRpb24ubmFtZX1cbiAgICAgICAgPC9TQ09wdGlvbkl0ZW0+XG4gICAgICApKX1cbiAgICA8L1NDT3B0aW9uc0xpc3Q+XG4gIClcbn1cblxuLyoqIFNvbG8gZXN0ZSBjb21wb25lbnRlIHJlLXJlbmRlcml6YSBjdWFuZG8gY2FtYmlhIGVsIHRleHRvIGVuIHN0cmVhbWluZyAobGVlIGRlbCBjb250ZXh0KS4gKi9cbmNvbnN0IFN0cmVhbWluZ01lc3NhZ2VCb2R5ID0gbWVtbyhcbiAgKHByb3BzOiB7XG4gICAgbWVzc2FnZTogc3RyaW5nXG4gICAgaXNTdHJlYW1pbmc6IGJvb2xlYW5cbiAgICBpc0N1cnJlbnRVc2VyOiBib29sZWFuXG4gICAgaXNBc3Npc3RhbnQ6IGJvb2xlYW5cbiAgICBpc0Zyb250ZW5kQ2FuY2VsbGVkPzogYm9vbGVhblxuICAgIGFwcHJvdmFsPzogTWVzc2FnZUl0ZW1Qcm9wc1snYXBwcm92YWwnXVxuICAgIGlzRXJyb3I/OiBib29sZWFuXG4gICAgc291cmNlcz86IE1lc3NhZ2VJdGVtUHJvcHNbJ3NvdXJjZXMnXVxuICAgIHN1Z2dlc3Rpb25zPzogc3RyaW5nW10gfCBudWxsXG4gICAgY3JlYXRlQWdlbnRGb2xsb3dVcD86IHsgYWdlbnRJZDogc3RyaW5nIH0gfCBudWxsXG4gICAgaGFuZGxlRmVlZGJhY2tDbGljazogKGY6IEZlZWRiYWNrKSA9PiB2b2lkXG4gICAgZGlzYWJsZUZlZWRiYWNrOiBGZWVkYmFjayB8IG51bGxcbiAgICBoYW5kbGVTdWdnZXN0aW9uQ2xpY2s6IChtZXNzYWdlSWQ6IHN0cmluZywgc3VnZ2VzdGlvbjogc3RyaW5nKSA9PiB2b2lkXG4gICAgc3VnZ2VzdGlvbnNEaXNhYmxlZD86IGJvb2xlYW5cbiAgICBtZXNzYWdlSWQ6IHN0cmluZ1xuICAgIGlzTGFzdE1lc3NhZ2U/OiBib29sZWFuXG4gIH0pID0+IHtcbiAgICAvLyBUZXh0byBkZWwgc3RyZWFtOiBzb2xvIHNlIGxlZSBkZWwgc3RvcmUgY3VhbmRvIGVzdGUgbWVuc2FqZSBlcyBlbFxuICAgIC8vIHF1ZSBlc3TDoSBlbiBzdHJlYW1pbmcuIHVzZVN5bmNFeHRlcm5hbFN0b3JlIGHDrXNsYSBlbCByZS1yZW5kZXIgYVxuICAgIC8vIGVzdGUgY29tcG9uZW50ZSwgc2luIHRvY2FyIGVsIHJlc3RvIGRlbCDDoXJib2wuXG4gICAgY29uc3Qgc3RyZWFtaW5nVGV4dCA9IHVzZVN0cmVhbWluZ01lc3NhZ2UocHJvcHMuaXNTdHJlYW1pbmcgPyBwcm9wcy5tZXNzYWdlSWQgOiBudWxsKVxuICAgIGNvbnN0IHJhd1RleHQgPSBwcm9wcy5pc1N0cmVhbWluZyA/IHN0cmVhbWluZ1RleHQgOiBwcm9wcy5tZXNzYWdlXG4gICAgLy8gU21vb3RoIHN0cmVhbWluZzogZGVzYWNvcGxhIGxhIGNhZGVuY2lhIGRlbCBiYWNrZW5kIGRlbCByZW5kZXIuXG4gICAgLy8gRHVyYW50ZSBlbCBzdHJlYW1pbmcgbGliZXJhIGNoYXJzIGEgcml0bW8gY29uc3RhbnRlIHbDrWEgckFGOyBjdWFuZG9cbiAgICAvLyB0ZXJtaW5hLCBtdWVzdHJhIGVsIHRleHRvIGZpbmFsIGFsIGluc3RhbnRlIChzaW4gYW5pbWFjacOzbiByZXNpZHVhbCkuXG4gICAgLy8gTG9zIGRlZmF1bHRzIGRlbCBob29rIHNlIGFqdXN0YXJvbiBlbXDDrXJpY2FtZW50ZSBlbiBzdGFnaW5nOyBhdW4gYXPDrVxuICAgIC8vIHNlIGV4cG9uZW4gZmxhZ3MgZGUgcnVudGltZSAod2luZG93LiopIHBhcmEgcG9kZXIgdHVuZWFyIHNpbiByZWNvbXBpbGFyXG4gICAgLy8gc2kgYWxnw7puIGJhY2tlbmQgcHJlc2VudGEgdW5hIGNhZGVuY2lhIG11eSBkaXN0aW50YSBlbiBwcm9kdWNjacOzbi5cbiAgICAvLyAgIHdpbmRvdy5zdHJlYW1BZGFwdCA9IGZhbHNlICAgICAgLy8gZGVzYWN0aXZhIGFkYXB0YWNpw7NuIGFsIGJhY2tlbmRcbiAgICAvLyAgIHdpbmRvdy5zdHJlYW1CdWZmZXJNcyA9IDYwMCAgICAgLy8gY29sY2jDs24gb2JqZXRpdm8gKG1zKVxuICAgIC8vICAgd2luZG93LnN0cmVhbUxhZ01zID0gNDUwICAgICAgICAvLyBsYWcgbcOheGltbyBiYXNlIChtcylcbiAgICAvLyAgIHdpbmRvdy5zdHJlYW1NaW5CdWZmZXIgPSA3MCAgICAgLy8gcGlzbyBkZWwgY29sY2jDs24gZW4gY2hhcnNcbiAgICAvLyAgIHdpbmRvdy5zdHJlYW1XYXJtdXBNcyA9IDQwMCAgICAgLy8gd2FybXVwIGluaWNpYWwgKG1zKVxuICAgIGNvbnN0IHdpbkZsYWdzID1cbiAgICAgIHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnXG4gICAgICAgID8gKHdpbmRvdyBhcyB1bmtub3duIGFzIHtcbiAgICAgICAgICAgIHN0cmVhbUFkYXB0PzogYm9vbGVhblxuICAgICAgICAgICAgc3RyZWFtQnVmZmVyTXM/OiBudW1iZXJcbiAgICAgICAgICAgIHN0cmVhbUxhZ01zPzogbnVtYmVyXG4gICAgICAgICAgICBzdHJlYW1NaW5CdWZmZXI/OiBudW1iZXJcbiAgICAgICAgICAgIHN0cmVhbVdhcm11cE1zPzogbnVtYmVyXG4gICAgICAgICAgfSlcbiAgICAgICAgOiB7fVxuICAgIGNvbnN0IGRpc3BsYXlUZXh0ID0gdXNlU21vb3RoU3RyZWFtVGV4dChyYXdUZXh0LCB7XG4gICAgICBlbmFibGVkOiAhIXByb3BzLmlzU3RyZWFtaW5nLFxuICAgICAgbWF4Q2hhcnNQZXJGcmFtZTogMjQsXG4gICAgICBzbmFwVG9Xb3JkQm91bmRhcnk6IHRydWUsXG4gICAgICAuLi4od2luRmxhZ3Muc3RyZWFtTGFnTXMgIT0gbnVsbCAmJiB7IHRhcmdldExhZ01zOiB3aW5GbGFncy5zdHJlYW1MYWdNcyB9KSxcbiAgICAgIC4uLih3aW5GbGFncy5zdHJlYW1BZGFwdCAhPSBudWxsICYmIHsgYWRhcHRUb0JhY2tlbmRSYXRlOiB3aW5GbGFncy5zdHJlYW1BZGFwdCB9KSxcbiAgICAgIC4uLih3aW5GbGFncy5zdHJlYW1CdWZmZXJNcyAhPSBudWxsICYmIHsgdGFyZ2V0QnVmZmVyTXM6IHdpbkZsYWdzLnN0cmVhbUJ1ZmZlck1zIH0pLFxuICAgICAgLi4uKHdpbkZsYWdzLnN0cmVhbU1pbkJ1ZmZlciAhPSBudWxsICYmIHsgbWluQnVmZmVyQ2hhcnM6IHdpbkZsYWdzLnN0cmVhbU1pbkJ1ZmZlciB9KSxcbiAgICAgIC4uLih3aW5GbGFncy5zdHJlYW1XYXJtdXBNcyAhPSBudWxsICYmIHsgd2FybXVwTXM6IHdpbkZsYWdzLnN0cmVhbVdhcm11cE1zIH0pLFxuICAgIH0pXG4gICAgY29uc3QgY3JlYXRlQWdlbnRBY3Rpb25zQWdlbnRJZCA9IHByb3BzLmNyZWF0ZUFnZW50Rm9sbG93VXA/LmFnZW50SWRcblxuICAgIGlmICghZGlzcGxheVRleHQgJiYgIXByb3BzLmlzU3RyZWFtaW5nKSByZXR1cm4gbnVsbFxuICAgIGNvbnN0IGhhc01lbnRpb25zID0gaGFzSW5saW5lTWFya2VycyhkaXNwbGF5VGV4dClcbiAgICBjb25zdCBtZW50aW9uTm9kZXMgPSBoYXNNZW50aW9ucyA/IHJlbmRlclRleHRXaXRoTWVudGlvbnMoZGlzcGxheVRleHQpIDogbnVsbFxuICAgIHJldHVybiAoXG4gICAgICA8PlxuICAgICAgICA8U0NDQUlNZXNzYWdlV3JhcHBlclxuICAgICAgICAgIGlzQ3VycmVudFVzZXI9e3Byb3BzLmlzQ3VycmVudFVzZXJ9XG4gICAgICAgICAgaXNGcm9udGVuZENhbmNlbGxlZD17cHJvcHMuaXNGcm9udGVuZENhbmNlbGxlZH1cbiAgICAgICAgICBjbGFzc05hbWU9e2dldEVudGl0eUxpbmtXcmFwcGVyQ2xhc3NOYW1lKGRpc3BsYXlUZXh0KX1cbiAgICAgICAgPlxuICAgICAgICAgIHtoYXNNZW50aW9ucyAmJiBtZW50aW9uTm9kZXMgPyAoXG4gICAgICAgICAgICAvLyBTaSBoYXkgbWVudGlvbnMsIHJlbmRlcml6YXIgZGlyZWN0YW1lbnRlIChzaW4gbWFya2Rvd24gZW4gZWwgbWlzbW8gcMOhcnJhZm8pXG4gICAgICAgICAgICA8c3BhbiBzdHlsZT17eyBkaXNwbGF5OiAnaW5saW5lJyB9fT57bWVudGlvbk5vZGVzfTwvc3Bhbj5cbiAgICAgICAgICApIDogKFxuICAgICAgICAgICAgLy8gU2luIG1lbnRpb25zLCBwYXNhciBhIFN0cmVhbWRvd24gcGFyYSBtYXJrZG93biBzdXBwb3J0XG4gICAgICAgICAgICA8TWFpYVN0cmVhbWRvd25cbiAgICAgICAgICAgICAgdmFyaWFudD1cImNoYXRcIlxuICAgICAgICAgICAgICBpc0N1cnJlbnRVc2VyPXtwcm9wcy5pc0N1cnJlbnRVc2VyfVxuICAgICAgICAgICAgICBpc0Zyb250ZW5kQ2FuY2VsbGVkPXtwcm9wcy5pc0Zyb250ZW5kQ2FuY2VsbGVkfVxuICAgICAgICAgICAgICBjb21wb25lbnRzPXt7IGE6IEVudGl0eUxpbmtDdXN0b21MaW5rIH0gYXMgTWFpYVN0cmVhbWRvd25Qcm9wc1snY29tcG9uZW50cyddfVxuICAgICAgICAgICAgICBpc0FuaW1hdGluZz17ISFwcm9wcy5pc1N0cmVhbWluZ31cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAge2Rpc3BsYXlUZXh0fVxuICAgICAgICAgICAgPC9NYWlhU3RyZWFtZG93bj5cbiAgICAgICAgICApfVxuICAgICAgICA8L1NDQ0FJTWVzc2FnZVdyYXBwZXI+XG4gICAgICAgIHtwcm9wcy5pc0Fzc2lzdGFudCAmJiAhcHJvcHMuaXNFcnJvciAmJiAhcHJvcHMuaXNGcm9udGVuZENhbmNlbGxlZCAmJiAhcHJvcHMuYXBwcm92YWwgJiYgIXByb3BzLmlzU3RyZWFtaW5nICYmIChcbiAgICAgICAgICA8TWVzc2FnZUZlZWRiYWNrXG4gICAgICAgICAgICBjb250ZW50PXtkaXNwbGF5VGV4dH1cbiAgICAgICAgICAgIHNvdXJjZXM9e3Byb3BzLnNvdXJjZXN9XG4gICAgICAgICAgICBoYW5kbGVGZWVkYmFjaz17cHJvcHMuaGFuZGxlRmVlZGJhY2tDbGlja31cbiAgICAgICAgICAgIGRpc2FibGVGZWVkYmFjaz17cHJvcHMuZGlzYWJsZUZlZWRiYWNrfVxuICAgICAgICAgIC8+XG4gICAgICAgICl9XG4gICAgICAgIHtwcm9wcy5pc0Fzc2lzdGFudCAmJlxuICAgICAgICAgICFwcm9wcy5pc0Zyb250ZW5kQ2FuY2VsbGVkICYmXG4gICAgICAgICAgIXByb3BzLmFwcHJvdmFsICYmXG4gICAgICAgICAgKCFwcm9wcy5pc0Vycm9yIHx8IHByb3BzLnN1Z2dlc3Rpb25zPy5sZW5ndGgpICYmIChcbiAgICAgICAgICAgIDxDaGF0QUlTdWdnZXN0aW9uc1xuICAgICAgICAgICAgICBzdWdnZXN0aW9ucz17cHJvcHMuc3VnZ2VzdGlvbnMgfHwgW119XG4gICAgICAgICAgICAgIG9uU2VsZWN0U3VnZ2VzdGlvbj17c3VnZ2VzdGlvbiA9PiBwcm9wcy5oYW5kbGVTdWdnZXN0aW9uQ2xpY2socHJvcHMubWVzc2FnZUlkLCBzdWdnZXN0aW9uKX1cbiAgICAgICAgICAgICAgZGlzYWJsZWQ9e3Byb3BzLnN1Z2dlc3Rpb25zRGlzYWJsZWR9XG4gICAgICAgICAgICAgIGhpZGRlbj17ISFwcm9wcy5pc1N0cmVhbWluZyB8fCAhcHJvcHMuaXNMYXN0TWVzc2FnZSB8fCAhIXByb3BzLnN1Z2dlc3Rpb25zRGlzYWJsZWR9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICl9XG4gICAgICAgIHtwcm9wcy5pc0Fzc2lzdGFudCAmJlxuICAgICAgICAgICFwcm9wcy5pc0Vycm9yICYmXG4gICAgICAgICAgIXByb3BzLmlzRnJvbnRlbmRDYW5jZWxsZWQgJiZcbiAgICAgICAgICAhcHJvcHMuYXBwcm92YWwgJiZcbiAgICAgICAgICAhIWNyZWF0ZUFnZW50QWN0aW9uc0FnZW50SWQgJiYgKFxuICAgICAgICAgICAgPENoYXRBSUNyZWF0ZUFnZW50QWN0aW9uc1xuICAgICAgICAgICAgICBhZ2VudElkPXtjcmVhdGVBZ2VudEFjdGlvbnNBZ2VudElkfVxuICAgICAgICAgICAgICBkaXNhYmxlZD17cHJvcHMuc3VnZ2VzdGlvbnNEaXNhYmxlZH1cbiAgICAgICAgICAgICAgaGlkZGVuPXshIXByb3BzLmlzU3RyZWFtaW5nIHx8ICFwcm9wcy5pc0xhc3RNZXNzYWdlIHx8ICEhcHJvcHMuc3VnZ2VzdGlvbnNEaXNhYmxlZH1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgKX1cbiAgICAgIDwvPlxuICAgIClcbiAgfVxuKVxuXG5jb25zdCBNZXNzYWdlSXRlbSA9IG1lbW8oKHByb3BzOiBNZXNzYWdlSXRlbVByb3BzKSA9PiB7XG4gIGNvbnN0IHtcbiAgICBpZCxcbiAgICB1c2VyLFxuICAgIG1lc3NhZ2UsXG4gICAgaXNTdHJlYW1pbmcsXG4gICAgaXNFcnJvcixcbiAgICBhdXRoVXNlcixcbiAgICBvcHRpb25zLFxuICAgIGlzQ2hhbmdlUHJvamVjdCxcbiAgICBoYW5kbGVTZWxlY3RPcHRpb24sXG4gICAgaGFuZGxlU3VnZ2VzdGlvbkNsaWNrLFxuICAgIGhhbmRsZUZlZWRiYWNrLFxuICAgIGhhbmRsZUFwcHJvdmFsRGVjaXNpb24sXG4gICAgZGlzYWJsZUZlZWRiYWNrLFxuICAgIHJvbGUsXG4gICAgc291cmNlcyxcbiAgICBhdHRhY2htZW50cyxcbiAgICBhcHByb3ZhbCxcbiAgICBhcHByb3ZhbFN0YXR1cyxcbiAgICBzdWdnZXN0aW9ucyxcbiAgICBjcmVhdGVBZ2VudEZvbGxvd1VwLFxuICAgIGhhc1NlbGVjdGVkU3VnZ2VzdGlvbixcbiAgICBpc0xhc3RNZXNzYWdlLFxuICAgIHN0cmVhbUFjdGl2aXR5LFxuICB9ID0gcHJvcHNcblxuICBjb25zdCBbcHJldmlld0F0dGFjaG1lbnQsIHNldFByZXZpZXdBdHRhY2htZW50XSA9IHVzZVN0YXRlPEF0dGFjaG1lbnRGaWxlIHwgbnVsbD4obnVsbClcbiAgY29uc3QgaXNDdXJyZW50VXNlciA9IHJvbGUgPT09IENoYXRIaXN0b3J5Um9sZS5VU0VSIHx8IHVzZXIuaWQgPT09IGF1dGhVc2VyLmlkLnRvU3RyaW5nKClcbiAgY29uc3QgaXNBc3Npc3RhbnQgPSByb2xlID09PSBDaGF0SGlzdG9yeVJvbGUuQVNTSVNUQU5UIHx8IHVzZXIuaWQgPT09ICdhc3Npc3RhbnQnXG4gIGNvbnN0IGlzU3RyZWFtaW5nUGxhY2Vob2xkZXIgPSBpc1N0cmVhbWluZ1BsYWNlaG9sZGVyTWVzc2FnZUlkKGlkKVxuICBjb25zdCBzdHJlYW1pbmdUZXh0ID0gdXNlU3RyZWFtaW5nTWVzc2FnZShpc1N0cmVhbWluZyB8fCBpc1N0cmVhbWluZ1BsYWNlaG9sZGVyID8gaWQgOiBudWxsKVxuICBjb25zdCBpc0FjdGl2ZVN0cmVhbWluZyA9ICEhaXNTdHJlYW1pbmcgfHwgaXNTdHJlYW1pbmdQbGFjZWhvbGRlclxuICBjb25zdCBoYXNTdHJlYW1UZXh0ID0gQm9vbGVhbihzdHJlYW1pbmdUZXh0KVxuICBjb25zdCBtZXNzYWdlQXR0YWNobWVudHMgPVxuICAgIGF0dGFjaG1lbnRzICYmIGF0dGFjaG1lbnRzLmxlbmd0aCA+IDBcbiAgICAgID8gYXR0YWNobWVudHNcbiAgICAgIDogIWlzQXNzaXN0YW50ICYmIEFycmF5LmlzQXJyYXkoc291cmNlcylcbiAgICAgICAgPyAoc291cmNlcyBhcyBBdHRhY2htZW50RmlsZVtdKVxuICAgICAgICA6IFtdXG5cbiAgY29uc3QgaGFuZGxlQXR0YWNobWVudENsaWNrID0gKGF0dGFjaG1lbnQ6IEF0dGFjaG1lbnRGaWxlKSA9PiB7XG4gICAgLy8gUGVybWl0aXIgcHJldmlzdWFsaXphY2nDs24gc2kgdGllbmUgYXJjaGl2byBsb2NhbCBvIFVSTHMgZGVsIGJhY2tlbmRcbiAgICBpZiAoXG4gICAgICBhdHRhY2htZW50LmZpbGUgaW5zdGFuY2VvZiBGaWxlIHx8XG4gICAgICBhdHRhY2htZW50Lm9yaWdpbmFsRmlsZSBpbnN0YW5jZW9mIEZpbGUgfHxcbiAgICAgIGF0dGFjaG1lbnQudXJsX3RodW1ibmFpbCB8fFxuICAgICAgYXR0YWNobWVudC51cmxfb3JpZ2luYWwgfHxcbiAgICAgIGF0dGFjaG1lbnQudXJsX2ZpbGVcbiAgICApIHtcbiAgICAgIHNldFByZXZpZXdBdHRhY2htZW50KGF0dGFjaG1lbnQpXG4gICAgfVxuICB9XG5cbiAgY29uc3QgaGFuZGxlQ2xvc2VQcmV2aWV3ID0gKCkgPT4ge1xuICAgIHNldFByZXZpZXdBdHRhY2htZW50KG51bGwpXG4gIH1cblxuICBjb25zdCBoYW5kbGVBdHRhY2htZW50RG93bmxvYWQgPSBhc3luYyAoYXR0YWNobWVudDogQXR0YWNobWVudEZpbGUpID0+IHtcbiAgICBjb25zdCBleHRlbnNpb24gPSBhdHRhY2htZW50Lm5hbWUuaW5jbHVkZXMoJy4nKSA/ICcnIDogYC4ke2F0dGFjaG1lbnQudHlwZX1gXG4gICAgY29uc3QgZmlsZU5hbWUgPSBgJHthdHRhY2htZW50Lm5hbWV9JHtleHRlbnNpb259YFxuICAgIGNvbnN0IGZpbGVVcmwgPSBhdHRhY2htZW50LnVybF9vcmlnaW5hbCB8fCBhdHRhY2htZW50LnVybF9maWxlIHx8IGF0dGFjaG1lbnQudXJsX3RodW1ibmFpbFxuXG4gICAgdHJ5IHtcbiAgICAgIGxldCBibG9iVXJsOiBzdHJpbmcgfCBudWxsID0gbnVsbFxuXG4gICAgICBpZiAoZmlsZVVybCkge1xuICAgICAgICBjb25zdCBkb3dubG9hZGVkRmlsZSA9IGF3YWl0IGRvd25sb2FkRmlsZUZyb21VcmwoZmlsZVVybCwgZmlsZU5hbWUsIGF0dGFjaG1lbnQudHlwZSlcbiAgICAgICAgYmxvYlVybCA9IFVSTC5jcmVhdGVPYmplY3RVUkwoZG93bmxvYWRlZEZpbGUpXG4gICAgICB9IGVsc2UgaWYgKGF0dGFjaG1lbnQuZmlsZSBpbnN0YW5jZW9mIEZpbGUpIHtcbiAgICAgICAgYmxvYlVybCA9IFVSTC5jcmVhdGVPYmplY3RVUkwoYXR0YWNobWVudC5maWxlKVxuICAgICAgfVxuXG4gICAgICBpZiAoIWJsb2JVcmwpIHJldHVyblxuXG4gICAgICBjb25zdCBsaW5rID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpXG4gICAgICBsaW5rLmhyZWYgPSBibG9iVXJsXG4gICAgICBsaW5rLmRvd25sb2FkID0gZmlsZU5hbWVcbiAgICAgIGxpbmsuc3R5bGUuZGlzcGxheSA9ICdub25lJ1xuICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChsaW5rKVxuICAgICAgbGluay5jbGljaygpXG5cbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGxpbmspXG4gICAgICAgIFVSTC5yZXZva2VPYmplY3RVUkwoYmxvYlVybClcbiAgICAgIH0sIDEwMClcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcignRmFpbGVkIHRvIGRvd25sb2FkIGF0dGFjaG1lbnQnLCBlcnJvcilcbiAgICB9XG4gIH1cblxuICBpZiAoaXNDaGFuZ2VQcm9qZWN0ICYmIG9wdGlvbnMpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPE1lc3NhZ2VXcmFwcGVyIGtleT17aWR9IGlzQ3VycmVudFVzZXI9e2lzQ3VycmVudFVzZXJ9IGRhdGEtbWVzc2FnZS1pZD17aWR9IGhhc0ZlZWRiYWNrPXtmYWxzZX0+XG4gICAgICAgIDxTQ01lc3NhZ2VJdGVtV3JhcHBlciAkaXNBc3Npc3RhbnQ9e2lzQXNzaXN0YW50fT5cbiAgICAgICAgICA8TWVzc2FnZUNvbnRlbnRXcmFwcGVyXG4gICAgICAgICAgICBpc0NoYW5nZVByb2plY3Q9e2lzQ2hhbmdlUHJvamVjdH1cbiAgICAgICAgICAgIG1lc3NhZ2U9e21lc3NhZ2V9XG4gICAgICAgICAgICBpc0N1cnJlbnRVc2VyPXtpc0N1cnJlbnRVc2VyfVxuICAgICAgICAgICAgaXNFcnJvcj17aXNFcnJvcn1cbiAgICAgICAgICAgIG1lc3NhZ2VFeHRyYUNvbnRlbnQ9ezxNZXNzYWdlT3B0aW9ucyBvcHRpb25zPXtvcHRpb25zIGFzIGFueX0gaGFuZGxlU2VsZWN0T3B0aW9uPXtoYW5kbGVTZWxlY3RPcHRpb259IC8+fVxuICAgICAgICAgIC8+XG4gICAgICAgIDwvU0NNZXNzYWdlSXRlbVdyYXBwZXI+XG4gICAgICA8L01lc3NhZ2VXcmFwcGVyPlxuICAgIClcbiAgfVxuXG4gIGNvbnN0IGhhbmRsZUZlZWRiYWNrQ2xpY2sgPSAoZmVlZGJhY2s6IEZlZWRiYWNrKSA9PiB7XG4gICAgY29uc3Qgc2Vzc2lvbklkID0gaWRcbiAgICAgIC5zcGxpdCgnLScpXG4gICAgICAuZmlsdGVyKHF1ZXN0aW9uSWQgPT4gcXVlc3Rpb25JZCAhPT0gJ2Fuc3dlcicpXG4gICAgICAuam9pbignLScpXG4gICAgaGFuZGxlRmVlZGJhY2s/LihmZWVkYmFjaywgc2Vzc2lvbklkKVxuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8U0NNZXNzYWdlSXRlbVdyYXBwZXIgJGlzQXNzaXN0YW50PXtpc0Fzc2lzdGFudH0gZGF0YS1tZXNzYWdlLWlkPXtpZH0+XG4gICAgICA8U0NNZXNzYWdlSXRlbUlubmVyPlxuICAgICAgICB7aXNBc3Npc3RhbnQgJiYgIWlzQWN0aXZlU3RyZWFtaW5nICYmIDxSZWFzb25pbmdCbG9jayBtZXNzYWdlSWQ9e2lkfSB0cmFjZT17cHJvcHMucmVhc29uaW5nID8/IG51bGx9IC8+fVxuICAgICAgICB7ISFtZXNzYWdlQXR0YWNobWVudHMubGVuZ3RoICYmIChcbiAgICAgICAgICA8U0NBdHRhY2htZW50c1JvdyAkaXNBc3Npc3RhbnQ9e2lzQXNzaXN0YW50fT5cbiAgICAgICAgICAgIHttZXNzYWdlQXR0YWNobWVudHMubWFwKChhdHRhY2htZW50LCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgICAvLyBEZXRlY3RhciBzaSBlcyB1biBhcmNoaXZvIGRlIGF1ZGlvXG4gICAgICAgICAgICAgIGNvbnN0IGF0dGFjaG1lbnRUeXBlID0gYXR0YWNobWVudD8udHlwZT8udG9Mb3dlckNhc2UoKSB8fCAnJ1xuICAgICAgICAgICAgICBjb25zdCBhdHRhY2htZW50TmFtZSA9IGF0dGFjaG1lbnQ/Lm5hbWU/LnRvTG93ZXJDYXNlKCkgfHwgJydcbiAgICAgICAgICAgICAgY29uc3QgaXNBdWRpb0ZpbGUgPVxuICAgICAgICAgICAgICAgIGF0dGFjaG1lbnRUeXBlLnN0YXJ0c1dpdGgoJ2F1ZGlvLycpIHx8XG4gICAgICAgICAgICAgICAgWydmbGFjJywgJ200YScsICdtcDMnLCAnbXA0JywgJ29nYScsICdvZ2cnLCAnd2F2JywgJ3dlYm0nXS5pbmNsdWRlcyhhdHRhY2htZW50VHlwZSkgfHxcbiAgICAgICAgICAgICAgICBbJy5mbGFjJywgJy5tNGEnLCAnLm1wMycsICcubXA0JywgJy5vZ2EnLCAnLm9nZycsICcud2F2JywgJy53ZWJtJ10uc29tZShleHQgPT5cbiAgICAgICAgICAgICAgICAgIGF0dGFjaG1lbnROYW1lLmVuZHNXaXRoKGV4dClcbiAgICAgICAgICAgICAgICApXG5cbiAgICAgICAgICAgICAgaWYgKGlzQXVkaW9GaWxlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIDxBdHRhY2htZW50Q2FyZEF1ZGlvIGtleT17YCR7YXR0YWNobWVudC5pZH0tJHthdHRhY2htZW50Lm5hbWV9YH0gYXR0YWNobWVudD17YXR0YWNobWVudH0gLz5cbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgPEF0dGFjaG1lbnRDYXJkXG4gICAgICAgICAgICAgICAgICBrZXk9e2Ake2F0dGFjaG1lbnQuaWR9LSR7YXR0YWNobWVudC5uYW1lfWB9XG4gICAgICAgICAgICAgICAgICBhdHRhY2htZW50PXthdHRhY2htZW50fVxuICAgICAgICAgICAgICAgICAgcG9zaXRpb25JbmRleD17aW5kZXh9XG4gICAgICAgICAgICAgICAgICBvbkRvd25sb2FkPXsoKSA9PiBoYW5kbGVBdHRhY2htZW50RG93bmxvYWQoYXR0YWNobWVudCl9XG4gICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBoYW5kbGVBdHRhY2htZW50Q2xpY2soYXR0YWNobWVudCl9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfSl9XG4gICAgICAgICAgPC9TQ0F0dGFjaG1lbnRzUm93PlxuICAgICAgICApfVxuICAgICAgICB7KCEhbWVzc2FnZSB8fCAoaXNBY3RpdmVTdHJlYW1pbmcgJiYgaGFzU3RyZWFtVGV4dCkpICYmICEoaXNBc3Npc3RhbnQgJiYgISFtZXNzYWdlQXR0YWNobWVudHMubGVuZ3RoKSAmJiAoXG4gICAgICAgICAgPFN0cmVhbWluZ01lc3NhZ2VCb2R5XG4gICAgICAgICAgICBtZXNzYWdlPXttZXNzYWdlID8/ICcnfVxuICAgICAgICAgICAgaXNTdHJlYW1pbmc9e2lzQWN0aXZlU3RyZWFtaW5nICYmIGhhc1N0cmVhbVRleHR9XG4gICAgICAgICAgICBpc0N1cnJlbnRVc2VyPXtpc0N1cnJlbnRVc2VyfVxuICAgICAgICAgICAgaXNBc3Npc3RhbnQ9e2lzQXNzaXN0YW50fVxuICAgICAgICAgICAgaXNGcm9udGVuZENhbmNlbGxlZD17cHJvcHMuaXNGcm9udGVuZENhbmNlbGxlZH1cbiAgICAgICAgICAgIGFwcHJvdmFsPXthcHByb3ZhbH1cbiAgICAgICAgICAgIGlzRXJyb3I9e2lzRXJyb3J9XG4gICAgICAgICAgICBzb3VyY2VzPXtzb3VyY2VzfVxuICAgICAgICAgICAgc3VnZ2VzdGlvbnM9e3N1Z2dlc3Rpb25zfVxuICAgICAgICAgICAgY3JlYXRlQWdlbnRGb2xsb3dVcD17Y3JlYXRlQWdlbnRGb2xsb3dVcH1cbiAgICAgICAgICAgIGhhbmRsZUZlZWRiYWNrQ2xpY2s9e2hhbmRsZUZlZWRiYWNrQ2xpY2t9XG4gICAgICAgICAgICBkaXNhYmxlRmVlZGJhY2s9e2Rpc2FibGVGZWVkYmFjayA/PyBudWxsfVxuICAgICAgICAgICAgaGFuZGxlU3VnZ2VzdGlvbkNsaWNrPXtoYW5kbGVTdWdnZXN0aW9uQ2xpY2t9XG4gICAgICAgICAgICBzdWdnZXN0aW9uc0Rpc2FibGVkPXtpc0FjdGl2ZVN0cmVhbWluZyB8fCAhIWhhc1NlbGVjdGVkU3VnZ2VzdGlvbn1cbiAgICAgICAgICAgIG1lc3NhZ2VJZD17aWR9XG4gICAgICAgICAgICBpc0xhc3RNZXNzYWdlPXtpc0xhc3RNZXNzYWdlfVxuICAgICAgICAgIC8+XG4gICAgICAgICl9XG4gICAgICAgIHsvKiBMYSBhY2Npw7NuIHZhIERFQkFKTyBkZWwgdGV4dG86IHByaW1lcm8gc2UgbGVlIHF1w6kgdmEgYSBoYWNlciB5IGFiYWpvXG4gICAgICAgICAgICBxdcOpIGVzdMOhIGhhY2llbmRvLCBjb21vIGVuIENoYXRHUFQuIExvIHRlbsOtYW1vcyBhbCByZXbDqXMuXG4gICAgICAgICAgICBTaW4gU0NMb2FkaW5nTWVzc2FnZXNDb2x1bW46IHN1IGBtYXJnaW4tdG9wOiAtMjRweGAgZXN0w6EgY2FsaWJyYWRvXG4gICAgICAgICAgICBwYXJhIGVsIGdhcCBkZSAzNnB4IGRlIFNDTWVzc2FnZXNJbm5lciwgeSBhY8OhIGVsIHBhZHJlIGVzXG4gICAgICAgICAgICBTQ01lc3NhZ2VJdGVtSW5uZXIgY29uIGdhcCA4cHgg4oCUIHBpbnRhYmEgZWwgaW5kaWNhZG9yIGVuY2ltYS4gKi99XG4gICAgICAgIHtpc0Fzc2lzdGFudCAmJiBpc0FjdGl2ZVN0cmVhbWluZyAmJiBzdHJlYW1BY3Rpdml0eSAmJiA8QWdlbnRBY3Rpdml0eUluZGljYXRvciBhY3Rpdml0eT17c3RyZWFtQWN0aXZpdHl9IC8+fVxuICAgICAgICB7YXBwcm92YWwgJiYgYXBwcm92YWwucGVuZGluZ19hY3Rpb25zICYmIChcbiAgICAgICAgICA8U0NBcHByb3ZhbEFjdGlvbnNDb2x1bW4+XG4gICAgICAgICAgICA8QXBwcm92YWxCb3hcbiAgICAgICAgICAgICAgYWN0aW9ucz17YXBwcm92YWwucGVuZGluZ19hY3Rpb25zfVxuICAgICAgICAgICAgICBzdGF0dXM9e2FwcHJvdmFsU3RhdHVzfVxuICAgICAgICAgICAgICBvbkFwcHJvdmU9e3RocmVhZElkcyA9PiBoYW5kbGVBcHByb3ZhbERlY2lzaW9uKHRocmVhZElkcywgJ2FwcHJvdmUnKX1cbiAgICAgICAgICAgICAgb25SZWplY3Q9e3RocmVhZElkcyA9PiBoYW5kbGVBcHByb3ZhbERlY2lzaW9uKHRocmVhZElkcywgJ3JlamVjdCcpfVxuICAgICAgICAgICAgICBpc1Byb2plY3REZWxldGVkPXtwcm9wcy5wcm9qZWN0TWV0YWRhdGE/LmlzX2RlbGV0ZWQgPT09IHRydWV9XG4gICAgICAgICAgICAgIGlzRXhwYW5kZWQ9e3Byb3BzLmV4cGFuZGVkfVxuICAgICAgICAgICAgICBoaXRsSW5zdGFuY2VJZD17YXBwcm92YWwub3JpZ2luYWxfdGhyZWFkX2lkfVxuICAgICAgICAgICAgICB3YXJuaW5nTWVzc2FnZT17YXBwcm92YWwud2FybmluZ19tZXNzYWdlfVxuICAgICAgICAgICAgICBtYW51YWxBcHByb3ZhbERldGVjdGVkPXthcHByb3ZhbC5tYW51YWxfYXBwcm92YWxfZGV0ZWN0ZWR9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvU0NBcHByb3ZhbEFjdGlvbnNDb2x1bW4+XG4gICAgICAgICl9XG4gICAgICA8L1NDTWVzc2FnZUl0ZW1Jbm5lcj5cbiAgICAgIDxBdHRhY2htZW50UHJldmlld01vZGFsXG4gICAgICAgIGlzT3Blbj17ISFwcmV2aWV3QXR0YWNobWVudH1cbiAgICAgICAgb25DbG9zZT17aGFuZGxlQ2xvc2VQcmV2aWV3fVxuICAgICAgICBhdHRhY2htZW50PXtwcmV2aWV3QXR0YWNobWVudH1cbiAgICAgIC8+XG4gICAgPC9TQ01lc3NhZ2VJdGVtV3JhcHBlcj5cbiAgKVxufSlcblxuY29uc3QgQ2hhdEFJTWVzc2FnZXNJbm5lciA9ICh7XG4gIHVzZXJJbml0aWFsTWVzc2FnZSxcbiAgaW5pdGlhbENoYXRJZCxcbiAgb25FcnJvcixcbiAgb25TZW5kTWVzc2FnZVJlYWR5LFxuICBvblNjcm9sbFRvQm90dG9tLFxuICBhdHRhY2htZW50cyxcbiAgYWdlbnRzLFxuICBleHBhbmRlZCxcbn06IENoYXRBSU1lc3NhZ2VzUHJvcHMpID0+IHtcbiAgY29uc3QgeyB0IH0gPSB1c2VUKClcbiAgY29uc3QgeyBpc1dlYlNlYXJjaEFjdGl2ZSwgaXNEZWVwU2VhcmNoQWN0aXZlLCBhZ2VudCB9ID0gdXNlR2xvYmFsQ29udGV4dCgpXG4gIGNvbnN0IGV2ZW50ID0gdXNlRXZlbnQoKVxuICBjb25zdCBhdXRoVXNlciA9IHVzZVVzZXIoKVxuICBjb25zdCBtZXNzYWdlc1JlZiA9IHVzZVJlZjxIVE1MRGl2RWxlbWVudD4obnVsbClcbiAgY29uc3QgY2hhdEluaXRpYWxpemVkUmVmID0gdXNlUmVmKGZhbHNlKVxuICBjb25zdCBpc0xvYWRpbmdNb3JlUmVmID0gdXNlUmVmKGZhbHNlKVxuICBjb25zdCB1c2VyU2Nyb2xsaW5nUmVmID0gdXNlUmVmKGZhbHNlKVxuICBjb25zdCBzY3JvbGxUaHJlc2hvbGRSZWYgPSB1c2VSZWYoMzkpXG4gIGNvbnN0IGxhc3RTY3JvbGxUb3BSZWYgPSB1c2VSZWYoMClcbiAgY29uc3Qgc2hvd1Njcm9sbFRvQm90dG9tUmVmID0gdXNlUmVmKGZhbHNlKVxuICBjb25zdCBzaG93VG9wR3JhZGllbnRSZWYgPSB1c2VSZWYoZmFsc2UpXG4gIGNvbnN0IHNob3dCb3R0b21HcmFkaWVudFJlZiA9IHVzZVJlZihmYWxzZSlcbiAgY29uc3Qgc2Nyb2xsUmFmUmVmID0gdXNlUmVmPG51bWJlciB8IG51bGw+KG51bGwpXG4gIC8qKlxuICAgKiBUdXJubyBjb24gZWwgc2Nyb2xsIGJham8gY29udHJvbCBkZWwgdXN1YXJpbzogZGVzZGUgcXVlIGVudsOtYSBlbCBtZW5zYWplIHlcbiAgICogaGFzdGEgZWwgcHLDs3hpbW8gZW52w61vIG5vIG1vdmVtb3MgZWwgc2Nyb2xsIHBvciBuaW5nw7puIG1vdGl2by4gRXNcbiAgICogaW5kZXBlbmRpZW50ZSBkZSBsYSBhbHR1cmEgZGVsIHNwYWNlciwgcXVlIHB1ZWRlIGxsZWdhciBhIDAgc2luIGRlc2FuY2xhci5cbiAgICovXG4gIGNvbnN0IGFuY2hvcmVkVHVybklkUmVmID0gdXNlUmVmPHN0cmluZyB8IG51bGw+KG51bGwpXG4gIGNvbnN0IHNwYWNlckVsUmVmID0gdXNlUmVmPEhUTUxEaXZFbGVtZW50IHwgbnVsbD4obnVsbClcbiAgY29uc3Qgc3BhY2VySGVpZ2h0UmVmID0gdXNlUmVmKDApXG4gIGNvbnN0IHdhc0xvYWRpbmdNZXNzYWdlc1JlZiA9IHVzZVJlZihmYWxzZSlcbiAgY29uc3QgbGFzdFNjcm9sbGVkU2Vzc2lvblJlZiA9IHVzZVJlZjxzdHJpbmcgfCBudWxsPihudWxsKVxuICBjb25zdCBbc2hvd1Njcm9sbFRvQm90dG9tLCBzZXRTaG93U2Nyb2xsVG9Cb3R0b21dID0gdXNlU3RhdGUoZmFsc2UpXG4gIGNvbnN0IFtzaG93VG9wR3JhZGllbnQsIHNldFNob3dUb3BHcmFkaWVudF0gPSB1c2VTdGF0ZShmYWxzZSlcbiAgY29uc3QgW3Nob3dCb3R0b21HcmFkaWVudCwgc2V0U2hvd0JvdHRvbUdyYWRpZW50XSA9IHVzZVN0YXRlKGZhbHNlKVxuICBjb25zdCBbc2VsZWN0ZWRTdWdnZXN0aW9uTWVzc2FnZUlkcywgc2V0U2VsZWN0ZWRTdWdnZXN0aW9uTWVzc2FnZUlkc10gPSB1c2VTdGF0ZTxSZWNvcmQ8c3RyaW5nLCBib29sZWFuPj4oe30pXG5cbiAgY29uc3Qge1xuICAgIG1lc3NhZ2VzLFxuICAgIGxvYWRpbmdNZXNzYWdlcyxcbiAgICBpc0xvYWRpbmdNb3JlTWVzc2FnZXMsXG4gICAgd2FpdGluZ1Jlc3BvbnNlLFxuICAgIGlzV3JpdGluZyxcbiAgICBsb2FkaW5nTWVzc2FnZSxcbiAgICBzdHJlYW1BY3Rpdml0eSxcbiAgICBhY3RpdmVMb2FkaW5ncyxcbiAgICBzZW5kTWVzc2FnZSxcbiAgICBjaGFuZ2VQcm9qZWN0LFxuICAgIGhhbmRsZUZlZWRiYWNrLFxuICAgIGhhbmRsZUFwcHJvdmFsRGVjaXNpb24sXG4gICAgaW5pdGlhbGl6ZUNoYXQsXG4gICAgaGFuZGxlU2Nyb2xsLFxuICAgIHN0b3BHZW5lcmF0aW9uLFxuICB9ID0gdXNlQ2hhdE1hbmFnZXIoe1xuICAgIGNoYXRJZDogaW5pdGlhbENoYXRJZCB8fCB1bmRlZmluZWQsXG4gICAgdXNlckluaXRpYWxNZXNzYWdlLFxuICAgIG9uRXJyb3IsXG4gICAgYXR0YWNobWVudHMsXG4gICAgYWdlbnRzLFxuICB9KVxuXG4gIGNvbnN0IGhhbmRsZVNlbGVjdE9wdGlvbiA9IHVzZUNhbGxiYWNrKFxuICAgIChvcHRpb246IFByb2plY3QpID0+IHtcbiAgICAgIGNoYW5nZVByb2plY3Qob3B0aW9uKVxuICAgIH0sXG4gICAgW2NoYW5nZVByb2plY3RdXG4gIClcblxuICBjb25zdCBoYW5kbGVTdWdnZXN0aW9uQ2xpY2sgPSB1c2VDYWxsYmFjayhcbiAgICAobWVzc2FnZUlkOiBzdHJpbmcsIHN1Z2dlc3Rpb246IHN0cmluZykgPT4ge1xuICAgICAgaWYgKCFzdWdnZXN0aW9uPy50cmltKCkpIHJldHVyblxuICAgICAgaWYgKHNlbGVjdGVkU3VnZ2VzdGlvbk1lc3NhZ2VJZHNbbWVzc2FnZUlkXSkgcmV0dXJuXG4gICAgICBjb25zdCBpc01hcmtldHBsYWNlR2xvYmFsQWdlbnQgPSBpc01haWFrZXJBZ2VudChhZ2VudClcbiAgICAgIGV2ZW50KEVWRU5UUy5haUNoYXRTdWdnZXN0ZWRBbnN3ZXIsIHtcbiAgICAgICAgYWdlbnRfdHlwZTogaXNNYXJrZXRwbGFjZUdsb2JhbEFnZW50ID8gJ21hcmtldHBsYWNlJyA6IGFnZW50Py50eXBlLFxuICAgICAgfSlcbiAgICAgIHNldFNlbGVjdGVkU3VnZ2VzdGlvbk1lc3NhZ2VJZHMocHJldiA9PiAoeyAuLi5wcmV2LCBbbWVzc2FnZUlkXTogdHJ1ZSB9KSlcblxuICAgICAgY29uc3QgdGFyZ2V0TWVzc2FnZSA9IG1lc3NhZ2VzLmZpbmQobXNnID0+IG1zZy5pZCA9PT0gbWVzc2FnZUlkKVxuICAgICAgY29uc3QgaXNSZXRyeVN1Z2dlc3Rpb24gPSAhIXRhcmdldE1lc3NhZ2U/LmlzRXJyb3IgJiYgc3VnZ2VzdGlvbiA9PT0gdCgnY2hhdC5yZXRyeScpXG4gICAgICBpZiAoaXNSZXRyeVN1Z2dlc3Rpb24pIHtcbiAgICAgICAgY29uc3QgbGFzdFVzZXJNZXNzYWdlID0gbWVzc2FnZXNcbiAgICAgICAgICAuZmlsdGVyKG1zZyA9PiBtc2cucm9sZSA9PT0gQ2hhdEhpc3RvcnlSb2xlLlVTRVIgfHwgbXNnLnVzZXIuaWQgPT09IGF1dGhVc2VyLmlkLnRvU3RyaW5nKCkpXG4gICAgICAgICAgLmF0KC0xKVxuICAgICAgICBpZiAobGFzdFVzZXJNZXNzYWdlPy5tZXNzYWdlKSB7XG4gICAgICAgICAgY29uc3QgcmV0cnlBdHRhY2htZW50cyA9IEFycmF5LmlzQXJyYXkobGFzdFVzZXJNZXNzYWdlLmF0dGFjaG1lbnRzKVxuICAgICAgICAgICAgPyBsYXN0VXNlck1lc3NhZ2UuYXR0YWNobWVudHNcbiAgICAgICAgICAgIDogQXJyYXkuaXNBcnJheShsYXN0VXNlck1lc3NhZ2Uuc291cmNlcylcbiAgICAgICAgICAgICAgPyBsYXN0VXNlck1lc3NhZ2Uuc291cmNlc1xuICAgICAgICAgICAgICA6IFtdXG4gICAgICAgICAgc2VuZE1lc3NhZ2UobGFzdFVzZXJNZXNzYWdlLm1lc3NhZ2UsIHJldHJ5QXR0YWNobWVudHMpXG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgc2VuZE1lc3NhZ2Uoc3VnZ2VzdGlvbilcbiAgICB9LFxuICAgIFtcbiAgICAgIHNlbmRNZXNzYWdlLFxuICAgICAgc2VsZWN0ZWRTdWdnZXN0aW9uTWVzc2FnZUlkcyxcbiAgICAgIGV2ZW50LFxuICAgICAgYWdlbnQ/LmVudGl0eSxcbiAgICAgIGFnZW50Py5uYW1lLFxuICAgICAgYWdlbnQ/LnR5cGUsXG4gICAgICBtZXNzYWdlcyxcbiAgICAgIHQsXG4gICAgICBhdXRoVXNlci5pZCxcbiAgICBdXG4gIClcblxuICAvKipcbiAgICogUmVjYWxjdWxhIGVsIGJvdMOzbiBcInNjcm9sbCB0byBib3R0b21cIiB5IGxvcyBncmFkaWVudGVzIGRlIGJvcmRlIGEgcGFydGlyIGRlXG4gICAqIGxhIHBvc2ljacOzbiBkZWwgc2Nyb2xsLiBMb3MgcmVmcyBldml0YW4gYHNldFN0YXRlYCBjdWFuZG8gZWwgdmFsb3Igbm8gY2FtYmlhOlxuICAgKiBlc3RvIGNvcnJlIGVuIGNhZGEgZnJhbWUgZGVsIHN0cmVhbS5cbiAgICovXG4gIGNvbnN0IHVwZGF0ZVNjcm9sbEFmZm9yZGFuY2VzID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGNvbnN0IGVsID0gbWVzc2FnZXNSZWYuY3VycmVudFxuICAgIGlmICghZWwpIHJldHVyblxuICAgIGNvbnN0IHsgc2Nyb2xsVG9wLCBzY3JvbGxIZWlnaHQsIGNsaWVudEhlaWdodCB9ID0gZWxcbiAgICAvLyBFbCBzcGFjZXIgZGVsIHR1cm5vIGVzIGFsdG8gcmVzZXJ2YWRvLCBubyBjb250ZW5pZG86IHNpIG5vIGxvIGRlc2NvbnRhbW9zXG4gICAgLy8gbGEgZmxlY2hhIHkgZWwgZ3JhZGllbnRlIGRlIGFiYWpvIHF1ZWRhbiBlbmNlbmRpZG9zIGR1cmFudGUgdG9kbyBlbCB0dXJuby5cbiAgICBjb25zdCBkaXN0YW5jZUZyb21Cb3R0b20gPSBzY3JvbGxIZWlnaHQgLSBzcGFjZXJIZWlnaHRSZWYuY3VycmVudCAtIHNjcm9sbFRvcCAtIGNsaWVudEhlaWdodFxuXG4gICAgY29uc3Qgc2hvdWxkU2hvdyA9IGRpc3RhbmNlRnJvbUJvdHRvbSA+IDUwXG4gICAgaWYgKHNob3dTY3JvbGxUb0JvdHRvbVJlZi5jdXJyZW50ICE9PSBzaG91bGRTaG93KSB7XG4gICAgICBzaG93U2Nyb2xsVG9Cb3R0b21SZWYuY3VycmVudCA9IHNob3VsZFNob3dcbiAgICAgIHNldFNob3dTY3JvbGxUb0JvdHRvbShzaG91bGRTaG93KVxuICAgIH1cblxuICAgIGNvbnN0IG5leHRUb3BHcmFkaWVudCA9IHNjcm9sbFRvcCA+IDFcbiAgICBpZiAoc2hvd1RvcEdyYWRpZW50UmVmLmN1cnJlbnQgIT09IG5leHRUb3BHcmFkaWVudCkge1xuICAgICAgc2hvd1RvcEdyYWRpZW50UmVmLmN1cnJlbnQgPSBuZXh0VG9wR3JhZGllbnRcbiAgICAgIHNldFNob3dUb3BHcmFkaWVudChuZXh0VG9wR3JhZGllbnQpXG4gICAgfVxuXG4gICAgY29uc3QgbmV4dEJvdHRvbUdyYWRpZW50ID0gZGlzdGFuY2VGcm9tQm90dG9tID4gMVxuICAgIGlmIChzaG93Qm90dG9tR3JhZGllbnRSZWYuY3VycmVudCAhPT0gbmV4dEJvdHRvbUdyYWRpZW50KSB7XG4gICAgICBzaG93Qm90dG9tR3JhZGllbnRSZWYuY3VycmVudCA9IG5leHRCb3R0b21HcmFkaWVudFxuICAgICAgc2V0U2hvd0JvdHRvbUdyYWRpZW50KG5leHRCb3R0b21HcmFkaWVudClcbiAgICB9XG4gIH0sIFtdKVxuXG4gIC8qKlxuICAgKiBTY3JvbGwgaW5tZWRpYXRvIGFsIGZvbmRvIChkZW50cm8gZGUgckFGIHBhcmEgY29vcmRpbmFyIGNvbiBlbCBwYWludClcbiAgICogeSBhY3R1YWxpemEgbGEgdmlzaWJpbGlkYWQgZGVsIGJvdMOzbi4gUmVzcGV0YSBgc2tpcElmVXNlclNjcm9sbGluZ2AgcGFyYVxuICAgKiBubyBzb2JyZXNjcmliaXIgZWwgc2Nyb2xsIG1hbnVhbCBkZWwgdXN1YXJpbyBkdXJhbnRlIGVsIHN0cmVhbWluZy5cbiAgICovXG4gIGNvbnN0IHNjcm9sbFRvQm90dG9tUmFmID0gdXNlQ2FsbGJhY2soXG4gICAgKG9wdHM6IHsgc2tpcElmVXNlclNjcm9sbGluZz86IGJvb2xlYW47IGRlbGF5TXM/OiBudW1iZXIgfSA9IHt9KSA9PiB7XG4gICAgICBjb25zdCB7IHNraXBJZlVzZXJTY3JvbGxpbmcgPSBmYWxzZSwgZGVsYXlNcyA9IDAgfSA9IG9wdHNcbiAgICAgIGNvbnN0IHJ1biA9ICgpID0+IHtcbiAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcbiAgICAgICAgICBjb25zdCBlbCA9IG1lc3NhZ2VzUmVmLmN1cnJlbnRcbiAgICAgICAgICBpZiAoIWVsKSByZXR1cm5cbiAgICAgICAgICBpZiAoc2tpcElmVXNlclNjcm9sbGluZyAmJiB1c2VyU2Nyb2xsaW5nUmVmLmN1cnJlbnQpIHJldHVyblxuICAgICAgICAgIGVsLnNjcm9sbFRvcCA9IGVsLnNjcm9sbEhlaWdodFxuICAgICAgICAgIHVwZGF0ZVNjcm9sbEFmZm9yZGFuY2VzKClcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICAgIGlmIChkZWxheU1zID4gMCkgc2V0VGltZW91dChydW4sIGRlbGF5TXMpXG4gICAgICBlbHNlIHJ1bigpXG4gICAgfSxcbiAgICBbdXBkYXRlU2Nyb2xsQWZmb3JkYW5jZXNdXG4gIClcblxuICBjb25zdCBzZXRTcGFjZXJIZWlnaHQgPSB1c2VDYWxsYmFjaygobmV4dDogbnVtYmVyKSA9PiB7XG4gICAgaWYgKE1hdGguYWJzKHNwYWNlckhlaWdodFJlZi5jdXJyZW50IC0gbmV4dCkgPCAxKSByZXR1cm5cbiAgICBzcGFjZXJIZWlnaHRSZWYuY3VycmVudCA9IG5leHRcbiAgICBpZiAoc3BhY2VyRWxSZWYuY3VycmVudCkge1xuICAgICAgc3BhY2VyRWxSZWYuY3VycmVudC5zdHlsZS5oZWlnaHQgPSBgJHtuZXh0fXB4YFxuICAgIH1cbiAgfSwgW10pXG5cbiAgY29uc3QgY2xlYXJUdXJuU3BhY2UgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgYW5jaG9yZWRUdXJuSWRSZWYuY3VycmVudCA9IG51bGxcbiAgICBzZXRTcGFjZXJIZWlnaHQoMClcbiAgfSwgW3NldFNwYWNlckhlaWdodF0pXG5cbiAgY29uc3QgbWVhc3VyZVR1cm4gPSB1c2VDYWxsYmFjaygocXVlc3Rpb25JZDogc3RyaW5nKSA9PiB7XG4gICAgY29uc3QgZWwgPSBtZXNzYWdlc1JlZi5jdXJyZW50XG4gICAgY29uc3Qgc3BhY2VyRWwgPSBzcGFjZXJFbFJlZi5jdXJyZW50XG4gICAgaWYgKCFlbCB8fCAhc3BhY2VyRWwpIHJldHVybiBudWxsXG5cbiAgICBjb25zdCBxdWVzdGlvbkVsID0gZWwucXVlcnlTZWxlY3RvcjxIVE1MRWxlbWVudD4oYFtkYXRhLW1lc3NhZ2UtaWQ9XCIke3F1ZXN0aW9uSWR9XCJdYClcbiAgICBpZiAoIXF1ZXN0aW9uRWwpIHJldHVybiBudWxsXG5cbiAgICBjb25zdCBjb250YWluZXJUb3AgPSBlbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3BcbiAgICBjb25zdCBxdWVzdGlvblRvcCA9IHF1ZXN0aW9uRWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wIC0gY29udGFpbmVyVG9wICsgZWwuc2Nyb2xsVG9wXG4gICAgY29uc3QgY29udGVudEJvdHRvbSA9IHNwYWNlckVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcCAtIGNvbnRhaW5lclRvcCArIGVsLnNjcm9sbFRvcFxuICAgIHJldHVybiB7IGVsLCBxdWVzdGlvblRvcCwgdHVybkhlaWdodDogY29udGVudEJvdHRvbSAtIHF1ZXN0aW9uVG9wIH1cbiAgfSwgW10pXG5cbiAgY29uc3QgcmVzZXJ2ZVR1cm5TcGFjZSA9IHVzZUNhbGxiYWNrKFxuICAgIChxdWVzdGlvbklkOiBzdHJpbmcpID0+IHtcbiAgICAgIGNvbnN0IG1lYXN1cmVkID0gbWVhc3VyZVR1cm4ocXVlc3Rpb25JZClcbiAgICAgIGlmICghbWVhc3VyZWQpIHJldHVyblxuICAgICAgY29uc3QgeyBlbCwgcXVlc3Rpb25Ub3AsIHR1cm5IZWlnaHQgfSA9IG1lYXN1cmVkXG5cbiAgICAgIC8vIEFuY2xhbW9zIHNpZW1wcmUsIGluY2x1c28gY3VhbmRvIG5vIGhhZ2EgZmFsdGEgcmVzZXJ2YXI6IGR1cmFudGUgZWxcbiAgICAgIC8vIHR1cm5vIGVsIHNjcm9sbCBubyBzZSBtdWV2ZSBzb2xvIGVuIG5pbmfDum4gY2Fzby5cbiAgICAgIGFuY2hvcmVkVHVybklkUmVmLmN1cnJlbnQgPSBxdWVzdGlvbklkXG5cbiAgICAgIGNvbnN0IG9mZnNldCA9IHR1cm5BbmNob3JPZmZzZXQoZWwuY2xpZW50SGVpZ2h0KVxuICAgICAgY29uc3QgdGFyZ2V0U2Nyb2xsVG9wID0gTWF0aC5tYXgoMCwgcXVlc3Rpb25Ub3AgLSBvZmZzZXQpXG4gICAgICAvLyBDaGF0IHJlY2nDqW4gaW5pY2lhZG8gbyBjb252ZXJzYWNpw7NuIHF1ZSBhw7puIGVudHJhIGVuIHBhbnRhbGxhOiBsYVxuICAgICAgLy8gcHJlZ3VudGEgeWEgZXN0w6EgYXJyaWJhLCBubyBoYXkgbmFkYSBxdWUgc3ViaXIgbmkgcXVlIHJlc2VydmFyLlxuICAgICAgaWYgKHRhcmdldFNjcm9sbFRvcCA8PSBlbC5zY3JvbGxUb3ApIHtcbiAgICAgICAgc2V0U3BhY2VySGVpZ2h0KDApXG4gICAgICAgIHVwZGF0ZVNjcm9sbEFmZm9yZGFuY2VzKClcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIC8vIFJlc2VydmFtb3MgbG8gbcOtbmltbyBwYXJhIHF1ZSBgdGFyZ2V0U2Nyb2xsVG9wYCBzZWEgYWxjYW56YWJsZS5cbiAgICAgIHNldFNwYWNlckhlaWdodChNYXRoLm1heCgwLCBlbC5jbGllbnRIZWlnaHQgLSB0dXJuSGVpZ2h0IC0gb2Zmc2V0KSlcbiAgICAgIGVsLnNjcm9sbFRvcCA9IHRhcmdldFNjcm9sbFRvcFxuICAgICAgdXBkYXRlU2Nyb2xsQWZmb3JkYW5jZXMoKVxuICAgIH0sXG4gICAgW21lYXN1cmVUdXJuLCBzZXRTcGFjZXJIZWlnaHQsIHVwZGF0ZVNjcm9sbEFmZm9yZGFuY2VzXVxuICApXG5cbiAgLyoqXG4gICAqIEVuY29nZSBlbCBzcGFjZXIgYSBtZWRpZGEgcXVlIGNyZWNlIGxhIHJlc3B1ZXN0YTogZWwgYWx0byB0b3RhbCBkZWwgc2Nyb2xsXG4gICAqIHF1ZWRhIGNvbnN0YW50ZSB5IGxhIHZpc3RhIG5vIHNlIG11ZXZlIHNvbGEuIFNvbG8gYWNoaWNhLCBudW5jYSBhZ3JhbmRhLFxuICAgKiBwYXJhIG5vIGlueWVjdGFyIGVzcGFjaW8gZW4gdHVybm9zIHF1ZSBhcnJhbmNhcm9uIHNpbiByZXNlcnZhLlxuICAgKiBEZXZ1ZWx2ZSBzaSBlbCB0dXJubyBzaWd1ZSBhbmNsYWRvIChhdW5xdWUgZWwgc3BhY2VyIHlhIHNlYSAwKS5cbiAgICovXG4gIGNvbnN0IHN5bmNUdXJuU3BhY2UgPSB1c2VDYWxsYmFjaygoKTogYm9vbGVhbiA9PiB7XG4gICAgaWYgKCFhbmNob3JlZFR1cm5JZFJlZi5jdXJyZW50KSByZXR1cm4gZmFsc2VcbiAgICBpZiAoc3BhY2VySGVpZ2h0UmVmLmN1cnJlbnQgPiAwKSB7XG4gICAgICBjb25zdCBtZWFzdXJlZCA9IG1lYXN1cmVUdXJuKGFuY2hvcmVkVHVybklkUmVmLmN1cnJlbnQpXG4gICAgICBpZiAobWVhc3VyZWQpIHtcbiAgICAgICAgY29uc3Qgb2Zmc2V0ID0gdHVybkFuY2hvck9mZnNldChtZWFzdXJlZC5lbC5jbGllbnRIZWlnaHQpXG4gICAgICAgIGNvbnN0IHJlc2VydmVkID0gTWF0aC5tYXgoMCwgbWVhc3VyZWQuZWwuY2xpZW50SGVpZ2h0IC0gbWVhc3VyZWQudHVybkhlaWdodCAtIG9mZnNldClcbiAgICAgICAgc2V0U3BhY2VySGVpZ2h0KE1hdGgubWluKHNwYWNlckhlaWdodFJlZi5jdXJyZW50LCByZXNlcnZlZCkpXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0cnVlXG4gIH0sIFttZWFzdXJlVHVybiwgc2V0U3BhY2VySGVpZ2h0XSlcblxuICBjb25zdCBoYW5kbGVDbGlja1Njcm9sbFRvQm90dG9tID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGlmICghbWVzc2FnZXNSZWYuY3VycmVudCkgcmV0dXJuXG4gICAgY2xlYXJUdXJuU3BhY2UoKVxuICAgIG1lc3NhZ2VzUmVmLmN1cnJlbnQuc2Nyb2xsVG8oe1xuICAgICAgdG9wOiBtZXNzYWdlc1JlZi5jdXJyZW50LnNjcm9sbEhlaWdodCxcbiAgICAgIGJlaGF2aW9yOiAnc21vb3RoJyxcbiAgICB9KVxuICAgIC8vIERhciB0aWVtcG8gYWwgc21vb3RoLXNjcm9sbCBhbnRlcyBkZSByZWNhbGN1bGFyIGxhIHZpc2liaWxpZGFkIGRlbCBib3TDs24uXG4gICAgc2V0VGltZW91dCh1cGRhdGVTY3JvbGxBZmZvcmRhbmNlcywgNTAwKVxuICB9LCBbY2xlYXJUdXJuU3BhY2UsIHVwZGF0ZVNjcm9sbEFmZm9yZGFuY2VzXSlcblxuICBjb25zdCBoYW5kbGVTY3JvbGxUb0JvdHRvbSA9IHVzZUNhbGxiYWNrKFxuICAgIChlOiBSZWFjdC5VSUV2ZW50PEhUTUxEaXZFbGVtZW50PikgPT4ge1xuICAgICAgY29uc3QgY29udGFpbmVyID0gZS5jdXJyZW50VGFyZ2V0XG5cbiAgICAgIGlmIChzY3JvbGxSYWZSZWYuY3VycmVudCAhPT0gbnVsbCkge1xuICAgICAgICBjYW5jZWxBbmltYXRpb25GcmFtZShzY3JvbGxSYWZSZWYuY3VycmVudClcbiAgICAgIH1cblxuICAgICAgc2Nyb2xsUmFmUmVmLmN1cnJlbnQgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuICAgICAgICBzY3JvbGxSYWZSZWYuY3VycmVudCA9IG51bGxcbiAgICAgICAgY29uc3QgeyBzY3JvbGxUb3AsIHNjcm9sbEhlaWdodCwgY2xpZW50SGVpZ2h0IH0gPSBjb250YWluZXJcblxuICAgICAgICBjb25zdCBpc1Njcm9sbGluZ1VwID0gc2Nyb2xsVG9wIDwgbGFzdFNjcm9sbFRvcFJlZi5jdXJyZW50XG5cbiAgICAgICAgaWYgKGlzU2Nyb2xsaW5nVXApIHtcbiAgICAgICAgICBzY3JvbGxUaHJlc2hvbGRSZWYuY3VycmVudCA9IDE1XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBpc05lYXJCb3R0b20gPSBzY3JvbGxIZWlnaHQgLSBzY3JvbGxUb3AgLSBjbGllbnRIZWlnaHQgPCBzY3JvbGxUaHJlc2hvbGRSZWYuY3VycmVudFxuXG4gICAgICAgIGlmIChpc05lYXJCb3R0b20pIHtcbiAgICAgICAgICBzY3JvbGxUaHJlc2hvbGRSZWYuY3VycmVudCA9IDM5XG4gICAgICAgIH1cblxuICAgICAgICB1c2VyU2Nyb2xsaW5nUmVmLmN1cnJlbnQgPSAhaXNOZWFyQm90dG9tXG4gICAgICAgIGxhc3RTY3JvbGxUb3BSZWYuY3VycmVudCA9IHNjcm9sbFRvcFxuXG4gICAgICAgIHVwZGF0ZVNjcm9sbEFmZm9yZGFuY2VzKClcblxuICAgICAgICBpZiAoaXNOZWFyQm90dG9tICYmIG9uU2Nyb2xsVG9Cb3R0b20pIHtcbiAgICAgICAgICBvblNjcm9sbFRvQm90dG9tKClcbiAgICAgICAgfVxuXG4gICAgICAgIGhhbmRsZVNjcm9sbChjb250YWluZXIpXG4gICAgICB9KVxuICAgIH0sXG4gICAgW29uU2Nyb2xsVG9Cb3R0b20sIGhhbmRsZVNjcm9sbCwgdXBkYXRlU2Nyb2xsQWZmb3JkYW5jZXNdXG4gIClcblxuICAvLyByZWZzIHRvIHN0YWJpbGl6ZSBmdW5jdGlvbnMgYW5kIGF2b2lkIHVubmVjZXNzYXJ5IHJlLXJlbmRlcnNcbiAgY29uc3Qgc2VuZE1lc3NhZ2VSZWYgPSB1c2VSZWYoc2VuZE1lc3NhZ2UpXG4gIGNvbnN0IHN0b3BHZW5lcmF0aW9uUmVmID0gdXNlUmVmKHN0b3BHZW5lcmF0aW9uKVxuICBjb25zdCBvblNlbmRNZXNzYWdlUmVhZHlSZWYgPSB1c2VSZWYob25TZW5kTWVzc2FnZVJlYWR5KVxuICBjb25zdCBzZW5kTWVzc2FnZVByb3h5UmVmID0gdXNlUmVmKFxuICAgIChcbiAgICAgIG1lc3NhZ2U6IHN0cmluZyxcbiAgICAgIGF0dGFjaG1lbnRzPzogQXR0YWNobWVudEZpbGVbXSxcbiAgICAgIGZhcUlkPzogc3RyaW5nLFxuICAgICAgYWdlbnRTdWdnZXN0aW9uSWQ/OiBzdHJpbmcsXG4gICAgICBtZW50aW9ucz86IENvbnRleHRNZW50aW9uW10sXG4gICAgICBmdWFJZD86IHN0cmluZyxcbiAgICAgIHNjSWQ/OiBzdHJpbmdcbiAgICApID0+IHNlbmRNZXNzYWdlUmVmLmN1cnJlbnQobWVzc2FnZSwgYXR0YWNobWVudHMsIGZhcUlkLCBhZ2VudFN1Z2dlc3Rpb25JZCwgbWVudGlvbnMsIGZ1YUlkLCBzY0lkKVxuICApXG4gIGNvbnN0IHN0b3BHZW5lcmF0aW9uUHJveHlSZWYgPSB1c2VSZWYoKCkgPT4gc3RvcEdlbmVyYXRpb25SZWYuY3VycmVudCgpKVxuXG4gIC8vIHVwZGF0ZSByZWZzIHdoZW4gZnVuY3Rpb25zIGNoYW5nZVxuICBzZW5kTWVzc2FnZVJlZi5jdXJyZW50ID0gc2VuZE1lc3NhZ2VcbiAgc3RvcEdlbmVyYXRpb25SZWYuY3VycmVudCA9IHN0b3BHZW5lcmF0aW9uXG4gIG9uU2VuZE1lc3NhZ2VSZWFkeVJlZi5jdXJyZW50ID0gb25TZW5kTWVzc2FnZVJlYWR5XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAob25TZW5kTWVzc2FnZVJlYWR5UmVmLmN1cnJlbnQpIHtcbiAgICAgIG9uU2VuZE1lc3NhZ2VSZWFkeVJlZi5jdXJyZW50KFxuICAgICAgICBzZW5kTWVzc2FnZVByb3h5UmVmLmN1cnJlbnQsXG4gICAgICAgIHN0b3BHZW5lcmF0aW9uUHJveHlSZWYuY3VycmVudCxcbiAgICAgICAgd2FpdGluZ1Jlc3BvbnNlLFxuICAgICAgICBpc1dyaXRpbmdcbiAgICAgIClcbiAgICB9XG4gIH0sIFt3YWl0aW5nUmVzcG9uc2UsIGlzV3JpdGluZ10pXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpc0xvYWRpbmdNb3JlUmVmLmN1cnJlbnQgPSBpc0xvYWRpbmdNb3JlTWVzc2FnZXNcbiAgfSwgW2lzTG9hZGluZ01vcmVNZXNzYWdlc10pXG5cbiAgLy8gQ3VhbmRvIGVsIGFnZW50ZSBlbXBpZXphIGEgcmVzcG9uZGVyLCByZXNldGVhciBlbCBmbGFnIHkgZWwgdW1icmFsIHBhcmEgYWN0aXZhciBlbCBhdXRvLXNjcm9sbFxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICh3YWl0aW5nUmVzcG9uc2UpIHtcbiAgICAgIHVzZXJTY3JvbGxpbmdSZWYuY3VycmVudCA9IGZhbHNlXG4gICAgICBzY3JvbGxUaHJlc2hvbGRSZWYuY3VycmVudCA9IDM5XG4gICAgfVxuICB9LCBbd2FpdGluZ1Jlc3BvbnNlXSlcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghY2hhdEluaXRpYWxpemVkUmVmLmN1cnJlbnQpIHtcbiAgICAgIGNoYXRJbml0aWFsaXplZFJlZi5jdXJyZW50ID0gdHJ1ZVxuICAgICAgaW5pdGlhbGl6ZUNoYXQoKVxuICAgIH1cbiAgfSwgW10pXG5cbiAgLy8gQXV0b3Njcm9sbCBtaWVudHJhcyBlbCB0ZXh0byBkZWwgc3RyZWFtIGNyZWNlLiBFbCB0ZXh0byBzZSBwaW50YSBhbCByaXRtb1xuICAvLyBkZSBgdXNlU21vb3RoU3RyZWFtVGV4dGAgKH42MGZwcyksIG5vIGFsIHJpdG1vIGRlIGxsZWdhZGEgZGUgdG9rZW5zIGRlbFxuICAvLyBiYWNrZW5kOiBwb3IgZXNvIGFjw6EgdXNhbW9zIHVuIGxvb3AgZGUgckFGIHF1ZSBjb21wYXJhIGBzY3JvbGxIZWlnaHRgXG4gIC8vIGNvbnRyYSBlbCDDumx0aW1vIHZhbG9yIG9ic2VydmFkbyB5IGFqdXN0YSBzb2xvIGN1YW5kbyBjYW1iaWEuIEFzw60gZWxcbiAgLy8gc2Nyb2xsIHF1ZWRhIHBlcmZlY3RhbWVudGUgc2luY3Jvbml6YWRvIGNvbiBsYSBhbmltYWNpw7NuIGRlbCB0ZXh0byBzaW5cbiAgLy8gZGVwZW5kZXIgZGUgbGEgY2FkZW5jaWEgZGVsIHN0cmVhbWluZ1N0b3JlLlxuICAvLyBDb24gZWwgdHVybm8gYW5jbGFkbyBlc3RlIGxvb3Agc29sbyBlbmNvZ2UgZWwgc3BhY2VyOiBubyB0b2NhIGVsIHNjcm9sbC5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoIXdhaXRpbmdSZXNwb25zZSAmJiAhaXNXcml0aW5nKSByZXR1cm4gdW5kZWZpbmVkXG4gICAgaWYgKCFtZXNzYWdlc1JlZi5jdXJyZW50KSByZXR1cm4gdW5kZWZpbmVkXG5cbiAgICBsZXQgcmFmSWQ6IG51bWJlciB8IG51bGwgPSBudWxsXG4gICAgbGV0IGxhc3RIZWlnaHQgPSBtZXNzYWdlc1JlZi5jdXJyZW50LnNjcm9sbEhlaWdodFxuXG4gICAgY29uc3QgdGljayA9ICgpID0+IHtcbiAgICAgIGNvbnN0IGVsID0gbWVzc2FnZXNSZWYuY3VycmVudFxuICAgICAgaWYgKCFlbCkge1xuICAgICAgICByYWZJZCA9IG51bGxcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgICBpZiAoc3luY1R1cm5TcGFjZSgpKSB7XG4gICAgICAgIC8vIEVsIHNjcm9sbCBubyBzZSBtdWV2ZSwgcGVybyBlbCBjb250ZW5pZG8gY3JlY2U6IGxhIGZsZWNoYSB5IGVsXG4gICAgICAgIC8vIGdyYWRpZW50ZSBkZSBhYmFqbyB0aWVuZW4gcXVlIGVuY2VuZGVyc2UgYXBlbmFzIHNlIHBhc2EgZGVsIHZpZXdwb3J0LlxuICAgICAgICB1cGRhdGVTY3JvbGxBZmZvcmRhbmNlcygpXG4gICAgICAgIHJhZklkID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHRpY2spXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgICAgY29uc3QgY3VycmVudEhlaWdodCA9IGVsLnNjcm9sbEhlaWdodFxuICAgICAgaWYgKGN1cnJlbnRIZWlnaHQgIT09IGxhc3RIZWlnaHQpIHtcbiAgICAgICAgbGFzdEhlaWdodCA9IGN1cnJlbnRIZWlnaHRcbiAgICAgICAgaWYgKCF1c2VyU2Nyb2xsaW5nUmVmLmN1cnJlbnQpIHtcbiAgICAgICAgICBlbC5zY3JvbGxUb3AgPSBjdXJyZW50SGVpZ2h0XG4gICAgICAgIH1cbiAgICAgICAgdXBkYXRlU2Nyb2xsQWZmb3JkYW5jZXMoKVxuICAgICAgfVxuICAgICAgcmFmSWQgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUodGljaylcbiAgICB9XG5cbiAgICByYWZJZCA9IHJlcXVlc3RBbmltYXRpb25GcmFtZSh0aWNrKVxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBpZiAocmFmSWQgIT0gbnVsbCkgY2FuY2VsQW5pbWF0aW9uRnJhbWUocmFmSWQpXG4gICAgfVxuICB9LCBbd2FpdGluZ1Jlc3BvbnNlLCBpc1dyaXRpbmcsIHN5bmNUdXJuU3BhY2UsIHVwZGF0ZVNjcm9sbEFmZm9yZGFuY2VzXSlcblxuICAvLyBBbCBjb21lbnphciBhIGVzcGVyYXIgbGEgcmVzcHVlc3RhIGRlbCBiYWNrZW5kLCBzY3JvbGwgaW5pY2lhbCBhbCBmb25kby5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAod2FpdGluZ1Jlc3BvbnNlICYmIG1lc3NhZ2VzUmVmLmN1cnJlbnQgJiYgIWFuY2hvcmVkVHVybklkUmVmLmN1cnJlbnQpIHtcbiAgICAgIHNjcm9sbFRvQm90dG9tUmFmKHsgc2tpcElmVXNlclNjcm9sbGluZzogdHJ1ZSB9KVxuICAgIH1cbiAgfSwgW3dhaXRpbmdSZXNwb25zZSwgc2Nyb2xsVG9Cb3R0b21SYWZdKVxuXG4gIGNvbnN0IGxhc3RSZXNlcnZlZFF1ZXN0aW9uUmVmID0gdXNlUmVmPHN0cmluZyB8IG51bGw+KG51bGwpXG5cbiAgLy8gQ2FtYmlvIGRlIGNoYXQ6IGVsIGFuY2xhIHkgZWwgc3BhY2VyIGRlbCB0dXJubyBhbnRlcmlvciBkZWphbiBkZSBhcGxpY2FyLlxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghbG9hZGluZ01lc3NhZ2VzKSByZXR1cm5cbiAgICBsYXN0UmVzZXJ2ZWRRdWVzdGlvblJlZi5jdXJyZW50ID0gbnVsbFxuICAgIGNsZWFyVHVyblNwYWNlKClcbiAgfSwgW2xvYWRpbmdNZXNzYWdlcywgY2xlYXJUdXJuU3BhY2VdKVxuXG4gIC8vIEFsIGVudmlhciB1biBtZW5zYWplOiBhbmNsYW1vcyBlbCB0dXJubyB5IGhhY2Vtb3MgZWwgw7puaWNvIHNjcm9sbCBkZWwgY2ljbG8uXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGxvYWRpbmdNZXNzYWdlcyB8fCBpc0xvYWRpbmdNb3JlTWVzc2FnZXMpIHJldHVyblxuXG4gICAgbGV0IHF1ZXN0aW9uSWQ6IHN0cmluZyB8IG51bGwgPSBudWxsXG4gICAgZm9yIChsZXQgaW5kZXggPSBtZXNzYWdlcy5sZW5ndGggLSAxOyBpbmRleCA+PSAwOyBpbmRleCAtPSAxKSB7XG4gICAgICBpZiAobWVzc2FnZXNbaW5kZXhdPy5pZD8uc3RhcnRzV2l0aCgncXVlc3Rpb24tJykpIHtcbiAgICAgICAgcXVlc3Rpb25JZCA9IG1lc3NhZ2VzW2luZGV4XS5pZFxuICAgICAgICBicmVha1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoIXF1ZXN0aW9uSWQgfHwgcXVlc3Rpb25JZCA9PT0gbGFzdFJlc2VydmVkUXVlc3Rpb25SZWYuY3VycmVudCkgcmV0dXJuXG5cbiAgICBsYXN0UmVzZXJ2ZWRRdWVzdGlvblJlZi5jdXJyZW50ID0gcXVlc3Rpb25JZFxuICAgIHVzZXJTY3JvbGxpbmdSZWYuY3VycmVudCA9IGZhbHNlXG4gICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHJlc2VydmVUdXJuU3BhY2UocXVlc3Rpb25JZCkpXG4gIH0sIFttZXNzYWdlcywgbG9hZGluZ01lc3NhZ2VzLCBpc0xvYWRpbmdNb3JlTWVzc2FnZXMsIHJlc2VydmVUdXJuU3BhY2VdKVxuXG4gIC8vIFNjcm9sbCBjdWFuZG8gY2FtYmlhbiBsb3MgbWVuc2FqZXM6IGRpc3Rpbmd1ZSBcIm51ZXZvIG1lbnNhamVcIiAoYWdyZWdhZG8pXG4gIC8vIGRlIFwicmVlbXBsYXpvXCIgKG1pc21vIGlkL2xlbmd0aCwgZWouIGZlZWRiYWNrIG8gYXBwcm92YWxTdGF0dXMpLiBFblxuICAvLyByZWVtcGxhem9zIHNvbG8gc2UgcmVjYWxjdWxhIGxhIHZpc2liaWxpZGFkIGRlbCBib3TDs24gc2luIGZvcnphciBzY3JvbGwuXG4gIGNvbnN0IGxhc3RNZXNzYWdlSWRSZWYgPSB1c2VSZWY8c3RyaW5nIHwgbnVsbD4obnVsbClcbiAgY29uc3QgbGFzdE1lc3NhZ2VzTGVuZ3RoUmVmID0gdXNlUmVmPG51bWJlcj4oMClcblxuICAvLyBBbCBjYW1iaWFyIGRlIHNlc2nDs24sIHJlc2V0ZWFyIGVzdGFkbyBkZSBzY3JvbGwgbWFudWFsIHBhcmEgbm8gaGVyZWRhciBlbCBjaGF0IGFudGVyaW9yLlxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIHdhc0xvYWRpbmdNZXNzYWdlc1JlZi5jdXJyZW50ID0gZmFsc2VcbiAgICBsYXN0U2Nyb2xsZWRTZXNzaW9uUmVmLmN1cnJlbnQgPSBudWxsXG4gICAgdXNlclNjcm9sbGluZ1JlZi5jdXJyZW50ID0gZmFsc2VcbiAgICBzY3JvbGxUaHJlc2hvbGRSZWYuY3VycmVudCA9IDM5XG4gICAgbGFzdFNjcm9sbFRvcFJlZi5jdXJyZW50ID0gMFxuICAgIGxhc3RNZXNzYWdlSWRSZWYuY3VycmVudCA9IG51bGxcbiAgICBsYXN0TWVzc2FnZXNMZW5ndGhSZWYuY3VycmVudCA9IDBcbiAgfSwgW2luaXRpYWxDaGF0SWRdKVxuXG4gIC8vIFJlc3RhdXJhY2nDs24gZGVzZGUgY2FjaGUgKHNpbiBMb2FkZXIpOiBiYWphciBhbCBmb25kbyBhbCByZWFicmlyIHNlc2nDs24gdmlzaXRhZGEuXG4gIHVzZUxheW91dEVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGxvYWRpbmdNZXNzYWdlcyB8fCAhaW5pdGlhbENoYXRJZCB8fCBtZXNzYWdlcy5sZW5ndGggPT09IDApIHJldHVyblxuICAgIGlmIChsYXN0U2Nyb2xsZWRTZXNzaW9uUmVmLmN1cnJlbnQgPT09IGluaXRpYWxDaGF0SWQpIHJldHVyblxuICAgIGxhc3RTY3JvbGxlZFNlc3Npb25SZWYuY3VycmVudCA9IGluaXRpYWxDaGF0SWRcblxuICAgIHVzZXJTY3JvbGxpbmdSZWYuY3VycmVudCA9IGZhbHNlXG4gICAgc2Nyb2xsVGhyZXNob2xkUmVmLmN1cnJlbnQgPSAzOVxuICAgIGxhc3RNZXNzYWdlSWRSZWYuY3VycmVudCA9IG1lc3NhZ2VzW21lc3NhZ2VzLmxlbmd0aCAtIDFdPy5pZCA/PyBudWxsXG4gICAgbGFzdE1lc3NhZ2VzTGVuZ3RoUmVmLmN1cnJlbnQgPSBtZXNzYWdlcy5sZW5ndGhcblxuICAgIHNjcm9sbFRvQm90dG9tUmFmKClcbiAgICBzY3JvbGxUb0JvdHRvbVJhZih7IGRlbGF5TXM6IDEwMCB9KVxuICB9LCBbaW5pdGlhbENoYXRJZCwgbG9hZGluZ01lc3NhZ2VzLCBtZXNzYWdlcy5sZW5ndGgsIG1lc3NhZ2VzLCBzY3JvbGxUb0JvdHRvbVJhZl0pXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoIW1lc3NhZ2VzUmVmLmN1cnJlbnQgfHwgbG9hZGluZ01lc3NhZ2VzIHx8IGlzTG9hZGluZ01vcmVNZXNzYWdlcyB8fCBpc0xvYWRpbmdNb3JlUmVmLmN1cnJlbnQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IGxhc3RNZXNzYWdlID0gbWVzc2FnZXNbbWVzc2FnZXMubGVuZ3RoIC0gMV1cbiAgICBjb25zdCBsYXN0SWQgPSBsYXN0TWVzc2FnZT8uaWQgPz8gbnVsbFxuICAgIGNvbnN0IHByZXZJZCA9IGxhc3RNZXNzYWdlSWRSZWYuY3VycmVudFxuICAgIGNvbnN0IHByZXZMZW4gPSBsYXN0TWVzc2FnZXNMZW5ndGhSZWYuY3VycmVudFxuICAgIGxhc3RNZXNzYWdlSWRSZWYuY3VycmVudCA9IGxhc3RJZFxuICAgIGxhc3RNZXNzYWdlc0xlbmd0aFJlZi5jdXJyZW50ID0gbWVzc2FnZXMubGVuZ3RoXG5cbiAgICBjb25zdCBpc05ld01lc3NhZ2UgPSBsYXN0SWQgIT09IHByZXZJZCB8fCBtZXNzYWdlcy5sZW5ndGggIT09IHByZXZMZW5cbiAgICBpZiAoIWlzTmV3TWVzc2FnZSkge1xuICAgICAgdXBkYXRlU2Nyb2xsQWZmb3JkYW5jZXMoKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgLy8gVHVybm8gYW5jbGFkbzogbmkgZWwgcmVlbXBsYXpvIGRlbCBwbGFjZWhvbGRlciBwb3IgZWwgbWVuc2FqZSBmaW5hbCwgbmkgbGFcbiAgICAvLyBhcGFyaWNpw7NuIGRlbCBBcHByb3ZhbEJveCBtdWV2ZW4gZWwgc2Nyb2xsLiBTb2xvIHNlIGFqdXN0YSBlbCBzcGFjZXIuXG4gICAgaWYgKGFuY2hvcmVkVHVybklkUmVmLmN1cnJlbnQpIHtcbiAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZShzeW5jVHVyblNwYWNlKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY29uc3QgY29udGFpbmVyID0gbWVzc2FnZXNSZWYuY3VycmVudFxuICAgIGNvbnN0IGlzQXRCb3R0b20gPSBjb250YWluZXIuc2Nyb2xsSGVpZ2h0IC0gY29udGFpbmVyLnNjcm9sbFRvcCA8PSBjb250YWluZXIuY2xpZW50SGVpZ2h0ICsgMTAwXG4gICAgY29uc3QgaGFzSW5pdGlhbE1lc3NhZ2UgPSBtZXNzYWdlcy5zb21lKG1zZyA9PiBtc2cuaWQgPT09ICd1c2VyLWluaXRpYWwtbWVzc2FnZScpXG4gICAgY29uc3QgaXNBcHByb3ZhbCA9ICEhbGFzdE1lc3NhZ2UgJiYgKGxhc3RNZXNzYWdlLmlkLnN0YXJ0c1dpdGgoJ2FwcHJvdmFsLScpIHx8ICEhbGFzdE1lc3NhZ2UuYXBwcm92YWwpXG4gICAgY29uc3QgaXNBbnN3ZXJPclF1ZXN0aW9uID1cbiAgICAgICEhbGFzdE1lc3NhZ2UgJiYgKGxhc3RNZXNzYWdlLmlkLnN0YXJ0c1dpdGgoJ2Fuc3dlci0nKSB8fCBsYXN0TWVzc2FnZS5pZC5zdGFydHNXaXRoKCdxdWVzdGlvbi0nKSlcblxuICAgIC8vIE51ZXZvcyBhbnN3ZXIvcXVlc3Rpb246IHNjcm9sbCBzaSBlbCB1c3VhcmlvIHlhIGVzdGFiYSBhbCBmb25kby5cbiAgICBpZiAoaXNBbnN3ZXJPclF1ZXN0aW9uICYmIGlzQXRCb3R0b20pIHtcbiAgICAgIHNjcm9sbFRvQm90dG9tUmFmKClcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIC8vIENhc28gYm9yZGU6IGNhbWJpb3MgZGUgbWVuc2FqZXMgc2luIHNlciBudWV2byBhbnN3ZXIvdXNlci9hcHByb3ZhbFxuICAgIC8vIHBlcm8gc8OtIHVuIG1lbnNhamUgbnVldm8gKG5vIGVsIFwidXNlci1pbml0aWFsLW1lc3NhZ2VcIikuIFNjcm9sbGVhLlxuICAgIGlmICghaXNBbnN3ZXJPclF1ZXN0aW9uICYmICFpc0FwcHJvdmFsICYmICFoYXNJbml0aWFsTWVzc2FnZSAmJiBtZXNzYWdlcy5sZW5ndGggPiBwcmV2TGVuKSB7XG4gICAgICBzY3JvbGxUb0JvdHRvbVJhZigpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICB1cGRhdGVTY3JvbGxBZmZvcmRhbmNlcygpXG4gIH0sIFttZXNzYWdlcywgbG9hZGluZ01lc3NhZ2VzLCBpc0xvYWRpbmdNb3JlTWVzc2FnZXMsIHNjcm9sbFRvQm90dG9tUmFmLCBzeW5jVHVyblNwYWNlLCB1cGRhdGVTY3JvbGxBZmZvcmRhbmNlc10pXG5cbiAgLy8gQWwgYWJyaXIvY2FyZ2FyIHVuYSBjb252ZXJzYWNpw7NuIGVsIGNvbnRlbmVkb3Igc2UgcmVtb250YSAoTG9hZGVyIOKGkiBsaXN0YSkgY29uXG4gIC8vIHNjcm9sbFRvcD0wLiBGb3J6YW1vcyBpciBhbCBmb25kbyBhbCB0ZXJtaW5hciBsb2FkTWVzc2FnZXMsIHNpbiBhZmVjdGFyIHBhZ2luYWNpw7NuIGhhY2lhIGFycmliYS5cbiAgdXNlTGF5b3V0RWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBqdXN0RmluaXNoZWRMb2FkaW5nID0gd2FzTG9hZGluZ01lc3NhZ2VzUmVmLmN1cnJlbnQgJiYgIWxvYWRpbmdNZXNzYWdlc1xuICAgIHdhc0xvYWRpbmdNZXNzYWdlc1JlZi5jdXJyZW50ID0gbG9hZGluZ01lc3NhZ2VzXG5cbiAgICBpZiAoIWp1c3RGaW5pc2hlZExvYWRpbmcgfHwgbWVzc2FnZXMubGVuZ3RoID09PSAwKSByZXR1cm5cblxuICAgIHVzZXJTY3JvbGxpbmdSZWYuY3VycmVudCA9IGZhbHNlXG4gICAgc2Nyb2xsVGhyZXNob2xkUmVmLmN1cnJlbnQgPSAzOVxuICAgIGxhc3RNZXNzYWdlSWRSZWYuY3VycmVudCA9IG1lc3NhZ2VzW21lc3NhZ2VzLmxlbmd0aCAtIDFdPy5pZCA/PyBudWxsXG4gICAgbGFzdE1lc3NhZ2VzTGVuZ3RoUmVmLmN1cnJlbnQgPSBtZXNzYWdlcy5sZW5ndGhcblxuICAgIHNjcm9sbFRvQm90dG9tUmFmKClcbiAgICBzY3JvbGxUb0JvdHRvbVJhZih7IGRlbGF5TXM6IDEwMCB9KVxuICB9LCBbbG9hZGluZ01lc3NhZ2VzLCBtZXNzYWdlcy5sZW5ndGgsIHNjcm9sbFRvQm90dG9tUmFmXSlcblxuICAvLyBFc3RhZG8gaW5pY2lhbCBkZWwgYm90w7NuIHNjcm9sbC10by1ib3R0b20gYWwgdGVybWluYXIgbG9hZGluZ01lc3NhZ2VzLlxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghbG9hZGluZ01lc3NhZ2VzKSB7XG4gICAgICB1cGRhdGVTY3JvbGxBZmZvcmRhbmNlcygpXG4gICAgfVxuICB9LCBbbG9hZGluZ01lc3NhZ2VzLCBtZXNzYWdlcy5sZW5ndGgsIHVwZGF0ZVNjcm9sbEFmZm9yZGFuY2VzXSlcblxuICAvLyBPYnRlbmVyIGVsIMO6bHRpbW8gbWVuc2FqZSBkZWwgdXN1YXJpbyBwYXJhIHZlcmlmaWNhciBzaSB0aWVuZSBhdHRhY2htZW50c1xuICBjb25zdCBsYXN0VXNlck1lc3NhZ2UgPSBtZXNzYWdlc1xuICAgIC5maWx0ZXIobXNnID0+IG1zZy5yb2xlID09PSBDaGF0SGlzdG9yeVJvbGUuVVNFUiB8fCBtc2cudXNlci5pZCA9PT0gYXV0aFVzZXIuaWQudG9TdHJpbmcoKSlcbiAgICAuYXQoLTEpXG5cbiAgY29uc3QgYXR0YWNobWVudHNDb3VudCA9XG4gICAgKEFycmF5LmlzQXJyYXkobGFzdFVzZXJNZXNzYWdlPy5hdHRhY2htZW50cykgPyBsYXN0VXNlck1lc3NhZ2UuYXR0YWNobWVudHMubGVuZ3RoIDogMCkgfHxcbiAgICAoQXJyYXkuaXNBcnJheShsYXN0VXNlck1lc3NhZ2U/LnNvdXJjZXMpID8gbGFzdFVzZXJNZXNzYWdlLnNvdXJjZXMubGVuZ3RoIDogMClcblxuICBjb25zdCBzdHJlYW1Mb2FkaW5nRGlzcGxheSA9IHJlc29sdmVTdHJlYW1Mb2FkaW5nRGlzcGxheSh7XG4gICAgc3RyZWFtQWN0aXZpdHksXG4gICAgbG9hZGluZ01lc3NhZ2UsXG4gICAgYWN0aXZlTG9hZGluZ3M6IGFjdGl2ZUxvYWRpbmdzIHx8IHt9LFxuICAgIHdhaXRpbmdSZXNwb25zZSxcbiAgICBpc1dlYlNlYXJjaEFjdGl2ZSxcbiAgICBpc0RlZXBTZWFyY2hBY3RpdmUsXG4gICAgaGFzQXR0YWNobWVudHM6IEJvb2xlYW4oYXR0YWNobWVudHNDb3VudCksXG4gICAgYXR0YWNobWVudHNDb3VudCxcbiAgICB0LFxuICB9KVxuXG4gIGNvbnN0IGlzU2Nyb2xsT25QYXJlbnQgPSAhIWV4cGFuZGVkXG5cbiAgLy8gQWwgZXhwYW5kaXIvY29udHJhZXIgZWwgbW9kYWwgZWwgcmVmIHBhc2EgYSBvdHJvIGNvbnRlbmVkb3IgKHNjcm9sbFRvcCBzZSByZXNldGVhIGEgMCkuXG4gIC8vIFJlc3RhdXJhciBsYSBwb3NpY2nDs24gZGUgc2Nyb2xsIGFudGVzIGRlbCBwYWludCBwYXJhIGV2aXRhciBxdWUgbGEgY29udmVyc2FjacOzbiBzYWx0ZSBhcnJpYmEuXG4gIGNvbnN0IGV4cGFuZGVkUmVmID0gdXNlUmVmKGV4cGFuZGVkKVxuICB1c2VMYXlvdXRFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChleHBhbmRlZFJlZi5jdXJyZW50ICE9PSBleHBhbmRlZCAmJiBtZXNzYWdlc1JlZi5jdXJyZW50KSB7XG4gICAgICBjb25zdCBzYXZlZFNjcm9sbFRvcCA9IGxhc3RTY3JvbGxUb3BSZWYuY3VycmVudFxuICAgICAgbWVzc2FnZXNSZWYuY3VycmVudC5zY3JvbGxUb3AgPSBzYXZlZFNjcm9sbFRvcFxuICAgICAgZXhwYW5kZWRSZWYuY3VycmVudCA9IGV4cGFuZGVkXG4gICAgfSBlbHNlIHtcbiAgICAgIGV4cGFuZGVkUmVmLmN1cnJlbnQgPSBleHBhbmRlZFxuICAgIH1cbiAgfSwgW2V4cGFuZGVkXSlcblxuICBpZiAobG9hZGluZ01lc3NhZ2VzKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxGYWRlIGZpbGw+XG4gICAgICAgIDxMb2FkZXIgLz5cbiAgICAgIDwvRmFkZT5cbiAgICApXG4gIH1cblxuICBjb25zdCBsYXN0TWVzc2FnZSA9IG1lc3NhZ2VzW21lc3NhZ2VzLmxlbmd0aCAtIDFdXG4gIGNvbnN0IGhhc01lc3NhZ2VMZXZlbEluZGljYXRvciA9XG4gICAgISFsYXN0TWVzc2FnZSAmJiBpc1N0cmVhbWluZ1BsYWNlaG9sZGVyTWVzc2FnZUlkKGxhc3RNZXNzYWdlLmlkKSAmJiAod2FpdGluZ1Jlc3BvbnNlIHx8IGlzV3JpdGluZylcblxuICBjb25zdCBtZXNzYWdlc0NvbnRlbnQgPSAoXG4gICAgPD5cbiAgICAgIHtpc0xvYWRpbmdNb3JlTWVzc2FnZXMgJiYgPExvYWRpbmdUZXh0IHRleHQ9e3QoJ2NoYXQubG9hZGluZ01vcmUnKX0gLz59XG4gICAgICA8PlxuICAgICAgICB7bWVzc2FnZXMubWFwKChtZXNzYWdlLCBpbmRleCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGlzQXNzaXN0YW50TWVzc2FnZSA9IG1lc3NhZ2Uucm9sZSA9PT0gQ2hhdEhpc3RvcnlSb2xlLkFTU0lTVEFOVCB8fCBtZXNzYWdlLnVzZXIuaWQgPT09ICdhc3Npc3RhbnQnXG4gICAgICAgICAgY29uc3QgaXNMYXN0TWVzc2FnZSA9IGluZGV4ID09PSBtZXNzYWdlcy5sZW5ndGggLSAxXG4gICAgICAgICAgY29uc3QgaXNTdHJlYW1pbmdQbGFjZWhvbGRlciA9XG4gICAgICAgICAgICBpc0Fzc2lzdGFudE1lc3NhZ2UgJiYgaXNMYXN0TWVzc2FnZSAmJiBpc1N0cmVhbWluZ1BsYWNlaG9sZGVyTWVzc2FnZUlkKG1lc3NhZ2UuaWQpXG4gICAgICAgICAgY29uc3QgaXNTdHJlYW1pbmcgPSBpc1N0cmVhbWluZ1BsYWNlaG9sZGVyICYmICh3YWl0aW5nUmVzcG9uc2UgfHwgaXNXcml0aW5nKVxuXG4gICAgICAgICAgLy8gTm8gZmlsdHJhciBlbCBwbGFjZWhvbGRlciBkZWwgbWVuc2FqZSBlbiBzdHJlYW1pbmc6IHN1IHRleHRvIHZpdmVcbiAgICAgICAgICAvLyBlbiBlbCBzdHJlYW1pbmdTdG9yZSB5IGBtZXNzYWdlLm1lc3NhZ2VgIGVzICcnIGhhc3RhIGVsIGNvbXBsZXRlLlxuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICFpc1N0cmVhbWluZ1BsYWNlaG9sZGVyICYmXG4gICAgICAgICAgICAhaXNTdHJlYW1pbmcgJiZcbiAgICAgICAgICAgICEobWVzc2FnZS5hdHRhY2htZW50cz8ubGVuZ3RoIHx8IG1lc3NhZ2Uuc291cmNlcz8ubGVuZ3RoKSAmJlxuICAgICAgICAgICAgIW1lc3NhZ2UubWVzc2FnZSAmJlxuICAgICAgICAgICAgIW1lc3NhZ2UucHJvamVjdD8ubmFtZSAmJlxuICAgICAgICAgICAgIW1lc3NhZ2UuYXBwcm92YWxcbiAgICAgICAgICApXG4gICAgICAgICAgICByZXR1cm4gbnVsbFxuXG4gICAgICAgICAgY29uc3QgbWVzc2FnZUZlZWRiYWNrID1cbiAgICAgICAgICAgIG1lc3NhZ2U/Lndhc0hlbHBmdWwgPT09IHVuZGVmaW5lZCB8fCBtZXNzYWdlLndhc0hlbHBmdWwgPT09IG51bGxcbiAgICAgICAgICAgICAgPyBudWxsXG4gICAgICAgICAgICAgIDogbWVzc2FnZS53YXNIZWxwZnVsXG4gICAgICAgICAgICAgICAgPyBGZWVkYmFjay5USFVNQlNfVVBcbiAgICAgICAgICAgICAgICA6IEZlZWRiYWNrLlRIVU1CU19ET1dOXG5cbiAgICAgICAgICAvLyBLZXkgZXN0YWJsZTogc29sbyBtZXNzYWdlLmlkIHBhcmEgZXZpdGFyIHJlbW91bnQgZHVyYW50ZSBzdHJlYW1pbmcgKG1lc3NhZ2UuZGF0ZSBwdWVkZSBjYW1iaWFyKVxuICAgICAgICAgIGNvbnN0IG1lc3NhZ2VLZXkgPSBtZXNzYWdlLmlkID8/IGBtc2ctJHtpbmRleH1gXG5cbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPE1lc3NhZ2VJdGVtXG4gICAgICAgICAgICAgIHsuLi5tZXNzYWdlfVxuICAgICAgICAgICAgICBrZXk9e21lc3NhZ2VLZXl9XG4gICAgICAgICAgICAgIGF1dGhVc2VyPXthdXRoVXNlcn1cbiAgICAgICAgICAgICAgaGFuZGxlU2VsZWN0T3B0aW9uPXtoYW5kbGVTZWxlY3RPcHRpb259XG4gICAgICAgICAgICAgIGhhbmRsZUZlZWRiYWNrPXtoYW5kbGVGZWVkYmFja31cbiAgICAgICAgICAgICAgaGFuZGxlQXBwcm92YWxEZWNpc2lvbj17aGFuZGxlQXBwcm92YWxEZWNpc2lvbn1cbiAgICAgICAgICAgICAgaGFuZGxlU3VnZ2VzdGlvbkNsaWNrPXtoYW5kbGVTdWdnZXN0aW9uQ2xpY2t9XG4gICAgICAgICAgICAgIGhhc1NlbGVjdGVkU3VnZ2VzdGlvbj17ISFzZWxlY3RlZFN1Z2dlc3Rpb25NZXNzYWdlSWRzW21lc3NhZ2UuaWRdfVxuICAgICAgICAgICAgICBkaXNhYmxlRmVlZGJhY2s9e21lc3NhZ2VGZWVkYmFja31cbiAgICAgICAgICAgICAgaXNTdHJlYW1pbmc9e2lzU3RyZWFtaW5nfVxuICAgICAgICAgICAgICBpc0xhc3RNZXNzYWdlPXtpc0xhc3RNZXNzYWdlfVxuICAgICAgICAgICAgICBleHBhbmRlZD17ZXhwYW5kZWR9XG4gICAgICAgICAgICAgIHN0cmVhbUFjdGl2aXR5PXtpc1N0cmVhbWluZyA/IHN0cmVhbUxvYWRpbmdEaXNwbGF5IDogbnVsbH1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgKVxuICAgICAgICB9KX1cbiAgICAgIDwvPlxuICAgICAgeyFoYXNNZXNzYWdlTGV2ZWxJbmRpY2F0b3IgJiYgc3RyZWFtTG9hZGluZ0Rpc3BsYXkgJiYgKFxuICAgICAgICA8U0NMb2FkaW5nTWVzc2FnZXNDb2x1bW4+XG4gICAgICAgICAgPEFnZW50QWN0aXZpdHlJbmRpY2F0b3IgYWN0aXZpdHk9e3N0cmVhbUxvYWRpbmdEaXNwbGF5fSAvPlxuICAgICAgICA8L1NDTG9hZGluZ01lc3NhZ2VzQ29sdW1uPlxuICAgICAgKX1cbiAgICAgIHsvKiBFc3BhY2lvIHF1ZSBsZSBwZXJtaXRlIGEgbGEgcHJlZ3VudGEgc3ViaXIgYWwgdG9wZS4gQWx0dXJhIG1hbmVqYWRhXG4gICAgICAgICAgaW1wZXJhdGl2YW1lbnRlIGRlc2RlIGBzZXRTcGFjZXJIZWlnaHRgOyBhcnJhbmNhIGVuIDAuICovfVxuICAgICAgPFNDVHVyblNwYWNlciByZWY9e3NwYWNlckVsUmVmfSBhcmlhLWhpZGRlbj1cInRydWVcIiAvPlxuICAgIDwvPlxuICApXG5cbiAgcmV0dXJuIChcbiAgICA8U0NNZXNzYWdlc091dGVyICRzY3JvbGxPblBhcmVudD17aXNTY3JvbGxPblBhcmVudH0+XG4gICAgICA8U0NNZXNzYWdlc0dyYWRpZW50VG9wICRzaG93PXtzaG93VG9wR3JhZGllbnR9IGFyaWEtaGlkZGVuPVwidHJ1ZVwiIC8+XG4gICAgICB7aXNTY3JvbGxPblBhcmVudCA/IChcbiAgICAgICAgPFNDTWVzc2FnZXNTY3JvbGwgcmVmPXttZXNzYWdlc1JlZn0gb25TY3JvbGw9e2hhbmRsZVNjcm9sbFRvQm90dG9tfT5cbiAgICAgICAgICA8U0NNZXNzYWdlc0lubmVyICRzY3JvbGxPblBhcmVudD17aXNTY3JvbGxPblBhcmVudH0+e21lc3NhZ2VzQ29udGVudH08L1NDTWVzc2FnZXNJbm5lcj5cbiAgICAgICAgPC9TQ01lc3NhZ2VzU2Nyb2xsPlxuICAgICAgKSA6IChcbiAgICAgICAgPFNDTWVzc2FnZXNJbm5lciByZWY9e21lc3NhZ2VzUmVmfSBvblNjcm9sbD17aGFuZGxlU2Nyb2xsVG9Cb3R0b219ICRzY3JvbGxPblBhcmVudD17ZmFsc2V9PlxuICAgICAgICAgIHttZXNzYWdlc0NvbnRlbnR9XG4gICAgICAgIDwvU0NNZXNzYWdlc0lubmVyPlxuICAgICAgKX1cblxuICAgICAgPFNDTWVzc2FnZXNHcmFkaWVudEJvdHRvbSAkc2hvdz17c2hvd0JvdHRvbUdyYWRpZW50fSBhcmlhLWhpZGRlbj1cInRydWVcIiAvPlxuXG4gICAgICB7c2hvd1Njcm9sbFRvQm90dG9tICYmIChcbiAgICAgICAgPFNjcm9sbFRvQm90dG9tQnV0dG9uIHR5cGU9XCJidXR0b25cIiBvbkNsaWNrPXtoYW5kbGVDbGlja1Njcm9sbFRvQm90dG9tfT5cbiAgICAgICAgICA8QXJyb3dTbWFsbERvd24gY29sb3I9XCIjNjY2XCIgd2lkdGg9XCIyMHB4XCIgaGVpZ2h0PVwiMjBweFwiIC8+XG4gICAgICAgIDwvU2Nyb2xsVG9Cb3R0b21CdXR0b24+XG4gICAgICApfVxuICAgIDwvU0NNZXNzYWdlc091dGVyPlxuICApXG59XG5cbmV4cG9ydCBjb25zdCBDaGF0QUlNZXNzYWdlcyA9IFJlYWN0Lm1lbW8oQ2hhdEFJTWVzc2FnZXNJbm5lcilcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU9BLEtBQUssSUFBUUMsSUFBSSxFQUFhQyxXQUFXLEVBQUVDLFNBQVMsRUFBRUMsZUFBZSxFQUFFQyxNQUFNLEVBQUVDLFFBQVEsRUFBQUMsYUFBQSxJQUFBQyxjQUFBLFFBQVEsT0FBTztBQUM3RyxTQUFTQyxjQUFjLFFBQVEsaURBQWlEO0FBRWhGLFNBQVNDLGNBQWMsUUFBUSwyQ0FBMkM7QUFDMUUsU0FBU0MsV0FBVyxRQUFRLHFDQUFxQztBQUNqRSxTQUFTQyxzQkFBc0IsUUFBUSxvQ0FBb0M7QUFDM0UsU0FBU0MsbUJBQW1CLFFBQVEsZ0RBQWdEO0FBQ3BGLFNBQVNDLGNBQWMsUUFBUSw0QkFBNEI7QUFHM0QsU0FBc0JDLGVBQWUsUUFBUSxxQkFBcUI7QUFDbEUsU0FBU0Msc0JBQXNCLEVBQUVDLGdCQUFnQixRQUFRLHNDQUFzQztBQUUvRixTQUFTQyxjQUFjLFFBQVEsaUNBQWlDO0FBQ2hFLFNBQWtCQyxPQUFPLFFBQVEsMkJBQTJCO0FBRTVELFNBQVNDLElBQUksUUFBUSxxQkFBcUI7QUFDMUMsU0FBU0Ms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
|