@projectcor/maia-components 2.49.1-0 → 2.49.1-1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/components/atoms/AttachmentCard/AttachmentCardAudio.helpers.js +3 -1
- package/lib/components/atoms/AttachmentCard/AttachmentCardImage.js +3 -1
- package/lib/components/atoms/AttachmentPreviewModal/AttachmentPreviewModal.js +24 -14
- package/lib/components/atoms/AttachmentPreviewModal/ExcelPreview.js +28 -10
- package/lib/components/atoms/AttachmentPreviewModal/PptPreview.js +19 -15
- package/lib/components/atoms/AttachmentPreviewModal/PptPreview.spec.js +33 -1
- package/lib/components/atoms/AttachmentPreviewModal/WordPreview.js +8 -4
- package/lib/components/atoms/ClientSelector/ClientSelector.js +15 -13
- package/lib/components/atoms/Fade/Fade.js +10 -6
- package/lib/components/atoms/Fade/Fade.spec.js +36 -1
- package/lib/components/atoms/MAIAInput/MAIAInput.attachments.helpers.js +3 -2
- package/lib/components/atoms/MAIAInput/MAIAInput.helpers.js +3 -2
- package/lib/components/atoms/MAIAInput/MAIAInput.js +10 -5
- package/lib/components/atoms/MaiaWrapper/MaiaWrapperBase.js +9 -4
- package/lib/components/atoms/OptionAccessibility/OptionAccessibility.js +4 -5
- package/lib/components/atoms/OptionAccessibility/OptionAccessibility.spec.js +3 -3
- package/lib/components/molecules/AbmSection/AbmAccessibilitySection/AbmAccessibilitySection.js +3 -2
- package/lib/components/molecules/AbmSection/AbmKnowledgeSection.helpers.js +6 -4
- package/lib/components/molecules/AbmSection/AbmKnowledgeSection.js +25 -16
- package/lib/components/molecules/ChatAIHome/ChatAIHome.js +3 -1
- package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.js +51 -359
- package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.utils.js +69 -0
- package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.utils.spec.js +144 -0
- package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeaderAgentDropdown.js +95 -0
- package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeaderAgentSelector.js +174 -0
- package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeaderLayoutMenu.js +99 -0
- package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeaderLayoutMenu.spec.js +65 -0
- package/lib/components/molecules/ChatFooter/ChatFooterFaqs.js +5 -2
- package/lib/components/organisms/ChatAIPage/ChatAIPageHome.js +24 -15
- package/lib/components/organisms/ChatAIPage/ChatAIPageHome.styles.js +8 -7
- package/lib/components/organisms/ProjectSummary/ProjectSummary.js +11 -7
- package/lib/components/organisms/SourcesInformation/SourcesInformationModal.js +4 -1
- package/lib/hooks/useAgentModel/useUpdateAgent.js +7 -6
- package/lib/hooks/useEntitySearch.js +3 -1
- package/lib/hooks/useKnowledge/downloadKnowledge.js +4 -4
- package/lib/hooks/useKnowledge/useKnowledgeOperations.js +16 -15
- package/lib/hooks/useProjectSummaryConfig.js +10 -5
- package/lib/services/maia/Agents/connectors.js +3 -1
- package/lib/store/useChatsStore.js +4 -3
- package/lib/utils/imagePreprocessor.js +14 -3
- package/lib/utils/navigateContextEntity.js +2 -2
- package/lib/utils/navigateContextEntity.spec.js +3 -3
- package/lib/utils/openTaskInCorPanel.js +2 -2
- package/lib/utils/openTaskInCorPanel.spec.js +2 -2
- package/lib/utils/streamActivityMessages.helpers.js +3 -3
- package/package.json +1 -1
package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.js
CHANGED
|
@@ -1,35 +1,24 @@
|
|
|
1
1
|
import _defineProperty from "@babel/runtime/helpers/defineProperty";
|
|
2
|
-
import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
|
|
3
2
|
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
4
3
|
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
5
4
|
/* eslint-disable @typescript-eslint/indent */
|
|
6
|
-
|
|
7
|
-
import { useEffect, useRef, useState, useCallback, useMemo } from 'react';
|
|
8
|
-
import { Tooltip } from '@projectcor/tooltipv2/lib/components/Tooltip';
|
|
5
|
+
import { useCallback } from 'react';
|
|
9
6
|
import { Status } from '@projectcor/icons/lib/components/Status';
|
|
10
|
-
import { ChevronDown } from '@projectcor/icons/lib/components/ChevronDown';
|
|
11
7
|
import { ChevronLeft } from '@projectcor/icons/lib/components/ChevronLeft';
|
|
12
|
-
import { Plus } from '@projectcor/icons/lib/components/Plus';
|
|
13
8
|
import { useTranslation } from 'react-i18next';
|
|
14
9
|
import { SECTIONS } from '../../../../../constants/config';
|
|
15
10
|
import { useGlobalContext } from '../../../../../context/global-context';
|
|
16
|
-
import { useResizeListener } from '../../../../../hooks/useResize';
|
|
17
11
|
import { IconButton } from '../../../../atoms/IconButton';
|
|
18
|
-
import {
|
|
19
|
-
import { MaiaChatLayoutSidebarIcon } from '../../../../atoms/icons/MaiaChatLayoutSidebarIcon';
|
|
20
|
-
import { MaiaChatLayoutFullscreenIcon } from '../../../../atoms/icons/MaiaChatLayoutFullscreenIcon';
|
|
21
|
-
import { MaiaChatLayoutFloatingIcon } from '../../../../atoms/icons/MaiaChatLayoutFloatingIcon';
|
|
22
|
-
import { ChatAIAgentOption } from '../ChatAiAgentOptions/ChatAiAgentOptions';
|
|
23
|
-
import { SCCAIMHModal, SCCAIMHSelectedAgent, SCCAIMHSelectedAgentText, SCCAIMHWrapper, SCCAIMHWrapperButton, SCCAIMHWrapperIcon, SCCAIMHWrapperModal, SCCAIMHWrapperModalContent, SCCAIMHWrapperModalContentTitle, SCCAIMHAddAgent, SCCAIMHCreateAgentButton, SCCAIMHCreateAgentButtonText, SCCAIMHDivider, SCCAIMHAgentsList, SCCAIMHLoaderWrapper, SCCAIMHPlusIconWrapper, SCCAIMHLayoutMenuAnchor, SCCAIMHLayoutMenuPanel, SCCAIMHLayoutMenuRow, SCCAIMHLayoutMenuRowIcon, SCCAIMHBackButton, SCCAIMHMinimizeIcon } from './ChatAiModalHeader.styles';
|
|
12
|
+
import { SCCAIMHModal, SCCAIMHWrapperButton, SCCAIMHCreateAgentButton, SCCAIMHCreateAgentButtonText, SCCAIMHBackButton, SCCAIMHMinimizeIcon } from './ChatAiModalHeader.styles';
|
|
24
13
|
import { EVENTS, useEvent } from '../../../../../hooks/useEvent';
|
|
25
14
|
import { useUser } from '../../../../../context/cor-user';
|
|
26
|
-
import { isMaiaCloneAgentsRoleBlocked } from '../../../../../constants/maiaTaskPanelAccess';
|
|
27
|
-
import { Loader } from '../../../../atoms/Loader';
|
|
28
15
|
import { useMaiaTaskPanelZIndex } from '../../../../../hooks/useMaiaTaskPanelZIndex';
|
|
29
|
-
import {
|
|
16
|
+
import { canUserCreateAgents, dispatchOpenCreateAgentModal, shouldShowAgentSelector } from './ChatAiModalHeader.utils';
|
|
17
|
+
import { ChatAiModalHeaderAgentSelector } from './ChatAiModalHeaderAgentSelector';
|
|
18
|
+
import { ChatAiModalHeaderLayoutMenu } from './ChatAiModalHeaderLayoutMenu';
|
|
30
19
|
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
20
|
+
var EMPTY_AGENTS = [];
|
|
31
21
|
export var ChatAIModalHeader = function ChatAIModalHeader(_ref) {
|
|
32
|
-
var _user$permissions;
|
|
33
22
|
var layoutMode = _ref.layoutMode,
|
|
34
23
|
onLayoutModeChange = _ref.onLayoutModeChange,
|
|
35
24
|
_ref$draggable = _ref.draggable,
|
|
@@ -39,7 +28,7 @@ export var ChatAIModalHeader = function ChatAIModalHeader(_ref) {
|
|
|
39
28
|
onDragEnd = _ref.onDragEnd,
|
|
40
29
|
handleMinimize = _ref.handleMinimize,
|
|
41
30
|
_ref$agents = _ref.agents,
|
|
42
|
-
agents = _ref$agents === void 0 ?
|
|
31
|
+
agents = _ref$agents === void 0 ? EMPTY_AGENTS : _ref$agents,
|
|
43
32
|
_ref$hasError = _ref.hasError,
|
|
44
33
|
hasError = _ref$hasError === void 0 ? false : _ref$hasError,
|
|
45
34
|
_ref$loading = _ref.loading,
|
|
@@ -74,374 +63,77 @@ export var ChatAIModalHeader = function ChatAIModalHeader(_ref) {
|
|
|
74
63
|
var user = useUser();
|
|
75
64
|
var amplitudEvent = useEvent();
|
|
76
65
|
var _useGlobalContext = useGlobalContext(),
|
|
77
|
-
selectedAgent = _useGlobalContext.agent
|
|
78
|
-
selectAgent = _useGlobalContext.selectAgent,
|
|
79
|
-
setProject = _useGlobalContext.setProject,
|
|
80
|
-
setClient = _useGlobalContext.setClient,
|
|
81
|
-
setTask = _useGlobalContext.setTask,
|
|
82
|
-
section = _useGlobalContext.section;
|
|
66
|
+
selectedAgent = _useGlobalContext.agent;
|
|
83
67
|
// En section 'task' el modal de Maia se eleva por encima del task panel (z-index 9800001).
|
|
84
68
|
// Los tooltips se montan en portal con z-index 1500 por defecto, así que quedarían detrás.
|
|
85
69
|
// Subimos su z-index sólo en este caso para que se vean por encima del modal.
|
|
86
70
|
var tooltipZIndex = useMaiaTaskPanelZIndex(1500, 'overlay');
|
|
87
|
-
var
|
|
88
|
-
_useState2 = _slicedToArray(_useState, 2),
|
|
89
|
-
isExpanded = _useState2[0],
|
|
90
|
-
setIsExpanded = _useState2[1];
|
|
91
|
-
var textRefAgent = useRef(null);
|
|
92
|
-
var dropdownRef = useRef(null);
|
|
93
|
-
var layoutMenuRef = useRef(null);
|
|
94
|
-
var _useState3 = useState(false),
|
|
95
|
-
_useState4 = _slicedToArray(_useState3, 2),
|
|
96
|
-
layoutMenuOpen = _useState4[0],
|
|
97
|
-
setLayoutMenuOpen = _useState4[1];
|
|
98
|
-
var _useResizeListener = useResizeListener(textRefAgent, [selectedAgent === null || selectedAgent === void 0 ? void 0 : selectedAgent.name]),
|
|
99
|
-
showTooltipAgent = _useResizeListener.showTooltip;
|
|
100
|
-
var agentsRef = useRef(null);
|
|
101
|
-
var agentsForSelector = useMemo(function () {
|
|
102
|
-
return filterAgentsForSelector(agents);
|
|
103
|
-
}, [agents]);
|
|
104
|
-
var userPermissions = user === null || user === void 0 || (_user$permissions = user.permissions) === null || _user$permissions === void 0 ? void 0 : _user$permissions.ai_agents;
|
|
105
|
-
var showHeaderCreateAgentButton = canShowHeaderCreateAgentButton(userPermissions === null || userPermissions === void 0 ? void 0 : userPermissions.create, Boolean(window.MAIA_CHAT_AI_FEATURE_ACCESS_MULTI_AGENTS), isMyAgentsSection, isMaiakerSection);
|
|
71
|
+
var showHeaderCreateAgentButton = canUserCreateAgents(user) && (isMyAgentsSection || isMaiakerSection);
|
|
106
72
|
var handleOpenCreateAgentModal = useCallback(function () {
|
|
107
73
|
amplitudEvent(EVENTS.openModal, {
|
|
108
74
|
option: 'create_agent'
|
|
109
75
|
});
|
|
110
|
-
|
|
111
|
-
detail: {
|
|
112
|
-
agentValues: {
|
|
113
|
-
values: {
|
|
114
|
-
isEditing: false
|
|
115
|
-
},
|
|
116
|
-
isOpen: true
|
|
117
|
-
}
|
|
118
|
-
}
|
|
119
|
-
}));
|
|
76
|
+
dispatchOpenCreateAgentModal();
|
|
120
77
|
}, [amplitudEvent]);
|
|
121
|
-
|
|
122
|
-
// Manejar scroll infinito para cargar más agents
|
|
123
|
-
useEffect(function () {
|
|
124
|
-
// Solo cuando el dropdown esté abierto
|
|
125
|
-
if (!isExpanded) {
|
|
126
|
-
return undefined;
|
|
127
|
-
}
|
|
128
|
-
var handleScroll = function handleScroll() {
|
|
129
|
-
if (!agentsRef.current || !loadMoreAgents || !hasMore || loadingMore) {
|
|
130
|
-
return;
|
|
131
|
-
}
|
|
132
|
-
var _agentsRef$current = agentsRef.current,
|
|
133
|
-
scrollTop = _agentsRef$current.scrollTop,
|
|
134
|
-
scrollHeight = _agentsRef$current.scrollHeight,
|
|
135
|
-
clientHeight = _agentsRef$current.clientHeight;
|
|
136
|
-
var distanceFromBottom = scrollHeight - scrollTop - clientHeight;
|
|
137
|
-
if (shouldLoadMoreAgentsOnScroll(distanceFromBottom)) {
|
|
138
|
-
loadMoreAgents();
|
|
139
|
-
}
|
|
140
|
-
};
|
|
141
|
-
|
|
142
|
-
// delay para asegurar que el DOM esté renderizado
|
|
143
|
-
var timeoutId = setTimeout(function () {
|
|
144
|
-
var scrollElement = agentsRef.current;
|
|
145
|
-
if (scrollElement) {
|
|
146
|
-
scrollElement.addEventListener('scroll', handleScroll);
|
|
147
|
-
}
|
|
148
|
-
}, 100);
|
|
149
|
-
return function () {
|
|
150
|
-
clearTimeout(timeoutId);
|
|
151
|
-
var scrollElement = agentsRef.current;
|
|
152
|
-
if (scrollElement) {
|
|
153
|
-
scrollElement.removeEventListener('scroll', handleScroll);
|
|
154
|
-
}
|
|
155
|
-
};
|
|
156
|
-
}, [isExpanded, loadMoreAgents, hasMore, loadingMore]);
|
|
157
|
-
var localAgents = useMemo(function () {
|
|
158
|
-
return resolveLocalSelectedAgent(agents, selectedAgent);
|
|
159
|
-
}, [agents, selectedAgent]);
|
|
160
|
-
|
|
161
|
-
// En 'Mis agentes' / 'Skills' sin agente seteado, el selector muestra el icono de MAIA y el nombre de la sección
|
|
162
|
-
// en lugar del agente, para que el usuario pueda abrir el dropdown y elegir uno.
|
|
163
|
-
var selectorIcon = (localAgents === null || localAgents === void 0 ? void 0 : localAgents.type) === 'custom' && !(localAgents !== null && localAgents !== void 0 && localAgents.is_legacy_context) ? localAgents === null || localAgents === void 0 ? void 0 : localAgents.emoji : /*#__PURE__*/_jsx(MAIAIcon, {});
|
|
164
|
-
var selectorLabel = resolveHeaderSelectorLabel(localAgents, isMyAgentsSection, isMySkillsSection, t('marketplace.myAgentsTitle', {
|
|
165
|
-
ns: SECTIONS.chatAI
|
|
166
|
-
}), t('conversations.mySkillsNav', {
|
|
167
|
-
ns: SECTIONS.chatAI
|
|
168
|
-
}));
|
|
169
|
-
var handleSelectAgent = useCallback(function (agent) {
|
|
170
|
-
selectAgent(agent);
|
|
171
|
-
amplitudEvent(EVENTS.aiChatAgentSelect, {
|
|
172
|
-
agent_type: agent === null || agent === void 0 ? void 0 : agent.type
|
|
173
|
-
});
|
|
174
|
-
setIsExpanded(false);
|
|
175
|
-
setProject(null);
|
|
176
|
-
setClient === null || setClient === void 0 || setClient(null);
|
|
177
|
-
setTask(null);
|
|
178
|
-
setTimeout(function () {
|
|
179
|
-
handleResetChat();
|
|
180
|
-
// Si el agente no depende de una entity (custom o clone+global) ya podemos
|
|
181
|
-
// resolver si existe una sesión previa y, en ese caso, navegar a ella.
|
|
182
|
-
// Para clone+project|client, la resolución ocurre en los selectors de entity.
|
|
183
|
-
if (!agentSelectionNeedsEntity(agent)) {
|
|
184
|
-
onAgentSelected === null || onAgentSelected === void 0 || onAgentSelected(agent);
|
|
185
|
-
}
|
|
186
|
-
}, 100);
|
|
187
|
-
}, [selectAgent, amplitudEvent, handleResetChat, setProject, setClient, setTask, onAgentSelected]);
|
|
188
|
-
var handleExpandModal = function handleExpandModal() {
|
|
189
|
-
if (!isExpanded) {
|
|
190
|
-
amplitudEvent(EVENTS.aiChatOpenAgentSelect);
|
|
191
|
-
// Cuando se abre el selector, ordenar los agentes
|
|
192
|
-
if (sortAgentsList) {
|
|
193
|
-
sortAgentsList();
|
|
194
|
-
}
|
|
195
|
-
}
|
|
196
|
-
setIsExpanded(function (prev) {
|
|
197
|
-
return !prev;
|
|
198
|
-
});
|
|
199
|
-
};
|
|
200
|
-
useEffect(function () {
|
|
201
|
-
if (!isExpanded && !layoutMenuOpen) {
|
|
202
|
-
return undefined;
|
|
203
|
-
}
|
|
204
|
-
var handleClickOutside = function handleClickOutside(event) {
|
|
205
|
-
var target = event.target;
|
|
206
|
-
if (isExpanded && dropdownRef.current && !dropdownRef.current.contains(target)) {
|
|
207
|
-
setIsExpanded(false);
|
|
208
|
-
}
|
|
209
|
-
if (layoutMenuOpen && layoutMenuRef.current && !layoutMenuRef.current.contains(target)) {
|
|
210
|
-
setLayoutMenuOpen(false);
|
|
211
|
-
}
|
|
212
|
-
};
|
|
213
|
-
document.addEventListener('mousedown', handleClickOutside);
|
|
214
|
-
return function () {
|
|
215
|
-
document.removeEventListener('mousedown', handleClickOutside);
|
|
216
|
-
};
|
|
217
|
-
}, [isExpanded, layoutMenuOpen]);
|
|
218
|
-
var handlePickLayout = useCallback(function (mode) {
|
|
219
|
-
amplitudEvent(EVENTS.projectResumeExpand, {
|
|
220
|
-
expanded: mode === 'fullscreen'
|
|
221
|
-
});
|
|
222
|
-
amplitudEvent(EVENTS.aiChatSelectViewOptions, {
|
|
223
|
-
option: mode
|
|
224
|
-
});
|
|
225
|
-
onLayoutModeChange(mode);
|
|
226
|
-
setLayoutMenuOpen(false);
|
|
227
|
-
}, [amplitudEvent, onLayoutModeChange]);
|
|
228
|
-
var cloneAgentsRoleBlocked = isMaiaCloneAgentsRoleBlocked(user, section);
|
|
229
|
-
var renderModal = function renderModal() {
|
|
230
|
-
return /*#__PURE__*/_jsxs(SCCAIMHWrapper, {
|
|
231
|
-
ref: dropdownRef,
|
|
232
|
-
"data-no-drag": "true",
|
|
233
|
-
onClick: agents.length ? handleExpandModal : undefined,
|
|
234
|
-
id: "chat-ai-modal-header-wrapper",
|
|
235
|
-
children: [/*#__PURE__*/_jsx(SCCAIMHSelectedAgent, {
|
|
236
|
-
children: /*#__PURE__*/_jsx(Tooltip, _objectSpread(_objectSpread({
|
|
237
|
-
title: showTooltipAgent ? /*#__PURE__*/_jsxs("span", {
|
|
238
|
-
style: {
|
|
239
|
-
display: 'flex',
|
|
240
|
-
alignItems: 'center',
|
|
241
|
-
gap: '4px'
|
|
242
|
-
},
|
|
243
|
-
children: [(localAgents === null || localAgents === void 0 ? void 0 : localAgents.type) === 'custom' && !(localAgents !== null && localAgents !== void 0 && localAgents.is_legacy_context) ? localAgents === null || localAgents === void 0 ? void 0 : localAgents.emoji : /*#__PURE__*/_jsx(MAIAIcon, {}), ' ', localAgents === null || localAgents === void 0 ? void 0 : localAgents.name]
|
|
244
|
-
}) : '',
|
|
245
|
-
placement: isExpanded ? 'left' : 'top'
|
|
246
|
-
}, tooltipZIndex != null ? {
|
|
247
|
-
zIndex: tooltipZIndex
|
|
248
|
-
} : {}), {}, {
|
|
249
|
-
children: /*#__PURE__*/_jsx(SCCAIMHSelectedAgentText, {
|
|
250
|
-
ref: textRefAgent,
|
|
251
|
-
isAgentDeleted: !!(selectedAgent !== null && selectedAgent !== void 0 && selectedAgent.is_deleted) || !!(selectedAgent !== null && selectedAgent !== void 0 && selectedAgent.has_not_permissions) || !!(selectedAgent !== null && selectedAgent !== void 0 && selectedAgent.has_not_access) || !!(selectedAgent !== null && selectedAgent !== void 0 && selectedAgent.is_legacy_context),
|
|
252
|
-
children: /*#__PURE__*/_jsxs("span", {
|
|
253
|
-
style: {
|
|
254
|
-
display: 'flex',
|
|
255
|
-
alignItems: 'center',
|
|
256
|
-
gap: '4px'
|
|
257
|
-
},
|
|
258
|
-
children: [selectorIcon, " ", selectorLabel]
|
|
259
|
-
})
|
|
260
|
-
})
|
|
261
|
-
}))
|
|
262
|
-
}), /*#__PURE__*/_jsx(SCCAIMHWrapperIcon, {
|
|
263
|
-
children: /*#__PURE__*/_jsx(ChevronDown, {
|
|
264
|
-
width: 14,
|
|
265
|
-
height: 14,
|
|
266
|
-
color: "#20201F"
|
|
267
|
-
})
|
|
268
|
-
}), isExpanded && /*#__PURE__*/_jsx(SCCAIMHWrapperModal, {
|
|
269
|
-
children: /*#__PURE__*/_jsxs(SCCAIMHWrapperModalContent, {
|
|
270
|
-
children: [window.MAIA_CHAT_AI_FEATURE_ACCESS && !cloneAgentsRoleBlocked && /*#__PURE__*/_jsx(_Fragment, {
|
|
271
|
-
children: function () {
|
|
272
|
-
var maiaAgents = agentsForSelector.filter(isMaiaOrchestratorAgent);
|
|
273
|
-
if (!maiaAgents.length) return null;
|
|
274
|
-
return /*#__PURE__*/_jsx(_Fragment, {
|
|
275
|
-
children: maiaAgents.map(function (maiaAgent, index) {
|
|
276
|
-
return /*#__PURE__*/_jsx(ChatAIAgentOption, {
|
|
277
|
-
agent: maiaAgent,
|
|
278
|
-
index: index,
|
|
279
|
-
handleSelectAgent: handleSelectAgent,
|
|
280
|
-
isSelected: (selectedAgent === null || selectedAgent === void 0 ? void 0 : selectedAgent.id) === maiaAgent.id,
|
|
281
|
-
isMaia: true,
|
|
282
|
-
onFavoriteToggle: onAgentUpdate
|
|
283
|
-
}, "agent-".concat(maiaAgent.id));
|
|
284
|
-
})
|
|
285
|
-
});
|
|
286
|
-
}()
|
|
287
|
-
}), agentsForSelector.some(function (agent) {
|
|
288
|
-
return agent.type === 'custom';
|
|
289
|
-
}) && window.MAIA_CHAT_AI_FEATURE_ACCESS_MULTI_AGENTS && /*#__PURE__*/_jsxs(_Fragment, {
|
|
290
|
-
children: [/*#__PURE__*/_jsxs(SCCAIMHWrapperModalContentTitle, {
|
|
291
|
-
children: [t('agents'), " by ", user.company]
|
|
292
|
-
}), /*#__PURE__*/_jsx(SCCAIMHDivider, {})]
|
|
293
|
-
}), /*#__PURE__*/_jsxs(SCCAIMHAgentsList, {
|
|
294
|
-
hasMore: hasMore,
|
|
295
|
-
agentsCount: agentsForSelector.length,
|
|
296
|
-
ref: agentsRef,
|
|
297
|
-
children: [agentsForSelector === null || agentsForSelector === void 0 ? void 0 : agentsForSelector.map(function (agent, index) {
|
|
298
|
-
if (!shouldRenderAgentDropdownItem({
|
|
299
|
-
agent: agent,
|
|
300
|
-
multiAgentsAccess: Boolean(window.MAIA_CHAT_AI_FEATURE_ACCESS_MULTI_AGENTS)
|
|
301
|
-
})) {
|
|
302
|
-
return null;
|
|
303
|
-
}
|
|
304
|
-
return /*#__PURE__*/_jsx(ChatAIAgentOption, {
|
|
305
|
-
agent: agent,
|
|
306
|
-
index: index,
|
|
307
|
-
handleSelectAgent: handleSelectAgent,
|
|
308
|
-
isSelected: (selectedAgent === null || selectedAgent === void 0 ? void 0 : selectedAgent.id) === agent.id,
|
|
309
|
-
onFavoriteToggle: onAgentUpdate,
|
|
310
|
-
setIsExpanded: setIsExpanded
|
|
311
|
-
}, "agent-".concat(agent.id));
|
|
312
|
-
}), loadingMore && /*#__PURE__*/_jsx(SCCAIMHLoaderWrapper, {
|
|
313
|
-
children: /*#__PURE__*/_jsx(Loader, {
|
|
314
|
-
size: "small"
|
|
315
|
-
})
|
|
316
|
-
})]
|
|
317
|
-
}), shouldShowDropdownAddAgentFooter({
|
|
318
|
-
canCreate: userPermissions === null || userPermissions === void 0 ? void 0 : userPermissions.create,
|
|
319
|
-
multiAgentsAccess: Boolean(window.MAIA_CHAT_AI_FEATURE_ACCESS_MULTI_AGENTS),
|
|
320
|
-
isMyAgentsSection: isMyAgentsSection,
|
|
321
|
-
isMySkillsSection: isMySkillsSection,
|
|
322
|
-
isMaiakerSection: isMaiakerSection
|
|
323
|
-
}) && /*#__PURE__*/_jsxs(SCCAIMHAddAgent, {
|
|
324
|
-
onClick: function onClick() {
|
|
325
|
-
setIsExpanded(false);
|
|
326
|
-
amplitudEvent(EVENTS.openModal, {
|
|
327
|
-
option: 'create_agent'
|
|
328
|
-
});
|
|
329
|
-
document.dispatchEvent(new CustomEvent('abm-agent-modal-set-values', {
|
|
330
|
-
detail: {
|
|
331
|
-
agentValues: {
|
|
332
|
-
values: {
|
|
333
|
-
isEditing: false
|
|
334
|
-
},
|
|
335
|
-
isOpen: true
|
|
336
|
-
}
|
|
337
|
-
}
|
|
338
|
-
}));
|
|
339
|
-
},
|
|
340
|
-
children: [/*#__PURE__*/_jsx(SCCAIMHPlusIconWrapper, {
|
|
341
|
-
children: /*#__PURE__*/_jsx(Plus, {
|
|
342
|
-
color: "white",
|
|
343
|
-
width: 18,
|
|
344
|
-
height: 18
|
|
345
|
-
})
|
|
346
|
-
}), t('createAgent')]
|
|
347
|
-
})]
|
|
348
|
-
})
|
|
349
|
-
})]
|
|
350
|
-
});
|
|
351
|
-
};
|
|
352
|
-
var shouldRenderSelector = shouldRenderHeaderAgentSelector({
|
|
78
|
+
var shouldRenderSelector = shouldShowAgentSelector({
|
|
353
79
|
hasError: hasError,
|
|
354
80
|
loading: loading,
|
|
355
81
|
hideAgentSelector: hideAgentSelector,
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
isMySkillsSection: isMySkillsSection,
|
|
359
|
-
multiAgentsAccess: Boolean(window.MAIA_CHAT_AI_FEATURE_ACCESS_MULTI_AGENTS),
|
|
360
|
-
legacyMaiaAccess: Boolean(window.MAIA_CHAT_AI_FEATURE_ACCESS)
|
|
82
|
+
hasSelectedAgent: !!selectedAgent,
|
|
83
|
+
isAgentsSection: isMyAgentsSection || isMySkillsSection
|
|
361
84
|
});
|
|
362
|
-
|
|
85
|
+
var dragHandlers = draggable ? {
|
|
86
|
+
onPointerDown: onDragStart,
|
|
87
|
+
onPointerMove: onDragMove,
|
|
88
|
+
onPointerUp: onDragEnd,
|
|
89
|
+
onPointerCancel: onDragEnd,
|
|
90
|
+
onLostPointerCapture: onDragEnd,
|
|
91
|
+
style: {
|
|
92
|
+
cursor: 'grab',
|
|
93
|
+
touchAction: 'manipulation'
|
|
94
|
+
}
|
|
95
|
+
} : {};
|
|
96
|
+
return /*#__PURE__*/_jsxs(SCCAIMHModal, _objectSpread(_objectSpread({
|
|
363
97
|
$hasError: hasError,
|
|
364
98
|
$loading: loading,
|
|
365
|
-
$hasAgents: !!agents.length
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
99
|
+
$hasAgents: !!agents.length
|
|
100
|
+
}, dragHandlers), {}, {
|
|
101
|
+
children: [shouldRenderSelector ? /*#__PURE__*/_jsx(ChatAiModalHeaderAgentSelector, {
|
|
102
|
+
agents: agents,
|
|
103
|
+
hasMore: hasMore,
|
|
104
|
+
loadingMore: loadingMore,
|
|
105
|
+
isMyAgentsSection: isMyAgentsSection,
|
|
106
|
+
isMySkillsSection: isMySkillsSection,
|
|
107
|
+
isMaiakerSection: isMaiakerSection,
|
|
108
|
+
tooltipZIndex: tooltipZIndex,
|
|
109
|
+
handleResetChat: handleResetChat,
|
|
110
|
+
onAgentUpdate: onAgentUpdate,
|
|
111
|
+
loadMoreAgents: loadMoreAgents,
|
|
112
|
+
sortAgentsList: sortAgentsList,
|
|
113
|
+
onAgentSelected: onAgentSelected
|
|
114
|
+
}) : /*#__PURE__*/_jsx("div", {}), /*#__PURE__*/_jsxs(SCCAIMHWrapperButton, {
|
|
376
115
|
"data-no-drag": "true",
|
|
377
|
-
children: [showBackButton
|
|
116
|
+
children: [showBackButton ? /*#__PURE__*/_jsxs(SCCAIMHBackButton, {
|
|
378
117
|
type: "button",
|
|
379
118
|
onClick: function onClick() {
|
|
380
|
-
onBack();
|
|
119
|
+
return onBack();
|
|
381
120
|
},
|
|
382
121
|
children: [/*#__PURE__*/_jsx(ChevronLeft, {
|
|
383
122
|
width: 14,
|
|
384
123
|
height: 14,
|
|
385
124
|
color: "#343433"
|
|
386
125
|
}), t('back')]
|
|
387
|
-
}), showHeaderCreateAgentButton
|
|
126
|
+
}) : null, showHeaderCreateAgentButton ? /*#__PURE__*/_jsx(SCCAIMHCreateAgentButton, {
|
|
388
127
|
type: "button",
|
|
389
128
|
onClick: handleOpenCreateAgentModal,
|
|
390
129
|
children: /*#__PURE__*/_jsx(SCCAIMHCreateAgentButtonText, {
|
|
391
130
|
children: t('openAgentCreator')
|
|
392
131
|
})
|
|
393
|
-
}),
|
|
394
|
-
children: [/*#__PURE__*/
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
buttonId: "btn-maia-layout-menu",
|
|
399
|
-
handleClick: function handleClick() {
|
|
400
|
-
if (!layoutMenuOpen) {
|
|
401
|
-
amplitudEvent(EVENTS.aiChatOpenViewOptions);
|
|
402
|
-
}
|
|
403
|
-
setLayoutMenuOpen(function (prev) {
|
|
404
|
-
return !prev;
|
|
405
|
-
});
|
|
406
|
-
},
|
|
407
|
-
tooltip: t('layoutMenuTooltip'),
|
|
408
|
-
disableTooltip: layoutMenuOpen,
|
|
409
|
-
tooltipZIndex: tooltipZIndex,
|
|
410
|
-
children: /*#__PURE__*/_jsx(MaiaChatLayoutMenuIcon, {})
|
|
411
|
-
}), layoutMenuOpen ? /*#__PURE__*/_jsxs(SCCAIMHLayoutMenuPanel, {
|
|
412
|
-
role: "menu",
|
|
413
|
-
children: [/*#__PURE__*/_jsxs(SCCAIMHLayoutMenuRow, {
|
|
414
|
-
type: "button",
|
|
415
|
-
$active: layoutMode === 'sidebar',
|
|
416
|
-
onClick: function onClick() {
|
|
417
|
-
return handlePickLayout('sidebar');
|
|
418
|
-
},
|
|
419
|
-
children: [/*#__PURE__*/_jsx(SCCAIMHLayoutMenuRowIcon, {
|
|
420
|
-
"aria-hidden": true,
|
|
421
|
-
children: /*#__PURE__*/_jsx(MaiaChatLayoutSidebarIcon, {})
|
|
422
|
-
}), t('layoutSidebar')]
|
|
423
|
-
}), /*#__PURE__*/_jsxs(SCCAIMHLayoutMenuRow, {
|
|
424
|
-
type: "button",
|
|
425
|
-
$active: layoutMode === 'fullscreen',
|
|
426
|
-
onClick: function onClick() {
|
|
427
|
-
return handlePickLayout('fullscreen');
|
|
428
|
-
},
|
|
429
|
-
children: [/*#__PURE__*/_jsx(SCCAIMHLayoutMenuRowIcon, {
|
|
430
|
-
"aria-hidden": true,
|
|
431
|
-
children: /*#__PURE__*/_jsx(MaiaChatLayoutFullscreenIcon, {})
|
|
432
|
-
}), t('layoutFullscreen')]
|
|
433
|
-
}), /*#__PURE__*/_jsxs(SCCAIMHLayoutMenuRow, {
|
|
434
|
-
type: "button",
|
|
435
|
-
$active: layoutMode === 'floating',
|
|
436
|
-
onClick: function onClick() {
|
|
437
|
-
return handlePickLayout('floating');
|
|
438
|
-
},
|
|
439
|
-
children: [/*#__PURE__*/_jsx(SCCAIMHLayoutMenuRowIcon, {
|
|
440
|
-
"aria-hidden": true,
|
|
441
|
-
children: /*#__PURE__*/_jsx(MaiaChatLayoutFloatingIcon, {})
|
|
442
|
-
}), t('layoutFloating')]
|
|
443
|
-
})]
|
|
444
|
-
}) : null]
|
|
132
|
+
}) : null, hideControls ? null : /*#__PURE__*/_jsxs(_Fragment, {
|
|
133
|
+
children: [/*#__PURE__*/_jsx(ChatAiModalHeaderLayoutMenu, {
|
|
134
|
+
layoutMode: layoutMode,
|
|
135
|
+
onLayoutModeChange: onLayoutModeChange,
|
|
136
|
+
tooltipZIndex: tooltipZIndex
|
|
445
137
|
}), handleMinimize ? /*#__PURE__*/_jsx(IconButton, {
|
|
446
138
|
handleClick: handleMinimize,
|
|
447
139
|
tooltip: t('globals.minimize'),
|
|
@@ -455,6 +147,6 @@ export var ChatAIModalHeader = function ChatAIModalHeader(_ref) {
|
|
|
455
147
|
}) : null]
|
|
456
148
|
})]
|
|
457
149
|
})]
|
|
458
|
-
});
|
|
150
|
+
}));
|
|
459
151
|
};
|
|
460
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1c2VFZmZlY3QiLCJ1c2VSZWYiLCJ1c2VTdGF0ZSIsInVzZUNhbGxiYWNrIiwidXNlTWVtbyIsIlRvb2x0aXAiLCJTdGF0dXMiLCJDaGV2cm9uRG93biIsIkNoZXZyb25MZWZ0IiwiUGx1cyIsInVzZVRyYW5zbGF0aW9uIiwiU0VDVElPTlMiLCJ1c2VHbG9iYWxDb250ZXh0IiwidXNlUmVzaXplTGlzdGVuZXIiLCJJY29uQnV0dG9uIiwiTUFJQUljb24iLCJNYWlhQ2hhdExheW91dE1lbnVJY29uIiwiTWFpYUNoYXRMYXlvdXRTaWRlYmFySWNvbiIsIk1haWFDaGF0TGF5b3V0RnVsbHNjcmVlbkljb24iLCJNYWlhQ2hhdExheW91dEZsb2F0aW5nSWNvbiIsIkNoYXRBSUFnZW50T3B0aW9uIiwiU0NDQUlNSE1vZGFsIiwiU0NDQUlNSFNlbGVjdGVkQWdlbnQiLCJTQ0NBSU1IU2VsZWN0ZWRBZ2VudFRleHQiLCJTQ0NBSU1IV3JhcHBlciIsIlNDQ0FJTUhXcmFwcGVyQnV0dG9uIiwiU0NDQUlNSFdyYXBwZXJJY29uIiwiU0NDQUlNSFdyYXBwZXJNb2RhbCIsIlNDQ0FJTUhXcmFwcGVyTW9kYWxDb250ZW50IiwiU0NDQUlNSFdyYXBwZXJNb2RhbENvbnRlbnRUaXRsZSIsIlNDQ0FJTUhBZGRBZ2VudCIsIlNDQ0FJTUhDcmVhdGVBZ2VudEJ1dHRvbiIsIlNDQ0FJTUhDcmVhdGVBZ2VudEJ1dHRvblRleHQiLCJTQ0NBSU1IRGl2aWRlciIsIlNDQ0FJTUhBZ2VudHNMaXN0IiwiU0NDQUlNSExvYWRlcldyYXBwZXIiLCJTQ0NBSU1IUGx1c0ljb25XcmFwcGVyIiwiU0NDQUlNSExheW91dE1lbnVBbmNob3IiLCJTQ0NBSU1ITGF5b3V0TWVudVBhbmVsIiwiU0NDQUlNSExheW91dE1lbnVSb3ciLCJTQ0NBSU1ITGF5b3V0TWVudVJvd0ljb24iLCJTQ0NBSU1IQmFja0J1dHRvbiIsIlNDQ0FJTUhNaW5pbWl6ZUljb24iLCJFVkVOVFMiLCJ1c2VFdmVudCIsInVzZVVzZXIiLCJpc01haWFDbG9uZUFnZW50c1JvbGVCbG9ja2VkIiwiTG9hZGVyIiwidXNlTWFpYVRhc2tQYW5lbFpJbmRleCIsImNhblNob3dIZWFkZXJDcmVhdGVBZ2VudEJ1dHRvbiIsImZpbHRlckFnZW50c0ZvclNlbGVjdG9yIiwiaXNNYWlhT3JjaGVzdHJhdG9yQWdlbnQiLCJyZXNvbHZlSGVhZGVyU2VsZWN0b3JMYWJlbCIsInJlc29sdmVMb2NhbFNlbGVjdGVkQWdlbnQiLCJhZ2VudFNlbGVjdGlvbk5lZWRzRW50aXR5Iiwic2hvdWxkUmVuZGVySGVhZGVyQWdlbnRTZWxlY3RvciIsInNob3VsZExvYWRNb3JlQWdlbnRzT25TY3JvbGwiLCJzaG91bGRSZW5kZXJBZ2VudERyb3Bkb3duSXRlbSIsInNob3VsZFNob3dEcm9wZG93bkFkZEFnZW50Rm9vdGVyIiwianN4IiwiX2pzeCIsImpzeHMiLCJfanN4cyIsIkZyYWdtZW50IiwiX0ZyYWdtZW50IiwiQ2hhdEFJTW9kYWxIZWFkZXIiLCJfcmVmIiwiX3VzZXIkcGVybWlzc2lvbnMiLCJsYXlvdXRNb2RlIiwib25MYXlvdXRNb2RlQ2hhbmdlIiwiX3JlZiRkcmFnZ2FibGUiLCJkcmFnZ2FibGUiLCJvbkRyYWdTdGFydCIsIm9uRHJhZ01vdmUiLCJvbkRyYWdFbmQiLCJoYW5kbGVNaW5pbWl6ZSIsIl9yZWYkYWdlbnRzIiwiYWdlbnRzIiwiX3JlZiRoYXNFcnJvciIsImhhc0Vycm9yIiwiX3JlZiRsb2FkaW5nIiwibG9hZGluZyIsIl9yZWYkbG9hZGluZ01vcmUiLCJsb2FkaW5nTW9yZSIsIl9yZWYkaGFzTW9yZSIsImhhc01vcmUiLCJoYW5kbGVSZXNldENoYXQiLCJvbkFnZW50VXBkYXRlIiwibG9hZE1vcmVBZ2VudHMiLCJzb3J0QWdlbnRzTGlzdCIsIl9yZWYkaXNNeUFnZW50c1NlY3RpbyIsImlzTXlBZ2VudHNTZWN0aW9uIiwiX3JlZiRpc015U2tpbGxzU2VjdGlvIiwiaXNNeVNraWxsc1NlY3Rpb24iLCJfcmVmJGlzTWFpYWtlclNlY3Rpb24iLCJpc01haWFrZXJTZWN0aW9uIiwiX3JlZiRoaWRlQWdlbnRTZWxlY3RvIiwiaGlkZUFnZW50U2VsZWN0b3IiLCJfcmVmJGhpZGVDb250cm9scyIsImhpZGVDb250cm9scyIsIm9uQWdlbnRTZWxlY3RlZCIsIl9yZWYkc2hvd0JhY2tCdXR0b24iLCJzaG93QmFja0J1dHRvbiIsIl9yZWYkb25CYWNrIiwib25CYWNrIiwiX3VzZVRyYW5zbGF0aW9uIiwiYWJtQWdlbnQiLCJjaGF0QUkiLCJ0IiwidXNlciIsImFtcGxpdHVkRXZlbnQiLCJfdXNlR2xvYmFsQ29udGV4dCIsInNlbGVjdGVkQWdlbnQiLCJhZ2VudCIsInNlbGVjdEFnZW50Iiwic2V0UHJvamVjdCIsInNldENsaWVudCIsInNldFRhc2siLCJzZWN0aW9uIiwidG9vbHRpcFpJbmRleCIsIl91c2VTdGF0ZSIsIl91c2VTdGF0ZTIiLCJfc2xpY2VkVG9BcnJheSIsImlzRXhwYW5kZWQiLCJzZXRJc0V4cGFuZGVkIiwidGV4dFJlZkFnZW50IiwiZHJvcGRvd25SZWYiLCJsYXlvdXRNZW51UmVmIiwiX3VzZVN0YXRlMyIsIl91c2VTdGF0ZTQiLCJsYXlvdXRNZW51T3BlbiIsInNldExheW91dE1lbnVPcGVuIiwiX3VzZVJlc2l6ZUxpc3RlbmVyIiwibmFtZSIsInNob3dUb29sdGlwQWdlbnQiLCJzaG93VG9vbHRpcCIsImFnZW50c1JlZiIsImFnZW50c0ZvclNlbGVjdG9yIiwidXNlclBlcm1pc3Npb25zIiwicGVybWlzc2lvbnMiLCJhaV9hZ2VudHMiLCJzaG93SGVhZGVyQ3JlYXRlQWdlbnRCdXR0b24iLCJjcmVhdGUiLCJCb29sZWFuIiwid2luZG93IiwiTUFJQV9DSEFUX0FJX0ZFQVRVUkVfQUNDRVNTX01VTFRJX0FHRU5UUyIsImhhbmRsZU9wZW5DcmVhdGVBZ2VudE1vZGFsIiwib3Blbk1vZGFsIiwib3B0aW9uIiwiZG9jdW1lbnQiLCJkaXNwYXRjaEV2ZW50IiwiQ3VzdG9tRXZlbnQiLCJkZXRhaWwiLCJhZ2VudFZhbHVlcyIsInZhbHVlcyIsImlzRWRpdGluZyIsImlzT3BlbiIsInVuZGVmaW5lZCIsImhhbmRsZVNjcm9sbCIsImN1cnJlbnQiLCJfYWdlbnRzUmVmJGN1cnJlbnQiLCJzY3JvbGxUb3AiLCJzY3JvbGxIZWlnaHQiLCJjbGllbnRIZWlnaHQiLCJkaXN0YW5jZUZyb21Cb3R0b20iLCJ0aW1lb3V0SWQiLCJzZXRUaW1lb3V0Iiwic2Nyb2xsRWxlbWVudCIsImFkZEV2ZW50TGlzdGVuZXIiLCJjbGVhclRpbWVvdXQiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwibG9jYWxBZ2VudHMiLCJzZWxlY3Rvckljb24iLCJ0eXBlIiwiaXNfbGVnYWN5X2NvbnRleHQiLCJlbW9qaSIsInNlbGVjdG9yTGFiZWwiLCJucyIsImhhbmRsZVNlbGVjdEFnZW50IiwiYWlDaGF0QWdlbnRTZWxlY3QiLCJhZ2VudF90eXBlIiwiaGFuZGxlRXhwYW5kTW9kYWwiLCJhaUNoYXRPcGVuQWdlbnRTZWxlY3QiLCJwcmV2IiwiaGFuZGxlQ2xpY2tPdXRzaWRlIiwiZXZlbnQiLCJ0YXJnZXQiLCJjb250YWlucyIsImhhbmRsZVBpY2tMYXlvdXQiLCJtb2RlIiwicHJvamVjdFJlc3VtZUV4cGFuZCIsImV4cGFuZGVkIiwiYWlDaGF0U2VsZWN0Vmlld09wdGlvbnMiLCJjbG9uZUFnZW50c1JvbGVCbG9ja2VkIiwicmVuZGVyTW9kYWwiLCJyZWYiLCJvbkNsaWNrIiwibGVuZ3RoIiwiaWQiLCJjaGlsZHJlbiIsIl9vYmplY3RTcHJlYWQiLCJ0aXRsZSIsInN0eWxlIiwiZGlzcGxheSIsImFsaWduSXRlbXMiLCJnYXAiLCJwbGFjZW1lbnQiLCJ6SW5kZXgiLCJpc0FnZW50RGVsZXRlZCIsImlzX2RlbGV0ZWQiLCJoYXNfbm90X3Blcm1pc3Npb25zIiwiaGFzX25vdF9hY2Nlc3MiLCJ3aWR0aCIsImhlaWdodCIsImNvbG9yIiwiTUFJQV9DSEFUX0FJX0ZFQVRVUkVfQUNDRVNTIiwibWFpYUFnZW50cyIsImZpbHRlciIsIm1hcCIsIm1haWFBZ2VudCIsImluZGV4IiwiaXNTZWxlY3RlZCIsImlzTWFpYSIsIm9uRmF2b3JpdGVUb2dnbGUiLCJjb25jYXQiLCJzb21lIiwiY29tcGFueSIsImFnZW50c0NvdW50IiwibXVsdGlBZ2VudHNBY2Nlc3MiLCJzaXplIiwiY2FuQ3JlYXRlIiwic2hvdWxkUmVuZGVyU2VsZWN0b3IiLCJsZWdhY3lNYWlhQWNjZXNzIiwiJGhhc0Vycm9yIiwiJGxvYWRpbmciLCIkaGFzQWdlbnRzIiwib25Qb2ludGVyRG93biIsIm9uUG9pbnRlck1vdmUiLCJvblBvaW50ZXJVcCIsIm9uUG9pbnRlckNhbmNlbCIsIm9uTG9zdFBvaW50ZXJDYXB0dXJlIiwiY3Vyc29yIiwidG91Y2hBY3Rpb24iLCJidXR0b25JZCIsImhhbmRsZUNsaWNrIiwiYWlDaGF0T3BlblZpZXdPcHRpb25zIiwidG9vbHRpcCIsImRpc2FibGVUb29sdGlwIiwicm9sZSIsIiRhY3RpdmUiXSwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50cy9tb2xlY3VsZXMvQ2hhdEFJTW9kYWwvY29tcG9uZW50cy9DaGF0QWlNb2RhbEhlYWRlci9DaGF0QWlNb2RhbEhlYWRlci50c3giXSwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L2luZGVudCAqL1xuLyogZXNsaW50LWRpc2FibGUgbm8tbmVzdGVkLXRlcm5hcnkgKi9cbmltcG9ydCB7IHVzZUVmZmVjdCwgdXNlUmVmLCB1c2VTdGF0ZSwgdXNlQ2FsbGJhY2ssIHVzZU1lbW8sIFBvaW50ZXJFdmVudCBhcyBSZWFjdFBvaW50ZXJFdmVudCB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgVG9vbHRpcCB9IGZyb20gJ0Bwcm9qZWN0Y29yL3Rvb2x0aXB2Mi9saWIvY29tcG9uZW50cy9Ub29sdGlwJ1xuaW1wb3J0IHsgU3RhdHVzIH0gZnJvbSAnQHByb2plY3Rjb3IvaWNvbnMvbGliL2NvbXBvbmVudHMvU3RhdHVzJ1xuaW1wb3J0IHsgQ2hldnJvbkRvd24gfSBmcm9tICdAcHJvamVjdGNvci9pY29ucy9saWIvY29tcG9uZW50cy9DaGV2cm9uRG93bidcbmltcG9ydCB7IENoZXZyb25MZWZ0IH0gZnJvbSAnQHByb2plY3Rjb3IvaWNvbnMvbGliL2NvbXBvbmVudHMvQ2hldnJvbkxlZnQnXG5pbXBvcnQgeyBQbHVzIH0gZnJvbSAnQHByb2plY3Rjb3IvaWNvbnMvbGliL2NvbXBvbmVudHMvUGx1cydcbmltcG9ydCB7IHVzZVRyYW5zbGF0aW9uIH0gZnJvbSAncmVhY3QtaTE4bmV4dCdcbmltcG9ydCB7IFNFQ1RJT05TIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vY29uc3RhbnRzL2NvbmZpZydcbmltcG9ydCB7IHVzZUdsb2JhbENvbnRleHQgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi9jb250ZXh0L2dsb2JhbC1jb250ZXh0J1xuaW1wb3J0IHsgdXNlUmVzaXplTGlzdGVuZXIgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi9ob29rcy91c2VSZXNpemUnXG5pbXBvcnQgeyBJY29uQnV0dG9uIH0gZnJvbSAnLi4vLi4vLi4vLi4vYXRvbXMvSWNvbkJ1dHRvbidcbmltcG9ydCB7IE1BSUFJY29uLCBNYWlhQ2hhdExheW91dE1lbnVJY29uIH0gZnJvbSAnLi4vLi4vLi4vLi4vYXRvbXMvaWNvbnMnXG5pbXBvcnQgeyBNYWlhQ2hhdExheW91dFNpZGViYXJJY29uIH0gZnJvbSAnLi4vLi4vLi4vLi4vYXRvbXMvaWNvbnMvTWFpYUNoYXRMYXlvdXRTaWRlYmFySWNvbidcbmltcG9ydCB7IE1haWFDaGF0TGF5b3V0RnVsbHNjcmVlbkljb24gfSBmcm9tICcuLi8uLi8uLi8uLi9hdG9tcy9pY29ucy9NYWlhQ2hhdExheW91dEZ1bGxzY3JlZW5JY29uJ1xuaW1wb3J0IHsgTWFpYUNoYXRMYXlvdXRGbG9hdGluZ0ljb24gfSBmcm9tICcuLi8uLi8uLi8uLi9hdG9tcy9pY29ucy9NYWlhQ2hhdExheW91dEZsb2F0aW5nSWNvbidcbmltcG9ydCB7IENoYXRBSUFnZW50T3B0aW9uIH0gZnJvbSAnLi4vQ2hhdEFpQWdlbnRPcHRpb25zL0NoYXRBaUFnZW50T3B0aW9ucydcbmltcG9ydCB7XG4gIFNDQ0FJTUhNb2RhbCxcbiAgU0NDQUlNSFNlbGVjdGVkQWdlbnQsXG4gIFNDQ0FJTUhTZWxlY3RlZEFnZW50VGV4dCxcbiAgU0NDQUlNSFdyYXBwZXIsXG4gIFNDQ0FJTUhXcmFwcGVyQnV0dG9uLFxuICBTQ0NBSU1IV3JhcHBlckljb24sXG4gIFNDQ0FJTUhXcmFwcGVyTW9kYWwsXG4gIFNDQ0FJTUhXcmFwcGVyTW9kYWxDb250ZW50LFxuICBTQ0NBSU1IV3JhcHBlck1vZGFsQ29udGVudFRpdGxlLFxuICBTQ0NBSU1IQWRkQWdlbnQsXG4gIFNDQ0FJTUhDcmVhdGVBZ2VudEJ1dHRvbixcbiAgU0NDQUlNSENyZWF0ZUFnZW50QnV0dG9uVGV4dCxcbiAgU0NDQUlNSERpdmlkZXIsXG4gIFNDQ0FJTUhBZ2VudHNMaXN0LFxuICBTQ0NBSU1ITG9hZGVyV3JhcHBlcixcbiAgU0NDQUlNSFBsdXNJY29uV3JhcHBlcixcbiAgU0NDQUlNSExheW91dE1lbnVBbmNob3IsXG4gIFNDQ0FJTUhMYXlvdXRNZW51UGFuZWwsXG4gIFNDQ0FJTUhMYXlvdXRNZW51Um93LFxuICBTQ0NBSU1ITGF5b3V0TWVudVJvd0ljb24sXG4gIFNDQ0FJTUhCYWNrQnV0dG9uLFxuICBTQ0NBSU1ITWluaW1pemVJY29uLFxufSBmcm9tICcuL0NoYXRBaU1vZGFsSGVhZGVyLnN0eWxlcydcbmltcG9ydCB0eXBlIHsgTWFpYUNoYXRNb2RhbExheW91dE1vZGUgfSBmcm9tICcuLi8uLi9sYXlvdXQnXG5pbXBvcnQgeyBFVkVOVFMsIHVzZUV2ZW50IH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vaG9va3MvdXNlRXZlbnQnXG5pbXBvcnQgeyB1c2VVc2VyIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vY29udGV4dC9jb3ItdXNlcidcbmltcG9ydCB7IGlzTWFpYUNsb25lQWdlbnRzUm9sZUJsb2NrZWQgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi9jb25zdGFudHMvbWFpYVRhc2tQYW5lbEFjY2VzcydcbmltcG9ydCB7IEFnZW50IH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vdHlwZXMvYWdlbnQnXG5pbXBvcnQgeyBMb2FkZXIgfSBmcm9tICcuLi8uLi8uLi8uLi9hdG9tcy9Mb2FkZXInXG5pbXBvcnQgeyB1c2VNYWlhVGFza1BhbmVsWkluZGV4IH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vaG9va3MvdXNlTWFpYVRhc2tQYW5lbFpJbmRleCdcbmltcG9ydCB7XG4gIGNhblNob3dIZWFkZXJDcmVhdGVBZ2VudEJ1dHRvbixcbiAgZmlsdGVyQWdlbnRzRm9yU2VsZWN0b3IsXG4gIGlzTWFpYU9yY2hlc3RyYXRvckFnZW50LFxuICByZXNvbHZlSGVhZGVyU2VsZWN0b3JMYWJlbCxcbiAgcmVzb2x2ZUxvY2FsU2VsZWN0ZWRBZ2VudCxcbiAgYWdlbnRTZWxlY3Rpb25OZWVkc0VudGl0eSxcbiAgc2hvdWxkUmVuZGVySGVhZGVyQWdlbnRTZWxlY3RvcixcbiAgc2hvdWxkTG9hZE1vcmVBZ2VudHNPblNjcm9sbCxcbiAgc2hvdWxkUmVuZGVyQWdlbnREcm9wZG93bkl0ZW0sXG4gIHNob3VsZFNob3dEcm9wZG93bkFkZEFnZW50Rm9vdGVyLFxufSBmcm9tICcuL0NoYXRBaU1vZGFsSGVhZGVyLmhlbHBlcnMnXG5cbmV4cG9ydCBjb25zdCBDaGF0QUlNb2RhbEhlYWRlciA9ICh7XG4gIGxheW91dE1vZGUsXG4gIG9uTGF5b3V0TW9kZUNoYW5nZSxcbiAgZHJhZ2dhYmxlID0gZmFsc2UsXG4gIG9uRHJhZ1N0YXJ0LFxuICBvbkRyYWdNb3ZlLFxuICBvbkRyYWdFbmQsXG4gIGhhbmRsZU1pbmltaXplLFxuICBhZ2VudHMgPSBbXSxcbiAgaGFzRXJyb3IgPSBmYWxzZSxcbiAgbG9hZGluZyA9IGZhbHNlLFxuICBsb2FkaW5nTW9yZSA9IGZhbHNlLFxuICBoYXNNb3JlID0gZmFsc2UsXG4gIGhhbmRsZVJlc2V0Q2hhdCxcbiAgb25BZ2VudFVwZGF0ZSxcbiAgbG9hZE1vcmVBZ2VudHMsXG4gIHNvcnRBZ2VudHNMaXN0LFxuICBpc015QWdlbnRzU2VjdGlvbiA9IGZhbHNlLFxuICBpc015U2tpbGxzU2VjdGlvbiA9IGZhbHNlLFxuICBpc01haWFrZXJTZWN0aW9uID0gZmFsc2UsXG4gIGhpZGVBZ2VudFNlbGVjdG9yID0gZmFsc2UsXG4gIGhpZGVDb250cm9scyA9IGZhbHNlLFxuICBvbkFnZW50U2VsZWN0ZWQsXG4gIHNob3dCYWNrQnV0dG9uID0gZmFsc2UsXG4gIG9uQmFjayA9ICgpID0+IG51bGwsXG59OiB7XG4gIGxheW91dE1vZGU6IE1haWFDaGF0TW9kYWxMYXlvdXRNb2RlXG4gIG9uTGF5b3V0TW9kZUNoYW5nZTogKG1vZGU6IE1haWFDaGF0TW9kYWxMYXlvdXRNb2RlKSA9PiB2b2lkXG4gIGV4cGFuZGVkOiBib29sZWFuXG4gIGRyYWdnYWJsZT86IGJvb2xlYW5cbiAgb25EcmFnU3RhcnQ/OiAoZXZlbnQ6IFJlYWN0UG9pbnRlckV2ZW50PEhUTUxEaXZFbGVtZW50PikgPT4gdm9pZFxuICBvbkRyYWdNb3ZlPzogKGV2ZW50OiBSZWFjdFBvaW50ZXJFdmVudDxIVE1MRGl2RWxlbWVudD4pID0+IHZvaWRcbiAgb25EcmFnRW5kPzogKGV2ZW50OiBSZWFjdFBvaW50ZXJFdmVudDxIVE1MRGl2RWxlbWVudD4pID0+IHZvaWRcbiAgaGFuZGxlTWluaW1pemU/OiAoKSA9PiB2b2lkXG4gIGFnZW50czogQWdlbnRbXVxuICBoYXNFcnJvcjogYm9vbGVhblxuICBsb2FkaW5nOiBib29sZWFuXG4gIGxvYWRpbmdNb3JlPzogYm9vbGVhblxuICBoYXNNb3JlPzogYm9vbGVhblxuICBoYW5kbGVSZXNldENoYXQ6ICgpID0+IHZvaWRcbiAgb25BZ2VudFVwZGF0ZT86ICh1cGRhdGVkQWdlbnQ6IEFnZW50KSA9PiB2b2lkXG4gIGxvYWRNb3JlQWdlbnRzPzogKCkgPT4gdm9pZFxuICBzb3J0QWdlbnRzTGlzdD86ICgpID0+IHZvaWRcbiAgLyoqIFNlY2Npw7NuIFwiTWlzIGFnZW50ZXNcIjogc2kgbm8gaGF5IGFnZW50ZSBzZXRlYWRvLCBlbCBzZWxlY3RvciBtdWVzdHJhIGVsIGljb25vIGRlIE1BSUEgeSBlbCBub21icmUgZGUgbGEgc2VjY2nDs24gKi9cbiAgaXNNeUFnZW50c1NlY3Rpb24/OiBib29sZWFuXG4gIC8qKiBTZWNjacOzbiBcIlNraWxsc1wiOiBtaXNtbyBjb21wb3J0YW1pZW50byBkZSBzZWxlY3RvciBxdWUgTWlzIGFnZW50ZXMsIGNvbiBlbCBub21icmUgZGUgbGEgc2VjY2nDs24gKi9cbiAgaXNNeVNraWxsc1NlY3Rpb24/OiBib29sZWFuXG4gIC8qKiBPY3VsdGEgZWwgY2hpcCBkZSBtb2RlbG8gTExNIChwLiBlai4gZW4gTWlzIGFnZW50ZXMgLyBNaXMgc2tpbGxzKSAqL1xuICBoaWRlQWdlbnRTZWxlY3Rvcj86IGJvb2xlYW5cbiAgLyoqIE9jdWx0YSBsb3MgYm90b25lcyBkZSBsYXlvdXQgeSBjaWVycmUgKG1vZG8gcMOhZ2luYSBjb21wbGV0YSkgKi9cbiAgaGlkZUNvbnRyb2xzPzogYm9vbGVhblxuICAvKiogU2VjY2nDs24gXCJDcmVhZG9yIGRlIGFnZW50ZXNcIiAoTWFpYWtlcik6IGhhYmlsaXRhIGVsIGJvdMOzbiBcIkNyZWFyIGFnZW50ZVwiIGRlbCBoZWFkZXIgKi9cbiAgaXNNYWlha2VyU2VjdGlvbj86IGJvb2xlYW5cbiAgLyoqXG4gICAqIFNlIGludm9jYSBkZXNwdcOpcyBkZWwgcmVzZXQgY3VhbmRvIGVsIGFnZW50ZSBzZWxlY2Npb25hZG8gTk8gcmVxdWllcmUgc2VsZWNjacOzblxuICAgKiBkZSBlbnRpdHkgKGN1c3RvbSBvIGNsb25lK2dsb2JhbCkuIFBlcm1pdGUgcmVzb2x2ZXIgYEdFVCAvdjIvc2Vzc2lvbnMvYWdlbnQve2lkfWBcbiAgICogeSBuYXZlZ2FyIGEgdW5hIGNvbnZlcnNhY2nDs24gZXhpc3RlbnRlIHNpIGxhIGhheS5cbiAgICovXG4gIG9uQWdlbnRTZWxlY3RlZD86IChhZ2VudDogQWdlbnQpID0+IHZvaWQgfCBQcm9taXNlPHVua25vd24+XG4gIHNob3dCYWNrQnV0dG9uPzogYm9vbGVhblxuICBvbkJhY2s/OiAoKSA9PiB2b2lkXG59KSA9PiB7XG4gIGNvbnN0IHsgdCB9ID0gdXNlVHJhbnNsYXRpb24oW1NFQ1RJT05TLmFibUFnZW50LCBTRUNUSU9OUy5jaGF0QUldKVxuICBjb25zdCB1c2VyID0gdXNlVXNlcigpXG4gIGNvbnN0IGFtcGxpdHVkRXZlbnQgPSB1c2VFdmVudCgpXG4gIGNvbnN0IHsgYWdlbnQ6IHNlbGVjdGVkQWdlbnQsIHNlbGVjdEFnZW50LCBzZXRQcm9qZWN0LCBzZXRDbGllbnQsIHNldFRhc2ssIHNlY3Rpb24gfSA9IHVzZUdsb2JhbENvbnRleHQoKVxuICAvLyBFbiBzZWN0aW9uICd0YXNrJyBlbCBtb2RhbCBkZSBNYWlhIHNlIGVsZXZhIHBvciBlbmNpbWEgZGVsIHRhc2sgcGFuZWwgKHotaW5kZXggOTgwMDAwMSkuXG4gIC8vIExvcyB0b29sdGlwcyBzZSBtb250YW4gZW4gcG9ydGFsIGNvbiB6LWluZGV4IDE1MDAgcG9yIGRlZmVjdG8sIGFzw60gcXVlIHF1ZWRhcsOtYW4gZGV0csOhcy5cbiAgLy8gU3ViaW1vcyBzdSB6LWluZGV4IHPDs2xvIGVuIGVzdGUgY2FzbyBwYXJhIHF1ZSBzZSB2ZWFuIHBvciBlbmNpbWEgZGVsIG1vZGFsLlxuICBjb25zdCB0b29sdGlwWkluZGV4ID0gdXNlTWFpYVRhc2tQYW5lbFpJbmRleCgxNTAwLCAnb3ZlcmxheScpXG4gIGNvbnN0IFtpc0V4cGFuZGVkLCBzZXRJc0V4cGFuZGVkXSA9IHVzZVN0YXRlKGZhbHNlKVxuICBjb25zdCB0ZXh0UmVmQWdlbnQgPSB1c2VSZWY8SFRNTFNwYW5FbGVtZW50PihudWxsKVxuICBjb25zdCBkcm9wZG93blJlZiA9IHVzZVJlZjxIVE1MRGl2RWxlbWVudD4obnVsbClcbiAgY29uc3QgbGF5b3V0TWVudVJlZiA9IHVzZVJlZjxIVE1MRGl2RWxlbWVudD4obnVsbClcbiAgY29uc3QgW2xheW91dE1lbnVPcGVuLCBzZXRMYXlvdXRNZW51T3Blbl0gPSB1c2VTdGF0ZShmYWxzZSlcbiAgY29uc3QgeyBzaG93VG9vbHRpcDogc2hvd1Rvb2x0aXBBZ2VudCB9ID0gdXNlUmVzaXplTGlzdGVuZXIodGV4dFJlZkFnZW50LCBbc2VsZWN0ZWRBZ2VudD8ubmFtZV0pXG4gIGNvbnN0IGFnZW50c1JlZiA9IHVzZVJlZjxIVE1MRGl2RWxlbWVudD4obnVsbClcblxuICBjb25zdCBhZ2VudHNGb3JTZWxlY3RvciA9IHVzZU1lbW8oKCkgPT4gZmlsdGVyQWdlbnRzRm9yU2VsZWN0b3IoYWdlbnRzKSwgW2FnZW50c10pXG5cbiAgY29uc3QgdXNlclBlcm1pc3Npb25zID0gdXNlcj8ucGVybWlzc2lvbnM/LmFpX2FnZW50c1xuICBjb25zdCBzaG93SGVhZGVyQ3JlYXRlQWdlbnRCdXR0b24gPSBjYW5TaG93SGVhZGVyQ3JlYXRlQWdlbnRCdXR0b24oXG4gICAgdXNlclBlcm1pc3Npb25zPy5jcmVhdGUsXG4gICAgQm9vbGVhbih3aW5kb3cuTUFJQV9DSEFUX0FJX0ZFQVRVUkVfQUNDRVNTX01VTFRJX0FHRU5UUyksXG4gICAgaXNNeUFnZW50c1NlY3Rpb24sXG4gICAgaXNNYWlha2VyU2VjdGlvblxuICApXG5cbiAgY29uc3QgaGFuZGxlT3BlbkNyZWF0ZUFnZW50TW9kYWwgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgYW1wbGl0dWRFdmVudChFVkVOVFMub3Blbk1vZGFsLCB7IG9wdGlvbjogJ2NyZWF0ZV9hZ2VudCcgfSlcbiAgICBkb2N1bWVudC5kaXNwYXRjaEV2ZW50KFxuICAgICAgbmV3IEN1c3RvbUV2ZW50KCdhYm0tYWdlbnQtbW9kYWwtc2V0LXZhbHVlcycsIHtcbiAgICAgICAgZGV0YWlsOiB7XG4gICAgICAgICAgYWdlbnRWYWx1ZXM6IHtcbiAgICAgICAgICAgIHZhbHVlczoge1xuICAgICAgICAgICAgICBpc0VkaXRpbmc6IGZhbHNlLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGlzT3BlbjogdHJ1ZSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfSlcbiAgICApXG4gIH0sIFthbXBsaXR1ZEV2ZW50XSlcblxuICAvLyBNYW5lamFyIHNjcm9sbCBpbmZpbml0byBwYXJhIGNhcmdhciBtw6FzIGFnZW50c1xuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIC8vIFNvbG8gY3VhbmRvIGVsIGRyb3Bkb3duIGVzdMOpIGFiaWVydG9cbiAgICBpZiAoIWlzRXhwYW5kZWQpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWRcbiAgICB9XG5cbiAgICBjb25zdCBoYW5kbGVTY3JvbGwgPSAoKSA9PiB7XG4gICAgICBpZiAoIWFnZW50c1JlZi5jdXJyZW50IHx8ICFsb2FkTW9yZUFnZW50cyB8fCAhaGFzTW9yZSB8fCBsb2FkaW5nTW9yZSkge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgY29uc3QgeyBzY3JvbGxUb3AsIHNjcm9sbEhlaWdodCwgY2xpZW50SGVpZ2h0IH0gPSBhZ2VudHNSZWYuY3VycmVudFxuICAgICAgY29uc3QgZGlzdGFuY2VGcm9tQm90dG9tID0gc2Nyb2xsSGVpZ2h0IC0gc2Nyb2xsVG9wIC0gY2xpZW50SGVpZ2h0XG4gICAgICBpZiAoc2hvdWxkTG9hZE1vcmVBZ2VudHNPblNjcm9sbChkaXN0YW5jZUZyb21Cb3R0b20pKSB7XG4gICAgICAgIGxvYWRNb3JlQWdlbnRzKClcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBkZWxheSBwYXJhIGFzZWd1cmFyIHF1ZSBlbCBET00gZXN0w6kgcmVuZGVyaXphZG9cbiAgICBjb25zdCB0aW1lb3V0SWQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGNvbnN0IHNjcm9sbEVsZW1lbnQgPSBhZ2VudHNSZWYuY3VycmVudFxuICAgICAgaWYgKHNjcm9sbEVsZW1lbnQpIHtcbiAgICAgICAgc2Nyb2xsRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdzY3JvbGwnLCBoYW5kbGVTY3JvbGwpXG4gICAgICB9XG4gICAgfSwgMTAwKVxuXG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0SWQpXG4gICAgICBjb25zdCBzY3JvbGxFbGVtZW50ID0gYWdlbnRzUmVmLmN1cnJlbnRcbiAgICAgIGlmIChzY3JvbGxFbGVtZW50KSB7XG4gICAgICAgIHNjcm9sbEVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgaGFuZGxlU2Nyb2xsKVxuICAgICAgfVxuICAgIH1cbiAgfSwgW2lzRXhwYW5kZWQsIGxvYWRNb3JlQWdlbnRzLCBoYXNNb3JlLCBsb2FkaW5nTW9yZV0pXG5cbiAgY29uc3QgbG9jYWxBZ2VudHMgPSB1c2VNZW1vKCgpID0+IHJlc29sdmVMb2NhbFNlbGVjdGVkQWdlbnQoYWdlbnRzLCBzZWxlY3RlZEFnZW50KSwgW2FnZW50cywgc2VsZWN0ZWRBZ2VudF0pXG5cbiAgLy8gRW4gJ01pcyBhZ2VudGVzJyAvICdTa2lsbHMnIHNpbiBhZ2VudGUgc2V0ZWFkbywgZWwgc2VsZWN0b3IgbXVlc3RyYSBlbCBpY29ubyBkZSBNQUlBIHkgZWwgbm9tYnJlIGRlIGxhIHNlY2Npw7NuXG4gIC8vIGVuIGx1Z2FyIGRlbCBhZ2VudGUsIHBhcmEgcXVlIGVsIHVzdWFyaW8gcHVlZGEgYWJyaXIgZWwgZHJvcGRvd24geSBlbGVnaXIgdW5vLlxuICBjb25zdCBzZWxlY3Rvckljb24gPVxuICAgIGxvY2FsQWdlbnRzPy50eXBlID09PSAnY3VzdG9tJyAmJiAhbG9jYWxBZ2VudHM/LmlzX2xlZ2FjeV9jb250ZXh0ID8gbG9jYWxBZ2VudHM/LmVtb2ppIDogPE1BSUFJY29uIC8+XG4gIGNvbnN0IHNlbGVjdG9yTGFiZWwgPSByZXNvbHZlSGVhZGVyU2VsZWN0b3JMYWJlbChcbiAgICBsb2NhbEFnZW50cyxcbiAgICBpc015QWdlbnRzU2VjdGlvbixcbiAgICBpc015U2tpbGxzU2VjdGlvbixcbiAgICB0KCdtYXJrZXRwbGFjZS5teUFnZW50c1RpdGxlJywgeyBuczogU0VDVElPTlMuY2hhdEFJIH0pLFxuICAgIHQoJ2NvbnZlcnNhdGlvbnMubXlTa2lsbHNOYXYnLCB7IG5zOiBTRUNUSU9OUy5jaGF0QUkgfSlcbiAgKVxuXG4gIGNvbnN0IGhhbmRsZVNlbGVjdEFnZW50ID0gdXNlQ2FsbGJhY2soXG4gICAgKGFnZW50OiBBZ2VudCkgPT4ge1xuICAgICAgc2VsZWN0QWdlbnQoYWdlbnQpXG4gICAgICBhbXBsaXR1ZEV2ZW50KEVWRU5UUy5haUNoYXRBZ2VudFNlbGVjdCwge1xuICAgICAgICBhZ2VudF90eXBlOiBhZ2VudD8udHlwZSxcbiAgICAgIH0pXG4gICAgICBzZXRJc0V4cGFuZGVkKGZhbHNlKVxuICAgICAgc2V0UHJvamVjdChudWxsKVxuICAgICAgc2V0Q2xpZW50Py4obnVsbClcbiAgICAgIHNldFRhc2sobnVsbClcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBoYW5kbGVSZXNldENoYXQoKVxuICAgICAgICAvLyBTaSBlbCBhZ2VudGUgbm8gZGVwZW5kZSBkZSB1bmEgZW50aXR5IChjdXN0b20gbyBjbG9uZStnbG9iYWwpIHlhIHBvZGVtb3NcbiAgICAgICAgLy8gcmVzb2x2ZXIgc2kgZXhpc3RlIHVuYSBzZXNpw7NuIHByZXZpYSB5LCBlbiBlc2UgY2FzbywgbmF2ZWdhciBhIGVsbGEuXG4gICAgICAgIC8vIFBhcmEgY2xvbmUrcHJvamVjdHxjbGllbnQsIGxhIHJlc29sdWNpw7NuIG9jdXJyZSBlbiBsb3Mgc2VsZWN0b3JzIGRlIGVudGl0eS5cbiAgICAgICAgaWYgKCFhZ2VudFNlbGVjdGlvbk5lZWRzRW50aXR5KGFnZW50KSkge1xuICAgICAgICAgIG9uQWdlbnRTZWxlY3RlZD8uKGFnZW50KVxuICAgICAgICB9XG4gICAgICB9LCAxMDApXG4gICAgfSxcbiAgICBbc2VsZWN0QWdlbnQsIGFtcGxpdHVkRXZlbnQsIGhhbmRsZVJlc2V0Q2hhdCwgc2V0UHJvamVjdCwgc2V0Q2xpZW50LCBzZXRUYXNrLCBvbkFnZW50U2VsZWN0ZWRdXG4gIClcblxuICBjb25zdCBoYW5kbGVFeHBhbmRNb2RhbCA9ICgpID0+IHtcbiAgICBpZiAoIWlzRXhwYW5kZWQpIHtcbiAgICAgIGFtcGxpdHVkRXZlbnQoRVZFTlRTLmFpQ2hhdE9wZW5BZ2VudFNlbGVjdClcbiAgICAgIC8vIEN1YW5kbyBzZSBhYnJlIGVsIHNlbGVjdG9yLCBvcmRlbmFyIGxvcyBhZ2VudGVzXG4gICAgICBpZiAoc29ydEFnZW50c0xpc3QpIHtcbiAgICAgICAgc29ydEFnZW50c0xpc3QoKVxuICAgICAgfVxuICAgIH1cbiAgICBzZXRJc0V4cGFuZGVkKHByZXYgPT4gIXByZXYpXG4gIH1cblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghaXNFeHBhbmRlZCAmJiAhbGF5b3V0TWVudU9wZW4pIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWRcbiAgICB9XG5cbiAgICBjb25zdCBoYW5kbGVDbGlja091dHNpZGUgPSAoZXZlbnQ6IE1vdXNlRXZlbnQpID0+IHtcbiAgICAgIGNvbnN0IHRhcmdldCA9IGV2ZW50LnRhcmdldCBhcyBOb2RlXG4gICAgICBpZiAoaXNFeHBhbmRlZCAmJiBkcm9wZG93blJlZi5jdXJyZW50ICYmICFkcm9wZG93blJlZi5jdXJyZW50LmNvbnRhaW5zKHRhcmdldCkpIHtcbiAgICAgICAgc2V0SXNFeHBhbmRlZChmYWxzZSlcbiAgICAgIH1cbiAgICAgIGlmIChsYXlvdXRNZW51T3BlbiAmJiBsYXlvdXRNZW51UmVmLmN1cnJlbnQgJiYgIWxheW91dE1lbnVSZWYuY3VycmVudC5jb250YWlucyh0YXJnZXQpKSB7XG4gICAgICAgIHNldExheW91dE1lbnVPcGVuKGZhbHNlKVxuICAgICAgfVxuICAgIH1cblxuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsIGhhbmRsZUNsaWNrT3V0c2lkZSlcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duJywgaGFuZGxlQ2xpY2tPdXRzaWRlKVxuICAgIH1cbiAgfSwgW2lzRXhwYW5kZWQsIGxheW91dE1lbnVPcGVuXSlcblxuICBjb25zdCBoYW5kbGVQaWNrTGF5b3V0ID0gdXNlQ2FsbGJhY2soXG4gICAgKG1vZGU6IE1haWFDaGF0TW9kYWxMYXlvdXRNb2RlKSA9PiB7XG4gICAgICBhbXBsaXR1ZEV2ZW50KEVWRU5UUy5wcm9qZWN0UmVzdW1lRXhwYW5kLCB7XG4gICAgICAgIGV4cGFuZGVkOiBtb2RlID09PSAnZnVsbHNjcmVlbicsXG4gICAgICB9KVxuICAgICAgYW1wbGl0dWRFdmVudChFVkVOVFMuYWlDaGF0U2VsZWN0Vmlld09wdGlvbnMsIHsgb3B0aW9uOiBtb2RlIH0pXG4gICAgICBvbkxheW91dE1vZGVDaGFuZ2UobW9kZSlcbiAgICAgIHNldExheW91dE1lbnVPcGVuKGZhbHNlKVxuICAgIH0sXG4gICAgW2FtcGxpdHVkRXZlbnQsIG9uTGF5b3V0TW9kZUNoYW5nZV1cbiAgKVxuXG4gIGNvbnN0IGNsb25lQWdlbnRzUm9sZUJsb2NrZWQgPSBpc01haWFDbG9uZUFnZW50c1JvbGVCbG9ja2VkKHVzZXIsIHNlY3Rpb24pXG5cbiAgY29uc3QgcmVuZGVyTW9kYWwgPSAoKSA9PiB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxTQ0NBSU1IV3JhcHBlclxuICAgICAgICByZWY9e2Ryb3Bkb3duUmVmfVxuICAgICAgICBkYXRhLW5vLWRyYWc9XCJ0cnVlXCJcbiAgICAgICAgb25DbGljaz17YWdlbnRzLmxlbmd0aCA/IGhhbmRsZUV4cGFuZE1vZGFsIDogdW5kZWZpbmVkfVxuICAgICAgICBpZD1cImNoYXQtYWktbW9kYWwtaGVhZGVyLXdyYXBwZXJcIlxuICAgICAgPlxuICAgICAgICA8U0NDQUlNSFNlbGVjdGVkQWdlbnQ+XG4gICAgICAgICAgPFRvb2x0aXBcbiAgICAgICAgICAgIHRpdGxlPXtcbiAgICAgICAgICAgICAgc2hvd1Rvb2x0aXBBZ2VudCA/IChcbiAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT17eyBkaXNwbGF5OiAnZmxleCcsIGFsaWduSXRlbXM6ICdjZW50ZXInLCBnYXA6ICc0cHgnIH19PlxuICAgICAgICAgICAgICAgICAge2xvY2FsQWdlbnRzPy50eXBlID09PSAnY3VzdG9tJyAmJiAhbG9jYWxBZ2VudHM/LmlzX2xlZ2FjeV9jb250ZXh0ID8gKFxuICAgICAgICAgICAgICAgICAgICBsb2NhbEFnZW50cz8uZW1vamlcbiAgICAgICAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgICAgICAgIDxNQUlBSWNvbiAvPlxuICAgICAgICAgICAgICAgICAgKX17JyAnfVxuICAgICAgICAgICAgICAgICAge2xvY2FsQWdlbnRzPy5uYW1lfVxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgICAnJ1xuICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBwbGFjZW1lbnQ9e2lzRXhwYW5kZWQgPyAnbGVmdCcgOiAndG9wJ31cbiAgICAgICAgICAgIHsuLi4odG9vbHRpcFpJbmRleCAhPSBudWxsID8geyB6SW5kZXg6IHRvb2x0aXBaSW5kZXggfSA6IHt9KX1cbiAgICAgICAgICA+XG4gICAgICAgICAgICA8U0NDQUlNSFNlbGVjdGVkQWdlbnRUZXh0XG4gICAgICAgICAgICAgIHJlZj17dGV4dFJlZkFnZW50fVxuICAgICAgICAgICAgICBpc0FnZW50RGVsZXRlZD17XG4gICAgICAgICAgICAgICAgISFzZWxlY3RlZEFnZW50Py5pc19kZWxldGVkIHx8XG4gICAgICAgICAgICAgICAgISFzZWxlY3RlZEFnZW50Py5oYXNfbm90X3Blcm1pc3Npb25zIHx8XG4gICAgICAgICAgICAgICAgISFzZWxlY3RlZEFnZW50Py5oYXNfbm90X2FjY2VzcyB8fFxuICAgICAgICAgICAgICAgICEhc2VsZWN0ZWRBZ2VudD8uaXNfbGVnYWN5X2NvbnRleHRcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8c3BhbiBzdHlsZT17eyBkaXNwbGF5OiAnZmxleCcsIGFsaWduSXRlbXM6ICdjZW50ZXInLCBnYXA6ICc0cHgnIH19PlxuICAgICAgICAgICAgICAgIHtzZWxlY3Rvckljb259IHtzZWxlY3RvckxhYmVsfVxuICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICA8L1NDQ0FJTUhTZWxlY3RlZEFnZW50VGV4dD5cbiAgICAgICAgICA8L1Rvb2x0aXA+XG4gICAgICAgIDwvU0NDQUlNSFNlbGVjdGVkQWdlbnQ+XG4gICAgICAgIDxTQ0NBSU1IV3JhcHBlckljb24+XG4gICAgICAgICAgPENoZXZyb25Eb3duIHdpZHRoPXsxNH0gaGVpZ2h0PXsxNH0gY29sb3I9XCIjMjAyMDFGXCIgLz5cbiAgICAgICAgPC9TQ0NBSU1IV3JhcHBlckljb24+XG4gICAgICAgIHtpc0V4cGFuZGVkICYmIChcbiAgICAgICAgICA8U0NDQUlNSFdyYXBwZXJNb2RhbD5cbiAgICAgICAgICAgIDxTQ0NBSU1IV3JhcHBlck1vZGFsQ29udGVudD5cbiAgICAgICAgICAgICAge3dpbmRvdy5NQUlBX0NIQVRfQUlfRkVBVFVSRV9BQ0NFU1MgJiYgIWNsb25lQWdlbnRzUm9sZUJsb2NrZWQgJiYgKFxuICAgICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgICB7KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbWFpYUFnZW50cyA9IGFnZW50c0ZvclNlbGVjdG9yLmZpbHRlcihpc01haWFPcmNoZXN0cmF0b3JBZ2VudClcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFtYWlhQWdlbnRzLmxlbmd0aCkgcmV0dXJuIG51bGxcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICAgICAgICAge21haWFBZ2VudHMubWFwKChtYWlhQWdlbnQsIGluZGV4KSA9PiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxDaGF0QUlBZ2VudE9wdGlvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleT17YGFnZW50LSR7bWFpYUFnZW50LmlkfWB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWdlbnQ9e21haWFBZ2VudH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleD17aW5kZXh9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlU2VsZWN0QWdlbnQ9e2hhbmRsZVNlbGVjdEFnZW50fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzU2VsZWN0ZWQ9e3NlbGVjdGVkQWdlbnQ/LmlkID09PSBtYWlhQWdlbnQuaWR9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNNYWlhXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb25GYXZvcml0ZVRvZ2dsZT17b25BZ2VudFVwZGF0ZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICkpfVxuICAgICAgICAgICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICB9KSgpfVxuICAgICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICB7YWdlbnRzRm9yU2VsZWN0b3Iuc29tZShhZ2VudCA9PiBhZ2VudC50eXBlID09PSAnY3VzdG9tJykgJiZcbiAgICAgICAgICAgICAgICB3aW5kb3cuTUFJQV9DSEFUX0FJX0ZFQVRVUkVfQUNDRVNTX01VTFRJX0FHRU5UUyAmJiAoXG4gICAgICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICAgICA8U0NDQUlNSFdyYXBwZXJNb2RhbENvbnRlbnRUaXRsZT5cbiAgICAgICAgICAgICAgICAgICAgICB7dCgnYWdlbnRzJyl9IGJ5IHt1c2VyLmNvbXBhbnl9XG4gICAgICAgICAgICAgICAgICAgIDwvU0NDQUlNSFdyYXBwZXJNb2RhbENvbnRlbnRUaXRsZT5cbiAgICAgICAgICAgICAgICAgICAgPFNDQ0FJTUhEaXZpZGVyIC8+XG4gICAgICAgICAgICAgICAgICA8Lz5cbiAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICA8U0NDQUlNSEFnZW50c0xpc3QgaGFzTW9yZT17aGFzTW9yZX0gYWdlbnRzQ291bnQ9e2FnZW50c0ZvclNlbGVjdG9yLmxlbmd0aH0gcmVmPXthZ2VudHNSZWZ9PlxuICAgICAgICAgICAgICAgIHthZ2VudHNGb3JTZWxlY3Rvcj8ubWFwKChhZ2VudCwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgIXNob3VsZFJlbmRlckFnZW50RHJvcGRvd25JdGVtKHtcbiAgICAgICAgICAgICAgICAgICAgICBhZ2VudCxcbiAgICAgICAgICAgICAgICAgICAgICBtdWx0aUFnZW50c0FjY2VzczogQm9vbGVhbih3aW5kb3cuTUFJQV9DSEFUX0FJX0ZFQVRVUkVfQUNDRVNTX01VTFRJX0FHRU5UUyksXG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgIDxDaGF0QUlBZ2VudE9wdGlvblxuICAgICAgICAgICAgICAgICAgICAgIGtleT17YGFnZW50LSR7YWdlbnQuaWR9YH1cbiAgICAgICAgICAgICAgICAgICAgICBhZ2VudD17YWdlbnR9XG4gICAgICAgICAgICAgICAgICAgICAgaW5kZXg9e2luZGV4fVxuICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZVNlbGVjdEFnZW50PXtoYW5kbGVTZWxlY3RBZ2VudH1cbiAgICAgICAgICAgICAgICAgICAgICBpc1NlbGVjdGVkPXtzZWxlY3RlZEFnZW50Py5pZCA9PT0gYWdlbnQuaWR9XG4gICAgICAgICAgICAgICAgICAgICAgb25GYXZvcml0ZVRvZ2dsZT17b25BZ2VudFVwZGF0ZX1cbiAgICAgICAgICAgICAgICAgICAgICBzZXRJc0V4cGFuZGVkPXtzZXRJc0V4cGFuZGVkfVxuICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIH0pfVxuICAgICAgICAgICAgICAgIHtsb2FkaW5nTW9yZSAmJiAoXG4gICAgICAgICAgICAgICAgICA8U0NDQUlNSExvYWRlcldyYXBwZXI+XG4gICAgICAgICAgICAgICAgICAgIDxMb2FkZXIgc2l6ZT1cInNtYWxsXCIgLz5cbiAgICAgICAgICAgICAgICAgIDwvU0NDQUlNSExvYWRlcldyYXBwZXI+XG4gICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgPC9TQ0NBSU1IQWdlbnRzTGlzdD5cbiAgICAgICAgICAgICAge3Nob3VsZFNob3dEcm9wZG93bkFkZEFnZW50Rm9vdGVyKHtcbiAgICAgICAgICAgICAgICBjYW5DcmVhdGU6IHVzZXJQZXJtaXNzaW9ucz8uY3JlYXRlLFxuICAgICAgICAgICAgICAgIG11bHRpQWdlbnRzQWNjZXNzOiBCb29sZWFuKHdpbmRvdy5NQUlBX0NIQVRfQUlfRkVBVFVSRV9BQ0NFU1NfTVVMVElfQUdFTlRTKSxcbiAgICAgICAgICAgICAgICBpc015QWdlbnRzU2VjdGlvbixcbiAgICAgICAgICAgICAgICBpc015U2tpbGxzU2VjdGlvbixcbiAgICAgICAgICAgICAgICBpc01haWFrZXJTZWN0aW9uLFxuICAgICAgICAgICAgICB9KSAmJiAoXG4gICAgICAgICAgICAgICAgPFNDQ0FJTUhBZGRBZ2VudFxuICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBzZXRJc0V4cGFuZGVkKGZhbHNlKVxuICAgICAgICAgICAgICAgICAgICBhbXBsaXR1ZEV2ZW50KEVWRU5UUy5vcGVuTW9kYWwsIHsgb3B0aW9uOiAnY3JlYXRlX2FnZW50JyB9KVxuICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5kaXNwYXRjaEV2ZW50KFxuICAgICAgICAgICAgICAgICAgICAgIG5ldyBDdXN0b21FdmVudCgnYWJtLWFnZW50LW1vZGFsLXNldC12YWx1ZXMnLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkZXRhaWw6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYWdlbnRWYWx1ZXM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzRWRpdGluZzogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc09wZW46IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPFNDQ0FJTUhQbHVzSWNvbldyYXBwZXI+XG4gICAgICAgICAgICAgICAgICAgIDxQbHVzIGNvbG9yPVwid2hpdGVcIiB3aWR0aD17MTh9IGhlaWdodD17MTh9IC8+XG4gICAgICAgICAgICAgICAgICA8L1NDQ0FJTUhQbHVzSWNvbldyYXBwZXI+XG4gICAgICAgICAgICAgICAgICB7dCgnY3JlYXRlQWdlbnQnKX1cbiAgICAgICAgICAgICAgICA8L1NDQ0FJTUhBZGRBZ2VudD5cbiAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIDwvU0NDQUlNSFdyYXBwZXJNb2RhbENvbnRlbnQ+XG4gICAgICAgICAgPC9TQ0NBSU1IV3JhcHBlck1vZGFsPlxuICAgICAgICApfVxuICAgICAgPC9TQ0NBSU1IV3JhcHBlcj5cbiAgICApXG4gIH1cblxuICBjb25zdCBzaG91bGRSZW5kZXJTZWxlY3RvciA9IHNob3VsZFJlbmRlckhlYWRlckFnZW50U2VsZWN0b3Ioe1xuICAgIGhhc0Vycm9yLFxuICAgIGxvYWRpbmcsXG4gICAgaGlkZUFnZW50U2VsZWN0b3IsXG4gICAgc2VsZWN0ZWRBZ2VudCxcbiAgICBpc015QWdlbnRzU2VjdGlvbixcbiAgICBpc015U2tpbGxzU2VjdGlvbixcbiAgICBtdWx0aUFnZW50c0FjY2VzczogQm9vbGVhbih3aW5kb3cuTUFJQV9DSEFUX0FJX0ZFQVRVUkVfQUNDRVNTX01VTFRJX0FHRU5UUyksXG4gICAgbGVnYWN5TWFpYUFjY2VzczogQm9vbGVhbih3aW5kb3cuTUFJQV9DSEFUX0FJX0ZFQVRVUkVfQUNDRVNTKSxcbiAgfSlcblxuICByZXR1cm4gKFxuICAgIDxTQ0NBSU1ITW9kYWxcbiAgICAgICRoYXNFcnJvcj17aGFzRXJyb3J9XG4gICAgICAkbG9hZGluZz17bG9hZGluZ31cbiAgICAgICRoYXNBZ2VudHM9eyEhYWdlbnRzLmxlbmd0aH1cbiAgICAgIG9uUG9pbnRlckRvd249e2RyYWdnYWJsZSA/IG9uRHJhZ1N0YXJ0IDogdW5kZWZpbmVkfVxuICAgICAgb25Qb2ludGVyTW92ZT17ZHJhZ2dhYmxlID8gb25EcmFnTW92ZSA6IHVuZGVmaW5lZH1cbiAgICAgIG9uUG9pbnRlclVwPXtkcmFnZ2FibGUgPyBvbkRyYWdFbmQgOiB1bmRlZmluZWR9XG4gICAgICBvblBvaW50ZXJDYW5jZWw9e2RyYWdnYWJsZSA/IG9uRHJhZ0VuZCA6IHVuZGVmaW5lZH1cbiAgICAgIG9uTG9zdFBvaW50ZXJDYXB0dXJlPXtkcmFnZ2FibGUgPyBvbkRyYWdFbmQgOiB1bmRlZmluZWR9XG4gICAgICBzdHlsZT17eyBjdXJzb3I6IGRyYWdnYWJsZSA/ICdncmFiJyA6IHVuZGVmaW5lZCwgdG91Y2hBY3Rpb246IGRyYWdnYWJsZSA/ICdtYW5pcHVsYXRpb24nIDogdW5kZWZpbmVkIH19XG4gICAgPlxuICAgICAge3Nob3VsZFJlbmRlclNlbGVjdG9yID8gcmVuZGVyTW9kYWwoKSA6IDxkaXYgLz59XG4gICAgICA8U0NDQUlNSFdyYXBwZXJCdXR0b24gZGF0YS1uby1kcmFnPVwidHJ1ZVwiPlxuICAgICAgICB7c2hvd0JhY2tCdXR0b24gJiYgKFxuICAgICAgICAgIDxTQ0NBSU1IQmFja0J1dHRvblxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XG4gICAgICAgICAgICAgIG9uQmFjaygpXG4gICAgICAgICAgICB9fVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxDaGV2cm9uTGVmdCB3aWR0aD17MTR9IGhlaWdodD17MTR9IGNvbG9yPVwiIzM0MzQzM1wiIC8+XG4gICAgICAgICAgICB7dCgnYmFjaycpfVxuICAgICAgICAgIDwvU0NDQUlNSEJhY2tCdXR0b24+XG4gICAgICAgICl9XG4gICAgICAgIHtzaG93SGVhZGVyQ3JlYXRlQWdlbnRCdXR0b24gJiYgKFxuICAgICAgICAgIDxTQ0NBSU1IQ3JlYXRlQWdlbnRCdXR0b24gdHlwZT1cImJ1dHRvblwiIG9uQ2xpY2s9e2hhbmRsZU9wZW5DcmVhdGVBZ2VudE1vZGFsfT5cbiAgICAgICAgICAgIDxTQ0NBSU1IQ3JlYXRlQWdlbnRCdXR0b25UZXh0Pnt0KCdvcGVuQWdlbnRDcmVhdG9yJyl9PC9TQ0NBSU1IQ3JlYXRlQWdlbnRCdXR0b25UZXh0PlxuICAgICAgICAgIDwvU0NDQUlNSENyZWF0ZUFnZW50QnV0dG9uPlxuICAgICAgICApfVxuICAgICAgICB7IWhpZGVDb250cm9scyAmJiAoXG4gICAgICAgICAgPD5cbiAgICAgICAgICAgIDxTQ0NBSU1ITGF5b3V0TWVudUFuY2hvciByZWY9e2xheW91dE1lbnVSZWZ9IGRhdGEtbm8tZHJhZz1cInRydWVcIj5cbiAgICAgICAgICAgICAgPEljb25CdXR0b25cbiAgICAgICAgICAgICAgICBidXR0b25JZD1cImJ0bi1tYWlhLWxheW91dC1tZW51XCJcbiAgICAgICAgICAgICAgICBoYW5kbGVDbGljaz17KCkgPT4ge1xuICAgICAgICAgICAgICAgICAgaWYgKCFsYXlvdXRNZW51T3Blbikge1xuICAgICAgICAgICAgICAgICAgICBhbXBsaXR1ZEV2ZW50KEVWRU5UUy5haUNoYXRPcGVuVmlld09wdGlvbnMpXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBzZXRMYXlvdXRNZW51T3BlbihwcmV2ID0+ICFwcmV2KVxuICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgdG9vbHRpcD17dCgnbGF5b3V0TWVudVRvb2x0aXAnKX1cbiAgICAgICAgICAgICAgICBkaXNhYmxlVG9vbHRpcD17bGF5b3V0TWVudU9wZW59XG4gICAgICAgICAgICAgICAgdG9vbHRpcFpJbmRleD17dG9vbHRpcFpJbmRleH1cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxNYWlhQ2hhdExheW91dE1lbnVJY29uIC8+XG4gICAgICAgICAgICAgIDwvSWNvbkJ1dHRvbj5cbiAgICAgICAgICAgICAge2xheW91dE1lbnVPcGVuID8gKFxuICAgICAgICAgICAgICAgIDxTQ0NBSU1ITGF5b3V0TWVudVBhbmVsIHJvbGU9XCJtZW51XCI+XG4gICAgICAgICAgICAgICAgICA8U0NDQUlNSExheW91dE1lbnVSb3dcbiAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgICRhY3RpdmU9e2xheW91dE1vZGUgPT09ICdzaWRlYmFyJ31cbiAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gaGFuZGxlUGlja0xheW91dCgnc2lkZWJhcicpfVxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8U0NDQUlNSExheW91dE1lbnVSb3dJY29uIGFyaWEtaGlkZGVuPlxuICAgICAgICAgICAgICAgICAgICAgIDxNYWlhQ2hhdExheW91dFNpZGViYXJJY29uIC8+XG4gICAgICAgICAgICAgICAgICAgIDwvU0NDQUlNSExheW91dE1lbnVSb3dJY29uPlxuICAgICAgICAgICAgICAgICAgICB7dCgnbGF5b3V0U2lkZWJhcicpfVxuICAgICAgICAgICAgICAgICAgPC9TQ0NBSU1ITGF5b3V0TWVudVJvdz5cbiAgICAgICAgICAgICAgICAgIDxTQ0NBSU1ITGF5b3V0TWVudVJvd1xuICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgJGFjdGl2ZT17bGF5b3V0TW9kZSA9PT0gJ2Z1bGxzY3JlZW4nfVxuICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBoYW5kbGVQaWNrTGF5b3V0KCdmdWxsc2NyZWVuJyl9XG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxTQ0NBSU1ITGF5b3V0TWVudVJvd0ljb24gYXJpYS1oaWRkZW4+XG4gICAgICAgICAgICAgICAgICAgICAgPE1haWFDaGF0TGF5b3V0RnVsbHNjcmVlbkljb24gLz5cbiAgICAgICAgICAgICAgICAgICAgPC9TQ0NBSU1ITGF5b3V0TWVudVJvd0ljb24+XG4gICAgICAgICAgICAgICAgICAgIHt0KCdsYXlvdXRGdWxsc2NyZWVuJyl9XG4gICAgICAgICAgICAgICAgICA8L1NDQ0FJTUhMYXlvdXRNZW51Um93PlxuICAgICAgICAgICAgICAgICAgPFNDQ0FJTUhMYXlvdXRNZW51Um93XG4gICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAkYWN0aXZlPXtsYXlvdXRNb2RlID09PSAnZmxvYXRpbmcnfVxuICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBoYW5kbGVQaWNrTGF5b3V0KCdmbG9hdGluZycpfVxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8U0NDQUlNSExheW91dE1lbnVSb3dJY29uIGFyaWEtaGlkZGVuPlxuICAgICAgICAgICAgICAgICAgICAgIDxNYWlhQ2hhdExheW91dEZsb2F0aW5nSWNvbiAvPlxuICAgICAgICAgICAgICAgICAgICA8L1NDQ0FJTUhMYXlvdXRNZW51Um93SWNvbj5cbiAgICAgICAgICAgICAgICAgICAge3QoJ2xheW91dEZsb2F0aW5nJyl9XG4gICAgICAgICAgICAgICAgICA8L1NDQ0FJTUhMYXlvdXRNZW51Um93PlxuICAgICAgICAgICAgICAgIDwvU0NDQUlNSExheW91dE1lbnVQYW5lbD5cbiAgICAgICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAgICA8L1NDQ0FJTUhMYXlvdXRNZW51QW5jaG9yPlxuICAgICAgICAgICAge2hhbmRsZU1pbmltaXplID8gKFxuICAgICAgICAgICAgICA8SWNvbkJ1dHRvbiBoYW5kbGVDbGljaz17aGFuZGxlTWluaW1pemV9IHRvb2x0aXA9e3QoJ2dsb2JhbHMubWluaW1pemUnKX0gdG9vbHRpcFpJbmRleD17dG9vbHRpcFpJbmRleH0+XG4gICAgICAgICAgICAgICAgPFNDQ0FJTUhNaW5pbWl6ZUljb24+XG4gICAgICAgICAgICAgICAgICA8U3RhdHVzIHdpZHRoPXsyNH0gaGVpZ2h0PXsyNH0gLz5cbiAgICAgICAgICAgICAgICA8L1NDQ0FJTUhNaW5pbWl6ZUljb24+XG4gICAgICAgICAgICAgIDwvSWNvbkJ1dHRvbj5cbiAgICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICAgIDwvPlxuICAgICAgICApfVxuICAgICAgPC9TQ0NBSU1IV3JhcHBlckJ1dHRvbj5cbiAgICA8L1NDQ0FJTUhNb2RhbD5cbiAgKVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7O0FBQUE7QUFDQTtBQUNBLFNBQVNBLFNBQVMsRUFBRUMsTUFBTSxFQUFFQyxRQUFRLEVBQUVDLFdBQVcsRUFBRUMsT0FBTyxRQUEyQyxPQUFPO0FBQzVHLFNBQVNDLE9BQU8sUUFBUSw4Q0FBOEM7QUFDdEUsU0FBU0MsTUFBTSxRQUFRLHlDQUF5QztBQUNoRSxTQUFTQyxXQUFXLFFBQVEsOENBQThDO0FBQzFFLFNBQVNDLFdBQVcsUUFBUSw4Q0FBOEM7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
|
|
152
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1c2VDYWxsYmFjayIsIlN0YXR1cyIsIkNoZXZyb25MZWZ0IiwidXNlVHJhbnNsYXRpb24iLCJTRUNUSU9OUyIsInVzZUdsb2JhbENvbnRleHQiLCJJY29uQnV0dG9uIiwiU0NDQUlNSE1vZGFsIiwiU0NDQUlNSFdyYXBwZXJCdXR0b24iLCJTQ0NBSU1IQ3JlYXRlQWdlbnRCdXR0b24iLCJTQ0NBSU1IQ3JlYXRlQWdlbnRCdXR0b25UZXh0IiwiU0NDQUlNSEJhY2tCdXR0b24iLCJTQ0NBSU1ITWluaW1pemVJY29uIiwiRVZFTlRTIiwidXNlRXZlbnQiLCJ1c2VVc2VyIiwidXNlTWFpYVRhc2tQYW5lbFpJbmRleCIsImNhblVzZXJDcmVhdGVBZ2VudHMiLCJkaXNwYXRjaE9wZW5DcmVhdGVBZ2VudE1vZGFsIiwic2hvdWxkU2hvd0FnZW50U2VsZWN0b3IiLCJDaGF0QWlNb2RhbEhlYWRlckFnZW50U2VsZWN0b3IiLCJDaGF0QWlNb2RhbEhlYWRlckxheW91dE1lbnUiLCJqc3giLCJfanN4IiwianN4cyIsIl9qc3hzIiwiRnJhZ21lbnQiLCJfRnJhZ21lbnQiLCJFTVBUWV9BR0VOVFMiLCJDaGF0QUlNb2RhbEhlYWRlciIsIl9yZWYiLCJsYXlvdXRNb2RlIiwib25MYXlvdXRNb2RlQ2hhbmdlIiwiX3JlZiRkcmFnZ2FibGUiLCJkcmFnZ2FibGUiLCJvbkRyYWdTdGFydCIsIm9uRHJhZ01vdmUiLCJvbkRyYWdFbmQiLCJoYW5kbGVNaW5pbWl6ZSIsIl9yZWYkYWdlbnRzIiwiYWdlbnRzIiwiX3JlZiRoYXNFcnJvciIsImhhc0Vycm9yIiwiX3JlZiRsb2FkaW5nIiwibG9hZGluZyIsIl9yZWYkbG9hZGluZ01vcmUiLCJsb2FkaW5nTW9yZSIsIl9yZWYkaGFzTW9yZSIsImhhc01vcmUiLCJoYW5kbGVSZXNldENoYXQiLCJvbkFnZW50VXBkYXRlIiwibG9hZE1vcmVBZ2VudHMiLCJzb3J0QWdlbnRzTGlzdCIsIl9yZWYkaXNNeUFnZW50c1NlY3RpbyIsImlzTXlBZ2VudHNTZWN0aW9uIiwiX3JlZiRpc015U2tpbGxzU2VjdGlvIiwiaXNNeVNraWxsc1NlY3Rpb24iLCJfcmVmJGlzTWFpYWtlclNlY3Rpb24iLCJpc01haWFrZXJTZWN0aW9uIiwiX3JlZiRoaWRlQWdlbnRTZWxlY3RvIiwiaGlkZUFnZW50U2VsZWN0b3IiLCJfcmVmJGhpZGVDb250cm9scyIsImhpZGVDb250cm9scyIsIm9uQWdlbnRTZWxlY3RlZCIsIl9yZWYkc2hvd0JhY2tCdXR0b24iLCJzaG93QmFja0J1dHRvbiIsIl9yZWYkb25CYWNrIiwib25CYWNrIiwiX3VzZVRyYW5zbGF0aW9uIiwiYWJtQWdlbnQiLCJjaGF0QUkiLCJ0IiwidXNlciIsImFtcGxpdHVkRXZlbnQiLCJfdXNlR2xvYmFsQ29udGV4dCIsInNlbGVjdGVkQWdlbnQiLCJhZ2VudCIsInRvb2x0aXBaSW5kZXgiLCJzaG93SGVhZGVyQ3JlYXRlQWdlbnRCdXR0b24iLCJoYW5kbGVPcGVuQ3JlYXRlQWdlbnRNb2RhbCIsIm9wZW5Nb2RhbCIsIm9wdGlvbiIsInNob3VsZFJlbmRlclNlbGVjdG9yIiwiaGFzU2VsZWN0ZWRBZ2VudCIsImlzQWdlbnRzU2VjdGlvbiIsImRyYWdIYW5kbGVycyIsIm9uUG9pbnRlckRvd24iLCJvblBvaW50ZXJNb3ZlIiwib25Qb2ludGVyVXAiLCJvblBvaW50ZXJDYW5jZWwiLCJvbkxvc3RQb2ludGVyQ2FwdHVyZSIsInN0eWxlIiwiY3Vyc29yIiwidG91Y2hBY3Rpb24iLCJfb2JqZWN0U3ByZWFkIiwiJGhhc0Vycm9yIiwiJGxvYWRpbmciLCIkaGFzQWdlbnRzIiwibGVuZ3RoIiwiY2hpbGRyZW4iLCJ0eXBlIiwib25DbGljayIsIndpZHRoIiwiaGVpZ2h0IiwiY29sb3IiLCJoYW5kbGVDbGljayIsInRvb2x0aXAiXSwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50cy9tb2xlY3VsZXMvQ2hhdEFJTW9kYWwvY29tcG9uZW50cy9DaGF0QWlNb2RhbEhlYWRlci9DaGF0QWlNb2RhbEhlYWRlci50c3giXSwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L2luZGVudCAqL1xuaW1wb3J0IHsgdXNlQ2FsbGJhY2ssIFBvaW50ZXJFdmVudCBhcyBSZWFjdFBvaW50ZXJFdmVudCB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgU3RhdHVzIH0gZnJvbSAnQHByb2plY3Rjb3IvaWNvbnMvbGliL2NvbXBvbmVudHMvU3RhdHVzJ1xuaW1wb3J0IHsgQ2hldnJvbkxlZnQgfSBmcm9tICdAcHJvamVjdGNvci9pY29ucy9saWIvY29tcG9uZW50cy9DaGV2cm9uTGVmdCdcbmltcG9ydCB7IHVzZVRyYW5zbGF0aW9uIH0gZnJvbSAncmVhY3QtaTE4bmV4dCdcbmltcG9ydCB7IFNFQ1RJT05TIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vY29uc3RhbnRzL2NvbmZpZydcbmltcG9ydCB7IHVzZUdsb2JhbENvbnRleHQgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi9jb250ZXh0L2dsb2JhbC1jb250ZXh0J1xuaW1wb3J0IHsgSWNvbkJ1dHRvbiB9IGZyb20gJy4uLy4uLy4uLy4uL2F0b21zL0ljb25CdXR0b24nXG5pbXBvcnQge1xuICBTQ0NBSU1ITW9kYWwsXG4gIFNDQ0FJTUhXcmFwcGVyQnV0dG9uLFxuICBTQ0NBSU1IQ3JlYXRlQWdlbnRCdXR0b24sXG4gIFNDQ0FJTUhDcmVhdGVBZ2VudEJ1dHRvblRleHQsXG4gIFNDQ0FJTUhCYWNrQnV0dG9uLFxuICBTQ0NBSU1ITWluaW1pemVJY29uLFxufSBmcm9tICcuL0NoYXRBaU1vZGFsSGVhZGVyLnN0eWxlcydcbmltcG9ydCB0eXBlIHsgTWFpYUNoYXRNb2RhbExheW91dE1vZGUgfSBmcm9tICcuLi8uLi9sYXlvdXQnXG5pbXBvcnQgeyBFVkVOVFMsIHVzZUV2ZW50IH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vaG9va3MvdXNlRXZlbnQnXG5pbXBvcnQgeyB1c2VVc2VyIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vY29udGV4dC9jb3ItdXNlcidcbmltcG9ydCB7IEFnZW50IH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vdHlwZXMvYWdlbnQnXG5pbXBvcnQgeyB1c2VNYWlhVGFza1BhbmVsWkluZGV4IH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vaG9va3MvdXNlTWFpYVRhc2tQYW5lbFpJbmRleCdcbmltcG9ydCB7IGNhblVzZXJDcmVhdGVBZ2VudHMsIGRpc3BhdGNoT3BlbkNyZWF0ZUFnZW50TW9kYWwsIHNob3VsZFNob3dBZ2VudFNlbGVjdG9yIH0gZnJvbSAnLi9DaGF0QWlNb2RhbEhlYWRlci51dGlscydcbmltcG9ydCB7IENoYXRBaU1vZGFsSGVhZGVyQWdlbnRTZWxlY3RvciB9IGZyb20gJy4vQ2hhdEFpTW9kYWxIZWFkZXJBZ2VudFNlbGVjdG9yJ1xuaW1wb3J0IHsgQ2hhdEFpTW9kYWxIZWFkZXJMYXlvdXRNZW51IH0gZnJvbSAnLi9DaGF0QWlNb2RhbEhlYWRlckxheW91dE1lbnUnXG5cbmNvbnN0IEVNUFRZX0FHRU5UUzogQWdlbnRbXSA9IFtdXG5cbmV4cG9ydCBjb25zdCBDaGF0QUlNb2RhbEhlYWRlciA9ICh7XG4gIGxheW91dE1vZGUsXG4gIG9uTGF5b3V0TW9kZUNoYW5nZSxcbiAgZHJhZ2dhYmxlID0gZmFsc2UsXG4gIG9uRHJhZ1N0YXJ0LFxuICBvbkRyYWdNb3ZlLFxuICBvbkRyYWdFbmQsXG4gIGhhbmRsZU1pbmltaXplLFxuICBhZ2VudHMgPSBFTVBUWV9BR0VOVFMsXG4gIGhhc0Vycm9yID0gZmFsc2UsXG4gIGxvYWRpbmcgPSBmYWxzZSxcbiAgbG9hZGluZ01vcmUgPSBmYWxzZSxcbiAgaGFzTW9yZSA9IGZhbHNlLFxuICBoYW5kbGVSZXNldENoYXQsXG4gIG9uQWdlbnRVcGRhdGUsXG4gIGxvYWRNb3JlQWdlbnRzLFxuICBzb3J0QWdlbnRzTGlzdCxcbiAgaXNNeUFnZW50c1NlY3Rpb24gPSBmYWxzZSxcbiAgaXNNeVNraWxsc1NlY3Rpb24gPSBmYWxzZSxcbiAgaXNNYWlha2VyU2VjdGlvbiA9IGZhbHNlLFxuICBoaWRlQWdlbnRTZWxlY3RvciA9IGZhbHNlLFxuICBoaWRlQ29udHJvbHMgPSBmYWxzZSxcbiAgb25BZ2VudFNlbGVjdGVkLFxuICBzaG93QmFja0J1dHRvbiA9IGZhbHNlLFxuICBvbkJhY2sgPSAoKSA9PiBudWxsLFxufToge1xuICBsYXlvdXRNb2RlOiBNYWlhQ2hhdE1vZGFsTGF5b3V0TW9kZVxuICBvbkxheW91dE1vZGVDaGFuZ2U6IChtb2RlOiBNYWlhQ2hhdE1vZGFsTGF5b3V0TW9kZSkgPT4gdm9pZFxuICBleHBhbmRlZDogYm9vbGVhblxuICBkcmFnZ2FibGU/OiBib29sZWFuXG4gIG9uRHJhZ1N0YXJ0PzogKGV2ZW50OiBSZWFjdFBvaW50ZXJFdmVudDxIVE1MRGl2RWxlbWVudD4pID0+IHZvaWRcbiAgb25EcmFnTW92ZT86IChldmVudDogUmVhY3RQb2ludGVyRXZlbnQ8SFRNTERpdkVsZW1lbnQ+KSA9PiB2b2lkXG4gIG9uRHJhZ0VuZD86IChldmVudDogUmVhY3RQb2ludGVyRXZlbnQ8SFRNTERpdkVsZW1lbnQ+KSA9PiB2b2lkXG4gIGhhbmRsZU1pbmltaXplPzogKCkgPT4gdm9pZFxuICBhZ2VudHM6IEFnZW50W11cbiAgaGFzRXJyb3I6IGJvb2xlYW5cbiAgbG9hZGluZzogYm9vbGVhblxuICBsb2FkaW5nTW9yZT86IGJvb2xlYW5cbiAgaGFzTW9yZT86IGJvb2xlYW5cbiAgaGFuZGxlUmVzZXRDaGF0OiAoKSA9PiB2b2lkXG4gIG9uQWdlbnRVcGRhdGU/OiAodXBkYXRlZEFnZW50OiBBZ2VudCkgPT4gdm9pZFxuICBsb2FkTW9yZUFnZW50cz86ICgpID0+IHZvaWRcbiAgc29ydEFnZW50c0xpc3Q/OiAoKSA9PiB2b2lkXG4gIC8qKiBTZWNjacOzbiBcIk1pcyBhZ2VudGVzXCI6IHNpIG5vIGhheSBhZ2VudGUgc2V0ZWFkbywgZWwgc2VsZWN0b3IgbXVlc3RyYSBlbCBpY29ubyBkZSBNQUlBIHkgZWwgbm9tYnJlIGRlIGxhIHNlY2Npw7NuICovXG4gIGlzTXlBZ2VudHNTZWN0aW9uPzogYm9vbGVhblxuICAvKiogU2VjY2nDs24gXCJTa2lsbHNcIjogbWlzbW8gY29tcG9ydGFtaWVudG8gZGUgc2VsZWN0b3IgcXVlIE1pcyBhZ2VudGVzLCBjb24gZWwgbm9tYnJlIGRlIGxhIHNlY2Npw7NuICovXG4gIGlzTXlTa2lsbHNTZWN0aW9uPzogYm9vbGVhblxuICAvKiogT2N1bHRhIGVsIGNoaXAgZGUgbW9kZWxvIExMTSAocC4gZWouIGVuIE1pcyBhZ2VudGVzIC8gTWlzIHNraWxscykgKi9cbiAgaGlkZUFnZW50U2VsZWN0b3I/OiBib29sZWFuXG4gIC8qKiBPY3VsdGEgbG9zIGJvdG9uZXMgZGUgbGF5b3V0IHkgY2llcnJlIChtb2RvIHDDoWdpbmEgY29tcGxldGEpICovXG4gIGhpZGVDb250cm9scz86IGJvb2xlYW5cbiAgLyoqIFNlY2Npw7NuIFwiQ3JlYWRvciBkZSBhZ2VudGVzXCIgKE1haWFrZXIpOiBoYWJpbGl0YSBlbCBib3TDs24gXCJDcmVhciBhZ2VudGVcIiBkZWwgaGVhZGVyICovXG4gIGlzTWFpYWtlclNlY3Rpb24/OiBib29sZWFuXG4gIC8qKlxuICAgKiBTZSBpbnZvY2EgZGVzcHXDqXMgZGVsIHJlc2V0IGN1YW5kbyBlbCBhZ2VudGUgc2VsZWNjaW9uYWRvIE5PIHJlcXVpZXJlIHNlbGVjY2nDs25cbiAgICogZGUgZW50aXR5IChjdXN0b20gbyBjbG9uZStnbG9iYWwpLiBQZXJtaXRlIHJlc29sdmVyIGBHRVQgL3YyL3Nlc3Npb25zL2FnZW50L3tpZH1gXG4gICAqIHkgbmF2ZWdhciBhIHVuYSBjb252ZXJzYWNpw7NuIGV4aXN0ZW50ZSBzaSBsYSBoYXkuXG4gICAqL1xuICBvbkFnZW50U2VsZWN0ZWQ/OiAoYWdlbnQ6IEFnZW50KSA9PiB2b2lkIHwgUHJvbWlzZTx1bmtub3duPlxuICBzaG93QmFja0J1dHRvbj86IGJvb2xlYW5cbiAgb25CYWNrPzogKCkgPT4gdm9pZFxufSkgPT4ge1xuICBjb25zdCB7IHQgfSA9IHVzZVRyYW5zbGF0aW9uKFtTRUNUSU9OUy5hYm1BZ2VudCwgU0VDVElPTlMuY2hhdEFJXSlcbiAgY29uc3QgdXNlciA9IHVzZVVzZXIoKVxuICBjb25zdCBhbXBsaXR1ZEV2ZW50ID0gdXNlRXZlbnQoKVxuICBjb25zdCB7IGFnZW50OiBzZWxlY3RlZEFnZW50IH0gPSB1c2VHbG9iYWxDb250ZXh0KClcbiAgLy8gRW4gc2VjdGlvbiAndGFzaycgZWwgbW9kYWwgZGUgTWFpYSBzZSBlbGV2YSBwb3IgZW5jaW1hIGRlbCB0YXNrIHBhbmVsICh6LWluZGV4IDk4MDAwMDEpLlxuICAvLyBMb3MgdG9vbHRpcHMgc2UgbW9udGFuIGVuIHBvcnRhbCBjb24gei1pbmRleCAxNTAwIHBvciBkZWZlY3RvLCBhc8OtIHF1ZSBxdWVkYXLDrWFuIGRldHLDoXMuXG4gIC8vIFN1Ymltb3Mgc3Ugei1pbmRleCBzw7NsbyBlbiBlc3RlIGNhc28gcGFyYSBxdWUgc2UgdmVhbiBwb3IgZW5jaW1hIGRlbCBtb2RhbC5cbiAgY29uc3QgdG9vbHRpcFpJbmRleCA9IHVzZU1haWFUYXNrUGFuZWxaSW5kZXgoMTUwMCwgJ292ZXJsYXknKVxuXG4gIGNvbnN0IHNob3dIZWFkZXJDcmVhdGVBZ2VudEJ1dHRvbiA9IGNhblVzZXJDcmVhdGVBZ2VudHModXNlcikgJiYgKGlzTXlBZ2VudHNTZWN0aW9uIHx8IGlzTWFpYWtlclNlY3Rpb24pXG5cbiAgY29uc3QgaGFuZGxlT3BlbkNyZWF0ZUFnZW50TW9kYWwgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgYW1wbGl0dWRFdmVudChFVkVOVFMub3Blbk1vZGFsLCB7IG9wdGlvbjogJ2NyZWF0ZV9hZ2VudCcgfSlcbiAgICBkaXNwYXRjaE9wZW5DcmVhdGVBZ2VudE1vZGFsKClcbiAgfSwgW2FtcGxpdHVkRXZlbnRdKVxuXG4gIGNvbnN0IHNob3VsZFJlbmRlclNlbGVjdG9yID0gc2hvdWxkU2hvd0FnZW50U2VsZWN0b3Ioe1xuICAgIGhhc0Vycm9yLFxuICAgIGxvYWRpbmcsXG4gICAgaGlkZUFnZW50U2VsZWN0b3IsXG4gICAgaGFzU2VsZWN0ZWRBZ2VudDogISFzZWxlY3RlZEFnZW50LFxuICAgIGlzQWdlbnRzU2VjdGlvbjogaXNNeUFnZW50c1NlY3Rpb24gfHwgaXNNeVNraWxsc1NlY3Rpb24sXG4gIH0pXG4gIGNvbnN0IGRyYWdIYW5kbGVycyA9IGRyYWdnYWJsZVxuICAgID8ge1xuICAgICAgICBvblBvaW50ZXJEb3duOiBvbkRyYWdTdGFydCxcbiAgICAgICAgb25Qb2ludGVyTW92ZTogb25EcmFnTW92ZSxcbiAgICAgICAgb25Qb2ludGVyVXA6IG9uRHJhZ0VuZCxcbiAgICAgICAgb25Qb2ludGVyQ2FuY2VsOiBvbkRyYWdFbmQsXG4gICAgICAgIG9uTG9zdFBvaW50ZXJDYXB0dXJlOiBvbkRyYWdFbmQsXG4gICAgICAgIHN0eWxlOiB7IGN1cnNvcjogJ2dyYWInLCB0b3VjaEFjdGlvbjogJ21hbmlwdWxhdGlvbicgfSxcbiAgICAgIH1cbiAgICA6IHt9XG5cbiAgcmV0dXJuIChcbiAgICA8U0NDQUlNSE1vZGFsICRoYXNFcnJvcj17aGFzRXJyb3J9ICRsb2FkaW5nPXtsb2FkaW5nfSAkaGFzQWdlbnRzPXshIWFnZW50cy5sZW5ndGh9IHsuLi5kcmFnSGFuZGxlcnN9PlxuICAgICAge3Nob3VsZFJlbmRlclNlbGVjdG9yID8gKFxuICAgICAgICA8Q2hhdEFpTW9kYWxIZWFkZXJBZ2VudFNlbGVjdG9yXG4gICAgICAgICAgYWdlbnRzPXthZ2VudHN9XG4gICAgICAgICAgaGFzTW9yZT17aGFzTW9yZX1cbiAgICAgICAgICBsb2FkaW5nTW9yZT17bG9hZGluZ01vcmV9XG4gICAgICAgICAgaXNNeUFnZW50c1NlY3Rpb249e2lzTXlBZ2VudHNTZWN0aW9ufVxuICAgICAgICAgIGlzTXlTa2lsbHNTZWN0aW9uPXtpc015U2tpbGxzU2VjdGlvbn1cbiAgICAgICAgICBpc01haWFrZXJTZWN0aW9uPXtpc01haWFrZXJTZWN0aW9ufVxuICAgICAgICAgIHRvb2x0aXBaSW5kZXg9e3Rvb2x0aXBaSW5kZXh9XG4gICAgICAgICAgaGFuZGxlUmVzZXRDaGF0PXtoYW5kbGVSZXNldENoYXR9XG4gICAgICAgICAgb25BZ2VudFVwZGF0ZT17b25BZ2VudFVwZGF0ZX1cbiAgICAgICAgICBsb2FkTW9yZUFnZW50cz17bG9hZE1vcmVBZ2VudHN9XG4gICAgICAgICAgc29ydEFnZW50c0xpc3Q9e3NvcnRBZ2VudHNMaXN0fVxuICAgICAgICAgIG9uQWdlbnRTZWxlY3RlZD17b25BZ2VudFNlbGVjdGVkfVxuICAgICAgICAvPlxuICAgICAgKSA6IChcbiAgICAgICAgPGRpdiAvPlxuICAgICAgKX1cbiAgICAgIDxTQ0NBSU1IV3JhcHBlckJ1dHRvbiBkYXRhLW5vLWRyYWc9XCJ0cnVlXCI+XG4gICAgICAgIHtzaG93QmFja0J1dHRvbiA/IChcbiAgICAgICAgICA8U0NDQUlNSEJhY2tCdXR0b24gdHlwZT1cImJ1dHRvblwiIG9uQ2xpY2s9eygpID0+IG9uQmFjaygpfT5cbiAgICAgICAgICAgIDxDaGV2cm9uTGVmdCB3aWR0aD17MTR9IGhlaWdodD17MTR9IGNvbG9yPVwiIzM0MzQzM1wiIC8+XG4gICAgICAgICAgICB7dCgnYmFjaycpfVxuICAgICAgICAgIDwvU0NDQUlNSEJhY2tCdXR0b24+XG4gICAgICAgICkgOiBudWxsfVxuICAgICAgICB7c2hvd0hlYWRlckNyZWF0ZUFnZW50QnV0dG9uID8gKFxuICAgICAgICAgIDxTQ0NBSU1IQ3JlYXRlQWdlbnRCdXR0b24gdHlwZT1cImJ1dHRvblwiIG9uQ2xpY2s9e2hhbmRsZU9wZW5DcmVhdGVBZ2VudE1vZGFsfT5cbiAgICAgICAgICAgIDxTQ0NBSU1IQ3JlYXRlQWdlbnRCdXR0b25UZXh0Pnt0KCdvcGVuQWdlbnRDcmVhdG9yJyl9PC9TQ0NBSU1IQ3JlYXRlQWdlbnRCdXR0b25UZXh0PlxuICAgICAgICAgIDwvU0NDQUlNSENyZWF0ZUFnZW50QnV0dG9uPlxuICAgICAgICApIDogbnVsbH1cbiAgICAgICAge2hpZGVDb250cm9scyA/IG51bGwgOiAoXG4gICAgICAgICAgPD5cbiAgICAgICAgICAgIDxDaGF0QWlNb2RhbEhlYWRlckxheW91dE1lbnVcbiAgICAgICAgICAgICAgbGF5b3V0TW9kZT17bGF5b3V0TW9kZX1cbiAgICAgICAgICAgICAgb25MYXlvdXRNb2RlQ2hhbmdlPXtvbkxheW91dE1vZGVDaGFuZ2V9XG4gICAgICAgICAgICAgIHRvb2x0aXBaSW5kZXg9e3Rvb2x0aXBaSW5kZXh9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAge2hhbmRsZU1pbmltaXplID8gKFxuICAgICAgICAgICAgICA8SWNvbkJ1dHRvbiBoYW5kbGVDbGljaz17aGFuZGxlTWluaW1pemV9IHRvb2x0aXA9e3QoJ2dsb2JhbHMubWluaW1pemUnKX0gdG9vbHRpcFpJbmRleD17dG9vbHRpcFpJbmRleH0+XG4gICAgICAgICAgICAgICAgPFNDQ0FJTUhNaW5pbWl6ZUljb24+XG4gICAgICAgICAgICAgICAgICA8U3RhdHVzIHdpZHRoPXsyNH0gaGVpZ2h0PXsyNH0gLz5cbiAgICAgICAgICAgICAgICA8L1NDQ0FJTUhNaW5pbWl6ZUljb24+XG4gICAgICAgICAgICAgIDwvSWNvbkJ1dHRvbj5cbiAgICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICAgIDwvPlxuICAgICAgICApfVxuICAgICAgPC9TQ0NBSU1IV3JhcHBlckJ1dHRvbj5cbiAgICA8L1NDQ0FJTUhNb2RhbD5cbiAgKVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7QUFBQTtBQUNBLFNBQVNBLFdBQVcsUUFBMkMsT0FBTztBQUN0RSxTQUFTQyxNQUFNLFFBQVEseUNBQXlDO0FBQ2hFLFNBQVNDLFdBQVcsUUFBUSw4Q0FBOEM7QUFDMUUsU0FBU0MsY0FBYyxRQUFRLGVBQWU7QUFDOUMsU0FBU0MsUUFBUSxRQUFRLGlDQUFpQztBQUMxRCxTQUFTQyxnQkFBZ0IsUUFBUSx1Q0FBdUM7QUFDeEUsU0FBU0MsVUFBVSxRQUFRLDhCQUE4QjtBQUN6RCxTQUNFQyxZQUFZLEVBQ1pDLG9CQUFvQixFQUNwQkMsd0JBQXdCLEVBQ3hC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
|