@projectcor/maia-components 2.11.55-1 → 2.11.55-3

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.
@@ -0,0 +1,374 @@
1
+ import _defineProperty from "@babel/runtime/helpers/defineProperty";
2
+ import _toConsumableArray from "@babel/runtime/helpers/toConsumableArray";
3
+ function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
4
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
5
+ import { normalizeHitlToolName } from './hitlAnalytics';
6
+ import { logHitlApprovalContext } from './debugMaiaSseLog';
7
+ var THINKING_MESSAGE_KEYS = ['chat.activity.thinking.analyzing', 'chat.activity.thinking.reviewing', 'chat.activity.thinking.planning'];
8
+ var GENERATING_MESSAGE_KEYS = ['chat.activity.generating.considering', 'chat.activity.generating.almostReady', 'chat.activity.generating.preparing'];
9
+ var SEARCH_MESSAGE_KEYS = ['chat.activity.search.scanning', 'chat.activity.search.summarizing'];
10
+ var DEEP_SEARCH_MESSAGE_KEYS = ['chat.activity.deepSearch.exploring', 'chat.activity.deepSearch.crossChecking'];
11
+ var ATTACHMENT_MESSAGE_KEYS = ['chat.activity.attachment.reading', 'chat.activity.attachment.extracting'];
12
+ var ATTACHMENT_MESSAGE_KEYS_PLURAL = ['chat.activity.attachment.readingPlural', 'chat.activity.attachment.extractingPlural'];
13
+ export var WRITING_ACTIVITY_MESSAGE_KEY = 'chat.activity.writing.composing';
14
+
15
+ /** Tools HITL / node SSE → key i18n del indicador de actividad (tiempo presente continuo). */
16
+ var HITL_TOOL_ACTIVITY_KEYS = {
17
+ create_task: 'chat.activity.creatingTask',
18
+ clone_task: 'chat.activity.creatingTask',
19
+ create_tasks_batch: 'chat.activity.creatingTasksBatch',
20
+ create_agent: 'chat.activity.creatingAgent',
21
+ edit_agent: 'chat.activity.editingAgent',
22
+ edit_task: 'chat.activity.editingTask',
23
+ edit_tasks_batch: 'chat.activity.editingTasksBatch',
24
+ delete_task: 'chat.activity.deletingTask',
25
+ delete_tasks_batch: 'chat.activity.deletingTasksBatch',
26
+ task_assign: 'chat.activity.assigningUser',
27
+ task_unassign: 'chat.activity.unassigningUser',
28
+ assign_task_label: 'chat.activity.assigningLabel',
29
+ update_task_type: 'chat.activity.updatingTaskType',
30
+ update_estimated_hours: 'chat.activity.updatingEstimatedHours',
31
+ update_deliverable: 'chat.activity.updatingDeliverable',
32
+ create_hour: 'chat.activity.loggingHours',
33
+ create_checklist: 'chat.activity.creatingChecklist',
34
+ get_task_date_hours: 'chat.activity.queryingHours',
35
+ configure_agent_access: 'chat.activity.configuringAgentAccess',
36
+ send_task_message: 'chat.activity.sendingTaskMessage',
37
+ delete_checklist_item: 'chat.activity.deletingChecklistItem',
38
+ remove_task_type: 'chat.activity.removingTaskType',
39
+ remove_task_label: 'chat.activity.removingLabel',
40
+ count_deliverable: 'chat.activity.updatingDeliverableCount',
41
+ create_rework: 'chat.activity.creatingRework',
42
+ update_rework: 'chat.activity.updatingRework'
43
+ };
44
+ var HITL_TOOL_NAMES_BY_SPECIFICITY = Object.keys(HITL_TOOL_ACTIVITY_KEYS).sort(function (a, b) {
45
+ return b.length - a.length;
46
+ });
47
+
48
+ /** Mensajes genéricos del backend cuando no hay detalle de tool (continue-thread). */
49
+ var isGenericResumeNodeMessage = function isGenericResumeNodeMessage(message) {
50
+ var normalized = message.trim().toLowerCase();
51
+ return normalized.startsWith('ejecutando acción aprobada') || normalized.startsWith('executing approved action') || normalized.startsWith('executando ação aprovada');
52
+ };
53
+ export var mapHitlToolNameToStreamActivity = function mapHitlToolNameToStreamActivity(toolName, t, options) {
54
+ var normalized = normalizeHitlToolName(toolName);
55
+ var key = HITL_TOOL_ACTIVITY_KEYS[normalized];
56
+ if (key) {
57
+ return {
58
+ phase: 'action',
59
+ message: t(key)
60
+ };
61
+ }
62
+ if (options !== null && options !== void 0 && options.useResumingFallback) {
63
+ return {
64
+ phase: 'action',
65
+ message: t('chat.activity.resumingAction')
66
+ };
67
+ }
68
+ return {
69
+ phase: 'action',
70
+ message: t('chat.executingAction')
71
+ };
72
+ };
73
+ var resolveHitlToolFromNodeMessage = function resolveHitlToolFromNodeMessage(nodeMessage) {
74
+ var normalized = nodeMessage.toLowerCase().trim();
75
+ if (!normalized) return null;
76
+ if (HITL_TOOL_ACTIVITY_KEYS[normalized]) {
77
+ return normalized;
78
+ }
79
+ var asToolName = normalizeHitlToolName(normalized.replace(/\s+/g, '_'));
80
+ if (HITL_TOOL_ACTIVITY_KEYS[asToolName]) {
81
+ return asToolName;
82
+ }
83
+ var matchedTool = HITL_TOOL_NAMES_BY_SPECIFICITY.find(function (toolName) {
84
+ return normalized.includes(toolName);
85
+ });
86
+ return matchedTool !== null && matchedTool !== void 0 ? matchedTool : null;
87
+ };
88
+ export var mapNodeMessageToStreamActivity = function mapNodeMessageToStreamActivity(nodeMessage, t, options) {
89
+ var normalized = nodeMessage.toLowerCase();
90
+ var hitlTool = resolveHitlToolFromNodeMessage(nodeMessage);
91
+ if (hitlTool) {
92
+ return mapHitlToolNameToStreamActivity(hitlTool, t, options);
93
+ }
94
+ if (normalized.includes('response_file_generation') || normalized.includes('generando archivo') || normalized.includes('generating file')) {
95
+ return {
96
+ phase: 'action',
97
+ message: t('chat.activity.generatingFile')
98
+ };
99
+ }
100
+ if (normalized.includes('tavily') || normalized.includes('search_web') || normalized.includes('buscando en la web') || normalized.includes('searching the web')) {
101
+ return {
102
+ phase: 'search',
103
+ message: t(SEARCH_MESSAGE_KEYS[0])
104
+ };
105
+ }
106
+ var trimmedMessage = nodeMessage.trim();
107
+ if (trimmedMessage && !isGenericResumeNodeMessage(trimmedMessage)) {
108
+ return {
109
+ phase: 'action',
110
+ message: trimmedMessage
111
+ };
112
+ }
113
+ if (isGenericResumeNodeMessage(trimmedMessage) || options !== null && options !== void 0 && options.useResumingFallback) {
114
+ return {
115
+ phase: 'action',
116
+ message: t('chat.activity.resumingAction')
117
+ };
118
+ }
119
+ return {
120
+ phase: 'action',
121
+ message: t('chat.executingAction')
122
+ };
123
+ };
124
+ var resolvePendingActionsForThread = function resolvePendingActionsForThread(context, threadId) {
125
+ var _ref, _context$pendingActio, _context$approval, _context$threadIds;
126
+ var pending = (_ref = (_context$pendingActio = context === null || context === void 0 ? void 0 : context.pendingActions) !== null && _context$pendingActio !== void 0 ? _context$pendingActio : context === null || context === void 0 || (_context$approval = context.approval) === null || _context$approval === void 0 ? void 0 : _context$approval.pending_actions) !== null && _ref !== void 0 ? _ref : [];
127
+ if (!pending.length) return [];
128
+ if (threadId) {
129
+ var forThread = pending.filter(function (action) {
130
+ return action.thread_id === threadId;
131
+ });
132
+ if (forThread.length) return forThread;
133
+ }
134
+ if (context !== null && context !== void 0 && (_context$threadIds = context.threadIds) !== null && _context$threadIds !== void 0 && _context$threadIds.length) {
135
+ return pending.filter(function (action) {
136
+ var _context$threadIds2;
137
+ return (_context$threadIds2 = context.threadIds) === null || _context$threadIds2 === void 0 ? void 0 : _context$threadIds2.includes(action.thread_id);
138
+ });
139
+ }
140
+ return pending;
141
+ };
142
+ var detectToolsFromPendingActions = function detectToolsFromPendingActions(actions) {
143
+ return _toConsumableArray(new Set(actions.map(function (action) {
144
+ return normalizeHitlToolName(action.tool_name);
145
+ }).filter(Boolean)));
146
+ };
147
+
148
+ /** Resuelve indicador HITL priorizando pending_actions del mensaje de aprobación anterior. */
149
+ export var resolveHitlNodeStreamActivity = function resolveHitlNodeStreamActivity(nodeMessage, t, context, threadId, options) {
150
+ var pendingForThread = resolvePendingActionsForThread(context, threadId);
151
+ var detectedTools = detectToolsFromPendingActions(pendingForThread);
152
+ if (options !== null && options !== void 0 && options.logSource) {
153
+ logHitlApprovalContext(options.logSource, {
154
+ messageId: context === null || context === void 0 ? void 0 : context.messageId,
155
+ messageText: context === null || context === void 0 ? void 0 : context.messageText,
156
+ threadId: threadId,
157
+ threadIds: context === null || context === void 0 ? void 0 : context.threadIds,
158
+ nodeMessage: nodeMessage,
159
+ pendingActions: pendingForThread,
160
+ detectedTools: detectedTools
161
+ });
162
+ }
163
+ var trimmedNodeMessage = nodeMessage.trim();
164
+ var activityFromNodeMessage = trimmedNodeMessage && !isGenericResumeNodeMessage(trimmedNodeMessage) ? {
165
+ phase: 'action',
166
+ message: trimmedNodeMessage
167
+ } : null;
168
+ var resolveAndLog = function resolveAndLog(activity) {
169
+ if (options !== null && options !== void 0 && options.logSource) {
170
+ logHitlApprovalContext("".concat(options.logSource, ":resolved"), {
171
+ detectedTools: detectedTools,
172
+ resolvedActivity: activity
173
+ });
174
+ }
175
+ return activity;
176
+ };
177
+ if (detectedTools.length >= 1) {
178
+ if (activityFromNodeMessage) {
179
+ return resolveAndLog(activityFromNodeMessage);
180
+ }
181
+ return resolveAndLog(mapHitlToolNameToStreamActivity(detectedTools[0], t, options));
182
+ }
183
+ return resolveAndLog(mapNodeMessageToStreamActivity(nodeMessage, t, options));
184
+ };
185
+ export var resolveInitialHitlStreamActivity = function resolveInitialHitlStreamActivity(t, context, options) {
186
+ var pendingActions = resolvePendingActionsForThread(context);
187
+ var detectedTools = detectToolsFromPendingActions(pendingActions);
188
+ if (options !== null && options !== void 0 && options.logSource) {
189
+ logHitlApprovalContext(options.logSource, {
190
+ messageId: context === null || context === void 0 ? void 0 : context.messageId,
191
+ messageText: context === null || context === void 0 ? void 0 : context.messageText,
192
+ threadIds: context === null || context === void 0 ? void 0 : context.threadIds,
193
+ pendingActions: pendingActions,
194
+ detectedTools: detectedTools
195
+ });
196
+ }
197
+ if (detectedTools.length >= 1) {
198
+ var activity = mapHitlToolNameToStreamActivity(detectedTools[0], t, {
199
+ useResumingFallback: true
200
+ });
201
+ if (options !== null && options !== void 0 && options.logSource) {
202
+ logHitlApprovalContext("".concat(options.logSource, ":resolved"), {
203
+ detectedTools: detectedTools,
204
+ resolvedActivity: activity
205
+ });
206
+ }
207
+ return activity;
208
+ }
209
+ return {
210
+ phase: 'processing',
211
+ message: t('chat.processing')
212
+ };
213
+ };
214
+ export var ACTIVITY_MESSAGE_ROTATE_MS = 3200;
215
+ var ROTATABLE_PHASES = ['generating', 'thinking', 'search', 'deep_search', 'attachment'];
216
+ var getMessageKeysForPhase = function getMessageKeysForPhase(phase) {
217
+ var attachmentsCount = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
218
+ switch (phase) {
219
+ case 'generating':
220
+ return GENERATING_MESSAGE_KEYS;
221
+ case 'thinking':
222
+ return THINKING_MESSAGE_KEYS;
223
+ case 'search':
224
+ return SEARCH_MESSAGE_KEYS;
225
+ case 'deep_search':
226
+ return DEEP_SEARCH_MESSAGE_KEYS;
227
+ case 'attachment':
228
+ return attachmentsCount > 1 ? ATTACHMENT_MESSAGE_KEYS_PLURAL : ATTACHMENT_MESSAGE_KEYS;
229
+ default:
230
+ return null;
231
+ }
232
+ };
233
+ export var getStreamActivityMessageAtIndex = function getStreamActivityMessageAtIndex(phase, index, t) {
234
+ var attachmentsCount = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 0;
235
+ if (phase === 'writing') {
236
+ return t(WRITING_ACTIVITY_MESSAGE_KEY);
237
+ }
238
+ var keys = getMessageKeysForPhase(phase, attachmentsCount);
239
+ if (!(keys !== null && keys !== void 0 && keys.length)) {
240
+ return '';
241
+ }
242
+ var clampedIndex = Math.min(Math.max(0, index), keys.length - 1);
243
+ return t(keys[clampedIndex]);
244
+ };
245
+ export var getThinkingLoadingMessage = function getThinkingLoadingMessage(index, t) {
246
+ return getStreamActivityMessageAtIndex('thinking', index, t);
247
+ };
248
+ export var getGeneratingLoadingMessage = function getGeneratingLoadingMessage(index, t) {
249
+ return getStreamActivityMessageAtIndex('generating', index, t);
250
+ };
251
+ export var canAdvanceStreamActivityMessage = function canAdvanceStreamActivityMessage(phase, currentIndex) {
252
+ var keys = getMessageKeysForPhase(phase);
253
+ if (!keys) {
254
+ return false;
255
+ }
256
+ return currentIndex < keys.length - 1;
257
+ };
258
+ export var advanceStreamActivityMessage = function advanceStreamActivityMessage(activity, currentIndex, t) {
259
+ if (!canAdvanceStreamActivityMessage(activity.phase, currentIndex)) {
260
+ return null;
261
+ }
262
+ var nextIndex = currentIndex + 1;
263
+ return {
264
+ activity: _objectSpread({
265
+ phase: activity.phase,
266
+ message: getStreamActivityMessageAtIndex(activity.phase, nextIndex, t, activity.attachmentsCount)
267
+ }, activity.attachmentsCount != null && {
268
+ attachmentsCount: activity.attachmentsCount
269
+ }),
270
+ nextIndex: nextIndex
271
+ };
272
+ };
273
+ export var canRotateStreamActivityPhase = function canRotateStreamActivityPhase(phase) {
274
+ return ROTATABLE_PHASES.includes(phase);
275
+ };
276
+ export var getWritingStreamActivity = function getWritingStreamActivity(t) {
277
+ return {
278
+ phase: 'writing',
279
+ message: t(WRITING_ACTIVITY_MESSAGE_KEY)
280
+ };
281
+ };
282
+ export var getInitialStreamActivity = function getInitialStreamActivity(t, options) {
283
+ if (options.isWebSearchActive) {
284
+ return {
285
+ phase: 'search',
286
+ message: t(SEARCH_MESSAGE_KEYS[0])
287
+ };
288
+ }
289
+ if (options.isDeepSearchActive) {
290
+ return {
291
+ phase: 'deep_search',
292
+ message: t(DEEP_SEARCH_MESSAGE_KEYS[0])
293
+ };
294
+ }
295
+ if (options.hasAttachments) {
296
+ var _options$attachmentsC;
297
+ var attachmentsCount = (_options$attachmentsC = options.attachmentsCount) !== null && _options$attachmentsC !== void 0 ? _options$attachmentsC : 0;
298
+ return {
299
+ phase: 'attachment',
300
+ message: getStreamActivityMessageAtIndex('attachment', 0, t, attachmentsCount),
301
+ attachmentsCount: attachmentsCount
302
+ };
303
+ }
304
+ return {
305
+ phase: 'generating',
306
+ message: t(GENERATING_MESSAGE_KEYS[0])
307
+ };
308
+ };
309
+ export var resolveStreamLoadingDisplay = function resolveStreamLoadingDisplay(params) {
310
+ if (params.streamActivity) {
311
+ return params.streamActivity;
312
+ }
313
+ var activeKeys = Object.keys(params.activeLoadings);
314
+ if (activeKeys.length > 0) {
315
+ var firstKey = activeKeys[0];
316
+ var raw = params.activeLoadings[firstKey];
317
+ if (raw && raw !== params.t('chat.processing')) {
318
+ var hitlTool = resolveHitlToolFromNodeMessage(raw);
319
+ if (hitlTool) {
320
+ return mapHitlToolNameToStreamActivity(hitlTool, params.t);
321
+ }
322
+ var trimmed = raw.trim();
323
+ if (trimmed && !isGenericResumeNodeMessage(trimmed)) {
324
+ return {
325
+ phase: 'action',
326
+ message: trimmed
327
+ };
328
+ }
329
+ return mapNodeMessageToStreamActivity(raw, params.t, {
330
+ useResumingFallback: true
331
+ });
332
+ }
333
+ return {
334
+ phase: 'processing',
335
+ message: params.t('chat.processing')
336
+ };
337
+ }
338
+ if (params.loadingMessage) {
339
+ if (params.loadingMessage === params.t('chat.writing') || params.loadingMessage === params.t(WRITING_ACTIVITY_MESSAGE_KEY)) {
340
+ return getWritingStreamActivity(params.t);
341
+ }
342
+ if (params.loadingMessage === params.t('chat.generating')) {
343
+ return {
344
+ phase: 'generating',
345
+ message: params.loadingMessage
346
+ };
347
+ }
348
+ if (params.loadingMessage === params.t('chat.generatingWebSearch') || params.loadingMessage === params.t('chat.generatingDeepSearch') || params.loadingMessage === params.t('chat.generatingAttachment')) {
349
+ return getInitialStreamActivity(params.t, {
350
+ isWebSearchActive: params.loadingMessage === params.t('chat.generatingWebSearch'),
351
+ isDeepSearchActive: params.loadingMessage === params.t('chat.generatingDeepSearch'),
352
+ hasAttachments: params.loadingMessage === params.t('chat.generatingAttachment'),
353
+ attachmentsCount: params.attachmentsCount
354
+ });
355
+ }
356
+ return {
357
+ phase: 'action',
358
+ message: params.loadingMessage
359
+ };
360
+ }
361
+ if (params.waitingResponse) {
362
+ return getInitialStreamActivity(params.t, {
363
+ isWebSearchActive: params.isWebSearchActive,
364
+ isDeepSearchActive: params.isDeepSearchActive,
365
+ hasAttachments: params.hasAttachments,
366
+ attachmentsCount: params.attachmentsCount
367
+ });
368
+ }
369
+ return null;
370
+ };
371
+ export var isStreamingPlaceholderMessageId = function isStreamingPlaceholderMessageId(messageId) {
372
+ return typeof messageId === 'string' && messageId.includes('-streaming');
373
+ };
374
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJub3JtYWxpemVIaXRsVG9vbE5hbWUiLCJsb2dIaXRsQXBwcm92YWxDb250ZXh0IiwiVEhJTktJTkdfTUVTU0FHRV9LRVlTIiwiR0VORVJBVElOR19NRVNTQUdFX0tFWVMiLCJTRUFSQ0hfTUVTU0FHRV9LRVlTIiwiREVFUF9TRUFSQ0hfTUVTU0FHRV9LRVlTIiwiQVRUQUNITUVOVF9NRVNTQUdFX0tFWVMiLCJBVFRBQ0hNRU5UX01FU1NBR0VfS0VZU19QTFVSQUwiLCJXUklUSU5HX0FDVElWSVRZX01FU1NBR0VfS0VZIiwiSElUTF9UT09MX0FDVElWSVRZX0tFWVMiLCJjcmVhdGVfdGFzayIsImNsb25lX3Rhc2siLCJjcmVhdGVfdGFza3NfYmF0Y2giLCJjcmVhdGVfYWdlbnQiLCJlZGl0X2FnZW50IiwiZWRpdF90YXNrIiwiZWRpdF90YXNrc19iYXRjaCIsImRlbGV0ZV90YXNrIiwiZGVsZXRlX3Rhc2tzX2JhdGNoIiwidGFza19hc3NpZ24iLCJ0YXNrX3VuYXNzaWduIiwiYXNzaWduX3Rhc2tfbGFiZWwiLCJ1cGRhdGVfdGFza190eXBlIiwidXBkYXRlX2VzdGltYXRlZF9ob3VycyIsInVwZGF0ZV9kZWxpdmVyYWJsZSIsImNyZWF0ZV9ob3VyIiwiY3JlYXRlX2NoZWNrbGlzdCIsImdldF90YXNrX2RhdGVfaG91cnMiLCJjb25maWd1cmVfYWdlbnRfYWNjZXNzIiwic2VuZF90YXNrX21lc3NhZ2UiLCJkZWxldGVfY2hlY2tsaXN0X2l0ZW0iLCJyZW1vdmVfdGFza190eXBlIiwicmVtb3ZlX3Rhc2tfbGFiZWwiLCJjb3VudF9kZWxpdmVyYWJsZSIsImNyZWF0ZV9yZXdvcmsiLCJ1cGRhdGVfcmV3b3JrIiwiSElUTF9UT09MX05BTUVTX0JZX1NQRUNJRklDSVRZIiwiT2JqZWN0Iiwia2V5cyIsInNvcnQiLCJhIiwiYiIsImxlbmd0aCIsImlzR2VuZXJpY1Jlc3VtZU5vZGVNZXNzYWdlIiwibWVzc2FnZSIsIm5vcm1hbGl6ZWQiLCJ0cmltIiwidG9Mb3dlckNhc2UiLCJzdGFydHNXaXRoIiwibWFwSGl0bFRvb2xOYW1lVG9TdHJlYW1BY3Rpdml0eSIsInRvb2xOYW1lIiwidCIsIm9wdGlvbnMiLCJrZXkiLCJwaGFzZSIsInVzZVJlc3VtaW5nRmFsbGJhY2siLCJyZXNvbHZlSGl0bFRvb2xGcm9tTm9kZU1lc3NhZ2UiLCJub2RlTWVzc2FnZSIsImFzVG9vbE5hbWUiLCJyZXBsYWNlIiwibWF0Y2hlZFRvb2wiLCJmaW5kIiwiaW5jbHVkZXMiLCJtYXBOb2RlTWVzc2FnZVRvU3RyZWFtQWN0aXZpdHkiLCJoaXRsVG9vbCIsInRyaW1tZWRNZXNzYWdlIiwicmVzb2x2ZVBlbmRpbmdBY3Rpb25zRm9yVGhyZWFkIiwiY29udGV4dCIsInRocmVhZElkIiwiX3JlZiIsIl9jb250ZXh0JHBlbmRpbmdBY3RpbyIsIl9jb250ZXh0JGFwcHJvdmFsIiwiX2NvbnRleHQkdGhyZWFkSWRzIiwicGVuZGluZyIsInBlbmRpbmdBY3Rpb25zIiwiYXBwcm92YWwiLCJwZW5kaW5nX2FjdGlvbnMiLCJmb3JUaHJlYWQiLCJmaWx0ZXIiLCJhY3Rpb24iLCJ0aHJlYWRfaWQiLCJ0aHJlYWRJZHMiLCJfY29udGV4dCR0aHJlYWRJZHMyIiwiZGV0ZWN0VG9vbHNGcm9tUGVuZGluZ0FjdGlvbnMiLCJhY3Rpb25zIiwiX3RvQ29uc3VtYWJsZUFycmF5IiwiU2V0IiwibWFwIiwidG9vbF9uYW1lIiwiQm9vbGVhbiIsInJlc29sdmVIaXRsTm9kZVN0cmVhbUFjdGl2aXR5IiwicGVuZGluZ0ZvclRocmVhZCIsImRldGVjdGVkVG9vbHMiLCJsb2dTb3VyY2UiLCJtZXNzYWdlSWQiLCJtZXNzYWdlVGV4dCIsInRyaW1tZWROb2RlTWVzc2FnZSIsImFjdGl2aXR5RnJvbU5vZGVNZXNzYWdlIiwicmVzb2x2ZUFuZExvZyIsImFjdGl2aXR5IiwiY29uY2F0IiwicmVzb2x2ZWRBY3Rpdml0eSIsInJlc29sdmVJbml0aWFsSGl0bFN0cmVhbUFjdGl2aXR5IiwiQUNUSVZJVFlfTUVTU0FHRV9ST1RBVEVfTVMiLCJST1RBVEFCTEVfUEhBU0VTIiwiZ2V0TWVzc2FnZUtleXNGb3JQaGFzZSIsImF0dGFjaG1lbnRzQ291bnQiLCJhcmd1bWVudHMiLCJ1bmRlZmluZWQiLCJnZXRTdHJlYW1BY3Rpdml0eU1lc3NhZ2VBdEluZGV4IiwiaW5kZXgiLCJjbGFtcGVkSW5kZXgiLCJNYXRoIiwibWluIiwibWF4IiwiZ2V0VGhpbmtpbmdMb2FkaW5nTWVzc2FnZSIsImdldEdlbmVyYXRpbmdMb2FkaW5nTWVzc2FnZSIsImNhbkFkdmFuY2VTdHJlYW1BY3Rpdml0eU1lc3NhZ2UiLCJjdXJyZW50SW5kZXgiLCJhZHZhbmNlU3RyZWFtQWN0aXZpdHlNZXNzYWdlIiwibmV4dEluZGV4IiwiX29iamVjdFNwcmVhZCIsImNhblJvdGF0ZVN0cmVhbUFjdGl2aXR5UGhhc2UiLCJnZXRXcml0aW5nU3RyZWFtQWN0aXZpdHkiLCJnZXRJbml0aWFsU3RyZWFtQWN0aXZpdHkiLCJpc1dlYlNlYXJjaEFjdGl2ZSIsImlzRGVlcFNlYXJjaEFjdGl2ZSIsImhhc0F0dGFjaG1lbnRzIiwiX29wdGlvbnMkYXR0YWNobWVudHNDIiwicmVzb2x2ZVN0cmVhbUxvYWRpbmdEaXNwbGF5IiwicGFyYW1zIiwic3RyZWFtQWN0aXZpdHkiLCJhY3RpdmVLZXlzIiwiYWN0aXZlTG9hZGluZ3MiLCJmaXJzdEtleSIsInJhdyIsInRyaW1tZWQiLCJsb2FkaW5nTWVzc2FnZSIsIndhaXRpbmdSZXNwb25zZSIsImlzU3RyZWFtaW5nUGxhY2Vob2xkZXJNZXNzYWdlSWQiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbHMvc3RyZWFtQWN0aXZpdHlNZXNzYWdlcy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IFN0cmVhbUFjdGl2aXR5LCBTdHJlYW1BY3Rpdml0eVBoYXNlIH0gZnJvbSAnLi4vdHlwZXMvc3RyZWFtQWN0aXZpdHknXG5pbXBvcnQgdHlwZSB7IEFwcHJvdmFsUmVxdWVzdCwgUGVuZGluZ0FjdGlvbiB9IGZyb20gJy4uL3R5cGVzL0NoYXQnXG5pbXBvcnQgeyBub3JtYWxpemVIaXRsVG9vbE5hbWUgfSBmcm9tICcuL2hpdGxBbmFseXRpY3MnXG5pbXBvcnQgeyBsb2dIaXRsQXBwcm92YWxDb250ZXh0IH0gZnJvbSAnLi9kZWJ1Z01haWFTc2VMb2cnXG5cbnR5cGUgVHJhbnNsYXRlRm4gPSAoa2V5OiBzdHJpbmcpID0+IHN0cmluZ1xuXG5jb25zdCBUSElOS0lOR19NRVNTQUdFX0tFWVMgPSBbXG4gICdjaGF0LmFjdGl2aXR5LnRoaW5raW5nLmFuYWx5emluZycsXG4gICdjaGF0LmFjdGl2aXR5LnRoaW5raW5nLnJldmlld2luZycsXG4gICdjaGF0LmFjdGl2aXR5LnRoaW5raW5nLnBsYW5uaW5nJyxcbl0gYXMgY29uc3RcblxuY29uc3QgR0VORVJBVElOR19NRVNTQUdFX0tFWVMgPSBbXG4gICdjaGF0LmFjdGl2aXR5LmdlbmVyYXRpbmcuY29uc2lkZXJpbmcnLFxuICAnY2hhdC5hY3Rpdml0eS5nZW5lcmF0aW5nLmFsbW9zdFJlYWR5JyxcbiAgJ2NoYXQuYWN0aXZpdHkuZ2VuZXJhdGluZy5wcmVwYXJpbmcnLFxuXSBhcyBjb25zdFxuXG5jb25zdCBTRUFSQ0hfTUVTU0FHRV9LRVlTID0gWydjaGF0LmFjdGl2aXR5LnNlYXJjaC5zY2FubmluZycsICdjaGF0LmFjdGl2aXR5LnNlYXJjaC5zdW1tYXJpemluZyddIGFzIGNvbnN0XG5cbmNvbnN0IERFRVBfU0VBUkNIX01FU1NBR0VfS0VZUyA9IFtcbiAgJ2NoYXQuYWN0aXZpdHkuZGVlcFNlYXJjaC5leHBsb3JpbmcnLFxuICAnY2hhdC5hY3Rpdml0eS5kZWVwU2VhcmNoLmNyb3NzQ2hlY2tpbmcnLFxuXSBhcyBjb25zdFxuXG5jb25zdCBBVFRBQ0hNRU5UX01FU1NBR0VfS0VZUyA9IFsnY2hhdC5hY3Rpdml0eS5hdHRhY2htZW50LnJlYWRpbmcnLCAnY2hhdC5hY3Rpdml0eS5hdHRhY2htZW50LmV4dHJhY3RpbmcnXSBhcyBjb25zdFxuXG5jb25zdCBBVFRBQ0hNRU5UX01FU1NBR0VfS0VZU19QTFVSQUwgPSBbXG4gICdjaGF0LmFjdGl2aXR5LmF0dGFjaG1lbnQucmVhZGluZ1BsdXJhbCcsXG4gICdjaGF0LmFjdGl2aXR5LmF0dGFjaG1lbnQuZXh0cmFjdGluZ1BsdXJhbCcsXG5dIGFzIGNvbnN0XG5cbmV4cG9ydCBjb25zdCBXUklUSU5HX0FDVElWSVRZX01FU1NBR0VfS0VZID0gJ2NoYXQuYWN0aXZpdHkud3JpdGluZy5jb21wb3NpbmcnIGFzIGNvbnN0XG5cbi8qKiBUb29scyBISVRMIC8gbm9kZSBTU0Ug4oaSIGtleSBpMThuIGRlbCBpbmRpY2Fkb3IgZGUgYWN0aXZpZGFkICh0aWVtcG8gcHJlc2VudGUgY29udGludW8pLiAqL1xuY29uc3QgSElUTF9UT09MX0FDVElWSVRZX0tFWVM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XG4gIGNyZWF0ZV90YXNrOiAnY2hhdC5hY3Rpdml0eS5jcmVhdGluZ1Rhc2snLFxuICBjbG9uZV90YXNrOiAnY2hhdC5hY3Rpdml0eS5jcmVhdGluZ1Rhc2snLFxuICBjcmVhdGVfdGFza3NfYmF0Y2g6ICdjaGF0LmFjdGl2aXR5LmNyZWF0aW5nVGFza3NCYXRjaCcsXG4gIGNyZWF0ZV9hZ2VudDogJ2NoYXQuYWN0aXZpdHkuY3JlYXRpbmdBZ2VudCcsXG4gIGVkaXRfYWdlbnQ6ICdjaGF0LmFjdGl2aXR5LmVkaXRpbmdBZ2VudCcsXG4gIGVkaXRfdGFzazogJ2NoYXQuYWN0aXZpdHkuZWRpdGluZ1Rhc2snLFxuICBlZGl0X3Rhc2tzX2JhdGNoOiAnY2hhdC5hY3Rpdml0eS5lZGl0aW5nVGFza3NCYXRjaCcsXG4gIGRlbGV0ZV90YXNrOiAnY2hhdC5hY3Rpdml0eS5kZWxldGluZ1Rhc2snLFxuICBkZWxldGVfdGFza3NfYmF0Y2g6ICdjaGF0LmFjdGl2aXR5LmRlbGV0aW5nVGFza3NCYXRjaCcsXG4gIHRhc2tfYXNzaWduOiAnY2hhdC5hY3Rpdml0eS5hc3NpZ25pbmdVc2VyJyxcbiAgdGFza191bmFzc2lnbjogJ2NoYXQuYWN0aXZpdHkudW5hc3NpZ25pbmdVc2VyJyxcbiAgYXNzaWduX3Rhc2tfbGFiZWw6ICdjaGF0LmFjdGl2aXR5LmFzc2lnbmluZ0xhYmVsJyxcbiAgdXBkYXRlX3Rhc2tfdHlwZTogJ2NoYXQuYWN0aXZpdHkudXBkYXRpbmdUYXNrVHlwZScsXG4gIHVwZGF0ZV9lc3RpbWF0ZWRfaG91cnM6ICdjaGF0LmFjdGl2aXR5LnVwZGF0aW5nRXN0aW1hdGVkSG91cnMnLFxuICB1cGRhdGVfZGVsaXZlcmFibGU6ICdjaGF0LmFjdGl2aXR5LnVwZGF0aW5nRGVsaXZlcmFibGUnLFxuICBjcmVhdGVfaG91cjogJ2NoYXQuYWN0aXZpdHkubG9nZ2luZ0hvdXJzJyxcbiAgY3JlYXRlX2NoZWNrbGlzdDogJ2NoYXQuYWN0aXZpdHkuY3JlYXRpbmdDaGVja2xpc3QnLFxuICBnZXRfdGFza19kYXRlX2hvdXJzOiAnY2hhdC5hY3Rpdml0eS5xdWVyeWluZ0hvdXJzJyxcbiAgY29uZmlndXJlX2FnZW50X2FjY2VzczogJ2NoYXQuYWN0aXZpdHkuY29uZmlndXJpbmdBZ2VudEFjY2VzcycsXG4gIHNlbmRfdGFza19tZXNzYWdlOiAnY2hhdC5hY3Rpdml0eS5zZW5kaW5nVGFza01lc3NhZ2UnLFxuICBkZWxldGVfY2hlY2tsaXN0X2l0ZW06ICdjaGF0LmFjdGl2aXR5LmRlbGV0aW5nQ2hlY2tsaXN0SXRlbScsXG4gIHJlbW92ZV90YXNrX3R5cGU6ICdjaGF0LmFjdGl2aXR5LnJlbW92aW5nVGFza1R5cGUnLFxuICByZW1vdmVfdGFza19sYWJlbDogJ2NoYXQuYWN0aXZpdHkucmVtb3ZpbmdMYWJlbCcsXG4gIGNvdW50X2RlbGl2ZXJhYmxlOiAnY2hhdC5hY3Rpdml0eS51cGRhdGluZ0RlbGl2ZXJhYmxlQ291bnQnLFxuICBjcmVhdGVfcmV3b3JrOiAnY2hhdC5hY3Rpdml0eS5jcmVhdGluZ1Jld29yaycsXG4gIHVwZGF0ZV9yZXdvcms6ICdjaGF0LmFjdGl2aXR5LnVwZGF0aW5nUmV3b3JrJyxcbn1cblxuY29uc3QgSElUTF9UT09MX05BTUVTX0JZX1NQRUNJRklDSVRZID0gT2JqZWN0LmtleXMoSElUTF9UT09MX0FDVElWSVRZX0tFWVMpLnNvcnQoKGEsIGIpID0+IGIubGVuZ3RoIC0gYS5sZW5ndGgpXG5cbi8qKiBNZW5zYWplcyBnZW7DqXJpY29zIGRlbCBiYWNrZW5kIGN1YW5kbyBubyBoYXkgZGV0YWxsZSBkZSB0b29sIChjb250aW51ZS10aHJlYWQpLiAqL1xuY29uc3QgaXNHZW5lcmljUmVzdW1lTm9kZU1lc3NhZ2UgPSAobWVzc2FnZTogc3RyaW5nKTogYm9vbGVhbiA9PiB7XG4gIGNvbnN0IG5vcm1hbGl6ZWQgPSBtZXNzYWdlLnRyaW0oKS50b0xvd2VyQ2FzZSgpXG4gIHJldHVybiAoXG4gICAgbm9ybWFsaXplZC5zdGFydHNXaXRoKCdlamVjdXRhbmRvIGFjY2nDs24gYXByb2JhZGEnKSB8fFxuICAgIG5vcm1hbGl6ZWQuc3RhcnRzV2l0aCgnZXhlY3V0aW5nIGFwcHJvdmVkIGFjdGlvbicpIHx8XG4gICAgbm9ybWFsaXplZC5zdGFydHNXaXRoKCdleGVjdXRhbmRvIGHDp8OjbyBhcHJvdmFkYScpXG4gIClcbn1cblxuZXhwb3J0IGNvbnN0IG1hcEhpdGxUb29sTmFtZVRvU3RyZWFtQWN0aXZpdHkgPSAoXG4gIHRvb2xOYW1lOiBzdHJpbmcsXG4gIHQ6IFRyYW5zbGF0ZUZuLFxuICBvcHRpb25zPzogeyB1c2VSZXN1bWluZ0ZhbGxiYWNrPzogYm9vbGVhbiB9XG4pOiBTdHJlYW1BY3Rpdml0eSA9PiB7XG4gIGNvbnN0IG5vcm1hbGl6ZWQgPSBub3JtYWxpemVIaXRsVG9vbE5hbWUodG9vbE5hbWUpXG4gIGNvbnN0IGtleSA9IEhJVExfVE9PTF9BQ1RJVklUWV9LRVlTW25vcm1hbGl6ZWRdXG4gIGlmIChrZXkpIHtcbiAgICByZXR1cm4geyBwaGFzZTogJ2FjdGlvbicsIG1lc3NhZ2U6IHQoa2V5KSB9XG4gIH1cbiAgaWYgKG9wdGlvbnM/LnVzZVJlc3VtaW5nRmFsbGJhY2spIHtcbiAgICByZXR1cm4geyBwaGFzZTogJ2FjdGlvbicsIG1lc3NhZ2U6IHQoJ2NoYXQuYWN0aXZpdHkucmVzdW1pbmdBY3Rpb24nKSB9XG4gIH1cbiAgcmV0dXJuIHsgcGhhc2U6ICdhY3Rpb24nLCBtZXNzYWdlOiB0KCdjaGF0LmV4ZWN1dGluZ0FjdGlvbicpIH1cbn1cblxuY29uc3QgcmVzb2x2ZUhpdGxUb29sRnJvbU5vZGVNZXNzYWdlID0gKG5vZGVNZXNzYWdlOiBzdHJpbmcpOiBzdHJpbmcgfCBudWxsID0+IHtcbiAgY29uc3Qgbm9ybWFsaXplZCA9IG5vZGVNZXNzYWdlLnRvTG93ZXJDYXNlKCkudHJpbSgpXG4gIGlmICghbm9ybWFsaXplZCkgcmV0dXJuIG51bGxcblxuICBpZiAoSElUTF9UT09MX0FDVElWSVRZX0tFWVNbbm9ybWFsaXplZF0pIHtcbiAgICByZXR1cm4gbm9ybWFsaXplZFxuICB9XG5cbiAgY29uc3QgYXNUb29sTmFtZSA9IG5vcm1hbGl6ZUhpdGxUb29sTmFtZShub3JtYWxpemVkLnJlcGxhY2UoL1xccysvZywgJ18nKSlcbiAgaWYgKEhJVExfVE9PTF9BQ1RJVklUWV9LRVlTW2FzVG9vbE5hbWVdKSB7XG4gICAgcmV0dXJuIGFzVG9vbE5hbWVcbiAgfVxuXG4gIGNvbnN0IG1hdGNoZWRUb29sID0gSElUTF9UT09MX05BTUVTX0JZX1NQRUNJRklDSVRZLmZpbmQodG9vbE5hbWUgPT4gbm9ybWFsaXplZC5pbmNsdWRlcyh0b29sTmFtZSkpXG4gIHJldHVybiBtYXRjaGVkVG9vbCA/PyBudWxsXG59XG5cbmV4cG9ydCBjb25zdCBtYXBOb2RlTWVzc2FnZVRvU3RyZWFtQWN0aXZpdHkgPSAoXG4gIG5vZGVNZXNzYWdlOiBzdHJpbmcsXG4gIHQ6IFRyYW5zbGF0ZUZuLFxuICBvcHRpb25zPzogeyB1c2VSZXN1bWluZ0ZhbGxiYWNrPzogYm9vbGVhbiB9XG4pOiBTdHJlYW1BY3Rpdml0eSA9PiB7XG4gIGNvbnN0IG5vcm1hbGl6ZWQgPSBub2RlTWVzc2FnZS50b0xvd2VyQ2FzZSgpXG5cbiAgY29uc3QgaGl0bFRvb2wgPSByZXNvbHZlSGl0bFRvb2xGcm9tTm9kZU1lc3NhZ2Uobm9kZU1lc3NhZ2UpXG4gIGlmIChoaXRsVG9vbCkge1xuICAgIHJldHVybiBtYXBIaXRsVG9vbE5hbWVUb1N0cmVhbUFjdGl2aXR5KGhpdGxUb29sLCB0LCBvcHRpb25zKVxuICB9XG5cbiAgaWYgKFxuICAgIG5vcm1hbGl6ZWQuaW5jbHVkZXMoJ3Jlc3BvbnNlX2ZpbGVfZ2VuZXJhdGlvbicpIHx8XG4gICAgbm9ybWFsaXplZC5pbmNsdWRlcygnZ2VuZXJhbmRvIGFyY2hpdm8nKSB8fFxuICAgIG5vcm1hbGl6ZWQuaW5jbHVkZXMoJ2dlbmVyYXRpbmcgZmlsZScpXG4gICkge1xuICAgIHJldHVybiB7IHBoYXNlOiAnYWN0aW9uJywgbWVzc2FnZTogdCgnY2hhdC5hY3Rpdml0eS5nZW5lcmF0aW5nRmlsZScpIH1cbiAgfVxuICBpZiAoXG4gICAgbm9ybWFsaXplZC5pbmNsdWRlcygndGF2aWx5JykgfHxcbiAgICBub3JtYWxpemVkLmluY2x1ZGVzKCdzZWFyY2hfd2ViJykgfHxcbiAgICBub3JtYWxpemVkLmluY2x1ZGVzKCdidXNjYW5kbyBlbiBsYSB3ZWInKSB8fFxuICAgIG5vcm1hbGl6ZWQuaW5jbHVkZXMoJ3NlYXJjaGluZyB0aGUgd2ViJylcbiAgKSB7XG4gICAgcmV0dXJuIHsgcGhhc2U6ICdzZWFyY2gnLCBtZXNzYWdlOiB0KFNFQVJDSF9NRVNTQUdFX0tFWVNbMF0pIH1cbiAgfVxuXG4gIGNvbnN0IHRyaW1tZWRNZXNzYWdlID0gbm9kZU1lc3NhZ2UudHJpbSgpXG4gIGlmICh0cmltbWVkTWVzc2FnZSAmJiAhaXNHZW5lcmljUmVzdW1lTm9kZU1lc3NhZ2UodHJpbW1lZE1lc3NhZ2UpKSB7XG4gICAgcmV0dXJuIHsgcGhhc2U6ICdhY3Rpb24nLCBtZXNzYWdlOiB0cmltbWVkTWVzc2FnZSB9XG4gIH1cblxuICBpZiAoaXNHZW5lcmljUmVzdW1lTm9kZU1lc3NhZ2UodHJpbW1lZE1lc3NhZ2UpIHx8IG9wdGlvbnM/LnVzZVJlc3VtaW5nRmFsbGJhY2spIHtcbiAgICByZXR1cm4geyBwaGFzZTogJ2FjdGlvbicsIG1lc3NhZ2U6IHQoJ2NoYXQuYWN0aXZpdHkucmVzdW1pbmdBY3Rpb24nKSB9XG4gIH1cbiAgcmV0dXJuIHsgcGhhc2U6ICdhY3Rpb24nLCBtZXNzYWdlOiB0KCdjaGF0LmV4ZWN1dGluZ0FjdGlvbicpIH1cbn1cblxuZXhwb3J0IHR5cGUgSGl0bEV4ZWN1dGlvbkNvbnRleHQgPSB7XG4gIG1lc3NhZ2VJZD86IHN0cmluZ1xuICBtZXNzYWdlVGV4dD86IHN0cmluZ1xuICBhcHByb3ZhbD86IEFwcHJvdmFsUmVxdWVzdFxuICBwZW5kaW5nQWN0aW9ucz86IFBlbmRpbmdBY3Rpb25bXVxuICB0aHJlYWRJZHM/OiBzdHJpbmdbXVxufVxuXG5jb25zdCByZXNvbHZlUGVuZGluZ0FjdGlvbnNGb3JUaHJlYWQgPSAoXG4gIGNvbnRleHQ6IEhpdGxFeGVjdXRpb25Db250ZXh0IHwgbnVsbCB8IHVuZGVmaW5lZCxcbiAgdGhyZWFkSWQ/OiBzdHJpbmdcbik6IFBlbmRpbmdBY3Rpb25bXSA9PiB7XG4gIGNvbnN0IHBlbmRpbmcgPSBjb250ZXh0Py5wZW5kaW5nQWN0aW9ucyA/PyBjb250ZXh0Py5hcHByb3ZhbD8ucGVuZGluZ19hY3Rpb25zID8/IFtdXG4gIGlmICghcGVuZGluZy5sZW5ndGgpIHJldHVybiBbXVxuXG4gIGlmICh0aHJlYWRJZCkge1xuICAgIGNvbnN0IGZvclRocmVhZCA9IHBlbmRpbmcuZmlsdGVyKGFjdGlvbiA9PiBhY3Rpb24udGhyZWFkX2lkID09PSB0aHJlYWRJZClcbiAgICBpZiAoZm9yVGhyZWFkLmxlbmd0aCkgcmV0dXJuIGZvclRocmVhZFxuICB9XG5cbiAgaWYgKGNvbnRleHQ/LnRocmVhZElkcz8ubGVuZ3RoKSB7XG4gICAgcmV0dXJuIHBlbmRpbmcuZmlsdGVyKGFjdGlvbiA9PiBjb250ZXh0LnRocmVhZElkcz8uaW5jbHVkZXMoYWN0aW9uLnRocmVhZF9pZCkpXG4gIH1cblxuICByZXR1cm4gcGVuZGluZ1xufVxuXG5jb25zdCBkZXRlY3RUb29sc0Zyb21QZW5kaW5nQWN0aW9ucyA9IChhY3Rpb25zOiBQZW5kaW5nQWN0aW9uW10pOiBzdHJpbmdbXSA9PiBbXG4gIC4uLm5ldyBTZXQoYWN0aW9ucy5tYXAoYWN0aW9uID0+IG5vcm1hbGl6ZUhpdGxUb29sTmFtZShhY3Rpb24udG9vbF9uYW1lKSkuZmlsdGVyKEJvb2xlYW4pKSxcbl1cblxuLyoqIFJlc3VlbHZlIGluZGljYWRvciBISVRMIHByaW9yaXphbmRvIHBlbmRpbmdfYWN0aW9ucyBkZWwgbWVuc2FqZSBkZSBhcHJvYmFjacOzbiBhbnRlcmlvci4gKi9cbmV4cG9ydCBjb25zdCByZXNvbHZlSGl0bE5vZGVTdHJlYW1BY3Rpdml0eSA9IChcbiAgbm9kZU1lc3NhZ2U6IHN0cmluZyxcbiAgdDogVHJhbnNsYXRlRm4sXG4gIGNvbnRleHQ/OiBIaXRsRXhlY3V0aW9uQ29udGV4dCB8IG51bGwsXG4gIHRocmVhZElkPzogc3RyaW5nLFxuICBvcHRpb25zPzogeyB1c2VSZXN1bWluZ0ZhbGxiYWNrPzogYm9vbGVhbjsgbG9nU291cmNlPzogc3RyaW5nIH1cbik6IFN0cmVhbUFjdGl2aXR5ID0+IHtcbiAgY29uc3QgcGVuZGluZ0ZvclRocmVhZCA9IHJlc29sdmVQZW5kaW5nQWN0aW9uc0ZvclRocmVhZChjb250ZXh0LCB0aHJlYWRJZClcbiAgY29uc3QgZGV0ZWN0ZWRUb29scyA9IGRldGVjdFRvb2xzRnJvbVBlbmRpbmdBY3Rpb25zKHBlbmRpbmdGb3JUaHJlYWQpXG5cbiAgaWYgKG9wdGlvbnM/LmxvZ1NvdXJjZSkge1xuICAgIGxvZ0hpdGxBcHByb3ZhbENvbnRleHQob3B0aW9ucy5sb2dTb3VyY2UsIHtcbiAgICAgIG1lc3NhZ2VJZDogY29udGV4dD8ubWVzc2FnZUlkLFxuICAgICAgbWVzc2FnZVRleHQ6IGNvbnRleHQ/Lm1lc3NhZ2VUZXh0LFxuICAgICAgdGhyZWFkSWQsXG4gICAgICB0aHJlYWRJZHM6IGNvbnRleHQ/LnRocmVhZElkcyxcbiAgICAgIG5vZGVNZXNzYWdlLFxuICAgICAgcGVuZGluZ0FjdGlvbnM6IHBlbmRpbmdGb3JUaHJlYWQsXG4gICAgICBkZXRlY3RlZFRvb2xzLFxuICAgIH0pXG4gIH1cblxuICBjb25zdCB0cmltbWVkTm9kZU1lc3NhZ2UgPSBub2RlTWVzc2FnZS50cmltKClcbiAgY29uc3QgYWN0aXZpdHlGcm9tTm9kZU1lc3NhZ2UgPVxuICAgIHRyaW1tZWROb2RlTWVzc2FnZSAmJiAhaXNHZW5lcmljUmVzdW1lTm9kZU1lc3NhZ2UodHJpbW1lZE5vZGVNZXNzYWdlKVxuICAgICAgPyB7IHBoYXNlOiAnYWN0aW9uJyBhcyBjb25zdCwgbWVzc2FnZTogdHJpbW1lZE5vZGVNZXNzYWdlIH1cbiAgICAgIDogbnVsbFxuXG4gIGNvbnN0IHJlc29sdmVBbmRMb2cgPSAoYWN0aXZpdHk6IFN0cmVhbUFjdGl2aXR5KSA9PiB7XG4gICAgaWYgKG9wdGlvbnM/LmxvZ1NvdXJjZSkge1xuICAgICAgbG9nSGl0bEFwcHJvdmFsQ29udGV4dChgJHtvcHRpb25zLmxvZ1NvdXJjZX06cmVzb2x2ZWRgLCB7XG4gICAgICAgIGRldGVjdGVkVG9vbHMsXG4gICAgICAgIHJlc29sdmVkQWN0aXZpdHk6IGFjdGl2aXR5LFxuICAgICAgfSlcbiAgICB9XG4gICAgcmV0dXJuIGFjdGl2aXR5XG4gIH1cblxuICBpZiAoZGV0ZWN0ZWRUb29scy5sZW5ndGggPj0gMSkge1xuICAgIGlmIChhY3Rpdml0eUZyb21Ob2RlTWVzc2FnZSkge1xuICAgICAgcmV0dXJuIHJlc29sdmVBbmRMb2coYWN0aXZpdHlGcm9tTm9kZU1lc3NhZ2UpXG4gICAgfVxuICAgIHJldHVybiByZXNvbHZlQW5kTG9nKG1hcEhpdGxUb29sTmFtZVRvU3RyZWFtQWN0aXZpdHkoZGV0ZWN0ZWRUb29sc1swXSwgdCwgb3B0aW9ucykpXG4gIH1cblxuICByZXR1cm4gcmVzb2x2ZUFuZExvZyhtYXBOb2RlTWVzc2FnZVRvU3RyZWFtQWN0aXZpdHkobm9kZU1lc3NhZ2UsIHQsIG9wdGlvbnMpKVxufVxuXG5leHBvcnQgY29uc3QgcmVzb2x2ZUluaXRpYWxIaXRsU3RyZWFtQWN0aXZpdHkgPSAoXG4gIHQ6IFRyYW5zbGF0ZUZuLFxuICBjb250ZXh0PzogSGl0bEV4ZWN1dGlvbkNvbnRleHQgfCBudWxsLFxuICBvcHRpb25zPzogeyBsb2dTb3VyY2U/OiBzdHJpbmcgfVxuKTogU3RyZWFtQWN0aXZpdHkgPT4ge1xuICBjb25zdCBwZW5kaW5nQWN0aW9ucyA9IHJlc29sdmVQZW5kaW5nQWN0aW9uc0ZvclRocmVhZChjb250ZXh0KVxuICBjb25zdCBkZXRlY3RlZFRvb2xzID0gZGV0ZWN0VG9vbHNGcm9tUGVuZGluZ0FjdGlvbnMocGVuZGluZ0FjdGlvbnMpXG5cbiAgaWYgKG9wdGlvbnM/LmxvZ1NvdXJjZSkge1xuICAgIGxvZ0hpdGxBcHByb3ZhbENvbnRleHQob3B0aW9ucy5sb2dTb3VyY2UsIHtcbiAgICAgIG1lc3NhZ2VJZDogY29udGV4dD8ubWVzc2FnZUlkLFxuICAgICAgbWVzc2FnZVRleHQ6IGNvbnRleHQ/Lm1lc3NhZ2VUZXh0LFxuICAgICAgdGhyZWFkSWRzOiBjb250ZXh0Py50aHJlYWRJZHMsXG4gICAgICBwZW5kaW5nQWN0aW9ucyxcbiAgICAgIGRldGVjdGVkVG9vbHMsXG4gICAgfSlcbiAgfVxuXG4gIGlmIChkZXRlY3RlZFRvb2xzLmxlbmd0aCA+PSAxKSB7XG4gICAgY29uc3QgYWN0aXZpdHkgPSBtYXBIaXRsVG9vbE5hbWVUb1N0cmVhbUFjdGl2aXR5KGRldGVjdGVkVG9vbHNbMF0sIHQsIHsgdXNlUmVzdW1pbmdGYWxsYmFjazogdHJ1ZSB9KVxuICAgIGlmIChvcHRpb25zPy5sb2dTb3VyY2UpIHtcbiAgICAgIGxvZ0hpdGxBcHByb3ZhbENvbnRleHQoYCR7b3B0aW9ucy5sb2dTb3VyY2V9OnJlc29sdmVkYCwge1xuICAgICAgICBkZXRlY3RlZFRvb2xzLFxuICAgICAgICByZXNvbHZlZEFjdGl2aXR5OiBhY3Rpdml0eSxcbiAgICAgIH0pXG4gICAgfVxuICAgIHJldHVybiBhY3Rpdml0eVxuICB9XG5cbiAgcmV0dXJuIHsgcGhhc2U6ICdwcm9jZXNzaW5nJywgbWVzc2FnZTogdCgnY2hhdC5wcm9jZXNzaW5nJykgfVxufVxuXG5leHBvcnQgY29uc3QgQUNUSVZJVFlfTUVTU0FHRV9ST1RBVEVfTVMgPSAzMjAwXG5cbmNvbnN0IFJPVEFUQUJMRV9QSEFTRVM6IFN0cmVhbUFjdGl2aXR5UGhhc2VbXSA9IFsnZ2VuZXJhdGluZycsICd0aGlua2luZycsICdzZWFyY2gnLCAnZGVlcF9zZWFyY2gnLCAnYXR0YWNobWVudCddXG5cbmNvbnN0IGdldE1lc3NhZ2VLZXlzRm9yUGhhc2UgPSAocGhhc2U6IFN0cmVhbUFjdGl2aXR5UGhhc2UsIGF0dGFjaG1lbnRzQ291bnQgPSAwKTogcmVhZG9ubHkgc3RyaW5nW10gfCBudWxsID0+IHtcbiAgc3dpdGNoIChwaGFzZSkge1xuICAgIGNhc2UgJ2dlbmVyYXRpbmcnOlxuICAgICAgcmV0dXJuIEdFTkVSQVRJTkdfTUVTU0FHRV9LRVlTXG4gICAgY2FzZSAndGhpbmtpbmcnOlxuICAgICAgcmV0dXJuIFRISU5LSU5HX01FU1NBR0VfS0VZU1xuICAgIGNhc2UgJ3NlYXJjaCc6XG4gICAgICByZXR1cm4gU0VBUkNIX01FU1NBR0VfS0VZU1xuICAgIGNhc2UgJ2RlZXBfc2VhcmNoJzpcbiAgICAgIHJldHVybiBERUVQX1NFQVJDSF9NRVNTQUdFX0tFWVNcbiAgICBjYXNlICdhdHRhY2htZW50JzpcbiAgICAgIHJldHVybiBhdHRhY2htZW50c0NvdW50ID4gMSA/IEFUVEFDSE1FTlRfTUVTU0FHRV9LRVlTX1BMVVJBTCA6IEFUVEFDSE1FTlRfTUVTU0FHRV9LRVlTXG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBudWxsXG4gIH1cbn1cblxuZXhwb3J0IGNvbnN0IGdldFN0cmVhbUFjdGl2aXR5TWVzc2FnZUF0SW5kZXggPSAoXG4gIHBoYXNlOiBTdHJlYW1BY3Rpdml0eVBoYXNlLFxuICBpbmRleDogbnVtYmVyLFxuICB0OiBUcmFuc2xhdGVGbixcbiAgYXR0YWNobWVudHNDb3VudCA9IDBcbik6IHN0cmluZyA9PiB7XG4gIGlmIChwaGFzZSA9PT0gJ3dyaXRpbmcnKSB7XG4gICAgcmV0dXJuIHQoV1JJVElOR19BQ1RJVklUWV9NRVNTQUdFX0tFWSlcbiAgfVxuXG4gIGNvbnN0IGtleXMgPSBnZXRNZXNzYWdlS2V5c0ZvclBoYXNlKHBoYXNlLCBhdHRhY2htZW50c0NvdW50KVxuICBpZiAoIWtleXM/Lmxlbmd0aCkge1xuICAgIHJldHVybiAnJ1xuICB9XG5cbiAgY29uc3QgY2xhbXBlZEluZGV4ID0gTWF0aC5taW4oTWF0aC5tYXgoMCwgaW5kZXgpLCBrZXlzLmxlbmd0aCAtIDEpXG4gIHJldHVybiB0KGtleXNbY2xhbXBlZEluZGV4XSlcbn1cblxuZXhwb3J0IGNvbnN0IGdldFRoaW5raW5nTG9hZGluZ01lc3NhZ2UgPSAoaW5kZXg6IG51bWJlciwgdDogVHJhbnNsYXRlRm4pOiBzdHJpbmcgPT5cbiAgZ2V0U3RyZWFtQWN0aXZpdHlNZXNzYWdlQXRJbmRleCgndGhpbmtpbmcnLCBpbmRleCwgdClcblxuZXhwb3J0IGNvbnN0IGdldEdlbmVyYXRpbmdMb2FkaW5nTWVzc2FnZSA9IChpbmRleDogbnVtYmVyLCB0OiBUcmFuc2xhdGVGbik6IHN0cmluZyA9PlxuICBnZXRTdHJlYW1BY3Rpdml0eU1lc3NhZ2VBdEluZGV4KCdnZW5lcmF0aW5nJywgaW5kZXgsIHQpXG5cbmV4cG9ydCBjb25zdCBjYW5BZHZhbmNlU3RyZWFtQWN0aXZpdHlNZXNzYWdlID0gKHBoYXNlOiBTdHJlYW1BY3Rpdml0eVBoYXNlLCBjdXJyZW50SW5kZXg6IG51bWJlcik6IGJvb2xlYW4gPT4ge1xuICBjb25zdCBrZXlzID0gZ2V0TWVzc2FnZUtleXNGb3JQaGFzZShwaGFzZSlcbiAgaWYgKCFrZXlzKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cbiAgcmV0dXJuIGN1cnJlbnRJbmRleCA8IGtleXMubGVuZ3RoIC0gMVxufVxuXG5leHBvcnQgY29uc3QgYWR2YW5jZVN0cmVhbUFjdGl2aXR5TWVzc2FnZSA9IChcbiAgYWN0aXZpdHk6IFN0cmVhbUFjdGl2aXR5LFxuICBjdXJyZW50SW5kZXg6IG51bWJlcixcbiAgdDogVHJhbnNsYXRlRm5cbik6IHsgYWN0aXZpdHk6IFN0cmVhbUFjdGl2aXR5OyBuZXh0SW5kZXg6IG51bWJlciB9IHwgbnVsbCA9PiB7XG4gIGlmICghY2FuQWR2YW5jZVN0cmVhbUFjdGl2aXR5TWVzc2FnZShhY3Rpdml0eS5waGFzZSwgY3VycmVudEluZGV4KSkge1xuICAgIHJldHVybiBudWxsXG4gIH1cblxuICBjb25zdCBuZXh0SW5kZXggPSBjdXJyZW50SW5kZXggKyAxXG4gIHJldHVybiB7XG4gICAgYWN0aXZpdHk6IHtcbiAgICAgIHBoYXNlOiBhY3Rpdml0eS5waGFzZSxcbiAgICAgIG1lc3NhZ2U6IGdldFN0cmVhbUFjdGl2aXR5TWVzc2FnZUF0SW5kZXgoYWN0aXZpdHkucGhhc2UsIG5leHRJbmRleCwgdCwgYWN0aXZpdHkuYXR0YWNobWVudHNDb3VudCksXG4gICAgICAuLi4oYWN0aXZpdHkuYXR0YWNobWVudHNDb3VudCAhPSBudWxsICYmIHsgYXR0YWNobWVudHNDb3VudDogYWN0aXZpdHkuYXR0YWNobWVudHNDb3VudCB9KSxcbiAgICB9LFxuICAgIG5leHRJbmRleCxcbiAgfVxufVxuXG5leHBvcnQgY29uc3QgY2FuUm90YXRlU3RyZWFtQWN0aXZpdHlQaGFzZSA9IChwaGFzZTogU3RyZWFtQWN0aXZpdHlQaGFzZSk6IGJvb2xlYW4gPT4gUk9UQVRBQkxFX1BIQVNFUy5pbmNsdWRlcyhwaGFzZSlcblxuZXhwb3J0IGNvbnN0IGdldFdyaXRpbmdTdHJlYW1BY3Rpdml0eSA9ICh0OiBUcmFuc2xhdGVGbik6IFN0cmVhbUFjdGl2aXR5ID0+ICh7XG4gIHBoYXNlOiAnd3JpdGluZycsXG4gIG1lc3NhZ2U6IHQoV1JJVElOR19BQ1RJVklUWV9NRVNTQUdFX0tFWSksXG59KVxuXG5leHBvcnQgY29uc3QgZ2V0SW5pdGlhbFN0cmVhbUFjdGl2aXR5ID0gKFxuICB0OiBUcmFuc2xhdGVGbixcbiAgb3B0aW9uczoge1xuICAgIGlzV2ViU2VhcmNoQWN0aXZlPzogYm9vbGVhblxuICAgIGlzRGVlcFNlYXJjaEFjdGl2ZT86IGJvb2xlYW5cbiAgICBoYXNBdHRhY2htZW50cz86IGJvb2xlYW5cbiAgICBhdHRhY2htZW50c0NvdW50PzogbnVtYmVyXG4gIH1cbik6IFN0cmVhbUFjdGl2aXR5ID0+IHtcbiAgaWYgKG9wdGlvbnMuaXNXZWJTZWFyY2hBY3RpdmUpIHtcbiAgICByZXR1cm4geyBwaGFzZTogJ3NlYXJjaCcsIG1lc3NhZ2U6IHQoU0VBUkNIX01FU1NBR0VfS0VZU1swXSkgfVxuICB9XG4gIGlmIChvcHRpb25zLmlzRGVlcFNlYXJjaEFjdGl2ZSkge1xuICAgIHJldHVybiB7IHBoYXNlOiAnZGVlcF9zZWFyY2gnLCBtZXNzYWdlOiB0KERFRVBfU0VBUkNIX01FU1NBR0VfS0VZU1swXSkgfVxuICB9XG4gIGlmIChvcHRpb25zLmhhc0F0dGFjaG1lbnRzKSB7XG4gICAgY29uc3QgYXR0YWNobWVudHNDb3VudCA9IG9wdGlvbnMuYXR0YWNobWVudHNDb3VudCA/PyAwXG4gICAgcmV0dXJuIHtcbiAgICAgIHBoYXNlOiAnYXR0YWNobWVudCcsXG4gICAgICBtZXNzYWdlOiBnZXRTdHJlYW1BY3Rpdml0eU1lc3NhZ2VBdEluZGV4KCdhdHRhY2htZW50JywgMCwgdCwgYXR0YWNobWVudHNDb3VudCksXG4gICAgICBhdHRhY2htZW50c0NvdW50LFxuICAgIH1cbiAgfVxuICByZXR1cm4geyBwaGFzZTogJ2dlbmVyYXRpbmcnLCBtZXNzYWdlOiB0KEdFTkVSQVRJTkdfTUVTU0FHRV9LRVlTWzBdKSB9XG59XG5cbmV4cG9ydCBjb25zdCByZXNvbHZlU3RyZWFtTG9hZGluZ0Rpc3BsYXkgPSAocGFyYW1zOiB7XG4gIHN0cmVhbUFjdGl2aXR5OiBTdHJlYW1BY3Rpdml0eSB8IG51bGxcbiAgbG9hZGluZ01lc3NhZ2U6IHN0cmluZyB8IG51bGxcbiAgYWN0aXZlTG9hZGluZ3M6IFJlY29yZDxzdHJpbmcsIHN0cmluZz5cbiAgd2FpdGluZ1Jlc3BvbnNlOiBib29sZWFuXG4gIGlzV2ViU2VhcmNoQWN0aXZlOiBib29sZWFuXG4gIGlzRGVlcFNlYXJjaEFjdGl2ZTogYm9vbGVhblxuICBoYXNBdHRhY2htZW50czogYm9vbGVhblxuICBhdHRhY2htZW50c0NvdW50PzogbnVtYmVyXG4gIHQ6IFRyYW5zbGF0ZUZuXG59KTogU3RyZWFtQWN0aXZpdHkgfCBudWxsID0+IHtcbiAgaWYgKHBhcmFtcy5zdHJlYW1BY3Rpdml0eSkge1xuICAgIHJldHVybiBwYXJhbXMuc3RyZWFtQWN0aXZpdHlcbiAgfVxuXG4gIGNvbnN0IGFjdGl2ZUtleXMgPSBPYmplY3Qua2V5cyhwYXJhbXMuYWN0aXZlTG9hZGluZ3MpXG4gIGlmIChhY3RpdmVLZXlzLmxlbmd0aCA+IDApIHtcbiAgICBjb25zdCBmaXJzdEtleSA9IGFjdGl2ZUtleXNbMF1cbiAgICBjb25zdCByYXcgPSBwYXJhbXMuYWN0aXZlTG9hZGluZ3NbZmlyc3RLZXldXG4gICAgaWYgKHJhdyAmJiByYXcgIT09IHBhcmFtcy50KCdjaGF0LnByb2Nlc3NpbmcnKSkge1xuICAgICAgY29uc3QgaGl0bFRvb2wgPSByZXNvbHZlSGl0bFRvb2xGcm9tTm9kZU1lc3NhZ2UocmF3KVxuICAgICAgaWYgKGhpdGxUb29sKSB7XG4gICAgICAgIHJldHVybiBtYXBIaXRsVG9vbE5hbWVUb1N0cmVhbUFjdGl2aXR5KGhpdGxUb29sLCBwYXJhbXMudClcbiAgICAgIH1cblxuICAgICAgY29uc3QgdHJpbW1lZCA9IHJhdy50cmltKClcbiAgICAgIGlmICh0cmltbWVkICYmICFpc0dlbmVyaWNSZXN1bWVOb2RlTWVzc2FnZSh0cmltbWVkKSkge1xuICAgICAgICByZXR1cm4geyBwaGFzZTogJ2FjdGlvbicsIG1lc3NhZ2U6IHRyaW1tZWQgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gbWFwTm9kZU1lc3NhZ2VUb1N0cmVhbUFjdGl2aXR5KHJhdywgcGFyYW1zLnQsIHsgdXNlUmVzdW1pbmdGYWxsYmFjazogdHJ1ZSB9KVxuICAgIH1cbiAgICByZXR1cm4geyBwaGFzZTogJ3Byb2Nlc3NpbmcnLCBtZXNzYWdlOiBwYXJhbXMudCgnY2hhdC5wcm9jZXNzaW5nJykgfVxuICB9XG5cbiAgaWYgKHBhcmFtcy5sb2FkaW5nTWVzc2FnZSkge1xuICAgIGlmIChcbiAgICAgIHBhcmFtcy5sb2FkaW5nTWVzc2FnZSA9PT0gcGFyYW1zLnQoJ2NoYXQud3JpdGluZycpIHx8XG4gICAgICBwYXJhbXMubG9hZGluZ01lc3NhZ2UgPT09IHBhcmFtcy50KFdSSVRJTkdfQUNUSVZJVFlfTUVTU0FHRV9LRVkpXG4gICAgKSB7XG4gICAgICByZXR1cm4gZ2V0V3JpdGluZ1N0cmVhbUFjdGl2aXR5KHBhcmFtcy50KVxuICAgIH1cbiAgICBpZiAocGFyYW1zLmxvYWRpbmdNZXNzYWdlID09PSBwYXJhbXMudCgnY2hhdC5nZW5lcmF0aW5nJykpIHtcbiAgICAgIHJldHVybiB7IHBoYXNlOiAnZ2VuZXJhdGluZycsIG1lc3NhZ2U6IHBhcmFtcy5sb2FkaW5nTWVzc2FnZSB9XG4gICAgfVxuICAgIGlmIChcbiAgICAgIHBhcmFtcy5sb2FkaW5nTWVzc2FnZSA9PT0gcGFyYW1zLnQoJ2NoYXQuZ2VuZXJhdGluZ1dlYlNlYXJjaCcpIHx8XG4gICAgICBwYXJhbXMubG9hZGluZ01lc3NhZ2UgPT09IHBhcmFtcy50KCdjaGF0LmdlbmVyYXRpbmdEZWVwU2VhcmNoJykgfHxcbiAgICAgIHBhcmFtcy5sb2FkaW5nTWVzc2FnZSA9PT0gcGFyYW1zLnQoJ2NoYXQuZ2VuZXJhdGluZ0F0dGFjaG1lbnQnKVxuICAgICkge1xuICAgICAgcmV0dXJuIGdldEluaXRpYWxTdHJlYW1BY3Rpdml0eShwYXJhbXMudCwge1xuICAgICAgICBpc1dlYlNlYXJjaEFjdGl2ZTogcGFyYW1zLmxvYWRpbmdNZXNzYWdlID09PSBwYXJhbXMudCgnY2hhdC5nZW5lcmF0aW5nV2ViU2VhcmNoJyksXG4gICAgICAgIGlzRGVlcFNlYXJjaEFjdGl2ZTogcGFyYW1zLmxvYWRpbmdNZXNzYWdlID09PSBwYXJhbXMudCgnY2hhdC5nZW5lcmF0aW5nRGVlcFNlYXJjaCcpLFxuICAgICAgICBoYXNBdHRhY2htZW50czogcGFyYW1zLmxvYWRpbmdNZXNzYWdlID09PSBwYXJhbXMudCgnY2hhdC5nZW5lcmF0aW5nQXR0YWNobWVudCcpLFxuICAgICAgICBhdHRhY2htZW50c0NvdW50OiBwYXJhbXMuYXR0YWNobWVudHNDb3VudCxcbiAgICAgIH0pXG4gICAgfVxuICAgIHJldHVybiB7IHBoYXNlOiAnYWN0aW9uJywgbWVzc2FnZTogcGFyYW1zLmxvYWRpbmdNZXNzYWdlIH1cbiAgfVxuXG4gIGlmIChwYXJhbXMud2FpdGluZ1Jlc3BvbnNlKSB7XG4gICAgcmV0dXJuIGdldEluaXRpYWxTdHJlYW1BY3Rpdml0eShwYXJhbXMudCwge1xuICAgICAgaXNXZWJTZWFyY2hBY3RpdmU6IHBhcmFtcy5pc1dlYlNlYXJjaEFjdGl2ZSxcbiAgICAgIGlzRGVlcFNlYXJjaEFjdGl2ZTogcGFyYW1zLmlzRGVlcFNlYXJjaEFjdGl2ZSxcbiAgICAgIGhhc0F0dGFjaG1lbnRzOiBwYXJhbXMuaGFzQXR0YWNobWVudHMsXG4gICAgICBhdHRhY2htZW50c0NvdW50OiBwYXJhbXMuYXR0YWNobWVudHNDb3VudCxcbiAgICB9KVxuICB9XG5cbiAgcmV0dXJuIG51bGxcbn1cblxuZXhwb3J0IGNvbnN0IGlzU3RyZWFtaW5nUGxhY2Vob2xkZXJNZXNzYWdlSWQgPSAobWVzc2FnZUlkOiBzdHJpbmcgfCB1bmRlZmluZWQpOiBib29sZWFuID0+XG4gIHR5cGVvZiBtZXNzYWdlSWQgPT09ICdzdHJpbmcnICYmIG1lc3NhZ2VJZC5pbmNsdWRlcygnLXN0cmVhbWluZycpXG4iXSwibWFwcGluZ3MiOiI7Ozs7QUFFQSxTQUFTQSxxQkFBcUIsUUFBUSxpQkFBaUI7QUFDdkQsU0FBU0Msc0JBQXNCLFFBQVEsbUJBQW1CO0FBSTFELElBQU1DLHFCQUFxQixHQUFHLENBQzVCLGtDQUFrQyxFQUNsQyxrQ0FBa0MsRUFDbEMsaUNBQWlDLENBQ3pCO0FBRVYsSUFBTUMsdUJBQXVCLEdBQUcsQ0FDOUIsc0NBQXNDLEVBQ3RDLHNDQUFzQyxFQUN0QyxvQ0FBb0MsQ0FDNUI7QUFFVixJQUFNQyxtQkFBbUIsR0FBRyxDQUFDLCtCQUErQixFQUFFLGtDQUFrQyxDQUFVO0FBRTFHLElBQU1DLHdCQUF3QixHQUFHLENBQy9CLG9DQUFvQyxFQUNwQyx3Q0FBd0MsQ0FDaEM7QUFFVixJQUFNQyx1QkFBdUIsR0FBRyxDQUFDLGtDQUFrQyxFQUFFLHFDQUFxQyxDQUFVO0FBRXBILElBQU1DLDhCQUE4QixHQUFHLENBQ3JDLHdDQUF3QyxFQUN4QywyQ0FBMkMsQ0FDbkM7QUFFVixPQUFPLElBQU1DLDRCQUE0QixHQUFHLGlDQUEwQzs7QUFFdEY7QUFDQSxJQUFNQyx1QkFBK0MsR0FBRztFQUN0REMsV0FBVyxFQUFFLDRCQUE0QjtFQUN6Q0MsVUFBVSxFQUFFLDRCQUE0QjtFQUN4Q0Msa0JBQWtCLEVBQUUsa0NBQWtDO0VBQ3REQyxZQUFZLEVBQUUsNkJBQTZCO0VBQzNDQyxVQUFVLEVBQUUsNEJBQTRCO0VBQ3hDQyxTQUFTLEVBQUUsMkJBQTJCO0VBQ3RDQyxnQkFBZ0IsRUFBRSxpQ0FBaUM7RUFDbkRDLFdBQVcsRUFBRSw0QkFBNEI7RUFDekNDLGtCQUFrQixFQUFFLGtDQUFrQztFQUN0REMsV0FBVyxFQUFFLDZCQUE2QjtFQUMxQ0MsYUFBYSxFQUFFLCtCQUErQjtFQUM5Q0MsaUJBQWlCLEVBQUUsOEJBQThCO0VBQ2pEQyxnQkFBZ0IsRUFBRSxnQ0FBZ0M7RUFDbERDLHNCQUFzQixFQUFFLHNDQUFzQztFQUM5REMsa0JBQWtCLEVBQUUsbUNBQW1DO0VBQ3ZEQyxXQUFXLEVBQUUsNEJBQTRCO0VBQ3pDQyxnQkFBZ0IsRUFBRSxpQ0FBaUM7RUFDbkRDLG1CQUFtQixFQUFFLDZCQUE2QjtFQUNsREMsc0JBQXNCLEVBQUUsc0NBQXNDO0VBQzlEQyxpQkFBaUIsRUFBRSxrQ0FBa0M7RUFDckRDLHFCQUFxQixFQUFFLHFDQUFxQztFQUM1REMsZ0JBQWdCLEVBQUUsZ0NBQWdDO0VBQ2xEQyxpQkFBaUIsRUFBRSw2QkFBNkI7RUFDaERDLGlCQUFpQixFQUFFLHdDQUF3QztFQUMzREMsYUFBYSxFQUFFLDhCQUE4QjtFQUM3Q0MsYUFBYSxFQUFFO0FBQ2pCLENBQUM7QUFFRCxJQUFNQyw4QkFBOEIsR0FBR0MsTUFBTSxDQUFDQyxJQUFJLENBQUM3Qix1QkFBdUIsQ0FBQyxDQUFDOEIsSUFBSSxDQUFDLFVBQUNDLENBQUMsRUFBRUMsQ0FBQztFQUFBLE9BQUtBLENBQUMsQ0FBQ0MsTUFBTSxHQUFHRixDQUFDLENBQUNFLE1BQU07QUFBQSxFQUFDOztBQUUvRztBQUNBLElBQU1DLDBCQUEwQixHQUFHLFNBQTdCQSwwQkFBMEJBLENBQUlDLE9BQWUsRUFBYztFQUMvRCxJQUFNQyxVQUFVLEdBQUdELE9BQU8sQ0FBQ0UsSUFBSSxDQUFDLENBQUMsQ0FBQ0MsV0FBVyxDQUFDLENBQUM7RUFDL0MsT0FDRUYsVUFBVSxDQUFDRyxVQUFVLENBQUMsNEJBQTRCLENBQUMsSUFDbkRILFVBQVUsQ0FBQ0csVUFBVSxDQUFDLDJCQUEyQixDQUFDLElBQ2xESCxVQUFVLENBQUNHLFVBQVUsQ0FBQywwQkFBMEIsQ0FBQztBQUVyRCxDQUFDO0FBRUQsT0FBTyxJQUFNQywrQkFBK0IsR0FBRyxTQUFsQ0EsK0JBQStCQSxDQUMxQ0MsUUFBZ0IsRUFDaEJDLENBQWMsRUFDZEMsT0FBMkMsRUFDeEI7RUFDbkIsSUFBTVAsVUFBVSxHQUFHN0MscUJBQXFCLENBQUNrRCxRQUFRLENBQUM7RUFDbEQsSUFBTUcsR0FBRyxHQUFHNUMsdUJBQXVCLENBQUNvQyxVQUFVLENBQUM7RUFDL0MsSUFBSVEsR0FBRyxFQUFFO0lBQ1AsT0FBTztNQUFFQyxLQUFLLEVBQUUsUUFBUTtNQUFFVixPQUFPLEVBQUVPLENBQUMsQ0FBQ0UsR0FBRztJQUFFLENBQUM7RUFDN0M7RUFDQSxJQUFJRCxPQUFPLGFBQVBBLE9BQU8sZUFBUEEsT0FBTyxDQUFFRyxtQkFBbUIsRUFBRTtJQUNoQyxPQUFPO01BQUVELEtBQUssRUFBRSxRQUFRO01BQUVWLE9BQU8sRUFBRU8sQ0FBQyxDQUFDLDhCQUE4QjtJQUFFLENBQUM7RUFDeEU7RUFDQSxPQUFPO0lBQUVHLEtBQUssRUFBRSxRQUFRO0lBQUVWLE9BQU8sRUFBRU8sQ0FBQyxDQUFDLHNCQUFzQjtFQUFFLENBQUM7QUFDaEUsQ0FBQztBQUVELElBQU1LLDhCQUE4QixHQUFHLFNBQWpDQSw4QkFBOEJBLENBQUlDLFdBQW1CLEVBQW9CO0VBQzdFLElBQU1aLFVBQVUsR0FBR1ksV0FBVyxDQUFDVixXQUFXLENBQUMsQ0FBQyxDQUFDRCxJQUFJLENBQUMsQ0FBQztFQUNuRCxJQUFJLENBQUNELFVBQVUsRUFBRSxPQUFPLElBQUk7RUFFNUIsSUFBSXBDLHVCQUF1QixDQUFDb0MsVUFBVSxDQUFDLEVBQUU7SUFDdkMsT0FBT0EsVUFBVTtFQUNuQjtFQUVBLElBQU1hLFVBQVUsR0FBRzFELHFCQUFxQixDQUFDNkMsVUFBVSxDQUFDYyxPQUFPLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0VBQ3pFLElBQUlsRCx1QkFBdUIsQ0FBQ2lELFVBQVUsQ0FBQyxFQUFFO0lBQ3ZDLE9BQU9BLFVBQVU7RUFDbkI7RUFFQSxJQUFNRSxXQUFXLEdBQUd4Qiw4QkFBOEIsQ0FBQ3lCLElBQUksQ0FBQyxVQUFBWCxRQUFRO0lBQUEsT0FBSUwsVUFBVSxDQUFDaUIsUUFBUSxDQUFDWixRQUFRLENBQUM7RUFBQSxFQUFDO0VBQ2xHLE9BQU9VLFdBQVcsYUFBWEEsV0FBVyxjQUFYQSxXQUFXLEdBQUksSUFBSTtBQUM1QixDQUFDO0FBRUQsT0FBTyxJQUFNRyw4QkFBOEIsR0FBRyxTQUFqQ0EsOEJBQThCQSxDQUN6Q04sV0FBbUIsRUFDbkJOLENBQWMsRUFDZEMsT0FBMkMsRUFDeEI7RUFDbkIsSUFBTVAsVUFBVSxHQUFHWSxXQUFXLENBQUNWLFdBQVcsQ0FBQyxDQUFDO0VBRTVDLElBQU1pQixRQUFRLEdBQUdSLDhCQUE4QixDQUFDQyxXQUFXLENBQUM7RUFDNUQsSUFBSU8sUUFBUSxFQUFFO0lBQ1osT0FBT2YsK0JBQStCLENBQUNlLFFBQVEsRUFBRWIsQ0FBQyxFQUFFQyxPQUFPLENBQUM7RUFDOUQ7RUFFQSxJQUNFUCxVQUFVLENBQUNpQixRQUFRLENBQUMsMEJBQTBCLENBQUMsSUFDL0NqQixVQUFVLENBQUNpQixRQUFRLENBQUMsbUJBQW1CLENBQUMsSUFDeENqQixVQUFVLENBQUNpQixRQUFRLENBQUMsaUJBQWlCLENBQUMsRUFDdEM7SUFDQSxPQUFPO01BQUVSLEtBQUssRUFBRSxRQUFRO01BQUVWLE9BQU8sRUFBRU8sQ0FBQyxDQUFDLDhCQUE4QjtJQUFFLENBQUM7RUFDeEU7RUFDQSxJQUNFTixVQUFVLENBQUNpQixRQUFRLENBQUMsUUFBUSxDQUFDLElBQzdCakIsVUFBVSxDQUFDaUIsUUFBUSxDQUFDLFlBQVksQ0FBQyxJQUNqQ2pCLFVBQVUsQ0FBQ2lCLFFBQVEsQ0FBQyxvQkFBb0IsQ0FBQyxJQUN6Q2pCLFVBQVUsQ0FBQ2lCLFFBQVEsQ0FBQyxtQkFBbUIsQ0FBQyxFQUN4QztJQUNBLE9BQU87TUFBRVIsS0FBSyxFQUFFLFFBQVE7TUFBRVYsT0FBTyxFQUFFTyxDQUFDLENBQUMvQyxtQkFBbUIsQ0FBQyxDQUFDLENBQUM7SUFBRSxDQUFDO0VBQ2hFO0VBRUEsSUFBTTZELGNBQWMsR0FBR1IsV0FBVyxDQUFDWCxJQUFJLENBQUMsQ0FBQztFQUN6QyxJQUFJbUIsY0FBYyxJQUFJLENBQUN0QiwwQkFBMEIsQ0FBQ3NCLGNBQWMsQ0FBQyxFQUFFO0lBQ2pFLE9BQU87TUFBRVgsS0FBSyxFQUFFLFFBQVE7TUFBRVYsT0FBTyxFQUFFcUI7SUFBZSxDQUFDO0VBQ3JEO0VBRUEsSUFBSXRCLDBCQUEwQixDQUFDc0IsY0FBYyxDQUFDLElBQUliLE9BQU8sYUFBUEEsT0FBTyxlQUFQQSxPQUFPLENBQUVHLG1CQUFtQixFQUFFO0lBQzlFLE9BQU87TUFBRUQsS0FBSyxFQUFFLFFBQVE7TUFBRVYsT0FBTyxFQUFFTyxDQUFDLENBQUMsOEJBQThCO0lBQUUsQ0FBQztFQUN4RTtFQUNBLE9BQU87SUFBRUcsS0FBSyxFQUFFLFFBQVE7SUFBRVYsT0FBTyxFQUFFTyxDQUFDLENBQUMsc0JBQXNCO0VBQUUsQ0FBQztBQUNoRSxDQUFDO0FBVUQsSUFBTWUsOEJBQThCLEdBQUcsU0FBakNBLDhCQUE4QkEsQ0FDbENDLE9BQWdELEVBQ2hEQyxRQUFpQixFQUNHO0VBQUEsSUFBQUMsSUFBQSxFQUFBQyxxQkFBQSxFQUFBQyxpQkFBQSxFQUFBQyxrQkFBQTtFQUNwQixJQUFNQyxPQUFPLElBQUFKLElBQUEsSUFBQUMscUJBQUEsR0FBR0gsT0FBTyxhQUFQQSxPQUFPLHVCQUFQQSxPQUFPLENBQUVPLGNBQWMsY0FBQUoscUJBQUEsY0FBQUEscUJBQUEsR0FBSUgsT0FBTyxhQUFQQSxPQUFPLGdCQUFBSSxpQkFBQSxHQUFQSixPQUFPLENBQUVRLFFBQVEsY0FBQUosaUJBQUEsdUJBQWpCQSxpQkFBQSxDQUFtQkssZUFBZSxjQUFBUCxJQUFBLGNBQUFBLElBQUEsR0FBSSxFQUFFO0VBQ25GLElBQUksQ0FBQ0ksT0FBTyxDQUFDL0IsTUFBTSxFQUFFLE9BQU8sRUFBRTtFQUU5QixJQUFJMEIsUUFBUSxFQUFFO0lBQ1osSUFBTVMsU0FBUyxHQUFHSixPQUFPLENBQUNLLE1BQU0sQ0FBQyxVQUFBQyxNQUFNO01BQUEsT0FBSUEsTUFBTSxDQUFDQyxTQUFTLEtBQUtaLFFBQVE7SUFBQSxFQUFDO0lBQ3pFLElBQUlTLFNBQVMsQ0FBQ25DLE1BQU0sRUFBRSxPQUFPbUMsU0FBUztFQUN4QztFQUVBLElBQUlWLE9BQU8sYUFBUEEsT0FBTyxnQkFBQUssa0JBQUEsR0FBUEwsT0FBTyxDQUFFYyxTQUFTLGNBQUFULGtCQUFBLGVBQWxCQSxrQkFBQSxDQUFvQjlCLE1BQU0sRUFBRTtJQUM5QixPQUFPK0IsT0FBTyxDQUFDSyxNQUFNLENBQUMsVUFBQUMsTUFBTTtNQUFBLElBQUFHLG1CQUFBO01BQUEsUUFBQUEsbUJBQUEsR0FBSWYsT0FBTyxDQUFDYyxTQUFTLGNBQUFDLG1CQUFBLHVCQUFqQkEsbUJBQUEsQ0FBbUJwQixRQUFRLENBQUNpQixNQUFNLENBQUNDLFNBQVMsQ0FBQztJQUFBLEVBQUM7RUFDaEY7RUFFQSxPQUFPUCxPQUFPO0FBQ2hCLENBQUM7QUFFRCxJQUFNVSw2QkFBNkIsR0FBRyxTQUFoQ0EsNkJBQTZCQSxDQUFJQyxPQUF3QjtFQUFBLE9BQUFDLGtCQUFBLENBQzFELElBQUlDLEdBQUcsQ0FBQ0YsT0FBTyxDQUFDRyxHQUFHLENBQUMsVUFBQVIsTUFBTTtJQUFBLE9BQUkvRSxxQkFBcUIsQ0FBQytFLE1BQU0sQ0FBQ1MsU0FBUyxDQUFDO0VBQUEsRUFBQyxDQUFDVixNQUFNLENBQUNXLE9BQU8sQ0FBQyxDQUFDO0FBQUEsQ0FDM0Y7O0FBRUQ7QUFDQSxPQUFPLElBQU1DLDZCQUE2QixHQUFHLFNBQWhDQSw2QkFBNkJBLENBQ3hDakMsV0FBbUIsRUFDbkJOLENBQWMsRUFDZGdCLE9BQXFDLEVBQ3JDQyxRQUFpQixFQUNqQmhCLE9BQStELEVBQzVDO0VBQ25CLElBQU11QyxnQkFBZ0IsR0FBR3pCLDhCQUE4QixDQUFDQyxPQUFPLEVBQUVDLFFBQVEsQ0FBQztFQUMxRSxJQUFNd0IsYUFBYSxHQUFHVCw2QkFBNkIsQ0FBQ1EsZ0JBQWdCLENBQUM7RUFFckUsSUFBSXZDLE9BQU8sYUFBUEEsT0FBTyxlQUFQQSxPQUFPLENBQUV5QyxTQUFTLEVBQUU7SUFDdEI1RixzQkFBc0IsQ0FBQ21ELE9BQU8sQ0FBQ3lDLFNBQVMsRUFBRTtNQUN4Q0MsU0FBUyxFQUFFM0IsT0FBTyxhQUFQQSxPQUFPLHVCQUFQQSxPQUFPLENBQUUyQixTQUFTO01BQzdCQyxXQUFXLEVBQUU1QixPQUFPLGFBQVBBLE9BQU8sdUJBQVBBLE9BQU8sQ0FBRTRCLFdBQVc7TUFDakMzQixRQUFRLEVBQVJBLFFBQVE7TUFDUmEsU0FBUyxFQUFFZCxPQUFPLGFBQVBBLE9BQU8sdUJBQVBBLE9BQU8sQ0FBRWMsU0FBUztNQUM3QnhCLFdBQVcsRUFBWEEsV0FBVztNQUNYaUIsY0FBYyxFQUFFaUIsZ0JBQWdCO01BQ2hDQyxhQUFhLEVBQWJBO0lBQ0YsQ0FBQyxDQUFDO0VBQ0o7RUFFQSxJQUFNSSxrQkFBa0IsR0FBR3ZDLFdBQVcsQ0FBQ1gsSUFBSSxDQUFDLENBQUM7RUFDN0MsSUFBTW1ELHVCQUF1QixHQUMzQkQsa0JBQWtCLElBQUksQ0FBQ3JELDBCQUEwQixDQUFDcUQsa0JBQWtCLENBQUMsR0FDakU7SUFBRTFDLEtBQUssRUFBRSxRQUFpQjtJQUFFVixPQUFPLEVBQUVvRDtFQUFtQixDQUFDLEdBQ3pELElBQUk7RUFFVixJQUFNRSxhQUFhLEdBQUcsU0FBaEJBLGFBQWFBLENBQUlDLFFBQXdCLEVBQUs7SUFDbEQsSUFBSS9DLE9BQU8sYUFBUEEsT0FBTyxlQUFQQSxPQUFPLENBQUV5QyxTQUFTLEVBQUU7TUFDdEI1RixzQkFBc0IsSUFBQW1HLE1BQUEsQ0FBSWhELE9BQU8sQ0FBQ3lDLFNBQVMsZ0JBQWE7UUFDdERELGFBQWEsRUFBYkEsYUFBYTtRQUNiUyxnQkFBZ0IsRUFBRUY7TUFDcEIsQ0FBQyxDQUFDO0lBQ0o7SUFDQSxPQUFPQSxRQUFRO0VBQ2pCLENBQUM7RUFFRCxJQUFJUCxhQUFhLENBQUNsRCxNQUFNLElBQUksQ0FBQyxFQUFFO0lBQzdCLElBQUl1RCx1QkFBdUIsRUFBRTtNQUMzQixPQUFPQyxhQUFhLENBQUNELHVCQUF1QixDQUFDO0lBQy9DO0lBQ0EsT0FBT0MsYUFBYSxDQUFDakQsK0JBQStCLENBQUMyQyxhQUFhLENBQUMsQ0FBQyxDQUFDLEVBQUV6QyxDQUFDLEVBQUVDLE9BQU8sQ0FBQyxDQUFDO0VBQ3JGO0VBRUEsT0FBTzhDLGFBQWEsQ0FBQ25DLDhCQUE4QixDQUFDTixXQUFXLEVBQUVOLENBQUMsRUFBRUMsT0FBTyxDQUFDLENBQUM7QUFDL0UsQ0FBQztBQUVELE9BQU8sSUFBTWtELGdDQUFnQyxHQUFHLFNBQW5DQSxnQ0FBZ0NBLENBQzNDbkQsQ0FBYyxFQUNkZ0IsT0FBcUMsRUFDckNmLE9BQWdDLEVBQ2I7RUFDbkIsSUFBTXNCLGNBQWMsR0FBR1IsOEJBQThCLENBQUNDLE9BQU8sQ0FBQztFQUM5RCxJQUFNeUIsYUFBYSxHQUFHVCw2QkFBNkIsQ0FBQ1QsY0FBYyxDQUFDO0VBRW5FLElBQUl0QixPQUFPLGFBQVBBLE9BQU8sZUFBUEEsT0FBTyxDQUFFeUMsU0FBUyxFQUFFO0lBQ3RCNUYsc0JBQXNCLENBQUNtRCxPQUFPLENBQUN5QyxTQUFTLEVBQUU7TUFDeENDLFNBQVMsRUFBRTNCLE9BQU8sYUFBUEEsT0FBTyx1QkFBUEEsT0FBTyxDQUFFMkIsU0FBUztNQUM3QkMsV0FBVyxFQUFFNUIsT0FBTyxhQUFQQSxPQUFPLHVCQUFQQSxPQUFPLENBQUU0QixXQUFXO01BQ2pDZCxTQUFTLEVBQUVkLE9BQU8sYUFBUEEsT0FBTyx1QkFBUEEsT0FBTyxDQUFFYyxTQUFTO01BQzdCUCxjQUFjLEVBQWRBLGNBQWM7TUFDZGtCLGFBQWEsRUFBYkE7SUFDRixDQUFDLENBQUM7RUFDSjtFQUVBLElBQUlBLGFBQWEsQ0FBQ2xELE1BQU0sSUFBSSxDQUFDLEVBQUU7SUFDN0IsSUFBTXlELFFBQVEsR0FBR2xELCtCQUErQixDQUFDMkMsYUFBYSxDQUFDLENBQUMsQ0FBQyxFQUFFekMsQ0FBQyxFQUFFO01BQUVJLG1CQUFtQixFQUFFO0lBQUssQ0FBQyxDQUFDO0lBQ3BHLElBQUlILE9BQU8sYUFBUEEsT0FBTyxlQUFQQSxPQUFPLENBQUV5QyxTQUFTLEVBQUU7TUFDdEI1RixzQkFBc0IsSUFBQW1HLE1BQUEsQ0FBSWhELE9BQU8sQ0FBQ3lDLFNBQVMsZ0JBQWE7UUFDdERELGFBQWEsRUFBYkEsYUFBYTtRQUNiUyxnQkFBZ0IsRUFBRUY7TUFDcEIsQ0FBQyxDQUFDO0lBQ0o7SUFDQSxPQUFPQSxRQUFRO0VBQ2pCO0VBRUEsT0FBTztJQUFFN0MsS0FBSyxFQUFFLFlBQVk7SUFBRVYsT0FBTyxFQUFFTyxDQUFDLENBQUMsaUJBQWlCO0VBQUUsQ0FBQztBQUMvRCxDQUFDO0FBRUQsT0FBTyxJQUFNb0QsMEJBQTBCLEdBQUcsSUFBSTtBQUU5QyxJQUFNQyxnQkFBdUMsR0FBRyxDQUFDLFlBQVksRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLGFBQWEsRUFBRSxZQUFZLENBQUM7QUFFakgsSUFBTUMsc0JBQXNCLEdBQUcsU0FBekJBLHNCQUFzQkEsQ0FBSW5ELEtBQTBCLEVBQXFEO0VBQUEsSUFBbkRvRCxnQkFBZ0IsR0FBQUMsU0FBQSxDQUFBakUsTUFBQSxRQUFBaUUsU0FBQSxRQUFBQyxTQUFBLEdBQUFELFNBQUEsTUFBRyxDQUFDO0VBQzlFLFFBQVFyRCxLQUFLO0lBQ1gsS0FBSyxZQUFZO01BQ2YsT0FBT25ELHVCQUF1QjtJQUNoQyxLQUFLLFVBQVU7TUFDYixPQUFPRCxxQkFBcUI7SUFDOUIsS0FBSyxRQUFRO01BQ1gsT0FBT0UsbUJBQW1CO0lBQzVCLEtBQUssYUFBYTtNQUNoQixPQUFPQyx3QkFBd0I7SUFDakMsS0FBSyxZQUFZO01BQ2YsT0FBT3FHLGdCQUFnQixHQUFHLENBQUMsR0FBR25HLDhCQUE4QixHQUFHRCx1QkFBdUI7SUFDeEY7TUFDRSxPQUFPLElBQUk7RUFDZjtBQUNGLENBQUM7QUFFRCxPQUFPLElBQU11RywrQkFBK0IsR0FBRyxTQUFsQ0EsK0JBQStCQSxDQUMxQ3ZELEtBQTBCLEVBQzFCd0QsS0FBYSxFQUNiM0QsQ0FBYyxFQUVIO0VBQUEsSUFEWHVELGdCQUFnQixHQUFBQyxTQUFBLENBQUFqRSxNQUFBLFFBQUFpRSxTQUFBLFFBQUFDLFNBQUEsR0FBQUQsU0FBQSxNQUFHLENBQUM7RUFFcEIsSUFBSXJELEtBQUssS0FBSyxTQUFTLEVBQUU7SUFDdkIsT0FBT0gsQ0FBQyxDQUFDM0MsNEJBQTRCLENBQUM7RUFDeEM7RUFFQSxJQUFNOEIsSUFBSSxHQUFHbUUsc0JBQXNCLENBQUNuRCxLQUFLLEVBQUVvRCxnQkFBZ0IsQ0FBQztFQUM1RCxJQUFJLEVBQUNwRSxJQUFJLGFBQUpBLElBQUksZUFBSkEsSUFBSSxDQUFFSSxNQUFNLEdBQUU7SUFDakIsT0FBTyxFQUFFO0VBQ1g7RUFFQSxJQUFNcUUsWUFBWSxHQUFHQyxJQUFJLENBQUNDLEdBQUcsQ0FBQ0QsSUFBSSxDQUFDRSxHQUFHLENBQUMsQ0FBQyxFQUFFSixLQUFLLENBQUMsRUFBRXhFLElBQUksQ0FBQ0ksTUFBTSxHQUFHLENBQUMsQ0FBQztFQUNsRSxPQUFPUyxDQUFDLENBQUNiLElBQUksQ0FBQ3lFLFlBQVksQ0FBQyxDQUFDO0FBQzlCLENBQUM7QUFFRCxPQUFPLElBQU1JLHlCQUF5QixHQUFHLFNBQTVCQSx5QkFBeUJBLENBQUlMLEtBQWEsRUFBRTNELENBQWM7RUFBQSxPQUNyRTBELCtCQUErQixDQUFDLFVBQVUsRUFBRUMsS0FBSyxFQUFFM0QsQ0FBQyxDQUFDO0FBQUE7QUFFdkQsT0FBTyxJQUFNaUUsMkJBQTJCLEdBQUcsU0FBOUJBLDJCQUEyQkEsQ0FBSU4sS0FBYSxFQUFFM0QsQ0FBYztFQUFBLE9BQ3ZFMEQsK0JBQStCLENBQUMsWUFBWSxFQUFFQyxLQUFLLEVBQUUzRCxDQUFDLENBQUM7QUFBQTtBQUV6RCxPQUFPLElBQU1rRSwrQkFBK0IsR0FBRyxTQUFsQ0EsK0JBQStCQSxDQUFJL0QsS0FBMEIsRUFBRWdFLFlBQW9CLEVBQWM7RUFDNUcsSUFBTWhGLElBQUksR0FBR21FLHNCQUFzQixDQUFDbkQsS0FBSyxDQUFDO0VBQzFDLElBQUksQ0FBQ2hCLElBQUksRUFBRTtJQUNULE9BQU8sS0FBSztFQUNkO0VBQ0EsT0FBT2dGLFlBQVksR0FBR2hGLElBQUksQ0FBQ0ksTUFBTSxHQUFHLENBQUM7QUFDdkMsQ0FBQztBQUVELE9BQU8sSUFBTTZFLDRCQUE0QixHQUFHLFNBQS9CQSw0QkFBNEJBLENBQ3ZDcEIsUUFBd0IsRUFDeEJtQixZQUFvQixFQUNwQm5FLENBQWMsRUFDNkM7RUFDM0QsSUFBSSxDQUFDa0UsK0JBQStCLENBQUNsQixRQUFRLENBQUM3QyxLQUFLLEVBQUVnRSxZQUFZLENBQUMsRUFBRTtJQUNsRSxPQUFPLElBQUk7RUFDYjtFQUVBLElBQU1FLFNBQVMsR0FBR0YsWUFBWSxHQUFHLENBQUM7RUFDbEMsT0FBTztJQUNMbkIsUUFBUSxFQUFBc0IsYUFBQTtNQUNObkUsS0FBSyxFQUFFNkMsUUFBUSxDQUFDN0MsS0FBSztNQUNyQlYsT0FBTyxFQUFFaUUsK0JBQStCLENBQUNWLFFBQVEsQ0FBQzdDLEtBQUssRUFBRWtFLFNBQVMsRUFBRXJFLENBQUMsRUFBRWdELFFBQVEsQ0FBQ08sZ0JBQWdCO0lBQUMsR0FDN0ZQLFFBQVEsQ0FBQ08sZ0JBQWdCLElBQUksSUFBSSxJQUFJO01BQUVBLGdCQUFnQixFQUFFUCxRQUFRLENBQUNPO0lBQWlCLENBQUMsQ0FDekY7SUFDRGMsU0FBUyxFQUFUQTtFQUNGLENBQUM7QUFDSCxDQUFDO0FBRUQsT0FBTyxJQUFNRSw0QkFBNEIsR0FBRyxTQUEvQkEsNEJBQTRCQSxDQUFJcEUsS0FBMEI7RUFBQSxPQUFja0QsZ0JBQWdCLENBQUMxQyxRQUFRLENBQUNSLEtBQUssQ0FBQztBQUFBO0FBRXJILE9BQU8sSUFBTXFFLHdCQUF3QixHQUFHLFNBQTNCQSx3QkFBd0JBLENBQUl4RSxDQUFjO0VBQUEsT0FBc0I7SUFDM0VHLEtBQUssRUFBRSxTQUFTO0lBQ2hCVixPQUFPLEVBQUVPLENBQUMsQ0FBQzNDLDRCQUE0QjtFQUN6QyxDQUFDO0FBQUEsQ0FBQztBQUVGLE9BQU8sSUFBTW9ILHdCQUF3QixHQUFHLFNBQTNCQSx3QkFBd0JBLENBQ25DekUsQ0FBYyxFQUNkQyxPQUtDLEVBQ2tCO0VBQ25CLElBQUlBLE9BQU8sQ0FBQ3lFLGlCQUFpQixFQUFFO0lBQzdCLE9BQU87TUFBRXZFLEtBQUssRUFBRSxRQUFRO01BQUVWLE9BQU8sRUFBRU8sQ0FBQyxDQUFDL0MsbUJBQW1CLENBQUMsQ0FBQyxDQUFDO0lBQUUsQ0FBQztFQUNoRTtFQUNBLElBQUlnRCxPQUFPLENBQUMwRSxrQkFBa0IsRUFBRTtJQUM5QixPQUFPO01BQUV4RSxLQUFLLEVBQUUsYUFBYTtNQUFFVixPQUFPLEVBQUVPLENBQUMsQ0FBQzlDLHdCQUF3QixDQUFDLENBQUMsQ0FBQztJQUFFLENBQUM7RUFDMUU7RUFDQSxJQUFJK0MsT0FBTyxDQUFDMkUsY0FBYyxFQUFFO0lBQUEsSUFBQUMscUJBQUE7SUFDMUIsSUFBTXRCLGdCQUFnQixJQUFBc0IscUJBQUEsR0FBRzVFLE9BQU8sQ0FBQ3NELGdCQUFnQixjQUFBc0IscUJBQUEsY0FBQUEscUJBQUEsR0FBSSxDQUFDO0lBQ3RELE9BQU87TUFDTDFFLEtBQUssRUFBRSxZQUFZO01BQ25CVixPQUFPLEVBQUVpRSwrQkFBK0IsQ0FBQyxZQUFZLEVBQUUsQ0FBQyxFQUFFMUQsQ0FBQyxFQUFFdUQsZ0JBQWdCLENBQUM7TUFDOUVBLGdCQUFnQixFQUFoQkE7SUFDRixDQUFDO0VBQ0g7RUFDQSxPQUFPO0lBQUVwRCxLQUFLLEVBQUUsWUFBWTtJQUFFVixPQUFPLEVBQUVPLENBQUMsQ0FBQ2hELHVCQUF1QixDQUFDLENBQUMsQ0FBQztFQUFFLENBQUM7QUFDeEUsQ0FBQztBQUVELE9BQU8sSUFBTThILDJCQUEyQixHQUFHLFNBQTlCQSwyQkFBMkJBLENBQUlDLE1BVTNDLEVBQTRCO0VBQzNCLElBQUlBLE1BQU0sQ0FBQ0MsY0FBYyxFQUFFO0lBQ3pCLE9BQU9ELE1BQU0sQ0FBQ0MsY0FBYztFQUM5QjtFQUVBLElBQU1DLFVBQVUsR0FBRy9GLE1BQU0sQ0FBQ0MsSUFBSSxDQUFDNEYsTUFBTSxDQUFDRyxjQUFjLENBQUM7RUFDckQsSUFBSUQsVUFBVSxDQUFDMUYsTUFBTSxHQUFHLENBQUMsRUFBRTtJQUN6QixJQUFNNEYsUUFBUSxHQUFHRixVQUFVLENBQUMsQ0FBQyxDQUFDO0lBQzlCLElBQU1HLEdBQUcsR0FBR0wsTUFBTSxDQUFDRyxjQUFjLENBQUNDLFFBQVEsQ0FBQztJQUMzQyxJQUFJQyxHQUFHLElBQUlBLEdBQUcsS0FBS0wsTUFBTSxDQUFDL0UsQ0FBQyxDQUFDLGlCQUFpQixDQUFDLEVBQUU7TUFDOUMsSUFBTWEsUUFBUSxHQUFHUiw4QkFBOEIsQ0FBQytFLEdBQUcsQ0FBQztNQUNwRCxJQUFJdkUsUUFBUSxFQUFFO1FBQ1osT0FBT2YsK0JBQStCLENBQUNlLFFBQVEsRUFBRWtFLE1BQU0sQ0FBQy9FLENBQUMsQ0FBQztNQUM1RDtNQUVBLElBQU1xRixPQUFPLEdBQUdELEdBQUcsQ0FBQ3pGLElBQUksQ0FBQyxDQUFDO01BQzFCLElBQUkwRixPQUFPLElBQUksQ0FBQzdGLDBCQUEwQixDQUFDNkYsT0FBTyxDQUFDLEVBQUU7UUFDbkQsT0FBTztVQUFFbEYsS0FBSyxFQUFFLFFBQVE7VUFBRVYsT0FBTyxFQUFFNEY7UUFBUSxDQUFDO01BQzlDO01BRUEsT0FBT3pFLDhCQUE4QixDQUFDd0UsR0FBRyxFQUFFTCxNQUFNLENBQUMvRSxDQUFDLEVBQUU7UUFBRUksbUJBQW1CLEVBQUU7TUFBSyxDQUFDLENBQUM7SUFDckY7SUFDQSxPQUFPO01BQUVELEtBQUssRUFBRSxZQUFZO01BQUVWLE9BQU8sRUFBRXNGLE1BQU0sQ0FBQy9FLENBQUMsQ0FBQyxpQkFBaUI7SUFBRSxDQUFDO0VBQ3RFO0VBRUEsSUFBSStFLE1BQU0sQ0FBQ08sY0FBYyxFQUFFO0lBQ3pCLElBQ0VQLE1BQU0sQ0FBQ08sY0FBYyxLQUFLUCxNQUFNLENBQUMvRSxDQUFDLENBQUMsY0FBYyxDQUFDLElBQ2xEK0UsTUFBTSxDQUFDTyxjQUFjLEtBQUtQLE1BQU0sQ0FBQy9FLENBQUMsQ0FBQzNDLDRCQUE0QixDQUFDLEVBQ2hFO01BQ0EsT0FBT21ILHdCQUF3QixDQUFDTyxNQUFNLENBQUMvRSxDQUFDLENBQUM7SUFDM0M7SUFDQSxJQUFJK0UsTUFBTSxDQUFDTyxjQUFjLEtBQUtQLE1BQU0sQ0FBQy9FLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFO01BQ3pELE9BQU87UUFBRUcsS0FBSyxFQUFFLFlBQVk7UUFBRVYsT0FBTyxFQUFFc0YsTUFBTSxDQUFDTztNQUFlLENBQUM7SUFDaEU7SUFDQSxJQUNFUCxNQUFNLENBQUNPLGNBQWMsS0FBS1AsTUFBTSxDQUFDL0UsQ0FBQyxDQUFDLDBCQUEwQixDQUFDLElBQzlEK0UsTUFBTSxDQUFDTyxjQUFjLEtBQUtQLE1BQU0sQ0FBQy9FLENBQUMsQ0FBQywyQkFBMkIsQ0FBQyxJQUMvRCtFLE1BQU0sQ0FBQ08sY0FBYyxLQUFLUCxNQUFNLENBQUMvRSxDQUFDLENBQUMsMkJBQTJCLENBQUMsRUFDL0Q7TUFDQSxPQUFPeUUsd0JBQXdCLENBQUNNLE1BQU0sQ0FBQy9FLENBQUMsRUFBRTtRQUN4QzBFLGlCQUFpQixFQUFFSyxNQUFNLENBQUNPLGNBQWMsS0FBS1AsTUFBTSxDQUFDL0UsQ0FBQyxDQUFDLDBCQUEwQixDQUFDO1FBQ2pGMkUsa0JBQWtCLEVBQUVJLE1BQU0sQ0FBQ08sY0FBYyxLQUFLUCxNQUFNLENBQUMvRSxDQUFDLENBQUMsMkJBQTJCLENBQUM7UUFDbkY0RSxjQUFjLEVBQUVHLE1BQU0sQ0FBQ08sY0FBYyxLQUFLUCxNQUFNLENBQUMvRSxDQUFDLENBQUMsMkJBQTJCLENBQUM7UUFDL0V1RCxnQkFBZ0IsRUFBRXdCLE1BQU0sQ0FBQ3hCO01BQzNCLENBQUMsQ0FBQztJQUNKO0lBQ0EsT0FBTztNQUFFcEQsS0FBSyxFQUFFLFFBQVE7TUFBRVYsT0FBTyxFQUFFc0YsTUFBTSxDQUFDTztJQUFlLENBQUM7RUFDNUQ7RUFFQSxJQUFJUCxNQUFNLENBQUNRLGVBQWUsRUFBRTtJQUMxQixPQUFPZCx3QkFBd0IsQ0FBQ00sTUFBTSxDQUFDL0UsQ0FBQyxFQUFFO01BQ3hDMEUsaUJBQWlCLEVBQUVLLE1BQU0sQ0FBQ0wsaUJBQWlCO01BQzNDQyxrQkFBa0IsRUFBRUksTUFBTSxDQUFDSixrQkFBa0I7TUFDN0NDLGNBQWMsRUFBRUcsTUFBTSxDQUFDSCxjQUFjO01BQ3JDckIsZ0JBQWdCLEVBQUV3QixNQUFNLENBQUN4QjtJQUMzQixDQUFDLENBQUM7RUFDSjtFQUVBLE9BQU8sSUFBSTtBQUNiLENBQUM7QUFFRCxPQUFPLElBQU1pQywrQkFBK0IsR0FBRyxTQUFsQ0EsK0JBQStCQSxDQUFJN0MsU0FBNkI7RUFBQSxPQUMzRSxPQUFPQSxTQUFTLEtBQUssUUFBUSxJQUFJQSxTQUFTLENBQUNoQyxRQUFRLENBQUMsWUFBWSxDQUFDO0FBQUEiLCJpZ25vcmVMaXN0IjpbXX0=
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@projectcor/maia-components",
3
- "version": "2.11.55-1",
3
+ "version": "2.11.55-3",
4
4
  "description": "",
5
5
  "keywords": [],
6
6
  "repository": {