@projectcor/maia-components 2.11.67-1 → 2.11.67-2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/components/atoms/Chip/Chip.js +50 -15
- package/lib/components/atoms/Chip/styles.js +9 -5
- package/lib/components/atoms/ContextMentionPopover/ContextMentionPopover.js +38 -6
- package/lib/components/atoms/ContextMentionPopover/ContextMentionPopover.styles.js +21 -13
- package/lib/components/atoms/MAIAInput/MAIAInput.js +71 -215
- package/lib/components/atoms/MAIAInput/styles.js +24 -64
- package/lib/components/atoms/MAIAMessage/MAIAMessage.js +2 -4
- package/lib/components/molecules/ChatAIHome/ChatAIHome.js +297 -46
- package/lib/components/molecules/ChatAIHome/styles.js +63 -26
- package/lib/components/molecules/ChatAIMessages/ChatAIMessages.js +84 -159
- package/lib/components/molecules/ChatAIMessages/newStyles.js +19 -9
- package/lib/components/molecules/ChatAIModal/ChatAIModal.js +220 -42
- package/lib/components/molecules/ChatAIModal/components/ChatAiModalFooter/ChatAiModalFooter.js +26 -1
- package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.js +17 -17
- package/lib/components/molecules/ChatFooter/ChatFooter.js +75 -18
- package/lib/components/molecules/ChatFooter/ChatFooterFaqs.js +22 -7
- package/lib/components/molecules/ChatFooter/styles.js +11 -2
- package/lib/components/molecules/Sidebar/Sidebar.js +11 -7
- package/lib/components/organisms/EditQuestionModal/EditQuestionModal.js +2 -2
- package/lib/constants/maiaTaskPanelAccess.js +7 -5
- package/lib/constants/taskUrls.js +3 -1
- package/lib/context/global-context.js +8 -1
- package/lib/dev/DevContextMentionInput.js +1 -3
- package/lib/hooks/index.js +2 -1
- package/lib/hooks/useChatManager/useChatManager.js +155 -144
- package/lib/hooks/useChatMessages/useChatMessages.js +33 -2
- package/lib/hooks/useContextPinPopover.js +235 -0
- package/lib/hooks/useEntitySearch.js +74 -129
- package/lib/hooks/useEvent.js +2 -1
- package/lib/hooks/useFrequentlyAskedQuestions.js +12 -10
- package/lib/hooks/useFrequentlyUsedActions.js +5 -3
- package/lib/hooks/useMentionAllowedTypes.js +11 -1
- package/lib/hooks/useMentionPopover.js +3 -2
- package/lib/hooks/useOrchestratorStream/useOrchestratorStream.interface.js +1 -1
- package/lib/hooks/useOrchestratorStream/useOrchestratorStream.js +28 -22
- package/lib/hooks/useProjectSearch.js +4 -28
- package/lib/hooks/useProjectSummaryConfig.js +88 -33
- package/lib/hooks/useRecentClientsSearch.js +4 -34
- package/lib/hooks/useRecentContexts.js +86 -0
- package/lib/hooks/useSmoothStreamText/useSmoothStreamText.js +24 -16
- package/lib/lang/br/index.js +28 -10
- package/lib/lang/en/index.js +28 -10
- package/lib/lang/es/index.js +28 -10
- package/lib/lang/fr/index.js +28 -10
- package/lib/services/maia/Actions/getFrequentlyUsedActions.js +6 -3
- package/lib/services/maia/Agents/getAgents.js +225 -175
- package/lib/services/maia/Chats/getChatMessages.js +13 -3
- package/lib/services/maia/Chats/getChatsByUserId.js +10 -2
- package/lib/services/maia/Faqs/getFrequentlyAskedQuestions.js +6 -4
- package/lib/services/maia/Orchestrator/orchestrator.js +25 -11
- package/lib/services/maia/RecentContexts/getRecentContexts.js +54 -0
- package/lib/services/maia/RecentContexts/index.js +6 -0
- package/lib/services/maia/index.js +4 -2
- package/lib/services/utils/validateIsMaia.js +2 -2
- package/lib/types/Chat.js +1 -1
- package/lib/types/agent.js +1 -1
- package/lib/utils/agentDisplayName.js +9 -1
- package/lib/utils/entityLinkRender.js +132 -0
- package/lib/utils/hitlAnalytics.js +3 -3
- package/lib/utils/renderContextMentions.js +3 -1
- package/package.json +1 -1
- package/lib/components/atoms/MAIAViz/MAIAViz.js +0 -97
- package/lib/components/atoms/MAIAViz/MAIAViz.parse.js +0 -131
- package/lib/components/atoms/MAIAViz/MAIAViz.skeleton.js +0 -40
- package/lib/components/atoms/MAIAViz/MAIAViz.styles.js +0 -8
- package/lib/components/atoms/MAIAViz/MAIAViz.types.js +0 -49
- package/lib/components/atoms/MAIAViz/MAIAVizBar.js +0 -123
- package/lib/components/atoms/MAIAViz/MAIAVizDonut.js +0 -111
- package/lib/components/atoms/MAIAViz/MAIAVizKpis.js +0 -34
- package/lib/components/atoms/MAIAViz/README.md +0 -85
- package/lib/components/atoms/MAIAViz/index.js +0 -2
- package/lib/types/Hitl.js +0 -2
- package/lib/utils/maiaStreamdownRenderers.js +0 -16
|
@@ -159,7 +159,7 @@ export var useChatMessages = function useChatMessages(_ref) {
|
|
|
159
159
|
};
|
|
160
160
|
}(), [fetchProjects, setClient, setChipsProject, setProject, setTask]);
|
|
161
161
|
var loadMessages = useCallback(/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee2() {
|
|
162
|
-
var _yield$maia$Chats$get, items, nextItem, agentDeleted, agentNoPermission, hasAgentAccess, hasAgentPermission, projectIdMessage, projectNameFromSession, projectDeleted, clientIdFromSession, clientNameFromSession, taskIdFromSession, taskNameFromSession, agentInList, contextProjectId, itemsToSet, tab, tabSegment, _t;
|
|
162
|
+
var _yield$maia$Chats$get, items, nextItem, agentDeleted, agentNoPermission, hasAgentAccess, hasAgentPermission, agentTypeFromSession, agentEntityFromSession, projectIdMessage, projectNameFromSession, projectDeleted, clientIdFromSession, clientNameFromSession, taskIdFromSession, taskNameFromSession, agentInList, contextProjectId, itemsToSet, tab, tabSegment, _t;
|
|
163
163
|
return _regeneratorRuntime.wrap(function (_context2) {
|
|
164
164
|
while (1) switch (_context2.prev = _context2.next) {
|
|
165
165
|
case 0:
|
|
@@ -182,6 +182,8 @@ export var useChatMessages = function useChatMessages(_ref) {
|
|
|
182
182
|
agentNoPermission = _yield$maia$Chats$get.agentNoPermission;
|
|
183
183
|
hasAgentAccess = _yield$maia$Chats$get.hasAgentAccess;
|
|
184
184
|
hasAgentPermission = _yield$maia$Chats$get.hasAgentPermission;
|
|
185
|
+
agentTypeFromSession = _yield$maia$Chats$get.agentType;
|
|
186
|
+
agentEntityFromSession = _yield$maia$Chats$get.agentEntity;
|
|
185
187
|
projectIdMessage = _yield$maia$Chats$get.projectId;
|
|
186
188
|
projectNameFromSession = _yield$maia$Chats$get.projectName;
|
|
187
189
|
projectDeleted = _yield$maia$Chats$get.projectDeleted;
|
|
@@ -189,6 +191,17 @@ export var useChatMessages = function useChatMessages(_ref) {
|
|
|
189
191
|
clientNameFromSession = _yield$maia$Chats$get.clientName;
|
|
190
192
|
taskIdFromSession = _yield$maia$Chats$get.taskId;
|
|
191
193
|
taskNameFromSession = _yield$maia$Chats$get.taskName;
|
|
194
|
+
console.info('[useChatMessages] loadMessages result:', {
|
|
195
|
+
chatId: chatId,
|
|
196
|
+
agentNoPermission: agentNoPermission,
|
|
197
|
+
agentDeleted: !!agentDeleted,
|
|
198
|
+
hasAgentAccess: hasAgentAccess,
|
|
199
|
+
hasAgentPermission: hasAgentPermission,
|
|
200
|
+
userPermissionsView: userPermissions === null || userPermissions === void 0 ? void 0 : userPermissions.view,
|
|
201
|
+
agentInAgentsList: agentNoPermission ? !!agents.find(function (a) {
|
|
202
|
+
return a.id === agentNoPermission.id;
|
|
203
|
+
}) : null
|
|
204
|
+
});
|
|
192
205
|
if (agentDeleted) {
|
|
193
206
|
selectAgent(_objectSpread({
|
|
194
207
|
id: agentDeleted.id,
|
|
@@ -245,6 +258,7 @@ export var useChatMessages = function useChatMessages(_ref) {
|
|
|
245
258
|
if (agentNoPermission && !agentDeleted) {
|
|
246
259
|
if (!hasAgentAccess) {
|
|
247
260
|
// Caso 1: No tiene acceso al agente
|
|
261
|
+
console.info('[useChatMessages] BRANCH: has_not_access — hasAgentAccess:', hasAgentAccess);
|
|
248
262
|
selectAgent(_objectSpread(_objectSpread({
|
|
249
263
|
id: agentNoPermission.id,
|
|
250
264
|
name: agentNoPermission.name,
|
|
@@ -260,6 +274,7 @@ export var useChatMessages = function useChatMessages(_ref) {
|
|
|
260
274
|
} : {}));
|
|
261
275
|
} else if (!hasAgentPermission) {
|
|
262
276
|
// Caso 2: No tiene permisos para visualizar/interactuar con el agente
|
|
277
|
+
console.info('[useChatMessages] BRANCH: has_not_permissions — hasAgentPermission:', hasAgentPermission);
|
|
263
278
|
selectAgent(_objectSpread(_objectSpread({
|
|
264
279
|
id: agentNoPermission.id,
|
|
265
280
|
name: agentNoPermission.name,
|
|
@@ -299,6 +314,22 @@ export var useChatMessages = function useChatMessages(_ref) {
|
|
|
299
314
|
taskNameFromSession: taskNameFromSession
|
|
300
315
|
});
|
|
301
316
|
case 2:
|
|
317
|
+
// Metadata de la session (agent_type / agent_entity + contexto) para el cartel de
|
|
318
|
+
// "continuar en un chat nuevo" del footer cuando se abre una conversación de un clone legacy.
|
|
319
|
+
document.dispatchEvent(new CustomEvent('maia-chat-session-meta', {
|
|
320
|
+
detail: {
|
|
321
|
+
chatId: chatId,
|
|
322
|
+
agentType: agentTypeFromSession,
|
|
323
|
+
agentEntity: agentEntityFromSession,
|
|
324
|
+
projectId: projectIdMessage,
|
|
325
|
+
projectName: projectNameFromSession,
|
|
326
|
+
clientId: clientIdFromSession,
|
|
327
|
+
clientName: clientNameFromSession,
|
|
328
|
+
taskId: taskIdFromSession,
|
|
329
|
+
taskName: taskNameFromSession
|
|
330
|
+
}
|
|
331
|
+
}));
|
|
332
|
+
|
|
302
333
|
// Si hay proyecto en la conversación, reescribir URLs de tareas con el tab del usuario (me)
|
|
303
334
|
contextProjectId = projectIdMessage ? parseInt(String(projectIdMessage), 10) : null;
|
|
304
335
|
itemsToSet = items;
|
|
@@ -535,4 +566,4 @@ export var useChatMessages = function useChatMessages(_ref) {
|
|
|
535
566
|
handleScroll: handleScroll
|
|
536
567
|
};
|
|
537
568
|
};
|
|
538
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1c2VDYWxsYmFjayIsInVzZVN0YXRlIiwidXNlUmVmIiwidXNlRWZmZWN0IiwidXNlUHJvamVjdHMiLCJidWlsZENvbnRleHRNZXNzYWdlIiwibWFpYSIsInVzZUdsb2JhbENvbnRleHQiLCJ1c2VUIiwidXNlVXNlciIsInVzZVRhYlRhc2tEZWZhdWx0IiwiVEFTS19VUkxfUkVHRVhfUEFUVEVSTiIsIm1hcENPUkxhbmciLCJmb3JtYXRRdWlja0FjdGlvbk1lc3NhZ2VGb3JEaXNwbGF5IiwicmV3cml0ZVRhc2tVcmxzSW5Db250ZW50IiwiY29udGVudCIsInRhYlNlZ21lbnQiLCJ0YXNrVXJsUmVnZXgiLCJSZWdFeHAiLCJyZXBsYWNlIiwidXJsIiwidXNlQ2hhdE1lc3NhZ2VzIiwiX3JlZiIsIl91c2VyJHBlcm1pc3Npb25zIiwib25FcnJvciIsImNoYXRJZCIsImN1cnJlbnRVc2VyIiwidXNlckluaXRpYWxNZXNzYWdlIiwiX3JlZiRhZ2VudHMiLCJhZ2VudHMiLCJfdXNlVCIsInQiLCJpMThuIiwidXNlciIsInVzZXJQZXJtaXNzaW9ucyIsInBlcm1pc3Npb25zIiwiYWlfYWdlbnRzIiwiX3VzZVN0YXRlIiwiX3VzZVN0YXRlMiIsIl9zbGljZWRUb0FycmF5IiwibG9hZGluZ01lc3NhZ2VzIiwic2V0TG9hZGluZ01lc3NhZ2VzIiwiX3VzZVN0YXRlMyIsIl9vYmplY3RTcHJlYWQiLCJpZCIsImRhdGUiLCJEYXRlIiwibWVzc2FnZSIsImZ1YUlkIiwic2NJZCIsImF0dGFjaG1lbnRzIiwibWVudGlvbnMiLCJjb250ZXh0TWVzc2FnZSIsIl91c2VTdGF0ZTQiLCJtZXNzYWdlcyIsInNldE1lc3NhZ2VzIiwiX3VzZVByb2plY3RzIiwiZmV0Y2hQcm9qZWN0cyIsIl91c2VHbG9iYWxDb250ZXh0Iiwic2VsZWN0QWdlbnQiLCJzZXRDaGlwc1Byb2plY3QiLCJzZXRQcm9qZWN0Iiwic2V0Q2xpZW50Iiwic2V0VGFzayIsInByb2plY3QiLCJfdXNlVGFiVGFza0RlZmF1bHQiLCJnZXRUYWJUYXNrRGVmYXVsdCIsInRhYlRhc2tEZWZhdWx0IiwicmVmZXRjaFRhYlRhc2tEZWZhdWx0IiwiX3VzZVN0YXRlNSIsIl91c2VTdGF0ZTYiLCJpc0xvYWRpbmdNb3JlTWVzc2FnZXMiLCJzZXRJc0xvYWRpbmdNb3JlTWVzc2FnZXMiLCJfdXNlU3RhdGU3IiwiX3VzZVN0YXRlOCIsImxhc3RFdmFsdWF0ZWRLZXkiLCJzZXRMYXN0RXZhbHVhdGVkS2V5IiwiaXNMb2FkaW5nUmVmIiwiaW5pdGlhbExvYWREb25lIiwicHJldmlvdXNDaGF0SWQiLCJzZXRDb252ZXJzYXRpb25Db250ZXh0RnJvbU1ldGFkYXRhIiwiX3JlZjMiLCJfYXN5bmNUb0dlbmVyYXRvciIsIl9yZWdlbmVyYXRvclJ1bnRpbWUiLCJtYXJrIiwiX2NhbGxlZSIsIl9yZWYyIiwicHJvamVjdElkTWVzc2FnZSIsInByb2plY3ROYW1lRnJvbVNlc3Npb24iLCJjbGllbnRJZEZyb21TZXNzaW9uIiwiY2xpZW50TmFtZUZyb21TZXNzaW9uIiwidGFza0lkRnJvbVNlc3Npb24iLCJ0YXNrTmFtZUZyb21TZXNzaW9uIiwicHJvamVjdHMiLCJoYXNNdWx0aUFnZW50c0FjY2VzcyIsInByb2plY3RJZE51bSIsImZvdW5kUHJvamVjdCIsIl9mb3VuZFByb2plY3QkY2xpZW50Iiwid3JhcCIsIl9jb250ZXh0IiwicHJldiIsIm5leHQiLCJuYW1lIiwiTnVtYmVyIiwiYWJydXB0Iiwic2VudCIsIndpbmRvdyIsIk1BSUFfQ0hBVF9BSV9GRUFUVVJFX0FDQ0VTU19NVUxUSV9BR0VOVFMiLCJmaW5kIiwicCIsInByb2plY3ROYW1lIiwiY2xpZW50TmFtZSIsImNsaWVudCIsInByb2plY3RJZCIsIlN0cmluZyIsInN0b3AiLCJfeCIsImFwcGx5IiwiYXJndW1lbnRzIiwibG9hZE1lc3NhZ2VzIiwiX2NhbGxlZTIiLCJfeWllbGQkbWFpYSRDaGF0cyRnZXQiLCJpdGVtcyIsIm5leHRJdGVtIiwiYWdlbnREZWxldGVkIiwiYWdlbnROb1Blcm1pc3Npb24iLCJoYXNBZ2VudEFjY2VzcyIsImhhc0FnZW50UGVybWlzc2lvbiIsInByb2plY3REZWxldGVkIiwiYWdlbnRJbkxpc3QiLCJjb250ZXh0UHJvamVjdElkIiwiaXRlbXNUb1NldCIsInRhYiIsIl90IiwiX2NvbnRleHQyIiwiY3VycmVudCIsIkNoYXRzIiwiZ2V0Q2hhdE1lc3NhZ2VzIiwib2Zmc2V0IiwiY2FuY2VsbGVkVGV4dCIsImxhbmciLCJsYW5ndWFnZSIsImNsaWVudElkIiwidGFza0lkIiwidGFza05hbWUiLCJlbW9qaSIsInR5cGUiLCJpc19kZWxldGVkIiwiZGVsZXRlZF9hdCIsImRlbGV0ZWRBdCIsImNvbm5lY3RvcnMiLCJ2aWV3IiwiYWdlbnQiLCJpc19mcm9tX2NvbnZlcnNhdGlvbiIsInByb2plY3RfZGVsZXRlZCIsImEiLCJ1bmRlZmluZWQiLCJoYXNfbm90X2FjY2VzcyIsImhhc19ub3RfcGVybWlzc2lvbnMiLCJwYXJzZUludCIsImNvbmNhdCIsIm1hcCIsIml0ZW0iLCJmaW5pc2giLCJsb2FkTW9yZU1lc3NhZ2VzIiwiX3JlZjUiLCJfY2FsbGVlMyIsImNvbnRhaW5lciIsIm9sZFNjcm9sbEhlaWdodCIsIm9sZFNjcm9sbFRvcCIsIl95aWVsZCRtYWlhJENoYXRzJGdldDIiLCJpdGVtc1RvTWVyZ2UiLCJuZXdNZXNzYWdlcyIsIl90MiIsIl9jb250ZXh0MyIsInNjcm9sbEhlaWdodCIsInNjcm9sbFRvcCIsIl90b0NvbnN1bWFibGVBcnJheSIsInNsaWNlIiwicmVxdWVzdEFuaW1hdGlvbkZyYW1lIiwiY29udGFpbmVyUmVmIiwibmV3U2Nyb2xsSGVpZ2h0IiwiaGVpZ2h0RGlmZmVyZW5jZSIsIl94MiIsImhhbmRsZVNjcm9sbCIsImNsaWVudEhlaWdodCIsInNjcm9sbFBlcmNlbnRhZ2UiLCJkaWRSZXdyaXRlUmVmIiwibGVuZ3RoIiwibmVlZHNSZXdyaXRlIiwic29tZSIsIm1zZyIsIm1hdGNoZXMiLCJtYXRjaCIsImVuZHNXaXRoIiwiaW5jbHVkZXMiLCJyZXdyaXR0ZW4iLCJhZGRNZXNzYWdlIiwiZXhpc3RpbmdNZXNzYWdlSW5kZXgiLCJmaW5kSW5kZXgiLCJyZW1vdmVNZXNzYWdlIiwibWVzc2FnZUlkIiwiZmlsdGVyIiwiaGFzTW9yZU1lc3NhZ2VzIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2hvb2tzL3VzZUNoYXRNZXNzYWdlcy91c2VDaGF0TWVzc2FnZXMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L2luZGVudCAqL1xuaW1wb3J0IHsgdXNlQ2FsbGJhY2ssIHVzZVN0YXRlLCB1c2VSZWYsIHVzZUVmZmVjdCB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgdXNlUHJvamVjdHMgfSBmcm9tICcuLi91c2VQcm9qZWN0cydcbmltcG9ydCB7IENoYXRNZXNzYWdlIH0gZnJvbSAnLi4vLi4vdHlwZXMvQ2hhdCdcbmltcG9ydCB7IGJ1aWxkQ29udGV4dE1lc3NhZ2UgfSBmcm9tICcuLi8uLi90eXBlcy9jb250ZXh0TWVudGlvbidcbmltcG9ydCBtYWlhIGZyb20gJy4uLy4uL3NlcnZpY2VzL21haWEnXG5pbXBvcnQgeyBVc2VDaGF0TWVzc2FnZXNQcm9wcyB9IGZyb20gJy4vdXNlQ2hhdE1lc3NhZ2VzLmludGVyZmFjZSdcbmltcG9ydCB7IHVzZUdsb2JhbENvbnRleHQgfSBmcm9tICcuLi8uLi9jb250ZXh0L2dsb2JhbC1jb250ZXh0J1xuaW1wb3J0IHsgdXNlVCB9IGZyb20gJy4uL3VzZVQnXG5pbXBvcnQgeyB1c2VVc2VyIH0gZnJvbSAnLi4vLi4vY29udGV4dC9jb3ItdXNlcidcbmltcG9ydCB7IHVzZVRhYlRhc2tEZWZhdWx0IH0gZnJvbSAnLi4vdXNlVGFiVGFza0RlZmF1bHQnXG5pbXBvcnQgeyBUQVNLX1VSTF9SRUdFWF9QQVRURVJOIH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzL3Rhc2tVcmxzJ1xuaW1wb3J0IHsgbWFwQ09STGFuZyB9IGZyb20gJy4uLy4uL2xhbmcvdXRpbHMnXG5pbXBvcnQgeyBmb3JtYXRRdWlja0FjdGlvbk1lc3NhZ2VGb3JEaXNwbGF5IH0gZnJvbSAnLi4vLi4vdXRpbHMvZm9ybWF0UXVpY2tBY3Rpb25NZXNzYWdlJ1xuXG5jb25zdCByZXdyaXRlVGFza1VybHNJbkNvbnRlbnQgPSAoY29udGVudDogc3RyaW5nLCB0YWJTZWdtZW50OiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xuICBjb25zdCB0YXNrVXJsUmVnZXggPSBuZXcgUmVnRXhwKFRBU0tfVVJMX1JFR0VYX1BBVFRFUk4sICdnJylcbiAgcmV0dXJuIGNvbnRlbnQucmVwbGFjZSh0YXNrVXJsUmVnZXgsIHVybCA9PlxuICAgIHVybC5yZXBsYWNlKC9cXC8oZGV0YWlsfG1lc3NhZ2V8bWVzc2FnZXN8ZmlsZXN8aGlzdG9yeXxob3VycykoPz0kfFxcPykvLCB0YWJTZWdtZW50KVxuICApXG59XG5cbmV4cG9ydCBjb25zdCB1c2VDaGF0TWVzc2FnZXMgPSAoe1xuICBvbkVycm9yLFxuICBjaGF0SWQsXG4gIGN1cnJlbnRVc2VyLFxuICB1c2VySW5pdGlhbE1lc3NhZ2UsXG4gIGFnZW50cyA9IFtdLFxufTogVXNlQ2hhdE1lc3NhZ2VzUHJvcHMpID0+IHtcbiAgY29uc3QgeyB0LCBpMThuIH0gPSB1c2VUKClcbiAgY29uc3QgdXNlciA9IHVzZVVzZXIoKVxuICBjb25zdCB1c2VyUGVybWlzc2lvbnMgPSB1c2VyPy5wZXJtaXNzaW9ucz8uYWlfYWdlbnRzXG4gIGNvbnN0IFtsb2FkaW5nTWVzc2FnZXMsIHNldExvYWRpbmdNZXNzYWdlc10gPSB1c2VTdGF0ZShmYWxzZSlcbiAgY29uc3QgW21lc3NhZ2VzLCBzZXRNZXNzYWdlc10gPSB1c2VTdGF0ZTxDaGF0TWVzc2FnZVtdPihcbiAgICB1c2VySW5pdGlhbE1lc3NhZ2VcbiAgICAgID8gW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGlkOiAndXNlci1pbml0aWFsLW1lc3NhZ2UnLFxuICAgICAgICAgICAgZGF0ZTogbmV3IERhdGUoKSxcbiAgICAgICAgICAgIHVzZXI6IGN1cnJlbnRVc2VyLFxuICAgICAgICAgICAgbWVzc2FnZTogZm9ybWF0UXVpY2tBY3Rpb25NZXNzYWdlRm9yRGlzcGxheSh1c2VySW5pdGlhbE1lc3NhZ2UubWVzc2FnZSwge1xuICAgICAgICAgICAgICBmdWFJZDogdXNlckluaXRpYWxNZXNzYWdlLmZ1YUlkLFxuICAgICAgICAgICAgICBzY0lkOiB1c2VySW5pdGlhbE1lc3NhZ2Uuc2NJZCxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgLi4uKHVzZXJJbml0aWFsTWVzc2FnZS5hdHRhY2htZW50cyA/IHsgYXR0YWNobWVudHM6IHVzZXJJbml0aWFsTWVzc2FnZS5hdHRhY2htZW50cyB9IDoge30pLFxuICAgICAgICAgICAgLi4uKGJ1aWxkQ29udGV4dE1lc3NhZ2UodXNlckluaXRpYWxNZXNzYWdlLm1lbnRpb25zKVxuICAgICAgICAgICAgICA/IHsgY29udGV4dE1lc3NhZ2U6IGJ1aWxkQ29udGV4dE1lc3NhZ2UodXNlckluaXRpYWxNZXNzYWdlLm1lbnRpb25zKSB9XG4gICAgICAgICAgICAgIDoge30pLFxuICAgICAgICAgIH0sXG4gICAgICAgIF1cbiAgICAgIDogW11cbiAgKVxuICBjb25zdCB7IGZldGNoUHJvamVjdHMgfSA9IHVzZVByb2plY3RzKClcbiAgY29uc3QgeyBzZWxlY3RBZ2VudCwgc2V0Q2hpcHNQcm9qZWN0LCBzZXRQcm9qZWN0LCBzZXRDbGllbnQsIHNldFRhc2ssIHByb2plY3QgfSA9IHVzZUdsb2JhbENvbnRleHQoKVxuICBjb25zdCB7IGdldFRhYlRhc2tEZWZhdWx0LCB0YWJUYXNrRGVmYXVsdCwgcmVmZXRjaFRhYlRhc2tEZWZhdWx0IH0gPSB1c2VUYWJUYXNrRGVmYXVsdCgpXG4gIGNvbnN0IFtpc0xvYWRpbmdNb3JlTWVzc2FnZXMsIHNldElzTG9hZGluZ01vcmVNZXNzYWdlc10gPSB1c2VTdGF0ZShmYWxzZSlcbiAgY29uc3QgW2xhc3RFdmFsdWF0ZWRLZXksIHNldExhc3RFdmFsdWF0ZWRLZXldID0gdXNlU3RhdGU8bnVtYmVyIHwgdW5kZWZpbmVkPigwKVxuICBjb25zdCBpc0xvYWRpbmdSZWYgPSB1c2VSZWYoZmFsc2UpXG4gIGNvbnN0IGluaXRpYWxMb2FkRG9uZSA9IHVzZVJlZihmYWxzZSlcbiAgY29uc3QgcHJldmlvdXNDaGF0SWQgPSB1c2VSZWYoY2hhdElkKVxuXG4gIGNvbnN0IHNldENvbnZlcnNhdGlvbkNvbnRleHRGcm9tTWV0YWRhdGEgPSB1c2VDYWxsYmFjayhcbiAgICBhc3luYyAoe1xuICAgICAgcHJvamVjdElkTWVzc2FnZSxcbiAgICAgIHByb2plY3ROYW1lRnJvbVNlc3Npb24sXG4gICAgICBjbGllbnRJZEZyb21TZXNzaW9uLFxuICAgICAgY2xpZW50TmFtZUZyb21TZXNzaW9uLFxuICAgICAgdGFza0lkRnJvbVNlc3Npb24sXG4gICAgICB0YXNrTmFtZUZyb21TZXNzaW9uLFxuICAgIH06IHtcbiAgICAgIHByb2plY3RJZE1lc3NhZ2U6IHN0cmluZyB8IG51bWJlciB8IG51bGwgfCB1bmRlZmluZWRcbiAgICAgIHByb2plY3ROYW1lRnJvbVNlc3Npb246IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWRcbiAgICAgIGNsaWVudElkRnJvbVNlc3Npb246IHN0cmluZyB8IG51bWJlciB8IG51bGwgfCB1bmRlZmluZWRcbiAgICAgIGNsaWVudE5hbWVGcm9tU2Vzc2lvbjogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZFxuICAgICAgdGFza0lkRnJvbVNlc3Npb246IHN0cmluZyB8IG51bWJlciB8IG51bGwgfCB1bmRlZmluZWRcbiAgICAgIHRhc2tOYW1lRnJvbVNlc3Npb246IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWRcbiAgICB9KSA9PiB7XG4gICAgICAvLyBUYXJlYSBkZSBsYSBjb252ZXJzYWNpw7NuOiBzZSBkZXJpdmEgZGUgbGEgbWV0YWRhdGEgZGUgbGEgc2Vzc2lvbiBwYXJhIG1vc3RyYXIgZWwgY2hpcFxuICAgICAgLy8gZGUgbGEgdGFyZWEgKHkgcmVlbnZpYXIgbGEgbWV0YWRhdGEgZW4gY2FkYSBtZW5zYWplKSBzaW4gaW1wb3J0YXIgZGVzZGUgZMOzbmRlIHNlIGFicmEuXG4gICAgICBpZiAodGFza0lkRnJvbVNlc3Npb24gIT0gbnVsbCAmJiB0YXNrTmFtZUZyb21TZXNzaW9uKSB7XG4gICAgICAgIHNldFRhc2soeyBpZDogdGFza0lkRnJvbVNlc3Npb24sIG5hbWU6IHRhc2tOYW1lRnJvbVNlc3Npb24gfSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNldFRhc2sobnVsbClcbiAgICAgIH1cblxuICAgICAgLy8gQ29udmVyc2FjacOzbiBjb24gY2xpZW50X21ldGFkYXRhOiBzZXRlYXIgY2xpZW50ZSB5IGxpbXBpYXIgcHJveWVjdG9cbiAgICAgIGlmIChjbGllbnRJZEZyb21TZXNzaW9uICE9IG51bGwgJiYgY2xpZW50TmFtZUZyb21TZXNzaW9uKSB7XG4gICAgICAgIHNldENsaWVudCh7IGlkOiBOdW1iZXIoY2xpZW50SWRGcm9tU2Vzc2lvbiksIG5hbWU6IGNsaWVudE5hbWVGcm9tU2Vzc2lvbiB9KVxuICAgICAgICBzZXRDaGlwc1Byb2plY3QobnVsbClcbiAgICAgICAgc2V0UHJvamVjdChudWxsKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgY29uc3QgcHJvamVjdHMgPSBhd2FpdCBmZXRjaFByb2plY3RzKHByb2plY3RJZE1lc3NhZ2UpXG4gICAgICBjb25zdCBoYXNNdWx0aUFnZW50c0FjY2VzcyA9ICEhd2luZG93Lk1BSUFfQ0hBVF9BSV9GRUFUVVJFX0FDQ0VTU19NVUxUSV9BR0VOVFNcblxuICAgICAgaWYgKHByb2plY3RJZE1lc3NhZ2UgJiYgaGFzTXVsdGlBZ2VudHNBY2Nlc3MpIHtcbiAgICAgICAgY29uc3QgcHJvamVjdElkTnVtID0gTnVtYmVyKHByb2plY3RJZE1lc3NhZ2UpXG4gICAgICAgIGNvbnN0IGZvdW5kUHJvamVjdCA9IHByb2plY3RzPy5maW5kKHAgPT4gTnVtYmVyKHAuaWQpID09PSBwcm9qZWN0SWROdW0pXG5cbiAgICAgICAgaWYgKGZvdW5kUHJvamVjdCkge1xuICAgICAgICAgIHNldENoaXBzUHJvamVjdCh7XG4gICAgICAgICAgICBwcm9qZWN0TmFtZTogZm91bmRQcm9qZWN0Lm5hbWUsXG4gICAgICAgICAgICBjbGllbnROYW1lOiBmb3VuZFByb2plY3QuY2xpZW50Py5uYW1lIHx8ICcnLFxuICAgICAgICAgICAgcHJvamVjdElkOiBTdHJpbmcoZm91bmRQcm9qZWN0LmlkKSxcbiAgICAgICAgICB9KVxuICAgICAgICAgIHNldFByb2plY3QoZm91bmRQcm9qZWN0KVxuICAgICAgICB9IGVsc2UgaWYgKHByb2plY3ROYW1lRnJvbVNlc3Npb24pIHtcbiAgICAgICAgICBzZXRDaGlwc1Byb2plY3Qoe1xuICAgICAgICAgICAgcHJvamVjdE5hbWU6IHByb2plY3ROYW1lRnJvbVNlc3Npb24sXG4gICAgICAgICAgICBjbGllbnROYW1lOiAnJyxcbiAgICAgICAgICAgIHByb2plY3RJZDogU3RyaW5nKHByb2plY3RJZE1lc3NhZ2UpLFxuICAgICAgICAgIH0pXG4gICAgICAgICAgc2V0UHJvamVjdCh7IGlkOiBwcm9qZWN0SWROdW0sIG5hbWU6IHByb2plY3ROYW1lRnJvbVNlc3Npb24gfSlcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzZXRDaGlwc1Byb2plY3QobnVsbClcbiAgICAgICAgICBzZXRQcm9qZWN0KG51bGwpXG4gICAgICAgIH1cblxuICAgICAgICBzZXRDbGllbnQ/LihudWxsKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2V0Q2hpcHNQcm9qZWN0KG51bGwpXG4gICAgICAgIHNldFByb2plY3QobnVsbClcbiAgICAgICAgc2V0Q2xpZW50Py4obnVsbClcbiAgICAgIH1cbiAgICB9LFxuICAgIFtmZXRjaFByb2plY3RzLCBzZXRDbGllbnQsIHNldENoaXBzUHJvamVjdCwgc2V0UHJvamVjdCwgc2V0VGFza11cbiAgKVxuXG4gIGNvbnN0IGxvYWRNZXNzYWdlcyA9IHVzZUNhbGxiYWNrKGFzeW5jICgpID0+IHtcbiAgICB0cnkge1xuICAgICAgc2V0TG9hZGluZ01lc3NhZ2VzKHRydWUpXG4gICAgICBpbml0aWFsTG9hZERvbmUuY3VycmVudCA9IGZhbHNlXG4gICAgICBjb25zdCB7XG4gICAgICAgIGl0ZW1zLFxuICAgICAgICBuZXh0SXRlbSxcbiAgICAgICAgYWdlbnREZWxldGVkLFxuICAgICAgICBhZ2VudE5vUGVybWlzc2lvbixcbiAgICAgICAgaGFzQWdlbnRBY2Nlc3MsXG4gICAgICAgIGhhc0FnZW50UGVybWlzc2lvbixcbiAgICAgICAgcHJvamVjdElkOiBwcm9qZWN0SWRNZXNzYWdlLFxuICAgICAgICBwcm9qZWN0TmFtZTogcHJvamVjdE5hbWVGcm9tU2Vzc2lvbixcbiAgICAgICAgcHJvamVjdERlbGV0ZWQsXG4gICAgICAgIGNsaWVudElkOiBjbGllbnRJZEZyb21TZXNzaW9uLFxuICAgICAgICBjbGllbnROYW1lOiBjbGllbnROYW1lRnJvbVNlc3Npb24sXG4gICAgICAgIHRhc2tJZDogdGFza0lkRnJvbVNlc3Npb24sXG4gICAgICAgIHRhc2tOYW1lOiB0YXNrTmFtZUZyb21TZXNzaW9uLFxuICAgICAgfSA9IGF3YWl0IG1haWEuQ2hhdHMuZ2V0Q2hhdE1lc3NhZ2VzKHtcbiAgICAgICAgY2hhdElkLFxuICAgICAgICBjdXJyZW50VXNlcixcbiAgICAgICAgb2Zmc2V0OiBsYXN0RXZhbHVhdGVkS2V5LFxuICAgICAgICBjYW5jZWxsZWRUZXh0OiB0KCdjaGF0LmNhbmNlbGxlZCcpLFxuICAgICAgICBsYW5nOiBtYXBDT1JMYW5nKGkxOG4ubGFuZ3VhZ2UpLFxuICAgICAgfSlcbiAgICAgIGlmIChhZ2VudERlbGV0ZWQpIHtcbiAgICAgICAgc2VsZWN0QWdlbnQoe1xuICAgICAgICAgIGlkOiBhZ2VudERlbGV0ZWQuaWQsXG4gICAgICAgICAgbmFtZTogYWdlbnREZWxldGVkLm5hbWUsXG4gICAgICAgICAgZW1vamk6IGFnZW50RGVsZXRlZC5lbW9qaSxcbiAgICAgICAgICB0eXBlOiAnY3VzdG9tJyxcbiAgICAgICAgICBpc19kZWxldGVkOiB0cnVlLFxuICAgICAgICAgIGRlbGV0ZWRfYXQ6IGFnZW50RGVsZXRlZC5kZWxldGVkQXQsXG4gICAgICAgICAgLi4uKGFnZW50Tm9QZXJtaXNzaW9uPy5jb25uZWN0b3JzID8geyBjb25uZWN0b3JzOiBhZ2VudE5vUGVybWlzc2lvbi5jb25uZWN0b3JzIH0gOiB7fSksXG4gICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIC8vIFNpIGVsIGFnZW50ZSBubyBlc3TDoSBlbiBsYSBsaXN0YSBwZXJvIHRpZW5lIHBlcm1pc29zLCBhY2Nlc28geSBubyBlc3TDoSBlbGltaW5hZG8sIHNldGVhcmxvIG5vcm1hbG1lbnRlXG4gICAgICAvLyBFeGNsdWlyIGFnZW50ZXMgbm8tY3VzdG9tIHBhcmEgdXN1YXJpb3MgY29uIHJvbGVzIGRlc2hhYmlsaXRhZG9zXG4gICAgICBpZiAoXG4gICAgICAgIGFnZW50Tm9QZXJtaXNzaW9uICYmXG4gICAgICAgICFhZ2VudERlbGV0ZWQgJiZcbiAgICAgICAgdXNlclBlcm1pc3Npb25zPy52aWV3ICYmXG4gICAgICAgIGhhc0FnZW50QWNjZXNzICYmXG4gICAgICAgIGhhc0FnZW50UGVybWlzc2lvbiAmJlxuICAgICAgICAhYWdlbnRzLmZpbmQoYWdlbnQgPT4gYWdlbnQuaWQgPT09IGFnZW50Tm9QZXJtaXNzaW9uLmlkKVxuICAgICAgKSB7XG4gICAgICAgIHNlbGVjdEFnZW50KHtcbiAgICAgICAgICBpZDogYWdlbnROb1Blcm1pc3Npb24uaWQsXG4gICAgICAgICAgbmFtZTogYWdlbnROb1Blcm1pc3Npb24ubmFtZSxcbiAgICAgICAgICBlbW9qaTogYWdlbnROb1Blcm1pc3Npb24uZW1vamksXG4gICAgICAgICAgdHlwZTogYWdlbnROb1Blcm1pc3Npb24udHlwZSBhcyAncG0nIHwgJ2N1c3RvbScgfCAnY2xvbmUnLFxuICAgICAgICAgIGlzX2Zyb21fY29udmVyc2F0aW9uOiB0cnVlLFxuICAgICAgICAgIC4uLihhZ2VudE5vUGVybWlzc2lvbi5jb25uZWN0b3JzID8geyBjb25uZWN0b3JzOiBhZ2VudE5vUGVybWlzc2lvbi5jb25uZWN0b3JzIH0gOiB7fSksXG4gICAgICAgICAgLi4uKHByb2plY3REZWxldGVkID8geyBwcm9qZWN0X2RlbGV0ZWQ6IHsgbmFtZTogcHJvamVjdERlbGV0ZWQubmFtZSB9IH0gOiB7fSksXG4gICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIC8vIFNpIGVsIGFnZW50ZSBlc3TDoSBlbiBsYSBsaXN0YSB5IHRpZW5lIGFjY2Vzby9wZXJtaXNvcywgYWN0dWFsaXphciBwcm9qZWN0X2RlbGV0ZWQgKG8gbGltcGlhcmxvIGFsIGNhbWJpYXIgZGUgY2hhdClcbiAgICAgIGlmIChcbiAgICAgICAgYWdlbnROb1Blcm1pc3Npb24gJiZcbiAgICAgICAgIWFnZW50RGVsZXRlZCAmJlxuICAgICAgICBoYXNBZ2VudEFjY2VzcyAmJlxuICAgICAgICBoYXNBZ2VudFBlcm1pc3Npb24gJiZcbiAgICAgICAgYWdlbnRzLmZpbmQoYSA9PiBhLmlkID09PSBhZ2VudE5vUGVybWlzc2lvbi5pZClcbiAgICAgICkge1xuICAgICAgICBjb25zdCBhZ2VudEluTGlzdCA9IGFnZW50cy5maW5kKGEgPT4gYS5pZCA9PT0gYWdlbnROb1Blcm1pc3Npb24uaWQpXG4gICAgICAgIGlmIChhZ2VudEluTGlzdCkge1xuICAgICAgICAgIHNlbGVjdEFnZW50KHtcbiAgICAgICAgICAgIC4uLmFnZW50SW5MaXN0LFxuICAgICAgICAgICAgLi4uKHByb2plY3REZWxldGVkID8geyBwcm9qZWN0X2RlbGV0ZWQ6IHsgbmFtZTogcHJvamVjdERlbGV0ZWQubmFtZSB9IH0gOiB7IHByb2plY3RfZGVsZXRlZDogdW5kZWZpbmVkIH0pLFxuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gU2kgZWwgYWdlbnRlIG5vIHRpZW5lIGFjY2VzbyBvIHBlcm1pc29zIHNlZ8O6biBsYSByZXNwdWVzdGEgZGUgc2Vzc2lvbnMsIHNlbGVjY2lvbmFybG8gY29uIGVsIGZsYWcgY29ycmVzcG9uZGllbnRlXG4gICAgICAvLyBMYSB2YWxpZGFjacOzbiBhaG9yYSBzZSBiYXNhIGVuIGxhcyBwcm9waWVkYWRlcyBoYXNfYWdlbnRfYWNjZXNzIHkgaGFzX2FnZW50X3Blcm1pc3Npb24gZGUgbGEgcmVzcHVlc3RhXG4gICAgICBpZiAoYWdlbnROb1Blcm1pc3Npb24gJiYgIWFnZW50RGVsZXRlZCkge1xuICAgICAgICBpZiAoIWhhc0FnZW50QWNjZXNzKSB7XG4gICAgICAgICAgLy8gQ2FzbyAxOiBObyB0aWVuZSBhY2Nlc28gYWwgYWdlbnRlXG4gICAgICAgICAgc2VsZWN0QWdlbnQoe1xuICAgICAgICAgICAgaWQ6IGFnZW50Tm9QZXJtaXNzaW9uLmlkLFxuICAgICAgICAgICAgbmFtZTogYWdlbnROb1Blcm1pc3Npb24ubmFtZSxcbiAgICAgICAgICAgIGVtb2ppOiBhZ2VudE5vUGVybWlzc2lvbi5lbW9qaSxcbiAgICAgICAgICAgIHR5cGU6IGFnZW50Tm9QZXJtaXNzaW9uLnR5cGUgYXMgJ3BtJyB8ICdjdXN0b20nIHwgJ2Nsb25lJyxcbiAgICAgICAgICAgIGhhc19ub3RfYWNjZXNzOiB0cnVlLFxuICAgICAgICAgICAgLi4uKGFnZW50Tm9QZXJtaXNzaW9uLmNvbm5lY3RvcnMgPyB7IGNvbm5lY3RvcnM6IGFnZW50Tm9QZXJtaXNzaW9uLmNvbm5lY3RvcnMgfSA6IHt9KSxcbiAgICAgICAgICAgIC4uLihwcm9qZWN0RGVsZXRlZCA/IHsgcHJvamVjdF9kZWxldGVkOiB7IG5hbWU6IHByb2plY3REZWxldGVkLm5hbWUgfSB9IDoge30pLFxuICAgICAgICAgIH0pXG4gICAgICAgIH0gZWxzZSBpZiAoIWhhc0FnZW50UGVybWlzc2lvbikge1xuICAgICAgICAgIC8vIENhc28gMjogTm8gdGllbmUgcGVybWlzb3MgcGFyYSB2aXN1YWxpemFyL2ludGVyYWN0dWFyIGNvbiBlbCBhZ2VudGVcbiAgICAgICAgICBzZWxlY3RBZ2VudCh7XG4gICAgICAgICAgICBpZDogYWdlbnROb1Blcm1pc3Npb24uaWQsXG4gICAgICAgICAgICBuYW1lOiBhZ2VudE5vUGVybWlzc2lvbi5uYW1lLFxuICAgICAgICAgICAgZW1vamk6IGFnZW50Tm9QZXJtaXNzaW9uLmVtb2ppLFxuICAgICAgICAgICAgdHlwZTogYWdlbnROb1Blcm1pc3Npb24udHlwZSBhcyAncG0nIHwgJ2N1c3RvbScgfCAnY2xvbmUnLFxuICAgICAgICAgICAgaGFzX25vdF9wZXJtaXNzaW9uczogdHJ1ZSxcbiAgICAgICAgICAgIC4uLihhZ2VudE5vUGVybWlzc2lvbi5jb25uZWN0b3JzID8geyBjb25uZWN0b3JzOiBhZ2VudE5vUGVybWlzc2lvbi5jb25uZWN0b3JzIH0gOiB7fSksXG4gICAgICAgICAgICAuLi4ocHJvamVjdERlbGV0ZWQgPyB7IHByb2plY3RfZGVsZXRlZDogeyBuYW1lOiBwcm9qZWN0RGVsZXRlZC5uYW1lIH0gfSA6IHt9KSxcbiAgICAgICAgICB9KVxuICAgICAgICB9IGVsc2UgaWYgKHByb2plY3REZWxldGVkKSB7XG4gICAgICAgICAgLy8gQ2FzbyAzOiBFbCBwcm95ZWN0byBkZSBsYSBjb252ZXJzYWNpw7NuIGZ1ZSBlbGltaW5hZG9cbiAgICAgICAgICBzZWxlY3RBZ2VudCh7XG4gICAgICAgICAgICBpZDogYWdlbnROb1Blcm1pc3Npb24uaWQsXG4gICAgICAgICAgICBuYW1lOiBhZ2VudE5vUGVybWlzc2lvbi5uYW1lLFxuICAgICAgICAgICAgZW1vamk6IGFnZW50Tm9QZXJtaXNzaW9uLmVtb2ppLFxuICAgICAgICAgICAgdHlwZTogYWdlbnROb1Blcm1pc3Npb24udHlwZSBhcyAncG0nIHwgJ2N1c3RvbScgfCAnY2xvbmUnLFxuICAgICAgICAgICAgLi4uKGFnZW50Tm9QZXJtaXNzaW9uLmNvbm5lY3RvcnMgPyB7IGNvbm5lY3RvcnM6IGFnZW50Tm9QZXJtaXNzaW9uLmNvbm5lY3RvcnMgfSA6IHt9KSxcbiAgICAgICAgICAgIHByb2plY3RfZGVsZXRlZDogeyBuYW1lOiBwcm9qZWN0RGVsZXRlZC5uYW1lIH0sXG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBhd2FpdCBzZXRDb252ZXJzYXRpb25Db250ZXh0RnJvbU1ldGFkYXRhKHtcbiAgICAgICAgcHJvamVjdElkTWVzc2FnZSxcbiAgICAgICAgcHJvamVjdE5hbWVGcm9tU2Vzc2lvbixcbiAgICAgICAgY2xpZW50SWRGcm9tU2Vzc2lvbixcbiAgICAgICAgY2xpZW50TmFtZUZyb21TZXNzaW9uLFxuICAgICAgICB0YXNrSWRGcm9tU2Vzc2lvbixcbiAgICAgICAgdGFza05hbWVGcm9tU2Vzc2lvbixcbiAgICAgIH0pXG5cbiAgICAgIC8vIFNpIGhheSBwcm95ZWN0byBlbiBsYSBjb252ZXJzYWNpw7NuLCByZWVzY3JpYmlyIFVSTHMgZGUgdGFyZWFzIGNvbiBlbCB0YWIgZGVsIHVzdWFyaW8gKG1lKVxuICAgICAgY29uc3QgY29udGV4dFByb2plY3RJZCA9IHByb2plY3RJZE1lc3NhZ2UgPyBwYXJzZUludChTdHJpbmcocHJvamVjdElkTWVzc2FnZSksIDEwKSA6IG51bGxcbiAgICAgIGxldCBpdGVtc1RvU2V0ID0gaXRlbXNcbiAgICAgIGlmIChjb250ZXh0UHJvamVjdElkKSB7XG4gICAgICAgIGNvbnN0IHRhYiA9IGF3YWl0IGdldFRhYlRhc2tEZWZhdWx0KDEpXG4gICAgICAgIGNvbnN0IHRhYlNlZ21lbnQgPSB0YWIgPyBgLyR7dGFifWAgOiAnL2RldGFpbCdcbiAgICAgICAgaXRlbXNUb1NldCA9IGl0ZW1zLm1hcChpdGVtID0+ICh7XG4gICAgICAgICAgLi4uaXRlbSxcbiAgICAgICAgICBtZXNzYWdlOiByZXdyaXRlVGFza1VybHNJbkNvbnRlbnQoaXRlbS5tZXNzYWdlIHx8ICcnLCB0YWJTZWdtZW50KSxcbiAgICAgICAgfSkpXG4gICAgICB9XG4gICAgICBzZXRNZXNzYWdlcyhpdGVtc1RvU2V0KVxuICAgICAgc2V0TGFzdEV2YWx1YXRlZEtleShOdW1iZXIobmV4dEl0ZW0pKVxuICAgICAgaW5pdGlhbExvYWREb25lLmN1cnJlbnQgPSB0cnVlXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIG9uRXJyb3I/LigpXG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHNldExvYWRpbmdNZXNzYWdlcyhmYWxzZSlcbiAgICB9XG4gIH0sIFtjaGF0SWQsIGN1cnJlbnRVc2VyLCBzZXRDb252ZXJzYXRpb25Db250ZXh0RnJvbU1ldGFkYXRhLCBvbkVycm9yLCBnZXRUYWJUYXNrRGVmYXVsdF0pXG5cbiAgY29uc3QgbG9hZE1vcmVNZXNzYWdlcyA9IHVzZUNhbGxiYWNrKFxuICAgIGFzeW5jIChjb250YWluZXI6IEhUTUxEaXZFbGVtZW50IHwgbnVsbCkgPT4ge1xuICAgICAgaWYgKGlzTG9hZGluZ1JlZi5jdXJyZW50IHx8ICFsYXN0RXZhbHVhdGVkS2V5IHx8ICFjb250YWluZXIpIHJldHVyblxuICAgICAgdHJ5IHtcbiAgICAgICAgaXNMb2FkaW5nUmVmLmN1cnJlbnQgPSB0cnVlXG4gICAgICAgIHNldElzTG9hZGluZ01vcmVNZXNzYWdlcyh0cnVlKVxuXG4gICAgICAgIGNvbnN0IG9sZFNjcm9sbEhlaWdodCA9IGNvbnRhaW5lci5zY3JvbGxIZWlnaHRcbiAgICAgICAgY29uc3Qgb2xkU2Nyb2xsVG9wID0gY29udGFpbmVyLnNjcm9sbFRvcFxuXG4gICAgICAgIGNvbnN0IHtcbiAgICAgICAgICBpdGVtcyxcbiAgICAgICAgICBuZXh0SXRlbSxcbiAgICAgICAgICBwcm9qZWN0SWQ6IHByb2plY3RJZE1lc3NhZ2UsXG4gICAgICAgICAgcHJvamVjdE5hbWU6IHByb2plY3ROYW1lRnJvbVNlc3Npb24sXG4gICAgICAgICAgY2xpZW50SWQ6IGNsaWVudElkRnJvbVNlc3Npb24sXG4gICAgICAgICAgY2xpZW50TmFtZTogY2xpZW50TmFtZUZyb21TZXNzaW9uLFxuICAgICAgICAgIHRhc2tJZDogdGFza0lkRnJvbVNlc3Npb24sXG4gICAgICAgICAgdGFza05hbWU6IHRhc2tOYW1lRnJvbVNlc3Npb24sXG4gICAgICAgIH0gPSBhd2FpdCBtYWlhLkNoYXRzLmdldENoYXRNZXNzYWdlcyh7XG4gICAgICAgICAgY2hhdElkLFxuICAgICAgICAgIGN1cnJlbnRVc2VyLFxuICAgICAgICAgIG9mZnNldDogbGFzdEV2YWx1YXRlZEtleSxcbiAgICAgICAgICBsYW5nOiBtYXBDT1JMYW5nKGkxOG4ubGFuZ3VhZ2UpLFxuICAgICAgICB9KVxuXG4gICAgICAgIGF3YWl0IHNldENvbnZlcnNhdGlvbkNvbnRleHRGcm9tTWV0YWRhdGEoe1xuICAgICAgICAgIHByb2plY3RJZE1lc3NhZ2UsXG4gICAgICAgICAgcHJvamVjdE5hbWVGcm9tU2Vzc2lvbixcbiAgICAgICAgICBjbGllbnRJZEZyb21TZXNzaW9uLFxuICAgICAgICAgIGNsaWVudE5hbWVGcm9tU2Vzc2lvbixcbiAgICAgICAgICB0YXNrSWRGcm9tU2Vzc2lvbixcbiAgICAgICAgICB0YXNrTmFtZUZyb21TZXNzaW9uLFxuICAgICAgICB9KVxuXG4gICAgICAgIC8vIFNpIGhheSBwcm95ZWN0byBlbiBsYSBjb252ZXJzYWNpw7NuLCByZWVzY3JpYmlyIFVSTHMgZGUgdGFyZWFzIGVuIGxvcyBtZW5zYWplcyBjYXJnYWRvc1xuICAgICAgICBjb25zdCBjb250ZXh0UHJvamVjdElkID0gcHJvamVjdElkTWVzc2FnZSA/IHBhcnNlSW50KFN0cmluZyhwcm9qZWN0SWRNZXNzYWdlKSwgMTApIDogbnVsbFxuICAgICAgICBsZXQgaXRlbXNUb01lcmdlID0gaXRlbXNcbiAgICAgICAgaWYgKGNvbnRleHRQcm9qZWN0SWQpIHtcbiAgICAgICAgICBjb25zdCB0YWIgPSBhd2FpdCBnZXRUYWJUYXNrRGVmYXVsdCgxKVxuICAgICAgICAgIGNvbnN0IHRhYlNlZ21lbnQgPSB0YWIgPyBgLyR7dGFifWAgOiAnL2RldGFpbCdcbiAgICAgICAgICBpdGVtc1RvTWVyZ2UgPSBpdGVtcy5tYXAoaXRlbSA9PiAoe1xuICAgICAgICAgICAgLi4uaXRlbSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IHJld3JpdGVUYXNrVXJsc0luQ29udGVudChpdGVtLm1lc3NhZ2UgfHwgJycsIHRhYlNlZ21lbnQpLFxuICAgICAgICAgIH0pKVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG5ld01lc3NhZ2VzID0gWy4uLm1lc3NhZ2VzLnNsaWNlKDAsIDEpLCAuLi5pdGVtc1RvTWVyZ2UsIC4uLm1lc3NhZ2VzLnNsaWNlKDEpXVxuICAgICAgICBzZXRNZXNzYWdlcyhuZXdNZXNzYWdlcylcbiAgICAgICAgc2V0TGFzdEV2YWx1YXRlZEtleShOdW1iZXIobmV4dEl0ZW0pKVxuXG4gICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGNvbnRhaW5lclJlZiA9IGNvbnRhaW5lclxuICAgICAgICAgICAgaWYgKGNvbnRhaW5lclJlZikge1xuICAgICAgICAgICAgICBjb25zdCBuZXdTY3JvbGxIZWlnaHQgPSBjb250YWluZXJSZWYuc2Nyb2xsSGVpZ2h0XG4gICAgICAgICAgICAgIGNvbnN0IGhlaWdodERpZmZlcmVuY2UgPSBuZXdTY3JvbGxIZWlnaHQgLSBvbGRTY3JvbGxIZWlnaHRcbiAgICAgICAgICAgICAgY29udGFpbmVyUmVmLnNjcm9sbFRvcCA9IG9sZFNjcm9sbFRvcCArIGhlaWdodERpZmZlcmVuY2VcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KVxuICAgICAgICB9KVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgb25FcnJvcj8uKClcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIHNldElzTG9hZGluZ01vcmVNZXNzYWdlcyhmYWxzZSlcbiAgICAgICAgaXNMb2FkaW5nUmVmLmN1cnJlbnQgPSBmYWxzZVxuICAgICAgfVxuICAgIH0sXG4gICAgW2NoYXRJZCwgY3VycmVudFVzZXIsIGxhc3RFdmFsdWF0ZWRLZXksIG9uRXJyb3IsIG1lc3NhZ2VzLCBnZXRUYWJUYXNrRGVmYXVsdCwgc2V0Q29udmVyc2F0aW9uQ29udGV4dEZyb21NZXRhZGF0YV1cbiAgKVxuXG4gIGNvbnN0IGhhbmRsZVNjcm9sbCA9IHVzZUNhbGxiYWNrKFxuICAgIChjb250YWluZXI6IEhUTUxEaXZFbGVtZW50IHwgbnVsbCkgPT4ge1xuICAgICAgaWYgKCFjb250YWluZXIgfHwgaXNMb2FkaW5nUmVmLmN1cnJlbnQgfHwgIWluaXRpYWxMb2FkRG9uZS5jdXJyZW50KSByZXR1cm5cblxuICAgICAgY29uc3QgeyBzY3JvbGxUb3AsIHNjcm9sbEhlaWdodCwgY2xpZW50SGVpZ2h0IH0gPSBjb250YWluZXJcbiAgICAgIGNvbnN0IHNjcm9sbFBlcmNlbnRhZ2UgPSBzY3JvbGxIZWlnaHQgLSBjbGllbnRIZWlnaHQgPiAwID8gKHNjcm9sbFRvcCAvIChzY3JvbGxIZWlnaHQgLSBjbGllbnRIZWlnaHQpKSAqIDEwMCA6IDBcblxuICAgICAgaWYgKHNjcm9sbFBlcmNlbnRhZ2UgPCAxMCkge1xuICAgICAgICBsb2FkTW9yZU1lc3NhZ2VzKGNvbnRhaW5lcilcbiAgICAgIH1cbiAgICB9LFxuICAgIFtsb2FkTW9yZU1lc3NhZ2VzXVxuICApXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoY2hhdElkICE9PSBwcmV2aW91c0NoYXRJZC5jdXJyZW50KSB7XG4gICAgICBzZXRNZXNzYWdlcyhcbiAgICAgICAgdXNlckluaXRpYWxNZXNzYWdlXG4gICAgICAgICAgPyBbXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBpZDogJ3VzZXItaW5pdGlhbC1tZXNzYWdlJyxcbiAgICAgICAgICAgICAgICBkYXRlOiBuZXcgRGF0ZSgpLFxuICAgICAgICAgICAgICAgIHVzZXI6IGN1cnJlbnRVc2VyLFxuICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGZvcm1hdFF1aWNrQWN0aW9uTWVzc2FnZUZvckRpc3BsYXkodXNlckluaXRpYWxNZXNzYWdlLm1lc3NhZ2UsIHtcbiAgICAgICAgICAgICAgICAgIGZ1YUlkOiB1c2VySW5pdGlhbE1lc3NhZ2UuZnVhSWQsXG4gICAgICAgICAgICAgICAgICBzY0lkOiB1c2VySW5pdGlhbE1lc3NhZ2Uuc2NJZCxcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAuLi4odXNlckluaXRpYWxNZXNzYWdlLmF0dGFjaG1lbnRzID8geyBhdHRhY2htZW50czogdXNlckluaXRpYWxNZXNzYWdlLmF0dGFjaG1lbnRzIH0gOiB7fSksXG4gICAgICAgICAgICAgICAgLi4uKGJ1aWxkQ29udGV4dE1lc3NhZ2UodXNlckluaXRpYWxNZXNzYWdlLm1lbnRpb25zKVxuICAgICAgICAgICAgICAgICAgPyB7IGNvbnRleHRNZXNzYWdlOiBidWlsZENvbnRleHRNZXNzYWdlKHVzZXJJbml0aWFsTWVzc2FnZS5tZW50aW9ucykgfVxuICAgICAgICAgICAgICAgICAgOiB7fSksXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBdXG4gICAgICAgICAgOiBbXVxuICAgICAgKVxuICAgICAgc2V0TGFzdEV2YWx1YXRlZEtleSgwKVxuICAgICAgaXNMb2FkaW5nUmVmLmN1cnJlbnQgPSBmYWxzZVxuICAgICAgaW5pdGlhbExvYWREb25lLmN1cnJlbnQgPSBmYWxzZVxuICAgICAgcHJldmlvdXNDaGF0SWQuY3VycmVudCA9IGNoYXRJZFxuXG4gICAgICAvLyBMaW1waWFyIGVsIGVzdGFkbyBkZWwgcHJveWVjdG8geSBsYSB0YXJlYSBjdWFuZG8gY2FtYmlhIGRlIGNvbnZlcnNhY2nDs25cbiAgICAgIHNldENoaXBzUHJvamVjdChudWxsKVxuICAgICAgc2V0UHJvamVjdChudWxsKVxuICAgICAgc2V0VGFzayhudWxsKVxuXG4gICAgICAvLyBWb2x2ZXIgYSBlamVjdXRhciBsYSBxdWVyeSBtZSBwYXJhIHRlbmVyIHRhYlRhc2tEZWZhdWx0IGFjdHVhbGl6YWRvIGVuIGxhIG51ZXZhIGNvbnZlcnNhY2nDs25cbiAgICAgIHJlZmV0Y2hUYWJUYXNrRGVmYXVsdCgpXG5cbiAgICAgIGlmICghdXNlckluaXRpYWxNZXNzYWdlKSB7XG4gICAgICAgIGxvYWRNZXNzYWdlcygpXG4gICAgICB9XG4gICAgfVxuICB9LCBbXG4gICAgY2hhdElkLFxuICAgIHVzZXJJbml0aWFsTWVzc2FnZSxcbiAgICBjdXJyZW50VXNlcixcbiAgICBsb2FkTWVzc2FnZXMsXG4gICAgc2V0Q2hpcHNQcm9qZWN0LFxuICAgIHNldFByb2plY3QsXG4gICAgc2V0VGFzayxcbiAgICByZWZldGNoVGFiVGFza0RlZmF1bHQsXG4gIF0pXG5cbiAgLy8gQ3VhbmRvIHRhYlRhc2tEZWZhdWx0IHBhc2EgYSBlc3RhciBkaXNwb25pYmxlIGRlc3B1w6lzIGRlIGNhcmdhciwgcmVlc2NyaWJpciBVUkxzIGRlIHRhcmVhcyBlbiBsb3MgbWVuc2FqZXMgeWEgY2FyZ2Fkb3MuXG4gIC8vIFJlZiBwYXJhIGV2aXRhciBidWNsZTogc2V0TWVzc2FnZXMocmV3cml0dGVuKSBjYW1iaWEgbWVzc2FnZXMgeSByZS1lamVjdXRhIGVsIGVmZWN0bzsgc29sbyByZWVzY3JpYmltb3MgdW5hIHZleiBwb3IgbG90ZS5cbiAgY29uc3QgZGlkUmV3cml0ZVJlZiA9IHVzZVJlZihmYWxzZSlcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoIXRhYlRhc2tEZWZhdWx0IHx8ICFwcm9qZWN0Py5pZCB8fCBtZXNzYWdlcy5sZW5ndGggPT09IDApIHJldHVyblxuICAgIGNvbnN0IHRhc2tVcmxSZWdleCA9IG5ldyBSZWdFeHAoVEFTS19VUkxfUkVHRVhfUEFUVEVSTiwgJ2cnKVxuICAgIGNvbnN0IHRhYlNlZ21lbnQgPSBgLyR7dGFiVGFza0RlZmF1bHR9YFxuICAgIGNvbnN0IG5lZWRzUmV3cml0ZSA9IG1lc3NhZ2VzLnNvbWUobXNnID0+IHtcbiAgICAgIGNvbnN0IGNvbnRlbnQgPSBtc2cubWVzc2FnZSB8fCAnJ1xuICAgICAgY29uc3QgbWF0Y2hlcyA9IGNvbnRlbnQubWF0Y2godGFza1VybFJlZ2V4KVxuICAgICAgaWYgKCFtYXRjaGVzPy5sZW5ndGgpIHJldHVybiBmYWxzZVxuICAgICAgcmV0dXJuIG1hdGNoZXMuc29tZSh1cmwgPT4gIXVybC5lbmRzV2l0aChgLyR7dGFiVGFza0RlZmF1bHR9YCkgJiYgIXVybC5pbmNsdWRlcyhgLyR7dGFiVGFza0RlZmF1bHR9P2ApKVxuICAgIH0pXG4gICAgaWYgKCFuZWVkc1Jld3JpdGUpIHtcbiAgICAgIGRpZFJld3JpdGVSZWYuY3VycmVudCA9IGZhbHNlXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgaWYgKGRpZFJld3JpdGVSZWYuY3VycmVudCkgcmV0dXJuXG4gICAgZGlkUmV3cml0ZVJlZi5jdXJyZW50ID0gdHJ1ZVxuICAgIGNvbnN0IHJld3JpdHRlbiA9IG1lc3NhZ2VzLm1hcChtc2cgPT4gKHtcbiAgICAgIC4uLm1zZyxcbiAgICAgIG1lc3NhZ2U6IHJld3JpdGVUYXNrVXJsc0luQ29udGVudChtc2cubWVzc2FnZSB8fCAnJywgdGFiU2VnbWVudCksXG4gICAgfSkpXG4gICAgc2V0TWVzc2FnZXMocmV3cml0dGVuKVxuICB9LCBbdGFiVGFza0RlZmF1bHQsIHByb2plY3Q/LmlkLCBtZXNzYWdlc10pXG5cbiAgY29uc3QgYWRkTWVzc2FnZSA9IHVzZUNhbGxiYWNrKChtZXNzYWdlOiBDaGF0TWVzc2FnZSkgPT4ge1xuICAgIHNldE1lc3NhZ2VzKHByZXYgPT4ge1xuICAgICAgY29uc3QgZXhpc3RpbmdNZXNzYWdlSW5kZXggPSBwcmV2LmZpbmRJbmRleChtc2cgPT4gbXNnLmlkID09PSBtZXNzYWdlLmlkKVxuXG4gICAgICBpZiAoZXhpc3RpbmdNZXNzYWdlSW5kZXggPj0gMCkge1xuICAgICAgICBjb25zdCBuZXdNZXNzYWdlcyA9IFsuLi5wcmV2XVxuICAgICAgICBuZXdNZXNzYWdlc1tleGlzdGluZ01lc3NhZ2VJbmRleF0gPSBtZXNzYWdlXG4gICAgICAgIHJldHVybiBuZXdNZXNzYWdlc1xuICAgICAgfVxuICAgICAgcmV0dXJuIFsuLi5wcmV2LCBtZXNzYWdlXVxuICAgIH0pXG4gIH0sIFtdKVxuXG4gIGNvbnN0IHJlbW92ZU1lc3NhZ2UgPSB1c2VDYWxsYmFjaygobWVzc2FnZUlkOiBzdHJpbmcpID0+IHtcbiAgICBzZXRNZXNzYWdlcyhwcmV2ID0+IHByZXYuZmlsdGVyKG1zZyA9PiBtc2cuaWQgIT09IG1lc3NhZ2VJZCkpXG4gIH0sIFtdKVxuXG4gIHJldHVybiB7XG4gICAgbG9hZGluZ01lc3NhZ2VzLFxuICAgIG1lc3NhZ2VzLFxuICAgIGhhc01vcmVNZXNzYWdlczogISFsYXN0RXZhbHVhdGVkS2V5LFxuICAgIGlzTG9hZGluZ01vcmVNZXNzYWdlcyxcbiAgICBsb2FkTWVzc2FnZXMsXG4gICAgbG9hZE1vcmVNZXNzYWdlcyxcbiAgICBhZGRNZXNzYWdlLFxuICAgIHJlbW92ZU1lc3NhZ2UsXG4gICAgaGFuZGxlU2Nyb2xsLFxuICB9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBQTtBQUNBLFNBQVNBLFdBQVcsRUFBRUMsUUFBUSxFQUFFQyxNQUFNLEVBQUVDLFNBQVMsUUFBUSxPQUFPO0FBQ2hFLFNBQVNDLFdBQVcsUUFBUSxnQkFBZ0I7QUFFNUMsU0FBU0MsbUJBQW1CLFFBQVEsNEJBQTRCO0FBQ2hFLE9BQU9DLElBQUksTUFBTSxxQkFBcUI7QUFFdEMsU0FBU0MsZ0JBQWdCLFFBQVEsOEJBQThCO0FBQy9ELFNBQVNDLElBQUksUUFBUSxTQUFTO0FBQzlCLFNBQVNDLE9BQU8sUUFBUSx3QkFBd0I7QUFDaEQsU0FBU0MsaUJBQWlCLFFBQVEsc0JBQXNCO0FBQ3hELFNBQVNDLHNCQUFzQixRQUFRLDBCQUEwQjtBQUNqRSxTQUFTQyxVQUFVLFFBQVEsa0JBQWtCO0FBQzdDLFNBQVNDLGtDQUFrQyxRQUFRLHNDQUFzQztBQUV6RixJQUFNQyx3QkFBd0IsR0FBRyxTQUEzQkEsd0JBQXdCQSxDQUFJ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
|
|
569
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1c2VDYWxsYmFjayIsInVzZVN0YXRlIiwidXNlUmVmIiwidXNlRWZmZWN0IiwidXNlUHJvamVjdHMiLCJidWlsZENvbnRleHRNZXNzYWdlIiwibWFpYSIsInVzZUdsb2JhbENvbnRleHQiLCJ1c2VUIiwidXNlVXNlciIsInVzZVRhYlRhc2tEZWZhdWx0IiwiVEFTS19VUkxfUkVHRVhfUEFUVEVSTiIsIm1hcENPUkxhbmciLCJmb3JtYXRRdWlja0FjdGlvbk1lc3NhZ2VGb3JEaXNwbGF5IiwicmV3cml0ZVRhc2tVcmxzSW5Db250ZW50IiwiY29udGVudCIsInRhYlNlZ21lbnQiLCJ0YXNrVXJsUmVnZXgiLCJSZWdFeHAiLCJyZXBsYWNlIiwidXJsIiwidXNlQ2hhdE1lc3NhZ2VzIiwiX3JlZiIsIl91c2VyJHBlcm1pc3Npb25zIiwib25FcnJvciIsImNoYXRJZCIsImN1cnJlbnRVc2VyIiwidXNlckluaXRpYWxNZXNzYWdlIiwiX3JlZiRhZ2VudHMiLCJhZ2VudHMiLCJfdXNlVCIsInQiLCJpMThuIiwidXNlciIsInVzZXJQZXJtaXNzaW9ucyIsInBlcm1pc3Npb25zIiwiYWlfYWdlbnRzIiwiX3VzZVN0YXRlIiwiX3VzZVN0YXRlMiIsIl9zbGljZWRUb0FycmF5IiwibG9hZGluZ01lc3NhZ2VzIiwic2V0TG9hZGluZ01lc3NhZ2VzIiwiX3VzZVN0YXRlMyIsIl9vYmplY3RTcHJlYWQiLCJpZCIsImRhdGUiLCJEYXRlIiwibWVzc2FnZSIsImZ1YUlkIiwic2NJZCIsImF0dGFjaG1lbnRzIiwibWVudGlvbnMiLCJjb250ZXh0TWVzc2FnZSIsIl91c2VTdGF0ZTQiLCJtZXNzYWdlcyIsInNldE1lc3NhZ2VzIiwiX3VzZVByb2plY3RzIiwiZmV0Y2hQcm9qZWN0cyIsIl91c2VHbG9iYWxDb250ZXh0Iiwic2VsZWN0QWdlbnQiLCJzZXRDaGlwc1Byb2plY3QiLCJzZXRQcm9qZWN0Iiwic2V0Q2xpZW50Iiwic2V0VGFzayIsInByb2plY3QiLCJfdXNlVGFiVGFza0RlZmF1bHQiLCJnZXRUYWJUYXNrRGVmYXVsdCIsInRhYlRhc2tEZWZhdWx0IiwicmVmZXRjaFRhYlRhc2tEZWZhdWx0IiwiX3VzZVN0YXRlNSIsIl91c2VTdGF0ZTYiLCJpc0xvYWRpbmdNb3JlTWVzc2FnZXMiLCJzZXRJc0xvYWRpbmdNb3JlTWVzc2FnZXMiLCJfdXNlU3RhdGU3IiwiX3VzZVN0YXRlOCIsImxhc3RFdmFsdWF0ZWRLZXkiLCJzZXRMYXN0RXZhbHVhdGVkS2V5IiwiaXNMb2FkaW5nUmVmIiwiaW5pdGlhbExvYWREb25lIiwicHJldmlvdXNDaGF0SWQiLCJzZXRDb252ZXJzYXRpb25Db250ZXh0RnJvbU1ldGFkYXRhIiwiX3JlZjMiLCJfYXN5bmNUb0dlbmVyYXRvciIsIl9yZWdlbmVyYXRvclJ1bnRpbWUiLCJtYXJrIiwiX2NhbGxlZSIsIl9yZWYyIiwicHJvamVjdElkTWVzc2FnZSIsInByb2plY3ROYW1lRnJvbVNlc3Npb24iLCJjbGllbnRJZEZyb21TZXNzaW9uIiwiY2xpZW50TmFtZUZyb21TZXNzaW9uIiwidGFza0lkRnJvbVNlc3Npb24iLCJ0YXNrTmFtZUZyb21TZXNzaW9uIiwicHJvamVjdHMiLCJoYXNNdWx0aUFnZW50c0FjY2VzcyIsInByb2plY3RJZE51bSIsImZvdW5kUHJvamVjdCIsIl9mb3VuZFByb2plY3QkY2xpZW50Iiwid3JhcCIsIl9jb250ZXh0IiwicHJldiIsIm5leHQiLCJuYW1lIiwiTnVtYmVyIiwiYWJydXB0Iiwic2VudCIsIndpbmRvdyIsIk1BSUFfQ0hBVF9BSV9GRUFUVVJFX0FDQ0VTU19NVUxUSV9BR0VOVFMiLCJmaW5kIiwicCIsInByb2plY3ROYW1lIiwiY2xpZW50TmFtZSIsImNsaWVudCIsInByb2plY3RJZCIsIlN0cmluZyIsInN0b3AiLCJfeCIsImFwcGx5IiwiYXJndW1lbnRzIiwibG9hZE1lc3NhZ2VzIiwiX2NhbGxlZTIiLCJfeWllbGQkbWFpYSRDaGF0cyRnZXQiLCJpdGVtcyIsIm5leHRJdGVtIiwiYWdlbnREZWxldGVkIiwiYWdlbnROb1Blcm1pc3Npb24iLCJoYXNBZ2VudEFjY2VzcyIsImhhc0FnZW50UGVybWlzc2lvbiIsImFnZW50VHlwZUZyb21TZXNzaW9uIiwiYWdlbnRFbnRpdHlGcm9tU2Vzc2lvbiIsInByb2plY3REZWxldGVkIiwiYWdlbnRJbkxpc3QiLCJjb250ZXh0UHJvamVjdElkIiwiaXRlbXNUb1NldCIsInRhYiIsIl90IiwiX2NvbnRleHQyIiwiY3VycmVudCIsIkNoYXRzIiwiZ2V0Q2hhdE1lc3NhZ2VzIiwib2Zmc2V0IiwiY2FuY2VsbGVkVGV4dCIsImxhbmciLCJsYW5ndWFnZSIsImFnZW50VHlwZSIsImFnZW50RW50aXR5IiwiY2xpZW50SWQiLCJ0YXNrSWQiLCJ0YXNrTmFtZSIsImNvbnNvbGUiLCJpbmZvIiwidXNlclBlcm1pc3Npb25zVmlldyIsInZpZXciLCJhZ2VudEluQWdlbnRzTGlzdCIsImEiLCJlbW9qaSIsInR5cGUiLCJpc19kZWxldGVkIiwiZGVsZXRlZF9hdCIsImRlbGV0ZWRBdCIsImNvbm5lY3RvcnMiLCJhZ2VudCIsImlzX2Zyb21fY29udmVyc2F0aW9uIiwicHJvamVjdF9kZWxldGVkIiwidW5kZWZpbmVkIiwiaGFzX25vdF9hY2Nlc3MiLCJoYXNfbm90X3Blcm1pc3Npb25zIiwiZG9jdW1lbnQiLCJkaXNwYXRjaEV2ZW50IiwiQ3VzdG9tRXZlbnQiLCJkZXRhaWwiLCJwYXJzZUludCIsImNvbmNhdCIsIm1hcCIsIml0ZW0iLCJmaW5pc2giLCJsb2FkTW9yZU1lc3NhZ2VzIiwiX3JlZjUiLCJfY2FsbGVlMyIsImNvbnRhaW5lciIsIm9sZFNjcm9sbEhlaWdodCIsIm9sZFNjcm9sbFRvcCIsIl95aWVsZCRtYWlhJENoYXRzJGdldDIiLCJpdGVtc1RvTWVyZ2UiLCJuZXdNZXNzYWdlcyIsIl90MiIsIl9jb250ZXh0MyIsInNjcm9sbEhlaWdodCIsInNjcm9sbFRvcCIsIl90b0NvbnN1bWFibGVBcnJheSIsInNsaWNlIiwicmVxdWVzdEFuaW1hdGlvbkZyYW1lIiwiY29udGFpbmVyUmVmIiwibmV3U2Nyb2xsSGVpZ2h0IiwiaGVpZ2h0RGlmZmVyZW5jZSIsIl94MiIsImhhbmRsZVNjcm9sbCIsImNsaWVudEhlaWdodCIsInNjcm9sbFBlcmNlbnRhZ2UiLCJkaWRSZXdyaXRlUmVmIiwibGVuZ3RoIiwibmVlZHNSZXdyaXRlIiwic29tZSIsIm1zZyIsIm1hdGNoZXMiLCJtYXRjaCIsImVuZHNXaXRoIiwiaW5jbHVkZXMiLCJyZXdyaXR0ZW4iLCJhZGRNZXNzYWdlIiwiZXhpc3RpbmdNZXNzYWdlSW5kZXgiLCJmaW5kSW5kZXgiLCJyZW1vdmVNZXNzYWdlIiwibWVzc2FnZUlkIiwiZmlsdGVyIiwiaGFzTW9yZU1lc3NhZ2VzIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2hvb2tzL3VzZUNoYXRNZXNzYWdlcy91c2VDaGF0TWVzc2FnZXMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L2luZGVudCAqL1xuaW1wb3J0IHsgdXNlQ2FsbGJhY2ssIHVzZVN0YXRlLCB1c2VSZWYsIHVzZUVmZmVjdCB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgdXNlUHJvamVjdHMgfSBmcm9tICcuLi91c2VQcm9qZWN0cydcbmltcG9ydCB7IENoYXRNZXNzYWdlIH0gZnJvbSAnLi4vLi4vdHlwZXMvQ2hhdCdcbmltcG9ydCB7IGJ1aWxkQ29udGV4dE1lc3NhZ2UgfSBmcm9tICcuLi8uLi90eXBlcy9jb250ZXh0TWVudGlvbidcbmltcG9ydCBtYWlhIGZyb20gJy4uLy4uL3NlcnZpY2VzL21haWEnXG5pbXBvcnQgeyBVc2VDaGF0TWVzc2FnZXNQcm9wcyB9IGZyb20gJy4vdXNlQ2hhdE1lc3NhZ2VzLmludGVyZmFjZSdcbmltcG9ydCB7IHVzZUdsb2JhbENvbnRleHQgfSBmcm9tICcuLi8uLi9jb250ZXh0L2dsb2JhbC1jb250ZXh0J1xuaW1wb3J0IHsgdXNlVCB9IGZyb20gJy4uL3VzZVQnXG5pbXBvcnQgeyB1c2VVc2VyIH0gZnJvbSAnLi4vLi4vY29udGV4dC9jb3ItdXNlcidcbmltcG9ydCB7IHVzZVRhYlRhc2tEZWZhdWx0IH0gZnJvbSAnLi4vdXNlVGFiVGFza0RlZmF1bHQnXG5pbXBvcnQgeyBUQVNLX1VSTF9SRUdFWF9QQVRURVJOIH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzL3Rhc2tVcmxzJ1xuaW1wb3J0IHsgbWFwQ09STGFuZyB9IGZyb20gJy4uLy4uL2xhbmcvdXRpbHMnXG5pbXBvcnQgeyBmb3JtYXRRdWlja0FjdGlvbk1lc3NhZ2VGb3JEaXNwbGF5IH0gZnJvbSAnLi4vLi4vdXRpbHMvZm9ybWF0UXVpY2tBY3Rpb25NZXNzYWdlJ1xuXG5jb25zdCByZXdyaXRlVGFza1VybHNJbkNvbnRlbnQgPSAoY29udGVudDogc3RyaW5nLCB0YWJTZWdtZW50OiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xuICBjb25zdCB0YXNrVXJsUmVnZXggPSBuZXcgUmVnRXhwKFRBU0tfVVJMX1JFR0VYX1BBVFRFUk4sICdnJylcbiAgcmV0dXJuIGNvbnRlbnQucmVwbGFjZSh0YXNrVXJsUmVnZXgsIHVybCA9PlxuICAgIHVybC5yZXBsYWNlKC9cXC8oZGV0YWlsfG1lc3NhZ2V8bWVzc2FnZXN8ZmlsZXN8aGlzdG9yeXxob3VycykoPz0kfFxcPykvLCB0YWJTZWdtZW50KVxuICApXG59XG5cbmV4cG9ydCBjb25zdCB1c2VDaGF0TWVzc2FnZXMgPSAoe1xuICBvbkVycm9yLFxuICBjaGF0SWQsXG4gIGN1cnJlbnRVc2VyLFxuICB1c2VySW5pdGlhbE1lc3NhZ2UsXG4gIGFnZW50cyA9IFtdLFxufTogVXNlQ2hhdE1lc3NhZ2VzUHJvcHMpID0+IHtcbiAgY29uc3QgeyB0LCBpMThuIH0gPSB1c2VUKClcbiAgY29uc3QgdXNlciA9IHVzZVVzZXIoKVxuICBjb25zdCB1c2VyUGVybWlzc2lvbnMgPSB1c2VyPy5wZXJtaXNzaW9ucz8uYWlfYWdlbnRzXG4gIGNvbnN0IFtsb2FkaW5nTWVzc2FnZXMsIHNldExvYWRpbmdNZXNzYWdlc10gPSB1c2VTdGF0ZShmYWxzZSlcbiAgY29uc3QgW21lc3NhZ2VzLCBzZXRNZXNzYWdlc10gPSB1c2VTdGF0ZTxDaGF0TWVzc2FnZVtdPihcbiAgICB1c2VySW5pdGlhbE1lc3NhZ2VcbiAgICAgID8gW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGlkOiAndXNlci1pbml0aWFsLW1lc3NhZ2UnLFxuICAgICAgICAgICAgZGF0ZTogbmV3IERhdGUoKSxcbiAgICAgICAgICAgIHVzZXI6IGN1cnJlbnRVc2VyLFxuICAgICAgICAgICAgbWVzc2FnZTogZm9ybWF0UXVpY2tBY3Rpb25NZXNzYWdlRm9yRGlzcGxheSh1c2VySW5pdGlhbE1lc3NhZ2UubWVzc2FnZSwge1xuICAgICAgICAgICAgICBmdWFJZDogdXNlckluaXRpYWxNZXNzYWdlLmZ1YUlkLFxuICAgICAgICAgICAgICBzY0lkOiB1c2VySW5pdGlhbE1lc3NhZ2Uuc2NJZCxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgLi4uKHVzZXJJbml0aWFsTWVzc2FnZS5hdHRhY2htZW50cyA/IHsgYXR0YWNobWVudHM6IHVzZXJJbml0aWFsTWVzc2FnZS5hdHRhY2htZW50cyB9IDoge30pLFxuICAgICAgICAgICAgLi4uKGJ1aWxkQ29udGV4dE1lc3NhZ2UodXNlckluaXRpYWxNZXNzYWdlLm1lbnRpb25zKVxuICAgICAgICAgICAgICA/IHsgY29udGV4dE1lc3NhZ2U6IGJ1aWxkQ29udGV4dE1lc3NhZ2UodXNlckluaXRpYWxNZXNzYWdlLm1lbnRpb25zKSB9XG4gICAgICAgICAgICAgIDoge30pLFxuICAgICAgICAgIH0sXG4gICAgICAgIF1cbiAgICAgIDogW11cbiAgKVxuICBjb25zdCB7IGZldGNoUHJvamVjdHMgfSA9IHVzZVByb2plY3RzKClcbiAgY29uc3QgeyBzZWxlY3RBZ2VudCwgc2V0Q2hpcHNQcm9qZWN0LCBzZXRQcm9qZWN0LCBzZXRDbGllbnQsIHNldFRhc2ssIHByb2plY3QgfSA9IHVzZUdsb2JhbENvbnRleHQoKVxuICBjb25zdCB7IGdldFRhYlRhc2tEZWZhdWx0LCB0YWJUYXNrRGVmYXVsdCwgcmVmZXRjaFRhYlRhc2tEZWZhdWx0IH0gPSB1c2VUYWJUYXNrRGVmYXVsdCgpXG4gIGNvbnN0IFtpc0xvYWRpbmdNb3JlTWVzc2FnZXMsIHNldElzTG9hZGluZ01vcmVNZXNzYWdlc10gPSB1c2VTdGF0ZShmYWxzZSlcbiAgY29uc3QgW2xhc3RFdmFsdWF0ZWRLZXksIHNldExhc3RFdmFsdWF0ZWRLZXldID0gdXNlU3RhdGU8bnVtYmVyIHwgdW5kZWZpbmVkPigwKVxuICBjb25zdCBpc0xvYWRpbmdSZWYgPSB1c2VSZWYoZmFsc2UpXG4gIGNvbnN0IGluaXRpYWxMb2FkRG9uZSA9IHVzZVJlZihmYWxzZSlcbiAgY29uc3QgcHJldmlvdXNDaGF0SWQgPSB1c2VSZWYoY2hhdElkKVxuXG4gIGNvbnN0IHNldENvbnZlcnNhdGlvbkNvbnRleHRGcm9tTWV0YWRhdGEgPSB1c2VDYWxsYmFjayhcbiAgICBhc3luYyAoe1xuICAgICAgcHJvamVjdElkTWVzc2FnZSxcbiAgICAgIHByb2plY3ROYW1lRnJvbVNlc3Npb24sXG4gICAgICBjbGllbnRJZEZyb21TZXNzaW9uLFxuICAgICAgY2xpZW50TmFtZUZyb21TZXNzaW9uLFxuICAgICAgdGFza0lkRnJvbVNlc3Npb24sXG4gICAgICB0YXNrTmFtZUZyb21TZXNzaW9uLFxuICAgIH06IHtcbiAgICAgIHByb2plY3RJZE1lc3NhZ2U6IHN0cmluZyB8IG51bWJlciB8IG51bGwgfCB1bmRlZmluZWRcbiAgICAgIHByb2plY3ROYW1lRnJvbVNlc3Npb246IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWRcbiAgICAgIGNsaWVudElkRnJvbVNlc3Npb246IHN0cmluZyB8IG51bWJlciB8IG51bGwgfCB1bmRlZmluZWRcbiAgICAgIGNsaWVudE5hbWVGcm9tU2Vzc2lvbjogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZFxuICAgICAgdGFza0lkRnJvbVNlc3Npb246IHN0cmluZyB8IG51bWJlciB8IG51bGwgfCB1bmRlZmluZWRcbiAgICAgIHRhc2tOYW1lRnJvbVNlc3Npb246IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWRcbiAgICB9KSA9PiB7XG4gICAgICAvLyBUYXJlYSBkZSBsYSBjb252ZXJzYWNpw7NuOiBzZSBkZXJpdmEgZGUgbGEgbWV0YWRhdGEgZGUgbGEgc2Vzc2lvbiBwYXJhIG1vc3RyYXIgZWwgY2hpcFxuICAgICAgLy8gZGUgbGEgdGFyZWEgKHkgcmVlbnZpYXIgbGEgbWV0YWRhdGEgZW4gY2FkYSBtZW5zYWplKSBzaW4gaW1wb3J0YXIgZGVzZGUgZMOzbmRlIHNlIGFicmEuXG4gICAgICBpZiAodGFza0lkRnJvbVNlc3Npb24gIT0gbnVsbCAmJiB0YXNrTmFtZUZyb21TZXNzaW9uKSB7XG4gICAgICAgIHNldFRhc2soeyBpZDogdGFza0lkRnJvbVNlc3Npb24sIG5hbWU6IHRhc2tOYW1lRnJvbVNlc3Npb24gfSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNldFRhc2sobnVsbClcbiAgICAgIH1cblxuICAgICAgLy8gQ29udmVyc2FjacOzbiBjb24gY2xpZW50X21ldGFkYXRhOiBzZXRlYXIgY2xpZW50ZSB5IGxpbXBpYXIgcHJveWVjdG9cbiAgICAgIGlmIChjbGllbnRJZEZyb21TZXNzaW9uICE9IG51bGwgJiYgY2xpZW50TmFtZUZyb21TZXNzaW9uKSB7XG4gICAgICAgIHNldENsaWVudCh7IGlkOiBOdW1iZXIoY2xpZW50SWRGcm9tU2Vzc2lvbiksIG5hbWU6IGNsaWVudE5hbWVGcm9tU2Vzc2lvbiB9KVxuICAgICAgICBzZXRDaGlwc1Byb2plY3QobnVsbClcbiAgICAgICAgc2V0UHJvamVjdChudWxsKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgY29uc3QgcHJvamVjdHMgPSBhd2FpdCBmZXRjaFByb2plY3RzKHByb2plY3RJZE1lc3NhZ2UpXG4gICAgICBjb25zdCBoYXNNdWx0aUFnZW50c0FjY2VzcyA9ICEhd2luZG93Lk1BSUFfQ0hBVF9BSV9GRUFUVVJFX0FDQ0VTU19NVUxUSV9BR0VOVFNcblxuICAgICAgaWYgKHByb2plY3RJZE1lc3NhZ2UgJiYgaGFzTXVsdGlBZ2VudHNBY2Nlc3MpIHtcbiAgICAgICAgY29uc3QgcHJvamVjdElkTnVtID0gTnVtYmVyKHByb2plY3RJZE1lc3NhZ2UpXG4gICAgICAgIGNvbnN0IGZvdW5kUHJvamVjdCA9IHByb2plY3RzPy5maW5kKHAgPT4gTnVtYmVyKHAuaWQpID09PSBwcm9qZWN0SWROdW0pXG5cbiAgICAgICAgaWYgKGZvdW5kUHJvamVjdCkge1xuICAgICAgICAgIHNldENoaXBzUHJvamVjdCh7XG4gICAgICAgICAgICBwcm9qZWN0TmFtZTogZm91bmRQcm9qZWN0Lm5hbWUsXG4gICAgICAgICAgICBjbGllbnROYW1lOiBmb3VuZFByb2plY3QuY2xpZW50Py5uYW1lIHx8ICcnLFxuICAgICAgICAgICAgcHJvamVjdElkOiBTdHJpbmcoZm91bmRQcm9qZWN0LmlkKSxcbiAgICAgICAgICB9KVxuICAgICAgICAgIHNldFByb2plY3QoZm91bmRQcm9qZWN0KVxuICAgICAgICB9IGVsc2UgaWYgKHByb2plY3ROYW1lRnJvbVNlc3Npb24pIHtcbiAgICAgICAgICBzZXRDaGlwc1Byb2plY3Qoe1xuICAgICAgICAgICAgcHJvamVjdE5hbWU6IHByb2plY3ROYW1lRnJvbVNlc3Npb24sXG4gICAgICAgICAgICBjbGllbnROYW1lOiAnJyxcbiAgICAgICAgICAgIHByb2plY3RJZDogU3RyaW5nKHByb2plY3RJZE1lc3NhZ2UpLFxuICAgICAgICAgIH0pXG4gICAgICAgICAgc2V0UHJvamVjdCh7IGlkOiBwcm9qZWN0SWROdW0sIG5hbWU6IHByb2plY3ROYW1lRnJvbVNlc3Npb24gfSlcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzZXRDaGlwc1Byb2plY3QobnVsbClcbiAgICAgICAgICBzZXRQcm9qZWN0KG51bGwpXG4gICAgICAgIH1cblxuICAgICAgICBzZXRDbGllbnQ/LihudWxsKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2V0Q2hpcHNQcm9qZWN0KG51bGwpXG4gICAgICAgIHNldFByb2plY3QobnVsbClcbiAgICAgICAgc2V0Q2xpZW50Py4obnVsbClcbiAgICAgIH1cbiAgICB9LFxuICAgIFtmZXRjaFByb2plY3RzLCBzZXRDbGllbnQsIHNldENoaXBzUHJvamVjdCwgc2V0UHJvamVjdCwgc2V0VGFza11cbiAgKVxuXG4gIGNvbnN0IGxvYWRNZXNzYWdlcyA9IHVzZUNhbGxiYWNrKGFzeW5jICgpID0+IHtcbiAgICB0cnkge1xuICAgICAgc2V0TG9hZGluZ01lc3NhZ2VzKHRydWUpXG4gICAgICBpbml0aWFsTG9hZERvbmUuY3VycmVudCA9IGZhbHNlXG4gICAgICBjb25zdCB7XG4gICAgICAgIGl0ZW1zLFxuICAgICAgICBuZXh0SXRlbSxcbiAgICAgICAgYWdlbnREZWxldGVkLFxuICAgICAgICBhZ2VudE5vUGVybWlzc2lvbixcbiAgICAgICAgaGFzQWdlbnRBY2Nlc3MsXG4gICAgICAgIGhhc0FnZW50UGVybWlzc2lvbixcbiAgICAgICAgYWdlbnRUeXBlOiBhZ2VudFR5cGVGcm9tU2Vzc2lvbixcbiAgICAgICAgYWdlbnRFbnRpdHk6IGFnZW50RW50aXR5RnJvbVNlc3Npb24sXG4gICAgICAgIHByb2plY3RJZDogcHJvamVjdElkTWVzc2FnZSxcbiAgICAgICAgcHJvamVjdE5hbWU6IHByb2plY3ROYW1lRnJvbVNlc3Npb24sXG4gICAgICAgIHByb2plY3REZWxldGVkLFxuICAgICAgICBjbGllbnRJZDogY2xpZW50SWRGcm9tU2Vzc2lvbixcbiAgICAgICAgY2xpZW50TmFtZTogY2xpZW50TmFtZUZyb21TZXNzaW9uLFxuICAgICAgICB0YXNrSWQ6IHRhc2tJZEZyb21TZXNzaW9uLFxuICAgICAgICB0YXNrTmFtZTogdGFza05hbWVGcm9tU2Vzc2lvbixcbiAgICAgIH0gPSBhd2FpdCBtYWlhLkNoYXRzLmdldENoYXRNZXNzYWdlcyh7XG4gICAgICAgIGNoYXRJZCxcbiAgICAgICAgY3VycmVudFVzZXIsXG4gICAgICAgIG9mZnNldDogbGFzdEV2YWx1YXRlZEtleSxcbiAgICAgICAgY2FuY2VsbGVkVGV4dDogdCgnY2hhdC5jYW5jZWxsZWQnKSxcbiAgICAgICAgbGFuZzogbWFwQ09STGFuZyhpMThuLmxhbmd1YWdlKSxcbiAgICAgIH0pXG4gICAgICBjb25zb2xlLmluZm8oJ1t1c2VDaGF0TWVzc2FnZXNdIGxvYWRNZXNzYWdlcyByZXN1bHQ6Jywge1xuICAgICAgICBjaGF0SWQsXG4gICAgICAgIGFnZW50Tm9QZXJtaXNzaW9uLFxuICAgICAgICBhZ2VudERlbGV0ZWQ6ICEhYWdlbnREZWxldGVkLFxuICAgICAgICBoYXNBZ2VudEFjY2VzcyxcbiAgICAgICAgaGFzQWdlbnRQZXJtaXNzaW9uLFxuICAgICAgICB1c2VyUGVybWlzc2lvbnNWaWV3OiB1c2VyUGVybWlzc2lvbnM/LnZpZXcsXG4gICAgICAgIGFnZW50SW5BZ2VudHNMaXN0OiBhZ2VudE5vUGVybWlzc2lvbiA/ICEhYWdlbnRzLmZpbmQoYSA9PiBhLmlkID09PSBhZ2VudE5vUGVybWlzc2lvbi5pZCkgOiBudWxsLFxuICAgICAgfSlcblxuICAgICAgaWYgKGFnZW50RGVsZXRlZCkge1xuICAgICAgICBzZWxlY3RBZ2VudCh7XG4gICAgICAgICAgaWQ6IGFnZW50RGVsZXRlZC5pZCxcbiAgICAgICAgICBuYW1lOiBhZ2VudERlbGV0ZWQubmFtZSxcbiAgICAgICAgICBlbW9qaTogYWdlbnREZWxldGVkLmVtb2ppLFxuICAgICAgICAgIHR5cGU6ICdjdXN0b20nLFxuICAgICAgICAgIGlzX2RlbGV0ZWQ6IHRydWUsXG4gICAgICAgICAgZGVsZXRlZF9hdDogYWdlbnREZWxldGVkLmRlbGV0ZWRBdCxcbiAgICAgICAgICAuLi4oYWdlbnROb1Blcm1pc3Npb24/LmNvbm5lY3RvcnMgPyB7IGNvbm5lY3RvcnM6IGFnZW50Tm9QZXJtaXNzaW9uLmNvbm5lY3RvcnMgfSA6IHt9KSxcbiAgICAgICAgfSlcbiAgICAgIH1cblxuICAgICAgLy8gU2kgZWwgYWdlbnRlIG5vIGVzdMOhIGVuIGxhIGxpc3RhIHBlcm8gdGllbmUgcGVybWlzb3MsIGFjY2VzbyB5IG5vIGVzdMOhIGVsaW1pbmFkbywgc2V0ZWFybG8gbm9ybWFsbWVudGVcbiAgICAgIC8vIEV4Y2x1aXIgYWdlbnRlcyBuby1jdXN0b20gcGFyYSB1c3VhcmlvcyBjb24gcm9sZXMgZGVzaGFiaWxpdGFkb3NcbiAgICAgIGlmIChcbiAgICAgICAgYWdlbnROb1Blcm1pc3Npb24gJiZcbiAgICAgICAgIWFnZW50RGVsZXRlZCAmJlxuICAgICAgICB1c2VyUGVybWlzc2lvbnM/LnZpZXcgJiZcbiAgICAgICAgaGFzQWdlbnRBY2Nlc3MgJiZcbiAgICAgICAgaGFzQWdlbnRQZXJtaXNzaW9uICYmXG4gICAgICAgICFhZ2VudHMuZmluZChhZ2VudCA9PiBhZ2VudC5pZCA9PT0gYWdlbnROb1Blcm1pc3Npb24uaWQpXG4gICAgICApIHtcbiAgICAgICAgc2VsZWN0QWdlbnQoe1xuICAgICAgICAgIGlkOiBhZ2VudE5vUGVybWlzc2lvbi5pZCxcbiAgICAgICAgICBuYW1lOiBhZ2VudE5vUGVybWlzc2lvbi5uYW1lLFxuICAgICAgICAgIGVtb2ppOiBhZ2VudE5vUGVybWlzc2lvbi5lbW9qaSxcbiAgICAgICAgICB0eXBlOiBhZ2VudE5vUGVybWlzc2lvbi50eXBlIGFzICdwbScgfCAnY3VzdG9tJyB8ICdjbG9uZScgfCAnb3JjaGVzdHJhdG9yJyxcbiAgICAgICAgICBpc19mcm9tX2NvbnZlcnNhdGlvbjogdHJ1ZSxcbiAgICAgICAgICAuLi4oYWdlbnROb1Blcm1pc3Npb24uY29ubmVjdG9ycyA/IHsgY29ubmVjdG9yczogYWdlbnROb1Blcm1pc3Npb24uY29ubmVjdG9ycyB9IDoge30pLFxuICAgICAgICAgIC4uLihwcm9qZWN0RGVsZXRlZCA/IHsgcHJvamVjdF9kZWxldGVkOiB7IG5hbWU6IHByb2plY3REZWxldGVkLm5hbWUgfSB9IDoge30pLFxuICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICAvLyBTaSBlbCBhZ2VudGUgZXN0w6EgZW4gbGEgbGlzdGEgeSB0aWVuZSBhY2Nlc28vcGVybWlzb3MsIGFjdHVhbGl6YXIgcHJvamVjdF9kZWxldGVkIChvIGxpbXBpYXJsbyBhbCBjYW1iaWFyIGRlIGNoYXQpXG4gICAgICBpZiAoXG4gICAgICAgIGFnZW50Tm9QZXJtaXNzaW9uICYmXG4gICAgICAgICFhZ2VudERlbGV0ZWQgJiZcbiAgICAgICAgaGFzQWdlbnRBY2Nlc3MgJiZcbiAgICAgICAgaGFzQWdlbnRQZXJtaXNzaW9uICYmXG4gICAgICAgIGFnZW50cy5maW5kKGEgPT4gYS5pZCA9PT0gYWdlbnROb1Blcm1pc3Npb24uaWQpXG4gICAgICApIHtcbiAgICAgICAgY29uc3QgYWdlbnRJbkxpc3QgPSBhZ2VudHMuZmluZChhID0+IGEuaWQgPT09IGFnZW50Tm9QZXJtaXNzaW9uLmlkKVxuICAgICAgICBpZiAoYWdlbnRJbkxpc3QpIHtcbiAgICAgICAgICBzZWxlY3RBZ2VudCh7XG4gICAgICAgICAgICAuLi5hZ2VudEluTGlzdCxcbiAgICAgICAgICAgIC4uLihwcm9qZWN0RGVsZXRlZCA/IHsgcHJvamVjdF9kZWxldGVkOiB7IG5hbWU6IHByb2plY3REZWxldGVkLm5hbWUgfSB9IDogeyBwcm9qZWN0X2RlbGV0ZWQ6IHVuZGVmaW5lZCB9KSxcbiAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIFNpIGVsIGFnZW50ZSBubyB0aWVuZSBhY2Nlc28gbyBwZXJtaXNvcyBzZWfDum4gbGEgcmVzcHVlc3RhIGRlIHNlc3Npb25zLCBzZWxlY2Npb25hcmxvIGNvbiBlbCBmbGFnIGNvcnJlc3BvbmRpZW50ZVxuICAgICAgLy8gTGEgdmFsaWRhY2nDs24gYWhvcmEgc2UgYmFzYSBlbiBsYXMgcHJvcGllZGFkZXMgaGFzX2FnZW50X2FjY2VzcyB5IGhhc19hZ2VudF9wZXJtaXNzaW9uIGRlIGxhIHJlc3B1ZXN0YVxuICAgICAgaWYgKGFnZW50Tm9QZXJtaXNzaW9uICYmICFhZ2VudERlbGV0ZWQpIHtcbiAgICAgICAgaWYgKCFoYXNBZ2VudEFjY2Vzcykge1xuICAgICAgICAgIC8vIENhc28gMTogTm8gdGllbmUgYWNjZXNvIGFsIGFnZW50ZVxuICAgICAgICAgIGNvbnNvbGUuaW5mbygnW3VzZUNoYXRNZXNzYWdlc10gQlJBTkNIOiBoYXNfbm90X2FjY2VzcyDigJQgaGFzQWdlbnRBY2Nlc3M6JywgaGFzQWdlbnRBY2Nlc3MpXG4gICAgICAgICAgc2VsZWN0QWdlbnQoe1xuICAgICAgICAgICAgaWQ6IGFnZW50Tm9QZXJtaXNzaW9uLmlkLFxuICAgICAgICAgICAgbmFtZTogYWdlbnROb1Blcm1pc3Npb24ubmFtZSxcbiAgICAgICAgICAgIGVtb2ppOiBhZ2VudE5vUGVybWlzc2lvbi5lbW9qaSxcbiAgICAgICAgICAgIHR5cGU6IGFnZW50Tm9QZXJtaXNzaW9uLnR5cGUgYXMgJ3BtJyB8ICdjdXN0b20nIHwgJ2Nsb25lJyB8ICdvcmNoZXN0cmF0b3InLFxuICAgICAgICAgICAgaGFzX25vdF9hY2Nlc3M6IHRydWUsXG4gICAgICAgICAgICAuLi4oYWdlbnROb1Blcm1pc3Npb24uY29ubmVjdG9ycyA/IHsgY29ubmVjdG9yczogYWdlbnROb1Blcm1pc3Npb24uY29ubmVjdG9ycyB9IDoge30pLFxuICAgICAgICAgICAgLi4uKHByb2plY3REZWxldGVkID8geyBwcm9qZWN0X2RlbGV0ZWQ6IHsgbmFtZTogcHJvamVjdERlbGV0ZWQubmFtZSB9IH0gOiB7fSksXG4gICAgICAgICAgfSlcbiAgICAgICAgfSBlbHNlIGlmICghaGFzQWdlbnRQZXJtaXNzaW9uKSB7XG4gICAgICAgICAgLy8gQ2FzbyAyOiBObyB0aWVuZSBwZXJtaXNvcyBwYXJhIHZpc3VhbGl6YXIvaW50ZXJhY3R1YXIgY29uIGVsIGFnZW50ZVxuICAgICAgICAgIGNvbnNvbGUuaW5mbygnW3VzZUNoYXRNZXNzYWdlc10gQlJBTkNIOiBoYXNfbm90X3Blcm1pc3Npb25zIOKAlCBoYXNBZ2VudFBlcm1pc3Npb246JywgaGFzQWdlbnRQZXJtaXNzaW9uKVxuICAgICAgICAgIHNlbGVjdEFnZW50KHtcbiAgICAgICAgICAgIGlkOiBhZ2VudE5vUGVybWlzc2lvbi5pZCxcbiAgICAgICAgICAgIG5hbWU6IGFnZW50Tm9QZXJtaXNzaW9uLm5hbWUsXG4gICAgICAgICAgICBlbW9qaTogYWdlbnROb1Blcm1pc3Npb24uZW1vamksXG4gICAgICAgICAgICB0eXBlOiBhZ2VudE5vUGVybWlzc2lvbi50eXBlIGFzICdwbScgfCAnY3VzdG9tJyB8ICdjbG9uZScgfCAnb3JjaGVzdHJhdG9yJyxcbiAgICAgICAgICAgIGhhc19ub3RfcGVybWlzc2lvbnM6IHRydWUsXG4gICAgICAgICAgICAuLi4oYWdlbnROb1Blcm1pc3Npb24uY29ubmVjdG9ycyA/IHsgY29ubmVjdG9yczogYWdlbnROb1Blcm1pc3Npb24uY29ubmVjdG9ycyB9IDoge30pLFxuICAgICAgICAgICAgLi4uKHByb2plY3REZWxldGVkID8geyBwcm9qZWN0X2RlbGV0ZWQ6IHsgbmFtZTogcHJvamVjdERlbGV0ZWQubmFtZSB9IH0gOiB7fSksXG4gICAgICAgICAgfSlcbiAgICAgICAgfSBlbHNlIGlmIChwcm9qZWN0RGVsZXRlZCkge1xuICAgICAgICAgIC8vIENhc28gMzogRWwgcHJveWVjdG8gZGUgbGEgY29udmVyc2FjacOzbiBmdWUgZWxpbWluYWRvXG4gICAgICAgICAgc2VsZWN0QWdlbnQoe1xuICAgICAgICAgICAgaWQ6IGFnZW50Tm9QZXJtaXNzaW9uLmlkLFxuICAgICAgICAgICAgbmFtZTogYWdlbnROb1Blcm1pc3Npb24ubmFtZSxcbiAgICAgICAgICAgIGVtb2ppOiBhZ2VudE5vUGVybWlzc2lvbi5lbW9qaSxcbiAgICAgICAgICAgIHR5cGU6IGFnZW50Tm9QZXJtaXNzaW9uLnR5cGUgYXMgJ3BtJyB8ICdjdXN0b20nIHwgJ2Nsb25lJyB8ICdvcmNoZXN0cmF0b3InLFxuICAgICAgICAgICAgLi4uKGFnZW50Tm9QZXJtaXNzaW9uLmNvbm5lY3RvcnMgPyB7IGNvbm5lY3RvcnM6IGFnZW50Tm9QZXJtaXNzaW9uLmNvbm5lY3RvcnMgfSA6IHt9KSxcbiAgICAgICAgICAgIHByb2plY3RfZGVsZXRlZDogeyBuYW1lOiBwcm9qZWN0RGVsZXRlZC5uYW1lIH0sXG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBhd2FpdCBzZXRDb252ZXJzYXRpb25Db250ZXh0RnJvbU1ldGFkYXRhKHtcbiAgICAgICAgcHJvamVjdElkTWVzc2FnZSxcbiAgICAgICAgcHJvamVjdE5hbWVGcm9tU2Vzc2lvbixcbiAgICAgICAgY2xpZW50SWRGcm9tU2Vzc2lvbixcbiAgICAgICAgY2xpZW50TmFtZUZyb21TZXNzaW9uLFxuICAgICAgICB0YXNrSWRGcm9tU2Vzc2lvbixcbiAgICAgICAgdGFza05hbWVGcm9tU2Vzc2lvbixcbiAgICAgIH0pXG5cbiAgICAgIC8vIE1ldGFkYXRhIGRlIGxhIHNlc3Npb24gKGFnZW50X3R5cGUgLyBhZ2VudF9lbnRpdHkgKyBjb250ZXh0bykgcGFyYSBlbCBjYXJ0ZWwgZGVcbiAgICAgIC8vIFwiY29udGludWFyIGVuIHVuIGNoYXQgbnVldm9cIiBkZWwgZm9vdGVyIGN1YW5kbyBzZSBhYnJlIHVuYSBjb252ZXJzYWNpw7NuIGRlIHVuIGNsb25lIGxlZ2FjeS5cbiAgICAgIGRvY3VtZW50LmRpc3BhdGNoRXZlbnQoXG4gICAgICAgIG5ldyBDdXN0b21FdmVudCgnbWFpYS1jaGF0LXNlc3Npb24tbWV0YScsIHtcbiAgICAgICAgICBkZXRhaWw6IHtcbiAgICAgICAgICAgIGNoYXRJZCxcbiAgICAgICAgICAgIGFnZW50VHlwZTogYWdlbnRUeXBlRnJvbVNlc3Npb24sXG4gICAgICAgICAgICBhZ2VudEVudGl0eTogYWdlbnRFbnRpdHlGcm9tU2Vzc2lvbixcbiAgICAgICAgICAgIHByb2plY3RJZDogcHJvamVjdElkTWVzc2FnZSxcbiAgICAgICAgICAgIHByb2plY3ROYW1lOiBwcm9qZWN0TmFtZUZyb21TZXNzaW9uLFxuICAgICAgICAgICAgY2xpZW50SWQ6IGNsaWVudElkRnJvbVNlc3Npb24sXG4gICAgICAgICAgICBjbGllbnROYW1lOiBjbGllbnROYW1lRnJvbVNlc3Npb24sXG4gICAgICAgICAgICB0YXNrSWQ6IHRhc2tJZEZyb21TZXNzaW9uLFxuICAgICAgICAgICAgdGFza05hbWU6IHRhc2tOYW1lRnJvbVNlc3Npb24sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSlcbiAgICAgIClcblxuICAgICAgLy8gU2kgaGF5IHByb3llY3RvIGVuIGxhIGNvbnZlcnNhY2nDs24sIHJlZXNjcmliaXIgVVJMcyBkZSB0YXJlYXMgY29uIGVsIHRhYiBkZWwgdXN1YXJpbyAobWUpXG4gICAgICBjb25zdCBjb250ZXh0UHJvamVjdElkID0gcHJvamVjdElkTWVzc2FnZSA/IHBhcnNlSW50KFN0cmluZyhwcm9qZWN0SWRNZXNzYWdlKSwgMTApIDogbnVsbFxuICAgICAgbGV0IGl0ZW1zVG9TZXQgPSBpdGVtc1xuICAgICAgaWYgKGNvbnRleHRQcm9qZWN0SWQpIHtcbiAgICAgICAgY29uc3QgdGFiID0gYXdhaXQgZ2V0VGFiVGFza0RlZmF1bHQoMSlcbiAgICAgICAgY29uc3QgdGFiU2VnbWVudCA9IHRhYiA/IGAvJHt0YWJ9YCA6ICcvZGV0YWlsJ1xuICAgICAgICBpdGVtc1RvU2V0ID0gaXRlbXMubWFwKGl0ZW0gPT4gKHtcbiAgICAgICAgICAuLi5pdGVtLFxuICAgICAgICAgIG1lc3NhZ2U6IHJld3JpdGVUYXNrVXJsc0luQ29udGVudChpdGVtLm1lc3NhZ2UgfHwgJycsIHRhYlNlZ21lbnQpLFxuICAgICAgICB9KSlcbiAgICAgIH1cbiAgICAgIHNldE1lc3NhZ2VzKGl0ZW1zVG9TZXQpXG4gICAgICBzZXRMYXN0RXZhbHVhdGVkS2V5KE51bWJlcihuZXh0SXRlbSkpXG4gICAgICBpbml0aWFsTG9hZERvbmUuY3VycmVudCA9IHRydWVcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgb25FcnJvcj8uKClcbiAgICB9IGZpbmFsbHkge1xuICAgICAgc2V0TG9hZGluZ01lc3NhZ2VzKGZhbHNlKVxuICAgIH1cbiAgfSwgW2NoYXRJZCwgY3VycmVudFVzZXIsIHNldENvbnZlcnNhdGlvbkNvbnRleHRGcm9tTWV0YWRhdGEsIG9uRXJyb3IsIGdldFRhYlRhc2tEZWZhdWx0XSlcblxuICBjb25zdCBsb2FkTW9yZU1lc3NhZ2VzID0gdXNlQ2FsbGJhY2soXG4gICAgYXN5bmMgKGNvbnRhaW5lcjogSFRNTERpdkVsZW1lbnQgfCBudWxsKSA9PiB7XG4gICAgICBpZiAoaXNMb2FkaW5nUmVmLmN1cnJlbnQgfHwgIWxhc3RFdmFsdWF0ZWRLZXkgfHwgIWNvbnRhaW5lcikgcmV0dXJuXG4gICAgICB0cnkge1xuICAgICAgICBpc0xvYWRpbmdSZWYuY3VycmVudCA9IHRydWVcbiAgICAgICAgc2V0SXNMb2FkaW5nTW9yZU1lc3NhZ2VzKHRydWUpXG5cbiAgICAgICAgY29uc3Qgb2xkU2Nyb2xsSGVpZ2h0ID0gY29udGFpbmVyLnNjcm9sbEhlaWdodFxuICAgICAgICBjb25zdCBvbGRTY3JvbGxUb3AgPSBjb250YWluZXIuc2Nyb2xsVG9wXG5cbiAgICAgICAgY29uc3Qge1xuICAgICAgICAgIGl0ZW1zLFxuICAgICAgICAgIG5leHRJdGVtLFxuICAgICAgICAgIHByb2plY3RJZDogcHJvamVjdElkTWVzc2FnZSxcbiAgICAgICAgICBwcm9qZWN0TmFtZTogcHJvamVjdE5hbWVGcm9tU2Vzc2lvbixcbiAgICAgICAgICBjbGllbnRJZDogY2xpZW50SWRGcm9tU2Vzc2lvbixcbiAgICAgICAgICBjbGllbnROYW1lOiBjbGllbnROYW1lRnJvbVNlc3Npb24sXG4gICAgICAgICAgdGFza0lkOiB0YXNrSWRGcm9tU2Vzc2lvbixcbiAgICAgICAgICB0YXNrTmFtZTogdGFza05hbWVGcm9tU2Vzc2lvbixcbiAgICAgICAgfSA9IGF3YWl0IG1haWEuQ2hhdHMuZ2V0Q2hhdE1lc3NhZ2VzKHtcbiAgICAgICAgICBjaGF0SWQsXG4gICAgICAgICAgY3VycmVudFVzZXIsXG4gICAgICAgICAgb2Zmc2V0OiBsYXN0RXZhbHVhdGVkS2V5LFxuICAgICAgICAgIGxhbmc6IG1hcENPUkxhbmcoaTE4bi5sYW5ndWFnZSksXG4gICAgICAgIH0pXG5cbiAgICAgICAgYXdhaXQgc2V0Q29udmVyc2F0aW9uQ29udGV4dEZyb21NZXRhZGF0YSh7XG4gICAgICAgICAgcHJvamVjdElkTWVzc2FnZSxcbiAgICAgICAgICBwcm9qZWN0TmFtZUZyb21TZXNzaW9uLFxuICAgICAgICAgIGNsaWVudElkRnJvbVNlc3Npb24sXG4gICAgICAgICAgY2xpZW50TmFtZUZyb21TZXNzaW9uLFxuICAgICAgICAgIHRhc2tJZEZyb21TZXNzaW9uLFxuICAgICAgICAgIHRhc2tOYW1lRnJvbVNlc3Npb24sXG4gICAgICAgIH0pXG5cbiAgICAgICAgLy8gU2kgaGF5IHByb3llY3RvIGVuIGxhIGNvbnZlcnNhY2nDs24sIHJlZXNjcmliaXIgVVJMcyBkZSB0YXJlYXMgZW4gbG9zIG1lbnNhamVzIGNhcmdhZG9zXG4gICAgICAgIGNvbnN0IGNvbnRleHRQcm9qZWN0SWQgPSBwcm9qZWN0SWRNZXNzYWdlID8gcGFyc2VJbnQoU3RyaW5nKHByb2plY3RJZE1lc3NhZ2UpLCAxMCkgOiBudWxsXG4gICAgICAgIGxldCBpdGVtc1RvTWVyZ2UgPSBpdGVtc1xuICAgICAgICBpZiAoY29udGV4dFByb2plY3RJZCkge1xuICAgICAgICAgIGNvbnN0IHRhYiA9IGF3YWl0IGdldFRhYlRhc2tEZWZhdWx0KDEpXG4gICAgICAgICAgY29uc3QgdGFiU2VnbWVudCA9IHRhYiA/IGAvJHt0YWJ9YCA6ICcvZGV0YWlsJ1xuICAgICAgICAgIGl0ZW1zVG9NZXJnZSA9IGl0ZW1zLm1hcChpdGVtID0+ICh7XG4gICAgICAgICAgICAuLi5pdGVtLFxuICAgICAgICAgICAgbWVzc2FnZTogcmV3cml0ZVRhc2tVcmxzSW5Db250ZW50KGl0ZW0ubWVzc2FnZSB8fCAnJywgdGFiU2VnbWVudCksXG4gICAgICAgICAgfSkpXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbmV3TWVzc2FnZXMgPSBbLi4ubWVzc2FnZXMuc2xpY2UoMCwgMSksIC4uLml0ZW1zVG9NZXJnZSwgLi4ubWVzc2FnZXMuc2xpY2UoMSldXG4gICAgICAgIHNldE1lc3NhZ2VzKG5ld01lc3NhZ2VzKVxuICAgICAgICBzZXRMYXN0RXZhbHVhdGVkS2V5KE51bWJlcihuZXh0SXRlbSkpXG5cbiAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcbiAgICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgY29udGFpbmVyUmVmID0gY29udGFpbmVyXG4gICAgICAgICAgICBpZiAoY29udGFpbmVyUmVmKSB7XG4gICAgICAgICAgICAgIGNvbnN0IG5ld1Njcm9sbEhlaWdodCA9IGNvbnRhaW5lclJlZi5zY3JvbGxIZWlnaHRcbiAgICAgICAgICAgICAgY29uc3QgaGVpZ2h0RGlmZmVyZW5jZSA9IG5ld1Njcm9sbEhlaWdodCAtIG9sZFNjcm9sbEhlaWdodFxuICAgICAgICAgICAgICBjb250YWluZXJSZWYuc2Nyb2xsVG9wID0gb2xkU2Nyb2xsVG9wICsgaGVpZ2h0RGlmZmVyZW5jZVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICAgIH0pXG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBvbkVycm9yPy4oKVxuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgc2V0SXNMb2FkaW5nTW9yZU1lc3NhZ2VzKGZhbHNlKVxuICAgICAgICBpc0xvYWRpbmdSZWYuY3VycmVudCA9IGZhbHNlXG4gICAgICB9XG4gICAgfSxcbiAgICBbY2hhdElkLCBjdXJyZW50VXNlciwgbGFzdEV2YWx1YXRlZEtleSwgb25FcnJvciwgbWVzc2FnZXMsIGdldFRhYlRhc2tEZWZhdWx0LCBzZXRDb252ZXJzYXRpb25Db250ZXh0RnJvbU1ldGFkYXRhXVxuICApXG5cbiAgY29uc3QgaGFuZGxlU2Nyb2xsID0gdXNlQ2FsbGJhY2soXG4gICAgKGNvbnRhaW5lcjogSFRNTERpdkVsZW1lbnQgfCBudWxsKSA9PiB7XG4gICAgICBpZiAoIWNvbnRhaW5lciB8fCBpc0xvYWRpbmdSZWYuY3VycmVudCB8fCAhaW5pdGlhbExvYWREb25lLmN1cnJlbnQpIHJldHVyblxuXG4gICAgICBjb25zdCB7IHNjcm9sbFRvcCwgc2Nyb2xsSGVpZ2h0LCBjbGllbnRIZWlnaHQgfSA9IGNvbnRhaW5lclxuICAgICAgY29uc3Qgc2Nyb2xsUGVyY2VudGFnZSA9IHNjcm9sbEhlaWdodCAtIGNsaWVudEhlaWdodCA+IDAgPyAoc2Nyb2xsVG9wIC8gKHNjcm9sbEhlaWdodCAtIGNsaWVudEhlaWdodCkpICogMTAwIDogMFxuXG4gICAgICBpZiAoc2Nyb2xsUGVyY2VudGFnZSA8IDEwKSB7XG4gICAgICAgIGxvYWRNb3JlTWVzc2FnZXMoY29udGFpbmVyKVxuICAgICAgfVxuICAgIH0sXG4gICAgW2xvYWRNb3JlTWVzc2FnZXNdXG4gIClcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChjaGF0SWQgIT09IHByZXZpb3VzQ2hhdElkLmN1cnJlbnQpIHtcbiAgICAgIHNldE1lc3NhZ2VzKFxuICAgICAgICB1c2VySW5pdGlhbE1lc3NhZ2VcbiAgICAgICAgICA/IFtcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGlkOiAndXNlci1pbml0aWFsLW1lc3NhZ2UnLFxuICAgICAgICAgICAgICAgIGRhdGU6IG5ldyBEYXRlKCksXG4gICAgICAgICAgICAgICAgdXNlcjogY3VycmVudFVzZXIsXG4gICAgICAgICAgICAgICAgbWVzc2FnZTogZm9ybWF0UXVpY2tBY3Rpb25NZXNzYWdlRm9yRGlzcGxheSh1c2VySW5pdGlhbE1lc3NhZ2UubWVzc2FnZSwge1xuICAgICAgICAgICAgICAgICAgZnVhSWQ6IHVzZXJJbml0aWFsTWVzc2FnZS5mdWFJZCxcbiAgICAgICAgICAgICAgICAgIHNjSWQ6IHVzZXJJbml0aWFsTWVzc2FnZS5zY0lkLFxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIC4uLih1c2VySW5pdGlhbE1lc3NhZ2UuYXR0YWNobWVudHMgPyB7IGF0dGFjaG1lbnRzOiB1c2VySW5pdGlhbE1lc3NhZ2UuYXR0YWNobWVudHMgfSA6IHt9KSxcbiAgICAgICAgICAgICAgICAuLi4oYnVpbGRDb250ZXh0TWVzc2FnZSh1c2VySW5pdGlhbE1lc3NhZ2UubWVudGlvbnMpXG4gICAgICAgICAgICAgICAgICA/IHsgY29udGV4dE1lc3NhZ2U6IGJ1aWxkQ29udGV4dE1lc3NhZ2UodXNlckluaXRpYWxNZXNzYWdlLm1lbnRpb25zKSB9XG4gICAgICAgICAgICAgICAgICA6IHt9KSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIF1cbiAgICAgICAgICA6IFtdXG4gICAgICApXG4gICAgICBzZXRMYXN0RXZhbHVhdGVkS2V5KDApXG4gICAgICBpc0xvYWRpbmdSZWYuY3VycmVudCA9IGZhbHNlXG4gICAgICBpbml0aWFsTG9hZERvbmUuY3VycmVudCA9IGZhbHNlXG4gICAgICBwcmV2aW91c0NoYXRJZC5jdXJyZW50ID0gY2hhdElkXG5cbiAgICAgIC8vIExpbXBpYXIgZWwgZXN0YWRvIGRlbCBwcm95ZWN0byB5IGxhIHRhcmVhIGN1YW5kbyBjYW1iaWEgZGUgY29udmVyc2FjacOzblxuICAgICAgc2V0Q2hpcHNQcm9qZWN0KG51bGwpXG4gICAgICBzZXRQcm9qZWN0KG51bGwpXG4gICAgICBzZXRUYXNrKG51bGwpXG5cbiAgICAgIC8vIFZvbHZlciBhIGVqZWN1dGFyIGxhIHF1ZXJ5IG1lIHBhcmEgdGVuZXIgdGFiVGFza0RlZmF1bHQgYWN0dWFsaXphZG8gZW4gbGEgbnVldmEgY29udmVyc2FjacOzblxuICAgICAgcmVmZXRjaFRhYlRhc2tEZWZhdWx0KClcblxuICAgICAgaWYgKCF1c2VySW5pdGlhbE1lc3NhZ2UpIHtcbiAgICAgICAgbG9hZE1lc3NhZ2VzKClcbiAgICAgIH1cbiAgICB9XG4gIH0sIFtcbiAgICBjaGF0SWQsXG4gICAgdXNlckluaXRpYWxNZXNzYWdlLFxuICAgIGN1cnJlbnRVc2VyLFxuICAgIGxvYWRNZXNzYWdlcyxcbiAgICBzZXRDaGlwc1Byb2plY3QsXG4gICAgc2V0UHJvamVjdCxcbiAgICBzZXRUYXNrLFxuICAgIHJlZmV0Y2hUYWJUYXNrRGVmYXVsdCxcbiAgXSlcblxuICAvLyBDdWFuZG8gdGFiVGFza0RlZmF1bHQgcGFzYSBhIGVzdGFyIGRpc3BvbmlibGUgZGVzcHXDqXMgZGUgY2FyZ2FyLCByZWVzY3JpYmlyIFVSTHMgZGUgdGFyZWFzIGVuIGxvcyBtZW5zYWplcyB5YSBjYXJnYWRvcy5cbiAgLy8gUmVmIHBhcmEgZXZpdGFyIGJ1Y2xlOiBzZXRNZXNzYWdlcyhyZXdyaXR0ZW4pIGNhbWJpYSBtZXNzYWdlcyB5IHJlLWVqZWN1dGEgZWwgZWZlY3RvOyBzb2xvIHJlZXNjcmliaW1vcyB1bmEgdmV6IHBvciBsb3RlLlxuICBjb25zdCBkaWRSZXdyaXRlUmVmID0gdXNlUmVmKGZhbHNlKVxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghdGFiVGFza0RlZmF1bHQgfHwgIXByb2plY3Q/LmlkIHx8IG1lc3NhZ2VzLmxlbmd0aCA9PT0gMCkgcmV0dXJuXG4gICAgY29uc3QgdGFza1VybFJlZ2V4ID0gbmV3IFJlZ0V4cChUQVNLX1VSTF9SRUdFWF9QQVRURVJOLCAnZycpXG4gICAgY29uc3QgdGFiU2VnbWVudCA9IGAvJHt0YWJUYXNrRGVmYXVsdH1gXG4gICAgY29uc3QgbmVlZHNSZXdyaXRlID0gbWVzc2FnZXMuc29tZShtc2cgPT4ge1xuICAgICAgY29uc3QgY29udGVudCA9IG1zZy5tZXNzYWdlIHx8ICcnXG4gICAgICBjb25zdCBtYXRjaGVzID0gY29udGVudC5tYXRjaCh0YXNrVXJsUmVnZXgpXG4gICAgICBpZiAoIW1hdGNoZXM/Lmxlbmd0aCkgcmV0dXJuIGZhbHNlXG4gICAgICByZXR1cm4gbWF0Y2hlcy5zb21lKHVybCA9PiAhdXJsLmVuZHNXaXRoKGAvJHt0YWJUYXNrRGVmYXVsdH1gKSAmJiAhdXJsLmluY2x1ZGVzKGAvJHt0YWJUYXNrRGVmYXVsdH0/YCkpXG4gICAgfSlcbiAgICBpZiAoIW5lZWRzUmV3cml0ZSkge1xuICAgICAgZGlkUmV3cml0ZVJlZi5jdXJyZW50ID0gZmFsc2VcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBpZiAoZGlkUmV3cml0ZVJlZi5jdXJyZW50KSByZXR1cm5cbiAgICBkaWRSZXdyaXRlUmVmLmN1cnJlbnQgPSB0cnVlXG4gICAgY29uc3QgcmV3cml0dGVuID0gbWVzc2FnZXMubWFwKG1zZyA9PiAoe1xuICAgICAgLi4ubXNnLFxuICAgICAgbWVzc2FnZTogcmV3cml0ZVRhc2tVcmxzSW5Db250ZW50KG1zZy5tZXNzYWdlIHx8ICcnLCB0YWJTZWdtZW50KSxcbiAgICB9KSlcbiAgICBzZXRNZXNzYWdlcyhyZXdyaXR0ZW4pXG4gIH0sIFt0YWJUYXNrRGVmYXVsdCwgcHJvamVjdD8uaWQsIG1lc3NhZ2VzXSlcblxuICBjb25zdCBhZGRNZXNzYWdlID0gdXNlQ2FsbGJhY2soKG1lc3NhZ2U6IENoYXRNZXNzYWdlKSA9PiB7XG4gICAgc2V0TWVzc2FnZXMocHJldiA9PiB7XG4gICAgICBjb25zdCBleGlzdGluZ01lc3NhZ2VJbmRleCA9IHByZXYuZmluZEluZGV4KG1zZyA9PiBtc2cuaWQgPT09IG1lc3NhZ2UuaWQpXG5cbiAgICAgIGlmIChleGlzdGluZ01lc3NhZ2VJbmRleCA+PSAwKSB7XG4gICAgICAgIGNvbnN0IG5ld01lc3NhZ2VzID0gWy4uLnByZXZdXG4gICAgICAgIG5ld01lc3NhZ2VzW2V4aXN0aW5nTWVzc2FnZUluZGV4XSA9IG1lc3NhZ2VcbiAgICAgICAgcmV0dXJuIG5ld01lc3NhZ2VzXG4gICAgICB9XG4gICAgICByZXR1cm4gWy4uLnByZXYsIG1lc3NhZ2VdXG4gICAgfSlcbiAgfSwgW10pXG5cbiAgY29uc3QgcmVtb3ZlTWVzc2FnZSA9IHVzZUNhbGxiYWNrKChtZXNzYWdlSWQ6IHN0cmluZykgPT4ge1xuICAgIHNldE1lc3NhZ2VzKHByZXYgPT4gcHJldi5maWx0ZXIobXNnID0+IG1zZy5pZCAhPT0gbWVzc2FnZUlkKSlcbiAgfSwgW10pXG5cbiAgcmV0dXJuIHtcbiAgICBsb2FkaW5nTWVzc2FnZXMsXG4gICAgbWVzc2FnZXMsXG4gICAgaGFzTW9yZU1lc3NhZ2VzOiAhIWxhc3RFdmFsdWF0ZWRLZXksXG4gICAgaXNMb2FkaW5nTW9yZU1lc3NhZ2VzLFxuICAgIGxvYWRNZXNzYWdlcyxcbiAgICBsb2FkTW9yZU1lc3NhZ2VzLFxuICAgIGFkZE1lc3NhZ2UsXG4gICAgcmVtb3ZlTWVzc2FnZSxcbiAgICBoYW5kbGVTY3JvbGwsXG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUFBO0FBQ0EsU0FBU0EsV0FBVyxFQUFFQyxRQUFRLEVBQUVDLE1BQU0sRUFBRUMsU0FBUyxRQUFRLE9BQU87QUFDaEUsU0FBU0MsV0FBVyxRQUFRLGdCQUFnQjtBQUU1QyxTQUFTQyxtQkFBbUIsUUFBUSw0QkFBNEI7QUFDaEUsT0FBT0MsSUFBSSxNQUFNLHFCQUFxQjtBQUV0QyxTQUFTQyxnQkFBZ0IsUUFBUSw4QkFBOEI7QUFDL0QsU0FBU0MsSUFBSSxRQUFRLFNBQVM7QUFDOUIsU0FBU0MsT0FBTyxRQUFRLHdCQUF3QjtBQUNoRCxTQUFTQyxpQkFBaUIsUUFBUSxzQkFBc0I7QUFDeEQsU0FBU0Msc0JBQXNCLFFBQVEsMEJBQTBCO0FBQ2pFLFNBQVNDLFVBQVUsUUFBUSxrQkFBa0I7QUFDN0MsU0FBU0Msa0NBQWtDLFFBQVEsc0NBQXNDO0FBRXpGLElBQU1DLHdCQUF3QixHQUFHLFNBQTNCQSx3QkFBd0JBLENBQUlDLE9BQWUsRUFBRUMsVUFBa0IsRUFBYTtFQUNoRixJQUFNQyxZQUFZLEdBQUcsSUFBSUMsTUFBTSxDQUFDUCxzQkFBc0IsRUFBRSxHQUFHLENBQUM7RUFDNUQsT0FBT0ksT0FBTyxDQUFDSSxPQUFPLENBQUNGLFlBQVksRUFBRSxVQUFBRyxHQUFHO0lBQUEs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
|
|
@@ -0,0 +1,235 @@
|
|
|
1
|
+
import _defineProperty from "@babel/runtime/helpers/defineProperty";
|
|
2
|
+
import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
|
|
3
|
+
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
4
|
+
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
5
|
+
import { useCallback, useEffect, useMemo, useState } from 'react';
|
|
6
|
+
import { ContextMentionPopover, MAIA_TASK_PANEL_OVERLAY_ATTR, SCMPAnchor } from '../components/atoms/ContextMentionPopover';
|
|
7
|
+
import { useMaiaTaskPanelZIndex } from './useMaiaTaskPanelZIndex';
|
|
8
|
+
import { useGlobalContext } from '../context/global-context';
|
|
9
|
+
import { useT } from './useT';
|
|
10
|
+
// eslint-disable-next-line import/no-cycle
|
|
11
|
+
import { useEntitySearch } from './useEntitySearch';
|
|
12
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
13
|
+
/** Tipos pineables como contexto persistente (RFC §6: no incluye `user`, que es solo mención). */
|
|
14
|
+
var PIN_ALLOWED_TYPES = ['client', 'project', 'task'];
|
|
15
|
+
var PIN_DEFAULT_TYPE = 'project';
|
|
16
|
+
/**
|
|
17
|
+
* Segundo punto de entrada del buscador de contexto (RFC §6): el mismo motor
|
|
18
|
+
* (`useEntitySearch` + `ContextMentionPopover`) pero el commit fija un **pin**
|
|
19
|
+
* persistente en el contexto global en vez de insertar una mención.
|
|
20
|
+
*
|
|
21
|
+
* Jerarquía mono-contexto (RFC §5.1): un pin a la vez; fijar uno reemplaza al
|
|
22
|
+
* anterior y arrastra su scope hacia arriba (tarea ⇒ proyecto+cliente, etc.).
|
|
23
|
+
*/
|
|
24
|
+
export var useContextPinPopover = function useContextPinPopover(_ref) {
|
|
25
|
+
var popoverAnchorRef = _ref.popoverAnchorRef,
|
|
26
|
+
topAnchorRef = _ref.topAnchorRef,
|
|
27
|
+
triggerRef = _ref.triggerRef,
|
|
28
|
+
enabledTypes = _ref.enabledTypes,
|
|
29
|
+
onPinned = _ref.onPinned;
|
|
30
|
+
var _useT = useT(),
|
|
31
|
+
t = _useT.t;
|
|
32
|
+
var _useGlobalContext = useGlobalContext(),
|
|
33
|
+
setProject = _useGlobalContext.setProject,
|
|
34
|
+
setClient = _useGlobalContext.setClient,
|
|
35
|
+
setTask = _useGlobalContext.setTask,
|
|
36
|
+
setChipsProject = _useGlobalContext.setChipsProject;
|
|
37
|
+
var zIndex = useMaiaTaskPanelZIndex(1200, 'overlay');
|
|
38
|
+
var allowedTypes = enabledTypes && enabledTypes.length > 0 ? enabledTypes : PIN_ALLOWED_TYPES;
|
|
39
|
+
var _useState = useState(allowedTypes.includes(PIN_DEFAULT_TYPE) ? PIN_DEFAULT_TYPE : allowedTypes[0]),
|
|
40
|
+
_useState2 = _slicedToArray(_useState, 2),
|
|
41
|
+
activeType = _useState2[0],
|
|
42
|
+
setActiveType = _useState2[1];
|
|
43
|
+
var _useState3 = useState(false),
|
|
44
|
+
_useState4 = _slicedToArray(_useState3, 2),
|
|
45
|
+
open = _useState4[0],
|
|
46
|
+
setOpen = _useState4[1];
|
|
47
|
+
var _useState5 = useState({
|
|
48
|
+
bottom: 0,
|
|
49
|
+
left: 0,
|
|
50
|
+
width: 0
|
|
51
|
+
}),
|
|
52
|
+
_useState6 = _slicedToArray(_useState5, 2),
|
|
53
|
+
pos = _useState6[0],
|
|
54
|
+
setPos = _useState6[1];
|
|
55
|
+
|
|
56
|
+
// Scope sin restricción: desde el botón se busca libremente cualquier entidad (modo global).
|
|
57
|
+
var _useEntitySearch = useEntitySearch(activeType),
|
|
58
|
+
items = _useEntitySearch.items,
|
|
59
|
+
loading = _useEntitySearch.loading,
|
|
60
|
+
error = _useEntitySearch.error,
|
|
61
|
+
hideRecentsLabel = _useEntitySearch.hideRecentsLabel,
|
|
62
|
+
hasMore = _useEntitySearch.hasMore,
|
|
63
|
+
isLoadingMore = _useEntitySearch.isLoadingMore,
|
|
64
|
+
loadMore = _useEntitySearch.loadMore,
|
|
65
|
+
searchValue = _useEntitySearch.searchValue,
|
|
66
|
+
updateSearchValue = _useEntitySearch.updateSearchValue;
|
|
67
|
+
var positionPopover = useCallback(function () {
|
|
68
|
+
var _popoverAnchorRef$cur, _topAnchorRef$current, _topRect$top;
|
|
69
|
+
var inputRect = (_popoverAnchorRef$cur = popoverAnchorRef.current) === null || _popoverAnchorRef$cur === void 0 ? void 0 : _popoverAnchorRef$cur.getBoundingClientRect();
|
|
70
|
+
if (!inputRect || inputRect.width <= 0) return;
|
|
71
|
+
var topRect = topAnchorRef === null || topAnchorRef === void 0 || (_topAnchorRef$current = topAnchorRef.current) === null || _topAnchorRef$current === void 0 ? void 0 : _topAnchorRef$current.getBoundingClientRect();
|
|
72
|
+
var anchorTop = (_topRect$top = topRect === null || topRect === void 0 ? void 0 : topRect.top) !== null && _topRect$top !== void 0 ? _topRect$top : inputRect.top;
|
|
73
|
+
var viewportW = window.innerWidth;
|
|
74
|
+
var viewportH = window.innerHeight;
|
|
75
|
+
var width = inputRect.width;
|
|
76
|
+
var left = Math.max(8, Math.min(viewportW - width - 8, inputRect.left));
|
|
77
|
+
/** ~4px sobre el borde superior de la barra de contexto (chip), no del input. */
|
|
78
|
+
setPos({
|
|
79
|
+
width: width,
|
|
80
|
+
left: left,
|
|
81
|
+
bottom: viewportH - anchorTop + 4
|
|
82
|
+
});
|
|
83
|
+
}, [popoverAnchorRef, topAnchorRef]);
|
|
84
|
+
var close = useCallback(function () {
|
|
85
|
+
setOpen(false);
|
|
86
|
+
updateSearchValue('');
|
|
87
|
+
}, [updateSearchValue]);
|
|
88
|
+
var toggle = useCallback(function () {
|
|
89
|
+
setOpen(function (prev) {
|
|
90
|
+
if (prev) {
|
|
91
|
+
updateSearchValue('');
|
|
92
|
+
return false;
|
|
93
|
+
}
|
|
94
|
+
positionPopover();
|
|
95
|
+
return true;
|
|
96
|
+
});
|
|
97
|
+
}, [positionPopover, updateSearchValue]);
|
|
98
|
+
var commitPin = useCallback(function (item) {
|
|
99
|
+
var _raw$clientName;
|
|
100
|
+
var raw = item.raw;
|
|
101
|
+
var clientId = raw.clientId != null ? Number(raw.clientId) : undefined;
|
|
102
|
+
var clientName = (_raw$clientName = raw.clientName) !== null && _raw$clientName !== void 0 ? _raw$clientName : undefined;
|
|
103
|
+
console.info('[useContextPinPopover] commitPin — ASIGNANDO contexto:', {
|
|
104
|
+
type: item.type,
|
|
105
|
+
rawId: raw.id,
|
|
106
|
+
rawName: raw.name,
|
|
107
|
+
projectName: raw.projectName,
|
|
108
|
+
clientId: clientId
|
|
109
|
+
});
|
|
110
|
+
if (item.type === 'client') {
|
|
111
|
+
var _raw$totalProyectos;
|
|
112
|
+
setProject(null);
|
|
113
|
+
setTask(null);
|
|
114
|
+
setChipsProject(null);
|
|
115
|
+
setClient({
|
|
116
|
+
id: Number(raw.id),
|
|
117
|
+
name: raw.name,
|
|
118
|
+
totalProyectos: (_raw$totalProyectos = raw.totalProyectos) !== null && _raw$totalProyectos !== void 0 ? _raw$totalProyectos : undefined
|
|
119
|
+
});
|
|
120
|
+
} else if (item.type === 'project') {
|
|
121
|
+
setTask(null);
|
|
122
|
+
setProject(_objectSpread(_objectSpread(_objectSpread({
|
|
123
|
+
id: Number(raw.id),
|
|
124
|
+
name: raw.name
|
|
125
|
+
}, clientId != null ? {
|
|
126
|
+
clientId: clientId
|
|
127
|
+
} : {}), raw.feeId != null ? {
|
|
128
|
+
feeId: raw.feeId
|
|
129
|
+
} : {}), clientId != null ? {
|
|
130
|
+
client: {
|
|
131
|
+
id: clientId,
|
|
132
|
+
name: clientName !== null && clientName !== void 0 ? clientName : ''
|
|
133
|
+
}
|
|
134
|
+
} : {}));
|
|
135
|
+
// chipsProject hace visible el pin en el chip del orquestador (RFC §7).
|
|
136
|
+
setChipsProject({
|
|
137
|
+
projectId: String(raw.id),
|
|
138
|
+
projectName: raw.name,
|
|
139
|
+
clientName: clientName !== null && clientName !== void 0 ? clientName : ''
|
|
140
|
+
});
|
|
141
|
+
setClient(clientId != null ? {
|
|
142
|
+
id: clientId,
|
|
143
|
+
name: clientName !== null && clientName !== void 0 ? clientName : ''
|
|
144
|
+
} : null);
|
|
145
|
+
} else if (item.type === 'task') {
|
|
146
|
+
// El item de tarea no trae projectId fiable; subimos lo disponible (proyecto por nombre, cliente por id).
|
|
147
|
+
setTask(_objectSpread({
|
|
148
|
+
id: raw.id,
|
|
149
|
+
name: raw.name
|
|
150
|
+
}, clientId != null ? {
|
|
151
|
+
clientId: clientId
|
|
152
|
+
} : {}));
|
|
153
|
+
setChipsProject(raw.projectName ? {
|
|
154
|
+
projectId: '',
|
|
155
|
+
projectName: raw.projectName,
|
|
156
|
+
clientName: clientName !== null && clientName !== void 0 ? clientName : ''
|
|
157
|
+
} : null);
|
|
158
|
+
if (clientId != null) setClient({
|
|
159
|
+
id: clientId,
|
|
160
|
+
name: clientName !== null && clientName !== void 0 ? clientName : ''
|
|
161
|
+
});
|
|
162
|
+
}
|
|
163
|
+
onPinned === null || onPinned === void 0 || onPinned(item);
|
|
164
|
+
close();
|
|
165
|
+
}, [setProject, setClient, setTask, setChipsProject, onPinned, close]);
|
|
166
|
+
useEffect(function () {
|
|
167
|
+
if (!open) return undefined;
|
|
168
|
+
var handler = function handler() {
|
|
169
|
+
return positionPopover();
|
|
170
|
+
};
|
|
171
|
+
window.addEventListener('scroll', handler, true);
|
|
172
|
+
window.addEventListener('resize', handler);
|
|
173
|
+
return function () {
|
|
174
|
+
window.removeEventListener('scroll', handler, true);
|
|
175
|
+
window.removeEventListener('resize', handler);
|
|
176
|
+
};
|
|
177
|
+
}, [open, positionPopover]);
|
|
178
|
+
useEffect(function () {
|
|
179
|
+
if (!open) return undefined;
|
|
180
|
+
var handlePointerDownOutside = function handlePointerDownOutside(mouseEvent) {
|
|
181
|
+
var _popoverAnchorRef$cur2, _triggerRef$current, _closest, _ref2;
|
|
182
|
+
var target = mouseEvent.target;
|
|
183
|
+
if (!target) return;
|
|
184
|
+
if ((_popoverAnchorRef$cur2 = popoverAnchorRef.current) !== null && _popoverAnchorRef$cur2 !== void 0 && _popoverAnchorRef$cur2.contains(target)) return;
|
|
185
|
+
if (triggerRef !== null && triggerRef !== void 0 && (_triggerRef$current = triggerRef.current) !== null && _triggerRef$current !== void 0 && _triggerRef$current.contains(target)) return;
|
|
186
|
+
var overlay = target === null || target === void 0 || (_closest = (_ref2 = target).closest) === null || _closest === void 0 ? void 0 : _closest.call(_ref2, "[".concat(MAIA_TASK_PANEL_OVERLAY_ATTR, "]"));
|
|
187
|
+
if (overlay) return;
|
|
188
|
+
close();
|
|
189
|
+
};
|
|
190
|
+
document.addEventListener('mousedown', handlePointerDownOutside);
|
|
191
|
+
return function () {
|
|
192
|
+
return document.removeEventListener('mousedown', handlePointerDownOutside);
|
|
193
|
+
};
|
|
194
|
+
}, [open, close, popoverAnchorRef, triggerRef]);
|
|
195
|
+
var popoverNode = useMemo(function () {
|
|
196
|
+
if (!open) return null;
|
|
197
|
+
return /*#__PURE__*/_jsx(SCMPAnchor, _objectSpread(_objectSpread({}, _defineProperty({}, MAIA_TASK_PANEL_OVERLAY_ATTR, '')), {}, {
|
|
198
|
+
$bottom: pos.bottom,
|
|
199
|
+
$left: pos.left,
|
|
200
|
+
$width: pos.width,
|
|
201
|
+
$zIndex: zIndex,
|
|
202
|
+
onMouseDown: function onMouseDown(e) {
|
|
203
|
+
return e.stopPropagation();
|
|
204
|
+
},
|
|
205
|
+
children: /*#__PURE__*/_jsx(ContextMentionPopover, {
|
|
206
|
+
allowedTypes: allowedTypes,
|
|
207
|
+
activeType: activeType,
|
|
208
|
+
onTypeChange: setActiveType,
|
|
209
|
+
items: items,
|
|
210
|
+
loading: loading,
|
|
211
|
+
error: error,
|
|
212
|
+
hideRecentsLabel: hideRecentsLabel,
|
|
213
|
+
hasMore: hasMore,
|
|
214
|
+
isLoadingMore: isLoadingMore,
|
|
215
|
+
onReachListEnd: loadMore,
|
|
216
|
+
searchValue: searchValue,
|
|
217
|
+
onItemSelected: commitPin,
|
|
218
|
+
showSearchInput: true,
|
|
219
|
+
hideTabPrefix: true,
|
|
220
|
+
searchPlaceholder: t('contextPin.searchPlaceholder', {
|
|
221
|
+
defaultValue: 'Buscar contexto…'
|
|
222
|
+
}),
|
|
223
|
+
onSearchChange: updateSearchValue,
|
|
224
|
+
onRequestClose: close
|
|
225
|
+
})
|
|
226
|
+
}));
|
|
227
|
+
}, [open, pos, zIndex, allowedTypes, activeType, items, loading, error, hideRecentsLabel, hasMore, isLoadingMore, loadMore, searchValue, commitPin, updateSearchValue, close, t]);
|
|
228
|
+
return {
|
|
229
|
+
open: open,
|
|
230
|
+
toggle: toggle,
|
|
231
|
+
close: close,
|
|
232
|
+
popoverNode: popoverNode
|
|
233
|
+
};
|
|
234
|
+
};
|
|
235
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1c2VDYWxsYmFjayIsInVzZUVmZmVjdCIsInVzZU1lbW8iLCJ1c2VTdGF0ZSIsIkNvbnRleHRNZW50aW9uUG9wb3ZlciIsIk1BSUFfVEFTS19QQU5FTF9PVkVSTEFZX0FUVFIiLCJTQ01QQW5jaG9yIiwidXNlTWFpYVRhc2tQYW5lbFpJbmRleCIsInVzZUdsb2JhbENvbnRleHQiLCJ1c2VUIiwidXNlRW50aXR5U2VhcmNoIiwianN4IiwiX2pzeCIsIlBJTl9BTExPV0VEX1RZUEVTIiwiUElOX0RFRkFVTFRfVFlQRSIsInVzZUNvbnRleHRQaW5Qb3BvdmVyIiwiX3JlZiIsInBvcG92ZXJBbmNob3JSZWYiLCJ0b3BBbmNob3JSZWYiLCJ0cmlnZ2VyUmVmIiwiZW5hYmxlZFR5cGVzIiwib25QaW5uZWQiLCJfdXNlVCIsInQiLCJfdXNlR2xvYmFsQ29udGV4dCIsInNldFByb2plY3QiLCJzZXRDbGllbnQiLCJzZXRUYXNrIiwic2V0Q2hpcHNQcm9qZWN0IiwiekluZGV4IiwiYWxsb3dlZFR5cGVzIiwibGVuZ3RoIiwiX3VzZVN0YXRlIiwiaW5jbHVkZXMiLCJfdXNlU3RhdGUyIiwiX3NsaWNlZFRvQXJyYXkiLCJhY3RpdmVUeXBlIiwic2V0QWN0aXZlVHlwZSIsIl91c2VTdGF0ZTMiLCJfdXNlU3RhdGU0Iiwib3BlbiIsInNldE9wZW4iLCJfdXNlU3RhdGU1IiwiYm90dG9tIiwibGVmdCIsIndpZHRoIiwiX3VzZVN0YXRlNiIsInBvcyIsInNldFBvcyIsIl91c2VFbnRpdHlTZWFyY2giLCJpdGVtcyIsImxvYWRpbmciLCJlcnJvciIsImhpZGVSZWNlbnRzTGFiZWwiLCJoYXNNb3JlIiwiaXNMb2FkaW5nTW9yZSIsImxvYWRNb3JlIiwic2VhcmNoVmFsdWUiLCJ1cGRhdGVTZWFyY2hWYWx1ZSIsInBvc2l0aW9uUG9wb3ZlciIsIl9wb3BvdmVyQW5jaG9yUmVmJGN1ciIsIl90b3BBbmNob3JSZWYkY3VycmVudCIsIl90b3BSZWN0JHRvcCIsImlucHV0UmVjdCIsImN1cnJlbnQiLCJnZXRCb3VuZGluZ0NsaWVudFJlY3QiLCJ0b3BSZWN0IiwiYW5jaG9yVG9wIiwidG9wIiwidmlld3BvcnRXIiwid2luZG93IiwiaW5uZXJXaWR0aCIsInZpZXdwb3J0SCIsImlubmVySGVpZ2h0IiwiTWF0aCIsIm1heCIsIm1pbiIsImNsb3NlIiwidG9nZ2xlIiwicHJldiIsImNvbW1pdFBpbiIsIml0ZW0iLCJfcmF3JGNsaWVudE5hbWUiLCJyYXciLCJjbGllbnRJZCIsIk51bWJlciIsInVuZGVmaW5lZCIsImNsaWVudE5hbWUiLCJjb25zb2xlIiwiaW5mbyIsInR5cGUiLCJyYXdJZCIsImlkIiwicmF3TmFtZSIsIm5hbWUiLCJwcm9qZWN0TmFtZSIsIl9yYXckdG90YWxQcm95ZWN0b3MiLCJ0b3RhbFByb3llY3RvcyIsIl9vYmplY3RTcHJlYWQiLCJmZWVJZCIsImNsaWVudCIsInByb2plY3RJZCIsIlN0cmluZyIsImhhbmRsZXIiLCJhZGRFdmVudExpc3RlbmVyIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsImhhbmRsZVBvaW50ZXJEb3duT3V0c2lkZSIsIm1vdXNlRXZlbnQiLCJfcG9wb3ZlckFuY2hvclJlZiRjdXIyIiwiX3RyaWdnZXJSZWYkY3VycmVudCIsIl9jbG9zZXN0IiwiX3JlZjIiLCJ0YXJnZXQiLCJjb250YWlucyIsIm92ZXJsYXkiLCJjbG9zZXN0IiwiY2FsbCIsImNvbmNhdCIsImRvY3VtZW50IiwicG9wb3Zlck5vZGUiLCJfZGVmaW5lUHJvcGVydHkiLCIkYm90dG9tIiwiJGxlZnQiLCIkd2lkdGgiLCIkekluZGV4Iiwib25Nb3VzZURvd24iLCJlIiwic3RvcFByb3BhZ2F0aW9uIiwiY2hpbGRyZW4iLCJvblR5cGVDaGFuZ2UiLCJvblJlYWNoTGlzdEVuZCIsIm9uSXRlbVNlbGVjdGVkIiwic2hvd1NlYXJjaElucHV0IiwiaGlkZVRhYlByZWZpeCIsInNlYXJjaFBsYWNlaG9sZGVyIiwiZGVmYXVsdFZhbHVlIiwib25TZWFyY2hDaGFuZ2UiLCJvblJlcXVlc3RDbG9zZSJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ob29rcy91c2VDb250ZXh0UGluUG9wb3Zlci50c3giXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUmVhY3ROb2RlLCBSZWZPYmplY3QsIHVzZUNhbGxiYWNrLCB1c2VFZmZlY3QsIHVzZU1lbW8sIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQge1xuICBDb250ZXh0TWVudGlvblBvcG92ZXIsXG4gIE1BSUFfVEFTS19QQU5FTF9PVkVSTEFZX0FUVFIsXG4gIFNDTVBBbmNob3IsXG59IGZyb20gJy4uL2NvbXBvbmVudHMvYXRvbXMvQ29udGV4dE1lbnRpb25Qb3BvdmVyJ1xuaW1wb3J0IHsgdXNlTWFpYVRhc2tQYW5lbFpJbmRleCB9IGZyb20gJy4vdXNlTWFpYVRhc2tQYW5lbFpJbmRleCdcbmltcG9ydCB7IHVzZUdsb2JhbENvbnRleHQgfSBmcm9tICcuLi9jb250ZXh0L2dsb2JhbC1jb250ZXh0J1xuaW1wb3J0IHsgdXNlVCB9IGZyb20gJy4vdXNlVCdcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tY3ljbGVcbmltcG9ydCB7IHVzZUVudGl0eVNlYXJjaCB9IGZyb20gJy4vdXNlRW50aXR5U2VhcmNoJ1xuaW1wb3J0IHsgQ29udGV4dEVudGl0eVR5cGUsIENvbnRleHRNZW50aW9uSXRlbSB9IGZyb20gJy4uL3R5cGVzL2NvbnRleHRNZW50aW9uJ1xuXG4vKiogVGlwb3MgcGluZWFibGVzIGNvbW8gY29udGV4dG8gcGVyc2lzdGVudGUgKFJGQyDCpzY6IG5vIGluY2x1eWUgYHVzZXJgLCBxdWUgZXMgc29sbyBtZW5jacOzbikuICovXG5jb25zdCBQSU5fQUxMT1dFRF9UWVBFUzogQ29udGV4dEVudGl0eVR5cGVbXSA9IFsnY2xpZW50JywgJ3Byb2plY3QnLCAndGFzayddXG5jb25zdCBQSU5fREVGQVVMVF9UWVBFOiBDb250ZXh0RW50aXR5VHlwZSA9ICdwcm9qZWN0J1xuXG5leHBvcnQgdHlwZSBVc2VDb250ZXh0UGluUG9wb3Zlck9wdGlvbnMgPSB7XG4gIC8qKiBXcmFwcGVyIGRlbCBNQUlBSW5wdXQ6IGRlZmluZSBhbmNobyB5IGFsaW5lYWNpw7NuIGhvcml6b250YWwgKGlndWFsIHF1ZSBALW1lbnRpb25zKS4gKi9cbiAgcG9wb3ZlckFuY2hvclJlZjogUmVmT2JqZWN0PEhUTUxFbGVtZW50IHwgbnVsbD5cbiAgLyoqIEZpbGEgZGVsIGNoaXAgLyBiYXJyYSBkZSBjb250ZXh0bzogZGVmaW5lIGVsIGJvcmRlIHN1cGVyaW9yIHZlcnRpY2FsIGRlbCBwb3BvdmVyLiAqL1xuICB0b3BBbmNob3JSZWY/OiBSZWZPYmplY3Q8SFRNTEVsZW1lbnQgfCBudWxsPlxuICAvKiogQm90w7NuIFwiKyBDb250ZXh0b1wiOyBubyBjZXJyYXIgYWwgaGFjZXIgY2xpY2sgZW4gZWwgdHJpZ2dlci4gKi9cbiAgdHJpZ2dlclJlZj86IFJlZk9iamVjdDxIVE1MRWxlbWVudCB8IG51bGw+XG4gIC8qKiBPdmVycmlkZSBkZWwgc2V0IGRlIHRhYnMgcGluZWFibGVzOyBwb3IgZGVmZWN0byBjbGllbnRlL3Byb3llY3RvL3RhcmVhLiAqL1xuICBlbmFibGVkVHlwZXM/OiBDb250ZXh0RW50aXR5VHlwZVtdXG4gIC8qKiBDYWxsYmFjayB0cmFzIGZpamFyIHVuIGNvbnRleHRvIChhbmFseXRpY3MgLyBjaWVycmUgZXh0ZXJubykuICovXG4gIG9uUGlubmVkPzogKGl0ZW06IENvbnRleHRNZW50aW9uSXRlbSkgPT4gdm9pZFxufVxuXG5leHBvcnQgdHlwZSBVc2VDb250ZXh0UGluUG9wb3ZlclJldHVybiA9IHtcbiAgb3BlbjogYm9vbGVhblxuICAvKiogQWJyZS9jaWVycmEgZWwgcG9wb3ZlciAoaGFuZGxlciBkZWwgYm90w7NuIFwiKyBDb250ZXh0b1wiKS4gKi9cbiAgdG9nZ2xlOiAoKSA9PiB2b2lkXG4gIGNsb3NlOiAoKSA9PiB2b2lkXG4gIC8qKiBOb2RvIGRlbCBwb3BvdmVyOyBlbCBjb25zdW1lciBkZWJlIHBvcnRhcmxvIGNvbiBgY3JlYXRlUG9ydGFsYC4gKi9cbiAgcG9wb3Zlck5vZGU6IFJlYWN0Tm9kZSB8IG51bGxcbn1cblxuLyoqXG4gKiBTZWd1bmRvIHB1bnRvIGRlIGVudHJhZGEgZGVsIGJ1c2NhZG9yIGRlIGNvbnRleHRvIChSRkMgwqc2KTogZWwgbWlzbW8gbW90b3JcbiAqIChgdXNlRW50aXR5U2VhcmNoYCArIGBDb250ZXh0TWVudGlvblBvcG92ZXJgKSBwZXJvIGVsIGNvbW1pdCBmaWphIHVuICoqcGluKipcbiAqIHBlcnNpc3RlbnRlIGVuIGVsIGNvbnRleHRvIGdsb2JhbCBlbiB2ZXogZGUgaW5zZXJ0YXIgdW5hIG1lbmNpw7NuLlxuICpcbiAqIEplcmFycXXDrWEgbW9uby1jb250ZXh0byAoUkZDIMKnNS4xKTogdW4gcGluIGEgbGEgdmV6OyBmaWphciB1bm8gcmVlbXBsYXphIGFsXG4gKiBhbnRlcmlvciB5IGFycmFzdHJhIHN1IHNjb3BlIGhhY2lhIGFycmliYSAodGFyZWEg4oeSIHByb3llY3RvK2NsaWVudGUsIGV0Yy4pLlxuICovXG5leHBvcnQgY29uc3QgdXNlQ29udGV4dFBpblBvcG92ZXIgPSAoe1xuICBwb3BvdmVyQW5jaG9yUmVmLFxuICB0b3BBbmNob3JSZWYsXG4gIHRyaWdnZXJSZWYsXG4gIGVuYWJsZWRUeXBlcyxcbiAgb25QaW5uZWQsXG59OiBVc2VDb250ZXh0UGluUG9wb3Zlck9wdGlvbnMpOiBVc2VDb250ZXh0UGluUG9wb3ZlclJldHVybiA9PiB7XG4gIGNvbnN0IHsgdCB9ID0gdXNlVCgpXG4gIGNvbnN0IHsgc2V0UHJvamVjdCwgc2V0Q2xpZW50LCBzZXRUYXNrLCBzZXRDaGlwc1Byb2plY3QgfSA9IHVzZUdsb2JhbENvbnRleHQoKVxuICBjb25zdCB6SW5kZXggPSB1c2VNYWlhVGFza1BhbmVsWkluZGV4KDEyMDAsICdvdmVybGF5JylcblxuICBjb25zdCBhbGxvd2VkVHlwZXMgPSBlbmFibGVkVHlwZXMgJiYgZW5hYmxlZFR5cGVzLmxlbmd0aCA+IDAgPyBlbmFibGVkVHlwZXMgOiBQSU5fQUxMT1dFRF9UWVBFU1xuICBjb25zdCBbYWN0aXZlVHlwZSwgc2V0QWN0aXZlVHlwZV0gPSB1c2VTdGF0ZTxDb250ZXh0RW50aXR5VHlwZT4oXG4gICAgYWxsb3dlZFR5cGVzLmluY2x1ZGVzKFBJTl9ERUZBVUxUX1RZUEUpID8gUElOX0RFRkFVTFRfVFlQRSA6IGFsbG93ZWRUeXBlc1swXVxuICApXG4gIGNvbnN0IFtvcGVuLCBzZXRPcGVuXSA9IHVzZVN0YXRlKGZhbHNlKVxuICBjb25zdCBbcG9zLCBzZXRQb3NdID0gdXNlU3RhdGU8eyBib3R0b206IG51bWJlcjsgbGVmdDogbnVtYmVyOyB3aWR0aDogbnVtYmVyIH0+KHsgYm90dG9tOiAwLCBsZWZ0OiAwLCB3aWR0aDogMCB9KVxuXG4gIC8vIFNjb3BlIHNpbiByZXN0cmljY2nDs246IGRlc2RlIGVsIGJvdMOzbiBzZSBidXNjYSBsaWJyZW1lbnRlIGN1YWxxdWllciBlbnRpZGFkIChtb2RvIGdsb2JhbCkuXG4gIGNvbnN0IHsgaXRlbXMsIGxvYWRpbmcsIGVycm9yLCBoaWRlUmVjZW50c0xhYmVsLCBoYXNNb3JlLCBpc0xvYWRpbmdNb3JlLCBsb2FkTW9yZSwgc2VhcmNoVmFsdWUsIHVwZGF0ZVNlYXJjaFZhbHVlIH0gPVxuICAgIHVzZUVudGl0eVNlYXJjaChhY3RpdmVUeXBlKVxuXG4gIGNvbnN0IHBvc2l0aW9uUG9wb3ZlciA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBjb25zdCBpbnB1dFJlY3QgPSBwb3BvdmVyQW5jaG9yUmVmLmN1cnJlbnQ/LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpXG4gICAgaWYgKCFpbnB1dFJlY3QgfHwgaW5wdXRSZWN0LndpZHRoIDw9IDApIHJldHVyblxuICAgIGNvbnN0IHRvcFJlY3QgPSB0b3BBbmNob3JSZWY/LmN1cnJlbnQ/LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpXG4gICAgY29uc3QgYW5jaG9yVG9wID0gdG9wUmVjdD8udG9wID8/IGlucHV0UmVjdC50b3BcbiAgICBjb25zdCB2aWV3cG9ydFcgPSB3aW5kb3cuaW5uZXJXaWR0aFxuICAgIGNvbnN0IHZpZXdwb3J0SCA9IHdpbmRvdy5pbm5lckhlaWdodFxuICAgIGNvbnN0IHsgd2lkdGggfSA9IGlucHV0UmVjdFxuICAgIGNvbnN0IGxlZnQgPSBNYXRoLm1heCg4LCBNYXRoLm1pbih2aWV3cG9ydFcgLSB3aWR0aCAtIDgsIGlucHV0UmVjdC5sZWZ0KSlcbiAgICAvKiogfjRweCBzb2JyZSBlbCBib3JkZSBzdXBlcmlvciBkZSBsYSBiYXJyYSBkZSBjb250ZXh0byAoY2hpcCksIG5vIGRlbCBpbnB1dC4gKi9cbiAgICBzZXRQb3MoeyB3aWR0aCwgbGVmdCwgYm90dG9tOiB2aWV3cG9ydEggLSBhbmNob3JUb3AgKyA0IH0pXG4gIH0sIFtwb3BvdmVyQW5jaG9yUmVmLCB0b3BBbmNob3JSZWZdKVxuXG4gIGNvbnN0IGNsb3NlID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIHNldE9wZW4oZmFsc2UpXG4gICAgdXBkYXRlU2VhcmNoVmFsdWUoJycpXG4gIH0sIFt1cGRhdGVTZWFyY2hWYWx1ZV0pXG5cbiAgY29uc3QgdG9nZ2xlID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIHNldE9wZW4ocHJldiA9PiB7XG4gICAgICBpZiAocHJldikge1xuICAgICAgICB1cGRhdGVTZWFyY2hWYWx1ZSgnJylcbiAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICB9XG4gICAgICBwb3NpdGlvblBvcG92ZXIoKVxuICAgICAgcmV0dXJuIHRydWVcbiAgICB9KVxuICB9LCBbcG9zaXRpb25Qb3BvdmVyLCB1cGRhdGVTZWFyY2hWYWx1ZV0pXG5cbiAgY29uc3QgY29tbWl0UGluID0gdXNlQ2FsbGJhY2soXG4gICAgKGl0ZW06IENvbnRleHRNZW50aW9uSXRlbSkgPT4ge1xuICAgICAgY29uc3QgeyByYXcgfSA9IGl0ZW1cbiAgICAgIGNvbnN0IGNsaWVudElkID0gcmF3LmNsaWVudElkICE9IG51bGwgPyBOdW1iZXIocmF3LmNsaWVudElkKSA6IHVuZGVmaW5lZFxuICAgICAgY29uc3QgY2xpZW50TmFtZSA9IHJhdy5jbGllbnROYW1lID8/IHVuZGVmaW5lZFxuXG4gICAgICBjb25zb2xlLmluZm8oJ1t1c2VDb250ZXh0UGluUG9wb3Zlcl0gY29tbWl0UGluIOKAlCBBU0lHTkFORE8gY29udGV4dG86Jywge1xuICAgICAgICB0eXBlOiBpdGVtLnR5cGUsXG4gICAgICAgIHJhd0lkOiByYXcuaWQsXG4gICAgICAgIHJhd05hbWU6IHJhdy5uYW1lLFxuICAgICAgICBwcm9qZWN0TmFtZTogcmF3LnByb2plY3ROYW1lLFxuICAgICAgICBjbGllbnRJZCxcbiAgICAgIH0pXG5cbiAgICAgIGlmIChpdGVtLnR5cGUgPT09ICdjbGllbnQnKSB7XG4gICAgICAgIHNldFByb2plY3QobnVsbClcbiAgICAgICAgc2V0VGFzayhudWxsKVxuICAgICAgICBzZXRDaGlwc1Byb2plY3QobnVsbClcbiAgICAgICAgc2V0Q2xpZW50KHsgaWQ6IE51bWJlcihyYXcuaWQpLCBuYW1lOiByYXcubmFtZSwgdG90YWxQcm95ZWN0b3M6IHJhdy50b3RhbFByb3llY3RvcyA/PyB1bmRlZmluZWQgfSlcbiAgICAgIH0gZWxzZSBpZiAoaXRlbS50eXBlID09PSAncHJvamVjdCcpIHtcbiAgICAgICAgc2V0VGFzayhudWxsKVxuICAgICAgICBzZXRQcm9qZWN0KHtcbiAgICAgICAgICBpZDogTnVtYmVyKHJhdy5pZCksXG4gICAgICAgICAgbmFtZTogcmF3Lm5hbWUsXG4gICAgICAgICAgLi4uKGNsaWVudElkICE9IG51bGwgPyB7IGNsaWVudElkIH0gOiB7fSksXG4gICAgICAgICAgLi4uKHJhdy5mZWVJZCAhPSBudWxsID8geyBmZWVJZDogcmF3LmZlZUlkIH0gOiB7fSksXG4gICAgICAgICAgLi4uKGNsaWVudElkICE9IG51bGwgPyB7IGNsaWVudDogeyBpZDogY2xpZW50SWQsIG5hbWU6IGNsaWVudE5hbWUgPz8gJycgfSB9IDoge30pLFxuICAgICAgICB9KVxuICAgICAgICAvLyBjaGlwc1Byb2plY3QgaGFjZSB2aXNpYmxlIGVsIHBpbiBlbiBlbCBjaGlwIGRlbCBvcnF1ZXN0YWRvciAoUkZDIMKnNykuXG4gICAgICAgIHNldENoaXBzUHJvamVjdCh7IHByb2plY3RJZDogU3RyaW5nKHJhdy5pZCksIHByb2plY3ROYW1lOiByYXcubmFtZSwgY2xpZW50TmFtZTogY2xpZW50TmFtZSA/PyAnJyB9KVxuICAgICAgICBzZXRDbGllbnQoY2xpZW50SWQgIT0gbnVsbCA/IHsgaWQ6IGNsaWVudElkLCBuYW1lOiBjbGllbnROYW1lID8/ICcnIH0gOiBudWxsKVxuICAgICAgfSBlbHNlIGlmIChpdGVtLnR5cGUgPT09ICd0YXNrJykge1xuICAgICAgICAvLyBFbCBpdGVtIGRlIHRhcmVhIG5vIHRyYWUgcHJvamVjdElkIGZpYWJsZTsgc3ViaW1vcyBsbyBkaXNwb25pYmxlIChwcm95ZWN0byBwb3Igbm9tYnJlLCBjbGllbnRlIHBvciBpZCkuXG4gICAgICAgIHNldFRhc2soeyBpZDogcmF3LmlkLCBuYW1lOiByYXcubmFtZSwgLi4uKGNsaWVudElkICE9IG51bGwgPyB7IGNsaWVudElkIH0gOiB7fSkgfSlcbiAgICAgICAgc2V0Q2hpcHNQcm9qZWN0KFxuICAgICAgICAgIHJhdy5wcm9qZWN0TmFtZSA/IHsgcHJvamVjdElkOiAnJywgcHJvamVjdE5hbWU6IHJhdy5wcm9qZWN0TmFtZSwgY2xpZW50TmFtZTogY2xpZW50TmFtZSA/PyAnJyB9IDogbnVsbFxuICAgICAgICApXG4gICAgICAgIGlmIChjbGllbnRJZCAhPSBudWxsKSBzZXRDbGllbnQoeyBpZDogY2xpZW50SWQsIG5hbWU6IGNsaWVudE5hbWUgPz8gJycgfSlcbiAgICAgIH1cblxuICAgICAgb25QaW5uZWQ/LihpdGVtKVxuICAgICAgY2xvc2UoKVxuICAgIH0sXG4gICAgW3NldFByb2plY3QsIHNldENsaWVudCwgc2V0VGFzaywgc2V0Q2hpcHNQcm9qZWN0LCBvblBpbm5lZCwgY2xvc2VdXG4gIClcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghb3BlbikgcmV0dXJuIHVuZGVmaW5lZFxuICAgIGNvbnN0IGhhbmRsZXIgPSAoKSA9PiBwb3NpdGlvblBvcG92ZXIoKVxuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdzY3JvbGwnLCBoYW5kbGVyLCB0cnVlKVxuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdyZXNpemUnLCBoYW5kbGVyKVxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgaGFuZGxlciwgdHJ1ZSlcbiAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdyZXNpemUnLCBoYW5kbGVyKVxuICAgIH1cbiAgfSwgW29wZW4sIHBvc2l0aW9uUG9wb3Zlcl0pXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoIW9wZW4pIHJldHVybiB1bmRlZmluZWRcbiAgICBjb25zdCBoYW5kbGVQb2ludGVyRG93bk91dHNpZGUgPSAobW91c2VFdmVudDogTW91c2VFdmVudCkgPT4ge1xuICAgICAgY29uc3QgdGFyZ2V0ID0gbW91c2VFdmVudC50YXJnZXQgYXMgTm9kZSB8IG51bGxcbiAgICAgIGlmICghdGFyZ2V0KSByZXR1cm5cbiAgICAgIGlmIChwb3BvdmVyQW5jaG9yUmVmLmN1cnJlbnQ/LmNvbnRhaW5zKHRhcmdldCkpIHJldHVyblxuICAgICAgaWYgKHRyaWdnZXJSZWY/LmN1cnJlbnQ/LmNvbnRhaW5zKHRhcmdldCkpIHJldHVyblxuICAgICAgY29uc3Qgb3ZlcmxheSA9ICh0YXJnZXQgYXMgRWxlbWVudCk/LmNsb3Nlc3Q/LihgWyR7TUFJQV9UQVNLX1BBTkVMX09WRVJMQVlfQVRUUn1dYClcbiAgICAgIGlmIChvdmVybGF5KSByZXR1cm5cbiAgICAgIGNsb3NlKClcbiAgICB9XG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duJywgaGFuZGxlUG9pbnRlckRvd25PdXRzaWRlKVxuICAgIHJldHVybiAoKSA9PiBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCBoYW5kbGVQb2ludGVyRG93bk91dHNpZGUpXG4gIH0sIFtvcGVuLCBjbG9zZSwgcG9wb3ZlckFuY2hvclJlZiwgdHJpZ2dlclJlZl0pXG5cbiAgY29uc3QgcG9wb3Zlck5vZGUgPSB1c2VNZW1vPFJlYWN0Tm9kZSB8IG51bGw+KCgpID0+IHtcbiAgICBpZiAoIW9wZW4pIHJldHVybiBudWxsXG4gICAgcmV0dXJuIChcbiAgICAgIDxTQ01QQW5jaG9yXG4gICAgICAgIHsuLi57IFtNQUlBX1RBU0tfUEFORUxfT1ZFUkxBWV9BVFRSXTogJycgfX1cbiAgICAgICAgJGJvdHRvbT17cG9zLmJvdHRvbX1cbiAgICAgICAgJGxlZnQ9e3Bvcy5sZWZ0fVxuICAgICAgICAkd2lkdGg9e3Bvcy53aWR0aH1cbiAgICAgICAgJHpJbmRleD17ekluZGV4fVxuICAgICAgICBvbk1vdXNlRG93bj17ZSA9PiBlLnN0b3BQcm9wYWdhdGlvbigpfVxuICAgICAgPlxuICAgICAgICA8Q29udGV4dE1lbnRpb25Qb3BvdmVyXG4gICAgICAgICAgYWxsb3dlZFR5cGVzPXthbGxvd2VkVHlwZXN9XG4gICAgICAgICAgYWN0aXZlVHlwZT17YWN0aXZlVHlwZX1cbiAgICAgICAgICBvblR5cGVDaGFuZ2U9e3NldEFjdGl2ZVR5cGV9XG4gICAgICAgICAgaXRlbXM9e2l0ZW1zfVxuICAgICAgICAgIGxvYWRpbmc9e2xvYWRpbmd9XG4gICAgICAgICAgZXJyb3I9e2Vycm9yfVxuICAgICAgICAgIGhpZGVSZWNlbnRzTGFiZWw9e2hpZGVSZWNlbnRzTGFiZWx9XG4gICAgICAgICAgaGFzTW9yZT17aGFzTW9yZX1cbiAgICAgICAgICBpc0xvYWRpbmdNb3JlPXtpc0xvYWRpbmdNb3JlfVxuICAgICAgICAgIG9uUmVhY2hMaXN0RW5kPXtsb2FkTW9yZX1cbiAgICAgICAgICBzZWFyY2hWYWx1ZT17c2VhcmNoVmFsdWV9XG4gICAgICAgICAgb25JdGVtU2VsZWN0ZWQ9e2NvbW1pdFBpbn1cbiAgICAgICAgICBzaG93U2VhcmNoSW5wdXRcbiAgICAgICAgICBoaWRlVGFiUHJlZml4XG4gICAgICAgICAgc2VhcmNoUGxhY2Vob2xkZXI9e3QoJ2NvbnRleHRQaW4uc2VhcmNoUGxhY2Vob2xkZXInLCB7IGRlZmF1bHRWYWx1ZTogJ0J1c2NhciBjb250ZXh0b+KApicgfSl9XG4gICAgICAgICAgb25TZWFyY2hDaGFuZ2U9e3VwZGF0ZVNlYXJjaFZhbHVlfVxuICAgICAgICAgIG9uUmVxdWVzdENsb3NlPXtjbG9zZX1cbiAgICAgICAgLz5cbiAgICAgIDwvU0NNUEFuY2hvcj5cbiAgICApXG4gIH0sIFtcbiAgICBvcGVuLFxuICAgIHBvcyxcbiAgICB6SW5kZXgsXG4gICAgYWxsb3dlZFR5cGVzLFxuICAgIGFjdGl2ZVR5cGUsXG4gICAgaXRlbXMsXG4gICAgbG9hZGluZyxcbiAgICBlcnJvcixcbiAgICBoaWRlUmVjZW50c0xhYmVsLFxuICAgIGhhc01vcmUsXG4gICAgaXNMb2FkaW5nTW9yZSxcbiAgICBsb2FkTW9yZSxcbiAgICBzZWFyY2hWYWx1ZSxcbiAgICBjb21taXRQaW4sXG4gICAgdXBkYXRlU2VhcmNoVmFsdWUsXG4gICAgY2xvc2UsXG4gICAgdCxcbiAgXSlcblxuICByZXR1cm4geyBvcGVuLCB0b2dnbGUsIGNsb3NlLCBwb3BvdmVyTm9kZSB9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxTQUErQkEsV0FBVyxFQUFFQyxTQUFTLEVBQUVDLE9BQU8sRUFBRUMsUUFBUSxRQUFRLE9BQU87QUFDdkYsU0FDRUMscUJBQXFCLEVBQ3JCQyw0QkFBNEIsRUFDNUJDLFVBQVUsUUFDTCwyQ0FBMkM7QUFDbEQsU0FBU0Msc0JBQXNCLFFBQVEsMEJBQTBCO0FBQ2pFLFNBQVNDLGdCQUFnQixRQUFRLDJCQUEyQjtBQUM1RCxTQUFTQyxJQUFJLFFBQVEsUUFBUTtBQUM3QjtBQUNBLFNBQVNDLGVBQWUsUUFBUSxtQkFBbUI7QUFBQSxTQUFB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
|