@projectcor/maia-components 2.30.0 → 2.30.1-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 (55) hide show
  1. package/CHANGELOG.md +656 -0
  2. package/lib/components/atoms/ContextMentionChip/buildChipElement.js +12 -1
  3. package/lib/components/atoms/ContextMentionEditor/ContextMentionEditor.js +127 -5
  4. package/lib/components/atoms/ContextMentionItem/ContextMentionItem.js +2 -29
  5. package/lib/components/atoms/ContextMentionItem/ContextMentionItem.styles.js +24 -33
  6. package/lib/components/atoms/ContextMentionPopover/ContextMentionPopover.js +2 -19
  7. package/lib/components/atoms/MAIAInput/MAIAInput.js +192 -17
  8. package/lib/components/atoms/MAIAInput/styles.js +15 -11
  9. package/lib/components/atoms/SkillsDropdown/SkillsDropdown.js +208 -0
  10. package/lib/components/atoms/SkillsDropdown/SkillsDropdown.styles.js +77 -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/SkillCreatedByIcon.js +20 -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 +5 -1
  18. package/lib/components/molecules/AbmSection/AbmAccessibilitySection/AbmAccessibilitySection.js +91 -4
  19. package/lib/components/molecules/ChatAIContent/ChatAIContent.js +5 -3
  20. package/lib/components/molecules/ChatAIModal/ChatAIModal.js +49 -12
  21. package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.js +10 -5
  22. package/lib/components/molecules/ChatAIMySkills/ChatAIMySkills.js +312 -239
  23. package/lib/components/molecules/ChatAIMySkills/ChatAIMySkills.styles.js +128 -104
  24. package/lib/components/molecules/ContextMentionInput/ContextMentionInput.js +1 -3
  25. package/lib/components/molecules/Sidebar/Sidebar.js +5 -4
  26. package/lib/components/molecules/Sidebar/Sidebar.layout.styles.js +2 -2
  27. package/lib/components/organisms/AbmAgentModal/AbmAgentModal.js +34 -5
  28. package/lib/components/organisms/AbmSkillGenerateModal/AbmSkillGenerateModal.js +8 -1
  29. package/lib/components/organisms/AbmSkillModal/AbmSkillModal.js +338 -185
  30. package/lib/components/organisms/AbmSkillModal/AbmSkillModal.styles.js +122 -66
  31. package/lib/constants/config.js +1 -4
  32. package/lib/constants/permissions/utils.js +3 -3
  33. package/lib/hooks/useAgentModel/useCreateAgent.js +61 -14
  34. package/lib/hooks/useAgentModel/useUpdateAgent.js +58 -11
  35. package/lib/hooks/useContextMentions.js +93 -56
  36. package/lib/hooks/useEntitySearch.js +92 -278
  37. package/lib/hooks/useEvent.js +2 -1
  38. package/lib/hooks/useMentionAllowedTypes.js +9 -25
  39. package/lib/hooks/useMentionPopover.js +9 -33
  40. package/lib/hooks/useSkillsCatalog.js +66 -0
  41. package/lib/lang/br/index.js +41 -9
  42. package/lib/lang/en/index.js +41 -9
  43. package/lib/lang/es/index.js +42 -10
  44. package/lib/lang/fr/index.js +41 -9
  45. package/lib/services/maia/Agents/connectors.js +250 -0
  46. package/lib/services/maia/Skills/createSkill.js +1 -1
  47. package/lib/services/maia/Skills/getSkills.js +70 -40
  48. package/lib/services/maia/Skills/updateSkill.js +1 -1
  49. package/lib/types/agentModal.js +1 -1
  50. package/lib/types/skill.js +1 -1
  51. package/lib/utils/contextMentionTriggers.js +2 -5
  52. package/lib/utils/normalizeAgentConnectors.js +28 -3
  53. package/lib/utils/renderContextMentions.js +39 -18
  54. package/package.json +1 -1
  55. package/README.md +0 -2
@@ -5,32 +5,49 @@ import _regeneratorRuntime from "@babel/runtime/regenerator";
5
5
  function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
6
6
  function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
7
7
  /* eslint-disable @typescript-eslint/no-explicit-any */
8
- import { useCallback, useEffect, useRef, useState } from 'react';
8
+ import { useCallback, useEffect, useMemo, useRef, useState } from 'react';
9
9
  import { createPortal } from 'react-dom';
10
10
  import { Cross } from '@projectcor/icons/lib/components/Cross';
11
+ import { FileUpload } from '@projectcor/icons/lib/components/FileUpload';
11
12
  import { useTranslation } from 'react-i18next';
12
- import { MaiaStreamdown } from '../../atoms/MaiaStreamdown';
13
13
  import { Backdrop } from '../../atoms/Backdrop';
14
14
  import { Loader } from '../../atoms/Loader';
15
+ import { Switch } from '../../atoms/Switch';
15
16
  import { SECTIONS } from '../../../constants/config';
16
- import { useUser } from '../../../context/cor-user';
17
+ import { useUser, isCollaboratorRole } from '../../../context/cor-user';
17
18
  import { useSnackBarManager } from '../../../hooks/useSnackBarManager/useSnackBarManager';
19
+ import { formatDate } from '../../../lang/utils';
18
20
  import { createSkill } from '../../../services/maia/Skills/createSkill';
19
21
  import { updateSkill } from '../../../services/maia/Skills/updateSkill';
20
22
  import { deleteSkill } from '../../../services/maia/Skills/deleteSkill';
21
23
  import { DeleteQuestionModal } from '../DeleteQuestionModal/DeleteQuestionModal';
22
- import { SCASMCancelButton, SCASMCloseButton, SCASMContent, SCASMDeleteSlot, SCASMField, SCASMFieldHeader, SCASMFooter, SCASMHeader, SCASMHeaderActions, SCASMHeaderTitle, SCASMHiddenFileInput, SCASMInput, SCASMLabel, SCASMPreview, SCASMPreviewEmpty, SCASMSaveButton, SCASMTextarea, SCASMToggleButton, SCASMToggleGroup, SCASMUploadButton, SCASMWrapper } from './AbmSkillModal.styles';
23
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
24
+ import { SCASMCancelButton, SCASMCloseButton, SCASMBody, SCASMDeleteSlot, SCASMFieldBox, SCASMFieldInput, SCASMFieldLabel, SCASMFieldTextarea, SCASMFooter, SCASMHeader, SCASMHeaderTitle, SCASMHiddenFileInput, SCASMInstructionsField, SCASMInstructionsHeader, SCASMInstructionsPanel, SCASMInstructionsTextarea, SCASMInstructionsTitle, SCASMMetadataItem, SCASMPreviewBody, SCASMPreviewContentBox, SCASMPreviewContentPanel, SCASMPreviewDescription, SCASMPreviewHeadingBlock, SCASMPreviewMetadataLabel, SCASMPreviewMetadataRow, SCASMPreviewMetadataValue, SCASMPreviewName, SCASMSaveOutlinedButton, SCASMSavePrimaryButton, SCASMSwitchLabel, SCASMSwitchRow, SCASMUploadButton, SCASMUseSkillButton, SCASMWrapper } from './AbmSkillModal.styles';
25
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
26
+ export var SKILL_USE_AFTER_SAVE_EVENT = 'maia-use-skill-after-save';
24
27
  var initialValues = {
25
28
  isEditing: false,
26
29
  general: {
27
30
  id: undefined,
28
31
  name: '',
29
- content: ''
32
+ description: '',
33
+ content: '',
34
+ access_type: 'only_me'
30
35
  }
31
36
  };
37
+ var emptyBaseline = {
38
+ name: '',
39
+ description: '',
40
+ content: '',
41
+ access_type: 'only_me'
42
+ };
43
+ var parseDescriptionFromContent = function parseDescriptionFromContent(content) {
44
+ var frontmatterMatch = content.match(/^---\s*\n([\s\S]*?)\n---/);
45
+ if (!frontmatterMatch) return '';
46
+ var descriptionMatch = frontmatterMatch[1].match(/^description:\s*(.+)$/m);
47
+ return descriptionMatch ? descriptionMatch[1].trim() : '';
48
+ };
32
49
  export var AbmSkillModal = function AbmSkillModal(_ref) {
33
- var _user$permissions, _values$general, _values$general2, _values$general3;
50
+ var _values$general, _values$general2, _values$general3, _values$general4, _values$general5, _values$general7, _values$general9;
34
51
  var addSkill = _ref.addSkill,
35
52
  updateSkillInList = _ref.updateSkillInList,
36
53
  removeSkill = _ref.removeSkill;
@@ -54,38 +71,42 @@ export var AbmSkillModal = function AbmSkillModal(_ref) {
54
71
  setShowDelete = _useState6[1];
55
72
  var _useState7 = useState(false),
56
73
  _useState8 = _slicedToArray(_useState7, 2),
57
- showPreview = _useState8[0],
58
- setShowPreview = _useState8[1];
59
- var _useState9 = useState(false),
74
+ pendingUpload = _useState8[0],
75
+ setPendingUpload = _useState8[1];
76
+ var _useState9 = useState(initialValues),
60
77
  _useState0 = _slicedToArray(_useState9, 2),
61
- pendingUpload = _useState0[0],
62
- setPendingUpload = _useState0[1];
63
- var _useState1 = useState(initialValues),
64
- _useState10 = _slicedToArray(_useState1, 2),
65
- values = _useState10[0],
66
- setValues = _useState10[1];
78
+ values = _useState0[0],
79
+ setValues = _useState0[1];
67
80
  var fileInputRef = useRef(null);
68
- // Baseline to detect changes: the loaded values when editing, empty when creating
69
- // (a new/generated/uploaded skill always counts as a change).
70
- var initialRef = useRef({
71
- name: '',
72
- content: ''
73
- });
74
- var userPermissions = user === null || user === void 0 || (_user$permissions = user.permissions) === null || _user$permissions === void 0 ? void 0 : _user$permissions.ai_agents;
75
- var canCreate = !!(userPermissions !== null && userPermissions !== void 0 && userPermissions.create);
76
- var canEdit = !!(userPermissions !== null && userPermissions !== void 0 && userPermissions.edit);
77
- var canDelete = !!(userPermissions !== null && userPermissions !== void 0 && userPermissions["delete"]);
81
+ var initialRef = useRef(emptyBaseline);
82
+ var isReadOnly = !!values.isReadOnly;
83
+ var canShareWithCompany = !isCollaboratorRole(user.role_id) && !isReadOnly;
78
84
  var name = ((_values$general = values.general) === null || _values$general === void 0 ? void 0 : _values$general.name) || '';
79
- var content = ((_values$general2 = values.general) === null || _values$general2 === void 0 ? void 0 : _values$general2.content) || '';
80
- var skillId = (_values$general3 = values.general) === null || _values$general3 === void 0 ? void 0 : _values$general3.id;
81
- var isValid = !!name.trim() && !!content.trim();
82
- var hasChanges = name.trim() !== initialRef.current.name || content.trim() !== initialRef.current.content;
85
+ var description = ((_values$general2 = values.general) === null || _values$general2 === void 0 ? void 0 : _values$general2.description) || '';
86
+ var content = ((_values$general3 = values.general) === null || _values$general3 === void 0 ? void 0 : _values$general3.content) || '';
87
+ var accessType = ((_values$general4 = values.general) === null || _values$general4 === void 0 ? void 0 : _values$general4.access_type) || 'only_me';
88
+ var effectiveAccessType = canShareWithCompany ? accessType : 'only_me';
89
+ var skillId = (_values$general5 = values.general) === null || _values$general5 === void 0 ? void 0 : _values$general5.id;
90
+ var isValid = !!name.trim() && !!description.trim() && !!content.trim();
91
+ var hasChanges = name.trim() !== initialRef.current.name || description.trim() !== initialRef.current.description || content.trim() !== initialRef.current.content || canShareWithCompany && effectiveAccessType !== initialRef.current.access_type;
92
+ var createdByLabel = useMemo(function () {
93
+ var _values$general6;
94
+ return ((_values$general6 = values.general) === null || _values$general6 === void 0 || (_values$general6 = _values$general6.created_by_name) === null || _values$general6 === void 0 ? void 0 : _values$general6.trim()) || "".concat(user.firstName, " ").concat(user.lastName).trim();
95
+ }, [(_values$general7 = values.general) === null || _values$general7 === void 0 ? void 0 : _values$general7.created_by_name, user.firstName, user.lastName]);
96
+ var lastUpdatedLabel = useMemo(function () {
97
+ var _values$general8;
98
+ var updatedAt = (_values$general8 = values.general) === null || _values$general8 === void 0 ? void 0 : _values$general8.updated_at;
99
+ if (!updatedAt) return '';
100
+ var parsed = new Date(updatedAt);
101
+ if (Number.isNaN(parsed.getTime())) return '';
102
+ return formatDate(parsed);
103
+ }, [(_values$general9 = values.general) === null || _values$general9 === void 0 ? void 0 : _values$general9.updated_at]);
83
104
  var handleClose = useCallback(function () {
84
105
  setIsOpen(false);
85
106
  setShowDelete(false);
86
- setShowPreview(false);
87
107
  setPendingUpload(false);
88
108
  setValues(initialValues);
109
+ initialRef.current = emptyBaseline;
89
110
  }, []);
90
111
  var handleBackdropClick = useCallback(function (event) {
91
112
  if (event.target === event.currentTarget) {
@@ -94,37 +115,36 @@ export var AbmSkillModal = function AbmSkillModal(_ref) {
94
115
  }, [handleClose]);
95
116
  useEffect(function () {
96
117
  var handleSetSkillValues = function handleSetSkillValues(event) {
97
- var _skillValues$values, _skillValues$values2, _skillValues$values3, _skillValues$values4, _skillValues$values5, _skillValues$values6;
118
+ var _skillValues$values, _skillValues$values2, _skillValues$values3;
98
119
  var _ref2 = event.detail || {},
99
120
  skillValues = _ref2.skillValues;
100
121
  if (!skillValues) return;
101
- var incomingName = (((_skillValues$values = skillValues.values) === null || _skillValues$values === void 0 || (_skillValues$values = _skillValues$values.general) === null || _skillValues$values === void 0 ? void 0 : _skillValues$values.name) || '').trim();
102
- var incomingContent = (((_skillValues$values2 = skillValues.values) === null || _skillValues$values2 === void 0 || (_skillValues$values2 = _skillValues$values2.general) === null || _skillValues$values2 === void 0 ? void 0 : _skillValues$values2.content) || '').trim();
103
- // Editing an existing skill -> baseline is its values; creating -> empty baseline.
104
- initialRef.current = (_skillValues$values3 = skillValues.values) !== null && _skillValues$values3 !== void 0 && _skillValues$values3.isEditing ? {
122
+ var incomingGeneral = _objectSpread(_objectSpread({}, initialValues.general), (_skillValues$values = skillValues.values) === null || _skillValues$values === void 0 ? void 0 : _skillValues$values.general);
123
+ var incomingName = (incomingGeneral.name || '').trim();
124
+ var incomingDescription = (incomingGeneral.description || '').trim();
125
+ var incomingContent = (incomingGeneral.content || '').trim();
126
+ var incomingAccessType = isCollaboratorRole(user.role_id) ? 'only_me' : incomingGeneral.access_type || 'only_me';
127
+ var parsedDescription = incomingDescription || (incomingContent ? parseDescriptionFromContent(incomingContent) : '');
128
+ initialRef.current = (_skillValues$values2 = skillValues.values) !== null && _skillValues$values2 !== void 0 && _skillValues$values2.isEditing ? {
105
129
  name: incomingName,
106
- content: incomingContent
107
- } : {
108
- name: '',
109
- content: ''
110
- };
130
+ description: parsedDescription,
131
+ content: incomingContent,
132
+ access_type: incomingAccessType
133
+ } : emptyBaseline;
111
134
  setValues(_objectSpread(_objectSpread(_objectSpread({}, initialValues), skillValues.values), {}, {
112
- general: _objectSpread(_objectSpread({}, initialValues.general), (_skillValues$values4 = skillValues.values) === null || _skillValues$values4 === void 0 ? void 0 : _skillValues$values4.general)
135
+ general: _objectSpread(_objectSpread({}, incomingGeneral), {}, {
136
+ description: parsedDescription,
137
+ access_type: incomingAccessType
138
+ })
113
139
  }));
114
- // Con contenido (edición o skill ya generada) arrancamos en "Vista previa"; vacía, en "Editar".
115
- var hasContent = !!((_skillValues$values5 = skillValues.values) !== null && _skillValues$values5 !== void 0 && (_skillValues$values5 = _skillValues$values5.general) !== null && _skillValues$values5 !== void 0 && (_skillValues$values5 = _skillValues$values5.content) !== null && _skillValues$values5 !== void 0 && _skillValues$values5.trim());
116
- setShowPreview(hasContent);
117
- // Si vino con intent "upload", abrimos el selector de archivos al montar.
118
- setPendingUpload(((_skillValues$values6 = skillValues.values) === null || _skillValues$values6 === void 0 ? void 0 : _skillValues$values6.intent) === 'upload');
140
+ setPendingUpload(((_skillValues$values3 = skillValues.values) === null || _skillValues$values3 === void 0 ? void 0 : _skillValues$values3.intent) === 'upload');
119
141
  setIsOpen(!!skillValues.isOpen);
120
142
  };
121
143
  document.addEventListener('abm-skill-modal-set-values', handleSetSkillValues);
122
144
  return function () {
123
145
  document.removeEventListener('abm-skill-modal-set-values', handleSetSkillValues);
124
146
  };
125
- }, []);
126
-
127
- // When opened with the "upload" intent, open the OS file picker once mounted.
147
+ }, [user.role_id]);
128
148
  useEffect(function () {
129
149
  if (isOpen && pendingUpload) {
130
150
  var _fileInputRef$current;
@@ -139,6 +159,16 @@ export var AbmSkillModal = function AbmSkillModal(_ref) {
139
159
  });
140
160
  });
141
161
  };
162
+ var handleAccessTypeChange = function handleAccessTypeChange(checked) {
163
+ if (!canShareWithCompany) return;
164
+ setValues(function (prev) {
165
+ return _objectSpread(_objectSpread({}, prev), {}, {
166
+ general: _objectSpread(_objectSpread({}, prev.general), {}, {
167
+ access_type: checked ? 'company' : 'only_me'
168
+ })
169
+ });
170
+ });
171
+ };
142
172
  var handleUploadClick = function handleUploadClick() {
143
173
  var _fileInputRef$current2;
144
174
  (_fileInputRef$current2 = fileInputRef.current) === null || _fileInputRef$current2 === void 0 || _fileInputRef$current2.click();
@@ -146,11 +176,11 @@ export var AbmSkillModal = function AbmSkillModal(_ref) {
146
176
  var handleFileChange = /*#__PURE__*/function () {
147
177
  var _ref3 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee(event) {
148
178
  var _event$target$files;
149
- var file, isMarkdown, text, baseName, _t;
179
+ var file, isMarkdown, text, baseName, parsedDescription, _t;
150
180
  return _regeneratorRuntime.wrap(function (_context) {
151
181
  while (1) switch (_context.prev = _context.next) {
152
182
  case 0:
153
- file = (_event$target$files = event.target.files) === null || _event$target$files === void 0 ? void 0 : _event$target$files[0]; // Reset the input (via ref) so selecting the same file again still fires onChange.
183
+ file = (_event$target$files = event.target.files) === null || _event$target$files === void 0 ? void 0 : _event$target$files[0];
154
184
  if (fileInputRef.current) {
155
185
  fileInputRef.current.value = '';
156
186
  }
@@ -174,18 +204,17 @@ export var AbmSkillModal = function AbmSkillModal(_ref) {
174
204
  case 3:
175
205
  text = _context.sent;
176
206
  baseName = file.name.replace(/\.(md|markdown)$/i, '');
207
+ parsedDescription = parseDescriptionFromContent(text);
177
208
  setValues(function (prev) {
178
- var _prev$general;
209
+ var _prev$general, _prev$general2, _prev$general3;
179
210
  return _objectSpread(_objectSpread({}, prev), {}, {
180
211
  general: _objectSpread(_objectSpread({}, prev.general), {}, {
181
212
  content: text,
182
- // Only fill the name from the filename when it's still empty.
183
- name: (_prev$general = prev.general) !== null && _prev$general !== void 0 && (_prev$general = _prev$general.name) !== null && _prev$general !== void 0 && _prev$general.trim() ? prev.general.name : baseName
213
+ description: (_prev$general = prev.general) !== null && _prev$general !== void 0 && (_prev$general = _prev$general.description) !== null && _prev$general !== void 0 && _prev$general.trim() ? prev.general.description : parsedDescription || ((_prev$general2 = prev.general) === null || _prev$general2 === void 0 ? void 0 : _prev$general2.description) || '',
214
+ name: (_prev$general3 = prev.general) !== null && _prev$general3 !== void 0 && (_prev$general3 = _prev$general3.name) !== null && _prev$general3 !== void 0 && _prev$general3.trim() ? prev.general.name : baseName
184
215
  })
185
216
  });
186
217
  });
187
- // Tras subir un .md mostramos el resultado renderizado por defecto.
188
- setShowPreview(true);
189
218
  _context.next = 5;
190
219
  break;
191
220
  case 4:
@@ -202,106 +231,216 @@ export var AbmSkillModal = function AbmSkillModal(_ref) {
202
231
  return _ref3.apply(this, arguments);
203
232
  };
204
233
  }();
205
- var handleSave = /*#__PURE__*/function () {
234
+ var persistSkill = /*#__PURE__*/function () {
206
235
  var _ref4 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee2() {
207
- var updated, created, _t2;
236
+ var payload, updated, created;
208
237
  return _regeneratorRuntime.wrap(function (_context2) {
209
238
  while (1) switch (_context2.prev = _context2.next) {
210
239
  case 0:
211
- if (!(!isValid || isSubmitting)) {
212
- _context2.next = 1;
213
- break;
214
- }
215
- return _context2.abrupt("return");
216
- case 1:
217
- setIsSubmitting(true);
218
- _context2.prev = 2;
240
+ payload = {
241
+ name: name.trim(),
242
+ description: description.trim(),
243
+ content: content.trim(),
244
+ access_type: effectiveAccessType
245
+ };
219
246
  if (!(values.isEditing && skillId)) {
220
- _context2.next = 4;
247
+ _context2.next = 2;
221
248
  break;
222
249
  }
223
- _context2.next = 3;
224
- return updateSkill(skillId, {
225
- name: name.trim(),
226
- content: content.trim()
227
- });
228
- case 3:
250
+ _context2.next = 1;
251
+ return updateSkill(skillId, payload);
252
+ case 1:
229
253
  updated = _context2.sent;
230
254
  updateSkillInList === null || updateSkillInList === void 0 || updateSkillInList(updated);
231
255
  handleSnackbarSuccess(t('mySkills.updateSuccess'));
232
- _context2.next = 6;
233
- break;
234
- case 4:
235
- _context2.next = 5;
236
- return createSkill({
237
- name: name.trim(),
238
- content: content.trim()
239
- });
240
- case 5:
256
+ return _context2.abrupt("return", updated);
257
+ case 2:
258
+ _context2.next = 3;
259
+ return createSkill(payload);
260
+ case 3:
241
261
  created = _context2.sent;
242
262
  addSkill === null || addSkill === void 0 || addSkill(created);
243
263
  handleSnackbarSuccess(t('mySkills.createSuccess'));
244
- case 6:
245
- handleClose();
246
- _context2.next = 8;
247
- break;
248
- case 7:
249
- _context2.prev = 7;
250
- _t2 = _context2["catch"](2);
251
- handleSnackbarError(values.isEditing ? t('mySkills.updateError') : t('mySkills.createError'));
252
- case 8:
253
- _context2.prev = 8;
254
- setIsSubmitting(false);
255
- return _context2.finish(8);
256
- case 9:
264
+ return _context2.abrupt("return", created);
265
+ case 4:
257
266
  case "end":
258
267
  return _context2.stop();
259
268
  }
260
- }, _callee2, null, [[2, 7, 8, 9]]);
269
+ }, _callee2);
261
270
  }));
262
- return function handleSave() {
271
+ return function persistSkill() {
263
272
  return _ref4.apply(this, arguments);
264
273
  };
265
274
  }();
266
- var handleConfirmDelete = /*#__PURE__*/function () {
275
+ var handleSave = /*#__PURE__*/function () {
267
276
  var _ref5 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee3() {
268
- var _t3;
277
+ var _t2;
269
278
  return _regeneratorRuntime.wrap(function (_context3) {
270
279
  while (1) switch (_context3.prev = _context3.next) {
271
280
  case 0:
272
- if (skillId) {
281
+ if (!(!isValid || isSubmitting || !hasChanges)) {
273
282
  _context3.next = 1;
274
283
  break;
275
284
  }
276
285
  return _context3.abrupt("return");
277
286
  case 1:
278
- _context3.prev = 1;
279
- _context3.next = 2;
287
+ setIsSubmitting(true);
288
+ _context3.prev = 2;
289
+ _context3.next = 3;
290
+ return persistSkill();
291
+ case 3:
292
+ handleClose();
293
+ _context3.next = 5;
294
+ break;
295
+ case 4:
296
+ _context3.prev = 4;
297
+ _t2 = _context3["catch"](2);
298
+ handleSnackbarError(values.isEditing ? t('mySkills.updateError') : t('mySkills.createError'));
299
+ case 5:
300
+ _context3.prev = 5;
301
+ setIsSubmitting(false);
302
+ return _context3.finish(5);
303
+ case 6:
304
+ case "end":
305
+ return _context3.stop();
306
+ }
307
+ }, _callee3, null, [[2, 4, 5, 6]]);
308
+ }));
309
+ return function handleSave() {
310
+ return _ref5.apply(this, arguments);
311
+ };
312
+ }();
313
+ var handleSaveAndUse = /*#__PURE__*/function () {
314
+ var _ref6 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee4() {
315
+ var savedSkill, _t3;
316
+ return _regeneratorRuntime.wrap(function (_context4) {
317
+ while (1) switch (_context4.prev = _context4.next) {
318
+ case 0:
319
+ if (!(!isValid || isSubmitting)) {
320
+ _context4.next = 1;
321
+ break;
322
+ }
323
+ return _context4.abrupt("return");
324
+ case 1:
325
+ setIsSubmitting(true);
326
+ _context4.prev = 2;
327
+ _context4.next = 3;
328
+ return persistSkill();
329
+ case 3:
330
+ savedSkill = _context4.sent;
331
+ if (savedSkill) {
332
+ document.dispatchEvent(new CustomEvent(SKILL_USE_AFTER_SAVE_EVENT, {
333
+ detail: {
334
+ skill: savedSkill
335
+ }
336
+ }));
337
+ }
338
+ handleClose();
339
+ _context4.next = 5;
340
+ break;
341
+ case 4:
342
+ _context4.prev = 4;
343
+ _t3 = _context4["catch"](2);
344
+ handleSnackbarError(values.isEditing ? t('mySkills.updateError') : t('mySkills.createError'));
345
+ case 5:
346
+ _context4.prev = 5;
347
+ setIsSubmitting(false);
348
+ return _context4.finish(5);
349
+ case 6:
350
+ case "end":
351
+ return _context4.stop();
352
+ }
353
+ }, _callee4, null, [[2, 4, 5, 6]]);
354
+ }));
355
+ return function handleSaveAndUse() {
356
+ return _ref6.apply(this, arguments);
357
+ };
358
+ }();
359
+ var handleConfirmDelete = /*#__PURE__*/function () {
360
+ var _ref7 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee5() {
361
+ var _t4;
362
+ return _regeneratorRuntime.wrap(function (_context5) {
363
+ while (1) switch (_context5.prev = _context5.next) {
364
+ case 0:
365
+ if (skillId) {
366
+ _context5.next = 1;
367
+ break;
368
+ }
369
+ return _context5.abrupt("return");
370
+ case 1:
371
+ _context5.prev = 1;
372
+ _context5.next = 2;
280
373
  return deleteSkill(skillId);
281
374
  case 2:
282
375
  removeSkill === null || removeSkill === void 0 || removeSkill(skillId);
283
376
  handleSnackbarSuccess(t('mySkills.deleteSuccess'));
284
377
  handleClose();
285
- _context3.next = 4;
378
+ _context5.next = 4;
286
379
  break;
287
380
  case 3:
288
- _context3.prev = 3;
289
- _t3 = _context3["catch"](1);
381
+ _context5.prev = 3;
382
+ _t4 = _context5["catch"](1);
290
383
  handleSnackbarError(t('mySkills.deleteError'));
291
384
  case 4:
292
385
  case "end":
293
- return _context3.stop();
386
+ return _context5.stop();
294
387
  }
295
- }, _callee3, null, [[1, 3]]);
388
+ }, _callee5, null, [[1, 3]]);
296
389
  }));
297
390
  return function handleConfirmDelete() {
298
- return _ref5.apply(this, arguments);
391
+ return _ref7.apply(this, arguments);
299
392
  };
300
393
  }();
