@projectcor/maia-components 2.49.0-beta.1 → 2.49.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/components/atoms/ApprovalBox/ApprovalBox.helpers.js +37 -0
- package/lib/components/atoms/ApprovalBox/ApprovalBox.js +3 -37
- package/lib/components/atoms/AttachmentCard/AttachmentCardAudio.helpers.js +117 -0
- package/lib/components/atoms/AttachmentCard/AttachmentCardAudio.js +31 -101
- package/lib/components/atoms/AttachmentPreviewModal/AttachmentPreviewModal.helpers.js +91 -0
- package/lib/components/atoms/AttachmentPreviewModal/AttachmentPreviewModal.js +49 -140
- package/lib/components/atoms/AttachmentPreviewModal/PptPreview.helpers.js +257 -0
- package/lib/components/atoms/AttachmentPreviewModal/PptPreview.js +53 -205
- package/lib/components/atoms/AttachmentPreviewModal/WordPreview.helpers.js +4 -0
- package/lib/components/atoms/AttachmentPreviewModal/WordPreview.js +2 -4
- package/lib/components/atoms/ClientSelector/ClientSelector.helpers.js +26 -0
- package/lib/components/atoms/ClientSelector/ClientSelector.js +12 -21
- package/lib/components/atoms/ContextMentionChip/buildChipElement.helpers.js +227 -0
- package/lib/components/atoms/ContextMentionChip/buildChipElement.js +15 -255
- package/lib/components/atoms/ContextMentionEditor/ContextMentionEditor.helpers.js +59 -0
- package/lib/components/atoms/ContextMentionEditor/ContextMentionEditor.js +12 -57
- package/lib/components/atoms/MAIAInput/MAIAInput.attachments.helpers.js +74 -0
- package/lib/components/atoms/MAIAInput/MAIAInput.helpers.js +184 -0
- package/lib/components/atoms/MAIAInput/MAIAInput.js +127 -176
- package/lib/components/atoms/MAIAInput/MAIAInputEditor.helpers.js +96 -0
- package/lib/components/atoms/MAIAInput/MAIAInputEditor.js +40 -113
- package/lib/components/atoms/OnboardingModalButton/OnboardingModalButton.helpers.js +17 -0
- package/lib/components/atoms/OnboardingModalButton/OnboardingModalButton.js +3 -15
- package/lib/components/atoms/ReasoningBlock/ReasoningSteps.js +3 -4
- package/lib/components/atoms/ReasoningBlock/ReasoningTimeline.js +3 -11
- package/lib/components/atoms/ReasoningBlock/reasoningLeading.js +6 -1
- package/lib/components/atoms/ReasoningBlock/reasoningLiveNarration.js +2 -3
- package/lib/components/atoms/ReasoningBlock/reasoningTimeline.helpers.js +10 -0
- package/lib/components/atoms/SlashCommandDropdown/SlashCommandDropdown.helpers.js +101 -0
- package/lib/components/atoms/SlashCommandDropdown/SlashCommandDropdown.js +21 -77
- package/lib/components/atoms/TextArea/TextArea.helpers.js +23 -0
- package/lib/components/atoms/TextArea/TextArea.js +11 -20
- package/lib/components/molecules/AbmSection/AbmAccessibilitySection/AbmAccessibilitySection.helpers.js +37 -0
- package/lib/components/molecules/AbmSection/AbmAccessibilitySection/AbmAccessibilitySection.js +6 -29
- package/lib/components/molecules/AbmSection/AbmGeneralSection.helpers.js +68 -0
- package/lib/components/molecules/AbmSection/AbmGeneralSection.js +17 -56
- package/lib/components/molecules/AbmSection/AbmKnowledgeSection.helpers.js +133 -0
- package/lib/components/molecules/AbmSection/AbmKnowledgeSection.js +31 -112
- package/lib/components/molecules/AbmSection/AbmLoaderFiles.helpers.js +17 -0
- package/lib/components/molecules/AbmSection/AbmLoaderFiles.js +5 -15
- package/lib/components/molecules/ChatAIHome/ChatAIHome.helpers.js +370 -0
- package/lib/components/molecules/ChatAIHome/ChatAIHome.js +197 -233
- package/lib/components/molecules/ChatAIMessages/ChatAIMessages.helpers.js +398 -0
- package/lib/components/molecules/ChatAIMessages/ChatAIMessages.js +209 -235
- package/lib/components/molecules/ChatAIModal/ChatAIModal.helpers.js +515 -4
- package/lib/components/molecules/ChatAIModal/ChatAIModal.js +228 -344
- package/lib/components/molecules/ChatAIModal/components/ChatAiAgentOptions/ChatAiAgentOptions.helpers.js +5 -0
- package/lib/components/molecules/ChatAIModal/components/ChatAiAgentOptions/ChatAiAgentOptions.js +3 -2
- package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.helpers.js +49 -0
- package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.js +36 -33
- package/lib/components/molecules/ChatAIMyAgents/ChatAIMyAgents.helpers.js +39 -0
- package/lib/components/molecules/ChatAIMyAgents/ChatAIMyAgents.js +30 -33
- package/lib/components/molecules/ChatAIMySkills/ChatAIMySkills.helpers.js +41 -0
- package/lib/components/molecules/ChatAIMySkills/ChatAIMySkills.js +9 -35
- package/lib/components/molecules/ChatFooter/ChatFooterFaqs.helpers.js +48 -0
- package/lib/components/molecules/ChatFooter/ChatFooterFaqs.js +9 -44
- package/lib/components/molecules/Sidebar/Sidebar.helpers.js +43 -0
- package/lib/components/molecules/Sidebar/Sidebar.js +25 -22
- package/lib/components/organisms/AbmAgentModal/AbmAgentModal.helpers.js +512 -0
- package/lib/components/organisms/AbmAgentModal/AbmAgentModal.js +309 -643
- package/lib/components/organisms/AbmSkillModal/AbmSkillModal.helpers.js +37 -0
- package/lib/components/organisms/AbmSkillModal/AbmSkillModal.js +13 -25
- package/lib/constants/formatExtensions.js +7 -8
- package/lib/dev/DevReasoningTimeline.js +8 -50
- package/lib/hooks/useAgentModel/useCreateAgent.helpers.js +144 -0
- package/lib/hooks/useAgentModel/useCreateAgent.js +38 -102
- package/lib/hooks/useChatManager/useChatManager.helpers.js +902 -0
- package/lib/hooks/useChatManager/useChatManager.js +267 -741
- package/lib/hooks/useChatMessages/useChatMessages.helpers.js +365 -0
- package/lib/hooks/useChatMessages/useChatMessages.js +59 -285
- package/lib/hooks/useClientSearch.helpers.js +36 -0
- package/lib/hooks/useClientSearch.js +4 -32
- package/lib/hooks/useContextMentions.helpers.js +212 -0
- package/lib/hooks/useContextMentions.js +5 -223
- package/lib/hooks/useContextMentions.types.js +2 -0
- package/lib/hooks/useContextPinPopover.helpers.js +95 -0
- package/lib/hooks/useContextPinPopover.js +16 -75
- package/lib/hooks/useEntitySearch.helpers.js +407 -0
- package/lib/hooks/useEntitySearch.js +52 -436
- package/lib/hooks/useMentionPopover.helpers.js +41 -0
- package/lib/hooks/useMentionPopover.js +9 -35
- package/lib/hooks/useMinimizedPillBottomOffset.helpers.js +47 -0
- package/lib/hooks/useMinimizedPillBottomOffset.js +15 -45
- package/lib/hooks/useOrchestratorStream/useOrchestratorStream.helpers.js +86 -0
- package/lib/hooks/useOrchestratorStream/useOrchestratorStream.js +8 -82
- package/lib/hooks/useProjectSearch.helpers.js +61 -0
- package/lib/hooks/useProjectSearch.js +4 -58
- package/lib/hooks/useProjectSummaryConfig.helpers.js +62 -0
- package/lib/hooks/useProjectSummaryConfig.js +14 -52
- package/lib/hooks/useReasoningTrace/reasoningStore.js +8 -39
- package/lib/hooks/useRecentClientsSearch.helpers.js +33 -0
- package/lib/hooks/useRecentClientsSearch.js +4 -32
- package/lib/lang/br/index.js +1 -7
- package/lib/lang/en/index.js +1 -7
- package/lib/lang/es/index.js +1 -7
- package/lib/lang/fr/index.js +1 -7
- package/lib/services/maia/Agents/getAgents.helpers.js +241 -0
- package/lib/services/maia/Agents/getAgents.js +90 -282
- package/lib/services/maia/Orchestrator/orchestrator.helpers.js +130 -0
- package/lib/services/maia/Orchestrator/orchestrator.js +38 -121
- package/lib/services/utils/mapChatMessages.helpers.js +223 -0
- package/lib/services/utils/mapChatMessages.js +25 -254
- package/lib/store/sessions/sessionNotifications.helpers.js +45 -0
- package/lib/store/sessions/sessionNotifications.js +35 -41
- package/lib/store/sessions/sessionStreamManager.helpers.js +134 -0
- package/lib/store/sessions/sessionStreamManager.js +172 -236
- package/lib/test/mockSseStream.js +121 -0
- package/lib/test/streamdownCodeMock.js +6 -0
- package/lib/test/streamdownMock.js +12 -0
- package/lib/types/Chat.js +1 -1
- package/lib/types/agentModal.js +1 -1
- package/lib/types/reasoning.js +1 -1
- package/lib/utils/imagePreprocessor.helpers.js +28 -0
- package/lib/utils/imagePreprocessor.js +12 -37
- package/lib/utils/renderContextMentions.helpers.js +110 -0
- package/lib/utils/renderContextMentions.js +4 -110
- package/lib/utils/streamActivityMessages.helpers.js +222 -0
- package/lib/utils/streamActivityMessages.js +4 -221
- package/package.json +2 -2
- package/lib/components/atoms/ContextCompactedNotice/ContextCompactedNotice.js +0 -53
- package/lib/components/atoms/ContextCompactedNotice/ContextCompactedNotice.styles.js +0 -8
- package/lib/components/atoms/ContextCompactedNotice/index.js +0 -2
- package/lib/types/contextCompaction.js +0 -48
- package/lib/types/jest-dom.d.js +0 -2
|
@@ -1,7 +1,4 @@
|
|
|
1
|
-
import _defineProperty from "@babel/runtime/helpers/defineProperty";
|
|
2
1
|
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
2
|
/* eslint-disable react/function-component-definition */
|
|
6
3
|
/* eslint-disable jsx-a11y/click-events-have-key-events */
|
|
7
4
|
/* eslint-disable jsx-a11y/no-static-element-interactions */
|
|
@@ -13,7 +10,7 @@ import { useT } from '../../../hooks/useT';
|
|
|
13
10
|
import { EVENTS, useEvent } from '../../../hooks/useEvent';
|
|
14
11
|
import { SCCAIHomeContainer, SCCAIHomeContent, SCCAIHomeContentInner, SCCAIHomeGradientTop, SCCAIHomeGradientBottom, SCCAIHomeHeader, SCCAIHomeGreeting, SCCAIHomeAgentInfoContainer, SCCAIHomeAgentInfo, SCCAIHomeProjectSummary, SCCAIHomeProjectSummaryContent, SCCAIHomeProjectSummaryTitle, SCCAIHomeProjectSummaryDescription, SCCAHWrapperSummaryProject, SCCAIHomeIntroduction, SCCAIHomeCreatedByContainer, SCCAIHomeCreatedByText, SCCAIHomeCreatedByTextName, SCCAIHomeIconContainer, SCCAIHomeLogoWrapper, SCCAIHomeMaiaHeaderStack, SCCAIHomeTitle, SCCAIHomeTitleBlock, SCCAIHomeSubtitle, SCCAIHomeDynamicSection, SCCAIHomeRecentContexts, SCCAIHomeRecentContextsList, SCCAIHomeRecentContextsSectionHeader, SCCAIHomeRecentContextsSectionTitle, SCCAIHomeRecentContextsSectionSubtitle, SCCAIHomeRecentContextPill, SCCAIHomeRecentContextPillIcon, SCCAIHomeRecentContextPillText, SCCAIHomeRecentContextPillSkeleton, MAIA_HEADER_COLLABORATOR_HOME_CONTENT_WIDTH_PX } from './styles';
|
|
15
12
|
import { useGlobalContext } from '../../../context/global-context';
|
|
16
|
-
import { useUser,
|
|
13
|
+
import { useUser, isCollaboratorRole, isManagerRole } from '../../../context/cor-user';
|
|
17
14
|
import { useResizeListener } from '../../../hooks/useResize';
|
|
18
15
|
import { getContextMentionIcon } from '../../../utils/contextMentionIcons';
|
|
19
16
|
import { orchestratorHasHoursSubagent } from '../../../utils/orchestratorSubagents';
|
|
@@ -29,6 +26,7 @@ import { useRecentContexts } from '../../../hooks/useRecentContexts';
|
|
|
29
26
|
import { MAIAIsologo } from '../../atoms/icons/MAIAIsologo';
|
|
30
27
|
import { TemplateGradientIcon } from '../../atoms/icons/TemplateGradientIcon';
|
|
31
28
|
import { ChatAIHomeMaiaker } from './ChatAIHomeMaiaker';
|
|
29
|
+
import { resolveActiveContextFromGlobal, resolveAllowedRecentContextTypes, resolveFaqsContextEntityType, resolveFuasSection, resolveHasPinnedContext, resolveHeaderTaskContextSubtitleKey, resolveHomeGreeting, resolveHomeScrollGradients, resolveMaiaHomeLang, resolveOrchestratorHomeLayout, resolvePinnedEntityType, resolveProjectSummaryFeatureAccess, resolveRealListsAgentId, resolveRealListsEntityType, resolveRecentContextPinOutcome, resolveShouldShowFaqs, resolveShouldShowFuas, resolveFloatingCustomCenter, filterRecentContextsByTypes, buildRecentContextSkeletonKeys, resolveShowRecentContextsBlock, resolvePlannerFuasVisibility, resolveHomeDynamicPanelVisibility, resolveMaiaHeaderStackLayout, resolveShowAgentIntroduction, buildFaqsFetchKey, shouldRefetchFaqs, shouldClearPinnedContextOnHomeStart, resolveRecentContextsSectionCopyKeys, resolveOrchestratorRecentContextsSubtitleKey, buildPinGlobalContextPatch, resolveHomeContextGreetingKey, shouldCheckHomeScroll, shouldObserveHomeScrollContent, shouldRenderRecentContextsPanel, shouldResetHomeScrollGradients } from './ChatAIHome.helpers';
|
|
32
30
|
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
33
31
|
export var FrequentQuestions = /*#__PURE__*/function (FrequentQuestions) {
|
|
34
32
|
FrequentQuestions["rentabilidad_proyecto"] = "rentabilidad_proyecto";
|
|
@@ -67,21 +65,6 @@ var RecentContextPill = function RecentContextPill(_ref) {
|
|
|
67
65
|
})]
|
|
68
66
|
});
|
|
69
67
|
};
|
|
70
|
-
var parseNumericId = function parseNumericId(value) {
|
|
71
|
-
if (value === null || value === undefined || value === '') return null;
|
|
72
|
-
var parsed = Number(value);
|
|
73
|
-
return Number.isFinite(parsed) ? parsed : null;
|
|
74
|
-
};
|
|
75
|
-
var getAllowedRecentContextTypes = function getAllowedRecentContextTypes(roleId) {
|
|
76
|
-
var normalizedRoleId = Number(roleId);
|
|
77
|
-
if (normalizedRoleId === CORUserRole.CLEVEL || normalizedRoleId === CORUserRole.DIRECTOR || normalizedRoleId === CORUserRole.PROJECT_MANAGER) {
|
|
78
|
-
return new Set(['client', 'project', 'task']);
|
|
79
|
-
}
|
|
80
|
-
if (isCollaboratorRole(roleId)) {
|
|
81
|
-
return new Set(['task']);
|
|
82
|
-
}
|
|
83
|
-
return new Set();
|
|
84
|
-
};
|
|
85
68
|
export var ChatAIHome = function ChatAIHome(_ref2) {
|
|
86
69
|
var handlers = _ref2.handlers,
|
|
87
70
|
onStartChat = _ref2.onStartChat,
|
|
@@ -104,52 +87,49 @@ export var ChatAIHome = function ChatAIHome(_ref2) {
|
|
|
104
87
|
setTask = _useGlobalContext.setTask,
|
|
105
88
|
setChipsProject = _useGlobalContext.setChipsProject;
|
|
106
89
|
var isMAIA = validateIsMaia(agent);
|
|
107
|
-
var floatingCustomCenter =
|
|
108
|
-
var lang = i18n.language
|
|
109
|
-
var summaryProjectAccess = typeof window !== 'undefined' && (
|
|
90
|
+
var floatingCustomCenter = resolveFloatingCustomCenter(floating, agent === null || agent === void 0 ? void 0 : agent.type);
|
|
91
|
+
var lang = resolveMaiaHomeLang(i18n.language);
|
|
92
|
+
var summaryProjectAccess = typeof window !== 'undefined' && resolveProjectSummaryFeatureAccess(window);
|
|
110
93
|
var faqsAccess = true;
|
|
111
94
|
var showProjectSummary = !!(isMAIA && summaryProjectAccess);
|
|
112
95
|
// El orchestrator (type === 'orchestrator') muestra FAQs/FUAs agregadas de sus subagentes,
|
|
113
96
|
// así que NO se trata como maiaker acá.
|
|
114
97
|
var isMaiaker = isMaiakerAgent(agent);
|
|
115
|
-
var isHeaderHome = isMAIA && section === 'header' && (agent === null || agent === void 0 ? void 0 : agent.type) === 'orchestrator';
|
|
116
|
-
// El orchestrator usa el home en 2 pasos (contextos recientes ↔ FAQs/FUAs) en header/project/client/task.
|
|
117
|
-
// En project/client/task, al limpiar el contexto (p. ej. al reseleccionar MAIA
|
|
118
|
-
// desde el listado de agentes) se muestra el selector de contextos recientes en lugar de un home vacío.
|
|
119
|
-
var isOrchestrator = isMAIA && (agent === null || agent === void 0 ? void 0 : agent.type) === 'orchestrator';
|
|
120
|
-
// Planner: home de FUAs del orchestrator (sin selector de contextos).
|
|
121
|
-
// Si el usuario navega a Maiaker u otro agente, section sigue siendo `planner` pero ya no es este home.
|
|
122
|
-
var isPlannerHome = section === 'planner' && isOrchestrator;
|
|
123
|
-
// Homes de sección (project/client/task): sin isologo, contenido top-left, columna 448px centrada.
|
|
124
|
-
var isSectionOrchestratorHome = isOrchestrator && !isHeaderHome && !isPlannerHome;
|
|
125
98
|
var hasHoursSubagent = orchestratorHasHoursSubagent(agent);
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
99
|
+
var hasPinnedContext = resolveHasPinnedContext({
|
|
100
|
+
taskId: task === null || task === void 0 ? void 0 : task.id,
|
|
101
|
+
chipsProjectId: chipsProject === null || chipsProject === void 0 ? void 0 : chipsProject.projectId,
|
|
102
|
+
clientId: client === null || client === void 0 ? void 0 : client.id,
|
|
103
|
+
projectId: project === null || project === void 0 ? void 0 : project.id
|
|
104
|
+
});
|
|
105
|
+
var _resolveOrchestratorH = resolveOrchestratorHomeLayout({
|
|
106
|
+
section: section,
|
|
107
|
+
agentType: agent === null || agent === void 0 ? void 0 : agent.type,
|
|
108
|
+
isMaia: isMAIA,
|
|
109
|
+
hasHoursSubagent: hasHoursSubagent,
|
|
110
|
+
roleId: user.role_id,
|
|
111
|
+
hasPinnedContext: hasPinnedContext
|
|
112
|
+
}),
|
|
113
|
+
isHeaderHome = _resolveOrchestratorH.isHeaderHome,
|
|
114
|
+
isOrchestrator = _resolveOrchestratorH.isOrchestrator,
|
|
115
|
+
isPlannerHome = _resolveOrchestratorH.isPlannerHome,
|
|
116
|
+
isRecentContextsStep = _resolveOrchestratorH.isRecentContextsStep,
|
|
117
|
+
isHeaderTaskContextHome = _resolveOrchestratorH.isHeaderTaskContextHome,
|
|
118
|
+
isHeaderHoursAgentHome = _resolveOrchestratorH.isHeaderHoursAgentHome,
|
|
119
|
+
isHeaderManagerHoursHome = _resolveOrchestratorH.isHeaderManagerHoursHome,
|
|
120
|
+
isContextHomeStep = _resolveOrchestratorH.isContextHomeStep,
|
|
121
|
+
isLeftAlignedOrchestratorHome = _resolveOrchestratorH.isLeftAlignedOrchestratorHome;
|
|
122
|
+
var headerTaskContextSubtitleKey = resolveHeaderTaskContextSubtitleKey({
|
|
123
|
+
isHeaderHoursAgentHome: isHeaderHoursAgentHome,
|
|
124
|
+
isHeaderManagerHoursHome: isHeaderManagerHoursHome,
|
|
125
|
+
isManager: isManagerRole(user.role_id)
|
|
126
|
+
});
|
|
148
127
|
var allowedRecentContextTypes = useMemo(function () {
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
128
|
+
return resolveAllowedRecentContextTypes({
|
|
129
|
+
isHeaderManagerHoursHome: isHeaderManagerHoursHome,
|
|
130
|
+
isHeaderTaskContextHome: isHeaderTaskContextHome,
|
|
131
|
+
roleId: user.role_id
|
|
132
|
+
});
|
|
153
133
|
}, [user.role_id, isHeaderManagerHoursHome, isHeaderTaskContextHome]);
|
|
154
134
|
|
|
155
135
|
// Contexto activo para derivar FAQs/acciones (paso 2). Preferimos el pill clickeado;
|
|
@@ -162,70 +142,65 @@ export var ChatAIHome = function ChatAIHome(_ref2) {
|
|
|
162
142
|
if (!hasPinnedContext) setSelectedContext(null);
|
|
163
143
|
}, [hasPinnedContext]);
|
|
164
144
|
var activeContext = useMemo(function () {
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
};
|
|
182
|
-
return null;
|
|
145
|
+
return resolveActiveContextFromGlobal({
|
|
146
|
+
isContextHomeStep: isContextHomeStep,
|
|
147
|
+
selectedContext: selectedContext,
|
|
148
|
+
task: task !== null && task !== void 0 && task.id ? {
|
|
149
|
+
id: task.id,
|
|
150
|
+
name: task.name
|
|
151
|
+
} : null,
|
|
152
|
+
chipsProject: chipsProject !== null && chipsProject !== void 0 && chipsProject.projectId ? {
|
|
153
|
+
projectId: chipsProject.projectId,
|
|
154
|
+
projectName: chipsProject.projectName
|
|
155
|
+
} : null,
|
|
156
|
+
client: client !== null && client !== void 0 && client.id ? {
|
|
157
|
+
id: client.id,
|
|
158
|
+
name: client.name
|
|
159
|
+
} : null
|
|
160
|
+
});
|
|
183
161
|
}, [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]);
|
|
184
|
-
|
|
185
|
-
// entity_type del contexto pineado (project/client/task), tomado del contexto global.
|
|
186
|
-
// Aplica tanto al abrir MAIA desde una sección específica como al cambiar de conversación.
|
|
187
162
|
var pinnedEntityType = useMemo(function () {
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
163
|
+
return resolvePinnedEntityType({
|
|
164
|
+
taskId: task === null || task === void 0 ? void 0 : task.id,
|
|
165
|
+
chipsProjectId: chipsProject === null || chipsProject === void 0 ? void 0 : chipsProject.projectId,
|
|
166
|
+
clientId: client === null || client === void 0 ? void 0 : client.id,
|
|
167
|
+
projectId: project === null || project === void 0 ? void 0 : project.id
|
|
168
|
+
});
|
|
192
169
|
}, [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]);
|
|
193
|
-
|
|
194
|
-
// FAQs solo con contexto cliente pineado (header paso 2 o sección client).
|
|
195
|
-
// Proyecto, tarea y planner muestran solo FUAs.
|
|
196
170
|
var faqsContextEntityType = useMemo(function () {
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
171
|
+
return resolveFaqsContextEntityType({
|
|
172
|
+
isPlannerHome: isPlannerHome,
|
|
173
|
+
isRecentContextsStep: isRecentContextsStep,
|
|
174
|
+
isHeaderHome: isHeaderHome,
|
|
175
|
+
isContextHomeStep: isContextHomeStep,
|
|
176
|
+
activeContextType: activeContext === null || activeContext === void 0 ? void 0 : activeContext.type,
|
|
177
|
+
pinnedEntityType: pinnedEntityType
|
|
178
|
+
});
|
|
203
179
|
}, [isPlannerHome, isRecentContextsStep, isHeaderHome, isContextHomeStep, activeContext === null || activeContext === void 0 ? void 0 : activeContext.type, pinnedEntityType]);
|
|
204
180
|
var isClientContextForFaqs = faqsContextEntityType === 'client';
|
|
205
181
|
// `section` que se consulta para las FUAs: en no-header sigue el tipo de contexto pineado.
|
|
206
182
|
// En planner se fuerza la section API `planner`.
|
|
207
|
-
var fuasSection =
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
}();
|
|
183
|
+
var fuasSection = resolveFuasSection({
|
|
184
|
+
isPlannerHome: isPlannerHome,
|
|
185
|
+
isHeaderHome: isHeaderHome,
|
|
186
|
+
pinnedEntityType: pinnedEntityType,
|
|
187
|
+
section: section
|
|
188
|
+
});
|
|
189
|
+
var realListsAgentId = resolveRealListsAgentId({
|
|
190
|
+
isMaia: isMAIA,
|
|
191
|
+
isMaiaker: isMaiaker,
|
|
192
|
+
isRecentContextsStep: isRecentContextsStep,
|
|
193
|
+
isHeaderHome: isHeaderHome,
|
|
194
|
+
isContextHomeStep: isContextHomeStep,
|
|
195
|
+
agentId: agent === null || agent === void 0 ? void 0 : agent.id
|
|
196
|
+
});
|
|
197
|
+
var realListsEntityType = resolveRealListsEntityType({
|
|
198
|
+
isPlannerHome: isPlannerHome,
|
|
199
|
+
isHeaderHome: isHeaderHome,
|
|
200
|
+
isContextHomeStep: isContextHomeStep,
|
|
201
|
+
activeContextType: activeContext === null || activeContext === void 0 ? void 0 : activeContext.type,
|
|
202
|
+
pinnedEntityType: pinnedEntityType
|
|
203
|
+
});
|
|
229
204
|
var _useFrequentlyUsedAct = useFrequentlyUsedActions(realListsAgentId, fuasSection, realListsEntityType),
|
|
230
205
|
agentFuas = _useFrequentlyUsedAct.actions,
|
|
231
206
|
fuasLoading = _useFrequentlyUsedAct.loading;
|
|
@@ -254,16 +229,10 @@ export var ChatAIHome = function ChatAIHome(_ref2) {
|
|
|
254
229
|
fetchedRecentContexts = _useRecentContexts.contexts,
|
|
255
230
|
recentContextsLoading = _useRecentContexts.loading;
|
|
256
231
|
var recentContexts = useMemo(function () {
|
|
257
|
-
return fetchedRecentContexts
|
|
258
|
-
return allowedRecentContextTypes.has(context.type);
|
|
259
|
-
});
|
|
232
|
+
return filterRecentContextsByTypes(fetchedRecentContexts, allowedRecentContextTypes);
|
|
260
233
|
}, [fetchedRecentContexts, allowedRecentContextTypes]);
|
|
261
234
|
var recentContextSkeletonKeys = useMemo(function () {
|
|
262
|
-
return
|
|
263
|
-
length: recentContextsLimit
|
|
264
|
-
}, function (_, index) {
|
|
265
|
-
return "recent-context-skeleton-".concat(index + 1);
|
|
266
|
-
});
|
|
235
|
+
return buildRecentContextSkeletonKeys(recentContextsLimit);
|
|
267
236
|
}, [recentContextsLimit]);
|
|
268
237
|
var faqsListAgentId = isClientContextForFaqs ? realListsAgentId : undefined;
|
|
269
238
|
var faqsListEntityType = isClientContextForFaqs ? realListsEntityType : undefined;
|
|
@@ -273,12 +242,11 @@ export var ChatAIHome = function ChatAIHome(_ref2) {
|
|
|
273
242
|
handleGetFrequentlyAskedQuestions = _useFrequentlyAskedQu.handleGetFrequentlyAskedQuestions;
|
|
274
243
|
var faqsFetchRef = useRef(null);
|
|
275
244
|
useEffect(function () {
|
|
276
|
-
var _faqsFetchRef$current;
|
|
277
245
|
// FAQs solo para contexto cliente; el resto muestra solo FUAs.
|
|
278
246
|
if (!realListsAgentId || !isClientContextForFaqs) return;
|
|
279
|
-
var currentKey =
|
|
280
|
-
var lastKey = faqsFetchRef.current ?
|
|
281
|
-
if (currentKey
|
|
247
|
+
var currentKey = buildFaqsFetchKey(realListsAgentId, lang, realListsEntityType);
|
|
248
|
+
var lastKey = faqsFetchRef.current ? buildFaqsFetchKey(faqsFetchRef.current.agentId, faqsFetchRef.current.lang, faqsFetchRef.current.entityType) : null;
|
|
249
|
+
if (shouldRefetchFaqs(currentKey, lastKey)) {
|
|
282
250
|
faqsFetchRef.current = {
|
|
283
251
|
agentId: realListsAgentId,
|
|
284
252
|
lang: lang,
|
|
@@ -295,16 +263,44 @@ export var ChatAIHome = function ChatAIHome(_ref2) {
|
|
|
295
263
|
var fuas = agentFuas;
|
|
296
264
|
var faqsAreLoading = faqsLoading;
|
|
297
265
|
var fuasAreLoading = fuasLoading;
|
|
298
|
-
var
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
266
|
+
var shouldShowFaqs = resolveShouldShowFaqs({
|
|
267
|
+
isMaia: isMAIA,
|
|
268
|
+
isClientContextForFaqs: isClientContextForFaqs,
|
|
269
|
+
isRecentContextsStep: isRecentContextsStep,
|
|
270
|
+
isContextHomeStep: isContextHomeStep,
|
|
271
|
+
isHeaderHome: isHeaderHome,
|
|
272
|
+
faqsAccess: faqsAccess,
|
|
273
|
+
isMaiaker: isMaiaker,
|
|
274
|
+
faqsCount: faqs.length,
|
|
275
|
+
faqsLoading: faqsAreLoading
|
|
276
|
+
});
|
|
277
|
+
var shouldShowFuas = resolveShouldShowFuas({
|
|
278
|
+
isRecentContextsStep: isRecentContextsStep,
|
|
279
|
+
isMaiaker: isMaiaker,
|
|
280
|
+
isContextHomeStep: isContextHomeStep,
|
|
281
|
+
isHeaderHome: isHeaderHome,
|
|
282
|
+
fuasCount: fuas.length,
|
|
283
|
+
fuasLoading: fuasAreLoading
|
|
284
|
+
});
|
|
285
|
+
var _resolvePlannerFuasVi = resolvePlannerFuasVisibility({
|
|
286
|
+
isHeaderHoursAgentHome: isHeaderHoursAgentHome,
|
|
287
|
+
headerHoursFuasLoading: headerHoursFuasLoading,
|
|
288
|
+
headerHoursFuasCount: headerHoursFuas.length
|
|
289
|
+
}),
|
|
290
|
+
shouldShowPlannerFuas = _resolvePlannerFuasVi.shouldShowPlannerFuas;
|
|
304
291
|
var showProjectSummaryCard = showProjectSummary && (agent === null || agent === void 0 ? void 0 : agent.entity) === 'project';
|
|
305
|
-
var
|
|
306
|
-
var
|
|
307
|
-
|
|
292
|
+
var showRecentContextsBlock = resolveShowRecentContextsBlock(isRecentContextsStep, recentContextsLoading, recentContexts.length);
|
|
293
|
+
var _resolveHomeDynamicPa = resolveHomeDynamicPanelVisibility({
|
|
294
|
+
showRecentContextsBlock: showRecentContextsBlock,
|
|
295
|
+
shouldShowFaqs: shouldShowFaqs,
|
|
296
|
+
shouldShowFuas: shouldShowFuas,
|
|
297
|
+
shouldShowPlannerFuas: shouldShowPlannerFuas,
|
|
298
|
+
isMaiaker: isMaiaker,
|
|
299
|
+
showProjectSummaryCard: showProjectSummaryCard
|
|
300
|
+
}),
|
|
301
|
+
showFAQs = _resolveHomeDynamicPa.showFAQs,
|
|
302
|
+
showDynamicSection = _resolveHomeDynamicPa.showDynamicSection,
|
|
303
|
+
homeScrollableLayout = _resolveHomeDynamicPa.homeScrollableLayout;
|
|
308
304
|
|
|
309
305
|
// Lógica del scroll con gradientes
|
|
310
306
|
var contentContainerRef = useRef(null);
|
|
@@ -325,97 +321,43 @@ export var ChatAIHome = function ChatAIHome(_ref2) {
|
|
|
325
321
|
// Saludo fijo por tipo de contexto (i18n). Custom agents siguen usando agent.introduction.
|
|
326
322
|
// Planner usa título + bajada propios (`plannerHome`), no este greeting.
|
|
327
323
|
var greeting = useMemo(function () {
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
324
|
+
var _agent$introduction;
|
|
325
|
+
return resolveHomeGreeting({
|
|
326
|
+
isMaiaker: isMaiaker,
|
|
327
|
+
isPlannerHome: isPlannerHome,
|
|
328
|
+
isRecentContextsStep: isRecentContextsStep,
|
|
329
|
+
isMaia: isMAIA,
|
|
330
|
+
pinnedEntityType: pinnedEntityType,
|
|
331
|
+
contextGreeting: function () {
|
|
332
|
+
var greetingKey = resolveHomeContextGreetingKey(isMAIA, pinnedEntityType);
|
|
333
|
+
return greetingKey ? t(greetingKey) : undefined;
|
|
334
|
+
}(),
|
|
335
|
+
agentIntroduction: (_agent$introduction = agent === null || agent === void 0 ? void 0 : agent.introduction) !== null && _agent$introduction !== void 0 ? _agent$introduction : undefined
|
|
336
|
+
});
|
|
338
337
|
}, [agent === null || agent === void 0 ? void 0 : agent.id, agent === null || agent === void 0 ? void 0 : agent.introduction, isMaiaker, isPlannerHome, isMAIA, pinnedEntityType, isRecentContextsStep, t]);
|
|
339
338
|
var handleSelectRecentContext = useCallback(function (context, order) {
|
|
340
|
-
var _context$parents, _context$parents2, _context$parents3, _context$parents4;
|
|
341
339
|
event(EVENTS.aiChatContextSelected, {
|
|
342
340
|
order: order,
|
|
343
341
|
type: context.type
|
|
344
342
|
});
|
|
345
|
-
var
|
|
346
|
-
var clientId = parseNumericId((_context$parents = context.parents) === null || _context$parents === void 0 ? void 0 : _context$parents.client_id);
|
|
347
|
-
var projectId = parseNumericId((_context$parents2 = context.parents) === null || _context$parents2 === void 0 ? void 0 : _context$parents2.project_id);
|
|
348
|
-
var clientName = ((_context$parents3 = context.parents) === null || _context$parents3 === void 0 ? void 0 : _context$parents3.client_name) || '';
|
|
349
|
-
var projectName = ((_context$parents4 = context.parents) === null || _context$parents4 === void 0 ? void 0 : _context$parents4.project_name) || '';
|
|
343
|
+
var pinOutcome = resolveRecentContextPinOutcome(context, t('homeMenu.recentContexts.types.project'));
|
|
350
344
|
setSelectedContext(context);
|
|
351
345
|
setTask(null);
|
|
352
346
|
setProject(null);
|
|
353
347
|
setClient === null || setClient === void 0 || setClient(null);
|
|
354
348
|
setChipsProject(null);
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
} else if (context.type === 'project') {
|
|
362
|
-
if (contextId == null) return;
|
|
363
|
-
setProject(_objectSpread(_objectSpread({
|
|
364
|
-
id: contextId,
|
|
365
|
-
name: context.name
|
|
366
|
-
}, clientId != null ? {
|
|
367
|
-
clientId: clientId
|
|
368
|
-
} : {}), clientId != null ? {
|
|
369
|
-
client: {
|
|
370
|
-
id: clientId,
|
|
371
|
-
name: clientName
|
|
372
|
-
}
|
|
373
|
-
} : {}));
|
|
374
|
-
setChipsProject({
|
|
375
|
-
projectId: String(contextId),
|
|
376
|
-
projectName: context.name,
|
|
377
|
-
clientName: clientName
|
|
378
|
-
});
|
|
379
|
-
} else if (context.type === 'task') {
|
|
380
|
-
setTask(_objectSpread(_objectSpread({
|
|
381
|
-
id: context.id,
|
|
382
|
-
name: context.name
|
|
383
|
-
}, projectId != null ? {
|
|
384
|
-
projectId: projectId
|
|
385
|
-
} : {}), clientId != null ? {
|
|
386
|
-
clientId: clientId
|
|
387
|
-
} : {}));
|
|
388
|
-
if (clientId != null) {
|
|
389
|
-
setClient === null || setClient === void 0 || setClient({
|
|
390
|
-
id: clientId,
|
|
391
|
-
name: clientName
|
|
392
|
-
});
|
|
393
|
-
}
|
|
394
|
-
if (projectId != null) {
|
|
395
|
-
setProject(_objectSpread(_objectSpread({
|
|
396
|
-
id: projectId,
|
|
397
|
-
name: projectName || "".concat(t('homeMenu.recentContexts.types.project'), " ").concat(projectId)
|
|
398
|
-
}, clientId != null ? {
|
|
399
|
-
clientId: clientId
|
|
400
|
-
} : {}), clientId != null ? {
|
|
401
|
-
client: {
|
|
402
|
-
id: clientId,
|
|
403
|
-
name: clientName
|
|
404
|
-
}
|
|
405
|
-
} : {}));
|
|
406
|
-
setChipsProject({
|
|
407
|
-
projectId: String(projectId),
|
|
408
|
-
projectName: projectName || "".concat(t('homeMenu.recentContexts.types.project'), " ").concat(projectId),
|
|
409
|
-
clientName: clientName
|
|
410
|
-
});
|
|
411
|
-
}
|
|
412
|
-
}
|
|
349
|
+
var contextPatch = buildPinGlobalContextPatch(pinOutcome);
|
|
350
|
+
if (!contextPatch) return;
|
|
351
|
+
setClient === null || setClient === void 0 || setClient(contextPatch.client);
|
|
352
|
+
setProject(contextPatch.project);
|
|
353
|
+
setTask(contextPatch.task);
|
|
354
|
+
setChipsProject(contextPatch.chipsProject);
|
|
413
355
|
requestAnimationFrame(function () {
|
|
414
356
|
document.dispatchEvent(new CustomEvent('maia-input-refocus'));
|
|
415
357
|
});
|
|
416
358
|
}, [event, setChipsProject, setClient, setProject, setTask, t]);
|
|
417
359
|
var handleHomeStartChat = useCallback(function (message, attachments, faqId, agentSuggestionId, mentions, fuaId) {
|
|
418
|
-
if (isHeaderManagerHoursHome
|
|
360
|
+
if (shouldClearPinnedContextOnHomeStart(isHeaderManagerHoursHome, fuaId)) {
|
|
419
361
|
flushSync(function () {
|
|
420
362
|
setSelectedContext(null);
|
|
421
363
|
setTask(null);
|
|
@@ -427,15 +369,24 @@ export var ChatAIHome = function ChatAIHome(_ref2) {
|
|
|
427
369
|
onStartChat(message, attachments, faqId, agentSuggestionId, mentions, fuaId);
|
|
428
370
|
}, [isHeaderManagerHoursHome, onStartChat, setChipsProject, setClient, setProject, setTask]);
|
|
429
371
|
var renderRecentContexts = function renderRecentContexts() {
|
|
430
|
-
if (!isRecentContextsStep) return null;
|
|
372
|
+
if (!shouldRenderRecentContextsPanel(isRecentContextsStep)) return null;
|
|
431
373
|
return /*#__PURE__*/_jsxs(SCCAIHomeRecentContexts, {
|
|
432
374
|
$fixedContentWidth: isHeaderTaskContextHome ? MAIA_HEADER_COLLABORATOR_HOME_CONTENT_WIDTH_PX : undefined,
|
|
433
|
-
children: [isHeaderHoursAgentHome ? /*#__PURE__*/
|
|
434
|
-
children:
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
375
|
+
children: [isHeaderHoursAgentHome ? /*#__PURE__*/_jsx(SCCAIHomeRecentContextsSectionHeader, {
|
|
376
|
+
children: function () {
|
|
377
|
+
var _resolveRecentContext = resolveRecentContextsSectionCopyKeys({
|
|
378
|
+
isHeaderManagerHoursHome: isHeaderManagerHoursHome
|
|
379
|
+
}),
|
|
380
|
+
titleKey = _resolveRecentContext.titleKey,
|
|
381
|
+
subtitleKey = _resolveRecentContext.subtitleKey;
|
|
382
|
+
return /*#__PURE__*/_jsxs(_Fragment, {
|
|
383
|
+
children: [/*#__PURE__*/_jsx(SCCAIHomeRecentContextsSectionTitle, {
|
|
384
|
+
children: t(titleKey)
|
|
385
|
+
}), /*#__PURE__*/_jsx(SCCAIHomeRecentContextsSectionSubtitle, {
|
|
386
|
+
children: t(subtitleKey)
|
|
387
|
+
})]
|
|
388
|
+
});
|
|
389
|
+
}()
|
|
439
390
|
}) : null, /*#__PURE__*/_jsxs(SCCAIHomeRecentContextsList, {
|
|
440
391
|
$flushPills: isHeaderTaskContextHome,
|
|
441
392
|
children: [recentContextsLoading && recentContextSkeletonKeys.map(function (key) {
|
|
@@ -455,15 +406,13 @@ export var ChatAIHome = function ChatAIHome(_ref2) {
|
|
|
455
406
|
};
|
|
456
407
|
var checkScroll = useCallback(function () {
|
|
457
408
|
var container = contentContainerRef.current;
|
|
458
|
-
if (!container || !homeScrollableLayout) return;
|
|
409
|
+
if (!container || !shouldCheckHomeScroll(container, homeScrollableLayout)) return;
|
|
459
410
|
var scrollTop = container.scrollTop,
|
|
460
411
|
scrollHeight = container.scrollHeight,
|
|
461
412
|
clientHeight = container.clientHeight;
|
|
462
|
-
var
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
setShowTopGradient(isScrollable && !isAtTop);
|
|
466
|
-
setShowBottomGradient(isScrollable && !isAtBottom);
|
|
413
|
+
var gradients = resolveHomeScrollGradients(scrollTop, scrollHeight, clientHeight);
|
|
414
|
+
setShowTopGradient(gradients.showTop);
|
|
415
|
+
setShowBottomGradient(gradients.showBottom);
|
|
467
416
|
}, [homeScrollableLayout]);
|
|
468
417
|
var handleScroll = useCallback(function () {
|
|
469
418
|
checkScroll();
|
|
@@ -476,7 +425,7 @@ export var ChatAIHome = function ChatAIHome(_ref2) {
|
|
|
476
425
|
}, 150);
|
|
477
426
|
}, [checkScroll]);
|
|
478
427
|
useEffect(function () {
|
|
479
|
-
if (
|
|
428
|
+
if (shouldResetHomeScrollGradients(homeScrollableLayout)) {
|
|
480
429
|
setShowTopGradient(false);
|
|
481
430
|
setShowBottomGradient(false);
|
|
482
431
|
return undefined;
|
|
@@ -495,7 +444,7 @@ export var ChatAIHome = function ChatAIHome(_ref2) {
|
|
|
495
444
|
var resizeObserver = new ResizeObserver(scheduleCheckScroll);
|
|
496
445
|
resizeObserver.observe(container);
|
|
497
446
|
var scrollContent = container.firstElementChild;
|
|
498
|
-
if (scrollContent
|
|
447
|
+
if (shouldObserveHomeScrollContent(scrollContent)) {
|
|
499
448
|
resizeObserver.observe(scrollContent);
|
|
500
449
|
}
|
|
501
450
|
var timeoutId = window.setTimeout(scheduleCheckScroll, 100);
|
|
@@ -532,8 +481,15 @@ export var ChatAIHome = function ChatAIHome(_ref2) {
|
|
|
532
481
|
})]
|
|
533
482
|
});
|
|
534
483
|
}
|
|
535
|
-
var
|
|
536
|
-
|
|
484
|
+
var _resolveMaiaHeaderSta = resolveMaiaHeaderStackLayout({
|
|
485
|
+
isPlannerHome: isPlannerHome,
|
|
486
|
+
isHeaderTaskContextHome: isHeaderTaskContextHome,
|
|
487
|
+
isLeftAlignedOrchestratorHome: isLeftAlignedOrchestratorHome,
|
|
488
|
+
isRecentContextsStep: isRecentContextsStep,
|
|
489
|
+
hasGreeting: Boolean(greeting)
|
|
490
|
+
}),
|
|
491
|
+
contentAlignStart = _resolveMaiaHeaderSta.contentAlignStart,
|
|
492
|
+
maiaHeaderStackNeedsGap = _resolveMaiaHeaderSta.maiaHeaderStackNeedsGap;
|
|
537
493
|
return /*#__PURE__*/_jsxs(SCCAIHomeMaiaHeaderStack, {
|
|
538
494
|
$noGap: !maiaHeaderStackNeedsGap,
|
|
539
495
|
$align: contentAlignStart ? 'start' : 'center',
|
|
@@ -574,7 +530,7 @@ export var ChatAIHome = function ChatAIHome(_ref2) {
|
|
|
574
530
|
})
|
|
575
531
|
}), /*#__PURE__*/_jsx(SCCAIHomeSubtitle, {
|
|
576
532
|
$align: isLeftAlignedOrchestratorHome ? 'start' : undefined,
|
|
577
|
-
children: t(isCollaboratorRole(user.role_id)
|
|
533
|
+
children: t(resolveOrchestratorRecentContextsSubtitleKey(isCollaboratorRole(user.role_id)))
|
|
578
534
|
})]
|
|
579
535
|
}), !isPlannerHome && !isRecentContextsStep && greeting && /*#__PURE__*/_jsx(SCCAIHomeGreeting, {
|
|
580
536
|
$align: isLeftAlignedOrchestratorHome ? 'start' : undefined,
|
|
@@ -583,9 +539,17 @@ export var ChatAIHome = function ChatAIHome(_ref2) {
|
|
|
583
539
|
})]
|
|
584
540
|
});
|
|
585
541
|
};
|
|
586
|
-
var
|
|
587
|
-
|
|
588
|
-
|
|
542
|
+
var _resolveMaiaHeaderSta2 = resolveMaiaHeaderStackLayout({
|
|
543
|
+
isPlannerHome: isPlannerHome,
|
|
544
|
+
isHeaderTaskContextHome: isHeaderTaskContextHome,
|
|
545
|
+
isLeftAlignedOrchestratorHome: isLeftAlignedOrchestratorHome,
|
|
546
|
+
isRecentContextsStep: isRecentContextsStep,
|
|
547
|
+
hasGreeting: Boolean(greeting)
|
|
548
|
+
}),
|
|
549
|
+
contentAlignStart = _resolveMaiaHeaderSta2.contentAlignStart,
|
|
550
|
+
fixedHomeContentWidthCollaborator = _resolveMaiaHeaderSta2.fixedHomeContentWidthCollaborator;
|
|
551
|
+
var fixedHomeContentWidth = fixedHomeContentWidthCollaborator ? MAIA_HEADER_COLLABORATOR_HOME_CONTENT_WIDTH_PX : undefined;
|
|
552
|
+
var showAgentIntroduction = resolveShowAgentIntroduction(section, isMAIA, Boolean(agent === null || agent === void 0 ? void 0 : agent.introduction));
|
|
589
553
|
return /*#__PURE__*/_jsxs(SCCAIHomeContainer, {
|
|
590
554
|
showFAQs: showFAQs,
|
|
591
555
|
$alignStart: isLeftAlignedOrchestratorHome,
|
|
@@ -612,7 +576,7 @@ export var ChatAIHome = function ChatAIHome(_ref2) {
|
|
|
612
576
|
$maxWidth: isMAIA ? '100%' : '380px',
|
|
613
577
|
$isAgentView: !isMAIA,
|
|
614
578
|
$align: contentAlignStart ? 'start' : 'center',
|
|
615
|
-
children: [renderHeaderContent(), showAgentIntroduction ? /*#__PURE__*/_jsx(SCCAIHomeIntroduction, {
|
|
579
|
+
children: [renderHeaderContent(), showAgentIntroduction && agent ? /*#__PURE__*/_jsx(SCCAIHomeIntroduction, {
|
|
616
580
|
expanded: expanded,
|
|
617
581
|
children: agent.introduction
|
|
618
582
|
}) : null]
|
|
@@ -665,4 +629,4 @@ export var ChatAIHome = function ChatAIHome(_ref2) {
|
|
|
665
629
|
})]
|
|
666
630
|
});
|
|
667
631
|
};
|
|
668
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1c2VFZmZlY3QiLCJ1c2VMYXlvdXRFZmZlY3QiLCJ1c2VSZWYiLCJ1c2VTdGF0ZSIsInVzZUNhbGxiYWNrIiwidXNlTWVtbyIsImZsdXNoU3luYyIsIlRvb2x0aXAiLCJMaXN0Q2hlY2tsaXN0IiwidXNlVCIsIkVWRU5UUyIsInVzZUV2ZW50IiwiU0NDQUlIb21lQ29udGFpbmVyIiwiU0NDQUlIb21lQ29udGVudCIsIlNDQ0FJSG9tZUNvbnRlbnRJbm5lciIsIlNDQ0FJSG9tZUdyYWRpZW50VG9wIiwiU0NDQUlIb21lR3JhZGllbnRCb3R0b20iLCJTQ0NBSUhvbWVIZWFkZXIiLCJTQ0NBSUhvbWVHcmVldGluZyIsIlNDQ0FJSG9tZUFnZW50SW5mb0NvbnRhaW5lciIsIlNDQ0FJSG9tZUFnZW50SW5mbyIsIlNDQ0FJSG9tZVByb2plY3RTdW1tYXJ5IiwiU0NDQUlIb21lUHJvamVjdFN1bW1hcnlDb250ZW50IiwiU0NDQUlIb21lUHJvamVjdFN1bW1hcnlUaXRsZSIsIlNDQ0FJSG9tZVByb2plY3RTdW1tYXJ5RGVzY3JpcHRpb24iLCJTQ0NBSFdyYXBwZXJTdW1tYXJ5UHJvamVjdCIsIlNDQ0FJSG9tZUludHJvZHVjdGlvbiIsIlNDQ0FJSG9tZUNyZWF0ZWRCeUNvbnRhaW5lciIsIlNDQ0FJSG9tZUNyZWF0ZWRCeVRleHQiLCJTQ0NBSUhvbWVDcmVhdGVkQnlUZXh0TmFtZSIsIlNDQ0FJSG9tZUljb25Db250YWluZXIiLCJTQ0NBSUhvbWVMb2dvV3JhcHBlciIsIlNDQ0FJSG9tZU1haWFIZWFkZXJTdGFjayIsIlNDQ0FJSG9tZVRpdGxlIiwiU0NDQUlIb21lVGl0bGVCbG9jayIsIlNDQ0FJSG9tZVN1YnRpdGxlIiwiU0NDQUlIb21lRHluYW1pY1NlY3Rpb24iLCJTQ0NBSUhvbWVSZWNlbnRDb250ZXh0cyIsIlNDQ0FJSG9tZVJlY2VudENvbnRleHRzTGlzdCIsIlNDQ0FJSG9tZVJlY2VudENvbnRleHRzU2VjdGlvbkhlYWRlciIsIlNDQ0FJSG9tZVJlY2VudENvbnRleHRzU2VjdGlvblRpdGxlIiwiU0NDQUlIb21lUmVjZW50Q29udGV4dHNTZWN0aW9uU3VidGl0bGUiLCJTQ0NBSUhvbWVSZWNlbnRDb250ZXh0UGlsbCIsIlNDQ0FJSG9tZVJlY2VudENvbnRleHRQaWxsSWNvbiIsIlNDQ0FJSG9tZVJlY2VudENvbnRleHRQaWxsVGV4dCIsIlNDQ0FJSG9tZVJlY2VudENvbnRleHRQaWxsU2tlbGV0b24iLCJNQUlBX0hFQURFUl9DT0xMQUJPUkFUT1JfSE9NRV9DT05URU5UX1dJRFRIX1BYIiwidXNlR2xvYmFsQ29udGV4dCIsInVzZVVzZXIiLCJDT1JVc2VyUm9sZSIsImlzQ29sbGFib3JhdG9yUm9sZSIsImlzTWFuYWdlclJvbGUiLCJ1c2VSZXNpemVMaXN0ZW5lciIsImdldENvbnRleHRNZW50aW9uSWNvbiIsIm9yY2hlc3RyYXRvckhhc0hvdXJzU3ViYWdlbnQiLCJ2YWxpZGF0ZUlzTWFpYSIsImlzTWFpYWtlckFnZW50IiwiRnJlcXVlbnRseUFza2VkUXVlc3Rpb25zIiwiRnJlcXVlbnRseVVzZWRBY3Rpb25zIiwidXNlRnJlcXVlbnRseVVzZWRBY3Rpb25zIiwic29ydE1hbmFnZXJIb3Vyc0hvbWVGdWFzIiwicmVzb2x2ZVJlY2VudENvbnRleHRzSG9tZUxpbWl0IiwidXNlRnJlcXVlbnRseUFza2VkUXVlc3Rpb25zIiwidXNlUmVjZW50Q29udGV4dHMiLCJNQUlBSXNvbG9nbyIsIlRlbXBsYXRlR3JhZGllbnRJY29uIiwiQ2hhdEFJSG9tZU1haWFrZXIiLCJqc3giLCJfanN4IiwianN4cyIsIl9qc3hzIiwiRnJhZ21lbnQiLCJfRnJhZ21lbnQiLCJGcmVxdWVudFF1ZXN0aW9ucyIsIlJFQ0VOVF9DT05URVhUX0lDT05fQ09MT1IiLCJSRUNFTlRfQ09OVEVYVF9JQ09OX1NJWkVfUFgiLCJSZWNlbnRDb250ZXh0UGlsbCIsIl9yZWYiLCJjb250ZXh0IiwibGFiZWwiLCJvbkNsaWNrIiwiX3JlZiRmdWxsV2lkdGgiLCJmdWxsV2lkdGgiLCJ0ZXh0UmVmIiwiX3VzZVJlc2l6ZUxpc3RlbmVyIiwic2hvd1Rvb2x0aXAiLCJ0eXBlIiwiJGZ1bGxXaWR0aCIsImNoaWxkcmVuIiwiY29sb3IiLCJ3aWR0aCIsImhlaWdodCIsInVuZGVmaW5lZCIsInJlZiIsInRpdGxlIiwicGFyc2VOdW1lcmljSWQiLCJ2YWx1ZSIsInBhcnNlZCIsIk51bWJlciIsImlzRmluaXRlIiwiZ2V0QWxsb3dlZFJlY2VudENvbnRleHRUeXBlcyIsInJvbGVJZCIsIm5vcm1hbGl6ZWRSb2xlSWQiLCJDTEVWRUwiLCJESVJFQ1RPUiIsIlBST0pFQ1RfTUFOQUdFUiIsIlNldCIsIkNoYXRBSUhvbWUiLCJfcmVmMiIsImhhbmRsZXJzIiwib25TdGFydENoYXQiLCJleHBhbmRlZCIsImZsb2F0aW5nIiwiX3VzZVQiLCJ0IiwiaTE4biIsImV2ZW50IiwidXNlciIsIl91c2VHbG9iYWxDb250ZXh0IiwiYWdlbnQiLCJzZWN0aW9uIiwiY2xpZW50IiwicHJvamVjdCIsInRhc2siLCJjaGlwc1Byb2plY3QiLCJzZXRDbGllbnQiLCJzZXRQcm9qZWN0Iiwic2V0VGFzayIsInNldENoaXBzUHJvamVjdCIsImlzTUFJQSIsImZsb2F0aW5nQ3VzdG9tQ2VudGVyIiwibGFuZyIsImxhbmd1YWdlIiwic3VtbWFyeVByb2plY3RBY2Nlc3MiLCJ3aW5kb3ciLCJTdHJpbmciLCJNQUlBX1BST0pFQ1RfU1VNTUFSWV9GRUFUVVJFX0FDQ0VTUyIsInRvTG93ZXJDYXNlIiwibWFpYVByb2plY3RTdW1tYXJ5QWNjZXNzIiwiZmFxc0FjY2VzcyIsInNob3dQcm9qZWN0U3VtbWFyeSIsImlzTWFpYWtlciIsImlzSGVhZGVySG9tZSIsImlzT3JjaGVzdHJhdG9yIiwiaXNQbGFubmVySG9tZSIsImlzU2VjdGlvbk9yY2hlc3RyYXRvckhvbWUiLCJoYXNIb3Vyc1N1YmFnZW50IiwiaGFzUGlubmVkQ29udGV4dCIsImlkIiwicHJvamVjdElkIiwiaXNSZWNlbnRDb250ZXh0c1N0ZXAiLCJpc0hlYWRlclRhc2tDb250ZXh0SG9tZSIsInJvbGVfaWQiLCJpc0hlYWRlckhvdXJzQWdlbnRIb21lIiwiaXNIZWFkZXJNYW5hZ2VySG91cnNIb21lIiwiaGVhZGVyVGFza0NvbnRleHRTdWJ0aXRsZUtleSIsImlzQ29udGV4dEhvbWVTdGVwIiwiaXNMZWZ0QWxpZ25lZE9yY2hlc3RyYXRvckhvbWUiLCJhbGxvd2VkUmVjZW50Q29udGV4dFR5cGVzIiwiX3VzZVN0YXRlIiwiX3VzZVN0YXRlMiIsIl9zbGljZWRUb0FycmF5Iiwic2VsZWN0ZWRDb250ZXh0Iiwic2V0U2VsZWN0ZWRDb250ZXh0IiwiYWN0aXZlQ29udGV4dCIsIm5hbWUiLCJwcm9qZWN0TmFtZSIsInBpbm5lZEVudGl0eVR5cGUiLCJmYXFzQ29udGV4dEVudGl0eVR5cGUiLCJfYWN0aXZlQ29udGV4dCR0eXBlIiwiaXNDbGllbnRDb250ZXh0Rm9yRmFxcyIsImZ1YXNTZWN0aW9uIiwicmVhbExpc3RzQWdlbnRJZCIsInJlYWxMaXN0c0VudGl0eVR5cGUiLCJfYWN0aXZlQ29udGV4dCR0eXBlMiIsIl91c2VGcmVxdWVudGx5VXNlZEFjdCIsImFnZW50RnVhcyIsImFjdGlvbnMiLCJmdWFzTG9hZGluZyIsImxvYWRpbmciLCJfdXNlRnJlcXVlbnRseVVzZWRBY3QyIiwiY29sbGFib3JhdG9yUGxhbm5lckZ1YXMiLCJjb2xsYWJvcmF0b3JQbGFubmVyRnVhc0xvYWRpbmciLCJfdXNlRnJlcXVlbnRseVVzZWRBY3QzIiwibWFuYWdlckhvbWVGdWFzIiwibWFuYWdlckhvbWVGdWFzTG9hZGluZyIsImhlYWRlckhvdXJzRnVhcyIsImhlYWRlckhvdXJzRnVhc0xvYWRpbmciLCJyZWNlbnRDb250ZXh0c0xpbWl0IiwiZnVhc0NvdW50IiwibGVuZ3RoIiwiX3VzZVJlY2VudENvbnRleHRzIiwiZW5hYmxlZCIsImxpbWl0IiwiZmV0Y2hlZFJlY2VudENvbnRleHRzIiwiY29udGV4dHMiLCJyZWNlbnRDb250ZXh0c0xvYWRpbmciLCJyZWNlbnRDb250ZXh0cyIsImZpbHRlciIsImhhcyIsInJlY2VudENvbnRleHRTa2VsZXRvbktleXMiLCJBcnJheSIsImZyb20iLCJfIiwiaW5kZXgiLCJjb25jYXQiLCJmYXFzTGlzdEFnZW50SWQiLCJmYXFzTGlzdEVudGl0eVR5cGUiLCJfdXNlRnJlcXVlbnRseUFza2VkUXUiLCJhZ2VudEZhcXMiLCJmYXFzIiwiZmFxc0xvYWRpbmciLCJoYW5kbGVHZXRGcmVxdWVudGx5QXNrZWRRdWVzdGlvbnMiLCJmYXFzRmV0Y2hSZWYiLCJfZmFxc0ZldGNoUmVmJGN1cnJlbnQiLCJjdXJyZW50S2V5IiwibGFzdEtleSIsImN1cnJlbnQiLCJhZ2VudElkIiwiZW50aXR5VHlwZSIsImZ1YXMiLCJmYXFzQXJlTG9hZGluZyIsImZ1YXNBcmVMb2FkaW5nIiwic2hvd1JlY2VudENvbnRleHRzQmxvY2siLCJzaG91bGRTaG93RmFxcyIsInNob3VsZFNob3dGdWFzIiwic2hvdWxkU2hvd1BsYW5uZXJGdWFzTG9hZGluZyIsInNob3VsZFNob3dQbGFubmVyRnVhc0NvbnRlbnQiLCJzaG91bGRTaG93UGxhbm5lckZ1YXMiLCJzaG93UHJvamVjdFN1bW1hcnlDYXJkIiwiZW50aXR5Iiwic2hvd0ZBUXMiLCJob21lU2Nyb2xsYWJsZUxheW91dCIsInNob3dEeW5hbWljU2VjdGlvbiIsImNvbnRlbnRDb250YWluZXJSZWYiLCJfdXNlU3RhdGUzIiwiX3VzZVN0YXRlNCIsInNob3dUb3BHcmFkaWVudCIsInNldFNob3dUb3BHcmFkaWVudCIsIl91c2VTdGF0ZTUiLCJfdXNlU3RhdGU2Iiwic2hvd0JvdHRvbUdyYWRpZW50Iiwic2V0U2hvd0JvdHRvbUdyYWRpZW50IiwiX3VzZVN0YXRlNyIsIl91c2VTdGF0ZTgiLCJpc1Njcm9sbGluZyIsInNldElzU2Nyb2xsaW5nIiwic2Nyb2xsVGltZW91dFJlZiIsImdyZWV0aW5nIiwiaW50cm8iLCJpbnRyb2R1Y3Rpb24iLCJpc0FycmF5IiwiTWF0aCIsImZsb29yIiwicmFuZG9tIiwiaGFuZGxlU2VsZWN0UmVjZW50Q29udGV4dCIsIm9yZGVyIiwiX2NvbnRleHQkcGFyZW50cyIsIl9jb250ZXh0JHBhcmVudHMyIiwiX2NvbnRleHQkcGFyZW50czMiLCJfY29udGV4dCRwYXJlbnRzNCIsImFpQ2hhdENvbnRleHRTZWxlY3RlZCIsImNvbnRleHRJZCIsImNsaWVudElkIiwicGFyZW50cyIsImNsaWVudF9pZCIsInByb2plY3RfaWQiLCJjbGllbnROYW1lIiwiY2xpZW50X25hbWUiLCJwcm9qZWN0X25hbWUiLCJfb2JqZWN0U3ByZWFkIiwicmVxdWVzdEFuaW1hdGlvbkZyYW1lIiwiZG9jdW1lbnQiLCJkaXNwYXRjaEV2ZW50IiwiQ3VzdG9tRXZlbnQiLCJoYW5kbGVIb21lU3RhcnRDaGF0IiwibWVzc2FnZSIsImF0dGFjaG1lbnRzIiwiZmFxSWQiLCJhZ2VudFN1Z2dlc3Rpb25JZCIsIm1lbnRpb25zIiwiZnVhSWQiLCJyZW5kZXJSZWNlbnRDb250ZXh0cyIsIiRmaXhlZENvbnRlbnRXaWR0aCIsIiRmbHVzaFBpbGxzIiwibWFwIiwia2V5IiwidHJpbSIsImNoZWNrU2Nyb2xsIiwiY29udGFpbmVyIiwic2Nyb2xsVG9wIiwic2Nyb2xsSGVpZ2h0IiwiY2xpZW50SGVpZ2h0IiwiaXNTY3JvbGxhYmxlIiwiaXNBdFRvcCIsImlzQXRCb3R0b20iLCJoYW5kbGVTY3JvbGwiLCJjbGVhclRpbWVvdXQiLCJzZXRUaW1lb3V0Iiwic2NoZWR1bGVDaGVja1Njcm9sbCIsImFkZEV2ZW50TGlzdGVuZXIiLCJyZXNpemVPYnNlcnZlciIsIlJlc2l6ZU9ic2VydmVyIiwib2JzZXJ2ZSIsInNjcm9sbENvbnRlbnQiLCJmaXJzdEVsZW1lbnRDaGlsZCIsIkVsZW1lbnQiLCJ0aW1lb3V0SWQiLCJsYXRlVGltZW91dElkIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsImRpc2Nvbm5lY3QiLCJyZW5kZXJIZWFkZXJDb250ZW50IiwiX2FnZW50JGNyZWF0ZWRfYnkiLCJfYWdlbnQkY3JlYXRlZF9ieTIiLCJlbW9qaSIsImNyZWF0ZWRfYnkiLCJpc19kZWxldGVkIiwiY29udGVudEFsaWduU3RhcnQiLCJtYWlhSGVhZGVyU3RhY2tOZWVkc0dhcCIsIiRub0dhcCIsIiRhbGlnbiIsIiRzaXplIiwiZmlyc3ROYW1lIiwiJGNvbGxhYm9yYXRvckhvbWUiLCJmaXhlZEhvbWVDb250ZW50V2lkdGgiLCJzaG93QWdlbnRJbnRyb2R1Y3Rpb24iLCIkYWxpZ25TdGFydCIsIiRzaG93IiwiJGlzQWdlbnRWaWV3IiwiJGZsb2F0aW5nQ3VzdG9tQ2VudGVyIiwiJGNlbnRlclZlcnRpY2FsbHkiLCIkaGVhZGVyQ29sbGFib3JhdG9ySG9tZSIsIiRzZWN0aW9uT3JjaGVzdHJhdG9ySG9tZSIsIiRnYXAiLCIkbWF4V2lkdGgiLCJwcm9qZWN0U3VtbWFyeSIsIiRncm93IiwidmFyaWFudCJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL21vbGVjdWxlcy9DaGF0QUlIb21lL0NoYXRBSUhvbWUudHN4Il0sInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIHJlYWN0L2Z1bmN0aW9uLWNvbXBvbmVudC1kZWZpbml0aW9uICovXG4vKiBlc2xpbnQtZGlzYWJsZSBqc3gtYTExeS9jbGljay1ldmVudHMtaGF2ZS1rZXktZXZlbnRzICovXG4vKiBlc2xpbnQtZGlzYWJsZSBqc3gtYTExeS9uby1zdGF0aWMtZWxlbWVudC1pbnRlcmFjdGlvbnMgKi9cbmltcG9ydCB7IHVzZUVmZmVjdCwgdXNlTGF5b3V0RWZmZWN0LCB1c2VSZWYsIHVzZVN0YXRlLCB1c2VDYWxsYmFjaywgdXNlTWVtbyB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgZmx1c2hTeW5jIH0gZnJvbSAncmVhY3QtZG9tJ1xuXG5pbXBvcnQgeyBUb29sdGlwIH0gZnJvbSAnQHByb2plY3Rjb3IvdG9vbHRpcHYyL2xpYi9jb21wb25lbnRzL1Rvb2x0aXAnXG5pbXBvcnQgeyBMaXN0Q2hlY2tsaXN0IH0gZnJvbSAnQHByb2plY3Rjb3IvaWNvbnMvbGliL2NvbXBvbmVudHMvTGlzdENoZWNrbGlzdCdcbmltcG9ydCB7IHVzZVQgfSBmcm9tICcuLi8uLi8uLi9ob29rcy91c2VUJ1xuaW1wb3J0IHsgRVZFTlRTLCB1c2VFdmVudCB9IGZyb20gJy4uLy4uLy4uL2hvb2tzL3VzZUV2ZW50J1xuXG5pbXBvcnQgeyBvcHRpb25zIH0gZnJvbSAnLi4vQ2hhdEFJTW9kYWwvY29uc3RhbnRzJ1xuXG5pbXBvcnQge1xuICBTQ0NBSUhvbWVDb250YWluZXIsXG4gIFNDQ0FJSG9tZUNvbnRlbnQsXG4gIFNDQ0FJSG9tZUNvbnRlbnRJbm5lcixcbiAgU0NDQUlIb21lR3JhZGllbnRUb3AsXG4gIFNDQ0FJSG9tZUdyYWRpZW50Qm90dG9tLFxuICBTQ0NBSUhvbWVIZWFkZXIsXG4gIFNDQ0FJSG9tZUdyZWV0aW5nLFxuICBTQ0NBSUhvbWVBZ2VudEluZm9Db250YWluZXIsXG4gIFNDQ0FJSG9tZUFnZW50SW5mbyxcbiAgU0NDQUlIb21lUHJvamVjdFN1bW1hcnksXG4gIFNDQ0FJSG9tZVByb2plY3RTdW1tYXJ5Q29udGVudCxcbiAgU0NDQUlIb21lUHJvamVjdFN1bW1hcnlUaXRsZSxcbiAgU0NDQUlIb21lUHJvamVjdFN1bW1hcnlEZXNjcmlwdGlvbixcbiAgU0NDQUhXcmFwcGVyU3VtbWFyeVByb2plY3QsXG4gIFNDQ0FJSG9tZUludHJvZHVjdGlvbixcbiAgU0NDQUlIb21lQ3JlYXRlZEJ5Q29udGFpbmVyLFxuICBTQ0NBSUhvbWVDcmVhdGVkQnlUZXh0LFxuICBTQ0NBSUhvbWVDcmVhdGVkQnlUZXh0TmFtZSxcbiAgU0NDQUlIb21lSWNvbkNvbnRhaW5lcixcbiAgU0NDQUlIb21lTG9nb1dyYXBwZXIsXG4gIFNDQ0FJSG9tZU1haWFIZWFkZXJTdGFjayxcbiAgU0NDQUlIb21lVGl0bGUsXG4gIFNDQ0FJSG9tZVRpdGxlQmxvY2ssXG4gIFNDQ0FJSG9tZVN1YnRpdGxlLFxuICBTQ0NBSUhvbWVEeW5hbWljU2VjdGlvbixcbiAgU0NDQUlIb21lUmVjZW50Q29udGV4dHMsXG4gIFNDQ0FJSG9tZVJlY2VudENvbnRleHRzTGlzdCxcbiAgU0NDQUlIb21lUmVjZW50Q29udGV4dHNTZWN0aW9uSGVhZGVyLFxuICBTQ0NBSUhvbWVSZWNlbnRDb250ZXh0c1NlY3Rpb25UaXRsZSxcbiAgU0NDQUlIb21lUmVjZW50Q29udGV4dHNTZWN0aW9uU3VidGl0bGUsXG4gIFNDQ0FJSG9tZVJlY2VudENvbnRleHRQaWxsLFxuICBTQ0NBSUhvbWVSZWNlbnRDb250ZXh0UGlsbEljb24sXG4gIFNDQ0FJSG9tZVJlY2VudENvbnRleHRQaWxsVGV4dCxcbiAgU0NDQUlIb21lUmVjZW50Q29udGV4dFBpbGxTa2VsZXRvbixcbiAgTUFJQV9IRUFERVJfQ09MTEFCT1JBVE9SX0hPTUVfQ09OVEVOVF9XSURUSF9QWCxcbn0gZnJvbSAnLi9zdHlsZXMnXG5pbXBvcnQgeyB1c2VHbG9iYWxDb250ZXh0LCB0eXBlIFNlY3Rpb24gfSBmcm9tICcuLi8uLi8uLi9jb250ZXh0L2dsb2JhbC1jb250ZXh0J1xuaW1wb3J0IHsgdXNlVXNlciwgQ09SVXNlclJvbGUsIGlzQ29sbGFib3JhdG9yUm9sZSwgaXNNYW5hZ2VyUm9sZSB9IGZyb20gJy4uLy4uLy4uL2NvbnRleHQvY29yLXVzZXInXG5pbXBvcnQgeyB1c2VSZXNpemVMaXN0ZW5lciB9IGZyb20gJy4uLy4uLy4uL2hvb2tzL3VzZVJlc2l6ZSdcbmltcG9ydCB7IGdldENvbnRleHRNZW50aW9uSWNvbiB9IGZyb20gJy4uLy4uLy4uL3V0aWxzL2NvbnRleHRNZW50aW9uSWNvbnMnXG5pbXBvcnQgeyBvcmNoZXN0cmF0b3JIYXNIb3Vyc1N1YmFnZW50IH0gZnJvbSAnLi4vLi4vLi4vdXRpbHMvb3JjaGVzdHJhdG9yU3ViYWdlbnRzJ1xuaW1wb3J0IHsgdmFsaWRhdGVJc01haWEgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy91dGlscy92YWxpZGF0ZUlzTWFpYSdcbmltcG9ydCB7IGlzTWFpYWtlckFnZW50IH0gZnJvbSAnLi4vLi4vLi4vdXRpbHMvYWdlbnREaXNwbGF5TmFtZSdcbmltcG9ydCB7IEFnZW50IH0gZnJvbSAnLi4vLi4vLi4vdHlwZXMvYWdlbnQnXG5pbXBvcnQgeyBBdHRhY2htZW50RmlsZSB9IGZyb20gJy4uL0NoYXRGb290ZXIvQ2hhdEZvb3RlcidcbmltcG9ydCB7IEZyZXF1ZW50bHlBc2tlZFF1ZXN0aW9ucyB9IGZyb20gJy4uLy4uL2F0b21zL0ZyZXF1ZW50bHlBc2tlZFF1ZXN0aW9ucydcbmltcG9ydCB7IEZyZXF1ZW50bHlVc2VkQWN0aW9ucyB9IGZyb20gJy4uLy4uL2F0b21zL0ZyZXF1ZW50bHlVc2VkQWN0aW9ucydcbmltcG9ydCB7IHVzZUZyZXF1ZW50bHlVc2VkQWN0aW9ucyB9IGZyb20gJy4uLy4uLy4uL2hvb2tzL3VzZUZyZXF1ZW50bHlVc2VkQWN0aW9ucydcbmltcG9ydCB7IHNvcnRNYW5hZ2VySG91cnNIb21lRnVhcyB9IGZyb20gJy4uLy4uLy4uL3V0aWxzL3NvcnRNYW5hZ2VySG91cnNIb21lRnVhcydcbmltcG9ydCB7IHJlc29sdmVSZWNlbnRDb250ZXh0c0hvbWVMaW1pdCB9IGZyb20gJy4uLy4uLy4uL3V0aWxzL3JlY2VudENvbnRleHRzSG9tZUxpbWl0J1xuaW1wb3J0IHsgdXNlRnJlcXVlbnRseUFza2VkUXVlc3Rpb25zIH0gZnJvbSAnLi4vLi4vLi4vaG9va3MvdXNlRnJlcXVlbnRseUFza2VkUXVlc3Rpb25zJ1xuaW1wb3J0IHsgdXNlUmVjZW50Q29udGV4dHMgfSBmcm9tICcuLi8uLi8uLi9ob29rcy91c2VSZWNlbnRDb250ZXh0cydcbmltcG9ydCB0eXBlIHsgUmVjZW50Q29udGV4dEl0ZW0sIFJlY2VudENvbnRleHRUeXBlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvbWFpYS9SZWNlbnRDb250ZXh0cydcbmltcG9ydCB7IE1BSUFJc29sb2dvIH0gZnJvbSAnLi4vLi4vYXRvbXMvaWNvbnMvTUFJQUlzb2xvZ28nXG5pbXBvcnQgeyBUZW1wbGF0ZUdyYWRpZW50SWNvbiB9IGZyb20gJy4uLy4uL2F0b21zL2ljb25zL1RlbXBsYXRlR3JhZGllbnRJY29uJ1xuaW1wb3J0IHsgQ2hhdEFJSG9tZU1haWFrZXIgfSBmcm9tICcuL0NoYXRBSUhvbWVNYWlha2VyJ1xuXG50eXBlIENoYXRBSUhvbWVQcm9wcyA9IHtcbiAgb25TdGFydENoYXQ6IChcbiAgICBtZXNzYWdlOiBzdHJpbmcsXG4gICAgYXR0YWNobWVudHM/OiBBdHRhY2htZW50RmlsZVtdIHwgbnVsbCxcbiAgICBmYXFJZD86IHN0cmluZyxcbiAgICBhZ2VudFN1Z2dlc3Rpb25JZD86IHN0cmluZyxcbiAgICBtZW50aW9ucz86IG51bGwsXG4gICAgZnVhSWQ/OiBzdHJpbmdcbiAgKSA9PiB2b2lkXG4gIGhhbmRsZXJzOiBSZWNvcmQ8b3B0aW9ucywgKCkgPT4gdm9pZD5cbiAgZXhwYW5kZWQ/OiBib29sZWFuXG4gIGZsb2F0aW5nPzogYm9vbGVhblxufVxuXG5leHBvcnQgZW51bSBGcmVxdWVudFF1ZXN0aW9ucyB7XG4gIHJlbnRhYmlsaWRhZF9wcm95ZWN0byA9ICdyZW50YWJpbGlkYWRfcHJveWVjdG8nLFxuICBhdmFuY2VfcHJveWVjdG8gPSAnYXZhbmNlX3Byb3llY3RvJyxcbn1cblxuY29uc3QgUkVDRU5UX0NPTlRFWFRfSUNPTl9DT0xPUiA9ICcjNEQ0RDREJ1xuY29uc3QgUkVDRU5UX0NPTlRFWFRfSUNPTl9TSVpFX1BYID0gMTVcblxuY29uc3QgUmVjZW50Q29udGV4dFBpbGwgPSAoe1xuICBjb250ZXh0LFxuICBsYWJlbCxcbiAgb25DbGljayxcbiAgZnVsbFdpZHRoID0gZmFsc2UsXG59OiB7XG4gIGNvbnRleHQ6IFJlY2VudENvbnRleHRJdGVtXG4gIGxhYmVsOiBzdHJpbmdcbiAgb25DbGljazogKCkgPT4gdm9pZFxuICBmdWxsV2lkdGg/OiBib29sZWFuXG59KSA9PiB7XG4gIGNvbnN0IHRleHRSZWYgPSB1c2VSZWY8SFRNTFNwYW5FbGVtZW50PihudWxsKVxuICBjb25zdCB7IHNob3dUb29sdGlwIH0gPSB1c2VSZXNpemVMaXN0ZW5lcih0ZXh0UmVmLCBbbGFiZWxdKVxuXG4gIHJldHVybiAoXG4gICAgPFNDQ0FJSG9tZVJlY2VudENvbnRleHRQaWxsIHR5cGU9XCJidXR0b25cIiBvbkNsaWNrPXtvbkNsaWNrfSAkZnVsbFdpZHRoPXtmdWxsV2lkdGh9PlxuICAgICAgPFNDQ0FJSG9tZVJlY2VudENvbnRleHRQaWxsSWNvbj5cbiAgICAgICAge2NvbnRleHQudHlwZSA9PT0gJ3Rhc2snID8gKFxuICAgICAgICAgIDxMaXN0Q2hlY2tsaXN0IGNvbG9yPXtSRUNFTlRfQ09OVEVYVF9JQ09OX0NPTE9SfSB3aWR0aD1cIjE1cHhcIiBoZWlnaHQ9XCIxNXB4XCIgLz5cbiAgICAgICAgKSA6IChcbiAgICAgICAgICBnZXRDb250ZXh0TWVudGlvbkljb24oY29udGV4dC50eXBlLCBSRUNFTlRfQ09OVEVYVF9JQ09OX0NPTE9SLCB1bmRlZmluZWQsIFJFQ0VOVF9DT05URVhUX0lDT05fU0laRV9QWClcbiAgICAgICAgKX1cbiAgICAgIDwvU0NDQUlIb21lUmVjZW50Q29udGV4dFBpbGxJY29uPlxuICAgICAgPFNDQ0FJSG9tZVJlY2VudENvbnRleHRQaWxsVGV4dCByZWY9e3RleHRSZWZ9PlxuICAgICAgICB7c2hvd1Rvb2x0aXAgPyAoXG4gICAgICAgICAgPFRvb2x0aXAgdGl0bGU9e2xhYmVsfT5cbiAgICAgICAgICAgIDxzcGFuPntsYWJlbH08L3NwYW4+XG4gICAgICAgICAgPC9Ub29sdGlwPlxuICAgICAgICApIDogKFxuICAgICAgICAgIGxhYmVsXG4gICAgICAgICl9XG4gICAgICA8L1NDQ0FJSG9tZVJlY2VudENvbnRleHRQaWxsVGV4dD5cbiAgICA8L1NDQ0FJSG9tZVJlY2VudENvbnRleHRQaWxsPlxuICApXG59XG5cbmNvbnN0IHBhcnNlTnVtZXJpY0lkID0gKHZhbHVlPzogc3RyaW5nIHwgbnVtYmVyIHwgbnVsbCk6IG51bWJlciB8IG51bGwgPT4ge1xuICBpZiAodmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IHVuZGVmaW5lZCB8fCB2YWx1ZSA9PT0gJycpIHJldHVybiBudWxsXG4gIGNvbnN0IHBhcnNlZCA9IE51bWJlcih2YWx1ZSlcbiAgcmV0dXJuIE51bWJlci5pc0Zpbml0ZShwYXJzZWQpID8gcGFyc2VkIDogbnVsbFxufVxuXG5jb25zdCBnZXRBbGxvd2VkUmVjZW50Q29udGV4dFR5cGVzID0gKHJvbGVJZD86IENPUlVzZXJSb2xlIHwgbnVtYmVyIHwgc3RyaW5nKTogU2V0PFJlY2VudENvbnRleHRUeXBlPiA9PiB7XG4gIGNvbnN0IG5vcm1hbGl6ZWRSb2xlSWQgPSBOdW1iZXIocm9sZUlkKVxuICBpZiAoXG4gICAgbm9ybWFsaXplZFJvbGVJZCA9PT0gQ09SVXNlclJvbGUuQ0xFVkVMIHx8XG4gICAgbm9ybWFsaXplZFJvbGVJZCA9PT0gQ09SVXNlclJvbGUuRElSRUNUT1IgfHxcbiAgICBub3JtYWxpemVkUm9sZUlkID09PSBDT1JVc2VyUm9sZS5QUk9KRUNUX01BTkFHRVJcbiAgKSB7XG4gICAgcmV0dXJuIG5ldyBTZXQoWydjbGllbnQnLCAncHJvamVjdCcsICd0YXNrJ10pXG4gIH1cbiAgaWYgKGlzQ29sbGFib3JhdG9yUm9sZShyb2xlSWQpKSB7XG4gICAgcmV0dXJuIG5ldyBTZXQoWyd0YXNrJ10pXG4gIH1cbiAgcmV0dXJuIG5ldyBTZXQoKVxufVxuXG5leHBvcnQgY29uc3QgQ2hhdEFJSG9tZSA9ICh7IGhhbmRsZXJzLCBvblN0YXJ0Q2hhdCwgZXhwYW5kZWQsIGZsb2F0aW5nIH06IENoYXRBSUhvbWVQcm9wcykgPT4ge1xuICBjb25zdCB7IHQsIGkxOG4gfSA9IHVzZVQoKVxuICBjb25zdCBldmVudCA9IHVzZUV2ZW50KClcbiAgY29uc3QgdXNlciA9IHVzZVVzZXIoKVxuICBjb25zdCB7IGFnZW50LCBzZWN0aW9uLCBjbGllbnQsIHByb2plY3QsIHRhc2ssIGNoaXBzUHJvamVjdCwgc2V0Q2xpZW50LCBzZXRQcm9qZWN0LCBzZXRUYXNrLCBzZXRDaGlwc1Byb2plY3QgfSA9XG4gICAgdXNlR2xvYmFsQ29udGV4dCgpXG5cbiAgY29uc3QgaXNNQUlBID0gdmFsaWRhdGVJc01haWEoYWdlbnQgYXMgQWdlbnQpXG4gIGNvbnN0IGZsb2F0aW5nQ3VzdG9tQ2VudGVyID0gISEoZmxvYXRpbmcgJiYgYWdlbnQ/LnR5cGUgPT09ICdjdXN0b20nKVxuICBjb25zdCBsYW5nID0gaTE4bi5sYW5ndWFnZSA9PT0gJ2JyJyA/ICdwdCcgOiBpMThuLmxhbmd1YWdlXG5cbiAgY29uc3Qgc3VtbWFyeVByb2plY3RBY2Nlc3MgPVxuICAgIHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmXG4gICAgKFN0cmluZyh3aW5kb3cuTUFJQV9QUk9KRUNUX1NVTU1BUllfRkVBVFVSRV9BQ0NFU1MpLnRvTG93ZXJDYXNlKCkgPT09ICd0cnVlJyB8fFxuICAgICAgU3RyaW5nKHdpbmRvdy5tYWlhUHJvamVjdFN1bW1hcnlBY2Nlc3MpLnRvTG93ZXJDYXNlKCkgPT09ICd0cnVlJylcbiAgY29uc3QgZmFxc0FjY2VzcyA9IHRydWVcbiAgY29uc3Qgc2hvd1Byb2plY3RTdW1tYXJ5ID0gISEoaXNNQUlBICYmIHN1bW1hcnlQcm9qZWN0QWNjZXNzKVxuICAvLyBFbCBvcmNoZXN0cmF0b3IgKHR5cGUgPT09ICdvcmNoZXN0cmF0b3InKSBtdWVzdHJhIEZBUXMvRlVBcyBhZ3JlZ2FkYXMgZGUgc3VzIHN1YmFnZW50ZXMsXG4gIC8vIGFzw60gcXVlIE5PIHNlIHRyYXRhIGNvbW8gbWFpYWtlciBhY8OhLlxuICBjb25zdCBpc01haWFrZXIgPSBpc01haWFrZXJBZ2VudChhZ2VudClcbiAgY29uc3QgaXNIZWFkZXJIb21lID0gaXNNQUlBICYmIHNlY3Rpb24gPT09ICdoZWFkZXInICYmIGFnZW50Py50eXBlID09PSAnb3JjaGVzdHJhdG9yJ1xuICAvLyBFbCBvcmNoZXN0cmF0b3IgdXNhIGVsIGhvbWUgZW4gMiBwYXNvcyAoY29udGV4dG9zIHJlY2llbnRlcyDihpQgRkFRcy9GVUFzKSBlbiBoZWFkZXIvcHJvamVjdC9jbGllbnQvdGFzay5cbiAgLy8gRW4gcHJvamVjdC9jbGllbnQvdGFzaywgYWwgbGltcGlhciBlbCBjb250ZXh0byAocC4gZWouIGFsIHJlc2VsZWNjaW9uYXIgTUFJQVxuICAvLyBkZXNkZSBlbCBsaXN0YWRvIGRlIGFnZW50ZXMpIHNlIG11ZXN0cmEgZWwgc2VsZWN0b3IgZGUgY29udGV4dG9zIHJlY2llbnRlcyBlbiBsdWdhciBkZSB1biBob21lIHZhY8Otby5cbiAgY29uc3QgaXNPcmNoZXN0cmF0b3IgPSBpc01BSUEgJiYgYWdlbnQ/LnR5cGUgPT09ICdvcmNoZXN0cmF0b3InXG4gIC8vIFBsYW5uZXI6IGhvbWUgZGUgRlVBcyBkZWwgb3JjaGVzdHJhdG9yIChzaW4gc2VsZWN0b3IgZGUgY29udGV4dG9zKS5cbiAgLy8gU2kgZWwgdXN1YXJpbyBuYXZlZ2EgYSBNYWlha2VyIHUgb3RybyBhZ2VudGUsIHNlY3Rpb24gc2lndWUgc2llbmRvIGBwbGFubmVyYCBwZXJvIHlhIG5vIGVzIGVzdGUgaG9tZS5cbiAgY29uc3QgaXNQbGFubmVySG9tZSA9IHNlY3Rpb24gPT09ICdwbGFubmVyJyAmJiBpc09yY2hlc3RyYXRvclxuICAvLyBIb21lcyBkZSBzZWNjacOzbiAocHJvamVjdC9jbGllbnQvdGFzayk6IHNpbiBpc29sb2dvLCBjb250ZW5pZG8gdG9wLWxlZnQsIGNvbHVtbmEgNDQ4cHggY2VudHJhZGEuXG4gIGNvbnN0IGlzU2VjdGlvbk9yY2hlc3RyYXRvckhvbWUgPSBpc09yY2hlc3RyYXRvciAmJiAhaXNIZWFkZXJIb21lICYmICFpc1BsYW5uZXJIb21lXG4gIGNvbnN0IGhhc0hvdXJzU3ViYWdlbnQgPSBvcmNoZXN0cmF0b3JIYXNIb3Vyc1N1YmFnZW50KGFnZW50KVxuXG4gIC8vIEhvbWUgZGVsIG9yY2hlc3RyYXRvciBlbiAyIHBhc29zOlxuICAvLyAgLSBQYXNvIDEgKHNpbiBjb250ZXh0byBwaW5lYWRvKTogc2UgbXVlc3RyYW4gc29sbyBsb3MgY29udGV4dG9zIHJlY2llbnRlcy5cbiAgLy8gIC0gUGFzbyAyIChjb250ZXh0byBwaW5lYWRvKTogc2UgbXVlc3RyYW4gbGFzIEZBUXMvYWNjaW9uZXMgcXVlIHJlZmVyZW5jaWFuIGVzZSBjb250ZXh0by5cbiAgY29uc3QgaGFzUGlubmVkQ29udGV4dCA9ICEhKHRhc2s/LmlkIHx8IGNoaXBzUHJvamVjdD8ucHJvamVjdElkIHx8IGNsaWVudD8uaWQgfHwgcHJvamVjdD8uaWQpXG4gIGNvbnN0IGlzUmVjZW50Q29udGV4dHNTdGVwID0gaXNPcmNoZXN0cmF0b3IgJiYgIWhhc1Bpbm5lZENvbnRleHQgJiYgIWlzUGxhbm5lckhvbWVcbiAgLy8gSGVhZGVyIHBhc28gMSBjb21wYWN0byAoc2luIGlzb2xvZ28sIHBpbGxzIGZ1bGwtd2lkdGgpOiBjb2xhYm9yYWRvciB5IG1hbmFnZXJzIChDLUxldmVsL0RpcmVjdG9yL1BNKS5cbiAgY29uc3QgaXNIZWFkZXJUYXNrQ29udGV4dEhvbWUgPVxuICAgIHNlY3Rpb24gPT09ICdoZWFkZXInICYmIGlzUmVjZW50Q29udGV4dHNTdGVwICYmIChpc0NvbGxhYm9yYXRvclJvbGUodXNlci5yb2xlX2lkKSB8fCBpc01hbmFnZXJSb2xlKHVzZXIucm9sZV9pZCkpXG4gIC8vIEJsb3F1ZSBGVUFzIHBsYW5uZXIgKyBzZWNjacOzbiBkZSBjb250ZXh0b3MgcmVjaWVudGVzIGNvbiB0w610dWxvcyAoY29sYWJvcmFkb3IgbyBtYW5hZ2VyIGNvbiBob3VyKS5cbiAgY29uc3QgaXNIZWFkZXJIb3Vyc0FnZW50SG9tZSA9IGlzSGVhZGVyVGFza0NvbnRleHRIb21lICYmIGhhc0hvdXJzU3ViYWdlbnRcbiAgY29uc3QgaXNIZWFkZXJNYW5hZ2VySG91cnNIb21lID0gaXNIZWFkZXJIb3Vyc0FnZW50SG9tZSAmJiBpc01hbmFnZXJSb2xlKHVzZXIucm9sZV9pZClcbiAgY29uc3QgaGVhZGVyVGFza0NvbnRleHRTdWJ0aXRsZUtleSA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGlmIChpc0hlYWRlckhvdXJzQWdlbnRIb21lKSB7XG4gICAgICBpZiAoaXNIZWFkZXJNYW5hZ2VySG91cnNIb21lKSByZXR1cm4gJ2hvbWVNZW51LmNvbnRleHRIb21lLnN1YnRpdGxlTWFuYWdlcldpdGhIb3VycydcbiAgICAgIHJldHVybiAnaG9tZU1lbnUuY29udGV4dEhvbWUuc3VidGl0bGVDb2xsYWJvcmF0b3JXaXRoSG91cnMnXG4gICAgfVxuICAgIGlmIChpc01hbmFnZXJSb2xlKHVzZXIucm9sZV9pZCkpIHJldHVybiAnaG9tZU1lbnUuY29udGV4dEhvbWUuc3VidGl0bGUnXG4gICAgcmV0dXJuICdob21lTWVudS5jb250ZXh0SG9tZS5zdWJ0aXRsZUNvbGxhYm9yYXRvcidcbiAgfSwgW2lzSGVhZGVySG91cnNBZ2VudEhvbWUsIGlzSGVhZGVyTWFuYWdlckhvdXJzSG9tZSwgdXNlci5yb2xlX2lkXSlcbiAgY29uc3QgaXNDb250ZXh0SG9tZVN0ZXAgPSBpc0hlYWRlckhvbWUgJiYgaGFzUGlubmVkQ29udGV4dFxuICAvLyBIZWFkZXIgcGFzbyAyIChGQVFzL0ZVQXMgY29uIGNvbnRleHRvKSB5IGhvbWVzIGRlIHNlY2Npw7NuIGNvbXBhcnRlbiBsYXlvdXQ6IHNpbiBpc29sb2dvLCB0ZXh0byBhIGxhIGl6cXVpZXJkYS5cbiAgY29uc3QgaXNMZWZ0QWxpZ25lZE9yY2hlc3RyYXRvckhvbWUgPSBpc1NlY3Rpb25PcmNoZXN0cmF0b3JIb21lIHx8IGlzQ29udGV4dEhvbWVTdGVwXG5cbiAgY29uc3QgYWxsb3dlZFJlY2VudENvbnRleHRUeXBlcyA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGlmIChpc0hlYWRlck1hbmFnZXJIb3Vyc0hvbWUpIHJldHVybiBnZXRBbGxvd2VkUmVjZW50Q29udGV4dFR5cGVzKHVzZXIucm9sZV9pZClcbiAgICBpZiAoaXNIZWFkZXJUYXNrQ29udGV4dEhvbWUgJiYgaXNNYW5hZ2VyUm9sZSh1c2VyLnJvbGVfaWQpKSByZXR1cm4gZ2V0QWxsb3dlZFJlY2VudENvbnRleHRUeXBlcyh1c2VyLnJvbGVfaWQpXG4gICAgaWYgKGlzSGVhZGVyVGFza0NvbnRleHRIb21lKSByZXR1cm4gbmV3IFNldDxSZWNlbnRDb250ZXh0VHlwZT4oWyd0YXNrJ10pXG4gICAgcmV0dXJuIGdldEFsbG93ZWRSZWNlbnRDb250ZXh0VHlwZXModXNlci5yb2xlX2lkKVxuICB9LCBbdXNlci5yb2xlX2lkLCBpc0hlYWRlck1hbmFnZXJIb3Vyc0hvbWUsIGlzSGVhZGVyVGFza0NvbnRleHRIb21lXSlcblxuICAvLyBDb250ZXh0byBhY3Rpdm8gcGFyYSBkZXJpdmFyIEZBUXMvYWNjaW9uZXMgKHBhc28gMikuIFByZWZlcmltb3MgZWwgcGlsbCBjbGlja2VhZG87XG4gIC8vIHNpIG5vLCBsbyByZWNvbnN0cnVpbW9zIGRlc2RlIGVsIGNvbnRleHRvIGdsb2JhbC5cbiAgY29uc3QgW3NlbGVjdGVkQ29udGV4dCwgc2V0U2VsZWN0ZWRDb250ZXh0XSA9IHVzZVN0YXRlPFJlY2VudENvbnRleHRJdGVtIHwgbnVsbD4obnVsbClcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoIWhhc1Bpbm5lZENvbnRleHQpIHNldFNlbGVjdGVkQ29udGV4dChudWxsKVxuICB9LCBbaGFzUGlubmVkQ29udGV4dF0pXG5cbiAgY29uc3QgYWN0aXZlQ29udGV4dCA9IHVzZU1lbW88UmVjZW50Q29udGV4dEl0ZW0gfCBudWxsPigoKSA9PiB7XG4gICAgaWYgKHNlbGVjdGVkQ29udGV4dCkgcmV0dXJuIHNlbGVjdGVkQ29udGV4dFxuICAgIGlmICghaXNDb250ZXh0SG9tZVN0ZXApIHJldHVybiBudWxsXG4gICAgaWYgKHRhc2s/LmlkKSByZXR1cm4geyB0eXBlOiAndGFzaycsIGlkOiB0YXNrLmlkLCBuYW1lOiB0YXNrLm5hbWUgfVxuICAgIGlmIChjaGlwc1Byb2plY3Q/LnByb2plY3RJZCkgcmV0dXJuIHsgdHlwZTogJ3Byb2plY3QnLCBpZDogY2hpcHNQcm9qZWN0LnByb2plY3RJZCwgbmFtZTogY2hpcHNQcm9qZWN0LnByb2plY3ROYW1lIH1cbiAgICBpZiAoY2xpZW50Py5pZCkgcmV0dXJuIHsgdHlwZTogJ2NsaWVudCcsIGlkOiBjbGllbnQuaWQsIG5hbWU6IGNsaWVudC5uYW1lIH1cbiAgICByZXR1cm4gbnVsbFxuICB9LCBbXG4gICAgc2VsZWN0ZWRDb250ZXh0LFxuICAgIGlzQ29udGV4dEhvbWVTdGVwLFxuICAgIHRhc2s/LmlkLFxuICAgIHRhc2s/Lm5hbWUsXG4gICAgY2hpcHNQcm9qZWN0Py5wcm9qZWN0SWQsXG4gICAgY2hpcHNQcm9qZWN0Py5wcm9qZWN0TmFtZSxcbiAgICBjbGllbnQ/LmlkLFxuICAgIGNsaWVudD8ubmFtZSxcbiAgXSlcblxuICAvLyBlbnRpdHlfdHlwZSBkZWwgY29udGV4dG8gcGluZWFkbyAocHJvamVjdC9jbGllbnQvdGFzayksIHRvbWFkbyBkZWwgY29udGV4dG8gZ2xvYmFsLlxuICAvLyBBcGxpY2EgdGFudG8gYWwgYWJyaXIgTUFJQSBkZXNkZSB1bmEgc2VjY2nDs24gZXNwZWPDrWZpY2EgY29tbyBhbCBjYW1iaWFyIGRlIGNvbnZlcnNhY2nDs24uXG4gIGNvbnN0IHBpbm5lZEVudGl0eVR5cGUgPSB1c2VNZW1vPFJlY2VudENvbnRleHRUeXBlIHwgdW5kZWZpbmVkPigoKSA9PiB7XG4gICAgaWYgKHRhc2s/LmlkKSByZXR1cm4gJ3Rhc2snXG4gICAgaWYgKGNoaXBzUHJvamVjdD8ucHJvamVjdElkIHx8IHByb2plY3Q/LmlkKSByZXR1cm4gJ3Byb2plY3QnXG4gICAgaWYgKGNsaWVudD8uaWQpIHJldHVybiAnY2xpZW50J1xuICAgIHJldHVybiB1bmRlZmluZWRcbiAgfSwgW3Rhc2s/LmlkLCBjaGlwc1Byb2plY3Q/LnByb2plY3RJZCwgcHJvamVjdD8uaWQsIGNsaWVudD8uaWRdKVxuXG4gIC8vIEZBUXMgc29sbyBjb24gY29udGV4dG8gY2xpZW50ZSBwaW5lYWRvIChoZWFkZXIgcGFzbyAyIG8gc2VjY2nDs24gY2xpZW50KS5cbiAgLy8gUHJveWVjdG8sIHRhcmVhIHkgcGxhbm5lciBtdWVzdHJhbiBzb2xvIEZVQXMuXG4gIGNvbnN0IGZhcXNDb250ZXh0RW50aXR5VHlwZSA9IHVzZU1lbW88UmVjZW50Q29udGV4dFR5cGUgfCB1bmRlZmluZWQ+KCgpID0+IHtcbiAgICBpZiAoaXNQbGFubmVySG9tZSB8fCBpc1JlY2VudENvbnRleHRzU3RlcCkgcmV0dXJuIHVuZGVmaW5lZFxuICAgIGlmIChpc0hlYWRlckhvbWUpIHtcbiAgICAgIHJldHVybiBpc0NvbnRleHRIb21lU3RlcCA/IChhY3RpdmVDb250ZXh0Py50eXBlID8/IHBpbm5lZEVudGl0eVR5cGUpIDogdW5kZWZpbmVkXG4gICAgfVxuICAgIHJldHVybiBwaW5uZWRFbnRpdHlUeXBlXG4gIH0sIFtpc1BsYW5uZXJIb21lLCBpc1JlY2VudENvbnRleHRzU3RlcCwgaXNIZWFkZXJIb21lLCBpc0NvbnRleHRIb21lU3RlcCwgYWN0aXZlQ29udGV4dD8udHlwZSwgcGlubmVkRW50aXR5VHlwZV0pXG4gIGNvbnN0IGlzQ2xpZW50Q29udGV4dEZvckZhcXMgPSBmYXFzQ29udGV4dEVudGl0eVR5cGUgPT09ICdjbGllbnQnXG4gIC8vIGBzZWN0aW9uYCBxdWUgc2UgY29uc3VsdGEgcGFyYSBsYXMgRlVBczogZW4gbm8taGVhZGVyIHNpZ3VlIGVsIHRpcG8gZGUgY29udGV4dG8gcGluZWFkby5cbiAgLy8gRW4gcGxhbm5lciBzZSBmdWVyemEgbGEgc2VjdGlvbiBBUEkgYHBsYW5uZXJgLlxuICBjb25zdCBmdWFzU2VjdGlvbjogU2VjdGlvbiA9ICgoKSA9PiB7XG4gICAgaWYgKGlzUGxhbm5lckhvbWUpIHJldHVybiAncGxhbm5lcidcbiAgICBpZiAoIWlzSGVhZGVySG9tZSAmJiBwaW5uZWRFbnRpdHlUeXBlKSByZXR1cm4gcGlubmVkRW50aXR5VHlwZVxuICAgIHJldHVybiBzZWN0aW9uXG4gIH0pKClcblxuICAvLyBGQVFzL2FjY2lvbmVzOlxuICAvLyAgLSBoZWFkZXItaG9tZSAob3JjaGVzdHJhdG9yKSwgcGFzbyAyOiBmaWx0cmFkYXMgcG9yIGBlbnRpdHlfdHlwZWAgZGVsIGNvbnRleHRvIHNlbGVjY2lvbmFkby5cbiAgLy8gIC0gaG9tZXMgZGUgcHJveWVjdG8vY2xpZW50ZS90YXJlYSAoc2VjY2nDs24pOiBmaWx0cmFkYXMgcG9yIGVsIGBlbnRpdHlfdHlwZWAgZGVsIGNvbnRleHRvIHNldGVhZG8uXG4gIC8vICAtIHBsYW5uZXI6IEZVQXMgY29uIHNlY3Rpb249cGxhbm5lciwgc2luIGVudGl0eV90eXBlIG5pIEZBUXMuXG4gIGNvbnN0IHJlYWxMaXN0c0FnZW50SWQgPSAoKCkgPT4ge1xuICAgIGlmICghaXNNQUlBIHx8IGlzTWFpYWtlcikgcmV0dXJuIHVuZGVmaW5lZFxuICAgIC8vIFBhc28gMSAoY29udGV4dG9zIHJlY2llbnRlcywgc2luIGNvbnRleHRvKTogbm8gc2UgcGlkZW4gRkFRcy9GVUFzLlxuICAgIGlmIChpc1JlY2VudENvbnRleHRzU3RlcCkgcmV0dXJuIHVuZGVmaW5lZFxuICAgIGlmIChpc0hlYWRlckhvbWUpIHJldHVybiBpc0NvbnRleHRIb21lU3RlcCA/IGFnZW50Py5pZCA6IHVuZGVmaW5lZFxuICAgIHJldHVybiBhZ2VudD8uaWRcbiAgfSkoKVxuICBjb25zdCByZWFsTGlzdHNFbnRpdHlUeXBlID0gKCgpID0+IHtcbiAgICBpZiAoaXNQbGFubmVySG9tZSkgcmV0dXJuICdwbGFubmVyJ1xuICAgIGlmICghaXNIZWFkZXJIb21lKSByZXR1cm4gcGlubmVkRW50aXR5VHlwZVxuICAgIHJldHVybiBpc0NvbnRleHRIb21lU3RlcCA/IChhY3RpdmVDb250ZXh0Py50eXBlID8/IHBpbm5lZEVudGl0eVR5cGUpIDogdW5kZWZpbmVkXG4gIH0pKClcbiAgY29uc3QgeyBhY3Rpb25zOiBhZ2VudEZ1YXMsIGxvYWRpbmc6IGZ1YXNMb2FkaW5nIH0gPSB1c2VGcmVxdWVudGx5VXNlZEFjdGlvbnMoXG4gICAgcmVhbExpc3RzQWdlbnRJZCxcbiAgICBmdWFzU2VjdGlvbixcbiAgICByZWFsTGlzdHNFbnRpdHlUeXBlXG4gIClcbiAgY29uc3QgeyBhY3Rpb25zOiBjb2xsYWJvcmF0b3JQbGFubmVyRnVhcywgbG9hZGluZzogY29sbGFib3JhdG9yUGxhbm5lckZ1YXNMb2FkaW5nIH0gPSB1c2VGcmVxdWVudGx5VXNlZEFjdGlvbnMoXG4gICAgaXNIZWFkZXJIb3Vyc0FnZW50SG9tZSAmJiAhaXNIZWFkZXJNYW5hZ2VySG91cnNIb21lID8gYWdlbnQ/LmlkIDogdW5kZWZpbmVkLFxuICAgICdwbGFubmVyJ1xuICApXG4gIGNvbnN0IHsgYWN0aW9uczogbWFuYWdlckhvbWVGdWFzLCBsb2FkaW5nOiBtYW5hZ2VySG9tZUZ1YXNMb2FkaW5nIH0gPSB1c2VGcmVxdWVudGx5VXNlZEFjdGlvbnMoXG4gICAgaXNIZWFkZXJNYW5hZ2VySG91cnNIb21lID8gYWdlbnQ/LmlkIDogdW5kZWZpbmVkLFxuICAgICdob21lX3dpdGhfaG91cnMnXG4gIClcbiAgY29uc3QgaGVhZGVySG91cnNGdWFzID0gdXNlTWVtbygoKSA9PiB7XG4gICAgaWYgKGlzSGVhZGVyTWFuYWdlckhvdXJzSG9tZSkgcmV0dXJuIHNvcnRNYW5hZ2VySG91cnNIb21lRnVhcyhtYW5hZ2VySG9tZUZ1YXMpXG4gICAgcmV0dXJuIGNvbGxhYm9yYXRvclBsYW5uZXJGdWFzXG4gIH0sIFtpc0hlYWRlck1hbmFnZXJIb3Vyc0hvbWUsIG1hbmFnZXJIb21lRnVhcywgY29sbGFib3JhdG9yUGxhbm5lckZ1YXNdKVxuICBjb25zdCBoZWFkZXJIb3Vyc0Z1YXNMb2FkaW5nID0gaXNIZWFkZXJNYW5hZ2VySG91cnNIb21lID8gbWFuYWdlckhvbWVGdWFzTG9hZGluZyA6IGNvbGxhYm9yYXRvclBsYW5uZXJGdWFzTG9hZGluZ1xuICBjb25zdCByZWNlbnRDb250ZXh0c0xpbWl0ID0gdXNlTWVtbyhcbiAgICAoKSA9PlxuICAgICAgcmVzb2x2ZVJlY2VudENvbnRleHRzSG9tZUxpbWl0KHtcbiAgICAgICAgaXNIZWFkZXJIb3Vyc0FnZW50SG9tZSxcbiAgICAgICAgZnVhc0xvYWRpbmc6IGhlYWRlckhvdXJzRnVhc0xvYWRpbmcsXG4gICAgICAgIGZ1YXNDb3VudDogaGVhZGVySG91cnNGdWFzLmxlbmd0aCxcbiAgICAgIH0pLFxuICAgIFtpc0hlYWRlckhvdXJzQWdlbnRIb21lLCBoZWFkZXJIb3Vyc0Z1YXNMb2FkaW5nLCBoZWFkZXJIb3Vyc0Z1YXMubGVuZ3RoXVxuICApXG4gIGNvbnN0IHsgY29udGV4dHM6IGZldGNoZWRSZWNlbnRDb250ZXh0cywgbG9hZGluZzogcmVjZW50Q29udGV4dHNMb2FkaW5nIH0gPSB1c2VSZWNlbnRDb250ZXh0cyh7XG4gICAgZW5hYmxlZDogaXNPcmNoZXN0cmF0b3IgJiYgIWlzUGxhbm5lckhvbWUsXG4gICAgbGltaXQ6IHJlY2VudENvbnRleHRzTGltaXQsXG4gIH0pXG4gIGNvbnN0IHJlY2VudENvbnRleHRzID0gdXNlTWVtbyhcbiAgICAoKSA9PiBmZXRjaGVkUmVjZW50Q29udGV4dHMuZmlsdGVyKGNvbnRleHQgPT4gYWxsb3dlZFJlY2VudENvbnRleHRUeXBlcy5oYXMoY29udGV4dC50eXBlKSksXG4gICAgW2ZldGNoZWRSZWNlbnRDb250ZXh0cywgYWxsb3dlZFJlY2VudENvbnRleHRUeXBlc11cbiAgKVxuICBjb25zdCByZWNlbnRDb250ZXh0U2tlbGV0b25LZXlzID0gdXNlTWVtbyhcbiAgICAoKSA9PiBBcnJheS5mcm9tKHsgbGVuZ3RoOiByZWNlbnRDb250ZXh0c0xpbWl0IH0sIChfLCBpbmRleCkgPT4gYHJlY2VudC1jb250ZXh0LXNrZWxldG9uLSR7aW5kZXggKyAxfWApLFxuICAgIFtyZWNlbnRDb250ZXh0c0xpbWl0XVxuICApXG4gIGNvbnN0IGZhcXNMaXN0QWdlbnRJZCA9IGlzQ2xpZW50Q29udGV4dEZvckZhcXMgPyByZWFsTGlzdHNBZ2VudElkIDogdW5kZWZpbmVkXG4gIGNvbnN0IGZhcXNMaXN0RW50aXR5VHlwZSA9IGlzQ2xpZW50Q29udGV4dEZvckZhcXMgPyByZWFsTGlzdHNFbnRpdHlUeXBlIDogdW5kZWZpbmVkXG4gIGNvbnN0IHtcbiAgICBmYXFzOiBhZ2VudEZhcXMsXG4gICAgbG9hZGluZzogZmFxc0xvYWRpbmcsXG4gICAgaGFuZGxlR2V0RnJlcXVlbnRseUFza2VkUXVlc3Rpb25zLFxuICB9ID0gdXNlRnJlcXVlbnRseUFza2VkUXVlc3Rpb25zKGZhcXNMaXN0QWdlbnRJZCwgbGFuZywgZmFxc0xpc3RFbnRpdHlUeXBlKVxuICBjb25zdCBmYXFzRmV0Y2hSZWYgPSB1c2VSZWY8eyBhZ2VudElkOiBzdHJpbmc7IGxhbmc6IHN0cmluZzsgZW50aXR5VHlwZT86IHN0cmluZyB9IHwgbnVsbD4obnVsbClcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAvLyBGQVFzIHNvbG8gcGFyYSBjb250ZXh0byBjbGllbnRlOyBlbCByZXN0byBtdWVzdHJhIHNvbG8gRlVBcy5cbiAgICBpZiAoIXJlYWxMaXN0c0FnZW50SWQgfHwgIWlzQ2xpZW50Q29udGV4dEZvckZhcXMpIHJldHVyblxuICAgIGNvbnN0IGN1cnJlbnRLZXkgPSBgJHtyZWFsTGlzdHNBZ2VudElkfS0ke2xhbmd9LSR7cmVhbExpc3RzRW50aXR5VHlwZSA/PyAnYWxsJ31gXG4gICAgY29uc3QgbGFzdEtleSA9IGZhcXNGZXRjaFJlZi5jdXJyZW50XG4gICAgICA/IGAke2ZhcXNGZXRjaFJlZi5jdXJyZW50LmFnZW50SWR9LSR7ZmFxc0ZldGNoUmVmLmN1cnJlbnQubGFuZ30tJHtmYXFzRmV0Y2hSZWYuY3VycmVudC5lbnRpdHlUeXBlID8/ICdhbGwnfWBcbiAgICAgIDogbnVsbFxuICAgIGlmIChjdXJyZW50S2V5ICE9PSBsYXN0S2V5KSB7XG4gICAgICBmYXFzRmV0Y2hSZWYuY3VycmVudCA9IHsgYWdlbnRJZDogcmVhbExpc3RzQWdlbnRJZCwgbGFuZywgZW50aXR5VHlwZTogcmVhbExpc3RzRW50aXR5VHlwZSB9XG4gICAgICBoYW5kbGVHZXRGcmVxdWVudGx5QXNrZWRRdWVzdGlvbnMoeyBhZ2VudElkOiByZWFsTGlzdHNBZ2VudElkLCBsYW5nLCBlbnRpdHlUeXBlOiByZWFsTGlzdHNFbnRpdHlUeXBlIH0pXG4gICAgfVxuICB9LCBbcmVhbExpc3RzQWdlbnRJZCwgcmVhbExpc3RzRW50aXR5VHlwZSwgaXNDbGllbnRDb250ZXh0Rm9yRmFxcywgbGFuZywgaGFuZGxlR2V0RnJlcXVlbnRseUFza2VkUXVlc3Rpb25zXSlcblxuICBjb25zdCBmYXFzID0gYWdlbnRGYXFzXG4gIGNvbnN0IGZ1YXMgPSBhZ2VudEZ1YXNcbiAgY29uc3QgZmFxc0FyZUxvYWRpbmcgPSBmYXFzTG9hZGluZ1xuICBjb25zdCBmdWFzQXJlTG9hZGluZyA9IGZ1YXNMb2FkaW5nXG5cbiAgY29uc3Qgc2hvd1JlY2VudENvbnRleHRzQmxvY2sgPSBpc1JlY2VudENvbnRleHRzU3RlcCAmJiAocmVjZW50Q29udGV4dHNMb2FkaW5nIHx8IHJlY2VudENvbnRleHRzLmxlbmd0aCA+IDApXG4gIGNvbnN0IHNob3VsZFNob3dGYXFzID1cbiAgICBpc01BSUEgJiZcbiAgICBpc0NsaWVudENvbnRleHRGb3JGYXFzICYmXG4gICAgIWlzUmVjZW50Q29udGV4dHNTdGVwICYmXG4gICAgKGlzQ29udGV4dEhvbWVTdGVwIHx8ICghaXNIZWFkZXJIb21lICYmIGZhcXNBY2Nlc3MpKSAmJlxuICAgICFpc01haWFrZXIgJiZcbiAgICAoZmFxcy5sZW5ndGggPiAwIHx8IGZhcXNBcmVMb2FkaW5nKVxuICBjb25zdCBzaG91bGRTaG93RnVhcyA9XG4gICAgIWlzUmVjZW50Q29udGV4dHNTdGVwICYmICFpc01haWFrZXIgJiYgKGlzQ29udGV4dEhvbWVTdGVwIHx8ICFpc0hlYWRlckhvbWUpICYmIChmdWFzLmxlbmd0aCA+IDAgfHwgZnVhc0FyZUxvYWRpbmcpXG4gIGNvbnN0IHNob3VsZFNob3dQbGFubmVyRnVhc0xvYWRpbmcgPSBpc0hlYWRlckhvdXJzQWdlbnRIb21lICYmIGhlYWRlckhvdXJzRnVhc0xvYWRpbmcgJiYgaGVhZGVySG91cnNGdWFzLmxlbmd0aCA9PT0gMFxuICBjb25zdCBzaG91bGRTaG93UGxhbm5lckZ1YXNDb250ZW50ID0gaXNIZWFkZXJIb3Vyc0FnZW50SG9tZSAmJiBoZWFkZXJIb3Vyc0Z1YXMubGVuZ3RoID4gMFxuICBjb25zdCBzaG91bGRTaG93UGxhbm5lckZ1YXMgPSBzaG91bGRTaG93UGxhbm5lckZ1YXNMb2FkaW5nIHx8IHNob3VsZFNob3dQbGFubmVyRnVhc0NvbnRlbnRcblxuICBjb25zdCBzaG93UHJvamVjdFN1bW1hcnlDYXJkID0gc2hvd1Byb2plY3RTdW1tYXJ5ICYmIGFnZW50Py5lbnRpdHkgPT09ICdwcm9qZWN0J1xuICBjb25zdCBzaG93RkFRcyA9ICEhKFxuICAgIHNob3dSZWNlbnRDb250ZXh0c0Jsb2NrIHx8XG4gICAgc2hvdWxkU2hvd0ZhcXMgfHxcbiAgICBzaG91bGRTaG93RnVhcyB8fFxuICAgIHNob3VsZFNob3dQbGFubmVyRnVhcyB8fFxuICAgIHNob3dQcm9qZWN0U3VtbWFyeUNhcmQgfHxcbiAgICBpc01haWFrZXJcbiAgKVxuICBjb25zdCBob21lU2Nyb2xsYWJsZUxheW91dCA9IHNob3dGQVFzXG4gIGNvbnN0IHNob3dEeW5hbWljU2VjdGlvbiA9XG4gICAgc2hvd1JlY2VudENvbnRleHRzQmxvY2sgfHwgc2hvdWxkU2hvd0ZhcXMgfHwgc2hvdWxkU2hvd0Z1YXMgfHwgc2hvdWxkU2hvd1BsYW5uZXJGdWFzIHx8IGlzTWFpYWtlclxuXG4gIC8vIEzDs2dpY2EgZGVsIHNjcm9sbCBjb24gZ3JhZGllbnRlc1xuICBjb25zdCBjb250ZW50Q29udGFpbmVyUmVmID0gdXNlUmVmPEhUTUxEaXZFbGVtZW50PihudWxsKVxuICBjb25zdCBbc2hvd1RvcEdyYWRpZW50LCBzZXRTaG93VG9wR3JhZGllbnRdID0gdXNlU3RhdGUoZmFsc2UpXG4gIGNvbnN0IFtzaG93Qm90dG9tR3JhZGllbnQsIHNldFNob3dCb3R0b21HcmFkaWVudF0gPSB1c2VTdGF0ZShmYWxzZSlcbiAgY29uc3QgW2lzU2Nyb2xsaW5nLCBzZXRJc1Njcm9sbGluZ10gPSB1c2VTdGF0ZShmYWxzZSlcbiAgY29uc3Qgc2Nyb2xsVGltZW91dFJlZiA9IHVzZVJlZjxSZXR1cm5UeXBlPHR5cGVvZiBzZXRUaW1lb3V0PiB8IG51bGw+KG51bGwpXG5cbiAgLy8gU2FsdWRvIGZpam8gcG9yIHRpcG8gZGUgY29udGV4dG8gKGkxOG4pLiBDdXN0b20gYWdlbnRzIHNpZ3VlbiB1c2FuZG8gYWdlbnQuaW50cm9kdWN0aW9uLlxuICAvLyBQbGFubmVyIHVzYSB0w610dWxvICsgYmFqYWRhIHByb3Bpb3MgKGBwbGFubmVySG9tZWApLCBubyBlc3RlIGdyZWV0aW5nLlxuICBjb25zdCBncmVldGluZyA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGlmIChpc01haWFrZXIgfHwgaXNQbGFubmVySG9tZSB8fCBpc1JlY2VudENvbnRleHRzU3RlcCkgcmV0dXJuICcnXG5cbiAgICBpZiAoaXNNQUlBICYmIHBpbm5lZEVudGl0eVR5cGUpIHtcbiAgICAgIHJldHVybiB0KGBob21lTWVudS5jb250ZXh0SG9tZS5jb250ZXh0R3JlZXRpbmcuJHtwaW5uZWRFbnRpdHlUeXBlfWApXG4gICAgfVxuXG4gICAgY29uc3QgaW50cm8gPSBhZ2VudD8uaW50cm9kdWN0aW9uXG4gICAgaWYgKCFpbnRybykgcmV0dXJuICcnXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoaW50cm8pICYmIGludHJvLmxlbmd0aCA+IDApIHtcbiAgICAgIHJldHVybiBpbnRyb1tNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiBpbnRyby5sZW5ndGgpXVxuICAgIH1cbiAgICByZXR1cm4gdHlwZW9mIGludHJvID09PSAnc3RyaW5nJyA/IGludHJvIDogJydcbiAgfSwgW2FnZW50Py5pZCwgYWdlbnQ/LmludHJvZHVjdGlvbiwgaXNNYWlha2VyLCBpc1BsYW5uZXJIb21lLCBpc01BSUEsIHBpbm5lZEVudGl0eVR5cGUsIGlzUmVjZW50Q29udGV4dHNTdGVwLCB0XSlcblxuICBjb25zdCBoYW5kbGVTZWxlY3RSZWNlbnRDb250ZXh0ID0gdXNlQ2FsbGJhY2soXG4gICAgKGNvbnRleHQ6IFJlY2VudENvbnRleHRJdGVtLCBvcmRlcjogbnVtYmVyKSA9PiB7XG4gICAgICBldmVudChFVkVOVFMuYWlDaGF0Q29udGV4dFNlbGVjdGVkLCB7IG9yZGVyLCB0eXBlOiBjb250ZXh0LnR5cGUgfSlcblxuICAgICAgY29uc3QgY29udGV4dElkID0gcGFyc2VOdW1lcmljSWQoY29udGV4dC5pZClcbiAgICAgIGNvbnN0IGNsaWVudElkID0gcGFyc2VOdW1lcmljSWQoY29udGV4dC5wYXJlbnRzPy5jbGllbnRfaWQpXG4gICAgICBjb25zdCBwcm9qZWN0SWQgPSBwYXJzZU51bWVyaWNJZChjb250ZXh0LnBhcmVudHM/LnByb2plY3RfaWQpXG4gICAgICBjb25zdCBjbGllbnROYW1lID0gY29udGV4dC5wYXJlbnRzPy5jbGllbnRfbmFtZSB8fCAnJ1xuICAgICAgY29uc3QgcHJvamVjdE5hbWUgPSBjb250ZXh0LnBhcmVudHM/LnByb2plY3RfbmFtZSB8fCAnJ1xuXG4gICAgICBzZXRTZWxlY3RlZENvbnRleHQoY29udGV4dClcbiAgICAgIHNldFRhc2sobnVsbClcbiAgICAgIHNldFByb2plY3QobnVsbClcbiAgICAgIHNldENsaWVudD8uKG51bGwpXG4gICAgICBzZXRDaGlwc1Byb2plY3QobnVsbClcblxuICAgICAgaWYgKGNvbnRleHQudHlwZSA9PT0gJ2NsaWVudCcpIHtcbiAgICAgICAgaWYgKGNvbnRleHRJZCA9PSBudWxsKSByZXR1cm5cbiAgICAgICAgc2V0Q2xpZW50Py4oeyBpZDogY29udGV4dElkLCBuYW1lOiBjb250ZXh0Lm5hbWUgfSlcbiAgICAgIH0gZWxzZSBpZiAoY29udGV4dC50eXBlID09PSAncHJvamVjdCcpIHtcbiAgICAgICAgaWYgKGNvbnRleHRJZCA9PSBudWxsKSByZXR1cm5cbiAgICAgICAgc2V0UHJvamVjdCh7XG4gICAgICAgICAgaWQ6IGNvbnRleHRJZCxcbiAgICAgICAgICBuYW1lOiBjb250ZXh0Lm5hbWUsXG4gICAgICAgICAgLi4uKGNsaWVudElkICE9IG51bGwgPyB7IGNsaWVudElkIH0gOiB7fSksXG4gICAgICAgICAgLi4uKGNsaWVudElkICE9IG51bGwgPyB7IGNsaWVudDogeyBpZDogY2xpZW50SWQsIG5hbWU6IGNsaWVudE5hbWUgfSB9IDoge30pLFxuICAgICAgICB9KVxuICAgICAgICBzZXRDaGlwc1Byb2plY3Qoe1xuICAgICAgICAgIHByb2plY3RJZDogU3RyaW5nKGNvbnRleHRJZCksXG4gICAgICAgICAgcHJvamVjdE5hbWU6IGNvbnRleHQubmFtZSxcbiAgICAgICAgICBjbGllbnROYW1lLFxuICAgICAgICB9KVxuICAgICAgfSBlbHNlIGlmIChjb250ZXh0LnR5cGUgPT09ICd0YXNrJykge1xuICAgICAgICBzZXRUYXNrKHtcbiAgICAgICAgICBpZDogY29udGV4dC5pZCxcbiAgICAgICAgICBuYW1lOiBjb250ZXh0Lm5hbWUsXG4gICAgICAgICAgLi4uKHByb2plY3RJZCAhPSBudWxsID8geyBwcm9qZWN0SWQgfSA6IHt9KSxcbiAgICAgICAgICAuLi4oY2xpZW50SWQgIT0gbnVsbCA/IHsgY2xpZW50SWQgfSA6IHt9KSxcbiAgICAgICAgfSlcbiAgICAgICAgaWYgKGNsaWVudElkICE9IG51bGwpIHtcbiAgICAgICAgICBzZXRDbGllbnQ/Lih7IGlkOiBjbGllbnRJZCwgbmFtZTogY2xpZW50TmFtZSB9KVxuICAgICAgICB9XG4gICAgICAgIGlmIChwcm9qZWN0SWQgIT0gbnVsbCkge1xuICAgICAgICAgIHNldFByb2plY3Qoe1xuICAgICAgICAgICAgaWQ6IHByb2plY3RJZCxcbiAgICAgICAgICAgIG5hbWU6IHByb2plY3ROYW1lIHx8IGAke3QoJ2hvbWVNZW51LnJlY2VudENvbnRleHRzLnR5cGVzLnByb2plY3QnKX0gJHtwcm9qZWN0SWR9YCxcbiAgICAgICAgICAgIC4uLihjbGllbnRJZCAhPSBudWxsID8geyBjbGllbnRJZCB9IDoge30pLFxuICAgICAgICAgICAgLi4uKGNsaWVudElkICE9IG51bGwgPyB7IGNsaWVudDogeyBpZDogY2xpZW50SWQsIG5hbWU6IGNsaWVudE5hbWUgfSB9IDoge30pLFxuICAgICAgICAgIH0pXG4gICAgICAgICAgc2V0Q2hpcHNQcm9qZWN0KHtcbiAgICAgICAgICAgIHByb2plY3RJZDogU3RyaW5nKHByb2plY3RJZCksXG4gICAgICAgICAgICBwcm9qZWN0TmFtZTogcHJvamVjdE5hbWUgfHwgYCR7dCgnaG9tZU1lbnUucmVjZW50Q29udGV4dHMudHlwZXMucHJvamVjdCcpfSAke3Byb2plY3RJZH1gLFxuICAgICAgICAgICAgY2xpZW50TmFtZSxcbiAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICAgIGRvY3VtZW50LmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCdtYWlhLWlucHV0LXJlZm9jdXMnKSlcbiAgICAgIH0pXG4gICAgfSxcbiAgICBbZXZlbnQsIHNldENoaXBzUHJvamVjdCwgc2V0Q2xpZW50LCBzZXRQcm9qZWN0LCBzZXRUYXNrLCB0XVxuICApXG5cbiAgY29uc3QgaGFuZGxlSG9tZVN0YXJ0Q2hhdCA9IHVzZUNhbGxiYWNrKFxuICAgIChcbiAgICAgIG1lc3NhZ2U6IHN0cmluZyxcbiAgICAgIGF0dGFjaG1lbnRzPzogQXR0YWNobWVudEZpbGVbXSB8IG51bGwsXG4gICAgICBmYXFJZD86IHN0cmluZyxcbiAgICAgIGFnZW50U3VnZ2VzdGlvbklkPzogc3RyaW5nLFxuICAgICAgbWVudGlvbnM/OiBudWxsLFxuICAgICAgZnVhSWQ/OiBzdHJpbmdcbiAgICApID0+IHtcbiAgICAgIGlmIChpc0hlYWRlck1hbmFnZXJIb3Vyc0hvbWUgJiYgZnVhSWQpIHtcbiAgICAgICAgZmx1c2hTeW5jKCgpID0+IHtcbiAgICAgICAgICBzZXRTZWxlY3RlZENvbnRleHQobnVsbClcbiAgICAgICAgICBzZXRUYXNrKG51bGwpXG4gICAgICAgICAgc2V0UHJvamVjdChudWxsKVxuICAgICAgICAgIHNldENsaWVudD8uKG51bGwpXG4gICAgICAgICAgc2V0Q2hpcHNQcm9qZWN0KG51bGwpXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgICBvblN0YXJ0Q2hhdChtZXNzYWdlLCBhdHRhY2htZW50cywgZmFxSWQsIGFnZW50U3VnZ2VzdGlvbklkLCBtZW50aW9ucywgZnVhSWQpXG4gICAgfSxcbiAgICBbaXNIZWFkZXJNYW5hZ2VySG91cnNIb21lLCBvblN0YXJ0Q2hhdCwgc2V0Q2hpcHNQcm9qZWN0LCBzZXRDbGllbnQsIHNldFByb2plY3QsIHNldFRhc2tdXG4gIClcblxuICBjb25zdCByZW5kZXJSZWNlbnRDb250ZXh0cyA9ICgpID0+IHtcbiAgICBpZiAoIWlzUmVjZW50Q29udGV4dHNTdGVwKSByZXR1cm4gbnVsbFxuXG4gICAgcmV0dXJuIChcbiAgICAgIDxTQ0NBSUhvbWVSZWNlbnRDb250ZXh0c1xuICAgICAgICAkZml4ZWRDb250ZW50V2lkdGg9e2lzSGVhZGVyVGFza0NvbnRleHRIb21lID8gTUFJQV9IRUFERVJfQ09MTEFCT1JBVE9SX0hPTUVfQ09OVEVOVF9XSURUSF9QWCA6IHVuZGVmaW5lZH1cbiAgICAgID5cbiAgICAgICAge2lzSGVhZGVySG91cnNBZ2VudEhvbWUgPyAoXG4gICAgICAgICAgPFNDQ0FJSG9tZVJlY2VudENvbnRleHRzU2VjdGlvbkhlYWRlcj5cbiAgICAgICAgICAgIDxTQ0NBSUhvbWVSZWNlbnRDb250ZXh0c1NlY3Rpb25UaXRsZT5cbiAgICAgICAgICAgICAge3QoXG4gICAgICAgICAgICAgICAgaXNIZWFkZXJNYW5hZ2VySG91cnNIb21lXG4gICAgICAgICAgICAgICAgICA/ICdob21lTWVudS5jb250ZXh0SG9tZS5yZWNlbnRDb250ZXh0c1NlY3Rpb25NYW5hZ2VyLnRpdGxlJ1xuICAgICAgICAgICAgICAgICAgOiAnaG9tZU1lbnUuY29udGV4dEhvbWUucmVjZW50VGFza3NTZWN0aW9uLnRpdGxlJ1xuICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgPC9TQ0NBSUhvbWVSZWNlbnRDb250ZXh0c1NlY3Rpb25UaXRsZT5cbiAgICAgICAgICAgIDxTQ0NBSUhvbWVSZWNlbnRDb250ZXh0c1NlY3Rpb25TdWJ0aXRsZT5cbiAgICAgICAgICAgICAge3QoXG4gICAgICAgICAgICAgICAgaXNIZWFkZXJNYW5hZ2VySG91cnNIb21lXG4gICAgICAgICAgICAgICAgICA/ICdob21lTWVudS5jb250ZXh0SG9tZS5yZWNlbnRDb250ZXh0c1NlY3Rpb25NYW5hZ2VyLnN1YnRpdGxlJ1xuICAgICAgICAgICAgICAgICAgOiAnaG9tZU1lbnUuY29udGV4dEhvbWUucmVjZW50VGFza3NTZWN0aW9uLnN1YnRpdGxlJ1xuICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgPC9TQ0NBSUhvbWVSZWNlbnRDb250ZXh0c1NlY3Rpb25TdWJ0aXRsZT5cbiAgICAgICAgICA8L1NDQ0FJSG9tZVJlY2VudENvbnRleHRzU2VjdGlvbkhlYWRlcj5cbiAgICAgICAgKSA6IG51bGx9XG4gICAgICAgIDxTQ0NBSUhvbWVSZWNlbnRDb250ZXh0c0xpc3QgJGZsdXNoUGlsbHM9e2lzSGVhZGVyVGFza0NvbnRleHRIb21lfT5cbiAgICAgICAgICB7cmVjZW50Q29udGV4dHNMb2FkaW5nICYmXG4gICAgICAgICAgICByZWNlbnRDb250ZXh0U2tlbGV0b25LZXlzLm1hcChrZXkgPT4gPFNDQ0FJSG9tZVJlY2VudENvbnRleHRQaWxsU2tlbGV0b24ga2V5PXtrZXl9IC8+KX1cbiAgICAgICAgICB7IXJlY2VudENvbnRleHRzTG9hZGluZyAmJlxuICAgICAgICAgICAgcmVjZW50Q29udGV4dHMubWFwKChjb250ZXh0LCBpbmRleCkgPT4gKFxuICAgICAgICAgICAgICA8UmVjZW50Q29udGV4dFBpbGxcbiAgICAgICAgICAgICAgICBrZXk9e2Ake2NvbnRleHQudHlwZX0tJHtjb250ZXh0LmlkfWB9XG4gICAgICAgICAgICAgICAgY29udGV4dD17Y29udGV4dH1cbiAgICAgICAgICAgICAgICBsYWJlbD17Y29udGV4dC5uYW1lLnRyaW0oKX1cbiAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBoYW5kbGVTZWxlY3RSZWNlbnRDb250ZXh0KGNvbnRleHQsIGluZGV4ICsgMSl9XG4gICAgICAgICAgICAgICAgZnVsbFdpZHRoPXtpc0hlYWRlclRhc2tDb250ZXh0SG9tZX1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICkpfVxuICAgICAgICA8L1NDQ0FJSG9tZVJlY2VudENvbnRleHRzTGlzdD5cbiAgICAgIDwvU0NDQUlIb21lUmVjZW50Q29udGV4dHM+XG4gICAgKVxuICB9XG5cbiAgY29uc3QgY2hlY2tTY3JvbGwgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgY29uc3QgY29udGFpbmVyID0gY29udGVudENvbnRhaW5lclJlZi5jdXJyZW50XG4gICAgaWYgKCFjb250YWluZXIgfHwgIWhvbWVTY3JvbGxhYmxlTGF5b3V0KSByZXR1cm5cblxuICAgIGNvbnN0IHsgc2Nyb2xsVG9wLCBzY3JvbGxIZWlnaHQsIGNsaWVudEhlaWdodCB9ID0gY29udGFpbmVyXG4gICAgY29uc3QgaXNTY3JvbGxhYmxlID0gc2Nyb2xsSGVpZ2h0ID4gY2xpZW50SGVpZ2h0XG4gICAgY29uc3QgaXNBdFRvcCA9IHNjcm9sbFRvcCA9PT0gMFxuICAgIGNvbnN0IGlzQXRCb3R0b20gPSBzY3JvbGxUb3AgKyBjbGllbnRIZWlnaHQgPj0gc2Nyb2xsSGVpZ2h0IC0gMVxuXG4gICAgc2V0U2hvd1RvcEdyYWRpZW50KGlzU2Nyb2xsYWJsZSAmJiAhaXNBdFRvcClcbiAgICBzZXRTaG93Qm90dG9tR3JhZGllbnQoaXNTY3JvbGxhYmxlICYmICFpc0F0Qm90dG9tKVxuICB9LCBbaG9tZVNjcm9sbGFibGVMYXlvdXRdKVxuXG4gIGNvbnN0IGhhbmRsZVNjcm9sbCA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBjaGVja1Njcm9sbCgpXG4gICAgc2V0SXNTY3JvbGxpbmcodHJ1ZSlcblxuICAgIGlmIChzY3JvbGxUaW1lb3V0UmVmLmN1cnJlbnQpIHtcbiAgICAgIGNsZWFyVGltZW91dChzY3JvbGxUaW1lb3V0UmVmLmN1cnJlbnQpXG4gICAgfVxuXG4gICAgc2Nyb2xsVGltZW91dFJlZi5jdXJyZW50ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBzZXRJc1Njcm9sbGluZyhmYWxzZSlcbiAgICB9LCAxNTApXG4gIH0sIFtjaGVja1Njcm9sbF0pXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoIWhvbWVTY3JvbGxhYmxlTGF5b3V0KSB7XG4gICAgICBzZXRTaG93VG9wR3JhZGllbnQoZmFsc2UpXG4gICAgICBzZXRTaG93Qm90dG9tR3JhZGllbnQoZmFsc2UpXG4gICAgICByZXR1cm4gdW5kZWZpbmVkXG4gICAgfVxuXG4gICAgY29uc3QgY29udGFpbmVyID0gY29udGVudENvbnRhaW5lclJlZi5jdXJyZW50XG4gICAgaWYgKCFjb250YWluZXIpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWRcbiAgICB9XG5cbiAgICBjb25zdCBzY2hlZHVsZUNoZWNrU2Nyb2xsID0gKCkgPT4ge1xuICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcbiAgICAgICAgY2hlY2tTY3JvbGwoKVxuICAgICAgfSlcbiAgICB9XG5cbiAgICBzY2hlZHVsZUNoZWNrU2Nyb2xsKClcbiAgICBjb250YWluZXIuYWRkRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgaGFuZGxlU2Nyb2xsKVxuXG4gICAgY29uc3QgcmVzaXplT2JzZXJ2ZXIgPSBuZXcgUmVzaXplT2JzZXJ2ZXIoc2NoZWR1bGVDaGVja1Njcm9sbClcbiAgICByZXNpemVPYnNlcnZlci5vYnNlcnZlKGNvbnRhaW5lcilcbiAgICBjb25zdCBzY3JvbGxDb250ZW50ID0gY29udGFpbmVyLmZpcnN0RWxlbWVudENoaWxkXG4gICAgaWYgKHNjcm9sbENvbnRlbnQgaW5zdGFuY2VvZiBFbGVtZW50KSB7XG4gICAgICByZXNpemVPYnNlcnZlci5vYnNlcnZlKHNjcm9sbENvbnRlbnQpXG4gICAgfVxuXG4gICAgY29uc3QgdGltZW91dElkID0gd2luZG93LnNldFRpbWVvdXQoc2NoZWR1bGVDaGVja1Njcm9sbCwgMTAwKVxuICAgIGNvbnN0IGxhdGVUaW1lb3V0SWQgPSB3aW5kb3cuc2V0VGltZW91dChzY2hlZHVsZUNoZWNrU2Nyb2xsLCA0MDApXG5cbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgY29udGFpbmVyLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIGhhbmRsZVNjcm9sbClcbiAgICAgIHJlc2l6ZU9ic2VydmVyLmRpc2Nvbm5lY3QoKVxuICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXRJZClcbiAgICAgIGNsZWFyVGltZW91dChsYXRlVGltZW91dElkKVxuICAgICAgaWYgKHNjcm9sbFRpbWVvdXRSZWYuY3VycmVudCkge1xuICAgICAgICBjbGVhclRpbWVvdXQoc2Nyb2xsVGltZW91dFJlZi5jdXJyZW50KVxuICAgICAgfVxuICAgIH1cbiAgfSwgW2hvbWVTY3JvbGxhYmxlTGF5b3V0LCBjaGVja1Njcm9sbCwgaGFuZGxlU2Nyb2xsXSlcblxuICB1c2VMYXlvdXRFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghaG9tZVNjcm9sbGFibGVMYXlvdXQpIHJldHVyblxuICAgIGNoZWNrU2Nyb2xsKClcbiAgfSwgW1xuICAgIGhvbWVTY3JvbGxhYmxlTGF5b3V0LFxuICAgIGNoZWNrU2Nyb2xsLFxuICAgIHJlY2VudENvbnRleHRzTG9hZGluZyxcbiAgICByZWNlbnRDb250ZXh0cy5sZW5ndGgsXG4gICAgaGVhZGVySG91cnNGdWFzTG9hZGluZyxcbiAgICBoZWFkZXJIb3Vyc0Z1YXMubGVuZ3RoLFxuICAgIGZ1YXNMb2FkaW5nLFxuICAgIGZ1YXMubGVuZ3RoLFxuICAgIGZhcXNBcmVMb2FkaW5nLFxuICAgIGZhcXMubGVuZ3RoLFxuICAgIHNob3VsZFNob3dQbGFubmVyRnVhcyxcbiAgICBpc01haWFrZXIsXG4gIF0pXG5cbiAgY29uc3QgcmVuZGVySGVhZGVyQ29udGVudCA9ICgpID0+IHtcbiAgICBpZiAoIWlzTUFJQSkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPFNDQ0FJSG9tZUFnZW50SW5mb0NvbnRhaW5lcj5cbiAgICAgICAgICA8U0NDQUlIb21lQWdlbnRJbmZvPlxuICAgICAgICAgICAge2FnZW50Py5lbW9qaX0ge2FnZW50Py5uYW1lfVxuICAgICAgICAgIDwvU0NDQUlIb21lQWdlbnRJbmZvPlxuICAgICAgICAgIHthZ2VudD8uY3JlYXRlZF9ieSAmJiAhaXNNQUlBICYmIChcbiAgICAgICAgICAgIDxTQ0NBSUhvbWVDcmVhdGVkQnlDb250YWluZXI+XG4gICAgICAgICAgICAgIDxUb29sdGlwXG4gICAgICAgICAgICAgICAgdGl0bGU9e1xuICAgICAgICAgICAgICAgICAgYWdlbnQ/LmNyZWF0ZWRfYnk/LmlzX2RlbGV0ZWQgPyB0KCdob21lTWVudS5jcmVhdGVkQnlUb29sdGlwRGVsZXRlZCcpIDogdCgnaG9tZU1lbnUuY3JlYXRlZEJ5VG9vbHRpcCcpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPFNDQ0FJSG9tZUNyZWF0ZWRCeVRleHQ+XG4gICAgICAgICAgICAgICAgICB7dCgnaG9tZU1lbnUuY3JlYXRlZEJ5Jyl9eycgJ31cbiAgICAgICAgICAgICAgICAgIDxTQ0NBSUhvbWVDcmVhdGVkQnlUZXh0TmFtZT57YWdlbnQ/LmNyZWF0ZWRfYnk/Lm5hbWV9PC9TQ0NBSUhvbWVDcmVhdGVkQnlUZXh0TmFtZT5cbiAgICAgICAgICAgICAgICA8L1NDQ0FJSG9tZUNyZWF0ZWRCeVRleHQ+XG4gICAgICAgICAgICAgIDwvVG9vbHRpcD5cbiAgICAgICAgICAgIDwvU0NDQUlIb21lQ3JlYXRlZEJ5Q29udGFpbmVyPlxuICAgICAgICAgICl9XG4gICAgICAgIDwvU0NDQUlIb21lQWdlbnRJbmZvQ29udGFpbmVyPlxuICAgICAgKVxuICAgIH1cblxuICAgIGNvbnN0IGNvbnRlbnRBbGlnblN0YXJ0ID0gaXNQbGFubmVySG9tZSB8fCBpc0hlYWRlclRhc2tDb250ZXh0SG9tZSB8fCBpc0xlZnRBbGlnbmVkT3JjaGVzdHJhdG9ySG9tZVxuXG4gICAgY29uc3QgbWFpYUhlYWRlclN0YWNrTmVlZHNHYXAgPVxuICAgICAgKGlzUmVjZW50Q29udGV4dHNTdGVwICYmICFpc0hlYWRlclRhc2tDb250ZXh0SG9tZSAmJiAhaXNQbGFubmVySG9tZSkgfHxcbiAgICAgICghaXNSZWNlbnRDb250ZXh0c1N0ZXAgJiZcbiAgICAgICAgISFncmVldGluZyAmJlxuICAgICAgICAhaXNQbGFubmVySG9tZSAmJlxuICAgICAgICAhaXNIZWFkZXJUYXNrQ29udGV4dEhvbWUgJiZcbiAgICAgICAgIWlzTGVmdEFsaWduZWRPcmNoZXN0cmF0b3JIb21lKVxuXG4gICAgcmV0dXJuIChcbiAgICAgIDxTQ0NBSUhvbWVNYWlhSGVhZGVyU3RhY2sgJG5vR2FwPXshbWFpYUhlYWRlclN0YWNrTmVlZHNHYXB9ICRhbGlnbj17Y29udGVudEFsaWduU3RhcnQgPyAnc3RhcnQnIDogJ2NlbnRlcid9PlxuICAgICAgICB7IWlzUGxhbm5lckhvbWUgJiYgIWlzSGVhZGVyVGFza0NvbnRleHRIb21lICYmICFpc0xlZnRBbGlnbmVkT3JjaGVzdHJhdG9ySG9tZSAmJiAoXG4gICAgICAgICAgPFNDQ0FJSG9tZUljb25Db250YWluZXI+XG4gICAgICAgICAgICA8U0NDQUlIb21lTG9nb1dyYXBwZXI+XG4gICAgICAgICAgICAgIDxNQUlBSXNvbG9nbyAvPlxuICAgICAgICAgICAgPC9TQ0NBSUhvbWVMb2dvV3JhcHBlcj5cbiAgICAgICAgICA8L1NDQ0FJSG9tZUljb25Db250YWluZXI+XG4gICAgICAgICl9XG4gICAgICAgIHtpc1BsYW5uZXJIb21lICYmIChcbiAgICAgICAgICA8U0NDQUlIb21lVGl0bGVCbG9jayAkYWxpZ249XCJzdGFydFwiPlxuICAgICAgICAgICAgPFNDQ0FJSG9tZVRpdGxlICRzaXplPVwibWRcIiAkYWxpZ249XCJzdGFydFwiPlxuICAgICAgICAgICAgICB7dCgnaG9tZU1lbnUucGxhbm5lckhvbWUudGl0bGUnKX1cbiAgICAgICAgICAgIDwvU0NDQUlIb21lVGl0bGU+XG4gICAgICAgICAgICA8U0NDQUlIb21lU3VidGl0bGUgJGFsaWduPVwic3RhcnRcIj57dCgnaG9tZU1lbnUucGxhbm5lckhvbWUuc3VidGl0bGUnKX08L1NDQ0FJSG9tZVN1YnRpdGxlPlxuICAgICAgICAgIDwvU0NDQUlIb21lVGl0bGVCbG9jaz5cbiAgICAgICAgKX1cbiAgICAgICAgeyFpc1BsYW5uZXJIb21lICYmIGlzUmVjZW50Q29udGV4dHNTdGVwICYmIGlzSGVhZGVyVGFza0NvbnRleHRIb21lICYmIChcbiAgICAgICAgICA8U0NDQUlIb21lVGl0bGVCbG9jayAkYWxpZ249XCJzdGFydFwiICRmdWxsV2lkdGg+XG4gICAgICAgICAgICA8U0NDQUlIb21lVGl0bGUgJHNpemU9XCJjb250ZXh0XCIgJGFsaWduPVwic3RhcnRcIiAkZnVsbFdpZHRoPlxuICAgICAgICAgICAgICB7dCgnaG9tZU1lbnUuY29udGV4dEhvbWUuZ3JlZXRpbmcnLCB7IG5hbWU6IHVzZXIuZmlyc3ROYW1lIH0pfVxuICAgICAgICAgICAgPC9TQ0NBSUhvbWVUaXRsZT5cbiAgICAgICAgICAgIDxTQ0NBSUhvbWVTdWJ0aXRsZSAkYWxpZ249XCJzdGFydFwiICRjb2xsYWJvcmF0b3JIb21lPlxuICAgICAgICAgICAgICB7dChoZWFkZXJUYXNrQ29udGV4dFN1YnRpdGxlS2V5KX1cbiAgICAgICAgICAgIDwvU0NDQUlIb21lU3VidGl0bGU+XG4gICAgICAgICAgPC9TQ0NBSUhvbWVUaXRsZUJsb2NrPlxuICAgICAgICApfVxuICAgICAgICB7IWlzUGxhbm5lckhvbWUgJiYgaXNSZWNlbnRDb250ZXh0c1N0ZXAgJiYgIWlzSGVhZGVyVGFza0NvbnRleHRIb21lICYmIChcbiAgICAgICAgICA8PlxuICAgICAgICAgICAgPFNDQ0FJSG9tZVRpdGxlICRhbGlnbj17aXNMZWZ0QWxpZ25lZE9yY2hlc3RyYXRvckhvbWUgPyAnc3RhcnQnIDogdW5kZWZpbmVkfT5cbiAgICAgICAgICAgICAge3QoJ2hvbWVNZW51LmNvbnRleHRIb21lLmdyZWV0aW5nJywgeyBuYW1lOiB1c2VyLmZpcnN0TmFtZSB9KX1cbiAgICAgICAgICAgIDwvU0NDQUlIb21lVGl0bGU+XG4gICAgICAgICAgICA8U0NDQUlIb21lU3VidGl0bGUgJGFsaWduPXtpc0xlZnRBbGlnbmVkT3JjaGVzdHJhdG9ySG9tZSA/ICdzdGFydCcgOiB1bmRlZmluZWR9PlxuICAgICAgICAgICAgICB7dChcbiAgICAgICAgICAgICAgICBpc0NvbGxhYm9yYXRvclJvbGUodXNlci5yb2xlX2lkKVxuICAgICAgICAgICAgICAgICAgPyAnaG9tZU1lbnUuY29udGV4dEhvbWUuc3VidGl0bGVDb2xsYWJvcmF0b3InXG4gICAgICAgICAgICAgICAgICA6ICdob21lTWVudS5jb250ZXh0SG9tZS5zdWJ0aXRsZSdcbiAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIDwvU0NDQUlIb21lU3VidGl0bGU+XG4gICAgICAgICAgPC8+XG4gICAgICAgICl9XG4gICAgICAgIHshaXNQbGFubmVySG9tZSAmJiAhaXNSZWNlbnRDb250ZXh0c1N0ZXAgJiYgZ3JlZXRpbmcgJiYgKFxuICAgICAgICAgIDxTQ0NBSUhvbWVHcmVldGluZ1xuICAgICAgICAgICAgJGFsaWduPXtpc0xlZnRBbGlnbmVkT3JjaGVzdHJhdG9ySG9tZSA/ICdzdGFydCcgOiB1bmRlZmluZWR9XG4gICAgICAgICAgICAkc2l6ZT17aXNMZWZ0QWxpZ25lZE9yY2hlc3RyYXRvckhvbWUgPyAnbWQnIDogJ2xnJ31cbiAgICAgICAgICA+XG4gICAgICAgICAgICB7Z3JlZXRpbmd9XG4gICAgICAgICAgPC9TQ0NBSUhvbWVHcmVldGluZz5cbiAgICAgICAgKX1cbiAgICAgIDwvU0NDQUlIb21lTWFpYUhlYWRlclN0YWNrPlxuICAgIClcbiAgfVxuXG4gIGNvbnN0IGZpeGVkSG9tZUNvbnRlbnRXaWR0aCA9XG4gICAgaXNIZWFkZXJUYXNrQ29udGV4dEhvbWUgfHwgaXNMZWZ0QWxpZ25lZE9yY2hlc3RyYXRvckhvbWVcbiAgICAgID8gTUFJQV9IRUFERVJfQ09MTEFCT1JBVE9SX0hPTUVfQ09OVEVOVF9XSURUSF9QWFxuICAgICAgOiB1bmRlZmluZWRcbiAgY29uc3QgY29udGVudEFsaWduU3RhcnQgPSBpc1BsYW5uZXJIb21lIHx8IGlzSGVhZGVyVGFza0NvbnRleHRIb21lIHx8IGlzTGVmdEFsaWduZWRPcmNoZXN0cmF0b3JIb21lXG4gIGNvbnN0IHNob3dBZ2VudEludHJvZHVjdGlvbiA9IHNlY3Rpb24gIT09ICdwcm9qZWN0JyAmJiAhaXNNQUlBICYmICEhYWdlbnQ/LmludHJvZHVjdGlvblxuXG4gIHJldHVybiAoXG4gICAgPFNDQ0FJSG9tZUNvbnRhaW5lciBzaG93RkFRcz17c2hvd0ZBUXN9ICRhbGlnblN0YXJ0PXtpc0xlZnRBbGlnbmVkT3JjaGVzdHJhdG9ySG9tZX0+XG4gICAgICB7aG9tZVNjcm9sbGFibGVMYXlvdXQgJiYgPFNDQ0FJSG9tZUdyYWRpZW50VG9wICRzaG93PXtzaG93VG9wR3JhZGllbnR9IC8+fVxuICAgICAgPFNDQ0FJSG9tZUNvbnRlbnRcbiAgICAgICAgcmVmPXtjb250ZW50Q29udGFpbmVyUmVmfVxuICAgICAgICBzaG93RkFRcz17aG9tZVNjcm9sbGFibGVMYXlvdXR9XG4gICAgICAgICRpc0FnZW50Vmlldz17IWlzTUFJQX1cbiAgICAgICAgJGZsb2F0aW5nQ3VzdG9tQ2VudGVyPXtmbG9hdGluZ0N1c3RvbUNlbnRlcn1cbiAgICAgICAgJGNlbnRlclZlcnRpY2FsbHk9e2lzUGxhbm5lckhvbWV9XG4gICAgICAgICRhbGlnblN0YXJ0PXtpc0xlZnRBbGlnbmVkT3JjaGVzdHJhdG9ySG9tZX1cbiAgICAgICAgJGZpeGVkQ29udGVudFdpZHRoPXtmaXhlZEhvbWVDb250ZW50V2lkdGh9XG4gICAgICA+XG4gICAgICAgIDxTQ0NBSUhvbWVDb250ZW50SW5uZXJcbiAgICAgICAgICBzaG93RkFRcz17aG9tZVNjcm9sbGFibGVMYXlvdXR9XG4gICAgICAgICAgJGlzQWdlbnRWaWV3PXshaXNNQUlBfVxuICAgICAgICAgICRmbG9hdGluZ0N1c3RvbUNlbnRlcj17ZmxvYXRpbmdDdXN0b21DZW50ZXJ9XG4gICAgICAgICAgJGNlbnRlclZlcnRpY2FsbHk9e2lzUGxhbm5lckhvbWV9XG4gICAgICAgICAgJGFsaWduU3RhcnQ9e2lzSGVhZGVyVGFza0NvbnRleHRIb21lIHx8IGlzTGVmdEFsaWduZWRPcmNoZXN0cmF0b3JIb21lfVxuICAgICAgICAgICRoZWFkZXJDb2xsYWJvcmF0b3JIb21lPXtpc0hlYWRlclRhc2tDb250ZXh0SG9tZX1cbiAgICAgICAgICAkc2VjdGlvbk9yY2hlc3RyYXRvckhvbWU9e2lzTGVmdEFsaWduZWRPcmNoZXN0cmF0b3JIb21lfVxuICAgICAgICA+XG4gICAgICAgICAgPFNDQ0FJSG9tZUhlYWRlclxuICAgICAgICAgICAgJGdhcD17c2hvd0FnZW50SW50cm9kdWN0aW9uID8gJzIwcHgnIDogJzAnfVxuICAgICAgICAgICAgJG1heFdpZHRoPXtpc01BSUEgPyAnMTAwJScgOiAnMzgwcHgnfVxuICAgICAgICAgICAgJGlzQWdlbnRWaWV3PXshaXNNQUlBfVxuICAgICAgICAgICAgJGFsaWduPXtjb250ZW50QWxpZ25TdGFydCA/ICdzdGFydCcgOiAnY2VudGVyJ31cbiAgICAgICAgICA+XG4gICAgICAgICAgICB7cmVuZGVySGVhZGVyQ29udGVudCgpfVxuXG4gICAgICAgICAgICB7c2hvd0FnZW50SW50cm9kdWN0aW9uID8gKFxuICAgICAgICAgICAgICA8U0NDQUlIb21lSW50cm9kdWN0aW9uIGV4cGFuZGVkPXtleHBhbmRlZH0+e2FnZW50LmludHJvZHVjdGlvbn08L1NDQ0FJSG9tZUludHJvZHVjdGlvbj5cbiAgICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICAgIDwvU0NDQUlIb21lSGVhZGVyPlxuICAgICAgICAgIHtzaG93UHJvamVjdFN1bW1hcnlDYXJkICYmIChcbiAgICAgICAgICAgIDxTQ0NBSFdyYXBwZXJTdW1tYXJ5UHJvamVjdCBvbkNsaWNrPXtoYW5kbGVycy5wcm9qZWN0U3VtbWFyeX0+XG4gICAgICAgICAgICAgIDxTQ0NBSUhvbWVQcm9qZWN0U3VtbWFyeT5cbiAgICAgICAgICAgICAgICA8VGVtcGxhdGVHcmFkaWVudEljb24gaGVpZ2h0PXsyNH0gd2lkdGg9ezI0fSAvPlxuICAgICAgICAgICAgICA8L1NDQ0FJSG9tZVByb2plY3RTdW1tYXJ5PlxuICAgICAgICAgICAgICA8U0NDQUlIb21lUHJvamVjdFN1bW1hcnlDb250ZW50PlxuICAgICAgICAgICAgICAgIDxTQ0NBSUhvbWVQcm9qZWN0U3VtbWFyeVRpdGxlPnt0KCdob21lTWVudS5wcm9qZWN0U3VtbWFyeS50aXRsZScpfTwvU0NDQUlIb21lUHJvamVjdFN1bW1hcnlUaXRsZT5cbiAgICAgICAgICAgICAgICA8U0NDQUlIb21lUHJvamVjdFN1bW1hcnlEZXNjcmlwdGlvbj5cbiAgICAgICAgICAgICAgICAgIHt0KCdob21lTWVudS5wcm9qZWN0U3VtbWFyeS5kZXNjcmlwdGlvbicpfVxuICAgICAgICAgICAgICAgIDwvU0NDQUlIb21lUHJvamVjdFN1bW1hcnlEZXNjcmlwdGlvbj5cbiAgICAgICAgICAgICAgPC9TQ0NBSUhvbWVQcm9qZWN0U3VtbWFyeUNvbnRlbnQ+XG4gICAgICAgICAgICA8L1NDQ0FIV3JhcHBlclN1bW1hcnlQcm9qZWN0PlxuICAgICAgICAgICl9XG4gICAgICAgICAge3Nob3dEeW5hbWljU2VjdGlvbiAmJiAoXG4gICAgICAgICAgICA8U0NDQUlIb21lRHluYW1pY1NlY3Rpb25cbiAgICAgICAgICAgICAgJGdyb3c9e2lzTWFpYWtlcn1cbiAgICAgICAgICAgICAgJGFsaWduU3RhcnQ9e2lzSGVhZGVyVGFza0NvbnRleHRIb21lIHx8IGlzTGVmdEFsaWduZWRPcmNoZXN0cmF0b3JIb21lfVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7c2hvdWxkU2hvd1BsYW5uZXJGdWFzID8gKFxuICAgICAgICAgICAgICAgIDxGcmVxdWVudGx5VXNlZEFjdGlvbnNcbiAgICAgICAgICAgICAgICAgIHZhcmlhbnQ9XCJwbGFubmVyXCJcbiAgICAgICAgICAgICAgICAgIG9uU3RhcnRDaGF0PXtoYW5kbGVIb21lU3RhcnRDaGF0fVxuICAgICAgICAgICAgICAgICAgYWdlbnRJZD17YWdlbnQ/LmlkfVxuICAgICAgICAgICAgICAgICAgaXNTY3JvbGxpbmc9e2lzU2Nyb2xsaW5nfVxuICAgICAgICAgICAgICAgICAgYWN0aW9ucz17aGVhZGVySG91cnNGdWFzfVxuICAgICAgICAgICAgICAgICAgbG9hZGluZz17aGVhZGVySG91cnNGdWFzTG9hZGluZ31cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICAgICAge3JlbmRlclJlY2VudENvbnRleHRzKCl9XG4gICAgICAgICAgICAgIHtzaG91bGRTaG93RmFxcyAmJiAoXG4gICAgICAgICAgICAgICAgPEZyZXF1ZW50bHlBc2tlZFF1ZXN0aW9uc1xuICAgICAgICAgICAgICAgICAgb25TdGFydENoYXQ9e29uU3RhcnRDaGF0fVxuICAgICAgICAgICAgICAgICAgc2hvd0ZBUXM9e3Nob3dGQVFzfVxuICAgICAgICAgICAgICAgICAgc2hvd1Byb2plY3RTdW1tYXJ5PXtzaG93UHJvamVjdFN1bW1hcnl9XG4gICAgICAgICAgICAgICAgICBhZ2VudElkPXthZ2VudD8uaWR9XG4gICAgICAgICAgICAgICAgICBsYW5nPXtsYW5nfVxuICAgICAgICAgICAgICAgICAgaXNTY3JvbGxpbmc9e2lzU2Nyb2xsaW5nfVxuICAgICAgICAgICAgICAgICAgZmFxcz17ZmFxc31cbiAgICAgICAgICAgICAgICAgIGxvYWRpbmc9e2ZhcXNBcmVMb2FkaW5nfVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgIHtzaG91bGRTaG93RnVhcyAmJiAoXG4gICAgICAgICAgICAgICAgPEZyZXF1ZW50bHlVc2VkQWN0aW9uc1xuICAgICAgICAgICAgICAgICAgb25TdGFydENoYXQ9e29uU3RhcnRDaGF0fVxuICAgICAgICAgICAgICAgICAgYWdlbnRJZD17YWdlbnQ/LmlkfVxuICAgICAgICAgICAgICAgICAgaXNTY3JvbGxpbmc9e2lzU2Nyb2xsaW5nfVxuICAgICAgICAgICAgICAgICAgYWN0aW9ucz17ZnVhc31cbiAgICAgICAgICAgICAgICAgIGxvYWRpbmc9e2Z1YXNBcmVMb2FkaW5nfVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgIHtpc01haWFrZXIgPyA8Q2hhdEFJSG9tZU1haWFrZXIgb25TdGFydENoYXQ9e29uU3RhcnRDaGF0fSAvPiA6IG51bGx9XG4gICAgICAgICAgICA8L1NDQ0FJSG9tZUR5bmFtaWNTZWN0aW9uPlxuICAgICAgICAgICl9XG4gICAgICAgIDwvU0NDQUlIb21lQ29udGVudElubmVyPlxuICAgICAgPC9TQ0NBSUhvbWVDb250ZW50PlxuICAgICAge2hvbWVTY3JvbGxhYmxlTGF5b3V0ICYmIDxTQ0NBSUhvbWVHcmFkaWVudEJvdHRvbSAkc2hvdz17c2hvd0JvdHRvbUdyYWRpZW50fSAvPn1cbiAgICA8L1NDQ0FJSG9tZUNvbnRhaW5lcj5cbiAgKVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7O0FBQUE7QUFDQTtBQUNBO0FBQ0EsU0FBU0EsU0FBUyxFQUFFQyxlQUFlLEVBQUVDLE1BQU0sRUFBRUMsUUFBUSxFQUFFQyxXQUFXLEVBQUVDLE9BQU8sUUFBUSxPQUFPO0FBQzFGLFNBQVNDLFNBQVMsUUFBUSxXQUFXO0FBRXJDLFNBQVNDLE9BQU8sUUFBUSw4Q0FBOEM7QUFDdEUsU0FBU0MsYUFBYSxRQUFRLGdEQUFnRDtBQUM5RSxTQUFTQyxJQUFJLFFBQVEscUJBQXFCO0FBQzFDLFNBQVNDLE1BQU0sRUFBRUMsUUFBUSxRQUFRLHlCQUF5QjtB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
|
|
632
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1c2VFZmZlY3QiLCJ1c2VMYXlvdXRFZmZlY3QiLCJ1c2VSZWYiLCJ1c2VTdGF0ZSIsInVzZUNhbGxiYWNrIiwidXNlTWVtbyIsImZsdXNoU3luYyIsIlRvb2x0aXAiLCJMaXN0Q2hlY2tsaXN0IiwidXNlVCIsIkVWRU5UUyIsInVzZUV2ZW50IiwiU0NDQUlIb21lQ29udGFpbmVyIiwiU0NDQUlIb21lQ29udGVudCIsIlNDQ0FJSG9tZUNvbnRlbnRJbm5lciIsIlNDQ0FJSG9tZUdyYWRpZW50VG9wIiwiU0NDQUlIb21lR3JhZGllbnRCb3R0b20iLCJTQ0NBSUhvbWVIZWFkZXIiLCJTQ0NBSUhvbWVHcmVldGluZyIsIlNDQ0FJSG9tZUFnZW50SW5mb0NvbnRhaW5lciIsIlNDQ0FJSG9tZUFnZW50SW5mbyIsIlNDQ0FJSG9tZVByb2plY3RTdW1tYXJ5IiwiU0NDQUlIb21lUHJvamVjdFN1bW1hcnlDb250ZW50IiwiU0NDQUlIb21lUHJvamVjdFN1bW1hcnlUaXRsZSIsIlNDQ0FJSG9tZVByb2plY3RTdW1tYXJ5RGVzY3JpcHRpb24iLCJTQ0NBSFdyYXBwZXJTdW1tYXJ5UHJvamVjdCIsIlNDQ0FJSG9tZUludHJvZHVjdGlvbiIsIlNDQ0FJSG9tZUNyZWF0ZWRCeUNvbnRhaW5lciIsIlNDQ0FJSG9tZUNyZWF0ZWRCeVRleHQiLCJTQ0NBSUhvbWVDcmVhdGVkQnlUZXh0TmFtZSIsIlNDQ0FJSG9tZUljb25Db250YWluZXIiLCJTQ0NBSUhvbWVMb2dvV3JhcHBlciIsIlNDQ0FJSG9tZU1haWFIZWFkZXJTdGFjayIsIlNDQ0FJSG9tZVRpdGxlIiwiU0NDQUlIb21lVGl0bGVCbG9jayIsIlNDQ0FJSG9tZVN1YnRpdGxlIiwiU0NDQUlIb21lRHluYW1pY1NlY3Rpb24iLCJTQ0NBSUhvbWVSZWNlbnRDb250ZXh0cyIsIlNDQ0FJSG9tZVJlY2VudENvbnRleHRzTGlzdCIsIlNDQ0FJSG9tZVJlY2VudENvbnRleHRzU2VjdGlvbkhlYWRlciIsIlNDQ0FJSG9tZVJlY2VudENvbnRleHRzU2VjdGlvblRpdGxlIiwiU0NDQUlIb21lUmVjZW50Q29udGV4dHNTZWN0aW9uU3VidGl0bGUiLCJTQ0NBSUhvbWVSZWNlbnRDb250ZXh0UGlsbCIsIlNDQ0FJSG9tZVJlY2VudENvbnRleHRQaWxsSWNvbiIsIlNDQ0FJSG9tZVJlY2VudENvbnRleHRQaWxsVGV4dCIsIlNDQ0FJSG9tZVJlY2VudENvbnRleHRQaWxsU2tlbGV0b24iLCJNQUlBX0hFQURFUl9DT0xMQUJPUkFUT1JfSE9NRV9DT05URU5UX1dJRFRIX1BYIiwidXNlR2xvYmFsQ29udGV4dCIsInVzZVVzZXIiLCJpc0NvbGxhYm9yYXRvclJvbGUiLCJpc01hbmFnZXJSb2xlIiwidXNlUmVzaXplTGlzdGVuZXIiLCJnZXRDb250ZXh0TWVudGlvbkljb24iLCJvcmNoZXN0cmF0b3JIYXNIb3Vyc1N1YmFnZW50IiwidmFsaWRhdGVJc01haWEiLCJpc01haWFrZXJBZ2VudCIsIkZyZXF1ZW50bHlBc2tlZFF1ZXN0aW9ucyIsIkZyZXF1ZW50bHlVc2VkQWN0aW9ucyIsInVzZUZyZXF1ZW50bHlVc2VkQWN0aW9ucyIsInNvcnRNYW5hZ2VySG91cnNIb21lRnVhcyIsInJlc29sdmVSZWNlbnRDb250ZXh0c0hvbWVMaW1pdCIsInVzZUZyZXF1ZW50bHlBc2tlZFF1ZXN0aW9ucyIsInVzZVJlY2VudENvbnRleHRzIiwiTUFJQUlzb2xvZ28iLCJUZW1wbGF0ZUdyYWRpZW50SWNvbiIsIkNoYXRBSUhvbWVNYWlha2VyIiwicmVzb2x2ZUFjdGl2ZUNvbnRleHRGcm9tR2xvYmFsIiwicmVzb2x2ZUFsbG93ZWRSZWNlbnRDb250ZXh0VHlwZXMiLCJyZXNvbHZlRmFxc0NvbnRleHRFbnRpdHlUeXBlIiwicmVzb2x2ZUZ1YXNTZWN0aW9uIiwicmVzb2x2ZUhhc1Bpbm5lZENvbnRleHQiLCJyZXNvbHZlSGVhZGVyVGFza0NvbnRleHRTdWJ0aXRsZUtleSIsInJlc29sdmVIb21lR3JlZXRpbmciLCJyZXNvbHZlSG9tZVNjcm9sbEdyYWRpZW50cyIsInJlc29sdmVNYWlhSG9tZUxhbmciLCJyZXNvbHZlT3JjaGVzdHJhdG9ySG9tZUxheW91dCIsInJlc29sdmVQaW5uZWRFbnRpdHlUeXBlIiwicmVzb2x2ZVByb2plY3RTdW1tYXJ5RmVhdHVyZUFjY2VzcyIsInJlc29sdmVSZWFsTGlzdHNBZ2VudElkIiwicmVzb2x2ZVJlYWxMaXN0c0VudGl0eVR5cGUiLCJyZXNvbHZlUmVjZW50Q29udGV4dFBpbk91dGNvbWUiLCJyZXNvbHZlU2hvdWxkU2hvd0ZhcXMiLCJyZXNvbHZlU2hvdWxkU2hvd0Z1YXMiLCJyZXNvbHZlRmxvYXRpbmdDdXN0b21DZW50ZXIiLCJmaWx0ZXJSZWNlbnRDb250ZXh0c0J5VHlwZXMiLCJidWlsZFJlY2VudENvbnRleHRTa2VsZXRvbktleXMiLCJyZXNvbHZlU2hvd1JlY2VudENvbnRleHRzQmxvY2siLCJyZXNvbHZlUGxhbm5lckZ1YXNWaXNpYmlsaXR5IiwicmVzb2x2ZUhvbWVEeW5hbWljUGFuZWxWaXNpYmlsaXR5IiwicmVzb2x2ZU1haWFIZWFkZXJTdGFja0xheW91dCIsInJlc29sdmVTaG93QWdlbnRJbnRyb2R1Y3Rpb24iLCJidWlsZEZhcXNGZXRjaEtleSIsInNob3VsZFJlZmV0Y2hGYXFzIiwic2hvdWxkQ2xlYXJQaW5uZWRDb250ZXh0T25Ib21lU3RhcnQiLCJyZXNvbHZlUmVjZW50Q29udGV4dHNTZWN0aW9uQ29weUtleXMiLCJyZXNvbHZlT3JjaGVzdHJhdG9yUmVjZW50Q29udGV4dHNTdWJ0aXRsZUtleSIsImJ1aWxkUGluR2xvYmFsQ29udGV4dFBhdGNoIiwicmVzb2x2ZUhvbWVDb250ZXh0R3JlZXRpbmdLZXkiLCJzaG91bGRDaGVja0hvbWVTY3JvbGwiLCJzaG91bGRPYnNlcnZlSG9tZVNjcm9sbENvbnRlbnQiLCJzaG91bGRSZW5kZXJSZWNlbnRDb250ZXh0c1BhbmVsIiwic2hvdWxkUmVzZXRIb21lU2Nyb2xsR3JhZGllbnRzIiwianN4IiwiX2pzeCIsImpzeHMiLCJfanN4cyIsIkZyYWdtZW50IiwiX0ZyYWdtZW50IiwiRnJlcXVlbnRRdWVzdGlvbnMiLCJSRUNFTlRfQ09OVEVYVF9JQ09OX0NPTE9SIiwiUkVDRU5UX0NPTlRFWFRfSUNPTl9TSVpFX1BYIiwiUmVjZW50Q29udGV4dFBpbGwiLCJfcmVmIiwiY29udGV4dCIsImxhYmVsIiwib25DbGljayIsIl9yZWYkZnVsbFdpZHRoIiwiZnVsbFdpZHRoIiwidGV4dFJlZiIsIl91c2VSZXNpemVMaXN0ZW5lciIsInNob3dUb29sdGlwIiwidHlwZSIsIiRmdWxsV2lkdGgiLCJjaGlsZHJlbiIsImNvbG9yIiwid2lkdGgiLCJoZWlnaHQiLCJ1bmRlZmluZWQiLCJyZWYiLCJ0aXRsZSIsIkNoYXRBSUhvbWUiLCJfcmVmMiIsImhhbmRsZXJzIiwib25TdGFydENoYXQiLCJleHBhbmRlZCIsImZsb2F0aW5nIiwiX3VzZVQiLCJ0IiwiaTE4biIsImV2ZW50IiwidXNlciIsIl91c2VHbG9iYWxDb250ZXh0IiwiYWdlbnQiLCJzZWN0aW9uIiwiY2xpZW50IiwicHJvamVjdCIsInRhc2siLCJjaGlwc1Byb2plY3QiLCJzZXRDbGllbnQiLCJzZXRQcm9qZWN0Iiwic2V0VGFzayIsInNldENoaXBzUHJvamVjdCIsImlzTUFJQSIsImZsb2F0aW5nQ3VzdG9tQ2VudGVyIiwibGFuZyIsImxhbmd1YWdlIiwic3VtbWFyeVByb2plY3RBY2Nlc3MiLCJ3aW5kb3ciLCJmYXFzQWNjZXNzIiwic2hvd1Byb2plY3RTdW1tYXJ5IiwiaXNNYWlha2VyIiwiaGFzSG91cnNTdWJhZ2VudCIsImhhc1Bpbm5lZENvbnRleHQiLCJ0YXNrSWQiLCJpZCIsImNoaXBzUHJvamVjdElkIiwicHJvamVjdElkIiwiY2xpZW50SWQiLCJfcmVzb2x2ZU9yY2hlc3RyYXRvckgiLCJhZ2VudFR5cGUiLCJpc01haWEiLCJyb2xlSWQiLCJyb2xlX2lkIiwiaXNIZWFkZXJIb21lIiwiaXNPcmNoZXN0cmF0b3IiLCJpc1BsYW5uZXJIb21lIiwiaXNSZWNlbnRDb250ZXh0c1N0ZXAiLCJpc0hlYWRlclRhc2tDb250ZXh0SG9tZSIsImlzSGVhZGVySG91cnNBZ2VudEhvbWUiLCJpc0hlYWRlck1hbmFnZXJIb3Vyc0hvbWUiLCJpc0NvbnRleHRIb21lU3RlcCIsImlzTGVmdEFsaWduZWRPcmNoZXN0cmF0b3JIb21lIiwiaGVhZGVyVGFza0NvbnRleHRTdWJ0aXRsZUtleSIsImlzTWFuYWdlciIsImFsbG93ZWRSZWNlbnRDb250ZXh0VHlwZXMiLCJfdXNlU3RhdGUiLCJfdXNlU3RhdGUyIiwiX3NsaWNlZFRvQXJyYXkiLCJzZWxlY3RlZENvbnRleHQiLCJzZXRTZWxlY3RlZENvbnRleHQiLCJhY3RpdmVDb250ZXh0IiwibmFtZSIsInByb2plY3ROYW1lIiwicGlubmVkRW50aXR5VHlwZSIsImZhcXNDb250ZXh0RW50aXR5VHlwZSIsImFjdGl2ZUNvbnRleHRUeXBlIiwiaXNDbGllbnRDb250ZXh0Rm9yRmFxcyIsImZ1YXNTZWN0aW9uIiwicmVhbExpc3RzQWdlbnRJZCIsImFnZW50SWQiLCJyZWFsTGlzdHNFbnRpdHlUeXBlIiwiX3VzZUZyZXF1ZW50bHlVc2VkQWN0IiwiYWdlbnRGdWFzIiwiYWN0aW9ucyIsImZ1YXNMb2FkaW5nIiwibG9hZGluZyIsIl91c2VGcmVxdWVudGx5VXNlZEFjdDIiLCJjb2xsYWJvcmF0b3JQbGFubmVyRnVhcyIsImNvbGxhYm9yYXRvclBsYW5uZXJGdWFzTG9hZGluZyIsIl91c2VGcmVxdWVudGx5VXNlZEFjdDMiLCJtYW5hZ2VySG9tZUZ1YXMiLCJtYW5hZ2VySG9tZUZ1YXNMb2FkaW5nIiwiaGVhZGVySG91cnNGdWFzIiwiaGVhZGVySG91cnNGdWFzTG9hZGluZyIsInJlY2VudENvbnRleHRzTGltaXQiLCJmdWFzQ291bnQiLCJsZW5ndGgiLCJfdXNlUmVjZW50Q29udGV4dHMiLCJlbmFibGVkIiwibGltaXQiLCJmZXRjaGVkUmVjZW50Q29udGV4dHMiLCJjb250ZXh0cyIsInJlY2VudENvbnRleHRzTG9hZGluZyIsInJlY2VudENvbnRleHRzIiwicmVjZW50Q29udGV4dFNrZWxldG9uS2V5cyIsImZhcXNMaXN0QWdlbnRJZCIsImZhcXNMaXN0RW50aXR5VHlwZSIsIl91c2VGcmVxdWVudGx5QXNrZWRRdSIsImFnZW50RmFxcyIsImZhcXMiLCJmYXFzTG9hZGluZyIsImhhbmRsZUdldEZyZXF1ZW50bHlBc2tlZFF1ZXN0aW9ucyIsImZhcXNGZXRjaFJlZiIsImN1cnJlbnRLZXkiLCJsYXN0S2V5IiwiY3VycmVudCIsImVudGl0eVR5cGUiLCJmdWFzIiwiZmFxc0FyZUxvYWRpbmciLCJmdWFzQXJlTG9hZGluZyIsInNob3VsZFNob3dGYXFzIiwiZmFxc0NvdW50Iiwic2hvdWxkU2hvd0Z1YXMiLCJfcmVzb2x2ZVBsYW5uZXJGdWFzVmkiLCJoZWFkZXJIb3Vyc0Z1YXNDb3VudCIsInNob3VsZFNob3dQbGFubmVyRnVhcyIsInNob3dQcm9qZWN0U3VtbWFyeUNhcmQiLCJlbnRpdHkiLCJzaG93UmVjZW50Q29udGV4dHNCbG9jayIsIl9yZXNvbHZlSG9tZUR5bmFtaWNQYSIsInNob3dGQVFzIiwic2hvd0R5bmFtaWNTZWN0aW9uIiwiaG9tZVNjcm9sbGFibGVMYXlvdXQiLCJjb250ZW50Q29udGFpbmVyUmVmIiwiX3VzZVN0YXRlMyIsIl91c2VTdGF0ZTQiLCJzaG93VG9wR3JhZGllbnQiLCJzZXRTaG93VG9wR3JhZGllbnQiLCJfdXNlU3RhdGU1IiwiX3VzZVN0YXRlNiIsInNob3dCb3R0b21HcmFkaWVudCIsInNldFNob3dCb3R0b21HcmFkaWVudCIsIl91c2VTdGF0ZTciLCJfdXNlU3RhdGU4IiwiaXNTY3JvbGxpbmciLCJzZXRJc1Njcm9sbGluZyIsInNjcm9sbFRpbWVvdXRSZWYiLCJncmVldGluZyIsIl9hZ2VudCRpbnRyb2R1Y3Rpb24iLCJjb250ZXh0R3JlZXRpbmciLCJncmVldGluZ0tleSIsImFnZW50SW50cm9kdWN0aW9uIiwiaW50cm9kdWN0aW9uIiwiaGFuZGxlU2VsZWN0UmVjZW50Q29udGV4dCIsIm9yZGVyIiwiYWlDaGF0Q29udGV4dFNlbGVjdGVkIiwicGluT3V0Y29tZSIsImNvbnRleHRQYXRjaCIsInJlcXVlc3RBbmltYXRpb25GcmFtZSIsImRvY3VtZW50IiwiZGlzcGF0Y2hFdmVudCIsIkN1c3RvbUV2ZW50IiwiaGFuZGxlSG9tZVN0YXJ0Q2hhdCIsIm1lc3NhZ2UiLCJhdHRhY2htZW50cyIsImZhcUlkIiwiYWdlbnRTdWdnZXN0aW9uSWQiLCJtZW50aW9ucyIsImZ1YUlkIiwicmVuZGVyUmVjZW50Q29udGV4dHMiLCIkZml4ZWRDb250ZW50V2lkdGgiLCJfcmVzb2x2ZVJlY2VudENvbnRleHQiLCJ0aXRsZUtleSIsInN1YnRpdGxlS2V5IiwiJGZsdXNoUGlsbHMiLCJtYXAiLCJrZXkiLCJpbmRleCIsInRyaW0iLCJjb25jYXQiLCJjaGVja1Njcm9sbCIsImNvbnRhaW5lciIsInNjcm9sbFRvcCIsInNjcm9sbEhlaWdodCIsImNsaWVudEhlaWdodCIsImdyYWRpZW50cyIsInNob3dUb3AiLCJzaG93Qm90dG9tIiwiaGFuZGxlU2Nyb2xsIiwiY2xlYXJUaW1lb3V0Iiwic2V0VGltZW91dCIsInNjaGVkdWxlQ2hlY2tTY3JvbGwiLCJhZGRFdmVudExpc3RlbmVyIiwicmVzaXplT2JzZXJ2ZXIiLCJSZXNpemVPYnNlcnZlciIsIm9ic2VydmUiLCJzY3JvbGxDb250ZW50IiwiZmlyc3RFbGVtZW50Q2hpbGQiLCJ0aW1lb3V0SWQiLCJsYXRlVGltZW91dElkIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsImRpc2Nvbm5lY3QiLCJyZW5kZXJIZWFkZXJDb250ZW50IiwiX2FnZW50JGNyZWF0ZWRfYnkiLCJfYWdlbnQkY3JlYXRlZF9ieTIiLCJlbW9qaSIsImNyZWF0ZWRfYnkiLCJpc19kZWxldGVkIiwiX3Jlc29sdmVNYWlhSGVhZGVyU3RhIiwiaGFzR3JlZXRpbmciLCJCb29sZWFuIiwiY29udGVudEFsaWduU3RhcnQiLCJtYWlhSGVhZGVyU3RhY2tOZWVkc0dhcCIsIiRub0dhcCIsIiRhbGlnbiIsIiRzaXplIiwiZmlyc3ROYW1lIiwiJGNvbGxhYm9yYXRvckhvbWUiLCJfcmVzb2x2ZU1haWFIZWFkZXJTdGEyIiwiZml4ZWRIb21lQ29udGVudFdpZHRoQ29sbGFib3JhdG9yIiwiZml4ZWRIb21lQ29udGVudFdpZHRoIiwic2hvd0FnZW50SW50cm9kdWN0aW9uIiwiJGFsaWduU3RhcnQiLCIkc2hvdyIsIiRpc0FnZW50VmlldyIsIiRmbG9hdGluZ0N1c3RvbUNlbnRlciIsIiRjZW50ZXJWZXJ0aWNhbGx5IiwiJGhlYWRlckNvbGxhYm9yYXRvckhvbWUiLCIkc2VjdGlvbk9yY2hlc3RyYXRvckhvbWUiLCIkZ2FwIiwiJG1heFdpZHRoIiwicHJvamVjdFN1bW1hcnkiLCIkZ3JvdyIsInZhcmlhbnQiXSwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50cy9tb2xlY3VsZXMvQ2hhdEFJSG9tZS9DaGF0QUlIb21lLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSByZWFjdC9mdW5jdGlvbi1jb21wb25lbnQtZGVmaW5pdGlvbiAqL1xuLyogZXNsaW50LWRpc2FibGUganN4LWExMXkvY2xpY2stZXZlbnRzLWhhdmUta2V5LWV2ZW50cyAqL1xuLyogZXNsaW50LWRpc2FibGUganN4LWExMXkvbm8tc3RhdGljLWVsZW1lbnQtaW50ZXJhY3Rpb25zICovXG5pbXBvcnQgeyB1c2VFZmZlY3QsIHVzZUxheW91dEVmZmVjdCwgdXNlUmVmLCB1c2VTdGF0ZSwgdXNlQ2FsbGJhY2ssIHVzZU1lbW8gfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IGZsdXNoU3luYyB9IGZyb20gJ3JlYWN0LWRvbSdcblxuaW1wb3J0IHsgVG9vbHRpcCB9IGZyb20gJ0Bwcm9qZWN0Y29yL3Rvb2x0aXB2Mi9saWIvY29tcG9uZW50cy9Ub29sdGlwJ1xuaW1wb3J0IHsgTGlzdENoZWNrbGlzdCB9IGZyb20gJ0Bwcm9qZWN0Y29yL2ljb25zL2xpYi9jb21wb25lbnRzL0xpc3RDaGVja2xpc3QnXG5pbXBvcnQgeyB1c2VUIH0gZnJvbSAnLi4vLi4vLi4vaG9va3MvdXNlVCdcbmltcG9ydCB7IEVWRU5UUywgdXNlRXZlbnQgfSBmcm9tICcuLi8uLi8uLi9ob29rcy91c2VFdmVudCdcblxuaW1wb3J0IHsgb3B0aW9ucyB9IGZyb20gJy4uL0NoYXRBSU1vZGFsL2NvbnN0YW50cydcblxuaW1wb3J0IHtcbiAgU0NDQUlIb21lQ29udGFpbmVyLFxuICBTQ0NBSUhvbWVDb250ZW50LFxuICBTQ0NBSUhvbWVDb250ZW50SW5uZXIsXG4gIFNDQ0FJSG9tZUdyYWRpZW50VG9wLFxuICBTQ0NBSUhvbWVHcmFkaWVudEJvdHRvbSxcbiAgU0NDQUlIb21lSGVhZGVyLFxuICBTQ0NBSUhvbWVHcmVldGluZyxcbiAgU0NDQUlIb21lQWdlbnRJbmZvQ29udGFpbmVyLFxuICBTQ0NBSUhvbWVBZ2VudEluZm8sXG4gIFNDQ0FJSG9tZVByb2plY3RTdW1tYXJ5LFxuICBTQ0NBSUhvbWVQcm9qZWN0U3VtbWFyeUNvbnRlbnQsXG4gIFNDQ0FJSG9tZVByb2plY3RTdW1tYXJ5VGl0bGUsXG4gIFNDQ0FJSG9tZVByb2plY3RTdW1tYXJ5RGVzY3JpcHRpb24sXG4gIFNDQ0FIV3JhcHBlclN1bW1hcnlQcm9qZWN0LFxuICBTQ0NBSUhvbWVJbnRyb2R1Y3Rpb24sXG4gIFNDQ0FJSG9tZUNyZWF0ZWRCeUNvbnRhaW5lcixcbiAgU0NDQUlIb21lQ3JlYXRlZEJ5VGV4dCxcbiAgU0NDQUlIb21lQ3JlYXRlZEJ5VGV4dE5hbWUsXG4gIFNDQ0FJSG9tZUljb25Db250YWluZXIsXG4gIFNDQ0FJSG9tZUxvZ29XcmFwcGVyLFxuICBTQ0NBSUhvbWVNYWlhSGVhZGVyU3RhY2ssXG4gIFNDQ0FJSG9tZVRpdGxlLFxuICBTQ0NBSUhvbWVUaXRsZUJsb2NrLFxuICBTQ0NBSUhvbWVTdWJ0aXRsZSxcbiAgU0NDQUlIb21lRHluYW1pY1NlY3Rpb24sXG4gIFNDQ0FJSG9tZVJlY2VudENvbnRleHRzLFxuICBTQ0NBSUhvbWVSZWNlbnRDb250ZXh0c0xpc3QsXG4gIFNDQ0FJSG9tZVJlY2VudENvbnRleHRzU2VjdGlvbkhlYWRlcixcbiAgU0NDQUlIb21lUmVjZW50Q29udGV4dHNTZWN0aW9uVGl0bGUsXG4gIFNDQ0FJSG9tZVJlY2VudENvbnRleHRzU2VjdGlvblN1YnRpdGxlLFxuICBTQ0NBSUhvbWVSZWNlbnRDb250ZXh0UGlsbCxcbiAgU0NDQUlIb21lUmVjZW50Q29udGV4dFBpbGxJY29uLFxuICBTQ0NBSUhvbWVSZWNlbnRDb250ZXh0UGlsbFRleHQsXG4gIFNDQ0FJSG9tZVJlY2VudENvbnRleHRQaWxsU2tlbGV0b24sXG4gIE1BSUFfSEVBREVSX0NPTExBQk9SQVRPUl9IT01FX0NPTlRFTlRfV0lEVEhfUFgsXG59IGZyb20gJy4vc3R5bGVzJ1xuaW1wb3J0IHsgdXNlR2xvYmFsQ29udGV4dCwgdHlwZSBTZWN0aW9uIH0gZnJvbSAnLi4vLi4vLi4vY29udGV4dC9nbG9iYWwtY29udGV4dCdcbmltcG9ydCB7IHVzZVVzZXIsIGlzQ29sbGFib3JhdG9yUm9sZSwgaXNNYW5hZ2VyUm9sZSB9IGZyb20gJy4uLy4uLy4uL2NvbnRleHQvY29yLXVzZXInXG5pbXBvcnQgeyB1c2VSZXNpemVMaXN0ZW5lciB9IGZyb20gJy4uLy4uLy4uL2hvb2tzL3VzZVJlc2l6ZSdcbmltcG9ydCB7IGdldENvbnRleHRNZW50aW9uSWNvbiB9IGZyb20gJy4uLy4uLy4uL3V0aWxzL2NvbnRleHRNZW50aW9uSWNvbnMnXG5pbXBvcnQgeyBvcmNoZXN0cmF0b3JIYXNIb3Vyc1N1YmFnZW50IH0gZnJvbSAnLi4vLi4vLi4vdXRpbHMvb3JjaGVzdHJhdG9yU3ViYWdlbnRzJ1xuaW1wb3J0IHsgdmFsaWRhdGVJc01haWEgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy91dGlscy92YWxpZGF0ZUlzTWFpYSdcbmltcG9ydCB7IGlzTWFpYWtlckFnZW50IH0gZnJvbSAnLi4vLi4vLi4vdXRpbHMvYWdlbnREaXNwbGF5TmFtZSdcbmltcG9ydCB7IEFnZW50IH0gZnJvbSAnLi4vLi4vLi4vdHlwZXMvYWdlbnQnXG5pbXBvcnQgeyBBdHRhY2htZW50RmlsZSB9IGZyb20gJy4uL0NoYXRGb290ZXIvQ2hhdEZvb3RlcidcbmltcG9ydCB7IEZyZXF1ZW50bHlBc2tlZFF1ZXN0aW9ucyB9IGZyb20gJy4uLy4uL2F0b21zL0ZyZXF1ZW50bHlBc2tlZFF1ZXN0aW9ucydcbmltcG9ydCB7IEZyZXF1ZW50bHlVc2VkQWN0aW9ucyB9IGZyb20gJy4uLy4uL2F0b21zL0ZyZXF1ZW50bHlVc2VkQWN0aW9ucydcbmltcG9ydCB7IHVzZUZyZXF1ZW50bHlVc2VkQWN0aW9ucyB9IGZyb20gJy4uLy4uLy4uL2hvb2tzL3VzZUZyZXF1ZW50bHlVc2VkQWN0aW9ucydcbmltcG9ydCB7IHNvcnRNYW5hZ2VySG91cnNIb21lRnVhcyB9IGZyb20gJy4uLy4uLy4uL3V0aWxzL3NvcnRNYW5hZ2VySG91cnNIb21lRnVhcydcbmltcG9ydCB7IHJlc29sdmVSZWNlbnRDb250ZXh0c0hvbWVMaW1pdCB9IGZyb20gJy4uLy4uLy4uL3V0aWxzL3JlY2VudENvbnRleHRzSG9tZUxpbWl0J1xuaW1wb3J0IHsgdXNlRnJlcXVlbnRseUFza2VkUXVlc3Rpb25zIH0gZnJvbSAnLi4vLi4vLi4vaG9va3MvdXNlRnJlcXVlbnRseUFza2VkUXVlc3Rpb25zJ1xuaW1wb3J0IHsgdXNlUmVjZW50Q29udGV4dHMgfSBmcm9tICcuLi8uLi8uLi9ob29rcy91c2VSZWNlbnRDb250ZXh0cydcbmltcG9ydCB0eXBlIHsgUmVjZW50Q29udGV4dEl0ZW0gfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9tYWlhL1JlY2VudENvbnRleHRzJ1xuaW1wb3J0IHsgTUFJQUlzb2xvZ28gfSBmcm9tICcuLi8uLi9hdG9tcy9pY29ucy9NQUlBSXNvbG9nbydcbmltcG9ydCB7IFRlbXBsYXRlR3JhZGllbnRJY29uIH0gZnJvbSAnLi4vLi4vYXRvbXMvaWNvbnMvVGVtcGxhdGVHcmFkaWVudEljb24nXG5pbXBvcnQgeyBDaGF0QUlIb21lTWFpYWtlciB9IGZyb20gJy4vQ2hhdEFJSG9tZU1haWFrZXInXG5pbXBvcnQge1xuICByZXNvbHZlQWN0aXZlQ29udGV4dEZyb21HbG9iYWwsXG4gIHJlc29sdmVBbGxvd2VkUmVjZW50Q29udGV4dFR5cGVzLFxuICByZXNvbHZlRmFxc0NvbnRleHRFbnRpdHlUeXBlLFxuICByZXNvbHZlRnVhc1NlY3Rpb24sXG4gIHJlc29sdmVIYXNQaW5uZWRDb250ZXh0LFxuICByZXNvbHZlSGVhZGVyVGFza0NvbnRleHRTdWJ0aXRsZUtleSxcbiAgcmVzb2x2ZUhvbWVHcmVldGluZyxcbiAgcmVzb2x2ZUhvbWVTY3JvbGxHcmFkaWVudHMsXG4gIHJlc29sdmVNYWlhSG9tZUxhbmcsXG4gIHJlc29sdmVPcmNoZXN0cmF0b3JIb21lTGF5b3V0LFxuICByZXNvbHZlUGlubmVkRW50aXR5VHlwZSxcbiAgcmVzb2x2ZVByb2plY3RTdW1tYXJ5RmVhdHVyZUFjY2VzcyxcbiAgcmVzb2x2ZVJlYWxMaXN0c0FnZW50SWQsXG4gIHJlc29sdmVSZWFsTGlzdHNFbnRpdHlUeXBlLFxuICByZXNvbHZlUmVjZW50Q29udGV4dFBpbk91dGNvbWUsXG4gIHJlc29sdmVTaG91bGRTaG93RmFxcyxcbiAgcmVzb2x2ZVNob3VsZFNob3dGdWFzLFxuICByZXNvbHZlRmxvYXRpbmdDdXN0b21DZW50ZXIsXG4gIGZpbHRlclJlY2VudENvbnRleHRzQnlUeXBlcyxcbiAgYnVpbGRSZWNlbnRDb250ZXh0U2tlbGV0b25LZXlzLFxuICByZXNvbHZlU2hvd1JlY2VudENvbnRleHRzQmxvY2ssXG4gIHJlc29sdmVQbGFubmVyRnVhc1Zpc2liaWxpdHksXG4gIHJlc29sdmVIb21lRHluYW1pY1BhbmVsVmlzaWJpbGl0eSxcbiAgcmVzb2x2ZU1haWFIZWFkZXJTdGFja0xheW91dCxcbiAgcmVzb2x2ZVNob3dBZ2VudEludHJvZHVjdGlvbixcbiAgYnVpbGRGYXFzRmV0Y2hLZXksXG4gIHNob3VsZFJlZmV0Y2hGYXFzLFxuICBzaG91bGRDbGVhclBpbm5lZENvbnRleHRPbkhvbWVTdGFydCxcbiAgcmVzb2x2ZVJlY2VudENvbnRleHRzU2VjdGlvbkNvcHlLZXlzLFxuICByZXNvbHZlT3JjaGVzdHJhdG9yUmVjZW50Q29udGV4dHNTdWJ0aXRsZUtleSxcbiAgYnVpbGRQaW5HbG9iYWxDb250ZXh0UGF0Y2gsXG4gIHJlc29sdmVIb21lQ29udGV4dEdyZWV0aW5nS2V5LFxuICBzaG91bGRDaGVja0hvbWVTY3JvbGwsXG4gIHNob3VsZE9ic2VydmVIb21lU2Nyb2xsQ29udGVudCxcbiAgc2hvdWxkUmVuZGVyUmVjZW50Q29udGV4dHNQYW5lbCxcbiAgc2hvdWxkUmVzZXRIb21lU2Nyb2xsR3JhZGllbnRzLFxufSBmcm9tICcuL0NoYXRBSUhvbWUuaGVscGVycydcblxudHlwZSBDaGF0QUlIb21lUHJvcHMgPSB7XG4gIG9uU3RhcnRDaGF0OiAoXG4gICAgbWVzc2FnZTogc3RyaW5nLFxuICAgIGF0dGFjaG1lbnRzPzogQXR0YWNobWVudEZpbGVbXSB8IG51bGwsXG4gICAgZmFxSWQ/OiBzdHJpbmcsXG4gICAgYWdlbnRTdWdnZXN0aW9uSWQ/OiBzdHJpbmcsXG4gICAgbWVudGlvbnM/OiBudWxsLFxuICAgIGZ1YUlkPzogc3RyaW5nXG4gICkgPT4gdm9pZFxuICBoYW5kbGVyczogUmVjb3JkPG9wdGlvbnMsICgpID0+IHZvaWQ+XG4gIGV4cGFuZGVkPzogYm9vbGVhblxuICBmbG9hdGluZz86IGJvb2xlYW5cbn1cblxuZXhwb3J0IGVudW0gRnJlcXVlbnRRdWVzdGlvbnMge1xuICByZW50YWJpbGlkYWRfcHJveWVjdG8gPSAncmVudGFiaWxpZGFkX3Byb3llY3RvJyxcbiAgYXZhbmNlX3Byb3llY3RvID0gJ2F2YW5jZV9wcm95ZWN0bycsXG59XG5cbmNvbnN0IFJFQ0VOVF9DT05URVhUX0lDT05fQ09MT1IgPSAnIzRENEQ0RCdcbmNvbnN0IFJFQ0VOVF9DT05URVhUX0lDT05fU0laRV9QWCA9IDE1XG5cbmNvbnN0IFJlY2VudENvbnRleHRQaWxsID0gKHtcbiAgY29udGV4dCxcbiAgbGFiZWwsXG4gIG9uQ2xpY2ssXG4gIGZ1bGxXaWR0aCA9IGZhbHNlLFxufToge1xuICBjb250ZXh0OiBSZWNlbnRDb250ZXh0SXRlbVxuICBsYWJlbDogc3RyaW5nXG4gIG9uQ2xpY2s6ICgpID0+IHZvaWRcbiAgZnVsbFdpZHRoPzogYm9vbGVhblxufSkgPT4ge1xuICBjb25zdCB0ZXh0UmVmID0gdXNlUmVmPEhUTUxTcGFuRWxlbWVudD4obnVsbClcbiAgY29uc3QgeyBzaG93VG9vbHRpcCB9ID0gdXNlUmVzaXplTGlzdGVuZXIodGV4dFJlZiwgW2xhYmVsXSlcblxuICByZXR1cm4gKFxuICAgIDxTQ0NBSUhvbWVSZWNlbnRDb250ZXh0UGlsbCB0eXBlPVwiYnV0dG9uXCIgb25DbGljaz17b25DbGlja30gJGZ1bGxXaWR0aD17ZnVsbFdpZHRofT5cbiAgICAgIDxTQ0NBSUhvbWVSZWNlbnRDb250ZXh0UGlsbEljb24+XG4gICAgICAgIHtjb250ZXh0LnR5cGUgPT09ICd0YXNrJyA/IChcbiAgICAgICAgICA8TGlzdENoZWNrbGlzdCBjb2xvcj17UkVDRU5UX0NPTlRFWFRfSUNPTl9DT0xPUn0gd2lkdGg9XCIxNXB4XCIgaGVpZ2h0PVwiMTVweFwiIC8+XG4gICAgICAgICkgOiAoXG4gICAgICAgICAgZ2V0Q29udGV4dE1lbnRpb25JY29uKGNvbnRleHQudHlwZSwgUkVDRU5UX0NPTlRFWFRfSUNPTl9DT0xPUiwgdW5kZWZpbmVkLCBSRUNFTlRfQ09OVEVYVF9JQ09OX1NJWkVfUFgpXG4gICAgICAgICl9XG4gICAgICA8L1NDQ0FJSG9tZVJlY2VudENvbnRleHRQaWxsSWNvbj5cbiAgICAgIDxTQ0NBSUhvbWVSZWNlbnRDb250ZXh0UGlsbFRleHQgcmVmPXt0ZXh0UmVmfT5cbiAgICAgICAge3Nob3dUb29sdGlwID8gKFxuICAgICAgICAgIDxUb29sdGlwIHRpdGxlPXtsYWJlbH0+XG4gICAgICAgICAgICA8c3Bhbj57bGFiZWx9PC9zcGFuPlxuICAgICAgICAgIDwvVG9vbHRpcD5cbiAgICAgICAgKSA6IChcbiAgICAgICAgICBsYWJlbFxuICAgICAgICApfVxuICAgICAgPC9TQ0NBSUhvbWVSZWNlbnRDb250ZXh0UGlsbFRleHQ+XG4gICAgPC9TQ0NBSUhvbWVSZWNlbnRDb250ZXh0UGlsbD5cbiAgKVxufVxuXG5leHBvcnQgY29uc3QgQ2hhdEFJSG9tZSA9ICh7IGhhbmRsZXJzLCBvblN0YXJ0Q2hhdCwgZXhwYW5kZWQsIGZsb2F0aW5nIH06IENoYXRBSUhvbWVQcm9wcykgPT4ge1xuICBjb25zdCB7IHQsIGkxOG4gfSA9IHVzZVQoKVxuICBjb25zdCBldmVudCA9IHVzZUV2ZW50KClcbiAgY29uc3QgdXNlciA9IHVzZVVzZXIoKVxuICBjb25zdCB7IGFnZW50LCBzZWN0aW9uLCBjbGllbnQsIHByb2plY3QsIHRhc2ssIGNoaXBzUHJvamVjdCwgc2V0Q2xpZW50LCBzZXRQcm9qZWN0LCBzZXRUYXNrLCBzZXRDaGlwc1Byb2plY3QgfSA9XG4gICAgdXNlR2xvYmFsQ29udGV4dCgpXG5cbiAgY29uc3QgaXNNQUlBID0gdmFsaWRhdGVJc01haWEoYWdlbnQgYXMgQWdlbnQpXG4gIGNvbnN0IGZsb2F0aW5nQ3VzdG9tQ2VudGVyID0gcmVzb2x2ZUZsb2F0aW5nQ3VzdG9tQ2VudGVyKGZsb2F0aW5nLCBhZ2VudD8udHlwZSlcbiAgY29uc3QgbGFuZyA9IHJlc29sdmVNYWlhSG9tZUxhbmcoaTE4bi5sYW5ndWFnZSlcblxuICBjb25zdCBzdW1tYXJ5UHJvamVjdEFjY2VzcyA9IHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHJlc29sdmVQcm9qZWN0U3VtbWFyeUZlYXR1cmVBY2Nlc3Mod2luZG93KVxuICBjb25zdCBmYXFzQWNjZXNzID0gdHJ1ZVxuICBjb25zdCBzaG93UHJvamVjdFN1bW1hcnkgPSAhIShpc01BSUEgJiYgc3VtbWFyeVByb2plY3RBY2Nlc3MpXG4gIC8vIEVsIG9yY2hlc3RyYXRvciAodHlwZSA9PT0gJ29yY2hlc3RyYXRvcicpIG11ZXN0cmEgRkFRcy9GVUFzIGFncmVnYWRhcyBkZSBzdXMgc3ViYWdlbnRlcyxcbiAgLy8gYXPDrSBxdWUgTk8gc2UgdHJhdGEgY29tbyBtYWlha2VyIGFjw6EuXG4gIGNvbnN0IGlzTWFpYWtlciA9IGlzTWFpYWtlckFnZW50KGFnZW50KVxuICBjb25zdCBoYXNIb3Vyc1N1YmFnZW50ID0gb3JjaGVzdHJhdG9ySGFzSG91cnNTdWJhZ2VudChhZ2VudClcbiAgY29uc3QgaGFzUGlubmVkQ29udGV4dCA9IHJlc29sdmVIYXNQaW5uZWRDb250ZXh0KHtcbiAgICB0YXNrSWQ6IHRhc2s/LmlkLFxuICAgIGNoaXBzUHJvamVjdElkOiBjaGlwc1Byb2plY3Q/LnByb2plY3RJZCxcbiAgICBjbGllbnRJZDogY2xpZW50Py5pZCxcbiAgICBwcm9qZWN0SWQ6IHByb2plY3Q/LmlkLFxuICB9KVxuICBjb25zdCB7XG4gICAgaXNIZWFkZXJIb21lLFxuICAgIGlzT3JjaGVzdHJhdG9yLFxuICAgIGlzUGxhbm5lckhvbWUsXG4gICAgaXNSZWNlbnRDb250ZXh0c1N0ZXAsXG4gICAgaXNIZWFkZXJUYXNrQ29udGV4dEhvbWUsXG4gICAgaXNIZWFkZXJIb3Vyc0FnZW50SG9tZSxcbiAgICBpc0hlYWRlck1hbmFnZXJIb3Vyc0hvbWUsXG4gICAgaXNDb250ZXh0SG9tZVN0ZXAsXG4gICAgaXNMZWZ0QWxpZ25lZE9yY2hlc3RyYXRvckhvbWUsXG4gIH0gPSByZXNvbHZlT3JjaGVzdHJhdG9ySG9tZUxheW91dCh7XG4gICAgc2VjdGlvbixcbiAgICBhZ2VudFR5cGU6IGFnZW50Py50eXBlLFxuICAgIGlzTWFpYTogaXNNQUlBLFxuICAgIGhhc0hvdXJzU3ViYWdlbnQsXG4gICAgcm9sZUlkOiB1c2VyLnJvbGVfaWQsXG4gICAgaGFzUGlubmVkQ29udGV4dCxcbiAgfSlcbiAgY29uc3QgaGVhZGVyVGFza0NvbnRleHRTdWJ0aXRsZUtleSA9IHJlc29sdmVIZWFkZXJUYXNrQ29udGV4dFN1YnRpdGxlS2V5KHtcbiAgICBpc0hlYWRlckhvdXJzQWdlbnRIb21lLFxuICAgIGlzSGVhZGVyTWFuYWdlckhvdXJzSG9tZSxcbiAgICBpc01hbmFnZXI6IGlzTWFuYWdlclJvbGUodXNlci5yb2xlX2lkKSxcbiAgfSlcbiAgY29uc3QgYWxsb3dlZFJlY2VudENvbnRleHRUeXBlcyA9IHVzZU1lbW8oXG4gICAgKCkgPT5cbiAgICAgIHJlc29sdmVBbGxvd2VkUmVjZW50Q29udGV4dFR5cGVzKHtcbiAgICAgICAgaXNIZWFkZXJNYW5hZ2VySG91cnNIb21lLFxuICAgICAgICBpc0hlYWRlclRhc2tDb250ZXh0SG9tZSxcbiAgICAgICAgcm9sZUlkOiB1c2VyLnJvbGVfaWQsXG4gICAgICB9KSxcbiAgICBbdXNlci5yb2xlX2lkLCBpc0hlYWRlck1hbmFnZXJIb3Vyc0hvbWUsIGlzSGVhZGVyVGFza0NvbnRleHRIb21lXVxuICApXG5cbiAgLy8gQ29udGV4dG8gYWN0aXZvIHBhcmEgZGVyaXZhciBGQVFzL2FjY2lvbmVzIChwYXNvIDIpLiBQcmVmZXJpbW9zIGVsIHBpbGwgY2xpY2tlYWRvO1xuICAvLyBzaSBubywgbG8gcmVjb25zdHJ1aW1vcyBkZXNkZSBlbCBjb250ZXh0byBnbG9iYWwuXG4gIGNvbnN0IFtzZWxlY3RlZENvbnRleHQsIHNldFNlbGVjdGVkQ29udGV4dF0gPSB1c2VTdGF0ZTxSZWNlbnRDb250ZXh0SXRlbSB8IG51bGw+KG51bGwpXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFoYXNQaW5uZWRDb250ZXh0KSBzZXRTZWxlY3RlZENvbnRleHQobnVsbClcbiAgfSwgW2hhc1Bpbm5lZENvbnRleHRdKVxuXG4gIGNvbnN0IGFjdGl2ZUNvbnRleHQgPSB1c2VNZW1vPFJlY2VudENvbnRleHRJdGVtIHwgbnVsbD4oXG4gICAgKCkgPT5cbiAgICAgIHJlc29sdmVBY3RpdmVDb250ZXh0RnJvbUdsb2JhbCh7XG4gICAgICAgIGlzQ29udGV4dEhvbWVTdGVwLFxuICAgICAgICBzZWxlY3RlZENvbnRleHQsXG4gICAgICAgIHRhc2s6IHRhc2s/LmlkID8geyBpZDogdGFzay5pZCwgbmFtZTogdGFzay5uYW1lIH0gOiBudWxsLFxuICAgICAgICBjaGlwc1Byb2plY3Q6IGNoaXBzUHJvamVjdD8ucHJvamVjdElkXG4gICAgICAgICAgPyB7IHByb2plY3RJZDogY2hpcHNQcm9qZWN0LnByb2plY3RJZCwgcHJvamVjdE5hbWU6IGNoaXBzUHJvamVjdC5wcm9qZWN0TmFtZSB9XG4gICAgICAgICAgOiBudWxsLFxuICAgICAgICBjbGllbnQ6IGNsaWVudD8uaWQgPyB7IGlkOiBjbGllbnQuaWQsIG5hbWU6IGNsaWVudC5uYW1lIH0gOiBudWxsLFxuICAgICAgfSksXG4gICAgW1xuICAgICAgc2VsZWN0ZWRDb250ZXh0LFxuICAgICAgaXNDb250ZXh0SG9tZVN0ZXAsXG4gICAgICB0YXNrPy5pZCxcbiAgICAgIHRhc2s/Lm5hbWUsXG4gICAgICBjaGlwc1Byb2plY3Q/LnByb2plY3RJZCxcbiAgICAgIGNoaXBzUHJvamVjdD8ucHJvamVjdE5hbWUsXG4gICAgICBjbGllbnQ/LmlkLFxuICAgICAgY2xpZW50Py5uYW1lLFxuICAgIF1cbiAgKVxuXG4gIGNvbnN0IHBpbm5lZEVudGl0eVR5cGUgPSB1c2VNZW1vKFxuICAgICgpID0+XG4gICAgICByZXNvbHZlUGlubmVkRW50aXR5VHlwZSh7XG4gICAgICAgIHRhc2tJZDogdGFzaz8uaWQsXG4gICAgICAgIGNoaXBzUHJvamVjdElkOiBjaGlwc1Byb2plY3Q/LnByb2plY3RJZCxcbiAgICAgICAgY2xpZW50SWQ6IGNsaWVudD8uaWQsXG4gICAgICAgIHByb2plY3RJZDogcHJvamVjdD8uaWQsXG4gICAgICB9KSxcbiAgICBbdGFzaz8uaWQsIGNoaXBzUHJvamVjdD8ucHJvamVjdElkLCBwcm9qZWN0Py5pZCwgY2xpZW50Py5pZF1cbiAgKVxuXG4gIGNvbnN0IGZhcXNDb250ZXh0RW50aXR5VHlwZSA9IHVzZU1lbW8oXG4gICAgKCkgPT5cbiAgICAgIHJlc29sdmVGYXFzQ29udGV4dEVudGl0eVR5cGUoe1xuICAgICAgICBpc1BsYW5uZXJIb21lLFxuICAgICAgICBpc1JlY2VudENvbnRleHRzU3RlcCxcbiAgICAgICAgaXNIZWFkZXJIb21lLFxuICAgICAgICBpc0NvbnRleHRIb21lU3RlcCxcbiAgICAgICAgYWN0aXZlQ29udGV4dFR5cGU6IGFjdGl2ZUNvbnRleHQ/LnR5cGUsXG4gICAgICAgIHBpbm5lZEVudGl0eVR5cGUsXG4gICAgICB9KSxcbiAgICBbaXNQbGFubmVySG9tZSwgaXNSZWNlbnRDb250ZXh0c1N0ZXAsIGlzSGVhZGVySG9tZSwgaXNDb250ZXh0SG9tZVN0ZXAsIGFjdGl2ZUNvbnRleHQ/LnR5cGUsIHBpbm5lZEVudGl0eVR5cGVdXG4gIClcbiAgY29uc3QgaXNDbGllbnRDb250ZXh0Rm9yRmFxcyA9IGZhcXNDb250ZXh0RW50aXR5VHlwZSA9PT0gJ2NsaWVudCdcbiAgLy8gYHNlY3Rpb25gIHF1ZSBzZSBjb25zdWx0YSBwYXJhIGxhcyBGVUFzOiBlbiBuby1oZWFkZXIgc2lndWUgZWwgdGlwbyBkZSBjb250ZXh0byBwaW5lYWRvLlxuICAvLyBFbiBwbGFubmVyIHNlIGZ1ZXJ6YSBsYSBzZWN0aW9uIEFQSSBgcGxhbm5lcmAuXG4gIGNvbnN0IGZ1YXNTZWN0aW9uOiBTZWN0aW9uID0gcmVzb2x2ZUZ1YXNTZWN0aW9uKHtcbiAgICBpc1BsYW5uZXJIb21lLFxuICAgIGlzSGVhZGVySG9tZSxcbiAgICBwaW5uZWRFbnRpdHlUeXBlLFxuICAgIHNlY3Rpb24sXG4gIH0pXG5cbiAgY29uc3QgcmVhbExpc3RzQWdlbnRJZCA9IHJlc29sdmVSZWFsTGlzdHNBZ2VudElkKHtcbiAgICBpc01haWE6IGlzTUFJQSxcbiAgICBpc01haWFrZXIsXG4gICAgaXNSZWNlbnRDb250ZXh0c1N0ZXAsXG4gICAgaXNIZWFkZXJIb21lLFxuICAgIGlzQ29udGV4dEhvbWVTdGVwLFxuICAgIGFnZW50SWQ6IGFnZW50Py5pZCxcbiAgfSlcbiAgY29uc3QgcmVhbExpc3RzRW50aXR5VHlwZSA9IHJlc29sdmVSZWFsTGlzdHNFbnRpdHlUeXBlKHtcbiAgICBpc1BsYW5uZXJIb21lLFxuICAgIGlzSGVhZGVySG9tZSxcbiAgICBpc0NvbnRleHRIb21lU3RlcCxcbiAgICBhY3RpdmVDb250ZXh0VHlwZTogYWN0aXZlQ29udGV4dD8udHlwZSxcbiAgICBwaW5uZWRFbnRpdHlUeXBlLFxuICB9KVxuICBjb25zdCB7IGFjdGlvbnM6IGFnZW50RnVhcywgbG9hZGluZzogZnVhc0xvYWRpbmcgfSA9IHVzZUZyZXF1ZW50bHlVc2VkQWN0aW9ucyhcbiAgICByZWFsTGlzdHNBZ2VudElkLFxuICAgIGZ1YXNTZWN0aW9uLFxuICAgIHJlYWxMaXN0c0VudGl0eVR5cGVcbiAgKVxuICBjb25zdCB7IGFjdGlvbnM6IGNvbGxhYm9yYXRvclBsYW5uZXJGdWFzLCBsb2FkaW5nOiBjb2xsYWJvcmF0b3JQbGFubmVyRnVhc0xvYWRpbmcgfSA9IHVzZUZyZXF1ZW50bHlVc2VkQWN0aW9ucyhcbiAgICBpc0hlYWRlckhvdXJzQWdlbnRIb21lICYmICFpc0hlYWRlck1hbmFnZXJIb3Vyc0hvbWUgPyBhZ2VudD8uaWQgOiB1bmRlZmluZWQsXG4gICAgJ3BsYW5uZXInXG4gIClcbiAgY29uc3QgeyBhY3Rpb25zOiBtYW5hZ2VySG9tZUZ1YXMsIGxvYWRpbmc6IG1hbmFnZXJIb21lRnVhc0xvYWRpbmcgfSA9IHVzZUZyZXF1ZW50bHlVc2VkQWN0aW9ucyhcbiAgICBpc0hlYWRlck1hbmFnZXJIb3Vyc0hvbWUgPyBhZ2VudD8uaWQgOiB1bmRlZmluZWQsXG4gICAgJ2hvbWVfd2l0aF9ob3VycydcbiAgKVxuICBjb25zdCBoZWFkZXJIb3Vyc0Z1YXMgPSB1c2VNZW1vKCgpID0+IHtcbiAgICBpZiAoaXNIZWFkZXJNYW5hZ2VySG91cnNIb21lKSByZXR1cm4gc29ydE1hbmFnZXJIb3Vyc0hvbWVGdWFzKG1hbmFnZXJIb21lRnVhcylcbiAgICByZXR1cm4gY29sbGFib3JhdG9yUGxhbm5lckZ1YXNcbiAgfSwgW2lzSGVhZGVyTWFuYWdlckhvdXJzSG9tZSwgbWFuYWdlckhvbWVGdWFzLCBjb2xsYWJvcmF0b3JQbGFubmVyRnVhc10pXG4gIGNvbnN0IGhlYWRlckhvdXJzRnVhc0xvYWRpbmcgPSBpc0hlYWRlck1hbmFnZXJIb3Vyc0hvbWUgPyBtYW5hZ2VySG9tZUZ1YXNMb2FkaW5nIDogY29sbGFib3JhdG9yUGxhbm5lckZ1YXNMb2FkaW5nXG4gIGNvbnN0IHJlY2VudENvbnRleHRzTGltaXQgPSB1c2VNZW1vKFxuICAgICgpID0+XG4gICAgICByZXNvbHZlUmVjZW50Q29udGV4dHNIb21lTGltaXQoe1xuICAgICAgICBpc0hlYWRlckhvdXJzQWdlbnRIb21lLFxuICAgICAgICBmdWFzTG9hZGluZzogaGVhZGVySG91cnNGdWFzTG9hZGluZyxcbiAgICAgICAgZnVhc0NvdW50OiBoZWFkZXJIb3Vyc0Z1YXMubGVuZ3RoLFxuICAgICAgfSksXG4gICAgW2lzSGVhZGVySG91cnNBZ2VudEhvbWUsIGhlYWRlckhvdXJzRnVhc0xvYWRpbmcsIGhlYWRlckhvdXJzRnVhcy5sZW5ndGhdXG4gIClcbiAgY29uc3QgeyBjb250ZXh0czogZmV0Y2hlZFJlY2VudENvbnRleHRzLCBsb2FkaW5nOiByZWNlbnRDb250ZXh0c0xvYWRpbmcgfSA9IHVzZVJlY2VudENvbnRleHRzKHtcbiAgICBlbmFibGVkOiBpc09yY2hlc3RyYXRvciAmJiAhaXNQbGFubmVySG9tZSxcbiAgICBsaW1pdDogcmVjZW50Q29udGV4dHNMaW1pdCxcbiAgfSlcbiAgY29uc3QgcmVjZW50Q29udGV4dHMgPSB1c2VNZW1vKFxuICAgICgpID0+IGZpbHRlclJlY2VudENvbnRleHRzQnlUeXBlcyhmZXRjaGVkUmVjZW50Q29udGV4dHMsIGFsbG93ZWRSZWNlbnRDb250ZXh0VHlwZXMpLFxuICAgIFtmZXRjaGVkUmVjZW50Q29udGV4dHMsIGFsbG93ZWRSZWNlbnRDb250ZXh0VHlwZXNdXG4gIClcbiAgY29uc3QgcmVjZW50Q29udGV4dFNrZWxldG9uS2V5cyA9IHVzZU1lbW8oXG4gICAgKCkgPT4gYnVpbGRSZWNlbnRDb250ZXh0U2tlbGV0b25LZXlzKHJlY2VudENvbnRleHRzTGltaXQpLFxuICAgIFtyZWNlbnRDb250ZXh0c0xpbWl0XVxuICApXG4gIGNvbnN0IGZhcXNMaXN0QWdlbnRJZCA9IGlzQ2xpZW50Q29udGV4dEZvckZhcXMgPyByZWFsTGlzdHNBZ2VudElkIDogdW5kZWZpbmVkXG4gIGNvbnN0IGZhcXNMaXN0RW50aXR5VHlwZSA9IGlzQ2xpZW50Q29udGV4dEZvckZhcXMgPyByZWFsTGlzdHNFbnRpdHlUeXBlIDogdW5kZWZpbmVkXG4gIGNvbnN0IHtcbiAgICBmYXFzOiBhZ2VudEZhcXMsXG4gICAgbG9hZGluZzogZmFxc0xvYWRpbmcsXG4gICAgaGFuZGxlR2V0RnJlcXVlbnRseUFza2VkUXVlc3Rpb25zLFxuICB9ID0gdXNlRnJlcXVlbnRseUFza2VkUXVlc3Rpb25zKGZhcXNMaXN0QWdlbnRJZCwgbGFuZywgZmFxc0xpc3RFbnRpdHlUeXBlKVxuICBjb25zdCBmYXFzRmV0Y2hSZWYgPSB1c2VSZWY8eyBhZ2VudElkOiBzdHJpbmc7IGxhbmc6IHN0cmluZzsgZW50aXR5VHlwZT86IHN0cmluZyB9IHwgbnVsbD4obnVsbClcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAvLyBGQVFzIHNvbG8gcGFyYSBjb250ZXh0byBjbGllbnRlOyBlbCByZXN0byBtdWVzdHJhIHNvbG8gRlVBcy5cbiAgICBpZiAoIXJlYWxMaXN0c0FnZW50SWQgfHwgIWlzQ2xpZW50Q29udGV4dEZvckZhcXMpIHJldHVyblxuICAgIGNvbnN0IGN1cnJlbnRLZXkgPSBidWlsZEZhcXNGZXRjaEtleShyZWFsTGlzdHNBZ2VudElkLCBsYW5nLCByZWFsTGlzdHNFbnRpdHlUeXBlKVxuICAgIGNvbnN0IGxhc3RLZXkgPSBmYXFzRmV0Y2hSZWYuY3VycmVudFxuICAgICAgPyBidWlsZEZhcXNGZXRjaEtleShmYXFzRmV0Y2hSZWYuY3VycmVudC5hZ2VudElkLCBmYXFzRmV0Y2hSZWYuY3VycmVudC5sYW5nLCBmYXFzRmV0Y2hSZWYuY3VycmVudC5lbnRpdHlUeXBlKVxuICAgICAgOiBudWxsXG4gICAgaWYgKHNob3VsZFJlZmV0Y2hGYXFzKGN1cnJlbnRLZXksIGxhc3RLZXkpKSB7XG4gICAgICBmYXFzRmV0Y2hSZWYuY3VycmVudCA9IHsgYWdlbnRJZDogcmVhbExpc3RzQWdlbnRJZCwgbGFuZywgZW50aXR5VHlwZTogcmVhbExpc3RzRW50aXR5VHlwZSB9XG4gICAgICBoYW5kbGVHZXRGcmVxdWVudGx5QXNrZWRRdWVzdGlvbnMoeyBhZ2VudElkOiByZWFsTGlzdHNBZ2VudElkLCBsYW5nLCBlbnRpdHlUeXBlOiByZWFsTGlzdHNFbnRpdHlUeXBlIH0pXG4gICAgfVxuICB9LCBbcmVhbExpc3RzQWdlbnRJZCwgcmVhbExpc3RzRW50aXR5VHlwZSwgaXNDbGllbnRDb250ZXh0Rm9yRmFxcywgbGFuZywgaGFuZGxlR2V0RnJlcXVlbnRseUFza2VkUXVlc3Rpb25zXSlcblxuICBjb25zdCBmYXFzID0gYWdlbnRGYXFzXG4gIGNvbnN0IGZ1YXMgPSBhZ2VudEZ1YXNcbiAgY29uc3QgZmFxc0FyZUxvYWRpbmcgPSBmYXFzTG9hZGluZ1xuICBjb25zdCBmdWFzQXJlTG9hZGluZyA9IGZ1YXNMb2FkaW5nXG5cbiAgY29uc3Qgc2hvdWxkU2hvd0ZhcXMgPSByZXNvbHZlU2hvdWxkU2hvd0ZhcXMoe1xuICAgIGlzTWFpYTogaXNNQUlBLFxuICAgIGlzQ2xpZW50Q29udGV4dEZvckZhcXMsXG4gICAgaXNSZWNlbnRDb250ZXh0c1N0ZXAsXG4gICAgaXNDb250ZXh0SG9tZVN0ZXAsXG4gICAgaXNIZWFkZXJIb21lLFxuICAgIGZhcXNBY2Nlc3MsXG4gICAgaXNNYWlha2VyLFxuICAgIGZhcXNDb3VudDogZmFxcy5sZW5ndGgsXG4gICAgZmFxc0xvYWRpbmc6IGZhcXNBcmVMb2FkaW5nLFxuICB9KVxuICBjb25zdCBzaG91bGRTaG93RnVhcyA9IHJlc29sdmVTaG91bGRTaG93RnVhcyh7XG4gICAgaXNSZWNlbnRDb250ZXh0c1N0ZXAsXG4gICAgaXNNYWlha2VyLFxuICAgIGlzQ29udGV4dEhvbWVTdGVwLFxuICAgIGlzSGVhZGVySG9tZSxcbiAgICBmdWFzQ291bnQ6IGZ1YXMubGVuZ3RoLFxuICAgIGZ1YXNMb2FkaW5nOiBmdWFzQXJlTG9hZGluZyxcbiAgfSlcbiAgY29uc3QgeyBzaG91bGRTaG93UGxhbm5lckZ1YXMgfSA9IHJlc29sdmVQbGFubmVyRnVhc1Zpc2liaWxpdHkoe1xuICAgIGlzSGVhZGVySG91cnNBZ2VudEhvbWUsXG4gICAgaGVhZGVySG91cnNGdWFzTG9hZGluZyxcbiAgICBoZWFkZXJIb3Vyc0Z1YXNDb3VudDogaGVhZGVySG91cnNGdWFzLmxlbmd0aCxcbiAgfSlcblxuICBjb25zdCBzaG93UHJvamVjdFN1bW1hcnlDYXJkID0gc2hvd1Byb2plY3RTdW1tYXJ5ICYmIGFnZW50Py5lbnRpdHkgPT09ICdwcm9qZWN0J1xuICBjb25zdCBzaG93UmVjZW50Q29udGV4dHNCbG9jayA9IHJlc29sdmVTaG93UmVjZW50Q29udGV4dHNCbG9jayhcbiAgICBpc1JlY2VudENvbnRleHRzU3RlcCxcbiAgICByZWNlbnRDb250ZXh0c0xvYWRpbmcsXG4gICAgcmVjZW50Q29udGV4dHMubGVuZ3RoXG4gIClcbiAgY29uc3QgeyBzaG93RkFRcywgc2hvd0R5bmFtaWNTZWN0aW9uLCBob21lU2Nyb2xsYWJsZUxheW91dCB9ID0gcmVzb2x2ZUhvbWVEeW5hbWljUGFuZWxWaXNpYmlsaXR5KHtcbiAgICBzaG93UmVjZW50Q29udGV4dHNCbG9jayxcbiAgICBzaG91bGRTaG93RmFxcyxcbiAgICBzaG91bGRTaG93RnVhcyxcbiAgICBzaG91bGRTaG93UGxhbm5lckZ1YXMsXG4gICAgaXNNYWlha2VyLFxuICAgIHNob3dQcm9qZWN0U3VtbWFyeUNhcmQsXG4gIH0pXG5cbiAgLy8gTMOzZ2ljYSBkZWwgc2Nyb2xsIGNvbiBncmFkaWVudGVzXG4gIGNvbnN0IGNvbnRlbnRDb250YWluZXJSZWYgPSB1c2VSZWY8SFRNTERpdkVsZW1lbnQ+KG51bGwpXG4gIGNvbnN0IFtzaG93VG9wR3JhZGllbnQsIHNldFNob3dUb3BHcmFkaWVudF0gPSB1c2VTdGF0ZShmYWxzZSlcbiAgY29uc3QgW3Nob3dCb3R0b21HcmFkaWVudCwgc2V0U2hvd0JvdHRvbUdyYWRpZW50XSA9IHVzZVN0YXRlKGZhbHNlKVxuICBjb25zdCBbaXNTY3JvbGxpbmcsIHNldElzU2Nyb2xsaW5nXSA9IHVzZVN0YXRlKGZhbHNlKVxuICBjb25zdCBzY3JvbGxUaW1lb3V0UmVmID0gdXNlUmVmPFJldHVyblR5cGU8dHlwZW9mIHNldFRpbWVvdXQ+IHwgbnVsbD4obnVsbClcblxuICAvLyBTYWx1ZG8gZmlqbyBwb3IgdGlwbyBkZSBjb250ZXh0byAoaTE4bikuIEN1c3RvbSBhZ2VudHMgc2lndWVuIHVzYW5kbyBhZ2VudC5pbnRyb2R1Y3Rpb24uXG4gIC8vIFBsYW5uZXIgdXNhIHTDrXR1bG8gKyBiYWphZGEgcHJvcGlvcyAoYHBsYW5uZXJIb21lYCksIG5vIGVzdGUgZ3JlZXRpbmcuXG4gIGNvbnN0IGdyZWV0aW5nID0gdXNlTWVtbyhcbiAgICAoKSA9PlxuICAgICAgcmVzb2x2ZUhvbWVHcmVldGluZyh7XG4gICAgICAgIGlzTWFpYWtlcixcbiAgICAgICAgaXNQbGFubmVySG9tZSxcbiAgICAgICAgaXNSZWNlbnRDb250ZXh0c1N0ZXAsXG4gICAgICAgIGlzTWFpYTogaXNNQUlBLFxuICAgICAgICBwaW5uZWRFbnRpdHlUeXBlLFxuICAgICAgICBjb250ZXh0R3JlZXRpbmc6ICgoKSA9PiB7XG4gICAgICAgICAgY29uc3QgZ3JlZXRpbmdLZXkgPSByZXNvbHZlSG9tZUNvbnRleHRHcmVldGluZ0tleShpc01BSUEsIHBpbm5lZEVudGl0eVR5cGUpXG4gICAgICAgICAgcmV0dXJuIGdyZWV0aW5nS2V5ID8gdChncmVldGluZ0tleSkgOiB1bmRlZmluZWRcbiAgICAgICAgfSkoKSxcbiAgICAgICAgYWdlbnRJbnRyb2R1Y3Rpb246IGFnZW50Py5pbnRyb2R1Y3Rpb24gPz8gdW5kZWZpbmVkLFxuICAgICAgfSksXG4gICAgW2FnZW50Py5pZCwgYWdlbnQ/LmludHJvZHVjdGlvbiwgaXNNYWlha2VyLCBpc1BsYW5uZXJIb21lLCBpc01BSUEsIHBpbm5lZEVudGl0eVR5cGUsIGlzUmVjZW50Q29udGV4dHNTdGVwLCB0XVxuICApXG5cbiAgY29uc3QgaGFuZGxlU2VsZWN0UmVjZW50Q29udGV4dCA9IHVzZUNhbGxiYWNrKFxuICAgIChjb250ZXh0OiBSZWNlbnRDb250ZXh0SXRlbSwgb3JkZXI6IG51bWJlcikgPT4ge1xuICAgICAgZXZlbnQoRVZFTlRTLmFpQ2hhdENvbnRleHRTZWxlY3RlZCwgeyBvcmRlciwgdHlwZTogY29udGV4dC50eXBlIH0pXG5cbiAgICAgIGNvbnN0IHBpbk91dGNvbWUgPSByZXNvbHZlUmVjZW50Q29udGV4dFBpbk91dGNvbWUoY29udGV4dCwgdCgnaG9tZU1lbnUucmVjZW50Q29udGV4dHMudHlwZXMucHJvamVjdCcpKVxuXG4gICAgICBzZXRTZWxlY3RlZENvbnRleHQoY29udGV4dClcbiAgICAgIHNldFRhc2sobnVsbClcbiAgICAgIHNldFByb2plY3QobnVsbClcbiAgICAgIHNldENsaWVudD8uKG51bGwpXG4gICAgICBzZXRDaGlwc1Byb2plY3QobnVsbClcblxuICAgICAgY29uc3QgY29udGV4dFBhdGNoID0gYnVpbGRQaW5HbG9iYWxDb250ZXh0UGF0Y2gocGluT3V0Y29tZSlcbiAgICAgIGlmICghY29udGV4dFBhdGNoKSByZXR1cm5cblxuICAgICAgc2V0Q2xpZW50Py4oY29udGV4dFBhdGNoLmNsaWVudClcbiAgICAgIHNldFByb2plY3QoY29udGV4dFBhdGNoLnByb2plY3QpXG4gICAgICBzZXRUYXNrKGNvbnRleHRQYXRjaC50YXNrKVxuICAgICAgc2V0Q2hpcHNQcm9qZWN0KGNvbnRleHRQYXRjaC5jaGlwc1Byb2plY3QpXG5cbiAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICAgIGRvY3VtZW50LmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCdtYWlhLWlucHV0LXJlZm9jdXMnKSlcbiAgICAgIH0pXG4gICAgfSxcbiAgICBbZXZlbnQsIHNldENoaXBzUHJvamVjdCwgc2V0Q2xpZW50LCBzZXRQcm9qZWN0LCBzZXRUYXNrLCB0XVxuICApXG5cbiAgY29uc3QgaGFuZGxlSG9tZVN0YXJ0Q2hhdCA9IHVzZUNhbGxiYWNrKFxuICAgIChcbiAgICAgIG1lc3NhZ2U6IHN0cmluZyxcbiAgICAgIGF0dGFjaG1lbnRzPzogQXR0YWNobWVudEZpbGVbXSB8IG51bGwsXG4gICAgICBmYXFJZD86IHN0cmluZyxcbiAgICAgIGFnZW50U3VnZ2VzdGlvbklkPzogc3RyaW5nLFxuICAgICAgbWVudGlvbnM/OiBudWxsLFxuICAgICAgZnVhSWQ/OiBzdHJpbmdcbiAgICApID0+IHtcbiAgICAgIGlmIChzaG91bGRDbGVhclBpbm5lZENvbnRleHRPbkhvbWVTdGFydChpc0hlYWRlck1hbmFnZXJIb3Vyc0hvbWUsIGZ1YUlkKSkge1xuICAgICAgICBmbHVzaFN5bmMoKCkgPT4ge1xuICAgICAgICAgIHNldFNlbGVjdGVkQ29udGV4dChudWxsKVxuICAgICAgICAgIHNldFRhc2sobnVsbClcbiAgICAgICAgICBzZXRQcm9qZWN0KG51bGwpXG4gICAgICAgICAgc2V0Q2xpZW50Py4obnVsbClcbiAgICAgICAgICBzZXRDaGlwc1Byb2plY3QobnVsbClcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICAgIG9uU3RhcnRDaGF0KG1lc3NhZ2UsIGF0dGFjaG1lbnRzLCBmYXFJZCwgYWdlbnRTdWdnZXN0aW9uSWQsIG1lbnRpb25zLCBmdWFJZClcbiAgICB9LFxuICAgIFtpc0hlYWRlck1hbmFnZXJIb3Vyc0hvbWUsIG9uU3RhcnRDaGF0LCBzZXRDaGlwc1Byb2plY3QsIHNldENsaWVudCwgc2V0UHJvamVjdCwgc2V0VGFza11cbiAgKVxuXG4gIGNvbnN0IHJlbmRlclJlY2VudENvbnRleHRzID0gKCkgPT4ge1xuICAgIGlmICghc2hvdWxkUmVuZGVyUmVjZW50Q29udGV4dHNQYW5lbChpc1JlY2VudENvbnRleHRzU3RlcCkpIHJldHVybiBudWxsXG5cbiAgICByZXR1cm4gKFxuICAgICAgPFNDQ0FJSG9tZVJlY2VudENvbnRleHRzXG4gICAgICAgICRmaXhlZENvbnRlbnRXaWR0aD17aXNIZWFkZXJUYXNrQ29udGV4dEhvbWUgPyBNQUlBX0hFQURFUl9DT0xMQUJPUkFUT1JfSE9NRV9DT05URU5UX1dJRFRIX1BYIDogdW5kZWZpbmVkfVxuICAgICAgPlxuICAgICAgICB7aXNIZWFkZXJIb3Vyc0FnZW50SG9tZSA/IChcbiAgICAgICAgICA8U0NDQUlIb21lUmVjZW50Q29udGV4dHNTZWN0aW9uSGVhZGVyPlxuICAgICAgICAgICAgeygoKSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IHsgdGl0bGVLZXksIHN1YnRpdGxlS2V5IH0gPSByZXNvbHZlUmVjZW50Q29udGV4dHNTZWN0aW9uQ29weUtleXMoeyBpc0hlYWRlck1hbmFnZXJIb3Vyc0hvbWUgfSlcbiAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICAgPFNDQ0FJSG9tZVJlY2VudENvbnRleHRzU2VjdGlvblRpdGxlPnt0KHRpdGxlS2V5KX08L1NDQ0FJSG9tZVJlY2VudENvbnRleHRzU2VjdGlvblRpdGxlPlxuICAgICAgICAgICAgICAgICAgPFNDQ0FJSG9tZVJlY2VudENvbnRleHRzU2VjdGlvblN1YnRpdGxlPnt0KHN1YnRpdGxlS2V5KX08L1NDQ0FJSG9tZVJlY2VudENvbnRleHRzU2VjdGlvblN1YnRpdGxlPlxuICAgICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9KSgpfVxuICAgICAgICAgIDwvU0NDQUlIb21lUmVjZW50Q29udGV4dHNTZWN0aW9uSGVhZGVyPlxuICAgICAgICApIDogbnVsbH1cbiAgICAgICAgPFNDQ0FJSG9tZVJlY2VudENvbnRleHRzTGlzdCAkZmx1c2hQaWxscz17aXNIZWFkZXJUYXNrQ29udGV4dEhvbWV9PlxuICAgICAgICAgIHtyZWNlbnRDb250ZXh0c0xvYWRpbmcgJiZcbiAgICAgICAgICAgIHJlY2VudENvbnRleHRTa2VsZXRvbktleXMubWFwKGtleSA9PiA8U0NDQUlIb21lUmVjZW50Q29udGV4dFBpbGxTa2VsZXRvbiBrZXk9e2tleX0gLz4pfVxuICAgICAgICAgIHshcmVjZW50Q29udGV4dHNMb2FkaW5nICYmXG4gICAgICAgICAgICByZWNlbnRDb250ZXh0cy5tYXAoKGNvbnRleHQsIGluZGV4KSA9PiAoXG4gICAgICAgICAgICAgIDxSZWNlbnRDb250ZXh0UGlsbFxuICAgICAgICAgICAgICAgIGtleT17YCR7Y29udGV4dC50eXBlfS0ke2NvbnRleHQuaWR9YH1cbiAgICAgICAgICAgICAgICBjb250ZXh0PXtjb250ZXh0fVxuICAgICAgICAgICAgICAgIGxhYmVsPXtjb250ZXh0Lm5hbWUudHJpbSgpfVxuICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IGhhbmRsZVNlbGVjdFJlY2VudENvbnRleHQoY29udGV4dCwgaW5kZXggKyAxKX1cbiAgICAgICAgICAgICAgICBmdWxsV2lkdGg9e2lzSGVhZGVyVGFza0NvbnRleHRIb21lfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgKSl9XG4gICAgICAgIDwvU0NDQUlIb21lUmVjZW50Q29udGV4dHNMaXN0PlxuICAgICAgPC9TQ0NBSUhvbWVSZWNlbnRDb250ZXh0cz5cbiAgICApXG4gIH1cblxuICBjb25zdCBjaGVja1Njcm9sbCA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBjb25zdCBjb250YWluZXIgPSBjb250ZW50Q29udGFpbmVyUmVmLmN1cnJlbnRcbiAgICBpZiAoIWNvbnRhaW5lciB8fCAhc2hvdWxkQ2hlY2tIb21lU2Nyb2xsKGNvbnRhaW5lciwgaG9tZVNjcm9sbGFibGVMYXlvdXQpKSByZXR1cm5cblxuICAgIGNvbnN0IHsgc2Nyb2xsVG9wLCBzY3JvbGxIZWlnaHQsIGNsaWVudEhlaWdodCB9ID0gY29udGFpbmVyXG4gICAgY29uc3QgZ3JhZGllbnRzID0gcmVzb2x2ZUhvbWVTY3JvbGxHcmFkaWVudHMoc2Nyb2xsVG9wLCBzY3JvbGxIZWlnaHQsIGNsaWVudEhlaWdodClcbiAgICBzZXRTaG93VG9wR3JhZGllbnQoZ3JhZGllbnRzLnNob3dUb3ApXG4gICAgc2V0U2hvd0JvdHRvbUdyYWRpZW50KGdyYWRpZW50cy5zaG93Qm90dG9tKVxuICB9LCBbaG9tZVNjcm9sbGFibGVMYXlvdXRdKVxuXG4gIGNvbnN0IGhhbmRsZVNjcm9sbCA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBjaGVja1Njcm9sbCgpXG4gICAgc2V0SXNTY3JvbGxpbmcodHJ1ZSlcblxuICAgIGlmIChzY3JvbGxUaW1lb3V0UmVmLmN1cnJlbnQpIHtcbiAgICAgIGNsZWFyVGltZW91dChzY3JvbGxUaW1lb3V0UmVmLmN1cnJlbnQpXG4gICAgfVxuXG4gICAgc2Nyb2xsVGltZW91dFJlZi5jdXJyZW50ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBzZXRJc1Njcm9sbGluZyhmYWxzZSlcbiAgICB9LCAxNTApXG4gIH0sIFtjaGVja1Njcm9sbF0pXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoc2hvdWxkUmVzZXRIb21lU2Nyb2xsR3JhZGllbnRzKGhvbWVTY3JvbGxhYmxlTGF5b3V0KSkge1xuICAgICAgc2V0U2hvd1RvcEdyYWRpZW50KGZhbHNlKVxuICAgICAgc2V0U2hvd0JvdHRvbUdyYWRpZW50KGZhbHNlKVxuICAgICAgcmV0dXJuIHVuZGVmaW5lZFxuICAgIH1cblxuICAgIGNvbnN0IGNvbnRhaW5lciA9IGNvbnRlbnRDb250YWluZXJSZWYuY3VycmVudFxuICAgIGlmICghY29udGFpbmVyKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkXG4gICAgfVxuXG4gICAgY29uc3Qgc2NoZWR1bGVDaGVja1Njcm9sbCA9ICgpID0+IHtcbiAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICAgIGNoZWNrU2Nyb2xsKClcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgc2NoZWR1bGVDaGVja1Njcm9sbCgpXG4gICAgY29udGFpbmVyLmFkZEV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIGhhbmRsZVNjcm9sbClcblxuICAgIGNvbnN0IHJlc2l6ZU9ic2VydmVyID0gbmV3IFJlc2l6ZU9ic2VydmVyKHNjaGVkdWxlQ2hlY2tTY3JvbGwpXG4gICAgcmVzaXplT2JzZXJ2ZXIub2JzZXJ2ZShjb250YWluZXIpXG4gICAgY29uc3Qgc2Nyb2xsQ29udGVudCA9IGNvbnRhaW5lci5maXJzdEVsZW1lbnRDaGlsZFxuICAgIGlmIChzaG91bGRPYnNlcnZlSG9tZVNjcm9sbENvbnRlbnQoc2Nyb2xsQ29udGVudCkpIHtcbiAgICAgIHJlc2l6ZU9ic2VydmVyLm9ic2VydmUoc2Nyb2xsQ29udGVudClcbiAgICB9XG5cbiAgICBjb25zdCB0aW1lb3V0SWQgPSB3aW5kb3cuc2V0VGltZW91dChzY2hlZHVsZUNoZWNrU2Nyb2xsLCAxMDApXG4gICAgY29uc3QgbGF0ZVRpbWVvdXRJZCA9IHdpbmRvdy5zZXRUaW1lb3V0KHNjaGVkdWxlQ2hlY2tTY3JvbGwsIDQwMClcblxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBjb250YWluZXIucmVtb3ZlRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgaGFuZGxlU2Nyb2xsKVxuICAgICAgcmVzaXplT2JzZXJ2ZXIuZGlzY29ubmVjdCgpXG4gICAgICBjbGVhclRpbWVvdXQodGltZW91dElkKVxuICAgICAgY2xlYXJUaW1lb3V0KGxhdGVUaW1lb3V0SWQpXG4gICAgICBpZiAoc2Nyb2xsVGltZW91dFJlZi5jdXJyZW50KSB7XG4gICAgICAgIGNsZWFyVGltZW91dChzY3JvbGxUaW1lb3V0UmVmLmN1cnJlbnQpXG4gICAgICB9XG4gICAgfVxuICB9LCBbaG9tZVNjcm9sbGFibGVMYXlvdXQsIGNoZWNrU2Nyb2xsLCBoYW5kbGVTY3JvbGxdKVxuXG4gIHVzZUxheW91dEVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFob21lU2Nyb2xsYWJsZUxheW91dCkgcmV0dXJuXG4gICAgY2hlY2tTY3JvbGwoKVxuICB9LCBbXG4gICAgaG9tZVNjcm9sbGFibGVMYXlvdXQsXG4gICAgY2hlY2tTY3JvbGwsXG4gICAgcmVjZW50Q29udGV4dHNMb2FkaW5nLFxuICAgIHJlY2VudENvbnRleHRzLmxlbmd0aCxcbiAgICBoZWFkZXJIb3Vyc0Z1YXNMb2FkaW5nLFxuICAgIGhlYWRlckhvdXJzRnVhcy5sZW5ndGgsXG4gICAgZnVhc0xvYWRpbmcsXG4gICAgZnVhcy5sZW5ndGgsXG4gICAgZmFxc0FyZUxvYWRpbmcsXG4gICAgZmFxcy5sZW5ndGgsXG4gICAgc2hvdWxkU2hvd1BsYW5uZXJGdWFzLFxuICAgIGlzTWFpYWtlcixcbiAgXSlcblxuICBjb25zdCByZW5kZXJIZWFkZXJDb250ZW50ID0gKCkgPT4ge1xuICAgIGlmICghaXNNQUlBKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8U0NDQUlIb21lQWdlbnRJbmZvQ29udGFpbmVyPlxuICAgICAgICAgIDxTQ0NBSUhvbWVBZ2VudEluZm8+XG4gICAgICAgICAgICB7YWdlbnQ/LmVtb2ppfSB7YWdlbnQ/Lm5hbWV9XG4gICAgICAgICAgPC9TQ0NBSUhvbWVBZ2VudEluZm8+XG4gICAgICAgICAge2FnZW50Py5jcmVhdGVkX2J5ICYmICFpc01BSUEgJiYgKFxuICAgICAgICAgICAgPFNDQ0FJSG9tZUNyZWF0ZWRCeUNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgPFRvb2x0aXBcbiAgICAgICAgICAgICAgICB0aXRsZT17XG4gICAgICAgICAgICAgICAgICBhZ2VudD8uY3JlYXRlZF9ieT8uaXNfZGVsZXRlZCA/IHQoJ2hvbWVNZW51LmNyZWF0ZWRCeVRvb2x0aXBEZWxldGVkJykgOiB0KCdob21lTWVudS5jcmVhdGVkQnlUb29sdGlwJylcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8U0NDQUlIb21lQ3JlYXRlZEJ5VGV4dD5cbiAgICAgICAgICAgICAgICAgIHt0KCdob21lTWVudS5jcmVhdGVkQnknKX17JyAnfVxuICAgICAgICAgICAgICAgICAgPFNDQ0FJSG9tZUNyZWF0ZWRCeVRleHROYW1lPnthZ2VudD8uY3JlYXRlZF9ieT8ubmFtZX08L1NDQ0FJSG9tZUNyZWF0ZWRCeVRleHROYW1lPlxuICAgICAgICAgICAgICAgIDwvU0NDQUlIb21lQ3JlYXRlZEJ5VGV4dD5cbiAgICAgICAgICAgICAgPC9Ub29sdGlwPlxuICAgICAgICAgICAgPC9TQ0NBSUhvbWVDcmVhdGVkQnlDb250YWluZXI+XG4gICAgICAgICAgKX1cbiAgICAgICAgPC9TQ0NBSUhvbWVBZ2VudEluZm9Db250YWluZXI+XG4gICAgICApXG4gICAgfVxuXG4gICAgY29uc3QgeyBjb250ZW50QWxpZ25TdGFydCwgbWFpYUhlYWRlclN0YWNrTmVlZHNHYXAgfSA9IHJlc29sdmVNYWlhSGVhZGVyU3RhY2tMYXlvdXQoe1xuICAgICAgaXNQbGFubmVySG9tZSxcbiAgICAgIGlzSGVhZGVyVGFza0NvbnRleHRIb21lLFxuICAgICAgaXNMZWZ0QWxpZ25lZE9yY2hlc3RyYXRvckhvbWUsXG4gICAgICBpc1JlY2VudENvbnRleHRzU3RlcCxcbiAgICAgIGhhc0dyZWV0aW5nOiBCb29sZWFuKGdyZWV0aW5nKSxcbiAgICB9KVxuXG4gICAgcmV0dXJuIChcbiAgICAgIDxTQ0NBSUhvbWVNYWlhSGVhZGVyU3RhY2sgJG5vR2FwPXshbWFpYUhlYWRlclN0YWNrTmVlZHNHYXB9ICRhbGlnbj17Y29udGVudEFsaWduU3RhcnQgPyAnc3RhcnQnIDogJ2NlbnRlcid9PlxuICAgICAgICB7IWlzUGxhbm5lckhvbWUgJiYgIWlzSGVhZGVyVGFza0NvbnRleHRIb21lICYmICFpc0xlZnRBbGlnbmVkT3JjaGVzdHJhdG9ySG9tZSAmJiAoXG4gICAgICAgICAgPFNDQ0FJSG9tZUljb25Db250YWluZXI+XG4gICAgICAgICAgICA8U0NDQUlIb21lTG9nb1dyYXBwZXI+XG4gICAgICAgICAgICAgIDxNQUlBSXNvbG9nbyAvPlxuICAgICAgICAgICAgPC9TQ0NBSUhvbWVMb2dvV3JhcHBlcj5cbiAgICAgICAgICA8L1NDQ0FJSG9tZUljb25Db250YWluZXI+XG4gICAgICAgICl9XG4gICAgICAgIHtpc1BsYW5uZXJIb21lICYmIChcbiAgICAgICAgICA8U0NDQUlIb21lVGl0bGVCbG9jayAkYWxpZ249XCJzdGFydFwiPlxuICAgICAgICAgICAgPFNDQ0FJSG9tZVRpdGxlICRzaXplPVwibWRcIiAkYWxpZ249XCJzdGFydFwiPlxuICAgICAgICAgICAgICB7dCgnaG9tZU1lbnUucGxhbm5lckhvbWUudGl0bGUnKX1cbiAgICAgICAgICAgIDwvU0NDQUlIb21lVGl0bGU+XG4gICAgICAgICAgICA8U0NDQUlIb21lU3VidGl0bGUgJGFsaWduPVwic3RhcnRcIj57dCgnaG9tZU1lbnUucGxhbm5lckhvbWUuc3VidGl0bGUnKX08L1NDQ0FJSG9tZVN1YnRpdGxlPlxuICAgICAgICAgIDwvU0NDQUlIb21lVGl0bGVCbG9jaz5cbiAgICAgICAgKX1cbiAgICAgICAgeyFpc1BsYW5uZXJIb21lICYmIGlzUmVjZW50Q29udGV4dHNTdGVwICYmIGlzSGVhZGVyVGFza0NvbnRleHRIb21lICYmIChcbiAgICAgICAgICA8U0NDQUlIb21lVGl0bGVCbG9jayAkYWxpZ249XCJzdGFydFwiICRmdWxsV2lkdGg+XG4gICAgICAgICAgICA8U0NDQUlIb21lVGl0bGUgJHNpemU9XCJjb250ZXh0XCIgJGFsaWduPVwic3RhcnRcIiAkZnVsbFdpZHRoPlxuICAgICAgICAgICAgICB7dCgnaG9tZU1lbnUuY29udGV4dEhvbWUuZ3JlZXRpbmcnLCB7IG5hbWU6IHVzZXIuZmlyc3ROYW1lIH0pfVxuICAgICAgICAgICAgPC9TQ0NBSUhvbWVUaXRsZT5cbiAgICAgICAgICAgIDxTQ0NBSUhvbWVTdWJ0aXRsZSAkYWxpZ249XCJzdGFydFwiICRjb2xsYWJvcmF0b3JIb21lPlxuICAgICAgICAgICAgICB7dChoZWFkZXJUYXNrQ29udGV4dFN1YnRpdGxlS2V5KX1cbiAgICAgICAgICAgIDwvU0NDQUlIb21lU3VidGl0bGU+XG4gICAgICAgICAgPC9TQ0NBSUhvbWVUaXRsZUJsb2NrPlxuICAgICAgICApfVxuICAgICAgICB7IWlzUGxhbm5lckhvbWUgJiYgaXNSZWNlbnRDb250ZXh0c1N0ZXAgJiYgIWlzSGVhZGVyVGFza0NvbnRleHRIb21lICYmIChcbiAgICAgICAgICA8PlxuICAgICAgICAgICAgPFNDQ0FJSG9tZVRpdGxlICRhbGlnbj17aXNMZWZ0QWxpZ25lZE9yY2hlc3RyYXRvckhvbWUgPyAnc3RhcnQnIDogdW5kZWZpbmVkfT5cbiAgICAgICAgICAgICAge3QoJ2hvbWVNZW51LmNvbnRleHRIb21lLmdyZWV0aW5nJywgeyBuYW1lOiB1c2VyLmZpcnN0TmFtZSB9KX1cbiAgICAgICAgICAgIDwvU0NDQUlIb21lVGl0bGU+XG4gICAgICAgICAgICA8U0NDQUlIb21lU3VidGl0bGUgJGFsaWduPXtpc0xlZnRBbGlnbmVkT3JjaGVzdHJhdG9ySG9tZSA/ICdzdGFydCcgOiB1bmRlZmluZWR9PlxuICAgICAgICAgICAgICB7dChyZXNvbHZlT3JjaGVzdHJhdG9yUmVjZW50Q29udGV4dHNTdWJ0aXRsZUtleShpc0NvbGxhYm9yYXRvclJvbGUodXNlci5yb2xlX2lkKSkpfVxuICAgICAgICAgICAgPC9TQ0NBSUhvbWVTdWJ0aXRsZT5cbiAgICAgICAgICA8Lz5cbiAgICAgICAgKX1cbiAgICAgICAgeyFpc1BsYW5uZXJIb21lICYmICFpc1JlY2VudENvbnRleHRzU3RlcCAmJiBncmVldGluZyAmJiAoXG4gICAgICAgICAgPFNDQ0FJSG9tZUdyZWV0aW5nXG4gICAgICAgICAgICAkYWxpZ249e2lzTGVmdEFsaWduZWRPcmNoZXN0cmF0b3JIb21lID8gJ3N0YXJ0JyA6IHVuZGVmaW5lZH1cbiAgICAgICAgICAgICRzaXplPXtpc0xlZnRBbGlnbmVkT3JjaGVzdHJhdG9ySG9tZSA/ICdtZCcgOiAnbGcnfVxuICAgICAgICAgID5cbiAgICAgICAgICAgIHtncmVldGluZ31cbiAgICAgICAgICA8L1NDQ0FJSG9tZUdyZWV0aW5nPlxuICAgICAgICApfVxuICAgICAgPC9TQ0NBSUhvbWVNYWlhSGVhZGVyU3RhY2s+XG4gICAgKVxuICB9XG5cbiAgY29uc3QgeyBjb250ZW50QWxpZ25TdGFydCwgZml4ZWRIb21lQ29udGVudFdpZHRoQ29sbGFib3JhdG9yIH0gPSByZXNvbHZlTWFpYUhlYWRlclN0YWNrTGF5b3V0KHtcbiAgICBpc1BsYW5uZXJIb21lLFxuICAgIGlzSGVhZGVyVGFza0NvbnRleHRIb21lLFxuICAgIGlzTGVmdEFsaWduZWRPcmNoZXN0cmF0b3JIb21lLFxuICAgIGlzUmVjZW50Q29udGV4dHNTdGVwLFxuICAgIGhhc0dyZWV0aW5nOiBCb29sZWFuKGdyZWV0aW5nKSxcbiAgfSlcbiAgY29uc3QgZml4ZWRIb21lQ29udGVudFdpZHRoID0gZml4ZWRIb21lQ29udGVudFdpZHRoQ29sbGFib3JhdG9yXG4gICAgPyBNQUlBX0hFQURFUl9DT0xMQUJPUkFUT1JfSE9NRV9DT05URU5UX1dJRFRIX1BYXG4gICAgOiB1bmRlZmluZWRcbiAgY29uc3Qgc2hvd0FnZW50SW50cm9kdWN0aW9uID0gcmVzb2x2ZVNob3dBZ2VudEludHJvZHVjdGlvbihzZWN0aW9uLCBpc01BSUEsIEJvb2xlYW4oYWdlbnQ/LmludHJvZHVjdGlvbikpXG5cbiAgcmV0dXJuIChcbiAgICA8U0NDQUlIb21lQ29udGFpbmVyIHNob3dGQVFzPXtzaG93RkFRc30gJGFsaWduU3RhcnQ9e2lzTGVmdEFsaWduZWRPcmNoZXN0cmF0b3JIb21lfT5cbiAgICAgIHtob21lU2Nyb2xsYWJsZUxheW91dCAmJiA8U0NDQUlIb21lR3JhZGllbnRUb3AgJHNob3c9e3Nob3dUb3BHcmFkaWVudH0gLz59XG4gICAgICA8U0NDQUlIb21lQ29udGVudFxuICAgICAgICByZWY9e2NvbnRlbnRDb250YWluZXJSZWZ9XG4gICAgICAgIHNob3dGQVFzPXtob21lU2Nyb2xsYWJsZUxheW91dH1cbiAgICAgICAgJGlzQWdlbnRWaWV3PXshaXNNQUlBfVxuICAgICAgICAkZmxvYXRpbmdDdXN0b21DZW50ZXI9e2Zsb2F0aW5nQ3VzdG9tQ2VudGVyfVxuICAgICAgICAkY2VudGVyVmVydGljYWxseT17aXNQbGFubmVySG9tZX1cbiAgICAgICAgJGFsaWduU3RhcnQ9e2lzTGVmdEFsaWduZWRPcmNoZXN0cmF0b3JIb21lfVxuICAgICAgICAkZml4ZWRDb250ZW50V2lkdGg9e2ZpeGVkSG9tZUNvbnRlbnRXaWR0aH1cbiAgICAgID5cbiAgICAgICAgPFNDQ0FJSG9tZUNvbnRlbnRJbm5lclxuICAgICAgICAgIHNob3dGQVFzPXtob21lU2Nyb2xsYWJsZUxheW91dH1cbiAgICAgICAgICAkaXNBZ2VudFZpZXc9eyFpc01BSUF9XG4gICAgICAgICAgJGZsb2F0aW5nQ3VzdG9tQ2VudGVyPXtmbG9hdGluZ0N1c3RvbUNlbnRlcn1cbiAgICAgICAgICAkY2VudGVyVmVydGljYWxseT17aXNQbGFubmVySG9tZX1cbiAgICAgICAgICAkYWxpZ25TdGFydD17aXNIZWFkZXJUYXNrQ29udGV4dEhvbWUgfHwgaXNMZWZ0QWxpZ25lZE9yY2hlc3RyYXRvckhvbWV9XG4gICAgICAgICAgJGhlYWRlckNvbGxhYm9yYXRvckhvbWU9e2lzSGVhZGVyVGFza0NvbnRleHRIb21lfVxuICAgICAgICAgICRzZWN0aW9uT3JjaGVzdHJhdG9ySG9tZT17aXNMZWZ0QWxpZ25lZE9yY2hlc3RyYXRvckhvbWV9XG4gICAgICAgID5cbiAgICAgICAgICA8U0NDQUlIb21lSGVhZGVyXG4gICAgICAgICAgICAkZ2FwPXtzaG93QWdlbnRJbnRyb2R1Y3Rpb24gPyAnMjBweCcgOiAnMCd9XG4gICAgICAgICAgICAkbWF4V2lkdGg9e2lzTUFJQSA/ICcxMDAlJyA6ICczODBweCd9XG4gICAgICAgICAgICAkaXNBZ2VudFZpZXc9eyFpc01BSUF9XG4gICAgICAgICAgICAkYWxpZ249e2NvbnRlbnRBbGlnblN0YXJ0ID8gJ3N0YXJ0JyA6ICdjZW50ZXInfVxuICAgICAgICAgID5cbiAgICAgICAgICAgIHtyZW5kZXJIZWFkZXJDb250ZW50KCl9XG5cbiAgICAgICAgICAgIHtzaG93QWdlbnRJbnRyb2R1Y3Rpb24gJiYgYWdlbnQgPyAoXG4gICAgICAgICAgICAgIDxTQ0NBSUhvbWVJbnRyb2R1Y3Rpb24gZXhwYW5kZWQ9e2V4cGFuZGVkfT57YWdlbnQuaW50cm9kdWN0aW9ufTwvU0NDQUlIb21lSW50cm9kdWN0aW9uPlxuICAgICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAgPC9TQ0NBSUhvbWVIZWFkZXI+XG4gICAgICAgICAge3Nob3dQcm9qZWN0U3VtbWFyeUNhcmQgJiYgKFxuICAgICAgICAgICAgPFNDQ0FIV3JhcHBlclN1bW1hcnlQcm9qZWN0IG9uQ2xpY2s9e2hhbmRsZXJzLnByb2plY3RTdW1tYXJ5fT5cbiAgICAgICAgICAgICAgPFNDQ0FJSG9tZVByb2plY3RTdW1tYXJ5PlxuICAgICAgICAgICAgICAgIDxUZW1wbGF0ZUdyYWRpZW50SWNvbiBoZWlnaHQ9ezI0fSB3aWR0aD17MjR9IC8+XG4gICAgICAgICAgICAgIDwvU0NDQUlIb21lUHJvamVjdFN1bW1hcnk+XG4gICAgICAgICAgICAgIDxTQ0NBSUhvbWVQcm9qZWN0U3VtbWFyeUNvbnRlbnQ+XG4gICAgICAgICAgICAgICAgPFNDQ0FJSG9tZVByb2plY3RTdW1tYXJ5VGl0bGU+e3QoJ2hvbWVNZW51LnByb2plY3RTdW1tYXJ5LnRpdGxlJyl9PC9TQ0NBSUhvbWVQcm9qZWN0U3VtbWFyeVRpdGxlPlxuICAgICAgICAgICAgICAgIDxTQ0NBSUhvbWVQcm9qZWN0U3VtbWFyeURlc2NyaXB0aW9uPlxuICAgICAgICAgICAgICAgICAge3QoJ2hvbWVNZW51LnByb2plY3RTdW1tYXJ5LmRlc2NyaXB0aW9uJyl9XG4gICAgICAgICAgICAgICAgPC9TQ0NBSUhvbWVQcm9qZWN0U3VtbWFyeURlc2NyaXB0aW9uPlxuICAgICAgICAgICAgICA8L1NDQ0FJSG9tZVByb2plY3RTdW1tYXJ5Q29udGVudD5cbiAgICAgICAgICAgIDwvU0NDQUhXcmFwcGVyU3VtbWFyeVByb2plY3Q+XG4gICAgICAgICAgKX1cbiAgICAgICAgICB7c2hvd0R5bmFtaWNTZWN0aW9uICYmIChcbiAgICAgICAgICAgIDxTQ0NBSUhvbWVEeW5hbWljU2VjdGlvblxuICAgICAgICAgICAgICAkZ3Jvdz17aXNNYWlha2VyfVxuICAgICAgICAgICAgICAkYWxpZ25TdGFydD17aXNIZWFkZXJUYXNrQ29udGV4dEhvbWUgfHwgaXNMZWZ0QWxpZ25lZE9yY2hlc3RyYXRvckhvbWV9XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIHtzaG91bGRTaG93UGxhbm5lckZ1YXMgPyAoXG4gICAgICAgICAgICAgICAgPEZyZXF1ZW50bHlVc2VkQWN0aW9uc1xuICAgICAgICAgICAgICAgICAgdmFyaWFudD1cInBsYW5uZXJcIlxuICAgICAgICAgICAgICAgICAgb25TdGFydENoYXQ9e2hhbmRsZUhvbWVTdGFydENoYXR9XG4gICAgICAgICAgICAgICAgICBhZ2VudElkPXthZ2VudD8uaWR9XG4gICAgICAgICAgICAgICAgICBpc1Njcm9sbGluZz17aXNTY3JvbGxpbmd9XG4gICAgICAgICAgICAgICAgICBhY3Rpb25zPXtoZWFkZXJIb3Vyc0Z1YXN9XG4gICAgICAgICAgICAgICAgICBsb2FkaW5nPXtoZWFkZXJIb3Vyc0Z1YXNMb2FkaW5nfVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICAgICAgICB7cmVuZGVyUmVjZW50Q29udGV4dHMoKX1cbiAgICAgICAgICAgICAge3Nob3VsZFNob3dGYXFzICYmIChcbiAgICAgICAgICAgICAgICA8RnJlcXVlbnRseUFza2VkUXVlc3Rpb25zXG4gICAgICAgICAgICAgICAgICBvblN0YXJ0Q2hhdD17b25TdGFydENoYXR9XG4gICAgICAgICAgICAgICAgICBzaG93RkFRcz17c2hvd0ZBUXN9XG4gICAgICAgICAgICAgICAgICBzaG93UHJvamVjdFN1bW1hcnk9e3Nob3dQcm9qZWN0U3VtbWFyeX1cbiAgICAgICAgICAgICAgICAgIGFnZW50SWQ9e2FnZW50Py5pZH1cbiAgICAgICAgICAgICAgICAgIGxhbmc9e2xhbmd9XG4gICAgICAgICAgICAgICAgICBpc1Njcm9sbGluZz17aXNTY3JvbGxpbmd9XG4gICAgICAgICAgICAgICAgICBmYXFzPXtmYXFzfVxuICAgICAgICAgICAgICAgICAgbG9hZGluZz17ZmFxc0FyZUxvYWRpbmd9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAge3Nob3VsZFNob3dGdWFzICYmIChcbiAgICAgICAgICAgICAgICA8RnJlcXVlbnRseVVzZWRBY3Rpb25zXG4gICAgICAgICAgICAgICAgICBvblN0YXJ0Q2hhdD17b25TdGFydENoYXR9XG4gICAgICAgICAgICAgICAgICBhZ2VudElkPXthZ2VudD8uaWR9XG4gICAgICAgICAgICAgICAgICBpc1Njcm9sbGluZz17aXNTY3JvbGxpbmd9XG4gICAgICAgICAgICAgICAgICBhY3Rpb25zPXtmdWFzfVxuICAgICAgICAgICAgICAgICAgbG9hZGluZz17ZnVhc0FyZUxvYWRpbmd9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAge2lzTWFpYWtlciA/IDxDaGF0QUlIb21lTWFpYWtlciBvblN0YXJ0Q2hhdD17b25TdGFydENoYXR9IC8+IDogbnVsbH1cbiAgICAgICAgICAgIDwvU0NDQUlIb21lRHluYW1pY1NlY3Rpb24+XG4gICAgICAgICAgKX1cbiAgICAgICAgPC9TQ0NBSUhvbWVDb250ZW50SW5uZXI+XG4gICAgICA8L1NDQ0FJSG9tZUNvbnRlbnQ+XG4gICAgICB7aG9tZVNjcm9sbGFibGVMYXlvdXQgJiYgPFNDQ0FJSG9tZUdyYWRpZW50Qm90dG9tICRzaG93PXtzaG93Qm90dG9tR3JhZGllbnR9IC8+fVxuICAgIDwvU0NDQUlIb21lQ29udGFpbmVyPlxuICApXG59XG4iXSwibWFwcGluZ3MiOiI7QUFBQTtBQUNBO0FBQ0E7QUFDQSxTQUFTQSxTQUFTLEVBQUVDLGVBQWUsRUFBRUMsTUFBTSxFQUFFQyxRQUFRLEVBQUVDLFdBQVcsRUFBRUMsT0FBTyxRQUFRLE9BQU87QUFDMUYsU0FBU0MsU0FBUyxRQUFRLFdBQVc7QUFFckMsU0FBU0MsT0FBTyxRQUFRLDhDQUE4QztBQUN0RSxTQUFTQyxhQUFhLFFBQVEsZ0RBQWdEO0FBQzlFLFNBQVNDLElBQUksUUFBUSxxQkFBcUI7QUFDMUMsU0FBU0MsTUFBTSxFQUFFQyxRQUFRLFFBQVEseUJBQXlCO0FBSTFELFNBQ0VDLGtCQUFrQixFQUNsQkMsZ0JBQWdCLEVBQ2hCQyxxQkFBcUIsRUFDckJDLG9CQUFvQixFQUNwQkMsdUJBQXVCLEVBQ3ZCQyxlQUFlLEVBQ2ZDLGlCQUFpQixFQUNqQkMsMkJBQTJCLEVBQzNCQyxrQkFBa0IsRUFDbEJDLHVCQUF1QixFQUN2QkMsOEJBQThCLEVBQzlCQyw0QkFBNEIsRUFDNUJDLGtDQUFrQyxFQUNsQ0MsMEJBQTBCLEVBQzFCQyxxQkFBcUIsRUFDckJDLDJCQUEyQixFQUMzQkMsc0JBQXNCLEVBQ3RCQywwQkFBMEIsRUFDMUJDLHNCQUFzQixFQUN0QkMsb0JBQW9CLEVBQ3BCQyx3QkFBd0IsRUFDeEJDLGNBQWMsRUFDZEMsbUJBQW1CLEVBQ25CQyxpQkFBaUIsRUFDakJDLHVCQUF1QixFQUN2QkMsdUJBQXVCLEVBQ3ZCQywyQkFBMkIsRUFDM0JDLG9DQUFvQyxFQUNwQ0MsbUNBQW1DLEVBQ25DQyxzQ0FBc0MsRUFDdENDLDBCQUEwQixFQUMxQkMsOEJBQThCLEVBQzlCQyw4QkFBOEIsRUFDOUJDLGtDQUFrQyxFQUNsQ0MsOENBQThDLFFBQ3pDLFVBQVU7QUFDakIsU0FBU0MsZ0JBQWdCLFFBQXNCLGlDQUFpQztBQUNoRixTQUFTQyxPQUFPLEVBQUVDLGtCQUFrQixFQUFFQyxhQUFhLFFBQVEsMkJBQTJCO0FBQ3RGLFNBQVNDLGlCQUFpQixRQUFRLDBCQUEwQjtBQUM1RCxTQUFTQyxxQkFBcUIsUUFBUSxvQ0FBb0M7QUFDMUUsU0FBU0MsNEJBQTRCLFFBQVEsc0NBQXNDO0FBQ25GLFNBQVNDLGNBQWMsUUFBUSx3Q0FBd0M7QUFDdkUsU0FBU0MsY0FBYyxRQUFRLGlDQUFpQztBQUdoRSxTQUFTQyx3QkFBd0IsUUFBUSxzQ0FBc0M7QUFDL0UsU0FBU0MscUJBQXFCLFFBQVEsbUNBQW1DO0FBQ3pFLFNBQVNDLHdCQUF3QixRQUFRLHlDQUF5QztBQUNsRixTQUFTQyx3QkFBd0IsUUFBUSx5Q0FBeUM7QUFDbEYsU0FBU0MsOEJBQThCLFFBQVEsd0NBQXdDO0FBQ3ZGLFNBQVNDLDJCQUEyQixRQUFRLDRDQUE0QztBQUN4RixTQUFTQyxpQkFBaUIsUUFBUSxrQ0FBa0M7QUFFcEUsU0FBU0MsV0FBVyxRQUFRLCtCQUErQjtBQUMzRCxTQUFTQyxvQkFBb0IsUUFBUSx3Q0FBd0M7QUFDN0UsU0FBU0MsaUJBQWlCLFFBQVEscUJBQXFCO0FBQ3ZELFNBQ0VDLDhCQUE4QixFQUM5QkMsZ0NBQWdDLEVBQ2hDQyw0QkFBNEIsRUFDNUJDLGtCQUFrQixFQUNsQkMsdUJBQXVCLEVBQ3ZCQyxtQ0FBbUMsRUFDbkNDLG1CQUFtQixFQUNuQkMsMEJBQTBCLEVBQzFCQyxtQkFBbUIsRUFDbkJDLDZCQUE2QixFQUM3QkMsdUJBQXVCLEVBQ3ZCQyxrQ0FBa0MsRUFDbENDLHVCQUF1QixFQUN2QkMsMEJBQTBCLEVBQzFCQyw4QkFBOEIsRUFDOUJDLHFCQUFxQixFQUNyQkMscUJBQXFCLEVBQ3JCQywyQkFBMkIsRUFDM0JDLDJCQUEyQixFQUMzQkMsOEJBQThCLEVBQzlCQyw4QkFBOEIsRUFDOUJDLDRCQUE0QixFQUM1QkMsaUNBQWlDLEVBQ2pDQyw0QkFBNEIsRUFDNUJDLDRCQUE0QixFQUM1QkMsaUJBQWlCLEVBQ2pCQyxpQkFBaUIsRUFDakJDLG1DQUFtQyxFQUNuQ0Msb0NBQW9DLEVBQ3BDQyw0Q0FBNEMsRUFDNUNDLDBCQUEwQixFQUMxQkMsNkJBQTZCLEVBQzdCQyxxQkFBcUIsRUFDckJDLDhCQUE4QixFQUM5QkMsK0JBQStCLEVBQy9CQyw4QkFBOEIsUUFDekIsc0JBQXNCO0FBQUEsU0FBQUMsR0FBQSxJQUFBQyxJQUFBLEVBQUFDLElBQUEsSUFBQUMsS0FBQSxFQUFBQyxRQUFBLElBQUFDLFNBQUE7QUFnQjdCLFdBQVlDLGlCQUFpQiwwQkFBakJBLGlCQUFpQjtFQUFqQkEsaUJBQWlCO0VBQWpCQSxpQkFBaUI7RUFBQSxPQUFqQkEsaUJBQWlCO0FBQUE7QUFLN0IsSUFBTUMseUJBQXlCLEdBQUcsU0FBUztBQUMzQyxJQUFNQywyQkFBMkIsR0FBRyxFQUFFO0FBRXRDLElBQU1DLGlCQUFpQixHQUFHLFNBQXBCQSxpQkFBaUJBLENBQUFDLElBQUEsRUFVakI7RUFBQSxJQVRKQyxPQUFPLEdBQUFELElBQUEsQ0FBUEMsT0FBTztJQUNQQyxLQUFLLEdBQUFGLElBQUEsQ0FBTEUsS0FBSztJQUNMQyxPQUFPLEdBQUFILElBQUEsQ0FBUEcsT0FBTztJQUFBQyxjQUFBLEdBQUFKLElBQUEsQ0FDUEssU0FBUztJQUFUQSxTQUFTLEdBQUFELGNBQUEsY0FBRyxLQUFLLEdBQUFBLGNBQUE7RUFPakIsSUFBTUUsT0FBTyxHQUFHcEgsTUFBTSxDQUFrQixJQUFJLENBQUM7RUFDN0MsSUFBQXFILGtCQUFBLEdBQXdCcEUsaUJBQWlCLENBQUNtRSxPQUFPLEVBQUUsQ0FBQ0osS0FBSyxDQUFDLENBQUM7SUFBbkRNLFdBQVcsR0FBQUQsa0JBQUEsQ0FBWEMsV0FBVztFQUVuQixvQkFDRWYsS0FBQSxDQUFDL0QsMEJBQTBCO0lBQUMrRSxJQUFJLEVBQUMsUUFBUTtJQUFDTixPQUFPLEVBQUVBLE9BQVE7SUFBQ08sVUFBVSxFQUFFTCxTQUFVO0lBQUFNLFFBQUEsZ0JBQ2hGcEIsSUFBQSxDQUFDNUQsOEJBQThCO01BQUFnRixRQUFBLEVBQzVCVixPQUFPLENBQUNRLElBQUksS0FBSyxNQUFNLGdCQUN0QmxCLElBQUEsQ0FBQy9GLGFBQWE7UUFBQ29ILEtBQUssRUFBRWYseUJBQTBCO1FBQUNnQixLQUFLLEVBQUMsTUFBTTtRQUFDQyxNQUFNLEVBQUM7TUFBTSxDQUFFLENBQUMsR0FFOUUxRSxxQkFBcUIsQ0FBQzZELE9BQU8sQ0FBQ1EsSUFBSSxFQUFFWix5QkFBeUIsRUFBRWtCLFNBQVMsRUFBRWpCLDJCQUEyQjtJQUN0RyxDQUM2QixDQUFDLGVBQ2pDUCxJQUFBLENBQUMzRCw4QkFBOEI7TUFBQ29GLEdBQUcsRUFBRVYsT0FBUTtNQUFBSyxRQUFBLEVBQzFDSCxXQUFXLGdCQUNWakIsSUFBQSxDQUFDaEcsT0FBTztRQUFDMEgsS0FBSyxFQUFFZixLQUFNO1FBQUFTLFFBQUEsZUFDcEJwQixJQUFBO1VBQUFvQixRQUFBLEVBQU9UO1FBQUssQ0FBTztNQUFDLENBQ2IsQ0FBQyxHQUVWQTtJQUNELENBQzZCLENBQUM7RUFBQSxDQUNQLENBQUM7QUFFakMsQ0FBQztBQUVELE9BQU8sSUFBTWdCLFVBQVUsR0FBRyxTQUFiQSxVQUFVQSxDQUFBQyxLQUFBLEVBQXVFO0VBQUEsSUFBakVDLFFBQVEsR0FBQUQsS0FBQSxDQUFSQyxRQUFRO0lBQUVDLFdBQVcsR0FBQUYsS0FBQSxDQUFYRSxXQUFXO0lBQUVDLFFBQVEsR0FBQUgsS0FBQSxDQUFSRyxRQUFRO0lBQUVDLFFBQVEsR0FBQUosS0FBQSxDQUFSSSxRQUFRO0VBQ3BFLElBQUFDLEtBQUEsR0FBb0IvSCxJQUFJLENBQUMsQ0FBQztJQUFsQmdJLENBQUMsR0FBQUQsS0FBQSxDQUFEQyxDQUFDO0lBQUVDLElBQUksR0FBQUYsS0FBQSxDQUFKRSxJQUFJO0VBQ2YsSUFBTUMsS0FBSyxHQUFHaEksUUFBUSxDQUFDLENBQUM7RUFDeEIsSUFBTWlJLElBQUksR0FBRzVGLE9BQU8sQ0FBQyxDQUFDO0VBQ3RCLElBQUE2RixpQkFBQSxHQUNFOUYsZ0JBQWdCLENBQUMsQ0FBQztJQURaK0YsS0FBSyxHQUFBRCxpQkFBQSxDQUFMQyxLQUFLO0lBQUVDLE9BQU8sR0FBQUYsaUJBQUEsQ0FBUEUsT0FBTztJQUFFQyxNQUFNLEdBQUFILGlCQUFBLENBQU5HLE1BQU07SUFBRUMsT0FBTyxHQUFBSixpQkFBQSxDQUFQSSxPQUFPO0lBQUVDLElBQUksR0FBQUwsaUJBQUEsQ0FBSkssSUFBSTtJQUFFQyxZQUFZLEdBQUFOLGlCQUFBLENBQVpNLFlBQVk7SUFBRUMsU0FBUyxHQUFBUCxpQkFBQSxDQUFUTyxTQUFTO0lBQUVDLFVBQVUsR0FBQVIsaUJBQUEsQ0FBVlEsVUFBVTtJQUFFQyxPQUFPLEdBQUFULGlCQUFBLENBQVBTLE9BQU87SUFBRUMsZUFBZSxHQUFBVixpQkFBQSxDQUFmVSxlQUFlO0VBRzVHLElBQU1DLE1BQU0sR0FBR2xHLGNBQWMsQ0FBQ3dGLEtBQWMsQ0FBQztFQUM3QyxJQUFNVyxvQkFBb0IsR0FBR3RFLDJCQUEyQixDQUFDb0QsUUFBUSxFQUFFTyxLQUFLLGFBQUxBLEtBQUssdUJBQUxBLEtBQUssQ0FBRXJCLElBQUksQ0FBQztFQUMvRSxJQUFNaUMsSUFBSSxHQUFHaEYsbUJBQW1CLENBQUNnRSxJQUFJLENBQUNpQixRQUFRLENBQUM7RUFFL0MsSUFBTUMsb0JBQW9CLEdBQUcsT0FBT0MsTUFBTSxLQUFLLFdBQVcsSUFBSWhGLGtDQUFrQyxDQUFDZ0YsTUFBTSxDQUFDO0VBQ3hHLElBQU1DLFVBQVUsR0FBRyxJQUFJO0VBQ3ZCLElBQU1DLGtCQUFrQixHQUFHLENBQUMsRUFBRVAsTUFBTSxJQUFJSSxvQkFBb0IsQ0FBQztFQUM3RDtFQUNBO0VBQ0EsSUFBTUksU0FBUyxHQUFHekcsY0FBYyxDQUFDdUYsS0FBSyxDQUFDO0VBQ3ZDLElBQU1tQixnQkFBZ0IsR0FBRzVHLDRCQUE0QixDQUFDeUYsS0FBSyxDQUFDO0VBQzVELElBQU1vQixnQkFBZ0IsR0FBRzVGLHVCQUF1QixDQUFDO0lBQy9DNkYsTUFBTSxFQUFFakIsSUFBSSxhQUFKQSxJQUFJLHVCQUFKQSxJQUFJLENBQUVrQixFQUFFO0lBQ2hCQyxjQUFjLEVBQUVsQixZQUFZLGFBQVpBLFlBQVksdUJBQVpBLFlBQVksQ0FBRW1CLFNBQVM7SUFDdkNDLFFBQVEsRUFBRXZCLE1BQU0sYUFBTkEsTUFBTSx1QkFBTkEsTUFBTSxDQUFFb0IsRUFBRTtJQUNwQkUsU0FBUyxFQUFFckIsT0FBTyxhQUFQQSxPQUFPLHVCQUFQQSxPQUFPLENBQUVtQjtFQUN0QixDQUFDLENBQUM7RUFDRixJQUFBSSxxQkFBQSxHQVVJN0YsNkJBQTZCLENBQUM7TUFDaENvRSxPQUFPLEVBQVBBLE9BQU87TUFDUDBCLFNBQVMsRUFBRTNCLEtBQUssYUFBTEEsS0FBSyx1QkFBTEEsS0FBSyxDQUFFckIsSUFBSTtNQUN0QmlELE1BQU0sRUFBRWxCLE1BQU07TUFDZFMsZ0JBQWdCLEVBQWhCQSxnQkFBZ0I7TUFDaEJVLE1BQU0sRUFBRS9CLElBQUksQ0FBQ2dDLE9BQU87TUFDcEJWLGdCQUFnQixFQUFoQkE7SUFDRixDQUFDLENBQUM7SUFoQkFXLFlBQVksR0FBQUwscUJBQUEsQ0FBWkssWUFBWTtJQUNaQyxjQUFjLEdBQUFOLHFCQUFBLENBQWRNLGNBQWM7SUFDZEMsYUFBYSxHQUFBUCxxQkFBQSxDQUFiTyxhQUFhO0lBQ2JDLG9CQUFvQixHQUFBUixxQkFBQSxDQUFwQlEsb0JBQW9CO0lBQ3BCQyx1QkFBdUIsR0FBQVQscUJBQUEsQ0FBdkJTLHVCQUF1QjtJQUN2QkMsc0JBQXNCLEdBQUFWLHFCQUFBLENBQXRCVSxzQkFBc0I7SUFDdEJDLHdCQUF3QixHQUFBWCxxQkFBQSxDQUF4Qlcsd0JBQXdCO0lBQ3hCQyxpQkFBaUIsR0FBQVoscUJBQUEsQ0FBakJZLGlCQUFpQjtJQUNqQkMsNkJBQTZCLEdBQUFiLHFCQUFBLENBQTdCYSw2QkFBNkI7RUFTL0IsSUFBTUMsNEJBQTRCLEdBQUcvRyxtQ0FBbUMsQ0FBQztJQUN2RTJHLHNCQUFzQixFQUF0QkEsc0JBQXNCO0lBQ3RCQyx3QkFBd0IsRUFBeEJBLHdCQUF3QjtJQUN4QkksU0FBUyxFQUFFckksYUFBYSxDQUFDMEYsSUFBSSxDQUFDZ0MsT0FBTztFQUN2QyxDQUFDLENBQUM7RUFDRixJQUFNWSx5QkFBeUIsR0FBR25MLE9BQU8sQ0FDdkM7SUFBQSxPQUNFOEQsZ0NBQWdDLENBQUM7TUFDL0JnSCx3QkFBd0IsRUFBeEJBLHdCQUF3QjtNQUN4QkYsdUJBQXVCLEVBQXZCQSx1QkFBdUI7TUFDdkJOLE1BQU0sRUFBRS9CLElBQUksQ0FBQ2dDO0lBQ2YsQ0FBQyxDQUFDO0VBQUEsR0FDSixDQUFDaEMsSUFBSSxDQUFDZ0MsT0FBTyxFQUFFTyx3QkFBd0IsRUFBRUYsdUJBQXVCLENBQ2xFLENBQUM7O0VBRUQ7RUFDQTtFQUNBLElBQUFRLFNBQUEsR0FBOEN0TCxRQUFRLENBQTJCLElBQUksQ0FBQztJQUFBdUwsVUFBQSxHQUFBQyxjQUFBLENBQUFGLFNBQUE7SUFBL0VHLGVBQWUsR0FBQUYsVUFBQTtJQUFFRyxrQkFBa0IsR0FBQUgsVUFBQTtFQUMxQzFMLFNBQVMsQ0FBQyxZQUFNO0lBQ2QsSUFBSSxDQUFDa0ssZ0JBQWdCLEVBQUUyQixrQkFBa0IsQ0FBQyxJQUFJLENBQUM7RUFDakQsQ0FBQyxFQUFFLENBQUMzQixnQkFBZ0IsQ0FBQyxDQUFDO0VBRXRCLElBQU00QixhQUFhLEdBQUd6TCxPQUFPLENBQzNCO0lBQUEsT0FDRTZELDhCQUE4QixDQUFDO01BQzdCa0gsaUJBQWlCLEVBQWpCQSxpQkFBaUI7TUFDakJRLGVBQWUsRUFBZkEsZUFBZTtNQUNmMUMsSUFBSSxFQUFFQSxJQUFJLGFBQUpBLElBQUksZUFBSkEsSUFBSSxDQUFFa0IsRUFBRSxHQUFHO1FBQUVBLEVBQUUsRUFBRWxCLElBQUksQ0FBQ2tCLEVBQUU7UUFBRTJCLElBQUksRUFBRTdDLElBQUksQ0FBQzZDO01BQUssQ0FBQyxHQUFHLElBQUk7TUFDeEQ1QyxZQUFZLEVBQUVBLFlBQVksYUFBWkEsWUFBWSxlQUFaQSxZQUFZLENBQUVtQixTQUFTLEdBQ2pDO1FBQUVBLFNBQVMsRUFBRW5CLFlBQVksQ0FBQ21CLFNBQVM7UUFBRTBCLFdBQVcsRUFBRTdDLFlBQVksQ0FBQzZDO01BQVksQ0FBQyxHQUM1RSxJQUFJO01BQ1JoRCxNQUFNLEVBQUVBLE1BQU0sYUFBTkEsTUFBTSxlQUFOQSxNQUFNLENBQUVvQixFQUFFLEdBQUc7UUFBRUEsRUFBRSxFQUFFcEIsTUFBTSxDQUFDb0IsRUFBRTtRQUFFMkIsSUFBSSxFQUFFL0MsTUFBTSxDQUFDK0M7TUFBSyxDQUFDLEdBQUc7SUFDOUQsQ0FBQyxDQUFDO0VBQUEsR0FDSixDQUNFSCxlQUFlLEVBQ2ZSLGlCQUFpQixFQUNqQmxDLElBQUksYUFBSkEsSUFBSSx1QkFBSkEsSUFBSSxDQUFFa0IsRUFBRSxFQUNSbEIsSUFBSSxhQUFKQSxJQUFJLHVCQUFKQSxJQUFJLENBQUU2QyxJQUFJLEVBQ1Y1QyxZQUFZLGFBQVpBLFlBQVksdUJBQVpBLFlBQVksQ0FBRW1CLFNBQVMsRUFDdkJuQixZQUFZLGFBQVpBLFlBQVksdUJBQVpBLFlBQVksQ0FBRTZDLFdBQVcsRUFDekJoRCxNQUFNLGFBQU5BLE1BQU0sdUJBQU5BLE1BQU0sQ0FBRW9CLEVBQUUsRUFDVnBCLE1BQU0sYUFBTkEsTUFBTSx1QkFBTkEsTUFBTSxDQUFFK0MsSUFBSSxDQUVoQixDQUFDO0VBRUQsSUFBTUUsZ0JBQWdCLEdBQUc1TCxPQUFPLENBQzlCO0lBQUEsT0FDRXVFLHVCQUF1QixDQUFDO01BQ3RCdUYsTUFBTSxFQUFFakIsSUFBSSxhQUFKQSxJQUFJLHVCQUFKQSxJQUFJLENBQUVrQixFQUFFO01BQ2hCQyxjQUFjLEVBQUVsQixZQUFZLGFBQVpBLFlBQVksdUJBQVpBLFlBQVksQ0FBRW1CLFNBQVM7TUFDdkNDLFFBQVEsRUFBRXZCLE1BQU0sYUFBTkEsTUFBTSx1QkFBTkEsTUFBTSxDQUFFb0IsRUFBRTtNQUNwQkUsU0FBUyxFQUFFckIsT0FBTyxhQUFQQSxPQUFPLHVCQUFQQSxPQUFPLENBQUVtQjtJQUN0QixDQUFDLENBQUM7RUFBQSxHQUNKLENBQUNsQixJQUFJLGFBQUpBLElBQUksdUJBQUpBLElBQUksQ0FBRWtCLEVBQUUsRUFBRWpCLFlBQVksYUFBWkEsWUFBWSx1QkFBWkEsWUFBWSxDQUFFbUIsU0FBUyxFQUFFckIsT0FBTyxhQUFQQSxPQUFPLHVCQUFQQSxPQUFPLENBQUVtQixFQUFFLEVBQUVwQixNQUFNLGFBQU5BLE1BQU0sdUJBQU5BLE1BQU0sQ0FBRW9CLEVBQUUsQ0FDN0QsQ0FBQztFQUVELElBQU04QixxQkFBcUIsR0FBRzdMLE9BQU8sQ0FDbkM7SUFBQSxPQUNFK0QsNEJBQTRCLENBQUM7TUFDM0IyRyxhQUFhLEVBQWJBLGFBQWE7TUFDYkMsb0JBQW9CLEVBQXBCQSxvQkFBb0I7TUFDcEJILFlBQVksRUFBWkEsWUFBWTtNQUNaTyxpQkFBaUIsRUFBakJBLGlCQUFpQjtNQUNqQmUsaUJBQWlCLEVBQUVMLGFBQWEsYUFBYkEsYUFBYSx1QkFBYkEsYUFBYSxDQUFFckUsSUFBSTtNQUN0Q3dFLGdCQUFnQixFQUFoQkE7SUFDRixDQUFDLENBQUM7RUFBQSxHQUNKLENBQUNsQixhQUFhLEVBQUVDLG9CQUFvQixFQUFFSCxZQUFZLEVBQUVPLGlCQUFpQixFQUFFVSxhQUFhLGFBQWJBLGFBQWEsdUJBQWJBLGFBQWEsQ0FBRXJFLElBQUksRUFBRXdFLGdCQUFnQixDQUM5RyxDQUFDO0VBQ0QsSUFBTUcsc0JBQXNCLEdBQUdGLHFCQUFxQixLQUFLLFFBQVE7RUFDakU7RUFDQTtFQUNBLElBQU1HLFdBQW9CLEdBQUdoSSxrQkFBa0IsQ0FBQztJQUM5QzBHLGFBQWEsRUFBYkEsYUFBYTtJQUNiRixZQUFZLEVBQVpBLFlBQVk7SUFDWm9CLGdCQUFnQixFQUFoQkEsZ0JBQWdCO0lBQ2hCbEQsT0FBTyxFQUFQQTtFQUNGLENBQUMsQ0FBQztFQUVGLElBQU11RCxnQkFBZ0IsR0FBR3hILHVCQUF1QixDQUFDO0lBQy9DNEYsTUFBTSxFQUFFbEIsTUFBTTtJQUNkUSxTQUFTLEVBQVRBLFNBQVM7SUFDVGdCLG9CQUFvQixFQUFwQkEsb0JBQW9CO0lBQ3BCSCxZQUFZLEVBQVpBLFlBQVk7SUFDWk8saUJBQWlCLEVBQWpCQSxpQkFBaUI7SUFDakJtQixPQUFPLEVBQUV6RCxLQUFLLGFBQUxBLEtBQUssdUJBQUxBLEtBQUssQ0FBRXNCO0VBQ2xCLENBQUMsQ0FBQztFQUNGLElBQU1vQyxtQkFBbUIsR0FBR3pILDBCQUEwQixDQUFDO0lBQ3JEZ0csYUFBYSxFQUFiQSxhQUFhO0lBQ2JGLFlBQVksRUFBWkEsWUFBWTtJQUNaTyxpQkFBaUIsRUFBakJBLGlCQUFpQjtJQUNqQmUsaUJBQWlCLEVBQUVMLGFBQWEsYUFBYkEsYUFBYSx1QkFBYkEsYUFBYSxDQUFFckUsSUFBSTtJQUN0Q3dFLGdCQUFnQixFQUFoQkE7RUFDRixDQUFDLENBQUM7RUFDRixJQUFBUSxxQkFBQSxHQUFxRC9JLHdCQUF3QixDQUMzRTRJLGdCQUFnQixFQUNoQkQsV0FBVyxFQUNYRyxtQkFDRixDQUFDO0lBSmdCRSxTQUFTLEdBQUFELHFCQUFBLENBQWxCRSxPQUFPO0lBQXNCQyxXQUFXLEdBQUFILHFCQUFBLENBQXBCSSxPQUFPO0VBS25DLElBQUFDLHNCQUFBLEdBQXNGcEosd0JBQXdCLENBQzVHd0gsc0JBQXNCLElBQUksQ0FBQ0Msd0JBQXdCLEdBQUdyQyxLQUFLLGFBQUxBLEtBQUssdUJBQUxBLEtBQUssQ0FBRXNCLEVBQUUsR0FBR3JDLFNBQVMsRUFDM0UsU0FDRixDQUFDO0lBSGdCZ0YsdUJBQXVCLEdBQUFELHNCQUFBLENBQWhDSCxPQUFPO0lBQW9DSyw4QkFBOEIsR0FBQUYsc0JBQUEsQ0FBdkNELE9BQU87RUFJakQsSUFBQUksc0JBQUEsR0FBc0V2Six3QkFBd0IsQ0FDNUZ5SCx3QkFBd0IsR0FBR3JDLEtBQUssYUFBTEEsS0FBSyx1QkFBTEEsS0FBSyxDQUFFc0IsRUFBRSxHQUFHckMsU0FBUyxFQUNoRCxpQkFDRixDQUFDO0lBSGdCbUYsZUFBZSxHQUFBRCxzQkFBQSxDQUF4Qk4sT0FBTztJQUE0QlEsc0JBQXNCLEdBQUFGLHNCQUFBLENBQS9CSixPQUFPO0VBSXpDLElBQU1PLGVBQWUsR0FBRy9NLE9BQU8sQ0FBQyxZQUFNO0lBQ3BDLElBQUk4Syx3QkFBd0IsRUFBRSxPQUFPeEgsd0JBQXdCLENBQUN1SixlQUFlLENBQUM7SUFDOUUsT0FBT0gsdUJBQXVCO0VBQ2hDLENBQUMsRUFBRSxDQUFDNUIsd0JBQXdCLEVBQUUrQixlQUFlLEVBQUVILHVCQUF1QixDQUFDLENBQUM7RUFDeEUsSUFBTU0sc0JBQXNCLEdBQUdsQyx3QkFBd0IsR0FBR2dDLHNCQUFzQixHQUFHSCw4QkFBOEI7RUFDakgsSUFBTU0sbUJBQW1CLEdBQUdqTixPQUFPLENBQ2pDO0lBQUEsT0FDRXVELDhCQUE4QixDQUFDO01BQzdCc0gsc0JBQXNCLEVBQXRCQSxzQkFBc0I7TUFDdEIwQixXQUFXLEVBQUVTLHNCQUFzQjtNQUNuQ0UsU0FBUyxFQUFFSCxlQUFlLENBQUNJO0lBQzdCLENBQUMsQ0FBQztFQUFBLEdBQ0osQ0FBQ3RDLHNCQUFzQixFQUFFbUMsc0JBQXNCLEVBQUVELGVBQWUsQ0FBQ0ksTUFBTSxDQUN6RSxDQUFDO0VBQ0QsSUFBQUMsa0JBQUEsR0FBNEUzSixpQkFBaUIsQ0FBQztNQUM1RjRKLE9BQU8sRUFBRTVDLGNBQWMsSUFBSSxDQUFDQyxhQUFhO01BQ3pDNEMsS0FBSyxFQUFFTDtJQUNULENBQUMsQ0FBQztJQUhnQk0scUJBQXFCLEdBQUFILGtCQUFBLENBQS9CSSxRQUFRO0lBQWtDQyxxQkFBcUIsR0FBQUwsa0JBQUEsQ0FBOUJaLE9BQU87RUFJaEQsSUFBTWtCLGNBQWMsR0FBRzFOLE9BQU8sQ0FDNUI7SUFBQSxPQUFNK0UsMkJBQTJCLENBQUN3SSxxQkFBcUIsRUFBRXBDLHlCQUF5QixDQUFDO0VBQUEsR0FDbkYsQ0FBQ29DLHFCQUFxQixFQUFFcEMseUJBQXlCLENBQ25ELENBQUM7RUFDRCxJQUFNd0MseUJBQXlCLEdBQUczTixPQUFPLENBQ3ZDO0lBQUEsT0FBTWdGLDhCQUE4QixDQUFDaUksbUJBQW1CLENBQUM7RUFBQSxHQUN6RCxDQUFDQSxtQkFBbUIsQ0FDdEIsQ0FBQztFQUNELElBQU1XLGVBQWUsR0FBRzdCLHNCQUFzQixHQUFHRSxnQkFBZ0IsR0FBR3ZFLFNBQVM7RUFDN0UsSUFBTW1HLGtCQUFrQixHQUFHOUIsc0JBQXNCLEdBQUdJLG1CQUFtQixHQUFHekUsU0FBUztFQUNuRixJQUFBb0cscUJBQUEsR0FJSXRLLDJCQUEyQixDQUFDb0ssZUFBZSxFQUFFdkUsSUFBSSxFQUFFd0Usa0JBQWtCLENBQUM7SUFIbEVFLFNBQVMsR0FBQUQscUJBQUEsQ0FBZkUsSUFBSTtJQUNLQyxXQUFXLEdBQUFILHFCQUFBLENBQXBCdEIsT0FBTztJQUNQMEIsaUNBQWlDLEdBQUFKLHFCQUFBLENBQWpDSSxpQ0FBaUM7RUFFbkMsSUFBTUMsWUFBWSxHQUFHdE8sTUFBTSxDQUFnRSxJQUFJLENBQUM7RUFDaEdGLFNBQVMsQ0FBQyxZQUFNO0lBQ2Q7SUFDQSxJQUFJLENBQUNzTSxnQkFBZ0IsSUFBSSxDQUFDRixzQkFBc0IsRUFBRTtJQUNsRCxJQUFNcUMsVUFBVSxHQUFHOUksaUJBQWlCLENBQUMyRyxnQkFBZ0IsRUFBRTVDLElBQUksRUFBRThDLG1CQUFtQixDQUFDO0lBQ2pGLElBQU1rQyxPQUFPLEdBQUdGLFlBQVksQ0FBQ0csT0FBTyxHQUNoQ2hKLGlCQUFpQixDQUFDNkksWUFBWSxDQUFDRyxPQUFPLENBQUNwQyxPQUFPLEVBQUVpQyxZQUFZLENBQUNHLE9BQU8sQ0FBQ2pGLElBQUksRUFBRThFLFlBQVksQ0FBQ0csT0FBTyxDQUFDQyxVQUFVLENBQUMsR0FDM0csSUFBSTtJQUNSLElBQUloSixpQkFBaUIsQ0FBQzZJLFVBQVUsRUFBRUMsT0FBTyxDQUFDLEVBQUU7TUFDMUNGLFlBQVksQ0FBQ0csT0FBTyxHQUFHO1FBQUVwQyxPQUFPLEVBQUVELGdCQUFnQjtRQUFFNUMsSUFBSSxFQUFKQSxJQUFJO1FBQUVrRixVQUFVLEVBQUVwQztNQUFvQixDQUFDO01BQzNGK0IsaUNBQWlDLENBQUM7UUFBRWhDLE9BQU8sRUFBRUQsZ0JBQWdCO1FBQUU1QyxJQUFJLEVBQUpBLElBQUk7UUFBRWtGLFVBQVUsRUFBRXBDO01BQW9CLENBQUMsQ0FBQztJQUN6RztFQUNGLENBQUMsRUFBRSxDQUFDRixnQkFBZ0IsRUFBRUUsbUJBQW1CLEVBQUVKLHNCQUFzQixFQUFFMUMsSUFBSSxFQUFFNkUsaUNBQWlDLENBQUMsQ0FBQztFQUU1RyxJQUFNRixJQUFJLEdBQUdELFNBQVM7RUFDdEIsSUFBTVMsSUFBSSxHQUFHbkMsU0FBUztFQUN0QixJQUFNb0MsY0FBYyxHQUFHUixXQUFXO0VBQ2xDLElBQU1TLGNBQWMsR0FBR25DLFdBQVc7RUFFbEMsSUFBTW9DLGNBQWMsR0FBRy9KLHFCQUFxQixDQUFDO0lBQzNDeUYsTUFBTSxFQUFFbEIsTUFBTTtJQUNkNEMsc0JBQXNCLEVBQXRCQSxzQkFBc0I7SUFDdEJwQixvQkFBb0IsRUFBcEJBLG9CQUFvQjtJQUNwQkksaUJBQWlCLEVBQWpCQSxpQkFBaUI7SUFDakJQLFlBQVksRUFBWkEsWUFBWTtJQUNaZixVQUFVLEVBQVZBLFVBQVU7SUFDVkUsU0FBUyxFQUFUQSxTQUFTO0lBQ1RpRixTQUFTLEVBQUVaLElBQUksQ0FBQ2IsTUFBTTtJQUN0QmMsV0FBVyxFQUFFUTtFQUNmLENBQUMsQ0FBQztFQUNGLElBQU1JLGNBQWMsR0FBR2hLLHFCQUFxQixDQUFDO0lBQzNDOEYsb0JBQW9CLEVBQXBCQSxvQkFBb0I7SUFDcEJoQixTQUFTLEVBQVRBLFNBQVM7SUFDVG9CLGlCQUFpQixFQUFqQkEsaUJBQWlCO0lBQ2pCUCxZQUFZLEVBQVpBLFlBQVk7SUFDWjBDLFNBQVMsRUFBRXNCLElBQUksQ0FBQ3JCLE1BQU07SUFDdEJaLFdBQVcsRUFBRW1DO0VBQ2YsQ0FBQyxDQUFDO0VBQ0YsSUFBQUkscUJBQUEsR0FBa0M1Siw0QkFBNEIsQ0FBQztNQUM3RDJGLHNCQUFzQixFQUF0QkEsc0JBQXNCO01BQ3RCbUMsc0JBQXNCLEVBQXRCQSxzQkFBc0I7TUFDdEIrQixvQkFBb0IsRUFBRWhDLGVBQWUsQ0FBQ0k7SUFDeEMsQ0FBQyxDQUFDO0lBSk02QixxQkFBcUIsR0FBQUYscUJBQUEsQ0FBckJFLHFCQUFxQjtFQU03QixJQUFNQyxzQkFBc0IsR0FBR3ZGLGtCQUFrQixJQUFJLENBQUFqQixLQUFLLGFBQUxBLEtBQUssdUJBQUxBLEtBQUssQ0FBRXlHLE1BQU0sTUFBSyxTQUFTO0VBQ2hGLElBQU1DLHVCQUF1QixHQUFHbEssOEJBQThCLENBQzVEMEYsb0JBQW9CLEVBQ3BCOEMscUJBQXFCLEVBQ3JCQyxjQUFjLENBQUNQLE1BQ2pCLENBQUM7RUFDRCxJQUFBaUMscUJBQUEsR0FBK0RqSyxpQ0FBaUMsQ0FBQztNQUMvRmdLLHVCQUF1QixFQUF2QkEsdUJBQXVCO01BQ3ZCUixjQUFjLEVBQWRBLGNBQWM7TUFDZEUsY0FBYyxFQUFkQSxjQUFjO01BQ2RHLHFCQUFxQixFQUFyQkEscUJBQXFCO01BQ3JCckYsU0FBUyxFQUFUQSxTQUFTO01BQ1RzRixzQkFBc0IsRUFBdEJBO0lBQ0YsQ0FBQyxDQUFDO0lBUE1JLFFBQVEsR0FBQUQscUJBQUEsQ0FBUkMsUUFBUTtJQUFFQyxrQkFBa0IsR0FBQUYscUJBQUEsQ0FBbEJFLGtCQUFrQjtJQUFFQyxvQkFBb0IsR0FBQUgscUJBQUEsQ0FBcEJHLG9CQUFvQjs7RUFTMUQ7RUFDQSxJQUFNQyxtQkFBbUIsR0FBRzNQLE1BQU0sQ0FBaUIsSUFBSSxDQUFDO0VBQ3hELElBQUE0UCxVQUFBLEdBQThDM1AsUUFBUSxDQUFDLEtBQUssQ0FBQztJQUFBNFAsVUFBQSxHQUFBcEUsY0FBQSxDQUFBbUUsVUFBQTtJQUF0REUsZUFBZSxHQUFBRCxVQUFBO0lBQUVFLGtCQUFrQixHQUFBRixVQUFBO0VBQzFDLElBQUFHLFVBQUEsR0FBb0QvUCxRQUFRLENBQUMsS0FBSyxDQUFDO0lBQUFnUSxVQUFBLEdBQUF4RSxjQUFBLENBQUF1RSxVQUFBO0lBQTVERSxrQkFBa0IsR0FBQUQsVUFBQTtJQUFFRSxxQkFBcUIsR0FBQUYsVUFBQTtFQUNoRCxJQUFBRyxVQUFBLEdBQXNDblEsUUFBUSxDQUFDLEtBQUssQ0FBQztJQUFBb1EsVUFBQSxHQUFBNUUsY0FBQSxDQUFBMkUsVUFBQTtJQUE5Q0UsV0FBVyxHQUFBRCxVQUFBO0lBQUVFLGNBQWMsR0FBQUYsVUFBQTtFQUNsQyxJQUFNRyxnQkFBZ0IsR0FBR3hRLE1BQU0sQ0FBdUMsSUFBSSxDQUFDOztFQUUzRTtFQUNBO0VBQ0EsSUFBTXlRLFFBQVEsR0FBR3RRLE9BQU8sQ0FDdEI7SUFBQSxJQUFBdVEsbUJBQUE7SUFBQSxPQUNFcE0sbUJBQW1CLENBQUM7TUFDbEJ3RixTQUFTLEVBQVRBLFNBQVM7TUFDVGUsYUFBYSxFQUFiQSxhQUFhO01BQ2JDLG9CQUFvQixFQUFwQkEsb0JBQW9CO01BQ3BCTixNQUFNLEVBQUVsQixNQUFNO01BQ2R5QyxnQkFBZ0IsRUFBaEJBLGdCQUFnQjtNQUNoQjRFLGVBQWUsRUFBRyxZQUFNO1FBQ3RCLElBQU1DLFdBQVcsR0FBRzdLLDZCQUE2QixDQUFDdUQsTUFBTSxFQUFFeUMsZ0JBQWdCLENBQUM7UUFDM0UsT0FBTzZFLFdBQVcsR0FBR3JJLENBQUMsQ0FBQ3FJLFdBQVcsQ0FBQyxHQUFHL0ksU0FBUztNQUNqRCxDQUFDLENBQUUsQ0FBQztNQUNKZ0osaUJBQWlCLEdBQUFILG1CQUFBLEdBQUU5SCxLQUFLLGFBQUxBLEtBQUssdUJBQUxBLEtBQUssQ0FBRWtJLFlBQVksY0FBQUosbUJBQUEsY0FBQUEsbUJBQUEsR0FBSTdJO0lBQzVDLENBQUMsQ0FBQztFQUFBLEdBQ0osQ0FBQ2UsS0FBSyxhQUFMQSxLQUFLLHVCQUFMQSxLQUFLLENBQUVzQixFQUFFLEVBQUV0QixLQUFLLGFBQUxBLEtBQUssdUJBQUxBLEtBQUssQ0FBRWtJLFlBQVksRUFBRWhILFNBQVMsRUFBRWUsYUFBYSxFQUFFdkIsTUFBTSxFQUFFeUMsZ0JBQWdCLEVBQUVqQixvQkFBb0IsRUFBRXZDLENBQUMsQ0FDOUcsQ0FBQztFQUVELElBQU13SSx5QkFBeUIsR0FBRzdRLFdBQVcsQ0FDM0MsVUFBQzZHLE9BQTBCLEVBQUVpSyxLQUFhLEVBQUs7SUFDN0N2SSxLQUFLLENBQUNqSSxNQUFNLENBQUN5USxxQkFBcUIsRUFBRTtNQUFFRCxLQUFLLEVBQUxBLEtBQUs7TUFBRXpKLElBQUksRUFBRVIsT0FBTyxDQUFDUTtJQUFLLENBQUMsQ0FBQztJQUVsRSxJQUFNMkosVUFBVSxHQUFHcE0sOEJBQThCLENBQUNpQyxPQUFPLEVBQUV3QixDQUFDLENBQUMsdUNBQXVDLENBQUMsQ0FBQztJQUV0R29ELGtCQUFrQixDQUFDNUUsT0FBTyxDQUFDO0lBQzNCcUMsT0FBTyxDQUFDLElBQUksQ0FBQztJQUNiRCxVQUFVLENBQUMsSUFBSSxDQUFDO0lBQ2hCRCxTQUFTLGFBQVRBLFNBQVMsZUFBVEEsU0FBUyxDQUFHLElBQUksQ0FBQztJQUNqQkcsZUFBZSxDQUFDLElBQUksQ0FBQztJQUVyQixJQUFNOEgsWUFBWSxHQUFHckwsMEJBQTBCLENBQUNvTCxVQUFVLENBQUM7SUFDM0QsSUFBSSxDQUFDQyxZQUFZLEVBQUU7SUFFbkJqSSxTQUFTLGFBQVRBLFNBQVMsZUFBVEEsU0FBUyxDQUFHaUksWUFBWSxDQUFDckksTUFBTSxDQUFDO0lBQ2hDSyxVQUFVLENBQUNnSSxZQUFZLENBQUNwSSxPQUFPLENBQUM7SUFDaENLLE9BQU8sQ0FBQytILFlBQVksQ0FBQ25JLElBQUksQ0FBQztJQUMxQkssZUFBZSxDQUFDOEgsWUFBWSxDQUFDbEksWUFBWSxDQUFDO0lBRTFDbUkscUJBQXFCLENBQUMsWUFBTTtNQUMxQkMsUUFBUSxDQUFDQyxhQUFhLENBQUMsSUFBSUMsV0FBVyxDQUFDLG9CQUFvQixDQUFDLENBQUM7SUFDL0QsQ0FBQyxDQUFDO0VBQ0osQ0FBQyxFQUNELENBQUM5SSxLQUFLLEVBQUVZLGVBQWUsRUFBRUgsU0FBUyxFQUFFQyxVQUFVLEVBQUVDLE9BQU8sRUFBRWIsQ0FBQyxDQUM1RCxDQUFDO0VBRUQsSUFBTWlKLG1CQUFtQixHQUFHdFIsV0FBVyxDQUNyQyxVQUNFdVIsT0FBZSxFQUNmQyxXQUFxQyxFQUNyQ0MsS0FBYyxFQUNkQyxpQkFBMEIsRUFDMUJDLFFBQWUsRUFDZkMsS0FBYyxFQUNYO0lBQ0gsSUFBSW5NLG1DQUFtQyxDQUFDc0Ysd0JBQXdCLEVBQUU2RyxLQUFLLENBQUMsRUFBRTtNQUN4RTFSLFNBQVMsQ0FBQyxZQUFNO1FBQ2R1TCxrQkFBa0IsQ0FBQyxJQUFJLENBQUM7UUFDeEJ2QyxPQUFPLENBQUMsSUFBSSxDQUFDO1FBQ2JELFVBQVUsQ0FBQyxJQUFJLENBQUM7UUFDaEJELFNBQVMsYUFBVEEsU0FBUyxlQUFUQSxTQUFTLENBQUcsSUFBSSxDQUFDO1FBQ2pCRyxlQUFlLENBQUMsSUFBSSxDQUFDO01BQ3ZCLENBQUMsQ0FBQztJQUNKO0lBQ0FsQixXQUFXLENBQUNzSixPQUFPLEVBQUVDLFdBQVcsRUFBRUMsS0FBSyxFQUFFQyxpQkFBaUIsRUFBRUMsUUFBUSxFQUFFQyxLQUFLLENBQUM7RUFDOUUsQ0FBQyxFQUNELENBQUM3Ryx3QkFBd0IsRUFBRTlDLFdBQVcsRUFBRWtCLGVBQWUsRUFBRUgsU0FBUyxFQUFFQyxVQUFVLEVBQUVDLE9BQU8sQ0FDekYsQ0FBQztFQUVELElBQU0ySSxvQkFBb0IsR0FBRyxTQUF2QkEsb0JBQW9CQSxDQUFBLEVBQVM7SUFDakMsSUFBSSxDQUFDN0wsK0JBQStCLENBQUM0RSxvQkFBb0IsQ0FBQyxFQUFFLE9BQU8sSUFBSTtJQUV2RSxvQkFDRXZFLEtBQUEsQ0FBQ3BFLHVCQUF1QjtNQUN0QjZQLGtCQUFrQixFQUFFakgsdUJBQXVCLEdBQUduSSw4Q0FBOEMsR0FBR2lGLFNBQVU7TUFBQUosUUFBQSxHQUV4R3VELHNCQUFzQixnQkFDckIzRSxJQUFBLENBQUNoRSxvQ0FBb0M7UUFBQW9GLFFBQUEsRUFDakMsWUFBTTtVQUNOLElBQUF3SyxxQkFBQSxHQUFrQ3JNLG9DQUFvQyxDQUFDO2NBQUVxRix3QkFBd0IsRUFBeEJBO1lBQXlCLENBQUMsQ0FBQztZQUE1RmlILFFBQVEsR0FBQUQscUJBQUEsQ0FBUkMsUUFBUTtZQUFFQyxXQUFXLEdBQUFGLHFCQUFBLENBQVhFLFdBQVc7VUFDN0Isb0JBQ0U1TCxLQUFBLENBQUFFLFNBQUE7WUFBQWdCLFFBQUEsZ0JBQ0VwQixJQUFBLENBQUMvRCxtQ0FBbUM7Y0FBQW1GLFFBQUEsRUFBRWMsQ0FBQyxDQUFDMkosUUFBUTtZQUFDLENBQXNDLENBQUMsZUFDeEY3TCxJQUFBLENBQUM5RCxzQ0FBc0M7Y0FBQWtGLFFBQUEsRUFBRWMsQ0FBQyxDQUFDNEosV0FBVztZQUFDLENBQXlDLENBQUM7VUFBQSxDQUNqRyxDQUFDO1FBRVAsQ0FBQyxDQUFFO01BQUMsQ0FDZ0MsQ0FBQyxHQUNyQyxJQUFJLGVBQ1I1TCxLQUFBLENBQUNuRSwyQkFBMkI7UUFBQ2dRLFdBQVcsRUFBRXJILHVCQUF3QjtRQUFBdEQsUUFBQSxHQUMvRG1HLHFCQUFxQixJQUNwQkUseUJBQXlCLENBQUN1RSxHQUFHLENBQUMsVUFBQUMsR0FBRztVQUFBLG9CQUFJak0sSUFBQSxDQUFDMUQsa0NBQWtDLE1BQU0yUCxHQUFNLENBQUM7UUFBQSxFQUFDLEVBQ3ZGLENBQUMxRSxxQkFBcUIsSUFDckJDLGNBQWMsQ0FBQ3dFLEdBQUcsQ0FBQyxVQUFDdEwsT0FBTyxFQUFFd0wsS0FBSztVQUFBLG9CQUNoQ2xNLElBQUEsQ0FBQ1EsaUJBQWlCO1lBRWhCRSxPQUFPLEVBQUVBLE9BQVE7WUFDakJDLEtBQUssRUFBRUQsT0FBTyxDQUFDOEUsSUFBSSxDQUFDMkcsSUFBSSxDQUFDLENBQUU7WUFDM0J2TCxPQUFPLEVBQUUsU0FBVEEsT0FBT0EsQ0FBQTtjQUFBLE9BQVE4Six5QkFBeUIsQ0FBQ2hLLE9BQU8sRUFBRXdMLEtBQUssR0FBRyxDQUFDLENBQUM7WUFBQSxDQUFDO1lBQzdEcEwsU0FBUyxFQUFFNEQ7VUFBd0IsTUFBQTBILE1BQUEsQ0FKM0IxTCxPQUFPLENBQUNRLElBQUksT0FBQWtMLE1BQUEsQ0FBSTFMLE9BQU8sQ0FBQ21ELEVBQUUsQ0FLbkMsQ0FBQztRQUFBLENBQ0gsQ0FBQztNQUFBLENBQ3VCLENBQUM7SUFBQSxDQUNQLENBQUM7RUFFOUIsQ0FBQztFQUVELElBQU13SSxXQUFXLEdBQUd4UyxXQUFXLENBQUMsWUFBTTtJQUNwQyxJQUFNeVMsU0FBUyxHQUFHaEQsbUJBQW1CLENBQUNsQixPQUFPO0lBQzdDLElBQUksQ0FBQ2tFLFNBQVMsSUFBSSxDQUFDM00scUJBQXFCLENBQUMyTSxTQUFTLEVBQUVqRCxvQkFBb0IsQ0FBQyxFQUFFO0lBRTNFLElBQVFrRCxTQUFTLEdBQWlDRCxTQUFTLENBQW5EQyxTQUFTO01BQUVDLFlBQVksR0FBbUJGLFNBQVMsQ0FBeENFLFlBQVk7TUFBRUMsWUFBWSxHQUFLSCxTQUFTLENBQTFCRyxZQUFZO0lBQzdDLElBQU1DLFNBQVMsR0FBR3hPLDBCQUEwQixDQUFDcU8sU0FBUyxFQUFFQyxZQUFZLEVBQUVDLFlBQVksQ0FBQztJQUNuRi9DLGtCQUFrQixDQUFDZ0QsU0FBUyxDQUFDQyxPQUFPLENBQUM7SUFDckM3QyxxQkFBcUIsQ0FBQzRDLFNBQVMsQ0FBQ0UsVUFBVSxDQUFDO0VBQzdDLENBQUMsRUFBRSxDQUFDdkQsb0JBQW9CLENBQUMsQ0FBQztFQUUxQixJQUFNd0QsWUFBWSxHQUFHaFQsV0FBVyxDQUFDLFlBQU07SUFDckN3UyxXQUFXLENBQUMsQ0FBQztJQUNibkMsY0FBYyxDQUFDLElBQUksQ0FBQztJQUVwQixJQUFJQyxnQkFBZ0IsQ0FBQy9CLE9BQU8sRUFBRTtNQUM1QjBFLFlBQVksQ0FBQzNDLGdCQUFnQixDQUFDL0IsT0FBTyxDQUFDO0lBQ3hDO0lBRUErQixnQkFBZ0IsQ0FBQy9CLE9BQU8sR0FBRzJFLFVBQVUsQ0FBQyxZQUFNO01BQzFDN0MsY0FBYyxDQUFDLEtBQUssQ0FBQztJQUN2QixDQUFDLEVBQUUsR0FBRyxDQUFDO0VBQ1QsQ0FBQyxFQUFFLENBQUNtQyxXQUFXLENBQUMsQ0FBQztFQUVqQjVTLFNBQVMsQ0FBQyxZQUFNO0lBQ2QsSUFBSXFHLDhCQUE4QixDQUFDdUosb0JBQW9CLENBQUMsRUFBRTtNQUN4REssa0JBQWtCLENBQUMsS0FBSyxDQUFDO01BQ3pCSSxxQkFBcUIsQ0FBQyxLQUFLLENBQUM7TUFDNUIsT0FBT3RJLFNBQVM7SUFDbEI7SUFFQSxJQUFNOEssU0FBUyxHQUFHaEQsbUJBQW1CLENBQUNsQixPQUFPO0lBQzdDLElBQUksQ0FBQ2tFLFNBQVMsRUFBRTtNQUNkLE9BQU85SyxTQUFTO0lBQ2xCO0lBRUEsSUFBTXdMLG1CQUFtQixHQUFHLFNBQXRCQSxtQkFBbUJBLENBQUEsRUFBUztNQUNoQ2pDLHFCQUFxQixDQUFDLFlBQU07UUFDMUJzQixXQUFXLENBQUMsQ0FBQztNQUNmLENBQUMsQ0FBQztJQUNKLENBQUM7SUFFRFcsbUJBQW1CLENBQUMsQ0FBQztJQUNyQlYsU0FBUyxDQUFDVyxnQkFBZ0IsQ0FBQyxRQUFRLEVBQUVKLFlBQVksQ0FBQztJQUVsRCxJQUFNSyxjQUFjLEdBQUcsSUFBSUMsY0FBYyxDQUFDSCxtQkFBbUIsQ0FBQztJQUM5REUsY0FBYyxDQUFDRSxPQUFPLENBQUNkLFNBQVMsQ0FBQztJQUNqQyxJQUFNZSxhQUFhLEdBQUdmLFNBQVMsQ0FBQ2dCLGlCQUFpQjtJQUNqRCxJQUFJMU4sOEJBQThCLENBQUN5TixhQUFhLENBQUMsRUFBRTtNQUNqREgsY0FBYyxDQUFDRSxPQUFPLENBQUNDLGFBQWEsQ0FBQztJQUN2QztJQUVBLElBQU1FLFNBQVMsR0FBR2pLLE1BQU0sQ0FBQ3lKLFVBQVUsQ0FBQ0MsbUJBQW1CLEVBQUUsR0FBRyxDQUFDO0lBQzdELElBQU1RLGFBQWEsR0FBR2xLLE1BQU0sQ0FBQ3lKLFVBQVUsQ0FBQ0MsbUJBQW1CLEVBQUUsR0FBRyxDQUFDO0lBRWpFLE9BQU8sWUFBTTtNQUNYVixTQUFTLENBQUNtQixtQkFBbUIsQ0FBQyxRQUFRLEVBQUVaLFlBQVksQ0FBQztNQUNyREssY0FBYyxDQUFDUSxVQUFVLENBQUMsQ0FBQztNQUMzQlosWUFBWSxDQUFDUyxTQUFTLENBQUM7TUFDdkJULFlBQVksQ0FBQ1UsYUFBYSxDQUFDO01BQzNCLElBQUlyRCxnQkFBZ0IsQ0FBQy9CLE9BQU8sRUFBRTtRQUM1QjBFLFlBQVksQ0FBQzNDLGdCQUFnQixDQUFDL0IsT0FBTyxDQUFDO01BQ3hDO0lBQ0YsQ0FBQztFQUNILENBQUMsRUFBRSxDQUFDaUIsb0JBQW9CLEVBQUVnRCxXQUFXLEVBQUVRLFlBQVksQ0FBQyxDQUFDO0VBRXJEblQsZUFBZSxDQUFDLFlBQU07SUFDcEIsSUFBSSxDQUFDMlAsb0JBQW9CLEVBQUU7SUFDM0JnRCxXQUFXLENBQUMsQ0FBQztFQUNmLENBQUMsRUFBRSxDQUNEaEQsb0JBQW9CLEVBQ3BCZ0QsV0FBVyxFQUNYOUUscUJBQXFCLEVBQ3JCQyxjQUFjLENBQUNQLE1BQU0sRUFDckJILHNCQUFzQixFQUN0QkQsZUFBZSxDQUFDSSxNQUFNLEVBQ3RCWixXQUFXLEVBQ1hpQyxJQUFJLENBQUNyQixNQUFNLEVBQ1hzQixjQUFjLEVBQ2RULElBQUksQ0FBQ2IsTUFBTSxFQUNYNkIscUJBQXFCLEVBQ3JCckYsU0FBUyxDQUNWLENBQUM7RUFFRixJQUFNa0ssbUJBQW1CLEdBQUcsU0FBdEJBLG1CQUFtQkEsQ0FBQSxFQUFTO0lBQ2hDLElBQUksQ0FBQzFLLE1BQU0sRUFBRTtNQUFBLElBQUEySyxpQkFBQSxFQUFBQyxrQkFBQTtNQUNYLG9CQUNFM04sS0FBQSxDQUFDdEYsMkJBQTJCO1FBQUF3RyxRQUFBLGdCQUMxQmxCLEtBQUEsQ0FBQ3JGLGtCQUFrQjtVQUFBdUcsUUFBQSxHQUNoQm1CLEtBQUssYUFBTEEsS0FBSyx1QkFBTEEsS0FBSyxDQUFFdUwsS0FBSyxFQUFDLEdBQUMsRUFBQ3ZMLEtBQUssYUFBTEEsS0FBSyx1QkFBTEEsS0FBSyxDQUFFaUQsSUFBSTtRQUFBLENBQ1QsQ0FBQyxFQUNwQixDQUFBakQsS0FBSyxhQUFMQSxLQUFLLHVCQUFMQSxLQUFLLENBQUV3TCxVQUFVLEtBQUksQ0FBQzlLLE1BQU0saUJBQzNCakQsSUFBQSxDQUFDNUUsMkJBQTJCO1VBQUFnRyxRQUFBLGVBQzFCcEIsSUFBQSxDQUFDaEcsT0FBTztZQUNOMEgsS0FBSyxFQUNIYSxLQUFLLGFBQUxBLEtBQUssZ0JBQUFxTCxpQkFBQSxHQUFMckwsS0FBSyxDQUFFd0wsVUFBVSxjQUFBSCxpQkFBQSxlQUFqQkEsaUJBQUEsQ0FBbUJJLFVBQVUsR0FBRzlMLENBQUMsQ0FBQyxrQ0FBa0MsQ0FBQyxHQUFHQSxDQUFDLENBQUMsMkJBQTJCLENBQ3RHO1lBQUFkLFFBQUEsZUFFRGxCLEtBQUEsQ0FBQzdFLHNCQUFzQjtjQUFBK0YsUUFBQSxHQUNwQmMsQ0FBQyxDQUFDLG9CQUFvQixDQUFDLEVBQUUsR0FBRyxlQUM3QmxDLElBQUEsQ0FBQzFFLDBCQUEwQjtnQkFBQThGLFFBQUEsRUFBRW1CLEtBQUssYUFBTEEsS0FBSyxnQkFBQXNMLGtCQUFBLEdBQUx0TCxLQUFLLENBQUV3TCxVQUFVLGNBQUFGLGtCQUFBLHVCQUFqQkEsa0JBQUEsQ0FBbUJySTtjQUFJLENBQTZCLENBQUM7WUFBQSxDQUM1RDtVQUFDLENBQ2xCO1FBQUMsQ0FDaUIsQ0FDOUI7TUFBQSxDQUMwQixDQUFDO0lBRWxDO0lBRUEsSUFBQXlJLHFCQUFBLEdBQXVEL08sNEJBQTRCLENBQUM7UUFDbEZzRixhQUFhLEVBQWJBLGFBQWE7UUFDYkUsdUJBQXVCLEVBQXZCQSx1QkFBdUI7UUFDdkJJLDZCQUE2QixFQUE3QkEsNkJBQTZCO1FBQzdCTCxvQkFBb0IsRUFBcEJBLG9CQUFvQjtRQUNwQnlKLFdBQVcsRUFBRUMsT0FBTyxDQUFDL0QsUUFBUTtNQUMvQixDQUFDLENBQUM7TUFOTWdFLGlCQUFpQixHQUFBSCxxQkFBQSxDQUFqQkcsaUJBQWlCO01BQUVDLHVCQUF1QixHQUFBSixxQkFBQSxDQUF2QkksdUJBQXVCO0lBUWxELG9CQUNFbk8sS0FBQSxDQUFDekUsd0JBQXdCO01BQUM2UyxNQUFNLEVBQUUsQ0FBQ0QsdUJBQXdCO01BQUNFLE1BQU0sRUFBRUgsaUJBQWlCLEdBQUcsT0FBTyxHQUFHLFFBQVM7TUFBQWhOLFFBQUEsR0FDeEcsQ0FBQ29ELGFBQWEsSUFBSSxDQUFDRSx1QkFBdUIsSUFBSSxDQUFDSSw2QkFBNkIsaUJBQzNFOUUsSUFBQSxDQUFDekUsc0JBQXNCO1FBQUE2RixRQUFBLGVBQ3JCcEIsSUFBQSxDQUFDeEUsb0JBQW9CO1VBQUE0RixRQUFBLGVBQ25CcEIsSUFBQSxDQUFDeEMsV0FBVyxJQUFFO1FBQUMsQ0FDSztNQUFDLENBQ0QsQ0FDekIsRUFDQWdILGFBQWEsaUJBQ1p0RSxLQUFBLENBQUN2RSxtQkFBbUI7UUFBQzRTLE1BQU0sRUFBQyxPQUFPO1FBQUFuTixRQUFBLGdCQUNqQ3BCLElBQUEsQ0FBQ3RFLGNBQWM7VUFBQzhTLEtBQUssRUFBQyxJQUFJO1VBQUNELE1BQU0sRUFBQyxPQUFPO1VBQUFuTixRQUFBLEVBQ3RDYyxDQUFDLENBQUMsNEJBQTRCO1FBQUMsQ0FDbEIsQ0FBQyxlQUNqQmxDLElBQUEsQ0FBQ3BFLGlCQUFpQjtVQUFDMlMsTUFBTSxFQUFDLE9BQU87VUFBQW5OLFFBQUEsRUFBRWMsQ0FBQyxDQUFDLCtCQUErQjtRQUFDLENBQW9CLENBQUM7TUFBQSxDQUN2RSxDQUN0QixFQUNBLENBQUNzQyxhQUFhLElBQUlDLG9CQUFvQixJQUFJQyx1QkFBdUIsaUJBQ2hFeEUsS0FBQSxDQUFDdkUsbUJBQW1CO1FBQUM0UyxNQUFNLEVBQUMsT0FBTztRQUFDcE4sVUFBVTtRQUFBQyxRQUFBLGdCQUM1Q3BCLElBQUEsQ0FBQ3RFLGNBQWM7VUFBQzhTLEtBQUssRUFBQyxTQUFTO1VBQUNELE1BQU0sRUFBQyxPQUFPO1VBQUNwTixVQUFVO1VBQUFDLFFBQUEsRUFDdERjLENBQUMsQ0FBQywrQkFBK0IsRUFBRTtZQUFFc0QsSUFBSSxFQUFFbkQsSUFBSSxDQUFDb007VUFBVSxDQUFDO1FBQUMsQ0FDL0MsQ0FBQyxlQUNqQnpPLElBQUEsQ0FBQ3BFLGlCQUFpQjtVQUFDMlMsTUFBTSxFQUFDLE9BQU87VUFBQ0csaUJBQWlCO1VBQUF0TixRQUFBLEVBQ2hEYyxDQUFDLENBQUM2Qyw0QkFBNEI7UUFBQyxDQUNmLENBQUM7TUFBQSxDQUNELENBQ3RCLEVBQ0EsQ0FBQ1AsYUFBYSxJQUFJQyxvQkFBb0IsSUFBSSxDQUFDQyx1QkFBdUIsaUJBQ2pFeEUsS0FBQSxDQUFBRSxTQUFBO1FBQUFnQixRQUFBLGdCQUNFcEIsSUFBQSxDQUFDdEUsY0FBYztVQUFDNlMsTUFBTSxFQUFFekosNkJBQTZCLEdBQUcsT0FBTyxHQUFHdEQsU0FBVTtVQUFBSixRQUFBLEVBQ3pFYyxDQUFDLENBQUMsK0JBQStCLEVBQUU7WUFBRXNELElBQUksRUFBRW5ELElBQUksQ0FBQ29NO1VBQVUsQ0FBQztRQUFDLENBQy9DLENBQUMsZUFDakJ6TyxJQUFBLENBQUNwRSxpQkFBaUI7VUFBQzJTLE1BQU0sRUFBRXpKLDZCQUE2QixHQUFHLE9BQU8sR0FBR3RELFNBQVU7VUFBQUosUUFBQSxFQUM1RWMsQ0FBQyxDQUFDMUMsNENBQTRDLENBQUM5QyxrQkFBa0IsQ0FBQzJGLElBQUksQ0FBQ2dDLE9BQU8sQ0FBQyxDQUFDO1FBQUMsQ0FDakUsQ0FBQztNQUFBLENBQ3BCLENBQ0gsRUFDQSxDQUFDRyxhQUFhLElBQUksQ0FBQ0Msb0JBQW9CLElBQUkyRixRQUFRLGlCQUNsRHBLLElBQUEsQ0FBQ3JGLGlCQUFpQjtRQUNoQjRULE1BQU0sRUFBRXpKLDZCQUE2QixHQUFHLE9BQU8sR0FBR3RELFNBQVU7UUFDNURnTixLQUFLLEVBQUUxSiw2QkFBNkIsR0FBRyxJQUFJLEdBQUcsSUFBSztRQUFBMUQsUUFBQSxFQUVsRGdKO01BQVEsQ0FDUSxDQUNwQjtJQUFBLENBQ3VCLENBQUM7RUFFL0IsQ0FBQztFQUVELElBQUF1RSxzQkFBQSxHQUFpRXpQLDRCQUE0QixDQUFDO01BQzVGc0YsYUFBYSxFQUFiQSxhQUFhO01BQ2JFLHVCQUF1QixFQUF2QkEsdUJBQXVCO01BQ3ZCSSw2QkFBNkIsRUFBN0JBLDZCQUE2QjtNQUM3Qkwsb0JBQW9CLEVBQXBCQSxvQkFBb0I7TUFDcEJ5SixXQUFXLEVBQUVDLE9BQU8sQ0FBQy9ELFFBQVE7SUFDL0IsQ0FBQyxDQUFDO0lBTk1nRSxpQkFBaUIsR0FBQU8sc0JBQUEsQ0FBakJQLGlCQUFpQjtJQUFFUSxpQ0FBaUMsR0FBQUQsc0JBQUEsQ0FBakNDLGlDQUFpQztFQU81RCxJQUFNQyxxQkFBcUIsR0FBR0QsaUNBQWlDLEdBQzNEclMsOENBQThDLEdBQzlDaUYsU0FBUztFQUNiLElBQU1zTixxQkFBcUIsR0FBRzNQLDRCQUE0QixDQUFDcUQsT0FBTyxFQUFFUyxNQUFNLEVBQUVrTCxPQUFPLENBQUM1TCxLQUFLLGFBQUxBLEtBQUssdUJBQUxBLEtBQUssQ0FBRWtJLFlBQVksQ0FBQyxDQUFDO0VBRXpHLG9CQUNFdkssS0FBQSxDQUFDN0Ysa0JBQWtCO0lBQUM4TyxRQUFRLEVBQUVBLFFBQVM7SUFBQzRGLFdBQVcsRUFBRWpLLDZCQUE4QjtJQUFBMUQsUUFBQSxHQUNoRmlJLG9CQUFvQixpQkFBSXJKLElBQUEsQ0FBQ3hGLG9CQUFvQjtNQUFDd1UsS0FBSyxFQUFFdkY7SUFBZ0IsQ0FBRSxDQUFDLGVBQ3pFekosSUFBQSxDQUFDMUYsZ0JBQWdCO01BQ2ZtSCxHQUFHLEVBQUU2SCxtQkFBb0I7TUFDekJILFFBQVEsRUFBRUUsb0JBQXFCO01BQy9CNEYsWUFBWSxFQUFFLENBQUNoTSxNQUFPO01BQ3RCaU0scUJBQXFCLEVBQUVoTSxvQkFBcUI7TUFDNUNpTSxpQkFBaUIsRUFBRTNLLGFBQWM7TUFDakN1SyxXQUFXLEVBQUVqSyw2QkFBOEI7TUFDM0M2RyxrQkFBa0IsRUFBRWtELHFCQUFzQjtNQUFBek4sUUFBQSxlQUUxQ2xCLEtBQUEsQ0FBQzNGLHFCQUFxQjtRQUNwQjRPLFFBQVEsRUFBRUUsb0JBQXFCO1FBQy9CNEYsWUFBWSxFQUFFLENBQUNoTSxNQUFPO1FBQ3RCaU0scUJBQXFCLEVBQUVoTSxvQkFBcUI7UUFDNUNpTSxpQkFBaUIsRUFBRTNLLGFBQWM7UUFDakN1SyxXQUFXLEVBQUVySyx1QkFBdUIsSUFBSUksNkJBQThCO1FBQ3RFc0ssdUJBQXVCLEVBQUUxSyx1QkFBd0I7UUFDakQySyx3QkFBd0IsRUFBRXZLLDZCQUE4QjtRQUFBMUQsUUFBQSxnQkFFeERsQixLQUFBLENBQUN4RixlQUFlO1VBQ2Q0VSxJQUFJLEVBQUVSLHFCQUFxQixHQUFHLE1BQU0sR0FBRyxHQUFJO1VBQzNDUyxTQUFTLEVBQUV0TSxNQUFNLEdBQUcsTUFBTSxHQUFHLE9BQVE7VUFDckNnTSxZQUFZLEVBQUUsQ0FBQ2hNLE1BQU87VUFDdEJzTCxNQUFNLEVBQUVILGlCQUFpQixHQUFHLE9BQU8sR0FBRyxRQUFTO1VBQUFoTixRQUFBLEdBRTlDdU0sbUJBQW1CLENBQUMsQ0FBQyxFQUVyQm1CLHFCQUFxQixJQUFJdk0sS0FBSyxnQkFDN0J2QyxJQUFBLENBQUM3RSxxQkFBcUI7WUFBQzRHLFFBQVEsRUFBRUEsUUFBUztZQUFBWCxRQUFBLEVBQUVtQixLQUFLLENBQUNrSTtVQUFZLENBQXdCLENBQUMsR0FDckYsSUFBSTtRQUFBLENBQ08sQ0FBQyxFQUNqQjFCLHNCQUFzQixpQkFDckI3SSxLQUFBLENBQUNoRiwwQkFBMEI7VUFBQzBGLE9BQU8sRUFBRWlCLFFBQVEsQ0FBQzJOLGNBQWU7VUFBQXBPLFFBQUEsZ0JBQzNEcEIsSUFBQSxDQUFDbEYsdUJBQXVCO1lBQUFzRyxRQUFBLGVBQ3RCcEIsSUFBQSxDQUFDdkMsb0JBQW9CO2NBQUM4RCxNQUFNLEVBQUUsRUFBRztjQUFDRCxLQUFLLEVBQUU7WUFBRyxDQUFFO1VBQUMsQ0FDeEIsQ0FBQyxlQUMxQnBCLEtBQUEsQ0FBQ25GLDhCQUE4QjtZQUFBcUcsUUFBQSxnQkFDN0JwQixJQUFBLENBQUNoRiw0QkFBNEI7Y0FBQW9HLFFBQUEsRUFBRWMsQ0FBQyxDQUFDLCtCQUErQjtZQUFDLENBQStCLENBQUMsZUFDakdsQyxJQUFBLENBQUMvRSxrQ0FBa0M7Y0FBQW1HLFFBQUEsRUFDaENjLENBQUMsQ0FBQyxxQ0FBcUM7WUFBQyxDQUNQLENBQUM7VUFBQSxDQUNQLENBQUM7UUFBQSxDQUNQLENBQzdCLEVBQ0FrSCxrQkFBa0IsaUJBQ2pCbEosS0FBQSxDQUFDckUsdUJBQXVCO1VBQ3RCNFQsS0FBSyxFQUFFaE0sU0FBVTtVQUNqQnNMLFdBQVcsRUFBRXJLLHVCQUF1QixJQUFJSSw2QkFBOEI7VUFBQTFELFFBQUEsR0FFckUwSCxxQkFBcUIsZ0JBQ3BCOUksSUFBQSxDQUFDOUMscUJBQXFCO1lBQ3BCd1MsT0FBTyxFQUFDLFNBQVM7WUFDakI1TixXQUFXLEVBQUVxSixtQkFBb0I7WUFDakNuRixPQUFPLEVBQUV6RCxLQUFLLGFBQUxBLEtBQUssdUJBQUxBLEtBQUssQ0FBRXNCLEVBQUc7WUFDbkJvRyxXQUFXLEVBQUVBLFdBQVk7WUFDekI3RCxPQUFPLEVBQUVTLGVBQWdCO1lBQ3pCUCxPQUFPLEVBQUVRO1VBQXVCLENBQ2pDLENBQUMsR0FDQSxJQUFJLEVBQ1A0RSxvQkFBb0IsQ0FBQyxDQUFDLEVBQ3RCakQsY0FBYyxpQkFDYnpJLElBQUEsQ0FBQy9DLHdCQUF3QjtZQUN2QjZFLFdBQVcsRUFBRUEsV0FBWTtZQUN6QnFILFFBQVEsRUFBRUEsUUFBUztZQUNuQjNGLGtCQUFrQixFQUFFQSxrQkFBbUI7WUFDdkN3QyxPQUFPLEVBQUV6RCxLQUFLLGFBQUxBLEtBQUssdUJBQUxBLEtBQUssQ0FBRXNCLEVBQUc7WUFDbkJWLElBQUksRUFBRUEsSUFBSztZQUNYOEcsV0FBVyxFQUFFQSxXQUFZO1lBQ3pCbkMsSUFBSSxFQUFFQSxJQUFLO1lBQ1h4QixPQUFPLEVBQUVpQztVQUFlLENBQ3pCLENBQ0YsRUFDQUksY0FBYyxpQkFDYjNJLElBQUEsQ0FBQzlDLHFCQUFxQjtZQUNwQjRFLFdBQVcsRUFBRUEsV0FBWTtZQUN6QmtFLE9BQU8sRUFBRXpELEtBQUssYUFBTEEsS0FBSyx1QkFBTEEsS0FBSyxDQUFFc0IsRUFBRztZQUNuQm9HLFdBQVcsRUFBRUEsV0FBWTtZQUN6QjdELE9BQU8sRUFBRWtDLElBQUs7WUFDZGhDLE9BQU8sRUFBRWtDO1VBQWUsQ0FDekIsQ0FDRixFQUNBL0UsU0FBUyxnQkFBR3pELElBQUEsQ0FBQ3RDLGlCQUFpQjtZQUFDb0UsV0FBVyxFQUFFQTtVQUFZLENBQUUsQ0FBQyxHQUFHLElBQUk7UUFBQSxDQUM1QyxDQUMxQjtNQUFBLENBQ29CO0lBQUMsQ0FDUixDQUFDLEVBQ2xCdUgsb0JBQW9CLGlCQUFJckosSUFBQSxDQUFDdkYsdUJBQXVCO01BQUN1VSxLQUFLLEVBQUVuRjtJQUFtQixDQUFFLENBQUM7RUFBQSxDQUM3RCxDQUFDO0FBRXpCLENBQUMiLCJpZ25vcmVMaXN0IjpbXX0=
|