@projectcor/maia-components 2.11.109-4 → 2.11.110-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 (86) hide show
  1. package/lib/components/atoms/ContextMentionChip/buildChipElement.js +12 -1
  2. package/lib/components/atoms/ContextMentionEditor/ContextMentionEditor.js +127 -5
  3. package/lib/components/atoms/ContextMentionItem/ContextMentionItem.js +2 -29
  4. package/lib/components/atoms/ContextMentionItem/ContextMentionItem.styles.js +24 -33
  5. package/lib/components/atoms/ContextMentionPopover/ContextMentionPopover.js +2 -19
  6. package/lib/components/atoms/IconButton.js +2 -2
  7. package/lib/components/atoms/MAIAInput/MAIAInput.js +203 -88
  8. package/lib/components/atoms/MAIAInput/styles.js +15 -11
  9. package/lib/components/atoms/SkillsDropdown/SkillsDropdown.js +188 -0
  10. package/lib/components/atoms/SkillsDropdown/SkillsDropdown.styles.js +69 -0
  11. package/lib/components/atoms/SkillsDropdown/index.js +2 -0
  12. package/lib/components/atoms/icons/PlusIcon.js +29 -0
  13. package/lib/components/atoms/icons/RetryIcon.js +34 -0
  14. package/lib/components/atoms/icons/SkillVisibilityEveryoneIcon.js +23 -0
  15. package/lib/components/atoms/icons/SkillVisibilityOnlyMeIcon.js +23 -0
  16. package/lib/components/atoms/icons/SkillsNavIcon.js +4 -7
  17. package/lib/components/atoms/icons/index.js +4 -1
  18. package/lib/components/molecules/ChatAIContent/ChatAIContent.js +5 -3
  19. package/lib/components/molecules/ChatAIMessages/ChatAIMessages.js +135 -380
  20. package/lib/components/molecules/ChatAIMessages/newStyles.js +18 -50
  21. package/lib/components/molecules/ChatAIModal/ChatAIModal.js +198 -198
  22. package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.js +11 -16
  23. package/lib/components/molecules/ChatAIModal/components/MaiaMinimizedPill/MaiaMinimizedPill.js +8 -26
  24. package/lib/components/molecules/ChatAIModal/components/MaiaMinimizedPill/MaiaMinimizedPill.styles.js +7 -24
  25. package/lib/components/molecules/ChatAIMySkills/ChatAIMySkills.js +259 -232
  26. package/lib/components/molecules/ChatAIMySkills/ChatAIMySkills.styles.js +124 -104
  27. package/lib/components/molecules/ContextMentionInput/ContextMentionInput.js +1 -3
  28. package/lib/components/molecules/MessageFeedback/MessageFeedback.js +14 -2
  29. package/lib/components/molecules/MessageFeedback/styles.js +2 -6
  30. package/lib/components/molecules/Sidebar/Sidebar.js +5 -4
  31. package/lib/components/molecules/Sidebar/Sidebar.layout.styles.js +2 -2
  32. package/lib/components/organisms/AbmSkillGenerateModal/AbmSkillGenerateModal.js +8 -1
  33. package/lib/components/organisms/AbmSkillModal/AbmSkillModal.js +285 -167
  34. package/lib/components/organisms/AbmSkillModal/AbmSkillModal.styles.js +86 -66
  35. package/lib/components/organisms/ChatAI/ChatAI.js +3 -22
  36. package/lib/components/organisms/ClientAIButton/ClientAIButton.js +1 -4
  37. package/lib/components/organisms/ProjectAIButton/ProjectAIButton.js +1 -4
  38. package/lib/constants/config.js +1 -4
  39. package/lib/constants/permissions/utils.js +3 -3
  40. package/lib/context/global-context.js +1 -1
  41. package/lib/dev/DevChatAI.js +1 -4
  42. package/lib/hooks/useChatManager/useChatManager.js +401 -146
  43. package/lib/hooks/useChatMessages/useChatMessages.js +27 -25
  44. package/lib/hooks/useContextMentions.js +93 -56
  45. package/lib/hooks/useEntitySearch.js +92 -278
  46. package/lib/hooks/useMentionAllowedTypes.js +9 -25
  47. package/lib/hooks/useMentionPopover.js +9 -33
  48. package/lib/hooks/useOrchestratorStream/useOrchestratorStream.interface.js +1 -1
  49. package/lib/hooks/useOrchestratorStream/useOrchestratorStream.js +80 -6
  50. package/lib/hooks/useProjectSummaryConfig.js +17 -36
  51. package/lib/hooks/useSkillsCatalog.js +66 -0
  52. package/lib/lang/br/index.js +61 -251
  53. package/lib/lang/en/index.js +61 -251
  54. package/lib/lang/es/index.js +62 -252
  55. package/lib/lang/fr/index.js +61 -251
  56. package/lib/services/maia/Orchestrator/index.js +4 -3
  57. package/lib/services/maia/Orchestrator/orchestrator.js +84 -23
  58. package/lib/services/maia/Skills/createSkill.js +1 -1
  59. package/lib/services/maia/Skills/getSkills.js +70 -40
  60. package/lib/services/maia/Skills/updateSkill.js +1 -1
  61. package/lib/services/utils/mapChatMessages.js +26 -25
  62. package/lib/store/maiaLastChatPersistence.js +35 -0
  63. package/lib/store/sessions/sessionStreamManager.js +191 -99
  64. package/lib/store/sessions/sessions.types.js +1 -1
  65. package/lib/types/Chat.js +1 -1
  66. package/lib/types/skill.js +1 -1
  67. package/lib/utils/contextMentionTriggers.js +2 -5
  68. package/lib/utils/hitlAnalytics.js +3 -4
  69. package/lib/utils/maiaHostOpen.js +1 -10
  70. package/lib/utils/renderContextMentions.js +39 -18
  71. package/lib/utils/retryCompletion.js +85 -0
  72. package/lib/utils/streamActivityMessages.js +41 -106
  73. package/package.json +1 -1
  74. package/lib/components/atoms/ReasoningBlock/ReasoningBlock.js +0 -136
  75. package/lib/components/atoms/ReasoningBlock/ReasoningBlock.styles.js +0 -73
  76. package/lib/components/atoms/ReasoningBlock/index.js +0 -2
  77. package/lib/components/organisms/CloseWhileGeneratingModal/CloseWhileGeneratingModal.js +0 -56
  78. package/lib/components/organisms/CloseWhileGeneratingModal/CloseWhileGeneratingModal.styles.js +0 -35
  79. package/lib/components/organisms/CloseWhileGeneratingModal/index.js +0 -2
  80. package/lib/hooks/useReasoningTrace/index.js +0 -3
  81. package/lib/hooks/useReasoningTrace/reasoningStore.js +0 -142
  82. package/lib/hooks/useReasoningTrace/useReasoningTrace.js +0 -14
  83. package/lib/store/maiaMinimizedPersistence.js +0 -49
  84. package/lib/types/reasoning.js +0 -2
  85. package/lib/utils/autoApproveStorage.js +0 -26
  86. package/lib/utils/reasoningMappers.js +0 -62
@@ -1,19 +1,34 @@
1
1
  import _asyncToGenerator from "@babel/runtime/helpers/asyncToGenerator";
2
+ import _toConsumableArray from "@babel/runtime/helpers/toConsumableArray";
2
3
  import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
3
4
  import _regeneratorRuntime from "@babel/runtime/regenerator";
4
- import React, { useCallback, useEffect, useMemo, useState } from 'react';
5
+ import React, { useCallback, useEffect, useMemo, useRef, useState } from 'react';
5
6
  import { MenuDots } from '@projectcor/icons/lib/components/MenuDots';
7
+ import { Search } from '@projectcor/icons/lib/components/Search';
6
8
  import { useTranslation } from 'react-i18next';
7
- import { useUser } from '../../../context/cor-user';
8
9
  import { deleteSkill } from '../../../services/maia/Skills/deleteSkill';
9
10
  import { useSnackBarManager } from '../../../hooks/useSnackBarManager/useSnackBarManager';
10
11
  import { DeleteQuestionModal } from '../../organisms/DeleteQuestionModal/DeleteQuestionModal';
11
- import { SKILL_GENERATE_OPEN_EVENT } from '../../organisms/AbmSkillGenerateModal/AbmSkillGenerateModal';
12
12
  import { SECTIONS } from '../../../constants/config';
13
13
  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 } from './ChatAIMySkills.styles';
