@projectcor/maia-components 2.11.91 → 2.11.92-1

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 (69) hide show
  1. package/lib/components/atoms/Chip/Chip.js +12 -5
  2. package/lib/components/atoms/Chip/styles.js +6 -6
  3. package/lib/components/atoms/ContextMentionChip/ContextMentionChip.styles.js +7 -3
  4. package/lib/components/atoms/ContextMentionEditor/ContextMentionEditor.js +123 -28
  5. package/lib/components/atoms/ContextMentionEditor/ContextMentionEditor.styles.js +6 -2
  6. package/lib/components/atoms/ContextMentionItem/ContextMentionItem.js +29 -2
  7. package/lib/components/atoms/ContextMentionItem/ContextMentionItem.styles.js +33 -24
  8. package/lib/components/atoms/ContextMentionPopover/ContextMentionPopover.js +23 -4
  9. package/lib/components/atoms/MAIAInput/MAIAInput.js +340 -259
  10. package/lib/components/atoms/MAIAInput/MAIAInputEditor.js +5 -8
  11. package/lib/components/atoms/MAIAInput/maiaInputLayout.js +23 -0
  12. package/lib/components/atoms/MAIAInput/styles.js +99 -83
  13. package/lib/components/atoms/icons/MaiaInputAddIcon.js +42 -0
  14. package/lib/components/atoms/icons/MaiaInputAttachIcon.js +29 -0
  15. package/lib/components/atoms/icons/MaiaInputAttachmentImageIcon.js +33 -0
  16. package/lib/components/atoms/icons/MaiaInputDeepSearchIcon.js +35 -0
  17. package/lib/components/atoms/icons/MaiaInputMentionIcon.js +44 -0
  18. package/lib/components/atoms/icons/MaiaInputRobotIcon.js +29 -0
  19. package/lib/components/atoms/icons/MaiaInputSendIcon.js +29 -0
  20. package/lib/components/atoms/icons/MaiaInputSlashIcon.js +29 -0
  21. package/lib/components/atoms/icons/MaiaInputWebSearchIcon.js +35 -0
  22. package/lib/components/atoms/icons/SkillIcon.js +30 -0
  23. package/lib/components/atoms/icons/SkillsNavIcon.js +27 -0
  24. package/lib/components/atoms/icons/index.js +12 -1
  25. package/lib/components/molecules/ChatAIContent/ChatAIContent.js +14 -1
  26. package/lib/components/molecules/ChatAIHome/ChatAIHome.js +18 -7
  27. package/lib/components/molecules/ChatAIHome/styles.js +54 -38
  28. package/lib/components/molecules/ChatAIMessages/ChatAIMessages.js +11 -36
  29. package/lib/components/molecules/ChatAIMessages/newStyles.js +10 -26
  30. package/lib/components/molecules/ChatAIModal/ChatAIModal.js +34 -3
  31. package/lib/components/molecules/ChatAIModal/components/ChatAiModalFooter/ChatAiModalFooter.js +1 -4
  32. package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.js +4 -9
  33. package/lib/components/molecules/ChatAIModal/constants.js +6 -2
  34. package/lib/components/molecules/ChatAIMySkills/ChatAIMySkills.js +357 -0
  35. package/lib/components/molecules/ChatAIMySkills/ChatAIMySkills.styles.js +145 -0
  36. package/lib/components/molecules/ChatAIMySkills/index.js +2 -0
  37. package/lib/components/molecules/ChatFooter/ChatFooter.js +23 -62
  38. package/lib/components/molecules/ContextMentionInput/ContextMentionInput.js +3 -1
  39. package/lib/components/molecules/Sidebar/Sidebar.js +25 -4
  40. package/lib/components/organisms/AbmSkillGenerateModal/AbmSkillGenerateModal.js +160 -0
  41. package/lib/components/organisms/AbmSkillGenerateModal/AbmSkillGenerateModal.styles.js +34 -0
  42. package/lib/components/organisms/AbmSkillGenerateModal/index.js +2 -0
  43. package/lib/components/organisms/AbmSkillModal/AbmSkillModal.js +446 -0
  44. package/lib/components/organisms/AbmSkillModal/AbmSkillModal.styles.js +98 -0
  45. package/lib/components/organisms/AbmSkillModal/index.js +2 -0
  46. package/lib/components/organisms/DeleteQuestionModal/DeleteQuestionModal.js +8 -1
  47. package/lib/constants/config.js +4 -1
  48. package/lib/constants/permissions/index.js +2 -2
  49. package/lib/constants/permissions/utils.js +4 -1
  50. package/lib/hooks/useContextMentions.js +47 -9
  51. package/lib/hooks/useEntitySearch.js +277 -91
  52. package/lib/hooks/useMentionAllowedTypes.js +26 -8
  53. package/lib/hooks/useMentionPopover.js +42 -13
  54. package/lib/lang/br/index.js +59 -5
  55. package/lib/lang/en/index.js +59 -5
  56. package/lib/lang/es/index.js +59 -5
  57. package/lib/lang/fr/index.js +61 -4
  58. package/lib/services/maia/Skills/createSkill.js +39 -0
  59. package/lib/services/maia/Skills/deleteSkill.js +38 -0
  60. package/lib/services/maia/Skills/generateSkill.js +41 -0
  61. package/lib/services/maia/Skills/getSkills.js +90 -0
  62. package/lib/services/maia/Skills/updateSkill.js +39 -0
  63. package/lib/styles/config.js +2 -2
  64. package/lib/types/contextMention.js +1 -1
  65. package/lib/types/skill.js +2 -0
  66. package/lib/utils/contextMentionIcons.js +29 -1
  67. package/lib/utils/contextMentionTriggers.js +3 -1
  68. package/lib/utils/renderContextMentions.js +9 -4
  69. package/package.json +1 -1
@@ -11,31 +11,36 @@ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t =
11
11
  /* eslint-disable prefer-destructuring */
12
12
  /* eslint-disable jsx-a11y/click-events-have-key-events */
13
13
  /* eslint-disable jsx-a11y/no-static-element-interactions */
14
- import { useCallback, useEffect, useMemo, useRef, useState } from 'react';
14
+ import { useCallback, useEffect, useLayoutEffect, useMemo, useRef, useState } from 'react';
15
15
  import { createPortal } from 'react-dom';
16
16
  import { Popover } from '@mui/material';
17
- import { PaperPlane } from '@projectcor/icons/lib/components/PaperPlane';
18
- import { Attach } from '@projectcor/icons/lib/components/Attach';
19
- import { Globe } from '@projectcor/icons/lib/components/Globe';
20
- import { Trash } from '@projectcor/icons/lib/components/Trash';
21
- import { Plus } from '@projectcor/icons/lib/components/Plus';
22
17
  import { Check } from '@projectcor/icons/lib/components/Check';
23
18
  import { Cross } from '@projectcor/icons/lib/components/Cross';
24
19
  import { Tooltip } from '@projectcor/tooltipv2/lib/components/Tooltip';
25
- import colors from '@projectcor/theme/lib/base/colors';
26
- import { ActiveToolChipIconButton, ActiveToolChipLabel, ActiveToolChipRoot, PlusMenuDivider, PlusMenuInnerColumn, PlusMenuItemButton, PlusMenuItemLabel, PlusMenuPaper, PlusMenuToolsRow, PlusToggleButton, SCMIAttachment, SCMIAttachmentDeleteIcon, StyledMAIAInputWrapper, StyledMAIASendButton, StyledMAIAMainToolbarGrid, StyledMAIAPlusToolbarCell, StyledMAIASendToolbarCell, StyledMAIAStopButton, StyledMAIAStopIcon } from './styles';
20
+ import { ActiveToolChipIconButton, ActiveToolChipLabel, ActiveToolChipRoot, PlusMenuDivider, PlusMenuInnerColumn, PlusMenuItemButton, PlusMenuItemLabel, PlusMenuPaper, PlusMenuToolsRow, PlusToggleButton, SCInputChipsRow, SCInputMetaIconButton, SCInputMetaIndicators, SCMIAttachment, SCMIAttachmentDeleteIcon, SCMIAttachmentDeleteOverlay, SCMIAttachmentIcon, SCMIAttachmentName, StyledMAIAInputWrapper, StyledMAIASendButton, StyledMAIAMainToolbarGrid, SCInputEditorCell, SCInputToolbarRow, StyledMAIAPlusToolbarCell, StyledMAIASendToolbarCell, StyledMAIAStopButton, StyledMAIAStopIcon } from './styles';
21
+ import { getMaiaInputEditorMaxHeight, MAIA_INPUT_TOOLBAR_ROW_HEIGHT_PX } from './maiaInputLayout';
27
22
  import { useGlobalContext } from '../../../context/global-context';
28
23
  import { ModalFileExceeds } from '../../organisms/ModalFileExceeds';
29
24
  import { SlashCommandDropdown } from '../SlashCommandDropdown';
30
25
  import { useSlashCommands } from '../../../hooks/useSlashCommands';
31
26
  import { resolveQuickActionType } from '../../../utils/hoursPlannerQuickActionType';
32
27
  import { useT } from '../../../hooks/useT';
33
- import { TelescopeIcon } from '../icons/TelescopeIcon';
28
+ import { MaiaInputAddIcon } from '../icons/MaiaInputAddIcon';
29
+ import { MaiaInputAttachIcon } from '../icons/MaiaInputAttachIcon';
30
+ import { MaiaInputAttachmentImageIcon } from '../icons/MaiaInputAttachmentImageIcon';
31
+ import { MaiaInputDeepSearchIcon } from '../icons/MaiaInputDeepSearchIcon';
32
+ import { CorAccessIcon } from '../icons/CorAccessIcon';
33
+ import { MaiaInputMentionIcon } from '../icons/MaiaInputMentionIcon';
34
+ import { MaiaInputRobotIcon } from '../icons/MaiaInputRobotIcon';
35
+ import { MaiaInputSendIcon } from '../icons/MaiaInputSendIcon';
36
+ import { MaiaInputSlashIcon } from '../icons/MaiaInputSlashIcon';
37
+ import { MaiaInputWebSearchIcon } from '../icons/MaiaInputWebSearchIcon';
34
38
  import { EVENTS, useEvent } from '../../../hooks/useEvent';
35
39
  import { getChatToolsMenuAgentType } from '../../../utils/hitlAnalytics';
36
40
  import { MAIA_CHAT_INPUT_UI } from '../../../styles/config';
37
41
  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';
38
42
  import { APPCUES_EVENTS, trackAppcuesEvent } from '../../../services/appcues';
43
+ import { Chip } from '../Chip';
39
44
  import { ContextMentionEditor } from '../ContextMentionEditor';
40
45
  import { useMaiaTaskPanelZIndex } from '../../../hooks/useMaiaTaskPanelZIndex';
41
46
  // eslint-disable-next-line import/no-cycle
@@ -43,7 +48,7 @@ import { useMentionPopover } from '../../../hooks/useMentionPopover';
43
48
  import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
44
49
  var TOOL_CHIP_EXIT_MS = 220;
