@projectcor/maia-components 2.11.41-10 → 2.11.41-2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (82) hide show
  1. package/lib/App.js +22 -11
  2. package/lib/components/atoms/ContextMentionChip/ContextMentionChip.js +38 -0
  3. package/lib/components/atoms/ContextMentionChip/ContextMentionChip.styles.js +184 -0
  4. package/lib/components/atoms/ContextMentionChip/MentionOverflowLabel.js +39 -0
  5. package/lib/components/atoms/ContextMentionChip/buildChipElement.js +390 -0
  6. package/lib/components/atoms/ContextMentionChip/index.js +4 -0
  7. package/lib/components/atoms/ContextMentionEditor/ContextMentionEditor.js +195 -0
  8. package/lib/components/atoms/ContextMentionEditor/ContextMentionEditor.styles.js +6 -0
  9. package/lib/components/atoms/ContextMentionEditor/index.js +2 -0
  10. package/lib/components/atoms/ContextMentionItem/ContextMentionItem.js +282 -0
  11. package/lib/components/atoms/ContextMentionItem/ContextMentionItem.styles.js +145 -0
  12. package/lib/components/atoms/ContextMentionItem/index.js +2 -0
  13. package/lib/components/atoms/ContextMentionPopover/ContextMentionPopover.js +168 -0
  14. package/lib/components/atoms/ContextMentionPopover/ContextMentionPopover.styles.js +79 -0
  15. package/lib/components/atoms/ContextMentionPopover/index.js +3 -0
  16. package/lib/components/atoms/MAIAInput/MAIAInput.js +238 -321
  17. package/lib/components/atoms/MAIAInput/MAIAInputEditor.js +269 -0
  18. package/lib/components/atoms/MAIAInput/styles.js +75 -46
  19. package/lib/components/atoms/icons/NotionIcon.js +36 -0
  20. package/lib/components/atoms/icons/SubtaskIcon.js +36 -0
  21. package/lib/components/atoms/icons/index.js +2 -1
  22. package/lib/components/index.js +2 -1
  23. package/lib/components/molecules/ChatAIHistory/ChatAIHistory.js +8 -4
  24. package/lib/components/molecules/ChatAIMessages/ChatAIMessages.js +31 -3
  25. package/lib/components/molecules/ChatAIMessages/newStyles.js +5 -2
  26. package/lib/components/molecules/ChatAIModal/ChatAIModal.js +9 -30
  27. package/lib/components/molecules/ChatFooter/ChatFooter.js +5 -4
  28. package/lib/components/molecules/ContextMentionInput/ContextMentionInput.js +68 -0
  29. package/lib/components/molecules/ContextMentionInput/ContextMentionInput.styles.js +6 -0
  30. package/lib/components/molecules/ContextMentionInput/index.js +2 -0
  31. package/lib/components/molecules/Sidebar/Sidebar.js +9 -5
  32. package/lib/components/molecules/Sidebar/Sidebar.layout.styles.js +6 -2
  33. package/lib/components/organisms/ChatAI/ChatAI.js +4 -20
  34. package/lib/components/organisms/DeleteQuestionModal/DeleteQuestionModal.js +5 -2
  35. package/lib/components/organisms/EditQuestionModal/EditQuestionModal.js +6 -3
  36. package/lib/constants/config.js +3 -1
  37. package/lib/constants/taskLinkIcon.js +6 -0
  38. package/lib/context/cor-user.js +1 -1
  39. package/lib/context/global-context.js +1 -5
  40. package/lib/dev/DevContextMentionInput.js +65 -0
  41. package/lib/dev/Providers.js +11 -6
  42. package/lib/hooks/useCaretPosition.js +35 -0
  43. package/lib/hooks/useChatManager/useChatManager.interface.js +1 -1
  44. package/lib/hooks/useChatManager/useChatManager.js +21 -11
  45. package/lib/hooks/useChatMessages/useChatMessages.interface.js +1 -1
  46. package/lib/hooks/useChatMessages/useChatMessages.js +30 -14
  47. package/lib/hooks/useClientSearch.js +3 -2
  48. package/lib/hooks/useContextMentions.js +270 -0
  49. package/lib/hooks/useEntitySearch.js +1119 -0
  50. package/lib/hooks/useEvent.js +6 -1
  51. package/lib/hooks/useMentionAllowedTypes.js +103 -0
  52. package/lib/hooks/useMentionPopover.js +334 -0
  53. package/lib/hooks/useOrchestratorStream/useOrchestratorStream.js +6 -4
  54. package/lib/hooks/useProjectSearch.js +3 -2
  55. package/lib/hooks/useRecentClientsSearch.js +3 -2
  56. package/lib/hooks/useTaskPanel.js +3 -10
  57. package/lib/hooks/useTextOverflowEllipsisTooltip.js +34 -0
  58. package/lib/lang/br/index.js +24 -1
  59. package/lib/lang/en/index.js +24 -1
  60. package/lib/lang/es/index.js +24 -1
  61. package/lib/lang/fr/index.js +23 -1
  62. package/lib/services/maia/Chats/getChatMessages.js +29 -4
  63. package/lib/services/maia/Faqs/getFrequentlyAskedQuestions.js +4 -8
  64. package/lib/services/maia/Orchestrator/orchestrator.js +8 -5
  65. package/lib/services/maia/RecentProjects/getRecentProjects.js +12 -4
  66. package/lib/services/maia/RecentTasks/getRecentTasks.js +54 -0
  67. package/lib/services/maia/RecentTasks/index.js +6 -0
  68. package/lib/services/maia/RecentUsers/getRecentUsers.js +59 -0
  69. package/lib/services/maia/RecentUsers/index.js +6 -0
  70. package/lib/services/query/entitySearchQuery.js +18 -0
  71. package/lib/services/query/usersDirectoryQuery.js +19 -0
  72. package/lib/services/utils/mapChatMessages.js +12 -5
  73. package/lib/types/Chat.js +1 -1
  74. package/lib/types/agent.js +1 -1
  75. package/lib/types/contextMention.js +37 -0
  76. package/lib/utils/contextMentionIcons.js +115 -0
  77. package/lib/utils/contextMentionLabel.js +4 -0
  78. package/lib/utils/contextMentionTypeLabel.js +17 -0
  79. package/lib/utils/maiaStreamdownRehypePlugins.js +27 -0
  80. package/lib/utils/openTaskInCorPanel.js +18 -0
  81. package/lib/utils/renderContextMentions.js +299 -0
  82. package/package.json +2 -1
@@ -1,8 +1,5 @@
1
1
  import _defineProperty from "@babel/runtime/helpers/defineProperty";
2
2
  import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
3
- function _createForOfIteratorHelper(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t["return"] || t["return"](); } finally { if (u) throw o; } } }; }
4
- function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
5
- function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
6
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; }
7
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; }
8
5
  /* eslint-disable no-restricted-syntax */
@@ -13,9 +10,9 @@ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t =
13
10
  /* eslint-disable @typescript-eslint/no-explicit-any */
14
11
  /* eslint-disable prefer-destructuring */
15
12
  /* eslint-disable jsx-a11y/click-events-have-key-events */
16
- /* eslint-disable no-console */
17
13
  /* eslint-disable jsx-a11y/no-static-element-interactions */
18
- import { useEffect, useRef, useState } from 'react';
14
+ import { useCallback, useEffect, useMemo, useRef, useState } from 'react';
15
+ import { createPortal } from 'react-dom';
19
16
  import { Popover } from '@mui/material';
20
17
  import { PaperPlane } from '@projectcor/icons/lib/components/PaperPlane';
21
18
  import { Attach } from '@projectcor/icons/lib/components/Attach';
@@ -26,7 +23,7 @@ import { Check } from '@projectcor/icons/lib/components/Check';
26
23
  import { Cross } from '@projectcor/icons/lib/components/Cross';
27
24
  import { Tooltip } from '@projectcor/tooltipv2/lib/components/Tooltip';
28
25
  import colors from '@projectcor/theme/lib/base/colors';
29
- import { ActiveToolChipIconButton, ActiveToolChipLabel, ActiveToolChipRoot, PlusMenuDivider, PlusMenuInnerColumn, PlusMenuItemButton, PlusMenuItemLabel, PlusMenuPaper, PlusMenuToolsRow, PlusToggleButton, SCMIAttachment, SCMIAttachmentDeleteIcon, StyledMAIAInput, StyledMAIAInputButtons, StyledMAIAInputWrapper, StyledMAIASendButton, StyledMAIAStopButton, StyledMAIAStopIcon } from './styles';
26
+ import { ActiveToolChipIconButton, ActiveToolChipLabel, ActiveToolChipRoot, PlusMenuDivider, PlusMenuInnerColumn, PlusMenuItemButton, PlusMenuItemLabel, PlusMenuPaper, PlusMenuToolsRow, PlusToggleButton, SCMIAttachment, SCMIAttachmentDeleteIcon, StyledMAIAInputWrapper, StyledMAIASendButton, StyledMAIAMainToolbarGrid, StyledMAIAPlusToolbarCell, StyledMAIASendToolbarCell, StyledMAIAStopButton, StyledMAIAStopIcon } from './styles';
30
27
  import { useGlobalContext } from '../../../context/global-context';
31
28
  import { ModalFileExceeds } from '../../organisms/ModalFileExceeds';
32
29
  import { useT } from '../../../hooks/useT';
@@ -35,6 +32,9 @@ import { EVENTS, useEvent } from '../../../hooks/useEvent';
35
32
  import { getChatToolsMenuAgentType } from '../../../utils/hitlAnalytics';
36
33
  import { MAIA_CHAT_INPUT_UI } from '../../../styles/config';
37
34
  import { allowedFileTypes, fileTypes, MAX_FILE_SIZE_MB_MAIA_VISION, MAX_FILE_SIZE_MB_OLD, MAX_FILE_SIZE_MB_AUDIO, MAX_CHAT_INPUT_ATTACHMENTS } from '../../../constants/formatExtensions';
35
+ import { ContextMentionEditor } from '../ContextMentionEditor';
36
+ // eslint-disable-next-line import/no-cycle
37
+ import { useMentionPopover } from '../../../hooks/useMentionPopover';
38
38
  import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
39
39
  var TOOL_CHIP_EXIT_MS = 220;
40
40
  export var MAIAInput = function MAIAInput(_ref) {
@@ -57,17 +57,17 @@ export var MAIAInput = function MAIAInput(_ref) {
57
57
  newChatKey = _ref.newChatKey;
58
58
  var _useT = useT(),
59
59
  t = _useT.t;
60
- var inputRef = useRef(null);
60
+ var editorRef = useRef(null);
61
61
  var fileInputRef = useRef(null);
62
62
  var wrapperRef = useRef(null);
63
- var _useState = useState(''),
63
+ var _useState = useState(false),
64
64
  _useState2 = _slicedToArray(_useState, 2),
65
- valueTextarea = _useState2[0],
66
- setValueTextarea = _useState2[1];
67
- var _useState3 = useState(true),
65
+ hasWrappedToSecondLine = _useState2[0],
66
+ setHasWrappedToSecondLine = _useState2[1];
67
+ var _useState3 = useState(false),
68
68
  _useState4 = _slicedToArray(_useState3, 2),
69
- isDisabled = _useState4[0],
70
- setIsDisabled = _useState4[1];
69
+ hasTypingPresence = _useState4[0],
70
+ setHasTypingPresence = _useState4[1];
71
71
  var _useState5 = useState(false),
72
72
  _useState6 = _slicedToArray(_useState5, 2),
73
73
  isFocused = _useState6[0],
@@ -88,6 +88,15 @@ export var MAIAInput = function MAIAInput(_ref) {
88
88
  toggleDeepSearch = _useGlobalContext.toggleDeepSearch,
89
89
  isDeepSearchActive = _useGlobalContext.isDeepSearchActive,
90
90
  agent = _useGlobalContext.agent;
91
+ var _useMentionPopover = useMentionPopover({
92
+ editorRef: editorRef,
93
+ popoverAnchorRef: wrapperRef
94
+ }),
95
+ popoverOpen = _useMentionPopover.popoverOpen,
96
+ resetMentionOpenTracking = _useMentionPopover.resetMentionOpenTracking,
97
+ handleTrigger = _useMentionPopover.handleTrigger,
98
+ handlePopoverKeyDown = _useMentionPopover.handleKeyDown,
99
+ popoverNode = _useMentionPopover.popoverNode;
91
100
  var _useState9 = useState(null),
92
101
  _useState0 = _slicedToArray(_useState9, 2),
93
102
  plusMenuAnchor = _useState0[0],
@@ -106,6 +115,11 @@ export var MAIAInput = function MAIAInput(_ref) {
106
115
  deep: false
107
116
  });
108
117
  var plusMenuOpen = Boolean(plusMenuAnchor);
118
+
119
+ // Inicializar las referencias como undefined para detectar el primer cambio correctamente
120
+ var previousAgentIdRef = useRef(undefined);
121
+ var previousChatIdRef = useRef(undefined);
122
+ var previousNewChatKeyRef = useRef(undefined);
109
123
  var analyticsAgentType = getChatToolsMenuAgentType(agent);
110
124
  var analyticsCloneEntityPayload = (agent === null || agent === void 0 ? void 0 : agent.type) === 'clone' ? {
111
125
  entity: (_agent$entity = agent.entity) !== null && _agent$entity !== void 0 ? _agent$entity : null
@@ -118,10 +132,8 @@ export var MAIAInput = function MAIAInput(_ref) {
118
132
  }
119
133
  requestAnimationFrame(function () {
120
134
  window.setTimeout(function () {
121
- var _inputRef$current;
122
- (_inputRef$current = inputRef.current) === null || _inputRef$current === void 0 || _inputRef$current.focus({
123
- preventScroll: true
124
- });
135
+ var _editorRef$current;
136
+ (_editorRef$current = editorRef.current) === null || _editorRef$current === void 0 || _editorRef$current.focus();
125
137
  }, 0);
126
138
  });
127
139
  };
@@ -214,116 +226,18 @@ export var MAIAInput = function MAIAInput(_ref) {
214
226
  }, analyticsCloneEntityPayload));
215
227
  scheduleInputFocusAfterToolAction();
216
228
  };