15
- import { MAIAIsologo } from '../../atoms/icons';
16
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
14
+ import { SkillVisibilityEveryoneIcon } from '../../atoms/icons/SkillVisibilityEveryoneIcon';
15
+ import { SkillVisibilityOnlyMeIcon } from '../../atoms/icons/SkillVisibilityOnlyMeIcon';
16
+ 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, SCMSTitle, SCMSTitleBlock } from './ChatAIMySkills.styles';
17
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
18
+ var DROPDOWN_GAP_PX = 6;
19
+ var CARD_MENU_HEIGHT_PX = 88;
20
+ var resolveDropdownPlacement = function resolveDropdownPlacement(anchor, dropdownHeight) {
21
+ var rect = anchor.getBoundingClientRect();
22
+ var spaceBelow = window.innerHeight - rect.bottom - DROPDOWN_GAP_PX;
23
+ var spaceAbove = rect.top - DROPDOWN_GAP_PX;
24
+ if (spaceBelow >= dropdownHeight) return 'bottom';
25
+ if (spaceAbove >= dropdownHeight) return 'top';
26
+ return spaceBelow >= spaceAbove ? 'bottom' : 'top';
27
+ };
28
+ var formatSkillDisplayName = function formatSkillDisplayName(name) {
29
+ var normalized = name.replace(/^(@\/|#)/, '');
30
+ return "#".concat(normalized);
31
+ };
17
32
  var openSkillModal = function openSkillModal(values) {
18
33
  document.dispatchEvent(new CustomEvent('abm-skill-modal-set-values', {
19
34
  detail: {
@@ -24,144 +39,116 @@ var openSkillModal = function openSkillModal(values) {
24
39
  }
25
40
  }));
26
41
  };
27
- var IconChat = function IconChat() {
28
- return /*#__PURE__*/_jsx("svg", {
29
- width: "16",
30
- height: "16",
31
- viewBox: "0 0 16 16",
32
- fill: "none",
33
- "aria-hidden": "true",
34
- children: /*#__PURE__*/_jsx("path", {
35
- 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",
36
- stroke: "#666",
37
- strokeWidth: "1.3",
38
- strokeLinejoin: "round"
39
- })
40
- });
41
- };
42
- var IconClipboard = function IconClipboard() {
43
- return /*#__PURE__*/_jsxs("svg", {
44
- width: "16",
45
- height: "16",
46
- viewBox: "0 0 16 16",
47
- fill: "none",
48
- "aria-hidden": "true",
49
- children: [/*#__PURE__*/_jsx("rect", {
50
- x: "3.5",
51
- y: "3",
52
- width: "9",
53
- height: "11",
54
- rx: "1.5",
55
- stroke: "#666",
56
- strokeWidth: "1.3"
57
- }), /*#__PURE__*/_jsx("rect", {
58
- x: "5.75",
59
- y: "1.75",
60
- width: "4.5",
61
- height: "2.5",
62
- rx: "0.75",
63
- stroke: "#666",
64
- strokeWidth: "1.3"
65
- }), /*#__PURE__*/_jsx("path", {
66
- d: "M6 7.5h4M6 10h3",
67
- stroke: "#666",
68
- strokeWidth: "1.3",
69
- strokeLinecap: "round"
70
- })]
71
- });
72
- };
73
- var IconUpload = function IconUpload() {
74
- return /*#__PURE__*/_jsxs("svg", {
75
- width: "16",
76
- height: "16",
77
- viewBox: "0 0 16 16",
78
- fill: "none",
79
- "aria-hidden": "true",
80
- children: [/*#__PURE__*/_jsx("path", {
81
- d: "M8 10.5V3M8 3 5.5 5.5M8 3l2.5 2.5",
82
- stroke: "#666",
83
- strokeWidth: "1.3",
84
- strokeLinecap: "round",
85
- strokeLinejoin: "round"
86
- }), /*#__PURE__*/_jsx("path", {
87
- d: "M3 10v2a1 1 0 0 0 1 1h8a1 1 0 0 0 1-1v-2",
88
- stroke: "#666",
89
- strokeWidth: "1.3",
90
- strokeLinecap: "round"
42
+ var SkillSearchInput = /*#__PURE__*/React.memo(function (_ref) {
43
+ var onSearch = _ref.onSearch,
44
+ placeholder = _ref.placeholder;
45
+ var _useState = useState(''),
46
+ _useState2 = _slicedToArray(_useState, 2),
47
+ value = _useState2[0],
48
+ setValue = _useState2[1];
49
+ var debounceRef = useRef(null);
50
+ var handleChange = useCallback(function (event) {
51
+ var nextValue = event.target.value;
52
+ setValue(nextValue);
53
+ if (debounceRef.current) clearTimeout(debounceRef.current);
54
+ debounceRef.current = setTimeout(function () {
55
+ onSearch(nextValue.trim());
56
+ }, 250);
57
+ }, [onSearch]);
58
+ useEffect(function () {
59
+ return function () {
60
+ if (debounceRef.current) clearTimeout(debounceRef.current);
61
+ };
62
+ }, []);
63
+ return /*#__PURE__*/_jsxs(SCMSSearchWrapper, {
64
+ children: [/*#__PURE__*/_jsx(Search, {
65
+ width: 16,
66
+ height: 16,
67
+ color: "#999"
68
+ }), /*#__PURE__*/_jsx(SCMSSearchInput, {
69
+ type: "text",
70
+ value: value,
71
+ onChange: handleChange,
72
+ placeholder: placeholder
91
73
  })]
92
74
  });
93
- };
94
- export var ChatAIMySkills = function ChatAIMySkills(_ref) {
95
- var _user$permissions;
96
- var skills = _ref.skills,
97
- _ref$loading = _ref.loading,
98
- loading = _ref$loading === void 0 ? false : _ref$loading,
99
- onDeleteSkill = _ref.onDeleteSkill;
75
+ });
76
+ export var ChatAIMySkills = function ChatAIMySkills(_ref2) {
77
+ var mySkills = _ref2.mySkills,
78
+ sharedSkills = _ref2.sharedSkills,
79
+ _ref2$loading = _ref2.loading,
80
+ loading = _ref2$loading === void 0 ? false : _ref2$loading,
81
+ onDeleteSkill = _ref2.onDeleteSkill;
100
82
  var _useTranslation = useTranslation([SECTIONS.chatAI]),
101
83
  t = _useTranslation.t;
102
- var user = useUser();
103
84
  var _useSnackBarManager = useSnackBarManager(),
104
85
  handleSnackbarSuccess = _useSnackBarManager.handleSnackbarSuccess,
105
86
  handleSnackbarError = _useSnackBarManager.handleSnackbarError;
106
- var _useState = useState(null),
107
- _useState2 = _slicedToArray(_useState, 2),
108
- menuOpenForSkillId = _useState2[0],
109
- setMenuOpenForSkillId = _useState2[1];
110
- var _useState3 = useState(false),
87
+ var listScrollRef = useRef(null);
88
+ var _useState3 = useState('mine'),
111
89
  _useState4 = _slicedToArray(_useState3, 2),
112
- createMenuOpen = _useState4[0],
113
- setCreateMenuOpen = _useState4[1];
114
- var _useState5 = useState(null),
90
+ activeTab = _useState4[0],
91
+ setActiveTab = _useState4[1];
92
+ var _useState5 = useState(''),
115
93
  _useState6 = _slicedToArray(_useState5, 2),
116
- skillToDelete = _useState6[0],
117
- setSkillToDelete = _useState6[1];
118
- var userPermissions = user === null || user === void 0 || (_user$permissions = user.permissions) === null || _user$permissions === void 0 ? void 0 : _user$permissions.ai_agents;
119
- var canCreate = !!(userPermissions !== null && userPermissions !== void 0 && userPermissions.create) && !!window.MAIA_CHAT_AI_FEATURE_ACCESS_MULTI_AGENTS;
120
- var canEdit = !!(userPermissions !== null && userPermissions !== void 0 && userPermissions.edit) && !!window.MAIA_CHAT_AI_FEATURE_ACCESS_MULTI_AGENTS;
121
- var canDelete = !!(userPermissions !== null && userPermissions !== void 0 && userPermissions["delete"]) && !!window.MAIA_CHAT_AI_FEATURE_ACCESS_MULTI_AGENTS;
122
- var canShowMenu = canEdit || canDelete;
123
- var openCreateSkillModal = useCallback(function () {
94
+ searchQuery = _useState6[0],
95
+ setSearchQuery = _useState6[1];
96
+ var _useState7 = useState(null),
97
+ _useState8 = _slicedToArray(_useState7, 2),
98
+ menuOpenForSkillId = _useState8[0],
99
+ setMenuOpenForSkillId = _useState8[1];
100
+ var _useState9 = useState('bottom'),
101
+ _useState0 = _slicedToArray(_useState9, 2),
102
+ cardMenuPlacement = _useState0[0],
103
+ setCardMenuPlacement = _useState0[1];
104
+ var _useState1 = useState(null),
105
+ _useState10 = _slicedToArray(_useState1, 2),
106
+ skillToDelete = _useState10[0],
107
+ setSkillToDelete = _useState10[1];
108
+ var isMineTab = activeTab === 'mine';
109
+ var tabSkills = isMineTab ? mySkills : sharedSkills;
110
+ var filteredSkills = useMemo(function () {
111
+ var normalizedQuery = searchQuery.toLowerCase();
112
+ var matched = normalizedQuery ? tabSkills.filter(function (skill) {
113
+ return skill.name.toLowerCase().includes(normalizedQuery);
114
+ }) : tabSkills;
115
+ return _toConsumableArray(matched).sort(function (a, b) {
116
+ return a.name.localeCompare(b.name);
117
+ });
118
+ }, [searchQuery, tabSkills]);
119
+ var handleCreateSkill = useCallback(function () {
124
120
  openSkillModal({
125
- isEditing: false
121
+ isEditing: false,
122
+ intent: 'write'
126
123
  });
127
124
  }, []);
128
- var handleCreateOption = useCallback(function (intent) {
129
- setCreateMenuOpen(false);
130
- if (intent === 'generate') {
131
- // "Crear con Maia" abre el modal simple de descripción (no el editor).
132
- document.dispatchEvent(new CustomEvent(SKILL_GENERATE_OPEN_EVENT));
133
- return;
125
+ var handleToggleCardMenu = useCallback(function (event, skillId) {
126
+ event.preventDefault();
127
+ event.stopPropagation();
128
+ var cardAnchor = event.currentTarget.closest('[data-skill-card-id]');
129
+ if (cardAnchor instanceof HTMLElement) {
130
+ setCardMenuPlacement(resolveDropdownPlacement(cardAnchor, CARD_MENU_HEIGHT_PX));
134
131
  }
135
- openSkillModal({
136
- isEditing: false,
137
- intent: intent
132
+ setMenuOpenForSkillId(function (prev) {
133
+ return prev === skillId ? null : skillId;
138
134
  });
139
135
  }, []);
140
- var handleOpenEditSkill = useCallback(function (skill) {
136
+ var handleOpenSkill = useCallback(function (skill, isReadOnly) {
141
137
  openSkillModal({
142
138
  isEditing: true,
139
+ isReadOnly: isReadOnly,
143
140
  general: {
144
141
  id: skill.id,
145
142
  name: skill.name,
146
- content: skill.content
143
+ description: skill.description,
144
+ content: skill.content,
145
+ access_type: skill.access_type,
146
+ created_by_name: skill.created_by_name,
147
+ updated_at: skill.updated_at
147
148
  }
148
149
  });
149
150
  setMenuOpenForSkillId(null);
150
151
  }, []);
151
- var getCreatedAtLabel = function getCreatedAtLabel(skill) {
152
- var createdAt = skill.created_at;
153
- if (!createdAt) return '';
154
- var createdAtDate = new Date(createdAt);
155
- if (Number.isNaN(createdAtDate.getTime())) return '';
156
- var diffMs = Date.now() - createdAtDate.getTime();
157
- var dayMs = 1000 * 60 * 60 * 24;
158
- var days = Math.max(0, Math.floor(diffMs / dayMs));
159
- if (days === 0) return t('marketplace.myAgentsToday');
160
- if (days === 1) return t('marketplace.myAgentsOneDayAgo');
161
- return t('marketplace.myAgentsDaysAgo', {
162
- days: days
163
- });
164
- };
165
152
  var deleteModalChat = useMemo(function () {
166
153
  return skillToDelete ? {
167
154
  title: skillToDelete.name,
@@ -169,7 +156,7 @@ export var ChatAIMySkills = function ChatAIMySkills(_ref) {
169
156
  } : null;
170
157
  }, [skillToDelete]);
171
158
  var handleConfirmDelete = /*#__PURE__*/function () {
172
- var _ref2 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee(chat) {
159
+ var _ref3 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee(chat) {
173
160
  var _t;
174
161
  return _regeneratorRuntime.wrap(function (_context) {
175
162
  while (1) switch (_context.prev = _context.next) {
@@ -195,7 +182,7 @@ export var ChatAIMySkills = function ChatAIMySkills(_ref) {
195
182
  }, _callee, null, [[0, 2]]);
196
183
  }));
197
184
  return function handleConfirmDelete(_x) {
198
- return _ref2.apply(this, arguments);
185
+ return _ref3.apply(this, arguments);
199
186
  };
200
187
  }();
201
188
  useEffect(function () {
@@ -203,145 +190,185 @@ export var ChatAIMySkills = function ChatAIMySkills(_ref) {
203
190
  if (menuOpenForSkillId) {
204
191
  setMenuOpenForSkillId(null);
205
192
  }
206
- if (createMenuOpen) {
207
- setCreateMenuOpen(false);
208
- }
209
193
  };
210
194
  document.addEventListener('click', handleClickOutside);
211
195
  return function () {
212
196
  document.removeEventListener('click', handleClickOutside);
213
197
  };
214
- }, [menuOpenForSkillId, createMenuOpen]);
215
- return /*#__PURE__*/_jsxs(SCMSContainer, {
216
- $hasSkills: !!skills.length,
217
- children: [/*#__PURE__*/_jsx(MAIAIsologo, {}), /*#__PURE__*/_jsxs(SCMSBody, {
218
- $canCreate: canCreate,
219
- children: [skills.length ? /*#__PURE__*/_jsxs(SCMSTitleWrap, {
220
- children: [/*#__PURE__*/_jsxs(SCMSTitleInner, {
221
- children: [/*#__PURE__*/_jsx(SCMSTitle, {
222
- children: t('mySkills.title')
223
- }), /*#__PURE__*/_jsx(SCMSSubtitle, {
224
- children: t('mySkills.subtitle')
198
+ }, [menuOpenForSkillId]);
199
+ useEffect(function () {
200
+ if (!menuOpenForSkillId) return undefined;
201
+ var handleReposition = function handleReposition() {
202
+ var _listScrollRef$curren;
203
+ var openCard = (_listScrollRef$curren = listScrollRef.current) === null || _listScrollRef$curren === void 0 ? void 0 : _listScrollRef$curren.querySelector("[data-skill-card-id=\"".concat(menuOpenForSkillId, "\"]"));
204
+ if (openCard) {
205
+ setCardMenuPlacement(resolveDropdownPlacement(openCard, CARD_MENU_HEIGHT_PX));
206
+ }
207
+ };
208
+ var scrollContainer = listScrollRef.current;
209
+ scrollContainer === null || scrollContainer === void 0 || scrollContainer.addEventListener('scroll', handleReposition, {
210
+ passive: true
211
+ });
212
+ window.addEventListener('resize', handleReposition);
213
+ return function () {
214
+ scrollContainer === null || scrollContainer === void 0 || scrollContainer.removeEventListener('scroll', handleReposition);
215
+ window.removeEventListener('resize', handleReposition);
216
+ };
217
+ }, [menuOpenForSkillId]);
218
+ var tabDescription = isMineTab ? t('mySkills.mySkillsDescription') : t('mySkills.sharedSkillsDescription');
219
+ var isMineEmpty = isMineTab && !loading && mySkills.length === 0 && !searchQuery;
220
+ var showSkillsToolbar = isMineTab ? !isMineEmpty : tabSkills.length > 0 || !!searchQuery;
221
+ var renderCreateSkillButton = function renderCreateSkillButton() {
222
+ return /*#__PURE__*/_jsx(SCMSCreateButton, {
223
+ type: "button",
224
+ onClick: handleCreateSkill,
225
+ children: /*#__PURE__*/_jsx(SCMSCreateButtonText, {
226
+ children: t('mySkills.createSkill')
227
+ })
228
+ });
229
+ };
230
+ var renderSearchEmptyState = function renderSearchEmptyState() {
231
+ return /*#__PURE__*/_jsx(SCMSSharedEmptyStateRoot, {
232
+ children: /*#__PURE__*/_jsxs(SCMSSharedEmptyStateTitleBlock, {
233
+ children: [/*#__PURE__*/_jsx(SCMSSharedEmptyStateTitle, {
234
+ children: t('mySkills.searchEmptyStateTitle')
235
+ }), /*#__PURE__*/_jsx(SCMSSharedEmptyStateSubtitle, {
236
+ children: t('mySkills.searchEmptyStateDescription')
237
+ })]
238
+ })
239
+ });
240
+ };
241
+ var renderEmptyState = function renderEmptyState() {
242
+ if (!isMineTab) {
243
+ if (searchQuery) {
244
+ return renderSearchEmptyState();
245
+ }
246
+ return /*#__PURE__*/_jsx(SCMSSharedEmptyStateRoot, {
247
+ children: /*#__PURE__*/_jsxs(SCMSSharedEmptyStateTitleBlock, {
248
+ children: [/*#__PURE__*/_jsx(SCMSSharedEmptyStateTitle, {
249
+ children: t('mySkills.sharedEmptyStateTitle')
250
+ }), /*#__PURE__*/_jsx(SCMSSharedEmptyStateSubtitle, {
251
+ children: t('mySkills.sharedEmptyStateDescription')
225
252
  })]
226
- }), canCreate ? /*#__PURE__*/_jsx(SCMSActionsRow, {
227
- children: /*#__PURE__*/_jsxs(SCMSCreateMenuWrap, {
228
- children: [/*#__PURE__*/_jsx(SCMSCreateButton, {
253
+ })
254
+ });
255
+ }
256
+ if (searchQuery) {
257
+ return renderSearchEmptyState();
258
+ }
259
+ return /*#__PURE__*/_jsxs(SCMSSharedEmptyStateRoot, {
260
+ children: [/*#__PURE__*/_jsxs(SCMSSharedEmptyStateTitleBlock, {
261
+ children: [/*#__PURE__*/_jsx(SCMSSharedEmptyStateTitle, {
262
+ children: t('mySkills.emptyStateTitle')
263
+ }), /*#__PURE__*/_jsx(SCMSSharedEmptyStateSubtitle, {
264
+ children: t('mySkills.emptyStateDescription')
265
+ })]
266
+ }), renderCreateSkillButton()]
267
+ });
268
+ };
269
+ return /*#__PURE__*/_jsxs(SCMSContainer, {
270
+ children: [/*#__PURE__*/_jsxs(SCMSBody, {
271
+ children: [/*#__PURE__*/_jsx(SCMSTitleBlock, {
272
+ children: /*#__PURE__*/_jsx(SCMSTitle, {
273
+ children: t('mySkills.title')
274
+ })
275
+ }), /*#__PURE__*/_jsxs(SCMSPanel, {
276
+ children: [/*#__PURE__*/_jsxs(SCMSPanelHeader, {
277
+ children: [/*#__PURE__*/_jsxs(SCMSTabBar, {
278
+ children: [/*#__PURE__*/_jsx(SCMSTabButton, {
229
279
  type: "button",
230
- onClick: function onClick(event) {
231
- event.stopPropagation();
232
- setCreateMenuOpen(function (prev) {
233
- return !prev;
234
- });
280
+ $active: isMineTab,
281
+ onClick: function onClick() {
282
+ return setActiveTab('mine');
235
283
  },
236
- children: /*#__PURE__*/_jsx(SCMSCreateButtonText, {
237
- children: t('mySkills.createSkill')
238
- })
239
- }), createMenuOpen ? /*#__PURE__*/_jsxs(SCMSCreateMenu, {
240
- onClick: function onClick(event) {
241
- return event.stopPropagation();
284
+ children: t('mySkills.tabMySkills')
285
+ }), /*#__PURE__*/_jsx(SCMSTabButton, {
286
+ type: "button",
287
+ $active: !isMineTab,
288
+ onClick: function onClick() {
289
+ return setActiveTab('shared');
242
290
  },
243
- children: [/*#__PURE__*/_jsxs(SCMSCreateMenuItem, {
244
- type: "button",
245
- onClick: function onClick() {
246
- return handleCreateOption('generate');
247
- },
248
- children: [/*#__PURE__*/_jsx(IconChat, {}), t('mySkills.createWithMaia')]
249
- }), /*#__PURE__*/_jsxs(SCMSCreateMenuItem, {
250
- type: "button",
251
- onClick: function onClick() {
252
- return handleCreateOption('write');
253
- },
254
- children: [/*#__PURE__*/_jsx(IconClipboard, {}), t('mySkills.writeInstructions')]
255
- }), /*#__PURE__*/_jsxs(SCMSCreateMenuItem, {
291
+ children: t('mySkills.tabSharedSkills')
292
+ })]
293
+ }), showSkillsToolbar ? /*#__PURE__*/_jsxs(_Fragment, {
294
+ children: [/*#__PURE__*/_jsxs(SCMSMetaRow, {
295
+ children: [/*#__PURE__*/_jsx(SCMSMetaDescription, {
296
+ children: tabDescription
297
+ }), isMineTab ? renderCreateSkillButton() : null]
298
+ }), /*#__PURE__*/_jsx(SkillSearchInput, {
299
+ onSearch: setSearchQuery,
300
+ placeholder: t('mySkills.searchPlaceholder')
301
+ })]
302
+ }) : null]
303
+ }), /*#__PURE__*/_jsxs(SCMSListScrollArea, {
304
+ ref: listScrollRef,
305
+ children: [loading ? /*#__PURE__*/_jsx(SCMSLoadWrapper, {
306
+ children: /*#__PURE__*/_jsx(Loader, {
307
+ size: "small"
308
+ })
309
+ }) : null, !loading && filteredSkills.length ? /*#__PURE__*/_jsx(SCMSCardsList, {
310
+ children: filteredSkills.map(function (skill, index) {
311
+ return /*#__PURE__*/_jsxs(SCMSCardButton, {
256
312
  type: "button",
313
+ "data-skill-card-id": skill.id,
314
+ $index: index,
315
+ $elevated: menuOpenForSkillId === skill.id,
257
316
  onClick: function onClick() {
258
- return handleCreateOption('upload');
317
+ return handleOpenSkill(skill, !isMineTab);
259
318
  },
260
- children: [/*#__PURE__*/_jsx(IconUpload, {}), t('mySkills.uploadSkill')]
261
- })]
262
- }) : null]
263
- })
264
- }) : null]
265
- }) : null, loading ? /*#__PURE__*/_jsx(SCMSLoadWrapper, {
266
- children: /*#__PURE__*/_jsx(Loader, {
267
- size: "small"
268
- })
269
- }) : null, !loading && skills.length ? /*#__PURE__*/_jsx(SCMSCardsOuter, {
270
- children: /*#__PURE__*/_jsx(SCMSCardsRow, {
271
- children: skills.map(function (skill) {
272
- return /*#__PURE__*/_jsxs(SCMSCardButton, {
273
- type: "button",
274
- onClick: function onClick() {
275
- return canEdit && handleOpenEditSkill(skill);
276
- },
277
- children: [/*#__PURE__*/_jsx(SCMSCardHeader, {
278
- children: /*#__PURE__*/_jsxs(SCMSCardTopRow, {
319
+ children: [/*#__PURE__*/_jsxs(SCMSCardTopRow, {
279
320
  children: [/*#__PURE__*/_jsx(SCMSCardTitleName, {
280
- children: skill.name
281
- }), canShowMenu ? /*#__PURE__*/_jsx(SCMSKebabButton, {
321
+ children: formatSkillDisplayName(skill.name)
322
+ }), isMineTab ? /*#__PURE__*/_jsx(SCMSKebabButton, {
282
323
  type: "button",
324
+ $visible: menuOpenForSkillId === skill.id,
283
325
  "aria-label": t('mySkills.cardMenuAriaLabel'),
284
326
  onClick: function onClick(event) {
285
- event.preventDefault();
286
- event.stopPropagation();
287
- setMenuOpenForSkillId(function (prev) {
288
- return prev === skill.id ? null : skill.id;
289
- });
327
+ return handleToggleCardMenu(event, skill.id);
290
328
  },
291
329
  children: /*#__PURE__*/_jsx(MenuDots, {
292
- color: "#999",
293
- width: 15,
294
- height: 15
330
+ color: "#808080",
331
+ width: 20,
332
+ height: 20
295
333
  })
296
334
  }) : null]
297
- })
298
- }), /*#__PURE__*/_jsxs(SCMSCardBody, {
299
- children: [/*#__PURE__*/_jsx(SCMSCardContentText, {
300
- children: skill.content
301
- }), /*#__PURE__*/_jsx(SCMSCardFooter, {
302
- children: /*#__PURE__*/_jsx(SCMSCardFooterDate, {
303
- children: getCreatedAtLabel(skill) || t('marketplace.myAgentsFallbackDate')
335
+ }), /*#__PURE__*/_jsx(SCMSCardContentText, {
336
+ children: skill.description || skill.content
337
+ }), /*#__PURE__*/_jsx(SCMSCardVisibilityRow, {
338
+ children: isMineTab ? /*#__PURE__*/_jsxs(_Fragment, {
339
+ children: [skill.access_type === 'company' ? /*#__PURE__*/_jsx(SkillVisibilityEveryoneIcon, {}) : /*#__PURE__*/_jsx(SkillVisibilityOnlyMeIcon, {}), /*#__PURE__*/_jsx(SCMSCardVisibilityText, {
340
+ children: skill.access_type === 'company' ? t('mySkills.visibilityEveryone') : t('mySkills.visibilityOnlyMe')
341
+ })]
342
+ }) : /*#__PURE__*/_jsx(SCMSCardVisibilityText, {
343
+ children: t('mySkills.sharedCreatedBy', {
344
+ name: skill.created_by_name || ''
345
+ })
304
346
  })
305
- })]
306
- }), menuOpenForSkillId === skill.id && canShowMenu ? /*#__PURE__*/_jsx(SCMSCardMenu, {
307
- onClick: function onClick(event) {
308
- event.preventDefault();
309
- event.stopPropagation();
310
- },
311
- children: /*#__PURE__*/_jsxs(SCMSCardMenuItems, {
312
- children: [canEdit ? /*#__PURE__*/_jsx(SCMSCardMenuItem, {
347
+ }), menuOpenForSkillId === skill.id && isMineTab ? /*#__PURE__*/_jsxs(SCMSCardMenu, {
348
+ $placement: cardMenuPlacement,
349
+ onClick: function onClick(event) {
350
+ event.preventDefault();
351
+ event.stopPropagation();
352
+ },
353
+ children: [/*#__PURE__*/_jsx(SCMSCardMenuItem, {
313
354
  type: "button",
314
355
  onClick: function onClick() {
315
- return handleOpenEditSkill(skill);
356
+ return handleOpenSkill(skill, false);
316
357
  },
317
358
  children: t('mySkills.edit')
318
- }) : null, canDelete ? /*#__PURE__*/_jsx(SCMSCardMenuItem, {
359
+ }), /*#__PURE__*/_jsx(SCMSCardMenuItem, {
319
360
  type: "button",
320
361
  onClick: function onClick() {
321
362
  return setSkillToDelete(skill);
322
363
  },
323
364
  children: t('mySkills.delete')
324
- }) : null]
325
- })
326
- }) : null]
327
- }, skill.id);
328
- })
329
- })
330
- }) : null, !loading && !skills.length ? /*#__PURE__*/_jsxs(SCMSEmptyStateRoot, {
331
- children: [/*#__PURE__*/_jsx(SCMSEmptyStateColumn, {
332
- children: /*#__PURE__*/_jsxs(SCMSEmptyStateTitleBlock, {
333
- children: [/*#__PURE__*/_jsx(SCMSEmptyStateTitle, {
334
- children: t('mySkills.emptyStateTitle')
335
- }), /*#__PURE__*/_jsx(SCMSEmptyStateSubtitle, {
336
- children: canCreate ? t('mySkills.emptyStateDescription') : t('mySkills.emptyStateDescriptionNoPerm')
337
- })]
338
- })
339
- }), canCreate ? /*#__PURE__*/_jsx(SCMSEmptyStateButton, {
340
- type: "button",
341
- onClick: openCreateSkillModal,
342
- children: t('mySkills.emptyStateButton')
343
- }) : null]
344
- }) : null]
365
+ })]
366
+ }) : null]
367
+ }, skill.id);
368
+ })
369
+ }) : null, !loading && !filteredSkills.length ? renderEmptyState() : null]
370
+ })]
371
+ })]
345
372
  }), deleteModalChat ? /*#__PURE__*/_jsx(DeleteQuestionModal, {
346
373
  onClose: function onClose() {
347
374
  return setSkillToDelete(null);
@@ -354,4 +381,4 @@ export var ChatAIMySkills = function ChatAIMySkills(_ref) {
354
381
  }) : null]
355
382
  });
356
383
  };
357
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSZWFjdCIsInVzZUNhbGxiYWNrIiwidXNlRWZmZWN0IiwidXNlTWVtbyIsInVzZVN0YXRlIiwiTWVudURvdHMiLCJ1c2VUcmFuc2xhdGlvbiIsInVzZVVzZXIiLCJkZWxldGVTa2lsbCIsInVzZVNuYWNrQmFyTWFuYWdlciIsIkRlbGV0ZVF1ZXN0aW9uTW9kYWwiLCJTS0lMTF9HRU5FUkFURV9PUEVOX0VWRU5UIiwiU0VDVElPTlMiLCJMb2FkZXIiLCJTQ01TQm9keSIsIlNDTVNDYXJkQm9keSIsIlNDTVNDYXJkQnV0dG9uIiwiU0NNU0NhcmRDb250ZW50VGV4dCIsIlNDTVNDYXJkRm9vdGVyIiwiU0NNU0NhcmRGb290ZXJEYXRlIiwiU0NNU0NhcmRIZWFkZXIiLCJTQ01TQ2FyZE1lbnUiLCJTQ01TQ2FyZE1lbnVJdGVtIiwiU0NNU0NhcmRNZW51SXRlbXMiLCJTQ01TQ2FyZFRpdGxlTmFtZSIsIlNDTVNDYXJkVG9wUm93IiwiU0NNU0NhcmRzT3V0ZXIiLCJTQ01TQ2FyZHNSb3ciLCJTQ01TQ29udGFpbmVyIiwiU0NNU0NyZWF0ZUJ1dHRvbiIsIlNDTVNDcmVhdGVCdXR0b25UZXh0IiwiU0NNU0NyZWF0ZU1lbnUiLCJTQ01TQ3JlYXRlTWVudUl0ZW0iLCJTQ01TQ3JlYXRlTWVudVdyYXAiLCJTQ01TRW1wdHlTdGF0ZUJ1dHRvbiIsIlNDTVNFbXB0eVN0YXRlQ29sdW1uIiwiU0NNU0VtcHR5U3RhdGVSb290IiwiU0NNU0VtcHR5U3RhdGVTdWJ0aXRsZSIsIlNDTVNFbXB0eVN0YXRlVGl0bGUiLCJTQ01TRW1wdHlTdGF0ZVRpdGxlQmxvY2siLCJTQ01TS2ViYWJCdXR0b24iLCJTQ01TTG9hZFdyYXBwZXIiLCJTQ01TVGl0bGUiLCJTQ01TU3VidGl0bGUiLCJTQ01TQWN0aW9uc1JvdyIsIlNDTVNUaXRsZUlubmVyIiwiU0NNU1RpdGxlV3JhcCIsIk1BSUFJc29sb2dvIiwianN4IiwiX2pzeCIsImpzeHMiLCJfanN4cyIsIm9wZW5Ta2lsbE1vZGFsIiwidmFsdWVzIiwiZG9jdW1lbnQiLCJkaXNwYXRjaEV2ZW50IiwiQ3VzdG9tRXZlbnQiLCJkZXRhaWwiLCJza2lsbFZhbHVlcyIsImlzT3BlbiIsIkljb25DaGF0Iiwid2lkdGgiLCJoZWlnaHQiLCJ2aWV3Qm94IiwiZmlsbCIsImNoaWxkcmVuIiwiZCIsInN0cm9rZSIsInN0cm9rZVdpZHRoIiwic3Ryb2tlTGluZWpvaW4iLCJJY29uQ2xpcGJvYXJkIiwieCIsInkiLCJyeCIsInN0cm9rZUxpbmVjYXAiLCJJY29uVXBsb2FkIiwiQ2hhdEFJTXlTa2lsbHMiLCJfcmVmIiwiX3VzZXIkcGVybWlzc2lvbnMiLCJza2lsbHMiLCJfcmVmJGxvYWRpbmciLCJsb2FkaW5nIiwib25EZWxldGVTa2lsbCIsIl91c2VUcmFuc2xhdGlvbiIsImNoYXRBSSIsInQiLCJ1c2VyIiwiX3VzZVNuYWNrQmFyTWFuYWdlciIsImhhbmRsZVNuYWNrYmFyU3VjY2VzcyIsImhhbmRsZVNuYWNrYmFyRXJyb3IiLCJfdXNlU3RhdGUiLCJfdXNlU3RhdGUyIiwiX3NsaWNlZFRvQXJyYXkiLCJtZW51T3BlbkZvclNraWxsSWQiLCJzZXRNZW51T3BlbkZvclNraWxsSWQiLCJfdXNlU3RhdGUzIiwiX3VzZVN0YXRlNCIsImNyZWF0ZU1lbnVPcGVuIiwic2V0Q3JlYXRlTWVudU9wZW4iLCJfdXNlU3RhdGU1IiwiX3VzZVN0YXRlNiIsInNraWxsVG9EZWxldGUiLCJzZXRTa2lsbFRvRGVsZXRlIiwidXNlclBlcm1pc3Npb25zIiwicGVybWlzc2lvbnMiLCJhaV9hZ2VudHMiLCJjYW5DcmVhdGUiLCJjcmVhdGUiLCJ3aW5kb3ciLCJNQUlBX0NIQVRfQUlfRkVBVFVSRV9BQ0NFU1NfTVVMVElfQUdFTlRTIiwiY2FuRWRpdCIsImVkaXQiLCJjYW5EZWxldGUiLCJjYW5TaG93TWVudSIsIm9wZW5DcmVhdGVTa2lsbE1vZGFsIiwiaXNFZGl0aW5nIiwiaGFuZGxlQ3JlYXRlT3B0aW9uIiwiaW50ZW50IiwiaGFuZGxlT3BlbkVkaXRTa2lsbCIsInNraWxsIiwiZ2VuZXJhbCIsImlkIiwibmFtZSIsImNvbnRlbnQiLCJnZXRDcmVhdGVkQXRMYWJlbCIsImNyZWF0ZWRBdCIsImNyZWF0ZWRfYXQiLCJjcmVhdGVkQXREYXRlIiwiRGF0ZSIsIk51bWJlciIsImlzTmFOIiwiZ2V0VGltZSIsImRpZmZNcyIsIm5vdyIsImRheU1zIiwiZGF5cyIsIk1hdGgiLCJtYXgiLCJmbG9vciIsImRlbGV0ZU1vZGFsQ2hhdCIsInRpdGxlIiwiaGFuZGxlQ29uZmlybURlbGV0ZSIsIl9yZWYyIiwiX2FzeW5jVG9HZW5lcmF0b3IiLCJfcmVnZW5lcmF0b3JSdW50aW1lIiwibWFyayIsIl9jYWxsZWUiLCJjaGF0IiwiX3QiLCJ3cmFwIiwiX2NvbnRleHQiLCJwcmV2IiwibmV4dCIsInN0b3AiLCJfeCIsImFwcGx5IiwiYXJndW1lbnRzIiwiaGFuZGxlQ2xpY2tPdXRzaWRlIiwiYWRkRXZlbnRMaXN0ZW5lciIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCIkaGFzU2tpbGxzIiwibGVuZ3RoIiwiJGNhbkNyZWF0ZSIsInR5cGUiLCJvbkNsaWNrIiwiZXZlbnQiLCJzdG9wUHJvcGFnYXRpb24iLCJzaXplIiwibWFwIiwicHJldmVudERlZmF1bHQiLCJjb2xvciIsIm9uQ2xvc2UiLCJoYW5kbGVycyIsImhhbmRsZUNvbmZpcm1BY3Rpb24iLCJhY3Rpb24iXSwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50cy9tb2xlY3VsZXMvQ2hhdEFJTXlTa2lsbHMvQ2hhdEFJTXlTa2lsbHMudHN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCwgeyB1c2VDYWxsYmFjaywgdXNlRWZmZWN0LCB1c2VNZW1vLCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgTWVudURvdHMgfSBmcm9tICdAcHJvamVjdGNvci9pY29ucy9saWIvY29tcG9uZW50cy9NZW51RG90cydcbmltcG9ydCB7IHVzZVRyYW5zbGF0aW9uIH0gZnJvbSAncmVhY3QtaTE4bmV4dCdcbmltcG9ydCB7IHVzZVVzZXIgfSBmcm9tICcuLi8uLi8uLi9jb250ZXh0L2Nvci11c2VyJ1xuaW1wb3J0IHsgU2tpbGwgfSBmcm9tICcuLi8uLi8uLi90eXBlcy9za2lsbCdcbmltcG9ydCB7IGRlbGV0ZVNraWxsIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvbWFpYS9Ta2lsbHMvZGVsZXRlU2tpbGwnXG5pbXBvcnQgeyB1c2VTbmFja0Jhck1hbmFnZXIgfSBmcm9tICcuLi8uLi8uLi9ob29rcy91c2VTbmFja0Jhck1hbmFnZXIvdXNlU25hY2tCYXJNYW5hZ2VyJ1xuaW1wb3J0IHsgRGVsZXRlUXVlc3Rpb25Nb2RhbCB9IGZyb20gJy4uLy4uL29yZ2FuaXNtcy9EZWxldGVRdWVzdGlvbk1vZGFsL0RlbGV0ZVF1ZXN0aW9uTW9kYWwnXG5pbXBvcnQgeyBTS0lMTF9HRU5FUkFURV9PUEVOX0VWRU5UIH0gZnJvbSAnLi4vLi4vb3JnYW5pc21zL0FibVNraWxsR2VuZXJhdGVNb2RhbC9BYm1Ta2lsbEdlbmVyYXRlTW9kYWwnXG5pbXBvcnQgeyBTRUNUSU9OUyB9IGZyb20gJy4uLy4uLy4uL2NvbnN0YW50cy9jb25maWcnXG5pbXBvcnQgeyBMb2FkZXIgfSBmcm9tICcuLi8uLi9hdG9tcy9Mb2FkZXInXG5pbXBvcnQge1xuICBTQ01TQm9keSxcbiAgU0NNU0NhcmRCb2R5LFxuICBTQ01TQ2FyZEJ1dHRvbixcbiAgU0NNU0NhcmRDb250ZW50VGV4dCxcbiAgU0NNU0NhcmRGb290ZXIsXG4gIFNDTVNDYXJkRm9vdGVyRGF0ZSxcbiAgU0NNU0NhcmRIZWFkZXIsXG4gIFNDTVNDYXJkTWVudSxcbiAgU0NNU0NhcmRNZW51SXRlbSxcbiAgU0NNU0NhcmRNZW51SXRlbXMsXG4gIFNDTVNDYXJkVGl0bGVOYW1lLFxuICBTQ01TQ2FyZFRvcFJvdyxcbiAgU0NNU0NhcmRzT3V0ZXIsXG4gIFNDTVNDYXJkc1JvdyxcbiAgU0NNU0NvbnRhaW5lcixcbiAgU0NNU0NyZWF0ZUJ1dHRvbixcbiAgU0NNU0NyZWF0ZUJ1dHRvblRleHQsXG4gIFNDTVNDcmVhdGVNZW51LFxuICBTQ01TQ3JlYXRlTWVudUl0ZW0sXG4gIFNDTVNDcmVhdGVNZW51V3JhcCxcbiAgU0NNU0VtcHR5U3RhdGVCdXR0b24sXG4gIFNDTVNFbXB0eVN0YXRlQ29sdW1uLFxuICBTQ01TRW1wdHlTdGF0ZVJvb3QsXG4gIFNDTVNFbXB0eVN0YXRlU3VidGl0bGUsXG4gIFNDTVNFbXB0eVN0YXRlVGl0bGUsXG4gIFNDTVNFbXB0eVN0YXRlVGl0bGVCbG9jayxcbiAgU0NNU0tlYmFiQnV0dG9uLFxuICBTQ01TTG9hZFdyYXBwZXIsXG4gIFNDTVNUaXRsZSxcbiAgU0NNU1N1YnRpdGxlLFxuICBTQ01TQWN0aW9uc1JvdyxcbiAgU0NNU1RpdGxlSW5uZXIsXG4gIFNDTVNUaXRsZVdyYXAsXG59IGZyb20gJy4vQ2hhdEFJTXlTa2lsbHMuc3R5bGVzJ1xuaW1wb3J0IHsgTUFJQUlzb2xvZ28gfSBmcm9tICcuLi8uLi9hdG9tcy9pY29ucydcblxudHlwZSBDaGF0QUlNeVNraWxsc1Byb3BzID0ge1xuICBza2lsbHM6IFNraWxsW11cbiAgbG9hZGluZz86IGJvb2xlYW5cbiAgb25EZWxldGVTa2lsbD86IChza2lsbElkOiBzdHJpbmcpID0+IHZvaWRcbn1cblxudHlwZSBTa2lsbE1vZGFsSW50ZW50ID0gJ2dlbmVyYXRlJyB8ICd3cml0ZScgfCAndXBsb2FkJ1xuXG5jb25zdCBvcGVuU2tpbGxNb2RhbCA9ICh2YWx1ZXM6IHtcbiAgaXNFZGl0aW5nOiBib29sZWFuXG4gIGludGVudD86IFNraWxsTW9kYWxJbnRlbnRcbiAgZ2VuZXJhbD86IHsgaWQ/OiBzdHJpbmc7IG5hbWU/OiBzdHJpbmc7IGNvbnRlbnQ/OiBzdHJpbmcgfVxufSkgPT4ge1xuICBkb2N1bWVudC5kaXNwYXRjaEV2ZW50KFxuICAgIG5ldyBDdXN0b21FdmVudCgnYWJtLXNraWxsLW1vZGFsLXNldC12YWx1ZXMnLCB7XG4gICAgICBkZXRhaWw6IHtcbiAgICAgICAgc2tpbGxWYWx1ZXM6IHtcbiAgICAgICAgICB2YWx1ZXMsXG4gICAgICAgICAgaXNPcGVuOiB0cnVlLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9KVxuICApXG59XG5cbmNvbnN0IEljb25DaGF0ID0gKCkgPT4gKFxuICA8c3ZnIHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIxNlwiIHZpZXdCb3g9XCIwIDAgMTYgMTZcIiBmaWxsPVwibm9uZVwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPlxuICAgIDxwYXRoXG4gICAgICBkPVwiTTE0IDcuNWE1LjUgNS41IDAgMCAxLTcuOSA0Ljk2TDIuNSAxMy41bDEuMDQtMy4xQTUuNSA1LjUgMCAxIDEgMTQgNy41WlwiXG4gICAgICBzdHJva2U9XCIjNjY2XCJcbiAgICAgIHN0cm9rZVdpZHRoPVwiMS4zXCJcbiAgICAgIHN0cm9rZUxpbmVqb2luPVwicm91bmRcIlxuICAgIC8+XG4gIDwvc3ZnPlxuKVxuXG5jb25zdCBJY29uQ2xpcGJvYXJkID0gKCkgPT4gKFxuICA8c3ZnIHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIxNlwiIHZpZXdCb3g9XCIwIDAgMTYgMTZcIiBmaWxsPVwibm9uZVwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPlxuICAgIDxyZWN0IHg9XCIzLjVcIiB5PVwiM1wiIHdpZHRoPVwiOVwiIGhlaWdodD1cIjExXCIgcng9XCIxLjVcIiBzdHJva2U9XCIjNjY2XCIgc3Ryb2tlV2lkdGg9XCIxLjNcIiAvPlxuICAgIDxyZWN0IHg9XCI1Ljc1XCIgeT1cIjEuNzVcIiB3aWR0aD1cIjQuNVwiIGhlaWdodD1cIjIuNVwiIHJ4PVwiMC43NVwiIHN0cm9rZT1cIiM2NjZcIiBzdHJva2VXaWR0aD1cIjEuM1wiIC8+XG4gICAgPHBhdGggZD1cIk02IDcuNWg0TTYgMTBoM1wiIHN0cm9rZT1cIiM2NjZcIiBzdHJva2VXaWR0aD1cIjEuM1wiIHN0cm9rZUxpbmVjYXA9XCJyb3VuZFwiIC8+XG4gIDwvc3ZnPlxuKVxuXG5jb25zdCBJY29uVXBsb2FkID0gKCkgPT4gKFxuICA8c3ZnIHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIxNlwiIHZpZXdCb3g9XCIwIDAgMTYgMTZcIiBmaWxsPVwibm9uZVwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPlxuICAgIDxwYXRoXG4gICAgICBkPVwiTTggMTAuNVYzTTggMyA1LjUgNS41TTggM2wyLjUgMi41XCJcbiAgICAgIHN0cm9rZT1cIiM2NjZcIlxuICAgICAgc3Ryb2tlV2lkdGg9XCIxLjNcIlxuICAgICAgc3Ryb2tlTGluZWNhcD1cInJvdW5kXCJcbiAgICAgIHN0cm9rZUxpbmVqb2luPVwicm91bmRcIlxuICAgIC8+XG4gICAgPHBhdGggZD1cIk0zIDEwdjJhMSAxIDAgMCAwIDEgMWg4YTEgMSAwIDAgMCAxLTF2LTJcIiBzdHJva2U9XCIjNjY2XCIgc3Ryb2tlV2lkdGg9XCIxLjNcIiBzdHJva2VMaW5lY2FwPVwicm91bmRcIiAvPlxuICA8L3N2Zz5cbilcblxuZXhwb3J0IGNvbnN0IENoYXRBSU15U2tpbGxzID0gKHsgc2tpbGxzLCBsb2FkaW5nID0gZmFsc2UsIG9uRGVsZXRlU2tpbGwgfTogQ2hhdEFJTXlTa2lsbHNQcm9wcykgPT4ge1xuICBjb25zdCB7IHQgfSA9IHVzZVRyYW5zbGF0aW9uKFtTRUNUSU9OUy5jaGF0QUldKVxuICBjb25zdCB1c2VyID0gdXNlVXNlcigpXG4gIGNvbnN0IHsgaGFuZGxlU25hY2tiYXJTdWNjZXNzLCBoYW5kbGVTbmFja2JhckVycm9yIH0gPSB1c2VTbmFja0Jhck1hbmFnZXIoKVxuICBjb25zdCBbbWVudU9wZW5Gb3JTa2lsbElkLCBzZXRNZW51T3BlbkZvclNraWxsSWRdID0gdXNlU3RhdGU8c3RyaW5nIHwgbnVsbD4obnVsbClcbiAgY29uc3QgW2NyZWF0ZU1lbnVPcGVuLCBzZXRDcmVhdGVNZW51T3Blbl0gPSB1c2VTdGF0ZShmYWxzZSlcbiAgY29uc3QgW3NraWxsVG9EZWxldGUsIHNldFNraWxsVG9EZWxldGVdID0gdXNlU3RhdGU8U2tpbGwgfCBudWxsPihudWxsKVxuICBjb25zdCB1c2VyUGVybWlzc2lvbnMgPSB1c2VyPy5wZXJtaXNzaW9ucz8uYWlfYWdlbnRzXG4gIGNvbnN0IGNhbkNyZWF0ZSA9ICEhdXNlclBlcm1pc3Npb25zPy5jcmVhdGUgJiYgISF3aW5kb3cuTUFJQV9DSEFUX0FJX0ZFQVRVUkVfQUNDRVNTX01VTFRJX0FHRU5UU1xuICBjb25zdCBjYW5FZGl0ID0gISF1c2VyUGVybWlzc2lvbnM/LmVkaXQgJiYgISF3aW5kb3cuTUFJQV9DSEFUX0FJX0ZFQVRVUkVfQUNDRVNTX01VTFRJX0FHRU5UU1xuICBjb25zdCBjYW5EZWxldGUgPSAhIXVzZXJQZXJtaXNzaW9ucz8uZGVsZXRlICYmICEhd2luZG93Lk1BSUFfQ0hBVF9BSV9GRUFUVVJFX0FDQ0VTU19NVUxUSV9BR0VOVFNcbiAgY29uc3QgY2FuU2hvd01lbnUgPSBjYW5FZGl0IHx8IGNhbkRlbGV0ZVxuXG4gIGNvbnN0IG9wZW5DcmVhdGVTa2lsbE1vZGFsID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIG9wZW5Ta2lsbE1vZGFsKHsgaXNFZGl0aW5nOiBmYWxzZSB9KVxuICB9LCBbXSlcblxuICBjb25zdCBoYW5kbGVDcmVhdGVPcHRpb24gPSB1c2VDYWxsYmFjaygoaW50ZW50OiBTa2lsbE1vZGFsSW50ZW50KSA9PiB7XG4gICAgc2V0Q3JlYXRlTWVudU9wZW4oZmFsc2UpXG4gICAgaWYgKGludGVudCA9PT0gJ2dlbmVyYXRlJykge1xuICAgICAgLy8gXCJDcmVhciBjb24gTWFpYVwiIGFicmUgZWwgbW9kYWwgc2ltcGxlIGRlIGRlc2NyaXBjacOzbiAobm8gZWwgZWRpdG9yKS5cbiAgICAgIGRvY3VtZW50LmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KFNLSUxMX0dFTkVSQVRFX09QRU5fRVZFTlQpKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIG9wZW5Ta2lsbE1vZGFsKHsgaXNFZGl0aW5nOiBmYWxzZSwgaW50ZW50IH0pXG4gIH0sIFtdKVxuXG4gIGNvbnN0IGhhbmRsZU9wZW5FZGl0U2tpbGwgPSB1c2VDYWxsYmFjaygoc2tpbGw6IFNraWxsKSA9PiB7XG4gICAgb3BlblNraWxsTW9kYWwoe1xuICAgICAgaXNFZGl0aW5nOiB0cnVlLFxuICAgICAgZ2VuZXJhbDogeyBpZDogc2tpbGwuaWQsIG5hbWU6IHNraWxsLm5hbWUsIGNvbnRlbnQ6IHNraWxsLmNvbnRlbnQgfSxcbiAgICB9KVxuICAgIHNldE1lbnVPcGVuRm9yU2tpbGxJZChudWxsKVxuICB9LCBbXSlcblxuICBjb25zdCBnZXRDcmVhdGVkQXRMYWJlbCA9IChza2lsbDogU2tpbGwpID0+IHtcbiAgICBjb25zdCB7IGNyZWF0ZWRfYXQ6IGNyZWF0ZWRBdCB9ID0gc2tpbGxcbiAgICBpZiAoIWNyZWF0ZWRBdCkgcmV0dXJuICcnXG5cbiAgICBjb25zdCBjcmVhdGVkQXREYXRlID0gbmV3IERhdGUoY3JlYXRlZEF0KVxuICAgIGlmIChOdW1iZXIuaXNOYU4oY3JlYXRlZEF0RGF0ZS5nZXRUaW1lKCkpKSByZXR1cm4gJydcblxuICAgIGNvbnN0IGRpZmZNcyA9IERhdGUubm93KCkgLSBjcmVhdGVkQXREYXRlLmdldFRpbWUoKVxuICAgIGNvbnN0IGRheU1zID0gMTAwMCAqIDYwICogNjAgKiAyNFxuICAgIGNvbnN0IGRheXMgPSBNYXRoLm1heCgwLCBNYXRoLmZsb29yKGRpZmZNcyAvIGRheU1zKSlcblxuICAgIGlmIChkYXlzID09PSAwKSByZXR1cm4gdCgnbWFya2V0cGxhY2UubXlBZ2VudHNUb2RheScpXG4gICAgaWYgKGRheXMgPT09IDEpIHJldHVybiB0KCdtYXJrZXRwbGFjZS5teUFnZW50c09uZURheUFnbycpXG4gICAgcmV0dXJuIHQoJ21hcmtldHBsYWNlLm15QWdlbnRzRGF5c0FnbycsIHsgZGF5cyB9KVxuICB9XG5cbiAgY29uc3QgZGVsZXRlTW9kYWxDaGF0ID0gdXNlTWVtbyhcbiAgICAoKSA9PiAoc2tpbGxUb0RlbGV0ZSA/IHsgdGl0bGU6IHNraWxsVG9EZWxldGUubmFtZSwgaWQ6IHNraWxsVG9EZWxldGUuaWQgfSA6IG51bGwpLFxuICAgIFtza2lsbFRvRGVsZXRlXVxuICApXG5cbiAgY29uc3QgaGFuZGxlQ29uZmlybURlbGV0ZSA9IGFzeW5jIChjaGF0OiB7IGlkOiBzdHJpbmcgfSkgPT4ge1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBkZWxldGVTa2lsbChjaGF0LmlkKVxuICAgICAgaGFuZGxlU25hY2tiYXJTdWNjZXNzKHQoJ215U2tpbGxzLmRlbGV0ZVN1Y2Nlc3MnKSlcbiAgICAgIG9uRGVsZXRlU2tpbGw/LihjaGF0LmlkKVxuICAgICAgc2V0U2tpbGxUb0RlbGV0ZShudWxsKVxuICAgICAgc2V0TWVudU9wZW5Gb3JTa2lsbElkKG51bGwpXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGhhbmRsZVNuYWNrYmFyRXJyb3IodCgnbXlTa2lsbHMuZGVsZXRlRXJyb3InKSlcbiAgICB9XG4gIH1cblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IGhhbmRsZUNsaWNrT3V0c2lkZSA9ICgpID0+IHtcbiAgICAgIGlmIChtZW51T3BlbkZvclNraWxsSWQpIHtcbiAgICAgICAgc2V0TWVudU9wZW5Gb3JTa2lsbElkKG51bGwpXG4gICAgICB9XG4gICAgICBpZiAoY3JlYXRlTWVudU9wZW4pIHtcbiAgICAgICAgc2V0Q3JlYXRlTWVudU9wZW4oZmFsc2UpXG4gICAgICB9XG4gICAgfVxuXG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBoYW5kbGVDbGlja091dHNpZGUpXG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgaGFuZGxlQ2xpY2tPdXRzaWRlKVxuICAgIH1cbiAgfSwgW21lbnVPcGVuRm9yU2tpbGxJZCwgY3JlYXRlTWVudU9wZW5dKVxuXG4gIHJldHVybiAoXG4gICAgPFNDTVNDb250YWluZXIgJGhhc1NraWxscz17ISFza2lsbHMubGVuZ3RofT5cbiAgICAgIDxNQUlBSXNvbG9nbyAvPlxuXG4gICAgICA8U0NNU0JvZHkgJGNhbkNyZWF0ZT17Y2FuQ3JlYXRlfT5cbiAgICAgICAge3NraWxscy5sZW5ndGggPyAoXG4gICAgICAgICAgPFNDTVNUaXRsZVdyYXA+XG4gICAgICAgICAgICA8U0NNU1RpdGxlSW5uZXI+XG4gICAgICAgICAgICAgIDxTQ01TVGl0bGU+e3QoJ215U2tpbGxzLnRpdGxlJyl9PC9TQ01TVGl0bGU+XG4gICAgICAgICAgICAgIDxTQ01TU3VidGl0bGU+e3QoJ215U2tpbGxzLnN1YnRpdGxlJyl9PC9TQ01TU3VidGl0bGU+XG4gICAgICAgICAgICA8L1NDTVNUaXRsZUlubmVyPlxuICAgICAgICAgICAge2NhbkNyZWF0ZSA/IChcbiAgICAgICAgICAgICAgPFNDTVNBY3Rpb25zUm93PlxuICAgICAgICAgICAgICAgIDxTQ01TQ3JlYXRlTWVudVdyYXA+XG4gICAgICAgICAgICAgICAgICA8U0NNU0NyZWF0ZUJ1dHRvblxuICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgb25DbGljaz17ZXZlbnQgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgICAgICAgICAgICAgICAgICAgc2V0Q3JlYXRlTWVudU9wZW4ocHJldiA9PiAhcHJldilcbiAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPFNDTVNDcmVhdGVCdXR0b25UZXh0Pnt0KCdteVNraWxscy5jcmVhdGVTa2lsbCcpfTwvU0NNU0NyZWF0ZUJ1dHRvblRleHQ+XG4gICAgICAgICAgICAgICAgICA8L1NDTVNDcmVhdGVCdXR0b24+XG4gICAgICAgICAgICAgICAgICB7Y3JlYXRlTWVudU9wZW4gPyAoXG4gICAgICAgICAgICAgICAgICAgIDxTQ01TQ3JlYXRlTWVudSBvbkNsaWNrPXtldmVudCA9PiBldmVudC5zdG9wUHJvcGFnYXRpb24oKX0+XG4gICAgICAgICAgICAgICAgICAgICAgPFNDTVNDcmVhdGVNZW51SXRlbSB0eXBlPVwiYnV0dG9uXCIgb25DbGljaz17KCkgPT4gaGFuZGxlQ3JlYXRlT3B0aW9uKCdnZW5lcmF0ZScpfT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxJY29uQ2hhdCAvPlxuICAgICAgICAgICAgICAgICAgICAgICAge3QoJ215U2tpbGxzLmNyZWF0ZVdpdGhNYWlhJyl9XG4gICAgICAgICAgICAgICAgICAgICAgPC9TQ01TQ3JlYXRlTWVudUl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgPFNDTVNDcmVhdGVNZW51SXRlbSB0eXBlPVwiYnV0dG9uXCIgb25DbGljaz17KCkgPT4gaGFuZGxlQ3JlYXRlT3B0aW9uKCd3cml0ZScpfT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxJY29uQ2xpcGJvYXJkIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICB7dCgnbXlTa2lsbHMud3JpdGVJbnN0cnVjdGlvbnMnKX1cbiAgICAgICAgICAgICAgICAgICAgICA8L1NDTVNDcmVhdGVNZW51SXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICA8U0NNU0NyZWF0ZU1lbnVJdGVtIHR5cGU9XCJidXR0b25cIiBvbkNsaWNrPXsoKSA9PiBoYW5kbGVDcmVhdGVPcHRpb24oJ3VwbG9hZCcpfT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxJY29uVXBsb2FkIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICB7dCgnbXlTa2lsbHMudXBsb2FkU2tpbGwnKX1cbiAgICAgICAgICAgICAgICAgICAgICA8L1NDTVNDcmVhdGVNZW51SXRlbT5cbiAgICAgICAgICAgICAgICAgICAgPC9TQ01TQ3JlYXRlTWVudT5cbiAgICAgICAgICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICAgICAgICAgIDwvU0NNU0NyZWF0ZU1lbnVXcmFwPlxuICAgICAgICAgICAgICA8L1NDTVNBY3Rpb25zUm93PlxuICAgICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAgPC9TQ01TVGl0bGVXcmFwPlxuICAgICAgICApIDogbnVsbH1cblxuICAgICAgICB7bG9hZGluZyA/IChcbiAgICAgICAgICA8U0NNU0xvYWRXcmFwcGVyPlxuICAgICAgICAgICAgPExvYWRlciBzaXplPVwic21hbGxcIiAvPlxuICAgICAgICAgIDwvU0NNU0xvYWRXcmFwcGVyPlxuICAgICAgICApIDogbnVsbH1cblxuICAgICAgICB7IWxvYWRpbmcgJiYgc2tpbGxzLmxlbmd0aCA/IChcbiAgICAgICAgICA8U0NNU0NhcmRzT3V0ZXI+XG4gICAgICAgICAgICA8U0NNU0NhcmRzUm93PlxuICAgICAgICAgICAgICB7c2tpbGxzLm1hcChza2lsbCA9PiAoXG4gICAgICAgICAgICAgICAgPFNDTVNDYXJkQnV0dG9uIGtleT17c2tpbGwuaWR9IHR5cGU9XCJidXR0b25cIiBvbkNsaWNrPXsoKSA9PiBjYW5FZGl0ICYmIGhhbmRsZU9wZW5FZGl0U2tpbGwoc2tpbGwpfT5cbiAgICAgICAgICAgICAgICAgIDxTQ01TQ2FyZEhlYWRlcj5cbiAgICAgICAgICAgICAgICAgICAgPFNDTVNDYXJkVG9wUm93PlxuICAgICAgICAgICAgICAgICAgICAgIDxTQ01TQ2FyZFRpdGxlTmFtZT57c2tpbGwubmFtZX08L1NDTVNDYXJkVGl0bGVOYW1lPlxuICAgICAgICAgICAgICAgICAgICAgIHtjYW5TaG93TWVudSA/IChcbiAgICAgICAgICAgICAgICAgICAgICAgIDxTQ01TS2ViYWJCdXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGFyaWEtbGFiZWw9e3QoJ215U2tpbGxzLmNhcmRNZW51QXJpYUxhYmVsJyl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9e2V2ZW50ID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRNZW51T3BlbkZvclNraWxsSWQocHJldiA9PiAocHJldiA9PT0gc2tpbGwuaWQgPyBudWxsIDogc2tpbGwuaWQpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8TWVudURvdHMgY29sb3I9XCIjOTk5XCIgd2lkdGg9ezE1fSBoZWlnaHQ9ezE1fSAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9TQ01TS2ViYWJCdXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAgICAgICAgICAgIDwvU0NNU0NhcmRUb3BSb3c+XG4gICAgICAgICAgICAgICAgICA8L1NDTVNDYXJkSGVhZGVyPlxuICAgICAgICAgICAgICAgICAgPFNDTVNDYXJkQm9keT5cbiAgICAgICAgICAgICAgICAgICAgPFNDTVNDYXJkQ29udGVudFRleHQ+e3NraWxsLmNvbnRlbnR9PC9TQ01TQ2FyZENvbnRlbnRUZXh0PlxuICAgICAgICAgICAgICAgICAgICA8U0NNU0NhcmRGb290ZXI+XG4gICAgICAgICAgICAgICAgICAgICAgPFNDTVNDYXJkRm9vdGVyRGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgICAgIHtnZXRDcmVhdGVkQXRMYWJlbChza2lsbCkgfHwgdCgnbWFya2V0cGxhY2UubXlBZ2VudHNGYWxsYmFja0RhdGUnKX1cbiAgICAgICAgICAgICAgICAgICAgICA8L1NDTVNDYXJkRm9vdGVyRGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgPC9TQ01TQ2FyZEZvb3Rlcj5cbiAgICAgICAgICAgICAgICAgIDwvU0NNU0NhcmRCb2R5PlxuICAgICAgICAgICAgICAgICAge21lbnVPcGVuRm9yU2tpbGxJZCA9PT0gc2tpbGwuaWQgJiYgY2FuU2hvd01lbnUgPyAoXG4gICAgICAgICAgICAgICAgICAgIDxTQ01TQ2FyZE1lbnVcbiAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXtldmVudCA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpXG4gICAgICAgICAgICAgICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICA8U0NNU0NhcmRNZW51SXRlbXM+XG4gICAgICAgICAgICAgICAgICAgICAgICB7Y2FuRWRpdCA/IChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPFNDTVNDYXJkTWVudUl0ZW0gdHlwZT1cImJ1dHRvblwiIG9uQ2xpY2s9eygpID0+IGhhbmRsZU9wZW5FZGl0U2tpbGwoc2tpbGwpfT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7dCgnbXlTa2lsbHMuZWRpdCcpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L1NDTVNDYXJkTWVudUl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHtjYW5EZWxldGUgPyAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxTQ01TQ2FyZE1lbnVJdGVtIHR5cGU9XCJidXR0b25cIiBvbkNsaWNrPXsoKSA9PiBzZXRTa2lsbFRvRGVsZXRlKHNraWxsKX0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3QoJ215U2tpbGxzLmRlbGV0ZScpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L1NDTVNDYXJkTWVudUl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICAgICAgICAgICAgICA8L1NDTVNDYXJkTWVudUl0ZW1zPlxuICAgICAgICAgICAgICAgICAgICA8L1NDTVNDYXJkTWVudT5cbiAgICAgICAgICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICAgICAgICAgIDwvU0NNU0NhcmRCdXR0b24+XG4gICAgICAgICAgICAgICkpfVxuICAgICAgICAgICAgPC9TQ01TQ2FyZHNSb3c+XG4gICAgICAgICAgPC9TQ01TQ2FyZHNPdXRlcj5cbiAgICAgICAgKSA6IG51bGx9XG5cbiAgICAgICAgeyFsb2FkaW5nICYmICFza2lsbHMubGVuZ3RoID8gKFxuICAgICAgICAgIDxTQ01TRW1wdHlTdGF0ZVJvb3Q+XG4gICAgICAgICAgICA8U0NNU0VtcHR5U3RhdGVDb2x1bW4+XG4gICAgICAgICAgICAgIDxTQ01TRW1wdHlTdGF0ZVRpdGxlQmxvY2s+XG4gICAgICAgICAgICAgICAgPFNDTVNFbXB0eVN0YXRlVGl0bGU+e3QoJ215U2tpbGxzLmVtcHR5U3RhdGVUaXRsZScpfTwvU0NNU0VtcHR5U3RhdGVUaXRsZT5cbiAgICAgICAgICAgICAgICA8U0NNU0VtcHR5U3RhdGVTdWJ0aXRsZT5cbiAgICAgICAgICAgICAgICAgIHtjYW5DcmVhdGUgPyB0KCdteVNraWxscy5lbXB0eVN0YXRlRGVzY3JpcHRpb24nKSA6IHQoJ215U2tpbGxzLmVtcHR5U3RhdGVEZXNjcmlwdGlvbk5vUGVybScpfVxuICAgICAgICAgICAgICAgIDwvU0NNU0VtcHR5U3RhdGVTdWJ0aXRsZT5cbiAgICAgICAgICAgICAgPC9TQ01TRW1wdHlTdGF0ZVRpdGxlQmxvY2s+XG4gICAgICAgICAgICA8L1NDTVNFbXB0eVN0YXRlQ29sdW1uPlxuICAgICAgICAgICAge2NhbkNyZWF0ZSA/IChcbiAgICAgICAgICAgICAgPFNDTVNFbXB0eVN0YXRlQnV0dG9uIHR5cGU9XCJidXR0b25cIiBvbkNsaWNrPXtvcGVuQ3JlYXRlU2tpbGxNb2RhbH0+XG4gICAgICAgICAgICAgICAge3QoJ215U2tpbGxzLmVtcHR5U3RhdGVCdXR0b24nKX1cbiAgICAgICAgICAgICAgPC9TQ01TRW1wdHlTdGF0ZUJ1dHRvbj5cbiAgICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICAgIDwvU0NNU0VtcHR5U3RhdGVSb290PlxuICAgICAgICApIDogbnVsbH1cbiAgICAgIDwvU0NNU0JvZHk+XG4gICAgICB7ZGVsZXRlTW9kYWxDaGF0ID8gKFxuICAgICAgICA8RGVsZXRlUXVlc3Rpb25Nb2RhbFxuICAgICAgICAgIG9uQ2xvc2U9eygpID0+IHNldFNraWxsVG9EZWxldGUobnVsbCl9XG4gICAgICAgICAgaGFuZGxlcnM9e3tcbiAgICAgICAgICAgIGhhbmRsZUNvbmZpcm1BY3Rpb246IGhhbmRsZUNvbmZpcm1EZWxldGUsXG4gICAgICAgICAgfX1cbiAgICAgICAgICBjaGF0PXtkZWxldGVNb2RhbENoYXR9XG4gICAgICAgICAgYWN0aW9uPVwic2tpbGxcIlxuICAgICAgICAvPlxuICAgICAgKSA6IG51bGx9XG4gICAgPC9TQ01TQ29udGFpbmVyPlxuICApXG59XG4iXSwibWFwcGluZ3MiOiI7OztBQUFBLE9BQU9BLEtBQUssSUFBSUMsV0FBVyxFQUFFQyxTQUFTLEVBQUVDLE9BQU8sRUFBRUMsUUFBUSxRQUFRLE9BQU87QUFDeEUsU0FBU0MsUUFBUSxRQUFRLDJDQUEyQztBQUNwRSxTQUFTQyxjQUFjLFFBQVEsZUFBZTtBQUM5QyxTQUFTQyxPQUFPLFFBQVEsMkJBQTJCO0FBRW5ELFNBQVNDLFdBQVcsUUFBUSwyQ0FBMkM7QUFDdkUsU0FBU0Msa0JBQWtCLFFBQVEsc0RBQXNEO0FBQ3pGLFNBQVNDLG1CQUFtQixRQUFRLHlEQUF5RDtBQUM3RixTQUFTQyx5QkFBeUIsUUFBUSw2REFBNkQ7QUFDdkcsU0FBU0MsUUFBUSxRQUFRLDJCQUEyQjtBQUNwRCxTQUFTQyxNQUFNLFFBQVEsb0JBQW9CO0FBQzNDLFNBQ0VDLFFBQVEsRUFDUkMsWUFBWSxFQUNaQyxjQUFjLEVBQ2RDLG1CQUFtQixFQUNuQkMsY0FBYyxFQUNkQyxrQkFBa0IsRUFDbEJDLGNBQWMsRUFDZEMsWUFBWSxFQUNaQyxnQkFBZ0IsRUFDaEJDLGlCQUFpQixFQUNqQkMsaUJBQWlCLEVBQ2pCQyxjQUFjLEVBQ2RDLGNBQWMsRUFDZEMs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
384
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSZWFjdCIsInVzZUNhbGxiYWNrIiwidXNlRWZmZWN0IiwidXNlTWVtbyIsInVzZVJlZiIsInVzZVN0YXRlIiwiTWVudURvdHMiLCJTZWFyY2giLCJ1c2VUcmFuc2xhdGlvbiIsImRlbGV0ZVNraWxsIiwidXNlU25hY2tCYXJNYW5hZ2VyIiwiRGVsZXRlUXVlc3Rpb25Nb2RhbCIsIlNFQ1RJT05TIiwiTG9hZGVyIiwiU2tpbGxWaXNpYmlsaXR5RXZlcnlvbmVJY29uIiwiU2tpbGxWaXNpYmlsaXR5T25seU1lSWNvbiIsIlNDTVNCb2R5IiwiU0NNU0NhcmRCdXR0b24iLCJTQ01TQ2FyZENvbnRlbnRUZXh0IiwiU0NNU0NhcmRNZW51IiwiU0NNU0NhcmRNZW51SXRlbSIsIlNDTVNDYXJkVGl0bGVOYW1lIiwiU0NNU0NhcmRUb3BSb3ciLCJTQ01TQ2FyZFZpc2liaWxpdHlSb3ciLCJTQ01TQ2FyZFZpc2liaWxpdHlUZXh0IiwiU0NNU0NhcmRzTGlzdCIsIlNDTVNDb250YWluZXIiLCJTQ01TQ3JlYXRlQnV0dG9uIiwiU0NNU0NyZWF0ZUJ1dHRvblRleHQiLCJTQ01TU2hhcmVkRW1wdHlTdGF0ZVJvb3QiLCJTQ01TU2hhcmVkRW1wdHlTdGF0ZVN1YnRpdGxlIiwiU0NNU1NoYXJlZEVtcHR5U3RhdGVUaXRsZSIsIlNDTVNTaGFyZWRFbXB0eVN0YXRlVGl0bGVCbG9jayIsIlNDTVNLZWJhYkJ1dHRvbiIsIlNDTVNMb2FkV3JhcHBlciIsIlNDTVNNZXRhRGVzY3JpcHRpb24iLCJTQ01TTWV0YVJvdyIsIlNDTVNQYW5lbCIsIlNDTVNQYW5lbEhlYWRlciIsIlNDTVNMaXN0U2Nyb2xsQXJlYSIsIlNDTVNTZWFyY2hJbnB1dCIsIlNDTVNTZWFyY2hXcmFwcGVyIiwiU0NNU1RhYkJhciIsIlNDTVNUYWJCdXR0b24iLCJTQ01TVGl0bGUiLCJTQ01TVGl0bGVCbG9jayIsImpzeCIsIl9qc3giLCJqc3hzIiwiX2pzeHMiLCJGcmFnbWVudCIsIl9GcmFnbWVudCIsIkRST1BET1dOX0dBUF9QWCIsIkNBUkRfTUVOVV9IRUlHSFRfUFgiLCJyZXNvbHZlRHJvcGRvd25QbGFjZW1lbnQiLCJhbmNob3IiLCJkcm9wZG93bkhlaWdodCIsInJlY3QiLCJnZXRCb3VuZGluZ0NsaWVudFJlY3QiLCJzcGFjZUJlbG93Iiwid2luZG93IiwiaW5uZXJIZWlnaHQiLCJib3R0b20iLCJzcGFjZUFib3ZlIiwidG9wIiwiZm9ybWF0U2tpbGxEaXNwbGF5TmFtZSIsIm5hbWUiLCJub3JtYWxpemVkIiwicmVwbGFjZSIsImNvbmNhdCIsIm9wZW5Ta2lsbE1vZGFsIiwidmFsdWVzIiwiZG9jdW1lbnQiLCJkaXNwYXRjaEV2ZW50IiwiQ3VzdG9tRXZlbnQiLCJkZXRhaWwiLCJza2lsbFZhbHVlcyIsImlzT3BlbiIsIlNraWxsU2VhcmNoSW5wdXQiLCJtZW1vIiwiX3JlZiIsIm9uU2VhcmNoIiwicGxhY2Vob2xkZXIiLCJfdXNlU3RhdGUiLCJfdXNlU3RhdGUyIiwiX3NsaWNlZFRvQXJyYXkiLCJ2YWx1ZSIsInNldFZhbHVlIiwiZGVib3VuY2VSZWYiLCJoYW5kbGVDaGFuZ2UiLCJldmVudCIsIm5leHRWYWx1ZSIsInRhcmdldCIsImN1cnJlbnQiLCJjbGVhclRpbWVvdXQiLCJzZXRUaW1lb3V0IiwidHJpbSIsImNoaWxkcmVuIiwid2lkdGgiLCJoZWlnaHQiLCJjb2xvciIsInR5cGUiLCJvbkNoYW5nZSIsIkNoYXRBSU15U2tpbGxzIiwiX3JlZjIiLCJteVNraWxscyIsInNoYXJlZFNraWxscyIsIl9yZWYyJGxvYWRpbmciLCJsb2FkaW5nIiwib25EZWxldGVTa2lsbCIsIl91c2VUcmFuc2xhdGlvbiIsImNoYXRBSSIsInQiLCJfdXNlU25hY2tCYXJNYW5hZ2VyIiwiaGFuZGxlU25hY2tiYXJTdWNjZXNzIiwiaGFuZGxlU25hY2tiYXJFcnJvciIsImxpc3RTY3JvbGxSZWYiLCJfdXNlU3RhdGUzIiwiX3VzZVN0YXRlNCIsImFjdGl2ZVRhYiIsInNldEFjdGl2ZVRhYiIsIl91c2VTdGF0ZTUiLCJfdXNlU3RhdGU2Iiwic2VhcmNoUXVlcnkiLCJzZXRTZWFyY2hRdWVyeSIsIl91c2VTdGF0ZTciLCJfdXNlU3RhdGU4IiwibWVudU9wZW5Gb3JTa2lsbElkIiwic2V0TWVudU9wZW5Gb3JTa2lsbElkIiwiX3VzZVN0YXRlOSIsIl91c2VTdGF0ZTAiLCJjYXJkTWVudVBsYWNlbWVudCIsInNldENhcmRNZW51UGxhY2VtZW50IiwiX3VzZVN0YXRlMSIsIl91c2VTdGF0ZTEwIiwic2tpbGxUb0RlbGV0ZSIsInNldFNraWxsVG9EZWxldGUiLCJpc01pbmVUYWIiLCJ0YWJTa2lsbHMiLCJmaWx0ZXJlZFNraWxscyIsIm5vcm1hbGl6ZWRRdWVyeSIsInRvTG93ZXJDYXNlIiwibWF0Y2hlZCIsImZpbHRlciIsInNraWxsIiwiaW5jbHVkZXMiLCJfdG9Db25zdW1hYmxlQXJyYXkiLCJzb3J0IiwiYSIsImIiLCJsb2NhbGVDb21wYXJlIiwiaGFuZGxlQ3JlYXRlU2tpbGwiLCJpc0VkaXRpbmciLCJpbnRlbnQiLCJoYW5kbGVUb2dnbGVDYXJkTWVudSIsInNraWxsSWQiLCJwcmV2ZW50RGVmYXVsdCIsInN0b3BQcm9wYWdhdGlvbiIsImNhcmRBbmNob3IiLCJjdXJyZW50VGFyZ2V0IiwiY2xvc2VzdCIsIkhUTUxFbGVtZW50IiwicHJldiIsImhhbmRsZU9wZW5Ta2lsbCIsImlzUmVhZE9ubHkiLCJnZW5lcmFsIiwiaWQiLCJkZXNjcmlwdGlvbiIsImNvbnRlbnQiLCJhY2Nlc3NfdHlwZSIsImNyZWF0ZWRfYnlfbmFtZSIsInVwZGF0ZWRfYXQiLCJkZWxldGVNb2RhbENoYXQiLCJ0aXRsZSIsImhhbmRsZUNvbmZpcm1EZWxldGUiLCJfcmVmMyIsIl9hc3luY1RvR2VuZXJhdG9yIiwiX3JlZ2VuZXJhdG9yUnVudGltZSIsIm1hcmsiLCJfY2FsbGVlIiwiY2hhdCIsIl90Iiwid3JhcCIsIl9jb250ZXh0IiwibmV4dCIsInN0b3AiLCJfeCIsImFwcGx5IiwiYXJndW1lbnRzIiwiaGFuZGxlQ2xpY2tPdXRzaWRlIiwiYWRkRXZlbnRMaXN0ZW5lciIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJ1bmRlZmluZWQiLCJoYW5kbGVSZXBvc2l0aW9uIiwiX2xpc3RTY3JvbGxSZWYkY3VycmVuIiwib3BlbkNhcmQiLCJxdWVyeVNlbGVjdG9yIiwic2Nyb2xsQ29udGFpbmVyIiwicGFzc2l2ZSIsInRhYkRlc2NyaXB0aW9uIiwiaXNNaW5lRW1wdHkiLCJsZW5ndGgiLCJzaG93U2tpbGxzVG9vbGJhciIsInJlbmRlckNyZWF0ZVNraWxsQnV0dG9uIiwib25DbGljayIsInJlbmRlclNlYXJjaEVtcHR5U3RhdGUiLCJyZW5kZXJFbXB0eVN0YXRlIiwiJGFjdGl2ZSIsInJlZiIsInNpemUiLCJtYXAiLCJpbmRleCIsIiRpbmRleCIsIiRlbGV2YXRlZCIsIiR2aXNpYmxlIiwiJHBsYWNlbWVudCIsIm9uQ2xvc2UiLCJoYW5kbGVycyIsImhhbmRsZUNvbmZpcm1BY3Rpb24iLCJhY3Rpb24iXSwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50cy9tb2xlY3VsZXMvQ2hhdEFJTXlTa2lsbHMvQ2hhdEFJTXlTa2lsbHMudHN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCwgeyB1c2VDYWxsYmFjaywgdXNlRWZmZWN0LCB1c2VNZW1vLCB1c2VSZWYsIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBNZW51RG90cyB9IGZyb20gJ0Bwcm9qZWN0Y29yL2ljb25zL2xpYi9jb21wb25lbnRzL01lbnVEb3RzJ1xuaW1wb3J0IHsgU2VhcmNoIH0gZnJvbSAnQHByb2plY3Rjb3IvaWNvbnMvbGliL2NvbXBvbmVudHMvU2VhcmNoJ1xuaW1wb3J0IHsgdXNlVHJhbnNsYXRpb24gfSBmcm9tICdyZWFjdC1pMThuZXh0J1xuaW1wb3J0IHsgU2tpbGwgfSBmcm9tICcuLi8uLi8uLi90eXBlcy9za2lsbCdcbmltcG9ydCB7IGRlbGV0ZVNraWxsIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvbWFpYS9Ta2lsbHMvZGVsZXRlU2tpbGwnXG5pbXBvcnQgeyB1c2VTbmFja0Jhck1hbmFnZXIgfSBmcm9tICcuLi8uLi8uLi9ob29rcy91c2VTbmFja0Jhck1hbmFnZXIvdXNlU25hY2tCYXJNYW5hZ2VyJ1xuaW1wb3J0IHsgRGVsZXRlUXVlc3Rpb25Nb2RhbCB9IGZyb20gJy4uLy4uL29yZ2FuaXNtcy9EZWxldGVRdWVzdGlvbk1vZGFsL0RlbGV0ZVF1ZXN0aW9uTW9kYWwnXG5pbXBvcnQgeyBTRUNUSU9OUyB9IGZyb20gJy4uLy4uLy4uL2NvbnN0YW50cy9jb25maWcnXG5pbXBvcnQgeyBMb2FkZXIgfSBmcm9tICcuLi8uLi9hdG9tcy9Mb2FkZXInXG5pbXBvcnQgeyBTa2lsbFZpc2liaWxpdHlFdmVyeW9uZUljb24gfSBmcm9tICcuLi8uLi9hdG9tcy9pY29ucy9Ta2lsbFZpc2liaWxpdHlFdmVyeW9uZUljb24nXG5pbXBvcnQgeyBTa2lsbFZpc2liaWxpdHlPbmx5TWVJY29uIH0gZnJvbSAnLi4vLi4vYXRvbXMvaWNvbnMvU2tpbGxWaXNpYmlsaXR5T25seU1lSWNvbidcbmltcG9ydCB7XG4gIFNDTVNCb2R5LFxuICBTQ01TQ2FyZEJ1dHRvbixcbiAgU0NNU0NhcmRDb250ZW50VGV4dCxcbiAgU0NNU0NhcmRNZW51LFxuICBTQ01TQ2FyZE1lbnVJdGVtLFxuICBTQ01TQ2FyZFRpdGxlTmFtZSxcbiAgU0NNU0NhcmRUb3BSb3csXG4gIFNDTVNDYXJkVmlzaWJpbGl0eVJvdyxcbiAgU0NNU0NhcmRWaXNpYmlsaXR5VGV4dCxcbiAgU0NNU0NhcmRzTGlzdCxcbiAgU0NNU0NvbnRhaW5lcixcbiAgU0NNU0NyZWF0ZUJ1dHRvbixcbiAgU0NNU0NyZWF0ZUJ1dHRvblRleHQsXG4gIFNDTVNTaGFyZWRFbXB0eVN0YXRlUm9vdCxcbiAgU0NNU1NoYXJlZEVtcHR5U3RhdGVTdWJ0aXRsZSxcbiAgU0NNU1NoYXJlZEVtcHR5U3RhdGVUaXRsZSxcbiAgU0NNU1NoYXJlZEVtcHR5U3RhdGVUaXRsZUJsb2NrLFxuICBTQ01TS2ViYWJCdXR0b24sXG4gIFNDTVNMb2FkV3JhcHBlcixcbiAgU0NNU01ldGFEZXNjcmlwdGlvbixcbiAgU0NNU01ldGFSb3csXG4gIFNDTVNQYW5lbCxcbiAgU0NNU1BhbmVsSGVhZGVyLFxuICBTQ01TTGlzdFNjcm9sbEFyZWEsXG4gIFNDTVNTZWFyY2hJbnB1dCxcbiAgU0NNU1NlYXJjaFdyYXBwZXIsXG4gIFNDTVNUYWJCYXIsXG4gIFNDTVNUYWJCdXR0b24sXG4gIFNDTVNUaXRsZSxcbiAgU0NNU1RpdGxlQmxvY2ssXG59IGZyb20gJy4vQ2hhdEFJTXlTa2lsbHMuc3R5bGVzJ1xuXG50eXBlIENoYXRBSU15U2tpbGxzUHJvcHMgPSB7XG4gIG15U2tpbGxzOiBTa2lsbFtdXG4gIHNoYXJlZFNraWxsczogU2tpbGxbXVxuICBsb2FkaW5nPzogYm9vbGVhblxuICBvbkRlbGV0ZVNraWxsPzogKHNraWxsSWQ6IHN0cmluZykgPT4gdm9pZFxufVxuXG50eXBlIFNraWxsc1RhYiA9ICdtaW5lJyB8ICdzaGFyZWQnXG5cbnR5cGUgU2tpbGxNb2RhbEludGVudCA9ICdnZW5lcmF0ZScgfCAnd3JpdGUnXG5cbnR5cGUgRHJvcGRvd25QbGFjZW1lbnQgPSAndG9wJyB8ICdib3R0b20nXG5cbmNvbnN0IERST1BET1dOX0dBUF9QWCA9IDZcbmNvbnN0IENBUkRfTUVOVV9IRUlHSFRfUFggPSA4OFxuXG5jb25zdCByZXNvbHZlRHJvcGRvd25QbGFjZW1lbnQgPSAoYW5jaG9yOiBIVE1MRWxlbWVudCwgZHJvcGRvd25IZWlnaHQ6IG51bWJlcik6IERyb3Bkb3duUGxhY2VtZW50ID0+IHtcbiAgY29uc3QgcmVjdCA9IGFuY2hvci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKVxuICBjb25zdCBzcGFjZUJlbG93ID0gd2luZG93LmlubmVySGVpZ2h0IC0gcmVjdC5ib3R0b20gLSBEUk9QRE9XTl9HQVBfUFhcbiAgY29uc3Qgc3BhY2VBYm92ZSA9IHJlY3QudG9wIC0gRFJPUERPV05fR0FQX1BYXG5cbiAgaWYgKHNwYWNlQmVsb3cgPj0gZHJvcGRvd25IZWlnaHQpIHJldHVybiAnYm90dG9tJ1xuICBpZiAoc3BhY2VBYm92ZSA+PSBkcm9wZG93bkhlaWdodCkgcmV0dXJuICd0b3AnXG4gIHJldHVybiBzcGFjZUJlbG93ID49IHNwYWNlQWJvdmUgPyAnYm90dG9tJyA6ICd0b3AnXG59XG5cbmNvbnN0IGZvcm1hdFNraWxsRGlzcGxheU5hbWUgPSAobmFtZTogc3RyaW5nKSA9PiB7XG4gIGNvbnN0IG5vcm1hbGl6ZWQgPSBuYW1lLnJlcGxhY2UoL14oQFxcL3wjKS8sICcnKVxuICByZXR1cm4gYCMke25vcm1hbGl6ZWR9YFxufVxuXG5jb25zdCBvcGVuU2tpbGxNb2RhbCA9ICh2YWx1ZXM6IHtcbiAgaXNFZGl0aW5nOiBib29sZWFuXG4gIGlzUmVhZE9ubHk/OiBib29sZWFuXG4gIGludGVudD86IFNraWxsTW9kYWxJbnRlbnRcbiAgZ2VuZXJhbD86IHtcbiAgICBpZD86IHN0cmluZ1xuICAgIG5hbWU/OiBzdHJpbmdcbiAgICBkZXNjcmlwdGlvbj86IHN0cmluZ1xuICAgIGNvbnRlbnQ/OiBzdHJpbmdcbiAgICBhY2Nlc3NfdHlwZT86IFNraWxsWydhY2Nlc3NfdHlwZSddXG4gICAgY3JlYXRlZF9ieV9uYW1lPzogc3RyaW5nXG4gICAgdXBkYXRlZF9hdD86IHN0cmluZ1xuICB9XG59KSA9PiB7XG4gIGRvY3VtZW50LmRpc3BhdGNoRXZlbnQoXG4gICAgbmV3IEN1c3RvbUV2ZW50KCdhYm0tc2tpbGwtbW9kYWwtc2V0LXZhbHVlcycsIHtcbiAgICAgIGRldGFpbDoge1xuICAgICAgICBza2lsbFZhbHVlczoge1xuICAgICAgICAgIHZhbHVlcyxcbiAgICAgICAgICBpc09wZW46IHRydWUsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0pXG4gIClcbn1cblxuY29uc3QgU2tpbGxTZWFyY2hJbnB1dCA9IFJlYWN0Lm1lbW8oXG4gICh7IG9uU2VhcmNoLCBwbGFjZWhvbGRlciB9OiB7IG9uU2VhcmNoOiAocXVlcnk6IHN0cmluZykgPT4gdm9pZDsgcGxhY2Vob2xkZXI6IHN0cmluZyB9KSA9PiB7XG4gICAgY29uc3QgW3ZhbHVlLCBzZXRWYWx1ZV0gPSB1c2VTdGF0ZSgnJylcbiAgICBjb25zdCBkZWJvdW5jZVJlZiA9IHVzZVJlZjxSZXR1cm5UeXBlPHR5cGVvZiBzZXRUaW1lb3V0PiB8IG51bGw+KG51bGwpXG5cbiAgICBjb25zdCBoYW5kbGVDaGFuZ2UgPSB1c2VDYWxsYmFjayhcbiAgICAgIChldmVudDogUmVhY3QuQ2hhbmdlRXZlbnQ8SFRNTElucHV0RWxlbWVudD4pID0+IHtcbiAgICAgICAgY29uc3QgbmV4dFZhbHVlID0gZXZlbnQudGFyZ2V0LnZhbHVlXG4gICAgICAgIHNldFZhbHVlKG5leHRWYWx1ZSlcbiAgICAgICAgaWYgKGRlYm91bmNlUmVmLmN1cnJlbnQpIGNsZWFyVGltZW91dChkZWJvdW5jZVJlZi5jdXJyZW50KVxuICAgICAgICBkZWJvdW5jZVJlZi5jdXJyZW50ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgb25TZWFyY2gobmV4dFZhbHVlLnRyaW0oKSlcbiAgICAgICAgfSwgMjUwKVxuICAgICAgfSxcbiAgICAgIFtvblNlYXJjaF1cbiAgICApXG5cbiAgICB1c2VFZmZlY3QoXG4gICAgICAoKSA9PiAoKSA9PiB7XG4gICAgICAgIGlmIChkZWJvdW5jZVJlZi5jdXJyZW50KSBjbGVhclRpbWVvdXQoZGVib3VuY2VSZWYuY3VycmVudClcbiAgICAgIH0sXG4gICAgICBbXVxuICAgIClcblxuICAgIHJldHVybiAoXG4gICAgICA8U0NNU1NlYXJjaFdyYXBwZXI+XG4gICAgICAgIDxTZWFyY2ggd2lkdGg9ezE2fSBoZWlnaHQ9ezE2fSBjb2xvcj1cIiM5OTlcIiAvPlxuICAgICAgICA8U0NNU1NlYXJjaElucHV0IHR5cGU9XCJ0ZXh0XCIgdmFsdWU9e3ZhbHVlfSBvbkNoYW5nZT17aGFuZGxlQ2hhbmdlfSBwbGFjZWhvbGRlcj17cGxhY2Vob2xkZXJ9IC8+XG4gICAgICA8L1NDTVNTZWFyY2hXcmFwcGVyPlxuICAgIClcbiAgfVxuKVxuXG5leHBvcnQgY29uc3QgQ2hhdEFJTXlTa2lsbHMgPSAoeyBteVNraWxscywgc2hhcmVkU2tpbGxzLCBsb2FkaW5nID0gZmFsc2UsIG9uRGVsZXRlU2tpbGwgfTogQ2hhdEFJTXlTa2lsbHNQcm9wcykgPT4ge1xuICBjb25zdCB7IHQgfSA9IHVzZVRyYW5zbGF0aW9uKFtTRUNUSU9OUy5jaGF0QUldKVxuICBjb25zdCB7IGhhbmRsZVNuYWNrYmFyU3VjY2VzcywgaGFuZGxlU25hY2tiYXJFcnJvciB9ID0gdXNlU25hY2tCYXJNYW5hZ2VyKClcbiAgY29uc3QgbGlzdFNjcm9sbFJlZiA9IHVzZVJlZjxIVE1MRGl2RWxlbWVudD4obnVsbClcbiAgY29uc3QgW2FjdGl2ZVRhYiwgc2V0QWN0aXZlVGFiXSA9IHVzZVN0YXRlPFNraWxsc1RhYj4oJ21pbmUnKVxuICBjb25zdCBbc2VhcmNoUXVlcnksIHNldFNlYXJjaFF1ZXJ5XSA9IHVzZVN0YXRlKCcnKVxuICBjb25zdCBbbWVudU9wZW5Gb3JTa2lsbElkLCBzZXRNZW51T3BlbkZvclNraWxsSWRdID0gdXNlU3RhdGU8c3RyaW5nIHwgbnVsbD4obnVsbClcbiAgY29uc3QgW2NhcmRNZW51UGxhY2VtZW50LCBzZXRDYXJkTWVudVBsYWNlbWVudF0gPSB1c2VTdGF0ZTxEcm9wZG93blBsYWNlbWVudD4oJ2JvdHRvbScpXG4gIGNvbnN0IFtza2lsbFRvRGVsZXRlLCBzZXRTa2lsbFRvRGVsZXRlXSA9IHVzZVN0YXRlPFNraWxsIHwgbnVsbD4obnVsbClcbiAgY29uc3QgaXNNaW5lVGFiID0gYWN0aXZlVGFiID09PSAnbWluZSdcblxuICBjb25zdCB0YWJTa2lsbHMgPSBpc01pbmVUYWIgPyBteVNraWxscyA6IHNoYXJlZFNraWxsc1xuXG4gIGNvbnN0IGZpbHRlcmVkU2tpbGxzID0gdXNlTWVtbygoKSA9PiB7XG4gICAgY29uc3Qgbm9ybWFsaXplZFF1ZXJ5ID0gc2VhcmNoUXVlcnkudG9Mb3dlckNhc2UoKVxuICAgIGNvbnN0IG1hdGNoZWQgPSBub3JtYWxpemVkUXVlcnlcbiAgICAgID8gdGFiU2tpbGxzLmZpbHRlcihza2lsbCA9PiBza2lsbC5uYW1lLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMobm9ybWFsaXplZFF1ZXJ5KSlcbiAgICAgIDogdGFiU2tpbGxzXG4gICAgcmV0dXJuIFsuLi5tYXRjaGVkXS5zb3J0KChhLCBiKSA9PiBhLm5hbWUubG9jYWxlQ29tcGFyZShiLm5hbWUpKVxuICB9LCBbc2VhcmNoUXVlcnksIHRhYlNraWxsc10pXG5cbiAgY29uc3QgaGFuZGxlQ3JlYXRlU2tpbGwgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgb3BlblNraWxsTW9kYWwoeyBpc0VkaXRpbmc6IGZhbHNlLCBpbnRlbnQ6ICd3cml0ZScgfSlcbiAgfSwgW10pXG5cbiAgY29uc3QgaGFuZGxlVG9nZ2xlQ2FyZE1lbnUgPSB1c2VDYWxsYmFjaygoZXZlbnQ6IFJlYWN0Lk1vdXNlRXZlbnQ8SFRNTEJ1dHRvbkVsZW1lbnQ+LCBza2lsbElkOiBzdHJpbmcpID0+IHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpXG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICBjb25zdCBjYXJkQW5jaG9yID0gZXZlbnQuY3VycmVudFRhcmdldC5jbG9zZXN0KCdbZGF0YS1za2lsbC1jYXJkLWlkXScpXG4gICAgaWYgKGNhcmRBbmNob3IgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkge1xuICAgICAgc2V0Q2FyZE1lbnVQbGFjZW1lbnQocmVzb2x2ZURyb3Bkb3duUGxhY2VtZW50KGNhcmRBbmNob3IsIENBUkRfTUVOVV9IRUlHSFRfUFgpKVxuICAgIH1cbiAgICBzZXRNZW51T3BlbkZvclNraWxsSWQocHJldiA9PiAocHJldiA9PT0gc2tpbGxJZCA/IG51bGwgOiBza2lsbElkKSlcbiAgfSwgW10pXG5cbiAgY29uc3QgaGFuZGxlT3BlblNraWxsID0gdXNlQ2FsbGJhY2soKHNraWxsOiBTa2lsbCwgaXNSZWFkT25seTogYm9vbGVhbikgPT4ge1xuICAgIG9wZW5Ta2lsbE1vZGFsKHtcbiAgICAgIGlzRWRpdGluZzogdHJ1ZSxcbiAgICAgIGlzUmVhZE9ubHksXG4gICAgICBnZW5lcmFsOiB7XG4gICAgICAgIGlkOiBza2lsbC5pZCxcbiAgICAgICAgbmFtZTogc2tpbGwubmFtZSxcbiAgICAgICAgZGVzY3JpcHRpb246IHNraWxsLmRlc2NyaXB0aW9uLFxuICAgICAgICBjb250ZW50OiBza2lsbC5jb250ZW50LFxuICAgICAgICBhY2Nlc3NfdHlwZTogc2tpbGwuYWNjZXNzX3R5cGUsXG4gICAgICAgIGNyZWF0ZWRfYnlfbmFtZTogc2tpbGwuY3JlYXRlZF9ieV9uYW1lLFxuICAgICAgICB1cGRhdGVkX2F0OiBza2lsbC51cGRhdGVkX2F0LFxuICAgICAgfSxcbiAgICB9KVxuICAgIHNldE1lbnVPcGVuRm9yU2tpbGxJZChudWxsKVxuICB9LCBbXSlcblxuICBjb25zdCBkZWxldGVNb2RhbENoYXQgPSB1c2VNZW1vKFxuICAgICgpID0+IChza2lsbFRvRGVsZXRlID8geyB0aXRsZTogc2tpbGxUb0RlbGV0ZS5uYW1lLCBpZDogc2tpbGxUb0RlbGV0ZS5pZCB9IDogbnVsbCksXG4gICAgW3NraWxsVG9EZWxldGVdXG4gIClcblxuICBjb25zdCBoYW5kbGVDb25maXJtRGVsZXRlID0gYXN5bmMgKGNoYXQ6IHsgaWQ6IHN0cmluZyB9KSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGRlbGV0ZVNraWxsKGNoYXQuaWQpXG4gICAgICBoYW5kbGVTbmFja2JhclN1Y2Nlc3ModCgnbXlTa2lsbHMuZGVsZXRlU3VjY2VzcycpKVxuICAgICAgb25EZWxldGVTa2lsbD8uKGNoYXQuaWQpXG4gICAgICBzZXRTa2lsbFRvRGVsZXRlKG51bGwpXG4gICAgICBzZXRNZW51T3BlbkZvclNraWxsSWQobnVsbClcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgaGFuZGxlU25hY2tiYXJFcnJvcih0KCdteVNraWxscy5kZWxldGVFcnJvcicpKVxuICAgIH1cbiAgfVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgaGFuZGxlQ2xpY2tPdXRzaWRlID0gKCkgPT4ge1xuICAgICAgaWYgKG1lbnVPcGVuRm9yU2tpbGxJZCkge1xuICAgICAgICBzZXRNZW51T3BlbkZvclNraWxsSWQobnVsbClcbiAgICAgIH1cbiAgICB9XG5cbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGhhbmRsZUNsaWNrT3V0c2lkZSlcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2xpY2snLCBoYW5kbGVDbGlja091dHNpZGUpXG4gICAgfVxuICB9LCBbbWVudU9wZW5Gb3JTa2lsbElkXSlcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghbWVudU9wZW5Gb3JTa2lsbElkKSByZXR1cm4gdW5kZWZpbmVkXG5cbiAgICBjb25zdCBoYW5kbGVSZXBvc2l0aW9uID0gKCkgPT4ge1xuICAgICAgY29uc3Qgb3BlbkNhcmQgPSBsaXN0U2Nyb2xsUmVmLmN1cnJlbnQ/LnF1ZXJ5U2VsZWN0b3I8SFRNTEJ1dHRvbkVsZW1lbnQ+KFxuICAgICAgICBgW2RhdGEtc2tpbGwtY2FyZC1pZD1cIiR7bWVudU9wZW5Gb3JTa2lsbElkfVwiXWBcbiAgICAgIClcbiAgICAgIGlmIChvcGVuQ2FyZCkge1xuICAgICAgICBzZXRDYXJkTWVudVBsYWNlbWVudChyZXNvbHZlRHJvcGRvd25QbGFjZW1lbnQob3BlbkNhcmQsIENBUkRfTUVOVV9IRUlHSFRfUFgpKVxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHNjcm9sbENvbnRhaW5lciA9IGxpc3RTY3JvbGxSZWYuY3VycmVudFxuICAgIHNjcm9sbENvbnRhaW5lcj8uYWRkRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgaGFuZGxlUmVwb3NpdGlvbiwgeyBwYXNzaXZlOiB0cnVlIH0pXG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIGhhbmRsZVJlcG9zaXRpb24pXG5cbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgc2Nyb2xsQ29udGFpbmVyPy5yZW1vdmVFdmVudExpc3RlbmVyKCdzY3JvbGwnLCBoYW5kbGVSZXBvc2l0aW9uKVxuICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIGhhbmRsZVJlcG9zaXRpb24pXG4gICAgfVxuICB9LCBbbWVudU9wZW5Gb3JTa2lsbElkXSlcblxuICBjb25zdCB0YWJEZXNjcmlwdGlvbiA9IGlzTWluZVRhYiA/IHQoJ215U2tpbGxzLm15U2tpbGxzRGVzY3JpcHRpb24nKSA6IHQoJ215U2tpbGxzLnNoYXJlZFNraWxsc0Rlc2NyaXB0aW9uJylcblxuICBjb25zdCBpc01pbmVFbXB0eSA9IGlzTWluZVRhYiAmJiAhbG9hZGluZyAmJiBteVNraWxscy5sZW5ndGggPT09IDAgJiYgIXNlYXJjaFF1ZXJ5XG4gIGNvbnN0IHNob3dTa2lsbHNUb29sYmFyID0gaXNNaW5lVGFiID8gIWlzTWluZUVtcHR5IDogdGFiU2tpbGxzLmxlbmd0aCA+IDAgfHwgISFzZWFyY2hRdWVyeVxuXG4gIGNvbnN0IHJlbmRlckNyZWF0ZVNraWxsQnV0dG9uID0gKCkgPT4gKFxuICAgIDxTQ01TQ3JlYXRlQnV0dG9uIHR5cGU9XCJidXR0b25cIiBvbkNsaWNrPXtoYW5kbGVDcmVhdGVTa2lsbH0+XG4gICAgICA8U0NNU0NyZWF0ZUJ1dHRvblRleHQ+e3QoJ215U2tpbGxzLmNyZWF0ZVNraWxsJyl9PC9TQ01TQ3JlYXRlQnV0dG9uVGV4dD5cbiAgICA8L1NDTVNDcmVhdGVCdXR0b24+XG4gIClcblxuICBjb25zdCByZW5kZXJTZWFyY2hFbXB0eVN0YXRlID0gKCkgPT4gKFxuICAgIDxTQ01TU2hhcmVkRW1wdHlTdGF0ZVJvb3Q+XG4gICAgICA8U0NNU1NoYXJlZEVtcHR5U3RhdGVUaXRsZUJsb2NrPlxuICAgICAgICA8U0NNU1NoYXJlZEVtcHR5U3RhdGVUaXRsZT57dCgnbXlTa2lsbHMuc2VhcmNoRW1wdHlTdGF0ZVRpdGxlJyl9PC9TQ01TU2hhcmVkRW1wdHlTdGF0ZVRpdGxlPlxuICAgICAgICA8U0NNU1NoYXJlZEVtcHR5U3RhdGVTdWJ0aXRsZT57dCgnbXlTa2lsbHMuc2VhcmNoRW1wdHlTdGF0ZURlc2NyaXB0aW9uJyl9PC9TQ01TU2hhcmVkRW1wdHlTdGF0ZVN1YnRpdGxlPlxuICAgICAgPC9TQ01TU2hhcmVkRW1wdHlTdGF0ZVRpdGxlQmxvY2s+XG4gICAgPC9TQ01TU2hhcmVkRW1wdHlTdGF0ZVJvb3Q+XG4gIClcblxuICBjb25zdCByZW5kZXJFbXB0eVN0YXRlID0gKCkgPT4ge1xuICAgIGlmICghaXNNaW5lVGFiKSB7XG4gICAgICBpZiAoc2VhcmNoUXVlcnkpIHtcbiAgICAgICAgcmV0dXJuIHJlbmRlclNlYXJjaEVtcHR5U3RhdGUoKVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gKFxuICAgICAgICA8U0NNU1NoYXJlZEVtcHR5U3RhdGVSb290PlxuICAgICAgICAgIDxTQ01TU2hhcmVkRW1wdHlTdGF0ZVRpdGxlQmxvY2s+XG4gICAgICAgICAgICA8U0NNU1NoYXJlZEVtcHR5U3RhdGVUaXRsZT57dCgnbXlTa2lsbHMuc2hhcmVkRW1wdHlTdGF0ZVRpdGxlJyl9PC9TQ01TU2hhcmVkRW1wdHlTdGF0ZVRpdGxlPlxuICAgICAgICAgICAgPFNDTVNTaGFyZWRFbXB0eVN0YXRlU3VidGl0bGU+e3QoJ215U2tpbGxzLnNoYXJlZEVtcHR5U3RhdGVEZXNjcmlwdGlvbicpfTwvU0NNU1NoYXJlZEVtcHR5U3RhdGVTdWJ0aXRsZT5cbiAgICAgICAgICA8L1NDTVNTaGFyZWRFbXB0eVN0YXRlVGl0bGVCbG9jaz5cbiAgICAgICAgPC9TQ01TU2hhcmVkRW1wdHlTdGF0ZVJvb3Q+XG4gICAgICApXG4gICAgfVxuXG4gICAgaWYgKHNlYXJjaFF1ZXJ5KSB7XG4gICAgICByZXR1cm4gcmVuZGVyU2VhcmNoRW1wdHlTdGF0ZSgpXG4gICAgfVxuXG4gICAgcmV0dXJuIChcbiAgICAgIDxTQ01TU2hhcmVkRW1wdHlTdGF0ZVJvb3Q+XG4gICAgICAgIDxTQ01TU2hhcmVkRW1wdHlTdGF0ZVRpdGxlQmxvY2s+XG4gICAgICAgICAgPFNDTVNTaGFyZWRFbXB0eVN0YXRlVGl0bGU+e3QoJ215U2tpbGxzLmVtcHR5U3RhdGVUaXRsZScpfTwvU0NNU1NoYXJlZEVtcHR5U3RhdGVUaXRsZT5cbiAgICAgICAgICA8U0NNU1NoYXJlZEVtcHR5U3RhdGVTdWJ0aXRsZT57dCgnbXlTa2lsbHMuZW1wdHlTdGF0ZURlc2NyaXB0aW9uJyl9PC9TQ01TU2hhcmVkRW1wdHlTdGF0ZVN1YnRpdGxlPlxuICAgICAgICA8L1NDTVNTaGFyZWRFbXB0eVN0YXRlVGl0bGVCbG9jaz5cbiAgICAgICAge3JlbmRlckNyZWF0ZVNraWxsQnV0dG9uKCl9XG4gICAgICA8L1NDTVNTaGFyZWRFbXB0eVN0YXRlUm9vdD5cbiAgICApXG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxTQ01TQ29udGFpbmVyPlxuICAgICAgPFNDTVNCb2R5PlxuICAgICAgICA8U0NNU1RpdGxlQmxvY2s+XG4gICAgICAgICAgPFNDTVNUaXRsZT57dCgnbXlTa2lsbHMudGl0bGUnKX08L1NDTVNUaXRsZT5cbiAgICAgICAgPC9TQ01TVGl0bGVCbG9jaz5cblxuICAgICAgICA8U0NNU1BhbmVsPlxuICAgICAgICAgIDxTQ01TUGFuZWxIZWFkZXI+XG4gICAgICAgICAgICA8U0NNU1RhYkJhcj5cbiAgICAgICAgICAgICAgPFNDTVNUYWJCdXR0b24gdHlwZT1cImJ1dHRvblwiICRhY3RpdmU9e2lzTWluZVRhYn0gb25DbGljaz17KCkgPT4gc2V0QWN0aXZlVGFiKCdtaW5lJyl9PlxuICAgICAgICAgICAgICAgIHt0KCdteVNraWxscy50YWJNeVNraWxscycpfVxuICAgICAgICAgICAgICA8L1NDTVNUYWJCdXR0b24+XG4gICAgICAgICAgICAgIDxTQ01TVGFiQnV0dG9uIHR5cGU9XCJidXR0b25cIiAkYWN0aXZlPXshaXNNaW5lVGFifSBvbkNsaWNrPXsoKSA9PiBzZXRBY3RpdmVUYWIoJ3NoYXJlZCcpfT5cbiAgICAgICAgICAgICAgICB7dCgnbXlTa2lsbHMudGFiU2hhcmVkU2tpbGxzJyl9XG4gICAgICAgICAgICAgIDwvU0NNU1RhYkJ1dHRvbj5cbiAgICAgICAgICAgIDwvU0NNU1RhYkJhcj5cblxuICAgICAgICAgICAge3Nob3dTa2lsbHNUb29sYmFyID8gKFxuICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgIDxTQ01TTWV0YVJvdz5cbiAgICAgICAgICAgICAgICAgIDxTQ01TTWV0YURlc2NyaXB0aW9uPnt0YWJEZXNjcmlwdGlvbn08L1NDTVNNZXRhRGVzY3JpcHRpb24+XG4gICAgICAgICAgICAgICAgICB7aXNNaW5lVGFiID8gcmVuZGVyQ3JlYXRlU2tpbGxCdXR0b24oKSA6IG51bGx9XG4gICAgICAgICAgICAgICAgPC9TQ01TTWV0YVJvdz5cblxuICAgICAgICAgICAgICAgIDxTa2lsbFNlYXJjaElucHV0IG9uU2VhcmNoPXtzZXRTZWFyY2hRdWVyeX0gcGxhY2Vob2xkZXI9e3QoJ215U2tpbGxzLnNlYXJjaFBsYWNlaG9sZGVyJyl9IC8+XG4gICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAgPC9TQ01TUGFuZWxIZWFkZXI+XG5cbiAgICAgICAgICA8U0NNU0xpc3RTY3JvbGxBcmVhIHJlZj17bGlzdFNjcm9sbFJlZn0+XG4gICAgICAgICAgICB7bG9hZGluZyA/IChcbiAgICAgICAgICAgICAgPFNDTVNMb2FkV3JhcHBlcj5cbiAgICAgICAgICAgICAgICA8TG9hZGVyIHNpemU9XCJzbWFsbFwiIC8+XG4gICAgICAgICAgICAgIDwvU0NNU0xvYWRXcmFwcGVyPlxuICAgICAgICAgICAgKSA6IG51bGx9XG5cbiAgICAgICAgICAgIHshbG9hZGluZyAmJiBmaWx0ZXJlZFNraWxscy5sZW5ndGggPyAoXG4gICAgICAgICAgICAgIDxTQ01TQ2FyZHNMaXN0PlxuICAgICAgICAgICAgICAgIHtmaWx0ZXJlZFNraWxscy5tYXAoKHNraWxsLCBpbmRleCkgPT4gKFxuICAgICAgICAgICAgICAgICAgPFNDTVNDYXJkQnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIGtleT17c2tpbGwuaWR9XG4gICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICBkYXRhLXNraWxsLWNhcmQtaWQ9e3NraWxsLmlkfVxuICAgICAgICAgICAgICAgICAgICAkaW5kZXg9e2luZGV4fVxuICAgICAgICAgICAgICAgICAgICAkZWxldmF0ZWQ9e21lbnVPcGVuRm9yU2tpbGxJZCA9PT0gc2tpbGwuaWR9XG4gICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IGhhbmRsZU9wZW5Ta2lsbChza2lsbCwgIWlzTWluZVRhYil9XG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxTQ01TQ2FyZFRvcFJvdz5cbiAgICAgICAgICAgICAgICAgICAgICA8U0NNU0NhcmRUaXRsZU5hbWU+e2Zvcm1hdFNraWxsRGlzcGxheU5hbWUoc2tpbGwubmFtZSl9PC9TQ01TQ2FyZFRpdGxlTmFtZT5cbiAgICAgICAgICAgICAgICAgICAgICB7aXNNaW5lVGFiID8gKFxuICAgICAgICAgICAgICAgICAgICAgICAgPFNDTVNLZWJhYkJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgJHZpc2libGU9e21lbnVPcGVuRm9yU2tpbGxJZCA9PT0gc2tpbGwuaWR9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGFyaWEtbGFiZWw9e3QoJ215U2tpbGxzLmNhcmRNZW51QXJpYUxhYmVsJyl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9e2V2ZW50ID0+IGhhbmRsZVRvZ2dsZUNhcmRNZW51KGV2ZW50LCBza2lsbC5pZCl9XG4gICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxNZW51RG90cyBjb2xvcj1cIiM4MDgwODBcIiB3aWR0aD17MjB9IGhlaWdodD17MjB9IC8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L1NDTVNLZWJhYkJ1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICAgICAgICAgICAgPC9TQ01TQ2FyZFRvcFJvdz5cbiAgICAgICAgICAgICAgICAgICAgPFNDTVNDYXJkQ29udGVudFRleHQ+e3NraWxsLmRlc2NyaXB0aW9uIHx8IHNraWxsLmNvbnRlbnR9PC9TQ01TQ2FyZENvbnRlbnRUZXh0PlxuICAgICAgICAgICAgICAgICAgICA8U0NNU0NhcmRWaXNpYmlsaXR5Um93PlxuICAgICAgICAgICAgICAgICAgICAgIHtpc01pbmVUYWIgPyAoXG4gICAgICAgICAgICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICAgICAgICAgICB7c2tpbGwuYWNjZXNzX3R5cGUgPT09ICdjb21wYW55JyA/IChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8U2tpbGxWaXNpYmlsaXR5RXZlcnlvbmVJY29uIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPFNraWxsVmlzaWJpbGl0eU9ubHlNZUljb24gLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPFNDTVNDYXJkVmlzaWJpbGl0eVRleHQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3NraWxsLmFjY2Vzc190eXBlID09PSAnY29tcGFueSdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gdCgnbXlTa2lsbHMudmlzaWJpbGl0eUV2ZXJ5b25lJylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogdCgnbXlTa2lsbHMudmlzaWJpbGl0eU9ubHlNZScpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L1NDTVNDYXJkVmlzaWJpbGl0eVRleHQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8Lz5cbiAgICAgICAgICAgICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICAgICAgICAgICAgPFNDTVNDYXJkVmlzaWJpbGl0eVRleHQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHt0KCdteVNraWxscy5zaGFyZWRDcmVhdGVkQnknLCB7IG5hbWU6IHNraWxsLmNyZWF0ZWRfYnlfbmFtZSB8fCAnJyB9KX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvU0NNU0NhcmRWaXNpYmlsaXR5VGV4dD5cbiAgICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgICA8L1NDTVNDYXJkVmlzaWJpbGl0eVJvdz5cbiAgICAgICAgICAgICAgICAgICAge21lbnVPcGVuRm9yU2tpbGxJZCA9PT0gc2tpbGwuaWQgJiYgaXNNaW5lVGFiID8gKFxuICAgICAgICAgICAgICAgICAgICAgIDxTQ01TQ2FyZE1lbnVcbiAgICAgICAgICAgICAgICAgICAgICAgICRwbGFjZW1lbnQ9e2NhcmRNZW51UGxhY2VtZW50fVxuICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17ZXZlbnQgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxTQ01TQ2FyZE1lbnVJdGVtIHR5cGU9XCJidXR0b25cIiBvbkNsaWNrPXsoKSA9PiBoYW5kbGVPcGVuU2tpbGwoc2tpbGwsIGZhbHNlKX0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHt0KCdteVNraWxscy5lZGl0Jyl9XG4gICAgICAgICAgICAgICAgICAgICAgICA8L1NDTVNDYXJkTWVudUl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8U0NNU0NhcmRNZW51SXRlbSB0eXBlPVwiYnV0dG9uXCIgb25DbGljaz17KCkgPT4gc2V0U2tpbGxUb0RlbGV0ZShza2lsbCl9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICB7dCgnbXlTa2lsbHMuZGVsZXRlJyl9XG4gICAgICAgICAgICAgICAgICAgICAgICA8L1NDTVNDYXJkTWVudUl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgPC9TQ01TQ2FyZE1lbnU+XG4gICAgICAgICAgICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICAgICAgICAgICAgPC9TQ01TQ2FyZEJ1dHRvbj5cbiAgICAgICAgICAgICAgICApKX1cbiAgICAgICAgICAgICAgPC9TQ01TQ2FyZHNMaXN0PlxuICAgICAgICAgICAgKSA6IG51bGx9XG5cbiAgICAgICAgICAgIHshbG9hZGluZyAmJiAhZmlsdGVyZWRTa2lsbHMubGVuZ3RoID8gcmVuZGVyRW1wdHlTdGF0ZSgpIDogbnVsbH1cbiAgICAgICAgICA8L1NDTVNMaXN0U2Nyb2xsQXJlYT5cbiAgICAgICAgPC9TQ01TUGFuZWw+XG4gICAgICA8L1NDTVNCb2R5PlxuXG4gICAgICB7ZGVsZXRlTW9kYWxDaGF0ID8gKFxuICAgICAgICA8RGVsZXRlUXVlc3Rpb25Nb2RhbFxuICAgICAgICAgIG9uQ2xvc2U9eygpID0+IHNldFNraWxsVG9EZWxldGUobnVsbCl9XG4gICAgICAgICAgaGFuZGxlcnM9e3tcbiAgICAgICAgICAgIGhhbmRsZUNvbmZpcm1BY3Rpb246IGhhbmRsZUNvbmZpcm1EZWxldGUsXG4gICAgICAgICAgfX1cbiAgICAgICAgICBjaGF0PXtkZWxldGVNb2RhbENoYXR9XG4gICAgICAgICAgYWN0aW9uPVwic2tpbGxcIlxuICAgICAgICAvPlxuICAgICAgKSA6IG51bGx9XG4gICAgPC9TQ01TQ29udGFpbmVyPlxuICApXG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxPQUFPQSxLQUFLLElBQUlDLFdBQVcsRUFBRUMsU0FBUyxFQUFFQyxPQUFPLEVBQUVDLE1BQU0sRUFBRUMsUUFBUSxRQUFRLE9BQU87QUFDaEYsU0FBU0MsUUFBUSxRQUFRLDJDQUEyQztBQUNwRSxTQUFTQyxNQUFNLFFBQVEseUNBQXlDO0FBQ2hFLFNBQVNDLGNBQWMsUUFBUSxlQUFlO0FBRTlDLFNBQVNDLFdBQVcsUUFBUSwyQ0FBMkM7QUFDdkUsU0FBU0Msa0JBQWtCLFFBQVEsc0RBQXNEO0FBQ3pGLFNBQVNDLG1CQUFtQixRQUFRLHlEQUF5RDtBQUM3RixTQUFTQyxRQUFRLFFBQVEsMkJBQTJCO0FBQ3BELFNBQVNDLE1BQU0sUUFBUSxvQkFBb0I7QUFDM0MsU0FBU0MsMkJBQTJCLFFBQVEsK0NBQStDO0FBQzNGLFNBQVNDLHlCQUF5QixRQUFRLDZDQUE2QztBQUN2RixTQUNFQyxRQUFRLEVBQ1JDLGNBQWMsRUFDZEMsbUJBQW1CLEVBQ25CQyxZQUFZLEVBQ1pDLGdCQUFnQixFQUNoQkMsaUJBQWlCLEVBQ2pCQyxjQUFjLEVBQ2RDLHFCQUFxQixFQUNyQkMsc0JBQXNCLEVBQ3RCQyxhQUFhLEVBQ2JDLGFBQWEsRUFDYkMsZ0JBQWdCLEVBQ2hCQyxvQkFBb0IsRUFDcEJDLHdCQUF3QixFQUN4QkMsNEJBQTRCLEVBQzVCQyx5QkFBeUIsRUFDekJDLDhCQUE4QixFQUM5QkMsZUFBZSxFQUNmQyxlQUFlLEVBQ2ZDLG1CQUFtQixFQUNuQkMsV0FBVyxFQUNYQyxTQUFTLEVBQ1RDLGVBQWUsRUFDZkMsa0JBQWtCLEVBQ2xCQyxlQUFlLEVBQ2ZDLGlCQUFpQixFQUNqQkMsVUFBVSxFQUNWQyxhQUFhLEVBQ2JDLFNBQVMsRUFDVEMsY0FBYyxRQUNULHlCQUF5QjtBQUFBLFNBQUFDLEdBQUEsSUFBQUMsSUFBQSxFQUFBQyxJQUFBLElBQUFDLEtBQUEsRUFBQUMsUUFBQSxJQUFBQyxTQUFBO0FBZWhDLElBQU1DLGVBQWUsR0FBRyxDQUFDO0FBQ3pCLElBQU1DLG1CQUFtQixHQUFHLEVBQUU7QUFFOUIsSUFBTUMsd0JBQXdCLEdBQUcsU0FBM0JBLHdCQUF3QkEsQ0FBSUMsTUFBbUIsRUFBRUMsY0FBc0IsRUFBd0I7RUFDbkcsSUFBTUMsSUFBSSxHQUFHRixNQUFNLENBQUNHLHFCQUFxQixDQUFDLENBQUM7RUFDM0MsSUFBTUMsVUFBVSxHQUFHQyxNQUFNLENBQUNDLFdBQVcsR0FBR0osSUFBSSxDQUFDSyxNQUFNLEdBQUdWLGVBQWU7RUFDckUsSUFBTVcsVUFBVSxHQUFHTixJQUFJLENBQUNPLEdBQUcsR0FBR1osZUFBZTtFQUU3QyxJQUFJTyxVQUFVLElBQUlILGNBQWMsRUFBRSxPQUFPLFFBQVE7RUFDakQsSUFBSU8sVUFBVSxJQUFJUCxjQUFjLEVBQUUsT0FBTyxLQUFLO0VBQzlDLE9BQU9HLFVBQVUsSUFBSUksVUFBVSxHQUFHLFFBQVEsR0FBRyxLQUFLO0FBQ3BELENBQUM7QUFFRCxJQUFNRSxzQkFBc0IsR0FBRyxTQUF6QkEsc0JBQXNCQSxDQUFJQyxJQUFZLEVBQUs7RUFDL0MsSUFBTUMsVUFBVSxHQUFHRCxJQUFJLENBQUNFLE9BQU8sQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDO0VBQy9DLFdBQUFDLE1BQUEsQ0FBV0YsVUFBVTtBQUN2QixDQUFDO0FBRUQsSUFBTUcsY0FBYyxHQUFHLFNBQWpCQSxjQUFjQSxDQUFJQyxNQWF2QixFQUFLO0VBQ0pDLFFBQVEsQ0FBQ0MsYUFBYSxDQUNwQixJQUFJQyxXQUFXLENBQUMsNEJBQTRCLEVBQUU7SUFDNUNDLE1BQU0sRUFBRTtNQUNOQyxXQUFXLEVBQUU7UUFDWEwsTUFBTSxFQUFOQSxNQUFNO1FBQ05NLE1BQU0sRUFBRTtNQUNWO0lBQ0Y7RUFDRixDQUFDLENBQ0gsQ0FBQztBQUNILENBQUM7QUFFRCxJQUFNQyxnQkFBZ0IsZ0JBQUc5RSxLQUFLLENBQUMrRSxJQUFJLENBQ2pDLFVBQUFDLElBQUEsRUFBMkY7RUFBQSxJQUF4RkMsUUFBUSxHQUFBRCxJQUFBLENBQVJDLFFBQVE7SUFBRUMsV0FBVyxHQUFBRixJQUFBLENBQVhFLFdBQVc7RUFDdEIsSUFBQUMsU0FBQSxHQUEwQjlFLFFBQVEsQ0FBQyxFQUFFLENBQUM7SUFBQStFLFVBQUEsR0FBQUMsY0FBQSxDQUFBRixTQUFBO0lBQS9CRyxLQUFLLEdBQUFGLFVBQUE7SUFBRUcsUUFBUSxHQUFBSCxVQUFBO0VBQ3RCLElBQU1JLFdBQVcsR0FBR3BGLE1BQU0sQ0FBdUMsSUFBSSxDQUFDO0VBRXRFLElBQU1xRixZQUFZLEdBQUd4RixXQUFXLENBQzlCLFVBQUN5RixLQUEwQyxFQUFLO0lBQzlDLElBQU1DLFNBQVMsR0FBR0QsS0FBSyxDQUFDRSxNQUFNLENBQUNOLEtBQUs7SUFDcENDLFFBQVEsQ0FBQ0ksU0FBUyxDQUFDO0lBQ25CLElBQUlILFdBQVcsQ0FBQ0ssT0FBTyxFQUFFQyxZQUFZLENBQUNOLFdBQVcsQ0FBQ0ssT0FBTyxDQUFDO0lBQzFETCxXQUFXLENBQUNLLE9BQU8sR0FBR0UsVUFBVSxDQUFDLFlBQU07TUFDckNkLFFBQVEsQ0FBQ1UsU0FBUyxDQUFDSyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQzVCLENBQUMsRUFBRSxHQUFHLENBQUM7RUFDVCxDQUFDLEVBQ0QsQ0FBQ2YsUUFBUSxDQUNYLENBQUM7RUFFRC9FLFNBQVMsQ0FDUDtJQUFBLE9BQU0sWUFBTTtNQUNWLElBQUlzRixXQUFXLENBQUNLLE9BQU8sRUFBRUMsWUFBWSxDQUFDTixXQUFXLENBQUNLLE9BQU8sQ0FBQztJQUM1RCxDQUFDO0VBQUEsR0FDRCxFQUNGLENBQUM7RUFFRCxvQkFDRTVDLEtBQUEsQ0FBQ1IsaUJBQWlCO0lBQUF3RCxRQUFBLGdCQUNoQmxELElBQUEsQ0FBQ3hDLE1BQU07TUFBQzJGLEtBQUssRUFBRSxFQUFHO01BQUNDLE1BQU0sRUFBRSxFQUFHO01BQUNDLEtBQUssRUFBQztJQUFNLENBQUUsQ0FBQyxlQUM5Q3JELElBQUEsQ0FBQ1AsZUFBZTtNQUFDNkQsSUFBSSxFQUFDLE1BQU07TUFBQ2YsS0FBSyxFQUFFQSxLQUFNO01BQUNnQixRQUFRLEVBQUViLFlBQWE7TUFBQ1AsV0FBVyxFQUFFQTtJQUFZLENBQUUsQ0FBQztFQUFBLENBQzlFLENBQUM7QUFFeEIsQ0FDRixDQUFDO0FBRUQsT0FBTyxJQUFNcUIsY0FBYyxHQUFHLFNBQWpCQSxjQUFjQSxDQUFBQyxLQUFBLEVBQXdGO0VBQUEsSUFBbEZDLFFBQVEsR0FBQUQsS0FBQSxDQUFSQyxRQUFRO0lBQUVDLFlBQVksR0FBQUYsS0FBQSxDQUFaRSxZQUFZO0lBQUFDLGFBQUEsR0FBQUgsS0FBQSxDQUFFSSxPQUFPO0lBQVBBLE9BQU8sR0FBQUQsYUFBQSxjQUFHLEtBQUssR0FBQUEsYUFBQTtJQUFFRSxhQUFhLEdBQUFMLEtBQUEsQ0FBYkssYUFBYTtFQUNyRixJQUFBQyxlQUFBLEdBQWN0RyxjQUFjLENBQUMsQ0FBQ0ksUUFBUSxDQUFDbUcsTUFBTSxDQUFDLENBQUM7SUFBdkNDLENBQUMsR0FBQUYsZUFBQSxDQUFERSxDQUFDO0VBQ1QsSUFBQUMsbUJBQUEsR0FBdUR2RyxrQkFBa0IsQ0FBQyxDQUFDO0lBQW5Fd0cscUJBQXFCLEdBQUFELG1CQUFBLENBQXJCQyxxQkFBcUI7SUFBRUMsbUJBQW1CLEdBQUFGLG1CQUFBLENBQW5CRSxtQkFBbUI7RUFDbEQsSUFBTUMsYUFBYSxHQUFHaEgsTUFBTSxDQUFpQixJQUFJLENBQUM7RUFDbEQsSUFBQWlILFVBQUEsR0FBa0NoSCxRQUFRLENBQVksTUFBTSxDQUFDO0lBQUFpSCxVQUFBLEdBQUFqQyxjQUFBLENBQUFnQyxVQUFBO0lBQXRERSxTQUFTLEdBQUFELFVBQUE7SUFBRUUsWUFBWSxHQUFBRixVQUFBO0VBQzlCLElBQUFHLFVBQUEsR0FBc0NwSCxRQUFRLENBQUMsRUFBRSxDQUFDO0lBQUFxSCxVQUFBLEdBQUFyQyxjQUFBLENBQUFvQyxVQUFBO0lBQTNDRSxXQUFXLEdBQUFELFVBQUE7SUFBRUUsY0FBYyxHQUFBRixVQUFBO0VBQ2xDLElBQUFHLFVBQUEsR0FBb0R4SCxRQUFRLENBQWdCLElBQUksQ0FBQztJQUFBeUgsVUFBQSxHQUFBekMsY0FBQSxDQUFBd0MsVUFBQTtJQUExRUUsa0JBQWtCLEdBQUFELFVBQUE7SUFBRUUscUJBQXFCLEdBQUFGLFVBQUE7RUFDaEQsSUFBQUcsVUFBQSxHQUFrRDVILFFBQVEsQ0FBb0IsUUFBUSxDQUFDO0lBQUE2SCxVQUFBLEdBQUE3QyxjQUFBLENBQUE0QyxVQUFBO0lBQWhGRSxpQkFBaUIsR0FBQUQsVUFBQTtJQUFFRSxvQkFBb0IsR0FBQUYsVUFBQTtFQUM5QyxJQUFBRyxVQUFBLEdBQTBDaEksUUFBUSxDQUFlLElBQUksQ0FBQztJQUFBaUksV0FBQSxHQUFBakQsY0FBQSxDQUFBZ0QsVUFBQTtJQUEvREUsYUFBYSxHQUFBRCxXQUFBO0lBQUVFLGdCQUFnQixHQUFBRixXQUFBO0VBQ3RDLElBQU1HLFNBQVMsR0FBR2xCLFNBQVMsS0FBSyxNQUFNO0VBRXRDLElBQU1tQixTQUFTLEdBQUdELFNBQVMsR0FBR2hDLFFBQVEsR0FBR0MsWUFBWTtFQUVyRCxJQUFNaUMsY0FBYyxHQUFHeEksT0FBTyxDQUFDLFlBQU07SUFDbkMsSUFBTXlJLGVBQWUsR0FBR2pCLFdBQVcsQ0FBQ2tCLFdBQVcsQ0FBQyxDQUFDO0lBQ2pELElBQU1DLE9BQU8sR0FBR0YsZUFBZSxHQUMzQkYsU0FBUyxDQUFDSyxNQUFNLENBQUMsVUFBQUMsS0FBSztNQUFBLE9BQUlBLEtBQUssQ0FBQzlFLElBQUksQ0FBQzJFLFdBQVcsQ0FBQyxDQUFDLENBQUNJLFFBQVEsQ0FBQ0wsZUFBZSxDQUFDO0lBQUEsRUFBQyxHQUM3RUYsU0FBUztJQUNiLE9BQU9RLGtCQUFBLENBQUlKLE9BQU8sRUFBRUssSUFBSSxDQUFDLFVBQUNDLENBQUMsRUFBRUMsQ0FBQztNQUFBLE9BQUtELENBQUMsQ0FBQ2xGLElBQUksQ0FBQ29GLGFBQWEsQ0FBQ0QsQ0FBQyxDQUFDbkYsSUFBSSxDQUFDO0lBQUEsRUFBQztFQUNsRSxDQUFDLEVBQUUsQ0FBQ3lELFdBQVcsRUFBRWUsU0FBUyxDQUFDLENBQUM7RUFFNUIsSUFBTWEsaUJBQWlCLEdBQUd0SixXQUFXLENBQUMsWUFBTTtJQUMxQ3FFLGNBQWMsQ0FBQztNQUFFa0YsU0FBUyxFQUFFLEtBQUs7TUFBRUMsTUFBTSxFQUFFO0lBQVEsQ0FBQyxDQUFDO0VBQ3ZELENBQUMsRUFBRSxFQUFFLENBQUM7RUFFTixJQUFNQyxvQkFBb0IsR0FBR3pKLFdBQVcsQ0FBQyxVQUFDeUYsS0FBMEMsRUFBRWlFLE9BQWUsRUFBSztJQUN4R2pFLEtBQUssQ0FBQ2tFLGNBQWMsQ0FBQyxDQUFDO0lBQ3RCbEUsS0FBSyxDQUFDbUUsZUFBZSxDQUFDLENBQUM7SUFDdkIsSUFBTUMsVUFBVSxHQUFHcEUsS0FBSyxDQUFDcUUsYUFBYSxDQUFDQyxPQUFPLENBQUMsc0JBQXNCLENBQUM7SUFDdEUsSUFBSUYsVUFBVSxZQUFZRyxXQUFXLEVBQUU7TUFDckM3QixvQkFBb0IsQ0FBQzlFLHdCQUF3QixDQUFDd0csVUFBVSxFQUFFekcsbUJBQW1CLENBQUMsQ0FBQztJQUNqRjtJQUNBMkUscUJBQXFCLENBQUMsVUFBQWtDLElBQUk7TUFBQSxPQUFLQSxJQUFJLEtBQUtQLE9BQU8sR0FBRyxJQUFJLEdBQUdBLE9BQU87SUFBQSxDQUFDLENBQUM7RUFDcEUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztFQUVOLElBQU1RLGVBQWUsR0FBR2xLLFdBQVcsQ0FBQyxVQUFDK0ksS0FBWSxFQUFFb0IsVUFBbUIsRUFBSztJQUN6RTlGLGNBQWMsQ0FBQztNQUNia0YsU0FBUyxFQUFFLElBQUk7TUFDZlksVUFBVSxFQUFWQSxVQUFVO01BQ1ZDLE9BQU8sRUFBRTtRQUNQQyxFQUFFLEVBQUV0QixLQUFLLENBQUNzQixFQUFFO1FBQ1pwRyxJQUFJLEVBQUU4RSxLQUFLLENBQUM5RSxJQUFJO1FBQ2hCcUcsV0FBVyxFQUFFdkIsS0FBSyxDQUFDdUIsV0FBVztRQUM5QkMsT0FBTyxFQUFFeEIsS0FBSyxDQUFDd0IsT0FBTztRQUN0QkMsV0FBVyxFQUFFekIsS0FBSyxDQUFDeUIsV0FBVztRQUM5QkMsZUFBZSxFQUFFMUIsS0FBSyxDQUFDMEIsZUFBZTtRQUN0Q0MsVUFBVSxFQUFFM0IsS0FBSyxDQUFDMkI7TUFDcEI7SUFDRixDQUFDLENBQUM7SUFDRjNDLHFCQUFxQixDQUFDLElBQUksQ0FBQztFQUM3QixDQUFDLEVBQUUsRUFBRSxDQUFDO0VBRU4sSUFBTTRDLGVBQWUsR0FBR3pLLE9BQU8sQ0FDN0I7SUFBQSxPQUFPb0ksYUFBYSxHQUFHO01BQUVzQyxLQUFLLEVBQUV0QyxhQUFhLENBQUNyRSxJQUFJO01BQUVvRyxFQUFFLEVBQUUvQixhQUFhLENBQUMrQjtJQUFHLENBQUMsR0FBRyxJQUFJO0VBQUEsQ0FBQyxFQUNsRixDQUFDL0IsYUFBYSxDQUNoQixDQUFDO0VBRUQsSUFBTXVDLG1CQUFtQjtJQUFBLElBQUFDLEtBQUEsR0FBQUMsaUJBQUEsY0FBQUMsbUJBQUEsQ0FBQUMsSUFBQSxDQUFHLFNBQUFDLFFBQU9DLElBQW9CO01BQUEsSUFBQUMsRUFBQTtNQUFBLE9BQUFKLG1CQUFBLENBQUFLLElBQUEsV0FBQUMsUUFBQTtRQUFBLGtCQUFBQSxRQUFBLENBQUFyQixJQUFBLEdBQUFxQixRQUFBLENBQUFDLElBQUE7VUFBQTtZQUFBRCxRQUFBLENBQUFyQixJQUFBO1lBQUFxQixRQUFBLENBQUFDLElBQUE7WUFBQSxPQUU3Qy9LLFdBQVcsQ0FBQzJLLElBQUksQ0FBQ2QsRUFBRSxDQUFDO1VBQUE7WUFDMUJwRCxxQkFBcUIsQ0FBQ0YsQ0FBQyxDQUFDLHdCQUF3QixDQUFDLENBQUM7WUFDbERILGFBQWEsYUFBYkEsYUFBYSxlQUFiQSxhQUFhLENBQUd1RSxJQUFJLENBQUNkLEVBQUUsQ0FBQztZQUN4QjlCLGdCQUFnQixDQUFDLElBQUksQ0FBQztZQUN0QlIscUJBQXFCLENBQUMsSUFBSSxDQUFDO1lBQUF1RCxRQUFBLENBQUFDLElBQUE7WUFBQTtVQUFBO1lBQUFELFFBQUEsQ0FBQXJCLElBQUE7WUFBQW1CLEVBQUEsR0FBQUUsUUFBQTtZQUUzQnBFLG1CQUFtQixDQUFDSCxDQUFDLENBQUMsc0JBQXNCLENBQUMsQ0FBQztVQUFBO1VBQUE7WUFBQSxPQUFBdUUsUUFBQSxDQUFBRSxJQUFBO1FBQUE7TUFBQSxHQUFBTixPQUFBO0lBQUEsQ0FFakQ7SUFBQSxnQkFWS0wsbUJBQW1CQSxDQUFBWSxFQUFBO01BQUEsT0FBQVgsS0FBQSxDQUFBWSxLQUFBLE9BQUFDLFNBQUE7SUFBQTtFQUFBLEdBVXhCO0VBRUQxTCxTQUFTLENBQUMsWUFBTTtJQUNkLElBQU0yTCxrQkFBa0IsR0FBRyxTQUFyQkEsa0JBQWtCQSxDQUFBLEVBQVM7TUFDL0IsSUFBSTlELGtCQUFrQixFQUFFO1FBQ3RCQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUM7TUFDN0I7SUFDRixDQUFDO0lBRUR4RCxRQUFRLENBQUNzSCxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUVELGtCQUFrQixDQUFDO0lBQ3RELE9BQU8sWUFBTTtNQUNYckgsUUFBUSxDQUFDdUgsbUJBQW1CLENBQUMsT0FBTyxFQUFFRixrQkFBa0IsQ0FBQztJQUMzRCxDQUFDO0VBQ0gsQ0FBQyxFQUFFLENBQUM5RCxrQkFBa0IsQ0FBQyxDQUFDO0VBRXhCN0gsU0FBUyxDQUFDLFlBQU07SUFDZCxJQUFJLENBQUM2SCxrQkFBa0IsRUFBRSxPQUFPaUUsU0FBUztJQUV6QyxJQUFNQyxnQkFBZ0IsR0FBRyxTQUFuQkEsZ0JBQWdCQSxDQUFBLEVBQVM7TUFBQSxJQUFBQyxxQkFBQTtNQUM3QixJQUFNQyxRQUFRLElBQUFELHFCQUFBLEdBQUc5RSxhQUFhLENBQUN2QixPQUFPLGNBQUFxRyxxQkFBQSx1QkFBckJBLHFCQUFBLENBQXVCRSxhQUFhLDBCQUFBL0gsTUFBQSxDQUMzQjBELGtCQUFrQixRQUM1QyxDQUFDO01BQ0QsSUFBSW9FLFFBQVEsRUFBRTtRQUNaL0Qsb0JBQW9CLENBQUM5RSx3QkFBd0IsQ0FBQzZJLFFBQVEsRUFBRTlJLG1CQUFtQixDQUFDLENBQUM7TUFDL0U7SUFDRixDQUFDO0lBRUQsSUFBTWdKLGVBQWUsR0FBR2pGLGFBQWEsQ0FBQ3ZCLE9BQU87SUFDN0N3RyxlQUFlLGFBQWZBLGVBQWUsZUFBZkEsZUFBZSxDQUFFUCxnQkFBZ0IsQ0FBQyxRQUFRLEVBQUVHLGdCQUFnQixFQUFFO01BQUVLLE9BQU8sRUFBRTtJQUFLLENBQUMsQ0FBQztJQUNoRjFJLE1BQU0sQ0FBQ2tJLGdCQUFnQixDQUFDLFFBQVEsRUFBRUcsZ0JBQWdCLENBQUM7SUFFbkQsT0FBTyxZQUFNO01BQ1hJLGVBQWUsYUFBZkEsZUFBZSxlQUFmQSxlQUFlLENBQUVOLG1CQUFtQixDQUFDLFFBQVEsRUFBRUUsZ0JBQWdCLENBQUM7TUFDaEVySSxNQUFNLENBQUNtSSxtQkFBbUIsQ0FBQyxRQUFRLEVBQUVFLGdCQUFnQixDQUFDO0lBQ3hELENBQUM7RUFDSCxDQUFDLEVBQUUsQ0FBQ2xFLGtCQUFrQixDQUFDLENBQUM7RUFFeEIsSUFBTXdFLGNBQWMsR0FBRzlELFNBQVMsR0FBR3pCLENBQUMsQ0FBQyw4QkFBOEIsQ0FBQyxHQUFHQSxDQUFDLENBQUMsa0NBQWtDLENBQUM7RUFFNUcsSUFBTXdGLFdBQVcsR0FBRy9ELFNBQVMsSUFBSSxDQUFDN0IsT0FBTyxJQUFJSCxRQUFRLENBQUNnRyxNQUFNLEtBQUssQ0FBQyxJQUFJLENBQUM5RSxXQUFXO0VBQ2xGLElBQU0rRSxpQkFBaUIsR0FBR2pFLFNBQVMsR0FBRyxDQUFDK0QsV0FBVyxHQUFHOUQsU0FBUyxDQUFDK0QsTUFBTSxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM5RSxXQUFXO0VBRTFGLElBQU1nRix1QkFBdUIsR0FBRyxTQUExQkEsdUJBQXVCQSxDQUFBO0lBQUEsb0JBQzNCNUosSUFBQSxDQUFDcEIsZ0JBQWdCO01BQUMwRSxJQUFJLEVBQUMsUUFBUTtNQUFDdUcsT0FBTyxFQUFFckQsaUJBQWtCO01BQUF0RCxRQUFBLGVBQ3pEbEQsSUFBQSxDQUFDbkIsb0JBQW9CO1FBQUFxRSxRQUFBLEVBQUVlLENBQUMsQ0FBQyxzQkFBc0I7TUFBQyxDQUF1QjtJQUFDLENBQ3hELENBQUM7RUFBQSxDQUNwQjtFQUVELElBQU02RixzQkFBc0IsR0FBRyxTQUF6QkEsc0JBQXNCQSxDQUFBO0lBQUEsb0JBQzFCOUosSUFBQSxDQUFDbEIsd0JBQXdCO01BQUFvRSxRQUFBLGVBQ3ZCaEQsS0FBQSxDQUFDakIsOEJBQThCO1FBQUFpRSxRQUFBLGdCQUM3QmxELElBQUEsQ0FBQ2hCLHlCQUF5QjtVQUFBa0UsUUFBQSxFQUFFZSxDQUFDLENBQUMsZ0NBQWdDO1FBQUMsQ0FBNEIsQ0FBQyxlQUM1RmpFLElBQUEsQ0FBQ2pCLDRCQUE0QjtVQUFBbUUsUUFBQSxFQUFFZSxDQUFDLENBQUMsc0NBQXNDO1FBQUMsQ0FBK0IsQ0FBQztNQUFBLENBQzFFO0lBQUMsQ0FDVCxDQUFDO0VBQUEsQ0FDNUI7RUFFRCxJQUFNOEYsZ0JBQWdCLEdBQUcsU0FBbkJBLGdCQUFnQkEsQ0FBQSxFQUFTO0lBQzdCLElBQUksQ0FBQ3JFLFNBQVMsRUFBRTtNQUNkLElBQUlkLFdBQVcsRUFBRTtRQUNmLE9BQU9rRixzQkFBc0IsQ0FBQyxDQUFDO01BQ2pDO01BRUEsb0JBQ0U5SixJQUFBLENBQUNsQix3QkFBd0I7UUFBQW9FLFFBQUEsZUFDdkJoRCxLQUFBLENBQUNqQiw4QkFBOEI7VUFBQWlFLFFBQUEsZ0JBQzdCbEQsSUFBQSxDQUFDaEIseUJBQXlCO1lBQUFrRSxRQUFBLEVBQUVlLENBQUMsQ0FBQyxnQ0FBZ0M7VUFBQyxDQUE0QixDQUFDLGVBQzVGakUsSUFBQSxDQUFDakIsNEJBQTRCO1lBQUFtRSxRQUFBLEVBQUVlLENBQUMsQ0FBQyxzQ0FBc0M7VUFBQyxDQUErQixDQUFDO1FBQUEsQ0FDMUU7TUFBQyxDQUNULENBQUM7SUFFL0I7SUFFQSxJQUFJVyxXQUFXLEVBQUU7TUFDZixPQUFPa0Ysc0JBQXNCLENBQUMsQ0FBQztJQUNqQztJQUVBLG9CQUNFNUosS0FBQSxDQUFDcEIsd0JBQXdCO01BQUFvRSxRQUFBLGdCQUN2QmhELEtBQUEsQ0FBQ2pCLDhCQUE4QjtRQUFBaUUsUUFBQSxnQkFDN0JsRCxJQUFBLENBQUNoQix5QkFBeUI7VUFBQWtFLFFBQUEsRUFBRWUsQ0FBQyxDQUFDLDBCQUEwQjtRQUFDLENBQTRCLENBQUMsZUFDdEZqRSxJQUFBLENBQUNqQiw0QkFBNEI7VUFBQW1FLFFBQUEsRUFBRWUsQ0FBQyxDQUFDLGdDQUFnQztRQUFDLENBQStCLENBQUM7TUFBQSxDQUNwRSxDQUFDLEVBQ2hDMkYsdUJBQXVCLENBQUMsQ0FBQztJQUFBLENBQ0YsQ0FBQztFQUUvQixDQUFDO0VBRUQsb0JBQ0UxSixLQUFBLENBQUN2QixhQUFhO0lBQUF1RSxRQUFBLGdCQUNaaEQsS0FBQSxDQUFDakMsUUFBUTtNQUFBaUYsUUFBQSxnQkFDUGxELElBQUEsQ0FBQ0YsY0FBYztRQUFBb0QsUUFBQSxlQUNibEQsSUFBQSxDQUFDSCxTQUFTO1VBQUFxRCxRQUFBLEVBQUVlLENBQUMsQ0FBQyxnQkFBZ0I7UUFBQyxDQUFZO01BQUMsQ0FDOUIsQ0FBQyxlQUVqQi9ELEtBQUEsQ0FBQ1osU0FBUztRQUFBNEQsUUFBQSxnQkFDUmhELEtBQUEsQ0FBQ1gsZUFBZTtVQUFBMkQsUUFBQSxnQkFDZGhELEtBQUEsQ0FBQ1AsVUFBVTtZQUFBdUQsUUFBQSxnQkFDVGxELElBQUEsQ0FBQ0osYUFBYTtjQUFDMEQsSUFBSSxFQUFDLFFBQVE7Y0FBQzBHLE9BQU8sRUFBRXRFLFNBQVU7Y0FBQ21FLE9BQU8sRUFBRSxTQUFUQSxPQUFPQSxDQUFBO2dCQUFBLE9BQVFwRixZQUFZLENBQUMsTUFBTSxDQUFDO2NBQUEsQ0FBQztjQUFBdkIsUUFBQSxFQUNsRmUsQ0FBQyxDQUFDLHNCQUFzQjtZQUFDLENBQ2IsQ0FBQyxlQUNoQmpFLElBQUEsQ0FBQ0osYUFBYTtjQUFDMEQsSUFBSSxFQUFDLFFBQVE7Y0FBQzBHLE9BQU8sRUFBRSxDQUFDdEUsU0FBVTtjQUFDbUUsT0FBTyxFQUFFLFNBQVRBLE9BQU9BLENBQUE7Z0JBQUEsT0FBUXBGLFlBQVksQ0FBQyxRQUFRLENBQUM7Y0FBQSxDQUFDO2NBQUF2QixRQUFBLEVBQ3JGZSxDQUFDLENBQUMsMEJBQTBCO1lBQUMsQ0FDakIsQ0FBQztVQUFBLENBQ04sQ0FBQyxFQUVaMEYsaUJBQWlCLGdCQUNoQnpKLEtBQUEsQ0FBQUUsU0FBQTtZQUFBOEMsUUFBQSxnQkFDRWhELEtBQUEsQ0FBQ2IsV0FBVztjQUFBNkQsUUFBQSxnQkFDVmxELElBQUEsQ0FBQ1osbUJBQW1CO2dCQUFBOEQsUUFBQSxFQUFFc0c7Y0FBYyxDQUFzQixDQUFDLEVBQzFEOUQsU0FBUyxHQUFHa0UsdUJBQXVCLENBQUMsQ0FBQyxHQUFHLElBQUk7WUFBQSxDQUNsQyxDQUFDLGVBRWQ1SixJQUFBLENBQUMrQixnQkFBZ0I7Y0FBQ0csUUFBUSxFQUFFMkMsY0FBZTtjQUFDMUMsV0FBVyxFQUFFOEIsQ0FBQyxDQUFDLDRCQUE0QjtZQUFFLENBQUUsQ0FBQztVQUFBLENBQzVGLENBQUMsR0FDRCxJQUFJO1FBQUEsQ0FDTyxDQUFDLGVBRWxCL0QsS0FBQSxDQUFDVixrQkFBa0I7VUFBQ3lLLEdBQUcsRUFBRTVGLGFBQWM7VUFBQW5CLFFBQUEsR0FDcENXLE9BQU8sZ0JBQ043RCxJQUFBLENBQUNiLGVBQWU7WUFBQStELFFBQUEsZUFDZGxELElBQUEsQ0FBQ2xDLE1BQU07Y0FBQ29NLElBQUksRUFBQztZQUFPLENBQUU7VUFBQyxDQUNSLENBQUMsR0FDaEIsSUFBSSxFQUVQLENBQUNyRyxPQUFPLElBQUkrQixjQUFjLENBQUM4RCxNQUFNLGdCQUNoQzFKLElBQUEsQ0FBQ3RCLGFBQWE7WUFBQXdFLFFBQUEsRUFDWDBDLGNBQWMsQ0FBQ3VFLEdBQUcsQ0FBQyxVQUFDbEUsS0FBSyxFQUFFbUUsS0FBSztjQUFBLG9CQUMvQmxLLEtBQUEsQ0FBQ2hDLGNBQWM7Z0JBRWJvRixJQUFJLEVBQUMsUUFBUTtnQkFDYixzQkFBb0IyQyxLQUFLLENBQUNzQixFQUFHO2dCQUM3QjhDLE1BQU0sRUFBRUQsS0FBTTtnQkFDZEUsU0FBUyxFQUFFdEYsa0JBQWtCLEtBQUtpQixLQUFLLENBQUNzQixFQUFHO2dCQUMzQ3NDLE9BQU8sRUFBRSxTQUFUQSxPQUFPQSxDQUFBO2tCQUFBLE9BQVF6QyxlQUFlLENBQUNuQixLQUFLLEVBQUUsQ0FBQ1AsU0FBUyxDQUFDO2dCQUFBLENBQUM7Z0JBQUF4QyxRQUFBLGdCQUVsRGhELEtBQUEsQ0FBQzNCLGNBQWM7a0JBQUEyRSxRQUFBLGdCQUNibEQsSUFBQSxDQUFDMUIsaUJBQWlCO29CQUFBNEUsUUFBQSxFQUFFaEMsc0JBQXNCLENBQUMrRSxLQUFLLENBQUM5RSxJQUFJO2tCQUFDLENBQW9CLENBQUMsRUFDMUV1RSxTQUFTLGdCQUNSMUYsSUFBQSxDQUFDZCxlQUFlO29CQUNkb0UsSUFBSSxFQUFDLFFBQVE7b0JBQ2JpSCxRQUFRLEVBQUV2RixrQkFBa0IsS0FBS2lCLEtBQUssQ0FBQ3NCLEVBQUc7b0JBQzFDLGNBQVl0RCxDQUFDLENBQUMsNEJBQTRCLENBQUU7b0JBQzVDNEYsT0FBTyxFQUFFLFNBQVRBLE9BQU9BLENBQUVsSCxLQUFLO3NCQUFBLE9BQUlnRSxvQkFBb0IsQ0FBQ2hFLEtBQUssRUFBRXNELEtBQUssQ0FBQ3NCLEVBQUUsQ0FBQztvQkFBQSxDQUFDO29CQUFBckUsUUFBQSxlQUV4RGxELElBQUEsQ0FBQ3pDLFFBQVE7c0JBQUM4RixLQUFLLEVBQUMsU0FBUztzQkFBQ0YsS0FBSyxFQUFFLEVBQUc7c0JBQUNDLE1BQU0sRUFBRTtvQkFBRyxDQUFFO2tCQUFDLENBQ3BDLENBQUMsR0FDaEIsSUFBSTtnQkFBQSxDQUNNLENBQUMsZUFDakJwRCxJQUFBLENBQUM3QixtQkFBbUI7a0JBQUErRSxRQUFBLEVBQUUrQyxLQUFLLENBQUN1QixXQUFXLElBQUl2QixLQUFLLENBQUN3QjtnQkFBTyxDQUFzQixDQUFDLGVBQy9FekgsSUFBQSxDQUFDeEIscUJBQXFCO2tCQUFBMEUsUUFBQSxFQUNuQndDLFNBQVMsZ0JBQ1J4RixLQUFBLENBQUFFLFNBQUE7b0JBQUE4QyxRQUFBLEdBQ0crQyxLQUFLLENBQUN5QixXQUFXLEtBQUssU0FBUyxnQkFDOUIxSCxJQUFBLENBQUNqQywyQkFBMkIsSUFBRSxDQUFDLGdCQUUvQmlDLElBQUEsQ0FBQ2hDLHlCQUF5QixJQUFFLENBQzdCLGVBQ0RnQyxJQUFBLENBQUN2QixzQkFBc0I7c0JBQUF5RSxRQUFBLEVBQ3BCK0MsS0FBSyxDQUFDeUIsV0FBVyxLQUFLLFNBQVMsR0FDNUJ6RCxDQUFDLENBQUMsNkJBQTZCLENBQUMsR0FDaENBLENBQUMsQ0FBQywyQkFBMkI7b0JBQUMsQ0FDWixDQUFDO2tCQUFBLENBQ3pCLENBQUMsZ0JBRUhqRSxJQUFBLENBQUN2QixzQkFBc0I7b0JBQUF5RSxRQUFBLEVBQ3BCZSxDQUFDLENBQUMsMEJBQTBCLEVBQUU7c0JBQUU5QyxJQUFJLEVBQUU4RSxLQUFLLENBQUMwQixlQUFlLElBQUk7b0JBQUcsQ0FBQztrQkFBQyxDQUMvQztnQkFDekIsQ0FDb0IsQ0FBQyxFQUN2QjNDLGtCQUFrQixLQUFLaUIsS0FBSyxDQUFDc0IsRUFBRSxJQUFJN0IsU0FBUyxnQkFDM0N4RixLQUFBLENBQUM5QixZQUFZO2tCQUNYb00sVUFBVSxFQUFFcEYsaUJBQWtCO2tCQUM5QnlFLE9BQU8sRUFBRSxTQUFUQSxPQUFPQSxDQUFFbEgsS0FBSyxFQUFJO29CQUNoQkEsS0FBSyxDQUFDa0UsY0FBYyxDQUFDLENBQUM7b0JBQ3RCbEUsS0FBSyxDQUFDbUUsZUFBZSxDQUFDLENBQUM7a0JBQ3pCLENBQUU7a0JBQUE1RCxRQUFBLGdCQUVGbEQsSUFBQSxDQUFDM0IsZ0JBQWdCO29CQUFDaUYsSUFBSSxFQUFDLFFBQVE7b0JBQUN1RyxPQUFPLEVBQUUsU0FBVEEsT0FBT0EsQ0FBQTtzQkFBQSxPQUFRekMsZUFBZSxDQUFDbkIsS0FBSyxFQUFFLEtBQUssQ0FBQztvQkFBQSxDQUFDO29CQUFBL0MsUUFBQSxFQUMxRWUsQ0FBQyxDQUFDLGVBQWU7a0JBQUMsQ0FDSCxDQUFDLGVBQ25CakUsSUFBQSxDQUFDM0IsZ0JBQWdCO29CQUFDaUYsSUFBSSxFQUFDLFFBQVE7b0JBQUN1RyxPQUFPLEVBQUUsU0FBVEEsT0FBT0EsQ0FBQTtzQkFBQSxPQUFRcEUsZ0JBQWdCLENBQUNRLEtBQUssQ0FBQztvQkFBQSxDQUFDO29CQUFBL0MsUUFBQSxFQUNwRWUsQ0FBQyxDQUFDLGlCQUFpQjtrQkFBQyxDQUNMLENBQUM7Z0JBQUEsQ0FDUCxDQUFDLEdBQ2IsSUFBSTtjQUFBLEdBeERIZ0MsS0FBSyxDQUFDc0IsRUF5REcsQ0FBQztZQUFBLENBQ2xCO1VBQUMsQ0FDVyxDQUFDLEdBQ2QsSUFBSSxFQUVQLENBQUMxRCxPQUFPLElBQUksQ0FBQytCLGNBQWMsQ0FBQzhELE1BQU0sR0FBR0ssZ0JBQWdCLENBQUMsQ0FBQyxHQUFHLElBQUk7UUFBQSxDQUM3QyxDQUFDO01BQUEsQ0FDWixDQUFDO0lBQUEsQ0FDSixDQUFDLEVBRVZsQyxlQUFlLGdCQUNkN0gsSUFBQSxDQUFDcEMsbUJBQW1CO01BQ2xCNk0sT0FBTyxFQUFFLFNBQVRBLE9BQU9BLENBQUE7UUFBQSxPQUFRaEYsZ0JBQWdCLENBQUMsSUFBSSxDQUFDO01BQUEsQ0FBQztNQUN0Q2lGLFFBQVEsRUFBRTtRQUNSQyxtQkFBbUIsRUFBRTVDO01BQ3ZCLENBQUU7TUFDRk0sSUFBSSxFQUFFUixlQUFnQjtNQUN0QitDLE1BQU0sRUFBQztJQUFPLENBQ2YsQ0FBQyxHQUNBLElBQUk7RUFBQSxDQUNLLENBQUM7QUFFcEIsQ0FBQyIsImlnbm9yZUxpc3QiOltdfQ==