@projectcor/maia-components 2.11.67-1 → 2.11.67-2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/components/atoms/Chip/Chip.js +50 -15
- package/lib/components/atoms/Chip/styles.js +9 -5
- package/lib/components/atoms/ContextMentionPopover/ContextMentionPopover.js +38 -6
- package/lib/components/atoms/ContextMentionPopover/ContextMentionPopover.styles.js +21 -13
- package/lib/components/atoms/MAIAInput/MAIAInput.js +71 -215
- package/lib/components/atoms/MAIAInput/styles.js +24 -64
- package/lib/components/atoms/MAIAMessage/MAIAMessage.js +2 -4
- package/lib/components/molecules/ChatAIHome/ChatAIHome.js +297 -46
- package/lib/components/molecules/ChatAIHome/styles.js +63 -26
- package/lib/components/molecules/ChatAIMessages/ChatAIMessages.js +84 -159
- package/lib/components/molecules/ChatAIMessages/newStyles.js +19 -9
- package/lib/components/molecules/ChatAIModal/ChatAIModal.js +220 -42
- package/lib/components/molecules/ChatAIModal/components/ChatAiModalFooter/ChatAiModalFooter.js +26 -1
- package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.js +17 -17
- package/lib/components/molecules/ChatFooter/ChatFooter.js +75 -18
- package/lib/components/molecules/ChatFooter/ChatFooterFaqs.js +22 -7
- package/lib/components/molecules/ChatFooter/styles.js +11 -2
- package/lib/components/molecules/Sidebar/Sidebar.js +11 -7
- package/lib/components/organisms/EditQuestionModal/EditQuestionModal.js +2 -2
- package/lib/constants/maiaTaskPanelAccess.js +7 -5
- package/lib/constants/taskUrls.js +3 -1
- package/lib/context/global-context.js +8 -1
- package/lib/dev/DevContextMentionInput.js +1 -3
- package/lib/hooks/index.js +2 -1
- package/lib/hooks/useChatManager/useChatManager.js +155 -144
- package/lib/hooks/useChatMessages/useChatMessages.js +33 -2
- package/lib/hooks/useContextPinPopover.js +235 -0
- package/lib/hooks/useEntitySearch.js +74 -129
- package/lib/hooks/useEvent.js +2 -1
- package/lib/hooks/useFrequentlyAskedQuestions.js +12 -10
- package/lib/hooks/useFrequentlyUsedActions.js +5 -3
- package/lib/hooks/useMentionAllowedTypes.js +11 -1
- package/lib/hooks/useMentionPopover.js +3 -2
- package/lib/hooks/useOrchestratorStream/useOrchestratorStream.interface.js +1 -1
- package/lib/hooks/useOrchestratorStream/useOrchestratorStream.js +28 -22
- package/lib/hooks/useProjectSearch.js +4 -28
- package/lib/hooks/useProjectSummaryConfig.js +88 -33
- package/lib/hooks/useRecentClientsSearch.js +4 -34
- package/lib/hooks/useRecentContexts.js +86 -0
- package/lib/hooks/useSmoothStreamText/useSmoothStreamText.js +24 -16
- package/lib/lang/br/index.js +28 -10
- package/lib/lang/en/index.js +28 -10
- package/lib/lang/es/index.js +28 -10
- package/lib/lang/fr/index.js +28 -10
- package/lib/services/maia/Actions/getFrequentlyUsedActions.js +6 -3
- package/lib/services/maia/Agents/getAgents.js +225 -175
- package/lib/services/maia/Chats/getChatMessages.js +13 -3
- package/lib/services/maia/Chats/getChatsByUserId.js +10 -2
- package/lib/services/maia/Faqs/getFrequentlyAskedQuestions.js +6 -4
- package/lib/services/maia/Orchestrator/orchestrator.js +25 -11
- package/lib/services/maia/RecentContexts/getRecentContexts.js +54 -0
- package/lib/services/maia/RecentContexts/index.js +6 -0
- package/lib/services/maia/index.js +4 -2
- package/lib/services/utils/validateIsMaia.js +2 -2
- package/lib/types/Chat.js +1 -1
- package/lib/types/agent.js +1 -1
- package/lib/utils/agentDisplayName.js +9 -1
- package/lib/utils/entityLinkRender.js +132 -0
- package/lib/utils/hitlAnalytics.js +3 -3
- package/lib/utils/renderContextMentions.js +3 -1
- package/package.json +1 -1
- package/lib/components/atoms/MAIAViz/MAIAViz.js +0 -97
- package/lib/components/atoms/MAIAViz/MAIAViz.parse.js +0 -131
- package/lib/components/atoms/MAIAViz/MAIAViz.skeleton.js +0 -40
- package/lib/components/atoms/MAIAViz/MAIAViz.styles.js +0 -8
- package/lib/components/atoms/MAIAViz/MAIAViz.types.js +0 -49
- package/lib/components/atoms/MAIAViz/MAIAVizBar.js +0 -123
- package/lib/components/atoms/MAIAViz/MAIAVizDonut.js +0 -111
- package/lib/components/atoms/MAIAViz/MAIAVizKpis.js +0 -34
- package/lib/components/atoms/MAIAViz/README.md +0 -85
- package/lib/components/atoms/MAIAViz/index.js +0 -2
- package/lib/types/Hitl.js +0 -2
- package/lib/utils/maiaStreamdownRenderers.js +0 -16
|
@@ -36,12 +36,24 @@ import { getMaiaFloatingPanelWidthPx } from './layout';
|
|
|
36
36
|
import { FloatingPanelMotion, useFloatingPanelDragTilt } from './floatingPanelMotion';
|
|
37
37
|
import { ChatAiModalFooter } from './components/ChatAiModalFooter';
|
|
38
38
|
import { validateIsMaia } from '../../../services/utils/validateIsMaia';
|
|
39
|
-
import {
|
|
39
|
+
import { isMarketplaceGlobalCloneAgent } from '../../../utils/agentDisplayName';
|
|
40
40
|
import { useFaqsStore } from '../../../store/useFaqsStore';
|
|
41
41
|
import { fetchMaia } from '../../../services/maia/client';
|
|
42
42
|
import { mapCORLang } from '../../../lang/utils';
|
|
43
43
|
import { EVENTS, useEvent } from '../../../hooks/useEvent';
|
|
44
|
+
|
|
45
|
+
/** Metadata de la session abierta (emitida por useChatMessages al cargar una conversación). */
|
|
44
46
|
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
47
|
+
var LEGACY_CONTEXT_ENTITIES = ['project', 'task', 'client'];
|
|
48
|
+
var resolveAiChatBackDestination = function resolveAiChatBackDestination(section, agentType, currentOption, homeOption) {
|
|
49
|
+
if (section === 'header' && agentType === 'orchestrator' && currentOption === homeOption) {
|
|
50
|
+
return 'global_context_home';
|
|
51
|
+
}
|
|
52
|
+
if (section === 'task') return 'task_home';
|
|
53
|
+
if (section === 'project') return 'project_home';
|
|
54
|
+
if (section === 'client') return 'client_home';
|
|
55
|
+
return 'global_context_home';
|
|
56
|
+
};
|
|
45
57
|
export var ID_MODAL_CHAT_AGENT = 'modals-portal-maia-chat-agent';
|
|
46
58
|
var validateAccessByFeature = function validateAccessByFeature(section) {
|
|
47
59
|
if (section === 'header' && (window.MAIA_CHAT_AI_FEATURE_ACCESS_MULTI_AGENTS || window.MAIA_CHAT_AI_FEATURE_ACCESS)) {
|
|
@@ -80,39 +92,43 @@ export var ChatAIModal = function ChatAIModal(_ref) {
|
|
|
80
92
|
setNewChatKey = _useState6[1];
|
|
81
93
|
var _useState7 = useState(null),
|
|
82
94
|
_useState8 = _slicedToArray(_useState7, 2),
|
|
83
|
-
|
|
84
|
-
|
|
95
|
+
sessionMeta = _useState8[0],
|
|
96
|
+
setSessionMeta = _useState8[1];
|
|
85
97
|
var _useState9 = useState(null),
|
|
86
98
|
_useState0 = _slicedToArray(_useState9, 2),
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
var _useState1 = useState(
|
|
99
|
+
sendMessageFunction = _useState0[0],
|
|
100
|
+
setSendMessageFunction = _useState0[1];
|
|
101
|
+
var _useState1 = useState(null),
|
|
90
102
|
_useState10 = _slicedToArray(_useState1, 2),
|
|
91
|
-
|
|
92
|
-
|
|
103
|
+
stopGenerationFunction = _useState10[0],
|
|
104
|
+
setStopGenerationFunction = _useState10[1];
|
|
93
105
|
var _useState11 = useState(false),
|
|
94
106
|
_useState12 = _slicedToArray(_useState11, 2),
|
|
95
|
-
|
|
96
|
-
|
|
107
|
+
isStreaming = _useState12[0],
|
|
108
|
+
setIsStreaming = _useState12[1];
|
|
97
109
|
var _useState13 = useState(false),
|
|
98
110
|
_useState14 = _slicedToArray(_useState13, 2),
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
var _useState15 = useState(
|
|
111
|
+
isWriting = _useState14[0],
|
|
112
|
+
setIsWriting = _useState14[1];
|
|
113
|
+
var _useState15 = useState(false),
|
|
102
114
|
_useState16 = _slicedToArray(_useState15, 2),
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
var _useState17 = useState(
|
|
115
|
+
refetchChats = _useState16[0],
|
|
116
|
+
setRefetchChats = _useState16[1];
|
|
117
|
+
var _useState17 = useState(options.home),
|
|
106
118
|
_useState18 = _slicedToArray(_useState17, 2),
|
|
107
|
-
|
|
108
|
-
|
|
119
|
+
currentOption = _useState18[0],
|
|
120
|
+
setCurrentOption = _useState18[1];
|
|
121
|
+
var _useState19 = useState(false),
|
|
122
|
+
_useState20 = _slicedToArray(_useState19, 2),
|
|
123
|
+
hasError = _useState20[0],
|
|
124
|
+
setHasError = _useState20[1];
|
|
109
125
|
var handlers = useMemo(function () {
|
|
110
126
|
return buildHandlers(setCurrentOption, setHasError);
|
|
111
127
|
}, []);
|
|
112
|
-
var
|
|
113
|
-
|
|
114
|
-
sidebarHasError =
|
|
115
|
-
setSidebarHasError =
|
|
128
|
+
var _useState21 = useState(false),
|
|
129
|
+
_useState22 = _slicedToArray(_useState21, 2),
|
|
130
|
+
sidebarHasError = _useState22[0],
|
|
131
|
+
setSidebarHasError = _useState22[1];
|
|
116
132
|
var resetSelectedChatRef = useRef(null);
|
|
117
133
|
var lang = i18n.language === 'br' ? 'pt-br' : i18n.language;
|
|
118
134
|
moment.locale(lang);
|
|
@@ -122,6 +138,8 @@ export var ChatAIModal = function ChatAIModal(_ref) {
|
|
|
122
138
|
agent = _useGlobalContext.agent,
|
|
123
139
|
project = _useGlobalContext.project,
|
|
124
140
|
client = _useGlobalContext.client,
|
|
141
|
+
task = _useGlobalContext.task,
|
|
142
|
+
chipsProject = _useGlobalContext.chipsProject,
|
|
125
143
|
toggleWebSearch = _useGlobalContext.toggleWebSearch,
|
|
126
144
|
isWebSearchActive = _useGlobalContext.isWebSearchActive,
|
|
127
145
|
setChipsProject = _useGlobalContext.setChipsProject,
|
|
@@ -158,11 +176,14 @@ export var ChatAIModal = function ChatAIModal(_ref) {
|
|
|
158
176
|
var isGlobalSpecialist = isMAIA && (agent === null || agent === void 0 ? void 0 : agent.entity) === 'global';
|
|
159
177
|
var isProjectSpecialist = isMAIA && ((agent === null || agent === void 0 ? void 0 : agent.entity) === 'project' || (agent === null || agent === void 0 ? void 0 : agent.entity) == null);
|
|
160
178
|
var isClientSpecialist = isMAIA && (agent === null || agent === void 0 ? void 0 : agent.entity) === 'client';
|
|
161
|
-
var isMaiaker =
|
|
179
|
+
var isMaiaker = isMarketplaceGlobalCloneAgent(agent);
|
|
162
180
|
if (currentOption === options.myAgents && window.MAIA_CHAT_AI_FEATURE_ACCESS_MULTI_AGENTS) {
|
|
163
181
|
return options.myAgents;
|
|
164
182
|
}
|
|
165
|
-
|
|
183
|
+
|
|
184
|
+
// El orchestrator (MAIA) muestra su home con FAQs/acciones frecuentes; el resto de
|
|
185
|
+
// los global specialists (clones globales no-maiaker) siguen yendo directo al chat.
|
|
186
|
+
if (isGlobalSpecialist && !isMaiaker && (agent === null || agent === void 0 ? void 0 : agent.type) !== 'orchestrator' && currentOption === options.home) {
|
|
166
187
|
return options.chat;
|
|
167
188
|
}
|
|
168
189
|
var shouldShowProjectSelector = currentOption !== options.chat && isProjectSpecialist && !project;
|
|
@@ -174,10 +195,10 @@ export var ChatAIModal = function ChatAIModal(_ref) {
|
|
|
174
195
|
return options.clientSelector;
|
|
175
196
|
}
|
|
176
197
|
return currentOption;
|
|
177
|
-
}, [currentOption, project, client, isMAIA, agent === null || agent === void 0 ? void 0 : agent.entity, agent === null || agent === void 0 ? void 0 : agent.name]);
|
|
198
|
+
}, [currentOption, project, client, isMAIA, 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]);
|
|
178
199
|
var isMaiakerAgentSelected = useMemo(function () {
|
|
179
|
-
return
|
|
180
|
-
}, [
|
|
200
|
+
return isMarketplaceGlobalCloneAgent(agent);
|
|
201
|
+
}, [agent]);
|
|
181
202
|
var sidebarAgentsNavActive = useMemo(function () {
|
|
182
203
|
if (computedCurrentOption === options.myAgents) return 'myAgents';
|
|
183
204
|
if (isMaiakerAgentSelected) return 'maiaker';
|
|
@@ -187,7 +208,7 @@ export var ChatAIModal = function ChatAIModal(_ref) {
|
|
|
187
208
|
/* Reactivar con la fila “Mis agentes” en Sidebar: myAgentsCount prop
|
|
188
209
|
const sidebarMyAgentsCount = useMemo(() => {
|
|
189
210
|
return agents.data.filter(
|
|
190
|
-
a => !(a.type === 'clone' &&
|
|
211
|
+
a => !(a.type === 'orchestrator' || (a.type === 'clone' && a.entity === 'global' && /(maiaker|marketplace)/i.test(a.name || '')))
|
|
191
212
|
)
|
|
192
213
|
.length
|
|
193
214
|
}, [agents.data])
|
|
@@ -198,22 +219,22 @@ export var ChatAIModal = function ChatAIModal(_ref) {
|
|
|
198
219
|
|
|
199
220
|
// Task panel y banner de proyecto abren en flotante por default (no tapar el contexto detrás).
|
|
200
221
|
// El usuario puede cambiar a sidebar/fullscreen desde los controles del modal.
|
|
201
|
-
var
|
|
222
|
+
var _useState23 = useState(function () {
|
|
202
223
|
var _bannerEntryFaq$faqTi;
|
|
203
224
|
if (section === 'task') return 'floating';
|
|
204
225
|
if (bannerEntryFaq !== null && bannerEntryFaq !== void 0 && (_bannerEntryFaq$faqTi = bannerEntryFaq.faqTitle) !== null && _bannerEntryFaq$faqTi !== void 0 && _bannerEntryFaq$faqTi.trim()) return 'floating';
|
|
205
226
|
return 'sidebar';
|
|
206
227
|
}),
|
|
207
|
-
|
|
208
|
-
layoutMode =
|
|
209
|
-
setLayoutMode =
|
|
228
|
+
_useState24 = _slicedToArray(_useState23, 2),
|
|
229
|
+
layoutMode = _useState24[0],
|
|
230
|
+
setLayoutMode = _useState24[1];
|
|
210
231
|
var expanded = layoutMode === 'fullscreen';
|
|
211
232
|
var isFloating = layoutMode === 'floating';
|
|
212
233
|
var contentWrapperRef = useRef(null);
|
|
213
|
-
var
|
|
214
|
-
|
|
215
|
-
dragPosition =
|
|
216
|
-
setDragPosition =
|
|
234
|
+
var _useState25 = useState(null),
|
|
235
|
+
_useState26 = _slicedToArray(_useState25, 2),
|
|
236
|
+
dragPosition = _useState26[0],
|
|
237
|
+
setDragPosition = _useState26[1];
|
|
217
238
|
var _useFloatingPanelDrag = useFloatingPanelDragTilt(isFloating),
|
|
218
239
|
tiltMotion = _useFloatingPanelDrag.tiltMotion,
|
|
219
240
|
startPointerTracking = _useFloatingPanelDrag.startPointerTracking,
|
|
@@ -440,6 +461,20 @@ export var ChatAIModal = function ChatAIModal(_ref) {
|
|
|
440
461
|
// - Con conversación iniciada: inicia una nueva conversación y vuelve al home (todas las secciones).
|
|
441
462
|
// - En el home (FAQs/FUA): vuelve al selector de proyectos/clientes limpiando la entity seleccionada.
|
|
442
463
|
var handleBack = useCallback(function () {
|
|
464
|
+
var to = resolveAiChatBackDestination(section, agent === null || agent === void 0 ? void 0 : agent.type, computedCurrentOption, options.home);
|
|
465
|
+
amplitudEvent(EVENTS.aiChatBack, {
|
|
466
|
+
to: to
|
|
467
|
+
});
|
|
468
|
+
|
|
469
|
+
// Orchestrator en el home del header (paso 2): limpiar el contexto del chip y volver
|
|
470
|
+
// a la lista de contextos recientes (paso 1), sin salir del home.
|
|
471
|
+
if (section === 'header' && (agent === null || agent === void 0 ? void 0 : agent.type) === 'orchestrator' && computedCurrentOption === options.home) {
|
|
472
|
+
setProject(null);
|
|
473
|
+
setClient === null || setClient === void 0 || setClient(null);
|
|
474
|
+
setTask === null || setTask === void 0 || setTask(null);
|
|
475
|
+
setChipsProject(null);
|
|
476
|
+
return;
|
|
477
|
+
}
|
|
443
478
|
if (computedCurrentOption === options.chat) {
|
|
444
479
|
handleResetChat();
|
|
445
480
|
return;
|
|
@@ -449,8 +484,9 @@ export var ChatAIModal = function ChatAIModal(_ref) {
|
|
|
449
484
|
setProject(null);
|
|
450
485
|
setClient === null || setClient === void 0 || setClient(null);
|
|
451
486
|
setTask === null || setTask === void 0 || setTask(null);
|
|
487
|
+
setChipsProject(null);
|
|
452
488
|
}
|
|
453
|
-
}, [computedCurrentOption, section, handleResetChat, setProject, setClient, setTask]);
|
|
489
|
+
}, [computedCurrentOption, section, agent === null || agent === void 0 ? void 0 : agent.type, amplitudEvent, options.home, handleResetChat, setProject, setClient, setTask, setChipsProject]);
|
|
454
490
|
useEffect(function () {
|
|
455
491
|
if (!agentsFetchedRef.current) {
|
|
456
492
|
agentsFetchedRef.current = true;
|
|
@@ -532,9 +568,146 @@ export var ChatAIModal = function ChatAIModal(_ref) {
|
|
|
532
568
|
document.removeEventListener('maia-open-new-chat-with-agent', openNewChatWithAgent);
|
|
533
569
|
};
|
|
534
570
|
}, [selectAgent, setClient, setProject, setTask]);
|
|
571
|
+
|
|
572
|
+
// Metadata de la session abierta (agent_type/agent_entity + contexto), emitida por useChatMessages.
|
|
573
|
+
useEffect(function () {
|
|
574
|
+
var onSessionMeta = function onSessionMeta(evt) {
|
|
575
|
+
var _ref6 = evt,
|
|
576
|
+
detail = _ref6.detail;
|
|
577
|
+
if (detail) setSessionMeta(detail);
|
|
578
|
+
};
|
|
579
|
+
document.addEventListener('maia-chat-session-meta', onSessionMeta);
|
|
580
|
+
return function () {
|
|
581
|
+
document.removeEventListener('maia-chat-session-meta', onSessionMeta);
|
|
582
|
+
};
|
|
583
|
+
}, []);
|
|
584
|
+
|
|
585
|
+
// Al cambiar de conversación limpiamos la metadata; el load de la nueva session la vuelve a emitir.
|
|
586
|
+
useEffect(function () {
|
|
587
|
+
setSessionMeta(null);
|
|
588
|
+
}, [initialChatId]);
|
|
589
|
+
|
|
590
|
+
// Cartel "continuar en un chat nuevo": se muestra al abrir una conversación de un clone legacy
|
|
591
|
+
// (agent_type === 'clone' con entity project/task/client). El input se reemplaza por el cartel.
|
|
592
|
+
var legacyContextSession = useMemo(function () {
|
|
593
|
+
if (computedCurrentOption !== options.chat) return null;
|
|
594
|
+
if (!sessionMeta || sessionMeta.agentType !== 'clone') return null;
|
|
595
|
+
var entity = sessionMeta.agentEntity;
|
|
596
|
+
if (!entity || !LEGACY_CONTEXT_ENTITIES.includes(entity)) return null;
|
|
597
|
+
var contextName = entity === 'task' ? sessionMeta.taskName : entity === 'project' ? sessionMeta.projectName : sessionMeta.clientName;
|
|
598
|
+
return {
|
|
599
|
+
entityType: entity,
|
|
600
|
+
contextName: contextName || ''
|
|
601
|
+
};
|
|
602
|
+
}, [computedCurrentOption, sessionMeta]);
|
|
603
|
+
|
|
604
|
+
// Marca el agente de la conversación legacy para que header, selector y avatar muestren el logo
|
|
605
|
+
// MAIA y el nombre tachado (agente obsoleto), sin depender del `type` resuelto de la sesión vieja.
|
|
606
|
+
useEffect(function () {
|
|
607
|
+
if (legacyContextSession && agent && !agent.is_legacy_context) {
|
|
608
|
+
selectAgent(_objectSpread(_objectSpread({}, agent), {}, {
|
|
609
|
+
is_legacy_context: true
|
|
610
|
+
}));
|
|
611
|
+
}
|
|
612
|
+
}, [legacyContextSession, agent, selectAgent]);
|
|
613
|
+
|
|
614
|
+
// Abre un chat nuevo con el orchestrator seteando el contexto del clone legacy (mismo criterio
|
|
615
|
+
// que clickear un contexto reciente en el home → paso 2 con FAQs/acciones de ese contexto).
|
|
616
|
+
var handleContinueLegacyContextInNewChat = useCallback(function () {
|
|
617
|
+
if (!sessionMeta) return;
|
|
618
|
+
var agentEntity = sessionMeta.agentEntity,
|
|
619
|
+
pId = sessionMeta.projectId,
|
|
620
|
+
pName = sessionMeta.projectName,
|
|
621
|
+
cId = sessionMeta.clientId,
|
|
622
|
+
cName = sessionMeta.clientName,
|
|
623
|
+
tId = sessionMeta.taskId,
|
|
624
|
+
tName = sessionMeta.taskName;
|
|
625
|
+
var orchestrator = agents.data.find(function (a) {
|
|
626
|
+
return a.type === 'orchestrator';
|
|
627
|
+
});
|
|
628
|
+
if (!orchestrator) return;
|
|
629
|
+
|
|
630
|
+
// Reset del chat → conversación nueva
|
|
631
|
+
stopGenerationFunction === null || stopGenerationFunction === void 0 || stopGenerationFunction();
|
|
632
|
+
setIsWriting(false);
|
|
633
|
+
setUserInitialMessage({
|
|
634
|
+
message: '',
|
|
635
|
+
attachments: []
|
|
636
|
+
});
|
|
637
|
+
setInitialChatId(null);
|
|
638
|
+
setNewChatKey(function (prev) {
|
|
639
|
+
return prev + 1;
|
|
640
|
+
});
|
|
641
|
+
setHasError(false);
|
|
642
|
+
|
|
643
|
+
// Setear contexto (mismo criterio que handleSelectRecentContext del home)
|
|
644
|
+
setTask === null || setTask === void 0 || setTask(null);
|
|
645
|
+
setProject(null);
|
|
646
|
+
setClient === null || setClient === void 0 || setClient(null);
|
|
647
|
+
setChipsProject(null);
|
|
648
|
+
if (agentEntity === 'client' && cId != null) {
|
|
649
|
+
setClient === null || setClient === void 0 || setClient({
|
|
650
|
+
id: cId,
|
|
651
|
+
name: cName || ''
|
|
652
|
+
});
|
|
653
|
+
} else if (agentEntity === 'project' && pId != null) {
|
|
654
|
+
setProject(_objectSpread({
|
|
655
|
+
id: pId,
|
|
656
|
+
name: pName || ''
|
|
657
|
+
}, cId != null ? {
|
|
658
|
+
clientId: cId,
|
|
659
|
+
client: {
|
|
660
|
+
id: cId,
|
|
661
|
+
name: cName || ''
|
|
662
|
+
}
|
|
663
|
+
} : {}));
|
|
664
|
+
setChipsProject({
|
|
665
|
+
projectId: String(pId),
|
|
666
|
+
projectName: pName || '',
|
|
667
|
+
clientName: cName || ''
|
|
668
|
+
});
|
|
669
|
+
} else if (agentEntity === 'task' && tId != null) {
|
|
670
|
+
setTask === null || setTask === void 0 || setTask(_objectSpread(_objectSpread({
|
|
671
|
+
id: tId,
|
|
672
|
+
name: tName || ''
|
|
673
|
+
}, pId != null ? {
|
|
674
|
+
projectId: pId
|
|
675
|
+
} : {}), cId != null ? {
|
|
676
|
+
clientId: cId
|
|
677
|
+
} : {}));
|
|
678
|
+
if (cId != null) setClient === null || setClient === void 0 || setClient({
|
|
679
|
+
id: cId,
|
|
680
|
+
name: cName || ''
|
|
681
|
+
});
|
|
682
|
+
if (pId != null) {
|
|
683
|
+
setProject(_objectSpread({
|
|
684
|
+
id: pId,
|
|
685
|
+
name: pName || ''
|
|
686
|
+
}, cId != null ? {
|
|
687
|
+
clientId: cId,
|
|
688
|
+
client: {
|
|
689
|
+
id: cId,
|
|
690
|
+
name: cName || ''
|
|
691
|
+
}
|
|
692
|
+
} : {}));
|
|
693
|
+
setChipsProject({
|
|
694
|
+
projectId: String(pId),
|
|
695
|
+
projectName: pName || '',
|
|
696
|
+
clientName: cName || ''
|
|
697
|
+
});
|
|
698
|
+
}
|
|
699
|
+
}
|
|
700
|
+
selectAgent(orchestrator);
|
|
701
|
+
setSessionMeta(null);
|
|
702
|
+
setCurrentOption(options.home);
|
|
703
|
+
document.dispatchEvent(new CustomEvent('chat-session-changed'));
|
|
704
|
+
}, [sessionMeta, agents.data, selectAgent, setClient, setProject, setTask, setChipsProject, stopGenerationFunction]);
|
|
535
705
|
var showNewChat = computedCurrentOption !== options.chat;
|
|
536
706
|
var hideHeaderAgentSelector = computedCurrentOption === options.myAgents;
|
|
537
|
-
|
|
707
|
+
// Orchestrator abierto desde el header: en el paso 2 del home (contexto pineado en el chip)
|
|
708
|
+
// mostramos "volver" para limpiar el contexto y volver a la lista de contextos recientes.
|
|
709
|
+
var showHeaderContextBackButton = section === 'header' && (agent === null || agent === void 0 ? void 0 : agent.type) === 'orchestrator' && computedCurrentOption === options.home && !!(task !== null && task !== void 0 && task.id || chipsProject !== null && chipsProject !== void 0 && chipsProject.projectId || client !== null && client !== void 0 && client.id || project !== null && project !== void 0 && project.id) && !hasError && !loading;
|
|
710
|
+
var showBackButton = showHeaderContextBackButton || (agent === null || agent === void 0 ? void 0 : agent.type) === 'clone' && (agent === null || agent === void 0 ? void 0 : agent.entity) !== 'global' && !hasError && !loading && (computedCurrentOption === options.chat || computedCurrentOption === options.home && section !== 'task');
|
|
538
711
|
var handleOpenMarketplace = useCallback(function () {
|
|
539
712
|
if (!window.MAIA_CHAT_AI_FEATURE_ACCESS_MULTI_AGENTS) {
|
|
540
713
|
return;
|
|
@@ -548,7 +721,7 @@ export var ChatAIModal = function ChatAIModal(_ref) {
|
|
|
548
721
|
case 0:
|
|
549
722
|
setHasError(false);
|
|
550
723
|
maiakerAgent = agents.data.find(function (a) {
|
|
551
|
-
return a
|
|
724
|
+
return isMarketplaceGlobalCloneAgent(a);
|
|
552
725
|
});
|
|
553
726
|
if (maiakerAgent) {
|
|
554
727
|
_context2.next = 5;
|
|
@@ -557,7 +730,7 @@ export var ChatAIModal = function ChatAIModal(_ref) {
|
|
|
557
730
|
_context2.prev = 1;
|
|
558
731
|
_context2.next = 2;
|
|
559
732
|
return fetchMaia({
|
|
560
|
-
path: "agents?agent_type=clone&lang=".concat(mapCORLang(i18n.language)),
|
|
733
|
+
path: "agents?agent_type=clone&entity=global&lang=".concat(mapCORLang(i18n.language)),
|
|
561
734
|
method: 'GET'
|
|
562
735
|
});
|
|
563
736
|
case 2:
|
|
@@ -567,7 +740,7 @@ export var ChatAIModal = function ChatAIModal(_ref) {
|
|
|
567
740
|
case 3:
|
|
568
741
|
data = _context2.sent;
|
|
569
742
|
maiakerAgent = (data.data || []).find(function (a) {
|
|
570
|
-
return a
|
|
743
|
+
return isMarketplaceGlobalCloneAgent(a);
|
|
571
744
|
});
|
|
572
745
|
_context2.next = 5;
|
|
573
746
|
break;
|
|
@@ -602,6 +775,9 @@ export var ChatAIModal = function ChatAIModal(_ref) {
|
|
|
602
775
|
selectFirstAgent(agentId);
|
|
603
776
|
}
|
|
604
777
|
}, [agent === null || agent === void 0 ? void 0 : agent.id, removeAgent, selectFirstAgent]);
|
|
778
|
+
|
|
779
|
+
// El footer (input) se oculta solo en el home marketplace de Maiaker (browse de agentes).
|
|
780
|
+
// El home del orchestrator sí permite escribir, así que mantiene el footer.
|
|
605
781
|
var hideFooterOnMaiakerMarketplaceHome = computedCurrentOption === options.home && isMaiakerAgentSelected;
|
|
606
782
|
var modalPanel = /*#__PURE__*/_jsxs(_Fragment, {
|
|
607
783
|
children: [validateAccessByFeature(section) && !isFloating ? /*#__PURE__*/_jsx(Sidebar, {
|
|
@@ -681,6 +857,8 @@ export var ChatAIModal = function ChatAIModal(_ref) {
|
|
|
681
857
|
newChatKey: newChatKey,
|
|
682
858
|
showFaqs: computedCurrentOption === options.chat,
|
|
683
859
|
tooltipZIndex: tooltipZIndex,
|
|
860
|
+
legacyContextSession: legacyContextSession,
|
|
861
|
+
onContinueInNewChat: handleContinueLegacyContextInNewChat,
|
|
684
862
|
layoutMode: layoutMode
|
|
685
863
|
})]
|
|
686
864
|
})]
|
|
@@ -709,4 +887,4 @@ export var ChatAIModal = function ChatAIModal(_ref) {
|
|
|
709
887
|
}), /*#__PURE__*/_jsx(Snackbar, {})]
|
|
710
888
|
}), selector);
|
|
711
889
|
};
|
|
712
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1c2VDYWxsYmFjayIsInVzZU1lbW8iLCJ1c2VTdGF0ZSIsInVzZVJlZiIsInVzZUVmZmVjdCIsInVzZUxheW91dEVmZmVjdCIsIlJlYWN0RE9NIiwibW9tZW50IiwidXNlVHJhbnNsYXRpb24iLCJ1c2VVc2VyIiwiTUFJQUVycm9yIiwidXNlTWFpYVRhc2tQYW5lbFpJbmRleCIsIkNoYXRBSUNvbnRlbnQiLCJidWlsZEhhbmRsZXJzIiwib3B0aW9ucyIsIlNpZGViYXIiLCJ1c2VHZXRBZ2VudHMiLCJ1c2VHbG9iYWxDb250ZXh0IiwiQ2hhdEFJTW9kYWxIZWFkZXIiLCJTbmFja2JhciIsIlByb2plY3RTdW1tYXJ5Q29udGVudCIsIkFibUFnZW50TW9kYWwiLCJTRUNUSU9OUyIsIlNDQ0FJTUNvbnRlbnQiLCJTQ0NBSU1Db250ZW50V3JhcHBlciIsIlNDQ0FJTVdyYXBwZXIiLCJnZXRNYWlhRmxvYXRpbmdQYW5lbFdpZHRoUHgiLCJGbG9hdGluZ1BhbmVsTW90aW9uIiwidXNlRmxvYXRpbmdQYW5lbERyYWdUaWx0IiwiQ2hhdEFpTW9kYWxGb290ZXIiLCJ2YWxpZGF0ZUlzTWFpYSIsImlzTWFpYWtlckFnZW50IiwidXNlRmFxc1N0b3JlIiwiZmV0Y2hNYWlhIiwibWFwQ09STGFuZyIsIkVWRU5UUyIsInVzZUV2ZW50IiwianN4IiwiX2pzeCIsImpzeHMiLCJfanN4cyIsIkZyYWdtZW50IiwiX0ZyYWdtZW50IiwiSURfTU9EQUxfQ0hBVF9BR0VOVCIsInZhbGlkYXRlQWNjZXNzQnlGZWF0dXJlIiwic2VjdGlvbiIsIndpbmRvdyIsIk1BSUFfQ0hBVF9BSV9GRUFUVVJFX0FDQ0VTU19NVUxUSV9BR0VOVFMiLCJNQUlBX0NIQVRfQUlfRkVBVFVSRV9BQ0NFU1MiLCJDaGF0QUlNb2RhbCIsIl9yZWYiLCJfdXNlciRwZXJtaXNzaW9ucyIsIl91c2VyJHBlcm1pc3Npb25zMiIsIl91c2VyJHBlcm1pc3Npb25zMyIsIl9hZ2VudHMkZGF0YSIsImhhbmRsZUNsb3NlIiwidXNlciIsIl91c2VUcmFuc2xhdGlvbiIsImFibUFnZW50IiwiaTE4biIsImFtcGxpdHVkRXZlbnQiLCJoYW5kbGVDbG9zZU1vZGFsIiwiZ2V0U3RhdGUiLCJjbGVhckZhcXMiLCJfdXNlU3RhdGUiLCJtZXNzYWdlIiwiYXR0YWNobWVudHMiLCJfdXNlU3RhdGUyIiwiX3NsaWNlZFRvQXJyYXkiLCJ1c2VySW5pdGlhbE1lc3NhZ2UiLCJzZXRVc2VySW5pdGlhbE1lc3NhZ2UiLCJfdXNlU3RhdGUzIiwiX3VzZVN0YXRlNCIsImluaXRpYWxDaGF0SWQiLCJzZXRJbml0aWFsQ2hhdElkIiwiX3VzZVN0YXRlNSIsIl91c2VTdGF0ZTYiLCJuZXdDaGF0S2V5Iiwic2V0TmV3Q2hhdEtleSIsIl91c2VTdGF0ZTciLCJfdXNlU3RhdGU4Iiwic2VuZE1lc3NhZ2VGdW5jdGlvbiIsInNldFNlbmRNZXNzYWdlRnVuY3Rpb24iLCJfdXNlU3RhdGU5IiwiX3VzZVN0YXRlMCIsInN0b3BHZW5lcmF0aW9uRnVuY3Rpb24iLCJzZXRTdG9wR2VuZXJhdGlvbkZ1bmN0aW9uIiwiX3VzZVN0YXRlMSIsIl91c2VTdGF0ZTEwIiwiaXNTdHJlYW1pbmciLCJzZXRJc1N0cmVhbWluZyIsIl91c2VTdGF0ZTExIiwiX3VzZVN0YXRlMTIiLCJpc1dyaXRpbmciLCJzZXRJc1dyaXRpbmciLCJfdXNlU3RhdGUxMyIsIl91c2VTdGF0ZTE0IiwicmVmZXRjaENoYXRzIiwic2V0UmVmZXRjaENoYXRzIiwiX3VzZVN0YXRlMTUiLCJob21lIiwiX3VzZVN0YXRlMTYiLCJjdXJyZW50T3B0aW9uIiwic2V0Q3VycmVudE9wdGlvbiIsIl91c2VTdGF0ZTE3IiwiX3VzZVN0YXRlMTgiLCJoYXNFcnJvciIsInNldEhhc0Vycm9yIiwiaGFuZGxlcnMiLCJfdXNlU3RhdGUxOSIsIl91c2VTdGF0ZTIwIiwic2lkZWJhckhhc0Vycm9yIiwic2V0U2lkZWJhckhhc0Vycm9yIiwicmVzZXRTZWxlY3RlZENoYXRSZWYiLCJsYW5nIiwibGFuZ3VhZ2UiLCJsb2NhbGUiLCJfdXNlR2xvYmFsQ29udGV4dCIsInNlbGVjdEFnZW50IiwiYWdlbnQiLCJwcm9qZWN0IiwiY2xpZW50IiwidG9nZ2xlV2ViU2VhcmNoIiwiaXNXZWJTZWFyY2hBY3RpdmUiLCJzZXRDaGlwc1Byb2plY3QiLCJzZXRDbGllbnQiLCJzZXRQcm9qZWN0IiwiYmFubmVyRW50cnlGYXEiLCJzZXRUYXNrIiwidG9vbHRpcFpJbmRleCIsIl91c2VHZXRBZ2VudHMiLCJoYW5kbGVHb0hvbWUiLCJhZ2VudHMiLCJsb2FkaW5nIiwibG9hZGluZ01vcmUiLCJhZ2VudEVycm9yIiwiZXJyb3IiLCJoYW5kbGVHZXRBZ2VudHMiLCJsb2FkTW9yZUFnZW50cyIsInNlYXJjaEN1c3RvbUFnZW50cyIsInNlYXJjaExvYWRpbmciLCJhZGRBZ2VudCIsInJlbW92ZUFnZW50IiwidXBkYXRlQWdlbnQiLCJ1cGRhdGVBZ2VudEZhdm9yaXRlIiwic2VsZWN0Rmlyc3RBZ2VudCIsInNvcnRBZ2VudHNMaXN0IiwiaXNNQUlBIiwidXNlckhhc1Blcm1pc3Npb25zIiwicGVybWlzc2lvbnMiLCJhaV9hZ2VudHMiLCJjcmVhdGUiLCJlZGl0IiwiY29tcHV0ZWRDdXJyZW50T3B0aW9uIiwiaXNHbG9iYWxTcGVjaWFsaXN0IiwiZW50aXR5IiwiaXNQcm9qZWN0U3BlY2lhbGlzdCIsImlzQ2xpZW50U3BlY2lhbGlzdCIsImlzTWFpYWtlciIsIm15QWdlbnRzIiwiY2hhdCIsInNob3VsZFNob3dQcm9qZWN0U2VsZWN0b3IiLCJzaG91bGRTaG93Q2xpZW50U2VsZWN0b3IiLCJwcm9qZWN0U2VsZWN0b3IiLCJjbGllbnRTZWxlY3RvciIsIm5hbWUiLCJpc01haWFrZXJBZ2VudFNlbGVjdGVkIiwidHlwZSIsInNpZGViYXJBZ2VudHNOYXZBY3RpdmUiLCJhZ2VudHNGZXRjaGVkUmVmIiwic2VsZWN0b3IiLCJkb2N1bWVudCIsInF1ZXJ5U2VsZWN0b3IiLCJjb25jYXQiLCJfdXNlU3RhdGUyMSIsIl9iYW5uZXJFbnRyeUZhcSRmYXFUaSIsImZhcVRpdGxlIiwidHJpbSIsIl91c2VTdGF0ZTIyIiwibGF5b3V0TW9kZSIsInNldExheW91dE1vZGUiLCJleHBhbmRlZCIsImlzRmxvYXRpbmciLCJjb250ZW50V3JhcHBlclJlZiIsIl91c2VTdGF0ZTIzIiwiX3VzZVN0YXRlMjQiLCJkcmFnUG9zaXRpb24iLCJzZXREcmFnUG9zaXRpb24iLCJfdXNlRmxvYXRpbmdQYW5lbERyYWciLCJ0aWx0TW90aW9uIiwic3RhcnRQb2ludGVyVHJhY2tpbmciLCJzYW1wbGVQb2ludGVyTW92ZSIsImVuZFBvaW50ZXJUcmFja2luZyIsImRyYWdTdGF0ZVJlZiIsImNsYW1wRHJhZ1Bvc2l0aW9uIiwieCIsInkiLCJjb250ZW50V3JhcHBlciIsImN1cnJlbnQiLCJfY29udGVudFdyYXBwZXIkZ2V0Qm8iLCJnZXRCb3VuZGluZ0NsaWVudFJlY3QiLCJ3aWR0aCIsImhlaWdodCIsIm9mZnNldCIsIm1heFgiLCJNYXRoIiwibWF4IiwiaW5uZXJXaWR0aCIsIm1heFkiLCJpbm5lckhlaWdodCIsIm1pbiIsInByZXYiLCJwYWQiLCJoYW5kbGVEcmFnRW5kIiwiZXZlbnQiLCJfZHJhZ1N0YXRlUmVmJGN1cnJlbnQiLCJwb2ludGVySWQiLCJib2R5Iiwic3R5bGUiLCJ1c2VyU2VsZWN0IiwiY3Vyc29yIiwiaGFuZGxlRHJhZ01vdmUiLCJkcmFnU3RhdGUiLCJjbGllbnRYIiwiY2xpZW50WSIsIm5leHRQb3NpdGlvbiIsIm9mZnNldFgiLCJvZmZzZXRZIiwicmVzb2x2ZWREcmFnUG9zaXRpb24iLCJoYW5kbGVEcmFnU3RhcnQiLCJidXR0b24iLCJ0YXJnZXQiLCJjbG9zZXN0IiwicmVjdCIsImluaXRpYWxQb3NpdGlvbiIsImxlZnQiLCJ0b3AiLCJwb2ludGVyT2Zmc2V0WCIsInBvaW50ZXJPZmZzZXRZIiwiY3VycmVudFRhcmdldCIsInNldFBvaW50ZXJDYXB0dXJlIiwicHJldmVudERlZmF1bHQiLCJhaUNoYXREcmFnZ2FibGUiLCJzdGFydENoYXQiLCJmYXFJZCIsImFnZW50U3VnZ2VzdGlvbklkIiwibWVudGlvbnMiLCJmdWFJZCIsInNjSWQiLCJjb250ZXh0RGF0YSIsIl9vYmplY3RTcHJlYWQiLCJsZW5ndGgiLCJiYW5uZXJGYXFBdXRvU2VudFJlZiIsIl9iYW5uZXJFbnRyeUZhcSRmYXFUaTIiLCJlbnRpdHlSZWFkeSIsIkJvb2xlYW4iLCJpZCIsInVuZGVmaW5lZCIsImdvVG9DaGF0Iiwic2Vzc2lvbkV4dGVybmFsSWQiLCJzZWxlY3RlZEFnZW50IiwiZGF0YSIsImZpbmQiLCJhZ2VudEl0ZW0iLCJhZ2VudElkIiwiZGlzcGF0Y2hFdmVudCIsIkN1c3RvbUV2ZW50IiwiaGFuZGxlU2VuZE1lc3NhZ2VSZWFkeSIsInNlbmRNZXNzYWdlIiwic3RvcEdlbmVyYXRpb24iLCJzdHJlYW1pbmciLCJ3cml0aW5nIiwiaGFuZGxlU2VuZE1lc3NhZ2UiLCJpc19kZWxldGVkIiwiaGFzX25vdF9wZXJtaXNzaW9ucyIsImhhc19ub3RfYWNjZXNzIiwicHJvamVjdF9kZWxldGVkIiwiaGFuZGxlUmVzZXRDaGF0IiwiX2FzeW5jVG9HZW5lcmF0b3IiLCJfcmVnZW5lcmF0b3JSdW50aW1lIiwibWFyayIsIl9jYWxsZWUiLCJ3cmFwIiwiX2NvbnRleHQiLCJuZXh0Iiwic3RvcCIsImhhbmRsZUJhY2siLCJvbk1lcmdlQ3JlYXRlZEFnZW50IiwiZXZ0IiwiX3JlZjMiLCJkZXRhaWwiLCJuZXh0QWdlbnQiLCJuYXZpZ2F0ZUhvbWUiLCJhZGRFdmVudExpc3RlbmVyIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsIm9uU3luY0VkaXRlZEFnZW50IiwiX3JlZjQiLCJvcGVuQ2hhdFZpZXciLCJvcGVuTmV3Q2hhdFdpdGhBZ2VudCIsIl9kZXRhaWwkcHJvamVjdCIsIl9kZXRhaWwkY2xpZW50IiwiX3JlZjUiLCJ0YXNrIiwic2hvd05ld0NoYXQiLCJoaWRlSGVhZGVyQWdlbnRTZWxlY3RvciIsInNob3dCYWNrQnV0dG9uIiwiaGFuZGxlT3Blbk1hcmtldHBsYWNlIiwiaGFuZGxlR29Ub01haWFrZXIiLCJfY2FsbGVlMiIsIm1haWFrZXJBZ2VudCIsInJlc3BvbnNlIiwiX3QiLCJfY29udGV4dDIiLCJhIiwicGF0aCIsIm1ldGhvZCIsInNlbnQiLCJqc29uIiwiYWJydXB0IiwiaGFuZGxlRGVsZXRlQWdlbnRGcm9tTXlBZ2VudHMiLCJoaWRlRm9vdGVyT25NYWlha2VyTWFya2V0cGxhY2VIb21lIiwibW9kYWxQYW5lbCIsImNoaWxkcmVuIiwib25Hb1RvQ2hhdCIsIm9uRXJyb3IiLCJoYW5kbGVHb1RvSG9tZSIsImhhbmRsZVNldFJlZmV0Y2hDaGF0cyIsImFnZW50c05hdkFjdGl2ZSIsImZsb2F0aW5nIiwib25MYXlvdXRNb2RlQ2hhbmdlIiwiZHJhZ2dhYmxlIiwib25EcmFnU3RhcnQiLCJvbkRyYWdNb3ZlIiwib25EcmFnRW5kIiwiaGFzTW9yZSIsImhhc19tb3JlIiwib25BZ2VudFVwZGF0ZSIsImhpZGVBZ2VudFNlbGVjdG9yIiwib25CYWNrIiwicmVmcyIsIm9uU2VuZE1lc3NhZ2VSZWFkeSIsImxvYWRpbmdBZ2VudHMiLCJvbkRlbGV0ZUFnZW50Iiwib25GYXZvcml0ZUFnZW50VXBkYXRlIiwiaGFzTW9yZUFnZW50cyIsImxvYWRpbmdNb3JlQWdlbnRzIiwib25Mb2FkTW9yZUFnZW50cyIsIm9uR29Ub01haWFrZXIiLCJvblNlYXJjaEFnZW50cyIsInNlYXJjaExvYWRpbmdBZ2VudHMiLCJvblJlc3RhcnRTdW1tYXJ5IiwiaGFuZGxlU3RvcEdlbmVyYXRpb24iLCJjaGF0SWQiLCJzaG93RmFxcyIsInJlZiIsImNyZWF0ZVBvcnRhbCIsImVsZXZhdGVkIiwidGlsdCJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL21vbGVjdWxlcy9DaGF0QUlNb2RhbC9DaGF0QUlNb2RhbC50c3giXSwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgbm8tbmVzdGVkLXRlcm5hcnkgKi9cbi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9pbmRlbnQgKi9cbi8qIGVzbGludC1kaXNhYmxlIHJlYWN0L2pzeC1uby11c2VsZXNzLWZyYWdtZW50ICovXG4vKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55ICovXG4vKiBlc2xpbnQtZGlzYWJsZSByZWFjdC9uby1hcnJheS1pbmRleC1rZXkgKi9cbi8qIGVzbGludC1kaXNhYmxlIGpzeC1hMTF5L2NsaWNrLWV2ZW50cy1oYXZlLWtleS1ldmVudHMgKi9cbi8qIGVzbGludC1kaXNhYmxlIGpzeC1hMTF5L25vLXN0YXRpYy1lbGVtZW50LWludGVyYWN0aW9ucyAqL1xuLyogZXNsaW50LWRpc2FibGUgcmVhY3QvZnVuY3Rpb24tY29tcG9uZW50LWRlZmluaXRpb24gKi9cbi8qIGVzbGludC1kaXNhYmxlIHJlYWN0L3JlcXVpcmUtZGVmYXVsdC1wcm9wcyAqL1xuLyogZXNsaW50LWRpc2FibGUgbm8tY29uc29sZSAqL1xuaW1wb3J0IHtcbiAgUmVmT2JqZWN0LFxuICB1c2VDYWxsYmFjayxcbiAgdXNlTWVtbyxcbiAgdXNlU3RhdGUsXG4gIHVzZVJlZixcbiAgdXNlRWZmZWN0LFxuICB1c2VMYXlvdXRFZmZlY3QsXG4gIFBvaW50ZXJFdmVudCBhcyBSZWFjdFBvaW50ZXJFdmVudCxcbn0gZnJvbSAncmVhY3QnXG5pbXBvcnQgUmVhY3RET00gZnJvbSAncmVhY3QtZG9tJ1xuaW1wb3J0IG1vbWVudCBmcm9tICdtb21lbnQnXG5pbXBvcnQgeyB1c2VUcmFuc2xhdGlvbiB9IGZyb20gJ3JlYWN0LWkxOG5leHQnXG5pbXBvcnQgeyB1c2VVc2VyIH0gZnJvbSAnLi4vLi4vLi4vY29udGV4dC9jb3ItdXNlcidcbmltcG9ydCB7IE1BSUFFcnJvciB9IGZyb20gJy4uLy4uL2F0b21zL01BSUFFcnJvcidcbmltcG9ydCB7IHVzZU1haWFUYXNrUGFuZWxaSW5kZXggfSBmcm9tICcuLi8uLi8uLi9ob29rcy91c2VNYWlhVGFza1BhbmVsWkluZGV4J1xuXG5pbXBvcnQgeyBDaGF0QUlDb250ZW50IH0gZnJvbSAnLi4vQ2hhdEFJQ29udGVudCdcbmltcG9ydCB7IGJ1aWxkSGFuZGxlcnMsIG9wdGlvbnMgfSBmcm9tICcuL2NvbnN0YW50cydcbmltcG9ydCB7IFNpZGViYXIgfSBmcm9tICcuLi9TaWRlYmFyJ1xuaW1wb3J0IHsgdXNlR2V0QWdlbnRzIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvbWFpYS9BZ2VudHMvZ2V0QWdlbnRzJ1xuaW1wb3J0IHsgdXNlR2xvYmFsQ29udGV4dCB9IGZyb20gJy4uLy4uLy4uL2NvbnRleHQvZ2xvYmFsLWNvbnRleHQnXG5pbXBvcnQgeyBBdHRhY2htZW50RmlsZSB9IGZyb20gJy4uL0NoYXRGb290ZXIvQ2hhdEZvb3RlcidcbmltcG9ydCB7IENvbnRleHRNZW50aW9uIH0gZnJvbSAnLi4vLi4vLi4vdHlwZXMvY29udGV4dE1lbnRpb24nXG5pbXBvcnQgeyBDaGF0QUlNb2RhbEhlYWRlciB9IGZyb20gJy4vY29tcG9uZW50cy9DaGF0QWlNb2RhbEhlYWRlci9DaGF0QWlNb2RhbEhlYWRlcidcbmltcG9ydCB7IFNuYWNrYmFyIH0gZnJvbSAnLi4vLi4vb3JnYW5pc21zL1NuYWNrQmFyL1NuYWNrYmFyJ1xuaW1wb3J0IHsgUHJvamVjdFN1bW1hcnlDb250ZW50IH0gZnJvbSAnLi4vUHJvamVjdFN1bW1hcnlDb250ZW50J1xuaW1wb3J0IHsgQWJtQWdlbnRNb2RhbCB9IGZyb20gJy4uLy4uL29yZ2FuaXNtcy9BYm1BZ2VudE1vZGFsL0FibUFnZW50TW9kYWwnXG5pbXBvcnQgeyBTRUNUSU9OUyB9IGZyb20gJy4uLy4uLy4uL2NvbnN0YW50cy9jb25maWcnXG5pbXBvcnQgeyBTQ0NBSU1Db250ZW50LCBTQ0NBSU1Db250ZW50V3JhcHBlciwgU0NDQUlNV3JhcHBlciB9IGZyb20gJy4vQ2hhdEFJTW9kYWwuc3R5bGVzJ1xuaW1wb3J0IHsgZ2V0TWFpYUZsb2F0aW5nUGFuZWxXaWR0aFB4LCBNYWlhQ2hhdE1vZGFsTGF5b3V0TW9kZSB9IGZyb20gJy4vbGF5b3V0J1xuaW1wb3J0IHsgRmxvYXRpbmdQYW5lbE1vdGlvbiwgdXNlRmxvYXRpbmdQYW5lbERyYWdUaWx0IH0gZnJvbSAnLi9mbG9hdGluZ1BhbmVsTW90aW9uJ1xuaW1wb3J0IHsgQ2hhdEFpTW9kYWxGb290ZXIgfSBmcm9tICcuL2NvbXBvbmVudHMvQ2hhdEFpTW9kYWxGb290ZXInXG5pbXBvcnQgeyB2YWxpZGF0ZUlzTWFpYSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL3V0aWxzL3ZhbGlkYXRlSXNNYWlhJ1xuaW1wb3J0IHsgaXNNYWlha2VyQWdlbnQgfSBmcm9tICcuLi8uLi8uLi91dGlscy9hZ2VudERpc3BsYXlOYW1lJ1xuaW1wb3J0IHsgQWdlbnQgfSBmcm9tICcuLi8uLi8uLi90eXBlcy9hZ2VudCdcbmltcG9ydCB7IFByb2plY3QgfSBmcm9tICcuLi8uLi8uLi90eXBlcy9Qcm9qZWN0J1xuaW1wb3J0IHsgQ2xpZW50IH0gZnJvbSAnLi4vLi4vLi4vdHlwZXMvQ2xpZW50J1xuaW1wb3J0IHsgVGFzayB9IGZyb20gJy4uLy4uLy4uL3R5cGVzL1Rhc2snXG5pbXBvcnQgeyB1c2VGYXFzU3RvcmUgfSBmcm9tICcuLi8uLi8uLi9zdG9yZS91c2VGYXFzU3RvcmUnXG5pbXBvcnQgeyBmZXRjaE1haWEgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9tYWlhL2NsaWVudCdcbmltcG9ydCB7IG1hcENPUkxhbmcgfSBmcm9tICcuLi8uLi8uLi9sYW5nL3V0aWxzJ1xuaW1wb3J0IHsgRVZFTlRTLCB1c2VFdmVudCB9IGZyb20gJy4uLy4uLy4uL2hvb2tzL3VzZUV2ZW50J1xuXG50eXBlIENoYXRBSU1vZGFsUHJvcHMgPSB7XG4gIGNsYXNzTmFtZT86IHN0cmluZ1xuICBoYW5kbGVDbG9zZT86ICgpID0+IHZvaWRcbiAgcGFyZW50UmVmPzogUmVmT2JqZWN0PEhUTUxEaXZFbGVtZW50PlxufVxuXG5leHBvcnQgY29uc3QgSURfTU9EQUxfQ0hBVF9BR0VOVCA9ICdtb2RhbHMtcG9ydGFsLW1haWEtY2hhdC1hZ2VudCdcblxuY29uc3QgdmFsaWRhdGVBY2Nlc3NCeUZlYXR1cmUgPSAoc2VjdGlvbjogc3RyaW5nKSA9PiB7XG4gIGlmIChzZWN0aW9uID09PSAnaGVhZGVyJyAmJiAod2luZG93Lk1BSUFfQ0hBVF9BSV9GRUFUVVJFX0FDQ0VTU19NVUxUSV9BR0VOVFMgfHwgd2luZG93Lk1BSUFfQ0hBVF9BSV9GRUFUVVJFX0FDQ0VTUykpIHtcbiAgICByZXR1cm4gdHJ1ZVxuICB9XG4gIGlmICgoc2VjdGlvbiA9PT0gJ3Byb2plY3QnIHx8IHNlY3Rpb24gPT09ICdjbGllbnQnIHx8IHNlY3Rpb24gPT09ICd0YXNrJykgJiYgd2luZG93Lk1BSUFfQ0hBVF9BSV9GRUFUVVJFX0FDQ0VTUykge1xuICAgIHJldHVybiB0cnVlXG4gIH1cbiAgcmV0dXJuIGZhbHNlXG59XG5cbmV4cG9ydCBjb25zdCBDaGF0QUlNb2RhbCA9ICh7IGhhbmRsZUNsb3NlIH06IENoYXRBSU1vZGFsUHJvcHMpID0+IHtcbiAgY29uc3QgdXNlciA9IHVzZVVzZXIoKVxuICBjb25zdCB7IGkxOG4gfSA9IHVzZVRyYW5zbGF0aW9uKFtTRUNUSU9OUy5hYm1BZ2VudF0pXG4gIGNvbnN0IGFtcGxpdHVkRXZlbnQgPSB1c2VFdmVudCgpXG5cbiAgY29uc3QgaGFuZGxlQ2xvc2VNb2RhbCA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICB1c2VGYXFzU3RvcmUuZ2V0U3RhdGUoKS5jbGVhckZhcXMoKVxuICAgIGhhbmRsZUNsb3NlPy4oKVxuICB9LCBbaGFuZGxlQ2xvc2VdKVxuICBjb25zdCBbdXNlckluaXRpYWxNZXNzYWdlLCBzZXRVc2VySW5pdGlhbE1lc3NhZ2VdID0gdXNlU3RhdGU8e1xuICAgIG1lc3NhZ2U6IHN0cmluZ1xuICAgIGF0dGFjaG1lbnRzOiBBdHRhY2htZW50RmlsZVtdXG4gICAgZmFxSWQ/OiBzdHJpbmdcbiAgICBhZ2VudFN1Z2dlc3Rpb25JZD86IHN0cmluZ1xuICAgIG1lbnRpb25zPzogQ29udGV4dE1lbnRpb25bXVxuICAgIGZ1YUlkPzogc3RyaW5nXG4gICAgc2NJZD86IHN0cmluZ1xuICAgIGNvbnRleHREYXRhPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj5cbiAgfT4oe1xuICAgIG1lc3NhZ2U6ICcnLFxuICAgIGF0dGFjaG1lbnRzOiBbXSxcbiAgfSlcbiAgY29uc3QgW2luaXRpYWxDaGF0SWQsIHNldEluaXRpYWxDaGF0SWRdID0gdXNlU3RhdGU8c3RyaW5nIHwgbnVsbD4obnVsbClcbiAgY29uc3QgW25ld0NoYXRLZXksIHNldE5ld0NoYXRLZXldID0gdXNlU3RhdGUoMClcbiAgY29uc3QgW3NlbmRNZXNzYWdlRnVuY3Rpb24sIHNldFNlbmRNZXNzYWdlRnVuY3Rpb25dID0gdXNlU3RhdGU8XG4gICAgfCAoKFxuICAgICAgICBtZXNzYWdlOiBzdHJpbmcsXG4gICAgICAgIGF0dGFjaG1lbnRzPzogQXR0YWNobWVudEZpbGVbXSxcbiAgICAgICAgZmFxSWQ/OiBzdHJpbmcsXG4gICAgICAgIGFnZW50U3VnZ2VzdGlvbklkPzogc3RyaW5nLFxuICAgICAgICBtZW50aW9ucz86IENvbnRleHRNZW50aW9uW10sXG4gICAgICAgIGZ1YUlkPzogc3RyaW5nLFxuICAgICAgICBzY0lkPzogc3RyaW5nXG4gICAgICApID0+IHZvaWQpXG4gICAgfCBudWxsXG4gID4obnVsbClcbiAgY29uc3QgW3N0b3BHZW5lcmF0aW9uRnVuY3Rpb24sIHNldFN0b3BHZW5lcmF0aW9uRnVuY3Rpb25dID0gdXNlU3RhdGU8KCgpID0+IHZvaWQpIHwgbnVsbD4obnVsbClcbiAgY29uc3QgW2lzU3RyZWFtaW5nLCBzZXRJc1N0cmVhbWluZ10gPSB1c2VTdGF0ZShmYWxzZSlcbiAgY29uc3QgW2lzV3JpdGluZywgc2V0SXNXcml0aW5nXSA9IHVzZVN0YXRlKGZhbHNlKVxuXG4gIGNvbnN0IFtyZWZldGNoQ2hhdHMsIHNldFJlZmV0Y2hDaGF0c10gPSB1c2VTdGF0ZShmYWxzZSlcbiAgY29uc3QgW2N1cnJlbnRPcHRpb24sIHNldEN1cnJlbnRPcHRpb25dID0gdXNlU3RhdGUob3B0aW9ucy5ob21lKVxuICBjb25zdCBbaGFzRXJyb3IsIHNldEhhc0Vycm9yXSA9IHVzZVN0YXRlKGZhbHNlKVxuICBjb25zdCBoYW5kbGVycyA9IHVzZU1lbW8oKCkgPT4gYnVpbGRIYW5kbGVycyhzZXRDdXJyZW50T3B0aW9uLCBzZXRIYXNFcnJvciksIFtdKVxuICBjb25zdCBbc2lkZWJhckhhc0Vycm9yLCBzZXRTaWRlYmFySGFzRXJyb3JdID0gdXNlU3RhdGUoZmFsc2UpXG4gIGNvbnN0IHJlc2V0U2VsZWN0ZWRDaGF0UmVmID0gdXNlUmVmPCgoKSA9PiB2b2lkKSB8IG51bGw+KG51bGwpXG4gIGNvbnN0IGxhbmcgPSBpMThuLmxhbmd1YWdlID09PSAnYnInID8gJ3B0LWJyJyA6IGkxOG4ubGFuZ3VhZ2VcblxuICBtb21lbnQubG9jYWxlKGxhbmcpXG5cbiAgY29uc3Qge1xuICAgIHNlbGVjdEFnZW50LFxuICAgIHNlY3Rpb24sXG4gICAgYWdlbnQsXG4gICAgcHJvamVjdCxcbiAgICBjbGllbnQsXG4gICAgdG9nZ2xlV2ViU2VhcmNoLFxuICAgIGlzV2ViU2VhcmNoQWN0aXZlLFxuICAgIHNldENoaXBzUHJvamVjdCxcbiAgICBzZXRDbGllbnQsXG4gICAgc2V0UHJvamVjdCxcbiAgICBiYW5uZXJFbnRyeUZhcSxcbiAgICBzZXRUYXNrLFxuICB9ID0gdXNlR2xvYmFsQ29udGV4dCgpXG5cbiAgLy8gWi1pbmRleCBwYXJhIHRvb2x0aXBzIGVuIHNlY3Rpb24gJ3Rhc2snIChtb2RhbCBmbG90YW50ZSBlbGV2YWRvKVxuICBjb25zdCB0b29sdGlwWkluZGV4ID0gdXNlTWFpYVRhc2tQYW5lbFpJbmRleCgxNTAwLCAnb3ZlcmxheScpXG5cbiAgY29uc3Qge1xuICAgIGFnZW50cyxcbiAgICBsb2FkaW5nLFxuICAgIGxvYWRpbmdNb3JlLFxuICAgIGVycm9yOiBhZ2VudEVycm9yLFxuICAgIGhhbmRsZUdldEFnZW50cyxcbiAgICBsb2FkTW9yZUFnZW50cyxcbiAgICBzZWFyY2hDdXN0b21BZ2VudHMsXG4gICAgc2VhcmNoTG9hZGluZyxcbiAgICBhZGRBZ2VudCxcbiAgICByZW1vdmVBZ2VudCxcbiAgICB1cGRhdGVBZ2VudCxcbiAgICB1cGRhdGVBZ2VudEZhdm9yaXRlLFxuICAgIHNlbGVjdEZpcnN0QWdlbnQsXG4gICAgc29ydEFnZW50c0xpc3QsXG4gIH0gPSB1c2VHZXRBZ2VudHMoeyBzZWxlY3RBZ2VudCwgc2VjdGlvbiwgYWdlbnQsIGhhbmRsZUdvSG9tZTogaGFuZGxlcnMuaG9tZSB9KVxuXG4gIGNvbnN0IGlzTUFJQSA9IHZhbGlkYXRlSXNNYWlhKGFnZW50IGFzIEFnZW50KVxuXG4gIGNvbnN0IHVzZXJIYXNQZXJtaXNzaW9ucyA9XG4gICAgKHVzZXI/LnBlcm1pc3Npb25zPy5haV9hZ2VudHM/LmNyZWF0ZSB8fFxuICAgICAgdXNlcj8ucGVybWlzc2lvbnM/LmFpX2FnZW50cz8uZWRpdCB8fFxuICAgICAgdXNlcj8ucGVybWlzc2lvbnM/LmFpX2FnZW50cz8uZGVsZXRlKSAmJlxuICAgIHdpbmRvdy5NQUlBX0NIQVRfQUlfRkVBVFVSRV9BQ0NFU1NfTVVMVElfQUdFTlRTXG5cbiAgY29uc3QgY29tcHV0ZWRDdXJyZW50T3B0aW9uID0gdXNlTWVtbygoKSA9PiB7XG4gICAgY29uc3QgaXNHbG9iYWxTcGVjaWFsaXN0ID0gaXNNQUlBICYmIGFnZW50Py5lbnRpdHkgPT09ICdnbG9iYWwnXG4gICAgY29uc3QgaXNQcm9qZWN0U3BlY2lhbGlzdCA9IGlzTUFJQSAmJiAoYWdlbnQ/LmVudGl0eSA9PT0gJ3Byb2plY3QnIHx8IGFnZW50Py5lbnRpdHkgPT0gbnVsbClcbiAgICBjb25zdCBpc0NsaWVudFNwZWNpYWxpc3QgPSBpc01BSUEgJiYgYWdlbnQ/LmVudGl0eSA9PT0gJ2NsaWVudCdcbiAgICBjb25zdCBpc01haWFrZXIgPSBpc01BSUEgJiYgaXNNYWlha2VyQWdlbnQoYWdlbnQpXG5cbiAgICBpZiAoY3VycmVudE9wdGlvbiA9PT0gb3B0aW9ucy5teUFnZW50cyAmJiB3aW5kb3cuTUFJQV9DSEFUX0FJX0ZFQVRVUkVfQUNDRVNTX01VTFRJX0FHRU5UUykge1xuICAgICAgcmV0dXJuIG9wdGlvbnMubXlBZ2VudHNcbiAgICB9XG5cbiAgICBpZiAoaXNHbG9iYWxTcGVjaWFsaXN0ICYmICFpc01haWFrZXIgJiYgY3VycmVudE9wdGlvbiA9PT0gb3B0aW9ucy5ob21lKSB7XG4gICAgICByZXR1cm4gb3B0aW9ucy5jaGF0XG4gICAgfVxuXG4gICAgY29uc3Qgc2hvdWxkU2hvd1Byb2plY3RTZWxlY3RvciA9IGN1cnJlbnRPcHRpb24gIT09IG9wdGlvbnMuY2hhdCAmJiBpc1Byb2plY3RTcGVjaWFsaXN0ICYmICFwcm9qZWN0XG4gICAgY29uc3Qgc2hvdWxkU2hvd0NsaWVudFNlbGVjdG9yID0gY3VycmVudE9wdGlvbiAhPT0gb3B0aW9ucy5jaGF0ICYmIGlzQ2xpZW50U3BlY2lhbGlzdCAmJiAhY2xpZW50XG5cbiAgICBpZiAoc2hvdWxkU2hvd1Byb2plY3RTZWxlY3Rvcikge1xuICAgICAgcmV0dXJuIG9wdGlvbnMucHJvamVjdFNlbGVjdG9yXG4gICAgfVxuICAgIGlmIChzaG91bGRTaG93Q2xpZW50U2VsZWN0b3IpIHtcbiAgICAgIHJldHVybiBvcHRpb25zLmNsaWVudFNlbGVjdG9yXG4gICAgfVxuICAgIHJldHVybiBjdXJyZW50T3B0aW9uXG4gIH0sIFtjdXJyZW50T3B0aW9uLCBwcm9qZWN0LCBjbGllbnQsIGlzTUFJQSwgYWdlbnQ/LmVudGl0eSwgYWdlbnQ/Lm5hbWVdKVxuXG4gIGNvbnN0IGlzTWFpYWtlckFnZW50U2VsZWN0ZWQgPSB1c2VNZW1vKFxuICAgICgpID0+IGlzTUFJQSAmJiBhZ2VudD8udHlwZSA9PT0gJ2Nsb25lJyAmJiBpc01haWFrZXJBZ2VudChhZ2VudCksXG4gICAgW2lzTUFJQSwgYWdlbnQ/LmVudGl0eSwgYWdlbnQ/LnR5cGUsIGFnZW50Py5uYW1lXVxuICApXG5cbiAgY29uc3Qgc2lkZWJhckFnZW50c05hdkFjdGl2ZSA9IHVzZU1lbW8oKCk6ICdtYWlha2VyJyB8ICdteUFnZW50cycgfCBudWxsID0+IHtcbiAgICBpZiAoY29tcHV0ZWRDdXJyZW50T3B0aW9uID09PSBvcHRpb25zLm15QWdlbnRzKSByZXR1cm4gJ215QWdlbnRzJ1xuICAgIGlmIChpc01haWFrZXJBZ2VudFNlbGVjdGVkKSByZXR1cm4gJ21haWFrZXInXG4gICAgcmV0dXJuIG51bGxcbiAgfSwgW2NvbXB1dGVkQ3VycmVudE9wdGlvbiwgaXNNYWlha2VyQWdlbnRTZWxlY3RlZF0pXG5cbiAgLyogUmVhY3RpdmFyIGNvbiBsYSBmaWxhIOKAnE1pcyBhZ2VudGVz4oCdIGVuIFNpZGViYXI6IG15QWdlbnRzQ291bnQgcHJvcFxuICBjb25zdCBzaWRlYmFyTXlBZ2VudHNDb3VudCA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIHJldHVybiBhZ2VudHMuZGF0YS5maWx0ZXIoXG4gICAgICBhID0+ICEoYS50eXBlID09PSAnY2xvbmUnICYmIGlzTWFpYWtlckFnZW50KGEpKVxuICAgIClcbiAgICAgIC5sZW5ndGhcbiAgfSwgW2FnZW50cy5kYXRhXSlcbiAgKi9cblxuICBjb25zdCBhZ2VudHNGZXRjaGVkUmVmID0gdXNlUmVmKGZhbHNlKVxuXG4gIGNvbnN0IHNlbGVjdG9yID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgIyR7SURfTU9EQUxfQ0hBVF9BR0VOVH1gKVxuXG4gIC8vIFRhc2sgcGFuZWwgeSBiYW5uZXIgZGUgcHJveWVjdG8gYWJyZW4gZW4gZmxvdGFudGUgcG9yIGRlZmF1bHQgKG5vIHRhcGFyIGVsIGNvbnRleHRvIGRldHLDoXMpLlxuICAvLyBFbCB1c3VhcmlvIHB1ZWRlIGNhbWJpYXIgYSBzaWRlYmFyL2Z1bGxzY3JlZW4gZGVzZGUgbG9zIGNvbnRyb2xlcyBkZWwgbW9kYWwuXG4gIGNvbnN0IFtsYXlvdXRNb2RlLCBzZXRMYXlvdXRNb2RlXSA9IHVzZVN0YXRlPE1haWFDaGF0TW9kYWxMYXlvdXRNb2RlPigoKSA9PiB7XG4gICAgaWYgKHNlY3Rpb24gPT09ICd0YXNrJykgcmV0dXJuICdmbG9hdGluZydcbiAgICBpZiAoYmFubmVyRW50cnlGYXE/LmZhcVRpdGxlPy50cmltKCkpIHJldHVybiAnZmxvYXRpbmcnXG4gICAgcmV0dXJuICdzaWRlYmFyJ1xuICB9KVxuICBjb25zdCBleHBhbmRlZCA9IGxheW91dE1vZGUgPT09ICdmdWxsc2NyZWVuJ1xuICBjb25zdCBpc0Zsb2F0aW5nID0gbGF5b3V0TW9kZSA9PT0gJ2Zsb2F0aW5nJ1xuICBjb25zdCBjb250ZW50V3JhcHBlclJlZiA9IHVzZVJlZjxIVE1MRGl2RWxlbWVudD4obnVsbClcbiAgY29uc3QgW2RyYWdQb3NpdGlvbiwgc2V0RHJhZ1Bvc2l0aW9uXSA9IHVzZVN0YXRlPHsgeDogbnVtYmVyOyB5OiBudW1iZXIgfSB8IG51bGw+KG51bGwpXG4gIGNvbnN0IHsgdGlsdE1vdGlvbiwgc3RhcnRQb2ludGVyVHJhY2tpbmcsIHNhbXBsZVBvaW50ZXJNb3ZlLCBlbmRQb2ludGVyVHJhY2tpbmcgfSA9XG4gICAgdXNlRmxvYXRpbmdQYW5lbERyYWdUaWx0KGlzRmxvYXRpbmcpXG4gIGNvbnN0IGRyYWdTdGF0ZVJlZiA9IHVzZVJlZjx7XG4gICAgcG9pbnRlcklkOiBudW1iZXJcbiAgICBvZmZzZXRYOiBudW1iZXJcbiAgICBvZmZzZXRZOiBudW1iZXJcbiAgfSB8IG51bGw+KG51bGwpXG5cbiAgY29uc3QgY2xhbXBEcmFnUG9zaXRpb24gPSB1c2VDYWxsYmFjaygoeDogbnVtYmVyLCB5OiBudW1iZXIpID0+IHtcbiAgICBjb25zdCBjb250ZW50V3JhcHBlciA9IGNvbnRlbnRXcmFwcGVyUmVmLmN1cnJlbnRcbiAgICBpZiAoIWNvbnRlbnRXcmFwcGVyKSB7XG4gICAgICByZXR1cm4geyB4LCB5IH1cbiAgICB9XG5cbiAgICBjb25zdCB7IHdpZHRoLCBoZWlnaHQgfSA9IGNvbnRlbnRXcmFwcGVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpXG4gICAgY29uc3Qgb2Zmc2V0ID0gMTZcbiAgICBjb25zdCBtYXhYID0gTWF0aC5tYXgob2Zmc2V0LCB3aW5kb3cuaW5uZXJXaWR0aCAtIHdpZHRoIC0gb2Zmc2V0KVxuICAgIGNvbnN0IG1heFkgPSBNYXRoLm1heChvZmZzZXQsIHdpbmRvdy5pbm5lckhlaWdodCAtIGhlaWdodCAtIG9mZnNldClcblxuICAgIHJldHVybiB7XG4gICAgICB4OiBNYXRoLm1pbihNYXRoLm1heCh4LCBvZmZzZXQpLCBtYXhYKSxcbiAgICAgIHk6IE1hdGgubWluKE1hdGgubWF4KHksIG9mZnNldCksIG1heFkpLFxuICAgIH1cbiAgfSwgW10pXG5cbiAgdXNlTGF5b3V0RWZmZWN0KCgpID0+IHtcbiAgICBpZiAobGF5b3V0TW9kZSAhPT0gJ2Zsb2F0aW5nJykge1xuICAgICAgc2V0RHJhZ1Bvc2l0aW9uKG51bGwpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBzZXREcmFnUG9zaXRpb24ocHJldiA9PiB7XG4gICAgICBpZiAocHJldikge1xuICAgICAgICByZXR1cm4gY2xhbXBEcmFnUG9zaXRpb24ocHJldi54LCBwcmV2LnkpXG4gICAgICB9XG4gICAgICBjb25zdCBwYWQgPSAxNlxuICAgICAgY29uc3QgeCA9IHdpbmRvdy5pbm5lcldpZHRoIC0gZ2V0TWFpYUZsb2F0aW5nUGFuZWxXaWR0aFB4KCkgLSBwYWRcbiAgICAgIHJldHVybiBjbGFtcERyYWdQb3NpdGlvbih4LCBwYWQpXG4gICAgfSlcbiAgfSwgW2xheW91dE1vZGUsIGNsYW1wRHJhZ1Bvc2l0aW9uXSlcblxuICBjb25zdCBoYW5kbGVEcmFnRW5kID0gdXNlQ2FsbGJhY2soXG4gICAgKGV2ZW50OiBSZWFjdFBvaW50ZXJFdmVudDxIVE1MRGl2RWxlbWVudD4pID0+IHtcbiAgICAgIGVuZFBvaW50ZXJUcmFja2luZygpXG4gICAgICBpZiAoZHJhZ1N0YXRlUmVmLmN1cnJlbnQ/LnBvaW50ZXJJZCAhPT0gZXZlbnQucG9pbnRlcklkKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBkcmFnU3RhdGVSZWYuY3VycmVudCA9IG51bGxcbiAgICAgIGRvY3VtZW50LmJvZHkuc3R5bGUudXNlclNlbGVjdCA9ICcnXG4gICAgICBkb2N1bWVudC5ib2R5LnN0eWxlLmN1cnNvciA9ICcnXG4gICAgfSxcbiAgICBbZW5kUG9pbnRlclRyYWNraW5nXVxuICApXG5cbiAgY29uc3QgaGFuZGxlRHJhZ01vdmUgPSB1c2VDYWxsYmFjayhcbiAgICAoZXZlbnQ6IFJlYWN0UG9pbnRlckV2ZW50PEhUTUxEaXZFbGVtZW50PikgPT4ge1xuICAgICAgY29uc3QgZHJhZ1N0YXRlID0gZHJhZ1N0YXRlUmVmLmN1cnJlbnRcbiAgICAgIGlmICghZHJhZ1N0YXRlIHx8IGRyYWdTdGF0ZS5wb2ludGVySWQgIT09IGV2ZW50LnBvaW50ZXJJZCkge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgc2FtcGxlUG9pbnRlck1vdmUoZXZlbnQuY2xpZW50WCwgZXZlbnQuY2xpZW50WSlcblxuICAgICAgY29uc3QgbmV4dFBvc2l0aW9uID0gY2xhbXBEcmFnUG9zaXRpb24oZXZlbnQuY2xpZW50WCAtIGRyYWdTdGF0ZS5vZmZzZXRYLCBldmVudC5jbGllbnRZIC0gZHJhZ1N0YXRlLm9mZnNldFkpXG5cbiAgICAgIHNldERyYWdQb3NpdGlvbihwcmV2ID0+IHtcbiAgICAgICAgaWYgKHByZXYgJiYgcHJldi54ID09PSBuZXh0UG9zaXRpb24ueCAmJiBwcmV2LnkgPT09IG5leHRQb3NpdGlvbi55KSB7XG4gICAgICAgICAgcmV0dXJuIHByZXZcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV4dFBvc2l0aW9uXG4gICAgICB9KVxuICAgIH0sXG4gICAgW2NsYW1wRHJhZ1Bvc2l0aW9uLCBzYW1wbGVQb2ludGVyTW92ZV1cbiAgKVxuXG4gIGNvbnN0IHJlc29sdmVkRHJhZ1Bvc2l0aW9uID0gdXNlTWVtbygoKSA9PiB7XG4gICAgaWYgKGxheW91dE1vZGUgIT09ICdmbG9hdGluZycpIHtcbiAgICAgIHJldHVybiBkcmFnUG9zaXRpb25cbiAgICB9XG4gICAgaWYgKGRyYWdQb3NpdGlvbikge1xuICAgICAgcmV0dXJuIGRyYWdQb3NpdGlvblxuICAgIH1cbiAgICBjb25zdCBwYWQgPSAxNlxuICAgIGNvbnN0IHggPSB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyA/IHdpbmRvdy5pbm5lcldpZHRoIC0gZ2V0TWFpYUZsb2F0aW5nUGFuZWxXaWR0aFB4KCkgLSBwYWQgOiBwYWRcbiAgICByZXR1cm4gY2xhbXBEcmFnUG9zaXRpb24oeCwgcGFkKVxuICB9LCBbbGF5b3V0TW9kZSwgZHJhZ1Bvc2l0aW9uLCBjbGFtcERyYWdQb3NpdGlvbl0pXG5cbiAgY29uc3QgaGFuZGxlRHJhZ1N0YXJ0ID0gdXNlQ2FsbGJhY2soXG4gICAgKGV2ZW50OiBSZWFjdFBvaW50ZXJFdmVudDxIVE1MRGl2RWxlbWVudD4pID0+IHtcbiAgICAgIGlmICghaXNGbG9hdGluZyB8fCBldmVudC5idXR0b24gIT09IDApIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHRhcmdldCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudFxuICAgICAgaWYgKHRhcmdldC5jbG9zZXN0KCdidXR0b24sIGEsIGlucHV0LCB0ZXh0YXJlYSwgc2VsZWN0LCBbcm9sZT1cImJ1dHRvblwiXSwgW2RhdGEtbm8tZHJhZz1cInRydWVcIl0nKSkge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgY29uc3QgY29udGVudFdyYXBwZXIgPSBjb250ZW50V3JhcHBlclJlZi5jdXJyZW50XG4gICAgICBpZiAoIWNvbnRlbnRXcmFwcGVyKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBjb25zdCByZWN0ID0gY29udGVudFdyYXBwZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KClcbiAgICAgIGNvbnN0IGluaXRpYWxQb3NpdGlvbiA9IHJlc29sdmVkRHJhZ1Bvc2l0aW9uID8/IGNsYW1wRHJhZ1Bvc2l0aW9uKHJlY3QubGVmdCwgcmVjdC50b3ApXG4gICAgICBjb25zdCBwb2ludGVyT2Zmc2V0WCA9IGV2ZW50LmNsaWVudFggLSBpbml0aWFsUG9zaXRpb24ueFxuICAgICAgY29uc3QgcG9pbnRlck9mZnNldFkgPSBldmVudC5jbGllbnRZIC0gaW5pdGlhbFBvc2l0aW9uLnlcblxuICAgICAgc2V0RHJhZ1Bvc2l0aW9uKGluaXRpYWxQb3NpdGlvbilcbiAgICAgIGRyYWdTdGF0ZVJlZi5jdXJyZW50ID0ge1xuICAgICAgICBwb2ludGVySWQ6IGV2ZW50LnBvaW50ZXJJZCxcbiAgICAgICAgb2Zmc2V0WDogcG9pbnRlck9mZnNldFgsXG4gICAgICAgIG9mZnNldFk6IHBvaW50ZXJPZmZzZXRZLFxuICAgICAgfVxuXG4gICAgICBldmVudC5jdXJyZW50VGFyZ2V0LnNldFBvaW50ZXJDYXB0dXJlKGV2ZW50LnBvaW50ZXJJZClcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KClcblxuICAgICAgZG9jdW1lbnQuYm9keS5zdHlsZS51c2VyU2VsZWN0ID0gJ25vbmUnXG4gICAgICBkb2N1bWVudC5ib2R5LnN0eWxlLmN1cnNvciA9ICdncmFiYmluZydcbiAgICAgIGFtcGxpdHVkRXZlbnQoRVZFTlRTLmFpQ2hhdERyYWdnYWJsZSlcbiAgICAgIHN0YXJ0UG9pbnRlclRyYWNraW5nKGV2ZW50LmNsaWVudFgsIGV2ZW50LmNsaWVudFkpXG4gICAgfSxcbiAgICBbY2xhbXBEcmFnUG9zaXRpb24sIGlzRmxvYXRpbmcsIHJlc29sdmVkRHJhZ1Bvc2l0aW9uLCBzdGFydFBvaW50ZXJUcmFja2luZ11cbiAgKVxuXG4gIGNvbnN0IHN0YXJ0Q2hhdCA9IHVzZUNhbGxiYWNrKFxuICAgIChcbiAgICAgIG1lc3NhZ2U/OiBzdHJpbmcsXG4gICAgICBhdHRhY2htZW50cz86IEF0dGFjaG1lbnRGaWxlW10sXG4gICAgICBmYXFJZD86IHN0cmluZyxcbiAgICAgIGFnZW50U3VnZ2VzdGlvbklkPzogc3RyaW5nLFxuICAgICAgbWVudGlvbnM/OiBDb250ZXh0TWVudGlvbltdLFxuICAgICAgZnVhSWQ/OiBzdHJpbmcsXG4gICAgICBzY0lkPzogc3RyaW5nLFxuICAgICAgY29udGV4dERhdGE/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxuICAgICkgPT4ge1xuICAgICAgaWYgKHNpZGViYXJIYXNFcnJvcikge1xuICAgICAgICBzZXRTaWRlYmFySGFzRXJyb3IoZmFsc2UpXG4gICAgICB9XG4gICAgICBzZXRJbml0aWFsQ2hhdElkKG51bGwpXG4gICAgICBzZXROZXdDaGF0S2V5KHByZXYgPT4gcHJldiArIDEpXG4gICAgICBzZXRVc2VySW5pdGlhbE1lc3NhZ2Uoe1xuICAgICAgICBtZXNzYWdlOiBtZXNzYWdlIHx8ICcnLFxuICAgICAgICBhdHRhY2htZW50czogYXR0YWNobWVudHMgfHwgW10sXG4gICAgICAgIC4uLihmYXFJZCA/IHsgZmFxSWQgfSA6IHt9KSxcbiAgICAgICAgLi4uKGFnZW50U3VnZ2VzdGlvbklkID8geyBhZ2VudFN1Z2dlc3Rpb25JZCB9IDoge30pLFxuICAgICAgICAuLi4obWVudGlvbnMgJiYgbWVudGlvbnMubGVuZ3RoID4gMCA/IHsgbWVudGlvbnMgfSA6IHt9KSxcbiAgICAgICAgLi4uKGZ1YUlkID8geyBmdWFJZCB9IDoge30pLFxuICAgICAgICAuLi4oc2NJZCA/IHsgc2NJZCB9IDoge30pLFxuICAgICAgICAuLi4oY29udGV4dERhdGEgPyB7IGNvbnRleHREYXRhIH0gOiB7fSksXG4gICAgICB9KVxuICAgICAgaGFuZGxlcnMuY2hhdCgpXG4gICAgfSxcbiAgICBbaGFuZGxlcnMsIHNpZGViYXJIYXNFcnJvcl1cbiAgKVxuXG4gIGNvbnN0IGJhbm5lckZhcUF1dG9TZW50UmVmID0gdXNlUmVmKGZhbHNlKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgZW50aXR5UmVhZHkgPSBzZWN0aW9uID09PSAncHJvamVjdCcgPyBCb29sZWFuKHByb2plY3Q/LmlkKSA6IHNlY3Rpb24gPT09ICdjbGllbnQnID8gQm9vbGVhbihjbGllbnQ/LmlkKSA6IHRydWVcblxuICAgIGlmICghYmFubmVyRW50cnlGYXE/LmZhcVRpdGxlPy50cmltKCkgfHwgYmFubmVyRmFxQXV0b1NlbnRSZWYuY3VycmVudCB8fCBsb2FkaW5nIHx8ICFhZ2VudD8uaWQgfHwgIWVudGl0eVJlYWR5KSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBiYW5uZXJGYXFBdXRvU2VudFJlZi5jdXJyZW50ID0gdHJ1ZVxuICAgIHN0YXJ0Q2hhdChcbiAgICAgIGJhbm5lckVudHJ5RmFxLmZhcVRpdGxlLFxuICAgICAgW10sXG4gICAgICBiYW5uZXJFbnRyeUZhcS5mYXFJZCxcbiAgICAgIHVuZGVmaW5lZCxcbiAgICAgIHVuZGVmaW5lZCxcbiAgICAgIHVuZGVmaW5lZCxcbiAgICAgIHVuZGVmaW5lZCxcbiAgICAgIGJhbm5lckVudHJ5RmFxLmNvbnRleHREYXRhXG4gICAgKVxuICB9LCBbXG4gICAgYmFubmVyRW50cnlGYXE/LmZhcUlkLFxuICAgIGJhbm5lckVudHJ5RmFxPy5mYXFUaXRsZSxcbiAgICBiYW5uZXJFbnRyeUZhcT8uY29udGV4dERhdGEsXG4gICAgbG9hZGluZyxcbiAgICBhZ2VudD8uaWQsXG4gICAgYWdlbnQ/LmVudGl0eSxcbiAgICBwcm9qZWN0Py5pZCxcbiAgICBjbGllbnQ/LmlkLFxuICAgIHNlY3Rpb24sXG4gICAgc3RhcnRDaGF0LFxuICBdKVxuXG4gIGNvbnN0IGdvVG9DaGF0ID0gdXNlQ2FsbGJhY2soXG4gICAgKGNoYXQ6IGFueSkgPT4ge1xuICAgICAgc2V0VXNlckluaXRpYWxNZXNzYWdlKHsgbWVzc2FnZTogJycsIGF0dGFjaG1lbnRzOiBbXSB9KVxuICAgICAgc2V0SW5pdGlhbENoYXRJZChjaGF0LnNlc3Npb25FeHRlcm5hbElkKVxuICAgICAgY29uc3Qgc2VsZWN0ZWRBZ2VudCA9IGFnZW50cy5kYXRhLmZpbmQoYWdlbnRJdGVtID0+IGFnZW50SXRlbS5pZCA9PT0gY2hhdC5hZ2VudElkKVxuICAgICAgaWYgKHNlbGVjdGVkQWdlbnQpIHtcbiAgICAgICAgc2VsZWN0QWdlbnQoc2VsZWN0ZWRBZ2VudClcbiAgICAgIH1cbiAgICAgIC8vIERpc3BhdGNoIGV2ZW50IHRvIGNsZWFyIHRoZSBpbnB1dCB0ZXh0YXJlYVxuICAgICAgZG9jdW1lbnQuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoJ2NoYXQtc2Vzc2lvbi1jaGFuZ2VkJykpXG4gICAgICBoYW5kbGVycy5jaGF0KClcbiAgICB9LFxuICAgIFtoYW5kbGVycywgYWdlbnRzLCBzZWxlY3RBZ2VudF1cbiAgKVxuXG4gIGNvbnN0IGhhbmRsZVNlbmRNZXNzYWdlUmVhZHkgPSB1c2VDYWxsYmFjayhcbiAgICAoXG4gICAgICBzZW5kTWVzc2FnZTogKFxuICAgICAgICBtZXNzYWdlOiBzdHJpbmcsXG4gICAgICAgIGF0dGFjaG1lbnRzPzogQXR0YWNobWVudEZpbGVbXSxcbiAgICAgICAgZmFxSWQ/OiBzdHJpbmcsXG4gICAgICAgIGFnZW50U3VnZ2VzdGlvbklkPzogc3RyaW5nLFxuICAgICAgICBtZW50aW9ucz86IENvbnRleHRNZW50aW9uW10sXG4gICAgICAgIGZ1YUlkPzogc3RyaW5nLFxuICAgICAgICBzY0lkPzogc3RyaW5nXG4gICAgICApID0+IHZvaWQsXG4gICAgICBzdG9wR2VuZXJhdGlvbjogKCkgPT4gdm9pZCxcbiAgICAgIHN0cmVhbWluZzogYm9vbGVhbixcbiAgICAgIHdyaXRpbmc6IGJvb2xlYW5cbiAgICApID0+IHtcbiAgICAgIHNldFNlbmRNZXNzYWdlRnVuY3Rpb24oKCkgPT4gc2VuZE1lc3NhZ2UpXG4gICAgICBzZXRTdG9wR2VuZXJhdGlvbkZ1bmN0aW9uKCgpID0+IHN0b3BHZW5lcmF0aW9uKVxuICAgICAgc2V0SXNTdHJlYW1pbmcoc3RyZWFtaW5nKVxuICAgICAgc2V0SXNXcml0aW5nKHdyaXRpbmcpXG4gICAgfSxcbiAgICBbXVxuICApXG5cbiAgY29uc3QgaGFuZGxlU2VuZE1lc3NhZ2UgPSB1c2VDYWxsYmFjayhcbiAgICAoXG4gICAgICBtZXNzYWdlOiBzdHJpbmcsXG4gICAgICBhdHRhY2htZW50cz86IEF0dGFjaG1lbnRGaWxlW10sXG4gICAgICBmYXFJZD86IHN0cmluZyxcbiAgICAgIGFnZW50U3VnZ2VzdGlvbklkPzogc3RyaW5nLFxuICAgICAgbWVudGlvbnM/OiBDb250ZXh0TWVudGlvbltdLFxuICAgICAgZnVhSWQ/OiBzdHJpbmcsXG4gICAgICBzY0lkPzogc3RyaW5nXG4gICAgKSA9PiB7XG4gICAgICBpZiAoc2lkZWJhckhhc0Vycm9yKSB7XG4gICAgICAgIHNldFNpZGViYXJIYXNFcnJvcihmYWxzZSlcbiAgICAgIH1cbiAgICAgIGlmIChzZW5kTWVzc2FnZUZ1bmN0aW9uICYmIGNvbXB1dGVkQ3VycmVudE9wdGlvbiA9PT0gb3B0aW9ucy5jaGF0KSB7XG4gICAgICAgIHNlbmRNZXNzYWdlRnVuY3Rpb24obWVzc2FnZSwgYXR0YWNobWVudHMsIGZhcUlkLCBhZ2VudFN1Z2dlc3Rpb25JZCwgbWVudGlvbnMsIGZ1YUlkLCBzY0lkKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3RhcnRDaGF0KG1lc3NhZ2UsIGF0dGFjaG1lbnRzLCBmYXFJZCwgYWdlbnRTdWdnZXN0aW9uSWQsIG1lbnRpb25zLCBmdWFJZCwgc2NJZClcbiAgICAgIH1cbiAgICB9LFxuICAgIFtzZW5kTWVzc2FnZUZ1bmN0aW9uLCBzdGFydENoYXQsIGNvbXB1dGVkQ3VycmVudE9wdGlvbiwgc2lkZWJhckhhc0Vycm9yXVxuICApXG5cbiAgY29uc3QgaGFuZGxlR29Ib21lID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIC8vIFNpIGVzdGFtb3MgZW4gdW5hIGNvbnZlcnNhY2nDs24geSB2YW1vcyBhIGhvbWUsIHJlc2V0ZWFyIGluaXRpYWxDaGF0SWQgeSBpbmNyZW1lbnRhciBuZXdDaGF0S2V5XG4gICAgaWYgKGN1cnJlbnRPcHRpb24gPT09IG9wdGlvbnMuY2hhdCkge1xuICAgICAgc3RvcEdlbmVyYXRpb25GdW5jdGlvbj8uKClcbiAgICAgIHNldEluaXRpYWxDaGF0SWQobnVsbClcbiAgICAgIHNldE5ld0NoYXRLZXkocHJldiA9PiBwcmV2ICsgMSlcbiAgICAgIHNldElzV3JpdGluZyhmYWxzZSlcbiAgICAgIC8vIE5vIGJvcnJhciBlbCBjbGllbnRlIHNpIGVzIGFnZW50ZSBkZSBjbGllbnRlcyAoaWd1YWwgcXVlIGVsIHByb3llY3RvIHNlIG1hbnRpZW5lKVxuICAgICAgaWYgKGFnZW50Py5lbnRpdHkgIT09ICdjbGllbnQnKSB7XG4gICAgICAgIHNldENsaWVudD8uKG51bGwpXG4gICAgICB9XG4gICAgICBpZiAoc2VjdGlvbiAhPT0gJ3Rhc2snKSB7XG4gICAgICAgIHNldFRhc2s/LihudWxsKVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAoXG4gICAgICAoIWFnZW50IHx8IGFnZW50Py5pc19kZWxldGVkIHx8IGFnZW50Py5oYXNfbm90X3Blcm1pc3Npb25zIHx8IGFnZW50Py5oYXNfbm90X2FjY2VzcyB8fCBhZ2VudD8ucHJvamVjdF9kZWxldGVkKSAmJlxuICAgICAgYWdlbnRzLmRhdGEubGVuZ3RoID4gMFxuICAgICkge1xuICAgICAgc2VsZWN0QWdlbnQoYWdlbnRzLmRhdGFbMF0pXG4gICAgfVxuICAgIHNldEN1cnJlbnRPcHRpb24ob3B0aW9ucy5ob21lKVxuICAgIHNldENoaXBzUHJvamVjdChudWxsKVxuICAgIHNldEhhc0Vycm9yKGZhbHNlKVxuICAgIGlzV2ViU2VhcmNoQWN0aXZlICYmIHRvZ2dsZVdlYlNlYXJjaCgpXG4gICAgaWYgKHJlc2V0U2VsZWN0ZWRDaGF0UmVmLmN1cnJlbnQpIHtcbiAgICAgIHJlc2V0U2VsZWN0ZWRDaGF0UmVmLmN1cnJlbnQoKVxuICAgIH1cbiAgfSwgW1xuICAgIG9wdGlvbnMuaG9tZSxcbiAgICBvcHRpb25zLmNoYXQsXG4gICAgY3VycmVudE9wdGlvbixcbiAgICBpc1dlYlNlYXJjaEFjdGl2ZSxcbiAgICB0b2dnbGVXZWJTZWFyY2gsXG4gICAgYWdlbnQsXG4gICAgYWdlbnRzLFxuICAgIHNlbGVjdEFnZW50LFxuICAgIHNldENsaWVudCxcbiAgICBzZXRUYXNrLFxuICAgIHN0b3BHZW5lcmF0aW9uRnVuY3Rpb24sXG4gICAgc2VjdGlvbixcbiAgXSlcblxuICBjb25zdCBoYW5kbGVSZXNldENoYXQgPSB1c2VDYWxsYmFjayhhc3luYyAoKSA9PiB7XG4gICAgc2V0VXNlckluaXRpYWxNZXNzYWdlKHsgbWVzc2FnZTogJycsIGF0dGFjaG1lbnRzOiBbXSB9KVxuICAgIHNldEluaXRpYWxDaGF0SWQobnVsbClcbiAgICAvLyBEaXNwYXRjaCBldmVudCB0byBjbGVhciB0aGUgaW5wdXQgdGV4dGFyZWFcbiAgICBkb2N1bWVudC5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgnY2hhdC1zZXNzaW9uLWNoYW5nZWQnKSlcbiAgICBoYW5kbGVHb0hvbWUoKVxuICB9LCBbaGFuZGxlR29Ib21lXSlcblxuICAvLyBCb3TDs24gXCJ2b2x2ZXJcIiBkZWwgaGVhZGVyIChzb2xvIGFnZW50ZXMgY2xvbmUpOlxuICAvLyAtIENvbiBjb252ZXJzYWNpw7NuIGluaWNpYWRhOiBpbmljaWEgdW5hIG51ZXZhIGNvbnZlcnNhY2nDs24geSB2dWVsdmUgYWwgaG9tZSAodG9kYXMgbGFzIHNlY2Npb25lcykuXG4gIC8vIC0gRW4gZWwgaG9tZSAoRkFRcy9GVUEpOiB2dWVsdmUgYWwgc2VsZWN0b3IgZGUgcHJveWVjdG9zL2NsaWVudGVzIGxpbXBpYW5kbyBsYSBlbnRpdHkgc2VsZWNjaW9uYWRhLlxuICBjb25zdCBoYW5kbGVCYWNrID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGlmIChjb21wdXRlZEN1cnJlbnRPcHRpb24gPT09IG9wdGlvbnMuY2hhdCkge1xuICAgICAgaGFuZGxlUmVzZXRDaGF0KClcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICAvLyBFbiBzZWN0aW9uICd0YXNrJyBwcmVzZXJ2YXIgcHJvamVjdC9jbGllbnQ7IGVuIG90cmFzIHNlY2Npb25lcywgaXIgYWwgc2VsZWN0b3IgbGltcGlhbmRvIHByb2plY3QvY2xpZW50XG4gICAgaWYgKHNlY3Rpb24gIT09ICd0YXNrJykge1xuICAgICAgc2V0UHJvamVjdChudWxsKVxuICAgICAgc2V0Q2xpZW50Py4obnVsbClcbiAgICAgIHNldFRhc2s/LihudWxsKVxuICAgIH1cbiAgfSwgW2NvbXB1dGVkQ3VycmVudE9wdGlvbiwgc2VjdGlvbiwgaGFuZGxlUmVzZXRDaGF0LCBzZXRQcm9qZWN0LCBzZXRDbGllbnQsIHNldFRhc2tdKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFhZ2VudHNGZXRjaGVkUmVmLmN1cnJlbnQpIHtcbiAgICAgIGFnZW50c0ZldGNoZWRSZWYuY3VycmVudCA9IHRydWVcbiAgICAgIGhhbmRsZUdldEFnZW50cygpXG4gICAgfVxuICB9LCBbaGFuZGxlR2V0QWdlbnRzXSlcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IG9uTWVyZ2VDcmVhdGVkQWdlbnQgPSAoZXZ0OiBFdmVudCkgPT4ge1xuICAgICAgY29uc3QgeyBhZ2VudDogbmV4dEFnZW50IH0gPSAoZXZ0IGFzIEN1c3RvbUV2ZW50PHsgYWdlbnQ6IEFnZW50IH0+KS5kZXRhaWwgfHwge31cbiAgICAgIGlmIChuZXh0QWdlbnQ/LmlkKSB7XG4gICAgICAgIGFkZEFnZW50KG5leHRBZ2VudCwgeyBuYXZpZ2F0ZUhvbWU6IGZhbHNlIH0pXG4gICAgICB9XG4gICAgfVxuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21haWEtbWVyZ2UtY3JlYXRlZC1hZ2VudC1pbnRvLWxpc3QnLCBvbk1lcmdlQ3JlYXRlZEFnZW50KVxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtYWlhLW1lcmdlLWNyZWF0ZWQtYWdlbnQtaW50by1saXN0Jywgb25NZXJnZUNyZWF0ZWRBZ2VudClcbiAgICB9XG4gIH0sIFthZGRBZ2VudF0pXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBvblN5bmNFZGl0ZWRBZ2VudCA9IChldnQ6IEV2ZW50KSA9PiB7XG4gICAgICBjb25zdCB7IGFnZW50OiBuZXh0QWdlbnQgfSA9IChldnQgYXMgQ3VzdG9tRXZlbnQ8eyBhZ2VudDogQWdlbnQgfT4pLmRldGFpbCB8fCB7fVxuICAgICAgaWYgKCFuZXh0QWdlbnQ/LmlkKSByZXR1cm5cbiAgICAgIHVwZGF0ZUFnZW50KG5leHRBZ2VudClcbiAgICAgIGlmIChhZ2VudD8uaWQgPT09IG5leHRBZ2VudC5pZCkge1xuICAgICAgICBzZWxlY3RBZ2VudChuZXh0QWdlbnQpXG4gICAgICB9XG4gICAgfVxuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21haWEtc3luYy1lZGl0ZWQtYWdlbnQtZnJvbS1jaGF0Jywgb25TeW5jRWRpdGVkQWdlbnQpXG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21haWEtc3luYy1lZGl0ZWQtYWdlbnQtZnJvbS1jaGF0Jywgb25TeW5jRWRpdGVkQWdlbnQpXG4gICAgfVxuICB9LCBbdXBkYXRlQWdlbnQsIHNlbGVjdEFnZW50LCBhZ2VudD8uaWRdKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3Qgb3BlbkNoYXRWaWV3ID0gKCkgPT4ge1xuICAgICAgc2V0SGFzRXJyb3IoZmFsc2UpXG4gICAgICBzZXRJbml0aWFsQ2hhdElkKG51bGwpXG4gICAgICBzZXROZXdDaGF0S2V5KHByZXYgPT4gcHJldiArIDEpXG4gICAgICBzZXRVc2VySW5pdGlhbE1lc3NhZ2UoeyBtZXNzYWdlOiAnJywgYXR0YWNobWVudHM6IFtdIH0pXG4gICAgICBzZXRDdXJyZW50T3B0aW9uKG9wdGlvbnMuY2hhdClcbiAgICAgIGRvY3VtZW50LmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCdjaGF0LXNlc3Npb24tY2hhbmdlZCcpKVxuICAgIH1cbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtYWlhLW9wZW4tY2hhdC12aWV3Jywgb3BlbkNoYXRWaWV3KVxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtYWlhLW9wZW4tY2hhdC12aWV3Jywgb3BlbkNoYXRWaWV3KVxuICAgIH1cbiAgfSwgW10pXG5cbiAgLyoqIE1pc21vIGZsdWpvIHF1ZSBDaGF0QUlNeUFnZW50cy5oYW5kbGVVc2VBZ2VudCArIG9uQmFjayAoaGFuZGxlcnMuaG9tZSkuXG4gICAqICBFbCBkZXRhaWwgcHVlZGUgdHJhZXIgb3BjaW9uYWxtZW50ZSBgcHJvamVjdGAsIGBjbGllbnRgLCBgdGFza2AgcGFyYSBmbG93cyBxdWVcbiAgICogIG5lY2VzaXRhbiBwcmVzZXJ2YXIgY29udGV4dG8gKGVqLiBzZWxlY3RvciBkZSBhZ2VudGVzIGRlc2RlIHVuYSB0YXJlYSkuIFNpIG5vIHZpZW5lbixcbiAgICogIHNlIG1hbnRpZW5lIGVsIGNvbXBvcnRhbWllbnRvIG9yaWdpbmFsIGRlIGxpbXBpYXIgcHJvamVjdC9jbGllbnQuICovXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3Qgb3Blbk5ld0NoYXRXaXRoQWdlbnQgPSAoZXZlbnQ6IEV2ZW50KSA9PiB7XG4gICAgICBjb25zdCB7IGRldGFpbCB9ID0gZXZlbnQgYXMgQ3VzdG9tRXZlbnQ8e1xuICAgICAgICBhZ2VudDogQWdlbnRcbiAgICAgICAgcHJvamVjdD86IFByb2plY3QgfCBudWxsXG4gICAgICAgIGNsaWVudD86IENsaWVudCB8IG51bGxcbiAgICAgICAgdGFzaz86IFRhc2sgfCBudWxsXG4gICAgICB9PlxuICAgICAgY29uc3QgbmV4dEFnZW50ID0gZGV0YWlsPy5hZ2VudFxuICAgICAgaWYgKCFuZXh0QWdlbnQpIHJldHVyblxuXG4gICAgICBzZXRQcm9qZWN0KGRldGFpbD8ucHJvamVjdCA/PyBudWxsKVxuICAgICAgc2V0Q2xpZW50Py4oZGV0YWlsPy5jbGllbnQgPz8gbnVsbClcbiAgICAgIGlmIChkZXRhaWw/LnRhc2sgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBzZXRUYXNrPy4oZGV0YWlsLnRhc2spXG4gICAgICB9XG4gICAgICBzZWxlY3RBZ2VudChuZXh0QWdlbnQpXG4gICAgICBzZXRIYXNFcnJvcihmYWxzZSlcbiAgICAgIHNldEN1cnJlbnRPcHRpb24ob3B0aW9ucy5ob21lKVxuICAgIH1cblxuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21haWEtb3Blbi1uZXctY2hhdC13aXRoLWFnZW50Jywgb3Blbk5ld0NoYXRXaXRoQWdlbnQpXG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21haWEtb3Blbi1uZXctY2hhdC13aXRoLWFnZW50Jywgb3Blbk5ld0NoYXRXaXRoQWdlbnQpXG4gICAgfVxuICB9LCBbc2VsZWN0QWdlbnQsIHNldENsaWVudCwgc2V0UHJvamVjdCwgc2V0VGFza10pXG5cbiAgY29uc3Qgc2hvd05ld0NoYXQgPSBjb21wdXRlZEN1cnJlbnRPcHRpb24gIT09IG9wdGlvbnMuY2hhdFxuICBjb25zdCBoaWRlSGVhZGVyQWdlbnRTZWxlY3RvciA9IGNvbXB1dGVkQ3VycmVudE9wdGlvbiA9PT0gb3B0aW9ucy5teUFnZW50c1xuICBjb25zdCBzaG93QmFja0J1dHRvbiA9XG4gICAgYWdlbnQ/LnR5cGUgPT09ICdjbG9uZScgJiZcbiAgICBhZ2VudD8uZW50aXR5ICE9PSAnZ2xvYmFsJyAmJlxuICAgICFoYXNFcnJvciAmJlxuICAgICFsb2FkaW5nICYmXG4gICAgKGNvbXB1dGVkQ3VycmVudE9wdGlvbiA9PT0gb3B0aW9ucy5jaGF0IHx8IChjb21wdXRlZEN1cnJlbnRPcHRpb24gPT09IG9wdGlvbnMuaG9tZSAmJiBzZWN0aW9uICE9PSAndGFzaycpKVxuICBjb25zdCBoYW5kbGVPcGVuTWFya2V0cGxhY2UgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgaWYgKCF3aW5kb3cuTUFJQV9DSEFUX0FJX0ZFQVRVUkVfQUNDRVNTX01VTFRJX0FHRU5UUykge1xuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIHNldEN1cnJlbnRPcHRpb24ob3B0aW9ucy5teUFnZW50cylcbiAgfSwgW10pXG5cbiAgY29uc3QgaGFuZGxlR29Ub01haWFrZXIgPSB1c2VDYWxsYmFjayhhc3luYyAoKSA9PiB7XG4gICAgc2V0SGFzRXJyb3IoZmFsc2UpXG4gICAgbGV0IG1haWFrZXJBZ2VudCA9IGFnZW50cy5kYXRhLmZpbmQoKGE6IEFnZW50KSA9PiBhLnR5cGUgPT09ICdjbG9uZScgJiYgYS5lbnRpdHkgPT09ICdnbG9iYWwnKVxuICAgIGlmICghbWFpYWtlckFnZW50KSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoTWFpYSh7XG4gICAgICAgICAgcGF0aDogYGFnZW50cz9hZ2VudF90eXBlPWNsb25lJmxhbmc9JHttYXBDT1JMYW5nKGkxOG4ubGFuZ3VhZ2UpfWAsXG4gICAgICAgICAgbWV0aG9kOiAnR0VUJyxcbiAgICAgICAgfSlcbiAgICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKVxuICAgICAgICBtYWlha2VyQWdlbnQgPSAoZGF0YS5kYXRhIHx8IFtdKS5maW5kKChhOiBBZ2VudCkgPT4gYS50eXBlID09PSAnY2xvbmUnICYmIGEuZW50aXR5ID09PSAnZ2xvYmFsJylcbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKCFtYWlha2VyQWdlbnQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBzZXRQcm9qZWN0KG51bGwpXG4gICAgc2V0Q2xpZW50Py4obnVsbClcbiAgICBzZXRUYXNrPy4obnVsbClcbiAgICBzZWxlY3RBZ2VudChtYWlha2VyQWdlbnQpXG4gICAgc2V0Q3VycmVudE9wdGlvbihvcHRpb25zLmhvbWUpXG4gICAgaWYgKHJlc2V0U2VsZWN0ZWRDaGF0UmVmLmN1cnJlbnQpIHtcbiAgICAgIHJlc2V0U2VsZWN0ZWRDaGF0UmVmLmN1cnJlbnQoKVxuICAgIH1cbiAgfSwgW2FnZW50cy5kYXRhLCBpMThuLmxhbmd1YWdlLCBzZWxlY3RBZ2VudCwgc2V0Q2xpZW50LCBzZXRQcm9qZWN0LCBzZXRUYXNrXSlcbiAgY29uc3QgaGFuZGxlRGVsZXRlQWdlbnRGcm9tTXlBZ2VudHMgPSB1c2VDYWxsYmFjayhcbiAgICAoYWdlbnRJZDogc3RyaW5nKSA9PiB7XG4gICAgICByZW1vdmVBZ2VudChhZ2VudElkKVxuICAgICAgaWYgKGFnZW50Py5pZCA9PT0gYWdlbnRJZCkge1xuICAgICAgICBzZWxlY3RGaXJzdEFnZW50KGFnZW50SWQpXG4gICAgICB9XG4gICAgfSxcbiAgICBbYWdlbnQ/LmlkLCByZW1vdmVBZ2VudCwgc2VsZWN0Rmlyc3RBZ2VudF1cbiAgKVxuXG4gIGNvbnN0IGhpZGVGb290ZXJPbk1haWFrZXJNYXJrZXRwbGFjZUhvbWUgPSBjb21wdXRlZEN1cnJlbnRPcHRpb24gPT09IG9wdGlvbnMuaG9tZSAmJiBpc01haWFrZXJBZ2VudFNlbGVjdGVkXG5cbiAgY29uc3QgbW9kYWxQYW5lbCA9IChcbiAgICA8PlxuICAgICAge3ZhbGlkYXRlQWNjZXNzQnlGZWF0dXJlKHNlY3Rpb24pICYmICFpc0Zsb2F0aW5nID8gKFxuICAgICAgICA8U2lkZWJhclxuICAgICAgICAgIG9uR29Ub0NoYXQ9e2dvVG9DaGF0fVxuICAgICAgICAgIG9uRXJyb3I9eygpID0+IHNldFNpZGViYXJIYXNFcnJvcih0cnVlKX1cbiAgICAgICAgICBoYW5kbGVHb1RvSG9tZT17aGFuZGxlR29Ib21lfVxuICAgICAgICAgIGhhbmRsZU9wZW5NYXJrZXRwbGFjZT17aGFuZGxlT3Blbk1hcmtldHBsYWNlfVxuICAgICAgICAgIHNob3dOZXdDaGF0PXtzaG93TmV3Q2hhdH1cbiAgICAgICAgICByZWZldGNoQ2hhdHM9e3JlZmV0Y2hDaGF0c31cbiAgICAgICAgICBoYW5kbGVTZXRSZWZldGNoQ2hhdHM9e3NldFJlZmV0Y2hDaGF0c31cbiAgICAgICAgICBoYXNFcnJvcj17c2lkZWJhckhhc0Vycm9yfVxuICAgICAgICAgIHJlc2V0U2VsZWN0ZWRDaGF0UmVmPXtyZXNldFNlbGVjdGVkQ2hhdFJlZn1cbiAgICAgICAgICBhZ2VudHNOYXZBY3RpdmU9e3NpZGViYXJBZ2VudHNOYXZBY3RpdmV9XG4gICAgICAgIC8+XG4gICAgICApIDogbnVsbH1cbiAgICAgIDxTQ0NBSU1Db250ZW50IGV4cGFuZGVkPXtleHBhbmRlZH0gZmxvYXRpbmc9e2lzRmxvYXRpbmd9PlxuICAgICAgICA8Q2hhdEFJTW9kYWxIZWFkZXJcbiAgICAgICAgICBsYXlvdXRNb2RlPXtsYXlvdXRNb2RlfVxuICAgICAgICAgIG9uTGF5b3V0TW9kZUNoYW5nZT17c2V0TGF5b3V0TW9kZX1cbiAgICAgICAgICBleHBhbmRlZD17ZXhwYW5kZWR9XG4gICAgICAgICAgZHJhZ2dhYmxlPXtpc0Zsb2F0aW5nfVxuICAgICAgICAgIG9uRHJhZ1N0YXJ0PXtoYW5kbGVEcmFnU3RhcnR9XG4gICAgICAgICAgb25EcmFnTW92ZT17aGFuZGxlRHJhZ01vdmV9XG4gICAgICAgICAgb25EcmFnRW5kPXtoYW5kbGVEcmFnRW5kfVxuICAgICAgICAgIGhhbmRsZUNsb3NlPXtoYW5kbGVDbG9zZU1vZGFsfVxuICAgICAgICAgIGFnZW50cz17YWdlbnRzLmRhdGF9XG4gICAgICAgICAgaGFzRXJyb3I9eyEhYWdlbnRFcnJvcn1cbiAgICAgICAgICBsb2FkaW5nPXtsb2FkaW5nfVxuICAgICAgICAgIGxvYWRpbmdNb3JlPXtsb2FkaW5nTW9yZX1cbiAgICAgICAgICBoYXNNb3JlPXthZ2VudHMuaGFzX21vcmV9XG4gICAgICAgICAgaGFuZGxlUmVzZXRDaGF0PXtoYW5kbGVSZXNldENoYXR9XG4gICAgICAgICAgb25BZ2VudFVwZGF0ZT17dXBkYXRlQWdlbnRGYXZvcml0ZX1cbiAgICAgICAgICBsb2FkTW9yZUFnZW50cz17bG9hZE1vcmVBZ2VudHN9XG4gICAgICAgICAgc29ydEFnZW50c0xpc3Q9e3NvcnRBZ2VudHNMaXN0fVxuICAgICAgICAgIGhpZGVBZ2VudFNlbGVjdG9yPXtoaWRlSGVhZGVyQWdlbnRTZWxlY3Rvcn1cbiAgICAgICAgICBzaG93QmFja0J1dHRvbj17c2hvd0JhY2tCdXR0b259XG4gICAgICAgICAgb25CYWNrPXtoYW5kbGVCYWNrfVxuICAgICAgICAvPlxuICAgICAgICB7aGFzRXJyb3IgPyAoXG4gICAgICAgICAgPE1BSUFFcnJvciAvPlxuICAgICAgICApIDogdmFsaWRhdGVBY2Nlc3NCeUZlYXR1cmUoc2VjdGlvbikgPyAoXG4gICAgICAgICAgPENoYXRBSUNvbnRlbnRcbiAgICAgICAgICAgIGN1cnJlbnRPcHRpb249e2NvbXB1dGVkQ3VycmVudE9wdGlvbn1cbiAgICAgICAgICAgIGhhbmRsZXJzPXt7IC4uLmhhbmRsZXJzLCBjaGF0OiBzdGFydENoYXQsIGhvbWU6IGhhbmRsZXJzLmhvbWUsIGhhbmRsZUdvSG9tZSB9fVxuICAgICAgICAgICAgb25FcnJvcj17KCkgPT4gc2V0SGFzRXJyb3IodHJ1ZSl9XG4gICAgICAgICAgICByZWZzPXt7IHVzZXJJbml0aWFsTWVzc2FnZSwgaW5pdGlhbENoYXRJZCB9fVxuICAgICAgICAgICAgb25TZW5kTWVzc2FnZVJlYWR5PXtoYW5kbGVTZW5kTWVzc2FnZVJlYWR5fVxuICAgICAgICAgICAgZXhwYW5kZWQ9e2V4cGFuZGVkfVxuICAgICAgICAgICAgZmxvYXRpbmc9e2lzRmxvYXRpbmd9XG4gICAgICAgICAgICBhZ2VudHM9e2FnZW50cy5kYXRhfVxuICAgICAgICAgICAgbG9hZGluZ0FnZW50cz17bG9hZGluZ31cbiAgICAgICAgICAgIG9uRGVsZXRlQWdlbnQ9e2hhbmRsZURlbGV0ZUFnZW50RnJvbU15QWdlbnRzfVxuICAgICAgICAgICAgb25GYXZvcml0ZUFnZW50VXBkYXRlPXt1cGRhdGVBZ2VudEZhdm9yaXRlfVxuICAgICAgICAgICAgaGFzTW9yZUFnZW50cz17ISFhZ2VudHMuaGFzX21vcmV9XG4gICAgICAgICAgICBsb2FkaW5nTW9yZUFnZW50cz17bG9hZGluZ01vcmV9XG4gICAgICAgICAgICBvbkxvYWRNb3JlQWdlbnRzPXtsb2FkTW9yZUFnZW50c31cbiAgICAgICAgICAgIG9uR29Ub01haWFrZXI9e2hhbmRsZUdvVG9NYWlha2VyfVxuICAgICAgICAgICAgb25TZWFyY2hBZ2VudHM9e3NlYXJjaEN1c3RvbUFnZW50c31cbiAgICAgICAgICAgIHNlYXJjaExvYWRpbmdBZ2VudHM9e3NlYXJjaExvYWRpbmd9XG4gICAgICAgICAgICBhZ2VudEVycm9yPXthZ2VudEVycm9yfVxuICAgICAgICAgIC8+XG4gICAgICAgICkgOiAoXG4gICAgICAgICAgPFByb2plY3RTdW1tYXJ5Q29udGVudCBvblJlc3RhcnRTdW1tYXJ5PXtoYW5kbGVycy5ob21lfSAvPlxuICAgICAgICApfVxuICAgICAgICB7KChjb21wdXRlZEN1cnJlbnRPcHRpb24gPT09IG9wdGlvbnMuaG9tZSAmJiAhIWFnZW50cz8uZGF0YT8ubGVuZ3RoKSB8fFxuICAgICAgICAgIGNvbXB1dGVkQ3VycmVudE9wdGlvbiA9PT0gb3B0aW9ucy5jaGF0KSAmJlxuICAgICAgICAgICFoaWRlRm9vdGVyT25NYWlha2VyTWFya2V0cGxhY2VIb21lICYmXG4gICAgICAgICAgIWhhc0Vycm9yICYmXG4gICAgICAgICAgIWxvYWRpbmcgJiZcbiAgICAgICAgICB2YWxpZGF0ZUFjY2Vzc0J5RmVhdHVyZShzZWN0aW9uKSAmJiAoXG4gICAgICAgICAgICA8Q2hhdEFpTW9kYWxGb290ZXJcbiAgICAgICAgICAgICAgYWdlbnQ9e2FnZW50fVxuICAgICAgICAgICAgICBoYW5kbGVTZW5kTWVzc2FnZT17aGFuZGxlU2VuZE1lc3NhZ2V9XG4gICAgICAgICAgICAgIGhhbmRsZVN0b3BHZW5lcmF0aW9uPXtzdG9wR2VuZXJhdGlvbkZ1bmN0aW9ufVxuICAgICAgICAgICAgICBpc1N0cmVhbWluZz17aXNTdHJlYW1pbmd9XG4gICAgICAgICAgICAgIGlzV3JpdGluZz17aXNXcml0aW5nfVxuICAgICAgICAgICAgICBjaGF0SWQ9e2luaXRpYWxDaGF0SWR9XG4gICAgICAgICAgICAgIG5ld0NoYXRLZXk9e25ld0NoYXRLZXl9XG4gICAgICAgICAgICAgIHNob3dGYXFzPXtjb21wdXRlZEN1cnJlbnRPcHRpb24gPT09IG9wdGlvbnMuY2hhdH1cbiAgICAgICAgICAgICAgdG9vbHRpcFpJbmRleD17dG9vbHRpcFpJbmRleH1cbiAgICAgICAgICAgICAgbGF5b3V0TW9kZT17bGF5b3V0TW9kZX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgKX1cbiAgICAgIDwvU0NDQUlNQ29udGVudD5cbiAgICA8Lz5cbiAgKVxuXG4gIGNvbnN0IGNvbnRlbnRXcmFwcGVyID0gKFxuICAgIDxTQ0NBSU1Db250ZW50V3JhcHBlciBleHBhbmRlZD17ZXhwYW5kZWR9IGZsb2F0aW5nPXtpc0Zsb2F0aW5nfSByZWY9e2NvbnRlbnRXcmFwcGVyUmVmfT5cbiAgICAgIHttb2RhbFBhbmVsfVxuICAgIDwvU0NDQUlNQ29udGVudFdyYXBwZXI+XG4gIClcblxuICByZXR1cm4gKFxuICAgIHNlbGVjdG9yICYmXG4gICAgUmVhY3RET00uY3JlYXRlUG9ydGFsKFxuICAgICAgPFNDQ0FJTVdyYXBwZXJcbiAgICAgICAgZXhwYW5kZWQ9e2V4cGFuZGVkfVxuICAgICAgICBsYXlvdXRNb2RlPXtsYXlvdXRNb2RlfVxuICAgICAgICBkcmFnUG9zaXRpb249e3Jlc29sdmVkRHJhZ1Bvc2l0aW9ufVxuICAgICAgICBlbGV2YXRlZD17c2VjdGlvbiA9PT0gJ3Rhc2snfVxuICAgICAgPlxuICAgICAgICA8RmxvYXRpbmdQYW5lbE1vdGlvbiB0aWx0PXt0aWx0TW90aW9ufSBleHBhbmRlZD17ZXhwYW5kZWR9PlxuICAgICAgICAgIHtjb250ZW50V3JhcHBlcn1cbiAgICAgICAgPC9GbG9hdGluZ1BhbmVsTW90aW9uPlxuICAgICAgICB7dXNlckhhc1Blcm1pc3Npb25zICYmIChcbiAgICAgICAgICA8QWJtQWdlbnRNb2RhbFxuICAgICAgICAgICAgYWRkQWdlbnQ9e2FkZEFnZW50fVxuICAgICAgICAgICAgdXBkYXRlQWdlbnQ9e3VwZGF0ZUFnZW50fVxuICAgICAgICAgICAgcmVtb3ZlQWdlbnQ9e3JlbW92ZUFnZW50fVxuICAgICAgICAgICAgdXBkYXRlQWdlbnRGYXZvcml0ZT17dXBkYXRlQWdlbnRGYXZvcml0ZX1cbiAgICAgICAgICAgIHNlbGVjdEZpcnN0QWdlbnQ9e3NlbGVjdEZpcnN0QWdlbnR9XG4gICAgICAgICAgLz5cbiAgICAgICAgKX1cbiAgICAgICAgPFNuYWNrYmFyIC8+XG4gICAgICA8L1NDQ0FJTVdyYXBwZXI+LFxuICAgICAgc2VsZWN0b3JcbiAgICApXG4gIClcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUVFQSxXQUFXLEVBQ1hDLE9BQU8sRUFDUEMsUUFBUSxFQUNSQyxNQUFNLEVBQ05DLFNBQVMsRUFDVEMsZUFBZSxRQUVWLE9BQU87QUFDZCxPQUFPQyxRQUFRLE1BQU0sV0FBVztBQUNoQyxPQUFPQyxNQUFNLE1BQU0sUUFBUTtBQUMzQixTQUFTQyxjQUFjLFFBQVEsZUFBZTtBQUM5QyxTQUFTQyxPQUFPLFFBQVEsMkJBQTJCO0FBQ25ELFNBQVNDLFNBQVMsUUFBUSx1QkFBdUI7QUFDakQsU0FBU0Msc0JBQXNCLFFBQVEsdUNBQXVDO0FBRTlFLFNBQVNDLGFBQWEsUUFBUSxrQkFBa0I7QUFDaEQsU0FBU0MsYUFBYSxFQUFFQyxPQUFPLFFBQVEsYUFBYTtBQUNwRCxTQUFTQyxPQUFPLFFBQVEsWUFBWTtBQUNwQyxTQUFTQyxZQUFZLFFBQVEseUNBQXlDO0FBQ3RFLFNBQVNDLGdCQUFnQixRQUFRLGlDQUFpQztBQUdsRSxTQUFTQyxpQkFBaUIsUUFBUSxrREFBa0Q7QUFDcEYsU0FBU0MsUUFBUSxRQUFRLG1DQUFtQztBQUM1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
|
|
890
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1c2VDYWxsYmFjayIsInVzZU1lbW8iLCJ1c2VTdGF0ZSIsInVzZVJlZiIsInVzZUVmZmVjdCIsInVzZUxheW91dEVmZmVjdCIsIlJlYWN0RE9NIiwibW9tZW50IiwidXNlVHJhbnNsYXRpb24iLCJ1c2VVc2VyIiwiTUFJQUVycm9yIiwidXNlTWFpYVRhc2tQYW5lbFpJbmRleCIsIkNoYXRBSUNvbnRlbnQiLCJidWlsZEhhbmRsZXJzIiwib3B0aW9ucyIsIlNpZGViYXIiLCJ1c2VHZXRBZ2VudHMiLCJ1c2VHbG9iYWxDb250ZXh0IiwiQ2hhdEFJTW9kYWxIZWFkZXIiLCJTbmFja2JhciIsIlByb2plY3RTdW1tYXJ5Q29udGVudCIsIkFibUFnZW50TW9kYWwiLCJTRUNUSU9OUyIsIlNDQ0FJTUNvbnRlbnQiLCJTQ0NBSU1Db250ZW50V3JhcHBlciIsIlNDQ0FJTVdyYXBwZXIiLCJnZXRNYWlhRmxvYXRpbmdQYW5lbFdpZHRoUHgiLCJGbG9hdGluZ1BhbmVsTW90aW9uIiwidXNlRmxvYXRpbmdQYW5lbERyYWdUaWx0IiwiQ2hhdEFpTW9kYWxGb290ZXIiLCJ2YWxpZGF0ZUlzTWFpYSIsImlzTWFya2V0cGxhY2VHbG9iYWxDbG9uZUFnZW50IiwidXNlRmFxc1N0b3JlIiwiZmV0Y2hNYWlhIiwibWFwQ09STGFuZyIsIkVWRU5UUyIsInVzZUV2ZW50IiwianN4IiwiX2pzeCIsImpzeHMiLCJfanN4cyIsIkZyYWdtZW50IiwiX0ZyYWdtZW50IiwiTEVHQUNZX0NPTlRFWFRfRU5USVRJRVMiLCJyZXNvbHZlQWlDaGF0QmFja0Rlc3RpbmF0aW9uIiwic2VjdGlvbiIsImFnZW50VHlwZSIsImN1cnJlbnRPcHRpb24iLCJob21lT3B0aW9uIiwiSURfTU9EQUxfQ0hBVF9BR0VOVCIsInZhbGlkYXRlQWNjZXNzQnlGZWF0dXJlIiwid2luZG93IiwiTUFJQV9DSEFUX0FJX0ZFQVRVUkVfQUNDRVNTX01VTFRJX0FHRU5UUyIsIk1BSUFfQ0hBVF9BSV9GRUFUVVJFX0FDQ0VTUyIsIkNoYXRBSU1vZGFsIiwiX3JlZiIsIl91c2VyJHBlcm1pc3Npb25zIiwiX3VzZXIkcGVybWlzc2lvbnMyIiwiX3VzZXIkcGVybWlzc2lvbnMzIiwiX2FnZW50cyRkYXRhIiwiaGFuZGxlQ2xvc2UiLCJ1c2VyIiwiX3VzZVRyYW5zbGF0aW9uIiwiYWJtQWdlbnQiLCJpMThuIiwiYW1wbGl0dWRFdmVudCIsImhhbmRsZUNsb3NlTW9kYWwiLCJnZXRTdGF0ZSIsImNsZWFyRmFxcyIsIl91c2VTdGF0ZSIsIm1lc3NhZ2UiLCJhdHRhY2htZW50cyIsIl91c2VTdGF0ZTIiLCJfc2xpY2VkVG9BcnJheSIsInVzZXJJbml0aWFsTWVzc2FnZSIsInNldFVzZXJJbml0aWFsTWVzc2FnZSIsIl91c2VTdGF0ZTMiLCJfdXNlU3RhdGU0IiwiaW5pdGlhbENoYXRJZCIsInNldEluaXRpYWxDaGF0SWQiLCJfdXNlU3RhdGU1IiwiX3VzZVN0YXRlNiIsIm5ld0NoYXRLZXkiLCJzZXROZXdDaGF0S2V5IiwiX3VzZVN0YXRlNyIsIl91c2VTdGF0ZTgiLCJzZXNzaW9uTWV0YSIsInNldFNlc3Npb25NZXRhIiwiX3VzZVN0YXRlOSIsIl91c2VTdGF0ZTAiLCJzZW5kTWVzc2FnZUZ1bmN0aW9uIiwic2V0U2VuZE1lc3NhZ2VGdW5jdGlvbiIsIl91c2VTdGF0ZTEiLCJfdXNlU3RhdGUxMCIsInN0b3BHZW5lcmF0aW9uRnVuY3Rpb24iLCJzZXRTdG9wR2VuZXJhdGlvbkZ1bmN0aW9uIiwiX3VzZVN0YXRlMTEiLCJfdXNlU3RhdGUxMiIsImlzU3RyZWFtaW5nIiwic2V0SXNTdHJlYW1pbmciLCJfdXNlU3RhdGUxMyIsIl91c2VTdGF0ZTE0IiwiaXNXcml0aW5nIiwic2V0SXNXcml0aW5nIiwiX3VzZVN0YXRlMTUiLCJfdXNlU3RhdGUxNiIsInJlZmV0Y2hDaGF0cyIsInNldFJlZmV0Y2hDaGF0cyIsIl91c2VTdGF0ZTE3IiwiaG9tZSIsIl91c2VTdGF0ZTE4Iiwic2V0Q3VycmVudE9wdGlvbiIsIl91c2VTdGF0ZTE5IiwiX3VzZVN0YXRlMjAiLCJoYXNFcnJvciIsInNldEhhc0Vycm9yIiwiaGFuZGxlcnMiLCJfdXNlU3RhdGUyMSIsIl91c2VTdGF0ZTIyIiwic2lkZWJhckhhc0Vycm9yIiwic2V0U2lkZWJhckhhc0Vycm9yIiwicmVzZXRTZWxlY3RlZENoYXRSZWYiLCJsYW5nIiwibGFuZ3VhZ2UiLCJsb2NhbGUiLCJfdXNlR2xvYmFsQ29udGV4dCIsInNlbGVjdEFnZW50IiwiYWdlbnQiLCJwcm9qZWN0IiwiY2xpZW50IiwidGFzayIsImNoaXBzUHJvamVjdCIsInRvZ2dsZVdlYlNlYXJjaCIsImlzV2ViU2VhcmNoQWN0aXZlIiwic2V0Q2hpcHNQcm9qZWN0Iiwic2V0Q2xpZW50Iiwic2V0UHJvamVjdCIsImJhbm5lckVudHJ5RmFxIiwic2V0VGFzayIsInRvb2x0aXBaSW5kZXgiLCJfdXNlR2V0QWdlbnRzIiwiaGFuZGxlR29Ib21lIiwiYWdlbnRzIiwibG9hZGluZyIsImxvYWRpbmdNb3JlIiwiYWdlbnRFcnJvciIsImVycm9yIiwiaGFuZGxlR2V0QWdlbnRzIiwibG9hZE1vcmVBZ2VudHMiLCJzZWFyY2hDdXN0b21BZ2VudHMiLCJzZWFyY2hMb2FkaW5nIiwiYWRkQWdlbnQiLCJyZW1vdmVBZ2VudCIsInVwZGF0ZUFnZW50IiwidXBkYXRlQWdlbnRGYXZvcml0ZSIsInNlbGVjdEZpcnN0QWdlbnQiLCJzb3J0QWdlbnRzTGlzdCIsImlzTUFJQSIsInVzZXJIYXNQZXJtaXNzaW9ucyIsInBlcm1pc3Npb25zIiwiYWlfYWdlbnRzIiwiY3JlYXRlIiwiZWRpdCIsImNvbXB1dGVkQ3VycmVudE9wdGlvbiIsImlzR2xvYmFsU3BlY2lhbGlzdCIsImVudGl0eSIsImlzUHJvamVjdFNwZWNpYWxpc3QiLCJpc0NsaWVudFNwZWNpYWxpc3QiLCJpc01haWFrZXIiLCJteUFnZW50cyIsInR5cGUiLCJjaGF0Iiwic2hvdWxkU2hvd1Byb2plY3RTZWxlY3RvciIsInNob3VsZFNob3dDbGllbnRTZWxlY3RvciIsInByb2plY3RTZWxlY3RvciIsImNsaWVudFNlbGVjdG9yIiwibmFtZSIsImlzTWFpYWtlckFnZW50U2VsZWN0ZWQiLCJzaWRlYmFyQWdlbnRzTmF2QWN0aXZlIiwiYWdlbnRzRmV0Y2hlZFJlZiIsInNlbGVjdG9yIiwiZG9jdW1lbnQiLCJxdWVyeVNlbGVjdG9yIiwiY29uY2F0IiwiX3VzZVN0YXRlMjMiLCJfYmFubmVyRW50cnlGYXEkZmFxVGkiLCJmYXFUaXRsZSIsInRyaW0iLCJfdXNlU3RhdGUyNCIsImxheW91dE1vZGUiLCJzZXRMYXlvdXRNb2RlIiwiZXhwYW5kZWQiLCJpc0Zsb2F0aW5nIiwiY29udGVudFdyYXBwZXJSZWYiLCJfdXNlU3RhdGUyNSIsIl91c2VTdGF0ZTI2IiwiZHJhZ1Bvc2l0aW9uIiwic2V0RHJhZ1Bvc2l0aW9uIiwiX3VzZUZsb2F0aW5nUGFuZWxEcmFnIiwidGlsdE1vdGlvbiIsInN0YXJ0UG9pbnRlclRyYWNraW5nIiwic2FtcGxlUG9pbnRlck1vdmUiLCJlbmRQb2ludGVyVHJhY2tpbmciLCJkcmFnU3RhdGVSZWYiLCJjbGFtcERyYWdQb3NpdGlvbiIsIngiLCJ5IiwiY29udGVudFdyYXBwZXIiLCJjdXJyZW50IiwiX2NvbnRlbnRXcmFwcGVyJGdldEJvIiwiZ2V0Qm91bmRpbmdDbGllbnRSZWN0Iiwid2lkdGgiLCJoZWlnaHQiLCJvZmZzZXQiLCJtYXhYIiwiTWF0aCIsIm1heCIsImlubmVyV2lkdGgiLCJtYXhZIiwiaW5uZXJIZWlnaHQiLCJtaW4iLCJwcmV2IiwicGFkIiwiaGFuZGxlRHJhZ0VuZCIsImV2ZW50IiwiX2RyYWdTdGF0ZVJlZiRjdXJyZW50IiwicG9pbnRlcklkIiwiYm9keSIsInN0eWxlIiwidXNlclNlbGVjdCIsImN1cnNvciIsImhhbmRsZURyYWdNb3ZlIiwiZHJhZ1N0YXRlIiwiY2xpZW50WCIsImNsaWVudFkiLCJuZXh0UG9zaXRpb24iLCJvZmZzZXRYIiwib2Zmc2V0WSIsInJlc29sdmVkRHJhZ1Bvc2l0aW9uIiwiaGFuZGxlRHJhZ1N0YXJ0IiwiYnV0dG9uIiwidGFyZ2V0IiwiY2xvc2VzdCIsInJlY3QiLCJpbml0aWFsUG9zaXRpb24iLCJsZWZ0IiwidG9wIiwicG9pbnRlck9mZnNldFgiLCJwb2ludGVyT2Zmc2V0WSIsImN1cnJlbnRUYXJnZXQiLCJzZXRQb2ludGVyQ2FwdHVyZSIsInByZXZlbnREZWZhdWx0IiwiYWlDaGF0RHJhZ2dhYmxlIiwic3RhcnRDaGF0IiwiZmFxSWQiLCJhZ2VudFN1Z2dlc3Rpb25JZCIsIm1lbnRpb25zIiwiZnVhSWQiLCJzY0lkIiwiY29udGV4dERhdGEiLCJfb2JqZWN0U3ByZWFkIiwibGVuZ3RoIiwiYmFubmVyRmFxQXV0b1NlbnRSZWYiLCJfYmFubmVyRW50cnlGYXEkZmFxVGkyIiwiZW50aXR5UmVhZHkiLCJCb29sZWFuIiwiaWQiLCJ1bmRlZmluZWQiLCJnb1RvQ2hhdCIsInNlc3Npb25FeHRlcm5hbElkIiwic2VsZWN0ZWRBZ2VudCIsImRhdGEiLCJmaW5kIiwiYWdlbnRJdGVtIiwiYWdlbnRJZCIsImRpc3BhdGNoRXZlbnQiLCJDdXN0b21FdmVudCIsImhhbmRsZVNlbmRNZXNzYWdlUmVhZHkiLCJzZW5kTWVzc2FnZSIsInN0b3BHZW5lcmF0aW9uIiwic3RyZWFtaW5nIiwid3JpdGluZyIsImhhbmRsZVNlbmRNZXNzYWdlIiwiaXNfZGVsZXRlZCIsImhhc19ub3RfcGVybWlzc2lvbnMiLCJoYXNfbm90X2FjY2VzcyIsInByb2plY3RfZGVsZXRlZCIsImhhbmRsZVJlc2V0Q2hhdCIsIl9hc3luY1RvR2VuZXJhdG9yIiwiX3JlZ2VuZXJhdG9yUnVudGltZSIsIm1hcmsiLCJfY2FsbGVlIiwid3JhcCIsIl9jb250ZXh0IiwibmV4dCIsInN0b3AiLCJoYW5kbGVCYWNrIiwidG8iLCJhaUNoYXRCYWNrIiwib25NZXJnZUNyZWF0ZWRBZ2VudCIsImV2dCIsIl9yZWYzIiwiZGV0YWlsIiwibmV4dEFnZW50IiwibmF2aWdhdGVIb21lIiwiYWRkRXZlbnRMaXN0ZW5lciIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJvblN5bmNFZGl0ZWRBZ2VudCIsIl9yZWY0Iiwib3BlbkNoYXRWaWV3Iiwib3Blbk5ld0NoYXRXaXRoQWdlbnQiLCJfZGV0YWlsJHByb2plY3QiLCJfZGV0YWlsJGNsaWVudCIsIl9yZWY1Iiwib25TZXNzaW9uTWV0YSIsIl9yZWY2IiwibGVnYWN5Q29udGV4dFNlc3Npb24iLCJhZ2VudEVudGl0eSIsImluY2x1ZGVzIiwiY29udGV4dE5hbWUiLCJ0YXNrTmFtZSIsInByb2plY3ROYW1lIiwiY2xpZW50TmFtZSIsImVudGl0eVR5cGUiLCJpc19sZWdhY3lfY29udGV4dCIsImhhbmRsZUNvbnRpbnVlTGVnYWN5Q29udGV4dEluTmV3Q2hhdCIsInBJZCIsInByb2plY3RJZCIsInBOYW1lIiwiY0lkIiwiY2xpZW50SWQiLCJjTmFtZSIsInRJZCIsInRhc2tJZCIsInROYW1lIiwib3JjaGVzdHJhdG9yIiwiYSIsIlN0cmluZyIsInNob3dOZXdDaGF0IiwiaGlkZUhlYWRlckFnZW50U2VsZWN0b3IiLCJzaG93SGVhZGVyQ29udGV4dEJhY2tCdXR0b24iLCJzaG93QmFja0J1dHRvbiIsImhhbmRsZU9wZW5NYXJrZXRwbGFjZSIsImhhbmRsZUdvVG9NYWlha2VyIiwiX2NhbGxlZTIiLCJtYWlha2VyQWdlbnQiLCJyZXNwb25zZSIsIl90IiwiX2NvbnRleHQyIiwicGF0aCIsIm1ldGhvZCIsInNlbnQiLCJqc29uIiwiYWJydXB0IiwiaGFuZGxlRGVsZXRlQWdlbnRGcm9tTXlBZ2VudHMiLCJoaWRlRm9vdGVyT25NYWlha2VyTWFya2V0cGxhY2VIb21lIiwibW9kYWxQYW5lbCIsImNoaWxkcmVuIiwib25Hb1RvQ2hhdCIsIm9uRXJyb3IiLCJoYW5kbGVHb1RvSG9tZSIsImhhbmRsZVNldFJlZmV0Y2hDaGF0cyIsImFnZW50c05hdkFjdGl2ZSIsImZsb2F0aW5nIiwib25MYXlvdXRNb2RlQ2hhbmdlIiwiZHJhZ2dhYmxlIiwib25EcmFnU3RhcnQiLCJvbkRyYWdNb3ZlIiwib25EcmFnRW5kIiwiaGFzTW9yZSIsImhhc19tb3JlIiwib25BZ2VudFVwZGF0ZSIsImhpZGVBZ2VudFNlbGVjdG9yIiwib25CYWNrIiwicmVmcyIsIm9uU2VuZE1lc3NhZ2VSZWFkeSIsImxvYWRpbmdBZ2VudHMiLCJvbkRlbGV0ZUFnZW50Iiwib25GYXZvcml0ZUFnZW50VXBkYXRlIiwiaGFzTW9yZUFnZW50cyIsImxvYWRpbmdNb3JlQWdlbnRzIiwib25Mb2FkTW9yZUFnZW50cyIsIm9uR29Ub01haWFrZXIiLCJvblNlYXJjaEFnZW50cyIsInNlYXJjaExvYWRpbmdBZ2VudHMiLCJvblJlc3RhcnRTdW1tYXJ5IiwiaGFuZGxlU3RvcEdlbmVyYXRpb24iLCJjaGF0SWQiLCJzaG93RmFxcyIsIm9uQ29udGludWVJbk5ld0NoYXQiLCJyZWYiLCJjcmVhdGVQb3J0YWwiLCJlbGV2YXRlZCIsInRpbHQiXSwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50cy9tb2xlY3VsZXMvQ2hhdEFJTW9kYWwvQ2hhdEFJTW9kYWwudHN4Il0sInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIG5vLW5lc3RlZC10ZXJuYXJ5ICovXG4vKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvaW5kZW50ICovXG4vKiBlc2xpbnQtZGlzYWJsZSByZWFjdC9qc3gtbm8tdXNlbGVzcy1mcmFnbWVudCAqL1xuLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSAqL1xuLyogZXNsaW50LWRpc2FibGUgcmVhY3Qvbm8tYXJyYXktaW5kZXgta2V5ICovXG4vKiBlc2xpbnQtZGlzYWJsZSBqc3gtYTExeS9jbGljay1ldmVudHMtaGF2ZS1rZXktZXZlbnRzICovXG4vKiBlc2xpbnQtZGlzYWJsZSBqc3gtYTExeS9uby1zdGF0aWMtZWxlbWVudC1pbnRlcmFjdGlvbnMgKi9cbi8qIGVzbGludC1kaXNhYmxlIHJlYWN0L2Z1bmN0aW9uLWNvbXBvbmVudC1kZWZpbml0aW9uICovXG4vKiBlc2xpbnQtZGlzYWJsZSByZWFjdC9yZXF1aXJlLWRlZmF1bHQtcHJvcHMgKi9cbi8qIGVzbGludC1kaXNhYmxlIG5vLWNvbnNvbGUgKi9cbmltcG9ydCB7XG4gIFJlZk9iamVjdCxcbiAgdXNlQ2FsbGJhY2ssXG4gIHVzZU1lbW8sXG4gIHVzZVN0YXRlLFxuICB1c2VSZWYsXG4gIHVzZUVmZmVjdCxcbiAgdXNlTGF5b3V0RWZmZWN0LFxuICBQb2ludGVyRXZlbnQgYXMgUmVhY3RQb2ludGVyRXZlbnQsXG59IGZyb20gJ3JlYWN0J1xuaW1wb3J0IFJlYWN0RE9NIGZyb20gJ3JlYWN0LWRvbSdcbmltcG9ydCBtb21lbnQgZnJvbSAnbW9tZW50J1xuaW1wb3J0IHsgdXNlVHJhbnNsYXRpb24gfSBmcm9tICdyZWFjdC1pMThuZXh0J1xuaW1wb3J0IHsgdXNlVXNlciB9IGZyb20gJy4uLy4uLy4uL2NvbnRleHQvY29yLXVzZXInXG5pbXBvcnQgeyBNQUlBRXJyb3IgfSBmcm9tICcuLi8uLi9hdG9tcy9NQUlBRXJyb3InXG5pbXBvcnQgeyB1c2VNYWlhVGFza1BhbmVsWkluZGV4IH0gZnJvbSAnLi4vLi4vLi4vaG9va3MvdXNlTWFpYVRhc2tQYW5lbFpJbmRleCdcblxuaW1wb3J0IHsgQ2hhdEFJQ29udGVudCB9IGZyb20gJy4uL0NoYXRBSUNvbnRlbnQnXG5pbXBvcnQgeyBidWlsZEhhbmRsZXJzLCBvcHRpb25zIH0gZnJvbSAnLi9jb25zdGFudHMnXG5pbXBvcnQgeyBTaWRlYmFyIH0gZnJvbSAnLi4vU2lkZWJhcidcbmltcG9ydCB7IHVzZUdldEFnZW50cyB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL21haWEvQWdlbnRzL2dldEFnZW50cydcbmltcG9ydCB7IHVzZUdsb2JhbENvbnRleHQsIHR5cGUgU2VjdGlvbiB9IGZyb20gJy4uLy4uLy4uL2NvbnRleHQvZ2xvYmFsLWNvbnRleHQnXG5pbXBvcnQgeyBBdHRhY2htZW50RmlsZSB9IGZyb20gJy4uL0NoYXRGb290ZXIvQ2hhdEZvb3RlcidcbmltcG9ydCB7IENvbnRleHRNZW50aW9uIH0gZnJvbSAnLi4vLi4vLi4vdHlwZXMvY29udGV4dE1lbnRpb24nXG5pbXBvcnQgeyBDaGF0QUlNb2RhbEhlYWRlciB9IGZyb20gJy4vY29tcG9uZW50cy9DaGF0QWlNb2RhbEhlYWRlci9DaGF0QWlNb2RhbEhlYWRlcidcbmltcG9ydCB7IFNuYWNrYmFyIH0gZnJvbSAnLi4vLi4vb3JnYW5pc21zL1NuYWNrQmFyL1NuYWNrYmFyJ1xuaW1wb3J0IHsgUHJvamVjdFN1bW1hcnlDb250ZW50IH0gZnJvbSAnLi4vUHJvamVjdFN1bW1hcnlDb250ZW50J1xuaW1wb3J0IHsgQWJtQWdlbnRNb2RhbCB9IGZyb20gJy4uLy4uL29yZ2FuaXNtcy9BYm1BZ2VudE1vZGFsL0FibUFnZW50TW9kYWwnXG5pbXBvcnQgeyBTRUNUSU9OUyB9IGZyb20gJy4uLy4uLy4uL2NvbnN0YW50cy9jb25maWcnXG5pbXBvcnQgeyBTQ0NBSU1Db250ZW50LCBTQ0NBSU1Db250ZW50V3JhcHBlciwgU0NDQUlNV3JhcHBlciB9IGZyb20gJy4vQ2hhdEFJTW9kYWwuc3R5bGVzJ1xuaW1wb3J0IHsgZ2V0TWFpYUZsb2F0aW5nUGFuZWxXaWR0aFB4LCBNYWlhQ2hhdE1vZGFsTGF5b3V0TW9kZSB9IGZyb20gJy4vbGF5b3V0J1xuaW1wb3J0IHsgRmxvYXRpbmdQYW5lbE1vdGlvbiwgdXNlRmxvYXRpbmdQYW5lbERyYWdUaWx0IH0gZnJvbSAnLi9mbG9hdGluZ1BhbmVsTW90aW9uJ1xuaW1wb3J0IHsgQ2hhdEFpTW9kYWxGb290ZXIgfSBmcm9tICcuL2NvbXBvbmVudHMvQ2hhdEFpTW9kYWxGb290ZXInXG5pbXBvcnQgeyB2YWxpZGF0ZUlzTWFpYSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL3V0aWxzL3ZhbGlkYXRlSXNNYWlhJ1xuaW1wb3J0IHsgaXNNYXJrZXRwbGFjZUdsb2JhbENsb25lQWdlbnQgfSBmcm9tICcuLi8uLi8uLi91dGlscy9hZ2VudERpc3BsYXlOYW1lJ1xuaW1wb3J0IHsgQWdlbnQgfSBmcm9tICcuLi8uLi8uLi90eXBlcy9hZ2VudCdcbmltcG9ydCB7IFByb2plY3QgfSBmcm9tICcuLi8uLi8uLi90eXBlcy9Qcm9qZWN0J1xuaW1wb3J0IHsgQ2xpZW50IH0gZnJvbSAnLi4vLi4vLi4vdHlwZXMvQ2xpZW50J1xuaW1wb3J0IHsgVGFzayB9IGZyb20gJy4uLy4uLy4uL3R5cGVzL1Rhc2snXG5pbXBvcnQgeyB1c2VGYXFzU3RvcmUgfSBmcm9tICcuLi8uLi8uLi9zdG9yZS91c2VGYXFzU3RvcmUnXG5pbXBvcnQgeyBmZXRjaE1haWEgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9tYWlhL2NsaWVudCdcbmltcG9ydCB7IG1hcENPUkxhbmcgfSBmcm9tICcuLi8uLi8uLi9sYW5nL3V0aWxzJ1xuaW1wb3J0IHsgRVZFTlRTLCB1c2VFdmVudCB9IGZyb20gJy4uLy4uLy4uL2hvb2tzL3VzZUV2ZW50J1xuXG50eXBlIENoYXRBSU1vZGFsUHJvcHMgPSB7XG4gIGNsYXNzTmFtZT86IHN0cmluZ1xuICBoYW5kbGVDbG9zZT86ICgpID0+IHZvaWRcbiAgcGFyZW50UmVmPzogUmVmT2JqZWN0PEhUTUxEaXZFbGVtZW50PlxufVxuXG4vKiogTWV0YWRhdGEgZGUgbGEgc2Vzc2lvbiBhYmllcnRhIChlbWl0aWRhIHBvciB1c2VDaGF0TWVzc2FnZXMgYWwgY2FyZ2FyIHVuYSBjb252ZXJzYWNpw7NuKS4gKi9cbnR5cGUgU2Vzc2lvbk1ldGEgPSB7XG4gIGNoYXRJZDogc3RyaW5nXG4gIGFnZW50VHlwZT86IHN0cmluZ1xuICBhZ2VudEVudGl0eT86IHN0cmluZ1xuICBwcm9qZWN0SWQ/OiBudW1iZXJcbiAgcHJvamVjdE5hbWU/OiBzdHJpbmdcbiAgY2xpZW50SWQ/OiBudW1iZXJcbiAgY2xpZW50TmFtZT86IHN0cmluZ1xuICB0YXNrSWQ/OiBudW1iZXJcbiAgdGFza05hbWU/OiBzdHJpbmdcbn1cblxuY29uc3QgTEVHQUNZX0NPTlRFWFRfRU5USVRJRVMgPSBbJ3Byb2plY3QnLCAndGFzaycsICdjbGllbnQnXSBhcyBjb25zdFxudHlwZSBMZWdhY3lDb250ZXh0RW50aXR5ID0gKHR5cGVvZiBMRUdBQ1lfQ09OVEVYVF9FTlRJVElFUylbbnVtYmVyXVxuXG50eXBlIEFpQ2hhdEJhY2tEZXN0aW5hdGlvbiA9ICdnbG9iYWxfY29udGV4dF9ob21lJyB8ICd0YXNrX2hvbWUnIHwgJ3Byb2plY3RfaG9tZScgfCAnY2xpZW50X2hvbWUnXG5cbmNvbnN0IHJlc29sdmVBaUNoYXRCYWNrRGVzdGluYXRpb24gPSAoXG4gIHNlY3Rpb246IFNlY3Rpb24sXG4gIGFnZW50VHlwZTogQWdlbnRbJ3R5cGUnXSB8IHVuZGVmaW5lZCxcbiAgY3VycmVudE9wdGlvbjogc3RyaW5nLFxuICBob21lT3B0aW9uOiBzdHJpbmdcbik6IEFpQ2hhdEJhY2tEZXN0aW5hdGlvbiA9PiB7XG4gIGlmIChzZWN0aW9uID09PSAnaGVhZGVyJyAmJiBhZ2VudFR5cGUgPT09ICdvcmNoZXN0cmF0b3InICYmIGN1cnJlbnRPcHRpb24gPT09IGhvbWVPcHRpb24pIHtcbiAgICByZXR1cm4gJ2dsb2JhbF9jb250ZXh0X2hvbWUnXG4gIH1cbiAgaWYgKHNlY3Rpb24gPT09ICd0YXNrJykgcmV0dXJuICd0YXNrX2hvbWUnXG4gIGlmIChzZWN0aW9uID09PSAncHJvamVjdCcpIHJldHVybiAncHJvamVjdF9ob21lJ1xuICBpZiAoc2VjdGlvbiA9PT0gJ2NsaWVudCcpIHJldHVybiAnY2xpZW50X2hvbWUnXG4gIHJldHVybiAnZ2xvYmFsX2NvbnRleHRfaG9tZSdcbn1cblxuZXhwb3J0IGNvbnN0IElEX01PREFMX0NIQVRfQUdFTlQgPSAnbW9kYWxzLXBvcnRhbC1tYWlhLWNoYXQtYWdlbnQnXG5cbmNvbnN0IHZhbGlkYXRlQWNjZXNzQnlGZWF0dXJlID0gKHNlY3Rpb246IHN0cmluZykgPT4ge1xuICBpZiAoc2VjdGlvbiA9PT0gJ2hlYWRlcicgJiYgKHdpbmRvdy5NQUlBX0NIQVRfQUlfRkVBVFVSRV9BQ0NFU1NfTVVMVElfQUdFTlRTIHx8IHdpbmRvdy5NQUlBX0NIQVRfQUlfRkVBVFVSRV9BQ0NFU1MpKSB7XG4gICAgcmV0dXJuIHRydWVcbiAgfVxuICBpZiAoKHNlY3Rpb24gPT09ICdwcm9qZWN0JyB8fCBzZWN0aW9uID09PSAnY2xpZW50JyB8fCBzZWN0aW9uID09PSAndGFzaycpICYmIHdpbmRvdy5NQUlBX0NIQVRfQUlfRkVBVFVSRV9BQ0NFU1MpIHtcbiAgICByZXR1cm4gdHJ1ZVxuICB9XG4gIHJldHVybiBmYWxzZVxufVxuXG5leHBvcnQgY29uc3QgQ2hhdEFJTW9kYWwgPSAoeyBoYW5kbGVDbG9zZSB9OiBDaGF0QUlNb2RhbFByb3BzKSA9PiB7XG4gIGNvbnN0IHVzZXIgPSB1c2VVc2VyKClcbiAgY29uc3QgeyBpMThuIH0gPSB1c2VUcmFuc2xhdGlvbihbU0VDVElPTlMuYWJtQWdlbnRdKVxuICBjb25zdCBhbXBsaXR1ZEV2ZW50ID0gdXNlRXZlbnQoKVxuXG4gIGNvbnN0IGhhbmRsZUNsb3NlTW9kYWwgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgdXNlRmFxc1N0b3JlLmdldFN0YXRlKCkuY2xlYXJGYXFzKClcbiAgICBoYW5kbGVDbG9zZT8uKClcbiAgfSwgW2hhbmRsZUNsb3NlXSlcbiAgY29uc3QgW3VzZXJJbml0aWFsTWVzc2FnZSwgc2V0VXNlckluaXRpYWxNZXNzYWdlXSA9IHVzZVN0YXRlPHtcbiAgICBtZXNzYWdlOiBzdHJpbmdcbiAgICBhdHRhY2htZW50czogQXR0YWNobWVudEZpbGVbXVxuICAgIGZhcUlkPzogc3RyaW5nXG4gICAgYWdlbnRTdWdnZXN0aW9uSWQ/OiBzdHJpbmdcbiAgICBtZW50aW9ucz86IENvbnRleHRNZW50aW9uW11cbiAgICBmdWFJZD86IHN0cmluZ1xuICAgIHNjSWQ/OiBzdHJpbmdcbiAgICBjb250ZXh0RGF0YT86IFJlY29yZDxzdHJpbmcsIHVua25vd24+XG4gIH0+KHtcbiAgICBtZXNzYWdlOiAnJyxcbiAgICBhdHRhY2htZW50czogW10sXG4gIH0pXG4gIGNvbnN0IFtpbml0aWFsQ2hhdElkLCBzZXRJbml0aWFsQ2hhdElkXSA9IHVzZVN0YXRlPHN0cmluZyB8IG51bGw+KG51bGwpXG4gIGNvbnN0IFtuZXdDaGF0S2V5LCBzZXROZXdDaGF0S2V5XSA9IHVzZVN0YXRlKDApXG4gIGNvbnN0IFtzZXNzaW9uTWV0YSwgc2V0U2Vzc2lvbk1ldGFdID0gdXNlU3RhdGU8U2Vzc2lvbk1ldGEgfCBudWxsPihudWxsKVxuICBjb25zdCBbc2VuZE1lc3NhZ2VGdW5jdGlvbiwgc2V0U2VuZE1lc3NhZ2VGdW5jdGlvbl0gPSB1c2VTdGF0ZTxcbiAgICB8ICgoXG4gICAgICAgIG1lc3NhZ2U6IHN0cmluZyxcbiAgICAgICAgYXR0YWNobWVudHM/OiBBdHRhY2htZW50RmlsZVtdLFxuICAgICAgICBmYXFJZD86IHN0cmluZyxcbiAgICAgICAgYWdlbnRTdWdnZXN0aW9uSWQ/OiBzdHJpbmcsXG4gICAgICAgIG1lbnRpb25zPzogQ29udGV4dE1lbnRpb25bXSxcbiAgICAgICAgZnVhSWQ/OiBzdHJpbmcsXG4gICAgICAgIHNjSWQ/OiBzdHJpbmdcbiAgICAgICkgPT4gdm9pZClcbiAgICB8IG51bGxcbiAgPihudWxsKVxuICBjb25zdCBbc3RvcEdlbmVyYXRpb25GdW5jdGlvbiwgc2V0U3RvcEdlbmVyYXRpb25GdW5jdGlvbl0gPSB1c2VTdGF0ZTwoKCkgPT4gdm9pZCkgfCBudWxsPihudWxsKVxuICBjb25zdCBbaXNTdHJlYW1pbmcsIHNldElzU3RyZWFtaW5nXSA9IHVzZVN0YXRlKGZhbHNlKVxuICBjb25zdCBbaXNXcml0aW5nLCBzZXRJc1dyaXRpbmddID0gdXNlU3RhdGUoZmFsc2UpXG5cbiAgY29uc3QgW3JlZmV0Y2hDaGF0cywgc2V0UmVmZXRjaENoYXRzXSA9IHVzZVN0YXRlKGZhbHNlKVxuICBjb25zdCBbY3VycmVudE9wdGlvbiwgc2V0Q3VycmVudE9wdGlvbl0gPSB1c2VTdGF0ZShvcHRpb25zLmhvbWUpXG4gIGNvbnN0IFtoYXNFcnJvciwgc2V0SGFzRXJyb3JdID0gdXNlU3RhdGUoZmFsc2UpXG4gIGNvbnN0IGhhbmRsZXJzID0gdXNlTWVtbygoKSA9PiBidWlsZEhhbmRsZXJzKHNldEN1cnJlbnRPcHRpb24sIHNldEhhc0Vycm9yKSwgW10pXG4gIGNvbnN0IFtzaWRlYmFySGFzRXJyb3IsIHNldFNpZGViYXJIYXNFcnJvcl0gPSB1c2VTdGF0ZShmYWxzZSlcbiAgY29uc3QgcmVzZXRTZWxlY3RlZENoYXRSZWYgPSB1c2VSZWY8KCgpID0+IHZvaWQpIHwgbnVsbD4obnVsbClcbiAgY29uc3QgbGFuZyA9IGkxOG4ubGFuZ3VhZ2UgPT09ICdicicgPyAncHQtYnInIDogaTE4bi5sYW5ndWFnZVxuXG4gIG1vbWVudC5sb2NhbGUobGFuZylcblxuICBjb25zdCB7XG4gICAgc2VsZWN0QWdlbnQsXG4gICAgc2VjdGlvbixcbiAgICBhZ2VudCxcbiAgICBwcm9qZWN0LFxuICAgIGNsaWVudCxcbiAgICB0YXNrLFxuICAgIGNoaXBzUHJvamVjdCxcbiAgICB0b2dnbGVXZWJTZWFyY2gsXG4gICAgaXNXZWJTZWFyY2hBY3RpdmUsXG4gICAgc2V0Q2hpcHNQcm9qZWN0LFxuICAgIHNldENsaWVudCxcbiAgICBzZXRQcm9qZWN0LFxuICAgIGJhbm5lckVudHJ5RmFxLFxuICAgIHNldFRhc2ssXG4gIH0gPSB1c2VHbG9iYWxDb250ZXh0KClcblxuICAvLyBaLWluZGV4IHBhcmEgdG9vbHRpcHMgZW4gc2VjdGlvbiAndGFzaycgKG1vZGFsIGZsb3RhbnRlIGVsZXZhZG8pXG4gIGNvbnN0IHRvb2x0aXBaSW5kZXggPSB1c2VNYWlhVGFza1BhbmVsWkluZGV4KDE1MDAsICdvdmVybGF5JylcblxuICBjb25zdCB7XG4gICAgYWdlbnRzLFxuICAgIGxvYWRpbmcsXG4gICAgbG9hZGluZ01vcmUsXG4gICAgZXJyb3I6IGFnZW50RXJyb3IsXG4gICAgaGFuZGxlR2V0QWdlbnRzLFxuICAgIGxvYWRNb3JlQWdlbnRzLFxuICAgIHNlYXJjaEN1c3RvbUFnZW50cyxcbiAgICBzZWFyY2hMb2FkaW5nLFxuICAgIGFkZEFnZW50LFxuICAgIHJlbW92ZUFnZW50LFxuICAgIHVwZGF0ZUFnZW50LFxuICAgIHVwZGF0ZUFnZW50RmF2b3JpdGUsXG4gICAgc2VsZWN0Rmlyc3RBZ2VudCxcbiAgICBzb3J0QWdlbnRzTGlzdCxcbiAgfSA9IHVzZUdldEFnZW50cyh7IHNlbGVjdEFnZW50LCBzZWN0aW9uLCBhZ2VudCwgaGFuZGxlR29Ib21lOiBoYW5kbGVycy5ob21lIH0pXG5cbiAgY29uc3QgaXNNQUlBID0gdmFsaWRhdGVJc01haWEoYWdlbnQgYXMgQWdlbnQpXG5cbiAgY29uc3QgdXNlckhhc1Blcm1pc3Npb25zID1cbiAgICAodXNlcj8ucGVybWlzc2lvbnM/LmFpX2FnZW50cz8uY3JlYXRlIHx8XG4gICAgICB1c2VyPy5wZXJtaXNzaW9ucz8uYWlfYWdlbnRzPy5lZGl0IHx8XG4gICAgICB1c2VyPy5wZXJtaXNzaW9ucz8uYWlfYWdlbnRzPy5kZWxldGUpICYmXG4gICAgd2luZG93Lk1BSUFfQ0hBVF9BSV9GRUFUVVJFX0FDQ0VTU19NVUxUSV9BR0VOVFNcblxuICBjb25zdCBjb21wdXRlZEN1cnJlbnRPcHRpb24gPSB1c2VNZW1vKCgpID0+IHtcbiAgICBjb25zdCBpc0dsb2JhbFNwZWNpYWxpc3QgPSBpc01BSUEgJiYgYWdlbnQ/LmVudGl0eSA9PT0gJ2dsb2JhbCdcbiAgICBjb25zdCBpc1Byb2plY3RTcGVjaWFsaXN0ID0gaXNNQUlBICYmIChhZ2VudD8uZW50aXR5ID09PSAncHJvamVjdCcgfHwgYWdlbnQ/LmVudGl0eSA9PSBudWxsKVxuICAgIGNvbnN0IGlzQ2xpZW50U3BlY2lhbGlzdCA9IGlzTUFJQSAmJiBhZ2VudD8uZW50aXR5ID09PSAnY2xpZW50J1xuICAgIGNvbnN0IGlzTWFpYWtlciA9IGlzTWFya2V0cGxhY2VHbG9iYWxDbG9uZUFnZW50KGFnZW50KVxuXG4gICAgaWYgKGN1cnJlbnRPcHRpb24gPT09IG9wdGlvbnMubXlBZ2VudHMgJiYgd2luZG93Lk1BSUFfQ0hBVF9BSV9GRUFUVVJFX0FDQ0VTU19NVUxUSV9BR0VOVFMpIHtcbiAgICAgIHJldHVybiBvcHRpb25zLm15QWdlbnRzXG4gICAgfVxuXG4gICAgLy8gRWwgb3JjaGVzdHJhdG9yIChNQUlBKSBtdWVzdHJhIHN1IGhvbWUgY29uIEZBUXMvYWNjaW9uZXMgZnJlY3VlbnRlczsgZWwgcmVzdG8gZGVcbiAgICAvLyBsb3MgZ2xvYmFsIHNwZWNpYWxpc3RzIChjbG9uZXMgZ2xvYmFsZXMgbm8tbWFpYWtlcikgc2lndWVuIHllbmRvIGRpcmVjdG8gYWwgY2hhdC5cbiAgICBpZiAoaXNHbG9iYWxTcGVjaWFsaXN0ICYmICFpc01haWFrZXIgJiYgYWdlbnQ/LnR5cGUgIT09ICdvcmNoZXN0cmF0b3InICYmIGN1cnJlbnRPcHRpb24gPT09IG9wdGlvbnMuaG9tZSkge1xuICAgICAgcmV0dXJuIG9wdGlvbnMuY2hhdFxuICAgIH1cblxuICAgIGNvbnN0IHNob3VsZFNob3dQcm9qZWN0U2VsZWN0b3IgPSBjdXJyZW50T3B0aW9uICE9PSBvcHRpb25zLmNoYXQgJiYgaXNQcm9qZWN0U3BlY2lhbGlzdCAmJiAhcHJvamVjdFxuICAgIGNvbnN0IHNob3VsZFNob3dDbGllbnRTZWxlY3RvciA9IGN1cnJlbnRPcHRpb24gIT09IG9wdGlvbnMuY2hhdCAmJiBpc0NsaWVudFNwZWNpYWxpc3QgJiYgIWNsaWVudFxuXG4gICAgaWYgKHNob3VsZFNob3dQcm9qZWN0U2VsZWN0b3IpIHtcbiAgICAgIHJldHVybiBvcHRpb25zLnByb2plY3RTZWxlY3RvclxuICAgIH1cbiAgICBpZiAoc2hvdWxkU2hvd0NsaWVudFNlbGVjdG9yKSB7XG4gICAgICByZXR1cm4gb3B0aW9ucy5jbGllbnRTZWxlY3RvclxuICAgIH1cbiAgICByZXR1cm4gY3VycmVudE9wdGlvblxuICB9LCBbY3VycmVudE9wdGlvbiwgcHJvamVjdCwgY2xpZW50LCBpc01BSUEsIGFnZW50Py5lbnRpdHksIGFnZW50Py5uYW1lLCBhZ2VudD8udHlwZV0pXG5cbiAgY29uc3QgaXNNYWlha2VyQWdlbnRTZWxlY3RlZCA9IHVzZU1lbW8oKCkgPT4gaXNNYXJrZXRwbGFjZUdsb2JhbENsb25lQWdlbnQoYWdlbnQpLCBbYWdlbnRdKVxuXG4gIGNvbnN0IHNpZGViYXJBZ2VudHNOYXZBY3RpdmUgPSB1c2VNZW1vKCgpOiAnbWFpYWtlcicgfCAnbXlBZ2VudHMnIHwgbnVsbCA9PiB7XG4gICAgaWYgKGNvbXB1dGVkQ3VycmVudE9wdGlvbiA9PT0gb3B0aW9ucy5teUFnZW50cykgcmV0dXJuICdteUFnZW50cydcbiAgICBpZiAoaXNNYWlha2VyQWdlbnRTZWxlY3RlZCkgcmV0dXJuICdtYWlha2VyJ1xuICAgIHJldHVybiBudWxsXG4gIH0sIFtjb21wdXRlZEN1cnJlbnRPcHRpb24sIGlzTWFpYWtlckFnZW50U2VsZWN0ZWRdKVxuXG4gIC8qIFJlYWN0aXZhciBjb24gbGEgZmlsYSDigJxNaXMgYWdlbnRlc+KAnSBlbiBTaWRlYmFyOiBteUFnZW50c0NvdW50IHByb3BcbiAgY29uc3Qgc2lkZWJhck15QWdlbnRzQ291bnQgPSB1c2VNZW1vKCgpID0+IHtcbiAgICByZXR1cm4gYWdlbnRzLmRhdGEuZmlsdGVyKFxuICAgICAgYSA9PiAhKGEudHlwZSA9PT0gJ29yY2hlc3RyYXRvcicgfHwgKGEudHlwZSA9PT0gJ2Nsb25lJyAmJiBhLmVudGl0eSA9PT0gJ2dsb2JhbCcgJiYgLyhtYWlha2VyfG1hcmtldHBsYWNlKS9pLnRlc3QoYS5uYW1lIHx8ICcnKSkpXG4gICAgKVxuICAgICAgLmxlbmd0aFxuICB9LCBbYWdlbnRzLmRhdGFdKVxuICAqL1xuXG4gIGNvbnN0IGFnZW50c0ZldGNoZWRSZWYgPSB1c2VSZWYoZmFsc2UpXG5cbiAgY29uc3Qgc2VsZWN0b3IgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGAjJHtJRF9NT0RBTF9DSEFUX0FHRU5UfWApXG5cbiAgLy8gVGFzayBwYW5lbCB5IGJhbm5lciBkZSBwcm95ZWN0byBhYnJlbiBlbiBmbG90YW50ZSBwb3IgZGVmYXVsdCAobm8gdGFwYXIgZWwgY29udGV4dG8gZGV0csOhcykuXG4gIC8vIEVsIHVzdWFyaW8gcHVlZGUgY2FtYmlhciBhIHNpZGViYXIvZnVsbHNjcmVlbiBkZXNkZSBsb3MgY29udHJvbGVzIGRlbCBtb2RhbC5cbiAgY29uc3QgW2xheW91dE1vZGUsIHNldExheW91dE1vZGVdID0gdXNlU3RhdGU8TWFpYUNoYXRNb2RhbExheW91dE1vZGU+KCgpID0+IHtcbiAgICBpZiAoc2VjdGlvbiA9PT0gJ3Rhc2snKSByZXR1cm4gJ2Zsb2F0aW5nJ1xuICAgIGlmIChiYW5uZXJFbnRyeUZhcT8uZmFxVGl0bGU/LnRyaW0oKSkgcmV0dXJuICdmbG9hdGluZydcbiAgICByZXR1cm4gJ3NpZGViYXInXG4gIH0pXG4gIGNvbnN0IGV4cGFuZGVkID0gbGF5b3V0TW9kZSA9PT0gJ2Z1bGxzY3JlZW4nXG4gIGNvbnN0IGlzRmxvYXRpbmcgPSBsYXlvdXRNb2RlID09PSAnZmxvYXRpbmcnXG4gIGNvbnN0IGNvbnRlbnRXcmFwcGVyUmVmID0gdXNlUmVmPEhUTUxEaXZFbGVtZW50PihudWxsKVxuICBjb25zdCBbZHJhZ1Bvc2l0aW9uLCBzZXREcmFnUG9zaXRpb25dID0gdXNlU3RhdGU8eyB4OiBudW1iZXI7IHk6IG51bWJlciB9IHwgbnVsbD4obnVsbClcbiAgY29uc3QgeyB0aWx0TW90aW9uLCBzdGFydFBvaW50ZXJUcmFja2luZywgc2FtcGxlUG9pbnRlck1vdmUsIGVuZFBvaW50ZXJUcmFja2luZyB9ID1cbiAgICB1c2VGbG9hdGluZ1BhbmVsRHJhZ1RpbHQoaXNGbG9hdGluZylcbiAgY29uc3QgZHJhZ1N0YXRlUmVmID0gdXNlUmVmPHtcbiAgICBwb2ludGVySWQ6IG51bWJlclxuICAgIG9mZnNldFg6IG51bWJlclxuICAgIG9mZnNldFk6IG51bWJlclxuICB9IHwgbnVsbD4obnVsbClcblxuICBjb25zdCBjbGFtcERyYWdQb3NpdGlvbiA9IHVzZUNhbGxiYWNrKCh4OiBudW1iZXIsIHk6IG51bWJlcikgPT4ge1xuICAgIGNvbnN0IGNvbnRlbnRXcmFwcGVyID0gY29udGVudFdyYXBwZXJSZWYuY3VycmVudFxuICAgIGlmICghY29udGVudFdyYXBwZXIpIHtcbiAgICAgIHJldHVybiB7IHgsIHkgfVxuICAgIH1cblxuICAgIGNvbnN0IHsgd2lkdGgsIGhlaWdodCB9ID0gY29udGVudFdyYXBwZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KClcbiAgICBjb25zdCBvZmZzZXQgPSAxNlxuICAgIGNvbnN0IG1heFggPSBNYXRoLm1heChvZmZzZXQsIHdpbmRvdy5pbm5lcldpZHRoIC0gd2lkdGggLSBvZmZzZXQpXG4gICAgY29uc3QgbWF4WSA9IE1hdGgubWF4KG9mZnNldCwgd2luZG93LmlubmVySGVpZ2h0IC0gaGVpZ2h0IC0gb2Zmc2V0KVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIHg6IE1hdGgubWluKE1hdGgubWF4KHgsIG9mZnNldCksIG1heFgpLFxuICAgICAgeTogTWF0aC5taW4oTWF0aC5tYXgoeSwgb2Zmc2V0KSwgbWF4WSksXG4gICAgfVxuICB9LCBbXSlcblxuICB1c2VMYXlvdXRFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChsYXlvdXRNb2RlICE9PSAnZmxvYXRpbmcnKSB7XG4gICAgICBzZXREcmFnUG9zaXRpb24obnVsbClcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIHNldERyYWdQb3NpdGlvbihwcmV2ID0+IHtcbiAgICAgIGlmIChwcmV2KSB7XG4gICAgICAgIHJldHVybiBjbGFtcERyYWdQb3NpdGlvbihwcmV2LngsIHByZXYueSlcbiAgICAgIH1cbiAgICAgIGNvbnN0IHBhZCA9IDE2XG4gICAgICBjb25zdCB4ID0gd2luZG93LmlubmVyV2lkdGggLSBnZXRNYWlhRmxvYXRpbmdQYW5lbFdpZHRoUHgoKSAtIHBhZFxuICAgICAgcmV0dXJuIGNsYW1wRHJhZ1Bvc2l0aW9uKHgsIHBhZClcbiAgICB9KVxuICB9LCBbbGF5b3V0TW9kZSwgY2xhbXBEcmFnUG9zaXRpb25dKVxuXG4gIGNvbnN0IGhhbmRsZURyYWdFbmQgPSB1c2VDYWxsYmFjayhcbiAgICAoZXZlbnQ6IFJlYWN0UG9pbnRlckV2ZW50PEhUTUxEaXZFbGVtZW50PikgPT4ge1xuICAgICAgZW5kUG9pbnRlclRyYWNraW5nKClcbiAgICAgIGlmIChkcmFnU3RhdGVSZWYuY3VycmVudD8ucG9pbnRlcklkICE9PSBldmVudC5wb2ludGVySWQpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGRyYWdTdGF0ZVJlZi5jdXJyZW50ID0gbnVsbFxuICAgICAgZG9jdW1lbnQuYm9keS5zdHlsZS51c2VyU2VsZWN0ID0gJydcbiAgICAgIGRvY3VtZW50LmJvZHkuc3R5bGUuY3Vyc29yID0gJydcbiAgICB9LFxuICAgIFtlbmRQb2ludGVyVHJhY2tpbmddXG4gIClcblxuICBjb25zdCBoYW5kbGVEcmFnTW92ZSA9IHVzZUNhbGxiYWNrKFxuICAgIChldmVudDogUmVhY3RQb2ludGVyRXZlbnQ8SFRNTERpdkVsZW1lbnQ+KSA9PiB7XG4gICAgICBjb25zdCBkcmFnU3RhdGUgPSBkcmFnU3RhdGVSZWYuY3VycmVudFxuICAgICAgaWYgKCFkcmFnU3RhdGUgfHwgZHJhZ1N0YXRlLnBvaW50ZXJJZCAhPT0gZXZlbnQucG9pbnRlcklkKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBzYW1wbGVQb2ludGVyTW92ZShldmVudC5jbGllbnRYLCBldmVudC5jbGllbnRZKVxuXG4gICAgICBjb25zdCBuZXh0UG9zaXRpb24gPSBjbGFtcERyYWdQb3NpdGlvbihldmVudC5jbGllbnRYIC0gZHJhZ1N0YXRlLm9mZnNldFgsIGV2ZW50LmNsaWVudFkgLSBkcmFnU3RhdGUub2Zmc2V0WSlcblxuICAgICAgc2V0RHJhZ1Bvc2l0aW9uKHByZXYgPT4ge1xuICAgICAgICBpZiAocHJldiAmJiBwcmV2LnggPT09IG5leHRQb3NpdGlvbi54ICYmIHByZXYueSA9PT0gbmV4dFBvc2l0aW9uLnkpIHtcbiAgICAgICAgICByZXR1cm4gcHJldlxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXh0UG9zaXRpb25cbiAgICAgIH0pXG4gICAgfSxcbiAgICBbY2xhbXBEcmFnUG9zaXRpb24sIHNhbXBsZVBvaW50ZXJNb3ZlXVxuICApXG5cbiAgY29uc3QgcmVzb2x2ZWREcmFnUG9zaXRpb24gPSB1c2VNZW1vKCgpID0+IHtcbiAgICBpZiAobGF5b3V0TW9kZSAhPT0gJ2Zsb2F0aW5nJykge1xuICAgICAgcmV0dXJuIGRyYWdQb3NpdGlvblxuICAgIH1cbiAgICBpZiAoZHJhZ1Bvc2l0aW9uKSB7XG4gICAgICByZXR1cm4gZHJhZ1Bvc2l0aW9uXG4gICAgfVxuICAgIGNvbnN0IHBhZCA9IDE2XG4gICAgY29uc3QgeCA9IHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnID8gd2luZG93LmlubmVyV2lkdGggLSBnZXRNYWlhRmxvYXRpbmdQYW5lbFdpZHRoUHgoKSAtIHBhZCA6IHBhZFxuICAgIHJldHVybiBjbGFtcERyYWdQb3NpdGlvbih4LCBwYWQpXG4gIH0sIFtsYXlvdXRNb2RlLCBkcmFnUG9zaXRpb24sIGNsYW1wRHJhZ1Bvc2l0aW9uXSlcblxuICBjb25zdCBoYW5kbGVEcmFnU3RhcnQgPSB1c2VDYWxsYmFjayhcbiAgICAoZXZlbnQ6IFJlYWN0UG9pbnRlckV2ZW50PEhUTUxEaXZFbGVtZW50PikgPT4ge1xuICAgICAgaWYgKCFpc0Zsb2F0aW5nIHx8IGV2ZW50LmJ1dHRvbiAhPT0gMCkge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50XG4gICAgICBpZiAodGFyZ2V0LmNsb3Nlc3QoJ2J1dHRvbiwgYSwgaW5wdXQsIHRleHRhcmVhLCBzZWxlY3QsIFtyb2xlPVwiYnV0dG9uXCJdLCBbZGF0YS1uby1kcmFnPVwidHJ1ZVwiXScpKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBjb25zdCBjb250ZW50V3JhcHBlciA9IGNvbnRlbnRXcmFwcGVyUmVmLmN1cnJlbnRcbiAgICAgIGlmICghY29udGVudFdyYXBwZXIpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHJlY3QgPSBjb250ZW50V3JhcHBlci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKVxuICAgICAgY29uc3QgaW5pdGlhbFBvc2l0aW9uID0gcmVzb2x2ZWREcmFnUG9zaXRpb24gPz8gY2xhbXBEcmFnUG9zaXRpb24ocmVjdC5sZWZ0LCByZWN0LnRvcClcbiAgICAgIGNvbnN0IHBvaW50ZXJPZmZzZXRYID0gZXZlbnQuY2xpZW50WCAtIGluaXRpYWxQb3NpdGlvbi54XG4gICAgICBjb25zdCBwb2ludGVyT2Zmc2V0WSA9IGV2ZW50LmNsaWVudFkgLSBpbml0aWFsUG9zaXRpb24ueVxuXG4gICAgICBzZXREcmFnUG9zaXRpb24oaW5pdGlhbFBvc2l0aW9uKVxuICAgICAgZHJhZ1N0YXRlUmVmLmN1cnJlbnQgPSB7XG4gICAgICAgIHBvaW50ZXJJZDogZXZlbnQucG9pbnRlcklkLFxuICAgICAgICBvZmZzZXRYOiBwb2ludGVyT2Zmc2V0WCxcbiAgICAgICAgb2Zmc2V0WTogcG9pbnRlck9mZnNldFksXG4gICAgICB9XG5cbiAgICAgIGV2ZW50LmN1cnJlbnRUYXJnZXQuc2V0UG9pbnRlckNhcHR1cmUoZXZlbnQucG9pbnRlcklkKVxuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKVxuXG4gICAgICBkb2N1bWVudC5ib2R5LnN0eWxlLnVzZXJTZWxlY3QgPSAnbm9uZSdcbiAgICAgIGRvY3VtZW50LmJvZHkuc3R5bGUuY3Vyc29yID0gJ2dyYWJiaW5nJ1xuICAgICAgYW1wbGl0dWRFdmVudChFVkVOVFMuYWlDaGF0RHJhZ2dhYmxlKVxuICAgICAgc3RhcnRQb2ludGVyVHJhY2tpbmcoZXZlbnQuY2xpZW50WCwgZXZlbnQuY2xpZW50WSlcbiAgICB9LFxuICAgIFtjbGFtcERyYWdQb3NpdGlvbiwgaXNGbG9hdGluZywgcmVzb2x2ZWREcmFnUG9zaXRpb24sIHN0YXJ0UG9pbnRlclRyYWNraW5nXVxuICApXG5cbiAgY29uc3Qgc3RhcnRDaGF0ID0gdXNlQ2FsbGJhY2soXG4gICAgKFxuICAgICAgbWVzc2FnZT86IHN0cmluZyxcbiAgICAgIGF0dGFjaG1lbnRzPzogQXR0YWNobWVudEZpbGVbXSxcbiAgICAgIGZhcUlkPzogc3RyaW5nLFxuICAgICAgYWdlbnRTdWdnZXN0aW9uSWQ/OiBzdHJpbmcsXG4gICAgICBtZW50aW9ucz86IENvbnRleHRNZW50aW9uW10sXG4gICAgICBmdWFJZD86IHN0cmluZyxcbiAgICAgIHNjSWQ/OiBzdHJpbmcsXG4gICAgICBjb250ZXh0RGF0YT86IFJlY29yZDxzdHJpbmcsIHVua25vd24+XG4gICAgKSA9PiB7XG4gICAgICBpZiAoc2lkZWJhckhhc0Vycm9yKSB7XG4gICAgICAgIHNldFNpZGViYXJIYXNFcnJvcihmYWxzZSlcbiAgICAgIH1cbiAgICAgIHNldEluaXRpYWxDaGF0SWQobnVsbClcbiAgICAgIHNldE5ld0NoYXRLZXkocHJldiA9PiBwcmV2ICsgMSlcbiAgICAgIHNldFVzZXJJbml0aWFsTWVzc2FnZSh7XG4gICAgICAgIG1lc3NhZ2U6IG1lc3NhZ2UgfHwgJycsXG4gICAgICAgIGF0dGFjaG1lbnRzOiBhdHRhY2htZW50cyB8fCBbXSxcbiAgICAgICAgLi4uKGZhcUlkID8geyBmYXFJZCB9IDoge30pLFxuICAgICAgICAuLi4oYWdlbnRTdWdnZXN0aW9uSWQgPyB7IGFnZW50U3VnZ2VzdGlvbklkIH0gOiB7fSksXG4gICAgICAgIC4uLihtZW50aW9ucyAmJiBtZW50aW9ucy5sZW5ndGggPiAwID8geyBtZW50aW9ucyB9IDoge30pLFxuICAgICAgICAuLi4oZnVhSWQgPyB7IGZ1YUlkIH0gOiB7fSksXG4gICAgICAgIC4uLihzY0lkID8geyBzY0lkIH0gOiB7fSksXG4gICAgICAgIC4uLihjb250ZXh0RGF0YSA/IHsgY29udGV4dERhdGEgfSA6IHt9KSxcbiAgICAgIH0pXG4gICAgICBoYW5kbGVycy5jaGF0KClcbiAgICB9LFxuICAgIFtoYW5kbGVycywgc2lkZWJhckhhc0Vycm9yXVxuICApXG5cbiAgY29uc3QgYmFubmVyRmFxQXV0b1NlbnRSZWYgPSB1c2VSZWYoZmFsc2UpXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBlbnRpdHlSZWFkeSA9IHNlY3Rpb24gPT09ICdwcm9qZWN0JyA/IEJvb2xlYW4ocHJvamVjdD8uaWQpIDogc2VjdGlvbiA9PT0gJ2NsaWVudCcgPyBCb29sZWFuKGNsaWVudD8uaWQpIDogdHJ1ZVxuXG4gICAgaWYgKCFiYW5uZXJFbnRyeUZhcT8uZmFxVGl0bGU/LnRyaW0oKSB8fCBiYW5uZXJGYXFBdXRvU2VudFJlZi5jdXJyZW50IHx8IGxvYWRpbmcgfHwgIWFnZW50Py5pZCB8fCAhZW50aXR5UmVhZHkpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGJhbm5lckZhcUF1dG9TZW50UmVmLmN1cnJlbnQgPSB0cnVlXG4gICAgc3RhcnRDaGF0KFxuICAgICAgYmFubmVyRW50cnlGYXEuZmFxVGl0bGUsXG4gICAgICBbXSxcbiAgICAgIGJhbm5lckVudHJ5RmFxLmZhcUlkLFxuICAgICAgdW5kZWZpbmVkLFxuICAgICAgdW5kZWZpbmVkLFxuICAgICAgdW5kZWZpbmVkLFxuICAgICAgdW5kZWZpbmVkLFxuICAgICAgYmFubmVyRW50cnlGYXEuY29udGV4dERhdGFcbiAgICApXG4gIH0sIFtcbiAgICBiYW5uZXJFbnRyeUZhcT8uZmFxSWQsXG4gICAgYmFubmVyRW50cnlGYXE/LmZhcVRpdGxlLFxuICAgIGJhbm5lckVudHJ5RmFxPy5jb250ZXh0RGF0YSxcbiAgICBsb2FkaW5nLFxuICAgIGFnZW50Py5pZCxcbiAgICBhZ2VudD8uZW50aXR5LFxuICAgIHByb2plY3Q/LmlkLFxuICAgIGNsaWVudD8uaWQsXG4gICAgc2VjdGlvbixcbiAgICBzdGFydENoYXQsXG4gIF0pXG5cbiAgY29uc3QgZ29Ub0NoYXQgPSB1c2VDYWxsYmFjayhcbiAgICAoY2hhdDogYW55KSA9PiB7XG4gICAgICBzZXRVc2VySW5pdGlhbE1lc3NhZ2UoeyBtZXNzYWdlOiAnJywgYXR0YWNobWVudHM6IFtdIH0pXG4gICAgICBzZXRJbml0aWFsQ2hhdElkKGNoYXQuc2Vzc2lvbkV4dGVybmFsSWQpXG4gICAgICBjb25zdCBzZWxlY3RlZEFnZW50ID0gYWdlbnRzLmRhdGEuZmluZChhZ2VudEl0ZW0gPT4gYWdlbnRJdGVtLmlkID09PSBjaGF0LmFnZW50SWQpXG4gICAgICBpZiAoc2VsZWN0ZWRBZ2VudCkge1xuICAgICAgICBzZWxlY3RBZ2VudChzZWxlY3RlZEFnZW50KVxuICAgICAgfVxuICAgICAgLy8gRGlzcGF0Y2ggZXZlbnQgdG8gY2xlYXIgdGhlIGlucHV0IHRleHRhcmVhXG4gICAgICBkb2N1bWVudC5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgnY2hhdC1zZXNzaW9uLWNoYW5nZWQnKSlcbiAgICAgIGhhbmRsZXJzLmNoYXQoKVxuICAgIH0sXG4gICAgW2hhbmRsZXJzLCBhZ2VudHMsIHNlbGVjdEFnZW50XVxuICApXG5cbiAgY29uc3QgaGFuZGxlU2VuZE1lc3NhZ2VSZWFkeSA9IHVzZUNhbGxiYWNrKFxuICAgIChcbiAgICAgIHNlbmRNZXNzYWdlOiAoXG4gICAgICAgIG1lc3NhZ2U6IHN0cmluZyxcbiAgICAgICAgYXR0YWNobWVudHM/OiBBdHRhY2htZW50RmlsZVtdLFxuICAgICAgICBmYXFJZD86IHN0cmluZyxcbiAgICAgICAgYWdlbnRTdWdnZXN0aW9uSWQ/OiBzdHJpbmcsXG4gICAgICAgIG1lbnRpb25zPzogQ29udGV4dE1lbnRpb25bXSxcbiAgICAgICAgZnVhSWQ/OiBzdHJpbmcsXG4gICAgICAgIHNjSWQ/OiBzdHJpbmdcbiAgICAgICkgPT4gdm9pZCxcbiAgICAgIHN0b3BHZW5lcmF0aW9uOiAoKSA9PiB2b2lkLFxuICAgICAgc3RyZWFtaW5nOiBib29sZWFuLFxuICAgICAgd3JpdGluZzogYm9vbGVhblxuICAgICkgPT4ge1xuICAgICAgc2V0U2VuZE1lc3NhZ2VGdW5jdGlvbigoKSA9PiBzZW5kTWVzc2FnZSlcbiAgICAgIHNldFN0b3BHZW5lcmF0aW9uRnVuY3Rpb24oKCkgPT4gc3RvcEdlbmVyYXRpb24pXG4gICAgICBzZXRJc1N0cmVhbWluZyhzdHJlYW1pbmcpXG4gICAgICBzZXRJc1dyaXRpbmcod3JpdGluZylcbiAgICB9LFxuICAgIFtdXG4gIClcblxuICBjb25zdCBoYW5kbGVTZW5kTWVzc2FnZSA9IHVzZUNhbGxiYWNrKFxuICAgIChcbiAgICAgIG1lc3NhZ2U6IHN0cmluZyxcbiAgICAgIGF0dGFjaG1lbnRzPzogQXR0YWNobWVudEZpbGVbXSxcbiAgICAgIGZhcUlkPzogc3RyaW5nLFxuICAgICAgYWdlbnRTdWdnZXN0aW9uSWQ/OiBzdHJpbmcsXG4gICAgICBtZW50aW9ucz86IENvbnRleHRNZW50aW9uW10sXG4gICAgICBmdWFJZD86IHN0cmluZyxcbiAgICAgIHNjSWQ/OiBzdHJpbmdcbiAgICApID0+IHtcbiAgICAgIGlmIChzaWRlYmFySGFzRXJyb3IpIHtcbiAgICAgICAgc2V0U2lkZWJhckhhc0Vycm9yKGZhbHNlKVxuICAgICAgfVxuICAgICAgaWYgKHNlbmRNZXNzYWdlRnVuY3Rpb24gJiYgY29tcHV0ZWRDdXJyZW50T3B0aW9uID09PSBvcHRpb25zLmNoYXQpIHtcbiAgICAgICAgc2VuZE1lc3NhZ2VGdW5jdGlvbihtZXNzYWdlLCBhdHRhY2htZW50cywgZmFxSWQsIGFnZW50U3VnZ2VzdGlvbklkLCBtZW50aW9ucywgZnVhSWQsIHNjSWQpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzdGFydENoYXQobWVzc2FnZSwgYXR0YWNobWVudHMsIGZhcUlkLCBhZ2VudFN1Z2dlc3Rpb25JZCwgbWVudGlvbnMsIGZ1YUlkLCBzY0lkKVxuICAgICAgfVxuICAgIH0sXG4gICAgW3NlbmRNZXNzYWdlRnVuY3Rpb24sIHN0YXJ0Q2hhdCwgY29tcHV0ZWRDdXJyZW50T3B0aW9uLCBzaWRlYmFySGFzRXJyb3JdXG4gIClcblxuICBjb25zdCBoYW5kbGVHb0hvbWUgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgLy8gU2kgZXN0YW1vcyBlbiB1bmEgY29udmVyc2FjacOzbiB5IHZhbW9zIGEgaG9tZSwgcmVzZXRlYXIgaW5pdGlhbENoYXRJZCB5IGluY3JlbWVudGFyIG5ld0NoYXRLZXlcbiAgICBpZiAoY3VycmVudE9wdGlvbiA9PT0gb3B0aW9ucy5jaGF0KSB7XG4gICAgICBzdG9wR2VuZXJhdGlvbkZ1bmN0aW9uPy4oKVxuICAgICAgc2V0SW5pdGlhbENoYXRJZChudWxsKVxuICAgICAgc2V0TmV3Q2hhdEtleShwcmV2ID0+IHByZXYgKyAxKVxuICAgICAgc2V0SXNXcml0aW5nKGZhbHNlKVxuICAgICAgLy8gTm8gYm9ycmFyIGVsIGNsaWVudGUgc2kgZXMgYWdlbnRlIGRlIGNsaWVudGVzIChpZ3VhbCBxdWUgZWwgcHJveWVjdG8gc2UgbWFudGllbmUpXG4gICAgICBpZiAoYWdlbnQ/LmVudGl0eSAhPT0gJ2NsaWVudCcpIHtcbiAgICAgICAgc2V0Q2xpZW50Py4obnVsbClcbiAgICAgIH1cbiAgICAgIGlmIChzZWN0aW9uICE9PSAndGFzaycpIHtcbiAgICAgICAgc2V0VGFzaz8uKG51bGwpXG4gICAgICB9XG4gICAgfVxuICAgIGlmIChcbiAgICAgICghYWdlbnQgfHwgYWdlbnQ/LmlzX2RlbGV0ZWQgfHwgYWdlbnQ/Lmhhc19ub3RfcGVybWlzc2lvbnMgfHwgYWdlbnQ/Lmhhc19ub3RfYWNjZXNzIHx8IGFnZW50Py5wcm9qZWN0X2RlbGV0ZWQpICYmXG4gICAgICBhZ2VudHMuZGF0YS5sZW5ndGggPiAwXG4gICAgKSB7XG4gICAgICBzZWxlY3RBZ2VudChhZ2VudHMuZGF0YVswXSlcbiAgICB9XG4gICAgc2V0Q3VycmVudE9wdGlvbihvcHRpb25zLmhvbWUpXG4gICAgc2V0Q2hpcHNQcm9qZWN0KG51bGwpXG4gICAgc2V0SGFzRXJyb3IoZmFsc2UpXG4gICAgaXNXZWJTZWFyY2hBY3RpdmUgJiYgdG9nZ2xlV2ViU2VhcmNoKClcbiAgICBpZiAocmVzZXRTZWxlY3RlZENoYXRSZWYuY3VycmVudCkge1xuICAgICAgcmVzZXRTZWxlY3RlZENoYXRSZWYuY3VycmVudCgpXG4gICAgfVxuICB9LCBbXG4gICAgb3B0aW9ucy5ob21lLFxuICAgIG9wdGlvbnMuY2hhdCxcbiAgICBjdXJyZW50T3B0aW9uLFxuICAgIGlzV2ViU2VhcmNoQWN0aXZlLFxuICAgIHRvZ2dsZVdlYlNlYXJjaCxcbiAgICBhZ2VudCxcbiAgICBhZ2VudHMsXG4gICAgc2VsZWN0QWdlbnQsXG4gICAgc2V0Q2xpZW50LFxuICAgIHNldFRhc2ssXG4gICAgc3RvcEdlbmVyYXRpb25GdW5jdGlvbixcbiAgICBzZWN0aW9uLFxuICBdKVxuXG4gIGNvbnN0IGhhbmRsZVJlc2V0Q2hhdCA9IHVzZUNhbGxiYWNrKGFzeW5jICgpID0+IHtcbiAgICBzZXRVc2VySW5pdGlhbE1lc3NhZ2UoeyBtZXNzYWdlOiAnJywgYXR0YWNobWVudHM6IFtdIH0pXG4gICAgc2V0SW5pdGlhbENoYXRJZChudWxsKVxuICAgIC8vIERpc3BhdGNoIGV2ZW50IHRvIGNsZWFyIHRoZSBpbnB1dCB0ZXh0YXJlYVxuICAgIGRvY3VtZW50LmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCdjaGF0LXNlc3Npb24tY2hhbmdlZCcpKVxuICAgIGhhbmRsZUdvSG9tZSgpXG4gIH0sIFtoYW5kbGVHb0hvbWVdKVxuXG4gIC8vIEJvdMOzbiBcInZvbHZlclwiIGRlbCBoZWFkZXIgKHNvbG8gYWdlbnRlcyBjbG9uZSk6XG4gIC8vIC0gQ29uIGNvbnZlcnNhY2nDs24gaW5pY2lhZGE6IGluaWNpYSB1bmEgbnVldmEgY29udmVyc2FjacOzbiB5IHZ1ZWx2ZSBhbCBob21lICh0b2RhcyBsYXMgc2VjY2lvbmVzKS5cbiAgLy8gLSBFbiBlbCBob21lIChGQVFzL0ZVQSk6IHZ1ZWx2ZSBhbCBzZWxlY3RvciBkZSBwcm95ZWN0b3MvY2xpZW50ZXMgbGltcGlhbmRvIGxhIGVudGl0eSBzZWxlY2Npb25hZGEuXG4gIGNvbnN0IGhhbmRsZUJhY2sgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgY29uc3QgdG8gPSByZXNvbHZlQWlDaGF0QmFja0Rlc3RpbmF0aW9uKHNlY3Rpb24sIGFnZW50Py50eXBlLCBjb21wdXRlZEN1cnJlbnRPcHRpb24sIG9wdGlvbnMuaG9tZSlcbiAgICBhbXBsaXR1ZEV2ZW50KEVWRU5UUy5haUNoYXRCYWNrLCB7IHRvIH0pXG5cbiAgICAvLyBPcmNoZXN0cmF0b3IgZW4gZWwgaG9tZSBkZWwgaGVhZGVyIChwYXNvIDIpOiBsaW1waWFyIGVsIGNvbnRleHRvIGRlbCBjaGlwIHkgdm9sdmVyXG4gICAgLy8gYSBsYSBsaXN0YSBkZSBjb250ZXh0b3MgcmVjaWVudGVzIChwYXNvIDEpLCBzaW4gc2FsaXIgZGVsIGhvbWUuXG4gICAgaWYgKHNlY3Rpb24gPT09ICdoZWFkZXInICYmIGFnZW50Py50eXBlID09PSAnb3JjaGVzdHJhdG9yJyAmJiBjb21wdXRlZEN1cnJlbnRPcHRpb24gPT09IG9wdGlvbnMuaG9tZSkge1xuICAgICAgc2V0UHJvamVjdChudWxsKVxuICAgICAgc2V0Q2xpZW50Py4obnVsbClcbiAgICAgIHNldFRhc2s/LihudWxsKVxuICAgICAgc2V0Q2hpcHNQcm9qZWN0KG51bGwpXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgaWYgKGNvbXB1dGVkQ3VycmVudE9wdGlvbiA9PT0gb3B0aW9ucy5jaGF0KSB7XG4gICAgICBoYW5kbGVSZXNldENoYXQoKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIC8vIEVuIHNlY3Rpb24gJ3Rhc2snIHByZXNlcnZhciBwcm9qZWN0L2NsaWVudDsgZW4gb3RyYXMgc2VjY2lvbmVzLCBpciBhbCBzZWxlY3RvciBsaW1waWFuZG8gcHJvamVjdC9jbGllbnRcbiAgICBpZiAoc2VjdGlvbiAhPT0gJ3Rhc2snKSB7XG4gICAgICBzZXRQcm9qZWN0KG51bGwpXG4gICAgICBzZXRDbGllbnQ/LihudWxsKVxuICAgICAgc2V0VGFzaz8uKG51bGwpXG4gICAgICBzZXRDaGlwc1Byb2plY3QobnVsbClcbiAgICB9XG4gIH0sIFtcbiAgICBjb21wdXRlZEN1cnJlbnRPcHRpb24sXG4gICAgc2VjdGlvbixcbiAgICBhZ2VudD8udHlwZSxcbiAgICBhbXBsaXR1ZEV2ZW50LFxuICAgIG9wdGlvbnMuaG9tZSxcbiAgICBoYW5kbGVSZXNldENoYXQsXG4gICAgc2V0UHJvamVjdCxcbiAgICBzZXRDbGllbnQsXG4gICAgc2V0VGFzayxcbiAgICBzZXRDaGlwc1Byb2plY3QsXG4gIF0pXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoIWFnZW50c0ZldGNoZWRSZWYuY3VycmVudCkge1xuICAgICAgYWdlbnRzRmV0Y2hlZFJlZi5jdXJyZW50ID0gdHJ1ZVxuICAgICAgaGFuZGxlR2V0QWdlbnRzKClcbiAgICB9XG4gIH0sIFtoYW5kbGVHZXRBZ2VudHNdKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3Qgb25NZXJnZUNyZWF0ZWRBZ2VudCA9IChldnQ6IEV2ZW50KSA9PiB7XG4gICAgICBjb25zdCB7IGFnZW50OiBuZXh0QWdlbnQgfSA9IChldnQgYXMgQ3VzdG9tRXZlbnQ8eyBhZ2VudDogQWdlbnQgfT4pLmRldGFpbCB8fCB7fVxuICAgICAgaWYgKG5leHRBZ2VudD8uaWQpIHtcbiAgICAgICAgYWRkQWdlbnQobmV4dEFnZW50LCB7IG5hdmlnYXRlSG9tZTogZmFsc2UgfSlcbiAgICAgIH1cbiAgICB9XG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbWFpYS1tZXJnZS1jcmVhdGVkLWFnZW50LWludG8tbGlzdCcsIG9uTWVyZ2VDcmVhdGVkQWdlbnQpXG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21haWEtbWVyZ2UtY3JlYXRlZC1hZ2VudC1pbnRvLWxpc3QnLCBvbk1lcmdlQ3JlYXRlZEFnZW50KVxuICAgIH1cbiAgfSwgW2FkZEFnZW50XSlcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IG9uU3luY0VkaXRlZEFnZW50ID0gKGV2dDogRXZlbnQpID0+IHtcbiAgICAgIGNvbnN0IHsgYWdlbnQ6IG5leHRBZ2VudCB9ID0gKGV2dCBhcyBDdXN0b21FdmVudDx7IGFnZW50OiBBZ2VudCB9PikuZGV0YWlsIHx8IHt9XG4gICAgICBpZiAoIW5leHRBZ2VudD8uaWQpIHJldHVyblxuICAgICAgdXBkYXRlQWdlbnQobmV4dEFnZW50KVxuICAgICAgaWYgKGFnZW50Py5pZCA9PT0gbmV4dEFnZW50LmlkKSB7XG4gICAgICAgIHNlbGVjdEFnZW50KG5leHRBZ2VudClcbiAgICAgIH1cbiAgICB9XG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbWFpYS1zeW5jLWVkaXRlZC1hZ2VudC1mcm9tLWNoYXQnLCBvblN5bmNFZGl0ZWRBZ2VudClcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbWFpYS1zeW5jLWVkaXRlZC1hZ2VudC1mcm9tLWNoYXQnLCBvblN5bmNFZGl0ZWRBZ2VudClcbiAgICB9XG4gIH0sIFt1cGRhdGVBZ2VudCwgc2VsZWN0QWdlbnQsIGFnZW50Py5pZF0pXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBvcGVuQ2hhdFZpZXcgPSAoKSA9PiB7XG4gICAgICBzZXRIYXNFcnJvcihmYWxzZSlcbiAgICAgIHNldEluaXRpYWxDaGF0SWQobnVsbClcbiAgICAgIHNldE5ld0NoYXRLZXkocHJldiA9PiBwcmV2ICsgMSlcbiAgICAgIHNldFVzZXJJbml0aWFsTWVzc2FnZSh7IG1lc3NhZ2U6ICcnLCBhdHRhY2htZW50czogW10gfSlcbiAgICAgIHNldEN1cnJlbnRPcHRpb24ob3B0aW9ucy5jaGF0KVxuICAgICAgZG9jdW1lbnQuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoJ2NoYXQtc2Vzc2lvbi1jaGFuZ2VkJykpXG4gICAgfVxuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21haWEtb3Blbi1jaGF0LXZpZXcnLCBvcGVuQ2hhdFZpZXcpXG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21haWEtb3Blbi1jaGF0LXZpZXcnLCBvcGVuQ2hhdFZpZXcpXG4gICAgfVxuICB9LCBbXSlcblxuICAvKiogTWlzbW8gZmx1am8gcXVlIENoYXRBSU15QWdlbnRzLmhhbmRsZVVzZUFnZW50ICsgb25CYWNrIChoYW5kbGVycy5ob21lKS5cbiAgICogIEVsIGRldGFpbCBwdWVkZSB0cmFlciBvcGNpb25hbG1lbnRlIGBwcm9qZWN0YCwgYGNsaWVudGAsIGB0YXNrYCBwYXJhIGZsb3dzIHF1ZVxuICAgKiAgbmVjZXNpdGFuIHByZXNlcnZhciBjb250ZXh0byAoZWouIHNlbGVjdG9yIGRlIGFnZW50ZXMgZGVzZGUgdW5hIHRhcmVhKS4gU2kgbm8gdmllbmVuLFxuICAgKiAgc2UgbWFudGllbmUgZWwgY29tcG9ydGFtaWVudG8gb3JpZ2luYWwgZGUgbGltcGlhciBwcm9qZWN0L2NsaWVudC4gKi9cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBvcGVuTmV3Q2hhdFdpdGhBZ2VudCA9IChldmVudDogRXZlbnQpID0+IHtcbiAgICAgIGNvbnN0IHsgZGV0YWlsIH0gPSBldmVudCBhcyBDdXN0b21FdmVudDx7XG4gICAgICAgIGFnZW50OiBBZ2VudFxuICAgICAgICBwcm9qZWN0PzogUHJvamVjdCB8IG51bGxcbiAgICAgICAgY2xpZW50PzogQ2xpZW50IHwgbnVsbFxuICAgICAgICB0YXNrPzogVGFzayB8IG51bGxcbiAgICAgIH0+XG4gICAgICBjb25zdCBuZXh0QWdlbnQgPSBkZXRhaWw/LmFnZW50XG4gICAgICBpZiAoIW5leHRBZ2VudCkgcmV0dXJuXG5cbiAgICAgIHNldFByb2plY3QoZGV0YWlsPy5wcm9qZWN0ID8/IG51bGwpXG4gICAgICBzZXRDbGllbnQ/LihkZXRhaWw/LmNsaWVudCA/PyBudWxsKVxuICAgICAgaWYgKGRldGFpbD8udGFzayAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHNldFRhc2s/LihkZXRhaWwudGFzaylcbiAgICAgIH1cbiAgICAgIHNlbGVjdEFnZW50KG5leHRBZ2VudClcbiAgICAgIHNldEhhc0Vycm9yKGZhbHNlKVxuICAgICAgc2V0Q3VycmVudE9wdGlvbihvcHRpb25zLmhvbWUpXG4gICAgfVxuXG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbWFpYS1vcGVuLW5ldy1jaGF0LXdpdGgtYWdlbnQnLCBvcGVuTmV3Q2hhdFdpdGhBZ2VudClcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbWFpYS1vcGVuLW5ldy1jaGF0LXdpdGgtYWdlbnQnLCBvcGVuTmV3Q2hhdFdpdGhBZ2VudClcbiAgICB9XG4gIH0sIFtzZWxlY3RBZ2VudCwgc2V0Q2xpZW50LCBzZXRQcm9qZWN0LCBzZXRUYXNrXSlcblxuICAvLyBNZXRhZGF0YSBkZSBsYSBzZXNzaW9uIGFiaWVydGEgKGFnZW50X3R5cGUvYWdlbnRfZW50aXR5ICsgY29udGV4dG8pLCBlbWl0aWRhIHBvciB1c2VDaGF0TWVzc2FnZXMuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3Qgb25TZXNzaW9uTWV0YSA9IChldnQ6IEV2ZW50KSA9PiB7XG4gICAgICBjb25zdCB7IGRldGFpbCB9ID0gZXZ0IGFzIEN1c3RvbUV2ZW50PFNlc3Npb25NZXRhPlxuICAgICAgaWYgKGRldGFpbCkgc2V0U2Vzc2lvbk1ldGEoZGV0YWlsKVxuICAgIH1cbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtYWlhLWNoYXQtc2Vzc2lvbi1tZXRhJywgb25TZXNzaW9uTWV0YSlcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbWFpYS1jaGF0LXNlc3Npb24tbWV0YScsIG9uU2Vzc2lvbk1ldGEpXG4gICAgfVxuICB9LCBbXSlcblxuICAvLyBBbCBjYW1iaWFyIGRlIGNvbnZlcnNhY2nDs24gbGltcGlhbW9zIGxhIG1ldGFkYXRhOyBlbCBsb2FkIGRlIGxhIG51ZXZhIHNlc3Npb24gbGEgdnVlbHZlIGEgZW1pdGlyLlxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIHNldFNlc3Npb25NZXRhKG51bGwpXG4gIH0sIFtpbml0aWFsQ2hhdElkXSlcblxuICAvLyBDYXJ0ZWwgXCJjb250aW51YXIgZW4gdW4gY2hhdCBudWV2b1wiOiBzZSBtdWVzdHJhIGFsIGFicmlyIHVuYSBjb252ZXJzYWNpw7NuIGRlIHVuIGNsb25lIGxlZ2FjeVxuICAvLyAoYWdlbnRfdHlwZSA9PT0gJ2Nsb25lJyBjb24gZW50aXR5IHByb2plY3QvdGFzay9jbGllbnQpLiBFbCBpbnB1dCBzZSByZWVtcGxhemEgcG9yIGVsIGNhcnRlbC5cbiAgY29uc3QgbGVnYWN5Q29udGV4dFNlc3Npb24gPSB1c2VNZW1vPHsgZW50aXR5VHlwZTogTGVnYWN5Q29udGV4dEVudGl0eTsgY29udGV4dE5hbWU6IHN0cmluZyB9IHwgbnVsbD4oKCkgPT4ge1xuICAgIGlmIChjb21wdXRlZEN1cnJlbnRPcHRpb24gIT09IG9wdGlvbnMuY2hhdCkgcmV0dXJuIG51bGxcbiAgICBpZiAoIXNlc3Npb25NZXRhIHx8IHNlc3Npb25NZXRhLmFnZW50VHlwZSAhPT0gJ2Nsb25lJykgcmV0dXJuIG51bGxcbiAgICBjb25zdCBlbnRpdHkgPSBzZXNzaW9uTWV0YS5hZ2VudEVudGl0eVxuICAgIGlmICghZW50aXR5IHx8ICFMRUdBQ1lfQ09OVEVYVF9FTlRJVElFUy5pbmNsdWRlcyhlbnRpdHkgYXMgTGVnYWN5Q29udGV4dEVudGl0eSkpIHJldHVybiBudWxsXG4gICAgY29uc3QgY29udGV4dE5hbWUgPVxuICAgICAgZW50aXR5ID09PSAndGFzaycgPyBzZXNzaW9uTWV0YS50YXNrTmFtZSA6IGVudGl0eSA9PT0gJ3Byb2plY3QnID8gc2Vzc2lvbk1ldGEucHJvamVjdE5hbWUgOiBzZXNzaW9uTWV0YS5jbGllbnROYW1lXG4gICAgcmV0dXJuIHsgZW50aXR5VHlwZTogZW50aXR5IGFzIExlZ2FjeUNvbnRleHRFbnRpdHksIGNvbnRleHROYW1lOiBjb250ZXh0TmFtZSB8fCAnJyB9XG4gIH0sIFtjb21wdXRlZEN1cnJlbnRPcHRpb24sIHNlc3Npb25NZXRhXSlcblxuICAvLyBNYXJjYSBlbCBhZ2VudGUgZGUgbGEgY29udmVyc2FjacOzbiBsZWdhY3kgcGFyYSBxdWUgaGVhZGVyLCBzZWxlY3RvciB5IGF2YXRhciBtdWVzdHJlbiBlbCBsb2dvXG4gIC8vIE1BSUEgeSBlbCBub21icmUgdGFjaGFkbyAoYWdlbnRlIG9ic29sZXRvKSwgc2luIGRlcGVuZGVyIGRlbCBgdHlwZWAgcmVzdWVsdG8gZGUgbGEgc2VzacOzbiB2aWVqYS5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAobGVnYWN5Q29udGV4dFNlc3Npb24gJiYgYWdlbnQgJiYgIWFnZW50LmlzX2xlZ2FjeV9jb250ZXh0KSB7XG4gICAgICBzZWxlY3RBZ2VudCh7IC4uLmFnZW50LCBpc19sZWdhY3lfY29udGV4dDogdHJ1ZSB9KVxuICAgIH1cbiAgfSwgW2xlZ2FjeUNvbnRleHRTZXNzaW9uLCBhZ2VudCwgc2VsZWN0QWdlbnRdKVxuXG4gIC8vIEFicmUgdW4gY2hhdCBudWV2byBjb24gZWwgb3JjaGVzdHJhdG9yIHNldGVhbmRvIGVsIGNvbnRleHRvIGRlbCBjbG9uZSBsZWdhY3kgKG1pc21vIGNyaXRlcmlvXG4gIC8vIHF1ZSBjbGlja2VhciB1biBjb250ZXh0byByZWNpZW50ZSBlbiBlbCBob21lIOKGkiBwYXNvIDIgY29uIEZBUXMvYWNjaW9uZXMgZGUgZXNlIGNvbnRleHRvKS5cbiAgY29uc3QgaGFuZGxlQ29udGludWVMZWdhY3lDb250ZXh0SW5OZXdDaGF0ID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGlmICghc2Vzc2lvbk1ldGEpIHJldHVyblxuICAgIGNvbnN0IHtcbiAgICAgIGFnZW50RW50aXR5LFxuICAgICAgcHJvamVjdElkOiBwSWQsXG4gICAgICBwcm9qZWN0TmFtZTogcE5hbWUsXG4gICAgICBjbGllbnRJZDogY0lkLFxuICAgICAgY2xpZW50TmFtZTogY05hbWUsXG4gICAgICB0YXNrSWQ6IHRJZCxcbiAgICAgIHRhc2tOYW1lOiB0TmFtZSxcbiAgICB9ID0gc2Vzc2lvbk1ldGFcblxuICAgIGNvbnN0IG9yY2hlc3RyYXRvciA9IGFnZW50cy5kYXRhLmZpbmQoKGE6IEFnZW50KSA9PiBhLnR5cGUgPT09ICdvcmNoZXN0cmF0b3InKVxuICAgIGlmICghb3JjaGVzdHJhdG9yKSByZXR1cm5cblxuICAgIC8vIFJlc2V0IGRlbCBjaGF0IOKGkiBjb252ZXJzYWNpw7NuIG51ZXZhXG4gICAgc3RvcEdlbmVyYXRpb25GdW5jdGlvbj8uKClcbiAgICBzZXRJc1dyaXRpbmcoZmFsc2UpXG4gICAgc2V0VXNlckluaXRpYWxNZXNzYWdlKHsgbWVzc2FnZTogJycsIGF0dGFjaG1lbnRzOiBbXSB9KVxuICAgIHNldEluaXRpYWxDaGF0SWQobnVsbClcbiAgICBzZXROZXdDaGF0S2V5KHByZXYgPT4gcHJldiArIDEpXG4gICAgc2V0SGFzRXJyb3IoZmFsc2UpXG5cbiAgICAvLyBTZXRlYXIgY29udGV4dG8gKG1pc21vIGNyaXRlcmlvIHF1ZSBoYW5kbGVTZWxlY3RSZWNlbnRDb250ZXh0IGRlbCBob21lKVxuICAgIHNldFRhc2s/LihudWxsKVxuICAgIHNldFByb2plY3QobnVsbClcbiAgICBzZXRDbGllbnQ/LihudWxsKVxuICAgIHNldENoaXBzUHJvamVjdChudWxsKVxuXG4gICAgaWYgKGFnZW50RW50aXR5ID09PSAnY2xpZW50JyAmJiBjSWQgIT0gbnVsbCkge1xuICAgICAgc2V0Q2xpZW50Py4oeyBpZDogY0lkLCBuYW1lOiBjTmFtZSB8fCAnJyB9KVxuICAgIH0gZWxzZSBpZiAoYWdlbnRFbnRpdHkgPT09ICdwcm9qZWN0JyAmJiBwSWQgIT0gbnVsbCkge1xuICAgICAgc2V0UHJvamVjdCh7XG4gICAgICAgIGlkOiBwSWQsXG4gICAgICAgIG5hbWU6IHBOYW1lIHx8ICcnLFxuICAgICAgICAuLi4oY0lkICE9IG51bGwgPyB7IGNsaWVudElkOiBjSWQsIGNsaWVudDogeyBpZDogY0lkLCBuYW1lOiBjTmFtZSB8fCAnJyB9IH0gOiB7fSksXG4gICAgICB9KVxuICAgICAgc2V0Q2hpcHNQcm9qZWN0KHsgcHJvamVjdElkOiBTdHJpbmcocElkKSwgcHJvamVjdE5hbWU6IHBOYW1lIHx8ICcnLCBjbGllbnROYW1lOiBjTmFtZSB8fCAnJyB9KVxuICAgIH0gZWxzZSBpZiAoYWdlbnRFbnRpdHkgPT09ICd0YXNrJyAmJiB0SWQgIT0gbnVsbCkge1xuICAgICAgc2V0VGFzaz8uKHtcbiAgICAgICAgaWQ6IHRJZCxcbiAgICAgICAgbmFtZTogdE5hbWUgfHwgJycsXG4gICAgICAgIC4uLihwSWQgIT0gbnVsbCA/IHsgcHJvamVjdElkOiBwSWQgfSA6IHt9KSxcbiAgICAgICAgLi4uKGNJZCAhPSBudWxsID8geyBjbGllbnRJZDogY0lkIH0gOiB7fSksXG4gICAgICB9KVxuICAgICAgaWYgKGNJZCAhPSBudWxsKSBzZXRDbGllbnQ/Lih7IGlkOiBjSWQsIG5hbWU6IGNOYW1lIHx8ICcnIH0pXG4gICAgICBpZiAocElkICE9IG51bGwpIHtcbiAgICAgICAgc2V0UHJvamVjdCh7XG4gICAgICAgICAgaWQ6IHBJZCxcbiAgICAgICAgICBuYW1lOiBwTmFtZSB8fCAnJyxcbiAgICAgICAgICAuLi4oY0lkICE9IG51bGwgPyB7IGNsaWVudElkOiBjSWQsIGNsaWVudDogeyBpZDogY0lkLCBuYW1lOiBjTmFtZSB8fCAnJyB9IH0gOiB7fSksXG4gICAgICAgIH0pXG4gICAgICAgIHNldENoaXBzUHJvamVjdCh7IHByb2plY3RJZDogU3RyaW5nKHBJZCksIHByb2plY3ROYW1lOiBwTmFtZSB8fCAnJywgY2xpZW50TmFtZTogY05hbWUgfHwgJycgfSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICBzZWxlY3RBZ2VudChvcmNoZXN0cmF0b3IpXG4gICAgc2V0U2Vzc2lvbk1ldGEobnVsbClcbiAgICBzZXRDdXJyZW50T3B0aW9uKG9wdGlvbnMuaG9tZSlcbiAgICBkb2N1bWVudC5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgnY2hhdC1zZXNzaW9uLWNoYW5nZWQnKSlcbiAgfSwgW3Nlc3Npb25NZXRhLCBhZ2VudHMuZGF0YSwgc2VsZWN0QWdlbnQsIHNldENsaWVudCwgc2V0UHJvamVjdCwgc2V0VGFzaywgc2V0Q2hpcHNQcm9qZWN0LCBzdG9wR2VuZXJhdGlvbkZ1bmN0aW9uXSlcblxuICBjb25zdCBzaG93TmV3Q2hhdCA9IGNvbXB1dGVkQ3VycmVudE9wdGlvbiAhPT0gb3B0aW9ucy5jaGF0XG4gIGNvbnN0IGhpZGVIZWFkZXJBZ2VudFNlbGVjdG9yID0gY29tcHV0ZWRDdXJyZW50T3B0aW9uID09PSBvcHRpb25zLm15QWdlbnRzXG4gIC8vIE9yY2hlc3RyYXRvciBhYmllcnRvIGRlc2RlIGVsIGhlYWRlcjogZW4gZWwgcGFzbyAyIGRlbCBob21lIChjb250ZXh0byBwaW5lYWRvIGVuIGVsIGNoaXApXG4gIC8vIG1vc3RyYW1vcyBcInZvbHZlclwiIHBhcmEgbGltcGlhciBlbCBjb250ZXh0byB5IHZvbHZlciBhIGxhIGxpc3RhIGRlIGNvbnRleHRvcyByZWNpZW50ZXMuXG4gIGNvbnN0IHNob3dIZWFkZXJDb250ZXh0QmFja0J1dHRvbiA9XG4gICAgc2VjdGlvbiA9PT0gJ2hlYWRlcicgJiZcbiAgICBhZ2VudD8udHlwZSA9PT0gJ29yY2hlc3RyYXRvcicgJiZcbiAgICBjb21wdXRlZEN1cnJlbnRPcHRpb24gPT09IG9wdGlvbnMuaG9tZSAmJlxuICAgICEhKHRhc2s/LmlkIHx8IGNoaXBzUHJvamVjdD8ucHJvamVjdElkIHx8IGNsaWVudD8uaWQgfHwgcHJvamVjdD8uaWQpICYmXG4gICAgIWhhc0Vycm9yICYmXG4gICAgIWxvYWRpbmdcbiAgY29uc3Qgc2hvd0JhY2tCdXR0b24gPVxuICAgIHNob3dIZWFkZXJDb250ZXh0QmFja0J1dHRvbiB8fFxuICAgIChhZ2VudD8udHlwZSA9PT0gJ2Nsb25lJyAmJlxuICAgICAgYWdlbnQ/LmVudGl0eSAhPT0gJ2dsb2JhbCcgJiZcbiAgICAgICFoYXNFcnJvciAmJlxuICAgICAgIWxvYWRpbmcgJiZcbiAgICAgIChjb21wdXRlZEN1cnJlbnRPcHRpb24gPT09IG9wdGlvbnMuY2hhdCB8fCAoY29tcHV0ZWRDdXJyZW50T3B0aW9uID09PSBvcHRpb25zLmhvbWUgJiYgc2VjdGlvbiAhPT0gJ3Rhc2snKSkpXG4gIGNvbnN0IGhhbmRsZU9wZW5NYXJrZXRwbGFjZSA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBpZiAoIXdpbmRvdy5NQUlBX0NIQVRfQUlfRkVBVFVSRV9BQ0NFU1NfTVVMVElfQUdFTlRTKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgc2V0Q3VycmVudE9wdGlvbihvcHRpb25zLm15QWdlbnRzKVxuICB9LCBbXSlcblxuICBjb25zdCBoYW5kbGVHb1RvTWFpYWtlciA9IHVzZUNhbGxiYWNrKGFzeW5jICgpID0+IHtcbiAgICBzZXRIYXNFcnJvcihmYWxzZSlcbiAgICBsZXQgbWFpYWtlckFnZW50ID0gYWdlbnRzLmRhdGEuZmluZCgoYTogQWdlbnQpID0+IGlzTWFya2V0cGxhY2VHbG9iYWxDbG9uZUFnZW50KGEpKVxuICAgIGlmICghbWFpYWtlckFnZW50KSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoTWFpYSh7XG4gICAgICAgICAgcGF0aDogYGFnZW50cz9hZ2VudF90eXBlPWNsb25lJmVudGl0eT1nbG9iYWwmbGFuZz0ke21hcENPUkxhbmcoaTE4bi5sYW5ndWFnZSl9YCxcbiAgICAgICAgICBtZXRob2Q6ICdHRVQnLFxuICAgICAgICB9KVxuICAgICAgICBjb25zdCBkYXRhID0gYXdhaXQgcmVzcG9uc2UuanNvbigpXG4gICAgICAgIG1haWFrZXJBZ2VudCA9IChkYXRhLmRhdGEgfHwgW10pLmZpbmQoKGE6IEFnZW50KSA9PiBpc01hcmtldHBsYWNlR2xvYmFsQ2xvbmVBZ2VudChhKSlcbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKCFtYWlha2VyQWdlbnQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBzZXRQcm9qZWN0KG51bGwpXG4gICAgc2V0Q2xpZW50Py4obnVsbClcbiAgICBzZXRUYXNrPy4obnVsbClcbiAgICBzZWxlY3RBZ2VudChtYWlha2VyQWdlbnQpXG4gICAgc2V0Q3VycmVudE9wdGlvbihvcHRpb25zLmhvbWUpXG4gICAgaWYgKHJlc2V0U2VsZWN0ZWRDaGF0UmVmLmN1cnJlbnQpIHtcbiAgICAgIHJlc2V0U2VsZWN0ZWRDaGF0UmVmLmN1cnJlbnQoKVxuICAgIH1cbiAgfSwgW2FnZW50cy5kYXRhLCBpMThuLmxhbmd1YWdlLCBzZWxlY3RBZ2VudCwgc2V0Q2xpZW50LCBzZXRQcm9qZWN0LCBzZXRUYXNrXSlcbiAgY29uc3QgaGFuZGxlRGVsZXRlQWdlbnRGcm9tTXlBZ2VudHMgPSB1c2VDYWxsYmFjayhcbiAgICAoYWdlbnRJZDogc3RyaW5nKSA9PiB7XG4gICAgICByZW1vdmVBZ2VudChhZ2VudElkKVxuICAgICAgaWYgKGFnZW50Py5pZCA9PT0gYWdlbnRJZCkge1xuICAgICAgICBzZWxlY3RGaXJzdEFnZW50KGFnZW50SWQpXG4gICAgICB9XG4gICAgfSxcbiAgICBbYWdlbnQ/LmlkLCByZW1vdmVBZ2VudCwgc2VsZWN0Rmlyc3RBZ2VudF1cbiAgKVxuXG4gIC8vIEVsIGZvb3RlciAoaW5wdXQpIHNlIG9jdWx0YSBzb2xvIGVuIGVsIGhvbWUgbWFya2V0cGxhY2UgZGUgTWFpYWtlciAoYnJvd3NlIGRlIGFnZW50ZXMpLlxuICAvLyBFbCBob21lIGRlbCBvcmNoZXN0cmF0b3Igc8OtIHBlcm1pdGUgZXNjcmliaXIsIGFzw60gcXVlIG1hbnRpZW5lIGVsIGZvb3Rlci5cbiAgY29uc3QgaGlkZUZvb3Rlck9uTWFpYWtlck1hcmtldHBsYWNlSG9tZSA9IGNvbXB1dGVkQ3VycmVudE9wdGlvbiA9PT0gb3B0aW9ucy5ob21lICYmIGlzTWFpYWtlckFnZW50U2VsZWN0ZWRcblxuICBjb25zdCBtb2RhbFBhbmVsID0gKFxuICAgIDw+XG4gICAgICB7dmFsaWRhdGVBY2Nlc3NCeUZlYXR1cmUoc2VjdGlvbikgJiYgIWlzRmxvYXRpbmcgPyAoXG4gICAgICAgIDxTaWRlYmFyXG4gICAgICAgICAgb25Hb1RvQ2hhdD17Z29Ub0NoYXR9XG4gICAgICAgICAgb25FcnJvcj17KCkgPT4gc2V0U2lkZWJhckhhc0Vycm9yKHRydWUpfVxuICAgICAgICAgIGhhbmRsZUdvVG9Ib21lPXtoYW5kbGVHb0hvbWV9XG4gICAgICAgICAgaGFuZGxlT3Blbk1hcmtldHBsYWNlPXtoYW5kbGVPcGVuTWFya2V0cGxhY2V9XG4gICAgICAgICAgc2hvd05ld0NoYXQ9e3Nob3dOZXdDaGF0fVxuICAgICAgICAgIHJlZmV0Y2hDaGF0cz17cmVmZXRjaENoYXRzfVxuICAgICAgICAgIGhhbmRsZVNldFJlZmV0Y2hDaGF0cz17c2V0UmVmZXRjaENoYXRzfVxuICAgICAgICAgIGhhc0Vycm9yPXtzaWRlYmFySGFzRXJyb3J9XG4gICAgICAgICAgcmVzZXRTZWxlY3RlZENoYXRSZWY9e3Jlc2V0U2VsZWN0ZWRDaGF0UmVmfVxuICAgICAgICAgIGFnZW50c05hdkFjdGl2ZT17c2lkZWJhckFnZW50c05hdkFjdGl2ZX1cbiAgICAgICAgLz5cbiAgICAgICkgOiBudWxsfVxuICAgICAgPFNDQ0FJTUNvbnRlbnQgZXhwYW5kZWQ9e2V4cGFuZGVkfSBmbG9hdGluZz17aXNGbG9hdGluZ30+XG4gICAgICAgIDxDaGF0QUlNb2RhbEhlYWRlclxuICAgICAgICAgIGxheW91dE1vZGU9e2xheW91dE1vZGV9XG4gICAgICAgICAgb25MYXlvdXRNb2RlQ2hhbmdlPXtzZXRMYXlvdXRNb2RlfVxuICAgICAgICAgIGV4cGFuZGVkPXtleHBhbmRlZH1cbiAgICAgICAgICBkcmFnZ2FibGU9e2lzRmxvYXRpbmd9XG4gICAgICAgICAgb25EcmFnU3RhcnQ9e2hhbmRsZURyYWdTdGFydH1cbiAgICAgICAgICBvbkRyYWdNb3ZlPXtoYW5kbGVEcmFnTW92ZX1cbiAgICAgICAgICBvbkRyYWdFbmQ9e2hhbmRsZURyYWdFbmR9XG4gICAgICAgICAgaGFuZGxlQ2xvc2U9e2hhbmRsZUNsb3NlTW9kYWx9XG4gICAgICAgICAgYWdlbnRzPXthZ2VudHMuZGF0YX1cbiAgICAgICAgICBoYXNFcnJvcj17ISFhZ2VudEVycm9yfVxuICAgICAgICAgIGxvYWRpbmc9e2xvYWRpbmd9XG4gICAgICAgICAgbG9hZGluZ01vcmU9e2xvYWRpbmdNb3JlfVxuICAgICAgICAgIGhhc01vcmU9e2FnZW50cy5oYXNfbW9yZX1cbiAgICAgICAgICBoYW5kbGVSZXNldENoYXQ9e2hhbmRsZVJlc2V0Q2hhdH1cbiAgICAgICAgICBvbkFnZW50VXBkYXRlPXt1cGRhdGVBZ2VudEZhdm9yaXRlfVxuICAgICAgICAgIGxvYWRNb3JlQWdlbnRzPXtsb2FkTW9yZUFnZW50c31cbiAgICAgICAgICBzb3J0QWdlbnRzTGlzdD17c29ydEFnZW50c0xpc3R9XG4gICAgICAgICAgaGlkZUFnZW50U2VsZWN0b3I9e2hpZGVIZWFkZXJBZ2VudFNlbGVjdG9yfVxuICAgICAgICAgIHNob3dCYWNrQnV0dG9uPXtzaG93QmFja0J1dHRvbn1cbiAgICAgICAgICBvbkJhY2s9e2hhbmRsZUJhY2t9XG4gICAgICAgIC8+XG4gICAgICAgIHtoYXNFcnJvciA/IChcbiAgICAgICAgICA8TUFJQUVycm9yIC8+XG4gICAgICAgICkgOiB2YWxpZGF0ZUFjY2Vzc0J5RmVhdHVyZShzZWN0aW9uKSA/IChcbiAgICAgICAgICA8Q2hhdEFJQ29udGVudFxuICAgICAgICAgICAgY3VycmVudE9wdGlvbj17Y29tcHV0ZWRDdXJyZW50T3B0aW9ufVxuICAgICAgICAgICAgaGFuZGxlcnM9e3sgLi4uaGFuZGxlcnMsIGNoYXQ6IHN0YXJ0Q2hhdCwgaG9tZTogaGFuZGxlcnMuaG9tZSwgaGFuZGxlR29Ib21lIH19XG4gICAgICAgICAgICBvbkVycm9yPXsoKSA9PiBzZXRIYXNFcnJvcih0cnVlKX1cbiAgICAgICAgICAgIHJlZnM9e3sgdXNlckluaXRpYWxNZXNzYWdlLCBpbml0aWFsQ2hhdElkIH19XG4gICAgICAgICAgICBvblNlbmRNZXNzYWdlUmVhZHk9e2hhbmRsZVNlbmRNZXNzYWdlUmVhZHl9XG4gICAgICAgICAgICBleHBhbmRlZD17ZXhwYW5kZWR9XG4gICAgICAgICAgICBmbG9hdGluZz17aXNGbG9hdGluZ31cbiAgICAgICAgICAgIGFnZW50cz17YWdlbnRzLmRhdGF9XG4gICAgICAgICAgICBsb2FkaW5nQWdlbnRzPXtsb2FkaW5nfVxuICAgICAgICAgICAgb25EZWxldGVBZ2VudD17aGFuZGxlRGVsZXRlQWdlbnRGcm9tTXlBZ2VudHN9XG4gICAgICAgICAgICBvbkZhdm9yaXRlQWdlbnRVcGRhdGU9e3VwZGF0ZUFnZW50RmF2b3JpdGV9XG4gICAgICAgICAgICBoYXNNb3JlQWdlbnRzPXshIWFnZW50cy5oYXNfbW9yZX1cbiAgICAgICAgICAgIGxvYWRpbmdNb3JlQWdlbnRzPXtsb2FkaW5nTW9yZX1cbiAgICAgICAgICAgIG9uTG9hZE1vcmVBZ2VudHM9e2xvYWRNb3JlQWdlbnRzfVxuICAgICAgICAgICAgb25Hb1RvTWFpYWtlcj17aGFuZGxlR29Ub01haWFrZXJ9XG4gICAgICAgICAgICBvblNlYXJjaEFnZW50cz17c2VhcmNoQ3VzdG9tQWdlbnRzfVxuICAgICAgICAgICAgc2VhcmNoTG9hZGluZ0FnZW50cz17c2VhcmNoTG9hZGluZ31cbiAgICAgICAgICAgIGFnZW50RXJyb3I9e2FnZW50RXJyb3J9XG4gICAgICAgICAgLz5cbiAgICAgICAgKSA6IChcbiAgICAgICAgICA8UHJvamVjdFN1bW1hcnlDb250ZW50IG9uUmVzdGFydFN1bW1hcnk9e2hhbmRsZXJzLmhvbWV9IC8+XG4gICAgICAgICl9XG4gICAgICAgIHsoKGNvbXB1dGVkQ3VycmVudE9wdGlvbiA9PT0gb3B0aW9ucy5ob21lICYmICEhYWdlbnRzPy5kYXRhPy5sZW5ndGgpIHx8XG4gICAgICAgICAgY29tcHV0ZWRDdXJyZW50T3B0aW9uID09PSBvcHRpb25zLmNoYXQpICYmXG4gICAgICAgICAgIWhpZGVGb290ZXJPbk1haWFrZXJNYXJrZXRwbGFjZUhvbWUgJiZcbiAgICAgICAgICAhaGFzRXJyb3IgJiZcbiAgICAgICAgICAhbG9hZGluZyAmJlxuICAgICAgICAgIHZhbGlkYXRlQWNjZXNzQnlGZWF0dXJlKHNlY3Rpb24pICYmIChcbiAgICAgICAgICAgIDxDaGF0QWlNb2RhbEZvb3RlclxuICAgICAgICAgICAgICBhZ2VudD17YWdlbnR9XG4gICAgICAgICAgICAgIGhhbmRsZVNlbmRNZXNzYWdlPXtoYW5kbGVTZW5kTWVzc2FnZX1cbiAgICAgICAgICAgICAgaGFuZGxlU3RvcEdlbmVyYXRpb249e3N0b3BHZW5lcmF0aW9uRnVuY3Rpb259XG4gICAgICAgICAgICAgIGlzU3RyZWFtaW5nPXtpc1N0cmVhbWluZ31cbiAgICAgICAgICAgICAgaXNXcml0aW5nPXtpc1dyaXRpbmd9XG4gICAgICAgICAgICAgIGNoYXRJZD17aW5pdGlhbENoYXRJZH1cbiAgICAgICAgICAgICAgbmV3Q2hhdEtleT17bmV3Q2hhdEtleX1cbiAgICAgICAgICAgICAgc2hvd0ZhcXM9e2NvbXB1dGVkQ3VycmVudE9wdGlvbiA9PT0gb3B0aW9ucy5jaGF0fVxuICAgICAgICAgICAgICB0b29sdGlwWkluZGV4PXt0b29sdGlwWkluZGV4fVxuICAgICAgICAgICAgICBsZWdhY3lDb250ZXh0U2Vzc2lvbj17bGVnYWN5Q29udGV4dFNlc3Npb259XG4gICAgICAgICAgICAgIG9uQ29udGludWVJbk5ld0NoYXQ9e2hhbmRsZUNvbnRpbnVlTGVnYWN5Q29udGV4dEluTmV3Q2hhdH1cbiAgICAgICAgICAgICAgbGF5b3V0TW9kZT17bGF5b3V0TW9kZX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgKX1cbiAgICAgIDwvU0NDQUlNQ29udGVudD5cbiAgICA8Lz5cbiAgKVxuXG4gIGNvbnN0IGNvbnRlbnRXcmFwcGVyID0gKFxuICAgIDxTQ0NBSU1Db250ZW50V3JhcHBlciBleHBhbmRlZD17ZXhwYW5kZWR9IGZsb2F0aW5nPXtpc0Zsb2F0aW5nfSByZWY9e2NvbnRlbnRXcmFwcGVyUmVmfT5cbiAgICAgIHttb2RhbFBhbmVsfVxuICAgIDwvU0NDQUlNQ29udGVudFdyYXBwZXI+XG4gIClcblxuICByZXR1cm4gKFxuICAgIHNlbGVjdG9yICYmXG4gICAgUmVhY3RET00uY3JlYXRlUG9ydGFsKFxuICAgICAgPFNDQ0FJTVdyYXBwZXJcbiAgICAgICAgZXhwYW5kZWQ9e2V4cGFuZGVkfVxuICAgICAgICBsYXlvdXRNb2RlPXtsYXlvdXRNb2RlfVxuICAgICAgICBkcmFnUG9zaXRpb249e3Jlc29sdmVkRHJhZ1Bvc2l0aW9ufVxuICAgICAgICBlbGV2YXRlZD17c2VjdGlvbiA9PT0gJ3Rhc2snfVxuICAgICAgPlxuICAgICAgICA8RmxvYXRpbmdQYW5lbE1vdGlvbiB0aWx0PXt0aWx0TW90aW9ufSBleHBhbmRlZD17ZXhwYW5kZWR9PlxuICAgICAgICAgIHtjb250ZW50V3JhcHBlcn1cbiAgICAgICAgPC9GbG9hdGluZ1BhbmVsTW90aW9uPlxuICAgICAgICB7dXNlckhhc1Blcm1pc3Npb25zICYmIChcbiAgICAgICAgICA8QWJtQWdlbnRNb2RhbFxuICAgICAgICAgICAgYWRkQWdlbnQ9e2FkZEFnZW50fVxuICAgICAgICAgICAgdXBkYXRlQWdlbnQ9e3VwZGF0ZUFnZW50fVxuICAgICAgICAgICAgcmVtb3ZlQWdlbnQ9e3JlbW92ZUFnZW50fVxuICAgICAgICAgICAgdXBkYXRlQWdlbnRGYXZvcml0ZT17dXBkYXRlQWdlbnRGYXZvcml0ZX1cbiAgICAgICAgICAgIHNlbGVjdEZpcnN0QWdlbnQ9e3NlbGVjdEZpcnN0QWdlbnR9XG4gICAgICAgICAgLz5cbiAgICAgICAgKX1cbiAgICAgICAgPFNuYWNrYmFyIC8+XG4gICAgICA8L1NDQ0FJTVdyYXBw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
|