217
-
218
- // Inicializar las referencias como undefined para detectar el primer cambio correctamente
219
- var previousAgentIdRef = useRef(undefined);
220
- var previousChatIdRef = useRef(undefined);
221
- var previousNewChatKeyRef = useRef(undefined);
222
- var handleResize = function handleResize() {
223
- var textarea = inputRef.current;
224
- if (!textarea) {
225
- return;
226
- }
227
-
228
- // Altura mínima equivalente a una línea
229
- var minHeight = 22.1;
230
- var maxHeight = 122.1;
231
-
232
- // Para medir correctamente el scrollHeight, necesitamos quitar temporalmente las restricciones
233
- var previousMinHeight = textarea.style.minHeight;
234
- var previousMaxHeight = textarea.style.maxHeight;
235
-
236
- // Establecer altura a 'auto' y quitar temporalmente min-height y max-height para medir correctamente
237
- textarea.style.height = 'auto';
238
- textarea.style.minHeight = '0px';
239
- textarea.style.maxHeight = 'none';
240
-
241
- // Forzar reflow para que el navegador recalcule
242
- void textarea.offsetHeight;
243
-
244
- // Ahora medir el scrollHeight real sin restricciones
245
- var scrollHeight = textarea.scrollHeight;
246
-
247
- // Calcular la altura de una línea usando los estilos computados
248
- var computedStyle = window.getComputedStyle(textarea);
249
- var lineHeight = parseFloat(computedStyle.lineHeight) || 20; // Fallback a 20px si no está definido
250
- var paddingTop = parseFloat(computedStyle.paddingTop) || 0;
251
- var paddingBottom = parseFloat(computedStyle.paddingBottom) || 0;
252
- var borderTop = parseFloat(computedStyle.borderTopWidth) || 0;
253
- var borderBottom = parseFloat(computedStyle.borderBottomWidth) || 0;
254
-
255
- // Altura de una línea completa (line-height + padding + border)
256
- var singleLineHeight = lineHeight + paddingTop + paddingBottom + borderTop + borderBottom;
257
- var isEmpty = textarea.value.trim() === '';
258
-
259
- // Medir el ancho del texto usando Canvas para determinar si se envuelve a múltiples líneas
260
- var hasMultipleVisualLines = false;
261
- var canvas = document.createElement('canvas');
262
- var context = canvas.getContext('2d');
263
- if (!context) {
264
- // Fallback si Canvas no está disponible: usar scrollHeight
265
- hasMultipleVisualLines = scrollHeight > singleLineHeight * 1.5;
266
- } else {
267
- var textareaStyles = window.getComputedStyle(textarea);
268
- context.font = "".concat(textareaStyles.fontWeight, " ").concat(textareaStyles.fontSize, " ").concat(textareaStyles.fontFamily);
269
-
270
- // Calcular el ancho disponible (ancho total menos padding izquierdo/derecho y border izquierdo/derecho)
271
- var paddingLeft = parseFloat(computedStyle.paddingLeft) || 0;
272
- var paddingRight = parseFloat(computedStyle.paddingRight) || 0;
273
- var borderLeft = parseFloat(computedStyle.borderLeftWidth) || 0;
274
- var borderRight = parseFloat(computedStyle.borderRightWidth) || 0;
275
- var textareaWidth = textarea.offsetWidth - paddingLeft - paddingRight - borderLeft - borderRight;
276
- var text = textarea.value || '';
277
- var lines = text.split('\n');
278
-
279
- // Si hay múltiples líneas por saltos de línea explícitos
280
- if (lines.length > 1) {
281
- hasMultipleVisualLines = true;
282
- } else {
283
- // Verificar si el texto se envuelve midiendo el ancho de cada línea
284
- var _iterator = _createForOfIteratorHelper(lines),
285
- _step;
286
- try {
287
- for (_iterator.s(); !(_step = _iterator.n()).done;) {
288
- var line = _step.value;
289
- if (line.trim() === '') continue;
290
- var textWidth = context.measureText(line).width;
291
- // Si alguna línea es más ancha que el textarea disponible, se envuelve
292
- if (textWidth > textareaWidth) {
293
- hasMultipleVisualLines = true;
294
- break;
295
- }
296
- }
297
- } catch (err) {
298
- _iterator.e(err);
299
- } finally {
300
- _iterator.f();
301
- }
302
- }
303
- }
304
- var newHeight;
305
- if (isEmpty) {
306
- // Cuando está vacío, usar altura mínima
307
- newHeight = minHeight;
308
- } else if (!hasMultipleVisualLines) {
309
- // Cuando hay contenido pero solo una línea visual, usar altura mínima
310
- newHeight = minHeight;
311
- } else {
312
- // Para múltiples líneas visuales, usar el scrollHeight
313
- newHeight = Math.min(Math.max(scrollHeight, minHeight), maxHeight);
314
- }
315
-
316
- // Restaurar estilos antes de aplicar la nueva altura
317
- textarea.style.minHeight = previousMinHeight || '22.1px';
318
- textarea.style.maxHeight = previousMaxHeight || '122.1px';
319
- textarea.style.height = "".concat(newHeight, "px");
320
- };
321
229
  useEffect(function () {
322
- if (inputRef.current && !disabled) {
323
- inputRef.current.focus();
324
- handleResize();
230
+ if (!disabled) {
231
+ var _editorRef$current2;
232
+ (_editorRef$current2 = editorRef.current) === null || _editorRef$current2 === void 0 || _editorRef$current2.focus();
325
233
  }
326
234
  }, [disabled]);
235
+ var compactSingleRowToolbar = useMemo(function () {
236
+ return attachments.length === 0 && !isWebSearchActive && !isDeepSearchActive && !hasWrappedToSecondLine;
237
+ }, [attachments.length, isWebSearchActive, isDeepSearchActive, hasWrappedToSecondLine]);
238
+ var sendDisabled = useMemo(function () {
239
+ return !hasTypingPresence && attachments.length === 0;
240
+ }, [hasTypingPresence, attachments.length]);
327
241
  useEffect(function () {
328
242
  searchModeActiveRef.current = {
329
243
  web: isWebSearchActive,
@@ -345,28 +259,20 @@ export var MAIAInput = function MAIAInput(_ref) {
345
259
 
346
260
  // Auto-focus cuando cambia el agente o la conversación, o al montar el componente
347
261
  useEffect(function () {
348
- // Comparación que maneja correctamente undefined/null
349
262
  var agentChanged = previousAgentIdRef.current !== (agent === null || agent === void 0 ? void 0 : agent.id);
350
- // Comparación estricta que detecta cambios incluso cuando uno es undefined
351
263
  var previousChatId = previousChatIdRef.current;
352
264
  var currentChatId = chatId;
353
265
  var chatChanged = previousChatId !== currentChatId;
354
- // Detectar cambio específico de undefined/null a un valor (nuevo chat -> conversación vieja)
355
266
  var changedFromNewChatToOldChat = (previousChatId === undefined || previousChatId === null) && currentChatId !== undefined && currentChatId !== null;
356
267
  var newChatStarted = previousNewChatKeyRef.current !== newChatKey;
357
268
  var isInitialMount = previousAgentIdRef.current === undefined && previousChatIdRef.current === undefined;
358
- if ((agentChanged || chatChanged || changedFromNewChatToOldChat || newChatStarted || isInitialMount) && inputRef.current && !disabled) {
359
- // Usar setTimeout para asegurar que el DOM esté listo
360
- // Aumentar el delay para casos donde el componente se está montando
269
+ if ((agentChanged || chatChanged || changedFromNewChatToOldChat || newChatStarted || isInitialMount) && !disabled) {
361
270
  var delay = isInitialMount || changedFromNewChatToOldChat ? 200 : 100;
362
271
  setTimeout(function () {
363
- if (inputRef.current && !disabled) {
364
- inputRef.current.focus();
365
- }
272
+ var _editorRef$current3;
273
+ if (!disabled) (_editorRef$current3 = editorRef.current) === null || _editorRef$current3 === void 0 || _editorRef$current3.focus();
366
274
  }, delay);
367
275
  }
368
-
369
- // Actualizar las referencias DESPUÉS de la comparación
370
276
  previousAgentIdRef.current = agent === null || agent === void 0 ? void 0 : agent.id;
371
277
  previousChatIdRef.current = chatId;
372
278
  previousNewChatKeyRef.current = newChatKey;
@@ -375,72 +281,63 @@ export var MAIAInput = function MAIAInput(_ref) {
375
281
  // Clear input when session changes (user switches to a different chat)
376
282
  useEffect(function () {
377
283
  var handleSessionChange = function handleSessionChange() {
378
- setValueTextarea('');
379
- setIsDisabled(true);
380
- if (inputRef.current) {
381
- inputRef.current.value = '';
382
- }
383
- handleResize();
284
+ var _editorRef$current4;
285
+ (_editorRef$current4 = editorRef.current) === null || _editorRef$current4 === void 0 || _editorRef$current4.clear();
286
+ setHasTypingPresence(false);
287
+ setHasWrappedToSecondLine(false);
288
+ resetMentionOpenTracking();
384
289
  };
385
290
  document.addEventListener('chat-session-changed', handleSessionChange);
386
291
  return function () {
387
- document.removeEventListener('chat-session-changed', handleSessionChange);
292
+ return document.removeEventListener('chat-session-changed', handleSessionChange);
388
293
  };
389
- }, []);
390
- useEffect(function () {
391
- var animationFrameId = requestAnimationFrame(function () {
392
- handleResize();
294
+ }, [resetMentionOpenTracking]);
295
+ var handleSendMessage = useCallback(function () {
296
+ var _editorRef$current5, _state$text, _state$mentions, _editorRef$current6;
297
+ var state = (_editorRef$current5 = editorRef.current) === null || _editorRef$current5 === void 0 ? void 0 : _editorRef$current5.serialize();
298
+ var text = (_state$text = state === null || state === void 0 ? void 0 : state.text) !== null && _state$text !== void 0 ? _state$text : '';
299
+ if (!text.trim() && !attachments.length) return;
300
+ var mentions = (_state$mentions = state === null || state === void 0 ? void 0 : state.mentions) !== null && _state$mentions !== void 0 ? _state$mentions : [];
301
+ mentions.forEach(function (m) {
302
+ eventAmplitude(EVENTS.aiChatMentionSend, {
303
+ type: m.type,
304
+ id: String(m.id)
305
+ });
393
306
  });
394
- return function () {
395
- return cancelAnimationFrame(animationFrameId);
396
- };
397
- }, [valueTextarea]);
398
- useEffect(function () {
399
- var hasText = valueTextarea.trim().length > 0;
400
- var hasAttachments = attachments.length > 0;
401
- setIsDisabled(!hasText && !hasAttachments);
402
- }, [attachments, valueTextarea]);
403
- var handleSendMessage = function handleSendMessage() {
404
- if (inputRef.current) {
405
- onSendMessage(inputRef.current.value, attachments);
406
- inputRef.current.value = '';
407
- setValueTextarea('');
408
- setIsDisabled(true);
409
- handleResize();
410
- return;
411
- }
412
- if (attachments.length) {
413
- onSendMessage('', attachments);
414
- setValueTextarea('');
415
- setIsDisabled(true);
416
- }
417
- };
418
- var handleKeyDown = function handleKeyDown(e) {
419
- if (e.key === 'Enter' && !e.shiftKey) {
420
- e.preventDefault();
421
- if (!isDisabled && !disabled) {
422
- handleSendMessage();
307
+ onSendMessage(text, attachments, mentions);
308
+ (_editorRef$current6 = editorRef.current) === null || _editorRef$current6 === void 0 || _editorRef$current6.clear();
309
+ setHasTypingPresence(false);
310
+ setHasWrappedToSecondLine(false);
311
+ resetMentionOpenTracking();
312
+ }, [attachments, onSendMessage, eventAmplitude, resetMentionOpenTracking]);
313
+ var handleEditorInput = useCallback(function (_ref2) {
314
+ var _editorRef$current7;
315
+ var text = _ref2.text,
316
+ trigger = _ref2.trigger;
317
+ var visualMultiline = !!((_editorRef$current7 = editorRef.current) !== null && _editorRef$current7 !== void 0 && _editorRef$current7.hasVisualMultiline());
318
+ var explicitMultiline = text.includes('\n');
319
+ var nextIsMultiline = explicitMultiline || visualMultiline;
320
+ var nextHasTypingPresence = text.trim().length > 0;
321
+ setHasTypingPresence(text.trim().length > 0);
322
+ setHasWrappedToSecondLine(function (prev) {
323
+ if (!nextHasTypingPresence) {
324
+ return false;
423
325
  }
424
- }
425
- };
426
- var handleChange = function handleChange(e) {
427
- var hasText = e.target.value.trim().length > 0;
428
- var hasAttachments = attachments.length > 0;
429
- setIsDisabled(!hasText && !hasAttachments);
430
- setValueTextarea(e.target.value);
326
+ if (nextIsMultiline) {
327
+ return true;
328
+ }
329
+ return prev;
330
+ });
431
331
  onChange === null || onChange === void 0 || onChange();
432
- };
433
- var handlePaste = function handlePaste() {
434
- setTimeout(function () {
435
- var _inputRef$current$val, _inputRef$current2;
436
- handleResize();
437
- var currentValue = (_inputRef$current$val = (_inputRef$current2 = inputRef.current) === null || _inputRef$current2 === void 0 ? void 0 : _inputRef$current2.value) !== null && _inputRef$current$val !== void 0 ? _inputRef$current$val : '';
438
- var hasText = currentValue.trim().length > 0;
439
- var hasAttachments = attachments.length > 0;
440
- setValueTextarea(currentValue);
441
- setIsDisabled(!hasText && !hasAttachments);
442
- }, 10);
443
- };
332
+ handleTrigger(trigger);
333
+ }, [onChange, handleTrigger]);
334
+ var handleKeyDown = useCallback(function (e) {
335
+ if (handlePopoverKeyDown(e)) return;
336
+ if (e.key === 'Enter' && !e.shiftKey && !popoverOpen) {
337
+ e.preventDefault();
338
+ if (!sendDisabled && !disabled) handleSendMessage();
339
+ }
340
+ }, [handlePopoverKeyDown, popoverOpen, sendDisabled, disabled, handleSendMessage]);
444
341
  var handleFileSelect = function handleFileSelect(e) {
445
342
  var files = e.target.files;
446
343
  if (!files) return;
@@ -510,7 +407,6 @@ export var MAIAInput = function MAIAInput(_ref) {
510
407
  onFileAttach === null || onFileAttach === void 0 || onFileAttach(parsedFile);
511
408
  }
512
409
  });
513
- setIsDisabled(false);
514
410
  if (excludedFiles.length || exceededFiles.length) {
515
411
  setModalProps({
516
412
  isOpen: true,
@@ -526,11 +422,6 @@ export var MAIAInput = function MAIAInput(_ref) {
526
422
  var handleDeleteAttachment = function handleDeleteAttachment(fileId) {
527
423
  onDeleteAttachment === null || onDeleteAttachment === void 0 || onDeleteAttachment(fileId);
528
424
  };
529
- var handleBlur = function handleBlur() {
530
- var hasText = valueTextarea.trim().length > 0;
531
- var hasAttachments = attachments.length > 0;
532
- setIsDisabled(!hasText && !hasAttachments);
533
- };
534
425
  var handleWrapperFocus = function handleWrapperFocus() {
535
426
  return setIsFocused(true);
536
427
  };
@@ -575,6 +466,8 @@ export var MAIAInput = function MAIAInput(_ref) {
575
466
  disabled: false,
576
467
  alignButtons: alignButtons,
577
468
  hasAttachments: !!attachments.length,
469
+ compactSingleRowToolbar: compactSingleRowToolbar,
470
+ "data-maia-streaming": isStreaming ? 'true' : 'false',
578
471
  onFocus: handleWrapperFocus,
579
472
  onBlur: handleWrapperBlur,
580
473
  children: [!!attachments.length && /*#__PURE__*/_jsx("div", {
@@ -607,140 +500,164 @@ export var MAIAInput = function MAIAInput(_ref) {
607
500
  })
608
501
  }, "".concat(index, "-").concat(attachment.name));
609
502
  })
610
- }), /*#__PURE__*/_jsx(StyledMAIAInput, {
611
- ref: inputRef,
612
- disabled: disabled,
613
- onChange: handleChange,
614
- onKeyDown: handleKeyDown,
615
- onPaste: handlePaste,
616
- placeholder: placeholder,
617
- alignButtons: alignButtons,
618
- onBlur: handleBlur
619
- }), /*#__PURE__*/_jsxs(StyledMAIAInputButtons, {
620
- children: [/*#__PURE__*/_jsxs(PlusMenuToolsRow, {
621
- children: [/*#__PURE__*/_jsx(PlusToggleButton, {
622
- type: "button",
623
- $menuOpen: plusMenuOpen,
624
- onClick: handlePlusButtonClick,
625
- "aria-label": t('chat.openPlusMenuAria'),
626
- "aria-haspopup": "true",
627
- "aria-expanded": plusMenuOpen,
628
- children: /*#__PURE__*/_jsx(Plus, {
629
- color: plusIconColor,
630
- width: 20,
631
- height: 20
632
- })
633
- }), /*#__PURE__*/_jsx(Popover, {
634
- open: plusMenuOpen,
635
- anchorEl: plusMenuAnchor,
636
- onClose: closePlusMenu,
637
- anchorOrigin: {
638
- vertical: 'top',
639
- horizontal: 'left'
640
- },
641
- transformOrigin: {
642
- vertical: 'bottom',
643
- horizontal: 'left'
644
- },
645
- slotProps: {
646
- paper: {
647
- elevation: 0,
648
- sx: {
649
- overflow: 'visible',
650
- borderRadius: '4px',
651
- boxShadow: 'none',
652
- backgroundColor: 'transparent',
653
- marginTop: '-4px'
503
+ }), /*#__PURE__*/_jsxs(StyledMAIAMainToolbarGrid, {
504
+ $compactRow: compactSingleRowToolbar,
505
+ children: [/*#__PURE__*/_jsx(StyledMAIAPlusToolbarCell, {
506
+ $compactRow: compactSingleRowToolbar,
507
+ children: /*#__PURE__*/_jsxs(PlusMenuToolsRow, {
508
+ children: [/*#__PURE__*/_jsx(PlusToggleButton, {
509
+ type: "button",
510
+ $menuOpen: plusMenuOpen,
511
+ onClick: handlePlusButtonClick,
512
+ "aria-label": t('chat.openPlusMenuAria'),
513
+ "aria-haspopup": "true",
514
+ "aria-expanded": plusMenuOpen,
515
+ children: /*#__PURE__*/_jsx(Plus, {
516
+ color: plusIconColor,
517
+ width: 20,
518
+ height: 20
519
+ })
520
+ }), /*#__PURE__*/_jsx(Popover, {
521
+ open: plusMenuOpen,
522
+ anchorEl: plusMenuAnchor,
523
+ onClose: closePlusMenu,
524
+ anchorOrigin: {
525
+ vertical: 'top',
526
+ horizontal: 'left'
527
+ },
528
+ transformOrigin: {
529
+ vertical: 'bottom',
530
+ horizontal: 'left'
531
+ },
532
+ slotProps: {
533
+ paper: {
534
+ elevation: 0,
535
+ sx: {
536
+ overflow: 'visible',
537
+ borderRadius: '4px',
538
+ boxShadow: 'none',
539
+ backgroundColor: 'transparent',
540
+ marginTop: '-4px'
541
+ }
654
542
  }
655
- }
656
- },
657
- children: /*#__PURE__*/_jsxs(PlusMenuPaper, {
658
- children: [/*#__PURE__*/_jsxs(PlusMenuInnerColumn, {
659
- children: [/*#__PURE__*/_jsxs(PlusMenuItemButton, {
660
- type: "button",
661
- onClick: handlePlusMenuAttach,
662
- children: [/*#__PURE__*/_jsx(Attach, {
663
- color: plusMenuIconColor,
664
- width: 20,
665
- height: 20
666
- }), /*#__PURE__*/_jsx(PlusMenuItemLabel, {
667
- $selected: false,
668
- children: t('chat.plusMenuAttach')
543
+ },
544
+ children: /*#__PURE__*/_jsxs(PlusMenuPaper, {
545
+ children: [/*#__PURE__*/_jsxs(PlusMenuInnerColumn, {
546
+ children: [/*#__PURE__*/_jsxs(PlusMenuItemButton, {
547
+ type: "button",
548
+ onClick: handlePlusMenuAttach,
549
+ children: [/*#__PURE__*/_jsx(Attach, {
550
+ color: plusMenuIconColor,
551
+ width: 20,
552
+ height: 20
553
+ }), /*#__PURE__*/_jsx(PlusMenuItemLabel, {
554
+ $selected: false,
555
+ children: t('chat.plusMenuAttach')
556
+ })]
557
+ }), /*#__PURE__*/_jsx(PlusMenuDivider, {}), /*#__PURE__*/_jsxs(PlusMenuItemButton, {
558
+ type: "button",
559
+ onClick: handlePlusMenuWebSearch,
560
+ children: [/*#__PURE__*/_jsx(Globe, {
561
+ color: isWebSearchActive ? plusMenuSelectedColor : plusMenuIconColor,
562
+ width: 20,
563
+ height: 20
564
+ }), /*#__PURE__*/_jsx(PlusMenuItemLabel, {
565
+ $selected: !!isWebSearchActive,
566
+ children: t('chat.searchWeb')
567
+ }), isWebSearchActive ? /*#__PURE__*/_jsx(Check, {
568
+ color: plusMenuSelectedColor,
569
+ width: 16,
570
+ height: 16
571
+ }) : null]
669
572
  })]
670
- }), /*#__PURE__*/_jsx(PlusMenuDivider, {}), /*#__PURE__*/_jsxs(PlusMenuItemButton, {
573
+ }), /*#__PURE__*/_jsxs(PlusMenuItemButton, {
671
574
  type: "button",
672
- onClick: handlePlusMenuWebSearch,
673
- children: [/*#__PURE__*/_jsx(Globe, {
674
- color: isWebSearchActive ? plusMenuSelectedColor : plusMenuIconColor,
575
+ onClick: handlePlusMenuDeepSearch,
576
+ children: [/*#__PURE__*/_jsx(TelescopeIcon, {
577
+ color: isDeepSearchActive ? plusMenuSelectedColor : plusMenuIconColor,
675
578
  width: 20,
676
579
  height: 20
677
580
  }), /*#__PURE__*/_jsx(PlusMenuItemLabel, {
678
- $selected: !!isWebSearchActive,
679
- children: t('chat.searchWeb')
680
- }), isWebSearchActive ? /*#__PURE__*/_jsx(Check, {
581
+ $selected: !!isDeepSearchActive,
582
+ children: t('chat.plusMenuDeepInvestigation')
583
+ }), isDeepSearchActive ? /*#__PURE__*/_jsx(Check, {
681
584
  color: plusMenuSelectedColor,
682
585
  width: 16,
683
586
  height: 16
684
587
  }) : null]
685
588
  })]
686
- }), /*#__PURE__*/_jsxs(PlusMenuItemButton, {
589
+ })
590
+ }), (isWebSearchActive || isDeepSearchActive) && /*#__PURE__*/_jsxs(ActiveToolChipRoot, {
591
+ $hovered: activeToolChipHovered,
592
+ $exiting: toolChipExiting,
593
+ onMouseEnter: function onMouseEnter() {
594
+ return setActiveToolChipHovered(true);
595
+ },
596
+ onMouseLeave: function onMouseLeave() {
597
+ return setActiveToolChipHovered(false);
598
+ },
599
+ children: [/*#__PURE__*/_jsx(ActiveToolChipIconButton, {
687
600
  type: "button",
688
- onClick: handlePlusMenuDeepSearch,
689
- children: [/*#__PURE__*/_jsx(TelescopeIcon, {
690
- color: isDeepSearchActive ? plusMenuSelectedColor : plusMenuIconColor,
691
- width: 20,
692
- height: 20
693
- }), /*#__PURE__*/_jsx(PlusMenuItemLabel, {
694
- $selected: !!isDeepSearchActive,
695
- children: t('chat.plusMenuDeepInvestigation')
696
- }), isDeepSearchActive ? /*#__PURE__*/_jsx(Check, {
697
- color: plusMenuSelectedColor,
698
- width: 16,
699
- height: 16
700
- }) : null]
601
+ $closeShown: activeToolChipHovered,
602
+ "aria-label": t('chat.removeActiveToolAria'),
603
+ onClick: function onClick(e) {
604
+ e.stopPropagation();
605
+ beginToolChipExit();
606
+ },
607
+ children: activeToolChipLeadingIcon
608
+ }), /*#__PURE__*/_jsx(ActiveToolChipLabel, {
609
+ children: isWebSearchActive ? t('chat.searchWeb') : t('chat.plusMenuDeepInvestigation')
701
610
  })]
702
- })
703
- }), (isWebSearchActive || isDeepSearchActive) && /*#__PURE__*/_jsxs(ActiveToolChipRoot, {
704
- $hovered: activeToolChipHovered,
705
- $exiting: toolChipExiting,
706
- onMouseEnter: function onMouseEnter() {
707
- return setActiveToolChipHovered(true);
708
- },
709
- onMouseLeave: function onMouseLeave() {
710
- return setActiveToolChipHovered(false);
711
- },
712
- children: [/*#__PURE__*/_jsx(ActiveToolChipIconButton, {
713
- type: "button",
714
- $closeShown: activeToolChipHovered,
715
- "aria-label": t('chat.removeActiveToolAria'),
716
- onClick: function onClick(e) {
717
- e.stopPropagation();
718
- beginToolChipExit();
719
- },
720
- children: activeToolChipLeadingIcon
721
- }), /*#__PURE__*/_jsx(ActiveToolChipLabel, {
722
- children: isWebSearchActive ? t('chat.searchWeb') : t('chat.plusMenuDeepInvestigation')
723
611
  })]
724
- })]
725
- }), isWriting ? /*#__PURE__*/_jsx(Tooltip, {
726
- title: t('chat.stop'),
727
- children: /*#__PURE__*/_jsx(StyledMAIAStopButton, {
728
- disabled: false,
729
- onClick: handleStopGeneration,
730
- className: className,
731
- children: /*#__PURE__*/_jsx(StyledMAIAStopIcon, {})
732
612
  })
733
- }) : /*#__PURE__*/_jsx(Tooltip, {
734
- title: isStreaming ? t('chat.send') : t('chat.send'),
735
- children: /*#__PURE__*/_jsx(StyledMAIASendButton, {
736
- onClick: handleSendMessage,
737
- className: className,
738
- disabled: isDisabled || disabled,
739
- hasValues: !!valueTextarea.length,
740
- children: /*#__PURE__*/_jsx(PaperPlane, {
741
- color: "#BFBFBF",
742
- width: 18,
743
- height: 18
613
+ }), /*#__PURE__*/_jsx("div", {
614
+ style: compactSingleRowToolbar ? {
615
+ gridColumn: 2,
616
+ gridRow: 1,
617
+ minWidth: 0,
618
+ alignSelf: 'center'
619
+ } : {
620
+ gridColumn: '1 / -1',
621
+ gridRow: 1,
622
+ minWidth: 0
623
+ },
624
+ children: /*#__PURE__*/_jsx(ContextMentionEditor, {
625
+ ref: editorRef,
626
+ disabled: disabled,
627
+ placeholder: placeholder,
628
+ onInput: handleEditorInput,
629
+ onKeyDown: handleKeyDown,
630
+ onFocus: handleWrapperFocus,
631
+ onBlur: handleWrapperBlur
632
+ })
633
+ }), /*#__PURE__*/_jsx(StyledMAIASendToolbarCell, {
634
+ $compactRow: compactSingleRowToolbar,
635
+ children: isWriting ? /*#__PURE__*/_jsx(Tooltip, {
636
+ title: t('chat.stop'),
637
+ children: /*#__PURE__*/_jsx(StyledMAIAStopButton, {
638
+ disabled: false,
639
+ onClick: handleStopGeneration,
640
+ className: className,
641
+ children: /*#__PURE__*/_jsx(StyledMAIAStopIcon, {})
642
+ })
643
+ }) : /*#__PURE__*/_jsx(Tooltip, {
644
+ title: t('chat.send'),
645
+ children: /*#__PURE__*/_jsx("span", {
646
+ style: {
647
+ display: 'inline-flex',
648
+ alignItems: 'center'
649
+ },
650
+ children: /*#__PURE__*/_jsx(StyledMAIASendButton, {
651
+ onClick: handleSendMessage,
652
+ className: className,
653
+ disabled: sendDisabled || disabled,
654
+ hasValues: hasTypingPresence || attachments.length > 0,
655
+ children: /*#__PURE__*/_jsx(PaperPlane, {
656
+ color: "#BFBFBF",
657
+ width: 18,
658
+ height: 18
659
+ })
660
+ })
744
661
  })
745
662
  })
746
663
  })]
@@ -766,7 +683,7 @@ export var MAIAInput = function MAIAInput(_ref) {
766
683
  excludedFiles: modalProps.excludedFiles,
767
684
  exceededFiles: modalProps.exceededFiles,
768
685
  fileSizes: modalProps.fileSizes
769
- })]
686
+ }), popoverNode && /*#__PURE__*/createPortal(popoverNode, document.body)]
770
687
  });
771
688
  };
772
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1c2VFZmZlY3QiLCJ1c2VSZWYiLCJ1c2VTdGF0ZSIsIlBvcG92ZXIiLCJQYXBlclBsYW5lIiwiQXR0YWNoIiwiR2xvYmUiLCJUcmFzaCIsIlBsdXMiLCJDaGVjayIsIkNyb3NzIiwiVG9vbHRpcCIsImNvbG9ycyIsIkFjdGl2ZVRvb2xDaGlwSWNvbkJ1dHRvbiIsIkFjdGl2ZVRvb2xDaGlwTGFiZWwiLCJBY3RpdmVUb29sQ2hpcFJvb3QiLCJQbHVzTWVudURpdmlkZXIiLCJQbHVzTWVudUlubmVyQ29sdW1uIiwiUGx1c01lbnVJdGVtQnV0dG9uIiwiUGx1c01lbnVJdGVtTGFiZWwiLCJQbHVzTWVudVBhcGVyIiwiUGx1c01lbnVUb29sc1JvdyIsIlBsdXNUb2dnbGVCdXR0b24iLCJTQ01JQXR0YWNobWVudCIsIlNDTUlBdHRhY2htZW50RGVsZXRlSWNvbiIsIlN0eWxlZE1BSUFJbnB1dCIsIlN0eWxlZE1BSUFJbnB1dEJ1dHRvbnMiLCJTdHlsZWRNQUlBSW5wdXRXcmFwcGVyIiwiU3R5bGVkTUFJQVNlbmRCdXR0b24iLCJTdHlsZWRNQUlBU3RvcEJ1dHRvbiIsIlN0eWxlZE1BSUFTdG9wSWNvbiIsInVzZUdsb2JhbENvbnRleHQiLCJNb2RhbEZpbGVFeGNlZWRzIiwidXNlVCIsIlRlbGVzY29wZUljb24iLCJFVkVOVFMiLCJ1c2VFdmVudCIsImdldENoYXRUb29sc01lbnVBZ2VudFR5cGUiLCJNQUlBX0NIQVRfSU5QVVRfVUkiLCJhbGxvd2VkRmlsZVR5cGVzIiwiZmlsZVR5cGVzIiwiTUFYX0ZJTEVfU0laRV9NQl9NQUlBX1ZJU0lPTiIsIk1BWF9GSUxFX1NJWkVfTUJfT0xEIiwiTUFYX0ZJTEVfU0laRV9NQl9BVURJTyIsIk1BWF9DSEFUX0lOUFVUX0FUVEFDSE1FTlRTIiwianN4IiwiX2pzeCIsImpzeHMiLCJfanN4cyIsIkZyYWdtZW50IiwiX0ZyYWdtZW50IiwiVE9PTF9DSElQX0VYSVRfTVMiLCJNQUlBSW5wdXQiLCJfcmVmIiwiX2FnZW50JGVudGl0eSIsIm9uU2VuZE1lc3NhZ2UiLCJjbGFzc05hbWUiLCJkaXNhYmxlZCIsImlzU3RyZWFtaW5nIiwiaXNXcml0aW5nIiwib25TdG9wR2VuZXJhdGlvbiIsInBsYWNlaG9sZGVyIiwib25DaGFuZ2UiLCJfcmVmJGFsaWduQnV0dG9ucyIsImFsaWduQnV0dG9ucyIsIm9uRmlsZUF0dGFjaCIsIm9uRGVsZXRlQXR0YWNobWVudCIsIl9yZWYkYXR0YWNobWVudHMiLCJhdHRhY2htZW50cyIsImNoYXRJZCIsIm5ld0NoYXRLZXkiLCJfdXNlVCIsInQiLCJpbnB1dFJlZiIsImZpbGVJbnB1dFJlZiIsIndyYXBwZXJSZWYiLCJfdXNlU3RhdGUiLCJfdXNlU3RhdGUyIiwiX3NsaWNlZFRvQXJyYXkiLCJ2YWx1ZVRleHRhcmVhIiwic2V0VmFsdWVUZXh0YXJlYSIsIl91c2VTdGF0ZTMiLCJfdXNlU3RhdGU0IiwiaXNEaXNhYmxlZCIsInNldElzRGlzYWJsZWQiLCJfdXNlU3RhdGU1IiwiX3VzZVN0YXRlNiIsImlzRm9jdXNlZCIsInNldElzRm9jdXNlZCIsIl91c2VTdGF0ZTciLCJpc09wZW4iLCJleGNsdWRlZEZpbGVzIiwiZXhjZWVkZWRGaWxlcyIsImZpbGVTaXplcyIsIl91c2VTdGF0ZTgiLCJtb2RhbFByb3BzIiwic2V0TW9kYWxQcm9wcyIsImV2ZW50QW1wbGl0dWRlIiwiX3VzZUdsb2JhbENvbnRleHQiLCJ0b2dnbGVXZWJTZWFyY2giLCJpc1dlYlNlYXJjaEFjdGl2ZSIsInRvZ2dsZURlZXBTZWFyY2giLCJpc0RlZXBTZWFyY2hBY3RpdmUiLCJhZ2VudCIsIl91c2VTdGF0ZTkiLCJfdXNlU3RhdGUwIiwicGx1c01lbnVBbmNob3IiLCJzZXRQbHVzTWVudUFuY2hvciIsIl91c2VTdGF0ZTEiLCJfdXNlU3RhdGUxMCIsImFjdGl2ZVRvb2xDaGlwSG92ZXJlZCIsInNldEFjdGl2ZVRvb2xDaGlwSG92ZXJlZCIsIl91c2VTdGF0ZTExIiwiX3VzZVN0YXRlMTIiLCJ0b29sQ2hpcEV4aXRpbmciLCJzZXRUb29sQ2hpcEV4aXRpbmciLCJ0b29sQ2hpcEV4aXRUaW1lclJlZiIsInNlYXJjaE1vZGVBY3RpdmVSZWYiLCJ3ZWIiLCJkZWVwIiwicGx1c01lbnVPcGVuIiwiQm9vbGVhbiIsImFuYWx5dGljc0FnZW50VHlwZSIsImFuYWx5dGljc0Nsb25lRW50aXR5UGF5bG9hZCIsInR5cGUiLCJlbnRpdHkiLCJzY2hlZHVsZUlucHV0Rm9jdXNBZnRlclRvb2xBY3Rpb24iLCJyZXF1ZXN0QW5pbWF0aW9uRnJhbWUiLCJ3aW5kb3ciLCJzZXRUaW1lb3V0IiwiX2lucHV0UmVmJGN1cnJlbnQiLCJjdXJyZW50IiwiZm9jdXMiLCJwcmV2ZW50U2Nyb2xsIiwiY2xvc2VQbHVzTWVudSIsImNhbmNlbFBlbmRpbmdUb29sQ2hpcEV4aXQiLCJjbGVhclRpbWVvdXQiLCJoYW5kbGVQbHVzQnV0dG9uQ2xpY2siLCJlIiwic3RvcFByb3BhZ2F0aW9uIiwiY3VycmVudFRhcmdldCIsImFpQ2hhdFBsdXNPcGVuIiwiX29iamVjdFNwcmVhZCIsImFnZW50X3R5cGUiLCJoYW5kbGVQbHVzTWVudUF0dGFjaCIsIl9maWxlSW5wdXRSZWYkY3VycmVudCIsImFpQ2hhdFRvb2xzIiwib3B0aW9uIiwibGVuZ3RoIiwiY2xpY2siLCJiZWdpblRvb2xDaGlwRXhpdCIsIndhc1dlYiIsIndhc0RlZXAiLCJfc2VhcmNoTW9kZUFjdGl2ZVJlZiQiLCJoYW5kbGVQbHVzTWVudVdlYlNlYXJjaCIsImhhbmRsZVBsdXNNZW51RGVlcFNlYXJjaCIsInByZXZpb3VzQWdlbnRJZFJlZiIsInVuZGVmaW5lZCIsInByZXZpb3VzQ2hhdElkUmVmIiwicHJldmlvdXNOZXdDaGF0S2V5UmVmIiwiaGFuZGxlUmVzaXplIiwidGV4dGFyZWEiLCJtaW5IZWlnaHQiLCJtYXhIZWlnaHQiLCJwcmV2aW91c01pbkhlaWdodCIsInN0eWxlIiwicHJldmlvdXNNYXhIZWlnaHQiLCJoZWlnaHQiLCJvZmZzZXRIZWlnaHQiLCJzY3JvbGxIZWlnaHQiLCJjb21wdXRlZFN0eWxlIiwiZ2V0Q29tcHV0ZWRTdHlsZSIsImxpbmVIZWlnaHQiLCJwYXJzZUZsb2F0IiwicGFkZGluZ1RvcCIsInBhZGRpbmdCb3R0b20iLCJib3JkZXJUb3AiLCJib3JkZXJUb3BXaWR0aCIsImJvcmRlckJvdHRvbSIsImJvcmRlckJvdHRvbVdpZHRoIiwic2luZ2xlTGluZUhlaWdodCIsImlzRW1wdHkiLCJ2YWx1ZSIsInRyaW0iLCJoYXNNdWx0aXBsZVZpc3VhbExpbmVzIiwiY2FudmFzIiwiZG9jdW1lbnQiLCJjcmVhdGVFbGVtZW50IiwiY29udGV4dCIsImdldENvbnRleHQiLCJ0ZXh0YXJlYVN0eWxlcyIsImZvbnQiLCJjb25jYXQiLCJmb250V2VpZ2h0IiwiZm9udFNpemUiLCJmb250RmFtaWx5IiwicGFkZGluZ0xlZnQiLCJwYWRkaW5nUmlnaHQiLCJib3JkZXJMZWZ0IiwiYm9yZGVyTGVmdFdpZHRoIiwiYm9yZGVyUmlnaHQiLCJib3JkZXJSaWdodFdpZHRoIiwidGV4dGFyZWFXaWR0aCIsIm9mZnNldFdpZHRoIiwidGV4dCIsImxpbmVzIiwic3BsaXQiLCJfaXRlcmF0b3IiLCJfY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlciIsIl9zdGVwIiwicyIsIm4iLCJkb25lIiwibGluZSIsInRleHRXaWR0aCIsIm1lYXN1cmVUZXh0Iiwid2lkdGgiLCJlcnIiLCJmIiwibmV3SGVpZ2h0IiwiTWF0aCIsIm1pbiIsIm1heCIsImFnZW50Q2hhbmdlZCIsImlkIiwicHJldmlvdXNDaGF0SWQiLCJjdXJyZW50Q2hhdElkIiwiY2hhdENoYW5nZWQiLCJjaGFuZ2VkRnJvbU5ld0NoYXRUb09sZENoYXQiLCJuZXdDaGF0U3RhcnRlZCIsImlzSW5pdGlhbE1vdW50IiwiZGVsYXkiLCJoYW5kbGVTZXNzaW9uQ2hhbmdlIiwiYWRkRXZlbnRMaXN0ZW5lciIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJhbmltYXRpb25GcmFtZUlkIiwiY2FuY2VsQW5pbWF0aW9uRnJhbWUiLCJoYXNUZXh0IiwiaGFzQXR0YWNobWVudHMiLCJoYW5kbGVTZW5kTWVzc2FnZSIsImhhbmRsZUtleURvd24iLCJrZXkiLCJzaGlmdEtleSIsInByZXZlbnREZWZhdWx0IiwiaGFuZGxlQ2hhbmdlIiwidGFyZ2V0IiwiaGFuZGxlUGFzdGUiLCJfaW5wdXRSZWYkY3VycmVudCR2YWwiLCJfaW5wdXRSZWYkY3VycmVudDIiLCJjdXJyZW50VmFsdWUiLCJoYW5kbGVGaWxlU2VsZWN0IiwiZmlsZXMiLCJmaWxlc0luc2VydGVkIiwiaXNOZXdGb3JtYXQiLCJleHRlbnNpb24iLCJpbmNsdWRlcyIsImlzT2xkRm9ybWF0IiwiaXNBdWRpb0Zvcm1hdCIsIkFycmF5IiwiZnJvbSIsImZvckVhY2giLCJmaWxlIiwiX2ZpbGVOYW1lUGFydHMkcG9wIiwiZXhjbHVkZWRGaWxlIiwiZmlsZU5hbWVQYXJ0cyIsIm5hbWUiLCJmaWxlRXh0ZW5zaW9uIiwicG9wIiwidG9Mb3dlckNhc2UiLCJzaXplIiwicHVzaCIsInR5cGVGaWxlIiwicGFyc2VkRmlsZSIsIkZpbGUiLCJoYW5kbGVEZWxldGVBdHRhY2htZW50IiwiZmlsZUlkIiwiaGFuZGxlQmx1ciIsImhhbmRsZVdyYXBwZXJGb2N1cyIsImhhbmRsZVdyYXBwZXJCbHVyIiwiX3dyYXBwZXJSZWYkY3VycmVudCIsImNvbnRhaW5zIiwiYWN0aXZlRWxlbWVudCIsImhhbmRsZVN0b3BHZW5lcmF0aW9uIiwiYWlDaGF0U3RvcFJlc3BvbnNlIiwicGx1c0ljb25Db2xvciIsInNlY29uZGFyeSIsIm1lZGl1bUdyYXkiLCJwbHVzTWVudUljb25Db2xvciIsIm1lbnVJY29uIiwicGx1c01lbnVTZWxlY3RlZENvbG9yIiwidGV4dEJyYW5kQm9sZCIsImFjdGl2ZVRvb2xDaGlwTGVhZGluZ0ljb24iLCJjb2xvciIsImNoaXBDbG9zZUljb24iLCJjaGlsZHJlbiIsInJlZiIsIm9uRm9jdXMiLCJvbkJsdXIiLCJkaXNwbGF5IiwiZ2FwIiwiYWxpZ25JdGVtcyIsIm1hcCIsImF0dGFjaG1lbnQiLCJpbmRleCIsIl9maWxlTmFtZVBhcnRzJHBvcDIiLCJfYXR0YWNobWVudCR0eXBlIiwiaXNJbWFnZUJ5RXh0ZW5zaW9uIiwiaXNJbWFnZUJ5TWltZSIsInN0YXJ0c1dpdGgiLCJpc0ltYWdlIiwidGl0bGUiLCJpY29uIiwib25DbGljayIsIm9uS2V5RG93biIsIm9uUGFzdGUiLCIkbWVudU9wZW4iLCJvcGVuIiwiYW5jaG9yRWwiLCJvbkNsb3NlIiwiYW5jaG9yT3JpZ2luIiwidmVydGljYWwiLCJob3Jpem9udGFsIiwidHJhbnNmb3JtT3JpZ2luIiwic2xvdFByb3BzIiwicGFwZXIiLCJlbGV2YXRpb24iLCJzeCIsIm92ZXJmbG93IiwiYm9yZGVyUmFkaXVzIiwiYm94U2hhZG93IiwiYmFja2dyb3VuZENvbG9yIiwibWFyZ2luVG9wIiwiJHNlbGVjdGVkIiwiJGhvdmVyZWQiLCIkZXhpdGluZyIsIm9uTW91c2VFbnRlciIsIm9uTW91c2VMZWF2ZSIsIiRjbG9zZVNob3duIiwiaGFzVmFsdWVzIiwibXVsdGlwbGUiLCJhY2NlcHQiXSwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50cy9hdG9tcy9NQUlBSW5wdXQvTUFJQUlucHV0LnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBuby1yZXN0cmljdGVkLXN5bnRheCAqL1xuLyogZXNsaW50LWRpc2FibGUgbm8tY29udGludWUgKi9cbi8qIGVzbGludC1kaXNhYmxlIG5vLXZvaWQgKi9cbi8qIGVzbGludC1kaXNhYmxlIHJlYWN0L25vLWFycmF5LWluZGV4LWtleSAqL1xuLyogZXNsaW50LWRpc2FibGUgbm8tbG9uZWx5LWlmICovXG4vKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55ICovXG4vKiBlc2xpbnQtZGlzYWJsZSBwcmVmZXItZGVzdHJ1Y3R1cmluZyAqL1xuLyogZXNsaW50LWRpc2FibGUganN4LWExMXkvY2xpY2stZXZlbnRzLWhhdmUta2V5LWV2ZW50cyAqL1xuLyogZXNsaW50LWRpc2FibGUgbm8tY29uc29sZSAqL1xuLyogZXNsaW50LWRpc2FibGUganN4LWExMXkvbm8tc3RhdGljLWVsZW1lbnQtaW50ZXJhY3Rpb25zICovXG5pbXBvcnQgeyBDaGFuZ2VFdmVudCwgS2V5Ym9hcmRFdmVudCwgTW91c2VFdmVudCwgUmVhY3ROb2RlLCB1c2VFZmZlY3QsIHVzZVJlZiwgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IFBvcG92ZXIgfSBmcm9tICdAbXVpL21hdGVyaWFsJ1xuaW1wb3J0IHsgUGFwZXJQbGFuZSB9IGZyb20gJ0Bwcm9qZWN0Y29yL2ljb25zL2xpYi9jb21wb25lbnRzL1BhcGVyUGxhbmUnXG5pbXBvcnQgeyBBdHRhY2ggfSBmcm9tICdAcHJvamVjdGNvci9pY29ucy9saWIvY29tcG9uZW50cy9BdHRhY2gnXG5pbXBvcnQgeyBHbG9iZSB9IGZyb20gJ0Bwcm9qZWN0Y29yL2ljb25zL2xpYi9jb21wb25lbnRzL0dsb2JlJ1xuaW1wb3J0IHsgVHJhc2ggfSBmcm9tICdAcHJvamVjdGNvci9pY29ucy9saWIvY29tcG9uZW50cy9UcmFzaCdcbmltcG9ydCB7IFBsdXMgfSBmcm9tICdAcHJvamVjdGNvci9pY29ucy9saWIvY29tcG9uZW50cy9QbHVzJ1xuaW1wb3J0IHsgQ2hlY2sgfSBmcm9tICdAcHJvamVjdGNvci9pY29ucy9saWIvY29tcG9uZW50cy9DaGVjaydcbmltcG9ydCB7IENyb3NzIH0gZnJvbSAnQHByb2plY3Rjb3IvaWNvbnMvbGliL2NvbXBvbmVudHMvQ3Jvc3MnXG5pbXBvcnQgeyBUb29sdGlwIH0gZnJvbSAnQHByb2plY3Rjb3IvdG9vbHRpcHYyL2xpYi9jb21wb25lbnRzL1Rvb2x0aXAnXG5pbXBvcnQgY29sb3JzIGZyb20gJ0Bwcm9qZWN0Y29yL3RoZW1lL2xpYi9iYXNlL2NvbG9ycydcblxuaW1wb3J0IHtcbiAgQWN0aXZlVG9vbENoaXBJY29uQnV0dG9uLFxuICBBY3RpdmVUb29sQ2hpcExhYmVsLFxuICBBY3RpdmVUb29sQ2hpcFJvb3QsXG4gIFBsdXNNZW51RGl2aWRlcixcbiAgUGx1c01lbnVJbm5lckNvbHVtbixcbiAgUGx1c01lbnVJdGVtQnV0dG9uLFxuICBQbHVzTWVudUl0ZW1MYWJlbCxcbiAgUGx1c01lbnVQYXBlcixcbiAgUGx1c01lbnVUb29sc1JvdyxcbiAgUGx1c1RvZ2dsZUJ1dHRvbixcbiAgU0NNSUF0dGFjaG1lbnQsXG4gIFNDTUlBdHRhY2htZW50RGVsZXRlSWNvbixcbiAgU3R5bGVkTUFJQUlucHV0LFxuICBTdHlsZWRNQUlBSW5wdXRCdXR0b25zLFxuICBTdHlsZWRNQUlBSW5wdXRXcmFwcGVyLFxuICBTdHlsZWRNQUlBU2VuZEJ1dHRvbixcbiAgU3R5bGVkTUFJQVN0b3BCdXR0b24sXG4gIFN0eWxlZE1BSUFTdG9wSWNvbixcbn0gZnJvbSAnLi9zdHlsZXMnXG5pbXBvcnQgeyB1c2VHbG9iYWxDb250ZXh0IH0gZnJvbSAnLi4vLi4vLi4vY29udGV4dC9nbG9iYWwtY29udGV4dCdcbmltcG9ydCB7IE1vZGFsRmlsZUV4Y2VlZHMgfSBmcm9tICcuLi8uLi9vcmdhbmlzbXMvTW9kYWxGaWxlRXhjZWVkcydcbmltcG9ydCB7IHVzZVQgfSBmcm9tICcuLi8uLi8uLi9ob29rcy91c2VUJ1xuaW1wb3J0IHsgVGVsZXNjb3BlSWNvbiB9IGZyb20gJy4uL2ljb25zL1RlbGVzY29wZUljb24nXG5pbXBvcnQgeyBFVkVOVFMsIHVzZUV2ZW50IH0gZnJvbSAnLi4vLi4vLi4vaG9va3MvdXNlRXZlbnQnXG5pbXBvcnQgeyBnZXRDaGF0VG9vbHNNZW51QWdlbnRUeXBlIH0gZnJvbSAnLi4vLi4vLi4vdXRpbHMvaGl0bEFuYWx5dGljcydcbmltcG9ydCB7IE1BSUFfQ0hBVF9JTlBVVF9VSSB9IGZyb20gJy4uLy4uLy4uL3N0eWxlcy9jb25maWcnXG5pbXBvcnQge1xuICBhbGxvd2VkRmlsZVR5cGVzLFxuICBmaWxlVHlwZXMsXG4gIE1BWF9GSUxFX1NJWkVfTUJfTUFJQV9WSVNJT04sXG4gIE1BWF9GSUxFX1NJWkVfTUJfT0xELFxuICBNQVhfRklMRV9TSVpFX01CX0FVRElPLFxuICBNQVhfQ0hBVF9JTlBVVF9BVFRBQ0hNRU5UUyxcbn0gZnJvbSAnLi4vLi4vLi4vY29uc3RhbnRzL2Zvcm1hdEV4dGVuc2lvbnMnXG5cbmNvbnN0IFRPT0xfQ0hJUF9FWElUX01TID0gMjIwXG5cbnR5cGUgQXR0YWNobWVudEZpbGUgPSB7XG4gIGZpbGU6IEZpbGVcbiAgb3JpZ2luYWxGaWxlPzogRmlsZVxuICBpZDogc3RyaW5nXG4gIG5hbWU6IHN0cmluZ1xuICBzaXplOiBudW1iZXJcbiAgdHlwZTogc3RyaW5nXG4gIGljb24/OiBSZWFjdE5vZGVcbn1cblxudHlwZSBNQUlBSW5wdXRQcm9wcyA9IHtcbiAgY2xhc3NOYW1lPzogc3RyaW5nXG4gIGRpc2FibGVkPzogYm9vbGVhblxuICBvblNlbmRNZXNzYWdlOiAobWVzc2FnZTogc3RyaW5nLCBhdHRhY2htZW50cz86IEF0dGFjaG1lbnRGaWxlW10pID0+IHZvaWRcbiAgb25TdG9wR2VuZXJhdGlvbj86ICgpID0+IHZvaWRcbiAgaXNTdHJlYW1pbmc/OiBib29sZWFuXG4gIGlzV3JpdGluZz86IGJvb2xlYW5cbiAgcGxhY2Vob2xkZXI/OiBzdHJpbmdcbiAgb25DaGFuZ2U/OiAoKSA9PiB2b2lkXG4gIGFsaWduQnV0dG9ucz86ICdob3Jpem9udGFsJyB8ICd2ZXJ0aWNhbCdcbiAgb25GaWxlQXR0YWNoPzogKGZpbGU6IEZpbGUpID0+IHZvaWRcbiAgb25EZWxldGVBdHRhY2htZW50PzogKGZpbGVJZDogc3RyaW5nKSA9PiB2b2lkXG4gIGF0dGFjaG1lbnRzPzogQXR0YWNobWVudEZpbGVbXVxuICBjaGF0SWQ/OiBzdHJpbmdcbiAgbmV3Q2hhdEtleT86IG51bWJlclxufVxuXG5leHBvcnQgY29uc3QgTUFJQUlucHV0ID0gKHtcbiAgb25TZW5kTWVzc2FnZSxcbiAgY2xhc3NOYW1lLFxuICBkaXNhYmxlZCxcbiAgaXNTdHJlYW1pbmcsXG4gIGlzV3JpdGluZyxcbiAgb25TdG9wR2VuZXJhdGlvbixcbiAgcGxhY2Vob2xkZXIsXG4gIG9uQ2hhbmdlLFxuICBhbGlnbkJ1dHRvbnMgPSAndmVydGljYWwnLFxuICBvbkZpbGVBdHRhY2gsXG4gIG9uRGVsZXRlQXR0YWNobWVudCxcbiAgYXR0YWNobWVudHMgPSBbXSxcbiAgY2hhdElkLFxuICBuZXdDaGF0S2V5LFxufTogTUFJQUlucHV0UHJvcHMpID0+IHtcbiAgY29uc3QgeyB0IH0gPSB1c2VUKClcbiAgY29uc3QgaW5wdXRSZWYgPSB1c2VSZWY8SFRNTFRleHRBcmVhRWxlbWVudD4obnVsbClcbiAgY29uc3QgZmlsZUlucHV0UmVmID0gdXNlUmVmPEhUTUxJbnB1dEVsZW1lbnQ+KG51bGwpXG4gIGNvbnN0IHdyYXBwZXJSZWYgPSB1c2VSZWY8SFRNTERpdkVsZW1lbnQ+KG51bGwpXG4gIGNvbnN0IFt2YWx1ZVRleHRhcmVhLCBzZXRWYWx1ZVRleHRhcmVhXSA9IHVzZVN0YXRlKCcnKVxuICBjb25zdCBbaXNEaXNhYmxlZCwgc2V0SXNEaXNhYmxlZF0gPSB1c2VTdGF0ZSh0cnVlKVxuICBjb25zdCBbaXNGb2N1c2VkLCBzZXRJc0ZvY3VzZWRdID0gdXNlU3RhdGUoZmFsc2UpXG4gIGNvbnN0IFttb2RhbFByb3BzLCBzZXRNb2RhbFByb3BzXSA9IHVzZVN0YXRlKHtcbiAgICBpc09wZW46IGZhbHNlLFxuICAgIGV4Y2x1ZGVkRmlsZXM6IFtdIGFzIHN0cmluZ1tdLFxuICAgIGV4Y2VlZGVkRmlsZXM6IFtdIGFzIHN0cmluZ1tdLFxuICAgIGZpbGVTaXplczoge30gYXMgUmVjb3JkPHN0cmluZywgbnVtYmVyPixcbiAgfSlcbiAgY29uc3QgZXZlbnRBbXBsaXR1ZGUgPSB1c2VFdmVudCgpXG4gIGNvbnN0IHsgdG9nZ2xlV2ViU2VhcmNoLCBpc1dlYlNlYXJjaEFjdGl2ZSwgdG9nZ2xlRGVlcFNlYXJjaCwgaXNEZWVwU2VhcmNoQWN0aXZlLCBhZ2VudCB9ID0gdXNlR2xvYmFsQ29udGV4dCgpXG4gIGNvbnN0IFtwbHVzTWVudUFuY2hvciwgc2V0UGx1c01lbnVBbmNob3JdID0gdXNlU3RhdGU8SFRNTEJ1dHRvbkVsZW1lbnQgfCBudWxsPihudWxsKVxuICBjb25zdCBbYWN0aXZlVG9vbENoaXBIb3ZlcmVkLCBzZXRBY3RpdmVUb29sQ2hpcEhvdmVyZWRdID0gdXNlU3RhdGUoZmFsc2UpXG4gIGNvbnN0IFt0b29sQ2hpcEV4aXRpbmcsIHNldFRvb2xDaGlwRXhpdGluZ10gPSB1c2VTdGF0ZShmYWxzZSlcbiAgY29uc3QgdG9vbENoaXBFeGl0VGltZXJSZWYgPSB1c2VSZWY8UmV0dXJuVHlwZTx0eXBlb2Ygc2V0VGltZW91dD4gfCBudWxsPihudWxsKVxuICBjb25zdCBzZWFyY2hNb2RlQWN0aXZlUmVmID0gdXNlUmVmKHsgd2ViOiBmYWxzZSwgZGVlcDogZmFsc2UgfSlcbiAgY29uc3QgcGx1c01lbnVPcGVuID0gQm9vbGVhbihwbHVzTWVudUFuY2hvcilcblxuICBjb25zdCBhbmFseXRpY3NBZ2VudFR5cGUgPSBnZXRDaGF0VG9vbHNNZW51QWdlbnRUeXBlKGFnZW50KVxuICBjb25zdCBhbmFseXRpY3NDbG9uZUVudGl0eVBheWxvYWQgPSBhZ2VudD8udHlwZSA9PT0gJ2Nsb25lJyA/IHsgZW50aXR5OiBhZ2VudC5lbnRpdHkgPz8gbnVsbCB9IDoge31cblxuICAvKiogVHJhcyBlbGVnaXIgbyBxdWl0YXIgYsO6c3F1ZWRhIHdlYi9wcm9mdW5kYTogdm9sdmVyIGFsIHRleHRhcmVhIChQb3BvdmVyL21lbnUgcHVlZGUgcm9iYXIgZm9jbykuICovXG4gIGNvbnN0IHNjaGVkdWxlSW5wdXRGb2N1c0FmdGVyVG9vbEFjdGlvbiA9ICgpID0+IHtcbiAgICBpZiAoZGlzYWJsZWQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuICAgICAgd2luZG93LnNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBpbnB1dFJlZi5jdXJyZW50Py5mb2N1cyh7IHByZXZlbnRTY3JvbGw6IHRydWUgfSlcbiAgICAgIH0sIDApXG4gICAgfSlcbiAgfVxuXG4gIGNvbnN0IGNsb3NlUGx1c01lbnUgPSAoKSA9PiB7XG4gICAgc2V0UGx1c01lbnVBbmNob3IobnVsbClcbiAgfVxuXG4gIGNvbnN0IGNhbmNlbFBlbmRpbmdUb29sQ2hpcEV4aXQgPSAoKSA9PiB7XG4gICAgaWYgKHRvb2xDaGlwRXhpdFRpbWVyUmVmLmN1cnJlbnQgIT09IG51bGwpIHtcbiAgICAgIGNsZWFyVGltZW91dCh0b29sQ2hpcEV4aXRUaW1lclJlZi5jdXJyZW50KVxuICAgICAgdG9vbENoaXBFeGl0VGltZXJSZWYuY3VycmVudCA9IG51bGxcbiAgICB9XG4gICAgc2V0VG9vbENoaXBFeGl0aW5nKGZhbHNlKVxuICB9XG5cbiAgY29uc3QgaGFuZGxlUGx1c0J1dHRvbkNsaWNrID0gKGU6IE1vdXNlRXZlbnQ8SFRNTEJ1dHRvbkVsZW1lbnQ+KSA9PiB7XG4gICAgZS5zdG9wUHJvcGFnYXRpb24oKVxuICAgIGlmIChwbHVzTWVudUFuY2hvcikge1xuICAgICAgY2xvc2VQbHVzTWVudSgpXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgc2V0UGx1c01lbnVBbmNob3IoZS5jdXJyZW50VGFyZ2V0KVxuICAgIGV2ZW50QW1wbGl0dWRlKEVWRU5UUy5haUNoYXRQbHVzT3BlbiwgeyBhZ2VudF90eXBlOiBhbmFseXRpY3NBZ2VudFR5cGUsIC4uLmFuYWx5dGljc0Nsb25lRW50aXR5UGF5bG9hZCB9KVxuICB9XG5cbiAgY29uc3QgaGFuZGxlUGx1c01lbnVBdHRhY2ggPSAoKSA9PiB7XG4gICAgY2xvc2VQbHVzTWVudSgpXG4gICAgZXZlbnRBbXBsaXR1ZGUoRVZFTlRTLmFpQ2hhdFRvb2xzLCB7XG4gICAgICBhZ2VudF90eXBlOiBhbmFseXRpY3NBZ2VudFR5cGUsXG4gICAgICBvcHRpb246ICdmaWxlcycsXG4gICAgICAuLi5hbmFseXRpY3NDbG9uZUVudGl0eVBheWxvYWQsXG4gICAgfSlcbiAgICBpZiAoYXR0YWNobWVudHMubGVuZ3RoID49IE1BWF9DSEFUX0lOUFVUX0FUVEFDSE1FTlRTKSByZXR1cm5cbiAgICBmaWxlSW5wdXRSZWYuY3VycmVudD8uY2xpY2soKVxuICB9XG5cbiAgY29uc3QgYmVnaW5Ub29sQ2hpcEV4aXQgPSAoKSA9PiB7XG4gICAgaWYgKHRvb2xDaGlwRXhpdFRpbWVyUmVmLmN1cnJlbnQgIT09IG51bGwpIHtcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBjb25zdCB3YXNXZWIgPSBpc1dlYlNlYXJjaEFjdGl2ZVxuICAgIGNvbnN0IHdhc0RlZXAgPSBpc0RlZXBTZWFyY2hBY3RpdmVcbiAgICBpZiAoIXdhc1dlYiAmJiAhd2FzRGVlcCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIHNldFRvb2xDaGlwRXhpdGluZyh0cnVlKVxuICAgIHRvb2xDaGlwRXhpdFRpbWVyUmVmLmN1cnJlbnQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRvb2xDaGlwRXhpdFRpbWVyUmVmLmN1cnJlbnQgPSBudWxsXG4gICAgICBjb25zdCB7IHdlYiwgZGVlcCB9ID0gc2VhcmNoTW9kZUFjdGl2ZVJlZi5jdXJyZW50XG4gICAgICBpZiAod2FzV2ViICYmIHdlYikge1xuICAgICAgICB0b2dnbGVXZWJTZWFyY2goKVxuICAgICAgfSBlbHNlIGlmICh3YXNEZWVwICYmIGRlZXApIHtcbiAgICAgICAgdG9nZ2xlRGVlcFNlYXJjaCgpXG4gICAgICB9XG4gICAgICBzZXRUb29sQ2hpcEV4aXRpbmcoZmFsc2UpXG4gICAgICBzY2hlZHVsZUlucHV0Rm9jdXNBZnRlclRvb2xBY3Rpb24oKVxuICAgIH0sIFRPT0xfQ0hJUF9FWElUX01TKVxuICB9XG5cbiAgY29uc3QgaGFuZGxlUGx1c01lbnVXZWJTZWFyY2ggPSAoKSA9PiB7XG4gICAgY2xvc2VQbHVzTWVudSgpXG4gICAgaWYgKGlzV2ViU2VhcmNoQWN0aXZlKSB7XG4gICAgICBiZWdpblRvb2xDaGlwRXhpdCgpXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgY2FuY2VsUGVuZGluZ1Rvb2xDaGlwRXhpdCgpXG4gICAgaWYgKGlzRGVlcFNlYXJjaEFjdGl2ZSkge1xuICAgICAgdG9nZ2xlRGVlcFNlYXJjaCgpXG4gICAgfVxuICAgIHRvZ2dsZVdlYlNlYXJjaCgpXG4gICAgZXZlbnRBbXBsaXR1ZGUoRVZFTlRTLmFpQ2hhdFRvb2xzLCB7XG4gICAgICBhZ2VudF90eXBlOiBhbmFseXRpY3NBZ2VudFR5cGUsXG4gICAgICBvcHRpb246ICdzZWFyY2gnLFxuICAgICAgLi4uYW5hbHl0aWNzQ2xvbmVFbnRpdHlQYXlsb2FkLFxuICAgIH0pXG4gICAgc2NoZWR1bGVJbnB1dEZvY3VzQWZ0ZXJUb29sQWN0aW9uKClcbiAgfVxuXG4gIGNvbnN0IGhhbmRsZVBsdXNNZW51RGVlcFNlYXJjaCA9ICgpID0+IHtcbiAgICBjbG9zZVBsdXNNZW51KClcbiAgICBpZiAoaXNEZWVwU2VhcmNoQWN0aXZlKSB7XG4gICAgICBiZWdpblRvb2xDaGlwRXhpdCgpXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgY2FuY2VsUGVuZGluZ1Rvb2xDaGlwRXhpdCgpXG4gICAgaWYgKGlzV2ViU2VhcmNoQWN0aXZlKSB7XG4gICAgICB0b2dnbGVXZWJTZWFyY2goKVxuICAgIH1cbiAgICB0b2dnbGVEZWVwU2VhcmNoKClcbiAgICBldmVudEFtcGxpdHVkZShFVkVOVFMuYWlDaGF0VG9vbHMsIHtcbiAgICAgIGFnZW50X3R5cGU6IGFuYWx5dGljc0FnZW50VHlwZSxcbiAgICAgIG9wdGlvbjogJ2RlZXBfc2VhcmNoJyxcbiAgICAgIC4uLmFuYWx5dGljc0Nsb25lRW50aXR5UGF5bG9hZCxcbiAgICB9KVxuICAgIHNjaGVkdWxlSW5wdXRGb2N1c0FmdGVyVG9vbEFjdGlvbigpXG4gIH1cblxuICAvLyBJbmljaWFsaXphciBsYXMgcmVmZXJlbmNpYXMgY29tbyB1bmRlZmluZWQgcGFyYSBkZXRlY3RhciBlbCBwcmltZXIgY2FtYmlvIGNvcnJlY3RhbWVudGVcbiAgY29uc3QgcHJldmlvdXNBZ2VudElkUmVmID0gdXNlUmVmPHN0cmluZyB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKVxuICBjb25zdCBwcmV2aW91c0NoYXRJZFJlZiA9IHVzZVJlZjxzdHJpbmcgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZClcbiAgY29uc3QgcHJldmlvdXNOZXdDaGF0S2V5UmVmID0gdXNlUmVmPG51bWJlciB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKVxuXG4gIGNvbnN0IGhhbmRsZVJlc2l6ZSA9ICgpID0+IHtcbiAgICBjb25zdCB0ZXh0YXJlYSA9IGlucHV0UmVmLmN1cnJlbnRcbiAgICBpZiAoIXRleHRhcmVhKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICAvLyBBbHR1cmEgbcOtbmltYSBlcXVpdmFsZW50ZSBhIHVuYSBsw61uZWFcbiAgICBjb25zdCBtaW5IZWlnaHQgPSAyMi4xXG4gICAgY29uc3QgbWF4SGVpZ2h0ID0gMTIyLjFcblxuICAgIC8vIFBhcmEgbWVkaXIgY29ycmVjdGFtZW50ZSBlbCBzY3JvbGxIZWlnaHQsIG5lY2VzaXRhbW9zIHF1aXRhciB0ZW1wb3JhbG1lbnRlIGxhcyByZXN0cmljY2lvbmVzXG4gICAgY29uc3QgcHJldmlvdXNNaW5IZWlnaHQgPSB0ZXh0YXJlYS5zdHlsZS5taW5IZWlnaHRcbiAgICBjb25zdCBwcmV2aW91c01heEhlaWdodCA9IHRleHRhcmVhLnN0eWxlLm1heEhlaWdodFxuXG4gICAgLy8gRXN0YWJsZWNlciBhbHR1cmEgYSAnYXV0bycgeSBxdWl0YXIgdGVtcG9yYWxtZW50ZSBtaW4taGVpZ2h0IHkgbWF4LWhlaWdodCBwYXJhIG1lZGlyIGNvcnJlY3RhbWVudGVcbiAgICB0ZXh0YXJlYS5zdHlsZS5oZWlnaHQgPSAnYXV0bydcbiAgICB0ZXh0YXJlYS5zdHlsZS5taW5IZWlnaHQgPSAnMHB4J1xuICAgIHRleHRhcmVhLnN0eWxlLm1heEhlaWdodCA9ICdub25lJ1xuXG4gICAgLy8gRm9yemFyIHJlZmxvdyBwYXJhIHF1ZSBlbCBuYXZlZ2Fkb3IgcmVjYWxjdWxlXG4gICAgdm9pZCB0ZXh0YXJlYS5vZmZzZXRIZWlnaHRcblxuICAgIC8vIEFob3JhIG1lZGlyIGVsIHNjcm9sbEhlaWdodCByZWFsIHNpbiByZXN0cmljY2lvbmVzXG4gICAgY29uc3Qgc2Nyb2xsSGVpZ2h0ID0gdGV4dGFyZWEuc2Nyb2xsSGVpZ2h0XG5cbiAgICAvLyBDYWxjdWxhciBsYSBhbHR1cmEgZGUgdW5hIGzDrW5lYSB1c2FuZG8gbG9zIGVzdGlsb3MgY29tcHV0YWRvc1xuICAgIGNvbnN0IGNvbXB1dGVkU3R5bGUgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0ZXh0YXJlYSlcbiAgICBjb25zdCBsaW5lSGVpZ2h0ID0gcGFyc2VGbG9hdChjb21wdXRlZFN0eWxlLmxpbmVIZWlnaHQpIHx8IDIwIC8vIEZhbGxiYWNrIGEgMjBweCBzaSBubyBlc3TDoSBkZWZpbmlkb1xuICAgIGNvbnN0IHBhZGRpbmdUb3AgPSBwYXJzZUZsb2F0KGNvbXB1dGVkU3R5bGUucGFkZGluZ1RvcCkgfHwgMFxuICAgIGNvbnN0IHBhZGRpbmdCb3R0b20gPSBwYXJzZUZsb2F0KGNvbXB1dGVkU3R5bGUucGFkZGluZ0JvdHRvbSkgfHwgMFxuICAgIGNvbnN0IGJvcmRlclRvcCA9IHBhcnNlRmxvYXQoY29tcHV0ZWRTdHlsZS5ib3JkZXJUb3BXaWR0aCkgfHwgMFxuICAgIGNvbnN0IGJvcmRlckJvdHRvbSA9IHBhcnNlRmxvYXQoY29tcHV0ZWRTdHlsZS5ib3JkZXJCb3R0b21XaWR0aCkgfHwgMFxuXG4gICAgLy8gQWx0dXJhIGRlIHVuYSBsw61uZWEgY29tcGxldGEgKGxpbmUtaGVpZ2h0ICsgcGFkZGluZyArIGJvcmRlcilcbiAgICBjb25zdCBzaW5nbGVMaW5lSGVpZ2h0ID0gbGluZUhlaWdodCArIHBhZGRpbmdUb3AgKyBwYWRkaW5nQm90dG9tICsgYm9yZGVyVG9wICsgYm9yZGVyQm90dG9tXG5cbiAgICBjb25zdCBpc0VtcHR5ID0gdGV4dGFyZWEudmFsdWUudHJpbSgpID09PSAnJ1xuXG4gICAgLy8gTWVkaXIgZWwgYW5jaG8gZGVsIHRleHRvIHVzYW5kbyBDYW52YXMgcGFyYSBkZXRlcm1pbmFyIHNpIHNlIGVudnVlbHZlIGEgbcO6bHRpcGxlcyBsw61uZWFzXG4gICAgbGV0IGhhc011bHRpcGxlVmlzdWFsTGluZXMgPSBmYWxzZVxuXG4gICAgY29uc3QgY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJylcbiAgICBjb25zdCBjb250ZXh0ID0gY2FudmFzLmdldENvbnRleHQoJzJkJylcblxuICAgIGlmICghY29udGV4dCkge1xuICAgICAgLy8gRmFsbGJhY2sgc2kgQ2FudmFzIG5vIGVzdMOhIGRpc3BvbmlibGU6IHVzYXIgc2Nyb2xsSGVpZ2h0XG4gICAgICBoYXNNdWx0aXBsZVZpc3VhbExpbmVzID0gc2Nyb2xsSGVpZ2h0ID4gc2luZ2xlTGluZUhlaWdodCAqIDEuNVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCB0ZXh0YXJlYVN0eWxlcyA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHRleHRhcmVhKVxuICAgICAgY29udGV4dC5mb250ID0gYCR7dGV4dGFyZWFTdHlsZXMuZm9udFdlaWdodH0gJHt0ZXh0YXJlYVN0eWxlcy5mb250U2l6ZX0gJHt0ZXh0YXJlYVN0eWxlcy5mb250RmFtaWx5fWBcblxuICAgICAgLy8gQ2FsY3VsYXIgZWwgYW5jaG8gZGlzcG9uaWJsZSAoYW5jaG8gdG90YWwgbWVub3MgcGFkZGluZyBpenF1aWVyZG8vZGVyZWNobyB5IGJvcmRlciBpenF1aWVyZG8vZGVyZWNobylcbiAgICAgIGNvbnN0IHBhZGRpbmdMZWZ0ID0gcGFyc2VGbG9hdChjb21wdXRlZFN0eWxlLnBhZGRpbmdMZWZ0KSB8fCAwXG4gICAgICBjb25zdCBwYWRkaW5nUmlnaHQgPSBwYXJzZUZsb2F0KGNvbXB1dGVkU3R5bGUucGFkZGluZ1JpZ2h0KSB8fCAwXG4gICAgICBjb25zdCBib3JkZXJMZWZ0ID0gcGFyc2VGbG9hdChjb21wdXRlZFN0eWxlLmJvcmRlckxlZnRXaWR0aCkgfHwgMFxuICAgICAgY29uc3QgYm9yZGVyUmlnaHQgPSBwYXJzZUZsb2F0KGNvbXB1dGVkU3R5bGUuYm9yZGVyUmlnaHRXaWR0aCkgfHwgMFxuICAgICAgY29uc3QgdGV4dGFyZWFXaWR0aCA9IHRleHRhcmVhLm9mZnNldFdpZHRoIC0gcGFkZGluZ0xlZnQgLSBwYWRkaW5nUmlnaHQgLSBib3JkZXJMZWZ0IC0gYm9yZGVyUmlnaHRcbiAgICAgIGNvbnN0IHRleHQgPSB0ZXh0YXJlYS52YWx1ZSB8fCAnJ1xuICAgICAgY29uc3QgbGluZXMgPSB0ZXh0LnNwbGl0KCdcXG4nKVxuXG4gICAgICAvLyBTaSBoYXkgbcO6bHRpcGxlcyBsw61uZWFzIHBvciBzYWx0b3MgZGUgbMOtbmVhIGV4cGzDrWNpdG9zXG4gICAgICBpZiAobGluZXMubGVuZ3RoID4gMSkge1xuICAgICAgICBoYXNNdWx0aXBsZVZpc3VhbExpbmVzID0gdHJ1ZVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gVmVyaWZpY2FyIHNpIGVsIHRleHRvIHNlIGVudnVlbHZlIG1pZGllbmRvIGVsIGFuY2hvIGRlIGNhZGEgbMOtbmVhXG4gICAgICAgIGZvciAoY29uc3QgbGluZSBvZiBsaW5lcykge1xuICAgICAgICAgIGlmIChsaW5lLnRyaW0oKSA9PT0gJycpIGNvbnRpbnVlXG4gICAgICAgICAgY29uc3QgdGV4dFdpZHRoID0gY29udGV4dC5tZWFzdXJlVGV4dChsaW5lKS53aWR0aFxuICAgICAgICAgIC8vIFNpIGFsZ3VuYSBsw61uZWEgZXMgbcOhcyBhbmNoYSBxdWUgZWwgdGV4dGFyZWEgZGlzcG9uaWJsZSwgc2UgZW52dWVsdmVcbiAgICAgICAgICBpZiAodGV4dFdpZHRoID4gdGV4dGFyZWFXaWR0aCkge1xuICAgICAgICAgICAgaGFzTXVsdGlwbGVWaXN1YWxMaW5lcyA9IHRydWVcbiAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgbGV0IG5ld0hlaWdodDogbnVtYmVyXG4gICAgaWYgKGlzRW1wdHkpIHtcbiAgICAgIC8vIEN1YW5kbyBlc3TDoSB2YWPDrW8sIHVzYXIgYWx0dXJhIG3DrW5pbWFcbiAgICAgIG5ld0hlaWdodCA9IG1pbkhlaWdodFxuICAgIH0gZWxzZSBpZiAoIWhhc011bHRpcGxlVmlzdWFsTGluZXMpIHtcbiAgICAgIC8vIEN1YW5kbyBoYXkgY29udGVuaWRvIHBlcm8gc29sbyB1bmEgbMOtbmVhIHZpc3VhbCwgdXNhciBhbHR1cmEgbcOtbmltYVxuICAgICAgbmV3SGVpZ2h0ID0gbWluSGVpZ2h0XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFBhcmEgbcO6bHRpcGxlcyBsw61uZWFzIHZpc3VhbGVzLCB1c2FyIGVsIHNjcm9sbEhlaWdodFxuICAgICAgbmV3SGVpZ2h0ID0gTWF0aC5taW4oTWF0aC5tYXgoc2Nyb2xsSGVpZ2h0LCBtaW5IZWlnaHQpLCBtYXhIZWlnaHQpXG4gICAgfVxuXG4gICAgLy8gUmVzdGF1cmFyIGVzdGlsb3MgYW50ZXMgZGUgYXBsaWNhciBsYSBudWV2YSBhbHR1cmFcbiAgICB0ZXh0YXJlYS5zdHlsZS5taW5IZWlnaHQgPSBwcmV2aW91c01pbkhlaWdodCB8fCAnMjIuMXB4J1xuICAgIHRleHRhcmVhLnN0eWxlLm1heEhlaWdodCA9IHByZXZpb3VzTWF4SGVpZ2h0IHx8ICcxMjIuMXB4J1xuXG4gICAgdGV4dGFyZWEuc3R5bGUuaGVpZ2h0ID0gYCR7bmV3SGVpZ2h0fXB4YFxuICB9XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoaW5wdXRSZWYuY3VycmVudCAmJiAhZGlzYWJsZWQpIHtcbiAgICAgIGlucHV0UmVmLmN1cnJlbnQuZm9jdXMoKVxuICAgICAgaGFuZGxlUmVzaXplKClcbiAgICB9XG4gIH0sIFtkaXNhYmxlZF0pXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBzZWFyY2hNb2RlQWN0aXZlUmVmLmN1cnJlbnQgPSB7IHdlYjogaXNXZWJTZWFyY2hBY3RpdmUsIGRlZXA6IGlzRGVlcFNlYXJjaEFjdGl2ZSB9XG4gIH0sIFtpc1dlYlNlYXJjaEFjdGl2ZSwgaXNEZWVwU2VhcmNoQWN0aXZlXSlcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBpZiAodG9vbENoaXBFeGl0VGltZXJSZWYuY3VycmVudCAhPT0gbnVsbCkge1xuICAgICAgICBjbGVhclRpbWVvdXQodG9vbENoaXBFeGl0VGltZXJSZWYuY3VycmVudClcbiAgICAgIH1cbiAgICB9XG4gIH0sIFtdKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFpc1dlYlNlYXJjaEFjdGl2ZSAmJiAhaXNEZWVwU2VhcmNoQWN0aXZlKSB7XG4gICAgICBzZXRBY3RpdmVUb29sQ2hpcEhvdmVyZWQoZmFsc2UpXG4gICAgfVxuICB9LCBbaXNXZWJTZWFyY2hBY3RpdmUsIGlzRGVlcFNlYXJjaEFjdGl2ZV0pXG5cbiAgLy8gQXV0by1mb2N1cyBjdWFuZG8gY2FtYmlhIGVsIGFnZW50ZSBvIGxhIGNvbnZlcnNhY2nDs24sIG8gYWwgbW9udGFyIGVsIGNvbXBvbmVudGVcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAvLyBDb21wYXJhY2nDs24gcXVlIG1hbmVqYSBjb3JyZWN0YW1lbnRlIHVuZGVmaW5lZC9udWxsXG4gICAgY29uc3QgYWdlbnRDaGFuZ2VkID0gcHJldmlvdXNBZ2VudElkUmVmLmN1cnJlbnQgIT09IGFnZW50Py5pZFxuICAgIC8vIENvbXBhcmFjacOzbiBlc3RyaWN0YSBxdWUgZGV0ZWN0YSBjYW1iaW9zIGluY2x1c28gY3VhbmRvIHVubyBlcyB1bmRlZmluZWRcbiAgICBjb25zdCBwcmV2aW91c0NoYXRJZCA9IHByZXZpb3VzQ2hhdElkUmVmLmN1cnJlbnRcbiAgICBjb25zdCBjdXJyZW50Q2hhdElkID0gY2hhdElkXG4gICAgY29uc3QgY2hhdENoYW5nZWQgPSBwcmV2aW91c0NoYXRJZCAhPT0gY3VycmVudENoYXRJZFxuICAgIC8vIERldGVjdGFyIGNhbWJpbyBlc3BlY8OtZmljbyBkZSB1bmRlZmluZWQvbnVsbCBhIHVuIHZhbG9yIChudWV2byBjaGF0IC0+IGNvbnZlcnNhY2nDs24gdmllamEpXG4gICAgY29uc3QgY2hhbmdlZEZyb21OZXdDaGF0VG9PbGRDaGF0ID1cbiAgICAgIChwcmV2aW91c0NoYXRJZCA9PT0gdW5kZWZpbmVkIHx8IHByZXZpb3VzQ2hhdElkID09PSBudWxsKSAmJiBjdXJyZW50Q2hhdElkICE9PSB1bmRlZmluZWQgJiYgY3VycmVudENoYXRJZCAhPT0gbnVsbFxuICAgIGNvbnN0IG5ld0NoYXRTdGFydGVkID0gcHJldmlvdXNOZXdDaGF0S2V5UmVmLmN1cnJlbnQgIT09IG5ld0NoYXRLZXlcbiAgICBjb25zdCBpc0luaXRpYWxNb3VudCA9IHByZXZpb3VzQWdlbnRJZFJlZi5jdXJyZW50ID09PSB1bmRlZmluZWQgJiYgcHJldmlvdXNDaGF0SWRSZWYuY3VycmVudCA9PT0gdW5kZWZpbmVkXG5cbiAgICBpZiAoXG4gICAgICAoYWdlbnRDaGFuZ2VkIHx8IGNoYXRDaGFuZ2VkIHx8IGNoYW5nZWRGcm9tTmV3Q2hhdFRvT2xkQ2hhdCB8fCBuZXdDaGF0U3RhcnRlZCB8fCBpc0luaXRpYWxNb3VudCkgJiZcbiAgICAgIGlucHV0UmVmLmN1cnJlbnQgJiZcbiAgICAgICFkaXNhYmxlZFxuICAgICkge1xuICAgICAgLy8gVXNhciBzZXRUaW1lb3V0IHBhcmEgYXNlZ3VyYXIgcXVlIGVsIERPTSBlc3TDqSBsaXN0b1xuICAgICAgLy8gQXVtZW50YXIgZWwgZGVsYXkgcGFyYSBjYXNvcyBkb25kZSBlbCBjb21wb25lbnRlIHNlIGVzdMOhIG1vbnRhbmRvXG4gICAgICBjb25zdCBkZWxheSA9IGlzSW5pdGlhbE1vdW50IHx8IGNoYW5nZWRGcm9tTmV3Q2hhdFRvT2xkQ2hhdCA/IDIwMCA6IDEwMFxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGlmIChpbnB1dFJlZi5jdXJyZW50ICYmICFkaXNhYmxlZCkge1xuICAgICAgICAgIGlucHV0UmVmLmN1cnJlbnQuZm9jdXMoKVxuICAgICAgICB9XG4gICAgICB9LCBkZWxheSlcbiAgICB9XG5cbiAgICAvLyBBY3R1YWxpemFyIGxhcyByZWZlcmVuY2lhcyBERVNQVcOJUyBkZSBsYSBjb21wYXJhY2nDs25cbiAgICBwcmV2aW91c0FnZW50SWRSZWYuY3VycmVudCA9IGFnZW50Py5pZFxuICAgIHByZXZpb3VzQ2hhdElkUmVmLmN1cnJlbnQgPSBjaGF0SWRcbiAgICBwcmV2aW91c05ld0NoYXRLZXlSZWYuY3VycmVudCA9IG5ld0NoYXRLZXlcbiAgfSwgW2FnZW50Py5pZCwgY2hhdElkLCBuZXdDaGF0S2V5LCBkaXNhYmxlZF0pXG5cbiAgLy8gQ2xlYXIgaW5wdXQgd2hlbiBzZXNzaW9uIGNoYW5nZXMgKHVzZXIgc3dpdGNoZXMgdG8gYSBkaWZmZXJlbnQgY2hhdClcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBoYW5kbGVTZXNzaW9uQ2hhbmdlID0gKCkgPT4ge1xuICAgICAgc2V0VmFsdWVUZXh0YXJlYSgnJylcbiAgICAgIHNldElzRGlzYWJsZWQodHJ1ZSlcbiAgICAgIGlmIChpbnB1dFJlZi5jdXJyZW50KSB7XG4gICAgICAgIGlucHV0UmVmLmN1cnJlbnQudmFsdWUgPSAnJ1xuICAgICAgfVxuICAgICAgaGFuZGxlUmVzaXplKClcbiAgICB9XG5cbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdjaGF0LXNlc3Npb24tY2hhbmdlZCcsIGhhbmRsZVNlc3Npb25DaGFuZ2UpXG5cbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2hhdC1zZXNzaW9uLWNoYW5nZWQnLCBoYW5kbGVTZXNzaW9uQ2hhbmdlKVxuICAgIH1cbiAgfSwgW10pXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBhbmltYXRpb25GcmFtZUlkID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcbiAgICAgIGhhbmRsZVJlc2l6ZSgpXG4gICAgfSlcblxuICAgIHJldHVybiAoKSA9PiBjYW5jZWxBbmltYXRpb25GcmFtZShhbmltYXRpb25GcmFtZUlkKVxuICB9LCBbdmFsdWVUZXh0YXJlYV0pXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBoYXNUZXh0ID0gdmFsdWVUZXh0YXJlYS50cmltKCkubGVuZ3RoID4gMFxuICAgIGNvbnN0IGhhc0F0dGFjaG1lbnRzID0gYXR0YWNobWVudHMubGVuZ3RoID4gMFxuICAgIHNldElzRGlzYWJsZWQoIWhhc1RleHQgJiYgIWhhc0F0dGFjaG1lbnRzKVxuICB9LCBbYXR0YWNobWVudHMsIHZhbHVlVGV4dGFyZWFdKVxuXG4gIGNvbnN0IGhhbmRsZVNlbmRNZXNzYWdlID0gKCkgPT4ge1xuICAgIGlmIChpbnB1dFJlZi5jdXJyZW50KSB7XG4gICAgICBvblNlbmRNZXNzYWdlKGlucHV0UmVmLmN1cnJlbnQudmFsdWUsIGF0dGFjaG1lbnRzKVxuICAgICAgaW5wdXRSZWYuY3VycmVudC52YWx1ZSA9ICcnXG4gICAgICBzZXRWYWx1ZVRleHRhcmVhKCcnKVxuICAgICAgc2V0SXNEaXNhYmxlZCh0cnVlKVxuICAgICAgaGFuZGxlUmVzaXplKClcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBpZiAoYXR0YWNobWVudHMubGVuZ3RoKSB7XG4gICAgICBvblNlbmRNZXNzYWdlKCcnLCBhdHRhY2htZW50cylcbiAgICAgIHNldFZhbHVlVGV4dGFyZWEoJycpXG4gICAgICBzZXRJc0Rpc2FibGVkKHRydWUpXG4gICAgfVxuICB9XG5cbiAgY29uc3QgaGFuZGxlS2V5RG93biA9IChlOiBLZXlib2FyZEV2ZW50PEhUTUxUZXh0QXJlYUVsZW1lbnQ+KSA9PiB7XG4gICAgaWYgKGUua2V5ID09PSAnRW50ZXInICYmICFlLnNoaWZ0S2V5KSB7XG4gICAgICBlLnByZXZlbnREZWZhdWx0KClcbiAgICAgIGlmICghaXNEaXNhYmxlZCAmJiAhZGlzYWJsZWQpIHtcbiAgICAgICAgaGFuZGxlU2VuZE1lc3NhZ2UoKVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGhhbmRsZUNoYW5nZSA9IChlOiBDaGFuZ2VFdmVudDxIVE1MVGV4dEFyZWFFbGVtZW50PikgPT4ge1xuICAgIGNvbnN0IGhhc1RleHQgPSBlLnRhcmdldC52YWx1ZS50cmltKCkubGVuZ3RoID4gMFxuICAgIGNvbnN0IGhhc0F0dGFjaG1lbnRzID0gYXR0YWNobWVudHMubGVuZ3RoID4gMFxuICAgIHNldElzRGlzYWJsZWQoIWhhc1RleHQgJiYgIWhhc0F0dGFjaG1lbnRzKVxuICAgIHNldFZhbHVlVGV4dGFyZWEoZS50YXJnZXQudmFsdWUpXG4gICAgb25DaGFuZ2U/LigpXG4gIH1cblxuICBjb25zdCBoYW5kbGVQYXN0ZSA9ICgpID0+IHtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGhhbmRsZVJlc2l6ZSgpXG4gICAgICBjb25zdCBjdXJyZW50VmFsdWUgPSBpbnB1dFJlZi5jdXJyZW50Py52YWx1ZSA/PyAnJ1xuICAgICAgY29uc3QgaGFzVGV4dCA9IGN1cnJlbnRWYWx1ZS50cmltKCkubGVuZ3RoID4gMFxuICAgICAgY29uc3QgaGFzQXR0YWNobWVudHMgPSBhdHRhY2htZW50cy5sZW5ndGggPiAwXG4gICAgICBzZXRWYWx1ZVRleHRhcmVhKGN1cnJlbnRWYWx1ZSlcbiAgICAgIHNldElzRGlzYWJsZWQoIWhhc1RleHQgJiYgIWhhc0F0dGFjaG1lbnRzKVxuICAgIH0sIDEwKVxuICB9XG5cbiAgY29uc3QgaGFuZGxlRmlsZVNlbGVjdCA9IChlOiBDaGFuZ2VFdmVudDxIVE1MSW5wdXRFbGVtZW50PikgPT4ge1xuICAgIGNvbnN0IGZpbGVzID0gZS50YXJnZXQuZmlsZXNcbiAgICBpZiAoIWZpbGVzKSByZXR1cm5cblxuICAgIGNvbnN0IGV4Y2VlZGVkRmlsZXM6IHN0cmluZ1tdID0gW11cbiAgICBjb25zdCBleGNsdWRlZEZpbGVzOiBzdHJpbmdbXSA9IFtdXG4gICAgY29uc3QgZmlsZVNpemVzOiBSZWNvcmQ8c3RyaW5nLCBudW1iZXI+ID0ge31cbiAgICBsZXQgZmlsZXNJbnNlcnRlZCA9IGF0dGFjaG1lbnRzLmxlbmd0aFxuXG4gICAgLy8gRGVmaW5pciBsw61taXRlcyBwYXJhIGRpZmVyZW50ZXMgdGlwb3MgZGUgYXJjaGl2b3NcbiAgICBjb25zdCBpc05ld0Zvcm1hdCA9IChleHRlbnNpb246IHN0cmluZykgPT4gWycucG5nJywgJy5qcGcnLCAnLmpwZWcnLCAnLnBkZiddLmluY2x1ZGVzKGV4dGVuc2lvbilcbiAgICBjb25zdCBpc09sZEZvcm1hdCA9IChleHRlbnNpb246IHN0cmluZykgPT5cbiAgICAgIFsnLnR4dCcsICcubWQnLCAnLmNzdicsICcuZG9jJywgJy5kb2N4JywgJy54bHN4JywgJy54bHMnXS5pbmNsdWRlcyhleHRlbnNpb24pXG4gICAgY29uc3QgaXNBdWRpb0Zvcm1hdCA9IChleHRlbnNpb246IHN0cmluZykgPT5cbiAgICAgIFsnLmZsYWMnLCAnLm00YScsICcubXAzJywgJy5tcDQnLCAnLm9nYScsICcub2dnJywgJy53YXYnLCAnLndlYm0nXS5pbmNsdWRlcyhleHRlbnNpb24pXG5cbiAgICBBcnJheS5mcm9tKGZpbGVzKS5mb3JFYWNoKGZpbGUgPT4ge1xuICAgICAgbGV0IGV4Y2x1ZGVkRmlsZSA9IGZhbHNlXG4gICAgICBjb25zdCBmaWxlTmFtZVBhcnRzID0gZmlsZS5uYW1lLnNwbGl0KCcuJylcbiAgICAgIGNvbnN0IGZpbGVFeHRlbnNpb24gPSBmaWxlTmFtZVBhcnRzLmxlbmd0aCA+IDEgPyBgLiR7ZmlsZU5hbWVQYXJ0cy5wb3AoKT8udG9Mb3dlckNhc2UoKX1gIDogJydcblxuICAgICAgaWYgKCFhbGxvd2VkRmlsZVR5cGVzPy5pbmNsdWRlcyhmaWxlRXh0ZW5zaW9uKSkge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgZmlsZVNpemVzW2ZpbGUubmFtZV0gPSBmaWxlLnNpemVcblxuICAgICAgLy8gVmFsaWRhY2lvbmVzIGVzcGVjw61maWNhcyBzZWfDum4gZWwgdGlwbyBkZSBhcmNoaXZvXG4gICAgICBpZiAoaXNOZXdGb3JtYXQoZmlsZUV4dGVuc2lvbikpIHtcbiAgICAgICAgLy8gUGFyYSBudWV2b3MgZm9ybWF0b3M6IGhhc3RhIDQuOTlNQiBwb3IgYXJjaGl2bywgaGFzdGEgTUFYX0NIQVRfSU5QVVRfQVRUQUNITUVOVFMgYXJjaGl2b3NcbiAgICAgICAgaWYgKGZpbGUuc2l6ZSA+IE1BWF9GSUxFX1NJWkVfTUJfTUFJQV9WSVNJT04gKiAxMDI0ICogMTAyNCkge1xuICAgICAgICAgIGV4Y2VlZGVkRmlsZXMucHVzaChmaWxlLm5hbWUpXG4gICAgICAgICAgZXhjbHVkZWRGaWxlID0gdHJ1ZVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGZpbGVzSW5zZXJ0ZWQgKyAxID4gTUFYX0NIQVRfSU5QVVRfQVRUQUNITUVOVFMpIHtcbiAgICAgICAgICBleGNsdWRlZEZpbGVzLnB1c2goZmlsZS5uYW1lKVxuICAgICAgICAgIGV4Y2x1ZGVkRmlsZSA9IHRydWVcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChpc09sZEZvcm1hdChmaWxlRXh0ZW5zaW9uKSkge1xuICAgICAgICAvLyBQYXJhIGZvcm1hdG9zIGFudGVyaW9yZXM6IGhhc3RhIDFNQiBwb3IgYXJjaGl2bywgaGFzdGEgTUFYX0NIQVRfSU5QVVRfQVRUQUNITUVOVFMgYXJjaGl2b3NcbiAgICAgICAgaWYgKGZpbGUuc2l6ZSA+IE1BWF9GSUxFX1NJWkVfTUJfT0xEICogMTAyNCAqIDEwMjQpIHtcbiAgICAgICAgICBleGNlZWRlZEZpbGVzLnB1c2goZmlsZS5uYW1lKVxuICAgICAgICAgIGV4Y2x1ZGVkRmlsZSA9IHRydWVcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChmaWxlc0luc2VydGVkICsgMSA+IE1BWF9DSEFUX0lOUFVUX0FUVEFDSE1FTlRTKSB7XG4gICAgICAgICAgZXhjbHVkZWRGaWxlcy5wdXNoKGZpbGUubmFtZSlcbiAgICAgICAgICBleGNsdWRlZEZpbGUgPSB0cnVlXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoaXNBdWRpb0Zvcm1hdChmaWxlRXh0ZW5zaW9uKSkge1xuICAgICAgICAvLyBQYXJhIGFyY2hpdm9zIGRlIGF1ZGlvOiBoYXN0YSAxME1CIHBvciBhcmNoaXZvLCBoYXN0YSBNQVhfQ0hBVF9JTlBVVF9BVFRBQ0hNRU5UUyBhcmNoaXZvc1xuICAgICAgICBpZiAoZmlsZS5zaXplID4gTUFYX0ZJTEVfU0laRV9NQl9BVURJTyAqIDEwMjQgKiAxMDI0KSB7XG4gICAgICAgICAgZXhjZWVkZWRGaWxlcy5wdXNoKGZpbGUubmFtZSlcbiAgICAgICAgICBleGNsdWRlZEZpbGUgPSB0cnVlXG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZmlsZXNJbnNlcnRlZCArIDEgPiBNQVhfQ0hBVF9JTlBVVF9BVFRBQ0hNRU5UUykge1xuICAgICAgICAgIGV4Y2x1ZGVkRmlsZXMucHVzaChmaWxlLm5hbWUpXG4gICAgICAgICAgZXhjbHVkZWRGaWxlID0gdHJ1ZVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICghZXhjbHVkZWRGaWxlKSB7XG4gICAgICAgIGZpbGVzSW5zZXJ0ZWQgKz0gMVxuICAgICAgICBjb25zdCB0eXBlRmlsZSA9IGZpbGUudHlwZSB8fCBmaWxlVHlwZXNbZmlsZUV4dGVuc2lvbl1cbiAgICAgICAgY29uc3QgcGFyc2VkRmlsZSA9IG5ldyBGaWxlKFtmaWxlXSwgZmlsZS5uYW1lLCB7IHR5cGU6IHR5cGVGaWxlIH0pXG4gICAgICAgIG9uRmlsZUF0dGFjaD8uKHBhcnNlZEZpbGUpXG4gICAgICB9XG4gICAgfSlcblxuICAgIHNldElzRGlzYWJsZWQoZmFsc2UpXG4gICAgaWYgKGV4Y2x1ZGVkRmlsZXMubGVuZ3RoIHx8IGV4Y2VlZGVkRmlsZXMubGVuZ3RoKSB7XG4gICAgICBzZXRNb2RhbFByb3BzKHsgaXNPcGVuOiB0cnVlLCBleGNsdWRlZEZpbGVzLCBleGNlZWRlZEZpbGVzLCBmaWxlU2l6ZXMgfSlcbiAgICB9XG5cbiAgICBpZiAoZmlsZUlucHV0UmVmLmN1cnJlbnQpIHtcbiAgICAgIGZpbGVJbnB1dFJlZi5jdXJyZW50LnZhbHVlID0gJydcbiAgICB9XG4gIH1cblxuICBjb25zdCBoYW5kbGVEZWxldGVBdHRhY2htZW50ID0gKGZpbGVJZDogc3RyaW5nKSA9PiB7XG4gICAgb25EZWxldGVBdHRhY2htZW50Py4oZmlsZUlkKVxuICB9XG5cbiAgY29uc3QgaGFuZGxlQmx1ciA9ICgpID0+IHtcbiAgICBjb25zdCBoYXNUZXh0ID0gdmFsdWVUZXh0YXJlYS50cmltKCkubGVuZ3RoID4gMFxuICAgIGNvbnN0IGhhc0F0dGFjaG1lbnRzID0gYXR0YWNobWVudHMubGVuZ3RoID4gMFxuICAgIHNldElzRGlzYWJsZWQoIWhhc1RleHQgJiYgIWhhc0F0dGFjaG1lbnRzKVxuICB9XG5cbiAgY29uc3QgaGFuZGxlV3JhcHBlckZvY3VzID0gKCkgPT4gc2V0SXNGb2N1c2VkKHRydWUpXG4gIGNvbnN0IGhhbmRsZVdyYXBwZXJCbHVyID0gKCkgPT4ge1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgaWYgKCF3cmFwcGVyUmVmLmN1cnJlbnQ/LmNvbnRhaW5zKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpKSB7XG4gICAgICAgIHNldElzRm9jdXNlZChmYWxzZSlcbiAgICAgIH1cbiAgICB9LCAwKVxuICB9XG5cbiAgY29uc3QgaGFuZGxlU3RvcEdlbmVyYXRpb24gPSAoKSA9PiB7XG4gICAgZXZlbnRBbXBsaXR1ZGUoRVZFTlRTLmFpQ2hhdFN0b3BSZXNwb25zZSlcbiAgICBvblN0b3BHZW5lcmF0aW9uPy4oKVxuICB9XG5cbiAgY29uc3QgcGx1c0ljb25Db2xvciA9IGlzRm9jdXNlZCA/IGNvbG9ycy50ZXh0LnNlY29uZGFyeSA6IGNvbG9ycy50ZXh0Lm1lZGl1bUdyYXlcbiAgY29uc3QgcGx1c01lbnVJY29uQ29sb3IgPSBNQUlBX0NIQVRfSU5QVVRfVUkubWVudUljb25cbiAgY29uc3QgcGx1c01lbnVTZWxlY3RlZENvbG9yID0gTUFJQV9DSEFUX0lOUFVUX1VJLnRleHRCcmFuZEJvbGRcblxuICBsZXQgYWN0aXZlVG9vbENoaXBMZWFkaW5nSWNvbjogUmVhY3ROb2RlXG4gIGlmIChhY3RpdmVUb29sQ2hpcEhvdmVyZWQpIHtcbiAgICBhY3RpdmVUb29sQ2hpcExlYWRpbmdJY29uID0gPENyb3NzIGNvbG9yPXtNQUlBX0NIQVRfSU5QVVRfVUkuY2hpcENsb3NlSWNvbn0gd2lkdGg9ezE4fSBoZWlnaHQ9ezE4fSAvPlxuICB9IGVsc2UgaWYgKGlzV2ViU2VhcmNoQWN0aXZlKSB7XG4gICAgYWN0aXZlVG9vbENoaXBMZWFkaW5nSWNvbiA9IDxHbG9iZSBjb2xvcj17cGx1c01lbnVJY29uQ29sb3J9IHdpZHRoPXsxOH0gaGVpZ2h0PXsxOH0gLz5cbiAgfSBlbHNlIHtcbiAgICBhY3RpdmVUb29sQ2hpcExlYWRpbmdJY29uID0gPFRlbGVzY29wZUljb24gY29sb3I9e3BsdXNNZW51SWNvbkNvbG9yfSB3aWR0aD17MTh9IGhlaWdodD17MTh9IC8+XG4gIH1cblxuICByZXR1cm4gKFxuICAgIDw+XG4gICAgICA8U3R5bGVkTUFJQUlucHV0V3JhcHBlclxuICAgICAgICByZWY9e3dyYXBwZXJSZWZ9XG4gICAgICAgIGRpc2FibGVkPXtmYWxzZX1cbiAgICAgICAgYWxpZ25CdXR0b25zPXthbGlnbkJ1dHRvbnN9XG4gICAgICAgIGhhc0F0dGFjaG1lbnRzPXshIWF0dGFjaG1lbnRzLmxlbmd0aH1cbiAgICAgICAgb25Gb2N1cz17aGFuZGxlV3JhcHBlckZvY3VzfVxuICAgICAgICBvbkJsdXI9e2hhbmRsZVdyYXBwZXJCbHVyfVxuICAgICAgPlxuICAgICAgICB7ISFhdHRhY2htZW50cy5sZW5ndGggJiYgKFxuICAgICAgICAgIDxkaXYgc3R5bGU9e3sgZGlzcGxheTogJ2ZsZXgnLCBnYXA6ICcxMnB4JywgYWxpZ25JdGVtczogJ2NlbnRlcicgfX0+XG4gICAgICAgICAgICB7YXR0YWNobWVudHMubWFwKChhdHRhY2htZW50LCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBmaWxlTmFtZVBhcnRzID0gYXR0YWNobWVudC5uYW1lLnNwbGl0KCcuJylcbiAgICAgICAgICAgICAgY29uc3QgZmlsZUV4dGVuc2lvbiA9IGZpbGVOYW1lUGFydHMubGVuZ3RoID4gMSA/IGAuJHtmaWxlTmFtZVBhcnRzLnBvcCgpPy50b0xvd2VyQ2FzZSgpfWAgOiAnJ1xuICAgICAgICAgICAgICBjb25zdCBpc0ltYWdlQnlFeHRlbnNpb24gPSBbJy5wbmcnLCAnLmpwZycsICcuanBlZyddLmluY2x1ZGVzKGZpbGVFeHRlbnNpb24pXG4gICAgICAgICAgICAgIGNvbnN0IGlzSW1hZ2VCeU1pbWUgPSBhdHRhY2htZW50LnR5cGU/LnN0YXJ0c1dpdGgoJ2ltYWdlLycpXG4gICAgICAgICAgICAgIGNvbnN0IGlzSW1hZ2UgPSBpc0ltYWdlQnlNaW1lICYmIGlzSW1hZ2VCeUV4dGVuc2lvblxuICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgIDxUb29sdGlwIHRpdGxlPXthdHRhY2htZW50Lm5hbWV9IGtleT17YCR7aW5kZXh9LSR7YXR0YWNobWVudC5uYW1lfWB9PlxuICAgICAgICAgICAgICAgICAgPFNDTUlBdHRhY2htZW50IGlzSW1hZ2U9e2lzSW1hZ2V9PlxuICAgICAgICAgICAgICAgICAgICB7YXR0YWNobWVudC5pY29ufVxuICAgICAgICAgICAgICAgICAgICA8U0NNSUF0dGFjaG1lbnREZWxldGVJY29uIG9uQ2xpY2s9eygpID0+IGhhbmRsZURlbGV0ZUF0dGFjaG1lbnQoYXR0YWNobWVudC5pZCl9PlxuICAgICAgICAgICAgICAgICAgICAgIDxUcmFzaCBjb2xvcj1cInJnYmEoMTkxLCAxOTEsIDE5MSwgMSlcIiB3aWR0aD17MTh9IGhlaWdodD17MTh9IC8+XG4gICAgICAgICAgICAgICAgICAgIDwvU0NNSUF0dGFjaG1lbnREZWxldGVJY29uPlxuICAgICAgICAgICAgICAgICAgPC9TQ01JQXR0YWNobWVudD5cbiAgICAgICAgICAgICAgICA8L1Rvb2x0aXA+XG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIH0pfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICApfVxuICAgICAgICA8U3R5bGVkTUFJQUlucHV0XG4gICAgICAgICAgcmVmPXtpbnB1dFJlZn1cbiAgICAgICAgICBkaXNhYmxlZD17ZGlzYWJsZWR9XG4gICAgICAgICAgb25DaGFuZ2U9e2hhbmRsZUNoYW5nZX1cbiAgICAgICAgICBvbktleURvd249e2hhbmRsZUtleURvd259XG4gICAgICAgICAgb25QYXN0ZT17aGFuZGxlUGFzdGV9XG4gICAgICAgICAgcGxhY2Vob2xkZXI9e3BsYWNlaG9sZGVyfVxuICAgICAgICAgIGFsaWduQnV0dG9ucz17YWxpZ25CdXR0b25zfVxuICAgICAgICAgIG9uQmx1cj17aGFuZGxlQmx1cn1cbiAgICAgICAgLz5cbiAgICAgICAgPFN0eWxlZE1BSUFJbnB1dEJ1dHRvbnM+XG4gICAgICAgICAgPFBsdXNNZW51VG9vbHNSb3c+XG4gICAgICAgICAgICA8UGx1c1RvZ2dsZUJ1dHRvblxuICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgJG1lbnVPcGVuPXtwbHVzTWVudU9wZW59XG4gICAgICAgICAgICAgIG9uQ2xpY2s9e2hhbmRsZVBsdXNCdXR0b25DbGlja31cbiAgICAgICAgICAgICAgYXJpYS1sYWJlbD17dCgnY2hhdC5vcGVuUGx1c01lbnVBcmlhJyl9XG4gICAgICAgICAgICAgIGFyaWEtaGFzcG9wdXA9XCJ0cnVlXCJcbiAgICAgICAgICAgICAgYXJpYS1leHBhbmRlZD17cGx1c01lbnVPcGVufVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8UGx1cyBjb2xvcj17cGx1c0ljb25Db2xvcn0gd2lkdGg9ezIwfSBoZWlnaHQ9ezIwfSAvPlxuICAgICAgICAgICAgPC9QbHVzVG9nZ2xlQnV0dG9uPlxuICAgICAgICAgICAgPFBvcG92ZXJcbiAgICAgICAgICAgICAgb3Blbj17cGx1c01lbnVPcGVufVxuICAgICAgICAgICAgICBhbmNob3JFbD17cGx1c01lbnVBbmNob3J9XG4gICAgICAgICAgICAgIG9uQ2xvc2U9e2Nsb3NlUGx1c01lbnV9XG4gICAgICAgICAgICAgIGFuY2hvck9yaWdpbj17eyB2ZXJ0aWNhbDogJ3RvcCcsIGhvcml6b250YWw6ICdsZWZ0JyB9fVxuICAgICAgICAgICAgICB0cmFuc2Zvcm1PcmlnaW49e3sgdmVydGljYWw6ICdib3R0b20nLCBob3Jpem9udGFsOiAnbGVmdCcgfX1cbiAgICAgICAgICAgICAgc2xvdFByb3BzPXt7XG4gICAgICAgICAgICAgICAgcGFwZXI6IHtcbiAgICAgICAgICAgICAgICAgIGVsZXZhdGlvbjogMCxcbiAgICAgICAgICAgICAgICAgIHN4OiB7XG4gICAgICAgICAgICAgICAgICAgIG92ZXJmbG93OiAndmlzaWJsZScsXG4gICAgICAgICAgICAgICAgICAgIGJvcmRlclJhZGl1czogJzRweCcsXG4gICAgICAgICAgICAgICAgICAgIGJveFNoYWRvdzogJ25vbmUnLFxuICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6ICd0cmFuc3BhcmVudCcsXG4gICAgICAgICAgICAgICAgICAgIG1hcmdpblRvcDogJy00cHgnLFxuICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8UGx1c01lbnVQYXBlcj5cbiAgICAgICAgICAgICAgICA8UGx1c01lbnVJbm5lckNvbHVtbj5cbiAgICAgICAgICAgICAgICAgIDxQbHVzTWVudUl0ZW1CdXR0b24gdHlwZT1cImJ1dHRvblwiIG9uQ2xpY2s9e2hhbmRsZVBsdXNNZW51QXR0YWNofT5cbiAgICAgICAgICAgICAgICAgICAgPEF0dGFjaCBjb2xvcj17cGx1c01lbnVJY29uQ29sb3J9IHdpZHRoPXsyMH0gaGVpZ2h0PXsyMH0gLz5cbiAgICAgICAgICAgICAgICAgICAgPFBsdXNNZW51SXRlbUxhYmVsICRzZWxlY3RlZD17ZmFsc2V9Pnt0KCdjaGF0LnBsdXNNZW51QXR0YWNoJyl9PC9QbHVzTWVudUl0ZW1MYWJlbD5cbiAgICAgICAgICAgICAgICAgIDwvUGx1c01lbnVJdGVtQnV0dG9uPlxuICAgICAgICAgICAgICAgICAgPFBsdXNNZW51RGl2aWRlciAvPlxuICAgICAgICAgICAgICAgICAgPFBsdXNNZW51SXRlbUJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgb25DbGljaz17aGFuZGxlUGx1c01lbnVXZWJTZWFyY2h9PlxuICAgICAgICAgICAgICAgICAgICA8R2xvYmVcbiAgICAgICAgICAgICAgICAgICAgICBjb2xvcj17aXNXZWJTZWFyY2hBY3RpdmUgPyBwbHVzTWVudVNlbGVjdGVkQ29sb3IgOiBwbHVzTWVudUljb25Db2xvcn1cbiAgICAgICAgICAgICAgICAgICAgICB3aWR0aD17MjB9XG4gICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0PXsyMH1cbiAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgPFBsdXNNZW51SXRlbUxhYmVsICRzZWxlY3RlZD17ISFpc1dlYlNlYXJjaEFjdGl2ZX0+e3QoJ2NoYXQuc2VhcmNoV2ViJyl9PC9QbHVzTWVudUl0ZW1MYWJlbD5cbiAgICAgICAgICAgICAgICAgICAge2lzV2ViU2VhcmNoQWN0aXZlID8gPENoZWNrIGNvbG9yPXtwbHVzTWVudVNlbGVjdGVkQ29sb3J9IHdpZHRoPXsxNn0gaGVpZ2h0PXsxNn0gLz4gOiBudWxsfVxuICAgICAgICAgICAgICAgICAgPC9QbHVzTWVudUl0ZW1CdXR0b24+XG4gICAgICAgICAgICAgICAgPC9QbHVzTWVudUlubmVyQ29sdW1uPlxuICAgICAgICAgICAgICAgIDxQbHVzTWVudUl0ZW1CdXR0b24gdHlwZT1cImJ1dHRvblwiIG9uQ2xpY2s9e2hhbmRsZVBsdXNNZW51RGVlcFNlYXJjaH0+XG4gICAgICAgICAgICAgICAgICA8VGVsZXNjb3BlSWNvblxuICAgICAgICAgICAgICAgICAgICBjb2xvcj17aXNEZWVwU2VhcmNoQWN0aXZlID8gcGx1c01lbnVTZWxlY3RlZENvbG9yIDogcGx1c01lbnVJY29uQ29sb3J9XG4gICAgICAgICAgICAgICAgICAgIHdpZHRoPXsyMH1cbiAgICAgICAgICAgICAgICAgICAgaGVpZ2h0PXsyMH1cbiAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICA8UGx1c01lbnVJdGVtTGFiZWwgJHNlbGVjdGVkPXshIWlzRGVlcFNlYXJjaEFjdGl2ZX0+XG4gICAgICAgICAgICAgICAgICAgIHt0KCdjaGF0LnBsdXNNZW51RGVlcEludmVzdGlnYXRpb24nKX1cbiAgICAgICAgICAgICAgICAgIDwvUGx1c01lbnVJdGVtTGFiZWw+XG4gICAgICAgICAgICAgICAgICB7aXNEZWVwU2VhcmNoQWN0aXZlID8gPENoZWNrIGNvbG9yPXtwbHVzTWVudVNlbGVjdGVkQ29sb3J9IHdpZHRoPXsxNn0gaGVpZ2h0PXsxNn0gLz4gOiBudWxsfVxuICAgICAgICAgICAgICAgIDwvUGx1c01lbnVJdGVtQnV0dG9uPlxuICAgICAgICAgICAgICA8L1BsdXNNZW51UGFwZXI+XG4gICAgICAgICAgICA8L1BvcG92ZXI+XG4gICAgICAgICAgICB7KGlzV2ViU2VhcmNoQWN0aXZlIHx8IGlzRGVlcFNlYXJjaEFjdGl2ZSkgJiYgKFxuICAgICAgICAgICAgICA8QWN0aXZlVG9vbENoaXBSb290XG4gICAgICAgICAgICAgICAgJGhvdmVyZWQ9e2FjdGl2ZVRvb2xDaGlwSG92ZXJlZH1cbiAgICAgICAgICAgICAgICAkZXhpdGluZz17dG9vbENoaXBFeGl0aW5nfVxuICAgICAgICAgICAgICAgIG9uTW91c2VFbnRlcj17KCkgPT4gc2V0QWN0aXZlVG9vbENoaXBIb3ZlcmVkKHRydWUpfVxuICAgICAgICAgICAgICAgIG9uTW91c2VMZWF2ZT17KCkgPT4gc2V0QWN0aXZlVG9vbENoaXBIb3ZlcmVkKGZhbHNlKX1cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxBY3RpdmVUb29sQ2hpcEljb25CdXR0b25cbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgJGNsb3NlU2hvd249e2FjdGl2ZVRvb2xDaGlwSG92ZXJlZH1cbiAgICAgICAgICAgICAgICAgIGFyaWEtbGFiZWw9e3QoJ2NoYXQucmVtb3ZlQWN0aXZlVG9vbEFyaWEnKX1cbiAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9e2UgPT4ge1xuICAgICAgICAgICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpXG4gICAgICAgICAgICAgICAgICAgIGJlZ2luVG9vbENoaXBFeGl0KClcbiAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAge2FjdGl2ZVRvb2xDaGlwTGVhZGluZ0ljb259XG4gICAgICAgICAgICAgICAgPC9BY3RpdmVUb29sQ2hpcEljb25CdXR0b24+XG4gICAgICAgICAgICAgICAgPEFjdGl2ZVRvb2xDaGlwTGFiZWw+XG4gICAgICAgICAgICAgICAgICB7aXNXZWJTZWFyY2hBY3RpdmUgPyB0KCdjaGF0LnNlYXJjaFdlYicpIDogdCgnY2hhdC5wbHVzTWVudURlZXBJbnZlc3RpZ2F0aW9uJyl9XG4gICAgICAgICAgICAgICAgPC9BY3RpdmVUb29sQ2hpcExhYmVsPlxuICAgICAgICAgICAgICA8L0FjdGl2ZVRvb2xDaGlwUm9vdD5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgPC9QbHVzTWVudVRvb2xzUm93PlxuXG4gICAgICAgICAge2lzV3JpdGluZyA/IChcbiAgICAgICAgICAgIDxUb29sdGlwIHRpdGxlPXt0KCdjaGF0LnN0b3AnKX0+XG4gICAgICAgICAgICAgIDxTdHlsZWRNQUlBU3RvcEJ1dHRvbiBkaXNhYmxlZD17ZmFsc2V9IG9uQ2xpY2s9e2hhbmRsZVN0b3BHZW5lcmF0aW9ufSBjbGFzc05hbWU9e2NsYXNzTmFtZX0+XG4gICAgICAgICAgICAgICAgPFN0eWxlZE1BSUFTdG9wSWNvbiAvPlxuICAgICAgICAgICAgICA8L1N0eWxlZE1BSUFTdG9wQnV0dG9uPlxuICAgICAgICAgICAgPC9Ub29sdGlwPlxuICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICA8VG9vbHRpcCB0aXRsZT17aXNTdHJlYW1pbmcgPyB0KCdjaGF0LnNlbmQnKSA6IHQoJ2NoYXQuc2VuZCcpfT5cbiAgICAgICAgICAgICAgPFN0eWxlZE1BSUFTZW5kQnV0dG9uXG4gICAgICAgICAgICAgICAgb25DbGljaz17aGFuZGxlU2VuZE1lc3NhZ2V9XG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtjbGFzc05hbWV9XG4gICAgICAgICAgICAgICAgZGlzYWJsZWQ9e2lzRGlzYWJsZWQgfHwgZGlzYWJsZWR9XG4gICAgICAgICAgICAgICAgaGFzVmFsdWVzPXshIXZhbHVlVGV4dGFyZWEubGVuZ3RofVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPFBhcGVyUGxhbmUgY29sb3I9XCIjQkZCRkJGXCIgd2lkdGg9ezE4fSBoZWlnaHQ9ezE4fSAvPlxuICAgICAgICAgICAgICA8L1N0eWxlZE1BSUFTZW5kQnV0dG9uPlxuICAgICAgICAgICAgPC9Ub29sdGlwPlxuICAgICAgICAgICl9XG4gICAgICAgIDwvU3R5bGVkTUFJQUlucHV0QnV0dG9ucz5cbiAgICAgICAgPGlucHV0XG4gICAgICAgICAgcmVmPXtmaWxlSW5wdXRSZWZ9XG4gICAgICAgICAgdHlwZT1cImZpbGVcIlxuICAgICAgICAgIG11bHRpcGxlXG4gICAgICAgICAgYWNjZXB0PVwiLnR4dCwubWQsLmNzdiwuZG9jLC5kb2N4LC5wbmcsLmpwZywuanBlZywucGRmLC54bHN4LC54bHMsLmZsYWMsLm00YSwubXAzLC5tcDQsLm9nYSwub2dnLC53YXYsLndlYm1cIlxuICAgICAgICAgIG9uQ2hhbmdlPXtoYW5kbGVGaWxlU2VsZWN0fVxuICAgICAgICAgIHN0eWxlPXt7IGRpc3BsYXk6ICdub25lJyB9fVxuICAgICAgICAvPlxuICAgICAgPC9TdHlsZWRNQUlBSW5wdXRXcmFwcGVyPlxuICAgICAge21vZGFsUHJvcHMuaXNPcGVuICYmIChcbiAgICAgICAgPE1vZGFsRmlsZUV4Y2VlZHNcbiAgICAgICAgICBvbkNsb3NlPXsoKSA9PiBzZXRNb2RhbFByb3BzKHsgaXNPcGVuOiBmYWxzZSwgZXhjbHVkZWRGaWxlczogW10sIGV4Y2VlZGVkRmlsZXM6IFtdLCBmaWxlU2l6ZXM6IHt9IH0pfVxuICAgICAgICAgIGV4Y2x1ZGVkRmlsZXM9e21vZGFsUHJvcHMuZXhjbHVkZWRGaWxlc31cbiAgICAgICAgICBleGNlZWRlZEZpbGVzPXttb2RhbFByb3BzLmV4Y2VlZGVkRmlsZXN9XG4gICAgICAgICAgZmlsZVNpemVzPXttb2RhbFByb3BzLmZpbGVTaXplc31cbiAgICAgICAgLz5cbiAgICAgICl9XG4gICAgPC8+XG4gIClcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBNERBLFNBQVMsRUFBRUMsTUFBTSxFQUFFQyxRQUFRLFFBQVEsT0FBTztBQUN0RyxTQUFTQyxPQUFPLFFBQVEsZUFBZTtBQUN2QyxTQUFTQyxVQUFVLFFBQVEsNkNBQTZDO0FBQ3hFLFNBQVNDLE1BQU0sUUFBUSx5Q0FBeUM7QUFDaEUsU0FBU0MsS0FBSyxRQUFRLHdDQUF3QztBQUM5RCxTQUFTQyxLQUFLLFFBQVEsd0NBQXdDO0FBQzlELFNBQVNDLElBQUksUUFBUSx1Q0FBdUM7QUFDNUQsU0FBU0MsS0FBSyxRQUFRLHdDQUF3QztBQUM5RCxTQUFTQyxLQUFLLFFBQVEsd0NBQXdDO0FBQzlELFNBQVNDLE9BQU8sUUFBUSw4Q0FBOEM7QUFDdEUsT0FBT0MsTUFBTSxNQUFNLG1DQUFtQztBQUV0RCxTQUNFQyx3QkFBd0IsRUFDeEJDLG1CQUFtQixFQUNuQkMsa0JBQWtCLEVBQ2xCQyxlQUFlLEVBQ2ZDLG1CQUFtQixFQUNuQkMsa0JBQWtCLEVBQ2xCQyxpQkFBaUIsRUFD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
689
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1c2VDYWxsYmFjayIsInVzZUVmZmVjdCIsInVzZU1lbW8iLCJ1c2VSZWYiLCJ1c2VTdGF0ZSIsImNyZWF0ZVBvcnRhbCIsIlBvcG92ZXIiLCJQYXBlclBsYW5lIiwiQXR0YWNoIiwiR2xvYmUiLCJUcmFzaCIsIlBsdXMiLCJDaGVjayIsIkNyb3NzIiwiVG9vbHRpcCIsImNvbG9ycyIsIkFjdGl2ZVRvb2xDaGlwSWNvbkJ1dHRvbiIsIkFjdGl2ZVRvb2xDaGlwTGFiZWwiLCJBY3RpdmVUb29sQ2hpcFJvb3QiLCJQbHVzTWVudURpdmlkZXIiLCJQbHVzTWVudUlubmVyQ29sdW1uIiwiUGx1c01lbnVJdGVtQnV0dG9uIiwiUGx1c01lbnVJdGVtTGFiZWwiLCJQbHVzTWVudVBhcGVyIiwiUGx1c01lbnVUb29sc1JvdyIsIlBsdXNUb2dnbGVCdXR0b24iLCJTQ01JQXR0YWNobWVudCIsIlNDTUlBdHRhY2htZW50RGVsZXRlSWNvbiIsIlN0eWxlZE1BSUFJbnB1dFdyYXBwZXIiLCJTdHlsZWRNQUlBU2VuZEJ1dHRvbiIsIlN0eWxlZE1BSUFNYWluVG9vbGJhckdyaWQiLCJTdHlsZWRNQUlBUGx1c1Rvb2xiYXJDZWxsIiwiU3R5bGVkTUFJQVNlbmRUb29sYmFyQ2VsbCIsIlN0eWxlZE1BSUFTdG9wQnV0dG9uIiwiU3R5bGVkTUFJQVN0b3BJY29uIiwidXNlR2xvYmFsQ29udGV4dCIsIk1vZGFsRmlsZUV4Y2VlZHMiLCJ1c2VUIiwiVGVsZXNjb3BlSWNvbiIsIkVWRU5UUyIsInVzZUV2ZW50IiwiZ2V0Q2hhdFRvb2xzTWVudUFnZW50VHlwZSIsIk1BSUFfQ0hBVF9JTlBVVF9VSSIsImFsbG93ZWRGaWxlVHlwZXMiLCJmaWxlVHlwZXMiLCJNQVhfRklMRV9TSVpFX01CX01BSUFfVklTSU9OIiwiTUFYX0ZJTEVfU0laRV9NQl9PTEQiLCJNQVhfRklMRV9TSVpFX01CX0FVRElPIiwiTUFYX0NIQVRfSU5QVVRfQVRUQUNITUVOVFMiLCJDb250ZXh0TWVudGlvbkVkaXRvciIsInVzZU1lbnRpb25Qb3BvdmVyIiwianN4IiwiX2pzeCIsImpzeHMiLCJfanN4cyIsIkZyYWdtZW50IiwiX0ZyYWdtZW50IiwiVE9PTF9DSElQX0VYSVRfTVMiLCJNQUlBSW5wdXQiLCJfcmVmIiwiX2FnZW50JGVudGl0eSIsIm9uU2VuZE1lc3NhZ2UiLCJjbGFzc05hbWUiLCJkaXNhYmxlZCIsImlzU3RyZWFtaW5nIiwiaXNXcml0aW5nIiwib25TdG9wR2VuZXJhdGlvbiIsInBsYWNlaG9sZGVyIiwib25DaGFuZ2UiLCJfcmVmJGFsaWduQnV0dG9ucyIsImFsaWduQnV0dG9ucyIsIm9uRmlsZUF0dGFjaCIsIm9uRGVsZXRlQXR0YWNobWVudCIsIl9yZWYkYXR0YWNobWVudHMiLCJhdHRhY2htZW50cyIsImNoYXRJZCIsIm5ld0NoYXRLZXkiLCJfdXNlVCIsInQiLCJlZGl0b3JSZWYiLCJmaWxlSW5wdXRSZWYiLCJ3cmFwcGVyUmVmIiwiX3VzZVN0YXRlIiwiX3VzZVN0YXRlMiIsIl9zbGljZWRUb0FycmF5IiwiaGFzV3JhcHBlZFRvU2Vjb25kTGluZSIsInNldEhhc1dyYXBwZWRUb1NlY29uZExpbmUiLCJfdXNlU3RhdGUzIiwiX3VzZVN0YXRlNCIsImhhc1R5cGluZ1ByZXNlbmNlIiwic2V0SGFzVHlwaW5nUHJlc2VuY2UiLCJfdXNlU3RhdGU1IiwiX3VzZVN0YXRlNiIsImlzRm9jdXNlZCIsInNldElzRm9jdXNlZCIsIl91c2VTdGF0ZTciLCJpc09wZW4iLCJleGNsdWRlZEZpbGVzIiwiZXhjZWVkZWRGaWxlcyIsImZpbGVTaXplcyIsIl91c2VTdGF0ZTgiLCJtb2RhbFByb3BzIiwic2V0TW9kYWxQcm9wcyIsImV2ZW50QW1wbGl0dWRlIiwiX3VzZUdsb2JhbENvbnRleHQiLCJ0b2dnbGVXZWJTZWFyY2giLCJpc1dlYlNlYXJjaEFjdGl2ZSIsInRvZ2dsZURlZXBTZWFyY2giLCJpc0RlZXBTZWFyY2hBY3RpdmUiLCJhZ2VudCIsIl91c2VNZW50aW9uUG9wb3ZlciIsInBvcG92ZXJBbmNob3JSZWYiLCJwb3BvdmVyT3BlbiIsInJlc2V0TWVudGlvbk9wZW5UcmFja2luZyIsImhhbmRsZVRyaWdnZXIiLCJoYW5kbGVQb3BvdmVyS2V5RG93biIsImhhbmRsZUtleURvd24iLCJwb3BvdmVyTm9kZSIsIl91c2VTdGF0ZTkiLCJfdXNlU3RhdGUwIiwicGx1c01lbnVBbmNob3IiLCJzZXRQbHVzTWVudUFuY2hvciIsIl91c2VTdGF0ZTEiLCJfdXNlU3RhdGUxMCIsImFjdGl2ZVRvb2xDaGlwSG92ZXJlZCIsInNldEFjdGl2ZVRvb2xDaGlwSG92ZXJlZCIsIl91c2VTdGF0ZTExIiwiX3VzZVN0YXRlMTIiLCJ0b29sQ2hpcEV4aXRpbmciLCJzZXRUb29sQ2hpcEV4aXRpbmciLCJ0b29sQ2hpcEV4aXRUaW1lclJlZiIsInNlYXJjaE1vZGVBY3RpdmVSZWYiLCJ3ZWIiLCJkZWVwIiwicGx1c01lbnVPcGVuIiwiQm9vbGVhbiIsInByZXZpb3VzQWdlbnRJZFJlZiIsInVuZGVmaW5lZCIsInByZXZpb3VzQ2hhdElkUmVmIiwicHJldmlvdXNOZXdDaGF0S2V5UmVmIiwiYW5hbHl0aWNzQWdlbnRUeXBlIiwiYW5hbHl0aWNzQ2xvbmVFbnRpdHlQYXlsb2FkIiwidHlwZSIsImVudGl0eSIsInNjaGVkdWxlSW5wdXRGb2N1c0FmdGVyVG9vbEFjdGlvbiIsInJlcXVlc3RBbmltYXRpb25GcmFtZSIsIndpbmRvdyIsInNldFRpbWVvdXQiLCJfZWRpdG9yUmVmJGN1cnJlbnQiLCJjdXJyZW50IiwiZm9jdXMiLCJjbG9zZVBsdXNNZW51IiwiY2FuY2VsUGVuZGluZ1Rvb2xDaGlwRXhpdCIsImNsZWFyVGltZW91dCIsImhhbmRsZVBsdXNCdXR0b25DbGljayIsImUiLCJzdG9wUHJvcGFnYXRpb24iLCJjdXJyZW50VGFyZ2V0IiwiYWlDaGF0UGx1c09wZW4iLCJfb2JqZWN0U3ByZWFkIiwiYWdlbnRfdHlwZSIsImhhbmRsZVBsdXNNZW51QXR0YWNoIiwiX2ZpbGVJbnB1dFJlZiRjdXJyZW50IiwiYWlDaGF0VG9vbHMiLCJvcHRpb24iLCJsZW5ndGgiLCJjbGljayIsImJlZ2luVG9vbENoaXBFeGl0Iiwid2FzV2ViIiwid2FzRGVlcCIsIl9zZWFyY2hNb2RlQWN0aXZlUmVmJCIsImhhbmRsZVBsdXNNZW51V2ViU2VhcmNoIiwiaGFuZGxlUGx1c01lbnVEZWVwU2VhcmNoIiwiX2VkaXRvclJlZiRjdXJyZW50MiIsImNvbXBhY3RTaW5nbGVSb3dUb29sYmFyIiwic2VuZERpc2FibGVkIiwiYWdlbnRDaGFuZ2VkIiwiaWQiLCJwcmV2aW91c0NoYXRJZCIsImN1cnJlbnRDaGF0SWQiLCJjaGF0Q2hhbmdlZCIsImNoYW5nZWRGcm9tTmV3Q2hhdFRvT2xkQ2hhdCIsIm5ld0NoYXRTdGFydGVkIiwiaXNJbml0aWFsTW91bnQiLCJkZWxheSIsIl9lZGl0b3JSZWYkY3VycmVudDMiLCJoYW5kbGVTZXNzaW9uQ2hhbmdlIiwiX2VkaXRvclJlZiRjdXJyZW50NCIsImNsZWFyIiwiZG9jdW1lbnQiLCJhZGRFdmVudExpc3RlbmVyIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsImhhbmRsZVNlbmRNZXNzYWdlIiwiX2VkaXRvclJlZiRjdXJyZW50NSIsIl9zdGF0ZSR0ZXh0IiwiX3N0YXRlJG1lbnRpb25zIiwiX2VkaXRvclJlZiRjdXJyZW50NiIsInN0YXRlIiwic2VyaWFsaXplIiwidGV4dCIsInRyaW0iLCJtZW50aW9ucyIsImZvckVhY2giLCJtIiwiYWlDaGF0TWVudGlvblNlbmQiLCJTdHJpbmciLCJoYW5kbGVFZGl0b3JJbnB1dCIsIl9yZWYyIiwiX2VkaXRvclJlZiRjdXJyZW50NyIsInRyaWdnZXIiLCJ2aXN1YWxNdWx0aWxpbmUiLCJoYXNWaXN1YWxNdWx0aWxpbmUiLCJleHBsaWNpdE11bHRpbGluZSIsImluY2x1ZGVzIiwibmV4dElzTXVsdGlsaW5lIiwibmV4dEhhc1R5cGluZ1ByZXNlbmNlIiwicHJldiIsImtleSIsInNoaWZ0S2V5IiwicHJldmVudERlZmF1bHQiLCJoYW5kbGVGaWxlU2VsZWN0IiwiZmlsZXMiLCJ0YXJnZXQiLCJmaWxlc0luc2VydGVkIiwiaXNOZXdGb3JtYXQiLCJleHRlbnNpb24iLCJpc09sZEZvcm1hdCIsImlzQXVkaW9Gb3JtYXQiLCJBcnJheSIsImZyb20iLCJmaWxlIiwiX2ZpbGVOYW1lUGFydHMkcG9wIiwiZXhjbHVkZWRGaWxlIiwiZmlsZU5hbWVQYXJ0cyIsIm5hbWUiLCJzcGxpdCIsImZpbGVFeHRlbnNpb24iLCJjb25jYXQiLCJwb3AiLCJ0b0xvd2VyQ2FzZSIsInNpemUiLCJwdXNoIiwidHlwZUZpbGUiLCJwYXJzZWRGaWxlIiwiRmlsZSIsInZhbHVlIiwiaGFuZGxlRGVsZXRlQXR0YWNobWVudCIsImZpbGVJZCIsImhhbmRsZVdyYXBwZXJGb2N1cyIsImhhbmRsZVdyYXBwZXJCbHVyIiwiX3dyYXBwZXJSZWYkY3VycmVudCIsImNvbnRhaW5zIiwiYWN0aXZlRWxlbWVudCIsImhhbmRsZVN0b3BHZW5lcmF0aW9uIiwiYWlDaGF0U3RvcFJlc3BvbnNlIiwicGx1c0ljb25Db2xvciIsInNlY29uZGFyeSIsIm1lZGl1bUdyYXkiLCJwbHVzTWVudUljb25Db2xvciIsIm1lbnVJY29uIiwicGx1c01lbnVTZWxlY3RlZENvbG9yIiwidGV4dEJyYW5kQm9sZCIsImFjdGl2ZVRvb2xDaGlwTGVhZGluZ0ljb24iLCJjb2xvciIsImNoaXBDbG9zZUljb24iLCJ3aWR0aCIsImhlaWdodCIsImNoaWxkcmVuIiwicmVmIiwiaGFzQXR0YWNobWVudHMiLCJvbkZvY3VzIiwib25CbHVyIiwic3R5bGUiLCJkaXNwbGF5IiwiZ2FwIiwiYWxpZ25JdGVtcyIsIm1hcCIsImF0dGFjaG1lbnQiLCJpbmRleCIsIl9maWxlTmFtZVBhcnRzJHBvcDIiLCJfYXR0YWNobWVudCR0eXBlIiwiaXNJbWFnZUJ5RXh0ZW5zaW9uIiwiaXNJbWFnZUJ5TWltZSIsInN0YXJ0c1dpdGgiLCJpc0ltYWdlIiwidGl0bGUiLCJpY29uIiwib25DbGljayIsIiRjb21wYWN0Um93IiwiJG1lbnVPcGVuIiwib3BlbiIsImFuY2hvckVsIiwib25DbG9zZSIsImFuY2hvck9yaWdpbiIsInZlcnRpY2FsIiwiaG9yaXpvbnRhbCIsInRyYW5zZm9ybU9yaWdpbiIsInNsb3RQcm9wcyIsInBhcGVyIiwiZWxldmF0aW9uIiwic3giLCJvdmVyZmxvdyIsImJvcmRlclJhZGl1cyIsImJveFNoYWRvdyIsImJhY2tncm91bmRDb2xvciIsIm1hcmdpblRvcCIsIiRzZWxlY3RlZCIsIiRob3ZlcmVkIiwiJGV4aXRpbmciLCJvbk1vdXNlRW50ZXIiLCJvbk1vdXNlTGVhdmUiLCIkY2xvc2VTaG93biIsImdyaWRDb2x1bW4iLCJncmlkUm93IiwibWluV2lkdGgiLCJhbGlnblNlbGYiLCJvbklucHV0Iiwib25LZXlEb3duIiwiaGFzVmFsdWVzIiwibXVsdGlwbGUiLCJhY2NlcHQiLCJib2R5Il0sInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvYXRvbXMvTUFJQUlucHV0L01BSUFJbnB1dC50c3giXSwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgbm8tcmVzdHJpY3RlZC1zeW50YXggKi9cbi8qIGVzbGludC1kaXNhYmxlIG5vLWNvbnRpbnVlICovXG4vKiBlc2xpbnQtZGlzYWJsZSBuby12b2lkICovXG4vKiBlc2xpbnQtZGlzYWJsZSByZWFjdC9uby1hcnJheS1pbmRleC1rZXkgKi9cbi8qIGVzbGludC1kaXNhYmxlIG5vLWxvbmVseS1pZiAqL1xuLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSAqL1xuLyogZXNsaW50LWRpc2FibGUgcHJlZmVyLWRlc3RydWN0dXJpbmcgKi9cbi8qIGVzbGludC1kaXNhYmxlIGpzeC1hMTF5L2NsaWNrLWV2ZW50cy1oYXZlLWtleS1ldmVudHMgKi9cbi8qIGVzbGludC1kaXNhYmxlIGpzeC1hMTF5L25vLXN0YXRpYy1lbGVtZW50LWludGVyYWN0aW9ucyAqL1xuaW1wb3J0IHtcbiAgQ2hhbmdlRXZlbnQsXG4gIEtleWJvYXJkRXZlbnQsXG4gIE1vdXNlRXZlbnQsXG4gIFJlYWN0Tm9kZSxcbiAgdXNlQ2FsbGJhY2ssXG4gIHVzZUVmZmVjdCxcbiAgdXNlTWVtbyxcbiAgdXNlUmVmLFxuICB1c2VTdGF0ZSxcbn0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBjcmVhdGVQb3J0YWwgfSBmcm9tICdyZWFjdC1kb20nXG5pbXBvcnQgeyBQb3BvdmVyIH0gZnJvbSAnQG11aS9tYXRlcmlhbCdcbmltcG9ydCB7IFBhcGVyUGxhbmUgfSBmcm9tICdAcHJvamVjdGNvci9pY29ucy9saWIvY29tcG9uZW50cy9QYXBlclBsYW5lJ1xuaW1wb3J0IHsgQXR0YWNoIH0gZnJvbSAnQHByb2plY3Rjb3IvaWNvbnMvbGliL2NvbXBvbmVudHMvQXR0YWNoJ1xuaW1wb3J0IHsgR2xvYmUgfSBmcm9tICdAcHJvamVjdGNvci9pY29ucy9saWIvY29tcG9uZW50cy9HbG9iZSdcbmltcG9ydCB7IFRyYXNoIH0gZnJvbSAnQHByb2plY3Rjb3IvaWNvbnMvbGliL2NvbXBvbmVudHMvVHJhc2gnXG5pbXBvcnQgeyBQbHVzIH0gZnJvbSAnQHByb2plY3Rjb3IvaWNvbnMvbGliL2NvbXBvbmVudHMvUGx1cydcbmltcG9ydCB7IENoZWNrIH0gZnJvbSAnQHByb2plY3Rjb3IvaWNvbnMvbGliL2NvbXBvbmVudHMvQ2hlY2snXG5pbXBvcnQgeyBDcm9zcyB9IGZyb20gJ0Bwcm9qZWN0Y29yL2ljb25zL2xpYi9jb21wb25lbnRzL0Nyb3NzJ1xuaW1wb3J0IHsgVG9vbHRpcCB9IGZyb20gJ0Bwcm9qZWN0Y29yL3Rvb2x0aXB2Mi9saWIvY29tcG9uZW50cy9Ub29sdGlwJ1xuaW1wb3J0IGNvbG9ycyBmcm9tICdAcHJvamVjdGNvci90aGVtZS9saWIvYmFzZS9jb2xvcnMnXG5cbmltcG9ydCB7XG4gIEFjdGl2ZVRvb2xDaGlwSWNvbkJ1dHRvbixcbiAgQWN0aXZlVG9vbENoaXBMYWJlbCxcbiAgQWN0aXZlVG9vbENoaXBSb290LFxuICBQbHVzTWVudURpdmlkZXIsXG4gIFBsdXNNZW51SW5uZXJDb2x1bW4sXG4gIFBsdXNNZW51SXRlbUJ1dHRvbixcbiAgUGx1c01lbnVJdGVtTGFiZWwsXG4gIFBsdXNNZW51UGFwZXIsXG4gIFBsdXNNZW51VG9vbHNSb3csXG4gIFBsdXNUb2dnbGVCdXR0b24sXG4gIFNDTUlBdHRhY2htZW50LFxuICBTQ01JQXR0YWNobWVudERlbGV0ZUljb24sXG4gIFN0eWxlZE1BSUFJbnB1dFdyYXBwZXIsXG4gIFN0eWxlZE1BSUFTZW5kQnV0dG9uLFxuICBTdHlsZWRNQUlBTWFpblRvb2xiYXJHcmlkLFxuICBTdHlsZWRNQUlBUGx1c1Rvb2xiYXJDZWxsLFxuICBTdHlsZWRNQUlBU2VuZFRvb2xiYXJDZWxsLFxuICBTdHlsZWRNQUlBU3RvcEJ1dHRvbixcbiAgU3R5bGVkTUFJQVN0b3BJY29uLFxufSBmcm9tICcuL3N0eWxlcydcbmltcG9ydCB7IHVzZUdsb2JhbENvbnRleHQgfSBmcm9tICcuLi8uLi8uLi9jb250ZXh0L2dsb2JhbC1jb250ZXh0J1xuaW1wb3J0IHsgTW9kYWxGaWxlRXhjZWVkcyB9IGZyb20gJy4uLy4uL29yZ2FuaXNtcy9Nb2RhbEZpbGVFeGNlZWRzJ1xuaW1wb3J0IHsgdXNlVCB9IGZyb20gJy4uLy4uLy4uL2hvb2tzL3VzZVQnXG5pbXBvcnQgeyBUZWxlc2NvcGVJY29uIH0gZnJvbSAnLi4vaWNvbnMvVGVsZXNjb3BlSWNvbidcbmltcG9ydCB7IEVWRU5UUywgdXNlRXZlbnQgfSBmcm9tICcuLi8uLi8uLi9ob29rcy91c2VFdmVudCdcbmltcG9ydCB7IGdldENoYXRUb29sc01lbnVBZ2VudFR5cGUgfSBmcm9tICcuLi8uLi8uLi91dGlscy9oaXRsQW5hbHl0aWNzJ1xuaW1wb3J0IHsgTUFJQV9DSEFUX0lOUFVUX1VJIH0gZnJvbSAnLi4vLi4vLi4vc3R5bGVzL2NvbmZpZydcbmltcG9ydCB7XG4gIGFsbG93ZWRGaWxlVHlwZXMsXG4gIGZpbGVUeXBlcyxcbiAgTUFYX0ZJTEVfU0laRV9NQl9NQUlBX1ZJU0lPTixcbiAgTUFYX0ZJTEVfU0laRV9NQl9PTEQsXG4gIE1BWF9GSUxFX1NJWkVfTUJfQVVESU8sXG4gIE1BWF9DSEFUX0lOUFVUX0FUVEFDSE1FTlRTLFxufSBmcm9tICcuLi8uLi8uLi9jb25zdGFudHMvZm9ybWF0RXh0ZW5zaW9ucydcbmltcG9ydCB7IENvbnRleHRNZW50aW9uRWRpdG9yLCBDb250ZXh0TWVudGlvbkVkaXRvckhhbmRsZSB9IGZyb20gJy4uL0NvbnRleHRNZW50aW9uRWRpdG9yJ1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby1jeWNsZVxuaW1wb3J0IHsgdXNlTWVudGlvblBvcG92ZXIgfSBmcm9tICcuLi8uLi8uLi9ob29rcy91c2VNZW50aW9uUG9wb3ZlcidcbmltcG9ydCB7IENvbnRleHRNZW50aW9uIH0gZnJvbSAnLi4vLi4vLi4vdHlwZXMvY29udGV4dE1lbnRpb24nXG5cbmNvbnN0IFRPT0xfQ0hJUF9FWElUX01TID0gMjIwXG5cbnR5cGUgQXR0YWNobWVudEZpbGUgPSB7XG4gIGZpbGU6IEZpbGVcbiAgb3JpZ2luYWxGaWxlPzogRmlsZVxuICBpZDogc3RyaW5nXG4gIG5hbWU6IHN0cmluZ1xuICBzaXplOiBudW1iZXJcbiAgdHlwZTogc3RyaW5nXG4gIGljb24/OiBSZWFjdE5vZGVcbn1cblxudHlwZSBNQUlBSW5wdXRQcm9wcyA9IHtcbiAgY2xhc3NOYW1lPzogc3RyaW5nXG4gIGRpc2FibGVkPzogYm9vbGVhblxuICBvblNlbmRNZXNzYWdlOiAobWVzc2FnZTogc3RyaW5nLCBhdHRhY2htZW50cz86IEF0dGFjaG1lbnRGaWxlW10sIG1lbnRpb25zPzogQ29udGV4dE1lbnRpb25bXSkgPT4gdm9pZFxuICBvblN0b3BHZW5lcmF0aW9uPzogKCkgPT4gdm9pZFxuICBpc1N0cmVhbWluZz86IGJvb2xlYW5cbiAgaXNXcml0aW5nPzogYm9vbGVhblxuICBwbGFjZWhvbGRlcj86IHN0cmluZ1xuICBvbkNoYW5nZT86ICgpID0+IHZvaWRcbiAgYWxpZ25CdXR0b25zPzogJ2hvcml6b250YWwnIHwgJ3ZlcnRpY2FsJ1xuICBvbkZpbGVBdHRhY2g/OiAoZmlsZTogRmlsZSkgPT4gdm9pZFxuICBvbkRlbGV0ZUF0dGFjaG1lbnQ/OiAoZmlsZUlkOiBzdHJpbmcpID0+IHZvaWRcbiAgYXR0YWNobWVudHM/OiBBdHRhY2htZW50RmlsZVtdXG4gIGNoYXRJZD86IHN0cmluZ1xuICBuZXdDaGF0S2V5PzogbnVtYmVyXG59XG5cbmV4cG9ydCBjb25zdCBNQUlBSW5wdXQgPSAoe1xuICBvblNlbmRNZXNzYWdlLFxuICBjbGFzc05hbWUsXG4gIGRpc2FibGVkLFxuICBpc1N0cmVhbWluZyxcbiAgaXNXcml0aW5nLFxuICBvblN0b3BHZW5lcmF0aW9uLFxuICBwbGFjZWhvbGRlcixcbiAgb25DaGFuZ2UsXG4gIGFsaWduQnV0dG9ucyA9ICd2ZXJ0aWNhbCcsXG4gIG9uRmlsZUF0dGFjaCxcbiAgb25EZWxldGVBdHRhY2htZW50LFxuICBhdHRhY2htZW50cyA9IFtdLFxuICBjaGF0SWQsXG4gIG5ld0NoYXRLZXksXG59OiBNQUlBSW5wdXRQcm9wcykgPT4ge1xuICBjb25zdCB7IHQgfSA9IHVzZVQoKVxuICBjb25zdCBlZGl0b3JSZWYgPSB1c2VSZWY8Q29udGV4dE1lbnRpb25FZGl0b3JIYW5kbGU+KG51bGwpXG4gIGNvbnN0IGZpbGVJbnB1dFJlZiA9IHVzZVJlZjxIVE1MSW5wdXRFbGVtZW50PihudWxsKVxuICBjb25zdCB3cmFwcGVyUmVmID0gdXNlUmVmPEhUTUxEaXZFbGVtZW50PihudWxsKVxuICBjb25zdCBbaGFzV3JhcHBlZFRvU2Vjb25kTGluZSwgc2V0SGFzV3JhcHBlZFRvU2Vjb25kTGluZV0gPSB1c2VTdGF0ZShmYWxzZSlcbiAgY29uc3QgW2hhc1R5cGluZ1ByZXNlbmNlLCBzZXRIYXNUeXBpbmdQcmVzZW5jZV0gPSB1c2VTdGF0ZShmYWxzZSlcbiAgY29uc3QgW2lzRm9jdXNlZCwgc2V0SXNGb2N1c2VkXSA9IHVzZVN0YXRlKGZhbHNlKVxuICBjb25zdCBbbW9kYWxQcm9wcywgc2V0TW9kYWxQcm9wc10gPSB1c2VTdGF0ZSh7XG4gICAgaXNPcGVuOiBmYWxzZSxcbiAgICBleGNsdWRlZEZpbGVzOiBbXSBhcyBzdHJpbmdbXSxcbiAgICBleGNlZWRlZEZpbGVzOiBbXSBhcyBzdHJpbmdbXSxcbiAgICBmaWxlU2l6ZXM6IHt9IGFzIFJlY29yZDxzdHJpbmcsIG51bWJlcj4sXG4gIH0pXG4gIGNvbnN0IGV2ZW50QW1wbGl0dWRlID0gdXNlRXZlbnQoKVxuICBjb25zdCB7IHRvZ2dsZVdlYlNlYXJjaCwgaXNXZWJTZWFyY2hBY3RpdmUsIHRvZ2dsZURlZXBTZWFyY2gsIGlzRGVlcFNlYXJjaEFjdGl2ZSwgYWdlbnQgfSA9IHVzZUdsb2JhbENvbnRleHQoKVxuXG4gIGNvbnN0IHtcbiAgICBwb3BvdmVyT3BlbixcbiAgICByZXNldE1lbnRpb25PcGVuVHJhY2tpbmcsXG4gICAgaGFuZGxlVHJpZ2dlcixcbiAgICBoYW5kbGVLZXlEb3duOiBoYW5kbGVQb3BvdmVyS2V5RG93bixcbiAgICBwb3BvdmVyTm9kZSxcbiAgfSA9IHVzZU1lbnRpb25Qb3BvdmVyKHtcbiAgICBlZGl0b3JSZWYsXG4gICAgcG9wb3ZlckFuY2hvclJlZjogd3JhcHBlclJlZixcbiAgfSlcblxuICBjb25zdCBbcGx1c01lbnVBbmNob3IsIHNldFBsdXNNZW51QW5jaG9yXSA9IHVzZVN0YXRlPEhUTUxCdXR0b25FbGVtZW50IHwgbnVsbD4obnVsbClcbiAgY29uc3QgW2FjdGl2ZVRvb2xDaGlwSG92ZXJlZCwgc2V0QWN0aXZlVG9vbENoaXBIb3ZlcmVkXSA9IHVzZVN0YXRlKGZhbHNlKVxuICBjb25zdCBbdG9vbENoaXBFeGl0aW5nLCBzZXRUb29sQ2hpcEV4aXRpbmddID0gdXNlU3RhdGUoZmFsc2UpXG4gIGNvbnN0IHRvb2xDaGlwRXhpdFRpbWVyUmVmID0gdXNlUmVmPFJldHVyblR5cGU8dHlwZW9mIHNldFRpbWVvdXQ+IHwgbnVsbD4obnVsbClcbiAgY29uc3Qgc2VhcmNoTW9kZUFjdGl2ZVJlZiA9IHVzZVJlZih7IHdlYjogZmFsc2UsIGRlZXA6IGZhbHNlIH0pXG4gIGNvbnN0IHBsdXNNZW51T3BlbiA9IEJvb2xlYW4ocGx1c01lbnVBbmNob3IpXG5cbiAgLy8gSW5pY2lhbGl6YXIgbGFzIHJlZmVyZW5jaWFzIGNvbW8gdW5kZWZpbmVkIHBhcmEgZGV0ZWN0YXIgZWwgcHJpbWVyIGNhbWJpbyBjb3JyZWN0YW1lbnRlXG4gIGNvbnN0IHByZXZpb3VzQWdlbnRJZFJlZiA9IHVzZVJlZjxzdHJpbmcgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZClcbiAgY29uc3QgcHJldmlvdXNDaGF0SWRSZWYgPSB1c2VSZWY8c3RyaW5nIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpXG4gIGNvbnN0IHByZXZpb3VzTmV3Q2hhdEtleVJlZiA9IHVzZVJlZjxudW1iZXIgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZClcblxuICBjb25zdCBhbmFseXRpY3NBZ2VudFR5cGUgPSBnZXRDaGF0VG9vbHNNZW51QWdlbnRUeXBlKGFnZW50KVxuICBjb25zdCBhbmFseXRpY3NDbG9uZUVudGl0eVBheWxvYWQgPSBhZ2VudD8udHlwZSA9PT0gJ2Nsb25lJyA/IHsgZW50aXR5OiBhZ2VudC5lbnRpdHkgPz8gbnVsbCB9IDoge31cblxuICAvKiogVHJhcyBlbGVnaXIgbyBxdWl0YXIgYsO6c3F1ZWRhIHdlYi9wcm9mdW5kYTogdm9sdmVyIGFsIHRleHRhcmVhIChQb3BvdmVyL21lbnUgcHVlZGUgcm9iYXIgZm9jbykuICovXG4gIGNvbnN0IHNjaGVkdWxlSW5wdXRGb2N1c0FmdGVyVG9vbEFjdGlvbiA9ICgpID0+IHtcbiAgICBpZiAoZGlzYWJsZWQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuICAgICAgd2luZG93LnNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBlZGl0b3JSZWYuY3VycmVudD8uZm9jdXMoKVxuICAgICAgfSwgMClcbiAgICB9KVxuICB9XG5cbiAgY29uc3QgY2xvc2VQbHVzTWVudSA9ICgpID0+IHtcbiAgICBzZXRQbHVzTWVudUFuY2hvcihudWxsKVxuICB9XG5cbiAgY29uc3QgY2FuY2VsUGVuZGluZ1Rvb2xDaGlwRXhpdCA9ICgpID0+IHtcbiAgICBpZiAodG9vbENoaXBFeGl0VGltZXJSZWYuY3VycmVudCAhPT0gbnVsbCkge1xuICAgICAgY2xlYXJUaW1lb3V0KHRvb2xDaGlwRXhpdFRpbWVyUmVmLmN1cnJlbnQpXG4gICAgICB0b29sQ2hpcEV4aXRUaW1lclJlZi5jdXJyZW50ID0gbnVsbFxuICAgIH1cbiAgICBzZXRUb29sQ2hpcEV4aXRpbmcoZmFsc2UpXG4gIH1cblxuICBjb25zdCBoYW5kbGVQbHVzQnV0dG9uQ2xpY2sgPSAoZTogTW91c2VFdmVudDxIVE1MQnV0dG9uRWxlbWVudD4pID0+IHtcbiAgICBlLnN0b3BQcm9wYWdhdGlvbigpXG4gICAgaWYgKHBsdXNNZW51QW5jaG9yKSB7XG4gICAgICBjbG9zZVBsdXNNZW51KClcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBzZXRQbHVzTWVudUFuY2hvcihlLmN1cnJlbnRUYXJnZXQpXG4gICAgZXZlbnRBbXBsaXR1ZGUoRVZFTlRTLmFpQ2hhdFBsdXNPcGVuLCB7IGFnZW50X3R5cGU6IGFuYWx5dGljc0FnZW50VHlwZSwgLi4uYW5hbHl0aWNzQ2xvbmVFbnRpdHlQYXlsb2FkIH0pXG4gIH1cblxuICBjb25zdCBoYW5kbGVQbHVzTWVudUF0dGFjaCA9ICgpID0+IHtcbiAgICBjbG9zZVBsdXNNZW51KClcbiAgICBldmVudEFtcGxpdHVkZShFVkVOVFMuYWlDaGF0VG9vbHMsIHtcbiAgICAgIGFnZW50X3R5cGU6IGFuYWx5dGljc0FnZW50VHlwZSxcbiAgICAgIG9wdGlvbjogJ2ZpbGVzJyxcbiAgICAgIC4uLmFuYWx5dGljc0Nsb25lRW50aXR5UGF5bG9hZCxcbiAgICB9KVxuICAgIGlmIChhdHRhY2htZW50cy5sZW5ndGggPj0gTUFYX0NIQVRfSU5QVVRfQVRUQUNITUVOVFMpIHJldHVyblxuICAgIGZpbGVJbnB1dFJlZi5jdXJyZW50Py5jbGljaygpXG4gIH1cblxuICBjb25zdCBiZWdpblRvb2xDaGlwRXhpdCA9ICgpID0+IHtcbiAgICBpZiAodG9vbENoaXBFeGl0VGltZXJSZWYuY3VycmVudCAhPT0gbnVsbCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGNvbnN0IHdhc1dlYiA9IGlzV2ViU2VhcmNoQWN0aXZlXG4gICAgY29uc3Qgd2FzRGVlcCA9IGlzRGVlcFNlYXJjaEFjdGl2ZVxuICAgIGlmICghd2FzV2ViICYmICF3YXNEZWVwKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgc2V0VG9vbENoaXBFeGl0aW5nKHRydWUpXG4gICAgdG9vbENoaXBFeGl0VGltZXJSZWYuY3VycmVudCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdG9vbENoaXBFeGl0VGltZXJSZWYuY3VycmVudCA9IG51bGxcbiAgICAgIGNvbnN0IHsgd2ViLCBkZWVwIH0gPSBzZWFyY2hNb2RlQWN0aXZlUmVmLmN1cnJlbnRcbiAgICAgIGlmICh3YXNXZWIgJiYgd2ViKSB7XG4gICAgICAgIHRvZ2dsZVdlYlNlYXJjaCgpXG4gICAgICB9IGVsc2UgaWYgKHdhc0RlZXAgJiYgZGVlcCkge1xuICAgICAgICB0b2dnbGVEZWVwU2VhcmNoKClcbiAgICAgIH1cbiAgICAgIHNldFRvb2xDaGlwRXhpdGluZyhmYWxzZSlcbiAgICAgIHNjaGVkdWxlSW5wdXRGb2N1c0FmdGVyVG9vbEFjdGlvbigpXG4gICAgfSwgVE9PTF9DSElQX0VYSVRfTVMpXG4gIH1cblxuICBjb25zdCBoYW5kbGVQbHVzTWVudVdlYlNlYXJjaCA9ICgpID0+IHtcbiAgICBjbG9zZVBsdXNNZW51KClcbiAgICBpZiAoaXNXZWJTZWFyY2hBY3RpdmUpIHtcbiAgICAgIGJlZ2luVG9vbENoaXBFeGl0KClcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBjYW5jZWxQZW5kaW5nVG9vbENoaXBFeGl0KClcbiAgICBpZiAoaXNEZWVwU2VhcmNoQWN0aXZlKSB7XG4gICAgICB0b2dnbGVEZWVwU2VhcmNoKClcbiAgICB9XG4gICAgdG9nZ2xlV2ViU2VhcmNoKClcbiAgICBldmVudEFtcGxpdHVkZShFVkVOVFMuYWlDaGF0VG9vbHMsIHtcbiAgICAgIGFnZW50X3R5cGU6IGFuYWx5dGljc0FnZW50VHlwZSxcbiAgICAgIG9wdGlvbjogJ3NlYXJjaCcsXG4gICAgICAuLi5hbmFseXRpY3NDbG9uZUVudGl0eVBheWxvYWQsXG4gICAgfSlcbiAgICBzY2hlZHVsZUlucHV0Rm9jdXNBZnRlclRvb2xBY3Rpb24oKVxuICB9XG5cbiAgY29uc3QgaGFuZGxlUGx1c01lbnVEZWVwU2VhcmNoID0gKCkgPT4ge1xuICAgIGNsb3NlUGx1c01lbnUoKVxuICAgIGlmIChpc0RlZXBTZWFyY2hBY3RpdmUpIHtcbiAgICAgIGJlZ2luVG9vbENoaXBFeGl0KClcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBjYW5jZWxQZW5kaW5nVG9vbENoaXBFeGl0KClcbiAgICBpZiAoaXNXZWJTZWFyY2hBY3RpdmUpIHtcbiAgICAgIHRvZ2dsZVdlYlNlYXJjaCgpXG4gICAgfVxuICAgIHRvZ2dsZURlZXBTZWFyY2goKVxuICAgIGV2ZW50QW1wbGl0dWRlKEVWRU5UUy5haUNoYXRUb29scywge1xuICAgICAgYWdlbnRfdHlwZTogYW5hbHl0aWNzQWdlbnRUeXBlLFxuICAgICAgb3B0aW9uOiAnZGVlcF9zZWFyY2gnLFxuICAgICAgLi4uYW5hbHl0aWNzQ2xvbmVFbnRpdHlQYXlsb2FkLFxuICAgIH0pXG4gICAgc2NoZWR1bGVJbnB1dEZvY3VzQWZ0ZXJUb29sQWN0aW9uKClcbiAgfVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFkaXNhYmxlZCkge1xuICAgICAgZWRpdG9yUmVmLmN1cnJlbnQ/LmZvY3VzKClcbiAgICB9XG4gIH0sIFtkaXNhYmxlZF0pXG5cbiAgY29uc3QgY29tcGFjdFNpbmdsZVJvd1Rvb2xiYXIgPSB1c2VNZW1vKFxuICAgICgpID0+IGF0dGFjaG1lbnRzLmxlbmd0aCA9PT0gMCAmJiAhaXNXZWJTZWFyY2hBY3RpdmUgJiYgIWlzRGVlcFNlYXJjaEFjdGl2ZSAmJiAhaGFzV3JhcHBlZFRvU2Vjb25kTGluZSxcbiAgICBbYXR0YWNobWVudHMubGVuZ3RoLCBpc1dlYlNlYXJjaEFjdGl2ZSwgaXNEZWVwU2VhcmNoQWN0aXZlLCBoYXNXcmFwcGVkVG9TZWNvbmRMaW5lXVxuICApXG5cbiAgY29uc3Qgc2VuZERpc2FibGVkID0gdXNlTWVtbyhcbiAgICAoKSA9PiAhaGFzVHlwaW5nUHJlc2VuY2UgJiYgYXR0YWNobWVudHMubGVuZ3RoID09PSAwLFxuICAgIFtoYXNUeXBpbmdQcmVzZW5jZSwgYXR0YWNobWVudHMubGVuZ3RoXVxuICApXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBzZWFyY2hNb2RlQWN0aXZlUmVmLmN1cnJlbnQgPSB7IHdlYjogaXNXZWJTZWFyY2hBY3RpdmUsIGRlZXA6IGlzRGVlcFNlYXJjaEFjdGl2ZSB9XG4gIH0sIFtpc1dlYlNlYXJjaEFjdGl2ZSwgaXNEZWVwU2VhcmNoQWN0aXZlXSlcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBpZiAodG9vbENoaXBFeGl0VGltZXJSZWYuY3VycmVudCAhPT0gbnVsbCkge1xuICAgICAgICBjbGVhclRpbWVvdXQodG9vbENoaXBFeGl0VGltZXJSZWYuY3VycmVudClcbiAgICAgIH1cbiAgICB9XG4gIH0sIFtdKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFpc1dlYlNlYXJjaEFjdGl2ZSAmJiAhaXNEZWVwU2VhcmNoQWN0aXZlKSB7XG4gICAgICBzZXRBY3RpdmVUb29sQ2hpcEhvdmVyZWQoZmFsc2UpXG4gICAgfVxuICB9LCBbaXNXZWJTZWFyY2hBY3RpdmUsIGlzRGVlcFNlYXJjaEFjdGl2ZV0pXG5cbiAgLy8gQXV0by1mb2N1cyBjdWFuZG8gY2FtYmlhIGVsIGFnZW50ZSBvIGxhIGNvbnZlcnNhY2nDs24sIG8gYWwgbW9udGFyIGVsIGNvbXBvbmVudGVcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBhZ2VudENoYW5nZWQgPSBwcmV2aW91c0FnZW50SWRSZWYuY3VycmVudCAhPT0gYWdlbnQ/LmlkXG4gICAgY29uc3QgcHJldmlvdXNDaGF0SWQgPSBwcmV2aW91c0NoYXRJZFJlZi5jdXJyZW50XG4gICAgY29uc3QgY3VycmVudENoYXRJZCA9IGNoYXRJZFxuICAgIGNvbnN0IGNoYXRDaGFuZ2VkID0gcHJldmlvdXNDaGF0SWQgIT09IGN1cnJlbnRDaGF0SWRcbiAgICBjb25zdCBjaGFuZ2VkRnJvbU5ld0NoYXRUb09sZENoYXQgPVxuICAgICAgKHByZXZpb3VzQ2hhdElkID09PSB1bmRlZmluZWQgfHwgcHJldmlvdXNDaGF0SWQgPT09IG51bGwpICYmIGN1cnJlbnRDaGF0SWQgIT09IHVuZGVmaW5lZCAmJiBjdXJyZW50Q2hhdElkICE9PSBudWxsXG4gICAgY29uc3QgbmV3Q2hhdFN0YXJ0ZWQgPSBwcmV2aW91c05ld0NoYXRLZXlSZWYuY3VycmVudCAhPT0gbmV3Q2hhdEtleVxuICAgIGNvbnN0IGlzSW5pdGlhbE1vdW50ID0gcHJldmlvdXNBZ2VudElkUmVmLmN1cnJlbnQgPT09IHVuZGVmaW5lZCAmJiBwcmV2aW91c0NoYXRJZFJlZi5jdXJyZW50ID09PSB1bmRlZmluZWRcblxuICAgIGlmICgoYWdlbnRDaGFuZ2VkIHx8IGNoYXRDaGFuZ2VkIHx8IGNoYW5nZWRGcm9tTmV3Q2hhdFRvT2xkQ2hhdCB8fCBuZXdDaGF0U3RhcnRlZCB8fCBpc0luaXRpYWxNb3VudCkgJiYgIWRpc2FibGVkKSB7XG4gICAgICBjb25zdCBkZWxheSA9IGlzSW5pdGlhbE1vdW50IHx8IGNoYW5nZWRGcm9tTmV3Q2hhdFRvT2xkQ2hhdCA/IDIwMCA6IDEwMFxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGlmICghZGlzYWJsZWQpIGVkaXRvclJlZi5jdXJyZW50Py5mb2N1cygpXG4gICAgICB9LCBkZWxheSlcbiAgICB9XG5cbiAgICBwcmV2aW91c0FnZW50SWRSZWYuY3VycmVudCA9IGFnZW50Py5pZFxuICAgIHByZXZpb3VzQ2hhdElkUmVmLmN1cnJlbnQgPSBjaGF0SWRcbiAgICBwcmV2aW91c05ld0NoYXRLZXlSZWYuY3VycmVudCA9IG5ld0NoYXRLZXlcbiAgfSwgW2FnZW50Py5pZCwgY2hhdElkLCBuZXdDaGF0S2V5LCBkaXNhYmxlZF0pXG5cbiAgLy8gQ2xlYXIgaW5wdXQgd2hlbiBzZXNzaW9uIGNoYW5nZXMgKHVzZXIgc3dpdGNoZXMgdG8gYSBkaWZmZXJlbnQgY2hhdClcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBoYW5kbGVTZXNzaW9uQ2hhbmdlID0gKCkgPT4ge1xuICAgICAgZWRpdG9yUmVmLmN1cnJlbnQ/LmNsZWFyKClcbiAgICAgIHNldEhhc1R5cGluZ1ByZXNlbmNlKGZhbHNlKVxuICAgICAgc2V0SGFzV3JhcHBlZFRvU2Vjb25kTGluZShmYWxzZSlcbiAgICAgIHJlc2V0TWVudGlvbk9wZW5UcmFja2luZygpXG4gICAgfVxuXG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignY2hhdC1zZXNzaW9uLWNoYW5nZWQnLCBoYW5kbGVTZXNzaW9uQ2hhbmdlKVxuICAgIHJldHVybiAoKSA9PiBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdjaGF0LXNlc3Npb24tY2hhbmdlZCcsIGhhbmRsZVNlc3Npb25DaGFuZ2UpXG4gIH0sIFtyZXNldE1lbnRpb25PcGVuVHJhY2tpbmddKVxuXG4gIGNvbnN0IGhhbmRsZVNlbmRNZXNzYWdlID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGNvbnN0IHN0YXRlID0gZWRpdG9yUmVmLmN1cnJlbnQ/LnNlcmlhbGl6ZSgpXG4gICAgY29uc3QgdGV4dCA9IHN0YXRlPy50ZXh0ID8/ICcnXG4gICAgaWYgKCF0ZXh0LnRyaW0oKSAmJiAhYXR0YWNobWVudHMubGVuZ3RoKSByZXR1cm5cbiAgICBjb25zdCBtZW50aW9ucyA9IHN0YXRlPy5tZW50aW9ucyA/PyBbXVxuICAgIG1lbnRpb25zLmZvckVhY2gobSA9PiB7XG4gICAgICBldmVudEFtcGxpdHVkZShFVkVOVFMuYWlDaGF0TWVudGlvblNlbmQsIHsgdHlwZTogbS50eXBlLCBpZDogU3RyaW5nKG0uaWQpIH0pXG4gICAgfSlcbiAgICBvblNlbmRNZXNzYWdlKHRleHQsIGF0dGFjaG1lbnRzLCBtZW50aW9ucylcbiAgICBlZGl0b3JSZWYuY3VycmVudD8uY2xlYXIoKVxuICAgIHNldEhhc1R5cGluZ1ByZXNlbmNlKGZhbHNlKVxuICAgIHNldEhhc1dyYXBwZWRUb1NlY29uZExpbmUoZmFsc2UpXG4gICAgcmVzZXRNZW50aW9uT3BlblRyYWNraW5nKClcbiAgfSwgW2F0dGFjaG1lbnRzLCBvblNlbmRNZXNzYWdlLCBldmVudEFtcGxpdHVkZSwgcmVzZXRNZW50aW9uT3BlblRyYWNraW5nXSlcblxuICBjb25zdCBoYW5kbGVFZGl0b3JJbnB1dCA9IHVzZUNhbGxiYWNrKFxuICAgICh7XG4gICAgICB0ZXh0LFxuICAgICAgdHJpZ2dlcixcbiAgICB9OiB7XG4gICAgICB0ZXh0OiBzdHJpbmdcbiAgICAgIG1lbnRpb25zOiBDb250ZXh0TWVudGlvbltdXG4gICAgICB0cmlnZ2VyOiB7IGFjdGl2ZTogYm9vbGVhbjsgcXVlcnk6IHN0cmluZzsgYXRSdW5MZW5ndGg6IG51bWJlciB9XG4gICAgfSkgPT4ge1xuICAgICAgY29uc3QgdmlzdWFsTXVsdGlsaW5lID0gISFlZGl0b3JSZWYuY3VycmVudD8uaGFzVmlzdWFsTXVsdGlsaW5lKClcbiAgICAgIGNvbnN0IGV4cGxpY2l0TXVsdGlsaW5lID0gdGV4dC5pbmNsdWRlcygnXFxuJylcbiAgICAgIGNvbnN0IG5leHRJc011bHRpbGluZSA9IGV4cGxpY2l0TXVsdGlsaW5lIHx8IHZpc3VhbE11bHRpbGluZVxuICAgICAgY29uc3QgbmV4dEhhc1R5cGluZ1ByZXNlbmNlID0gdGV4dC50cmltKCkubGVuZ3RoID4gMFxuXG4gICAgICBzZXRIYXNUeXBpbmdQcmVzZW5jZSh0ZXh0LnRyaW0oKS5sZW5ndGggPiAwKVxuICAgICAgc2V0SGFzV3JhcHBlZFRvU2Vjb25kTGluZShwcmV2ID0+IHtcbiAgICAgICAgaWYgKCFuZXh0SGFzVHlwaW5nUHJlc2VuY2UpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgICAgfVxuICAgICAgICBpZiAobmV4dElzTXVsdGlsaW5lKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcHJldlxuICAgICAgfSlcbiAgICAgIG9uQ2hhbmdlPy4oKVxuICAgICAgaGFuZGxlVHJpZ2dlcih0cmlnZ2VyKVxuICAgIH0sXG4gICAgW29uQ2hhbmdlLCBoYW5kbGVUcmlnZ2VyXVxuICApXG5cbiAgY29uc3QgaGFuZGxlS2V5RG93biA9IHVzZUNhbGxiYWNrKFxuICAgIChlOiBLZXlib2FyZEV2ZW50PEhUTUxEaXZFbGVtZW50PikgPT4ge1xuICAgICAgaWYgKGhhbmRsZVBvcG92ZXJLZXlEb3duKGUpKSByZXR1cm5cbiAgICAgIGlmIChlLmtleSA9PT0gJ0VudGVyJyAmJiAhZS5zaGlmdEtleSAmJiAhcG9wb3Zlck9wZW4pIHtcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpXG4gICAgICAgIGlmICghc2VuZERpc2FibGVkICYmICFkaXNhYmxlZCkgaGFuZGxlU2VuZE1lc3NhZ2UoKVxuICAgICAgfVxuICAgIH0sXG4gICAgW2hhbmRsZVBvcG92ZXJLZXlEb3duLCBwb3BvdmVyT3Blbiwgc2VuZERpc2FibGVkLCBkaXNhYmxlZCwgaGFuZGxlU2VuZE1lc3NhZ2VdXG4gIClcblxuICBjb25zdCBoYW5kbGVGaWxlU2VsZWN0ID0gKGU6IENoYW5nZUV2ZW50PEhUTUxJbnB1dEVsZW1lbnQ+KSA9PiB7XG4gICAgY29uc3QgZmlsZXMgPSBlLnRhcmdldC5maWxlc1xuICAgIGlmICghZmlsZXMpIHJldHVyblxuXG4gICAgY29uc3QgZXhjZWVkZWRGaWxlczogc3RyaW5nW10gPSBbXVxuICAgIGNvbnN0IGV4Y2x1ZGVkRmlsZXM6IHN0cmluZ1tdID0gW11cbiAgICBjb25zdCBmaWxlU2l6ZXM6IFJlY29yZDxzdHJpbmcsIG51bWJlcj4gPSB7fVxuICAgIGxldCBmaWxlc0luc2VydGVkID0gYXR0YWNobWVudHMubGVuZ3RoXG5cbiAgICAvLyBEZWZpbmlyIGzDrW1pdGVzIHBhcmEgZGlmZXJlbnRlcyB0aXBvcyBkZSBhcmNoaXZvc1xuICAgIGNvbnN0IGlzTmV3Rm9ybWF0ID0gKGV4dGVuc2lvbjogc3RyaW5nKSA9PiBbJy5wbmcnLCAnLmpwZycsICcuanBlZycsICcucGRmJ10uaW5jbHVkZXMoZXh0ZW5zaW9uKVxuICAgIGNvbnN0IGlzT2xkRm9ybWF0ID0gKGV4dGVuc2lvbjogc3RyaW5nKSA9PlxuICAgICAgWycudHh0JywgJy5tZCcsICcuY3N2JywgJy5kb2MnLCAnLmRvY3gnLCAnLnhsc3gnLCAnLnhscyddLmluY2x1ZGVzKGV4dGVuc2lvbilcbiAgICBjb25zdCBpc0F1ZGlvRm9ybWF0ID0gKGV4dGVuc2lvbjogc3RyaW5nKSA9PlxuICAgICAgWycuZmxhYycsICcubTRhJywgJy5tcDMnLCAnLm1wNCcsICcub2dhJywgJy5vZ2cnLCAnLndhdicsICcud2VibSddLmluY2x1ZGVzKGV4dGVuc2lvbilcblxuICAgIEFycmF5LmZyb20oZmlsZXMpLmZvckVhY2goZmlsZSA9PiB7XG4gICAgICBsZXQgZXhjbHVkZWRGaWxlID0gZmFsc2VcbiAgICAgIGNvbnN0IGZpbGVOYW1lUGFydHMgPSBmaWxlLm5hbWUuc3BsaXQoJy4nKVxuICAgICAgY29uc3QgZmlsZUV4dGVuc2lvbiA9IGZpbGVOYW1lUGFydHMubGVuZ3RoID4gMSA/IGAuJHtmaWxlTmFtZVBhcnRzLnBvcCgpPy50b0xvd2VyQ2FzZSgpfWAgOiAnJ1xuXG4gICAgICBpZiAoIWFsbG93ZWRGaWxlVHlwZXM/LmluY2x1ZGVzKGZpbGVFeHRlbnNpb24pKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBmaWxlU2l6ZXNbZmlsZS5uYW1lXSA9IGZpbGUuc2l6ZVxuXG4gICAgICAvLyBWYWxpZGFjaW9uZXMgZXNwZWPDrWZpY2FzIHNlZ8O6biBlbCB0aXBvIGRlIGFyY2hpdm9cbiAgICAgIGlmIChpc05ld0Zvcm1hdChmaWxlRXh0ZW5zaW9uKSkge1xuICAgICAgICAvLyBQYXJhIG51ZXZvcyBmb3JtYXRvczogaGFzdGEgNC45OU1CIHBvciBhcmNoaXZvLCBoYXN0YSBNQVhfQ0hBVF9JTlBVVF9BVFRBQ0hNRU5UUyBhcmNoaXZvc1xuICAgICAgICBpZiAoZmlsZS5zaXplID4gTUFYX0ZJTEVfU0laRV9NQl9NQUlBX1ZJU0lPTiAqIDEwMjQgKiAxMDI0KSB7XG4gICAgICAgICAgZXhjZWVkZWRGaWxlcy5wdXNoKGZpbGUubmFtZSlcbiAgICAgICAgICBleGNsdWRlZEZpbGUgPSB0cnVlXG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZmlsZXNJbnNlcnRlZCArIDEgPiBNQVhfQ0hBVF9JTlBVVF9BVFRBQ0hNRU5UUykge1xuICAgICAgICAgIGV4Y2x1ZGVkRmlsZXMucHVzaChmaWxlLm5hbWUpXG4gICAgICAgICAgZXhjbHVkZWRGaWxlID0gdHJ1ZVxuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGlzT2xkRm9ybWF0KGZpbGVFeHRlbnNpb24pKSB7XG4gICAgICAgIC8vIFBhcmEgZm9ybWF0b3MgYW50ZXJpb3JlczogaGFzdGEgMU1CIHBvciBhcmNoaXZvLCBoYXN0YSBNQVhfQ0hBVF9JTlBVVF9BVFRBQ0hNRU5UUyBhcmNoaXZvc1xuICAgICAgICBpZiAoZmlsZS5zaXplID4gTUFYX0ZJTEVfU0laRV9NQl9PTEQgKiAxMDI0ICogMTAyNCkge1xuICAgICAgICAgIGV4Y2VlZGVkRmlsZXMucHVzaChmaWxlLm5hbWUpXG4gICAgICAgICAgZXhjbHVkZWRGaWxlID0gdHJ1ZVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGZpbGVzSW5zZXJ0ZWQgKyAxID4gTUFYX0NIQVRfSU5QVVRfQVRUQUNITUVOVFMpIHtcbiAgICAgICAgICBleGNsdWRlZEZpbGVzLnB1c2goZmlsZS5uYW1lKVxuICAgICAgICAgIGV4Y2x1ZGVkRmlsZSA9IHRydWVcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChpc0F1ZGlvRm9ybWF0KGZpbGVFeHRlbnNpb24pKSB7XG4gICAgICAgIC8vIFBhcmEgYXJjaGl2b3MgZGUgYXVkaW86IGhhc3RhIDEwTUIgcG9yIGFyY2hpdm8sIGhhc3RhIE1BWF9DSEFUX0lOUFVUX0FUVEFDSE1FTlRTIGFyY2hpdm9zXG4gICAgICAgIGlmIChmaWxlLnNpemUgPiBNQVhfRklMRV9TSVpFX01CX0FVRElPICogMTAyNCAqIDEwMjQpIHtcbiAgICAgICAgICBleGNlZWRlZEZpbGVzLnB1c2goZmlsZS5uYW1lKVxuICAgICAgICAgIGV4Y2x1ZGVkRmlsZSA9IHRydWVcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChmaWxlc0luc2VydGVkICsgMSA+IE1BWF9DSEFUX0lOUFVUX0FUVEFDSE1FTlRTKSB7XG4gICAgICAgICAgZXhjbHVkZWRGaWxlcy5wdXNoKGZpbGUubmFtZSlcbiAgICAgICAgICBleGNsdWRlZEZpbGUgPSB0cnVlXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKCFleGNsdWRlZEZpbGUpIHtcbiAgICAgICAgZmlsZXNJbnNlcnRlZCArPSAxXG4gICAgICAgIGNvbnN0IHR5cGVGaWxlID0gZmlsZS50eXBlIHx8IGZpbGVUeXBlc1tmaWxlRXh0ZW5zaW9uXVxuICAgICAgICBjb25zdCBwYXJzZWRGaWxlID0gbmV3IEZpbGUoW2ZpbGVdLCBmaWxlLm5hbWUsIHsgdHlwZTogdHlwZUZpbGUgfSlcbiAgICAgICAgb25GaWxlQXR0YWNoPy4ocGFyc2VkRmlsZSlcbiAgICAgIH1cbiAgICB9KVxuXG4gICAgaWYgKGV4Y2x1ZGVkRmlsZXMubGVuZ3RoIHx8IGV4Y2VlZGVkRmlsZXMubGVuZ3RoKSB7XG4gICAgICBzZXRNb2RhbFByb3BzKHsgaXNPcGVuOiB0cnVlLCBleGNsdWRlZEZpbGVzLCBleGNlZWRlZEZpbGVzLCBmaWxlU2l6ZXMgfSlcbiAgICB9XG5cbiAgICBpZiAoZmlsZUlucHV0UmVmLmN1cnJlbnQpIHtcbiAgICAgIGZpbGVJbnB1dFJlZi5jdXJyZW50LnZhbHVlID0gJydcbiAgICB9XG4gIH1cblxuICBjb25zdCBoYW5kbGVEZWxldGVBdHRhY2htZW50ID0gKGZpbGVJZDogc3RyaW5nKSA9PiB7XG4gICAgb25EZWxldGVBdHRhY2htZW50Py4oZmlsZUlkKVxuICB9XG5cbiAgY29uc3QgaGFuZGxlV3JhcHBlckZvY3VzID0gKCkgPT4gc2V0SXNGb2N1c2VkKHRydWUpXG4gIGNvbnN0IGhhbmRsZVdyYXBwZXJCbHVyID0gKCkgPT4ge1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgaWYgKCF3cmFwcGVyUmVmLmN1cnJlbnQ/LmNvbnRhaW5zKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpKSB7XG4gICAgICAgIHNldElzRm9jdXNlZChmYWxzZSlcbiAgICAgIH1cbiAgICB9LCAwKVxuICB9XG5cbiAgY29uc3QgaGFuZGxlU3RvcEdlbmVyYXRpb24gPSAoKSA9PiB7XG4gICAgZXZlbnRBbXBsaXR1ZGUoRVZFTlRTLmFpQ2hhdFN0b3BSZXNwb25zZSlcbiAgICBvblN0b3BHZW5lcmF0aW9uPy4oKVxuICB9XG5cbiAgY29uc3QgcGx1c0ljb25Db2xvciA9IGlzRm9jdXNlZCA/IGNvbG9ycy50ZXh0LnNlY29uZGFyeSA6IGNvbG9ycy50ZXh0Lm1lZGl1bUdyYXlcbiAgY29uc3QgcGx1c01lbnVJY29uQ29sb3IgPSBNQUlBX0NIQVRfSU5QVVRfVUkubWVudUljb25cbiAgY29uc3QgcGx1c01lbnVTZWxlY3RlZENvbG9yID0gTUFJQV9DSEFUX0lOUFVUX1VJLnRleHRCcmFuZEJvbGRcblxuICBsZXQgYWN0aXZlVG9vbENoaXBMZWFkaW5nSWNvbjogUmVhY3ROb2RlXG4gIGlmIChhY3RpdmVUb29sQ2hpcEhvdmVyZWQpIHtcbiAgICBhY3RpdmVUb29sQ2hpcExlYWRpbmdJY29uID0gPENyb3NzIGNvbG9yPXtNQUlBX0NIQVRfSU5QVVRfVUkuY2hpcENsb3NlSWNvbn0gd2lkdGg9ezE4fSBoZWlnaHQ9ezE4fSAvPlxuICB9IGVsc2UgaWYgKGlzV2ViU2VhcmNoQWN0aXZlKSB7XG4gICAgYWN0aXZlVG9vbENoaXBMZWFkaW5nSWNvbiA9IDxHbG9iZSBjb2xvcj17cGx1c01lbnVJY29uQ29sb3J9IHdpZHRoPXsxOH0gaGVpZ2h0PXsxOH0gLz5cbiAgfSBlbHNlIHtcbiAgICBhY3RpdmVUb29sQ2hpcExlYWRpbmdJY29uID0gPFRlbGVzY29wZUljb24gY29sb3I9e3BsdXNNZW51SWNvbkNvbG9yfSB3aWR0aD17MTh9IGhlaWdodD17MTh9IC8+XG4gIH1cblxuICByZXR1cm4gKFxuICAgIDw+XG4gICAgICA8U3R5bGVkTUFJQUlucHV0V3JhcHBlclxuICAgICAgICByZWY9e3dyYXBwZXJSZWZ9XG4gICAgICAgIGRpc2FibGVkPXtmYWxzZX1cbiAgICAgICAgYWxpZ25CdXR0b25zPXthbGlnbkJ1dHRvbnN9XG4gICAgICAgIGhhc0F0dGFjaG1lbnRzPXshIWF0dGFjaG1lbnRzLmxlbmd0aH1cbiAgICAgICAgY29tcGFjdFNpbmdsZVJvd1Rvb2xiYXI9e2NvbXBhY3RTaW5nbGVSb3dUb29sYmFyfVxuICAgICAgICBkYXRhLW1haWEtc3RyZWFtaW5nPXtpc1N0cmVhbWluZyA/ICd0cnVlJyA6ICdmYWxzZSd9XG4gICAgICAgIG9uRm9jdXM9e2hhbmRsZVdyYXBwZXJGb2N1c31cbiAgICAgICAgb25CbHVyPXtoYW5kbGVXcmFwcGVyQmx1cn1cbiAgICAgID5cbiAgICAgICAgeyEhYXR0YWNobWVudHMubGVuZ3RoICYmIChcbiAgICAgICAgICA8ZGl2IHN0eWxlPXt7IGRpc3BsYXk6ICdmbGV4JywgZ2FwOiAnMTJweCcsIGFsaWduSXRlbXM6ICdjZW50ZXInIH19PlxuICAgICAgICAgICAge2F0dGFjaG1lbnRzLm1hcCgoYXR0YWNobWVudCwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgZmlsZU5hbWVQYXJ0cyA9IGF0dGFjaG1lbnQubmFtZS5zcGxpdCgnLicpXG4gICAgICAgICAgICAgIGNvbnN0IGZpbGVFeHRlbnNpb24gPSBmaWxlTmFtZVBhcnRzLmxlbmd0aCA+IDEgPyBgLiR7ZmlsZU5hbWVQYXJ0cy5wb3AoKT8udG9Mb3dlckNhc2UoKX1gIDogJydcbiAgICAgICAgICAgICAgY29uc3QgaXNJbWFnZUJ5RXh0ZW5zaW9uID0gWycucG5nJywgJy5qcGcnLCAnLmpwZWcnXS5pbmNsdWRlcyhmaWxlRXh0ZW5zaW9uKVxuICAgICAgICAgICAgICBjb25zdCBpc0ltYWdlQnlNaW1lID0gYXR0YWNobWVudC50eXBlPy5zdGFydHNXaXRoKCdpbWFnZS8nKVxuICAgICAgICAgICAgICBjb25zdCBpc0ltYWdlID0gaXNJbWFnZUJ5TWltZSAmJiBpc0ltYWdlQnlFeHRlbnNpb25cbiAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICA8VG9vbHRpcCB0aXRsZT17YXR0YWNobWVudC5uYW1lfSBrZXk9e2Ake2luZGV4fS0ke2F0dGFjaG1lbnQubmFtZX1gfT5cbiAgICAgICAgICAgICAgICAgIDxTQ01JQXR0YWNobWVudCBpc0ltYWdlPXtpc0ltYWdlfT5cbiAgICAgICAgICAgICAgICAgICAge2F0dGFjaG1lbnQuaWNvbn1cbiAgICAgICAgICAgICAgICAgICAgPFNDTUlBdHRhY2htZW50RGVsZXRlSWNvbiBvbkNsaWNrPXsoKSA9PiBoYW5kbGVEZWxldGVBdHRhY2htZW50KGF0dGFjaG1lbnQuaWQpfT5cbiAgICAgICAgICAgICAgICAgICAgICA8VHJhc2ggY29sb3I9XCJyZ2JhKDE5MSwgMTkxLCAxOTEsIDEpXCIgd2lkdGg9ezE4fSBoZWlnaHQ9ezE4fSAvPlxuICAgICAgICAgICAgICAgICAgICA8L1NDTUlBdHRhY2htZW50RGVsZXRlSWNvbj5cbiAgICAgICAgICAgICAgICAgIDwvU0NNSUF0dGFjaG1lbnQ+XG4gICAgICAgICAgICAgICAgPC9Ub29sdGlwPlxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9KX1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKX1cbiAgICAgICAgPFN0eWxlZE1BSUFNYWluVG9vbGJhckdyaWQgJGNvbXBhY3RSb3c9e2NvbXBhY3RTaW5nbGVSb3dUb29sYmFyfT5cbiAgICAgICAgICA8U3R5bGVkTUFJQVBsdXNUb29sYmFyQ2VsbCAkY29tcGFjdFJvdz17Y29tcGFjdFNpbmdsZVJvd1Rvb2xiYXJ9PlxuICAgICAgICAgICAgPFBsdXNNZW51VG9vbHNSb3c+XG4gICAgICAgICAgICAgIDxQbHVzVG9nZ2xlQnV0dG9uXG4gICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgJG1lbnVPcGVuPXtwbHVzTWVudU9wZW59XG4gICAgICAgICAgICAgICAgb25DbGljaz17aGFuZGxlUGx1c0J1dHRvbkNsaWNrfVxuICAgICAgICAgICAgICAgIGFyaWEtbGFiZWw9e3QoJ2NoYXQub3BlblBsdXNNZW51QXJpYScpfVxuICAgICAgICAgICAgICAgIGFyaWEtaGFzcG9wdXA9XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICBhcmlhLWV4cGFuZGVkPXtwbHVzTWVudU9wZW59XG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8UGx1cyBjb2xvcj17cGx1c0ljb25Db2xvcn0gd2lkdGg9ezIwfSBoZWlnaHQ9ezIwfSAvPlxuICAgICAgICAgICAgICA8L1BsdXNUb2dnbGVCdXR0b24+XG4gICAgICAgICAgICAgIDxQb3BvdmVyXG4gICAgICAgICAgICAgICAgb3Blbj17cGx1c01lbnVPcGVufVxuICAgICAgICAgICAgICAgIGFuY2hvckVsPXtwbHVzTWVudUFuY2hvcn1cbiAgICAgICAgICAgICAgICBvbkNsb3NlPXtjbG9zZVBsdXNNZW51fVxuICAgICAgICAgICAgICAgIGFuY2hvck9yaWdpbj17eyB2ZXJ0aWNhbDogJ3RvcCcsIGhvcml6b250YWw6ICdsZWZ0JyB9fVxuICAgICAgICAgICAgICAgIHRyYW5zZm9ybU9yaWdpbj17eyB2ZXJ0aWNhbDogJ2JvdHRvbScsIGhvcml6b250YWw6ICdsZWZ0JyB9fVxuICAgICAgICAgICAgICAgIHNsb3RQcm9wcz17e1xuICAgICAgICAgICAgICAgICAgcGFwZXI6IHtcbiAgICAgICAgICAgICAgICAgICAgZWxldmF0aW9uOiAwLFxuICAgICAgICAgICAgICAgICAgICBzeDoge1xuICAgICAgICAgICAgICAgICAgICAgIG92ZXJmbG93OiAndmlzaWJsZScsXG4gICAgICAgICAgICAgICAgICAgICAgYm9yZGVyUmFkaXVzOiAnNHB4JyxcbiAgICAgICAgICAgICAgICAgICAgICBib3hTaGFkb3c6ICdub25lJyxcbiAgICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6ICd0cmFuc3BhcmVudCcsXG4gICAgICAgICAgICAgICAgICAgICAgbWFyZ2luVG9wOiAnLTRweCcsXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8UGx1c01lbnVQYXBlcj5cbiAgICAgICAgICAgICAgICAgIDxQbHVzTWVudUlubmVyQ29sdW1uPlxuICAgICAgICAgICAgICAgICAgICA8UGx1c01lbnVJdGVtQnV0dG9uIHR5cGU9XCJidXR0b25cIiBvbkNsaWNrPXtoYW5kbGVQbHVzTWVudUF0dGFjaH0+XG4gICAgICAgICAgICAgICAgICAgICAgPEF0dGFjaCBjb2xvcj17cGx1c01lbnVJY29uQ29sb3J9IHdpZHRoPXsyMH0gaGVpZ2h0PXsyMH0gLz5cbiAgICAgICAgICAgICAgICAgICAgICA8UGx1c01lbnVJdGVtTGFiZWwgJHNlbGVjdGVkPXtmYWxzZX0+e3QoJ2NoYXQucGx1c01lbnVBdHRhY2gnKX08L1BsdXNNZW51SXRlbUxhYmVsPlxuICAgICAgICAgICAgICAgICAgICA8L1BsdXNNZW51SXRlbUJ1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPFBsdXNNZW51RGl2aWRlciAvPlxuICAgICAgICAgICAgICAgICAgICA8UGx1c01lbnVJdGVtQnV0dG9uIHR5cGU9XCJidXR0b25cIiBvbkNsaWNrPXtoYW5kbGVQbHVzTWVudVdlYlNlYXJjaH0+XG4gICAgICAgICAgICAgICAgICAgICAgPEdsb2JlXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xvcj17aXNXZWJTZWFyY2hBY3RpdmUgPyBwbHVzTWVudVNlbGVjdGVkQ29sb3IgOiBwbHVzTWVudUljb25Db2xvcn1cbiAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoPXsyMH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodD17MjB9XG4gICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICA8UGx1c01lbnVJdGVtTGFiZWwgJHNlbGVjdGVkPXshIWlzV2ViU2VhcmNoQWN0aXZlfT57dCgnY2hhdC5zZWFyY2hXZWInKX08L1BsdXNNZW51SXRlbUxhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgIHtpc1dlYlNlYXJjaEFjdGl2ZSA/IDxDaGVjayBjb2xvcj17cGx1c01lbnVTZWxlY3RlZENvbG9yfSB3aWR0aD17MTZ9IGhlaWdodD17MTZ9IC8+IDogbnVsbH1cbiAgICAgICAgICAgICAgICAgICAgPC9QbHVzTWVudUl0ZW1CdXR0b24+XG4gICAgICAgICAgICAgICAgICA8L1BsdXNNZW51SW5uZXJDb2x1bW4+XG4gICAgICAgICAgICAgICAgICA8UGx1c01lbnVJdGVtQnV0dG9uIHR5cGU9XCJidXR0b25cIiBvbkNsaWNrPXtoYW5kbGVQbHVzTWVudURlZXBTZWFyY2h9PlxuICAgICAgICAgICAgICAgICAgICA8VGVsZXNjb3BlSWNvblxuICAgICAgICAgICAgICAgICAgICAgIGNvbG9yPXtpc0RlZXBTZWFyY2hBY3RpdmUgPyBwbHVzTWVudVNlbGVjdGVkQ29sb3IgOiBwbHVzTWVudUljb25Db2xvcn1cbiAgICAgICAgICAgICAgICAgICAgICB3aWR0aD17MjB9XG4gICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0PXsyMH1cbiAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgPFBsdXNNZW51SXRlbUxhYmVsICRzZWxlY3RlZD17ISFpc0RlZXBTZWFyY2hBY3RpdmV9PlxuICAgICAgICAgICAgICAgICAgICAgIHt0KCdjaGF0LnBsdXNNZW51RGVlcEludmVzdGlnYXRpb24nKX1cbiAgICAgICAgICAgICAgICAgICAgPC9QbHVzTWVudUl0ZW1MYWJlbD5cbiAgICAgICAgICAgICAgICAgICAge2lzRGVlcFNlYXJjaEFjdGl2ZSA/IDxDaGVjayBjb2xvcj17cGx1c01lbnVTZWxlY3RlZENvbG9yfSB3aWR0aD17MTZ9IGhlaWdodD17MTZ9IC8+IDogbnVsbH1cbiAgICAgICAgICAgICAgICAgIDwvUGx1c01lbnVJdGVtQnV0dG9uPlxuICAgICAgICAgICAgICAgIDwvUGx1c01lbnVQYXBlcj5cbiAgICAgICAgICAgICAgPC9Qb3BvdmVyPlxuICAgICAgICAgICAgICB7KGlzV2ViU2VhcmNoQWN0aXZlIHx8IGlzRGVlcFNlYXJjaEFjdGl2ZSkgJiYgKFxuICAgICAgICAgICAgICAgIDxBY3RpdmVUb29sQ2hpcFJvb3RcbiAgICAgICAgICAgICAgICAgICRob3ZlcmVkPXthY3RpdmVUb29sQ2hpcEhvdmVyZWR9XG4gICAgICAgICAgICAgICAgICAkZXhpdGluZz17dG9vbENoaXBFeGl0aW5nfVxuICAgICAgICAgICAgICAgICAgb25Nb3VzZUVudGVyPXsoKSA9PiBzZXRBY3RpdmVUb29sQ2hpcEhvdmVyZWQodHJ1ZSl9XG4gICAgICAgICAgICAgICAgICBvbk1vdXNlTGVhdmU9eygpID0+IHNldEFjdGl2ZVRvb2xDaGlwSG92ZXJlZChmYWxzZSl9XG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPEFjdGl2ZVRvb2xDaGlwSWNvbkJ1dHRvblxuICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgJGNsb3NlU2hvd249e2FjdGl2ZVRvb2xDaGlwSG92ZXJlZH1cbiAgICAgICAgICAgICAgICAgICAgYXJpYS1sYWJlbD17dCgnY2hhdC5yZW1vdmVBY3RpdmVUb29sQXJpYScpfVxuICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXtlID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpXG4gICAgICAgICAgICAgICAgICAgICAgYmVnaW5Ub29sQ2hpcEV4aXQoKVxuICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICB7YWN0aXZlVG9vbENoaXBMZWFkaW5nSWNvbn1cbiAgICAgICAgICAgICAgICAgIDwvQWN0aXZlVG9vbENoaXBJY29uQnV0dG9uPlxuICAgICAgICAgICAgICAgICAgPEFjdGl2ZVRvb2xDaGlwTGFiZWw+XG4gICAgICAgICAgICAgICAgICAgIHtpc1dlYlNlYXJjaEFjdGl2ZSA/IHQoJ2NoYXQuc2VhcmNoV2ViJykgOiB0KCdjaGF0LnBsdXNNZW51RGVlcEludmVzdGlnYXRpb24nKX1cbiAgICAgICAgICAgICAgICAgIDwvQWN0aXZlVG9vbENoaXBMYWJlbD5cbiAgICAgICAgICAgICAgICA8L0FjdGl2ZVRvb2xDaGlwUm9vdD5cbiAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIDwvUGx1c01lbnVUb29sc1Jvdz5cbiAgICAgICAgICA8L1N0eWxlZE1BSUFQbHVzVG9vbGJhckNlbGw+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgc3R5bGU9e1xuICAgICAgICAgICAgICBjb21wYWN0U2luZ2xlUm93VG9vbGJhclxuICAgICAgICAgICAgICAgID8geyBncmlkQ29sdW1uOiAyLCBncmlkUm93OiAxLCBtaW5XaWR0aDogMCwgYWxpZ25TZWxmOiAnY2VudGVyJyB9XG4gICAgICAgICAgICAgICAgOiB7IGdyaWRDb2x1bW46ICcxIC8gLTEnLCBncmlkUm93OiAxLCBtaW5XaWR0aDogMCB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgPlxuICAgICAgICAgICAgPENvbnRleHRNZW50aW9uRWRpdG9yXG4gICAgICAgICAgICAgIHJlZj17ZWRpdG9yUmVmfVxuICAgICAgICAgICAgICBkaXNhYmxlZD17ZGlzYWJsZWR9XG4gICAgICAgICAgICAgIHBsYWNlaG9sZGVyPXtwbGFjZWhvbGRlcn1cbiAgICAgICAgICAgICAgb25JbnB1dD17aGFuZGxlRWRpdG9ySW5wdXR9XG4gICAgICAgICAgICAgIG9uS2V5RG93bj17aGFuZGxlS2V5RG93bn1cbiAgICAgICAgICAgICAgb25Gb2N1cz17aGFuZGxlV3JhcHBlckZvY3VzfVxuICAgICAgICAgICAgICBvbkJsdXI9e2hhbmRsZVdyYXBwZXJCbHVyfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8U3R5bGVkTUFJQVNlbmRUb29sYmFyQ2VsbCAkY29tcGFjdFJvdz17Y29tcGFjdFNpbmdsZVJvd1Rvb2xiYXJ9PlxuICAgICAgICAgICAge2lzV3JpdGluZyA/IChcbiAgICAgICAgICAgICAgPFRvb2x0aXAgdGl0bGU9e3QoJ2NoYXQuc3RvcCcpfT5cbiAgICAgICAgICAgICAgICA8U3R5bGVkTUFJQVN0b3BCdXR0b24gZGlzYWJsZWQ9e2ZhbHNlfSBvbkNsaWNrPXtoYW5kbGVTdG9wR2VuZXJhdGlvbn0gY2xhc3NOYW1lPXtjbGFzc05hbWV9PlxuICAgICAgICAgICAgICAgICAgPFN0eWxlZE1BSUFTdG9wSWNvbiAvPlxuICAgICAgICAgICAgICAgIDwvU3R5bGVkTUFJQVN0b3BCdXR0b24+XG4gICAgICAgICAgICAgIDwvVG9vbHRpcD5cbiAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgIDxUb29sdGlwIHRpdGxlPXt0KCdjaGF0LnNlbmQnKX0+XG4gICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9e3sgZGlzcGxheTogJ2lubGluZS1mbGV4JywgYWxpZ25JdGVtczogJ2NlbnRlcicgfX0+XG4gICAgICAgICAgICAgICAgICA8U3R5bGVkTUFJQVNlbmRCdXR0b25cbiAgICAgICAgICAgICAgICAgICAgb25DbGljaz17aGFuZGxlU2VuZE1lc3NhZ2V9XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17Y2xhc3NOYW1lfVxuICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZD17c2VuZERpc2FibGVkIHx8IGRpc2FibGVkfVxuICAgICAgICAgICAgICAgICAgICBoYXNWYWx1ZXM9e2hhc1R5cGluZ1ByZXNlbmNlIHx8IGF0dGFjaG1lbnRzLmxlbmd0aCA+IDB9XG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxQYXBlclBsYW5lIGNvbG9yPVwiI0JGQkZCRlwiIHdpZHRoPXsxOH0gaGVpZ2h0PXsxOH0gLz5cbiAgICAgICAgICAgICAgICAgIDwvU3R5bGVkTUFJQVNlbmRCdXR0b24+XG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICA8L1Rvb2x0aXA+XG4gICAgICAgICAgICApfVxuICAgICAgICAgIDwvU3R5bGVkTUFJQVNlbmRUb29sYmFyQ2VsbD5cbiAgICAgICAgPC9TdHlsZWRNQUlBTWFpblRvb2xiYXJHcmlkPlxuICAgICAgICA8aW5wdXRcbiAgICAgICAgICByZWY9e2ZpbGVJbnB1dFJlZn1cbiAgICAgICAgICB0eXBlPVwiZmlsZVwiXG4gICAgICAgICAgbXVsdGlwbGVcbiAgICAgICAgICBhY2NlcHQ9XCIudHh0LC5tZCwuY3N2LC5kb2MsLmRvY3gsLnBuZywuanBnLC5qcGVnLC5wZGYsLnhsc3gsLnhscywuZmxhYywubTRhLC5tcDMsLm1wNCwub2dhLC5vZ2csLndhdiwud2VibVwiXG4gICAgICAgICAgb25DaGFuZ2U9e2hhbmRsZUZpbGVTZWxlY3R9XG4gICAgICAgICAgc3R5bGU9e3sgZGlzcGxheTogJ25vbmUnIH19XG4gICAgICAgIC8+XG4gICAgICA8L1N0eWxlZE1BSUFJbnB1dFdyYXBwZXI+XG4gICAgICB7bW9kYWxQcm9wcy5pc09wZW4gJiYgKFxuICAgICAgICA8TW9kYWxGaWxlRXhjZWVkc1xuICAgICAgICAgIG9uQ2xvc2U9eygpID0+IHNldE1vZGFsUHJvcHMoeyBpc09wZW46IGZhbHNlLCBleGNsdWRlZEZpbGVzOiBbXSwgZXhjZWVkZWRGaWxlczogW10sIGZpbGVTaXplczoge30gfSl9XG4gICAgICAgICAgZXhjbHVkZWRGaWxlcz17bW9kYWxQcm9wcy5leGNsdWRlZEZpbGVzfVxuICAgICAgICAgIGV4Y2VlZGVkRmlsZXM9e21vZGFsUHJvcHMuZXhjZWVkZWRGaWxlc31cbiAgICAgICAgICBmaWxlU2l6ZXM9e21vZGFsUHJvcHMuZmlsZVNpemVzfVxuICAgICAgICAvPlxuICAgICAgKX1cbiAgICAgIHtwb3BvdmVyTm9kZSAmJiBjcmVhdGVQb3J0YWwocG9wb3Zlck5vZGUsIGRvY3VtZW50LmJvZHkpfVxuICAgIDwvPlxuICApXG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUtFQSxXQUFXLEVBQ1hDLFNBQVMsRUFDVEMsT0FBTyxFQUNQQyxNQUFNLEVBQ05DLFFBQVEsUUFDSCxPQUFPO0FBQ2QsU0FBU0MsWUFBWSxRQUFRLFdBQVc7QUFDeEMsU0FBU0MsT0FBTyxRQUFRLGVBQWU7QUFDdkMsU0FBU0MsVUFBVSxRQUFRLDZDQUE2QztBQUN4RSxTQUFTQyxNQUFNLFFBQVEseUNBQXlDO0FBQ2hFLFNBQVNDLEtBQUssUUFBUSx3Q0FBd0M7QUFDOUQsU0FBU0MsS0FBSyxRQUFRLHdDQUF3QztBQUM5RCxTQUFTQyxJQUFJLFFBQVEsdUNBQXVDO0FBQzVELFNBQVNDLEtBQUssUUFBUSx3Q0FBd0M7QUFDOUQsU0FBU0MsS0FBSyxRQUFRLHdDQUF3QztBQUM5RCxTQUFTQyxPQUFPLFFBQVEsOENBQThDO0FBQ3RFLE9BQU9DLE1BQU0sTUFBTSxtQ0FBbUM7QUFFdEQsU0FDRUMsd0JBQXdCLEVB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Q0FBQyxDQUFDLFdBQVcsQ0FBRTtZQUFBNkwsUUFBQSxlQUM3QnZOLElBQUE7Y0FBTTROLEtBQUssRUFBRTtnQkFBRUMsT0FBTyxFQUFFLGFBQWE7Z0JBQUVFLFVBQVUsRUFBRTtjQUFTLENBQUU7Y0FBQVIsUUFBQSxlQUM1RHZOLElBQUEsQ0FBQ3ZCLG9CQUFvQjtnQkFDbkJrUSxPQUFPLEVBQUUvRixpQkFBa0I7Z0JBQzNCbEksU0FBUyxFQUFFQSxTQUFVO2dCQUNyQkMsUUFBUSxFQUFFZ0gsWUFBWSxJQUFJaEgsUUFBUztnQkFDbkMrUCxTQUFTLEVBQUVyTyxpQkFBaUIsSUFBSWYsV0FBVyxDQUFDMkYsTUFBTSxHQUFHLENBQUU7Z0JBQUFzRyxRQUFBLGVBRXZEdk4sSUFBQSxDQUFDN0MsVUFBVTtrQkFBQ2dRLEtBQUssRUFBQyxTQUFTO2tCQUFDRSxLQUFLLEVBQUUsRUFBRztrQkFBQ0MsTUFBTSxFQUFFO2dCQUFHLENBQUU7Y0FBQyxDQUNqQztZQUFDLENBQ25CO1VBQUMsQ0FDQTtRQUNWLENBQ3dCLENBQUM7TUFBQSxDQUNILENBQUMsZUFDNUJ0TixJQUFBO1FBQ0V3TixHQUFHLEVBQUU1TCxZQUFhO1FBQ2xCOEQsSUFBSSxFQUFDLE1BQU07UUFDWGlMLFFBQVE7UUFDUkMsTUFBTSxFQUFDLG9HQUFvRztRQUMzRzVQLFFBQVEsRUFBRXdKLGdCQUFpQjtRQUMzQm9ELEtBQUssRUFBRTtVQUFFQyxPQUFPLEVBQUU7UUFBTztNQUFFLENBQzVCLENBQUM7SUFBQSxDQUNvQixDQUFDLEVBQ3hCNUssVUFBVSxDQUFDTCxNQUFNLGlCQUNoQjVDLElBQUEsQ0FBQ2hCLGdCQUFnQjtNQUNmZ1EsT0FBTyxFQUFFLFNBQVRBLE9BQU9BLENBQUE7UUFBQSxPQUFROUwsYUFBYSxDQUFDO1VBQUVOLE1BQU0sRUFBRSxLQUFLO1VBQUVDLGFBQWEsRUFBRSxFQUFFO1VBQUVDLGFBQWEsRUFBRSxFQUFFO1VBQUVDLFNBQVMsRUFBRSxDQUFDO1FBQUUsQ0FBQyxDQUFDO01BQUEsQ0FBQztNQUNyR0YsYUFBYSxFQUFFSSxVQUFVLENBQUNKLGFBQWM7TUFDeENDLGFBQWEsRUFBRUcsVUFBVSxDQUFDSCxhQUFjO01BQ3hDQyxTQUFTLEVBQUVFLFVBQVUsQ0FBQ0Y7SUFBVSxDQUNqQyxDQUNGLEVBQ0FrQixXQUFXLGlCQUFJaEgsWUFBWSxDQUFDZ0gsV0FBVyxFQUFFd0UsUUFBUSxDQUFDb0ksSUFBSSxDQUFDO0VBQUEsQ0FDeEQsQ0FBQztBQUVQLENBQUMiLCJpZ25vcmVMaXN0IjpbXX0=