@projectcor/maia-components 2.35.9 → 2.36.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (104) hide show
  1. package/README.md +2 -0
  2. package/lib/components/atoms/ActionableButton.js +1 -6
  3. package/lib/components/atoms/ContextMentionChip/buildChipElement.js +12 -1
  4. package/lib/components/atoms/ContextMentionEditor/ContextMentionEditor.js +127 -5
  5. package/lib/components/atoms/ContextMentionItem/ContextMentionItem.js +2 -29
  6. package/lib/components/atoms/ContextMentionItem/ContextMentionItem.styles.js +24 -33
  7. package/lib/components/atoms/ContextMentionPopover/ContextMentionPopover.js +2 -19
  8. package/lib/components/atoms/FrequentlyAskedQuestions/FrequentlyAskedQuestions.js +4 -14
  9. package/lib/components/atoms/FrequentlyAskedQuestions/FrequentlyAskedQuestions.styles.js +3 -12
  10. package/lib/components/atoms/FrequentlyUsedActions/FrequentlyUsedActions.js +4 -20
  11. package/lib/components/atoms/FrequentlyUsedActions/FrequentlyUsedActions.styles.js +7 -18
  12. package/lib/components/atoms/MAIAInput/MAIAInput.js +243 -42
  13. package/lib/components/atoms/MAIAInput/styles.js +41 -44
  14. package/lib/components/atoms/SkillsDropdown/SkillsDropdown.js +208 -0
  15. package/lib/components/atoms/SkillsDropdown/SkillsDropdown.styles.js +77 -0
  16. package/lib/components/atoms/SkillsDropdown/index.js +2 -0
  17. package/lib/components/atoms/icons/PlusIcon.js +29 -0
  18. package/lib/components/atoms/icons/SkillCreatedByIcon.js +20 -0
  19. package/lib/components/atoms/icons/SkillVisibilityEveryoneIcon.js +23 -0
  20. package/lib/components/atoms/icons/SkillVisibilityOnlyMeIcon.js +23 -0
  21. package/lib/components/atoms/icons/SkillsNavIcon.js +4 -7
  22. package/lib/components/atoms/icons/index.js +5 -1
  23. package/lib/components/molecules/ChatAIContent/ChatAIContent.js +5 -3
  24. package/lib/components/molecules/ChatAIHome/ChatAIHome.js +5 -16
  25. package/lib/components/molecules/ChatAIHome/ChatAIHomeMaiaker.js +2 -23
  26. package/lib/components/molecules/ChatAIHome/ChatAIHomeMaiaker.styles.js +5 -33
  27. package/lib/components/molecules/ChatAIHome/styles.js +2 -11
  28. package/lib/components/molecules/ChatAIMessages/ChatAICreateAgentActions.js +20 -31
  29. package/lib/components/molecules/ChatAIMessages/ChatAIMessages.js +2 -7
  30. package/lib/components/molecules/ChatAIModal/ChatAIModal.js +61 -21
  31. package/lib/components/molecules/ChatAIModal/ChatAIModal.styles.js +2 -2
  32. package/lib/components/molecules/ChatAIModal/components/ChatAiAgentOptions/ChatAiAgentOptions.js +1 -8
  33. package/lib/components/molecules/ChatAIModal/components/ChatAiAgentOptions/ChatAiAgentOptions.styles.js +9 -15
  34. package/lib/components/molecules/ChatAIModal/components/ChatAiModalFooter/ChatAiModalFooter.js +3 -14
  35. package/lib/components/molecules/ChatAIModal/components/ChatAiModalFooter/ChatAiModalFooter.styles.js +2 -2
  36. package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.js +11 -17
  37. package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.styles.js +5 -14
  38. package/lib/components/molecules/ChatAIModal/layout.js +2 -2
  39. package/lib/components/molecules/ChatAIMyAgents/ChatAIMyAgents.js +2 -12
  40. package/lib/components/molecules/ChatAIMyAgents/ChatAIMyAgents.styles.js +3 -3
  41. package/lib/components/molecules/ChatAIMySkills/ChatAIMySkills.js +334 -272
  42. package/lib/components/molecules/ChatAIMySkills/ChatAIMySkills.styles.js +132 -109
  43. package/lib/components/molecules/ChatFooter/ChatFooter.js +57 -63
  44. package/lib/components/molecules/ChatFooter/styles.js +6 -12
  45. package/lib/components/molecules/ContextMentionInput/ContextMentionInput.js +1 -3
  46. package/lib/components/molecules/MessageFeedback/MessageFeedback.js +5 -15
  47. package/lib/components/molecules/Sidebar/Sidebar.js +15 -7
  48. package/lib/components/molecules/Sidebar/Sidebar.layout.styles.js +3 -3
  49. package/lib/components/organisms/AbmAgentModal/AbmAgentModal.js +11 -30
  50. package/lib/components/organisms/AbmSkillGenerateModal/AbmSkillGenerateModal.js +25 -31
  51. package/lib/components/organisms/AbmSkillModal/AbmSkillModal.js +430 -203
  52. package/lib/components/organisms/AbmSkillModal/AbmSkillModal.styles.js +131 -74
  53. package/lib/components/organisms/ChatAI/ChatAI.js +1 -6
  54. package/lib/constants/config.js +1 -4
  55. package/lib/constants/permissions/utils.js +3 -3
  56. package/lib/hooks/useChatManager/useChatManager.js +34 -55
  57. package/lib/hooks/useContextMentions.js +96 -56
  58. package/lib/hooks/useEntitySearch.js +92 -278
  59. package/lib/hooks/useEvent.js +15 -2
  60. package/lib/hooks/useMentionAllowedTypes.js +9 -25
  61. package/lib/hooks/useMentionPopover.js +9 -33
  62. package/lib/hooks/useSkillsCatalog.js +66 -0
  63. package/lib/lang/br/index.js +35 -12
  64. package/lib/lang/en/index.js +35 -12
  65. package/lib/lang/es/index.js +36 -13
  66. package/lib/lang/fr/index.js +36 -13
  67. package/lib/services/maia/Chats/getChatsByUserId.js +1 -1
  68. package/lib/services/maia/Orchestrator/orchestrator.js +11 -5
  69. package/lib/services/maia/Skills/createSkill.js +1 -1
  70. package/lib/services/maia/Skills/getSkills.js +70 -40
  71. package/lib/services/maia/Skills/updateSkill.js +1 -1
  72. package/lib/services/maia/index.js +2 -4
  73. package/lib/services/utils/fetchCOR.js +57 -106
  74. package/lib/services/utils/index.js +1 -2
  75. package/lib/store/faqsStore.types.js +1 -1
  76. package/lib/store/index.js +1 -2
  77. package/lib/store/sessions/sessionStreamManager.js +35 -61
  78. package/lib/store/sessions/sessions.types.js +1 -1
  79. package/lib/store/useChatsStore.js +3 -3
  80. package/lib/test/buttonMock.js +22 -0
  81. package/lib/test/fetchPolyfill.js +160 -0
  82. package/lib/test/fileMock.js +2 -0
  83. package/lib/test/global-context.js +49 -0
  84. package/lib/test/iconMock.js +19 -0
  85. package/lib/test/mockFetch.js +49 -0
  86. package/lib/test/portalRoot.js +13 -0
  87. package/lib/test/styleMock.js +2 -0
  88. package/lib/test/test-utils.js +26 -0
  89. package/lib/test/tooltipMock.js +11 -0
  90. package/lib/types/Chat.js +1 -1
  91. package/lib/types/FrequentlyAskedQuestion.js +1 -1
  92. package/lib/types/skill.js +1 -1
  93. package/lib/utils/contextMentionTriggers.js +2 -5
  94. package/lib/utils/renderContextMentions.js +39 -18
  95. package/package.json +9 -6
  96. package/lib/components/molecules/UsageBlockedBanner/UsageBlockedBanner.js +0 -28
  97. package/lib/components/molecules/UsageBlockedBanner/UsageBlockedBanner.styles.js +0 -47
  98. package/lib/components/molecules/UsageBlockedBanner/index.js +0 -2
  99. package/lib/services/maia/Usage/getUsage.js +0 -45
  100. package/lib/services/maia/Usage/index.js +0 -6
  101. package/lib/services/utils/MaiaApiError.js +0 -34
  102. package/lib/store/useUsageStore.js +0 -111
  103. package/lib/types/usage.js +0 -9
  104. package/lib/utils/usageBlockedMessage.js +0 -11
@@ -1,178 +1,190 @@
1
+ import _defineProperty from "@babel/runtime/helpers/defineProperty";
1
2
  import _asyncToGenerator from "@babel/runtime/helpers/asyncToGenerator";
3
+ import _toConsumableArray from "@babel/runtime/helpers/toConsumableArray";
2
4
  import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
5
+ function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
6
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
3
7
  import _regeneratorRuntime from "@babel/runtime/regenerator";
4
- import React, { useCallback, useEffect, useMemo, useState } from 'react';
8
+ import React, { useCallback, useEffect, useMemo, useRef, useState } from 'react';
5
9
  import { MenuDots } from '@projectcor/icons/lib/components/MenuDots';
10
+ import { Search } from '@projectcor/icons/lib/components/Search';
11
+ import { InformationCircle } from '@projectcor/icons/lib/components/InformationCircle';
12
+ import { Tooltip } from '@projectcor/tooltipv2/lib/components/Tooltip';
6
13
  import { useTranslation } from 'react-i18next';
7
- import { useUser } from '../../../context/cor-user';
8
14
  import { deleteSkill } from '../../../services/maia/Skills/deleteSkill';
9
15
  import { useSnackBarManager } from '../../../hooks/useSnackBarManager/useSnackBarManager';
16
+ import { EVENTS, useEvent } from '../../../hooks/useEvent';
17
+ import { useMaiaTaskPanelZIndex } from '../../../hooks/useMaiaTaskPanelZIndex';
10
18
  import { DeleteQuestionModal } from '../../organisms/DeleteQuestionModal/DeleteQuestionModal';
11
- import { SKILL_GENERATE_OPEN_EVENT } from '../../organisms/AbmSkillGenerateModal/AbmSkillGenerateModal';
19
+ import { SKILL_USE_AFTER_SAVE_EVENT } from '../../organisms/AbmSkillModal/AbmSkillModal';
12
20
  import { SECTIONS } from '../../../constants/config';
13
21
  import { Loader } from '../../atoms/Loader';