45
50
  export var MAIAInput = function MAIAInput(_ref) {
46
- var _agent$entity;
51
+ var _agent$entity, _contextChip$items, _contextChip$items2, _agent$connectors, _agent$model_display_, _contextChip$items3;
47
52
  var onSendMessage = _ref.onSendMessage,
48
53
  className = _ref.className,
49
54
  disabled = _ref.disabled,
@@ -62,25 +67,28 @@ export var MAIAInput = function MAIAInput(_ref) {
62
67
  newChatKey = _ref.newChatKey,
63
68
  tooltipZIndex = _ref.tooltipZIndex,
64
69
  externalPopoverAnchorRef = _ref.popoverAnchorRef,
65
- layoutMode = _ref.layoutMode;
70
+ layoutMode = _ref.layoutMode,
71
+ contextChip = _ref.contextChip;
66
72
  var _useT = useT(),
67
73
  t = _useT.t;
68
74
  var editorRef = useRef(null);
69
75
  var fileInputRef = useRef(null);
76
+ var chipsRowRef = useRef(null);
77
+ var toolbarRowRef = useRef(null);
70
78
  var internalWrapperRef = useRef(null);
71
79
  var wrapperRef = externalPopoverAnchorRef !== null && externalPopoverAnchorRef !== void 0 ? externalPopoverAnchorRef : internalWrapperRef;
72
80
  var _useState = useState(false),
73
81
  _useState2 = _slicedToArray(_useState, 2),
74
- hasWrappedToSecondLine = _useState2[0],
75
- setHasWrappedToSecondLine = _useState2[1];
76
- var _useState3 = useState(false),
82
+ hasTypingPresence = _useState2[0],
83
+ setHasTypingPresence = _useState2[1];
84
+ var _useState3 = useState(0),
77
85
  _useState4 = _slicedToArray(_useState3, 2),
78
- hasTypingPresence = _useState4[0],
79
- setHasTypingPresence = _useState4[1];
80
- var _useState5 = useState(false),
86
+ chipsRowHeight = _useState4[0],
87
+ setChipsRowHeight = _useState4[1];
88
+ var _useState5 = useState(MAIA_INPUT_TOOLBAR_ROW_HEIGHT_PX),
81
89
  _useState6 = _slicedToArray(_useState5, 2),
82
- isFocused = _useState6[0],
83
- setIsFocused = _useState6[1];
90
+ toolbarRowHeight = _useState6[0],
91
+ setToolbarRowHeight = _useState6[1];
84
92
  var _useState7 = useState({
85
93
  isOpen: false,
86
94
  excludedFiles: [],
@@ -167,6 +175,7 @@ export var MAIAInput = function MAIAInput(_ref) {
167
175
  };
168
176
  var closePlusMenu = function closePlusMenu() {
169
177
  setPlusMenuAnchor(null);
178
+ scheduleInputFocusAfterToolAction();
170
179
  };
171
180
  var cancelPendingToolChipExit = function cancelPendingToolChipExit() {
172
181
  if (toolChipExitTimerRef.current !== null) {
@@ -175,6 +184,10 @@ export var MAIAInput = function MAIAInput(_ref) {
175
184
  }
176
185
  setToolChipExiting(false);
177
186
  };
187
+ var handlePlusButtonMouseDown = function handlePlusButtonMouseDown(e) {
188
+ // Evita que el botón robe el foco del input al abrir el menú.
189
+ e.preventDefault();
190
+ };
178
191
  var handlePlusButtonClick = function handlePlusButtonClick(e) {
179
192
  e.stopPropagation();
180
193
  if (plusMenuAnchor) {
@@ -186,6 +199,13 @@ export var MAIAInput = function MAIAInput(_ref) {
186
199
  agent_type: analyticsAgentType
187
200
  }, analyticsCloneEntityPayload));
188
201
  };
202
+ var handleMentionButtonClick = function handleMentionButtonClick(e) {
203
+ var _editorRef$current2;
204
+ e.stopPropagation();
205
+ if (disabled) return;
206
+ closePlusMenu();
207
+ (_editorRef$current2 = editorRef.current) === null || _editorRef$current2 === void 0 || _editorRef$current2.insertMentionTrigger();
208
+ };
189
209
  var handlePlusMenuAttach = function handlePlusMenuAttach() {
190
210
  var _fileInputRef$current;
191
211
  closePlusMenu();
@@ -254,14 +274,20 @@ export var MAIAInput = function MAIAInput(_ref) {
254
274
  }, analyticsCloneEntityPayload));
255
275
  scheduleInputFocusAfterToolAction();
256
276
  };
277
+ var handlePlusMenuQuickActions = function handlePlusMenuQuickActions() {
278
+ var _editorRef$current3;
279
+ setPlusMenuAnchor(null);
280
+ if (disabled) return;
281
+ (_editorRef$current3 = editorRef.current) === null || _editorRef$current3 === void 0 || _editorRef$current3.insertSlashTrigger();
282
+ };
257
283
  useEffect(function () {
258
284
  if (!disabled) {
259
- var _editorRef$current2;
260
- (_editorRef$current2 = editorRef.current) === null || _editorRef$current2 === void 0 || _editorRef$current2.focus();
285
+ var _editorRef$current4;
286
+ (_editorRef$current4 = editorRef.current) === null || _editorRef$current4 === void 0 || _editorRef$current4.focus();
261
287
  }
262
288
  }, [disabled]);
263
289
  useEffect(function () {
264
- var _editorRef$current3;
290
+ var _editorRef$current5;
265
291
  var draft = initialDraft === null || initialDraft === void 0 ? void 0 : initialDraft.trim();
266
292
  if (!draft || initialDraftAppliedRef.current || disabled) {
267
293
  return;
@@ -270,16 +296,13 @@ export var MAIAInput = function MAIAInput(_ref) {
270
296
  if (deepLinkSendPendingRef) {
271
297
  deepLinkSendPendingRef.current = true;
272
298
  }
273
- (_editorRef$current3 = editorRef.current) === null || _editorRef$current3 === void 0 || _editorRef$current3.setPlainText(draft);
299
+ (_editorRef$current5 = editorRef.current) === null || _editorRef$current5 === void 0 || _editorRef$current5.setPlainText(draft);
274
300
  setHasTypingPresence(true);
275
301
  if (!disabled) {
276
- var _editorRef$current4;
277
- (_editorRef$current4 = editorRef.current) === null || _editorRef$current4 === void 0 || _editorRef$current4.focus();
302
+ var _editorRef$current6;
303
+ (_editorRef$current6 = editorRef.current) === null || _editorRef$current6 === void 0 || _editorRef$current6.focus();
278
304
  }
279
305
  }, [initialDraft, disabled, deepLinkSendPendingRef]);
280
- var compactSingleRowToolbar = useMemo(function () {
281
- return attachments.length === 0 && !isWebSearchActive && !isDeepSearchActive && !hasWrappedToSecondLine;
282
- }, [attachments.length, isWebSearchActive, isDeepSearchActive, hasWrappedToSecondLine]);
283
306
  var sendDisabled = useMemo(function () {
284
307
  return !hasTypingPresence && attachments.length === 0;
285
308
  }, [hasTypingPresence, attachments.length]);
@@ -314,8 +337,8 @@ export var MAIAInput = function MAIAInput(_ref) {
314
337
  if ((agentChanged || chatChanged || changedFromNewChatToOldChat || newChatStarted || isInitialMount) && !disabled) {
315
338
  var delay = isInitialMount || changedFromNewChatToOldChat ? 200 : 100;
316
339
  setTimeout(function () {
317
- var _editorRef$current5;
318
- if (!disabled) (_editorRef$current5 = editorRef.current) === null || _editorRef$current5 === void 0 || _editorRef$current5.focus();
340
+ var _editorRef$current7;
341
+ if (!disabled) (_editorRef$current7 = editorRef.current) === null || _editorRef$current7 === void 0 || _editorRef$current7.focus();
319
342
  }, delay);
320
343
  }
321
344
  previousAgentIdRef.current = agent === null || agent === void 0 ? void 0 : agent.id;
@@ -335,8 +358,8 @@ export var MAIAInput = function MAIAInput(_ref) {
335
358
  }
336
359
  var timeoutId = window.setTimeout(function () {
337
360
  if (!disabled) {
338
- var _editorRef$current6;
339
- (_editorRef$current6 = editorRef.current) === null || _editorRef$current6 === void 0 || _editorRef$current6.focus();
361
+ var _editorRef$current8;
362
+ (_editorRef$current8 = editorRef.current) === null || _editorRef$current8 === void 0 || _editorRef$current8.focus();
340
363
  }
341
364
  }, 200);
342
365
  return function () {
@@ -367,13 +390,12 @@ export var MAIAInput = function MAIAInput(_ref) {
367
390
  // Clear input when session changes (user switches to a different chat)
368
391
  useEffect(function () {
369
392
  var handleSessionChange = function handleSessionChange() {
370
- var _editorRef$current7;
393
+ var _editorRef$current9;
371
394
  if (deepLinkSendPendingRef) {
372
395
  deepLinkSendPendingRef.current = false;
373
396
  }
374
- (_editorRef$current7 = editorRef.current) === null || _editorRef$current7 === void 0 || _editorRef$current7.clear();
397
+ (_editorRef$current9 = editorRef.current) === null || _editorRef$current9 === void 0 || _editorRef$current9.clear();
375
398
  setHasTypingPresence(false);
376
- setHasWrappedToSecondLine(false);
377
399
  setShowSlashDropdown(false);
378
400
  setSlashQuery('');
379
401
  resetMentionOpenTracking();
@@ -389,8 +411,8 @@ export var MAIAInput = function MAIAInput(_ref) {
389
411
  var handleRefocus = function handleRefocus() {
390
412
  if (disabled) return;
391
413
  requestAnimationFrame(function () {
392
- var _editorRef$current8;
393
- (_editorRef$current8 = editorRef.current) === null || _editorRef$current8 === void 0 || _editorRef$current8.focus();
414
+ var _editorRef$current0;
415
+ (_editorRef$current0 = editorRef.current) === null || _editorRef$current0 === void 0 || _editorRef$current0.focus();
394
416
  });
395
417
  };
396
418
  document.addEventListener('maia-input-refocus', handleRefocus);
@@ -399,43 +421,41 @@ export var MAIAInput = function MAIAInput(_ref) {
399
421
  };
400
422
  }, [disabled]);
401
423
  var handleSendMessage = useCallback(function () {
402
- var _editorRef$current9, _state$text, _state$mentions, _editorRef$current0;
403
- var state = (_editorRef$current9 = editorRef.current) === null || _editorRef$current9 === void 0 ? void 0 : _editorRef$current9.serialize();
424
+ var _editorRef$current1, _state$text, _state$mentions, _editorRef$current10;
425
+ var state = (_editorRef$current1 = editorRef.current) === null || _editorRef$current1 === void 0 ? void 0 : _editorRef$current1.serialize();
404
426
  var text = (_state$text = state === null || state === void 0 ? void 0 : state.text) !== null && _state$text !== void 0 ? _state$text : '';
405
427
  if (!text.trim() && !attachments.length) return;
406
428
  var mentions = (_state$mentions = state === null || state === void 0 ? void 0 : state.mentions) !== null && _state$mentions !== void 0 ? _state$mentions : [];
407
429
  onSendMessage(text, attachments, mentions);
408
- (_editorRef$current0 = editorRef.current) === null || _editorRef$current0 === void 0 || _editorRef$current0.clear();
430
+ (_editorRef$current10 = editorRef.current) === null || _editorRef$current10 === void 0 || _editorRef$current10.clear();
409
431
  setHasTypingPresence(false);
410
- setHasWrappedToSecondLine(false);
411
432
  setShowSlashDropdown(false);
412
433
  setSlashQuery('');
413
434
  resetMentionOpenTracking();
414
435
  }, [attachments, onSendMessage, resetMentionOpenTracking]);
415
436
  var handleSelectSlashCommand = useCallback(function (command) {
416
- var _editorRef$current1, _state$text2, _editorRef$current11;
437
+ var _editorRef$current11, _state$text2, _editorRef$current13;
417
438
  eventAmplitude(EVENTS.aiChatQuickActionSelect, {
418
439
  type_quick_action: resolveQuickActionType(command),
419
440
  origin_quick_action: 'slash_menu'
420
441
  });
421
- var state = (_editorRef$current1 = editorRef.current) === null || _editorRef$current1 === void 0 ? void 0 : _editorRef$current1.serialize();
442
+ var state = (_editorRef$current11 = editorRef.current) === null || _editorRef$current11 === void 0 ? void 0 : _editorRef$current11.serialize();
422
443
  var text = (_state$text2 = state === null || state === void 0 ? void 0 : state.text) !== null && _state$text2 !== void 0 ? _state$text2 : '';
423
444
  var triggerPart = "/".concat(slashQuery);
424
445
  var beforeTrigger = text.endsWith(triggerPart) ? text.slice(0, -triggerPart.length) : text;
425
446
  var isEmptyBeforeTrigger = beforeTrigger.trim() === '';
426
447
  if (isEmptyBeforeTrigger) {
427
- var _editorRef$current10;
448
+ var _editorRef$current12;
428
449
  onSendMessage(command.title, attachments, undefined, undefined, undefined, undefined, command.id);
429
- (_editorRef$current10 = editorRef.current) === null || _editorRef$current10 === void 0 || _editorRef$current10.clear();
450
+ (_editorRef$current12 = editorRef.current) === null || _editorRef$current12 === void 0 || _editorRef$current12.clear();
430
451
  setHasTypingPresence(false);
431
- setHasWrappedToSecondLine(false);
432
452
  setShowSlashDropdown(false);
433
453
  setSlashQuery('');
434
454
  slashMenuWasOpenRef.current = false;
435
455
  resetMentionOpenTracking();
436
456
  return;
437
457
  }
438
- (_editorRef$current11 = editorRef.current) === null || _editorRef$current11 === void 0 || _editorRef$current11.insertSlashCommand({
458
+ (_editorRef$current13 = editorRef.current) === null || _editorRef$current13 === void 0 || _editorRef$current13.insertSlashCommand({
439
459
  id: command.id,
440
460
  label: command.title
441
461
  });
@@ -448,27 +468,10 @@ export var MAIAInput = function MAIAInput(_ref) {
448
468
  slashMenuWasOpenRef.current = false;
449
469
  };
450
470
  var handleEditorInput = useCallback(function (_ref4) {
451
- var _editorRef$current12;
452
471
  var text = _ref4.text,
453
472
  trigger = _ref4.trigger,
454
473
  slashTrigger = _ref4.slashTrigger;
455
- var visualMultiline = !!((_editorRef$current12 = editorRef.current) !== null && _editorRef$current12 !== void 0 && _editorRef$current12.hasVisualMultiline());
456
- var explicitMultiline = text.includes('\n');
457
- var isLikelyFirstCharMeasurementGlitch = text.length <= 1 && !explicitMultiline && visualMultiline;
458
- var stableVisualMultiline = isLikelyFirstCharMeasurementGlitch ? false : visualMultiline;
459
- var nextIsMultiline = explicitMultiline || stableVisualMultiline;
460
- var nextHasTypingPresence = text.trim().length > 0;
461
- var nextTypingPresence = text.trim().length > 0;
462
- setHasTypingPresence(nextTypingPresence);
463
- setHasWrappedToSecondLine(function (prev) {
464
- var next = prev;
465
- if (!nextHasTypingPresence) {
466
- next = false;
467
- } else if (nextIsMultiline) {
468
- next = true;
469
- }
470
- return next;
471
- });
474
+ setHasTypingPresence(text.trim().length > 0);
472
475
  onChange === null || onChange === void 0 || onChange();
473
476
  handleTrigger(trigger);
474
477
  if (slashTrigger !== null && slashTrigger !== void 0 && slashTrigger.active && slashCommands.length > 0) {
@@ -575,24 +578,49 @@ export var MAIAInput = function MAIAInput(_ref) {
575
578
  var handleDeleteAttachment = function handleDeleteAttachment(fileId) {
576
579
  onDeleteAttachment === null || onDeleteAttachment === void 0 || onDeleteAttachment(fileId);
577
580
  };
578
- var handleWrapperFocus = function handleWrapperFocus() {
579
- return setIsFocused(true);
580
- };
581
- var handleWrapperBlur = function handleWrapperBlur() {
582
- setTimeout(function () {
583
- var _wrapperRef$current;
584
- if (!((_wrapperRef$current = wrapperRef.current) !== null && _wrapperRef$current !== void 0 && _wrapperRef$current.contains(document.activeElement))) {
585
- setIsFocused(false);
586
- }
587
- }, 0);
588
- };
589
581
  var handleStopGeneration = function handleStopGeneration() {
590
582
  eventAmplitude(EVENTS.aiChatStopResponse);
591
583
  onStopGeneration === null || onStopGeneration === void 0 || onStopGeneration();
592
584
  };
593
- var plusIconColor = isFocused ? colors.text.secondary : colors.text.mediumGray;
585
+ var showChipsRow = Boolean((contextChip === null || contextChip === void 0 || (_contextChip$items = contextChip.items) === null || _contextChip$items === void 0 ? void 0 : _contextChip$items.length) || attachments.length);
586
+ useLayoutEffect(function () {
587
+ var chipsEl = chipsRowRef.current;
588
+ var toolbarEl = toolbarRowRef.current;
589
+ var updateHeights = function updateHeights() {
590
+ var nextChips = showChipsRow && chipsEl ? Math.ceil(chipsEl.getBoundingClientRect().height) : 0;
591
+ var nextToolbar = toolbarEl ? Math.ceil(toolbarEl.getBoundingClientRect().height) : MAIA_INPUT_TOOLBAR_ROW_HEIGHT_PX;
592
+ setChipsRowHeight(function (prev) {
593
+ return prev === nextChips ? prev : nextChips;
594
+ });
595
+ setToolbarRowHeight(function (prev) {
596
+ return prev === nextToolbar ? prev : nextToolbar;
597
+ });
598
+ };
599
+ updateHeights();
600
+ var observer = new ResizeObserver(updateHeights);
601
+ if (showChipsRow && chipsEl) observer.observe(chipsEl);
602
+ if (toolbarEl) observer.observe(toolbarEl);
603
+ return function () {
604
+ return observer.disconnect();
605
+ };
606
+ }, [showChipsRow, contextChip === null || contextChip === void 0 || (_contextChip$items2 = contextChip.items) === null || _contextChip$items2 === void 0 ? void 0 : _contextChip$items2.length, attachments.length]);
607
+ var editorMaxHeight = useMemo(function () {
608
+ return getMaiaInputEditorMaxHeight({
609
+ chipsRowHeightPx: chipsRowHeight,
610
+ toolbarRowHeightPx: toolbarRowHeight
611
+ });
612
+ }, [chipsRowHeight, toolbarRowHeight]);
613
+ var toolbarIconColor = '#808080';
594
614
  var plusMenuIconColor = MAIA_CHAT_INPUT_UI.menuIcon;
595
- var plusMenuSelectedColor = MAIA_CHAT_INPUT_UI.textBrandBold;
615
+ var isCustomAgent = (agent === null || agent === void 0 ? void 0 : agent.type) === 'custom';
616
+ var hasCorAccess = Boolean(isCustomAgent && (agent === null || agent === void 0 || (_agent$connectors = agent.connectors) === null || _agent$connectors === void 0 ? void 0 : _agent$connectors.some(function (connector) {
617
+ return connector.group === 'COR' && connector.slugs.some(function (slug) {
618
+ return typeof slug === 'string' && slug.trim().length > 0;
619
+ });
620
+ })));
621
+ var agentModelName = isCustomAgent ? (agent === null || agent === void 0 || (_agent$model_display_ = agent.model_display_name) === null || _agent$model_display_ === void 0 ? void 0 : _agent$model_display_.trim()) || null : null;
622
+ var showCustomMetaIndicators = hasCorAccess || Boolean(agentModelName);
623
+ var showMentionButton = (agent === null || agent === void 0 ? void 0 : agent.type) === 'orchestrator' || hasCorAccess;
596
624
  var activeToolChipLeadingIcon;
597
625
  if (activeToolChipHovered) {
598
626
  activeToolChipLeadingIcon = /*#__PURE__*/_jsx(Cross, {
@@ -601,13 +629,13 @@ export var MAIAInput = function MAIAInput(_ref) {
601
629
  height: 18
602
630
  });
603
631
  } else if (isWebSearchActive) {
604
- activeToolChipLeadingIcon = /*#__PURE__*/_jsx(Globe, {
632
+ activeToolChipLeadingIcon = /*#__PURE__*/_jsx(MaiaInputWebSearchIcon, {
605
633
  color: plusMenuIconColor,
606
634
  width: 18,
607
635
  height: 18
608
636
  });
609
637
  } else {
610
- activeToolChipLeadingIcon = /*#__PURE__*/_jsx(TelescopeIcon, {
638
+ activeToolChipLeadingIcon = /*#__PURE__*/_jsx(MaiaInputDeepSearchIcon, {
611
639
  color: plusMenuIconColor,
612
640
  width: 18,
613
641
  height: 18
@@ -619,11 +647,8 @@ export var MAIAInput = function MAIAInput(_ref) {
619
647
  disabled: false,
620
648
  alignButtons: alignButtons,
621
649
  hasAttachments: !!attachments.length,
622
- compactSingleRowToolbar: compactSingleRowToolbar,
623
650
  "data-appcues": "maia_chat_input",
624
651
  "data-maia-streaming": isStreaming ? 'true' : 'false',
625
- onFocus: handleWrapperFocus,
626
- onBlur: handleWrapperBlur,
627
652
  style: {
628
653
  position: 'relative'
629
654
  },
@@ -632,202 +657,258 @@ export var MAIAInput = function MAIAInput(_ref) {
632
657
  query: slashQuery,
633
658
  onSelect: handleSelectSlashCommand,
634
659
  onClose: handleCloseSlashDropdown
635
- }), !!attachments.length && /*#__PURE__*/_jsx("div", {
636
- style: {
637
- display: 'flex',
638
- gap: '12px',
639
- alignItems: 'center'
640
- },
641
- children: attachments.map(function (attachment, index) {
642
- var _fileNameParts$pop2, _attachment$type;
643
- var fileNameParts = attachment.name.split('.');
644
- var fileExtension = fileNameParts.length > 1 ? ".".concat((_fileNameParts$pop2 = fileNameParts.pop()) === null || _fileNameParts$pop2 === void 0 ? void 0 : _fileNameParts$pop2.toLowerCase()) : '';
645
- var isImageByExtension = ['.png', '.jpg', '.jpeg'].includes(fileExtension);
646
- var isImageByMime = (_attachment$type = attachment.type) === null || _attachment$type === void 0 ? void 0 : _attachment$type.startsWith('image/');
647
- var isImage = isImageByMime && isImageByExtension;
660
+ }), showChipsRow && /*#__PURE__*/_jsxs(SCInputChipsRow, {
661
+ ref: chipsRowRef,
662
+ children: [contextChip !== null && contextChip !== void 0 && (_contextChip$items3 = contextChip.items) !== null && _contextChip$items3 !== void 0 && _contextChip$items3.length ? /*#__PURE__*/_jsx(Chip, {
663
+ items: contextChip.items,
664
+ type: contextChip.type,
665
+ leadingIcon: contextChip.leadingIcon,
666
+ tooltipZIndex: tooltipZIndex
667
+ }) : null, attachments.map(function (attachment, index) {
668
+ var _attachment$type;
669
+ var isImage = ((_attachment$type = attachment.type) === null || _attachment$type === void 0 ? void 0 : _attachment$type.startsWith('image/')) || /\.(png|jpe?g|gif|webp|bmp|svg)$/i.test(attachment.name || '');
670
+ var chipIcon = isImage ? /*#__PURE__*/_jsx(MaiaInputAttachmentImageIcon, {
671
+ color: "#808080",
672
+ width: 12,
673
+ height: 12
674
+ }) : /*#__PURE__*/_jsx(MaiaInputAttachIcon, {
675
+ color: "#808080",
676
+ width: 13,
677
+ height: 13
678
+ });
648
679
  return /*#__PURE__*/_jsx(Tooltip, {
649
680
  title: attachment.name,
650
681
  zIndex: tooltipZIndex,
651
682
  children: /*#__PURE__*/_jsxs(SCMIAttachment, {
652
- isImage: isImage,
653
- children: [attachment.icon, /*#__PURE__*/_jsx(SCMIAttachmentDeleteIcon, {
683
+ children: [/*#__PURE__*/_jsx(SCMIAttachmentIcon, {
684
+ children: chipIcon
685
+ }), /*#__PURE__*/_jsx(SCMIAttachmentName, {
686
+ children: attachment.name
687
+ }), /*#__PURE__*/_jsx(SCMIAttachmentDeleteOverlay, {
688
+ "aria-hidden": true
689
+ }), /*#__PURE__*/_jsx(SCMIAttachmentDeleteIcon, {
690
+ type: "button",
691
+ "aria-label": t('chat.removeAttachmentAria', {
692
+ defaultValue: 'Quitar archivo'
693
+ }),
654
694
  onClick: function onClick() {
655
695
  return handleDeleteAttachment(attachment.id);
656
696
  },
657
- children: /*#__PURE__*/_jsx(Trash, {
658
- color: "rgba(191, 191, 191, 1)",
659
- width: 18,
660
- height: 18
697
+ children: /*#__PURE__*/_jsx(Cross, {
698
+ color: "#666666",
699
+ width: 14,
700
+ height: 14
661
701
  })
662
702
  })]
663
703
  })
664
- }, "".concat(index, "-").concat(attachment.name));
665
- })
704
+ }, "".concat(attachment.id, "-").concat(index));
705
+ })]
666
706
  }), /*#__PURE__*/_jsxs(StyledMAIAMainToolbarGrid, {
667
- $compactRow: compactSingleRowToolbar,
668
- children: [/*#__PURE__*/_jsx(StyledMAIAPlusToolbarCell, {
669
- $compactRow: compactSingleRowToolbar,
670
- children: /*#__PURE__*/_jsxs(PlusMenuToolsRow, {
671
- children: [/*#__PURE__*/_jsx(PlusToggleButton, {
672
- type: "button",
673
- $menuOpen: plusMenuOpen,
674
- onClick: handlePlusButtonClick,
675
- "aria-label": t('chat.openPlusMenuAria'),
676
- "aria-haspopup": "true",
677
- "aria-expanded": plusMenuOpen,
678
- children: /*#__PURE__*/_jsx(Plus, {
679
- color: plusIconColor,
680
- width: 20,
681
- height: 20
682
- })
683
- }), /*#__PURE__*/_jsx(Popover, {
684
- open: plusMenuOpen,
685
- anchorEl: plusMenuAnchor,
686
- onClose: closePlusMenu,
687
- anchorOrigin: {
688
- vertical: 'top',
689
- horizontal: 'left'
690
- },
691
- transformOrigin: {
692
- vertical: 'bottom',
693
- horizontal: 'left'
694
- },
695
- sx: {
696
- zIndex: plusMenuZIndex
697
- },
698
- slotProps: {
699
- paper: {
700
- elevation: 0,
701
- sx: {
702
- overflow: 'visible',
703
- borderRadius: '4px',
704
- boxShadow: 'none',
705
- backgroundColor: 'transparent',
706
- marginTop: '-4px'
707
- }
708
- }
709
- },
710
- children: /*#__PURE__*/_jsxs(PlusMenuPaper, {
711
- children: [/*#__PURE__*/_jsxs(PlusMenuInnerColumn, {
712
- children: [/*#__PURE__*/_jsxs(PlusMenuItemButton, {
713
- type: "button",
714
- onClick: handlePlusMenuAttach,
715
- children: [/*#__PURE__*/_jsx(Attach, {
716
- color: plusMenuIconColor,
717
- width: 20,
718
- height: 20
719
- }), /*#__PURE__*/_jsx(PlusMenuItemLabel, {
720
- $selected: false,
721
- children: t('chat.plusMenuAttach')
722
- })]
723
- }), /*#__PURE__*/_jsx(PlusMenuDivider, {}), /*#__PURE__*/_jsxs(PlusMenuItemButton, {
724
- type: "button",
725
- onClick: handlePlusMenuWebSearch,
726
- children: [/*#__PURE__*/_jsx(Globe, {
727
- color: isWebSearchActive ? plusMenuSelectedColor : plusMenuIconColor,
728
- width: 20,
729
- height: 20
730
- }), /*#__PURE__*/_jsx(PlusMenuItemLabel, {
731
- $selected: !!isWebSearchActive,
732
- children: t('chat.searchWeb')
733
- }), isWebSearchActive ? /*#__PURE__*/_jsx(Check, {
734
- color: plusMenuSelectedColor,
735
- width: 16,
736
- height: 16
737
- }) : null]
738
- })]
739
- }), /*#__PURE__*/_jsxs(PlusMenuItemButton, {
740
- type: "button",
741
- onClick: handlePlusMenuDeepSearch,
742
- children: [/*#__PURE__*/_jsx(TelescopeIcon, {
743
- color: isDeepSearchActive ? plusMenuSelectedColor : plusMenuIconColor,
744
- width: 20,
745
- height: 20
746
- }), /*#__PURE__*/_jsx(PlusMenuItemLabel, {
747
- $selected: !!isDeepSearchActive,
748
- children: t('chat.plusMenuDeepInvestigation')
749
- }), isDeepSearchActive ? /*#__PURE__*/_jsx(Check, {
750
- color: plusMenuSelectedColor,
751
- width: 16,
752
- height: 16
753
- }) : null]
754
- })]
755
- })
756
- }), (isWebSearchActive || isDeepSearchActive) && /*#__PURE__*/_jsxs(ActiveToolChipRoot, {
757
- $hovered: activeToolChipHovered,
758
- $exiting: toolChipExiting,
759
- onMouseEnter: function onMouseEnter() {
760
- return setActiveToolChipHovered(true);
761
- },
762
- onMouseLeave: function onMouseLeave() {
763
- return setActiveToolChipHovered(false);
764
- },
765
- children: [/*#__PURE__*/_jsx(ActiveToolChipIconButton, {
766
- type: "button",
767
- $closeShown: activeToolChipHovered,
768
- "aria-label": t('chat.removeActiveToolAria'),
769
- onClick: function onClick(e) {
770
- e.stopPropagation();
771
- beginToolChipExit();
772
- },
773
- children: activeToolChipLeadingIcon
774
- }), /*#__PURE__*/_jsx(ActiveToolChipLabel, {
775
- children: isWebSearchActive ? t('chat.searchWeb') : t('chat.plusMenuDeepInvestigation')
776
- })]
777
- })]
778
- })
779
- }), /*#__PURE__*/_jsx("div", {
780
- style: compactSingleRowToolbar ? {
781
- gridColumn: 2,
782
- gridRow: 1,
783
- minWidth: 0,
784
- alignSelf: 'center'
785
- } : {
786
- gridColumn: '1 / -1',
787
- gridRow: 1,
788
- minWidth: 0
789
- },
707
+ children: [/*#__PURE__*/_jsx(SCInputEditorCell, {
790
708
  children: /*#__PURE__*/_jsx(ContextMentionEditor, {
791
709
  ref: editorRef,
792
710
  disabled: disabled,
793
711
  placeholder: placeholder,
712
+ maxHeight: editorMaxHeight,
794
713
  onInput: handleEditorInput,
795
- onKeyDown: handleKeyDown,
796
- onFocus: handleWrapperFocus,
797
- onBlur: handleWrapperBlur
714
+ onKeyDown: handleKeyDown
798
715
  })
799
- }), /*#__PURE__*/_jsx(StyledMAIASendToolbarCell, {
800
- $compactRow: compactSingleRowToolbar,
801
- children: isWriting ? /*#__PURE__*/_jsx(Tooltip, {
802
- title: t('chat.stop'),
803
- zIndex: tooltipZIndex,
804
- children: /*#__PURE__*/_jsx(StyledMAIAStopButton, {
805
- disabled: false,
806
- onClick: handleStopGeneration,
807
- className: className,
808
- children: /*#__PURE__*/_jsx(StyledMAIAStopIcon, {})
809
- })
810
- }) : /*#__PURE__*/_jsx(Tooltip, {
811
- title: t('chat.send'),
812
- zIndex: tooltipZIndex,
813
- children: /*#__PURE__*/_jsx("span", {
814
- style: {
815
- display: 'inline-flex',
816
- alignItems: 'center'
817
- },
818
- children: /*#__PURE__*/_jsx(StyledMAIASendButton, {
819
- onClick: handleSendMessage,
820
- className: className,
821
- disabled: sendDisabled || disabled,
822
- hasValues: hasTypingPresence || attachments.length > 0,
823
- children: /*#__PURE__*/_jsx(PaperPlane, {
824
- color: "#BFBFBF",
716
+ }), /*#__PURE__*/_jsxs(SCInputToolbarRow, {
717
+ ref: toolbarRowRef,
718
+ children: [/*#__PURE__*/_jsx(StyledMAIAPlusToolbarCell, {
719
+ children: /*#__PURE__*/_jsxs(PlusMenuToolsRow, {
720
+ children: [/*#__PURE__*/_jsx(PlusToggleButton, {
721
+ type: "button",
722
+ $menuOpen: plusMenuOpen,
723
+ onMouseDown: handlePlusButtonMouseDown,
724
+ onClick: handlePlusButtonClick,
725
+ "aria-label": t('chat.openPlusMenuAria'),
726
+ "aria-haspopup": "true",
727
+ "aria-expanded": plusMenuOpen,
728
+ children: /*#__PURE__*/_jsx(MaiaInputAddIcon, {
729
+ color: toolbarIconColor,
825
730
  width: 18,
826
731
  height: 18
827
732
  })
828
- })
733
+ }), showMentionButton && /*#__PURE__*/_jsx(PlusToggleButton, {
734
+ type: "button",
735
+ $menuOpen: false,
736
+ onClick: handleMentionButtonClick,
737
+ disabled: disabled,
738
+ "aria-label": t('chat.openMentionAria'),
739
+ children: /*#__PURE__*/_jsx(MaiaInputMentionIcon, {
740
+ color: toolbarIconColor,
741
+ width: 18,
742
+ height: 18
743
+ })
744
+ }), /*#__PURE__*/_jsx(Popover, {
745
+ open: plusMenuOpen,
746
+ anchorEl: plusMenuAnchor,
747
+ onClose: closePlusMenu,
748
+ disableAutoFocus: true,
749
+ disableEnforceFocus: true,
750
+ disableRestoreFocus: true,
751
+ anchorOrigin: {
752
+ vertical: 'top',
753
+ horizontal: 'left'
754
+ },
755
+ transformOrigin: {
756
+ vertical: 'bottom',
757
+ horizontal: 'left'
758
+ },
759
+ sx: {
760
+ zIndex: plusMenuZIndex
761
+ },
762
+ slotProps: {
763
+ paper: {
764
+ elevation: 0,
765
+ sx: {
766
+ overflow: 'visible',
767
+ borderRadius: '4px',
768
+ boxShadow: 'none',
769
+ backgroundColor: 'transparent',
770
+ marginTop: '-4px'
771
+ }
772
+ }
773
+ },
774
+ children: /*#__PURE__*/_jsx(PlusMenuPaper, {
775
+ children: /*#__PURE__*/_jsxs(PlusMenuInnerColumn, {
776
+ children: [/*#__PURE__*/_jsxs(PlusMenuItemButton, {
777
+ type: "button",
778
+ onClick: handlePlusMenuAttach,
779
+ children: [/*#__PURE__*/_jsx(MaiaInputAttachIcon, {
780
+ color: plusMenuIconColor,
781
+ width: 21,
782
+ height: 20
783
+ }), /*#__PURE__*/_jsx(PlusMenuItemLabel, {
784
+ children: t('chat.plusMenuAttach')
785
+ })]
786
+ }), /*#__PURE__*/_jsx(PlusMenuDivider, {}), /*#__PURE__*/_jsxs(PlusMenuItemButton, {
787
+ type: "button",
788
+ onClick: handlePlusMenuWebSearch,
789
+ children: [/*#__PURE__*/_jsx(MaiaInputWebSearchIcon, {
790
+ color: plusMenuIconColor,
791
+ width: 20,
792
+ height: 20
793
+ }), /*#__PURE__*/_jsx(PlusMenuItemLabel, {
794
+ children: t('chat.searchWeb')
795
+ }), isWebSearchActive ? /*#__PURE__*/_jsx(Check, {
796
+ color: plusMenuIconColor,
797
+ width: 16,
798
+ height: 16
799
+ }) : null]
800
+ }), /*#__PURE__*/_jsxs(PlusMenuItemButton, {
801
+ type: "button",
802
+ onClick: handlePlusMenuDeepSearch,
803
+ children: [/*#__PURE__*/_jsx(MaiaInputDeepSearchIcon, {
804
+ color: plusMenuIconColor,
805
+ width: 20,
806
+ height: 20
807
+ }), /*#__PURE__*/_jsx(PlusMenuItemLabel, {
808
+ children: t('chat.plusMenuDeepInvestigation')
809
+ }), isDeepSearchActive ? /*#__PURE__*/_jsx(Check, {
810
+ color: plusMenuIconColor,
811
+ width: 16,
812
+ height: 16
813
+ }) : null]
814
+ }), /*#__PURE__*/_jsx(PlusMenuDivider, {}), /*#__PURE__*/_jsxs(PlusMenuItemButton, {
815
+ type: "button",
816
+ onClick: handlePlusMenuQuickActions,
817
+ children: [/*#__PURE__*/_jsx(MaiaInputSlashIcon, {
818
+ color: plusMenuIconColor,
819
+ width: 20,
820
+ height: 20
821
+ }), /*#__PURE__*/_jsx(PlusMenuItemLabel, {
822
+ children: t('chat.plusMenuQuickActions')
823
+ })]
824
+ })]
825
+ })
826
+ })
827
+ }), (isWebSearchActive || isDeepSearchActive) && /*#__PURE__*/_jsxs(ActiveToolChipRoot, {
828
+ $hovered: activeToolChipHovered,
829
+ $exiting: toolChipExiting,
830
+ onMouseEnter: function onMouseEnter() {
831
+ return setActiveToolChipHovered(true);
832
+ },
833
+ onMouseLeave: function onMouseLeave() {
834
+ return setActiveToolChipHovered(false);
835
+ },
836
+ children: [/*#__PURE__*/_jsx(ActiveToolChipIconButton, {
837
+ type: "button",
838
+ $closeShown: activeToolChipHovered,
839
+ "aria-label": t('chat.removeActiveToolAria'),
840
+ onClick: function onClick(e) {
841
+ e.stopPropagation();
842
+ beginToolChipExit();
843
+ },
844
+ children: activeToolChipLeadingIcon
845
+ }), /*#__PURE__*/_jsx(ActiveToolChipLabel, {
846
+ children: isWebSearchActive ? t('chat.searchWeb') : t('chat.plusMenuDeepInvestigation')
847
+ })]
848
+ })]
829
849
  })
830
- })
850
+ }), /*#__PURE__*/_jsxs(StyledMAIASendToolbarCell, {
851
+ children: [showCustomMetaIndicators && /*#__PURE__*/_jsxs(SCInputMetaIndicators, {
852
+ children: [hasCorAccess && /*#__PURE__*/_jsx(Tooltip, _objectSpread(_objectSpread({
853
+ title: t('chat.footer.corAccessTooltip')
854
+ }, tooltipZIndex != null ? {
855
+ zIndex: tooltipZIndex
856
+ } : {}), {}, {
857
+ children: /*#__PURE__*/_jsx(SCInputMetaIconButton, {
858
+ "aria-label": t('chat.footer.corAccessLabel'),
859
+ children: /*#__PURE__*/_jsx(CorAccessIcon, {
860
+ width: 15,
861
+ height: 14,
862
+ color: toolbarIconColor
863
+ })
864
+ })
865
+ })), agentModelName && /*#__PURE__*/_jsx(Tooltip, _objectSpread(_objectSpread({
866
+ title: t('chipLlm.tooltip', {
867
+ model: agentModelName
868
+ })
869
+ }, tooltipZIndex != null ? {
870
+ zIndex: tooltipZIndex
871
+ } : {}), {}, {
872
+ children: /*#__PURE__*/_jsx(SCInputMetaIconButton, {
873
+ "aria-label": agentModelName,
874
+ children: /*#__PURE__*/_jsx(MaiaInputRobotIcon, {
875
+ width: 18,
876
+ height: 18,
877
+ color: toolbarIconColor
878
+ })
879
+ })
880
+ }))]
881
+ }), isWriting ? /*#__PURE__*/_jsx(Tooltip, {
882
+ title: t('chat.stop'),
883
+ zIndex: tooltipZIndex,
884
+ children: /*#__PURE__*/_jsx(StyledMAIAStopButton, {
885
+ disabled: false,
886
+ onClick: handleStopGeneration,
887
+ className: className,
888
+ children: /*#__PURE__*/_jsx(StyledMAIAStopIcon, {})
889
+ })
890
+ }) : /*#__PURE__*/_jsx(Tooltip, {
891
+ title: t('chat.send'),
892
+ zIndex: tooltipZIndex,
893
+ children: /*#__PURE__*/_jsx("span", {
894
+ style: {
895
+ display: 'inline-flex',
896
+ alignItems: 'center'
897
+ },
898
+ children: /*#__PURE__*/_jsx(StyledMAIASendButton, {
899
+ onClick: handleSendMessage,
900
+ className: className,
901
+ disabled: sendDisabled || disabled,
902
+ hasValues: hasTypingPresence || attachments.length > 0,
903
+ children: /*#__PURE__*/_jsx(MaiaInputSendIcon, {
904
+ color: "#BFBFBF",
905
+ width: 16,
906
+ height: 16
907
+ })
908
+ })
909
+ })
910
+ })]
911
+ })]
831
912
  })]
832
913
  }), /*#__PURE__*/_jsx("input", {
833
914
  ref: fileInputRef,
@@ -854,4 +935,4 @@ export var MAIAInput = function MAIAInput(_ref) {
854
935
  }), popoverNode && /*#__PURE__*/createPortal(popoverNode, document.body)]
855
936
  });
856
937
  };
857
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1c2VDYWxsYmFjayIsInVzZUVmZmVjdCIsInVzZU1lbW8iLCJ1c2VSZWYiLCJ1c2VTdGF0ZSIsImNyZWF0ZVBvcnRhbCIsIlBvcG92ZXIiLCJQYXBlclBsYW5lIiwiQXR0YWNoIiwiR2xvYmUiLCJUcmFzaCIsIlBsdXMiLCJDaGVjayIsIkNyb3NzIiwiVG9vbHRpcCIsImNvbG9ycyIsIkFjdGl2ZVRvb2xDaGlwSWNvbkJ1dHRvbiIsIkFjdGl2ZVRvb2xDaGlwTGFiZWwiLCJBY3RpdmVUb29sQ2hpcFJvb3QiLCJQbHVzTWVudURpdmlkZXIiLCJQbHVzTWVudUlubmVyQ29sdW1uIiwiUGx1c01lbnVJdGVtQnV0dG9uIiwiUGx1c01lbnVJdGVtTGFiZWwiLCJQbHVzTWVudVBhcGVyIiwiUGx1c01lbnVUb29sc1JvdyIsIlBsdXNUb2dnbGVCdXR0b24iLCJTQ01JQXR0YWNobWVudCIsIlNDTUlBdHRhY2htZW50RGVsZXRlSWNvbiIsIlN0eWxlZE1BSUFJbnB1dFdyYXBwZXIiLCJTdHlsZWRNQUlBU2VuZEJ1dHRvbiIsIlN0eWxlZE1BSUFNYWluVG9vbGJhckdyaWQiLCJTdHlsZWRNQUlBUGx1c1Rvb2xiYXJDZWxsIiwiU3R5bGVkTUFJQVNlbmRUb29sYmFyQ2VsbCIsIlN0eWxlZE1BSUFTdG9wQnV0dG9uIiwiU3R5bGVkTUFJQVN0b3BJY29uIiwidXNlR2xvYmFsQ29udGV4dCIsIk1vZGFsRmlsZUV4Y2VlZHMiLCJTbGFzaENvbW1hbmREcm9wZG93biIsInVzZVNsYXNoQ29tbWFuZHMiLCJyZXNvbHZlUXVpY2tBY3Rpb25UeXBlIiwidXNlVCIsIlRlbGVzY29wZUljb24iLCJFVkVOVFMiLCJ1c2VFdmVudCIsImdldENoYXRUb29sc01lbnVBZ2VudFR5cGUiLCJNQUlBX0NIQVRfSU5QVVRfVUkiLCJhbGxvd2VkRmlsZVR5cGVzIiwiZmlsZVR5cGVzIiwiTUFYX0ZJTEVfU0laRV9NQl9NQUlBX1ZJU0lPTiIsIk1BWF9GSUxFX1NJWkVfTUJfT0xEIiwiTUFYX0ZJTEVfU0laRV9NQl9BVURJTyIsIk1BWF9DSEFUX0lOUFVUX0FUVEFDSE1FTlRTIiwiQVBQQ1VFU19FVkVOVFMiLCJ0cmFja0FwcGN1ZXNFdmVudCIsIkNvbnRleHRNZW50aW9uRWRpdG9yIiwidXNlTWFpYVRhc2tQYW5lbFpJbmRleCIsInVzZU1lbnRpb25Qb3BvdmVyIiwianN4IiwiX2pzeCIsImpzeHMiLCJfanN4cyIsIkZyYWdtZW50IiwiX0ZyYWdtZW50IiwiVE9PTF9DSElQX0VYSVRfTVMiLCJNQUlBSW5wdXQiLCJfcmVmIiwiX2FnZW50JGVudGl0eSIsIm9uU2VuZE1lc3NhZ2UiLCJjbGFzc05hbWUiLCJkaXNhYmxlZCIsImlzU3RyZWFtaW5nIiwiaXNXcml0aW5nIiwib25TdG9wR2VuZXJhdGlvbiIsInBsYWNlaG9sZGVyIiwib25DaGFuZ2UiLCJfcmVmJGFsaWduQnV0dG9ucyIsImFsaWduQnV0dG9ucyIsIm9uRmlsZUF0dGFjaCIsIm9uRGVsZXRlQXR0YWNobWVudCIsIl9yZWYkYXR0YWNobWVudHMiLCJhdHRhY2htZW50cyIsImNoYXRJZCIsIm5ld0NoYXRLZXkiLCJ0b29sdGlwWkluZGV4IiwiZXh0ZXJuYWxQb3BvdmVyQW5jaG9yUmVmIiwicG9wb3ZlckFuY2hvclJlZiIsImxheW91dE1vZGUiLCJfdXNlVCIsInQiLCJlZGl0b3JSZWYiLCJmaWxlSW5wdXRSZWYiLCJpbnRlcm5hbFdyYXBwZXJSZWYiLCJ3cmFwcGVyUmVmIiwiX3VzZVN0YXRlIiwiX3VzZVN0YXRlMiIsIl9zbGljZWRUb0FycmF5IiwiaGFzV3JhcHBlZFRvU2Vjb25kTGluZSIsInNldEhhc1dyYXBwZWRUb1NlY29uZExpbmUiLCJfdXNlU3RhdGUzIiwiX3VzZVN0YXRlNCIsImhhc1R5cGluZ1ByZXNlbmNlIiwic2V0SGFzVHlwaW5nUHJlc2VuY2UiLCJfdXNlU3RhdGU1IiwiX3VzZVN0YXRlNiIsImlzRm9jdXNlZCIsInNldElzRm9jdXNlZCIsIl91c2VTdGF0ZTciLCJpc09wZW4iLCJleGNsdWRlZEZpbGVzIiwiZXhjZWVkZWRGaWxlcyIsImZpbGVTaXplcyIsIl91c2VTdGF0ZTgiLCJtb2RhbFByb3BzIiwic2V0TW9kYWxQcm9wcyIsImV2ZW50QW1wbGl0dWRlIiwiX3VzZUdsb2JhbENvbnRleHQiLCJ0b2dnbGVXZWJTZWFyY2giLCJpc1dlYlNlYXJjaEFjdGl2ZSIsInRvZ2dsZURlZXBTZWFyY2giLCJpc0RlZXBTZWFyY2hBY3RpdmUiLCJhZ2VudCIsImluaXRpYWxEcmFmdCIsImRlZXBMaW5rU2VuZFBlbmRpbmdSZWYiLCJwbHVzTWVudVpJbmRleCIsImluaXRpYWxEcmFmdEFwcGxpZWRSZWYiLCJfdXNlTWVudGlvblBvcG92ZXIiLCJwb3BvdmVyT3BlbiIsInJlc2V0TWVudGlvbk9wZW5UcmFja2luZyIsImhhbmRsZVRyaWdnZXIiLCJoYW5kbGVQb3BvdmVyS2V5RG93biIsImhhbmRsZUtleURvd24iLCJwb3BvdmVyTm9kZSIsIl91c2VTdGF0ZTkiLCJfdXNlU3RhdGUwIiwicGx1c01lbnVBbmNob3IiLCJzZXRQbHVzTWVudUFuY2hvciIsIl91c2VTdGF0ZTEiLCJfdXNlU3RhdGUxMCIsImFjdGl2ZVRvb2xDaGlwSG92ZXJlZCIsInNldEFjdGl2ZVRvb2xDaGlwSG92ZXJlZCIsIl91c2VTdGF0ZTExIiwiX3VzZVN0YXRlMTIiLCJ0b29sQ2hpcEV4aXRpbmciLCJzZXRUb29sQ2hpcEV4aXRpbmciLCJ0b29sQ2hpcEV4aXRUaW1lclJlZiIsInNlYXJjaE1vZGVBY3RpdmVSZWYiLCJ3ZWIiLCJkZWVwIiwicGx1c01lbnVPcGVuIiwiQm9vbGVhbiIsInByZXZpb3VzQWdlbnRJZFJlZiIsInVuZGVmaW5lZCIsInByZXZpb3VzQ2hhdElkUmVmIiwicHJldmlvdXNOZXdDaGF0S2V5UmVmIiwicHJldmlvdXNMYXlvdXRNb2RlUmVmIiwiYW5hbHl0aWNzQWdlbnRUeXBlIiwiYW5hbHl0aWNzQ2xvbmVFbnRpdHlQYXlsb2FkIiwidHlwZSIsImVudGl0eSIsIl91c2VTbGFzaENvbW1hbmRzIiwiaWQiLCJzbGFzaENvbW1hbmRzIiwiY29tbWFuZHMiLCJfdXNlU3RhdGUxMyIsIl91c2VTdGF0ZTE0Iiwic2hvd1NsYXNoRHJvcGRvd24iLCJzZXRTaG93U2xhc2hEcm9wZG93biIsIl91c2VTdGF0ZTE1IiwiX3VzZVN0YXRlMTYiLCJzbGFzaFF1ZXJ5Iiwic2V0U2xhc2hRdWVyeSIsInNsYXNoTWVudVdhc09wZW5SZWYiLCJzY2hlZHVsZUlucHV0Rm9jdXNBZnRlclRvb2xBY3Rpb24iLCJyZXF1ZXN0QW5pbWF0aW9uRnJhbWUiLCJ3aW5kb3ciLCJzZXRUaW1lb3V0IiwiX2VkaXRvclJlZiRjdXJyZW50IiwiY3VycmVudCIsImZvY3VzIiwiY2xvc2VQbHVzTWVudSIsImNhbmNlbFBlbmRpbmdUb29sQ2hpcEV4aXQiLCJjbGVhclRpbWVvdXQiLCJoYW5kbGVQbHVzQnV0dG9uQ2xpY2siLCJlIiwic3RvcFByb3BhZ2F0aW9uIiwiY3VycmVudFRhcmdldCIsImFpQ2hhdFBsdXNPcGVuIiwiX29iamVjdFNwcmVhZCIsImFnZW50X3R5cGUiLCJoYW5kbGVQbHVzTWVudUF0dGFjaCIsIl9maWxlSW5wdXRSZWYkY3VycmVudCIsImFpQ2hhdFRvb2xzIiwib3B0aW9uIiwibGVuZ3RoIiwiY2xpY2siLCJiZWdpblRvb2xDaGlwRXhpdCIsIndhc1dlYiIsIndhc0RlZXAiLCJfc2VhcmNoTW9kZUFjdGl2ZVJlZiQiLCJoYW5kbGVQbHVzTWVudVdlYlNlYXJjaCIsImhhbmRsZVBsdXNNZW51RGVlcFNlYXJjaCIsIl9lZGl0b3JSZWYkY3VycmVudDIiLCJfZWRpdG9yUmVmJGN1cnJlbnQzIiwiZHJhZnQiLCJ0cmltIiwic2V0UGxhaW5UZXh0IiwiX2VkaXRvclJlZiRjdXJyZW50NCIsImNvbXBhY3RTaW5nbGVSb3dUb29sYmFyIiwic2VuZERpc2FibGVkIiwiYWdlbnRDaGFuZ2VkIiwicHJldmlvdXNDaGF0SWQiLCJjdXJyZW50Q2hhdElkIiwiY2hhdENoYW5nZWQiLCJjaGFuZ2VkRnJvbU5ld0NoYXRUb09sZENoYXQiLCJuZXdDaGF0U3RhcnRlZCIsImlzSW5pdGlhbE1vdW50IiwiZGVsYXkiLCJfZWRpdG9yUmVmJGN1cnJlbnQ1IiwicHJldmlvdXNMYXlvdXRNb2RlIiwidGltZW91dElkIiwiX2VkaXRvclJlZiRjdXJyZW50NiIsImlzU3BlY2lhbGlzdEFnZW50Iiwib2JzZXJ2ZXIiLCJJbnRlcnNlY3Rpb25PYnNlcnZlciIsIl9yZWYyIiwiX3JlZjMiLCJlbnRyeSIsImlzSW50ZXJzZWN0aW5nIiwibWFpYUNvbnRleHRNZW50aW9uSW5pdCIsImRpc2Nvbm5lY3QiLCJ0aHJlc2hvbGQiLCJvYnNlcnZlIiwiaGFuZGxlU2Vzc2lvbkNoYW5nZSIsIl9lZGl0b3JSZWYkY3VycmVudDciLCJjbGVhciIsImRvY3VtZW50IiwiYWRkRXZlbnRMaXN0ZW5lciIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJoYW5kbGVSZWZvY3VzIiwiX2VkaXRvclJlZiRjdXJyZW50OCIsImhhbmRsZVNlbmRNZXNzYWdlIiwiX2VkaXRvclJlZiRjdXJyZW50OSIsIl9zdGF0ZSR0ZXh0IiwiX3N0YXRlJG1lbnRpb25zIiwiX2VkaXRvclJlZiRjdXJyZW50MCIsInN0YXRlIiwic2VyaWFsaXplIiwidGV4dCIsIm1lbnRpb25zIiwiaGFuZGxlU2VsZWN0U2xhc2hDb21tYW5kIiwiY29tbWFuZCIsIl9lZGl0b3JSZWYkY3VycmVudDEiLCJfc3RhdGUkdGV4dDIiLCJfZWRpdG9yUmVmJGN1cnJlbnQxMSIsImFpQ2hhdFF1aWNrQWN0aW9uU2VsZWN0IiwidHlwZV9xdWlja19hY3Rpb24iLCJvcmlnaW5fcXVpY2tfYWN0aW9uIiwidHJpZ2dlclBhcnQiLCJjb25jYXQiLCJiZWZvcmVUcmlnZ2VyIiwiZW5kc1dpdGgiLCJzbGljZSIsImlzRW1wdHlCZWZvcmVUcmlnZ2VyIiwiX2VkaXRvclJlZiRjdXJyZW50MTAiLCJ0aXRsZSIsImluc2VydFNsYXNoQ29tbWFuZCIsImxhYmVsIiwiaGFuZGxlQ2xvc2VTbGFzaERyb3Bkb3duIiwiaGFuZGxlRWRpdG9ySW5wdXQiLCJfcmVmNCIsIl9lZGl0b3JSZWYkY3VycmVudDEyIiwidHJpZ2dlciIsInNsYXNoVHJpZ2dlciIsInZpc3VhbE11bHRpbGluZSIsImhhc1Zpc3VhbE11bHRpbGluZSIsImV4cGxpY2l0TXVsdGlsaW5lIiwiaW5jbHVkZXMiLCJpc0xpa2VseUZpcnN0Q2hhck1lYXN1cmVtZW50R2xpdGNoIiwic3RhYmxlVmlzdWFsTXVsdGlsaW5lIiwibmV4dElzTXVsdGlsaW5lIiwibmV4dEhhc1R5cGluZ1ByZXNlbmNlIiwibmV4dFR5cGluZ1ByZXNlbmNlIiwicHJldiIsIm5leHQiLCJhY3RpdmUiLCJhaUNoYXRRdWlja0FjdGlvbk9wZW4iLCJxdWVyeSIsImtleSIsInNoaWZ0S2V5IiwicHJldmVudERlZmF1bHQiLCJoYW5kbGVGaWxlU2VsZWN0IiwiZmlsZXMiLCJ0YXJnZXQiLCJmaWxlc0luc2VydGVkIiwiaXNOZXdGb3JtYXQiLCJleHRlbnNpb24iLCJpc09sZEZvcm1hdCIsImlzQXVkaW9Gb3JtYXQiLCJBcnJheSIsImZyb20iLCJmb3JFYWNoIiwiZmlsZSIsIl9maWxlTmFtZVBhcnRzJHBvcCIsImV4Y2x1ZGVkRmlsZSIsImZpbGVOYW1lUGFydHMiLCJuYW1lIiwic3BsaXQiLCJmaWxlRXh0ZW5zaW9uIiwicG9wIiwidG9Mb3dlckNhc2UiLCJzaXplIiwicHVzaCIsInR5cGVGaWxlIiwicGFyc2VkRmlsZSIsIkZpbGUiLCJ2YWx1ZSIsImhhbmRsZURlbGV0ZUF0dGFjaG1lbnQiLCJmaWxlSWQiLCJoYW5kbGVXcmFwcGVyRm9jdXMiLCJoYW5kbGVXcmFwcGVyQmx1ciIsIl93cmFwcGVyUmVmJGN1cnJlbnQiLCJjb250YWlucyIsImFjdGl2ZUVsZW1lbnQiLCJoYW5kbGVTdG9wR2VuZXJhdGlvbiIsImFpQ2hhdFN0b3BSZXNwb25zZSIsInBsdXNJY29uQ29sb3IiLCJzZWNvbmRhcnkiLCJtZWRpdW1HcmF5IiwicGx1c01lbnVJY29uQ29sb3IiLCJtZW51SWNvbiIsInBsdXNNZW51U2VsZWN0ZWRDb2xvciIsInRleHRCcmFuZEJvbGQiLCJhY3RpdmVUb29sQ2hpcExlYWRpbmdJY29uIiwiY29sb3IiLCJjaGlwQ2xvc2VJY29uIiwid2lkdGgiLCJoZWlnaHQiLCJjaGlsZHJlbiIsInJlZiIsImhhc0F0dGFjaG1lbnRzIiwib25Gb2N1cyIsIm9uQmx1ciIsInN0eWxlIiwicG9zaXRpb24iLCJvblNlbGVjdCIsIm9uQ2xvc2UiLCJkaXNwbGF5IiwiZ2FwIiwiYWxpZ25JdGVtcyIsIm1hcCIsImF0dGFjaG1lbnQiLCJpbmRleCIsIl9maWxlTmFtZVBhcnRzJHBvcDIiLCJfYXR0YWNobWVudCR0eXBlIiwiaXNJbWFnZUJ5RXh0ZW5zaW9uIiwiaXNJbWFnZUJ5TWltZSIsInN0YXJ0c1dpdGgiLCJpc0ltYWdlIiwiekluZGV4IiwiaWNvbiIsIm9uQ2xpY2siLCIkY29tcGFjdFJvdyIsIiRtZW51T3BlbiIsIm9wZW4iLCJhbmNob3JFbCIsImFuY2hvck9yaWdpbiIsInZlcnRpY2FsIiwiaG9yaXpvbnRhbCIsInRyYW5zZm9ybU9yaWdpbiIsInN4Iiwic2xvdFByb3BzIiwicGFwZXIiLCJlbGV2YXRpb24iLCJvdmVyZmxvdyIsImJvcmRlclJhZGl1cyIsImJveFNoYWRvdyIsImJhY2tncm91bmRDb2xvciIsIm1hcmdpblRvcCIsIiRzZWxlY3RlZCIsIiRob3ZlcmVkIiwiJGV4aXRpbmciLCJvbk1vdXNlRW50ZXIiLCJvbk1vdXNlTGVhdmUiLCIkY2xvc2VTaG93biIsImdyaWRDb2x1bW4iLCJncmlkUm93IiwibWluV2lkdGgiLCJhbGlnblNlbGYiLCJvbklucHV0Iiwib25LZXlEb3duIiwiaGFzVmFsdWVzIiwibXVsdGlwbGUiLCJhY2NlcHQiLCJib2R5Il0sInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvYXRvbXMvTUFJQUlucHV0L01BSUFJbnB1dC50c3giXSwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgbm8tcmVzdHJpY3RlZC1zeW50YXggKi9cbi8qIGVzbGludC1kaXNhYmxlIG5vLWNvbnRpbnVlICovXG4vKiBlc2xpbnQtZGlzYWJsZSBuby12b2lkICovXG4vKiBlc2xpbnQtZGlzYWJsZSByZWFjdC9uby1hcnJheS1pbmRleC1rZXkgKi9cbi8qIGVzbGludC1kaXNhYmxlIG5vLWxvbmVseS1pZiAqL1xuLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSAqL1xuLyogZXNsaW50LWRpc2FibGUgcHJlZmVyLWRlc3RydWN0dXJpbmcgKi9cbi8qIGVzbGludC1kaXNhYmxlIGpzeC1hMTF5L2NsaWNrLWV2ZW50cy1oYXZlLWtleS1ldmVudHMgKi9cbi8qIGVzbGludC1kaXNhYmxlIGpzeC1hMTF5L25vLXN0YXRpYy1lbGVtZW50LWludGVyYWN0aW9ucyAqL1xuaW1wb3J0IHtcbiAgQ2hhbmdlRXZlbnQsXG4gIEtleWJvYXJkRXZlbnQsXG4gIE1vdXNlRXZlbnQsXG4gIFJlYWN0Tm9kZSxcbiAgTXV0YWJsZVJlZk9iamVjdCxcbiAgdXNlQ2FsbGJhY2ssXG4gIHVzZUVmZmVjdCxcbiAgdXNlTWVtbyxcbiAgdXNlUmVmLFxuICB1c2VTdGF0ZSxcbn0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBjcmVhdGVQb3J0YWwgfSBmcm9tICdyZWFjdC1kb20nXG5pbXBvcnQgeyBQb3BvdmVyIH0gZnJvbSAnQG11aS9tYXRlcmlhbCdcbmltcG9ydCB7IFBhcGVyUGxhbmUgfSBmcm9tICdAcHJvamVjdGNvci9pY29ucy9saWIvY29tcG9uZW50cy9QYXBlclBsYW5lJ1xuaW1wb3J0IHsgQXR0YWNoIH0gZnJvbSAnQHByb2plY3Rjb3IvaWNvbnMvbGliL2NvbXBvbmVudHMvQXR0YWNoJ1xuaW1wb3J0IHsgR2xvYmUgfSBmcm9tICdAcHJvamVjdGNvci9pY29ucy9saWIvY29tcG9uZW50cy9HbG9iZSdcbmltcG9ydCB7IFRyYXNoIH0gZnJvbSAnQHByb2plY3Rjb3IvaWNvbnMvbGliL2NvbXBvbmVudHMvVHJhc2gnXG5pbXBvcnQgeyBQbHVzIH0gZnJvbSAnQHByb2plY3Rjb3IvaWNvbnMvbGliL2NvbXBvbmVudHMvUGx1cydcbmltcG9ydCB7IENoZWNrIH0gZnJvbSAnQHByb2plY3Rjb3IvaWNvbnMvbGliL2NvbXBvbmVudHMvQ2hlY2snXG5pbXBvcnQgeyBDcm9zcyB9IGZyb20gJ0Bwcm9qZWN0Y29yL2ljb25zL2xpYi9jb21wb25lbnRzL0Nyb3NzJ1xuaW1wb3J0IHsgVG9vbHRpcCB9IGZyb20gJ0Bwcm9qZWN0Y29yL3Rvb2x0aXB2Mi9saWIvY29tcG9uZW50cy9Ub29sdGlwJ1xuaW1wb3J0IGNvbG9ycyBmcm9tICdAcHJvamVjdGNvci90aGVtZS9saWIvYmFzZS9jb2xvcnMnXG5cbmltcG9ydCB7XG4gIEFjdGl2ZVRvb2xDaGlwSWNvbkJ1dHRvbixcbiAgQWN0aXZlVG9vbENoaXBMYWJlbCxcbiAgQWN0aXZlVG9vbENoaXBSb290LFxuICBQbHVzTWVudURpdmlkZXIsXG4gIFBsdXNNZW51SW5uZXJDb2x1bW4sXG4gIFBsdXNNZW51SXRlbUJ1dHRvbixcbiAgUGx1c01lbnVJdGVtTGFiZWwsXG4gIFBsdXNNZW51UGFwZXIsXG4gIFBsdXNNZW51VG9vbHNSb3csXG4gIFBsdXNUb2dnbGVCdXR0b24sXG4gIFNDTUlBdHRhY2htZW50LFxuICBTQ01JQXR0YWNobWVudERlbGV0ZUljb24sXG4gIFN0eWxlZE1BSUFJbnB1dFdyYXBwZXIsXG4gIFN0eWxlZE1BSUFTZW5kQnV0dG9uLFxuICBTdHlsZWRNQUlBTWFpblRvb2xiYXJHcmlkLFxuICBTdHlsZWRNQUlBUGx1c1Rvb2xiYXJDZWxsLFxuICBTdHlsZWRNQUlBU2VuZFRvb2xiYXJDZWxsLFxuICBTdHlsZWRNQUlBU3RvcEJ1dHRvbixcbiAgU3R5bGVkTUFJQVN0b3BJY29uLFxufSBmcm9tICcuL3N0eWxlcydcbmltcG9ydCB7IHVzZUdsb2JhbENvbnRleHQgfSBmcm9tICcuLi8uLi8uLi9jb250ZXh0L2dsb2JhbC1jb250ZXh0J1xuaW1wb3J0IHsgTW9kYWxGaWxlRXhjZWVkcyB9IGZyb20gJy4uLy4uL29yZ2FuaXNtcy9Nb2RhbEZpbGVFeGNlZWRzJ1xuaW1wb3J0IHsgU2xhc2hDb21tYW5kRHJvcGRvd24gfSBmcm9tICcuLi9TbGFzaENvbW1hbmREcm9wZG93bidcbmltcG9ydCB7IHVzZVNsYXNoQ29tbWFuZHMgfSBmcm9tICcuLi8uLi8uLi9ob29rcy91c2VTbGFzaENvbW1hbmRzJ1xuaW1wb3J0IHsgcmVzb2x2ZVF1aWNrQWN0aW9uVHlwZSB9IGZyb20gJy4uLy4uLy4uL3V0aWxzL2hvdXJzUGxhbm5lclF1aWNrQWN0aW9uVHlwZSdcbmltcG9ydCB0eXBlIHsgQWN0aW9uIH0gZnJvbSAnLi4vLi4vLi4vdHlwZXMvQWN0aW9uJ1xuaW1wb3J0IHsgdXNlVCB9IGZyb20gJy4uLy4uLy4uL2hvb2tzL3VzZVQnXG5pbXBvcnQgeyBUZWxlc2NvcGVJY29uIH0gZnJvbSAnLi4vaWNvbnMvVGVsZXNjb3BlSWNvbidcbmltcG9ydCB7IEVWRU5UUywgdXNlRXZlbnQgfSBmcm9tICcuLi8uLi8uLi9ob29rcy91c2VFdmVudCdcbmltcG9ydCB7IGdldENoYXRUb29sc01lbnVBZ2VudFR5cGUgfSBmcm9tICcuLi8uLi8uLi91dGlscy9oaXRsQW5hbHl0aWNzJ1xuaW1wb3J0IHsgTUFJQV9DSEFUX0lOUFVUX1VJIH0gZnJvbSAnLi4vLi4vLi4vc3R5bGVzL2NvbmZpZydcbmltcG9ydCB7XG4gIGFsbG93ZWRGaWxlVHlwZXMsXG4gIGZpbGVUeXBlcyxcbiAgTUFYX0ZJTEVfU0laRV9NQl9NQUlBX1ZJU0lPTixcbiAgTUFYX0ZJTEVfU0laRV9NQl9PTEQsXG4gIE1BWF9GSUxFX1NJWkVfTUJfQVVESU8sXG4gIE1BWF9DSEFUX0lOUFVUX0FUVEFDSE1FTlRTLFxufSBmcm9tICcuLi8uLi8uLi9jb25zdGFudHMvZm9ybWF0RXh0ZW5zaW9ucydcbmltcG9ydCB7IEFQUENVRVNfRVZFTlRTLCB0cmFja0FwcGN1ZXNFdmVudCB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2FwcGN1ZXMnXG5pbXBvcnQgeyBDb250ZXh0TWVudGlvbkVkaXRvciwgQ29udGV4dE1lbnRpb25FZGl0b3JIYW5kbGUgfSBmcm9tICcuLi9Db250ZXh0TWVudGlvbkVkaXRvcidcbmltcG9ydCB7IHVzZU1haWFUYXNrUGFuZWxaSW5kZXggfSBmcm9tICcuLi8uLi8uLi9ob29rcy91c2VNYWlhVGFza1BhbmVsWkluZGV4J1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby1jeWNsZVxuaW1wb3J0IHsgdXNlTWVudGlvblBvcG92ZXIgfSBmcm9tICcuLi8uLi8uLi9ob29rcy91c2VNZW50aW9uUG9wb3ZlcidcbmltcG9ydCB7IENvbnRleHRNZW50aW9uIH0gZnJvbSAnLi4vLi4vLi4vdHlwZXMvY29udGV4dE1lbnRpb24nXG5cbmNvbnN0IFRPT0xfQ0hJUF9FWElUX01TID0gMjIwXG5cbnR5cGUgQXR0YWNobWVudEZpbGUgPSB7XG4gIGZpbGU6IEZpbGVcbiAgb3JpZ2luYWxGaWxlPzogRmlsZVxuICBpZDogc3RyaW5nXG4gIG5hbWU6IHN0cmluZ1xuICBzaXplOiBudW1iZXJcbiAgdHlwZTogc3RyaW5nXG4gIGljb24/OiBSZWFjdE5vZGVcbn1cblxudHlwZSBNQUlBSW5wdXRQcm9wcyA9IHtcbiAgY2xhc3NOYW1lPzogc3RyaW5nXG4gIGRpc2FibGVkPzogYm9vbGVhblxuICBvblNlbmRNZXNzYWdlOiAoXG4gICAgbWVzc2FnZTogc3RyaW5nLFxuICAgIGF0dGFjaG1lbnRzPzogQXR0YWNobWVudEZpbGVbXSxcbiAgICBtZW50aW9ucz86IENvbnRleHRNZW50aW9uW10sXG4gICAgZmFxSWQ/OiBzdHJpbmcsXG4gICAgYWdlbnRTdWdnZXN0aW9uSWQ/OiBzdHJpbmcsXG4gICAgZnVhSWQ/OiBzdHJpbmcsXG4gICAgc2NJZD86IHN0cmluZ1xuICApID0+IHZvaWRcbiAgb25TdG9wR2VuZXJhdGlvbj86ICgoKSA9PiB2b2lkKSB8IG51bGxcbiAgaXNTdHJlYW1pbmc/OiBib29sZWFuXG4gIGlzV3JpdGluZz86IGJvb2xlYW5cbiAgcGxhY2Vob2xkZXI/OiBzdHJpbmdcbiAgb25DaGFuZ2U/OiAoKSA9PiB2b2lkXG4gIGFsaWduQnV0dG9ucz86ICdob3Jpem9udGFsJyB8ICd2ZXJ0aWNhbCdcbiAgb25GaWxlQXR0YWNoPzogKGZpbGU6IEZpbGUpID0+IHZvaWRcbiAgb25EZWxldGVBdHRhY2htZW50PzogKGZpbGVJZDogc3RyaW5nKSA9PiB2b2lkXG4gIGF0dGFjaG1lbnRzPzogQXR0YWNobWVudEZpbGVbXVxuICBjaGF0SWQ/OiBzdHJpbmdcbiAgbmV3Q2hhdEtleT86IG51bWJlclxuICB0b29sdGlwWkluZGV4PzogbnVtYmVyXG4gIC8qKiBFeHBvbmUgZWwgd3JhcHBlciBkZWwgaW5wdXQgcGFyYSBhbmNsYXIgcG9wb3ZlcnMgKG1lbmNpb25lcywgcGluIGRlIGNvbnRleHRvKS4gKi9cbiAgcG9wb3ZlckFuY2hvclJlZj86IE11dGFibGVSZWZPYmplY3Q8SFRNTERpdkVsZW1lbnQgfCBudWxsPlxuICBsYXlvdXRNb2RlPzogJ3NpZGViYXInIHwgJ2Z1bGxzY3JlZW4nIHwgJ2Zsb2F0aW5nJ1xufVxuXG5leHBvcnQgY29uc3QgTUFJQUlucHV0ID0gKHtcbiAgb25TZW5kTWVzc2FnZSxcbiAgY2xhc3NOYW1lLFxuICBkaXNhYmxlZCxcbiAgaXNTdHJlYW1pbmcsXG4gIGlzV3JpdGluZyxcbiAgb25TdG9wR2VuZXJhdGlvbixcbiAgcGxhY2Vob2xkZXIsXG4gIG9uQ2hhbmdlLFxuICBhbGlnbkJ1dHRvbnMgPSAndmVydGljYWwnLFxuICBvbkZpbGVBdHRhY2gsXG4gIG9uRGVsZXRlQXR0YWNobWVudCxcbiAgYXR0YWNobWVudHMgPSBbXSxcbiAgY2hhdElkLFxuICBuZXdDaGF0S2V5LFxuICB0b29sdGlwWkluZGV4LFxuICBwb3BvdmVyQW5jaG9yUmVmOiBleHRlcm5hbFBvcG92ZXJBbmNob3JSZWYsXG4gIGxheW91dE1vZGUsXG59OiBNQUlBSW5wdXRQcm9wcykgPT4ge1xuICBjb25zdCB7IHQgfSA9IHVzZVQoKVxuICBjb25zdCBlZGl0b3JSZWYgPSB1c2VSZWY8Q29udGV4dE1lbnRpb25FZGl0b3JIYW5kbGU+KG51bGwpXG4gIGNvbnN0IGZpbGVJbnB1dFJlZiA9IHVzZVJlZjxIVE1MSW5wdXRFbGVtZW50PihudWxsKVxuICBjb25zdCBpbnRlcm5hbFdyYXBwZXJSZWYgPSB1c2VSZWY8SFRNTERpdkVsZW1lbnQ+KG51bGwpXG4gIGNvbnN0IHdyYXBwZXJSZWYgPSBleHRlcm5hbFBvcG92ZXJBbmNob3JSZWYgPz8gaW50ZXJuYWxXcmFwcGVyUmVmXG4gIGNvbnN0IFtoYXNXcmFwcGVkVG9TZWNvbmRMaW5lLCBzZXRIYXNXcmFwcGVkVG9TZWNvbmRMaW5lXSA9IHVzZVN0YXRlKGZhbHNlKVxuICBjb25zdCBbaGFzVHlwaW5nUHJlc2VuY2UsIHNldEhhc1R5cGluZ1ByZXNlbmNlXSA9IHVzZVN0YXRlKGZhbHNlKVxuICBjb25zdCBbaXNGb2N1c2VkLCBzZXRJc0ZvY3VzZWRdID0gdXNlU3RhdGUoZmFsc2UpXG4gIGNvbnN0IFttb2RhbFByb3BzLCBzZXRNb2RhbFByb3BzXSA9IHVzZVN0YXRlKHtcbiAgICBpc09wZW46IGZhbHNlLFxuICAgIGV4Y2x1ZGVkRmlsZXM6IFtdIGFzIHN0cmluZ1tdLFxuICAgIGV4Y2VlZGVkRmlsZXM6IFtdIGFzIHN0cmluZ1tdLFxuICAgIGZpbGVTaXplczoge30gYXMgUmVjb3JkPHN0cmluZywgbnVtYmVyPixcbiAgfSlcbiAgY29uc3QgZXZlbnRBbXBsaXR1ZGUgPSB1c2VFdmVudCgpXG4gIGNvbnN0IHtcbiAgICB0b2dnbGVXZWJTZWFyY2gsXG4gICAgaXNXZWJTZWFyY2hBY3RpdmUsXG4gICAgdG9nZ2xlRGVlcFNlYXJjaCxcbiAgICBpc0RlZXBTZWFyY2hBY3RpdmUsXG4gICAgYWdlbnQsXG4gICAgaW5pdGlhbERyYWZ0LFxuICAgIGRlZXBMaW5rU2VuZFBlbmRpbmdSZWYsXG4gIH0gPSB1c2VHbG9iYWxDb250ZXh0KClcbiAgY29uc3QgcGx1c01lbnVaSW5kZXggPSB1c2VNYWlhVGFza1BhbmVsWkluZGV4KDEzMDAsICdvdmVybGF5JylcbiAgY29uc3QgaW5pdGlhbERyYWZ0QXBwbGllZFJlZiA9IHVzZVJlZihmYWxzZSlcblxuICBjb25zdCB7XG4gICAgcG9wb3Zlck9wZW4sXG4gICAgcmVzZXRNZW50aW9uT3BlblRyYWNraW5nLFxuICAgIGhhbmRsZVRyaWdnZXIsXG4gICAgaGFuZGxlS2V5RG93bjogaGFuZGxlUG9wb3ZlcktleURvd24sXG4gICAgcG9wb3Zlck5vZGUsXG4gIH0gPSB1c2VNZW50aW9uUG9wb3Zlcih7XG4gICAgZWRpdG9yUmVmLFxuICAgIHBvcG92ZXJBbmNob3JSZWY6IHdyYXBwZXJSZWYsXG4gIH0pXG5cbiAgY29uc3QgW3BsdXNNZW51QW5jaG9yLCBzZXRQbHVzTWVudUFuY2hvcl0gPSB1c2VTdGF0ZTxIVE1MQnV0dG9uRWxlbWVudCB8IG51bGw+KG51bGwpXG4gIGNvbnN0IFthY3RpdmVUb29sQ2hpcEhvdmVyZWQsIHNldEFjdGl2ZVRvb2xDaGlwSG92ZXJlZF0gPSB1c2VTdGF0ZShmYWxzZSlcbiAgY29uc3QgW3Rvb2xDaGlwRXhpdGluZywgc2V0VG9vbENoaXBFeGl0aW5nXSA9IHVzZVN0YXRlKGZhbHNlKVxuICBjb25zdCB0b29sQ2hpcEV4aXRUaW1lclJlZiA9IHVzZVJlZjxSZXR1cm5UeXBlPHR5cGVvZiBzZXRUaW1lb3V0PiB8IG51bGw+KG51bGwpXG4gIGNvbnN0IHNlYXJjaE1vZGVBY3RpdmVSZWYgPSB1c2VSZWYoeyB3ZWI6IGZhbHNlLCBkZWVwOiBmYWxzZSB9KVxuICBjb25zdCBwbHVzTWVudU9wZW4gPSBCb29sZWFuKHBsdXNNZW51QW5jaG9yKVxuXG4gIC8vIEluaWNpYWxpemFyIGxhcyByZWZlcmVuY2lhcyBjb21vIHVuZGVmaW5lZCBwYXJhIGRldGVjdGFyIGVsIHByaW1lciBjYW1iaW8gY29ycmVjdGFtZW50ZVxuICBjb25zdCBwcmV2aW91c0FnZW50SWRSZWYgPSB1c2VSZWY8c3RyaW5nIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpXG4gIGNvbnN0IHByZXZpb3VzQ2hhdElkUmVmID0gdXNlUmVmPHN0cmluZyB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKVxuICBjb25zdCBwcmV2aW91c05ld0NoYXRLZXlSZWYgPSB1c2VSZWY8bnVtYmVyIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpXG4gIGNvbnN0IHByZXZpb3VzTGF5b3V0TW9kZVJlZiA9IHVzZVJlZjxNQUlBSW5wdXRQcm9wc1snbGF5b3V0TW9kZSddPih1bmRlZmluZWQpXG5cbiAgY29uc3QgYW5hbHl0aWNzQWdlbnRUeXBlID0gZ2V0Q2hhdFRvb2xzTWVudUFnZW50VHlwZShhZ2VudClcbiAgY29uc3QgYW5hbHl0aWNzQ2xvbmVFbnRpdHlQYXlsb2FkID0gYWdlbnQ/LnR5cGUgPT09ICdjbG9uZScgPyB7IGVudGl0eTogYWdlbnQuZW50aXR5ID8/IG51bGwgfSA6IHt9XG5cbiAgLy8gU2xhc2ggY29tbWFuZHMgYXBsaWNhbiBhIGNsb25lcyBlc3BlY2lhbGlzdGFzIHkgYWwgb3JjaGVzdHJhdG9yIGdsb2JhbCAoZXN0ZSBhZ3JlZ2EgbG9zIGRlIHN1cyBzdWJhZ2VudGVzKS5cbiAgLy8gTG9zIGN1c3RvbSB5IGxvcyBjbG9uZSBnbG9iYWwvbWFpYWtlciBubyBsb3MgdGllbmVuIGhhYmlsaXRhZG9zLlxuICBjb25zdCB7IGNvbW1hbmRzOiBzbGFzaENvbW1hbmRzIH0gPSB1c2VTbGFzaENvbW1hbmRzKFxuICAgIChhZ2VudD8udHlwZSA9PT0gJ29yY2hlc3RyYXRvcicgJiYgYWdlbnQ/LmVudGl0eSA9PT0gJ2dsb2JhbCcpIHx8XG4gICAgICAoYWdlbnQ/LnR5cGUgPT09ICdjbG9uZScgJiYgYWdlbnQ/LmVudGl0eSAhPT0gJ2dsb2JhbCcpXG4gICAgICA/IGFnZW50Py5pZFxuICAgICAgOiB1bmRlZmluZWRcbiAgKVxuICBjb25zdCBbc2hvd1NsYXNoRHJvcGRvd24sIHNldFNob3dTbGFzaERyb3Bkb3duXSA9IHVzZVN0YXRlKGZhbHNlKVxuICBjb25zdCBbc2xhc2hRdWVyeSwgc2V0U2xhc2hRdWVyeV0gPSB1c2VTdGF0ZSgnJylcbiAgY29uc3Qgc2xhc2hNZW51V2FzT3BlblJlZiA9IHVzZVJlZihmYWxzZSlcblxuICAvKiogVHJhcyBlbGVnaXIgbyBxdWl0YXIgYsO6c3F1ZWRhIHdlYi9wcm9mdW5kYTogdm9sdmVyIGFsIHRleHRhcmVhIChQb3BvdmVyL21lbnUgcHVlZGUgcm9iYXIgZm9jbykuICovXG4gIGNvbnN0IHNjaGVkdWxlSW5wdXRGb2N1c0FmdGVyVG9vbEFjdGlvbiA9ICgpID0+IHtcbiAgICBpZiAoZGlzYWJsZWQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuICAgICAgd2luZG93LnNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBlZGl0b3JSZWYuY3VycmVudD8uZm9jdXMoKVxuICAgICAgfSwgMClcbiAgICB9KVxuICB9XG5cbiAgY29uc3QgY2xvc2VQbHVzTWVudSA9ICgpID0+IHtcbiAgICBzZXRQbHVzTWVudUFuY2hvcihudWxsKVxuICB9XG5cbiAgY29uc3QgY2FuY2VsUGVuZGluZ1Rvb2xDaGlwRXhpdCA9ICgpID0+IHtcbiAgICBpZiAodG9vbENoaXBFeGl0VGltZXJSZWYuY3VycmVudCAhPT0gbnVsbCkge1xuICAgICAgY2xlYXJUaW1lb3V0KHRvb2xDaGlwRXhpdFRpbWVyUmVmLmN1cnJlbnQpXG4gICAgICB0b29sQ2hpcEV4aXRUaW1lclJlZi5jdXJyZW50ID0gbnVsbFxuICAgIH1cbiAgICBzZXRUb29sQ2hpcEV4aXRpbmcoZmFsc2UpXG4gIH1cblxuICBjb25zdCBoYW5kbGVQbHVzQnV0dG9uQ2xpY2sgPSAoZTogTW91c2VFdmVudDxIVE1MQnV0dG9uRWxlbWVudD4pID0+IHtcbiAgICBlLnN0b3BQcm9wYWdhdGlvbigpXG4gICAgaWYgKHBsdXNNZW51QW5jaG9yKSB7XG4gICAgICBjbG9zZVBsdXNNZW51KClcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBzZXRQbHVzTWVudUFuY2hvcihlLmN1cnJlbnRUYXJnZXQpXG4gICAgZXZlbnRBbXBsaXR1ZGUoRVZFTlRTLmFpQ2hhdFBsdXNPcGVuLCB7IGFnZW50X3R5cGU6IGFuYWx5dGljc0FnZW50VHlwZSwgLi4uYW5hbHl0aWNzQ2xvbmVFbnRpdHlQYXlsb2FkIH0pXG4gIH1cblxuICBjb25zdCBoYW5kbGVQbHVzTWVudUF0dGFjaCA9ICgpID0+IHtcbiAgICBjbG9zZVBsdXNNZW51KClcbiAgICBldmVudEFtcGxpdHVkZShFVkVOVFMuYWlDaGF0VG9vbHMsIHtcbiAgICAgIGFnZW50X3R5cGU6IGFuYWx5dGljc0FnZW50VHlwZSxcbiAgICAgIG9wdGlvbjogJ2ZpbGVzJyxcbiAgICAgIC4uLmFuYWx5dGljc0Nsb25lRW50aXR5UGF5bG9hZCxcbiAgICB9KVxuICAgIGlmIChhdHRhY2htZW50cy5sZW5ndGggPj0gTUFYX0NIQVRfSU5QVVRfQVRUQUNITUVOVFMpIHJldHVyblxuICAgIGZpbGVJbnB1dFJlZi5jdXJyZW50Py5jbGljaygpXG4gIH1cblxuICBjb25zdCBiZWdpblRvb2xDaGlwRXhpdCA9ICgpID0+IHtcbiAgICBpZiAodG9vbENoaXBFeGl0VGltZXJSZWYuY3VycmVudCAhPT0gbnVsbCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGNvbnN0IHdhc1dlYiA9IGlzV2ViU2VhcmNoQWN0aXZlXG4gICAgY29uc3Qgd2FzRGVlcCA9IGlzRGVlcFNlYXJjaEFjdGl2ZVxuICAgIGlmICghd2FzV2ViICYmICF3YXNEZWVwKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgc2V0VG9vbENoaXBFeGl0aW5nKHRydWUpXG4gICAgdG9vbENoaXBFeGl0VGltZXJSZWYuY3VycmVudCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdG9vbENoaXBFeGl0VGltZXJSZWYuY3VycmVudCA9IG51bGxcbiAgICAgIGNvbnN0IHsgd2ViLCBkZWVwIH0gPSBzZWFyY2hNb2RlQWN0aXZlUmVmLmN1cnJlbnRcbiAgICAgIGlmICh3YXNXZWIgJiYgd2ViKSB7XG4gICAgICAgIHRvZ2dsZVdlYlNlYXJjaCgpXG4gICAgICB9IGVsc2UgaWYgKHdhc0RlZXAgJiYgZGVlcCkge1xuICAgICAgICB0b2dnbGVEZWVwU2VhcmNoKClcbiAgICAgIH1cbiAgICAgIHNldFRvb2xDaGlwRXhpdGluZyhmYWxzZSlcbiAgICAgIHNjaGVkdWxlSW5wdXRGb2N1c0FmdGVyVG9vbEFjdGlvbigpXG4gICAgfSwgVE9PTF9DSElQX0VYSVRfTVMpXG4gIH1cblxuICBjb25zdCBoYW5kbGVQbHVzTWVudVdlYlNlYXJjaCA9ICgpID0+IHtcbiAgICBjbG9zZVBsdXNNZW51KClcbiAgICBpZiAoaXNXZWJTZWFyY2hBY3RpdmUpIHtcbiAgICAgIGJlZ2luVG9vbENoaXBFeGl0KClcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBjYW5jZWxQZW5kaW5nVG9vbENoaXBFeGl0KClcbiAgICBpZiAoaXNEZWVwU2VhcmNoQWN0aXZlKSB7XG4gICAgICB0b2dnbGVEZWVwU2VhcmNoKClcbiAgICB9XG4gICAgdG9nZ2xlV2ViU2VhcmNoKClcbiAgICBldmVudEFtcGxpdHVkZShFVkVOVFMuYWlDaGF0VG9vbHMsIHtcbiAgICAgIGFnZW50X3R5cGU6IGFuYWx5dGljc0FnZW50VHlwZSxcbiAgICAgIG9wdGlvbjogJ3NlYXJjaCcsXG4gICAgICAuLi5hbmFseXRpY3NDbG9uZUVudGl0eVBheWxvYWQsXG4gICAgfSlcbiAgICBzY2hlZHVsZUlucHV0Rm9jdXNBZnRlclRvb2xBY3Rpb24oKVxuICB9XG5cbiAgY29uc3QgaGFuZGxlUGx1c01lbnVEZWVwU2VhcmNoID0gKCkgPT4ge1xuICAgIGNsb3NlUGx1c01lbnUoKVxuICAgIGlmIChpc0RlZXBTZWFyY2hBY3RpdmUpIHtcbiAgICAgIGJlZ2luVG9vbENoaXBFeGl0KClcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBjYW5jZWxQZW5kaW5nVG9vbENoaXBFeGl0KClcbiAgICBpZiAoaXNXZWJTZWFyY2hBY3RpdmUpIHtcbiAgICAgIHRvZ2dsZVdlYlNlYXJjaCgpXG4gICAgfVxuICAgIHRvZ2dsZURlZXBTZWFyY2goKVxuICAgIGV2ZW50QW1wbGl0dWRlKEVWRU5UUy5haUNoYXRUb29scywge1xuICAgICAgYWdlbnRfdHlwZTogYW5hbHl0aWNzQWdlbnRUeXBlLFxuICAgICAgb3B0aW9uOiAnZGVlcF9zZWFyY2gnLFxuICAgICAgLi4uYW5hbHl0aWNzQ2xvbmVFbnRpdHlQYXlsb2FkLFxuICAgIH0pXG4gICAgc2NoZWR1bGVJbnB1dEZvY3VzQWZ0ZXJUb29sQWN0aW9uKClcbiAgfVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFkaXNhYmxlZCkge1xuICAgICAgZWRpdG9yUmVmLmN1cnJlbnQ/LmZvY3VzKClcbiAgICB9XG4gIH0sIFtkaXNhYmxlZF0pXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBkcmFmdCA9IGluaXRpYWxEcmFmdD8udHJpbSgpXG4gICAgaWYgKCFkcmFmdCB8fCBpbml0aWFsRHJhZnRBcHBsaWVkUmVmLmN1cnJlbnQgfHwgZGlzYWJsZWQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBpbml0aWFsRHJhZnRBcHBsaWVkUmVmLmN1cnJlbnQgPSB0cnVlXG4gICAgaWYgKGRlZXBMaW5rU2VuZFBlbmRpbmdSZWYpIHtcbiAgICAgIGRlZXBMaW5rU2VuZFBlbmRpbmdSZWYuY3VycmVudCA9IHRydWVcbiAgICB9XG4gICAgZWRpdG9yUmVmLmN1cnJlbnQ/LnNldFBsYWluVGV4dChkcmFmdClcbiAgICBzZXRIYXNUeXBpbmdQcmVzZW5jZSh0cnVlKVxuICAgIGlmICghZGlzYWJsZWQpIHtcbiAgICAgIGVkaXRvclJlZi5jdXJyZW50Py5mb2N1cygpXG4gICAgfVxuICB9LCBbaW5pdGlhbERyYWZ0LCBkaXNhYmxlZCwgZGVlcExpbmtTZW5kUGVuZGluZ1JlZl0pXG5cbiAgY29uc3QgY29tcGFjdFNpbmdsZVJvd1Rvb2xiYXIgPSB1c2VNZW1vKFxuICAgICgpID0+IGF0dGFjaG1lbnRzLmxlbmd0aCA9PT0gMCAmJiAhaXNXZWJTZWFyY2hBY3RpdmUgJiYgIWlzRGVlcFNlYXJjaEFjdGl2ZSAmJiAhaGFzV3JhcHBlZFRvU2Vjb25kTGluZSxcbiAgICBbYXR0YWNobWVudHMubGVuZ3RoLCBpc1dlYlNlYXJjaEFjdGl2ZSwgaXNEZWVwU2VhcmNoQWN0aXZlLCBoYXNXcmFwcGVkVG9TZWNvbmRMaW5lXVxuICApXG5cbiAgY29uc3Qgc2VuZERpc2FibGVkID0gdXNlTWVtbyhcbiAgICAoKSA9PiAhaGFzVHlwaW5nUHJlc2VuY2UgJiYgYXR0YWNobWVudHMubGVuZ3RoID09PSAwLFxuICAgIFtoYXNUeXBpbmdQcmVzZW5jZSwgYXR0YWNobWVudHMubGVuZ3RoXVxuICApXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBzZWFyY2hNb2RlQWN0aXZlUmVmLmN1cnJlbnQgPSB7IHdlYjogaXNXZWJTZWFyY2hBY3RpdmUsIGRlZXA6IGlzRGVlcFNlYXJjaEFjdGl2ZSB9XG4gIH0sIFtpc1dlYlNlYXJjaEFjdGl2ZSwgaXNEZWVwU2VhcmNoQWN0aXZlXSlcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBpZiAodG9vbENoaXBFeGl0VGltZXJSZWYuY3VycmVudCAhPT0gbnVsbCkge1xuICAgICAgICBjbGVhclRpbWVvdXQodG9vbENoaXBFeGl0VGltZXJSZWYuY3VycmVudClcbiAgICAgIH1cbiAgICB9XG4gIH0sIFtdKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFpc1dlYlNlYXJjaEFjdGl2ZSAmJiAhaXNEZWVwU2VhcmNoQWN0aXZlKSB7XG4gICAgICBzZXRBY3RpdmVUb29sQ2hpcEhvdmVyZWQoZmFsc2UpXG4gICAgfVxuICB9LCBbaXNXZWJTZWFyY2hBY3RpdmUsIGlzRGVlcFNlYXJjaEFjdGl2ZV0pXG5cbiAgLy8gQXV0by1mb2N1cyBjdWFuZG8gY2FtYmlhIGVsIGFnZW50ZSBvIGxhIGNvbnZlcnNhY2nDs24sIG8gYWwgbW9udGFyIGVsIGNvbXBvbmVudGVcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBhZ2VudENoYW5nZWQgPSBwcmV2aW91c0FnZW50SWRSZWYuY3VycmVudCAhPT0gYWdlbnQ/LmlkXG4gICAgY29uc3QgcHJldmlvdXNDaGF0SWQgPSBwcmV2aW91c0NoYXRJZFJlZi5jdXJyZW50XG4gICAgY29uc3QgY3VycmVudENoYXRJZCA9IGNoYXRJZFxuICAgIGNvbnN0IGNoYXRDaGFuZ2VkID0gcHJldmlvdXNDaGF0SWQgIT09IGN1cnJlbnRDaGF0SWRcbiAgICBjb25zdCBjaGFuZ2VkRnJvbU5ld0NoYXRUb09sZENoYXQgPVxuICAgICAgKHByZXZpb3VzQ2hhdElkID09PSB1bmRlZmluZWQgfHwgcHJldmlvdXNDaGF0SWQgPT09IG51bGwpICYmIGN1cnJlbnRDaGF0SWQgIT09IHVuZGVmaW5lZCAmJiBjdXJyZW50Q2hhdElkICE9PSBudWxsXG4gICAgY29uc3QgbmV3Q2hhdFN0YXJ0ZWQgPSBwcmV2aW91c05ld0NoYXRLZXlSZWYuY3VycmVudCAhPT0gbmV3Q2hhdEtleVxuICAgIGNvbnN0IGlzSW5pdGlhbE1vdW50ID0gcHJldmlvdXNBZ2VudElkUmVmLmN1cnJlbnQgPT09IHVuZGVmaW5lZCAmJiBwcmV2aW91c0NoYXRJZFJlZi5jdXJyZW50ID09PSB1bmRlZmluZWRcblxuICAgIGlmICgoYWdlbnRDaGFuZ2VkIHx8IGNoYXRDaGFuZ2VkIHx8IGNoYW5nZWRGcm9tTmV3Q2hhdFRvT2xkQ2hhdCB8fCBuZXdDaGF0U3RhcnRlZCB8fCBpc0luaXRpYWxNb3VudCkgJiYgIWRpc2FibGVkKSB7XG4gICAgICBjb25zdCBkZWxheSA9IGlzSW5pdGlhbE1vdW50IHx8IGNoYW5nZWRGcm9tTmV3Q2hhdFRvT2xkQ2hhdCA/IDIwMCA6IDEwMFxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGlmICghZGlzYWJsZWQpIGVkaXRvclJlZi5jdXJyZW50Py5mb2N1cygpXG4gICAgICB9LCBkZWxheSlcbiAgICB9XG5cbiAgICBwcmV2aW91c0FnZW50SWRSZWYuY3VycmVudCA9IGFnZW50Py5pZFxuICAgIHByZXZpb3VzQ2hhdElkUmVmLmN1cnJlbnQgPSBjaGF0SWRcbiAgICBwcmV2aW91c05ld0NoYXRLZXlSZWYuY3VycmVudCA9IG5ld0NoYXRLZXlcbiAgfSwgW2FnZW50Py5pZCwgY2hhdElkLCBuZXdDaGF0S2V5LCBkaXNhYmxlZF0pXG5cbiAgLy8gQXV0by1mb2N1cyBjdWFuZG8gY2FtYmlhIGxhIGRpc3Bvc2ljacOzbiBkZWwgbW9kYWwgKHNpZGViYXIgLyBmdWxsc2NyZWVuIC8gZmxvYXRpbmcpXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFsYXlvdXRNb2RlKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkXG4gICAgfVxuXG4gICAgY29uc3QgcHJldmlvdXNMYXlvdXRNb2RlID0gcHJldmlvdXNMYXlvdXRNb2RlUmVmLmN1cnJlbnRcbiAgICBwcmV2aW91c0xheW91dE1vZGVSZWYuY3VycmVudCA9IGxheW91dE1vZGVcblxuICAgIGlmIChwcmV2aW91c0xheW91dE1vZGUgPT09IHVuZGVmaW5lZCB8fCBwcmV2aW91c0xheW91dE1vZGUgPT09IGxheW91dE1vZGUgfHwgZGlzYWJsZWQpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWRcbiAgICB9XG5cbiAgICBjb25zdCB0aW1lb3V0SWQgPSB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBpZiAoIWRpc2FibGVkKSB7XG4gICAgICAgIGVkaXRvclJlZi5jdXJyZW50Py5mb2N1cygpXG4gICAgICB9XG4gICAgfSwgMjAwKVxuXG4gICAgcmV0dXJuICgpID0+IHdpbmRvdy5jbGVhclRpbWVvdXQodGltZW91dElkKVxuICB9LCBbbGF5b3V0TW9kZSwgZGlzYWJsZWRdKVxuXG4gIC8vIEFwcGN1ZXM6IG5vdGlmeSB0aGF0IHRoZSBpbnB1dCBpcyB2aXNpYmxlIGZvciBzcGVjaWFsaXN0IGFnZW50cyAoY2xvbmUgKyBwcm9qZWN0L2NsaWVudClcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBpc1NwZWNpYWxpc3RBZ2VudCA9IGFnZW50Py50eXBlID09PSAnY2xvbmUnICYmIChhZ2VudD8uZW50aXR5ID09PSAncHJvamVjdCcgfHwgYWdlbnQ/LmVudGl0eSA9PT0gJ2NsaWVudCcpXG4gICAgaWYgKCF3cmFwcGVyUmVmLmN1cnJlbnQgfHwgIWlzU3BlY2lhbGlzdEFnZW50KSByZXR1cm4gdW5kZWZpbmVkXG5cbiAgICBjb25zdCBvYnNlcnZlciA9IG5ldyBJbnRlcnNlY3Rpb25PYnNlcnZlcihcbiAgICAgIChbZW50cnldKSA9PiB7XG4gICAgICAgIGlmIChlbnRyeS5pc0ludGVyc2VjdGluZykge1xuICAgICAgICAgIHRyYWNrQXBwY3Vlc0V2ZW50KEFQUENVRVNfRVZFTlRTLm1haWFDb250ZXh0TWVudGlvbkluaXQpXG4gICAgICAgICAgb2JzZXJ2ZXIuZGlzY29ubmVjdCgpXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICB7IHRocmVzaG9sZDogMC4xIH1cbiAgICApXG5cbiAgICBvYnNlcnZlci5vYnNlcnZlKHdyYXBwZXJSZWYuY3VycmVudClcbiAgICByZXR1cm4gKCkgPT4gb2JzZXJ2ZXIuZGlzY29ubmVjdCgpXG4gIH0sIFthZ2VudD8uaWQsIGFnZW50Py50eXBlLCBhZ2VudD8uZW50aXR5XSlcblxuICAvLyBDbGVhciBpbnB1dCB3aGVuIHNlc3Npb24gY2hhbmdlcyAodXNlciBzd2l0Y2hlcyB0byBhIGRpZmZlcmVudCBjaGF0KVxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IGhhbmRsZVNlc3Npb25DaGFuZ2UgPSAoKSA9PiB7XG4gICAgICBpZiAoZGVlcExpbmtTZW5kUGVuZGluZ1JlZikge1xuICAgICAgICBkZWVwTGlua1NlbmRQZW5kaW5nUmVmLmN1cnJlbnQgPSBmYWxzZVxuICAgICAgfVxuICAgICAgZWRpdG9yUmVmLmN1cnJlbnQ/LmNsZWFyKClcbiAgICAgIHNldEhhc1R5cGluZ1ByZXNlbmNlKGZhbHNlKVxuICAgICAgc2V0SGFzV3JhcHBlZFRvU2Vjb25kTGluZShmYWxzZSlcbiAgICAgIHNldFNob3dTbGFzaERyb3Bkb3duKGZhbHNlKVxuICAgICAgc2V0U2xhc2hRdWVyeSgnJylcbiAgICAgIHJlc2V0TWVudGlvbk9wZW5UcmFja2luZygpXG4gICAgfVxuXG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignY2hhdC1zZXNzaW9uLWNoYW5nZWQnLCBoYW5kbGVTZXNzaW9uQ2hhbmdlKVxuICAgIHJldHVybiAoKSA9PiBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdjaGF0LXNlc3Npb24tY2hhbmdlZCcsIGhhbmRsZVNlc3Npb25DaGFuZ2UpXG4gIH0sIFtyZXNldE1lbnRpb25PcGVuVHJhY2tpbmcsIGRlZXBMaW5rU2VuZFBlbmRpbmdSZWZdKVxuXG4gIC8vIE1hbnRlbmVyIGZvY28gYWwgc2VsZWNjaW9uYXIgdW4gY29udGV4dG8gcmVjaWVudGUgKGVsIGNsaWNrIGVuIGVsIHBpbGwgbG8gcm9iYSBhbCBpbnB1dCkuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgaGFuZGxlUmVmb2N1cyA9ICgpID0+IHtcbiAgICAgIGlmIChkaXNhYmxlZCkgcmV0dXJuXG4gICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuICAgICAgICBlZGl0b3JSZWYuY3VycmVudD8uZm9jdXMoKVxuICAgICAgfSlcbiAgICB9XG5cbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtYWlhLWlucHV0LXJlZm9jdXMnLCBoYW5kbGVSZWZvY3VzKVxuICAgIHJldHVybiAoKSA9PiBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtYWlhLWlucHV0LXJlZm9jdXMnLCBoYW5kbGVSZWZvY3VzKVxuICB9LCBbZGlzYWJsZWRdKVxuXG4gIGNvbnN0IGhhbmRsZVNlbmRNZXNzYWdlID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGNvbnN0IHN0YXRlID0gZWRpdG9yUmVmLmN1cnJlbnQ/LnNlcmlhbGl6ZSgpXG4gICAgY29uc3QgdGV4dCA9IHN0YXRlPy50ZXh0ID8/ICcnXG4gICAgaWYgKCF0ZXh0LnRyaW0oKSAmJiAhYXR0YWNobWVudHMubGVuZ3RoKSByZXR1cm5cbiAgICBjb25zdCBtZW50aW9ucyA9IHN0YXRlPy5tZW50aW9ucyA/PyBbXVxuICAgIG9uU2VuZE1lc3NhZ2UodGV4dCwgYXR0YWNobWVudHMsIG1lbnRpb25zKVxuICAgIGVkaXRvclJlZi5jdXJyZW50Py5jbGVhcigpXG4gICAgc2V0SGFzVHlwaW5nUHJlc2VuY2UoZmFsc2UpXG4gICAgc2V0SGFzV3JhcHBlZFRvU2Vjb25kTGluZShmYWxzZSlcbiAgICBzZXRTaG93U2xhc2hEcm9wZG93bihmYWxzZSlcbiAgICBzZXRTbGFzaFF1ZXJ5KCcnKVxuICAgIHJlc2V0TWVudGlvbk9wZW5UcmFja2luZygpXG4gIH0sIFthdHRhY2htZW50cywgb25TZW5kTWVzc2FnZSwgcmVzZXRNZW50aW9uT3BlblRyYWNraW5nXSlcblxuICBjb25zdCBoYW5kbGVTZWxlY3RTbGFzaENvbW1hbmQgPSB1c2VDYWxsYmFjayhcbiAgICAoY29tbWFuZDogQWN0aW9uKSA9PiB7XG4gICAgICBldmVudEFtcGxpdHVkZShFVkVOVFMuYWlDaGF0UXVpY2tBY3Rpb25TZWxlY3QsIHtcbiAgICAgICAgdHlwZV9xdWlja19hY3Rpb246IHJlc29sdmVRdWlja0FjdGlvblR5cGUoY29tbWFuZCksXG4gICAgICAgIG9yaWdpbl9xdWlja19hY3Rpb246ICdzbGFzaF9tZW51JyxcbiAgICAgIH0pXG5cbiAgICAgIGNvbnN0IHN0YXRlID0gZWRpdG9yUmVmLmN1cnJlbnQ/LnNlcmlhbGl6ZSgpXG4gICAgICBjb25zdCB0ZXh0ID0gc3RhdGU/LnRleHQgPz8gJydcbiAgICAgIGNvbnN0IHRyaWdnZXJQYXJ0ID0gYC8ke3NsYXNoUXVlcnl9YFxuICAgICAgY29uc3QgYmVmb3JlVHJpZ2dlciA9IHRleHQuZW5kc1dpdGgodHJpZ2dlclBhcnQpID8gdGV4dC5zbGljZSgwLCAtdHJpZ2dlclBhcnQubGVuZ3RoKSA6IHRleHRcbiAgICAgIGNvbnN0IGlzRW1wdHlCZWZvcmVUcmlnZ2VyID0gYmVmb3JlVHJpZ2dlci50cmltKCkgPT09ICcnXG5cbiAgICAgIGlmIChpc0VtcHR5QmVmb3JlVHJpZ2dlcikge1xuICAgICAgICBvblNlbmRNZXNzYWdlKGNvbW1hbmQudGl0bGUsIGF0dGFjaG1lbnRzLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIGNvbW1hbmQuaWQpXG4gICAgICAgIGVkaXRvclJlZi5jdXJyZW50Py5jbGVhcigpXG4gICAgICAgIHNldEhhc1R5cGluZ1ByZXNlbmNlKGZhbHNlKVxuICAgICAgICBzZXRIYXNXcmFwcGVkVG9TZWNvbmRMaW5lKGZhbHNlKVxuICAgICAgICBzZXRTaG93U2xhc2hEcm9wZG93bihmYWxzZSlcbiAgICAgICAgc2V0U2xhc2hRdWVyeSgnJylcbiAgICAgICAgc2xhc2hNZW51V2FzT3BlblJlZi5jdXJyZW50ID0gZmFsc2VcbiAgICAgICAgcmVzZXRNZW50aW9uT3BlblRyYWNraW5nKClcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGVkaXRvclJlZi5jdXJyZW50Py5pbnNlcnRTbGFzaENvbW1hbmQoeyBpZDogY29tbWFuZC5pZCwgbGFiZWw6IGNvbW1hbmQudGl0bGUgfSlcbiAgICAgIHNldFNob3dTbGFzaERyb3Bkb3duKGZhbHNlKVxuICAgICAgc2V0U2xhc2hRdWVyeSgnJylcbiAgICAgIHNsYXNoTWVudVdhc09wZW5SZWYuY3VycmVudCA9IGZhbHNlXG4gICAgfSxcbiAgICBbYXR0YWNobWVudHMsIG9uU2VuZE1lc3NhZ2UsIHJlc2V0TWVudGlvbk9wZW5UcmFja2luZywgc2xhc2hRdWVyeSwgZXZlbnRBbXBsaXR1ZGVdXG4gIClcblxuICBjb25zdCBoYW5kbGVDbG9zZVNsYXNoRHJvcGRvd24gPSAoKSA9PiB7XG4gICAgc2V0U2hvd1NsYXNoRHJvcGRvd24oZmFsc2UpXG4gICAgc2xhc2hNZW51V2FzT3BlblJlZi5jdXJyZW50ID0gZmFsc2VcbiAgfVxuXG4gIGNvbnN0IGhhbmRsZUVkaXRvcklucHV0ID0gdXNlQ2FsbGJhY2soXG4gICAgKHtcbiAgICAgIHRleHQsXG4gICAgICB0cmlnZ2VyLFxuICAgICAgc2xhc2hUcmlnZ2VyLFxuICAgIH06IHtcbiAgICAgIHRleHQ6IHN0cmluZ1xuICAgICAgbWVudGlvbnM6IENvbnRleHRNZW50aW9uW11cbiAgICAgIHRyaWdnZXI6IHsgYWN0aXZlOiBib29sZWFuOyBxdWVyeTogc3RyaW5nOyBhdFJ1bkxlbmd0aDogbnVtYmVyIH1cbiAgICAgIHNsYXNoVHJpZ2dlcj86IHsgYWN0aXZlOiBib29sZWFuOyBxdWVyeTogc3RyaW5nIH1cbiAgICB9KSA9PiB7XG4gICAgICBjb25zdCB2aXN1YWxNdWx0aWxpbmUgPSAhIWVkaXRvclJlZi5jdXJyZW50Py5oYXNWaXN1YWxNdWx0aWxpbmUoKVxuICAgICAgY29uc3QgZXhwbGljaXRNdWx0aWxpbmUgPSB0ZXh0LmluY2x1ZGVzKCdcXG4nKVxuICAgICAgY29uc3QgaXNMaWtlbHlGaXJzdENoYXJNZWFzdXJlbWVudEdsaXRjaCA9IHRleHQubGVuZ3RoIDw9IDEgJiYgIWV4cGxpY2l0TXVsdGlsaW5lICYmIHZpc3VhbE11bHRpbGluZVxuICAgICAgY29uc3Qgc3RhYmxlVmlzdWFsTXVsdGlsaW5lID0gaXNMaWtlbHlGaXJzdENoYXJNZWFzdXJlbWVudEdsaXRjaCA/IGZhbHNlIDogdmlzdWFsTXVsdGlsaW5lXG4gICAgICBjb25zdCBuZXh0SXNNdWx0aWxpbmUgPSBleHBsaWNpdE11bHRpbGluZSB8fCBzdGFibGVWaXN1YWxNdWx0aWxpbmVcbiAgICAgIGNvbnN0IG5leHRIYXNUeXBpbmdQcmVzZW5jZSA9IHRleHQudHJpbSgpLmxlbmd0aCA+IDBcbiAgICAgIGNvbnN0IG5leHRUeXBpbmdQcmVzZW5jZSA9IHRleHQudHJpbSgpLmxlbmd0aCA+IDBcblxuICAgICAgc2V0SGFzVHlwaW5nUHJlc2VuY2UobmV4dFR5cGluZ1ByZXNlbmNlKVxuICAgICAgc2V0SGFzV3JhcHBlZFRvU2Vjb25kTGluZShwcmV2ID0+IHtcbiAgICAgICAgbGV0IG5leHQgPSBwcmV2XG4gICAgICAgIGlmICghbmV4dEhhc1R5cGluZ1ByZXNlbmNlKSB7XG4gICAgICAgICAgbmV4dCA9IGZhbHNlXG4gICAgICAgIH0gZWxzZSBpZiAobmV4dElzTXVsdGlsaW5lKSB7XG4gICAgICAgICAgbmV4dCA9IHRydWVcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBuZXh0XG4gICAgICB9KVxuICAgICAgb25DaGFuZ2U/LigpXG4gICAgICBoYW5kbGVUcmlnZ2VyKHRyaWdnZXIpXG5cbiAgICAgIGlmIChzbGFzaFRyaWdnZXI/LmFjdGl2ZSAmJiBzbGFzaENvbW1hbmRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgaWYgKCFzbGFzaE1lbnVXYXNPcGVuUmVmLmN1cnJlbnQpIHtcbiAgICAgICAgICBldmVudEFtcGxpdHVkZShFVkVOVFMuYWlDaGF0UXVpY2tBY3Rpb25PcGVuKVxuICAgICAgICAgIHNsYXNoTWVudVdhc09wZW5SZWYuY3VycmVudCA9IHRydWVcbiAgICAgICAgfVxuICAgICAgICBzZXRTaG93U2xhc2hEcm9wZG93bih0cnVlKVxuICAgICAgICBzZXRTbGFzaFF1ZXJ5KHNsYXNoVHJpZ2dlci5xdWVyeSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNsYXNoTWVudVdhc09wZW5SZWYuY3VycmVudCA9IGZhbHNlXG4gICAgICAgIHNldFNob3dTbGFzaERyb3Bkb3duKGZhbHNlKVxuICAgICAgICBzZXRTbGFzaFF1ZXJ5KCcnKVxuICAgICAgfVxuICAgIH0sXG4gICAgW29uQ2hhbmdlLCBoYW5kbGVUcmlnZ2VyLCBzbGFzaENvbW1hbmRzLCBldmVudEFtcGxpdHVkZV1cbiAgKVxuXG4gIGNvbnN0IGhhbmRsZUtleURvd24gPSB1c2VDYWxsYmFjayhcbiAgICAoZTogS2V5Ym9hcmRFdmVudDxIVE1MRGl2RWxlbWVudD4pID0+IHtcbiAgICAgIGlmIChoYW5kbGVQb3BvdmVyS2V5RG93bihlKSkgcmV0dXJuXG4gICAgICBpZiAoZS5rZXkgPT09ICdFbnRlcicgJiYgIWUuc2hpZnRLZXkgJiYgIXBvcG92ZXJPcGVuKSB7XG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKVxuICAgICAgICBpZiAoIXNlbmREaXNhYmxlZCAmJiAhZGlzYWJsZWQpIGhhbmRsZVNlbmRNZXNzYWdlKClcbiAgICAgIH1cbiAgICB9LFxuICAgIFtoYW5kbGVQb3BvdmVyS2V5RG93biwgcG9wb3Zlck9wZW4sIHNlbmREaXNhYmxlZCwgZGlzYWJsZWQsIGhhbmRsZVNlbmRNZXNzYWdlXVxuICApXG5cbiAgY29uc3QgaGFuZGxlRmlsZVNlbGVjdCA9IChlOiBDaGFuZ2VFdmVudDxIVE1MSW5wdXRFbGVtZW50PikgPT4ge1xuICAgIGNvbnN0IGZpbGVzID0gZS50YXJnZXQuZmlsZXNcbiAgICBpZiAoIWZpbGVzKSByZXR1cm5cblxuICAgIGNvbnN0IGV4Y2VlZGVkRmlsZXM6IHN0cmluZ1tdID0gW11cbiAgICBjb25zdCBleGNsdWRlZEZpbGVzOiBzdHJpbmdbXSA9IFtdXG4gICAgY29uc3QgZmlsZVNpemVzOiBSZWNvcmQ8c3RyaW5nLCBudW1iZXI+ID0ge31cbiAgICBsZXQgZmlsZXNJbnNlcnRlZCA9IGF0dGFjaG1lbnRzLmxlbmd0aFxuXG4gICAgLy8gRGVmaW5pciBsw61taXRlcyBwYXJhIGRpZmVyZW50ZXMgdGlwb3MgZGUgYXJjaGl2b3NcbiAgICBjb25zdCBpc05ld0Zvcm1hdCA9IChleHRlbnNpb246IHN0cmluZykgPT4gWycucG5nJywgJy5qcGcnLCAnLmpwZWcnLCAnLnBkZiddLmluY2x1ZGVzKGV4dGVuc2lvbilcbiAgICBjb25zdCBpc09sZEZvcm1hdCA9IChleHRlbnNpb246IHN0cmluZykgPT5cbiAgICAgIFsnLnR4dCcsICcubWQnLCAnLmNzdicsICcuZG9jJywgJy5kb2N4JywgJy54bHN4JywgJy54bHMnXS5pbmNsdWRlcyhleHRlbnNpb24pXG4gICAgY29uc3QgaXNBdWRpb0Zvcm1hdCA9IChleHRlbnNpb246IHN0cmluZykgPT5cbiAgICAgIFsnLmZsYWMnLCAnLm00YScsICcubXAzJywgJy5tcDQnLCAnLm9nYScsICcub2dnJywgJy53YXYnLCAnLndlYm0nXS5pbmNsdWRlcyhleHRlbnNpb24pXG5cbiAgICBBcnJheS5mcm9tKGZpbGVzKS5mb3JFYWNoKGZpbGUgPT4ge1xuICAgICAgbGV0IGV4Y2x1ZGVkRmlsZSA9IGZhbHNlXG4gICAgICBjb25zdCBmaWxlTmFtZVBhcnRzID0gZmlsZS5uYW1lLnNwbGl0KCcuJylcbiAgICAgIGNvbnN0IGZpbGVFeHRlbnNpb24gPSBmaWxlTmFtZVBhcnRzLmxlbmd0aCA+IDEgPyBgLiR7ZmlsZU5hbWVQYXJ0cy5wb3AoKT8udG9Mb3dlckNhc2UoKX1gIDogJydcblxuICAgICAgaWYgKCFhbGxvd2VkRmlsZVR5cGVzPy5pbmNsdWRlcyhmaWxlRXh0ZW5zaW9uKSkge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgZmlsZVNpemVzW2ZpbGUubmFtZV0gPSBmaWxlLnNpemVcblxuICAgICAgLy8gVmFsaWRhY2lvbmVzIGVzcGVjw61maWNhcyBzZWfDum4gZWwgdGlwbyBkZSBhcmNoaXZvXG4gICAgICBpZiAoaXNOZXdGb3JtYXQoZmlsZUV4dGVuc2lvbikpIHtcbiAgICAgICAgLy8gUGFyYSBudWV2b3MgZm9ybWF0b3M6IGhhc3RhIDQuOTlNQiBwb3IgYXJjaGl2bywgaGFzdGEgTUFYX0NIQVRfSU5QVVRfQVRUQUNITUVOVFMgYXJjaGl2b3NcbiAgICAgICAgaWYgKGZpbGUuc2l6ZSA+IE1BWF9GSUxFX1NJWkVfTUJfTUFJQV9WSVNJT04gKiAxMDI0ICogMTAyNCkge1xuICAgICAgICAgIGV4Y2VlZGVkRmlsZXMucHVzaChmaWxlLm5hbWUpXG4gICAgICAgICAgZXhjbHVkZWRGaWxlID0gdHJ1ZVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGZpbGVzSW5zZXJ0ZWQgKyAxID4gTUFYX0NIQVRfSU5QVVRfQVRUQUNITUVOVFMpIHtcbiAgICAgICAgICBleGNsdWRlZEZpbGVzLnB1c2goZmlsZS5uYW1lKVxuICAgICAgICAgIGV4Y2x1ZGVkRmlsZSA9IHRydWVcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChpc09sZEZvcm1hdChmaWxlRXh0ZW5zaW9uKSkge1xuICAgICAgICAvLyBQYXJhIGZvcm1hdG9zIGFudGVyaW9yZXM6IGhhc3RhIDFNQiBwb3IgYXJjaGl2bywgaGFzdGEgTUFYX0NIQVRfSU5QVVRfQVRUQUNITUVOVFMgYXJjaGl2b3NcbiAgICAgICAgaWYgKGZpbGUuc2l6ZSA+IE1BWF9GSUxFX1NJWkVfTUJfT0xEICogMTAyNCAqIDEwMjQpIHtcbiAgICAgICAgICBleGNlZWRlZEZpbGVzLnB1c2goZmlsZS5uYW1lKVxuICAgICAgICAgIGV4Y2x1ZGVkRmlsZSA9IHRydWVcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChmaWxlc0luc2VydGVkICsgMSA+IE1BWF9DSEFUX0lOUFVUX0FUVEFDSE1FTlRTKSB7XG4gICAgICAgICAgZXhjbHVkZWRGaWxlcy5wdXNoKGZpbGUubmFtZSlcbiAgICAgICAgICBleGNsdWRlZEZpbGUgPSB0cnVlXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoaXNBdWRpb0Zvcm1hdChmaWxlRXh0ZW5zaW9uKSkge1xuICAgICAgICAvLyBQYXJhIGFyY2hpdm9zIGRlIGF1ZGlvOiBoYXN0YSAxME1CIHBvciBhcmNoaXZvLCBoYXN0YSBNQVhfQ0hBVF9JTlBVVF9BVFRBQ0hNRU5UUyBhcmNoaXZvc1xuICAgICAgICBpZiAoZmlsZS5zaXplID4gTUFYX0ZJTEVfU0laRV9NQl9BVURJTyAqIDEwMjQgKiAxMDI0KSB7XG4gICAgICAgICAgZXhjZWVkZWRGaWxlcy5wdXNoKGZpbGUubmFtZSlcbiAgICAgICAgICBleGNsdWRlZEZpbGUgPSB0cnVlXG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZmlsZXNJbnNlcnRlZCArIDEgPiBNQVhfQ0hBVF9JTlBVVF9BVFRBQ0hNRU5UUykge1xuICAgICAgICAgIGV4Y2x1ZGVkRmlsZXMucHVzaChmaWxlLm5hbWUpXG4gICAgICAgICAgZXhjbHVkZWRGaWxlID0gdHJ1ZVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICghZXhjbHVkZWRGaWxlKSB7XG4gICAgICAgIGZpbGVzSW5zZXJ0ZWQgKz0gMVxuICAgICAgICBjb25zdCB0eXBlRmlsZSA9IGZpbGUudHlwZSB8fCBmaWxlVHlwZXNbZmlsZUV4dGVuc2lvbl1cbiAgICAgICAgY29uc3QgcGFyc2VkRmlsZSA9IG5ldyBGaWxlKFtmaWxlXSwgZmlsZS5uYW1lLCB7IHR5cGU6IHR5cGVGaWxlIH0pXG4gICAgICAgIG9uRmlsZUF0dGFjaD8uKHBhcnNlZEZpbGUpXG4gICAgICB9XG4gICAgfSlcblxuICAgIGlmIChleGNsdWRlZEZpbGVzLmxlbmd0aCB8fCBleGNlZWRlZEZpbGVzLmxlbmd0aCkge1xuICAgICAgc2V0TW9kYWxQcm9wcyh7IGlzT3BlbjogdHJ1ZSwgZXhjbHVkZWRGaWxlcywgZXhjZWVkZWRGaWxlcywgZmlsZVNpemVzIH0pXG4gICAgfVxuXG4gICAgaWYgKGZpbGVJbnB1dFJlZi5jdXJyZW50KSB7XG4gICAgICBmaWxlSW5wdXRSZWYuY3VycmVudC52YWx1ZSA9ICcnXG4gICAgfVxuICB9XG5cbiAgY29uc3QgaGFuZGxlRGVsZXRlQXR0YWNobWVudCA9IChmaWxlSWQ6IHN0cmluZykgPT4ge1xuICAgIG9uRGVsZXRlQXR0YWNobWVudD8uKGZpbGVJZClcbiAgfVxuXG4gIGNvbnN0IGhhbmRsZVdyYXBwZXJGb2N1cyA9ICgpID0+IHNldElzRm9jdXNlZCh0cnVlKVxuICBjb25zdCBoYW5kbGVXcmFwcGVyQmx1ciA9ICgpID0+IHtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGlmICghd3JhcHBlclJlZi5jdXJyZW50Py5jb250YWlucyhkb2N1bWVudC5hY3RpdmVFbGVtZW50KSkge1xuICAgICAgICBzZXRJc0ZvY3VzZWQoZmFsc2UpXG4gICAgICB9XG4gICAgfSwgMClcbiAgfVxuXG4gIGNvbnN0IGhhbmRsZVN0b3BHZW5lcmF0aW9uID0gKCkgPT4ge1xuICAgIGV2ZW50QW1wbGl0dWRlKEVWRU5UUy5haUNoYXRTdG9wUmVzcG9uc2UpXG4gICAgb25TdG9wR2VuZXJhdGlvbj8uKClcbiAgfVxuXG4gIGNvbnN0IHBsdXNJY29uQ29sb3IgPSBpc0ZvY3VzZWQgPyBjb2xvcnMudGV4dC5zZWNvbmRhcnkgOiBjb2xvcnMudGV4dC5tZWRpdW1HcmF5XG4gIGNvbnN0IHBsdXNNZW51SWNvbkNvbG9yID0gTUFJQV9DSEFUX0lOUFVUX1VJLm1lbnVJY29uXG4gIGNvbnN0IHBsdXNNZW51U2VsZWN0ZWRDb2xvciA9IE1BSUFfQ0hBVF9JTlBVVF9VSS50ZXh0QnJhbmRCb2xkXG5cbiAgbGV0IGFjdGl2ZVRvb2xDaGlwTGVhZGluZ0ljb246IFJlYWN0Tm9kZVxuICBpZiAoYWN0aXZlVG9vbENoaXBIb3ZlcmVkKSB7XG4gICAgYWN0aXZlVG9vbENoaXBMZWFkaW5nSWNvbiA9IDxDcm9zcyBjb2xvcj17TUFJQV9DSEFUX0lOUFVUX1VJLmNoaXBDbG9zZUljb259IHdpZHRoPXsxOH0gaGVpZ2h0PXsxOH0gLz5cbiAgfSBlbHNlIGlmIChpc1dlYlNlYXJjaEFjdGl2ZSkge1xuICAgIGFjdGl2ZVRvb2xDaGlwTGVhZGluZ0ljb24gPSA8R2xvYmUgY29sb3I9e3BsdXNNZW51SWNvbkNvbG9yfSB3aWR0aD17MTh9IGhlaWdodD17MTh9IC8+XG4gIH0gZWxzZSB7XG4gICAgYWN0aXZlVG9vbENoaXBMZWFkaW5nSWNvbiA9IDxUZWxlc2NvcGVJY29uIGNvbG9yPXtwbHVzTWVudUljb25Db2xvcn0gd2lkdGg9ezE4fSBoZWlnaHQ9ezE4fSAvPlxuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8PlxuICAgICAgPFN0eWxlZE1BSUFJbnB1dFdyYXBwZXJcbiAgICAgICAgcmVmPXt3cmFwcGVyUmVmfVxuICAgICAgICBkaXNhYmxlZD17ZmFsc2V9XG4gICAgICAgIGFsaWduQnV0dG9ucz17YWxpZ25CdXR0b25zfVxuICAgICAgICBoYXNBdHRhY2htZW50cz17ISFhdHRhY2htZW50cy5sZW5ndGh9XG4gICAgICAgIGNvbXBhY3RTaW5nbGVSb3dUb29sYmFyPXtjb21wYWN0U2luZ2xlUm93VG9vbGJhcn1cbiAgICAgICAgZGF0YS1hcHBjdWVzPVwibWFpYV9jaGF0X2lucHV0XCJcbiAgICAgICAgZGF0YS1tYWlhLXN0cmVhbWluZz17aXNTdHJlYW1pbmcgPyAndHJ1ZScgOiAnZmFsc2UnfVxuICAgICAgICBvbkZvY3VzPXtoYW5kbGVXcmFwcGVyRm9jdXN9XG4gICAgICAgIG9uQmx1cj17aGFuZGxlV3JhcHBlckJsdXJ9XG4gICAgICAgIHN0eWxlPXt7IHBvc2l0aW9uOiAncmVsYXRpdmUnIH19XG4gICAgICA+XG4gICAgICAgIHtzaG93U2xhc2hEcm9wZG93biAmJiAoXG4gICAgICAgICAgPFNsYXNoQ29tbWFuZERyb3Bkb3duXG4gICAgICAgICAgICBjb21tYW5kcz17c2xhc2hDb21tYW5kc31cbiAgICAgICAgICAgIHF1ZXJ5PXtzbGFzaFF1ZXJ5fVxuICAgICAgICAgICAgb25TZWxlY3Q9e2hhbmRsZVNlbGVjdFNsYXNoQ29tbWFuZH1cbiAgICAgICAgICAgIG9uQ2xvc2U9e2hhbmRsZUNsb3NlU2xhc2hEcm9wZG93bn1cbiAgICAgICAgICAvPlxuICAgICAgICApfVxuICAgICAgICB7ISFhdHRhY2htZW50cy5sZW5ndGggJiYgKFxuICAgICAgICAgIDxkaXYgc3R5bGU9e3sgZGlzcGxheTogJ2ZsZXgnLCBnYXA6ICcxMnB4JywgYWxpZ25JdGVtczogJ2NlbnRlcicgfX0+XG4gICAgICAgICAgICB7YXR0YWNobWVudHMubWFwKChhdHRhY2htZW50LCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBmaWxlTmFtZVBhcnRzID0gYXR0YWNobWVudC5uYW1lLnNwbGl0KCcuJylcbiAgICAgICAgICAgICAgY29uc3QgZmlsZUV4dGVuc2lvbiA9IGZpbGVOYW1lUGFydHMubGVuZ3RoID4gMSA/IGAuJHtmaWxlTmFtZVBhcnRzLnBvcCgpPy50b0xvd2VyQ2FzZSgpfWAgOiAnJ1xuICAgICAgICAgICAgICBjb25zdCBpc0ltYWdlQnlFeHRlbnNpb24gPSBbJy5wbmcnLCAnLmpwZycsICcuanBlZyddLmluY2x1ZGVzKGZpbGVFeHRlbnNpb24pXG4gICAgICAgICAgICAgIGNvbnN0IGlzSW1hZ2VCeU1pbWUgPSBhdHRhY2htZW50LnR5cGU/LnN0YXJ0c1dpdGgoJ2ltYWdlLycpXG4gICAgICAgICAgICAgIGNvbnN0IGlzSW1hZ2UgPSBpc0ltYWdlQnlNaW1lICYmIGlzSW1hZ2VCeUV4dGVuc2lvblxuICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgIDxUb29sdGlwIHRpdGxlPXthdHRhY2htZW50Lm5hbWV9IGtleT17YCR7aW5kZXh9LSR7YXR0YWNobWVudC5uYW1lfWB9IHpJbmRleD17dG9vbHRpcFpJbmRleH0+XG4gICAgICAgICAgICAgICAgICA8U0NNSUF0dGFjaG1lbnQgaXNJbWFnZT17aXNJbWFnZX0+XG4gICAgICAgICAgICAgICAgICAgIHthdHRhY2htZW50Lmljb259XG4gICAgICAgICAgICAgICAgICAgIDxTQ01JQXR0YWNobWVudERlbGV0ZUljb24gb25DbGljaz17KCkgPT4gaGFuZGxlRGVsZXRlQXR0YWNobWVudChhdHRhY2htZW50LmlkKX0+XG4gICAgICAgICAgICAgICAgICAgICAgPFRyYXNoIGNvbG9yPVwicmdiYSgxOTEsIDE5MSwgMTkxLCAxKVwiIHdpZHRoPXsxOH0gaGVpZ2h0PXsxOH0gLz5cbiAgICAgICAgICAgICAgICAgICAgPC9TQ01JQXR0YWNobWVudERlbGV0ZUljb24+XG4gICAgICAgICAgICAgICAgICA8L1NDTUlBdHRhY2htZW50PlxuICAgICAgICAgICAgICAgIDwvVG9vbHRpcD5cbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfSl9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICl9XG4gICAgICAgIDxTdHlsZWRNQUlBTWFpblRvb2xiYXJHcmlkICRjb21wYWN0Um93PXtjb21wYWN0U2luZ2xlUm93VG9vbGJhcn0+XG4gICAgICAgICAgPFN0eWxlZE1BSUFQbHVzVG9vbGJhckNlbGwgJGNvbXBhY3RSb3c9e2NvbXBhY3RTaW5nbGVSb3dUb29sYmFyfT5cbiAgICAgICAgICAgIDxQbHVzTWVudVRvb2xzUm93PlxuICAgICAgICAgICAgICA8UGx1c1RvZ2dsZUJ1dHRvblxuICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICRtZW51T3Blbj17cGx1c01lbnVPcGVufVxuICAgICAgICAgICAgICAgIG9uQ2xpY2s9e2hhbmRsZVBsdXNCdXR0b25DbGlja31cbiAgICAgICAgICAgICAgICBhcmlhLWxhYmVsPXt0KCdjaGF0Lm9wZW5QbHVzTWVudUFyaWEnKX1cbiAgICAgICAgICAgICAgICBhcmlhLWhhc3BvcHVwPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgYXJpYS1leHBhbmRlZD17cGx1c01lbnVPcGVufVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPFBsdXMgY29sb3I9e3BsdXNJY29uQ29sb3J9IHdpZHRoPXsyMH0gaGVpZ2h0PXsyMH0gLz5cbiAgICAgICAgICAgICAgPC9QbHVzVG9nZ2xlQnV0dG9uPlxuICAgICAgICAgICAgICA8UG9wb3ZlclxuICAgICAgICAgICAgICAgIG9wZW49e3BsdXNNZW51T3Blbn1cbiAgICAgICAgICAgICAgICBhbmNob3JFbD17cGx1c01lbnVBbmNob3J9XG4gICAgICAgICAgICAgICAgb25DbG9zZT17Y2xvc2VQbHVzTWVudX1cbiAgICAgICAgICAgICAgICBhbmNob3JPcmlnaW49e3sgdmVydGljYWw6ICd0b3AnLCBob3Jpem9udGFsOiAnbGVmdCcgfX1cbiAgICAgICAgICAgICAgICB0cmFuc2Zvcm1PcmlnaW49e3sgdmVydGljYWw6ICdib3R0b20nLCBob3Jpem9udGFsOiAnbGVmdCcgfX1cbiAgICAgICAgICAgICAgICBzeD17eyB6SW5kZXg6IHBsdXNNZW51WkluZGV4IH19XG4gICAgICAgICAgICAgICAgc2xvdFByb3BzPXt7XG4gICAgICAgICAgICAgICAgICBwYXBlcjoge1xuICAgICAgICAgICAgICAgICAgICBlbGV2YXRpb246IDAsXG4gICAgICAgICAgICAgICAgICAgIHN4OiB7XG4gICAgICAgICAgICAgICAgICAgICAgb3ZlcmZsb3c6ICd2aXNpYmxlJyxcbiAgICAgICAgICAgICAgICAgICAgICBib3JkZXJSYWRpdXM6ICc0cHgnLFxuICAgICAgICAgICAgICAgICAgICAgIGJveFNoYWRvdzogJ25vbmUnLFxuICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcjogJ3RyYW5zcGFyZW50JyxcbiAgICAgICAgICAgICAgICAgICAgICBtYXJnaW5Ub3A6ICctNHB4JyxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxQbHVzTWVudVBhcGVyPlxuICAgICAgICAgICAgICAgICAgPFBsdXNNZW51SW5uZXJDb2x1bW4+XG4gICAgICAgICAgICAgICAgICAgIDxQbHVzTWVudUl0ZW1CdXR0b24gdHlwZT1cImJ1dHRvblwiIG9uQ2xpY2s9e2hhbmRsZVBsdXNNZW51QXR0YWNofT5cbiAgICAgICAgICAgICAgICAgICAgICA8QXR0YWNoIGNvbG9yPXtwbHVzTWVudUljb25Db2xvcn0gd2lkdGg9ezIwfSBoZWlnaHQ9ezIwfSAvPlxuICAgICAgICAgICAgICAgICAgICAgIDxQbHVzTWVudUl0ZW1MYWJlbCAkc2VsZWN0ZWQ9e2ZhbHNlfT57dCgnY2hhdC5wbHVzTWVudUF0dGFjaCcpfTwvUGx1c01lbnVJdGVtTGFiZWw+XG4gICAgICAgICAgICAgICAgICAgIDwvUGx1c01lbnVJdGVtQnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8UGx1c01lbnVEaXZpZGVyIC8+XG4gICAgICAgICAgICAgICAgICAgIDxQbHVzTWVudUl0ZW1CdXR0b24gdHlwZT1cImJ1dHRvblwiIG9uQ2xpY2s9e2hhbmRsZVBsdXNNZW51V2ViU2VhcmNofT5cbiAgICAgICAgICAgICAgICAgICAgICA8R2xvYmVcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yPXtpc1dlYlNlYXJjaEFjdGl2ZSA/IHBsdXNNZW51U2VsZWN0ZWRDb2xvciA6IHBsdXNNZW51SWNvbkNvbG9yfVxuICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg9ezIwfVxuICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0PXsyMH1cbiAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgIDxQbHVzTWVudUl0ZW1MYWJlbCAkc2VsZWN0ZWQ9eyEhaXNXZWJTZWFyY2hBY3RpdmV9Pnt0KCdjaGF0LnNlYXJjaFdlYicpfTwvUGx1c01lbnVJdGVtTGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAge2lzV2ViU2VhcmNoQWN0aXZlID8gPENoZWNrIGNvbG9yPXtwbHVzTWVudVNlbGVjdGVkQ29sb3J9IHdpZHRoPXsxNn0gaGVpZ2h0PXsxNn0gLz4gOiBudWxsfVxuICAgICAgICAgICAgICAgICAgICA8L1BsdXNNZW51SXRlbUJ1dHRvbj5cbiAgICAgICAgICAgICAgICAgIDwvUGx1c01lbnVJbm5lckNvbHVtbj5cbiAgICAgICAgICAgICAgICAgIDxQbHVzTWVudUl0ZW1CdXR0b24gdHlwZT1cImJ1dHRvblwiIG9uQ2xpY2s9e2hhbmRsZVBsdXNNZW51RGVlcFNlYXJjaH0+XG4gICAgICAgICAgICAgICAgICAgIDxUZWxlc2NvcGVJY29uXG4gICAgICAgICAgICAgICAgICAgICAgY29sb3I9e2lzRGVlcFNlYXJjaEFjdGl2ZSA/IHBsdXNNZW51U2VsZWN0ZWRDb2xvciA6IHBsdXNNZW51SWNvbkNvbG9yfVxuICAgICAgICAgICAgICAgICAgICAgIHdpZHRoPXsyMH1cbiAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ9ezIwfVxuICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICA8UGx1c01lbnVJdGVtTGFiZWwgJHNlbGVjdGVkPXshIWlzRGVlcFNlYXJjaEFjdGl2ZX0+XG4gICAgICAgICAgICAgICAgICAgICAge3QoJ2NoYXQucGx1c01lbnVEZWVwSW52ZXN0aWdhdGlvbicpfVxuICAgICAgICAgICAgICAgICAgICA8L1BsdXNNZW51SXRlbUxhYmVsPlxuICAgICAgICAgICAgICAgICAgICB7aXNEZWVwU2VhcmNoQWN0aXZlID8gPENoZWNrIGNvbG9yPXtwbHVzTWVudVNlbGVjdGVkQ29sb3J9IHdpZHRoPXsxNn0gaGVpZ2h0PXsxNn0gLz4gOiBudWxsfVxuICAgICAgICAgICAgICAgICAgPC9QbHVzTWVudUl0ZW1CdXR0b24+XG4gICAgICAgICAgICAgICAgPC9QbHVzTWVudVBhcGVyPlxuICAgICAgICAgICAgICA8L1BvcG92ZXI+XG4gICAgICAgICAgICAgIHsoaXNXZWJTZWFyY2hBY3RpdmUgfHwgaXNEZWVwU2VhcmNoQWN0aXZlKSAmJiAoXG4gICAgICAgICAgICAgICAgPEFjdGl2ZVRvb2xDaGlwUm9vdFxuICAgICAgICAgICAgICAgICAgJGhvdmVyZWQ9e2FjdGl2ZVRvb2xDaGlwSG92ZXJlZH1cbiAgICAgICAgICAgICAgICAgICRleGl0aW5nPXt0b29sQ2hpcEV4aXRpbmd9XG4gICAgICAgICAgICAgICAgICBvbk1vdXNlRW50ZXI9eygpID0+IHNldEFjdGl2ZVRvb2xDaGlwSG92ZXJlZCh0cnVlKX1cbiAgICAgICAgICAgICAgICAgIG9uTW91c2VMZWF2ZT17KCkgPT4gc2V0QWN0aXZlVG9vbENoaXBIb3ZlcmVkKGZhbHNlKX1cbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8QWN0aXZlVG9vbENoaXBJY29uQnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAkY2xvc2VTaG93bj17YWN0aXZlVG9vbENoaXBIb3ZlcmVkfVxuICAgICAgICAgICAgICAgICAgICBhcmlhLWxhYmVsPXt0KCdjaGF0LnJlbW92ZUFjdGl2ZVRvb2xBcmlhJyl9XG4gICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9e2UgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKClcbiAgICAgICAgICAgICAgICAgICAgICBiZWdpblRvb2xDaGlwRXhpdCgpXG4gICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIHthY3RpdmVUb29sQ2hpcExlYWRpbmdJY29ufVxuICAgICAgICAgICAgICAgICAgPC9BY3RpdmVUb29sQ2hpcEljb25CdXR0b24+XG4gICAgICAgICAgICAgICAgICA8QWN0aXZlVG9vbENoaXBMYWJlbD5cbiAgICAgICAgICAgICAgICAgICAge2lzV2ViU2VhcmNoQWN0aXZlID8gdCgnY2hhdC5zZWFyY2hXZWInKSA6IHQoJ2NoYXQucGx1c01lbnVEZWVwSW52ZXN0aWdhdGlvbicpfVxuICAgICAgICAgICAgICAgICAgPC9BY3RpdmVUb29sQ2hpcExhYmVsPlxuICAgICAgICAgICAgICAgIDwvQWN0aXZlVG9vbENoaXBSb290PlxuICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgPC9QbHVzTWVudVRvb2xzUm93PlxuICAgICAgICAgIDwvU3R5bGVkTUFJQVBsdXNUb29sYmFyQ2VsbD5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBzdHlsZT17XG4gICAgICAgICAgICAgIGNvbXBhY3RTaW5nbGVSb3dUb29sYmFyXG4gICAgICAgICAgICAgICAgPyB7IGdyaWRDb2x1bW46IDIsIGdyaWRSb3c6IDEsIG1pbldpZHRoOiAwLCBhbGlnblNlbGY6ICdjZW50ZXInIH1cbiAgICAgICAgICAgICAgICA6IHsgZ3JpZENvbHVtbjogJzEgLyAtMScsIGdyaWRSb3c6IDEsIG1pbldpZHRoOiAwIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICA+XG4gICAgICAgICAgICA8Q29udGV4dE1lbnRpb25FZGl0b3JcbiAgICAgICAgICAgICAgcmVmPXtlZGl0b3JSZWZ9XG4gICAgICAgICAgICAgIGRpc2FibGVkPXtkaXNhYmxlZH1cbiAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9e3BsYWNlaG9sZGVyfVxuICAgICAgICAgICAgICBvbklucHV0PXtoYW5kbGVFZGl0b3JJbnB1dH1cbiAgICAgICAgICAgICAgb25LZXlEb3duPXtoYW5kbGVLZXlEb3dufVxuICAgICAgICAgICAgICBvbkZvY3VzPXtoYW5kbGVXcmFwcGVyRm9jdXN9XG4gICAgICAgICAgICAgIG9uQmx1cj17aGFuZGxlV3JhcHBlckJsdXJ9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxTdHlsZWRNQUlBU2VuZFRvb2xiYXJDZWxsICRjb21wYWN0Um93PXtjb21wYWN0U2luZ2xlUm93VG9vbGJhcn0+XG4gICAgICAgICAgICB7aXNXcml0aW5nID8gKFxuICAgICAgICAgICAgICA8VG9vbHRpcCB0aXRsZT17dCgnY2hhdC5zdG9wJyl9IHpJbmRleD17dG9vbHRpcFpJbmRleH0+XG4gICAgICAgICAgICAgICAgPFN0eWxlZE1BSUFTdG9wQnV0dG9uIGRpc2FibGVkPXtmYWxzZX0gb25DbGljaz17aGFuZGxlU3RvcEdlbmVyYXRpb259IGNsYXNzTmFtZT17Y2xhc3NOYW1lfT5cbiAgICAgICAgICAgICAgICAgIDxTdHlsZWRNQUlBU3RvcEljb24gLz5cbiAgICAgICAgICAgICAgICA8L1N0eWxlZE1BSUFTdG9wQnV0dG9uPlxuICAgICAgICAgICAgICA8L1Rvb2x0aXA+XG4gICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICA8VG9vbHRpcCB0aXRsZT17dCgnY2hhdC5zZW5kJyl9IHpJbmRleD17dG9vbHRpcFpJbmRleH0+XG4gICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9e3sgZGlzcGxheTogJ2lubGluZS1mbGV4JywgYWxpZ25JdGVtczogJ2NlbnRlcicgfX0+XG4gICAgICAgICAgICAgICAgICA8U3R5bGVkTUFJQVNlbmRCdXR0b25cbiAgICAgICAgICAgICAgICAgICAgb25DbGljaz17aGFuZGxlU2VuZE1lc3NhZ2V9XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17Y2xhc3NOYW1lfVxuICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZD17c2VuZERpc2FibGVkIHx8IGRpc2FibGVkfVxuICAgICAgICAgICAgICAgICAgICBoYXNWYWx1ZXM9e2hhc1R5cGluZ1ByZXNlbmNlIHx8IGF0dGFjaG1lbnRzLmxlbmd0aCA+IDB9XG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxQYXBlclBsYW5lIGNvbG9yPVwiI0JGQkZCRlwiIHdpZHRoPXsxOH0gaGVpZ2h0PXsxOH0gLz5cbiAgICAgICAgICAgICAgICAgIDwvU3R5bGVkTUFJQVNlbmRCdXR0b24+XG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICA8L1Rvb2x0aXA+XG4gICAgICAgICAgICApfVxuICAgICAgICAgIDwvU3R5bGVkTUFJQVNlbmRUb29sYmFyQ2VsbD5cbiAgICAgICAgPC9TdHlsZWRNQUlBTWFpblRvb2xiYXJHcmlkPlxuICAgICAgICA8aW5wdXRcbiAgICAgICAgICByZWY9e2ZpbGVJbnB1dFJlZn1cbiAgICAgICAgICB0eXBlPVwiZmlsZVwiXG4gICAgICAgICAgbXVsdGlwbGVcbiAgICAgICAgICBhY2NlcHQ9XCIudHh0LC5tZCwuY3N2LC5kb2MsLmRvY3gsLnBuZywuanBnLC5qcGVnLC5wZGYsLnhsc3gsLnhscywuZmxhYywubTRhLC5tcDMsLm1wNCwub2dhLC5vZ2csLndhdiwud2VibVwiXG4gICAgICAgICAgb25DaGFuZ2U9e2hhbmRsZUZpbGVTZWxlY3R9XG4gICAgICAgICAgc3R5bGU9e3sgZGlzcGxheTogJ25vbmUnIH19XG4gICAgICAgIC8+XG4gICAgICA8L1N0eWxlZE1BSUFJbnB1dFdyYXBwZXI+XG4gICAgICB7bW9kYWxQcm9wcy5pc09wZW4gJiYgKFxuICAgICAgICA8TW9kYWxGaWxlRXhjZWVkc1xuICAgICAgICAgIG9uQ2xvc2U9eygpID0+IHNldE1vZGFsUHJvcHMoeyBpc09wZW46IGZhbHNlLCBleGNsdWRlZEZpbGVzOiBbXSwgZXhjZWVkZWRGaWxlczogW10sIGZpbGVTaXplczoge30gfSl9XG4gICAgICAgICAgZXhjbHVkZWRGaWxlcz17bW9kYWxQcm9wcy5leGNsdWRlZEZpbGVzfVxuICAgICAgICAgIGV4Y2VlZGVkRmlsZXM9e21vZGFsUHJvcHMuZXhjZWVkZWRGaWxlc31cbiAgICAgICAgICBmaWxlU2l6ZXM9e21vZGFsUHJvcHMuZmlsZVNpemVzfVxuICAgICAgICAvPlxuICAgICAgKX1cbiAgICAgIHtwb3BvdmVyTm9kZSAmJiBjcmVhdGVQb3J0YWwocG9wb3Zlck5vZGUsIGRvY3VtZW50LmJvZHkpfVxuICAgIDwvPlxuICApXG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQU1FQSxXQUFXLEVBQ1hDLFNBQVMsRUFDVEMsT0FBTyxFQUNQQyxNQUFNLEVBQ05DLFFBQVEsUUFDSCxPQUFPO0FBQ2QsU0FBU0MsWUFBWSxRQUFRLFdBQVc7QUFDeEMsU0FBU0MsT0FBTyxRQUFRLGVBQWU7QUFDdkMsU0FBU0MsVUFBVSxRQUFRLDZDQUE2QztBQUN4RSxTQUFTQyxNQUFNLFFBQVEseUNBQXlDO0FBQ2hFLFNBQVNDLEtBQUssUUFBUSx3Q0FBd0M7QUFDOUQsU0FBU0MsS0FBSyxRQUFRLHdDQUF3QztBQUM5RCxTQUFTQyxJQUFJLFFBQVEsdUNBQXVDO0FBQzVELFNBQVNDLEtBQUssUUFBUSx3Q0FBd0M7QUFDOUQsU0FBU0MsS0FBSyxRQUFRLHdDQUF3QztBQUM5RCxTQUFTQyxPQUFPLFFBQVEsOENBQThDO0FBQ3RFLE9BQU9DLE1BQU0s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
938
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1c2VDYWxsYmFjayIsInVzZUVmZmVjdCIsInVzZUxheW91dEVmZmVjdCIsInVzZU1lbW8iLCJ1c2VSZWYiLCJ1c2VTdGF0ZSIsImNyZWF0ZVBvcnRhbCIsIlBvcG92ZXIiLCJDaGVjayIsIkNyb3NzIiwiVG9vbHRpcCIsIkFjdGl2ZVRvb2xDaGlwSWNvbkJ1dHRvbiIsIkFjdGl2ZVRvb2xDaGlwTGFiZWwiLCJBY3RpdmVUb29sQ2hpcFJvb3QiLCJQbHVzTWVudURpdmlkZXIiLCJQbHVzTWVudUlubmVyQ29sdW1uIiwiUGx1c01lbnVJdGVtQnV0dG9uIiwiUGx1c01lbnVJdGVtTGFiZWwiLCJQbHVzTWVudVBhcGVyIiwiUGx1c01lbnVUb29sc1JvdyIsIlBsdXNUb2dnbGVCdXR0b24iLCJTQ0lucHV0Q2hpcHNSb3ciLCJTQ0lucHV0TWV0YUljb25CdXR0b24iLCJTQ0lucHV0TWV0YUluZGljYXRvcnMiLCJTQ01JQXR0YWNobWVudCIsIlNDTUlBdHRhY2htZW50RGVsZXRlSWNvbiIsIlNDTUlBdHRhY2htZW50RGVsZXRlT3ZlcmxheSIsIlNDTUlBdHRhY2htZW50SWNvbiIsIlNDTUlBdHRhY2htZW50TmFtZSIsIlN0eWxlZE1BSUFJbnB1dFdyYXBwZXIiLCJTdHlsZWRNQUlBU2VuZEJ1dHRvbiIsIlN0eWxlZE1BSUFNYWluVG9vbGJhckdyaWQiLCJTQ0lucHV0RWRpdG9yQ2VsbCIsIlNDSW5wdXRUb29sYmFyUm93IiwiU3R5bGVkTUFJQVBsdXNUb29sYmFyQ2VsbCIsIlN0eWxlZE1BSUFTZW5kVG9vbGJhckNlbGwiLCJTdHlsZWRNQUlBU3RvcEJ1dHRvbiIsIlN0eWxlZE1BSUFTdG9wSWNvbiIsImdldE1haWFJbnB1dEVkaXRvck1heEhlaWdodCIsIk1BSUFfSU5QVVRfVE9PTEJBUl9ST1dfSEVJR0hUX1BYIiwidXNlR2xvYmFsQ29udGV4dCIsIk1vZGFsRmlsZUV4Y2VlZHMiLCJTbGFzaENvbW1hbmREcm9wZG93biIsInVzZVNsYXNoQ29tbWFuZHMiLCJyZXNvbHZlUXVpY2tBY3Rpb25UeXBlIiwidXNlVCIsIk1haWFJbnB1dEFkZEljb24iLCJNYWlhSW5wdXRBdHRhY2hJY29uIiwiTWFpYUlucHV0QXR0YWNobWVudEltYWdlSWNvbiIsIk1haWFJbnB1dERlZXBTZWFyY2hJY29uIiwiQ29yQWNjZXNzSWNvbiIsIk1haWFJbnB1dE1lbnRpb25JY29uIiwiTWFpYUlucHV0Um9ib3RJY29uIiwiTWFpYUlucHV0U2VuZEljb24iLCJNYWlhSW5wdXRTbGFzaEljb24iLCJNYWlhSW5wdXRXZWJTZWFyY2hJY29uIiwiRVZFTlRTIiwidXNlRXZlbnQiLCJnZXRDaGF0VG9vbHNNZW51QWdlbnRUeXBlIiwiTUFJQV9DSEFUX0lOUFVUX1VJIiwiYWxsb3dlZEZpbGVUeXBlcyIsImZpbGVUeXBlcyIsIk1BWF9GSUxFX1NJWkVfTUJfTUFJQV9WSVNJT04iLCJNQVhfRklMRV9TSVpFX01CX09MRCIsIk1BWF9GSUxFX1NJWkVfTUJfQVVESU8iLCJNQVhfQ0hBVF9JTlBVVF9BVFRBQ0hNRU5UUyIsIkFQUENVRVNfRVZFTlRTIiwidHJhY2tBcHBjdWVzRXZlbnQiLCJDaGlwIiwiQ29udGV4dE1lbnRpb25FZGl0b3IiLCJ1c2VNYWlhVGFza1BhbmVsWkluZGV4IiwidXNlTWVudGlvblBvcG92ZXIiLCJqc3giLCJfanN4IiwianN4cyIsIl9qc3hzIiwiRnJhZ21lbnQiLCJfRnJhZ21lbnQiLCJUT09MX0NISVBfRVhJVF9NUyIsIk1BSUFJbnB1dCIsIl9yZWYiLCJfYWdlbnQkZW50aXR5IiwiX2NvbnRleHRDaGlwJGl0ZW1zIiwiX2NvbnRleHRDaGlwJGl0ZW1zMiIsIl9hZ2VudCRjb25uZWN0b3JzIiwiX2FnZW50JG1vZGVsX2Rpc3BsYXlfIiwiX2NvbnRleHRDaGlwJGl0ZW1zMyIsIm9uU2VuZE1lc3NhZ2UiLCJjbGFzc05hbWUiLCJkaXNhYmxlZCIsImlzU3RyZWFtaW5nIiwiaXNXcml0aW5nIiwib25TdG9wR2VuZXJhdGlvbiIsInBsYWNlaG9sZGVyIiwib25DaGFuZ2UiLCJfcmVmJGFsaWduQnV0dG9ucyIsImFsaWduQnV0dG9ucyIsIm9uRmlsZUF0dGFjaCIsIm9uRGVsZXRlQXR0YWNobWVudCIsIl9yZWYkYXR0YWNobWVudHMiLCJhdHRhY2htZW50cyIsImNoYXRJZCIsIm5ld0NoYXRLZXkiLCJ0b29sdGlwWkluZGV4IiwiZXh0ZXJuYWxQb3BvdmVyQW5jaG9yUmVmIiwicG9wb3ZlckFuY2hvclJlZiIsImxheW91dE1vZGUiLCJjb250ZXh0Q2hpcCIsIl91c2VUIiwidCIsImVkaXRvclJlZiIsImZpbGVJbnB1dFJlZiIsImNoaXBzUm93UmVmIiwidG9vbGJhclJvd1JlZiIsImludGVybmFsV3JhcHBlclJlZiIsIndyYXBwZXJSZWYiLCJfdXNlU3RhdGUiLCJfdXNlU3RhdGUyIiwiX3NsaWNlZFRvQXJyYXkiLCJoYXNUeXBpbmdQcmVzZW5jZSIsInNldEhhc1R5cGluZ1ByZXNlbmNlIiwiX3VzZVN0YXRlMyIsIl91c2VTdGF0ZTQiLCJjaGlwc1Jvd0hlaWdodCIsInNldENoaXBzUm93SGVpZ2h0IiwiX3VzZVN0YXRlNSIsIl91c2VTdGF0ZTYiLCJ0b29sYmFyUm93SGVpZ2h0Iiwic2V0VG9vbGJhclJvd0hlaWdodCIsIl91c2VTdGF0ZTciLCJpc09wZW4iLCJleGNsdWRlZEZpbGVzIiwiZXhjZWVkZWRGaWxlcyIsImZpbGVTaXplcyIsIl91c2VTdGF0ZTgiLCJtb2RhbFByb3BzIiwic2V0TW9kYWxQcm9wcyIsImV2ZW50QW1wbGl0dWRlIiwiX3VzZUdsb2JhbENvbnRleHQiLCJ0b2dnbGVXZWJTZWFyY2giLCJpc1dlYlNlYXJjaEFjdGl2ZSIsInRvZ2dsZURlZXBTZWFyY2giLCJpc0RlZXBTZWFyY2hBY3RpdmUiLCJhZ2VudCIsImluaXRpYWxEcmFmdCIsImRlZXBMaW5rU2VuZFBlbmRpbmdSZWYiLCJwbHVzTWVudVpJbmRleCIsImluaXRpYWxEcmFmdEFwcGxpZWRSZWYiLCJfdXNlTWVudGlvblBvcG92ZXIiLCJwb3BvdmVyT3BlbiIsInJlc2V0TWVudGlvbk9wZW5UcmFja2luZyIsImhhbmRsZVRyaWdnZXIiLCJoYW5kbGVQb3BvdmVyS2V5RG93biIsImhhbmRsZUtleURvd24iLCJwb3BvdmVyTm9kZSIsIl91c2VTdGF0ZTkiLCJfdXNlU3RhdGUwIiwicGx1c01lbnVBbmNob3IiLCJzZXRQbHVzTWVudUFuY2hvciIsIl91c2VTdGF0ZTEiLCJfdXNlU3RhdGUxMCIsImFjdGl2ZVRvb2xDaGlwSG92ZXJlZCIsInNldEFjdGl2ZVRvb2xDaGlwSG92ZXJlZCIsIl91c2VTdGF0ZTExIiwiX3VzZVN0YXRlMTIiLCJ0b29sQ2hpcEV4aXRpbmciLCJzZXRUb29sQ2hpcEV4aXRpbmciLCJ0b29sQ2hpcEV4aXRUaW1lclJlZiIsInNlYXJjaE1vZGVBY3RpdmVSZWYiLCJ3ZWIiLCJkZWVwIiwicGx1c01lbnVPcGVuIiwiQm9vbGVhbiIsInByZXZpb3VzQWdlbnRJZFJlZiIsInVuZGVmaW5lZCIsInByZXZpb3VzQ2hhdElkUmVmIiwicHJldmlvdXNOZXdDaGF0S2V5UmVmIiwicHJldmlvdXNMYXlvdXRNb2RlUmVmIiwiYW5hbHl0aWNzQWdlbnRUeXBlIiwiYW5hbHl0aWNzQ2xvbmVFbnRpdHlQYXlsb2FkIiwidHlwZSIsImVudGl0eSIsIl91c2VTbGFzaENvbW1hbmRzIiwiaWQiLCJzbGFzaENvbW1hbmRzIiwiY29tbWFuZHMiLCJfdXNlU3RhdGUxMyIsIl91c2VTdGF0ZTE0Iiwic2hvd1NsYXNoRHJvcGRvd24iLCJzZXRTaG93U2xhc2hEcm9wZG93biIsIl91c2VTdGF0ZTE1IiwiX3VzZVN0YXRlMTYiLCJzbGFzaFF1ZXJ5Iiwic2V0U2xhc2hRdWVyeSIsInNsYXNoTWVudVdhc09wZW5SZWYiLCJzY2hlZHVsZUlucHV0Rm9jdXNBZnRlclRvb2xBY3Rpb24iLCJyZXF1ZXN0QW5pbWF0aW9uRnJhbWUiLCJ3aW5kb3ciLCJzZXRUaW1lb3V0IiwiX2VkaXRvclJlZiRjdXJyZW50IiwiY3VycmVudCIsImZvY3VzIiwiY2xvc2VQbHVzTWVudSIsImNhbmNlbFBlbmRpbmdUb29sQ2hpcEV4aXQiLCJjbGVhclRpbWVvdXQiLCJoYW5kbGVQbHVzQnV0dG9uTW91c2VEb3duIiwiZSIsInByZXZlbnREZWZhdWx0IiwiaGFuZGxlUGx1c0J1dHRvbkNsaWNrIiwic3RvcFByb3BhZ2F0aW9uIiwiY3VycmVudFRhcmdldCIsImFpQ2hhdFBsdXNPcGVuIiwiX29iamVjdFNwcmVhZCIsImFnZW50X3R5cGUiLCJoYW5kbGVNZW50aW9uQnV0dG9uQ2xpY2siLCJfZWRpdG9yUmVmJGN1cnJlbnQyIiwiaW5zZXJ0TWVudGlvblRyaWdnZXIiLCJoYW5kbGVQbHVzTWVudUF0dGFjaCIsIl9maWxlSW5wdXRSZWYkY3VycmVudCIsImFpQ2hhdFRvb2xzIiwib3B0aW9uIiwibGVuZ3RoIiwiY2xpY2siLCJiZWdpblRvb2xDaGlwRXhpdCIsIndhc1dlYiIsIndhc0RlZXAiLCJfc2VhcmNoTW9kZUFjdGl2ZVJlZiQiLCJoYW5kbGVQbHVzTWVudVdlYlNlYXJjaCIsImhhbmRsZVBsdXNNZW51RGVlcFNlYXJjaCIsImhhbmRsZVBsdXNNZW51UXVpY2tBY3Rpb25zIiwiX2VkaXRvclJlZiRjdXJyZW50MyIsImluc2VydFNsYXNoVHJpZ2dlciIsIl9lZGl0b3JSZWYkY3VycmVudDQiLCJfZWRpdG9yUmVmJGN1cnJlbnQ1IiwiZHJhZnQiLCJ0cmltIiwic2V0UGxhaW5UZXh0IiwiX2VkaXRvclJlZiRjdXJyZW50NiIsInNlbmREaXNhYmxlZCIsImFnZW50Q2hhbmdlZCIsInByZXZpb3VzQ2hhdElkIiwiY3VycmVudENoYXRJZCIsImNoYXRDaGFuZ2VkIiwiY2hhbmdlZEZyb21OZXdDaGF0VG9PbGRDaGF0IiwibmV3Q2hhdFN0YXJ0ZWQiLCJpc0luaXRpYWxNb3VudCIsImRlbGF5IiwiX2VkaXRvclJlZiRjdXJyZW50NyIsInByZXZpb3VzTGF5b3V0TW9kZSIsInRpbWVvdXRJZCIsIl9lZGl0b3JSZWYkY3VycmVudDgiLCJpc1NwZWNpYWxpc3RBZ2VudCIsIm9ic2VydmVyIiwiSW50ZXJzZWN0aW9uT2JzZXJ2ZXIiLCJfcmVmMiIsIl9yZWYzIiwiZW50cnkiLCJpc0ludGVyc2VjdGluZyIsIm1haWFDb250ZXh0TWVudGlvbkluaXQiLCJkaXNjb25uZWN0IiwidGhyZXNob2xkIiwib2JzZXJ2ZSIsImhhbmRsZVNlc3Npb25DaGFuZ2UiLCJfZWRpdG9yUmVmJGN1cnJlbnQ5IiwiY2xlYXIiLCJkb2N1bWVudCIsImFkZEV2ZW50TGlzdGVuZXIiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwiaGFuZGxlUmVmb2N1cyIsIl9lZGl0b3JSZWYkY3VycmVudDAiLCJoYW5kbGVTZW5kTWVzc2FnZSIsIl9lZGl0b3JSZWYkY3VycmVudDEiLCJfc3RhdGUkdGV4dCIsIl9zdGF0ZSRtZW50aW9ucyIsIl9lZGl0b3JSZWYkY3VycmVudDEwIiwic3RhdGUiLCJzZXJpYWxpemUiLCJ0ZXh0IiwibWVudGlvbnMiLCJoYW5kbGVTZWxlY3RTbGFzaENvbW1hbmQiLCJjb21tYW5kIiwiX2VkaXRvclJlZiRjdXJyZW50MTEiLCJfc3RhdGUkdGV4dDIiLCJfZWRpdG9yUmVmJGN1cnJlbnQxMyIsImFpQ2hhdFF1aWNrQWN0aW9uU2VsZWN0IiwidHlwZV9xdWlja19hY3Rpb24iLCJvcmlnaW5fcXVpY2tfYWN0aW9uIiwidHJpZ2dlclBhcnQiLCJjb25jYXQiLCJiZWZvcmVUcmlnZ2VyIiwiZW5kc1dpdGgiLCJzbGljZSIsImlzRW1wdHlCZWZvcmVUcmlnZ2VyIiwiX2VkaXRvclJlZiRjdXJyZW50MTIiLCJ0aXRsZSIsImluc2VydFNsYXNoQ29tbWFuZCIsImxhYmVsIiwiaGFuZGxlQ2xvc2VTbGFzaERyb3Bkb3duIiwiaGFuZGxlRWRpdG9ySW5wdXQiLCJfcmVmNCIsInRyaWdnZXIiLCJzbGFzaFRyaWdnZXIiLCJhY3RpdmUiLCJhaUNoYXRRdWlja0FjdGlvbk9wZW4iLCJxdWVyeSIsImtleSIsInNoaWZ0S2V5IiwiaGFuZGxlRmlsZVNlbGVjdCIsImZpbGVzIiwidGFyZ2V0IiwiZmlsZXNJbnNlcnRlZCIsImlzTmV3Rm9ybWF0IiwiZXh0ZW5zaW9uIiwiaW5jbHVkZXMiLCJpc09sZEZvcm1hdCIsImlzQXVkaW9Gb3JtYXQiLCJBcnJheSIsImZyb20iLCJmb3JFYWNoIiwiZmlsZSIsIl9maWxlTmFtZVBhcnRzJHBvcCIsImV4Y2x1ZGVkRmlsZSIsImZpbGVOYW1lUGFydHMiLCJuYW1lIiwic3BsaXQiLCJmaWxlRXh0ZW5zaW9uIiwicG9wIiwidG9Mb3dlckNhc2UiLCJzaXplIiwicHVzaCIsInR5cGVGaWxlIiwicGFyc2VkRmlsZSIsIkZpbGUiLCJ2YWx1ZSIsImhhbmRsZURlbGV0ZUF0dGFjaG1lbnQiLCJmaWxlSWQiLCJoYW5kbGVTdG9wR2VuZXJhdGlvbiIsImFpQ2hhdFN0b3BSZXNwb25zZSIsInNob3dDaGlwc1JvdyIsIml0ZW1zIiwiY2hpcHNFbCIsInRvb2xiYXJFbCIsInVwZGF0ZUhlaWdodHMiLCJuZXh0Q2hpcHMiLCJNYXRoIiwiY2VpbCIsImdldEJvdW5kaW5nQ2xpZW50UmVjdCIsImhlaWdodCIsIm5leHRUb29sYmFyIiwicHJldiIsIlJlc2l6ZU9ic2VydmVyIiwiZWRpdG9yTWF4SGVpZ2h0IiwiY2hpcHNSb3dIZWlnaHRQeCIsInRvb2xiYXJSb3dIZWlnaHRQeCIsInRvb2xiYXJJY29uQ29sb3IiLCJwbHVzTWVudUljb25Db2xvciIsIm1lbnVJY29uIiwiaXNDdXN0b21BZ2VudCIsImhhc0NvckFjY2VzcyIsImNvbm5lY3RvcnMiLCJzb21lIiwiY29ubmVjdG9yIiwiZ3JvdXAiLCJzbHVncyIsInNsdWciLCJhZ2VudE1vZGVsTmFtZSIsIm1vZGVsX2Rpc3BsYXlfbmFtZSIsInNob3dDdXN0b21NZXRhSW5kaWNhdG9ycyIsInNob3dNZW50aW9uQnV0dG9uIiwiYWN0aXZlVG9vbENoaXBMZWFkaW5nSWNvbiIsImNvbG9yIiwiY2hpcENsb3NlSWNvbiIsIndpZHRoIiwiY2hpbGRyZW4iLCJyZWYiLCJoYXNBdHRhY2htZW50cyIsInN0eWxlIiwicG9zaXRpb24iLCJvblNlbGVjdCIsIm9uQ2xvc2UiLCJsZWFkaW5nSWNvbiIsIm1hcCIsImF0dGFjaG1lbnQiLCJpbmRleCIsIl9hdHRhY2htZW50JHR5cGUiLCJpc0ltYWdlIiwic3RhcnRzV2l0aCIsInRlc3QiLCJjaGlwSWNvbiIsInpJbmRleCIsImRlZmF1bHRWYWx1ZSIsIm9uQ2xpY2siLCJtYXhIZWlnaHQiLCJvbklucHV0Iiwib25LZXlEb3duIiwiJG1lbnVPcGVuIiwib25Nb3VzZURvd24iLCJvcGVuIiwiYW5jaG9yRWwiLCJkaXNhYmxlQXV0b0ZvY3VzIiwiZGlzYWJsZUVuZm9yY2VGb2N1cyIsImRpc2FibGVSZXN0b3JlRm9jdXMiLCJhbmNob3JPcmlnaW4iLCJ2ZXJ0aWNhbCIsImhvcml6b250YWwiLCJ0cmFuc2Zvcm1PcmlnaW4iLCJzeCIsInNsb3RQcm9wcyIsInBhcGVyIiwiZWxldmF0aW9uIiwib3ZlcmZsb3ciLCJib3JkZXJSYWRpdXMiLCJib3hTaGFkb3ciLCJiYWNrZ3JvdW5kQ29sb3IiLCJtYXJnaW5Ub3AiLCIkaG92ZXJlZCIsIiRleGl0aW5nIiwib25Nb3VzZUVudGVyIiwib25Nb3VzZUxlYXZlIiwiJGNsb3NlU2hvd24iLCJtb2RlbCIsImRpc3BsYXkiLCJhbGlnbkl0ZW1zIiwiaGFzVmFsdWVzIiwibXVsdGlwbGUiLCJhY2NlcHQiLCJib2R5Il0sInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvYXRvbXMvTUFJQUlucHV0L01BSUFJbnB1dC50c3giXSwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgbm8tcmVzdHJpY3RlZC1zeW50YXggKi9cbi8qIGVzbGludC1kaXNhYmxlIG5vLWNvbnRpbnVlICovXG4vKiBlc2xpbnQtZGlzYWJsZSBuby12b2lkICovXG4vKiBlc2xpbnQtZGlzYWJsZSByZWFjdC9uby1hcnJheS1pbmRleC1rZXkgKi9cbi8qIGVzbGludC1kaXNhYmxlIG5vLWxvbmVseS1pZiAqL1xuLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSAqL1xuLyogZXNsaW50LWRpc2FibGUgcHJlZmVyLWRlc3RydWN0dXJpbmcgKi9cbi8qIGVzbGludC1kaXNhYmxlIGpzeC1hMTF5L2NsaWNrLWV2ZW50cy1oYXZlLWtleS1ldmVudHMgKi9cbi8qIGVzbGludC1kaXNhYmxlIGpzeC1hMTF5L25vLXN0YXRpYy1lbGVtZW50LWludGVyYWN0aW9ucyAqL1xuaW1wb3J0IHtcbiAgQ2hhbmdlRXZlbnQsXG4gIEtleWJvYXJkRXZlbnQsXG4gIE1vdXNlRXZlbnQsXG4gIFJlYWN0Tm9kZSxcbiAgTXV0YWJsZVJlZk9iamVjdCxcbiAgdXNlQ2FsbGJhY2ssXG4gIHVzZUVmZmVjdCxcbiAgdXNlTGF5b3V0RWZmZWN0LFxuICB1c2VNZW1vLFxuICB1c2VSZWYsXG4gIHVzZVN0YXRlLFxufSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IGNyZWF0ZVBvcnRhbCB9IGZyb20gJ3JlYWN0LWRvbSdcbmltcG9ydCB7IFBvcG92ZXIgfSBmcm9tICdAbXVpL21hdGVyaWFsJ1xuaW1wb3J0IHsgQ2hlY2sgfSBmcm9tICdAcHJvamVjdGNvci9pY29ucy9saWIvY29tcG9uZW50cy9DaGVjaydcbmltcG9ydCB7IENyb3NzIH0gZnJvbSAnQHByb2plY3Rjb3IvaWNvbnMvbGliL2NvbXBvbmVudHMvQ3Jvc3MnXG5pbXBvcnQgeyBUb29sdGlwIH0gZnJvbSAnQHByb2plY3Rjb3IvdG9vbHRpcHYyL2xpYi9jb21wb25lbnRzL1Rvb2x0aXAnXG5cbmltcG9ydCB7XG4gIEFjdGl2ZVRvb2xDaGlwSWNvbkJ1dHRvbixcbiAgQWN0aXZlVG9vbENoaXBMYWJlbCxcbiAgQWN0aXZlVG9vbENoaXBSb290LFxuICBQbHVzTWVudURpdmlkZXIsXG4gIFBsdXNNZW51SW5uZXJDb2x1bW4sXG4gIFBsdXNNZW51SXRlbUJ1dHRvbixcbiAgUGx1c01lbnVJdGVtTGFiZWwsXG4gIFBsdXNNZW51UGFwZXIsXG4gIFBsdXNNZW51VG9vbHNSb3csXG4gIFBsdXNUb2dnbGVCdXR0b24sXG4gIFNDSW5wdXRDaGlwc1JvdyxcbiAgU0NJbnB1dE1ldGFJY29uQnV0dG9uLFxuICBTQ0lucHV0TWV0YUluZGljYXRvcnMsXG4gIFNDTUlBdHRhY2htZW50LFxuICBTQ01JQXR0YWNobWVudERlbGV0ZUljb24sXG4gIFNDTUlBdHRhY2htZW50RGVsZXRlT3ZlcmxheSxcbiAgU0NNSUF0dGFjaG1lbnRJY29uLFxuICBTQ01JQXR0YWNobWVudE5hbWUsXG4gIFN0eWxlZE1BSUFJbnB1dFdyYXBwZXIsXG4gIFN0eWxlZE1BSUFTZW5kQnV0dG9uLFxuICBTdHlsZWRNQUlBTWFpblRvb2xiYXJHcmlkLFxuICBTQ0lucHV0RWRpdG9yQ2VsbCxcbiAgU0NJbnB1dFRvb2xiYXJSb3csXG4gIFN0eWxlZE1BSUFQbHVzVG9vbGJhckNlbGwsXG4gIFN0eWxlZE1BSUFTZW5kVG9vbGJhckNlbGwsXG4gIFN0eWxlZE1BSUFTdG9wQnV0dG9uLFxuICBTdHlsZWRNQUlBU3RvcEljb24sXG59IGZyb20gJy4vc3R5bGVzJ1xuaW1wb3J0IHsgZ2V0TWFpYUlucHV0RWRpdG9yTWF4SGVpZ2h0LCBNQUlBX0lOUFVUX1RPT0xCQVJfUk9XX0hFSUdIVF9QWCB9IGZyb20gJy4vbWFpYUlucHV0TGF5b3V0J1xuaW1wb3J0IHsgdXNlR2xvYmFsQ29udGV4dCB9IGZyb20gJy4uLy4uLy4uL2NvbnRleHQvZ2xvYmFsLWNvbnRleHQnXG5pbXBvcnQgeyBNb2RhbEZpbGVFeGNlZWRzIH0gZnJvbSAnLi4vLi4vb3JnYW5pc21zL01vZGFsRmlsZUV4Y2VlZHMnXG5pbXBvcnQgeyBTbGFzaENvbW1hbmREcm9wZG93biB9IGZyb20gJy4uL1NsYXNoQ29tbWFuZERyb3Bkb3duJ1xuaW1wb3J0IHsgdXNlU2xhc2hDb21tYW5kcyB9IGZyb20gJy4uLy4uLy4uL2hvb2tzL3VzZVNsYXNoQ29tbWFuZHMnXG5pbXBvcnQgeyByZXNvbHZlUXVpY2tBY3Rpb25UeXBlIH0gZnJvbSAnLi4vLi4vLi4vdXRpbHMvaG91cnNQbGFubmVyUXVpY2tBY3Rpb25UeXBlJ1xuaW1wb3J0IHR5cGUgeyBBY3Rpb24gfSBmcm9tICcuLi8uLi8uLi90eXBlcy9BY3Rpb24nXG5pbXBvcnQgeyB1c2VUIH0gZnJvbSAnLi4vLi4vLi4vaG9va3MvdXNlVCdcbmltcG9ydCB7IE1haWFJbnB1dEFkZEljb24gfSBmcm9tICcuLi9pY29ucy9NYWlhSW5wdXRBZGRJY29uJ1xuaW1wb3J0IHsgTWFpYUlucHV0QXR0YWNoSWNvbiB9IGZyb20gJy4uL2ljb25zL01haWFJbnB1dEF0dGFjaEljb24nXG5pbXBvcnQgeyBNYWlhSW5wdXRBdHRhY2htZW50SW1hZ2VJY29uIH0gZnJvbSAnLi4vaWNvbnMvTWFpYUlucHV0QXR0YWNobWVudEltYWdlSWNvbidcbmltcG9ydCB7IE1haWFJbnB1dERlZXBTZWFyY2hJY29uIH0gZnJvbSAnLi4vaWNvbnMvTWFpYUlucHV0RGVlcFNlYXJjaEljb24nXG5pbXBvcnQgeyBDb3JBY2Nlc3NJY29uIH0gZnJvbSAnLi4vaWNvbnMvQ29yQWNjZXNzSWNvbidcbmltcG9ydCB7IE1haWFJbnB1dE1lbnRpb25JY29uIH0gZnJvbSAnLi4vaWNvbnMvTWFpYUlucHV0TWVudGlvbkljb24nXG5pbXBvcnQgeyBNYWlhSW5wdXRSb2JvdEljb24gfSBmcm9tICcuLi9pY29ucy9NYWlhSW5wdXRSb2JvdEljb24nXG5pbXBvcnQgeyBNYWlhSW5wdXRTZW5kSWNvbiB9IGZyb20gJy4uL2ljb25zL01haWFJbnB1dFNlbmRJY29uJ1xuaW1wb3J0IHsgTWFpYUlucHV0U2xhc2hJY29uIH0gZnJvbSAnLi4vaWNvbnMvTWFpYUlucHV0U2xhc2hJY29uJ1xuaW1wb3J0IHsgTWFpYUlucHV0V2ViU2VhcmNoSWNvbiB9IGZyb20gJy4uL2ljb25zL01haWFJbnB1dFdlYlNlYXJjaEljb24nXG5pbXBvcnQgeyBFVkVOVFMsIHVzZUV2ZW50IH0gZnJvbSAnLi4vLi4vLi4vaG9va3MvdXNlRXZlbnQnXG5pbXBvcnQgeyBnZXRDaGF0VG9vbHNNZW51QWdlbnRUeXBlIH0gZnJvbSAnLi4vLi4vLi4vdXRpbHMvaGl0bEFuYWx5dGljcydcbmltcG9ydCB7IE1BSUFfQ0hBVF9JTlBVVF9VSSB9IGZyb20gJy4uLy4uLy4uL3N0eWxlcy9jb25maWcnXG5pbXBvcnQge1xuICBhbGxvd2VkRmlsZVR5cGVzLFxuICBmaWxlVHlwZXMsXG4gIE1BWF9GSUxFX1NJWkVfTUJfTUFJQV9WSVNJT04sXG4gIE1BWF9GSUxFX1NJWkVfTUJfT0xELFxuICBNQVhfRklMRV9TSVpFX01CX0FVRElPLFxuICBNQVhfQ0hBVF9JTlBVVF9BVFRBQ0hNRU5UUyxcbn0gZnJvbSAnLi4vLi4vLi4vY29uc3RhbnRzL2Zvcm1hdEV4dGVuc2lvbnMnXG5pbXBvcnQgeyBBUFBDVUVTX0VWRU5UUywgdHJhY2tBcHBjdWVzRXZlbnQgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9hcHBjdWVzJ1xuaW1wb3J0IHsgQ2hpcCB9IGZyb20gJy4uL0NoaXAnXG5pbXBvcnQgeyBDb250ZXh0TWVudGlvbkVkaXRvciwgQ29udGV4dE1lbnRpb25FZGl0b3JIYW5kbGUgfSBmcm9tICcuLi9Db250ZXh0TWVudGlvbkVkaXRvcidcbmltcG9ydCB7IHVzZU1haWFUYXNrUGFuZWxaSW5kZXggfSBmcm9tICcuLi8uLi8uLi9ob29rcy91c2VNYWlhVGFza1BhbmVsWkluZGV4J1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby1jeWNsZVxuaW1wb3J0IHsgdXNlTWVudGlvblBvcG92ZXIgfSBmcm9tICcuLi8uLi8uLi9ob29rcy91c2VNZW50aW9uUG9wb3ZlcidcbmltcG9ydCB7IENvbnRleHRFbnRpdHlUeXBlLCBDb250ZXh0TWVudGlvbiB9IGZyb20gJy4uLy4uLy4uL3R5cGVzL2NvbnRleHRNZW50aW9uJ1xuXG5jb25zdCBUT09MX0NISVBfRVhJVF9NUyA9IDIyMFxuXG50eXBlIEF0dGFjaG1lbnRGaWxlID0ge1xuICBmaWxlOiBGaWxlXG4gIG9yaWdpbmFsRmlsZT86IEZpbGVcbiAgaWQ6IHN0cmluZ1xuICBuYW1lOiBzdHJpbmdcbiAgc2l6ZTogbnVtYmVyXG4gIHR5cGU6IHN0cmluZ1xuICBpY29uPzogUmVhY3ROb2RlXG59XG5cbnR5cGUgTUFJQUlucHV0UHJvcHMgPSB7XG4gIGNsYXNzTmFtZT86IHN0cmluZ1xuICBkaXNhYmxlZD86IGJvb2xlYW5cbiAgb25TZW5kTWVzc2FnZTogKFxuICAgIG1lc3NhZ2U6IHN0cmluZyxcbiAgICBhdHRhY2htZW50cz86IEF0dGFjaG1lbnRGaWxlW10sXG4gICAgbWVudGlvbnM/OiBDb250ZXh0TWVudGlvbltdLFxuICAgIGZhcUlkPzogc3RyaW5nLFxuICAgIGFnZW50U3VnZ2VzdGlvbklkPzogc3RyaW5nLFxuICAgIGZ1YUlkPzogc3RyaW5nLFxuICAgIHNjSWQ/OiBzdHJpbmdcbiAgKSA9PiB2b2lkXG4gIG9uU3RvcEdlbmVyYXRpb24/OiAoKCkgPT4gdm9pZCkgfCBudWxsXG4gIGlzU3RyZWFtaW5nPzogYm9vbGVhblxuICBpc1dyaXRpbmc/OiBib29sZWFuXG4gIHBsYWNlaG9sZGVyPzogc3RyaW5nXG4gIG9uQ2hhbmdlPzogKCkgPT4gdm9pZFxuICBhbGlnbkJ1dHRvbnM/OiAnaG9yaXpvbnRhbCcgfCAndmVydGljYWwnXG4gIG9uRmlsZUF0dGFjaD86IChmaWxlOiBGaWxlKSA9PiB2b2lkXG4gIG9uRGVsZXRlQXR0YWNobWVudD86IChmaWxlSWQ6IHN0cmluZykgPT4gdm9pZFxuICBhdHRhY2htZW50cz86IEF0dGFjaG1lbnRGaWxlW11cbiAgY2hhdElkPzogc3RyaW5nXG4gIG5ld0NoYXRLZXk/OiBudW1iZXJcbiAgdG9vbHRpcFpJbmRleD86IG51bWJlclxuICAvKiogRXhwb25lIGVsIHdyYXBwZXIgZGVsIGlucHV0IHBhcmEgYW5jbGFyIHBvcG92ZXJzIChtZW5jaW9uZXMsIHBpbiBkZSBjb250ZXh0bykuICovXG4gIHBvcG92ZXJBbmNob3JSZWY/OiBNdXRhYmxlUmVmT2JqZWN0PEhUTUxEaXZFbGVtZW50IHwgbnVsbD5cbiAgbGF5b3V0TW9kZT86ICdzaWRlYmFyJyB8ICdmdWxsc2NyZWVuJyB8ICdmbG9hdGluZydcbiAgLyoqIENoaXAgZGUgY29udGV4dG8gKHRhcmVhL3Byb3llY3RvL2NsaWVudGUvZ2xvYmFsKSBtb3N0cmFkbyBlbiBsYSB0b29sYmFyIGRlbCBpbnB1dC4gKi9cbiAgY29udGV4dENoaXA/OiB7XG4gICAgaXRlbXM6IHN0cmluZ1tdXG4gICAgdHlwZT86IENvbnRleHRFbnRpdHlUeXBlXG4gICAgbGVhZGluZ0ljb24/OiBSZWFjdE5vZGVcbiAgfSB8IG51bGxcbn1cblxuZXhwb3J0IGNvbnN0IE1BSUFJbnB1dCA9ICh7XG4gIG9uU2VuZE1lc3NhZ2UsXG4gIGNsYXNzTmFtZSxcbiAgZGlzYWJsZWQsXG4gIGlzU3RyZWFtaW5nLFxuICBpc1dyaXRpbmcsXG4gIG9uU3RvcEdlbmVyYXRpb24sXG4gIHBsYWNlaG9sZGVyLFxuICBvbkNoYW5nZSxcbiAgYWxpZ25CdXR0b25zID0gJ3ZlcnRpY2FsJyxcbiAgb25GaWxlQXR0YWNoLFxuICBvbkRlbGV0ZUF0dGFjaG1lbnQsXG4gIGF0dGFjaG1lbnRzID0gW10sXG4gIGNoYXRJZCxcbiAgbmV3Q2hhdEtleSxcbiAgdG9vbHRpcFpJbmRleCxcbiAgcG9wb3ZlckFuY2hvclJlZjogZXh0ZXJuYWxQb3BvdmVyQW5jaG9yUmVmLFxuICBsYXlvdXRNb2RlLFxuICBjb250ZXh0Q2hpcCxcbn06IE1BSUFJbnB1dFByb3BzKSA9PiB7XG4gIGNvbnN0IHsgdCB9ID0gdXNlVCgpXG4gIGNvbnN0IGVkaXRvclJlZiA9IHVzZVJlZjxDb250ZXh0TWVudGlvbkVkaXRvckhhbmRsZT4obnVsbClcbiAgY29uc3QgZmlsZUlucHV0UmVmID0gdXNlUmVmPEhUTUxJbnB1dEVsZW1lbnQ+KG51bGwpXG4gIGNvbnN0IGNoaXBzUm93UmVmID0gdXNlUmVmPEhUTUxEaXZFbGVtZW50PihudWxsKVxuICBjb25zdCB0b29sYmFyUm93UmVmID0gdXNlUmVmPEhUTUxEaXZFbGVtZW50PihudWxsKVxuICBjb25zdCBpbnRlcm5hbFdyYXBwZXJSZWYgPSB1c2VSZWY8SFRNTERpdkVsZW1lbnQ+KG51bGwpXG4gIGNvbnN0IHdyYXBwZXJSZWYgPSBleHRlcm5hbFBvcG92ZXJBbmNob3JSZWYgPz8gaW50ZXJuYWxXcmFwcGVyUmVmXG4gIGNvbnN0IFtoYXNUeXBpbmdQcmVzZW5jZSwgc2V0SGFzVHlwaW5nUHJlc2VuY2VdID0gdXNlU3RhdGUoZmFsc2UpXG4gIGNvbnN0IFtjaGlwc1Jvd0hlaWdodCwgc2V0Q2hpcHNSb3dIZWlnaHRdID0gdXNlU3RhdGUoMClcbiAgY29uc3QgW3Rvb2xiYXJSb3dIZWlnaHQsIHNldFRvb2xiYXJSb3dIZWlnaHRdID0gdXNlU3RhdGUoTUFJQV9JTlBVVF9UT09MQkFSX1JPV19IRUlHSFRfUFgpXG4gIGNvbnN0IFttb2RhbFByb3BzLCBzZXRNb2RhbFByb3BzXSA9IHVzZVN0YXRlKHtcbiAgICBpc09wZW46IGZhbHNlLFxuICAgIGV4Y2x1ZGVkRmlsZXM6IFtdIGFzIHN0cmluZ1tdLFxuICAgIGV4Y2VlZGVkRmlsZXM6IFtdIGFzIHN0cmluZ1tdLFxuICAgIGZpbGVTaXplczoge30gYXMgUmVjb3JkPHN0cmluZywgbnVtYmVyPixcbiAgfSlcbiAgY29uc3QgZXZlbnRBbXBsaXR1ZGUgPSB1c2VFdmVudCgpXG4gIGNvbnN0IHtcbiAgICB0b2dnbGVXZWJTZWFyY2gsXG4gICAgaXNXZWJTZWFyY2hBY3RpdmUsXG4gICAgdG9nZ2xlRGVlcFNlYXJjaCxcbiAgICBpc0RlZXBTZWFyY2hBY3RpdmUsXG4gICAgYWdlbnQsXG4gICAgaW5pdGlhbERyYWZ0LFxuICAgIGRlZXBMaW5rU2VuZFBlbmRpbmdSZWYsXG4gIH0gPSB1c2VHbG9iYWxDb250ZXh0KClcbiAgY29uc3QgcGx1c01lbnVaSW5kZXggPSB1c2VNYWlhVGFza1BhbmVsWkluZGV4KDEzMDAsICdvdmVybGF5JylcbiAgY29uc3QgaW5pdGlhbERyYWZ0QXBwbGllZFJlZiA9IHVzZVJlZihmYWxzZSlcblxuICBjb25zdCB7XG4gICAgcG9wb3Zlck9wZW4sXG4gICAgcmVzZXRNZW50aW9uT3BlblRyYWNraW5nLFxuICAgIGhhbmRsZVRyaWdnZXIsXG4gICAgaGFuZGxlS2V5RG93bjogaGFuZGxlUG9wb3ZlcktleURvd24sXG4gICAgcG9wb3Zlck5vZGUsXG4gIH0gPSB1c2VNZW50aW9uUG9wb3Zlcih7XG4gICAgZWRpdG9yUmVmLFxuICAgIHBvcG92ZXJBbmNob3JSZWY6IHdyYXBwZXJSZWYsXG4gIH0pXG5cbiAgY29uc3QgW3BsdXNNZW51QW5jaG9yLCBzZXRQbHVzTWVudUFuY2hvcl0gPSB1c2VTdGF0ZTxIVE1MQnV0dG9uRWxlbWVudCB8IG51bGw+KG51bGwpXG4gIGNvbnN0IFthY3RpdmVUb29sQ2hpcEhvdmVyZWQsIHNldEFjdGl2ZVRvb2xDaGlwSG92ZXJlZF0gPSB1c2VTdGF0ZShmYWxzZSlcbiAgY29uc3QgW3Rvb2xDaGlwRXhpdGluZywgc2V0VG9vbENoaXBFeGl0aW5nXSA9IHVzZVN0YXRlKGZhbHNlKVxuICBjb25zdCB0b29sQ2hpcEV4aXRUaW1lclJlZiA9IHVzZVJlZjxSZXR1cm5UeXBlPHR5cGVvZiBzZXRUaW1lb3V0PiB8IG51bGw+KG51bGwpXG4gIGNvbnN0IHNlYXJjaE1vZGVBY3RpdmVSZWYgPSB1c2VSZWYoeyB3ZWI6IGZhbHNlLCBkZWVwOiBmYWxzZSB9KVxuICBjb25zdCBwbHVzTWVudU9wZW4gPSBCb29sZWFuKHBsdXNNZW51QW5jaG9yKVxuXG4gIC8vIEluaWNpYWxpemFyIGxhcyByZWZlcmVuY2lhcyBjb21vIHVuZGVmaW5lZCBwYXJhIGRldGVjdGFyIGVsIHByaW1lciBjYW1iaW8gY29ycmVjdGFtZW50ZVxuICBjb25zdCBwcmV2aW91c0FnZW50SWRSZWYgPSB1c2VSZWY8c3RyaW5nIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpXG4gIGNvbnN0IHByZXZpb3VzQ2hhdElkUmVmID0gdXNlUmVmPHN0cmluZyB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKVxuICBjb25zdCBwcmV2aW91c05ld0NoYXRLZXlSZWYgPSB1c2VSZWY8bnVtYmVyIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpXG4gIGNvbnN0IHByZXZpb3VzTGF5b3V0TW9kZVJlZiA9IHVzZVJlZjxNQUlBSW5wdXRQcm9wc1snbGF5b3V0TW9kZSddPih1bmRlZmluZWQpXG5cbiAgY29uc3QgYW5hbHl0aWNzQWdlbnRUeXBlID0gZ2V0Q2hhdFRvb2xzTWVudUFnZW50VHlwZShhZ2VudClcbiAgY29uc3QgYW5hbHl0aWNzQ2xvbmVFbnRpdHlQYXlsb2FkID0gYWdlbnQ/LnR5cGUgPT09ICdjbG9uZScgPyB7IGVudGl0eTogYWdlbnQuZW50aXR5ID8/IG51bGwgfSA6IHt9XG5cbiAgLy8gU2xhc2ggY29tbWFuZHMgYXBsaWNhbiBhIGNsb25lcyBlc3BlY2lhbGlzdGFzIHkgYWwgb3JjaGVzdHJhdG9yIGdsb2JhbCAoZXN0ZSBhZ3JlZ2EgbG9zIGRlIHN1cyBzdWJhZ2VudGVzKS5cbiAgLy8gTG9zIGN1c3RvbSB5IGxvcyBjbG9uZSBnbG9iYWwvbWFpYWtlciBubyBsb3MgdGllbmVuIGhhYmlsaXRhZG9zLlxuICBjb25zdCB7IGNvbW1hbmRzOiBzbGFzaENvbW1hbmRzIH0gPSB1c2VTbGFzaENvbW1hbmRzKFxuICAgIChhZ2VudD8udHlwZSA9PT0gJ29yY2hlc3RyYXRvcicgJiYgYWdlbnQ/LmVudGl0eSA9PT0gJ2dsb2JhbCcpIHx8XG4gICAgICAoYWdlbnQ/LnR5cGUgPT09ICdjbG9uZScgJiYgYWdlbnQ/LmVudGl0eSAhPT0gJ2dsb2JhbCcpXG4gICAgICA/IGFnZW50Py5pZFxuICAgICAgOiB1bmRlZmluZWRcbiAgKVxuICBjb25zdCBbc2hvd1NsYXNoRHJvcGRvd24sIHNldFNob3dTbGFzaERyb3Bkb3duXSA9IHVzZVN0YXRlKGZhbHNlKVxuICBjb25zdCBbc2xhc2hRdWVyeSwgc2V0U2xhc2hRdWVyeV0gPSB1c2VTdGF0ZSgnJylcbiAgY29uc3Qgc2xhc2hNZW51V2FzT3BlblJlZiA9IHVzZVJlZihmYWxzZSlcblxuICAvKiogVHJhcyBlbGVnaXIgbyBxdWl0YXIgYsO6c3F1ZWRhIHdlYi9wcm9mdW5kYTogdm9sdmVyIGFsIHRleHRhcmVhIChQb3BvdmVyL21lbnUgcHVlZGUgcm9iYXIgZm9jbykuICovXG4gIGNvbnN0IHNjaGVkdWxlSW5wdXRGb2N1c0FmdGVyVG9vbEFjdGlvbiA9ICgpID0+IHtcbiAgICBpZiAoZGlzYWJsZWQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuICAgICAgd2luZG93LnNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBlZGl0b3JSZWYuY3VycmVudD8uZm9jdXMoKVxuICAgICAgfSwgMClcbiAgICB9KVxuICB9XG5cbiAgY29uc3QgY2xvc2VQbHVzTWVudSA9ICgpID0+IHtcbiAgICBzZXRQbHVzTWVudUFuY2hvcihudWxsKVxuICAgIHNjaGVkdWxlSW5wdXRGb2N1c0FmdGVyVG9vbEFjdGlvbigpXG4gIH1cblxuICBjb25zdCBjYW5jZWxQZW5kaW5nVG9vbENoaXBFeGl0ID0gKCkgPT4ge1xuICAgIGlmICh0b29sQ2hpcEV4aXRUaW1lclJlZi5jdXJyZW50ICE9PSBudWxsKSB7XG4gICAgICBjbGVhclRpbWVvdXQodG9vbENoaXBFeGl0VGltZXJSZWYuY3VycmVudClcbiAgICAgIHRvb2xDaGlwRXhpdFRpbWVyUmVmLmN1cnJlbnQgPSBudWxsXG4gICAgfVxuICAgIHNldFRvb2xDaGlwRXhpdGluZyhmYWxzZSlcbiAgfVxuXG4gIGNvbnN0IGhhbmRsZVBsdXNCdXR0b25Nb3VzZURvd24gPSAoZTogTW91c2VFdmVudDxIVE1MQnV0dG9uRWxlbWVudD4pID0+IHtcbiAgICAvLyBFdml0YSBxdWUgZWwgYm90w7NuIHJvYmUgZWwgZm9jbyBkZWwgaW5wdXQgYWwgYWJyaXIgZWwgbWVuw7ouXG4gICAgZS5wcmV2ZW50RGVmYXVsdCgpXG4gIH1cblxuICBjb25zdCBoYW5kbGVQbHVzQnV0dG9uQ2xpY2sgPSAoZTogTW91c2VFdmVudDxIVE1MQnV0dG9uRWxlbWVudD4pID0+IHtcbiAgICBlLnN0b3BQcm9wYWdhdGlvbigpXG4gICAgaWYgKHBsdXNNZW51QW5jaG9yKSB7XG4gICAgICBjbG9zZVBsdXNNZW51KClcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBzZXRQbHVzTWVudUFuY2hvcihlLmN1cnJlbnRUYXJnZXQpXG4gICAgZXZlbnRBbXBsaXR1ZGUoRVZFTlRTLmFpQ2hhdFBsdXNPcGVuLCB7IGFnZW50X3R5cGU6IGFuYWx5dGljc0FnZW50VHlwZSwgLi4uYW5hbHl0aWNzQ2xvbmVFbnRpdHlQYXlsb2FkIH0pXG4gIH1cblxuICBjb25zdCBoYW5kbGVNZW50aW9uQnV0dG9uQ2xpY2sgPSAoZTogTW91c2VFdmVudDxIVE1MQnV0dG9uRWxlbWVudD4pID0+IHtcbiAgICBlLnN0b3BQcm9wYWdhdGlvbigpXG4gICAgaWYgKGRpc2FibGVkKSByZXR1cm5cbiAgICBjbG9zZVBsdXNNZW51KClcbiAgICBlZGl0b3JSZWYuY3VycmVudD8uaW5zZXJ0TWVudGlvblRyaWdnZXIoKVxuICB9XG5cbiAgY29uc3QgaGFuZGxlUGx1c01lbnVBdHRhY2ggPSAoKSA9PiB7XG4gICAgY2xvc2VQbHVzTWVudSgpXG4gICAgZXZlbnRBbXBsaXR1ZGUoRVZFTlRTLmFpQ2hhdFRvb2xzLCB7XG4gICAgICBhZ2VudF90eXBlOiBhbmFseXRpY3NBZ2VudFR5cGUsXG4gICAgICBvcHRpb246ICdmaWxlcycsXG4gICAgICAuLi5hbmFseXRpY3NDbG9uZUVudGl0eVBheWxvYWQsXG4gICAgfSlcbiAgICBpZiAoYXR0YWNobWVudHMubGVuZ3RoID49IE1BWF9DSEFUX0lOUFVUX0FUVEFDSE1FTlRTKSByZXR1cm5cbiAgICBmaWxlSW5wdXRSZWYuY3VycmVudD8uY2xpY2soKVxuICB9XG5cbiAgY29uc3QgYmVnaW5Ub29sQ2hpcEV4aXQgPSAoKSA9PiB7XG4gICAgaWYgKHRvb2xDaGlwRXhpdFRpbWVyUmVmLmN1cnJlbnQgIT09IG51bGwpIHtcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBjb25zdCB3YXNXZWIgPSBpc1dlYlNlYXJjaEFjdGl2ZVxuICAgIGNvbnN0IHdhc0RlZXAgPSBpc0RlZXBTZWFyY2hBY3RpdmVcbiAgICBpZiAoIXdhc1dlYiAmJiAhd2FzRGVlcCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIHNldFRvb2xDaGlwRXhpdGluZyh0cnVlKVxuICAgIHRvb2xDaGlwRXhpdFRpbWVyUmVmLmN1cnJlbnQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRvb2xDaGlwRXhpdFRpbWVyUmVmLmN1cnJlbnQgPSBudWxsXG4gICAgICBjb25zdCB7IHdlYiwgZGVlcCB9ID0gc2VhcmNoTW9kZUFjdGl2ZVJlZi5jdXJyZW50XG4gICAgICBpZiAod2FzV2ViICYmIHdlYikge1xuICAgICAgICB0b2dnbGVXZWJTZWFyY2goKVxuICAgICAgfSBlbHNlIGlmICh3YXNEZWVwICYmIGRlZXApIHtcbiAgICAgICAgdG9nZ2xlRGVlcFNlYXJjaCgpXG4gICAgICB9XG4gICAgICBzZXRUb29sQ2hpcEV4aXRpbmcoZmFsc2UpXG4gICAgICBzY2hlZHVsZUlucHV0Rm9jdXNBZnRlclRvb2xBY3Rpb24oKVxuICAgIH0sIFRPT0xfQ0hJUF9FWElUX01TKVxuICB9XG5cbiAgY29uc3QgaGFuZGxlUGx1c01lbnVXZWJTZWFyY2ggPSAoKSA9PiB7XG4gICAgY2xvc2VQbHVzTWVudSgpXG4gICAgaWYgKGlzV2ViU2VhcmNoQWN0aXZlKSB7XG4gICAgICBiZWdpblRvb2xDaGlwRXhpdCgpXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgY2FuY2VsUGVuZGluZ1Rvb2xDaGlwRXhpdCgpXG4gICAgaWYgKGlzRGVlcFNlYXJjaEFjdGl2ZSkge1xuICAgICAgdG9nZ2xlRGVlcFNlYXJjaCgpXG4gICAgfVxuICAgIHRvZ2dsZVdlYlNlYXJjaCgpXG4gICAgZXZlbnRBbXBsaXR1ZGUoRVZFTlRTLmFpQ2hhdFRvb2xzLCB7XG4gICAgICBhZ2VudF90eXBlOiBhbmFseXRpY3NBZ2VudFR5cGUsXG4gICAgICBvcHRpb246ICdzZWFyY2gnLFxuICAgICAgLi4uYW5hbHl0aWNzQ2xvbmVFbnRpdHlQYXlsb2FkLFxuICAgIH0pXG4gICAgc2NoZWR1bGVJbnB1dEZvY3VzQWZ0ZXJUb29sQWN0aW9uKClcbiAgfVxuXG4gIGNvbnN0IGhhbmRsZVBsdXNNZW51RGVlcFNlYXJjaCA9ICgpID0+IHtcbiAgICBjbG9zZVBsdXNNZW51KClcbiAgICBpZiAoaXNEZWVwU2VhcmNoQWN0aXZlKSB7XG4gICAgICBiZWdpblRvb2xDaGlwRXhpdCgpXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgY2FuY2VsUGVuZGluZ1Rvb2xDaGlwRXhpdCgpXG4gICAgaWYgKGlzV2ViU2VhcmNoQWN0aXZlKSB7XG4gICAgICB0b2dnbGVXZWJTZWFyY2goKVxuICAgIH1cbiAgICB0b2dnbGVEZWVwU2VhcmNoKClcbiAgICBldmVudEFtcGxpdHVkZShFVkVOVFMuYWlDaGF0VG9vbHMsIHtcbiAgICAgIGFnZW50X3R5cGU6IGFuYWx5dGljc0FnZW50VHlwZSxcbiAgICAgIG9wdGlvbjogJ2RlZXBfc2VhcmNoJyxcbiAgICAgIC4uLmFuYWx5dGljc0Nsb25lRW50aXR5UGF5bG9hZCxcbiAgICB9KVxuICAgIHNjaGVkdWxlSW5wdXRGb2N1c0FmdGVyVG9vbEFjdGlvbigpXG4gIH1cblxuICBjb25zdCBoYW5kbGVQbHVzTWVudVF1aWNrQWN0aW9ucyA9ICgpID0+IHtcbiAgICBzZXRQbHVzTWVudUFuY2hvcihudWxsKVxuICAgIGlmIChkaXNhYmxlZCkgcmV0dXJuXG4gICAgZWRpdG9yUmVmLmN1cnJlbnQ/Lmluc2VydFNsYXNoVHJpZ2dlcigpXG4gIH1cblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghZGlzYWJsZWQpIHtcbiAgICAgIGVkaXRvclJlZi5jdXJyZW50Py5mb2N1cygpXG4gICAgfVxuICB9LCBbZGlzYWJsZWRdKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgZHJhZnQgPSBpbml0aWFsRHJhZnQ/LnRyaW0oKVxuICAgIGlmICghZHJhZnQgfHwgaW5pdGlhbERyYWZ0QXBwbGllZFJlZi5jdXJyZW50IHx8IGRpc2FibGVkKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgaW5pdGlhbERyYWZ0QXBwbGllZFJlZi5jdXJyZW50ID0gdHJ1ZVxuICAgIGlmIChkZWVwTGlua1NlbmRQZW5kaW5nUmVmKSB7XG4gICAgICBkZWVwTGlua1NlbmRQZW5kaW5nUmVmLmN1cnJlbnQgPSB0cnVlXG4gICAgfVxuICAgIGVkaXRvclJlZi5jdXJyZW50Py5zZXRQbGFpblRleHQoZHJhZnQpXG4gICAgc2V0SGFzVHlwaW5nUHJlc2VuY2UodHJ1ZSlcbiAgICBpZiAoIWRpc2FibGVkKSB7XG4gICAgICBlZGl0b3JSZWYuY3VycmVudD8uZm9jdXMoKVxuICAgIH1cbiAgfSwgW2luaXRpYWxEcmFmdCwgZGlzYWJsZWQsIGRlZXBMaW5rU2VuZFBlbmRpbmdSZWZdKVxuXG4gIGNvbnN0IHNlbmREaXNhYmxlZCA9IHVzZU1lbW8oXG4gICAgKCkgPT4gIWhhc1R5cGluZ1ByZXNlbmNlICYmIGF0dGFjaG1lbnRzLmxlbmd0aCA9PT0gMCxcbiAgICBbaGFzVHlwaW5nUHJlc2VuY2UsIGF0dGFjaG1lbnRzLmxlbmd0aF1cbiAgKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgc2VhcmNoTW9kZUFjdGl2ZVJlZi5jdXJyZW50ID0geyB3ZWI6IGlzV2ViU2VhcmNoQWN0aXZlLCBkZWVwOiBpc0RlZXBTZWFyY2hBY3RpdmUgfVxuICB9LCBbaXNXZWJTZWFyY2hBY3RpdmUsIGlzRGVlcFNlYXJjaEFjdGl2ZV0pXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgaWYgKHRvb2xDaGlwRXhpdFRpbWVyUmVmLmN1cnJlbnQgIT09IG51bGwpIHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRvb2xDaGlwRXhpdFRpbWVyUmVmLmN1cnJlbnQpXG4gICAgICB9XG4gICAgfVxuICB9LCBbXSlcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghaXNXZWJTZWFyY2hBY3RpdmUgJiYgIWlzRGVlcFNlYXJjaEFjdGl2ZSkge1xuICAgICAgc2V0QWN0aXZlVG9vbENoaXBIb3ZlcmVkKGZhbHNlKVxuICAgIH1cbiAgfSwgW2lzV2ViU2VhcmNoQWN0aXZlLCBpc0RlZXBTZWFyY2hBY3RpdmVdKVxuXG4gIC8vIEF1dG8tZm9jdXMgY3VhbmRvIGNhbWJpYSBlbCBhZ2VudGUgbyBsYSBjb252ZXJzYWNpw7NuLCBvIGFsIG1vbnRhciBlbCBjb21wb25lbnRlXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgYWdlbnRDaGFuZ2VkID0gcHJldmlvdXNBZ2VudElkUmVmLmN1cnJlbnQgIT09IGFnZW50Py5pZFxuICAgIGNvbnN0IHByZXZpb3VzQ2hhdElkID0gcHJldmlvdXNDaGF0SWRSZWYuY3VycmVudFxuICAgIGNvbnN0IGN1cnJlbnRDaGF0SWQgPSBjaGF0SWRcbiAgICBjb25zdCBjaGF0Q2hhbmdlZCA9IHByZXZpb3VzQ2hhdElkICE9PSBjdXJyZW50Q2hhdElkXG4gICAgY29uc3QgY2hhbmdlZEZyb21OZXdDaGF0VG9PbGRDaGF0ID1cbiAgICAgIChwcmV2aW91c0NoYXRJZCA9PT0gdW5kZWZpbmVkIHx8IHByZXZpb3VzQ2hhdElkID09PSBudWxsKSAmJiBjdXJyZW50Q2hhdElkICE9PSB1bmRlZmluZWQgJiYgY3VycmVudENoYXRJZCAhPT0gbnVsbFxuICAgIGNvbnN0IG5ld0NoYXRTdGFydGVkID0gcHJldmlvdXNOZXdDaGF0S2V5UmVmLmN1cnJlbnQgIT09IG5ld0NoYXRLZXlcbiAgICBjb25zdCBpc0luaXRpYWxNb3VudCA9IHByZXZpb3VzQWdlbnRJZFJlZi5jdXJyZW50ID09PSB1bmRlZmluZWQgJiYgcHJldmlvdXNDaGF0SWRSZWYuY3VycmVudCA9PT0gdW5kZWZpbmVkXG5cbiAgICBpZiAoKGFnZW50Q2hhbmdlZCB8fCBjaGF0Q2hhbmdlZCB8fCBjaGFuZ2VkRnJvbU5ld0NoYXRUb09sZENoYXQgfHwgbmV3Q2hhdFN0YXJ0ZWQgfHwgaXNJbml0aWFsTW91bnQpICYmICFkaXNhYmxlZCkge1xuICAgICAgY29uc3QgZGVsYXkgPSBpc0luaXRpYWxNb3VudCB8fCBjaGFuZ2VkRnJvbU5ld0NoYXRUb09sZENoYXQgPyAyMDAgOiAxMDBcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBpZiAoIWRpc2FibGVkKSBlZGl0b3JSZWYuY3VycmVudD8uZm9jdXMoKVxuICAgICAgfSwgZGVsYXkpXG4gICAgfVxuXG4gICAgcHJldmlvdXNBZ2VudElkUmVmLmN1cnJlbnQgPSBhZ2VudD8uaWRcbiAgICBwcmV2aW91c0NoYXRJZFJlZi5jdXJyZW50ID0gY2hhdElkXG4gICAgcHJldmlvdXNOZXdDaGF0S2V5UmVmLmN1cnJlbnQgPSBuZXdDaGF0S2V5XG4gIH0sIFthZ2VudD8uaWQsIGNoYXRJZCwgbmV3Q2hhdEtleSwgZGlzYWJsZWRdKVxuXG4gIC8vIEF1dG8tZm9jdXMgY3VhbmRvIGNhbWJpYSBsYSBkaXNwb3NpY2nDs24gZGVsIG1vZGFsIChzaWRlYmFyIC8gZnVsbHNjcmVlbiAvIGZsb2F0aW5nKVxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghbGF5b3V0TW9kZSkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZFxuICAgIH1cblxuICAgIGNvbnN0IHByZXZpb3VzTGF5b3V0TW9kZSA9IHByZXZpb3VzTGF5b3V0TW9kZVJlZi5jdXJyZW50XG4gICAgcHJldmlvdXNMYXlvdXRNb2RlUmVmLmN1cnJlbnQgPSBsYXlvdXRNb2RlXG5cbiAgICBpZiAocHJldmlvdXNMYXlvdXRNb2RlID09PSB1bmRlZmluZWQgfHwgcHJldmlvdXNMYXlvdXRNb2RlID09PSBsYXlvdXRNb2RlIHx8IGRpc2FibGVkKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkXG4gICAgfVxuXG4gICAgY29uc3QgdGltZW91dElkID0gd2luZG93LnNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgaWYgKCFkaXNhYmxlZCkge1xuICAgICAgICBlZGl0b3JSZWYuY3VycmVudD8uZm9jdXMoKVxuICAgICAgfVxuICAgIH0sIDIwMClcblxuICAgIHJldHVybiAoKSA9PiB3aW5kb3cuY2xlYXJUaW1lb3V0KHRpbWVvdXRJZClcbiAgfSwgW2xheW91dE1vZGUsIGRpc2FibGVkXSlcblxuICAvLyBBcHBjdWVzOiBub3RpZnkgdGhhdCB0aGUgaW5wdXQgaXMgdmlzaWJsZSBmb3Igc3BlY2lhbGlzdCBhZ2VudHMgKGNsb25lICsgcHJvamVjdC9jbGllbnQpXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgaXNTcGVjaWFsaXN0QWdlbnQgPSBhZ2VudD8udHlwZSA9PT0gJ2Nsb25lJyAmJiAoYWdlbnQ/LmVudGl0eSA9PT0gJ3Byb2plY3QnIHx8IGFnZW50Py5lbnRpdHkgPT09ICdjbGllbnQnKVxuICAgIGlmICghd3JhcHBlclJlZi5jdXJyZW50IHx8ICFpc1NwZWNpYWxpc3RBZ2VudCkgcmV0dXJuIHVuZGVmaW5lZFxuXG4gICAgY29uc3Qgb2JzZXJ2ZXIgPSBuZXcgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIoXG4gICAgICAoW2VudHJ5XSkgPT4ge1xuICAgICAgICBpZiAoZW50cnkuaXNJbnRlcnNlY3RpbmcpIHtcbiAgICAgICAgICB0cmFja0FwcGN1ZXNFdmVudChBUFBDVUVTX0VWRU5UUy5tYWlhQ29udGV4dE1lbnRpb25Jbml0KVxuICAgICAgICAgIG9ic2VydmVyLmRpc2Nvbm5lY3QoKVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgeyB0aHJlc2hvbGQ6IDAuMSB9XG4gICAgKVxuXG4gICAgb2JzZXJ2ZXIub2JzZXJ2ZSh3cmFwcGVyUmVmLmN1cnJlbnQpXG4gICAgcmV0dXJuICgpID0+IG9ic2VydmVyLmRpc2Nvbm5lY3QoKVxuICB9LCBbYWdlbnQ/LmlkLCBhZ2VudD8udHlwZSwgYWdlbnQ/LmVudGl0eV0pXG5cbiAgLy8gQ2xlYXIgaW5wdXQgd2hlbiBzZXNzaW9uIGNoYW5nZXMgKHVzZXIgc3dpdGNoZXMgdG8gYSBkaWZmZXJlbnQgY2hhdClcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBoYW5kbGVTZXNzaW9uQ2hhbmdlID0gKCkgPT4ge1xuICAgICAgaWYgKGRlZXBMaW5rU2VuZFBlbmRpbmdSZWYpIHtcbiAgICAgICAgZGVlcExpbmtTZW5kUGVuZGluZ1JlZi5jdXJyZW50ID0gZmFsc2VcbiAgICAgIH1cbiAgICAgIGVkaXRvclJlZi5jdXJyZW50Py5jbGVhcigpXG4gICAgICBzZXRIYXNUeXBpbmdQcmVzZW5jZShmYWxzZSlcbiAgICAgIHNldFNob3dTbGFzaERyb3Bkb3duKGZhbHNlKVxuICAgICAgc2V0U2xhc2hRdWVyeSgnJylcbiAgICAgIHJlc2V0TWVudGlvbk9wZW5UcmFja2luZygpXG4gICAgfVxuXG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignY2hhdC1zZXNzaW9uLWNoYW5nZWQnLCBoYW5kbGVTZXNzaW9uQ2hhbmdlKVxuICAgIHJldHVybiAoKSA9PiBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdjaGF0LXNlc3Npb24tY2hhbmdlZCcsIGhhbmRsZVNlc3Npb25DaGFuZ2UpXG4gIH0sIFtyZXNldE1lbnRpb25PcGVuVHJhY2tpbmcsIGRlZXBMaW5rU2VuZFBlbmRpbmdSZWZdKVxuXG4gIC8vIE1hbnRlbmVyIGZvY28gYWwgc2VsZWNjaW9uYXIgdW4gY29udGV4dG8gcmVjaWVudGUgKGVsIGNsaWNrIGVuIGVsIHBpbGwgbG8gcm9iYSBhbCBpbnB1dCkuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgaGFuZGxlUmVmb2N1cyA9ICgpID0+IHtcbiAgICAgIGlmIChkaXNhYmxlZCkgcmV0dXJuXG4gICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuICAgICAgICBlZGl0b3JSZWYuY3VycmVudD8uZm9jdXMoKVxuICAgICAgfSlcbiAgICB9XG5cbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtYWlhLWlucHV0LXJlZm9jdXMnLCBoYW5kbGVSZWZvY3VzKVxuICAgIHJldHVybiAoKSA9PiBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtYWlhLWlucHV0LXJlZm9jdXMnLCBoYW5kbGVSZWZvY3VzKVxuICB9LCBbZGlzYWJsZWRdKVxuXG4gIGNvbnN0IGhhbmRsZVNlbmRNZXNzYWdlID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGNvbnN0IHN0YXRlID0gZWRpdG9yUmVmLmN1cnJlbnQ/LnNlcmlhbGl6ZSgpXG4gICAgY29uc3QgdGV4dCA9IHN0YXRlPy50ZXh0ID8/ICcnXG4gICAgaWYgKCF0ZXh0LnRyaW0oKSAmJiAhYXR0YWNobWVudHMubGVuZ3RoKSByZXR1cm5cbiAgICBjb25zdCBtZW50aW9ucyA9IHN0YXRlPy5tZW50aW9ucyA/PyBbXVxuICAgIG9uU2VuZE1lc3NhZ2UodGV4dCwgYXR0YWNobWVudHMsIG1lbnRpb25zKVxuICAgIGVkaXRvclJlZi5jdXJyZW50Py5jbGVhcigpXG4gICAgc2V0SGFzVHlwaW5nUHJlc2VuY2UoZmFsc2UpXG4gICAgc2V0U2hvd1NsYXNoRHJvcGRvd24oZmFsc2UpXG4gICAgc2V0U2xhc2hRdWVyeSgnJylcbiAgICByZXNldE1lbnRpb25PcGVuVHJhY2tpbmcoKVxuICB9LCBbYXR0YWNobWVudHMsIG9uU2VuZE1lc3NhZ2UsIHJlc2V0TWVudGlvbk9wZW5UcmFja2luZ10pXG5cbiAgY29uc3QgaGFuZGxlU2VsZWN0U2xhc2hDb21tYW5kID0gdXNlQ2FsbGJhY2soXG4gICAgKGNvbW1hbmQ6IEFjdGlvbikgPT4ge1xuICAgICAgZXZlbnRBbXBsaXR1ZGUoRVZFTlRTLmFpQ2hhdFF1aWNrQWN0aW9uU2VsZWN0LCB7XG4gICAgICAgIHR5cGVfcXVpY2tfYWN0aW9uOiByZXNvbHZlUXVpY2tBY3Rpb25UeXBlKGNvbW1hbmQpLFxuICAgICAgICBvcmlnaW5fcXVpY2tfYWN0aW9uOiAnc2xhc2hfbWVudScsXG4gICAgICB9KVxuXG4gICAgICBjb25zdCBzdGF0ZSA9IGVkaXRvclJlZi5jdXJyZW50Py5zZXJpYWxpemUoKVxuICAgICAgY29uc3QgdGV4dCA9IHN0YXRlPy50ZXh0ID8/ICcnXG4gICAgICBjb25zdCB0cmlnZ2VyUGFydCA9IGAvJHtzbGFzaFF1ZXJ5fWBcbiAgICAgIGNvbnN0IGJlZm9yZVRyaWdnZXIgPSB0ZXh0LmVuZHNXaXRoKHRyaWdnZXJQYXJ0KSA/IHRleHQuc2xpY2UoMCwgLXRyaWdnZXJQYXJ0Lmxlbmd0aCkgOiB0ZXh0XG4gICAgICBjb25zdCBpc0VtcHR5QmVmb3JlVHJpZ2dlciA9IGJlZm9yZVRyaWdnZXIudHJpbSgpID09PSAnJ1xuXG4gICAgICBpZiAoaXNFbXB0eUJlZm9yZVRyaWdnZXIpIHtcbiAgICAgICAgb25TZW5kTWVzc2FnZShjb21tYW5kLnRpdGxlLCBhdHRhY2htZW50cywgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBjb21tYW5kLmlkKVxuICAgICAgICBlZGl0b3JSZWYuY3VycmVudD8uY2xlYXIoKVxuICAgICAgICBzZXRIYXNUeXBpbmdQcmVzZW5jZShmYWxzZSlcbiAgICAgICAgc2V0U2hvd1NsYXNoRHJvcGRvd24oZmFsc2UpXG4gICAgICAgIHNldFNsYXNoUXVlcnkoJycpXG4gICAgICAgIHNsYXNoTWVudVdhc09wZW5SZWYuY3VycmVudCA9IGZhbHNlXG4gICAgICAgIHJlc2V0TWVudGlvbk9wZW5UcmFja2luZygpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBlZGl0b3JSZWYuY3VycmVudD8uaW5zZXJ0U2xhc2hDb21tYW5kKHsgaWQ6IGNvbW1hbmQuaWQsIGxhYmVsOiBjb21tYW5kLnRpdGxlIH0pXG4gICAgICBzZXRTaG93U2xhc2hEcm9wZG93bihmYWxzZSlcbiAgICAgIHNldFNsYXNoUXVlcnkoJycpXG4gICAgICBzbGFzaE1lbnVXYXNPcGVuUmVmLmN1cnJlbnQgPSBmYWxzZVxuICAgIH0sXG4gICAgW2F0dGFjaG1lbnRzLCBvblNlbmRNZXNzYWdlLCByZXNldE1lbnRpb25PcGVuVHJhY2tpbmcsIHNsYXNoUXVlcnksIGV2ZW50QW1wbGl0dWRlXVxuICApXG5cbiAgY29uc3QgaGFuZGxlQ2xvc2VTbGFzaERyb3Bkb3duID0gKCkgPT4ge1xuICAgIHNldFNob3dTbGFzaERyb3Bkb3duKGZhbHNlKVxuICAgIHNsYXNoTWVudVdhc09wZW5SZWYuY3VycmVudCA9IGZhbHNlXG4gIH1cblxuICBjb25zdCBoYW5kbGVFZGl0b3JJbnB1dCA9IHVzZUNhbGxiYWNrKFxuICAgICh7XG4gICAgICB0ZXh0LFxuICAgICAgdHJpZ2dlcixcbiAgICAgIHNsYXNoVHJpZ2dlcixcbiAgICB9OiB7XG4gICAgICB0ZXh0OiBzdHJpbmdcbiAgICAgIG1lbnRpb25zOiBDb250ZXh0TWVudGlvbltdXG4gICAgICB0cmlnZ2VyOiB7IGFjdGl2ZTogYm9vbGVhbjsgcXVlcnk6IHN0cmluZzsgYXRSdW5MZW5ndGg6IG51bWJlciB9XG4gICAgICBzbGFzaFRyaWdnZXI/OiB7IGFjdGl2ZTogYm9vbGVhbjsgcXVlcnk6IHN0cmluZyB9XG4gICAgfSkgPT4ge1xuICAgICAgc2V0SGFzVHlwaW5nUHJlc2VuY2UodGV4dC50cmltKCkubGVuZ3RoID4gMClcbiAgICAgIG9uQ2hhbmdlPy4oKVxuICAgICAgaGFuZGxlVHJpZ2dlcih0cmlnZ2VyKVxuXG4gICAgICBpZiAoc2xhc2hUcmlnZ2VyPy5hY3RpdmUgJiYgc2xhc2hDb21tYW5kcy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGlmICghc2xhc2hNZW51V2FzT3BlblJlZi5jdXJyZW50KSB7XG4gICAgICAgICAgZXZlbnRBbXBsaXR1ZGUoRVZFTlRTLmFpQ2hhdFF1aWNrQWN0aW9uT3BlbilcbiAgICAgICAgICBzbGFzaE1lbnVXYXNPcGVuUmVmLmN1cnJlbnQgPSB0cnVlXG4gICAgICAgIH1cbiAgICAgICAgc2V0U2hvd1NsYXNoRHJvcGRvd24odHJ1ZSlcbiAgICAgICAgc2V0U2xhc2hRdWVyeShzbGFzaFRyaWdnZXIucXVlcnkpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzbGFzaE1lbnVXYXNPcGVuUmVmLmN1cnJlbnQgPSBmYWxzZVxuICAgICAgICBzZXRTaG93U2xhc2hEcm9wZG93bihmYWxzZSlcbiAgICAgICAgc2V0U2xhc2hRdWVyeSgnJylcbiAgICAgIH1cbiAgICB9LFxuICAgIFtvbkNoYW5nZSwgaGFuZGxlVHJpZ2dlciwgc2xhc2hDb21tYW5kcywgZXZlbnRBbXBsaXR1ZGVdXG4gIClcblxuICBjb25zdCBoYW5kbGVLZXlEb3duID0gdXNlQ2FsbGJhY2soXG4gICAgKGU6IEtleWJvYXJkRXZlbnQ8SFRNTERpdkVsZW1lbnQ+KSA9PiB7XG4gICAgICBpZiAoaGFuZGxlUG9wb3ZlcktleURvd24oZSkpIHJldHVyblxuICAgICAgaWYgKGUua2V5ID09PSAnRW50ZXInICYmICFlLnNoaWZ0S2V5ICYmICFwb3BvdmVyT3Blbikge1xuICAgICAgICBlLnByZXZlbnREZWZhdWx0KClcbiAgICAgICAgaWYgKCFzZW5kRGlzYWJsZWQgJiYgIWRpc2FibGVkKSBoYW5kbGVTZW5kTWVzc2FnZSgpXG4gICAgICB9XG4gICAgfSxcbiAgICBbaGFuZGxlUG9wb3ZlcktleURvd24sIHBvcG92ZXJPcGVuLCBzZW5kRGlzYWJsZWQsIGRpc2FibGVkLCBoYW5kbGVTZW5kTWVzc2FnZV1cbiAgKVxuXG4gIGNvbnN0IGhhbmRsZUZpbGVTZWxlY3QgPSAoZTogQ2hhbmdlRXZlbnQ8SFRNTElucHV0RWxlbWVudD4pID0+IHtcbiAgICBjb25zdCBmaWxlcyA9IGUudGFyZ2V0LmZpbGVzXG4gICAgaWYgKCFmaWxlcykgcmV0dXJuXG5cbiAgICBjb25zdCBleGNlZWRlZEZpbGVzOiBzdHJpbmdbXSA9IFtdXG4gICAgY29uc3QgZXhjbHVkZWRGaWxlczogc3RyaW5nW10gPSBbXVxuICAgIGNvbnN0IGZpbGVTaXplczogUmVjb3JkPHN0cmluZywgbnVtYmVyPiA9IHt9XG4gICAgbGV0IGZpbGVzSW5zZXJ0ZWQgPSBhdHRhY2htZW50cy5sZW5ndGhcblxuICAgIC8vIERlZmluaXIgbMOtbWl0ZXMgcGFyYSBkaWZlcmVudGVzIHRpcG9zIGRlIGFyY2hpdm9zXG4gICAgY29uc3QgaXNOZXdGb3JtYXQgPSAoZXh0ZW5zaW9uOiBzdHJpbmcpID0+IFsnLnBuZycsICcuanBnJywgJy5qcGVnJywgJy5wZGYnXS5pbmNsdWRlcyhleHRlbnNpb24pXG4gICAgY29uc3QgaXNPbGRGb3JtYXQgPSAoZXh0ZW5zaW9uOiBzdHJpbmcpID0+XG4gICAgICBbJy50eHQnLCAnLm1kJywgJy5jc3YnLCAnLmRvYycsICcuZG9jeCcsICcueGxzeCcsICcueGxzJ10uaW5jbHVkZXMoZXh0ZW5zaW9uKVxuICAgIGNvbnN0IGlzQXVkaW9Gb3JtYXQgPSAoZXh0ZW5zaW9uOiBzdHJpbmcpID0+XG4gICAgICBbJy5mbGFjJywgJy5tNGEnLCAnLm1wMycsICcubXA0JywgJy5vZ2EnLCAnLm9nZycsICcud2F2JywgJy53ZWJtJ10uaW5jbHVkZXMoZXh0ZW5zaW9uKVxuXG4gICAgQXJyYXkuZnJvbShmaWxlcykuZm9yRWFjaChmaWxlID0+IHtcbiAgICAgIGxldCBleGNsdWRlZEZpbGUgPSBmYWxzZVxuICAgICAgY29uc3QgZmlsZU5hbWVQYXJ0cyA9IGZpbGUubmFtZS5zcGxpdCgnLicpXG4gICAgICBjb25zdCBmaWxlRXh0ZW5zaW9uID0gZmlsZU5hbWVQYXJ0cy5sZW5ndGggPiAxID8gYC4ke2ZpbGVOYW1lUGFydHMucG9wKCk/LnRvTG93ZXJDYXNlKCl9YCA6ICcnXG5cbiAgICAgIGlmICghYWxsb3dlZEZpbGVUeXBlcz8uaW5jbHVkZXMoZmlsZUV4dGVuc2lvbikpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGZpbGVTaXplc1tmaWxlLm5hbWVdID0gZmlsZS5zaXplXG5cbiAgICAgIC8vIFZhbGlkYWNpb25lcyBlc3BlY8OtZmljYXMgc2Vnw7puIGVsIHRpcG8gZGUgYXJjaGl2b1xuICAgICAgaWYgKGlzTmV3Rm9ybWF0KGZpbGVFeHRlbnNpb24pKSB7XG4gICAgICAgIC8vIFBhcmEgbnVldm9zIGZvcm1hdG9zOiBoYXN0YSA0Ljk5TUIgcG9yIGFyY2hpdm8sIGhhc3RhIE1BWF9DSEFUX0lOUFVUX0FUVEFDSE1FTlRTIGFyY2hpdm9zXG4gICAgICAgIGlmIChmaWxlLnNpemUgPiBNQVhfRklMRV9TSVpFX01CX01BSUFfVklTSU9OICogMTAyNCAqIDEwMjQpIHtcbiAgICAgICAgICBleGNlZWRlZEZpbGVzLnB1c2goZmlsZS5uYW1lKVxuICAgICAgICAgIGV4Y2x1ZGVkRmlsZSA9IHRydWVcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChmaWxlc0luc2VydGVkICsgMSA+IE1BWF9DSEFUX0lOUFVUX0FUVEFDSE1FTlRTKSB7XG4gICAgICAgICAgZXhjbHVkZWRGaWxlcy5wdXNoKGZpbGUubmFtZSlcbiAgICAgICAgICBleGNsdWRlZEZpbGUgPSB0cnVlXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoaXNPbGRGb3JtYXQoZmlsZUV4dGVuc2lvbikpIHtcbiAgICAgICAgLy8gUGFyYSBmb3JtYXRvcyBhbnRlcmlvcmVzOiBoYXN0YSAxTUIgcG9yIGFyY2hpdm8sIGhhc3RhIE1BWF9DSEFUX0lOUFVUX0FUVEFDSE1FTlRTIGFyY2hpdm9zXG4gICAgICAgIGlmIChmaWxlLnNpemUgPiBNQVhfRklMRV9TSVpFX01CX09MRCAqIDEwMjQgKiAxMDI0KSB7XG4gICAgICAgICAgZXhjZWVkZWRGaWxlcy5wdXNoKGZpbGUubmFtZSlcbiAgICAgICAgICBleGNsdWRlZEZpbGUgPSB0cnVlXG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZmlsZXNJbnNlcnRlZCArIDEgPiBNQVhfQ0hBVF9JTlBVVF9BVFRBQ0hNRU5UUykge1xuICAgICAgICAgIGV4Y2x1ZGVkRmlsZXMucHVzaChmaWxlLm5hbWUpXG4gICAgICAgICAgZXhjbHVkZWRGaWxlID0gdHJ1ZVxuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGlzQXVkaW9Gb3JtYXQoZmlsZUV4dGVuc2lvbikpIHtcbiAgICAgICAgLy8gUGFyYSBhcmNoaXZvcyBkZSBhdWRpbzogaGFzdGEgMTBNQiBwb3IgYXJjaGl2bywgaGFzdGEgTUFYX0NIQVRfSU5QVVRfQVRUQUNITUVOVFMgYXJjaGl2b3NcbiAgICAgICAgaWYgKGZpbGUuc2l6ZSA+IE1BWF9GSUxFX1NJWkVfTUJfQVVESU8gKiAxMDI0ICogMTAyNCkge1xuICAgICAgICAgIGV4Y2VlZGVkRmlsZXMucHVzaChmaWxlLm5hbWUpXG4gICAgICAgICAgZXhjbHVkZWRGaWxlID0gdHJ1ZVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGZpbGVzSW5zZXJ0ZWQgKyAxID4gTUFYX0NIQVRfSU5QVVRfQVRUQUNITUVOVFMpIHtcbiAgICAgICAgICBleGNsdWRlZEZpbGVzLnB1c2goZmlsZS5uYW1lKVxuICAgICAgICAgIGV4Y2x1ZGVkRmlsZSA9IHRydWVcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoIWV4Y2x1ZGVkRmlsZSkge1xuICAgICAgICBmaWxlc0luc2VydGVkICs9IDFcbiAgICAgICAgY29uc3QgdHlwZUZpbGUgPSBmaWxlLnR5cGUgfHwgZmlsZVR5cGVzW2ZpbGVFeHRlbnNpb25dXG4gICAgICAgIGNvbnN0IHBhcnNlZEZpbGUgPSBuZXcgRmlsZShbZmlsZV0sIGZpbGUubmFtZSwgeyB0eXBlOiB0eXBlRmlsZSB9KVxuICAgICAgICBvbkZpbGVBdHRhY2g/LihwYXJzZWRGaWxlKVxuICAgICAgfVxuICAgIH0pXG5cbiAgICBpZiAoZXhjbHVkZWRGaWxlcy5sZW5ndGggfHwgZXhjZWVkZWRGaWxlcy5sZW5ndGgpIHtcbiAgICAgIHNldE1vZGFsUHJvcHMoeyBpc09wZW46IHRydWUsIGV4Y2x1ZGVkRmlsZXMsIGV4Y2VlZGVkRmlsZXMsIGZpbGVTaXplcyB9KVxuICAgIH1cblxuICAgIGlmIChmaWxlSW5wdXRSZWYuY3VycmVudCkge1xuICAgICAgZmlsZUlucHV0UmVmLmN1cnJlbnQudmFsdWUgPSAnJ1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGhhbmRsZURlbGV0ZUF0dGFjaG1lbnQgPSAoZmlsZUlkOiBzdHJpbmcpID0+IHtcbiAgICBvbkRlbGV0ZUF0dGFjaG1lbnQ/LihmaWxlSWQpXG4gIH1cblxuICBjb25zdCBoYW5kbGVTdG9wR2VuZXJhdGlvbiA9ICgpID0+IHtcbiAgICBldmVudEFtcGxpdHVkZShFVkVOVFMuYWlDaGF0U3RvcFJlc3BvbnNlKVxuICAgIG9uU3RvcEdlbmVyYXRpb24/LigpXG4gIH1cblxuICBjb25zdCBzaG93Q2hpcHNSb3cgPSBCb29sZWFuKGNvbnRleHRDaGlwPy5pdGVtcz8ubGVuZ3RoIHx8IGF0dGFjaG1lbnRzLmxlbmd0aClcblxuICB1c2VMYXlvdXRFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IGNoaXBzRWwgPSBjaGlwc1Jvd1JlZi5jdXJyZW50XG4gICAgY29uc3QgdG9vbGJhckVsID0gdG9vbGJhclJvd1JlZi5jdXJyZW50XG5cbiAgICBjb25zdCB1cGRhdGVIZWlnaHRzID0gKCkgPT4ge1xuICAgICAgY29uc3QgbmV4dENoaXBzID0gc2hvd0NoaXBzUm93ICYmIGNoaXBzRWwgPyBNYXRoLmNlaWwoY2hpcHNFbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5oZWlnaHQpIDogMFxuICAgICAgY29uc3QgbmV4dFRvb2xiYXIgPSB0b29sYmFyRWxcbiAgICAgICAgPyBNYXRoLmNlaWwodG9vbGJhckVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmhlaWdodClcbiAgICAgICAgOiBNQUlBX0lOUFVUX1RPT0xCQVJfUk9XX0hFSUdIVF9QWFxuXG4gICAgICBzZXRDaGlwc1Jvd0hlaWdodChwcmV2ID0+IChwcmV2ID09PSBuZXh0Q2hpcHMgPyBwcmV2IDogbmV4dENoaXBzKSlcbiAgICAgIHNldFRvb2xiYXJSb3dIZWlnaHQocHJldiA9PiAocHJldiA9PT0gbmV4dFRvb2xiYXIgPyBwcmV2IDogbmV4dFRvb2xiYXIpKVxuICAgIH1cblxuICAgIHVwZGF0ZUhlaWdodHMoKVxuXG4gICAgY29uc3Qgb2JzZXJ2ZXIgPSBuZXcgUmVzaXplT2JzZXJ2ZXIodXBkYXRlSGVpZ2h0cylcbiAgICBpZiAoc2hvd0NoaXBzUm93ICYmIGNoaXBzRWwpIG9ic2VydmVyLm9ic2VydmUoY2hpcHNFbClcbiAgICBpZiAodG9vbGJhckVsKSBvYnNlcnZlci5vYnNlcnZlKHRvb2xiYXJFbClcblxuICAgIHJldHVybiAoKSA9PiBvYnNlcnZlci5kaXNjb25uZWN0KClcbiAgfSwgW3Nob3dDaGlwc1JvdywgY29udGV4dENoaXA/Lml0ZW1zPy5sZW5ndGgsIGF0dGFjaG1lbnRzLmxlbmd0aF0pXG5cbiAgY29uc3QgZWRpdG9yTWF4SGVpZ2h0ID0gdXNlTWVtbyhcbiAgICAoKSA9PlxuICAgICAgZ2V0TWFpYUlucHV0RWRpdG9yTWF4SGVpZ2h0KHtcbiAgICAgICAgY2hpcHNSb3dIZWlnaHRQeDogY2hpcHNSb3dIZWlnaHQsXG4gICAgICAgIHRvb2xiYXJSb3dIZWlnaHRQeDogdG9vbGJhclJvd0hlaWdodCxcbiAgICAgIH0pLFxuICAgIFtjaGlwc1Jvd0hlaWdodCwgdG9vbGJhclJvd0hlaWdodF1cbiAgKVxuXG4gIGNvbnN0IHRvb2xiYXJJY29uQ29sb3IgPSAnIzgwODA4MCdcbiAgY29uc3QgcGx1c01lbnVJY29uQ29sb3IgPSBNQUlBX0NIQVRfSU5QVVRfVUkubWVudUljb25cbiAgY29uc3QgaXNDdXN0b21BZ2VudCA9IGFnZW50Py50eXBlID09PSAnY3VzdG9tJ1xuICBjb25zdCBoYXNDb3JBY2Nlc3MgPSBCb29sZWFuKFxuICAgIGlzQ3VzdG9tQWdlbnQgJiZcbiAgICBhZ2VudD8uY29ubmVjdG9ycz8uc29tZShcbiAgICAgIGNvbm5lY3RvciA9PlxuICAgICAgICBjb25uZWN0b3IuZ3JvdXAgPT09ICdDT1InICYmIGNvbm5lY3Rvci5zbHVncy5zb21lKHNsdWcgPT4gdHlwZW9mIHNsdWcgPT09ICdzdHJpbmcnICYmIHNsdWcudHJpbSgpLmxlbmd0aCA+IDApXG4gICAgKVxuICApXG4gIGNvbnN0IGFnZW50TW9kZWxOYW1lID0gaXNDdXN0b21BZ2VudCA/IGFnZW50Py5tb2RlbF9kaXNwbGF5X25hbWU/LnRyaW0oKSB8fCBudWxsIDogbnVsbFxuICBjb25zdCBzaG93Q3VzdG9tTWV0YUluZGljYXRvcnMgPSBoYXNDb3JBY2Nlc3MgfHwgQm9vbGVhbihhZ2VudE1vZGVsTmFtZSlcbiAgY29uc3Qgc2hvd01lbnRpb25CdXR0b24gPSBhZ2VudD8udHlwZSA9PT0gJ29yY2hlc3RyYXRvcicgfHwgaGFzQ29yQWNjZXNzXG5cbiAgbGV0IGFjdGl2ZVRvb2xDaGlwTGVhZGluZ0ljb246IFJlYWN0Tm9kZVxuICBpZiAoYWN0aXZlVG9vbENoaXBIb3ZlcmVkKSB7XG4gICAgYWN0aXZlVG9vbENoaXBMZWFkaW5nSWNvbiA9IDxDcm9zcyBjb2xvcj17TUFJQV9DSEFUX0lOUFVUX1VJLmNoaXBDbG9zZUljb259IHdpZHRoPXsxOH0gaGVpZ2h0PXsxOH0gLz5cbiAgfSBlbHNlIGlmIChpc1dlYlNlYXJjaEFjdGl2ZSkge1xuICAgIGFjdGl2ZVRvb2xDaGlwTGVhZGluZ0ljb24gPSA8TWFpYUlucHV0V2ViU2VhcmNoSWNvbiBjb2xvcj17cGx1c01lbnVJY29uQ29sb3J9IHdpZHRoPXsxOH0gaGVpZ2h0PXsxOH0gLz5cbiAgfSBlbHNlIHtcbiAgICBhY3RpdmVUb29sQ2hpcExlYWRpbmdJY29uID0gPE1haWFJbnB1dERlZXBTZWFyY2hJY29uIGNvbG9yPXtwbHVzTWVudUljb25Db2xvcn0gd2lkdGg9ezE4fSBoZWlnaHQ9ezE4fSAvPlxuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8PlxuICAgICAgPFN0eWxlZE1BSUFJbnB1dFdyYXBwZXJcbiAgICAgICAgcmVmPXt3cmFwcGVyUmVmfVxuICAgICAgICBkaXNhYmxlZD17ZmFsc2V9XG4gICAgICAgIGFsaWduQnV0dG9ucz17YWxpZ25CdXR0b25zfVxuICAgICAgICBoYXNBdHRhY2htZW50cz17ISFhdHRhY2htZW50cy5sZW5ndGh9XG4gICAgICAgIGRhdGEtYXBwY3Vlcz1cIm1haWFfY2hhdF9pbnB1dFwiXG4gICAgICAgIGRhdGEtbWFpYS1zdHJlYW1pbmc9e2lzU3RyZWFtaW5nID8gJ3RydWUnIDogJ2ZhbHNlJ31cbiAgICAgICAgc3R5bGU9e3sgcG9zaXRpb246ICdyZWxhdGl2ZScgfX1cbiAgICAgID5cbiAgICAgICAge3Nob3dTbGFzaERyb3Bkb3duICYmIChcbiAgICAgICAgICA8U2xhc2hDb21tYW5kRHJvcGRvd25cbiAgICAgICAgICAgIGNvbW1hbmRzPXtzbGFzaENvbW1hbmRzfVxuICAgICAgICAgICAgcXVlcnk9e3NsYXNoUXVlcnl9XG4gICAgICAgICAgICBvblNlbGVjdD17aGFuZGxlU2VsZWN0U2xhc2hDb21tYW5kfVxuICAgICAgICAgICAgb25DbG9zZT17aGFuZGxlQ2xvc2VTbGFzaERyb3Bkb3dufVxuICAgICAgICAgIC8+XG4gICAgICAgICl9XG4gICAgICAgIHtzaG93Q2hpcHNSb3cgJiYgKFxuICAgICAgICAgIDxTQ0lucHV0Q2hpcHNSb3cgcmVmPXtjaGlwc1Jvd1JlZn0+XG4gICAgICAgICAgICB7Y29udGV4dENoaXA/Lml0ZW1zPy5sZW5ndGggPyAoXG4gICAgICAgICAgICAgIDxDaGlwXG4gICAgICAgICAgICAgICAgaXRlbXM9e2NvbnRleHRDaGlwLml0ZW1zfVxuICAgICAgICAgICAgICAgIHR5cGU9e2NvbnRleHRDaGlwLnR5cGV9XG4gICAgICAgICAgICAgICAgbGVhZGluZ0ljb249e2NvbnRleHRDaGlwLmxlYWRpbmdJY29ufVxuICAgICAgICAgICAgICAgIHRvb2x0aXBaSW5kZXg9e3Rvb2x0aXBaSW5kZXh9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICAgIHthdHRhY2htZW50cy5tYXAoKGF0dGFjaG1lbnQsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IGlzSW1hZ2UgPVxuICAgICAgICAgICAgICAgIGF0dGFjaG1lbnQudHlwZT8uc3RhcnRzV2l0aCgnaW1hZ2UvJykgfHwgL1xcLihwbmd8anBlP2d8Z2lmfHdlYnB8Ym1wfHN2ZykkL2kudGVzdChhdHRhY2htZW50Lm5hbWUgfHwgJycpXG4gICAgICAgICAgICAgIGNvbnN0IGNoaXBJY29uID0gaXNJbWFnZSA/IChcbiAgICAgICAgICAgICAgICA8TWFpYUlucHV0QXR0YWNobWVudEltYWdlSWNvbiBjb2xvcj1cIiM4MDgwODBcIiB3aWR0aD17MTJ9IGhlaWdodD17MTJ9IC8+XG4gICAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgICAgPE1haWFJbnB1dEF0dGFjaEljb24gY29sb3I9XCIjODA4MDgwXCIgd2lkdGg9ezEzfSBoZWlnaHQ9ezEzfSAvPlxuICAgICAgICAgICAgICApXG5cbiAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICA8VG9vbHRpcCB0aXRsZT17YXR0YWNobWVudC5uYW1lfSBrZXk9e2Ake2F0dGFjaG1lbnQuaWR9LSR7aW5kZXh9YH0gekluZGV4PXt0b29sdGlwWkluZGV4fT5cbiAgICAgICAgICAgICAgICAgIDxTQ01JQXR0YWNobWVudD5cbiAgICAgICAgICAgICAgICAgICAgPFNDTUlBdHRhY2htZW50SWNvbj57Y2hpcEljb259PC9TQ01JQXR0YWNobWVudEljb24+XG4gICAgICAgICAgICAgICAgICAgIDxTQ01JQXR0YWNobWVudE5hbWU+e2F0dGFjaG1lbnQubmFtZX08L1NDTUlBdHRhY2htZW50TmFtZT5cbiAgICAgICAgICAgICAgICAgICAgPFNDTUlBdHRhY2htZW50RGVsZXRlT3ZlcmxheSBhcmlhLWhpZGRlbiAvPlxuICAgICAgICAgICAgICAgICAgICA8U0NNSUF0dGFjaG1lbnREZWxldGVJY29uXG4gICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgICAgYXJpYS1sYWJlbD17dCgnY2hhdC5yZW1vdmVBdHRhY2htZW50QXJpYScsIHsgZGVmYXVsdFZhbHVlOiAnUXVpdGFyIGFyY2hpdm8nIH0pfVxuICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IGhhbmRsZURlbGV0ZUF0dGFjaG1lbnQoYXR0YWNobWVudC5pZCl9XG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICA8Q3Jvc3MgY29sb3I9XCIjNjY2NjY2XCIgd2lkdGg9ezE0fSBoZWlnaHQ9ezE0fSAvPlxuICAgICAgICAgICAgICAgICAgICA8L1NDTUlBdHRhY2htZW50RGVsZXRlSWNvbj5cbiAgICAgICAgICAgICAgICAgIDwvU0NNSUF0dGFjaG1lbnQ+XG4gICAgICAgICAgICAgICAgPC9Ub29sdGlwPlxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9KX1cbiAgICAgICAgICA8L1NDSW5wdXRDaGlwc1Jvdz5cbiAgICAgICAgKX1cbiAgICAgICAgPFN0eWxlZE1BSUFNYWluVG9vbGJhckdyaWQ+XG4gICAgICAgICAgPFNDSW5wdXRFZGl0b3JDZWxsPlxuICAgICAgICAgICAgPENvbnRleHRNZW50aW9uRWRpdG9yXG4gICAgICAgICAgICAgIHJlZj17ZWRpdG9yUmVmfVxuICAgICAgICAgICAgICBkaXNhYmxlZD17ZGlzYWJsZWR9XG4gICAgICAgICAgICAgIHBsYWNlaG9sZGVyPXtwbGFjZWhvbGRlcn1cbiAgICAgICAgICAgICAgbWF4SGVpZ2h0PXtlZGl0b3JNYXhIZWlnaHR9XG4gICAgICAgICAgICAgIG9uSW5wdXQ9e2hhbmRsZUVkaXRvcklucHV0fVxuICAgICAgICAgICAgICBvbktleURvd249e2hhbmRsZUtleURvd259XG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvU0NJbnB1dEVkaXRvckNlbGw+XG4gICAgICAgICAgPFNDSW5wdXRUb29sYmFyUm93IHJlZj17dG9vbGJhclJvd1JlZn0+XG4gICAgICAgICAgICA8U3R5bGVkTUFJQVBsdXNUb29sYmFyQ2VsbD5cbiAgICAgICAgICAgICAgPFBsdXNNZW51VG9vbHNSb3c+XG4gICAgICAgICAgICAgICAgPFBsdXNUb2dnbGVCdXR0b25cbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgJG1lbnVPcGVuPXtwbHVzTWVudU9wZW59XG4gICAgICAgICAgICAgICAgICBvbk1vdXNlRG93bj17aGFuZGxlUGx1c0J1dHRvbk1vdXNlRG93bn1cbiAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9e2hhbmRsZVBsdXNCdXR0b25DbGlja31cbiAgICAgICAgICAgICAgICAgIGFyaWEtbGFiZWw9e3QoJ2NoYXQub3BlblBsdXNNZW51QXJpYScpfVxuICAgICAgICAgICAgICAgICAgYXJpYS1oYXNwb3B1cD1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgYXJpYS1leHBhbmRlZD17cGx1c01lbnVPcGVufVxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxNYWlhSW5wdXRBZGRJY29uIGNvbG9yPXt0b29sYmFySWNvbkNvbG9yfSB3aWR0aD17MTh9IGhlaWdodD17MTh9IC8+XG4gICAgICAgICAgICAgICAgPC9QbHVzVG9nZ2xlQnV0dG9uPlxuICAgICAgICAgICAgICAgIHtzaG93TWVudGlvbkJ1dHRvbiAmJiAoXG4gICAgICAgICAgICAgICAgICA8UGx1c1RvZ2dsZUJ1dHRvblxuICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgJG1lbnVPcGVuPXtmYWxzZX1cbiAgICAgICAgICAgICAgICAgICAgb25DbGljaz17aGFuZGxlTWVudGlvbkJ1dHRvbkNsaWNrfVxuICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZD17ZGlzYWJsZWR9XG4gICAgICAgICAgICAgICAgICAgIGFyaWEtbGFiZWw9e3QoJ2NoYXQub3Blbk1lbnRpb25BcmlhJyl9XG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxNYWlhSW5wdXRNZW50aW9uSWNvbiBjb2xvcj17dG9vbGJhckljb25Db2xvcn0gd2lkdGg9ezE4fSBoZWlnaHQ9ezE4fSAvPlxuICAgICAgICAgICAgICAgICAgPC9QbHVzVG9nZ2xlQnV0dG9uPlxuICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgPFBvcG92ZXJcbiAgICAgICAgICAgICAgICAgIG9wZW49e3BsdXNNZW51T3Blbn1cbiAgICAgICAgICAgICAgICAgIGFuY2hvckVsPXtwbHVzTWVudUFuY2hvcn1cbiAgICAgICAgICAgICAgICAgIG9uQ2xvc2U9e2Nsb3NlUGx1c01lbnV9XG4gICAgICAgICAgICAgICAgICBkaXNhYmxlQXV0b0ZvY3VzXG4gICAgICAgICAgICAgICAgICBkaXNhYmxlRW5mb3JjZUZvY3VzXG4gICAgICAgICAgICAgICAgICBkaXNhYmxlUmVzdG9yZUZvY3VzXG4gICAgICAgICAgICAgICAgICBhbmNob3JPcmlnaW49e3sgdmVydGljYWw6ICd0b3AnLCBob3Jpem9udGFsOiAnbGVmdCcgfX1cbiAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybU9yaWdpbj17eyB2ZXJ0aWNhbDogJ2JvdHRvbScsIGhvcml6b250YWw6ICdsZWZ0JyB9fVxuICAgICAgICAgICAgICAgICAgc3g9e3sgekluZGV4OiBwbHVzTWVudVpJbmRleCB9fVxuICAgICAgICAgICAgICAgICAgc2xvdFByb3BzPXt7XG4gICAgICAgICAgICAgICAgICAgIHBhcGVyOiB7XG4gICAgICAgICAgICAgICAgICAgICAgZWxldmF0aW9uOiAwLFxuICAgICAgICAgICAgICAgICAgICAgIHN4OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBvdmVyZmxvdzogJ3Zpc2libGUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyUmFkaXVzOiAnNHB4JyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJveFNoYWRvdzogJ25vbmUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiAndHJhbnNwYXJlbnQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luVG9wOiAnLTRweCcsXG4gICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPFBsdXNNZW51UGFwZXI+XG4gICAgICAgICAgICAgICAgICAgIDxQbHVzTWVudUlubmVyQ29sdW1uPlxuICAgICAgICAgICAgICAgICAgICAgIDxQbHVzTWVudUl0ZW1CdXR0b24gdHlwZT1cImJ1dHRvblwiIG9uQ2xpY2s9e2hhbmRsZVBsdXNNZW51QXR0YWNofT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxNYWlhSW5wdXRBdHRhY2hJY29uIGNvbG9yPXtwbHVzTWVudUljb25Db2xvcn0gd2lkdGg9ezIxfSBoZWlnaHQ9ezIwfSAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPFBsdXNNZW51SXRlbUxhYmVsPnt0KCdjaGF0LnBsdXNNZW51QXR0YWNoJyl9PC9QbHVzTWVudUl0ZW1MYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICA8L1BsdXNNZW51SXRlbUJ1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICA8UGx1c01lbnVEaXZpZGVyIC8+XG4gICAgICAgICAgICAgICAgICAgICAgPFBsdXNNZW51SXRlbUJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgb25DbGljaz17aGFuZGxlUGx1c01lbnVXZWJTZWFyY2h9PlxuICAgICAgICAgICAgICAgICAgICAgICAgPE1haWFJbnB1dFdlYlNlYXJjaEljb24gY29sb3I9e3BsdXNNZW51SWNvbkNvbG9yfSB3aWR0aD17MjB9IGhlaWdodD17MjB9IC8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8UGx1c01lbnVJdGVtTGFiZWw+e3QoJ2NoYXQuc2VhcmNoV2ViJyl9PC9QbHVzTWVudUl0ZW1MYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgIHtpc1dlYlNlYXJjaEFjdGl2ZSA/IDxDaGVjayBjb2xvcj17cGx1c01lbnVJY29uQ29sb3J9IHdpZHRoPXsxNn0gaGVpZ2h0PXsxNn0gLz4gOiBudWxsfVxuICAgICAgICAgICAgICAgICAgICAgIDwvUGx1c01lbnVJdGVtQnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgIDxQbHVzTWVudUl0ZW1CdXR0b24gdHlwZT1cImJ1dHRvblwiIG9uQ2xpY2s9e2hhbmRsZVBsdXNNZW51RGVlcFNlYXJjaH0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8TWFpYUlucHV0RGVlcFNlYXJjaEljb24gY29sb3I9e3BsdXNNZW51SWNvbkNvbG9yfSB3aWR0aD17MjB9IGhlaWdodD17MjB9IC8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8UGx1c01lbnVJdGVtTGFiZWw+e3QoJ2NoYXQucGx1c01lbnVEZWVwSW52ZXN0aWdhdGlvbicpfTwvUGx1c01lbnVJdGVtTGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICB7aXNEZWVwU2VhcmNoQWN0aXZlID8gPENoZWNrIGNvbG9yPXtwbHVzTWVudUljb25Db2xvcn0gd2lkdGg9ezE2fSBoZWlnaHQ9ezE2fSAvPiA6IG51bGx9XG4gICAgICAgICAgICAgICAgICAgICAgPC9QbHVzTWVudUl0ZW1CdXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgPFBsdXNNZW51RGl2aWRlciAvPlxuICAgICAgICAgICAgICAgICAgICAgIDxQbHVzTWVudUl0ZW1CdXR0b24gdHlwZT1cImJ1dHRvblwiIG9uQ2xpY2s9e2hhbmRsZVBsdXNNZW51UXVpY2tBY3Rpb25zfT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxNYWlhSW5wdXRTbGFzaEljb24gY29sb3I9e3BsdXNNZW51SWNvbkNvbG9yfSB3aWR0aD17MjB9IGhlaWdodD17MjB9IC8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8UGx1c01lbnVJdGVtTGFiZWw+e3QoJ2NoYXQucGx1c01lbnVRdWlja0FjdGlvbnMnKX08L1BsdXNNZW51SXRlbUxhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgIDwvUGx1c01lbnVJdGVtQnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8L1BsdXNNZW51SW5uZXJDb2x1bW4+XG4gICAgICAgICAgICAgICAgICA8L1BsdXNNZW51UGFwZXI+XG4gICAgICAgICAgICAgICAgPC9Qb3BvdmVyPlxuICAgICAgICAgICAgICAgIHsoaXNXZWJTZWFyY2hBY3RpdmUgfHwgaXNEZWVwU2VhcmNoQWN0aXZlKSAmJiAoXG4gICAgICAgICAgICAgICAgICA8QWN0aXZlVG9vbENoaXBSb290XG4gICAgICAgICAgICAgICAgICAgICRob3ZlcmVkPXthY3RpdmVUb29sQ2hpcEhvdmVyZWR9XG4gICAgICAgICAgICAgICAgICAgICRleGl0aW5nPXt0b29sQ2hpcEV4aXRpbmd9XG4gICAgICAgICAgICAgICAgICAgIG9uTW91c2VFbnRlcj17KCkgPT4gc2V0QWN0aXZlVG9vbENoaXBIb3ZlcmVkKHRydWUpfVxuICAgICAgICAgICAgICAgICAgICBvbk1vdXNlTGVhdmU9eygpID0+IHNldEFjdGl2ZVRvb2xDaGlwSG92ZXJlZChmYWxzZSl9XG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxBY3RpdmVUb29sQ2hpcEljb25CdXR0b25cbiAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAkY2xvc2VTaG93bj17YWN0aXZlVG9vbENoaXBIb3ZlcmVkfVxuICAgICAgICAgICAgICAgICAgICAgIGFyaWEtbGFiZWw9e3QoJ2NoYXQucmVtb3ZlQWN0aXZlVG9vbEFyaWEnKX1cbiAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXtlID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKClcbiAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luVG9vbENoaXBFeGl0KClcbiAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAge2FjdGl2ZVRvb2xDaGlwTGVhZGluZ0ljb259XG4gICAgICAgICAgICAgICAgICAgIDwvQWN0aXZlVG9vbENoaXBJY29uQnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8QWN0aXZlVG9vbENoaXBMYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICB7aXNXZWJTZWFyY2hBY3RpdmUgPyB0KCdjaGF0LnNlYXJjaFdlYicpIDogdCgnY2hhdC5wbHVzTWVudURlZXBJbnZlc3RpZ2F0aW9uJyl9XG4gICAgICAgICAgICAgICAgICAgIDwvQWN0aXZlVG9vbENoaXBMYWJlbD5cbiAgICAgICAgICAgICAgICAgIDwvQWN0aXZlVG9vbENoaXBSb290PlxuICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgIDwvUGx1c01lbnVUb29sc1Jvdz5cbiAgICAgICAgICAgIDwvU3R5bGVkTUFJQVBsdXNUb29sYmFyQ2VsbD5cbiAgICAgICAgICAgIDxTdHlsZWRNQUlBU2VuZFRvb2xiYXJDZWxsPlxuICAgICAgICAgICAgICB7c2hvd0N1c3RvbU1ldGFJbmRpY2F0b3JzICYmIChcbiAgICAgICAgICAgICAgICA8U0NJbnB1dE1ldGFJbmRpY2F0b3JzPlxuICAgICAgICAgICAgICAgICAge2hhc0NvckFjY2VzcyAmJiAoXG4gICAgICAgICAgICAgICAgICAgIDxUb29sdGlwXG4gICAgICAgICAgICAgICAgICAgICAgdGl0bGU9e3QoJ2NoYXQuZm9vdGVyLmNvckFjY2Vzc1Rvb2x0aXAnKX1cbiAgICAgICAgICAgICAgICAgICAgICB7Li4uKHRvb2x0aXBaSW5kZXggIT0gbnVsbCA/IHsgekluZGV4OiB0b29sdGlwWkluZGV4IH0gOiB7fSl9XG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICA8U0NJbnB1dE1ldGFJY29uQnV0dG9uIGFyaWEtbGFiZWw9e3QoJ2NoYXQuZm9vdGVyLmNvckFjY2Vzc0xhYmVsJyl9PlxuICAgICAgICAgICAgICAgICAgICAgICAgPENvckFjY2Vzc0ljb24gd2lkdGg9ezE1fSBoZWlnaHQ9ezE0fSBjb2xvcj17dG9vbGJhckljb25Db2xvcn0gLz5cbiAgICAgICAgICAgICAgICAgICAgICA8L1NDSW5wdXRNZXRhSWNvbkJ1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPC9Ub29sdGlwPlxuICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgIHthZ2VudE1vZGVsTmFtZSAmJiAoXG4gICAgICAgICAgICAgICAgICAgIDxUb29sdGlwXG4gICAgICAgICAgICAgICAgICAgICAgdGl0bGU9e3QoJ2NoaXBMbG0udG9vbHRpcCcsIHsgbW9kZWw6IGFnZW50TW9kZWxOYW1lIH0pfVxuICAgICAgICAgICAgICAgICAgICAgIHsuLi4odG9vbHRpcFpJbmRleCAhPSBudWxsID8geyB6SW5kZXg6IHRvb2x0aXBaSW5kZXggfSA6IHt9KX1cbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgIDxTQ0lucHV0TWV0YUljb25CdXR0b24gYXJpYS1sYWJlbD17YWdlbnRNb2RlbE5hbWV9PlxuICAgICAgICAgICAgICAgICAgICAgICAgPE1haWFJbnB1dFJvYm90SWNvbiB3aWR0aD17MTh9IGhlaWdodD17MTh9IGNvbG9yPXt0b29sYmFySWNvbkNvbG9yfSAvPlxuICAgICAgICAgICAgICAgICAgICAgIDwvU0NJbnB1dE1ldGFJY29uQnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8L1Rvb2x0aXA+XG4gICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgIDwvU0NJbnB1dE1ldGFJbmRpY2F0b3JzPlxuICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICB7aXNXcml0aW5nID8gKFxuICAgICAgICAgICAgICAgIDxUb29sdGlwIHRpdGxlPXt0KCdjaGF0LnN0b3AnKX0gekluZGV4PXt0b29sdGlwWkluZGV4fT5cbiAgICAgICAgICAgICAgICAgIDxTdHlsZWRNQUlBU3RvcEJ1dHRvbiBkaXNhYmxlZD17ZmFsc2V9IG9uQ2xpY2s9e2hhbmRsZVN0b3BHZW5lcmF0aW9ufSBjbGFzc05hbWU9e2NsYXNzTmFtZX0+XG4gICAgICAgICAgICAgICAgICAgIDxTdHlsZWRNQUlBU3RvcEljb24gLz5cbiAgICAgICAgICAgICAgICAgIDwvU3R5bGVkTUFJQVN0b3BCdXR0b24+XG4gICAgICAgICAgICAgICAgPC9Ub29sdGlwPlxuICAgICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICAgIDxUb29sdGlwIHRpdGxlPXt0KCdjaGF0LnNlbmQnKX0gekluZGV4PXt0b29sdGlwWkluZGV4fT5cbiAgICAgICAgICAgICAgICAgIDxzcGFuIHN0eWxlPXt7IGRpc3BsYXk6ICdpbmxpbmUtZmxleCcsIGFsaWduSXRlbXM6ICdjZW50ZXInIH19PlxuICAgICAgICAgICAgICAgICAgICA8U3R5bGVkTUFJQVNlbmRCdXR0b25cbiAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXtoYW5kbGVTZW5kTWVzc2FnZX1cbiAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2NsYXNzTmFtZX1cbiAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZD17c2VuZERpc2FibGVkIHx8IGRpc2FibGVkfVxuICAgICAgICAgICAgICAgICAgICAgIGhhc1ZhbHVlcz17aGFzVHlwaW5nUHJlc2VuY2UgfHwgYXR0YWNobWVudHMubGVuZ3RoID4gMH1cbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgIDxNYWlhSW5wdXRTZW5kSWNvbiBjb2xvcj1cIiNCRkJGQkZcIiB3aWR0aD17MTZ9IGhlaWdodD17MTZ9IC8+XG4gICAgICAgICAgICAgICAgICAgIDwvU3R5bGVkTUFJQVNlbmRCdXR0b24+XG4gICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9Ub29sdGlwPlxuICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgPC9TdHlsZWRNQUlBU2VuZFRvb2xiYXJDZWxsPlxuICAgICAgICAgIDwvU0NJbnB1dFRvb2xiYXJSb3c+XG4gICAgICAgIDwvU3R5bGVkTUFJQU1haW5Ub29sYmFyR3JpZD5cbiAgICAgICAgPGlucHV0XG4gICAgICAgICAgcmVmPXtmaWxlSW5wdXRSZWZ9XG4gICAgICAgICAgdHlwZT1cImZpbGVcIlxuICAgICAgICAgIG11bHRpcGxlXG4gICAgICAgICAgYWNjZXB0PVwiLnR4dCwubWQsLmNzdiwuZG9jLC5kb2N4LC5wbmcsLmpwZywuanBlZywucGRmLC54bHN4LC54bHMsLmZsYWMsLm00YSwubXAzLC5tcDQsLm9nYSwub2dnLC53YXYsLndlYm1cIlxuICAgICAgICAgIG9uQ2hhbmdlPXtoYW5kbGVGaWxlU2VsZWN0fVxuICAgICAgICAgIHN0eWxlPXt7IGRpc3BsYXk6ICdub25lJyB9fVxuICAgICAgICAvPlxuICAgICAgPC9TdHlsZWRNQUlBSW5wdXRXcmFwcGVyPlxuICAgICAge21vZGFsUHJvcHMuaXNPcGVuICYmIChcbiAgICAgICAgPE1vZGFsRmlsZUV4Y2VlZHNcbiAgICAgICAgICBvbkNsb3NlPXsoKSA9PiBzZXRNb2RhbFByb3BzKHsgaXNPcGVuOiBmYWxzZSwgZXhjbHVkZWRGaWxlczogW10sIGV4Y2VlZGVkRmlsZXM6IFtdLCBmaWxlU2l6ZXM6IHt9IH0pfVxuICAgICAgICAgIGV4Y2x1ZGVkRmlsZXM9e21vZGFsUHJvcHMuZXhjbHVkZWRGaWxlc31cbiAgICAgICAgICBleGNlZWRlZEZpbGVzPXttb2RhbFByb3BzLmV4Y2VlZGVkRmlsZXN9XG4gICAgICAgICAgZmlsZVNpemVzPXttb2RhbFByb3BzLmZpbGVTaXplc31cbiAgICAgICAgLz5cbiAgICAgICl9XG4gICAgICB7cG9wb3Zlck5vZGUgJiYgY3JlYXRlUG9ydGFsKHBvcG92ZXJOb2RlLCBkb2N1bWVudC5ib2R5KX1cbiAgICA8Lz5cbiAgKVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FNRUEsV0FBVyxFQUNYQyxTQUFTLEVBQ1RDLGVBQWUsRUFDZkMsT0FBTyxFQUNQQyxNQUFNLEVBQ05DLFFBQVEsUUFDSCxPQUFPO0FBQ2QsU0FBU0MsWUFBWSxRQUFR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