@projectcor/maia-components 2.11.66-6 → 2.11.66-8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (99) hide show
  1. package/lib/components/atoms/Chip/Chip.js +50 -15
  2. package/lib/components/atoms/Chip/styles.js +9 -5
  3. package/lib/components/atoms/ContextMentionChip/ContextMentionChip.styles.js +5 -9
  4. package/lib/components/atoms/ContextMentionEditor/ContextMentionEditor.js +2 -4
  5. package/lib/components/atoms/ContextMentionItem/ContextMentionItem.js +8 -35
  6. package/lib/components/atoms/ContextMentionItem/ContextMentionItem.styles.js +28 -37
  7. package/lib/components/atoms/ContextMentionPopover/ContextMentionPopover.js +42 -30
  8. package/lib/components/atoms/ContextMentionPopover/ContextMentionPopover.styles.js +21 -13
  9. package/lib/components/atoms/MAIAInput/MAIAInput.js +33 -15
  10. package/lib/components/atoms/icons/MAIAIsologo.js +2 -5
  11. package/lib/components/atoms/icons/index.js +1 -3
  12. package/lib/components/molecules/ChatAIContent/ChatAIContent.js +2 -19
  13. package/lib/components/molecules/ChatAIHome/ChatAIHome.js +298 -48
  14. package/lib/components/molecules/ChatAIHome/styles.js +63 -26
  15. package/lib/components/molecules/ChatAIMessages/ChatAIMessages.js +57 -150
  16. package/lib/components/molecules/ChatAIMessages/newStyles.js +20 -11
  17. package/lib/components/molecules/ChatAIModal/ChatAIModal.js +224 -80
  18. package/lib/components/molecules/ChatAIModal/components/ChatAiModalFooter/ChatAiModalFooter.js +27 -2
  19. package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.js +18 -18
  20. package/lib/components/molecules/ChatAIModal/constants.js +2 -6
  21. package/lib/components/molecules/ChatAIMyAgents/ChatAIMyAgents.js +28 -123
  22. package/lib/components/molecules/ChatAIMyAgents/ChatAIMyAgents.styles.js +41 -66
  23. package/lib/components/molecules/ChatFooter/ChatFooter.js +76 -20
  24. package/lib/components/molecules/ChatFooter/ChatFooterFaqs.js +22 -7
  25. package/lib/components/molecules/ChatFooter/styles.js +11 -2
  26. package/lib/components/molecules/ContextMentionInput/ContextMentionInput.js +1 -3
  27. package/lib/components/molecules/Sidebar/Sidebar.js +21 -66
  28. package/lib/components/molecules/Sidebar/Sidebar.layout.styles.js +26 -40
  29. package/lib/components/molecules/Sidebar/Sidebar.styles.js +7 -10
  30. package/lib/components/organisms/DeleteQuestionModal/DeleteQuestionModal.js +1 -8
  31. package/lib/components/organisms/EditQuestionModal/EditQuestionModal.js +2 -2
  32. package/lib/constants/config.js +1 -4
  33. package/lib/constants/maiaTaskPanelAccess.js +7 -5
  34. package/lib/constants/permissions/index.js +2 -2
  35. package/lib/constants/permissions/utils.js +1 -4
  36. package/lib/constants/taskLinkIcon.js +6 -15
  37. package/lib/constants/taskUrls.js +3 -1
  38. package/lib/context/global-context.js +8 -1
  39. package/lib/hooks/index.js +2 -1
  40. package/lib/hooks/useChatManager/useChatManager.js +149 -125
  41. package/lib/hooks/useChatMessages/useChatMessages.js +34 -5
  42. package/lib/hooks/useContextMentions.js +15 -60
  43. package/lib/hooks/useContextPinPopover.js +235 -0
  44. package/lib/hooks/useEntitySearch.js +96 -337
  45. package/lib/hooks/useEvent.js +3 -4
  46. package/lib/hooks/useFrequentlyAskedQuestions.js +12 -10
  47. package/lib/hooks/useFrequentlyUsedActions.js +5 -3
  48. package/lib/hooks/useMentionAllowedTypes.js +16 -41
  49. package/lib/hooks/useMentionPopover.js +49 -54
  50. package/lib/hooks/useOrchestratorStream/useOrchestratorStream.interface.js +1 -1
  51. package/lib/hooks/useOrchestratorStream/useOrchestratorStream.js +27 -18
  52. package/lib/hooks/useProjectSearch.js +4 -28
  53. package/lib/hooks/useProjectSummaryConfig.js +74 -4
  54. package/lib/hooks/useRecentClientsSearch.js +4 -34
  55. package/lib/hooks/useRecentContexts.js +86 -0
  56. package/lib/hooks/useSmoothStreamText/useSmoothStreamText.js +24 -16
  57. package/lib/lang/br/index.js +32 -60
  58. package/lib/lang/en/index.js +32 -60
  59. package/lib/lang/es/index.js +32 -60
  60. package/lib/lang/fr/index.js +32 -60
  61. package/lib/services/maia/Actions/getFrequentlyUsedActions.js +6 -3
  62. package/lib/services/maia/Agents/getAgents.js +199 -223
  63. package/lib/services/maia/Chats/getChatMessages.js +34 -6
  64. package/lib/services/maia/Chats/getChatsByUserId.js +10 -2
  65. package/lib/services/maia/Faqs/getFrequentlyAskedQuestions.js +6 -4
  66. package/lib/services/maia/Orchestrator/orchestrator.js +21 -5
  67. package/lib/services/maia/RecentContexts/getRecentContexts.js +54 -0
  68. package/lib/services/maia/RecentContexts/index.js +6 -0
  69. package/lib/services/maia/index.js +4 -2
  70. package/lib/services/utils/validateIsMaia.js +2 -2
  71. package/lib/types/agent.js +1 -1
  72. package/lib/types/contextMention.js +1 -1
  73. package/lib/utils/agentDisplayName.js +11 -19
  74. package/lib/utils/contextMentionIcons.js +16 -35
  75. package/lib/utils/entityLinkRender.js +132 -0
  76. package/lib/utils/hitlAnalytics.js +5 -6
  77. package/lib/utils/renderContextMentions.js +6 -9
  78. package/package.json +1 -1
  79. package/lib/components/atoms/icons/SkillIcon.js +0 -30
  80. package/lib/components/atoms/icons/SkillsNavIcon.js +0 -27
  81. package/lib/components/atoms/icons/TaskLinkIcon.js +0 -27
  82. package/lib/components/molecules/ChatAIMySkills/ChatAIMySkills.js +0 -357
  83. package/lib/components/molecules/ChatAIMySkills/ChatAIMySkills.styles.js +0 -145
  84. package/lib/components/molecules/ChatAIMySkills/index.js +0 -2
  85. package/lib/components/organisms/AbmSkillGenerateModal/AbmSkillGenerateModal.js +0 -160
  86. package/lib/components/organisms/AbmSkillGenerateModal/AbmSkillGenerateModal.styles.js +0 -34
  87. package/lib/components/organisms/AbmSkillGenerateModal/index.js +0 -2
  88. package/lib/components/organisms/AbmSkillModal/AbmSkillModal.js +0 -446
  89. package/lib/components/organisms/AbmSkillModal/AbmSkillModal.styles.js +0 -98
  90. package/lib/components/organisms/AbmSkillModal/index.js +0 -2
  91. package/lib/services/maia/Skills/createSkill.js +0 -39
  92. package/lib/services/maia/Skills/deleteSkill.js +0 -38
  93. package/lib/services/maia/Skills/generateSkill.js +0 -41
  94. package/lib/services/maia/Skills/getSkills.js +0 -90
  95. package/lib/services/maia/Skills/updateSkill.js +0 -39
  96. package/lib/types/skill.js +0 -2
  97. package/lib/utils/contextMentionTriggers.js +0 -53
  98. package/lib/utils/corConnectorMentionTypes.js +0 -37
  99. package/lib/utils/normalizeAgentConnectors.js +0 -32
@@ -1,106 +1,348 @@
1
+ import _defineProperty from "@babel/runtime/helpers/defineProperty";
1
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; }
2
5
  /* eslint-disable react/function-component-definition */
3
6
  /* eslint-disable jsx-a11y/click-events-have-key-events */
4
7
  /* eslint-disable jsx-a11y/no-static-element-interactions */
5
8
  import { useEffect, useRef, useState, useCallback, useMemo } from 'react';
6
9
  import { Tooltip } from '@projectcor/tooltipv2/lib/components/Tooltip';
10
+ import { ListChecklist } from '@projectcor/icons/lib/components/ListChecklist';
7
11
  import { useT } from '../../../hooks/useT';
8
- import { SCCAIHomeContainer, SCCAIHomeContent, SCCAIHomeContentInner, SCCAIHomeGradientTop, SCCAIHomeGradientBottom, SCCAIHomeHeader, SCCAIHomeGreeting, SCCAIHomeAgentInfoContainer, SCCAIHomeAgentInfo, SCCAIHomeProjectSummary, SCCAIHomeProjectSummaryContent, SCCAIHomeProjectSummaryTitle, SCCAIHomeProjectSummaryDescription, SCCAHWrapperSummaryProject, SCCAIHomeIntroduction, SCCAIHomeCreatedByContainer, SCCAIHomeCreatedByText, SCCAIHomeCreatedByTextName, SCCAIHomeIconContainer, SCCAIHomeLogoWrapper, SCCAIHomeMaiaHeaderStack, SCCAIHomeDynamicSection } from './styles';
12
+ import { EVENTS, useEvent } from '../../../hooks/useEvent';
13
+ import { SCCAIHomeContainer, SCCAIHomeContent, SCCAIHomeContentInner, SCCAIHomeGradientTop, SCCAIHomeGradientBottom, SCCAIHomeHeader, SCCAIHomeGreeting, SCCAIHomeAgentInfoContainer, SCCAIHomeAgentInfo, SCCAIHomeProjectSummary, SCCAIHomeProjectSummaryContent, SCCAIHomeProjectSummaryTitle, SCCAIHomeProjectSummaryDescription, SCCAHWrapperSummaryProject, SCCAIHomeIntroduction, SCCAIHomeCreatedByContainer, SCCAIHomeCreatedByText, SCCAIHomeCreatedByTextName, SCCAIHomeIconContainer, SCCAIHomeLogoWrapper, SCCAIHomeMaiaHeaderStack, SCCAIHomeTitle, SCCAIHomeSubtitle, SCCAIHomeDynamicSection, SCCAIHomeRecentContexts, SCCAIHomeRecentContextsList, SCCAIHomeRecentContextPill, SCCAIHomeRecentContextPillIcon, SCCAIHomeRecentContextPillText, SCCAIHomeRecentContextPillSkeleton } from './styles';
9
14
  import { useGlobalContext } from '../../../context/global-context';
15
+ import { CORUserRole, useUser } from '../../../context/cor-user';
16
+ import { useResizeListener } from '../../../hooks/useResize';
17
+ import { getContextMentionIcon } from '../../../utils/contextMentionIcons';
10
18
  import { validateIsMaia } from '../../../services/utils/validateIsMaia';
11
- import { isMaiakerAgent } from '../../../utils/agentDisplayName';
12
19
  import { FrequentlyAskedQuestions } from '../../atoms/FrequentlyAskedQuestions';
13
20
  import { FrequentlyUsedActions } from '../../atoms/FrequentlyUsedActions';
14
21
  import { useFrequentlyUsedActions } from '../../../hooks/useFrequentlyUsedActions';
15
22
  import { useFrequentlyAskedQuestions } from '../../../hooks/useFrequentlyAskedQuestions';
23
+ import { useRecentContexts } from '../../../hooks/useRecentContexts';
16
24
  import { MAIAIsologo } from '../../atoms/icons/MAIAIsologo';
17
25
  import { TemplateGradientIcon } from '../../atoms/icons/TemplateGradientIcon';
18
26
  import { ChatAIHomeMaiaker } from './ChatAIHomeMaiaker';
19
- import { jsxs as _jsxs, jsx as _jsx } from "react/jsx-runtime";
27
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
20
28
  export var FrequentQuestions = /*#__PURE__*/function (FrequentQuestions) {
21
29
  FrequentQuestions["rentabilidad_proyecto"] = "rentabilidad_proyecto";
22
30
  FrequentQuestions["avance_proyecto"] = "avance_proyecto";
23
31
  return FrequentQuestions;
24
32
  }({});
25
- export var ChatAIHome = function ChatAIHome(_ref) {
26
- var handlers = _ref.handlers,
27
- onStartChat = _ref.onStartChat,
28
- expanded = _ref.expanded,
29
- floating = _ref.floating;
33
+ var RECENT_CONTEXTS_LIMIT = 9;
34
+ var RECENT_CONTEXT_ICON_COLOR = '#4D4D4D';
35
+ var RECENT_CONTEXT_SKELETON_KEYS = ['recent-context-skeleton-1', 'recent-context-skeleton-2', 'recent-context-skeleton-3'];
36
+ var RecentContextPill = function RecentContextPill(_ref) {
37
+ var context = _ref.context,
38
+ label = _ref.label,
39
+ onClick = _ref.onClick;
40
+ var textRef = useRef(null);
41
+ var _useResizeListener = useResizeListener(textRef, [label]),
42
+ showTooltip = _useResizeListener.showTooltip;
43
+ return /*#__PURE__*/_jsxs(SCCAIHomeRecentContextPill, {
44
+ type: "button",
45
+ onClick: onClick,
46
+ children: [/*#__PURE__*/_jsx(SCCAIHomeRecentContextPillIcon, {
47
+ children: context.type === 'task' ? /*#__PURE__*/_jsx(ListChecklist, {
48
+ color: RECENT_CONTEXT_ICON_COLOR,
49
+ width: "14px",
50
+ height: "14px"
51
+ }) : getContextMentionIcon(context.type, RECENT_CONTEXT_ICON_COLOR, undefined, 14)
52
+ }), /*#__PURE__*/_jsx(SCCAIHomeRecentContextPillText, {
53
+ ref: textRef,
54
+ children: showTooltip ? /*#__PURE__*/_jsx(Tooltip, {
55
+ title: label,
56
+ children: /*#__PURE__*/_jsx("span", {
57
+ children: label
58
+ })
59
+ }) : label
60
+ })]
61
+ });
62
+ };
63
+ var parseNumericId = function parseNumericId(value) {
64
+ if (value === null || value === undefined || value === '') return null;
65
+ var parsed = Number(value);
66
+ return Number.isFinite(parsed) ? parsed : null;
67
+ };
68
+ var getAllowedRecentContextTypes = function getAllowedRecentContextTypes(roleId) {
69
+ if (roleId === CORUserRole.CLEVEL || roleId === CORUserRole.DIRECTOR || roleId === CORUserRole.PROJECT_MANAGER) {
70
+ return new Set(['client', 'project', 'task']);
71
+ }
72
+ if (roleId === CORUserRole.COLLABORATOR) {
73
+ return new Set(['task']);
74
+ }
75
+ return new Set();
76
+ };
77
+ export var ChatAIHome = function ChatAIHome(_ref2) {
78
+ var handlers = _ref2.handlers,
79
+ onStartChat = _ref2.onStartChat,
80
+ expanded = _ref2.expanded,
81
+ floating = _ref2.floating;
30
82
  var _useT = useT(),
31
83
  t = _useT.t,
32
84
  i18n = _useT.i18n;
85
+ var event = useEvent();
86
+ var user = useUser();
33
87
  var _useGlobalContext = useGlobalContext(),
34
88
  agent = _useGlobalContext.agent,
35
- section = _useGlobalContext.section;
89
+ section = _useGlobalContext.section,
90
+ client = _useGlobalContext.client,
91
+ project = _useGlobalContext.project,
92
+ task = _useGlobalContext.task,
93
+ chipsProject = _useGlobalContext.chipsProject,
94
+ setClient = _useGlobalContext.setClient,
95
+ setProject = _useGlobalContext.setProject,
96
+ setTask = _useGlobalContext.setTask,
97
+ setChipsProject = _useGlobalContext.setChipsProject;
36
98
  var isMAIA = validateIsMaia(agent);
37
99
  var floatingCustomCenter = !!(floating && (agent === null || agent === void 0 ? void 0 : agent.type) === 'custom');
38
100
  var lang = i18n.language === 'br' ? 'pt' : i18n.language;
39
101
  var summaryProjectAccess = typeof window !== 'undefined' && (String(window.MAIA_PROJECT_SUMMARY_FEATURE_ACCESS).toLowerCase() === 'true' || String(window.maiaProjectSummaryAccess).toLowerCase() === 'true');
40
102
  var faqsAccess = true;
41
103
  var showProjectSummary = !!(isMAIA && summaryProjectAccess);
42
- var isMaiaker = isMaiakerAgent(agent);
43
- // FUA y FAQ solo aplican a agentes clone (los custom no las tienen habilitadas por ahora).
44
- // Maiaker (clone global) queda excluido como antes.
45
- var homeListsAgentId = isMAIA && !isMaiaker ? agent === null || agent === void 0 ? void 0 : agent.id : undefined;
46
- var _useFrequentlyUsedAct = useFrequentlyUsedActions(homeListsAgentId, section),
104
+ // El orchestrator (type === 'orchestrator') muestra FAQs/FUAs agregadas de sus subagentes,
105
+ // así que NO se trata como maiaker acá. Maiaker = clone global legacy con nombre maiaker/marketplace.
106
+ var isMaiaker = (agent === null || agent === void 0 ? void 0 : agent.type) !== 'orchestrator' && (agent === null || agent === void 0 ? void 0 : agent.entity) === 'global' && /(maiaker|marketplace)/i.test((agent === null || agent === void 0 ? void 0 : agent.name) || '');
107
+ var isHeaderHome = isMAIA && section === 'header' && (agent === null || agent === void 0 ? void 0 : agent.type) === 'orchestrator';
108
+ var allowedRecentContextTypes = useMemo(function () {
109
+ return getAllowedRecentContextTypes(user.role_id);
110
+ }, [user.role_id]);
111
+ var _useRecentContexts = useRecentContexts({
112
+ enabled: isHeaderHome,
113
+ limit: RECENT_CONTEXTS_LIMIT
114
+ }),
115
+ fetchedRecentContexts = _useRecentContexts.contexts,
116
+ recentContextsLoading = _useRecentContexts.loading;
117
+ var recentContexts = useMemo(function () {
118
+ return fetchedRecentContexts.filter(function (context) {
119
+ return allowedRecentContextTypes.has(context.type);
120
+ });
121
+ }, [fetchedRecentContexts, allowedRecentContextTypes]);
122
+
123
+ // Home del orchestrator en 2 pasos:
124
+ // - Paso 1 (sin contexto pineado): se muestran solo los contextos recientes.
125
+ // - Paso 2 (contexto pineado): se muestran las FAQs/acciones que referencian ese contexto.
126
+ // Volver al paso 1 = quitar el chip (limpia el contexto global).
127
+ var hasPinnedContext = !!(task !== null && task !== void 0 && task.id || chipsProject !== null && chipsProject !== void 0 && chipsProject.projectId || client !== null && client !== void 0 && client.id || project !== null && project !== void 0 && project.id);
128
+ var isRecentContextsStep = isHeaderHome && !hasPinnedContext;
129
+ var isContextHomeStep = isHeaderHome && hasPinnedContext;
130
+
131
+ // Contexto activo para derivar FAQs/acciones (paso 2). Preferimos el pill clickeado;
132
+ // si no, lo reconstruimos desde el contexto global.
133
+ var _useState = useState(null),
134
+ _useState2 = _slicedToArray(_useState, 2),
135
+ selectedContext = _useState2[0],
136
+ setSelectedContext = _useState2[1];
137
+ useEffect(function () {
138
+ if (!hasPinnedContext) setSelectedContext(null);
139
+ }, [hasPinnedContext]);
140
+ var activeContext = useMemo(function () {
141
+ if (selectedContext) return selectedContext;
142
+ if (!isContextHomeStep) return null;
143
+ if (task !== null && task !== void 0 && task.id) return {
144
+ type: 'task',
145
+ id: task.id,
146
+ name: task.name
147
+ };
148
+ if (chipsProject !== null && chipsProject !== void 0 && chipsProject.projectId) return {
149
+ type: 'project',
150
+ id: chipsProject.projectId,
151
+ name: chipsProject.projectName
152
+ };
153
+ if (client !== null && client !== void 0 && client.id) return {
154
+ type: 'client',
155
+ id: client.id,
156
+ name: client.name
157
+ };
158
+ return null;
159
+ }, [selectedContext, isContextHomeStep, task === null || task === void 0 ? void 0 : task.id, task === null || task === void 0 ? void 0 : task.name, chipsProject === null || chipsProject === void 0 ? void 0 : chipsProject.projectId, chipsProject === null || chipsProject === void 0 ? void 0 : chipsProject.projectName, client === null || client === void 0 ? void 0 : client.id, client === null || client === void 0 ? void 0 : client.name]);
160
+
161
+ // entity_type del contexto pineado (project/client/task), tomado del contexto global.
162
+ // Aplica tanto al abrir MAIA desde una sección específica como al cambiar de conversación.
163
+ var pinnedEntityType = useMemo(function () {
164
+ if (task !== null && task !== void 0 && task.id) return 'task';
165
+ if (chipsProject !== null && chipsProject !== void 0 && chipsProject.projectId || project !== null && project !== void 0 && project.id) return 'project';
166
+ if (client !== null && client !== void 0 && client.id) return 'client';
167
+ return undefined;
168
+ }, [task === null || task === void 0 ? void 0 : task.id, chipsProject === null || chipsProject === void 0 ? void 0 : chipsProject.projectId, project === null || project === void 0 ? void 0 : project.id, client === null || client === void 0 ? void 0 : client.id]);
169
+
170
+ // FAQs/acciones:
171
+ // - header-home (orchestrator), paso 2: filtradas por `entity_type` del contexto seleccionado.
172
+ // - homes de proyecto/cliente/tarea (sección): filtradas por el `entity_type` del contexto seteado.
173
+ var realListsAgentId = function () {
174
+ if (!isMAIA || isMaiaker) return undefined;
175
+ if (isHeaderHome) return isContextHomeStep ? agent === null || agent === void 0 ? void 0 : agent.id : undefined;
176
+ return agent === null || agent === void 0 ? void 0 : agent.id;
177
+ }();
178
+ var realListsEntityType = function () {
179
+ if (!isHeaderHome) return pinnedEntityType;
180
+ return isContextHomeStep ? activeContext === null || activeContext === void 0 ? void 0 : activeContext.type : undefined;
181
+ }();
182
+ var _useFrequentlyUsedAct = useFrequentlyUsedActions(realListsAgentId, section, realListsEntityType),
47
183
  agentFuas = _useFrequentlyUsedAct.actions,
48
184
  fuasLoading = _useFrequentlyUsedAct.loading;
49
- var _useFrequentlyAskedQu = useFrequentlyAskedQuestions(homeListsAgentId, lang),
185
+ var _useFrequentlyAskedQu = useFrequentlyAskedQuestions(realListsAgentId, lang, realListsEntityType),
50
186
  agentFaqs = _useFrequentlyAskedQu.faqs,
51
187
  faqsLoading = _useFrequentlyAskedQu.loading,
52
188
  handleGetFrequentlyAskedQuestions = _useFrequentlyAskedQu.handleGetFrequentlyAskedQuestions;
53
189
  var faqsFetchRef = useRef(null);
54
190
  useEffect(function () {
55
- if (!isMAIA || isMaiaker || section === 'task' || !(agent !== null && agent !== void 0 && agent.id)) return;
56
- var currentKey = "".concat(agent.id, "-").concat(lang);
57
- var lastKey = faqsFetchRef.current ? "".concat(faqsFetchRef.current.agentId, "-").concat(faqsFetchRef.current.lang) : null;
191
+ var _faqsFetchRef$current;
192
+ if (!realListsAgentId || section === 'task') return;
193
+ var currentKey = "".concat(realListsAgentId, "-").concat(lang, "-").concat(realListsEntityType !== null && realListsEntityType !== void 0 ? realListsEntityType : 'all');
194
+ var lastKey = faqsFetchRef.current ? "".concat(faqsFetchRef.current.agentId, "-").concat(faqsFetchRef.current.lang, "-").concat((_faqsFetchRef$current = faqsFetchRef.current.entityType) !== null && _faqsFetchRef$current !== void 0 ? _faqsFetchRef$current : 'all') : null;
58
195
  if (currentKey !== lastKey) {
59
196
  faqsFetchRef.current = {
60
- agentId: agent.id,
61
- lang: lang
197
+ agentId: realListsAgentId,
198
+ lang: lang,
199
+ entityType: realListsEntityType
62
200
  };
63
201
  handleGetFrequentlyAskedQuestions({
64
- agentId: agent.id,
65
- lang: lang
202
+ agentId: realListsAgentId,
203
+ lang: lang,
204
+ entityType: realListsEntityType
66
205
  });
67
206
  }
68
- }, [isMaiaker, section, agent === null || agent === void 0 ? void 0 : agent.id, lang, handleGetFrequentlyAskedQuestions]);
69
- var shouldShowFaqs = !isMaiaker && section !== 'task' && faqsAccess && (agentFaqs.length > 0 || faqsLoading);
70
- var shouldShowFuas = !isMaiaker && (agentFuas.length > 0 || fuasLoading);
71
- var hasAnyHomeListContent = !isMaiaker && section !== 'task' && faqsAccess && agentFaqs.length > 0 || !isMaiaker && agentFuas.length > 0;
207
+ }, [realListsAgentId, realListsEntityType, section, lang, handleGetFrequentlyAskedQuestions]);
208
+ var faqs = agentFaqs;
209
+ var fuas = agentFuas;
210
+ var faqsAreLoading = faqsLoading;
211
+ var fuasAreLoading = fuasLoading;
212
+ var showRecentContextsBlock = isRecentContextsStep && (recentContextsLoading || recentContexts.length > 0);
213
+ var shouldShowFaqs = (isContextHomeStep || !isHeaderHome && section !== 'task' && faqsAccess) && !isMaiaker && (faqs.length > 0 || faqsAreLoading);
214
+ var shouldShowFuas = !isMaiaker && (isContextHomeStep || !isHeaderHome) && (fuas.length > 0 || fuasAreLoading);
72
215
  var showProjectSummaryCard = showProjectSummary && (agent === null || agent === void 0 ? void 0 : agent.entity) === 'project';
