@projectcor/maia-components 2.11.109-0 → 2.11.109-2
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/molecules/ChatAIMessages/ChatAIMessages.js +239 -162
- package/lib/components/molecules/ChatAIMessages/newStyles.js +30 -23
- package/lib/hooks/useChatManager/useChatManager.js +51 -41
- package/lib/hooks/useChatMessages/useChatMessages.js +26 -55
- package/lib/store/sessions/sessionStreamManager.js +14 -8
- package/package.json +1 -1
|
@@ -20,7 +20,6 @@ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t =
|
|
|
20
20
|
/* eslint-disable jsx-a11y/no-static-element-interactions */
|
|
21
21
|
import React, { memo, useCallback, useEffect, useLayoutEffect, useRef, useState, createElement as _createElement } from 'react';
|
|
22
22
|
import { ArrowSmallDown } from '@projectcor/icons/lib/components/ArrowSmallDown';
|
|
23
|
-
import { MAIAIcon } from '../../atoms/icons/MAIAIcon';
|
|
24
23
|
import { AttachmentCard } from '../../atoms/AttachmentCard/AttachmentCard';
|
|
25
24
|
import { ApprovalBox } from '../../atoms/ApprovalBox/ApprovalBox';
|
|
26
25
|
import { AttachmentPreviewModal } from '../../atoms/AttachmentPreviewModal';
|
|
@@ -28,7 +27,7 @@ import { AttachmentCardAudio } from '../../atoms/AttachmentCard/AttachmentCardAu
|
|
|
28
27
|
import { MaiaStreamdown } from '../../atoms/MaiaStreamdown';
|
|
29
28
|
import { ChatHistoryRole } from '../../../types/Chat';
|
|
30
29
|
import { renderTextWithMentions, hasInlineMarkers } from '../../../utils/renderContextMentions';
|
|
31
|
-
import {
|
|
30
|
+
import { isMaiakerAgent } from '../../../utils/agentDisplayName';
|
|
32
31
|
import { useUser } from '../../../context/cor-user';
|
|
33
32
|
import { useT } from '../../../hooks/useT';
|
|
34
33
|
import { useChatManager } from '../../../hooks/useChatManager/useChatManager';
|
|
@@ -42,7 +41,7 @@ import { Loader } from '../../atoms/Loader';
|
|
|
42
41
|
import { Fade } from '../../atoms/Fade';
|
|
43
42
|
import { MessageFromUser, MessageFromOther, MessageContentFromUser, MessageContentFromOther } from './styles';
|
|
44
43
|
import { MessageFeedback } from '../MessageFeedback';
|
|
45
|
-
import { SCCAIMessageWrapper, ScrollToBottomButton, SCMessagesOuter, SCMessagesScroll, SCMessagesInner, SCTurnSpacer, SCOptionsList, SCOptionItem, SCMessageItemWrapper, SCMessageItemInner, SCAttachmentsRow, SCApprovalActionsColumn,
|
|
44
|
+
import { SCCAIMessageWrapper, ScrollToBottomButton, SCMessagesOuter, SCMessagesScroll, SCMessagesInner, SCTurnSpacer, SCOptionsList, SCOptionItem, SCMessageItemWrapper, SCMessageItemInner, SCAttachmentsRow, SCApprovalActionsColumn, SCLoadingMessagesColumn, SCMessagesGradientTop, SCMessagesGradientBottom } from './newStyles';
|
|
46
45
|
import { Feedback } from '../MessageFeedback/MessageFeedback';
|
|
47
46
|
import { useGlobalContext } from '../../../context/global-context';
|
|
48
47
|
import { EntityLinkCustomLink, getEntityLinkWrapperClassName } from '../../../utils/entityLinkRender';
|
|
@@ -51,6 +50,17 @@ import { ChatAICreateAgentActions } from './ChatAICreateAgentActions';
|
|
|
51
50
|
import { EVENTS, useEvent } from '../../../hooks/useEvent';
|
|
52
51
|
import { downloadFileFromUrl } from '../../../utils/fileDownloadHelper';
|
|
53
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
|
+
};
|
|
61
|
+
|
|
62
|
+
/** Duración del scroll al anclar el turno. Más lento que el `smooth` nativo, que se siente brusco. */
|
|
63
|
+
var TURN_SCROLL_DURATION_MS = 550;
|
|
54
64
|
var MessageWrapper = function MessageWrapper(_ref) {
|
|
55
65
|
var isCurrentUser = _ref.isCurrentUser,
|
|
56
66
|
children = _ref.children,
|
|
@@ -176,25 +186,6 @@ var StreamingMessageBody = /*#__PURE__*/memo(function (props) {
|
|
|
176
186
|
})]
|
|
177
187
|
});
|
|
178
188
|
});
|
|
179
|
-
var AgentMessageHeader = function AgentMessageHeader() {
|
|
180
|
-
var _useGlobalContext = useGlobalContext(),
|
|
181
|
-
agent = _useGlobalContext.agent;
|
|
182
|
-
var name = getAgentDisplayName(agent === null || agent === void 0 ? void 0 : agent.type, agent === null || agent === void 0 ? void 0 : agent.name);
|
|
183
|
-
if (!name) return null;
|
|
184
|
-
var isMaiaBranded = (agent === null || agent === void 0 ? void 0 : agent.type) === 'clone' || (agent === null || agent === void 0 ? void 0 : agent.type) === 'orchestrator';
|
|
185
|
-
return /*#__PURE__*/_jsxs(SCAgentMessageHeader, {
|
|
186
|
-
children: [isMaiaBranded || !(agent !== null && agent !== void 0 && agent.emoji) ? /*#__PURE__*/_jsx(MAIAIcon, {
|
|
187
|
-
width: 14,
|
|
188
|
-
height: 14
|
|
189
|
-
}) : /*#__PURE__*/_jsx("span", {
|
|
190
|
-
className: "AgentMessageHeader-emoji",
|
|
191
|
-
"aria-hidden": true,
|
|
192
|
-
children: agent.emoji
|
|
193
|
-
}), /*#__PURE__*/_jsx("span", {
|
|
194
|
-
children: name
|
|
195
|
-
})]
|
|
196
|
-
});
|
|
197
|
-
};
|
|
198
189
|
var MessageItem = /*#__PURE__*/memo(function (props) {
|
|
199
190
|
var _props$reasoning, _props$projectMetadat;
|
|
200
191
|
var id = props.id,
|
|
@@ -329,7 +320,7 @@ var MessageItem = /*#__PURE__*/memo(function (props) {
|
|
|
329
320
|
$isAssistant: isAssistant,
|
|
330
321
|
"data-message-id": id,
|
|
331
322
|
children: [/*#__PURE__*/_jsxs(SCMessageItemInner, {
|
|
332
|
-
children: [isAssistant &&
|
|
323
|
+
children: [isAssistant && !isActiveStreaming && /*#__PURE__*/_jsx(ReasoningBlock, {
|
|
333
324
|
messageId: id,
|
|
334
325
|
trace: (_props$reasoning = props.reasoning) !== null && _props$reasoning !== void 0 ? _props$reasoning : null
|
|
335
326
|
}), !!messageAttachments.length && /*#__PURE__*/_jsx(SCAttachmentsRow, {
|
|
@@ -412,10 +403,10 @@ var ChatAIMessagesInner = function ChatAIMessagesInner(_ref5) {
|
|
|
412
403
|
expanded = _ref5.expanded;
|
|
413
404
|
var _useT = useT(),
|
|
414
405
|
t = _useT.t;
|
|
415
|
-
var
|
|
416
|
-
isWebSearchActive =
|
|
417
|
-
isDeepSearchActive =
|
|
418
|
-
agent =
|
|
406
|
+
var _useGlobalContext = useGlobalContext(),
|
|
407
|
+
isWebSearchActive = _useGlobalContext.isWebSearchActive,
|
|
408
|
+
isDeepSearchActive = _useGlobalContext.isDeepSearchActive,
|
|
409
|
+
agent = _useGlobalContext.agent;
|
|
419
410
|
var event = useEvent();
|
|
420
411
|
var authUser = useUser();
|
|
421
412
|
var messagesRef = useRef(null);
|
|
@@ -425,20 +416,36 @@ var ChatAIMessagesInner = function ChatAIMessagesInner(_ref5) {
|
|
|
425
416
|
var scrollThresholdRef = useRef(39);
|
|
426
417
|
var lastScrollTopRef = useRef(0);
|
|
427
418
|
var showScrollToBottomRef = useRef(false);
|
|
419
|
+
var showTopGradientRef = useRef(false);
|
|
420
|
+
var showBottomGradientRef = useRef(false);
|
|
428
421
|
var scrollRafRef = useRef(null);
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
422
|
+
/**
|
|
423
|
+
* Turno con el scroll bajo control del usuario: desde que envía el mensaje y
|
|
424
|
+
* hasta el próximo envío no movemos el scroll por ningún motivo. Es
|
|
425
|
+
* independiente de la altura del spacer, que puede llegar a 0 sin desanclar.
|
|
426
|
+
*/
|
|
427
|
+
var anchoredTurnIdRef = useRef(null);
|
|
432
428
|
var spacerElRef = useRef(null);
|
|
433
429
|
var spacerHeightRef = useRef(0);
|
|
430
|
+
var turnScrollRafRef = useRef(null);
|
|
431
|
+
var wasLoadingMessagesRef = useRef(false);
|
|
432
|
+
var lastScrolledSessionRef = useRef(null);
|
|
434
433
|
var _useState5 = useState(false),
|
|
435
434
|
_useState6 = _slicedToArray(_useState5, 2),
|
|
436
435
|
showScrollToBottom = _useState6[0],
|
|
437
436
|
setShowScrollToBottom = _useState6[1];
|
|
438
|
-
var _useState7 = useState(
|
|
437
|
+
var _useState7 = useState(false),
|
|
439
438
|
_useState8 = _slicedToArray(_useState7, 2),
|
|
440
|
-
|
|
441
|
-
|
|
439
|
+
showTopGradient = _useState8[0],
|
|
440
|
+
setShowTopGradient = _useState8[1];
|
|
441
|
+
var _useState9 = useState(false),
|
|
442
|
+
_useState0 = _slicedToArray(_useState9, 2),
|
|
443
|
+
showBottomGradient = _useState0[0],
|
|
444
|
+
setShowBottomGradient = _useState0[1];
|
|
445
|
+
var _useState1 = useState({}),
|
|
446
|
+
_useState10 = _slicedToArray(_useState1, 2),
|
|
447
|
+
selectedSuggestionMessageIds = _useState10[0],
|
|
448
|
+
setSelectedSuggestionMessageIds = _useState10[1];
|
|
442
449
|
var _useChatManager = useChatManager({
|
|
443
450
|
chatId: initialChatId || undefined,
|
|
444
451
|
userInitialMessage: userInitialMessage,
|
|
@@ -464,50 +471,36 @@ var ChatAIMessagesInner = function ChatAIMessagesInner(_ref5) {
|
|
|
464
471
|
var handleSelectOption = useCallback(function (option) {
|
|
465
472
|
changeProject(option);
|
|
466
473
|
}, [changeProject]);
|
|
467
|
-
var handleSuggestionClick = useCallback(function (messageId, suggestion) {
|
|
468
|
-
if (!(suggestion !== null && suggestion !== void 0 && suggestion.trim())) return;
|
|
469
|
-
if (selectedSuggestionMessageIds[messageId]) return;
|
|
470
|
-
var isMarketplaceGlobalAgent = isMaiakerAgent(agent);
|
|
471
|
-
event(EVENTS.aiChatSuggestedAnswer, {
|
|
472
|
-
agent_type: isMarketplaceGlobalAgent ? 'marketplace' : agent === null || agent === void 0 ? void 0 : agent.type
|
|
473
|
-
});
|
|
474
|
-
setSelectedSuggestionMessageIds(function (prev) {
|
|
475
|
-
return _objectSpread(_objectSpread({}, prev), {}, _defineProperty({}, messageId, true));
|
|
476
|
-
});
|
|
477
|
-
var targetMessage = messages.find(function (msg) {
|
|
478
|
-
return msg.id === messageId;
|
|
479
|
-
});
|
|
480
|
-
var isRetrySuggestion = !!(targetMessage !== null && targetMessage !== void 0 && targetMessage.isError) && suggestion === t('chat.retry');
|
|
481
|
-
if (isRetrySuggestion) {
|
|
482
|
-
var _lastUserMessage = messages.filter(function (msg) {
|
|
483
|
-
return msg.role === ChatHistoryRole.USER || msg.user.id === authUser.id.toString();
|
|
484
|
-
}).at(-1);
|
|
485
|
-
if (_lastUserMessage !== null && _lastUserMessage !== void 0 && _lastUserMessage.message) {
|
|
486
|
-
var retryAttachments = Array.isArray(_lastUserMessage.attachments) ? _lastUserMessage.attachments : Array.isArray(_lastUserMessage.sources) ? _lastUserMessage.sources : [];
|
|
487
|
-
sendMessage(_lastUserMessage.message, retryAttachments);
|
|
488
|
-
return;
|
|
489
|
-
}
|
|
490
|
-
}
|
|
491
|
-
sendMessage(suggestion);
|
|
492
|
-
}, [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]);
|
|
493
474
|
|
|
494
475
|
/**
|
|
495
|
-
*
|
|
496
|
-
*
|
|
497
|
-
*
|
|
476
|
+
* Recalcula el botón "scroll to bottom" y los gradientes de borde a partir de
|
|
477
|
+
* la posición del scroll. Los refs evitan `setState` cuando el valor no cambia:
|
|
478
|
+
* esto corre en cada frame del stream.
|
|
498
479
|
*/
|
|
499
|
-
var
|
|
480
|
+
var updateScrollAffordances = useCallback(function () {
|
|
500
481
|
var el = messagesRef.current;
|
|
501
482
|
if (!el) return;
|
|
502
483
|
var scrollTop = el.scrollTop,
|
|
503
484
|
scrollHeight = el.scrollHeight,
|
|
504
485
|
clientHeight = el.clientHeight;
|
|
505
|
-
|
|
486
|
+
// El spacer del turno es alto reservado, no contenido: si no lo descontamos
|
|
487
|
+
// la flecha y el gradiente de abajo quedan encendidos durante todo el turno.
|
|
488
|
+
var distanceFromBottom = scrollHeight - spacerHeightRef.current - scrollTop - clientHeight;
|
|
506
489
|
var shouldShow = distanceFromBottom > 50;
|
|
507
490
|
if (showScrollToBottomRef.current !== shouldShow) {
|
|
508
491
|
showScrollToBottomRef.current = shouldShow;
|
|
509
492
|
setShowScrollToBottom(shouldShow);
|
|
510
493
|
}
|
|
494
|
+
var nextTopGradient = scrollTop > 1;
|
|
495
|
+
if (showTopGradientRef.current !== nextTopGradient) {
|
|
496
|
+
showTopGradientRef.current = nextTopGradient;
|
|
497
|
+
setShowTopGradient(nextTopGradient);
|
|
498
|
+
}
|
|
499
|
+
var nextBottomGradient = distanceFromBottom > 1;
|
|
500
|
+
if (showBottomGradientRef.current !== nextBottomGradient) {
|
|
501
|
+
showBottomGradientRef.current = nextBottomGradient;
|
|
502
|
+
setShowBottomGradient(nextBottomGradient);
|
|
503
|
+
}
|
|
511
504
|
}, []);
|
|
512
505
|
|
|
513
506
|
/**
|
|
@@ -527,11 +520,41 @@ var ChatAIMessagesInner = function ChatAIMessagesInner(_ref5) {
|
|
|
527
520
|
if (!el) return;
|
|
528
521
|
if (skipIfUserScrolling && userScrollingRef.current) return;
|
|
529
522
|
el.scrollTop = el.scrollHeight;
|
|
530
|
-
|
|
523
|
+
updateScrollAffordances();
|
|
531
524
|
});
|
|
532
525
|
};
|
|
533
526
|
if (delayMs > 0) setTimeout(run, delayMs);else run();
|
|
534
|
-
}, [
|
|
527
|
+
}, [updateScrollAffordances]);
|
|
528
|
+
var cancelTurnScroll = useCallback(function () {
|
|
529
|
+
if (turnScrollRafRef.current === null) return;
|
|
530
|
+
cancelAnimationFrame(turnScrollRafRef.current);
|
|
531
|
+
turnScrollRafRef.current = null;
|
|
532
|
+
}, []);
|
|
533
|
+
|
|
534
|
+
/**
|
|
535
|
+
* Scroll animado con easing propio: `behavior: 'smooth'` no permite regular la
|
|
536
|
+
* duración y el salto al anclar el turno queda demasiado seco.
|
|
537
|
+
*/
|
|
538
|
+
var animateScrollTo = useCallback(function (top) {
|
|
539
|
+
cancelTurnScroll();
|
|
540
|
+
var el = messagesRef.current;
|
|
541
|
+
if (!el) return;
|
|
542
|
+
var from = el.scrollTop;
|
|
543
|
+
var distance = top - from;
|
|
544
|
+
if (Math.abs(distance) < 1) return;
|
|
545
|
+
var startedAt = performance.now();
|
|
546
|
+
var _step = function step(now) {
|
|
547
|
+
var progress = Math.min(1, (now - startedAt) / TURN_SCROLL_DURATION_MS);
|
|
548
|
+
var eased = 1 - Math.pow(1 - progress, 3);
|
|
549
|
+
el.scrollTop = from + distance * eased;
|
|
550
|
+
updateScrollAffordances();
|
|
551
|
+
turnScrollRafRef.current = progress < 1 ? requestAnimationFrame(_step) : null;
|
|
552
|
+
};
|
|
553
|
+
turnScrollRafRef.current = requestAnimationFrame(_step);
|
|
554
|
+
}, [cancelTurnScroll, updateScrollAffordances]);
|
|
555
|
+
useEffect(function () {
|
|
556
|
+
return cancelTurnScroll;
|
|
557
|
+
}, [cancelTurnScroll]);
|
|
535
558
|
var setSpacerHeight = useCallback(function (next) {
|
|
536
559
|
if (Math.abs(spacerHeightRef.current - next) < 1) return;
|
|
537
560
|
spacerHeightRef.current = next;
|
|
@@ -540,7 +563,7 @@ var ChatAIMessagesInner = function ChatAIMessagesInner(_ref5) {
|
|
|
540
563
|
}
|
|
541
564
|
}, []);
|
|
542
565
|
var clearTurnSpace = useCallback(function () {
|
|
543
|
-
|
|
566
|
+
anchoredTurnIdRef.current = null;
|
|
544
567
|
setSpacerHeight(0);
|
|
545
568
|
}, [setSpacerHeight]);
|
|
546
569
|
var measureTurn = useCallback(function (questionId) {
|
|
@@ -564,25 +587,44 @@ var ChatAIMessagesInner = function ChatAIMessagesInner(_ref5) {
|
|
|
564
587
|
var el = measured.el,
|
|
565
588
|
questionTop = measured.questionTop,
|
|
566
589
|
turnHeight = measured.turnHeight;
|
|
567
|
-
|
|
568
|
-
|
|
569
|
-
|
|
590
|
+
|
|
591
|
+
// Anclamos siempre, incluso cuando no haga falta reservar: durante el
|
|
592
|
+
// turno el scroll no se mueve solo en ningún caso.
|
|
593
|
+
anchoredTurnIdRef.current = questionId;
|
|
594
|
+
var offset = turnAnchorOffset(el.clientHeight);
|
|
595
|
+
var targetScrollTop = Math.max(0, questionTop - offset);
|
|
596
|
+
// Chat recién iniciado o conversación que aún entra en pantalla: la
|
|
597
|
+
// pregunta ya está arriba, no hay nada que subir ni que reservar.
|
|
598
|
+
if (targetScrollTop <= el.scrollTop) {
|
|
599
|
+
setSpacerHeight(0);
|
|
600
|
+
updateScrollAffordances();
|
|
570
601
|
return;
|
|
571
602
|
}
|
|
572
|
-
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
|
|
576
|
-
|
|
603
|
+
|
|
604
|
+
// Reservamos lo mínimo para que `targetScrollTop` sea alcanzable. El
|
|
605
|
+
// spacer se inserta de una (es alto reservado, no contenido visible);
|
|
606
|
+
// lo único que se percibe es el desplazamiento animado.
|
|
607
|
+
setSpacerHeight(Math.max(0, el.clientHeight - turnHeight - offset));
|
|
608
|
+
animateScrollTo(targetScrollTop);
|
|
609
|
+
}, [measureTurn, setSpacerHeight, updateScrollAffordances, animateScrollTo]);
|
|
610
|
+
|
|
611
|
+
/**
|
|
612
|
+
* Encoge el spacer a medida que crece la respuesta: el alto total del scroll
|
|
613
|
+
* queda constante y la vista no se mueve sola. Solo achica, nunca agranda,
|
|
614
|
+
* para no inyectar espacio en turnos que arrancaron sin reserva.
|
|
615
|
+
* Devuelve si el turno sigue anclado (aunque el spacer ya sea 0).
|
|
616
|
+
*/
|
|
577
617
|
var syncTurnSpace = useCallback(function () {
|
|
578
|
-
if (!
|
|
579
|
-
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
|
|
618
|
+
if (!anchoredTurnIdRef.current) return false;
|
|
619
|
+
if (spacerHeightRef.current > 0) {
|
|
620
|
+
var measured = measureTurn(anchoredTurnIdRef.current);
|
|
621
|
+
if (measured) {
|
|
622
|
+
var offset = turnAnchorOffset(measured.el.clientHeight);
|
|
623
|
+
var reserved = Math.max(0, measured.el.clientHeight - measured.turnHeight - offset);
|
|
624
|
+
setSpacerHeight(Math.min(spacerHeightRef.current, reserved));
|
|
625
|
+
}
|
|
626
|
+
}
|
|
627
|
+
return true;
|
|
586
628
|
}, [measureTurn, setSpacerHeight]);
|
|
587
629
|
var handleClickScrollToBottom = useCallback(function () {
|
|
588
630
|
if (!messagesRef.current) return;
|
|
@@ -592,21 +634,8 @@ var ChatAIMessagesInner = function ChatAIMessagesInner(_ref5) {
|
|
|
592
634
|
behavior: 'smooth'
|
|
593
635
|
});
|
|
594
636
|
// Dar tiempo al smooth-scroll antes de recalcular la visibilidad del botón.
|
|
595
|
-
setTimeout(
|
|
596
|
-
}, [clearTurnSpace,
|
|
597
|
-
|
|
598
|
-
// Al decidir en el ApprovalBox: el box colapsa (botones -> badge) y el stream
|
|
599
|
-
// continúa abajo. Reactivar el auto-scroll y seguir el fondo para que la vista
|
|
600
|
-
// no quede atrás (evita que aparezca la flecha de scroll-to-bottom).
|
|
601
|
-
var handleApprovalDecisionWithScroll = useCallback(function () {
|
|
602
|
-
userScrollingRef.current = false;
|
|
603
|
-
scrollThresholdRef.current = 39;
|
|
604
|
-
handleApprovalDecision.apply(void 0, arguments);
|
|
605
|
-
scrollToBottomRaf();
|
|
606
|
-
scrollToBottomRaf({
|
|
607
|
-
delayMs: 100
|
|
608
|
-
});
|
|
609
|
-
}, [handleApprovalDecision, scrollToBottomRaf]);
|
|
637
|
+
setTimeout(updateScrollAffordances, 500);
|
|
638
|
+
}, [clearTurnSpace, updateScrollAffordances]);
|
|
610
639
|
var handleScrollToBottom = useCallback(function (e) {
|
|
611
640
|
var container = e.currentTarget;
|
|
612
641
|
if (scrollRafRef.current !== null) {
|
|
@@ -627,13 +656,13 @@ var ChatAIMessagesInner = function ChatAIMessagesInner(_ref5) {
|
|
|
627
656
|
}
|
|
628
657
|
userScrollingRef.current = !isNearBottom;
|
|
629
658
|
lastScrollTopRef.current = scrollTop;
|
|
630
|
-
|
|
659
|
+
updateScrollAffordances();
|
|
631
660
|
if (isNearBottom && onScrollToBottom) {
|
|
632
661
|
onScrollToBottom();
|
|
633
662
|
}
|
|
634
663
|
handleScroll(container);
|
|
635
664
|
});
|
|
636
|
-
}, [onScrollToBottom, handleScroll,
|
|
665
|
+
}, [onScrollToBottom, handleScroll, updateScrollAffordances]);
|
|
637
666
|
|
|
638
667
|
// refs to stabilize functions and avoid unnecessary re-renders
|
|
639
668
|
var sendMessageRef = useRef(sendMessage);
|
|
@@ -650,6 +679,45 @@ var ChatAIMessagesInner = function ChatAIMessagesInner(_ref5) {
|
|
|
650
679
|
sendMessageRef.current = sendMessage;
|
|
651
680
|
stopGenerationRef.current = stopGeneration;
|
|
652
681
|
onSendMessageReadyRef.current = onSendMessageReady;
|
|
682
|
+
|
|
683
|
+
/**
|
|
684
|
+
* `handleSuggestionClick` se pasa a TODOS los MessageItem, así que su identidad
|
|
685
|
+
* decide si el `memo` de la lista sostiene. Leemos por ref lo que cambia en cada
|
|
686
|
+
* update (`messages`, `sendMessage`, las sugerencias ya elegidas) para que el
|
|
687
|
+
* callback sea estable: si no, al terminar el stream se repinta el chat entero
|
|
688
|
+
* y cada MaiaStreamdown vuelve a parsear su markdown.
|
|
689
|
+
*/
|
|
690
|
+
var messagesDataRef = useRef(messages);
|
|
691
|
+
messagesDataRef.current = messages;
|
|
692
|
+
var selectedSuggestionMessageIdsRef = useRef(selectedSuggestionMessageIds);
|
|
693
|
+
selectedSuggestionMessageIdsRef.current = selectedSuggestionMessageIds;
|
|
694
|
+
var handleSuggestionClick = useCallback(function (messageId, suggestion) {
|
|
695
|
+
if (!(suggestion !== null && suggestion !== void 0 && suggestion.trim())) return;
|
|
696
|
+
if (selectedSuggestionMessageIdsRef.current[messageId]) return;
|
|
697
|
+
var currentMessages = messagesDataRef.current;
|
|
698
|
+
var isMarketplaceGlobalAgent = isMaiakerAgent(agent);
|
|
699
|
+
event(EVENTS.aiChatSuggestedAnswer, {
|
|
700
|
+
agent_type: isMarketplaceGlobalAgent ? 'marketplace' : agent === null || agent === void 0 ? void 0 : agent.type
|
|
701
|
+
});
|
|
702
|
+
setSelectedSuggestionMessageIds(function (prev) {
|
|
703
|
+
return _objectSpread(_objectSpread({}, prev), {}, _defineProperty({}, messageId, true));
|
|
704
|
+
});
|
|
705
|
+
var targetMessage = currentMessages.find(function (msg) {
|
|
706
|
+
return msg.id === messageId;
|
|
707
|
+
});
|
|
708
|
+
var isRetrySuggestion = !!(targetMessage !== null && targetMessage !== void 0 && targetMessage.isError) && suggestion === t('chat.retry');
|
|
709
|
+
if (isRetrySuggestion) {
|
|
710
|
+
var _lastUserMessage = currentMessages.filter(function (msg) {
|
|
711
|
+
return msg.role === ChatHistoryRole.USER || msg.user.id === authUser.id.toString();
|
|
712
|
+
}).at(-1);
|
|
713
|
+
if (_lastUserMessage !== null && _lastUserMessage !== void 0 && _lastUserMessage.message) {
|
|
714
|
+
var retryAttachments = Array.isArray(_lastUserMessage.attachments) ? _lastUserMessage.attachments : Array.isArray(_lastUserMessage.sources) ? _lastUserMessage.sources : [];
|
|
715
|
+
sendMessageRef.current(_lastUserMessage.message, retryAttachments);
|
|
716
|
+
return;
|
|
717
|
+
}
|
|
718
|
+
}
|
|
719
|
+
sendMessageRef.current(suggestion);
|
|
720
|
+
}, [event, agent, t, authUser.id]);
|
|
653
721
|
useEffect(function () {
|
|
654
722
|
if (onSendMessageReadyRef.current) {
|
|
655
723
|
onSendMessageReadyRef.current(sendMessageProxyRef.current, stopGenerationProxyRef.current, waitingResponse, isWriting);
|
|
@@ -679,10 +747,7 @@ var ChatAIMessagesInner = function ChatAIMessagesInner(_ref5) {
|
|
|
679
747
|
// contra el último valor observado y ajusta solo cuando cambia. Así el
|
|
680
748
|
// scroll queda perfectamente sincronizado con la animación del texto sin
|
|
681
749
|
// depender de la cadencia del streamingStore.
|
|
682
|
-
|
|
683
|
-
if (waitingResponse || isWriting) return;
|
|
684
|
-
if (reservedTurnIdRef.current) clearTurnSpace();
|
|
685
|
-
}, [waitingResponse, isWriting, clearTurnSpace]);
|
|
750
|
+
// Con el turno anclado este loop solo encoge el spacer: no toca el scroll.
|
|
686
751
|
useEffect(function () {
|
|
687
752
|
if (!waitingResponse && !isWriting) return undefined;
|
|
688
753
|
if (!messagesRef.current) return undefined;
|
|
@@ -695,7 +760,9 @@ var ChatAIMessagesInner = function ChatAIMessagesInner(_ref5) {
|
|
|
695
760
|
return;
|
|
696
761
|
}
|
|
697
762
|
if (syncTurnSpace()) {
|
|
698
|
-
|
|
763
|
+
// El scroll no se mueve, pero el contenido crece: la flecha y el
|
|
764
|
+
// gradiente de abajo tienen que encenderse apenas se pasa del viewport.
|
|
765
|
+
updateScrollAffordances();
|
|
699
766
|
rafId = requestAnimationFrame(_tick);
|
|
700
767
|
return;
|
|
701
768
|
}
|
|
@@ -705,7 +772,7 @@ var ChatAIMessagesInner = function ChatAIMessagesInner(_ref5) {
|
|
|
705
772
|
if (!userScrollingRef.current) {
|
|
706
773
|
el.scrollTop = currentHeight;
|
|
707
774
|
}
|
|
708
|
-
|
|
775
|
+
updateScrollAffordances();
|
|
709
776
|
}
|
|
710
777
|
rafId = requestAnimationFrame(_tick);
|
|
711
778
|
};
|
|
@@ -713,17 +780,26 @@ var ChatAIMessagesInner = function ChatAIMessagesInner(_ref5) {
|
|
|
713
780
|
return function () {
|
|
714
781
|
if (rafId != null) cancelAnimationFrame(rafId);
|
|
715
782
|
};
|
|
716
|
-
}, [waitingResponse, isWriting, syncTurnSpace,
|
|
783
|
+
}, [waitingResponse, isWriting, syncTurnSpace, updateScrollAffordances]);
|
|
717
784
|
|
|
718
785
|
// Al comenzar a esperar la respuesta del backend, scroll inicial al fondo.
|
|
719
786
|
useEffect(function () {
|
|
720
|
-
if (waitingResponse && messagesRef.current && !
|
|
787
|
+
if (waitingResponse && messagesRef.current && !anchoredTurnIdRef.current) {
|
|
721
788
|
scrollToBottomRaf({
|
|
722
789
|
skipIfUserScrolling: true
|
|
723
790
|
});
|
|
724
791
|
}
|
|
725
792
|
}, [waitingResponse, scrollToBottomRaf]);
|
|
726
793
|
var lastReservedQuestionRef = useRef(null);
|
|
794
|
+
|
|
795
|
+
// Cambio de chat: el ancla y el spacer del turno anterior dejan de aplicar.
|
|
796
|
+
useEffect(function () {
|
|
797
|
+
if (!loadingMessages) return;
|
|
798
|
+
lastReservedQuestionRef.current = null;
|
|
799
|
+
clearTurnSpace();
|
|
800
|
+
}, [loadingMessages, clearTurnSpace]);
|
|
801
|
+
|
|
802
|
+
// Al enviar un mensaje: anclamos el turno y hacemos el único scroll del ciclo.
|
|
727
803
|
useEffect(function () {
|
|
728
804
|
if (loadingMessages || isLoadingMoreMessages) return;
|
|
729
805
|
var questionId = null;
|
|
@@ -787,7 +863,14 @@ var ChatAIMessagesInner = function ChatAIMessagesInner(_ref5) {
|
|
|
787
863
|
lastMessagesLengthRef.current = messages.length;
|
|
788
864
|
var isNewMessage = lastId !== prevId || messages.length !== prevLen;
|
|
789
865
|
if (!isNewMessage) {
|
|
790
|
-
|
|
866
|
+
updateScrollAffordances();
|
|
867
|
+
return;
|
|
868
|
+
}
|
|
869
|
+
|
|
870
|
+
// Turno anclado: ni el reemplazo del placeholder por el mensaje final, ni la
|
|
871
|
+
// aparición del ApprovalBox mueven el scroll. Solo se ajusta el spacer.
|
|
872
|
+
if (anchoredTurnIdRef.current) {
|
|
873
|
+
requestAnimationFrame(syncTurnSpace);
|
|
791
874
|
return;
|
|
792
875
|
}
|
|
793
876
|
var container = messagesRef.current;
|
|
@@ -798,23 +881,6 @@ var ChatAIMessagesInner = function ChatAIMessagesInner(_ref5) {
|
|
|
798
881
|
var isApproval = !!lastMessage && (lastMessage.id.startsWith('approval-') || !!lastMessage.approval);
|
|
799
882
|
var isAnswerOrQuestion = !!lastMessage && (lastMessage.id.startsWith('answer-') || lastMessage.id.startsWith('question-'));
|
|
800
883
|
|
|
801
|
-
// Approval: secuencia de scrolls con delay porque el ApprovalBox necesita
|
|
802
|
-
// un tick para medirse. Scrollea aunque el usuario no esté al fondo si no
|
|
803
|
-
// está scrolleando manualmente.
|
|
804
|
-
if (isApproval && (isAtBottom || !userScrollingRef.current)) {
|
|
805
|
-
clearTurnSpace();
|
|
806
|
-
scrollToBottomRaf();
|
|
807
|
-
scrollToBottomRaf();
|
|
808
|
-
scrollToBottomRaf({
|
|
809
|
-
delayMs: 100
|
|
810
|
-
});
|
|
811
|
-
return;
|
|
812
|
-
}
|
|
813
|
-
if (reservedTurnIdRef.current) {
|
|
814
|
-
requestAnimationFrame(syncTurnSpace);
|
|
815
|
-
return;
|
|
816
|
-
}
|
|
817
|
-
|
|
818
884
|
// Nuevos answer/question: scroll si el usuario ya estaba al fondo.
|
|
819
885
|
if (isAnswerOrQuestion && isAtBottom) {
|
|
820
886
|
scrollToBottomRaf();
|
|
@@ -827,8 +893,8 @@ var ChatAIMessagesInner = function ChatAIMessagesInner(_ref5) {
|
|
|
827
893
|
scrollToBottomRaf();
|
|
828
894
|
return;
|
|
829
895
|
}
|
|
830
|
-
|
|
831
|
-
}, [messages, loadingMessages, isLoadingMoreMessages,
|
|
896
|
+
updateScrollAffordances();
|
|
897
|
+
}, [messages, loadingMessages, isLoadingMoreMessages, scrollToBottomRaf, syncTurnSpace, updateScrollAffordances]);
|
|
832
898
|
|
|
833
899
|
// Al abrir/cargar una conversación el contenedor se remonta (Loader → lista) con
|
|
834
900
|
// scrollTop=0. Forzamos ir al fondo al terminar loadMessages, sin afectar paginación hacia arriba.
|
|
@@ -847,6 +913,13 @@ var ChatAIMessagesInner = function ChatAIMessagesInner(_ref5) {
|
|
|
847
913
|
});
|
|
848
914
|
}, [loadingMessages, messages.length, scrollToBottomRaf]);
|
|
849
915
|
|
|
916
|
+
// Estado inicial del botón scroll-to-bottom al terminar loadingMessages.
|
|
917
|
+
useEffect(function () {
|
|
918
|
+
if (!loadingMessages) {
|
|
919
|
+
updateScrollAffordances();
|
|
920
|
+
}
|
|
921
|
+
}, [loadingMessages, messages.length, updateScrollAffordances]);
|
|
922
|
+
|
|
850
923
|
// Obtener el último mensaje del usuario para verificar si tiene attachments
|
|
851
924
|
var lastUserMessage = messages.filter(function (msg) {
|
|
852
925
|
return msg.role === ChatHistoryRole.USER || msg.user.id === authUser.id.toString();
|
|
@@ -864,7 +937,6 @@ var ChatAIMessagesInner = function ChatAIMessagesInner(_ref5) {
|
|
|
864
937
|
t: t
|
|
865
938
|
});
|
|
866
939
|
var isScrollOnParent = !!expanded;
|
|
867
|
-
var isMarketplaceGlobalAgent = isMaiakerAgent(agent);
|
|
868
940
|
|
|
869
941
|
// Al expandir/contraer el modal el ref pasa a otro contenedor (scrollTop se resetea a 0).
|
|
870
942
|
// Restaurar la posición de scroll antes del paint para evitar que la conversación salte arriba.
|
|
@@ -884,11 +956,6 @@ var ChatAIMessagesInner = function ChatAIMessagesInner(_ref5) {
|
|
|
884
956
|
children: /*#__PURE__*/_jsx(Loader, {})
|
|
885
957
|
});
|
|
886
958
|
}
|
|
887
|
-
var isAssistantAt = function isAssistantAt(index) {
|
|
888
|
-
var message = messages[index];
|
|
889
|
-
if (!message) return false;
|
|
890
|
-
return message.role === ChatHistoryRole.ASSISTANT || message.user.id === 'assistant';
|
|
891
|
-
};
|
|
892
959
|
var lastMessage = messages[messages.length - 1];
|
|
893
960
|
var hasMessageLevelIndicator = !!lastMessage && isStreamingPlaceholderMessageId(lastMessage.id) && (waitingResponse || isWriting);
|
|
894
961
|
var messagesContent = /*#__PURE__*/_jsxs(_Fragment, {
|
|
@@ -914,13 +981,12 @@ var ChatAIMessagesInner = function ChatAIMessagesInner(_ref5) {
|
|
|
914
981
|
authUser: authUser,
|
|
915
982
|
handleSelectOption: handleSelectOption,
|
|
916
983
|
handleFeedback: handleFeedback,
|
|
917
|
-
handleApprovalDecision:
|
|
984
|
+
handleApprovalDecision: handleApprovalDecision,
|
|
918
985
|
handleSuggestionClick: handleSuggestionClick,
|
|
919
986
|
hasSelectedSuggestion: !!selectedSuggestionMessageIds[message.id],
|
|
920
987
|
disableFeedback: messageFeedback,
|
|
921
988
|
isStreaming: isStreaming,
|
|
922
989
|
isLastMessage: isLastMessage,
|
|
923
|
-
showAgentHeader: isAssistantMessage && !isAssistantAt(index - 1),
|
|
924
990
|
expanded: expanded,
|
|
925
991
|
streamActivity: isStreaming ? streamLoadingDisplay : null
|
|
926
992
|
}));
|
|
@@ -934,32 +1000,43 @@ var ChatAIMessagesInner = function ChatAIMessagesInner(_ref5) {
|
|
|
934
1000
|
"aria-hidden": "true"
|
|
935
1001
|
})]
|
|
936
1002
|
});
|
|
937
|
-
return
|
|
938
|
-
|
|
939
|
-
|
|
940
|
-
|
|
941
|
-
|
|
942
|
-
|
|
943
|
-
|
|
944
|
-
|
|
1003
|
+
return (
|
|
1004
|
+
/*#__PURE__*/
|
|
1005
|
+
// Si el usuario mueve el scroll durante la animación, abortamos: no le
|
|
1006
|
+
// peleamos el control del contenedor.
|
|
1007
|
+
_jsxs(SCMessagesOuter, {
|
|
1008
|
+
$scrollOnParent: isScrollOnParent,
|
|
1009
|
+
onWheel: cancelTurnScroll,
|
|
1010
|
+
onTouchStart: cancelTurnScroll,
|
|
1011
|
+
children: [/*#__PURE__*/_jsx(SCMessagesGradientTop, {
|
|
1012
|
+
$show: showTopGradient,
|
|
1013
|
+
"aria-hidden": "true"
|
|
1014
|
+
}), isScrollOnParent ? /*#__PURE__*/_jsx(SCMessagesScroll, {
|
|
1015
|
+
ref: messagesRef,
|
|
1016
|
+
onScroll: handleScrollToBottom,
|
|
1017
|
+
children: /*#__PURE__*/_jsx(SCMessagesInner, {
|
|
1018
|
+
$scrollOnParent: isScrollOnParent,
|
|
1019
|
+
children: messagesContent
|
|
1020
|
+
})
|
|
1021
|
+
}) : /*#__PURE__*/_jsx(SCMessagesInner, {
|
|
1022
|
+
ref: messagesRef,
|
|
1023
|
+
onScroll: handleScrollToBottom,
|
|
1024
|
+
$scrollOnParent: false,
|
|
945
1025
|
children: messagesContent
|
|
946
|
-
})
|
|
947
|
-
|
|
948
|
-
|
|
949
|
-
|
|
950
|
-
|
|
951
|
-
|
|
952
|
-
|
|
953
|
-
|
|
954
|
-
|
|
955
|
-
|
|
956
|
-
|
|
957
|
-
|
|
958
|
-
|
|
959
|
-
|
|
960
|
-
})
|
|
961
|
-
})]
|
|
962
|
-
});
|
|
1026
|
+
}), /*#__PURE__*/_jsx(SCMessagesGradientBottom, {
|
|
1027
|
+
$show: showBottomGradient,
|
|
1028
|
+
"aria-hidden": "true"
|
|
1029
|
+
}), showScrollToBottom && /*#__PURE__*/_jsx(ScrollToBottomButton, {
|
|
1030
|
+
type: "button",
|
|
1031
|
+
onClick: handleClickScrollToBottom,
|
|
1032
|
+
children: /*#__PURE__*/_jsx(ArrowSmallDown, {
|
|
1033
|
+
color: "#666",
|
|
1034
|
+
width: "20px",
|
|
1035
|
+
height: "20px"
|
|
1036
|
+
})
|
|
1037
|
+
})]
|
|
1038
|
+
})
|
|
1039
|
+
);
|
|
963
1040
|
};
|
|
964
1041
|
export var ChatAIMessages = /*#__PURE__*/React.memo(ChatAIMessagesInner);
|
|
965
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSZWFjdCIsIm1lbW8iLCJ1c2VDYWxsYmFjayIsInVzZUVmZmVjdCIsInVzZUxheW91dEVmZmVjdCIsInVzZVJlZiIsInVzZVN0YXRlIiwiY3JlYXRlRWxlbWVudCIsIl9jcmVhdGVFbGVtZW50IiwiQXJyb3dTbWFsbERvd24iLCJNQUlBSWNvbiIsIkF0dGFjaG1lbnRDYXJkIiwiQXBwcm92YWxCb3giLCJBdHRhY2htZW50UHJldmlld01vZGFsIiwiQXR0YWNobWVudENhcmRBdWRpbyIsIk1haWFTdHJlYW1kb3duIiwiQ2hhdEhpc3RvcnlSb2xlIiwicmVuZGVyVGV4dFdpdGhNZW50aW9ucyIsImhhc0lubGluZU1hcmtlcnMiLCJnZXRBZ2VudERpc3BsYXlOYW1lIiwiaXNNYWlha2VyQWdlbnQiLCJ1c2VVc2VyIiwidXNlVCIsInVzZUNoYXRNYW5hZ2VyIiwidXNlU21vb3RoU3RyZWFtVGV4dCIsInVzZVN0cmVhbWluZ01lc3NhZ2UiLCJMb2FkaW5nVGV4dCIsIkFnZW50QWN0aXZpdHlJbmRpY2F0b3IiLCJSZWFzb25pbmdCbG9jayIsImlzU3RyZWFtaW5nUGxhY2Vob2xkZXJNZXNzYWdlSWQiLCJyZXNvbHZlU3RyZWFtTG9hZGluZ0Rpc3BsYXkiLCJMb2FkZXIiLCJGYWRlIiwiTWVzc2FnZUZyb21Vc2VyIiwiTWVzc2FnZUZyb21PdGhlciIsIk1lc3NhZ2VDb250ZW50RnJvbVVzZXIiLCJNZXNzYWdlQ29udGVudEZyb21PdGhlciIsIk1lc3NhZ2VGZWVkYmFjayIsIlNDQ0FJTWVzc2FnZVdyYXBwZXIiLCJTY3JvbGxUb0JvdHRvbUJ1dHRvbiIsIlNDTWVzc2FnZXNPdXRlciIsIlNDTWVzc2FnZXNTY3JvbGwiLCJTQ01lc3NhZ2VzSW5uZXIiLCJTQ1R1cm5TcGFjZXIiLCJTQ09wdGlvbnNMaXN0IiwiU0NPcHRpb25JdGVtIiwiU0NNZXNzYWdlSXRlbVdyYXBwZXIiLCJTQ01lc3NhZ2VJdGVtSW5uZXIiLCJTQ0F0dGFjaG1lbnRzUm93IiwiU0NBcHByb3ZhbEFjdGlvbnNDb2x1bW4iLCJTQ0FnZW50TWVzc2FnZUhlYWRlciIsIlNDTG9hZGluZ01lc3NhZ2VzQ29sdW1uIiwiRmVlZGJhY2siLCJ1c2VHbG9iYWxDb250ZXh0IiwiRW50aXR5TGlua0N1c3RvbUxpbmsiLCJnZXRFbnRpdHlMaW5rV3JhcHBlckNsYXNzTmFtZSIsIkNoYXRBSVN1Z2dlc3Rpb25zIiwiQ2hhdEFJQ3JlYXRlQWdlbnRBY3Rpb25zIiwiRVZFTlRTIiwidXNlRXZlbnQiLCJkb3dubG9hZEZpbGVGcm9tVXJsIiwianN4IiwiX2pzeCIsIkZyYWdtZW50IiwiX0ZyYWdtZW50IiwianN4cyIsIl9qc3hzIiwiTWVzc2FnZVdyYXBwZXIiLCJfcmVmIiwiaXNDdXJyZW50VXNlciIsImNoaWxkcmVuIiwicHJvcHMiLCJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCJfZXhjbHVkZWQiLCJNZXNzYWdlQ29tcG9uZW50IiwiX29iamVjdFNwcmVhZCIsIk1lc3NhZ2VDb250ZW50V3JhcHBlciIsIl9yZWYyIiwiX2V4Y2x1ZGVkMiIsIk1lc3NhZ2VDb250ZW50Q29tcG9uZW50IiwiTWVzc2FnZU9wdGlvbnMiLCJfcmVmMyIsIm9wdGlvbnMiLCJoYW5kbGVTZWxlY3RPcHRpb24iLCJfdXNlU3RhdGUiLCJfdXNlU3RhdGUyIiwiX3NsaWNlZFRvQXJyYXkiLCJzZWxlY3RlZE9wdGlvbiIsInNldFNlbGVjdGVkT3B0aW9uIiwiaGFuZGxlU2VsZWN0Iiwib3B0aW9uIiwibWFwIiwiJGhhc1NlbGVjdGlvbiIsIiRkaW1tZWQiLCJpZCIsIm9uQ2xpY2siLCJuYW1lIiwiU3RyZWFtaW5nTWVzc2FnZUJvZHkiLCJfcHJvcHMkY3JlYXRlQWdlbnRGb2wiLCJfcHJvcHMkc3VnZ2VzdGlvbnMiLCJzdHJlYW1pbmdUZXh0IiwiaXNTdHJlYW1pbmciLCJtZXNzYWdlSWQiLCJyYXdUZXh0IiwibWVzc2FnZSIsIndpbkZsYWdzIiwid2luZG93IiwiZGlzcGxheVRleHQiLCJlbmFibGVkIiwibWF4Q2hhcnNQZXJGcmFtZSIsInNuYXBUb1dvcmRCb3VuZGFyeSIsInN0cmVhbUxhZ01zIiwidGFyZ2V0TGFnTXMiLCJzdHJlYW1BZGFwdCIsImFkYXB0VG9CYWNrZW5kUmF0ZSIsInN0cmVhbUJ1ZmZlck1zIiwidGFyZ2V0QnVmZmVyTXMiLCJzdHJlYW1NaW5CdWZmZXIiLCJtaW5CdWZmZXJDaGFycyIsInN0cmVhbVdhcm11cE1zIiwid2FybXVwTXMiLCJjcmVhdGVBZ2VudEFjdGlvbnNBZ2VudElkIiwiY3JlYXRlQWdlbnRGb2xsb3dVcCIsImFnZW50SWQiLCJoYXNNZW50aW9ucyIsIm1lbnRpb25Ob2RlcyIsImlzRnJvbnRlbmRDYW5jZWxsZWQiLCJjbGFzc05hbWUiLCJzdHlsZSIsImRpc3BsYXkiLCJ2YXJpYW50IiwiY29tcG9uZW50cyIsImEiLCJpc0FuaW1hdGluZyIsImlzQXNzaXN0YW50IiwiaXNFcnJvciIsImFwcHJvdmFsIiwiY29udGVudCIsInNvdXJjZXMiLCJoYW5kbGVGZWVkYmFjayIsImhhbmRsZUZlZWRiYWNrQ2xpY2siLCJkaXNhYmxlRmVlZGJhY2siLCJzdWdnZXN0aW9ucyIsImxlbmd0aCIsIm9uU2VsZWN0U3VnZ2VzdGlvbiIsInN1Z2dlc3Rpb24iLCJoYW5kbGVTdWdnZXN0aW9uQ2xpY2siLCJkaXNhYmxlZCIsInN1Z2dlc3Rpb25zRGlzYWJsZWQiLCJoaWRkZW4iLCJpc0xhc3RNZXNzYWdlIiwiQWdlbnRNZXNzYWdlSGVhZGVyIiwiX3VzZUdsb2JhbENvbnRleHQiLCJhZ2VudCIsInR5cGUiLCJpc01haWFCcmFuZGVkIiwiZW1vamkiLCJ3aWR0aCIsImhlaWdodCIsIk1lc3NhZ2VJdGVtIiwiX3Byb3BzJHJlYXNvbmluZyIsIl9wcm9wcyRwcm9qZWN0TWV0YWRhdCIsInVzZXIiLCJhdXRoVXNlciIsImlzQ2hhbmdlUHJvamVjdCIsImhhbmRsZUFwcHJvdmFsRGVjaXNpb24iLCJyb2xlIiwiYXR0YWNobWVudHMiLCJhcHByb3ZhbFN0YXR1cyIsImhhc1NlbGVjdGVkU3VnZ2VzdGlvbiIsInN0cmVhbUFjdGl2aXR5IiwiX3VzZVN0YXRlMyIsIl91c2VTdGF0ZTQiLCJwcmV2aWV3QXR0YWNobWVudCIsInNldFByZXZpZXdBdHRhY2htZW50IiwiVVNFUiIsInRvU3RyaW5nIiwiQVNTSVNUQU5UIiwiaXNTdHJlYW1pbmdQbGFjZWhvbGRlciIsImlzQWN0aXZlU3RyZWFtaW5nIiwiaGFzU3RyZWFtVGV4dCIsIkJvb2xlYW4iLCJtZXNzYWdlQXR0YWNobWVudHMiLCJBcnJheSIsImlzQXJyYXkiLCJoYW5kbGVBdHRhY2htZW50Q2xpY2siLCJhdHRhY2htZW50IiwiZmlsZSIsIkZpbGUiLCJvcmlnaW5hbEZpbGUiLCJ1cmxfdGh1bWJuYWlsIiwidXJsX29yaWdpbmFsIiwidXJsX2ZpbGUiLCJoYW5kbGVDbG9zZVByZXZpZXciLCJoYW5kbGVBdHRhY2htZW50RG93bmxvYWQiLCJfcmVmNCIsIl9hc3luY1RvR2VuZXJhdG9yIiwiX3JlZ2VuZXJhdG9yUnVudGltZSIsIm1hcmsiLCJfY2FsbGVlIiwiZXh0ZW5zaW9uIiwiZmlsZU5hbWUiLCJmaWxlVXJsIiwiYmxvYlVybCIsImRvd25sb2FkZWRGaWxlIiwibGluayIsIl90Iiwid3JhcCIsIl9jb250ZXh0IiwicHJldiIsIm5leHQiLCJpbmNsdWRlcyIsImNvbmNhdCIsInNlbnQiLCJVUkwiLCJjcmVhdGVPYmplY3RVUkwiLCJhYnJ1cHQiLCJkb2N1bWVudCIsImhyZWYiLCJkb3dubG9hZCIsImJvZHkiLCJhcHBlbmRDaGlsZCIsImNsaWNrIiwic2V0VGltZW91dCIsInJlbW92ZUNoaWxkIiwicmV2b2tlT2JqZWN0VVJMIiwiY29uc29sZSIsImVycm9yIiwic3RvcCIsIl94IiwiYXBwbHkiLCJhcmd1bWVudHMiLCJoYXNGZWVkYmFjayIsIiRpc0Fzc2lzdGFudCIsIm1lc3NhZ2VFeHRyYUNvbnRlbnQiLCJmZWVkYmFjayIsInNlc3Npb25JZCIsInNwbGl0IiwiZmlsdGVyIiwicXVlc3Rpb25JZCIsImpvaW4iLCJzaG93QWdlbnRIZWFkZXIiLCJ0cmFjZSIsInJlYXNvbmluZyIsImluZGV4IiwiX2F0dGFjaG1lbnQkdHlwZSIsIl9hdHRhY2htZW50JG5hbWUiLCJhdHRhY2htZW50VHlwZSIsInRvTG93ZXJDYXNlIiwiYXR0YWNobWVudE5hbWUiLCJpc0F1ZGlvRmlsZSIsInN0YXJ0c1dpdGgiLCJzb21lIiwiZXh0IiwiZW5kc1dpdGgiLCJwb3NpdGlvbkluZGV4Iiwib25Eb3dubG9hZCIsImFjdGl2aXR5IiwicGVuZGluZ19hY3Rpb25zIiwiYWN0aW9ucyIsInN0YXR1cyIsIm9uQXBwcm92ZSIsInRocmVhZElkcyIsIm9uUmVqZWN0IiwiaXNQcm9qZWN0RGVsZXRlZCIsInByb2plY3RNZXRhZGF0YSIsImlzX2RlbGV0ZWQiLCJpc0V4cGFuZGVkIiwiZXhwYW5kZWQiLCJoaXRsSW5zdGFuY2VJZCIsIm9yaWdpbmFsX3RocmVhZF9pZCIsIndhcm5pbmdNZXNzYWdlIiwid2FybmluZ19tZXNzYWdlIiwibWFudWFsQXBwcm92YWxEZXRlY3RlZCIsIm1hbnVhbF9hcHByb3ZhbF9kZXRlY3RlZCIsImlzT3BlbiIsIm9uQ2xvc2UiLCJDaGF0QUlNZXNzYWdlc0lubmVyIiwiX3JlZjUiLCJ1c2VySW5pdGlhbE1lc3NhZ2UiLCJpbml0aWFsQ2hhdElkIiwib25FcnJvciIsIm9uU2VuZE1lc3NhZ2VSZWFkeSIsIm9uU2Nyb2xsVG9Cb3R0b20iLCJhZ2VudHMiLCJfdXNlVCIsInQiLCJfdXNlR2xvYmFsQ29udGV4dDIiLCJpc1dlYlNlYXJjaEFjdGl2ZSIsImlzRGVlcFNlYXJjaEFjdGl2ZSIsImV2ZW50IiwibWVzc2FnZXNSZWYiLCJjaGF0SW5pdGlhbGl6ZWRSZWYiLCJpc0xvYWRpbmdNb3JlUmVmIiwidXNlclNjcm9sbGluZ1JlZiIsInNjcm9sbFRocmVzaG9sZFJlZiIsImxhc3RTY3JvbGxUb3BSZWYiLCJzaG93U2Nyb2xsVG9Cb3R0b21SZWYiLCJzY3JvbGxSYWZSZWYiLCJ3YXNMb2FkaW5nTWVzc2FnZXNSZWYiLCJsYXN0U2Nyb2xsZWRTZXNzaW9uUmVmIiwicmVzZXJ2ZWRUdXJuSWRSZWYiLCJzcGFjZXJFbFJlZiIsInNwYWNlckhlaWdodFJlZiIsIl91c2VTdGF0ZTUiLCJfdXNlU3RhdGU2Iiwic2hvd1Njcm9sbFRvQm90dG9tIiwic2V0U2hvd1Njcm9sbFRvQm90dG9tIiwiX3VzZVN0YXRlNyIsIl91c2VTdGF0ZTgiLCJzZWxlY3RlZFN1Z2dlc3Rpb25NZXNzYWdlSWRzIiwic2V0U2VsZWN0ZWRTdWdnZXN0aW9uTWVzc2FnZUlkcyIsIl91c2VDaGF0TWFuYWdlciIsImNoYXRJZCIsInVuZGVmaW5lZCIsIm1lc3NhZ2VzIiwibG9hZGluZ01lc3NhZ2VzIiwiaXNMb2FkaW5nTW9yZU1lc3NhZ2VzIiwid2FpdGluZ1Jlc3BvbnNlIiwiaXNXcml0aW5nIiwibG9hZGluZ01lc3NhZ2UiLCJhY3RpdmVMb2FkaW5ncyIsInNlbmRNZXNzYWdlIiwiY2hhbmdlUHJvamVjdCIsImluaXRpYWxpemVDaGF0IiwiaGFuZGxlU2Nyb2xsIiwic3RvcEdlbmVyYXRpb24iLCJ0cmltIiwiaXNNYXJrZXRwbGFjZUdsb2JhbEFnZW50IiwiYWlDaGF0U3VnZ2VzdGVkQW5zd2VyIiwiYWdlbnRfdHlwZSIsIl9kZWZpbmVQcm9wZXJ0eSIsInRhcmdldE1lc3NhZ2UiLCJmaW5kIiwibXNnIiwiaXNSZXRyeVN1Z2dlc3Rpb24iLCJsYXN0VXNlck1lc3NhZ2UiLCJhdCIsInJldHJ5QXR0YWNobWVudHMiLCJlbnRpdHkiLCJ1cGRhdGVTY3JvbGxCb3R0b21WaXNpYmlsaXR5IiwiZWwiLCJjdXJyZW50Iiwic2Nyb2xsVG9wIiwic2Nyb2xsSGVpZ2h0IiwiY2xpZW50SGVpZ2h0IiwiZGlzdGFuY2VGcm9tQm90dG9tIiwic2hvdWxkU2hvdyIsInNjcm9sbFRvQm90dG9tUmFmIiwib3B0cyIsIl9vcHRzJHNraXBJZlVzZXJTY3JvbCIsInNraXBJZlVzZXJTY3JvbGxpbmciLCJfb3B0cyRkZWxheU1zIiwiZGVsYXlNcyIsInJ1biIsInJlcXVlc3RBbmltYXRpb25GcmFtZSIsInNldFNwYWNlckhlaWdodCIsIk1hdGgiLCJhYnMiLCJjbGVhclR1cm5TcGFjZSIsIm1lYXN1cmVUdXJuIiwic3BhY2VyRWwiLCJxdWVzdGlvbkVsIiwicXVlcnlTZWxlY3RvciIsImNvbnRhaW5lclRvcCIsImdldEJvdW5kaW5nQ2xpZW50UmVjdCIsInRvcCIsInF1ZXN0aW9uVG9wIiwiY29udGVudEJvdHRvbSIsInR1cm5IZWlnaHQiLCJyZXNlcnZlVHVyblNwYWNlIiwibWVhc3VyZWQiLCJyZXNlcnZlZCIsIm1heCIsIm1pbiIsInN5bmNUdXJuU3BhY2UiLCJoYW5kbGVDbGlja1Njcm9sbFRvQm90dG9tIiwic2Nyb2xsVG8iLCJiZWhhdmlvciIsImhhbmRsZUFwcHJvdmFsRGVjaXNpb25XaXRoU2Nyb2xsIiwiaGFuZGxlU2Nyb2xsVG9Cb3R0b20iLCJlIiwiY29udGFpbmVyIiwiY3VycmVudFRhcmdldCIsImNhbmNlbEFuaW1hdGlvbkZyYW1lIiwiaXNTY3JvbGxpbmdVcCIsImlzTmVhckJvdHRvbSIsInNlbmRNZXNzYWdlUmVmIiwic3RvcEdlbmVyYXRpb25SZWYiLCJvblNlbmRNZXNzYWdlUmVhZHlSZWYiLCJzZW5kTWVzc2FnZVByb3h5UmVmIiwiZmFxSWQiLCJhZ2VudFN1Z2dlc3Rpb25JZCIsIm1lbnRpb25zIiwiZnVhSWQiLCJzY0lkIiwic3RvcEdlbmVyYXRpb25Qcm94eVJlZiIsInJhZklkIiwibGFzdEhlaWdodCIsInRpY2siLCJjdXJyZW50SGVpZ2h0IiwibGFzdFJlc2VydmVkUXVlc3Rpb25SZWYiLCJfbWVzc2FnZXMkaW5kZXgiLCJsYXN0TWVzc2FnZUlkUmVmIiwibGFzdE1lc3NhZ2VzTGVuZ3RoUmVmIiwiX21lc3NhZ2VzJGlkIiwiX21lc3NhZ2VzIiwiX2xhc3RNZXNzYWdlJGlkIiwibGFzdE1lc3NhZ2UiLCJsYXN0SWQiLCJwcmV2SWQiLCJwcmV2TGVuIiwiaXNOZXdNZXNzYWdlIiwiaXNBdEJvdHRvbSIsImhhc0luaXRpYWxNZXNzYWdlIiwiaXNBcHByb3ZhbCIsImlzQW5zd2VyT3JRdWVzdGlvbiIsIl9tZXNzYWdlcyRpZDIiLCJfbWVzc2FnZXMyIiwianVzdEZpbmlzaGVkTG9hZGluZyIsImF0dGFjaG1lbnRzQ291bnQiLCJzdHJlYW1Mb2FkaW5nRGlzcGxheSIsImhhc0F0dGFjaG1lbnRzIiwiaXNTY3JvbGxPblBhcmVudCIsImV4cGFuZGVkUmVmIiwic2F2ZWRTY3JvbGxUb3AiLCJmaWxsIiwiaXNBc3Npc3RhbnRBdCIsImhhc01lc3NhZ2VMZXZlbEluZGljYXRvciIsIm1lc3NhZ2VzQ29udGVudCIsInRleHQiLCJfbWVzc2FnZSRhdHRhY2htZW50cyIsIl9tZXNzYWdlJHNvdXJjZXMiLCJfbWVzc2FnZSRwcm9qZWN0IiwiX21lc3NhZ2UkaWQiLCJpc0Fzc2lzdGFudE1lc3NhZ2UiLCJwcm9qZWN0IiwibWVzc2FnZUZlZWRiYWNrIiwid2FzSGVscGZ1bCIsIlRIVU1CU19VUCIsIlRIVU1CU19ET1dOIiwibWVzc2FnZUtleSIsImtleSIsInJlZiIsIiRzY3JvbGxPblBhcmVudCIsIm9uU2Nyb2xsIiwiJGlzTWFya2V0cGxhY2VHbG9iYWwiLCJjb2xvciIsIkNoYXRBSU1lc3NhZ2VzIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvbW9sZWN1bGVzL0NoYXRBSU1lc3NhZ2VzL0NoYXRBSU1lc3NhZ2VzLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBpbXBvcnQvbm8tZXh0cmFuZW91cy1kZXBlbmRlbmNpZXMgKi9cbi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9pbmRlbnQgKi9cbi8qIGVzbGludC1kaXNhYmxlIHJlYWN0L25vLXVuc3RhYmxlLW5lc3RlZC1jb21wb25lbnRzICovXG4vKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tc2hhZG93ICovXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1uZXN0ZWQtdGVybmFyeSAqL1xuLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSAqL1xuLyogZXNsaW50LWRpc2FibGUgbm8tdW5kZWYgKi9cbi8qIGVzbGludC1kaXNhYmxlIHJlYWN0L2Z1bmN0aW9uLWNvbXBvbmVudC1kZWZpbml0aW9uICovXG4vKiBlc2xpbnQtZGlzYWJsZSByZWFjdC9yZXF1aXJlLWRlZmF1bHQtcHJvcHMgKi9cbi8qIGVzbGludC1kaXNhYmxlIGpzeC1hMTF5L2NsaWNrLWV2ZW50cy1oYXZlLWtleS1ldmVudHMgKi9cbi8qIGVzbGludC1kaXNhYmxlIGpzeC1hMTF5L25vLXN0YXRpYy1lbGVtZW50LWludGVyYWN0aW9ucyAqL1xuaW1wb3J0IFJlYWN0LCB7IEZDLCBtZW1vLCBSZWFjdE5vZGUsIHVzZUNhbGxiYWNrLCB1c2VFZmZlY3QsIHVzZUxheW91dEVmZmVjdCwgdXNlUmVmLCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgQXJyb3dTbWFsbERvd24gfSBmcm9tICdAcHJvamVjdGNvci9pY29ucy9saWIvY29tcG9uZW50cy9BcnJvd1NtYWxsRG93bidcbmltcG9ydCB7IE1BSUFJY29uIH0gZnJvbSAnLi4vLi4vYXRvbXMvaWNvbnMvTUFJQUljb24nXG5cbmltcG9ydCB7IEF0dGFjaG1lbnRDYXJkIH0gZnJvbSAnLi4vLi4vYXRvbXMvQXR0YWNobWVudENhcmQvQXR0YWNobWVudENhcmQnXG5pbXBvcnQgeyBBcHByb3ZhbEJveCB9IGZyb20gJy4uLy4uL2F0b21zL0FwcHJvdmFsQm94L0FwcHJvdmFsQm94J1xuaW1wb3J0IHsgQXR0YWNobWVudFByZXZpZXdNb2RhbCB9IGZyb20gJy4uLy4uL2F0b21zL0F0dGFjaG1lbnRQcmV2aWV3TW9kYWwnXG5pbXBvcnQgeyBBdHRhY2htZW50Q2FyZEF1ZGlvIH0gZnJvbSAnLi4vLi4vYXRvbXMvQXR0YWNobWVudENhcmQvQXR0YWNobWVudENhcmRBdWRpbydcbmltcG9ydCB7IE1haWFTdHJlYW1kb3duIH0gZnJvbSAnLi4vLi4vYXRvbXMvTWFpYVN0cmVhbWRvd24nXG5pbXBvcnQgdHlwZSB7IE1haWFTdHJlYW1kb3duUHJvcHMgfSBmcm9tICcuLi8uLi9hdG9tcy9NYWlhU3RyZWFtZG93bidcbmltcG9ydCB7IE1BSUFNZXNzYWdlUHJvcHMgfSBmcm9tICcuLi8uLi9hdG9tcy9NQUlBTWVzc2FnZS9NQUlBTWVzc2FnZS5pbnRlcmZhY2VzJ1xuaW1wb3J0IHsgQ2hhdE1lc3NhZ2UsIENoYXRIaXN0b3J5Um9sZSB9IGZyb20gJy4uLy4uLy4uL3R5cGVzL0NoYXQnXG5pbXBvcnQgeyByZW5kZXJUZXh0V2l0aE1lbnRpb25zLCBoYXNJbmxpbmVNYXJrZXJzIH0gZnJvbSAnLi4vLi4vLi4vdXRpbHMvcmVuZGVyQ29udGV4dE1lbnRpb25zJ1xuXG5pbXBvcnQgeyBnZXRBZ2VudERpc3BsYXlOYW1lLCBpc01haWFrZXJBZ2VudCB9IGZyb20gJy4uLy4uLy4uL3V0aWxzL2FnZW50RGlzcGxheU5hbWUnXG5pbXBvcnQgeyBDT1JVc2VyLCB1c2VVc2VyIH0gZnJvbSAnLi4vLi4vLi4vY29udGV4dC9jb3ItdXNlcidcblxuaW1wb3J0IHsgdXNlVCB9IGZyb20gJy4uLy4uLy4uL2hvb2tzL3VzZVQnXG5pbXBvcnQgeyB1c2VDaGF0TWFuYWdlciB9IGZyb20gJy4uLy4uLy4uL2hvb2tzL3VzZUNoYXRNYW5hZ2VyL3VzZUNoYXRNYW5hZ2VyJ1xuaW1wb3J0IHsgdXNlU21vb3RoU3RyZWFtVGV4dCB9IGZyb20gJy4uLy4uLy4uL2hvb2tzL3VzZVNtb290aFN0cmVhbVRleHQnXG5pbXBvcnQgeyB1c2VTdHJlYW1pbmdNZXNzYWdlIH0gZnJvbSAnLi4vLi4vLi4vaG9va3MvdXNlU3RyZWFtaW5nTWVzc2FnZSdcblxuaW1wb3J0IHsgTG9hZGluZ1RleHQgfSBmcm9tICcuLi8uLi9hdG9tcy9Mb2FkaW5nVGV4dCdcbmltcG9ydCB7IEFnZW50QWN0aXZpdHlJbmRpY2F0b3IgfSBmcm9tICcuLi8uLi9hdG9tcy9BZ2VudEFjdGl2aXR5SW5kaWNhdG9yJ1xuaW1wb3J0IHsgUmVhc29uaW5nQmxvY2sgfSBmcm9tICcuLi8uLi9hdG9tcy9SZWFzb25pbmdCbG9jaydcbmltcG9ydCB0eXBlIHsgU3RyZWFtQWN0aXZpdHkgfSBmcm9tICcuLi8uLi8uLi90eXBlcy9zdHJlYW1BY3Rpdml0eSdcbmltcG9ydCB7IGlzU3RyZWFtaW5nUGxhY2Vob2xkZXJNZXNzYWdlSWQsIHJlc29sdmVTdHJlYW1Mb2FkaW5nRGlzcGxheSB9IGZyb20gJy4uLy4uLy4uL3V0aWxzL3N0cmVhbUFjdGl2aXR5TWVzc2FnZXMnXG5pbXBvcnQgeyBMb2FkZXIgfSBmcm9tICcuLi8uLi9hdG9tcy9Mb2FkZXInXG5pbXBvcnQgeyBGYWRlIH0gZnJvbSAnLi4vLi4vYXRvbXMvRmFkZSdcblxuaW1wb3J0IHsgUHJvamVjdCB9IGZyb20gJy4uLy4uLy4uL3R5cGVzL1Byb2plY3QnXG5cbmltcG9ydCB7IE1lc3NhZ2VGcm9tVXNlciwgTWVzc2FnZUZyb21PdGhlciwgTWVzc2FnZUNvbnRlbnRGcm9tVXNlciwgTWVzc2FnZUNvbnRlbnRGcm9tT3RoZXIgfSBmcm9tICcuL3N0eWxlcydcbmltcG9ydCB7IE1lc3NhZ2VGZWVkYmFjayB9IGZyb20gJy4uL01lc3NhZ2VGZWVkYmFjaydcbmltcG9ydCB7XG4gIFNDQ0FJTWVzc2FnZVdyYXBwZXIsXG4gIFNjcm9sbFRvQm90dG9tQnV0dG9uLFxuICBTQ01lc3NhZ2VzT3V0ZXIsXG4gIFNDTWVzc2FnZXNTY3JvbGwsXG4gIFNDTWVzc2FnZXNJbm5lcixcbiAgU0NUdXJuU3BhY2VyLFxuICBTQ09wdGlvbnNMaXN0LFxuICBTQ09wdGlvbkl0ZW0sXG4gIFNDTWVzc2FnZUl0ZW1XcmFwcGVyLFxuICBTQ01lc3NhZ2VJdGVtSW5uZXIsXG4gIFNDQXR0YWNobWVudHNSb3csXG4gIFNDQXBwcm92YWxBY3Rpb25zQ29sdW1uLFxuICBTQ0FnZW50TWVzc2FnZUhlYWRlcixcbiAgU0NMb2FkaW5nTWVzc2FnZXNDb2x1bW4sXG59IGZyb20gJy4vbmV3U3R5bGVzJ1xuaW1wb3J0IHsgRmVlZGJhY2sgfSBmcm9tICcuLi9NZXNzYWdlRmVlZGJhY2svTWVzc2FnZUZlZWRiYWNrJ1xuaW1wb3J0IHsgdXNlR2xvYmFsQ29udGV4dCB9IGZyb20gJy4uLy4uLy4uL2NvbnRleHQvZ2xvYmFsLWNvbnRleHQnXG5pbXBvcnQgeyBBZ2VudCB9IGZyb20gJy4uLy4uLy4uL3R5cGVzL2FnZW50J1xuaW1wb3J0IHsgQXR0YWNobWVudEZpbGUgfSBmcm9tICcuLi9DaGF0Rm9vdGVyL0NoYXRGb290ZXInXG5pbXBvcnQgeyBDb250ZXh0TWVudGlvbiB9IGZyb20gJy4uLy4uLy4uL3R5cGVzL2NvbnRleHRNZW50aW9uJ1xuaW1wb3J0IHsgRW50aXR5TGlua0N1c3RvbUxpbmssIGdldEVudGl0eUxpbmtXcmFwcGVyQ2xhc3NOYW1lIH0gZnJvbSAnLi4vLi4vLi4vdXRpbHMvZW50aXR5TGlua1JlbmRlcidcbmltcG9ydCB7IENoYXRBSVN1Z2dlc3Rpb25zIH0gZnJvbSAnLi9DaGF0QUlTdWdnZXN0aW9ucydcbmltcG9ydCB7IENoYXRBSUNyZWF0ZUFnZW50QWN0aW9ucyB9IGZyb20gJy4vQ2hhdEFJQ3JlYXRlQWdlbnRBY3Rpb25zJ1xuaW1wb3J0IHsgRVZFTlRTLCB1c2VFdmVudCB9IGZyb20gJy4uLy4uLy4uL2hvb2tzL3VzZUV2ZW50J1xuaW1wb3J0IHsgZG93bmxvYWRGaWxlRnJvbVVybCB9IGZyb20gJy4uLy4uLy4uL3V0aWxzL2ZpbGVEb3dubG9hZEhlbHBlcidcblxudHlwZSBDaGF0QUlNZXNzYWdlc1Byb3BzID0ge1xuICB1c2VySW5pdGlhbE1lc3NhZ2U6IHtcbiAgICBtZXNzYWdlOiBzdHJpbmdcbiAgICBhdHRhY2htZW50czogQXR0YWNobWVudEZpbGVbXVxuICAgIGZhcUlkPzogc3RyaW5nXG4gICAgYWdlbnRTdWdnZXN0aW9uSWQ/OiBzdHJpbmdcbiAgICBtZW50aW9ucz86IENvbnRleHRNZW50aW9uW11cbiAgICBmdWFJZD86IHN0cmluZ1xuICAgIHNjSWQ/OiBzdHJpbmdcbiAgfVxuICBpbml0aWFsQ2hhdElkOiBzdHJpbmcgfCBudWxsXG4gIG9uRXJyb3I6ICgpID0+IHZvaWRcbiAgb25TZW5kTWVzc2FnZVJlYWR5PzogKFxuICAgIHNlbmRNZXNzYWdlOiAoXG4gICAgICBtZXNzYWdlOiBzdHJpbmcsXG4gICAgICBhdHRhY2htZW50cz86IEF0dGFjaG1lbnRGaWxlW10sXG4gICAgICBmYXFJZD86IHN0cmluZyxcbiAgICAgIGFnZW50U3VnZ2VzdGlvbklkPzogc3RyaW5nLFxuICAgICAgbWVudGlvbnM/OiBDb250ZXh0TWVudGlvbltdLFxuICAgICAgZnVhSWQ/OiBzdHJpbmcsXG4gICAgICBzY0lkPzogc3RyaW5nXG4gICAgKSA9PiB2b2lkLFxuICAgIHN0b3BHZW5lcmF0aW9uOiAoKSA9PiB2b2lkLFxuICAgIGlzU3RyZWFtaW5nOiBib29sZWFuLFxuICAgIGlzV3JpdGluZzogYm9vbGVhblxuICApID0+IHZvaWRcbiAgaXNEaXNhYmxlZD86IGJvb2xlYW5cbiAgb25TY3JvbGxUb0JvdHRvbT86ICgpID0+IHZvaWRcbiAgYXR0YWNobWVudHM/OiBBdHRhY2htZW50RmlsZVtdXG4gIGFnZW50cz86IEFnZW50W11cbiAgZXhwYW5kZWQ/OiBib29sZWFuXG59XG5cbnR5cGUgTWVzc2FnZUl0ZW1Qcm9wcyA9IENoYXRNZXNzYWdlICYge1xuICBhdXRoVXNlcjogQ09SVXNlclxuICBoYW5kbGVTZWxlY3RPcHRpb246IChvcHRpb246IFByb2plY3QpID0+IHZvaWRcbiAgaGFuZGxlU3VnZ2VzdGlvbkNsaWNrOiAobWVzc2FnZUlkOiBzdHJpbmcsIHN1Z2dlc3Rpb246IHN0cmluZykgPT4gdm9pZFxuICBoYXNTZWxlY3RlZFN1Z2dlc3Rpb24/OiBib29sZWFuXG4gIGhhbmRsZUZlZWRiYWNrOiAoZmVlZGJhY2s6IEZlZWRiYWNrLCBjaGF0TWVzc2FnZUlkOiBzdHJpbmcpID0+IHZvaWRcbiAgaGFuZGxlQXBwcm92YWxEZWNpc2lvbjogKHRocmVhZElkczogc3RyaW5nW10sIGRlY2lzaW9uOiAnYXBwcm92ZScgfCAncmVqZWN0JykgPT4gdm9pZFxuICBkaXNhYmxlRmVlZGJhY2s/OiBGZWVkYmFjayB8IG51bGxcbiAgc291cmNlcz86IGFueVxuICBhdHRhY2htZW50cz86IEF0dGFjaG1lbnRGaWxlW11cbiAgaXNTdHJlYW1pbmc/OiBib29sZWFuXG4gIGlzTGFzdE1lc3NhZ2U/OiBib29sZWFuXG4gIHNob3dBZ2VudEhlYWRlcj86IGJvb2xlYW5cbiAgZXhwYW5kZWQ/OiBib29sZWFuXG4gIHN0cmVhbUFjdGl2aXR5PzogU3RyZWFtQWN0aXZpdHkgfCBudWxsXG59XG5cbmludGVyZmFjZSBNZXNzYWdlV3JhcHBlclByb3BzIHtcbiAgaXNDdXJyZW50VXNlcjogYm9vbGVhblxuICBjaGlsZHJlbjogUmVhY3ROb2RlXG4gICdkYXRhLW1lc3NhZ2UtaWQnPzogc3RyaW5nXG4gIGhhc0ZlZWRiYWNrPzogYm9vbGVhblxufVxuXG50eXBlIE1lc3NhZ2VDb250ZW50V3JhcHBlclByb3BzID0gTUFJQU1lc3NhZ2VQcm9wcyAmIHtcbiAgaXNDdXJyZW50VXNlcjogYm9vbGVhblxuICBpc0Vycm9yPzogYm9vbGVhblxuICBpc0NoYW5nZVByb2plY3Q/OiBib29sZWFuXG59XG5cbmNvbnN0IE1lc3NhZ2VXcmFwcGVyOiBGQzxNZXNzYWdlV3JhcHBlclByb3BzPiA9ICh7IGlzQ3VycmVudFVzZXIsIGNoaWxkcmVuLCAuLi5wcm9wcyB9KSA9PiB7XG4gIGNvbnN0IE1lc3NhZ2VDb21wb25lbnQgPSBpc0N1cnJlbnRVc2VyID8gTWVzc2FnZUZyb21Vc2VyIDogTWVzc2FnZUZyb21PdGhlclxuICByZXR1cm4gPE1lc3NhZ2VDb21wb25lbnQgey4uLnByb3BzfT57Y2hpbGRyZW59PC9NZXNzYWdlQ29tcG9uZW50PlxufVxuXG5jb25zdCBNZXNzYWdlQ29udGVudFdyYXBwZXI6IEZDPE1lc3NhZ2VDb250ZW50V3JhcHBlclByb3BzPiA9ICh7IGlzQ3VycmVudFVzZXIsIC4uLnByb3BzIH0pID0+IHtcbiAgY29uc3QgTWVzc2FnZUNvbnRlbnRDb21wb25lbnQgPSBpc0N1cnJlbnRVc2VyID8gTWVzc2FnZUNvbnRlbnRGcm9tVXNlciA6IE1lc3NhZ2VDb250ZW50RnJvbU90aGVyXG4gIHJldHVybiA8TWVzc2FnZUNvbnRlbnRDb21wb25lbnQgey4uLnByb3BzfSAvPlxufVxuXG5mdW5jdGlvbiBNZXNzYWdlT3B0aW9ucyh7XG4gIG9wdGlvbnMsXG4gIGhhbmRsZVNlbGVjdE9wdGlvbixcbn06IHtcbiAgb3B0aW9uczogUHJvamVjdFtdIHwgbnVsbFxuICBoYW5kbGVTZWxlY3RPcHRpb246IChvcHRpb246IFByb2plY3QpID0+IHZvaWRcbn0pIHtcbiAgY29uc3QgW3NlbGVjdGVkT3B0aW9uLCBzZXRTZWxlY3RlZE9wdGlvbl0gPSB1c2VTdGF0ZTxQcm9qZWN0IHwgbnVsbD4obnVsbClcblxuICBjb25zdCBoYW5kbGVTZWxlY3QgPSAob3B0aW9uOiBQcm9qZWN0KSA9PiB7XG4gICAgaWYgKHNlbGVjdGVkT3B0aW9uKSByZXR1cm5cbiAgICBzZXRTZWxlY3RlZE9wdGlvbihvcHRpb24pXG4gICAgaGFuZGxlU2VsZWN0T3B0aW9uKG9wdGlvbilcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPFNDT3B0aW9uc0xpc3Q+XG4gICAgICB7KG9wdGlvbnMgfHwgW10pLm1hcChvcHRpb24gPT4gKFxuICAgICAgICA8U0NPcHRpb25JdGVtXG4gICAgICAgICAgJGhhc1NlbGVjdGlvbj17ISFzZWxlY3RlZE9wdGlvbn1cbiAgICAgICAgICAkZGltbWVkPXshIXNlbGVjdGVkT3B0aW9uICYmIHNlbGVjdGVkT3B0aW9uPy5pZCAhPT0gb3B0aW9uLmlkfVxuICAgICAgICAgIG9uQ2xpY2s9eygpID0+IGhhbmRsZVNlbGVjdChvcHRpb24pfVxuICAgICAgICAgIGtleT17b3B0aW9uLmlkfVxuICAgICAgICA+XG4gICAgICAgICAge29wdGlvbi5uYW1lfVxuICAgICAgICA8L1NDT3B0aW9uSXRlbT5cbiAgICAgICkpfVxuICAgIDwvU0NPcHRpb25zTGlzdD5cbiAgKVxufVxuXG4vKiogU29sbyBlc3RlIGNvbXBvbmVudGUgcmUtcmVuZGVyaXphIGN1YW5kbyBjYW1iaWEgZWwgdGV4dG8gZW4gc3RyZWFtaW5nIChsZWUgZGVsIGNvbnRleHQpLiAqL1xuY29uc3QgU3RyZWFtaW5nTWVzc2FnZUJvZHkgPSBtZW1vKFxuICAocHJvcHM6IHtcbiAgICBtZXNzYWdlOiBzdHJpbmdcbiAgICBpc1N0cmVhbWluZzogYm9vbGVhblxuICAgIGlzQ3VycmVudFVzZXI6IGJvb2xlYW5cbiAgICBpc0Fzc2lzdGFudDogYm9vbGVhblxuICAgIGlzRnJvbnRlbmRDYW5jZWxsZWQ/OiBib29sZWFuXG4gICAgYXBwcm92YWw/OiBNZXNzYWdlSXRlbVByb3BzWydhcHByb3ZhbCddXG4gICAgaXNFcnJvcj86IGJvb2xlYW5cbiAgICBzb3VyY2VzPzogTWVzc2FnZUl0ZW1Qcm9wc1snc291cmNlcyddXG4gICAgc3VnZ2VzdGlvbnM/OiBzdHJpbmdbXSB8IG51bGxcbiAgICBjcmVhdGVBZ2VudEZvbGxvd1VwPzogeyBhZ2VudElkOiBzdHJpbmcgfSB8IG51bGxcbiAgICBoYW5kbGVGZWVkYmFja0NsaWNrOiAoZjogRmVlZGJhY2spID0+IHZvaWRcbiAgICBkaXNhYmxlRmVlZGJhY2s6IEZlZWRiYWNrIHwgbnVsbFxuICAgIGhhbmRsZVN1Z2dlc3Rpb25DbGljazogKG1lc3NhZ2VJZDogc3RyaW5nLCBzdWdnZXN0aW9uOiBzdHJpbmcpID0+IHZvaWRcbiAgICBzdWdnZXN0aW9uc0Rpc2FibGVkPzogYm9vbGVhblxuICAgIG1lc3NhZ2VJZDogc3RyaW5nXG4gICAgaXNMYXN0TWVzc2FnZT86IGJvb2xlYW5cbiAgfSkgPT4ge1xuICAgIC8vIFRleHRvIGRlbCBzdHJlYW06IHNvbG8gc2UgbGVlIGRlbCBzdG9yZSBjdWFuZG8gZXN0ZSBtZW5zYWplIGVzIGVsXG4gICAgLy8gcXVlIGVzdMOhIGVuIHN0cmVhbWluZy4gdXNlU3luY0V4dGVybmFsU3RvcmUgYcOtc2xhIGVsIHJlLXJlbmRlciBhXG4gICAgLy8gZXN0ZSBjb21wb25lbnRlLCBzaW4gdG9jYXIgZWwgcmVzdG8gZGVsIMOhcmJvbC5cbiAgICBjb25zdCBzdHJlYW1pbmdUZXh0ID0gdXNlU3RyZWFtaW5nTWVzc2FnZShwcm9wcy5pc1N0cmVhbWluZyA/IHByb3BzLm1lc3NhZ2VJZCA6IG51bGwpXG4gICAgY29uc3QgcmF3VGV4dCA9IHByb3BzLmlzU3RyZWFtaW5nID8gc3RyZWFtaW5nVGV4dCA6IHByb3BzLm1lc3NhZ2VcbiAgICAvLyBTbW9vdGggc3RyZWFtaW5nOiBkZXNhY29wbGEgbGEgY2FkZW5jaWEgZGVsIGJhY2tlbmQgZGVsIHJlbmRlci5cbiAgICAvLyBEdXJhbnRlIGVsIHN0cmVhbWluZyBsaWJlcmEgY2hhcnMgYSByaXRtbyBjb25zdGFudGUgdsOtYSByQUY7IGN1YW5kb1xuICAgIC8vIHRlcm1pbmEsIG11ZXN0cmEgZWwgdGV4dG8gZmluYWwgYWwgaW5zdGFudGUgKHNpbiBhbmltYWNpw7NuIHJlc2lkdWFsKS5cbiAgICAvLyBMb3MgZGVmYXVsdHMgZGVsIGhvb2sgc2UgYWp1c3Rhcm9uIGVtcMOtcmljYW1lbnRlIGVuIHN0YWdpbmc7IGF1biBhc8OtXG4gICAgLy8gc2UgZXhwb25lbiBmbGFncyBkZSBydW50aW1lICh3aW5kb3cuKikgcGFyYSBwb2RlciB0dW5lYXIgc2luIHJlY29tcGlsYXJcbiAgICAvLyBzaSBhbGfDum4gYmFja2VuZCBwcmVzZW50YSB1bmEgY2FkZW5jaWEgbXV5IGRpc3RpbnRhIGVuIHByb2R1Y2Npw7NuLlxuICAgIC8vICAgd2luZG93LnN0cmVhbUFkYXB0ID0gZmFsc2UgICAgICAvLyBkZXNhY3RpdmEgYWRhcHRhY2nDs24gYWwgYmFja2VuZFxuICAgIC8vICAgd2luZG93LnN0cmVhbUJ1ZmZlck1zID0gNjAwICAgICAvLyBjb2xjaMOzbiBvYmpldGl2byAobXMpXG4gICAgLy8gICB3aW5kb3cuc3RyZWFtTGFnTXMgPSA0NTAgICAgICAgIC8vIGxhZyBtw6F4aW1vIGJhc2UgKG1zKVxuICAgIC8vICAgd2luZG93LnN0cmVhbU1pbkJ1ZmZlciA9IDcwICAgICAvLyBwaXNvIGRlbCBjb2xjaMOzbiBlbiBjaGFyc1xuICAgIC8vICAgd2luZG93LnN0cmVhbVdhcm11cE1zID0gNDAwICAgICAvLyB3YXJtdXAgaW5pY2lhbCAobXMpXG4gICAgY29uc3Qgd2luRmxhZ3MgPVxuICAgICAgdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAgPyAod2luZG93IGFzIHVua25vd24gYXMge1xuICAgICAgICAgICAgc3RyZWFtQWRhcHQ/OiBib29sZWFuXG4gICAgICAgICAgICBzdHJlYW1CdWZmZXJNcz86IG51bWJlclxuICAgICAgICAgICAgc3RyZWFtTGFnTXM/OiBudW1iZXJcbiAgICAgICAgICAgIHN0cmVhbU1pbkJ1ZmZlcj86IG51bWJlclxuICAgICAgICAgICAgc3RyZWFtV2FybXVwTXM/OiBudW1iZXJcbiAgICAgICAgICB9KVxuICAgICAgICA6IHt9XG4gICAgY29uc3QgZGlzcGxheVRleHQgPSB1c2VTbW9vdGhTdHJlYW1UZXh0KHJhd1RleHQsIHtcbiAgICAgIGVuYWJsZWQ6ICEhcHJvcHMuaXNTdHJlYW1pbmcsXG4gICAgICBtYXhDaGFyc1BlckZyYW1lOiAyNCxcbiAgICAgIHNuYXBUb1dvcmRCb3VuZGFyeTogdHJ1ZSxcbiAgICAgIC4uLih3aW5GbGFncy5zdHJlYW1MYWdNcyAhPSBudWxsICYmIHsgdGFyZ2V0TGFnTXM6IHdpbkZsYWdzLnN0cmVhbUxhZ01zIH0pLFxuICAgICAgLi4uKHdpbkZsYWdzLnN0cmVhbUFkYXB0ICE9IG51bGwgJiYgeyBhZGFwdFRvQmFja2VuZFJhdGU6IHdpbkZsYWdzLnN0cmVhbUFkYXB0IH0pLFxuICAgICAgLi4uKHdpbkZsYWdzLnN0cmVhbUJ1ZmZlck1zICE9IG51bGwgJiYgeyB0YXJnZXRCdWZmZXJNczogd2luRmxhZ3Muc3RyZWFtQnVmZmVyTXMgfSksXG4gICAgICAuLi4od2luRmxhZ3Muc3RyZWFtTWluQnVmZmVyICE9IG51bGwgJiYgeyBtaW5CdWZmZXJDaGFyczogd2luRmxhZ3Muc3RyZWFtTWluQnVmZmVyIH0pLFxuICAgICAgLi4uKHdpbkZsYWdzLnN0cmVhbVdhcm11cE1zICE9IG51bGwgJiYgeyB3YXJtdXBNczogd2luRmxhZ3Muc3RyZWFtV2FybXVwTXMgfSksXG4gICAgfSlcbiAgICBjb25zdCBjcmVhdGVBZ2VudEFjdGlvbnNBZ2VudElkID0gcHJvcHMuY3JlYXRlQWdlbnRGb2xsb3dVcD8uYWdlbnRJZFxuXG4gICAgaWYgKCFkaXNwbGF5VGV4dCAmJiAhcHJvcHMuaXNTdHJlYW1pbmcpIHJldHVybiBudWxsXG4gICAgY29uc3QgaGFzTWVudGlvbnMgPSBoYXNJbmxpbmVNYXJrZXJzKGRpc3BsYXlUZXh0KVxuICAgIGNvbnN0IG1lbnRpb25Ob2RlcyA9IGhhc01lbnRpb25zID8gcmVuZGVyVGV4dFdpdGhNZW50aW9ucyhkaXNwbGF5VGV4dCkgOiBudWxsXG4gICAgcmV0dXJuIChcbiAgICAgIDw+XG4gICAgICAgIDxTQ0NBSU1lc3NhZ2VXcmFwcGVyXG4gICAgICAgICAgaXNDdXJyZW50VXNlcj17cHJvcHMuaXNDdXJyZW50VXNlcn1cbiAgICAgICAgICBpc0Zyb250ZW5kQ2FuY2VsbGVkPXtwcm9wcy5pc0Zyb250ZW5kQ2FuY2VsbGVkfVxuICAgICAgICAgIGNsYXNzTmFtZT17Z2V0RW50aXR5TGlua1dyYXBwZXJDbGFzc05hbWUoZGlzcGxheVRleHQpfVxuICAgICAgICA+XG4gICAgICAgICAge2hhc01lbnRpb25zICYmIG1lbnRpb25Ob2RlcyA/IChcbiAgICAgICAgICAgIC8vIFNpIGhheSBtZW50aW9ucywgcmVuZGVyaXphciBkaXJlY3RhbWVudGUgKHNpbiBtYXJrZG93biBlbiBlbCBtaXNtbyBww6FycmFmbylcbiAgICAgICAgICAgIDxzcGFuIHN0eWxlPXt7IGRpc3BsYXk6ICdpbmxpbmUnIH19PnttZW50aW9uTm9kZXN9PC9zcGFuPlxuICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAvLyBTaW4gbWVudGlvbnMsIHBhc2FyIGEgU3RyZWFtZG93biBwYXJhIG1hcmtkb3duIHN1cHBvcnRcbiAgICAgICAgICAgIDxNYWlhU3RyZWFtZG93blxuICAgICAgICAgICAgICB2YXJpYW50PVwiY2hhdFwiXG4gICAgICAgICAgICAgIGlzQ3VycmVudFVzZXI9e3Byb3BzLmlzQ3VycmVudFVzZXJ9XG4gICAgICAgICAgICAgIGlzRnJvbnRlbmRDYW5jZWxsZWQ9e3Byb3BzLmlzRnJvbnRlbmRDYW5jZWxsZWR9XG4gICAgICAgICAgICAgIGNvbXBvbmVudHM9e3sgYTogRW50aXR5TGlua0N1c3RvbUxpbmsgfSBhcyBNYWlhU3RyZWFtZG93blByb3BzWydjb21wb25lbnRzJ119XG4gICAgICAgICAgICAgIGlzQW5pbWF0aW5nPXshIXByb3BzLmlzU3RyZWFtaW5nfVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7ZGlzcGxheVRleHR9XG4gICAgICAgICAgICA8L01haWFTdHJlYW1kb3duPlxuICAgICAgICAgICl9XG4gICAgICAgIDwvU0NDQUlNZXNzYWdlV3JhcHBlcj5cbiAgICAgICAge3Byb3BzLmlzQXNzaXN0YW50ICYmICFwcm9wcy5pc0Vycm9yICYmICFwcm9wcy5pc0Zyb250ZW5kQ2FuY2VsbGVkICYmICFwcm9wcy5hcHByb3ZhbCAmJiAhcHJvcHMuaXNTdHJlYW1pbmcgJiYgKFxuICAgICAgICAgIDxNZXNzYWdlRmVlZGJhY2tcbiAgICAgICAgICAgIGNvbnRlbnQ9e2Rpc3BsYXlUZXh0fVxuICAgICAgICAgICAgc291cmNlcz17cHJvcHMuc291cmNlc31cbiAgICAgICAgICAgIGhhbmRsZUZlZWRiYWNrPXtwcm9wcy5oYW5kbGVGZWVkYmFja0NsaWNrfVxuICAgICAgICAgICAgZGlzYWJsZUZlZWRiYWNrPXtwcm9wcy5kaXNhYmxlRmVlZGJhY2t9XG4gICAgICAgICAgLz5cbiAgICAgICAgKX1cbiAgICAgICAge3Byb3BzLmlzQXNzaXN0YW50ICYmXG4gICAgICAgICAgIXByb3BzLmlzRnJvbnRlbmRDYW5jZWxsZWQgJiZcbiAgICAgICAgICAhcHJvcHMuYXBwcm92YWwgJiZcbiAgICAgICAgICAoIXByb3BzLmlzRXJyb3IgfHwgcHJvcHMuc3VnZ2VzdGlvbnM/Lmxlbmd0aCkgJiYgKFxuICAgICAgICAgICAgPENoYXRBSVN1Z2dlc3Rpb25zXG4gICAgICAgICAgICAgIHN1Z2dlc3Rpb25zPXtwcm9wcy5zdWdnZXN0aW9ucyB8fCBbXX1cbiAgICAgICAgICAgICAgb25TZWxlY3RTdWdnZXN0aW9uPXtzdWdnZXN0aW9uID0+IHByb3BzLmhhbmRsZVN1Z2dlc3Rpb25DbGljayhwcm9wcy5tZXNzYWdlSWQsIHN1Z2dlc3Rpb24pfVxuICAgICAgICAgICAgICBkaXNhYmxlZD17cHJvcHMuc3VnZ2VzdGlvbnNEaXNhYmxlZH1cbiAgICAgICAgICAgICAgaGlkZGVuPXshIXByb3BzLmlzU3RyZWFtaW5nIHx8ICFwcm9wcy5pc0xhc3RNZXNzYWdlIHx8ICEhcHJvcHMuc3VnZ2VzdGlvbnNEaXNhYmxlZH1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgKX1cbiAgICAgICAge3Byb3BzLmlzQXNzaXN0YW50ICYmXG4gICAgICAgICAgIXByb3BzLmlzRXJyb3IgJiZcbiAgICAgICAgICAhcHJvcHMuaXNGcm9udGVuZENhbmNlbGxlZCAmJlxuICAgICAgICAgICFwcm9wcy5hcHByb3ZhbCAmJlxuICAgICAgICAgICEhY3JlYXRlQWdlbnRBY3Rpb25zQWdlbnRJZCAmJiAoXG4gICAgICAgICAgICA8Q2hhdEFJQ3JlYXRlQWdlbnRBY3Rpb25zXG4gICAgICAgICAgICAgIGFnZW50SWQ9e2NyZWF0ZUFnZW50QWN0aW9uc0FnZW50SWR9XG4gICAgICAgICAgICAgIGRpc2FibGVkPXtwcm9wcy5zdWdnZXN0aW9uc0Rpc2FibGVkfVxuICAgICAgICAgICAgICBoaWRkZW49eyEhcHJvcHMuaXNTdHJlYW1pbmcgfHwgIXByb3BzLmlzTGFzdE1lc3NhZ2UgfHwgISFwcm9wcy5zdWdnZXN0aW9uc0Rpc2FibGVkfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICApfVxuICAgICAgPC8+XG4gICAgKVxuICB9XG4pXG5cbmNvbnN0IEFnZW50TWVzc2FnZUhlYWRlciA9ICgpID0+IHtcbiAgY29uc3QgeyBhZ2VudCB9ID0gdXNlR2xvYmFsQ29udGV4dCgpXG4gIGNvbnN0IG5hbWUgPSBnZXRBZ2VudERpc3BsYXlOYW1lKGFnZW50Py50eXBlLCBhZ2VudD8ubmFtZSlcbiAgaWYgKCFuYW1lKSByZXR1cm4gbnVsbFxuXG4gIGNvbnN0IGlzTWFpYUJyYW5kZWQgPSBhZ2VudD8udHlwZSA9PT0gJ2Nsb25lJyB8fCBhZ2VudD8udHlwZSA9PT0gJ29yY2hlc3RyYXRvcidcbiAgcmV0dXJuIChcbiAgICA8U0NBZ2VudE1lc3NhZ2VIZWFkZXI+XG4gICAgICB7aXNNYWlhQnJhbmRlZCB8fCAhYWdlbnQ/LmVtb2ppID8gKFxuICAgICAgICA8TUFJQUljb24gd2lkdGg9ezE0fSBoZWlnaHQ9ezE0fSAvPlxuICAgICAgKSA6IChcbiAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwiQWdlbnRNZXNzYWdlSGVhZGVyLWVtb2ppXCIgYXJpYS1oaWRkZW4+XG4gICAgICAgICAge2FnZW50LmVtb2ppfVxuICAgICAgICA8L3NwYW4+XG4gICAgICApfVxuICAgICAgPHNwYW4+e25hbWV9PC9zcGFuPlxuICAgIDwvU0NBZ2VudE1lc3NhZ2VIZWFkZXI+XG4gIClcbn1cblxuY29uc3QgTWVzc2FnZUl0ZW0gPSBtZW1vKChwcm9wczogTWVzc2FnZUl0ZW1Qcm9wcykgPT4ge1xuICBjb25zdCB7XG4gICAgaWQsXG4gICAgdXNlcixcbiAgICBtZXNzYWdlLFxuICAgIGlzU3RyZWFtaW5nLFxuICAgIGlzRXJyb3IsXG4gICAgYXV0aFVzZXIsXG4gICAgb3B0aW9ucyxcbiAgICBpc0NoYW5nZVByb2plY3QsXG4gICAgaGFuZGxlU2VsZWN0T3B0aW9uLFxuICAgIGhhbmRsZVN1Z2dlc3Rpb25DbGljayxcbiAgICBoYW5kbGVGZWVkYmFjayxcbiAgICBoYW5kbGVBcHByb3ZhbERlY2lzaW9uLFxuICAgIGRpc2FibGVGZWVkYmFjayxcbiAgICByb2xlLFxuICAgIHNvdXJjZXMsXG4gICAgYXR0YWNobWVudHMsXG4gICAgYXBwcm92YWwsXG4gICAgYXBwcm92YWxTdGF0dXMsXG4gICAgc3VnZ2VzdGlvbnMsXG4gICAgY3JlYXRlQWdlbnRGb2xsb3dVcCxcbiAgICBoYXNTZWxlY3RlZFN1Z2dlc3Rpb24sXG4gICAgaXNMYXN0TWVzc2FnZSxcbiAgICBzdHJlYW1BY3Rpdml0eSxcbiAgfSA9IHByb3BzXG5cbiAgY29uc3QgW3ByZXZpZXdBdHRhY2htZW50LCBzZXRQcmV2aWV3QXR0YWNobWVudF0gPSB1c2VTdGF0ZTxBdHRhY2htZW50RmlsZSB8IG51bGw+KG51bGwpXG4gIGNvbnN0IGlzQ3VycmVudFVzZXIgPSByb2xlID09PSBDaGF0SGlzdG9yeVJvbGUuVVNFUiB8fCB1c2VyLmlkID09PSBhdXRoVXNlci5pZC50b1N0cmluZygpXG4gIGNvbnN0IGlzQXNzaXN0YW50ID0gcm9sZSA9PT0gQ2hhdEhpc3RvcnlSb2xlLkFTU0lTVEFOVCB8fCB1c2VyLmlkID09PSAnYXNzaXN0YW50J1xuICBjb25zdCBpc1N0cmVhbWluZ1BsYWNlaG9sZGVyID0gaXNTdHJlYW1pbmdQbGFjZWhvbGRlck1lc3NhZ2VJZChpZClcbiAgY29uc3Qgc3RyZWFtaW5nVGV4dCA9IHVzZVN0cmVhbWluZ01lc3NhZ2UoaXNTdHJlYW1pbmcgfHwgaXNTdHJlYW1pbmdQbGFjZWhvbGRlciA/IGlkIDogbnVsbClcbiAgY29uc3QgaXNBY3RpdmVTdHJlYW1pbmcgPSAhIWlzU3RyZWFtaW5nIHx8IGlzU3RyZWFtaW5nUGxhY2Vob2xkZXJcbiAgY29uc3QgaGFzU3RyZWFtVGV4dCA9IEJvb2xlYW4oc3RyZWFtaW5nVGV4dClcbiAgY29uc3QgbWVzc2FnZUF0dGFjaG1lbnRzID1cbiAgICBhdHRhY2htZW50cyAmJiBhdHRhY2htZW50cy5sZW5ndGggPiAwXG4gICAgICA/IGF0dGFjaG1lbnRzXG4gICAgICA6ICFpc0Fzc2lzdGFudCAmJiBBcnJheS5pc0FycmF5KHNvdXJjZXMpXG4gICAgICAgID8gKHNvdXJjZXMgYXMgQXR0YWNobWVudEZpbGVbXSlcbiAgICAgICAgOiBbXVxuXG4gIGNvbnN0IGhhbmRsZUF0dGFjaG1lbnRDbGljayA9IChhdHRhY2htZW50OiBBdHRhY2htZW50RmlsZSkgPT4ge1xuICAgIC8vIFBlcm1pdGlyIHByZXZpc3VhbGl6YWNpw7NuIHNpIHRpZW5lIGFyY2hpdm8gbG9jYWwgbyBVUkxzIGRlbCBiYWNrZW5kXG4gICAgaWYgKFxuICAgICAgYXR0YWNobWVudC5maWxlIGluc3RhbmNlb2YgRmlsZSB8fFxuICAgICAgYXR0YWNobWVudC5vcmlnaW5hbEZpbGUgaW5zdGFuY2VvZiBGaWxlIHx8XG4gICAgICBhdHRhY2htZW50LnVybF90aHVtYm5haWwgfHxcbiAgICAgIGF0dGFjaG1lbnQudXJsX29yaWdpbmFsIHx8XG4gICAgICBhdHRhY2htZW50LnVybF9maWxlXG4gICAgKSB7XG4gICAgICBzZXRQcmV2aWV3QXR0YWNobWVudChhdHRhY2htZW50KVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGhhbmRsZUNsb3NlUHJldmlldyA9ICgpID0+IHtcbiAgICBzZXRQcmV2aWV3QXR0YWNobWVudChudWxsKVxuICB9XG5cbiAgY29uc3QgaGFuZGxlQXR0YWNobWVudERvd25sb2FkID0gYXN5bmMgKGF0dGFjaG1lbnQ6IEF0dGFjaG1lbnRGaWxlKSA9PiB7XG4gICAgY29uc3QgZXh0ZW5zaW9uID0gYXR0YWNobWVudC5uYW1lLmluY2x1ZGVzKCcuJykgPyAnJyA6IGAuJHthdHRhY2htZW50LnR5cGV9YFxuICAgIGNvbnN0IGZpbGVOYW1lID0gYCR7YXR0YWNobWVudC5uYW1lfSR7ZXh0ZW5zaW9ufWBcbiAgICBjb25zdCBmaWxlVXJsID0gYXR0YWNobWVudC51cmxfb3JpZ2luYWwgfHwgYXR0YWNobWVudC51cmxfZmlsZSB8fCBhdHRhY2htZW50LnVybF90aHVtYm5haWxcblxuICAgIHRyeSB7XG4gICAgICBsZXQgYmxvYlVybDogc3RyaW5nIHwgbnVsbCA9IG51bGxcblxuICAgICAgaWYgKGZpbGVVcmwpIHtcbiAgICAgICAgY29uc3QgZG93bmxvYWRlZEZpbGUgPSBhd2FpdCBkb3dubG9hZEZpbGVGcm9tVXJsKGZpbGVVcmwsIGZpbGVOYW1lLCBhdHRhY2htZW50LnR5cGUpXG4gICAgICAgIGJsb2JVcmwgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKGRvd25sb2FkZWRGaWxlKVxuICAgICAgfSBlbHNlIGlmIChhdHRhY2htZW50LmZpbGUgaW5zdGFuY2VvZiBGaWxlKSB7XG4gICAgICAgIGJsb2JVcmwgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKGF0dGFjaG1lbnQuZmlsZSlcbiAgICAgIH1cblxuICAgICAgaWYgKCFibG9iVXJsKSByZXR1cm5cblxuICAgICAgY29uc3QgbGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKVxuICAgICAgbGluay5ocmVmID0gYmxvYlVybFxuICAgICAgbGluay5kb3dubG9hZCA9IGZpbGVOYW1lXG4gICAgICBsaW5rLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSdcbiAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQobGluaylcbiAgICAgIGxpbmsuY2xpY2soKVxuXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChsaW5rKVxuICAgICAgICBVUkwucmV2b2tlT2JqZWN0VVJMKGJsb2JVcmwpXG4gICAgICB9LCAxMDApXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0ZhaWxlZCB0byBkb3dubG9hZCBhdHRhY2htZW50JywgZXJyb3IpXG4gICAgfVxuICB9XG5cbiAgaWYgKGlzQ2hhbmdlUHJvamVjdCAmJiBvcHRpb25zKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxNZXNzYWdlV3JhcHBlciBrZXk9e2lkfSBpc0N1cnJlbnRVc2VyPXtpc0N1cnJlbnRVc2VyfSBkYXRhLW1lc3NhZ2UtaWQ9e2lkfSBoYXNGZWVkYmFjaz17ZmFsc2V9PlxuICAgICAgICA8U0NNZXNzYWdlSXRlbVdyYXBwZXIgJGlzQXNzaXN0YW50PXtpc0Fzc2lzdGFudH0+XG4gICAgICAgICAgPE1lc3NhZ2VDb250ZW50V3JhcHBlclxuICAgICAgICAgICAgaXNDaGFuZ2VQcm9qZWN0PXtpc0NoYW5nZVByb2plY3R9XG4gICAgICAgICAgICBtZXNzYWdlPXttZXNzYWdlfVxuICAgICAgICAgICAgaXNDdXJyZW50VXNlcj17aXNDdXJyZW50VXNlcn1cbiAgICAgICAgICAgIGlzRXJyb3I9e2lzRXJyb3J9XG4gICAgICAgICAgICBtZXNzYWdlRXh0cmFDb250ZW50PXs8TWVzc2FnZU9wdGlvbnMgb3B0aW9ucz17b3B0aW9ucyBhcyBhbnl9IGhhbmRsZVNlbGVjdE9wdGlvbj17aGFuZGxlU2VsZWN0T3B0aW9ufSAvPn1cbiAgICAgICAgICAvPlxuICAgICAgICA8L1NDTWVzc2FnZUl0ZW1XcmFwcGVyPlxuICAgICAgPC9NZXNzYWdlV3JhcHBlcj5cbiAgICApXG4gIH1cblxuICBjb25zdCBoYW5kbGVGZWVkYmFja0NsaWNrID0gKGZlZWRiYWNrOiBGZWVkYmFjaykgPT4ge1xuICAgIGNvbnN0IHNlc3Npb25JZCA9IGlkXG4gICAgICAuc3BsaXQoJy0nKVxuICAgICAgLmZpbHRlcihxdWVzdGlvbklkID0+IHF1ZXN0aW9uSWQgIT09ICdhbnN3ZXInKVxuICAgICAgLmpvaW4oJy0nKVxuICAgIGhhbmRsZUZlZWRiYWNrPy4oZmVlZGJhY2ssIHNlc3Npb25JZClcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPFNDTWVzc2FnZUl0ZW1XcmFwcGVyICRpc0Fzc2lzdGFudD17aXNBc3Npc3RhbnR9IGRhdGEtbWVzc2FnZS1pZD17aWR9PlxuICAgICAgPFNDTWVzc2FnZUl0ZW1Jbm5lcj5cbiAgICAgICAge2lzQXNzaXN0YW50ICYmIHByb3BzLnNob3dBZ2VudEhlYWRlciAhPT0gZmFsc2UgJiYgPEFnZW50TWVzc2FnZUhlYWRlciAvPn1cbiAgICAgICAge2lzQXNzaXN0YW50ICYmICFpc0FjdGl2ZVN0cmVhbWluZyAmJiA8UmVhc29uaW5nQmxvY2sgbWVzc2FnZUlkPXtpZH0gdHJhY2U9e3Byb3BzLnJlYXNvbmluZyA/PyBudWxsfSAvPn1cbiAgICAgICAgeyEhbWVzc2FnZUF0dGFjaG1lbnRzLmxlbmd0aCAmJiAoXG4gICAgICAgICAgPFNDQXR0YWNobWVudHNSb3cgJGlzQXNzaXN0YW50PXtpc0Fzc2lzdGFudH0+XG4gICAgICAgICAgICB7bWVzc2FnZUF0dGFjaG1lbnRzLm1hcCgoYXR0YWNobWVudCwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgLy8gRGV0ZWN0YXIgc2kgZXMgdW4gYXJjaGl2byBkZSBhdWRpb1xuICAgICAgICAgICAgICBjb25zdCBhdHRhY2htZW50VHlwZSA9IGF0dGFjaG1lbnQ/LnR5cGU/LnRvTG93ZXJDYXNlKCkgfHwgJydcbiAgICAgICAgICAgICAgY29uc3QgYXR0YWNobWVudE5hbWUgPSBhdHRhY2htZW50Py5uYW1lPy50b0xvd2VyQ2FzZSgpIHx8ICcnXG4gICAgICAgICAgICAgIGNvbnN0IGlzQXVkaW9GaWxlID1cbiAgICAgICAgICAgICAgICBhdHRhY2htZW50VHlwZS5zdGFydHNXaXRoKCdhdWRpby8nKSB8fFxuICAgICAgICAgICAgICAgIFsnZmxhYycsICdtNGEnLCAnbXAzJywgJ21wNCcsICdvZ2EnLCAnb2dnJywgJ3dhdicsICd3ZWJtJ10uaW5jbHVkZXMoYXR0YWNobWVudFR5cGUpIHx8XG4gICAgICAgICAgICAgICAgWycuZmxhYycsICcubTRhJywgJy5tcDMnLCAnLm1wNCcsICcub2dhJywgJy5vZ2cnLCAnLndhdicsICcud2VibSddLnNvbWUoZXh0ID0+XG4gICAgICAgICAgICAgICAgICBhdHRhY2htZW50TmFtZS5lbmRzV2l0aChleHQpXG4gICAgICAgICAgICAgICAgKVxuXG4gICAgICAgICAgICAgIGlmIChpc0F1ZGlvRmlsZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiA8QXR0YWNobWVudENhcmRBdWRpbyBrZXk9e2Ake2F0dGFjaG1lbnQuaWR9LSR7YXR0YWNobWVudC5uYW1lfWB9IGF0dGFjaG1lbnQ9e2F0dGFjaG1lbnR9IC8+XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgIDxBdHRhY2htZW50Q2FyZFxuICAgICAgICAgICAgICAgICAga2V5PXtgJHthdHRhY2htZW50LmlkfS0ke2F0dGFjaG1lbnQubmFtZX1gfVxuICAgICAgICAgICAgICAgICAgYXR0YWNobWVudD17YXR0YWNobWVudH1cbiAgICAgICAgICAgICAgICAgIHBvc2l0aW9uSW5kZXg9e2luZGV4fVxuICAgICAgICAgICAgICAgICAgb25Eb3dubG9hZD17KCkgPT4gaGFuZGxlQXR0YWNobWVudERvd25sb2FkKGF0dGFjaG1lbnQpfVxuICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gaGFuZGxlQXR0YWNobWVudENsaWNrKGF0dGFjaG1lbnQpfVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIH0pfVxuICAgICAgICAgIDwvU0NBdHRhY2htZW50c1Jvdz5cbiAgICAgICAgKX1cbiAgICAgICAgeyghIW1lc3NhZ2UgfHwgKGlzQWN0aXZlU3RyZWFtaW5nICYmIGhhc1N0cmVhbVRleHQpKSAmJiAhKGlzQXNzaXN0YW50ICYmICEhbWVzc2FnZUF0dGFjaG1lbnRzLmxlbmd0aCkgJiYgKFxuICAgICAgICAgIDxTdHJlYW1pbmdNZXNzYWdlQm9keVxuICAgICAgICAgICAgbWVzc2FnZT17bWVzc2FnZSA/PyAnJ31cbiAgICAgICAgICAgIGlzU3RyZWFtaW5nPXtpc0FjdGl2ZVN0cmVhbWluZyAmJiBoYXNTdHJlYW1UZXh0fVxuICAgICAgICAgICAgaXNDdXJyZW50VXNlcj17aXNDdXJyZW50VXNlcn1cbiAgICAgICAgICAgIGlzQXNzaXN0YW50PXtpc0Fzc2lzdGFudH1cbiAgICAgICAgICAgIGlzRnJvbnRlbmRDYW5jZWxsZWQ9e3Byb3BzLmlzRnJvbnRlbmRDYW5jZWxsZWR9XG4gICAgICAgICAgICBhcHByb3ZhbD17YXBwcm92YWx9XG4gICAgICAgICAgICBpc0Vycm9yPXtpc0Vycm9yfVxuICAgICAgICAgICAgc291cmNlcz17c291cmNlc31cbiAgICAgICAgICAgIHN1Z2dlc3Rpb25zPXtzdWdnZXN0aW9uc31cbiAgICAgICAgICAgIGNyZWF0ZUFnZW50Rm9sbG93VXA9e2NyZWF0ZUFnZW50Rm9sbG93VXB9XG4gICAgICAgICAgICBoYW5kbGVGZWVkYmFja0NsaWNrPXtoYW5kbGVGZWVkYmFja0NsaWNrfVxuICAgICAgICAgICAgZGlzYWJsZUZlZWRiYWNrPXtkaXNhYmxlRmVlZGJhY2sgPz8gbnVsbH1cbiAgICAgICAgICAgIGhhbmRsZVN1Z2dlc3Rpb25DbGljaz17aGFuZGxlU3VnZ2VzdGlvbkNsaWNrfVxuICAgICAgICAgICAgc3VnZ2VzdGlvbnNEaXNhYmxlZD17aXNBY3RpdmVTdHJlYW1pbmcgfHwgISFoYXNTZWxlY3RlZFN1Z2dlc3Rpb259XG4gICAgICAgICAgICBtZXNzYWdlSWQ9e2lkfVxuICAgICAgICAgICAgaXNMYXN0TWVzc2FnZT17aXNMYXN0TWVzc2FnZX1cbiAgICAgICAgICAvPlxuICAgICAgICApfVxuICAgICAgICB7LyogTGEgYWNjacOzbiB2YSBERUJBSk8gZGVsIHRleHRvOiBwcmltZXJvIHNlIGxlZSBxdcOpIHZhIGEgaGFjZXIgeSBhYmFqb1xuICAgICAgICAgICAgcXXDqSBlc3TDoSBoYWNpZW5kbywgY29tbyBlbiBDaGF0R1BULiBMbyB0ZW7DrWFtb3MgYWwgcmV2w6lzLlxuICAgICAgICAgICAgU2luIFNDTG9hZGluZ01lc3NhZ2VzQ29sdW1uOiBzdSBgbWFyZ2luLXRvcDogLTI0cHhgIGVzdMOhIGNhbGlicmFkb1xuICAgICAgICAgICAgcGFyYSBlbCBnYXAgZGUgMzZweCBkZSBTQ01lc3NhZ2VzSW5uZXIsIHkgYWPDoSBlbCBwYWRyZSBlc1xuICAgICAgICAgICAgU0NNZXNzYWdlSXRlbUlubmVyIGNvbiBnYXAgOHB4IOKAlCBwaW50YWJhIGVsIGluZGljYWRvciBlbmNpbWEuICovfVxuICAgICAgICB7aXNBc3Npc3RhbnQgJiYgaXNBY3RpdmVTdHJlYW1pbmcgJiYgc3RyZWFtQWN0aXZpdHkgJiYgPEFnZW50QWN0aXZpdHlJbmRpY2F0b3IgYWN0aXZpdHk9e3N0cmVhbUFjdGl2aXR5fSAvPn1cbiAgICAgICAge2FwcHJvdmFsICYmIGFwcHJvdmFsLnBlbmRpbmdfYWN0aW9ucyAmJiAoXG4gICAgICAgICAgPFNDQXBwcm92YWxBY3Rpb25zQ29sdW1uPlxuICAgICAgICAgICAgPEFwcHJvdmFsQm94XG4gICAgICAgICAgICAgIGFjdGlvbnM9e2FwcHJvdmFsLnBlbmRpbmdfYWN0aW9uc31cbiAgICAgICAgICAgICAgc3RhdHVzPXthcHByb3ZhbFN0YXR1c31cbiAgICAgICAgICAgICAgb25BcHByb3ZlPXt0aHJlYWRJZHMgPT4gaGFuZGxlQXBwcm92YWxEZWNpc2lvbih0aHJlYWRJZHMsICdhcHByb3ZlJyl9XG4gICAgICAgICAgICAgIG9uUmVqZWN0PXt0aHJlYWRJZHMgPT4gaGFuZGxlQXBwcm92YWxEZWNpc2lvbih0aHJlYWRJZHMsICdyZWplY3QnKX1cbiAgICAgICAgICAgICAgaXNQcm9qZWN0RGVsZXRlZD17cHJvcHMucHJvamVjdE1ldGFkYXRhPy5pc19kZWxldGVkID09PSB0cnVlfVxuICAgICAgICAgICAgICBpc0V4cGFuZGVkPXtwcm9wcy5leHBhbmRlZH1cbiAgICAgICAgICAgICAgaGl0bEluc3RhbmNlSWQ9e2FwcHJvdmFsLm9yaWdpbmFsX3RocmVhZF9pZH1cbiAgICAgICAgICAgICAgd2FybmluZ01lc3NhZ2U9e2FwcHJvdmFsLndhcm5pbmdfbWVzc2FnZX1cbiAgICAgICAgICAgICAgbWFudWFsQXBwcm92YWxEZXRlY3RlZD17YXBwcm92YWwubWFudWFsX2FwcHJvdmFsX2RldGVjdGVkfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L1NDQXBwcm92YWxBY3Rpb25zQ29sdW1uPlxuICAgICAgICApfVxuICAgICAgPC9TQ01lc3NhZ2VJdGVtSW5uZXI+XG4gICAgICA8QXR0YWNobWVudFByZXZpZXdNb2RhbFxuICAgICAgICBpc09wZW49eyEhcHJldmlld0F0dGFjaG1lbnR9XG4gICAgICAgIG9uQ2xvc2U9e2hhbmRsZUNsb3NlUHJldmlld31cbiAgICAgICAgYXR0YWNobWVudD17cHJldmlld0F0dGFjaG1lbnR9XG4gICAgICAvPlxuICAgIDwvU0NNZXNzYWdlSXRlbVdyYXBwZXI+XG4gIClcbn0pXG5cbmNvbnN0IENoYXRBSU1lc3NhZ2VzSW5uZXIgPSAoe1xuICB1c2VySW5pdGlhbE1lc3NhZ2UsXG4gIGluaXRpYWxDaGF0SWQsXG4gIG9uRXJyb3IsXG4gIG9uU2VuZE1lc3NhZ2VSZWFkeSxcbiAgb25TY3JvbGxUb0JvdHRvbSxcbiAgYXR0YWNobWVudHMsXG4gIGFnZW50cyxcbiAgZXhwYW5kZWQsXG59OiBDaGF0QUlNZXNzYWdlc1Byb3BzKSA9PiB7XG4gIGNvbnN0IHsgdCB9ID0gdXNlVCgpXG4gIGNvbnN0IHsgaXNXZWJTZWFyY2hBY3RpdmUsIGlzRGVlcFNlYXJjaEFjdGl2ZSwgYWdlbnQgfSA9IHVzZUdsb2JhbENvbnRleHQoKVxuICBjb25zdCBldmVudCA9IHVzZUV2ZW50KClcbiAgY29uc3QgYXV0aFVzZXIgPSB1c2VVc2VyKClcbiAgY29uc3QgbWVzc2FnZXNSZWYgPSB1c2VSZWY8SFRNTERpdkVsZW1lbnQ+KG51bGwpXG4gIGNvbnN0IGNoYXRJbml0aWFsaXplZFJlZiA9IHVzZVJlZihmYWxzZSlcbiAgY29uc3QgaXNMb2FkaW5nTW9yZVJlZiA9IHVzZVJlZihmYWxzZSlcbiAgY29uc3QgdXNlclNjcm9sbGluZ1JlZiA9IHVzZVJlZihmYWxzZSlcbiAgY29uc3Qgc2Nyb2xsVGhyZXNob2xkUmVmID0gdXNlUmVmKDM5KVxuICBjb25zdCBsYXN0U2Nyb2xsVG9wUmVmID0gdXNlUmVmKDApXG4gIGNvbnN0IHNob3dTY3JvbGxUb0JvdHRvbVJlZiA9IHVzZVJlZihmYWxzZSlcbiAgY29uc3Qgc2Nyb2xsUmFmUmVmID0gdXNlUmVmPG51bWJlciB8IG51bGw+KG51bGwpXG4gIGNvbnN0IHdhc0xvYWRpbmdNZXNzYWdlc1JlZiA9IHVzZVJlZihmYWxzZSlcbiAgY29uc3QgbGFzdFNjcm9sbGVkU2Vzc2lvblJlZiA9IHVzZVJlZjxzdHJpbmcgfCBudWxsPihudWxsKVxuICBjb25zdCByZXNlcnZlZFR1cm5JZFJlZiA9IHVzZVJlZjxzdHJpbmcgfCBudWxsPihudWxsKVxuICBjb25zdCBzcGFjZXJFbFJlZiA9IHVzZVJlZjxIVE1MRGl2RWxlbWVudCB8IG51bGw+KG51bGwpXG4gIGNvbnN0IHNwYWNlckhlaWdodFJlZiA9IHVzZVJlZigwKVxuICBjb25zdCBbc2hvd1Njcm9sbFRvQm90dG9tLCBzZXRTaG93U2Nyb2xsVG9Cb3R0b21dID0gdXNlU3RhdGUoZmFsc2UpXG4gIGNvbnN0IFtzZWxlY3RlZFN1Z2dlc3Rpb25NZXNzYWdlSWRzLCBzZXRTZWxlY3RlZFN1Z2dlc3Rpb25NZXNzYWdlSWRzXSA9IHVzZVN0YXRlPFJlY29yZDxzdHJpbmcsIGJvb2xlYW4+Pih7fSlcblxuICBjb25zdCB7XG4gICAgbWVzc2FnZXMsXG4gICAgbG9hZGluZ01lc3NhZ2VzLFxuICAgIGlzTG9hZGluZ01vcmVNZXNzYWdlcyxcbiAgICB3YWl0aW5nUmVzcG9uc2UsXG4gICAgaXNXcml0aW5nLFxuICAgIGxvYWRpbmdNZXNzYWdlLFxuICAgIHN0cmVhbUFjdGl2aXR5LFxuICAgIGFjdGl2ZUxvYWRpbmdzLFxuICAgIHNlbmRNZXNzYWdlLFxuICAgIGNoYW5nZVByb2plY3QsXG4gICAgaGFuZGxlRmVlZGJhY2ssXG4gICAgaGFuZGxlQXBwcm92YWxEZWNpc2lvbixcbiAgICBpbml0aWFsaXplQ2hhdCxcbiAgICBoYW5kbGVTY3JvbGwsXG4gICAgc3RvcEdlbmVyYXRpb24sXG4gIH0gPSB1c2VDaGF0TWFuYWdlcih7XG4gICAgY2hhdElkOiBpbml0aWFsQ2hhdElkIHx8IHVuZGVmaW5lZCxcbiAgICB1c2VySW5pdGlhbE1lc3NhZ2UsXG4gICAgb25FcnJvcixcbiAgICBhdHRhY2htZW50cyxcbiAgICBhZ2VudHMsXG4gIH0pXG5cbiAgY29uc3QgaGFuZGxlU2VsZWN0T3B0aW9uID0gdXNlQ2FsbGJhY2soXG4gICAgKG9wdGlvbjogUHJvamVjdCkgPT4ge1xuICAgICAgY2hhbmdlUHJvamVjdChvcHRpb24pXG4gICAgfSxcbiAgICBbY2hhbmdlUHJvamVjdF1cbiAgKVxuXG4gIGNvbnN0IGhhbmRsZVN1Z2dlc3Rpb25DbGljayA9IHVzZUNhbGxiYWNrKFxuICAgIChtZXNzYWdlSWQ6IHN0cmluZywgc3VnZ2VzdGlvbjogc3RyaW5nKSA9PiB7XG4gICAgICBpZiAoIXN1Z2dlc3Rpb24/LnRyaW0oKSkgcmV0dXJuXG4gICAgICBpZiAoc2VsZWN0ZWRTdWdnZXN0aW9uTWVzc2FnZUlkc1ttZXNzYWdlSWRdKSByZXR1cm5cbiAgICAgIGNvbnN0IGlzTWFya2V0cGxhY2VHbG9iYWxBZ2VudCA9IGlzTWFpYWtlckFnZW50KGFnZW50KVxuICAgICAgZXZlbnQoRVZFTlRTLmFpQ2hhdFN1Z2dlc3RlZEFuc3dlciwge1xuICAgICAgICBhZ2VudF90eXBlOiBpc01hcmtldHBsYWNlR2xvYmFsQWdlbnQgPyAnbWFya2V0cGxhY2UnIDogYWdlbnQ/LnR5cGUsXG4gICAgICB9KVxuICAgICAgc2V0U2VsZWN0ZWRTdWdnZXN0aW9uTWVzc2FnZUlkcyhwcmV2ID0+ICh7IC4uLnByZXYsIFttZXNzYWdlSWRdOiB0cnVlIH0pKVxuXG4gICAgICBjb25zdCB0YXJnZXRNZXNzYWdlID0gbWVzc2FnZXMuZmluZChtc2cgPT4gbXNnLmlkID09PSBtZXNzYWdlSWQpXG4gICAgICBjb25zdCBpc1JldHJ5U3VnZ2VzdGlvbiA9ICEhdGFyZ2V0TWVzc2FnZT8uaXNFcnJvciAmJiBzdWdnZXN0aW9uID09PSB0KCdjaGF0LnJldHJ5JylcbiAgICAgIGlmIChpc1JldHJ5U3VnZ2VzdGlvbikge1xuICAgICAgICBjb25zdCBsYXN0VXNlck1lc3NhZ2UgPSBtZXNzYWdlc1xuICAgICAgICAgIC5maWx0ZXIobXNnID0+IG1zZy5yb2xlID09PSBDaGF0SGlzdG9yeVJvbGUuVVNFUiB8fCBtc2cudXNlci5pZCA9PT0gYXV0aFVzZXIuaWQudG9TdHJpbmcoKSlcbiAgICAgICAgICAuYXQoLTEpXG4gICAgICAgIGlmIChsYXN0VXNlck1lc3NhZ2U/Lm1lc3NhZ2UpIHtcbiAgICAgICAgICBjb25zdCByZXRyeUF0dGFjaG1lbnRzID0gQXJyYXkuaXNBcnJheShsYXN0VXNlck1lc3NhZ2UuYXR0YWNobWVudHMpXG4gICAgICAgICAgICA/IGxhc3RVc2VyTWVzc2FnZS5hdHRhY2htZW50c1xuICAgICAgICAgICAgOiBBcnJheS5pc0FycmF5KGxhc3RVc2VyTWVzc2FnZS5zb3VyY2VzKVxuICAgICAgICAgICAgICA/IGxhc3RVc2VyTWVzc2FnZS5zb3VyY2VzXG4gICAgICAgICAgICAgIDogW11cbiAgICAgICAgICBzZW5kTWVzc2FnZShsYXN0VXNlck1lc3NhZ2UubWVzc2FnZSwgcmV0cnlBdHRhY2htZW50cylcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBzZW5kTWVzc2FnZShzdWdnZXN0aW9uKVxuICAgIH0sXG4gICAgW1xuICAgICAgc2VuZE1lc3NhZ2UsXG4gICAgICBzZWxlY3RlZFN1Z2dlc3Rpb25NZXNzYWdlSWRzLFxuICAgICAgZXZlbnQsXG4gICAgICBhZ2VudD8uZW50aXR5LFxuICAgICAgYWdlbnQ/Lm5hbWUsXG4gICAgICBhZ2VudD8udHlwZSxcbiAgICAgIG1lc3NhZ2VzLFxuICAgICAgdCxcbiAgICAgIGF1dGhVc2VyLmlkLFxuICAgIF1cbiAgKVxuXG4gIC8qKlxuICAgKiBBY3R1YWxpemEgZWwgZXN0YWRvIGRlbCBib3TDs24gXCJzY3JvbGwgdG8gYm90dG9tXCIgY29tcGFyYW5kbyBsYSBwb3NpY2nDs25cbiAgICogYWN0dWFsIGRlbCBzY3JvbGwgY29uIGVsIGZvbmRvLiBVc2EgdW4gcmVmIHBhcmEgZXZpdGFyIGBzZXRTdGF0ZWAgY3VhbmRvXG4gICAqIGVsIHZhbG9yIG5vIGNhbWJpYS5cbiAgICovXG4gIGNvbnN0IHVwZGF0ZVNjcm9sbEJvdHRvbVZpc2liaWxpdHkgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgY29uc3QgZWwgPSBtZXNzYWdlc1JlZi5jdXJyZW50XG4gICAgaWYgKCFlbCkgcmV0dXJuXG4gICAgY29uc3QgeyBzY3JvbGxUb3AsIHNjcm9sbEhlaWdodCwgY2xpZW50SGVpZ2h0IH0gPSBlbFxuICAgIGNvbnN0IGRpc3RhbmNlRnJvbUJvdHRvbSA9IHNjcm9sbEhlaWdodCAtIHNjcm9sbFRvcCAtIGNsaWVudEhlaWdodFxuICAgIGNvbnN0IHNob3VsZFNob3cgPSBkaXN0YW5jZUZyb21Cb3R0b20gPiA1MFxuICAgIGlmIChzaG93U2Nyb2xsVG9Cb3R0b21SZWYuY3VycmVudCAhPT0gc2hvdWxkU2hvdykge1xuICAgICAgc2hvd1Njcm9sbFRvQm90dG9tUmVmLmN1cnJlbnQgPSBzaG91bGRTaG93XG4gICAgICBzZXRTaG93U2Nyb2xsVG9Cb3R0b20oc2hvdWxkU2hvdylcbiAgICB9XG4gIH0sIFtdKVxuXG4gIC8qKlxuICAgKiBTY3JvbGwgaW5tZWRpYXRvIGFsIGZvbmRvIChkZW50cm8gZGUgckFGIHBhcmEgY29vcmRpbmFyIGNvbiBlbCBwYWludClcbiAgICogeSBhY3R1YWxpemEgbGEgdmlzaWJpbGlkYWQgZGVsIGJvdMOzbi4gUmVzcGV0YSBgc2tpcElmVXNlclNjcm9sbGluZ2AgcGFyYVxuICAgKiBubyBzb2JyZXNjcmliaXIgZWwgc2Nyb2xsIG1hbnVhbCBkZWwgdXN1YXJpbyBkdXJhbnRlIGVsIHN0cmVhbWluZy5cbiAgICovXG4gIGNvbnN0IHNjcm9sbFRvQm90dG9tUmFmID0gdXNlQ2FsbGJhY2soXG4gICAgKG9wdHM6IHsgc2tpcElmVXNlclNjcm9sbGluZz86IGJvb2xlYW47IGRlbGF5TXM/OiBudW1iZXIgfSA9IHt9KSA9PiB7XG4gICAgICBjb25zdCB7IHNraXBJZlVzZXJTY3JvbGxpbmcgPSBmYWxzZSwgZGVsYXlNcyA9IDAgfSA9IG9wdHNcbiAgICAgIGNvbnN0IHJ1biA9ICgpID0+IHtcbiAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcbiAgICAgICAgICBjb25zdCBlbCA9IG1lc3NhZ2VzUmVmLmN1cnJlbnRcbiAgICAgICAgICBpZiAoIWVsKSByZXR1cm5cbiAgICAgICAgICBpZiAoc2tpcElmVXNlclNjcm9sbGluZyAmJiB1c2VyU2Nyb2xsaW5nUmVmLmN1cnJlbnQpIHJldHVyblxuICAgICAgICAgIGVsLnNjcm9sbFRvcCA9IGVsLnNjcm9sbEhlaWdodFxuICAgICAgICAgIHVwZGF0ZVNjcm9sbEJvdHRvbVZpc2liaWxpdHkoKVxuICAgICAgICB9KVxuICAgICAgfVxuICAgICAgaWYgKGRlbGF5TXMgPiAwKSBzZXRUaW1lb3V0KHJ1biwgZGVsYXlNcylcbiAgICAgIGVsc2UgcnVuKClcbiAgICB9LFxuICAgIFt1cGRhdGVTY3JvbGxCb3R0b21WaXNpYmlsaXR5XVxuICApXG5cbiAgY29uc3Qgc2V0U3BhY2VySGVpZ2h0ID0gdXNlQ2FsbGJhY2soKG5leHQ6IG51bWJlcikgPT4ge1xuICAgIGlmIChNYXRoLmFicyhzcGFjZXJIZWlnaHRSZWYuY3VycmVudCAtIG5leHQpIDwgMSkgcmV0dXJuXG4gICAgc3BhY2VySGVpZ2h0UmVmLmN1cnJlbnQgPSBuZXh0XG4gICAgaWYgKHNwYWNlckVsUmVmLmN1cnJlbnQpIHtcbiAgICAgIHNwYWNlckVsUmVmLmN1cnJlbnQuc3R5bGUuaGVpZ2h0ID0gYCR7bmV4dH1weGBcbiAgICB9XG4gIH0sIFtdKVxuXG4gIGNvbnN0IGNsZWFyVHVyblNwYWNlID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIHJlc2VydmVkVHVybklkUmVmLmN1cnJlbnQgPSBudWxsXG4gICAgc2V0U3BhY2VySGVpZ2h0KDApXG4gIH0sIFtzZXRTcGFjZXJIZWlnaHRdKVxuXG4gIGNvbnN0IG1lYXN1cmVUdXJuID0gdXNlQ2FsbGJhY2soKHF1ZXN0aW9uSWQ6IHN0cmluZykgPT4ge1xuICAgIGNvbnN0IGVsID0gbWVzc2FnZXNSZWYuY3VycmVudFxuICAgIGNvbnN0IHNwYWNlckVsID0gc3BhY2VyRWxSZWYuY3VycmVudFxuICAgIGlmICghZWwgfHwgIXNwYWNlckVsKSByZXR1cm4gbnVsbFxuXG4gICAgY29uc3QgcXVlc3Rpb25FbCA9IGVsLnF1ZXJ5U2VsZWN0b3I8SFRNTEVsZW1lbnQ+KGBbZGF0YS1tZXNzYWdlLWlkPVwiJHtxdWVzdGlvbklkfVwiXWApXG4gICAgaWYgKCFxdWVzdGlvbkVsKSByZXR1cm4gbnVsbFxuXG4gICAgY29uc3QgY29udGFpbmVyVG9wID0gZWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wXG4gICAgY29uc3QgcXVlc3Rpb25Ub3AgPSBxdWVzdGlvbkVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcCAtIGNvbnRhaW5lclRvcCArIGVsLnNjcm9sbFRvcFxuICAgIGNvbnN0IGNvbnRlbnRCb3R0b20gPSBzcGFjZXJFbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3AgLSBjb250YWluZXJUb3AgKyBlbC5zY3JvbGxUb3BcbiAgICByZXR1cm4geyBlbCwgcXVlc3Rpb25Ub3AsIHR1cm5IZWlnaHQ6IGNvbnRlbnRCb3R0b20gLSBxdWVzdGlvblRvcCB9XG4gIH0sIFtdKVxuXG4gIGNvbnN0IHJlc2VydmVUdXJuU3BhY2UgPSB1c2VDYWxsYmFjayhcbiAgICAocXVlc3Rpb25JZDogc3RyaW5nKSA9PiB7XG4gICAgICBjb25zdCBtZWFzdXJlZCA9IG1lYXN1cmVUdXJuKHF1ZXN0aW9uSWQpXG4gICAgICBpZiAoIW1lYXN1cmVkKSByZXR1cm5cbiAgICAgIGNvbnN0IHsgZWwsIHF1ZXN0aW9uVG9wLCB0dXJuSGVpZ2h0IH0gPSBtZWFzdXJlZFxuXG4gICAgICBjb25zdCByZXNlcnZlZCA9IE1hdGgubWF4KDAsIGVsLmNsaWVudEhlaWdodCAtIHR1cm5IZWlnaHQpXG4gICAgICBpZiAocmVzZXJ2ZWQgPD0gMCkge1xuICAgICAgICBjbGVhclR1cm5TcGFjZSgpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICByZXNlcnZlZFR1cm5JZFJlZi5jdXJyZW50ID0gcXVlc3Rpb25JZFxuICAgICAgc2V0U3BhY2VySGVpZ2h0KHJlc2VydmVkKVxuICAgICAgZWwuc2Nyb2xsVG9wID0gTWF0aC5taW4ocXVlc3Rpb25Ub3AsIE1hdGgubWF4KDAsIGVsLnNjcm9sbEhlaWdodCAtIGVsLmNsaWVudEhlaWdodCkpXG4gICAgICB1cGRhdGVTY3JvbGxCb3R0b21WaXNpYmlsaXR5KClcbiAgICB9LFxuICAgIFtjbGVhclR1cm5TcGFjZSwgbWVhc3VyZVR1cm4sIHNldFNwYWNlckhlaWdodCwgdXBkYXRlU2Nyb2xsQm90dG9tVmlzaWJpbGl0eV1cbiAgKVxuXG4gIGNvbnN0IHN5bmNUdXJuU3BhY2UgPSB1c2VDYWxsYmFjaygoKTogYm9vbGVhbiA9PiB7XG4gICAgaWYgKCFyZXNlcnZlZFR1cm5JZFJlZi5jdXJyZW50KSByZXR1cm4gZmFsc2VcblxuICAgIGNvbnN0IG1lYXN1cmVkID0gbWVhc3VyZVR1cm4ocmVzZXJ2ZWRUdXJuSWRSZWYuY3VycmVudClcbiAgICBpZiAoIW1lYXN1cmVkKSByZXR1cm4gZmFsc2VcblxuICAgIGNvbnN0IHJlc2VydmVkID0gTWF0aC5tYXgoMCwgbWVhc3VyZWQuZWwuY2xpZW50SGVpZ2h0IC0gbWVhc3VyZWQudHVybkhlaWdodClcbiAgICBzZXRTcGFjZXJIZWlnaHQocmVzZXJ2ZWQpXG4gICAgaWYgKHJlc2VydmVkID4gMCkgcmV0dXJuIHRydWVcblxuICAgIHJlc2VydmVkVHVybklkUmVmLmN1cnJlbnQgPSBudWxsXG4gICAgcmV0dXJuIGZhbHNlXG4gIH0sIFttZWFzdXJlVHVybiwgc2V0U3BhY2VySGVpZ2h0XSlcblxuICBjb25zdCBoYW5kbGVDbGlja1Njcm9sbFRvQm90dG9tID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGlmICghbWVzc2FnZXNSZWYuY3VycmVudCkgcmV0dXJuXG4gICAgY2xlYXJUdXJuU3BhY2UoKVxuICAgIG1lc3NhZ2VzUmVmLmN1cnJlbnQuc2Nyb2xsVG8oe1xuICAgICAgdG9wOiBtZXNzYWdlc1JlZi5jdXJyZW50LnNjcm9sbEhlaWdodCxcbiAgICAgIGJlaGF2aW9yOiAnc21vb3RoJyxcbiAgICB9KVxuICAgIC8vIERhciB0aWVtcG8gYWwgc21vb3RoLXNjcm9sbCBhbnRlcyBkZSByZWNhbGN1bGFyIGxhIHZpc2liaWxpZGFkIGRlbCBib3TDs24uXG4gICAgc2V0VGltZW91dCh1cGRhdGVTY3JvbGxCb3R0b21WaXNpYmlsaXR5LCA1MDApXG4gIH0sIFtjbGVhclR1cm5TcGFjZSwgdXBkYXRlU2Nyb2xsQm90dG9tVmlzaWJpbGl0eV0pXG5cbiAgLy8gQWwgZGVjaWRpciBlbiBlbCBBcHByb3ZhbEJveDogZWwgYm94IGNvbGFwc2EgKGJvdG9uZXMgLT4gYmFkZ2UpIHkgZWwgc3RyZWFtXG4gIC8vIGNvbnRpbsO6YSBhYmFqby4gUmVhY3RpdmFyIGVsIGF1dG8tc2Nyb2xsIHkgc2VndWlyIGVsIGZvbmRvIHBhcmEgcXVlIGxhIHZpc3RhXG4gIC8vIG5vIHF1ZWRlIGF0csOhcyAoZXZpdGEgcXVlIGFwYXJlemNhIGxhIGZsZWNoYSBkZSBzY3JvbGwtdG8tYm90dG9tKS5cbiAgY29uc3QgaGFuZGxlQXBwcm92YWxEZWNpc2lvbldpdGhTY3JvbGwgPSB1c2VDYWxsYmFjayhcbiAgICAoLi4uYXJnczogUGFyYW1ldGVyczx0eXBlb2YgaGFuZGxlQXBwcm92YWxEZWNpc2lvbj4pID0+IHtcbiAgICAgIHVzZXJTY3JvbGxpbmdSZWYuY3VycmVudCA9IGZhbHNlXG4gICAgICBzY3JvbGxUaHJlc2hvbGRSZWYuY3VycmVudCA9IDM5XG4gICAgICBoYW5kbGVBcHByb3ZhbERlY2lzaW9uKC4uLmFyZ3MpXG4gICAgICBzY3JvbGxUb0JvdHRvbVJhZigpXG4gICAgICBzY3JvbGxUb0JvdHRvbVJhZih7IGRlbGF5TXM6IDEwMCB9KVxuICAgIH0sXG4gICAgW2hhbmRsZUFwcHJvdmFsRGVjaXNpb24sIHNjcm9sbFRvQm90dG9tUmFmXVxuICApXG5cbiAgY29uc3QgaGFuZGxlU2Nyb2xsVG9Cb3R0b20gPSB1c2VDYWxsYmFjayhcbiAgICAoZTogUmVhY3QuVUlFdmVudDxIVE1MRGl2RWxlbWVudD4pID0+IHtcbiAgICAgIGNvbnN0IGNvbnRhaW5lciA9IGUuY3VycmVudFRhcmdldFxuXG4gICAgICBpZiAoc2Nyb2xsUmFmUmVmLmN1cnJlbnQgIT09IG51bGwpIHtcbiAgICAgICAgY2FuY2VsQW5pbWF0aW9uRnJhbWUoc2Nyb2xsUmFmUmVmLmN1cnJlbnQpXG4gICAgICB9XG5cbiAgICAgIHNjcm9sbFJhZlJlZi5jdXJyZW50ID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcbiAgICAgICAgc2Nyb2xsUmFmUmVmLmN1cnJlbnQgPSBudWxsXG4gICAgICAgIGNvbnN0IHsgc2Nyb2xsVG9wLCBzY3JvbGxIZWlnaHQsIGNsaWVudEhlaWdodCB9ID0gY29udGFpbmVyXG5cbiAgICAgICAgY29uc3QgaXNTY3JvbGxpbmdVcCA9IHNjcm9sbFRvcCA8IGxhc3RTY3JvbGxUb3BSZWYuY3VycmVudFxuXG4gICAgICAgIGlmIChpc1Njcm9sbGluZ1VwKSB7XG4gICAgICAgICAgc2Nyb2xsVGhyZXNob2xkUmVmLmN1cnJlbnQgPSAxNVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgaXNOZWFyQm90dG9tID0gc2Nyb2xsSGVpZ2h0IC0gc2Nyb2xsVG9wIC0gY2xpZW50SGVpZ2h0IDwgc2Nyb2xsVGhyZXNob2xkUmVmLmN1cnJlbnRcblxuICAgICAgICBpZiAoaXNOZWFyQm90dG9tKSB7XG4gICAgICAgICAgc2Nyb2xsVGhyZXNob2xkUmVmLmN1cnJlbnQgPSAzOVxuICAgICAgICB9XG5cbiAgICAgICAgdXNlclNjcm9sbGluZ1JlZi5jdXJyZW50ID0gIWlzTmVhckJvdHRvbVxuICAgICAgICBsYXN0U2Nyb2xsVG9wUmVmLmN1cnJlbnQgPSBzY3JvbGxUb3BcblxuICAgICAgICB1cGRhdGVTY3JvbGxCb3R0b21WaXNpYmlsaXR5KClcblxuICAgICAgICBpZiAoaXNOZWFyQm90dG9tICYmIG9uU2Nyb2xsVG9Cb3R0b20pIHtcbiAgICAgICAgICBvblNjcm9sbFRvQm90dG9tKClcbiAgICAgICAgfVxuXG4gICAgICAgIGhhbmRsZVNjcm9sbChjb250YWluZXIpXG4gICAgICB9KVxuICAgIH0sXG4gICAgW29uU2Nyb2xsVG9Cb3R0b20sIGhhbmRsZVNjcm9sbCwgdXBkYXRlU2Nyb2xsQm90dG9tVmlzaWJpbGl0eV1cbiAgKVxuXG4gIC8vIHJlZnMgdG8gc3RhYmlsaXplIGZ1bmN0aW9ucyBhbmQgYXZvaWQgdW5uZWNlc3NhcnkgcmUtcmVuZGVyc1xuICBjb25zdCBzZW5kTWVzc2FnZVJlZiA9IHVzZVJlZihzZW5kTWVzc2FnZSlcbiAgY29uc3Qgc3RvcEdlbmVyYXRpb25SZWYgPSB1c2VSZWYoc3RvcEdlbmVyYXRpb24pXG4gIGNvbnN0IG9uU2VuZE1lc3NhZ2VSZWFkeVJlZiA9IHVzZVJlZihvblNlbmRNZXNzYWdlUmVhZHkpXG4gIGNvbnN0IHNlbmRNZXNzYWdlUHJveHlSZWYgPSB1c2VSZWYoXG4gICAgKFxuICAgICAgbWVzc2FnZTogc3RyaW5nLFxuICAgICAgYXR0YWNobWVudHM/OiBBdHRhY2htZW50RmlsZVtdLFxuICAgICAgZmFxSWQ/OiBzdHJpbmcsXG4gICAgICBhZ2VudFN1Z2dlc3Rpb25JZD86IHN0cmluZyxcbiAgICAgIG1lbnRpb25zPzogQ29udGV4dE1lbnRpb25bXSxcbiAgICAgIGZ1YUlkPzogc3RyaW5nLFxuICAgICAgc2NJZD86IHN0cmluZ1xuICAgICkgPT4gc2VuZE1lc3NhZ2VSZWYuY3VycmVudChtZXNzYWdlLCBhdHRhY2htZW50cywgZmFxSWQsIGFnZW50U3VnZ2VzdGlvbklkLCBtZW50aW9ucywgZnVhSWQsIHNjSWQpXG4gIClcbiAgY29uc3Qgc3RvcEdlbmVyYXRpb25Qcm94eVJlZiA9IHVzZVJlZigoKSA9PiBzdG9wR2VuZXJhdGlvblJlZi5jdXJyZW50KCkpXG5cbiAgLy8gdXBkYXRlIHJlZnMgd2hlbiBmdW5jdGlvbnMgY2hhbmdlXG4gIHNlbmRNZXNzYWdlUmVmLmN1cnJlbnQgPSBzZW5kTWVzc2FnZVxuICBzdG9wR2VuZXJhdGlvblJlZi5jdXJyZW50ID0gc3RvcEdlbmVyYXRpb25cbiAgb25TZW5kTWVzc2FnZVJlYWR5UmVmLmN1cnJlbnQgPSBvblNlbmRNZXNzYWdlUmVhZHlcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChvblNlbmRNZXNzYWdlUmVhZHlSZWYuY3VycmVudCkge1xuICAgICAgb25TZW5kTWVzc2FnZVJlYWR5UmVmLmN1cnJlbnQoXG4gICAgICAgIHNlbmRNZXNzYWdlUHJveHlSZWYuY3VycmVudCxcbiAgICAgICAgc3RvcEdlbmVyYXRpb25Qcm94eVJlZi5jdXJyZW50LFxuICAgICAgICB3YWl0aW5nUmVzcG9uc2UsXG4gICAgICAgIGlzV3JpdGluZ1xuICAgICAgKVxuICAgIH1cbiAgfSwgW3dhaXRpbmdSZXNwb25zZSwgaXNXcml0aW5nXSlcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlzTG9hZGluZ01vcmVSZWYuY3VycmVudCA9IGlzTG9hZGluZ01vcmVNZXNzYWdlc1xuICB9LCBbaXNMb2FkaW5nTW9yZU1lc3NhZ2VzXSlcblxuICAvLyBDdWFuZG8gZWwgYWdlbnRlIGVtcGllemEgYSByZXNwb25kZXIsIHJlc2V0ZWFyIGVsIGZsYWcgeSBlbCB1bWJyYWwgcGFyYSBhY3RpdmFyIGVsIGF1dG8tc2Nyb2xsXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKHdhaXRpbmdSZXNwb25zZSkge1xuICAgICAgdXNlclNjcm9sbGluZ1JlZi5jdXJyZW50ID0gZmFsc2VcbiAgICAgIHNjcm9sbFRocmVzaG9sZFJlZi5jdXJyZW50ID0gMzlcbiAgICB9XG4gIH0sIFt3YWl0aW5nUmVzcG9uc2VdKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFjaGF0SW5pdGlhbGl6ZWRSZWYuY3VycmVudCkge1xuICAgICAgY2hhdEluaXRpYWxpemVkUmVmLmN1cnJlbnQgPSB0cnVlXG4gICAgICBpbml0aWFsaXplQ2hhdCgpXG4gICAgfVxuICB9LCBbXSlcblxuICAvLyBBdXRvc2Nyb2xsIG1pZW50cmFzIGVsIHRleHRvIGRlbCBzdHJlYW0gY3JlY2UuIEVsIHRleHRvIHNlIHBpbnRhIGFsIHJpdG1vXG4gIC8vIGRlIGB1c2VTbW9vdGhTdHJlYW1UZXh0YCAofjYwZnBzKSwgbm8gYWwgcml0bW8gZGUgbGxlZ2FkYSBkZSB0b2tlbnMgZGVsXG4gIC8vIGJhY2tlbmQ6IHBvciBlc28gYWPDoSB1c2Ftb3MgdW4gbG9vcCBkZSByQUYgcXVlIGNvbXBhcmEgYHNjcm9sbEhlaWdodGBcbiAgLy8gY29udHJhIGVsIMO6bHRpbW8gdmFsb3Igb2JzZXJ2YWRvIHkgYWp1c3RhIHNvbG8gY3VhbmRvIGNhbWJpYS4gQXPDrSBlbFxuICAvLyBzY3JvbGwgcXVlZGEgcGVyZmVjdGFtZW50ZSBzaW5jcm9uaXphZG8gY29uIGxhIGFuaW1hY2nDs24gZGVsIHRleHRvIHNpblxuICAvLyBkZXBlbmRlciBkZSBsYSBjYWRlbmNpYSBkZWwgc3RyZWFtaW5nU3RvcmUuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKHdhaXRpbmdSZXNwb25zZSB8fCBpc1dyaXRpbmcpIHJldHVyblxuICAgIGlmIChyZXNlcnZlZFR1cm5JZFJlZi5jdXJyZW50KSBjbGVhclR1cm5TcGFjZSgpXG4gIH0sIFt3YWl0aW5nUmVzcG9uc2UsIGlzV3JpdGluZywgY2xlYXJUdXJuU3BhY2VdKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCF3YWl0aW5nUmVzcG9uc2UgJiYgIWlzV3JpdGluZykgcmV0dXJuIHVuZGVmaW5lZFxuICAgIGlmICghbWVzc2FnZXNSZWYuY3VycmVudCkgcmV0dXJuIHVuZGVmaW5lZFxuXG4gICAgbGV0IHJhZklkOiBudW1iZXIgfCBudWxsID0gbnVsbFxuICAgIGxldCBsYXN0SGVpZ2h0ID0gbWVzc2FnZXNSZWYuY3VycmVudC5zY3JvbGxIZWlnaHRcblxuICAgIGNvbnN0IHRpY2sgPSAoKSA9PiB7XG4gICAgICBjb25zdCBlbCA9IG1lc3NhZ2VzUmVmLmN1cnJlbnRcbiAgICAgIGlmICghZWwpIHtcbiAgICAgICAgcmFmSWQgPSBudWxsXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgICAgaWYgKHN5bmNUdXJuU3BhY2UoKSkge1xuICAgICAgICBsYXN0SGVpZ2h0ID0gZWwuc2Nyb2xsSGVpZ2h0XG4gICAgICAgIHJhZklkID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHRpY2spXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgICAgY29uc3QgY3VycmVudEhlaWdodCA9IGVsLnNjcm9sbEhlaWdodFxuICAgICAgaWYgKGN1cnJlbnRIZWlnaHQgIT09IGxhc3RIZWlnaHQpIHtcbiAgICAgICAgbGFzdEhlaWdodCA9IGN1cnJlbnRIZWlnaHRcbiAgICAgICAgaWYgKCF1c2VyU2Nyb2xsaW5nUmVmLmN1cnJlbnQpIHtcbiAgICAgICAgICBlbC5zY3JvbGxUb3AgPSBjdXJyZW50SGVpZ2h0XG4gICAgICAgIH1cbiAgICAgICAgdXBkYXRlU2Nyb2xsQm90dG9tVmlzaWJpbGl0eSgpXG4gICAgICB9XG4gICAgICByYWZJZCA9IHJlcXVlc3RBbmltYXRpb25GcmFtZSh0aWNrKVxuICAgIH1cblxuICAgIHJhZklkID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHRpY2spXG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGlmIChyYWZJZCAhPSBudWxsKSBjYW5jZWxBbmltYXRpb25GcmFtZShyYWZJZClcbiAgICB9XG4gIH0sIFt3YWl0aW5nUmVzcG9uc2UsIGlzV3JpdGluZywgc3luY1R1cm5TcGFjZSwgdXBkYXRlU2Nyb2xsQm90dG9tVmlzaWJpbGl0eV0pXG5cbiAgLy8gQWwgY29tZW56YXIgYSBlc3BlcmFyIGxhIHJlc3B1ZXN0YSBkZWwgYmFja2VuZCwgc2Nyb2xsIGluaWNpYWwgYWwgZm9uZG8uXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKHdhaXRpbmdSZXNwb25zZSAmJiBtZXNzYWdlc1JlZi5jdXJyZW50ICYmICFyZXNlcnZlZFR1cm5JZFJlZi5jdXJyZW50KSB7XG4gICAgICBzY3JvbGxUb0JvdHRvbVJhZih7IHNraXBJZlVzZXJTY3JvbGxpbmc6IHRydWUgfSlcbiAgICB9XG4gIH0sIFt3YWl0aW5nUmVzcG9uc2UsIHNjcm9sbFRvQm90dG9tUmFmXSlcblxuICBjb25zdCBsYXN0UmVzZXJ2ZWRRdWVzdGlvblJlZiA9IHVzZVJlZjxzdHJpbmcgfCBudWxsPihudWxsKVxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChsb2FkaW5nTWVzc2FnZXMgfHwgaXNMb2FkaW5nTW9yZU1lc3NhZ2VzKSByZXR1cm5cblxuICAgIGxldCBxdWVzdGlvbklkOiBzdHJpbmcgfCBudWxsID0gbnVsbFxuICAgIGZvciAobGV0IGluZGV4ID0gbWVzc2FnZXMubGVuZ3RoIC0gMTsgaW5kZXggPj0gMDsgaW5kZXggLT0gMSkge1xuICAgICAgaWYgKG1lc3NhZ2VzW2luZGV4XT8uaWQ/LnN0YXJ0c1dpdGgoJ3F1ZXN0aW9uLScpKSB7XG4gICAgICAgIHF1ZXN0aW9uSWQgPSBtZXNzYWdlc1tpbmRleF0uaWRcbiAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKCFxdWVzdGlvbklkIHx8IHF1ZXN0aW9uSWQgPT09IGxhc3RSZXNlcnZlZFF1ZXN0aW9uUmVmLmN1cnJlbnQpIHJldHVyblxuXG4gICAgbGFzdFJlc2VydmVkUXVlc3Rpb25SZWYuY3VycmVudCA9IHF1ZXN0aW9uSWRcbiAgICB1c2VyU2Nyb2xsaW5nUmVmLmN1cnJlbnQgPSBmYWxzZVxuICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiByZXNlcnZlVHVyblNwYWNlKHF1ZXN0aW9uSWQpKVxuICB9LCBbbWVzc2FnZXMsIGxvYWRpbmdNZXNzYWdlcywgaXNMb2FkaW5nTW9yZU1lc3NhZ2VzLCByZXNlcnZlVHVyblNwYWNlXSlcblxuICAvLyBTY3JvbGwgY3VhbmRvIGNhbWJpYW4gbG9zIG1lbnNhamVzOiBkaXN0aW5ndWUgXCJudWV2byBtZW5zYWplXCIgKGFncmVnYWRvKVxuICAvLyBkZSBcInJlZW1wbGF6b1wiIChtaXNtbyBpZC9sZW5ndGgsIGVqLiBmZWVkYmFjayBvIGFwcHJvdmFsU3RhdHVzKS4gRW5cbiAgLy8gcmVlbXBsYXpvcyBzb2xvIHNlIHJlY2FsY3VsYSBsYSB2aXNpYmlsaWRhZCBkZWwgYm90w7NuIHNpbiBmb3J6YXIgc2Nyb2xsLlxuICBjb25zdCBsYXN0TWVzc2FnZUlkUmVmID0gdXNlUmVmPHN0cmluZyB8IG51bGw+KG51bGwpXG4gIGNvbnN0IGxhc3RNZXNzYWdlc0xlbmd0aFJlZiA9IHVzZVJlZjxudW1iZXI+KDApXG5cbiAgLy8gQWwgY2FtYmlhciBkZSBzZXNpw7NuLCByZXNldGVhciBlc3RhZG8gZGUgc2Nyb2xsIG1hbnVhbCBwYXJhIG5vIGhlcmVkYXIgZWwgY2hhdCBhbnRlcmlvci5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICB3YXNMb2FkaW5nTWVzc2FnZXNSZWYuY3VycmVudCA9IGZhbHNlXG4gICAgbGFzdFNjcm9sbGVkU2Vzc2lvblJlZi5jdXJyZW50ID0gbnVsbFxuICAgIHVzZXJTY3JvbGxpbmdSZWYuY3VycmVudCA9IGZhbHNlXG4gICAgc2Nyb2xsVGhyZXNob2xkUmVmLmN1cnJlbnQgPSAzOVxuICAgIGxhc3RTY3JvbGxUb3BSZWYuY3VycmVudCA9IDBcbiAgICBsYXN0TWVzc2FnZUlkUmVmLmN1cnJlbnQgPSBudWxsXG4gICAgbGFzdE1lc3NhZ2VzTGVuZ3RoUmVmLmN1cnJlbnQgPSAwXG4gIH0sIFtpbml0aWFsQ2hhdElkXSlcblxuICAvLyBSZXN0YXVyYWNpw7NuIGRlc2RlIGNhY2hlIChzaW4gTG9hZGVyKTogYmFqYXIgYWwgZm9uZG8gYWwgcmVhYnJpciBzZXNpw7NuIHZpc2l0YWRhLlxuICB1c2VMYXlvdXRFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChsb2FkaW5nTWVzc2FnZXMgfHwgIWluaXRpYWxDaGF0SWQgfHwgbWVzc2FnZXMubGVuZ3RoID09PSAwKSByZXR1cm5cbiAgICBpZiAobGFzdFNjcm9sbGVkU2Vzc2lvblJlZi5jdXJyZW50ID09PSBpbml0aWFsQ2hhdElkKSByZXR1cm5cbiAgICBsYXN0U2Nyb2xsZWRTZXNzaW9uUmVmLmN1cnJlbnQgPSBpbml0aWFsQ2hhdElkXG5cbiAgICB1c2VyU2Nyb2xsaW5nUmVmLmN1cnJlbnQgPSBmYWxzZVxuICAgIHNjcm9sbFRocmVzaG9sZFJlZi5jdXJyZW50ID0gMzlcbiAgICBsYXN0TWVzc2FnZUlkUmVmLmN1cnJlbnQgPSBtZXNzYWdlc1ttZXNzYWdlcy5sZW5ndGggLSAxXT8uaWQgPz8gbnVsbFxuICAgIGxhc3RNZXNzYWdlc0xlbmd0aFJlZi5jdXJyZW50ID0gbWVzc2FnZXMubGVuZ3RoXG5cbiAgICBzY3JvbGxUb0JvdHRvbVJhZigpXG4gICAgc2Nyb2xsVG9Cb3R0b21SYWYoeyBkZWxheU1zOiAxMDAgfSlcbiAgfSwgW2luaXRpYWxDaGF0SWQsIGxvYWRpbmdNZXNzYWdlcywgbWVzc2FnZXMubGVuZ3RoLCBtZXNzYWdlcywgc2Nyb2xsVG9Cb3R0b21SYWZdKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFtZXNzYWdlc1JlZi5jdXJyZW50IHx8IGxvYWRpbmdNZXNzYWdlcyB8fCBpc0xvYWRpbmdNb3JlTWVzc2FnZXMgfHwgaXNMb2FkaW5nTW9yZVJlZi5jdXJyZW50KSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCBsYXN0TWVzc2FnZSA9IG1lc3NhZ2VzW21lc3NhZ2VzLmxlbmd0aCAtIDFdXG4gICAgY29uc3QgbGFzdElkID0gbGFzdE1lc3NhZ2U/LmlkID8/IG51bGxcbiAgICBjb25zdCBwcmV2SWQgPSBsYXN0TWVzc2FnZUlkUmVmLmN1cnJlbnRcbiAgICBjb25zdCBwcmV2TGVuID0gbGFzdE1lc3NhZ2VzTGVuZ3RoUmVmLmN1cnJlbnRcbiAgICBsYXN0TWVzc2FnZUlkUmVmLmN1cnJlbnQgPSBsYXN0SWRcbiAgICBsYXN0TWVzc2FnZXNMZW5ndGhSZWYuY3VycmVudCA9IG1lc3NhZ2VzLmxlbmd0aFxuXG4gICAgY29uc3QgaXNOZXdNZXNzYWdlID0gbGFzdElkICE9PSBwcmV2SWQgfHwgbWVzc2FnZXMubGVuZ3RoICE9PSBwcmV2TGVuXG4gICAgaWYgKCFpc05ld01lc3NhZ2UpIHtcbiAgICAgIHVwZGF0ZVNjcm9sbEJvdHRvbVZpc2liaWxpdHkoKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY29uc3QgY29udGFpbmVyID0gbWVzc2FnZXNSZWYuY3VycmVudFxuICAgIGNvbnN0IGlzQXRCb3R0b20gPSBjb250YWluZXIuc2Nyb2xsSGVpZ2h0IC0gY29udGFpbmVyLnNjcm9sbFRvcCA8PSBjb250YWluZXIuY2xpZW50SGVpZ2h0ICsgMTAwXG4gICAgY29uc3QgaGFzSW5pdGlhbE1lc3NhZ2UgPSBtZXNzYWdlcy5zb21lKG1zZyA9PiBtc2cuaWQgPT09ICd1c2VyLWluaXRpYWwtbWVzc2FnZScpXG4gICAgY29uc3QgaXNBcHByb3ZhbCA9ICEhbGFzdE1lc3NhZ2UgJiYgKGxhc3RNZXNzYWdlLmlkLnN0YXJ0c1dpdGgoJ2FwcHJvdmFsLScpIHx8ICEhbGFzdE1lc3NhZ2UuYXBwcm92YWwpXG4gICAgY29uc3QgaXNBbnN3ZXJPclF1ZXN0aW9uID1cbiAgICAgICEhbGFzdE1lc3NhZ2UgJiYgKGxhc3RNZXNzYWdlLmlkLnN0YXJ0c1dpdGgoJ2Fuc3dlci0nKSB8fCBsYXN0TWVzc2FnZS5pZC5zdGFydHNXaXRoKCdxdWVzdGlvbi0nKSlcblxuICAgIC8vIEFwcHJvdmFsOiBzZWN1ZW5jaWEgZGUgc2Nyb2xscyBjb24gZGVsYXkgcG9ycXVlIGVsIEFwcHJvdmFsQm94IG5lY2VzaXRhXG4gICAgLy8gdW4gdGljayBwYXJhIG1lZGlyc2UuIFNjcm9sbGVhIGF1bnF1ZSBlbCB1c3VhcmlvIG5vIGVzdMOpIGFsIGZvbmRvIHNpIG5vXG4gICAgLy8gZXN0w6Egc2Nyb2xsZWFuZG8gbWFudWFsbWVudGUuXG4gICAgaWYgKGlzQXBwcm92YWwgJiYgKGlzQXRCb3R0b20gfHwgIXVzZXJTY3JvbGxpbmdSZWYuY3VycmVudCkpIHtcbiAgICAgIGNsZWFyVHVyblNwYWNlKClcbiAgICAgIHNjcm9sbFRvQm90dG9tUmFmKClcbiAgICAgIHNjcm9sbFRvQm90dG9tUmFmKClcbiAgICAgIHNjcm9sbFRvQm90dG9tUmFmKHsgZGVsYXlNczogMTAwIH0pXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAocmVzZXJ2ZWRUdXJuSWRSZWYuY3VycmVudCkge1xuICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHN5bmNUdXJuU3BhY2UpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICAvLyBOdWV2b3MgYW5zd2VyL3F1ZXN0aW9uOiBzY3JvbGwgc2kgZWwgdXN1YXJpbyB5YSBlc3RhYmEgYWwgZm9uZG8uXG4gICAgaWYgKGlzQW5zd2VyT3JRdWVzdGlvbiAmJiBpc0F0Qm90dG9tKSB7XG4gICAgICBzY3JvbGxUb0JvdHRvbVJhZigpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICAvLyBDYXNvIGJvcmRlOiBjYW1iaW9zIGRlIG1lbnNhamVzIHNpbiBzZXIgbnVldm8gYW5zd2VyL3VzZXIvYXBwcm92YWxcbiAgICAvLyBwZXJvIHPDrSB1biBtZW5zYWplIG51ZXZvIChubyBlbCBcInVzZXItaW5pdGlhbC1tZXNzYWdlXCIpLiBTY3JvbGxlYS5cbiAgICBpZiAoIWlzQW5zd2VyT3JRdWVzdGlvbiAmJiAhaXNBcHByb3ZhbCAmJiAhaGFzSW5pdGlhbE1lc3NhZ2UgJiYgbWVzc2FnZXMubGVuZ3RoID4gcHJldkxlbikge1xuICAgICAgc2Nyb2xsVG9Cb3R0b21SYWYoKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgdXBkYXRlU2Nyb2xsQm90dG9tVmlzaWJpbGl0eSgpXG4gIH0sIFtcbiAgICBtZXNzYWdlcyxcbiAgICBsb2FkaW5nTWVzc2FnZXMsXG4gICAgaXNMb2FkaW5nTW9yZU1lc3NhZ2VzLFxuICAgIGNsZWFyVHVyblNwYWNlLFxuICAgIHNjcm9sbFRvQm90dG9tUmFmLFxuICAgIHN5bmNUdXJuU3BhY2UsXG4gICAgdXBkYXRlU2Nyb2xsQm90dG9tVmlzaWJpbGl0eSxcbiAgXSlcblxuICAvLyBBbCBhYnJpci9jYXJnYXIgdW5hIGNvbnZlcnNhY2nDs24gZWwgY29udGVuZWRvciBzZSByZW1vbnRhIChMb2FkZXIg4oaSIGxpc3RhKSBjb25cbiAgLy8gc2Nyb2xsVG9wPTAuIEZvcnphbW9zIGlyIGFsIGZvbmRvIGFsIHRlcm1pbmFyIGxvYWRNZXNzYWdlcywgc2luIGFmZWN0YXIgcGFnaW5hY2nDs24gaGFjaWEgYXJyaWJhLlxuICB1c2VMYXlvdXRFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IGp1c3RGaW5pc2hlZExvYWRpbmcgPSB3YXNMb2FkaW5nTWVzc2FnZXNSZWYuY3VycmVudCAmJiAhbG9hZGluZ01lc3NhZ2VzXG4gICAgd2FzTG9hZGluZ01lc3NhZ2VzUmVmLmN1cnJlbnQgPSBsb2FkaW5nTWVzc2FnZXNcblxuICAgIGlmICghanVzdEZpbmlzaGVkTG9hZGluZyB8fCBtZXNzYWdlcy5sZW5ndGggPT09IDApIHJldHVyblxuXG4gICAgdXNlclNjcm9sbGluZ1JlZi5jdXJyZW50ID0gZmFsc2VcbiAgICBzY3JvbGxUaHJlc2hvbGRSZWYuY3VycmVudCA9IDM5XG4gICAgbGFzdE1lc3NhZ2VJZFJlZi5jdXJyZW50ID0gbWVzc2FnZXNbbWVzc2FnZXMubGVuZ3RoIC0gMV0/LmlkID8/IG51bGxcbiAgICBsYXN0TWVzc2FnZXNMZW5ndGhSZWYuY3VycmVudCA9IG1lc3NhZ2VzLmxlbmd0aFxuXG4gICAgc2Nyb2xsVG9Cb3R0b21SYWYoKVxuICAgIHNjcm9sbFRvQm90dG9tUmFmKHsgZGVsYXlNczogMTAwIH0pXG4gIH0sIFtsb2FkaW5nTWVzc2FnZXMsIG1lc3NhZ2VzLmxlbmd0aCwgc2Nyb2xsVG9Cb3R0b21SYWZdKVxuXG4gIC8vIE9idGVuZXIgZWwgw7psdGltbyBtZW5zYWplIGRlbCB1c3VhcmlvIHBhcmEgdmVyaWZpY2FyIHNpIHRpZW5lIGF0dGFjaG1lbnRzXG4gIGNvbnN0IGxhc3RVc2VyTWVzc2FnZSA9IG1lc3NhZ2VzXG4gICAgLmZpbHRlcihtc2cgPT4gbXNnLnJvbGUgPT09IENoYXRIaXN0b3J5Um9sZS5VU0VSIHx8IG1zZy51c2VyLmlkID09PSBhdXRoVXNlci5pZC50b1N0cmluZygpKVxuICAgIC5hdCgtMSlcblxuICBjb25zdCBhdHRhY2htZW50c0NvdW50ID1cbiAgICAoQXJyYXkuaXNBcnJheShsYXN0VXNlck1lc3NhZ2U/LmF0dGFjaG1lbnRzKSA/IGxhc3RVc2VyTWVzc2FnZS5hdHRhY2htZW50cy5sZW5ndGggOiAwKSB8fFxuICAgIChBcnJheS5pc0FycmF5KGxhc3RVc2VyTWVzc2FnZT8uc291cmNlcykgPyBsYXN0VXNlck1lc3NhZ2Uuc291cmNlcy5sZW5ndGggOiAwKVxuXG4gIGNvbnN0IHN0cmVhbUxvYWRpbmdEaXNwbGF5ID0gcmVzb2x2ZVN0cmVhbUxvYWRpbmdEaXNwbGF5KHtcbiAgICBzdHJlYW1BY3Rpdml0eSxcbiAgICBsb2FkaW5nTWVzc2FnZSxcbiAgICBhY3RpdmVMb2FkaW5nczogYWN0aXZlTG9hZGluZ3MgfHwge30sXG4gICAgd2FpdGluZ1Jlc3BvbnNlLFxuICAgIGlzV2ViU2VhcmNoQWN0aXZlLFxuICAgIGlzRGVlcFNlYXJjaEFjdGl2ZSxcbiAgICBoYXNBdHRhY2htZW50czogQm9vbGVhbihhdHRhY2htZW50c0NvdW50KSxcbiAgICBhdHRhY2htZW50c0NvdW50LFxuICAgIHQsXG4gIH0pXG5cbiAgY29uc3QgaXNTY3JvbGxPblBhcmVudCA9ICEhZXhwYW5kZWRcbiAgY29uc3QgaXNNYXJrZXRwbGFjZUdsb2JhbEFnZW50ID0gaXNNYWlha2VyQWdlbnQoYWdlbnQpXG5cbiAgLy8gQWwgZXhwYW5kaXIvY29udHJhZXIgZWwgbW9kYWwgZWwgcmVmIHBhc2EgYSBvdHJvIGNvbnRlbmVkb3IgKHNjcm9sbFRvcCBzZSByZXNldGVhIGEgMCkuXG4gIC8vIFJlc3RhdXJhciBsYSBwb3NpY2nDs24gZGUgc2Nyb2xsIGFudGVzIGRlbCBwYWludCBwYXJhIGV2aXRhciBxdWUgbGEgY29udmVyc2FjacOzbiBzYWx0ZSBhcnJpYmEuXG4gIGNvbnN0IGV4cGFuZGVkUmVmID0gdXNlUmVmKGV4cGFuZGVkKVxuICB1c2VMYXlvdXRFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChleHBhbmRlZFJlZi5jdXJyZW50ICE9PSBleHBhbmRlZCAmJiBtZXNzYWdlc1JlZi5jdXJyZW50KSB7XG4gICAgICBjb25zdCBzYXZlZFNjcm9sbFRvcCA9IGxhc3RTY3JvbGxUb3BSZWYuY3VycmVudFxuICAgICAgbWVzc2FnZXNSZWYuY3VycmVudC5zY3JvbGxUb3AgPSBzYXZlZFNjcm9sbFRvcFxuICAgICAgZXhwYW5kZWRSZWYuY3VycmVudCA9IGV4cGFuZGVkXG4gICAgfSBlbHNlIHtcbiAgICAgIGV4cGFuZGVkUmVmLmN1cnJlbnQgPSBleHBhbmRlZFxuICAgIH1cbiAgfSwgW2V4cGFuZGVkXSlcblxuICBpZiAobG9hZGluZ01lc3NhZ2VzKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxGYWRlIGZpbGw+XG4gICAgICAgIDxMb2FkZXIgLz5cbiAgICAgIDwvRmFkZT5cbiAgICApXG4gIH1cblxuICBjb25zdCBpc0Fzc2lzdGFudEF0ID0gKGluZGV4OiBudW1iZXIpOiBib29sZWFuID0+IHtcbiAgICBjb25zdCBtZXNzYWdlID0gbWVzc2FnZXNbaW5kZXhdXG4gICAgaWYgKCFtZXNzYWdlKSByZXR1cm4gZmFsc2VcbiAgICByZXR1cm4gbWVzc2FnZS5yb2xlID09PSBDaGF0SGlzdG9yeVJvbGUuQVNTSVNUQU5UIHx8IG1lc3NhZ2UudXNlci5pZCA9PT0gJ2Fzc2lzdGFudCdcbiAgfVxuXG4gIGNvbnN0IGxhc3RNZXNzYWdlID0gbWVzc2FnZXNbbWVzc2FnZXMubGVuZ3RoIC0gMV1cbiAgY29uc3QgaGFzTWVzc2FnZUxldmVsSW5kaWNhdG9yID1cbiAgICAhIWxhc3RNZXNzYWdlICYmIGlzU3RyZWFtaW5nUGxhY2Vob2xkZXJNZXNzYWdlSWQobGFzdE1lc3NhZ2UuaWQpICYmICh3YWl0aW5nUmVzcG9uc2UgfHwgaXNXcml0aW5nKVxuXG4gIGNvbnN0IG1lc3NhZ2VzQ29udGVudCA9IChcbiAgICA8PlxuICAgICAge2lzTG9hZGluZ01vcmVNZXNzYWdlcyAmJiA8TG9hZGluZ1RleHQgdGV4dD17dCgnY2hhdC5sb2FkaW5nTW9yZScpfSAvPn1cbiAgICAgIDw+XG4gICAgICAgIHttZXNzYWdlcy5tYXAoKG1lc3NhZ2UsIGluZGV4KSA9PiB7XG4gICAgICAgICAgY29uc3QgaXNBc3Npc3RhbnRNZXNzYWdlID0gbWVzc2FnZS5yb2xlID09PSBDaGF0SGlzdG9yeVJvbGUuQVNTSVNUQU5UIHx8IG1lc3NhZ2UudXNlci5pZCA9PT0gJ2Fzc2lzdGFudCdcbiAgICAgICAgICBjb25zdCBpc0xhc3RNZXNzYWdlID0gaW5kZXggPT09IG1lc3NhZ2VzLmxlbmd0aCAtIDFcbiAgICAgICAgICBjb25zdCBpc1N0cmVhbWluZ1BsYWNlaG9sZGVyID1cbiAgICAgICAgICAgIGlzQXNzaXN0YW50TWVzc2FnZSAmJiBpc0xhc3RNZXNzYWdlICYmIGlzU3RyZWFtaW5nUGxhY2Vob2xkZXJNZXNzYWdlSWQobWVzc2FnZS5pZClcbiAgICAgICAgICBjb25zdCBpc1N0cmVhbWluZyA9IGlzU3RyZWFtaW5nUGxhY2Vob2xkZXIgJiYgKHdhaXRpbmdSZXNwb25zZSB8fCBpc1dyaXRpbmcpXG5cbiAgICAgICAgICAvLyBObyBmaWx0cmFyIGVsIHBsYWNlaG9sZGVyIGRlbCBtZW5zYWplIGVuIHN0cmVhbWluZzogc3UgdGV4dG8gdml2ZVxuICAgICAgICAgIC8vIGVuIGVsIHN0cmVhbWluZ1N0b3JlIHkgYG1lc3NhZ2UubWVzc2FnZWAgZXMgJycgaGFzdGEgZWwgY29tcGxldGUuXG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgIWlzU3RyZWFtaW5nUGxhY2Vob2xkZXIgJiZcbiAgICAgICAgICAgICFpc1N0cmVhbWluZyAmJlxuICAgICAgICAgICAgIShtZXNzYWdlLmF0dGFjaG1lbnRzPy5sZW5ndGggfHwgbWVzc2FnZS5zb3VyY2VzPy5sZW5ndGgpICYmXG4gICAgICAgICAgICAhbWVzc2FnZS5tZXNzYWdlICYmXG4gICAgICAgICAgICAhbWVzc2FnZS5wcm9qZWN0Py5uYW1lICYmXG4gICAgICAgICAgICAhbWVzc2FnZS5hcHByb3ZhbFxuICAgICAgICAgIClcbiAgICAgICAgICAgIHJldHVybiBudWxsXG5cbiAgICAgICAgICBjb25zdCBtZXNzYWdlRmVlZGJhY2sgPVxuICAgICAgICAgICAgbWVzc2FnZT8ud2FzSGVscGZ1bCA9PT0gdW5kZWZpbmVkIHx8IG1lc3NhZ2Uud2FzSGVscGZ1bCA9PT0gbnVsbFxuICAgICAgICAgICAgICA/IG51bGxcbiAgICAgICAgICAgICAgOiBtZXNzYWdlLndhc0hlbHBmdWxcbiAgICAgICAgICAgICAgICA/IEZlZWRiYWNrLlRIVU1CU19VUFxuICAgICAgICAgICAgICAgIDogRmVlZGJhY2suVEhVTUJTX0RPV05cblxuICAgICAgICAgIC8vIEtleSBlc3RhYmxlOiBzb2xvIG1lc3NhZ2UuaWQgcGFyYSBldml0YXIgcmVtb3VudCBkdXJhbnRlIHN0cmVhbWluZyAobWVzc2FnZS5kYXRlIHB1ZWRlIGNhbWJpYXIpXG4gICAgICAgICAgY29uc3QgbWVzc2FnZUtleSA9IG1lc3NhZ2UuaWQgPz8gYG1zZy0ke2luZGV4fWBcblxuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8TWVzc2FnZUl0ZW1cbiAgICAgICAgICAgICAgey4uLm1lc3NhZ2V9XG4gICAgICAgICAgICAgIGtleT17bWVzc2FnZUtleX1cbiAgICAgICAgICAgICAgYXV0aFVzZXI9e2F1dGhVc2VyfVxuICAgICAgICAgICAgICBoYW5kbGVTZWxlY3RPcHRpb249e2hhbmRsZVNlbGVjdE9wdGlvbn1cbiAgICAgICAgICAgICAgaGFuZGxlRmVlZGJhY2s9e2hhbmRsZUZlZWRiYWNrfVxuICAgICAgICAgICAgICBoYW5kbGVBcHByb3ZhbERlY2lzaW9uPXtoYW5kbGVBcHByb3ZhbERlY2lzaW9uV2l0aFNjcm9sbH1cbiAgICAgICAgICAgICAgaGFuZGxlU3VnZ2VzdGlvbkNsaWNrPXtoYW5kbGVTdWdnZXN0aW9uQ2xpY2t9XG4gICAgICAgICAgICAgIGhhc1NlbGVjdGVkU3VnZ2VzdGlvbj17ISFzZWxlY3RlZFN1Z2dlc3Rpb25NZXNzYWdlSWRzW21lc3NhZ2UuaWRdfVxuICAgICAgICAgICAgICBkaXNhYmxlRmVlZGJhY2s9e21lc3NhZ2VGZWVkYmFja31cbiAgICAgICAgICAgICAgaXNTdHJlYW1pbmc9e2lzU3RyZWFtaW5nfVxuICAgICAgICAgICAgICBpc0xhc3RNZXNzYWdlPXtpc0xhc3RNZXNzYWdlfVxuICAgICAgICAgICAgICBzaG93QWdlbnRIZWFkZXI9e2lzQXNzaXN0YW50TWVzc2FnZSAmJiAhaXNBc3Npc3RhbnRBdChpbmRleCAtIDEpfVxuICAgICAgICAgICAgICBleHBhbmRlZD17ZXhwYW5kZWR9XG4gICAgICAgICAgICAgIHN0cmVhbUFjdGl2aXR5PXtpc1N0cmVhbWluZyA/IHN0cmVhbUxvYWRpbmdEaXNwbGF5IDogbnVsbH1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgKVxuICAgICAgICB9KX1cbiAgICAgIDwvPlxuICAgICAgeyFoYXNNZXNzYWdlTGV2ZWxJbmRpY2F0b3IgJiYgc3RyZWFtTG9hZGluZ0Rpc3BsYXkgJiYgKFxuICAgICAgICA8U0NMb2FkaW5nTWVzc2FnZXNDb2x1bW4+XG4gICAgICAgICAgPEFnZW50QWN0aXZpdHlJbmRpY2F0b3IgYWN0aXZpdHk9e3N0cmVhbUxvYWRpbmdEaXNwbGF5fSAvPlxuICAgICAgICA8L1NDTG9hZGluZ01lc3NhZ2VzQ29sdW1uPlxuICAgICAgKX1cbiAgICAgIHsvKiBFc3BhY2lvIHF1ZSBsZSBwZXJtaXRlIGEgbGEgcHJlZ3VudGEgc3ViaXIgYWwgdG9wZS4gQWx0dXJhIG1hbmVqYWRhXG4gICAgICAgICAgaW1wZXJhdGl2YW1lbnRlIGRlc2RlIGBzZXRTcGFjZXJIZWlnaHRgOyBhcnJhbmNhIGVuIDAuICovfVxuICAgICAgPFNDVHVyblNwYWNlciByZWY9e3NwYWNlckVsUmVmfSBhcmlhLWhpZGRlbj1cInRydWVcIiAvPlxuICAgIDwvPlxuICApXG5cbiAgcmV0dXJuIChcbiAgICA8U0NNZXNzYWdlc091dGVyICRzY3JvbGxPblBhcmVudD17aXNTY3JvbGxPblBhcmVudH0+XG4gICAgICB7aXNTY3JvbGxPblBhcmVudCA/IChcbiAgICAgICAgPFNDTWVzc2FnZXNTY3JvbGwgcmVmPXttZXNzYWdlc1JlZn0gb25TY3JvbGw9e2hhbmRsZVNjcm9sbFRvQm90dG9tfT5cbiAgICAgICAgICA8U0NNZXNzYWdlc0lubmVyICRzY3JvbGxPblBhcmVudD17aXNTY3JvbGxPblBhcmVudH0gJGlzTWFya2V0cGxhY2VHbG9iYWw9e2lzTWFya2V0cGxhY2VHbG9iYWxBZ2VudH0+XG4gICAgICAgICAgICB7bWVzc2FnZXNDb250ZW50fVxuICAgICAgICAgIDwvU0NNZXNzYWdlc0lubmVyPlxuICAgICAgICA8L1NDTWVzc2FnZXNTY3JvbGw+XG4gICAgICApIDogKFxuICAgICAgICA8U0NNZXNzYWdlc0lubmVyXG4gICAgICAgICAgcmVmPXttZXNzYWdlc1JlZn1cbiAgICAgICAgICBvblNjcm9sbD17aGFuZGxlU2Nyb2xsVG9Cb3R0b219XG4gICAgICAgICAgJHNjcm9sbE9uUGFyZW50PXtmYWxzZX1cbiAgICAgICAgICAkaXNNYXJrZXRwbGFjZUdsb2JhbD17aXNNYXJrZXRwbGFjZUdsb2JhbEFnZW50fVxuICAgICAgICA+XG4gICAgICAgICAge21lc3NhZ2VzQ29udGVudH1cbiAgICAgICAgPC9TQ01lc3NhZ2VzSW5uZXI+XG4gICAgICApfVxuXG4gICAgICB7c2hvd1Njcm9sbFRvQm90dG9tICYmIChcbiAgICAgICAgPFNjcm9sbFRvQm90dG9tQnV0dG9uIHR5cGU9XCJidXR0b25cIiBvbkNsaWNrPXtoYW5kbGVDbGlja1Njcm9sbFRvQm90dG9tfT5cbiAgICAgICAgICA8QXJyb3dTbWFsbERvd24gY29sb3I9XCIjNjY2XCIgd2lkdGg9XCIyMHB4XCIgaGVpZ2h0PVwiMjBweFwiIC8+XG4gICAgICAgIDwvU2Nyb2xsVG9Cb3R0b21CdXR0b24+XG4gICAgICApfVxuICAgIDwvU0NNZXNzYWdlc091dGVyPlxuICApXG59XG5cbmV4cG9ydCBjb25zdCBDaGF0QUlNZXNzYWdlcyA9IFJlYWN0Lm1lbW8oQ2hhdEFJTWVzc2FnZXNJbm5lcilcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU9BLEtBQUssSUFBUUMsSUFBSSxFQUFhQyxXQUFXLEVBQUVDLFNBQVMsRUFBRUMsZUFBZSxFQUFFQyxNQUFNLEVBQUVDLFFBQVEsRUFBQUMsYUFBQSxJQUFBQyxjQUFBLFFBQVEsT0FBTztBQUM3RyxTQUFTQyxjQUFjLFFBQVEsaURBQWlEO0FBQ2hGLFNBQVNDLFFBQVEsUUFBUSw0QkFBNEI7QUFFckQsU0FBU0MsY0FBYyxRQUFRLDJDQUEyQztBQUMxRSxTQUFTQyxXQUFXLFFBQVEscUNBQXFDO0FBQ2pFLFNBQVNDLHNCQUFzQixRQUFRLG9DQUFvQztBQUMzRSxTQUFTQyxtQkFBbUIsUUFBUSxnREFBZ0Q7QUFDcEYsU0FBU0MsY0FBYyxRQUFRLDRCQUE0QjtBQUczRCxTQUFzQkMsZUFBZSxRQUFRLHFCQUFxQjtBQUNsRSxTQUFTQyxzQkFBc0IsRUFBRUMsZ0JBQWdCLFFBQVEsc0NBQXNDO0FBRS9GLFNBQVNDLG1CQUFtQixFQUFFQyxjQUFjLFFBQVEsaUNBQWlDO0FBQ3JGLFNBQWtCQyxPQUFPLFFBQVEsMkJBQTJCO0FBRTVELFNBQVNDLElBQUksUUFBUSxxQkFBcUI7QUFDMUMsU0FBU0MsY0FBYyxRQUFRLDhDQUE4QztBQUM3RSxTQUFTQyxtQkFBbUIsUUFBUSxvQ0FBb0M7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
|
|
1042
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSZWFjdCIsIm1lbW8iLCJ1c2VDYWxsYmFjayIsInVzZUVmZmVjdCIsInVzZUxheW91dEVmZmVjdCIsInVzZVJlZiIsInVzZVN0YXRlIiwiY3JlYXRlRWxlbWVudCIsIl9jcmVhdGVFbGVtZW50IiwiQXJyb3dTbWFsbERvd24iLCJBdHRhY2htZW50Q2FyZCIsIkFwcHJvdmFsQm94IiwiQXR0YWNobWVudFByZXZpZXdNb2RhbCIsIkF0dGFjaG1lbnRDYXJkQXVkaW8iLCJNYWlhU3RyZWFtZG93biIsIkNoYXRIaXN0b3J5Um9sZSIsInJlbmRlclRleHRXaXRoTWVudGlvbnMiLCJoYXNJbmxpbmVNYXJrZXJzIiwiaXNNYWlha2VyQWdlbnQiLCJ1c2VVc2VyIiwidXNlVCIsInVzZUNoYXRNYW5hZ2VyIiwidXNlU21vb3RoU3RyZWFtVGV4dCIsInVzZVN0cmVhbWluZ01lc3NhZ2UiLCJMb2FkaW5nVGV4dCIsIkFnZW50QWN0aXZpdHlJbmRpY2F0b3IiLCJSZWFzb25pbmdCbG9jayIsImlzU3RyZWFtaW5nUGxhY2Vob2xkZXJNZXNzYWdlSWQiLCJyZXNvbHZlU3RyZWFtTG9hZGluZ0Rpc3BsYXkiLCJMb2FkZXIiLCJGYWRlIiwiTWVzc2FnZUZyb21Vc2VyIiwiTWVzc2FnZUZyb21PdGhlciIsIk1lc3NhZ2VDb250ZW50RnJvbVVzZXIiLCJNZXNzYWdlQ29udGVudEZyb21PdGhlciIsIk1lc3NhZ2VGZWVkYmFjayIsIlNDQ0FJTWVzc2FnZVdyYXBwZXIiLCJTY3JvbGxUb0JvdHRvbUJ1dHRvbiIsIlNDTWVzc2FnZXNPdXRlciIsIlNDTWVzc2FnZXNTY3JvbGwiLCJTQ01lc3NhZ2VzSW5uZXIiLCJTQ1R1cm5TcGFjZXIiLCJTQ09wdGlvbnNMaXN0IiwiU0NPcHRpb25JdGVtIiwiU0NNZXNzYWdlSXRlbVdyYXBwZXIiLCJTQ01lc3NhZ2VJdGVtSW5uZXIiLCJTQ0F0dGFjaG1lbnRzUm93IiwiU0NBcHByb3ZhbEFjdGlvbnNDb2x1bW4iLCJTQ0xvYWRpbmdNZXNzYWdlc0NvbHVtbiIsIlNDTWVzc2FnZXNHcmFkaWVudFRvcCIsIlNDTWVzc2FnZXNHcmFkaWVudEJvdHRvbSIsIkZlZWRiYWNrIiwidXNlR2xvYmFsQ29udGV4dCIsIkVudGl0eUxpbmtDdXN0b21MaW5rIiwiZ2V0RW50aXR5TGlua1dyYXBwZXJDbGFzc05hbWUiLCJDaGF0QUlTdWdnZXN0aW9ucyIsIkNoYXRBSUNyZWF0ZUFnZW50QWN0aW9ucyIsIkVWRU5UUyIsInVzZUV2ZW50IiwiZG93bmxvYWRGaWxlRnJvbVVybCIsImpzeCIsIl9qc3giLCJGcmFnbWVudCIsIl9GcmFnbWVudCIsImpzeHMiLCJfanN4cyIsInR1cm5BbmNob3JPZmZzZXQiLCJ2aWV3cG9ydEhlaWdodCIsIk1hdGgiLCJtaW4iLCJUVVJOX1NDUk9MTF9EVVJBVElPTl9NUyIsIk1lc3NhZ2VXcmFwcGVyIiwiX3JlZiIsImlzQ3VycmVudFVzZXIiLCJjaGlsZHJlbiIsInByb3BzIiwiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwiX2V4Y2x1ZGVkIiwiTWVzc2FnZUNvbXBvbmVudCIsIl9vYmplY3RTcHJlYWQiLCJNZXNzYWdlQ29udGVudFdyYXBwZXIiLCJfcmVmMiIsIl9leGNsdWRlZDIiLCJNZXNzYWdlQ29udGVudENvbXBvbmVudCIsIk1lc3NhZ2VPcHRpb25zIiwiX3JlZjMiLCJvcHRpb25zIiwiaGFuZGxlU2VsZWN0T3B0aW9uIiwiX3VzZVN0YXRlIiwiX3VzZVN0YXRlMiIsIl9zbGljZWRUb0FycmF5Iiwic2VsZWN0ZWRPcHRpb24iLCJzZXRTZWxlY3RlZE9wdGlvbiIsImhhbmRsZVNlbGVjdCIsIm9wdGlvbiIsIm1hcCIsIiRoYXNTZWxlY3Rpb24iLCIkZGltbWVkIiwiaWQiLCJvbkNsaWNrIiwibmFtZSIsIlN0cmVhbWluZ01lc3NhZ2VCb2R5IiwiX3Byb3BzJGNyZWF0ZUFnZW50Rm9sIiwiX3Byb3BzJHN1Z2dlc3Rpb25zIiwic3RyZWFtaW5nVGV4dCIsImlzU3RyZWFtaW5nIiwibWVzc2FnZUlkIiwicmF3VGV4dCIsIm1lc3NhZ2UiLCJ3aW5GbGFncyIsIndpbmRvdyIsImRpc3BsYXlUZXh0IiwiZW5hYmxlZCIsIm1heENoYXJzUGVyRnJhbWUiLCJzbmFwVG9Xb3JkQm91bmRhcnkiLCJzdHJlYW1MYWdNcyIsInRhcmdldExhZ01zIiwic3RyZWFtQWRhcHQiLCJhZGFwdFRvQmFja2VuZFJhdGUiLCJzdHJlYW1CdWZmZXJNcyIsInRhcmdldEJ1ZmZlck1zIiwic3RyZWFtTWluQnVmZmVyIiwibWluQnVmZmVyQ2hhcnMiLCJzdHJlYW1XYXJtdXBNcyIsIndhcm11cE1zIiwiY3JlYXRlQWdlbnRBY3Rpb25zQWdlbnRJZCIsImNyZWF0ZUFnZW50Rm9sbG93VXAiLCJhZ2VudElkIiwiaGFzTWVudGlvbnMiLCJtZW50aW9uTm9kZXMiLCJpc0Zyb250ZW5kQ2FuY2VsbGVkIiwiY2xhc3NOYW1lIiwic3R5bGUiLCJkaXNwbGF5IiwidmFyaWFudCIsImNvbXBvbmVudHMiLCJhIiwiaXNBbmltYXRpbmciLCJpc0Fzc2lzdGFudCIsImlzRXJyb3IiLCJhcHByb3ZhbCIsImNvbnRlbnQiLCJzb3VyY2VzIiwiaGFuZGxlRmVlZGJhY2siLCJoYW5kbGVGZWVkYmFja0NsaWNrIiwiZGlzYWJsZUZlZWRiYWNrIiwic3VnZ2VzdGlvbnMiLCJsZW5ndGgiLCJvblNlbGVjdFN1Z2dlc3Rpb24iLCJzdWdnZXN0aW9uIiwiaGFuZGxlU3VnZ2VzdGlvbkNsaWNrIiwiZGlzYWJsZWQiLCJzdWdnZXN0aW9uc0Rpc2FibGVkIiwiaGlkZGVuIiwiaXNMYXN0TWVzc2FnZSIsIk1lc3NhZ2VJdGVtIiwiX3Byb3BzJHJlYXNvbmluZyIsIl9wcm9wcyRwcm9qZWN0TWV0YWRhdCIsInVzZXIiLCJhdXRoVXNlciIsImlzQ2hhbmdlUHJvamVjdCIsImhhbmRsZUFwcHJvdmFsRGVjaXNpb24iLCJyb2xlIiwiYXR0YWNobWVudHMiLCJhcHByb3ZhbFN0YXR1cyIsImhhc1NlbGVjdGVkU3VnZ2VzdGlvbiIsInN0cmVhbUFjdGl2aXR5IiwiX3VzZVN0YXRlMyIsIl91c2VTdGF0ZTQiLCJwcmV2aWV3QXR0YWNobWVudCIsInNldFByZXZpZXdBdHRhY2htZW50IiwiVVNFUiIsInRvU3RyaW5nIiwiQVNTSVNUQU5UIiwiaXNTdHJlYW1pbmdQbGFjZWhvbGRlciIsImlzQWN0aXZlU3RyZWFtaW5nIiwiaGFzU3RyZWFtVGV4dCIsIkJvb2xlYW4iLCJtZXNzYWdlQXR0YWNobWVudHMiLCJBcnJheSIsImlzQXJyYXkiLCJoYW5kbGVBdHRhY2htZW50Q2xpY2siLCJhdHRhY2htZW50IiwiZmlsZSIsIkZpbGUiLCJvcmlnaW5hbEZpbGUiLCJ1cmxfdGh1bWJuYWlsIiwidXJsX29yaWdpbmFsIiwidXJsX2ZpbGUiLCJoYW5kbGVDbG9zZVByZXZpZXciLCJoYW5kbGVBdHRhY2htZW50RG93bmxvYWQiLCJfcmVmNCIsIl9hc3luY1RvR2VuZXJhdG9yIiwiX3JlZ2VuZXJhdG9yUnVudGltZSIsIm1hcmsiLCJfY2FsbGVlIiwiZXh0ZW5zaW9uIiwiZmlsZU5hbWUiLCJmaWxlVXJsIiwiYmxvYlVybCIsImRvd25sb2FkZWRGaWxlIiwibGluayIsIl90Iiwid3JhcCIsIl9jb250ZXh0IiwicHJldiIsIm5leHQiLCJpbmNsdWRlcyIsImNvbmNhdCIsInR5cGUiLCJzZW50IiwiVVJMIiwiY3JlYXRlT2JqZWN0VVJMIiwiYWJydXB0IiwiZG9jdW1lbnQiLCJocmVmIiwiZG93bmxvYWQiLCJib2R5IiwiYXBwZW5kQ2hpbGQiLCJjbGljayIsInNldFRpbWVvdXQiLCJyZW1vdmVDaGlsZCIsInJldm9rZU9iamVjdFVSTCIsImNvbnNvbGUiLCJlcnJvciIsInN0b3AiLCJfeCIsImFwcGx5IiwiYXJndW1lbnRzIiwiaGFzRmVlZGJhY2siLCIkaXNBc3Npc3RhbnQiLCJtZXNzYWdlRXh0cmFDb250ZW50IiwiZmVlZGJhY2siLCJzZXNzaW9uSWQiLCJzcGxpdCIsImZpbHRlciIsInF1ZXN0aW9uSWQiLCJqb2luIiwidHJhY2UiLCJyZWFzb25pbmciLCJpbmRleCIsIl9hdHRhY2htZW50JHR5cGUiLCJfYXR0YWNobWVudCRuYW1lIiwiYXR0YWNobWVudFR5cGUiLCJ0b0xvd2VyQ2FzZSIsImF0dGFjaG1lbnROYW1lIiwiaXNBdWRpb0ZpbGUiLCJzdGFydHNXaXRoIiwic29tZSIsImV4dCIsImVuZHNXaXRoIiwicG9zaXRpb25JbmRleCIsIm9uRG93bmxvYWQiLCJhY3Rpdml0eSIsInBlbmRpbmdfYWN0aW9ucyIsImFjdGlvbnMiLCJzdGF0dXMiLCJvbkFwcHJvdmUiLCJ0aHJlYWRJZHMiLCJvblJlamVjdCIsImlzUHJvamVjdERlbGV0ZWQiLCJwcm9qZWN0TWV0YWRhdGEiLCJpc19kZWxldGVkIiwiaXNFeHBhbmRlZCIsImV4cGFuZGVkIiwiaGl0bEluc3RhbmNlSWQiLCJvcmlnaW5hbF90aHJlYWRfaWQiLCJ3YXJuaW5nTWVzc2FnZSIsIndhcm5pbmdfbWVzc2FnZSIsIm1hbnVhbEFwcHJvdmFsRGV0ZWN0ZWQiLCJtYW51YWxfYXBwcm92YWxfZGV0ZWN0ZWQiLCJpc09wZW4iLCJvbkNsb3NlIiwiQ2hhdEFJTWVzc2FnZXNJbm5lciIsIl9yZWY1IiwidXNlckluaXRpYWxNZXNzYWdlIiwiaW5pdGlhbENoYXRJZCIsIm9uRXJyb3IiLCJvblNlbmRNZXNzYWdlUmVhZHkiLCJvblNjcm9sbFRvQm90dG9tIiwiYWdlbnRzIiwiX3VzZVQiLCJ0IiwiX3VzZUdsb2JhbENvbnRleHQiLCJpc1dlYlNlYXJjaEFjdGl2ZSIsImlzRGVlcFNlYXJjaEFjdGl2ZSIsImFnZW50IiwiZXZlbnQiLCJtZXNzYWdlc1JlZiIsImNoYXRJbml0aWFsaXplZFJlZiIsImlzTG9hZGluZ01vcmVSZWYiLCJ1c2VyU2Nyb2xsaW5nUmVmIiwic2Nyb2xsVGhyZXNob2xkUmVmIiwibGFzdFNjcm9sbFRvcFJlZiIsInNob3dTY3JvbGxUb0JvdHRvbVJlZiIsInNob3dUb3BHcmFkaWVudFJlZiIsInNob3dCb3R0b21HcmFkaWVudFJlZiIsInNjcm9sbFJhZlJlZiIsImFuY2hvcmVkVHVybklkUmVmIiwic3BhY2VyRWxSZWYiLCJzcGFjZXJIZWlnaHRSZWYiLCJ0dXJuU2Nyb2xsUmFmUmVmIiwid2FzTG9hZGluZ01lc3NhZ2VzUmVmIiwibGFzdFNjcm9sbGVkU2Vzc2lvblJlZiIsIl91c2VTdGF0ZTUiLCJfdXNlU3RhdGU2Iiwic2hvd1Njcm9sbFRvQm90dG9tIiwic2V0U2hvd1Njcm9sbFRvQm90dG9tIiwiX3VzZVN0YXRlNyIsIl91c2VTdGF0ZTgiLCJzaG93VG9wR3JhZGllbnQiLCJzZXRTaG93VG9wR3JhZGllbnQiLCJfdXNlU3RhdGU5IiwiX3VzZVN0YXRlMCIsInNob3dCb3R0b21HcmFkaWVudCIsInNldFNob3dCb3R0b21HcmFkaWVudCIsIl91c2VTdGF0ZTEiLCJfdXNlU3RhdGUxMCIsInNlbGVjdGVkU3VnZ2VzdGlvbk1lc3NhZ2VJZHMiLCJzZXRTZWxlY3RlZFN1Z2dlc3Rpb25NZXNzYWdlSWRzIiwiX3VzZUNoYXRNYW5hZ2VyIiwiY2hhdElkIiwidW5kZWZpbmVkIiwibWVzc2FnZXMiLCJsb2FkaW5nTWVzc2FnZXMiLCJpc0xvYWRpbmdNb3JlTWVzc2FnZXMiLCJ3YWl0aW5nUmVzcG9uc2UiLCJpc1dyaXRpbmciLCJsb2FkaW5nTWVzc2FnZSIsImFjdGl2ZUxvYWRpbmdzIiwic2VuZE1lc3NhZ2UiLCJjaGFuZ2VQcm9qZWN0IiwiaW5pdGlhbGl6ZUNoYXQiLCJoYW5kbGVTY3JvbGwiLCJzdG9wR2VuZXJhdGlvbiIsInVwZGF0ZVNjcm9sbEFmZm9yZGFuY2VzIiwiZWwiLCJjdXJyZW50Iiwic2Nyb2xsVG9wIiwic2Nyb2xsSGVpZ2h0IiwiY2xpZW50SGVpZ2h0IiwiZGlzdGFuY2VGcm9tQm90dG9tIiwic2hvdWxkU2hvdyIsIm5leHRUb3BHcmFkaWVudCIsIm5leHRCb3R0b21HcmFkaWVudCIsInNjcm9sbFRvQm90dG9tUmFmIiwib3B0cyIsIl9vcHRzJHNraXBJZlVzZXJTY3JvbCIsInNraXBJZlVzZXJTY3JvbGxpbmciLCJfb3B0cyRkZWxheU1zIiwiZGVsYXlNcyIsInJ1biIsInJlcXVlc3RBbmltYXRpb25GcmFtZSIsImNhbmNlbFR1cm5TY3JvbGwiLCJjYW5jZWxBbmltYXRpb25GcmFtZSIsImFuaW1hdGVTY3JvbGxUbyIsInRvcCIsImZyb20iLCJkaXN0YW5jZSIsImFicyIsInN0YXJ0ZWRBdCIsInBlcmZvcm1hbmNlIiwibm93Iiwic3RlcCIsInByb2dyZXNzIiwiZWFzZWQiLCJwb3ciLCJzZXRTcGFjZXJIZWlnaHQiLCJoZWlnaHQiLCJjbGVhclR1cm5TcGFjZSIsIm1lYXN1cmVUdXJuIiwic3BhY2VyRWwiLCJxdWVzdGlvbkVsIiwicXVlcnlTZWxlY3RvciIsImNvbnRhaW5lclRvcCIsImdldEJvdW5kaW5nQ2xpZW50UmVjdCIsInF1ZXN0aW9uVG9wIiwiY29udGVudEJvdHRvbSIsInR1cm5IZWlnaHQiLCJyZXNlcnZlVHVyblNwYWNlIiwibWVhc3VyZWQiLCJvZmZzZXQiLCJ0YXJnZXRTY3JvbGxUb3AiLCJtYXgiLCJzeW5jVHVyblNwYWNlIiwicmVzZXJ2ZWQiLCJoYW5kbGVDbGlja1Njcm9sbFRvQm90dG9tIiwic2Nyb2xsVG8iLCJiZWhhdmlvciIsImhhbmRsZVNjcm9sbFRvQm90dG9tIiwiZSIsImNvbnRhaW5lciIsImN1cnJlbnRUYXJnZXQiLCJpc1Njcm9sbGluZ1VwIiwiaXNOZWFyQm90dG9tIiwic2VuZE1lc3NhZ2VSZWYiLCJzdG9wR2VuZXJhdGlvblJlZiIsIm9uU2VuZE1lc3NhZ2VSZWFkeVJlZiIsInNlbmRNZXNzYWdlUHJveHlSZWYiLCJmYXFJZCIsImFnZW50U3VnZ2VzdGlvbklkIiwibWVudGlvbnMiLCJmdWFJZCIsInNjSWQiLCJzdG9wR2VuZXJhdGlvblByb3h5UmVmIiwibWVzc2FnZXNEYXRhUmVmIiwic2VsZWN0ZWRTdWdnZXN0aW9uTWVzc2FnZUlkc1JlZiIsInRyaW0iLCJjdXJyZW50TWVzc2FnZXMiLCJpc01hcmtldHBsYWNlR2xvYmFsQWdlbnQiLCJhaUNoYXRTdWdnZXN0ZWRBbnN3ZXIiLCJhZ2VudF90eXBlIiwiX2RlZmluZVByb3BlcnR5IiwidGFyZ2V0TWVzc2FnZSIsImZpbmQiLCJtc2ciLCJpc1JldHJ5U3VnZ2VzdGlvbiIsImxhc3RVc2VyTWVzc2FnZSIsImF0IiwicmV0cnlBdHRhY2htZW50cyIsInJhZklkIiwibGFzdEhlaWdodCIsInRpY2siLCJjdXJyZW50SGVpZ2h0IiwibGFzdFJlc2VydmVkUXVlc3Rpb25SZWYiLCJfbWVzc2FnZXMkaW5kZXgiLCJsYXN0TWVzc2FnZUlkUmVmIiwibGFzdE1lc3NhZ2VzTGVuZ3RoUmVmIiwiX21lc3NhZ2VzJGlkIiwiX21lc3NhZ2VzIiwiX2xhc3RNZXNzYWdlJGlkIiwibGFzdE1lc3NhZ2UiLCJsYXN0SWQiLCJwcmV2SWQiLCJwcmV2TGVuIiwiaXNOZXdNZXNzYWdlIiwiaXNBdEJvdHRvbSIsImhhc0luaXRpYWxNZXNzYWdlIiwiaXNBcHByb3ZhbCIsImlzQW5zd2VyT3JRdWVzdGlvbiIsIl9tZXNzYWdlcyRpZDIiLCJfbWVzc2FnZXMyIiwianVzdEZpbmlzaGVkTG9hZGluZyIsImF0dGFjaG1lbnRzQ291bnQiLCJzdHJlYW1Mb2FkaW5nRGlzcGxheSIsImhhc0F0dGFjaG1lbnRzIiwiaXNTY3JvbGxPblBhcmVudCIsImV4cGFuZGVkUmVmIiwic2F2ZWRTY3JvbGxUb3AiLCJmaWxsIiwiaGFzTWVzc2FnZUxldmVsSW5kaWNhdG9yIiwibWVzc2FnZXNDb250ZW50IiwidGV4dCIsIl9tZXNzYWdlJGF0dGFjaG1lbnRzIiwiX21lc3NhZ2Ukc291cmNlcyIsIl9tZXNzYWdlJHByb2plY3QiLCJfbWVzc2FnZSRpZCIsImlzQXNzaXN0YW50TWVzc2FnZSIsInByb2plY3QiLCJtZXNzYWdlRmVlZGJhY2siLCJ3YXNIZWxwZnVsIiwiVEhVTUJTX1VQIiwiVEhVTUJTX0RPV04iLCJtZXNzYWdlS2V5Iiwia2V5IiwicmVmIiwiJHNjcm9sbE9uUGFyZW50Iiwib25XaGVlbCIsIm9uVG91Y2hTdGFydCIsIiRzaG93Iiwib25TY3JvbGwiLCJjb2xvciIsIndpZHRoIiwiQ2hhdEFJTWVzc2FnZXMiXSwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50cy9tb2xlY3VsZXMvQ2hhdEFJTWVzc2FnZXMvQ2hhdEFJTWVzc2FnZXMudHN4Il0sInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIGltcG9ydC9uby1leHRyYW5lb3VzLWRlcGVuZGVuY2llcyAqL1xuLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L2luZGVudCAqL1xuLyogZXNsaW50LWRpc2FibGUgcmVhY3Qvbm8tdW5zdGFibGUtbmVzdGVkLWNvbXBvbmVudHMgKi9cbi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1zaGFkb3cgKi9cbi8qIGVzbGludC1kaXNhYmxlIG5vLW5lc3RlZC10ZXJuYXJ5ICovXG4vKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55ICovXG4vKiBlc2xpbnQtZGlzYWJsZSBuby11bmRlZiAqL1xuLyogZXNsaW50LWRpc2FibGUgcmVhY3QvZnVuY3Rpb24tY29tcG9uZW50LWRlZmluaXRpb24gKi9cbi8qIGVzbGludC1kaXNhYmxlIHJlYWN0L3JlcXVpcmUtZGVmYXVsdC1wcm9wcyAqL1xuLyogZXNsaW50LWRpc2FibGUganN4LWExMXkvY2xpY2stZXZlbnRzLWhhdmUta2V5LWV2ZW50cyAqL1xuLyogZXNsaW50LWRpc2FibGUganN4LWExMXkvbm8tc3RhdGljLWVsZW1lbnQtaW50ZXJhY3Rpb25zICovXG5pbXBvcnQgUmVhY3QsIHsgRkMsIG1lbW8sIFJlYWN0Tm9kZSwgdXNlQ2FsbGJhY2ssIHVzZUVmZmVjdCwgdXNlTGF5b3V0RWZmZWN0LCB1c2VSZWYsIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBBcnJvd1NtYWxsRG93biB9IGZyb20gJ0Bwcm9qZWN0Y29yL2ljb25zL2xpYi9jb21wb25lbnRzL0Fycm93U21hbGxEb3duJ1xuXG5pbXBvcnQgeyBBdHRhY2htZW50Q2FyZCB9IGZyb20gJy4uLy4uL2F0b21zL0F0dGFjaG1lbnRDYXJkL0F0dGFjaG1lbnRDYXJkJ1xuaW1wb3J0IHsgQXBwcm92YWxCb3ggfSBmcm9tICcuLi8uLi9hdG9tcy9BcHByb3ZhbEJveC9BcHByb3ZhbEJveCdcbmltcG9ydCB7IEF0dGFjaG1lbnRQcmV2aWV3TW9kYWwgfSBmcm9tICcuLi8uLi9hdG9tcy9BdHRhY2htZW50UHJldmlld01vZGFsJ1xuaW1wb3J0IHsgQXR0YWNobWVudENhcmRBdWRpbyB9IGZyb20gJy4uLy4uL2F0b21zL0F0dGFjaG1lbnRDYXJkL0F0dGFjaG1lbnRDYXJkQXVkaW8nXG5pbXBvcnQgeyBNYWlhU3RyZWFtZG93biB9IGZyb20gJy4uLy4uL2F0b21zL01haWFTdHJlYW1kb3duJ1xuaW1wb3J0IHR5cGUgeyBNYWlhU3RyZWFtZG93blByb3BzIH0gZnJvbSAnLi4vLi4vYXRvbXMvTWFpYVN0cmVhbWRvd24nXG5pbXBvcnQgeyBNQUlBTWVzc2FnZVByb3BzIH0gZnJvbSAnLi4vLi4vYXRvbXMvTUFJQU1lc3NhZ2UvTUFJQU1lc3NhZ2UuaW50ZXJmYWNlcydcbmltcG9ydCB7IENoYXRNZXNzYWdlLCBDaGF0SGlzdG9yeVJvbGUgfSBmcm9tICcuLi8uLi8uLi90eXBlcy9DaGF0J1xuaW1wb3J0IHsgcmVuZGVyVGV4dFdpdGhNZW50aW9ucywgaGFzSW5saW5lTWFya2VycyB9IGZyb20gJy4uLy4uLy4uL3V0aWxzL3JlbmRlckNvbnRleHRNZW50aW9ucydcblxuaW1wb3J0IHsgaXNNYWlha2VyQWdlbnQgfSBmcm9tICcuLi8uLi8uLi91dGlscy9hZ2VudERpc3BsYXlOYW1lJ1xuaW1wb3J0IHsgQ09SVXNlciwgdXNlVXNlciB9IGZyb20gJy4uLy4uLy4uL2NvbnRleHQvY29yLXVzZXInXG5cbmltcG9ydCB7IHVzZVQgfSBmcm9tICcuLi8uLi8uLi9ob29rcy91c2VUJ1xuaW1wb3J0IHsgdXNlQ2hhdE1hbmFnZXIgfSBmcm9tICcuLi8uLi8uLi9ob29rcy91c2VDaGF0TWFuYWdlci91c2VDaGF0TWFuYWdlcidcbmltcG9ydCB7IHVzZVNtb290aFN0cmVhbVRleHQgfSBmcm9tICcuLi8uLi8uLi9ob29rcy91c2VTbW9vdGhTdHJlYW1UZXh0J1xuaW1wb3J0IHsgdXNlU3RyZWFtaW5nTWVzc2FnZSB9IGZyb20gJy4uLy4uLy4uL2hvb2tzL3VzZVN0cmVhbWluZ01lc3NhZ2UnXG5cbmltcG9ydCB7IExvYWRpbmdUZXh0IH0gZnJvbSAnLi4vLi4vYXRvbXMvTG9hZGluZ1RleHQnXG5pbXBvcnQgeyBBZ2VudEFjdGl2aXR5SW5kaWNhdG9yIH0gZnJvbSAnLi4vLi4vYXRvbXMvQWdlbnRBY3Rpdml0eUluZGljYXRvcidcbmltcG9ydCB7IFJlYXNvbmluZ0Jsb2NrIH0gZnJvbSAnLi4vLi4vYXRvbXMvUmVhc29uaW5nQmxvY2snXG5pbXBvcnQgdHlwZSB7IFN0cmVhbUFjdGl2aXR5IH0gZnJvbSAnLi4vLi4vLi4vdHlwZXMvc3RyZWFtQWN0aXZpdHknXG5pbXBvcnQgeyBpc1N0cmVhbWluZ1BsYWNlaG9sZGVyTWVzc2FnZUlkLCByZXNvbHZlU3RyZWFtTG9hZGluZ0Rpc3BsYXkgfSBmcm9tICcuLi8uLi8uLi91dGlscy9zdHJlYW1BY3Rpdml0eU1lc3NhZ2VzJ1xuaW1wb3J0IHsgTG9hZGVyIH0gZnJvbSAnLi4vLi4vYXRvbXMvTG9hZGVyJ1xuaW1wb3J0IHsgRmFkZSB9IGZyb20gJy4uLy4uL2F0b21zL0ZhZGUnXG5cbmltcG9ydCB7IFByb2plY3QgfSBmcm9tICcuLi8uLi8uLi90eXBlcy9Qcm9qZWN0J1xuXG5pbXBvcnQgeyBNZXNzYWdlRnJvbVVzZXIsIE1lc3NhZ2VGcm9tT3RoZXIsIE1lc3NhZ2VDb250ZW50RnJvbVVzZXIsIE1lc3NhZ2VDb250ZW50RnJvbU90aGVyIH0gZnJvbSAnLi9zdHlsZXMnXG5pbXBvcnQgeyBNZXNzYWdlRmVlZGJhY2sgfSBmcm9tICcuLi9NZXNzYWdlRmVlZGJhY2snXG5pbXBvcnQge1xuICBTQ0NBSU1lc3NhZ2VXcmFwcGVyLFxuICBTY3JvbGxUb0JvdHRvbUJ1dHRvbixcbiAgU0NNZXNzYWdlc091dGVyLFxuICBTQ01lc3NhZ2VzU2Nyb2xsLFxuICBTQ01lc3NhZ2VzSW5uZXIsXG4gIFNDVHVyblNwYWNlcixcbiAgU0NPcHRpb25zTGlzdCxcbiAgU0NPcHRpb25JdGVtLFxuICBTQ01lc3NhZ2VJdGVtV3JhcHBlcixcbiAgU0NNZXNzYWdlSXRlbUlubmVyLFxuICBTQ0F0dGFjaG1lbnRzUm93LFxuICBTQ0FwcHJvdmFsQWN0aW9uc0NvbHVtbixcbiAgU0NMb2FkaW5nTWVzc2FnZXNDb2x1bW4sXG4gIFNDTWVzc2FnZXNHcmFkaWVudFRvcCxcbiAgU0NNZXNzYWdlc0dyYWRpZW50Qm90dG9tLFxufSBmcm9tICcuL25ld1N0eWxlcydcbmltcG9ydCB7IEZlZWRiYWNrIH0gZnJvbSAnLi4vTWVzc2FnZUZlZWRiYWNrL01lc3NhZ2VGZWVkYmFjaydcbmltcG9ydCB7IHVzZUdsb2JhbENvbnRleHQgfSBmcm9tICcuLi8uLi8uLi9jb250ZXh0L2dsb2JhbC1jb250ZXh0J1xuaW1wb3J0IHsgQWdlbnQgfSBmcm9tICcuLi8uLi8uLi90eXBlcy9hZ2VudCdcbmltcG9ydCB7IEF0dGFjaG1lbnRGaWxlIH0gZnJvbSAnLi4vQ2hhdEZvb3Rlci9DaGF0Rm9vdGVyJ1xuaW1wb3J0IHsgQ29udGV4dE1lbnRpb24gfSBmcm9tICcuLi8uLi8uLi90eXBlcy9jb250ZXh0TWVudGlvbidcbmltcG9ydCB7IEVudGl0eUxpbmtDdXN0b21MaW5rLCBnZXRFbnRpdHlMaW5rV3JhcHBlckNsYXNzTmFtZSB9IGZyb20gJy4uLy4uLy4uL3V0aWxzL2VudGl0eUxpbmtSZW5kZXInXG5pbXBvcnQgeyBDaGF0QUlTdWdnZXN0aW9ucyB9IGZyb20gJy4vQ2hhdEFJU3VnZ2VzdGlvbnMnXG5pbXBvcnQgeyBDaGF0QUlDcmVhdGVBZ2VudEFjdGlvbnMgfSBmcm9tICcuL0NoYXRBSUNyZWF0ZUFnZW50QWN0aW9ucydcbmltcG9ydCB7IEVWRU5UUywgdXNlRXZlbnQgfSBmcm9tICcuLi8uLi8uLi9ob29rcy91c2VFdmVudCdcbmltcG9ydCB7IGRvd25sb2FkRmlsZUZyb21VcmwgfSBmcm9tICcuLi8uLi8uLi91dGlscy9maWxlRG93bmxvYWRIZWxwZXInXG5cbnR5cGUgQ2hhdEFJTWVzc2FnZXNQcm9wcyA9IHtcbiAgdXNlckluaXRpYWxNZXNzYWdlOiB7XG4gICAgbWVzc2FnZTogc3RyaW5nXG4gICAgYXR0YWNobWVudHM6IEF0dGFjaG1lbnRGaWxlW11cbiAgICBmYXFJZD86IHN0cmluZ1xuICAgIGFnZW50U3VnZ2VzdGlvbklkPzogc3RyaW5nXG4gICAgbWVudGlvbnM/OiBDb250ZXh0TWVudGlvbltdXG4gICAgZnVhSWQ/OiBzdHJpbmdcbiAgICBzY0lkPzogc3RyaW5nXG4gIH1cbiAgaW5pdGlhbENoYXRJZDogc3RyaW5nIHwgbnVsbFxuICBvbkVycm9yOiAoKSA9PiB2b2lkXG4gIG9uU2VuZE1lc3NhZ2VSZWFkeT86IChcbiAgICBzZW5kTWVzc2FnZTogKFxuICAgICAgbWVzc2FnZTogc3RyaW5nLFxuICAgICAgYXR0YWNobWVudHM/OiBBdHRhY2htZW50RmlsZVtdLFxuICAgICAgZmFxSWQ/OiBzdHJpbmcsXG4gICAgICBhZ2VudFN1Z2dlc3Rpb25JZD86IHN0cmluZyxcbiAgICAgIG1lbnRpb25zPzogQ29udGV4dE1lbnRpb25bXSxcbiAgICAgIGZ1YUlkPzogc3RyaW5nLFxuICAgICAgc2NJZD86IHN0cmluZ1xuICAgICkgPT4gdm9pZCxcbiAgICBzdG9wR2VuZXJhdGlvbjogKCkgPT4gdm9pZCxcbiAgICBpc1N0cmVhbWluZzogYm9vbGVhbixcbiAgICBpc1dyaXRpbmc6IGJvb2xlYW5cbiAgKSA9PiB2b2lkXG4gIGlzRGlzYWJsZWQ/OiBib29sZWFuXG4gIG9uU2Nyb2xsVG9Cb3R0b20/OiAoKSA9PiB2b2lkXG4gIGF0dGFjaG1lbnRzPzogQXR0YWNobWVudEZpbGVbXVxuICBhZ2VudHM/OiBBZ2VudFtdXG4gIGV4cGFuZGVkPzogYm9vbGVhblxufVxuXG4vKipcbiAqIEFsIGFuY2xhciBlbCB0dXJubywgbGEgcHJlZ3VudGEgbm8gc2UgcGVnYSBhbCBib3JkZSBzdXBlcmlvcjogZGVqYW1vcyBhc29tYXJcbiAqIGxhIGNvbGEgZGVsIG1lbnNhamUgYW50ZXJpb3IgcGFyYSBubyBwZXJkZXIgZWwgaGlsbyBkZSBsYSBjb252ZXJzYWNpw7NuLlxuICogUmVsYXRpdm8gYWwgdmlld3BvcnQgcG9ycXVlIHVuIHZhbG9yIGZpam8gc2UgY29tZSBkZW1hc2lhZG8gZW4gcGFudGFsbGFzIGNvcnRhcy5cbiAqL1xuY29uc3QgdHVybkFuY2hvck9mZnNldCA9ICh2aWV3cG9ydEhlaWdodDogbnVtYmVyKTogbnVtYmVyID0+IE1hdGgubWluKHZpZXdwb3J0SGVpZ2h0ICogMC4xOCwgMjAwKVxuXG4vKiogRHVyYWNpw7NuIGRlbCBzY3JvbGwgYWwgYW5jbGFyIGVsIHR1cm5vLiBNw6FzIGxlbnRvIHF1ZSBlbCBgc21vb3RoYCBuYXRpdm8sIHF1ZSBzZSBzaWVudGUgYnJ1c2NvLiAqL1xuY29uc3QgVFVSTl9TQ1JPTExfRFVSQVRJT05fTVMgPSA1NTBcblxudHlwZSBNZXNzYWdlSXRlbVByb3BzID0gQ2hhdE1lc3NhZ2UgJiB7XG4gIGF1dGhVc2VyOiBDT1JVc2VyXG4gIGhhbmRsZVNlbGVjdE9wdGlvbjogKG9wdGlvbjogUHJvamVjdCkgPT4gdm9pZFxuICBoYW5kbGVTdWdnZXN0aW9uQ2xpY2s6IChtZXNzYWdlSWQ6IHN0cmluZywgc3VnZ2VzdGlvbjogc3RyaW5nKSA9PiB2b2lkXG4gIGhhc1NlbGVjdGVkU3VnZ2VzdGlvbj86IGJvb2xlYW5cbiAgaGFuZGxlRmVlZGJhY2s6IChmZWVkYmFjazogRmVlZGJhY2ssIGNoYXRNZXNzYWdlSWQ6IHN0cmluZykgPT4gdm9pZFxuICBoYW5kbGVBcHByb3ZhbERlY2lzaW9uOiAodGhyZWFkSWRzOiBzdHJpbmdbXSwgZGVjaXNpb246ICdhcHByb3ZlJyB8ICdyZWplY3QnKSA9PiB2b2lkXG4gIGRpc2FibGVGZWVkYmFjaz86IEZlZWRiYWNrIHwgbnVsbFxuICBzb3VyY2VzPzogYW55XG4gIGF0dGFjaG1lbnRzPzogQXR0YWNobWVudEZpbGVbXVxuICBpc1N0cmVhbWluZz86IGJvb2xlYW5cbiAgaXNMYXN0TWVzc2FnZT86IGJvb2xlYW5cbiAgZXhwYW5kZWQ/OiBib29sZWFuXG4gIHN0cmVhbUFjdGl2aXR5PzogU3RyZWFtQWN0aXZpdHkgfCBudWxsXG59XG5cbmludGVyZmFjZSBNZXNzYWdlV3JhcHBlclByb3BzIHtcbiAgaXNDdXJyZW50VXNlcjogYm9vbGVhblxuICBjaGlsZHJlbjogUmVhY3ROb2RlXG4gICdkYXRhLW1lc3NhZ2UtaWQnPzogc3RyaW5nXG4gIGhhc0ZlZWRiYWNrPzogYm9vbGVhblxufVxuXG50eXBlIE1lc3NhZ2VDb250ZW50V3JhcHBlclByb3BzID0gTUFJQU1lc3NhZ2VQcm9wcyAmIHtcbiAgaXNDdXJyZW50VXNlcjogYm9vbGVhblxuICBpc0Vycm9yPzogYm9vbGVhblxuICBpc0NoYW5nZVByb2plY3Q/OiBib29sZWFuXG59XG5cbmNvbnN0IE1lc3NhZ2VXcmFwcGVyOiBGQzxNZXNzYWdlV3JhcHBlclByb3BzPiA9ICh7IGlzQ3VycmVudFVzZXIsIGNoaWxkcmVuLCAuLi5wcm9wcyB9KSA9PiB7XG4gIGNvbnN0IE1lc3NhZ2VDb21wb25lbnQgPSBpc0N1cnJlbnRVc2VyID8gTWVzc2FnZUZyb21Vc2VyIDogTWVzc2FnZUZyb21PdGhlclxuICByZXR1cm4gPE1lc3NhZ2VDb21wb25lbnQgey4uLnByb3BzfT57Y2hpbGRyZW59PC9NZXNzYWdlQ29tcG9uZW50PlxufVxuXG5jb25zdCBNZXNzYWdlQ29udGVudFdyYXBwZXI6IEZDPE1lc3NhZ2VDb250ZW50V3JhcHBlclByb3BzPiA9ICh7IGlzQ3VycmVudFVzZXIsIC4uLnByb3BzIH0pID0+IHtcbiAgY29uc3QgTWVzc2FnZUNvbnRlbnRDb21wb25lbnQgPSBpc0N1cnJlbnRVc2VyID8gTWVzc2FnZUNvbnRlbnRGcm9tVXNlciA6IE1lc3NhZ2VDb250ZW50RnJvbU90aGVyXG4gIHJldHVybiA8TWVzc2FnZUNvbnRlbnRDb21wb25lbnQgey4uLnByb3BzfSAvPlxufVxuXG5mdW5jdGlvbiBNZXNzYWdlT3B0aW9ucyh7XG4gIG9wdGlvbnMsXG4gIGhhbmRsZVNlbGVjdE9wdGlvbixcbn06IHtcbiAgb3B0aW9uczogUHJvamVjdFtdIHwgbnVsbFxuICBoYW5kbGVTZWxlY3RPcHRpb246IChvcHRpb246IFByb2plY3QpID0+IHZvaWRcbn0pIHtcbiAgY29uc3QgW3NlbGVjdGVkT3B0aW9uLCBzZXRTZWxlY3RlZE9wdGlvbl0gPSB1c2VTdGF0ZTxQcm9qZWN0IHwgbnVsbD4obnVsbClcblxuICBjb25zdCBoYW5kbGVTZWxlY3QgPSAob3B0aW9uOiBQcm9qZWN0KSA9PiB7XG4gICAgaWYgKHNlbGVjdGVkT3B0aW9uKSByZXR1cm5cbiAgICBzZXRTZWxlY3RlZE9wdGlvbihvcHRpb24pXG4gICAgaGFuZGxlU2VsZWN0T3B0aW9uKG9wdGlvbilcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPFNDT3B0aW9uc0xpc3Q+XG4gICAgICB7KG9wdGlvbnMgfHwgW10pLm1hcChvcHRpb24gPT4gKFxuICAgICAgICA8U0NPcHRpb25JdGVtXG4gICAgICAgICAgJGhhc1NlbGVjdGlvbj17ISFzZWxlY3RlZE9wdGlvbn1cbiAgICAgICAgICAkZGltbWVkPXshIXNlbGVjdGVkT3B0aW9uICYmIHNlbGVjdGVkT3B0aW9uPy5pZCAhPT0gb3B0aW9uLmlkfVxuICAgICAgICAgIG9uQ2xpY2s9eygpID0+IGhhbmRsZVNlbGVjdChvcHRpb24pfVxuICAgICAgICAgIGtleT17b3B0aW9uLmlkfVxuICAgICAgICA+XG4gICAgICAgICAge29wdGlvbi5uYW1lfVxuICAgICAgICA8L1NDT3B0aW9uSXRlbT5cbiAgICAgICkpfVxuICAgIDwvU0NPcHRpb25zTGlzdD5cbiAgKVxufVxuXG4vKiogU29sbyBlc3RlIGNvbXBvbmVudGUgcmUtcmVuZGVyaXphIGN1YW5kbyBjYW1iaWEgZWwgdGV4dG8gZW4gc3RyZWFtaW5nIChsZWUgZGVsIGNvbnRleHQpLiAqL1xuY29uc3QgU3RyZWFtaW5nTWVzc2FnZUJvZHkgPSBtZW1vKFxuICAocHJvcHM6IHtcbiAgICBtZXNzYWdlOiBzdHJpbmdcbiAgICBpc1N0cmVhbWluZzogYm9vbGVhblxuICAgIGlzQ3VycmVudFVzZXI6IGJvb2xlYW5cbiAgICBpc0Fzc2lzdGFudDogYm9vbGVhblxuICAgIGlzRnJvbnRlbmRDYW5jZWxsZWQ/OiBib29sZWFuXG4gICAgYXBwcm92YWw/OiBNZXNzYWdlSXRlbVByb3BzWydhcHByb3ZhbCddXG4gICAgaXNFcnJvcj86IGJvb2xlYW5cbiAgICBzb3VyY2VzPzogTWVzc2FnZUl0ZW1Qcm9wc1snc291cmNlcyddXG4gICAgc3VnZ2VzdGlvbnM/OiBzdHJpbmdbXSB8IG51bGxcbiAgICBjcmVhdGVBZ2VudEZvbGxvd1VwPzogeyBhZ2VudElkOiBzdHJpbmcgfSB8IG51bGxcbiAgICBoYW5kbGVGZWVkYmFja0NsaWNrOiAoZjogRmVlZGJhY2spID0+IHZvaWRcbiAgICBkaXNhYmxlRmVlZGJhY2s6IEZlZWRiYWNrIHwgbnVsbFxuICAgIGhhbmRsZVN1Z2dlc3Rpb25DbGljazogKG1lc3NhZ2VJZDogc3RyaW5nLCBzdWdnZXN0aW9uOiBzdHJpbmcpID0+IHZvaWRcbiAgICBzdWdnZXN0aW9uc0Rpc2FibGVkPzogYm9vbGVhblxuICAgIG1lc3NhZ2VJZDogc3RyaW5nXG4gICAgaXNMYXN0TWVzc2FnZT86IGJvb2xlYW5cbiAgfSkgPT4ge1xuICAgIC8vIFRleHRvIGRlbCBzdHJlYW06IHNvbG8gc2UgbGVlIGRlbCBzdG9yZSBjdWFuZG8gZXN0ZSBtZW5zYWplIGVzIGVsXG4gICAgLy8gcXVlIGVzdMOhIGVuIHN0cmVhbWluZy4gdXNlU3luY0V4dGVybmFsU3RvcmUgYcOtc2xhIGVsIHJlLXJlbmRlciBhXG4gICAgLy8gZXN0ZSBjb21wb25lbnRlLCBzaW4gdG9jYXIgZWwgcmVzdG8gZGVsIMOhcmJvbC5cbiAgICBjb25zdCBzdHJlYW1pbmdUZXh0ID0gdXNlU3RyZWFtaW5nTWVzc2FnZShwcm9wcy5pc1N0cmVhbWluZyA/IHByb3BzLm1lc3NhZ2VJZCA6IG51bGwpXG4gICAgY29uc3QgcmF3VGV4dCA9IHByb3BzLmlzU3RyZWFtaW5nID8gc3RyZWFtaW5nVGV4dCA6IHByb3BzLm1lc3NhZ2VcbiAgICAvLyBTbW9vdGggc3RyZWFtaW5nOiBkZXNhY29wbGEgbGEgY2FkZW5jaWEgZGVsIGJhY2tlbmQgZGVsIHJlbmRlci5cbiAgICAvLyBEdXJhbnRlIGVsIHN0cmVhbWluZyBsaWJlcmEgY2hhcnMgYSByaXRtbyBjb25zdGFudGUgdsOtYSByQUY7IGN1YW5kb1xuICAgIC8vIHRlcm1pbmEsIG11ZXN0cmEgZWwgdGV4dG8gZmluYWwgYWwgaW5zdGFudGUgKHNpbiBhbmltYWNpw7NuIHJlc2lkdWFsKS5cbiAgICAvLyBMb3MgZGVmYXVsdHMgZGVsIGhvb2sgc2UgYWp1c3Rhcm9uIGVtcMOtcmljYW1lbnRlIGVuIHN0YWdpbmc7IGF1biBhc8OtXG4gICAgLy8gc2UgZXhwb25lbiBmbGFncyBkZSBydW50aW1lICh3aW5kb3cuKikgcGFyYSBwb2RlciB0dW5lYXIgc2luIHJlY29tcGlsYXJcbiAgICAvLyBzaSBhbGfDum4gYmFja2VuZCBwcmVzZW50YSB1bmEgY2FkZW5jaWEgbXV5IGRpc3RpbnRhIGVuIHByb2R1Y2Npw7NuLlxuICAgIC8vICAgd2luZG93LnN0cmVhbUFkYXB0ID0gZmFsc2UgICAgICAvLyBkZXNhY3RpdmEgYWRhcHRhY2nDs24gYWwgYmFja2VuZFxuICAgIC8vICAgd2luZG93LnN0cmVhbUJ1ZmZlck1zID0gNjAwICAgICAvLyBjb2xjaMOzbiBvYmpldGl2byAobXMpXG4gICAgLy8gICB3aW5kb3cuc3RyZWFtTGFnTXMgPSA0NTAgICAgICAgIC8vIGxhZyBtw6F4aW1vIGJhc2UgKG1zKVxuICAgIC8vICAgd2luZG93LnN0cmVhbU1pbkJ1ZmZlciA9IDcwICAgICAvLyBwaXNvIGRlbCBjb2xjaMOzbiBlbiBjaGFyc1xuICAgIC8vICAgd2luZG93LnN0cmVhbVdhcm11cE1zID0gNDAwICAgICAvLyB3YXJtdXAgaW5pY2lhbCAobXMpXG4gICAgY29uc3Qgd2luRmxhZ3MgPVxuICAgICAgdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAgPyAod2luZG93IGFzIHVua25vd24gYXMge1xuICAgICAgICAgICAgc3RyZWFtQWRhcHQ/OiBib29sZWFuXG4gICAgICAgICAgICBzdHJlYW1CdWZmZXJNcz86IG51bWJlclxuICAgICAgICAgICAgc3RyZWFtTGFnTXM/OiBudW1iZXJcbiAgICAgICAgICAgIHN0cmVhbU1pbkJ1ZmZlcj86IG51bWJlclxuICAgICAgICAgICAgc3RyZWFtV2FybXVwTXM/OiBudW1iZXJcbiAgICAgICAgICB9KVxuICAgICAgICA6IHt9XG4gICAgY29uc3QgZGlzcGxheVRleHQgPSB1c2VTbW9vdGhTdHJlYW1UZXh0KHJhd1RleHQsIHtcbiAgICAgIGVuYWJsZWQ6ICEhcHJvcHMuaXNTdHJlYW1pbmcsXG4gICAgICBtYXhDaGFyc1BlckZyYW1lOiAyNCxcbiAgICAgIHNuYXBUb1dvcmRCb3VuZGFyeTogdHJ1ZSxcbiAgICAgIC4uLih3aW5GbGFncy5zdHJlYW1MYWdNcyAhPSBudWxsICYmIHsgdGFyZ2V0TGFnTXM6IHdpbkZsYWdzLnN0cmVhbUxhZ01zIH0pLFxuICAgICAgLi4uKHdpbkZsYWdzLnN0cmVhbUFkYXB0ICE9IG51bGwgJiYgeyBhZGFwdFRvQmFja2VuZFJhdGU6IHdpbkZsYWdzLnN0cmVhbUFkYXB0IH0pLFxuICAgICAgLi4uKHdpbkZsYWdzLnN0cmVhbUJ1ZmZlck1zICE9IG51bGwgJiYgeyB0YXJnZXRCdWZmZXJNczogd2luRmxhZ3Muc3RyZWFtQnVmZmVyTXMgfSksXG4gICAgICAuLi4od2luRmxhZ3Muc3RyZWFtTWluQnVmZmVyICE9IG51bGwgJiYgeyBtaW5CdWZmZXJDaGFyczogd2luRmxhZ3Muc3RyZWFtTWluQnVmZmVyIH0pLFxuICAgICAgLi4uKHdpbkZsYWdzLnN0cmVhbVdhcm11cE1zICE9IG51bGwgJiYgeyB3YXJtdXBNczogd2luRmxhZ3Muc3RyZWFtV2FybXVwTXMgfSksXG4gICAgfSlcbiAgICBjb25zdCBjcmVhdGVBZ2VudEFjdGlvbnNBZ2VudElkID0gcHJvcHMuY3JlYXRlQWdlbnRGb2xsb3dVcD8uYWdlbnRJZFxuXG4gICAgaWYgKCFkaXNwbGF5VGV4dCAmJiAhcHJvcHMuaXNTdHJlYW1pbmcpIHJldHVybiBudWxsXG4gICAgY29uc3QgaGFzTWVudGlvbnMgPSBoYXNJbmxpbmVNYXJrZXJzKGRpc3BsYXlUZXh0KVxuICAgIGNvbnN0IG1lbnRpb25Ob2RlcyA9IGhhc01lbnRpb25zID8gcmVuZGVyVGV4dFdpdGhNZW50aW9ucyhkaXNwbGF5VGV4dCkgOiBudWxsXG4gICAgcmV0dXJuIChcbiAgICAgIDw+XG4gICAgICAgIDxTQ0NBSU1lc3NhZ2VXcmFwcGVyXG4gICAgICAgICAgaXNDdXJyZW50VXNlcj17cHJvcHMuaXNDdXJyZW50VXNlcn1cbiAgICAgICAgICBpc0Zyb250ZW5kQ2FuY2VsbGVkPXtwcm9wcy5pc0Zyb250ZW5kQ2FuY2VsbGVkfVxuICAgICAgICAgIGNsYXNzTmFtZT17Z2V0RW50aXR5TGlua1dyYXBwZXJDbGFzc05hbWUoZGlzcGxheVRleHQpfVxuICAgICAgICA+XG4gICAgICAgICAge2hhc01lbnRpb25zICYmIG1lbnRpb25Ob2RlcyA/IChcbiAgICAgICAgICAgIC8vIFNpIGhheSBtZW50aW9ucywgcmVuZGVyaXphciBkaXJlY3RhbWVudGUgKHNpbiBtYXJrZG93biBlbiBlbCBtaXNtbyBww6FycmFmbylcbiAgICAgICAgICAgIDxzcGFuIHN0eWxlPXt7IGRpc3BsYXk6ICdpbmxpbmUnIH19PnttZW50aW9uTm9kZXN9PC9zcGFuPlxuICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAvLyBTaW4gbWVudGlvbnMsIHBhc2FyIGEgU3RyZWFtZG93biBwYXJhIG1hcmtkb3duIHN1cHBvcnRcbiAgICAgICAgICAgIDxNYWlhU3RyZWFtZG93blxuICAgICAgICAgICAgICB2YXJpYW50PVwiY2hhdFwiXG4gICAgICAgICAgICAgIGlzQ3VycmVudFVzZXI9e3Byb3BzLmlzQ3VycmVudFVzZXJ9XG4gICAgICAgICAgICAgIGlzRnJvbnRlbmRDYW5jZWxsZWQ9e3Byb3BzLmlzRnJvbnRlbmRDYW5jZWxsZWR9XG4gICAgICAgICAgICAgIGNvbXBvbmVudHM9e3sgYTogRW50aXR5TGlua0N1c3RvbUxpbmsgfSBhcyBNYWlhU3RyZWFtZG93blByb3BzWydjb21wb25lbnRzJ119XG4gICAgICAgICAgICAgIGlzQW5pbWF0aW5nPXshIXByb3BzLmlzU3RyZWFtaW5nfVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7ZGlzcGxheVRleHR9XG4gICAgICAgICAgICA8L01haWFTdHJlYW1kb3duPlxuICAgICAgICAgICl9XG4gICAgICAgIDwvU0NDQUlNZXNzYWdlV3JhcHBlcj5cbiAgICAgICAge3Byb3BzLmlzQXNzaXN0YW50ICYmICFwcm9wcy5pc0Vycm9yICYmICFwcm9wcy5pc0Zyb250ZW5kQ2FuY2VsbGVkICYmICFwcm9wcy5hcHByb3ZhbCAmJiAhcHJvcHMuaXNTdHJlYW1pbmcgJiYgKFxuICAgICAgICAgIDxNZXNzYWdlRmVlZGJhY2tcbiAgICAgICAgICAgIGNvbnRlbnQ9e2Rpc3BsYXlUZXh0fVxuICAgICAgICAgICAgc291cmNlcz17cHJvcHMuc291cmNlc31cbiAgICAgICAgICAgIGhhbmRsZUZlZWRiYWNrPXtwcm9wcy5oYW5kbGVGZWVkYmFja0NsaWNrfVxuICAgICAgICAgICAgZGlzYWJsZUZlZWRiYWNrPXtwcm9wcy5kaXNhYmxlRmVlZGJhY2t9XG4gICAgICAgICAgLz5cbiAgICAgICAgKX1cbiAgICAgICAge3Byb3BzLmlzQXNzaXN0YW50ICYmXG4gICAgICAgICAgIXByb3BzLmlzRnJvbnRlbmRDYW5jZWxsZWQgJiZcbiAgICAgICAgICAhcHJvcHMuYXBwcm92YWwgJiZcbiAgICAgICAgICAoIXByb3BzLmlzRXJyb3IgfHwgcHJvcHMuc3VnZ2VzdGlvbnM/Lmxlbmd0aCkgJiYgKFxuICAgICAgICAgICAgPENoYXRBSVN1Z2dlc3Rpb25zXG4gICAgICAgICAgICAgIHN1Z2dlc3Rpb25zPXtwcm9wcy5zdWdnZXN0aW9ucyB8fCBbXX1cbiAgICAgICAgICAgICAgb25TZWxlY3RTdWdnZXN0aW9uPXtzdWdnZXN0aW9uID0+IHByb3BzLmhhbmRsZVN1Z2dlc3Rpb25DbGljayhwcm9wcy5tZXNzYWdlSWQsIHN1Z2dlc3Rpb24pfVxuICAgICAgICAgICAgICBkaXNhYmxlZD17cHJvcHMuc3VnZ2VzdGlvbnNEaXNhYmxlZH1cbiAgICAgICAgICAgICAgaGlkZGVuPXshIXByb3BzLmlzU3RyZWFtaW5nIHx8ICFwcm9wcy5pc0xhc3RNZXNzYWdlIHx8ICEhcHJvcHMuc3VnZ2VzdGlvbnNEaXNhYmxlZH1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgKX1cbiAgICAgICAge3Byb3BzLmlzQXNzaXN0YW50ICYmXG4gICAgICAgICAgIXByb3BzLmlzRXJyb3IgJiZcbiAgICAgICAgICAhcHJvcHMuaXNGcm9udGVuZENhbmNlbGxlZCAmJlxuICAgICAgICAgICFwcm9wcy5hcHByb3ZhbCAmJlxuICAgICAgICAgICEhY3JlYXRlQWdlbnRBY3Rpb25zQWdlbnRJZCAmJiAoXG4gICAgICAgICAgICA8Q2hhdEFJQ3JlYXRlQWdlbnRBY3Rpb25zXG4gICAgICAgICAgICAgIGFnZW50SWQ9e2NyZWF0ZUFnZW50QWN0aW9uc0FnZW50SWR9XG4gICAgICAgICAgICAgIGRpc2FibGVkPXtwcm9wcy5zdWdnZXN0aW9uc0Rpc2FibGVkfVxuICAgICAgICAgICAgICBoaWRkZW49eyEhcHJvcHMuaXNTdHJlYW1pbmcgfHwgIXByb3BzLmlzTGFzdE1lc3NhZ2UgfHwgISFwcm9wcy5zdWdnZXN0aW9uc0Rpc2FibGVkfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICApfVxuICAgICAgPC8+XG4gICAgKVxuICB9XG4pXG5cbmNvbnN0IE1lc3NhZ2VJdGVtID0gbWVtbygocHJvcHM6IE1lc3NhZ2VJdGVtUHJvcHMpID0+IHtcbiAgY29uc3Qge1xuICAgIGlkLFxuICAgIHVzZXIsXG4gICAgbWVzc2FnZSxcbiAgICBpc1N0cmVhbWluZyxcbiAgICBpc0Vycm9yLFxuICAgIGF1dGhVc2VyLFxuICAgIG9wdGlvbnMsXG4gICAgaXNDaGFuZ2VQcm9qZWN0LFxuICAgIGhhbmRsZVNlbGVjdE9wdGlvbixcbiAgICBoYW5kbGVTdWdnZXN0aW9uQ2xpY2ssXG4gICAgaGFuZGxlRmVlZGJhY2ssXG4gICAgaGFuZGxlQXBwcm92YWxEZWNpc2lvbixcbiAgICBkaXNhYmxlRmVlZGJhY2ssXG4gICAgcm9sZSxcbiAgICBzb3VyY2VzLFxuICAgIGF0dGFjaG1lbnRzLFxuICAgIGFwcHJvdmFsLFxuICAgIGFwcHJvdmFsU3RhdHVzLFxuICAgIHN1Z2dlc3Rpb25zLFxuICAgIGNyZWF0ZUFnZW50Rm9sbG93VXAsXG4gICAgaGFzU2VsZWN0ZWRTdWdnZXN0aW9uLFxuICAgIGlzTGFzdE1lc3NhZ2UsXG4gICAgc3RyZWFtQWN0aXZpdHksXG4gIH0gPSBwcm9wc1xuXG4gIGNvbnN0IFtwcmV2aWV3QXR0YWNobWVudCwgc2V0UHJldmlld0F0dGFjaG1lbnRdID0gdXNlU3RhdGU8QXR0YWNobWVudEZpbGUgfCBudWxsPihudWxsKVxuICBjb25zdCBpc0N1cnJlbnRVc2VyID0gcm9sZSA9PT0gQ2hhdEhpc3RvcnlSb2xlLlVTRVIgfHwgdXNlci5pZCA9PT0gYXV0aFVzZXIuaWQudG9TdHJpbmcoKVxuICBjb25zdCBpc0Fzc2lzdGFudCA9IHJvbGUgPT09IENoYXRIaXN0b3J5Um9sZS5BU1NJU1RBTlQgfHwgdXNlci5pZCA9PT0gJ2Fzc2lzdGFudCdcbiAgY29uc3QgaXNTdHJlYW1pbmdQbGFjZWhvbGRlciA9IGlzU3RyZWFtaW5nUGxhY2Vob2xkZXJNZXNzYWdlSWQoaWQpXG4gIGNvbnN0IHN0cmVhbWluZ1RleHQgPSB1c2VTdHJlYW1pbmdNZXNzYWdlKGlzU3RyZWFtaW5nIHx8IGlzU3RyZWFtaW5nUGxhY2Vob2xkZXIgPyBpZCA6IG51bGwpXG4gIGNvbnN0IGlzQWN0aXZlU3RyZWFtaW5nID0gISFpc1N0cmVhbWluZyB8fCBpc1N0cmVhbWluZ1BsYWNlaG9sZGVyXG4gIGNvbnN0IGhhc1N0cmVhbVRleHQgPSBCb29sZWFuKHN0cmVhbWluZ1RleHQpXG4gIGNvbnN0IG1lc3NhZ2VBdHRhY2htZW50cyA9XG4gICAgYXR0YWNobWVudHMgJiYgYXR0YWNobWVudHMubGVuZ3RoID4gMFxuICAgICAgPyBhdHRhY2htZW50c1xuICAgICAgOiAhaXNBc3Npc3RhbnQgJiYgQXJyYXkuaXNBcnJheShzb3VyY2VzKVxuICAgICAgICA/IChzb3VyY2VzIGFzIEF0dGFjaG1lbnRGaWxlW10pXG4gICAgICAgIDogW11cblxuICBjb25zdCBoYW5kbGVBdHRhY2htZW50Q2xpY2sgPSAoYXR0YWNobWVudDogQXR0YWNobWVudEZpbGUpID0+IHtcbiAgICAvLyBQZXJtaXRpciBwcmV2aXN1YWxpemFjacOzbiBzaSB0aWVuZSBhcmNoaXZvIGxvY2FsIG8gVVJMcyBkZWwgYmFja2VuZFxuICAgIGlmIChcbiAgICAgIGF0dGFjaG1lbnQuZmlsZSBpbnN0YW5jZW9mIEZpbGUgfHxcbiAgICAgIGF0dGFjaG1lbnQub3JpZ2luYWxGaWxlIGluc3RhbmNlb2YgRmlsZSB8fFxuICAgICAgYXR0YWNobWVudC51cmxfdGh1bWJuYWlsIHx8XG4gICAgICBhdHRhY2htZW50LnVybF9vcmlnaW5hbCB8fFxuICAgICAgYXR0YWNobWVudC51cmxfZmlsZVxuICAgICkge1xuICAgICAgc2V0UHJldmlld0F0dGFjaG1lbnQoYXR0YWNobWVudClcbiAgICB9XG4gIH1cblxuICBjb25zdCBoYW5kbGVDbG9zZVByZXZpZXcgPSAoKSA9PiB7XG4gICAgc2V0UHJldmlld0F0dGFjaG1lbnQobnVsbClcbiAgfVxuXG4gIGNvbnN0IGhhbmRsZUF0dGFjaG1lbnREb3dubG9hZCA9IGFzeW5jIChhdHRhY2htZW50OiBBdHRhY2htZW50RmlsZSkgPT4ge1xuICAgIGNvbnN0IGV4dGVuc2lvbiA9IGF0dGFjaG1lbnQubmFtZS5pbmNsdWRlcygnLicpID8gJycgOiBgLiR7YXR0YWNobWVudC50eXBlfWBcbiAgICBjb25zdCBmaWxlTmFtZSA9IGAke2F0dGFjaG1lbnQubmFtZX0ke2V4dGVuc2lvbn1gXG4gICAgY29uc3QgZmlsZVVybCA9IGF0dGFjaG1lbnQudXJsX29yaWdpbmFsIHx8IGF0dGFjaG1lbnQudXJsX2ZpbGUgfHwgYXR0YWNobWVudC51cmxfdGh1bWJuYWlsXG5cbiAgICB0cnkge1xuICAgICAgbGV0IGJsb2JVcmw6IHN0cmluZyB8IG51bGwgPSBudWxsXG5cbiAgICAgIGlmIChmaWxlVXJsKSB7XG4gICAgICAgIGNvbnN0IGRvd25sb2FkZWRGaWxlID0gYXdhaXQgZG93bmxvYWRGaWxlRnJvbVVybChmaWxlVXJsLCBmaWxlTmFtZSwgYXR0YWNobWVudC50eXBlKVxuICAgICAgICBibG9iVXJsID0gVVJMLmNyZWF0ZU9iamVjdFVSTChkb3dubG9hZGVkRmlsZSlcbiAgICAgIH0gZWxzZSBpZiAoYXR0YWNobWVudC5maWxlIGluc3RhbmNlb2YgRmlsZSkge1xuICAgICAgICBibG9iVXJsID0gVVJMLmNyZWF0ZU9iamVjdFVSTChhdHRhY2htZW50LmZpbGUpXG4gICAgICB9XG5cbiAgICAgIGlmICghYmxvYlVybCkgcmV0dXJuXG5cbiAgICAgIGNvbnN0IGxpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJylcbiAgICAgIGxpbmsuaHJlZiA9IGJsb2JVcmxcbiAgICAgIGxpbmsuZG93bmxvYWQgPSBmaWxlTmFtZVxuICAgICAgbGluay5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnXG4gICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGxpbmspXG4gICAgICBsaW5rLmNsaWNrKClcblxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQobGluaylcbiAgICAgICAgVVJMLnJldm9rZU9iamVjdFVSTChibG9iVXJsKVxuICAgICAgfSwgMTAwKVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdGYWlsZWQgdG8gZG93bmxvYWQgYXR0YWNobWVudCcsIGVycm9yKVxuICAgIH1cbiAgfVxuXG4gIGlmIChpc0NoYW5nZVByb2plY3QgJiYgb3B0aW9ucykge1xuICAgIHJldHVybiAoXG4gICAgICA8TWVzc2FnZVdyYXBwZXIga2V5PXtpZH0gaXNDdXJyZW50VXNlcj17aXNDdXJyZW50VXNlcn0gZGF0YS1tZXNzYWdlLWlkPXtpZH0gaGFzRmVlZGJhY2s9e2ZhbHNlfT5cbiAgICAgICAgPFNDTWVzc2FnZUl0ZW1XcmFwcGVyICRpc0Fzc2lzdGFudD17aXNBc3Npc3RhbnR9PlxuICAgICAgICAgIDxNZXNzYWdlQ29udGVudFdyYXBwZXJcbiAgICAgICAgICAgIGlzQ2hhbmdlUHJvamVjdD17aXNDaGFuZ2VQcm9qZWN0fVxuICAgICAgICAgICAgbWVzc2FnZT17bWVzc2FnZX1cbiAgICAgICAgICAgIGlzQ3VycmVudFVzZXI9e2lzQ3VycmVudFVzZXJ9XG4gICAgICAgICAgICBpc0Vycm9yPXtpc0Vycm9yfVxuICAgICAgICAgICAgbWVzc2FnZUV4dHJhQ29udGVudD17PE1lc3NhZ2VPcHRpb25zIG9wdGlvbnM9e29wdGlvbnMgYXMgYW55fSBoYW5kbGVTZWxlY3RPcHRpb249e2hhbmRsZVNlbGVjdE9wdGlvbn0gLz59XG4gICAgICAgICAgLz5cbiAgICAgICAgPC9TQ01lc3NhZ2VJdGVtV3JhcHBlcj5cbiAgICAgIDwvTWVzc2FnZVdyYXBwZXI+XG4gICAgKVxuICB9XG5cbiAgY29uc3QgaGFuZGxlRmVlZGJhY2tDbGljayA9IChmZWVkYmFjazogRmVlZGJhY2spID0+IHtcbiAgICBjb25zdCBzZXNzaW9uSWQgPSBpZFxuICAgICAgLnNwbGl0KCctJylcbiAgICAgIC5maWx0ZXIocXVlc3Rpb25JZCA9PiBxdWVzdGlvbklkICE9PSAnYW5zd2VyJylcbiAgICAgIC5qb2luKCctJylcbiAgICBoYW5kbGVGZWVkYmFjaz8uKGZlZWRiYWNrLCBzZXNzaW9uSWQpXG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxTQ01lc3NhZ2VJdGVtV3JhcHBlciAkaXNBc3Npc3RhbnQ9e2lzQXNzaXN0YW50fSBkYXRhLW1lc3NhZ2UtaWQ9e2lkfT5cbiAgICAgIDxTQ01lc3NhZ2VJdGVtSW5uZXI+XG4gICAgICAgIHtpc0Fzc2lzdGFudCAmJiAhaXNBY3RpdmVTdHJlYW1pbmcgJiYgPFJlYXNvbmluZ0Jsb2NrIG1lc3NhZ2VJZD17aWR9IHRyYWNlPXtwcm9wcy5yZWFzb25pbmcgPz8gbnVsbH0gLz59XG4gICAgICAgIHshIW1lc3NhZ2VBdHRhY2htZW50cy5sZW5ndGggJiYgKFxuICAgICAgICAgIDxTQ0F0dGFjaG1lbnRzUm93ICRpc0Fzc2lzdGFudD17aXNBc3Npc3RhbnR9PlxuICAgICAgICAgICAge21lc3NhZ2VBdHRhY2htZW50cy5tYXAoKGF0dGFjaG1lbnQsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICAgIC8vIERldGVjdGFyIHNpIGVzIHVuIGFyY2hpdm8gZGUgYXVkaW9cbiAgICAgICAgICAgICAgY29uc3QgYXR0YWNobWVudFR5cGUgPSBhdHRhY2htZW50Py50eXBlPy50b0xvd2VyQ2FzZSgpIHx8ICcnXG4gICAgICAgICAgICAgIGNvbnN0IGF0dGFjaG1lbnROYW1lID0gYXR0YWNobWVudD8ubmFtZT8udG9Mb3dlckNhc2UoKSB8fCAnJ1xuICAgICAgICAgICAgICBjb25zdCBpc0F1ZGlvRmlsZSA9XG4gICAgICAgICAgICAgICAgYXR0YWNobWVudFR5cGUuc3RhcnRzV2l0aCgnYXVkaW8vJykgfHxcbiAgICAgICAgICAgICAgICBbJ2ZsYWMnLCAnbTRhJywgJ21wMycsICdtcDQnLCAnb2dhJywgJ29nZycsICd3YXYnLCAnd2VibSddLmluY2x1ZGVzKGF0dGFjaG1lbnRUeXBlKSB8fFxuICAgICAgICAgICAgICAgIFsnLmZsYWMnLCAnLm00YScsICcubXAzJywgJy5tcDQnLCAnLm9nYScsICcub2dnJywgJy53YXYnLCAnLndlYm0nXS5zb21lKGV4dCA9PlxuICAgICAgICAgICAgICAgICAgYXR0YWNobWVudE5hbWUuZW5kc1dpdGgoZXh0KVxuICAgICAgICAgICAgICAgIClcblxuICAgICAgICAgICAgICBpZiAoaXNBdWRpb0ZpbGUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gPEF0dGFjaG1lbnRDYXJkQXVkaW8ga2V5PXtgJHthdHRhY2htZW50LmlkfS0ke2F0dGFjaG1lbnQubmFtZX1gfSBhdHRhY2htZW50PXthdHRhY2htZW50fSAvPlxuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICA8QXR0YWNobWVudENhcmRcbiAgICAgICAgICAgICAgICAgIGtleT17YCR7YXR0YWNobWVudC5pZH0tJHthdHRhY2htZW50Lm5hbWV9YH1cbiAgICAgICAgICAgICAgICAgIGF0dGFjaG1lbnQ9e2F0dGFjaG1lbnR9XG4gICAgICAgICAgICAgICAgICBwb3NpdGlvbkluZGV4PXtpbmRleH1cbiAgICAgICAgICAgICAgICAgIG9uRG93bmxvYWQ9eygpID0+IGhhbmRsZUF0dGFjaG1lbnREb3dubG9hZChhdHRhY2htZW50KX1cbiAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IGhhbmRsZUF0dGFjaG1lbnRDbGljayhhdHRhY2htZW50KX1cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9KX1cbiAgICAgICAgICA8L1NDQXR0YWNobWVudHNSb3c+XG4gICAgICAgICl9XG4gICAgICAgIHsoISFtZXNzYWdlIHx8IChpc0FjdGl2ZVN0cmVhbWluZyAmJiBoYXNTdHJlYW1UZXh0KSkgJiYgIShpc0Fzc2lzdGFudCAmJiAhIW1lc3NhZ2VBdHRhY2htZW50cy5sZW5ndGgpICYmIChcbiAgICAgICAgICA8U3RyZWFtaW5nTWVzc2FnZUJvZHlcbiAgICAgICAgICAgIG1lc3NhZ2U9e21lc3NhZ2UgPz8gJyd9XG4gICAgICAgICAgICBpc1N0cmVhbWluZz17aXNBY3RpdmVTdHJlYW1pbmcgJiYgaGFzU3RyZWFtVGV4dH1cbiAgICAgICAgICAgIGlzQ3VycmVudFVzZXI9e2lzQ3VycmVudFVzZXJ9XG4gICAgICAgICAgICBpc0Fzc2lzdGFudD17aXNBc3Npc3RhbnR9XG4gICAgICAgICAgICBpc0Zyb250ZW5kQ2FuY2VsbGVkPXtwcm9wcy5pc0Zyb250ZW5kQ2FuY2VsbGVkfVxuICAgICAgICAgICAgYXBwcm92YWw9e2FwcHJvdmFsfVxuICAgICAgICAgICAgaXNFcnJvcj17aXNFcnJvcn1cbiAgICAgICAgICAgIHNvdXJjZXM9e3NvdXJjZXN9XG4gICAgICAgICAgICBzdWdnZXN0aW9ucz17c3VnZ2VzdGlvbnN9XG4gICAgICAgICAgICBjcmVhdGVBZ2VudEZvbGxvd1VwPXtjcmVhdGVBZ2VudEZvbGxvd1VwfVxuICAgICAgICAgICAgaGFuZGxlRmVlZGJhY2tDbGljaz17aGFuZGxlRmVlZGJhY2tDbGlja31cbiAgICAgICAgICAgIGRpc2FibGVGZWVkYmFjaz17ZGlzYWJsZUZlZWRiYWNrID8/IG51bGx9XG4gICAgICAgICAgICBoYW5kbGVTdWdnZXN0aW9uQ2xpY2s9e2hhbmRsZVN1Z2dlc3Rpb25DbGlja31cbiAgICAgICAgICAgIHN1Z2dlc3Rpb25zRGlzYWJsZWQ9e2lzQWN0aXZlU3RyZWFtaW5nIHx8ICEhaGFzU2VsZWN0ZWRTdWdnZXN0aW9ufVxuICAgICAgICAgICAgbWVzc2FnZUlkPXtpZH1cbiAgICAgICAgICAgIGlzTGFzdE1lc3NhZ2U9e2lzTGFzdE1lc3NhZ2V9XG4gICAgICAgICAgLz5cbiAgICAgICAgKX1cbiAgICAgICAgey8qIExhIGFjY2nDs24gdmEgREVCQUpPIGRlbCB0ZXh0bzogcHJpbWVybyBzZSBsZWUgcXXDqSB2YSBhIGhhY2VyIHkgYWJham9cbiAgICAgICAgICAgIHF1w6kgZXN0w6EgaGFjaWVuZG8sIGNvbW8gZW4gQ2hhdEdQVC4gTG8gdGVuw61hbW9zIGFsIHJldsOpcy5cbiAgICAgICAgICAgIFNpbiBTQ0xvYWRpbmdNZXNzYWdlc0NvbHVtbjogc3UgYG1hcmdpbi10b3A6IC0yNHB4YCBlc3TDoSBjYWxpYnJhZG9cbiAgICAgICAgICAgIHBhcmEgZWwgZ2FwIGRlIDM2cHggZGUgU0NNZXNzYWdlc0lubmVyLCB5IGFjw6EgZWwgcGFkcmUgZXNcbiAgICAgICAgICAgIFNDTWVzc2FnZUl0ZW1Jbm5lciBjb24gZ2FwIDhweCDigJQgcGludGFiYSBlbCBpbmRpY2Fkb3IgZW5jaW1hLiAqL31cbiAgICAgICAge2lzQXNzaXN0YW50ICYmIGlzQWN0aXZlU3RyZWFtaW5nICYmIHN0cmVhbUFjdGl2aXR5ICYmIDxBZ2VudEFjdGl2aXR5SW5kaWNhdG9yIGFjdGl2aXR5PXtzdHJlYW1BY3Rpdml0eX0gLz59XG4gICAgICAgIHthcHByb3ZhbCAmJiBhcHByb3ZhbC5wZW5kaW5nX2FjdGlvbnMgJiYgKFxuICAgICAgICAgIDxTQ0FwcHJvdmFsQWN0aW9uc0NvbHVtbj5cbiAgICAgICAgICAgIDxBcHByb3ZhbEJveFxuICAgICAgICAgICAgICBhY3Rpb25zPXthcHByb3ZhbC5wZW5kaW5nX2FjdGlvbnN9XG4gICAgICAgICAgICAgIHN0YXR1cz17YXBwcm92YWxTdGF0dXN9XG4gICAgICAgICAgICAgIG9uQXBwcm92ZT17dGhyZWFkSWRzID0+IGhhbmRsZUFwcHJvdmFsRGVjaXNpb24odGhyZWFkSWRzLCAnYXBwcm92ZScpfVxuICAgICAgICAgICAgICBvblJlamVjdD17dGhyZWFkSWRzID0+IGhhbmRsZUFwcHJvdmFsRGVjaXNpb24odGhyZWFkSWRzLCAncmVqZWN0Jyl9XG4gICAgICAgICAgICAgIGlzUHJvamVjdERlbGV0ZWQ9e3Byb3BzLnByb2plY3RNZXRhZGF0YT8uaXNfZGVsZXRlZCA9PT0gdHJ1ZX1cbiAgICAgICAgICAgICAgaXNFeHBhbmRlZD17cHJvcHMuZXhwYW5kZWR9XG4gICAgICAgICAgICAgIGhpdGxJbnN0YW5jZUlkPXthcHByb3ZhbC5vcmlnaW5hbF90aHJlYWRfaWR9XG4gICAgICAgICAgICAgIHdhcm5pbmdNZXNzYWdlPXthcHByb3ZhbC53YXJuaW5nX21lc3NhZ2V9XG4gICAgICAgICAgICAgIG1hbnVhbEFwcHJvdmFsRGV0ZWN0ZWQ9e2FwcHJvdmFsLm1hbnVhbF9hcHByb3ZhbF9kZXRlY3RlZH1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC9TQ0FwcHJvdmFsQWN0aW9uc0NvbHVtbj5cbiAgICAgICAgKX1cbiAgICAgIDwvU0NNZXNzYWdlSXRlbUlubmVyPlxuICAgICAgPEF0dGFjaG1lbnRQcmV2aWV3TW9kYWxcbiAgICAgICAgaXNPcGVuPXshIXByZXZpZXdBdHRhY2htZW50fVxuICAgICAgICBvbkNsb3NlPXtoYW5kbGVDbG9zZVByZXZpZXd9XG4gICAgICAgIGF0dGFjaG1lbnQ9e3ByZXZpZXdBdHRhY2htZW50fVxuICAgICAgLz5cbiAgICA8L1NDTWVzc2FnZUl0ZW1XcmFwcGVyPlxuICApXG59KVxuXG5jb25zdCBDaGF0QUlNZXNzYWdlc0lubmVyID0gKHtcbiAgdXNlckluaXRpYWxNZXNzYWdlLFxuICBpbml0aWFsQ2hhdElkLFxuICBvbkVycm9yLFxuICBvblNlbmRNZXNzYWdlUmVhZHksXG4gIG9uU2Nyb2xsVG9Cb3R0b20sXG4gIGF0dGFjaG1lbnRzLFxuICBhZ2VudHMsXG4gIGV4cGFuZGVkLFxufTogQ2hhdEFJTWVzc2FnZXNQcm9wcykgPT4ge1xuICBjb25zdCB7IHQgfSA9IHVzZVQoKVxuICBjb25zdCB7IGlzV2ViU2VhcmNoQWN0aXZlLCBpc0RlZXBTZWFyY2hBY3RpdmUsIGFnZW50IH0gPSB1c2VHbG9iYWxDb250ZXh0KClcbiAgY29uc3QgZXZlbnQgPSB1c2VFdmVudCgpXG4gIGNvbnN0IGF1dGhVc2VyID0gdXNlVXNlcigpXG4gIGNvbnN0IG1lc3NhZ2VzUmVmID0gdXNlUmVmPEhUTUxEaXZFbGVtZW50PihudWxsKVxuICBjb25zdCBjaGF0SW5pdGlhbGl6ZWRSZWYgPSB1c2VSZWYoZmFsc2UpXG4gIGNvbnN0IGlzTG9hZGluZ01vcmVSZWYgPSB1c2VSZWYoZmFsc2UpXG4gIGNvbnN0IHVzZXJTY3JvbGxpbmdSZWYgPSB1c2VSZWYoZmFsc2UpXG4gIGNvbnN0IHNjcm9sbFRocmVzaG9sZFJlZiA9IHVzZVJlZigzOSlcbiAgY29uc3QgbGFzdFNjcm9sbFRvcFJlZiA9IHVzZVJlZigwKVxuICBjb25zdCBzaG93U2Nyb2xsVG9Cb3R0b21SZWYgPSB1c2VSZWYoZmFsc2UpXG4gIGNvbnN0IHNob3dUb3BHcmFkaWVudFJlZiA9IHVzZVJlZihmYWxzZSlcbiAgY29uc3Qgc2hvd0JvdHRvbUdyYWRpZW50UmVmID0gdXNlUmVmKGZhbHNlKVxuICBjb25zdCBzY3JvbGxSYWZSZWYgPSB1c2VSZWY8bnVtYmVyIHwgbnVsbD4obnVsbClcbiAgLyoqXG4gICAqIFR1cm5vIGNvbiBlbCBzY3JvbGwgYmFqbyBjb250cm9sIGRlbCB1c3VhcmlvOiBkZXNkZSBxdWUgZW52w61hIGVsIG1lbnNhamUgeVxuICAgKiBoYXN0YSBlbCBwcsOzeGltbyBlbnbDrW8gbm8gbW92ZW1vcyBlbCBzY3JvbGwgcG9yIG5pbmfDum4gbW90aXZvLiBFc1xuICAgKiBpbmRlcGVuZGllbnRlIGRlIGxhIGFsdHVyYSBkZWwgc3BhY2VyLCBxdWUgcHVlZGUgbGxlZ2FyIGEgMCBzaW4gZGVzYW5jbGFyLlxuICAgKi9cbiAgY29uc3QgYW5jaG9yZWRUdXJuSWRSZWYgPSB1c2VSZWY8c3RyaW5nIHwgbnVsbD4obnVsbClcbiAgY29uc3Qgc3BhY2VyRWxSZWYgPSB1c2VSZWY8SFRNTERpdkVsZW1lbnQgfCBudWxsPihudWxsKVxuICBjb25zdCBzcGFjZXJIZWlnaHRSZWYgPSB1c2VSZWYoMClcbiAgY29uc3QgdHVyblNjcm9sbFJhZlJlZiA9IHVzZVJlZjxudW1iZXIgfCBudWxsPihudWxsKVxuICBjb25zdCB3YXNMb2FkaW5nTWVzc2FnZXNSZWYgPSB1c2VSZWYoZmFsc2UpXG4gIGNvbnN0IGxhc3RTY3JvbGxlZFNlc3Npb25SZWYgPSB1c2VSZWY8c3RyaW5nIHwgbnVsbD4obnVsbClcbiAgY29uc3QgW3Nob3dTY3JvbGxUb0JvdHRvbSwgc2V0U2hvd1Njcm9sbFRvQm90dG9tXSA9IHVzZVN0YXRlKGZhbHNlKVxuICBjb25zdCBbc2hvd1RvcEdyYWRpZW50LCBzZXRTaG93VG9wR3JhZGllbnRdID0gdXNlU3RhdGUoZmFsc2UpXG4gIGNvbnN0IFtzaG93Qm90dG9tR3JhZGllbnQsIHNldFNob3dCb3R0b21HcmFkaWVudF0gPSB1c2VTdGF0ZShmYWxzZSlcbiAgY29uc3QgW3NlbGVjdGVkU3VnZ2VzdGlvbk1lc3NhZ2VJZHMsIHNldFNlbGVjdGVkU3VnZ2VzdGlvbk1lc3NhZ2VJZHNdID0gdXNlU3RhdGU8UmVjb3JkPHN0cmluZywgYm9vbGVhbj4+KHt9KVxuXG4gIGNvbnN0IHtcbiAgICBtZXNzYWdlcyxcbiAgICBsb2FkaW5nTWVzc2FnZXMsXG4gICAgaXNMb2FkaW5nTW9yZU1lc3NhZ2VzLFxuICAgIHdhaXRpbmdSZXNwb25zZSxcbiAgICBpc1dyaXRpbmcsXG4gICAgbG9hZGluZ01lc3NhZ2UsXG4gICAgc3RyZWFtQWN0aXZpdHksXG4gICAgYWN0aXZlTG9hZGluZ3MsXG4gICAgc2VuZE1lc3NhZ2UsXG4gICAgY2hhbmdlUHJvamVjdCxcbiAgICBoYW5kbGVGZWVkYmFjayxcbiAgICBoYW5kbGVBcHByb3ZhbERlY2lzaW9uLFxuICAgIGluaXRpYWxpemVDaGF0LFxuICAgIGhhbmRsZVNjcm9sbCxcbiAgICBzdG9wR2VuZXJhdGlvbixcbiAgfSA9IHVzZUNoYXRNYW5hZ2VyKHtcbiAgICBjaGF0SWQ6IGluaXRpYWxDaGF0SWQgfHwgdW5kZWZpbmVkLFxuICAgIHVzZXJJbml0aWFsTWVzc2FnZSxcbiAgICBvbkVycm9yLFxuICAgIGF0dGFjaG1lbnRzLFxuICAgIGFnZW50cyxcbiAgfSlcblxuICBjb25zdCBoYW5kbGVTZWxlY3RPcHRpb24gPSB1c2VDYWxsYmFjayhcbiAgICAob3B0aW9uOiBQcm9qZWN0KSA9PiB7XG4gICAgICBjaGFuZ2VQcm9qZWN0KG9wdGlvbilcbiAgICB9LFxuICAgIFtjaGFuZ2VQcm9qZWN0XVxuICApXG5cbiAgLyoqXG4gICAqIFJlY2FsY3VsYSBlbCBib3TDs24gXCJzY3JvbGwgdG8gYm90dG9tXCIgeSBsb3MgZ3JhZGllbnRlcyBkZSBib3JkZSBhIHBhcnRpciBkZVxuICAgKiBsYSBwb3NpY2nDs24gZGVsIHNjcm9sbC4gTG9zIHJlZnMgZXZpdGFuIGBzZXRTdGF0ZWAgY3VhbmRvIGVsIHZhbG9yIG5vIGNhbWJpYTpcbiAgICogZXN0byBjb3JyZSBlbiBjYWRhIGZyYW1lIGRlbCBzdHJlYW0uXG4gICAqL1xuICBjb25zdCB1cGRhdGVTY3JvbGxBZmZvcmRhbmNlcyA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBjb25zdCBlbCA9IG1lc3NhZ2VzUmVmLmN1cnJlbnRcbiAgICBpZiAoIWVsKSByZXR1cm5cbiAgICBjb25zdCB7IHNjcm9sbFRvcCwgc2Nyb2xsSGVpZ2h0LCBjbGllbnRIZWlnaHQgfSA9IGVsXG4gICAgLy8gRWwgc3BhY2VyIGRlbCB0dXJubyBlcyBhbHRvIHJlc2VydmFkbywgbm8gY29udGVuaWRvOiBzaSBubyBsbyBkZXNjb250YW1vc1xuICAgIC8vIGxhIGZsZWNoYSB5IGVsIGdyYWRpZW50ZSBkZSBhYmFqbyBxdWVkYW4gZW5jZW5kaWRvcyBkdXJhbnRlIHRvZG8gZWwgdHVybm8uXG4gICAgY29uc3QgZGlzdGFuY2VGcm9tQm90dG9tID0gc2Nyb2xsSGVpZ2h0IC0gc3BhY2VySGVpZ2h0UmVmLmN1cnJlbnQgLSBzY3JvbGxUb3AgLSBjbGllbnRIZWlnaHRcblxuICAgIGNvbnN0IHNob3VsZFNob3cgPSBkaXN0YW5jZUZyb21Cb3R0b20gPiA1MFxuICAgIGlmIChzaG93U2Nyb2xsVG9Cb3R0b21SZWYuY3VycmVudCAhPT0gc2hvdWxkU2hvdykge1xuICAgICAgc2hvd1Njcm9sbFRvQm90dG9tUmVmLmN1cnJlbnQgPSBzaG91bGRTaG93XG4gICAgICBzZXRTaG93U2Nyb2xsVG9Cb3R0b20oc2hvdWxkU2hvdylcbiAgICB9XG5cbiAgICBjb25zdCBuZXh0VG9wR3JhZGllbnQgPSBzY3JvbGxUb3AgPiAxXG4gICAgaWYgKHNob3dUb3BHcmFkaWVudFJlZi5jdXJyZW50ICE9PSBuZXh0VG9wR3JhZGllbnQpIHtcbiAgICAgIHNob3dUb3BHcmFkaWVudFJlZi5jdXJyZW50ID0gbmV4dFRvcEdyYWRpZW50XG4gICAgICBzZXRTaG93VG9wR3JhZGllbnQobmV4dFRvcEdyYWRpZW50KVxuICAgIH1cblxuICAgIGNvbnN0IG5leHRCb3R0b21HcmFkaWVudCA9IGRpc3RhbmNlRnJvbUJvdHRvbSA+IDFcbiAgICBpZiAoc2hvd0JvdHRvbUdyYWRpZW50UmVmLmN1cnJlbnQgIT09IG5leHRCb3R0b21HcmFkaWVudCkge1xuICAgICAgc2hvd0JvdHRvbUdyYWRpZW50UmVmLmN1cnJlbnQgPSBuZXh0Qm90dG9tR3JhZGllbnRcbiAgICAgIHNldFNob3dCb3R0b21HcmFkaWVudChuZXh0Qm90dG9tR3JhZGllbnQpXG4gICAgfVxuICB9LCBbXSlcblxuICAvKipcbiAgICogU2Nyb2xsIGlubWVkaWF0byBhbCBmb25kbyAoZGVudHJvIGRlIHJBRiBwYXJhIGNvb3JkaW5hciBjb24gZWwgcGFpbnQpXG4gICAqIHkgYWN0dWFsaXphIGxhIHZpc2liaWxpZGFkIGRlbCBib3TDs24uIFJlc3BldGEgYHNraXBJZlVzZXJTY3JvbGxpbmdgIHBhcmFcbiAgICogbm8gc29icmVzY3JpYmlyIGVsIHNjcm9sbCBtYW51YWwgZGVsIHVzdWFyaW8gZHVyYW50ZSBlbCBzdHJlYW1pbmcuXG4gICAqL1xuICBjb25zdCBzY3JvbGxUb0JvdHRvbVJhZiA9IHVzZUNhbGxiYWNrKFxuICAgIChvcHRzOiB7IHNraXBJZlVzZXJTY3JvbGxpbmc/OiBib29sZWFuOyBkZWxheU1zPzogbnVtYmVyIH0gPSB7fSkgPT4ge1xuICAgICAgY29uc3QgeyBza2lwSWZVc2VyU2Nyb2xsaW5nID0gZmFsc2UsIGRlbGF5TXMgPSAwIH0gPSBvcHRzXG4gICAgICBjb25zdCBydW4gPSAoKSA9PiB7XG4gICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICAgICAgY29uc3QgZWwgPSBtZXNzYWdlc1JlZi5jdXJyZW50XG4gICAgICAgICAgaWYgKCFlbCkgcmV0dXJuXG4gICAgICAgICAgaWYgKHNraXBJZlVzZXJTY3JvbGxpbmcgJiYgdXNlclNjcm9sbGluZ1JlZi5jdXJyZW50KSByZXR1cm5cbiAgICAgICAgICBlbC5zY3JvbGxUb3AgPSBlbC5zY3JvbGxIZWlnaHRcbiAgICAgICAgICB1cGRhdGVTY3JvbGxBZmZvcmRhbmNlcygpXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgICBpZiAoZGVsYXlNcyA+IDApIHNldFRpbWVvdXQocnVuLCBkZWxheU1zKVxuICAgICAgZWxzZSBydW4oKVxuICAgIH0sXG4gICAgW3VwZGF0ZVNjcm9sbEFmZm9yZGFuY2VzXVxuICApXG5cbiAgY29uc3QgY2FuY2VsVHVyblNjcm9sbCA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBpZiAodHVyblNjcm9sbFJhZlJlZi5jdXJyZW50ID09PSBudWxsKSByZXR1cm5cbiAgICBjYW5jZWxBbmltYXRpb25GcmFtZSh0dXJuU2Nyb2xsUmFmUmVmLmN1cnJlbnQpXG4gICAgdHVyblNjcm9sbFJhZlJlZi5jdXJyZW50ID0gbnVsbFxuICB9LCBbXSlcblxuICAvKipcbiAgICogU2Nyb2xsIGFuaW1hZG8gY29uIGVhc2luZyBwcm9waW86IGBiZWhhdmlvcjogJ3Ntb290aCdgIG5vIHBlcm1pdGUgcmVndWxhciBsYVxuICAgKiBkdXJhY2nDs24geSBlbCBzYWx0byBhbCBhbmNsYXIgZWwgdHVybm8gcXVlZGEgZGVtYXNpYWRvIHNlY28uXG4gICAqL1xuICBjb25zdCBhbmltYXRlU2Nyb2xsVG8gPSB1c2VDYWxsYmFjayhcbiAgICAodG9wOiBudW1iZXIpID0+IHtcbiAgICAgIGNhbmNlbFR1cm5TY3JvbGwoKVxuICAgICAgY29uc3QgZWwgPSBtZXNzYWdlc1JlZi5jdXJyZW50XG4gICAgICBpZiAoIWVsKSByZXR1cm5cbiAgICAgIGNvbnN0IGZyb20gPSBlbC5zY3JvbGxUb3BcbiAgICAgIGNvbnN0IGRpc3RhbmNlID0gdG9wIC0gZnJvbVxuICAgICAgaWYgKE1hdGguYWJzKGRpc3RhbmNlKSA8IDEpIHJldHVyblxuXG4gICAgICBjb25zdCBzdGFydGVkQXQgPSBwZXJmb3JtYW5jZS5ub3coKVxuICAgICAgY29uc3Qgc3RlcCA9IChub3c6IG51bWJlcikgPT4ge1xuICAgICAgICBjb25zdCBwcm9ncmVzcyA9IE1hdGgubWluKDEsIChub3cgLSBzdGFydGVkQXQpIC8gVFVSTl9TQ1JPTExfRFVSQVRJT05fTVMpXG4gICAgICAgIGNvbnN0IGVhc2VkID0gMSAtICgxIC0gcHJvZ3Jlc3MpICoqIDNcbiAgICAgICAgZWwuc2Nyb2xsVG9wID0gZnJvbSArIGRpc3RhbmNlICogZWFzZWRcbiAgICAgICAgdXBkYXRlU2Nyb2xsQWZmb3JkYW5jZXMoKVxuICAgICAgICB0dXJuU2Nyb2xsUmFmUmVmLmN1cnJlbnQgPSBwcm9ncmVzcyA8IDEgPyByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoc3RlcCkgOiBudWxsXG4gICAgICB9XG4gICAgICB0dXJuU2Nyb2xsUmFmUmVmLmN1cnJlbnQgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoc3RlcClcbiAgICB9LFxuICAgIFtjYW5jZWxUdXJuU2Nyb2xsLCB1cGRhdGVTY3JvbGxBZmZvcmRhbmNlc11cbiAgKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiBjYW5jZWxUdXJuU2Nyb2xsLCBbY2FuY2VsVHVyblNjcm9sbF0pXG5cbiAgY29uc3Qgc2V0U3BhY2VySGVpZ2h0ID0gdXNlQ2FsbGJhY2soKG5leHQ6IG51bWJlcikgPT4ge1xuICAgIGlmIChNYXRoLmFicyhzcGFjZXJIZWlnaHRSZWYuY3VycmVudCAtIG5leHQpIDwgMSkgcmV0dXJuXG4gICAgc3BhY2VySGVpZ2h0UmVmLmN1cnJlbnQgPSBuZXh0XG4gICAgaWYgKHNwYWNlckVsUmVmLmN1cnJlbnQpIHtcbiAgICAgIHNwYWNlckVsUmVmLmN1cnJlbnQuc3R5bGUuaGVpZ2h0ID0gYCR7bmV4dH1weGBcbiAgICB9XG4gIH0sIFtdKVxuXG4gIGNvbnN0IGNsZWFyVHVyblNwYWNlID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGFuY2hvcmVkVHVybklkUmVmLmN1cnJlbnQgPSBudWxsXG4gICAgc2V0U3BhY2VySGVpZ2h0KDApXG4gIH0sIFtzZXRTcGFjZXJIZWlnaHRdKVxuXG4gIGNvbnN0IG1lYXN1cmVUdXJuID0gdXNlQ2FsbGJhY2soKHF1ZXN0aW9uSWQ6IHN0cmluZykgPT4ge1xuICAgIGNvbnN0IGVsID0gbWVzc2FnZXNSZWYuY3VycmVudFxuICAgIGNvbnN0IHNwYWNlckVsID0gc3BhY2VyRWxSZWYuY3VycmVudFxuICAgIGlmICghZWwgfHwgIXNwYWNlckVsKSByZXR1cm4gbnVsbFxuXG4gICAgY29uc3QgcXVlc3Rpb25FbCA9IGVsLnF1ZXJ5U2VsZWN0b3I8SFRNTEVsZW1lbnQ+KGBbZGF0YS1tZXNzYWdlLWlkPVwiJHtxdWVzdGlvbklkfVwiXWApXG4gICAgaWYgKCFxdWVzdGlvbkVsKSByZXR1cm4gbnVsbFxuXG4gICAgY29uc3QgY29udGFpbmVyVG9wID0gZWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wXG4gICAgY29uc3QgcXVlc3Rpb25Ub3AgPSBxdWVzdGlvbkVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcCAtIGNvbnRhaW5lclRvcCArIGVsLnNjcm9sbFRvcFxuICAgIGNvbnN0IGNvbnRlbnRCb3R0b20gPSBzcGFjZXJFbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3AgLSBjb250YWluZXJUb3AgKyBlbC5zY3JvbGxUb3BcbiAgICByZXR1cm4geyBlbCwgcXVlc3Rpb25Ub3AsIHR1cm5IZWlnaHQ6IGNvbnRlbnRCb3R0b20gLSBxdWVzdGlvblRvcCB9XG4gIH0sIFtdKVxuXG4gIGNvbnN0IHJlc2VydmVUdXJuU3BhY2UgPSB1c2VDYWxsYmFjayhcbiAgICAocXVlc3Rpb25JZDogc3RyaW5nKSA9PiB7XG4gICAgICBjb25zdCBtZWFzdXJlZCA9IG1lYXN1cmVUdXJuKHF1ZXN0aW9uSWQpXG4gICAgICBpZiAoIW1lYXN1cmVkKSByZXR1cm5cbiAgICAgIGNvbnN0IHsgZWwsIHF1ZXN0aW9uVG9wLCB0dXJuSGVpZ2h0IH0gPSBtZWFzdXJlZFxuXG4gICAgICAvLyBBbmNsYW1vcyBzaWVtcHJlLCBpbmNsdXNvIGN1YW5kbyBubyBoYWdhIGZhbHRhIHJlc2VydmFyOiBkdXJhbnRlIGVsXG4gICAgICAvLyB0dXJubyBlbCBzY3JvbGwgbm8gc2UgbXVldmUgc29sbyBlbiBuaW5nw7puIGNhc28uXG4gICAgICBhbmNob3JlZFR1cm5JZFJlZi5jdXJyZW50ID0gcXVlc3Rpb25JZFxuXG4gICAgICBjb25zdCBvZmZzZXQgPSB0dXJuQW5jaG9yT2Zmc2V0KGVsLmNsaWVudEhlaWdodClcbiAgICAgIGNvbnN0IHRhcmdldFNjcm9sbFRvcCA9IE1hdGgubWF4KDAsIHF1ZXN0aW9uVG9wIC0gb2Zmc2V0KVxuICAgICAgLy8gQ2hhdCByZWNpw6luIGluaWNpYWRvIG8gY29udmVyc2FjacOzbiBxdWUgYcO6biBlbnRyYSBlbiBwYW50YWxsYTogbGFcbiAgICAgIC8vIHByZWd1bnRhIHlhIGVzdMOhIGFycmliYSwgbm8gaGF5IG5hZGEgcXVlIHN1YmlyIG5pIHF1ZSByZXNlcnZhci5cbiAgICAgIGlmICh0YXJnZXRTY3JvbGxUb3AgPD0gZWwuc2Nyb2xsVG9wKSB7XG4gICAgICAgIHNldFNwYWNlckhlaWdodCgwKVxuICAgICAgICB1cGRhdGVTY3JvbGxBZmZvcmRhbmNlcygpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICAvLyBSZXNlcnZhbW9zIGxvIG3DrW5pbW8gcGFyYSBxdWUgYHRhcmdldFNjcm9sbFRvcGAgc2VhIGFsY2FuemFibGUuIEVsXG4gICAgICAvLyBzcGFjZXIgc2UgaW5zZXJ0YSBkZSB1bmEgKGVzIGFsdG8gcmVzZXJ2YWRvLCBubyBjb250ZW5pZG8gdmlzaWJsZSk7XG4gICAgICAvLyBsbyDDum5pY28gcXVlIHNlIHBlcmNpYmUgZXMgZWwgZGVzcGxhemFtaWVudG8gYW5pbWFkby5cbiAgICAgIHNldFNwYWNlckhlaWdodChNYXRoLm1heCgwLCBlbC5jbGllbnRIZWlnaHQgLSB0dXJuSGVpZ2h0IC0gb2Zmc2V0KSlcbiAgICAgIGFuaW1hdGVTY3JvbGxUbyh0YXJnZXRTY3JvbGxUb3ApXG4gICAgfSxcbiAgICBbbWVhc3VyZVR1cm4sIHNldFNwYWNlckhlaWdodCwgdXBkYXRlU2Nyb2xsQWZmb3JkYW5jZXMsIGFuaW1hdGVTY3JvbGxUb11cbiAgKVxuXG4gIC8qKlxuICAgKiBFbmNvZ2UgZWwgc3BhY2VyIGEgbWVkaWRhIHF1ZSBjcmVjZSBsYSByZXNwdWVzdGE6IGVsIGFsdG8gdG90YWwgZGVsIHNjcm9sbFxuICAgKiBxdWVkYSBjb25zdGFudGUgeSBsYSB2aXN0YSBubyBzZSBtdWV2ZSBzb2xhLiBTb2xvIGFjaGljYSwgbnVuY2EgYWdyYW5kYSxcbiAgICogcGFyYSBubyBpbnllY3RhciBlc3BhY2lvIGVuIHR1cm5vcyBxdWUgYXJyYW5jYXJvbiBzaW4gcmVzZXJ2YS5cbiAgICogRGV2dWVsdmUgc2kgZWwgdHVybm8gc2lndWUgYW5jbGFkbyAoYXVucXVlIGVsIHNwYWNlciB5YSBzZWEgMCkuXG4gICAqL1xuICBjb25zdCBzeW5jVHVyblNwYWNlID0gdXNlQ2FsbGJhY2soKCk6IGJvb2xlYW4gPT4ge1xuICAgIGlmICghYW5jaG9yZWRUdXJuSWRSZWYuY3VycmVudCkgcmV0dXJuIGZhbHNlXG4gICAgaWYgKHNwYWNlckhlaWdodFJlZi5jdXJyZW50ID4gMCkge1xuICAgICAgY29uc3QgbWVhc3VyZWQgPSBtZWFzdXJlVHVybihhbmNob3JlZFR1cm5JZFJlZi5jdXJyZW50KVxuICAgICAgaWYgKG1lYXN1cmVkKSB7XG4gICAgICAgIGNvbnN0IG9mZnNldCA9IHR1cm5BbmNob3JPZmZzZXQobWVhc3VyZWQuZWwuY2xpZW50SGVpZ2h0KVxuICAgICAgICBjb25zdCByZXNlcnZlZCA9IE1hdGgubWF4KDAsIG1lYXN1cmVkLmVsLmNsaWVudEhlaWdodCAtIG1lYXN1cmVkLnR1cm5IZWlnaHQgLSBvZmZzZXQpXG4gICAgICAgIHNldFNwYWNlckhlaWdodChNYXRoLm1pbihzcGFjZXJIZWlnaHRSZWYuY3VycmVudCwgcmVzZXJ2ZWQpKVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdHJ1ZVxuICB9LCBbbWVhc3VyZVR1cm4sIHNldFNwYWNlckhlaWdodF0pXG5cbiAgY29uc3QgaGFuZGxlQ2xpY2tTY3JvbGxUb0JvdHRvbSA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBpZiAoIW1lc3NhZ2VzUmVmLmN1cnJlbnQpIHJldHVyblxuICAgIGNsZWFyVHVyblNwYWNlKClcbiAgICBtZXNzYWdlc1JlZi5jdXJyZW50LnNjcm9sbFRvKHtcbiAgICAgIHRvcDogbWVzc2FnZXNSZWYuY3VycmVudC5zY3JvbGxIZWlnaHQsXG4gICAgICBiZWhhdmlvcjogJ3Ntb290aCcsXG4gICAgfSlcbiAgICAvLyBEYXIgdGllbXBvIGFsIHNtb290aC1zY3JvbGwgYW50ZXMgZGUgcmVjYWxjdWxhciBsYSB2aXNpYmlsaWRhZCBkZWwgYm90w7NuLlxuICAgIHNldFRpbWVvdXQodXBkYXRlU2Nyb2xsQWZmb3JkYW5jZXMsIDUwMClcbiAgfSwgW2NsZWFyVHVyblNwYWNlLCB1cGRhdGVTY3JvbGxBZmZvcmRhbmNlc10pXG5cbiAgY29uc3QgaGFuZGxlU2Nyb2xsVG9Cb3R0b20gPSB1c2VDYWxsYmFjayhcbiAgICAoZTogUmVhY3QuVUlFdmVudDxIVE1MRGl2RWxlbWVudD4pID0+IHtcbiAgICAgIGNvbnN0IGNvbnRhaW5lciA9IGUuY3VycmVudFRhcmdldFxuXG4gICAgICBpZiAoc2Nyb2xsUmFmUmVmLmN1cnJlbnQgIT09IG51bGwpIHtcbiAgICAgICAgY2FuY2VsQW5pbWF0aW9uRnJhbWUoc2Nyb2xsUmFmUmVmLmN1cnJlbnQpXG4gICAgICB9XG5cbiAgICAgIHNjcm9sbFJhZlJlZi5jdXJyZW50ID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcbiAgICAgICAgc2Nyb2xsUmFmUmVmLmN1cnJlbnQgPSBudWxsXG4gICAgICAgIGNvbnN0IHsgc2Nyb2xsVG9wLCBzY3JvbGxIZWlnaHQsIGNsaWVudEhlaWdodCB9ID0gY29udGFpbmVyXG5cbiAgICAgICAgY29uc3QgaXNTY3JvbGxpbmdVcCA9IHNjcm9sbFRvcCA8IGxhc3RTY3JvbGxUb3BSZWYuY3VycmVudFxuXG4gICAgICAgIGlmIChpc1Njcm9sbGluZ1VwKSB7XG4gICAgICAgICAgc2Nyb2xsVGhyZXNob2xkUmVmLmN1cnJlbnQgPSAxNVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgaXNOZWFyQm90dG9tID0gc2Nyb2xsSGVpZ2h0IC0gc2Nyb2xsVG9wIC0gY2xpZW50SGVpZ2h0IDwgc2Nyb2xsVGhyZXNob2xkUmVmLmN1cnJlbnRcblxuICAgICAgICBpZiAoaXNOZWFyQm90dG9tKSB7XG4gICAgICAgICAgc2Nyb2xsVGhyZXNob2xkUmVmLmN1cnJlbnQgPSAzOVxuICAgICAgICB9XG5cbiAgICAgICAgdXNlclNjcm9sbGluZ1JlZi5jdXJyZW50ID0gIWlzTmVhckJvdHRvbVxuICAgICAgICBsYXN0U2Nyb2xsVG9wUmVmLmN1cnJlbnQgPSBzY3JvbGxUb3BcblxuICAgICAgICB1cGRhdGVTY3JvbGxBZmZvcmRhbmNlcygpXG5cbiAgICAgICAgaWYgKGlzTmVhckJvdHRvbSAmJiBvblNjcm9sbFRvQm90dG9tKSB7XG4gICAgICAgICAgb25TY3JvbGxUb0JvdHRvbSgpXG4gICAgICAgIH1cblxuICAgICAgICBoYW5kbGVTY3JvbGwoY29udGFpbmVyKVxuICAgICAgfSlcbiAgICB9LFxuICAgIFtvblNjcm9sbFRvQm90dG9tLCBoYW5kbGVTY3JvbGwsIHVwZGF0ZVNjcm9sbEFmZm9yZGFuY2VzXVxuICApXG5cbiAgLy8gcmVmcyB0byBzdGFiaWxpemUgZnVuY3Rpb25zIGFuZCBhdm9pZCB1bm5lY2Vzc2FyeSByZS1yZW5kZXJzXG4gIGNvbnN0IHNlbmRNZXNzYWdlUmVmID0gdXNlUmVmKHNlbmRNZXNzYWdlKVxuICBjb25zdCBzdG9wR2VuZXJhdGlvblJlZiA9IHVzZVJlZihzdG9wR2VuZXJhdGlvbilcbiAgY29uc3Qgb25TZW5kTWVzc2FnZVJlYWR5UmVmID0gdXNlUmVmKG9uU2VuZE1lc3NhZ2VSZWFkeSlcbiAgY29uc3Qgc2VuZE1lc3NhZ2VQcm94eVJlZiA9IHVzZVJlZihcbiAgICAoXG4gICAgICBtZXNzYWdlOiBzdHJpbmcsXG4gICAgICBhdHRhY2htZW50cz86IEF0dGFjaG1lbnRGaWxlW10sXG4gICAgICBmYXFJZD86IHN0cmluZyxcbiAgICAgIGFnZW50U3VnZ2VzdGlvbklkPzogc3RyaW5nLFxuICAgICAgbWVudGlvbnM/OiBDb250ZXh0TWVudGlvbltdLFxuICAgICAgZnVhSWQ/OiBzdHJpbmcsXG4gICAgICBzY0lkPzogc3RyaW5nXG4gICAgKSA9PiBzZW5kTWVzc2FnZVJlZi5jdXJyZW50KG1lc3NhZ2UsIGF0dGFjaG1lbnRzLCBmYXFJZCwgYWdlbnRTdWdnZXN0aW9uSWQsIG1lbnRpb25zLCBmdWFJZCwgc2NJZClcbiAgKVxuICBjb25zdCBzdG9wR2VuZXJhdGlvblByb3h5UmVmID0gdXNlUmVmKCgpID0+IHN0b3BHZW5lcmF0aW9uUmVmLmN1cnJlbnQoKSlcblxuICAvLyB1cGRhdGUgcmVmcyB3aGVuIGZ1bmN0aW9ucyBjaGFuZ2VcbiAgc2VuZE1lc3NhZ2VSZWYuY3VycmVudCA9IHNlbmRNZXNzYWdlXG4gIHN0b3BHZW5lcmF0aW9uUmVmLmN1cnJlbnQgPSBzdG9wR2VuZXJhdGlvblxuICBvblNlbmRNZXNzYWdlUmVhZHlSZWYuY3VycmVudCA9IG9uU2VuZE1lc3NhZ2VSZWFkeVxuXG4gIC8qKlxuICAgKiBgaGFuZGxlU3VnZ2VzdGlvbkNsaWNrYCBzZSBwYXNhIGEgVE9ET1MgbG9zIE1lc3NhZ2VJdGVtLCBhc8OtIHF1ZSBzdSBpZGVudGlkYWRcbiAgICogZGVjaWRlIHNpIGVsIGBtZW1vYCBkZSBsYSBsaXN0YSBzb3N0aWVuZS4gTGVlbW9zIHBvciByZWYgbG8gcXVlIGNhbWJpYSBlbiBjYWRhXG4gICAqIHVwZGF0ZSAoYG1lc3NhZ2VzYCwgYHNlbmRNZXNzYWdlYCwgbGFzIHN1Z2VyZW5jaWFzIHlhIGVsZWdpZGFzKSBwYXJhIHF1ZSBlbFxuICAgKiBjYWxsYmFjayBzZWEgZXN0YWJsZTogc2kgbm8sIGFsIHRlcm1pbmFyIGVsIHN0cmVhbSBzZSByZXBpbnRhIGVsIGNoYXQgZW50ZXJvXG4gICAqIHkgY2FkYSBNYWlhU3RyZWFtZG93biB2dWVsdmUgYSBwYXJzZWFyIHN1IG1hcmtkb3duLlxuICAgKi9cbiAgY29uc3QgbWVzc2FnZXNEYXRhUmVmID0gdXNlUmVmKG1lc3NhZ2VzKVxuICBtZXNzYWdlc0RhdGFSZWYuY3VycmVudCA9IG1lc3NhZ2VzXG4gIGNvbnN0IHNlbGVjdGVkU3VnZ2VzdGlvbk1lc3NhZ2VJZHNSZWYgPSB1c2VSZWYoc2VsZWN0ZWRTdWdnZXN0aW9uTWVzc2FnZUlkcylcbiAgc2VsZWN0ZWRTdWdnZXN0aW9uTWVzc2FnZUlkc1JlZi5jdXJyZW50ID0gc2VsZWN0ZWRTdWdnZXN0aW9uTWVzc2FnZUlkc1xuXG4gIGNvbnN0IGhhbmRsZVN1Z2dlc3Rpb25DbGljayA9IHVzZUNhbGxiYWNrKFxuICAgIChtZXNzYWdlSWQ6IHN0cmluZywgc3VnZ2VzdGlvbjogc3RyaW5nKSA9PiB7XG4gICAgICBpZiAoIXN1Z2dlc3Rpb24/LnRyaW0oKSkgcmV0dXJuXG4gICAgICBpZiAoc2VsZWN0ZWRTdWdnZXN0aW9uTWVzc2FnZUlkc1JlZi5jdXJyZW50W21lc3NhZ2VJZF0pIHJldHVyblxuICAgICAgY29uc3QgY3VycmVudE1lc3NhZ2VzID0gbWVzc2FnZXNEYXRhUmVmLmN1cnJlbnRcbiAgICAgIGNvbnN0IGlzTWFya2V0cGxhY2VHbG9iYWxBZ2VudCA9IGlzTWFpYWtlckFnZW50KGFnZW50KVxuICAgICAgZXZlbnQoRVZFTlRTLmFpQ2hhdFN1Z2dlc3RlZEFuc3dlciwge1xuICAgICAgICBhZ2VudF90eXBlOiBpc01hcmtldHBsYWNlR2xvYmFsQWdlbnQgPyAnbWFya2V0cGxhY2UnIDogYWdlbnQ/LnR5cGUsXG4gICAgICB9KVxuICAgICAgc2V0U2VsZWN0ZWRTdWdnZXN0aW9uTWVzc2FnZUlkcyhwcmV2ID0+ICh7IC4uLnByZXYsIFttZXNzYWdlSWRdOiB0cnVlIH0pKVxuXG4gICAgICBjb25zdCB0YXJnZXRNZXNzYWdlID0gY3VycmVudE1lc3NhZ2VzLmZpbmQobXNnID0+IG1zZy5pZCA9PT0gbWVzc2FnZUlkKVxuICAgICAgY29uc3QgaXNSZXRyeVN1Z2dlc3Rpb24gPSAhIXRhcmdldE1lc3NhZ2U/LmlzRXJyb3IgJiYgc3VnZ2VzdGlvbiA9PT0gdCgnY2hhdC5yZXRyeScpXG4gICAgICBpZiAoaXNSZXRyeVN1Z2dlc3Rpb24pIHtcbiAgICAgICAgY29uc3QgbGFzdFVzZXJNZXNzYWdlID0gY3VycmVudE1lc3NhZ2VzXG4gICAgICAgICAgLmZpbHRlcihtc2cgPT4gbXNnLnJvbGUgPT09IENoYXRIaXN0b3J5Um9sZS5VU0VSIHx8IG1zZy51c2VyLmlkID09PSBhdXRoVXNlci5pZC50b1N0cmluZygpKVxuICAgICAgICAgIC5hdCgtMSlcbiAgICAgICAgaWYgKGxhc3RVc2VyTWVzc2FnZT8ubWVzc2FnZSkge1xuICAgICAgICAgIGNvbnN0IHJldHJ5QXR0YWNobWVudHMgPSBBcnJheS5pc0FycmF5KGxhc3RVc2VyTWVzc2FnZS5hdHRhY2htZW50cylcbiAgICAgICAgICAgID8gbGFzdFVzZXJNZXNzYWdlLmF0dGFjaG1lbnRzXG4gICAgICAgICAgICA6IEFycmF5LmlzQXJyYXkobGFzdFVzZXJNZXNzYWdlLnNvdXJjZXMpXG4gICAgICAgICAgICAgID8gbGFzdFVzZXJNZXNzYWdlLnNvdXJjZXNcbiAgICAgICAgICAgICAgOiBbXVxuICAgICAgICAgIHNlbmRNZXNzYWdlUmVmLmN1cnJlbnQobGFzdFVzZXJNZXNzYWdlLm1lc3NhZ2UsIHJldHJ5QXR0YWNobWVudHMpXG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgc2VuZE1lc3NhZ2VSZWYuY3VycmVudChzdWdnZXN0aW9uKVxuICAgIH0sXG4gICAgW2V2ZW50LCBhZ2VudCwgdCwgYXV0aFVzZXIuaWRdXG4gIClcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChvblNlbmRNZXNzYWdlUmVhZHlSZWYuY3VycmVudCkge1xuICAgICAgb25TZW5kTWVzc2FnZVJlYWR5UmVmLmN1cnJlbnQoXG4gICAgICAgIHNlbmRNZXNzYWdlUHJveHlSZWYuY3VycmVudCxcbiAgICAgICAgc3RvcEdlbmVyYXRpb25Qcm94eVJlZi5jdXJyZW50LFxuICAgICAgICB3YWl0aW5nUmVzcG9uc2UsXG4gICAgICAgIGlzV3JpdGluZ1xuICAgICAgKVxuICAgIH1cbiAgfSwgW3dhaXRpbmdSZXNwb25zZSwgaXNXcml0aW5nXSlcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlzTG9hZGluZ01vcmVSZWYuY3VycmVudCA9IGlzTG9hZGluZ01vcmVNZXNzYWdlc1xuICB9LCBbaXNMb2FkaW5nTW9yZU1lc3NhZ2VzXSlcblxuICAvLyBDdWFuZG8gZWwgYWdlbnRlIGVtcGllemEgYSByZXNwb25kZXIsIHJlc2V0ZWFyIGVsIGZsYWcgeSBlbCB1bWJyYWwgcGFyYSBhY3RpdmFyIGVsIGF1dG8tc2Nyb2xsXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKHdhaXRpbmdSZXNwb25zZSkge1xuICAgICAgdXNlclNjcm9sbGluZ1JlZi5jdXJyZW50ID0gZmFsc2VcbiAgICAgIHNjcm9sbFRocmVzaG9sZFJlZi5jdXJyZW50ID0gMzlcbiAgICB9XG4gIH0sIFt3YWl0aW5nUmVzcG9uc2VdKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFjaGF0SW5pdGlhbGl6ZWRSZWYuY3VycmVudCkge1xuICAgICAgY2hhdEluaXRpYWxpemVkUmVmLmN1cnJlbnQgPSB0cnVlXG4gICAgICBpbml0aWFsaXplQ2hhdCgpXG4gICAgfVxuICB9LCBbXSlcblxuICAvLyBBdXRvc2Nyb2xsIG1pZW50cmFzIGVsIHRleHRvIGRlbCBzdHJlYW0gY3JlY2UuIEVsIHRleHRvIHNlIHBpbnRhIGFsIHJpdG1vXG4gIC8vIGRlIGB1c2VTbW9vdGhTdHJlYW1UZXh0YCAofjYwZnBzKSwgbm8gYWwgcml0bW8gZGUgbGxlZ2FkYSBkZSB0b2tlbnMgZGVsXG4gIC8vIGJhY2tlbmQ6IHBvciBlc28gYWPDoSB1c2Ftb3MgdW4gbG9vcCBkZSByQUYgcXVlIGNvbXBhcmEgYHNjcm9sbEhlaWdodGBcbiAgLy8gY29udHJhIGVsIMO6bHRpbW8gdmFsb3Igb2JzZXJ2YWRvIHkgYWp1c3RhIHNvbG8gY3VhbmRvIGNhbWJpYS4gQXPDrSBlbFxuICAvLyBzY3JvbGwgcXVlZGEgcGVyZmVjdGFtZW50ZSBzaW5jcm9uaXphZG8gY29uIGxhIGFuaW1hY2nDs24gZGVsIHRleHRvIHNpblxuICAvLyBkZXBlbmRlciBkZSBsYSBjYWRlbmNpYSBkZWwgc3RyZWFtaW5nU3RvcmUuXG4gIC8vIENvbiBlbCB0dXJubyBhbmNsYWRvIGVzdGUgbG9vcCBzb2xvIGVuY29nZSBlbCBzcGFjZXI6IG5vIHRvY2EgZWwgc2Nyb2xsLlxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghd2FpdGluZ1Jlc3BvbnNlICYmICFpc1dyaXRpbmcpIHJldHVybiB1bmRlZmluZWRcbiAgICBpZiAoIW1lc3NhZ2VzUmVmLmN1cnJlbnQpIHJldHVybiB1bmRlZmluZWRcblxuICAgIGxldCByYWZJZDogbnVtYmVyIHwgbnVsbCA9IG51bGxcbiAgICBsZXQgbGFzdEhlaWdodCA9IG1lc3NhZ2VzUmVmLmN1cnJlbnQuc2Nyb2xsSGVpZ2h0XG5cbiAgICBjb25zdCB0aWNrID0gKCkgPT4ge1xuICAgICAgY29uc3QgZWwgPSBtZXNzYWdlc1JlZi5jdXJyZW50XG4gICAgICBpZiAoIWVsKSB7XG4gICAgICAgIHJhZklkID0gbnVsbFxuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICAgIGlmIChzeW5jVHVyblNwYWNlKCkpIHtcbiAgICAgICAgLy8gRWwgc2Nyb2xsIG5vIHNlIG11ZXZlLCBwZXJvIGVsIGNvbnRlbmlkbyBjcmVjZTogbGEgZmxlY2hhIHkgZWxcbiAgICAgICAgLy8gZ3JhZGllbnRlIGRlIGFiYWpvIHRpZW5lbiBxdWUgZW5jZW5kZXJzZSBhcGVuYXMgc2UgcGFzYSBkZWwgdmlld3BvcnQuXG4gICAgICAgIHVwZGF0ZVNjcm9sbEFmZm9yZGFuY2VzKClcbiAgICAgICAgcmFmSWQgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUodGljaylcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgICBjb25zdCBjdXJyZW50SGVpZ2h0ID0gZWwuc2Nyb2xsSGVpZ2h0XG4gICAgICBpZiAoY3VycmVudEhlaWdodCAhPT0gbGFzdEhlaWdodCkge1xuICAgICAgICBsYXN0SGVpZ2h0ID0gY3VycmVudEhlaWdodFxuICAgICAgICBpZiAoIXVzZXJTY3JvbGxpbmdSZWYuY3VycmVudCkge1xuICAgICAgICAgIGVsLnNjcm9sbFRvcCA9IGN1cnJlbnRIZWlnaHRcbiAgICAgICAgfVxuICAgICAgICB1cGRhdGVTY3JvbGxBZmZvcmRhbmNlcygpXG4gICAgICB9XG4gICAgICByYWZJZCA9IHJlcXVlc3RBbmltYXRpb25GcmFtZSh0aWNrKVxuICAgIH1cblxuICAgIHJhZklkID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHRpY2spXG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGlmIChyYWZJZCAhPSBudWxsKSBjYW5jZWxBbmltYXRpb25GcmFtZShyYWZJZClcbiAgICB9XG4gIH0sIFt3YWl0aW5nUmVzcG9uc2UsIGlzV3JpdGluZywgc3luY1R1cm5TcGFjZSwgdXBkYXRlU2Nyb2xsQWZmb3JkYW5jZXNdKVxuXG4gIC8vIEFsIGNvbWVuemFyIGEgZXNwZXJhciBsYSByZXNwdWVzdGEgZGVsIGJhY2tlbmQsIHNjcm9sbCBpbmljaWFsIGFsIGZvbmRvLlxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICh3YWl0aW5nUmVzcG9uc2UgJiYgbWVzc2FnZXNSZWYuY3VycmVudCAmJiAhYW5jaG9yZWRUdXJuSWRSZWYuY3VycmVudCkge1xuICAgICAgc2Nyb2xsVG9Cb3R0b21SYWYoeyBza2lwSWZVc2VyU2Nyb2xsaW5nOiB0cnVlIH0pXG4gICAgfVxuICB9LCBbd2FpdGluZ1Jlc3BvbnNlLCBzY3JvbGxUb0JvdHRvbVJhZl0pXG5cbiAgY29uc3QgbGFzdFJlc2VydmVkUXVlc3Rpb25SZWYgPSB1c2VSZWY8c3RyaW5nIHwgbnVsbD4obnVsbClcblxuICAvLyBDYW1iaW8gZGUgY2hhdDogZWwgYW5jbGEgeSBlbCBzcGFjZXIgZGVsIHR1cm5vIGFudGVyaW9yIGRlamFuIGRlIGFwbGljYXIuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFsb2FkaW5nTWVzc2FnZXMpIHJldHVyblxuICAgIGxhc3RSZXNlcnZlZFF1ZXN0aW9uUmVmLmN1cnJlbnQgPSBudWxsXG4gICAgY2xlYXJUdXJuU3BhY2UoKVxuICB9LCBbbG9hZGluZ01lc3NhZ2VzLCBjbGVhclR1cm5TcGFjZV0pXG5cbiAgLy8gQWwgZW52aWFyIHVuIG1lbnNhamU6IGFuY2xhbW9zIGVsIHR1cm5vIHkgaGFjZW1vcyBlbCDDum5pY28gc2Nyb2xsIGRlbCBjaWNsby5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAobG9hZGluZ01lc3NhZ2VzIHx8IGlzTG9hZGluZ01vcmVNZXNzYWdlcykgcmV0dXJuXG5cbiAgICBsZXQgcXVlc3Rpb25JZDogc3RyaW5nIHwgbnVsbCA9IG51bGxcbiAgICBmb3IgKGxldCBpbmRleCA9IG1lc3NhZ2VzLmxlbmd0aCAtIDE7IGluZGV4ID49IDA7IGluZGV4IC09IDEpIHtcbiAgICAgIGlmIChtZXNzYWdlc1tpbmRleF0/LmlkPy5zdGFydHNXaXRoKCdxdWVzdGlvbi0nKSkge1xuICAgICAgICBxdWVzdGlvbklkID0gbWVzc2FnZXNbaW5kZXhdLmlkXG4gICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgfVxuICAgIGlmICghcXVlc3Rpb25JZCB8fCBxdWVzdGlvbklkID09PSBsYXN0UmVzZXJ2ZWRRdWVzdGlvblJlZi5jdXJyZW50KSByZXR1cm5cblxuICAgIGxhc3RSZXNlcnZlZFF1ZXN0aW9uUmVmLmN1cnJlbnQgPSBxdWVzdGlvbklkXG4gICAgdXNlclNjcm9sbGluZ1JlZi5jdXJyZW50ID0gZmFsc2VcbiAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4gcmVzZXJ2ZVR1cm5TcGFjZShxdWVzdGlvbklkKSlcbiAgfSwgW21lc3NhZ2VzLCBsb2FkaW5nTWVzc2FnZXMsIGlzTG9hZGluZ01vcmVNZXNzYWdlcywgcmVzZXJ2ZVR1cm5TcGFjZV0pXG5cbiAgLy8gU2Nyb2xsIGN1YW5kbyBjYW1iaWFuIGxvcyBtZW5zYWplczogZGlzdGluZ3VlIFwibnVldm8gbWVuc2FqZVwiIChhZ3JlZ2FkbylcbiAgLy8gZGUgXCJyZWVtcGxhem9cIiAobWlzbW8gaWQvbGVuZ3RoLCBlai4gZmVlZGJhY2sgbyBhcHByb3ZhbFN0YXR1cykuIEVuXG4gIC8vIHJlZW1wbGF6b3Mgc29sbyBzZSByZWNhbGN1bGEgbGEgdmlzaWJpbGlkYWQgZGVsIGJvdMOzbiBzaW4gZm9yemFyIHNjcm9sbC5cbiAgY29uc3QgbGFzdE1lc3NhZ2VJZFJlZiA9IHVzZVJlZjxzdHJpbmcgfCBudWxsPihudWxsKVxuICBjb25zdCBsYXN0TWVzc2FnZXNMZW5ndGhSZWYgPSB1c2VSZWY8bnVtYmVyPigwKVxuXG4gIC8vIEFsIGNhbWJpYXIgZGUgc2VzacOzbiwgcmVzZXRlYXIgZXN0YWRvIGRlIHNjcm9sbCBtYW51YWwgcGFyYSBubyBoZXJlZGFyIGVsIGNoYXQgYW50ZXJpb3IuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgd2FzTG9hZGluZ01lc3NhZ2VzUmVmLmN1cnJlbnQgPSBmYWxzZVxuICAgIGxhc3RTY3JvbGxlZFNlc3Npb25SZWYuY3VycmVudCA9IG51bGxcbiAgICB1c2VyU2Nyb2xsaW5nUmVmLmN1cnJlbnQgPSBmYWxzZVxuICAgIHNjcm9sbFRocmVzaG9sZFJlZi5jdXJyZW50ID0gMzlcbiAgICBsYXN0U2Nyb2xsVG9wUmVmLmN1cnJlbnQgPSAwXG4gICAgbGFzdE1lc3NhZ2VJZFJlZi5jdXJyZW50ID0gbnVsbFxuICAgIGxhc3RNZXNzYWdlc0xlbmd0aFJlZi5jdXJyZW50ID0gMFxuICB9LCBbaW5pdGlhbENoYXRJZF0pXG5cbiAgLy8gUmVzdGF1cmFjacOzbiBkZXNkZSBjYWNoZSAoc2luIExvYWRlcik6IGJhamFyIGFsIGZvbmRvIGFsIHJlYWJyaXIgc2VzacOzbiB2aXNpdGFkYS5cbiAgdXNlTGF5b3V0RWZmZWN0KCgpID0+IHtcbiAgICBpZiAobG9hZGluZ01lc3NhZ2VzIHx8ICFpbml0aWFsQ2hhdElkIHx8IG1lc3NhZ2VzLmxlbmd0aCA9PT0gMCkgcmV0dXJuXG4gICAgaWYgKGxhc3RTY3JvbGxlZFNlc3Npb25SZWYuY3VycmVudCA9PT0gaW5pdGlhbENoYXRJZCkgcmV0dXJuXG4gICAgbGFzdFNjcm9sbGVkU2Vzc2lvblJlZi5jdXJyZW50ID0gaW5pdGlhbENoYXRJZFxuXG4gICAgdXNlclNjcm9sbGluZ1JlZi5jdXJyZW50ID0gZmFsc2VcbiAgICBzY3JvbGxUaHJlc2hvbGRSZWYuY3VycmVudCA9IDM5XG4gICAgbGFzdE1lc3NhZ2VJZFJlZi5jdXJyZW50ID0gbWVzc2FnZXNbbWVzc2FnZXMubGVuZ3RoIC0gMV0/LmlkID8/IG51bGxcbiAgICBsYXN0TWVzc2FnZXNMZW5ndGhSZWYuY3VycmVudCA9IG1lc3NhZ2VzLmxlbmd0aFxuXG4gICAgc2Nyb2xsVG9Cb3R0b21SYWYoKVxuICAgIHNjcm9sbFRvQm90dG9tUmFmKHsgZGVsYXlNczogMTAwIH0pXG4gIH0sIFtpbml0aWFsQ2hhdElkLCBsb2FkaW5nTWVzc2FnZXMsIG1lc3NhZ2VzLmxlbmd0aCwgbWVzc2FnZXMsIHNjcm9sbFRvQm90dG9tUmFmXSlcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghbWVzc2FnZXNSZWYuY3VycmVudCB8fCBsb2FkaW5nTWVzc2FnZXMgfHwgaXNMb2FkaW5nTW9yZU1lc3NhZ2VzIHx8IGlzTG9hZGluZ01vcmVSZWYuY3VycmVudCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY29uc3QgbGFzdE1lc3NhZ2UgPSBtZXNzYWdlc1ttZXNzYWdlcy5sZW5ndGggLSAxXVxuICAgIGNvbnN0IGxhc3RJZCA9IGxhc3RNZXNzYWdlPy5pZCA/PyBudWxsXG4gICAgY29uc3QgcHJldklkID0gbGFzdE1lc3NhZ2VJZFJlZi5jdXJyZW50XG4gICAgY29uc3QgcHJldkxlbiA9IGxhc3RNZXNzYWdlc0xlbmd0aFJlZi5jdXJyZW50XG4gICAgbGFzdE1lc3NhZ2VJZFJlZi5jdXJyZW50ID0gbGFzdElkXG4gICAgbGFzdE1lc3NhZ2VzTGVuZ3RoUmVmLmN1cnJlbnQgPSBtZXNzYWdlcy5sZW5ndGhcblxuICAgIGNvbnN0IGlzTmV3TWVzc2FnZSA9IGxhc3RJZCAhPT0gcHJldklkIHx8IG1lc3NhZ2VzLmxlbmd0aCAhPT0gcHJldkxlblxuICAgIGlmICghaXNOZXdNZXNzYWdlKSB7XG4gICAgICB1cGRhdGVTY3JvbGxBZmZvcmRhbmNlcygpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICAvLyBUdXJubyBhbmNsYWRvOiBuaSBlbCByZWVtcGxhem8gZGVsIHBsYWNlaG9sZGVyIHBvciBlbCBtZW5zYWplIGZpbmFsLCBuaSBsYVxuICAgIC8vIGFwYXJpY2nDs24gZGVsIEFwcHJvdmFsQm94IG11ZXZlbiBlbCBzY3JvbGwuIFNvbG8gc2UgYWp1c3RhIGVsIHNwYWNlci5cbiAgICBpZiAoYW5jaG9yZWRUdXJuSWRSZWYuY3VycmVudCkge1xuICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHN5bmNUdXJuU3BhY2UpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCBjb250YWluZXIgPSBtZXNzYWdlc1JlZi5jdXJyZW50XG4gICAgY29uc3QgaXNBdEJvdHRvbSA9IGNvbnRhaW5lci5zY3JvbGxIZWlnaHQgLSBjb250YWluZXIuc2Nyb2xsVG9wIDw9IGNvbnRhaW5lci5jbGllbnRIZWlnaHQgKyAxMDBcbiAgICBjb25zdCBoYXNJbml0aWFsTWVzc2FnZSA9IG1lc3NhZ2VzLnNvbWUobXNnID0+IG1zZy5pZCA9PT0gJ3VzZXItaW5pdGlhbC1tZXNzYWdlJylcbiAgICBjb25zdCBpc0FwcHJvdmFsID0gISFsYXN0TWVzc2FnZSAmJiAobGFzdE1lc3NhZ2UuaWQuc3RhcnRzV2l0aCgnYXBwcm92YWwtJykgfHwgISFsYXN0TWVzc2FnZS5hcHByb3ZhbClcbiAgICBjb25zdCBpc0Fuc3dlck9yUXVlc3Rpb24gPVxuICAgICAgISFsYXN0TWVzc2FnZSAmJiAobGFzdE1lc3NhZ2UuaWQuc3RhcnRzV2l0aCgnYW5zd2VyLScpIHx8IGxhc3RNZXNzYWdlLmlkLnN0YXJ0c1dpdGgoJ3F1ZXN0aW9uLScpKVxuXG4gICAgLy8gTnVldm9zIGFuc3dlci9xdWVzdGlvbjogc2Nyb2xsIHNpIGVsIHVzdWFyaW8geWEgZXN0YWJhIGFsIGZvbmRvLlxuICAgIGlmIChpc0Fuc3dlck9yUXVlc3Rpb24gJiYgaXNBdEJvdHRvbSkge1xuICAgICAgc2Nyb2xsVG9Cb3R0b21SYWYoKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgLy8gQ2FzbyBib3JkZTogY2FtYmlvcyBkZSBtZW5zYWplcyBzaW4gc2VyIG51ZXZvIGFuc3dlci91c2VyL2FwcHJvdmFsXG4gICAgLy8gcGVybyBzw60gdW4gbWVuc2FqZSBudWV2byAobm8gZWwgXCJ1c2VyLWluaXRpYWwtbWVzc2FnZVwiKS4gU2Nyb2xsZWEuXG4gICAgaWYgKCFpc0Fuc3dlck9yUXVlc3Rpb24gJiYgIWlzQXBwcm92YWwgJiYgIWhhc0luaXRpYWxNZXNzYWdlICYmIG1lc3NhZ2VzLmxlbmd0aCA+IHByZXZMZW4pIHtcbiAgICAgIHNjcm9sbFRvQm90dG9tUmFmKClcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIHVwZGF0ZVNjcm9sbEFmZm9yZGFuY2VzKClcbiAgfSwgW21lc3NhZ2VzLCBsb2FkaW5nTWVzc2FnZXMsIGlzTG9hZGluZ01vcmVNZXNzYWdlcywgc2Nyb2xsVG9Cb3R0b21SYWYsIHN5bmNUdXJuU3BhY2UsIHVwZGF0ZVNjcm9sbEFmZm9yZGFuY2VzXSlcblxuICAvLyBBbCBhYnJpci9jYXJnYXIgdW5hIGNvbnZlcnNhY2nDs24gZWwgY29udGVuZWRvciBzZSByZW1vbnRhIChMb2FkZXIg4oaSIGxpc3RhKSBjb25cbiAgLy8gc2Nyb2xsVG9wPTAuIEZvcnphbW9zIGlyIGFsIGZvbmRvIGFsIHRlcm1pbmFyIGxvYWRNZXNzYWdlcywgc2luIGFmZWN0YXIgcGFnaW5hY2nDs24gaGFjaWEgYXJyaWJhLlxuICB1c2VMYXlvdXRFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IGp1c3RGaW5pc2hlZExvYWRpbmcgPSB3YXNMb2FkaW5nTWVzc2FnZXNSZWYuY3VycmVudCAmJiAhbG9hZGluZ01lc3NhZ2VzXG4gICAgd2FzTG9hZGluZ01lc3NhZ2VzUmVmLmN1cnJlbnQgPSBsb2FkaW5nTWVzc2FnZXNcblxuICAgIGlmICghanVzdEZpbmlzaGVkTG9hZGluZyB8fCBtZXNzYWdlcy5sZW5ndGggPT09IDApIHJldHVyblxuXG4gICAgdXNlclNjcm9sbGluZ1JlZi5jdXJyZW50ID0gZmFsc2VcbiAgICBzY3JvbGxUaHJlc2hvbGRSZWYuY3VycmVudCA9IDM5XG4gICAgbGFzdE1lc3NhZ2VJZFJlZi5jdXJyZW50ID0gbWVzc2FnZXNbbWVzc2FnZXMubGVuZ3RoIC0gMV0/LmlkID8/IG51bGxcbiAgICBsYXN0TWVzc2FnZXNMZW5ndGhSZWYuY3VycmVudCA9IG1lc3NhZ2VzLmxlbmd0aFxuXG4gICAgc2Nyb2xsVG9Cb3R0b21SYWYoKVxuICAgIHNjcm9sbFRvQm90dG9tUmFmKHsgZGVsYXlNczogMTAwIH0pXG4gIH0sIFtsb2FkaW5nTWVzc2FnZXMsIG1lc3NhZ2VzLmxlbmd0aCwgc2Nyb2xsVG9Cb3R0b21SYWZdKVxuXG4gIC8vIEVzdGFkbyBpbmljaWFsIGRlbCBib3TDs24gc2Nyb2xsLXRvLWJvdHRvbSBhbCB0ZXJtaW5hciBsb2FkaW5nTWVzc2FnZXMuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFsb2FkaW5nTWVzc2FnZXMpIHtcbiAgICAgIHVwZGF0ZVNjcm9sbEFmZm9yZGFuY2VzKClcbiAgICB9XG4gIH0sIFtsb2FkaW5nTWVzc2FnZXMsIG1lc3NhZ2VzLmxlbmd0aCwgdXBkYXRlU2Nyb2xsQWZmb3JkYW5jZXNdKVxuXG4gIC8vIE9idGVuZXIgZWwgw7psdGltbyBtZW5zYWplIGRlbCB1c3VhcmlvIHBhcmEgdmVyaWZpY2FyIHNpIHRpZW5lIGF0dGFjaG1lbnRzXG4gIGNvbnN0IGxhc3RVc2VyTWVzc2FnZSA9IG1lc3NhZ2VzXG4gICAgLmZpbHRlcihtc2cgPT4gbXNnLnJvbGUgPT09IENoYXRIaXN0b3J5Um9sZS5VU0VSIHx8IG1zZy51c2VyLmlkID09PSBhdXRoVXNlci5pZC50b1N0cmluZygpKVxuICAgIC5hdCgtMSlcblxuICBjb25zdCBhdHRhY2htZW50c0NvdW50ID1cbiAgICAoQXJyYXkuaXNBcnJheShsYXN0VXNlck1lc3NhZ2U/LmF0dGFjaG1lbnRzKSA/IGxhc3RVc2VyTWVzc2FnZS5hdHRhY2htZW50cy5sZW5ndGggOiAwKSB8fFxuICAgIChBcnJheS5pc0FycmF5KGxhc3RVc2VyTWVzc2FnZT8uc291cmNlcykgPyBsYXN0VXNlck1lc3NhZ2Uuc291cmNlcy5sZW5ndGggOiAwKVxuXG4gIGNvbnN0IHN0cmVhbUxvYWRpbmdEaXNwbGF5ID0gcmVzb2x2ZVN0cmVhbUxvYWRpbmdEaXNwbGF5KHtcbiAgICBzdHJlYW1BY3Rpdml0eSxcbiAgICBsb2FkaW5nTWVzc2FnZSxcbiAgICBhY3RpdmVMb2FkaW5nczogYWN0aXZlTG9hZGluZ3MgfHwge30sXG4gICAgd2FpdGluZ1Jlc3BvbnNlLFxuICAgIGlzV2ViU2VhcmNoQWN0aXZlLFxuICAgIGlzRGVlcFNlYXJjaEFjdGl2ZSxcbiAgICBoYXNBdHRhY2htZW50czogQm9vbGVhbihhdHRhY2htZW50c0NvdW50KSxcbiAgICBhdHRhY2htZW50c0NvdW50LFxuICAgIHQsXG4gIH0pXG5cbiAgY29uc3QgaXNTY3JvbGxPblBhcmVudCA9ICEhZXhwYW5kZWRcblxuICAvLyBBbCBleHBhbmRpci9jb250cmFlciBlbCBtb2RhbCBlbCByZWYgcGFzYSBhIG90cm8gY29udGVuZWRvciAoc2Nyb2xsVG9wIHNlIHJlc2V0ZWEgYSAwKS5cbiAgLy8gUmVzdGF1cmFyIGxhIHBvc2ljacOzbiBkZSBzY3JvbGwgYW50ZXMgZGVsIHBhaW50IHBhcmEgZXZpdGFyIHF1ZSBsYSBjb252ZXJzYWNpw7NuIHNhbHRlIGFycmliYS5cbiAgY29uc3QgZXhwYW5kZWRSZWYgPSB1c2VSZWYoZXhwYW5kZWQpXG4gIHVzZUxheW91dEVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGV4cGFuZGVkUmVmLmN1cnJlbnQgIT09IGV4cGFuZGVkICYmIG1lc3NhZ2VzUmVmLmN1cnJlbnQpIHtcbiAgICAgIGNvbnN0IHNhdmVkU2Nyb2xsVG9wID0gbGFzdFNjcm9sbFRvcFJlZi5jdXJyZW50XG4gICAgICBtZXNzYWdlc1JlZi5jdXJyZW50LnNjcm9sbFRvcCA9IHNhdmVkU2Nyb2xsVG9wXG4gICAgICBleHBhbmRlZFJlZi5jdXJyZW50ID0gZXhwYW5kZWRcbiAgICB9IGVsc2Uge1xuICAgICAgZXhwYW5kZWRSZWYuY3VycmVudCA9IGV4cGFuZGVkXG4gICAgfVxuICB9LCBbZXhwYW5kZWRdKVxuXG4gIGlmIChsb2FkaW5nTWVzc2FnZXMpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPEZhZGUgZmlsbD5cbiAgICAgICAgPExvYWRlciAvPlxuICAgICAgPC9GYWRlPlxuICAgIClcbiAgfVxuXG4gIGNvbnN0IGxhc3RNZXNzYWdlID0gbWVzc2FnZXNbbWVzc2FnZXMubGVuZ3RoIC0gMV1cbiAgY29uc3QgaGFzTWVzc2FnZUxldmVsSW5kaWNhdG9yID1cbiAgICAhIWxhc3RNZXNzYWdlICYmIGlzU3RyZWFtaW5nUGxhY2Vob2xkZXJNZXNzYWdlSWQobGFzdE1lc3NhZ2UuaWQpICYmICh3YWl0aW5nUmVzcG9uc2UgfHwgaXNXcml0aW5nKVxuXG4gIGNvbnN0IG1lc3NhZ2VzQ29udGVudCA9IChcbiAgICA8PlxuICAgICAge2lzTG9hZGluZ01vcmVNZXNzYWdlcyAmJiA8TG9hZGluZ1RleHQgdGV4dD17dCgnY2hhdC5sb2FkaW5nTW9yZScpfSAvPn1cbiAgICAgIDw+XG4gICAgICAgIHttZXNzYWdlcy5tYXAoKG1lc3NhZ2UsIGluZGV4KSA9PiB7XG4gICAgICAgICAgY29uc3QgaXNBc3Npc3RhbnRNZXNzYWdlID0gbWVzc2FnZS5yb2xlID09PSBDaGF0SGlzdG9yeVJvbGUuQVNTSVNUQU5UIHx8IG1lc3NhZ2UudXNlci5pZCA9PT0gJ2Fzc2lzdGFudCdcbiAgICAgICAgICBjb25zdCBpc0xhc3RNZXNzYWdlID0gaW5kZXggPT09IG1lc3NhZ2VzLmxlbmd0aCAtIDFcbiAgICAgICAgICBjb25zdCBpc1N0cmVhbWluZ1BsYWNlaG9sZGVyID1cbiAgICAgICAgICAgIGlzQXNzaXN0YW50TWVzc2FnZSAmJiBpc0xhc3RNZXNzYWdlICYmIGlzU3RyZWFtaW5nUGxhY2Vob2xkZXJNZXNzYWdlSWQobWVzc2FnZS5pZClcbiAgICAgICAgICBjb25zdCBpc1N0cmVhbWluZyA9IGlzU3RyZWFtaW5nUGxhY2Vob2xkZXIgJiYgKHdhaXRpbmdSZXNwb25zZSB8fCBpc1dyaXRpbmcpXG5cbiAgICAgICAgICAvLyBObyBmaWx0cmFyIGVsIHBsYWNlaG9sZGVyIGRlbCBtZW5zYWplIGVuIHN0cmVhbWluZzogc3UgdGV4dG8gdml2ZVxuICAgICAgICAgIC8vIGVuIGVsIHN0cmVhbWluZ1N0b3JlIHkgYG1lc3NhZ2UubWVzc2FnZWAgZXMgJycgaGFzdGEgZWwgY29tcGxldGUuXG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgIWlzU3RyZWFtaW5nUGxhY2Vob2xkZXIgJiZcbiAgICAgICAgICAgICFpc1N0cmVhbWluZyAmJlxuICAgICAgICAgICAgIShtZXNzYWdlLmF0dGFjaG1lbnRzPy5sZW5ndGggfHwgbWVzc2FnZS5zb3VyY2VzPy5sZW5ndGgpICYmXG4gICAgICAgICAgICAhbWVzc2FnZS5tZXNzYWdlICYmXG4gICAgICAgICAgICAhbWVzc2FnZS5wcm9qZWN0Py5uYW1lICYmXG4gICAgICAgICAgICAhbWVzc2FnZS5hcHByb3ZhbFxuICAgICAgICAgIClcbiAgICAgICAgICAgIHJldHVybiBudWxsXG5cbiAgICAgICAgICBjb25zdCBtZXNzYWdlRmVlZGJhY2sgPVxuICAgICAgICAgICAgbWVzc2FnZT8ud2FzSGVscGZ1bCA9PT0gdW5kZWZpbmVkIHx8IG1lc3NhZ2Uud2FzSGVscGZ1bCA9PT0gbnVsbFxuICAgICAgICAgICAgICA/IG51bGxcbiAgICAgICAgICAgICAgOiBtZXNzYWdlLndhc0hlbHBmdWxcbiAgICAgICAgICAgICAgICA/IEZlZWRiYWNrLlRIVU1CU19VUFxuICAgICAgICAgICAgICAgIDogRmVlZGJhY2suVEhVTUJTX0RPV05cblxuICAgICAgICAgIC8vIEtleSBlc3RhYmxlOiBzb2xvIG1lc3NhZ2UuaWQgcGFyYSBldml0YXIgcmVtb3VudCBkdXJhbnRlIHN0cmVhbWluZyAobWVzc2FnZS5kYXRlIHB1ZWRlIGNhbWJpYXIpXG4gICAgICAgICAgY29uc3QgbWVzc2FnZUtleSA9IG1lc3NhZ2UuaWQgPz8gYG1zZy0ke2luZGV4fWBcblxuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8TWVzc2FnZUl0ZW1cbiAgICAgICAgICAgICAgey4uLm1lc3NhZ2V9XG4gICAgICAgICAgICAgIGtleT17bWVzc2FnZUtleX1cbiAgICAgICAgICAgICAgYXV0aFVzZXI9e2F1dGhVc2VyfVxuICAgICAgICAgICAgICBoYW5kbGVTZWxlY3RPcHRpb249e2hhbmRsZVNlbGVjdE9wdGlvbn1cbiAgICAgICAgICAgICAgaGFuZGxlRmVlZGJhY2s9e2hhbmRsZUZlZWRiYWNrfVxuICAgICAgICAgICAgICBoYW5kbGVBcHByb3ZhbERlY2lzaW9uPXtoYW5kbGVBcHByb3ZhbERlY2lzaW9ufVxuICAgICAgICAgICAgICBoYW5kbGVTdWdnZXN0aW9uQ2xpY2s9e2hhbmRsZVN1Z2dlc3Rpb25DbGlja31cbiAgICAgICAgICAgICAgaGFzU2VsZWN0ZWRTdWdnZXN0aW9uPXshIXNlbGVjdGVkU3VnZ2VzdGlvbk1lc3NhZ2VJZHNbbWVzc2FnZS5pZF19XG4gICAgICAgICAgICAgIGRpc2FibGVGZWVkYmFjaz17bWVzc2FnZUZlZWRiYWNrfVxuICAgICAgICAgICAgICBpc1N0cmVhbWluZz17aXNTdHJlYW1pbmd9XG4gICAgICAgICAgICAgIGlzTGFzdE1lc3NhZ2U9e2lzTGFzdE1lc3NhZ2V9XG4gICAgICAgICAgICAgIGV4cGFuZGVkPXtleHBhbmRlZH1cbiAgICAgICAgICAgICAgc3RyZWFtQWN0aXZpdHk9e2lzU3RyZWFtaW5nID8gc3RyZWFtTG9hZGluZ0Rpc3BsYXkgOiBudWxsfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICApXG4gICAgICAgIH0pfVxuICAgICAgPC8+XG4gICAgICB7IWhhc01lc3NhZ2VMZXZlbEluZGljYXRvciAmJiBzdHJlYW1Mb2FkaW5nRGlzcGxheSAmJiAoXG4gICAgICAgIDxTQ0xvYWRpbmdNZXNzYWdlc0NvbHVtbj5cbiAgICAgICAgICA8QWdlbnRBY3Rpdml0eUluZGljYXRvciBhY3Rpdml0eT17c3RyZWFtTG9hZGluZ0Rpc3BsYXl9IC8+XG4gICAgICAgIDwvU0NMb2FkaW5nTWVzc2FnZXNDb2x1bW4+XG4gICAgICApfVxuICAgICAgey8qIEVzcGFjaW8gcXVlIGxlIHBlcm1pdGUgYSBsYSBwcmVndW50YSBzdWJpciBhbCB0b3BlLiBBbHR1cmEgbWFuZWphZGFcbiAgICAgICAgICBpbXBlcmF0aXZhbWVudGUgZGVzZGUgYHNldFNwYWNlckhlaWdodGA7IGFycmFuY2EgZW4gMC4gKi99XG4gICAgICA8U0NUdXJuU3BhY2VyIHJlZj17c3BhY2VyRWxSZWZ9IGFyaWEtaGlkZGVuPVwidHJ1ZVwiIC8+XG4gICAgPC8+XG4gIClcblxuICByZXR1cm4gKFxuICAgIC8vIFNpIGVsIHVzdWFyaW8gbXVldmUgZWwgc2Nyb2xsIGR1cmFudGUgbGEgYW5pbWFjacOzbiwgYWJvcnRhbW9zOiBubyBsZVxuICAgIC8vIHBlbGVhbW9zIGVsIGNvbnRyb2wgZGVsIGNvbnRlbmVkb3IuXG4gICAgPFNDTWVzc2FnZXNPdXRlciAkc2Nyb2xsT25QYXJlbnQ9e2lzU2Nyb2xsT25QYXJlbnR9IG9uV2hlZWw9e2NhbmNlbFR1cm5TY3JvbGx9IG9uVG91Y2hTdGFydD17Y2FuY2VsVHVyblNjcm9sbH0+XG4gICAgICA8U0NNZXNzYWdlc0dyYWRpZW50VG9wICRzaG93PXtzaG93VG9wR3JhZGllbnR9IGFyaWEtaGlkZGVuPVwidHJ1ZVwiIC8+XG4gICAgICB7aXNTY3JvbGxPblBhcmVudCA/IChcbiAgICAgICAgPFNDTWVzc2FnZXNTY3JvbGwgcmVmPXttZXNzYWdlc1JlZn0gb25TY3JvbGw9e2hhbmRsZVNjcm9sbFRvQm90dG9tfT5cbiAgICAgICAgICA8U0NNZXNzYWdlc0lubmVyICRzY3JvbGxPblBhcmVudD17aXNTY3JvbGxPblBhcmVudH0+e21lc3NhZ2VzQ29udGVudH08L1NDTWVzc2FnZXNJbm5lcj5cbiAgICAgICAgPC9TQ01lc3NhZ2VzU2Nyb2xsPlxuICAgICAgKSA6IChcbiAgICAgICAgPFNDTWVzc2FnZXNJbm5lciByZWY9e21lc3NhZ2VzUmVmfSBvblNjcm9sbD17aGFuZGxlU2Nyb2xsVG9Cb3R0b219ICRzY3JvbGxPblBhcmVudD17ZmFsc2V9PlxuICAgICAgICAgIHttZXNzYWdlc0NvbnRlbnR9XG4gICAgICAgIDwvU0NNZXNzYWdlc0lubmVyPlxuICAgICAgKX1cblxuICAgICAgPFNDTWVzc2FnZXNHcmFkaWVudEJvdHRvbSAkc2hvdz17c2hvd0JvdHRvbUdyYWRpZW50fSBhcmlhLWhpZGRlbj1cInRydWVcIiAvPlxuXG4gICAgICB7c2hvd1Njcm9sbFRvQm90dG9tICYmIChcbiAgICAgICAgPFNjcm9sbFRvQm90dG9tQnV0dG9uIHR5cGU9XCJidXR0b25cIiBvbkNsaWNrPXtoYW5kbGVDbGlja1Njcm9sbFRvQm90dG9tfT5cbiAgICAgICAgICA8QXJyb3dTbWFsbERvd24gY29sb3I9XCIjNjY2XCIgd2lkdGg9XCIyMHB4XCIgaGVpZ2h0PVwiMjBweFwiIC8+XG4gICAgICAgIDwvU2Nyb2xsVG9Cb3R0b21CdXR0b24+XG4gICAgICApfVxuICAgIDwvU0NNZXNzYWdlc091dGVyPlxuICApXG59XG5cbmV4cG9ydCBjb25zdCBDaGF0QUlNZXNzYWdlcyA9IFJlYWN0Lm1lbW8oQ2hhdEFJTWVzc2FnZXNJbm5lcilcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU9BLEtBQUssSUFBUUMsSUFBSSxFQUFhQyxXQUFXLEVBQUVDLFNBQVMsRUFBRUMsZUFBZSxFQUFFQyxNQUFNLEVBQUVDLFFBQVEsRUFBQUMsYUFBQSxJQUFBQyxjQUFBLFFBQVEsT0FBTztBQUM3RyxTQUFTQyxjQUFjLFFBQVEsaURBQWlEO0FBRWhGLFNBQVNDLGNBQWMsUUFBUSwyQ0FBMkM7QUFDMUUsU0FBU0MsV0FBVyxRQUFRLHFDQUFxQztBQUNqRSxTQUFTQyxzQkFBc0IsUUFBUSxvQ0FBb0M7QUFDM0UsU0FBU0MsbUJBQW1CLFFBQVEsZ0RBQWdEO0FBQ3BGLFNBQVNDLGNBQWMsUUFBUSw0QkFBNEI7QUFHM0QsU0FBc0JDLGVBQWUsUUFBUSxxQkFBcUI7QUFDbEUsU0FBU0Msc0JBQXNCLEVBQUVDLGdCQUFnQixRQUFRLHNDQUFzQztBQUUvRixTQUFTQyxjQUFjLFFBQVEsaUNBQWlDO0FBQ2hFLFNBQWtCQyxPQUFPLFFBQVEsMkJBQTJCO0FBRTVELFNBQVNDLElBQUksUUFBUSxxQkFBcUI7QUFDMUMsU0FBU0MsY0FBYyxRQUFRLDhDQUE4QztBQUM3RSxTQUFTQyxtQkFBbUIsUUFBUSxvQ0FBb0M7QUFDeEUsU0FBU0MsbUJBQW1CLFFBQVEsb0NBQW9DO0FBRXhFLFNBQVNDLFdBQVcsUUFBUSx5QkFBeUI7QUFDckQsU0FBU0Msc0JBQXNCLFFBQVEsb0NBQW9DO0FBQzNF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
|