394
+
395
+ /** Skill ajena en modo lectura: abre un chat nuevo con el primer agente y la mención ya puesta. */
396
+ var handleUseSkill = function handleUseSkill() {
397
+ if (!skillId) return;
398
+ document.dispatchEvent(new CustomEvent(SKILL_USE_AFTER_SAVE_EVENT, {
399
+ detail: {
400
+ skill: {
401
+ id: skillId,
402
+ name: name,
403
+ description: description,
404
+ content: content,
405
+ access_type: accessType
406
+ },
407
+ useFirstAgent: true
408
+ }
409
+ }));
410
+ handleClose();
411
+ };
301
412
  if (!isOpen) return null;
302
- if (!canCreate && !canEdit && !canDelete) return null;
303
413
  var container = document.getElementById('modal-root-actions');
304
414
  if (!container) return null;
415
+ var editOrCreateTitle = values.isEditing ? t('mySkills.editTitle') : t('mySkills.createTitle');
416
+ var modalTitle = isReadOnly ? t('mySkills.viewTitle') : editOrCreateTitle;
417
+ var previewBody = /*#__PURE__*/_jsxs(SCASMPreviewBody, {
418
+ children: [/*#__PURE__*/_jsxs(SCASMPreviewHeadingBlock, {
419
+ children: [/*#__PURE__*/_jsx(SCASMPreviewName, {
420
+ children: name
421
+ }), description ? /*#__PURE__*/_jsx(SCASMPreviewDescription, {
422
+ children: description
423
+ }) : null]
424
+ }), /*#__PURE__*/_jsxs(SCASMPreviewMetadataRow, {
425
+ children: [/*#__PURE__*/_jsxs(SCASMMetadataItem, {
426
+ children: [/*#__PURE__*/_jsx(SCASMPreviewMetadataLabel, {
427
+ children: t('mySkills.createdBy')
428
+ }), /*#__PURE__*/_jsx(SCASMPreviewMetadataValue, {
429
+ children: createdByLabel
430
+ })]
431
+ }), lastUpdatedLabel ? /*#__PURE__*/_jsxs(SCASMMetadataItem, {
432
+ children: [/*#__PURE__*/_jsx(SCASMPreviewMetadataLabel, {
433
+ children: t('mySkills.lastUpdated')
434
+ }), /*#__PURE__*/_jsx(SCASMPreviewMetadataValue, {
435
+ children: lastUpdatedLabel
436
+ })]
437
+ }) : null]
438
+ }), /*#__PURE__*/_jsx(SCASMPreviewContentPanel, {
439
+ children: /*#__PURE__*/_jsx(SCASMPreviewContentBox, {
440
+ children: content
441
+ })
442
+ })]
443
+ });
305
444
  return /*#__PURE__*/createPortal(/*#__PURE__*/_jsxs(Backdrop, {
306
445
  zIndex: 1112,
307
446
  onClick: handleBackdropClick,
@@ -311,7 +450,7 @@ export var AbmSkillModal = function AbmSkillModal(_ref) {
311
450
  },
312
451
  children: [/*#__PURE__*/_jsxs(SCASMHeader, {
313
452
  children: [/*#__PURE__*/_jsx(SCASMHeaderTitle, {
314
- children: values.isEditing ? t('mySkills.editTitle') : t('mySkills.createTitle')
453
+ children: modalTitle
315
454
  }), /*#__PURE__*/_jsx(SCASMCloseButton, {
316
455
  type: "button",
317
456
  onClick: handleClose,
@@ -322,12 +461,13 @@ export var AbmSkillModal = function AbmSkillModal(_ref) {
322
461
  height: 18
323
462
  })
324
463
  })]
325
- }), /*#__PURE__*/_jsxs(SCASMContent, {
326
- children: [/*#__PURE__*/_jsxs(SCASMField, {
327
- children: [/*#__PURE__*/_jsx(SCASMLabel, {
464
+ }), isReadOnly ? previewBody : /*#__PURE__*/_jsxs(SCASMBody, {
465
+ children: [/*#__PURE__*/_jsxs(SCASMFieldBox, {
466
+ $height: 50,
467
+ children: [/*#__PURE__*/_jsx(SCASMFieldLabel, {
328
468
  htmlFor: "skill-name-input",
329
469
  children: t('mySkills.nameLabel')
330
- }), /*#__PURE__*/_jsx(SCASMInput, {
470
+ }), /*#__PURE__*/_jsx(SCASMFieldInput, {
331
471
  id: "skill-name-input",
332
472
  type: "text",
333
473
  maxLength: 150,
@@ -338,81 +478,94 @@ export var AbmSkillModal = function AbmSkillModal(_ref) {
338
478
  return handleChangeField('name', event.target.value);
339
479
  }
340
480
  })]
341
- }), /*#__PURE__*/_jsxs(SCASMField, {
342
- children: [/*#__PURE__*/_jsxs(SCASMFieldHeader, {
343
- children: [/*#__PURE__*/_jsx(SCASMLabel, {
344
- htmlFor: "skill-content-input",
345
- children: t('mySkills.contentLabel')
346
- }), /*#__PURE__*/_jsxs(SCASMHeaderActions, {
347
- children: [/*#__PURE__*/_jsx(SCASMUploadButton, {
348
- type: "button",
349
- onClick: handleUploadClick,
350
- disabled: isSubmitting,
351
- children: t('mySkills.uploadMd')
352
- }), /*#__PURE__*/_jsx(SCASMHiddenFileInput, {
353
- ref: fileInputRef,
354
- type: "file",
355
- accept: ".md,.markdown,text/markdown",
356
- onChange: handleFileChange
357
- }), /*#__PURE__*/_jsxs(SCASMToggleGroup, {
358
- children: [/*#__PURE__*/_jsx(SCASMToggleButton, {
359
- type: "button",
360
- $active: !showPreview,
361
- onClick: function onClick() {
362
- return setShowPreview(false);
363
- },
364
- children: t('mySkills.edit')
365
- }), /*#__PURE__*/_jsx(SCASMToggleButton, {
366
- type: "button",
367
- $active: showPreview,
368
- onClick: function onClick() {
369
- return setShowPreview(true);
370
- },
371
- children: t('mySkills.preview')
372
- })]
373
- })]
374
- })]
375
- }), showPreview ? /*#__PURE__*/_jsx(SCASMPreview, {
376
- children: content.trim() ? /*#__PURE__*/_jsx(MaiaStreamdown, {
377
- variant: "preview",
378
- children: content
379
- }) : /*#__PURE__*/_jsx(SCASMPreviewEmpty, {
380
- children: t('mySkills.previewEmpty')
381
- })
382
- }) : /*#__PURE__*/_jsx(SCASMTextarea, {
383
- id: "skill-content-input",
384
- maxLength: 20000,
385
- placeholder: t('mySkills.contentPlaceholder'),
386
- value: content,
481
+ }), /*#__PURE__*/_jsxs(SCASMFieldBox, {
482
+ $height: 120,
483
+ $clipOverflow: true,
484
+ children: [/*#__PURE__*/_jsx(SCASMFieldLabel, {
485
+ htmlFor: "skill-description-input",
486
+ children: t('mySkills.descriptionLabel')
487
+ }), /*#__PURE__*/_jsx(SCASMFieldTextarea, {
488
+ id: "skill-description-input",
489
+ maxLength: 500,
490
+ placeholder: t('mySkills.descriptionPlaceholder'),
491
+ value: description,
387
492
  disabled: isSubmitting,
388
493
  onChange: function onChange(event) {
389
- return handleChangeField('content', event.target.value);
494
+ return handleChangeField('description', event.target.value);
390
495
  }
391
496
  })]
392
- })]
393
- }), /*#__PURE__*/_jsxs(SCASMFooter, {
394
- children: [values.isEditing && canDelete ? /*#__PURE__*/_jsx(SCASMDeleteSlot, {
395
- children: /*#__PURE__*/_jsx(SCASMCancelButton, {
396
- type: "button",
397
- onClick: function onClick() {
398
- return setShowDelete(true);
399
- },
497
+ }), canShareWithCompany ? /*#__PURE__*/_jsxs(SCASMSwitchRow, {
498
+ children: [/*#__PURE__*/_jsx(Switch, {
499
+ checked: accessType === 'company',
500
+ onChange: handleAccessTypeChange,
400
501
  disabled: isSubmitting,
401
- children: t('mySkills.delete')
402
- })
403
- }) : null, /*#__PURE__*/_jsx(SCASMCancelButton, {
404
- type: "button",
405
- onClick: handleClose,
406
- disabled: isSubmitting,
407
- children: t('mySkills.cancel')
408
- }), /*#__PURE__*/_jsx(SCASMSaveButton, {
409
- type: "button",
410
- onClick: handleSave,
411
- disabled: !isValid || isSubmitting || !hasChanges,
412
- children: isSubmitting ? /*#__PURE__*/_jsx(Loader, {
413
- size: "small"
414
- }) : t('mySkills.save')
502
+ "aria-label": t('mySkills.shareWithCompany')
503
+ }), /*#__PURE__*/_jsx(SCASMSwitchLabel, {
504
+ children: t('mySkills.shareWithCompany')
505
+ })]
506
+ }) : null, /*#__PURE__*/_jsxs(SCASMInstructionsPanel, {
507
+ children: [/*#__PURE__*/_jsxs(SCASMInstructionsHeader, {
508
+ children: [/*#__PURE__*/_jsx(SCASMInstructionsTitle, {
509
+ children: t('mySkills.instructionsLabel')
510
+ }), /*#__PURE__*/_jsxs(SCASMUploadButton, {
511
+ type: "button",
512
+ onClick: handleUploadClick,
513
+ disabled: isSubmitting,
514
+ children: [/*#__PURE__*/_jsx(FileUpload, {
515
+ width: 18,
516
+ height: 18,
517
+ color: "#08C"
518
+ }), t('mySkills.uploadMd')]
519
+ }), /*#__PURE__*/_jsx(SCASMHiddenFileInput, {
520
+ ref: fileInputRef,
521
+ type: "file",
522
+ accept: ".md,.markdown,text/markdown",
523
+ onChange: handleFileChange
524
+ })]
525
+ }), /*#__PURE__*/_jsx(SCASMInstructionsField, {
526
+ children: /*#__PURE__*/_jsx(SCASMInstructionsTextarea, {
527
+ id: "skill-content-input",
528
+ maxLength: 100000,
529
+ placeholder: t('mySkills.contentPlaceholder'),
530
+ value: content,
531
+ disabled: isSubmitting,
532
+ onChange: function onChange(event) {
533
+ return handleChangeField('content', event.target.value);
534
+ }
535
+ })
536
+ })]
415
537
  })]
538
+ }), /*#__PURE__*/_jsx(SCASMFooter, {
539
+ children: isReadOnly ? /*#__PURE__*/_jsx(SCASMUseSkillButton, {
540
+ type: "button",
541
+ onClick: handleUseSkill,
542
+ children: t('mySkills.useSkill')
543
+ }) : /*#__PURE__*/_jsxs(_Fragment, {
544
+ children: [values.isEditing ? /*#__PURE__*/_jsx(SCASMDeleteSlot, {
545
+ children: /*#__PURE__*/_jsx(SCASMCancelButton, {
546
+ type: "button",
547
+ onClick: function onClick() {
548
+ return setShowDelete(true);
549
+ },
550
+ disabled: isSubmitting,
551
+ children: t('mySkills.delete')
552
+ })
553
+ }) : null, /*#__PURE__*/_jsx(SCASMSaveOutlinedButton, {
554
+ type: "button",
555
+ onClick: handleSave,
556
+ disabled: !isValid || isSubmitting || !hasChanges,
557
+ children: isSubmitting ? /*#__PURE__*/_jsx(Loader, {
558
+ size: "small"
559
+ }) : t('mySkills.save')
560
+ }), /*#__PURE__*/_jsx(SCASMSavePrimaryButton, {
561
+ type: "button",
562
+ onClick: handleSaveAndUse,
563
+ disabled: !isValid || isSubmitting,
564
+ children: isSubmitting ? /*#__PURE__*/_jsx(Loader, {
565
+ size: "small"
566
+ }) : t('mySkills.saveAndUse')
567
+ })]
568
+ })
416
569
  })]
417
570
  }), showDelete && skillId ? /*#__PURE__*/_jsx(DeleteQuestionModal, {
418
571
  onClose: function onClose() {
@@ -429,4 +582,4 @@ export var AbmSkillModal = function AbmSkillModal(_ref) {
429
582
  }) : null]
430
583
  }), container);
431
584
  };
432
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1c2VDYWxsYmFjayIsInVzZUVmZmVjdCIsInVzZVJlZiIsInVzZVN0YXRlIiwiY3JlYXRlUG9ydGFsIiwiQ3Jvc3MiLCJ1c2VUcmFuc2xhdGlvbiIsIk1haWFTdHJlYW1kb3duIiwiQmFja2Ryb3AiLCJMb2FkZXIiLCJTRUNUSU9OUyIsInVzZVVzZXIiLCJ1c2VTbmFja0Jhck1hbmFnZXIiLCJjcmVhdGVTa2lsbCIsInVwZGF0ZVNraWxsIiwiZGVsZXRlU2tpbGwiLCJEZWxldGVRdWVzdGlvbk1vZGFsIiwiU0NBU01DYW5jZWxCdXR0b24iLCJTQ0FTTUNsb3NlQnV0dG9uIiwiU0NBU01Db250ZW50IiwiU0NBU01EZWxldGVTbG90IiwiU0NBU01GaWVsZCIsIlNDQVNNRmllbGRIZWFkZXIiLCJTQ0FTTUZvb3RlciIsIlNDQVNNSGVhZGVyIiwiU0NBU01IZWFkZXJBY3Rpb25zIiwiU0NBU01IZWFkZXJUaXRsZSIsIlNDQVNNSGlkZGVuRmlsZUlucHV0IiwiU0NBU01JbnB1dCIsIlNDQVNNTGFiZWwiLCJTQ0FTTVByZXZpZXciLCJTQ0FTTVByZXZpZXdFbXB0eSIsIlNDQVNNU2F2ZUJ1dHRvbiIsIlNDQVNNVGV4dGFyZWEiLCJTQ0FTTVRvZ2dsZUJ1dHRvbiIsIlNDQVNNVG9nZ2xlR3JvdXAiLCJTQ0FTTVVwbG9hZEJ1dHRvbiIsIlNDQVNNV3JhcHBlciIsImpzeCIsIl9qc3giLCJqc3hzIiwiX2pzeHMiLCJpbml0aWFsVmFsdWVzIiwiaXNFZGl0aW5nIiwiZ2VuZXJhbCIsImlkIiwidW5kZWZpbmVkIiwibmFtZSIsImNvbnRlbnQiLCJBYm1Ta2lsbE1vZGFsIiwiX3JlZiIsIl91c2VyJHBlcm1pc3Npb25zIiwiX3ZhbHVlcyRnZW5lcmFsIiwiX3ZhbHVlcyRnZW5lcmFsMiIsIl92YWx1ZXMkZ2VuZXJhbDMiLCJhZGRTa2lsbCIsInVwZGF0ZVNraWxsSW5MaXN0IiwicmVtb3ZlU2tpbGwiLCJfdXNlVHJhbnNsYXRpb24iLCJjaGF0QUkiLCJ0IiwidXNlciIsIl91c2VTbmFja0Jhck1hbmFnZXIiLCJoYW5kbGVTbmFja2JhclN1Y2Nlc3MiLCJoYW5kbGVTbmFja2JhckVycm9yIiwiX3VzZVN0YXRlIiwiX3VzZVN0YXRlMiIsIl9zbGljZWRUb0FycmF5IiwiaXNPcGVuIiwic2V0SXNPcGVuIiwiX3VzZVN0YXRlMyIsIl91c2VTdGF0ZTQiLCJpc1N1Ym1pdHRpbmciLCJzZXRJc1N1Ym1pdHRpbmciLCJfdXNlU3RhdGU1IiwiX3VzZVN0YXRlNiIsInNob3dEZWxldGUiLCJzZXRTaG93RGVsZXRlIiwiX3VzZVN0YXRlNyIsIl91c2VTdGF0ZTgiLCJzaG93UHJldmlldyIsInNldFNob3dQcmV2aWV3IiwiX3VzZVN0YXRlOSIsIl91c2VTdGF0ZTAiLCJwZW5kaW5nVXBsb2FkIiwic2V0UGVuZGluZ1VwbG9hZCIsIl91c2VTdGF0ZTEiLCJfdXNlU3RhdGUxMCIsInZhbHVlcyIsInNldFZhbHVlcyIsImZpbGVJbnB1dFJlZiIsImluaXRpYWxSZWYiLCJ1c2VyUGVybWlzc2lvbnMiLCJwZXJtaXNzaW9ucyIsImFpX2FnZW50cyIsImNhbkNyZWF0ZSIsImNyZWF0ZSIsImNhbkVkaXQiLCJlZGl0IiwiY2FuRGVsZXRlIiwic2tpbGxJZCIsImlzVmFsaWQiLCJ0cmltIiwiaGFzQ2hhbmdlcyIsImN1cnJlbnQiLCJoYW5kbGVDbG9zZSIsImhhbmRsZUJhY2tkcm9wQ2xpY2siLCJldmVudCIsInRhcmdldCIsImN1cnJlbnRUYXJnZXQiLCJoYW5kbGVTZXRTa2lsbFZhbHVlcyIsIl9za2lsbFZhbHVlcyR2YWx1ZXMiLCJfc2tpbGxWYWx1ZXMkdmFsdWVzMiIsIl9za2lsbFZhbHVlcyR2YWx1ZXMzIiwiX3NraWxsVmFsdWVzJHZhbHVlczQiLCJfc2tpbGxWYWx1ZXMkdmFsdWVzNSIsIl9za2lsbFZhbHVlcyR2YWx1ZXM2IiwiX3JlZjIiLCJkZXRhaWwiLCJza2lsbFZhbHVlcyIsImluY29taW5nTmFtZSIsImluY29taW5nQ29udGVudCIsIl9vYmplY3RTcHJlYWQiLCJoYXNDb250ZW50IiwiaW50ZW50IiwiZG9jdW1lbnQiLCJhZGRFdmVudExpc3RlbmVyIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsIl9maWxlSW5wdXRSZWYkY3VycmVudCIsImNsaWNrIiwiaGFuZGxlQ2hhbmdlRmllbGQiLCJmaWVsZCIsInZhbHVlIiwicHJldiIsIl9kZWZpbmVQcm9wZXJ0eSIsImhhbmRsZVVwbG9hZENsaWNrIiwiX2ZpbGVJbnB1dFJlZiRjdXJyZW50MiIsImhhbmRsZUZpbGVDaGFuZ2UiLCJfcmVmMyIsIl9hc3luY1RvR2VuZXJhdG9yIiwiX3JlZ2VuZXJhdG9yUnVudGltZSIsIm1hcmsiLCJfY2FsbGVlIiwiX2V2ZW50JHRhcmdldCRmaWxlcyIsImZpbGUiLCJpc01hcmtkb3duIiwidGV4dCIsImJhc2VOYW1lIiwiX3QiLCJ3cmFwIiwiX2NvbnRleHQiLCJuZXh0IiwiZmlsZXMiLCJhYnJ1cHQiLCJ0ZXN0Iiwic2VudCIsInJlcGxhY2UiLCJfcHJldiRnZW5lcmFsIiwic3RvcCIsIl94IiwiYXBwbHkiLCJhcmd1bWVudHMiLCJoYW5kbGVTYXZlIiwiX3JlZjQiLCJfY2FsbGVlMiIsInVwZGF0ZWQiLCJjcmVhdGVkIiwiX3QyIiwiX2NvbnRleHQyIiwiZmluaXNoIiwiaGFuZGxlQ29uZmlybURlbGV0ZSIsIl9yZWY1IiwiX2NhbGxlZTMiLCJfdDMiLCJfY29udGV4dDMiLCJjb250YWluZXIiLCJnZXRFbGVtZW50QnlJZCIsInpJbmRleCIsIm9uQ2xpY2siLCJjaGlsZHJlbiIsInN0b3BQcm9wYWdhdGlvbiIsInR5cGUiLCJjb2xvciIsIndpZHRoIiwiaGVpZ2h0IiwiaHRtbEZvciIsIm1heExlbmd0aCIsInBsYWNlaG9sZGVyIiwiZGlzYWJsZWQiLCJvbkNoYW5nZSIsInJlZiIsImFjY2VwdCIsIiRhY3RpdmUiLCJ2YXJpYW50Iiwic2l6ZSIsIm9uQ2xvc2UiLCJoYW5kbGVycyIsImhhbmRsZUNvbmZpcm1BY3Rpb24iLCJjaGF0IiwidGl0bGUiLCJhY3Rpb24iXSwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50cy9vcmdhbmlzbXMvQWJtU2tpbGxNb2RhbC9BYm1Ta2lsbE1vZGFsLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55ICovXG5pbXBvcnQgeyBDaGFuZ2VFdmVudCwgTW91c2VFdmVudCwgdXNlQ2FsbGJhY2ssIHVzZUVmZmVjdCwgdXNlUmVmLCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgY3JlYXRlUG9ydGFsIH0gZnJvbSAncmVhY3QtZG9tJ1xuaW1wb3J0IHsgQ3Jvc3MgfSBmcm9tICdAcHJvamVjdGNvci9pY29ucy9saWIvY29tcG9uZW50cy9Dcm9zcydcbmltcG9ydCB7IHVzZVRyYW5zbGF0aW9uIH0gZnJvbSAncmVhY3QtaTE4bmV4dCdcbmltcG9ydCB7IE1haWFTdHJlYW1kb3duIH0gZnJvbSAnLi4vLi4vYXRvbXMvTWFpYVN0cmVhbWRvd24nXG5pbXBvcnQgeyBCYWNrZHJvcCB9IGZyb20gJy4uLy4uL2F0b21zL0JhY2tkcm9wJ1xuaW1wb3J0IHsgTG9hZGVyIH0gZnJvbSAnLi4vLi4vYXRvbXMvTG9hZGVyJ1xuaW1wb3J0IHsgU0VDVElPTlMgfSBmcm9tICcuLi8uLi8uLi9jb25zdGFudHMvY29uZmlnJ1xuaW1wb3J0IHsgdXNlVXNlciB9IGZyb20gJy4uLy4uLy4uL2NvbnRleHQvY29yLXVzZXInXG5pbXBvcnQgeyB1c2VTbmFja0Jhck1hbmFnZXIgfSBmcm9tICcuLi8uLi8uLi9ob29rcy91c2VTbmFja0Jhck1hbmFnZXIvdXNlU25hY2tCYXJNYW5hZ2VyJ1xuaW1wb3J0IHsgY3JlYXRlU2tpbGwgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9tYWlhL1NraWxscy9jcmVhdGVTa2lsbCdcbmltcG9ydCB7IHVwZGF0ZVNraWxsIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvbWFpYS9Ta2lsbHMvdXBkYXRlU2tpbGwnXG5pbXBvcnQgeyBkZWxldGVTa2lsbCB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL21haWEvU2tpbGxzL2RlbGV0ZVNraWxsJ1xuaW1wb3J0IHsgU2tpbGwgfSBmcm9tICcuLi8uLi8uLi90eXBlcy9za2lsbCdcbmltcG9ydCB7IERlbGV0ZVF1ZXN0aW9uTW9kYWwgfSBmcm9tICcuLi9EZWxldGVRdWVzdGlvbk1vZGFsL0RlbGV0ZVF1ZXN0aW9uTW9kYWwnXG5pbXBvcnQge1xuICBTQ0FTTUNhbmNlbEJ1dHRvbixcbiAgU0NBU01DbG9zZUJ1dHRvbixcbiAgU0NBU01Db250ZW50LFxuICBTQ0FTTURlbGV0ZVNsb3QsXG4gIFNDQVNNRmllbGQsXG4gIFNDQVNNRmllbGRIZWFkZXIsXG4gIFNDQVNNRm9vdGVyLFxuICBTQ0FTTUhlYWRlcixcbiAgU0NBU01IZWFkZXJBY3Rpb25zLFxuICBTQ0FTTUhlYWRlclRpdGxlLFxuICBTQ0FTTUhpZGRlbkZpbGVJbnB1dCxcbiAgU0NBU01JbnB1dCxcbiAgU0NBU01MYWJlbCxcbiAgU0NBU01QcmV2aWV3LFxuICBTQ0FTTVByZXZpZXdFbXB0eSxcbiAgU0NBU01TYXZlQnV0dG9uLFxuICBTQ0FTTVRleHRhcmVhLFxuICBTQ0FTTVRvZ2dsZUJ1dHRvbixcbiAgU0NBU01Ub2dnbGVHcm91cCxcbiAgU0NBU01VcGxvYWRCdXR0b24sXG4gIFNDQVNNV3JhcHBlcixcbn0gZnJvbSAnLi9BYm1Ta2lsbE1vZGFsLnN0eWxlcydcblxudHlwZSBTa2lsbE1vZGFsVmFsdWVzID0ge1xuICBpc0VkaXRpbmc6IGJvb2xlYW5cbiAgZ2VuZXJhbD86IHtcbiAgICBpZD86IHN0cmluZ1xuICAgIG5hbWU/OiBzdHJpbmdcbiAgICBjb250ZW50Pzogc3RyaW5nXG4gIH1cbn1cblxudHlwZSBBYm1Ta2lsbE1vZGFsUHJvcHMgPSB7XG4gIGFkZFNraWxsPzogKHNraWxsOiBTa2lsbCkgPT4gdm9pZFxuICB1cGRhdGVTa2lsbEluTGlzdD86IChza2lsbDogU2tpbGwpID0+IHZvaWRcbiAgcmVtb3ZlU2tpbGw/OiAoc2tpbGxJZDogc3RyaW5nKSA9PiB2b2lkXG59XG5cbmNvbnN0IGluaXRpYWxWYWx1ZXM6IFNraWxsTW9kYWxWYWx1ZXMgPSB7XG4gIGlzRWRpdGluZzogZmFsc2UsXG4gIGdlbmVyYWw6IHsgaWQ6IHVuZGVmaW5lZCwgbmFtZTogJycsIGNvbnRlbnQ6ICcnIH0sXG59XG5cbmV4cG9ydCBjb25zdCBBYm1Ta2lsbE1vZGFsID0gKHsgYWRkU2tpbGwsIHVwZGF0ZVNraWxsSW5MaXN0LCByZW1vdmVTa2lsbCB9OiBBYm1Ta2lsbE1vZGFsUHJvcHMpID0+IHtcbiAgY29uc3QgeyB0IH0gPSB1c2VUcmFuc2xhdGlvbihbU0VDVElPTlMuY2hhdEFJXSlcbiAgY29uc3QgdXNlciA9IHVzZVVzZXIoKVxuICBjb25zdCB7IGhhbmRsZVNuYWNrYmFyU3VjY2VzcywgaGFuZGxlU25hY2tiYXJFcnJvciB9ID0gdXNlU25hY2tCYXJNYW5hZ2VyKClcbiAgY29uc3QgW2lzT3Blbiwgc2V0SXNPcGVuXSA9IHVzZVN0YXRlKGZhbHNlKVxuICBjb25zdCBbaXNTdWJtaXR0aW5nLCBzZXRJc1N1Ym1pdHRpbmddID0gdXNlU3RhdGUoZmFsc2UpXG4gIGNvbnN0IFtzaG93RGVsZXRlLCBzZXRTaG93RGVsZXRlXSA9IHVzZVN0YXRlKGZhbHNlKVxuICBjb25zdCBbc2hvd1ByZXZpZXcsIHNldFNob3dQcmV2aWV3XSA9IHVzZVN0YXRlKGZhbHNlKVxuICBjb25zdCBbcGVuZGluZ1VwbG9hZCwgc2V0UGVuZGluZ1VwbG9hZF0gPSB1c2VTdGF0ZShmYWxzZSlcbiAgY29uc3QgW3ZhbHVlcywgc2V0VmFsdWVzXSA9IHVzZVN0YXRlPFNraWxsTW9kYWxWYWx1ZXM+KGluaXRpYWxWYWx1ZXMpXG4gIGNvbnN0IGZpbGVJbnB1dFJlZiA9IHVzZVJlZjxIVE1MSW5wdXRFbGVtZW50PihudWxsKVxuICAvLyBCYXNlbGluZSB0byBkZXRlY3QgY2hhbmdlczogdGhlIGxvYWRlZCB2YWx1ZXMgd2hlbiBlZGl0aW5nLCBlbXB0eSB3aGVuIGNyZWF0aW5nXG4gIC8vIChhIG5ldy9nZW5lcmF0ZWQvdXBsb2FkZWQgc2tpbGwgYWx3YXlzIGNvdW50cyBhcyBhIGNoYW5nZSkuXG4gIGNvbnN0IGluaXRpYWxSZWYgPSB1c2VSZWY8eyBuYW1lOiBzdHJpbmc7IGNvbnRlbnQ6IHN0cmluZyB9Pih7IG5hbWU6ICcnLCBjb250ZW50OiAnJyB9KVxuXG4gIGNvbnN0IHVzZXJQZXJtaXNzaW9ucyA9IHVzZXI/LnBlcm1pc3Npb25zPy5haV9hZ2VudHNcbiAgY29uc3QgY2FuQ3JlYXRlID0gISF1c2VyUGVybWlzc2lvbnM/LmNyZWF0ZVxuICBjb25zdCBjYW5FZGl0ID0gISF1c2VyUGVybWlzc2lvbnM/LmVkaXRcbiAgY29uc3QgY2FuRGVsZXRlID0gISF1c2VyUGVybWlzc2lvbnM/LmRlbGV0ZVxuXG4gIGNvbnN0IG5hbWUgPSB2YWx1ZXMuZ2VuZXJhbD8ubmFtZSB8fCAnJ1xuICBjb25zdCBjb250ZW50ID0gdmFsdWVzLmdlbmVyYWw/LmNvbnRlbnQgfHwgJydcbiAgY29uc3Qgc2tpbGxJZCA9IHZhbHVlcy5nZW5lcmFsPy5pZFxuICBjb25zdCBpc1ZhbGlkID0gISFuYW1lLnRyaW0oKSAmJiAhIWNvbnRlbnQudHJpbSgpXG4gIGNvbnN0IGhhc0NoYW5nZXMgPSBuYW1lLnRyaW0oKSAhPT0gaW5pdGlhbFJlZi5jdXJyZW50Lm5hbWUgfHwgY29udGVudC50cmltKCkgIT09IGluaXRpYWxSZWYuY3VycmVudC5jb250ZW50XG5cbiAgY29uc3QgaGFuZGxlQ2xvc2UgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgc2V0SXNPcGVuKGZhbHNlKVxuICAgIHNldFNob3dEZWxldGUoZmFsc2UpXG4gICAgc2V0U2hvd1ByZXZpZXcoZmFsc2UpXG4gICAgc2V0UGVuZGluZ1VwbG9hZChmYWxzZSlcbiAgICBzZXRWYWx1ZXMoaW5pdGlhbFZhbHVlcylcbiAgfSwgW10pXG5cbiAgY29uc3QgaGFuZGxlQmFja2Ryb3BDbGljayA9IHVzZUNhbGxiYWNrKFxuICAgIChldmVudDogTW91c2VFdmVudCkgPT4ge1xuICAgICAgaWYgKGV2ZW50LnRhcmdldCA9PT0gZXZlbnQuY3VycmVudFRhcmdldCkge1xuICAgICAgICBoYW5kbGVDbG9zZSgpXG4gICAgICB9XG4gICAgfSxcbiAgICBbaGFuZGxlQ2xvc2VdXG4gIClcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IGhhbmRsZVNldFNraWxsVmFsdWVzID0gKGV2ZW50OiBhbnkpID0+IHtcbiAgICAgIGNvbnN0IHsgc2tpbGxWYWx1ZXMgfSA9IGV2ZW50LmRldGFpbCB8fCB7fVxuICAgICAgaWYgKCFza2lsbFZhbHVlcykgcmV0dXJuXG4gICAgICBjb25zdCBpbmNvbWluZ05hbWUgPSAoc2tpbGxWYWx1ZXMudmFsdWVzPy5nZW5lcmFsPy5uYW1lIHx8ICcnKS50cmltKClcbiAgICAgIGNvbnN0IGluY29taW5nQ29udGVudCA9IChza2lsbFZhbHVlcy52YWx1ZXM/LmdlbmVyYWw/LmNvbnRlbnQgfHwgJycpLnRyaW0oKVxuICAgICAgLy8gRWRpdGluZyBhbiBleGlzdGluZyBza2lsbCAtPiBiYXNlbGluZSBpcyBpdHMgdmFsdWVzOyBjcmVhdGluZyAtPiBlbXB0eSBiYXNlbGluZS5cbiAgICAgIGluaXRpYWxSZWYuY3VycmVudCA9IHNraWxsVmFsdWVzLnZhbHVlcz8uaXNFZGl0aW5nXG4gICAgICAgID8geyBuYW1lOiBpbmNvbWluZ05hbWUsIGNvbnRlbnQ6IGluY29taW5nQ29udGVudCB9XG4gICAgICAgIDogeyBuYW1lOiAnJywgY29udGVudDogJycgfVxuXG4gICAgICBzZXRWYWx1ZXMoe1xuICAgICAgICAuLi5pbml0aWFsVmFsdWVzLFxuICAgICAgICAuLi5za2lsbFZhbHVlcy52YWx1ZXMsXG4gICAgICAgIGdlbmVyYWw6IHsgLi4uaW5pdGlhbFZhbHVlcy5nZW5lcmFsLCAuLi5za2lsbFZhbHVlcy52YWx1ZXM/LmdlbmVyYWwgfSxcbiAgICAgIH0pXG4gICAgICAvLyBDb24gY29udGVuaWRvIChlZGljacOzbiBvIHNraWxsIHlhIGdlbmVyYWRhKSBhcnJhbmNhbW9zIGVuIFwiVmlzdGEgcHJldmlhXCI7IHZhY8OtYSwgZW4gXCJFZGl0YXJcIi5cbiAgICAgIGNvbnN0IGhhc0NvbnRlbnQgPSAhIXNraWxsVmFsdWVzLnZhbHVlcz8uZ2VuZXJhbD8uY29udGVudD8udHJpbSgpXG4gICAgICBzZXRTaG93UHJldmlldyhoYXNDb250ZW50KVxuICAgICAgLy8gU2kgdmlubyBjb24gaW50ZW50IFwidXBsb2FkXCIsIGFicmltb3MgZWwgc2VsZWN0b3IgZGUgYXJjaGl2b3MgYWwgbW9udGFyLlxuICAgICAgc2V0UGVuZGluZ1VwbG9hZChza2lsbFZhbHVlcy52YWx1ZXM/LmludGVudCA9PT0gJ3VwbG9hZCcpXG4gICAgICBzZXRJc09wZW4oISFza2lsbFZhbHVlcy5pc09wZW4pXG4gICAgfVxuXG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignYWJtLXNraWxsLW1vZGFsLXNldC12YWx1ZXMnLCBoYW5kbGVTZXRTa2lsbFZhbHVlcylcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignYWJtLXNraWxsLW1vZGFsLXNldC12YWx1ZXMnLCBoYW5kbGVTZXRTa2lsbFZhbHVlcylcbiAgICB9XG4gIH0sIFtdKVxuXG4gIC8vIFdoZW4gb3BlbmVkIHdpdGggdGhlIFwidXBsb2FkXCIgaW50ZW50LCBvcGVuIHRoZSBPUyBmaWxlIHBpY2tlciBvbmNlIG1vdW50ZWQuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGlzT3BlbiAmJiBwZW5kaW5nVXBsb2FkKSB7XG4gICAgICBzZXRQZW5kaW5nVXBsb2FkKGZhbHNlKVxuICAgICAgZmlsZUlucHV0UmVmLmN1cnJlbnQ/LmNsaWNrKClcbiAgICB9XG4gIH0sIFtpc09wZW4sIHBlbmRpbmdVcGxvYWRdKVxuXG4gIGNvbnN0IGhhbmRsZUNoYW5nZUZpZWxkID0gKGZpZWxkOiAnbmFtZScgfCAnY29udGVudCcsIHZhbHVlOiBzdHJpbmcpID0+IHtcbiAgICBzZXRWYWx1ZXMocHJldiA9PiAoe1xuICAgICAgLi4ucHJldixcbiAgICAgIGdlbmVyYWw6IHsgLi4ucHJldi5nZW5lcmFsLCBbZmllbGRdOiB2YWx1ZSB9LFxuICAgIH0pKVxuICB9XG5cbiAgY29uc3QgaGFuZGxlVXBsb2FkQ2xpY2sgPSAoKSA9PiB7XG4gICAgZmlsZUlucHV0UmVmLmN1cnJlbnQ/LmNsaWNrKClcbiAgfVxuXG4gIGNvbnN0IGhhbmRsZUZpbGVDaGFuZ2UgPSBhc3luYyAoZXZlbnQ6IENoYW5nZUV2ZW50PEhUTUxJbnB1dEVsZW1lbnQ+KSA9PiB7XG4gICAgY29uc3QgZmlsZSA9IGV2ZW50LnRhcmdldC5maWxlcz8uWzBdXG4gICAgLy8gUmVzZXQgdGhlIGlucHV0ICh2aWEgcmVmKSBzbyBzZWxlY3RpbmcgdGhlIHNhbWUgZmlsZSBhZ2FpbiBzdGlsbCBmaXJlcyBvbkNoYW5nZS5cbiAgICBpZiAoZmlsZUlucHV0UmVmLmN1cnJlbnQpIHtcbiAgICAgIGZpbGVJbnB1dFJlZi5jdXJyZW50LnZhbHVlID0gJydcbiAgICB9XG4gICAgaWYgKCFmaWxlKSByZXR1cm5cblxuICAgIGNvbnN0IGlzTWFya2Rvd24gPSAvXFwuKG1kfG1hcmtkb3duKSQvaS50ZXN0KGZpbGUubmFtZSlcbiAgICBpZiAoIWlzTWFya2Rvd24pIHtcbiAgICAgIGhhbmRsZVNuYWNrYmFyRXJyb3IodCgnbXlTa2lsbHMudXBsb2FkRXJyb3InKSlcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBjb25zdCB0ZXh0ID0gYXdhaXQgZmlsZS50ZXh0KClcbiAgICAgIGNvbnN0IGJhc2VOYW1lID0gZmlsZS5uYW1lLnJlcGxhY2UoL1xcLihtZHxtYXJrZG93bikkL2ksICcnKVxuICAgICAgc2V0VmFsdWVzKHByZXYgPT4gKHtcbiAgICAgICAgLi4ucHJldixcbiAgICAgICAgZ2VuZXJhbDoge1xuICAgICAgICAgIC4uLnByZXYuZ2VuZXJhbCxcbiAgICAgICAgICBjb250ZW50OiB0ZXh0LFxuICAgICAgICAgIC8vIE9ubHkgZmlsbCB0aGUgbmFtZSBmcm9tIHRoZSBmaWxlbmFtZSB3aGVuIGl0J3Mgc3RpbGwgZW1wdHkuXG4gICAgICAgICAgbmFtZTogcHJldi5nZW5lcmFsPy5uYW1lPy50cmltKCkgPyBwcmV2LmdlbmVyYWwubmFtZSA6IGJhc2VOYW1lLFxuICAgICAgICB9LFxuICAgICAgfSkpXG4gICAgICAvLyBUcmFzIHN1YmlyIHVuIC5tZCBtb3N0cmFtb3MgZWwgcmVzdWx0YWRvIHJlbmRlcml6YWRvIHBvciBkZWZlY3RvLlxuICAgICAgc2V0U2hvd1ByZXZpZXcodHJ1ZSlcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgaGFuZGxlU25hY2tiYXJFcnJvcih0KCdteVNraWxscy51cGxvYWRFcnJvcicpKVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGhhbmRsZVNhdmUgPSBhc3luYyAoKSA9PiB7XG4gICAgaWYgKCFpc1ZhbGlkIHx8IGlzU3VibWl0dGluZykgcmV0dXJuXG4gICAgc2V0SXNTdWJtaXR0aW5nKHRydWUpXG4gICAgdHJ5IHtcbiAgICAgIGlmICh2YWx1ZXMuaXNFZGl0aW5nICYmIHNraWxsSWQpIHtcbiAgICAgICAgY29uc3QgdXBkYXRlZCA9IGF3YWl0IHVwZGF0ZVNraWxsKHNraWxsSWQsIHsgbmFtZTogbmFtZS50cmltKCksIGNvbnRlbnQ6IGNvbnRlbnQudHJpbSgpIH0pXG4gICAgICAgIHVwZGF0ZVNraWxsSW5MaXN0Py4odXBkYXRlZClcbiAgICAgICAgaGFuZGxlU25hY2tiYXJTdWNjZXNzKHQoJ215U2tpbGxzLnVwZGF0ZVN1Y2Nlc3MnKSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGNyZWF0ZWQgPSBhd2FpdCBjcmVhdGVTa2lsbCh7IG5hbWU6IG5hbWUudHJpbSgpLCBjb250ZW50OiBjb250ZW50LnRyaW0oKSB9KVxuICAgICAgICBhZGRTa2lsbD8uKGNyZWF0ZWQpXG4gICAgICAgIGhhbmRsZVNuYWNrYmFyU3VjY2Vzcyh0KCdteVNraWxscy5jcmVhdGVTdWNjZXNzJykpXG4gICAgICB9XG4gICAgICBoYW5kbGVDbG9zZSgpXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGhhbmRsZVNuYWNrYmFyRXJyb3IodmFsdWVzLmlzRWRpdGluZyA/IHQoJ215U2tpbGxzLnVwZGF0ZUVycm9yJykgOiB0KCdteVNraWxscy5jcmVhdGVFcnJvcicpKVxuICAgIH0gZmluYWxseSB7XG4gICAgICBzZXRJc1N1Ym1pdHRpbmcoZmFsc2UpXG4gICAgfVxuICB9XG5cbiAgY29uc3QgaGFuZGxlQ29uZmlybURlbGV0ZSA9IGFzeW5jICgpID0+IHtcbiAgICBpZiAoIXNraWxsSWQpIHJldHVyblxuICAgIHRyeSB7XG4gICAgICBhd2FpdCBkZWxldGVTa2lsbChza2lsbElkKVxuICAgICAgcmVtb3ZlU2tpbGw/Lihza2lsbElkKVxuICAgICAgaGFuZGxlU25hY2tiYXJTdWNjZXNzKHQoJ215U2tpbGxzLmRlbGV0ZVN1Y2Nlc3MnKSlcbiAgICAgIGhhbmRsZUNsb3NlKClcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgaGFuZGxlU25hY2tiYXJFcnJvcih0KCdteVNraWxscy5kZWxldGVFcnJvcicpKVxuICAgIH1cbiAgfVxuXG4gIGlmICghaXNPcGVuKSByZXR1cm4gbnVsbFxuICBpZiAoIWNhbkNyZWF0ZSAmJiAhY2FuRWRpdCAmJiAhY2FuRGVsZXRlKSByZXR1cm4gbnVsbFxuXG4gIGNvbnN0IGNvbnRhaW5lciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2RhbC1yb290LWFjdGlvbnMnKVxuICBpZiAoIWNvbnRhaW5lcikgcmV0dXJuIG51bGxcblxuICByZXR1cm4gY3JlYXRlUG9ydGFsKFxuICAgIDxCYWNrZHJvcCB6SW5kZXg9ezExMTJ9IG9uQ2xpY2s9e2hhbmRsZUJhY2tkcm9wQ2xpY2t9PlxuICAgICAgPFNDQVNNV3JhcHBlciBvbkNsaWNrPXtldmVudCA9PiBldmVudC5zdG9wUHJvcGFnYXRpb24oKX0+XG4gICAgICAgIDxTQ0FTTUhlYWRlcj5cbiAgICAgICAgICA8U0NBU01IZWFkZXJUaXRsZT57dmFsdWVzLmlzRWRpdGluZyA/IHQoJ215U2tpbGxzLmVkaXRUaXRsZScpIDogdCgnbXlTa2lsbHMuY3JlYXRlVGl0bGUnKX08L1NDQVNNSGVhZGVyVGl0bGU+XG4gICAgICAgICAgPFNDQVNNQ2xvc2VCdXR0b24gdHlwZT1cImJ1dHRvblwiIG9uQ2xpY2s9e2hhbmRsZUNsb3NlfSBhcmlhLWxhYmVsPXt0KCdteVNraWxscy5jbG9zZScpfT5cbiAgICAgICAgICAgIDxDcm9zcyBjb2xvcj1cIiNhNmE2YTZcIiB3aWR0aD17MTh9IGhlaWdodD17MTh9IC8+XG4gICAgICAgICAgPC9TQ0FTTUNsb3NlQnV0dG9uPlxuICAgICAgICA8L1NDQVNNSGVhZGVyPlxuXG4gICAgICAgIDxTQ0FTTUNvbnRlbnQ+XG4gICAgICAgICAgPFNDQVNNRmllbGQ+XG4gICAgICAgICAgICA8U0NBU01MYWJlbCBodG1sRm9yPVwic2tpbGwtbmFtZS1pbnB1dFwiPnt0KCdteVNraWxscy5uYW1lTGFiZWwnKX08L1NDQVNNTGFiZWw+XG4gICAgICAgICAgICA8U0NBU01JbnB1dFxuICAgICAgICAgICAgICBpZD1cInNraWxsLW5hbWUtaW5wdXRcIlxuICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgIG1heExlbmd0aD17MTUwfVxuICAgICAgICAgICAgICBwbGFjZWhvbGRlcj17dCgnbXlTa2lsbHMubmFtZVBsYWNlaG9sZGVyJyl9XG4gICAgICAgICAgICAgIHZhbHVlPXtuYW1lfVxuICAgICAgICAgICAgICBkaXNhYmxlZD17aXNTdWJtaXR0aW5nfVxuICAgICAgICAgICAgICBvbkNoYW5nZT17ZXZlbnQgPT4gaGFuZGxlQ2hhbmdlRmllbGQoJ25hbWUnLCBldmVudC50YXJnZXQudmFsdWUpfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L1NDQVNNRmllbGQ+XG5cbiAgICAgICAgICA8U0NBU01GaWVsZD5cbiAgICAgICAgICAgIDxTQ0FTTUZpZWxkSGVhZGVyPlxuICAgICAgICAgICAgICA8U0NBU01MYWJlbCBodG1sRm9yPVwic2tpbGwtY29udGVudC1pbnB1dFwiPnt0KCdteVNraWxscy5jb250ZW50TGFiZWwnKX08L1NDQVNNTGFiZWw+XG4gICAgICAgICAgICAgIDxTQ0FTTUhlYWRlckFjdGlvbnM+XG4gICAgICAgICAgICAgICAgPFNDQVNNVXBsb2FkQnV0dG9uIHR5cGU9XCJidXR0b25cIiBvbkNsaWNrPXtoYW5kbGVVcGxvYWRDbGlja30gZGlzYWJsZWQ9e2lzU3VibWl0dGluZ30+XG4gICAgICAgICAgICAgICAgICB7dCgnbXlTa2lsbHMudXBsb2FkTWQnKX1cbiAgICAgICAgICAgICAgICA8L1NDQVNNVXBsb2FkQnV0dG9uPlxuICAgICAgICAgICAgICAgIDxTQ0FTTUhpZGRlbkZpbGVJbnB1dFxuICAgICAgICAgICAgICAgICAgcmVmPXtmaWxlSW5wdXRSZWZ9XG4gICAgICAgICAgICAgICAgICB0eXBlPVwiZmlsZVwiXG4gICAgICAgICAgICAgICAgICBhY2NlcHQ9XCIubWQsLm1hcmtkb3duLHRleHQvbWFya2Rvd25cIlxuICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9e2hhbmRsZUZpbGVDaGFuZ2V9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICA8U0NBU01Ub2dnbGVHcm91cD5cbiAgICAgICAgICAgICAgICAgIDxTQ0FTTVRvZ2dsZUJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgJGFjdGl2ZT17IXNob3dQcmV2aWV3fSBvbkNsaWNrPXsoKSA9PiBzZXRTaG93UHJldmlldyhmYWxzZSl9PlxuICAgICAgICAgICAgICAgICAgICB7dCgnbXlTa2lsbHMuZWRpdCcpfVxuICAgICAgICAgICAgICAgICAgPC9TQ0FTTVRvZ2dsZUJ1dHRvbj5cbiAgICAgICAgICAgICAgICAgIDxTQ0FTTVRvZ2dsZUJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgJGFjdGl2ZT17c2hvd1ByZXZpZXd9IG9uQ2xpY2s9eygpID0+IHNldFNob3dQcmV2aWV3KHRydWUpfT5cbiAgICAgICAgICAgICAgICAgICAge3QoJ215U2tpbGxzLnByZXZpZXcnKX1cbiAgICAgICAgICAgICAgICAgIDwvU0NBU01Ub2dnbGVCdXR0b24+XG4gICAgICAgICAgICAgICAgPC9TQ0FTTVRvZ2dsZUdyb3VwPlxuICAgICAgICAgICAgICA8L1NDQVNNSGVhZGVyQWN0aW9ucz5cbiAgICAgICAgICAgIDwvU0NBU01GaWVsZEhlYWRlcj5cbiAgICAgICAgICAgIHtzaG93UHJldmlldyA/IChcbiAgICAgICAgICAgICAgPFNDQVNNUHJldmlldz5cbiAgICAgICAgICAgICAgICB7Y29udGVudC50cmltKCkgPyAoXG4gICAgICAgICAgICAgICAgICA8TWFpYVN0cmVhbWRvd24gdmFyaWFudD1cInByZXZpZXdcIj57Y29udGVudH08L01haWFTdHJlYW1kb3duPlxuICAgICAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgICAgICA8U0NBU01QcmV2aWV3RW1wdHk+e3QoJ215U2tpbGxzLnByZXZpZXdFbXB0eScpfTwvU0NBU01QcmV2aWV3RW1wdHk+XG4gICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgPC9TQ0FTTVByZXZpZXc+XG4gICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICA8U0NBU01UZXh0YXJlYVxuICAgICAgICAgICAgICAgIGlkPVwic2tpbGwtY29udGVudC1pbnB1dFwiXG4gICAgICAgICAgICAgICAgbWF4TGVuZ3RoPXsyMDAwMH1cbiAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj17dCgnbXlTa2lsbHMuY29udGVudFBsYWNlaG9sZGVyJyl9XG4gICAgICAgICAgICAgICAgdmFsdWU9e2NvbnRlbnR9XG4gICAgICAgICAgICAgICAgZGlzYWJsZWQ9e2lzU3VibWl0dGluZ31cbiAgICAgICAgICAgICAgICBvbkNoYW5nZT17ZXZlbnQgPT4gaGFuZGxlQ2hhbmdlRmllbGQoJ2NvbnRlbnQnLCBldmVudC50YXJnZXQudmFsdWUpfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICA8L1NDQVNNRmllbGQ+XG4gICAgICAgIDwvU0NBU01Db250ZW50PlxuXG4gICAgICAgIDxTQ0FTTUZvb3Rlcj5cbiAgICAgICAgICB7dmFsdWVzLmlzRWRpdGluZyAmJiBjYW5EZWxldGUgPyAoXG4gICAgICAgICAgICA8U0NBU01EZWxldGVTbG90PlxuICAgICAgICAgICAgICA8U0NBU01DYW5jZWxCdXR0b24gdHlwZT1cImJ1dHRvblwiIG9uQ2xpY2s9eygpID0+IHNldFNob3dEZWxldGUodHJ1ZSl9IGRpc2FibGVkPXtpc1N1Ym1pdHRpbmd9PlxuICAgICAgICAgICAgICAgIHt0KCdteVNraWxscy5kZWxldGUnKX1cbiAgICAgICAgICAgICAgPC9TQ0FTTUNhbmNlbEJ1dHRvbj5cbiAgICAgICAgICAgIDwvU0NBU01EZWxldGVTbG90PlxuICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICAgIDxTQ0FTTUNhbmNlbEJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgb25DbGljaz17aGFuZGxlQ2xvc2V9IGRpc2FibGVkPXtpc1N1Ym1pdHRpbmd9PlxuICAgICAgICAgICAge3QoJ215U2tpbGxzLmNhbmNlbCcpfVxuICAgICAgICAgIDwvU0NBU01DYW5jZWxCdXR0b24+XG4gICAgICAgICAgPFNDQVNNU2F2ZUJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgb25DbGljaz17aGFuZGxlU2F2ZX0gZGlzYWJsZWQ9eyFpc1ZhbGlkIHx8IGlzU3VibWl0dGluZyB8fCAhaGFzQ2hhbmdlc30+XG4gICAgICAgICAgICB7aXNTdWJtaXR0aW5nID8gPExvYWRlciBzaXplPVwic21hbGxcIiAvPiA6IHQoJ215U2tpbGxzLnNhdmUnKX1cbiAgICAgICAgICA8L1NDQVNNU2F2ZUJ1dHRvbj5cbiAgICAgICAgPC9TQ0FTTUZvb3Rlcj5cbiAgICAgIDwvU0NBU01XcmFwcGVyPlxuXG4gICAgICB7c2hvd0RlbGV0ZSAmJiBza2lsbElkID8gKFxuICAgICAgICA8RGVsZXRlUXVlc3Rpb25Nb2RhbFxuICAgICAgICAgIG9uQ2xvc2U9eygpID0+IHNldFNob3dEZWxldGUoZmFsc2UpfVxuICAgICAgICAgIGhhbmRsZXJzPXt7XG4gICAgICAgICAgICBoYW5kbGVDb25maXJtQWN0aW9uOiBoYW5kbGVDb25maXJtRGVsZXRlLFxuICAgICAgICAgIH19XG4gICAgICAgICAgY2hhdD17eyB0aXRsZTogbmFtZSwgaWQ6IHNraWxsSWQgfX1cbiAgICAgICAgICBhY3Rpb249XCJza2lsbFwiXG4gICAgICAgIC8+XG4gICAgICApIDogbnVsbH1cbiAgICA8L0JhY2tkcm9wPixcbiAgICBjb250YWluZXJcbiAgKVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQTtBQUNBLFNBQWtDQSxXQUFXLEVBQUVDLFNBQVMsRUFBRUMsTUFBTSxFQUFFQyxRQUFRLFFBQVEsT0FBTztBQUN6RixTQUFTQyxZQUFZLFFBQVEsV0FBVztBQUN4QyxTQUFTQyxLQUFLLFFBQVEsd0NBQXdDO0FBQzlELFNBQVNDLGNBQWMsUUFBUSxlQUFlO0FBQzlDLFNBQVNDLGNBQWMsUUFBUSw0QkFBNEI7QUFDM0QsU0FBU0MsUUFBUSxRQUFRLHNCQUFzQjtBQUMvQyxTQUFTQyxNQUFNLFFBQVEsb0JBQW9CO0FBQzNDLFNBQVNDLFFBQVEsUUFBUSwyQkFBMkI7QUFDcEQsU0FBU0MsT0FBTyxRQUFRLDJCQUEyQjtBQUNuRCxTQUFTQyxrQkFBa0IsUUFBUSxzREFBc0Q7QUFDekYsU0FBU0MsV0FBVyxRQUFRLDJDQUEyQztBQUN2RSxTQUFTQyxXQUFXLFFBQVEsMkNBQTJDO0FBQ3ZFLFNBQVNDLFdBQVcsUUFBUSwyQ0FBMkM7QUFFdkUsU0FBU0MsbUJBQW1CLFFBQVEsNENBQTRDO0FBQ2hGLFNBQ0VDLGlCQUFpQixFQUNqQkMsZ0JBQWdCLEVBQ2hCQyxZQUFZLEVBQ1pDLGVBQWUsRUFDZkMsVUFBVSxFQUNWQyxnQkFBZ0IsRUFDaEJDLFdBQVcsRUFDWEMs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
585
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1c2VDYWxsYmFjayIsInVzZUVmZmVjdCIsInVzZU1lbW8iLCJ1c2VSZWYiLCJ1c2VTdGF0ZSIsImNyZWF0ZVBvcnRhbCIsIkNyb3NzIiwiRmlsZVVwbG9hZCIsInVzZVRyYW5zbGF0aW9uIiwiQmFja2Ryb3AiLCJMb2FkZXIiLCJTd2l0Y2giLCJTRUNUSU9OUyIsInVzZVVzZXIiLCJpc0NvbGxhYm9yYXRvclJvbGUiLCJ1c2VTbmFja0Jhck1hbmFnZXIiLCJmb3JtYXREYXRlIiwiY3JlYXRlU2tpbGwiLCJ1cGRhdGVTa2lsbCIsImRlbGV0ZVNraWxsIiwiRGVsZXRlUXVlc3Rpb25Nb2RhbCIsIlNDQVNNQ2FuY2VsQnV0dG9uIiwiU0NBU01DbG9zZUJ1dHRvbiIsIlNDQVNNQm9keSIsIlNDQVNNRGVsZXRlU2xvdCIsIlNDQVNNRmllbGRCb3giLCJTQ0FTTUZpZWxkSW5wdXQiLCJTQ0FTTUZpZWxkTGFiZWwiLCJTQ0FTTUZpZWxkVGV4dGFyZWEiLCJTQ0FTTUZvb3RlciIsIlNDQVNNSGVhZGVyIiwiU0NBU01IZWFkZXJUaXRsZSIsIlNDQVNNSGlkZGVuRmlsZUlucHV0IiwiU0NBU01JbnN0cnVjdGlvbnNGaWVsZCIsIlNDQVNNSW5zdHJ1Y3Rpb25zSGVhZGVyIiwiU0NBU01JbnN0cnVjdGlvbnNQYW5lbCIsIlNDQVNNSW5zdHJ1Y3Rpb25zVGV4dGFyZWEiLCJTQ0FTTUluc3RydWN0aW9uc1RpdGxlIiwiU0NBU01NZXRhZGF0YUl0ZW0iLCJTQ0FTTVByZXZpZXdCb2R5IiwiU0NBU01QcmV2aWV3Q29udGVudEJveCIsIlNDQVNNUHJldmlld0NvbnRlbnRQYW5lbCIsIlNDQVNNUHJldmlld0Rlc2NyaXB0aW9uIiwiU0NBU01QcmV2aWV3SGVhZGluZ0Jsb2NrIiwiU0NBU01QcmV2aWV3TWV0YWRhdGFMYWJlbCIsIlNDQVNNUHJldmlld01ldGFkYXRhUm93IiwiU0NBU01QcmV2aWV3TWV0YWRhdGFWYWx1ZSIsIlNDQVNNUHJldmlld05hbWUiLCJTQ0FTTVNhdmVPdXRsaW5lZEJ1dHRvbiIsIlNDQVNNU2F2ZVByaW1hcnlCdXR0b24iLCJTQ0FTTVN3aXRjaExhYmVsIiwiU0NBU01Td2l0Y2hSb3ciLCJTQ0FTTVVwbG9hZEJ1dHRvbiIsIlNDQVNNVXNlU2tpbGxCdXR0b24iLCJTQ0FTTVdyYXBwZXIiLCJqc3giLCJfanN4IiwianN4cyIsIl9qc3hzIiwiRnJhZ21lbnQiLCJfRnJhZ21lbnQiLCJTS0lMTF9VU0VfQUZURVJfU0FWRV9FVkVOVCIsImluaXRpYWxWYWx1ZXMiLCJpc0VkaXRpbmciLCJnZW5lcmFsIiwiaWQiLCJ1bmRlZmluZWQiLCJuYW1lIiwiZGVzY3JpcHRpb24iLCJjb250ZW50IiwiYWNjZXNzX3R5cGUiLCJlbXB0eUJhc2VsaW5lIiwicGFyc2VEZXNjcmlwdGlvbkZyb21Db250ZW50IiwiZnJvbnRtYXR0ZXJNYXRjaCIsIm1hdGNoIiwiZGVzY3JpcHRpb25NYXRjaCIsInRyaW0iLCJBYm1Ta2lsbE1vZGFsIiwiX3JlZiIsIl92YWx1ZXMkZ2VuZXJhbCIsIl92YWx1ZXMkZ2VuZXJhbDIiLCJfdmFsdWVzJGdlbmVyYWwzIiwiX3ZhbHVlcyRnZW5lcmFsNCIsIl92YWx1ZXMkZ2VuZXJhbDUiLCJfdmFsdWVzJGdlbmVyYWw3IiwiX3ZhbHVlcyRnZW5lcmFsOSIsImFkZFNraWxsIiwidXBkYXRlU2tpbGxJbkxpc3QiLCJyZW1vdmVTa2lsbCIsIl91c2VUcmFuc2xhdGlvbiIsImNoYXRBSSIsInQiLCJ1c2VyIiwiX3VzZVNuYWNrQmFyTWFuYWdlciIsImhhbmRsZVNuYWNrYmFyU3VjY2VzcyIsImhhbmRsZVNuYWNrYmFyRXJyb3IiLCJfdXNlU3RhdGUiLCJfdXNlU3RhdGUyIiwiX3NsaWNlZFRvQXJyYXkiLCJpc09wZW4iLCJzZXRJc09wZW4iLCJfdXNlU3RhdGUzIiwiX3VzZVN0YXRlNCIsImlzU3VibWl0dGluZyIsInNldElzU3VibWl0dGluZyIsIl91c2VTdGF0ZTUiLCJfdXNlU3RhdGU2Iiwic2hvd0RlbGV0ZSIsInNldFNob3dEZWxldGUiLCJfdXNlU3RhdGU3IiwiX3VzZVN0YXRlOCIsInBlbmRpbmdVcGxvYWQiLCJzZXRQZW5kaW5nVXBsb2FkIiwiX3VzZVN0YXRlOSIsIl91c2VTdGF0ZTAiLCJ2YWx1ZXMiLCJzZXRWYWx1ZXMiLCJmaWxlSW5wdXRSZWYiLCJpbml0aWFsUmVmIiwiaXNSZWFkT25seSIsImNhblNoYXJlV2l0aENvbXBhbnkiLCJyb2xlX2lkIiwiYWNjZXNzVHlwZSIsImVmZmVjdGl2ZUFjY2Vzc1R5cGUiLCJza2lsbElkIiwiaXNWYWxpZCIsImhhc0NoYW5nZXMiLCJjdXJyZW50IiwiY3JlYXRlZEJ5TGFiZWwiLCJfdmFsdWVzJGdlbmVyYWw2IiwiY3JlYXRlZF9ieV9uYW1lIiwiY29uY2F0IiwiZmlyc3ROYW1lIiwibGFzdE5hbWUiLCJsYXN0VXBkYXRlZExhYmVsIiwiX3ZhbHVlcyRnZW5lcmFsOCIsInVwZGF0ZWRBdCIsInVwZGF0ZWRfYXQiLCJwYXJzZWQiLCJEYXRlIiwiTnVtYmVyIiwiaXNOYU4iLCJnZXRUaW1lIiwiaGFuZGxlQ2xvc2UiLCJoYW5kbGVCYWNrZHJvcENsaWNrIiwiZXZlbnQiLCJ0YXJnZXQiLCJjdXJyZW50VGFyZ2V0IiwiaGFuZGxlU2V0U2tpbGxWYWx1ZXMiLCJfc2tpbGxWYWx1ZXMkdmFsdWVzIiwiX3NraWxsVmFsdWVzJHZhbHVlczIiLCJfc2tpbGxWYWx1ZXMkdmFsdWVzMyIsIl9yZWYyIiwiZGV0YWlsIiwic2tpbGxWYWx1ZXMiLCJpbmNvbWluZ0dlbmVyYWwiLCJfb2JqZWN0U3ByZWFkIiwiaW5jb21pbmdOYW1lIiwiaW5jb21pbmdEZXNjcmlwdGlvbiIsImluY29taW5nQ29udGVudCIsImluY29taW5nQWNjZXNzVHlwZSIsInBhcnNlZERlc2NyaXB0aW9uIiwiaW50ZW50IiwiZG9jdW1lbnQiLCJhZGRFdmVudExpc3RlbmVyIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsIl9maWxlSW5wdXRSZWYkY3VycmVudCIsImNsaWNrIiwiaGFuZGxlQ2hhbmdlRmllbGQiLCJmaWVsZCIsInZhbHVlIiwicHJldiIsIl9kZWZpbmVQcm9wZXJ0eSIsImhhbmRsZUFjY2Vzc1R5cGVDaGFuZ2UiLCJjaGVja2VkIiwiaGFuZGxlVXBsb2FkQ2xpY2siLCJfZmlsZUlucHV0UmVmJGN1cnJlbnQyIiwiaGFuZGxlRmlsZUNoYW5nZSIsIl9yZWYzIiwiX2FzeW5jVG9HZW5lcmF0b3IiLCJfcmVnZW5lcmF0b3JSdW50aW1lIiwibWFyayIsIl9jYWxsZWUiLCJfZXZlbnQkdGFyZ2V0JGZpbGVzIiwiZmlsZSIsImlzTWFya2Rvd24iLCJ0ZXh0IiwiYmFzZU5hbWUiLCJfdCIsIndyYXAiLCJfY29udGV4dCIsIm5leHQiLCJmaWxlcyIsImFicnVwdCIsInRlc3QiLCJzZW50IiwicmVwbGFjZSIsIl9wcmV2JGdlbmVyYWwiLCJfcHJldiRnZW5lcmFsMiIsIl9wcmV2JGdlbmVyYWwzIiwic3RvcCIsIl94IiwiYXBwbHkiLCJhcmd1bWVudHMiLCJwZXJzaXN0U2tpbGwiLCJfcmVmNCIsIl9jYWxsZWUyIiwicGF5bG9hZCIsInVwZGF0ZWQiLCJjcmVhdGVkIiwiX2NvbnRleHQyIiwiaGFuZGxlU2F2ZSIsIl9yZWY1IiwiX2NhbGxlZTMiLCJfdDIiLCJfY29udGV4dDMiLCJmaW5pc2giLCJoYW5kbGVTYXZlQW5kVXNlIiwiX3JlZjYiLCJfY2FsbGVlNCIsInNhdmVkU2tpbGwiLCJfdDMiLCJfY29udGV4dDQiLCJkaXNwYXRjaEV2ZW50IiwiQ3VzdG9tRXZlbnQiLCJza2lsbCIsImhhbmRsZUNvbmZpcm1EZWxldGUiLCJfcmVmNyIsIl9jYWxsZWU1IiwiX3Q0IiwiX2NvbnRleHQ1IiwiaGFuZGxlVXNlU2tpbGwiLCJ1c2VGaXJzdEFnZW50IiwiY29udGFpbmVyIiwiZ2V0RWxlbWVudEJ5SWQiLCJlZGl0T3JDcmVhdGVUaXRsZSIsIm1vZGFsVGl0bGUiLCJwcmV2aWV3Qm9keSIsImNoaWxkcmVuIiwiekluZGV4Iiwib25DbGljayIsInN0b3BQcm9wYWdhdGlvbiIsInR5cGUiLCJjb2xvciIsIndpZHRoIiwiaGVpZ2h0IiwiJGhlaWdodCIsImh0bWxGb3IiLCJtYXhMZW5ndGgiLCJwbGFjZWhvbGRlciIsImRpc2FibGVkIiwib25DaGFuZ2UiLCIkY2xpcE92ZXJmbG93IiwicmVmIiwiYWNjZXB0Iiwic2l6ZSIsIm9uQ2xvc2UiLCJoYW5kbGVycyIsImhhbmRsZUNvbmZpcm1BY3Rpb24iLCJjaGF0IiwidGl0bGUiLCJhY3Rpb24iXSwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50cy9vcmdhbmlzbXMvQWJtU2tpbGxNb2RhbC9BYm1Ta2lsbE1vZGFsLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55ICovXG5pbXBvcnQgeyBDaGFuZ2VFdmVudCwgTW91c2VFdmVudCwgdXNlQ2FsbGJhY2ssIHVzZUVmZmVjdCwgdXNlTWVtbywgdXNlUmVmLCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgY3JlYXRlUG9ydGFsIH0gZnJvbSAncmVhY3QtZG9tJ1xuaW1wb3J0IHsgQ3Jvc3MgfSBmcm9tICdAcHJvamVjdGNvci9pY29ucy9saWIvY29tcG9uZW50cy9Dcm9zcydcbmltcG9ydCB7IEZpbGVVcGxvYWQgfSBmcm9tICdAcHJvamVjdGNvci9pY29ucy9saWIvY29tcG9uZW50cy9GaWxlVXBsb2FkJ1xuaW1wb3J0IHsgdXNlVHJhbnNsYXRpb24gfSBmcm9tICdyZWFjdC1pMThuZXh0J1xuaW1wb3J0IHsgQmFja2Ryb3AgfSBmcm9tICcuLi8uLi9hdG9tcy9CYWNrZHJvcCdcbmltcG9ydCB7IExvYWRlciB9IGZyb20gJy4uLy4uL2F0b21zL0xvYWRlcidcbmltcG9ydCB7IFN3aXRjaCB9IGZyb20gJy4uLy4uL2F0b21zL1N3aXRjaCdcbmltcG9ydCB7IFNFQ1RJT05TIH0gZnJvbSAnLi4vLi4vLi4vY29uc3RhbnRzL2NvbmZpZydcbmltcG9ydCB7IHVzZVVzZXIsIGlzQ29sbGFib3JhdG9yUm9sZSB9IGZyb20gJy4uLy4uLy4uL2NvbnRleHQvY29yLXVzZXInXG5pbXBvcnQgeyB1c2VTbmFja0Jhck1hbmFnZXIgfSBmcm9tICcuLi8uLi8uLi9ob29rcy91c2VTbmFja0Jhck1hbmFnZXIvdXNlU25hY2tCYXJNYW5hZ2VyJ1xuaW1wb3J0IHsgZm9ybWF0RGF0ZSB9IGZyb20gJy4uLy4uLy4uL2xhbmcvdXRpbHMnXG5pbXBvcnQgeyBjcmVhdGVTa2lsbCB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL21haWEvU2tpbGxzL2NyZWF0ZVNraWxsJ1xuaW1wb3J0IHsgdXBkYXRlU2tpbGwgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9tYWlhL1NraWxscy91cGRhdGVTa2lsbCdcbmltcG9ydCB7IGRlbGV0ZVNraWxsIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvbWFpYS9Ta2lsbHMvZGVsZXRlU2tpbGwnXG5pbXBvcnQgeyBTa2lsbCwgU2tpbGxBY2Nlc3NUeXBlIH0gZnJvbSAnLi4vLi4vLi4vdHlwZXMvc2tpbGwnXG5pbXBvcnQgeyBEZWxldGVRdWVzdGlvbk1vZGFsIH0gZnJvbSAnLi4vRGVsZXRlUXVlc3Rpb25Nb2RhbC9EZWxldGVRdWVzdGlvbk1vZGFsJ1xuaW1wb3J0IHtcbiAgU0NBU01DYW5jZWxCdXR0b24sXG4gIFNDQVNNQ2xvc2VCdXR0b24sXG4gIFNDQVNNQm9keSxcbiAgU0NBU01EZWxldGVTbG90LFxuICBTQ0FTTUZpZWxkQm94LFxuICBTQ0FTTUZpZWxkSW5wdXQsXG4gIFNDQVNNRmllbGRMYWJlbCxcbiAgU0NBU01GaWVsZFRleHRhcmVhLFxuICBTQ0FTTUZvb3RlcixcbiAgU0NBU01IZWFkZXIsXG4gIFNDQVNNSGVhZGVyVGl0bGUsXG4gIFNDQVNNSGlkZGVuRmlsZUlucHV0LFxuICBTQ0FTTUluc3RydWN0aW9uc0ZpZWxkLFxuICBTQ0FTTUluc3RydWN0aW9uc0hlYWRlcixcbiAgU0NBU01JbnN0cnVjdGlvbnNQYW5lbCxcbiAgU0NBU01JbnN0cnVjdGlvbnNUZXh0YXJlYSxcbiAgU0NBU01JbnN0cnVjdGlvbnNUaXRsZSxcbiAgU0NBU01NZXRhZGF0YUl0ZW0sXG4gIFNDQVNNUHJldmlld0JvZHksXG4gIFNDQVNNUHJldmlld0NvbnRlbnRCb3gsXG4gIFNDQVNNUHJldmlld0NvbnRlbnRQYW5lbCxcbiAgU0NBU01QcmV2aWV3RGVzY3JpcHRpb24sXG4gIFNDQVNNUHJldmlld0hlYWRpbmdCbG9jayxcbiAgU0NBU01QcmV2aWV3TWV0YWRhdGFMYWJlbCxcbiAgU0NBU01QcmV2aWV3TWV0YWRhdGFSb3csXG4gIFNDQVNNUHJldmlld01ldGFkYXRhVmFsdWUsXG4gIFNDQVNNUHJldmlld05hbWUsXG4gIFNDQVNNU2F2ZU91dGxpbmVkQnV0dG9uLFxuICBTQ0FTTVNhdmVQcmltYXJ5QnV0dG9uLFxuICBTQ0FTTVN3aXRjaExhYmVsLFxuICBTQ0FTTVN3aXRjaFJvdyxcbiAgU0NBU01VcGxvYWRCdXR0b24sXG4gIFNDQVNNVXNlU2tpbGxCdXR0b24sXG4gIFNDQVNNV3JhcHBlcixcbn0gZnJvbSAnLi9BYm1Ta2lsbE1vZGFsLnN0eWxlcydcblxuZXhwb3J0IGNvbnN0IFNLSUxMX1VTRV9BRlRFUl9TQVZFX0VWRU5UID0gJ21haWEtdXNlLXNraWxsLWFmdGVyLXNhdmUnXG5cbnR5cGUgU2tpbGxNb2RhbEdlbmVyYWwgPSB7XG4gIGlkPzogc3RyaW5nXG4gIG5hbWU/OiBzdHJpbmdcbiAgZGVzY3JpcHRpb24/OiBzdHJpbmdcbiAgY29udGVudD86IHN0cmluZ1xuICBhY2Nlc3NfdHlwZT86IFNraWxsQWNjZXNzVHlwZVxuICBjcmVhdGVkX2J5X25hbWU/OiBzdHJpbmdcbiAgdXBkYXRlZF9hdD86IHN0cmluZ1xufVxuXG50eXBlIFNraWxsTW9kYWxWYWx1ZXMgPSB7XG4gIGlzRWRpdGluZzogYm9vbGVhblxuICBpc1JlYWRPbmx5PzogYm9vbGVhblxuICBpbnRlbnQ/OiAnZ2VuZXJhdGUnIHwgJ3dyaXRlJyB8ICd1cGxvYWQnXG4gIGdlbmVyYWw/OiBTa2lsbE1vZGFsR2VuZXJhbFxufVxuXG50eXBlIEFibVNraWxsTW9kYWxQcm9wcyA9IHtcbiAgYWRkU2tpbGw/OiAoc2tpbGw6IFNraWxsKSA9PiB2b2lkXG4gIHVwZGF0ZVNraWxsSW5MaXN0PzogKHNraWxsOiBTa2lsbCkgPT4gdm9pZFxuICByZW1vdmVTa2lsbD86IChza2lsbElkOiBzdHJpbmcpID0+IHZvaWRcbn1cblxuY29uc3QgaW5pdGlhbFZhbHVlczogU2tpbGxNb2RhbFZhbHVlcyA9IHtcbiAgaXNFZGl0aW5nOiBmYWxzZSxcbiAgZ2VuZXJhbDoge1xuICAgIGlkOiB1bmRlZmluZWQsXG4gICAgbmFtZTogJycsXG4gICAgZGVzY3JpcHRpb246ICcnLFxuICAgIGNvbnRlbnQ6ICcnLFxuICAgIGFjY2Vzc190eXBlOiAnb25seV9tZScsXG4gIH0sXG59XG5cbnR5cGUgU2tpbGxGb3JtQmFzZWxpbmUgPSB7XG4gIG5hbWU6IHN0cmluZ1xuICBkZXNjcmlwdGlvbjogc3RyaW5nXG4gIGNvbnRlbnQ6IHN0cmluZ1xuICBhY2Nlc3NfdHlwZTogU2tpbGxBY2Nlc3NUeXBlXG59XG5cbmNvbnN0IGVtcHR5QmFzZWxpbmU6IFNraWxsRm9ybUJhc2VsaW5lID0ge1xuICBuYW1lOiAnJyxcbiAgZGVzY3JpcHRpb246ICcnLFxuICBjb250ZW50OiAnJyxcbiAgYWNjZXNzX3R5cGU6ICdvbmx5X21lJyxcbn1cblxuY29uc3QgcGFyc2VEZXNjcmlwdGlvbkZyb21Db250ZW50ID0gKGNvbnRlbnQ6IHN0cmluZyk6IHN0cmluZyA9PiB7XG4gIGNvbnN0IGZyb250bWF0dGVyTWF0Y2ggPSBjb250ZW50Lm1hdGNoKC9eLS0tXFxzKlxcbihbXFxzXFxTXSo/KVxcbi0tLS8pXG4gIGlmICghZnJvbnRtYXR0ZXJNYXRjaCkgcmV0dXJuICcnXG4gIGNvbnN0IGRlc2NyaXB0aW9uTWF0Y2ggPSBmcm9udG1hdHRlck1hdGNoWzFdLm1hdGNoKC9eZGVzY3JpcHRpb246XFxzKiguKykkL20pXG4gIHJldHVybiBkZXNjcmlwdGlvbk1hdGNoID8gZGVzY3JpcHRpb25NYXRjaFsxXS50cmltKCkgOiAnJ1xufVxuXG5leHBvcnQgY29uc3QgQWJtU2tpbGxNb2RhbCA9ICh7IGFkZFNraWxsLCB1cGRhdGVTa2lsbEluTGlzdCwgcmVtb3ZlU2tpbGwgfTogQWJtU2tpbGxNb2RhbFByb3BzKSA9PiB7XG4gIGNvbnN0IHsgdCB9ID0gdXNlVHJhbnNsYXRpb24oW1NFQ1RJT05TLmNoYXRBSV0pXG4gIGNvbnN0IHVzZXIgPSB1c2VVc2VyKClcbiAgY29uc3QgeyBoYW5kbGVTbmFja2JhclN1Y2Nlc3MsIGhhbmRsZVNuYWNrYmFyRXJyb3IgfSA9IHVzZVNuYWNrQmFyTWFuYWdlcigpXG4gIGNvbnN0IFtpc09wZW4sIHNldElzT3Blbl0gPSB1c2VTdGF0ZShmYWxzZSlcbiAgY29uc3QgW2lzU3VibWl0dGluZywgc2V0SXNTdWJtaXR0aW5nXSA9IHVzZVN0YXRlKGZhbHNlKVxuICBjb25zdCBbc2hvd0RlbGV0ZSwgc2V0U2hvd0RlbGV0ZV0gPSB1c2VTdGF0ZShmYWxzZSlcbiAgY29uc3QgW3BlbmRpbmdVcGxvYWQsIHNldFBlbmRpbmdVcGxvYWRdID0gdXNlU3RhdGUoZmFsc2UpXG4gIGNvbnN0IFt2YWx1ZXMsIHNldFZhbHVlc10gPSB1c2VTdGF0ZTxTa2lsbE1vZGFsVmFsdWVzPihpbml0aWFsVmFsdWVzKVxuICBjb25zdCBmaWxlSW5wdXRSZWYgPSB1c2VSZWY8SFRNTElucHV0RWxlbWVudD4obnVsbClcbiAgY29uc3QgaW5pdGlhbFJlZiA9IHVzZVJlZjxTa2lsbEZvcm1CYXNlbGluZT4oZW1wdHlCYXNlbGluZSlcblxuICBjb25zdCBpc1JlYWRPbmx5ID0gISF2YWx1ZXMuaXNSZWFkT25seVxuICBjb25zdCBjYW5TaGFyZVdpdGhDb21wYW55ID0gIWlzQ29sbGFib3JhdG9yUm9sZSh1c2VyLnJvbGVfaWQpICYmICFpc1JlYWRPbmx5XG5cbiAgY29uc3QgbmFtZSA9IHZhbHVlcy5nZW5lcmFsPy5uYW1lIHx8ICcnXG4gIGNvbnN0IGRlc2NyaXB0aW9uID0gdmFsdWVzLmdlbmVyYWw/LmRlc2NyaXB0aW9uIHx8ICcnXG4gIGNvbnN0IGNvbnRlbnQgPSB2YWx1ZXMuZ2VuZXJhbD8uY29udGVudCB8fCAnJ1xuICBjb25zdCBhY2Nlc3NUeXBlOiBTa2lsbEFjY2Vzc1R5cGUgPSB2YWx1ZXMuZ2VuZXJhbD8uYWNjZXNzX3R5cGUgfHwgJ29ubHlfbWUnXG4gIGNvbnN0IGVmZmVjdGl2ZUFjY2Vzc1R5cGU6IFNraWxsQWNjZXNzVHlwZSA9IGNhblNoYXJlV2l0aENvbXBhbnkgPyBhY2Nlc3NUeXBlIDogJ29ubHlfbWUnXG4gIGNvbnN0IHNraWxsSWQgPSB2YWx1ZXMuZ2VuZXJhbD8uaWRcbiAgY29uc3QgaXNWYWxpZCA9ICEhbmFtZS50cmltKCkgJiYgISFkZXNjcmlwdGlvbi50cmltKCkgJiYgISFjb250ZW50LnRyaW0oKVxuICBjb25zdCBoYXNDaGFuZ2VzID1cbiAgICBuYW1lLnRyaW0oKSAhPT0gaW5pdGlhbFJlZi5jdXJyZW50Lm5hbWUgfHxcbiAgICBkZXNjcmlwdGlvbi50cmltKCkgIT09IGluaXRpYWxSZWYuY3VycmVudC5kZXNjcmlwdGlvbiB8fFxuICAgIGNvbnRlbnQudHJpbSgpICE9PSBpbml0aWFsUmVmLmN1cnJlbnQuY29udGVudCB8fFxuICAgIChjYW5TaGFyZVdpdGhDb21wYW55ICYmIGVmZmVjdGl2ZUFjY2Vzc1R5cGUgIT09IGluaXRpYWxSZWYuY3VycmVudC5hY2Nlc3NfdHlwZSlcblxuICBjb25zdCBjcmVhdGVkQnlMYWJlbCA9IHVzZU1lbW8oXG4gICAgKCkgPT4gdmFsdWVzLmdlbmVyYWw/LmNyZWF0ZWRfYnlfbmFtZT8udHJpbSgpIHx8IGAke3VzZXIuZmlyc3ROYW1lfSAke3VzZXIubGFzdE5hbWV9YC50cmltKCksXG4gICAgW3ZhbHVlcy5nZW5lcmFsPy5jcmVhdGVkX2J5X25hbWUsIHVzZXIuZmlyc3ROYW1lLCB1c2VyLmxhc3ROYW1lXVxuICApXG5cbiAgY29uc3QgbGFzdFVwZGF0ZWRMYWJlbCA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGNvbnN0IHVwZGF0ZWRBdCA9IHZhbHVlcy5nZW5lcmFsPy51cGRhdGVkX2F0XG4gICAgaWYgKCF1cGRhdGVkQXQpIHJldHVybiAnJ1xuICAgIGNvbnN0IHBhcnNlZCA9IG5ldyBEYXRlKHVwZGF0ZWRBdClcbiAgICBpZiAoTnVtYmVyLmlzTmFOKHBhcnNlZC5nZXRUaW1lKCkpKSByZXR1cm4gJydcbiAgICByZXR1cm4gZm9ybWF0RGF0ZShwYXJzZWQpXG4gIH0sIFt2YWx1ZXMuZ2VuZXJhbD8udXBkYXRlZF9hdF0pXG5cbiAgY29uc3QgaGFuZGxlQ2xvc2UgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgc2V0SXNPcGVuKGZhbHNlKVxuICAgIHNldFNob3dEZWxldGUoZmFsc2UpXG4gICAgc2V0UGVuZGluZ1VwbG9hZChmYWxzZSlcbiAgICBzZXRWYWx1ZXMoaW5pdGlhbFZhbHVlcylcbiAgICBpbml0aWFsUmVmLmN1cnJlbnQgPSBlbXB0eUJhc2VsaW5lXG4gIH0sIFtdKVxuXG4gIGNvbnN0IGhhbmRsZUJhY2tkcm9wQ2xpY2sgPSB1c2VDYWxsYmFjayhcbiAgICAoZXZlbnQ6IE1vdXNlRXZlbnQpID0+IHtcbiAgICAgIGlmIChldmVudC50YXJnZXQgPT09IGV2ZW50LmN1cnJlbnRUYXJnZXQpIHtcbiAgICAgICAgaGFuZGxlQ2xvc2UoKVxuICAgICAgfVxuICAgIH0sXG4gICAgW2hhbmRsZUNsb3NlXVxuICApXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBoYW5kbGVTZXRTa2lsbFZhbHVlcyA9IChldmVudDogYW55KSA9PiB7XG4gICAgICBjb25zdCB7IHNraWxsVmFsdWVzIH0gPSBldmVudC5kZXRhaWwgfHwge31cbiAgICAgIGlmICghc2tpbGxWYWx1ZXMpIHJldHVyblxuXG4gICAgICBjb25zdCBpbmNvbWluZ0dlbmVyYWwgPSB7XG4gICAgICAgIC4uLmluaXRpYWxWYWx1ZXMuZ2VuZXJhbCxcbiAgICAgICAgLi4uc2tpbGxWYWx1ZXMudmFsdWVzPy5nZW5lcmFsLFxuICAgICAgfVxuICAgICAgY29uc3QgaW5jb21pbmdOYW1lID0gKGluY29taW5nR2VuZXJhbC5uYW1lIHx8ICcnKS50cmltKClcbiAgICAgIGNvbnN0IGluY29taW5nRGVzY3JpcHRpb24gPSAoaW5jb21pbmdHZW5lcmFsLmRlc2NyaXB0aW9uIHx8ICcnKS50cmltKClcbiAgICAgIGNvbnN0IGluY29taW5nQ29udGVudCA9IChpbmNvbWluZ0dlbmVyYWwuY29udGVudCB8fCAnJykudHJpbSgpXG4gICAgICBjb25zdCBpbmNvbWluZ0FjY2Vzc1R5cGU6IFNraWxsQWNjZXNzVHlwZSA9IGlzQ29sbGFib3JhdG9yUm9sZSh1c2VyLnJvbGVfaWQpXG4gICAgICAgID8gJ29ubHlfbWUnXG4gICAgICAgIDogaW5jb21pbmdHZW5lcmFsLmFjY2Vzc190eXBlIHx8ICdvbmx5X21lJ1xuICAgICAgY29uc3QgcGFyc2VkRGVzY3JpcHRpb24gPVxuICAgICAgICBpbmNvbWluZ0Rlc2NyaXB0aW9uIHx8IChpbmNvbWluZ0NvbnRlbnQgPyBwYXJzZURlc2NyaXB0aW9uRnJvbUNvbnRlbnQoaW5jb21pbmdDb250ZW50KSA6ICcnKVxuXG4gICAgICBpbml0aWFsUmVmLmN1cnJlbnQgPSBza2lsbFZhbHVlcy52YWx1ZXM/LmlzRWRpdGluZ1xuICAgICAgICA/IHtcbiAgICAgICAgICAgIG5hbWU6IGluY29taW5nTmFtZSxcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBwYXJzZWREZXNjcmlwdGlvbixcbiAgICAgICAgICAgIGNvbnRlbnQ6IGluY29taW5nQ29udGVudCxcbiAgICAgICAgICAgIGFjY2Vzc190eXBlOiBpbmNvbWluZ0FjY2Vzc1R5cGUsXG4gICAgICAgICAgfVxuICAgICAgICA6IGVtcHR5QmFzZWxpbmVcblxuICAgICAgc2V0VmFsdWVzKHtcbiAgICAgICAgLi4uaW5pdGlhbFZhbHVlcyxcbiAgICAgICAgLi4uc2tpbGxWYWx1ZXMudmFsdWVzLFxuICAgICAgICBnZW5lcmFsOiB7XG4gICAgICAgICAgLi4uaW5jb21pbmdHZW5lcmFsLFxuICAgICAgICAgIGRlc2NyaXB0aW9uOiBwYXJzZWREZXNjcmlwdGlvbixcbiAgICAgICAgICBhY2Nlc3NfdHlwZTogaW5jb21pbmdBY2Nlc3NUeXBlLFxuICAgICAgICB9LFxuICAgICAgfSlcbiAgICAgIHNldFBlbmRpbmdVcGxvYWQoc2tpbGxWYWx1ZXMudmFsdWVzPy5pbnRlbnQgPT09ICd1cGxvYWQnKVxuICAgICAgc2V0SXNPcGVuKCEhc2tpbGxWYWx1ZXMuaXNPcGVuKVxuICAgIH1cblxuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2FibS1za2lsbC1tb2RhbC1zZXQtdmFsdWVzJywgaGFuZGxlU2V0U2tpbGxWYWx1ZXMpXG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2FibS1za2lsbC1tb2RhbC1zZXQtdmFsdWVzJywgaGFuZGxlU2V0U2tpbGxWYWx1ZXMpXG4gICAgfVxuICB9LCBbdXNlci5yb2xlX2lkXSlcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChpc09wZW4gJiYgcGVuZGluZ1VwbG9hZCkge1xuICAgICAgc2V0UGVuZGluZ1VwbG9hZChmYWxzZSlcbiAgICAgIGZpbGVJbnB1dFJlZi5jdXJyZW50Py5jbGljaygpXG4gICAgfVxuICB9LCBbaXNPcGVuLCBwZW5kaW5nVXBsb2FkXSlcblxuICBjb25zdCBoYW5kbGVDaGFuZ2VGaWVsZCA9IChmaWVsZDogJ25hbWUnIHwgJ2Rlc2NyaXB0aW9uJyB8ICdjb250ZW50JywgdmFsdWU6IHN0cmluZykgPT4ge1xuICAgIHNldFZhbHVlcyhwcmV2ID0+ICh7XG4gICAgICAuLi5wcmV2LFxuICAgICAgZ2VuZXJhbDogeyAuLi5wcmV2LmdlbmVyYWwsIFtmaWVsZF06IHZhbHVlIH0sXG4gICAgfSkpXG4gIH1cblxuICBjb25zdCBoYW5kbGVBY2Nlc3NUeXBlQ2hhbmdlID0gKGNoZWNrZWQ6IGJvb2xlYW4pID0+IHtcbiAgICBpZiAoIWNhblNoYXJlV2l0aENvbXBhbnkpIHJldHVyblxuICAgIHNldFZhbHVlcyhwcmV2ID0+ICh7XG4gICAgICAuLi5wcmV2LFxuICAgICAgZ2VuZXJhbDoge1xuICAgICAgICAuLi5wcmV2LmdlbmVyYWwsXG4gICAgICAgIGFjY2Vzc190eXBlOiBjaGVja2VkID8gJ2NvbXBhbnknIDogJ29ubHlfbWUnLFxuICAgICAgfSxcbiAgICB9KSlcbiAgfVxuXG4gIGNvbnN0IGhhbmRsZVVwbG9hZENsaWNrID0gKCkgPT4ge1xuICAgIGZpbGVJbnB1dFJlZi5jdXJyZW50Py5jbGljaygpXG4gIH1cblxuICBjb25zdCBoYW5kbGVGaWxlQ2hhbmdlID0gYXN5bmMgKGV2ZW50OiBDaGFuZ2VFdmVudDxIVE1MSW5wdXRFbGVtZW50PikgPT4ge1xuICAgIGNvbnN0IGZpbGUgPSBldmVudC50YXJnZXQuZmlsZXM/LlswXVxuICAgIGlmIChmaWxlSW5wdXRSZWYuY3VycmVudCkge1xuICAgICAgZmlsZUlucHV0UmVmLmN1cnJlbnQudmFsdWUgPSAnJ1xuICAgIH1cbiAgICBpZiAoIWZpbGUpIHJldHVyblxuXG4gICAgY29uc3QgaXNNYXJrZG93biA9IC9cXC4obWR8bWFya2Rvd24pJC9pLnRlc3QoZmlsZS5uYW1lKVxuICAgIGlmICghaXNNYXJrZG93bikge1xuICAgICAgaGFuZGxlU25hY2tiYXJFcnJvcih0KCdteVNraWxscy51cGxvYWRFcnJvcicpKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHRleHQgPSBhd2FpdCBmaWxlLnRleHQoKVxuICAgICAgY29uc3QgYmFzZU5hbWUgPSBmaWxlLm5hbWUucmVwbGFjZSgvXFwuKG1kfG1hcmtkb3duKSQvaSwgJycpXG4gICAgICBjb25zdCBwYXJzZWREZXNjcmlwdGlvbiA9IHBhcnNlRGVzY3JpcHRpb25Gcm9tQ29udGVudCh0ZXh0KVxuICAgICAgc2V0VmFsdWVzKHByZXYgPT4gKHtcbiAgICAgICAgLi4ucHJldixcbiAgICAgICAgZ2VuZXJhbDoge1xuICAgICAgICAgIC4uLnByZXYuZ2VuZXJhbCxcbiAgICAgICAgICBjb250ZW50OiB0ZXh0LFxuICAgICAgICAgIGRlc2NyaXB0aW9uOiBwcmV2LmdlbmVyYWw/LmRlc2NyaXB0aW9uPy50cmltKClcbiAgICAgICAgICAgID8gcHJldi5nZW5lcmFsLmRlc2NyaXB0aW9uXG4gICAgICAgICAgICA6IHBhcnNlZERlc2NyaXB0aW9uIHx8IHByZXYuZ2VuZXJhbD8uZGVzY3JpcHRpb24gfHwgJycsXG4gICAgICAgICAgbmFtZTogcHJldi5nZW5lcmFsPy5uYW1lPy50cmltKCkgPyBwcmV2LmdlbmVyYWwubmFtZSA6IGJhc2VOYW1lLFxuICAgICAgICB9LFxuICAgICAgfSkpXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGhhbmRsZVNuYWNrYmFyRXJyb3IodCgnbXlTa2lsbHMudXBsb2FkRXJyb3InKSlcbiAgICB9XG4gIH1cblxuICBjb25zdCBwZXJzaXN0U2tpbGwgPSBhc3luYyAoKTogUHJvbWlzZTxTa2lsbCB8IG51bGw+ID0+IHtcbiAgICBjb25zdCBwYXlsb2FkID0ge1xuICAgICAgbmFtZTogbmFtZS50cmltKCksXG4gICAgICBkZXNjcmlwdGlvbjogZGVzY3JpcHRpb24udHJpbSgpLFxuICAgICAgY29udGVudDogY29udGVudC50cmltKCksXG4gICAgICBhY2Nlc3NfdHlwZTogZWZmZWN0aXZlQWNjZXNzVHlwZSxcbiAgICB9XG5cbiAgICBpZiAodmFsdWVzLmlzRWRpdGluZyAmJiBza2lsbElkKSB7XG4gICAgICBjb25zdCB1cGRhdGVkID0gYXdhaXQgdXBkYXRlU2tpbGwoc2tpbGxJZCwgcGF5bG9hZClcbiAgICAgIHVwZGF0ZVNraWxsSW5MaXN0Py4odXBkYXRlZClcbiAgICAgIGhhbmRsZVNuYWNrYmFyU3VjY2Vzcyh0KCdteVNraWxscy51cGRhdGVTdWNjZXNzJykpXG4gICAgICByZXR1cm4gdXBkYXRlZFxuICAgIH1cblxuICAgIGNvbnN0IGNyZWF0ZWQgPSBhd2FpdCBjcmVhdGVTa2lsbChwYXlsb2FkKVxuICAgIGFkZFNraWxsPy4oY3JlYXRlZClcbiAgICBoYW5kbGVTbmFja2JhclN1Y2Nlc3ModCgnbXlTa2lsbHMuY3JlYXRlU3VjY2VzcycpKVxuICAgIHJldHVybiBjcmVhdGVkXG4gIH1cblxuICBjb25zdCBoYW5kbGVTYXZlID0gYXN5bmMgKCkgPT4ge1xuICAgIGlmICghaXNWYWxpZCB8fCBpc1N1Ym1pdHRpbmcgfHwgIWhhc0NoYW5nZXMpIHJldHVyblxuICAgIHNldElzU3VibWl0dGluZyh0cnVlKVxuICAgIHRyeSB7XG4gICAgICBhd2FpdCBwZXJzaXN0U2tpbGwoKVxuICAgICAgaGFuZGxlQ2xvc2UoKVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBoYW5kbGVTbmFja2JhckVycm9yKHZhbHVlcy5pc0VkaXRpbmcgPyB0KCdteVNraWxscy51cGRhdGVFcnJvcicpIDogdCgnbXlTa2lsbHMuY3JlYXRlRXJyb3InKSlcbiAgICB9IGZpbmFsbHkge1xuICAgICAgc2V0SXNTdWJtaXR0aW5nKGZhbHNlKVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGhhbmRsZVNhdmVBbmRVc2UgPSBhc3luYyAoKSA9PiB7XG4gICAgaWYgKCFpc1ZhbGlkIHx8IGlzU3VibWl0dGluZykgcmV0dXJuXG4gICAgc2V0SXNTdWJtaXR0aW5nKHRydWUpXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHNhdmVkU2tpbGwgPSBhd2FpdCBwZXJzaXN0U2tpbGwoKVxuICAgICAgaWYgKHNhdmVkU2tpbGwpIHtcbiAgICAgICAgZG9jdW1lbnQuZGlzcGF0Y2hFdmVudChcbiAgICAgICAgICBuZXcgQ3VzdG9tRXZlbnQoU0tJTExfVVNFX0FGVEVSX1NBVkVfRVZFTlQsIHtcbiAgICAgICAgICAgIGRldGFpbDogeyBza2lsbDogc2F2ZWRTa2lsbCB9LFxuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgIH1cbiAgICAgIGhhbmRsZUNsb3NlKClcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgaGFuZGxlU25hY2tiYXJFcnJvcih2YWx1ZXMuaXNFZGl0aW5nID8gdCgnbXlTa2lsbHMudXBkYXRlRXJyb3InKSA6IHQoJ215U2tpbGxzLmNyZWF0ZUVycm9yJykpXG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHNldElzU3VibWl0dGluZyhmYWxzZSlcbiAgICB9XG4gIH1cblxuICBjb25zdCBoYW5kbGVDb25maXJtRGVsZXRlID0gYXN5bmMgKCkgPT4ge1xuICAgIGlmICghc2tpbGxJZCkgcmV0dXJuXG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGRlbGV0ZVNraWxsKHNraWxsSWQpXG4gICAgICByZW1vdmVTa2lsbD8uKHNraWxsSWQpXG4gICAgICBoYW5kbGVTbmFja2JhclN1Y2Nlc3ModCgnbXlTa2lsbHMuZGVsZXRlU3VjY2VzcycpKVxuICAgICAgaGFuZGxlQ2xvc2UoKVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBoYW5kbGVTbmFja2JhckVycm9yKHQoJ215U2tpbGxzLmRlbGV0ZUVycm9yJykpXG4gICAgfVxuICB9XG5cbiAgLyoqIFNraWxsIGFqZW5hIGVuIG1vZG8gbGVjdHVyYTogYWJyZSB1biBjaGF0IG51ZXZvIGNvbiBlbCBwcmltZXIgYWdlbnRlIHkgbGEgbWVuY2nDs24geWEgcHVlc3RhLiAqL1xuICBjb25zdCBoYW5kbGVVc2VTa2lsbCA9ICgpID0+IHtcbiAgICBpZiAoIXNraWxsSWQpIHJldHVyblxuICAgIGRvY3VtZW50LmRpc3BhdGNoRXZlbnQoXG4gICAgICBuZXcgQ3VzdG9tRXZlbnQoU0tJTExfVVNFX0FGVEVSX1NBVkVfRVZFTlQsIHtcbiAgICAgICAgZGV0YWlsOiB7XG4gICAgICAgICAgc2tpbGw6IHsgaWQ6IHNraWxsSWQsIG5hbWUsIGRlc2NyaXB0aW9uLCBjb250ZW50LCBhY2Nlc3NfdHlwZTogYWNjZXNzVHlwZSB9LFxuICAgICAgICAgIHVzZUZpcnN0QWdlbnQ6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICB9KVxuICAgIClcbiAgICBoYW5kbGVDbG9zZSgpXG4gIH1cblxuICBpZiAoIWlzT3BlbikgcmV0dXJuIG51bGxcblxuICBjb25zdCBjb250YWluZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW9kYWwtcm9vdC1hY3Rpb25zJylcbiAgaWYgKCFjb250YWluZXIpIHJldHVybiBudWxsXG5cbiAgY29uc3QgZWRpdE9yQ3JlYXRlVGl0bGUgPSB2YWx1ZXMuaXNFZGl0aW5nID8gdCgnbXlTa2lsbHMuZWRpdFRpdGxlJykgOiB0KCdteVNraWxscy5jcmVhdGVUaXRsZScpXG4gIGNvbnN0IG1vZGFsVGl0bGUgPSBpc1JlYWRPbmx5ID8gdCgnbXlTa2lsbHMudmlld1RpdGxlJykgOiBlZGl0T3JDcmVhdGVUaXRsZVxuXG4gIGNvbnN0IHByZXZpZXdCb2R5ID0gKFxuICAgIDxTQ0FTTVByZXZpZXdCb2R5PlxuICAgICAgPFNDQVNNUHJldmlld0hlYWRpbmdCbG9jaz5cbiAgICAgICAgPFNDQVNNUHJldmlld05hbWU+e25hbWV9PC9TQ0FTTVByZXZpZXdOYW1lPlxuICAgICAgICB7ZGVzY3JpcHRpb24gPyA8U0NBU01QcmV2aWV3RGVzY3JpcHRpb24+e2Rlc2NyaXB0aW9ufTwvU0NBU01QcmV2aWV3RGVzY3JpcHRpb24+IDogbnVsbH1cbiAgICAgIDwvU0NBU01QcmV2aWV3SGVhZGluZ0Jsb2NrPlxuXG4gICAgICA8U0NBU01QcmV2aWV3TWV0YWRhdGFSb3c+XG4gICAgICAgIDxTQ0FTTU1ldGFkYXRhSXRlbT5cbiAgICAgICAgICA8U0NBU01QcmV2aWV3TWV0YWRhdGFMYWJlbD57dCgnbXlTa2lsbHMuY3JlYXRlZEJ5Jyl9PC9TQ0FTTVByZXZpZXdNZXRhZGF0YUxhYmVsPlxuICAgICAgICAgIDxTQ0FTTVByZXZpZXdNZXRhZGF0YVZhbHVlPntjcmVhdGVkQnlMYWJlbH08L1NDQVNNUHJldmlld01ldGFkYXRhVmFsdWU+XG4gICAgICAgIDwvU0NBU01NZXRhZGF0YUl0ZW0+XG4gICAgICAgIHtsYXN0VXBkYXRlZExhYmVsID8gKFxuICAgICAgICAgIDxTQ0FTTU1ldGFkYXRhSXRlbT5cbiAgICAgICAgICAgIDxTQ0FTTVByZXZpZXdNZXRhZGF0YUxhYmVsPnt0KCdteVNraWxscy5sYXN0VXBkYXRlZCcpfTwvU0NBU01QcmV2aWV3TWV0YWRhdGFMYWJlbD5cbiAgICAgICAgICAgIDxTQ0FTTVByZXZpZXdNZXRhZGF0YVZhbHVlPntsYXN0VXBkYXRlZExhYmVsfTwvU0NBU01QcmV2aWV3TWV0YWRhdGFWYWx1ZT5cbiAgICAgICAgICA8L1NDQVNNTWV0YWRhdGFJdGVtPlxuICAgICAgICApIDogbnVsbH1cbiAgICAgIDwvU0NBU01QcmV2aWV3TWV0YWRhdGFSb3c+XG5cbiAgICAgIDxTQ0FTTVByZXZpZXdDb250ZW50UGFuZWw+XG4gICAgICAgIDxTQ0FTTVByZXZpZXdDb250ZW50Qm94Pntjb250ZW50fTwvU0NBU01QcmV2aWV3Q29udGVudEJveD5cbiAgICAgIDwvU0NBU01QcmV2aWV3Q29udGVudFBhbmVsPlxuICAgIDwvU0NBU01QcmV2aWV3Qm9keT5cbiAgKVxuXG4gIHJldHVybiBjcmVhdGVQb3J0YWwoXG4gICAgPEJhY2tkcm9wIHpJbmRleD17MTExMn0gb25DbGljaz17aGFuZGxlQmFja2Ryb3BDbGlja30+XG4gICAgICA8U0NBU01XcmFwcGVyIG9uQ2xpY2s9e2V2ZW50ID0+IGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpfT5cbiAgICAgICAgPFNDQVNNSGVhZGVyPlxuICAgICAgICAgIDxTQ0FTTUhlYWRlclRpdGxlPnttb2RhbFRpdGxlfTwvU0NBU01IZWFkZXJUaXRsZT5cbiAgICAgICAgICA8U0NBU01DbG9zZUJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgb25DbGljaz17aGFuZGxlQ2xvc2V9IGFyaWEtbGFiZWw9e3QoJ215U2tpbGxzLmNsb3NlJyl9PlxuICAgICAgICAgICAgPENyb3NzIGNvbG9yPVwiI2E2YTZhNlwiIHdpZHRoPXsxOH0gaGVpZ2h0PXsxOH0gLz5cbiAgICAgICAgICA8L1NDQVNNQ2xvc2VCdXR0b24+XG4gICAgICAgIDwvU0NBU01IZWFkZXI+XG5cbiAgICAgICAge2lzUmVhZE9ubHkgPyAoXG4gICAgICAgICAgcHJldmlld0JvZHlcbiAgICAgICAgKSA6IChcbiAgICAgICAgICA8U0NBU01Cb2R5PlxuICAgICAgICAgICAgPFNDQVNNRmllbGRCb3ggJGhlaWdodD17NTB9PlxuICAgICAgICAgICAgICA8U0NBU01GaWVsZExhYmVsIGh0bWxGb3I9XCJza2lsbC1uYW1lLWlucHV0XCI+e3QoJ215U2tpbGxzLm5hbWVMYWJlbCcpfTwvU0NBU01GaWVsZExhYmVsPlxuICAgICAgICAgICAgICA8U0NBU01GaWVsZElucHV0XG4gICAgICAgICAgICAgICAgaWQ9XCJza2lsbC1uYW1lLWlucHV0XCJcbiAgICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgICAgbWF4TGVuZ3RoPXsxNTB9XG4gICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9e3QoJ215U2tpbGxzLm5hbWVQbGFjZWhvbGRlcicpfVxuICAgICAgICAgICAgICAgIHZhbHVlPXtuYW1lfVxuICAgICAgICAgICAgICAgIGRpc2FibGVkPXtpc1N1Ym1pdHRpbmd9XG4gICAgICAgICAgICAgICAgb25DaGFuZ2U9e2V2ZW50ID0+IGhhbmRsZUNoYW5nZUZpZWxkKCduYW1lJywgZXZlbnQudGFyZ2V0LnZhbHVlKX1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvU0NBU01GaWVsZEJveD5cblxuICAgICAgICAgICAgPFNDQVNNRmllbGRCb3ggJGhlaWdodD17MTIwfSAkY2xpcE92ZXJmbG93PlxuICAgICAgICAgICAgICA8U0NBU01GaWVsZExhYmVsIGh0bWxGb3I9XCJza2lsbC1kZXNjcmlwdGlvbi1pbnB1dFwiPnt0KCdteVNraWxscy5kZXNjcmlwdGlvbkxhYmVsJyl9PC9TQ0FTTUZpZWxkTGFiZWw+XG4gICAgICAgICAgICAgIDxTQ0FTTUZpZWxkVGV4dGFyZWFcbiAgICAgICAgICAgICAgICBpZD1cInNraWxsLWRlc2NyaXB0aW9uLWlucHV0XCJcbiAgICAgICAgICAgICAgICBtYXhMZW5ndGg9ezUwMH1cbiAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj17dCgnbXlTa2lsbHMuZGVzY3JpcHRpb25QbGFjZWhvbGRlcicpfVxuICAgICAgICAgICAgICAgIHZhbHVlPXtkZXNjcmlwdGlvbn1cbiAgICAgICAgICAgICAgICBkaXNhYmxlZD17aXNTdWJtaXR0aW5nfVxuICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXtldmVudCA9PiBoYW5kbGVDaGFuZ2VGaWVsZCgnZGVzY3JpcHRpb24nLCBldmVudC50YXJnZXQudmFsdWUpfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgPC9TQ0FTTUZpZWxkQm94PlxuXG4gICAgICAgICAgICB7Y2FuU2hhcmVXaXRoQ29tcGFueSA/IChcbiAgICAgICAgICAgICAgPFNDQVNNU3dpdGNoUm93PlxuICAgICAgICAgICAgICAgIDxTd2l0Y2hcbiAgICAgICAgICAgICAgICAgIGNoZWNrZWQ9e2FjY2Vzc1R5cGUgPT09ICdjb21wYW55J31cbiAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXtoYW5kbGVBY2Nlc3NUeXBlQ2hhbmdlfVxuICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ9e2lzU3VibWl0dGluZ31cbiAgICAgICAgICAgICAgICAgIGFyaWEtbGFiZWw9e3QoJ215U2tpbGxzLnNoYXJlV2l0aENvbXBhbnknKX1cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIDxTQ0FTTVN3aXRjaExhYmVsPnt0KCdteVNraWxscy5zaGFyZVdpdGhDb21wYW55Jyl9PC9TQ0FTTVN3aXRjaExhYmVsPlxuICAgICAgICAgICAgICA8L1NDQVNNU3dpdGNoUm93PlxuICAgICAgICAgICAgKSA6IG51bGx9XG5cbiAgICAgICAgICAgIDxTQ0FTTUluc3RydWN0aW9uc1BhbmVsPlxuICAgICAgICAgICAgICA8U0NBU01JbnN0cnVjdGlvbnNIZWFkZXI+XG4gICAgICAgICAgICAgICAgPFNDQVNNSW5zdHJ1Y3Rpb25zVGl0bGU+e3QoJ215U2tpbGxzLmluc3RydWN0aW9uc0xhYmVsJyl9PC9TQ0FTTUluc3RydWN0aW9uc1RpdGxlPlxuICAgICAgICAgICAgICAgIDxTQ0FTTVVwbG9hZEJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgb25DbGljaz17aGFuZGxlVXBsb2FkQ2xpY2t9IGRpc2FibGVkPXtpc1N1Ym1pdHRpbmd9PlxuICAgICAgICAgICAgICAgICAgPEZpbGVVcGxvYWQgd2lkdGg9ezE4fSBoZWlnaHQ9ezE4fSBjb2xvcj1cIiMwOENcIiAvPlxuICAgICAgICAgICAgICAgICAge3QoJ215U2tpbGxzLnVwbG9hZE1kJyl9XG4gICAgICAgICAgICAgICAgPC9TQ0FTTVVwbG9hZEJ1dHRvbj5cbiAgICAgICAgICAgICAgICA8U0NBU01IaWRkZW5GaWxlSW5wdXRcbiAgICAgICAgICAgICAgICAgIHJlZj17ZmlsZUlucHV0UmVmfVxuICAgICAgICAgICAgICAgICAgdHlwZT1cImZpbGVcIlxuICAgICAgICAgICAgICAgICAgYWNjZXB0PVwiLm1kLC5tYXJrZG93bix0ZXh0L21hcmtkb3duXCJcbiAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXtoYW5kbGVGaWxlQ2hhbmdlfVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgIDwvU0NBU01JbnN0cnVjdGlvbnNIZWFkZXI+XG5cbiAgICAgICAgICAgICAgPFNDQVNNSW5zdHJ1Y3Rpb25zRmllbGQ+XG4gICAgICAgICAgICAgICAgPFNDQVNNSW5zdHJ1Y3Rpb25zVGV4dGFyZWFcbiAgICAgICAgICAgICAgICAgIGlkPVwic2tpbGwtY29udGVudC1pbnB1dFwiXG4gICAgICAgICAgICAgICAgICBtYXhMZW5ndGg9ezEwMDAwMH1cbiAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPXt0KCdteVNraWxscy5jb250ZW50UGxhY2Vob2xkZXInKX1cbiAgICAgICAgICAgICAgICAgIHZhbHVlPXtjb250ZW50fVxuICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ9e2lzU3VibWl0dGluZ31cbiAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXtldmVudCA9PiBoYW5kbGVDaGFuZ2VGaWVsZCgnY29udGVudCcsIGV2ZW50LnRhcmdldC52YWx1ZSl9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPC9TQ0FTTUluc3RydWN0aW9uc0ZpZWxkPlxuICAgICAgICAgICAgPC9TQ0FTTUluc3RydWN0aW9uc1BhbmVsPlxuICAgICAgICAgIDwvU0NBU01Cb2R5PlxuICAgICAgICApfVxuXG4gICAgICAgIDxTQ0FTTUZvb3Rlcj5cbiAgICAgICAgICB7aXNSZWFkT25seSA/IChcbiAgICAgICAgICAgIDxTQ0FTTVVzZVNraWxsQnV0dG9uIHR5cGU9XCJidXR0b25cIiBvbkNsaWNrPXtoYW5kbGVVc2VTa2lsbH0+XG4gICAgICAgICAgICAgIHt0KCdteVNraWxscy51c2VTa2lsbCcpfVxuICAgICAgICAgICAgPC9TQ0FTTVVzZVNraWxsQnV0dG9uPlxuICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICA8PlxuICAgICAgICAgICAgICB7dmFsdWVzLmlzRWRpdGluZyA/IChcbiAgICAgICAgICAgICAgICA8U0NBU01EZWxldGVTbG90PlxuICAgICAgICAgICAgICAgICAgPFNDQVNNQ2FuY2VsQnV0dG9uIHR5cGU9XCJidXR0b25cIiBvbkNsaWNrPXsoKSA9PiBzZXRTaG93RGVsZXRlKHRydWUpfSBkaXNhYmxlZD17aXNTdWJtaXR0aW5nfT5cbiAgICAgICAgICAgICAgICAgICAge3QoJ215U2tpbGxzLmRlbGV0ZScpfVxuICAgICAgICAgICAgICAgICAgPC9TQ0FTTUNhbmNlbEJ1dHRvbj5cbiAgICAgICAgICAgICAgICA8L1NDQVNNRGVsZXRlU2xvdD5cbiAgICAgICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAgICAgIDxTQ0FTTVNhdmVPdXRsaW5lZEJ1dHRvblxuICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgIG9uQ2xpY2s9e2hhbmRsZVNhdmV9XG4gICAgICAgICAgICAgICAgZGlzYWJsZWQ9eyFpc1ZhbGlkIHx8IGlzU3VibWl0dGluZyB8fCAhaGFzQ2hhbmdlc31cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIHtpc1N1Ym1pdHRpbmcgPyA8TG9hZGVyIHNpemU9XCJzbWFsbFwiIC8+IDogdCgnbXlTa2lsbHMuc2F2ZScpfVxuICAgICAgICAgICAgICA8L1NDQVNNU2F2ZU91dGxpbmVkQnV0dG9uPlxuICAgICAgICAgICAgICA8U0NBU01TYXZlUHJpbWFyeUJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgb25DbGljaz17aGFuZGxlU2F2ZUFuZFVzZX0gZGlzYWJsZWQ9eyFpc1ZhbGlkIHx8IGlzU3VibWl0dGluZ30+XG4gICAgICAgICAgICAgICAge2lzU3VibWl0dGluZyA/IDxMb2FkZXIgc2l6ZT1cInNtYWxsXCIgLz4gOiB0KCdteVNraWxscy5zYXZlQW5kVXNlJyl9XG4gICAgICAgICAgICAgIDwvU0NBU01TYXZlUHJpbWFyeUJ1dHRvbj5cbiAgICAgICAgICAgIDwvPlxuICAgICAgICAgICl9XG4gICAgICAgIDwvU0NBU01Gb290ZXI+XG4gICAgICA8L1NDQVNNV3JhcHBlcj5cblxuICAgICAge3Nob3dEZWxldGUgJiYgc2tpbGxJZCA/IChcbiAgICAgICAgPERlbGV0ZVF1ZXN0aW9uTW9kYWxcbiAgICAgICAgICBvbkNsb3NlPXsoKSA9PiBzZXRTaG93RGVsZXRlKGZhbHNlKX1cbiAgICAgICAgICBoYW5kbGVycz17e1xuICAgICAgICAgICAgaGFuZGxlQ29uZmlybUFjdGlvbjogaGFuZGxlQ29uZmlybURlbGV0ZSxcbiAgICAgICAgICB9fVxuICAgICAgICAgIGNoYXQ9e3sgdGl0bGU6IG5hbWUsIGlkOiBza2lsbElkIH19XG4gICAgICAgICAgYWN0aW9uPVwic2tpbGxcIlxuICAgICAgICAvPlxuICAgICAgKSA6IG51bGx9XG4gICAgPC9CYWNrZHJvcD4sXG4gICAgY29udGFpbmVyXG4gIClcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUE7QUFDQSxTQUFrQ0EsV0FBVyxFQUFFQyxTQUFTLEVBQUVDLE9BQU8sRUFBRUMsTUFBTSxFQUFFQyxRQUFRLFFBQVEsT0FBTztBQUNsRyxTQUFTQyxZQUFZLFFBQVEsV0FBVztBQUN4QyxTQUFTQyxLQUFLLFFBQVEsd0NBQXdDO0FBQzlELFNBQVNDLFVBQVUsUUFBUSw2Q0FBNkM7QUFDeEUsU0FBU0MsY0FBYyxRQUFRLGVBQWU7QUFDOUMsU0FBU0MsUUFBUSxRQUFRLHNCQUFzQjtBQUMvQyxTQUFTQyxNQUFNLFFBQVEsb0JBQW9CO0FBQzNDLFNBQVNDLE1BQU0sUUFBUSxvQkFBb0I7QUFDM0MsU0FBU0MsUUFBUSxRQUFRLDJCQUEyQjtBQUNwRCxTQUFTQyxPQUFPLEVBQUVDLGtCQUFrQixRQUFRLDJCQUEyQjtBQUN2RSxTQUFTQyxrQkFBa0IsUUFBUSxzREFBc0Q7QUFDekYsU0FBU0MsVUFBVSxRQUFRLHFCQUFxQjtBQUNoRCxTQUFTQyxXQUFXLFFBQVEsMkNBQTJDO0FBQ3ZFLFNBQVNDLFdBQVcsUUFBUSwyQ0FBMkM7QUFDdkUsU0FBU0MsV0FBVyxRQUFRLDJDQUEyQztBQUV2RSxTQUFTQyxtQkFBbUIsUUFBUSw0Q0FBNEM7QUFDaEYsU0FDRUMsaUJBQWlCLEVBQ2pCQyxnQkFBZ0IsRUFDaEJDLFNBQVMsRUFDVEMsZUFBZSxFQUNmQyxhQUFhLEVBQ2JDLGVBQWUsRUFDZkMsZUFBZSxFQUNmQyxrQkFBa0IsRUFDbEJDLFdBQVcsRUFDWEMsV0FBVyxFQUNYQyxnQkFBZ0IsRUFDaEJDLG9CQUFvQixFQUNwQkMsc0JBQXNCLEVBQ3RCQyx1QkFBdUIsRUFDdkJDLHNCQUFzQixFQUN0QkMseUJBQXlCLEVBQ3pCQyxzQkFBc0IsRUFDdEJDLGlCQUFpQixFQUNqQkMsZ0JBQWdCLEVBQ2hCQyxzQkFBc0IsRUFDdEJDLHdCQUF3QixFQUN4QkMsdUJBQXVCLEVBQ3ZCQyx3QkFBd0IsRUFDeEJDLHlCQUF5QixFQUN6QkMsdUJBQXVCLEVBQ3ZCQyx5QkFBeUIsRUFDekJDLGdCQUFnQixFQUNoQkMsdUJBQXVCLEVBQ3ZCQyxzQkFBc0IsRUFDdEJDLGdCQUFnQixFQUNoQkMsY0FBYyxFQUNkQyxpQkFBaUIsRUFDakJDLG1CQUFtQixFQUNuQkMsWUFBWSxRQUNQLHdCQUF3QjtBQUFBLFNBQUFDLEdBQUEsSUFBQUMsSUFBQSxFQUFBQyxJQUFBLElBQUFDLEtBQUEsRUFBQUMsUUFBQSxJQUFBQyxTQUFBO0FBRS9CLE9BQU8sSUFBTUMsMEJBQTBCLEdBQUcsMkJBQTJCO0FBeUJyRSxJQUFNQyxhQUErQixHQUFHO0VBQ3RDQyxTQUFTLEVBQUUsS0FBSztFQUNoQkMsT0FBTyxFQUFFO0lBQ1BDLEVBQUUsRUFBRUMsU0FBUztJQUNiQyxJQUFJLEVBQUUsRUFBRTtJQUNSQyxXQUFXLEVBQUUsRUFBRTtJQUNmQyxPQUFPLEVBQUUsRUFBRTtJQUNYQyxXQUFXLEVBQUU7RUFDZjtBQUNGLENBQUM7QUFTRCxJQUFNQyxhQUFnQyxHQUFHO0VBQ3ZDSixJQUFJLEVBQUUsRUFBRTtFQUNSQyxXQUFXLEVBQUUsRUFBRTtFQUNmQyxPQUFPLEVBQUUsRUFBRTtFQUNYQyxXQUFXLEVBQUU7QUFDZixDQUFDO0FBRUQsSUFBTUUsMkJBQTJCLEdBQUcsU0FBOUJBLDJCQUEyQkEsQ0FBSUgsT0FBZSxFQUFhO0VBQy9ELElBQU1JLGdCQUFnQixHQUFHSixPQUFPLENBQUNLLEtBQUssQ0FBQywwQkFBMEIsQ0FBQztFQUNsRSxJQUFJLENBQUNELGdCQUFnQixFQUFFLE9BQU8sRUFBRTtFQUNoQyxJQUFNRSxnQkFBZ0IsR0FBR0YsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUNDLEtBQUssQ0FBQyx3QkFBd0IsQ0FBQztFQUM1RSxPQUFPQyxnQkFBZ0IsR0FBR0EsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUNDLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRTtBQUMzRCxDQUFDO0FBRUQsT0FBTyxJQUFNQyxhQUFhLEdBQUcsU0FBaEJBLGFBQWFBLENBQUFDLElBQUEsRUFBeUU7RUFBQSxJQUFBQyxlQUFBLEVBQUFDLGdCQUFBLEVBQUFDLGdCQUFBLEVBQUFDLGdCQUFBLEVBQUFDLGdCQUFBLEVBQUFDLGdCQUFBLEVBQUFDLGdCQUFBO0VBQUEsSUFBbkVDLFFBQVEsR0FBQVIsSUFBQSxDQUFSUSxRQUFRO0lBQUVDLGlCQUFpQixHQUFBVCxJQUFBLENBQWpCUyxpQkFBaUI7SUFBRUMsV0FBVyxHQUFBVixJQUFBLENBQVhVLFdBQVc7RUFDdEUsSUFBQUMsZUFBQSxHQUFjakYsY0FBYyxDQUFDLENBQUNJLFFBQVEsQ0FBQzhFLE1BQU0sQ0FBQyxDQUFDO0lBQXZDQyxDQUFDLEdBQUFGLGVBQUEsQ0FBREUsQ0FBQztFQUNULElBQU1DLElBQUksR0FBRy9FLE9BQU8sQ0FBQyxDQUFDO0VBQ3RCLElBQUFnRixtQkFBQSxHQUF1RDlFLGtCQUFrQixDQUFDLENBQUM7SUFBbkUrRSxxQkFBcUIsR0FBQUQsbUJBQUEsQ0FBckJDLHFCQUFxQjtJQUFFQyxtQkFBbUIsR0FBQUYsbUJBQUEsQ0FBbkJFLG1CQUFtQjtFQUNsRCxJQUFBQyxTQUFBLEdBQTRCNUYsUUFBUSxDQUFDLEtBQUssQ0FBQztJQUFBNkYsVUFBQSxHQUFBQyxjQUFBLENBQUFGLFNBQUE7SUFBcENHLE1BQU0sR0FBQUYsVUFBQTtJQUFFRyxTQUFTLEdBQUFILFVBQUE7RUFDeEIsSUFBQUksVUFBQSxHQUF3Q2pHLFFBQVEsQ0FBQyxLQUFLLENBQUM7SUFBQWtHLFVBQUEsR0FBQUosY0FBQSxDQUFBRyxVQUFBO0lBQWhERSxZQUFZLEdBQUFELFVBQUE7SUFBRUUsZUFBZSxHQUFBRixVQUFBO0VBQ3BDLElBQUFHLFVBQUEsR0FBb0NyRyxRQUFRLENBQUMsS0FBSyxDQUFDO0lBQUFzRyxVQUFBLEdBQUFSLGNBQUEsQ0FBQU8sVUFBQTtJQUE1Q0UsVUFBVSxHQUFBRCxVQUFBO0lBQUVFLGFBQWEsR0FBQUYsVUFBQTtFQUNoQyxJQUFBRyxVQUFBLEdBQTBDekcsUUFBUSxDQUFDLEtBQUssQ0FBQztJQUFBMEcsVUFBQSxHQUFBWixjQUFBLENBQUFXLFVBQUE7SUFBbERFLGFBQWEsR0FBQUQsVUFBQTtJQUFFRSxnQkFBZ0IsR0FBQUYsVUFBQTtFQUN0QyxJQUFBRyxVQUFBLEdBQTRCN0csUUFBUSxDQUFtQjBELGFBQWEsQ0FBQztJQUFBb0QsVUFBQSxHQUFBaEIsY0FBQSxDQUFBZSxVQUFBO0lBQTlERSxNQUFNLEdBQUFELFVBQUE7SUFBRUUsU0FBUyxHQUFBRixVQUFBO0VBQ3hCLElBQU1HLFlBQVksR0FBR2xILE1BQU0sQ0FBbUIsSUFBSSxDQUFDO0VBQ25ELElBQU1tSCxVQUFVLEdBQUduSCxNQUFNLENBQW9Cb0UsYUFBYSxDQUFDO0VBRTNELElBQU1nRCxVQUFVLEdBQUcsQ0FBQyxDQUFDSixNQUFNLENBQUNJLFVBQVU7RUFDdEMsSUFBTUMsbUJBQW1CLEdBQUcsQ0FBQzFHLGtCQUFrQixDQUFDOEUsSUFBSSxDQUFDNkIsT0FBTyxDQUFDLElBQUksQ0FBQ0YsVUFBVTtFQUU1RSxJQUFNcEQsSUFBSSxHQUFHLEVBQUFZLGVBQUEsR0FBQW9DLE1BQU0sQ0FBQ25ELE9BQU8sY0FBQWUsZUFBQSx1QkFBZEEsZUFBQSxDQUFnQlosSUFBSSxLQUFJLEVBQUU7RUFDdkMsSUFBTUMsV0FBVyxHQUFHLEVBQUFZLGdCQUFBLEdBQUFtQyxNQUFNLENBQUNuRCxPQUFPLGNBQUFnQixnQkFBQSx1QkFBZEEsZ0JBQUEsQ0FBZ0JaLFdBQVcsS0FBSSxFQUFFO0VBQ3JELElBQU1DLE9BQU8sR0FBRyxFQUFBWSxnQkFBQSxHQUFBa0MsTUFBTSxDQUFDbkQsT0FBTyxjQUFBaUIsZ0JBQUEsdUJBQWRBLGdCQUFBLENBQWdCWixPQUFPLEtBQUksRUFBRTtFQUM3QyxJQUFNcUQsVUFBMkIsR0FBRyxFQUFBeEMsZ0JBQUEsR0FBQWlDLE1BQU0sQ0FBQ25ELE9BQU8sY0FBQWtCLGdCQUFBLHVCQUFkQSxnQkFBQSxDQUFnQlosV0FBVyxLQUFJLFNBQVM7RUFDNUUsSUFBTXFELG1CQUFvQyxHQUFHSCxtQkFBbUIsR0FBR0UsVUFBVSxHQUFHLFNBQVM7RUFDekYsSUFBTUUsT0FBTyxJQUFBekMsZ0JBQUEsR0FBR2dDLE1BQU0sQ0FBQ25ELE9BQU8sY0FBQW1CLGdCQUFBLHVCQUFkQSxnQkFBQSxDQUFnQmxCLEVBQUU7RUFDbEMsSUFBTTRELE9BQU8sR0FBRyxDQUFDLENBQUMxRCxJQUFJLENBQUNTLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDUixXQUFXLENBQUNRLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDUCxPQUFPLENBQUNPLElBQUksQ0FBQyxDQUFDO0VBQ3pFLElBQU1rRCxVQUFVLEdBQ2QzRCxJQUFJLENBQUNTLElBQUksQ0FBQyxDQUFDLEtBQUswQyxVQUFVLENBQUNTLE9BQU8sQ0FBQzVELElBQUksSUFDdkNDLFdBQVcsQ0FBQ1EsSUFBSSxDQUFDLENBQUMsS0FBSzBDLFVBQVUsQ0FBQ1MsT0FBTyxDQUFDM0QsV0FBVyxJQUNyREMsT0FBTyxDQUFDTyxJQUFJLENBQUMsQ0FBQyxLQUFLMEMsVUFBVSxDQUFDUyxPQUFPLENBQUMxRCxPQUFPLElBQzVDbUQsbUJBQW1CLElBQUlHLG1CQUFtQixLQUFLTCxVQUFVLENBQUNTLE9BQU8sQ0FBQ3pELFdBQVk7RUFFakYsSUFBTTBELGNBQWMsR0FBRzlILE9BQU8sQ0FDNUI7SUFBQSxJQUFBK0gsZ0JBQUE7SUFBQSxPQUFNLEVBQUFBLGdCQUFBLEdBQUFkLE1BQU0sQ0FBQ25ELE9BQU8sY0FBQWlFLGdCQUFBLGdCQUFBQSxnQkFBQSxHQUFkQSxnQkFBQSxDQUFnQkMsZUFBZSxjQUFBRCxnQkFBQSx1QkFBL0JBLGdCQUFBLENBQWlDckQsSUFBSSxDQUFDLENBQUMsS0FBSSxHQUFBdUQsTUFBQSxDQUFHdkMsSUFBSSxDQUFDd0MsU0FBUyxPQUFBRCxNQUFBLENBQUl2QyxJQUFJLENBQUN5QyxRQUFRLEVBQUd6RCxJQUFJLENBQUMsQ0FBQztFQUFBLEdBQzVGLEVBQUFRLGdCQUFBLEdBQUMrQixNQUFNLENBQUNuRCxPQUFPLGNBQUFvQixnQkFBQSx1QkFBZEEsZ0JBQUEsQ0FBZ0I4QyxlQUFlLEVBQUV0QyxJQUFJLENBQUN3QyxTQUFTLEVBQUV4QyxJQUFJLENBQUN5QyxRQUFRLENBQ2pFLENBQUM7RUFFRCxJQUFNQyxnQkFBZ0IsR0FBR3BJLE9BQU8sQ0FBQyxZQUFNO0lBQUEsSUFBQXFJLGdCQUFBO0lBQ3JDLElBQU1DLFNBQVMsSUFBQUQsZ0JBQUEsR0FBR3BCLE1BQU0sQ0FBQ25ELE9BQU8sY0FBQXVFLGdCQUFBLHVCQUFkQSxnQkFBQSxDQUFnQkUsVUFBVTtJQUM1QyxJQUFJLENBQUNELFNBQVMsRUFBRSxPQUFPLEVBQUU7SUFDekIsSUFBTUUsTUFBTSxHQUFHLElBQUlDLElBQUksQ0FBQ0gsU0FBUyxDQUFDO0lBQ2xDLElBQUlJLE1BQU0sQ0FBQ0MsS0FBSyxDQUFDSCxNQUFNLENBQUNJLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxPQUFPLEVBQUU7SUFDN0MsT0FBTzlILFVBQVUsQ0FBQzBILE1BQU0sQ0FBQztFQUMzQixDQUFDLEVBQUUsRUFBQXJELGdCQUFBLEdBQUM4QixNQUFNLENBQUNuRCxPQUFPLGNBQUFxQixnQkFBQSx1QkFBZEEsZ0JBQUEsQ0FBZ0JvRCxVQUFVLENBQUMsQ0FBQztFQUVoQyxJQUFNTSxXQUFXLEdBQUcvSSxXQUFXLENBQUMsWUFBTTtJQUNwQ29HLFNBQVMsQ0FBQyxLQUFLLENBQUM7SUFDaEJRLGFBQWEsQ0FBQyxLQUFLLENBQUM7SUFDcEJJLGdCQUFnQixDQUFDLEtBQUssQ0FBQztJQUN2QkksU0FBUyxDQUFDdEQsYUFBYSxDQUFDO0lBQ3hCd0QsVUFBVSxDQUFDUyxPQUFPLEdBQUd4RCxhQUFhO0VBQ3BDLENBQUMsRUFBRSxFQUFFLENBQUM7RUFFTixJQUFNeUUsbUJBQW1CLEdBQUdoSixXQUFXLENBQ3JDLFVBQUNpSixLQUFpQixFQUFLO0lBQ3JCLElBQUlBLEtBQUssQ0FBQ0MsTUFBTSxLQUFLRCxLQUFLLENBQUNFLGFBQWEsRUFBRTtNQUN4Q0osV0FBVyxDQUFDLENBQUM7SUFDZjtFQUNGLENBQUMsRUFDRCxDQUFDQSxXQUFXLENBQ2QsQ0FBQztFQUVEOUksU0FBUyxDQUFDLFlBQU07SUFDZCxJQUFNbUosb0JBQW9CLEdBQUcsU0FBdkJBLG9CQUFvQkEsQ0FBSUgsS0FBVSxFQUFLO01BQUEsSUFBQUksbUJBQUEsRUFBQUMsb0JBQUEsRUFBQUMsb0JBQUE7TUFDM0MsSUFBQUMsS0FBQSxHQUF3QlAsS0FBSyxDQUFDUSxNQUFNLElBQUksQ0FBQyxDQUFDO1FBQWxDQyxXQUFXLEdBQUFGLEtBQUEsQ0FBWEUsV0FBVztNQUNuQixJQUFJLENBQUNBLFdBQVcsRUFBRTtNQUVsQixJQUFNQyxlQUFlLEdBQUFDLGFBQUEsQ0FBQUEsYUFBQSxLQUNoQjlGLGFBQWEsQ0FBQ0UsT0FBTyxJQUFBcUYsbUJBQUEsR0FDckJLLFdBQVcsQ0FBQ3ZDLE1BQU0sY0FBQWtDLG1CQUFBLHVCQUFsQkEsbUJBQUEsQ0FBb0JyRixPQUFPLENBQy9CO01BQ0QsSUFBTTZGLFlBQVksR0FBRyxDQUFDRixlQUFlLENBQUN4RixJQUFJLElBQUksRUFBRSxFQUFFUyxJQUFJLENBQUMsQ0FBQztNQUN4RCxJQUFNa0YsbUJBQW1CLEdBQUcsQ0FBQ0gsZUFBZSxDQUFDdkYsV0FBVyxJQUFJLEVBQUUsRUFBRVEsSUFBSSxDQUFDLENBQUM7TUFDdEUsSUFBTW1GLGVBQWUsR0FBRyxDQUFDSixlQUFlLENBQUN0RixPQUFPLElBQUksRUFBRSxFQUFFTyxJQUFJLENBQUMsQ0FBQztNQUM5RCxJQUFNb0Ysa0JBQW1DLEdBQUdsSixrQkFBa0IsQ0FBQzhFLElBQUksQ0FBQzZCLE9BQU8sQ0FBQyxHQUN4RSxTQUFTLEdBQ1RrQyxlQUFlLENBQUNyRixXQUFXLElBQUksU0FBUztNQUM1QyxJQUFNMkYsaUJBQWlCLEdBQ3JCSCxtQkFBbUIsS0FBS0MsZUFBZSxHQUFHdkYsMkJBQTJCLENBQUN1RixlQUFlLENBQUMsR0FBRyxFQUFFLENBQUM7TUFFOUZ6QyxVQUFVLENBQUNTLE9BQU8sR0FBRyxDQUFBdUIsb0JBQUEsR0FBQUksV0FBVyxDQUFDdkMsTUFBTSxjQUFBbUMsb0JBQUEsZUFBbEJBLG9CQUFBLENBQW9CdkYsU0FBUyxHQUM5QztRQUNFSSxJQUFJLEVBQUUwRixZQUFZO1FBQ2xCekYsV0FBVyxFQUFFNkYsaUJBQWlCO1FBQzlCNUYsT0FBTyxFQUFFMEYsZUFBZTtRQUN4QnpGLFdBQVcsRUFBRTBGO01BQ2YsQ0FBQyxHQUNEekYsYUFBYTtNQUVqQjZDLFNBQVMsQ0FBQXdDLGFBQUEsQ0FBQUEsYUFBQSxDQUFBQSxhQUFBLEtBQ0o5RixhQUFhLEdBQ2I0RixXQUFXLENBQUN2QyxNQUFNO1FBQ3JCbkQsT0FBTyxFQUFBNEYsYUFBQSxDQUFBQSxhQUFBLEtBQ0ZELGVBQWU7VUFDbEJ2RixXQUFXLEVBQUU2RixpQkFBaUI7VUFDOUIzRixXQUFXLEVBQUUwRjtRQUFrQjtNQUNoQyxFQUNGLENBQUM7TUFDRmhELGdCQUFnQixDQUFDLEVBQUF1QyxvQkFBQSxHQUFBRyxXQUFXLENBQUN2QyxNQUFNLGNBQUFvQyxvQkFBQSx1QkFBbEJBLG9CQUFBLENBQW9CVyxNQUFNLE1BQUssUUFBUSxDQUFDO01BQ3pEOUQsU0FBUyxDQUFDLENBQUMsQ0FBQ3NELFdBQVcsQ0FBQ3ZELE1BQU0sQ0FBQztJQUNqQyxDQUFDO0lBRURnRSxRQUFRLENBQUNDLGdCQUFnQixDQUFDLDRCQUE0QixFQUFFaEIsb0JBQW9CLENBQUM7SUFDN0UsT0FBTyxZQUFNO01BQ1hlLFFBQVEsQ0FBQ0UsbUJBQW1CLENBQUMsNEJBQTRCLEVBQUVqQixvQkFBb0IsQ0FBQztJQUNsRixDQUFDO0VBQ0gsQ0FBQyxFQUFFLENBQUN4RCxJQUFJLENBQUM2QixPQUFPLENBQUMsQ0FBQztFQUVsQnhILFNBQVMsQ0FBQyxZQUFNO0lBQ2QsSUFBSWtHLE1BQU0sSUFBSVksYUFBYSxFQUFFO01BQUEsSUFBQXVELHFCQUFBO01BQzNCdEQsZ0JBQWdCLENBQUMsS0FBSyxDQUFDO01BQ3ZCLENBQUFzRCxxQkFBQSxHQUFBakQsWUFBWSxDQUFDVSxPQUFPLGNBQUF1QyxxQkFBQSxlQUFwQkEscUJBQUEsQ0FBc0JDLEtBQUssQ0FBQyxDQUFDO0lBQy9CO0VBQ0YsQ0FBQyxFQUFFLENBQUNwRSxNQUFNLEVBQUVZLGFBQWEsQ0FBQyxDQUFDO0VBRTNCLElBQU15RCxpQkFBaUIsR0FBRyxTQUFwQkEsaUJBQWlCQSxDQUFJQyxLQUF5QyxFQUFFQyxLQUFhLEVBQUs7SUFDdEZ0RCxTQUFTLENBQUMsVUFBQXVELElBQUk7TUFBQSxPQUFBZixhQUFBLENBQUFBLGFBQUEsS0FDVGUsSUFBSTtRQUNQM0csT0FBTyxFQUFBNEYsYUFBQSxDQUFBQSxhQUFBLEtBQU9lLElBQUksQ0FBQzNHLE9BQU8sT0FBQTRHLGVBQUEsS0FBR0gsS0FBSyxFQUFHQyxLQUFLO01BQUU7SUFBQSxDQUM1QyxDQUFDO0VBQ0wsQ0FBQztFQUVELElBQU1HLHNCQUFzQixHQUFHLFNBQXpCQSxzQkFBc0JBLENBQUlDLE9BQWdCLEVBQUs7SUFDbkQsSUFBSSxDQUFDdEQsbUJBQW1CLEVBQUU7SUFDMUJKLFNBQVMsQ0FBQyxVQUFBdUQsSUFBSTtNQUFBLE9BQUFmLGFBQUEsQ0FBQUEsYUFBQSxLQUNUZSxJQUFJO1FBQ1AzRyxPQUFPLEVBQUE0RixhQUFBLENBQUFBLGFBQUEsS0FDRmUsSUFBSSxDQUFDM0csT0FBTztVQUNmTSxXQUFXLEVBQUV3RyxPQUFPLEdBQUcsU0FBUyxHQUFHO1FBQVM7TUFDN0M7SUFBQSxDQUNELENBQUM7RUFDTCxDQUFDO0VBRUQsSUFBTUMsaUJBQWlCLEdBQUcsU0FBcEJBLGlCQUFpQkEsQ0FBQSxFQUFTO0lBQUEsSUFBQUMsc0JBQUE7SUFDOUIsQ0FBQUEsc0JBQUEsR0FBQTNELFlBQVksQ0FBQ1UsT0FBTyxjQUFBaUQsc0JBQUEsZUFBcEJBLHNCQUFBLENBQXNCVCxLQUFLLENBQUMsQ0FBQztFQUMvQixDQUFDO0VBRUQsSUFBTVUsZ0JBQWdCO0lBQUEsSUFBQUMsS0FBQSxHQUFBQyxpQkFBQSxjQUFBQyxtQkFBQSxDQUFBQyxJQUFBLENBQUcsU0FBQUMsUUFBT3JDLEtBQW9DO01BQUEsSUFBQXNDLG1CQUFBO01BQUEsSUFBQUMsSUFBQSxFQUFBQyxVQUFBLEVBQUFDLElBQUEsRUFBQUMsUUFBQSxFQUFBMUIsaUJBQUEsRUFBQTJCLEVBQUE7TUFBQSxPQUFBUixtQkFBQSxDQUFBUyxJQUFBLFdBQUFDLFFBQUE7UUFBQSxrQkFBQUEsUUFBQSxDQUFBbkIsSUFBQSxHQUFBbUIsUUFBQSxDQUFBQyxJQUFBO1VBQUE7WUFDNURQLElBQUksSUFBQUQsbUJBQUEsR0FBR3RDLEtBQUssQ0FBQ0MsTUFBTSxDQUFDOEMsS0FBSyxjQUFBVCxtQkFBQSx1QkFBbEJBLG1CQUFBLENBQXFCLENBQUMsQ0FBQztZQUNwQyxJQUFJbEUsWUFBWSxDQUFDVSxPQUFPLEVBQUU7Y0FDeEJWLFlBQVksQ0FBQ1UsT0FBTyxDQUFDMkMsS0FBSyxHQUFHLEVBQUU7WUFDakM7WUFBQyxJQUNJYyxJQUFJO2NBQUFNLFFBQUEsQ0FBQUMsSUFBQTtjQUFBO1lBQUE7WUFBQSxPQUFBRCxRQUFBLENBQUFHLE1BQUE7VUFBQTtZQUVIUixVQUFVLEdBQUcsbUJBQW1CLENBQUNTLElBQUksQ0FBQ1YsSUFBSSxDQUFDckgsSUFBSSxDQUFDO1lBQUEsSUFDakRzSCxVQUFVO2NBQUFLLFFBQUEsQ0FBQUMsSUFBQTtjQUFBO1lBQUE7WUFDYmhHLG1CQUFtQixDQUFDSixDQUFDLENBQUMsc0JBQXNCLENBQUMsQ0FBQztZQUFBLE9BQUFtRyxRQUFBLENBQUFHLE1BQUE7VUFBQTtZQUFBSCxRQUFBLENBQUFuQixJQUFBO1lBQUFtQixRQUFBLENBQUFDLElBQUE7WUFBQSxPQUszQlAsSUFBSSxDQUFDRSxJQUFJLENBQUMsQ0FBQztVQUFBO1lBQXhCQSxJQUFJLEdBQUFJLFFBQUEsQ0FBQUssSUFBQTtZQUNKUixRQUFRLEdBQUdILElBQUksQ0FBQ3JILElBQUksQ0FBQ2lJLE9BQU8sQ0FBQyxtQkFBbUIsRUFBRSxFQUFFLENBQUM7WUFDckRuQyxpQkFBaUIsR0FBR3pGLDJCQUEyQixDQUFDa0gsSUFBSSxDQUFDO1lBQzNEdEUsU0FBUyxDQUFDLFVBQUF1RCxJQUFJO2NBQUEsSUFBQTBCLGFBQUEsRUFBQUMsY0FBQSxFQUFBQyxjQUFBO2NBQUEsT0FBQTNDLGFBQUEsQ0FBQUEsYUFBQSxLQUNUZSxJQUFJO2dCQUNQM0csT0FBTyxFQUFBNEYsYUFBQSxDQUFBQSxhQUFBLEtBQ0ZlLElBQUksQ0FBQzNHLE9BQU87a0JBQ2ZLLE9BQU8sRUFBRXFILElBQUk7a0JBQ2J0SCxXQUFXLEVBQUUsQ0FBQWlJLGFBQUEsR0FBQTFCLElBQUksQ0FBQzNHLE9BQU8sY0FBQXFJLGFBQUEsZ0JBQUFBLGFBQUEsR0FBWkEsYUFBQSxDQUFjakksV0FBVyxjQUFBaUksYUFBQSxlQUF6QkEsYUFBQSxDQUEyQnpILElBQUksQ0FBQyxDQUFDLEdBQzFDK0YsSUFBSSxDQUFDM0csT0FBTyxDQUFDSSxXQUFXLEdBQ3hCNkYsaUJBQWlCLE1BQUFxQyxjQUFBLEdBQUkzQixJQUFJLENBQUMzRyxPQUFPLGNBQUFzSSxjQUFBLHVCQUFaQSxjQUFBLENBQWNsSSxXQUFXLEtBQUksRUFBRTtrQkFDeERELElBQUksRUFBRSxDQUFBb0ksY0FBQSxHQUFBNUIsSUFBSSxDQUFDM0csT0FBTyxjQUFBdUksY0FBQSxnQkFBQUEsY0FBQSxHQUFaQSxjQUFBLENBQWNwSSxJQUFJLGNBQUFvSSxjQUFBLGVBQWxCQSxjQUFBLENBQW9CM0gsSUFBSSxDQUFDLENBQUMsR0FBRytGLElBQUksQ0FBQzNHLE9BQU8sQ0FBQ0csSUFBSSxHQUFHd0g7Z0JBQVE7Y0FDaEU7WUFBQSxDQUNELENBQUM7WUFBQUcsUUFBQSxDQUFBQyxJQUFBO1lBQUE7VUFBQTtZQUFBRCxRQUFBLENBQUFuQixJQUFBO1lBQUFpQixFQUFBLEdBQUFFLFFBQUE7WUFFSC9GLG1CQUFtQixDQUFDSixDQUFDLENBQUMsc0JBQXNCLENBQUMsQ0FBQztVQUFBO1VBQUE7WUFBQSxPQUFBbUcsUUFBQSxDQUFBVSxJQUFBO1FBQUE7TUFBQSxHQUFBbEIsT0FBQTtJQUFBLENBRWpEO0lBQUEsZ0JBL0JLTCxnQkFBZ0JBLENBQUF3QixFQUFBO01BQUEsT0FBQXZCLEtBQUEsQ0FBQXdCLEtBQUEsT0FBQUMsU0FBQTtJQUFBO0VBQUEsR0ErQnJCO0VBRUQsSUFBTUMsWUFBWTtJQUFBLElBQUFDLEtBQUEsR0FBQTFCLGlCQUFBLGNBQUFDLG1CQUFBLENBQUFDLElBQUEsQ0FBRyxTQUFBeUIsU0FBQTtNQUFBLElBQUFDLE9BQUEsRUFBQUMsT0FBQSxFQUFBQyxPQUFBO01BQUEsT0FBQTdCLG1CQUFBLENBQUFTLElBQUEsV0FBQXFCLFNBQUE7UUFBQSxrQkFBQUEsU0FBQSxDQUFBdkMsSUFBQSxHQUFBdUMsU0FBQSxDQUFBbkIsSUFBQTtVQUFBO1lBQ2JnQixPQUFPLEdBQUc7Y0FDZDVJLElBQUksRUFBRUEsSUFBSSxDQUFDUyxJQUFJLENBQUMsQ0FBQztjQUNqQlIsV0FBVyxFQUFFQSxXQUFXLENBQUNRLElBQUksQ0FBQyxDQUFDO2NBQy9CUCxPQUFPLEVBQUVBLE9BQU8sQ0FBQ08sSUFBSSxDQUFDLENBQUM7Y0FDdkJOLFdBQVcsRUFBRXFEO1lBQ2YsQ0FBQztZQUFBLE1BRUdSLE1BQU0sQ0FBQ3BELFNBQVMsSUFBSTZELE9BQU87Y0FBQXNGLFNBQUEsQ0FBQW5CLElBQUE7Y0FBQTtZQUFBO1lBQUFtQixTQUFBLENBQUFuQixJQUFBO1lBQUEsT0FDUDdLLFdBQVcsQ0FBQzBHLE9BQU8sRUFBRW1GLE9BQU8sQ0FBQztVQUFBO1lBQTdDQyxPQUFPLEdBQUFFLFNBQUEsQ0FBQWYsSUFBQTtZQUNiNUcsaUJBQWlCLGFBQWpCQSxpQkFBaUIsZUFBakJBLGlCQUFpQixDQUFHeUgsT0FBTyxDQUFDO1lBQzVCbEgscUJBQXFCLENBQUNILENBQUMsQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO1lBQUEsT0FBQXVILFNBQUEsQ0FBQWpCLE1BQUEsV0FDM0NlLE9BQU87VUFBQTtZQUFBRSxTQUFBLENBQUFuQixJQUFBO1lBQUEsT0FHTTlLLFdBQVcsQ0FBQzhMLE9BQU8sQ0FBQztVQUFBO1lBQXBDRSxPQUFPLEdBQUFDLFNBQUEsQ0FBQWYsSUFBQTtZQUNiN0csUUFBUSxhQUFSQSxRQUFRLGVBQVJBLFFBQVEsQ0FBRzJILE9BQU8sQ0FBQztZQUNuQm5ILHFCQUFxQixDQUFDSCxDQUFDLENBQUMsd0JBQXdCLENBQUMsQ0FBQztZQUFBLE9BQUF1SCxTQUFBLENBQUFqQixNQUFBLFdBQzNDZ0IsT0FBTztVQUFBO1VBQUE7WUFBQSxPQUFBQyxTQUFBLENBQUFWLElBQUE7UUFBQTtNQUFBLEdBQUFNLFFBQUE7SUFBQSxDQUNmO0lBQUEsZ0JBbkJLRixZQUFZQSxDQUFBO01BQUEsT0FBQUMsS0FBQSxDQUFBSCxLQUFBLE9BQUFDLFNBQUE7SUFBQTtFQUFBLEdBbUJqQjtFQUVELElBQU1RLFVBQVU7SUFBQSxJQUFBQyxLQUFBLEdBQUFqQyxpQkFBQSxjQUFBQyxtQkFBQSxDQUFBQyxJQUFBLENBQUcsU0FBQWdDLFNBQUE7TUFBQSxJQUFBQyxHQUFBO01BQUEsT0FBQWxDLG1CQUFBLENBQUFTLElBQUEsV0FBQTBCLFNBQUE7UUFBQSxrQkFBQUEsU0FBQSxDQUFBNUMsSUFBQSxHQUFBNEMsU0FBQSxDQUFBeEIsSUFBQTtVQUFBO1lBQUEsTUFDYixDQUFDbEUsT0FBTyxJQUFJdEIsWUFBWSxJQUFJLENBQUN1QixVQUFVO2NBQUF5RixTQUFBLENBQUF4QixJQUFBO2NBQUE7WUFBQTtZQUFBLE9BQUF3QixTQUFBLENBQUF0QixNQUFBO1VBQUE7WUFDM0N6RixlQUFlLENBQUMsSUFBSSxDQUFDO1lBQUErRyxTQUFBLENBQUE1QyxJQUFBO1lBQUE0QyxTQUFBLENBQUF4QixJQUFBO1lBQUEsT0FFYmEsWUFBWSxDQUFDLENBQUM7VUFBQTtZQUNwQjdELFdBQVcsQ0FBQyxDQUFDO1lBQUF3RSxTQUFBLENBQUF4QixJQUFBO1lBQUE7VUFBQTtZQUFBd0IsU0FBQSxDQUFBNUMsSUFBQTtZQUFBMkMsR0FBQSxHQUFBQyxTQUFBO1lBRWJ4SCxtQkFBbUIsQ0FBQ29CLE1BQU0sQ0FBQ3BELFNBQVMsR0FBRzRCLENBQUMsQ0FBQyxzQkFBc0IsQ0FBQyxHQUFHQSxDQUFDLENBQUMsc0JBQXNCLENBQUMsQ0FBQztVQUFBO1lBQUE0SCxTQUFBLENBQUE1QyxJQUFBO1lBRTdGbkUsZUFBZSxDQUFDLEtBQUssQ0FBQztZQUFBLE9BQUErRyxTQUFBLENBQUFDLE1BQUE7VUFBQTtVQUFBO1lBQUEsT0FBQUQsU0FBQSxDQUFBZixJQUFBO1FBQUE7TUFBQSxHQUFBYSxRQUFBO0lBQUEsQ0FFekI7SUFBQSxnQkFYS0YsVUFBVUEsQ0FBQTtNQUFBLE9BQUFDLEtBQUEsQ0FBQVYsS0FBQSxPQUFBQyxTQUFBO0lBQUE7RUFBQSxHQVdmO0VBRUQsSUFBTWMsZ0JBQWdCO0lBQUEsSUFBQUMsS0FBQSxHQUFBdkMsaUJBQUEsY0FBQUMsbUJBQUEsQ0FBQUMsSUFBQSxDQUFHLFNBQUFzQyxTQUFBO01BQUEsSUFBQUMsVUFBQSxFQUFBQyxHQUFBO01BQUEsT0FBQXpDLG1CQUFBLENBQUFTLElBQUEsV0FBQWlDLFNBQUE7UUFBQSxrQkFBQUEsU0FBQSxDQUFBbkQsSUFBQSxHQUFBbUQsU0FBQSxDQUFBL0IsSUFBQTtVQUFBO1lBQUEsTUFDbkIsQ0FBQ2xFLE9BQU8sSUFBSXRCLFlBQVk7Y0FBQXVILFNBQUEsQ0FBQS9CLElBQUE7Y0FBQTtZQUFBO1lBQUEsT0FBQStCLFNBQUEsQ0FBQTdCLE1BQUE7VUFBQTtZQUM1QnpGLGVBQWUsQ0FBQyxJQUFJLENBQUM7WUFBQXNILFNBQUEsQ0FBQW5ELElBQUE7WUFBQW1ELFNBQUEsQ0FBQS9CLElBQUE7WUFBQSxPQUVNYSxZQUFZLENBQUMsQ0FBQztVQUFBO1lBQWpDZ0IsVUFBVSxHQUFBRSxTQUFBLENBQUEzQixJQUFBO1lBQ2hCLElBQUl5QixVQUFVLEVBQUU7Y0FDZHpELFFBQVEsQ0FBQzRELGFBQWEsQ0FDcEIsSUFBSUMsV0FBVyxDQUFDbkssMEJBQTBCLEVBQUU7Z0JBQzFDNEYsTUFBTSxFQUFFO2tCQUFFd0UsS0FBSyxFQUFFTDtnQkFBVztjQUM5QixDQUFDLENBQ0gsQ0FBQztZQUNIO1lBQ0E3RSxXQUFXLENBQUMsQ0FBQztZQUFBK0UsU0FBQSxDQUFBL0IsSUFBQTtZQUFBO1VBQUE7WUFBQStCLFNBQUEsQ0FBQW5ELElBQUE7WUFBQWtELEdBQUEsR0FBQUMsU0FBQTtZQUViL0gsbUJBQW1CLENBQUNvQixNQUFNLENBQUNwRCxTQUFTLEdBQUc0QixDQUFDLENBQUMsc0JBQXNCLENBQUMsR0FBR0EsQ0FBQyxDQUFDLHNCQUFzQixDQUFDLENBQUM7VUFBQTtZQUFBbUksU0FBQSxDQUFBbkQsSUFBQTtZQUU3Rm5FLGVBQWUsQ0FBQyxLQUFLLENBQUM7WUFBQSxPQUFBc0gsU0FBQSxDQUFBTixNQUFBO1VBQUE7VUFBQTtZQUFBLE9BQUFNLFNBQUEsQ0FBQXRCLElBQUE7UUFBQTtNQUFBLEdBQUFtQixRQUFBO0lBQUEsQ0FFekI7SUFBQSxnQkFsQktGLGdCQUFnQkEsQ0FBQTtNQUFBLE9BQUFDLEtBQUEsQ0FBQWhCLEtBQUEsT0FBQUMsU0FBQTtJQUFBO0VBQUEsR0FrQnJCO0VBRUQsSUFBTXVCLG1CQUFtQjtJQUFBLElBQUFDLEtBQUEsR0FBQWhELGlCQUFBLGNBQUFDLG1CQUFBLENBQUFDLElBQUEsQ0FBRyxTQUFBK0MsU0FBQTtNQUFBLElBQUFDLEdBQUE7TUFBQSxPQUFBakQsbUJBQUEsQ0FBQVMsSUFBQSxXQUFBeUMsU0FBQTtRQUFBLGtCQUFBQSxTQUFBLENBQUEzRCxJQUFBLEdBQUEyRCxTQUFBLENBQUF2QyxJQUFBO1VBQUE7WUFBQSxJQUNyQm5FLE9BQU87Y0FBQTBHLFNBQUEsQ0FBQXZDLElBQUE7Y0FBQTtZQUFBO1lBQUEsT0FBQXVDLFNBQUEsQ0FBQXJDLE1BQUE7VUFBQTtZQUFBcUMsU0FBQSxDQUFBM0QsSUFBQTtZQUFBMkQsU0FBQSxDQUFBdkMsSUFBQTtZQUFBLE9BRUo1SyxXQUFXLENBQUN5RyxPQUFPLENBQUM7VUFBQTtZQUMxQnBDLFdBQVcsYUFBWEEsV0FBVyxlQUFYQSxXQUFXLENBQUdvQyxPQUFPLENBQUM7WUFDdEI5QixxQkFBcUIsQ0FBQ0gsQ0FBQyxDQUFDLHdCQUF3QixDQUFDLENBQUM7WUFDbERvRCxXQUFXLENBQUMsQ0FBQztZQUFBdUYsU0FBQSxDQUFBdkMsSUFBQTtZQUFBO1VBQUE7WUFBQXVDLFNBQUEsQ0FBQTNELElBQUE7WUFBQTBELEdBQUEsR0FBQUMsU0FBQTtZQUVidkksbUJBQW1CLENBQUNKLENBQUMsQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO1VBQUE7VUFBQTtZQUFBLE9BQUEySSxTQUFBLENBQUE5QixJQUFBO1FBQUE7TUFBQSxHQUFBNEIsUUFBQTtJQUFBLENBRWpEO0lBQUEsZ0JBVktGLG1CQUFtQkEsQ0FBQTtNQUFBLE9BQUFDLEtBQUEsQ0FBQXpCLEtBQUEsT0FBQUMsU0FBQTtJQUFBO0VBQUEsR0FVeEI7O0VBRUQ7RUFDQSxJQUFNNEIsY0FBYyxHQUFHLFNBQWpCQSxjQUFjQSxDQUFBLEVBQVM7SUFDM0IsSUFBSSxDQUFDM0csT0FBTyxFQUFFO0lBQ2R1QyxRQUFRLENBQUM0RCxhQUFhLENBQ3BCLElBQUlDLFdBQVcsQ0FBQ25LLDBCQUEwQixFQUFFO01BQzFDNEYsTUFBTSxFQUFFO1FBQ053RSxLQUFLLEVBQUU7VUFBRWhLLEVBQUUsRUFBRTJELE9BQU87VUFBRXpELElBQUksRUFBSkEsSUFBSTtVQUFFQyxXQUFXLEVBQVhBLFdBQVc7VUFBRUMsT0FBTyxFQUFQQSxPQUFPO1VBQUVDLFdBQVcsRUFBRW9EO1FBQVcsQ0FBQztRQUMzRThHLGFBQWEsRUFBRTtNQUNqQjtJQUNGLENBQUMsQ0FDSCxDQUFDO0lBQ0R6RixXQUFXLENBQUMsQ0FBQztFQUNmLENBQUM7RUFFRCxJQUFJLENBQUM1QyxNQUFNLEVBQUUsT0FBTyxJQUFJO0VBRXhCLElBQU1zSSxTQUFTLEdBQUd0RSxRQUFRLENBQUN1RSxjQUFjLENBQUMsb0JBQW9CLENBQUM7RUFDL0QsSUFBSSxDQUFDRCxTQUFTLEVBQUUsT0FBTyxJQUFJO0VBRTNCLElBQU1FLGlCQUFpQixHQUFHeEgsTUFBTSxDQUFDcEQsU0FBUyxHQUFHNEIsQ0FBQyxDQUFDLG9CQUFvQixDQUFDLEdBQUdBLENBQUMsQ0FBQyxzQkFBc0IsQ0FBQztFQUNoRyxJQUFNaUosVUFBVSxHQUFHckgsVUFBVSxHQUFHNUIsQ0FBQyxDQUFDLG9CQUFvQixDQUFDLEdBQUdnSixpQkFBaUI7RUFFM0UsSUFBTUUsV0FBVyxnQkFDZm5MLEtBQUEsQ0FBQ25CLGdCQUFnQjtJQUFBdU0sUUFBQSxnQkFDZnBMLEtBQUEsQ0FBQ2Ysd0JBQXdCO01BQUFtTSxRQUFBLGdCQUN2QnRMLElBQUEsQ0FBQ1QsZ0JBQWdCO1FBQUErTCxRQUFBLEVBQUUzSztNQUFJLENBQW1CLENBQUMsRUFDMUNDLFdBQVcsZ0JBQUdaLElBQUEsQ0FBQ2QsdUJBQXVCO1FBQUFvTSxRQUFBLEVBQUUxSztNQUFXLENBQTBCLENBQUMsR0FBRyxJQUFJO0lBQUEsQ0FDOUQsQ0FBQyxlQUUzQlYsS0FBQSxDQUFDYix1QkFBdUI7TUFBQWlNLFFBQUEsZ0JBQ3RCcEwsS0FBQSxDQUFDcEIsaUJBQWlCO1FBQUF3TSxRQUFBLGdCQUNoQnRMLElBQUEsQ0FBQ1oseUJBQXlCO1VBQUFrTSxRQUFBLEVBQUVuSixDQUFDLENBQUMsb0JBQW9CO1FBQUMsQ0FBNEIsQ0FBQyxlQUNoRm5DLElBQUEsQ0FBQ1YseUJBQXlCO1VBQUFnTSxRQUFBLEVBQUU5RztRQUFjLENBQTRCLENBQUM7TUFBQSxDQUN0RCxDQUFDLEVBQ25CTSxnQkFBZ0IsZ0JBQ2Y1RSxLQUFBLENBQUNwQixpQkFBaUI7UUFBQXdNLFFBQUEsZ0JBQ2hCdEwsSUFBQSxDQUFDWix5QkFBeUI7VUFBQWtNLFFBQUEsRUFBRW5KLENBQUMsQ0FBQyxzQkFBc0I7UUFBQyxDQUE0QixDQUFDLGVBQ2xGbkMsSUFBQSxDQUFDVix5QkFBeUI7VUFBQWdNLFFBQUEsRUFBRXhHO1FBQWdCLENBQTRCLENBQUM7TUFBQSxDQUN4RCxDQUFDLEdBQ2xCLElBQUk7SUFBQSxDQUNlLENBQUMsZUFFMUI5RSxJQUFBLENBQUNmLHdCQUF3QjtNQUFBcU0sUUFBQSxlQUN2QnRMLElBQUEsQ0FBQ2hCLHNCQUFzQjtRQUFBc00sUUFBQSxFQUFFeks7TUFBTyxDQUF5QjtJQUFDLENBQ2xDLENBQUM7RUFBQSxDQUNYLENBQ25CO0VBRUQsb0JBQU9oRSxZQUFZLGNBQ2pCcUQsS0FBQSxDQUFDakQsUUFBUTtJQUFDc08sTUFBTSxFQUFFLElBQUs7SUFBQ0MsT0FBTyxFQUFFaEcsbUJBQW9CO0lBQUE4RixRQUFBLGdCQUNuRHBMLEtBQUEsQ0FBQ0osWUFBWTtNQUFDMEwsT0FBTyxFQUFFLFNBQVRBLE9BQU9BLENBQUUvRixLQUFLO1FBQUEsT0FBSUEsS0FBSyxDQUFDZ0csZUFBZSxDQUFDLENBQUM7TUFBQSxDQUFDO01BQUFILFFBQUEsZ0JBQ3REcEwsS0FBQSxDQUFDNUIsV0FBVztRQUFBZ04sUUFBQSxnQkFDVnRMLElBQUEsQ0FBQ3pCLGdCQUFnQjtVQUFBK00sUUFBQSxFQUFFRjtRQUFVLENBQW1CLENBQUMsZUFDakRwTCxJQUFBLENBQUNsQyxnQkFBZ0I7VUFBQzROLElBQUksRUFBQyxRQUFRO1VBQUNGLE9BQU8sRUFBRWpHLFdBQVk7VUFBQyxjQUFZcEQsQ0FBQyxDQUFDLGdCQUFnQixDQUFFO1VBQUFtSixRQUFBLGVBQ3BGdEwsSUFBQSxDQUFDbEQsS0FBSztZQUFDNk8sS0FBSyxFQUFDLFNBQVM7WUFBQ0MsS0FBSyxFQUFFLEVBQUc7WUFBQ0MsTUFBTSxFQUFFO1VBQUcsQ0FBRTtRQUFDLENBQ2hDLENBQUM7TUFBQSxDQUNSLENBQUMsRUFFYjlILFVBQVUsR0FDVHNILFdBQVcsZ0JBRVhuTCxLQUFBLENBQUNuQyxTQUFTO1FBQUF1TixRQUFBLGdCQUNScEwsS0FBQSxDQUFDakMsYUFBYTtVQUFDNk4sT0FBTyxFQUFFLEVBQUc7VUFBQVIsUUFBQSxnQkFDekJ0TCxJQUFBLENBQUM3QixlQUFlO1lBQUM0TixPQUFPLEVBQUMsa0JBQWtCO1lBQUFULFFBQUEsRUFBRW5KLENBQUMsQ0FBQyxvQkFBb0I7VUFBQyxDQUFrQixDQUFDLGVBQ3ZGbkMsSUFBQSxDQUFDOUIsZUFBZTtZQUNkdUMsRUFBRSxFQUFDLGtCQUFrQjtZQUNyQmlMLElBQUksRUFBQyxNQUFNO1lBQ1hNLFNBQVMsRUFBRSxHQUFJO1lBQ2ZDLFdBQVcsRUFBRTlKLENBQUMsQ0FBQywwQkFBMEIsQ0FBRTtZQUMzQytFLEtBQUssRUFBRXZHLElBQUs7WUFDWnVMLFFBQVEsRUFBRW5KLFlBQWE7WUFDdkJvSixRQUFRLEVBQUUsU0FBVkEsUUFBUUEsQ0FBRTFHLEtBQUs7Y0FBQSxPQUFJdUIsaUJBQWlCLENBQUMsTUFBTSxFQUFFdkIsS0FBSyxDQUFDQyxNQUFNLENBQUN3QixLQUFLLENBQUM7WUFBQTtVQUFDLENBQ2xFLENBQUM7UUFBQSxDQUNXLENBQUMsZUFFaEJoSCxLQUFBLENBQUNqQyxhQUFhO1VBQUM2TixPQUFPLEVBQUUsR0FBSTtVQUFDTSxhQUFhO1VBQUFkLFFBQUEsZ0JBQ3hDdEwsSUFBQSxDQUFDN0IsZUFBZTtZQUFDNE4sT0FBTyxFQUFDLHlCQUF5QjtZQUFBVCxRQUFBLEVBQUVuSixDQUFDLENBQUMsMkJBQTJCO1VBQUMsQ0FBa0IsQ0FBQyxlQUNyR25DLElBQUEsQ0FBQzVCLGtCQUFrQjtZQUNqQnFDLEVBQUUsRUFBQyx5QkFBeUI7WUFDNUJ1TCxTQUFTLEVBQUUsR0FBSTtZQUNmQyxXQUFXLEVBQUU5SixDQUFDLENBQUMsaUNBQWlDLENBQUU7WUFDbEQrRSxLQUFLLEVBQUV0RyxXQUFZO1lBQ25Cc0wsUUFBUSxFQUFFbkosWUFBYTtZQUN2Qm9KLFFBQVEsRUFBRSxTQUFWQSxRQUFRQSxDQUFFMUcsS0FBSztjQUFBLE9BQUl1QixpQkFBaUIsQ0FBQyxhQUFhLEVBQUV2QixLQUFLLENBQUNDLE1BQU0sQ0FBQ3dCLEtBQUssQ0FBQztZQUFBO1VBQUMsQ0FDekUsQ0FBQztRQUFBLENBQ1csQ0FBQyxFQUVmbEQsbUJBQW1CLGdCQUNsQjlELEtBQUEsQ0FBQ1AsY0FBYztVQUFBMkwsUUFBQSxnQkFDYnRMLElBQUEsQ0FBQzdDLE1BQU07WUFDTG1LLE9BQU8sRUFBRXBELFVBQVUsS0FBSyxTQUFVO1lBQ2xDaUksUUFBUSxFQUFFOUUsc0JBQXVCO1lBQ2pDNkUsUUFBUSxFQUFFbkosWUFBYTtZQUN2QixjQUFZWixDQUFDLENBQUMsMkJBQTJCO1VBQUUsQ0FDNUMsQ0FBQyxlQUNGbkMsSUFBQSxDQUFDTixnQkFBZ0I7WUFBQTRMLFFBQUEsRUFBRW5KLENBQUMsQ0FBQywyQkFBMkI7VUFBQyxDQUFtQixDQUFDO1FBQUEsQ0FDdkQsQ0FBQyxHQUNmLElBQUksZUFFUmpDLEtBQUEsQ0FBQ3ZCLHNCQUFzQjtVQUFBMk0sUUFBQSxnQkFDckJwTCxLQUFBLENBQUN4Qix1QkFBdUI7WUFBQTRNLFFBQUEsZ0JBQ3RCdEwsSUFBQSxDQUFDbkIsc0JBQXNCO2NBQUF5TSxRQUFBLEVBQUVuSixDQUFDLENBQUMsNEJBQTRCO1lBQUMsQ0FBeUIsQ0FBQyxlQUNsRmpDLEtBQUEsQ0FBQ04saUJBQWlCO2NBQUM4TCxJQUFJLEVBQUMsUUFBUTtjQUFDRixPQUFPLEVBQUVqRSxpQkFBa0I7Y0FBQzJFLFFBQVEsRUFBRW5KLFlBQWE7Y0FBQXVJLFFBQUEsZ0JBQ2xGdEwsSUFBQSxDQUFDakQsVUFBVTtnQkFBQzZPLEtBQUssRUFBRSxFQUFHO2dCQUFDQyxNQUFNLEVBQUUsRUFBRztnQkFBQ0YsS0FBSyxFQUFDO2NBQU0sQ0FBRSxDQUFDLEVBQ2pEeEosQ0FBQyxDQUFDLG1CQUFtQixDQUFDO1lBQUEsQ0FDTixDQUFDLGVBQ3BCbkMsSUFBQSxDQUFDeEIsb0JBQW9CO2NBQ25CNk4sR0FBRyxFQUFFeEksWUFBYTtjQUNsQjZILElBQUksRUFBQyxNQUFNO2NBQ1hZLE1BQU0sRUFBQyw2QkFBNkI7Y0FDcENILFFBQVEsRUFBRTFFO1lBQWlCLENBQzVCLENBQUM7VUFBQSxDQUNxQixDQUFDLGVBRTFCekgsSUFBQSxDQUFDdkIsc0JBQXNCO1lBQUE2TSxRQUFBLGVBQ3JCdEwsSUFBQSxDQUFDcEIseUJBQXlCO2NBQ3hCNkIsRUFBRSxFQUFDLHFCQUFxQjtjQUN4QnVMLFNBQVMsRUFBRSxNQUFPO2NBQ2xCQyxXQUFXLEVBQUU5SixDQUFDLENBQUMsNkJBQTZCLENBQUU7Y0FDOUMrRSxLQUFLLEVBQUVyRyxPQUFRO2NBQ2ZxTCxRQUFRLEVBQUVuSixZQUFhO2NBQ3ZCb0osUUFBUSxFQUFFLFNBQVZBLFFBQVFBLENBQUUxRyxLQUFLO2dCQUFBLE9BQUl1QixpQkFBaUIsQ0FBQyxTQUFTLEVBQUV2QixLQUFLLENBQUNDLE1BQU0sQ0FBQ3dCLEtBQUssQ0FBQztjQUFBO1lBQUMsQ0FDckU7VUFBQyxDQUNvQixDQUFDO1FBQUEsQ0FDSCxDQUFDO01BQUEsQ0FDaEIsQ0FDWixlQUVEbEgsSUFBQSxDQUFDM0IsV0FBVztRQUFBaU4sUUFBQSxFQUNUdkgsVUFBVSxnQkFDVC9ELElBQUEsQ0FBQ0gsbUJBQW1CO1VBQUM2TCxJQUFJLEVBQUMsUUFBUTtVQUFDRixPQUFPLEVBQUVULGNBQWU7VUFBQU8sUUFBQSxFQUN4RG5KLENBQUMsQ0FBQyxtQkFBbUI7UUFBQyxDQUNKLENBQUMsZ0JBRXRCakMsS0FBQSxDQUFBRSxTQUFBO1VBQUFrTCxRQUFBLEdBQ0czSCxNQUFNLENBQUNwRCxTQUFTLGdCQUNmUCxJQUFBLENBQUNoQyxlQUFlO1lBQUFzTixRQUFBLGVBQ2R0TCxJQUFBLENBQUNuQyxpQkFBaUI7Y0FBQzZOLElBQUksRUFBQyxRQUFRO2NBQUNGLE9BQU8sRUFBRSxTQUFUQSxPQUFPQSxDQUFBO2dCQUFBLE9BQVFwSSxhQUFhLENBQUMsSUFBSSxDQUFDO2NBQUEsQ0FBQztjQUFDOEksUUFBUSxFQUFFbkosWUFBYTtjQUFBdUksUUFBQSxFQUN6Rm5KLENBQUMsQ0FBQyxpQkFBaUI7WUFBQyxDQUNKO1VBQUMsQ0FDTCxDQUFDLEdBQ2hCLElBQUksZUFDUm5DLElBQUEsQ0FBQ1IsdUJBQXVCO1lBQ3RCa00sSUFBSSxFQUFDLFFBQVE7WUFDYkYsT0FBTyxFQUFFN0IsVUFBVztZQUNwQnVDLFFBQVEsRUFBRSxDQUFDN0gsT0FBTyxJQUFJdEIsWUFBWSxJQUFJLENBQUN1QixVQUFXO1lBQUFnSCxRQUFBLEVBRWpEdkksWUFBWSxnQkFBRy9DLElBQUEsQ0FBQzlDLE1BQU07Y0FBQ3FQLElBQUksRUFBQztZQUFPLENBQUUsQ0FBQyxHQUFHcEssQ0FBQyxDQUFDLGVBQWU7VUFBQyxDQUNyQyxDQUFDLGVBQzFCbkMsSUFBQSxDQUFDUCxzQkFBc0I7WUFBQ2lNLElBQUksRUFBQyxRQUFRO1lBQUNGLE9BQU8sRUFBRXZCLGdCQUFpQjtZQUFDaUMsUUFBUSxFQUFFLENBQUM3SCxPQUFPLElBQUl0QixZQUFhO1lBQUF1SSxRQUFBLEVBQ2pHdkksWUFBWSxnQkFBRy9DLElBQUEsQ0FBQzlDLE1BQU07Y0FBQ3FQLElBQUksRUFBQztZQUFPLENBQUUsQ0FBQyxHQUFHcEssQ0FBQyxDQUFDLHFCQUFxQjtVQUFDLENBQzVDLENBQUM7UUFBQSxDQUN6QjtNQUNILENBQ1UsQ0FBQztJQUFBLENBQ0YsQ0FBQyxFQUVkZ0IsVUFBVSxJQUFJaUIsT0FBTyxnQkFDcEJwRSxJQUFBLENBQUNwQyxtQkFBbUI7TUFDbEI0TyxPQUFPLEVBQUUsU0FBVEEsT0FBT0EsQ0FBQTtRQUFBLE9BQVFwSixhQUFhLENBQUMsS0FBSyxDQUFDO01BQUEsQ0FBQztNQUNwQ3FKLFFBQVEsRUFBRTtRQUNSQyxtQkFBbUIsRUFBRWhDO01BQ3ZCLENBQUU7TUFDRmlDLElBQUksRUFBRTtRQUFFQyxLQUFLLEVBQUVqTSxJQUFJO1FBQUVGLEVBQUUsRUFBRTJEO01BQVEsQ0FBRTtNQUNuQ3lJLE1BQU0sRUFBQztJQUFPLENBQ2YsQ0FBQyxHQUNBLElBQUk7RUFBQSxDQUNBLENBQUMsRUFDWDVCLFNBQ0YsQ0FBQztBQUNILENBQUMiLCJpZ25vcmVMaXN0IjpbXX0=