73
- var showFAQs = !!(hasAnyHomeListContent || showProjectSummaryCard || isMaiaker);
216
+ var showFAQs = !!(showRecentContextsBlock || shouldShowFaqs || shouldShowFuas || showProjectSummaryCard || isMaiaker);
74
217
  var homeScrollableLayout = showFAQs;
75
- var showDynamicSection = hasAnyHomeListContent || shouldShowFaqs || shouldShowFuas || isMaiaker;
218
+ var showDynamicSection = showRecentContextsBlock || shouldShowFaqs || shouldShowFuas || isMaiaker;
76
219
 
77
220
  // Lógica del scroll con gradientes
78
221
  var contentContainerRef = useRef(null);
79
- var _useState = useState(false),
80
- _useState2 = _slicedToArray(_useState, 2),
81
- showTopGradient = _useState2[0],
82
- setShowTopGradient = _useState2[1];
83
222
  var _useState3 = useState(false),
84
223
  _useState4 = _slicedToArray(_useState3, 2),
85
- showBottomGradient = _useState4[0],
86
- setShowBottomGradient = _useState4[1];
224
+ showTopGradient = _useState4[0],
225
+ setShowTopGradient = _useState4[1];
87
226
  var _useState5 = useState(false),
88
227
  _useState6 = _slicedToArray(_useState5, 2),
89
- isScrolling = _useState6[0],
90
- setIsScrolling = _useState6[1];
228
+ showBottomGradient = _useState6[0],
229
+ setShowBottomGradient = _useState6[1];
230
+ var _useState7 = useState(false),
231
+ _useState8 = _slicedToArray(_useState7, 2),
232
+ isScrolling = _useState8[0],
233
+ setIsScrolling = _useState8[1];
91
234
  var scrollTimeoutRef = useRef(null);
92
235
 
93
- // Saludo aleatorio desde agent.introduction (array con 3 variantes del back). En task, mensaje fijo i18n. Maiaker sin intro del agente.
236
+ // Saludo fijo por tipo de contexto (i18n). Custom agents siguen usando agent.introduction.
94
237
  var greeting = useMemo(function () {
95
238
  if (isMaiaker) return '';
96
- if (section === 'task') return t('homeMenu.taskGreeting');
239
+ if (isRecentContextsStep) return '';
240
+ if (isMAIA && pinnedEntityType) {
241
+ return t("homeMenu.contextHome.contextGreeting.".concat(pinnedEntityType));
242
+ }
97
243
  var intro = agent === null || agent === void 0 ? void 0 : agent.introduction;
98
244
  if (!intro) return '';
99
245
  if (Array.isArray(intro) && intro.length > 0) {
100
246
  return intro[Math.floor(Math.random() * intro.length)];
101
247
  }
102
248
  return typeof intro === 'string' ? intro : '';
103
- }, [agent === null || agent === void 0 ? void 0 : agent.id, agent === null || agent === void 0 ? void 0 : agent.introduction, section, isMaiaker, t]);
249
+ }, [agent === null || agent === void 0 ? void 0 : agent.id, agent === null || agent === void 0 ? void 0 : agent.introduction, isMaiaker, isMAIA, pinnedEntityType, isRecentContextsStep, t]);
250
+ var handleSelectRecentContext = useCallback(function (context, order) {
251
+ var _context$parents, _context$parents2, _context$parents3, _context$parents4;
252
+ event(EVENTS.aiChatContextSelected, {
253
+ order: order,
254
+ type: context.type
255
+ });
256
+ var contextId = parseNumericId(context.id);
257
+ var clientId = parseNumericId((_context$parents = context.parents) === null || _context$parents === void 0 ? void 0 : _context$parents.client_id);
258
+ var projectId = parseNumericId((_context$parents2 = context.parents) === null || _context$parents2 === void 0 ? void 0 : _context$parents2.project_id);
259
+ var clientName = ((_context$parents3 = context.parents) === null || _context$parents3 === void 0 ? void 0 : _context$parents3.client_name) || '';
260
+ var projectName = ((_context$parents4 = context.parents) === null || _context$parents4 === void 0 ? void 0 : _context$parents4.project_name) || '';
261
+ setSelectedContext(context);
262
+ setTask(null);
263
+ setProject(null);
264
+ setClient === null || setClient === void 0 || setClient(null);
265
+ setChipsProject(null);
266
+ if (context.type === 'client') {
267
+ if (contextId == null) return;
268
+ setClient === null || setClient === void 0 || setClient({
269
+ id: contextId,
270
+ name: context.name
271
+ });
272
+ } else if (context.type === 'project') {
273
+ if (contextId == null) return;
274
+ setProject(_objectSpread(_objectSpread({
275
+ id: contextId,
276
+ name: context.name
277
+ }, clientId != null ? {
278
+ clientId: clientId
279
+ } : {}), clientId != null ? {
280
+ client: {
281
+ id: clientId,
282
+ name: clientName
283
+ }
284
+ } : {}));
285
+ setChipsProject({
286
+ projectId: String(contextId),
287
+ projectName: context.name,
288
+ clientName: clientName
289
+ });
290
+ } else if (context.type === 'task') {
291
+ setTask(_objectSpread(_objectSpread({
292
+ id: context.id,
293
+ name: context.name
294
+ }, projectId != null ? {
295
+ projectId: projectId
296
+ } : {}), clientId != null ? {
297
+ clientId: clientId
298
+ } : {}));
299
+ if (clientId != null) {
300
+ setClient === null || setClient === void 0 || setClient({
301
+ id: clientId,
302
+ name: clientName
303
+ });
304
+ }
305
+ if (projectId != null) {
306
+ setProject(_objectSpread(_objectSpread({
307
+ id: projectId,
308
+ name: projectName || "".concat(t('homeMenu.recentContexts.types.project'), " ").concat(projectId)
309
+ }, clientId != null ? {
310
+ clientId: clientId
311
+ } : {}), clientId != null ? {
312
+ client: {
313
+ id: clientId,
314
+ name: clientName
315
+ }
316
+ } : {}));
317
+ setChipsProject({
318
+ projectId: String(projectId),
319
+ projectName: projectName || "".concat(t('homeMenu.recentContexts.types.project'), " ").concat(projectId),
320
+ clientName: clientName
321
+ });
322
+ }
323
+ }
324
+ requestAnimationFrame(function () {
325
+ document.dispatchEvent(new CustomEvent('maia-input-refocus'));
326
+ });
327
+ }, [event, setChipsProject, setClient, setProject, setTask, t]);
328
+ var renderRecentContexts = function renderRecentContexts() {
329
+ if (!isRecentContextsStep) return null;
330
+ return /*#__PURE__*/_jsx(SCCAIHomeRecentContexts, {
331
+ children: /*#__PURE__*/_jsxs(SCCAIHomeRecentContextsList, {
332
+ children: [recentContextsLoading && RECENT_CONTEXT_SKELETON_KEYS.map(function (key) {
333
+ return /*#__PURE__*/_jsx(SCCAIHomeRecentContextPillSkeleton, {}, key);
334
+ }), !recentContextsLoading && recentContexts.map(function (context, index) {
335
+ return /*#__PURE__*/_jsx(RecentContextPill, {
336
+ context: context,
337
+ label: context.name.trim(),
338
+ onClick: function onClick() {
339
+ return handleSelectRecentContext(context, index + 1);
340
+ }
341
+ }, "".concat(context.type, "-").concat(context.id));
342
+ })]
343
+ })
344
+ });
345
+ };
104
346
  var checkScroll = useCallback(function () {
105
347
  var container = contentContainerRef.current;
106
348
  if (!container || !homeScrollableLayout) return;
@@ -160,14 +402,22 @@ export var ChatAIHome = function ChatAIHome(_ref) {
160
402
  });
161
403
  }
162
404
  return /*#__PURE__*/_jsxs(SCCAIHomeMaiaHeaderStack, {
163
- $noGap: !greeting,
405
+ $noGap: !isRecentContextsStep && !greeting,
164
406
  children: [/*#__PURE__*/_jsx(SCCAIHomeIconContainer, {
165
407
  children: /*#__PURE__*/_jsx(SCCAIHomeLogoWrapper, {
166
408
  children: /*#__PURE__*/_jsx(MAIAIsologo, {})
167
409
  })
168
- }), greeting ? /*#__PURE__*/_jsx(SCCAIHomeGreeting, {
410
+ }), isRecentContextsStep ? /*#__PURE__*/_jsxs(_Fragment, {
411
+ children: [/*#__PURE__*/_jsx(SCCAIHomeTitle, {
412
+ children: t('homeMenu.contextHome.greeting', {
413
+ name: user.firstName
414
+ })
415
+ }), /*#__PURE__*/_jsx(SCCAIHomeSubtitle, {
416
+ children: t(user.role_id === CORUserRole.COLLABORATOR ? 'homeMenu.contextHome.subtitleCollaborator' : 'homeMenu.contextHome.subtitle')
417
+ })]
418
+ }) : greeting && /*#__PURE__*/_jsx(SCCAIHomeGreeting, {
169
419
  children: greeting
170
- }) : null]
420
+ })]
171
421
  });
172
422
  };
173
423
  return /*#__PURE__*/_jsxs(SCCAIHomeContainer, {
@@ -207,21 +457,21 @@ export var ChatAIHome = function ChatAIHome(_ref) {
207
457
  })]
208
458
  }), showDynamicSection && /*#__PURE__*/_jsxs(SCCAIHomeDynamicSection, {
209
459
  $grow: isMaiaker,
210
- children: [shouldShowFaqs && /*#__PURE__*/_jsx(FrequentlyAskedQuestions, {
460
+ children: [renderRecentContexts(), shouldShowFaqs && /*#__PURE__*/_jsx(FrequentlyAskedQuestions, {
211
461
  onStartChat: onStartChat,
212
462
  showFAQs: showFAQs,
213
463
  showProjectSummary: showProjectSummary,
214
464
  agentId: agent === null || agent === void 0 ? void 0 : agent.id,
215
465
  lang: lang,
216
466
  isScrolling: isScrolling,
217
- faqs: agentFaqs,
218
- loading: faqsLoading
467
+ faqs: faqs,
468
+ loading: faqsAreLoading
219
469
  }), shouldShowFuas && /*#__PURE__*/_jsx(FrequentlyUsedActions, {
220
470
  onStartChat: onStartChat,
221
471
  agentId: agent === null || agent === void 0 ? void 0 : agent.id,
222
472
  isScrolling: isScrolling,
223
- actions: agentFuas,
224
- loading: fuasLoading
473
+ actions: fuas,
474
+ loading: fuasAreLoading
225
475
  }), isMaiaker ? /*#__PURE__*/_jsx(ChatAIHomeMaiaker, {
226
476
  onStartChat: onStartChat
227
477
  }) : null]
@@ -232,4 +482,4 @@ export var ChatAIHome = function ChatAIHome(_ref) {
232
482
  })]
233
483
  });
234
484
  };
