@projectcor/maia-components 2.11.23-2 → 2.11.23-4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/components/atoms/ApprovalBox/ApprovalBox.js +17 -60
- package/lib/components/atoms/ApprovalBox/ApprovalBox.styles.js +16 -23
- package/lib/components/atoms/FeedbackButton/FeedbackButton.styles.js +2 -2
- package/lib/components/atoms/icons/ChatConversation.js +40 -0
- package/lib/components/atoms/icons/MaiaStoreIcon.js +31 -0
- package/lib/components/atoms/icons/MyAgentsNavIcon.js +51 -0
- package/lib/components/atoms/icons/index.js +4 -1
- package/lib/components/molecules/ChatAIContent/ChatAIContent.js +24 -5
- package/lib/components/molecules/ChatAIHistory/ChatAIHistory.js +16 -3
- package/lib/components/molecules/ChatAIHome/ChatAIHome.js +26 -61
- package/lib/components/molecules/ChatAIHome/ChatAIHomeMaiaker.js +130 -0
- package/lib/components/molecules/ChatAIHome/ChatAIHomeMaiaker.styles.js +91 -0
- package/lib/components/molecules/ChatAIHome/styles.js +37 -43
- package/lib/components/molecules/ChatAIMessages/ChatAICreateAgentActions.js +137 -0
- package/lib/components/molecules/ChatAIMessages/ChatAIMessages.js +58 -6
- package/lib/components/molecules/ChatAIMessages/ChatAISuggestions.js +43 -0
- package/lib/components/molecules/ChatAIMessages/ChatAISuggestions.styles.js +37 -0
- package/lib/components/molecules/ChatAIMessages/newStyles.js +24 -21
- package/lib/components/molecules/ChatAIModal/ChatAIModal.js +184 -14
- package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.js +20 -42
- package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.styles.js +5 -13
- package/lib/components/molecules/ChatAIModal/constants.js +6 -2
- package/lib/components/molecules/ChatAIMyAgents/ChatAIMyAgents.js +328 -0
- package/lib/components/molecules/ChatAIMyAgents/ChatAIMyAgents.styles.js +178 -0
- package/lib/components/molecules/ChatFooter/ChatFooter.js +4 -3
- package/lib/components/molecules/Sidebar/Sidebar.js +331 -453
- package/lib/components/molecules/Sidebar/Sidebar.layout.styles.js +112 -0
- package/lib/components/molecules/Sidebar/Sidebar.styles.js +60 -31
- package/lib/components/molecules/Sidebar/SidebarChats.styles.js +70 -0
- package/lib/components/molecules/Sidebar/SidebarChatsSection.js +69 -0
- package/lib/components/molecules/Sidebar/SidebarChatsSectionModal.js +133 -0
- package/lib/components/molecules/Sidebar/SidebarHistoryChat.js +238 -0
- package/lib/components/molecules/Sidebar/sidebarChats.helpers.js +70 -0
- package/lib/components/molecules/Sidebar/sidebarChats.types.js +14 -0
- package/lib/components/organisms/AbmAgentModal/AbmAgentModal.js +99 -52
- package/lib/dev/Providers.js +2 -2
- package/lib/dev/fixtures/devUser.js +173 -0
- package/lib/dev/fixtures/mockedUser.js +169 -0
- package/lib/hooks/index.js +4 -1
- package/lib/hooks/useAgentSuggestions.js +60 -0
- package/lib/hooks/useChatManager/useChatManager.interface.js +1 -1
- package/lib/hooks/useChatManager/useChatManager.js +185 -80
- package/lib/hooks/useChats/useChats.js +12 -4
- package/lib/hooks/useEvent.js +5 -2
- package/lib/hooks/useOrchestratorStream/useOrchestratorStream.interface.js +1 -1
- package/lib/hooks/useOrchestratorStream/useOrchestratorStream.js +19 -7
- package/lib/lang/br/index.js +82 -23
- package/lib/lang/en/index.js +82 -23
- package/lib/lang/es/index.js +80 -21
- package/lib/lang/fr/index.js +66 -18
- package/lib/services/maia/Agents/fetchAgentDetail.js +122 -0
- package/lib/services/maia/Agents/getAgentById.js +9 -5
- package/lib/services/maia/Agents/getAgentSuggestions.js +44 -0
- package/lib/services/maia/Agents/getAgents.js +9 -10
- package/lib/services/maia/Chats/getChatMessagesV2.js +114 -0
- package/lib/services/maia/Chats/getChatsByUserId.js +14 -8
- package/lib/services/maia/Chats/getSessionsGroupedV2.js +70 -0
- package/lib/services/maia/Chats/index.js +5 -1
- package/lib/services/maia/Orchestrator/orchestrator.js +29 -22
- package/lib/services/maia/client.js +44 -9
- package/lib/services/utils/mapChatMessages.js +5 -14
- package/lib/store/chatsStore.types.js +10 -2
- package/lib/store/useChatsStore.js +81 -31
- package/lib/types/AgentSuggestion.js +2 -0
- package/lib/types/Chat.js +3 -1
- package/lib/types/agent.js +1 -1
- package/lib/types/agentModal.js +1 -1
- package/package.json +1 -1
- package/lib/mocks/mockChats.js +0 -395
- package/lib/mocks/mockedUser.js +0 -169
|
@@ -1,219 +1,94 @@
|
|
|
1
|
+
import _defineProperty from "@babel/runtime/helpers/defineProperty";
|
|
1
2
|
import _asyncToGenerator from "@babel/runtime/helpers/asyncToGenerator";
|
|
2
3
|
import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
|
|
3
|
-
import _defineProperty from "@babel/runtime/helpers/defineProperty";
|
|
4
|
-
import _regeneratorRuntime from "@babel/runtime/regenerator";
|
|
5
4
|
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; }
|
|
6
5
|
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; }
|
|
6
|
+
import _regeneratorRuntime from "@babel/runtime/regenerator";
|
|
7
7
|
/* eslint-disable no-param-reassign */
|
|
8
8
|
/* eslint-disable @typescript-eslint/no-shadow */
|
|
9
9
|
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
10
10
|
/* eslint-disable no-nested-ternary */
|
|
11
11
|
/* eslint-disable jsx-a11y/click-events-have-key-events */
|
|
12
12
|
/* eslint-disable jsx-a11y/no-static-element-interactions */
|
|
13
|
-
import { useEffect, useRef, useState } from 'react';
|
|
13
|
+
import { useEffect, useMemo, useRef, useState } from 'react';
|
|
14
|
+
import { AnimatePresence } from 'framer-motion';
|
|
14
15
|
import { ChevronDoubleLeft } from '@projectcor/icons/lib/components/ChevronDoubleLeft';
|
|
15
|
-
import { CUButton } from '@projectcor/button/lib/components/CUButton';
|
|
16
|
-
import { MenuDots } from '@projectcor/icons/lib/components/MenuDots';
|
|
17
|
-
import { Pencil } from '@projectcor/icons/lib/components/Pencil';
|
|
18
|
-
import { Trash } from '@projectcor/icons/lib/components/Trash';
|
|
19
16
|
import { Tooltip } from '@projectcor/tooltipv2/lib/components/Tooltip';
|
|
20
17
|
import { EmptyHistoryIcon } from '../../atoms/icons/EmptyHistory';
|
|
21
|
-
import { useResizeListener } from '../../../hooks/useResize';
|
|
22
18
|
import { useChats } from '../../../hooks/useChats';
|
|
23
19
|
import { Loader } from '../../atoms/Loader';
|
|
24
|
-
import { ErrorState,
|
|
25
|
-
import { EVENTS } from '../../../hooks/useEvent';
|
|
20
|
+
import { ErrorState, MaiaStoreIcon, MyAgentsNavIcon, NewChat } from '../../atoms/icons';
|
|
21
|
+
import { EVENTS, useEvent } from '../../../hooks/useEvent';
|
|
26
22
|
import { useT } from '../../../hooks/useT';
|
|
27
|
-
import { OptionItem } from '../../atoms/CardMenu/CardMenu';
|
|
28
|
-
import { EditQuestionModal } from '../../organisms/EditQuestionModal';
|
|
29
|
-
import { DeleteQuestionModal } from '../../organisms/DeleteQuestionModal';
|
|
30
23
|
import { ErrorIcon } from '../../atoms/icons/ErrorIcon';
|
|
31
24
|
import { useUser } from '../../../context/cor-user';
|
|
32
25
|
import { OnboardingModalButton } from '../../atoms/OnboardingModalButton';
|
|
33
26
|
import { FeedbackButton } from '../../atoms/FeedbackButton';
|
|
34
27
|
import { useGlobalContext } from '../../../context/global-context';
|
|
35
|
-
import {
|
|
28
|
+
import { fetchMaia } from '../../../services/maia/client';
|
|
29
|
+
import { mapCORLang } from '../../../lang/utils';
|
|
30
|
+
import { SCSWrapperCollapsedButton, SCSWrapperNewChatIcon } from './Sidebar.styles';
|
|
31
|
+
import { SCSSidebarRoot, SCSSidebarToolbar, SCSSidebarBody, SCSSidebarOpenPanel, SCSSidebarAgentsBlock, SCSSidebarAgentsHeading, SCSSidebarAgentsHeadingText, SCSSidebarAgentsActions, SCSSidebarMaiakerNavButton, SCSSidebarMaiakerNavLabel, SCSSidebarChatsScroll, SCSSidebarErrorStateColumn, SCSSidebarErrorStateTop, SCSSidebarErrorBanner, SCSSidebarErrorBannerIconWrap, SCSSidebarErrorBannerMessage, SCSSidebarLoadingArea, SCSSidebarLoadMoreRow, SCSSidebarEmptyChats, SCSSidebarEmptyChatsText, SCSSidebarChatsFooter, SCSSidebarFooterActions } from './Sidebar.layout.styles';
|
|
32
|
+
import { SCSSidebarSectionModalBackdropMotion } from './SidebarChats.styles';
|
|
33
|
+
import { SidebarChatsSection } from './SidebarChatsSection';
|
|
34
|
+
import { SidebarChatsSectionModal } from './SidebarChatsSectionModal';
|
|
35
|
+
import { buildSidebarSections, groupChatsBySidebarSection } from './sidebarChats.helpers';
|
|
36
|
+
import { SIDEBAR_SECTION_TRANSLATION_KEYS } from './sidebarChats.types';
|
|
37
|
+
import { getChatsStoreState } from '../../../store/useChatsStore';
|
|
38
|
+
import { SECTION_MODAL_SESSIONS_PAGE_LIMIT, SIDEBAR_SESSIONS_PAGE_LIMIT } from '../../../store/chatsStore.types';
|
|
36
39
|
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
37
|
-
var
|
|
38
|
-
edit: function edit(props) {
|
|
39
|
-
return /*#__PURE__*/_jsx(EditQuestionModal, _objectSpread({}, props));
|
|
40
|
-
},
|
|
41
|
-
"delete": function _delete(props) {
|
|
42
|
-
return /*#__PURE__*/_jsx(DeleteQuestionModal, _objectSpread({}, props));
|
|
43
|
-
}
|
|
44
|
-
};
|
|
45
|
-
|
|
46
|
-
/** Abrevia "especialista"/"especialist" → "Esp." (ES/PT) y "specialist" → "Spec." (EN) en el nombre del agente. */
|
|
47
|
-
function abbreviateSpecialistInAgentName(agentName) {
|
|
48
|
-
if (!agentName || typeof agentName !== 'string') return agentName;
|
|
49
|
-
return agentName.replace(/\b(especialista|especialist)\b/gi, 'Esp.').replace(/\bspecialist\b/gi, 'Spec.');
|
|
50
|
-
}
|
|
51
|
-
var ListHistoryChat = function ListHistoryChat(_ref) {
|
|
52
|
-
var chat = _ref.chat,
|
|
53
|
-
_onClick = _ref.onClick,
|
|
54
|
-
isModalOpen = _ref.isModalOpen,
|
|
55
|
-
onOpenModal = _ref.onOpenModal,
|
|
56
|
-
onCloseModal = _ref.onCloseModal,
|
|
57
|
-
handlers = _ref.handlers,
|
|
58
|
-
isSelected = _ref.isSelected;
|
|
59
|
-
var textRef = useRef(null);
|
|
60
|
-
var agentRef = useRef(null);
|
|
61
|
-
var _useResizeListener = useResizeListener(textRef, [chat.title]),
|
|
62
|
-
showTooltip = _useResizeListener.showTooltip;
|
|
63
|
-
var _useResizeListener2 = useResizeListener(agentRef, [chat.agent]),
|
|
64
|
-
showTooltipAgent = _useResizeListener2.showTooltip;
|
|
65
|
-
var _useT = useT(),
|
|
66
|
-
t = _useT.t;
|
|
67
|
-
var _useState = useState(null),
|
|
68
|
-
_useState2 = _slicedToArray(_useState, 2),
|
|
69
|
-
action = _useState2[0],
|
|
70
|
-
setAction = _useState2[1];
|
|
71
|
-
var menuItems = [{
|
|
72
|
-
label: t('history.menu.rename'),
|
|
73
|
-
onClickItem: function onClickItem(chatId) {
|
|
74
|
-
setAction('edit');
|
|
75
|
-
onOpenModal(chatId);
|
|
76
|
-
},
|
|
77
|
-
Icon: Pencil,
|
|
78
|
-
eventKey: EVENTS.pmAiMenuEdit
|
|
79
|
-
}, {
|
|
80
|
-
label: t('history.menu.delete'),
|
|
81
|
-
onClickItem: function onClickItem(chatId) {
|
|
82
|
-
setAction('delete');
|
|
83
|
-
onOpenModal(chatId);
|
|
84
|
-
},
|
|
85
|
-
Icon: Trash,
|
|
86
|
-
eventKey: EVENTS.pmAiMenuDelete
|
|
87
|
-
}];
|
|
88
|
-
var handleConfirmAction = function handleConfirmAction(chatData) {
|
|
89
|
-
if (action === 'edit') {
|
|
90
|
-
handlers.handleUpdateChat(chatData);
|
|
91
|
-
} else {
|
|
92
|
-
handlers.handleDeleteChat(chatData);
|
|
93
|
-
}
|
|
94
|
-
setAction(null);
|
|
95
|
-
onCloseModal();
|
|
96
|
-
};
|
|
97
|
-
return /*#__PURE__*/_jsxs(_Fragment, {
|
|
98
|
-
children: [/*#__PURE__*/_jsxs(SCLHCWrapperContent, {
|
|
99
|
-
onClick: function onClick(e) {
|
|
100
|
-
e.stopPropagation();
|
|
101
|
-
_onClick(chat);
|
|
102
|
-
},
|
|
103
|
-
isModalOpen: isModalOpen,
|
|
104
|
-
isSelected: isSelected,
|
|
105
|
-
children: [/*#__PURE__*/_jsxs(SCLHCWrapper, {
|
|
106
|
-
children: [/*#__PURE__*/_jsx(Tooltip, {
|
|
107
|
-
title: showTooltip ? chat.title : '',
|
|
108
|
-
children: /*#__PURE__*/_jsx(SCLHCWrapperTitle, {
|
|
109
|
-
ref: textRef,
|
|
110
|
-
children: chat.title || t('conversations.emptyLabel')
|
|
111
|
-
})
|
|
112
|
-
}), /*#__PURE__*/_jsx(Tooltip, {
|
|
113
|
-
title: showTooltipAgent ? chat.agent + (chat.projectName ? " - ".concat(chat.projectName) : '') : '',
|
|
114
|
-
children: /*#__PURE__*/_jsxs(SCLHCWrapperAgent, {
|
|
115
|
-
children: [chat.agentType === 'clone' ? /*#__PURE__*/_jsx(MAIAIcon, {
|
|
116
|
-
width: 14,
|
|
117
|
-
height: 14
|
|
118
|
-
}) : /*#__PURE__*/_jsx("span", {
|
|
119
|
-
style: {
|
|
120
|
-
fontSize: '14px'
|
|
121
|
-
},
|
|
122
|
-
children: chat.emoji
|
|
123
|
-
}), /*#__PURE__*/_jsxs(SCLHCWrapperAgentText, {
|
|
124
|
-
ref: agentRef,
|
|
125
|
-
children: [chat.agentType === 'clone' ? abbreviateSpecialistInAgentName(chat.agent) : chat.agent, chat.projectName && " - ".concat(chat.projectName)]
|
|
126
|
-
})]
|
|
127
|
-
})
|
|
128
|
-
})]
|
|
129
|
-
}), /*#__PURE__*/_jsxs(SCLHCWrapperButtonActions, {
|
|
130
|
-
children: [/*#__PURE__*/_jsx(CUButton, {
|
|
131
|
-
iconOnly: true,
|
|
132
|
-
size: "small",
|
|
133
|
-
variant: "text",
|
|
134
|
-
onClick: function onClick(event) {
|
|
135
|
-
event.stopPropagation();
|
|
136
|
-
onOpenModal(chat.id);
|
|
137
|
-
},
|
|
138
|
-
children: /*#__PURE__*/_jsx(MenuDots, {
|
|
139
|
-
width: 20,
|
|
140
|
-
height: 20
|
|
141
|
-
})
|
|
142
|
-
}), isModalOpen && !action && /*#__PURE__*/_jsx("div", {
|
|
143
|
-
"data-modal-container": true,
|
|
144
|
-
style: {
|
|
145
|
-
position: 'absolute',
|
|
146
|
-
top: '32px',
|
|
147
|
-
right: '16px',
|
|
148
|
-
backgroundColor: 'white',
|
|
149
|
-
zIndex: 1000,
|
|
150
|
-
display: 'flex',
|
|
151
|
-
flexDirection: 'column',
|
|
152
|
-
borderRadius: '4px',
|
|
153
|
-
border: '1px solid rgba(224, 224, 224, 1)',
|
|
154
|
-
minWidth: '124px'
|
|
155
|
-
},
|
|
156
|
-
children: menuItems.map(function (_ref2) {
|
|
157
|
-
var label = _ref2.label,
|
|
158
|
-
onClickItem = _ref2.onClickItem,
|
|
159
|
-
Icon = _ref2.Icon,
|
|
160
|
-
eventKey = _ref2.eventKey;
|
|
161
|
-
return /*#__PURE__*/_jsx(OptionItem, {
|
|
162
|
-
label: label,
|
|
163
|
-
onClick: function onClick() {
|
|
164
|
-
return onClickItem(chat.id);
|
|
165
|
-
},
|
|
166
|
-
Icon: Icon,
|
|
167
|
-
eventKey: eventKey
|
|
168
|
-
}, label);
|
|
169
|
-
})
|
|
170
|
-
})]
|
|
171
|
-
})]
|
|
172
|
-
}, "conversation-".concat(chat.sessionExternalId)), !!action && actions[action]({
|
|
173
|
-
onClose: function onClose() {
|
|
174
|
-
onCloseModal();
|
|
175
|
-
setAction(null);
|
|
176
|
-
},
|
|
177
|
-
chat: chat,
|
|
178
|
-
handlers: {
|
|
179
|
-
handleConfirmAction: handleConfirmAction,
|
|
180
|
-
handleSetIsOpenModal: onCloseModal
|
|
181
|
-
}
|
|
182
|
-
})]
|
|
183
|
-
});
|
|
184
|
-
};
|
|
185
|
-
export var Sidebar = function Sidebar(_ref3) {
|
|
40
|
+
export var Sidebar = function Sidebar(_ref) {
|
|
186
41
|
var _user$permissions;
|
|
187
|
-
var onGoToChat =
|
|
188
|
-
|
|
189
|
-
onError =
|
|
42
|
+
var onGoToChat = _ref.onGoToChat,
|
|
43
|
+
_ref$onError = _ref.onError,
|
|
44
|
+
onError = _ref$onError === void 0 ? function () {
|
|
190
45
|
return null;
|
|
191
|
-
} :
|
|
192
|
-
handleGoToHome =
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
46
|
+
} : _ref$onError,
|
|
47
|
+
handleGoToHome = _ref.handleGoToHome,
|
|
48
|
+
handleOpenMarketplace = _ref.handleOpenMarketplace,
|
|
49
|
+
showNewChat = _ref.showNewChat,
|
|
50
|
+
refetchChats = _ref.refetchChats,
|
|
51
|
+
handleSetRefetchChats = _ref.handleSetRefetchChats,
|
|
52
|
+
hasError = _ref.hasError,
|
|
53
|
+
resetSelectedChatRef = _ref.resetSelectedChatRef,
|
|
54
|
+
_ref$agentsNavActive = _ref.agentsNavActive,
|
|
55
|
+
agentsNavActive = _ref$agentsNavActive === void 0 ? null : _ref$agentsNavActive;
|
|
56
|
+
var _useT = useT(),
|
|
57
|
+
t = _useT.t,
|
|
58
|
+
i18n = _useT.i18n;
|
|
59
|
+
var _useState = useState(true),
|
|
60
|
+
_useState2 = _slicedToArray(_useState, 2),
|
|
61
|
+
isOpen = _useState2[0],
|
|
62
|
+
setIsOpen = _useState2[1];
|
|
63
|
+
var _useState3 = useState(null),
|
|
201
64
|
_useState4 = _slicedToArray(_useState3, 2),
|
|
202
|
-
|
|
203
|
-
|
|
65
|
+
chatMenuState = _useState4[0],
|
|
66
|
+
setChatMenuState = _useState4[1];
|
|
204
67
|
var _useState5 = useState(null),
|
|
205
68
|
_useState6 = _slicedToArray(_useState5, 2),
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
var _useState7 = useState(
|
|
69
|
+
expandedSectionModalKey = _useState6[0],
|
|
70
|
+
setExpandedSectionModalKey = _useState6[1];
|
|
71
|
+
var _useState7 = useState({
|
|
72
|
+
clients: false,
|
|
73
|
+
projects: false,
|
|
74
|
+
agentsByCompany: false
|
|
75
|
+
}),
|
|
209
76
|
_useState8 = _slicedToArray(_useState7, 2),
|
|
210
|
-
|
|
211
|
-
|
|
77
|
+
collapsedSections = _useState8[0],
|
|
78
|
+
setCollapsedSections = _useState8[1];
|
|
79
|
+
var _useState9 = useState(null),
|
|
80
|
+
_useState0 = _slicedToArray(_useState9, 2),
|
|
81
|
+
selectedChat = _useState0[0],
|
|
82
|
+
setSelectedChat = _useState0[1];
|
|
212
83
|
var chatsFetchedRef = useRef(false);
|
|
213
|
-
var
|
|
84
|
+
var sidebarScrollRef = useRef(null);
|
|
214
85
|
var user = useUser();
|
|
86
|
+
var eventAmplitude = useEvent();
|
|
215
87
|
var _useGlobalContext = useGlobalContext(),
|
|
216
|
-
selectedAgent = _useGlobalContext.agent
|
|
88
|
+
selectedAgent = _useGlobalContext.agent,
|
|
89
|
+
selectAgent = _useGlobalContext.selectAgent,
|
|
90
|
+
setProject = _useGlobalContext.setProject,
|
|
91
|
+
setClient = _useGlobalContext.setClient;
|
|
217
92
|
var _useChats = useChats({
|
|
218
93
|
onError: onError
|
|
219
94
|
}),
|
|
@@ -222,12 +97,29 @@ export var Sidebar = function Sidebar(_ref3) {
|
|
|
222
97
|
deleteChat = _useChats.deleteChat,
|
|
223
98
|
updateChat = _useChats.updateChat,
|
|
224
99
|
fetchChats = _useChats.fetchChats,
|
|
225
|
-
limit = _useChats.limit,
|
|
226
|
-
offset = _useChats.offset,
|
|
227
100
|
hasMoreChats = _useChats.hasMoreChats,
|
|
228
101
|
loadMoreChats = _useChats.loadMoreChats,
|
|
229
|
-
isLoadingMoreChats = _useChats.isLoadingMoreChats
|
|
102
|
+
isLoadingMoreChats = _useChats.isLoadingMoreChats,
|
|
103
|
+
sessionsGroupHasMore = _useChats.sessionsGroupHasMore;
|
|
230
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 canCreateAgents = !!(userPermissions !== null && userPermissions !== void 0 && userPermissions.create);
|
|
106
|
+
var canViewAgents = !!(userPermissions !== null && userPermissions !== void 0 && userPermissions.view);
|
|
107
|
+
var agentNavButtonCount = canCreateAgents ? 2 : canViewAgents ? 1 : 0;
|
|
108
|
+
var showAgentsNavBlock = canCreateAgents || canViewAgents;
|
|
109
|
+
var groupedChats = useMemo(function () {
|
|
110
|
+
return groupChatsBySidebarSection(chats);
|
|
111
|
+
}, [chats]);
|
|
112
|
+
var sidebarSections = useMemo(function () {
|
|
113
|
+
return buildSidebarSections(groupedChats, function (key) {
|
|
114
|
+
var _user$company;
|
|
115
|
+
return key === 'agentsByCompany' ? t(SIDEBAR_SECTION_TRANSLATION_KEYS[key], {
|
|
116
|
+
companyName: ((_user$company = user.company) === null || _user$company === void 0 ? void 0 : _user$company.trim()) || '—'
|
|
117
|
+
}) : t(SIDEBAR_SECTION_TRANSLATION_KEYS[key]);
|
|
118
|
+
}, sessionsGroupHasMore);
|
|
119
|
+
}, [groupedChats, t, user.company, sessionsGroupHasMore]);
|
|
120
|
+
var expandedSection = expandedSectionModalKey ? sidebarSections.find(function (section) {
|
|
121
|
+
return section.key === expandedSectionModalKey;
|
|
122
|
+
}) || null : null;
|
|
231
123
|
useEffect(function () {
|
|
232
124
|
if (resetSelectedChatRef) {
|
|
233
125
|
resetSelectedChatRef.current = function () {
|
|
@@ -241,12 +133,12 @@ export var Sidebar = function Sidebar(_ref3) {
|
|
|
241
133
|
};
|
|
242
134
|
}, [resetSelectedChatRef]);
|
|
243
135
|
var handleDeleteChat = /*#__PURE__*/function () {
|
|
244
|
-
var
|
|
136
|
+
var _ref2 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee(chat) {
|
|
245
137
|
return _regeneratorRuntime.wrap(function (_context) {
|
|
246
138
|
while (1) switch (_context.prev = _context.next) {
|
|
247
139
|
case 0:
|
|
248
140
|
deleteChat(chat.sessionExternalId);
|
|
249
|
-
|
|
141
|
+
setChatMenuState(null);
|
|
250
142
|
handleGoToHome();
|
|
251
143
|
case 1:
|
|
252
144
|
case "end":
|
|
@@ -255,106 +147,177 @@ export var Sidebar = function Sidebar(_ref3) {
|
|
|
255
147
|
}, _callee);
|
|
256
148
|
}));
|
|
257
149
|
return function handleDeleteChat(_x) {
|
|
258
|
-
return
|
|
150
|
+
return _ref2.apply(this, arguments);
|
|
259
151
|
};
|
|
260
152
|
}();
|
|
261
153
|
var handleUpdateChat = function handleUpdateChat(chat) {
|
|
262
154
|
updateChat(chat);
|
|
263
|
-
|
|
155
|
+
setChatMenuState(null);
|
|
264
156
|
};
|
|
265
|
-
var
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
157
|
+
var handleOpenChatMenu = function handleOpenChatMenu(chatId, surface) {
|
|
158
|
+
setChatMenuState(function (prev) {
|
|
159
|
+
return (prev === null || prev === void 0 ? void 0 : prev.chatId) === chatId && (prev === null || prev === void 0 ? void 0 : prev.surface) === surface ? null : {
|
|
160
|
+
chatId: chatId,
|
|
161
|
+
surface: surface
|
|
162
|
+
};
|
|
163
|
+
});
|
|
164
|
+
};
|
|
165
|
+
var handleCloseChatMenu = function handleCloseChatMenu() {
|
|
166
|
+
setChatMenuState(null);
|
|
271
167
|
};
|
|
272
|
-
var
|
|
273
|
-
|
|
168
|
+
var handleOpenSectionModal = /*#__PURE__*/function () {
|
|
169
|
+
var _ref3 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee2(sectionKey) {
|
|
170
|
+
var _getChatsStoreState, storeLimit;
|
|
171
|
+
return _regeneratorRuntime.wrap(function (_context2) {
|
|
172
|
+
while (1) switch (_context2.prev = _context2.next) {
|
|
173
|
+
case 0:
|
|
174
|
+
setChatMenuState(null);
|
|
175
|
+
_getChatsStoreState = getChatsStoreState(), storeLimit = _getChatsStoreState.limit;
|
|
176
|
+
if (!(storeLimit === SIDEBAR_SESSIONS_PAGE_LIMIT)) {
|
|
177
|
+
_context2.next = 1;
|
|
178
|
+
break;
|
|
179
|
+
}
|
|
180
|
+
_context2.next = 1;
|
|
181
|
+
return fetchChats({
|
|
182
|
+
limit: SECTION_MODAL_SESSIONS_PAGE_LIMIT,
|
|
183
|
+
offset: 0,
|
|
184
|
+
showGlobalLoader: false
|
|
185
|
+
});
|
|
186
|
+
case 1:
|
|
187
|
+
setExpandedSectionModalKey(sectionKey);
|
|
188
|
+
case 2:
|
|
189
|
+
case "end":
|
|
190
|
+
return _context2.stop();
|
|
191
|
+
}
|
|
192
|
+
}, _callee2);
|
|
193
|
+
}));
|
|
194
|
+
return function handleOpenSectionModal(_x2) {
|
|
195
|
+
return _ref3.apply(this, arguments);
|
|
196
|
+
};
|
|
197
|
+
}();
|
|
198
|
+
var handleCloseSectionModal = function handleCloseSectionModal() {
|
|
199
|
+
setExpandedSectionModalKey(null);
|
|
200
|
+
setChatMenuState(null);
|
|
201
|
+
};
|
|
202
|
+
var handleToggleSectionCollapse = function handleToggleSectionCollapse(sectionKey) {
|
|
203
|
+
setCollapsedSections(function (prev) {
|
|
204
|
+
return _objectSpread(_objectSpread({}, prev), {}, _defineProperty({}, sectionKey, !prev[sectionKey]));
|
|
205
|
+
});
|
|
206
|
+
};
|
|
207
|
+
var handleSelectConversation = function handleSelectConversation(chatData) {
|
|
208
|
+
setSelectedChat(chatData.sessionExternalId);
|
|
209
|
+
onGoToChat(chatData);
|
|
274
210
|
};
|
|
275
211
|
useEffect(function () {
|
|
276
212
|
var handleClickOutside = function handleClickOutside(event) {
|
|
277
|
-
|
|
278
|
-
|
|
213
|
+
var target = event.target;
|
|
214
|
+
if (chatMenuState && !target.closest('[data-modal-container]')) {
|
|
215
|
+
setChatMenuState(null);
|
|
216
|
+
}
|
|
217
|
+
if (expandedSectionModalKey && !target.closest('[data-section-modal-container]')) {
|
|
218
|
+
setExpandedSectionModalKey(null);
|
|
219
|
+
setChatMenuState(null);
|
|
279
220
|
}
|
|
280
221
|
};
|
|
281
|
-
if (
|
|
222
|
+
if (chatMenuState || expandedSectionModalKey) {
|
|
282
223
|
document.addEventListener('mousedown', handleClickOutside);
|
|
283
224
|
}
|
|
284
225
|
return function () {
|
|
285
226
|
document.removeEventListener('mousedown', handleClickOutside);
|
|
286
227
|
};
|
|
287
|
-
}, [
|
|
228
|
+
}, [chatMenuState, expandedSectionModalKey]);
|
|
288
229
|
var handleToggleSidebar = function handleToggleSidebar() {
|
|
289
|
-
if (
|
|
290
|
-
|
|
230
|
+
if (chatMenuState) {
|
|
231
|
+
setChatMenuState(null);
|
|
232
|
+
}
|
|
233
|
+
if (expandedSectionModalKey) {
|
|
234
|
+
setExpandedSectionModalKey(null);
|
|
291
235
|
}
|
|
292
236
|
setIsOpen(function (prev) {
|
|
293
237
|
return !prev;
|
|
294
238
|
});
|
|
295
239
|
};
|
|
240
|
+
var handleOpenCreateAgent = /*#__PURE__*/function () {
|
|
241
|
+
var _ref4 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee3() {
|
|
242
|
+
var response, data, maiakerAgent;
|
|
243
|
+
return _regeneratorRuntime.wrap(function (_context3) {
|
|
244
|
+
while (1) switch (_context3.prev = _context3.next) {
|
|
245
|
+
case 0:
|
|
246
|
+
_context3.next = 1;
|
|
247
|
+
return fetchMaia({
|
|
248
|
+
path: "agents?agent_type=clone&lang=".concat(mapCORLang(i18n.language)),
|
|
249
|
+
method: 'GET'
|
|
250
|
+
});
|
|
251
|
+
case 1:
|
|
252
|
+
response = _context3.sent;
|
|
253
|
+
_context3.next = 2;
|
|
254
|
+
return response.json();
|
|
255
|
+
case 2:
|
|
256
|
+
data = _context3.sent;
|
|
257
|
+
maiakerAgent = (data.data || []).find(function (agent) {
|
|
258
|
+
return agent.type === 'clone' && agent.entity === 'global';
|
|
259
|
+
});
|
|
260
|
+
if (maiakerAgent) {
|
|
261
|
+
_context3.next = 3;
|
|
262
|
+
break;
|
|
263
|
+
}
|
|
264
|
+
return _context3.abrupt("return");
|
|
265
|
+
case 3:
|
|
266
|
+
setProject(null);
|
|
267
|
+
setClient === null || setClient === void 0 || setClient(null);
|
|
268
|
+
selectAgent(maiakerAgent);
|
|
269
|
+
handleGoToHome();
|
|
270
|
+
case 4:
|
|
271
|
+
case "end":
|
|
272
|
+
return _context3.stop();
|
|
273
|
+
}
|
|
274
|
+
}, _callee3);
|
|
275
|
+
}));
|
|
276
|
+
return function handleOpenCreateAgent() {
|
|
277
|
+
return _ref4.apply(this, arguments);
|
|
278
|
+
};
|
|
279
|
+
}();
|
|
296
280
|
useEffect(function () {
|
|
297
281
|
if (isOpen && !chatsFetchedRef.current) {
|
|
298
282
|
chatsFetchedRef.current = true;
|
|
299
283
|
fetchChats({
|
|
300
|
-
limit:
|
|
301
|
-
offset:
|
|
284
|
+
limit: SIDEBAR_SESSIONS_PAGE_LIMIT,
|
|
285
|
+
offset: 0
|
|
302
286
|
});
|
|
303
287
|
return;
|
|
304
288
|
}
|
|
305
289
|
if (refetchChats) {
|
|
306
290
|
fetchChats({
|
|
307
|
-
limit:
|
|
308
|
-
offset:
|
|
291
|
+
limit: SIDEBAR_SESSIONS_PAGE_LIMIT,
|
|
292
|
+
offset: 0
|
|
309
293
|
});
|
|
310
294
|
handleSetRefetchChats(false);
|
|
311
295
|
}
|
|
312
|
-
}, [isOpen, refetchChats, handleSetRefetchChats]);
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
return;
|
|
317
|
-
}
|
|
318
|
-
var _chatsContainerRef$cu = chatsContainerRef.current,
|
|
319
|
-
scrollTop = _chatsContainerRef$cu.scrollTop,
|
|
320
|
-
scrollHeight = _chatsContainerRef$cu.scrollHeight,
|
|
321
|
-
clientHeight = _chatsContainerRef$cu.clientHeight;
|
|
322
|
-
var isAtBottom = scrollTop + clientHeight >= scrollHeight - 10;
|
|
323
|
-
if (isAtBottom) {
|
|
324
|
-
loadMoreChats();
|
|
325
|
-
}
|
|
326
|
-
};
|
|
327
|
-
var container = chatsContainerRef.current;
|
|
328
|
-
if (container) {
|
|
329
|
-
container.addEventListener('scroll', handleScroll);
|
|
330
|
-
}
|
|
331
|
-
return function () {
|
|
332
|
-
if (container) {
|
|
333
|
-
container.removeEventListener('scroll', handleScroll);
|
|
334
|
-
}
|
|
335
|
-
};
|
|
336
|
-
}, [hasMoreChats, isLoadingMoreChats, loadMoreChats, hasError]);
|
|
296
|
+
}, [isOpen, refetchChats, handleSetRefetchChats, fetchChats]);
|
|
297
|
+
|
|
298
|
+
/** El scroll infinito de sesiones vive solo en el modal de sección (`SidebarChatsSectionModal`). */
|
|
299
|
+
|
|
337
300
|
var handleNewChat = /*#__PURE__*/function () {
|
|
338
|
-
var _ref5 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function
|
|
339
|
-
return _regeneratorRuntime.wrap(function (
|
|
340
|
-
while (1) switch (
|
|
301
|
+
var _ref5 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee4() {
|
|
302
|
+
return _regeneratorRuntime.wrap(function (_context4) {
|
|
303
|
+
while (1) switch (_context4.prev = _context4.next) {
|
|
341
304
|
case 0:
|
|
342
|
-
if (
|
|
343
|
-
|
|
305
|
+
if (chatMenuState) {
|
|
306
|
+
setChatMenuState(null);
|
|
344
307
|
}
|
|
345
308
|
setSelectedChat(null);
|
|
346
|
-
|
|
309
|
+
_context4.next = 1;
|
|
347
310
|
return fetchChats({
|
|
348
|
-
limit:
|
|
311
|
+
limit: expandedSectionModalKey ? SECTION_MODAL_SESSIONS_PAGE_LIMIT : SIDEBAR_SESSIONS_PAGE_LIMIT,
|
|
349
312
|
offset: 0
|
|
350
313
|
});
|
|
351
314
|
case 1:
|
|
352
315
|
handleGoToHome();
|
|
353
316
|
case 2:
|
|
354
317
|
case "end":
|
|
355
|
-
return
|
|
318
|
+
return _context4.stop();
|
|
356
319
|
}
|
|
357
|
-
},
|
|
320
|
+
}, _callee4);
|
|
358
321
|
}));
|
|
359
322
|
return function handleNewChat() {
|
|
360
323
|
return _ref5.apply(this, arguments);
|
|
@@ -363,7 +326,7 @@ export var Sidebar = function Sidebar(_ref3) {
|
|
|
363
326
|
useEffect(function () {
|
|
364
327
|
var handleRefetchSession = function handleRefetchSession() {
|
|
365
328
|
fetchChats({
|
|
366
|
-
limit:
|
|
329
|
+
limit: SIDEBAR_SESSIONS_PAGE_LIMIT,
|
|
367
330
|
offset: 0
|
|
368
331
|
});
|
|
369
332
|
};
|
|
@@ -371,247 +334,162 @@ export var Sidebar = function Sidebar(_ref3) {
|
|
|
371
334
|
return function () {
|
|
372
335
|
document.removeEventListener('refetch-session', handleRefetchSession);
|
|
373
336
|
};
|
|
374
|
-
}, []);
|
|
337
|
+
}, [fetchChats]);
|
|
375
338
|
var showNewChatButton = !showNewChat && !hasError && !loadingChats && ((userPermissions === null || userPermissions === void 0 ? void 0 : userPermissions.view) && !(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) || !(userPermissions !== null && userPermissions !== void 0 && userPermissions.view) && !(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));
|
|
376
|
-
return /*#__PURE__*/_jsxs(
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
flexDirection: 'column',
|
|
381
|
-
padding: '12px 10px',
|
|
382
|
-
minWidth: "".concat(isOpen ? '200px' : '46px'),
|
|
383
|
-
maxWidth: '270px',
|
|
384
|
-
transition: 'all 0.3s ease-in-out',
|
|
385
|
-
borderRadius: 'inherit',
|
|
386
|
-
borderTopRightRadius: '0',
|
|
387
|
-
borderBottomRightRadius: '0',
|
|
388
|
-
gap: '12px',
|
|
389
|
-
overflow: 'hidden',
|
|
390
|
-
overscrollBehavior: 'contain'
|
|
391
|
-
}, !isOpen && {
|
|
392
|
-
alignItems: 'center',
|
|
393
|
-
justifyContent: 'space-between'
|
|
394
|
-
}),
|
|
395
|
-
children: [/*#__PURE__*/_jsxs("div", {
|
|
396
|
-
style: _objectSpread({
|
|
397
|
-
display: 'flex',
|
|
398
|
-
gap: '22px',
|
|
399
|
-
flexDirection: "".concat(isOpen ? 'row-reverse' : 'column')
|
|
400
|
-
}, isOpen && {
|
|
401
|
-
justifyContent: 'space-between'
|
|
402
|
-
}),
|
|
339
|
+
return /*#__PURE__*/_jsxs(SCSSidebarRoot, {
|
|
340
|
+
$isOpen: isOpen,
|
|
341
|
+
children: [/*#__PURE__*/_jsxs(SCSSidebarToolbar, {
|
|
342
|
+
$isOpen: isOpen,
|
|
403
343
|
children: [/*#__PURE__*/_jsx(Tooltip, {
|
|
404
344
|
title: isOpen ? t('conversations.collapse') : t('conversations.expand'),
|
|
405
345
|
children: /*#__PURE__*/_jsx(SCSWrapperCollapsedButton, {
|
|
406
346
|
onClick: handleToggleSidebar,
|
|
407
347
|
isOpen: isOpen,
|
|
408
348
|
children: /*#__PURE__*/_jsx(ChevronDoubleLeft, {
|
|
409
|
-
color: "
|
|
410
|
-
width:
|
|
411
|
-
height:
|
|
349
|
+
color: "#4D4D4D",
|
|
350
|
+
width: 16,
|
|
351
|
+
height: 16
|
|
412
352
|
})
|
|
413
353
|
})
|
|
414
|
-
}), /*#__PURE__*/_jsx(
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
children: /*#__PURE__*/_jsx(SCSWrapperNewChatIcon, {
|
|
423
|
-
onClick: handleNewChat,
|
|
424
|
-
children: /*#__PURE__*/_jsx(NewChat, {
|
|
425
|
-
width: 20,
|
|
426
|
-
height: 20
|
|
427
|
-
})
|
|
354
|
+
}), showNewChatButton ? /*#__PURE__*/_jsx(Tooltip, {
|
|
355
|
+
title: t('conversations.newChat'),
|
|
356
|
+
children: /*#__PURE__*/_jsx(SCSWrapperNewChatIcon, {
|
|
357
|
+
onClick: handleNewChat,
|
|
358
|
+
children: /*#__PURE__*/_jsx(NewChat, {
|
|
359
|
+
width: 16,
|
|
360
|
+
height: 16,
|
|
361
|
+
color: "#4D4D4D"
|
|
428
362
|
})
|
|
429
363
|
})
|
|
430
|
-
})]
|
|
431
|
-
}), /*#__PURE__*/_jsxs(
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
},
|
|
448
|
-
children: [/*#__PURE__*/_jsx("span", {
|
|
449
|
-
style: {
|
|
450
|
-
fontSize: '14px',
|
|
451
|
-
fontWeight: '400',
|
|
452
|
-
color: '#666666',
|
|
453
|
-
lineHeight: '140%',
|
|
454
|
-
paddingLeft: '12px'
|
|
455
|
-
},
|
|
456
|
-
children: t('conversations.title')
|
|
457
|
-
}), /*#__PURE__*/_jsx("div", {
|
|
458
|
-
ref: chatsContainerRef,
|
|
459
|
-
style: _objectSpread(_objectSpread({
|
|
460
|
-
display: 'flex',
|
|
461
|
-
flexDirection: 'column',
|
|
462
|
-
gap: '4px',
|
|
463
|
-
flexGrow: 1,
|
|
464
|
-
width: '100%',
|
|
465
|
-
overflowY: 'auto',
|
|
466
|
-
overscrollBehaviorY: 'contain'
|
|
467
|
-
}, chats.length && {
|
|
468
|
-
maxHeight: "calc(100vh - ".concat(hasError ? 197 : 160, "px)")
|
|
469
|
-
}), !chats.length && {
|
|
470
|
-
alignItems: 'center'
|
|
471
|
-
}),
|
|
472
|
-
children: hasError && !chats.length ? /*#__PURE__*/_jsxs("div", {
|
|
473
|
-
style: {
|
|
474
|
-
display: 'flex',
|
|
475
|
-
alignItems: 'center',
|
|
476
|
-
justifyContent: 'center',
|
|
477
|
-
flexGrow: 1,
|
|
478
|
-
flexDirection: 'column'
|
|
479
|
-
},
|
|
480
|
-
children: [/*#__PURE__*/_jsx("div", {
|
|
481
|
-
style: {
|
|
482
|
-
display: 'flex',
|
|
483
|
-
alignItems: 'center',
|
|
484
|
-
flexGrow: 1
|
|
485
|
-
},
|
|
486
|
-
children: /*#__PURE__*/_jsx(ErrorState, {})
|
|
487
|
-
}), /*#__PURE__*/_jsxs("div", {
|
|
488
|
-
style: {
|
|
489
|
-
display: 'flex',
|
|
490
|
-
alignItems: 'center',
|
|
491
|
-
gap: '16px',
|
|
492
|
-
backgroundColor: 'rgba(253, 236, 236, 1)',
|
|
493
|
-
borderRadius: '8px',
|
|
494
|
-
padding: '12px',
|
|
495
|
-
border: '1px solid rgba(199, 5, 5, 1)'
|
|
496
|
-
},
|
|
497
|
-
children: [/*#__PURE__*/_jsx("div", {
|
|
498
|
-
style: {
|
|
499
|
-
display: 'flex',
|
|
500
|
-
alignItems: 'center',
|
|
501
|
-
justifyContent: 'center'
|
|
364
|
+
}) : null]
|
|
365
|
+
}), /*#__PURE__*/_jsxs(SCSSidebarBody, {
|
|
366
|
+
$isOpen: isOpen,
|
|
367
|
+
children: [isOpen ? /*#__PURE__*/_jsxs(SCSSidebarOpenPanel, {
|
|
368
|
+
ref: sidebarScrollRef,
|
|
369
|
+
children: [/*#__PURE__*/_jsx(SCSSidebarAgentsBlock, {
|
|
370
|
+
children: showAgentsNavBlock ? /*#__PURE__*/_jsxs(_Fragment, {
|
|
371
|
+
children: [/*#__PURE__*/_jsx(SCSSidebarAgentsHeading, {
|
|
372
|
+
children: /*#__PURE__*/_jsx(SCSSidebarAgentsHeadingText, {
|
|
373
|
+
children: t('conversations.agentsSectionTitle')
|
|
374
|
+
})
|
|
375
|
+
}), /*#__PURE__*/_jsxs(SCSSidebarAgentsActions, {
|
|
376
|
+
children: [canCreateAgents ? /*#__PURE__*/_jsxs(SCSSidebarMaiakerNavButton, {
|
|
377
|
+
type: "button",
|
|
378
|
+
onClick: function onClick() {
|
|
379
|
+
eventAmplitude(EVENTS.aiChatMpOpen);
|
|
380
|
+
handleOpenCreateAgent();
|
|
502
381
|
},
|
|
382
|
+
$active: agentsNavActive === 'maiaker',
|
|
383
|
+
children: [/*#__PURE__*/_jsx(MaiaStoreIcon, {
|
|
384
|
+
size: 16
|
|
385
|
+
}), /*#__PURE__*/_jsx(SCSSidebarMaiakerNavLabel, {
|
|
386
|
+
children: t('conversations.maiakerNav')
|
|
387
|
+
})]
|
|
388
|
+
}) : null, canViewAgents ? /*#__PURE__*/_jsxs(SCSSidebarMaiakerNavButton, {
|
|
389
|
+
type: "button",
|
|
390
|
+
onClick: handleOpenMarketplace,
|
|
391
|
+
$active: agentsNavActive === 'myAgents',
|
|
392
|
+
children: [/*#__PURE__*/_jsx(MyAgentsNavIcon, {
|
|
393
|
+
size: 16
|
|
394
|
+
}), /*#__PURE__*/_jsx(SCSSidebarMaiakerNavLabel, {
|
|
395
|
+
children: t('conversations.myAgentsNav')
|
|
396
|
+
})]
|
|
397
|
+
}) : null]
|
|
398
|
+
})]
|
|
399
|
+
}) : null
|
|
400
|
+
}), /*#__PURE__*/_jsx(SCSSidebarChatsScroll, {
|
|
401
|
+
$hasChats: chats.length > 0,
|
|
402
|
+
$offsetVariant: hasError ? 'error' : 'default',
|
|
403
|
+
$agentNavButtonCount: agentNavButtonCount,
|
|
404
|
+
children: hasError && !chats.length ? /*#__PURE__*/_jsxs(SCSSidebarErrorStateColumn, {
|
|
405
|
+
children: [/*#__PURE__*/_jsx(SCSSidebarErrorStateTop, {
|
|
406
|
+
children: /*#__PURE__*/_jsx(ErrorState, {})
|
|
407
|
+
}), /*#__PURE__*/_jsxs(SCSSidebarErrorBanner, {
|
|
408
|
+
children: [/*#__PURE__*/_jsx(SCSSidebarErrorBannerIconWrap, {
|
|
503
409
|
children: /*#__PURE__*/_jsx(ErrorIcon, {})
|
|
504
|
-
}), /*#__PURE__*/_jsx(
|
|
505
|
-
style: {
|
|
506
|
-
fontSize: '14px',
|
|
507
|
-
fontWeight: '400',
|
|
508
|
-
color: 'rgba(32, 32, 31, 1)',
|
|
509
|
-
lineHeight: '140%'
|
|
510
|
-
},
|
|
410
|
+
}), /*#__PURE__*/_jsx(SCSSidebarErrorBannerMessage, {
|
|
511
411
|
children: t('conversations.error')
|
|
512
412
|
})]
|
|
513
413
|
})]
|
|
514
|
-
}) : loadingChats ? /*#__PURE__*/_jsx(
|
|
515
|
-
style: {
|
|
516
|
-
height: '670px'
|
|
517
|
-
},
|
|
414
|
+
}) : loadingChats ? /*#__PURE__*/_jsx(SCSSidebarLoadingArea, {
|
|
518
415
|
children: /*#__PURE__*/_jsx(Loader, {})
|
|
519
416
|
}) : chats.length ? /*#__PURE__*/_jsxs(_Fragment, {
|
|
520
|
-
children: [
|
|
521
|
-
return /*#__PURE__*/_jsx(
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
}
|
|
527
|
-
setSelectedChat(chatData.sessionExternalId);
|
|
528
|
-
onGoToChat(chatData);
|
|
417
|
+
children: [sidebarSections.map(function (section) {
|
|
418
|
+
return /*#__PURE__*/_jsx(SidebarChatsSection, {
|
|
419
|
+
section: section,
|
|
420
|
+
collapsed: collapsedSections[section.key],
|
|
421
|
+
onToggleCollapse: function onToggleCollapse() {
|
|
422
|
+
return handleToggleSectionCollapse(section.key);
|
|
529
423
|
},
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
onCloseModal: handleCloseModal,
|
|
533
|
-
handlers: {
|
|
534
|
-
handleDeleteChat: handleDeleteChat,
|
|
535
|
-
handleUpdateChat: handleUpdateChat
|
|
424
|
+
onOpenMore: function onOpenMore() {
|
|
425
|
+
return handleOpenSectionModal(section.key);
|
|
536
426
|
},
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
},
|
|
427
|
+
chatMenuState: chatMenuState,
|
|
428
|
+
onOpenChatMenu: handleOpenChatMenu,
|
|
429
|
+
onCloseChatMenu: handleCloseChatMenu,
|
|
430
|
+
handleDeleteChat: handleDeleteChat,
|
|
431
|
+
handleUpdateChat: handleUpdateChat,
|
|
432
|
+
selectedChatSessionExternalId: selectedChat,
|
|
433
|
+
onGoToChat: handleSelectConversation
|
|
434
|
+
}, "chat-section-".concat(section.key));
|
|
435
|
+
}), isLoadingMoreChats && /*#__PURE__*/_jsx(SCSSidebarLoadMoreRow, {
|
|
545
436
|
children: /*#__PURE__*/_jsx(Loader, {})
|
|
546
437
|
})]
|
|
547
|
-
}) : /*#__PURE__*/_jsxs(
|
|
548
|
-
|
|
549
|
-
display: 'flex',
|
|
550
|
-
alignItems: 'center',
|
|
551
|
-
justifyContent: 'center',
|
|
552
|
-
flexGrow: 1,
|
|
553
|
-
flexDirection: 'column',
|
|
554
|
-
gap: '18px',
|
|
555
|
-
width: '201px'
|
|
556
|
-
},
|
|
557
|
-
children: [/*#__PURE__*/_jsx(EmptyHistoryIcon, {}), /*#__PURE__*/_jsx("span", {
|
|
558
|
-
style: {
|
|
559
|
-
fontSize: '14px',
|
|
560
|
-
fontWeight: '400',
|
|
561
|
-
color: 'rgba(102, 102, 102, 1)',
|
|
562
|
-
lineHeight: '140%',
|
|
563
|
-
textAlign: 'center'
|
|
564
|
-
},
|
|
438
|
+
}) : /*#__PURE__*/_jsxs(SCSSidebarEmptyChats, {
|
|
439
|
+
children: [/*#__PURE__*/_jsx(EmptyHistoryIcon, {}), /*#__PURE__*/_jsx(SCSSidebarEmptyChatsText, {
|
|
565
440
|
children: t('conversations.empty')
|
|
566
441
|
})]
|
|
567
442
|
})
|
|
568
|
-
}), /*#__PURE__*/_jsx(
|
|
569
|
-
|
|
570
|
-
|
|
571
|
-
alignItems: 'center',
|
|
572
|
-
justifyContent: 'center'
|
|
573
|
-
},
|
|
574
|
-
children: hasError && chats.length ? /*#__PURE__*/_jsxs("div", {
|
|
575
|
-
style: {
|
|
576
|
-
display: 'flex',
|
|
577
|
-
alignItems: 'center',
|
|
578
|
-
gap: '16px',
|
|
579
|
-
backgroundColor: 'rgba(253, 236, 236, 1)',
|
|
580
|
-
borderRadius: '8px',
|
|
581
|
-
padding: '12px',
|
|
582
|
-
border: '1px solid rgba(199, 5, 5, 1)'
|
|
583
|
-
},
|
|
584
|
-
children: [/*#__PURE__*/_jsx("div", {
|
|
585
|
-
style: {
|
|
586
|
-
display: 'flex',
|
|
587
|
-
alignItems: 'center',
|
|
588
|
-
justifyContent: 'center'
|
|
589
|
-
},
|
|
443
|
+
}), /*#__PURE__*/_jsx(SCSSidebarChatsFooter, {
|
|
444
|
+
children: hasError && chats.length ? /*#__PURE__*/_jsxs(SCSSidebarErrorBanner, {
|
|
445
|
+
children: [/*#__PURE__*/_jsx(SCSSidebarErrorBannerIconWrap, {
|
|
590
446
|
children: /*#__PURE__*/_jsx(ErrorIcon, {})
|
|
591
|
-
}), /*#__PURE__*/_jsx(
|
|
592
|
-
style: {
|
|
593
|
-
fontSize: '14px',
|
|
594
|
-
fontWeight: '400',
|
|
595
|
-
color: 'rgba(32, 32, 31, 1)',
|
|
596
|
-
lineHeight: '140%'
|
|
597
|
-
},
|
|
447
|
+
}), /*#__PURE__*/_jsx(SCSSidebarErrorBannerMessage, {
|
|
598
448
|
children: t('conversations.error')
|
|
599
449
|
})]
|
|
600
450
|
}) : null
|
|
601
451
|
})]
|
|
602
|
-
}), /*#__PURE__*/_jsxs(
|
|
603
|
-
|
|
604
|
-
|
|
605
|
-
|
|
606
|
-
flexDirection: isOpen ? 'row' : 'column',
|
|
607
|
-
justifyContent: selectedAgent ? 'space-between' : 'flex-end'
|
|
608
|
-
},
|
|
609
|
-
children: [selectedAgent && /*#__PURE__*/_jsx(FeedbackButton, {
|
|
452
|
+
}) : null, /*#__PURE__*/_jsxs(SCSSidebarFooterActions, {
|
|
453
|
+
$isOpen: isOpen,
|
|
454
|
+
$justifyBetween: !!selectedAgent,
|
|
455
|
+
children: [selectedAgent ? /*#__PURE__*/_jsx(FeedbackButton, {
|
|
610
456
|
selectedAgent: selectedAgent,
|
|
611
457
|
isOpen: isOpen
|
|
612
|
-
}), /*#__PURE__*/_jsx(OnboardingModalButton, {})]
|
|
458
|
+
}) : null, /*#__PURE__*/_jsx(OnboardingModalButton, {})]
|
|
613
459
|
})]
|
|
460
|
+
}), /*#__PURE__*/_jsx(AnimatePresence, {
|
|
461
|
+
children: expandedSectionModalKey && expandedSection ? /*#__PURE__*/_jsxs(_Fragment, {
|
|
462
|
+
children: [/*#__PURE__*/_jsx(SCSSidebarSectionModalBackdropMotion, {
|
|
463
|
+
"aria-hidden": true,
|
|
464
|
+
initial: {
|
|
465
|
+
opacity: 0
|
|
466
|
+
},
|
|
467
|
+
animate: {
|
|
468
|
+
opacity: 1
|
|
469
|
+
},
|
|
470
|
+
exit: {
|
|
471
|
+
opacity: 0
|
|
472
|
+
},
|
|
473
|
+
transition: {
|
|
474
|
+
duration: 0.2,
|
|
475
|
+
ease: 'easeOut'
|
|
476
|
+
}
|
|
477
|
+
}, "sidebar-section-chat-backdrop"), /*#__PURE__*/_jsx(SidebarChatsSectionModal, {
|
|
478
|
+
section: expandedSection,
|
|
479
|
+
onClose: handleCloseSectionModal,
|
|
480
|
+
chatMenuState: chatMenuState,
|
|
481
|
+
onOpenChatMenu: handleOpenChatMenu,
|
|
482
|
+
onCloseChatMenu: handleCloseChatMenu,
|
|
483
|
+
handleDeleteChat: handleDeleteChat,
|
|
484
|
+
handleUpdateChat: handleUpdateChat,
|
|
485
|
+
selectedChatSessionExternalId: selectedChat,
|
|
486
|
+
onGoToChat: handleSelectConversation,
|
|
487
|
+
hasMoreChats: hasMoreChats,
|
|
488
|
+
loadMoreChats: loadMoreChats,
|
|
489
|
+
isLoadingMoreChats: isLoadingMoreChats
|
|
490
|
+
}, expandedSectionModalKey)]
|
|
491
|
+
}) : null
|
|
614
492
|
})]
|
|
615
493
|
});
|
|
616
494
|
};
|
|
617
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1c2VFZmZlY3QiLCJ1c2VSZWYiLCJ1c2VTdGF0ZSIsIkNoZXZyb25Eb3VibGVMZWZ0IiwiQ1VCdXR0b24iLCJNZW51RG90cyIsIlBlbmNpbCIsIlRyYXNoIiwiVG9vbHRpcCIsIkVtcHR5SGlzdG9yeUljb24iLCJ1c2VSZXNpemVMaXN0ZW5lciIsInVzZUNoYXRzIiwiTG9hZGVyIiwiRXJyb3JTdGF0ZSIsIk1BSUFJY29uIiwiTmV3Q2hhdCIsIkVWRU5UUyIsInVzZVQiLCJPcHRpb25JdGVtIiwiRWRpdFF1ZXN0aW9uTW9kYWwiLCJEZWxldGVRdWVzdGlvbk1vZGFsIiwiRXJyb3JJY29uIiwidXNlVXNlciIsIk9uYm9hcmRpbmdNb2RhbEJ1dHRvbiIsIkZlZWRiYWNrQnV0dG9uIiwidXNlR2xvYmFsQ29udGV4dCIsIlNDTEhDV3JhcHBlciIsIlNDTEhDV3JhcHBlckFnZW50IiwiU0NMSENXcmFwcGVyQWdlbnRUZXh0IiwiU0NMSENXcmFwcGVyQnV0dG9uQWN0aW9ucyIsIlNDTEhDV3JhcHBlckNvbnRlbnQiLCJTQ0xIQ1dyYXBwZXJUaXRsZSIsIlNDU1dyYXBwZXJDb2xsYXBzZWRCdXR0b24iLCJTQ1NXcmFwcGVyTmV3Q2hhdEljb24iLCJqc3giLCJfanN4IiwianN4cyIsIl9qc3hzIiwiRnJhZ21lbnQiLCJfRnJhZ21lbnQiLCJhY3Rpb25zIiwiZWRpdCIsInByb3BzIiwiX29iamVjdFNwcmVhZCIsImRlbGV0ZSIsImFiYnJldmlhdGVTcGVjaWFsaXN0SW5BZ2VudE5hbWUiLCJhZ2VudE5hbWUiLCJyZXBsYWNlIiwiTGlzdEhpc3RvcnlDaGF0IiwiX3JlZiIsImNoYXQiLCJvbkNsaWNrIiwiaXNNb2RhbE9wZW4iLCJvbk9wZW5Nb2RhbCIsIm9uQ2xvc2VNb2RhbCIsImhhbmRsZXJzIiwiaXNTZWxlY3RlZCIsInRleHRSZWYiLCJhZ2VudFJlZiIsIl91c2VSZXNpemVMaXN0ZW5lciIsInRpdGxlIiwic2hvd1Rvb2x0aXAiLCJfdXNlUmVzaXplTGlzdGVuZXIyIiwiYWdlbnQiLCJzaG93VG9vbHRpcEFnZW50IiwiX3VzZVQiLCJ0IiwiX3VzZVN0YXRlIiwiX3VzZVN0YXRlMiIsIl9zbGljZWRUb0FycmF5IiwiYWN0aW9uIiwic2V0QWN0aW9uIiwibWVudUl0ZW1zIiwibGFiZWwiLCJvbkNsaWNrSXRlbSIsImNoYXRJZCIsIkljb24iLCJldmVudEtleSIsInBtQWlNZW51RWRpdCIsInBtQWlNZW51RGVsZXRlIiwiaGFuZGxlQ29uZmlybUFjdGlvbiIsImNoYXREYXRhIiwiaGFuZGxlVXBkYXRlQ2hhdCIsImhhbmRsZURlbGV0ZUNoYXQiLCJjaGlsZHJlbiIsImUiLCJzdG9wUHJvcGFnYXRpb24iLCJyZWYiLCJwcm9qZWN0TmFtZSIsImNvbmNhdCIsImFnZW50VHlwZSIsIndpZHRoIiwiaGVpZ2h0Iiwic3R5bGUiLCJmb250U2l6ZSIsImVtb2ppIiwiaWNvbk9ubHkiLCJzaXplIiwidmFyaWFudCIsImV2ZW50IiwiaWQiLCJwb3NpdGlvbiIsInRvcCIsInJpZ2h0IiwiYmFja2dyb3VuZENvbG9yIiwiekluZGV4IiwiZGlzcGxheSIsImZsZXhEaXJlY3Rpb24iLCJib3JkZXJSYWRpdXMiLCJib3JkZXIiLCJtaW5XaWR0aCIsIm1hcCIsIl9yZWYyIiwic2Vzc2lvbkV4dGVybmFsSWQiLCJvbkNsb3NlIiwiaGFuZGxlU2V0SXNPcGVuTW9kYWwiLCJTaWRlYmFyIiwiX3JlZjMiLCJfdXNlciRwZXJtaXNzaW9ucyIsIm9uR29Ub0NoYXQiLCJfcmVmMyRvbkVycm9yIiwib25FcnJvciIsImhhbmRsZUdvVG9Ib21lIiwic2hvd05ld0NoYXQiLCJyZWZldGNoQ2hhdHMiLCJoYW5kbGVTZXRSZWZldGNoQ2hhdHMiLCJoYXNFcnJvciIsInJlc2V0U2VsZWN0ZWRDaGF0UmVmIiwiX3VzZVQyIiwiX3VzZVN0YXRlMyIsIl91c2VTdGF0ZTQiLCJpc09wZW4iLCJzZXRJc09wZW4iLCJfdXNlU3RhdGU1IiwiX3VzZVN0YXRlNiIsImlzT3Blbk1vZGFsIiwic2V0SXNPcGVuTW9kYWwiLCJfdXNlU3RhdGU3IiwiX3VzZVN0YXRlOCIsInNlbGVjdGVkQ2hhdCIsInNldFNlbGVjdGVkQ2hhdCIsImNoYXRzRmV0Y2hlZFJlZiIsImNoYXRzQ29udGFpbmVyUmVmIiwidXNlciIsIl91c2VHbG9iYWxDb250ZXh0Iiwic2VsZWN0ZWRBZ2VudCIsIl91c2VDaGF0cyIsImxvYWRpbmdDaGF0cyIsImNoYXRzIiwiZGVsZXRlQ2hhdCIsInVwZGF0ZUNoYXQiLCJmZXRjaENoYXRzIiwibGltaXQiLCJvZmZzZXQiLCJoYXNNb3JlQ2hhdHMiLCJsb2FkTW9yZUNoYXRzIiwiaXNMb2FkaW5nTW9yZUNoYXRzIiwidXNlclBlcm1pc3Npb25zIiwicGVybWlzc2lvbnMiLCJhaV9hZ2VudHMiLCJjdXJyZW50IiwiX3JlZjQiLCJfYXN5bmNUb0dlbmVyYXRvciIsIl9yZWdlbmVyYXRvclJ1bnRpbWUiLCJtYXJrIiwiX2NhbGxlZSIsIndyYXAiLCJfY29udGV4dCIsInByZXYiLCJuZXh0Iiwic3RvcCIsIl94IiwiYXBwbHkiLCJhcmd1bWVudHMiLCJoYW5kbGVPcGVuTW9kYWwiLCJoYW5kbGVDbG9zZU1vZGFsIiwiaGFuZGxlQ2xpY2tPdXRzaWRlIiwidGFyZ2V0IiwiY2xvc2VzdCIsImRvY3VtZW50IiwiYWRkRXZlbnRMaXN0ZW5lciIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJoYW5kbGVUb2dnbGVTaWRlYmFyIiwiaGFuZGxlU2Nyb2xsIiwiX2NoYXRzQ29udGFpbmVyUmVmJGN1Iiwic2Nyb2xsVG9wIiwic2Nyb2xsSGVpZ2h0IiwiY2xpZW50SGVpZ2h0IiwiaXNBdEJvdHRvbSIsImNvbnRhaW5lciIsImhhbmRsZU5ld0NoYXQiLCJfcmVmNSIsIl9jYWxsZWUyIiwiX2NvbnRleHQyIiwiaGFuZGxlUmVmZXRjaFNlc3Npb24iLCJzaG93TmV3Q2hhdEJ1dHRvbiIsInZpZXciLCJpc19kZWxldGVkIiwiaGFzX25vdF9wZXJtaXNzaW9ucyIsImhhc19ub3RfYWNjZXNzIiwicGFkZGluZyIsIm1heFdpZHRoIiwidHJhbnNpdGlvbiIsImJvcmRlclRvcFJpZ2h0UmFkaXVzIiwiYm9yZGVyQm90dG9tUmlnaHRSYWRpdXMiLCJnYXAiLCJvdmVyZmxvdyIsIm92ZXJzY3JvbGxCZWhhdmlvciIsImFsaWduSXRlbXMiLCJqdXN0aWZ5Q29udGVudCIsImNvbG9yIiwiZmxleEdyb3ciLCJmb250V2VpZ2h0IiwibGluZUhlaWdodCIsInBhZGRpbmdMZWZ0Iiwib3ZlcmZsb3dZIiwib3ZlcnNjcm9sbEJlaGF2aW9yWSIsImxlbmd0aCIsIm1heEhlaWdodCIsInRleHRBbGlnbiJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL21vbGVjdWxlcy9TaWRlYmFyL1NpZGViYXIudHN4Il0sInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIG5vLXBhcmFtLXJlYXNzaWduICovXG4vKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tc2hhZG93ICovXG4vKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55ICovXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1uZXN0ZWQtdGVybmFyeSAqL1xuLyogZXNsaW50LWRpc2FibGUganN4LWExMXkvY2xpY2stZXZlbnRzLWhhdmUta2V5LWV2ZW50cyAqL1xuLyogZXNsaW50LWRpc2FibGUganN4LWExMXkvbm8tc3RhdGljLWVsZW1lbnQtaW50ZXJhY3Rpb25zICovXG5pbXBvcnQgeyBNdXRhYmxlUmVmT2JqZWN0LCB1c2VFZmZlY3QsIHVzZVJlZiwgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IENoZXZyb25Eb3VibGVMZWZ0IH0gZnJvbSAnQHByb2plY3Rjb3IvaWNvbnMvbGliL2NvbXBvbmVudHMvQ2hldnJvbkRvdWJsZUxlZnQnXG5pbXBvcnQgeyBDVUJ1dHRvbiB9IGZyb20gJ0Bwcm9qZWN0Y29yL2J1dHRvbi9saWIvY29tcG9uZW50cy9DVUJ1dHRvbidcbmltcG9ydCB7IE1lbnVEb3RzIH0gZnJvbSAnQHByb2plY3Rjb3IvaWNvbnMvbGliL2NvbXBvbmVudHMvTWVudURvdHMnXG5pbXBvcnQgeyBQZW5jaWwgfSBmcm9tICdAcHJvamVjdGNvci9pY29ucy9saWIvY29tcG9uZW50cy9QZW5jaWwnXG5pbXBvcnQgeyBUcmFzaCB9IGZyb20gJ0Bwcm9qZWN0Y29yL2ljb25zL2xpYi9jb21wb25lbnRzL1RyYXNoJ1xuXG5pbXBvcnQgeyBUb29sdGlwIH0gZnJvbSAnQHByb2plY3Rjb3IvdG9vbHRpcHYyL2xpYi9jb21wb25lbnRzL1Rvb2x0aXAnXG5cbmltcG9ydCB7IEVtcHR5SGlzdG9yeUljb24gfSBmcm9tICcuLi8uLi9hdG9tcy9pY29ucy9FbXB0eUhpc3RvcnknXG5pbXBvcnQgeyB1c2VSZXNpemVMaXN0ZW5lciB9IGZyb20gJy4uLy4uLy4uL2hvb2tzL3VzZVJlc2l6ZSdcbmltcG9ydCB7IHVzZUNoYXRzIH0gZnJvbSAnLi4vLi4vLi4vaG9va3MvdXNlQ2hhdHMnXG5pbXBvcnQgeyBMb2FkZXIgfSBmcm9tICcuLi8uLi9hdG9tcy9Mb2FkZXInXG5pbXBvcnQgeyBFcnJvclN0YXRlLCBNQUlBSWNvbiwgTmV3Q2hhdCB9IGZyb20gJy4uLy4uL2F0b21zL2ljb25zJ1xuaW1wb3J0IHsgRVZFTlRTIH0gZnJvbSAnLi4vLi4vLi4vaG9va3MvdXNlRXZlbnQnXG5pbXBvcnQgeyB1c2VUIH0gZnJvbSAnLi4vLi4vLi4vaG9va3MvdXNlVCdcbmltcG9ydCB7IE9wdGlvbkl0ZW0gfSBmcm9tICcuLi8uLi9hdG9tcy9DYXJkTWVudS9DYXJkTWVudSdcbmltcG9ydCB7IEVkaXRRdWVzdGlvbk1vZGFsIH0gZnJvbSAnLi4vLi4vb3JnYW5pc21zL0VkaXRRdWVzdGlvbk1vZGFsJ1xuaW1wb3J0IHsgRGVsZXRlUXVlc3Rpb25Nb2RhbCB9IGZyb20gJy4uLy4uL29yZ2FuaXNtcy9EZWxldGVRdWVzdGlvbk1vZGFsJ1xuaW1wb3J0IHsgRXJyb3JJY29uIH0gZnJvbSAnLi4vLi4vYXRvbXMvaWNvbnMvRXJyb3JJY29uJ1xuaW1wb3J0IHsgdXNlVXNlciB9IGZyb20gJy4uLy4uLy4uL2NvbnRleHQvY29yLXVzZXInXG5pbXBvcnQgeyBPbmJvYXJkaW5nTW9kYWxCdXR0b24gfSBmcm9tICcuLi8uLi9hdG9tcy9PbmJvYXJkaW5nTW9kYWxCdXR0b24nXG5pbXBvcnQgeyBGZWVkYmFja0J1dHRvbiB9IGZyb20gJy4uLy4uL2F0b21zL0ZlZWRiYWNrQnV0dG9uJ1xuaW1wb3J0IHsgdXNlR2xvYmFsQ29udGV4dCB9IGZyb20gJy4uLy4uLy4uL2NvbnRleHQvZ2xvYmFsLWNvbnRleHQnXG5pbXBvcnQge1xuICBTQ0xIQ1dyYXBwZXIsXG4gIFNDTEhDV3JhcHBlckFnZW50LFxuICBTQ0xIQ1dyYXBwZXJBZ2VudFRleHQsXG4gIFNDTEhDV3JhcHBlckJ1dHRvbkFjdGlvbnMsXG4gIFNDTEhDV3JhcHBlckNvbnRlbnQsXG4gIFNDTEhDV3JhcHBlclRpdGxlLFxuICBTQ1NXcmFwcGVyQ29sbGFwc2VkQnV0dG9uLFxuICBTQ1NXcmFwcGVyTmV3Q2hhdEljb24sXG59IGZyb20gJy4vU2lkZWJhci5zdHlsZXMnXG5cbmNvbnN0IGFjdGlvbnMgPSB7XG4gIGVkaXQ6IChwcm9wczogYW55KSA9PiA8RWRpdFF1ZXN0aW9uTW9kYWwgey4uLnByb3BzfSAvPixcbiAgZGVsZXRlOiAocHJvcHM6IGFueSkgPT4gPERlbGV0ZVF1ZXN0aW9uTW9kYWwgey4uLnByb3BzfSAvPixcbn1cblxuLyoqIEFicmV2aWEgXCJlc3BlY2lhbGlzdGFcIi9cImVzcGVjaWFsaXN0XCIg4oaSIFwiRXNwLlwiIChFUy9QVCkgeSBcInNwZWNpYWxpc3RcIiDihpIgXCJTcGVjLlwiIChFTikgZW4gZWwgbm9tYnJlIGRlbCBhZ2VudGUuICovXG5mdW5jdGlvbiBhYmJyZXZpYXRlU3BlY2lhbGlzdEluQWdlbnROYW1lKGFnZW50TmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgaWYgKCFhZ2VudE5hbWUgfHwgdHlwZW9mIGFnZW50TmFtZSAhPT0gJ3N0cmluZycpIHJldHVybiBhZ2VudE5hbWVcbiAgcmV0dXJuIGFnZW50TmFtZS5yZXBsYWNlKC9cXGIoZXNwZWNpYWxpc3RhfGVzcGVjaWFsaXN0KVxcYi9naSwgJ0VzcC4nKS5yZXBsYWNlKC9cXGJzcGVjaWFsaXN0XFxiL2dpLCAnU3BlYy4nKVxufVxuXG5jb25zdCBMaXN0SGlzdG9yeUNoYXQgPSAoe1xuICBjaGF0LFxuICBvbkNsaWNrLFxuICBpc01vZGFsT3BlbixcbiAgb25PcGVuTW9kYWwsXG4gIG9uQ2xvc2VNb2RhbCxcbiAgaGFuZGxlcnMsXG4gIGlzU2VsZWN0ZWQsXG59OiB7XG4gIGNoYXQ6IGFueVxuICBvbkNsaWNrOiAoY2hhdDogYW55KSA9PiB2b2lkXG4gIGlzTW9kYWxPcGVuOiBib29sZWFuXG4gIG9uT3Blbk1vZGFsOiAoY2hhdElkOiBzdHJpbmcpID0+IHZvaWRcbiAgb25DbG9zZU1vZGFsOiAoKSA9PiB2b2lkXG4gIGhhbmRsZXJzOiB7XG4gICAgaGFuZGxlRGVsZXRlQ2hhdDogKGNoYXQ6IGFueSkgPT4gdm9pZFxuICAgIGhhbmRsZVVwZGF0ZUNoYXQ6IChjaGF0OiBhbnkpID0+IHZvaWRcbiAgfVxuICBpc1NlbGVjdGVkOiBib29sZWFuXG59KSA9PiB7XG4gIGNvbnN0IHRleHRSZWYgPSB1c2VSZWY8SFRNTERpdkVsZW1lbnQ+KG51bGwpXG4gIGNvbnN0IGFnZW50UmVmID0gdXNlUmVmPEhUTUxEaXZFbGVtZW50PihudWxsKVxuICBjb25zdCB7IHNob3dUb29sdGlwIH0gPSB1c2VSZXNpemVMaXN0ZW5lcih0ZXh0UmVmLCBbY2hhdC50aXRsZV0pXG4gIGNvbnN0IHsgc2hvd1Rvb2x0aXA6IHNob3dUb29sdGlwQWdlbnQgfSA9IHVzZVJlc2l6ZUxpc3RlbmVyKGFnZW50UmVmLCBbY2hhdC5hZ2VudF0pXG4gIGNvbnN0IHsgdCB9ID0gdXNlVCgpXG4gIGNvbnN0IFthY3Rpb24sIHNldEFjdGlvbl0gPSB1c2VTdGF0ZTxzdHJpbmcgfCBudWxsPihudWxsKVxuXG4gIGNvbnN0IG1lbnVJdGVtcyA9IFtcbiAgICB7XG4gICAgICBsYWJlbDogdCgnaGlzdG9yeS5tZW51LnJlbmFtZScpLFxuICAgICAgb25DbGlja0l0ZW06IChjaGF0SWQ6IHN0cmluZykgPT4ge1xuICAgICAgICBzZXRBY3Rpb24oJ2VkaXQnKVxuICAgICAgICBvbk9wZW5Nb2RhbChjaGF0SWQpXG4gICAgICB9LFxuICAgICAgSWNvbjogUGVuY2lsLFxuICAgICAgZXZlbnRLZXk6IEVWRU5UUy5wbUFpTWVudUVkaXQsXG4gICAgfSxcbiAgICB7XG4gICAgICBsYWJlbDogdCgnaGlzdG9yeS5tZW51LmRlbGV0ZScpLFxuICAgICAgb25DbGlja0l0ZW06IChjaGF0SWQ6IHN0cmluZykgPT4ge1xuICAgICAgICBzZXRBY3Rpb24oJ2RlbGV0ZScpXG4gICAgICAgIG9uT3Blbk1vZGFsKGNoYXRJZClcbiAgICAgIH0sXG4gICAgICBJY29uOiBUcmFzaCxcbiAgICAgIGV2ZW50S2V5OiBFVkVOVFMucG1BaU1lbnVEZWxldGUsXG4gICAgfSxcbiAgXVxuXG4gIGNvbnN0IGhhbmRsZUNvbmZpcm1BY3Rpb24gPSAoY2hhdERhdGE6IGFueSkgPT4ge1xuICAgIGlmIChhY3Rpb24gPT09ICdlZGl0Jykge1xuICAgICAgaGFuZGxlcnMuaGFuZGxlVXBkYXRlQ2hhdChjaGF0RGF0YSlcbiAgICB9IGVsc2Uge1xuICAgICAgaGFuZGxlcnMuaGFuZGxlRGVsZXRlQ2hhdChjaGF0RGF0YSlcbiAgICB9XG4gICAgc2V0QWN0aW9uKG51bGwpXG4gICAgb25DbG9zZU1vZGFsKClcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPD5cbiAgICAgIDxTQ0xIQ1dyYXBwZXJDb250ZW50XG4gICAgICAgIG9uQ2xpY2s9e2UgPT4ge1xuICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKClcbiAgICAgICAgICBvbkNsaWNrKGNoYXQpXG4gICAgICAgIH19XG4gICAgICAgIGtleT17YGNvbnZlcnNhdGlvbi0ke2NoYXQuc2Vzc2lvbkV4dGVybmFsSWR9YH1cbiAgICAgICAgaXNNb2RhbE9wZW49e2lzTW9kYWxPcGVufVxuICAgICAgICBpc1NlbGVjdGVkPXtpc1NlbGVjdGVkfVxuICAgICAgPlxuICAgICAgICA8U0NMSENXcmFwcGVyPlxuICAgICAgICAgIDxUb29sdGlwIHRpdGxlPXtzaG93VG9vbHRpcCA/IGNoYXQudGl0bGUgOiAnJ30+XG4gICAgICAgICAgICA8U0NMSENXcmFwcGVyVGl0bGUgcmVmPXt0ZXh0UmVmfT57Y2hhdC50aXRsZSB8fCB0KCdjb252ZXJzYXRpb25zLmVtcHR5TGFiZWwnKX08L1NDTEhDV3JhcHBlclRpdGxlPlxuICAgICAgICAgIDwvVG9vbHRpcD5cbiAgICAgICAgICA8VG9vbHRpcCB0aXRsZT17c2hvd1Rvb2x0aXBBZ2VudCA/IGNoYXQuYWdlbnQgKyAoY2hhdC5wcm9qZWN0TmFtZSA/IGAgLSAke2NoYXQucHJvamVjdE5hbWV9YCA6ICcnKSA6ICcnfT5cbiAgICAgICAgICAgIDxTQ0xIQ1dyYXBwZXJBZ2VudD5cbiAgICAgICAgICAgICAge2NoYXQuYWdlbnRUeXBlID09PSAnY2xvbmUnID8gKFxuICAgICAgICAgICAgICAgIDxNQUlBSWNvbiB3aWR0aD17MTR9IGhlaWdodD17MTR9IC8+XG4gICAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9e3sgZm9udFNpemU6ICcxNHB4JyB9fT57Y2hhdC5lbW9qaX08L3NwYW4+XG4gICAgICAgICAgICAgICl9XG5cbiAgICAgICAgICAgICAgPFNDTEhDV3JhcHBlckFnZW50VGV4dCByZWY9e2FnZW50UmVmfT5cbiAgICAgICAgICAgICAgICB7Y2hhdC5hZ2VudFR5cGUgPT09ICdjbG9uZScgPyBhYmJyZXZpYXRlU3BlY2lhbGlzdEluQWdlbnROYW1lKGNoYXQuYWdlbnQpIDogY2hhdC5hZ2VudH1cbiAgICAgICAgICAgICAgICB7Y2hhdC5wcm9qZWN0TmFtZSAmJiBgIC0gJHtjaGF0LnByb2plY3ROYW1lfWB9XG4gICAgICAgICAgICAgIDwvU0NMSENXcmFwcGVyQWdlbnRUZXh0PlxuICAgICAgICAgICAgPC9TQ0xIQ1dyYXBwZXJBZ2VudD5cbiAgICAgICAgICA8L1Rvb2x0aXA+XG4gICAgICAgIDwvU0NMSENXcmFwcGVyPlxuICAgICAgICA8U0NMSENXcmFwcGVyQnV0dG9uQWN0aW9ucz5cbiAgICAgICAgICA8Q1VCdXR0b25cbiAgICAgICAgICAgIGljb25Pbmx5XG4gICAgICAgICAgICBzaXplPVwic21hbGxcIlxuICAgICAgICAgICAgdmFyaWFudD1cInRleHRcIlxuICAgICAgICAgICAgb25DbGljaz17ZXZlbnQgPT4ge1xuICAgICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgICAgICAgICAgICBvbk9wZW5Nb2RhbChjaGF0LmlkKVxuICAgICAgICAgICAgfX1cbiAgICAgICAgICA+XG4gICAgICAgICAgICA8TWVudURvdHMgd2lkdGg9ezIwfSBoZWlnaHQ9ezIwfSAvPlxuICAgICAgICAgIDwvQ1VCdXR0b24+XG4gICAgICAgICAge2lzTW9kYWxPcGVuICYmICFhY3Rpb24gJiYgKFxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBkYXRhLW1vZGFsLWNvbnRhaW5lclxuICAgICAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICAgICAgICAgICAgICAgIHRvcDogJzMycHgnLFxuICAgICAgICAgICAgICAgIHJpZ2h0OiAnMTZweCcsXG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiAnd2hpdGUnLFxuICAgICAgICAgICAgICAgIHpJbmRleDogMTAwMCxcbiAgICAgICAgICAgICAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgICAgICAgICAgICAgZmxleERpcmVjdGlvbjogJ2NvbHVtbicsXG4gICAgICAgICAgICAgICAgYm9yZGVyUmFkaXVzOiAnNHB4JyxcbiAgICAgICAgICAgICAgICBib3JkZXI6ICcxcHggc29saWQgcmdiYSgyMjQsIDIyNCwgMjI0LCAxKScsXG4gICAgICAgICAgICAgICAgbWluV2lkdGg6ICcxMjRweCcsXG4gICAgICAgICAgICAgIH19XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIHttZW51SXRlbXMubWFwKCh7IGxhYmVsLCBvbkNsaWNrSXRlbSwgSWNvbiwgZXZlbnRLZXkgfSkgPT4gKFxuICAgICAgICAgICAgICAgIDxPcHRpb25JdGVtXG4gICAgICAgICAgICAgICAgICBrZXk9e2xhYmVsfVxuICAgICAgICAgICAgICAgICAgbGFiZWw9e2xhYmVsfVxuICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gb25DbGlja0l0ZW0oY2hhdC5pZCl9XG4gICAgICAgICAgICAgICAgICBJY29uPXtJY29ufVxuICAgICAgICAgICAgICAgICAgZXZlbnRLZXk9e2V2ZW50S2V5fVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICkpfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgKX1cbiAgICAgICAgPC9TQ0xIQ1dyYXBwZXJCdXR0b25BY3Rpb25zPlxuICAgICAgPC9TQ0xIQ1dyYXBwZXJDb250ZW50PlxuICAgICAgeyEhYWN0aW9uICYmXG4gICAgICAgIGFjdGlvbnNbYWN0aW9uXSh7XG4gICAgICAgICAgb25DbG9zZTogKCkgPT4ge1xuICAgICAgICAgICAgb25DbG9zZU1vZGFsKClcbiAgICAgICAgICAgIHNldEFjdGlvbihudWxsKVxuICAgICAgICAgIH0sXG4gICAgICAgICAgY2hhdCxcbiAgICAgICAgICBoYW5kbGVyczoge1xuICAgICAgICAgICAgaGFuZGxlQ29uZmlybUFjdGlvbixcbiAgICAgICAgICAgIGhhbmRsZVNldElzT3Blbk1vZGFsOiBvbkNsb3NlTW9kYWwsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSl9XG4gICAgPC8+XG4gIClcbn1cblxuZXhwb3J0IGNvbnN0IFNpZGViYXIgPSAoe1xuICBvbkdvVG9DaGF0LFxuICBvbkVycm9yID0gKCkgPT4gbnVsbCxcbiAgaGFuZGxlR29Ub0hvbWUsXG4gIHNob3dOZXdDaGF0LFxuICByZWZldGNoQ2hhdHMsXG4gIGhhbmRsZVNldFJlZmV0Y2hDaGF0cyxcbiAgaGFzRXJyb3IsXG4gIHJlc2V0U2VsZWN0ZWRDaGF0UmVmLFxufToge1xuICBvbkdvVG9DaGF0OiAoY2hhdElkOiBzdHJpbmcpID0+IHZvaWRcbiAgb25FcnJvcjogKCkgPT4gdm9pZFxuICBoYW5kbGVHb1RvSG9tZTogKCkgPT4gdm9pZFxuICBzaG93TmV3Q2hhdDogYm9vbGVhblxuICByZWZldGNoQ2hhdHM6IGJvb2xlYW5cbiAgaGFuZGxlU2V0UmVmZXRjaENoYXRzOiAocmVmZXRjaDogYm9vbGVhbikgPT4gdm9pZFxuICBoYXNFcnJvcjogYm9vbGVhblxuICByZXNldFNlbGVjdGVkQ2hhdFJlZj86IE11dGFibGVSZWZPYmplY3Q8KCgpID0+IHZvaWQpIHwgbnVsbD5cbn0pID0+IHtcbiAgY29uc3QgeyB0IH0gPSB1c2VUKClcbiAgY29uc3QgW2lzT3Blbiwgc2V0SXNPcGVuXSA9IHVzZVN0YXRlKHRydWUpXG4gIGNvbnN0IFtpc09wZW5Nb2RhbCwgc2V0SXNPcGVuTW9kYWxdID0gdXNlU3RhdGU8c3RyaW5nIHwgbnVsbD4obnVsbClcbiAgY29uc3QgW3NlbGVjdGVkQ2hhdCwgc2V0U2VsZWN0ZWRDaGF0XSA9IHVzZVN0YXRlPHN0cmluZyB8IG51bGw+KG51bGwpXG4gIGNvbnN0IGNoYXRzRmV0Y2hlZFJlZiA9IHVzZVJlZihmYWxzZSlcbiAgY29uc3QgY2hhdHNDb250YWluZXJSZWYgPSB1c2VSZWY8SFRNTERpdkVsZW1lbnQ+KG51bGwpXG4gIGNvbnN0IHVzZXIgPSB1c2VVc2VyKClcbiAgY29uc3QgeyBhZ2VudDogc2VsZWN0ZWRBZ2VudCB9ID0gdXNlR2xvYmFsQ29udGV4dCgpXG4gIGNvbnN0IHtcbiAgICBsb2FkaW5nQ2hhdHMsXG4gICAgY2hhdHMsXG4gICAgZGVsZXRlQ2hhdCxcbiAgICB1cGRhdGVDaGF0LFxuICAgIGZldGNoQ2hhdHMsXG4gICAgbGltaXQsXG4gICAgb2Zmc2V0LFxuICAgIGhhc01vcmVDaGF0cyxcbiAgICBsb2FkTW9yZUNoYXRzLFxuICAgIGlzTG9hZGluZ01vcmVDaGF0cyxcbiAgfSA9IHVzZUNoYXRzKHtcbiAgICBvbkVycm9yLFxuICB9KVxuXG4gIGNvbnN0IHVzZXJQZXJtaXNzaW9ucyA9IHVzZXI/LnBlcm1pc3Npb25zPy5haV9hZ2VudHNcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChyZXNldFNlbGVjdGVkQ2hhdFJlZikge1xuICAgICAgcmVzZXRTZWxlY3RlZENoYXRSZWYuY3VycmVudCA9ICgpID0+IHNldFNlbGVjdGVkQ2hhdChudWxsKVxuICAgIH1cbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgaWYgKHJlc2V0U2VsZWN0ZWRDaGF0UmVmKSB7XG4gICAgICAgIHJlc2V0U2VsZWN0ZWRDaGF0UmVmLmN1cnJlbnQgPSBudWxsXG4gICAgICB9XG4gICAgfVxuICB9LCBbcmVzZXRTZWxlY3RlZENoYXRSZWZdKVxuXG4gIGNvbnN0IGhhbmRsZURlbGV0ZUNoYXQgPSBhc3luYyAoY2hhdDogYW55KSA9PiB7XG4gICAgZGVsZXRlQ2hhdChjaGF0LnNlc3Npb25FeHRlcm5hbElkKVxuICAgIHNldElzT3Blbk1vZGFsKG51bGwpXG4gICAgaGFuZGxlR29Ub0hvbWUoKVxuICB9XG5cbiAgY29uc3QgaGFuZGxlVXBkYXRlQ2hhdCA9IChjaGF0OiBhbnkpID0+IHtcbiAgICB1cGRhdGVDaGF0KGNoYXQpXG4gICAgc2V0SXNPcGVuTW9kYWwobnVsbClcbiAgfVxuXG4gIGNvbnN0IGhhbmRsZU9wZW5Nb2RhbCA9IChjaGF0SWQ6IHN0cmluZykgPT4ge1xuICAgIGlmIChpc09wZW5Nb2RhbCAmJiBpc09wZW5Nb2RhbCAhPT0gY2hhdElkKSB7XG4gICAgICBzZXRJc09wZW5Nb2RhbChudWxsKVxuICAgIH0gZWxzZSB7XG4gICAgICBzZXRJc09wZW5Nb2RhbChjaGF0SWQpXG4gICAgfVxuICB9XG5cbiAgY29uc3QgaGFuZGxlQ2xvc2VNb2RhbCA9ICgpID0+IHtcbiAgICBzZXRJc09wZW5Nb2RhbChudWxsKVxuICB9XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBoYW5kbGVDbGlja091dHNpZGUgPSAoZXZlbnQ6IE1vdXNlRXZlbnQpID0+IHtcbiAgICAgIGlmIChpc09wZW5Nb2RhbCAmJiAhKGV2ZW50LnRhcmdldCBhcyBFbGVtZW50KS5jbG9zZXN0KCdbZGF0YS1tb2RhbC1jb250YWluZXJdJykpIHtcbiAgICAgICAgc2V0SXNPcGVuTW9kYWwobnVsbClcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoaXNPcGVuTW9kYWwpIHtcbiAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsIGhhbmRsZUNsaWNrT3V0c2lkZSlcbiAgICB9XG5cbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duJywgaGFuZGxlQ2xpY2tPdXRzaWRlKVxuICAgIH1cbiAgfSwgW2lzT3Blbk1vZGFsXSlcblxuICBjb25zdCBoYW5kbGVUb2dnbGVTaWRlYmFyID0gKCkgPT4ge1xuICAgIGlmIChpc09wZW5Nb2RhbCkge1xuICAgICAgc2V0SXNPcGVuTW9kYWwobnVsbClcbiAgICB9XG4gICAgc2V0SXNPcGVuKHByZXYgPT4gIXByZXYpXG4gIH1cblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChpc09wZW4gJiYgIWNoYXRzRmV0Y2hlZFJlZi5jdXJyZW50KSB7XG4gICAgICBjaGF0c0ZldGNoZWRSZWYuY3VycmVudCA9IHRydWVcbiAgICAgIGZldGNoQ2hhdHMoeyBsaW1pdCwgb2Zmc2V0IH0pXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgaWYgKHJlZmV0Y2hDaGF0cykge1xuICAgICAgZmV0Y2hDaGF0cyh7IGxpbWl0LCBvZmZzZXQgfSlcbiAgICAgIGhhbmRsZVNldFJlZmV0Y2hDaGF0cyhmYWxzZSlcbiAgICB9XG4gIH0sIFtpc09wZW4sIHJlZmV0Y2hDaGF0cywgaGFuZGxlU2V0UmVmZXRjaENoYXRzXSlcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IGhhbmRsZVNjcm9sbCA9ICgpID0+IHtcbiAgICAgIGlmICghY2hhdHNDb250YWluZXJSZWYuY3VycmVudCB8fCAhaGFzTW9yZUNoYXRzIHx8IGlzTG9hZGluZ01vcmVDaGF0cyB8fCBoYXNFcnJvcikge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgY29uc3QgeyBzY3JvbGxUb3AsIHNjcm9sbEhlaWdodCwgY2xpZW50SGVpZ2h0IH0gPSBjaGF0c0NvbnRhaW5lclJlZi5jdXJyZW50XG4gICAgICBjb25zdCBpc0F0Qm90dG9tID0gc2Nyb2xsVG9wICsgY2xpZW50SGVpZ2h0ID49IHNjcm9sbEhlaWdodCAtIDEwXG5cbiAgICAgIGlmIChpc0F0Qm90dG9tKSB7XG4gICAgICAgIGxvYWRNb3JlQ2hhdHMoKVxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGNvbnRhaW5lciA9IGNoYXRzQ29udGFpbmVyUmVmLmN1cnJlbnRcbiAgICBpZiAoY29udGFpbmVyKSB7XG4gICAgICBjb250YWluZXIuYWRkRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgaGFuZGxlU2Nyb2xsKVxuICAgIH1cblxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBpZiAoY29udGFpbmVyKSB7XG4gICAgICAgIGNvbnRhaW5lci5yZW1vdmVFdmVudExpc3RlbmVyKCdzY3JvbGwnLCBoYW5kbGVTY3JvbGwpXG4gICAgICB9XG4gICAgfVxuICB9LCBbaGFzTW9yZUNoYXRzLCBpc0xvYWRpbmdNb3JlQ2hhdHMsIGxvYWRNb3JlQ2hhdHMsIGhhc0Vycm9yXSlcblxuICBjb25zdCBoYW5kbGVOZXdDaGF0ID0gYXN5bmMgKCkgPT4ge1xuICAgIGlmIChpc09wZW5Nb2RhbCkge1xuICAgICAgc2V0SXNPcGVuTW9kYWwobnVsbClcbiAgICB9XG4gICAgc2V0U2VsZWN0ZWRDaGF0KG51bGwpXG4gICAgYXdhaXQgZmV0Y2hDaGF0cyh7IGxpbWl0LCBvZmZzZXQ6IDAgfSlcbiAgICBoYW5kbGVHb1RvSG9tZSgpXG4gIH1cblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IGhhbmRsZVJlZmV0Y2hTZXNzaW9uID0gKCkgPT4ge1xuICAgICAgZmV0Y2hDaGF0cyh7IGxpbWl0OiAyMCwgb2Zmc2V0OiAwIH0pXG4gICAgfVxuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3JlZmV0Y2gtc2Vzc2lvbicsIGhhbmRsZVJlZmV0Y2hTZXNzaW9uKVxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdyZWZldGNoLXNlc3Npb24nLCBoYW5kbGVSZWZldGNoU2Vzc2lvbilcbiAgICB9XG4gIH0sIFtdKVxuXG4gIGNvbnN0IHNob3dOZXdDaGF0QnV0dG9uID1cbiAgICAhc2hvd05ld0NoYXQgJiZcbiAgICAhaGFzRXJyb3IgJiZcbiAgICAhbG9hZGluZ0NoYXRzICYmXG4gICAgKCh1c2VyUGVybWlzc2lvbnM/LnZpZXcgJiZcbiAgICAgICFzZWxlY3RlZEFnZW50Py5pc19kZWxldGVkICYmXG4gICAgICAhc2VsZWN0ZWRBZ2VudD8uaGFzX25vdF9wZXJtaXNzaW9ucyAmJlxuICAgICAgIXNlbGVjdGVkQWdlbnQ/Lmhhc19ub3RfYWNjZXNzKSB8fFxuICAgICAgKCF1c2VyUGVybWlzc2lvbnM/LnZpZXcgJiZcbiAgICAgICAgIXNlbGVjdGVkQWdlbnQ/LmlzX2RlbGV0ZWQgJiZcbiAgICAgICAgIXNlbGVjdGVkQWdlbnQ/Lmhhc19ub3RfcGVybWlzc2lvbnMgJiZcbiAgICAgICAgIXNlbGVjdGVkQWdlbnQ/Lmhhc19ub3RfYWNjZXNzKSlcblxuICByZXR1cm4gKFxuICAgIDxkaXZcbiAgICAgIHN0eWxlPXt7XG4gICAgICAgIGJhY2tncm91bmRDb2xvcjogJyNmOWY5ZjknLFxuICAgICAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgICAgIGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLFxuICAgICAgICBwYWRkaW5nOiAnMTJweCAxMHB4JyxcbiAgICAgICAgbWluV2lkdGg6IGAke2lzT3BlbiA/ICcyMDBweCcgOiAnNDZweCd9YCxcbiAgICAgICAgbWF4V2lkdGg6ICcyNzBweCcsXG4gICAgICAgIHRyYW5zaXRpb246ICdhbGwgMC4zcyBlYXNlLWluLW91dCcsXG4gICAgICAgIGJvcmRlclJhZGl1czogJ2luaGVyaXQnLFxuICAgICAgICBib3JkZXJUb3BSaWdodFJhZGl1czogJzAnLFxuICAgICAgICBib3JkZXJCb3R0b21SaWdodFJhZGl1czogJzAnLFxuICAgICAgICBnYXA6ICcxMnB4JyxcbiAgICAgICAgb3ZlcmZsb3c6ICdoaWRkZW4nLFxuICAgICAgICBvdmVyc2Nyb2xsQmVoYXZpb3I6ICdjb250YWluJyxcbiAgICAgICAgLi4uKCFpc09wZW4gJiYgeyBhbGlnbkl0ZW1zOiAnY2VudGVyJywganVzdGlmeUNvbnRlbnQ6ICdzcGFjZS1iZXR3ZWVuJyB9KSxcbiAgICAgIH19XG4gICAgPlxuICAgICAgPGRpdlxuICAgICAgICBzdHlsZT17e1xuICAgICAgICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICAgICAgICBnYXA6ICcyMnB4JyxcbiAgICAgICAgICBmbGV4RGlyZWN0aW9uOiBgJHtpc09wZW4gPyAncm93LXJldmVyc2UnIDogJ2NvbHVtbid9YCxcbiAgICAgICAgICAuLi4oaXNPcGVuICYmIHsganVzdGlmeUNvbnRlbnQ6ICdzcGFjZS1iZXR3ZWVuJyB9KSxcbiAgICAgICAgfX1cbiAgICAgID5cbiAgICAgICAgPFRvb2x0aXAgdGl0bGU9e2lzT3BlbiA/IHQoJ2NvbnZlcnNhdGlvbnMuY29sbGFwc2UnKSA6IHQoJ2NvbnZlcnNhdGlvbnMuZXhwYW5kJyl9PlxuICAgICAgICAgIDxTQ1NXcmFwcGVyQ29sbGFwc2VkQnV0dG9uIG9uQ2xpY2s9e2hhbmRsZVRvZ2dsZVNpZGViYXJ9IGlzT3Blbj17aXNPcGVufT5cbiAgICAgICAgICAgIDxDaGV2cm9uRG91YmxlTGVmdCBjb2xvcj1cInJnYmEoMTAyLCAxMDIsIDEwMiwgMSlcIiB3aWR0aD17MjB9IGhlaWdodD17MjB9IC8+XG4gICAgICAgICAgPC9TQ1NXcmFwcGVyQ29sbGFwc2VkQnV0dG9uPlxuICAgICAgICA8L1Rvb2x0aXA+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBzdHlsZT17eyBkaXNwbGF5OiAnZmxleCcsIGdhcDogYCR7aXNPcGVuID8gJzE2cHgnIDogJzIycHgnfWAsIGZsZXhEaXJlY3Rpb246IGAke2lzT3BlbiA/ICdyb3cnIDogJ2NvbHVtbid9YCB9fVxuICAgICAgICA+XG4gICAgICAgICAge3Nob3dOZXdDaGF0QnV0dG9uICYmIChcbiAgICAgICAgICAgIDxUb29sdGlwIHRpdGxlPXt0KCdjb252ZXJzYXRpb25zLm5ld0NoYXQnKX0+XG4gICAgICAgICAgICAgIDxTQ1NXcmFwcGVyTmV3Q2hhdEljb24gb25DbGljaz17aGFuZGxlTmV3Q2hhdH0+XG4gICAgICAgICAgICAgICAgPE5ld0NoYXQgd2lkdGg9ezIwfSBoZWlnaHQ9ezIwfSAvPlxuICAgICAgICAgICAgICA8L1NDU1dyYXBwZXJOZXdDaGF0SWNvbj5cbiAgICAgICAgICAgIDwvVG9vbHRpcD5cbiAgICAgICAgICApfVxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdlxuICAgICAgICBzdHlsZT17e1xuICAgICAgICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICAgICAgICB3aWR0aDogJzEwMCUnLFxuICAgICAgICAgIGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLFxuICAgICAgICAgIGhlaWdodDogJ2NhbGMoMTAwJSAtIDMycHgpJyxcbiAgICAgICAgICBqdXN0aWZ5Q29udGVudDogYCR7aXNPcGVuID8gJycgOiAnZmxleC1lbmQnfWAsXG4gICAgICAgIH19XG4gICAgICA+XG4gICAgICAgIHtpc09wZW4gJiYgKFxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgIHBhZGRpbmc6ICc4cHggMCAwIDAnLFxuICAgICAgICAgICAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgICAgICAgICAgIGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLFxuICAgICAgICAgICAgICBnYXA6ICc0cHgnLFxuICAgICAgICAgICAgICBmbGV4R3JvdzogMSxcbiAgICAgICAgICAgICAgbWluV2lkdGg6ICcyNDRweCcsXG4gICAgICAgICAgICB9fVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgZm9udFNpemU6ICcxNHB4JyxcbiAgICAgICAgICAgICAgICBmb250V2VpZ2h0OiAnNDAwJyxcbiAgICAgICAgICAgICAgICBjb2xvcjogJyM2NjY2NjYnLFxuICAgICAgICAgICAgICAgIGxpbmVIZWlnaHQ6ICcxNDAlJyxcbiAgICAgICAgICAgICAgICBwYWRkaW5nTGVmdDogJzEycHgnLFxuICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7dCgnY29udmVyc2F0aW9ucy50aXRsZScpfVxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICByZWY9e2NoYXRzQ29udGFpbmVyUmVmfVxuICAgICAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICAgICAgICAgICAgICBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJyxcbiAgICAgICAgICAgICAgICBnYXA6ICc0cHgnLFxuICAgICAgICAgICAgICAgIGZsZXhHcm93OiAxLFxuICAgICAgICAgICAgICAgIHdpZHRoOiAnMTAwJScsXG4gICAgICAgICAgICAgICAgb3ZlcmZsb3dZOiAnYXV0bycsXG4gICAgICAgICAgICAgICAgb3ZlcnNjcm9sbEJlaGF2aW9yWTogJ2NvbnRhaW4nLFxuICAgICAgICAgICAgICAgIC4uLihjaGF0cy5sZW5ndGggJiYgeyBtYXhIZWlnaHQ6IGBjYWxjKDEwMHZoIC0gJHtoYXNFcnJvciA/IDE5NyA6IDE2MH1weClgIH0pLFxuICAgICAgICAgICAgICAgIC4uLighY2hhdHMubGVuZ3RoICYmIHsgYWxpZ25JdGVtczogJ2NlbnRlcicgfSksXG4gICAgICAgICAgICAgIH19XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIHtoYXNFcnJvciAmJiAhY2hhdHMubGVuZ3RoID8gKFxuICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICAgICAgICAgICAgICAgICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gICAgICAgICAgICAgICAgICAgIGp1c3RpZnlDb250ZW50OiAnY2VudGVyJyxcbiAgICAgICAgICAgICAgICAgICAgZmxleEdyb3c6IDEsXG4gICAgICAgICAgICAgICAgICAgIGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLFxuICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXt7IGRpc3BsYXk6ICdmbGV4JywgYWxpZ25JdGVtczogJ2NlbnRlcicsIGZsZXhHcm93OiAxIH19PlxuICAgICAgICAgICAgICAgICAgICA8RXJyb3JTdGF0ZSAvPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgICAgICAgICAgICAgICAgICAgIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICAgICAgICAgICAgICAgICAgICAgIGdhcDogJzE2cHgnLFxuICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogJ3JnYmEoMjUzLCAyMzYsIDIzNiwgMSknLFxuICAgICAgICAgICAgICAgICAgICAgIGJvcmRlclJhZGl1czogJzhweCcsXG4gICAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogJzEycHgnLFxuICAgICAgICAgICAgICAgICAgICAgIGJvcmRlcjogJzFweCBzb2xpZCByZ2JhKDE5OSwgNSwgNSwgMSknLFxuICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXt7IGRpc3BsYXk6ICdmbGV4JywgYWxpZ25JdGVtczogJ2NlbnRlcicsIGp1c3RpZnlDb250ZW50OiAnY2VudGVyJyB9fT5cbiAgICAgICAgICAgICAgICAgICAgICA8RXJyb3JJY29uIC8+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb250U2l6ZTogJzE0cHgnLFxuICAgICAgICAgICAgICAgICAgICAgICAgZm9udFdlaWdodDogJzQwMCcsXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xvcjogJ3JnYmEoMzIsIDMyLCAzMSwgMSknLFxuICAgICAgICAgICAgICAgICAgICAgICAgbGluZUhlaWdodDogJzE0MCUnLFxuICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICB7dCgnY29udmVyc2F0aW9ucy5lcnJvcicpfVxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgKSA6IGxvYWRpbmdDaGF0cyA/IChcbiAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXt7IGhlaWdodDogJzY3MHB4JyB9fT5cbiAgICAgICAgICAgICAgICAgIDxMb2FkZXIgLz5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgKSA6IGNoYXRzLmxlbmd0aCA/IChcbiAgICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICAge2NoYXRzLm1hcChjaGF0ID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgICA8TGlzdEhpc3RvcnlDaGF0XG4gICAgICAgICAgICAgICAgICAgICAgICBrZXk9e2NoYXQuaWR9XG4gICAgICAgICAgICAgICAgICAgICAgICBjaGF0PXtjaGF0fVxuICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17Y2hhdERhdGEgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNPcGVuTW9kYWwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRJc09wZW5Nb2RhbChudWxsKVxuICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHNldFNlbGVjdGVkQ2hhdChjaGF0RGF0YS5zZXNzaW9uRXh0ZXJuYWxJZClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgb25Hb1RvQ2hhdChjaGF0RGF0YSlcbiAgICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgICBpc01vZGFsT3Blbj17aXNPcGVuTW9kYWwgPT09IGNoYXQuaWR9XG4gICAgICAgICAgICAgICAgICAgICAgICBvbk9wZW5Nb2RhbD17aGFuZGxlT3Blbk1vZGFsfVxuICAgICAgICAgICAgICAgICAgICAgICAgb25DbG9zZU1vZGFsPXtoYW5kbGVDbG9zZU1vZGFsfVxuICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlcnM9e3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlRGVsZXRlQ2hhdCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlVXBkYXRlQ2hhdCxcbiAgICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgICBpc1NlbGVjdGVkPXtzZWxlY3RlZENoYXQgPT09IGNoYXQuc2Vzc2lvbkV4dGVybmFsSWR9XG4gICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICAgICAgICB7aXNMb2FkaW5nTW9yZUNoYXRzICYmIChcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT17eyBkaXNwbGF5OiAnZmxleCcsIGp1c3RpZnlDb250ZW50OiAnY2VudGVyJywgcGFkZGluZzogJzE2cHgnIH19PlxuICAgICAgICAgICAgICAgICAgICAgIDxMb2FkZXIgLz5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgICAgICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICAgICAgICAgICAgICAgICAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gICAgICAgICAgICAgICAgICAgIGp1c3RpZnlDb250ZW50OiAnY2VudGVyJyxcbiAgICAgICAgICAgICAgICAgICAgZmxleEdyb3c6IDEsXG4gICAgICAgICAgICAgICAgICAgIGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLFxuICAgICAgICAgICAgICAgICAgICBnYXA6ICcxOHB4JyxcbiAgICAgICAgICAgICAgICAgICAgd2lkdGg6ICcyMDFweCcsXG4gICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxFbXB0eUhpc3RvcnlJY29uIC8+XG4gICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgICAgICAgICAgIGZvbnRTaXplOiAnMTRweCcsXG4gICAgICAgICAgICAgICAgICAgICAgZm9udFdlaWdodDogJzQwMCcsXG4gICAgICAgICAgICAgICAgICAgICAgY29sb3I6ICdyZ2JhKDEwMiwgMTAyLCAxMDIsIDEpJyxcbiAgICAgICAgICAgICAgICAgICAgICBsaW5lSGVpZ2h0OiAnMTQwJScsXG4gICAgICAgICAgICAgICAgICAgICAgdGV4dEFsaWduOiAnY2VudGVyJyxcbiAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAge3QoJ2NvbnZlcnNhdGlvbnMuZW1wdHknKX1cbiAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICAgICAgICAgICAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgICAgICAgICAgICAgICBqdXN0aWZ5Q29udGVudDogJ2NlbnRlcicsXG4gICAgICAgICAgICAgIH19XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIHtoYXNFcnJvciAmJiBjaGF0cy5sZW5ndGggPyAoXG4gICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgICAgICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgICAgICAgICAgICAgICAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgICAgICAgICAgICAgICAgICAgZ2FwOiAnMTZweCcsXG4gICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogJ3JnYmEoMjUzLCAyMzYsIDIzNiwgMSknLFxuICAgICAgICAgICAgICAgICAgICBib3JkZXJSYWRpdXM6ICc4cHgnLFxuICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiAnMTJweCcsXG4gICAgICAgICAgICAgICAgICAgIGJvcmRlcjogJzFweCBzb2xpZCByZ2JhKDE5OSwgNSwgNSwgMSknLFxuICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXt7IGRpc3BsYXk6ICdmbGV4JywgYWxpZ25JdGVtczogJ2NlbnRlcicsIGp1c3RpZnlDb250ZW50OiAnY2VudGVyJyB9fT5cbiAgICAgICAgICAgICAgICAgICAgPEVycm9ySWNvbiAvPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgICAgICAgICAgIGZvbnRTaXplOiAnMTRweCcsXG4gICAgICAgICAgICAgICAgICAgICAgZm9udFdlaWdodDogJzQwMCcsXG4gICAgICAgICAgICAgICAgICAgICAgY29sb3I6ICdyZ2JhKDMyLCAzMiwgMzEsIDEpJyxcbiAgICAgICAgICAgICAgICAgICAgICBsaW5lSGVpZ2h0OiAnMTQwJScsXG4gICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIHt0KCdjb252ZXJzYXRpb25zLmVycm9yJyl9XG4gICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICl9XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgICAgICAgICAgZ2FwOiAnOHB4JyxcbiAgICAgICAgICAgIGZsZXhEaXJlY3Rpb246IGlzT3BlbiA/ICdyb3cnIDogJ2NvbHVtbicsXG4gICAgICAgICAgICBqdXN0aWZ5Q29udGVudDogc2VsZWN0ZWRBZ2VudCA/ICdzcGFjZS1iZXR3ZWVuJyA6ICdmbGV4LWVuZCcsXG4gICAgICAgICAgfX1cbiAgICAgICAgPlxuICAgICAgICAgIHtzZWxlY3RlZEFnZW50ICYmIDxGZWVkYmFja0J1dHRvbiBzZWxlY3RlZEFnZW50PXtzZWxlY3RlZEFnZW50fSBpc09wZW49e2lzT3Blbn0gLz59XG4gICAgICAgICAgPE9uYm9hcmRpbmdNb2RhbEJ1dHRvbiAvPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICApXG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQTJCQSxTQUFTLEVBQUVDLE1BQU0sRUFBRUMsUUFBUSxRQUFRLE9BQU87QUFDckUsU0FBU0MsaUJBQWlCLFFBQVEsb0RBQW9EO0FBQ3RGLFNBQVNDLFFBQVEsUUFBUSw0Q0FBNEM7QUFDckUsU0FBU0MsUUFBUSxRQUFRLDJDQUEyQztBQUNwRSxTQUFTQyxNQUFNLFFBQVEseUNBQXlDO0FBQ2hFLFNBQVNDLEtBQUssUUFBUSx3Q0FBd0M7QUFFOUQsU0FBU0MsT0FBTyxRQUFRLDhDQUE4QztBQUV0RSxTQUFTQyxnQkFBZ0IsUUFBUSxnQ0FBZ0M7QUFDakUsU0FBU0MsaUJBQWlCLFFBQVEsMEJBQTBCO0FBQzVELFNBQVNDLFFBQVEsUUFBUSx5QkFBeUI7QUFDbEQsU0FBU0MsTUFBTSxRQUFRLG9CQUFvQjtBQUMzQyxTQUFTQyxVQUFVLEVBQUVDLFFBQVEsRUFBRUMsT0FBTyxRQUFRLG1CQUFtQjtBQUNqRSxTQUFTQyxNQUFNLFFBQVEseUJBQXlCO0FBQ2hELFNBQVNDLElBQUksUUFBUSxxQkFBcUI7QUFDMUMsU0FBU0MsVUFBVSxRQUFRLCtCQUErQjtBQUMxRCxTQUFTQyxpQkFBaUIsUUFBUSxtQ0FBbUM7QUFDckUsU0FBU0MsbUJBQW1CLFFBQVEs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
|
|
495
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1c2VFZmZlY3QiLCJ1c2VNZW1vIiwidXNlUmVmIiwidXNlU3RhdGUiLCJBbmltYXRlUHJlc2VuY2UiLCJDaGV2cm9uRG91YmxlTGVmdCIsIlRvb2x0aXAiLCJFbXB0eUhpc3RvcnlJY29uIiwidXNlQ2hhdHMiLCJMb2FkZXIiLCJFcnJvclN0YXRlIiwiTWFpYVN0b3JlSWNvbiIsIk15QWdlbnRzTmF2SWNvbiIsIk5ld0NoYXQiLCJFVkVOVFMiLCJ1c2VFdmVudCIsInVzZVQiLCJFcnJvckljb24iLCJ1c2VVc2VyIiwiT25ib2FyZGluZ01vZGFsQnV0dG9uIiwiRmVlZGJhY2tCdXR0b24iLCJ1c2VHbG9iYWxDb250ZXh0IiwiZmV0Y2hNYWlhIiwibWFwQ09STGFuZyIsIlNDU1dyYXBwZXJDb2xsYXBzZWRCdXR0b24iLCJTQ1NXcmFwcGVyTmV3Q2hhdEljb24iLCJTQ1NTaWRlYmFyUm9vdCIsIlNDU1NpZGViYXJUb29sYmFyIiwiU0NTU2lkZWJhckJvZHkiLCJTQ1NTaWRlYmFyT3BlblBhbmVsIiwiU0NTU2lkZWJhckFnZW50c0Jsb2NrIiwiU0NTU2lkZWJhckFnZW50c0hlYWRpbmciLCJTQ1NTaWRlYmFyQWdlbnRzSGVhZGluZ1RleHQiLCJTQ1NTaWRlYmFyQWdlbnRzQWN0aW9ucyIsIlNDU1NpZGViYXJNYWlha2VyTmF2QnV0dG9uIiwiU0NTU2lkZWJhck1haWFrZXJOYXZMYWJlbCIsIlNDU1NpZGViYXJDaGF0c1Njcm9sbCIsIlNDU1NpZGViYXJFcnJvclN0YXRlQ29sdW1uIiwiU0NTU2lkZWJhckVycm9yU3RhdGVUb3AiLCJTQ1NTaWRlYmFyRXJyb3JCYW5uZXIiLCJTQ1NTaWRlYmFyRXJyb3JCYW5uZXJJY29uV3JhcCIsIlNDU1NpZGViYXJFcnJvckJhbm5lck1lc3NhZ2UiLCJTQ1NTaWRlYmFyTG9hZGluZ0FyZWEiLCJTQ1NTaWRlYmFyTG9hZE1vcmVSb3ciLCJTQ1NTaWRlYmFyRW1wdHlDaGF0cyIsIlNDU1NpZGViYXJFbXB0eUNoYXRzVGV4dCIsIlNDU1NpZGViYXJDaGF0c0Zvb3RlciIsIlNDU1NpZGViYXJGb290ZXJBY3Rpb25zIiwiU0NTU2lkZWJhclNlY3Rpb25Nb2RhbEJhY2tkcm9wTW90aW9uIiwiU2lkZWJhckNoYXRzU2VjdGlvbiIsIlNpZGViYXJDaGF0c1NlY3Rpb25Nb2RhbCIsImJ1aWxkU2lkZWJhclNlY3Rpb25zIiwiZ3JvdXBDaGF0c0J5U2lkZWJhclNlY3Rpb24iLCJTSURFQkFSX1NFQ1RJT05fVFJBTlNMQVRJT05fS0VZUyIsImdldENoYXRzU3RvcmVTdGF0ZSIsIlNFQ1RJT05fTU9EQUxfU0VTU0lPTlNfUEFHRV9MSU1JVCIsIlNJREVCQVJfU0VTU0lPTlNfUEFHRV9MSU1JVCIsImpzeCIsIl9qc3giLCJqc3hzIiwiX2pzeHMiLCJGcmFnbWVudCIsIl9GcmFnbWVudCIsIlNpZGViYXIiLCJfcmVmIiwiX3VzZXIkcGVybWlzc2lvbnMiLCJvbkdvVG9DaGF0IiwiX3JlZiRvbkVycm9yIiwib25FcnJvciIsImhhbmRsZUdvVG9Ib21lIiwiaGFuZGxlT3Blbk1hcmtldHBsYWNlIiwic2hvd05ld0NoYXQiLCJyZWZldGNoQ2hhdHMiLCJoYW5kbGVTZXRSZWZldGNoQ2hhdHMiLCJoYXNFcnJvciIsInJlc2V0U2VsZWN0ZWRDaGF0UmVmIiwiX3JlZiRhZ2VudHNOYXZBY3RpdmUiLCJhZ2VudHNOYXZBY3RpdmUiLCJfdXNlVCIsInQiLCJpMThuIiwiX3VzZVN0YXRlIiwiX3VzZVN0YXRlMiIsIl9zbGljZWRUb0FycmF5IiwiaXNPcGVuIiwic2V0SXNPcGVuIiwiX3VzZVN0YXRlMyIsIl91c2VTdGF0ZTQiLCJjaGF0TWVudVN0YXRlIiwic2V0Q2hhdE1lbnVTdGF0ZSIsIl91c2VTdGF0ZTUiLCJfdXNlU3RhdGU2IiwiZXhwYW5kZWRTZWN0aW9uTW9kYWxLZXkiLCJzZXRFeHBhbmRlZFNlY3Rpb25Nb2RhbEtleSIsIl91c2VTdGF0ZTciLCJjbGllbnRzIiwicHJvamVjdHMiLCJhZ2VudHNCeUNvbXBhbnkiLCJfdXNlU3RhdGU4IiwiY29sbGFwc2VkU2VjdGlvbnMiLCJzZXRDb2xsYXBzZWRTZWN0aW9ucyIsIl91c2VTdGF0ZTkiLCJfdXNlU3RhdGUwIiwic2VsZWN0ZWRDaGF0Iiwic2V0U2VsZWN0ZWRDaGF0IiwiY2hhdHNGZXRjaGVkUmVmIiwic2lkZWJhclNjcm9sbFJlZiIsInVzZXIiLCJldmVudEFtcGxpdHVkZSIsIl91c2VHbG9iYWxDb250ZXh0Iiwic2VsZWN0ZWRBZ2VudCIsImFnZW50Iiwic2VsZWN0QWdlbnQiLCJzZXRQcm9qZWN0Iiwic2V0Q2xpZW50IiwiX3VzZUNoYXRzIiwibG9hZGluZ0NoYXRzIiwiY2hhdHMiLCJkZWxldGVDaGF0IiwidXBkYXRlQ2hhdCIsImZldGNoQ2hhdHMiLCJoYXNNb3JlQ2hhdHMiLCJsb2FkTW9yZUNoYXRzIiwiaXNMb2FkaW5nTW9yZUNoYXRzIiwic2Vzc2lvbnNHcm91cEhhc01vcmUiLCJ1c2VyUGVybWlzc2lvbnMiLCJwZXJtaXNzaW9ucyIsImFpX2FnZW50cyIsImNhbkNyZWF0ZUFnZW50cyIsImNyZWF0ZSIsImNhblZpZXdBZ2VudHMiLCJ2aWV3IiwiYWdlbnROYXZCdXR0b25Db3VudCIsInNob3dBZ2VudHNOYXZCbG9jayIsImdyb3VwZWRDaGF0cyIsInNpZGViYXJTZWN0aW9ucyIsImtleSIsIl91c2VyJGNvbXBhbnkiLCJjb21wYW55TmFtZSIsImNvbXBhbnkiLCJ0cmltIiwiZXhwYW5kZWRTZWN0aW9uIiwiZmluZCIsInNlY3Rpb24iLCJjdXJyZW50IiwiaGFuZGxlRGVsZXRlQ2hhdCIsIl9yZWYyIiwiX2FzeW5jVG9HZW5lcmF0b3IiLCJfcmVnZW5lcmF0b3JSdW50aW1lIiwibWFyayIsIl9jYWxsZWUiLCJjaGF0Iiwid3JhcCIsIl9jb250ZXh0IiwicHJldiIsIm5leHQiLCJzZXNzaW9uRXh0ZXJuYWxJZCIsInN0b3AiLCJfeCIsImFwcGx5IiwiYXJndW1lbnRzIiwiaGFuZGxlVXBkYXRlQ2hhdCIsImhhbmRsZU9wZW5DaGF0TWVudSIsImNoYXRJZCIsInN1cmZhY2UiLCJoYW5kbGVDbG9zZUNoYXRNZW51IiwiaGFuZGxlT3BlblNlY3Rpb25Nb2RhbCIsIl9yZWYzIiwiX2NhbGxlZTIiLCJzZWN0aW9uS2V5IiwiX2dldENoYXRzU3RvcmVTdGF0ZSIsInN0b3JlTGltaXQiLCJfY29udGV4dDIiLCJsaW1pdCIsIm9mZnNldCIsInNob3dHbG9iYWxMb2FkZXIiLCJfeDIiLCJoYW5kbGVDbG9zZVNlY3Rpb25Nb2RhbCIsImhhbmRsZVRvZ2dsZVNlY3Rpb25Db2xsYXBzZSIsIl9vYmplY3RTcHJlYWQiLCJfZGVmaW5lUHJvcGVydHkiLCJoYW5kbGVTZWxlY3RDb252ZXJzYXRpb24iLCJjaGF0RGF0YSIsImhhbmRsZUNsaWNrT3V0c2lkZSIsImV2ZW50IiwidGFyZ2V0IiwiY2xvc2VzdCIsImRvY3VtZW50IiwiYWRkRXZlbnRMaXN0ZW5lciIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJoYW5kbGVUb2dnbGVTaWRlYmFyIiwiaGFuZGxlT3BlbkNyZWF0ZUFnZW50IiwiX3JlZjQiLCJfY2FsbGVlMyIsInJlc3BvbnNlIiwiZGF0YSIsIm1haWFrZXJBZ2VudCIsIl9jb250ZXh0MyIsInBhdGgiLCJjb25jYXQiLCJsYW5ndWFnZSIsIm1ldGhvZCIsInNlbnQiLCJqc29uIiwidHlwZSIsImVudGl0eSIsImFicnVwdCIsImhhbmRsZU5ld0NoYXQiLCJfcmVmNSIsIl9jYWxsZWU0IiwiX2NvbnRleHQ0IiwiaGFuZGxlUmVmZXRjaFNlc3Npb24iLCJzaG93TmV3Q2hhdEJ1dHRvbiIsImlzX2RlbGV0ZWQiLCJoYXNfbm90X3Blcm1pc3Npb25zIiwiaGFzX25vdF9hY2Nlc3MiLCIkaXNPcGVuIiwiY2hpbGRyZW4iLCJ0aXRsZSIsIm9uQ2xpY2siLCJjb2xvciIsIndpZHRoIiwiaGVpZ2h0IiwicmVmIiwiYWlDaGF0TXBPcGVuIiwiJGFjdGl2ZSIsInNpemUiLCIkaGFzQ2hhdHMiLCJsZW5ndGgiLCIkb2Zmc2V0VmFyaWFudCIsIiRhZ2VudE5hdkJ1dHRvbkNvdW50IiwibWFwIiwiY29sbGFwc2VkIiwib25Ub2dnbGVDb2xsYXBzZSIsIm9uT3Blbk1vcmUiLCJvbk9wZW5DaGF0TWVudSIsIm9uQ2xvc2VDaGF0TWVudSIsInNlbGVjdGVkQ2hhdFNlc3Npb25FeHRlcm5hbElkIiwiJGp1c3RpZnlCZXR3ZWVuIiwiaW5pdGlhbCIsIm9wYWNpdHkiLCJhbmltYXRlIiwiZXhpdCIsInRyYW5zaXRpb24iLCJkdXJhdGlvbiIsImVhc2UiLCJvbkNsb3NlIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvbW9sZWN1bGVzL1NpZGViYXIvU2lkZWJhci50c3giXSwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgbm8tcGFyYW0tcmVhc3NpZ24gKi9cbi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1zaGFkb3cgKi9cbi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkgKi9cbi8qIGVzbGludC1kaXNhYmxlIG5vLW5lc3RlZC10ZXJuYXJ5ICovXG4vKiBlc2xpbnQtZGlzYWJsZSBqc3gtYTExeS9jbGljay1ldmVudHMtaGF2ZS1rZXktZXZlbnRzICovXG4vKiBlc2xpbnQtZGlzYWJsZSBqc3gtYTExeS9uby1zdGF0aWMtZWxlbWVudC1pbnRlcmFjdGlvbnMgKi9cbmltcG9ydCB7IE11dGFibGVSZWZPYmplY3QsIHVzZUVmZmVjdCwgdXNlTWVtbywgdXNlUmVmLCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgQW5pbWF0ZVByZXNlbmNlIH0gZnJvbSAnZnJhbWVyLW1vdGlvbidcbmltcG9ydCB7IENoZXZyb25Eb3VibGVMZWZ0IH0gZnJvbSAnQHByb2plY3Rjb3IvaWNvbnMvbGliL2NvbXBvbmVudHMvQ2hldnJvbkRvdWJsZUxlZnQnXG5cbmltcG9ydCB7IFRvb2x0aXAgfSBmcm9tICdAcHJvamVjdGNvci90b29sdGlwdjIvbGliL2NvbXBvbmVudHMvVG9vbHRpcCdcblxuaW1wb3J0IHsgRW1wdHlIaXN0b3J5SWNvbiB9IGZyb20gJy4uLy4uL2F0b21zL2ljb25zL0VtcHR5SGlzdG9yeSdcbmltcG9ydCB7IHVzZUNoYXRzIH0gZnJvbSAnLi4vLi4vLi4vaG9va3MvdXNlQ2hhdHMnXG5pbXBvcnQgeyBMb2FkZXIgfSBmcm9tICcuLi8uLi9hdG9tcy9Mb2FkZXInXG5pbXBvcnQgeyBFcnJvclN0YXRlLCBNYWlhU3RvcmVJY29uLCBNeUFnZW50c05hdkljb24sIE5ld0NoYXQgfSBmcm9tICcuLi8uLi9hdG9tcy9pY29ucydcbmltcG9ydCB7IEVWRU5UUywgdXNlRXZlbnQgfSBmcm9tICcuLi8uLi8uLi9ob29rcy91c2VFdmVudCdcbmltcG9ydCB7IHVzZVQgfSBmcm9tICcuLi8uLi8uLi9ob29rcy91c2VUJ1xuaW1wb3J0IHsgRXJyb3JJY29uIH0gZnJvbSAnLi4vLi4vYXRvbXMvaWNvbnMvRXJyb3JJY29uJ1xuaW1wb3J0IHsgdXNlVXNlciB9IGZyb20gJy4uLy4uLy4uL2NvbnRleHQvY29yLXVzZXInXG5pbXBvcnQgeyBPbmJvYXJkaW5nTW9kYWxCdXR0b24gfSBmcm9tICcuLi8uLi9hdG9tcy9PbmJvYXJkaW5nTW9kYWxCdXR0b24nXG5pbXBvcnQgeyBGZWVkYmFja0J1dHRvbiB9IGZyb20gJy4uLy4uL2F0b21zL0ZlZWRiYWNrQnV0dG9uJ1xuaW1wb3J0IHsgdXNlR2xvYmFsQ29udGV4dCB9IGZyb20gJy4uLy4uLy4uL2NvbnRleHQvZ2xvYmFsLWNvbnRleHQnXG5pbXBvcnQgeyBmZXRjaE1haWEgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9tYWlhL2NsaWVudCdcbmltcG9ydCB7IG1hcENPUkxhbmcgfSBmcm9tICcuLi8uLi8uLi9sYW5nL3V0aWxzJ1xuaW1wb3J0IHsgU0NTV3JhcHBlckNvbGxhcHNlZEJ1dHRvbiwgU0NTV3JhcHBlck5ld0NoYXRJY29uIH0gZnJvbSAnLi9TaWRlYmFyLnN0eWxlcydcbmltcG9ydCB7XG4gIFNDU1NpZGViYXJSb290LFxuICBTQ1NTaWRlYmFyVG9vbGJhcixcbiAgU0NTU2lkZWJhckJvZHksXG4gIFNDU1NpZGViYXJPcGVuUGFuZWwsXG4gIFNDU1NpZGViYXJBZ2VudHNCbG9jayxcbiAgU0NTU2lkZWJhckFnZW50c0hlYWRpbmcsXG4gIFNDU1NpZGViYXJBZ2VudHNIZWFkaW5nVGV4dCxcbiAgU0NTU2lkZWJhckFnZW50c0FjdGlvbnMsXG4gIFNDU1NpZGViYXJNYWlha2VyTmF2QnV0dG9uLFxuICBTQ1NTaWRlYmFyTWFpYWtlck5hdkxhYmVsLFxuICBTQ1NTaWRlYmFyQ2hhdHNTY3JvbGwsXG4gIFNDU1NpZGViYXJFcnJvclN0YXRlQ29sdW1uLFxuICBTQ1NTaWRlYmFyRXJyb3JTdGF0ZVRvcCxcbiAgU0NTU2lkZWJhckVycm9yQmFubmVyLFxuICBTQ1NTaWRlYmFyRXJyb3JCYW5uZXJJY29uV3JhcCxcbiAgU0NTU2lkZWJhckVycm9yQmFubmVyTWVzc2FnZSxcbiAgU0NTU2lkZWJhckxvYWRpbmdBcmVhLFxuICBTQ1NTaWRlYmFyTG9hZE1vcmVSb3csXG4gIFNDU1NpZGViYXJFbXB0eUNoYXRzLFxuICBTQ1NTaWRlYmFyRW1wdHlDaGF0c1RleHQsXG4gIFNDU1NpZGViYXJDaGF0c0Zvb3RlcixcbiAgU0NTU2lkZWJhckZvb3RlckFjdGlvbnMsXG59IGZyb20gJy4vU2lkZWJhci5sYXlvdXQuc3R5bGVzJ1xuaW1wb3J0IHsgU0NTU2lkZWJhclNlY3Rpb25Nb2RhbEJhY2tkcm9wTW90aW9uIH0gZnJvbSAnLi9TaWRlYmFyQ2hhdHMuc3R5bGVzJ1xuaW1wb3J0IHsgU2lkZWJhckNoYXRzU2VjdGlvbiB9IGZyb20gJy4vU2lkZWJhckNoYXRzU2VjdGlvbidcbmltcG9ydCB7IFNpZGViYXJDaGF0c1NlY3Rpb25Nb2RhbCB9IGZyb20gJy4vU2lkZWJhckNoYXRzU2VjdGlvbk1vZGFsJ1xuaW1wb3J0IHsgYnVpbGRTaWRlYmFyU2VjdGlvbnMsIGdyb3VwQ2hhdHNCeVNpZGViYXJTZWN0aW9uIH0gZnJvbSAnLi9zaWRlYmFyQ2hhdHMuaGVscGVycydcbmltcG9ydCB0eXBlIHsgU2lkZWJhckNoYXRNZW51U3VyZmFjZSwgU2lkZWJhckNoYXRNZW51U3RhdGUsIFNpZGViYXJTZWN0aW9uS2V5IH0gZnJvbSAnLi9zaWRlYmFyQ2hhdHMudHlwZXMnXG5pbXBvcnQgeyBTSURFQkFSX1NFQ1RJT05fVFJBTlNMQVRJT05fS0VZUyB9IGZyb20gJy4vc2lkZWJhckNoYXRzLnR5cGVzJ1xuaW1wb3J0IHsgZ2V0Q2hhdHNTdG9yZVN0YXRlIH0gZnJvbSAnLi4vLi4vLi4vc3RvcmUvdXNlQ2hhdHNTdG9yZSdcbmltcG9ydCB7IFNFQ1RJT05fTU9EQUxfU0VTU0lPTlNfUEFHRV9MSU1JVCwgU0lERUJBUl9TRVNTSU9OU19QQUdFX0xJTUlUIH0gZnJvbSAnLi4vLi4vLi4vc3RvcmUvY2hhdHNTdG9yZS50eXBlcydcblxuZXhwb3J0IGNvbnN0IFNpZGViYXIgPSAoe1xuICBvbkdvVG9DaGF0LFxuICBvbkVycm9yID0gKCkgPT4gbnVsbCxcbiAgaGFuZGxlR29Ub0hvbWUsXG4gIGhhbmRsZU9wZW5NYXJrZXRwbGFjZSxcbiAgc2hvd05ld0NoYXQsXG4gIHJlZmV0Y2hDaGF0cyxcbiAgaGFuZGxlU2V0UmVmZXRjaENoYXRzLFxuICBoYXNFcnJvcixcbiAgcmVzZXRTZWxlY3RlZENoYXRSZWYsXG4gIGFnZW50c05hdkFjdGl2ZSA9IG51bGwsXG59OiB7XG4gIG9uR29Ub0NoYXQ6IChjaGF0SWQ6IHN0cmluZykgPT4gdm9pZFxuICBvbkVycm9yOiAoKSA9PiB2b2lkXG4gIGhhbmRsZUdvVG9Ib21lOiAoKSA9PiB2b2lkXG4gIGhhbmRsZU9wZW5NYXJrZXRwbGFjZTogKCkgPT4gdm9pZFxuICBzaG93TmV3Q2hhdDogYm9vbGVhblxuICByZWZldGNoQ2hhdHM6IGJvb2xlYW5cbiAgaGFuZGxlU2V0UmVmZXRjaENoYXRzOiAocmVmZXRjaDogYm9vbGVhbikgPT4gdm9pZFxuICBoYXNFcnJvcjogYm9vbGVhblxuICByZXNldFNlbGVjdGVkQ2hhdFJlZj86IE11dGFibGVSZWZPYmplY3Q8KCgpID0+IHZvaWQpIHwgbnVsbD5cbiAgLyoqIFJlc2FsdGEgTWFpYWtlciBvIE1pcyBhZ2VudGVzICovXG4gIGFnZW50c05hdkFjdGl2ZT86ICdtYWlha2VyJyB8ICdteUFnZW50cycgfCBudWxsXG59KSA9PiB7XG4gIGNvbnN0IHsgdCwgaTE4biB9ID0gdXNlVCgpXG4gIGNvbnN0IFtpc09wZW4sIHNldElzT3Blbl0gPSB1c2VTdGF0ZSh0cnVlKVxuICBjb25zdCBbY2hhdE1lbnVTdGF0ZSwgc2V0Q2hhdE1lbnVTdGF0ZV0gPSB1c2VTdGF0ZTxTaWRlYmFyQ2hhdE1lbnVTdGF0ZT4obnVsbClcbiAgY29uc3QgW2V4cGFuZGVkU2VjdGlvbk1vZGFsS2V5LCBzZXRFeHBhbmRlZFNlY3Rpb25Nb2RhbEtleV0gPSB1c2VTdGF0ZTxTaWRlYmFyU2VjdGlvbktleSB8IG51bGw+KG51bGwpXG4gIGNvbnN0IFtjb2xsYXBzZWRTZWN0aW9ucywgc2V0Q29sbGFwc2VkU2VjdGlvbnNdID0gdXNlU3RhdGU8UmVjb3JkPFNpZGViYXJTZWN0aW9uS2V5LCBib29sZWFuPj4oe1xuICAgIGNsaWVudHM6IGZhbHNlLFxuICAgIHByb2plY3RzOiBmYWxzZSxcbiAgICBhZ2VudHNCeUNvbXBhbnk6IGZhbHNlLFxuICB9KVxuICBjb25zdCBbc2VsZWN0ZWRDaGF0LCBzZXRTZWxlY3RlZENoYXRdID0gdXNlU3RhdGU8c3RyaW5nIHwgbnVsbD4obnVsbClcbiAgY29uc3QgY2hhdHNGZXRjaGVkUmVmID0gdXNlUmVmKGZhbHNlKVxuICBjb25zdCBzaWRlYmFyU2Nyb2xsUmVmID0gdXNlUmVmPEhUTUxEaXZFbGVtZW50PihudWxsKVxuICBjb25zdCB1c2VyID0gdXNlVXNlcigpXG4gIGNvbnN0IGV2ZW50QW1wbGl0dWRlID0gdXNlRXZlbnQoKVxuICBjb25zdCB7IGFnZW50OiBzZWxlY3RlZEFnZW50LCBzZWxlY3RBZ2VudCwgc2V0UHJvamVjdCwgc2V0Q2xpZW50IH0gPSB1c2VHbG9iYWxDb250ZXh0KClcbiAgY29uc3Qge1xuICAgIGxvYWRpbmdDaGF0cyxcbiAgICBjaGF0cyxcbiAgICBkZWxldGVDaGF0LFxuICAgIHVwZGF0ZUNoYXQsXG4gICAgZmV0Y2hDaGF0cyxcbiAgICBoYXNNb3JlQ2hhdHMsXG4gICAgbG9hZE1vcmVDaGF0cyxcbiAgICBpc0xvYWRpbmdNb3JlQ2hhdHMsXG4gICAgc2Vzc2lvbnNHcm91cEhhc01vcmUsXG4gIH0gPSB1c2VDaGF0cyh7XG4gICAgb25FcnJvcixcbiAgfSlcblxuICBjb25zdCB1c2VyUGVybWlzc2lvbnMgPSB1c2VyPy5wZXJtaXNzaW9ucz8uYWlfYWdlbnRzXG4gIGNvbnN0IGNhbkNyZWF0ZUFnZW50cyA9ICEhdXNlclBlcm1pc3Npb25zPy5jcmVhdGVcbiAgY29uc3QgY2FuVmlld0FnZW50cyA9ICEhdXNlclBlcm1pc3Npb25zPy52aWV3XG4gIGNvbnN0IGFnZW50TmF2QnV0dG9uQ291bnQgPSAoY2FuQ3JlYXRlQWdlbnRzID8gMiA6IGNhblZpZXdBZ2VudHMgPyAxIDogMCkgYXMgMCB8IDEgfCAyXG4gIGNvbnN0IHNob3dBZ2VudHNOYXZCbG9jayA9IGNhbkNyZWF0ZUFnZW50cyB8fCBjYW5WaWV3QWdlbnRzXG5cbiAgY29uc3QgZ3JvdXBlZENoYXRzID0gdXNlTWVtbygoKSA9PiBncm91cENoYXRzQnlTaWRlYmFyU2VjdGlvbihjaGF0cyksIFtjaGF0c10pXG5cbiAgY29uc3Qgc2lkZWJhclNlY3Rpb25zID0gdXNlTWVtbyhcbiAgICAoKSA9PlxuICAgICAgYnVpbGRTaWRlYmFyU2VjdGlvbnMoXG4gICAgICAgIGdyb3VwZWRDaGF0cyxcbiAgICAgICAga2V5ID0+XG4gICAgICAgICAga2V5ID09PSAnYWdlbnRzQnlDb21wYW55J1xuICAgICAgICAgICAgPyB0KFNJREVCQVJfU0VDVElPTl9UUkFOU0xBVElPTl9LRVlTW2tleV0sIHsgY29tcGFueU5hbWU6IHVzZXIuY29tcGFueT8udHJpbSgpIHx8ICfigJQnIH0pXG4gICAgICAgICAgICA6IHQoU0lERUJBUl9TRUNUSU9OX1RSQU5TTEFUSU9OX0tFWVNba2V5XSksXG4gICAgICAgIHNlc3Npb25zR3JvdXBIYXNNb3JlXG4gICAgICApLFxuICAgIFtncm91cGVkQ2hhdHMsIHQsIHVzZXIuY29tcGFueSwgc2Vzc2lvbnNHcm91cEhhc01vcmVdXG4gIClcblxuICBjb25zdCBleHBhbmRlZFNlY3Rpb24gPSBleHBhbmRlZFNlY3Rpb25Nb2RhbEtleVxuICAgID8gc2lkZWJhclNlY3Rpb25zLmZpbmQoc2VjdGlvbiA9PiBzZWN0aW9uLmtleSA9PT0gZXhwYW5kZWRTZWN0aW9uTW9kYWxLZXkpIHx8IG51bGxcbiAgICA6IG51bGxcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChyZXNldFNlbGVjdGVkQ2hhdFJlZikge1xuICAgICAgcmVzZXRTZWxlY3RlZENoYXRSZWYuY3VycmVudCA9ICgpID0+IHNldFNlbGVjdGVkQ2hhdChudWxsKVxuICAgIH1cbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgaWYgKHJlc2V0U2VsZWN0ZWRDaGF0UmVmKSB7XG4gICAgICAgIHJlc2V0U2VsZWN0ZWRDaGF0UmVmLmN1cnJlbnQgPSBudWxsXG4gICAgICB9XG4gICAgfVxuICB9LCBbcmVzZXRTZWxlY3RlZENoYXRSZWZdKVxuXG4gIGNvbnN0IGhhbmRsZURlbGV0ZUNoYXQgPSBhc3luYyAoY2hhdDogYW55KSA9PiB7XG4gICAgZGVsZXRlQ2hhdChjaGF0LnNlc3Npb25FeHRlcm5hbElkKVxuICAgIHNldENoYXRNZW51U3RhdGUobnVsbClcbiAgICBoYW5kbGVHb1RvSG9tZSgpXG4gIH1cblxuICBjb25zdCBoYW5kbGVVcGRhdGVDaGF0ID0gKGNoYXQ6IGFueSkgPT4ge1xuICAgIHVwZGF0ZUNoYXQoY2hhdClcbiAgICBzZXRDaGF0TWVudVN0YXRlKG51bGwpXG4gIH1cblxuICBjb25zdCBoYW5kbGVPcGVuQ2hhdE1lbnUgPSAoY2hhdElkOiBzdHJpbmcsIHN1cmZhY2U6IFNpZGViYXJDaGF0TWVudVN1cmZhY2UpID0+IHtcbiAgICBzZXRDaGF0TWVudVN0YXRlKHByZXYgPT4gKHByZXY/LmNoYXRJZCA9PT0gY2hhdElkICYmIHByZXY/LnN1cmZhY2UgPT09IHN1cmZhY2UgPyBudWxsIDogeyBjaGF0SWQsIHN1cmZhY2UgfSkpXG4gIH1cblxuICBjb25zdCBoYW5kbGVDbG9zZUNoYXRNZW51ID0gKCkgPT4ge1xuICAgIHNldENoYXRNZW51U3RhdGUobnVsbClcbiAgfVxuXG4gIGNvbnN0IGhhbmRsZU9wZW5TZWN0aW9uTW9kYWwgPSBhc3luYyAoc2VjdGlvbktleTogU2lkZWJhclNlY3Rpb25LZXkpID0+IHtcbiAgICBzZXRDaGF0TWVudVN0YXRlKG51bGwpXG4gICAgY29uc3QgeyBsaW1pdDogc3RvcmVMaW1pdCB9ID0gZ2V0Q2hhdHNTdG9yZVN0YXRlKClcbiAgICBpZiAoc3RvcmVMaW1pdCA9PT0gU0lERUJBUl9TRVNTSU9OU19QQUdFX0xJTUlUKSB7XG4gICAgICBhd2FpdCBmZXRjaENoYXRzKHtcbiAgICAgICAgbGltaXQ6IFNFQ1RJT05fTU9EQUxfU0VTU0lPTlNfUEFHRV9MSU1JVCxcbiAgICAgICAgb2Zmc2V0OiAwLFxuICAgICAgICBzaG93R2xvYmFsTG9hZGVyOiBmYWxzZSxcbiAgICAgIH0pXG4gICAgfVxuICAgIHNldEV4cGFuZGVkU2VjdGlvbk1vZGFsS2V5KHNlY3Rpb25LZXkpXG4gIH1cblxuICBjb25zdCBoYW5kbGVDbG9zZVNlY3Rpb25Nb2RhbCA9ICgpID0+IHtcbiAgICBzZXRFeHBhbmRlZFNlY3Rpb25Nb2RhbEtleShudWxsKVxuICAgIHNldENoYXRNZW51U3RhdGUobnVsbClcbiAgfVxuXG4gIGNvbnN0IGhhbmRsZVRvZ2dsZVNlY3Rpb25Db2xsYXBzZSA9IChzZWN0aW9uS2V5OiBTaWRlYmFyU2VjdGlvbktleSkgPT4ge1xuICAgIHNldENvbGxhcHNlZFNlY3Rpb25zKHByZXYgPT4gKHtcbiAgICAgIC4uLnByZXYsXG4gICAgICBbc2VjdGlvbktleV06ICFwcmV2W3NlY3Rpb25LZXldLFxuICAgIH0pKVxuICB9XG5cbiAgY29uc3QgaGFuZGxlU2VsZWN0Q29udmVyc2F0aW9uID0gKGNoYXREYXRhOiBhbnkpID0+IHtcbiAgICBzZXRTZWxlY3RlZENoYXQoY2hhdERhdGEuc2Vzc2lvbkV4dGVybmFsSWQpXG4gICAgb25Hb1RvQ2hhdChjaGF0RGF0YSlcbiAgfVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgaGFuZGxlQ2xpY2tPdXRzaWRlID0gKGV2ZW50OiBNb3VzZUV2ZW50KSA9PiB7XG4gICAgICBjb25zdCB0YXJnZXQgPSBldmVudC50YXJnZXQgYXMgRWxlbWVudFxuICAgICAgaWYgKGNoYXRNZW51U3RhdGUgJiYgIXRhcmdldC5jbG9zZXN0KCdbZGF0YS1tb2RhbC1jb250YWluZXJdJykpIHtcbiAgICAgICAgc2V0Q2hhdE1lbnVTdGF0ZShudWxsKVxuICAgICAgfVxuICAgICAgaWYgKGV4cGFuZGVkU2VjdGlvbk1vZGFsS2V5ICYmICF0YXJnZXQuY2xvc2VzdCgnW2RhdGEtc2VjdGlvbi1tb2RhbC1jb250YWluZXJdJykpIHtcbiAgICAgICAgc2V0RXhwYW5kZWRTZWN0aW9uTW9kYWxLZXkobnVsbClcbiAgICAgICAgc2V0Q2hhdE1lbnVTdGF0ZShudWxsKVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChjaGF0TWVudVN0YXRlIHx8IGV4cGFuZGVkU2VjdGlvbk1vZGFsS2V5KSB7XG4gICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCBoYW5kbGVDbGlja091dHNpZGUpXG4gICAgfVxuXG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsIGhhbmRsZUNsaWNrT3V0c2lkZSlcbiAgICB9XG4gIH0sIFtjaGF0TWVudVN0YXRlLCBleHBhbmRlZFNlY3Rpb25Nb2RhbEtleV0pXG5cbiAgY29uc3QgaGFuZGxlVG9nZ2xlU2lkZWJhciA9ICgpID0+IHtcbiAgICBpZiAoY2hhdE1lbnVTdGF0ZSkge1xuICAgICAgc2V0Q2hhdE1lbnVTdGF0ZShudWxsKVxuICAgIH1cbiAgICBpZiAoZXhwYW5kZWRTZWN0aW9uTW9kYWxLZXkpIHtcbiAgICAgIHNldEV4cGFuZGVkU2VjdGlvbk1vZGFsS2V5KG51bGwpXG4gICAgfVxuICAgIHNldElzT3BlbihwcmV2ID0+ICFwcmV2KVxuICB9XG5cbiAgY29uc3QgaGFuZGxlT3BlbkNyZWF0ZUFnZW50ID0gYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2hNYWlhKHtcbiAgICAgIHBhdGg6IGBhZ2VudHM/YWdlbnRfdHlwZT1jbG9uZSZsYW5nPSR7bWFwQ09STGFuZyhpMThuLmxhbmd1YWdlKX1gLFxuICAgICAgbWV0aG9kOiAnR0VUJyxcbiAgICB9KVxuICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXNwb25zZS5qc29uKClcbiAgICBjb25zdCBtYWlha2VyQWdlbnQgPSAoZGF0YS5kYXRhIHx8IFtdKS5maW5kKChhZ2VudDogYW55KSA9PiBhZ2VudC50eXBlID09PSAnY2xvbmUnICYmIGFnZW50LmVudGl0eSA9PT0gJ2dsb2JhbCcpXG5cbiAgICBpZiAoIW1haWFrZXJBZ2VudCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgc2V0UHJvamVjdChudWxsKVxuICAgIHNldENsaWVudD8uKG51bGwpXG4gICAgc2VsZWN0QWdlbnQobWFpYWtlckFnZW50KVxuICAgIGhhbmRsZUdvVG9Ib21lKClcbiAgfVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGlzT3BlbiAmJiAhY2hhdHNGZXRjaGVkUmVmLmN1cnJlbnQpIHtcbiAgICAgIGNoYXRzRmV0Y2hlZFJlZi5jdXJyZW50ID0gdHJ1ZVxuICAgICAgZmV0Y2hDaGF0cyh7IGxpbWl0OiBTSURFQkFSX1NFU1NJT05TX1BBR0VfTElNSVQsIG9mZnNldDogMCB9KVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGlmIChyZWZldGNoQ2hhdHMpIHtcbiAgICAgIGZldGNoQ2hhdHMoeyBsaW1pdDogU0lERUJBUl9TRVNTSU9OU19QQUdFX0xJTUlULCBvZmZzZXQ6IDAgfSlcbiAgICAgIGhhbmRsZVNldFJlZmV0Y2hDaGF0cyhmYWxzZSlcbiAgICB9XG4gIH0sIFtpc09wZW4sIHJlZmV0Y2hDaGF0cywgaGFuZGxlU2V0UmVmZXRjaENoYXRzLCBmZXRjaENoYXRzXSlcblxuICAvKiogRWwgc2Nyb2xsIGluZmluaXRvIGRlIHNlc2lvbmVzIHZpdmUgc29sbyBlbiBlbCBtb2RhbCBkZSBzZWNjacOzbiAoYFNpZGViYXJDaGF0c1NlY3Rpb25Nb2RhbGApLiAqL1xuXG4gIGNvbnN0IGhhbmRsZU5ld0NoYXQgPSBhc3luYyAoKSA9PiB7XG4gICAgaWYgKGNoYXRNZW51U3RhdGUpIHtcbiAgICAgIHNldENoYXRNZW51U3RhdGUobnVsbClcbiAgICB9XG4gICAgc2V0U2VsZWN0ZWRDaGF0KG51bGwpXG4gICAgYXdhaXQgZmV0Y2hDaGF0cyh7XG4gICAgICBsaW1pdDogZXhwYW5kZWRTZWN0aW9uTW9kYWxLZXkgPyBTRUNUSU9OX01PREFMX1NFU1NJT05TX1BBR0VfTElNSVQgOiBTSURFQkFSX1NFU1NJT05TX1BBR0VfTElNSVQsXG4gICAgICBvZmZzZXQ6IDAsXG4gICAgfSlcbiAgICBoYW5kbGVHb1RvSG9tZSgpXG4gIH1cblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IGhhbmRsZVJlZmV0Y2hTZXNzaW9uID0gKCkgPT4ge1xuICAgICAgZmV0Y2hDaGF0cyh7IGxpbWl0OiBTSURFQkFSX1NFU1NJT05TX1BBR0VfTElNSVQsIG9mZnNldDogMCB9KVxuICAgIH1cbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdyZWZldGNoLXNlc3Npb24nLCBoYW5kbGVSZWZldGNoU2Vzc2lvbilcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigncmVmZXRjaC1zZXNzaW9uJywgaGFuZGxlUmVmZXRjaFNlc3Npb24pXG4gICAgfVxuICB9LCBbZmV0Y2hDaGF0c10pXG5cbiAgY29uc3Qgc2hvd05ld0NoYXRCdXR0b24gPVxuICAgICFzaG93TmV3Q2hhdCAmJlxuICAgICFoYXNFcnJvciAmJlxuICAgICFsb2FkaW5nQ2hhdHMgJiZcbiAgICAoKHVzZXJQZXJtaXNzaW9ucz8udmlldyAmJlxuICAgICAgIXNlbGVjdGVkQWdlbnQ/LmlzX2RlbGV0ZWQgJiZcbiAgICAgICFzZWxlY3RlZEFnZW50Py5oYXNfbm90X3Blcm1pc3Npb25zICYmXG4gICAgICAhc2VsZWN0ZWRBZ2VudD8uaGFzX25vdF9hY2Nlc3MpIHx8XG4gICAgICAoIXVzZXJQZXJtaXNzaW9ucz8udmlldyAmJlxuICAgICAgICAhc2VsZWN0ZWRBZ2VudD8uaXNfZGVsZXRlZCAmJlxuICAgICAgICAhc2VsZWN0ZWRBZ2VudD8uaGFzX25vdF9wZXJtaXNzaW9ucyAmJlxuICAgICAgICAhc2VsZWN0ZWRBZ2VudD8uaGFzX25vdF9hY2Nlc3MpKVxuXG4gIHJldHVybiAoXG4gICAgPFNDU1NpZGViYXJSb290ICRpc09wZW49e2lzT3Blbn0+XG4gICAgICA8U0NTU2lkZWJhclRvb2xiYXIgJGlzT3Blbj17aXNPcGVufT5cbiAgICAgICAgPFRvb2x0aXAgdGl0bGU9e2lzT3BlbiA/IHQoJ2NvbnZlcnNhdGlvbnMuY29sbGFwc2UnKSA6IHQoJ2NvbnZlcnNhdGlvbnMuZXhwYW5kJyl9PlxuICAgICAgICAgIDxTQ1NXcmFwcGVyQ29sbGFwc2VkQnV0dG9uIG9uQ2xpY2s9e2hhbmRsZVRvZ2dsZVNpZGViYXJ9IGlzT3Blbj17aXNPcGVufT5cbiAgICAgICAgICAgIDxDaGV2cm9uRG91YmxlTGVmdCBjb2xvcj1cIiM0RDRENERcIiB3aWR0aD17MTZ9IGhlaWdodD17MTZ9IC8+XG4gICAgICAgICAgPC9TQ1NXcmFwcGVyQ29sbGFwc2VkQnV0dG9uPlxuICAgICAgICA8L1Rvb2x0aXA+XG4gICAgICAgIHtzaG93TmV3Q2hhdEJ1dHRvbiA/IChcbiAgICAgICAgICA8VG9vbHRpcCB0aXRsZT17dCgnY29udmVyc2F0aW9ucy5uZXdDaGF0Jyl9PlxuICAgICAgICAgICAgPFNDU1dyYXBwZXJOZXdDaGF0SWNvbiBvbkNsaWNrPXtoYW5kbGVOZXdDaGF0fT5cbiAgICAgICAgICAgICAgPE5ld0NoYXQgd2lkdGg9ezE2fSBoZWlnaHQ9ezE2fSBjb2xvcj1cIiM0RDRENERcIiAvPlxuICAgICAgICAgICAgPC9TQ1NXcmFwcGVyTmV3Q2hhdEljb24+XG4gICAgICAgICAgPC9Ub29sdGlwPlxuICAgICAgICApIDogbnVsbH1cbiAgICAgIDwvU0NTU2lkZWJhclRvb2xiYXI+XG4gICAgICA8U0NTU2lkZWJhckJvZHkgJGlzT3Blbj17aXNPcGVufT5cbiAgICAgICAge2lzT3BlbiA/IChcbiAgICAgICAgICA8U0NTU2lkZWJhck9wZW5QYW5lbCByZWY9e3NpZGViYXJTY3JvbGxSZWZ9PlxuICAgICAgICAgICAgPFNDU1NpZGViYXJBZ2VudHNCbG9jaz5cbiAgICAgICAgICAgICAge3Nob3dBZ2VudHNOYXZCbG9jayA/IChcbiAgICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICAgPFNDU1NpZGViYXJBZ2VudHNIZWFkaW5nPlxuICAgICAgICAgICAgICAgICAgICA8U0NTU2lkZWJhckFnZW50c0hlYWRpbmdUZXh0Pnt0KCdjb252ZXJzYXRpb25zLmFnZW50c1NlY3Rpb25UaXRsZScpfTwvU0NTU2lkZWJhckFnZW50c0hlYWRpbmdUZXh0PlxuICAgICAgICAgICAgICAgICAgPC9TQ1NTaWRlYmFyQWdlbnRzSGVhZGluZz5cbiAgICAgICAgICAgICAgICAgIDxTQ1NTaWRlYmFyQWdlbnRzQWN0aW9ucz5cbiAgICAgICAgICAgICAgICAgICAge2NhbkNyZWF0ZUFnZW50cyA/IChcbiAgICAgICAgICAgICAgICAgICAgICA8U0NTU2lkZWJhck1haWFrZXJOYXZCdXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudEFtcGxpdHVkZShFVkVOVFMuYWlDaGF0TXBPcGVuKVxuICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVPcGVuQ3JlYXRlQWdlbnQoKVxuICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICRhY3RpdmU9e2FnZW50c05hdkFjdGl2ZSA9PT0gJ21haWFrZXInfVxuICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxNYWlhU3RvcmVJY29uIHNpemU9ezE2fSAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPFNDU1NpZGViYXJNYWlha2VyTmF2TGFiZWw+e3QoJ2NvbnZlcnNhdGlvbnMubWFpYWtlck5hdicpfTwvU0NTU2lkZWJhck1haWFrZXJOYXZMYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICA8L1NDU1NpZGViYXJNYWlha2VyTmF2QnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICAgICAgICAgICAge2NhblZpZXdBZ2VudHMgPyAoXG4gICAgICAgICAgICAgICAgICAgICAgPFNDU1NpZGViYXJNYWlha2VyTmF2QnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9e2hhbmRsZU9wZW5NYXJrZXRwbGFjZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICRhY3RpdmU9e2FnZW50c05hdkFjdGl2ZSA9PT0gJ215QWdlbnRzJ31cbiAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8TXlBZ2VudHNOYXZJY29uIHNpemU9ezE2fSAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPFNDU1NpZGViYXJNYWlha2VyTmF2TGFiZWw+e3QoJ2NvbnZlcnNhdGlvbnMubXlBZ2VudHNOYXYnKX08L1NDU1NpZGViYXJNYWlha2VyTmF2TGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgPC9TQ1NTaWRlYmFyTWFpYWtlck5hdkJ1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAgICAgICAgICA8L1NDU1NpZGViYXJBZ2VudHNBY3Rpb25zPlxuICAgICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICAgIDwvU0NTU2lkZWJhckFnZW50c0Jsb2NrPlxuICAgICAgICAgICAgPFNDU1NpZGViYXJDaGF0c1Njcm9sbFxuICAgICAgICAgICAgICAkaGFzQ2hhdHM9e2NoYXRzLmxlbmd0aCA+IDB9XG4gICAgICAgICAgICAgICRvZmZzZXRWYXJpYW50PXtoYXNFcnJvciA/ICdlcnJvcicgOiAnZGVmYXVsdCd9XG4gICAgICAgICAgICAgICRhZ2VudE5hdkJ1dHRvbkNvdW50PXthZ2VudE5hdkJ1dHRvbkNvdW50fVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7aGFzRXJyb3IgJiYgIWNoYXRzLmxlbmd0aCA/IChcbiAgICAgICAgICAgICAgICA8U0NTU2lkZWJhckVycm9yU3RhdGVDb2x1bW4+XG4gICAgICAgICAgICAgICAgICA8U0NTU2lkZWJhckVycm9yU3RhdGVUb3A+XG4gICAgICAgICAgICAgICAgICAgIDxFcnJvclN0YXRlIC8+XG4gICAgICAgICAgICAgICAgICA8L1NDU1NpZGViYXJFcnJvclN0YXRlVG9wPlxuICAgICAgICAgICAgICAgICAgPFNDU1NpZGViYXJFcnJvckJhbm5lcj5cbiAgICAgICAgICAgICAgICAgICAgPFNDU1NpZGViYXJFcnJvckJhbm5lckljb25XcmFwPlxuICAgICAgICAgICAgICAgICAgICAgIDxFcnJvckljb24gLz5cbiAgICAgICAgICAgICAgICAgICAgPC9TQ1NTaWRlYmFyRXJyb3JCYW5uZXJJY29uV3JhcD5cbiAgICAgICAgICAgICAgICAgICAgPFNDU1NpZGViYXJFcnJvckJhbm5lck1lc3NhZ2U+e3QoJ2NvbnZlcnNhdGlvbnMuZXJyb3InKX08L1NDU1NpZGViYXJFcnJvckJhbm5lck1lc3NhZ2U+XG4gICAgICAgICAgICAgICAgICA8L1NDU1NpZGViYXJFcnJvckJhbm5lcj5cbiAgICAgICAgICAgICAgICA8L1NDU1NpZGViYXJFcnJvclN0YXRlQ29sdW1uPlxuICAgICAgICAgICAgICApIDogbG9hZGluZ0NoYXRzID8gKFxuICAgICAgICAgICAgICAgIDxTQ1NTaWRlYmFyTG9hZGluZ0FyZWE+XG4gICAgICAgICAgICAgICAgICA8TG9hZGVyIC8+XG4gICAgICAgICAgICAgICAgPC9TQ1NTaWRlYmFyTG9hZGluZ0FyZWE+XG4gICAgICAgICAgICAgICkgOiBjaGF0cy5sZW5ndGggPyAoXG4gICAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICAgIHtzaWRlYmFyU2VjdGlvbnMubWFwKHNlY3Rpb24gPT4gKFxuICAgICAgICAgICAgICAgICAgICA8U2lkZWJhckNoYXRzU2VjdGlvblxuICAgICAgICAgICAgICAgICAgICAgIGtleT17YGNoYXQtc2VjdGlvbi0ke3NlY3Rpb24ua2V5fWB9XG4gICAgICAgICAgICAgICAgICAgICAgc2VjdGlvbj17c2VjdGlvbn1cbiAgICAgICAgICAgICAgICAgICAgICBjb2xsYXBzZWQ9e2NvbGxhcHNlZFNlY3Rpb25zW3NlY3Rpb24ua2V5XX1cbiAgICAgICAgICAgICAgICAgICAgICBvblRvZ2dsZUNvbGxhcHNlPXsoKSA9PiBoYW5kbGVUb2dnbGVTZWN0aW9uQ29sbGFwc2Uoc2VjdGlvbi5rZXkpfVxuICAgICAgICAgICAgICAgICAgICAgIG9uT3Blbk1vcmU9eygpID0+IGhhbmRsZU9wZW5TZWN0aW9uTW9kYWwoc2VjdGlvbi5rZXkpfVxuICAgICAgICAgICAgICAgICAgICAgIGNoYXRNZW51U3RhdGU9e2NoYXRNZW51U3RhdGV9XG4gICAgICAgICAgICAgICAgICAgICAgb25PcGVuQ2hhdE1lbnU9e2hhbmRsZU9wZW5DaGF0TWVudX1cbiAgICAgICAgICAgICAgICAgICAgICBvbkNsb3NlQ2hhdE1lbnU9e2hhbmRsZUNsb3NlQ2hhdE1lbnV9XG4gICAgICAgICAgICAgICAgICAgICAgaGFuZGxlRGVsZXRlQ2hhdD17aGFuZGxlRGVsZXRlQ2hhdH1cbiAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVVcGRhdGVDaGF0PXtoYW5kbGVVcGRhdGVDaGF0fVxuICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkQ2hhdFNlc3Npb25FeHRlcm5hbElkPXtzZWxlY3RlZENoYXR9XG4gICAgICAgICAgICAgICAgICAgICAgb25Hb1RvQ2hhdD17aGFuZGxlU2VsZWN0Q29udmVyc2F0aW9ufVxuICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgKSl9XG4gICAgICAgICAgICAgICAgICB7aXNMb2FkaW5nTW9yZUNoYXRzICYmIChcbiAgICAgICAgICAgICAgICAgICAgPFNDU1NpZGViYXJMb2FkTW9yZVJvdz5cbiAgICAgICAgICAgICAgICAgICAgICA8TG9hZGVyIC8+XG4gICAgICAgICAgICAgICAgICAgIDwvU0NTU2lkZWJhckxvYWRNb3JlUm93PlxuICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICA8Lz5cbiAgICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgICA8U0NTU2lkZWJhckVtcHR5Q2hhdHM+XG4gICAgICAgICAgICAgICAgICA8RW1wdHlIaXN0b3J5SWNvbiAvPlxuICAgICAgICAgICAgICAgICAgPFNDU1NpZGViYXJFbXB0eUNoYXRzVGV4dD57dCgnY29udmVyc2F0aW9ucy5lbXB0eScpfTwvU0NTU2lkZWJhckVtcHR5Q2hhdHNUZXh0PlxuICAgICAgICAgICAgICAgIDwvU0NTU2lkZWJhckVtcHR5Q2hhdHM+XG4gICAgICAgICAgICAgICl9XG4gICAgICAgICAgICA8L1NDU1NpZGViYXJDaGF0c1Njcm9sbD5cbiAgICAgICAgICAgIDxTQ1NTaWRlYmFyQ2hhdHNGb290ZXI+XG4gICAgICAgICAgICAgIHtoYXNFcnJvciAmJiBjaGF0cy5sZW5ndGggPyAoXG4gICAgICAgICAgICAgICAgPFNDU1NpZGViYXJFcnJvckJhbm5lcj5cbiAgICAgICAgICAgICAgICAgIDxTQ1NTaWRlYmFyRXJyb3JCYW5uZXJJY29uV3JhcD5cbiAgICAgICAgICAgICAgICAgICAgPEVycm9ySWNvbiAvPlxuICAgICAgICAgICAgICAgICAgPC9TQ1NTaWRlYmFyRXJyb3JCYW5uZXJJY29uV3JhcD5cbiAgICAgICAgICAgICAgICAgIDxTQ1NTaWRlYmFyRXJyb3JCYW5uZXJNZXNzYWdlPnt0KCdjb252ZXJzYXRpb25zLmVycm9yJyl9PC9TQ1NTaWRlYmFyRXJyb3JCYW5uZXJNZXNzYWdlPlxuICAgICAgICAgICAgICAgIDwvU0NTU2lkZWJhckVycm9yQmFubmVyPlxuICAgICAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICAgIDwvU0NTU2lkZWJhckNoYXRzRm9vdGVyPlxuICAgICAgICAgIDwvU0NTU2lkZWJhck9wZW5QYW5lbD5cbiAgICAgICAgKSA6IG51bGx9XG4gICAgICAgIDxTQ1NTaWRlYmFyRm9vdGVyQWN0aW9ucyAkaXNPcGVuPXtpc09wZW59ICRqdXN0aWZ5QmV0d2Vlbj17ISFzZWxlY3RlZEFnZW50fT5cbiAgICAgICAgICB7c2VsZWN0ZWRBZ2VudCA/IDxGZWVkYmFja0J1dHRvbiBzZWxlY3RlZEFnZW50PXtzZWxlY3RlZEFnZW50fSBpc09wZW49e2lzT3Blbn0gLz4gOiBudWxsfVxuICAgICAgICAgIDxPbmJvYXJkaW5nTW9kYWxCdXR0b24gLz5cbiAgICAgICAgPC9TQ1NTaWRlYmFyRm9vdGVyQWN0aW9ucz5cbiAgICAgIDwvU0NTU2lkZWJhckJvZHk+XG4gICAgICA8QW5pbWF0ZVByZXNlbmNlPlxuICAgICAgICB7ZXhwYW5kZWRTZWN0aW9uTW9kYWxLZXkgJiYgZXhwYW5kZWRTZWN0aW9uID8gKFxuICAgICAgICAgIDw+XG4gICAgICAgICAgICA8U0NTU2lkZWJhclNlY3Rpb25Nb2RhbEJhY2tkcm9wTW90aW9uXG4gICAgICAgICAgICAgIGtleT1cInNpZGViYXItc2VjdGlvbi1jaGF0LWJhY2tkcm9wXCJcbiAgICAgICAgICAgICAgYXJpYS1oaWRkZW5cbiAgICAgICAgICAgICAgaW5pdGlhbD17eyBvcGFjaXR5OiAwIH19XG4gICAgICAgICAgICAgIGFuaW1hdGU9e3sgb3BhY2l0eTogMSB9fVxuICAgICAgICAgICAgICBleGl0PXt7IG9wYWNpdHk6IDAgfX1cbiAgICAgICAgICAgICAgdHJhbnNpdGlvbj17eyBkdXJhdGlvbjogMC4yLCBlYXNlOiAnZWFzZU91dCcgfX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8U2lkZWJhckNoYXRzU2VjdGlvbk1vZGFsXG4gICAgICAgICAgICAgIGtleT17ZXhwYW5kZWRTZWN0aW9uTW9kYWxLZXl9XG4gICAgICAgICAgICAgIHNlY3Rpb249e2V4cGFuZGVkU2VjdGlvbn1cbiAgICAgICAgICAgICAgb25DbG9zZT17aGFuZGxlQ2xvc2VTZWN0aW9uTW9kYWx9XG4gICAgICAgICAgICAgIGNoYXRNZW51U3RhdGU9e2NoYXRNZW51U3RhdGV9XG4gICAgICAgICAgICAgIG9uT3BlbkNoYXRNZW51PXtoYW5kbGVPcGVuQ2hhdE1lbnV9XG4gICAgICAgICAgICAgIG9uQ2xvc2VDaGF0TWVudT17aGFuZGxlQ2xvc2VDaGF0TWVudX1cbiAgICAgICAgICAgICAgaGFuZGxlRGVsZXRlQ2hhdD17aGFuZGxlRGVsZXRlQ2hhdH1cbiAgICAgICAgICAgICAgaGFuZGxlVXBkYXRlQ2hhdD17aGFuZGxlVXBkYXRlQ2hhdH1cbiAgICAgICAgICAgICAgc2VsZWN0ZWRDaGF0U2Vzc2lvbkV4dGVybmFsSWQ9e3NlbGVjdGVkQ2hhdH1cbiAgICAgICAgICAgICAgb25Hb1RvQ2hhdD17aGFuZGxlU2VsZWN0Q29udmVyc2F0aW9ufVxuICAgICAgICAgICAgICBoYXNNb3JlQ2hhdHM9e2hhc01vcmVDaGF0c31cbiAgICAgICAgICAgICAgbG9hZE1vcmVDaGF0cz17bG9hZE1vcmVDaGF0c31cbiAgICAgICAgICAgICAgaXNMb2FkaW5nTW9yZUNoYXRzPXtpc0xvYWRpbmdNb3JlQ2hhdHN9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvPlxuICAgICAgICApIDogbnVsbH1cbiAgICAgIDwvQW5pbWF0ZVByZXNlbmNlPlxuICAgIDwvU0NTU2lkZWJhclJvb3Q+XG4gIClcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBMkJBLFNBQVMsRUFBRUMsT0FBTyxFQUFFQyxNQUFNLEVBQUVDLFFBQVEsUUFBUSxPQUFPO0FBQzlFLFNBQVNDLGVBQWUsUUFBUSxlQUFlO0FBQy9DLFNBQVNDLGlCQUFpQixRQUFRLG9EQUFvRDtBQUV0RixTQUFTQyxPQUFPLFFBQVEsOENBQThDO0FBRXRFLFNBQVNDLGdCQUFnQixRQUFRLGdDQUFnQztBQUNqRSxTQUFTQyxRQUFRLFFBQVEseUJBQXlCO0FBQ2xELFNBQVNDLE1BQU0sUUFBUSxvQkFBb0I7QUFDM0MsU0FBU0MsVUFBVSxFQUFFQyxhQUFhLEVBQUVDLGVBQWUsRUFBRUMsT0FBTyxRQUFRLG1CQUFtQjtBQUN2RixTQUFTQyxNQUFNLEVBQUVDLFFBQVEsUUFBUSx5QkFBeUI7QUFDMUQsU0FBU0MsSUFBSSxRQUFRLHFCQUFxQjtBQUMxQyxTQUFTQyxTQUFTLFFBQVEsNkJBQTZCO0FBQ3ZELFNBQVNDLE9BQU8sUUFBUSwyQkFBMkI7QUFDbkQsU0FBU0MscUJBQXFCLFFBQVEsbUNBQW1DO0FBQ3pFLFNBQVNDLGNBQWMsUUFBUSw0QkFBNEI7QUFDM0QsU0FBU0MsZ0JBQWdCLFFBQVEsaUNBQWlDO0FBQ2xFLFNBQVNDLFNBQVMsUUFBUSwrQkFBK0I7QUFDekQsU0FBU0MsVUFBVSxRQUFRLHFCQUFxQjtBQUNoRCxTQUFTQyx5QkFBeUIsRUFBRUMscUJBQXFCLFFBQVEsa0JBQWtCO0FBQ25GLFNBQ0VDLGNBQWMsRUFDZEMsaUJBQWlC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
|