@projectcor/maia-components 2.11.100-6 → 2.11.100-8
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/App.js +2 -4
- package/lib/components/atoms/AgentActivityIndicator/AgentActivityIndicator.js +14 -212
- package/lib/components/atoms/AgentActivityIndicator/AgentActivityIndicator.styles.js +9 -99
- package/lib/components/molecules/AbmSection/AbmAccessibilitySection/AbmAccessibilitySection.js +4 -91
- package/lib/components/molecules/ChatAIMessages/ChatAIMessages.js +61 -264
- package/lib/components/molecules/ChatAIModal/ChatAIModal.js +4 -1
- package/lib/components/organisms/AbmAgentModal/AbmAgentModal.js +5 -34
- package/lib/hooks/useAgentModel/useCreateAgent.js +14 -40
- package/lib/hooks/useAgentModel/useUpdateAgent.js +11 -37
- package/lib/hooks/useChatManager/useChatManager.js +66 -167
- package/lib/hooks/useEvent.js +1 -2
- package/lib/hooks/useOrchestratorStream/useOrchestratorStream.js +23 -183
- package/lib/lang/br/index.js +2 -14
- package/lib/lang/en/index.js +2 -14
- package/lib/lang/es/index.js +2 -14
- package/lib/lang/fr/index.js +2 -14
- package/lib/services/maia/Agents/getAgents.js +54 -30
- package/lib/services/maia/RecentContexts/getRecentContexts.js +32 -3
- package/lib/services/maia/bootstrap/agentsPrefetchSession.js +97 -0
- package/lib/services/maia/bootstrap/fetchAgentsList.js +267 -0
- package/lib/services/maia/bootstrap/prefetchMaiaAgents.js +96 -0
- package/lib/services/maia/bootstrap/prefetchMaiaRecentContexts.js +56 -0
- package/lib/services/maia/bootstrap/recentContextsPrefetchSession.js +88 -0
- package/lib/types/agentModal.js +1 -1
- package/lib/types/streamActivity.js +1 -1
- package/lib/utils/normalizeAgentConnectors.js +3 -28
- package/package.json +1 -1
- package/lib/components/molecules/StreamAssistantTurnTimeline/StreamAssistantTurnTimeline.js +0 -91
- package/lib/components/molecules/StreamAssistantTurnTimeline/StreamAssistantTurnTimeline.styles.js +0 -19
- package/lib/components/molecules/StreamAssistantTurnTimeline/index.js +0 -2
- package/lib/dev/DevStreamTimelineDemo.js +0 -614
- package/lib/dev/mockStreamTimelineDemo.js +0 -417
- package/lib/dev/mockStreamTimelineRunner.js +0 -298
- package/lib/hooks/useStreamTimeline/index.js +0 -7
- package/lib/hooks/useStreamTimeline/streamTimelineStore.js +0 -37
- package/lib/services/maia/Agents/connectors.js +0 -124
- package/lib/types/streamTimeline.js +0 -2
- package/lib/utils/streamDebugLog.js +0 -170
- package/lib/utils/streamExecutionSteps.js +0 -136
- package/lib/utils/streamTimeline.js +0 -177
|
@@ -18,7 +18,7 @@ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t =
|
|
|
18
18
|
/* eslint-disable react/require-default-props */
|
|
19
19
|
/* eslint-disable jsx-a11y/click-events-have-key-events */
|
|
20
20
|
/* eslint-disable jsx-a11y/no-static-element-interactions */
|
|
21
|
-
import React, { memo, useCallback, useEffect, useLayoutEffect,
|
|
21
|
+
import React, { memo, useCallback, useEffect, useLayoutEffect, useRef, useState, createElement as _createElement } from 'react';
|
|
22
22
|
import { Streamdown } from 'streamdown';
|
|
23
23
|
import { createCodePlugin } from '@streamdown/code';
|
|
24
24
|
import { ArrowSmallDown } from '@projectcor/icons/lib/components/ArrowSmallDown';
|
|
@@ -36,15 +36,13 @@ import { useChatManager } from '../../../hooks/useChatManager/useChatManager';
|
|
|
36
36
|
import { useSmoothStreamText } from '../../../hooks/useSmoothStreamText';
|
|
37
37
|
import { useStreamingMessage } from '../../../hooks/useStreamingMessage';
|
|
38
38
|
import { LoadingText } from '../../atoms/LoadingText';
|
|
39
|
+
import { AgentActivityIndicator } from '../../atoms/AgentActivityIndicator';
|
|
39
40
|
import { isStreamingPlaceholderMessageId, resolveStreamLoadingDisplay } from '../../../utils/streamActivityMessages';
|
|
40
41
|
import { Loader } from '../../atoms/Loader';
|
|
41
|
-
import { useStreamTimeline } from '../../../hooks/useStreamTimeline';
|
|
42
|
-
import { StreamAssistantTurnTimeline } from '../StreamAssistantTurnTimeline';
|
|
43
|
-
import { streamDebugLog, streamDebugLogHitlUiOverlap, summarizeTimelineSnapshot } from '../../../utils/streamDebugLog';
|
|
44
42
|
import { Fade } from '../../atoms/Fade';
|
|
45
43
|
import { MessageFromUser, MessageFromOther, MessageContentFromUser, MessageContentFromOther } from './styles';
|
|
46
44
|
import { MessageFeedback } from '../MessageFeedback';
|
|
47
|
-
import { SCCAIMessageWrapper, ScrollToBottomButton, SCMessagesOuter, SCMessagesScroll, SCMessagesInner, SCOptionsList, SCOptionItem, SCAssistantMessageHeader, SCAssistantName, SCAssistantAvatar, SCMessageItemWrapper, SCMessageItemInner, SCAttachmentsRow, SCApprovalActionsColumn } from './newStyles';
|
|
45
|
+
import { SCCAIMessageWrapper, ScrollToBottomButton, SCMessagesOuter, SCMessagesScroll, SCMessagesInner, SCLoadingMessagesColumn, SCOptionsList, SCOptionItem, SCAssistantMessageHeader, SCAssistantName, SCAssistantAvatar, SCMessageItemWrapper, SCMessageItemInner, SCAttachmentsRow, SCApprovalActionsColumn } from './newStyles';
|
|
48
46
|
import { Feedback } from '../MessageFeedback/MessageFeedback';
|
|
49
47
|
import { useGlobalContext } from '../../../context/global-context';
|
|
50
48
|
import { MAIAIcon } from '../../atoms/icons';
|
|
@@ -215,60 +213,6 @@ var StreamingMessageBody = /*#__PURE__*/memo(function (props) {
|
|
|
215
213
|
})]
|
|
216
214
|
});
|
|
217
215
|
});
|
|
218
|
-
|
|
219
|
-
/** Bloque de texto intercalado en el timeline del turno (markdown + smooth stream). */
|
|
220
|
-
var TimelineSegmentBody = /*#__PURE__*/memo(function (_ref4) {
|
|
221
|
-
var text = _ref4.text,
|
|
222
|
-
isStreaming = _ref4.isStreaming;
|
|
223
|
-
var winFlags = typeof window !== 'undefined' ? window : {};
|
|
224
|
-
var displayText = useSmoothStreamText(text, _objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread({
|
|
225
|
-
enabled: isStreaming,
|
|
226
|
-
maxCharsPerFrame: 24,
|
|
227
|
-
snapToWordBoundary: true
|
|
228
|
-
}, winFlags.streamLagMs != null && {
|
|
229
|
-
targetLagMs: winFlags.streamLagMs
|
|
230
|
-
}), winFlags.streamAdapt != null && {
|
|
231
|
-
adaptToBackendRate: winFlags.streamAdapt
|
|
232
|
-
}), winFlags.streamBufferMs != null && {
|
|
233
|
-
targetBufferMs: winFlags.streamBufferMs
|
|
234
|
-
}), winFlags.streamMinBuffer != null && {
|
|
235
|
-
minBufferChars: winFlags.streamMinBuffer
|
|
236
|
-
}), winFlags.streamWarmupMs != null && {
|
|
237
|
-
warmupMs: winFlags.streamWarmupMs
|
|
238
|
-
}));
|
|
239
|
-
if (!displayText && !isStreaming) return null;
|
|
240
|
-
var hasMentions = hasInlineMarkers(displayText);
|
|
241
|
-
var mentionNodes = hasMentions ? renderTextWithMentions(displayText) : null;
|
|
242
|
-
return /*#__PURE__*/_jsx(SCCAIMessageWrapper, {
|
|
243
|
-
isCurrentUser: false,
|
|
244
|
-
className: getEntityLinkWrapperClassName(displayText),
|
|
245
|
-
children: hasMentions && mentionNodes ? /*#__PURE__*/_jsx("span", {
|
|
246
|
-
style: {
|
|
247
|
-
display: 'inline'
|
|
248
|
-
},
|
|
249
|
-
children: mentionNodes
|
|
250
|
-
}) : /*#__PURE__*/_jsx(Streamdown, {
|
|
251
|
-
plugins: {
|
|
252
|
-
code: code
|
|
253
|
-
},
|
|
254
|
-
rehypePlugins: MAIA_STREAMDOWN_REHYPE_PLUGINS,
|
|
255
|
-
components: {
|
|
256
|
-
a: EntityLinkCustomLink
|
|
257
|
-
},
|
|
258
|
-
linkSafety: {
|
|
259
|
-
enabled: false
|
|
260
|
-
},
|
|
261
|
-
isAnimating: isStreaming,
|
|
262
|
-
shikiTheme: ['github-light', 'github-light'],
|
|
263
|
-
controls: {
|
|
264
|
-
table: false,
|
|
265
|
-
code: false
|
|
266
|
-
},
|
|
267
|
-
children: displayText
|
|
268
|
-
})
|
|
269
|
-
});
|
|
270
|
-
});
|
|
271
|
-
TimelineSegmentBody.displayName = 'TimelineSegmentBody';
|
|
272
216
|
var MessageItem = /*#__PURE__*/memo(function (props) {
|
|
273
217
|
var _props$projectMetadat;
|
|
274
218
|
var id = props.id,
|
|
@@ -319,7 +263,7 @@ var MessageItem = /*#__PURE__*/memo(function (props) {
|
|
|
319
263
|
setPreviewAttachment(null);
|
|
320
264
|
};
|
|
321
265
|
var handleAttachmentDownload = /*#__PURE__*/function () {
|
|
322
|
-
var
|
|
266
|
+
var _ref4 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee(attachment) {
|
|
323
267
|
var extension, fileName, fileUrl, blobUrl, downloadedFile, link, _t;
|
|
324
268
|
return _regeneratorRuntime.wrap(function (_context) {
|
|
325
269
|
while (1) switch (_context.prev = _context.next) {
|
|
@@ -374,7 +318,7 @@ var MessageItem = /*#__PURE__*/memo(function (props) {
|
|
|
374
318
|
}, _callee, null, [[1, 6]]);
|
|
375
319
|
}));
|
|
376
320
|
return function handleAttachmentDownload(_x) {
|
|
377
|
-
return
|
|
321
|
+
return _ref4.apply(this, arguments);
|
|
378
322
|
};
|
|
379
323
|
}();
|
|
380
324
|
if (isChangeProject && options) {
|
|
@@ -473,15 +417,15 @@ var MessageItem = /*#__PURE__*/memo(function (props) {
|
|
|
473
417
|
})]
|
|
474
418
|
});
|
|
475
419
|
});
|
|
476
|
-
var ChatAIMessagesInner = function ChatAIMessagesInner(
|
|
477
|
-
var userInitialMessage =
|
|
478
|
-
initialChatId =
|
|
479
|
-
onError =
|
|
480
|
-
onSendMessageReady =
|
|
481
|
-
onScrollToBottom =
|
|
482
|
-
attachments =
|
|
483
|
-
agents =
|
|
484
|
-
expanded =
|
|
420
|
+
var ChatAIMessagesInner = function ChatAIMessagesInner(_ref5) {
|
|
421
|
+
var userInitialMessage = _ref5.userInitialMessage,
|
|
422
|
+
initialChatId = _ref5.initialChatId,
|
|
423
|
+
onError = _ref5.onError,
|
|
424
|
+
onSendMessageReady = _ref5.onSendMessageReady,
|
|
425
|
+
onScrollToBottom = _ref5.onScrollToBottom,
|
|
426
|
+
attachments = _ref5.attachments,
|
|
427
|
+
agents = _ref5.agents,
|
|
428
|
+
expanded = _ref5.expanded;
|
|
485
429
|
var _useT = useT(),
|
|
486
430
|
t = _useT.t;
|
|
487
431
|
var _useGlobalContext3 = useGlobalContext(),
|
|
@@ -531,113 +475,32 @@ var ChatAIMessagesInner = function ChatAIMessagesInner(_ref6) {
|
|
|
531
475
|
var handleSelectOption = useCallback(function (option) {
|
|
532
476
|
changeProject(option);
|
|
533
477
|
}, [changeProject]);
|
|
534
|
-
var handleSuggestionClick = useCallback(
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
|
|
549
|
-
|
|
550
|
-
|
|
551
|
-
|
|
552
|
-
|
|
553
|
-
|
|
554
|
-
|
|
555
|
-
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
}
|
|
561
|
-
_lastUserMessage = messages.filter(function (msg) {
|
|
562
|
-
return msg.role === ChatHistoryRole.USER || msg.user.id === authUser.id.toString();
|
|
563
|
-
}).at(-1);
|
|
564
|
-
if (!(_lastUserMessage !== null && _lastUserMessage !== void 0 && _lastUserMessage.message)) {
|
|
565
|
-
_context2.next = 7;
|
|
566
|
-
break;
|
|
567
|
-
}
|
|
568
|
-
retryAttachments = Array.isArray(_lastUserMessage.attachments) ? _lastUserMessage.attachments : Array.isArray(_lastUserMessage.sources) ? _lastUserMessage.sources : [];
|
|
569
|
-
_context2.next = 3;
|
|
570
|
-
return sendMessage(_lastUserMessage.message, retryAttachments);
|
|
571
|
-
case 3:
|
|
572
|
-
_t3 = _yield$sendMessage = _context2.sent;
|
|
573
|
-
_t2 = _t3 !== null;
|
|
574
|
-
if (!_t2) {
|
|
575
|
-
_context2.next = 4;
|
|
576
|
-
break;
|
|
577
|
-
}
|
|
578
|
-
_t2 = _yield$sendMessage !== void 0;
|
|
579
|
-
case 4:
|
|
580
|
-
if (!_t2) {
|
|
581
|
-
_context2.next = 5;
|
|
582
|
-
break;
|
|
583
|
-
}
|
|
584
|
-
_t4 = _yield$sendMessage;
|
|
585
|
-
_context2.next = 6;
|
|
586
|
-
break;
|
|
587
|
-
case 5:
|
|
588
|
-
_t4 = false;
|
|
589
|
-
case 6:
|
|
590
|
-
started = _t4;
|
|
591
|
-
case 7:
|
|
592
|
-
_context2.next = 13;
|
|
593
|
-
break;
|
|
594
|
-
case 8:
|
|
595
|
-
_context2.next = 9;
|
|
596
|
-
return sendMessage(suggestion);
|
|
597
|
-
case 9:
|
|
598
|
-
_t6 = _yield$sendMessage2 = _context2.sent;
|
|
599
|
-
_t5 = _t6 !== null;
|
|
600
|
-
if (!_t5) {
|
|
601
|
-
_context2.next = 10;
|
|
602
|
-
break;
|
|
603
|
-
}
|
|
604
|
-
_t5 = _yield$sendMessage2 !== void 0;
|
|
605
|
-
case 10:
|
|
606
|
-
if (!_t5) {
|
|
607
|
-
_context2.next = 11;
|
|
608
|
-
break;
|
|
609
|
-
}
|
|
610
|
-
_t7 = _yield$sendMessage2;
|
|
611
|
-
_context2.next = 12;
|
|
612
|
-
break;
|
|
613
|
-
case 11:
|
|
614
|
-
_t7 = false;
|
|
615
|
-
case 12:
|
|
616
|
-
started = _t7;
|
|
617
|
-
case 13:
|
|
618
|
-
if (started) {
|
|
619
|
-
_context2.next = 14;
|
|
620
|
-
break;
|
|
621
|
-
}
|
|
622
|
-
return _context2.abrupt("return");
|
|
623
|
-
case 14:
|
|
624
|
-
isMarketplaceGlobalAgent = isMaiakerAgent(agent);
|
|
625
|
-
event(EVENTS.aiChatSuggestedAnswer, {
|
|
626
|
-
agent_type: isMarketplaceGlobalAgent ? 'marketplace' : agent === null || agent === void 0 ? void 0 : agent.type
|
|
627
|
-
});
|
|
628
|
-
setSelectedSuggestionMessageIds(function (prev) {
|
|
629
|
-
return _objectSpread(_objectSpread({}, prev), {}, _defineProperty({}, messageId, true));
|
|
630
|
-
});
|
|
631
|
-
case 15:
|
|
632
|
-
case "end":
|
|
633
|
-
return _context2.stop();
|
|
634
|
-
}
|
|
635
|
-
}, _callee2);
|
|
636
|
-
}));
|
|
637
|
-
return function (_x2, _x3) {
|
|
638
|
-
return _ref7.apply(this, arguments);
|
|
639
|
-
};
|
|
640
|
-
}(), [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]);
|
|
478
|
+
var handleSuggestionClick = useCallback(function (messageId, suggestion) {
|
|
479
|
+
if (!(suggestion !== null && suggestion !== void 0 && suggestion.trim())) return;
|
|
480
|
+
if (selectedSuggestionMessageIds[messageId]) return;
|
|
481
|
+
var isMarketplaceGlobalAgent = isMaiakerAgent(agent);
|
|
482
|
+
event(EVENTS.aiChatSuggestedAnswer, {
|
|
483
|
+
agent_type: isMarketplaceGlobalAgent ? 'marketplace' : agent === null || agent === void 0 ? void 0 : agent.type
|
|
484
|
+
});
|
|
485
|
+
setSelectedSuggestionMessageIds(function (prev) {
|
|
486
|
+
return _objectSpread(_objectSpread({}, prev), {}, _defineProperty({}, messageId, true));
|
|
487
|
+
});
|
|
488
|
+
var targetMessage = messages.find(function (msg) {
|
|
489
|
+
return msg.id === messageId;
|
|
490
|
+
});
|
|
491
|
+
var isRetrySuggestion = !!(targetMessage !== null && targetMessage !== void 0 && targetMessage.isError) && suggestion === t('chat.retry');
|
|
492
|
+
if (isRetrySuggestion) {
|
|
493
|
+
var _lastUserMessage = messages.filter(function (msg) {
|
|
494
|
+
return msg.role === ChatHistoryRole.USER || msg.user.id === authUser.id.toString();
|
|
495
|
+
}).at(-1);
|
|
496
|
+
if (_lastUserMessage !== null && _lastUserMessage !== void 0 && _lastUserMessage.message) {
|
|
497
|
+
var retryAttachments = Array.isArray(_lastUserMessage.attachments) ? _lastUserMessage.attachments : Array.isArray(_lastUserMessage.sources) ? _lastUserMessage.sources : [];
|
|
498
|
+
sendMessage(_lastUserMessage.message, retryAttachments);
|
|
499
|
+
return;
|
|
500
|
+
}
|
|
501
|
+
}
|
|
502
|
+
sendMessage(suggestion);
|
|
503
|
+
}, [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]);
|
|
641
504
|
|
|
642
505
|
/**
|
|
643
506
|
* Actualiza el estado del botón "scroll to bottom" comparando la posición
|
|
@@ -889,75 +752,6 @@ var ChatAIMessagesInner = function ChatAIMessagesInner(_ref6) {
|
|
|
889
752
|
attachmentsCount: attachmentsCount,
|
|
890
753
|
t: t
|
|
891
754
|
});
|
|
892
|
-
var streamTimeline = useStreamTimeline();
|
|
893
|
-
var showStreamTurnTimeline = Boolean(streamTimeline.turnId && (waitingResponse || isWriting || streamTimeline.segments.length > 0));
|
|
894
|
-
var lastApprovalMessageIndex = useMemo(function () {
|
|
895
|
-
for (var i = messages.length - 1; i >= 0; i -= 1) {
|
|
896
|
-
if (messages[i].approval) return i;
|
|
897
|
-
}
|
|
898
|
-
return -1;
|
|
899
|
-
}, [messages]);
|
|
900
|
-
var anchorTimelineToApproval = useMemo(function () {
|
|
901
|
-
if (lastApprovalMessageIndex < 0 || !showStreamTurnTimeline) return false;
|
|
902
|
-
return messages[lastApprovalMessageIndex].approvalStatus === 'approved';
|
|
903
|
-
}, [lastApprovalMessageIndex, messages, showStreamTurnTimeline]);
|
|
904
|
-
useEffect(function () {
|
|
905
|
-
var _approvalMessage$appr;
|
|
906
|
-
if (!showStreamTurnTimeline) return;
|
|
907
|
-
var approvalMessage = lastApprovalMessageIndex >= 0 ? messages[lastApprovalMessageIndex] : undefined;
|
|
908
|
-
streamDebugLog('chatUI', 'streamTurnTimeline:render', {
|
|
909
|
-
showStreamTurnTimeline: showStreamTurnTimeline,
|
|
910
|
-
anchorTimelineToApproval: anchorTimelineToApproval,
|
|
911
|
-
turnId: streamTimeline.turnId,
|
|
912
|
-
segmentCount: streamTimeline.segments.length,
|
|
913
|
-
timeline: summarizeTimelineSnapshot(streamTimeline),
|
|
914
|
-
waitingResponse: waitingResponse,
|
|
915
|
-
isWriting: isWriting,
|
|
916
|
-
approvalMessageId: approvalMessage === null || approvalMessage === void 0 ? void 0 : approvalMessage.id,
|
|
917
|
-
approvalStatus: approvalMessage === null || approvalMessage === void 0 ? void 0 : approvalMessage.approvalStatus,
|
|
918
|
-
pendingTools: approvalMessage === null || approvalMessage === void 0 || (_approvalMessage$appr = approvalMessage.approval) === null || _approvalMessage$appr === void 0 || (_approvalMessage$appr = _approvalMessage$appr.pending_actions) === null || _approvalMessage$appr === void 0 ? void 0 : _approvalMessage$appr.map(function (a) {
|
|
919
|
-
return a.tool_name;
|
|
920
|
-
})
|
|
921
|
-
});
|
|
922
|
-
if (approvalMessage !== null && approvalMessage !== void 0 && approvalMessage.approval && approvalMessage.approvalStatus === 'pending') {
|
|
923
|
-
var _approvalMessage$appr2;
|
|
924
|
-
streamDebugLogHitlUiOverlap({
|
|
925
|
-
scope: 'chatUI',
|
|
926
|
-
source: 'timelineSegment',
|
|
927
|
-
hitlContext: {
|
|
928
|
-
messageId: approvalMessage.id,
|
|
929
|
-
messageText: approvalMessage.message,
|
|
930
|
-
approval: approvalMessage.approval,
|
|
931
|
-
pendingActions: approvalMessage.approval.pending_actions,
|
|
932
|
-
threadIds: (_approvalMessage$appr2 = approvalMessage.approval.pending_actions) === null || _approvalMessage$appr2 === void 0 ? void 0 : _approvalMessage$appr2.map(function (a) {
|
|
933
|
-
return a.thread_id;
|
|
934
|
-
})
|
|
935
|
-
},
|
|
936
|
-
uiSurfaces: ['approvalBox', 'streamTimeline']
|
|
937
|
-
});
|
|
938
|
-
}
|
|
939
|
-
}, [showStreamTurnTimeline, anchorTimelineToApproval, streamTimeline, waitingResponse, isWriting, lastApprovalMessageIndex, messages]);
|
|
940
|
-
var renderTimelineContentBlock = useCallback(function (_ref8) {
|
|
941
|
-
var text = _ref8.text,
|
|
942
|
-
isStreaming = _ref8.isStreaming,
|
|
943
|
-
showAssistantHeader = _ref8.showAssistantHeader;
|
|
944
|
-
return /*#__PURE__*/_jsxs(SCMessageItemWrapper, {
|
|
945
|
-
$isAssistant: true,
|
|
946
|
-
children: [showAssistantHeader && /*#__PURE__*/_jsx(AssistantMessageHeader, {}), /*#__PURE__*/_jsx(SCMessageItemInner, {
|
|
947
|
-
children: /*#__PURE__*/_jsx(TimelineSegmentBody, {
|
|
948
|
-
text: text,
|
|
949
|
-
isStreaming: isStreaming
|
|
950
|
-
})
|
|
951
|
-
})]
|
|
952
|
-
});
|
|
953
|
-
}, []);
|
|
954
|
-
var streamTurnTimeline = showStreamTurnTimeline ? /*#__PURE__*/_jsx(StreamAssistantTurnTimeline, {
|
|
955
|
-
segments: streamTimeline.segments,
|
|
956
|
-
initialActivity: streamLoadingDisplay,
|
|
957
|
-
waitingResponse: waitingResponse,
|
|
958
|
-
isWriting: isWriting,
|
|
959
|
-
renderContentBlock: renderTimelineContentBlock
|
|
960
|
-
}) : null;
|
|
961
755
|
var isScrollOnParent = !!expanded;
|
|
962
756
|
var isMarketplaceGlobalAgent = isMaiakerAgent(agent);
|
|
963
757
|
|
|
@@ -982,8 +776,8 @@ var ChatAIMessagesInner = function ChatAIMessagesInner(_ref6) {
|
|
|
982
776
|
var messagesContent = /*#__PURE__*/_jsxs(_Fragment, {
|
|
983
777
|
children: [isLoadingMoreMessages && /*#__PURE__*/_jsx(LoadingText, {
|
|
984
778
|
text: t('chat.loadingMore')
|
|
985
|
-
}), /*#__PURE__*/
|
|
986
|
-
children:
|
|
779
|
+
}), /*#__PURE__*/_jsx(_Fragment, {
|
|
780
|
+
children: messages.map(function (message, index) {
|
|
987
781
|
var _message$attachments, _message$sources, _message$project, _message$id;
|
|
988
782
|
var isAssistantMessage = message.role === ChatHistoryRole.ASSISTANT || message.user.id === 'assistant';
|
|
989
783
|
var isLastMessage = index === messages.length - 1;
|
|
@@ -997,21 +791,24 @@ var ChatAIMessagesInner = function ChatAIMessagesInner(_ref6) {
|
|
|
997
791
|
|
|
998
792
|
// Key estable: solo message.id para evitar remount durante streaming (message.date puede cambiar)
|
|
999
793
|
var messageKey = (_message$id = message.id) !== null && _message$id !== void 0 ? _message$id : "msg-".concat(index);
|
|
1000
|
-
return /*#__PURE__*/
|
|
1001
|
-
|
|
1002
|
-
|
|
1003
|
-
|
|
1004
|
-
|
|
1005
|
-
|
|
1006
|
-
|
|
1007
|
-
|
|
1008
|
-
|
|
1009
|
-
|
|
1010
|
-
|
|
1011
|
-
|
|
1012
|
-
|
|
1013
|
-
|
|
1014
|
-
|
|
794
|
+
return /*#__PURE__*/_createElement(MessageItem, _objectSpread(_objectSpread({}, message), {}, {
|
|
795
|
+
key: messageKey,
|
|
796
|
+
authUser: authUser,
|
|
797
|
+
handleSelectOption: handleSelectOption,
|
|
798
|
+
handleFeedback: handleFeedback,
|
|
799
|
+
handleApprovalDecision: handleApprovalDecisionWithScroll,
|
|
800
|
+
handleSuggestionClick: handleSuggestionClick,
|
|
801
|
+
hasSelectedSuggestion: !!selectedSuggestionMessageIds[message.id],
|
|
802
|
+
disableFeedback: messageFeedback,
|
|
803
|
+
isStreaming: isStreaming,
|
|
804
|
+
isLastMessage: isLastMessage,
|
|
805
|
+
expanded: expanded
|
|
806
|
+
}));
|
|
807
|
+
})
|
|
808
|
+
}), streamLoadingDisplay && /*#__PURE__*/_jsx(SCLoadingMessagesColumn, {
|
|
809
|
+
children: /*#__PURE__*/_jsx(AgentActivityIndicator, {
|
|
810
|
+
activity: streamLoadingDisplay
|
|
811
|
+
})
|
|
1015
812
|
})]
|
|
1016
813
|
});
|
|
1017
814
|
return /*#__PURE__*/_jsxs(SCMessagesOuter, {
|
|
@@ -1042,4 +839,4 @@ var ChatAIMessagesInner = function ChatAIMessagesInner(_ref6) {
|
|
|
1042
839
|
});
|
|
1043
840
|
};
|
|
1044
841
|
export var ChatAIMessages = /*#__PURE__*/React.memo(ChatAIMessagesInner);
|
|
1045
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSZWFjdCIsIm1lbW8iLCJ1c2VDYWxsYmFjayIsInVzZUVmZmVjdCIsInVzZUxheW91dEVmZmVjdCIsInVzZU1lbW8iLCJ1c2VSZWYiLCJ1c2VTdGF0ZSIsIlN0cmVhbWRvd24iLCJjcmVhdGVDb2RlUGx1Z2luIiwiQXJyb3dTbWFsbERvd24iLCJBdHRhY2htZW50Q2FyZCIsIkFwcHJvdmFsQm94IiwiQXR0YWNobWVudFByZXZpZXdNb2RhbCIsIkF0dGFjaG1lbnRDYXJkQXVkaW8iLCJDaGF0SGlzdG9yeVJvbGUiLCJNQUlBX1NUUkVBTURPV05fUkVIWVBFX1BMVUdJTlMiLCJyZW5kZXJUZXh0V2l0aE1lbnRpb25zIiwiaGFzSW5saW5lTWFya2VycyIsImlzTWFpYWtlckFnZW50IiwidXNlVXNlciIsInVzZVQiLCJ1c2VDaGF0TWFuYWdlciIsInVzZVNtb290aFN0cmVhbVRleHQiLCJ1c2VTdHJlYW1pbmdNZXNzYWdlIiwiTG9hZGluZ1RleHQiLCJpc1N0cmVhbWluZ1BsYWNlaG9sZGVyTWVzc2FnZUlkIiwicmVzb2x2ZVN0cmVhbUxvYWRpbmdEaXNwbGF5IiwiTG9hZGVyIiwidXNlU3RyZWFtVGltZWxpbmUiLCJTdHJlYW1Bc3Npc3RhbnRUdXJuVGltZWxpbmUiLCJzdHJlYW1EZWJ1Z0xvZyIsInN0cmVhbURlYnVnTG9nSGl0bFVpT3ZlcmxhcCIsInN1bW1hcml6ZVRpbWVsaW5lU25hcHNob3QiLCJGYWRlIiwiTWVzc2FnZUZyb21Vc2VyIiwiTWVzc2FnZUZyb21PdGhlciIsIk1lc3NhZ2VDb250ZW50RnJvbVVzZXIiLCJNZXNzYWdlQ29udGVudEZyb21PdGhlciIsIk1lc3NhZ2VGZWVkYmFjayIsIlNDQ0FJTWVzc2FnZVdyYXBwZXIiLCJTY3JvbGxUb0JvdHRvbUJ1dHRvbiIsIlNDTWVzc2FnZXNPdXRlciIsIlNDTWVzc2FnZXNTY3JvbGwiLCJTQ01lc3NhZ2VzSW5uZXIiLCJTQ09wdGlvbnNMaXN0IiwiU0NPcHRpb25JdGVtIiwiU0NBc3Npc3RhbnRNZXNzYWdlSGVhZGVyIiwiU0NBc3Npc3RhbnROYW1lIiwiU0NBc3Npc3RhbnRBdmF0YXIiLCJTQ01lc3NhZ2VJdGVtV3JhcHBlciIsIlNDTWVzc2FnZUl0ZW1Jbm5lciIsIlNDQXR0YWNobWVudHNSb3ciLCJTQ0FwcHJvdmFsQWN0aW9uc0NvbHVtbiIsIkZlZWRiYWNrIiwidXNlR2xvYmFsQ29udGV4dCIsIk1BSUFJY29uIiwiRW50aXR5TGlua0N1c3RvbUxpbmsiLCJnZXRFbnRpdHlMaW5rV3JhcHBlckNsYXNzTmFtZSIsIkNoYXRBSVN1Z2dlc3Rpb25zIiwiQ2hhdEFJQ3JlYXRlQWdlbnRBY3Rpb25zIiwiRVZFTlRTIiwidXNlRXZlbnQiLCJkb3dubG9hZEZpbGVGcm9tVXJsIiwianN4IiwiX2pzeCIsImpzeHMiLCJfanN4cyIsIkZyYWdtZW50IiwiX0ZyYWdtZW50IiwiY29kZSIsInRoZW1lcyIsIkFzc2lzdGFudEF2YXRhcklubmVyIiwiX3VzZUdsb2JhbENvbnRleHQiLCJhZ2VudCIsImNoaWxkcmVuIiwidHlwZSIsImlzX2xlZ2FjeV9jb250ZXh0Iiwid2lkdGgiLCJoZWlnaHQiLCJlbW9qaSIsIkFzc2lzdGFudEF2YXRhciIsIk1lc3NhZ2VXcmFwcGVyIiwiX3JlZiIsImlzQ3VycmVudFVzZXIiLCJwcm9wcyIsIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsIl9leGNsdWRlZCIsIk1lc3NhZ2VDb21wb25lbnQiLCJfb2JqZWN0U3ByZWFkIiwiTWVzc2FnZUNvbnRlbnRXcmFwcGVyIiwiX3JlZjIiLCJfZXhjbHVkZWQyIiwiTWVzc2FnZUNvbnRlbnRDb21wb25lbnQiLCJNZXNzYWdlT3B0aW9ucyIsIl9yZWYzIiwib3B0aW9ucyIsImhhbmRsZVNlbGVjdE9wdGlvbiIsIl91c2VTdGF0ZSIsIl91c2VTdGF0ZTIiLCJfc2xpY2VkVG9BcnJheSIsInNlbGVjdGVkT3B0aW9uIiwic2V0U2VsZWN0ZWRPcHRpb24iLCJoYW5kbGVTZWxlY3QiLCJvcHRpb24iLCJtYXAiLCIkaGFzU2VsZWN0aW9uIiwiJGRpbW1lZCIsImlkIiwib25DbGljayIsIm5hbWUiLCJBc3Npc3RhbnRNZXNzYWdlSGVhZGVyIiwiX3VzZUdsb2JhbENvbnRleHQyIiwiZGlzcGxheU5hbWUiLCJTdHJlYW1pbmdNZXNzYWdlQm9keSIsIl9wcm9wcyRjcmVhdGVBZ2VudEZvbCIsIl9wcm9wcyRzdWdnZXN0aW9ucyIsInN0cmVhbWluZ1RleHQiLCJpc1N0cmVhbWluZyIsIm1lc3NhZ2VJZCIsInJhd1RleHQiLCJtZXNzYWdlIiwid2luRmxhZ3MiLCJ3aW5kb3ciLCJkaXNwbGF5VGV4dCIsImVuYWJsZWQiLCJtYXhDaGFyc1BlckZyYW1lIiwic25hcFRvV29yZEJvdW5kYXJ5Iiwic3RyZWFtTGFnTXMiLCJ0YXJnZXRMYWdNcyIsInN0cmVhbUFkYXB0IiwiYWRhcHRUb0JhY2tlbmRSYXRlIiwic3RyZWFtQnVmZmVyTXMiLCJ0YXJnZXRCdWZmZXJNcyIsInN0cmVhbU1pbkJ1ZmZlciIsIm1pbkJ1ZmZlckNoYXJzIiwic3RyZWFtV2FybXVwTXMiLCJ3YXJtdXBNcyIsImNyZWF0ZUFnZW50QWN0aW9uc0FnZW50SWQiLCJjcmVhdGVBZ2VudEZvbGxvd1VwIiwiYWdlbnRJZCIsImhhc01lbnRpb25zIiwibWVudGlvbk5vZGVzIiwiaXNGcm9udGVuZENhbmNlbGxlZCIsImNsYXNzTmFtZSIsInN0eWxlIiwiZGlzcGxheSIsInBsdWdpbnMiLCJyZWh5cGVQbHVnaW5zIiwiY29tcG9uZW50cyIsImEiLCJsaW5rU2FmZXR5IiwiaXNBbmltYXRpbmciLCJzaGlraVRoZW1lIiwiY29udHJvbHMiLCJ0YWJsZSIsImlzQXNzaXN0YW50IiwiaXNFcnJvciIsImFwcHJvdmFsIiwiY29udGVudCIsInNvdXJjZXMiLCJoYW5kbGVGZWVkYmFjayIsImhhbmRsZUZlZWRiYWNrQ2xpY2siLCJkaXNhYmxlRmVlZGJhY2siLCJzdWdnZXN0aW9ucyIsImxlbmd0aCIsIm9uU2VsZWN0U3VnZ2VzdGlvbiIsInN1Z2dlc3Rpb24iLCJoYW5kbGVTdWdnZXN0aW9uQ2xpY2siLCJkaXNhYmxlZCIsInN1Z2dlc3Rpb25zRGlzYWJsZWQiLCJoaWRkZW4iLCJpc0xhc3RNZXNzYWdlIiwiVGltZWxpbmVTZWdtZW50Qm9keSIsIl9yZWY0IiwidGV4dCIsIk1lc3NhZ2VJdGVtIiwiX3Byb3BzJHByb2plY3RNZXRhZGF0IiwidXNlciIsImF1dGhVc2VyIiwiaXNDaGFuZ2VQcm9qZWN0IiwiaGFuZGxlQXBwcm92YWxEZWNpc2lvbiIsInJvbGUiLCJhdHRhY2htZW50cyIsImFwcHJvdmFsU3RhdHVzIiwiaGFzU2VsZWN0ZWRTdWdnZXN0aW9uIiwiX3VzZVN0YXRlMyIsIl91c2VTdGF0ZTQiLCJwcmV2aWV3QXR0YWNobWVudCIsInNldFByZXZpZXdBdHRhY2htZW50IiwiVVNFUiIsInRvU3RyaW5nIiwiQVNTSVNUQU5UIiwiaXNTdHJlYW1pbmdQbGFjZWhvbGRlciIsImlzQWN0aXZlU3RyZWFtaW5nIiwiaXNUaGlua2luZyIsIm1lc3NhZ2VBdHRhY2htZW50cyIsIkFycmF5IiwiaXNBcnJheSIsImhhbmRsZUF0dGFjaG1lbnRDbGljayIsImF0dGFjaG1lbnQiLCJmaWxlIiwiRmlsZSIsIm9yaWdpbmFsRmlsZSIsInVybF90aHVtYm5haWwiLCJ1cmxfb3JpZ2luYWwiLCJ1cmxfZmlsZSIsImhhbmRsZUNsb3NlUHJldmlldyIsImhhbmRsZUF0dGFjaG1lbnREb3dubG9hZCIsIl9yZWY1IiwiX2FzeW5jVG9HZW5lcmF0b3IiLCJfcmVnZW5lcmF0b3JSdW50aW1lIiwibWFyayIsIl9jYWxsZWUiLCJleHRlbnNpb24iLCJmaWxlTmFtZSIsImZpbGVVcmwiLCJibG9iVXJsIiwiZG93bmxvYWRlZEZpbGUiLCJsaW5rIiwiX3QiLCJ3cmFwIiwiX2NvbnRleHQiLCJwcmV2IiwibmV4dCIsImluY2x1ZGVzIiwiY29uY2F0Iiwic2VudCIsIlVSTCIsImNyZWF0ZU9iamVjdFVSTCIsImFicnVwdCIsImRvY3VtZW50IiwiY3JlYXRlRWxlbWVudCIsImhyZWYiLCJkb3dubG9hZCIsImJvZHkiLCJhcHBlbmRDaGlsZCIsImNsaWNrIiwic2V0VGltZW91dCIsInJlbW92ZUNoaWxkIiwicmV2b2tlT2JqZWN0VVJMIiwiY29uc29sZSIsImVycm9yIiwic3RvcCIsIl94IiwiYXBwbHkiLCJhcmd1bWVudHMiLCJoYXNGZWVkYmFjayIsIiRpc0Fzc2lzdGFudCIsIm1lc3NhZ2VFeHRyYUNvbnRlbnQiLCJmZWVkYmFjayIsInNlc3Npb25JZCIsInNwbGl0IiwiZmlsdGVyIiwicXVlc3Rpb25JZCIsImpvaW4iLCJpbmRleCIsIl9hdHRhY2htZW50JHR5cGUiLCJfYXR0YWNobWVudCRuYW1lIiwiYXR0YWNobWVudFR5cGUiLCJ0b0xvd2VyQ2FzZSIsImF0dGFjaG1lbnROYW1lIiwiaXNBdWRpb0ZpbGUiLCJzdGFydHNXaXRoIiwic29tZSIsImV4dCIsImVuZHNXaXRoIiwicG9zaXRpb25JbmRleCIsIm9uRG93bmxvYWQiLCJwZW5kaW5nX2FjdGlvbnMiLCJhY3Rpb25zIiwic3RhdHVzIiwib25BcHByb3ZlIiwidGhyZWFkSWRzIiwib25SZWplY3QiLCJpc1Byb2plY3REZWxldGVkIiwicHJvamVjdE1ldGFkYXRhIiwiaXNfZGVsZXRlZCIsImlzRXhwYW5kZWQiLCJleHBhbmRlZCIsImhpdGxJbnN0YW5jZUlkIiwib3JpZ2luYWxfdGhyZWFkX2lkIiwid2FybmluZ01lc3NhZ2UiLCJ3YXJuaW5nX21lc3NhZ2UiLCJtYW51YWxBcHByb3ZhbERldGVjdGVkIiwibWFudWFsX2FwcHJvdmFsX2RldGVjdGVkIiwiaXNPcGVuIiwib25DbG9zZSIsIkNoYXRBSU1lc3NhZ2VzSW5uZXIiLCJfcmVmNiIsInVzZXJJbml0aWFsTWVzc2FnZSIsImluaXRpYWxDaGF0SWQiLCJvbkVycm9yIiwib25TZW5kTWVzc2FnZVJlYWR5Iiwib25TY3JvbGxUb0JvdHRvbSIsImFnZW50cyIsIl91c2VUIiwidCIsIl91c2VHbG9iYWxDb250ZXh0MyIsImlzV2ViU2VhcmNoQWN0aXZlIiwiaXNEZWVwU2VhcmNoQWN0aXZlIiwiZXZlbnQiLCJtZXNzYWdlc1JlZiIsImNoYXRJbml0aWFsaXplZFJlZiIsImlzTG9hZGluZ01vcmVSZWYiLCJ1c2VyU2Nyb2xsaW5nUmVmIiwic2Nyb2xsVGhyZXNob2xkUmVmIiwibGFzdFNjcm9sbFRvcFJlZiIsInNob3dTY3JvbGxUb0JvdHRvbVJlZiIsInNjcm9sbFJhZlJlZiIsIl91c2VTdGF0ZTUiLCJfdXNlU3RhdGU2Iiwic2hvd1Njcm9sbFRvQm90dG9tIiwic2V0U2hvd1Njcm9sbFRvQm90dG9tIiwiX3VzZVN0YXRlNyIsIl91c2VTdGF0ZTgiLCJzZWxlY3RlZFN1Z2dlc3Rpb25NZXNzYWdlSWRzIiwic2V0U2VsZWN0ZWRTdWdnZXN0aW9uTWVzc2FnZUlkcyIsIl91c2VDaGF0TWFuYWdlciIsImNoYXRJZCIsInVuZGVmaW5lZCIsIm1lc3NhZ2VzIiwibG9hZGluZ01lc3NhZ2VzIiwiaXNMb2FkaW5nTW9yZU1lc3NhZ2VzIiwid2FpdGluZ1Jlc3BvbnNlIiwiaXNXcml0aW5nIiwibG9hZGluZ01lc3NhZ2UiLCJzdHJlYW1BY3Rpdml0eSIsImFjdGl2ZUxvYWRpbmdzIiwic2VuZE1lc3NhZ2UiLCJjaGFuZ2VQcm9qZWN0IiwiaW5pdGlhbGl6ZUNoYXQiLCJoYW5kbGVTY3JvbGwiLCJzdG9wR2VuZXJhdGlvbiIsIl9yZWY3IiwiX2NhbGxlZTIiLCJ0YXJnZXRNZXNzYWdlIiwiaXNSZXRyeVN1Z2dlc3Rpb24iLCJzdGFydGVkIiwiX2xhc3RVc2VyTWVzc2FnZSIsIl95aWVsZCRzZW5kTWVzc2FnZSIsInJldHJ5QXR0YWNobWVudHMiLCJfeWllbGQkc2VuZE1lc3NhZ2UyIiwiaXNNYXJrZXRwbGFjZUdsb2JhbEFnZW50IiwiX3QyIiwiX3QzIiwiX3Q0IiwiX3Q1IiwiX3Q2IiwiX3Q3IiwiX2NvbnRleHQyIiwidHJpbSIsImZpbmQiLCJtc2ciLCJsYXN0VXNlck1lc3NhZ2UiLCJhdCIsImFpQ2hhdFN1Z2dlc3RlZEFuc3dlciIsImFnZW50X3R5cGUiLCJfZGVmaW5lUHJvcGVydHkiLCJfeDIiLCJfeDMiLCJlbnRpdHkiLCJ1cGRhdGVTY3JvbGxCb3R0b21WaXNpYmlsaXR5IiwiZWwiLCJjdXJyZW50Iiwic2Nyb2xsVG9wIiwic2Nyb2xsSGVpZ2h0IiwiY2xpZW50SGVpZ2h0IiwiZGlzdGFuY2VGcm9tQm90dG9tIiwic2hvdWxkU2hvdyIsInNjcm9sbFRvQm90dG9tUmFmIiwib3B0cyIsIl9vcHRzJHNraXBJZlVzZXJTY3JvbCIsInNraXBJZlVzZXJTY3JvbGxpbmciLCJfb3B0cyRkZWxheU1zIiwiZGVsYXlNcyIsInJ1biIsInJlcXVlc3RBbmltYXRpb25GcmFtZSIsImhhbmRsZUNsaWNrU2Nyb2xsVG9Cb3R0b20iLCJzY3JvbGxUbyIsInRvcCIsImJlaGF2aW9yIiwiaGFuZGxlQXBwcm92YWxEZWNpc2lvbldpdGhTY3JvbGwiLCJoYW5kbGVTY3JvbGxUb0JvdHRvbSIsImUiLCJjb250YWluZXIiLCJjdXJyZW50VGFyZ2V0IiwiY2FuY2VsQW5pbWF0aW9uRnJhbWUiLCJpc1Njcm9sbGluZ1VwIiwiaXNOZWFyQm90dG9tIiwic2VuZE1lc3NhZ2VSZWYiLCJzdG9wR2VuZXJhdGlvblJlZiIsIm9uU2VuZE1lc3NhZ2VSZWFkeVJlZiIsInNlbmRNZXNzYWdlUHJveHlSZWYiLCJmYXFJZCIsImFnZW50U3VnZ2VzdGlvbklkIiwibWVudGlvbnMiLCJmdWFJZCIsInNjSWQiLCJzdG9wR2VuZXJhdGlvblByb3h5UmVmIiwicmFmSWQiLCJsYXN0SGVpZ2h0IiwidGljayIsImN1cnJlbnRIZWlnaHQiLCJsYXN0TWVzc2FnZUlkUmVmIiwibGFzdE1lc3NhZ2VzTGVuZ3RoUmVmIiwiX2xhc3RNZXNzYWdlJGlkIiwibGFzdE1lc3NhZ2UiLCJsYXN0SWQiLCJwcmV2SWQiLCJwcmV2TGVuIiwiaXNOZXdNZXNzYWdlIiwiaXNBdEJvdHRvbSIsImhhc0luaXRpYWxNZXNzYWdlIiwiaXNBcHByb3ZhbCIsImlzQW5zd2VyT3JRdWVzdGlvbiIsImF0dGFjaG1lbnRzQ291bnQiLCJzdHJlYW1Mb2FkaW5nRGlzcGxheSIsImhhc0F0dGFjaG1lbnRzIiwiQm9vbGVhbiIsInN0cmVhbVRpbWVsaW5lIiwic2hvd1N0cmVhbVR1cm5UaW1lbGluZSIsInR1cm5JZCIsInNlZ21lbnRzIiwibGFzdEFwcHJvdmFsTWVzc2FnZUluZGV4IiwiaSIsImFuY2hvclRpbWVsaW5lVG9BcHByb3ZhbCIsIl9hcHByb3ZhbE1lc3NhZ2UkYXBwciIsImFwcHJvdmFsTWVzc2FnZSIsInNlZ21lbnRDb3VudCIsInRpbWVsaW5lIiwiYXBwcm92YWxNZXNzYWdlSWQiLCJwZW5kaW5nVG9vbHMiLCJ0b29sX25hbWUiLCJfYXBwcm92YWxNZXNzYWdlJGFwcHIyIiwic2NvcGUiLCJzb3VyY2UiLCJoaXRsQ29udGV4dCIsIm1lc3NhZ2VUZXh0IiwicGVuZGluZ0FjdGlvbnMiLCJ0aHJlYWRfaWQiLCJ1aVN1cmZhY2VzIiwicmVuZGVyVGltZWxpbmVDb250ZW50QmxvY2siLCJfcmVmOCIsInNob3dBc3Npc3RhbnRIZWFkZXIiLCJzdHJlYW1UdXJuVGltZWxpbmUiLCJpbml0aWFsQWN0aXZpdHkiLCJyZW5kZXJDb250ZW50QmxvY2siLCJpc1Njcm9sbE9uUGFyZW50IiwiZXhwYW5kZWRSZWYiLCJzYXZlZFNjcm9sbFRvcCIsImZpbGwiLCJtZXNzYWdlc0NvbnRlbnQiLCJfbWVzc2FnZSRhdHRhY2htZW50cyIsIl9tZXNzYWdlJHNvdXJjZXMiLCJfbWVzc2FnZSRwcm9qZWN0IiwiX21lc3NhZ2UkaWQiLCJpc0Fzc2lzdGFudE1lc3NhZ2UiLCJwcm9qZWN0IiwibWVzc2FnZUZlZWRiYWNrIiwid2FzSGVscGZ1bCIsIlRIVU1CU19VUCIsIlRIVU1CU19ET1dOIiwibWVzc2FnZUtleSIsIiRzY3JvbGxPblBhcmVudCIsInJlZiIsIm9uU2Nyb2xsIiwiJGlzTWFya2V0cGxhY2VHbG9iYWwiLCJjb2xvciIsIkNoYXRBSU1lc3NhZ2VzIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvbW9sZWN1bGVzL0NoYXRBSU1lc3NhZ2VzL0NoYXRBSU1lc3NhZ2VzLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBpbXBvcnQvbm8tZXh0cmFuZW91cy1kZXBlbmRlbmNpZXMgKi9cbi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9pbmRlbnQgKi9cbi8qIGVzbGludC1kaXNhYmxlIHJlYWN0L25vLXVuc3RhYmxlLW5lc3RlZC1jb21wb25lbnRzICovXG4vKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tc2hhZG93ICovXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1uZXN0ZWQtdGVybmFyeSAqL1xuLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSAqL1xuLyogZXNsaW50LWRpc2FibGUgbm8tdW5kZWYgKi9cbi8qIGVzbGludC1kaXNhYmxlIHJlYWN0L2Z1bmN0aW9uLWNvbXBvbmVudC1kZWZpbml0aW9uICovXG4vKiBlc2xpbnQtZGlzYWJsZSByZWFjdC9yZXF1aXJlLWRlZmF1bHQtcHJvcHMgKi9cbi8qIGVzbGludC1kaXNhYmxlIGpzeC1hMTF5L2NsaWNrLWV2ZW50cy1oYXZlLWtleS1ldmVudHMgKi9cbi8qIGVzbGludC1kaXNhYmxlIGpzeC1hMTF5L25vLXN0YXRpYy1lbGVtZW50LWludGVyYWN0aW9ucyAqL1xuaW1wb3J0IFJlYWN0LCB7IEZDLCBtZW1vLCBSZWFjdE5vZGUsIHVzZUNhbGxiYWNrLCB1c2VFZmZlY3QsIHVzZUxheW91dEVmZmVjdCwgdXNlTWVtbywgdXNlUmVmLCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgU3RyZWFtZG93biB9IGZyb20gJ3N0cmVhbWRvd24nXG5pbXBvcnQgeyBjcmVhdGVDb2RlUGx1Z2luIH0gZnJvbSAnQHN0cmVhbWRvd24vY29kZSdcbmltcG9ydCB7IEFycm93U21hbGxEb3duIH0gZnJvbSAnQHByb2plY3Rjb3IvaWNvbnMvbGliL2NvbXBvbmVudHMvQXJyb3dTbWFsbERvd24nXG5cbmltcG9ydCB7IEF0dGFjaG1lbnRDYXJkIH0gZnJvbSAnLi4vLi4vYXRvbXMvQXR0YWNobWVudENhcmQvQXR0YWNobWVudENhcmQnXG5pbXBvcnQgeyBBcHByb3ZhbEJveCB9IGZyb20gJy4uLy4uL2F0b21zL0FwcHJvdmFsQm94L0FwcHJvdmFsQm94J1xuaW1wb3J0IHsgQXR0YWNobWVudFByZXZpZXdNb2RhbCB9IGZyb20gJy4uLy4uL2F0b21zL0F0dGFjaG1lbnRQcmV2aWV3TW9kYWwnXG5pbXBvcnQgeyBBdHRhY2htZW50Q2FyZEF1ZGlvIH0gZnJvbSAnLi4vLi4vYXRvbXMvQXR0YWNobWVudENhcmQvQXR0YWNobWVudENhcmRBdWRpbydcbmltcG9ydCB7IE1BSUFNZXNzYWdlUHJvcHMgfSBmcm9tICcuLi8uLi9hdG9tcy9NQUlBTWVzc2FnZS9NQUlBTWVzc2FnZS5pbnRlcmZhY2VzJ1xuaW1wb3J0IHsgQ2hhdE1lc3NhZ2UsIENoYXRIaXN0b3J5Um9sZSB9IGZyb20gJy4uLy4uLy4uL3R5cGVzL0NoYXQnXG5pbXBvcnQgeyBNQUlBX1NUUkVBTURPV05fUkVIWVBFX1BMVUdJTlMgfSBmcm9tICcuLi8uLi8uLi91dGlscy9tYWlhU3RyZWFtZG93blJlaHlwZVBsdWdpbnMnXG5pbXBvcnQgeyByZW5kZXJUZXh0V2l0aE1lbnRpb25zLCBoYXNJbmxpbmVNYXJrZXJzIH0gZnJvbSAnLi4vLi4vLi4vdXRpbHMvcmVuZGVyQ29udGV4dE1lbnRpb25zJ1xuXG5pbXBvcnQgeyBpc01haWFrZXJBZ2VudCB9IGZyb20gJy4uLy4uLy4uL3V0aWxzL2FnZW50RGlzcGxheU5hbWUnXG5pbXBvcnQgeyBDT1JVc2VyLCB1c2VVc2VyIH0gZnJvbSAnLi4vLi4vLi4vY29udGV4dC9jb3ItdXNlcidcblxuaW1wb3J0IHsgdXNlVCB9IGZyb20gJy4uLy4uLy4uL2hvb2tzL3VzZVQnXG5pbXBvcnQgeyB1c2VDaGF0TWFuYWdlciB9IGZyb20gJy4uLy4uLy4uL2hvb2tzL3VzZUNoYXRNYW5hZ2VyL3VzZUNoYXRNYW5hZ2VyJ1xuaW1wb3J0IHsgdXNlU21vb3RoU3RyZWFtVGV4dCB9IGZyb20gJy4uLy4uLy4uL2hvb2tzL3VzZVNtb290aFN0cmVhbVRleHQnXG5pbXBvcnQgeyB1c2VTdHJlYW1pbmdNZXNzYWdlIH0gZnJvbSAnLi4vLi4vLi4vaG9va3MvdXNlU3RyZWFtaW5nTWVzc2FnZSdcblxuaW1wb3J0IHsgTG9hZGluZ1RleHQgfSBmcm9tICcuLi8uLi9hdG9tcy9Mb2FkaW5nVGV4dCdcbmltcG9ydCB7IGlzU3RyZWFtaW5nUGxhY2Vob2xkZXJNZXNzYWdlSWQsIHJlc29sdmVTdHJlYW1Mb2FkaW5nRGlzcGxheSB9IGZyb20gJy4uLy4uLy4uL3V0aWxzL3N0cmVhbUFjdGl2aXR5TWVzc2FnZXMnXG5pbXBvcnQgeyBMb2FkZXIgfSBmcm9tICcuLi8uLi9hdG9tcy9Mb2FkZXInXG5pbXBvcnQgeyB1c2VTdHJlYW1UaW1lbGluZSB9IGZyb20gJy4uLy4uLy4uL2hvb2tzL3VzZVN0cmVhbVRpbWVsaW5lJ1xuaW1wb3J0IHsgU3RyZWFtQXNzaXN0YW50VHVyblRpbWVsaW5lIH0gZnJvbSAnLi4vU3RyZWFtQXNzaXN0YW50VHVyblRpbWVsaW5lJ1xuaW1wb3J0IHsgc3RyZWFtRGVidWdMb2csIHN0cmVhbURlYnVnTG9nSGl0bFVpT3ZlcmxhcCwgc3VtbWFyaXplVGltZWxpbmVTbmFwc2hvdCB9IGZyb20gJy4uLy4uLy4uL3V0aWxzL3N0cmVhbURlYnVnTG9nJ1xuaW1wb3J0IHsgRmFkZSB9IGZyb20gJy4uLy4uL2F0b21zL0ZhZGUnXG5cbmltcG9ydCB7IFByb2plY3QgfSBmcm9tICcuLi8uLi8uLi90eXBlcy9Qcm9qZWN0J1xuXG5pbXBvcnQgeyBNZXNzYWdlRnJvbVVzZXIsIE1lc3NhZ2VGcm9tT3RoZXIsIE1lc3NhZ2VDb250ZW50RnJvbVVzZXIsIE1lc3NhZ2VDb250ZW50RnJvbU90aGVyIH0gZnJvbSAnLi9zdHlsZXMnXG5pbXBvcnQgeyBNZXNzYWdlRmVlZGJhY2sgfSBmcm9tICcuLi9NZXNzYWdlRmVlZGJhY2snXG5pbXBvcnQge1xuICBTQ0NBSU1lc3NhZ2VXcmFwcGVyLFxuICBTY3JvbGxUb0JvdHRvbUJ1dHRvbixcbiAgU0NNZXNzYWdlc091dGVyLFxuICBTQ01lc3NhZ2VzU2Nyb2xsLFxuICBTQ01lc3NhZ2VzSW5uZXIsXG4gIFNDT3B0aW9uc0xpc3QsXG4gIFNDT3B0aW9uSXRlbSxcbiAgU0NBc3Npc3RhbnRNZXNzYWdlSGVhZGVyLFxuICBTQ0Fzc2lzdGFudE5hbWUsXG4gIFNDQXNzaXN0YW50QXZhdGFyLFxuICBTQ01lc3NhZ2VJdGVtV3JhcHBlcixcbiAgU0NNZXNzYWdlSXRlbUlubmVyLFxuICBTQ0F0dGFjaG1lbnRzUm93LFxuICBTQ0FwcHJvdmFsQWN0aW9uc0NvbHVtbixcbn0gZnJvbSAnLi9uZXdTdHlsZXMnXG5pbXBvcnQgeyBGZWVkYmFjayB9IGZyb20gJy4uL01lc3NhZ2VGZWVkYmFjay9NZXNzYWdlRmVlZGJhY2snXG5pbXBvcnQgeyB1c2VHbG9iYWxDb250ZXh0IH0gZnJvbSAnLi4vLi4vLi4vY29udGV4dC9nbG9iYWwtY29udGV4dCdcbmltcG9ydCB7IEFnZW50IH0gZnJvbSAnLi4vLi4vLi4vdHlwZXMvYWdlbnQnXG5pbXBvcnQgeyBBdHRhY2htZW50RmlsZSB9IGZyb20gJy4uL0NoYXRGb290ZXIvQ2hhdEZvb3RlcidcbmltcG9ydCB7IENvbnRleHRNZW50aW9uIH0gZnJvbSAnLi4vLi4vLi4vdHlwZXMvY29udGV4dE1lbnRpb24nXG5pbXBvcnQgeyBNQUlBSWNvbiB9IGZyb20gJy4uLy4uL2F0b21zL2ljb25zJ1xuaW1wb3J0IHsgRW50aXR5TGlua0N1c3RvbUxpbmssIGdldEVudGl0eUxpbmtXcmFwcGVyQ2xhc3NOYW1lIH0gZnJvbSAnLi4vLi4vLi4vdXRpbHMvZW50aXR5TGlua1JlbmRlcidcbmltcG9ydCB7IENoYXRBSVN1Z2dlc3Rpb25zIH0gZnJvbSAnLi9DaGF0QUlTdWdnZXN0aW9ucydcbmltcG9ydCB7IENoYXRBSUNyZWF0ZUFnZW50QWN0aW9ucyB9IGZyb20gJy4vQ2hhdEFJQ3JlYXRlQWdlbnRBY3Rpb25zJ1xuaW1wb3J0IHsgRVZFTlRTLCB1c2VFdmVudCB9IGZyb20gJy4uLy4uLy4uL2hvb2tzL3VzZUV2ZW50J1xuaW1wb3J0IHsgZG93bmxvYWRGaWxlRnJvbVVybCB9IGZyb20gJy4uLy4uLy4uL3V0aWxzL2ZpbGVEb3dubG9hZEhlbHBlcidcblxuY29uc3QgY29kZSA9IGNyZWF0ZUNvZGVQbHVnaW4oeyB0aGVtZXM6IFsnZ2l0aHViLWxpZ2h0JywgJ2dpdGh1Yi1saWdodCddIH0pXG5cbmNvbnN0IEFzc2lzdGFudEF2YXRhcklubmVyOiBGQyA9ICgpID0+IHtcbiAgY29uc3QgeyBhZ2VudCB9ID0gdXNlR2xvYmFsQ29udGV4dCgpXG4gIHJldHVybiAoXG4gICAgPFNDQXNzaXN0YW50QXZhdGFyPlxuICAgICAge2FnZW50Py50eXBlID09PSAnY2xvbmUnIHx8IGFnZW50Py50eXBlID09PSAnb3JjaGVzdHJhdG9yJyB8fCBhZ2VudD8uaXNfbGVnYWN5X2NvbnRleHQgPyAoXG4gICAgICAgIDxNQUlBSWNvbiB3aWR0aD17MTh9IGhlaWdodD17MTh9IC8+XG4gICAgICApIDogKFxuICAgICAgICBhZ2VudD8uZW1vamlcbiAgICAgICl9XG4gICAgPC9TQ0Fzc2lzdGFudEF2YXRhcj5cbiAgKVxufVxuXG5jb25zdCBBc3Npc3RhbnRBdmF0YXIgPSBtZW1vKEFzc2lzdGFudEF2YXRhcklubmVyKVxuXG50eXBlIENoYXRBSU1lc3NhZ2VzUHJvcHMgPSB7XG4gIHVzZXJJbml0aWFsTWVzc2FnZToge1xuICAgIG1lc3NhZ2U6IHN0cmluZ1xuICAgIGF0dGFjaG1lbnRzOiBBdHRhY2htZW50RmlsZVtdXG4gICAgZmFxSWQ/OiBzdHJpbmdcbiAgICBhZ2VudFN1Z2dlc3Rpb25JZD86IHN0cmluZ1xuICAgIG1lbnRpb25zPzogQ29udGV4dE1lbnRpb25bXVxuICAgIGZ1YUlkPzogc3RyaW5nXG4gICAgc2NJZD86IHN0cmluZ1xuICB9XG4gIGluaXRpYWxDaGF0SWQ6IHN0cmluZyB8IG51bGxcbiAgb25FcnJvcjogKCkgPT4gdm9pZFxuICBvblNlbmRNZXNzYWdlUmVhZHk/OiAoXG4gICAgc2VuZE1lc3NhZ2U6IChcbiAgICAgIG1lc3NhZ2U6IHN0cmluZyxcbiAgICAgIGF0dGFjaG1lbnRzPzogQXR0YWNobWVudEZpbGVbXSxcbiAgICAgIGZhcUlkPzogc3RyaW5nLFxuICAgICAgYWdlbnRTdWdnZXN0aW9uSWQ/OiBzdHJpbmcsXG4gICAgICBtZW50aW9ucz86IENvbnRleHRNZW50aW9uW10sXG4gICAgICBmdWFJZD86IHN0cmluZyxcbiAgICAgIHNjSWQ/OiBzdHJpbmdcbiAgICApID0+IHZvaWQsXG4gICAgc3RvcEdlbmVyYXRpb246ICgpID0+IHZvaWQsXG4gICAgaXNTdHJlYW1pbmc6IGJvb2xlYW4sXG4gICAgaXNXcml0aW5nOiBib29sZWFuXG4gICkgPT4gdm9pZFxuICBpc0Rpc2FibGVkPzogYm9vbGVhblxuICBvblNjcm9sbFRvQm90dG9tPzogKCkgPT4gdm9pZFxuICBhdHRhY2htZW50cz86IEF0dGFjaG1lbnRGaWxlW11cbiAgYWdlbnRzPzogQWdlbnRbXVxuICBleHBhbmRlZD86IGJvb2xlYW5cbn1cblxudHlwZSBNZXNzYWdlSXRlbVByb3BzID0gQ2hhdE1lc3NhZ2UgJiB7XG4gIGF1dGhVc2VyOiBDT1JVc2VyXG4gIGhhbmRsZVNlbGVjdE9wdGlvbjogKG9wdGlvbjogUHJvamVjdCkgPT4gdm9pZFxuICBoYW5kbGVTdWdnZXN0aW9uQ2xpY2s6IChtZXNzYWdlSWQ6IHN0cmluZywgc3VnZ2VzdGlvbjogc3RyaW5nKSA9PiB2b2lkXG4gIGhhc1NlbGVjdGVkU3VnZ2VzdGlvbj86IGJvb2xlYW5cbiAgaGFuZGxlRmVlZGJhY2s6IChmZWVkYmFjazogRmVlZGJhY2ssIGNoYXRNZXNzYWdlSWQ6IHN0cmluZykgPT4gdm9pZFxuICBoYW5kbGVBcHByb3ZhbERlY2lzaW9uOiAodGhyZWFkSWRzOiBzdHJpbmdbXSwgZGVjaXNpb246ICdhcHByb3ZlJyB8ICdyZWplY3QnKSA9PiB2b2lkXG4gIGRpc2FibGVGZWVkYmFjaz86IEZlZWRiYWNrIHwgbnVsbFxuICBzb3VyY2VzPzogYW55XG4gIGF0dGFjaG1lbnRzPzogQXR0YWNobWVudEZpbGVbXVxuICBpc1N0cmVhbWluZz86IGJvb2xlYW5cbiAgaXNMYXN0TWVzc2FnZT86IGJvb2xlYW5cbiAgZXhwYW5kZWQ/OiBib29sZWFuXG59XG5cbmludGVyZmFjZSBNZXNzYWdlV3JhcHBlclByb3BzIHtcbiAgaXNDdXJyZW50VXNlcjogYm9vbGVhblxuICBjaGlsZHJlbjogUmVhY3ROb2RlXG4gICdkYXRhLW1lc3NhZ2UtaWQnPzogc3RyaW5nXG4gIGhhc0ZlZWRiYWNrPzogYm9vbGVhblxufVxuXG50eXBlIE1lc3NhZ2VDb250ZW50V3JhcHBlclByb3BzID0gTUFJQU1lc3NhZ2VQcm9wcyAmIHtcbiAgaXNDdXJyZW50VXNlcjogYm9vbGVhblxuICBpc0Vycm9yPzogYm9vbGVhblxuICBpc0NoYW5nZVByb2plY3Q/OiBib29sZWFuXG59XG5cbmNvbnN0IE1lc3NhZ2VXcmFwcGVyOiBGQzxNZXNzYWdlV3JhcHBlclByb3BzPiA9ICh7IGlzQ3VycmVudFVzZXIsIGNoaWxkcmVuLCAuLi5wcm9wcyB9KSA9PiB7XG4gIGNvbnN0IE1lc3NhZ2VDb21wb25lbnQgPSBpc0N1cnJlbnRVc2VyID8gTWVzc2FnZUZyb21Vc2VyIDogTWVzc2FnZUZyb21PdGhlclxuICByZXR1cm4gPE1lc3NhZ2VDb21wb25lbnQgey4uLnByb3BzfT57Y2hpbGRyZW59PC9NZXNzYWdlQ29tcG9uZW50PlxufVxuXG5jb25zdCBNZXNzYWdlQ29udGVudFdyYXBwZXI6IEZDPE1lc3NhZ2VDb250ZW50V3JhcHBlclByb3BzPiA9ICh7IGlzQ3VycmVudFVzZXIsIC4uLnByb3BzIH0pID0+IHtcbiAgY29uc3QgTWVzc2FnZUNvbnRlbnRDb21wb25lbnQgPSBpc0N1cnJlbnRVc2VyID8gTWVzc2FnZUNvbnRlbnRGcm9tVXNlciA6IE1lc3NhZ2VDb250ZW50RnJvbU90aGVyXG4gIHJldHVybiA8TWVzc2FnZUNvbnRlbnRDb21wb25lbnQgey4uLnByb3BzfSAvPlxufVxuXG5mdW5jdGlvbiBNZXNzYWdlT3B0aW9ucyh7XG4gIG9wdGlvbnMsXG4gIGhhbmRsZVNlbGVjdE9wdGlvbixcbn06IHtcbiAgb3B0aW9uczogUHJvamVjdFtdIHwgbnVsbFxuICBoYW5kbGVTZWxlY3RPcHRpb246IChvcHRpb246IFByb2plY3QpID0+IHZvaWRcbn0pIHtcbiAgY29uc3QgW3NlbGVjdGVkT3B0aW9uLCBzZXRTZWxlY3RlZE9wdGlvbl0gPSB1c2VTdGF0ZTxQcm9qZWN0IHwgbnVsbD4obnVsbClcblxuICBjb25zdCBoYW5kbGVTZWxlY3QgPSAob3B0aW9uOiBQcm9qZWN0KSA9PiB7XG4gICAgaWYgKHNlbGVjdGVkT3B0aW9uKSByZXR1cm5cbiAgICBzZXRTZWxlY3RlZE9wdGlvbihvcHRpb24pXG4gICAgaGFuZGxlU2VsZWN0T3B0aW9uKG9wdGlvbilcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPFNDT3B0aW9uc0xpc3Q+XG4gICAgICB7KG9wdGlvbnMgfHwgW10pLm1hcChvcHRpb24gPT4gKFxuICAgICAgICA8U0NPcHRpb25JdGVtXG4gICAgICAgICAgJGhhc1NlbGVjdGlvbj17ISFzZWxlY3RlZE9wdGlvbn1cbiAgICAgICAgICAkZGltbWVkPXshIXNlbGVjdGVkT3B0aW9uICYmIHNlbGVjdGVkT3B0aW9uPy5pZCAhPT0gb3B0aW9uLmlkfVxuICAgICAgICAgIG9uQ2xpY2s9eygpID0+IGhhbmRsZVNlbGVjdChvcHRpb24pfVxuICAgICAgICAgIGtleT17b3B0aW9uLmlkfVxuICAgICAgICA+XG4gICAgICAgICAge29wdGlvbi5uYW1lfVxuICAgICAgICA8L1NDT3B0aW9uSXRlbT5cbiAgICAgICkpfVxuICAgIDwvU0NPcHRpb25zTGlzdD5cbiAgKVxufVxuXG5jb25zdCBBc3Npc3RhbnRNZXNzYWdlSGVhZGVyID0gKCkgPT4ge1xuICBjb25zdCB7IGFnZW50IH0gPSB1c2VHbG9iYWxDb250ZXh0KClcblxuICAvLyBTaWVtcHJlICdNQUlBJyBwYXJhIGNsb25lL29yY2hlc3RyYXRvciAobnVuY2EgZWwgbm9tYnJlIGRlbCBzdWJhZ2VudGUgcXVlXG4gIC8vIHJlc3BvbmRpw7MpOyBwYXJhIGN1c3RvbSwgZWwgbm9tYnJlIGRlbCBhZ2VudGUuXG4gIGNvbnN0IGRpc3BsYXlOYW1lID0gYWdlbnQ/LnR5cGUgPT09ICdjbG9uZScgfHwgYWdlbnQ/LnR5cGUgPT09ICdvcmNoZXN0cmF0b3InID8gJ01BSUEnIDogYWdlbnQ/Lm5hbWVcblxuICByZXR1cm4gKFxuICAgIDxTQ0Fzc2lzdGFudE1lc3NhZ2VIZWFkZXI+XG4gICAgICA8QXNzaXN0YW50QXZhdGFyIC8+XG4gICAgICB7ZGlzcGxheU5hbWUgJiYgPFNDQXNzaXN0YW50TmFtZT57ZGlzcGxheU5hbWV9PC9TQ0Fzc2lzdGFudE5hbWU+fVxuICAgIDwvU0NBc3Npc3RhbnRNZXNzYWdlSGVhZGVyPlxuICApXG59XG5cbi8qKiBTb2xvIGVzdGUgY29tcG9uZW50ZSByZS1yZW5kZXJpemEgY3VhbmRvIGNhbWJpYSBlbCB0ZXh0byBlbiBzdHJlYW1pbmcgKGxlZSBkZWwgY29udGV4dCkuICovXG5jb25zdCBTdHJlYW1pbmdNZXNzYWdlQm9keSA9IG1lbW8oXG4gIChwcm9wczoge1xuICAgIG1lc3NhZ2U6IHN0cmluZ1xuICAgIGlzU3RyZWFtaW5nOiBib29sZWFuXG4gICAgaXNDdXJyZW50VXNlcjogYm9vbGVhblxuICAgIGlzQXNzaXN0YW50OiBib29sZWFuXG4gICAgaXNGcm9udGVuZENhbmNlbGxlZD86IGJvb2xlYW5cbiAgICBhcHByb3ZhbD86IE1lc3NhZ2VJdGVtUHJvcHNbJ2FwcHJvdmFsJ11cbiAgICBpc0Vycm9yPzogYm9vbGVhblxuICAgIHNvdXJjZXM/OiBNZXNzYWdlSXRlbVByb3BzWydzb3VyY2VzJ11cbiAgICBzdWdnZXN0aW9ucz86IHN0cmluZ1tdIHwgbnVsbFxuICAgIGNyZWF0ZUFnZW50Rm9sbG93VXA/OiB7IGFnZW50SWQ6IHN0cmluZyB9IHwgbnVsbFxuICAgIGhhbmRsZUZlZWRiYWNrQ2xpY2s6IChmOiBGZWVkYmFjaykgPT4gdm9pZFxuICAgIGRpc2FibGVGZWVkYmFjazogRmVlZGJhY2sgfCBudWxsXG4gICAgaGFuZGxlU3VnZ2VzdGlvbkNsaWNrOiAobWVzc2FnZUlkOiBzdHJpbmcsIHN1Z2dlc3Rpb246IHN0cmluZykgPT4gdm9pZFxuICAgIHN1Z2dlc3Rpb25zRGlzYWJsZWQ/OiBib29sZWFuXG4gICAgbWVzc2FnZUlkOiBzdHJpbmdcbiAgICBpc0xhc3RNZXNzYWdlPzogYm9vbGVhblxuICB9KSA9PiB7XG4gICAgLy8gVGV4dG8gZGVsIHN0cmVhbTogc29sbyBzZSBsZWUgZGVsIHN0b3JlIGN1YW5kbyBlc3RlIG1lbnNhamUgZXMgZWxcbiAgICAvLyBxdWUgZXN0w6EgZW4gc3RyZWFtaW5nLiB1c2VTeW5jRXh0ZXJuYWxTdG9yZSBhw61zbGEgZWwgcmUtcmVuZGVyIGFcbiAgICAvLyBlc3RlIGNvbXBvbmVudGUsIHNpbiB0b2NhciBlbCByZXN0byBkZWwgw6FyYm9sLlxuICAgIGNvbnN0IHN0cmVhbWluZ1RleHQgPSB1c2VTdHJlYW1pbmdNZXNzYWdlKHByb3BzLmlzU3RyZWFtaW5nID8gcHJvcHMubWVzc2FnZUlkIDogbnVsbClcbiAgICBjb25zdCByYXdUZXh0ID0gcHJvcHMuaXNTdHJlYW1pbmcgPyBzdHJlYW1pbmdUZXh0IDogcHJvcHMubWVzc2FnZVxuICAgIC8vIFNtb290aCBzdHJlYW1pbmc6IGRlc2Fjb3BsYSBsYSBjYWRlbmNpYSBkZWwgYmFja2VuZCBkZWwgcmVuZGVyLlxuICAgIC8vIER1cmFudGUgZWwgc3RyZWFtaW5nIGxpYmVyYSBjaGFycyBhIHJpdG1vIGNvbnN0YW50ZSB2w61hIHJBRjsgY3VhbmRvXG4gICAgLy8gdGVybWluYSwgbXVlc3RyYSBlbCB0ZXh0byBmaW5hbCBhbCBpbnN0YW50ZSAoc2luIGFuaW1hY2nDs24gcmVzaWR1YWwpLlxuICAgIC8vIExvcyBkZWZhdWx0cyBkZWwgaG9vayBzZSBhanVzdGFyb24gZW1ww61yaWNhbWVudGUgZW4gc3RhZ2luZzsgYXVuIGFzw61cbiAgICAvLyBzZSBleHBvbmVuIGZsYWdzIGRlIHJ1bnRpbWUgKHdpbmRvdy4qKSBwYXJhIHBvZGVyIHR1bmVhciBzaW4gcmVjb21waWxhclxuICAgIC8vIHNpIGFsZ8O6biBiYWNrZW5kIHByZXNlbnRhIHVuYSBjYWRlbmNpYSBtdXkgZGlzdGludGEgZW4gcHJvZHVjY2nDs24uXG4gICAgLy8gICB3aW5kb3cuc3RyZWFtQWRhcHQgPSBmYWxzZSAgICAgIC8vIGRlc2FjdGl2YSBhZGFwdGFjacOzbiBhbCBiYWNrZW5kXG4gICAgLy8gICB3aW5kb3cuc3RyZWFtQnVmZmVyTXMgPSA2MDAgICAgIC8vIGNvbGNow7NuIG9iamV0aXZvIChtcylcbiAgICAvLyAgIHdpbmRvdy5zdHJlYW1MYWdNcyA9IDQ1MCAgICAgICAgLy8gbGFnIG3DoXhpbW8gYmFzZSAobXMpXG4gICAgLy8gICB3aW5kb3cuc3RyZWFtTWluQnVmZmVyID0gNzAgICAgIC8vIHBpc28gZGVsIGNvbGNow7NuIGVuIGNoYXJzXG4gICAgLy8gICB3aW5kb3cuc3RyZWFtV2FybXVwTXMgPSA0MDAgICAgIC8vIHdhcm11cCBpbmljaWFsIChtcylcbiAgICBjb25zdCB3aW5GbGFncyA9XG4gICAgICB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICA/ICh3aW5kb3cgYXMgdW5rbm93biBhcyB7XG4gICAgICAgICAgICBzdHJlYW1BZGFwdD86IGJvb2xlYW5cbiAgICAgICAgICAgIHN0cmVhbUJ1ZmZlck1zPzogbnVtYmVyXG4gICAgICAgICAgICBzdHJlYW1MYWdNcz86IG51bWJlclxuICAgICAgICAgICAgc3RyZWFtTWluQnVmZmVyPzogbnVtYmVyXG4gICAgICAgICAgICBzdHJlYW1XYXJtdXBNcz86IG51bWJlclxuICAgICAgICAgIH0pXG4gICAgICAgIDoge31cbiAgICBjb25zdCBkaXNwbGF5VGV4dCA9IHVzZVNtb290aFN0cmVhbVRleHQocmF3VGV4dCwge1xuICAgICAgZW5hYmxlZDogISFwcm9wcy5pc1N0cmVhbWluZyxcbiAgICAgIG1heENoYXJzUGVyRnJhbWU6IDI0LFxuICAgICAgc25hcFRvV29yZEJvdW5kYXJ5OiB0cnVlLFxuICAgICAgLi4uKHdpbkZsYWdzLnN0cmVhbUxhZ01zICE9IG51bGwgJiYgeyB0YXJnZXRMYWdNczogd2luRmxhZ3Muc3RyZWFtTGFnTXMgfSksXG4gICAgICAuLi4od2luRmxhZ3Muc3RyZWFtQWRhcHQgIT0gbnVsbCAmJiB7IGFkYXB0VG9CYWNrZW5kUmF0ZTogd2luRmxhZ3Muc3RyZWFtQWRhcHQgfSksXG4gICAgICAuLi4od2luRmxhZ3Muc3RyZWFtQnVmZmVyTXMgIT0gbnVsbCAmJiB7IHRhcmdldEJ1ZmZlck1zOiB3aW5GbGFncy5zdHJlYW1CdWZmZXJNcyB9KSxcbiAgICAgIC4uLih3aW5GbGFncy5zdHJlYW1NaW5CdWZmZXIgIT0gbnVsbCAmJiB7IG1pbkJ1ZmZlckNoYXJzOiB3aW5GbGFncy5zdHJlYW1NaW5CdWZmZXIgfSksXG4gICAgICAuLi4od2luRmxhZ3Muc3RyZWFtV2FybXVwTXMgIT0gbnVsbCAmJiB7IHdhcm11cE1zOiB3aW5GbGFncy5zdHJlYW1XYXJtdXBNcyB9KSxcbiAgICB9KVxuICAgIGNvbnN0IGNyZWF0ZUFnZW50QWN0aW9uc0FnZW50SWQgPSBwcm9wcy5jcmVhdGVBZ2VudEZvbGxvd1VwPy5hZ2VudElkXG5cbiAgICBpZiAoIWRpc3BsYXlUZXh0ICYmICFwcm9wcy5pc1N0cmVhbWluZykgcmV0dXJuIG51bGxcbiAgICBjb25zdCBoYXNNZW50aW9ucyA9IGhhc0lubGluZU1hcmtlcnMoZGlzcGxheVRleHQpXG4gICAgY29uc3QgbWVudGlvbk5vZGVzID0gaGFzTWVudGlvbnMgPyByZW5kZXJUZXh0V2l0aE1lbnRpb25zKGRpc3BsYXlUZXh0KSA6IG51bGxcbiAgICByZXR1cm4gKFxuICAgICAgPD5cbiAgICAgICAgPFNDQ0FJTWVzc2FnZVdyYXBwZXJcbiAgICAgICAgICBpc0N1cnJlbnRVc2VyPXtwcm9wcy5pc0N1cnJlbnRVc2VyfVxuICAgICAgICAgIGlzRnJvbnRlbmRDYW5jZWxsZWQ9e3Byb3BzLmlzRnJvbnRlbmRDYW5jZWxsZWR9XG4gICAgICAgICAgY2xhc3NOYW1lPXtnZXRFbnRpdHlMaW5rV3JhcHBlckNsYXNzTmFtZShkaXNwbGF5VGV4dCl9XG4gICAgICAgID5cbiAgICAgICAgICB7aGFzTWVudGlvbnMgJiYgbWVudGlvbk5vZGVzID8gKFxuICAgICAgICAgICAgLy8gU2kgaGF5IG1lbnRpb25zLCByZW5kZXJpemFyIGRpcmVjdGFtZW50ZSAoc2luIG1hcmtkb3duIGVuIGVsIG1pc21vIHDDoXJyYWZvKVxuICAgICAgICAgICAgPHNwYW4gc3R5bGU9e3sgZGlzcGxheTogJ2lubGluZScgfX0+e21lbnRpb25Ob2Rlc308L3NwYW4+XG4gICAgICAgICAgKSA6IChcbiAgICAgICAgICAgIC8vIFNpbiBtZW50aW9ucywgcGFzYXIgYSBTdHJlYW1kb3duIHBhcmEgbWFya2Rvd24gc3VwcG9ydFxuICAgICAgICAgICAgPFN0cmVhbWRvd25cbiAgICAgICAgICAgICAgcGx1Z2lucz17eyBjb2RlIH19XG4gICAgICAgICAgICAgIHJlaHlwZVBsdWdpbnM9e01BSUFfU1RSRUFNRE9XTl9SRUhZUEVfUExVR0lOU31cbiAgICAgICAgICAgICAgY29tcG9uZW50cz17eyBhOiBFbnRpdHlMaW5rQ3VzdG9tTGluayB9IGFzIFBhcmFtZXRlcnM8dHlwZW9mIFN0cmVhbWRvd24+WzBdWydjb21wb25lbnRzJ119XG4gICAgICAgICAgICAgIGxpbmtTYWZldHk9e3sgZW5hYmxlZDogZmFsc2UgfX1cbiAgICAgICAgICAgICAgaXNBbmltYXRpbmc9eyEhcHJvcHMuaXNTdHJlYW1pbmd9XG4gICAgICAgICAgICAgIHNoaWtpVGhlbWU9e1snZ2l0aHViLWxpZ2h0JywgJ2dpdGh1Yi1saWdodCddfVxuICAgICAgICAgICAgICBjb250cm9scz17eyB0YWJsZTogZmFsc2UsIGNvZGU6IGZhbHNlIH19XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIHtkaXNwbGF5VGV4dH1cbiAgICAgICAgICAgIDwvU3RyZWFtZG93bj5cbiAgICAgICAgICApfVxuICAgICAgICA8L1NDQ0FJTWVzc2FnZVdyYXBwZXI+XG4gICAgICAgIHtwcm9wcy5pc0Fzc2lzdGFudCAmJiAhcHJvcHMuaXNFcnJvciAmJiAhcHJvcHMuaXNGcm9udGVuZENhbmNlbGxlZCAmJiAhcHJvcHMuYXBwcm92YWwgJiYgIXByb3BzLmlzU3RyZWFtaW5nICYmIChcbiAgICAgICAgICA8TWVzc2FnZUZlZWRiYWNrXG4gICAgICAgICAgICBjb250ZW50PXtkaXNwbGF5VGV4dH1cbiAgICAgICAgICAgIHNvdXJjZXM9e3Byb3BzLnNvdXJjZXN9XG4gICAgICAgICAgICBoYW5kbGVGZWVkYmFjaz17cHJvcHMuaGFuZGxlRmVlZGJhY2tDbGlja31cbiAgICAgICAgICAgIGRpc2FibGVGZWVkYmFjaz17cHJvcHMuZGlzYWJsZUZlZWRiYWNrfVxuICAgICAgICAgIC8+XG4gICAgICAgICl9XG4gICAgICAgIHtwcm9wcy5pc0Fzc2lzdGFudCAmJlxuICAgICAgICAgICFwcm9wcy5pc0Zyb250ZW5kQ2FuY2VsbGVkICYmXG4gICAgICAgICAgIXByb3BzLmFwcHJvdmFsICYmXG4gICAgICAgICAgKCFwcm9wcy5pc0Vycm9yIHx8IHByb3BzLnN1Z2dlc3Rpb25zPy5sZW5ndGgpICYmIChcbiAgICAgICAgICAgIDxDaGF0QUlTdWdnZXN0aW9uc1xuICAgICAgICAgICAgICBzdWdnZXN0aW9ucz17cHJvcHMuc3VnZ2VzdGlvbnMgfHwgW119XG4gICAgICAgICAgICAgIG9uU2VsZWN0U3VnZ2VzdGlvbj17c3VnZ2VzdGlvbiA9PiBwcm9wcy5oYW5kbGVTdWdnZXN0aW9uQ2xpY2socHJvcHMubWVzc2FnZUlkLCBzdWdnZXN0aW9uKX1cbiAgICAgICAgICAgICAgZGlzYWJsZWQ9e3Byb3BzLnN1Z2dlc3Rpb25zRGlzYWJsZWR9XG4gICAgICAgICAgICAgIGhpZGRlbj17ISFwcm9wcy5pc1N0cmVhbWluZyB8fCAhcHJvcHMuaXNMYXN0TWVzc2FnZSB8fCAhIXByb3BzLnN1Z2dlc3Rpb25zRGlzYWJsZWR9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICl9XG4gICAgICAgIHtwcm9wcy5pc0Fzc2lzdGFudCAmJlxuICAgICAgICAgICFwcm9wcy5pc0Vycm9yICYmXG4gICAgICAgICAgIXByb3BzLmlzRnJvbnRlbmRDYW5jZWxsZWQgJiZcbiAgICAgICAgICAhcHJvcHMuYXBwcm92YWwgJiZcbiAgICAgICAgICAhIWNyZWF0ZUFnZW50QWN0aW9uc0FnZW50SWQgJiYgKFxuICAgICAgICAgICAgPENoYXRBSUNyZWF0ZUFnZW50QWN0aW9uc1xuICAgICAgICAgICAgICBhZ2VudElkPXtjcmVhdGVBZ2VudEFjdGlvbnNBZ2VudElkfVxuICAgICAgICAgICAgICBkaXNhYmxlZD17cHJvcHMuc3VnZ2VzdGlvbnNEaXNhYmxlZH1cbiAgICAgICAgICAgICAgaGlkZGVuPXshIXByb3BzLmlzU3RyZWFtaW5nIHx8ICFwcm9wcy5pc0xhc3RNZXNzYWdlIHx8ICEhcHJvcHMuc3VnZ2VzdGlvbnNEaXNhYmxlZH1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgKX1cbiAgICAgIDwvPlxuICAgIClcbiAgfVxuKVxuXG4vKiogQmxvcXVlIGRlIHRleHRvIGludGVyY2FsYWRvIGVuIGVsIHRpbWVsaW5lIGRlbCB0dXJubyAobWFya2Rvd24gKyBzbW9vdGggc3RyZWFtKS4gKi9cbmNvbnN0IFRpbWVsaW5lU2VnbWVudEJvZHkgPSBtZW1vKCh7IHRleHQsIGlzU3RyZWFtaW5nIH06IHsgdGV4dDogc3RyaW5nOyBpc1N0cmVhbWluZzogYm9vbGVhbiB9KSA9PiB7XG4gIGNvbnN0IHdpbkZsYWdzID1cbiAgICB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJ1xuICAgICAgPyAod2luZG93IGFzIHVua25vd24gYXMge1xuICAgICAgICAgIHN0cmVhbUFkYXB0PzogYm9vbGVhblxuICAgICAgICAgIHN0cmVhbUJ1ZmZlck1zPzogbnVtYmVyXG4gICAgICAgICAgc3RyZWFtTGFnTXM/OiBudW1iZXJcbiAgICAgICAgICBzdHJlYW1NaW5CdWZmZXI/OiBudW1iZXJcbiAgICAgICAgICBzdHJlYW1XYXJtdXBNcz86IG51bWJlclxuICAgICAgICB9KVxuICAgICAgOiB7fVxuICBjb25zdCBkaXNwbGF5VGV4dCA9IHVzZVNtb290aFN0cmVhbVRleHQodGV4dCwge1xuICAgIGVuYWJsZWQ6IGlzU3RyZWFtaW5nLFxuICAgIG1heENoYXJzUGVyRnJhbWU6IDI0LFxuICAgIHNuYXBUb1dvcmRCb3VuZGFyeTogdHJ1ZSxcbiAgICAuLi4od2luRmxhZ3Muc3RyZWFtTGFnTXMgIT0gbnVsbCAmJiB7IHRhcmdldExhZ01zOiB3aW5GbGFncy5zdHJlYW1MYWdNcyB9KSxcbiAgICAuLi4od2luRmxhZ3Muc3RyZWFtQWRhcHQgIT0gbnVsbCAmJiB7IGFkYXB0VG9CYWNrZW5kUmF0ZTogd2luRmxhZ3Muc3RyZWFtQWRhcHQgfSksXG4gICAgLi4uKHdpbkZsYWdzLnN0cmVhbUJ1ZmZlck1zICE9IG51bGwgJiYgeyB0YXJnZXRCdWZmZXJNczogd2luRmxhZ3Muc3RyZWFtQnVmZmVyTXMgfSksXG4gICAgLi4uKHdpbkZsYWdzLnN0cmVhbU1pbkJ1ZmZlciAhPSBudWxsICYmIHsgbWluQnVmZmVyQ2hhcnM6IHdpbkZsYWdzLnN0cmVhbU1pbkJ1ZmZlciB9KSxcbiAgICAuLi4od2luRmxhZ3Muc3RyZWFtV2FybXVwTXMgIT0gbnVsbCAmJiB7IHdhcm11cE1zOiB3aW5GbGFncy5zdHJlYW1XYXJtdXBNcyB9KSxcbiAgfSlcblxuICBpZiAoIWRpc3BsYXlUZXh0ICYmICFpc1N0cmVhbWluZykgcmV0dXJuIG51bGxcblxuICBjb25zdCBoYXNNZW50aW9ucyA9IGhhc0lubGluZU1hcmtlcnMoZGlzcGxheVRleHQpXG4gIGNvbnN0IG1lbnRpb25Ob2RlcyA9IGhhc01lbnRpb25zID8gcmVuZGVyVGV4dFdpdGhNZW50aW9ucyhkaXNwbGF5VGV4dCkgOiBudWxsXG5cbiAgcmV0dXJuIChcbiAgICA8U0NDQUlNZXNzYWdlV3JhcHBlciBpc0N1cnJlbnRVc2VyPXtmYWxzZX0gY2xhc3NOYW1lPXtnZXRFbnRpdHlMaW5rV3JhcHBlckNsYXNzTmFtZShkaXNwbGF5VGV4dCl9PlxuICAgICAge2hhc01lbnRpb25zICYmIG1lbnRpb25Ob2RlcyA/IChcbiAgICAgICAgPHNwYW4gc3R5bGU9e3sgZGlzcGxheTogJ2lubGluZScgfX0+e21lbnRpb25Ob2Rlc308L3NwYW4+XG4gICAgICApIDogKFxuICAgICAgICA8U3RyZWFtZG93blxuICAgICAgICAgIHBsdWdpbnM9e3sgY29kZSB9fVxuICAgICAgICAgIHJlaHlwZVBsdWdpbnM9e01BSUFfU1RSRUFNRE9XTl9SRUhZUEVfUExVR0lOU31cbiAgICAgICAgICBjb21wb25lbnRzPXt7IGE6IEVudGl0eUxpbmtDdXN0b21MaW5rIH0gYXMgUGFyYW1ldGVyczx0eXBlb2YgU3RyZWFtZG93bj5bMF1bJ2NvbXBvbmVudHMnXX1cbiAgICAgICAgICBsaW5rU2FmZXR5PXt7IGVuYWJsZWQ6IGZhbHNlIH19XG4gICAgICAgICAgaXNBbmltYXRpbmc9e2lzU3RyZWFtaW5nfVxuICAgICAgICAgIHNoaWtpVGhlbWU9e1snZ2l0aHViLWxpZ2h0JywgJ2dpdGh1Yi1saWdodCddfVxuICAgICAgICAgIGNvbnRyb2xzPXt7IHRhYmxlOiBmYWxzZSwgY29kZTogZmFsc2UgfX1cbiAgICAgICAgPlxuICAgICAgICAgIHtkaXNwbGF5VGV4dH1cbiAgICAgICAgPC9TdHJlYW1kb3duPlxuICAgICAgKX1cbiAgICA8L1NDQ0FJTWVzc2FnZVdyYXBwZXI+XG4gIClcbn0pXG5cblRpbWVsaW5lU2VnbWVudEJvZHkuZGlzcGxheU5hbWUgPSAnVGltZWxpbmVTZWdtZW50Qm9keSdcblxuY29uc3QgTWVzc2FnZUl0ZW0gPSBtZW1vKChwcm9wczogTWVzc2FnZUl0ZW1Qcm9wcykgPT4ge1xuICBjb25zdCB7XG4gICAgaWQsXG4gICAgdXNlcixcbiAgICBtZXNzYWdlLFxuICAgIGlzU3RyZWFtaW5nLFxuICAgIGlzRXJyb3IsXG4gICAgYXV0aFVzZXIsXG4gICAgb3B0aW9ucyxcbiAgICBpc0NoYW5nZVByb2plY3QsXG4gICAgaGFuZGxlU2VsZWN0T3B0aW9uLFxuICAgIGhhbmRsZVN1Z2dlc3Rpb25DbGljayxcbiAgICBoYW5kbGVGZWVkYmFjayxcbiAgICBoYW5kbGVBcHByb3ZhbERlY2lzaW9uLFxuICAgIGRpc2FibGVGZWVkYmFjayxcbiAgICByb2xlLFxuICAgIHNvdXJjZXMsXG4gICAgYXR0YWNobWVudHMsXG4gICAgYXBwcm92YWwsXG4gICAgYXBwcm92YWxTdGF0dXMsXG4gICAgc3VnZ2VzdGlvbnMsXG4gICAgY3JlYXRlQWdlbnRGb2xsb3dVcCxcbiAgICBoYXNTZWxlY3RlZFN1Z2dlc3Rpb24sXG4gICAgaXNMYXN0TWVzc2FnZSxcbiAgfSA9IHByb3BzXG5cbiAgY29uc3QgW3ByZXZpZXdBdHRhY2htZW50LCBzZXRQcmV2aWV3QXR0YWNobWVudF0gPSB1c2VTdGF0ZTxBdHRhY2htZW50RmlsZSB8IG51bGw+KG51bGwpXG4gIGNvbnN0IGlzQ3VycmVudFVzZXIgPSByb2xlID09PSBDaGF0SGlzdG9yeVJvbGUuVVNFUiB8fCB1c2VyLmlkID09PSBhdXRoVXNlci5pZC50b1N0cmluZygpXG4gIGNvbnN0IGlzQXNzaXN0YW50ID0gcm9sZSA9PT0gQ2hhdEhpc3RvcnlSb2xlLkFTU0lTVEFOVCB8fCB1c2VyLmlkID09PSAnYXNzaXN0YW50J1xuICAvLyBNaWVudHJhcyBlbCBhZ2VudGUgXCJwaWVuc2FcIiAoc3RyZWFtaW5nIHNpbiB0ZXh0bykgbm8gbW9udGFtb3MgZWwgTWVzc2FnZUl0ZW06XG4gIC8vIHVuIHBsYWNlaG9sZGVyIHZhY8OtbyBzdW1hcsOtYSBvdHJvIGdhcCBkZSAzNnB4IGVuY2ltYSBkZWwgaW5kaWNhZG9yIGRlIGFjdGl2aWRhZC5cbiAgY29uc3QgaXNTdHJlYW1pbmdQbGFjZWhvbGRlciA9IGlzU3RyZWFtaW5nUGxhY2Vob2xkZXJNZXNzYWdlSWQoaWQpXG4gIGNvbnN0IHN0cmVhbWluZ1RleHQgPSB1c2VTdHJlYW1pbmdNZXNzYWdlKGlzU3RyZWFtaW5nIHx8IGlzU3RyZWFtaW5nUGxhY2Vob2xkZXIgPyBpZCA6IG51bGwpXG4gIGNvbnN0IGlzQWN0aXZlU3RyZWFtaW5nID0gISFpc1N0cmVhbWluZyB8fCBpc1N0cmVhbWluZ1BsYWNlaG9sZGVyXG4gIGNvbnN0IGlzVGhpbmtpbmcgPSBpc0FjdGl2ZVN0cmVhbWluZyAmJiAhc3RyZWFtaW5nVGV4dFxuICBpZiAoaXNUaGlua2luZykge1xuICAgIHJldHVybiBudWxsXG4gIH1cbiAgY29uc3QgbWVzc2FnZUF0dGFjaG1lbnRzID1cbiAgICBhdHRhY2htZW50cyAmJiBhdHRhY2htZW50cy5sZW5ndGggPiAwXG4gICAgICA/IGF0dGFjaG1lbnRzXG4gICAgICA6ICFpc0Fzc2lzdGFudCAmJiBBcnJheS5pc0FycmF5KHNvdXJjZXMpXG4gICAgICAgID8gKHNvdXJjZXMgYXMgQXR0YWNobWVudEZpbGVbXSlcbiAgICAgICAgOiBbXVxuXG4gIGNvbnN0IGhhbmRsZUF0dGFjaG1lbnRDbGljayA9IChhdHRhY2htZW50OiBBdHRhY2htZW50RmlsZSkgPT4ge1xuICAgIC8vIFBlcm1pdGlyIHByZXZpc3VhbGl6YWNpw7NuIHNpIHRpZW5lIGFyY2hpdm8gbG9jYWwgbyBVUkxzIGRlbCBiYWNrZW5kXG4gICAgaWYgKFxuICAgICAgYXR0YWNobWVudC5maWxlIGluc3RhbmNlb2YgRmlsZSB8fFxuICAgICAgYXR0YWNobWVudC5vcmlnaW5hbEZpbGUgaW5zdGFuY2VvZiBGaWxlIHx8XG4gICAgICBhdHRhY2htZW50LnVybF90aHVtYm5haWwgfHxcbiAgICAgIGF0dGFjaG1lbnQudXJsX29yaWdpbmFsIHx8XG4gICAgICBhdHRhY2htZW50LnVybF9maWxlXG4gICAgKSB7XG4gICAgICBzZXRQcmV2aWV3QXR0YWNobWVudChhdHRhY2htZW50KVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGhhbmRsZUNsb3NlUHJldmlldyA9ICgpID0+IHtcbiAgICBzZXRQcmV2aWV3QXR0YWNobWVudChudWxsKVxuICB9XG5cbiAgY29uc3QgaGFuZGxlQXR0YWNobWVudERvd25sb2FkID0gYXN5bmMgKGF0dGFjaG1lbnQ6IEF0dGFjaG1lbnRGaWxlKSA9PiB7XG4gICAgY29uc3QgZXh0ZW5zaW9uID0gYXR0YWNobWVudC5uYW1lLmluY2x1ZGVzKCcuJykgPyAnJyA6IGAuJHthdHRhY2htZW50LnR5cGV9YFxuICAgIGNvbnN0IGZpbGVOYW1lID0gYCR7YXR0YWNobWVudC5uYW1lfSR7ZXh0ZW5zaW9ufWBcbiAgICBjb25zdCBmaWxlVXJsID0gYXR0YWNobWVudC51cmxfb3JpZ2luYWwgfHwgYXR0YWNobWVudC51cmxfZmlsZSB8fCBhdHRhY2htZW50LnVybF90aHVtYm5haWxcblxuICAgIHRyeSB7XG4gICAgICBsZXQgYmxvYlVybDogc3RyaW5nIHwgbnVsbCA9IG51bGxcblxuICAgICAgaWYgKGZpbGVVcmwpIHtcbiAgICAgICAgY29uc3QgZG93bmxvYWRlZEZpbGUgPSBhd2FpdCBkb3dubG9hZEZpbGVGcm9tVXJsKGZpbGVVcmwsIGZpbGVOYW1lLCBhdHRhY2htZW50LnR5cGUpXG4gICAgICAgIGJsb2JVcmwgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKGRvd25sb2FkZWRGaWxlKVxuICAgICAgfSBlbHNlIGlmIChhdHRhY2htZW50LmZpbGUgaW5zdGFuY2VvZiBGaWxlKSB7XG4gICAgICAgIGJsb2JVcmwgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKGF0dGFjaG1lbnQuZmlsZSlcbiAgICAgIH1cblxuICAgICAgaWYgKCFibG9iVXJsKSByZXR1cm5cblxuICAgICAgY29uc3QgbGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKVxuICAgICAgbGluay5ocmVmID0gYmxvYlVybFxuICAgICAgbGluay5kb3dubG9hZCA9IGZpbGVOYW1lXG4gICAgICBsaW5rLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSdcbiAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQobGluaylcbiAgICAgIGxpbmsuY2xpY2soKVxuXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChsaW5rKVxuICAgICAgICBVUkwucmV2b2tlT2JqZWN0VVJMKGJsb2JVcmwpXG4gICAgICB9LCAxMDApXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0ZhaWxlZCB0byBkb3dubG9hZCBhdHRhY2htZW50JywgZXJyb3IpXG4gICAgfVxuICB9XG5cbiAgaWYgKGlzQ2hhbmdlUHJvamVjdCAmJiBvcHRpb25zKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxNZXNzYWdlV3JhcHBlciBrZXk9e2lkfSBpc0N1cnJlbnRVc2VyPXtpc0N1cnJlbnRVc2VyfSBkYXRhLW1lc3NhZ2UtaWQ9e2lkfSBoYXNGZWVkYmFjaz17ZmFsc2V9PlxuICAgICAgICA8U0NNZXNzYWdlSXRlbVdyYXBwZXIgJGlzQXNzaXN0YW50PXtpc0Fzc2lzdGFudH0+XG4gICAgICAgICAge2lzQXNzaXN0YW50ICYmICFpc1RoaW5raW5nICYmIDxBc3Npc3RhbnRNZXNzYWdlSGVhZGVyIC8+fVxuICAgICAgICAgIDxNZXNzYWdlQ29udGVudFdyYXBwZXJcbiAgICAgICAgICAgIGlzQ2hhbmdlUHJvamVjdD17aXNDaGFuZ2VQcm9qZWN0fVxuICAgICAgICAgICAgbWVzc2FnZT17bWVzc2FnZX1cbiAgICAgICAgICAgIGlzQ3VycmVudFVzZXI9e2lzQ3VycmVudFVzZXJ9XG4gICAgICAgICAgICBpc0Vycm9yPXtpc0Vycm9yfVxuICAgICAgICAgICAgbWVzc2FnZUV4dHJhQ29udGVudD17PE1lc3NhZ2VPcHRpb25zIG9wdGlvbnM9e29wdGlvbnMgYXMgYW55fSBoYW5kbGVTZWxlY3RPcHRpb249e2hhbmRsZVNlbGVjdE9wdGlvbn0gLz59XG4gICAgICAgICAgLz5cbiAgICAgICAgPC9TQ01lc3NhZ2VJdGVtV3JhcHBlcj5cbiAgICAgIDwvTWVzc2FnZVdyYXBwZXI+XG4gICAgKVxuICB9XG5cbiAgY29uc3QgaGFuZGxlRmVlZGJhY2tDbGljayA9IChmZWVkYmFjazogRmVlZGJhY2spID0+IHtcbiAgICBjb25zdCBzZXNzaW9uSWQgPSBpZFxuICAgICAgLnNwbGl0KCctJylcbiAgICAgIC5maWx0ZXIocXVlc3Rpb25JZCA9PiBxdWVzdGlvbklkICE9PSAnYW5zd2VyJylcbiAgICAgIC5qb2luKCctJylcbiAgICBoYW5kbGVGZWVkYmFjaz8uKGZlZWRiYWNrLCBzZXNzaW9uSWQpXG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxTQ01lc3NhZ2VJdGVtV3JhcHBlciAkaXNBc3Npc3RhbnQ9e2lzQXNzaXN0YW50fT5cbiAgICAgIHtpc0Fzc2lzdGFudCAmJiAhaXNUaGlua2luZyAmJiA8QXNzaXN0YW50TWVzc2FnZUhlYWRlciAvPn1cbiAgICAgIDxTQ01lc3NhZ2VJdGVtSW5uZXI+XG4gICAgICAgIHshIW1lc3NhZ2VBdHRhY2htZW50cy5sZW5ndGggJiYgKFxuICAgICAgICAgIDxTQ0F0dGFjaG1lbnRzUm93ICRpc0Fzc2lzdGFudD17aXNBc3Npc3RhbnR9PlxuICAgICAgICAgICAge21lc3NhZ2VBdHRhY2htZW50cy5tYXAoKGF0dGFjaG1lbnQsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICAgIC8vIERldGVjdGFyIHNpIGVzIHVuIGFyY2hpdm8gZGUgYXVkaW9cbiAgICAgICAgICAgICAgY29uc3QgYXR0YWNobWVudFR5cGUgPSBhdHRhY2htZW50Py50eXBlPy50b0xvd2VyQ2FzZSgpIHx8ICcnXG4gICAgICAgICAgICAgIGNvbnN0IGF0dGFjaG1lbnROYW1lID0gYXR0YWNobWVudD8ubmFtZT8udG9Mb3dlckNhc2UoKSB8fCAnJ1xuICAgICAgICAgICAgICBjb25zdCBpc0F1ZGlvRmlsZSA9XG4gICAgICAgICAgICAgICAgYXR0YWNobWVudFR5cGUuc3RhcnRzV2l0aCgnYXVkaW8vJykgfHxcbiAgICAgICAgICAgICAgICBbJ2ZsYWMnLCAnbTRhJywgJ21wMycsICdtcDQnLCAnb2dhJywgJ29nZycsICd3YXYnLCAnd2VibSddLmluY2x1ZGVzKGF0dGFjaG1lbnRUeXBlKSB8fFxuICAgICAgICAgICAgICAgIFsnLmZsYWMnLCAnLm00YScsICcubXAzJywgJy5tcDQnLCAnLm9nYScsICcub2dnJywgJy53YXYnLCAnLndlYm0nXS5zb21lKGV4dCA9PlxuICAgICAgICAgICAgICAgICAgYXR0YWNobWVudE5hbWUuZW5kc1dpdGgoZXh0KVxuICAgICAgICAgICAgICAgIClcblxuICAgICAgICAgICAgICBpZiAoaXNBdWRpb0ZpbGUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gPEF0dGFjaG1lbnRDYXJkQXVkaW8ga2V5PXtgJHthdHRhY2htZW50LmlkfS0ke2F0dGFjaG1lbnQubmFtZX1gfSBhdHRhY2htZW50PXthdHRhY2htZW50fSAvPlxuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICA8QXR0YWNobWVudENhcmRcbiAgICAgICAgICAgICAgICAgIGtleT17YCR7YXR0YWNobWVudC5pZH0tJHthdHRhY2htZW50Lm5hbWV9YH1cbiAgICAgICAgICAgICAgICAgIGF0dGFjaG1lbnQ9e2F0dGFjaG1lbnR9XG4gICAgICAgICAgICAgICAgICBwb3NpdGlvbkluZGV4PXtpbmRleH1cbiAgICAgICAgICAgICAgICAgIG9uRG93bmxvYWQ9eygpID0+IGhhbmRsZUF0dGFjaG1lbnREb3dubG9hZChhdHRhY2htZW50KX1cbiAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IGhhbmRsZUF0dGFjaG1lbnRDbGljayhhdHRhY2htZW50KX1cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9KX1cbiAgICAgICAgICA8L1NDQXR0YWNobWVudHNSb3c+XG4gICAgICAgICl9XG4gICAgICAgIHsoISFtZXNzYWdlIHx8IGlzQWN0aXZlU3RyZWFtaW5nKSAmJiAhKGlzQXNzaXN0YW50ICYmICEhbWVzc2FnZUF0dGFjaG1lbnRzLmxlbmd0aCkgJiYgKFxuICAgICAgICAgIDxTdHJlYW1pbmdNZXNzYWdlQm9keVxuICAgICAgICAgICAgbWVzc2FnZT17bWVzc2FnZSA/PyAnJ31cbiAgICAgICAgICAgIGlzU3RyZWFtaW5nPXtpc0FjdGl2ZVN0cmVhbWluZ31cbiAgICAgICAgICAgIGlzQ3VycmVudFVzZXI9e2lzQ3VycmVudFVzZXJ9XG4gICAgICAgICAgICBpc0Fzc2lzdGFudD17aXNBc3Npc3RhbnR9XG4gICAgICAgICAgICBpc0Zyb250ZW5kQ2FuY2VsbGVkPXtwcm9wcy5pc0Zyb250ZW5kQ2FuY2VsbGVkfVxuICAgICAgICAgICAgYXBwcm92YWw9e2FwcHJvdmFsfVxuICAgICAgICAgICAgaXNFcnJvcj17aXNFcnJvcn1cbiAgICAgICAgICAgIHNvdXJjZXM9e3NvdXJjZXN9XG4gICAgICAgICAgICBzdWdnZXN0aW9ucz17c3VnZ2VzdGlvbnN9XG4gICAgICAgICAgICBjcmVhdGVBZ2VudEZvbGxvd1VwPXtjcmVhdGVBZ2VudEZvbGxvd1VwfVxuICAgICAgICAgICAgaGFuZGxlRmVlZGJhY2tDbGljaz17aGFuZGxlRmVlZGJhY2tDbGlja31cbiAgICAgICAgICAgIGRpc2FibGVGZWVkYmFjaz17ZGlzYWJsZUZlZWRiYWNrID8/IG51bGx9XG4gICAgICAgICAgICBoYW5kbGVTdWdnZXN0aW9uQ2xpY2s9e2hhbmRsZVN1Z2dlc3Rpb25DbGlja31cbiAgICAgICAgICAgIHN1Z2dlc3Rpb25zRGlzYWJsZWQ9e2lzQWN0aXZlU3RyZWFtaW5nIHx8ICEhaGFzU2VsZWN0ZWRTdWdnZXN0aW9ufVxuICAgICAgICAgICAgbWVzc2FnZUlkPXtpZH1cbiAgICAgICAgICAgIGlzTGFzdE1lc3NhZ2U9e2lzTGFzdE1lc3NhZ2V9XG4gICAgICAgICAgLz5cbiAgICAgICAgKX1cbiAgICAgICAge2FwcHJvdmFsICYmIGFwcHJvdmFsLnBlbmRpbmdfYWN0aW9ucyAmJiAoXG4gICAgICAgICAgPFNDQXBwcm92YWxBY3Rpb25zQ29sdW1uPlxuICAgICAgICAgICAgPEFwcHJvdmFsQm94XG4gICAgICAgICAgICAgIGFjdGlvbnM9e2FwcHJvdmFsLnBlbmRpbmdfYWN0aW9uc31cbiAgICAgICAgICAgICAgc3RhdHVzPXthcHByb3ZhbFN0YXR1c31cbiAgICAgICAgICAgICAgb25BcHByb3ZlPXt0aHJlYWRJZHMgPT4gaGFuZGxlQXBwcm92YWxEZWNpc2lvbih0aHJlYWRJZHMsICdhcHByb3ZlJyl9XG4gICAgICAgICAgICAgIG9uUmVqZWN0PXt0aHJlYWRJZHMgPT4gaGFuZGxlQXBwcm92YWxEZWNpc2lvbih0aHJlYWRJZHMsICdyZWplY3QnKX1cbiAgICAgICAgICAgICAgaXNQcm9qZWN0RGVsZXRlZD17cHJvcHMucHJvamVjdE1ldGFkYXRhPy5pc19kZWxldGVkID09PSB0cnVlfVxuICAgICAgICAgICAgICBpc0V4cGFuZGVkPXtwcm9wcy5leHBhbmRlZH1cbiAgICAgICAgICAgICAgaGl0bEluc3RhbmNlSWQ9e2FwcHJvdmFsLm9yaWdpbmFsX3RocmVhZF9pZH1cbiAgICAgICAgICAgICAgd2FybmluZ01lc3NhZ2U9e2FwcHJvdmFsLndhcm5pbmdfbWVzc2FnZX1cbiAgICAgICAgICAgICAgbWFudWFsQXBwcm92YWxEZXRlY3RlZD17YXBwcm92YWwubWFudWFsX2FwcHJvdmFsX2RldGVjdGVkfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L1NDQXBwcm92YWxBY3Rpb25zQ29sdW1uPlxuICAgICAgICApfVxuICAgICAgPC9TQ01lc3NhZ2VJdGVtSW5uZXI+XG4gICAgICA8QXR0YWNobWVudFByZXZpZXdNb2RhbFxuICAgICAgICBpc09wZW49eyEhcHJldmlld0F0dGFjaG1lbnR9XG4gICAgICAgIG9uQ2xvc2U9e2hhbmRsZUNsb3NlUHJldmlld31cbiAgICAgICAgYXR0YWNobWVudD17cHJldmlld0F0dGFjaG1lbnR9XG4gICAgICAvPlxuICAgIDwvU0NNZXNzYWdlSXRlbVdyYXBwZXI+XG4gIClcbn0pXG5cbmNvbnN0IENoYXRBSU1lc3NhZ2VzSW5uZXIgPSAoe1xuICB1c2VySW5pdGlhbE1lc3NhZ2UsXG4gIGluaXRpYWxDaGF0SWQsXG4gIG9uRXJyb3IsXG4gIG9uU2VuZE1lc3NhZ2VSZWFkeSxcbiAgb25TY3JvbGxUb0JvdHRvbSxcbiAgYXR0YWNobWVudHMsXG4gIGFnZW50cyxcbiAgZXhwYW5kZWQsXG59OiBDaGF0QUlNZXNzYWdlc1Byb3BzKSA9PiB7XG4gIGNvbnN0IHsgdCB9ID0gdXNlVCgpXG4gIGNvbnN0IHsgaXNXZWJTZWFyY2hBY3RpdmUsIGlzRGVlcFNlYXJjaEFjdGl2ZSwgYWdlbnQgfSA9IHVzZUdsb2JhbENvbnRleHQoKVxuICBjb25zdCBldmVudCA9IHVzZUV2ZW50KClcbiAgY29uc3QgYXV0aFVzZXIgPSB1c2VVc2VyKClcbiAgY29uc3QgbWVzc2FnZXNSZWYgPSB1c2VSZWY8SFRNTERpdkVsZW1lbnQ+KG51bGwpXG4gIGNvbnN0IGNoYXRJbml0aWFsaXplZFJlZiA9IHVzZVJlZihmYWxzZSlcbiAgY29uc3QgaXNMb2FkaW5nTW9yZVJlZiA9IHVzZVJlZihmYWxzZSlcbiAgY29uc3QgdXNlclNjcm9sbGluZ1JlZiA9IHVzZVJlZihmYWxzZSlcbiAgY29uc3Qgc2Nyb2xsVGhyZXNob2xkUmVmID0gdXNlUmVmKDM5KVxuICBjb25zdCBsYXN0U2Nyb2xsVG9wUmVmID0gdXNlUmVmKDApXG4gIGNvbnN0IHNob3dTY3JvbGxUb0JvdHRvbVJlZiA9IHVzZVJlZihmYWxzZSlcbiAgY29uc3Qgc2Nyb2xsUmFmUmVmID0gdXNlUmVmPG51bWJlciB8IG51bGw+KG51bGwpXG4gIGNvbnN0IFtzaG93U2Nyb2xsVG9Cb3R0b20sIHNldFNob3dTY3JvbGxUb0JvdHRvbV0gPSB1c2VTdGF0ZShmYWxzZSlcbiAgY29uc3QgW3NlbGVjdGVkU3VnZ2VzdGlvbk1lc3NhZ2VJZHMsIHNldFNlbGVjdGVkU3VnZ2VzdGlvbk1lc3NhZ2VJZHNdID0gdXNlU3RhdGU8UmVjb3JkPHN0cmluZywgYm9vbGVhbj4+KHt9KVxuXG4gIGNvbnN0IHtcbiAgICBtZXNzYWdlcyxcbiAgICBsb2FkaW5nTWVzc2FnZXMsXG4gICAgaXNMb2FkaW5nTW9yZU1lc3NhZ2VzLFxuICAgIHdhaXRpbmdSZXNwb25zZSxcbiAgICBpc1dyaXRpbmcsXG4gICAgbG9hZGluZ01lc3NhZ2UsXG4gICAgc3RyZWFtQWN0aXZpdHksXG4gICAgYWN0aXZlTG9hZGluZ3MsXG4gICAgc2VuZE1lc3NhZ2UsXG4gICAgY2hhbmdlUHJvamVjdCxcbiAgICBoYW5kbGVGZWVkYmFjayxcbiAgICBoYW5kbGVBcHByb3ZhbERlY2lzaW9uLFxuICAgIGluaXRpYWxpemVDaGF0LFxuICAgIGhhbmRsZVNjcm9sbCxcbiAgICBzdG9wR2VuZXJhdGlvbixcbiAgfSA9IHVzZUNoYXRNYW5hZ2VyKHtcbiAgICBjaGF0SWQ6IGluaXRpYWxDaGF0SWQgfHwgdW5kZWZpbmVkLFxuICAgIHVzZXJJbml0aWFsTWVzc2FnZSxcbiAgICBvbkVycm9yLFxuICAgIGF0dGFjaG1lbnRzLFxuICAgIGFnZW50cyxcbiAgfSlcblxuICBjb25zdCBoYW5kbGVTZWxlY3RPcHRpb24gPSB1c2VDYWxsYmFjayhcbiAgICAob3B0aW9uOiBQcm9qZWN0KSA9PiB7XG4gICAgICBjaGFuZ2VQcm9qZWN0KG9wdGlvbilcbiAgICB9LFxuICAgIFtjaGFuZ2VQcm9qZWN0XVxuICApXG5cbiAgY29uc3QgaGFuZGxlU3VnZ2VzdGlvbkNsaWNrID0gdXNlQ2FsbGJhY2soXG4gICAgYXN5bmMgKG1lc3NhZ2VJZDogc3RyaW5nLCBzdWdnZXN0aW9uOiBzdHJpbmcpID0+IHtcbiAgICAgIGlmICghc3VnZ2VzdGlvbj8udHJpbSgpKSByZXR1cm5cbiAgICAgIGlmIChzZWxlY3RlZFN1Z2dlc3Rpb25NZXNzYWdlSWRzW21lc3NhZ2VJZF0pIHJldHVyblxuXG4gICAgICBjb25zdCB0YXJnZXRNZXNzYWdlID0gbWVzc2FnZXMuZmluZChtc2cgPT4gbXNnLmlkID09PSBtZXNzYWdlSWQpXG4gICAgICBjb25zdCBpc1JldHJ5U3VnZ2VzdGlvbiA9ICEhdGFyZ2V0TWVzc2FnZT8uaXNFcnJvciAmJiBzdWdnZXN0aW9uID09PSB0KCdjaGF0LnJldHJ5JylcblxuICAgICAgbGV0IHN0YXJ0ZWQgPSBmYWxzZVxuICAgICAgaWYgKGlzUmV0cnlTdWdnZXN0aW9uKSB7XG4gICAgICAgIGNvbnN0IGxhc3RVc2VyTWVzc2FnZSA9IG1lc3NhZ2VzXG4gICAgICAgICAgLmZpbHRlcihtc2cgPT4gbXNnLnJvbGUgPT09IENoYXRIaXN0b3J5Um9sZS5VU0VSIHx8IG1zZy51c2VyLmlkID09PSBhdXRoVXNlci5pZC50b1N0cmluZygpKVxuICAgICAgICAgIC5hdCgtMSlcbiAgICAgICAgaWYgKGxhc3RVc2VyTWVzc2FnZT8ubWVzc2FnZSkge1xuICAgICAgICAgIGNvbnN0IHJldHJ5QXR0YWNobWVudHMgPSBBcnJheS5pc0FycmF5KGxhc3RVc2VyTWVzc2FnZS5hdHRhY2htZW50cylcbiAgICAgICAgICAgID8gbGFzdFVzZXJNZXNzYWdlLmF0dGFjaG1lbnRzXG4gICAgICAgICAgICA6IEFycmF5LmlzQXJyYXkobGFzdFVzZXJNZXNzYWdlLnNvdXJjZXMpXG4gICAgICAgICAgICAgID8gbGFzdFVzZXJNZXNzYWdlLnNvdXJjZXNcbiAgICAgICAgICAgICAgOiBbXVxuICAgICAgICAgIHN0YXJ0ZWQgPSAoYXdhaXQgc2VuZE1lc3NhZ2UobGFzdFVzZXJNZXNzYWdlLm1lc3NhZ2UsIHJldHJ5QXR0YWNobWVudHMpKSA/PyBmYWxzZVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzdGFydGVkID0gKGF3YWl0IHNlbmRNZXNzYWdlKHN1Z2dlc3Rpb24pKSA/PyBmYWxzZVxuICAgICAgfVxuXG4gICAgICBpZiAoIXN0YXJ0ZWQpIHJldHVyblxuXG4gICAgICBjb25zdCBpc01hcmtldHBsYWNlR2xvYmFsQWdlbnQgPSBpc01haWFrZXJBZ2VudChhZ2VudClcbiAgICAgIGV2ZW50KEVWRU5UUy5haUNoYXRTdWdnZXN0ZWRBbnN3ZXIsIHtcbiAgICAgICAgYWdlbnRfdHlwZTogaXNNYXJrZXRwbGFjZUdsb2JhbEFnZW50ID8gJ21hcmtldHBsYWNlJyA6IGFnZW50Py50eXBlLFxuICAgICAgfSlcbiAgICAgIHNldFNlbGVjdGVkU3VnZ2VzdGlvbk1lc3NhZ2VJZHMocHJldiA9PiAoeyAuLi5wcmV2LCBbbWVzc2FnZUlkXTogdHJ1ZSB9KSlcbiAgICB9LFxuICAgIFtcbiAgICAgIHNlbmRNZXNzYWdlLFxuICAgICAgc2VsZWN0ZWRTdWdnZXN0aW9uTWVzc2FnZUlkcyxcbiAgICAgIGV2ZW50LFxuICAgICAgYWdlbnQ/LmVudGl0eSxcbiAgICAgIGFnZW50Py5uYW1lLFxuICAgICAgYWdlbnQ/LnR5cGUsXG4gICAgICBtZXNzYWdlcyxcbiAgICAgIHQsXG4gICAgICBhdXRoVXNlci5pZCxcbiAgICBdXG4gIClcblxuICAvKipcbiAgICogQWN0dWFsaXphIGVsIGVzdGFkbyBkZWwgYm90w7NuIFwic2Nyb2xsIHRvIGJvdHRvbVwiIGNvbXBhcmFuZG8gbGEgcG9zaWNpw7NuXG4gICAqIGFjdHVhbCBkZWwgc2Nyb2xsIGNvbiBlbCBmb25kby4gVXNhIHVuIHJlZiBwYXJhIGV2aXRhciBgc2V0U3RhdGVgIGN1YW5kb1xuICAgKiBlbCB2YWxvciBubyBjYW1iaWEuXG4gICAqL1xuICBjb25zdCB1cGRhdGVTY3JvbGxCb3R0b21WaXNpYmlsaXR5ID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGNvbnN0IGVsID0gbWVzc2FnZXNSZWYuY3VycmVudFxuICAgIGlmICghZWwpIHJldHVyblxuICAgIGNvbnN0IHsgc2Nyb2xsVG9wLCBzY3JvbGxIZWlnaHQsIGNsaWVudEhlaWdodCB9ID0gZWxcbiAgICBjb25zdCBkaXN0YW5jZUZyb21Cb3R0b20gPSBzY3JvbGxIZWlnaHQgLSBzY3JvbGxUb3AgLSBjbGllbnRIZWlnaHRcbiAgICBjb25zdCBzaG91bGRTaG93ID0gZGlzdGFuY2VGcm9tQm90dG9tID4gNTBcbiAgICBpZiAoc2hvd1Njcm9sbFRvQm90dG9tUmVmLmN1cnJlbnQgIT09IHNob3VsZFNob3cpIHtcbiAgICAgIHNob3dTY3JvbGxUb0JvdHRvbVJlZi5jdXJyZW50ID0gc2hvdWxkU2hvd1xuICAgICAgc2V0U2hvd1Njcm9sbFRvQm90dG9tKHNob3VsZFNob3cpXG4gICAgfVxuICB9LCBbXSlcblxuICAvKipcbiAgICogU2Nyb2xsIGlubWVkaWF0byBhbCBmb25kbyAoZGVudHJvIGRlIHJBRiBwYXJhIGNvb3JkaW5hciBjb24gZWwgcGFpbnQpXG4gICAqIHkgYWN0dWFsaXphIGxhIHZpc2liaWxpZGFkIGRlbCBib3TDs24uIFJlc3BldGEgYHNraXBJZlVzZXJTY3JvbGxpbmdgIHBhcmFcbiAgICogbm8gc29icmVzY3JpYmlyIGVsIHNjcm9sbCBtYW51YWwgZGVsIHVzdWFyaW8gZHVyYW50ZSBlbCBzdHJlYW1pbmcuXG4gICAqL1xuICBjb25zdCBzY3JvbGxUb0JvdHRvbVJhZiA9IHVzZUNhbGxiYWNrKFxuICAgIChvcHRzOiB7IHNraXBJZlVzZXJTY3JvbGxpbmc/OiBib29sZWFuOyBkZWxheU1zPzogbnVtYmVyIH0gPSB7fSkgPT4ge1xuICAgICAgY29uc3QgeyBza2lwSWZVc2VyU2Nyb2xsaW5nID0gZmFsc2UsIGRlbGF5TXMgPSAwIH0gPSBvcHRzXG4gICAgICBjb25zdCBydW4gPSAoKSA9PiB7XG4gICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICAgICAgY29uc3QgZWwgPSBtZXNzYWdlc1JlZi5jdXJyZW50XG4gICAgICAgICAgaWYgKCFlbCkgcmV0dXJuXG4gICAgICAgICAgaWYgKHNraXBJZlVzZXJTY3JvbGxpbmcgJiYgdXNlclNjcm9sbGluZ1JlZi5jdXJyZW50KSByZXR1cm5cbiAgICAgICAgICBlbC5zY3JvbGxUb3AgPSBlbC5zY3JvbGxIZWlnaHRcbiAgICAgICAgICB1cGRhdGVTY3JvbGxCb3R0b21WaXNpYmlsaXR5KClcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICAgIGlmIChkZWxheU1zID4gMCkgc2V0VGltZW91dChydW4sIGRlbGF5TXMpXG4gICAgICBlbHNlIHJ1bigpXG4gICAgfSxcbiAgICBbdXBkYXRlU2Nyb2xsQm90dG9tVmlzaWJpbGl0eV1cbiAgKVxuXG4gIGNvbnN0IGhhbmRsZUNsaWNrU2Nyb2xsVG9Cb3R0b20gPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgaWYgKCFtZXNzYWdlc1JlZi5jdXJyZW50KSByZXR1cm5cbiAgICBtZXNzYWdlc1JlZi5jdXJyZW50LnNjcm9sbFRvKHtcbiAgICAgIHRvcDogbWVzc2FnZXNSZWYuY3VycmVudC5zY3JvbGxIZWlnaHQsXG4gICAgICBiZWhhdmlvcjogJ3Ntb290aCcsXG4gICAgfSlcbiAgICAvLyBEYXIgdGllbXBvIGFsIHNtb290aC1zY3JvbGwgYW50ZXMgZGUgcmVjYWxjdWxhciBsYSB2aXNpYmlsaWRhZCBkZWwgYm90w7NuLlxuICAgIHNldFRpbWVvdXQodXBkYXRlU2Nyb2xsQm90dG9tVmlzaWJpbGl0eSwgNTAwKVxuICB9LCBbdXBkYXRlU2Nyb2xsQm90dG9tVmlzaWJpbGl0eV0pXG5cbiAgLy8gQWwgZGVjaWRpciBlbiBlbCBBcHByb3ZhbEJveDogZWwgYm94IGNvbGFwc2EgKGJvdG9uZXMgLT4gYmFkZ2UpIHkgZWwgc3RyZWFtXG4gIC8vIGNvbnRpbsO6YSBhYmFqby4gUmVhY3RpdmFyIGVsIGF1dG8tc2Nyb2xsIHkgc2VndWlyIGVsIGZvbmRvIHBhcmEgcXVlIGxhIHZpc3RhXG4gIC8vIG5vIHF1ZWRlIGF0csOhcyAoZXZpdGEgcXVlIGFwYXJlemNhIGxhIGZsZWNoYSBkZSBzY3JvbGwtdG8tYm90dG9tKS5cbiAgY29uc3QgaGFuZGxlQXBwcm92YWxEZWNpc2lvbldpdGhTY3JvbGwgPSB1c2VDYWxsYmFjayhcbiAgICAoLi4uYXJnczogUGFyYW1ldGVyczx0eXBlb2YgaGFuZGxlQXBwcm92YWxEZWNpc2lvbj4pID0+IHtcbiAgICAgIHVzZXJTY3JvbGxpbmdSZWYuY3VycmVudCA9IGZhbHNlXG4gICAgICBzY3JvbGxUaHJlc2hvbGRSZWYuY3VycmVudCA9IDM5XG4gICAgICBoYW5kbGVBcHByb3ZhbERlY2lzaW9uKC4uLmFyZ3MpXG4gICAgICBzY3JvbGxUb0JvdHRvbVJhZigpXG4gICAgICBzY3JvbGxUb0JvdHRvbVJhZih7IGRlbGF5TXM6IDEwMCB9KVxuICAgIH0sXG4gICAgW2hhbmRsZUFwcHJvdmFsRGVjaXNpb24sIHNjcm9sbFRvQm90dG9tUmFmXVxuICApXG5cbiAgY29uc3QgaGFuZGxlU2Nyb2xsVG9Cb3R0b20gPSB1c2VDYWxsYmFjayhcbiAgICAoZTogUmVhY3QuVUlFdmVudDxIVE1MRGl2RWxlbWVudD4pID0+IHtcbiAgICAgIGNvbnN0IGNvbnRhaW5lciA9IGUuY3VycmVudFRhcmdldFxuXG4gICAgICBpZiAoc2Nyb2xsUmFmUmVmLmN1cnJlbnQgIT09IG51bGwpIHtcbiAgICAgICAgY2FuY2VsQW5pbWF0aW9uRnJhbWUoc2Nyb2xsUmFmUmVmLmN1cnJlbnQpXG4gICAgICB9XG5cbiAgICAgIHNjcm9sbFJhZlJlZi5jdXJyZW50ID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcbiAgICAgICAgc2Nyb2xsUmFmUmVmLmN1cnJlbnQgPSBudWxsXG4gICAgICAgIGNvbnN0IHsgc2Nyb2xsVG9wLCBzY3JvbGxIZWlnaHQsIGNsaWVudEhlaWdodCB9ID0gY29udGFpbmVyXG5cbiAgICAgICAgY29uc3QgaXNTY3JvbGxpbmdVcCA9IHNjcm9sbFRvcCA8IGxhc3RTY3JvbGxUb3BSZWYuY3VycmVudFxuXG4gICAgICAgIGlmIChpc1Njcm9sbGluZ1VwKSB7XG4gICAgICAgICAgc2Nyb2xsVGhyZXNob2xkUmVmLmN1cnJlbnQgPSAxNVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgaXNOZWFyQm90dG9tID0gc2Nyb2xsSGVpZ2h0IC0gc2Nyb2xsVG9wIC0gY2xpZW50SGVpZ2h0IDwgc2Nyb2xsVGhyZXNob2xkUmVmLmN1cnJlbnRcblxuICAgICAgICBpZiAoaXNOZWFyQm90dG9tKSB7XG4gICAgICAgICAgc2Nyb2xsVGhyZXNob2xkUmVmLmN1cnJlbnQgPSAzOVxuICAgICAgICB9XG5cbiAgICAgICAgdXNlclNjcm9sbGluZ1JlZi5jdXJyZW50ID0gIWlzTmVhckJvdHRvbVxuICAgICAgICBsYXN0U2Nyb2xsVG9wUmVmLmN1cnJlbnQgPSBzY3JvbGxUb3BcblxuICAgICAgICB1cGRhdGVTY3JvbGxCb3R0b21WaXNpYmlsaXR5KClcblxuICAgICAgICBpZiAoaXNOZWFyQm90dG9tICYmIG9uU2Nyb2xsVG9Cb3R0b20pIHtcbiAgICAgICAgICBvblNjcm9sbFRvQm90dG9tKClcbiAgICAgICAgfVxuXG4gICAgICAgIGhhbmRsZVNjcm9sbChjb250YWluZXIpXG4gICAgICB9KVxuICAgIH0sXG4gICAgW29uU2Nyb2xsVG9Cb3R0b20sIGhhbmRsZVNjcm9sbCwgdXBkYXRlU2Nyb2xsQm90dG9tVmlzaWJpbGl0eV1cbiAgKVxuXG4gIC8vIHJlZnMgdG8gc3RhYmlsaXplIGZ1bmN0aW9ucyBhbmQgYXZvaWQgdW5uZWNlc3NhcnkgcmUtcmVuZGVyc1xuICBjb25zdCBzZW5kTWVzc2FnZVJlZiA9IHVzZVJlZihzZW5kTWVzc2FnZSlcbiAgY29uc3Qgc3RvcEdlbmVyYXRpb25SZWYgPSB1c2VSZWYoc3RvcEdlbmVyYXRpb24pXG4gIGNvbnN0IG9uU2VuZE1lc3NhZ2VSZWFkeVJlZiA9IHVzZVJlZihvblNlbmRNZXNzYWdlUmVhZHkpXG4gIGNvbnN0IHNlbmRNZXNzYWdlUHJveHlSZWYgPSB1c2VSZWYoXG4gICAgKFxuICAgICAgbWVzc2FnZTogc3RyaW5nLFxuICAgICAgYXR0YWNobWVudHM/OiBBdHRhY2htZW50RmlsZVtdLFxuICAgICAgZmFxSWQ/OiBzdHJpbmcsXG4gICAgICBhZ2VudFN1Z2dlc3Rpb25JZD86IHN0cmluZyxcbiAgICAgIG1lbnRpb25zPzogQ29udGV4dE1lbnRpb25bXSxcbiAgICAgIGZ1YUlkPzogc3RyaW5nLFxuICAgICAgc2NJZD86IHN0cmluZ1xuICAgICkgPT4gc2VuZE1lc3NhZ2VSZWYuY3VycmVudChtZXNzYWdlLCBhdHRhY2htZW50cywgZmFxSWQsIGFnZW50U3VnZ2VzdGlvbklkLCBtZW50aW9ucywgZnVhSWQsIHNjSWQpXG4gIClcbiAgY29uc3Qgc3RvcEdlbmVyYXRpb25Qcm94eVJlZiA9IHVzZVJlZigoKSA9PiBzdG9wR2VuZXJhdGlvblJlZi5jdXJyZW50KCkpXG5cbiAgLy8gdXBkYXRlIHJlZnMgd2hlbiBmdW5jdGlvbnMgY2hhbmdlXG4gIHNlbmRNZXNzYWdlUmVmLmN1cnJlbnQgPSBzZW5kTWVzc2FnZVxuICBzdG9wR2VuZXJhdGlvblJlZi5jdXJyZW50ID0gc3RvcEdlbmVyYXRpb25cbiAgb25TZW5kTWVzc2FnZVJlYWR5UmVmLmN1cnJlbnQgPSBvblNlbmRNZXNzYWdlUmVhZHlcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChvblNlbmRNZXNzYWdlUmVhZHlSZWYuY3VycmVudCkge1xuICAgICAgb25TZW5kTWVzc2FnZVJlYWR5UmVmLmN1cnJlbnQoXG4gICAgICAgIHNlbmRNZXNzYWdlUHJveHlSZWYuY3VycmVudCxcbiAgICAgICAgc3RvcEdlbmVyYXRpb25Qcm94eVJlZi5jdXJyZW50LFxuICAgICAgICB3YWl0aW5nUmVzcG9uc2UsXG4gICAgICAgIGlzV3JpdGluZ1xuICAgICAgKVxuICAgIH1cbiAgfSwgW3dhaXRpbmdSZXNwb25zZSwgaXNXcml0aW5nXSlcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlzTG9hZGluZ01vcmVSZWYuY3VycmVudCA9IGlzTG9hZGluZ01vcmVNZXNzYWdlc1xuICB9LCBbaXNMb2FkaW5nTW9yZU1lc3NhZ2VzXSlcblxuICAvLyBDdWFuZG8gZWwgYWdlbnRlIGVtcGllemEgYSByZXNwb25kZXIsIHJlc2V0ZWFyIGVsIGZsYWcgeSBlbCB1bWJyYWwgcGFyYSBhY3RpdmFyIGVsIGF1dG8tc2Nyb2xsXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKHdhaXRpbmdSZXNwb25zZSkge1xuICAgICAgdXNlclNjcm9sbGluZ1JlZi5jdXJyZW50ID0gZmFsc2VcbiAgICAgIHNjcm9sbFRocmVzaG9sZFJlZi5jdXJyZW50ID0gMzlcbiAgICB9XG4gIH0sIFt3YWl0aW5nUmVzcG9uc2VdKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFjaGF0SW5pdGlhbGl6ZWRSZWYuY3VycmVudCkge1xuICAgICAgY2hhdEluaXRpYWxpemVkUmVmLmN1cnJlbnQgPSB0cnVlXG4gICAgICBpbml0aWFsaXplQ2hhdCgpXG4gICAgfVxuICB9LCBbXSlcblxuICAvLyBBdXRvc2Nyb2xsIG1pZW50cmFzIGVsIHRleHRvIGRlbCBzdHJlYW0gY3JlY2UuIEVsIHRleHRvIHNlIHBpbnRhIGFsIHJpdG1vXG4gIC8vIGRlIGB1c2VTbW9vdGhTdHJlYW1UZXh0YCAofjYwZnBzKSwgbm8gYWwgcml0bW8gZGUgbGxlZ2FkYSBkZSB0b2tlbnMgZGVsXG4gIC8vIGJhY2tlbmQ6IHBvciBlc28gYWPDoSB1c2Ftb3MgdW4gbG9vcCBkZSByQUYgcXVlIGNvbXBhcmEgYHNjcm9sbEhlaWdodGBcbiAgLy8gY29udHJhIGVsIMO6bHRpbW8gdmFsb3Igb2JzZXJ2YWRvIHkgYWp1c3RhIHNvbG8gY3VhbmRvIGNhbWJpYS4gQXPDrSBlbFxuICAvLyBzY3JvbGwgcXVlZGEgcGVyZmVjdGFtZW50ZSBzaW5jcm9uaXphZG8gY29uIGxhIGFuaW1hY2nDs24gZGVsIHRleHRvIHNpblxuICAvLyBkZXBlbmRlciBkZSBsYSBjYWRlbmNpYSBkZWwgc3RyZWFtaW5nU3RvcmUuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCF3YWl0aW5nUmVzcG9uc2UgJiYgIWlzV3JpdGluZykgcmV0dXJuIHVuZGVmaW5lZFxuICAgIGlmICghbWVzc2FnZXNSZWYuY3VycmVudCkgcmV0dXJuIHVuZGVmaW5lZFxuXG4gICAgbGV0IHJhZklkOiBudW1iZXIgfCBudWxsID0gbnVsbFxuICAgIGxldCBsYXN0SGVpZ2h0ID0gbWVzc2FnZXNSZWYuY3VycmVudC5zY3JvbGxIZWlnaHRcblxuICAgIGNvbnN0IHRpY2sgPSAoKSA9PiB7XG4gICAgICBjb25zdCBlbCA9IG1lc3NhZ2VzUmVmLmN1cnJlbnRcbiAgICAgIGlmICghZWwpIHtcbiAgICAgICAgcmFmSWQgPSBudWxsXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgICAgY29uc3QgY3VycmVudEhlaWdodCA9IGVsLnNjcm9sbEhlaWdodFxuICAgICAgaWYgKGN1cnJlbnRIZWlnaHQgIT09IGxhc3RIZWlnaHQpIHtcbiAgICAgICAgbGFzdEhlaWdodCA9IGN1cnJlbnRIZWlnaHRcbiAgICAgICAgaWYgKCF1c2VyU2Nyb2xsaW5nUmVmLmN1cnJlbnQpIHtcbiAgICAgICAgICBlbC5zY3JvbGxUb3AgPSBjdXJyZW50SGVpZ2h0XG4gICAgICAgIH1cbiAgICAgICAgdXBkYXRlU2Nyb2xsQm90dG9tVmlzaWJpbGl0eSgpXG4gICAgICB9XG4gICAgICByYWZJZCA9IHJlcXVlc3RBbmltYXRpb25GcmFtZSh0aWNrKVxuICAgIH1cblxuICAgIHJhZklkID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHRpY2spXG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGlmIChyYWZJZCAhPSBudWxsKSBjYW5jZWxBbmltYXRpb25GcmFtZShyYWZJZClcbiAgICB9XG4gIH0sIFt3YWl0aW5nUmVzcG9uc2UsIGlzV3JpdGluZywgdXBkYXRlU2Nyb2xsQm90dG9tVmlzaWJpbGl0eV0pXG5cbiAgLy8gQWwgY29tZW56YXIgYSBlc3BlcmFyIGxhIHJlc3B1ZXN0YSBkZWwgYmFja2VuZCwgc2Nyb2xsIGluaWNpYWwgYWwgZm9uZG8uXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKHdhaXRpbmdSZXNwb25zZSAmJiBtZXNzYWdlc1JlZi5jdXJyZW50KSB7XG4gICAgICBzY3JvbGxUb0JvdHRvbVJhZih7IHNraXBJZlVzZXJTY3JvbGxpbmc6IHRydWUgfSlcbiAgICB9XG4gIH0sIFt3YWl0aW5nUmVzcG9uc2UsIHNjcm9sbFRvQm90dG9tUmFmXSlcblxuICAvLyBTY3JvbGwgY3VhbmRvIGNhbWJpYW4gbG9zIG1lbnNhamVzOiBkaXN0aW5ndWUgXCJudWV2byBtZW5zYWplXCIgKGFncmVnYWRvKVxuICAvLyBkZSBcInJlZW1wbGF6b1wiIChtaXNtbyBpZC9sZW5ndGgsIGVqLiBmZWVkYmFjayBvIGFwcHJvdmFsU3RhdHVzKS4gRW5cbiAgLy8gcmVlbXBsYXpvcyBzb2xvIHNlIHJlY2FsY3VsYSBsYSB2aXNpYmlsaWRhZCBkZWwgYm90w7NuIHNpbiBmb3J6YXIgc2Nyb2xsLlxuICBjb25zdCBsYXN0TWVzc2FnZUlkUmVmID0gdXNlUmVmPHN0cmluZyB8IG51bGw+KG51bGwpXG4gIGNvbnN0IGxhc3RNZXNzYWdlc0xlbmd0aFJlZiA9IHVzZVJlZjxudW1iZXI+KDApXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFtZXNzYWdlc1JlZi5jdXJyZW50IHx8IGxvYWRpbmdNZXNzYWdlcyB8fCBpc0xvYWRpbmdNb3JlTWVzc2FnZXMgfHwgaXNMb2FkaW5nTW9yZVJlZi5jdXJyZW50KSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCBsYXN0TWVzc2FnZSA9IG1lc3NhZ2VzW21lc3NhZ2VzLmxlbmd0aCAtIDFdXG4gICAgY29uc3QgbGFzdElkID0gbGFzdE1lc3NhZ2U/LmlkID8/IG51bGxcbiAgICBjb25zdCBwcmV2SWQgPSBsYXN0TWVzc2FnZUlkUmVmLmN1cnJlbnRcbiAgICBjb25zdCBwcmV2TGVuID0gbGFzdE1lc3NhZ2VzTGVuZ3RoUmVmLmN1cnJlbnRcbiAgICBsYXN0TWVzc2FnZUlkUmVmLmN1cnJlbnQgPSBsYXN0SWRcbiAgICBsYXN0TWVzc2FnZXNMZW5ndGhSZWYuY3VycmVudCA9IG1lc3NhZ2VzLmxlbmd0aFxuXG4gICAgY29uc3QgaXNOZXdNZXNzYWdlID0gbGFzdElkICE9PSBwcmV2SWQgfHwgbWVzc2FnZXMubGVuZ3RoICE9PSBwcmV2TGVuXG4gICAgaWYgKCFpc05ld01lc3NhZ2UpIHtcbiAgICAgIHVwZGF0ZVNjcm9sbEJvdHRvbVZpc2liaWxpdHkoKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY29uc3QgY29udGFpbmVyID0gbWVzc2FnZXNSZWYuY3VycmVudFxuICAgIGNvbnN0IGlzQXRCb3R0b20gPSBjb250YWluZXIuc2Nyb2xsSGVpZ2h0IC0gY29udGFpbmVyLnNjcm9sbFRvcCA8PSBjb250YWluZXIuY2xpZW50SGVpZ2h0ICsgMTAwXG4gICAgY29uc3QgaGFzSW5pdGlhbE1lc3NhZ2UgPSBtZXNzYWdlcy5zb21lKG1zZyA9PiBtc2cuaWQgPT09ICd1c2VyLWluaXRpYWwtbWVzc2FnZScpXG4gICAgY29uc3QgaXNBcHByb3ZhbCA9ICEhbGFzdE1lc3NhZ2UgJiYgKGxhc3RNZXNzYWdlLmlkLnN0YXJ0c1dpdGgoJ2FwcHJvdmFsLScpIHx8ICEhbGFzdE1lc3NhZ2UuYXBwcm92YWwpXG4gICAgY29uc3QgaXNBbnN3ZXJPclF1ZXN0aW9uID1cbiAgICAgICEhbGFzdE1lc3NhZ2UgJiYgKGxhc3RNZXNzYWdlLmlkLnN0YXJ0c1dpdGgoJ2Fuc3dlci0nKSB8fCBsYXN0TWVzc2FnZS5pZC5zdGFydHNXaXRoKCdxdWVzdGlvbi0nKSlcblxuICAgIC8vIEFwcHJvdmFsOiBzZWN1ZW5jaWEgZGUgc2Nyb2xscyBjb24gZGVsYXkgcG9ycXVlIGVsIEFwcHJvdmFsQm94IG5lY2VzaXRhXG4gICAgLy8gdW4gdGljayBwYXJhIG1lZGlyc2UuIFNjcm9sbGVhIGF1bnF1ZSBlbCB1c3VhcmlvIG5vIGVzdMOpIGFsIGZvbmRvIHNpIG5vXG4gICAgLy8gZXN0w6Egc2Nyb2xsZWFuZG8gbWFudWFsbWVudGUuXG4gICAgaWYgKGlzQXBwcm92YWwgJiYgKGlzQXRCb3R0b20gfHwgIXVzZXJTY3JvbGxpbmdSZWYuY3VycmVudCkpIHtcbiAgICAgIHNjcm9sbFRvQm90dG9tUmFmKClcbiAgICAgIHNjcm9sbFRvQm90dG9tUmFmKClcbiAgICAgIHNjcm9sbFRvQm90dG9tUmFmKHsgZGVsYXlNczogMTAwIH0pXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICAvLyBOdWV2b3MgYW5zd2VyL3F1ZXN0aW9uOiBzY3JvbGwgc2kgZWwgdXN1YXJpbyB5YSBlc3RhYmEgYWwgZm9uZG8uXG4gICAgaWYgKGlzQW5zd2VyT3JRdWVzdGlvbiAmJiBpc0F0Qm90dG9tKSB7XG4gICAgICBzY3JvbGxUb0JvdHRvbVJhZigpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICAvLyBDYXNvIGJvcmRlOiBjYW1iaW9zIGRlIG1lbnNhamVzIHNpbiBzZXIgbnVldm8gYW5zd2VyL3VzZXIvYXBwcm92YWxcbiAgICAvLyBwZXJvIHPDrSB1biBtZW5zYWplIG51ZXZvIChubyBlbCBcInVzZXItaW5pdGlhbC1tZXNzYWdlXCIpLiBTY3JvbGxlYS5cbiAgICBpZiAoIWlzQW5zd2VyT3JRdWVzdGlvbiAmJiAhaXNBcHByb3ZhbCAmJiAhaGFzSW5pdGlhbE1lc3NhZ2UgJiYgbWVzc2FnZXMubGVuZ3RoID4gcHJldkxlbikge1xuICAgICAgc2Nyb2xsVG9Cb3R0b21SYWYoKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgdXBkYXRlU2Nyb2xsQm90dG9tVmlzaWJpbGl0eSgpXG4gIH0sIFttZXNzYWdlcywgbG9hZGluZ01lc3NhZ2VzLCBpc0xvYWRpbmdNb3JlTWVzc2FnZXMsIHNjcm9sbFRvQm90dG9tUmFmLCB1cGRhdGVTY3JvbGxCb3R0b21WaXNpYmlsaXR5XSlcblxuICAvLyBFc3RhZG8gaW5pY2lhbCBkZWwgYm90w7NuIHNjcm9sbC10by1ib3R0b20gYWwgdGVybWluYXIgbG9hZGluZ01lc3NhZ2VzLlxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghbG9hZGluZ01lc3NhZ2VzKSB7XG4gICAgICB1cGRhdGVTY3JvbGxCb3R0b21WaXNpYmlsaXR5KClcbiAgICB9XG4gIH0sIFtsb2FkaW5nTWVzc2FnZXMsIG1lc3NhZ2VzLmxlbmd0aCwgdXBkYXRlU2Nyb2xsQm90dG9tVmlzaWJpbGl0eV0pXG5cbiAgLy8gT2J0ZW5lciBlbCDDumx0aW1vIG1lbnNhamUgZGVsIHVzdWFyaW8gcGFyYSB2ZXJpZmljYXIgc2kgdGllbmUgYXR0YWNobWVudHNcbiAgY29uc3QgbGFzdFVzZXJNZXNzYWdlID0gbWVzc2FnZXNcbiAgICAuZmlsdGVyKG1zZyA9PiBtc2cucm9sZSA9PT0gQ2hhdEhpc3RvcnlSb2xlLlVTRVIgfHwgbXNnLnVzZXIuaWQgPT09IGF1dGhVc2VyLmlkLnRvU3RyaW5nKCkpXG4gICAgLmF0KC0xKVxuXG4gIGNvbnN0IGF0dGFjaG1lbnRzQ291bnQgPVxuICAgIChBcnJheS5pc0FycmF5KGxhc3RVc2VyTWVzc2FnZT8uYXR0YWNobWVudHMpID8gbGFzdFVzZXJNZXNzYWdlLmF0dGFjaG1lbnRzLmxlbmd0aCA6IDApIHx8XG4gICAgKEFycmF5LmlzQXJyYXkobGFzdFVzZXJNZXNzYWdlPy5zb3VyY2VzKSA/IGxhc3RVc2VyTWVzc2FnZS5zb3VyY2VzLmxlbmd0aCA6IDApXG5cbiAgY29uc3Qgc3RyZWFtTG9hZGluZ0Rpc3BsYXkgPSByZXNvbHZlU3RyZWFtTG9hZGluZ0Rpc3BsYXkoe1xuICAgIHN0cmVhbUFjdGl2aXR5LFxuICAgIGxvYWRpbmdNZXNzYWdlLFxuICAgIGFjdGl2ZUxvYWRpbmdzOiBhY3RpdmVMb2FkaW5ncyB8fCB7fSxcbiAgICB3YWl0aW5nUmVzcG9uc2UsXG4gICAgaXNXZWJTZWFyY2hBY3RpdmUsXG4gICAgaXNEZWVwU2VhcmNoQWN0aXZlLFxuICAgIGhhc0F0dGFjaG1lbnRzOiBCb29sZWFuKGF0dGFjaG1lbnRzQ291bnQpLFxuICAgIGF0dGFjaG1lbnRzQ291bnQsXG4gICAgdCxcbiAgfSlcblxuICBjb25zdCBzdHJlYW1UaW1lbGluZSA9IHVzZVN0cmVhbVRpbWVsaW5lKClcbiAgY29uc3Qgc2hvd1N0cmVhbVR1cm5UaW1lbGluZSA9IEJvb2xlYW4oXG4gICAgc3RyZWFtVGltZWxpbmUudHVybklkICYmICh3YWl0aW5nUmVzcG9uc2UgfHwgaXNXcml0aW5nIHx8IHN0cmVhbVRpbWVsaW5lLnNlZ21lbnRzLmxlbmd0aCA+IDApXG4gIClcblxuICBjb25zdCBsYXN0QXBwcm92YWxNZXNzYWdlSW5kZXggPSB1c2VNZW1vKCgpID0+IHtcbiAgICBmb3IgKGxldCBpID0gbWVzc2FnZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpIC09IDEpIHtcbiAgICAgIGlmIChtZXNzYWdlc1tpXS5hcHByb3ZhbCkgcmV0dXJuIGlcbiAgICB9XG4gICAgcmV0dXJuIC0xXG4gIH0sIFttZXNzYWdlc10pXG5cbiAgY29uc3QgYW5jaG9yVGltZWxpbmVUb0FwcHJvdmFsID0gdXNlTWVtbygoKSA9PiB7XG4gICAgaWYgKGxhc3RBcHByb3ZhbE1lc3NhZ2VJbmRleCA8IDAgfHwgIXNob3dTdHJlYW1UdXJuVGltZWxpbmUpIHJldHVybiBmYWxzZVxuICAgIHJldHVybiBtZXNzYWdlc1tsYXN0QXBwcm92YWxNZXNzYWdlSW5kZXhdLmFwcHJvdmFsU3RhdHVzID09PSAnYXBwcm92ZWQnXG4gIH0sIFtsYXN0QXBwcm92YWxNZXNzYWdlSW5kZXgsIG1lc3NhZ2VzLCBzaG93U3RyZWFtVHVyblRpbWVsaW5lXSlcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghc2hvd1N0cmVhbVR1cm5UaW1lbGluZSkgcmV0dXJuXG4gICAgY29uc3QgYXBwcm92YWxNZXNzYWdlID0gbGFzdEFwcHJvdmFsTWVzc2FnZUluZGV4ID49IDAgPyBtZXNzYWdlc1tsYXN0QXBwcm92YWxNZXNzYWdlSW5kZXhdIDogdW5kZWZpbmVkXG4gICAgc3RyZWFtRGVidWdMb2coJ2NoYXRVSScsICdzdHJlYW1UdXJuVGltZWxpbmU6cmVuZGVyJywge1xuICAgICAgc2hvd1N0cmVhbVR1cm5UaW1lbGluZSxcbiAgICAgIGFuY2hvclRpbWVsaW5lVG9BcHByb3ZhbCxcbiAgICAgIHR1cm5JZDogc3RyZWFtVGltZWxpbmUudHVybklkLFxuICAgICAgc2VnbWVudENvdW50OiBzdHJlYW1UaW1lbGluZS5zZWdtZW50cy5sZW5ndGgsXG4gICAgICB0aW1lbGluZTogc3VtbWFyaXplVGltZWxpbmVTbmFwc2hvdChzdHJlYW1UaW1lbGluZSksXG4gICAgICB3YWl0aW5nUmVzcG9uc2UsXG4gICAgICBpc1dyaXRpbmcsXG4gICAgICBhcHByb3ZhbE1lc3NhZ2VJZDogYXBwcm92YWxNZXNzYWdlPy5pZCxcbiAgICAgIGFwcHJvdmFsU3RhdHVzOiBhcHByb3ZhbE1lc3NhZ2U/LmFwcHJvdmFsU3RhdHVzLFxuICAgICAgcGVuZGluZ1Rvb2xzOiBhcHByb3ZhbE1lc3NhZ2U/LmFwcHJvdmFsPy5wZW5kaW5nX2FjdGlvbnM/Lm1hcChhID0+IGEudG9vbF9uYW1lKSxcbiAgICB9KVxuICAgIGlmIChhcHByb3ZhbE1lc3NhZ2U/LmFwcHJvdmFsICYmIGFwcHJvdmFsTWVzc2FnZS5hcHByb3ZhbFN0YXR1cyA9PT0gJ3BlbmRpbmcnKSB7XG4gICAgICBzdHJlYW1EZWJ1Z0xvZ0hpdGxVaU92ZXJsYXAoe1xuICAgICAgICBzY29wZTogJ2NoYXRVSScsXG4gICAgICAgIHNvdXJjZTogJ3RpbWVsaW5lU2VnbWVudCcsXG4gICAgICAgIGhpdGxDb250ZXh0OiB7XG4gICAgICAgICAgbWVzc2FnZUlkOiBhcHByb3ZhbE1lc3NhZ2UuaWQsXG4gICAgICAgICAgbWVzc2FnZVRleHQ6IGFwcHJvdmFsTWVzc2FnZS5tZXNzYWdlLFxuICAgICAgICAgIGFwcHJvdmFsOiBhcHByb3ZhbE1lc3NhZ2UuYXBwcm92YWwsXG4gICAgICAgICAgcGVuZGluZ0FjdGlvbnM6IGFwcHJvdmFsTWVzc2FnZS5hcHByb3ZhbC5wZW5kaW5nX2FjdGlvbnMsXG4gICAgICAgICAgdGhyZWFkSWRzOiBhcHByb3ZhbE1lc3NhZ2UuYXBwcm92YWwucGVuZGluZ19hY3Rpb25zPy5tYXAoYSA9PiBhLnRocmVhZF9pZCksXG4gICAgICAgIH0sXG4gICAgICAgIHVpU3VyZmFjZXM6IFsnYXBwcm92YWxCb3gnLCAnc3RyZWFtVGltZWxpbmUnXSxcbiAgICAgIH0pXG4gICAgfVxuICB9LCBbXG4gICAgc2hvd1N0cmVhbVR1cm5UaW1lbGluZSxcbiAgICBhbmNob3JUaW1lbGluZVRvQXBwcm92YWwsXG4gICAgc3RyZWFtVGltZWxpbmUsXG4gICAgd2FpdGluZ1Jlc3BvbnNlLFxuICAgIGlzV3JpdGluZyxcbiAgICBsYXN0QXBwcm92YWxNZXNzYWdlSW5kZXgsXG4gICAgbWVzc2FnZXMsXG4gIF0pXG5cbiAgY29uc3QgcmVuZGVyVGltZWxpbmVDb250ZW50QmxvY2sgPSB1c2VDYWxsYmFjayhcbiAgICAoe1xuICAgICAgdGV4dCxcbiAgICAgIGlzU3RyZWFtaW5nLFxuICAgICAgc2hvd0Fzc2lzdGFudEhlYWRlcixcbiAgICB9OiB7XG4gICAgICBzZWdtZW50SWQ6IHN0cmluZ1xuICAgICAgdGV4dDogc3RyaW5nXG4gICAgICBpc1N0cmVhbWluZzogYm9vbGVhblxuICAgICAgc2hvd0Fzc2lzdGFudEhlYWRlcjogYm9vbGVhblxuICAgIH0pID0+IChcbiAgICAgIDxTQ01lc3NhZ2VJdGVtV3JhcHBlciAkaXNBc3Npc3RhbnQ+XG4gICAgICAgIHtzaG93QXNzaXN0YW50SGVhZGVyICYmIDxBc3Npc3RhbnRNZXNzYWdlSGVhZGVyIC8+fVxuICAgICAgICA8U0NNZXNzYWdlSXRlbUlubmVyPlxuICAgICAgICAgIDxUaW1lbGluZVNlZ21lbnRCb2R5IHRleHQ9e3RleHR9IGlzU3RyZWFtaW5nPXtpc1N0cmVhbWluZ30gLz5cbiAgICAgICAgPC9TQ01lc3NhZ2VJdGVtSW5uZXI+XG4gICAgICA8L1NDTWVzc2FnZUl0ZW1XcmFwcGVyPlxuICAgICksXG4gICAgW11cbiAgKVxuXG4gIGNvbnN0IHN0cmVhbVR1cm5UaW1lbGluZSA9IHNob3dTdHJlYW1UdXJuVGltZWxpbmUgPyAoXG4gICAgPFN0cmVhbUFzc2lzdGFudFR1cm5UaW1lbGluZVxuICAgICAgc2VnbWVudHM9e3N0cmVhbVRpbWVsaW5lLnNlZ21lbnRzfVxuICAgICAgaW5pdGlhbEFjdGl2aXR5PXtzdHJlYW1Mb2FkaW5nRGlzcGxheX1cbiAgICAgIHdhaXRpbmdSZXNwb25zZT17d2FpdGluZ1Jlc3BvbnNlfVxuICAgICAgaXNXcml0aW5nPXtpc1dyaXRpbmd9XG4gICAgICByZW5kZXJDb250ZW50QmxvY2s9e3JlbmRlclRpbWVsaW5lQ29udGVudEJsb2NrfVxuICAgIC8+XG4gICkgOiBudWxsXG5cbiAgY29uc3QgaXNTY3JvbGxPblBhcmVudCA9ICEhZXhwYW5kZWRcbiAgY29uc3QgaXNNYXJrZXRwbGFjZUdsb2JhbEFnZW50ID0gaXNNYWlha2VyQWdlbnQoYWdlbnQpXG5cbiAgLy8gQWwgZXhwYW5kaXIvY29udHJhZXIgZWwgbW9kYWwgZWwgcmVmIHBhc2EgYSBvdHJvIGNvbnRlbmVkb3IgKHNjcm9sbFRvcCBzZSByZXNldGVhIGEgMCkuXG4gIC8vIFJlc3RhdXJhciBsYSBwb3NpY2nDs24gZGUgc2Nyb2xsIGFudGVzIGRlbCBwYWludCBwYXJhIGV2aXRhciBxdWUgbGEgY29udmVyc2FjacOzbiBzYWx0ZSBhcnJpYmEuXG4gIGNvbnN0IGV4cGFuZGVkUmVmID0gdXNlUmVmKGV4cGFuZGVkKVxuICB1c2VMYXlvdXRFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChleHBhbmRlZFJlZi5jdXJyZW50ICE9PSBleHBhbmRlZCAmJiBtZXNzYWdlc1JlZi5jdXJyZW50KSB7XG4gICAgICBjb25zdCBzYXZlZFNjcm9sbFRvcCA9IGxhc3RTY3JvbGxUb3BSZWYuY3VycmVudFxuICAgICAgbWVzc2FnZXNSZWYuY3VycmVudC5zY3JvbGxUb3AgPSBzYXZlZFNjcm9sbFRvcFxuICAgICAgZXhwYW5kZWRSZWYuY3VycmVudCA9IGV4cGFuZGVkXG4gICAgfSBlbHNlIHtcbiAgICAgIGV4cGFuZGVkUmVmLmN1cnJlbnQgPSBleHBhbmRlZFxuICAgIH1cbiAgfSwgW2V4cGFuZGVkXSlcblxuICBpZiAobG9hZGluZ01lc3NhZ2VzKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxGYWRlIGZpbGw+XG4gICAgICAgIDxMb2FkZXIgLz5cbiAgICAgIDwvRmFkZT5cbiAgICApXG4gIH1cblxuICBjb25zdCBtZXNzYWdlc0NvbnRlbnQgPSAoXG4gICAgPD5cbiAgICAgIHtpc0xvYWRpbmdNb3JlTWVzc2FnZXMgJiYgPExvYWRpbmdUZXh0IHRleHQ9e3QoJ2NoYXQubG9hZGluZ01vcmUnKX0gLz59XG4gICAgICA8PlxuICAgICAgICB7bWVzc2FnZXMubWFwKChtZXNzYWdlLCBpbmRleCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGlzQXNzaXN0YW50TWVzc2FnZSA9IG1lc3NhZ2Uucm9sZSA9PT0gQ2hhdEhpc3RvcnlSb2xlLkFTU0lTVEFOVCB8fCBtZXNzYWdlLnVzZXIuaWQgPT09ICdhc3Npc3RhbnQnXG4gICAgICAgICAgY29uc3QgaXNMYXN0TWVzc2FnZSA9IGluZGV4ID09PSBtZXNzYWdlcy5sZW5ndGggLSAxXG4gICAgICAgICAgY29uc3QgaXNTdHJlYW1pbmdQbGFjZWhvbGRlciA9XG4gICAgICAgICAgICBpc0Fzc2lzdGFudE1lc3NhZ2UgJiYgaXNMYXN0TWVzc2FnZSAmJiBpc1N0cmVhbWluZ1BsYWNlaG9sZGVyTWVzc2FnZUlkKG1lc3NhZ2UuaWQpXG4gICAgICAgICAgY29uc3QgaXNTdHJlYW1pbmcgPSBpc1N0cmVhbWluZ1BsYWNlaG9sZGVyICYmICh3YWl0aW5nUmVzcG9uc2UgfHwgaXNXcml0aW5nKVxuXG4gICAgICAgICAgLy8gTm8gZmlsdHJhciBlbCBwbGFjZWhvbGRlciBkZWwgbWVuc2FqZSBlbiBzdHJlYW1pbmc6IHN1IHRleHRvIHZpdmVcbiAgICAgICAgICAvLyBlbiBlbCBzdHJlYW1pbmdTdG9yZSB5IGBtZXNzYWdlLm1lc3NhZ2VgIGVzICcnIGhhc3RhIGVsIGNvbXBsZXRlLlxuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICFpc1N0cmVhbWluZ1BsYWNlaG9sZGVyICYmXG4gICAgICAgICAgICAhaXNTdHJlYW1pbmcgJiZcbiAgICAgICAgICAgICEobWVzc2FnZS5hdHRhY2htZW50cz8ubGVuZ3RoIHx8IG1lc3NhZ2Uuc291cmNlcz8ubGVuZ3RoKSAmJlxuICAgICAgICAgICAgIW1lc3NhZ2UubWVzc2FnZSAmJlxuICAgICAgICAgICAgIW1lc3NhZ2UucHJvamVjdD8ubmFtZSAmJlxuICAgICAgICAgICAgIW1lc3NhZ2UuYXBwcm92YWxcbiAgICAgICAgICApXG4gICAgICAgICAgICByZXR1cm4gbnVsbFxuXG4gICAgICAgICAgY29uc3QgbWVzc2FnZUZlZWRiYWNrID1cbiAgICAgICAgICAgIG1lc3NhZ2U/Lndhc0hlbHBmdWwgPT09IHVuZGVmaW5lZCB8fCBtZXNzYWdlLndhc0hlbHBmdWwgPT09IG51bGxcbiAgICAgICAgICAgICAgPyBudWxsXG4gICAgICAgICAgICAgIDogbWVzc2FnZS53YXNIZWxwZnVsXG4gICAgICAgICAgICAgICAgPyBGZWVkYmFjay5USFVNQlNfVVBcbiAgICAgICAgICAgICAgICA6IEZlZWRiYWNrLlRIVU1CU19ET1dOXG5cbiAgICAgICAgICAvLyBLZXkgZXN0YWJsZTogc29sbyBtZXNzYWdlLmlkIHBhcmEgZXZpdGFyIHJlbW91bnQgZHVyYW50ZSBzdHJlYW1pbmcgKG1lc3NhZ2UuZGF0ZSBwdWVkZSBjYW1iaWFyKVxuICAgICAgICAgIGNvbnN0IG1lc3NhZ2VLZXkgPSBtZXNzYWdlLmlkID8/IGBtc2ctJHtpbmRleH1gXG5cbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPFJlYWN0LkZyYWdtZW50IGtleT17bWVzc2FnZUtleX0+XG4gICAgICAgICAgICAgIDxNZXNzYWdlSXRlbVxuICAgICAgICAgICAgICAgIHsuLi5tZXNzYWdlfVxuICAgICAgICAgICAgICAgIGF1dGhVc2VyPXthdXRoVXNlcn1cbiAgICAgICAgICAgICAgICBoYW5kbGVTZWxlY3RPcHRpb249e2hhbmRsZVNlbGVjdE9wdGlvbn1cbiAgICAgICAgICAgICAgICBoYW5kbGVGZWVkYmFjaz17aGFuZGxlRmVlZGJhY2t9XG4gICAgICAgICAgICAgICAgaGFuZGxlQXBwcm92YWxEZWNpc2lvbj17aGFuZGxlQXBwcm92YWxEZWNpc2lvbldpdGhTY3JvbGx9XG4gICAgICAgICAgICAgICAgaGFuZGxlU3VnZ2VzdGlvbkNsaWNrPXtoYW5kbGVTdWdnZXN0aW9uQ2xpY2t9XG4gICAgICAgICAgICAgICAgaGFzU2VsZWN0ZWRTdWdnZXN0aW9uPXshIXNlbGVjdGVkU3VnZ2VzdGlvbk1lc3NhZ2VJZHNbbWVzc2FnZS5pZF19XG4gICAgICAgICAgICAgICAgZGlzYWJsZUZlZWRiYWNrPXttZXNzYWdlRmVlZGJhY2t9XG4gICAgICAgICAgICAgICAgaXNTdHJlYW1pbmc9e2lzU3RyZWFtaW5nfVxuICAgICAgICAgICAgICAgIGlzTGFzdE1lc3NhZ2U9e2lzTGFzdE1lc3NhZ2V9XG4gICAgICAgICAgICAgICAgZXhwYW5kZWQ9e2V4cGFuZGVkfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICB7YW5jaG9yVGltZWxpbmVUb0FwcHJvdmFsICYmIGluZGV4ID09PSBsYXN0QXBwcm92YWxNZXNzYWdlSW5kZXggJiYgc3RyZWFtVHVyblRpbWVsaW5lfVxuICAgICAgICAgICAgPC9SZWFjdC5GcmFnbWVudD5cbiAgICAgICAgICApXG4gICAgICAgIH0pfVxuICAgICAgICB7c2hvd1N0cmVhbVR1cm5UaW1lbGluZSAmJiAhYW5jaG9yVGltZWxpbmVUb0FwcHJvdmFsICYmIHN0cmVhbVR1cm5UaW1lbGluZX1cbiAgICAgIDwvPlxuICAgIDwvPlxuICApXG5cbiAgcmV0dXJuIChcbiAgICA8U0NNZXNzYWdlc091dGVyICRzY3JvbGxPblBhcmVudD17aXNTY3JvbGxPblBhcmVudH0+XG4gICAgICB7aXNTY3JvbGxPblBhcmVudCA/IChcbiAgICAgICAgPFNDTWVzc2FnZXNTY3JvbGwgcmVmPXttZXNzYWdlc1JlZn0gb25TY3JvbGw9e2hhbmRsZVNjcm9sbFRvQm90dG9tfT5cbiAgICAgICAgICA8U0NNZXNzYWdlc0lubmVyICRzY3JvbGxPblBhcmVudD17aXNTY3JvbGxPblBhcmVudH0gJGlzTWFya2V0cGxhY2VHbG9iYWw9e2lzTWFya2V0cGxhY2VHbG9iYWxBZ2VudH0+XG4gICAgICAgICAgICB7bWVzc2FnZXNDb250ZW50fVxuICAgICAgICAgIDwvU0NNZXNzYWdlc0lubmVyPlxuICAgICAgICA8L1NDTWVzc2FnZXNTY3JvbGw+XG4gICAgICApIDogKFxuICAgICAgICA8U0NNZXNzYWdlc0lubmVyXG4gICAgICAgICAgcmVmPXttZXNzYWdlc1JlZn1cbiAgICAgICAgICBvblNjcm9sbD17aGFuZGxlU2Nyb2xsVG9Cb3R0b219XG4gICAgICAgICAgJHNjcm9sbE9uUGFyZW50PXtmYWxzZX1cbiAgICAgICAgICAkaXNNYXJrZXRwbGFjZUdsb2JhbD17aXNNYXJrZXRwbGFjZUdsb2JhbEFnZW50fVxuICAgICAgICA+XG4gICAgICAgICAge21lc3NhZ2VzQ29udGVudH1cbiAgICAgICAgPC9TQ01lc3NhZ2VzSW5uZXI+XG4gICAgICApfVxuXG4gICAgICB7c2hvd1Njcm9sbFRvQm90dG9tICYmIChcbiAgICAgICAgPFNjcm9sbFRvQm90dG9tQnV0dG9uIHR5cGU9XCJidXR0b25cIiBvbkNsaWNrPXtoYW5kbGVDbGlja1Njcm9sbFRvQm90dG9tfT5cbiAgICAgICAgICA8QXJyb3dTbWFsbERvd24gY29sb3I9XCIjNjY2XCIgd2lkdGg9XCIyMHB4XCIgaGVpZ2h0PVwiMjBweFwiIC8+XG4gICAgICAgIDwvU2Nyb2xsVG9Cb3R0b21CdXR0b24+XG4gICAgICApfVxuICAgIDwvU0NNZXNzYWdlc091dGVyPlxuICApXG59XG5cbmV4cG9ydCBjb25zdCBDaGF0QUlNZXNzYWdlcyA9IFJlYWN0Lm1lbW8oQ2hhdEFJTWVzc2FnZXNJbm5lcilcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU9BLEtBQUssSUFBUUMsSUFBSSxFQUFhQyxXQUFXLEVBQUVDLFNBQVMsRUFBRUMsZUFBZSxFQUFFQyxPQUFPLEVBQUVDLE1BQU0sRUFB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LENBQUU7WUFDbEV1RCxlQUFlLEVBQUV3UyxlQUFnQjtZQUNqQ3JWLFdBQVcsRUFBRUEsV0FBWTtZQUN6QnNELGFBQWEsRUFBRUEsYUFBYztZQUM3QjJHLFFBQVEsRUFBRUE7VUFBUyxFQUNwQixDQUFDLEVBQ0RtSix3QkFBd0IsSUFBSTFLLEtBQUssS0FBS3dLLHdCQUF3QixJQUFJcUIsa0JBQWtCO1FBQUEsR0FkbEVrQixVQWVMLENBQUM7TUFFckIsQ0FBQyxDQUFDLEVBQ0QxQyxzQkFBc0IsSUFBSSxDQUFDSyx3QkFBd0IsSUFBSW1CLGtCQUFrQjtJQUFBLENBQzFFLENBQUM7RUFBQSxDQUNILENBQ0g7RUFFRCxvQkFDRTFYLEtBQUEsQ0FBQ3pCLGVBQWU7SUFBQ3NhLGVBQWUsRUFBRWhCLGdCQUFpQjtJQUFBclgsUUFBQSxHQUNoRHFYLGdCQUFnQixnQkFDZi9YLElBQUEsQ0FBQ3RCLGdCQUFnQjtNQUFDc2EsR0FBRyxFQUFFbkssV0FBWTtNQUFDb0ssUUFBUSxFQUFFbkYsb0JBQXFCO01BQUFwVCxRQUFBLGVBQ2pFVixJQUFBLENBQUNyQixlQUFlO1FBQUNvYSxlQUFlLEVBQUVoQixnQkFBaUI7UUFBQ21CLG9CQUFvQixFQUFFNUgsd0JBQXlCO1FBQUE1USxRQUFBLEVBQ2hHeVg7TUFBZSxDQUNEO0lBQUMsQ0FDRixDQUFDLGdCQUVuQm5ZLElBQUEsQ0FBQ3JCLGVBQWU7TUFDZHFhLEdBQUcsRUFBRW5LLFdBQVk7TUFDakJvSyxRQUFRLEVBQUVuRixvQkFBcUI7TUFDL0JpRixlQUFlLEVBQUUsS0FBTTtNQUN2Qkcsb0JBQW9CLEVBQUU1SCx3QkFBeUI7TUFBQTVRLFFBQUEsRUFFOUN5WDtJQUFlLENBQ0QsQ0FDbEIsRUFFQTVJLGtCQUFrQixpQkFDakJ2UCxJQUFBLENBQUN4QixvQkFBb0I7TUFBQ21DLElBQUksRUFBQyxRQUFRO01BQUNpQyxPQUFPLEVBQUU2USx5QkFBMEI7TUFBQS9TLFFBQUEsZUFDckVWLElBQUEsQ0FBQ3ZELGNBQWM7UUFBQzBjLEtBQUssRUFBQyxNQUFNO1FBQUN0WSxLQUFLLEVBQUMsTUFBTTtRQUFDQyxNQUFNLEVBQUM7TUFBTSxDQUFFO0lBQUMsQ0FDdEMsQ0FDdkI7RUFBQSxDQUNjLENBQUM7QUFFdEIsQ0FBQztBQUVELE9BQU8sSUFBTXNZLGNBQWMsZ0JBQUdyZCxLQUFLLENBQUNDLElBQUksQ0FBQytSLG1CQUFtQixDQUFDIiwiaWdub3JlTGlzdCI6W119
|
|
842
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSZWFjdCIsIm1lbW8iLCJ1c2VDYWxsYmFjayIsInVzZUVmZmVjdCIsInVzZUxheW91dEVmZmVjdCIsInVzZVJlZiIsInVzZVN0YXRlIiwiY3JlYXRlRWxlbWVudCIsIl9jcmVhdGVFbGVtZW50IiwiU3RyZWFtZG93biIsImNyZWF0ZUNvZGVQbHVnaW4iLCJBcnJvd1NtYWxsRG93biIsIkF0dGFjaG1lbnRDYXJkIiwiQXBwcm92YWxCb3giLCJBdHRhY2htZW50UHJldmlld01vZGFsIiwiQXR0YWNobWVudENhcmRBdWRpbyIsIkNoYXRIaXN0b3J5Um9sZSIsIk1BSUFfU1RSRUFNRE9XTl9SRUhZUEVfUExVR0lOUyIsInJlbmRlclRleHRXaXRoTWVudGlvbnMiLCJoYXNJbmxpbmVNYXJrZXJzIiwiaXNNYWlha2VyQWdlbnQiLCJ1c2VVc2VyIiwidXNlVCIsInVzZUNoYXRNYW5hZ2VyIiwidXNlU21vb3RoU3RyZWFtVGV4dCIsInVzZVN0cmVhbWluZ01lc3NhZ2UiLCJMb2FkaW5nVGV4dCIsIkFnZW50QWN0aXZpdHlJbmRpY2F0b3IiLCJpc1N0cmVhbWluZ1BsYWNlaG9sZGVyTWVzc2FnZUlkIiwicmVzb2x2ZVN0cmVhbUxvYWRpbmdEaXNwbGF5IiwiTG9hZGVyIiwiRmFkZSIsIk1lc3NhZ2VGcm9tVXNlciIsIk1lc3NhZ2VGcm9tT3RoZXIiLCJNZXNzYWdlQ29udGVudEZyb21Vc2VyIiwiTWVzc2FnZUNvbnRlbnRGcm9tT3RoZXIiLCJNZXNzYWdlRmVlZGJhY2siLCJTQ0NBSU1lc3NhZ2VXcmFwcGVyIiwiU2Nyb2xsVG9Cb3R0b21CdXR0b24iLCJTQ01lc3NhZ2VzT3V0ZXIiLCJTQ01lc3NhZ2VzU2Nyb2xsIiwiU0NNZXNzYWdlc0lubmVyIiwiU0NMb2FkaW5nTWVzc2FnZXNDb2x1bW4iLCJTQ09wdGlvbnNMaXN0IiwiU0NPcHRpb25JdGVtIiwiU0NBc3Npc3RhbnRNZXNzYWdlSGVhZGVyIiwiU0NBc3Npc3RhbnROYW1lIiwiU0NBc3Npc3RhbnRBdmF0YXIiLCJTQ01lc3NhZ2VJdGVtV3JhcHBlciIsIlNDTWVzc2FnZUl0ZW1Jbm5lciIsIlNDQXR0YWNobWVudHNSb3ciLCJTQ0FwcHJvdmFsQWN0aW9uc0NvbHVtbiIsIkZlZWRiYWNrIiwidXNlR2xvYmFsQ29udGV4dCIsIk1BSUFJY29uIiwiRW50aXR5TGlua0N1c3RvbUxpbmsiLCJnZXRFbnRpdHlMaW5rV3JhcHBlckNsYXNzTmFtZSIsIkNoYXRBSVN1Z2dlc3Rpb25zIiwiQ2hhdEFJQ3JlYXRlQWdlbnRBY3Rpb25zIiwiRVZFTlRTIiwidXNlRXZlbnQiLCJkb3dubG9hZEZpbGVGcm9tVXJsIiwianN4IiwiX2pzeCIsImpzeHMiLCJfanN4cyIsIkZyYWdtZW50IiwiX0ZyYWdtZW50IiwiY29kZSIsInRoZW1lcyIsIkFzc2lzdGFudEF2YXRhcklubmVyIiwiX3VzZUdsb2JhbENvbnRleHQiLCJhZ2VudCIsImNoaWxkcmVuIiwidHlwZSIsImlzX2xlZ2FjeV9jb250ZXh0Iiwid2lkdGgiLCJoZWlnaHQiLCJlbW9qaSIsIkFzc2lzdGFudEF2YXRhciIsIk1lc3NhZ2VXcmFwcGVyIiwiX3JlZiIsImlzQ3VycmVudFVzZXIiLCJwcm9wcyIsIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsIl9leGNsdWRlZCIsIk1lc3NhZ2VDb21wb25lbnQiLCJfb2JqZWN0U3ByZWFkIiwiTWVzc2FnZUNvbnRlbnRXcmFwcGVyIiwiX3JlZjIiLCJfZXhjbHVkZWQyIiwiTWVzc2FnZUNvbnRlbnRDb21wb25lbnQiLCJNZXNzYWdlT3B0aW9ucyIsIl9yZWYzIiwib3B0aW9ucyIsImhhbmRsZVNlbGVjdE9wdGlvbiIsIl91c2VTdGF0ZSIsIl91c2VTdGF0ZTIiLCJfc2xpY2VkVG9BcnJheSIsInNlbGVjdGVkT3B0aW9uIiwic2V0U2VsZWN0ZWRPcHRpb24iLCJoYW5kbGVTZWxlY3QiLCJvcHRpb24iLCJtYXAiLCIkaGFzU2VsZWN0aW9uIiwiJGRpbW1lZCIsImlkIiwib25DbGljayIsIm5hbWUiLCJBc3Npc3RhbnRNZXNzYWdlSGVhZGVyIiwiX3VzZUdsb2JhbENvbnRleHQyIiwiZGlzcGxheU5hbWUiLCJTdHJlYW1pbmdNZXNzYWdlQm9keSIsIl9wcm9wcyRjcmVhdGVBZ2VudEZvbCIsIl9wcm9wcyRzdWdnZXN0aW9ucyIsInN0cmVhbWluZ1RleHQiLCJpc1N0cmVhbWluZyIsIm1lc3NhZ2VJZCIsInJhd1RleHQiLCJtZXNzYWdlIiwid2luRmxhZ3MiLCJ3aW5kb3ciLCJkaXNwbGF5VGV4dCIsImVuYWJsZWQiLCJtYXhDaGFyc1BlckZyYW1lIiwic25hcFRvV29yZEJvdW5kYXJ5Iiwic3RyZWFtTGFnTXMiLCJ0YXJnZXRMYWdNcyIsInN0cmVhbUFkYXB0IiwiYWRhcHRUb0JhY2tlbmRSYXRlIiwic3RyZWFtQnVmZmVyTXMiLCJ0YXJnZXRCdWZmZXJNcyIsInN0cmVhbU1pbkJ1ZmZlciIsIm1pbkJ1ZmZlckNoYXJzIiwic3RyZWFtV2FybXVwTXMiLCJ3YXJtdXBNcyIsImNyZWF0ZUFnZW50QWN0aW9uc0FnZW50SWQiLCJjcmVhdGVBZ2VudEZvbGxvd1VwIiwiYWdlbnRJZCIsImhhc01lbnRpb25zIiwibWVudGlvbk5vZGVzIiwiaXNGcm9udGVuZENhbmNlbGxlZCIsImNsYXNzTmFtZSIsInN0eWxlIiwiZGlzcGxheSIsInBsdWdpbnMiLCJyZWh5cGVQbHVnaW5zIiwiY29tcG9uZW50cyIsImEiLCJsaW5rU2FmZXR5IiwiaXNBbmltYXRpbmciLCJzaGlraVRoZW1lIiwiY29udHJvbHMiLCJ0YWJsZSIsImlzQXNzaXN0YW50IiwiaXNFcnJvciIsImFwcHJvdmFsIiwiY29udGVudCIsInNvdXJjZXMiLCJoYW5kbGVGZWVkYmFjayIsImhhbmRsZUZlZWRiYWNrQ2xpY2siLCJkaXNhYmxlRmVlZGJhY2siLCJzdWdnZXN0aW9ucyIsImxlbmd0aCIsIm9uU2VsZWN0U3VnZ2VzdGlvbiIsInN1Z2dlc3Rpb24iLCJoYW5kbGVTdWdnZXN0aW9uQ2xpY2siLCJkaXNhYmxlZCIsInN1Z2dlc3Rpb25zRGlzYWJsZWQiLCJoaWRkZW4iLCJpc0xhc3RNZXNzYWdlIiwiTWVzc2FnZUl0ZW0iLCJfcHJvcHMkcHJvamVjdE1ldGFkYXQiLCJ1c2VyIiwiYXV0aFVzZXIiLCJpc0NoYW5nZVByb2plY3QiLCJoYW5kbGVBcHByb3ZhbERlY2lzaW9uIiwicm9sZSIsImF0dGFjaG1lbnRzIiwiYXBwcm92YWxTdGF0dXMiLCJoYXNTZWxlY3RlZFN1Z2dlc3Rpb24iLCJfdXNlU3RhdGUzIiwiX3VzZVN0YXRlNCIsInByZXZpZXdBdHRhY2htZW50Iiwic2V0UHJldmlld0F0dGFjaG1lbnQiLCJVU0VSIiwidG9TdHJpbmciLCJBU1NJU1RBTlQiLCJpc1N0cmVhbWluZ1BsYWNlaG9sZGVyIiwiaXNBY3RpdmVTdHJlYW1pbmciLCJpc1RoaW5raW5nIiwibWVzc2FnZUF0dGFjaG1lbnRzIiwiQXJyYXkiLCJpc0FycmF5IiwiaGFuZGxlQXR0YWNobWVudENsaWNrIiwiYXR0YWNobWVudCIsImZpbGUiLCJGaWxlIiwib3JpZ2luYWxGaWxlIiwidXJsX3RodW1ibmFpbCIsInVybF9vcmlnaW5hbCIsInVybF9maWxlIiwiaGFuZGxlQ2xvc2VQcmV2aWV3IiwiaGFuZGxlQXR0YWNobWVudERvd25sb2FkIiwiX3JlZjQiLCJfYXN5bmNUb0dlbmVyYXRvciIsIl9yZWdlbmVyYXRvclJ1bnRpbWUiLCJtYXJrIiwiX2NhbGxlZSIsImV4dGVuc2lvbiIsImZpbGVOYW1lIiwiZmlsZVVybCIsImJsb2JVcmwiLCJkb3dubG9hZGVkRmlsZSIsImxpbmsiLCJfdCIsIndyYXAiLCJfY29udGV4dCIsInByZXYiLCJuZXh0IiwiaW5jbHVkZXMiLCJjb25jYXQiLCJzZW50IiwiVVJMIiwiY3JlYXRlT2JqZWN0VVJMIiwiYWJydXB0IiwiZG9jdW1lbnQiLCJocmVmIiwiZG93bmxvYWQiLCJib2R5IiwiYXBwZW5kQ2hpbGQiLCJjbGljayIsInNldFRpbWVvdXQiLCJyZW1vdmVDaGlsZCIsInJldm9rZU9iamVjdFVSTCIsImNvbnNvbGUiLCJlcnJvciIsInN0b3AiLCJfeCIsImFwcGx5IiwiYXJndW1lbnRzIiwiaGFzRmVlZGJhY2siLCIkaXNBc3Npc3RhbnQiLCJtZXNzYWdlRXh0cmFDb250ZW50IiwiZmVlZGJhY2siLCJzZXNzaW9uSWQiLCJzcGxpdCIsImZpbHRlciIsInF1ZXN0aW9uSWQiLCJqb2luIiwiaW5kZXgiLCJfYXR0YWNobWVudCR0eXBlIiwiX2F0dGFjaG1lbnQkbmFtZSIsImF0dGFjaG1lbnRUeXBlIiwidG9Mb3dlckNhc2UiLCJhdHRhY2htZW50TmFtZSIsImlzQXVkaW9GaWxlIiwic3RhcnRzV2l0aCIsInNvbWUiLCJleHQiLCJlbmRzV2l0aCIsInBvc2l0aW9uSW5kZXgiLCJvbkRvd25sb2FkIiwicGVuZGluZ19hY3Rpb25zIiwiYWN0aW9ucyIsInN0YXR1cyIsIm9uQXBwcm92ZSIsInRocmVhZElkcyIsIm9uUmVqZWN0IiwiaXNQcm9qZWN0RGVsZXRlZCIsInByb2plY3RNZXRhZGF0YSIsImlzX2RlbGV0ZWQiLCJpc0V4cGFuZGVkIiwiZXhwYW5kZWQiLCJoaXRsSW5zdGFuY2VJZCIsIm9yaWdpbmFsX3RocmVhZF9pZCIsIndhcm5pbmdNZXNzYWdlIiwid2FybmluZ19tZXNzYWdlIiwibWFudWFsQXBwcm92YWxEZXRlY3RlZCIsIm1hbnVhbF9hcHByb3ZhbF9kZXRlY3RlZCIsImlzT3BlbiIsIm9uQ2xvc2UiLCJDaGF0QUlNZXNzYWdlc0lubmVyIiwiX3JlZjUiLCJ1c2VySW5pdGlhbE1lc3NhZ2UiLCJpbml0aWFsQ2hhdElkIiwib25FcnJvciIsIm9uU2VuZE1lc3NhZ2VSZWFkeSIsIm9uU2Nyb2xsVG9Cb3R0b20iLCJhZ2VudHMiLCJfdXNlVCIsInQiLCJfdXNlR2xvYmFsQ29udGV4dDMiLCJpc1dlYlNlYXJjaEFjdGl2ZSIsImlzRGVlcFNlYXJjaEFjdGl2ZSIsImV2ZW50IiwibWVzc2FnZXNSZWYiLCJjaGF0SW5pdGlhbGl6ZWRSZWYiLCJpc0xvYWRpbmdNb3JlUmVmIiwidXNlclNjcm9sbGluZ1JlZiIsInNjcm9sbFRocmVzaG9sZFJlZiIsImxhc3RTY3JvbGxUb3BSZWYiLCJzaG93U2Nyb2xsVG9Cb3R0b21SZWYiLCJzY3JvbGxSYWZSZWYiLCJfdXNlU3RhdGU1IiwiX3VzZVN0YXRlNiIsInNob3dTY3JvbGxUb0JvdHRvbSIsInNldFNob3dTY3JvbGxUb0JvdHRvbSIsIl91c2VTdGF0ZTciLCJfdXNlU3RhdGU4Iiwic2VsZWN0ZWRTdWdnZXN0aW9uTWVzc2FnZUlkcyIsInNldFNlbGVjdGVkU3VnZ2VzdGlvbk1lc3NhZ2VJZHMiLCJfdXNlQ2hhdE1hbmFnZXIiLCJjaGF0SWQiLCJ1bmRlZmluZWQiLCJtZXNzYWdlcyIsImxvYWRpbmdNZXNzYWdlcyIsImlzTG9hZGluZ01vcmVNZXNzYWdlcyIsIndhaXRpbmdSZXNwb25zZSIsImlzV3JpdGluZyIsImxvYWRpbmdNZXNzYWdlIiwic3RyZWFtQWN0aXZpdHkiLCJhY3RpdmVMb2FkaW5ncyIsInNlbmRNZXNzYWdlIiwiY2hhbmdlUHJvamVjdCIsImluaXRpYWxpemVDaGF0IiwiaGFuZGxlU2Nyb2xsIiwic3RvcEdlbmVyYXRpb24iLCJ0cmltIiwiaXNNYXJrZXRwbGFjZUdsb2JhbEFnZW50IiwiYWlDaGF0U3VnZ2VzdGVkQW5zd2VyIiwiYWdlbnRfdHlwZSIsIl9kZWZpbmVQcm9wZXJ0eSIsInRhcmdldE1lc3NhZ2UiLCJmaW5kIiwibXNnIiwiaXNSZXRyeVN1Z2dlc3Rpb24iLCJsYXN0VXNlck1lc3NhZ2UiLCJhdCIsInJldHJ5QXR0YWNobWVudHMiLCJlbnRpdHkiLCJ1cGRhdGVTY3JvbGxCb3R0b21WaXNpYmlsaXR5IiwiZWwiLCJjdXJyZW50Iiwic2Nyb2xsVG9wIiwic2Nyb2xsSGVpZ2h0IiwiY2xpZW50SGVpZ2h0IiwiZGlzdGFuY2VGcm9tQm90dG9tIiwic2hvdWxkU2hvdyIsInNjcm9sbFRvQm90dG9tUmFmIiwib3B0cyIsIl9vcHRzJHNraXBJZlVzZXJTY3JvbCIsInNraXBJZlVzZXJTY3JvbGxpbmciLCJfb3B0cyRkZWxheU1zIiwiZGVsYXlNcyIsInJ1biIsInJlcXVlc3RBbmltYXRpb25GcmFtZSIsImhhbmRsZUNsaWNrU2Nyb2xsVG9Cb3R0b20iLCJzY3JvbGxUbyIsInRvcCIsImJlaGF2aW9yIiwiaGFuZGxlQXBwcm92YWxEZWNpc2lvbldpdGhTY3JvbGwiLCJoYW5kbGVTY3JvbGxUb0JvdHRvbSIsImUiLCJjb250YWluZXIiLCJjdXJyZW50VGFyZ2V0IiwiY2FuY2VsQW5pbWF0aW9uRnJhbWUiLCJpc1Njcm9sbGluZ1VwIiwiaXNOZWFyQm90dG9tIiwic2VuZE1lc3NhZ2VSZWYiLCJzdG9wR2VuZXJhdGlvblJlZiIsIm9uU2VuZE1lc3NhZ2VSZWFkeVJlZiIsInNlbmRNZXNzYWdlUHJveHlSZWYiLCJmYXFJZCIsImFnZW50U3VnZ2VzdGlvbklkIiwibWVudGlvbnMiLCJmdWFJZCIsInNjSWQiLCJzdG9wR2VuZXJhdGlvblByb3h5UmVmIiwicmFmSWQiLCJsYXN0SGVpZ2h0IiwidGljayIsImN1cnJlbnRIZWlnaHQiLCJsYXN0TWVzc2FnZUlkUmVmIiwibGFzdE1lc3NhZ2VzTGVuZ3RoUmVmIiwiX2xhc3RNZXNzYWdlJGlkIiwibGFzdE1lc3NhZ2UiLCJsYXN0SWQiLCJwcmV2SWQiLCJwcmV2TGVuIiwiaXNOZXdNZXNzYWdlIiwiaXNBdEJvdHRvbSIsImhhc0luaXRpYWxNZXNzYWdlIiwiaXNBcHByb3ZhbCIsImlzQW5zd2VyT3JRdWVzdGlvbiIsImF0dGFjaG1lbnRzQ291bnQiLCJzdHJlYW1Mb2FkaW5nRGlzcGxheSIsImhhc0F0dGFjaG1lbnRzIiwiQm9vbGVhbiIsImlzU2Nyb2xsT25QYXJlbnQiLCJleHBhbmRlZFJlZiIsInNhdmVkU2Nyb2xsVG9wIiwiZmlsbCIsIm1lc3NhZ2VzQ29udGVudCIsInRleHQiLCJfbWVzc2FnZSRhdHRhY2htZW50cyIsIl9tZXNzYWdlJHNvdXJjZXMiLCJfbWVzc2FnZSRwcm9qZWN0IiwiX21lc3NhZ2UkaWQiLCJpc0Fzc2lzdGFudE1lc3NhZ2UiLCJwcm9qZWN0IiwibWVzc2FnZUZlZWRiYWNrIiwid2FzSGVscGZ1bCIsIlRIVU1CU19VUCIsIlRIVU1CU19ET1dOIiwibWVzc2FnZUtleSIsImtleSIsImFjdGl2aXR5IiwiJHNjcm9sbE9uUGFyZW50IiwicmVmIiwib25TY3JvbGwiLCIkaXNNYXJrZXRwbGFjZUdsb2JhbCIsImNvbG9yIiwiQ2hhdEFJTWVzc2FnZXMiXSwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50cy9tb2xlY3VsZXMvQ2hhdEFJTWVzc2FnZXMvQ2hhdEFJTWVzc2FnZXMudHN4Il0sInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIGltcG9ydC9uby1leHRyYW5lb3VzLWRlcGVuZGVuY2llcyAqL1xuLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L2luZGVudCAqL1xuLyogZXNsaW50LWRpc2FibGUgcmVhY3Qvbm8tdW5zdGFibGUtbmVzdGVkLWNvbXBvbmVudHMgKi9cbi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1zaGFkb3cgKi9cbi8qIGVzbGludC1kaXNhYmxlIG5vLW5lc3RlZC10ZXJuYXJ5ICovXG4vKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55ICovXG4vKiBlc2xpbnQtZGlzYWJsZSBuby11bmRlZiAqL1xuLyogZXNsaW50LWRpc2FibGUgcmVhY3QvZnVuY3Rpb24tY29tcG9uZW50LWRlZmluaXRpb24gKi9cbi8qIGVzbGludC1kaXNhYmxlIHJlYWN0L3JlcXVpcmUtZGVmYXVsdC1wcm9wcyAqL1xuLyogZXNsaW50LWRpc2FibGUganN4LWExMXkvY2xpY2stZXZlbnRzLWhhdmUta2V5LWV2ZW50cyAqL1xuLyogZXNsaW50LWRpc2FibGUganN4LWExMXkvbm8tc3RhdGljLWVsZW1lbnQtaW50ZXJhY3Rpb25zICovXG5pbXBvcnQgUmVhY3QsIHsgRkMsIG1lbW8sIFJlYWN0Tm9kZSwgdXNlQ2FsbGJhY2ssIHVzZUVmZmVjdCwgdXNlTGF5b3V0RWZmZWN0LCB1c2VSZWYsIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBTdHJlYW1kb3duIH0gZnJvbSAnc3RyZWFtZG93bidcbmltcG9ydCB7IGNyZWF0ZUNvZGVQbHVnaW4gfSBmcm9tICdAc3RyZWFtZG93bi9jb2RlJ1xuaW1wb3J0IHsgQXJyb3dTbWFsbERvd24gfSBmcm9tICdAcHJvamVjdGNvci9pY29ucy9saWIvY29tcG9uZW50cy9BcnJvd1NtYWxsRG93bidcblxuaW1wb3J0IHsgQXR0YWNobWVudENhcmQgfSBmcm9tICcuLi8uLi9hdG9tcy9BdHRhY2htZW50Q2FyZC9BdHRhY2htZW50Q2FyZCdcbmltcG9ydCB7IEFwcHJvdmFsQm94IH0gZnJvbSAnLi4vLi4vYXRvbXMvQXBwcm92YWxCb3gvQXBwcm92YWxCb3gnXG5pbXBvcnQgeyBBdHRhY2htZW50UHJldmlld01vZGFsIH0gZnJvbSAnLi4vLi4vYXRvbXMvQXR0YWNobWVudFByZXZpZXdNb2RhbCdcbmltcG9ydCB7IEF0dGFjaG1lbnRDYXJkQXVkaW8gfSBmcm9tICcuLi8uLi9hdG9tcy9BdHRhY2htZW50Q2FyZC9BdHRhY2htZW50Q2FyZEF1ZGlvJ1xuaW1wb3J0IHsgTUFJQU1lc3NhZ2VQcm9wcyB9IGZyb20gJy4uLy4uL2F0b21zL01BSUFNZXNzYWdlL01BSUFNZXNzYWdlLmludGVyZmFjZXMnXG5pbXBvcnQgeyBDaGF0TWVzc2FnZSwgQ2hhdEhpc3RvcnlSb2xlIH0gZnJvbSAnLi4vLi4vLi4vdHlwZXMvQ2hhdCdcbmltcG9ydCB7IE1BSUFfU1RSRUFNRE9XTl9SRUhZUEVfUExVR0lOUyB9IGZyb20gJy4uLy4uLy4uL3V0aWxzL21haWFTdHJlYW1kb3duUmVoeXBlUGx1Z2lucydcbmltcG9ydCB7IHJlbmRlclRleHRXaXRoTWVudGlvbnMsIGhhc0lubGluZU1hcmtlcnMgfSBmcm9tICcuLi8uLi8uLi91dGlscy9yZW5kZXJDb250ZXh0TWVudGlvbnMnXG5cbmltcG9ydCB7IGlzTWFpYWtlckFnZW50IH0gZnJvbSAnLi4vLi4vLi4vdXRpbHMvYWdlbnREaXNwbGF5TmFtZSdcbmltcG9ydCB7IENPUlVzZXIsIHVzZVVzZXIgfSBmcm9tICcuLi8uLi8uLi9jb250ZXh0L2Nvci11c2VyJ1xuXG5pbXBvcnQgeyB1c2VUIH0gZnJvbSAnLi4vLi4vLi4vaG9va3MvdXNlVCdcbmltcG9ydCB7IHVzZUNoYXRNYW5hZ2VyIH0gZnJvbSAnLi4vLi4vLi4vaG9va3MvdXNlQ2hhdE1hbmFnZXIvdXNlQ2hhdE1hbmFnZXInXG5pbXBvcnQgeyB1c2VTbW9vdGhTdHJlYW1UZXh0IH0gZnJvbSAnLi4vLi4vLi4vaG9va3MvdXNlU21vb3RoU3RyZWFtVGV4dCdcbmltcG9ydCB7IHVzZVN0cmVhbWluZ01lc3NhZ2UgfSBmcm9tICcuLi8uLi8uLi9ob29rcy91c2VTdHJlYW1pbmdNZXNzYWdlJ1xuXG5pbXBvcnQgeyBMb2FkaW5nVGV4dCB9IGZyb20gJy4uLy4uL2F0b21zL0xvYWRpbmdUZXh0J1xuaW1wb3J0IHsgQWdlbnRBY3Rpdml0eUluZGljYXRvciB9IGZyb20gJy4uLy4uL2F0b21zL0FnZW50QWN0aXZpdHlJbmRpY2F0b3InXG5pbXBvcnQgeyBpc1N0cmVhbWluZ1BsYWNlaG9sZGVyTWVzc2FnZUlkLCByZXNvbHZlU3RyZWFtTG9hZGluZ0Rpc3BsYXkgfSBmcm9tICcuLi8uLi8uLi91dGlscy9zdHJlYW1BY3Rpdml0eU1lc3NhZ2VzJ1xuaW1wb3J0IHsgTG9hZGVyIH0gZnJvbSAnLi4vLi4vYXRvbXMvTG9hZGVyJ1xuaW1wb3J0IHsgRmFkZSB9IGZyb20gJy4uLy4uL2F0b21zL0ZhZGUnXG5cbmltcG9ydCB7IFByb2plY3QgfSBmcm9tICcuLi8uLi8uLi90eXBlcy9Qcm9qZWN0J1xuXG5pbXBvcnQgeyBNZXNzYWdlRnJvbVVzZXIsIE1lc3NhZ2VGcm9tT3RoZXIsIE1lc3NhZ2VDb250ZW50RnJvbVVzZXIsIE1lc3NhZ2VDb250ZW50RnJvbU90aGVyIH0gZnJvbSAnLi9zdHlsZXMnXG5pbXBvcnQgeyBNZXNzYWdlRmVlZGJhY2sgfSBmcm9tICcuLi9NZXNzYWdlRmVlZGJhY2snXG5pbXBvcnQge1xuICBTQ0NBSU1lc3NhZ2VXcmFwcGVyLFxuICBTY3JvbGxUb0JvdHRvbUJ1dHRvbixcbiAgU0NNZXNzYWdlc091dGVyLFxuICBTQ01lc3NhZ2VzU2Nyb2xsLFxuICBTQ01lc3NhZ2VzSW5uZXIsXG4gIFNDTG9hZGluZ01lc3NhZ2VzQ29sdW1uLFxuICBTQ09wdGlvbnNMaXN0LFxuICBTQ09wdGlvbkl0ZW0sXG4gIFNDQXNzaXN0YW50TWVzc2FnZUhlYWRlcixcbiAgU0NBc3Npc3RhbnROYW1lLFxuICBTQ0Fzc2lzdGFudEF2YXRhcixcbiAgU0NNZXNzYWdlSXRlbVdyYXBwZXIsXG4gIFNDTWVzc2FnZUl0ZW1Jbm5lcixcbiAgU0NBdHRhY2htZW50c1JvdyxcbiAgU0NBcHByb3ZhbEFjdGlvbnNDb2x1bW4sXG59IGZyb20gJy4vbmV3U3R5bGVzJ1xuaW1wb3J0IHsgRmVlZGJhY2sgfSBmcm9tICcuLi9NZXNzYWdlRmVlZGJhY2svTWVzc2FnZUZlZWRiYWNrJ1xuaW1wb3J0IHsgdXNlR2xvYmFsQ29udGV4dCB9IGZyb20gJy4uLy4uLy4uL2NvbnRleHQvZ2xvYmFsLWNvbnRleHQnXG5pbXBvcnQgeyBBZ2VudCB9IGZyb20gJy4uLy4uLy4uL3R5cGVzL2FnZW50J1xuaW1wb3J0IHsgQXR0YWNobWVudEZpbGUgfSBmcm9tICcuLi9DaGF0Rm9vdGVyL0NoYXRGb290ZXInXG5pbXBvcnQgeyBDb250ZXh0TWVudGlvbiB9IGZyb20gJy4uLy4uLy4uL3R5cGVzL2NvbnRleHRNZW50aW9uJ1xuaW1wb3J0IHsgTUFJQUljb24gfSBmcm9tICcuLi8uLi9hdG9tcy9pY29ucydcbmltcG9ydCB7IEVudGl0eUxpbmtDdXN0b21MaW5rLCBnZXRFbnRpdHlMaW5rV3JhcHBlckNsYXNzTmFtZSB9IGZyb20gJy4uLy4uLy4uL3V0aWxzL2VudGl0eUxpbmtSZW5kZXInXG5pbXBvcnQgeyBDaGF0QUlTdWdnZXN0aW9ucyB9IGZyb20gJy4vQ2hhdEFJU3VnZ2VzdGlvbnMnXG5pbXBvcnQgeyBDaGF0QUlDcmVhdGVBZ2VudEFjdGlvbnMgfSBmcm9tICcuL0NoYXRBSUNyZWF0ZUFnZW50QWN0aW9ucydcbmltcG9ydCB7IEVWRU5UUywgdXNlRXZlbnQgfSBmcm9tICcuLi8uLi8uLi9ob29rcy91c2VFdmVudCdcbmltcG9ydCB7IGRvd25sb2FkRmlsZUZyb21VcmwgfSBmcm9tICcuLi8uLi8uLi91dGlscy9maWxlRG93bmxvYWRIZWxwZXInXG5cbmNvbnN0IGNvZGUgPSBjcmVhdGVDb2RlUGx1Z2luKHsgdGhlbWVzOiBbJ2dpdGh1Yi1saWdodCcsICdnaXRodWItbGlnaHQnXSB9KVxuXG5jb25zdCBBc3Npc3RhbnRBdmF0YXJJbm5lcjogRkMgPSAoKSA9PiB7XG4gIGNvbnN0IHsgYWdlbnQgfSA9IHVzZUdsb2JhbENvbnRleHQoKVxuICByZXR1cm4gKFxuICAgIDxTQ0Fzc2lzdGFudEF2YXRhcj5cbiAgICAgIHthZ2VudD8udHlwZSA9PT0gJ2Nsb25lJyB8fCBhZ2VudD8udHlwZSA9PT0gJ29yY2hlc3RyYXRvcicgfHwgYWdlbnQ/LmlzX2xlZ2FjeV9jb250ZXh0ID8gKFxuICAgICAgICA8TUFJQUljb24gd2lkdGg9ezE4fSBoZWlnaHQ9ezE4fSAvPlxuICAgICAgKSA6IChcbiAgICAgICAgYWdlbnQ/LmVtb2ppXG4gICAgICApfVxuICAgIDwvU0NBc3Npc3RhbnRBdmF0YXI+XG4gIClcbn1cblxuY29uc3QgQXNzaXN0YW50QXZhdGFyID0gbWVtbyhBc3Npc3RhbnRBdmF0YXJJbm5lcilcblxudHlwZSBDaGF0QUlNZXNzYWdlc1Byb3BzID0ge1xuICB1c2VySW5pdGlhbE1lc3NhZ2U6IHtcbiAgICBtZXNzYWdlOiBzdHJpbmdcbiAgICBhdHRhY2htZW50czogQXR0YWNobWVudEZpbGVbXVxuICAgIGZhcUlkPzogc3RyaW5nXG4gICAgYWdlbnRTdWdnZXN0aW9uSWQ/OiBzdHJpbmdcbiAgICBtZW50aW9ucz86IENvbnRleHRNZW50aW9uW11cbiAgICBmdWFJZD86IHN0cmluZ1xuICAgIHNjSWQ/OiBzdHJpbmdcbiAgfVxuICBpbml0aWFsQ2hhdElkOiBzdHJpbmcgfCBudWxsXG4gIG9uRXJyb3I6ICgpID0+IHZvaWRcbiAgb25TZW5kTWVzc2FnZVJlYWR5PzogKFxuICAgIHNlbmRNZXNzYWdlOiAoXG4gICAgICBtZXNzYWdlOiBzdHJpbmcsXG4gICAgICBhdHRhY2htZW50cz86IEF0dGFjaG1lbnRGaWxlW10sXG4gICAgICBmYXFJZD86IHN0cmluZyxcbiAgICAgIGFnZW50U3VnZ2VzdGlvbklkPzogc3RyaW5nLFxuICAgICAgbWVudGlvbnM/OiBDb250ZXh0TWVudGlvbltdLFxuICAgICAgZnVhSWQ/OiBzdHJpbmcsXG4gICAgICBzY0lkPzogc3RyaW5nXG4gICAgKSA9PiB2b2lkLFxuICAgIHN0b3BHZW5lcmF0aW9uOiAoKSA9PiB2b2lkLFxuICAgIGlzU3RyZWFtaW5nOiBib29sZWFuLFxuICAgIGlzV3JpdGluZzogYm9vbGVhblxuICApID0+IHZvaWRcbiAgaXNEaXNhYmxlZD86IGJvb2xlYW5cbiAgb25TY3JvbGxUb0JvdHRvbT86ICgpID0+IHZvaWRcbiAgYXR0YWNobWVudHM/OiBBdHRhY2htZW50RmlsZVtdXG4gIGFnZW50cz86IEFnZW50W11cbiAgZXhwYW5kZWQ/OiBib29sZWFuXG59XG5cbnR5cGUgTWVzc2FnZUl0ZW1Qcm9wcyA9IENoYXRNZXNzYWdlICYge1xuICBhdXRoVXNlcjogQ09SVXNlclxuICBoYW5kbGVTZWxlY3RPcHRpb246IChvcHRpb246IFByb2plY3QpID0+IHZvaWRcbiAgaGFuZGxlU3VnZ2VzdGlvbkNsaWNrOiAobWVzc2FnZUlkOiBzdHJpbmcsIHN1Z2dlc3Rpb246IHN0cmluZykgPT4gdm9pZFxuICBoYXNTZWxlY3RlZFN1Z2dlc3Rpb24/OiBib29sZWFuXG4gIGhhbmRsZUZlZWRiYWNrOiAoZmVlZGJhY2s6IEZlZWRiYWNrLCBjaGF0TWVzc2FnZUlkOiBzdHJpbmcpID0+IHZvaWRcbiAgaGFuZGxlQXBwcm92YWxEZWNpc2lvbjogKHRocmVhZElkczogc3RyaW5nW10sIGRlY2lzaW9uOiAnYXBwcm92ZScgfCAncmVqZWN0JykgPT4gdm9pZFxuICBkaXNhYmxlRmVlZGJhY2s/OiBGZWVkYmFjayB8IG51bGxcbiAgc291cmNlcz86IGFueVxuICBhdHRhY2htZW50cz86IEF0dGFjaG1lbnRGaWxlW11cbiAgaXNTdHJlYW1pbmc/OiBib29sZWFuXG4gIGlzTGFzdE1lc3NhZ2U/OiBib29sZWFuXG4gIGV4cGFuZGVkPzogYm9vbGVhblxufVxuXG5pbnRlcmZhY2UgTWVzc2FnZVdyYXBwZXJQcm9wcyB7XG4gIGlzQ3VycmVudFVzZXI6IGJvb2xlYW5cbiAgY2hpbGRyZW46IFJlYWN0Tm9kZVxuICAnZGF0YS1tZXNzYWdlLWlkJz86IHN0cmluZ1xuICBoYXNGZWVkYmFjaz86IGJvb2xlYW5cbn1cblxudHlwZSBNZXNzYWdlQ29udGVudFdyYXBwZXJQcm9wcyA9IE1BSUFNZXNzYWdlUHJvcHMgJiB7XG4gIGlzQ3VycmVudFVzZXI6IGJvb2xlYW5cbiAgaXNFcnJvcj86IGJvb2xlYW5cbiAgaXNDaGFuZ2VQcm9qZWN0PzogYm9vbGVhblxufVxuXG5jb25zdCBNZXNzYWdlV3JhcHBlcjogRkM8TWVzc2FnZVdyYXBwZXJQcm9wcz4gPSAoeyBpc0N1cnJlbnRVc2VyLCBjaGlsZHJlbiwgLi4ucHJvcHMgfSkgPT4ge1xuICBjb25zdCBNZXNzYWdlQ29tcG9uZW50ID0gaXNDdXJyZW50VXNlciA/IE1lc3NhZ2VGcm9tVXNlciA6IE1lc3NhZ2VGcm9tT3RoZXJcbiAgcmV0dXJuIDxNZXNzYWdlQ29tcG9uZW50IHsuLi5wcm9wc30+e2NoaWxkcmVufTwvTWVzc2FnZUNvbXBvbmVudD5cbn1cblxuY29uc3QgTWVzc2FnZUNvbnRlbnRXcmFwcGVyOiBGQzxNZXNzYWdlQ29udGVudFdyYXBwZXJQcm9wcz4gPSAoeyBpc0N1cnJlbnRVc2VyLCAuLi5wcm9wcyB9KSA9PiB7XG4gIGNvbnN0IE1lc3NhZ2VDb250ZW50Q29tcG9uZW50ID0gaXNDdXJyZW50VXNlciA/IE1lc3NhZ2VDb250ZW50RnJvbVVzZXIgOiBNZXNzYWdlQ29udGVudEZyb21PdGhlclxuICByZXR1cm4gPE1lc3NhZ2VDb250ZW50Q29tcG9uZW50IHsuLi5wcm9wc30gLz5cbn1cblxuZnVuY3Rpb24gTWVzc2FnZU9wdGlvbnMoe1xuICBvcHRpb25zLFxuICBoYW5kbGVTZWxlY3RPcHRpb24sXG59OiB7XG4gIG9wdGlvbnM6IFByb2plY3RbXSB8IG51bGxcbiAgaGFuZGxlU2VsZWN0T3B0aW9uOiAob3B0aW9uOiBQcm9qZWN0KSA9PiB2b2lkXG59KSB7XG4gIGNvbnN0IFtzZWxlY3RlZE9wdGlvbiwgc2V0U2VsZWN0ZWRPcHRpb25dID0gdXNlU3RhdGU8UHJvamVjdCB8IG51bGw+KG51bGwpXG5cbiAgY29uc3QgaGFuZGxlU2VsZWN0ID0gKG9wdGlvbjogUHJvamVjdCkgPT4ge1xuICAgIGlmIChzZWxlY3RlZE9wdGlvbikgcmV0dXJuXG4gICAgc2V0U2VsZWN0ZWRPcHRpb24ob3B0aW9uKVxuICAgIGhhbmRsZVNlbGVjdE9wdGlvbihvcHRpb24pXG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxTQ09wdGlvbnNMaXN0PlxuICAgICAgeyhvcHRpb25zIHx8IFtdKS5tYXAob3B0aW9uID0+IChcbiAgICAgICAgPFNDT3B0aW9uSXRlbVxuICAgICAgICAgICRoYXNTZWxlY3Rpb249eyEhc2VsZWN0ZWRPcHRpb259XG4gICAgICAgICAgJGRpbW1lZD17ISFzZWxlY3RlZE9wdGlvbiAmJiBzZWxlY3RlZE9wdGlvbj8uaWQgIT09IG9wdGlvbi5pZH1cbiAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBoYW5kbGVTZWxlY3Qob3B0aW9uKX1cbiAgICAgICAgICBrZXk9e29wdGlvbi5pZH1cbiAgICAgICAgPlxuICAgICAgICAgIHtvcHRpb24ubmFtZX1cbiAgICAgICAgPC9TQ09wdGlvbkl0ZW0+XG4gICAgICApKX1cbiAgICA8L1NDT3B0aW9uc0xpc3Q+XG4gIClcbn1cblxuY29uc3QgQXNzaXN0YW50TWVzc2FnZUhlYWRlciA9ICgpID0+IHtcbiAgY29uc3QgeyBhZ2VudCB9ID0gdXNlR2xvYmFsQ29udGV4dCgpXG5cbiAgLy8gU2llbXByZSAnTUFJQScgcGFyYSBjbG9uZS9vcmNoZXN0cmF0b3IgKG51bmNhIGVsIG5vbWJyZSBkZWwgc3ViYWdlbnRlIHF1ZVxuICAvLyByZXNwb25kacOzKTsgcGFyYSBjdXN0b20sIGVsIG5vbWJyZSBkZWwgYWdlbnRlLlxuICBjb25zdCBkaXNwbGF5TmFtZSA9IGFnZW50Py50eXBlID09PSAnY2xvbmUnIHx8IGFnZW50Py50eXBlID09PSAnb3JjaGVzdHJhdG9yJyA/ICdNQUlBJyA6IGFnZW50Py5uYW1lXG5cbiAgcmV0dXJuIChcbiAgICA8U0NBc3Npc3RhbnRNZXNzYWdlSGVhZGVyPlxuICAgICAgPEFzc2lzdGFudEF2YXRhciAvPlxuICAgICAge2Rpc3BsYXlOYW1lICYmIDxTQ0Fzc2lzdGFudE5hbWU+e2Rpc3BsYXlOYW1lfTwvU0NBc3Npc3RhbnROYW1lPn1cbiAgICA8L1NDQXNzaXN0YW50TWVzc2FnZUhlYWRlcj5cbiAgKVxufVxuXG4vKiogU29sbyBlc3RlIGNvbXBvbmVudGUgcmUtcmVuZGVyaXphIGN1YW5kbyBjYW1iaWEgZWwgdGV4dG8gZW4gc3RyZWFtaW5nIChsZWUgZGVsIGNvbnRleHQpLiAqL1xuY29uc3QgU3RyZWFtaW5nTWVzc2FnZUJvZHkgPSBtZW1vKFxuICAocHJvcHM6IHtcbiAgICBtZXNzYWdlOiBzdHJpbmdcbiAgICBpc1N0cmVhbWluZzogYm9vbGVhblxuICAgIGlzQ3VycmVudFVzZXI6IGJvb2xlYW5cbiAgICBpc0Fzc2lzdGFudDogYm9vbGVhblxuICAgIGlzRnJvbnRlbmRDYW5jZWxsZWQ/OiBib29sZWFuXG4gICAgYXBwcm92YWw/OiBNZXNzYWdlSXRlbVByb3BzWydhcHByb3ZhbCddXG4gICAgaXNFcnJvcj86IGJvb2xlYW5cbiAgICBzb3VyY2VzPzogTWVzc2FnZUl0ZW1Qcm9wc1snc291cmNlcyddXG4gICAgc3VnZ2VzdGlvbnM/OiBzdHJpbmdbXSB8IG51bGxcbiAgICBjcmVhdGVBZ2VudEZvbGxvd1VwPzogeyBhZ2VudElkOiBzdHJpbmcgfSB8IG51bGxcbiAgICBoYW5kbGVGZWVkYmFja0NsaWNrOiAoZjogRmVlZGJhY2spID0+IHZvaWRcbiAgICBkaXNhYmxlRmVlZGJhY2s6IEZlZWRiYWNrIHwgbnVsbFxuICAgIGhhbmRsZVN1Z2dlc3Rpb25DbGljazogKG1lc3NhZ2VJZDogc3RyaW5nLCBzdWdnZXN0aW9uOiBzdHJpbmcpID0+IHZvaWRcbiAgICBzdWdnZXN0aW9uc0Rpc2FibGVkPzogYm9vbGVhblxuICAgIG1lc3NhZ2VJZDogc3RyaW5nXG4gICAgaXNMYXN0TWVzc2FnZT86IGJvb2xlYW5cbiAgfSkgPT4ge1xuICAgIC8vIFRleHRvIGRlbCBzdHJlYW06IHNvbG8gc2UgbGVlIGRlbCBzdG9yZSBjdWFuZG8gZXN0ZSBtZW5zYWplIGVzIGVsXG4gICAgLy8gcXVlIGVzdMOhIGVuIHN0cmVhbWluZy4gdXNlU3luY0V4dGVybmFsU3RvcmUgYcOtc2xhIGVsIHJlLXJlbmRlciBhXG4gICAgLy8gZXN0ZSBjb21wb25lbnRlLCBzaW4gdG9jYXIgZWwgcmVzdG8gZGVsIMOhcmJvbC5cbiAgICBjb25zdCBzdHJlYW1pbmdUZXh0ID0gdXNlU3RyZWFtaW5nTWVzc2FnZShwcm9wcy5pc1N0cmVhbWluZyA/IHByb3BzLm1lc3NhZ2VJZCA6IG51bGwpXG4gICAgY29uc3QgcmF3VGV4dCA9IHByb3BzLmlzU3RyZWFtaW5nID8gc3RyZWFtaW5nVGV4dCA6IHByb3BzLm1lc3NhZ2VcbiAgICAvLyBTbW9vdGggc3RyZWFtaW5nOiBkZXNhY29wbGEgbGEgY2FkZW5jaWEgZGVsIGJhY2tlbmQgZGVsIHJlbmRlci5cbiAgICAvLyBEdXJhbnRlIGVsIHN0cmVhbWluZyBsaWJlcmEgY2hhcnMgYSByaXRtbyBjb25zdGFudGUgdsOtYSByQUY7IGN1YW5kb1xuICAgIC8vIHRlcm1pbmEsIG11ZXN0cmEgZWwgdGV4dG8gZmluYWwgYWwgaW5zdGFudGUgKHNpbiBhbmltYWNpw7NuIHJlc2lkdWFsKS5cbiAgICAvLyBMb3MgZGVmYXVsdHMgZGVsIGhvb2sgc2UgYWp1c3Rhcm9uIGVtcMOtcmljYW1lbnRlIGVuIHN0YWdpbmc7IGF1biBhc8OtXG4gICAgLy8gc2UgZXhwb25lbiBmbGFncyBkZSBydW50aW1lICh3aW5kb3cuKikgcGFyYSBwb2RlciB0dW5lYXIgc2luIHJlY29tcGlsYXJcbiAgICAvLyBzaSBhbGfDum4gYmFja2VuZCBwcmVzZW50YSB1bmEgY2FkZW5jaWEgbXV5IGRpc3RpbnRhIGVuIHByb2R1Y2Npw7NuLlxuICAgIC8vICAgd2luZG93LnN0cmVhbUFkYXB0ID0gZmFsc2UgICAgICAvLyBkZXNhY3RpdmEgYWRhcHRhY2nDs24gYWwgYmFja2VuZFxuICAgIC8vICAgd2luZG93LnN0cmVhbUJ1ZmZlck1zID0gNjAwICAgICAvLyBjb2xjaMOzbiBvYmpldGl2byAobXMpXG4gICAgLy8gICB3aW5kb3cuc3RyZWFtTGFnTXMgPSA0NTAgICAgICAgIC8vIGxhZyBtw6F4aW1vIGJhc2UgKG1zKVxuICAgIC8vICAgd2luZG93LnN0cmVhbU1pbkJ1ZmZlciA9IDcwICAgICAvLyBwaXNvIGRlbCBjb2xjaMOzbiBlbiBjaGFyc1xuICAgIC8vICAgd2luZG93LnN0cmVhbVdhcm11cE1zID0gNDAwICAgICAvLyB3YXJtdXAgaW5pY2lhbCAobXMpXG4gICAgY29uc3Qgd2luRmxhZ3MgPVxuICAgICAgdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAgPyAod2luZG93IGFzIHVua25vd24gYXMge1xuICAgICAgICAgICAgc3RyZWFtQWRhcHQ/OiBib29sZWFuXG4gICAgICAgICAgICBzdHJlYW1CdWZmZXJNcz86IG51bWJlclxuICAgICAgICAgICAgc3RyZWFtTGFnTXM/OiBudW1iZXJcbiAgICAgICAgICAgIHN0cmVhbU1pbkJ1ZmZlcj86IG51bWJlclxuICAgICAgICAgICAgc3RyZWFtV2FybXVwTXM/OiBudW1iZXJcbiAgICAgICAgICB9KVxuICAgICAgICA6IHt9XG4gICAgY29uc3QgZGlzcGxheVRleHQgPSB1c2VTbW9vdGhTdHJlYW1UZXh0KHJhd1RleHQsIHtcbiAgICAgIGVuYWJsZWQ6ICEhcHJvcHMuaXNTdHJlYW1pbmcsXG4gICAgICBtYXhDaGFyc1BlckZyYW1lOiAyNCxcbiAgICAgIHNuYXBUb1dvcmRCb3VuZGFyeTogdHJ1ZSxcbiAgICAgIC4uLih3aW5GbGFncy5zdHJlYW1MYWdNcyAhPSBudWxsICYmIHsgdGFyZ2V0TGFnTXM6IHdpbkZsYWdzLnN0cmVhbUxhZ01zIH0pLFxuICAgICAgLi4uKHdpbkZsYWdzLnN0cmVhbUFkYXB0ICE9IG51bGwgJiYgeyBhZGFwdFRvQmFja2VuZFJhdGU6IHdpbkZsYWdzLnN0cmVhbUFkYXB0IH0pLFxuICAgICAgLi4uKHdpbkZsYWdzLnN0cmVhbUJ1ZmZlck1zICE9IG51bGwgJiYgeyB0YXJnZXRCdWZmZXJNczogd2luRmxhZ3Muc3RyZWFtQnVmZmVyTXMgfSksXG4gICAgICAuLi4od2luRmxhZ3Muc3RyZWFtTWluQnVmZmVyICE9IG51bGwgJiYgeyBtaW5CdWZmZXJDaGFyczogd2luRmxhZ3Muc3RyZWFtTWluQnVmZmVyIH0pLFxuICAgICAgLi4uKHdpbkZsYWdzLnN0cmVhbVdhcm11cE1zICE9IG51bGwgJiYgeyB3YXJtdXBNczogd2luRmxhZ3Muc3RyZWFtV2FybXVwTXMgfSksXG4gICAgfSlcbiAgICBjb25zdCBjcmVhdGVBZ2VudEFjdGlvbnNBZ2VudElkID0gcHJvcHMuY3JlYXRlQWdlbnRGb2xsb3dVcD8uYWdlbnRJZFxuXG4gICAgaWYgKCFkaXNwbGF5VGV4dCAmJiAhcHJvcHMuaXNTdHJlYW1pbmcpIHJldHVybiBudWxsXG4gICAgY29uc3QgaGFzTWVudGlvbnMgPSBoYXNJbmxpbmVNYXJrZXJzKGRpc3BsYXlUZXh0KVxuICAgIGNvbnN0IG1lbnRpb25Ob2RlcyA9IGhhc01lbnRpb25zID8gcmVuZGVyVGV4dFdpdGhNZW50aW9ucyhkaXNwbGF5VGV4dCkgOiBudWxsXG4gICAgcmV0dXJuIChcbiAgICAgIDw+XG4gICAgICAgIDxTQ0NBSU1lc3NhZ2VXcmFwcGVyXG4gICAgICAgICAgaXNDdXJyZW50VXNlcj17cHJvcHMuaXNDdXJyZW50VXNlcn1cbiAgICAgICAgICBpc0Zyb250ZW5kQ2FuY2VsbGVkPXtwcm9wcy5pc0Zyb250ZW5kQ2FuY2VsbGVkfVxuICAgICAgICAgIGNsYXNzTmFtZT17Z2V0RW50aXR5TGlua1dyYXBwZXJDbGFzc05hbWUoZGlzcGxheVRleHQpfVxuICAgICAgICA+XG4gICAgICAgICAge2hhc01lbnRpb25zICYmIG1lbnRpb25Ob2RlcyA/IChcbiAgICAgICAgICAgIC8vIFNpIGhheSBtZW50aW9ucywgcmVuZGVyaXphciBkaXJlY3RhbWVudGUgKHNpbiBtYXJrZG93biBlbiBlbCBtaXNtbyBww6FycmFmbylcbiAgICAgICAgICAgIDxzcGFuIHN0eWxlPXt7IGRpc3BsYXk6ICdpbmxpbmUnIH19PnttZW50aW9uTm9kZXN9PC9zcGFuPlxuICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAvLyBTaW4gbWVudGlvbnMsIHBhc2FyIGEgU3RyZWFtZG93biBwYXJhIG1hcmtkb3duIHN1cHBvcnRcbiAgICAgICAgICAgIDxTdHJlYW1kb3duXG4gICAgICAgICAgICAgIHBsdWdpbnM9e3sgY29kZSB9fVxuICAgICAgICAgICAgICByZWh5cGVQbHVnaW5zPXtNQUlBX1NUUkVBTURPV05fUkVIWVBFX1BMVUdJTlN9XG4gICAgICAgICAgICAgIGNvbXBvbmVudHM9e3sgYTogRW50aXR5TGlua0N1c3RvbUxpbmsgfSBhcyBQYXJhbWV0ZXJzPHR5cGVvZiBTdHJlYW1kb3duPlswXVsnY29tcG9uZW50cyddfVxuICAgICAgICAgICAgICBsaW5rU2FmZXR5PXt7IGVuYWJsZWQ6IGZhbHNlIH19XG4gICAgICAgICAgICAgIGlzQW5pbWF0aW5nPXshIXByb3BzLmlzU3RyZWFtaW5nfVxuICAgICAgICAgICAgICBzaGlraVRoZW1lPXtbJ2dpdGh1Yi1saWdodCcsICdnaXRodWItbGlnaHQnXX1cbiAgICAgICAgICAgICAgY29udHJvbHM9e3sgdGFibGU6IGZhbHNlLCBjb2RlOiBmYWxzZSB9fVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7ZGlzcGxheVRleHR9XG4gICAgICAgICAgICA8L1N0cmVhbWRvd24+XG4gICAgICAgICAgKX1cbiAgICAgICAgPC9TQ0NBSU1lc3NhZ2VXcmFwcGVyPlxuICAgICAgICB7cHJvcHMuaXNBc3Npc3RhbnQgJiYgIXByb3BzLmlzRXJyb3IgJiYgIXByb3BzLmlzRnJvbnRlbmRDYW5jZWxsZWQgJiYgIXByb3BzLmFwcHJvdmFsICYmICFwcm9wcy5pc1N0cmVhbWluZyAmJiAoXG4gICAgICAgICAgPE1lc3NhZ2VGZWVkYmFja1xuICAgICAgICAgICAgY29udGVudD17ZGlzcGxheVRleHR9XG4gICAgICAgICAgICBzb3VyY2VzPXtwcm9wcy5zb3VyY2VzfVxuICAgICAgICAgICAgaGFuZGxlRmVlZGJhY2s9e3Byb3BzLmhhbmRsZUZlZWRiYWNrQ2xpY2t9XG4gICAgICAgICAgICBkaXNhYmxlRmVlZGJhY2s9e3Byb3BzLmRpc2FibGVGZWVkYmFja31cbiAgICAgICAgICAvPlxuICAgICAgICApfVxuICAgICAgICB7cHJvcHMuaXNBc3Npc3RhbnQgJiZcbiAgICAgICAgICAhcHJvcHMuaXNGcm9udGVuZENhbmNlbGxlZCAmJlxuICAgICAgICAgICFwcm9wcy5hcHByb3ZhbCAmJlxuICAgICAgICAgICghcHJvcHMuaXNFcnJvciB8fCBwcm9wcy5zdWdnZXN0aW9ucz8ubGVuZ3RoKSAmJiAoXG4gICAgICAgICAgICA8Q2hhdEFJU3VnZ2VzdGlvbnNcbiAgICAgICAgICAgICAgc3VnZ2VzdGlvbnM9e3Byb3BzLnN1Z2dlc3Rpb25zIHx8IFtdfVxuICAgICAgICAgICAgICBvblNlbGVjdFN1Z2dlc3Rpb249e3N1Z2dlc3Rpb24gPT4gcHJvcHMuaGFuZGxlU3VnZ2VzdGlvbkNsaWNrKHByb3BzLm1lc3NhZ2VJZCwgc3VnZ2VzdGlvbil9XG4gICAgICAgICAgICAgIGRpc2FibGVkPXtwcm9wcy5zdWdnZXN0aW9uc0Rpc2FibGVkfVxuICAgICAgICAgICAgICBoaWRkZW49eyEhcHJvcHMuaXNTdHJlYW1pbmcgfHwgIXByb3BzLmlzTGFzdE1lc3NhZ2UgfHwgISFwcm9wcy5zdWdnZXN0aW9uc0Rpc2FibGVkfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICApfVxuICAgICAgICB7cHJvcHMuaXNBc3Npc3RhbnQgJiZcbiAgICAgICAgICAhcHJvcHMuaXNFcnJvciAmJlxuICAgICAgICAgICFwcm9wcy5pc0Zyb250ZW5kQ2FuY2VsbGVkICYmXG4gICAgICAgICAgIXByb3BzLmFwcHJvdmFsICYmXG4gICAgICAgICAgISFjcmVhdGVBZ2VudEFjdGlvbnNBZ2VudElkICYmIChcbiAgICAgICAgICAgIDxDaGF0QUlDcmVhdGVBZ2VudEFjdGlvbnNcbiAgICAgICAgICAgICAgYWdlbnRJZD17Y3JlYXRlQWdlbnRBY3Rpb25zQWdlbnRJZH1cbiAgICAgICAgICAgICAgZGlzYWJsZWQ9e3Byb3BzLnN1Z2dlc3Rpb25zRGlzYWJsZWR9XG4gICAgICAgICAgICAgIGhpZGRlbj17ISFwcm9wcy5pc1N0cmVhbWluZyB8fCAhcHJvcHMuaXNMYXN0TWVzc2FnZSB8fCAhIXByb3BzLnN1Z2dlc3Rpb25zRGlzYWJsZWR9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICl9XG4gICAgICA8Lz5cbiAgICApXG4gIH1cbilcblxuY29uc3QgTWVzc2FnZUl0ZW0gPSBtZW1vKChwcm9wczogTWVzc2FnZUl0ZW1Qcm9wcykgPT4ge1xuICBjb25zdCB7XG4gICAgaWQsXG4gICAgdXNlcixcbiAgICBtZXNzYWdlLFxuICAgIGlzU3RyZWFtaW5nLFxuICAgIGlzRXJyb3IsXG4gICAgYXV0aFVzZXIsXG4gICAgb3B0aW9ucyxcbiAgICBpc0NoYW5nZVByb2plY3QsXG4gICAgaGFuZGxlU2VsZWN0T3B0aW9uLFxuICAgIGhhbmRsZVN1Z2dlc3Rpb25DbGljayxcbiAgICBoYW5kbGVGZWVkYmFjayxcbiAgICBoYW5kbGVBcHByb3ZhbERlY2lzaW9uLFxuICAgIGRpc2FibGVGZWVkYmFjayxcbiAgICByb2xlLFxuICAgIHNvdXJjZXMsXG4gICAgYXR0YWNobWVudHMsXG4gICAgYXBwcm92YWwsXG4gICAgYXBwcm92YWxTdGF0dXMsXG4gICAgc3VnZ2VzdGlvbnMsXG4gICAgY3JlYXRlQWdlbnRGb2xsb3dVcCxcbiAgICBoYXNTZWxlY3RlZFN1Z2dlc3Rpb24sXG4gICAgaXNMYXN0TWVzc2FnZSxcbiAgfSA9IHByb3BzXG5cbiAgY29uc3QgW3ByZXZpZXdBdHRhY2htZW50LCBzZXRQcmV2aWV3QXR0YWNobWVudF0gPSB1c2VTdGF0ZTxBdHRhY2htZW50RmlsZSB8IG51bGw+KG51bGwpXG4gIGNvbnN0IGlzQ3VycmVudFVzZXIgPSByb2xlID09PSBDaGF0SGlzdG9yeVJvbGUuVVNFUiB8fCB1c2VyLmlkID09PSBhdXRoVXNlci5pZC50b1N0cmluZygpXG4gIGNvbnN0IGlzQXNzaXN0YW50ID0gcm9sZSA9PT0gQ2hhdEhpc3RvcnlSb2xlLkFTU0lTVEFOVCB8fCB1c2VyLmlkID09PSAnYXNzaXN0YW50J1xuICAvLyBNaWVudHJhcyBlbCBhZ2VudGUgXCJwaWVuc2FcIiAoc3RyZWFtaW5nIHNpbiB0ZXh0bykgbm8gbW9udGFtb3MgZWwgTWVzc2FnZUl0ZW06XG4gIC8vIHVuIHBsYWNlaG9sZGVyIHZhY8OtbyBzdW1hcsOtYSBvdHJvIGdhcCBkZSAzNnB4IGVuY2ltYSBkZWwgaW5kaWNhZG9yIGRlIGFjdGl2aWRhZC5cbiAgY29uc3QgaXNTdHJlYW1pbmdQbGFjZWhvbGRlciA9IGlzU3RyZWFtaW5nUGxhY2Vob2xkZXJNZXNzYWdlSWQoaWQpXG4gIGNvbnN0IHN0cmVhbWluZ1RleHQgPSB1c2VTdHJlYW1pbmdNZXNzYWdlKGlzU3RyZWFtaW5nIHx8IGlzU3RyZWFtaW5nUGxhY2Vob2xkZXIgPyBpZCA6IG51bGwpXG4gIGNvbnN0IGlzQWN0aXZlU3RyZWFtaW5nID0gISFpc1N0cmVhbWluZyB8fCBpc1N0cmVhbWluZ1BsYWNlaG9sZGVyXG4gIGNvbnN0IGlzVGhpbmtpbmcgPSBpc0FjdGl2ZVN0cmVhbWluZyAmJiAhc3RyZWFtaW5nVGV4dFxuICBpZiAoaXNUaGlua2luZykge1xuICAgIHJldHVybiBudWxsXG4gIH1cbiAgY29uc3QgbWVzc2FnZUF0dGFjaG1lbnRzID1cbiAgICBhdHRhY2htZW50cyAmJiBhdHRhY2htZW50cy5sZW5ndGggPiAwXG4gICAgICA/IGF0dGFjaG1lbnRzXG4gICAgICA6ICFpc0Fzc2lzdGFudCAmJiBBcnJheS5pc0FycmF5KHNvdXJjZXMpXG4gICAgICAgID8gKHNvdXJjZXMgYXMgQXR0YWNobWVudEZpbGVbXSlcbiAgICAgICAgOiBbXVxuXG4gIGNvbnN0IGhhbmRsZUF0dGFjaG1lbnRDbGljayA9IChhdHRhY2htZW50OiBBdHRhY2htZW50RmlsZSkgPT4ge1xuICAgIC8vIFBlcm1pdGlyIHByZXZpc3VhbGl6YWNpw7NuIHNpIHRpZW5lIGFyY2hpdm8gbG9jYWwgbyBVUkxzIGRlbCBiYWNrZW5kXG4gICAgaWYgKFxuICAgICAgYXR0YWNobWVudC5maWxlIGluc3RhbmNlb2YgRmlsZSB8fFxuICAgICAgYXR0YWNobWVudC5vcmlnaW5hbEZpbGUgaW5zdGFuY2VvZiBGaWxlIHx8XG4gICAgICBhdHRhY2htZW50LnVybF90aHVtYm5haWwgfHxcbiAgICAgIGF0dGFjaG1lbnQudXJsX29yaWdpbmFsIHx8XG4gICAgICBhdHRhY2htZW50LnVybF9maWxlXG4gICAgKSB7XG4gICAgICBzZXRQcmV2aWV3QXR0YWNobWVudChhdHRhY2htZW50KVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGhhbmRsZUNsb3NlUHJldmlldyA9ICgpID0+IHtcbiAgICBzZXRQcmV2aWV3QXR0YWNobWVudChudWxsKVxuICB9XG5cbiAgY29uc3QgaGFuZGxlQXR0YWNobWVudERvd25sb2FkID0gYXN5bmMgKGF0dGFjaG1lbnQ6IEF0dGFjaG1lbnRGaWxlKSA9PiB7XG4gICAgY29uc3QgZXh0ZW5zaW9uID0gYXR0YWNobWVudC5uYW1lLmluY2x1ZGVzKCcuJykgPyAnJyA6IGAuJHthdHRhY2htZW50LnR5cGV9YFxuICAgIGNvbnN0IGZpbGVOYW1lID0gYCR7YXR0YWNobWVudC5uYW1lfSR7ZXh0ZW5zaW9ufWBcbiAgICBjb25zdCBmaWxlVXJsID0gYXR0YWNobWVudC51cmxfb3JpZ2luYWwgfHwgYXR0YWNobWVudC51cmxfZmlsZSB8fCBhdHRhY2htZW50LnVybF90aHVtYm5haWxcblxuICAgIHRyeSB7XG4gICAgICBsZXQgYmxvYlVybDogc3RyaW5nIHwgbnVsbCA9IG51bGxcblxuICAgICAgaWYgKGZpbGVVcmwpIHtcbiAgICAgICAgY29uc3QgZG93bmxvYWRlZEZpbGUgPSBhd2FpdCBkb3dubG9hZEZpbGVGcm9tVXJsKGZpbGVVcmwsIGZpbGVOYW1lLCBhdHRhY2htZW50LnR5cGUpXG4gICAgICAgIGJsb2JVcmwgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKGRvd25sb2FkZWRGaWxlKVxuICAgICAgfSBlbHNlIGlmIChhdHRhY2htZW50LmZpbGUgaW5zdGFuY2VvZiBGaWxlKSB7XG4gICAgICAgIGJsb2JVcmwgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKGF0dGFjaG1lbnQuZmlsZSlcbiAgICAgIH1cblxuICAgICAgaWYgKCFibG9iVXJsKSByZXR1cm5cblxuICAgICAgY29uc3QgbGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKVxuICAgICAgbGluay5ocmVmID0gYmxvYlVybFxuICAgICAgbGluay5kb3dubG9hZCA9IGZpbGVOYW1lXG4gICAgICBsaW5rLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSdcbiAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQobGluaylcbiAgICAgIGxpbmsuY2xpY2soKVxuXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChsaW5rKVxuICAgICAgICBVUkwucmV2b2tlT2JqZWN0VVJMKGJsb2JVcmwpXG4gICAgICB9LCAxMDApXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0ZhaWxlZCB0byBkb3dubG9hZCBhdHRhY2htZW50JywgZXJyb3IpXG4gICAgfVxuICB9XG5cbiAgaWYgKGlzQ2hhbmdlUHJvamVjdCAmJiBvcHRpb25zKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxNZXNzYWdlV3JhcHBlciBrZXk9e2lkfSBpc0N1cnJlbnRVc2VyPXtpc0N1cnJlbnRVc2VyfSBkYXRhLW1lc3NhZ2UtaWQ9e2lkfSBoYXNGZWVkYmFjaz17ZmFsc2V9PlxuICAgICAgICA8U0NNZXNzYWdlSXRlbVdyYXBwZXIgJGlzQXNzaXN0YW50PXtpc0Fzc2lzdGFudH0+XG4gICAgICAgICAge2lzQXNzaXN0YW50ICYmICFpc1RoaW5raW5nICYmIDxBc3Npc3RhbnRNZXNzYWdlSGVhZGVyIC8+fVxuICAgICAgICAgIDxNZXNzYWdlQ29udGVudFdyYXBwZXJcbiAgICAgICAgICAgIGlzQ2hhbmdlUHJvamVjdD17aXNDaGFuZ2VQcm9qZWN0fVxuICAgICAgICAgICAgbWVzc2FnZT17bWVzc2FnZX1cbiAgICAgICAgICAgIGlzQ3VycmVudFVzZXI9e2lzQ3VycmVudFVzZXJ9XG4gICAgICAgICAgICBpc0Vycm9yPXtpc0Vycm9yfVxuICAgICAgICAgICAgbWVzc2FnZUV4dHJhQ29udGVudD17PE1lc3NhZ2VPcHRpb25zIG9wdGlvbnM9e29wdGlvbnMgYXMgYW55fSBoYW5kbGVTZWxlY3RPcHRpb249e2hhbmRsZVNlbGVjdE9wdGlvbn0gLz59XG4gICAgICAgICAgLz5cbiAgICAgICAgPC9TQ01lc3NhZ2VJdGVtV3JhcHBlcj5cbiAgICAgIDwvTWVzc2FnZVdyYXBwZXI+XG4gICAgKVxuICB9XG5cbiAgY29uc3QgaGFuZGxlRmVlZGJhY2tDbGljayA9IChmZWVkYmFjazogRmVlZGJhY2spID0+IHtcbiAgICBjb25zdCBzZXNzaW9uSWQgPSBpZFxuICAgICAgLnNwbGl0KCctJylcbiAgICAgIC5maWx0ZXIocXVlc3Rpb25JZCA9PiBxdWVzdGlvbklkICE9PSAnYW5zd2VyJylcbiAgICAgIC5qb2luKCctJylcbiAgICBoYW5kbGVGZWVkYmFjaz8uKGZlZWRiYWNrLCBzZXNzaW9uSWQpXG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxTQ01lc3NhZ2VJdGVtV3JhcHBlciAkaXNBc3Npc3RhbnQ9e2lzQXNzaXN0YW50fT5cbiAgICAgIHtpc0Fzc2lzdGFudCAmJiAhaXNUaGlua2luZyAmJiA8QXNzaXN0YW50TWVzc2FnZUhlYWRlciAvPn1cbiAgICAgIDxTQ01lc3NhZ2VJdGVtSW5uZXI+XG4gICAgICAgIHshIW1lc3NhZ2VBdHRhY2htZW50cy5sZW5ndGggJiYgKFxuICAgICAgICAgIDxTQ0F0dGFjaG1lbnRzUm93ICRpc0Fzc2lzdGFudD17aXNBc3Npc3RhbnR9PlxuICAgICAgICAgICAge21lc3NhZ2VBdHRhY2htZW50cy5tYXAoKGF0dGFjaG1lbnQsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICAgIC8vIERldGVjdGFyIHNpIGVzIHVuIGFyY2hpdm8gZGUgYXVkaW9cbiAgICAgICAgICAgICAgY29uc3QgYXR0YWNobWVudFR5cGUgPSBhdHRhY2htZW50Py50eXBlPy50b0xvd2VyQ2FzZSgpIHx8ICcnXG4gICAgICAgICAgICAgIGNvbnN0IGF0dGFjaG1lbnROYW1lID0gYXR0YWNobWVudD8ubmFtZT8udG9Mb3dlckNhc2UoKSB8fCAnJ1xuICAgICAgICAgICAgICBjb25zdCBpc0F1ZGlvRmlsZSA9XG4gICAgICAgICAgICAgICAgYXR0YWNobWVudFR5cGUuc3RhcnRzV2l0aCgnYXVkaW8vJykgfHxcbiAgICAgICAgICAgICAgICBbJ2ZsYWMnLCAnbTRhJywgJ21wMycsICdtcDQnLCAnb2dhJywgJ29nZycsICd3YXYnLCAnd2VibSddLmluY2x1ZGVzKGF0dGFjaG1lbnRUeXBlKSB8fFxuICAgICAgICAgICAgICAgIFsnLmZsYWMnLCAnLm00YScsICcubXAzJywgJy5tcDQnLCAnLm9nYScsICcub2dnJywgJy53YXYnLCAnLndlYm0nXS5zb21lKGV4dCA9PlxuICAgICAgICAgICAgICAgICAgYXR0YWNobWVudE5hbWUuZW5kc1dpdGgoZXh0KVxuICAgICAgICAgICAgICAgIClcblxuICAgICAgICAgICAgICBpZiAoaXNBdWRpb0ZpbGUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gPEF0dGFjaG1lbnRDYXJkQXVkaW8ga2V5PXtgJHthdHRhY2htZW50LmlkfS0ke2F0dGFjaG1lbnQubmFtZX1gfSBhdHRhY2htZW50PXthdHRhY2htZW50fSAvPlxuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICA8QXR0YWNobWVudENhcmRcbiAgICAgICAgICAgICAgICAgIGtleT17YCR7YXR0YWNobWVudC5pZH0tJHthdHRhY2htZW50Lm5hbWV9YH1cbiAgICAgICAgICAgICAgICAgIGF0dGFjaG1lbnQ9e2F0dGFjaG1lbnR9XG4gICAgICAgICAgICAgICAgICBwb3NpdGlvbkluZGV4PXtpbmRleH1cbiAgICAgICAgICAgICAgICAgIG9uRG93bmxvYWQ9eygpID0+IGhhbmRsZUF0dGFjaG1lbnREb3dubG9hZChhdHRhY2htZW50KX1cbiAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IGhhbmRsZUF0dGFjaG1lbnRDbGljayhhdHRhY2htZW50KX1cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9KX1cbiAgICAgICAgICA8L1NDQXR0YWNobWVudHNSb3c+XG4gICAgICAgICl9XG4gICAgICAgIHsoISFtZXNzYWdlIHx8IGlzQWN0aXZlU3RyZWFtaW5nKSAmJiAhKGlzQXNzaXN0YW50ICYmICEhbWVzc2FnZUF0dGFjaG1lbnRzLmxlbmd0aCkgJiYgKFxuICAgICAgICAgIDxTdHJlYW1pbmdNZXNzYWdlQm9keVxuICAgICAgICAgICAgbWVzc2FnZT17bWVzc2FnZSA/PyAnJ31cbiAgICAgICAgICAgIGlzU3RyZWFtaW5nPXtpc0FjdGl2ZVN0cmVhbWluZ31cbiAgICAgICAgICAgIGlzQ3VycmVudFVzZXI9e2lzQ3VycmVudFVzZXJ9XG4gICAgICAgICAgICBpc0Fzc2lzdGFudD17aXNBc3Npc3RhbnR9XG4gICAgICAgICAgICBpc0Zyb250ZW5kQ2FuY2VsbGVkPXtwcm9wcy5pc0Zyb250ZW5kQ2FuY2VsbGVkfVxuICAgICAgICAgICAgYXBwcm92YWw9e2FwcHJvdmFsfVxuICAgICAgICAgICAgaXNFcnJvcj17aXNFcnJvcn1cbiAgICAgICAgICAgIHNvdXJjZXM9e3NvdXJjZXN9XG4gICAgICAgICAgICBzdWdnZXN0aW9ucz17c3VnZ2VzdGlvbnN9XG4gICAgICAgICAgICBjcmVhdGVBZ2VudEZvbGxvd1VwPXtjcmVhdGVBZ2VudEZvbGxvd1VwfVxuICAgICAgICAgICAgaGFuZGxlRmVlZGJhY2tDbGljaz17aGFuZGxlRmVlZGJhY2tDbGlja31cbiAgICAgICAgICAgIGRpc2FibGVGZWVkYmFjaz17ZGlzYWJsZUZlZWRiYWNrID8/IG51bGx9XG4gICAgICAgICAgICBoYW5kbGVTdWdnZXN0aW9uQ2xpY2s9e2hhbmRsZVN1Z2dlc3Rpb25DbGlja31cbiAgICAgICAgICAgIHN1Z2dlc3Rpb25zRGlzYWJsZWQ9e2lzQWN0aXZlU3RyZWFtaW5nIHx8ICEhaGFzU2VsZWN0ZWRTdWdnZXN0aW9ufVxuICAgICAgICAgICAgbWVzc2FnZUlkPXtpZH1cbiAgICAgICAgICAgIGlzTGFzdE1lc3NhZ2U9e2lzTGFzdE1lc3NhZ2V9XG4gICAgICAgICAgLz5cbiAgICAgICAgKX1cbiAgICAgICAge2FwcHJvdmFsICYmIGFwcHJvdmFsLnBlbmRpbmdfYWN0aW9ucyAmJiAoXG4gICAgICAgICAgPFNDQXBwcm92YWxBY3Rpb25zQ29sdW1uPlxuICAgICAgICAgICAgPEFwcHJvdmFsQm94XG4gICAgICAgICAgICAgIGFjdGlvbnM9e2FwcHJvdmFsLnBlbmRpbmdfYWN0aW9uc31cbiAgICAgICAgICAgICAgc3RhdHVzPXthcHByb3ZhbFN0YXR1c31cbiAgICAgICAgICAgICAgb25BcHByb3ZlPXt0aHJlYWRJZHMgPT4gaGFuZGxlQXBwcm92YWxEZWNpc2lvbih0aHJlYWRJZHMsICdhcHByb3ZlJyl9XG4gICAgICAgICAgICAgIG9uUmVqZWN0PXt0aHJlYWRJZHMgPT4gaGFuZGxlQXBwcm92YWxEZWNpc2lvbih0aHJlYWRJZHMsICdyZWplY3QnKX1cbiAgICAgICAgICAgICAgaXNQcm9qZWN0RGVsZXRlZD17cHJvcHMucHJvamVjdE1ldGFkYXRhPy5pc19kZWxldGVkID09PSB0cnVlfVxuICAgICAgICAgICAgICBpc0V4cGFuZGVkPXtwcm9wcy5leHBhbmRlZH1cbiAgICAgICAgICAgICAgaGl0bEluc3RhbmNlSWQ9e2FwcHJvdmFsLm9yaWdpbmFsX3RocmVhZF9pZH1cbiAgICAgICAgICAgICAgd2FybmluZ01lc3NhZ2U9e2FwcHJvdmFsLndhcm5pbmdfbWVzc2FnZX1cbiAgICAgICAgICAgICAgbWFudWFsQXBwcm92YWxEZXRlY3RlZD17YXBwcm92YWwubWFudWFsX2FwcHJvdmFsX2RldGVjdGVkfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L1NDQXBwcm92YWxBY3Rpb25zQ29sdW1uPlxuICAgICAgICApfVxuICAgICAgPC9TQ01lc3NhZ2VJdGVtSW5uZXI+XG4gICAgICA8QXR0YWNobWVudFByZXZpZXdNb2RhbFxuICAgICAgICBpc09wZW49eyEhcHJldmlld0F0dGFjaG1lbnR9XG4gICAgICAgIG9uQ2xvc2U9e2hhbmRsZUNsb3NlUHJldmlld31cbiAgICAgICAgYXR0YWNobWVudD17cHJldmlld0F0dGFjaG1lbnR9XG4gICAgICAvPlxuICAgIDwvU0NNZXNzYWdlSXRlbVdyYXBwZXI+XG4gIClcbn0pXG5cbmNvbnN0IENoYXRBSU1lc3NhZ2VzSW5uZXIgPSAoe1xuICB1c2VySW5pdGlhbE1lc3NhZ2UsXG4gIGluaXRpYWxDaGF0SWQsXG4gIG9uRXJyb3IsXG4gIG9uU2VuZE1lc3NhZ2VSZWFkeSxcbiAgb25TY3JvbGxUb0JvdHRvbSxcbiAgYXR0YWNobWVudHMsXG4gIGFnZW50cyxcbiAgZXhwYW5kZWQsXG59OiBDaGF0QUlNZXNzYWdlc1Byb3BzKSA9PiB7XG4gIGNvbnN0IHsgdCB9ID0gdXNlVCgpXG4gIGNvbnN0IHsgaXNXZWJTZWFyY2hBY3RpdmUsIGlzRGVlcFNlYXJjaEFjdGl2ZSwgYWdlbnQgfSA9IHVzZUdsb2JhbENvbnRleHQoKVxuICBjb25zdCBldmVudCA9IHVzZUV2ZW50KClcbiAgY29uc3QgYXV0aFVzZXIgPSB1c2VVc2VyKClcbiAgY29uc3QgbWVzc2FnZXNSZWYgPSB1c2VSZWY8SFRNTERpdkVsZW1lbnQ+KG51bGwpXG4gIGNvbnN0IGNoYXRJbml0aWFsaXplZFJlZiA9IHVzZVJlZihmYWxzZSlcbiAgY29uc3QgaXNMb2FkaW5nTW9yZVJlZiA9IHVzZVJlZihmYWxzZSlcbiAgY29uc3QgdXNlclNjcm9sbGluZ1JlZiA9IHVzZVJlZihmYWxzZSlcbiAgY29uc3Qgc2Nyb2xsVGhyZXNob2xkUmVmID0gdXNlUmVmKDM5KVxuICBjb25zdCBsYXN0U2Nyb2xsVG9wUmVmID0gdXNlUmVmKDApXG4gIGNvbnN0IHNob3dTY3JvbGxUb0JvdHRvbVJlZiA9IHVzZVJlZihmYWxzZSlcbiAgY29uc3Qgc2Nyb2xsUmFmUmVmID0gdXNlUmVmPG51bWJlciB8IG51bGw+KG51bGwpXG4gIGNvbnN0IFtzaG93U2Nyb2xsVG9Cb3R0b20sIHNldFNob3dTY3JvbGxUb0JvdHRvbV0gPSB1c2VTdGF0ZShmYWxzZSlcbiAgY29uc3QgW3NlbGVjdGVkU3VnZ2VzdGlvbk1lc3NhZ2VJZHMsIHNldFNlbGVjdGVkU3VnZ2VzdGlvbk1lc3NhZ2VJZHNdID0gdXNlU3RhdGU8UmVjb3JkPHN0cmluZywgYm9vbGVhbj4+KHt9KVxuXG4gIGNvbnN0IHtcbiAgICBtZXNzYWdlcyxcbiAgICBsb2FkaW5nTWVzc2FnZXMsXG4gICAgaXNMb2FkaW5nTW9yZU1lc3NhZ2VzLFxuICAgIHdhaXRpbmdSZXNwb25zZSxcbiAgICBpc1dyaXRpbmcsXG4gICAgbG9hZGluZ01lc3NhZ2UsXG4gICAgc3RyZWFtQWN0aXZpdHksXG4gICAgYWN0aXZlTG9hZGluZ3MsXG4gICAgc2VuZE1lc3NhZ2UsXG4gICAgY2hhbmdlUHJvamVjdCxcbiAgICBoYW5kbGVGZWVkYmFjayxcbiAgICBoYW5kbGVBcHByb3ZhbERlY2lzaW9uLFxuICAgIGluaXRpYWxpemVDaGF0LFxuICAgIGhhbmRsZVNjcm9sbCxcbiAgICBzdG9wR2VuZXJhdGlvbixcbiAgfSA9IHVzZUNoYXRNYW5hZ2VyKHtcbiAgICBjaGF0SWQ6IGluaXRpYWxDaGF0SWQgfHwgdW5kZWZpbmVkLFxuICAgIHVzZXJJbml0aWFsTWVzc2FnZSxcbiAgICBvbkVycm9yLFxuICAgIGF0dGFjaG1lbnRzLFxuICAgIGFnZW50cyxcbiAgfSlcblxuICBjb25zdCBoYW5kbGVTZWxlY3RPcHRpb24gPSB1c2VDYWxsYmFjayhcbiAgICAob3B0aW9uOiBQcm9qZWN0KSA9PiB7XG4gICAgICBjaGFuZ2VQcm9qZWN0KG9wdGlvbilcbiAgICB9LFxuICAgIFtjaGFuZ2VQcm9qZWN0XVxuICApXG5cbiAgY29uc3QgaGFuZGxlU3VnZ2VzdGlvbkNsaWNrID0gdXNlQ2FsbGJhY2soXG4gICAgKG1lc3NhZ2VJZDogc3RyaW5nLCBzdWdnZXN0aW9uOiBzdHJpbmcpID0+IHtcbiAgICAgIGlmICghc3VnZ2VzdGlvbj8udHJpbSgpKSByZXR1cm5cbiAgICAgIGlmIChzZWxlY3RlZFN1Z2dlc3Rpb25NZXNzYWdlSWRzW21lc3NhZ2VJZF0pIHJldHVyblxuICAgICAgY29uc3QgaXNNYXJrZXRwbGFjZUdsb2JhbEFnZW50ID0gaXNNYWlha2VyQWdlbnQoYWdlbnQpXG4gICAgICBldmVudChFVkVOVFMuYWlDaGF0U3VnZ2VzdGVkQW5zd2VyLCB7XG4gICAgICAgIGFnZW50X3R5cGU6IGlzTWFya2V0cGxhY2VHbG9iYWxBZ2VudCA/ICdtYXJrZXRwbGFjZScgOiBhZ2VudD8udHlwZSxcbiAgICAgIH0pXG4gICAgICBzZXRTZWxlY3RlZFN1Z2dlc3Rpb25NZXNzYWdlSWRzKHByZXYgPT4gKHsgLi4ucHJldiwgW21lc3NhZ2VJZF06IHRydWUgfSkpXG5cbiAgICAgIGNvbnN0IHRhcmdldE1lc3NhZ2UgPSBtZXNzYWdlcy5maW5kKG1zZyA9PiBtc2cuaWQgPT09IG1lc3NhZ2VJZClcbiAgICAgIGNvbnN0IGlzUmV0cnlTdWdnZXN0aW9uID0gISF0YXJnZXRNZXNzYWdlPy5pc0Vycm9yICYmIHN1Z2dlc3Rpb24gPT09IHQoJ2NoYXQucmV0cnknKVxuICAgICAgaWYgKGlzUmV0cnlTdWdnZXN0aW9uKSB7XG4gICAgICAgIGNvbnN0IGxhc3RVc2VyTWVzc2FnZSA9IG1lc3NhZ2VzXG4gICAgICAgICAgLmZpbHRlcihtc2cgPT4gbXNnLnJvbGUgPT09IENoYXRIaXN0b3J5Um9sZS5VU0VSIHx8IG1zZy51c2VyLmlkID09PSBhdXRoVXNlci5pZC50b1N0cmluZygpKVxuICAgICAgICAgIC5hdCgtMSlcbiAgICAgICAgaWYgKGxhc3RVc2VyTWVzc2FnZT8ubWVzc2FnZSkge1xuICAgICAgICAgIGNvbnN0IHJldHJ5QXR0YWNobWVudHMgPSBBcnJheS5pc0FycmF5KGxhc3RVc2VyTWVzc2FnZS5hdHRhY2htZW50cylcbiAgICAgICAgICAgID8gbGFzdFVzZXJNZXNzYWdlLmF0dGFjaG1lbnRzXG4gICAgICAgICAgICA6IEFycmF5LmlzQXJyYXkobGFzdFVzZXJNZXNzYWdlLnNvdXJjZXMpXG4gICAgICAgICAgICAgID8gbGFzdFVzZXJNZXNzYWdlLnNvdXJjZXNcbiAgICAgICAgICAgICAgOiBbXVxuICAgICAgICAgIHNlbmRNZXNzYWdlKGxhc3RVc2VyTWVzc2FnZS5tZXNzYWdlLCByZXRyeUF0dGFjaG1lbnRzKVxuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHNlbmRNZXNzYWdlKHN1Z2dlc3Rpb24pXG4gICAgfSxcbiAgICBbXG4gICAgICBzZW5kTWVzc2FnZSxcbiAgICAgIHNlbGVjdGVkU3VnZ2VzdGlvbk1lc3NhZ2VJZHMsXG4gICAgICBldmVudCxcbiAgICAgIGFnZW50Py5lbnRpdHksXG4gICAgICBhZ2VudD8ubmFtZSxcbiAgICAgIGFnZW50Py50eXBlLFxuICAgICAgbWVzc2FnZXMsXG4gICAgICB0LFxuICAgICAgYXV0aFVzZXIuaWQsXG4gICAgXVxuICApXG5cbiAgLyoqXG4gICAqIEFjdHVhbGl6YSBlbCBlc3RhZG8gZGVsIGJvdMOzbiBcInNjcm9sbCB0byBib3R0b21cIiBjb21wYXJhbmRvIGxhIHBvc2ljacOzblxuICAgKiBhY3R1YWwgZGVsIHNjcm9sbCBjb24gZWwgZm9uZG8uIFVzYSB1biByZWYgcGFyYSBldml0YXIgYHNldFN0YXRlYCBjdWFuZG9cbiAgICogZWwgdmFsb3Igbm8gY2FtYmlhLlxuICAgKi9cbiAgY29uc3QgdXBkYXRlU2Nyb2xsQm90dG9tVmlzaWJpbGl0eSA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBjb25zdCBlbCA9IG1lc3NhZ2VzUmVmLmN1cnJlbnRcbiAgICBpZiAoIWVsKSByZXR1cm5cbiAgICBjb25zdCB7IHNjcm9sbFRvcCwgc2Nyb2xsSGVpZ2h0LCBjbGllbnRIZWlnaHQgfSA9IGVsXG4gICAgY29uc3QgZGlzdGFuY2VGcm9tQm90dG9tID0gc2Nyb2xsSGVpZ2h0IC0gc2Nyb2xsVG9wIC0gY2xpZW50SGVpZ2h0XG4gICAgY29uc3Qgc2hvdWxkU2hvdyA9IGRpc3RhbmNlRnJvbUJvdHRvbSA+IDUwXG4gICAgaWYgKHNob3dTY3JvbGxUb0JvdHRvbVJlZi5jdXJyZW50ICE9PSBzaG91bGRTaG93KSB7XG4gICAgICBzaG93U2Nyb2xsVG9Cb3R0b21SZWYuY3VycmVudCA9IHNob3VsZFNob3dcbiAgICAgIHNldFNob3dTY3JvbGxUb0JvdHRvbShzaG91bGRTaG93KVxuICAgIH1cbiAgfSwgW10pXG5cbiAgLyoqXG4gICAqIFNjcm9sbCBpbm1lZGlhdG8gYWwgZm9uZG8gKGRlbnRybyBkZSByQUYgcGFyYSBjb29yZGluYXIgY29uIGVsIHBhaW50KVxuICAgKiB5IGFjdHVhbGl6YSBsYSB2aXNpYmlsaWRhZCBkZWwgYm90w7NuLiBSZXNwZXRhIGBza2lwSWZVc2VyU2Nyb2xsaW5nYCBwYXJhXG4gICAqIG5vIHNvYnJlc2NyaWJpciBlbCBzY3JvbGwgbWFudWFsIGRlbCB1c3VhcmlvIGR1cmFudGUgZWwgc3RyZWFtaW5nLlxuICAgKi9cbiAgY29uc3Qgc2Nyb2xsVG9Cb3R0b21SYWYgPSB1c2VDYWxsYmFjayhcbiAgICAob3B0czogeyBza2lwSWZVc2VyU2Nyb2xsaW5nPzogYm9vbGVhbjsgZGVsYXlNcz86IG51bWJlciB9ID0ge30pID0+IHtcbiAgICAgIGNvbnN0IHsgc2tpcElmVXNlclNjcm9sbGluZyA9IGZhbHNlLCBkZWxheU1zID0gMCB9ID0gb3B0c1xuICAgICAgY29uc3QgcnVuID0gKCkgPT4ge1xuICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGVsID0gbWVzc2FnZXNSZWYuY3VycmVudFxuICAgICAgICAgIGlmICghZWwpIHJldHVyblxuICAgICAgICAgIGlmIChza2lwSWZVc2VyU2Nyb2xsaW5nICYmIHVzZXJTY3JvbGxpbmdSZWYuY3VycmVudCkgcmV0dXJuXG4gICAgICAgICAgZWwuc2Nyb2xsVG9wID0gZWwuc2Nyb2xsSGVpZ2h0XG4gICAgICAgICAgdXBkYXRlU2Nyb2xsQm90dG9tVmlzaWJpbGl0eSgpXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgICBpZiAoZGVsYXlNcyA+IDApIHNldFRpbWVvdXQocnVuLCBkZWxheU1zKVxuICAgICAgZWxzZSBydW4oKVxuICAgIH0sXG4gICAgW3VwZGF0ZVNjcm9sbEJvdHRvbVZpc2liaWxpdHldXG4gIClcblxuICBjb25zdCBoYW5kbGVDbGlja1Njcm9sbFRvQm90dG9tID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGlmICghbWVzc2FnZXNSZWYuY3VycmVudCkgcmV0dXJuXG4gICAgbWVzc2FnZXNSZWYuY3VycmVudC5zY3JvbGxUbyh7XG4gICAgICB0b3A6IG1lc3NhZ2VzUmVmLmN1cnJlbnQuc2Nyb2xsSGVpZ2h0LFxuICAgICAgYmVoYXZpb3I6ICdzbW9vdGgnLFxuICAgIH0pXG4gICAgLy8gRGFyIHRpZW1wbyBhbCBzbW9vdGgtc2Nyb2xsIGFudGVzIGRlIHJlY2FsY3VsYXIgbGEgdmlzaWJpbGlkYWQgZGVsIGJvdMOzbi5cbiAgICBzZXRUaW1lb3V0KHVwZGF0ZVNjcm9sbEJvdHRvbVZpc2liaWxpdHksIDUwMClcbiAgfSwgW3VwZGF0ZVNjcm9sbEJvdHRvbVZpc2liaWxpdHldKVxuXG4gIC8vIEFsIGRlY2lkaXIgZW4gZWwgQXBwcm92YWxCb3g6IGVsIGJveCBjb2xhcHNhIChib3RvbmVzIC0+IGJhZGdlKSB5IGVsIHN0cmVhbVxuICAvLyBjb250aW7DumEgYWJham8uIFJlYWN0aXZhciBlbCBhdXRvLXNjcm9sbCB5IHNlZ3VpciBlbCBmb25kbyBwYXJhIHF1ZSBsYSB2aXN0YVxuICAvLyBubyBxdWVkZSBhdHLDoXMgKGV2aXRhIHF1ZSBhcGFyZXpjYSBsYSBmbGVjaGEgZGUgc2Nyb2xsLXRvLWJvdHRvbSkuXG4gIGNvbnN0IGhhbmRsZUFwcHJvdmFsRGVjaXNpb25XaXRoU2Nyb2xsID0gdXNlQ2FsbGJhY2soXG4gICAgKC4uLmFyZ3M6IFBhcmFtZXRlcnM8dHlwZW9mIGhhbmRsZUFwcHJvdmFsRGVjaXNpb24+KSA9PiB7XG4gICAgICB1c2VyU2Nyb2xsaW5nUmVmLmN1cnJlbnQgPSBmYWxzZVxuICAgICAgc2Nyb2xsVGhyZXNob2xkUmVmLmN1cnJlbnQgPSAzOVxuICAgICAgaGFuZGxlQXBwcm92YWxEZWNpc2lvbiguLi5hcmdzKVxuICAgICAgc2Nyb2xsVG9Cb3R0b21SYWYoKVxuICAgICAgc2Nyb2xsVG9Cb3R0b21SYWYoeyBkZWxheU1zOiAxMDAgfSlcbiAgICB9LFxuICAgIFtoYW5kbGVBcHByb3ZhbERlY2lzaW9uLCBzY3JvbGxUb0JvdHRvbVJhZl1cbiAgKVxuXG4gIGNvbnN0IGhhbmRsZVNjcm9sbFRvQm90dG9tID0gdXNlQ2FsbGJhY2soXG4gICAgKGU6IFJlYWN0LlVJRXZlbnQ8SFRNTERpdkVsZW1lbnQ+KSA9PiB7XG4gICAgICBjb25zdCBjb250YWluZXIgPSBlLmN1cnJlbnRUYXJnZXRcblxuICAgICAgaWYgKHNjcm9sbFJhZlJlZi5jdXJyZW50ICE9PSBudWxsKSB7XG4gICAgICAgIGNhbmNlbEFuaW1hdGlvbkZyYW1lKHNjcm9sbFJhZlJlZi5jdXJyZW50KVxuICAgICAgfVxuXG4gICAgICBzY3JvbGxSYWZSZWYuY3VycmVudCA9IHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICAgIHNjcm9sbFJhZlJlZi5jdXJyZW50ID0gbnVsbFxuICAgICAgICBjb25zdCB7IHNjcm9sbFRvcCwgc2Nyb2xsSGVpZ2h0LCBjbGllbnRIZWlnaHQgfSA9IGNvbnRhaW5lclxuXG4gICAgICAgIGNvbnN0IGlzU2Nyb2xsaW5nVXAgPSBzY3JvbGxUb3AgPCBsYXN0U2Nyb2xsVG9wUmVmLmN1cnJlbnRcblxuICAgICAgICBpZiAoaXNTY3JvbGxpbmdVcCkge1xuICAgICAgICAgIHNjcm9sbFRocmVzaG9sZFJlZi5jdXJyZW50ID0gMTVcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGlzTmVhckJvdHRvbSA9IHNjcm9sbEhlaWdodCAtIHNjcm9sbFRvcCAtIGNsaWVudEhlaWdodCA8IHNjcm9sbFRocmVzaG9sZFJlZi5jdXJyZW50XG5cbiAgICAgICAgaWYgKGlzTmVhckJvdHRvbSkge1xuICAgICAgICAgIHNjcm9sbFRocmVzaG9sZFJlZi5jdXJyZW50ID0gMzlcbiAgICAgICAgfVxuXG4gICAgICAgIHVzZXJTY3JvbGxpbmdSZWYuY3VycmVudCA9ICFpc05lYXJCb3R0b21cbiAgICAgICAgbGFzdFNjcm9sbFRvcFJlZi5jdXJyZW50ID0gc2Nyb2xsVG9wXG5cbiAgICAgICAgdXBkYXRlU2Nyb2xsQm90dG9tVmlzaWJpbGl0eSgpXG5cbiAgICAgICAgaWYgKGlzTmVhckJvdHRvbSAmJiBvblNjcm9sbFRvQm90dG9tKSB7XG4gICAgICAgICAgb25TY3JvbGxUb0JvdHRvbSgpXG4gICAgICAgIH1cblxuICAgICAgICBoYW5kbGVTY3JvbGwoY29udGFpbmVyKVxuICAgICAgfSlcbiAgICB9LFxuICAgIFtvblNjcm9sbFRvQm90dG9tLCBoYW5kbGVTY3JvbGwsIHVwZGF0ZVNjcm9sbEJvdHRvbVZpc2liaWxpdHldXG4gIClcblxuICAvLyByZWZzIHRvIHN0YWJpbGl6ZSBmdW5jdGlvbnMgYW5kIGF2b2lkIHVubmVjZXNzYXJ5IHJlLXJlbmRlcnNcbiAgY29uc3Qgc2VuZE1lc3NhZ2VSZWYgPSB1c2VSZWYoc2VuZE1lc3NhZ2UpXG4gIGNvbnN0IHN0b3BHZW5lcmF0aW9uUmVmID0gdXNlUmVmKHN0b3BHZW5lcmF0aW9uKVxuICBjb25zdCBvblNlbmRNZXNzYWdlUmVhZHlSZWYgPSB1c2VSZWYob25TZW5kTWVzc2FnZVJlYWR5KVxuICBjb25zdCBzZW5kTWVzc2FnZVByb3h5UmVmID0gdXNlUmVmKFxuICAgIChcbiAgICAgIG1lc3NhZ2U6IHN0cmluZyxcbiAgICAgIGF0dGFjaG1lbnRzPzogQXR0YWNobWVudEZpbGVbXSxcbiAgICAgIGZhcUlkPzogc3RyaW5nLFxuICAgICAgYWdlbnRTdWdnZXN0aW9uSWQ/OiBzdHJpbmcsXG4gICAgICBtZW50aW9ucz86IENvbnRleHRNZW50aW9uW10sXG4gICAgICBmdWFJZD86IHN0cmluZyxcbiAgICAgIHNjSWQ/OiBzdHJpbmdcbiAgICApID0+IHNlbmRNZXNzYWdlUmVmLmN1cnJlbnQobWVzc2FnZSwgYXR0YWNobWVudHMsIGZhcUlkLCBhZ2VudFN1Z2dlc3Rpb25JZCwgbWVudGlvbnMsIGZ1YUlkLCBzY0lkKVxuICApXG4gIGNvbnN0IHN0b3BHZW5lcmF0aW9uUHJveHlSZWYgPSB1c2VSZWYoKCkgPT4gc3RvcEdlbmVyYXRpb25SZWYuY3VycmVudCgpKVxuXG4gIC8vIHVwZGF0ZSByZWZzIHdoZW4gZnVuY3Rpb25zIGNoYW5nZVxuICBzZW5kTWVzc2FnZVJlZi5jdXJyZW50ID0gc2VuZE1lc3NhZ2VcbiAgc3RvcEdlbmVyYXRpb25SZWYuY3VycmVudCA9IHN0b3BHZW5lcmF0aW9uXG4gIG9uU2VuZE1lc3NhZ2VSZWFkeVJlZi5jdXJyZW50ID0gb25TZW5kTWVzc2FnZVJlYWR5XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAob25TZW5kTWVzc2FnZVJlYWR5UmVmLmN1cnJlbnQpIHtcbiAgICAgIG9uU2VuZE1lc3NhZ2VSZWFkeVJlZi5jdXJyZW50KFxuICAgICAgICBzZW5kTWVzc2FnZVByb3h5UmVmLmN1cnJlbnQsXG4gICAgICAgIHN0b3BHZW5lcmF0aW9uUHJveHlSZWYuY3VycmVudCxcbiAgICAgICAgd2FpdGluZ1Jlc3BvbnNlLFxuICAgICAgICBpc1dyaXRpbmdcbiAgICAgIClcbiAgICB9XG4gIH0sIFt3YWl0aW5nUmVzcG9uc2UsIGlzV3JpdGluZ10pXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpc0xvYWRpbmdNb3JlUmVmLmN1cnJlbnQgPSBpc0xvYWRpbmdNb3JlTWVzc2FnZXNcbiAgfSwgW2lzTG9hZGluZ01vcmVNZXNzYWdlc10pXG5cbiAgLy8gQ3VhbmRvIGVsIGFnZW50ZSBlbXBpZXphIGEgcmVzcG9uZGVyLCByZXNldGVhciBlbCBmbGFnIHkgZWwgdW1icmFsIHBhcmEgYWN0aXZhciBlbCBhdXRvLXNjcm9sbFxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICh3YWl0aW5nUmVzcG9uc2UpIHtcbiAgICAgIHVzZXJTY3JvbGxpbmdSZWYuY3VycmVudCA9IGZhbHNlXG4gICAgICBzY3JvbGxUaHJlc2hvbGRSZWYuY3VycmVudCA9IDM5XG4gICAgfVxuICB9LCBbd2FpdGluZ1Jlc3BvbnNlXSlcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghY2hhdEluaXRpYWxpemVkUmVmLmN1cnJlbnQpIHtcbiAgICAgIGNoYXRJbml0aWFsaXplZFJlZi5jdXJyZW50ID0gdHJ1ZVxuICAgICAgaW5pdGlhbGl6ZUNoYXQoKVxuICAgIH1cbiAgfSwgW10pXG5cbiAgLy8gQXV0b3Njcm9sbCBtaWVudHJhcyBlbCB0ZXh0byBkZWwgc3RyZWFtIGNyZWNlLiBFbCB0ZXh0byBzZSBwaW50YSBhbCByaXRtb1xuICAvLyBkZSBgdXNlU21vb3RoU3RyZWFtVGV4dGAgKH42MGZwcyksIG5vIGFsIHJpdG1vIGRlIGxsZWdhZGEgZGUgdG9rZW5zIGRlbFxuICAvLyBiYWNrZW5kOiBwb3IgZXNvIGFjw6EgdXNhbW9zIHVuIGxvb3AgZGUgckFGIHF1ZSBjb21wYXJhIGBzY3JvbGxIZWlnaHRgXG4gIC8vIGNvbnRyYSBlbCDDumx0aW1vIHZhbG9yIG9ic2VydmFkbyB5IGFqdXN0YSBzb2xvIGN1YW5kbyBjYW1iaWEuIEFzw60gZWxcbiAgLy8gc2Nyb2xsIHF1ZWRhIHBlcmZlY3RhbWVudGUgc2luY3Jvbml6YWRvIGNvbiBsYSBhbmltYWNpw7NuIGRlbCB0ZXh0byBzaW5cbiAgLy8gZGVwZW5kZXIgZGUgbGEgY2FkZW5jaWEgZGVsIHN0cmVhbWluZ1N0b3JlLlxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghd2FpdGluZ1Jlc3BvbnNlICYmICFpc1dyaXRpbmcpIHJldHVybiB1bmRlZmluZWRcbiAgICBpZiAoIW1lc3NhZ2VzUmVmLmN1cnJlbnQpIHJldHVybiB1bmRlZmluZWRcblxuICAgIGxldCByYWZJZDogbnVtYmVyIHwgbnVsbCA9IG51bGxcbiAgICBsZXQgbGFzdEhlaWdodCA9IG1lc3NhZ2VzUmVmLmN1cnJlbnQuc2Nyb2xsSGVpZ2h0XG5cbiAgICBjb25zdCB0aWNrID0gKCkgPT4ge1xuICAgICAgY29uc3QgZWwgPSBtZXNzYWdlc1JlZi5jdXJyZW50XG4gICAgICBpZiAoIWVsKSB7XG4gICAgICAgIHJhZklkID0gbnVsbFxuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICAgIGNvbnN0IGN1cnJlbnRIZWlnaHQgPSBlbC5zY3JvbGxIZWlnaHRcbiAgICAgIGlmIChjdXJyZW50SGVpZ2h0ICE9PSBsYXN0SGVpZ2h0KSB7XG4gICAgICAgIGxhc3RIZWlnaHQgPSBjdXJyZW50SGVpZ2h0XG4gICAgICAgIGlmICghdXNlclNjcm9sbGluZ1JlZi5jdXJyZW50KSB7XG4gICAgICAgICAgZWwuc2Nyb2xsVG9wID0gY3VycmVudEhlaWdodFxuICAgICAgICB9XG4gICAgICAgIHVwZGF0ZVNjcm9sbEJvdHRvbVZpc2liaWxpdHkoKVxuICAgICAgfVxuICAgICAgcmFmSWQgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUodGljaylcbiAgICB9XG5cbiAgICByYWZJZCA9IHJlcXVlc3RBbmltYXRpb25GcmFtZSh0aWNrKVxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBpZiAocmFmSWQgIT0gbnVsbCkgY2FuY2VsQW5pbWF0aW9uRnJhbWUocmFmSWQpXG4gICAgfVxuICB9LCBbd2FpdGluZ1Jlc3BvbnNlLCBpc1dyaXRpbmcsIHVwZGF0ZVNjcm9sbEJvdHRvbVZpc2liaWxpdHldKVxuXG4gIC8vIEFsIGNvbWVuemFyIGEgZXNwZXJhciBsYSByZXNwdWVzdGEgZGVsIGJhY2tlbmQsIHNjcm9sbCBpbmljaWFsIGFsIGZvbmRvLlxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICh3YWl0aW5nUmVzcG9uc2UgJiYgbWVzc2FnZXNSZWYuY3VycmVudCkge1xuICAgICAgc2Nyb2xsVG9Cb3R0b21SYWYoeyBza2lwSWZVc2VyU2Nyb2xsaW5nOiB0cnVlIH0pXG4gICAgfVxuICB9LCBbd2FpdGluZ1Jlc3BvbnNlLCBzY3JvbGxUb0JvdHRvbVJhZl0pXG5cbiAgLy8gU2Nyb2xsIGN1YW5kbyBjYW1iaWFuIGxvcyBtZW5zYWplczogZGlzdGluZ3VlIFwibnVldm8gbWVuc2FqZVwiIChhZ3JlZ2FkbylcbiAgLy8gZGUgXCJyZWVtcGxhem9cIiAobWlzbW8gaWQvbGVuZ3RoLCBlai4gZmVlZGJhY2sgbyBhcHByb3ZhbFN0YXR1cykuIEVuXG4gIC8vIHJlZW1wbGF6b3Mgc29sbyBzZSByZWNhbGN1bGEgbGEgdmlzaWJpbGlkYWQgZGVsIGJvdMOzbiBzaW4gZm9yemFyIHNjcm9sbC5cbiAgY29uc3QgbGFzdE1lc3NhZ2VJZFJlZiA9IHVzZVJlZjxzdHJpbmcgfCBudWxsPihudWxsKVxuICBjb25zdCBsYXN0TWVzc2FnZXNMZW5ndGhSZWYgPSB1c2VSZWY8bnVtYmVyPigwKVxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghbWVzc2FnZXNSZWYuY3VycmVudCB8fCBsb2FkaW5nTWVzc2FnZXMgfHwgaXNMb2FkaW5nTW9yZU1lc3NhZ2VzIHx8IGlzTG9hZGluZ01vcmVSZWYuY3VycmVudCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY29uc3QgbGFzdE1lc3NhZ2UgPSBtZXNzYWdlc1ttZXNzYWdlcy5sZW5ndGggLSAxXVxuICAgIGNvbnN0IGxhc3RJZCA9IGxhc3RNZXNzYWdlPy5pZCA/PyBudWxsXG4gICAgY29uc3QgcHJldklkID0gbGFzdE1lc3NhZ2VJZFJlZi5jdXJyZW50XG4gICAgY29uc3QgcHJldkxlbiA9IGxhc3RNZXNzYWdlc0xlbmd0aFJlZi5jdXJyZW50XG4gICAgbGFzdE1lc3NhZ2VJZFJlZi5jdXJyZW50ID0gbGFzdElkXG4gICAgbGFzdE1lc3NhZ2VzTGVuZ3RoUmVmLmN1cnJlbnQgPSBtZXNzYWdlcy5sZW5ndGhcblxuICAgIGNvbnN0IGlzTmV3TWVzc2FnZSA9IGxhc3RJZCAhPT0gcHJldklkIHx8IG1lc3NhZ2VzLmxlbmd0aCAhPT0gcHJldkxlblxuICAgIGlmICghaXNOZXdNZXNzYWdlKSB7XG4gICAgICB1cGRhdGVTY3JvbGxCb3R0b21WaXNpYmlsaXR5KClcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IGNvbnRhaW5lciA9IG1lc3NhZ2VzUmVmLmN1cnJlbnRcbiAgICBjb25zdCBpc0F0Qm90dG9tID0gY29udGFpbmVyLnNjcm9sbEhlaWdodCAtIGNvbnRhaW5lci5zY3JvbGxUb3AgPD0gY29udGFpbmVyLmNsaWVudEhlaWdodCArIDEwMFxuICAgIGNvbnN0IGhhc0luaXRpYWxNZXNzYWdlID0gbWVzc2FnZXMuc29tZShtc2cgPT4gbXNnLmlkID09PSAndXNlci1pbml0aWFsLW1lc3NhZ2UnKVxuICAgIGNvbnN0IGlzQXBwcm92YWwgPSAhIWxhc3RNZXNzYWdlICYmIChsYXN0TWVzc2FnZS5pZC5zdGFydHNXaXRoKCdhcHByb3ZhbC0nKSB8fCAhIWxhc3RNZXNzYWdlLmFwcHJvdmFsKVxuICAgIGNvbnN0IGlzQW5zd2VyT3JRdWVzdGlvbiA9XG4gICAgICAhIWxhc3RNZXNzYWdlICYmIChsYXN0TWVzc2FnZS5pZC5zdGFydHNXaXRoKCdhbnN3ZXItJykgfHwgbGFzdE1lc3NhZ2UuaWQuc3RhcnRzV2l0aCgncXVlc3Rpb24tJykpXG5cbiAgICAvLyBBcHByb3ZhbDogc2VjdWVuY2lhIGRlIHNjcm9sbHMgY29uIGRlbGF5IHBvcnF1ZSBlbCBBcHByb3ZhbEJveCBuZWNlc2l0YVxuICAgIC8vIHVuIHRpY2sgcGFyYSBtZWRpcnNlLiBTY3JvbGxlYSBhdW5xdWUgZWwgdXN1YXJpbyBubyBlc3TDqSBhbCBmb25kbyBzaSBub1xuICAgIC8vIGVzdMOhIHNjcm9sbGVhbmRvIG1hbnVhbG1lbnRlLlxuICAgIGlmIChpc0FwcHJvdmFsICYmIChpc0F0Qm90dG9tIHx8ICF1c2VyU2Nyb2xsaW5nUmVmLmN1cnJlbnQpKSB7XG4gICAgICBzY3JvbGxUb0JvdHRvbVJhZigpXG4gICAgICBzY3JvbGxUb0JvdHRvbVJhZigpXG4gICAgICBzY3JvbGxUb0JvdHRvbVJhZih7IGRlbGF5TXM6IDEwMCB9KVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgLy8gTnVldm9zIGFuc3dlci9xdWVzdGlvbjogc2Nyb2xsIHNpIGVsIHVzdWFyaW8geWEgZXN0YWJhIGFsIGZvbmRvLlxuICAgIGlmIChpc0Fuc3dlck9yUXVlc3Rpb24gJiYgaXNBdEJvdHRvbSkge1xuICAgICAgc2Nyb2xsVG9Cb3R0b21SYWYoKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgLy8gQ2FzbyBib3JkZTogY2FtYmlvcyBkZSBtZW5zYWplcyBzaW4gc2VyIG51ZXZvIGFuc3dlci91c2VyL2FwcHJvdmFsXG4gICAgLy8gcGVybyBzw60gdW4gbWVuc2FqZSBudWV2byAobm8gZWwgXCJ1c2VyLWluaXRpYWwtbWVzc2FnZVwiKS4gU2Nyb2xsZWEuXG4gICAgaWYgKCFpc0Fuc3dlck9yUXVlc3Rpb24gJiYgIWlzQXBwcm92YWwgJiYgIWhhc0luaXRpYWxNZXNzYWdlICYmIG1lc3NhZ2VzLmxlbmd0aCA+IHByZXZMZW4pIHtcbiAgICAgIHNjcm9sbFRvQm90dG9tUmFmKClcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIHVwZGF0ZVNjcm9sbEJvdHRvbVZpc2liaWxpdHkoKVxuICB9LCBbbWVzc2FnZXMsIGxvYWRpbmdNZXNzYWdlcywgaXNMb2FkaW5nTW9yZU1lc3NhZ2VzLCBzY3JvbGxUb0JvdHRvbVJhZiwgdXBkYXRlU2Nyb2xsQm90dG9tVmlzaWJpbGl0eV0pXG5cbiAgLy8gRXN0YWRvIGluaWNpYWwgZGVsIGJvdMOzbiBzY3JvbGwtdG8tYm90dG9tIGFsIHRlcm1pbmFyIGxvYWRpbmdNZXNzYWdlcy5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoIWxvYWRpbmdNZXNzYWdlcykge1xuICAgICAgdXBkYXRlU2Nyb2xsQm90dG9tVmlzaWJpbGl0eSgpXG4gICAgfVxuICB9LCBbbG9hZGluZ01lc3NhZ2VzLCBtZXNzYWdlcy5sZW5ndGgsIHVwZGF0ZVNjcm9sbEJvdHRvbVZpc2liaWxpdHldKVxuXG4gIC8vIE9idGVuZXIgZWwgw7psdGltbyBtZW5zYWplIGRlbCB1c3VhcmlvIHBhcmEgdmVyaWZpY2FyIHNpIHRpZW5lIGF0dGFjaG1lbnRzXG4gIGNvbnN0IGxhc3RVc2VyTWVzc2FnZSA9IG1lc3NhZ2VzXG4gICAgLmZpbHRlcihtc2cgPT4gbXNnLnJvbGUgPT09IENoYXRIaXN0b3J5Um9sZS5VU0VSIHx8IG1zZy51c2VyLmlkID09PSBhdXRoVXNlci5pZC50b1N0cmluZygpKVxuICAgIC5hdCgtMSlcblxuICBjb25zdCBhdHRhY2htZW50c0NvdW50ID1cbiAgICAoQXJyYXkuaXNBcnJheShsYXN0VXNlck1lc3NhZ2U/LmF0dGFjaG1lbnRzKSA/IGxhc3RVc2VyTWVzc2FnZS5hdHRhY2htZW50cy5sZW5ndGggOiAwKSB8fFxuICAgIChBcnJheS5pc0FycmF5KGxhc3RVc2VyTWVzc2FnZT8uc291cmNlcykgPyBsYXN0VXNlck1lc3NhZ2Uuc291cmNlcy5sZW5ndGggOiAwKVxuXG4gIGNvbnN0IHN0cmVhbUxvYWRpbmdEaXNwbGF5ID0gcmVzb2x2ZVN0cmVhbUxvYWRpbmdEaXNwbGF5KHtcbiAgICBzdHJlYW1BY3Rpdml0eSxcbiAgICBsb2FkaW5nTWVzc2FnZSxcbiAgICBhY3RpdmVMb2FkaW5nczogYWN0aXZlTG9hZGluZ3MgfHwge30sXG4gICAgd2FpdGluZ1Jlc3BvbnNlLFxuICAgIGlzV2ViU2VhcmNoQWN0aXZlLFxuICAgIGlzRGVlcFNlYXJjaEFjdGl2ZSxcbiAgICBoYXNBdHRhY2htZW50czogQm9vbGVhbihhdHRhY2htZW50c0NvdW50KSxcbiAgICBhdHRhY2htZW50c0NvdW50LFxuICAgIHQsXG4gIH0pXG5cbiAgY29uc3QgaXNTY3JvbGxPblBhcmVudCA9ICEhZXhwYW5kZWRcbiAgY29uc3QgaXNNYXJrZXRwbGFjZUdsb2JhbEFnZW50ID0gaXNNYWlha2VyQWdlbnQoYWdlbnQpXG5cbiAgLy8gQWwgZXhwYW5kaXIvY29udHJhZXIgZWwgbW9kYWwgZWwgcmVmIHBhc2EgYSBvdHJvIGNvbnRlbmVkb3IgKHNjcm9sbFRvcCBzZSByZXNldGVhIGEgMCkuXG4gIC8vIFJlc3RhdXJhciBsYSBwb3NpY2nDs24gZGUgc2Nyb2xsIGFudGVzIGRlbCBwYWludCBwYXJhIGV2aXRhciBxdWUgbGEgY29udmVyc2FjacOzbiBzYWx0ZSBhcnJpYmEuXG4gIGNvbnN0IGV4cGFuZGVkUmVmID0gdXNlUmVmKGV4cGFuZGVkKVxuICB1c2VMYXlvdXRFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChleHBhbmRlZFJlZi5jdXJyZW50ICE9PSBleHBhbmRlZCAmJiBtZXNzYWdlc1JlZi5jdXJyZW50KSB7XG4gICAgICBjb25zdCBzYXZlZFNjcm9sbFRvcCA9IGxhc3RTY3JvbGxUb3BSZWYuY3VycmVudFxuICAgICAgbWVzc2FnZXNSZWYuY3VycmVudC5zY3JvbGxUb3AgPSBzYXZlZFNjcm9sbFRvcFxuICAgICAgZXhwYW5kZWRSZWYuY3VycmVudCA9IGV4cGFuZGVkXG4gICAgfSBlbHNlIHtcbiAgICAgIGV4cGFuZGVkUmVmLmN1cnJlbnQgPSBleHBhbmRlZFxuICAgIH1cbiAgfSwgW2V4cGFuZGVkXSlcblxuICBpZiAobG9hZGluZ01lc3NhZ2VzKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxGYWRlIGZpbGw+XG4gICAgICAgIDxMb2FkZXIgLz5cbiAgICAgIDwvRmFkZT5cbiAgICApXG4gIH1cblxuICBjb25zdCBtZXNzYWdlc0NvbnRlbnQgPSAoXG4gICAgPD5cbiAgICAgIHtpc0xvYWRpbmdNb3JlTWVzc2FnZXMgJiYgPExvYWRpbmdUZXh0IHRleHQ9e3QoJ2NoYXQubG9hZGluZ01vcmUnKX0gLz59XG4gICAgICA8PlxuICAgICAgICB7bWVzc2FnZXMubWFwKChtZXNzYWdlLCBpbmRleCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGlzQXNzaXN0YW50TWVzc2FnZSA9IG1lc3NhZ2Uucm9sZSA9PT0gQ2hhdEhpc3RvcnlSb2xlLkFTU0lTVEFOVCB8fCBtZXNzYWdlLnVzZXIuaWQgPT09ICdhc3Npc3RhbnQnXG4gICAgICAgICAgY29uc3QgaXNMYXN0TWVzc2FnZSA9IGluZGV4ID09PSBtZXNzYWdlcy5sZW5ndGggLSAxXG4gICAgICAgICAgY29uc3QgaXNTdHJlYW1pbmdQbGFjZWhvbGRlciA9XG4gICAgICAgICAgICBpc0Fzc2lzdGFudE1lc3NhZ2UgJiYgaXNMYXN0TWVzc2FnZSAmJiBpc1N0cmVhbWluZ1BsYWNlaG9sZGVyTWVzc2FnZUlkKG1lc3NhZ2UuaWQpXG4gICAgICAgICAgY29uc3QgaXNTdHJlYW1pbmcgPSBpc1N0cmVhbWluZ1BsYWNlaG9sZGVyICYmICh3YWl0aW5nUmVzcG9uc2UgfHwgaXNXcml0aW5nKVxuXG4gICAgICAgICAgLy8gTm8gZmlsdHJhciBlbCBwbGFjZWhvbGRlciBkZWwgbWVuc2FqZSBlbiBzdHJlYW1pbmc6IHN1IHRleHRvIHZpdmVcbiAgICAgICAgICAvLyBlbiBlbCBzdHJlYW1pbmdTdG9yZSB5IGBtZXNzYWdlLm1lc3NhZ2VgIGVzICcnIGhhc3RhIGVsIGNvbXBsZXRlLlxuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICFpc1N0cmVhbWluZ1BsYWNlaG9sZGVyICYmXG4gICAgICAgICAgICAhaXNTdHJlYW1pbmcgJiZcbiAgICAgICAgICAgICEobWVzc2FnZS5hdHRhY2htZW50cz8ubGVuZ3RoIHx8IG1lc3NhZ2Uuc291cmNlcz8ubGVuZ3RoKSAmJlxuICAgICAgICAgICAgIW1lc3NhZ2UubWVzc2FnZSAmJlxuICAgICAgICAgICAgIW1lc3NhZ2UucHJvamVjdD8ubmFtZSAmJlxuICAgICAgICAgICAgIW1lc3NhZ2UuYXBwcm92YWxcbiAgICAgICAgICApXG4gICAgICAgICAgICByZXR1cm4gbnVsbFxuXG4gICAgICAgICAgY29uc3QgbWVzc2FnZUZlZWRiYWNrID1cbiAgICAgICAgICAgIG1lc3NhZ2U/Lndhc0hlbHBmdWwgPT09IHVuZGVmaW5lZCB8fCBtZXNzYWdlLndhc0hlbHBmdWwgPT09IG51bGxcbiAgICAgICAgICAgICAgPyBudWxsXG4gICAgICAgICAgICAgIDogbWVzc2FnZS53YXNIZWxwZnVsXG4gICAgICAgICAgICAgICAgPyBGZWVkYmFjay5USFVNQlNfVVBcbiAgICAgICAgICAgICAgICA6IEZlZWRiYWNrLlRIVU1CU19ET1dOXG5cbiAgICAgICAgICAvLyBLZXkgZXN0YWJsZTogc29sbyBtZXNzYWdlLmlkIHBhcmEgZXZpdGFyIHJlbW91bnQgZHVyYW50ZSBzdHJlYW1pbmcgKG1lc3NhZ2UuZGF0ZSBwdWVkZSBjYW1iaWFyKVxuICAgICAgICAgIGNvbnN0IG1lc3NhZ2VLZXkgPSBtZXNzYWdlLmlkID8/IGBtc2ctJHtpbmRleH1gXG5cbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPE1lc3NhZ2VJdGVtXG4gICAgICAgICAgICAgIHsuLi5tZXNzYWdlfVxuICAgICAgICAgICAgICBrZXk9e21lc3NhZ2VLZXl9XG4gICAgICAgICAgICAgIGF1dGhVc2VyPXthdXRoVXNlcn1cbiAgICAgICAgICAgICAgaGFuZGxlU2VsZWN0T3B0aW9uPXtoYW5kbGVTZWxlY3RPcHRpb259XG4gICAgICAgICAgICAgIGhhbmRsZUZlZWRiYWNrPXtoYW5kbGVGZWVkYmFja31cbiAgICAgICAgICAgICAgaGFuZGxlQXBwcm92YWxEZWNpc2lvbj17aGFuZGxlQXBwcm92YWxEZWNpc2lvbldpdGhTY3JvbGx9XG4gICAgICAgICAgICAgIGhhbmRsZVN1Z2dlc3Rpb25DbGljaz17aGFuZGxlU3VnZ2VzdGlvbkNsaWNrfVxuICAgICAgICAgICAgICBoYXNTZWxlY3RlZFN1Z2dlc3Rpb249eyEhc2VsZWN0ZWRTdWdnZXN0aW9uTWVzc2FnZUlkc1ttZXNzYWdlLmlkXX1cbiAgICAgICAgICAgICAgZGlzYWJsZUZlZWRiYWNrPXttZXNzYWdlRmVlZGJhY2t9XG4gICAgICAgICAgICAgIGlzU3RyZWFtaW5nPXtpc1N0cmVhbWluZ31cbiAgICAgICAgICAgICAgaXNMYXN0TWVzc2FnZT17aXNMYXN0TWVzc2FnZX1cbiAgICAgICAgICAgICAgZXhwYW5kZWQ9e2V4cGFuZGVkfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICApXG4gICAgICAgIH0pfVxuICAgICAgPC8+XG4gICAgICB7c3RyZWFtTG9hZGluZ0Rpc3BsYXkgJiYgKFxuICAgICAgICA8U0NMb2FkaW5nTWVzc2FnZXNDb2x1bW4+XG4gICAgICAgICAgPEFnZW50QWN0aXZpdHlJbmRpY2F0b3IgYWN0aXZpdHk9e3N0cmVhbUxvYWRpbmdEaXNwbGF5fSAvPlxuICAgICAgICA8L1NDTG9hZGluZ01lc3NhZ2VzQ29sdW1uPlxuICAgICAgKX1cbiAgICA8Lz5cbiAgKVxuXG4gIHJldHVybiAoXG4gICAgPFNDTWVzc2FnZXNPdXRlciAkc2Nyb2xsT25QYXJlbnQ9e2lzU2Nyb2xsT25QYXJlbnR9PlxuICAgICAge2lzU2Nyb2xsT25QYXJlbnQgPyAoXG4gICAgICAgIDxTQ01lc3NhZ2VzU2Nyb2xsIHJlZj17bWVzc2FnZXNSZWZ9IG9uU2Nyb2xsPXtoYW5kbGVTY3JvbGxUb0JvdHRvbX0+XG4gICAgICAgICAgPFNDTWVzc2FnZXNJbm5lciAkc2Nyb2xsT25QYXJlbnQ9e2lzU2Nyb2xsT25QYXJlbnR9ICRpc01hcmtldHBsYWNlR2xvYmFsPXtpc01hcmtldHBsYWNlR2xvYmFsQWdlbnR9PlxuICAgICAgICAgICAge21lc3NhZ2VzQ29udGVudH1cbiAgICAgICAgICA8L1NDTWVzc2FnZXNJbm5lcj5cbiAgICAgICAgPC9TQ01lc3NhZ2VzU2Nyb2xsPlxuICAgICAgKSA6IChcbiAgICAgICAgPFNDTWVzc2FnZXNJbm5lclxuICAgICAgICAgIHJlZj17bWVzc2FnZXNSZWZ9XG4gICAgICAgICAgb25TY3JvbGw9e2hhbmRsZVNjcm9sbFRvQm90dG9tfVxuICAgICAgICAgICRzY3JvbGxPblBhcmVudD17ZmFsc2V9XG4gICAgICAgICAgJGlzTWFya2V0cGxhY2VHbG9iYWw9e2lzTWFya2V0cGxhY2VHbG9iYWxBZ2VudH1cbiAgICAgICAgPlxuICAgICAgICAgIHttZXNzYWdlc0NvbnRlbnR9XG4gICAgICAgIDwvU0NNZXNzYWdlc0lubmVyPlxuICAgICAgKX1cblxuICAgICAge3Nob3dTY3JvbGxUb0JvdHRvbSAmJiAoXG4gICAgICAgIDxTY3JvbGxUb0JvdHRvbUJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgb25DbGljaz17aGFuZGxlQ2xpY2tTY3JvbGxUb0JvdHRvbX0+XG4gICAgICAgICAgPEFycm93U21hbGxEb3duIGNvbG9yPVwiIzY2NlwiIHdpZHRoPVwiMjBweFwiIGhlaWdodD1cIjIwcHhcIiAvPlxuICAgICAgICA8L1Njcm9sbFRvQm90dG9tQnV0dG9uPlxuICAgICAgKX1cbiAgICA8L1NDTWVzc2FnZXNPdXRlcj5cbiAgKVxufVxuXG5leHBvcnQgY29uc3QgQ2hhdEFJTWVzc2FnZXMgPSBSZWFjdC5tZW1vKENoYXRBSU1lc3NhZ2VzSW5uZXIpXG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPQSxLQUFLLElBQVFDLElBQUksRUFBYUMsV0FBVyxFQUFFQyxTQUFTLEVBQUVDLGVBQWUsRUFBRUMsTUFBTSxFQUFFQyxRQUFRLEVBQUFDLGFBQUEsSUFBQUMsY0FBQSxRQUFRLE9BQU87QUFDN0csU0FBU0MsVUFBVSxRQUFRLFlBQVk7QUFDdkMsU0FBU0MsZ0JBQWdCLFFBQVEsa0JBQWtCO0FBQ25ELFNBQVNDLGNBQWMsUUFBUSxpREFBaUQ7QUFFaEYsU0FBU0MsY0FBYyxRQUFRLDJDQUEyQztBQUMxRSxTQUFTQyxXQUFXLFFBQVEscUNBQXFDO0FBQ2pFLFNBQVNDLHNCQUFzQixRQUFRLG9DQUFvQztBQUMzRSxTQUFTQyxtQkFBbUIsUUFBUSxnREFBZ0Q7QUFFcEYsU0FBc0JDLGVBQWUsUUFBUSxxQkFBcUI7QUFDbEUsU0FBU0MsOEJBQThCLFFBQVEsNENBQTRDO0FBQzNGLFNBQVNDLHNCQUFzQixFQUFFQyxnQkFBZ0IsUUFBUSxzQ0FBc0M7QUFFL0YsU0FBU0MsY0FBYyxRQUFRLGlDQUFpQztBQUNoRSxTQUFrQkMsT0FBTyxRQUFRLDJCQUEyQjtBQUU1RCxTQUFTQyxJQUFJLFFBQVEscUJBQXFCO0FBQzFDLFNBQVNDLGNBQWMsUUFBUSw4Q0FBOEM7QUFDN0UsU0FBU0MsbUJBQW1CLFFBQVEsb0NBQW9DO0FBQ3hFLFNBQVNDLG1CQUFtQixRQUFRLG9DQUFvQztBQUV4RSxTQUFTQyxXQUFXLFFBQVEseUJBQXlCO0FBQ3JELFNBQVNDLHNCQUFzQixRQUFRLG9DQUFvQztBQUMzRSxTQUFTQywrQkFBK0IsRUFBRUMsMkJBQTJCLFFBQVEsdUNBQXVDO0FBQ3BILFNBQVNDLE1BQU0sUUFBUSxvQkFBb0I7QUFDM0MsU0FBU0MsSUFBSSxRQUFRLGtCQUFrQjtBQUl2QyxTQUFTQyxlQUFlLEVBQUVDLGdCQUFnQixFQUFFQyxzQkFBc0IsRUFBRUMsdUJBQXVCLFFBQVEsVUFBVTtBQUM3RyxTQUFTQyxlQUFlLFFBQVEsb0JBQW9CO0FBQ3BELFNBQ0VDLG1CQUFtQixFQUNuQkMsb0JBQW9CLEVBQ3BCQyxlQUFlLEVBQ2ZDLGdCQUFnQixFQUNoQkMsZUFBZSxFQUNmQyx1QkFBdUIsRUFDdkJDLGFBQWEsRUFDYkMsWUFBWSxFQUNaQyx3QkFBd0IsRUFDeEJDLGVBQWUsRUFDZkMsaUJBQWlCLEVBQ2pCQyxvQkFBb0IsRUFDcEJDLGtCQUFrQixFQUNsQkMsZ0JBQWdCLEVBQ2hCQyx1QkFBdUIsUUFDbEIsYUFBYTtBQUNwQixTQUFTQyxRQUFRLFFBQVEsb0NBQW9DO0FBQzdELFNBQVNDLGdCQUFnQixRQUFRLGlDQUFpQztBQUlsRSxTQUFTQyxRQUFRLFFBQVEsbUJBQW1CO0FBQzVDLFNBQVNDLG9CQUFvQixFQUFFQyw2QkFBNkIsUUFBUSxpQ0FBaUM7QUFDckcsU0FBU0MsaUJBQWlCLFFBQVEscUJBQXFCO0FBQ3ZELFNBQVNDLHdCQUF3QixRQUFRLDRCQUE0QjtBQUNyRSxTQUFTQyxNQUFNLEVBQUVDLFFBQVEsUUFBUSx5QkFBeUI7QUFDMUQsU0FBU0MsbUJBQW1CLFFBQVEsbUNBQW1DO0FBQUEsU0FBQUMsR0FBQSxJQUFBQyxJQUFBLEVBQUFDLElBQUEsSUFBQUMsS0FBQSxFQUFBQyxRQUFBLElBQUFDLFNBQUE7QUFFdkUsSUFBTUMsSUFBSSxHQUFHMUQsZ0JBQWdCLENBQUM7RUFBRTJELE1BQU0sRUFBRSxDQUFDLGNBQWMsRUFBRSxjQUFjO0FBQUUsQ0FBQyxDQUFDO0FBRTNFLElBQU1DLG9CQUF3QixHQUFHLFNBQTNCQSxvQkFBd0JBLENBQUEsRUFBUztFQUNyQyxJQUFBQyxpQkFBQSxHQUFrQmxCLGdCQUFnQixDQUFDLENBQUM7SUFBNUJtQixLQUFLLEdBQUFELGlCQUFBLENBQUxDLEtBQUs7RUFDYixvQkFDRVQsSUFBQSxDQUFDaEIsaUJBQWlCO0lBQUEwQixRQUFBLEVBQ2YsQ0FBQUQsS0FBSyxhQUFMQSxLQUFLLHVCQUFMQSxLQUFLLENBQUVFLElBQUksTUFBSyxPQUFPLElBQUksQ0FBQUYsS0FBSyxhQUFMQSxLQUFLLHVCQUFMQSxLQUFLLENBQUVFLElBQUksTUFBSyxjQUFjLElBQUlGLEtBQUssYUFBTEEsS0FBSyxlQUFMQSxLQUFLLENBQUVHLGlCQUFpQixnQkFDcEZaLElBQUEsQ0FBQ1QsUUFBUTtNQUFDc0IsS0FBSyxFQUFFLEVBQUc7TUFBQ0MsTUFBTSxFQUFFO0lBQUcsQ0FBRSxDQUFDLEdBRW5DTCxLQUFLLGFBQUxBLEtBQUssdUJBQUxBLEtBQUssQ0FBRU07RUFDUixDQUNnQixDQUFDO0FBRXhCLENBQUM7QUFFRCxJQUFNQyxlQUFlLGdCQUFHOUUsSUFBSSxDQUFDcUUsb0JBQW9CLENBQUM7QUErRGxELElBQU1VLGNBQXVDLEdBQUcsU0FBMUNBLGNBQXVDQSxDQUFBQyxJQUFBLEVBQThDO0VBQUEsSUFBeENDLGFBQWEsR0FBQUQsSUFBQSxDQUFiQyxhQUFhO0lBQUVULFFBQVEsR0FBQVEsSUFBQSxDQUFSUixRQUFRO0lBQUtVLEtBQUssR0FBQUMsd0JBQUEsQ0FBQUgsSUFBQSxFQUFBSSxTQUFBO0VBQ2xGLElBQU1DLGdCQUFnQixHQUFHSixhQUFhLEdBQUdsRCxlQUFlLEdBQUdDLGdCQUFnQjtFQUMzRSxvQkFBTzhCLElBQUEsQ0FBQ3VCLGdCQUFnQixFQUFBQyxhQUFBLENBQUFBLGFBQUEsS0FBS0osS0FBSztJQUFBVixRQUFBLEVBQUdBO0VBQVEsRUFBbUIsQ0FBQztBQUNuRSxDQUFDO0FBRUQsSUFBTWUscUJBQXFELEdBQUcsU0FBeERBLHFCQUFxREEsQ0FBQUMsS0FBQSxFQUFvQztFQUFBLElBQTlCUCxhQUFhLEdBQUFPLEtBQUEsQ0FBYlAsYUFBYTtJQUFLQyxLQUFLLEdBQUFDLHdCQUFBLENBQUFLLEtBQUEsRUFBQUMsVUFBQTtFQUN0RixJQUFNQyx1QkFBdUIsR0FBR1QsYUFBYSxHQUFHaEQsc0JBQXNCLEdBQUdDLHVCQUF1QjtFQUNoRyxvQkFBTzRCLElBQUEsQ0FBQzRCLHVCQUF1QixFQUFBSixhQUFBLEtBQUtKLEtBQUssQ0FBRyxDQUFDO0FBQy9DLENBQUM7QUFFRCxTQUFTUyxjQUFjQSxDQUFBQyxLQUFBLEVBTXBCO0VBQUEsSUFMREMsT0FBTyxHQUFBRCxLQUFBLENBQVBDLE9BQU87SUFDUEMsa0JBQWtCLEdBQUFGLEtBQUEsQ0FBbEJFLGtCQUFrQjtFQUtsQixJQUFBQyxTQUFBLEdBQTRDMUYsUUFBUSxDQUFpQixJQUFJLENBQUM7SUFBQTJGLFVBQUEsR0FBQUMsY0FBQSxDQUFBRixTQUFBO0lBQW5FRyxjQUFjLEdBQUFGLFVBQUE7SUFBRUcsaUJBQWlCLEdBQUFILFVBQUE7RUFFeEMsSUFBTUksWUFBWSxHQUFHLFNBQWZBLFlBQVlBLENBQUlDLE1BQWUsRUFBSztJQUN4QyxJQUFJSCxjQUFjLEVBQUU7SUFDcEJDLGlCQUFpQixDQUFDRSxNQUFNLENBQUM7SUFDekJQLGtCQUFrQixDQUFDTyxNQUFNLENBQUM7RUFDNUIsQ0FBQztFQUVELG9CQUNFdkMsSUFBQSxDQUFDcEIsYUFBYTtJQUFBOEIsUUFBQSxFQUNYLENBQUNxQixPQUFPLElBQUksRUFBRSxFQUFFUyxHQUFHLENBQUMsVUFBQUQsTUFBTTtNQUFBLG9CQUN6QnZDLElBQUEsQ0FBQ25CLFlBQVk7UUFDWDRELGFBQWEsRUFBRSxDQUFDLENBQUNMLGNBQWU7UUFDaENNLE9BQU8sRUFBRSxDQUFDLENBQUNOLGNBQWMsSUFBSSxDQUFBQSxjQUFjLGFBQWRBLGNBQWMsdUJBQWRBLGNBQWMsQ0FBRU8sRUFBRSxNQUFLSixNQUFNLENBQUNJLEVBQUc7UUFDOURDLE9BQU8sRUFBRSxTQUFUQSxPQUFPQSxDQUFBO1VBQUEsT0FBUU4sWUFBWSxDQUFDQyxNQUFNLENBQUM7UUFBQSxDQUFDO1FBQUE3QixRQUFBLEVBR25DNkIsTUFBTSxDQUFDTTtNQUFJLEdBRlBOLE1BQU0sQ0FBQ0ksRUFHQSxDQUFDO0lBQUEsQ0FDaEI7RUFBQyxDQUNXLENBQUM7QUFFcEI7QUFFQSxJQUFNRyxzQkFBc0IsR0FBRyxTQUF6QkEsc0JBQXNCQSxDQUFBLEVBQVM7RUFDbkMsSUFBQUMsa0JBQUEsR0FBa0J6RCxnQkFBZ0IsQ0FBQyxDQUFDO0lBQTVCbUIsS0FBSyxHQUFBc0Msa0JBQUEsQ0FBTHRDLEtBQUs7O0VBRWI7RUFDQTtFQUNBLElBQU11QyxXQUFXLEdBQUcsQ0FBQXZDLEtBQUssYUFBTEEsS0FBSyx1QkFBTEEsS0FBSyxDQUFFRSxJQUFJLE1BQUssT0FBTyxJQUFJLENBQUFGLEtBQUssYUFBTEEsS0FBSyx1QkFBTEEsS0FBSyxDQUFFRSxJQUFJLE1BQUssY0FBYyxHQUFHLE1BQU0sR0FBR0YsS0FBSyxhQUFMQSxLQUFLLHVCQUFMQSxLQUFLLENBQUVvQyxJQUFJO0VBRXBHLG9CQUNFM0MsS0FBQSxDQUFDcEIsd0JBQXdCO0lBQUE0QixRQUFBLGdCQUN2QlYsSUFBQSxDQUFDZ0IsZUFBZSxJQUFFLENBQUMsRUFDbEJnQyxXQUFXLGlCQUFJaEQsSUFBQSxDQUFDakIsZUFBZTtNQUFBMkIsUUFBQSxFQUFFc0M7SUFBVyxDQUFrQixDQUFDO0VBQUEsQ0FDeEMsQ0FBQztBQUUvQixDQUFDOztBQUVEO0FBQ0EsSUFBTUMsb0JBQW9CLGdCQUFHL0csSUFBSSxDQUMvQixVQUFDa0YsS0FpQkEsRUFBSztFQUFBLElBQUE4QixxQkFBQSxFQUFBQyxrQkFBQTtFQUNKO0VBQ0E7RUFDQTtFQUNBLElBQU1DLGFBQWEsR0FBRzFGLG1CQUFtQixDQUFDMEQsS0FBSyxDQUFDaUMsV0FBVyxHQUFHakMsS0FBSyxDQUFDa0MsU0FBUyxHQUFHLElBQUksQ0FBQztFQUNyRixJQUFNQyxPQUFPLEdBQUduQyxLQUFLLENBQUNpQyxXQUFXLEdBQUdELGFBQWEsR0FBR2hDLEtBQUssQ0FBQ29DLE9BQU87RUFDakU7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBLElBQU1DLFFBQVEsR0FDWixPQUFPQyxNQUFNLEtBQUssV0FBVyxHQUN4QkEsTUFBTSxHQU9QLENBQUMsQ0FBQztFQUNSLElBQU1DLFdBQVcsR0FBR2xHLG1CQUFtQixDQUFDOEYsT0FBTyxFQUFBL0IsYUFBQSxDQUFBQSxhQUFBLENBQUFBLGFBQUEsQ0FBQUEsYUFBQSxDQUFBQSxhQUFBO0lBQzdDb0MsT0FBTyxFQUFFLENBQUMsQ0FBQ3hDLEtBQUssQ0FBQ2lDLFdBQVc7SUFDNUJRLGdCQUFnQixFQUFFLEVBQUU7SUFDcEJDLGtCQUFrQixFQUFFO0VBQUksR0FDcEJMLFFBQVEsQ0FBQ00sV0FBVyxJQUFJLElBQUksSUFBSTtJQUFFQyxXQUFXLEVBQUVQLFFBQVEsQ0FBQ007RUFBWSxDQUFDLEdBQ3JFTixRQUFRLENBQUNRLFdBQVcsSUFBSSxJQUFJLElBQUk7SUFBRUMsa0JBQWtCLEVBQUVULFFBQVEsQ0FBQ1E7RUFBWSxDQUFDLEdBQzVFUixRQUFRLENBQUNVLGNBQWMsSUFBSSxJQUFJLElBQUk7SUFBRUMsY0FBYyxFQUFFWCxRQUFRLENBQUNVO0VBQWUsQ0FBQyxHQUM5RVYsUUFBUSxDQUFDWSxlQUFlLElBQUksSUFBSSxJQUFJO0lBQUVDLGNBQWMsRUFBRWIsUUFBUSxDQUFDWTtFQUFnQixDQUFDLEdBQ2hGWixRQUFRLENBQUNjLGNBQWMsSUFBSSxJQUFJLElBQUk7SUFBRUMsUUFBUSxFQUFFZixRQUFRLENBQUNjO0VBQWUsQ0FBQyxDQUM3RSxDQUFDO0VBQ0YsSUFBTUUseUJBQXlCLElBQUF2QixxQkFBQSxHQUFHOUIsS0FBSyxDQUFDc0QsbUJBQW1CLGNBQUF4QixxQkFBQSx1QkFBekJBLHFCQUFBLENBQTJCeUIsT0FBTztFQUVwRSxJQUFJLENBQUNoQixXQUFXLElBQUksQ0FBQ3ZDLEtBQUssQ0FBQ2lDLFdBQVcsRUFBRSxPQUFPLElBQUk7RUFDbkQsSUFBTXVCLFdBQVcsR0FBR3hILGdCQUFnQixDQUFDdUcsV0FBVyxDQUFDO0VBQ2pELElBQU1rQixZQUFZLEdBQUdELFdBQVcsR0FBR3pILHNCQUFzQixDQUFDd0csV0FBVyxDQUFDLEdBQUcsSUFBSTtFQUM3RSxvQkFDRXpELEtBQUEsQ0FBQUUsU0FBQTtJQUFBTSxRQUFBLGdCQUNFVixJQUFBLENBQUMxQixtQkFBbUI7TUFDbEI2QyxhQUFhLEVBQUVDLEtBQUssQ0FBQ0QsYUFBYztNQUNuQzJELG1CQUFtQixFQUFFMUQsS0FBSyxDQUFDMEQsbUJBQW9CO01BQy9DQyxTQUFTLEVBQUV0Riw2QkFBNkIsQ0FBQ2tFLFdBQVcsQ0FBRTtNQUFBakQsUUFBQSxFQUVyRGtFLFdBQVcsSUFBSUMsWUFBWTtNQUFBO01BQzFCO01BQ0E3RSxJQUFBO1FBQU1nRixLQUFLLEVBQUU7VUFBRUMsT0FBTyxFQUFFO1FBQVMsQ0FBRTtRQUFBdkUsUUFBQSxFQUFFbUU7TUFBWSxDQUFPLENBQUM7TUFBQTtNQUV6RDtNQUNBN0UsSUFBQSxDQUFDdEQsVUFBVTtRQUNUd0ksT0FBTyxFQUFFO1VBQUU3RSxJQUFJLEVBQUpBO1FBQUssQ0FBRTtRQUNsQjhFLGFBQWEsRUFBRWpJLDhCQUErQjtRQUM5Q2tJLFVBQVUsRUFBRTtVQUFFQyxDQUFDLEVBQUU3RjtRQUFxQixDQUFvRDtRQUMxRjhGLFVBQVUsRUFBRTtVQUFFMUIsT0FBTyxFQUFFO1FBQU0sQ0FBRTtRQUMvQjJCLFdBQVcsRUFBRSxDQUFDLENBQUNuRSxLQUFLLENBQUNpQyxXQUFZO1FBQ2pDbUMsVUFBVSxFQUFFLENBQUMsY0FBYyxFQUFFLGNBQWMsQ0FBRTtRQUM3Q0MsUUFBUSxFQUFFO1VBQUVDLEtBQUssRUFBRSxLQUFLO1VBQUVyRixJQUFJLEVBQUU7UUFBTSxDQUFFO1FBQUFLLFFBQUEsRUFFdkNpRDtNQUFXLENBQ0Y7SUFDYixDQUNrQixDQUFDLEVBQ3JCdkMsS0FBSyxDQUFDdUUsV0FBVyxJQUFJLENBQUN2RSxLQUFLLENBQUN3RSxPQUFPLElBQUksQ0FBQ3hFLEtBQUssQ0FBQzBELG1CQUFtQixJQUFJLENBQUMxRCxLQUFLLENBQUN5RSxRQUFRLElBQUksQ0FBQ3pFLEtBQUssQ0FBQ2lDLFdBQVcsaUJBQ3pHckQsSUFBQSxDQUFDM0IsZUFBZTtNQUNkeUgsT0FBTyxFQUFFbkMsV0FBWTtNQUNyQm9DLE9BQU8sRUFBRTNFLEtBQUssQ0FBQzJFLE9BQVE7TUFDdkJDLGNBQWMsRUFBRTVFLEtBQUssQ0FBQzZFLG1CQUFvQjtNQUMxQ0MsZUFBZSxFQUFFOUUsS0FBSyxDQUFDOEU7SUFBZ0IsQ0FDeEMsQ0FDRixFQUNBOUUsS0FBSyxDQUFDdUUsV0FBVyxJQUNoQixDQUFDdkUsS0FBSyxDQUFDMEQsbUJBQW1CLElBQzFCLENBQUMxRCxLQUFLLENBQUN5RSxRQUFRLEtBQ2QsQ0FBQ3pFLEtBQUssQ0FBQ3dFLE9BQU8sTUFBQXpDLGtCQUFBLEdBQUkvQixLQUFLLENBQUMrRSxXQUFXLGNBQUFoRCxrQkFBQSx1QkFBakJBLGtCQUFBLENBQW1CaUQsTUFBTSxFQUFDLGlCQUMzQ3BHLElBQUEsQ0FBQ04saUJBQWlCO01BQ2hCeUcsV0FBVyxFQUFFL0UsS0FBSyxDQUFDK0UsV0FBVyxJQUFJLEVBQUc7TUFDckNFLGtCQUFrQixFQUFFLFNBQXBCQSxrQkFBa0JBLENBQUVDLFVBQVU7UUFBQSxPQUFJbEYsS0FBSyxDQUFDbUYscUJBQXFCLENBQUNuRixLQUFLLENBQUNrQyxTQUFTLEVBQUVnRCxVQUFVLENBQUM7TUFBQSxDQUFDO01BQzNGRSxRQUFRLEVBQUVwRixLQUFLLENBQUNxRixtQkFBb0I7TUFDcENDLE1BQU0sRUFBRSxDQUFDLENBQUN0RixLQUFLLENBQUNpQyxXQUFXLElBQUksQ0FBQ2pDLEtBQUssQ0FBQ3VGLGFBQWEsSUFBSSxDQUFDLENBQUN2RixLQUFLLENBQUNxRjtJQUFvQixDQUNwRixDQUNGLEVBQ0ZyRixLQUFLLENBQUN1RSxXQUFXLElBQ2hCLENBQUN2RSxLQUFLLENBQUN3RSxPQUFPLElBQ2QsQ0FBQ3hFLEtBQUssQ0FBQzBELG1CQUFtQixJQUMxQixDQUFDMUQsS0FBSyxDQUFDeUUsUUFBUSxJQUNmLENBQUMsQ0FBQ3BCLHlCQUF5QixpQkFDekJ6RSxJQUFBLENBQUNMLHdCQUF3QjtNQUN2QmdGLE9BQU8sRUFBRUYseUJBQTBCO01BQ25DK0IsUUFBUSxFQUFFcEYsS0FBSyxDQUFDcUYsbUJBQW9CO01BQ3BDQyxNQUFNLEVBQUUsQ0FBQyxDQUFDdEYsS0FBSyxDQUFDaUMsV0FBVyxJQUFJLENBQUNqQyxLQUFLLENBQUN1RixhQUFhLElBQUksQ0FBQyxDQUFDdkYsS0FBSyxDQUFDcUY7SUFBb0IsQ0FDcEYsQ0FDRjtFQUFBLENBQ0gsQ0FBQztBQUVQLENBQ0YsQ0FBQztBQUVELElBQU1HLFdBQVcsZ0JBQUcxSyxJQUFJLENBQUMsVUFBQ2tGLEtBQXVCLEVBQUs7RUFBQSxJQUFBeUYscUJBQUE7RUFDcEQsSUFDRWxFLEVBQUUsR0FzQkF2QixLQUFLLENBdEJQdUIsRUFBRTtJQUNGbUUsSUFBSSxHQXFCRjFGLEtBQUssQ0FyQlAwRixJQUFJO0lBQ0p0RCxPQUFPLEdBb0JMcEMsS0FBSyxDQXBCUG9DLE9BQU87SUFDUEgsV0FBVyxHQW1CVGpDLEtBQUssQ0FuQlBpQyxXQUFXO0lBQ1h1QyxPQUFPLEdBa0JMeEUsS0FBSyxDQWxCUHdFLE9BQU87SUFDUG1CLFFBQVEsR0FpQk4zRixLQUFLLENBakJQMkYsUUFBUTtJQUNSaEYsT0FBTyxHQWdCTFgsS0FBSyxDQWhCUFcsT0FBTztJQUNQaUYsZUFBZSxHQWViNUYsS0FBSyxDQWZQNEYsZUFBZTtJQUNmaEYsa0JBQWtCLEdBY2hCWixLQUFLLENBZFBZLGtCQUFrQjtJQUNsQnVFLHFCQUFxQixHQWFuQm5GLEtBQUssQ0FiUG1GLHFCQUFxQjtJQUNyQlAsY0FBYyxHQVlaNUUsS0FBSyxDQVpQNEUsY0FBYztJQUNkaUIsc0JBQXNCLEdBV3BCN0YsS0FBSyxDQVhQNkYsc0JBQXNCO0lBQ3RCZixlQUFlLEdBVWI5RSxLQUFLLENBVlA4RSxlQUFlO0lBQ2ZnQixJQUFJLEdBU0Y5RixLQUFLLENBVFA4RixJQUFJO0lBQ0puQixPQUFPLEdBUUwzRSxLQUFLLENBUlAyRSxPQUFPO0lBQ1BvQixXQUFXLEdBT1QvRixLQUFLLENBUFArRixXQUFXO0lBQ1h0QixRQUFRLEdBTU56RSxLQUFLLENBTlB5RSxRQUFRO0lBQ1J1QixjQUFjLEdBS1poRyxLQUFLLENBTFBnRyxjQUFjO0lBQ2RqQixXQUFXLEdBSVQvRSxLQUFLLENBSlArRSxXQUFXO0lBQ1h6QixtQkFBbUIsR0FHakJ0RCxLQUFLLENBSFBzRCxtQkFBbUI7SUFDbkIyQyxxQkFBcUIsR0FFbkJqRyxLQUFLLENBRlBpRyxxQkFBcUI7SUFDckJWLGFBQWEsR0FDWHZGLEtBQUssQ0FEUHVGLGFBQWE7RUFHZixJQUFBVyxVQUFBLEdBQWtEL0ssUUFBUSxDQUF3QixJQUFJLENBQUM7SUFBQWdMLFVBQUEsR0FBQXBGLGNBQUEsQ0FBQW1GLFVBQUE7SUFBaEZFLGlCQUFpQixHQUFBRCxVQUFBO0lBQUVFLG9CQUFvQixHQUFBRixVQUFBO0VBQzlDLElBQU1wRyxhQUFhLEdBQUcrRixJQUFJLEtBQUtqSyxlQUFlLENBQUN5SyxJQUFJLElBQUlaLElBQUksQ0FBQ25FLEVBQUUsS0FBS29FLFFBQVEsQ0FBQ3BFLEVBQUUsQ0FBQ2dGLFFBQVEsQ0FBQyxDQUFDO0VBQ3pGLElBQU1oQyxXQUFXLEdBQUd1QixJQUFJLEtBQUtqSyxlQUFlLENBQUMySyxTQUFTLElBQUlkLElBQUksQ0FBQ25FLEVBQUUsS0FBSyxXQUFXO0VBQ2pGO0VBQ0E7RUFDQSxJQUFNa0Ysc0JBQXNCLEdBQUdoSywrQkFBK0IsQ0FBQzhFLEVBQUUsQ0FBQztFQUNsRSxJQUFNUyxhQUFhLEdBQUcxRixtQkFBbUIsQ0FBQzJGLFdBQVcsSUFBSXdFLHNCQUFzQixHQUFHbEYsRUFBRSxHQUFHLElBQUksQ0FBQztFQUM1RixJQUFNbUYsaUJBQWlCLEdBQUcsQ0FBQyxDQUFDekUsV0FBVyxJQUFJd0Usc0JBQXNCO0VBQ2pFLElBQU1FLFVBQVUsR0FBR0QsaUJBQWlCLElBQUksQ0FBQzFFLGFBQWE7RUFDdEQsSUFBSTJFLFVBQVUsRUFBRTtJQUNkLE9BQU8sSUFBSTtFQUNiO0VBQ0EsSUFBTUMsa0JBQWtCLEdBQ3RCYixXQUFXLElBQUlBLFdBQVcsQ0FBQ2YsTUFBTSxHQUFHLENBQUMsR0FDakNlLFdBQVcsR0FDWCxDQUFDeEIsV0FBVyxJQUFJc0MsS0FBSyxDQUFDQyxPQUFPLENBQUNuQyxPQUFPLENBQUMsR0FDbkNBLE9BQU8sR0FDUixFQUFFO0VBRVYsSUFBTW9DLHFCQUFxQixHQUFHLFNBQXhCQSxxQkFBcUJBLENBQUlDLFVBQTBCLEVBQUs7SUFDNUQ7SUFDQSxJQUNFQSxVQUFVLENBQUNDLElBQUksWUFBWUMsSUFBSSxJQUMvQkYsVUFBVSxDQUFDRyxZQUFZLFlBQVlELElBQUksSUFDdkNGLFVBQVUsQ0FBQ0ksYUFBYSxJQUN4QkosVUFBVSxDQUFDSyxZQUFZLElBQ3ZCTCxVQUFVLENBQUNNLFFBQVEsRUFDbkI7TUFDQWpCLG9CQUFvQixDQUFDVyxVQUFVLENBQUM7SUFDbEM7RUFDRixDQUFDO0VBRUQsSUFBTU8sa0JBQWtCLEdBQUcsU0FBckJBLGtCQUFrQkEsQ0FBQSxFQUFTO0lBQy9CbEIsb0JBQW9CLENBQUMsSUFBSSxDQUFDO0VBQzVCLENBQUM7RUFFRCxJQUFNbUIsd0JBQXdCO0lBQUEsSUFBQUMsS0FBQSxHQUFBQyxpQkFBQSxjQUFBQyxtQkFBQSxDQUFBQyxJQUFBLENBQUcsU0FBQUMsUUFBT2IsVUFBMEI7TUFBQSxJQUFBYyxTQUFBLEVBQUFDLFFBQUEsRUFBQUMsT0FBQSxFQUFBQyxPQUFBLEVBQUFDLGNBQUEsRUFBQUMsSUFBQSxFQUFBQyxFQUFBO01BQUEsT0FBQVQsbUJBQUEsQ0FBQVUsSUFBQSxXQUFBQyxRQUFBO1FBQUEsa0JBQUFBLFFBQUEsQ0FBQUMsSUFBQSxHQUFBRCxRQUFBLENBQUFFLElBQUE7VUFBQTtZQUMxRFYsU0FBUyxHQUFHZCxVQUFVLENBQUN2RixJQUFJLENBQUNnSCxRQUFRLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxPQUFBQyxNQUFBLENBQU8xQixVQUFVLENBQUN6SCxJQUFJLENBQUU7WUFDdEV3SSxRQUFRLE1BQUFXLE1BQUEsQ0FBTTFCLFVBQVUsQ0FBQ3ZGLElBQUksRUFBQWlILE1BQUEsQ0FBR1osU0FBUztZQUN6Q0UsT0FBTyxHQUFHaEIsVUFBVSxDQUFDSyxZQUFZLElBQUlMLFVBQVUsQ0FBQ00sUUFBUSxJQUFJTixVQUFVLENBQUNJLGFBQWE7WUFBQWtCLFFBQUEsQ0FBQUMsSUFBQTtZQUdwRk4sT0FBc0IsR0FBRyxJQUFJO1lBQUEsS0FFN0JELE9BQU87Y0FBQU0sUUFBQSxDQUFBRSxJQUFBO2NBQUE7WUFBQTtZQUFBRixRQUFBLENBQUFFLElBQUE7WUFBQSxPQUNvQjlKLG1CQUFtQixDQUFDc0osT0FBTyxFQUFFRCxRQUFRLEVBQUVmLFVBQVUsQ0FBQ3pILElBQUksQ0FBQztVQUFBO1lBQTlFMkksY0FBYyxHQUFBSSxRQUFBLENBQUFLLElBQUE7WUFDcEJWLE9BQU8sR0FBR1csR0FBRyxDQUFDQyxlQUFlLENBQUNYLGNBQWMsQ0FBQztZQUFBSSxRQUFBLENBQUFFLElBQUE7WUFBQTtVQUFBO1lBQ3hDLElBQUl4QixVQUFVLENBQUNDLElBQUksWUFBWUMsSUFBSSxFQUFFO2NBQzFDZSxPQUFPLEdBQUdXLEdBQUcsQ0FBQ0MsZUFBZSxDQUFDN0IsVUFBVSxDQUFDQyxJQUFJLENBQUM7WUFDaEQ7VUFBQztZQUFBLElBRUlnQixPQUFPO2NBQUFLLFFBQUEsQ0FBQUUsSUFBQTtjQUFBO1lBQUE7WUFBQSxPQUFBRixRQUFBLENBQUFRLE1BQUE7VUFBQTtZQUVOWCxJQUFJLEdBQUdZLFFBQVEsQ0FBQzNOLGFBQWEsQ0FBQyxHQUFHLENBQUM7WUFDeEMrTSxJQUFJLENBQUNhLElBQUksR0FBR2YsT0FBTztZQUNuQkUsSUFBSSxDQUFDYyxRQUFRLEdBQUdsQixRQUFRO1lBQ3hCSSxJQUFJLENBQUN2RSxLQUFLLENBQUNDLE9BQU8sR0FBRyxNQUFNO1lBQzNCa0YsUUFBUSxDQUFDRyxJQUFJLENBQUNDLFdBQVcsQ0FBQ2hCLElBQUksQ0FBQztZQUMvQkEsSUFBSSxDQUFDaUIsS0FBSyxDQUFDLENBQUM7WUFFWkMsVUFBVSxDQUFDLFlBQU07Y0FDZk4sUUFBUSxDQUFDRyxJQUFJLENBQUNJLFdBQVcsQ0FBQ25CLElBQUksQ0FBQztjQUMvQlMsR0FBRyxDQUFDVyxlQUFlLENBQUN0QixPQUFPLENBQUM7WUFDOUIsQ0FBQyxFQUFFLEdBQUcsQ0FBQztZQUFBSyxRQUFBLENBQUFFLElBQUE7WUFBQTtVQUFBO1lBQUFGLFFBQUEsQ0FBQUMsSUFBQTtZQUFBSCxFQUFBLEdBQUFFLFFBQUE7WUFFUGtCLE9BQU8sQ0FBQ0MsS0FBSyxDQUFDLCtCQUErQixFQUFBckIsRUFBTyxDQUFDO1VBQUE7VUFBQTtZQUFBLE9BQUFFLFFBQUEsQ0FBQW9CLElBQUE7UUFBQTtNQUFBLEdBQUE3QixPQUFBO0lBQUEsQ0FFeEQ7SUFBQSxnQkEvQktMLHdCQUF3QkEsQ0FBQW1DLEVBQUE7TUFBQSxPQUFBbEMsS0FBQSxDQUFBbUMsS0FBQSxPQUFBQyxTQUFBO0lBQUE7RUFBQSxHQStCN0I7RUFFRCxJQUFJakUsZUFBZSxJQUFJakYsT0FBTyxFQUFFO0lBQzlCLG9CQUNFL0IsSUFBQSxDQUFDaUIsY0FBYztNQUFVRSxhQUFhLEVBQUVBLGFBQWM7TUFBQyxtQkFBaUJ3QixFQUFHO01BQUN1SSxXQUFXLEVBQUUsS0FBTTtNQUFBeEssUUFBQSxlQUM3RlIsS0FBQSxDQUFDakIsb0JBQW9CO1FBQUNrTSxZQUFZLEVBQUV4RixXQUFZO1FBQUFqRixRQUFBLEdBQzdDaUYsV0FBVyxJQUFJLENBQUNvQyxVQUFVLGlCQUFJL0gsSUFBQSxDQUFDOEMsc0JBQXNCLElBQUUsQ0FBQyxlQUN6RDlDLElBQUEsQ0FBQ3lCLHFCQUFxQjtVQUNwQnVGLGVBQWUsRUFBRUEsZUFBZ0I7VUFDakN4RCxPQUFPLEVBQUVBLE9BQVE7VUFDakJyQyxhQUFhLEVBQUVBLGFBQWM7VUFDN0J5RSxPQUFPLEVBQUVBLE9BQVE7VUFDakJ3RixtQkFBbUIsZUFBRXBMLElBQUEsQ0FBQzZCLGNBQWM7WUFBQ0UsT0FBTyxFQUFFQSxPQUFlO1lBQUNDLGtCQUFrQixFQUFFQTtVQUFtQixDQUFFO1FBQUUsQ0FDMUcsQ0FBQztNQUFBLENBQ2tCO0lBQUMsR0FWSlcsRUFXTCxDQUFDO0VBRXJCO0VBRUEsSUFBTXNELG1CQUFtQixHQUFHLFNBQXRCQSxtQkFBbUJBLENBQUlvRixRQUFrQixFQUFLO0lBQ2xELElBQU1DLFNBQVMsR0FBRzNJLEVBQUUsQ0FDakI0SSxLQUFLLENBQUMsR0FBRyxDQUFDLENBQ1ZDLE1BQU0sQ0FBQyxVQUFBQyxVQUFVO01BQUEsT0FBSUEsVUFBVSxLQUFLLFFBQVE7SUFBQSxFQUFDLENBQzdDQyxJQUFJLENBQUMsR0FBRyxDQUFDO0lBQ1oxRixjQUFjLGFBQWRBLGNBQWMsZUFBZEEsY0FBYyxDQUFHcUYsUUFBUSxFQUFFQyxTQUFTLENBQUM7RUFDdkMsQ0FBQztFQUVELG9CQUNFcEwsS0FBQSxDQUFDakIsb0JBQW9CO0lBQUNrTSxZQUFZLEVBQUV4RixXQUFZO0lBQUFqRixRQUFBLEdBQzdDaUYsV0FBVyxJQUFJLENBQUNvQyxVQUFVLGlCQUFJL0gsSUFBQSxDQUFDOEMsc0JBQXNCLElBQUUsQ0FBQyxlQUN6RDVDLEtBQUEsQ0FBQ2hCLGtCQUFrQjtNQUFBd0IsUUFBQSxHQUNoQixDQUFDLENBQUNzSCxrQkFBa0IsQ0FBQzVCLE1BQU0saUJBQzFCcEcsSUFBQSxDQUFDYixnQkFBZ0I7UUFBQ2dNLFlBQVksRUFBRXhGLFdBQVk7UUFBQWpGLFFBQUEsRUFDekNzSCxrQkFBa0IsQ0FBQ3hGLEdBQUcsQ0FBQyxVQUFDNEYsVUFBVSxFQUFFdUQsS0FBSyxFQUFLO1VBQUEsSUFBQUMsZ0JBQUEsRUFBQUMsZ0JBQUE7VUFDN0M7VUFDQSxJQUFNQyxjQUFjLEdBQUcsQ0FBQTFELFVBQVUsYUFBVkEsVUFBVSxnQkFBQXdELGdCQUFBLEdBQVZ4RCxVQUFVLENBQUV6SCxJQUFJLGNBQUFpTCxnQkFBQSx1QkFBaEJBLGdCQUFBLENBQWtCRyxXQUFXLENBQUMsQ0FBQyxLQUFJLEVBQUU7VUFDNUQsSUFBTUMsY0FBYyxHQUFHLENBQUE1RCxVQUFVLGFBQVZBLFVBQVUsZ0JBQUF5RCxnQkFBQSxHQUFWekQsVUFBVSxDQUFFdkYsSUFBSSxjQUFBZ0osZ0JBQUEsdUJBQWhCQSxnQkFBQSxDQUFrQkUsV0FBVyxDQUFDLENBQUMsS0FBSSxFQUFFO1VBQzVELElBQU1FLFdBQVcsR0FDZkgsY0FBYyxDQUFDSSxVQUFVLENBQUMsUUFBUSxDQUFDLElBQ25DLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDckMsUUFBUSxDQUFDaUMsY0FBYyxDQUFDLElBQ25GLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDSyxJQUFJLENBQUMsVUFBQUMsR0FBRztZQUFBLE9BQ3pFSixjQUFjLENBQUNLLFFBQVEsQ0FBQ0QsR0FBRyxDQUFDO1VBQUEsQ0FDOUIsQ0FBQztVQUVILElBQUlILFdBQVcsRUFBRTtZQUNmLG9CQUFPak0sSUFBQSxDQUFDaEQsbUJBQW1CO2NBQTZDb0wsVUFBVSxFQUFFQTtZQUFXLE1BQUEwQixNQUFBLENBQTNEMUIsVUFBVSxDQUFDekYsRUFBRSxPQUFBbUgsTUFBQSxDQUFJMUIsVUFBVSxDQUFDdkYsSUFBSSxDQUE2QixDQUFDO1VBQ3BHO1VBRUEsb0JBQ0U3QyxJQUFBLENBQUNuRCxjQUFjO1lBRWJ1TCxVQUFVLEVBQUVBLFVBQVc7WUFDdkJrRSxhQUFhLEVBQUVYLEtBQU07WUFDckJZLFVBQVUsRUFBRSxTQUFaQSxVQUFVQSxDQUFBO2NBQUEsT0FBUTNELHdCQUF3QixDQUFDUixVQUFVLENBQUM7WUFBQSxDQUFDO1lBQ3ZEeEYsT0FBTyxFQUFFLFNBQVRBLE9BQU9BLENBQUE7Y0FBQSxPQUFRdUYscUJBQXFCLENBQUNDLFVBQVUsQ0FBQztZQUFBO1VBQUMsTUFBQTBCLE1BQUEsQ0FKekMxQixVQUFVLENBQUN6RixFQUFFLE9BQUFtSCxNQUFBLENBQUkxQixVQUFVLENBQUN2RixJQUFJLENBS3pDLENBQUM7UUFFTixDQUFDO01BQUMsQ0FDYyxDQUNuQixFQUNBLENBQUMsQ0FBQyxDQUFDVyxPQUFPLElBQUlzRSxpQkFBaUIsS0FBSyxFQUFFbkMsV0FBVyxJQUFJLENBQUMsQ0FBQ3FDLGtCQUFrQixDQUFDNUIsTUFBTSxDQUFDLGlCQUNoRnBHLElBQUEsQ0FBQ2lELG9CQUFvQjtRQUNuQk8sT0FBTyxFQUFFQSxPQUFPLGFBQVBBLE9BQU8sY0FBUEEsT0FBTyxHQUFJLEVBQUc7UUFDdkJILFdBQVcsRUFBRXlFLGlCQUFrQjtRQUMvQjNHLGFBQWEsRUFBRUEsYUFBYztRQUM3QndFLFdBQVcsRUFBRUEsV0FBWTtRQUN6QmIsbUJBQW1CLEVBQUUxRCxLQUFLLENBQUMwRCxtQkFBb0I7UUFDL0NlLFFBQVEsRUFBRUEsUUFBUztRQUNuQkQsT0FBTyxFQUFFQSxPQUFRO1FBQ2pCRyxPQUFPLEVBQUVBLE9BQVE7UUFDakJJLFdBQVcsRUFBRUEsV0FBWTtRQUN6QnpCLG1CQUFtQixFQUFFQSxtQkFBb0I7UUFDekN1QixtQkFBbUIsRUFBRUEsbUJBQW9CO1FBQ3pDQyxlQUFlLEVBQUVBLGVBQWUsYUFBZkEsZUFBZSxjQUFmQSxlQUFlLEdBQUksSUFBSztRQUN6Q0sscUJBQXFCLEVBQUVBLHFCQUFzQjtRQUM3Q0UsbUJBQW1CLEVBQUVxQixpQkFBaUIsSUFBSSxDQUFDLENBQUNULHFCQUFzQjtRQUNsRS9ELFNBQVMsRUFBRVgsRUFBRztRQUNkZ0UsYUFBYSxFQUFFQTtNQUFjLENBQzlCLENBQ0YsRUFDQWQsUUFBUSxJQUFJQSxRQUFRLENBQUMyRyxlQUFlLGlCQUNuQ3hNLElBQUEsQ0FBQ1osdUJBQXVCO1FBQUFzQixRQUFBLGVBQ3RCVixJQUFBLENBQUNsRCxXQUFXO1VBQ1YyUCxPQUFPLEVBQUU1RyxRQUFRLENBQUMyRyxlQUFnQjtVQUNsQ0UsTUFBTSxFQUFFdEYsY0FBZTtVQUN2QnVGLFNBQVMsRUFBRSxTQUFYQSxTQUFTQSxDQUFFQyxTQUFTO1lBQUEsT0FBSTNGLHNCQUFzQixDQUFDMkYsU0FBUyxFQUFFLFNBQVMsQ0FBQztVQUFBLENBQUM7VUFDckVDLFFBQVEsRUFBRSxTQUFWQSxRQUFRQSxDQUFFRCxTQUFTO1lBQUEsT0FBSTNGLHNCQUFzQixDQUFDMkYsU0FBUyxFQUFFLFFBQVEsQ0FBQztVQUFBLENBQUM7VUFDbkVFLGdCQUFnQixFQUFFLEVBQUFqRyxxQkFBQSxHQUFBekYsS0FBSyxDQUFDMkwsZUFBZSxjQUFBbEcscUJBQUEsdUJBQXJCQSxxQkFBQSxDQUF1Qm1HLFVBQVUsTUFBSyxJQUFLO1VBQzdEQyxVQUFVLEVBQUU3TCxLQUFLLENBQUM4TCxRQUFTO1VBQzNCQyxjQUFjLEVBQUV0SCxRQUFRLENBQUN1SCxrQkFBbUI7VUFDNUNDLGNBQWMsRUFBRXhILFFBQVEsQ0FBQ3lILGVBQWdCO1VBQ3pDQyxzQkFBc0IsRUFBRTFILFFBQVEsQ0FBQzJIO1FBQXlCLENBQzNEO01BQUMsQ0FDcUIsQ0FDMUI7SUFBQSxDQUNpQixDQUFDLGVBQ3JCeE4sSUFBQSxDQUFDakQsc0JBQXNCO01BQ3JCMFEsTUFBTSxFQUFFLENBQUMsQ0FBQ2pHLGlCQUFrQjtNQUM1QmtHLE9BQU8sRUFBRS9FLGtCQUFtQjtNQUM1QlAsVUFBVSxFQUFFWjtJQUFrQixDQUMvQixDQUFDO0VBQUEsQ0FDa0IsQ0FBQztBQUUzQixDQUFDLENBQUM7QUFFRixJQUFNbUcsbUJBQW1CLEdBQUcsU0FBdEJBLG1CQUFtQkEsQ0FBQUMsS0FBQSxFQVNFO0VBQUEsSUFSekJDLGtCQUFrQixHQUFBRCxLQUFBLENBQWxCQyxrQkFBa0I7SUFDbEJDLGFBQWEsR0FBQUYsS0FBQSxDQUFiRSxhQUFhO0lBQ2JDLE9BQU8sR0FBQUgsS0FBQSxDQUFQRyxPQUFPO0lBQ1BDLGtCQUFrQixHQUFBSixLQUFBLENBQWxCSSxrQkFBa0I7SUFDbEJDLGdCQUFnQixHQUFBTCxLQUFBLENBQWhCSyxnQkFBZ0I7SUFDaEI5RyxXQUFXLEdBQUF5RyxLQUFBLENBQVh6RyxXQUFXO0lBQ1grRyxNQUFNLEdBQUFOLEtBQUEsQ0FBTk0sTUFBTTtJQUNOaEIsUUFBUSxHQUFBVSxLQUFBLENBQVJWLFFBQVE7RUFFUixJQUFBaUIsS0FBQSxHQUFjNVEsSUFBSSxDQUFDLENBQUM7SUFBWjZRLENBQUMsR0FBQUQsS0FBQSxDQUFEQyxDQUFDO0VBQ1QsSUFBQUMsa0JBQUEsR0FBeUQvTyxnQkFBZ0IsQ0FBQyxDQUFDO0lBQW5FZ1AsaUJBQWlCLEdBQUFELGtCQUFBLENBQWpCQyxpQkFBaUI7SUFBRUMsa0JBQWtCLEdBQUFGLGtCQUFBLENBQWxCRSxrQkFBa0I7SUFBRTlOLEtBQUssR0FBQTROLGtCQUFBLENBQUw1TixLQUFLO0VBQ3BELElBQU0rTixLQUFLLEdBQUczTyxRQUFRLENBQUMsQ0FBQztFQUN4QixJQUFNa0gsUUFBUSxHQUFHekosT0FBTyxDQUFDLENBQUM7RUFDMUIsSUFBTW1SLFdBQVcsR0FBR25TLE1BQU0sQ0FBaUIsSUFBSSxDQUFDO0VBQ2hELElBQU1vUyxrQkFBa0IsR0FBR3BTLE1BQU0sQ0FBQyxLQUFLLENBQUM7RUFDeEMsSUFBTXFTLGdCQUFnQixHQUFHclMsTUFBTSxDQUFDLEtBQUssQ0FBQztFQUN0QyxJQUFNc1MsZ0JBQWdCLEdBQUd0UyxNQUFNLENBQUMsS0FBSyxDQUFDO0VBQ3RDLElBQU11UyxrQkFBa0IsR0FBR3ZTLE1BQU0sQ0FBQyxFQUFFLENBQUM7RUFDckMsSUFBTXdTLGdCQUFnQixHQUFHeFMsTUFBTSxDQUFDLENBQUMsQ0FBQztFQUNsQyxJQUFNeVMscUJBQXFCLEdBQUd6UyxNQUFNLENBQUMsS0FBSyxDQUFDO0VBQzNDLElBQU0wUyxZQUFZLEdBQUcxUyxNQUFNLENBQWdCLElBQUksQ0FBQztFQUNoRCxJQUFBMlMsVUFBQSxHQUFvRDFTLFFBQVEsQ0FBQyxLQUFLLENBQUM7SUFBQTJTLFVBQUEsR0FBQS9NLGNBQUEsQ0FBQThNLFVBQUE7SUFBNURFLGtCQUFrQixHQUFBRCxVQUFBO0lBQUVFLHFCQUFxQixHQUFBRixVQUFBO0VBQ2hELElBQUFHLFVBQUEsR0FBd0U5UyxRQUFRLENBQTBCLENBQUMsQ0FBQyxDQUFDO0lBQUErUyxVQUFBLEdBQUFuTixjQUFBLENBQUFrTixVQUFBO0lBQXRHRSw0QkFBNEIsR0FBQUQsVUFBQTtJQUFFRSwrQkFBK0IsR0FBQUYsVUFBQTtFQUVwRSxJQUFBRyxlQUFBLEdBZ0JJalMsY0FBYyxDQUFDO01BQ2pCa1MsTUFBTSxFQUFFNUIsYUFBYSxJQUFJNkIsU0FBUztNQUNsQzlCLGtCQUFrQixFQUFsQkEsa0JBQWtCO01BQ2xCRSxPQUFPLEVBQVBBLE9BQU87TUFDUDVHLFdBQVcsRUFBWEEsV0FBVztNQUNYK0csTUFBTSxFQUFOQTtJQUNGLENBQUMsQ0FBQztJQXJCQTBCLFFBQVEsR0FBQUgsZUFBQSxDQUFSRyxRQUFRO0lBQ1JDLGVBQWUsR0FBQUosZUFBQSxDQUFmSSxlQUFlO0lBQ2ZDLHFCQUFxQixHQUFBTCxlQUFBLENBQXJCSyxxQkFBcUI7SUFDckJDLGVBQWUsR0FBQU4sZUFBQSxDQUFmTSxlQUFlO0lBQ2ZDLFNBQVMsR0FBQVAsZUFBQSxDQUFUTyxTQUFTO0lBQ1RDLGNBQWMsR0FBQVIsZUFBQSxDQUFkUSxjQUFjO0lBQ2RDLGNBQWMsR0FBQVQsZUFBQSxDQUFkUyxjQUFjO0lBQ2RDLGNBQWMsR0FBQVYsZUFBQSxDQUFkVSxjQUFjO0lBQ2RDLFdBQVcsR0FBQVgsZUFBQSxDQUFYVyxXQUFXO0lBQ1hDLGFBQWEsR0FBQVosZUFBQSxDQUFiWSxhQUFhO0lBQ2JySyxjQUFjLEdBQUF5SixlQUFBLENBQWR6SixjQUFjO0lBQ2RpQixzQkFBc0IsR0FBQXdJLGVBQUEsQ0FBdEJ4SSxzQkFBc0I7SUFDdEJxSixjQUFjLEdBQUFiLGVBQUEsQ0FBZGEsY0FBYztJQUNkQyxZQUFZLEdBQUFkLGVBQUEsQ0FBWmMsWUFBWTtJQUNaQyxjQUFjLEdBQUFmLGVBQUEsQ0FBZGUsY0FBYztFQVNoQixJQUFNeE8sa0JBQWtCLEdBQUc3RixXQUFXLENBQ3BDLFVBQUNvRyxNQUFlLEVBQUs7SUFDbkI4TixhQUFhLENBQUM5TixNQUFNLENBQUM7RUFDdkIsQ0FBQyxFQUNELENBQUM4TixhQUFhLENBQ2hCLENBQUM7RUFFRCxJQUFNOUoscUJBQXFCLEdBQUdwSyxXQUFXLENBQ3ZDLFVBQUNtSCxTQUFpQixFQUFFZ0QsVUFBa0IsRUFBSztJQUN6QyxJQUFJLEVBQUNBLFVBQVUsYUFBVkEsVUFBVSxlQUFWQSxVQUFVLENBQUVtSyxJQUFJLENBQUMsQ0FBQyxHQUFFO0lBQ3pCLElBQUlsQiw0QkFBNEIsQ0FBQ2pNLFNBQVMsQ0FBQyxFQUFFO0lBQzdDLElBQU1vTix3QkFBd0IsR0FBR3JULGNBQWMsQ0FBQ29ELEtBQUssQ0FBQztJQUN0RCtOLEtBQUssQ0FBQzVPLE1BQU0sQ0FBQytRLHFCQUFxQixFQUFFO01BQ2xDQyxVQUFVLEVBQUVGLHdCQUF3QixHQUFHLGFBQWEsR0FBR2pRLEtBQUssYUFBTEEsS0FBSyx1QkFBTEEsS0FBSyxDQUFFRTtJQUNoRSxDQUFDLENBQUM7SUFDRjZPLCtCQUErQixDQUFDLFVBQUE3RixJQUFJO01BQUEsT0FBQW5JLGFBQUEsQ0FBQUEsYUFBQSxLQUFVbUksSUFBSSxPQUFBa0gsZUFBQSxLQUFHdk4sU0FBUyxFQUFHLElBQUk7SUFBQSxDQUFHLENBQUM7SUFFekUsSUFBTXdOLGFBQWEsR0FBR2xCLFFBQVEsQ0FBQ21CLElBQUksQ0FBQyxVQUFBQyxHQUFHO01BQUEsT0FBSUEsR0FBRyxDQUFDck8sRUFBRSxLQUFLVyxTQUFTO0lBQUEsRUFBQztJQUNoRSxJQUFNMk4saUJBQWlCLEdBQUcsQ0FBQyxFQUFDSCxhQUFhLGFBQWJBLGFBQWEsZUFBYkEsYUFBYSxDQUFFbEwsT0FBTyxLQUFJVSxVQUFVLEtBQUs4SCxDQUFDLENBQUMsWUFBWSxDQUFDO0lBQ3BGLElBQUk2QyxpQkFBaUIsRUFBRTtNQUNyQixJQUFNQyxnQkFBZSxHQUFHdEIsUUFBUSxDQUM3QnBFLE1BQU0sQ0FBQyxVQUFBd0YsR0FBRztRQUFBLE9BQUlBLEdBQUcsQ0FBQzlKLElBQUksS0FBS2pLLGVBQWUsQ0FBQ3lLLElBQUksSUFBSXNKLEdBQUcsQ0FBQ2xLLElBQUksQ0FBQ25FLEVBQUUsS0FBS29FLFFBQVEsQ0FBQ3BFLEVBQUUsQ0FBQ2dGLFFBQVEsQ0FBQyxDQUFDO01BQUEsRUFBQyxDQUMxRndKLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUNULElBQUlELGdCQUFlLGFBQWZBLGdCQUFlLGVBQWZBLGdCQUFlLENBQUUxTixPQUFPLEVBQUU7UUFDNUIsSUFBTTROLGdCQUFnQixHQUFHbkosS0FBSyxDQUFDQyxPQUFPLENBQUNnSixnQkFBZSxDQUFDL0osV0FBVyxDQUFDLEdBQy9EK0osZ0JBQWUsQ0FBQy9KLFdBQVcsR0FDM0JjLEtBQUssQ0FBQ0MsT0FBTyxDQUFDZ0osZ0JBQWUsQ0FBQ25MLE9BQU8sQ0FBQyxHQUNwQ21MLGdCQUFlLENBQUNuTCxPQUFPLEdBQ3ZCLEVBQUU7UUFDUnFLLFdBQVcsQ0FBQ2MsZ0JBQWUsQ0FBQzFOLE9BQU8sRUFBRTROLGdCQUFnQixDQUFDO1FBQ3REO01BQ0Y7SUFDRjtJQUVBaEIsV0FBVyxDQUFDOUosVUFBVSxDQUFDO0VBQ3pCLENBQUMsRUFDRCxDQUNFOEosV0FBVyxFQUNYYiw0QkFBNEIsRUFDNUJmLEtBQUssRUFDTC9OLEtBQUssYUFBTEEsS0FBSyx1QkFBTEEsS0FBSyxDQUFFNFEsTUFBTSxFQUNiNVEsS0FBSyxhQUFMQSxLQUFLLHVCQUFMQSxLQUFLLENBQUVvQyxJQUFJLEVBQ1hwQyxLQUFLLGFBQUxBLEtBQUssdUJBQUxBLEtBQUssQ0FBRUUsSUFBSSxFQUNYaVAsUUFBUSxFQUNSeEIsQ0FBQyxFQUNEckgsUUFBUSxDQUFDcEUsRUFBRSxDQUVmLENBQUM7O0VBRUQ7QUFDRjtBQUNBO0FBQ0E7QUFDQTtFQUNFLElBQU0yTyw0QkFBNEIsR0FBR25WLFdBQVcsQ0FBQyxZQUFNO0lBQ3JELElBQU1vVixFQUFFLEdBQUc5QyxXQUFXLENBQUMrQyxPQUFPO0lBQzlCLElBQUksQ0FBQ0QsRUFBRSxFQUFFO0lBQ1QsSUFBUUUsU0FBUyxHQUFpQ0YsRUFBRSxDQUE1Q0UsU0FBUztNQUFFQyxZQUFZLEdBQW1CSCxFQUFFLENBQWpDRyxZQUFZO01BQUVDLFlBQVksR0FBS0osRUFBRSxDQUFuQkksWUFBWTtJQUM3QyxJQUFNQyxrQkFBa0IsR0FBR0YsWUFBWSxHQUFHRCxTQUFTLEdBQUdFLFlBQVk7SUFDbEUsSUFBTUUsVUFBVSxHQUFHRCxrQkFBa0IsR0FBRyxFQUFFO0lBQzFDLElBQUk3QyxxQkFBcUIsQ0FBQ3lDLE9BQU8sS0FBS0ssVUFBVSxFQUFFO01BQ2hEOUMscUJBQXFCLENBQUN5QyxPQUFPLEdBQUdLLFVBQVU7TUFDMUN6QyxxQkFBcUIsQ0FBQ3lDLFVBQVUsQ0FBQztJQUNuQztFQUNGLENBQUMsRUFBRSxFQUFFLENBQUM7O0VBRU47QUFDRjtBQUNBO0FBQ0E7QUFDQTtFQUNFLElBQU1DLGlCQUFpQixHQUFHM1YsV0FBVyxDQUNuQyxZQUFvRTtJQUFBLElBQW5FNFYsSUFBeUQsR0FBQTlHLFNBQUEsQ0FBQTdFLE1BQUEsUUFBQTZFLFNBQUEsUUFBQTBFLFNBQUEsR0FBQTFFLFNBQUEsTUFBRyxDQUFDLENBQUM7SUFDN0QsSUFBQStHLHFCQUFBLEdBQXFERCxJQUFJLENBQWpERSxtQkFBbUI7TUFBbkJBLG1CQUFtQixHQUFBRCxxQkFBQSxjQUFHLEtBQUssR0FBQUEscUJBQUE7TUFBQUUsYUFBQSxHQUFrQkgsSUFBSSxDQUFwQkksT0FBTztNQUFQQSxPQUFPLEdBQUFELGFBQUEsY0FBRyxDQUFDLEdBQUFBLGFBQUE7SUFDaEQsSUFBTUUsR0FBRyxHQUFHLFNBQU5BLEdBQUdBLENBQUEsRUFBUztNQUNoQkMscUJBQXFCLENBQUMsWUFBTTtRQUMxQixJQUFNZCxFQUFFLEdBQUc5QyxXQUFXLENBQUMrQyxPQUFPO1FBQzlCLElBQUksQ0FBQ0QsRUFBRSxFQUFFO1FBQ1QsSUFBSVUsbUJBQW1CLElBQUlyRCxnQkFBZ0IsQ0FBQzRDLE9BQU8sRUFBRTtRQUNyREQsRUFBRSxDQUFDRSxTQUFTLEdBQUdGLEVBQUUsQ0FBQ0csWUFBWTtRQUM5QkosNEJBQTRCLENBQUMsQ0FBQztNQUNoQyxDQUFDLENBQUM7SUFDSixDQUFDO0lBQ0QsSUFBSWEsT0FBTyxHQUFHLENBQUMsRUFBRTFILFVBQVUsQ0FBQzJILEdBQUcsRUFBRUQsT0FBTyxDQUFDLE1BQ3BDQyxHQUFHLENBQUMsQ0FBQztFQUNaLENBQUMsRUFDRCxDQUFDZCw0QkFBNEIsQ0FDL0IsQ0FBQztFQUVELElBQU1nQix5QkFBeUIsR0FBR25XLFdBQVcsQ0FBQyxZQUFNO0lBQ2xELElBQUksQ0FBQ3NTLFdBQVcsQ0FBQytDLE9BQU8sRUFBRTtJQUMxQi9DLFdBQVcsQ0FBQytDLE9BQU8sQ0FBQ2UsUUFBUSxDQUFDO01BQzNCQyxHQUFHLEVBQUUvRCxXQUFXLENBQUMrQyxPQUFPLENBQUNFLFlBQVk7TUFDckNlLFFBQVEsRUFBRTtJQUNaLENBQUMsQ0FBQztJQUNGO0lBQ0FoSSxVQUFVLENBQUM2Ryw0QkFBNEIsRUFBRSxHQUFHLENBQUM7RUFDL0MsQ0FBQyxFQUFFLENBQUNBLDRCQUE0QixDQUFDLENBQUM7O0VBRWxDO0VBQ0E7RUFDQTtFQUNBLElBQU1vQixnQ0FBZ0MsR0FBR3ZXLFdBQVcsQ0FDbEQsWUFBd0Q7SUFDdER5UyxnQkFBZ0IsQ0FBQzRDLE9BQU8sR0FBRyxLQUFLO0lBQ2hDM0Msa0JBQWtCLENBQUMyQyxPQUFPLEdBQUcsRUFBRTtJQUMvQnZLLHNCQUFzQixDQUFBK0QsS0FBQSxTQUFBQyxTQUFRLENBQUM7SUFDL0I2RyxpQkFBaUIsQ0FBQyxDQUFDO0lBQ25CQSxpQkFBaUIsQ0FBQztNQUFFSyxPQUFPLEVBQUU7SUFBSSxDQUFDLENBQUM7RUFDckMsQ0FBQyxFQUNELENBQUNsTCxzQkFBc0IsRUFBRTZLLGlCQUFpQixDQUM1QyxDQUFDO0VBRUQsSUFBTWEsb0JBQW9CLEdBQUd4VyxXQUFXLENBQ3RDLFVBQUN5VyxDQUFnQyxFQUFLO0lBQ3BDLElBQU1DLFNBQVMsR0FBR0QsQ0FBQyxDQUFDRSxhQUFhO0lBRWpDLElBQUk5RCxZQUFZLENBQUN3QyxPQUFPLEtBQUssSUFBSSxFQUFFO01BQ2pDdUIsb0JBQW9CLENBQUMvRCxZQUFZLENBQUN3QyxPQUFPLENBQUM7SUFDNUM7SUFFQXhDLFlBQVksQ0FBQ3dDLE9BQU8sR0FBR2EscUJBQXFCLENBQUMsWUFBTTtNQUNqRHJELFlBQVksQ0FBQ3dDLE9BQU8sR0FBRyxJQUFJO01BQzNCLElBQVFDLFNBQVMsR0FBaUNvQixTQUFTLENBQW5EcEIsU0FBUztRQUFFQyxZQUFZLEdBQW1CbUIsU0FBUyxDQUF4Q25CLFlBQVk7UUFBRUMsWUFBWSxHQUFLa0IsU0FBUyxDQUExQmxCLFlBQVk7TUFFN0MsSUFBTXFCLGFBQWEsR0FBR3ZCLFNBQVMsR0FBRzNDLGdCQUFnQixDQUFDMEMsT0FBTztNQUUxRCxJQUFJd0IsYUFBYSxFQUFFO1FBQ2pCbkUsa0JBQWtCLENBQUMyQyxPQUFPLEdBQUcsRUFBRTtNQUNqQztNQUVBLElBQU15QixZQUFZLEdBQUd2QixZQUFZLEdBQUdELFNBQVMsR0FBR0UsWUFBWSxHQUFHOUMsa0JBQWtCLENBQUMyQyxPQUFPO01BRXpGLElBQUl5QixZQUFZLEVBQUU7UUFDaEJwRSxrQkFBa0IsQ0FBQzJDLE9BQU8sR0FBRyxFQUFFO01BQ2pDO01BRUE1QyxnQkFBZ0IsQ0FBQzRDLE9BQU8sR0FBRyxDQUFDeUIsWUFBWTtNQUN4Q25FLGdCQUFnQixDQUFDMEMsT0FBTyxHQUFHQyxTQUFTO01BRXBDSCw0QkFBNEIsQ0FBQyxDQUFDO01BRTlCLElBQUkyQixZQUFZLElBQUloRixnQkFBZ0IsRUFBRTtRQUNwQ0EsZ0JBQWdCLENBQUMsQ0FBQztNQUNwQjtNQUVBc0MsWUFBWSxDQUFDc0MsU0FBUyxDQUFDO0lBQ3pCLENBQUMsQ0FBQztFQUNKLENBQUMsRUFDRCxDQUFDNUUsZ0JBQWdCLEVBQUVzQyxZQUFZLEVBQUVlLDRCQUE0QixDQUMvRCxDQUFDOztFQUVEO0VBQ0EsSUFBTTRCLGNBQWMsR0FBRzVXLE1BQU0sQ0FBQzhULFdBQVcsQ0FBQztFQUMxQyxJQUFNK0MsaUJBQWlCLEdBQUc3VyxNQUFNLENBQUNrVSxjQUFjLENBQUM7RUFDaEQsSUFBTTRDLHFCQUFxQixHQUFHOVcsTUFBTSxDQUFDMFIsa0JBQWtCLENBQUM7RUFDeEQsSUFBTXFGLG1CQUFtQixHQUFHL1csTUFBTSxDQUNoQyxVQUNFa0gsT0FBZSxFQUNmMkQsV0FBOEIsRUFDOUJtTSxLQUFjLEVBQ2RDLGlCQUEwQixFQUMxQkMsUUFBMkIsRUFDM0JDLEtBQWMsRUFDZEMsSUFBYTtJQUFBLE9BQ1ZSLGNBQWMsQ0FBQzFCLE9BQU8sQ0FBQ2hPLE9BQU8sRUFBRTJELFdBQVcsRUFBRW1NLEtBQUssRUFBRUMsaUJBQWlCLEVBQUVDLFFBQVEsRUFBRUMsS0FBSyxFQUFFQyxJQUFJLENBQUM7RUFBQSxDQUNwRyxDQUFDO0VBQ0QsSUFBTUMsc0JBQXNCLEdBQUdyWCxNQUFNLENBQUM7SUFBQSxPQUFNNlcsaUJBQWlCLENBQUMzQixPQUFPLENBQUMsQ0FBQztFQUFBLEVBQUM7O0VBRXhFO0VBQ0EwQixjQUFjLENBQUMxQixPQUFPLEdBQUdwQixXQUFXO0VBQ3BDK0MsaUJBQWlCLENBQUMzQixPQUFPLEdBQUdoQixjQUFjO0VBQzFDNEMscUJBQXFCLENBQUM1QixPQUFPLEdBQUd4RCxrQkFBa0I7RUFFbEQ1UixTQUFTLENBQUMsWUFBTTtJQUNkLElBQUlnWCxxQkFBcUIsQ0FBQzVCLE9BQU8sRUFBRTtNQUNqQzRCLHFCQUFxQixDQUFDNUIsT0FBTyxDQUMzQjZCLG1CQUFtQixDQUFDN0IsT0FBTyxFQUMzQm1DLHNCQUFzQixDQUFDbkMsT0FBTyxFQUM5QnpCLGVBQWUsRUFDZkMsU0FDRixDQUFDO0lBQ0g7RUFDRixDQUFDLEVBQUUsQ0FBQ0QsZUFBZSxFQUFFQyxTQUFTLENBQUMsQ0FBQztFQUVoQzVULFNBQVMsQ0FBQyxZQUFNO0lBQ2R1UyxnQkFBZ0IsQ0FBQzZDLE9BQU8sR0FBRzFCLHFCQUFxQjtFQUNsRCxDQUFDLEVBQUUsQ0FBQ0EscUJBQXFCLENBQUMsQ0FBQzs7RUFFM0I7RUFDQTFULFNBQVMsQ0FBQyxZQUFNO0lBQ2QsSUFBSTJULGVBQWUsRUFBRTtNQUNuQm5CLGdCQUFnQixDQUFDNEMsT0FBTyxHQUFHLEtBQUs7TUFDaEMzQyxrQkFBa0IsQ0FBQzJDLE9BQU8sR0FBRyxFQUFFO0lBQ2pDO0VBQ0YsQ0FBQyxFQUFFLENBQUN6QixlQUFlLENBQUMsQ0FBQztFQUVyQjNULFNBQVMsQ0FBQyxZQUFNO0lBQ2QsSUFBSSxDQUFDc1Msa0JBQWtCLENBQUM4QyxPQUFPLEVBQUU7TUFDL0I5QyxrQkFBa0IsQ0FBQzhDLE9BQU8sR0FBRyxJQUFJO01BQ2pDbEIsY0FBYyxDQUFDLENBQUM7SUFDbEI7RUFDRixDQUFDLEVBQUUsRUFBRSxDQUFDOztFQUVOO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBbFUsU0FBUyxDQUFDLFlBQU07SUFDZCxJQUFJLENBQUMyVCxlQUFlLElBQUksQ0FBQ0MsU0FBUyxFQUFFLE9BQU9MLFNBQVM7SUFDcEQsSUFBSSxDQUFDbEIsV0FBVyxDQUFDK0MsT0FBTyxFQUFFLE9BQU83QixTQUFTO0lBRTFDLElBQUlpRSxLQUFvQixHQUFHLElBQUk7SUFDL0IsSUFBSUMsVUFBVSxHQUFHcEYsV0FBVyxDQUFDK0MsT0FBTyxDQUFDRSxZQUFZO0lBRWpELElBQU1vQyxLQUFJLEdBQUcsU0FBUEEsSUFBSUEsQ0FBQSxFQUFTO01BQ2pCLElBQU12QyxFQUFFLEdBQUc5QyxXQUFXLENBQUMrQyxPQUFPO01BQzlCLElBQUksQ0FBQ0QsRUFBRSxFQUFFO1FBQ1BxQyxLQUFLLEdBQUcsSUFBSTtRQUNaO01BQ0Y7TUFDQSxJQUFNRyxhQUFhLEdBQUd4QyxFQUFFLENBQUNHLFlBQVk7TUFDckMsSUFBSXFDLGFBQWEsS0FBS0YsVUFBVSxFQUFFO1FBQ2hDQSxVQUFVLEdBQUdFLGFBQWE7UUFDMUIsSUFBSSxDQUFDbkYsZ0JBQWdCLENBQUM0QyxPQUFPLEVBQUU7VUFDN0JELEVBQUUsQ0FBQ0UsU0FBUyxHQUFHc0MsYUFBYTtRQUM5QjtRQUNBekMsNEJBQTRCLENBQUMsQ0FBQztNQUNoQztNQUNBc0MsS0FBSyxHQUFHdkIscUJBQXFCLENBQUN5QixLQUFJLENBQUM7SUFDckMsQ0FBQztJQUVERixLQUFLLEdBQUd2QixxQkFBcUIsQ0FBQ3lCLEtBQUksQ0FBQztJQUNuQyxPQUFPLFlBQU07TUFDWCxJQUFJRixLQUFLLElBQUksSUFBSSxFQUFFYixvQkFBb0IsQ0FBQ2EsS0FBSyxDQUFDO0lBQ2hELENBQUM7RUFDSCxDQUFDLEVBQUUsQ0FBQzdELGVBQWUsRUFBRUMsU0FBUyxFQUFFc0IsNEJBQTRCLENBQUMsQ0FBQzs7RUFFOUQ7RUFDQWxWLFNBQVMsQ0FBQyxZQUFNO0lBQ2QsSUFBSTJULGVBQWUsSUFBSXRCLFdBQVcsQ0FBQytDLE9BQU8sRUFBRTtNQUMxQ00saUJBQWlCLENBQUM7UUFBRUcsbUJBQW1CLEVBQUU7TUFBSyxDQUFDLENBQUM7SUFDbEQ7RUFDRixDQUFDLEVBQUUsQ0FBQ2xDLGVBQWUsRUFBRStCLGlCQUFpQixDQUFDLENBQUM7O0VBRXhDO0VBQ0E7RUFDQTtFQUNBLElBQU1rQyxnQkFBZ0IsR0FBRzFYLE1BQU0sQ0FBZ0IsSUFBSSxDQUFDO0VBQ3BELElBQU0yWCxxQkFBcUIsR0FBRzNYLE1BQU0sQ0FBUyxDQUFDLENBQUM7RUFDL0NGLFNBQVMsQ0FBQyxZQUFNO0lBQUEsSUFBQThYLGVBQUE7SUFDZCxJQUFJLENBQUN6RixXQUFXLENBQUMrQyxPQUFPLElBQUkzQixlQUFlLElBQUlDLHFCQUFxQixJQUFJbkIsZ0JBQWdCLENBQUM2QyxPQUFPLEVBQUU7TUFDaEc7SUFDRjtJQUVBLElBQU0yQyxXQUFXLEdBQUd2RSxRQUFRLENBQUNBLFFBQVEsQ0FBQ3hKLE1BQU0sR0FBRyxDQUFDLENBQUM7SUFDakQsSUFBTWdPLE1BQU0sSUFBQUYsZUFBQSxHQUFHQyxXQUFXLGFBQVhBLFdBQVcsdUJBQVhBLFdBQVcsQ0FBRXhSLEVBQUUsY0FBQXVSLGVBQUEsY0FBQUEsZUFBQSxHQUFJLElBQUk7SUFDdEMsSUFBTUcsTUFBTSxHQUFHTCxnQkFBZ0IsQ0FBQ3hDLE9BQU87SUFDdkMsSUFBTThDLE9BQU8sR0FBR0wscUJBQXFCLENBQUN6QyxPQUFPO0lBQzdDd0MsZ0JBQWdCLENBQUN4QyxPQUFPLEdBQUc0QyxNQUFNO0lBQ2pDSCxxQkFBcUIsQ0FBQ3pDLE9BQU8sR0FBRzVCLFFBQVEsQ0FBQ3hKLE1BQU07SUFFL0MsSUFBTW1PLFlBQVksR0FBR0gsTUFBTSxLQUFLQyxNQUFNLElBQUl6RSxRQUFRLENBQUN4SixNQUFNLEtBQUtrTyxPQUFPO0lBQ3JFLElBQUksQ0FBQ0MsWUFBWSxFQUFFO01BQ2pCakQsNEJBQTRCLENBQUMsQ0FBQztNQUM5QjtJQUNGO0lBRUEsSUFBTXVCLFNBQVMsR0FBR3BFLFdBQVcsQ0FBQytDLE9BQU87SUFDckMsSUFBTWdELFVBQVUsR0FBRzNCLFNBQVMsQ0FBQ25CLFlBQVksR0FBR21CLFNBQVMsQ0FBQ3BCLFNBQVMsSUFBSW9CLFNBQVMsQ0FBQ2xCLFlBQVksR0FBRyxHQUFHO0lBQy9GLElBQU04QyxpQkFBaUIsR0FBRzdFLFFBQVEsQ0FBQ3pELElBQUksQ0FBQyxVQUFBNkUsR0FBRztNQUFBLE9BQUlBLEdBQUcsQ0FBQ3JPLEVBQUUsS0FBSyxzQkFBc0I7SUFBQSxFQUFDO0lBQ2pGLElBQU0rUixVQUFVLEdBQUcsQ0FBQyxDQUFDUCxXQUFXLEtBQUtBLFdBQVcsQ0FBQ3hSLEVBQUUsQ0FBQ3VKLFVBQVUsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUNpSSxXQUFXLENBQUN0TyxRQUFRLENBQUM7SUFDdEcsSUFBTThPLGtCQUFrQixHQUN0QixDQUFDLENBQUNSLFdBQVcsS0FBS0EsV0FBVyxDQUFDeFIsRUFBRSxDQUFDdUosVUFBVSxDQUFDLFNBQVMsQ0FBQyxJQUFJaUksV0FBVyxDQUFDeFIsRUFBRSxDQUFDdUosVUFBVSxDQUFDLFdBQVcsQ0FBQyxDQUFDOztJQUVuRztJQUNBO0lBQ0E7SUFDQSxJQUFJd0ksVUFBVSxLQUFLRixVQUFVLElBQUksQ0FBQzVGLGdCQUFnQixDQUFDNEMsT0FBTyxDQUFDLEVBQUU7TUFDM0RNLGlCQUFpQixDQUFDLENBQUM7TUFDbkJBLGlCQUFpQixDQUFDLENBQUM7TUFDbkJBLGlCQUFpQixDQUFDO1FBQUVLLE9BQU8sRUFBRTtNQUFJLENBQUMsQ0FBQztNQUNuQztJQUNGOztJQUVBO0lBQ0EsSUFBSXdDLGtCQUFrQixJQUFJSCxVQUFVLEVBQUU7TUFDcEMxQyxpQkFBaUIsQ0FBQyxDQUFDO01BQ25CO0lBQ0Y7O0lBRUE7SUFDQTtJQUNBLElBQUksQ0FBQzZDLGtCQUFrQixJQUFJLENBQUNELFVBQVUsSUFBSSxDQUFDRCxpQkFBaUIsSUFBSTdFLFFBQVEsQ0FBQ3hKLE1BQU0sR0FBR2tPLE9BQU8sRUFBRTtNQUN6RnhDLGlCQUFpQixDQUFDLENBQUM7TUFDbkI7SUFDRjtJQUVBUiw0QkFBNEIsQ0FBQyxDQUFDO0VBQ2hDLENBQUMsRUFBRSxDQUFDMUIsUUFBUSxFQUFFQyxlQUFlLEVBQUVDLHFCQUFxQixFQUFFZ0MsaUJBQWlCLEVBQUVSLDRCQUE0QixDQUFDLENBQUM7O0VBRXZHO0VBQ0FsVixTQUFTLENBQUMsWUFBTTtJQUNkLElBQUksQ0FBQ3lULGVBQWUsRUFBRTtNQUNwQnlCLDRCQUE0QixDQUFDLENBQUM7SUFDaEM7RUFDRixDQUFDLEVBQUUsQ0FBQ3pCLGVBQWUsRUFBRUQsUUFBUSxDQUFDeEosTUFBTSxFQUFFa0wsNEJBQTRCLENBQUMsQ0FBQzs7RUFFcEU7RUFDQSxJQUFNSixlQUFlLEdBQUd0QixRQUFRLENBQzdCcEUsTUFBTSxDQUFDLFVBQUF3RixHQUFHO0lBQUEsT0FBSUEsR0FBRyxDQUFDOUosSUFBSSxLQUFLakssZUFBZSxDQUFDeUssSUFBSSxJQUFJc0osR0FBRyxDQUFDbEssSUFBSSxDQUFDbkUsRUFBRSxLQUFLb0UsUUFBUSxDQUFDcEUsRUFBRSxDQUFDZ0YsUUFBUSxDQUFDLENBQUM7RUFBQSxFQUFDLENBQzFGd0osRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBRVQsSUFBTXlELGdCQUFnQixHQUNwQixDQUFDM00sS0FBSyxDQUFDQyxPQUFPLENBQUNnSixlQUFlLGFBQWZBLGVBQWUsdUJBQWZBLGVBQWUsQ0FBRS9KLFdBQVcsQ0FBQyxHQUFHK0osZUFBZSxDQUFDL0osV0FBVyxDQUFDZixNQUFNLEdBQUcsQ0FBQyxNQUNwRjZCLEtBQUssQ0FBQ0MsT0FBTyxDQUFDZ0osZUFBZSxhQUFmQSxlQUFlLHVCQUFmQSxlQUFlLENBQUVuTCxPQUFPLENBQUMsR0FBR21MLGVBQWUsQ0FBQ25MLE9BQU8sQ0FBQ0ssTUFBTSxHQUFHLENBQUMsQ0FBQztFQUVoRixJQUFNeU8sb0JBQW9CLEdBQUcvVywyQkFBMkIsQ0FBQztJQUN2RG9TLGNBQWMsRUFBZEEsY0FBYztJQUNkRCxjQUFjLEVBQWRBLGNBQWM7SUFDZEUsY0FBYyxFQUFFQSxjQUFjLElBQUksQ0FBQyxDQUFDO0lBQ3BDSixlQUFlLEVBQWZBLGVBQWU7SUFDZnpCLGlCQUFpQixFQUFqQkEsaUJBQWlCO0lBQ2pCQyxrQkFBa0IsRUFBbEJBLGtCQUFrQjtJQUNsQnVHLGNBQWMsRUFBRUMsT0FBTyxDQUFDSCxnQkFBZ0IsQ0FBQztJQUN6Q0EsZ0JBQWdCLEVBQWhCQSxnQkFBZ0I7SUFDaEJ4RyxDQUFDLEVBQURBO0VBQ0YsQ0FBQyxDQUFDO0VBRUYsSUFBTTRHLGdCQUFnQixHQUFHLENBQUMsQ0FBQzlILFFBQVE7RUFDbkMsSUFBTXdELHdCQUF3QixHQUFHclQsY0FBYyxDQUFDb0QsS0FBSyxDQUFDOztFQUV0RDtFQUNBO0VBQ0EsSUFBTXdVLFdBQVcsR0FBRzNZLE1BQU0sQ0FBQzRRLFFBQVEsQ0FBQztFQUNwQzdRLGVBQWUsQ0FBQyxZQUFNO0lBQ3BCLElBQUk0WSxXQUFXLENBQUN6RCxPQUFPLEtBQUt0RSxRQUFRLElBQUl1QixXQUFXLENBQUMrQyxPQUFPLEVBQUU7TUFDM0QsSUFBTTBELGNBQWMsR0FBR3BHLGdCQUFnQixDQUFDMEMsT0FBTztNQUMvQy9DLFdBQVcsQ0FBQytDLE9BQU8sQ0FBQ0MsU0FBUyxHQUFHeUQsY0FBYztNQUM5Q0QsV0FBVyxDQUFDekQsT0FBTyxHQUFHdEUsUUFBUTtJQUNoQyxDQUFDLE1BQU07TUFDTCtILFdBQVcsQ0FBQ3pELE9BQU8sR0FBR3RFLFFBQVE7SUFDaEM7RUFDRixDQUFDLEVBQUUsQ0FBQ0EsUUFBUSxDQUFDLENBQUM7RUFFZCxJQUFJMkMsZUFBZSxFQUFFO0lBQ25CLG9CQUNFN1AsSUFBQSxDQUFDaEMsSUFBSTtNQUFDbVgsSUFBSTtNQUFBelUsUUFBQSxlQUNSVixJQUFBLENBQUNqQyxNQUFNLElBQUU7SUFBQyxDQUNOLENBQUM7RUFFWDtFQUVBLElBQU1xWCxlQUFlLGdCQUNuQmxWLEtBQUEsQ0FBQUUsU0FBQTtJQUFBTSxRQUFBLEdBQ0dvUCxxQkFBcUIsaUJBQUk5UCxJQUFBLENBQUNyQyxXQUFXO01BQUMwWCxJQUFJLEVBQUVqSCxDQUFDLENBQUMsa0JBQWtCO0lBQUUsQ0FBRSxDQUFDLGVBQ3RFcE8sSUFBQSxDQUFBSSxTQUFBO01BQUFNLFFBQUEsRUFDR2tQLFFBQVEsQ0FBQ3BOLEdBQUcsQ0FBQyxVQUFDZ0IsT0FBTyxFQUFFbUksS0FBSyxFQUFLO1FBQUEsSUFBQTJKLG9CQUFBLEVBQUFDLGdCQUFBLEVBQUFDLGdCQUFBLEVBQUFDLFdBQUE7UUFDaEMsSUFBTUMsa0JBQWtCLEdBQUdsUyxPQUFPLENBQUMwRCxJQUFJLEtBQUtqSyxlQUFlLENBQUMySyxTQUFTLElBQUlwRSxPQUFPLENBQUNzRCxJQUFJLENBQUNuRSxFQUFFLEtBQUssV0FBVztRQUN4RyxJQUFNZ0UsYUFBYSxHQUFHZ0YsS0FBSyxLQUFLaUUsUUFBUSxDQUFDeEosTUFBTSxHQUFHLENBQUM7UUFDbkQsSUFBTXlCLHNCQUFzQixHQUMxQjZOLGtCQUFrQixJQUFJL08sYUFBYSxJQUFJOUksK0JBQStCLENBQUMyRixPQUFPLENBQUNiLEVBQUUsQ0FBQztRQUNwRixJQUFNVSxXQUFXLEdBQUd3RSxzQkFBc0IsS0FBS2tJLGVBQWUsSUFBSUMsU0FBUyxDQUFDOztRQUU1RTtRQUNBO1FBQ0EsSUFDRSxDQUFDbkksc0JBQXNCLElBQ3ZCLENBQUN4RSxXQUFXLElBQ1osRUFBRSxDQUFBaVMsb0JBQUEsR0FBQTlSLE9BQU8sQ0FBQzJELFdBQVcsY0FBQW1PLG9CQUFBLGVBQW5CQSxvQkFBQSxDQUFxQmxQLE1BQU0sS0FBQW1QLGdCQUFBLEdBQUkvUixPQUFPLENBQUN1QyxPQUFPLGNBQUF3UCxnQkFBQSxlQUFmQSxnQkFBQSxDQUFpQm5QLE1BQU0sQ0FBQyxJQUN6RCxDQUFDNUMsT0FBTyxDQUFDQSxPQUFPLElBQ2hCLEdBQUFnUyxnQkFBQSxHQUFDaFMsT0FBTyxDQUFDbVMsT0FBTyxjQUFBSCxnQkFBQSxlQUFmQSxnQkFBQSxDQUFpQjNTLElBQUksS0FDdEIsQ0FBQ1csT0FBTyxDQUFDcUMsUUFBUSxFQUVqQixPQUFPLElBQUk7UUFFYixJQUFNK1AsZUFBZSxHQUNuQixDQUFBcFMsT0FBTyxhQUFQQSxPQUFPLHVCQUFQQSxPQUFPLENBQUVxUyxVQUFVLE1BQUtsRyxTQUFTLElBQUluTSxPQUFPLENBQUNxUyxVQUFVLEtBQUssSUFBSSxHQUM1RCxJQUFJLEdBQ0pyUyxPQUFPLENBQUNxUyxVQUFVLEdBQ2hCeFcsUUFBUSxDQUFDeVcsU0FBUyxHQUNsQnpXLFFBQVEsQ0FBQzBXLFdBQVc7O1FBRTVCO1FBQ0EsSUFBTUMsVUFBVSxJQUFBUCxXQUFBLEdBQUdqUyxPQUFPLENBQUNiLEVBQUUsY0FBQThTLFdBQUEsY0FBQUEsV0FBQSxVQUFBM0wsTUFBQSxDQUFXNkIsS0FBSyxDQUFFO1FBRS9DLG9CQUNFbFAsY0FBQSxDQUFDbUssV0FBVyxFQUFBcEYsYUFBQSxDQUFBQSxhQUFBLEtBQ05nQyxPQUFPO1VBQ1h5UyxHQUFHLEVBQUVELFVBQVc7VUFDaEJqUCxRQUFRLEVBQUVBLFFBQVM7VUFDbkIvRSxrQkFBa0IsRUFBRUEsa0JBQW1CO1VBQ3ZDZ0UsY0FBYyxFQUFFQSxjQUFlO1VBQy9CaUIsc0JBQXNCLEVBQUV5TCxnQ0FBaUM7VUFDekRuTSxxQkFBcUIsRUFBRUEscUJBQXNCO1VBQzdDYyxxQkFBcUIsRUFBRSxDQUFDLENBQUNrSSw0QkFBNEIsQ0FBQy9MLE9BQU8sQ0FBQ2IsRUFBRSxDQUFFO1VBQ2xFdUQsZUFBZSxFQUFFMFAsZUFBZ0I7VUFDakN2UyxXQUFXLEVBQUVBLFdBQVk7VUFDekJzRCxhQUFhLEVBQUVBLGFBQWM7VUFDN0J1RyxRQUFRLEVBQUVBO1FBQVMsRUFDcEIsQ0FBQztNQUVOLENBQUM7SUFBQyxDQUNGLENBQUMsRUFDRjJILG9CQUFvQixpQkFDbkI3VSxJQUFBLENBQUNyQix1QkFBdUI7TUFBQStCLFFBQUEsZUFDdEJWLElBQUEsQ0FBQ3BDLHNCQUFzQjtRQUFDc1ksUUFBUSxFQUFFckI7TUFBcUIsQ0FBRTtJQUFDLENBQ25DLENBQzFCO0VBQUEsQ0FDRCxDQUNIO0VBRUQsb0JBQ0UzVSxLQUFBLENBQUMxQixlQUFlO0lBQUMyWCxlQUFlLEVBQUVuQixnQkFBaUI7SUFBQXRVLFFBQUEsR0FDaERzVSxnQkFBZ0IsZ0JBQ2ZoVixJQUFBLENBQUN2QixnQkFBZ0I7TUFBQzJYLEdBQUcsRUFBRTNILFdBQVk7TUFBQzRILFFBQVEsRUFBRTFELG9CQUFxQjtNQUFBalMsUUFBQSxlQUNqRVYsSUFBQSxDQUFDdEIsZUFBZTtRQUFDeVgsZUFBZSxFQUFFbkIsZ0JBQWlCO1FBQUNzQixvQkFBb0IsRUFBRTVGLHdCQUF5QjtRQUFBaFEsUUFBQSxFQUNoRzBVO01BQWUsQ0FDRDtJQUFDLENBQ0YsQ0FBQyxnQkFFbkJwVixJQUFBLENBQUN0QixlQUFlO01BQ2QwWCxHQUFHLEVBQUUzSCxXQUFZO01BQ2pCNEgsUUFBUSxFQUFFMUQsb0JBQXFCO01BQy9Cd0QsZUFBZSxFQUFFLEtBQU07TUFDdkJHLG9CQUFvQixFQUFFNUYsd0JBQXlCO01BQUFoUSxRQUFBLEVBRTlDMFU7SUFBZSxDQUNELENBQ2xCLEVBRUFqRyxrQkFBa0IsaUJBQ2pCblAsSUFBQSxDQUFDekIsb0JBQW9CO01BQUNvQyxJQUFJLEVBQUMsUUFBUTtNQUFDaUMsT0FBTyxFQUFFMFAseUJBQTBCO01BQUE1UixRQUFBLGVBQ3JFVixJQUFBLENBQUNwRCxjQUFjO1FBQUMyWixLQUFLLEVBQUMsTUFBTTtRQUFDMVYsS0FBSyxFQUFDLE1BQU07UUFBQ0MsTUFBTSxFQUFDO01BQU0sQ0FBRTtJQUFDLENBQ3RDLENBQ3ZCO0VBQUEsQ0FDYyxDQUFDO0FBRXRCLENBQUM7QUFFRCxPQUFPLElBQU0wVixjQUFjLGdCQUFHdmEsS0FBSyxDQUFDQyxJQUFJLENBQUN5UixtQkFBbUIsQ0FBQyIsImlnbm9yZUxpc3QiOltdfQ==
|