235
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1c2VFZmZlY3QiLCJ1c2VSZWYiLCJ1c2VTdGF0ZSIsInVzZUNhbGxiYWNrIiwidXNlTWVtbyIsIlRvb2x0aXAiLCJ1c2VUIiwiU0NDQUlIb21lQ29udGFpbmVyIiwiU0NDQUlIb21lQ29udGVudCIsIlNDQ0FJSG9tZUNvbnRlbnRJbm5lciIsIlNDQ0FJSG9tZUdyYWRpZW50VG9wIiwiU0NDQUlIb21lR3JhZGllbnRCb3R0b20iLCJTQ0NBSUhvbWVIZWFkZXIiLCJTQ0NBSUhvbWVHcmVldGluZyIsIlNDQ0FJSG9tZUFnZW50SW5mb0NvbnRhaW5lciIsIlNDQ0FJSG9tZUFnZW50SW5mbyIsIlNDQ0FJSG9tZVByb2plY3RTdW1tYXJ5IiwiU0NDQUlIb21lUHJvamVjdFN1bW1hcnlDb250ZW50IiwiU0NDQUlIb21lUHJvamVjdFN1bW1hcnlUaXRsZSIsIlNDQ0FJSG9tZVByb2plY3RTdW1tYXJ5RGVzY3JpcHRpb24iLCJTQ0NBSFdyYXBwZXJTdW1tYXJ5UHJvamVjdCIsIlNDQ0FJSG9tZUludHJvZHVjdGlvbiIsIlNDQ0FJSG9tZUNyZWF0ZWRCeUNvbnRhaW5lciIsIlNDQ0FJSG9tZUNyZWF0ZWRCeVRleHQiLCJTQ0NBSUhvbWVDcmVhdGVkQnlUZXh0TmFtZSIsIlNDQ0FJSG9tZUljb25Db250YWluZXIiLCJTQ0NBSUhvbWVMb2dvV3JhcHBlciIsIlNDQ0FJSG9tZU1haWFIZWFkZXJTdGFjayIsIlNDQ0FJSG9tZUR5bmFtaWNTZWN0aW9uIiwidXNlR2xvYmFsQ29udGV4dCIsInZhbGlkYXRlSXNNYWlhIiwiaXNNYWlha2VyQWdlbnQiLCJGcmVxdWVudGx5QXNrZWRRdWVzdGlvbnMiLCJGcmVxdWVudGx5VXNlZEFjdGlvbnMiLCJ1c2VGcmVxdWVudGx5VXNlZEFjdGlvbnMiLCJ1c2VGcmVxdWVudGx5QXNrZWRRdWVzdGlvbnMiLCJNQUlBSXNvbG9nbyIsIlRlbXBsYXRlR3JhZGllbnRJY29uIiwiQ2hhdEFJSG9tZU1haWFrZXIiLCJqc3hzIiwiX2pzeHMiLCJqc3giLCJfanN4IiwiRnJlcXVlbnRRdWVzdGlvbnMiLCJDaGF0QUlIb21lIiwiX3JlZiIsImhhbmRsZXJzIiwib25TdGFydENoYXQiLCJleHBhbmRlZCIsImZsb2F0aW5nIiwiX3VzZVQiLCJ0IiwiaTE4biIsIl91c2VHbG9iYWxDb250ZXh0IiwiYWdlbnQiLCJzZWN0aW9uIiwiaXNNQUlBIiwiZmxvYXRpbmdDdXN0b21DZW50ZXIiLCJ0eXBlIiwibGFuZyIsImxhbmd1YWdlIiwic3VtbWFyeVByb2plY3RBY2Nlc3MiLCJ3aW5kb3ciLCJTdHJpbmciLCJNQUlBX1BST0pFQ1RfU1VNTUFSWV9GRUFUVVJFX0FDQ0VTUyIsInRvTG93ZXJDYXNlIiwibWFpYVByb2plY3RTdW1tYXJ5QWNjZXNzIiwiZmFxc0FjY2VzcyIsInNob3dQcm9qZWN0U3VtbWFyeSIsImlzTWFpYWtlciIsImhvbWVMaXN0c0FnZW50SWQiLCJpZCIsInVuZGVmaW5lZCIsIl91c2VGcmVxdWVudGx5VXNlZEFjdCIsImFnZW50RnVhcyIsImFjdGlvbnMiLCJmdWFzTG9hZGluZyIsImxvYWRpbmciLCJfdXNlRnJlcXVlbnRseUFza2VkUXUiLCJhZ2VudEZhcXMiLCJmYXFzIiwiZmFxc0xvYWRpbmciLCJoYW5kbGVHZXRGcmVxdWVudGx5QXNrZWRRdWVzdGlvbnMiLCJmYXFzRmV0Y2hSZWYiLCJjdXJyZW50S2V5IiwiY29uY2F0IiwibGFzdEtleSIsImN1cnJlbnQiLCJhZ2VudElkIiwic2hvdWxkU2hvd0ZhcXMiLCJsZW5ndGgiLCJzaG91bGRTaG93RnVhcyIsImhhc0FueUhvbWVMaXN0Q29udGVudCIsInNob3dQcm9qZWN0U3VtbWFyeUNhcmQiLCJlbnRpdHkiLCJzaG93RkFRcyIsImhvbWVTY3JvbGxhYmxlTGF5b3V0Iiwic2hvd0R5bmFtaWNTZWN0aW9uIiwiY29udGVudENvbnRhaW5lclJlZiIsIl91c2VTdGF0ZSIsIl91c2VTdGF0ZTIiLCJfc2xpY2VkVG9BcnJheSIsInNob3dUb3BHcmFkaWVudCIsInNldFNob3dUb3BHcmFkaWVudCIsIl91c2VTdGF0ZTMiLCJfdXNlU3RhdGU0Iiwic2hvd0JvdHRvbUdyYWRpZW50Iiwic2V0U2hvd0JvdHRvbUdyYWRpZW50IiwiX3VzZVN0YXRlNSIsIl91c2VTdGF0ZTYiLCJpc1Njcm9sbGluZyIsInNldElzU2Nyb2xsaW5nIiwic2Nyb2xsVGltZW91dFJlZiIsImdyZWV0aW5nIiwiaW50cm8iLCJpbnRyb2R1Y3Rpb24iLCJBcnJheSIsImlzQXJyYXkiLCJNYXRoIiwiZmxvb3IiLCJyYW5kb20iLCJjaGVja1Njcm9sbCIsImNvbnRhaW5lciIsInNjcm9sbFRvcCIsInNjcm9sbEhlaWdodCIsImNsaWVudEhlaWdodCIsImlzU2Nyb2xsYWJsZSIsImlzQXRUb3AiLCJpc0F0Qm90dG9tIiwiY2xlYXJUaW1lb3V0Iiwic2V0VGltZW91dCIsImFkZEV2ZW50TGlzdGVuZXIiLCJ0aW1lb3V0SWQiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwicmVuZGVySGVhZGVyQ29udGVudCIsIl9hZ2VudCRjcmVhdGVkX2J5IiwiX2FnZW50JGNyZWF0ZWRfYnkyIiwiY2hpbGRyZW4iLCJlbW9qaSIsIm5hbWUiLCJjcmVhdGVkX2J5IiwidGl0bGUiLCJpc19kZWxldGVkIiwiJG5vR2FwIiwiJHNob3ciLCJyZWYiLCIkaXNBZ2VudFZpZXciLCIkZmxvYXRpbmdDdXN0b21DZW50ZXIiLCIkZ2FwIiwiJG1heFdpZHRoIiwib25DbGljayIsInByb2plY3RTdW1tYXJ5IiwiaGVpZ2h0Iiwid2lkdGgiLCIkZ3JvdyJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL21vbGVjdWxlcy9DaGF0QUlIb21lL0NoYXRBSUhvbWUudHN4Il0sInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIHJlYWN0L2Z1bmN0aW9uLWNvbXBvbmVudC1kZWZpbml0aW9uICovXG4vKiBlc2xpbnQtZGlzYWJsZSBqc3gtYTExeS9jbGljay1ldmVudHMtaGF2ZS1rZXktZXZlbnRzICovXG4vKiBlc2xpbnQtZGlzYWJsZSBqc3gtYTExeS9uby1zdGF0aWMtZWxlbWVudC1pbnRlcmFjdGlvbnMgKi9cbmltcG9ydCB7IHVzZUVmZmVjdCwgdXNlUmVmLCB1c2VTdGF0ZSwgdXNlQ2FsbGJhY2ssIHVzZU1lbW8gfSBmcm9tICdyZWFjdCdcblxuaW1wb3J0IHsgVG9vbHRpcCB9IGZyb20gJ0Bwcm9qZWN0Y29yL3Rvb2x0aXB2Mi9saWIvY29tcG9uZW50cy9Ub29sdGlwJ1xuaW1wb3J0IHsgdXNlVCB9IGZyb20gJy4uLy4uLy4uL2hvb2tzL3VzZVQnXG5cbmltcG9ydCB7IG9wdGlvbnMgfSBmcm9tICcuLi9DaGF0QUlNb2RhbC9jb25zdGFudHMnXG5cbmltcG9ydCB7XG4gIFNDQ0FJSG9tZUNvbnRhaW5lcixcbiAgU0NDQUlIb21lQ29udGVudCxcbiAgU0NDQUlIb21lQ29udGVudElubmVyLFxuICBTQ0NBSUhvbWVHcmFkaWVudFRvcCxcbiAgU0NDQUlIb21lR3JhZGllbnRCb3R0b20sXG4gIFNDQ0FJSG9tZUhlYWRlcixcbiAgU0NDQUlIb21lR3JlZXRpbmcsXG4gIFNDQ0FJSG9tZUFnZW50SW5mb0NvbnRhaW5lcixcbiAgU0NDQUlIb21lQWdlbnRJbmZvLFxuICBTQ0NBSUhvbWVQcm9qZWN0U3VtbWFyeSxcbiAgU0NDQUlIb21lUHJvamVjdFN1bW1hcnlDb250ZW50LFxuICBTQ0NBSUhvbWVQcm9qZWN0U3VtbWFyeVRpdGxlLFxuICBTQ0NBSUhvbWVQcm9qZWN0U3VtbWFyeURlc2NyaXB0aW9uLFxuICBTQ0NBSFdyYXBwZXJTdW1tYXJ5UHJvamVjdCxcbiAgU0NDQUlIb21lSW50cm9kdWN0aW9uLFxuICBTQ0NBSUhvbWVDcmVhdGVkQnlDb250YWluZXIsXG4gIFNDQ0FJSG9tZUNyZWF0ZWRCeVRleHQsXG4gIFNDQ0FJSG9tZUNyZWF0ZWRCeVRleHROYW1lLFxuICBTQ0NBSUhvbWVJY29uQ29udGFpbmVyLFxuICBTQ0NBSUhvbWVMb2dvV3JhcHBlcixcbiAgU0NDQUlIb21lTWFpYUhlYWRlclN0YWNrLFxuICBTQ0NBSUhvbWVEeW5hbWljU2VjdGlvbixcbn0gZnJvbSAnLi9zdHlsZXMnXG5pbXBvcnQgeyB1c2VHbG9iYWxDb250ZXh0IH0gZnJvbSAnLi4vLi4vLi4vY29udGV4dC9nbG9iYWwtY29udGV4dCdcbmltcG9ydCB7IHZhbGlkYXRlSXNNYWlhIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvdXRpbHMvdmFsaWRhdGVJc01haWEnXG5pbXBvcnQgeyBpc01haWFrZXJBZ2VudCB9IGZyb20gJy4uLy4uLy4uL3V0aWxzL2FnZW50RGlzcGxheU5hbWUnXG5pbXBvcnQgeyBBZ2VudCB9IGZyb20gJy4uLy4uLy4uL3R5cGVzL2FnZW50J1xuaW1wb3J0IHsgQXR0YWNobWVudEZpbGUgfSBmcm9tICcuLi9DaGF0Rm9vdGVyL0NoYXRGb290ZXInXG5pbXBvcnQgeyBGcmVxdWVudGx5QXNrZWRRdWVzdGlvbnMgfSBmcm9tICcuLi8uLi9hdG9tcy9GcmVxdWVudGx5QXNrZWRRdWVzdGlvbnMnXG5pbXBvcnQgeyBGcmVxdWVudGx5VXNlZEFjdGlvbnMgfSBmcm9tICcuLi8uLi9hdG9tcy9GcmVxdWVudGx5VXNlZEFjdGlvbnMnXG5pbXBvcnQgeyB1c2VGcmVxdWVudGx5VXNlZEFjdGlvbnMgfSBmcm9tICcuLi8uLi8uLi9ob29rcy91c2VGcmVxdWVudGx5VXNlZEFjdGlvbnMnXG5pbXBvcnQgeyB1c2VGcmVxdWVudGx5QXNrZWRRdWVzdGlvbnMgfSBmcm9tICcuLi8uLi8uLi9ob29rcy91c2VGcmVxdWVudGx5QXNrZWRRdWVzdGlvbnMnXG5pbXBvcnQgeyBNQUlBSXNvbG9nbyB9IGZyb20gJy4uLy4uL2F0b21zL2ljb25zL01BSUFJc29sb2dvJ1xuaW1wb3J0IHsgVGVtcGxhdGVHcmFkaWVudEljb24gfSBmcm9tICcuLi8uLi9hdG9tcy9pY29ucy9UZW1wbGF0ZUdyYWRpZW50SWNvbidcbmltcG9ydCB7IENoYXRBSUhvbWVNYWlha2VyIH0gZnJvbSAnLi9DaGF0QUlIb21lTWFpYWtlcidcblxudHlwZSBDaGF0QUlIb21lUHJvcHMgPSB7XG4gIG9uU3RhcnRDaGF0OiAoXG4gICAgbWVzc2FnZTogc3RyaW5nLFxuICAgIGF0dGFjaG1lbnRzPzogQXR0YWNobWVudEZpbGVbXSB8IG51bGwsXG4gICAgZmFxSWQ/OiBzdHJpbmcsXG4gICAgYWdlbnRTdWdnZXN0aW9uSWQ/OiBzdHJpbmcsXG4gICAgbWVudGlvbnM/OiBudWxsLFxuICAgIGZ1YUlkPzogc3RyaW5nXG4gICkgPT4gdm9pZFxuICBoYW5kbGVyczogUmVjb3JkPG9wdGlvbnMsICgpID0+IHZvaWQ+XG4gIGV4cGFuZGVkPzogYm9vbGVhblxuICBmbG9hdGluZz86IGJvb2xlYW5cbn1cblxuZXhwb3J0IGVudW0gRnJlcXVlbnRRdWVzdGlvbnMge1xuICByZW50YWJpbGlkYWRfcHJveWVjdG8gPSAncmVudGFiaWxpZGFkX3Byb3llY3RvJyxcbiAgYXZhbmNlX3Byb3llY3RvID0gJ2F2YW5jZV9wcm95ZWN0bycsXG59XG5cbmV4cG9ydCBjb25zdCBDaGF0QUlIb21lID0gKHsgaGFuZGxlcnMsIG9uU3RhcnRDaGF0LCBleHBhbmRlZCwgZmxvYXRpbmcgfTogQ2hhdEFJSG9tZVByb3BzKSA9PiB7XG4gIGNvbnN0IHsgdCwgaTE4biB9ID0gdXNlVCgpXG4gIGNvbnN0IHsgYWdlbnQsIHNlY3Rpb24gfSA9IHVzZUdsb2JhbENvbnRleHQoKVxuXG4gIGNvbnN0IGlzTUFJQSA9IHZhbGlkYXRlSXNNYWlhKGFnZW50IGFzIEFnZW50KVxuICBjb25zdCBmbG9hdGluZ0N1c3RvbUNlbnRlciA9ICEhKGZsb2F0aW5nICYmIGFnZW50Py50eXBlID09PSAnY3VzdG9tJylcbiAgY29uc3QgbGFuZyA9IGkxOG4ubGFuZ3VhZ2UgPT09ICdicicgPyAncHQnIDogaTE4bi5sYW5ndWFnZVxuXG4gIGNvbnN0IHN1bW1hcnlQcm9qZWN0QWNjZXNzID1cbiAgICB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJlxuICAgIChTdHJpbmcod2luZG93Lk1BSUFfUFJPSkVDVF9TVU1NQVJZX0ZFQVRVUkVfQUNDRVNTKS50b0xvd2VyQ2FzZSgpID09PSAndHJ1ZScgfHxcbiAgICAgIFN0cmluZyh3aW5kb3cubWFpYVByb2plY3RTdW1tYXJ5QWNjZXNzKS50b0xvd2VyQ2FzZSgpID09PSAndHJ1ZScpXG4gIGNvbnN0IGZhcXNBY2Nlc3MgPSB0cnVlXG4gIGNvbnN0IHNob3dQcm9qZWN0U3VtbWFyeSA9ICEhKGlzTUFJQSAmJiBzdW1tYXJ5UHJvamVjdEFjY2VzcylcbiAgY29uc3QgaXNNYWlha2VyID0gaXNNYWlha2VyQWdlbnQoYWdlbnQpXG4gIC8vIEZVQSB5IEZBUSBzb2xvIGFwbGljYW4gYSBhZ2VudGVzIGNsb25lIChsb3MgY3VzdG9tIG5vIGxhcyB0aWVuZW4gaGFiaWxpdGFkYXMgcG9yIGFob3JhKS5cbiAgLy8gTWFpYWtlciAoY2xvbmUgZ2xvYmFsKSBxdWVkYSBleGNsdWlkbyBjb21vIGFudGVzLlxuICBjb25zdCBob21lTGlzdHNBZ2VudElkID0gaXNNQUlBICYmICFpc01haWFrZXIgPyBhZ2VudD8uaWQgOiB1bmRlZmluZWRcbiAgY29uc3QgeyBhY3Rpb25zOiBhZ2VudEZ1YXMsIGxvYWRpbmc6IGZ1YXNMb2FkaW5nIH0gPSB1c2VGcmVxdWVudGx5VXNlZEFjdGlvbnMoaG9tZUxpc3RzQWdlbnRJZCwgc2VjdGlvbilcbiAgY29uc3Qge1xuICAgIGZhcXM6IGFnZW50RmFxcyxcbiAgICBsb2FkaW5nOiBmYXFzTG9hZGluZyxcbiAgICBoYW5kbGVHZXRGcmVxdWVudGx5QXNrZWRRdWVzdGlvbnMsXG4gIH0gPSB1c2VGcmVxdWVudGx5QXNrZWRRdWVzdGlvbnMoaG9tZUxpc3RzQWdlbnRJZCwgbGFuZylcbiAgY29uc3QgZmFxc0ZldGNoUmVmID0gdXNlUmVmPHsgYWdlbnRJZDogc3RyaW5nOyBsYW5nOiBzdHJpbmcgfSB8IG51bGw+KG51bGwpXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFpc01BSUEgfHwgaXNNYWlha2VyIHx8IHNlY3Rpb24gPT09ICd0YXNrJyB8fCAhYWdlbnQ/LmlkKSByZXR1cm5cbiAgICBjb25zdCBjdXJyZW50S2V5ID0gYCR7YWdlbnQuaWR9LSR7bGFuZ31gXG4gICAgY29uc3QgbGFzdEtleSA9IGZhcXNGZXRjaFJlZi5jdXJyZW50ID8gYCR7ZmFxc0ZldGNoUmVmLmN1cnJlbnQuYWdlbnRJZH0tJHtmYXFzRmV0Y2hSZWYuY3VycmVudC5sYW5nfWAgOiBudWxsXG4gICAgaWYgKGN1cnJlbnRLZXkgIT09IGxhc3RLZXkpIHtcbiAgICAgIGZhcXNGZXRjaFJlZi5jdXJyZW50ID0geyBhZ2VudElkOiBhZ2VudC5pZCwgbGFuZyB9XG4gICAgICBoYW5kbGVHZXRGcmVxdWVudGx5QXNrZWRRdWVzdGlvbnMoeyBhZ2VudElkOiBhZ2VudC5pZCwgbGFuZyB9KVxuICAgIH1cbiAgfSwgW2lzTWFpYWtlciwgc2VjdGlvbiwgYWdlbnQ/LmlkLCBsYW5nLCBoYW5kbGVHZXRGcmVxdWVudGx5QXNrZWRRdWVzdGlvbnNdKVxuXG4gIGNvbnN0IHNob3VsZFNob3dGYXFzID0gIWlzTWFpYWtlciAmJiBzZWN0aW9uICE9PSAndGFzaycgJiYgZmFxc0FjY2VzcyAmJiAoYWdlbnRGYXFzLmxlbmd0aCA+IDAgfHwgZmFxc0xvYWRpbmcpXG4gIGNvbnN0IHNob3VsZFNob3dGdWFzID0gIWlzTWFpYWtlciAmJiAoYWdlbnRGdWFzLmxlbmd0aCA+IDAgfHwgZnVhc0xvYWRpbmcpXG4gIGNvbnN0IGhhc0FueUhvbWVMaXN0Q29udGVudCA9XG4gICAgKCFpc01haWFrZXIgJiYgc2VjdGlvbiAhPT0gJ3Rhc2snICYmIGZhcXNBY2Nlc3MgJiYgYWdlbnRGYXFzLmxlbmd0aCA+IDApIHx8ICghaXNNYWlha2VyICYmIGFnZW50RnVhcy5sZW5ndGggPiAwKVxuXG4gIGNvbnN0IHNob3dQcm9qZWN0U3VtbWFyeUNhcmQgPSBzaG93UHJvamVjdFN1bW1hcnkgJiYgYWdlbnQ/LmVudGl0eSA9PT0gJ3Byb2plY3QnXG4gIGNvbnN0IHNob3dGQVFzID0gISEoaGFzQW55SG9tZUxpc3RDb250ZW50IHx8IHNob3dQcm9qZWN0U3VtbWFyeUNhcmQgfHwgaXNNYWlha2VyKVxuICBjb25zdCBob21lU2Nyb2xsYWJsZUxheW91dCA9IHNob3dGQVFzXG4gIGNvbnN0IHNob3dEeW5hbWljU2VjdGlvbiA9IGhhc0FueUhvbWVMaXN0Q29udGVudCB8fCBzaG91bGRTaG93RmFxcyB8fCBzaG91bGRTaG93RnVhcyB8fCBpc01haWFrZXJcblxuICAvLyBMw7NnaWNhIGRlbCBzY3JvbGwgY29uIGdyYWRpZW50ZXNcbiAgY29uc3QgY29udGVudENvbnRhaW5lclJlZiA9IHVzZVJlZjxIVE1MRGl2RWxlbWVudD4obnVsbClcbiAgY29uc3QgW3Nob3dUb3BHcmFkaWVudCwgc2V0U2hvd1RvcEdyYWRpZW50XSA9IHVzZVN0YXRlKGZhbHNlKVxuICBjb25zdCBbc2hvd0JvdHRvbUdyYWRpZW50LCBzZXRTaG93Qm90dG9tR3JhZGllbnRdID0gdXNlU3RhdGUoZmFsc2UpXG4gIGNvbnN0IFtpc1Njcm9sbGluZywgc2V0SXNTY3JvbGxpbmddID0gdXNlU3RhdGUoZmFsc2UpXG4gIGNvbnN0IHNjcm9sbFRpbWVvdXRSZWYgPSB1c2VSZWY8UmV0dXJuVHlwZTx0eXBlb2Ygc2V0VGltZW91dD4gfCBudWxsPihudWxsKVxuXG4gIC8vIFNhbHVkbyBhbGVhdG9yaW8gZGVzZGUgYWdlbnQuaW50cm9kdWN0aW9uIChhcnJheSBjb24gMyB2YXJpYW50ZXMgZGVsIGJhY2spLiBFbiB0YXNrLCBtZW5zYWplIGZpam8gaTE4bi4gTWFpYWtlciBzaW4gaW50cm8gZGVsIGFnZW50ZS5cbiAgY29uc3QgZ3JlZXRpbmcgPSB1c2VNZW1vKCgpID0+IHtcbiAgICBpZiAoaXNNYWlha2VyKSByZXR1cm4gJydcbiAgICBpZiAoc2VjdGlvbiA9PT0gJ3Rhc2snKSByZXR1cm4gdCgnaG9tZU1lbnUudGFza0dyZWV0aW5nJylcbiAgICBjb25zdCBpbnRybyA9IGFnZW50Py5pbnRyb2R1Y3Rpb25cbiAgICBpZiAoIWludHJvKSByZXR1cm4gJydcbiAgICBpZiAoQXJyYXkuaXNBcnJheShpbnRybykgJiYgaW50cm8ubGVuZ3RoID4gMCkge1xuICAgICAgcmV0dXJuIGludHJvW01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIGludHJvLmxlbmd0aCldXG4gICAgfVxuICAgIHJldHVybiB0eXBlb2YgaW50cm8gPT09ICdzdHJpbmcnID8gaW50cm8gOiAnJ1xuICB9LCBbYWdlbnQ/LmlkLCBhZ2VudD8uaW50cm9kdWN0aW9uLCBzZWN0aW9uLCBpc01haWFrZXIsIHRdKVxuXG4gIGNvbnN0IGNoZWNrU2Nyb2xsID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGNvbnN0IGNvbnRhaW5lciA9IGNvbnRlbnRDb250YWluZXJSZWYuY3VycmVudFxuICAgIGlmICghY29udGFpbmVyIHx8ICFob21lU2Nyb2xsYWJsZUxheW91dCkgcmV0dXJuXG5cbiAgICBjb25zdCB7IHNjcm9sbFRvcCwgc2Nyb2xsSGVpZ2h0LCBjbGllbnRIZWlnaHQgfSA9IGNvbnRhaW5lclxuICAgIGNvbnN0IGlzU2Nyb2xsYWJsZSA9IHNjcm9sbEhlaWdodCA+IGNsaWVudEhlaWdodFxuICAgIGNvbnN0IGlzQXRUb3AgPSBzY3JvbGxUb3AgPT09IDBcbiAgICBjb25zdCBpc0F0Qm90dG9tID0gc2Nyb2xsVG9wICsgY2xpZW50SGVpZ2h0ID49IHNjcm9sbEhlaWdodCAtIDFcblxuICAgIHNldFNob3dUb3BHcmFkaWVudChpc1Njcm9sbGFibGUgJiYgIWlzQXRUb3ApXG4gICAgc2V0U2hvd0JvdHRvbUdyYWRpZW50KGlzU2Nyb2xsYWJsZSAmJiAhaXNBdEJvdHRvbSlcbiAgICBzZXRJc1Njcm9sbGluZyh0cnVlKVxuXG4gICAgaWYgKHNjcm9sbFRpbWVvdXRSZWYuY3VycmVudCkge1xuICAgICAgY2xlYXJUaW1lb3V0KHNjcm9sbFRpbWVvdXRSZWYuY3VycmVudClcbiAgICB9XG5cbiAgICBzY3JvbGxUaW1lb3V0UmVmLmN1cnJlbnQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHNldElzU2Nyb2xsaW5nKGZhbHNlKVxuICAgIH0sIDE1MClcbiAgfSwgW2hvbWVTY3JvbGxhYmxlTGF5b3V0XSlcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghaG9tZVNjcm9sbGFibGVMYXlvdXQpIHtcbiAgICAgIHNldFNob3dUb3BHcmFkaWVudChmYWxzZSlcbiAgICAgIHNldFNob3dCb3R0b21HcmFkaWVudChmYWxzZSlcbiAgICAgIHJldHVybiB1bmRlZmluZWRcbiAgICB9XG5cbiAgICBjb25zdCBjb250YWluZXIgPSBjb250ZW50Q29udGFpbmVyUmVmLmN1cnJlbnRcbiAgICBpZiAoIWNvbnRhaW5lcikge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZFxuICAgIH1cblxuICAgIGNoZWNrU2Nyb2xsKClcbiAgICBjb250YWluZXIuYWRkRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgY2hlY2tTY3JvbGwpXG5cbiAgICBjb25zdCB0aW1lb3V0SWQgPSBzZXRUaW1lb3V0KGNoZWNrU2Nyb2xsLCAxMDApXG5cbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgY29udGFpbmVyLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIGNoZWNrU2Nyb2xsKVxuICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXRJZClcbiAgICAgIGlmIChzY3JvbGxUaW1lb3V0UmVmLmN1cnJlbnQpIHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHNjcm9sbFRpbWVvdXRSZWYuY3VycmVudClcbiAgICAgIH1cbiAgICB9XG4gIH0sIFtob21lU2Nyb2xsYWJsZUxheW91dCwgY2hlY2tTY3JvbGxdKVxuXG4gIGNvbnN0IHJlbmRlckhlYWRlckNvbnRlbnQgPSAoKSA9PiB7XG4gICAgaWYgKCFpc01BSUEpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxTQ0NBSUhvbWVBZ2VudEluZm9Db250YWluZXI+XG4gICAgICAgICAgPFNDQ0FJSG9tZUFnZW50SW5mbz5cbiAgICAgICAgICAgIHthZ2VudD8uZW1vaml9IHthZ2VudD8ubmFtZX1cbiAgICAgICAgICA8L1NDQ0FJSG9tZUFnZW50SW5mbz5cbiAgICAgICAgICB7YWdlbnQ/LmNyZWF0ZWRfYnkgJiYgIWlzTUFJQSAmJiAoXG4gICAgICAgICAgICA8U0NDQUlIb21lQ3JlYXRlZEJ5Q29udGFpbmVyPlxuICAgICAgICAgICAgICA8VG9vbHRpcFxuICAgICAgICAgICAgICAgIHRpdGxlPXtcbiAgICAgICAgICAgICAgICAgIGFnZW50Py5jcmVhdGVkX2J5Py5pc19kZWxldGVkID8gdCgnaG9tZU1lbnUuY3JlYXRlZEJ5VG9vbHRpcERlbGV0ZWQnKSA6IHQoJ2hvbWVNZW51LmNyZWF0ZWRCeVRvb2x0aXAnKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxTQ0NBSUhvbWVDcmVhdGVkQnlUZXh0PlxuICAgICAgICAgICAgICAgICAge3QoJ2hvbWVNZW51LmNyZWF0ZWRCeScpfXsnICd9XG4gICAgICAgICAgICAgICAgICA8U0NDQUlIb21lQ3JlYXRlZEJ5VGV4dE5hbWU+e2FnZW50Py5jcmVhdGVkX2J5Py5uYW1lfTwvU0NDQUlIb21lQ3JlYXRlZEJ5VGV4dE5hbWU+XG4gICAgICAgICAgICAgICAgPC9TQ0NBSUhvbWVDcmVhdGVkQnlUZXh0PlxuICAgICAgICAgICAgICA8L1Rvb2x0aXA+XG4gICAgICAgICAgICA8L1NDQ0FJSG9tZUNyZWF0ZWRCeUNvbnRhaW5lcj5cbiAgICAgICAgICApfVxuICAgICAgICA8L1NDQ0FJSG9tZUFnZW50SW5mb0NvbnRhaW5lcj5cbiAgICAgIClcbiAgICB9XG5cbiAgICByZXR1cm4gKFxuICAgICAgPFNDQ0FJSG9tZU1haWFIZWFkZXJTdGFjayAkbm9HYXA9eyFncmVldGluZ30+XG4gICAgICAgIDxTQ0NBSUhvbWVJY29uQ29udGFpbmVyPlxuICAgICAgICAgIDxTQ0NBSUhvbWVMb2dvV3JhcHBlcj5cbiAgICAgICAgICAgIDxNQUlBSXNvbG9nbyAvPlxuICAgICAgICAgIDwvU0NDQUlIb21lTG9nb1dyYXBwZXI+XG4gICAgICAgIDwvU0NDQUlIb21lSWNvbkNvbnRhaW5lcj5cbiAgICAgICAge2dyZWV0aW5nID8gPFNDQ0FJSG9tZUdyZWV0aW5nPntncmVldGluZ308L1NDQ0FJSG9tZUdyZWV0aW5nPiA6IG51bGx9XG4gICAgICA8L1NDQ0FJSG9tZU1haWFIZWFkZXJTdGFjaz5cbiAgICApXG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxTQ0NBSUhvbWVDb250YWluZXIgc2hvd0ZBUXM9e3Nob3dGQVFzfT5cbiAgICAgIHtob21lU2Nyb2xsYWJsZUxheW91dCAmJiA8U0NDQUlIb21lR3JhZGllbnRUb3AgJHNob3c9e3Nob3dUb3BHcmFkaWVudH0gLz59XG4gICAgICA8U0NDQUlIb21lQ29udGVudFxuICAgICAgICByZWY9e2NvbnRlbnRDb250YWluZXJSZWZ9XG4gICAgICAgIHNob3dGQVFzPXtob21lU2Nyb2xsYWJsZUxheW91dH1cbiAgICAgICAgJGlzQWdlbnRWaWV3PXshaXNNQUlBfVxuICAgICAgICAkZmxvYXRpbmdDdXN0b21DZW50ZXI9e2Zsb2F0aW5nQ3VzdG9tQ2VudGVyfVxuICAgICAgPlxuICAgICAgICA8U0NDQUlIb21lQ29udGVudElubmVyXG4gICAgICAgICAgc2hvd0ZBUXM9e2hvbWVTY3JvbGxhYmxlTGF5b3V0fVxuICAgICAgICAgICRpc0FnZW50Vmlldz17IWlzTUFJQX1cbiAgICAgICAgICAkZmxvYXRpbmdDdXN0b21DZW50ZXI9e2Zsb2F0aW5nQ3VzdG9tQ2VudGVyfVxuICAgICAgICA+XG4gICAgICAgICAgPFNDQ0FJSG9tZUhlYWRlclxuICAgICAgICAgICAgJGdhcD17aXNNQUlBICYmIHNlY3Rpb24gIT09ICdwcm9qZWN0JyA/ICc4cHgnIDogJzIwcHgnfVxuICAgICAgICAgICAgJG1heFdpZHRoPXtpc01BSUEgPyAnMTAwJScgOiAnMzgwcHgnfVxuICAgICAgICAgICAgJGlzQWdlbnRWaWV3PXshaXNNQUlBfVxuICAgICAgICAgID5cbiAgICAgICAgICAgIHtyZW5kZXJIZWFkZXJDb250ZW50KCl9XG5cbiAgICAgICAgICAgIHtzZWN0aW9uICE9PSAncHJvamVjdCcgJiYgKFxuICAgICAgICAgICAgICA8U0NDQUlIb21lSW50cm9kdWN0aW9uIGV4cGFuZGVkPXtleHBhbmRlZH0+eyFpc01BSUEgJiYgYWdlbnQ/LmludHJvZHVjdGlvbn08L1NDQ0FJSG9tZUludHJvZHVjdGlvbj5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgPC9TQ0NBSUhvbWVIZWFkZXI+XG4gICAgICAgICAge3Nob3dQcm9qZWN0U3VtbWFyeUNhcmQgJiYgKFxuICAgICAgICAgICAgPFNDQ0FIV3JhcHBlclN1bW1hcnlQcm9qZWN0IG9uQ2xpY2s9e2hhbmRsZXJzLnByb2plY3RTdW1tYXJ5fT5cbiAgICAgICAgICAgICAgPFNDQ0FJSG9tZVByb2plY3RTdW1tYXJ5PlxuICAgICAgICAgICAgICAgIDxUZW1wbGF0ZUdyYWRpZW50SWNvbiBoZWlnaHQ9ezI0fSB3aWR0aD17MjR9IC8+XG4gICAgICAgICAgICAgIDwvU0NDQUlIb21lUHJvamVjdFN1bW1hcnk+XG4gICAgICAgICAgICAgIDxTQ0NBSUhvbWVQcm9qZWN0U3VtbWFyeUNvbnRlbnQ+XG4gICAgICAgICAgICAgICAgPFNDQ0FJSG9tZVByb2plY3RTdW1tYXJ5VGl0bGU+e3QoJ2hvbWVNZW51LnByb2plY3RTdW1tYXJ5LnRpdGxlJyl9PC9TQ0NBSUhvbWVQcm9qZWN0U3VtbWFyeVRpdGxlPlxuICAgICAgICAgICAgICAgIDxTQ0NBSUhvbWVQcm9qZWN0U3VtbWFyeURlc2NyaXB0aW9uPlxuICAgICAgICAgICAgICAgICAge3QoJ2hvbWVNZW51LnByb2plY3RTdW1tYXJ5LmRlc2NyaXB0aW9uJyl9XG4gICAgICAgICAgICAgICAgPC9TQ0NBSUhvbWVQcm9qZWN0U3VtbWFyeURlc2NyaXB0aW9uPlxuICAgICAgICAgICAgICA8L1NDQ0FJSG9tZVByb2plY3RTdW1tYXJ5Q29udGVudD5cbiAgICAgICAgICAgIDwvU0NDQUhXcmFwcGVyU3VtbWFyeVByb2plY3Q+XG4gICAgICAgICAgKX1cbiAgICAgICAgICB7c2hvd0R5bmFtaWNTZWN0aW9uICYmIChcbiAgICAgICAgICAgIDxTQ0NBSUhvbWVEeW5hbWljU2VjdGlvbiAkZ3Jvdz17aXNNYWlha2VyfT5cbiAgICAgICAgICAgICAge3Nob3VsZFNob3dGYXFzICYmIChcbiAgICAgICAgICAgICAgICA8RnJlcXVlbnRseUFza2VkUXVlc3Rpb25zXG4gICAgICAgICAgICAgICAgICBvblN0YXJ0Q2hhdD17b25TdGFydENoYXR9XG4gICAgICAgICAgICAgICAgICBzaG93RkFRcz17c2hvd0ZBUXN9XG4gICAgICAgICAgICAgICAgICBzaG93UHJvamVjdFN1bW1hcnk9e3Nob3dQcm9qZWN0U3VtbWFyeX1cbiAgICAgICAgICAgICAgICAgIGFnZW50SWQ9e2FnZW50Py5pZH1cbiAgICAgICAgICAgICAgICAgIGxhbmc9e2xhbmd9XG4gICAgICAgICAgICAgICAgICBpc1Njcm9sbGluZz17aXNTY3JvbGxpbmd9XG4gICAgICAgICAgICAgICAgICBmYXFzPXthZ2VudEZhcXN9XG4gICAgICAgICAgICAgICAgICBsb2FkaW5nPXtmYXFzTG9hZGluZ31cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICB7c2hvdWxkU2hvd0Z1YXMgJiYgKFxuICAgICAgICAgICAgICAgIDxGcmVxdWVudGx5VXNlZEFjdGlvbnNcbiAgICAgICAgICAgICAgICAgIG9uU3RhcnRDaGF0PXtvblN0YXJ0Q2hhdH1cbiAgICAgICAgICAgICAgICAgIGFnZW50SWQ9e2FnZW50Py5pZH1cbiAgICAgICAgICAgICAgICAgIGlzU2Nyb2xsaW5nPXtpc1Njcm9sbGluZ31cbiAgICAgICAgICAgICAgICAgIGFjdGlvbnM9e2FnZW50RnVhc31cbiAgICAgICAgICAgICAgICAgIGxvYWRpbmc9e2Z1YXNMb2FkaW5nfVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgIHtpc01haWFrZXIgPyA8Q2hhdEFJSG9tZU1haWFrZXIgb25TdGFydENoYXQ9e29uU3RhcnRDaGF0fSAvPiA6IG51bGx9XG4gICAgICAgICAgICA8L1NDQ0FJSG9tZUR5bmFtaWNTZWN0aW9uPlxuICAgICAgICAgICl9XG4gICAgICAgIDwvU0NDQUlIb21lQ29udGVudElubmVyPlxuICAgICAgPC9TQ0NBSUhvbWVDb250ZW50PlxuICAgICAge2hvbWVTY3JvbGxhYmxlTGF5b3V0ICYmIDxTQ0NBSUhvbWVHcmFkaWVudEJvdHRvbSAkc2hvdz17c2hvd0JvdHRvbUdyYWRpZW50fSAvPn1cbiAgICA8L1NDQ0FJSG9tZUNvbnRhaW5lcj5cbiAgKVxufVxuIl0sIm1hcHBpbmdzIjoiO0FBQUE7QUFDQTtBQUNBO0FBQ0EsU0FBU0EsU0FBUyxFQUFFQyxNQUFNLEVBQUVDLFFBQVEsRUFBRUMsV0FBVyxFQUFFQyxPQUFPLFFBQVEsT0FBTztBQUV6RSxTQUFTQyxPQUFPLFFBQVEsOENBQThDO0FBQ3RFLFNBQVNDLElBQUksUUFBUSxxQkFBcUI7QUFJMUMsU0FDRUMsa0JBQWtCLEVBQ2xCQyxnQkFBZ0IsRUFDaEJDLHFCQUFxQixFQUNyQkMsb0JBQW9CLEVBQ3BCQyx1QkFBdUIsRUFDdkJDLGVBQWUsRUFDZkMsaUJBQWlCLEVBQ2pCQywyQkFBMkIsRUFDM0JDLGtCQUFrQixFQUNsQkMsdUJBQXVCLEVBQ3ZCQyw4QkFBOEIsRUFDOUJDLDRCQUE0QixFQUM1QkMsa0NBQWtDLEVBQ2xDQywwQkFBMEIsRUFDMUJDLHFCQUFxQixFQUNyQkMsMkJBQTJCLEVBQzNCQyxzQkFBc0IsRUFDdEJDLDBCQUEwQixFQUMxQkMsc0JBQXNCLEVBQ3RCQyxvQkFBb0IsRUFDcEJDLHdCQUF3QixFQUN4QkMsdUJBQXVCLFFBQ2xCLFVBQVU7QUFDakIsU0FBU0MsZ0JBQWdCLFFBQVEsaUNBQWlDO0FBQ2xFLFNBQVNDLGNBQWMsUUFBUSx3Q0FBd0M7QUFDdkUsU0FBU0MsY0FBYyxRQUFRLGlDQUFpQztBQUdoRSxTQUFTQyx3QkFBd0IsUUFBUSxzQ0FB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
485
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1c2VFZmZlY3QiLCJ1c2VSZWYiLCJ1c2VTdGF0ZSIsInVzZUNhbGxiYWNrIiwidXNlTWVtbyIsIlRvb2x0aXAiLCJMaXN0Q2hlY2tsaXN0IiwidXNlVCIsIkVWRU5UUyIsInVzZUV2ZW50IiwiU0NDQUlIb21lQ29udGFpbmVyIiwiU0NDQUlIb21lQ29udGVudCIsIlNDQ0FJSG9tZUNvbnRlbnRJbm5lciIsIlNDQ0FJSG9tZUdyYWRpZW50VG9wIiwiU0NDQUlIb21lR3JhZGllbnRCb3R0b20iLCJTQ0NBSUhvbWVIZWFkZXIiLCJTQ0NBSUhvbWVHcmVldGluZyIsIlNDQ0FJSG9tZUFnZW50SW5mb0NvbnRhaW5lciIsIlNDQ0FJSG9tZUFnZW50SW5mbyIsIlNDQ0FJSG9tZVByb2plY3RTdW1tYXJ5IiwiU0NDQUlIb21lUHJvamVjdFN1bW1hcnlDb250ZW50IiwiU0NDQUlIb21lUHJvamVjdFN1bW1hcnlUaXRsZSIsIlNDQ0FJSG9tZVByb2plY3RTdW1tYXJ5RGVzY3JpcHRpb24iLCJTQ0NBSFdyYXBwZXJTdW1tYXJ5UHJvamVjdCIsIlNDQ0FJSG9tZUludHJvZHVjdGlvbiIsIlNDQ0FJSG9tZUNyZWF0ZWRCeUNvbnRhaW5lciIsIlNDQ0FJSG9tZUNyZWF0ZWRCeVRleHQiLCJTQ0NBSUhvbWVDcmVhdGVkQnlUZXh0TmFtZSIsIlNDQ0FJSG9tZUljb25Db250YWluZXIiLCJTQ0NBSUhvbWVMb2dvV3JhcHBlciIsIlNDQ0FJSG9tZU1haWFIZWFkZXJTdGFjayIsIlNDQ0FJSG9tZVRpdGxlIiwiU0NDQUlIb21lU3VidGl0bGUiLCJTQ0NBSUhvbWVEeW5hbWljU2VjdGlvbiIsIlNDQ0FJSG9tZVJlY2VudENvbnRleHRzIiwiU0NDQUlIb21lUmVjZW50Q29udGV4dHNMaXN0IiwiU0NDQUlIb21lUmVjZW50Q29udGV4dFBpbGwiLCJTQ0NBSUhvbWVSZWNlbnRDb250ZXh0UGlsbEljb24iLCJTQ0NBSUhvbWVSZWNlbnRDb250ZXh0UGlsbFRleHQiLCJTQ0NBSUhvbWVSZWNlbnRDb250ZXh0UGlsbFNrZWxldG9uIiwidXNlR2xvYmFsQ29udGV4dCIsIkNPUlVzZXJSb2xlIiwidXNlVXNlciIsInVzZVJlc2l6ZUxpc3RlbmVyIiwiZ2V0Q29udGV4dE1lbnRpb25JY29uIiwidmFsaWRhdGVJc01haWEiLCJGcmVxdWVudGx5QXNrZWRRdWVzdGlvbnMiLCJGcmVxdWVudGx5VXNlZEFjdGlvbnMiLCJ1c2VGcmVxdWVudGx5VXNlZEFjdGlvbnMiLCJ1c2VGcmVxdWVudGx5QXNrZWRRdWVzdGlvbnMiLCJ1c2VSZWNlbnRDb250ZXh0cyIsIk1BSUFJc29sb2dvIiwiVGVtcGxhdGVHcmFkaWVudEljb24iLCJDaGF0QUlIb21lTWFpYWtlciIsImpzeCIsIl9qc3giLCJqc3hzIiwiX2pzeHMiLCJGcmFnbWVudCIsIl9GcmFnbWVudCIsIkZyZXF1ZW50UXVlc3Rpb25zIiwiUkVDRU5UX0NPTlRFWFRTX0xJTUlUIiwiUkVDRU5UX0NPTlRFWFRfSUNPTl9DT0xPUiIsIlJFQ0VOVF9DT05URVhUX1NLRUxFVE9OX0tFWVMiLCJSZWNlbnRDb250ZXh0UGlsbCIsIl9yZWYiLCJjb250ZXh0IiwibGFiZWwiLCJvbkNsaWNrIiwidGV4dFJlZiIsIl91c2VSZXNpemVMaXN0ZW5lciIsInNob3dUb29sdGlwIiwidHlwZSIsImNoaWxkcmVuIiwiY29sb3IiLCJ3aWR0aCIsImhlaWdodCIsInVuZGVmaW5lZCIsInJlZiIsInRpdGxlIiwicGFyc2VOdW1lcmljSWQiLCJ2YWx1ZSIsInBhcnNlZCIsIk51bWJlciIsImlzRmluaXRlIiwiZ2V0QWxsb3dlZFJlY2VudENvbnRleHRUeXBlcyIsInJvbGVJZCIsIkNMRVZFTCIsIkRJUkVDVE9SIiwiUFJPSkVDVF9NQU5BR0VSIiwiU2V0IiwiQ09MTEFCT1JBVE9SIiwiQ2hhdEFJSG9tZSIsIl9yZWYyIiwiaGFuZGxlcnMiLCJvblN0YXJ0Q2hhdCIsImV4cGFuZGVkIiwiZmxvYXRpbmciLCJfdXNlVCIsInQiLCJpMThuIiwiZXZlbnQiLCJ1c2VyIiwiX3VzZUdsb2JhbENvbnRleHQiLCJhZ2VudCIsInNlY3Rpb24iLCJjbGllbnQiLCJwcm9qZWN0IiwidGFzayIsImNoaXBzUHJvamVjdCIsInNldENsaWVudCIsInNldFByb2plY3QiLCJzZXRUYXNrIiwic2V0Q2hpcHNQcm9qZWN0IiwiaXNNQUlBIiwiZmxvYXRpbmdDdXN0b21DZW50ZXIiLCJsYW5nIiwibGFuZ3VhZ2UiLCJzdW1tYXJ5UHJvamVjdEFjY2VzcyIsIndpbmRvdyIsIlN0cmluZyIsIk1BSUFfUFJPSkVDVF9TVU1NQVJZX0ZFQVRVUkVfQUNDRVNTIiwidG9Mb3dlckNhc2UiLCJtYWlhUHJvamVjdFN1bW1hcnlBY2Nlc3MiLCJmYXFzQWNjZXNzIiwic2hvd1Byb2plY3RTdW1tYXJ5IiwiaXNNYWlha2VyIiwiZW50aXR5IiwidGVzdCIsIm5hbWUiLCJpc0hlYWRlckhvbWUiLCJhbGxvd2VkUmVjZW50Q29udGV4dFR5cGVzIiwicm9sZV9pZCIsIl91c2VSZWNlbnRDb250ZXh0cyIsImVuYWJsZWQiLCJsaW1pdCIsImZldGNoZWRSZWNlbnRDb250ZXh0cyIsImNvbnRleHRzIiwicmVjZW50Q29udGV4dHNMb2FkaW5nIiwibG9hZGluZyIsInJlY2VudENvbnRleHRzIiwiZmlsdGVyIiwiaGFzIiwiaGFzUGlubmVkQ29udGV4dCIsImlkIiwicHJvamVjdElkIiwiaXNSZWNlbnRDb250ZXh0c1N0ZXAiLCJpc0NvbnRleHRIb21lU3RlcCIsIl91c2VTdGF0ZSIsIl91c2VTdGF0ZTIiLCJfc2xpY2VkVG9BcnJheSIsInNlbGVjdGVkQ29udGV4dCIsInNldFNlbGVjdGVkQ29udGV4dCIsImFjdGl2ZUNvbnRleHQiLCJwcm9qZWN0TmFtZSIsInBpbm5lZEVudGl0eVR5cGUiLCJyZWFsTGlzdHNBZ2VudElkIiwicmVhbExpc3RzRW50aXR5VHlwZSIsIl91c2VGcmVxdWVudGx5VXNlZEFjdCIsImFnZW50RnVhcyIsImFjdGlvbnMiLCJmdWFzTG9hZGluZyIsIl91c2VGcmVxdWVudGx5QXNrZWRRdSIsImFnZW50RmFxcyIsImZhcXMiLCJmYXFzTG9hZGluZyIsImhhbmRsZUdldEZyZXF1ZW50bHlBc2tlZFF1ZXN0aW9ucyIsImZhcXNGZXRjaFJlZiIsIl9mYXFzRmV0Y2hSZWYkY3VycmVudCIsImN1cnJlbnRLZXkiLCJjb25jYXQiLCJsYXN0S2V5IiwiY3VycmVudCIsImFnZW50SWQiLCJlbnRpdHlUeXBlIiwiZnVhcyIsImZhcXNBcmVMb2FkaW5nIiwiZnVhc0FyZUxvYWRpbmciLCJzaG93UmVjZW50Q29udGV4dHNCbG9jayIsImxlbmd0aCIsInNob3VsZFNob3dGYXFzIiwic2hvdWxkU2hvd0Z1YXMiLCJzaG93UHJvamVjdFN1bW1hcnlDYXJkIiwic2hvd0ZBUXMiLCJob21lU2Nyb2xsYWJsZUxheW91dCIsInNob3dEeW5hbWljU2VjdGlvbiIsImNvbnRlbnRDb250YWluZXJSZWYiLCJfdXNlU3RhdGUzIiwiX3VzZVN0YXRlNCIsInNob3dUb3BHcmFkaWVudCIsInNldFNob3dUb3BHcmFkaWVudCIsIl91c2VTdGF0ZTUiLCJfdXNlU3RhdGU2Iiwic2hvd0JvdHRvbUdyYWRpZW50Iiwic2V0U2hvd0JvdHRvbUdyYWRpZW50IiwiX3VzZVN0YXRlNyIsIl91c2VTdGF0ZTgiLCJpc1Njcm9sbGluZyIsInNldElzU2Nyb2xsaW5nIiwic2Nyb2xsVGltZW91dFJlZiIsImdyZWV0aW5nIiwiaW50cm8iLCJpbnRyb2R1Y3Rpb24iLCJBcnJheSIsImlzQXJyYXkiLCJNYXRoIiwiZmxvb3IiLCJyYW5kb20iLCJoYW5kbGVTZWxlY3RSZWNlbnRDb250ZXh0Iiwib3JkZXIiLCJfY29udGV4dCRwYXJlbnRzIiwiX2NvbnRleHQkcGFyZW50czIiLCJfY29udGV4dCRwYXJlbnRzMyIsIl9jb250ZXh0JHBhcmVudHM0IiwiYWlDaGF0Q29udGV4dFNlbGVjdGVkIiwiY29udGV4dElkIiwiY2xpZW50SWQiLCJwYXJlbnRzIiwiY2xpZW50X2lkIiwicHJvamVjdF9pZCIsImNsaWVudE5hbWUiLCJjbGllbnRfbmFtZSIsInByb2plY3RfbmFtZSIsIl9vYmplY3RTcHJlYWQiLCJyZXF1ZXN0QW5pbWF0aW9uRnJhbWUiLCJkb2N1bWVudCIsImRpc3BhdGNoRXZlbnQiLCJDdXN0b21FdmVudCIsInJlbmRlclJlY2VudENvbnRleHRzIiwibWFwIiwia2V5IiwiaW5kZXgiLCJ0cmltIiwiY2hlY2tTY3JvbGwiLCJjb250YWluZXIiLCJzY3JvbGxUb3AiLCJzY3JvbGxIZWlnaHQiLCJjbGllbnRIZWlnaHQiLCJpc1Njcm9sbGFibGUiLCJpc0F0VG9wIiwiaXNBdEJvdHRvbSIsImNsZWFyVGltZW91dCIsInNldFRpbWVvdXQiLCJhZGRFdmVudExpc3RlbmVyIiwidGltZW91dElkIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsInJlbmRlckhlYWRlckNvbnRlbnQiLCJfYWdlbnQkY3JlYXRlZF9ieSIsIl9hZ2VudCRjcmVhdGVkX2J5MiIsImVtb2ppIiwiY3JlYXRlZF9ieSIsImlzX2RlbGV0ZWQiLCIkbm9HYXAiLCJmaXJzdE5hbWUiLCIkc2hvdyIsIiRpc0FnZW50VmlldyIsIiRmbG9hdGluZ0N1c3RvbUNlbnRlciIsIiRnYXAiLCIkbWF4V2lkdGgiLCJwcm9qZWN0U3VtbWFyeSIsIiRncm93Il0sInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvbW9sZWN1bGVzL0NoYXRBSUhvbWUvQ2hhdEFJSG9tZS50c3giXSwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgcmVhY3QvZnVuY3Rpb24tY29tcG9uZW50LWRlZmluaXRpb24gKi9cbi8qIGVzbGludC1kaXNhYmxlIGpzeC1hMTF5L2NsaWNrLWV2ZW50cy1oYXZlLWtleS1ldmVudHMgKi9cbi8qIGVzbGludC1kaXNhYmxlIGpzeC1hMTF5L25vLXN0YXRpYy1lbGVtZW50LWludGVyYWN0aW9ucyAqL1xuaW1wb3J0IHsgdXNlRWZmZWN0LCB1c2VSZWYsIHVzZVN0YXRlLCB1c2VDYWxsYmFjaywgdXNlTWVtbyB9IGZyb20gJ3JlYWN0J1xuXG5pbXBvcnQgeyBUb29sdGlwIH0gZnJvbSAnQHByb2plY3Rjb3IvdG9vbHRpcHYyL2xpYi9jb21wb25lbnRzL1Rvb2x0aXAnXG5pbXBvcnQgeyBMaXN0Q2hlY2tsaXN0IH0gZnJvbSAnQHByb2plY3Rjb3IvaWNvbnMvbGliL2NvbXBvbmVudHMvTGlzdENoZWNrbGlzdCdcbmltcG9ydCB7IHVzZVQgfSBmcm9tICcuLi8uLi8uLi9ob29rcy91c2VUJ1xuaW1wb3J0IHsgRVZFTlRTLCB1c2VFdmVudCB9IGZyb20gJy4uLy4uLy4uL2hvb2tzL3VzZUV2ZW50J1xuXG5pbXBvcnQgeyBvcHRpb25zIH0gZnJvbSAnLi4vQ2hhdEFJTW9kYWwvY29uc3RhbnRzJ1xuXG5pbXBvcnQge1xuICBTQ0NBSUhvbWVDb250YWluZXIsXG4gIFNDQ0FJSG9tZUNvbnRlbnQsXG4gIFNDQ0FJSG9tZUNvbnRlbnRJbm5lcixcbiAgU0NDQUlIb21lR3JhZGllbnRUb3AsXG4gIFNDQ0FJSG9tZUdyYWRpZW50Qm90dG9tLFxuICBTQ0NBSUhvbWVIZWFkZXIsXG4gIFNDQ0FJSG9tZUdyZWV0aW5nLFxuICBTQ0NBSUhvbWVBZ2VudEluZm9Db250YWluZXIsXG4gIFNDQ0FJSG9tZUFnZW50SW5mbyxcbiAgU0NDQUlIb21lUHJvamVjdFN1bW1hcnksXG4gIFNDQ0FJSG9tZVByb2plY3RTdW1tYXJ5Q29udGVudCxcbiAgU0NDQUlIb21lUHJvamVjdFN1bW1hcnlUaXRsZSxcbiAgU0NDQUlIb21lUHJvamVjdFN1bW1hcnlEZXNjcmlwdGlvbixcbiAgU0NDQUhXcmFwcGVyU3VtbWFyeVByb2plY3QsXG4gIFNDQ0FJSG9tZUludHJvZHVjdGlvbixcbiAgU0NDQUlIb21lQ3JlYXRlZEJ5Q29udGFpbmVyLFxuICBTQ0NBSUhvbWVDcmVhdGVkQnlUZXh0LFxuICBTQ0NBSUhvbWVDcmVhdGVkQnlUZXh0TmFtZSxcbiAgU0NDQUlIb21lSWNvbkNvbnRhaW5lcixcbiAgU0NDQUlIb21lTG9nb1dyYXBwZXIsXG4gIFNDQ0FJSG9tZU1haWFIZWFkZXJTdGFjayxcbiAgU0NDQUlIb21lVGl0bGUsXG4gIFNDQ0FJSG9tZVN1YnRpdGxlLFxuICBTQ0NBSUhvbWVEeW5hbWljU2VjdGlvbixcbiAgU0NDQUlIb21lUmVjZW50Q29udGV4dHMsXG4gIFNDQ0FJSG9tZVJlY2VudENvbnRleHRzTGlzdCxcbiAgU0NDQUlIb21lUmVjZW50Q29udGV4dFBpbGwsXG4gIFNDQ0FJSG9tZVJlY2VudENvbnRleHRQaWxsSWNvbixcbiAgU0NDQUlIb21lUmVjZW50Q29udGV4dFBpbGxUZXh0LFxuICBTQ0NBSUhvbWVSZWNlbnRDb250ZXh0UGlsbFNrZWxldG9uLFxufSBmcm9tICcuL3N0eWxlcydcbmltcG9ydCB7IHVzZUdsb2JhbENvbnRleHQgfSBmcm9tICcuLi8uLi8uLi9jb250ZXh0L2dsb2JhbC1jb250ZXh0J1xuaW1wb3J0IHsgQ09SVXNlclJvbGUsIHVzZVVzZXIgfSBmcm9tICcuLi8uLi8uLi9jb250ZXh0L2Nvci11c2VyJ1xuaW1wb3J0IHsgdXNlUmVzaXplTGlzdGVuZXIgfSBmcm9tICcuLi8uLi8uLi9ob29rcy91c2VSZXNpemUnXG5pbXBvcnQgeyBnZXRDb250ZXh0TWVudGlvbkljb24gfSBmcm9tICcuLi8uLi8uLi91dGlscy9jb250ZXh0TWVudGlvbkljb25zJ1xuaW1wb3J0IHsgdmFsaWRhdGVJc01haWEgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy91dGlscy92YWxpZGF0ZUlzTWFpYSdcbmltcG9ydCB7IEFnZW50IH0gZnJvbSAnLi4vLi4vLi4vdHlwZXMvYWdlbnQnXG5pbXBvcnQgeyBBdHRhY2htZW50RmlsZSB9IGZyb20gJy4uL0NoYXRGb290ZXIvQ2hhdEZvb3RlcidcbmltcG9ydCB7IEZyZXF1ZW50bHlBc2tlZFF1ZXN0aW9ucyB9IGZyb20gJy4uLy4uL2F0b21zL0ZyZXF1ZW50bHlBc2tlZFF1ZXN0aW9ucydcbmltcG9ydCB7IEZyZXF1ZW50bHlVc2VkQWN0aW9ucyB9IGZyb20gJy4uLy4uL2F0b21zL0ZyZXF1ZW50bHlVc2VkQWN0aW9ucydcbmltcG9ydCB7IHVzZUZyZXF1ZW50bHlVc2VkQWN0aW9ucyB9IGZyb20gJy4uLy4uLy4uL2hvb2tzL3VzZUZyZXF1ZW50bHlVc2VkQWN0aW9ucydcbmltcG9ydCB7IHVzZUZyZXF1ZW50bHlBc2tlZFF1ZXN0aW9ucyB9IGZyb20gJy4uLy4uLy4uL2hvb2tzL3VzZUZyZXF1ZW50bHlBc2tlZFF1ZXN0aW9ucydcbmltcG9ydCB7IHVzZVJlY2VudENvbnRleHRzIH0gZnJvbSAnLi4vLi4vLi4vaG9va3MvdXNlUmVjZW50Q29udGV4dHMnXG5pbXBvcnQgdHlwZSB7IFJlY2VudENvbnRleHRJdGVtLCBSZWNlbnRDb250ZXh0VHlwZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL21haWEvUmVjZW50Q29udGV4dHMnXG5pbXBvcnQgeyBNQUlBSXNvbG9nbyB9IGZyb20gJy4uLy4uL2F0b21zL2ljb25zL01BSUFJc29sb2dvJ1xuaW1wb3J0IHsgVGVtcGxhdGVHcmFkaWVudEljb24gfSBmcm9tICcuLi8uLi9hdG9tcy9pY29ucy9UZW1wbGF0ZUdyYWRpZW50SWNvbidcbmltcG9ydCB7IENoYXRBSUhvbWVNYWlha2VyIH0gZnJvbSAnLi9DaGF0QUlIb21lTWFpYWtlcidcblxudHlwZSBDaGF0QUlIb21lUHJvcHMgPSB7XG4gIG9uU3RhcnRDaGF0OiAoXG4gICAgbWVzc2FnZTogc3RyaW5nLFxuICAgIGF0dGFjaG1lbnRzPzogQXR0YWNobWVudEZpbGVbXSB8IG51bGwsXG4gICAgZmFxSWQ/OiBzdHJpbmcsXG4gICAgYWdlbnRTdWdnZXN0aW9uSWQ/OiBzdHJpbmcsXG4gICAgbWVudGlvbnM/OiBudWxsLFxuICAgIGZ1YUlkPzogc3RyaW5nXG4gICkgPT4gdm9pZFxuICBoYW5kbGVyczogUmVjb3JkPG9wdGlvbnMsICgpID0+IHZvaWQ+XG4gIGV4cGFuZGVkPzogYm9vbGVhblxuICBmbG9hdGluZz86IGJvb2xlYW5cbn1cblxuZXhwb3J0IGVudW0gRnJlcXVlbnRRdWVzdGlvbnMge1xuICByZW50YWJpbGlkYWRfcHJveWVjdG8gPSAncmVudGFiaWxpZGFkX3Byb3llY3RvJyxcbiAgYXZhbmNlX3Byb3llY3RvID0gJ2F2YW5jZV9wcm95ZWN0bycsXG59XG5cbmNvbnN0IFJFQ0VOVF9DT05URVhUU19MSU1JVCA9IDlcbmNvbnN0IFJFQ0VOVF9DT05URVhUX0lDT05fQ09MT1IgPSAnIzRENEQ0RCdcbmNvbnN0IFJFQ0VOVF9DT05URVhUX1NLRUxFVE9OX0tFWVMgPSBbXG4gICdyZWNlbnQtY29udGV4dC1za2VsZXRvbi0xJyxcbiAgJ3JlY2VudC1jb250ZXh0LXNrZWxldG9uLTInLFxuICAncmVjZW50LWNvbnRleHQtc2tlbGV0b24tMycsXG5dXG5cbmNvbnN0IFJlY2VudENvbnRleHRQaWxsID0gKHtcbiAgY29udGV4dCxcbiAgbGFiZWwsXG4gIG9uQ2xpY2ssXG59OiB7XG4gIGNvbnRleHQ6IFJlY2VudENvbnRleHRJdGVtXG4gIGxhYmVsOiBzdHJpbmdcbiAgb25DbGljazogKCkgPT4gdm9pZFxufSkgPT4ge1xuICBjb25zdCB0ZXh0UmVmID0gdXNlUmVmPEhUTUxTcGFuRWxlbWVudD4obnVsbClcbiAgY29uc3QgeyBzaG93VG9vbHRpcCB9ID0gdXNlUmVzaXplTGlzdGVuZXIodGV4dFJlZiwgW2xhYmVsXSlcblxuICByZXR1cm4gKFxuICAgIDxTQ0NBSUhvbWVSZWNlbnRDb250ZXh0UGlsbCB0eXBlPVwiYnV0dG9uXCIgb25DbGljaz17b25DbGlja30+XG4gICAgICA8U0NDQUlIb21lUmVjZW50Q29udGV4dFBpbGxJY29uPlxuICAgICAgICB7Y29udGV4dC50eXBlID09PSAndGFzaycgPyAoXG4gICAgICAgICAgPExpc3RDaGVja2xpc3QgY29sb3I9e1JFQ0VOVF9DT05URVhUX0lDT05fQ09MT1J9IHdpZHRoPVwiMTRweFwiIGhlaWdodD1cIjE0cHhcIiAvPlxuICAgICAgICApIDogKFxuICAgICAgICAgIGdldENvbnRleHRNZW50aW9uSWNvbihjb250ZXh0LnR5cGUsIFJFQ0VOVF9DT05URVhUX0lDT05fQ09MT1IsIHVuZGVmaW5lZCwgMTQpXG4gICAgICAgICl9XG4gICAgICA8L1NDQ0FJSG9tZVJlY2VudENvbnRleHRQaWxsSWNvbj5cbiAgICAgIDxTQ0NBSUhvbWVSZWNlbnRDb250ZXh0UGlsbFRleHQgcmVmPXt0ZXh0UmVmfT5cbiAgICAgICAge3Nob3dUb29sdGlwID8gKFxuICAgICAgICAgIDxUb29sdGlwIHRpdGxlPXtsYWJlbH0+XG4gICAgICAgICAgICA8c3Bhbj57bGFiZWx9PC9zcGFuPlxuICAgICAgICAgIDwvVG9vbHRpcD5cbiAgICAgICAgKSA6IChcbiAgICAgICAgICBsYWJlbFxuICAgICAgICApfVxuICAgICAgPC9TQ0NBSUhvbWVSZWNlbnRDb250ZXh0UGlsbFRleHQ+XG4gICAgPC9TQ0NBSUhvbWVSZWNlbnRDb250ZXh0UGlsbD5cbiAgKVxufVxuXG5jb25zdCBwYXJzZU51bWVyaWNJZCA9ICh2YWx1ZT86IHN0cmluZyB8IG51bWJlciB8IG51bGwpOiBudW1iZXIgfCBudWxsID0+IHtcbiAgaWYgKHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB1bmRlZmluZWQgfHwgdmFsdWUgPT09ICcnKSByZXR1cm4gbnVsbFxuICBjb25zdCBwYXJzZWQgPSBOdW1iZXIodmFsdWUpXG4gIHJldHVybiBOdW1iZXIuaXNGaW5pdGUocGFyc2VkKSA/IHBhcnNlZCA6IG51bGxcbn1cblxuY29uc3QgZ2V0QWxsb3dlZFJlY2VudENvbnRleHRUeXBlcyA9IChyb2xlSWQ/OiBDT1JVc2VyUm9sZSk6IFNldDxSZWNlbnRDb250ZXh0VHlwZT4gPT4ge1xuICBpZiAocm9sZUlkID09PSBDT1JVc2VyUm9sZS5DTEVWRUwgfHwgcm9sZUlkID09PSBDT1JVc2VyUm9sZS5ESVJFQ1RPUiB8fCByb2xlSWQgPT09IENPUlVzZXJSb2xlLlBST0pFQ1RfTUFOQUdFUikge1xuICAgIHJldHVybiBuZXcgU2V0KFsnY2xpZW50JywgJ3Byb2plY3QnLCAndGFzayddKVxuICB9XG4gIGlmIChyb2xlSWQgPT09IENPUlVzZXJSb2xlLkNPTExBQk9SQVRPUikge1xuICAgIHJldHVybiBuZXcgU2V0KFsndGFzayddKVxuICB9XG4gIHJldHVybiBuZXcgU2V0KClcbn1cblxuZXhwb3J0IGNvbnN0IENoYXRBSUhvbWUgPSAoeyBoYW5kbGVycywgb25TdGFydENoYXQsIGV4cGFuZGVkLCBmbG9hdGluZyB9OiBDaGF0QUlIb21lUHJvcHMpID0+IHtcbiAgY29uc3QgeyB0LCBpMThuIH0gPSB1c2VUKClcbiAgY29uc3QgZXZlbnQgPSB1c2VFdmVudCgpXG4gIGNvbnN0IHVzZXIgPSB1c2VVc2VyKClcbiAgY29uc3QgeyBhZ2VudCwgc2VjdGlvbiwgY2xpZW50LCBwcm9qZWN0LCB0YXNrLCBjaGlwc1Byb2plY3QsIHNldENsaWVudCwgc2V0UHJvamVjdCwgc2V0VGFzaywgc2V0Q2hpcHNQcm9qZWN0IH0gPVxuICAgIHVzZUdsb2JhbENvbnRleHQoKVxuXG4gIGNvbnN0IGlzTUFJQSA9IHZhbGlkYXRlSXNNYWlhKGFnZW50IGFzIEFnZW50KVxuICBjb25zdCBmbG9hdGluZ0N1c3RvbUNlbnRlciA9ICEhKGZsb2F0aW5nICYmIGFnZW50Py50eXBlID09PSAnY3VzdG9tJylcbiAgY29uc3QgbGFuZyA9IGkxOG4ubGFuZ3VhZ2UgPT09ICdicicgPyAncHQnIDogaTE4bi5sYW5ndWFnZVxuXG4gIGNvbnN0IHN1bW1hcnlQcm9qZWN0QWNjZXNzID1cbiAgICB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJlxuICAgIChTdHJpbmcod2luZG93Lk1BSUFfUFJPSkVDVF9TVU1NQVJZX0ZFQVRVUkVfQUNDRVNTKS50b0xvd2VyQ2FzZSgpID09PSAndHJ1ZScgfHxcbiAgICAgIFN0cmluZyh3aW5kb3cubWFpYVByb2plY3RTdW1tYXJ5QWNjZXNzKS50b0xvd2VyQ2FzZSgpID09PSAndHJ1ZScpXG4gIGNvbnN0IGZhcXNBY2Nlc3MgPSB0cnVlXG4gIGNvbnN0IHNob3dQcm9qZWN0U3VtbWFyeSA9ICEhKGlzTUFJQSAmJiBzdW1tYXJ5UHJvamVjdEFjY2VzcylcbiAgLy8gRWwgb3JjaGVzdHJhdG9yICh0eXBlID09PSAnb3JjaGVzdHJhdG9yJykgbXVlc3RyYSBGQVFzL0ZVQXMgYWdyZWdhZGFzIGRlIHN1cyBzdWJhZ2VudGVzLFxuICAvLyBhc8OtIHF1ZSBOTyBzZSB0cmF0YSBjb21vIG1haWFrZXIgYWPDoS4gTWFpYWtlciA9IGNsb25lIGdsb2JhbCBsZWdhY3kgY29uIG5vbWJyZSBtYWlha2VyL21hcmtldHBsYWNlLlxuICBjb25zdCBpc01haWFrZXIgPVxuICAgIGFnZW50Py50eXBlICE9PSAnb3JjaGVzdHJhdG9yJyAmJiBhZ2VudD8uZW50aXR5ID09PSAnZ2xvYmFsJyAmJiAvKG1haWFrZXJ8bWFya2V0cGxhY2UpL2kudGVzdChhZ2VudD8ubmFtZSB8fCAnJylcbiAgY29uc3QgaXNIZWFkZXJIb21lID0gaXNNQUlBICYmIHNlY3Rpb24gPT09ICdoZWFkZXInICYmIGFnZW50Py50eXBlID09PSAnb3JjaGVzdHJhdG9yJ1xuICBjb25zdCBhbGxvd2VkUmVjZW50Q29udGV4dFR5cGVzID0gdXNlTWVtbygoKSA9PiBnZXRBbGxvd2VkUmVjZW50Q29udGV4dFR5cGVzKHVzZXIucm9sZV9pZCksIFt1c2VyLnJvbGVfaWRdKVxuICBjb25zdCB7IGNvbnRleHRzOiBmZXRjaGVkUmVjZW50Q29udGV4dHMsIGxvYWRpbmc6IHJlY2VudENvbnRleHRzTG9hZGluZyB9ID0gdXNlUmVjZW50Q29udGV4dHMoe1xuICAgIGVuYWJsZWQ6IGlzSGVhZGVySG9tZSxcbiAgICBsaW1pdDogUkVDRU5UX0NPTlRFWFRTX0xJTUlULFxuICB9KVxuICBjb25zdCByZWNlbnRDb250ZXh0cyA9IHVzZU1lbW8oXG4gICAgKCkgPT4gZmV0Y2hlZFJlY2VudENvbnRleHRzLmZpbHRlcihjb250ZXh0ID0+IGFsbG93ZWRSZWNlbnRDb250ZXh0VHlwZXMuaGFzKGNvbnRleHQudHlwZSkpLFxuICAgIFtmZXRjaGVkUmVjZW50Q29udGV4dHMsIGFsbG93ZWRSZWNlbnRDb250ZXh0VHlwZXNdXG4gIClcblxuICAvLyBIb21lIGRlbCBvcmNoZXN0cmF0b3IgZW4gMiBwYXNvczpcbiAgLy8gIC0gUGFzbyAxIChzaW4gY29udGV4dG8gcGluZWFkbyk6IHNlIG11ZXN0cmFuIHNvbG8gbG9zIGNvbnRleHRvcyByZWNpZW50ZXMuXG4gIC8vICAtIFBhc28gMiAoY29udGV4dG8gcGluZWFkbyk6IHNlIG11ZXN0cmFuIGxhcyBGQVFzL2FjY2lvbmVzIHF1ZSByZWZlcmVuY2lhbiBlc2UgY29udGV4dG8uXG4gIC8vIFZvbHZlciBhbCBwYXNvIDEgPSBxdWl0YXIgZWwgY2hpcCAobGltcGlhIGVsIGNvbnRleHRvIGdsb2JhbCkuXG4gIGNvbnN0IGhhc1Bpbm5lZENvbnRleHQgPSAhISh0YXNrPy5pZCB8fCBjaGlwc1Byb2plY3Q/LnByb2plY3RJZCB8fCBjbGllbnQ/LmlkIHx8IHByb2plY3Q/LmlkKVxuICBjb25zdCBpc1JlY2VudENvbnRleHRzU3RlcCA9IGlzSGVhZGVySG9tZSAmJiAhaGFzUGlubmVkQ29udGV4dFxuICBjb25zdCBpc0NvbnRleHRIb21lU3RlcCA9IGlzSGVhZGVySG9tZSAmJiBoYXNQaW5uZWRDb250ZXh0XG5cbiAgLy8gQ29udGV4dG8gYWN0aXZvIHBhcmEgZGVyaXZhciBGQVFzL2FjY2lvbmVzIChwYXNvIDIpLiBQcmVmZXJpbW9zIGVsIHBpbGwgY2xpY2tlYWRvO1xuICAvLyBzaSBubywgbG8gcmVjb25zdHJ1aW1vcyBkZXNkZSBlbCBjb250ZXh0byBnbG9iYWwuXG4gIGNvbnN0IFtzZWxlY3RlZENvbnRleHQsIHNldFNlbGVjdGVkQ29udGV4dF0gPSB1c2VTdGF0ZTxSZWNlbnRDb250ZXh0SXRlbSB8IG51bGw+KG51bGwpXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFoYXNQaW5uZWRDb250ZXh0KSBzZXRTZWxlY3RlZENvbnRleHQobnVsbClcbiAgfSwgW2hhc1Bpbm5lZENvbnRleHRdKVxuXG4gIGNvbnN0IGFjdGl2ZUNvbnRleHQgPSB1c2VNZW1vPFJlY2VudENvbnRleHRJdGVtIHwgbnVsbD4oKCkgPT4ge1xuICAgIGlmIChzZWxlY3RlZENvbnRleHQpIHJldHVybiBzZWxlY3RlZENvbnRleHRcbiAgICBpZiAoIWlzQ29udGV4dEhvbWVTdGVwKSByZXR1cm4gbnVsbFxuICAgIGlmICh0YXNrPy5pZCkgcmV0dXJuIHsgdHlwZTogJ3Rhc2snLCBpZDogdGFzay5pZCwgbmFtZTogdGFzay5uYW1lIH1cbiAgICBpZiAoY2hpcHNQcm9qZWN0Py5wcm9qZWN0SWQpIHJldHVybiB7IHR5cGU6ICdwcm9qZWN0JywgaWQ6IGNoaXBzUHJvamVjdC5wcm9qZWN0SWQsIG5hbWU6IGNoaXBzUHJvamVjdC5wcm9qZWN0TmFtZSB9XG4gICAgaWYgKGNsaWVudD8uaWQpIHJldHVybiB7IHR5cGU6ICdjbGllbnQnLCBpZDogY2xpZW50LmlkLCBuYW1lOiBjbGllbnQubmFtZSB9XG4gICAgcmV0dXJuIG51bGxcbiAgfSwgW1xuICAgIHNlbGVjdGVkQ29udGV4dCxcbiAgICBpc0NvbnRleHRIb21lU3RlcCxcbiAgICB0YXNrPy5pZCxcbiAgICB0YXNrPy5uYW1lLFxuICAgIGNoaXBzUHJvamVjdD8ucHJvamVjdElkLFxuICAgIGNoaXBzUHJvamVjdD8ucHJvamVjdE5hbWUsXG4gICAgY2xpZW50Py5pZCxcbiAgICBjbGllbnQ/Lm5hbWUsXG4gIF0pXG5cbiAgLy8gZW50aXR5X3R5cGUgZGVsIGNvbnRleHRvIHBpbmVhZG8gKHByb2plY3QvY2xpZW50L3Rhc2spLCB0b21hZG8gZGVsIGNvbnRleHRvIGdsb2JhbC5cbiAgLy8gQXBsaWNhIHRhbnRvIGFsIGFicmlyIE1BSUEgZGVzZGUgdW5hIHNlY2Npw7NuIGVzcGVjw61maWNhIGNvbW8gYWwgY2FtYmlhciBkZSBjb252ZXJzYWNpw7NuLlxuICBjb25zdCBwaW5uZWRFbnRpdHlUeXBlID0gdXNlTWVtbzxSZWNlbnRDb250ZXh0VHlwZSB8IHVuZGVmaW5lZD4oKCkgPT4ge1xuICAgIGlmICh0YXNrPy5pZCkgcmV0dXJuICd0YXNrJ1xuICAgIGlmIChjaGlwc1Byb2plY3Q/LnByb2plY3RJZCB8fCBwcm9qZWN0Py5pZCkgcmV0dXJuICdwcm9qZWN0J1xuICAgIGlmIChjbGllbnQ/LmlkKSByZXR1cm4gJ2NsaWVudCdcbiAgICByZXR1cm4gdW5kZWZpbmVkXG4gIH0sIFt0YXNrPy5pZCwgY2hpcHNQcm9qZWN0Py5wcm9qZWN0SWQsIHByb2plY3Q/LmlkLCBjbGllbnQ/LmlkXSlcblxuICAvLyBGQVFzL2FjY2lvbmVzOlxuICAvLyAgLSBoZWFkZXItaG9tZSAob3JjaGVzdHJhdG9yKSwgcGFzbyAyOiBmaWx0cmFkYXMgcG9yIGBlbnRpdHlfdHlwZWAgZGVsIGNvbnRleHRvIHNlbGVjY2lvbmFkby5cbiAgLy8gIC0gaG9tZXMgZGUgcHJveWVjdG8vY2xpZW50ZS90YXJlYSAoc2VjY2nDs24pOiBmaWx0cmFkYXMgcG9yIGVsIGBlbnRpdHlfdHlwZWAgZGVsIGNvbnRleHRvIHNldGVhZG8uXG4gIGNvbnN0IHJlYWxMaXN0c0FnZW50SWQgPSAoKCkgPT4ge1xuICAgIGlmICghaXNNQUlBIHx8IGlzTWFpYWtlcikgcmV0dXJuIHVuZGVmaW5lZFxuICAgIGlmIChpc0hlYWRlckhvbWUpIHJldHVybiBpc0NvbnRleHRIb21lU3RlcCA/IGFnZW50Py5pZCA6IHVuZGVmaW5lZFxuICAgIHJldHVybiBhZ2VudD8uaWRcbiAgfSkoKVxuICBjb25zdCByZWFsTGlzdHNFbnRpdHlUeXBlID0gKCgpID0+IHtcbiAgICBpZiAoIWlzSGVhZGVySG9tZSkgcmV0dXJuIHBpbm5lZEVudGl0eVR5cGVcbiAgICByZXR1cm4gaXNDb250ZXh0SG9tZVN0ZXAgPyBhY3RpdmVDb250ZXh0Py50eXBlIDogdW5kZWZpbmVkXG4gIH0pKClcbiAgY29uc3QgeyBhY3Rpb25zOiBhZ2VudEZ1YXMsIGxvYWRpbmc6IGZ1YXNMb2FkaW5nIH0gPSB1c2VGcmVxdWVudGx5VXNlZEFjdGlvbnMoXG4gICAgcmVhbExpc3RzQWdlbnRJZCxcbiAgICBzZWN0aW9uLFxuICAgIHJlYWxMaXN0c0VudGl0eVR5cGVcbiAgKVxuICBjb25zdCB7XG4gICAgZmFxczogYWdlbnRGYXFzLFxuICAgIGxvYWRpbmc6IGZhcXNMb2FkaW5nLFxuICAgIGhhbmRsZUdldEZyZXF1ZW50bHlBc2tlZFF1ZXN0aW9ucyxcbiAgfSA9IHVzZUZyZXF1ZW50bHlBc2tlZFF1ZXN0aW9ucyhyZWFsTGlzdHNBZ2VudElkLCBsYW5nLCByZWFsTGlzdHNFbnRpdHlUeXBlKVxuICBjb25zdCBmYXFzRmV0Y2hSZWYgPSB1c2VSZWY8eyBhZ2VudElkOiBzdHJpbmc7IGxhbmc6IHN0cmluZzsgZW50aXR5VHlwZT86IHN0cmluZyB9IHwgbnVsbD4obnVsbClcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoIXJlYWxMaXN0c0FnZW50SWQgfHwgc2VjdGlvbiA9PT0gJ3Rhc2snKSByZXR1cm5cbiAgICBjb25zdCBjdXJyZW50S2V5ID0gYCR7cmVhbExpc3RzQWdlbnRJZH0tJHtsYW5nfS0ke3JlYWxMaXN0c0VudGl0eVR5cGUgPz8gJ2FsbCd9YFxuICAgIGNvbnN0IGxhc3RLZXkgPSBmYXFzRmV0Y2hSZWYuY3VycmVudFxuICAgICAgPyBgJHtmYXFzRmV0Y2hSZWYuY3VycmVudC5hZ2VudElkfS0ke2ZhcXNGZXRjaFJlZi5jdXJyZW50Lmxhbmd9LSR7ZmFxc0ZldGNoUmVmLmN1cnJlbnQuZW50aXR5VHlwZSA/PyAnYWxsJ31gXG4gICAgICA6IG51bGxcbiAgICBpZiAoY3VycmVudEtleSAhPT0gbGFzdEtleSkge1xuICAgICAgZmFxc0ZldGNoUmVmLmN1cnJlbnQgPSB7IGFnZW50SWQ6IHJlYWxMaXN0c0FnZW50SWQsIGxhbmcsIGVudGl0eVR5cGU6IHJlYWxMaXN0c0VudGl0eVR5cGUgfVxuICAgICAgaGFuZGxlR2V0RnJlcXVlbnRseUFza2VkUXVlc3Rpb25zKHsgYWdlbnRJZDogcmVhbExpc3RzQWdlbnRJZCwgbGFuZywgZW50aXR5VHlwZTogcmVhbExpc3RzRW50aXR5VHlwZSB9KVxuICAgIH1cbiAgfSwgW3JlYWxMaXN0c0FnZW50SWQsIHJlYWxMaXN0c0VudGl0eVR5cGUsIHNlY3Rpb24sIGxhbmcsIGhhbmRsZUdldEZyZXF1ZW50bHlBc2tlZFF1ZXN0aW9uc10pXG5cbiAgY29uc3QgZmFxcyA9IGFnZW50RmFxc1xuICBjb25zdCBmdWFzID0gYWdlbnRGdWFzXG4gIGNvbnN0IGZhcXNBcmVMb2FkaW5nID0gZmFxc0xvYWRpbmdcbiAgY29uc3QgZnVhc0FyZUxvYWRpbmcgPSBmdWFzTG9hZGluZ1xuXG4gIGNvbnN0IHNob3dSZWNlbnRDb250ZXh0c0Jsb2NrID0gaXNSZWNlbnRDb250ZXh0c1N0ZXAgJiYgKHJlY2VudENvbnRleHRzTG9hZGluZyB8fCByZWNlbnRDb250ZXh0cy5sZW5ndGggPiAwKVxuICBjb25zdCBzaG91bGRTaG93RmFxcyA9XG4gICAgKGlzQ29udGV4dEhvbWVTdGVwIHx8ICghaXNIZWFkZXJIb21lICYmIHNlY3Rpb24gIT09ICd0YXNrJyAmJiBmYXFzQWNjZXNzKSkgJiZcbiAgICAhaXNNYWlha2VyICYmXG4gICAgKGZhcXMubGVuZ3RoID4gMCB8fCBmYXFzQXJlTG9hZGluZylcbiAgY29uc3Qgc2hvdWxkU2hvd0Z1YXMgPSAhaXNNYWlha2VyICYmIChpc0NvbnRleHRIb21lU3RlcCB8fCAhaXNIZWFkZXJIb21lKSAmJiAoZnVhcy5sZW5ndGggPiAwIHx8IGZ1YXNBcmVMb2FkaW5nKVxuXG4gIGNvbnN0IHNob3dQcm9qZWN0U3VtbWFyeUNhcmQgPSBzaG93UHJvamVjdFN1bW1hcnkgJiYgYWdlbnQ/LmVudGl0eSA9PT0gJ3Byb2plY3QnXG4gIGNvbnN0IHNob3dGQVFzID0gISEoXG4gICAgc2hvd1JlY2VudENvbnRleHRzQmxvY2sgfHxcbiAgICBzaG91bGRTaG93RmFxcyB8fFxuICAgIHNob3VsZFNob3dGdWFzIHx8XG4gICAgc2hvd1Byb2plY3RTdW1tYXJ5Q2FyZCB8fFxuICAgIGlzTWFpYWtlclxuICApXG4gIGNvbnN0IGhvbWVTY3JvbGxhYmxlTGF5b3V0ID0gc2hvd0ZBUXNcbiAgY29uc3Qgc2hvd0R5bmFtaWNTZWN0aW9uID0gc2hvd1JlY2VudENvbnRleHRzQmxvY2sgfHwgc2hvdWxkU2hvd0ZhcXMgfHwgc2hvdWxkU2hvd0Z1YXMgfHwgaXNNYWlha2VyXG5cbiAgLy8gTMOzZ2ljYSBkZWwgc2Nyb2xsIGNvbiBncmFkaWVudGVzXG4gIGNvbnN0IGNvbnRlbnRDb250YWluZXJSZWYgPSB1c2VSZWY8SFRNTERpdkVsZW1lbnQ+KG51bGwpXG4gIGNvbnN0IFtzaG93VG9wR3JhZGllbnQsIHNldFNob3dUb3BHcmFkaWVudF0gPSB1c2VTdGF0ZShmYWxzZSlcbiAgY29uc3QgW3Nob3dCb3R0b21HcmFkaWVudCwgc2V0U2hvd0JvdHRvbUdyYWRpZW50XSA9IHVzZVN0YXRlKGZhbHNlKVxuICBjb25zdCBbaXNTY3JvbGxpbmcsIHNldElzU2Nyb2xsaW5nXSA9IHVzZVN0YXRlKGZhbHNlKVxuICBjb25zdCBzY3JvbGxUaW1lb3V0UmVmID0gdXNlUmVmPFJldHVyblR5cGU8dHlwZW9mIHNldFRpbWVvdXQ+IHwgbnVsbD4obnVsbClcblxuICAvLyBTYWx1ZG8gZmlqbyBwb3IgdGlwbyBkZSBjb250ZXh0byAoaTE4bikuIEN1c3RvbSBhZ2VudHMgc2lndWVuIHVzYW5kbyBhZ2VudC5pbnRyb2R1Y3Rpb24uXG4gIGNvbnN0IGdyZWV0aW5nID0gdXNlTWVtbygoKSA9PiB7XG4gICAgaWYgKGlzTWFpYWtlcikgcmV0dXJuICcnXG4gICAgaWYgKGlzUmVjZW50Q29udGV4dHNTdGVwKSByZXR1cm4gJydcblxuICAgIGlmIChpc01BSUEgJiYgcGlubmVkRW50aXR5VHlwZSkge1xuICAgICAgcmV0dXJuIHQoYGhvbWVNZW51LmNvbnRleHRIb21lLmNvbnRleHRHcmVldGluZy4ke3Bpbm5lZEVudGl0eVR5cGV9YClcbiAgICB9XG5cbiAgICBjb25zdCBpbnRybyA9IGFnZW50Py5pbnRyb2R1Y3Rpb25cbiAgICBpZiAoIWludHJvKSByZXR1cm4gJydcbiAgICBpZiAoQXJyYXkuaXNBcnJheShpbnRybykgJiYgaW50cm8ubGVuZ3RoID4gMCkge1xuICAgICAgcmV0dXJuIGludHJvW01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIGludHJvLmxlbmd0aCldXG4gICAgfVxuICAgIHJldHVybiB0eXBlb2YgaW50cm8gPT09ICdzdHJpbmcnID8gaW50cm8gOiAnJ1xuICB9LCBbYWdlbnQ/LmlkLCBhZ2VudD8uaW50cm9kdWN0aW9uLCBpc01haWFrZXIsIGlzTUFJQSwgcGlubmVkRW50aXR5VHlwZSwgaXNSZWNlbnRDb250ZXh0c1N0ZXAsIHRdKVxuXG4gIGNvbnN0IGhhbmRsZVNlbGVjdFJlY2VudENvbnRleHQgPSB1c2VDYWxsYmFjayhcbiAgICAoY29udGV4dDogUmVjZW50Q29udGV4dEl0ZW0sIG9yZGVyOiBudW1iZXIpID0+IHtcbiAgICAgIGV2ZW50KEVWRU5UUy5haUNoYXRDb250ZXh0U2VsZWN0ZWQsIHsgb3JkZXIsIHR5cGU6IGNvbnRleHQudHlwZSB9KVxuXG4gICAgICBjb25zdCBjb250ZXh0SWQgPSBwYXJzZU51bWVyaWNJZChjb250ZXh0LmlkKVxuICAgICAgY29uc3QgY2xpZW50SWQgPSBwYXJzZU51bWVyaWNJZChjb250ZXh0LnBhcmVudHM/LmNsaWVudF9pZClcbiAgICAgIGNvbnN0IHByb2plY3RJZCA9IHBhcnNlTnVtZXJpY0lkKGNvbnRleHQucGFyZW50cz8ucHJvamVjdF9pZClcbiAgICAgIGNvbnN0IGNsaWVudE5hbWUgPSBjb250ZXh0LnBhcmVudHM/LmNsaWVudF9uYW1lIHx8ICcnXG4gICAgICBjb25zdCBwcm9qZWN0TmFtZSA9IGNvbnRleHQucGFyZW50cz8ucHJvamVjdF9uYW1lIHx8ICcnXG5cbiAgICAgIHNldFNlbGVjdGVkQ29udGV4dChjb250ZXh0KVxuICAgICAgc2V0VGFzayhudWxsKVxuICAgICAgc2V0UHJvamVjdChudWxsKVxuICAgICAgc2V0Q2xpZW50Py4obnVsbClcbiAgICAgIHNldENoaXBzUHJvamVjdChudWxsKVxuXG4gICAgICBpZiAoY29udGV4dC50eXBlID09PSAnY2xpZW50Jykge1xuICAgICAgICBpZiAoY29udGV4dElkID09IG51bGwpIHJldHVyblxuICAgICAgICBzZXRDbGllbnQ/Lih7IGlkOiBjb250ZXh0SWQsIG5hbWU6IGNvbnRleHQubmFtZSB9KVxuICAgICAgfSBlbHNlIGlmIChjb250ZXh0LnR5cGUgPT09ICdwcm9qZWN0Jykge1xuICAgICAgICBpZiAoY29udGV4dElkID09IG51bGwpIHJldHVyblxuICAgICAgICBzZXRQcm9qZWN0KHtcbiAgICAgICAgICBpZDogY29udGV4dElkLFxuICAgICAgICAgIG5hbWU6IGNvbnRleHQubmFtZSxcbiAgICAgICAgICAuLi4oY2xpZW50SWQgIT0gbnVsbCA/IHsgY2xpZW50SWQgfSA6IHt9KSxcbiAgICAgICAgICAuLi4oY2xpZW50SWQgIT0gbnVsbCA/IHsgY2xpZW50OiB7IGlkOiBjbGllbnRJZCwgbmFtZTogY2xpZW50TmFtZSB9IH0gOiB7fSksXG4gICAgICAgIH0pXG4gICAgICAgIHNldENoaXBzUHJvamVjdCh7XG4gICAgICAgICAgcHJvamVjdElkOiBTdHJpbmcoY29udGV4dElkKSxcbiAgICAgICAgICBwcm9qZWN0TmFtZTogY29udGV4dC5uYW1lLFxuICAgICAgICAgIGNsaWVudE5hbWUsXG4gICAgICAgIH0pXG4gICAgICB9IGVsc2UgaWYgKGNvbnRleHQudHlwZSA9PT0gJ3Rhc2snKSB7XG4gICAgICAgIHNldFRhc2soe1xuICAgICAgICAgIGlkOiBjb250ZXh0LmlkLFxuICAgICAgICAgIG5hbWU6IGNvbnRleHQubmFtZSxcbiAgICAgICAgICAuLi4ocHJvamVjdElkICE9IG51bGwgPyB7IHByb2plY3RJZCB9IDoge30pLFxuICAgICAgICAgIC4uLihjbGllbnRJZCAhPSBudWxsID8geyBjbGllbnRJZCB9IDoge30pLFxuICAgICAgICB9KVxuICAgICAgICBpZiAoY2xpZW50SWQgIT0gbnVsbCkge1xuICAgICAgICAgIHNldENsaWVudD8uKHsgaWQ6IGNsaWVudElkLCBuYW1lOiBjbGllbnROYW1lIH0pXG4gICAgICAgIH1cbiAgICAgICAgaWYgKHByb2plY3RJZCAhPSBudWxsKSB7XG4gICAgICAgICAgc2V0UHJvamVjdCh7XG4gICAgICAgICAgICBpZDogcHJvamVjdElkLFxuICAgICAgICAgICAgbmFtZTogcHJvamVjdE5hbWUgfHwgYCR7dCgnaG9tZU1lbnUucmVjZW50Q29udGV4dHMudHlwZXMucHJvamVjdCcpfSAke3Byb2plY3RJZH1gLFxuICAgICAgICAgICAgLi4uKGNsaWVudElkICE9IG51bGwgPyB7IGNsaWVudElkIH0gOiB7fSksXG4gICAgICAgICAgICAuLi4oY2xpZW50SWQgIT0gbnVsbCA/IHsgY2xpZW50OiB7IGlkOiBjbGllbnRJZCwgbmFtZTogY2xpZW50TmFtZSB9IH0gOiB7fSksXG4gICAgICAgICAgfSlcbiAgICAgICAgICBzZXRDaGlwc1Byb2plY3Qoe1xuICAgICAgICAgICAgcHJvamVjdElkOiBTdHJpbmcocHJvamVjdElkKSxcbiAgICAgICAgICAgIHByb2plY3ROYW1lOiBwcm9qZWN0TmFtZSB8fCBgJHt0KCdob21lTWVudS5yZWNlbnRDb250ZXh0cy50eXBlcy5wcm9qZWN0Jyl9ICR7cHJvamVjdElkfWAsXG4gICAgICAgICAgICBjbGllbnROYW1lLFxuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcbiAgICAgICAgZG9jdW1lbnQuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoJ21haWEtaW5wdXQtcmVmb2N1cycpKVxuICAgICAgfSlcbiAgICB9LFxuICAgIFtldmVudCwgc2V0Q2hpcHNQcm9qZWN0LCBzZXRDbGllbnQsIHNldFByb2plY3QsIHNldFRhc2ssIHRdXG4gIClcblxuICBjb25zdCByZW5kZXJSZWNlbnRDb250ZXh0cyA9ICgpID0+IHtcbiAgICBpZiAoIWlzUmVjZW50Q29udGV4dHNTdGVwKSByZXR1cm4gbnVsbFxuXG4gICAgcmV0dXJuIChcbiAgICAgIDxTQ0NBSUhvbWVSZWNlbnRDb250ZXh0cz5cbiAgICAgICAgPFNDQ0FJSG9tZVJlY2VudENvbnRleHRzTGlzdD5cbiAgICAgICAgICB7cmVjZW50Q29udGV4dHNMb2FkaW5nICYmXG4gICAgICAgICAgICBSRUNFTlRfQ09OVEVYVF9TS0VMRVRPTl9LRVlTLm1hcChrZXkgPT4gPFNDQ0FJSG9tZVJlY2VudENvbnRleHRQaWxsU2tlbGV0b24ga2V5PXtrZXl9IC8+KX1cbiAgICAgICAgICB7IXJlY2VudENvbnRleHRzTG9hZGluZyAmJlxuICAgICAgICAgICAgcmVjZW50Q29udGV4dHMubWFwKChjb250ZXh0LCBpbmRleCkgPT4gKFxuICAgICAgICAgICAgICA8UmVjZW50Q29udGV4dFBpbGxcbiAgICAgICAgICAgICAgICBrZXk9e2Ake2NvbnRleHQudHlwZX0tJHtjb250ZXh0LmlkfWB9XG4gICAgICAgICAgICAgICAgY29udGV4dD17Y29udGV4dH1cbiAgICAgICAgICAgICAgICBsYWJlbD17Y29udGV4dC5uYW1lLnRyaW0oKX1cbiAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBoYW5kbGVTZWxlY3RSZWNlbnRDb250ZXh0KGNvbnRleHQsIGluZGV4ICsgMSl9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICApKX1cbiAgICAgICAgPC9TQ0NBSUhvbWVSZWNlbnRDb250ZXh0c0xpc3Q+XG4gICAgICA8L1NDQ0FJSG9tZVJlY2VudENvbnRleHRzPlxuICAgIClcbiAgfVxuXG4gIGNvbnN0IGNoZWNrU2Nyb2xsID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGNvbnN0IGNvbnRhaW5lciA9IGNvbnRlbnRDb250YWluZXJSZWYuY3VycmVudFxuICAgIGlmICghY29udGFpbmVyIHx8ICFob21lU2Nyb2xsYWJsZUxheW91dCkgcmV0dXJuXG5cbiAgICBjb25zdCB7IHNjcm9sbFRvcCwgc2Nyb2xsSGVpZ2h0LCBjbGllbnRIZWlnaHQgfSA9IGNvbnRhaW5lclxuICAgIGNvbnN0IGlzU2Nyb2xsYWJsZSA9IHNjcm9sbEhlaWdodCA+IGNsaWVudEhlaWdodFxuICAgIGNvbnN0IGlzQXRUb3AgPSBzY3JvbGxUb3AgPT09IDBcbiAgICBjb25zdCBpc0F0Qm90dG9tID0gc2Nyb2xsVG9wICsgY2xpZW50SGVpZ2h0ID49IHNjcm9sbEhlaWdodCAtIDFcblxuICAgIHNldFNob3dUb3BHcmFkaWVudChpc1Njcm9sbGFibGUgJiYgIWlzQXRUb3ApXG4gICAgc2V0U2hvd0JvdHRvbUdyYWRpZW50KGlzU2Nyb2xsYWJsZSAmJiAhaXNBdEJvdHRvbSlcbiAgICBzZXRJc1Njcm9sbGluZyh0cnVlKVxuXG4gICAgaWYgKHNjcm9sbFRpbWVvdXRSZWYuY3VycmVudCkge1xuICAgICAgY2xlYXJUaW1lb3V0KHNjcm9sbFRpbWVvdXRSZWYuY3VycmVudClcbiAgICB9XG5cbiAgICBzY3JvbGxUaW1lb3V0UmVmLmN1cnJlbnQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHNldElzU2Nyb2xsaW5nKGZhbHNlKVxuICAgIH0sIDE1MClcbiAgfSwgW2hvbWVTY3JvbGxhYmxlTGF5b3V0XSlcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghaG9tZVNjcm9sbGFibGVMYXlvdXQpIHtcbiAgICAgIHNldFNob3dUb3BHcmFkaWVudChmYWxzZSlcbiAgICAgIHNldFNob3dCb3R0b21HcmFkaWVudChmYWxzZSlcbiAgICAgIHJldHVybiB1bmRlZmluZWRcbiAgICB9XG5cbiAgICBjb25zdCBjb250YWluZXIgPSBjb250ZW50Q29udGFpbmVyUmVmLmN1cnJlbnRcbiAgICBpZiAoIWNvbnRhaW5lcikge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZFxuICAgIH1cblxuICAgIGNoZWNrU2Nyb2xsKClcbiAgICBjb250YWluZXIuYWRkRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgY2hlY2tTY3JvbGwpXG5cbiAgICBjb25zdCB0aW1lb3V0SWQgPSBzZXRUaW1lb3V0KGNoZWNrU2Nyb2xsLCAxMDApXG5cbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgY29udGFpbmVyLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIGNoZWNrU2Nyb2xsKVxuICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXRJZClcbiAgICAgIGlmIChzY3JvbGxUaW1lb3V0UmVmLmN1cnJlbnQpIHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHNjcm9sbFRpbWVvdXRSZWYuY3VycmVudClcbiAgICAgIH1cbiAgICB9XG4gIH0sIFtob21lU2Nyb2xsYWJsZUxheW91dCwgY2hlY2tTY3JvbGxdKVxuXG4gIGNvbnN0IHJlbmRlckhlYWRlckNvbnRlbnQgPSAoKSA9PiB7XG4gICAgaWYgKCFpc01BSUEpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxTQ0NBSUhvbWVBZ2VudEluZm9Db250YWluZXI+XG4gICAgICAgICAgPFNDQ0FJSG9tZUFnZW50SW5mbz5cbiAgICAgICAgICAgIHthZ2VudD8uZW1vaml9IHthZ2VudD8ubmFtZX1cbiAgICAgICAgICA8L1NDQ0FJSG9tZUFnZW50SW5mbz5cbiAgICAgICAgICB7YWdlbnQ/LmNyZWF0ZWRfYnkgJiYgIWlzTUFJQSAmJiAoXG4gICAgICAgICAgICA8U0NDQUlIb21lQ3JlYXRlZEJ5Q29udGFpbmVyPlxuICAgICAgICAgICAgICA8VG9vbHRpcFxuICAgICAgICAgICAgICAgIHRpdGxlPXtcbiAgICAgICAgICAgICAgICAgIGFnZW50Py5jcmVhdGVkX2J5Py5pc19kZWxldGVkID8gdCgnaG9tZU1lbnUuY3JlYXRlZEJ5VG9vbHRpcERlbGV0ZWQnKSA6IHQoJ2hvbWVNZW51LmNyZWF0ZWRCeVRvb2x0aXAnKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxTQ0NBSUhvbWVDcmVhdGVkQnlUZXh0PlxuICAgICAgICAgICAgICAgICAge3QoJ2hvbWVNZW51LmNyZWF0ZWRCeScpfXsnICd9XG4gICAgICAgICAgICAgICAgICA8U0NDQUlIb21lQ3JlYXRlZEJ5VGV4dE5hbWU+e2FnZW50Py5jcmVhdGVkX2J5Py5uYW1lfTwvU0NDQUlIb21lQ3JlYXRlZEJ5VGV4dE5hbWU+XG4gICAgICAgICAgICAgICAgPC9TQ0NBSUhvbWVDcmVhdGVkQnlUZXh0PlxuICAgICAgICAgICAgICA8L1Rvb2x0aXA+XG4gICAgICAgICAgICA8L1NDQ0FJSG9tZUNyZWF0ZWRCeUNvbnRhaW5lcj5cbiAgICAgICAgICApfVxuICAgICAgICA8L1NDQ0FJSG9tZUFnZW50SW5mb0NvbnRhaW5lcj5cbiAgICAgIClcbiAgICB9XG5cbiAgICByZXR1cm4gKFxuICAgICAgPFNDQ0FJSG9tZU1haWFIZWFkZXJTdGFjayAkbm9HYXA9eyFpc1JlY2VudENvbnRleHRzU3RlcCAmJiAhZ3JlZXRpbmd9PlxuICAgICAgICA8U0NDQUlIb21lSWNvbkNvbnRhaW5lcj5cbiAgICAgICAgICA8U0NDQUlIb21lTG9nb1dyYXBwZXI+XG4gICAgICAgICAgICA8TUFJQUlzb2xvZ28gLz5cbiAgICAgICAgICA8L1NDQ0FJSG9tZUxvZ29XcmFwcGVyPlxuICAgICAgICA8L1NDQ0FJSG9tZUljb25Db250YWluZXI+XG4gICAgICAgIHtpc1JlY2VudENvbnRleHRzU3RlcCA/IChcbiAgICAgICAgICA8PlxuICAgICAgICAgICAgPFNDQ0FJSG9tZVRpdGxlPnt0KCdob21lTWVudS5jb250ZXh0SG9tZS5ncmVldGluZycsIHsgbmFtZTogdXNlci5maXJzdE5hbWUgfSl9PC9TQ0NBSUhvbWVUaXRsZT5cbiAgICAgICAgICAgIDxTQ0NBSUhvbWVTdWJ0aXRsZT5cbiAgICAgICAgICAgICAge3QoXG4gICAgICAgICAgICAgICAgdXNlci5yb2xlX2lkID09PSBDT1JVc2VyUm9sZS5DT0xMQUJPUkFUT1JcbiAgICAgICAgICAgICAgICAgID8gJ2hvbWVNZW51LmNvbnRleHRIb21lLnN1YnRpdGxlQ29sbGFib3JhdG9yJ1xuICAgICAgICAgICAgICAgICAgOiAnaG9tZU1lbnUuY29udGV4dEhvbWUuc3VidGl0bGUnXG4gICAgICAgICAgICAgICl9XG4gICAgICAgICAgICA8L1NDQ0FJSG9tZVN1YnRpdGxlPlxuICAgICAgICAgIDwvPlxuICAgICAgICApIDogKFxuICAgICAgICAgIGdyZWV0aW5nICYmIDxTQ0NBSUhvbWVHcmVldGluZz57Z3JlZXRpbmd9PC9TQ0NBSUhvbWVHcmVldGluZz5cbiAgICAgICAgKX1cbiAgICAgIDwvU0NDQUlIb21lTWFpYUhlYWRlclN0YWNrPlxuICAgIClcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPFNDQ0FJSG9tZUNvbnRhaW5lciBzaG93RkFRcz17c2hvd0ZBUXN9PlxuICAgICAge2hvbWVTY3JvbGxhYmxlTGF5b3V0ICYmIDxTQ0NBSUhvbWVHcmFkaWVudFRvcCAkc2hvdz17c2hvd1RvcEdyYWRpZW50fSAvPn1cbiAgICAgIDxTQ0NBSUhvbWVDb250ZW50XG4gICAgICAgIHJlZj17Y29udGVudENvbnRhaW5lclJlZn1cbiAgICAgICAgc2hvd0ZBUXM9e2hvbWVTY3JvbGxhYmxlTGF5b3V0fVxuICAgICAgICAkaXNBZ2VudFZpZXc9eyFpc01BSUF9XG4gICAgICAgICRmbG9hdGluZ0N1c3RvbUNlbnRlcj17ZmxvYXRpbmdDdXN0b21DZW50ZXJ9XG4gICAgICA+XG4gICAgICAgIDxTQ0NBSUhvbWVDb250ZW50SW5uZXJcbiAgICAgICAgICBzaG93RkFRcz17aG9tZVNjcm9sbGFibGVMYXlvdXR9XG4gICAgICAgICAgJGlzQWdlbnRWaWV3PXshaXNNQUlBfVxuICAgICAgICAgICRmbG9hdGluZ0N1c3RvbUNlbnRlcj17ZmxvYXRpbmdDdXN0b21DZW50ZXJ9XG4gICAgICAgID5cbiAgICAgICAgICA8U0NDQUlIb21lSGVhZGVyXG4gICAgICAgICAgICAkZ2FwPXtpc01BSUEgJiYgc2VjdGlvbiAhPT0gJ3Byb2plY3QnID8gJzhweCcgOiAnMjBweCd9XG4gICAgICAgICAgICAkbWF4V2lkdGg9e2lzTUFJQSA/ICcxMDAlJyA6ICczODBweCd9XG4gICAgICAgICAgICAkaXNBZ2VudFZpZXc9eyFpc01BSUF9XG4gICAgICAgICAgPlxuICAgICAgICAgICAge3JlbmRlckhlYWRlckNvbnRlbnQoKX1cblxuICAgICAgICAgICAge3NlY3Rpb24gIT09ICdwcm9qZWN0JyAmJiAoXG4gICAgICAgICAgICAgIDxTQ0NBSUhvbWVJbnRyb2R1Y3Rpb24gZXhwYW5kZWQ9e2V4cGFuZGVkfT57IWlzTUFJQSAmJiBhZ2VudD8uaW50cm9kdWN0aW9ufTwvU0NDQUlIb21lSW50cm9kdWN0aW9uPlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICA8L1NDQ0FJSG9tZUhlYWRlcj5cbiAgICAgICAgICB7c2hvd1Byb2plY3RTdW1tYXJ5Q2FyZCAmJiAoXG4gICAgICAgICAgICA8U0NDQUhXcmFwcGVyU3VtbWFyeVByb2plY3Qgb25DbGljaz17aGFuZGxlcnMucHJvamVjdFN1bW1hcnl9PlxuICAgICAgICAgICAgICA8U0NDQUlIb21lUHJvamVjdFN1bW1hcnk+XG4gICAgICAgICAgICAgICAgPFRlbXBsYXRlR3JhZGllbnRJY29uIGhlaWdodD17MjR9IHdpZHRoPXsyNH0gLz5cbiAgICAgICAgICAgICAgPC9TQ0NBSUhvbWVQcm9qZWN0U3VtbWFyeT5cbiAgICAgICAgICAgICAgPFNDQ0FJSG9tZVByb2plY3RTdW1tYXJ5Q29udGVudD5cbiAgICAgICAgICAgICAgICA8U0NDQUlIb21lUHJvamVjdFN1bW1hcnlUaXRsZT57dCgnaG9tZU1lbnUucHJvamVjdFN1bW1hcnkudGl0bGUnKX08L1NDQ0FJSG9tZVByb2plY3RTdW1tYXJ5VGl0bGU+XG4gICAgICAgICAgICAgICAgPFNDQ0FJSG9tZVByb2plY3RTdW1tYXJ5RGVzY3JpcHRpb24+XG4gICAgICAgICAgICAgICAgICB7dCgnaG9tZU1lbnUucHJvamVjdFN1bW1hcnkuZGVzY3JpcHRpb24nKX1cbiAgICAgICAgICAgICAgICA8L1NDQ0FJSG9tZVByb2plY3RTdW1tYXJ5RGVzY3JpcHRpb24+XG4gICAgICAgICAgICAgIDwvU0NDQUlIb21lUHJvamVjdFN1bW1hcnlDb250ZW50PlxuICAgICAgICAgICAgPC9TQ0NBSFdyYXBwZXJTdW1tYXJ5UHJvamVjdD5cbiAgICAgICAgICApfVxuICAgICAgICAgIHtzaG93RHluYW1pY1NlY3Rpb24gJiYgKFxuICAgICAgICAgICAgPFNDQ0FJSG9tZUR5bmFtaWNTZWN0aW9uICRncm93PXtpc01haWFrZXJ9PlxuICAgICAgICAgICAgICB7cmVuZGVyUmVjZW50Q29udGV4dHMoKX1cbiAgICAgICAgICAgICAge3Nob3VsZFNob3dGYXFzICYmIChcbiAgICAgICAgICAgICAgICA8RnJlcXVlbnRseUFza2VkUXVlc3Rpb25zXG4gICAgICAgICAgICAgICAgICBvblN0YXJ0Q2hhdD17b25TdGFydENoYXR9XG4gICAgICAgICAgICAgICAgICBzaG93RkFRcz17c2hvd0ZBUXN9XG4gICAgICAgICAgICAgICAgICBzaG93UHJvamVjdFN1bW1hcnk9e3Nob3dQcm9qZWN0U3VtbWFyeX1cbiAgICAgICAgICAgICAgICAgIGFnZW50SWQ9e2FnZW50Py5pZH1cbiAgICAgICAgICAgICAgICAgIGxhbmc9e2xhbmd9XG4gICAgICAgICAgICAgICAgICBpc1Njcm9sbGluZz17aXNTY3JvbGxpbmd9XG4gICAgICAgICAgICAgICAgICBmYXFzPXtmYXFzfVxuICAgICAgICAgICAgICAgICAgbG9hZGluZz17ZmFxc0FyZUxvYWRpbmd9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAge3Nob3VsZFNob3dGdWFzICYmIChcbiAgICAgICAgICAgICAgICA8RnJlcXVlbnRseVVzZWRBY3Rpb25zXG4gICAgICAgICAgICAgICAgICBvblN0YXJ0Q2hhdD17b25TdGFydENoYXR9XG4gICAgICAgICAgICAgICAgICBhZ2VudElkPXthZ2VudD8uaWR9XG4gICAgICAgICAgICAgICAgICBpc1Njcm9sbGluZz17aXNTY3JvbGxpbmd9XG4gICAgICAgICAgICAgICAgICBhY3Rpb25zPXtmdWFzfVxuICAgICAgICAgICAgICAgICAgbG9hZGluZz17ZnVhc0FyZUxvYWRpbmd9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAge2lzTWFpYWtlciA/IDxDaGF0QUlIb21lTWFpYWtlciBvblN0YXJ0Q2hhdD17b25TdGFydENoYXR9IC8+IDogbnVsbH1cbiAgICAgICAgICAgIDwvU0NDQUlIb21lRHluYW1pY1NlY3Rpb24+XG4gICAgICAgICAgKX1cbiAgICAgICAgPC9TQ0NBSUhvbWVDb250ZW50SW5uZXI+XG4gICAgICA8L1NDQ0FJSG9tZUNvbnRlbnQ+XG4gICAgICB7aG9tZVNjcm9sbGFibGVMYXlvdXQgJiYgPFNDQ0FJSG9tZUdyYWRpZW50Qm90dG9tICRzaG93PXtzaG93Qm90dG9tR3JhZGllbnR9IC8+fVxuICAgIDwvU0NDQUlIb21lQ29udGFpbmVyPlxuICApXG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQSxTQUFTQSxTQUFTLEVBQUVDLE1BQU0sRUFBRUMsUUFBUSxFQUFFQyxXQUFXLEVBQUVDLE9BQU8sUUFBUSxPQUFPO0FBRXpFLFNBQVNDLE9BQU8sUUFBUSw4Q0FBOEM7QUFDdEUsU0FBU0MsYUFBYSxRQUFRLGdEQUFnRDtBQUM5RSxTQUFTQyxJQUFJLFFBQVEscUJBQXFCO0FBQzFDLFNBQVNDLE1BQU0sRUFBRUMsUUFBUSxRQUFRLHlCQUF5QjtBQUkxRCxTQUNFQyxrQkFBa0IsRUFDbEJDLGdCQUFnQixFQUNoQkMscUJBQXFCLEVBQ3JCQyxvQkFBb0IsRUFDcEJDLHVCQUF1QixFQUN2QkMsZUFBZSxFQUNmQyxpQkFBaUIsRUFDakJDLDJCQUEyQixFQUMzQkMsa0JBQWtCLEVBQ2xCQyx1QkFBdUIsRUFDdkJDLDhCQUE4QixFQUM5QkMsNEJBQTRCLEVBQzVCQyxrQ0FBa0MsRUFDbENDLDBCQUEwQixFQUMxQkMscUJBQXFCLEVBQ3JCQywyQkFBMkIsRUFDM0JDLHNCQUFzQixFQUN0QkMsMEJBQTBCLEVBQzFCQyxzQkFBc0IsRUFDdEJDLG9CQUFvQixFQUNwQkMsd0JBQXdCLEVB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