14
- import { SCMSBody, SCMSCardBody, SCMSCardButton, SCMSCardContentText, SCMSCardFooter, SCMSCardFooterDate, SCMSCardHeader, SCMSCardMenu, SCMSCardMenuItem, SCMSCardMenuItems, SCMSCardTitleName, SCMSCardTopRow, SCMSCardsOuter, SCMSCardsRow, SCMSContainer, SCMSCreateButton, SCMSCreateButtonText, SCMSCreateMenu, SCMSCreateMenuItem, SCMSCreateMenuWrap, SCMSEmptyStateButton, SCMSEmptyStateColumn, SCMSEmptyStateRoot, SCMSEmptyStateSubtitle, SCMSEmptyStateTitle, SCMSEmptyStateTitleBlock, SCMSKebabButton, SCMSLoadWrapper, SCMSTitle, SCMSSubtitle, SCMSActionsRow, SCMSTitleInner, SCMSTitleWrap, SCMSBlockedBannerWrap } from './ChatAIMySkills.styles';
15
- import { MAIAIsologo } from '../../atoms/icons';
16
- import { useUsageStore } from '../../../store/useUsageStore';
17
- import { UsageBlockedBanner } from '../UsageBlockedBanner/UsageBlockedBanner';
18
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
22
+ import { SkillCreatedByIcon } from '../../atoms/icons/SkillCreatedByIcon';
23
+ import { SkillVisibilityEveryoneIcon } from '../../atoms/icons/SkillVisibilityEveryoneIcon';
24
+ import { SkillVisibilityOnlyMeIcon } from '../../atoms/icons/SkillVisibilityOnlyMeIcon';
25
+ import { SCMSBody, SCMSCardButton, SCMSCardContentText, SCMSCardMenu, SCMSCardMenuItem, SCMSCardTitleName, SCMSCardTopRow, SCMSCardVisibilityRow, SCMSCardVisibilityText, SCMSCardsList, SCMSContainer, SCMSCreateButton, SCMSCreateButtonText, SCMSSharedEmptyStateRoot, SCMSSharedEmptyStateSubtitle, SCMSSharedEmptyStateTitle, SCMSSharedEmptyStateTitleBlock, SCMSKebabButton, SCMSLoadWrapper, SCMSMetaDescription, SCMSMetaRow, SCMSPanel, SCMSPanelHeader, SCMSListScrollArea, SCMSSearchInput, SCMSSearchWrapper, SCMSTabBar, SCMSTabButton, SCMSTabInfoIcon, SCMSTitle, SCMSTitleBlock } from './ChatAIMySkills.styles';
26
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
27
+ var DROPDOWN_GAP_PX = 6;
28
+ var CARD_MENU_ITEM_HEIGHT_PX = 40;
29
+ var resolveDropdownPlacement = function resolveDropdownPlacement(anchor, dropdownHeight) {
30
+ var rect = anchor.getBoundingClientRect();
31
+ var spaceBelow = window.innerHeight - rect.bottom - DROPDOWN_GAP_PX;
32
+ var spaceAbove = rect.top - DROPDOWN_GAP_PX;
33
+ if (spaceBelow >= dropdownHeight) return 'bottom';
34
+ if (spaceAbove >= dropdownHeight) return 'top';
35
+ return spaceBelow >= spaceAbove ? 'bottom' : 'top';
36
+ };
37
+ var formatSkillDisplayName = function formatSkillDisplayName(name) {
38
+ var normalized = name.replace(/^(@\/|#)/, '');
39
+ return "#".concat(normalized);
40
+ };
19
41
  var openSkillModal = function openSkillModal(values) {
42
+ var analyticsSource = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'catalog';
20
43
  document.dispatchEvent(new CustomEvent('abm-skill-modal-set-values', {
21
44
  detail: {
22
45
  skillValues: {
23
46
  values: values,
24
47
  isOpen: true
25
- }
48
+ },
49
+ analyticsSource: analyticsSource
26
50
  }
27
51
  }));
28
52
  };
29
- var IconChat = function IconChat() {
30
- return /*#__PURE__*/_jsx("svg", {
31
- width: "16",
32
- height: "16",
33
- viewBox: "0 0 16 16",
34
- fill: "none",
35
- "aria-hidden": "true",
36
- children: /*#__PURE__*/_jsx("path", {
37
- d: "M14 7.5a5.5 5.5 0 0 1-7.9 4.96L2.5 13.5l1.04-3.1A5.5 5.5 0 1 1 14 7.5Z",
38
- stroke: "#666",
39
- strokeWidth: "1.3",
40
- strokeLinejoin: "round"
41
- })
42
- });
43
- };
44
- var IconClipboard = function IconClipboard() {
45
- return /*#__PURE__*/_jsxs("svg", {
46
- width: "16",
47
- height: "16",
48
- viewBox: "0 0 16 16",
49
- fill: "none",
50
- "aria-hidden": "true",
51
- children: [/*#__PURE__*/_jsx("rect", {
52
- x: "3.5",
53
- y: "3",
54
- width: "9",
55
- height: "11",
56
- rx: "1.5",
57
- stroke: "#666",
58
- strokeWidth: "1.3"
59
- }), /*#__PURE__*/_jsx("rect", {
60
- x: "5.75",
61
- y: "1.75",
62
- width: "4.5",
63
- height: "2.5",
64
- rx: "0.75",
65
- stroke: "#666",
66
- strokeWidth: "1.3"
67
- }), /*#__PURE__*/_jsx("path", {
68
- d: "M6 7.5h4M6 10h3",
69
- stroke: "#666",
70
- strokeWidth: "1.3",
71
- strokeLinecap: "round"
72
- })]
73
- });
74
- };
75
- var IconUpload = function IconUpload() {
76
- return /*#__PURE__*/_jsxs("svg", {
77
- width: "16",
78
- height: "16",
79
- viewBox: "0 0 16 16",
80
- fill: "none",
81
- "aria-hidden": "true",
82
- children: [/*#__PURE__*/_jsx("path", {
83
- d: "M8 10.5V3M8 3 5.5 5.5M8 3l2.5 2.5",
84
- stroke: "#666",
85
- strokeWidth: "1.3",
86
- strokeLinecap: "round",
87
- strokeLinejoin: "round"
88
- }), /*#__PURE__*/_jsx("path", {
89
- d: "M3 10v2a1 1 0 0 0 1 1h8a1 1 0 0 0 1-1v-2",
90
- stroke: "#666",
91
- strokeWidth: "1.3",
92
- strokeLinecap: "round"
53
+ var SkillSearchInput = /*#__PURE__*/React.memo(function (_ref) {
54
+ var onSearch = _ref.onSearch,
55
+ placeholder = _ref.placeholder;
56
+ var _useState = useState(''),
57
+ _useState2 = _slicedToArray(_useState, 2),
58
+ value = _useState2[0],
59
+ setValue = _useState2[1];
60
+ var debounceRef = useRef(null);
61
+ var handleChange = useCallback(function (event) {
62
+ var nextValue = event.target.value;
63
+ setValue(nextValue);
64
+ if (debounceRef.current) clearTimeout(debounceRef.current);
65
+ debounceRef.current = setTimeout(function () {
66
+ onSearch(nextValue.trim());
67
+ }, 250);
68
+ }, [onSearch]);
69
+ useEffect(function () {
70
+ return function () {
71
+ if (debounceRef.current) clearTimeout(debounceRef.current);
72
+ };
73
+ }, []);
74
+ return /*#__PURE__*/_jsxs(SCMSSearchWrapper, {
75
+ children: [/*#__PURE__*/_jsx(Search, {
76
+ width: 16,
77
+ height: 16,
78
+ color: "#999"
79
+ }), /*#__PURE__*/_jsx(SCMSSearchInput, {
80
+ type: "text",
81
+ value: value,
82
+ onChange: handleChange,
83
+ placeholder: placeholder
93
84
  })]
94
85
  });
95
- };
96
- export var ChatAIMySkills = function ChatAIMySkills(_ref) {
97
- var _user$permissions;
98
- var skills = _ref.skills,
99
- _ref$loading = _ref.loading,
100
- loading = _ref$loading === void 0 ? false : _ref$loading,
101
- onDeleteSkill = _ref.onDeleteSkill;
86
+ });
87
+ export var ChatAIMySkills = function ChatAIMySkills(_ref2) {
88
+ var mySkills = _ref2.mySkills,
89
+ sharedSkills = _ref2.sharedSkills,
90
+ _ref2$loading = _ref2.loading,
91
+ loading = _ref2$loading === void 0 ? false : _ref2$loading,
92
+ onDeleteSkill = _ref2.onDeleteSkill;
102
93
  var _useTranslation = useTranslation([SECTIONS.chatAI]),
103
94
  t = _useTranslation.t;
104
- var user = useUser();
95
+ var eventAmplitude = useEvent();
105
96
  var _useSnackBarManager = useSnackBarManager(),
106
97
  handleSnackbarSuccess = _useSnackBarManager.handleSnackbarSuccess,
107
98
  handleSnackbarError = _useSnackBarManager.handleSnackbarError;
108
- var usageBlocked = useUsageStore(function (state) {
109
- return state.blocked;
110
- });
111
- var usageBlockedMessage = useUsageStore(function (state) {
112
- return state.quotaExceededMessage;
113
- });
114
- var _useState = useState(null),
115
- _useState2 = _slicedToArray(_useState, 2),
116
- menuOpenForSkillId = _useState2[0],
117
- setMenuOpenForSkillId = _useState2[1];
118
- var _useState3 = useState(false),
99
+ var tooltipZIndex = useMaiaTaskPanelZIndex(1500, 'overlay');
100
+ var listScrollRef = useRef(null);
101
+ var _useState3 = useState('mine'),
119
102
  _useState4 = _slicedToArray(_useState3, 2),
120
- createMenuOpen = _useState4[0],
121
- setCreateMenuOpen = _useState4[1];
122
- var _useState5 = useState(null),
103
+ activeTab = _useState4[0],
104
+ setActiveTab = _useState4[1];
105
+ var _useState5 = useState(''),
123
106
  _useState6 = _slicedToArray(_useState5, 2),
124
- skillToDelete = _useState6[0],
125
- setSkillToDelete = _useState6[1];
126
- var userPermissions = user === null || user === void 0 || (_user$permissions = user.permissions) === null || _user$permissions === void 0 ? void 0 : _user$permissions.ai_agents;
127
- var canCreate = !!(userPermissions !== null && userPermissions !== void 0 && userPermissions.create) && !!window.MAIA_CHAT_AI_FEATURE_ACCESS_MULTI_AGENTS;
128
- var canEdit = !!(userPermissions !== null && userPermissions !== void 0 && userPermissions.edit) && !!window.MAIA_CHAT_AI_FEATURE_ACCESS_MULTI_AGENTS;
129
- var canDelete = !!(userPermissions !== null && userPermissions !== void 0 && userPermissions["delete"]) && !!window.MAIA_CHAT_AI_FEATURE_ACCESS_MULTI_AGENTS;
130
- var canShowMenu = canEdit || canDelete;
131
- var openCreateSkillModal = useCallback(function () {
132
- if (usageBlocked) return;
133
- openSkillModal({
134
- isEditing: false
107
+ searchQuery = _useState6[0],
108
+ setSearchQuery = _useState6[1];
109
+ var _useState7 = useState(null),
110
+ _useState8 = _slicedToArray(_useState7, 2),
111
+ menuOpenForSkillId = _useState8[0],
112
+ setMenuOpenForSkillId = _useState8[1];
113
+ var _useState9 = useState('bottom'),
114
+ _useState0 = _slicedToArray(_useState9, 2),
115
+ cardMenuPlacement = _useState0[0],
116
+ setCardMenuPlacement = _useState0[1];
117
+ var _useState1 = useState(null),
118
+ _useState10 = _slicedToArray(_useState1, 2),
119
+ skillToDelete = _useState10[0],
120
+ setSkillToDelete = _useState10[1];
121
+ var isMineTab = activeTab === 'mine';
122
+ var tabSkills = isMineTab ? mySkills : sharedSkills;
123
+ var filteredSkills = useMemo(function () {
124
+ var normalizedQuery = searchQuery.toLowerCase();
125
+ var matched = normalizedQuery ? tabSkills.filter(function (skill) {
126
+ return skill.name.toLowerCase().includes(normalizedQuery);
127
+ }) : tabSkills;
128
+ return _toConsumableArray(matched).sort(function (a, b) {
129
+ return a.name.localeCompare(b.name);
135
130
  });
136
- }, [usageBlocked]);
137
- var handleCreateOption = useCallback(function (intent) {
138
- if (usageBlocked) return;
139
- setCreateMenuOpen(false);
140
- if (intent === 'generate') {
141
- // "Crear con Maia" abre el modal simple de descripción (no el editor).
142
- document.dispatchEvent(new CustomEvent(SKILL_GENERATE_OPEN_EVENT));
143
- return;
144
- }
131
+ }, [searchQuery, tabSkills]);
132
+ var handleCreateSkill = useCallback(function () {
133
+ var fromEmpty = activeTab === 'mine' && !loading && mySkills.length === 0 && !searchQuery;
145
134
  openSkillModal({
146
135
  isEditing: false,
147
- intent: intent
136
+ intent: 'write'
137
+ }, fromEmpty ? 'empty' : 'catalog');
138
+ }, [activeTab, loading, mySkills.length, searchQuery]);
139
+
140
+ // "Mis skills" tiene Usar + Editar + Eliminar; "Compartidas" solo Usar.
141
+ var cardMenuHeightPx = isMineTab ? CARD_MENU_ITEM_HEIGHT_PX * 3 : CARD_MENU_ITEM_HEIGHT_PX;
142
+ var handleToggleCardMenu = useCallback(function (event, skillId) {
143
+ event.preventDefault();
144
+ event.stopPropagation();
145
+ var cardAnchor = event.currentTarget.closest('[data-skill-card-id]');
146
+ if (cardAnchor instanceof HTMLElement) {
147
+ setCardMenuPlacement(resolveDropdownPlacement(cardAnchor, cardMenuHeightPx));
148
+ }
149
+ setMenuOpenForSkillId(function (prev) {
150
+ return prev === skillId ? null : skillId;
151
+ });
152
+ }, [cardMenuHeightPx]);
153
+
154
+ /** Mismo flujo que el botón "Usar skill" del modal: chat nuevo con el primer agente y la mención puesta. */
155
+ var handleUseSkill = useCallback(function (skill) {
156
+ eventAmplitude(EVENTS.aiChatSkillUse, {
157
+ skill_id: skill.id,
158
+ access_type: skill.access_type || 'only_me',
159
+ source: 'card',
160
+ is_shared: !isMineTab
148
161
  });
149
- }, [usageBlocked]);
150
- var handleOpenEditSkill = useCallback(function (skill) {
151
- if (usageBlocked) return;
162
+ document.dispatchEvent(new CustomEvent(SKILL_USE_AFTER_SAVE_EVENT, {
163
+ detail: {
164
+ skill: skill,
165
+ useFirstAgent: true
166
+ }
167
+ }));
168
+ setMenuOpenForSkillId(null);
169
+ }, [eventAmplitude, isMineTab]);
170
+ var handleOpenSkill = useCallback(function (skill, isReadOnly) {
152
171
  openSkillModal({
153
172
  isEditing: true,
173
+ isReadOnly: isReadOnly,
174
+ isShared: !isMineTab,
154
175
  general: {
155
176
  id: skill.id,
156
177
  name: skill.name,
157
- content: skill.content
178
+ description: skill.description,
179
+ content: skill.content,
180
+ access_type: skill.access_type,
181
+ created_by_name: skill.created_by_name,
182
+ created_at: skill.created_at,
183
+ updated_at: skill.updated_at
158
184
  }
159
185
  });
160
186
  setMenuOpenForSkillId(null);
161
- }, [usageBlocked]);
162
- var getCreatedAtLabel = function getCreatedAtLabel(skill) {
163
- var createdAt = skill.created_at;
164
- if (!createdAt) return '';
165
- var createdAtDate = new Date(createdAt);
166
- if (Number.isNaN(createdAtDate.getTime())) return '';
167
- var diffMs = Date.now() - createdAtDate.getTime();
168
- var dayMs = 1000 * 60 * 60 * 24;
169
- var days = Math.max(0, Math.floor(diffMs / dayMs));
170
- if (days === 0) return t('marketplace.myAgentsToday');
171
- if (days === 1) return t('marketplace.myAgentsOneDayAgo');
172
- return t('marketplace.myAgentsDaysAgo', {
173
- days: days
174
- });
175
- };
187
+ }, [isMineTab]);
176
188
  var deleteModalChat = useMemo(function () {
177
189
  return skillToDelete ? {
178
190
  title: skillToDelete.name,
@@ -180,7 +192,7 @@ export var ChatAIMySkills = function ChatAIMySkills(_ref) {
180
192
  } : null;
181
193
  }, [skillToDelete]);
182
194
  var handleConfirmDelete = /*#__PURE__*/function () {
183
- var _ref2 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee(chat) {
195
+ var _ref3 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee(chat) {
184
196
  var _t;
185
197
  return _regeneratorRuntime.wrap(function (_context) {
186
198
  while (1) switch (_context.prev = _context.next) {
@@ -189,6 +201,10 @@ export var ChatAIMySkills = function ChatAIMySkills(_ref) {
189
201
  _context.next = 1;
190
202
  return deleteSkill(chat.id);
191
203
  case 1:
204
+ eventAmplitude(EVENTS.aiChatSkillAbmDelete, {
205
+ skill_id: chat.id,
206
+ source: 'catalog'
207
+ });
192
208
  handleSnackbarSuccess(t('mySkills.deleteSuccess'));
193
209
  onDeleteSkill === null || onDeleteSkill === void 0 || onDeleteSkill(chat.id);
194
210
  setSkillToDelete(null);
@@ -206,7 +222,7 @@ export var ChatAIMySkills = function ChatAIMySkills(_ref) {
206
222
  }, _callee, null, [[0, 2]]);
207
223
  }));
208
224
  return function handleConfirmDelete(_x) {
209
- return _ref2.apply(this, arguments);
225
+ return _ref3.apply(this, arguments);
210
226
  };
211
227
  }();
212
228
  useEffect(function () {
@@ -214,164 +230,210 @@ export var ChatAIMySkills = function ChatAIMySkills(_ref) {
214
230
  if (menuOpenForSkillId) {
215
231
  setMenuOpenForSkillId(null);
216
232
  }
217
- if (createMenuOpen) {
218
- setCreateMenuOpen(false);
219
- }
220
233
  };
221
234
  document.addEventListener('click', handleClickOutside);
222
235
  return function () {
223
236
  document.removeEventListener('click', handleClickOutside);
224
237
  };
225
- }, [menuOpenForSkillId, createMenuOpen]);
226
- return /*#__PURE__*/_jsxs(SCMSContainer, {
227
- $hasSkills: !!skills.length,
228
- children: [/*#__PURE__*/_jsx(MAIAIsologo, {}), /*#__PURE__*/_jsxs(SCMSBody, {
229
- $canCreate: canCreate,
230
- children: [skills.length ? /*#__PURE__*/_jsxs(SCMSTitleWrap, {
231
- children: [/*#__PURE__*/_jsxs(SCMSTitleInner, {
232
- children: [/*#__PURE__*/_jsx(SCMSTitle, {
233
- children: t('mySkills.title')
234
- }), /*#__PURE__*/_jsx(SCMSSubtitle, {
235
- children: t('mySkills.subtitle')
238
+ }, [menuOpenForSkillId]);
239
+ useEffect(function () {
240
+ if (!menuOpenForSkillId) return undefined;
241
+ var handleReposition = function handleReposition() {
242
+ var _listScrollRef$curren;
243
+ var openCard = (_listScrollRef$curren = listScrollRef.current) === null || _listScrollRef$curren === void 0 ? void 0 : _listScrollRef$curren.querySelector("[data-skill-card-id=\"".concat(menuOpenForSkillId, "\"]"));
244
+ if (openCard) {
245
+ setCardMenuPlacement(resolveDropdownPlacement(openCard, cardMenuHeightPx));
246
+ }
247
+ };
248
+ var scrollContainer = listScrollRef.current;
249
+ scrollContainer === null || scrollContainer === void 0 || scrollContainer.addEventListener('scroll', handleReposition, {
250
+ passive: true
251
+ });
252
+ window.addEventListener('resize', handleReposition);
253
+ return function () {
254
+ scrollContainer === null || scrollContainer === void 0 || scrollContainer.removeEventListener('scroll', handleReposition);
255
+ window.removeEventListener('resize', handleReposition);
256
+ };
257
+ }, [menuOpenForSkillId, cardMenuHeightPx]);
258
+ var tabDescription = isMineTab ? t('mySkills.mySkillsDescription') : t('mySkills.sharedSkillsDescription');
259
+ var isMineEmpty = isMineTab && !loading && mySkills.length === 0 && !searchQuery;
260
+ var showSkillsToolbar = isMineTab ? !isMineEmpty : tabSkills.length > 0 || !!searchQuery;
261
+ var renderCreateSkillButton = function renderCreateSkillButton() {
262
+ return /*#__PURE__*/_jsx(SCMSCreateButton, {
263
+ type: "button",
264
+ onClick: handleCreateSkill,
265
+ children: /*#__PURE__*/_jsx(SCMSCreateButtonText, {
266
+ children: t('mySkills.createSkill')
267
+ })
268
+ });
269
+ };
270
+ var renderSearchEmptyState = function renderSearchEmptyState() {
271
+ return /*#__PURE__*/_jsx(SCMSSharedEmptyStateRoot, {
272
+ children: /*#__PURE__*/_jsxs(SCMSSharedEmptyStateTitleBlock, {
273
+ children: [/*#__PURE__*/_jsx(SCMSSharedEmptyStateTitle, {
274
+ children: t('mySkills.searchEmptyStateTitle')
275
+ }), /*#__PURE__*/_jsx(SCMSSharedEmptyStateSubtitle, {
276
+ children: t('mySkills.searchEmptyStateDescription')
277
+ })]
278
+ })
279
+ });
280
+ };
281
+ var renderEmptyState = function renderEmptyState() {
282
+ if (!isMineTab) {
283
+ if (searchQuery) {
284
+ return renderSearchEmptyState();
285
+ }
286
+ return /*#__PURE__*/_jsx(SCMSSharedEmptyStateRoot, {
287
+ children: /*#__PURE__*/_jsxs(SCMSSharedEmptyStateTitleBlock, {
288
+ children: [/*#__PURE__*/_jsx(SCMSSharedEmptyStateTitle, {
289
+ children: t('mySkills.sharedEmptyStateTitle')
290
+ }), /*#__PURE__*/_jsx(SCMSSharedEmptyStateSubtitle, {
291
+ children: t('mySkills.sharedEmptyStateDescription')
236
292
  })]
237
- }), canCreate ? /*#__PURE__*/_jsx(SCMSActionsRow, {
238
- children: /*#__PURE__*/_jsxs(SCMSCreateMenuWrap, {
239
- children: [/*#__PURE__*/_jsx(SCMSCreateButton, {
293
+ })
294
+ });
295
+ }
296
+ if (searchQuery) {
297
+ return renderSearchEmptyState();
298
+ }
299
+ return /*#__PURE__*/_jsxs(SCMSSharedEmptyStateRoot, {
300
+ children: [/*#__PURE__*/_jsxs(SCMSSharedEmptyStateTitleBlock, {
301
+ children: [/*#__PURE__*/_jsx(SCMSSharedEmptyStateTitle, {
302
+ children: t('mySkills.emptyStateTitle')
303
+ }), /*#__PURE__*/_jsx(SCMSSharedEmptyStateSubtitle, {
304
+ children: t('mySkills.emptyStateDescription')
305
+ })]
306
+ }), renderCreateSkillButton()]
307
+ });
308
+ };
309
+ return /*#__PURE__*/_jsxs(SCMSContainer, {
310
+ children: [/*#__PURE__*/_jsxs(SCMSBody, {
311
+ children: [/*#__PURE__*/_jsx(SCMSTitleBlock, {
312
+ children: /*#__PURE__*/_jsx(SCMSTitle, {
313
+ children: t('mySkills.title')
314
+ })
315
+ }), /*#__PURE__*/_jsxs(SCMSPanel, {
316
+ children: [/*#__PURE__*/_jsxs(SCMSPanelHeader, {
317
+ children: [/*#__PURE__*/_jsxs(SCMSTabBar, {
318
+ children: [/*#__PURE__*/_jsx(SCMSTabButton, {
240
319
  type: "button",
241
- disabled: usageBlocked,
242
- "aria-disabled": usageBlocked,
243
- onClick: function onClick(event) {
244
- event.stopPropagation();
245
- if (usageBlocked) return;
246
- setCreateMenuOpen(function (prev) {
247
- return !prev;
248
- });
320
+ $active: isMineTab,
321
+ onClick: function onClick() {
322
+ return setActiveTab('mine');
249
323
  },
250
- children: /*#__PURE__*/_jsx(SCMSCreateButtonText, {
251
- children: t('mySkills.createSkill')
252
- })
253
- }), createMenuOpen ? /*#__PURE__*/_jsxs(SCMSCreateMenu, {
254
- onClick: function onClick(event) {
255
- return event.stopPropagation();
324
+ children: t('mySkills.tabMySkills')
325
+ }), /*#__PURE__*/_jsx(SCMSTabButton, {
326
+ type: "button",
327
+ $active: !isMineTab,
328
+ onClick: function onClick() {
329
+ return setActiveTab('shared');
256
330
  },
257
- children: [/*#__PURE__*/_jsxs(SCMSCreateMenuItem, {
258
- type: "button",
259
- disabled: usageBlocked,
260
- "aria-disabled": usageBlocked,
261
- onClick: function onClick() {
262
- return handleCreateOption('generate');
263
- },
264
- children: [/*#__PURE__*/_jsx(IconChat, {}), t('mySkills.createWithMaia')]
265
- }), /*#__PURE__*/_jsxs(SCMSCreateMenuItem, {
266
- type: "button",
267
- disabled: usageBlocked,
268
- "aria-disabled": usageBlocked,
269
- onClick: function onClick() {
270
- return handleCreateOption('write');
271
- },
272
- children: [/*#__PURE__*/_jsx(IconClipboard, {}), t('mySkills.writeInstructions')]
273
- }), /*#__PURE__*/_jsxs(SCMSCreateMenuItem, {
331
+ children: t('mySkills.tabSharedSkills')
332
+ }), /*#__PURE__*/_jsx(Tooltip, _objectSpread(_objectSpread({
333
+ title: t('mySkills.infoTooltip')
334
+ }, tooltipZIndex != null ? {
335
+ zIndex: tooltipZIndex
336
+ } : {}), {}, {
337
+ children: /*#__PURE__*/_jsx(SCMSTabInfoIcon, {
338
+ "aria-label": t('mySkills.infoTooltip'),
339
+ children: /*#__PURE__*/_jsx(InformationCircle, {
340
+ color: "#808080",
341
+ width: 20,
342
+ height: 20
343
+ })
344
+ })
345
+ }))]
346
+ }), showSkillsToolbar ? /*#__PURE__*/_jsxs(_Fragment, {
347
+ children: [/*#__PURE__*/_jsxs(SCMSMetaRow, {
348
+ children: [/*#__PURE__*/_jsx(SCMSMetaDescription, {
349
+ children: tabDescription
350
+ }), isMineTab ? renderCreateSkillButton() : null]
351
+ }), /*#__PURE__*/_jsx(SkillSearchInput, {
352
+ onSearch: setSearchQuery,
353
+ placeholder: t('mySkills.searchPlaceholder')
354
+ })]
355
+ }) : null]
356
+ }), /*#__PURE__*/_jsxs(SCMSListScrollArea, {
357
+ ref: listScrollRef,
358
+ children: [loading ? /*#__PURE__*/_jsx(SCMSLoadWrapper, {
359
+ children: /*#__PURE__*/_jsx(Loader, {
360
+ size: "small"
361
+ })
362
+ }) : null, !loading && filteredSkills.length ? /*#__PURE__*/_jsx(SCMSCardsList, {
363
+ children: filteredSkills.map(function (skill, index) {
364
+ return /*#__PURE__*/_jsxs(SCMSCardButton, {
274
365
  type: "button",
275
- disabled: usageBlocked,
276
- "aria-disabled": usageBlocked,
366
+ "data-skill-card-id": skill.id,
367
+ $index: index,
368
+ $elevated: menuOpenForSkillId === skill.id,
277
369
  onClick: function onClick() {
278
- return handleCreateOption('upload');
370
+ return handleOpenSkill(skill, true);
279
371
  },
280
- children: [/*#__PURE__*/_jsx(IconUpload, {}), t('mySkills.uploadSkill')]
281
- })]
282
- }) : null]
283
- })
284
- }) : null]
285
- }) : null, loading ? /*#__PURE__*/_jsx(SCMSLoadWrapper, {
286
- children: /*#__PURE__*/_jsx(Loader, {
287
- size: "small"
288
- })
289
- }) : null, !loading && skills.length ? /*#__PURE__*/_jsx(SCMSCardsOuter, {
290
- children: /*#__PURE__*/_jsx(SCMSCardsRow, {
291
- children: skills.map(function (skill) {
292
- return /*#__PURE__*/_jsxs(SCMSCardButton, {
293
- type: "button",
294
- onClick: function onClick() {
295
- return canEdit && !usageBlocked && handleOpenEditSkill(skill);
296
- },
297
- children: [/*#__PURE__*/_jsx(SCMSCardHeader, {
298
- children: /*#__PURE__*/_jsxs(SCMSCardTopRow, {
372
+ children: [/*#__PURE__*/_jsxs(SCMSCardTopRow, {
299
373
  children: [/*#__PURE__*/_jsx(SCMSCardTitleName, {
300
- children: skill.name
301
- }), canShowMenu ? /*#__PURE__*/_jsx(SCMSKebabButton, {
374
+ children: formatSkillDisplayName(skill.name)
375
+ }), /*#__PURE__*/_jsx(SCMSKebabButton, {
302
376
  type: "button",
377
+ $visible: menuOpenForSkillId === skill.id,
303
378
  "aria-label": t('mySkills.cardMenuAriaLabel'),
304
379
  onClick: function onClick(event) {
305
- event.preventDefault();
306
- event.stopPropagation();
307
- setMenuOpenForSkillId(function (prev) {
308
- return prev === skill.id ? null : skill.id;
309
- });
380
+ return handleToggleCardMenu(event, skill.id);
310
381
  },
311
382
  children: /*#__PURE__*/_jsx(MenuDots, {
312
- color: "#999",
313
- width: 15,
314
- height: 15
383
+ color: "#808080",
384
+ width: 20,
385
+ height: 20
315
386
  })
387
+ })]
388
+ }), /*#__PURE__*/_jsx(SCMSCardContentText, {
389
+ children: skill.description || skill.content
390
+ }), /*#__PURE__*/_jsxs(SCMSCardVisibilityRow, {
391
+ children: [isMineTab ? /*#__PURE__*/_jsxs(_Fragment, {
392
+ children: [skill.access_type === 'company' ? /*#__PURE__*/_jsx(SkillVisibilityEveryoneIcon, {}) : /*#__PURE__*/_jsx(SkillVisibilityOnlyMeIcon, {}), /*#__PURE__*/_jsx(SCMSCardVisibilityText, {
393
+ children: skill.access_type === 'company' ? t('mySkills.visibilityEveryone') : t('mySkills.visibilityOnlyMe')
394
+ })]
395
+ }) : null, !isMineTab && skill.created_by_name ? /*#__PURE__*/_jsxs(_Fragment, {
396
+ children: [/*#__PURE__*/_jsx(SkillCreatedByIcon, {}), /*#__PURE__*/_jsx(SCMSCardVisibilityText, {
397
+ children: t('mySkills.sharedCreatedBy', {
398
+ name: skill.created_by_name
399
+ })
400
+ })]
316
401
  }) : null]
317
- })
318
- }), /*#__PURE__*/_jsxs(SCMSCardBody, {
319
- children: [/*#__PURE__*/_jsx(SCMSCardContentText, {
320
- children: skill.content
321
- }), /*#__PURE__*/_jsx(SCMSCardFooter, {
322
- children: /*#__PURE__*/_jsx(SCMSCardFooterDate, {
323
- children: getCreatedAtLabel(skill) || t('marketplace.myAgentsFallbackDate')
324
- })
325
- })]
326
- }), menuOpenForSkillId === skill.id && canShowMenu ? /*#__PURE__*/_jsx(SCMSCardMenu, {
327
- onClick: function onClick(event) {
328
- event.preventDefault();
329
- event.stopPropagation();
330
- },
331
- children: /*#__PURE__*/_jsxs(SCMSCardMenuItems, {
332
- children: [canEdit ? /*#__PURE__*/_jsx(SCMSCardMenuItem, {
333
- type: "button",
334
- disabled: usageBlocked,
335
- "aria-disabled": usageBlocked,
336
- onClick: function onClick() {
337
- return handleOpenEditSkill(skill);
338
- },
339
- children: t('mySkills.edit')
340
- }) : null, canDelete ? /*#__PURE__*/_jsx(SCMSCardMenuItem, {
402
+ }), menuOpenForSkillId === skill.id ? /*#__PURE__*/_jsxs(SCMSCardMenu, {
403
+ $placement: cardMenuPlacement,
404
+ onClick: function onClick(event) {
405
+ event.preventDefault();
406
+ event.stopPropagation();
407
+ },
408
+ children: [/*#__PURE__*/_jsx(SCMSCardMenuItem, {
341
409
  type: "button",
342
410
  onClick: function onClick() {
343
- return setSkillToDelete(skill);
411
+ return handleUseSkill(skill);
344
412
  },
345
- children: t('mySkills.delete')
413
+ children: t('mySkills.useSkill')
414
+ }), isMineTab ? /*#__PURE__*/_jsxs(_Fragment, {
415
+ children: [/*#__PURE__*/_jsx(SCMSCardMenuItem, {
416
+ type: "button",
417
+ onClick: function onClick() {
418
+ return handleOpenSkill(skill, false);
419
+ },
420
+ children: t('mySkills.edit')
421
+ }), /*#__PURE__*/_jsx(SCMSCardMenuItem, {
422
+ type: "button",
423
+ $destructive: true,
424
+ onClick: function onClick() {
425
+ return setSkillToDelete(skill);
426
+ },
427
+ children: t('mySkills.delete')
428
+ })]
346
429
  }) : null]
347
- })
348
- }) : null]
349
- }, skill.id);
350
- })
351
- })
352
- }) : null, !loading && !skills.length ? /*#__PURE__*/_jsxs(SCMSEmptyStateRoot, {
353
- children: [/*#__PURE__*/_jsx(SCMSEmptyStateColumn, {
354
- children: /*#__PURE__*/_jsxs(SCMSEmptyStateTitleBlock, {
355
- children: [/*#__PURE__*/_jsx(SCMSEmptyStateTitle, {
356
- children: t('mySkills.emptyStateTitle')
357
- }), /*#__PURE__*/_jsx(SCMSEmptyStateSubtitle, {
358
- children: canCreate ? t('mySkills.emptyStateDescription') : t('mySkills.emptyStateDescriptionNoPerm')
359
- })]
360
- })
361
- }), canCreate ? /*#__PURE__*/_jsx(SCMSEmptyStateButton, {
362
- type: "button",
363
- disabled: usageBlocked,
364
- "aria-disabled": usageBlocked,
365
- onClick: openCreateSkillModal,
366
- children: t('mySkills.emptyStateButton')
367
- }) : null]
368
- }) : null]
369
- }), usageBlocked ? /*#__PURE__*/_jsx(SCMSBlockedBannerWrap, {
370
- children: /*#__PURE__*/_jsx(UsageBlockedBanner, {
371
- message: usageBlockedMessage,
372
- attachedToComposer: false
373
- })
374
- }) : null, deleteModalChat ? /*#__PURE__*/_jsx(DeleteQuestionModal, {
430
+ }) : null]
431
+ }, skill.id);
432
+ })
433
+ }) : null, !loading && !filteredSkills.length ? renderEmptyState() : null]
434
+ })]
435
+ })]
436
+ }), deleteModalChat ? /*#__PURE__*/_jsx(DeleteQuestionModal, {
375
437
  onClose: function onClose() {
376
438
  return setSkillToDelete(null);
377
439
  },
@@ -383,4 +445,4 @@ export var ChatAIMySkills = function ChatAIMySkills(_ref) {
383
445
  }) : null]
384
446
  });
385
447
  };
386
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSZWFjdCIsInVzZUNhbGxiYWNrIiwidXNlRWZmZWN0IiwidXNlTWVtbyIsInVzZVN0YXRlIiwiTWVudURvdHMiLCJ1c2VUcmFuc2xhdGlvbiIsInVzZVVzZXIiLCJkZWxldGVTa2lsbCIsInVzZVNuYWNrQmFyTWFuYWdlciIsIkRlbGV0ZVF1ZXN0aW9uTW9kYWwiLCJTS0lMTF9HRU5FUkFURV9PUEVOX0VWRU5UIiwiU0VDVElPTlMiLCJMb2FkZXIiLCJTQ01TQm9keSIsIlNDTVNDYXJkQm9keSIsIlNDTVNDYXJkQnV0dG9uIiwiU0NNU0NhcmRDb250ZW50VGV4dCIsIlNDTVNDYXJkRm9vdGVyIiwiU0NNU0NhcmRGb290ZXJEYXRlIiwiU0NNU0NhcmRIZWFkZXIiLCJTQ01TQ2FyZE1lbnUiLCJTQ01TQ2FyZE1lbnVJdGVtIiwiU0NNU0NhcmRNZW51SXRlbXMiLCJTQ01TQ2FyZFRpdGxlTmFtZSIsIlNDTVNDYXJkVG9wUm93IiwiU0NNU0NhcmRzT3V0ZXIiLCJTQ01TQ2FyZHNSb3ciLCJTQ01TQ29udGFpbmVyIiwiU0NNU0NyZWF0ZUJ1dHRvbiIsIlNDTVNDcmVhdGVCdXR0b25UZXh0IiwiU0NNU0NyZWF0ZU1lbnUiLCJTQ01TQ3JlYXRlTWVudUl0ZW0iLCJTQ01TQ3JlYXRlTWVudVdyYXAiLCJTQ01TRW1wdHlTdGF0ZUJ1dHRvbiIsIlNDTVNFbXB0eVN0YXRlQ29sdW1uIiwiU0NNU0VtcHR5U3RhdGVSb290IiwiU0NNU0VtcHR5U3RhdGVTdWJ0aXRsZSIsIlNDTVNFbXB0eVN0YXRlVGl0bGUiLCJTQ01TRW1wdHlTdGF0ZVRpdGxlQmxvY2siLCJTQ01TS2ViYWJCdXR0b24iLCJTQ01TTG9hZFdyYXBwZXIiLCJTQ01TVGl0bGUiLCJTQ01TU3VidGl0bGUiLCJTQ01TQWN0aW9uc1JvdyIsIlNDTVNUaXRsZUlubmVyIiwiU0NNU1RpdGxlV3JhcCIsIlNDTVNCbG9ja2VkQmFubmVyV3JhcCIsIk1BSUFJc29sb2dvIiwidXNlVXNhZ2VTdG9yZSIsIlVzYWdlQmxvY2tlZEJhbm5lciIsImpzeCIsIl9qc3giLCJqc3hzIiwiX2pzeHMiLCJvcGVuU2tpbGxNb2RhbCIsInZhbHVlcyIsImRvY3VtZW50IiwiZGlzcGF0Y2hFdmVudCIsIkN1c3RvbUV2ZW50IiwiZGV0YWlsIiwic2tpbGxWYWx1ZXMiLCJpc09wZW4iLCJJY29uQ2hhdCIsIndpZHRoIiwiaGVpZ2h0Iiwidmlld0JveCIsImZpbGwiLCJjaGlsZHJlbiIsImQiLCJzdHJva2UiLCJzdHJva2VXaWR0aCIsInN0cm9rZUxpbmVqb2luIiwiSWNvbkNsaXBib2FyZCIsIngiLCJ5IiwicngiLCJzdHJva2VMaW5lY2FwIiwiSWNvblVwbG9hZCIsIkNoYXRBSU15U2tpbGxzIiwiX3JlZiIsIl91c2VyJHBlcm1pc3Npb25zIiwic2tpbGxzIiwiX3JlZiRsb2FkaW5nIiwibG9hZGluZyIsIm9uRGVsZXRlU2tpbGwiLCJfdXNlVHJhbnNsYXRpb24iLCJjaGF0QUkiLCJ0IiwidXNlciIsIl91c2VTbmFja0Jhck1hbmFnZXIiLCJoYW5kbGVTbmFja2JhclN1Y2Nlc3MiLCJoYW5kbGVTbmFja2JhckVycm9yIiwidXNhZ2VCbG9ja2VkIiwic3RhdGUiLCJibG9ja2VkIiwidXNhZ2VCbG9ja2VkTWVzc2FnZSIsInF1b3RhRXhjZWVkZWRNZXNzYWdlIiwiX3VzZVN0YXRlIiwiX3VzZVN0YXRlMiIsIl9zbGljZWRUb0FycmF5IiwibWVudU9wZW5Gb3JTa2lsbElkIiwic2V0TWVudU9wZW5Gb3JTa2lsbElkIiwiX3VzZVN0YXRlMyIsIl91c2VTdGF0ZTQiLCJjcmVhdGVNZW51T3BlbiIsInNldENyZWF0ZU1lbnVPcGVuIiwiX3VzZVN0YXRlNSIsIl91c2VTdGF0ZTYiLCJza2lsbFRvRGVsZXRlIiwic2V0U2tpbGxUb0RlbGV0ZSIsInVzZXJQZXJtaXNzaW9ucyIsInBlcm1pc3Npb25zIiwiYWlfYWdlbnRzIiwiY2FuQ3JlYXRlIiwiY3JlYXRlIiwid2luZG93IiwiTUFJQV9DSEFUX0FJX0ZFQVRVUkVfQUNDRVNTX01VTFRJX0FHRU5UUyIsImNhbkVkaXQiLCJlZGl0IiwiY2FuRGVsZXRlIiwiY2FuU2hvd01lbnUiLCJvcGVuQ3JlYXRlU2tpbGxNb2RhbCIsImlzRWRpdGluZyIsImhhbmRsZUNyZWF0ZU9wdGlvbiIsImludGVudCIsImhhbmRsZU9wZW5FZGl0U2tpbGwiLCJza2lsbCIsImdlbmVyYWwiLCJpZCIsIm5hbWUiLCJjb250ZW50IiwiZ2V0Q3JlYXRlZEF0TGFiZWwiLCJjcmVhdGVkQXQiLCJjcmVhdGVkX2F0IiwiY3JlYXRlZEF0RGF0ZSIsIkRhdGUiLCJOdW1iZXIiLCJpc05hTiIsImdldFRpbWUiLCJkaWZmTXMiLCJub3ciLCJkYXlNcyIsImRheXMiLCJNYXRoIiwibWF4IiwiZmxvb3IiLCJkZWxldGVNb2RhbENoYXQiLCJ0aXRsZSIsImhhbmRsZUNvbmZpcm1EZWxldGUiLCJfcmVmMiIsIl9hc3luY1RvR2VuZXJhdG9yIiwiX3JlZ2VuZXJhdG9yUnVudGltZSIsIm1hcmsiLCJfY2FsbGVlIiwiY2hhdCIsIl90Iiwid3JhcCIsIl9jb250ZXh0IiwicHJldiIsIm5leHQiLCJzdG9wIiwiX3giLCJhcHBseSIsImFyZ3VtZW50cyIsImhhbmRsZUNsaWNrT3V0c2lkZSIsImFkZEV2ZW50TGlzdGVuZXIiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwiJGhhc1NraWxscyIsImxlbmd0aCIsIiRjYW5DcmVhdGUiLCJ0eXBlIiwiZGlzYWJsZWQiLCJvbkNsaWNrIiwiZXZlbnQiLCJzdG9wUHJvcGFnYXRpb24iLCJzaXplIiwibWFwIiwicHJldmVudERlZmF1bHQiLCJjb2xvciIsIm1lc3NhZ2UiLCJhdHRhY2hlZFRvQ29tcG9zZXIiLCJvbkNsb3NlIiwiaGFuZGxlcnMiLCJoYW5kbGVDb25maXJtQWN0aW9uIiwiYWN0aW9uIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvbW9sZWN1bGVzL0NoYXRBSU15U2tpbGxzL0NoYXRBSU15U2tpbGxzLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUmVhY3QsIHsgdXNlQ2FsbGJhY2ssIHVzZUVmZmVjdCwgdXNlTWVtbywgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IE1lbnVEb3RzIH0gZnJvbSAnQHByb2plY3Rjb3IvaWNvbnMvbGliL2NvbXBvbmVudHMvTWVudURvdHMnXG5pbXBvcnQgeyB1c2VUcmFuc2xhdGlvbiB9IGZyb20gJ3JlYWN0LWkxOG5leHQnXG5pbXBvcnQgeyB1c2VVc2VyIH0gZnJvbSAnLi4vLi4vLi4vY29udGV4dC9jb3ItdXNlcidcbmltcG9ydCB7IFNraWxsIH0gZnJvbSAnLi4vLi4vLi4vdHlwZXMvc2tpbGwnXG5pbXBvcnQgeyBkZWxldGVTa2lsbCB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL21haWEvU2tpbGxzL2RlbGV0ZVNraWxsJ1xuaW1wb3J0IHsgdXNlU25hY2tCYXJNYW5hZ2VyIH0gZnJvbSAnLi4vLi4vLi4vaG9va3MvdXNlU25hY2tCYXJNYW5hZ2VyL3VzZVNuYWNrQmFyTWFuYWdlcidcbmltcG9ydCB7IERlbGV0ZVF1ZXN0aW9uTW9kYWwgfSBmcm9tICcuLi8uLi9vcmdhbmlzbXMvRGVsZXRlUXVlc3Rpb25Nb2RhbC9EZWxldGVRdWVzdGlvbk1vZGFsJ1xuaW1wb3J0IHsgU0tJTExfR0VORVJBVEVfT1BFTl9FVkVOVCB9IGZyb20gJy4uLy4uL29yZ2FuaXNtcy9BYm1Ta2lsbEdlbmVyYXRlTW9kYWwvQWJtU2tpbGxHZW5lcmF0ZU1vZGFsJ1xuaW1wb3J0IHsgU0VDVElPTlMgfSBmcm9tICcuLi8uLi8uLi9jb25zdGFudHMvY29uZmlnJ1xuaW1wb3J0IHsgTG9hZGVyIH0gZnJvbSAnLi4vLi4vYXRvbXMvTG9hZGVyJ1xuaW1wb3J0IHtcbiAgU0NNU0JvZHksXG4gIFNDTVNDYXJkQm9keSxcbiAgU0NNU0NhcmRCdXR0b24sXG4gIFNDTVNDYXJkQ29udGVudFRleHQsXG4gIFNDTVNDYXJkRm9vdGVyLFxuICBTQ01TQ2FyZEZvb3RlckRhdGUsXG4gIFNDTVNDYXJkSGVhZGVyLFxuICBTQ01TQ2FyZE1lbnUsXG4gIFNDTVNDYXJkTWVudUl0ZW0sXG4gIFNDTVNDYXJkTWVudUl0ZW1zLFxuICBTQ01TQ2FyZFRpdGxlTmFtZSxcbiAgU0NNU0NhcmRUb3BSb3csXG4gIFNDTVNDYXJkc091dGVyLFxuICBTQ01TQ2FyZHNSb3csXG4gIFNDTVNDb250YWluZXIsXG4gIFNDTVNDcmVhdGVCdXR0b24sXG4gIFNDTVNDcmVhdGVCdXR0b25UZXh0LFxuICBTQ01TQ3JlYXRlTWVudSxcbiAgU0NNU0NyZWF0ZU1lbnVJdGVtLFxuICBTQ01TQ3JlYXRlTWVudVdyYXAsXG4gIFNDTVNFbXB0eVN0YXRlQnV0dG9uLFxuICBTQ01TRW1wdHlTdGF0ZUNvbHVtbixcbiAgU0NNU0VtcHR5U3RhdGVSb290LFxuICBTQ01TRW1wdHlTdGF0ZVN1YnRpdGxlLFxuICBTQ01TRW1wdHlTdGF0ZVRpdGxlLFxuICBTQ01TRW1wdHlTdGF0ZVRpdGxlQmxvY2ssXG4gIFNDTVNLZWJhYkJ1dHRvbixcbiAgU0NNU0xvYWRXcmFwcGVyLFxuICBTQ01TVGl0bGUsXG4gIFNDTVNTdWJ0aXRsZSxcbiAgU0NNU0FjdGlvbnNSb3csXG4gIFNDTVNUaXRsZUlubmVyLFxuICBTQ01TVGl0bGVXcmFwLFxuICBTQ01TQmxvY2tlZEJhbm5lcldyYXAsXG59IGZyb20gJy4vQ2hhdEFJTXlTa2lsbHMuc3R5bGVzJ1xuaW1wb3J0IHsgTUFJQUlzb2xvZ28gfSBmcm9tICcuLi8uLi9hdG9tcy9pY29ucydcbmltcG9ydCB7IHVzZVVzYWdlU3RvcmUgfSBmcm9tICcuLi8uLi8uLi9zdG9yZS91c2VVc2FnZVN0b3JlJ1xuaW1wb3J0IHsgVXNhZ2VCbG9ja2VkQmFubmVyIH0gZnJvbSAnLi4vVXNhZ2VCbG9ja2VkQmFubmVyL1VzYWdlQmxvY2tlZEJhbm5lcidcblxudHlwZSBDaGF0QUlNeVNraWxsc1Byb3BzID0ge1xuICBza2lsbHM6IFNraWxsW11cbiAgbG9hZGluZz86IGJvb2xlYW5cbiAgb25EZWxldGVTa2lsbD86IChza2lsbElkOiBzdHJpbmcpID0+IHZvaWRcbn1cblxudHlwZSBTa2lsbE1vZGFsSW50ZW50ID0gJ2dlbmVyYXRlJyB8ICd3cml0ZScgfCAndXBsb2FkJ1xuXG5jb25zdCBvcGVuU2tpbGxNb2RhbCA9ICh2YWx1ZXM6IHtcbiAgaXNFZGl0aW5nOiBib29sZWFuXG4gIGludGVudD86IFNraWxsTW9kYWxJbnRlbnRcbiAgZ2VuZXJhbD86IHsgaWQ/OiBzdHJpbmc7IG5hbWU/OiBzdHJpbmc7IGNvbnRlbnQ/OiBzdHJpbmcgfVxufSkgPT4ge1xuICBkb2N1bWVudC5kaXNwYXRjaEV2ZW50KFxuICAgIG5ldyBDdXN0b21FdmVudCgnYWJtLXNraWxsLW1vZGFsLXNldC12YWx1ZXMnLCB7XG4gICAgICBkZXRhaWw6IHtcbiAgICAgICAgc2tpbGxWYWx1ZXM6IHtcbiAgICAgICAgICB2YWx1ZXMsXG4gICAgICAgICAgaXNPcGVuOiB0cnVlLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9KVxuICApXG59XG5cbmNvbnN0IEljb25DaGF0ID0gKCkgPT4gKFxuICA8c3ZnIHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIxNlwiIHZpZXdCb3g9XCIwIDAgMTYgMTZcIiBmaWxsPVwibm9uZVwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPlxuICAgIDxwYXRoXG4gICAgICBkPVwiTTE0IDcuNWE1LjUgNS41IDAgMCAxLTcuOSA0Ljk2TDIuNSAxMy41bDEuMDQtMy4xQTUuNSA1LjUgMCAxIDEgMTQgNy41WlwiXG4gICAgICBzdHJva2U9XCIjNjY2XCJcbiAgICAgIHN0cm9rZVdpZHRoPVwiMS4zXCJcbiAgICAgIHN0cm9rZUxpbmVqb2luPVwicm91bmRcIlxuICAgIC8+XG4gIDwvc3ZnPlxuKVxuXG5jb25zdCBJY29uQ2xpcGJvYXJkID0gKCkgPT4gKFxuICA8c3ZnIHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIxNlwiIHZpZXdCb3g9XCIwIDAgMTYgMTZcIiBmaWxsPVwibm9uZVwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPlxuICAgIDxyZWN0IHg9XCIzLjVcIiB5PVwiM1wiIHdpZHRoPVwiOVwiIGhlaWdodD1cIjExXCIgcng9XCIxLjVcIiBzdHJva2U9XCIjNjY2XCIgc3Ryb2tlV2lkdGg9XCIxLjNcIiAvPlxuICAgIDxyZWN0IHg9XCI1Ljc1XCIgeT1cIjEuNzVcIiB3aWR0aD1cIjQuNVwiIGhlaWdodD1cIjIuNVwiIHJ4PVwiMC43NVwiIHN0cm9rZT1cIiM2NjZcIiBzdHJva2VXaWR0aD1cIjEuM1wiIC8+XG4gICAgPHBhdGggZD1cIk02IDcuNWg0TTYgMTBoM1wiIHN0cm9rZT1cIiM2NjZcIiBzdHJva2VXaWR0aD1cIjEuM1wiIHN0cm9rZUxpbmVjYXA9XCJyb3VuZFwiIC8+XG4gIDwvc3ZnPlxuKVxuXG5jb25zdCBJY29uVXBsb2FkID0gKCkgPT4gKFxuICA8c3ZnIHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIxNlwiIHZpZXdCb3g9XCIwIDAgMTYgMTZcIiBmaWxsPVwibm9uZVwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPlxuICAgIDxwYXRoXG4gICAgICBkPVwiTTggMTAuNVYzTTggMyA1LjUgNS41TTggM2wyLjUgMi41XCJcbiAgICAgIHN0cm9rZT1cIiM2NjZcIlxuICAgICAgc3Ryb2tlV2lkdGg9XCIxLjNcIlxuICAgICAgc3Ryb2tlTGluZWNhcD1cInJvdW5kXCJcbiAgICAgIHN0cm9rZUxpbmVqb2luPVwicm91bmRcIlxuICAgIC8+XG4gICAgPHBhdGggZD1cIk0zIDEwdjJhMSAxIDAgMCAwIDEgMWg4YTEgMSAwIDAgMCAxLTF2LTJcIiBzdHJva2U9XCIjNjY2XCIgc3Ryb2tlV2lkdGg9XCIxLjNcIiBzdHJva2VMaW5lY2FwPVwicm91bmRcIiAvPlxuICA8L3N2Zz5cbilcblxuZXhwb3J0IGNvbnN0IENoYXRBSU15U2tpbGxzID0gKHsgc2tpbGxzLCBsb2FkaW5nID0gZmFsc2UsIG9uRGVsZXRlU2tpbGwgfTogQ2hhdEFJTXlTa2lsbHNQcm9wcykgPT4ge1xuICBjb25zdCB7IHQgfSA9IHVzZVRyYW5zbGF0aW9uKFtTRUNUSU9OUy5jaGF0QUldKVxuICBjb25zdCB1c2VyID0gdXNlVXNlcigpXG4gIGNvbnN0IHsgaGFuZGxlU25hY2tiYXJTdWNjZXNzLCBoYW5kbGVTbmFja2JhckVycm9yIH0gPSB1c2VTbmFja0Jhck1hbmFnZXIoKVxuICBjb25zdCB1c2FnZUJsb2NrZWQgPSB1c2VVc2FnZVN0b3JlKHN0YXRlID0+IHN0YXRlLmJsb2NrZWQpXG4gIGNvbnN0IHVzYWdlQmxvY2tlZE1lc3NhZ2UgPSB1c2VVc2FnZVN0b3JlKHN0YXRlID0+IHN0YXRlLnF1b3RhRXhjZWVkZWRNZXNzYWdlKVxuICBjb25zdCBbbWVudU9wZW5Gb3JTa2lsbElkLCBzZXRNZW51T3BlbkZvclNraWxsSWRdID0gdXNlU3RhdGU8c3RyaW5nIHwgbnVsbD4obnVsbClcbiAgY29uc3QgW2NyZWF0ZU1lbnVPcGVuLCBzZXRDcmVhdGVNZW51T3Blbl0gPSB1c2VTdGF0ZShmYWxzZSlcbiAgY29uc3QgW3NraWxsVG9EZWxldGUsIHNldFNraWxsVG9EZWxldGVdID0gdXNlU3RhdGU8U2tpbGwgfCBudWxsPihudWxsKVxuICBjb25zdCB1c2VyUGVybWlzc2lvbnMgPSB1c2VyPy5wZXJtaXNzaW9ucz8uYWlfYWdlbnRzXG4gIGNvbnN0IGNhbkNyZWF0ZSA9ICEhdXNlclBlcm1pc3Npb25zPy5jcmVhdGUgJiYgISF3aW5kb3cuTUFJQV9DSEFUX0FJX0ZFQVRVUkVfQUNDRVNTX01VTFRJX0FHRU5UU1xuICBjb25zdCBjYW5FZGl0ID0gISF1c2VyUGVybWlzc2lvbnM/LmVkaXQgJiYgISF3aW5kb3cuTUFJQV9DSEFUX0FJX0ZFQVRVUkVfQUNDRVNTX01VTFRJX0FHRU5UU1xuICBjb25zdCBjYW5EZWxldGUgPSAhIXVzZXJQZXJtaXNzaW9ucz8uZGVsZXRlICYmICEhd2luZG93Lk1BSUFfQ0hBVF9BSV9GRUFUVVJFX0FDQ0VTU19NVUxUSV9BR0VOVFNcbiAgY29uc3QgY2FuU2hvd01lbnUgPSBjYW5FZGl0IHx8IGNhbkRlbGV0ZVxuXG4gIGNvbnN0IG9wZW5DcmVhdGVTa2lsbE1vZGFsID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGlmICh1c2FnZUJsb2NrZWQpIHJldHVyblxuICAgIG9wZW5Ta2lsbE1vZGFsKHsgaXNFZGl0aW5nOiBmYWxzZSB9KVxuICB9LCBbdXNhZ2VCbG9ja2VkXSlcblxuICBjb25zdCBoYW5kbGVDcmVhdGVPcHRpb24gPSB1c2VDYWxsYmFjaygoaW50ZW50OiBTa2lsbE1vZGFsSW50ZW50KSA9PiB7XG4gICAgaWYgKHVzYWdlQmxvY2tlZCkgcmV0dXJuXG4gICAgc2V0Q3JlYXRlTWVudU9wZW4oZmFsc2UpXG4gICAgaWYgKGludGVudCA9PT0gJ2dlbmVyYXRlJykge1xuICAgICAgLy8gXCJDcmVhciBjb24gTWFpYVwiIGFicmUgZWwgbW9kYWwgc2ltcGxlIGRlIGRlc2NyaXBjacOzbiAobm8gZWwgZWRpdG9yKS5cbiAgICAgIGRvY3VtZW50LmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KFNLSUxMX0dFTkVSQVRFX09QRU5fRVZFTlQpKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIG9wZW5Ta2lsbE1vZGFsKHsgaXNFZGl0aW5nOiBmYWxzZSwgaW50ZW50IH0pXG4gIH0sIFt1c2FnZUJsb2NrZWRdKVxuXG4gIGNvbnN0IGhhbmRsZU9wZW5FZGl0U2tpbGwgPSB1c2VDYWxsYmFjaygoc2tpbGw6IFNraWxsKSA9PiB7XG4gICAgaWYgKHVzYWdlQmxvY2tlZCkgcmV0dXJuXG4gICAgb3BlblNraWxsTW9kYWwoe1xuICAgICAgaXNFZGl0aW5nOiB0cnVlLFxuICAgICAgZ2VuZXJhbDogeyBpZDogc2tpbGwuaWQsIG5hbWU6IHNraWxsLm5hbWUsIGNvbnRlbnQ6IHNraWxsLmNvbnRlbnQgfSxcbiAgICB9KVxuICAgIHNldE1lbnVPcGVuRm9yU2tpbGxJZChudWxsKVxuICB9LCBbdXNhZ2VCbG9ja2VkXSlcblxuICBjb25zdCBnZXRDcmVhdGVkQXRMYWJlbCA9IChza2lsbDogU2tpbGwpID0+IHtcbiAgICBjb25zdCB7IGNyZWF0ZWRfYXQ6IGNyZWF0ZWRBdCB9ID0gc2tpbGxcbiAgICBpZiAoIWNyZWF0ZWRBdCkgcmV0dXJuICcnXG5cbiAgICBjb25zdCBjcmVhdGVkQXREYXRlID0gbmV3IERhdGUoY3JlYXRlZEF0KVxuICAgIGlmIChOdW1iZXIuaXNOYU4oY3JlYXRlZEF0RGF0ZS5nZXRUaW1lKCkpKSByZXR1cm4gJydcblxuICAgIGNvbnN0IGRpZmZNcyA9IERhdGUubm93KCkgLSBjcmVhdGVkQXREYXRlLmdldFRpbWUoKVxuICAgIGNvbnN0IGRheU1zID0gMTAwMCAqIDYwICogNjAgKiAyNFxuICAgIGNvbnN0IGRheXMgPSBNYXRoLm1heCgwLCBNYXRoLmZsb29yKGRpZmZNcyAvIGRheU1zKSlcblxuICAgIGlmIChkYXlzID09PSAwKSByZXR1cm4gdCgnbWFya2V0cGxhY2UubXlBZ2VudHNUb2RheScpXG4gICAgaWYgKGRheXMgPT09IDEpIHJldHVybiB0KCdtYXJrZXRwbGFjZS5teUFnZW50c09uZURheUFnbycpXG4gICAgcmV0dXJuIHQoJ21hcmtldHBsYWNlLm15QWdlbnRzRGF5c0FnbycsIHsgZGF5cyB9KVxuICB9XG5cbiAgY29uc3QgZGVsZXRlTW9kYWxDaGF0ID0gdXNlTWVtbyhcbiAgICAoKSA9PiAoc2tpbGxUb0RlbGV0ZSA/IHsgdGl0bGU6IHNraWxsVG9EZWxldGUubmFtZSwgaWQ6IHNraWxsVG9EZWxldGUuaWQgfSA6IG51bGwpLFxuICAgIFtza2lsbFRvRGVsZXRlXVxuICApXG5cbiAgY29uc3QgaGFuZGxlQ29uZmlybURlbGV0ZSA9IGFzeW5jIChjaGF0OiB7IGlkOiBzdHJpbmcgfSkgPT4ge1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBkZWxldGVTa2lsbChjaGF0LmlkKVxuICAgICAgaGFuZGxlU25hY2tiYXJTdWNjZXNzKHQoJ215U2tpbGxzLmRlbGV0ZVN1Y2Nlc3MnKSlcbiAgICAgIG9uRGVsZXRlU2tpbGw/LihjaGF0LmlkKVxuICAgICAgc2V0U2tpbGxUb0RlbGV0ZShudWxsKVxuICAgICAgc2V0TWVudU9wZW5Gb3JTa2lsbElkKG51bGwpXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGhhbmRsZVNuYWNrYmFyRXJyb3IodCgnbXlTa2lsbHMuZGVsZXRlRXJyb3InKSlcbiAgICB9XG4gIH1cblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IGhhbmRsZUNsaWNrT3V0c2lkZSA9ICgpID0+IHtcbiAgICAgIGlmIChtZW51T3BlbkZvclNraWxsSWQpIHtcbiAgICAgICAgc2V0TWVudU9wZW5Gb3JTa2lsbElkKG51bGwpXG4gICAgICB9XG4gICAgICBpZiAoY3JlYXRlTWVudU9wZW4pIHtcbiAgICAgICAgc2V0Q3JlYXRlTWVudU9wZW4oZmFsc2UpXG4gICAgICB9XG4gICAgfVxuXG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBoYW5kbGVDbGlja091dHNpZGUpXG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgaGFuZGxlQ2xpY2tPdXRzaWRlKVxuICAgIH1cbiAgfSwgW21lbnVPcGVuRm9yU2tpbGxJZCwgY3JlYXRlTWVudU9wZW5dKVxuXG4gIHJldHVybiAoXG4gICAgPFNDTVNDb250YWluZXIgJGhhc1NraWxscz17ISFza2lsbHMubGVuZ3RofT5cbiAgICAgIDxNQUlBSXNvbG9nbyAvPlxuXG4gICAgICA8U0NNU0JvZHkgJGNhbkNyZWF0ZT17Y2FuQ3JlYXRlfT5cbiAgICAgICAge3NraWxscy5sZW5ndGggPyAoXG4gICAgICAgICAgPFNDTVNUaXRsZVdyYXA+XG4gICAgICAgICAgICA8U0NNU1RpdGxlSW5uZXI+XG4gICAgICAgICAgICAgIDxTQ01TVGl0bGU+e3QoJ215U2tpbGxzLnRpdGxlJyl9PC9TQ01TVGl0bGU+XG4gICAgICAgICAgICAgIDxTQ01TU3VidGl0bGU+e3QoJ215U2tpbGxzLnN1YnRpdGxlJyl9PC9TQ01TU3VidGl0bGU+XG4gICAgICAgICAgICA8L1NDTVNUaXRsZUlubmVyPlxuICAgICAgICAgICAge2NhbkNyZWF0ZSA/IChcbiAgICAgICAgICAgICAgPFNDTVNBY3Rpb25zUm93PlxuICAgICAgICAgICAgICAgIDxTQ01TQ3JlYXRlTWVudVdyYXA+XG4gICAgICAgICAgICAgICAgICA8U0NNU0NyZWF0ZUJ1dHRvblxuICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ9e3VzYWdlQmxvY2tlZH1cbiAgICAgICAgICAgICAgICAgICAgYXJpYS1kaXNhYmxlZD17dXNhZ2VCbG9ja2VkfVxuICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXtldmVudCA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICAgICAgICAgICAgICAgICAgICBpZiAodXNhZ2VCbG9ja2VkKSByZXR1cm5cbiAgICAgICAgICAgICAgICAgICAgICBzZXRDcmVhdGVNZW51T3BlbihwcmV2ID0+ICFwcmV2KVxuICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8U0NNU0NyZWF0ZUJ1dHRvblRleHQ+e3QoJ215U2tpbGxzLmNyZWF0ZVNraWxsJyl9PC9TQ01TQ3JlYXRlQnV0dG9uVGV4dD5cbiAgICAgICAgICAgICAgICAgIDwvU0NNU0NyZWF0ZUJ1dHRvbj5cbiAgICAgICAgICAgICAgICAgIHtjcmVhdGVNZW51T3BlbiA/IChcbiAgICAgICAgICAgICAgICAgICAgPFNDTVNDcmVhdGVNZW51IG9uQ2xpY2s9e2V2ZW50ID0+IGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpfT5cbiAgICAgICAgICAgICAgICAgICAgICA8U0NNU0NyZWF0ZU1lbnVJdGVtXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXt1c2FnZUJsb2NrZWR9XG4gICAgICAgICAgICAgICAgICAgICAgICBhcmlhLWRpc2FibGVkPXt1c2FnZUJsb2NrZWR9XG4gICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBoYW5kbGVDcmVhdGVPcHRpb24oJ2dlbmVyYXRlJyl9XG4gICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgPEljb25DaGF0IC8+XG4gICAgICAgICAgICAgICAgICAgICAgICB7dCgnbXlTa2lsbHMuY3JlYXRlV2l0aE1haWEnKX1cbiAgICAgICAgICAgICAgICAgICAgICA8L1NDTVNDcmVhdGVNZW51SXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICA8U0NNU0NyZWF0ZU1lbnVJdGVtXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkPXt1c2FnZUJsb2NrZWR9XG4gICAgICAgICAgICAgICAgICAgICAgICBhcmlhLWRpc2FibGVkPXt1c2FnZUJsb2NrZWR9XG4gICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBoYW5kbGVDcmVhdGVPcHRpb24oJ3dyaXRlJyl9XG4gICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgPEljb25DbGlwYm9hcmQgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt0KCdteVNraWxscy53cml0ZUluc3RydWN0aW9ucycpfVxuICAgICAgICAgICAgICAgICAgICAgIDwvU0NNU0NyZWF0ZU1lbnVJdGVtPlxuICAgICAgICAgICAgICAgICAgICAgIDxTQ01TQ3JlYXRlTWVudUl0ZW1cbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ9e3VzYWdlQmxvY2tlZH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGFyaWEtZGlzYWJsZWQ9e3VzYWdlQmxvY2tlZH1cbiAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IGhhbmRsZUNyZWF0ZU9wdGlvbigndXBsb2FkJyl9XG4gICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgPEljb25VcGxvYWQgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt0KCdteVNraWxscy51cGxvYWRTa2lsbCcpfVxuICAgICAgICAgICAgICAgICAgICAgIDwvU0NNU0NyZWF0ZU1lbnVJdGVtPlxuICAgICAgICAgICAgICAgICAgICA8L1NDTVNDcmVhdGVNZW51PlxuICAgICAgICAgICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAgICAgICAgPC9TQ01TQ3JlYXRlTWVudVdyYXA+XG4gICAgICAgICAgICAgIDwvU0NNU0FjdGlvbnNSb3c+XG4gICAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICA8L1NDTVNUaXRsZVdyYXA+XG4gICAgICAgICkgOiBudWxsfVxuXG4gICAgICAgIHtsb2FkaW5nID8gKFxuICAgICAgICAgIDxTQ01TTG9hZFdyYXBwZXI+XG4gICAgICAgICAgICA8TG9hZGVyIHNpemU9XCJzbWFsbFwiIC8+XG4gICAgICAgICAgPC9TQ01TTG9hZFdyYXBwZXI+XG4gICAgICAgICkgOiBudWxsfVxuXG4gICAgICAgIHshbG9hZGluZyAmJiBza2lsbHMubGVuZ3RoID8gKFxuICAgICAgICAgIDxTQ01TQ2FyZHNPdXRlcj5cbiAgICAgICAgICAgIDxTQ01TQ2FyZHNSb3c+XG4gICAgICAgICAgICAgIHtza2lsbHMubWFwKHNraWxsID0+IChcbiAgICAgICAgICAgICAgICA8U0NNU0NhcmRCdXR0b25cbiAgICAgICAgICAgICAgICAgIGtleT17c2tpbGwuaWR9XG4gICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IGNhbkVkaXQgJiYgIXVzYWdlQmxvY2tlZCAmJiBoYW5kbGVPcGVuRWRpdFNraWxsKHNraWxsKX1cbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8U0NNU0NhcmRIZWFkZXI+XG4gICAgICAgICAgICAgICAgICAgIDxTQ01TQ2FyZFRvcFJvdz5cbiAgICAgICAgICAgICAgICAgICAgICA8U0NNU0NhcmRUaXRsZU5hbWU+e3NraWxsLm5hbWV9PC9TQ01TQ2FyZFRpdGxlTmFtZT5cbiAgICAgICAgICAgICAgICAgICAgICB7Y2FuU2hvd01lbnUgPyAoXG4gICAgICAgICAgICAgICAgICAgICAgICA8U0NNU0tlYmFiQnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBhcmlhLWxhYmVsPXt0KCdteVNraWxscy5jYXJkTWVudUFyaWFMYWJlbCcpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXtldmVudCA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0TWVudU9wZW5Gb3JTa2lsbElkKHByZXYgPT4gKHByZXYgPT09IHNraWxsLmlkID8gbnVsbCA6IHNraWxsLmlkKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPE1lbnVEb3RzIGNvbG9yPVwiIzk5OVwiIHdpZHRoPXsxNX0gaGVpZ2h0PXsxNX0gLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvU0NNU0tlYmFiQnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICAgICAgICAgICAgICA8L1NDTVNDYXJkVG9wUm93PlxuICAgICAgICAgICAgICAgICAgPC9TQ01TQ2FyZEhlYWRlcj5cbiAgICAgICAgICAgICAgICAgIDxTQ01TQ2FyZEJvZHk+XG4gICAgICAgICAgICAgICAgICAgIDxTQ01TQ2FyZENvbnRlbnRUZXh0Pntza2lsbC5jb250ZW50fTwvU0NNU0NhcmRDb250ZW50VGV4dD5cbiAgICAgICAgICAgICAgICAgICAgPFNDTVNDYXJkRm9vdGVyPlxuICAgICAgICAgICAgICAgICAgICAgIDxTQ01TQ2FyZEZvb3RlckRhdGU+XG4gICAgICAgICAgICAgICAgICAgICAgICB7Z2V0Q3JlYXRlZEF0TGFiZWwoc2tpbGwpIHx8IHQoJ21hcmtldHBsYWNlLm15QWdlbnRzRmFsbGJhY2tEYXRlJyl9XG4gICAgICAgICAgICAgICAgICAgICAgPC9TQ01TQ2FyZEZvb3RlckRhdGU+XG4gICAgICAgICAgICAgICAgICAgIDwvU0NNU0NhcmRGb290ZXI+XG4gICAgICAgICAgICAgICAgICA8L1NDTVNDYXJkQm9keT5cbiAgICAgICAgICAgICAgICAgIHttZW51T3BlbkZvclNraWxsSWQgPT09IHNraWxsLmlkICYmIGNhblNob3dNZW51ID8gKFxuICAgICAgICAgICAgICAgICAgICA8U0NNU0NhcmRNZW51XG4gICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17ZXZlbnQgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKVxuICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgPFNDTVNDYXJkTWVudUl0ZW1zPlxuICAgICAgICAgICAgICAgICAgICAgICAge2NhbkVkaXQgPyAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxTQ01TQ2FyZE1lbnVJdGVtXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ9e3VzYWdlQmxvY2tlZH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmlhLWRpc2FibGVkPXt1c2FnZUJsb2NrZWR9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gaGFuZGxlT3BlbkVkaXRTa2lsbChza2lsbCl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7dCgnbXlTa2lsbHMuZWRpdCcpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L1NDTVNDYXJkTWVudUl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHtjYW5EZWxldGUgPyAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxTQ01TQ2FyZE1lbnVJdGVtIHR5cGU9XCJidXR0b25cIiBvbkNsaWNrPXsoKSA9PiBzZXRTa2lsbFRvRGVsZXRlKHNraWxsKX0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3QoJ215U2tpbGxzLmRlbGV0ZScpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L1NDTVNDYXJkTWVudUl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICAgICAgICAgICAgICA8L1NDTVNDYXJkTWVudUl0ZW1zPlxuICAgICAgICAgICAgICAgICAgICA8L1NDTVNDYXJkTWVudT5cbiAgICAgICAgICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICAgICAgICAgIDwvU0NNU0NhcmRCdXR0b24+XG4gICAgICAgICAgICAgICkpfVxuICAgICAgICAgICAgPC9TQ01TQ2FyZHNSb3c+XG4gICAgICAgICAgPC9TQ01TQ2FyZHNPdXRlcj5cbiAgICAgICAgKSA6IG51bGx9XG5cbiAgICAgICAgeyFsb2FkaW5nICYmICFza2lsbHMubGVuZ3RoID8gKFxuICAgICAgICAgIDxTQ01TRW1wdHlTdGF0ZVJvb3Q+XG4gICAgICAgICAgICA8U0NNU0VtcHR5U3RhdGVDb2x1bW4+XG4gICAgICAgICAgICAgIDxTQ01TRW1wdHlTdGF0ZVRpdGxlQmxvY2s+XG4gICAgICAgICAgICAgICAgPFNDTVNFbXB0eVN0YXRlVGl0bGU+e3QoJ215U2tpbGxzLmVtcHR5U3RhdGVUaXRsZScpfTwvU0NNU0VtcHR5U3RhdGVUaXRsZT5cbiAgICAgICAgICAgICAgICA8U0NNU0VtcHR5U3RhdGVTdWJ0aXRsZT5cbiAgICAgICAgICAgICAgICAgIHtjYW5DcmVhdGUgPyB0KCdteVNraWxscy5lbXB0eVN0YXRlRGVzY3JpcHRpb24nKSA6IHQoJ215U2tpbGxzLmVtcHR5U3RhdGVEZXNjcmlwdGlvbk5vUGVybScpfVxuICAgICAgICAgICAgICAgIDwvU0NNU0VtcHR5U3RhdGVTdWJ0aXRsZT5cbiAgICAgICAgICAgICAgPC9TQ01TRW1wdHlTdGF0ZVRpdGxlQmxvY2s+XG4gICAgICAgICAgICA8L1NDTVNFbXB0eVN0YXRlQ29sdW1uPlxuICAgICAgICAgICAge2NhbkNyZWF0ZSA/IChcbiAgICAgICAgICAgICAgPFNDTVNFbXB0eVN0YXRlQnV0dG9uXG4gICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgZGlzYWJsZWQ9e3VzYWdlQmxvY2tlZH1cbiAgICAgICAgICAgICAgICBhcmlhLWRpc2FibGVkPXt1c2FnZUJsb2NrZWR9XG4gICAgICAgICAgICAgICAgb25DbGljaz17b3BlbkNyZWF0ZVNraWxsTW9kYWx9XG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICB7dCgnbXlTa2lsbHMuZW1wdHlTdGF0ZUJ1dHRvbicpfVxuICAgICAgICAgICAgICA8L1NDTVNFbXB0eVN0YXRlQnV0dG9uPlxuICAgICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAgPC9TQ01TRW1wdHlTdGF0ZVJvb3Q+XG4gICAgICAgICkgOiBudWxsfVxuICAgICAgPC9TQ01TQm9keT5cbiAgICAgIHt1c2FnZUJsb2NrZWQgPyAoXG4gICAgICAgIDxTQ01TQmxvY2tlZEJhbm5lcldyYXA+XG4gICAgICAgICAgPFVzYWdlQmxvY2tlZEJhbm5lciBtZXNzYWdlPXt1c2FnZUJsb2NrZWRNZXNzYWdlfSBhdHRhY2hlZFRvQ29tcG9zZXI9e2ZhbHNlfSAvPlxuICAgICAgICA8L1NDTVNCbG9ja2VkQmFubmVyV3JhcD5cbiAgICAgICkgOiBudWxsfVxuICAgICAge2RlbGV0ZU1vZGFsQ2hhdCA/IChcbiAgICAgICAgPERlbGV0ZVF1ZXN0aW9uTW9kYWxcbiAgICAgICAgICBvbkNsb3NlPXsoKSA9PiBzZXRTa2lsbFRvRGVsZXRlKG51bGwpfVxuICAgICAgICAgIGhhbmRsZXJzPXt7XG4gICAgICAgICAgICBoYW5kbGVDb25maXJtQWN0aW9uOiBoYW5kbGVDb25maXJtRGVsZXRlLFxuICAgICAgICAgIH19XG4gICAgICAgICAgY2hhdD17ZGVsZXRlTW9kYWxDaGF0fVxuICAgICAgICAgIGFjdGlvbj1cInNraWxsXCJcbiAgICAgICAgLz5cbiAgICAgICkgOiBudWxsfVxuICAgIDwvU0NNU0NvbnRhaW5lcj5cbiAgKVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7QUFBQSxPQUFPQSxLQUFLLElBQUlDLFdBQVcsRUFBRUMsU0FBUyxFQUFFQyxPQUFPLEVBQUVDLFFBQVEsUUFBUSxPQUFPO0FBQ3hFLFNBQVNDLFFBQVEsUUFBUSwyQ0FBMkM7QUFDcEUsU0FBU0MsY0FBYyxRQUFRLGVBQWU7QUFDOUMsU0FBU0MsT0FBTyxRQUFRLDJCQUEyQjtBQUVuRCxTQUFTQyxXQUFXLFFBQVEsMkNBQTJDO0FBQ3ZFLFNBQVNDLGtCQUFrQixRQUFRLHNEQUFzRDtBQUN6RixTQUFTQyxtQkFBbUIsUUFBUSx5REFBeUQ7QUFDN0YsU0FBU0MseUJBQXlCLFFBQVEsNkRBQTZEO0FBQ3ZHLFNBQVNDLFFBQVEsUUFBUSwyQkFBMkI7QUFDcEQsU0FBU0MsTUFBTSxRQUFRLG9CQUFvQjtBQUMzQyxTQUNFQyxRQUFRLEVBQ1JDLFlBQVksRUFDWkMsY0FBYyxFQUNkQyxtQkFBbUIs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
448
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSZWFjdCIsInVzZUNhbGxiYWNrIiwidXNlRWZmZWN0IiwidXNlTWVtbyIsInVzZVJlZiIsInVzZVN0YXRlIiwiTWVudURvdHMiLCJTZWFyY2giLCJJbmZvcm1hdGlvbkNpcmNsZSIsIlRvb2x0aXAiLCJ1c2VUcmFuc2xhdGlvbiIsImRlbGV0ZVNraWxsIiwidXNlU25hY2tCYXJNYW5hZ2VyIiwiRVZFTlRTIiwidXNlRXZlbnQiLCJ1c2VNYWlhVGFza1BhbmVsWkluZGV4IiwiRGVsZXRlUXVlc3Rpb25Nb2RhbCIsIlNLSUxMX1VTRV9BRlRFUl9TQVZFX0VWRU5UIiwiU0VDVElPTlMiLCJMb2FkZXIiLCJTa2lsbENyZWF0ZWRCeUljb24iLCJTa2lsbFZpc2liaWxpdHlFdmVyeW9uZUljb24iLCJTa2lsbFZpc2liaWxpdHlPbmx5TWVJY29uIiwiU0NNU0JvZHkiLCJTQ01TQ2FyZEJ1dHRvbiIsIlNDTVNDYXJkQ29udGVudFRleHQiLCJTQ01TQ2FyZE1lbnUiLCJTQ01TQ2FyZE1lbnVJdGVtIiwiU0NNU0NhcmRUaXRsZU5hbWUiLCJTQ01TQ2FyZFRvcFJvdyIsIlNDTVNDYXJkVmlzaWJpbGl0eVJvdyIsIlNDTVNDYXJkVmlzaWJpbGl0eVRleHQiLCJTQ01TQ2FyZHNMaXN0IiwiU0NNU0NvbnRhaW5lciIsIlNDTVNDcmVhdGVCdXR0b24iLCJTQ01TQ3JlYXRlQnV0dG9uVGV4dCIsIlNDTVNTaGFyZWRFbXB0eVN0YXRlUm9vdCIsIlNDTVNTaGFyZWRFbXB0eVN0YXRlU3VidGl0bGUiLCJTQ01TU2hhcmVkRW1wdHlTdGF0ZVRpdGxlIiwiU0NNU1NoYXJlZEVtcHR5U3RhdGVUaXRsZUJsb2NrIiwiU0NNU0tlYmFiQnV0dG9uIiwiU0NNU0xvYWRXcmFwcGVyIiwiU0NNU01ldGFEZXNjcmlwdGlvbiIsIlNDTVNNZXRhUm93IiwiU0NNU1BhbmVsIiwiU0NNU1BhbmVsSGVhZGVyIiwiU0NNU0xpc3RTY3JvbGxBcmVhIiwiU0NNU1NlYXJjaElucHV0IiwiU0NNU1NlYXJjaFdyYXBwZXIiLCJTQ01TVGFiQmFyIiwiU0NNU1RhYkJ1dHRvbiIsIlNDTVNUYWJJbmZvSWNvbiIsIlNDTVNUaXRsZSIsIlNDTVNUaXRsZUJsb2NrIiwianN4IiwiX2pzeCIsImpzeHMiLCJfanN4cyIsIkZyYWdtZW50IiwiX0ZyYWdtZW50IiwiRFJPUERPV05fR0FQX1BYIiwiQ0FSRF9NRU5VX0lURU1fSEVJR0hUX1BYIiwicmVzb2x2ZURyb3Bkb3duUGxhY2VtZW50IiwiYW5jaG9yIiwiZHJvcGRvd25IZWlnaHQiLCJyZWN0IiwiZ2V0Qm91bmRpbmdDbGllbnRSZWN0Iiwic3BhY2VCZWxvdyIsIndpbmRvdyIsImlubmVySGVpZ2h0IiwiYm90dG9tIiwic3BhY2VBYm92ZSIsInRvcCIsImZvcm1hdFNraWxsRGlzcGxheU5hbWUiLCJuYW1lIiwibm9ybWFsaXplZCIsInJlcGxhY2UiLCJjb25jYXQiLCJvcGVuU2tpbGxNb2RhbCIsInZhbHVlcyIsImFuYWx5dGljc1NvdXJjZSIsImFyZ3VtZW50cyIsImxlbmd0aCIsInVuZGVmaW5lZCIsImRvY3VtZW50IiwiZGlzcGF0Y2hFdmVudCIsIkN1c3RvbUV2ZW50IiwiZGV0YWlsIiwic2tpbGxWYWx1ZXMiLCJpc09wZW4iLCJTa2lsbFNlYXJjaElucHV0IiwibWVtbyIsIl9yZWYiLCJvblNlYXJjaCIsInBsYWNlaG9sZGVyIiwiX3VzZVN0YXRlIiwiX3VzZVN0YXRlMiIsIl9zbGljZWRUb0FycmF5IiwidmFsdWUiLCJzZXRWYWx1ZSIsImRlYm91bmNlUmVmIiwiaGFuZGxlQ2hhbmdlIiwiZXZlbnQiLCJuZXh0VmFsdWUiLCJ0YXJnZXQiLCJjdXJyZW50IiwiY2xlYXJUaW1lb3V0Iiwic2V0VGltZW91dCIsInRyaW0iLCJjaGlsZHJlbiIsIndpZHRoIiwiaGVpZ2h0IiwiY29sb3IiLCJ0eXBlIiwib25DaGFuZ2UiLCJDaGF0QUlNeVNraWxscyIsIl9yZWYyIiwibXlTa2lsbHMiLCJzaGFyZWRTa2lsbHMiLCJfcmVmMiRsb2FkaW5nIiwibG9hZGluZyIsIm9uRGVsZXRlU2tpbGwiLCJfdXNlVHJhbnNsYXRpb24iLCJjaGF0QUkiLCJ0IiwiZXZlbnRBbXBsaXR1ZGUiLCJfdXNlU25hY2tCYXJNYW5hZ2VyIiwiaGFuZGxlU25hY2tiYXJTdWNjZXNzIiwiaGFuZGxlU25hY2tiYXJFcnJvciIsInRvb2x0aXBaSW5kZXgiLCJsaXN0U2Nyb2xsUmVmIiwiX3VzZVN0YXRlMyIsIl91c2VTdGF0ZTQiLCJhY3RpdmVUYWIiLCJzZXRBY3RpdmVUYWIiLCJfdXNlU3RhdGU1IiwiX3VzZVN0YXRlNiIsInNlYXJjaFF1ZXJ5Iiwic2V0U2VhcmNoUXVlcnkiLCJfdXNlU3RhdGU3IiwiX3VzZVN0YXRlOCIsIm1lbnVPcGVuRm9yU2tpbGxJZCIsInNldE1lbnVPcGVuRm9yU2tpbGxJZCIsIl91c2VTdGF0ZTkiLCJfdXNlU3RhdGUwIiwiY2FyZE1lbnVQbGFjZW1lbnQiLCJzZXRDYXJkTWVudVBsYWNlbWVudCIsIl91c2VTdGF0ZTEiLCJfdXNlU3RhdGUxMCIsInNraWxsVG9EZWxldGUiLCJzZXRTa2lsbFRvRGVsZXRlIiwiaXNNaW5lVGFiIiwidGFiU2tpbGxzIiwiZmlsdGVyZWRTa2lsbHMiLCJub3JtYWxpemVkUXVlcnkiLCJ0b0xvd2VyQ2FzZSIsIm1hdGNoZWQiLCJmaWx0ZXIiLCJza2lsbCIsImluY2x1ZGVzIiwiX3RvQ29uc3VtYWJsZUFycmF5Iiwic29ydCIsImEiLCJiIiwibG9jYWxlQ29tcGFyZSIsImhhbmRsZUNyZWF0ZVNraWxsIiwiZnJvbUVtcHR5IiwiaXNFZGl0aW5nIiwiaW50ZW50IiwiY2FyZE1lbnVIZWlnaHRQeCIsImhhbmRsZVRvZ2dsZUNhcmRNZW51Iiwic2tpbGxJZCIsInByZXZlbnREZWZhdWx0Iiwic3RvcFByb3BhZ2F0aW9uIiwiY2FyZEFuY2hvciIsImN1cnJlbnRUYXJnZXQiLCJjbG9zZXN0IiwiSFRNTEVsZW1lbnQiLCJwcmV2IiwiaGFuZGxlVXNlU2tpbGwiLCJhaUNoYXRTa2lsbFVzZSIsInNraWxsX2lkIiwiaWQiLCJhY2Nlc3NfdHlwZSIsInNvdXJjZSIsImlzX3NoYXJlZCIsInVzZUZpcnN0QWdlbnQiLCJoYW5kbGVPcGVuU2tpbGwiLCJpc1JlYWRPbmx5IiwiaXNTaGFyZWQiLCJnZW5lcmFsIiwiZGVzY3JpcHRpb24iLCJjb250ZW50IiwiY3JlYXRlZF9ieV9uYW1lIiwiY3JlYXRlZF9hdCIsInVwZGF0ZWRfYXQiLCJkZWxldGVNb2RhbENoYXQiLCJ0aXRsZSIsImhhbmRsZUNvbmZpcm1EZWxldGUiLCJfcmVmMyIsIl9hc3luY1RvR2VuZXJhdG9yIiwiX3JlZ2VuZXJhdG9yUnVudGltZSIsIm1hcmsiLCJfY2FsbGVlIiwiY2hhdCIsIl90Iiwid3JhcCIsIl9jb250ZXh0IiwibmV4dCIsImFpQ2hhdFNraWxsQWJtRGVsZXRlIiwic3RvcCIsIl94IiwiYXBwbHkiLCJoYW5kbGVDbGlja091dHNpZGUiLCJhZGRFdmVudExpc3RlbmVyIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsImhhbmRsZVJlcG9zaXRpb24iLCJfbGlzdFNjcm9sbFJlZiRjdXJyZW4iLCJvcGVuQ2FyZCIsInF1ZXJ5U2VsZWN0b3IiLCJzY3JvbGxDb250YWluZXIiLCJwYXNzaXZlIiwidGFiRGVzY3JpcHRpb24iLCJpc01pbmVFbXB0eSIsInNob3dTa2lsbHNUb29sYmFyIiwicmVuZGVyQ3JlYXRlU2tpbGxCdXR0b24iLCJvbkNsaWNrIiwicmVuZGVyU2VhcmNoRW1wdHlTdGF0ZSIsInJlbmRlckVtcHR5U3RhdGUiLCIkYWN0aXZlIiwiX29iamVjdFNwcmVhZCIsInpJbmRleCIsInJlZiIsInNpemUiLCJtYXAiLCJpbmRleCIsIiRpbmRleCIsIiRlbGV2YXRlZCIsIiR2aXNpYmxlIiwiJHBsYWNlbWVudCIsIiRkZXN0cnVjdGl2ZSIsIm9uQ2xvc2UiLCJoYW5kbGVycyIsImhhbmRsZUNvbmZpcm1BY3Rpb24iLCJhY3Rpb24iXSwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50cy9tb2xlY3VsZXMvQ2hhdEFJTXlTa2lsbHMvQ2hhdEFJTXlTa2lsbHMudHN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCwgeyB1c2VDYWxsYmFjaywgdXNlRWZmZWN0LCB1c2VNZW1vLCB1c2VSZWYsIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBNZW51RG90cyB9IGZyb20gJ0Bwcm9qZWN0Y29yL2ljb25zL2xpYi9jb21wb25lbnRzL01lbnVEb3RzJ1xuaW1wb3J0IHsgU2VhcmNoIH0gZnJvbSAnQHByb2plY3Rjb3IvaWNvbnMvbGliL2NvbXBvbmVudHMvU2VhcmNoJ1xuaW1wb3J0IHsgSW5mb3JtYXRpb25DaXJjbGUgfSBmcm9tICdAcHJvamVjdGNvci9pY29ucy9saWIvY29tcG9uZW50cy9JbmZvcm1hdGlvbkNpcmNsZSdcbmltcG9ydCB7IFRvb2x0aXAgfSBmcm9tICdAcHJvamVjdGNvci90b29sdGlwdjIvbGliL2NvbXBvbmVudHMvVG9vbHRpcCdcbmltcG9ydCB7IHVzZVRyYW5zbGF0aW9uIH0gZnJvbSAncmVhY3QtaTE4bmV4dCdcbmltcG9ydCB7IFNraWxsIH0gZnJvbSAnLi4vLi4vLi4vdHlwZXMvc2tpbGwnXG5pbXBvcnQgeyBkZWxldGVTa2lsbCB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL21haWEvU2tpbGxzL2RlbGV0ZVNraWxsJ1xuaW1wb3J0IHsgdXNlU25hY2tCYXJNYW5hZ2VyIH0gZnJvbSAnLi4vLi4vLi4vaG9va3MvdXNlU25hY2tCYXJNYW5hZ2VyL3VzZVNuYWNrQmFyTWFuYWdlcidcbmltcG9ydCB7IEVWRU5UUywgdXNlRXZlbnQgfSBmcm9tICcuLi8uLi8uLi9ob29rcy91c2VFdmVudCdcbmltcG9ydCB7IHVzZU1haWFUYXNrUGFuZWxaSW5kZXggfSBmcm9tICcuLi8uLi8uLi9ob29rcy91c2VNYWlhVGFza1BhbmVsWkluZGV4J1xuaW1wb3J0IHsgRGVsZXRlUXVlc3Rpb25Nb2RhbCB9IGZyb20gJy4uLy4uL29yZ2FuaXNtcy9EZWxldGVRdWVzdGlvbk1vZGFsL0RlbGV0ZVF1ZXN0aW9uTW9kYWwnXG5pbXBvcnQgeyBTS0lMTF9VU0VfQUZURVJfU0FWRV9FVkVOVCB9IGZyb20gJy4uLy4uL29yZ2FuaXNtcy9BYm1Ta2lsbE1vZGFsL0FibVNraWxsTW9kYWwnXG5pbXBvcnQgeyBTRUNUSU9OUyB9IGZyb20gJy4uLy4uLy4uL2NvbnN0YW50cy9jb25maWcnXG5pbXBvcnQgeyBMb2FkZXIgfSBmcm9tICcuLi8uLi9hdG9tcy9Mb2FkZXInXG5pbXBvcnQgeyBTa2lsbENyZWF0ZWRCeUljb24gfSBmcm9tICcuLi8uLi9hdG9tcy9pY29ucy9Ta2lsbENyZWF0ZWRCeUljb24nXG5pbXBvcnQgeyBTa2lsbFZpc2liaWxpdHlFdmVyeW9uZUljb24gfSBmcm9tICcuLi8uLi9hdG9tcy9pY29ucy9Ta2lsbFZpc2liaWxpdHlFdmVyeW9uZUljb24nXG5pbXBvcnQgeyBTa2lsbFZpc2liaWxpdHlPbmx5TWVJY29uIH0gZnJvbSAnLi4vLi4vYXRvbXMvaWNvbnMvU2tpbGxWaXNpYmlsaXR5T25seU1lSWNvbidcbmltcG9ydCB7XG4gIFNDTVNCb2R5LFxuICBTQ01TQ2FyZEJ1dHRvbixcbiAgU0NNU0NhcmRDb250ZW50VGV4dCxcbiAgU0NNU0NhcmRNZW51LFxuICBTQ01TQ2FyZE1lbnVJdGVtLFxuICBTQ01TQ2FyZFRpdGxlTmFtZSxcbiAgU0NNU0NhcmRUb3BSb3csXG4gIFNDTVNDYXJkVmlzaWJpbGl0eVJvdyxcbiAgU0NNU0NhcmRWaXNpYmlsaXR5VGV4dCxcbiAgU0NNU0NhcmRzTGlzdCxcbiAgU0NNU0NvbnRhaW5lcixcbiAgU0NNU0NyZWF0ZUJ1dHRvbixcbiAgU0NNU0NyZWF0ZUJ1dHRvblRleHQsXG4gIFNDTVNTaGFyZWRFbXB0eVN0YXRlUm9vdCxcbiAgU0NNU1NoYXJlZEVtcHR5U3RhdGVTdWJ0aXRsZSxcbiAgU0NNU1NoYXJlZEVtcHR5U3RhdGVUaXRsZSxcbiAgU0NNU1NoYXJlZEVtcHR5U3RhdGVUaXRsZUJsb2NrLFxuICBTQ01TS2ViYWJCdXR0b24sXG4gIFNDTVNMb2FkV3JhcHBlcixcbiAgU0NNU01ldGFEZXNjcmlwdGlvbixcbiAgU0NNU01ldGFSb3csXG4gIFNDTVNQYW5lbCxcbiAgU0NNU1BhbmVsSGVhZGVyLFxuICBTQ01TTGlzdFNjcm9sbEFyZWEsXG4gIFNDTVNTZWFyY2hJbnB1dCxcbiAgU0NNU1NlYXJjaFdyYXBwZXIsXG4gIFNDTVNUYWJCYXIsXG4gIFNDTVNUYWJCdXR0b24sXG4gIFNDTVNUYWJJbmZvSWNvbixcbiAgU0NNU1RpdGxlLFxuICBTQ01TVGl0bGVCbG9jayxcbn0gZnJvbSAnLi9DaGF0QUlNeVNraWxscy5zdHlsZXMnXG5cbnR5cGUgQ2hhdEFJTXlTa2lsbHNQcm9wcyA9IHtcbiAgbXlTa2lsbHM6IFNraWxsW11cbiAgc2hhcmVkU2tpbGxzOiBTa2lsbFtdXG4gIGxvYWRpbmc/OiBib29sZWFuXG4gIG9uRGVsZXRlU2tpbGw/OiAoc2tpbGxJZDogc3RyaW5nKSA9PiB2b2lkXG59XG5cbnR5cGUgU2tpbGxzVGFiID0gJ21pbmUnIHwgJ3NoYXJlZCdcblxudHlwZSBTa2lsbE1vZGFsSW50ZW50ID0gJ2dlbmVyYXRlJyB8ICd3cml0ZSdcblxudHlwZSBEcm9wZG93blBsYWNlbWVudCA9ICd0b3AnIHwgJ2JvdHRvbSdcblxuY29uc3QgRFJPUERPV05fR0FQX1BYID0gNlxuY29uc3QgQ0FSRF9NRU5VX0lURU1fSEVJR0hUX1BYID0gNDBcblxuY29uc3QgcmVzb2x2ZURyb3Bkb3duUGxhY2VtZW50ID0gKGFuY2hvcjogSFRNTEVsZW1lbnQsIGRyb3Bkb3duSGVpZ2h0OiBudW1iZXIpOiBEcm9wZG93blBsYWNlbWVudCA9PiB7XG4gIGNvbnN0IHJlY3QgPSBhbmNob3IuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KClcbiAgY29uc3Qgc3BhY2VCZWxvdyA9IHdpbmRvdy5pbm5lckhlaWdodCAtIHJlY3QuYm90dG9tIC0gRFJPUERPV05fR0FQX1BYXG4gIGNvbnN0IHNwYWNlQWJvdmUgPSByZWN0LnRvcCAtIERST1BET1dOX0dBUF9QWFxuXG4gIGlmIChzcGFjZUJlbG93ID49IGRyb3Bkb3duSGVpZ2h0KSByZXR1cm4gJ2JvdHRvbSdcbiAgaWYgKHNwYWNlQWJvdmUgPj0gZHJvcGRvd25IZWlnaHQpIHJldHVybiAndG9wJ1xuICByZXR1cm4gc3BhY2VCZWxvdyA+PSBzcGFjZUFib3ZlID8gJ2JvdHRvbScgOiAndG9wJ1xufVxuXG5jb25zdCBmb3JtYXRTa2lsbERpc3BsYXlOYW1lID0gKG5hbWU6IHN0cmluZykgPT4ge1xuICBjb25zdCBub3JtYWxpemVkID0gbmFtZS5yZXBsYWNlKC9eKEBcXC98IykvLCAnJylcbiAgcmV0dXJuIGAjJHtub3JtYWxpemVkfWBcbn1cblxuY29uc3Qgb3BlblNraWxsTW9kYWwgPSAoXG4gIHZhbHVlczoge1xuICAgIGlzRWRpdGluZzogYm9vbGVhblxuICAgIGlzUmVhZE9ubHk/OiBib29sZWFuXG4gICAgaXNTaGFyZWQ/OiBib29sZWFuXG4gICAgaW50ZW50PzogU2tpbGxNb2RhbEludGVudFxuICAgIGdlbmVyYWw/OiB7XG4gICAgICBpZD86IHN0cmluZ1xuICAgICAgbmFtZT86IHN0cmluZ1xuICAgICAgZGVzY3JpcHRpb24/OiBzdHJpbmdcbiAgICAgIGNvbnRlbnQ/OiBzdHJpbmdcbiAgICAgIGFjY2Vzc190eXBlPzogU2tpbGxbJ2FjY2Vzc190eXBlJ11cbiAgICAgIGNyZWF0ZWRfYnlfbmFtZT86IHN0cmluZ1xuICAgICAgY3JlYXRlZF9hdD86IHN0cmluZ1xuICAgICAgdXBkYXRlZF9hdD86IHN0cmluZ1xuICAgIH1cbiAgfSxcbiAgYW5hbHl0aWNzU291cmNlOiAnY2F0YWxvZycgfCAnZW1wdHknID0gJ2NhdGFsb2cnXG4pID0+IHtcbiAgZG9jdW1lbnQuZGlzcGF0Y2hFdmVudChcbiAgICBuZXcgQ3VzdG9tRXZlbnQoJ2FibS1za2lsbC1tb2RhbC1zZXQtdmFsdWVzJywge1xuICAgICAgZGV0YWlsOiB7XG4gICAgICAgIHNraWxsVmFsdWVzOiB7XG4gICAgICAgICAgdmFsdWVzLFxuICAgICAgICAgIGlzT3BlbjogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgICAgYW5hbHl0aWNzU291cmNlLFxuICAgICAgfSxcbiAgICB9KVxuICApXG59XG5cbmNvbnN0IFNraWxsU2VhcmNoSW5wdXQgPSBSZWFjdC5tZW1vKFxuICAoeyBvblNlYXJjaCwgcGxhY2Vob2xkZXIgfTogeyBvblNlYXJjaDogKHF1ZXJ5OiBzdHJpbmcpID0+IHZvaWQ7IHBsYWNlaG9sZGVyOiBzdHJpbmcgfSkgPT4ge1xuICAgIGNvbnN0IFt2YWx1ZSwgc2V0VmFsdWVdID0gdXNlU3RhdGUoJycpXG4gICAgY29uc3QgZGVib3VuY2VSZWYgPSB1c2VSZWY8UmV0dXJuVHlwZTx0eXBlb2Ygc2V0VGltZW91dD4gfCBudWxsPihudWxsKVxuXG4gICAgY29uc3QgaGFuZGxlQ2hhbmdlID0gdXNlQ2FsbGJhY2soXG4gICAgICAoZXZlbnQ6IFJlYWN0LkNoYW5nZUV2ZW50PEhUTUxJbnB1dEVsZW1lbnQ+KSA9PiB7XG4gICAgICAgIGNvbnN0IG5leHRWYWx1ZSA9IGV2ZW50LnRhcmdldC52YWx1ZVxuICAgICAgICBzZXRWYWx1ZShuZXh0VmFsdWUpXG4gICAgICAgIGlmIChkZWJvdW5jZVJlZi5jdXJyZW50KSBjbGVhclRpbWVvdXQoZGVib3VuY2VSZWYuY3VycmVudClcbiAgICAgICAgZGVib3VuY2VSZWYuY3VycmVudCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIG9uU2VhcmNoKG5leHRWYWx1ZS50cmltKCkpXG4gICAgICAgIH0sIDI1MClcbiAgICAgIH0sXG4gICAgICBbb25TZWFyY2hdXG4gICAgKVxuXG4gICAgdXNlRWZmZWN0KFxuICAgICAgKCkgPT4gKCkgPT4ge1xuICAgICAgICBpZiAoZGVib3VuY2VSZWYuY3VycmVudCkgY2xlYXJUaW1lb3V0KGRlYm91bmNlUmVmLmN1cnJlbnQpXG4gICAgICB9LFxuICAgICAgW11cbiAgICApXG5cbiAgICByZXR1cm4gKFxuICAgICAgPFNDTVNTZWFyY2hXcmFwcGVyPlxuICAgICAgICA8U2VhcmNoIHdpZHRoPXsxNn0gaGVpZ2h0PXsxNn0gY29sb3I9XCIjOTk5XCIgLz5cbiAgICAgICAgPFNDTVNTZWFyY2hJbnB1dCB0eXBlPVwidGV4dFwiIHZhbHVlPXt2YWx1ZX0gb25DaGFuZ2U9e2hhbmRsZUNoYW5nZX0gcGxhY2Vob2xkZXI9e3BsYWNlaG9sZGVyfSAvPlxuICAgICAgPC9TQ01TU2VhcmNoV3JhcHBlcj5cbiAgICApXG4gIH1cbilcblxuZXhwb3J0IGNvbnN0IENoYXRBSU15U2tpbGxzID0gKHsgbXlTa2lsbHMsIHNoYXJlZFNraWxscywgbG9hZGluZyA9IGZhbHNlLCBvbkRlbGV0ZVNraWxsIH06IENoYXRBSU15U2tpbGxzUHJvcHMpID0+IHtcbiAgY29uc3QgeyB0IH0gPSB1c2VUcmFuc2xhdGlvbihbU0VDVElPTlMuY2hhdEFJXSlcbiAgY29uc3QgZXZlbnRBbXBsaXR1ZGUgPSB1c2VFdmVudCgpXG4gIGNvbnN0IHsgaGFuZGxlU25hY2tiYXJTdWNjZXNzLCBoYW5kbGVTbmFja2JhckVycm9yIH0gPSB1c2VTbmFja0Jhck1hbmFnZXIoKVxuICBjb25zdCB0b29sdGlwWkluZGV4ID0gdXNlTWFpYVRhc2tQYW5lbFpJbmRleCgxNTAwLCAnb3ZlcmxheScpXG4gIGNvbnN0IGxpc3RTY3JvbGxSZWYgPSB1c2VSZWY8SFRNTERpdkVsZW1lbnQ+KG51bGwpXG4gIGNvbnN0IFthY3RpdmVUYWIsIHNldEFjdGl2ZVRhYl0gPSB1c2VTdGF0ZTxTa2lsbHNUYWI+KCdtaW5lJylcbiAgY29uc3QgW3NlYXJjaFF1ZXJ5LCBzZXRTZWFyY2hRdWVyeV0gPSB1c2VTdGF0ZSgnJylcbiAgY29uc3QgW21lbnVPcGVuRm9yU2tpbGxJZCwgc2V0TWVudU9wZW5Gb3JTa2lsbElkXSA9IHVzZVN0YXRlPHN0cmluZyB8IG51bGw+KG51bGwpXG4gIGNvbnN0IFtjYXJkTWVudVBsYWNlbWVudCwgc2V0Q2FyZE1lbnVQbGFjZW1lbnRdID0gdXNlU3RhdGU8RHJvcGRvd25QbGFjZW1lbnQ+KCdib3R0b20nKVxuICBjb25zdCBbc2tpbGxUb0RlbGV0ZSwgc2V0U2tpbGxUb0RlbGV0ZV0gPSB1c2VTdGF0ZTxTa2lsbCB8IG51bGw+KG51bGwpXG4gIGNvbnN0IGlzTWluZVRhYiA9IGFjdGl2ZVRhYiA9PT0gJ21pbmUnXG5cbiAgY29uc3QgdGFiU2tpbGxzID0gaXNNaW5lVGFiID8gbXlTa2lsbHMgOiBzaGFyZWRTa2lsbHNcblxuICBjb25zdCBmaWx0ZXJlZFNraWxscyA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGNvbnN0IG5vcm1hbGl6ZWRRdWVyeSA9IHNlYXJjaFF1ZXJ5LnRvTG93ZXJDYXNlKClcbiAgICBjb25zdCBtYXRjaGVkID0gbm9ybWFsaXplZFF1ZXJ5XG4gICAgICA/IHRhYlNraWxscy5maWx0ZXIoc2tpbGwgPT4gc2tpbGwubmFtZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKG5vcm1hbGl6ZWRRdWVyeSkpXG4gICAgICA6IHRhYlNraWxsc1xuICAgIHJldHVybiBbLi4ubWF0Y2hlZF0uc29ydCgoYSwgYikgPT4gYS5uYW1lLmxvY2FsZUNvbXBhcmUoYi5uYW1lKSlcbiAgfSwgW3NlYXJjaFF1ZXJ5LCB0YWJTa2lsbHNdKVxuXG4gIGNvbnN0IGhhbmRsZUNyZWF0ZVNraWxsID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGNvbnN0IGZyb21FbXB0eSA9IGFjdGl2ZVRhYiA9PT0gJ21pbmUnICYmICFsb2FkaW5nICYmIG15U2tpbGxzLmxlbmd0aCA9PT0gMCAmJiAhc2VhcmNoUXVlcnlcbiAgICBvcGVuU2tpbGxNb2RhbCh7IGlzRWRpdGluZzogZmFsc2UsIGludGVudDogJ3dyaXRlJyB9LCBmcm9tRW1wdHkgPyAnZW1wdHknIDogJ2NhdGFsb2cnKVxuICB9LCBbYWN0aXZlVGFiLCBsb2FkaW5nLCBteVNraWxscy5sZW5ndGgsIHNlYXJjaFF1ZXJ5XSlcblxuICAvLyBcIk1pcyBza2lsbHNcIiB0aWVuZSBVc2FyICsgRWRpdGFyICsgRWxpbWluYXI7IFwiQ29tcGFydGlkYXNcIiBzb2xvIFVzYXIuXG4gIGNvbnN0IGNhcmRNZW51SGVpZ2h0UHggPSBpc01pbmVUYWIgPyBDQVJEX01FTlVfSVRFTV9IRUlHSFRfUFggKiAzIDogQ0FSRF9NRU5VX0lURU1fSEVJR0hUX1BYXG5cbiAgY29uc3QgaGFuZGxlVG9nZ2xlQ2FyZE1lbnUgPSB1c2VDYWxsYmFjayhcbiAgICAoZXZlbnQ6IFJlYWN0Lk1vdXNlRXZlbnQ8SFRNTEJ1dHRvbkVsZW1lbnQ+LCBza2lsbElkOiBzdHJpbmcpID0+IHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KClcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgICBjb25zdCBjYXJkQW5jaG9yID0gZXZlbnQuY3VycmVudFRhcmdldC5jbG9zZXN0KCdbZGF0YS1za2lsbC1jYXJkLWlkXScpXG4gICAgICBpZiAoY2FyZEFuY2hvciBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSB7XG4gICAgICAgIHNldENhcmRNZW51UGxhY2VtZW50KHJlc29sdmVEcm9wZG93blBsYWNlbWVudChjYXJkQW5jaG9yLCBjYXJkTWVudUhlaWdodFB4KSlcbiAgICAgIH1cbiAgICAgIHNldE1lbnVPcGVuRm9yU2tpbGxJZChwcmV2ID0+IChwcmV2ID09PSBza2lsbElkID8gbnVsbCA6IHNraWxsSWQpKVxuICAgIH0sXG4gICAgW2NhcmRNZW51SGVpZ2h0UHhdXG4gIClcblxuICAvKiogTWlzbW8gZmx1am8gcXVlIGVsIGJvdMOzbiBcIlVzYXIgc2tpbGxcIiBkZWwgbW9kYWw6IGNoYXQgbnVldm8gY29uIGVsIHByaW1lciBhZ2VudGUgeSBsYSBtZW5jacOzbiBwdWVzdGEuICovXG4gIGNvbnN0IGhhbmRsZVVzZVNraWxsID0gdXNlQ2FsbGJhY2soXG4gICAgKHNraWxsOiBTa2lsbCkgPT4ge1xuICAgICAgZXZlbnRBbXBsaXR1ZGUoRVZFTlRTLmFpQ2hhdFNraWxsVXNlLCB7XG4gICAgICAgIHNraWxsX2lkOiBza2lsbC5pZCxcbiAgICAgICAgYWNjZXNzX3R5cGU6IHNraWxsLmFjY2Vzc190eXBlIHx8ICdvbmx5X21lJyxcbiAgICAgICAgc291cmNlOiAnY2FyZCcsXG4gICAgICAgIGlzX3NoYXJlZDogIWlzTWluZVRhYixcbiAgICAgIH0pXG4gICAgICBkb2N1bWVudC5kaXNwYXRjaEV2ZW50KFxuICAgICAgICBuZXcgQ3VzdG9tRXZlbnQoU0tJTExfVVNFX0FGVEVSX1NBVkVfRVZFTlQsIHtcbiAgICAgICAgICBkZXRhaWw6IHsgc2tpbGwsIHVzZUZpcnN0QWdlbnQ6IHRydWUgfSxcbiAgICAgICAgfSlcbiAgICAgIClcbiAgICAgIHNldE1lbnVPcGVuRm9yU2tpbGxJZChudWxsKVxuICAgIH0sXG4gICAgW2V2ZW50QW1wbGl0dWRlLCBpc01pbmVUYWJdXG4gIClcblxuICBjb25zdCBoYW5kbGVPcGVuU2tpbGwgPSB1c2VDYWxsYmFjayhcbiAgICAoc2tpbGw6IFNraWxsLCBpc1JlYWRPbmx5OiBib29sZWFuKSA9PiB7XG4gICAgICBvcGVuU2tpbGxNb2RhbCh7XG4gICAgICAgIGlzRWRpdGluZzogdHJ1ZSxcbiAgICAgICAgaXNSZWFkT25seSxcbiAgICAgICAgaXNTaGFyZWQ6ICFpc01pbmVUYWIsXG4gICAgICAgIGdlbmVyYWw6IHtcbiAgICAgICAgICBpZDogc2tpbGwuaWQsXG4gICAgICAgICAgbmFtZTogc2tpbGwubmFtZSxcbiAgICAgICAgICBkZXNjcmlwdGlvbjogc2tpbGwuZGVzY3JpcHRpb24sXG4gICAgICAgICAgY29udGVudDogc2tpbGwuY29udGVudCxcbiAgICAgICAgICBhY2Nlc3NfdHlwZTogc2tpbGwuYWNjZXNzX3R5cGUsXG4gICAgICAgICAgY3JlYXRlZF9ieV9uYW1lOiBza2lsbC5jcmVhdGVkX2J5X25hbWUsXG4gICAgICAgICAgY3JlYXRlZF9hdDogc2tpbGwuY3JlYXRlZF9hdCxcbiAgICAgICAgICB1cGRhdGVkX2F0OiBza2lsbC51cGRhdGVkX2F0LFxuICAgICAgICB9LFxuICAgICAgfSlcbiAgICAgIHNldE1lbnVPcGVuRm9yU2tpbGxJZChudWxsKVxuICAgIH0sXG4gICAgW2lzTWluZVRhYl1cbiAgKVxuXG4gIGNvbnN0IGRlbGV0ZU1vZGFsQ2hhdCA9IHVzZU1lbW8oXG4gICAgKCkgPT4gKHNraWxsVG9EZWxldGUgPyB7IHRpdGxlOiBza2lsbFRvRGVsZXRlLm5hbWUsIGlkOiBza2lsbFRvRGVsZXRlLmlkIH0gOiBudWxsKSxcbiAgICBbc2tpbGxUb0RlbGV0ZV1cbiAgKVxuXG4gIGNvbnN0IGhhbmRsZUNvbmZpcm1EZWxldGUgPSBhc3luYyAoY2hhdDogeyBpZDogc3RyaW5nIH0pID0+IHtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgZGVsZXRlU2tpbGwoY2hhdC5pZClcbiAgICAgIGV2ZW50QW1wbGl0dWRlKEVWRU5UUy5haUNoYXRTa2lsbEFibURlbGV0ZSwgeyBza2lsbF9pZDogY2hhdC5pZCwgc291cmNlOiAnY2F0YWxvZycgfSlcbiAgICAgIGhhbmRsZVNuYWNrYmFyU3VjY2Vzcyh0KCdteVNraWxscy5kZWxldGVTdWNjZXNzJykpXG4gICAgICBvbkRlbGV0ZVNraWxsPy4oY2hhdC5pZClcbiAgICAgIHNldFNraWxsVG9EZWxldGUobnVsbClcbiAgICAgIHNldE1lbnVPcGVuRm9yU2tpbGxJZChudWxsKVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBoYW5kbGVTbmFja2JhckVycm9yKHQoJ215U2tpbGxzLmRlbGV0ZUVycm9yJykpXG4gICAgfVxuICB9XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBoYW5kbGVDbGlja091dHNpZGUgPSAoKSA9PiB7XG4gICAgICBpZiAobWVudU9wZW5Gb3JTa2lsbElkKSB7XG4gICAgICAgIHNldE1lbnVPcGVuRm9yU2tpbGxJZChudWxsKVxuICAgICAgfVxuICAgIH1cblxuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgaGFuZGxlQ2xpY2tPdXRzaWRlKVxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdjbGljaycsIGhhbmRsZUNsaWNrT3V0c2lkZSlcbiAgICB9XG4gIH0sIFttZW51T3BlbkZvclNraWxsSWRdKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFtZW51T3BlbkZvclNraWxsSWQpIHJldHVybiB1bmRlZmluZWRcblxuICAgIGNvbnN0IGhhbmRsZVJlcG9zaXRpb24gPSAoKSA9PiB7XG4gICAgICBjb25zdCBvcGVuQ2FyZCA9IGxpc3RTY3JvbGxSZWYuY3VycmVudD8ucXVlcnlTZWxlY3RvcjxIVE1MQnV0dG9uRWxlbWVudD4oXG4gICAgICAgIGBbZGF0YS1za2lsbC1jYXJkLWlkPVwiJHttZW51T3BlbkZvclNraWxsSWR9XCJdYFxuICAgICAgKVxuICAgICAgaWYgKG9wZW5DYXJkKSB7XG4gICAgICAgIHNldENhcmRNZW51UGxhY2VtZW50KHJlc29sdmVEcm9wZG93blBsYWNlbWVudChvcGVuQ2FyZCwgY2FyZE1lbnVIZWlnaHRQeCkpXG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3Qgc2Nyb2xsQ29udGFpbmVyID0gbGlzdFNjcm9sbFJlZi5jdXJyZW50XG4gICAgc2Nyb2xsQ29udGFpbmVyPy5hZGRFdmVudExpc3RlbmVyKCdzY3JvbGwnLCBoYW5kbGVSZXBvc2l0aW9uLCB7IHBhc3NpdmU6IHRydWUgfSlcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncmVzaXplJywgaGFuZGxlUmVwb3NpdGlvbilcblxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBzY3JvbGxDb250YWluZXI/LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIGhhbmRsZVJlcG9zaXRpb24pXG4gICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigncmVzaXplJywgaGFuZGxlUmVwb3NpdGlvbilcbiAgICB9XG4gIH0sIFttZW51T3BlbkZvclNraWxsSWQsIGNhcmRNZW51SGVpZ2h0UHhdKVxuXG4gIGNvbnN0IHRhYkRlc2NyaXB0aW9uID0gaXNNaW5lVGFiID8gdCgnbXlTa2lsbHMubXlTa2lsbHNEZXNjcmlwdGlvbicpIDogdCgnbXlTa2lsbHMuc2hhcmVkU2tpbGxzRGVzY3JpcHRpb24nKVxuXG4gIGNvbnN0IGlzTWluZUVtcHR5ID0gaXNNaW5lVGFiICYmICFsb2FkaW5nICYmIG15U2tpbGxzLmxlbmd0aCA9PT0gMCAmJiAhc2VhcmNoUXVlcnlcbiAgY29uc3Qgc2hvd1NraWxsc1Rvb2xiYXIgPSBpc01pbmVUYWIgPyAhaXNNaW5lRW1wdHkgOiB0YWJTa2lsbHMubGVuZ3RoID4gMCB8fCAhIXNlYXJjaFF1ZXJ5XG5cbiAgY29uc3QgcmVuZGVyQ3JlYXRlU2tpbGxCdXR0b24gPSAoKSA9PiAoXG4gICAgPFNDTVNDcmVhdGVCdXR0b24gdHlwZT1cImJ1dHRvblwiIG9uQ2xpY2s9e2hhbmRsZUNyZWF0ZVNraWxsfT5cbiAgICAgIDxTQ01TQ3JlYXRlQnV0dG9uVGV4dD57dCgnbXlTa2lsbHMuY3JlYXRlU2tpbGwnKX08L1NDTVNDcmVhdGVCdXR0b25UZXh0PlxuICAgIDwvU0NNU0NyZWF0ZUJ1dHRvbj5cbiAgKVxuXG4gIGNvbnN0IHJlbmRlclNlYXJjaEVtcHR5U3RhdGUgPSAoKSA9PiAoXG4gICAgPFNDTVNTaGFyZWRFbXB0eVN0YXRlUm9vdD5cbiAgICAgIDxTQ01TU2hhcmVkRW1wdHlTdGF0ZVRpdGxlQmxvY2s+XG4gICAgICAgIDxTQ01TU2hhcmVkRW1wdHlTdGF0ZVRpdGxlPnt0KCdteVNraWxscy5zZWFyY2hFbXB0eVN0YXRlVGl0bGUnKX08L1NDTVNTaGFyZWRFbXB0eVN0YXRlVGl0bGU+XG4gICAgICAgIDxTQ01TU2hhcmVkRW1wdHlTdGF0ZVN1YnRpdGxlPnt0KCdteVNraWxscy5zZWFyY2hFbXB0eVN0YXRlRGVzY3JpcHRpb24nKX08L1NDTVNTaGFyZWRFbXB0eVN0YXRlU3VidGl0bGU+XG4gICAgICA8L1NDTVNTaGFyZWRFbXB0eVN0YXRlVGl0bGVCbG9jaz5cbiAgICA8L1NDTVNTaGFyZWRFbXB0eVN0YXRlUm9vdD5cbiAgKVxuXG4gIGNvbnN0IHJlbmRlckVtcHR5U3RhdGUgPSAoKSA9PiB7XG4gICAgaWYgKCFpc01pbmVUYWIpIHtcbiAgICAgIGlmIChzZWFyY2hRdWVyeSkge1xuICAgICAgICByZXR1cm4gcmVuZGVyU2VhcmNoRW1wdHlTdGF0ZSgpXG4gICAgICB9XG5cbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxTQ01TU2hhcmVkRW1wdHlTdGF0ZVJvb3Q+XG4gICAgICAgICAgPFNDTVNTaGFyZWRFbXB0eVN0YXRlVGl0bGVCbG9jaz5cbiAgICAgICAgICAgIDxTQ01TU2hhcmVkRW1wdHlTdGF0ZVRpdGxlPnt0KCdteVNraWxscy5zaGFyZWRFbXB0eVN0YXRlVGl0bGUnKX08L1NDTVNTaGFyZWRFbXB0eVN0YXRlVGl0bGU+XG4gICAgICAgICAgICA8U0NNU1NoYXJlZEVtcHR5U3RhdGVTdWJ0aXRsZT57dCgnbXlTa2lsbHMuc2hhcmVkRW1wdHlTdGF0ZURlc2NyaXB0aW9uJyl9PC9TQ01TU2hhcmVkRW1wdHlTdGF0ZVN1YnRpdGxlPlxuICAgICAgICAgIDwvU0NNU1NoYXJlZEVtcHR5U3RhdGVUaXRsZUJsb2NrPlxuICAgICAgICA8L1NDTVNTaGFyZWRFbXB0eVN0YXRlUm9vdD5cbiAgICAgIClcbiAgICB9XG5cbiAgICBpZiAoc2VhcmNoUXVlcnkpIHtcbiAgICAgIHJldHVybiByZW5kZXJTZWFyY2hFbXB0eVN0YXRlKClcbiAgICB9XG5cbiAgICByZXR1cm4gKFxuICAgICAgPFNDTVNTaGFyZWRFbXB0eVN0YXRlUm9vdD5cbiAgICAgICAgPFNDTVNTaGFyZWRFbXB0eVN0YXRlVGl0bGVCbG9jaz5cbiAgICAgICAgICA8U0NNU1NoYXJlZEVtcHR5U3RhdGVUaXRsZT57dCgnbXlTa2lsbHMuZW1wdHlTdGF0ZVRpdGxlJyl9PC9TQ01TU2hhcmVkRW1wdHlTdGF0ZVRpdGxlPlxuICAgICAgICAgIDxTQ01TU2hhcmVkRW1wdHlTdGF0ZVN1YnRpdGxlPnt0KCdteVNraWxscy5lbXB0eVN0YXRlRGVzY3JpcHRpb24nKX08L1NDTVNTaGFyZWRFbXB0eVN0YXRlU3VidGl0bGU+XG4gICAgICAgIDwvU0NNU1NoYXJlZEVtcHR5U3RhdGVUaXRsZUJsb2NrPlxuICAgICAgICB7cmVuZGVyQ3JlYXRlU2tpbGxCdXR0b24oKX1cbiAgICAgIDwvU0NNU1NoYXJlZEVtcHR5U3RhdGVSb290PlxuICAgIClcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPFNDTVNDb250YWluZXI+XG4gICAgICA8U0NNU0JvZHk+XG4gICAgICAgIDxTQ01TVGl0bGVCbG9jaz5cbiAgICAgICAgICA8U0NNU1RpdGxlPnt0KCdteVNraWxscy50aXRsZScpfTwvU0NNU1RpdGxlPlxuICAgICAgICA8L1NDTVNUaXRsZUJsb2NrPlxuXG4gICAgICAgIDxTQ01TUGFuZWw+XG4gICAgICAgICAgPFNDTVNQYW5lbEhlYWRlcj5cbiAgICAgICAgICAgIDxTQ01TVGFiQmFyPlxuICAgICAgICAgICAgICA8U0NNU1RhYkJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgJGFjdGl2ZT17aXNNaW5lVGFifSBvbkNsaWNrPXsoKSA9PiBzZXRBY3RpdmVUYWIoJ21pbmUnKX0+XG4gICAgICAgICAgICAgICAge3QoJ215U2tpbGxzLnRhYk15U2tpbGxzJyl9XG4gICAgICAgICAgICAgIDwvU0NNU1RhYkJ1dHRvbj5cbiAgICAgICAgICAgICAgPFNDTVNUYWJCdXR0b24gdHlwZT1cImJ1dHRvblwiICRhY3RpdmU9eyFpc01pbmVUYWJ9IG9uQ2xpY2s9eygpID0+IHNldEFjdGl2ZVRhYignc2hhcmVkJyl9PlxuICAgICAgICAgICAgICAgIHt0KCdteVNraWxscy50YWJTaGFyZWRTa2lsbHMnKX1cbiAgICAgICAgICAgICAgPC9TQ01TVGFiQnV0dG9uPlxuICAgICAgICAgICAgICA8VG9vbHRpcCB0aXRsZT17dCgnbXlTa2lsbHMuaW5mb1Rvb2x0aXAnKX0gey4uLih0b29sdGlwWkluZGV4ICE9IG51bGwgPyB7IHpJbmRleDogdG9vbHRpcFpJbmRleCB9IDoge30pfT5cbiAgICAgICAgICAgICAgICA8U0NNU1RhYkluZm9JY29uIGFyaWEtbGFiZWw9e3QoJ215U2tpbGxzLmluZm9Ub29sdGlwJyl9PlxuICAgICAgICAgICAgICAgICAgPEluZm9ybWF0aW9uQ2lyY2xlIGNvbG9yPVwiIzgwODA4MFwiIHdpZHRoPXsyMH0gaGVpZ2h0PXsyMH0gLz5cbiAgICAgICAgICAgICAgICA8L1NDTVNUYWJJbmZvSWNvbj5cbiAgICAgICAgICAgICAgPC9Ub29sdGlwPlxuICAgICAgICAgICAgPC9TQ01TVGFiQmFyPlxuXG4gICAgICAgICAgICB7c2hvd1NraWxsc1Rvb2xiYXIgPyAoXG4gICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgPFNDTVNNZXRhUm93PlxuICAgICAgICAgICAgICAgICAgPFNDTVNNZXRhRGVzY3JpcHRpb24+e3RhYkRlc2NyaXB0aW9ufTwvU0NNU01ldGFEZXNjcmlwdGlvbj5cbiAgICAgICAgICAgICAgICAgIHtpc01pbmVUYWIgPyByZW5kZXJDcmVhdGVTa2lsbEJ1dHRvbigpIDogbnVsbH1cbiAgICAgICAgICAgICAgICA8L1NDTVNNZXRhUm93PlxuXG4gICAgICAgICAgICAgICAgPFNraWxsU2VhcmNoSW5wdXQgb25TZWFyY2g9e3NldFNlYXJjaFF1ZXJ5fSBwbGFjZWhvbGRlcj17dCgnbXlTa2lsbHMuc2VhcmNoUGxhY2Vob2xkZXInKX0gLz5cbiAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICA8L1NDTVNQYW5lbEhlYWRlcj5cblxuICAgICAgICAgIDxTQ01TTGlzdFNjcm9sbEFyZWEgcmVmPXtsaXN0U2Nyb2xsUmVmfT5cbiAgICAgICAgICAgIHtsb2FkaW5nID8gKFxuICAgICAgICAgICAgICA8U0NNU0xvYWRXcmFwcGVyPlxuICAgICAgICAgICAgICAgIDxMb2FkZXIgc2l6ZT1cInNtYWxsXCIgLz5cbiAgICAgICAgICAgICAgPC9TQ01TTG9hZFdyYXBwZXI+XG4gICAgICAgICAgICApIDogbnVsbH1cblxuICAgICAgICAgICAgeyFsb2FkaW5nICYmIGZpbHRlcmVkU2tpbGxzLmxlbmd0aCA/IChcbiAgICAgICAgICAgICAgPFNDTVNDYXJkc0xpc3Q+XG4gICAgICAgICAgICAgICAge2ZpbHRlcmVkU2tpbGxzLm1hcCgoc2tpbGwsIGluZGV4KSA9PiAoXG4gICAgICAgICAgICAgICAgICA8U0NNU0NhcmRCdXR0b25cbiAgICAgICAgICAgICAgICAgICAga2V5PXtza2lsbC5pZH1cbiAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgIGRhdGEtc2tpbGwtY2FyZC1pZD17c2tpbGwuaWR9XG4gICAgICAgICAgICAgICAgICAgICRpbmRleD17aW5kZXh9XG4gICAgICAgICAgICAgICAgICAgICRlbGV2YXRlZD17bWVudU9wZW5Gb3JTa2lsbElkID09PSBza2lsbC5pZH1cbiAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gaGFuZGxlT3BlblNraWxsKHNraWxsLCB0cnVlKX1cbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPFNDTVNDYXJkVG9wUm93PlxuICAgICAgICAgICAgICAgICAgICAgIDxTQ01TQ2FyZFRpdGxlTmFtZT57Zm9ybWF0U2tpbGxEaXNwbGF5TmFtZShza2lsbC5uYW1lKX08L1NDTVNDYXJkVGl0bGVOYW1lPlxuICAgICAgICAgICAgICAgICAgICAgIDxTQ01TS2ViYWJCdXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgJHZpc2libGU9e21lbnVPcGVuRm9yU2tpbGxJZCA9PT0gc2tpbGwuaWR9XG4gICAgICAgICAgICAgICAgICAgICAgICBhcmlhLWxhYmVsPXt0KCdteVNraWxscy5jYXJkTWVudUFyaWFMYWJlbCcpfVxuICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17ZXZlbnQgPT4gaGFuZGxlVG9nZ2xlQ2FyZE1lbnUoZXZlbnQsIHNraWxsLmlkKX1cbiAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8TWVudURvdHMgY29sb3I9XCIjODA4MDgwXCIgd2lkdGg9ezIwfSBoZWlnaHQ9ezIwfSAvPlxuICAgICAgICAgICAgICAgICAgICAgIDwvU0NNU0tlYmFiQnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8L1NDTVNDYXJkVG9wUm93PlxuICAgICAgICAgICAgICAgICAgICA8U0NNU0NhcmRDb250ZW50VGV4dD57c2tpbGwuZGVzY3JpcHRpb24gfHwgc2tpbGwuY29udGVudH08L1NDTVNDYXJkQ29udGVudFRleHQ+XG4gICAgICAgICAgICAgICAgICAgIDxTQ01TQ2FyZFZpc2liaWxpdHlSb3c+XG4gICAgICAgICAgICAgICAgICAgICAge2lzTWluZVRhYiA/IChcbiAgICAgICAgICAgICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHtza2lsbC5hY2Nlc3NfdHlwZSA9PT0gJ2NvbXBhbnknID8gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTa2lsbFZpc2liaWxpdHlFdmVyeW9uZUljb24gLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U2tpbGxWaXNpYmlsaXR5T25seU1lSWNvbiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgICAgICAgICA8U0NNU0NhcmRWaXNpYmlsaXR5VGV4dD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7c2tpbGwuYWNjZXNzX3R5cGUgPT09ICdjb21wYW55J1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyB0KCdteVNraWxscy52aXNpYmlsaXR5RXZlcnlvbmUnKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiB0KCdteVNraWxscy52aXNpYmlsaXR5T25seU1lJyl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvU0NNU0NhcmRWaXNpYmlsaXR5VGV4dD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICAgICAgICAgICAgICAgIHshaXNNaW5lVGFiICYmIHNraWxsLmNyZWF0ZWRfYnlfbmFtZSA/IChcbiAgICAgICAgICAgICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxTa2lsbENyZWF0ZWRCeUljb24gLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPFNDTVNDYXJkVmlzaWJpbGl0eVRleHQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3QoJ215U2tpbGxzLnNoYXJlZENyZWF0ZWRCeScsIHsgbmFtZTogc2tpbGwuY3JlYXRlZF9ieV9uYW1lIH0pfVxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L1NDTVNDYXJkVmlzaWJpbGl0eVRleHQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8Lz5cbiAgICAgICAgICAgICAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICAgICAgICAgICAgPC9TQ01TQ2FyZFZpc2liaWxpdHlSb3c+XG4gICAgICAgICAgICAgICAgICAgIHttZW51T3BlbkZvclNraWxsSWQgPT09IHNraWxsLmlkID8gKFxuICAgICAgICAgICAgICAgICAgICAgIDxTQ01TQ2FyZE1lbnVcbiAgICAgICAgICAgICAgICAgICAgICAgICRwbGFjZW1lbnQ9e2NhcmRNZW51UGxhY2VtZW50fVxuICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17ZXZlbnQgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxTQ01TQ2FyZE1lbnVJdGVtIHR5cGU9XCJidXR0b25cIiBvbkNsaWNrPXsoKSA9PiBoYW5kbGVVc2VTa2lsbChza2lsbCl9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICB7dCgnbXlTa2lsbHMudXNlU2tpbGwnKX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvU0NNU0NhcmRNZW51SXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgIHtpc01pbmVUYWIgPyAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNDTVNDYXJkTWVudUl0ZW0gdHlwZT1cImJ1dHRvblwiIG9uQ2xpY2s9eygpID0+IGhhbmRsZU9wZW5Ta2lsbChza2lsbCwgZmFsc2UpfT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt0KCdteVNraWxscy5lZGl0Jyl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9TQ01TQ2FyZE1lbnVJdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxTQ01TQ2FyZE1lbnVJdGVtIHR5cGU9XCJidXR0b25cIiAkZGVzdHJ1Y3RpdmUgb25DbGljaz17KCkgPT4gc2V0U2tpbGxUb0RlbGV0ZShza2lsbCl9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3QoJ215U2tpbGxzLmRlbGV0ZScpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvU0NNU0NhcmRNZW51SXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICAgICAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICAgICAgICAgICAgICA8L1NDTVNDYXJkTWVudT5cbiAgICAgICAgICAgICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAgICAgICAgICA8L1NDTVNDYXJkQnV0dG9uPlxuICAgICAgICAgICAgICAgICkpfVxuICAgICAgICAgICAgICA8L1NDTVNDYXJkc0xpc3Q+XG4gICAgICAgICAgICApIDogbnVsbH1cblxuICAgICAgICAgICAgeyFsb2FkaW5nICYmICFmaWx0ZXJlZFNraWxscy5sZW5ndGggPyByZW5kZXJFbXB0eVN0YXRlKCkgOiBudWxsfVxuICAgICAgICAgIDwvU0NNU0xpc3RTY3JvbGxBcmVhPlxuICAgICAgICA8L1NDTVNQYW5lbD5cbiAgICAgIDwvU0NNU0JvZHk+XG5cbiAgICAgIHtkZWxldGVNb2RhbENoYXQgPyAoXG4gICAgICAgIDxEZWxldGVRdWVzdGlvbk1vZGFsXG4gICAgICAgICAgb25DbG9zZT17KCkgPT4gc2V0U2tpbGxUb0RlbGV0ZShudWxsKX1cbiAgICAgICAgICBoYW5kbGVycz17e1xuICAgICAgICAgICAgaGFuZGxlQ29uZmlybUFjdGlvbjogaGFuZGxlQ29uZmlybURlbGV0ZSxcbiAgICAgICAgICB9fVxuICAgICAgICAgIGNoYXQ9e2RlbGV0ZU1vZGFsQ2hhdH1cbiAgICAgICAgICBhY3Rpb249XCJza2lsbFwiXG4gICAgICAgIC8+XG4gICAgICApIDogbnVsbH1cbiAgICA8L1NDTVNDb250YWluZXI+XG4gIClcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUFBLE9BQU9BLEtBQUssSUFBSUMsV0FBVyxFQUFFQyxTQUFTLEVBQUVDLE9BQU8sRUFBRUMsTUFBTSxFQUFFQyxRQUFRLFFBQVEsT0FBTztBQUNoRixTQUFTQyxRQUFRLFFBQVEsMkNBQTJDO0FBQ3BFLFNBQVNDLE1BQU0sUUFBUSx5Q0FBeUM7QUFDaEUsU0FBU0MsaUJBQWlCLFFBQVEsb0RBQW9EO0FBQ3RGLFNBQVNDLE9BQU8sUUFBUSw4Q0FBOEM7QUFDdEUsU0FBU0MsY0FBYyxRQUFRLGVBQWU7QUFFOUMsU0FBU0MsV0FBVyxRQUFRLDJDQUEyQztBQUN2RSxTQUFTQyxrQkFBa0IsUUFBUSxzREFBc0Q7QUFDekYsU0FBU0MsTUFBTSxFQUFFQyxRQUFRLFFBQVEseUJBQXlCO0FBQzFELFNBQVNDLHNCQUFzQixRQUFRLHVDQUF1QztBQUM5RSxTQUFTQyxtQkFBbUIsUUFBUSx5REFBeUQ7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