@projectcor/maia-components 2.11.9-8 → 2.11.9

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 (67) hide show
  1. package/lib/components/atoms/ApprovalBox/ApprovalBox.js +5 -2
  2. package/lib/components/atoms/ApprovalBox/ApprovalBox.styles.js +15 -12
  3. package/lib/components/atoms/AttachmentPreviewModal/AttachmentPreviewModal.js +18 -5
  4. package/lib/components/atoms/Chip/Chip.js +3 -4
  5. package/lib/components/atoms/Chip/styles.js +2 -2
  6. package/lib/components/atoms/ErrorSearchProjects/ErrorSearchProjects.js +3 -5
  7. package/lib/components/atoms/FrequentlyAskedQuestions/FrequentlyAskedQuestions.js +3 -4
  8. package/lib/components/atoms/MAIAInput/MAIAInput.js +35 -12
  9. package/lib/components/atoms/MAIAInput/styles.js +38 -39
  10. package/lib/components/atoms/MAIAMessage/MAIAMessage.interfaces.js +1 -1
  11. package/lib/components/atoms/MAIAMessage/MAIAMessage.js +21 -6
  12. package/lib/components/atoms/ProjectSelector/ProjectSelector.js +193 -56
  13. package/lib/components/atoms/ProjectSelector/ProjectSelector.styles.js +2 -2
  14. package/lib/components/index.js +1 -2
  15. package/lib/components/molecules/ChatAIContent/ChatAIContent.js +23 -17
  16. package/lib/components/molecules/ChatAIHistory/ChatAIHistory.js +3 -2
  17. package/lib/components/molecules/ChatAIHome/ChatAIHome.js +3 -2
  18. package/lib/components/molecules/ChatAIHome/styles.js +6 -6
  19. package/lib/components/molecules/ChatAIMessages/ChatAIMessages.js +155 -238
  20. package/lib/components/molecules/ChatAIMessages/newStyles.js +118 -29
  21. package/lib/components/molecules/ChatAIModal/ChatAIModal.js +6 -18
  22. package/lib/components/molecules/ChatAIModal/ChatAIModal.styles.js +2 -2
  23. package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.js +4 -6
  24. package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.styles.js +4 -4
  25. package/lib/components/molecules/ChatAIModal/constants.js +2 -6
  26. package/lib/components/molecules/ChatFooter/ChatFooter.js +4 -7
  27. package/lib/components/molecules/ProjectSummaryChat/ProjectSummaryChat.js +3 -2
  28. package/lib/components/molecules/Sidebar/Sidebar.js +8 -11
  29. package/lib/components/organisms/ChatAI/ChatAI.js +5 -11
  30. package/lib/constants/config.js +2 -3
  31. package/lib/context/global-context.js +1 -1
  32. package/lib/hooks/useChatManager/useChatManager.js +19 -49
  33. package/lib/hooks/useChatMessages/useChatMessages.js +41 -79
  34. package/lib/hooks/useChats/useChats.js +6 -9
  35. package/lib/hooks/useOrchestratorStream/useOrchestratorStream.js +4 -6
  36. package/lib/hooks/useProjectSummaryConfig.js +7 -35
  37. package/lib/hooks/useStreamdownStyles.js +20 -0
  38. package/lib/index.css +297 -15
  39. package/lib/lang/br/index.js +2 -25
  40. package/lib/lang/en/index.js +2 -25
  41. package/lib/lang/es/index.js +2 -25
  42. package/lib/lang/fr/index.js +2 -21
  43. package/lib/services/maia/Agents/getAgents.js +7 -10
  44. package/lib/services/maia/Chats/getChatMessages.js +16 -30
  45. package/lib/services/maia/Chats/getChatsByUserId.js +3 -4
  46. package/lib/services/maia/Orchestrator/orchestrator.js +4 -6
  47. package/lib/services/maia/index.js +2 -4
  48. package/lib/services/utils/mapChatMessages.js +4 -12
  49. package/lib/store/chatsStore.types.js +1 -1
  50. package/lib/store/useChatsStore.js +7 -9
  51. package/lib/streamdownStyles.js +6 -0
  52. package/lib/types/Chat.js +1 -1
  53. package/lib/types/agent.js +1 -1
  54. package/package.json +22 -17
  55. package/lib/components/atoms/ChatClientSelector/ChatClientSelector.js +0 -69
  56. package/lib/components/atoms/ChatClientSelector/index.js +0 -2
  57. package/lib/components/atoms/EntitySelector/EntitySelector.js +0 -181
  58. package/lib/components/atoms/EntitySelector/EntitySelector.styles.js +0 -57
  59. package/lib/components/atoms/EntitySelector/index.js +0 -2
  60. package/lib/components/molecules/ChatAIClientSelector/ChatAIClientSelector.js +0 -56
  61. package/lib/components/molecules/ChatAIClientSelector/index.js +0 -2
  62. package/lib/components/organisms/ClientAIButton/ClientAIButton.js +0 -26
  63. package/lib/components/organisms/ClientAIButton/index.js +0 -2
  64. package/lib/hooks/useRecentClientsSearch.js +0 -176
  65. package/lib/services/maia/RecentClients/getRecentClients.js +0 -43
  66. package/lib/services/maia/RecentClients/index.js +0 -6
  67. package/lib/types/Client.js +0 -2
@@ -3,9 +3,10 @@ import _objectWithoutProperties from "@babel/runtime/helpers/objectWithoutProper
3
3
  import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
4
4
  var _excluded = ["isCurrentUser", "children"],
5
5
  _excluded2 = ["isCurrentUser"],
6
- _excluded3 = ["src", "alt"];
6
+ _excluded3 = ["href", "children"];
7
7
  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; }
8
8
  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; }
9
+ /* eslint-disable import/no-extraneous-dependencies */
9
10
  /* eslint-disable @typescript-eslint/indent */
10
11
  /* eslint-disable react/no-unstable-nested-components */
11
12
  /* eslint-disable @typescript-eslint/no-shadow */
@@ -17,9 +18,8 @@ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t =
17
18
  /* eslint-disable jsx-a11y/click-events-have-key-events */
18
19
  /* eslint-disable jsx-a11y/no-static-element-interactions */
19
20
  import React, { memo, useEffect, useRef, useState, useCallback, createElement as _createElement } from 'react';
20
- import Markdown from 'react-markdown';
21
- import remarkGfm from 'remark-gfm';
22
- import { UserAvatar } from '@projectcor/user-avatar/lib';
21
+ import { Streamdown } from 'streamdown';
22
+ import { createCodePlugin } from '@streamdown/code';
23
23
  import { ArrowSmallDown } from '@projectcor/icons/lib/components/ArrowSmallDown';
24
24
  import { AttachmentCard } from '../../atoms/AttachmentCard/AttachmentCard';
25
25
  import { ApprovalBox } from '../../atoms/ApprovalBox/ApprovalBox';
@@ -32,15 +32,17 @@ import { useChatManager } from '../../../hooks/useChatManager/useChatManager';
32
32
  import { useTaskPanel } from '../../../hooks/useTaskPanel';
33
33
  import { LoadingText } from '../../atoms/LoadingText';
34
34
  import { Loader } from '../../atoms/Loader';
35
- import { GLOBAL_COLORS } from '../../../styles/config';
36
35
  import { MessageFromUser, MessageFromOther, MessageContentFromUser, MessageContentFromOther } from './styles';
37
36
  import { MessageFeedback } from '../MessageFeedback';
38
- import { SCCAIMessageWrapper, ScrollToBottomButton } from './newStyles';
37
+ import { SCCAIMessageWrapper, ScrollToBottomButton, SCMessagesOuter, SCMessagesScroll, SCMessagesInner, SCLoadingMessagesColumn, SCOptionsList, SCOptionItem, SCAssistantMessageHeader, SCAssistantName, SCAssistantAvatar, SCTaskLink, SCMessageItemWrapper, SCMessageItemInner, SCAttachmentsRow, SCApprovalActionsColumn } from './newStyles';
39
38
  import { Feedback } from '../MessageFeedback/MessageFeedback';
40
39
  import { useGlobalContext } from '../../../context/global-context';
41
40
  import { MAIAIsologo } from '../../atoms/icons';
42
41
  import { TASK_URL_REGEX_PATTERN } from '../../../constants/taskUrls';
43
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
42
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
43
+ var code = createCodePlugin({
44
+ themes: ['github-light', 'github-light']
45
+ });
44
46
  var AssistantAvatar = function AssistantAvatar() {
45
47
  var _useState = useState(null),
46
48
  _useState2 = _slicedToArray(_useState, 2),
@@ -51,19 +53,10 @@ var AssistantAvatar = function AssistantAvatar() {
51
53
  useEffect(function () {
52
54
  setLocalAgent(agent);
53
55
  }, [agent]);
54
- return /*#__PURE__*/_jsx("div", {
55
- style: {
56
- width: '40px',
57
- height: '40px',
58
- fontSize: '36px',
59
- display: 'flex',
60
- alignItems: 'center',
61
- justifyContent: 'center',
62
- cursor: 'default'
63
- },
56
+ return /*#__PURE__*/_jsx(SCAssistantAvatar, {
64
57
  children: (localAgent === null || localAgent === void 0 ? void 0 : localAgent.type) === 'clone' ? /*#__PURE__*/_jsx(MAIAIsologo, {
65
- width: 38,
66
- height: 38
58
+ width: 18,
59
+ height: 18
67
60
  }) : localAgent === null || localAgent === void 0 ? void 0 : localAgent.emoji
68
61
  });
69
62
  };
@@ -94,21 +87,11 @@ function MessageOptions(_ref3) {
94
87
  setSelectedOption(option);
95
88
  handleSelectOption(option);
96
89
  };
97
- return /*#__PURE__*/_jsx("div", {
98
- style: {
99
- display: 'flex',
100
- gap: '12px',
101
- flexDirection: 'column'
102
- },
90
+ return /*#__PURE__*/_jsx(SCOptionsList, {
103
91
  children: (options || []).map(function (option) {
104
- return /*#__PURE__*/_jsx("div", {
105
- style: {
106
- color: GLOBAL_COLORS.dark,
107
- fontSize: '14px',
108
- lineHeight: '140%',
109
- cursor: "".concat(selectedOption ? 'not-allowed' : 'pointer'),
110
- opacity: "".concat(selectedOption && (selectedOption === null || selectedOption === void 0 ? void 0 : selectedOption.id) !== option.id ? 0.5 : 1)
111
- },
92
+ return /*#__PURE__*/_jsx(SCOptionItem, {
93
+ $hasSelection: !!selectedOption,
94
+ $dimmed: !!selectedOption && (selectedOption === null || selectedOption === void 0 ? void 0 : selectedOption.id) !== option.id,
112
95
  onClick: function onClick() {
113
96
  return handleSelect(option);
114
97
  },
@@ -117,32 +100,20 @@ function MessageOptions(_ref3) {
117
100
  })
118
101
  });
119
102
  }
120
- var AvatarByUserType = function AvatarByUserType(_ref4) {
121
- var type = _ref4.type,
122
- data = _ref4.data,
123
- authUser = _ref4.authUser;
124
- if (type === 'user') {
125
- if (data.avatarIcon) {
126
- return data.avatarIcon;
127
- }
128
- return /*#__PURE__*/_jsx(UserAvatar, {
129
- withUserCapacity: false,
130
- picture: authUser === null || authUser === void 0 ? void 0 : authUser.picture,
131
- showTootltip: true,
132
- place: "top",
133
- firstName: authUser === null || authUser === void 0 ? void 0 : authUser.firstName,
134
- lastName: authUser === null || authUser === void 0 ? void 0 : authUser.lastName,
135
- withCapacity: false,
136
- size: "large"
137
- });
138
- }
139
- return /*#__PURE__*/_jsx("div", {
140
- style: {
141
- position: 'sticky',
142
- top: 0,
143
- height: 'fit-content'
144
- },
145
- children: /*#__PURE__*/_jsx(AssistantAvatar, {})
103
+ var AssistantMessageHeader = function AssistantMessageHeader() {
104
+ var _useState5 = useState(null),
105
+ _useState6 = _slicedToArray(_useState5, 2),
106
+ localAgent = _useState6[0],
107
+ setLocalAgent = _useState6[1];
108
+ var _useGlobalContext2 = useGlobalContext(),
109
+ agent = _useGlobalContext2.agent;
110
+ useEffect(function () {
111
+ setLocalAgent(agent);
112
+ }, [agent]);
113
+ return /*#__PURE__*/_jsxs(SCAssistantMessageHeader, {
114
+ children: [/*#__PURE__*/_jsx(AssistantAvatar, {}), (localAgent === null || localAgent === void 0 ? void 0 : localAgent.name) && /*#__PURE__*/_jsx(SCAssistantName, {
115
+ children: (localAgent === null || localAgent === void 0 ? void 0 : localAgent.type) === 'clone' ? 'MAIA' : localAgent === null || localAgent === void 0 ? void 0 : localAgent.name
116
+ })]
146
117
  });
147
118
  };
148
119
 
@@ -153,10 +124,10 @@ var getTabSegmentFromHref = function getTabSegmentFromHref(href) {
153
124
  };
154
125
 
155
126
  // Component for task links that uses the useTaskPanel hook
156
- var TaskLink = function TaskLink(_ref5) {
157
- var href = _ref5.href,
158
- taskId = _ref5.taskId,
159
- children = _ref5.children;
127
+ var TaskLink = function TaskLink(_ref4) {
128
+ var href = _ref4.href,
129
+ taskId = _ref4.taskId,
130
+ children = _ref4.children;
160
131
  var tabSegment = getTabSegmentFromHref(href);
161
132
  var _useTaskPanel = useTaskPanel(taskId, tabSegment),
162
133
  buildOpenTask = _useTaskPanel.buildOpenTask;
@@ -169,17 +140,41 @@ var TaskLink = function TaskLink(_ref5) {
169
140
  e.preventDefault();
170
141
  openTask();
171
142
  };
172
- return /*#__PURE__*/_jsx("a", {
143
+ return /*#__PURE__*/_jsx(SCTaskLink, {
173
144
  href: href,
174
145
  onClick: handleClick,
175
- style: {
176
- textDecoration: 'underline !important',
177
- color: '#337ab7 !important',
178
- cursor: 'pointer'
179
- },
180
146
  children: children
181
147
  });
182
148
  };
149
+
150
+ // Custom link component for Streamdown: task URLs open the task panel, other links render normally
151
+
152
+ var CustomLink = function CustomLink(_ref5) {
153
+ var href = _ref5.href,
154
+ children = _ref5.children,
155
+ rest = _objectWithoutProperties(_ref5, _excluded3);
156
+ if (!href || typeof href !== 'string') {
157
+ return /*#__PURE__*/_jsx("a", _objectSpread(_objectSpread({
158
+ href: href
159
+ }, rest), {}, {
160
+ children: children
161
+ }));
162
+ }
163
+ var taskMatch = href.match(new RegExp(TASK_URL_REGEX_PATTERN));
164
+ if (taskMatch) {
165
+ var taskId = taskMatch[1];
166
+ return /*#__PURE__*/_jsx(TaskLink, {
167
+ href: href,
168
+ taskId: taskId,
169
+ children: children
170
+ });
171
+ }
172
+ return /*#__PURE__*/_jsx("a", _objectSpread(_objectSpread({
173
+ href: href
174
+ }, rest), {}, {
175
+ children: children
176
+ }));
177
+ };
183
178
  var MessageItem = /*#__PURE__*/memo(function (props) {
184
179
  var _ref6, _ref7;
185
180
  var id = props.id,
@@ -226,18 +221,10 @@ var MessageItem = /*#__PURE__*/memo(function (props) {
226
221
  }
227
222
  return tasks;
228
223
  };
229
-
230
- // Helper function to extract taskId from a URL
231
- var extractTaskIdFromUrl = function extractTaskIdFromUrl(url) {
232
- if (!url) return null;
233
- var taskUrlRegex = /\/tasks\/(\d+)\/(detail|message|messages|files|history|hours)/;
234
- var match = url.match(taskUrlRegex);
235
- return match ? match[1] : null;
236
- };
237
- var _useState5 = useState(null),
238
- _useState6 = _slicedToArray(_useState5, 2),
239
- previewAttachment = _useState6[0],
240
- setPreviewAttachment = _useState6[1];
224
+ var _useState7 = useState(null),
225
+ _useState8 = _slicedToArray(_useState7, 2),
226
+ previewAttachment = _useState8[0],
227
+ setPreviewAttachment = _useState8[1];
241
228
  var isCurrentUser = role === ChatHistoryRole.USER || user.id === authUser.id.toString();
242
229
  var isAssistant = role === ChatHistoryRole.ASSISTANT || user.id === 'assistant';
243
230
  var handleAttachmentClick = function handleAttachmentClick(attachment) {
@@ -254,20 +241,9 @@ var MessageItem = /*#__PURE__*/memo(function (props) {
254
241
  isCurrentUser: isCurrentUser,
255
242
  "data-message-id": id,
256
243
  hasFeedback: false,
257
- children: /*#__PURE__*/_jsxs("div", {
258
- style: _objectSpread({
259
- display: 'flex',
260
- position: 'relative',
261
- gap: '8px',
262
- flexDirection: isCurrentUser ? 'row-reverse' : 'row'
263
- }, isAssistant && {
264
- justifyContent: 'start'
265
- }),
266
- children: [/*#__PURE__*/_jsx(AvatarByUserType, {
267
- type: isAssistant ? 'assistant' : 'user',
268
- data: user,
269
- authUser: authUser
270
- }), /*#__PURE__*/_jsx(MessageContentWrapper, {
244
+ children: /*#__PURE__*/_jsxs(SCMessageItemWrapper, {
245
+ $isAssistant: isAssistant,
246
+ children: [isAssistant && /*#__PURE__*/_jsx(AssistantMessageHeader, {}), /*#__PURE__*/_jsx(MessageContentWrapper, {
271
247
  isChangeProject: isChangeProject,
272
248
  message: message,
273
249
  isCurrentUser: isCurrentUser,
@@ -286,32 +262,10 @@ var MessageItem = /*#__PURE__*/memo(function (props) {
286
262
  }).join('-');
287
263
  handleFeedback === null || handleFeedback === void 0 || handleFeedback(feedback, sessionId);
288
264
  };
289
- return /*#__PURE__*/_jsxs("div", {
290
- style: _objectSpread({
291
- position: 'relative',
292
- display: 'flex',
293
- gap: '8px',
294
- flexDirection: isCurrentUser ? 'row-reverse' : 'row'
295
- }, isAssistant && {
296
- justifyContent: 'start'
297
- }),
298
- children: [/*#__PURE__*/_jsx(AvatarByUserType, {
299
- type: isAssistant ? 'assistant' : 'user',
300
- data: user,
301
- authUser: authUser
302
- }), /*#__PURE__*/_jsxs("div", {
303
- style: {
304
- display: 'flex',
305
- flexDirection: 'column',
306
- gap: '8px'
307
- },
308
- children: [!!((_ref6 = attachments || sources) !== null && _ref6 !== void 0 && _ref6.length) && !isAssistant && /*#__PURE__*/_jsx("div", {
309
- style: {
310
- display: 'flex',
311
- justifyContent: 'flex-end',
312
- gap: '12px',
313
- flexWrap: 'wrap'
314
- },
265
+ return /*#__PURE__*/_jsxs(SCMessageItemWrapper, {
266
+ $isAssistant: isAssistant,
267
+ children: [isAssistant && /*#__PURE__*/_jsx(AssistantMessageHeader, {}), /*#__PURE__*/_jsxs(SCMessageItemInner, {
268
+ children: [!!((_ref6 = attachments || sources) !== null && _ref6 !== void 0 && _ref6.length) && !isAssistant && /*#__PURE__*/_jsx(SCAttachmentsRow, {
315
269
  children: (_ref7 = attachments || sources) === null || _ref7 === void 0 ? void 0 : _ref7.map(function (attachment, index) {
316
270
  var _attachment$type, _attachment$name;
317
271
  // Detectar si es un archivo de audio
@@ -333,12 +287,7 @@ var MessageItem = /*#__PURE__*/memo(function (props) {
333
287
  }
334
288
  }, "".concat(attachment.id, "-").concat(attachment.name));
335
289
  })
336
- }), approval && approval.pending_actions && /*#__PURE__*/_jsx("div", {
337
- style: {
338
- display: 'flex',
339
- flexDirection: 'column',
340
- gap: '12px'
341
- },
290
+ }), approval && approval.pending_actions && /*#__PURE__*/_jsx(SCApprovalActionsColumn, {
342
291
  children: approval.pending_actions.map(function (action) {
343
292
  var _props$projectMetadat;
344
293
  return /*#__PURE__*/_jsx(ApprovalBox, {
@@ -350,7 +299,8 @@ var MessageItem = /*#__PURE__*/memo(function (props) {
350
299
  onReject: function onReject(threadId) {
351
300
  return handleApprovalDecision(threadId, 'reject');
352
301
  },
353
- isProjectDeleted: ((_props$projectMetadat = props.projectMetadata) === null || _props$projectMetadat === void 0 ? void 0 : _props$projectMetadat.is_deleted) === true
302
+ isProjectDeleted: ((_props$projectMetadat = props.projectMetadata) === null || _props$projectMetadat === void 0 ? void 0 : _props$projectMetadat.is_deleted) === true,
303
+ isExpanded: props.expanded
354
304
  }, "".concat(action.thread_id, "-").concat(action.tool_call_id));
355
305
  })
356
306
  }), !!message &&
@@ -360,53 +310,21 @@ var MessageItem = /*#__PURE__*/memo(function (props) {
360
310
  isCurrentUser: isCurrentUser,
361
311
  isFrontendCancelled: props.isFrontendCancelled,
362
312
  className: isAssistant && extractTasksFromMessage(message).length > 0 ? 'has-task-links' : '',
363
- children: /*#__PURE__*/_jsx(Markdown, {
364
- remarkPlugins: [remarkGfm],
313
+ children: /*#__PURE__*/_jsx(Streamdown, {
314
+ plugins: {
315
+ code: code
316
+ },
365
317
  components: {
366
- a: function a(_ref8) {
367
- var href = _ref8.href,
368
- children = _ref8.children;
369
- var taskId = extractTaskIdFromUrl(href || '');
370
- var isTaskLink = taskId !== null;
371
-
372
- // Si es un enlace de tarea, usar el componente TaskLink que maneja el hook
373
- if (isTaskLink && taskId) {
374
- return /*#__PURE__*/_jsx(TaskLink, {
375
- href: href || '',
376
- taskId: taskId,
377
- children: children
378
- });
379
- }
380
-
381
- // Para enlaces normales, comportamiento estándar
382
- return /*#__PURE__*/_jsx("a", {
383
- href: href,
384
- target: "_blank",
385
- rel: "noopener noreferrer",
386
- style: {
387
- textDecoration: 'underline !important',
388
- color: '#337ab7 !important'
389
- },
390
- children: children
391
- });
392
- },
393
- img: function img(_ref9) {
394
- var src = _ref9.src,
395
- alt = _ref9.alt,
396
- props = _objectWithoutProperties(_ref9, _excluded3);
397
- return /*#__PURE__*/_jsx("img", _objectSpread(_objectSpread({
398
- src: src,
399
- alt: alt
400
- }, props), {}, {
401
- style: {
402
- maxWidth: '280px',
403
- height: 'auto',
404
- display: 'block',
405
- margin: '8px 0',
406
- borderRadius: '4px'
407
- }
408
- }));
409
- }
318
+ a: CustomLink
319
+ },
320
+ linkSafety: {
321
+ enabled: false
322
+ },
323
+ isAnimating: !!props.isStreaming,
324
+ shikiTheme: ['github-light', 'github-light'],
325
+ controls: {
326
+ table: false,
327
+ code: false
410
328
  },
411
329
  children: message
412
330
  })
@@ -423,19 +341,20 @@ var MessageItem = /*#__PURE__*/memo(function (props) {
423
341
  })]
424
342
  });
425
343
  });
426
- var ChatAIMessagesInner = function ChatAIMessagesInner(_ref0) {
427
- var userInitialMessage = _ref0.userInitialMessage,
428
- initialChatId = _ref0.initialChatId,
429
- onError = _ref0.onError,
430
- onSendMessageReady = _ref0.onSendMessageReady,
431
- onScrollToBottom = _ref0.onScrollToBottom,
432
- attachments = _ref0.attachments,
433
- agents = _ref0.agents;
344
+ var ChatAIMessagesInner = function ChatAIMessagesInner(_ref8) {
345
+ var userInitialMessage = _ref8.userInitialMessage,
346
+ initialChatId = _ref8.initialChatId,
347
+ onError = _ref8.onError,
348
+ onSendMessageReady = _ref8.onSendMessageReady,
349
+ onScrollToBottom = _ref8.onScrollToBottom,
350
+ attachments = _ref8.attachments,
351
+ agents = _ref8.agents,
352
+ expanded = _ref8.expanded;
434
353
  var _useT = useT(),
435
354
  t = _useT.t;
436
- var _useGlobalContext2 = useGlobalContext(),
437
- isWebSearchActive = _useGlobalContext2.isWebSearchActive,
438
- isDeepSearchActive = _useGlobalContext2.isDeepSearchActive;
355
+ var _useGlobalContext3 = useGlobalContext(),
356
+ isWebSearchActive = _useGlobalContext3.isWebSearchActive,
357
+ isDeepSearchActive = _useGlobalContext3.isDeepSearchActive;
439
358
  var authUser = useUser();
440
359
  var messagesRef = useRef(null);
441
360
  var chatInitializedRef = useRef(false);
@@ -445,10 +364,10 @@ var ChatAIMessagesInner = function ChatAIMessagesInner(_ref0) {
445
364
  var lastScrollTopRef = useRef(0);
446
365
  var showScrollToBottomRef = useRef(false);
447
366
  var scrollRafRef = useRef(null);
448
- var _useState7 = useState(false),
449
- _useState8 = _slicedToArray(_useState7, 2),
450
- showScrollToBottom = _useState8[0],
451
- setShowScrollToBottom = _useState8[1];
367
+ var _useState9 = useState(false),
368
+ _useState0 = _slicedToArray(_useState9, 2),
369
+ showScrollToBottom = _useState0[0],
370
+ setShowScrollToBottom = _useState0[1];
452
371
  var _useChatManager = useChatManager({
453
372
  chatId: initialChatId || undefined,
454
373
  userInitialMessage: userInitialMessage,
@@ -684,56 +603,54 @@ var ChatAIMessagesInner = function ChatAIMessagesInner(_ref0) {
684
603
  return msg.role === ChatHistoryRole.USER || msg.user.id === authUser.id.toString();
685
604
  }).at(-1);
686
605
  var hasAttachments = Array.isArray(lastUserMessage === null || lastUserMessage === void 0 ? void 0 : lastUserMessage.attachments) && lastUserMessage.attachments.length || Array.isArray(lastUserMessage === null || lastUserMessage === void 0 ? void 0 : lastUserMessage.sources) && lastUserMessage.sources.length;
687
- return /*#__PURE__*/_jsxs("div", {
688
- style: {
689
- display: 'flex',
690
- flexGrow: 1,
691
- justifyContent: 'center',
692
- overflow: 'auto',
693
- position: 'relative'
694
- },
695
- children: [/*#__PURE__*/_jsxs("div", {
606
+ var isScrollOnParent = !!expanded;
607
+ var messagesContent = /*#__PURE__*/_jsxs(_Fragment, {
608
+ children: [isLoadingMoreMessages && /*#__PURE__*/_jsx(LoadingText, {
609
+ text: t('chat.loadingMore')
610
+ }), messages.map(function (message, index) {
611
+ var _message$attachments, _message$sources, _message$project;
612
+ if (!((_message$attachments = message.attachments) !== null && _message$attachments !== void 0 && _message$attachments.length || (_message$sources = message.sources) !== null && _message$sources !== void 0 && _message$sources.length) && !message.message && !((_message$project = message.project) !== null && _message$project !== void 0 && _message$project.name) && !message.approval) return null;
613
+ var messageFeedback = (message === null || message === void 0 ? void 0 : message.wasHelpful) === undefined || message.wasHelpful === null ? null : message.wasHelpful ? Feedback.THUMBS_UP : Feedback.THUMBS_DOWN;
614
+ var isAssistantMessage = message.role === ChatHistoryRole.ASSISTANT || message.user.id === 'assistant';
615
+ var isLastMessage = index === messages.length - 1;
616
+ var isStreaming = isAssistantMessage && isLastMessage && (waitingResponse || isWriting);
617
+ return /*#__PURE__*/_createElement(MessageItem, _objectSpread(_objectSpread({}, message), {}, {
618
+ key: message.id != null ? "".concat(message.id, "-").concat(message.date) : "msg-".concat(index),
619
+ authUser: authUser,
620
+ handleSelectOption: handleSelectOption,
621
+ handleFeedback: handleFeedback,
622
+ handleApprovalDecision: handleApprovalDecision,
623
+ disableFeedback: messageFeedback,
624
+ isStreaming: isStreaming,
625
+ expanded: expanded
626
+ }));
627
+ }), (waitingResponse || loadingMessage || Object.keys(activeLoadings || {}).length > 0) && /*#__PURE__*/_jsxs(SCLoadingMessagesColumn, {
628
+ children: [(waitingResponse || loadingMessage) && /*#__PURE__*/_jsx(LoadingText, {
629
+ text: loadingMessage || (isWebSearchActive ? 'Buscando en la web' : isDeepSearchActive ? t('chat.generatingDeepSearch') : hasAttachments ? t('chat.generatingAttachment') : t('chat.generating'))
630
+ }), Object.entries(activeLoadings || {}).map(function (_ref9) {
631
+ var _ref0 = _slicedToArray(_ref9, 2),
632
+ threadId = _ref0[0],
633
+ message = _ref0[1];
634
+ return /*#__PURE__*/_jsx(LoadingText, {
635
+ text: message
636
+ }, "loading-".concat(threadId));
637
+ })]
638
+ })]
639
+ });
640
+ return /*#__PURE__*/_jsxs(SCMessagesOuter, {
641
+ $scrollOnParent: isScrollOnParent,
642
+ children: [isScrollOnParent ? /*#__PURE__*/_jsx(SCMessagesScroll, {
696
643
  ref: messagesRef,
697
644
  onScroll: handleScrollToBottom,
698
- style: {
699
- flexGrow: 1,
700
- overflowY: 'auto',
701
- display: 'flex',
702
- flexDirection: 'column',
703
- gap: '36px',
704
- padding: '0px 16px',
705
- maxWidth: '864px'
706
- },
707
- children: [isLoadingMoreMessages && /*#__PURE__*/_jsx(LoadingText, {
708
- text: t('chat.loadingMore')
709
- }), messages.map(function (message, index) {
710
- var _message$attachments, _message$sources, _message$project;
711
- if (!((_message$attachments = message.attachments) !== null && _message$attachments !== void 0 && _message$attachments.length || (_message$sources = message.sources) !== null && _message$sources !== void 0 && _message$sources.length) && !message.message && !((_message$project = message.project) !== null && _message$project !== void 0 && _message$project.name) && !message.approval) return null;
712
- var messageFeedback = (message === null || message === void 0 ? void 0 : message.wasHelpful) === undefined || message.wasHelpful === null ? null : message.wasHelpful ? Feedback.THUMBS_UP : Feedback.THUMBS_DOWN;
713
- return /*#__PURE__*/_createElement(MessageItem, _objectSpread(_objectSpread({}, message), {}, {
714
- key: message.id != null ? "".concat(message.id, "-").concat(message.date) : "msg-".concat(index),
715
- authUser: authUser,
716
- handleSelectOption: handleSelectOption,
717
- handleFeedback: handleFeedback,
718
- handleApprovalDecision: handleApprovalDecision,
719
- disableFeedback: messageFeedback
720
- }));
721
- }), (waitingResponse || loadingMessage || Object.keys(activeLoadings || {}).length > 0) && /*#__PURE__*/_jsxs("div", {
722
- style: {
723
- display: 'flex',
724
- flexDirection: 'column'
725
- },
726
- children: [(waitingResponse || loadingMessage) && /*#__PURE__*/_jsx(LoadingText, {
727
- text: loadingMessage || (isWebSearchActive ? 'Buscando en la web' : isDeepSearchActive ? t('chat.generatingDeepSearch') : hasAttachments ? t('chat.generatingAttachment') : t('chat.generating'))
728
- }), Object.entries(activeLoadings || {}).map(function (_ref1) {
729
- var _ref10 = _slicedToArray(_ref1, 2),
730
- threadId = _ref10[0],
731
- message = _ref10[1];
732
- return /*#__PURE__*/_jsx(LoadingText, {
733
- text: message
734
- }, "loading-".concat(threadId));
735
- })]
736
- })]
645
+ children: /*#__PURE__*/_jsx(SCMessagesInner, {
646
+ $scrollOnParent: isScrollOnParent,
647
+ children: messagesContent
648
+ })
649
+ }) : /*#__PURE__*/_jsx(SCMessagesInner, {
650
+ ref: messagesRef,
651
+ onScroll: handleScrollToBottom,
652
+ $scrollOnParent: false,
653
+ children: messagesContent
737
654
  }), showScrollToBottom && /*#__PURE__*/_jsx(ScrollToBottomButton, {
738
655
  type: "button",
739
656
  onClick: handleClickScrollToBottom,
@@ -746,4 +663,4 @@ var ChatAIMessagesInner = function ChatAIMessagesInner(_ref0) {
746
663
  });
747
664
  };
748
665
  export var ChatAIMessages = /*#__PURE__*/React.memo(ChatAIMessagesInner);
749
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSZWFjdCIsIm1lbW8iLCJ1c2VFZmZlY3QiLCJ1c2VSZWYiLCJ1c2VTdGF0ZSIsInVzZUNhbGxiYWNrIiwiY3JlYXRlRWxlbWVudCIsIl9jcmVhdGVFbGVtZW50IiwiTWFya2Rvd24iLCJyZW1hcmtHZm0iLCJVc2VyQXZhdGFyIiwiQXJyb3dTbWFsbERvd24iLCJBdHRhY2htZW50Q2FyZCIsIkFwcHJvdmFsQm94IiwiQXR0YWNobWVudFByZXZpZXdNb2RhbCIsIkF0dGFjaG1lbnRDYXJkQXVkaW8iLCJDaGF0SGlzdG9yeVJvbGUiLCJ1c2VVc2VyIiwidXNlVCIsInVzZUNoYXRNYW5hZ2VyIiwidXNlVGFza1BhbmVsIiwiTG9hZGluZ1RleHQiLCJMb2FkZXIiLCJHTE9CQUxfQ09MT1JTIiwiTWVzc2FnZUZyb21Vc2VyIiwiTWVzc2FnZUZyb21PdGhlciIsIk1lc3NhZ2VDb250ZW50RnJvbVVzZXIiLCJNZXNzYWdlQ29udGVudEZyb21PdGhlciIsIk1lc3NhZ2VGZWVkYmFjayIsIlNDQ0FJTWVzc2FnZVdyYXBwZXIiLCJTY3JvbGxUb0JvdHRvbUJ1dHRvbiIsIkZlZWRiYWNrIiwidXNlR2xvYmFsQ29udGV4dCIsIk1BSUFJc29sb2dvIiwiVEFTS19VUkxfUkVHRVhfUEFUVEVSTiIsImpzeCIsIl9qc3giLCJqc3hzIiwiX2pzeHMiLCJBc3Npc3RhbnRBdmF0YXIiLCJfdXNlU3RhdGUiLCJfdXNlU3RhdGUyIiwiX3NsaWNlZFRvQXJyYXkiLCJsb2NhbEFnZW50Iiwic2V0TG9jYWxBZ2VudCIsIl91c2VHbG9iYWxDb250ZXh0IiwiYWdlbnQiLCJzdHlsZSIsIndpZHRoIiwiaGVpZ2h0IiwiZm9udFNpemUiLCJkaXNwbGF5IiwiYWxpZ25JdGVtcyIsImp1c3RpZnlDb250ZW50IiwiY3Vyc29yIiwiY2hpbGRyZW4iLCJ0eXBlIiwiZW1vamkiLCJNZXNzYWdlV3JhcHBlciIsIl9yZWYiLCJpc0N1cnJlbnRVc2VyIiwicHJvcHMiLCJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCJfZXhjbHVkZWQiLCJNZXNzYWdlQ29tcG9uZW50IiwiX29iamVjdFNwcmVhZCIsIk1lc3NhZ2VDb250ZW50V3JhcHBlciIsIl9yZWYyIiwiX2V4Y2x1ZGVkMiIsIk1lc3NhZ2VDb250ZW50Q29tcG9uZW50IiwiTWVzc2FnZU9wdGlvbnMiLCJfcmVmMyIsIm9wdGlvbnMiLCJoYW5kbGVTZWxlY3RPcHRpb24iLCJfdXNlU3RhdGUzIiwiX3VzZVN0YXRlNCIsInNlbGVjdGVkT3B0aW9uIiwic2V0U2VsZWN0ZWRPcHRpb24iLCJoYW5kbGVTZWxlY3QiLCJvcHRpb24iLCJnYXAiLCJmbGV4RGlyZWN0aW9uIiwibWFwIiwiY29sb3IiLCJkYXJrIiwibGluZUhlaWdodCIsImNvbmNhdCIsIm9wYWNpdHkiLCJpZCIsIm9uQ2xpY2siLCJuYW1lIiwiQXZhdGFyQnlVc2VyVHlwZSIsIl9yZWY0IiwiZGF0YSIsImF1dGhVc2VyIiwiYXZhdGFySWNvbiIsIndpdGhVc2VyQ2FwYWNpdHkiLCJwaWN0dXJlIiwic2hvd1Rvb3RsdGlwIiwicGxhY2UiLCJmaXJzdE5hbWUiLCJsYXN0TmFtZSIsIndpdGhDYXBhY2l0eSIsInNpemUiLCJwb3NpdGlvbiIsInRvcCIsImdldFRhYlNlZ21lbnRGcm9tSHJlZiIsImhyZWYiLCJtYXRjaCIsInRlc3QiLCJUYXNrTGluayIsIl9yZWY1IiwidGFza0lkIiwidGFiU2VnbWVudCIsIl91c2VUYXNrUGFuZWwiLCJidWlsZE9wZW5UYXNrIiwib3BlblRhc2siLCJoYW5kbGVDbGljayIsImUiLCJtZXRhS2V5IiwiY3RybEtleSIsInByZXZlbnREZWZhdWx0IiwidGV4dERlY29yYXRpb24iLCJNZXNzYWdlSXRlbSIsIl9yZWY2IiwiX3JlZjciLCJ1c2VyIiwibWVzc2FnZSIsImlzRXJyb3IiLCJpc0NoYW5nZVByb2plY3QiLCJoYW5kbGVGZWVkYmFjayIsImhhbmRsZUFwcHJvdmFsRGVjaXNpb24iLCJkaXNhYmxlRmVlZGJhY2siLCJyb2xlIiwic291cmNlcyIsImF0dGFjaG1lbnRzIiwiYXBwcm92YWwiLCJhcHByb3ZhbFN0YXR1cyIsImV4dHJhY3RUYXNrc0Zyb21NZXNzYWdlIiwidGFza1VybFJlZ2V4IiwiUmVnRXhwIiwidGFza3MiLCJzZWVuSWRzIiwiU2V0IiwiZXhlYyIsInVybCIsImhhcyIsImFkZCIsIm1hcmtkb3duTGlua1JlZ2V4IiwicmVwbGFjZSIsImxpbmtNYXRjaCIsInRpdGxlIiwicHVzaCIsImV4dHJhY3RUYXNrSWRGcm9tVXJsIiwiX3VzZVN0YXRlNSIsIl91c2VTdGF0ZTYiLCJwcmV2aWV3QXR0YWNobWVudCIsInNldFByZXZpZXdBdHRhY2htZW50IiwiVVNFUiIsInRvU3RyaW5nIiwiaXNBc3Npc3RhbnQiLCJBU1NJU1RBTlQiLCJoYW5kbGVBdHRhY2htZW50Q2xpY2siLCJhdHRhY2htZW50IiwiZmlsZSIsIkZpbGUiLCJvcmlnaW5hbEZpbGUiLCJ1cmxfdGh1bWJuYWlsIiwidXJsX29yaWdpbmFsIiwidXJsX2ZpbGUiLCJoYW5kbGVDbG9zZVByZXZpZXciLCJoYXNGZWVkYmFjayIsIm1lc3NhZ2VFeHRyYUNvbnRlbnQiLCJoYW5kbGVGZWVkYmFja0NsaWNrIiwiZmVlZGJhY2siLCJzZXNzaW9uSWQiLCJzcGxpdCIsImZpbHRlciIsInF1ZXN0aW9uSWQiLCJqb2luIiwibGVuZ3RoIiwiZmxleFdyYXAiLCJpbmRleCIsIl9hdHRhY2htZW50JHR5cGUiLCJfYXR0YWNobWVudCRuYW1lIiwiYXR0YWNobWVudFR5cGUiLCJ0b0xvd2VyQ2FzZSIsImF0dGFjaG1lbnROYW1lIiwiaXNBdWRpb0ZpbGUiLCJzdGFydHNXaXRoIiwiaW5jbHVkZXMiLCJzb21lIiwiZXh0IiwiZW5kc1dpdGgiLCJwb3NpdGlvbkluZGV4IiwicGVuZGluZ19hY3Rpb25zIiwiYWN0aW9uIiwiX3Byb3BzJHByb2plY3RNZXRhZGF0Iiwic3RhdHVzIiwib25BcHByb3ZlIiwidGhyZWFkSWQiLCJvblJlamVjdCIsImlzUHJvamVjdERlbGV0ZWQiLCJwcm9qZWN0TWV0YWRhdGEiLCJpc19kZWxldGVkIiwidGhyZWFkX2lkIiwidG9vbF9jYWxsX2lkIiwiaXNGcm9udGVuZENhbmNlbGxlZCIsImNsYXNzTmFtZSIsInJlbWFya1BsdWdpbnMiLCJjb21wb25lbnRzIiwiYSIsIl9yZWY4IiwiaXNUYXNrTGluayIsInRhcmdldCIsInJlbCIsImltZyIsIl9yZWY5Iiwic3JjIiwiYWx0IiwiX2V4Y2x1ZGVkMyIsIm1heFdpZHRoIiwibWFyZ2luIiwiYm9yZGVyUmFkaXVzIiwiY29udGVudCIsImlzT3BlbiIsIm9uQ2xvc2UiLCJDaGF0QUlNZXNzYWdlc0lubmVyIiwiX3JlZjAiLCJ1c2VySW5pdGlhbE1lc3NhZ2UiLCJpbml0aWFsQ2hhdElkIiwib25FcnJvciIsIm9uU2VuZE1lc3NhZ2VSZWFkeSIsIm9uU2Nyb2xsVG9Cb3R0b20iLCJhZ2VudHMiLCJfdXNlVCIsInQiLCJfdXNlR2xvYmFsQ29udGV4dDIiLCJpc1dlYlNlYXJjaEFjdGl2ZSIsImlzRGVlcFNlYXJjaEFjdGl2ZSIsIm1lc3NhZ2VzUmVmIiwiY2hhdEluaXRpYWxpemVkUmVmIiwiaXNMb2FkaW5nTW9yZVJlZiIsInVzZXJTY3JvbGxpbmdSZWYiLCJzY3JvbGxUaHJlc2hvbGRSZWYiLCJsYXN0U2Nyb2xsVG9wUmVmIiwic2hvd1Njcm9sbFRvQm90dG9tUmVmIiwic2Nyb2xsUmFmUmVmIiwiX3VzZVN0YXRlNyIsIl91c2VTdGF0ZTgiLCJzaG93U2Nyb2xsVG9Cb3R0b20iLCJzZXRTaG93U2Nyb2xsVG9Cb3R0b20iLCJfdXNlQ2hhdE1hbmFnZXIiLCJjaGF0SWQiLCJ1bmRlZmluZWQiLCJtZXNzYWdlcyIsImxvYWRpbmdNZXNzYWdlcyIsImlzTG9hZGluZ01vcmVNZXNzYWdlcyIsIndhaXRpbmdSZXNwb25zZSIsImlzV3JpdGluZyIsImxvYWRpbmdNZXNzYWdlIiwiYWN0aXZlTG9hZGluZ3MiLCJzZW5kTWVzc2FnZSIsImNoYW5nZVByb2plY3QiLCJpbml0aWFsaXplQ2hhdCIsImhhbmRsZVNjcm9sbCIsInN0b3BHZW5lcmF0aW9uIiwiaGFuZGxlQ2xpY2tTY3JvbGxUb0JvdHRvbSIsImN1cnJlbnQiLCJzY3JvbGxUbyIsInNjcm9sbEhlaWdodCIsImJlaGF2aW9yIiwic2V0VGltZW91dCIsIl9tZXNzYWdlc1JlZiRjdXJyZW50Iiwic2Nyb2xsVG9wIiwiY2xpZW50SGVpZ2h0IiwiZGlzdGFuY2VGcm9tQm90dG9tIiwic2hvdWxkU2hvdyIsImhhbmRsZVNjcm9sbFRvQm90dG9tIiwiY29udGFpbmVyIiwiY3VycmVudFRhcmdldCIsImNhbmNlbEFuaW1hdGlvbkZyYW1lIiwicmVxdWVzdEFuaW1hdGlvbkZyYW1lIiwiaXNTY3JvbGxpbmdVcCIsImlzTmVhckJvdHRvbSIsImRpZFNldFN0YXRlIiwic2VuZE1lc3NhZ2VSZWYiLCJzdG9wR2VuZXJhdGlvblJlZiIsIm9uU2VuZE1lc3NhZ2VSZWFkeVJlZiIsImxhc3RNZXNzYWdlIiwiaGFzQXBwcm92YWwiLCJpc0F0Qm90dG9tIiwic2Nyb2xsVG9Cb3R0b20iLCJfbWVzc2FnZXNSZWYkY3VycmVudDIiLCJpc05ld0Fuc3dlck1lc3NhZ2UiLCJpc05ld1VzZXJNZXNzYWdlIiwiaXNOZXdBcHByb3ZhbE1lc3NhZ2UiLCJoYXNNZXNzYWdlcyIsImlzTm90SW5pdGlhbE1lc3NhZ2UiLCJtc2ciLCJzY3JvbGxEZWxheSIsImRvU2Nyb2xsIiwiX21lc3NhZ2VzUmVmJGN1cnJlbnQzIiwiX21lc3NhZ2VzUmVmJGN1cnJlbnQ0IiwibGFzdFVzZXJNZXNzYWdlIiwiYXQiLCJoYXNBdHRhY2htZW50cyIsIkFycmF5IiwiaXNBcnJheSIsImZsZXhHcm93Iiwib3ZlcmZsb3ciLCJyZWYiLCJvblNjcm9sbCIsIm92ZXJmbG93WSIsInBhZGRpbmciLCJ0ZXh0IiwiX21lc3NhZ2UkYXR0YWNobWVudHMiLCJfbWVzc2FnZSRzb3VyY2VzIiwiX21lc3NhZ2UkcHJvamVjdCIsInByb2plY3QiLCJtZXNzYWdlRmVlZGJhY2siLCJ3YXNIZWxwZnVsIiwiVEhVTUJTX1VQIiwiVEhVTUJTX0RPV04iLCJrZXkiLCJkYXRlIiwiT2JqZWN0Iiwia2V5cyIsImVudHJpZXMiLCJfcmVmMSIsIl9yZWYxMCIsIkNoYXRBSU1lc3NhZ2VzIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvbW9sZWN1bGVzL0NoYXRBSU1lc3NhZ2VzL0NoYXRBSU1lc3NhZ2VzLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvaW5kZW50ICovXG4vKiBlc2xpbnQtZGlzYWJsZSByZWFjdC9uby11bnN0YWJsZS1uZXN0ZWQtY29tcG9uZW50cyAqL1xuLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXNoYWRvdyAqL1xuLyogZXNsaW50LWRpc2FibGUgbm8tbmVzdGVkLXRlcm5hcnkgKi9cbi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkgKi9cbi8qIGVzbGludC1kaXNhYmxlIG5vLXVuZGVmICovXG4vKiBlc2xpbnQtZGlzYWJsZSByZWFjdC9mdW5jdGlvbi1jb21wb25lbnQtZGVmaW5pdGlvbiAqL1xuLyogZXNsaW50LWRpc2FibGUgcmVhY3QvcmVxdWlyZS1kZWZhdWx0LXByb3BzICovXG4vKiBlc2xpbnQtZGlzYWJsZSBqc3gtYTExeS9jbGljay1ldmVudHMtaGF2ZS1rZXktZXZlbnRzICovXG4vKiBlc2xpbnQtZGlzYWJsZSBqc3gtYTExeS9uby1zdGF0aWMtZWxlbWVudC1pbnRlcmFjdGlvbnMgKi9cbmltcG9ydCBSZWFjdCwgeyBGQywgbWVtbywgUmVhY3ROb2RlLCB1c2VFZmZlY3QsIHVzZVJlZiwgdXNlU3RhdGUsIHVzZUNhbGxiYWNrIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgTWFya2Rvd24gZnJvbSAncmVhY3QtbWFya2Rvd24nXG5pbXBvcnQgcmVtYXJrR2ZtIGZyb20gJ3JlbWFyay1nZm0nXG5pbXBvcnQgeyBVc2VyQXZhdGFyIH0gZnJvbSAnQHByb2plY3Rjb3IvdXNlci1hdmF0YXIvbGliJ1xuaW1wb3J0IHsgQXJyb3dTbWFsbERvd24gfSBmcm9tICdAcHJvamVjdGNvci9pY29ucy9saWIvY29tcG9uZW50cy9BcnJvd1NtYWxsRG93bidcblxuaW1wb3J0IHsgQXR0YWNobWVudENhcmQgfSBmcm9tICcuLi8uLi9hdG9tcy9BdHRhY2htZW50Q2FyZC9BdHRhY2htZW50Q2FyZCdcbmltcG9ydCB7IEFwcHJvdmFsQm94IH0gZnJvbSAnLi4vLi4vYXRvbXMvQXBwcm92YWxCb3gvQXBwcm92YWxCb3gnXG5pbXBvcnQgeyBBdHRhY2htZW50UHJldmlld01vZGFsIH0gZnJvbSAnLi4vLi4vYXRvbXMvQXR0YWNobWVudFByZXZpZXdNb2RhbCdcbmltcG9ydCB7IEF0dGFjaG1lbnRDYXJkQXVkaW8gfSBmcm9tICcuLi8uLi9hdG9tcy9BdHRhY2htZW50Q2FyZC9BdHRhY2htZW50Q2FyZEF1ZGlvJ1xuaW1wb3J0IHsgTUFJQU1lc3NhZ2VQcm9wcyB9IGZyb20gJy4uLy4uL2F0b21zL01BSUFNZXNzYWdlL01BSUFNZXNzYWdlLmludGVyZmFjZXMnXG5pbXBvcnQgeyBDaGF0TWVzc2FnZSwgQ2hhdEhpc3RvcnlSb2xlLCBDaGF0TWVzc2FnZVVzZXIsIFRhc2tJbmZvIH0gZnJvbSAnLi4vLi4vLi4vdHlwZXMvQ2hhdCdcblxuaW1wb3J0IHsgQ09SVXNlciwgdXNlVXNlciB9IGZyb20gJy4uLy4uLy4uL2NvbnRleHQvY29yLXVzZXInXG5cbmltcG9ydCB7IHVzZVQgfSBmcm9tICcuLi8uLi8uLi9ob29rcy91c2VUJ1xuaW1wb3J0IHsgdXNlQ2hhdE1hbmFnZXIgfSBmcm9tICcuLi8uLi8uLi9ob29rcy91c2VDaGF0TWFuYWdlci91c2VDaGF0TWFuYWdlcidcbmltcG9ydCB7IHVzZVRhc2tQYW5lbCB9IGZyb20gJy4uLy4uLy4uL2hvb2tzL3VzZVRhc2tQYW5lbCdcblxuaW1wb3J0IHsgTG9hZGluZ1RleHQgfSBmcm9tICcuLi8uLi9hdG9tcy9Mb2FkaW5nVGV4dCdcbmltcG9ydCB7IExvYWRlciB9IGZyb20gJy4uLy4uL2F0b21zL0xvYWRlcidcblxuaW1wb3J0IHsgUHJvamVjdCB9IGZyb20gJy4uLy4uLy4uL3R5cGVzL1Byb2plY3QnXG5pbXBvcnQgeyBHTE9CQUxfQ09MT1JTIH0gZnJvbSAnLi4vLi4vLi4vc3R5bGVzL2NvbmZpZydcblxuaW1wb3J0IHsgTWVzc2FnZUZyb21Vc2VyLCBNZXNzYWdlRnJvbU90aGVyLCBNZXNzYWdlQ29udGVudEZyb21Vc2VyLCBNZXNzYWdlQ29udGVudEZyb21PdGhlciB9IGZyb20gJy4vc3R5bGVzJ1xuaW1wb3J0IHsgTWVzc2FnZUZlZWRiYWNrIH0gZnJvbSAnLi4vTWVzc2FnZUZlZWRiYWNrJ1xuaW1wb3J0IHsgU0NDQUlNZXNzYWdlV3JhcHBlciwgU2Nyb2xsVG9Cb3R0b21CdXR0b24gfSBmcm9tICcuL25ld1N0eWxlcydcbmltcG9ydCB7IEZlZWRiYWNrIH0gZnJvbSAnLi4vTWVzc2FnZUZlZWRiYWNrL01lc3NhZ2VGZWVkYmFjaydcbmltcG9ydCB7IHVzZUdsb2JhbENvbnRleHQgfSBmcm9tICcuLi8uLi8uLi9jb250ZXh0L2dsb2JhbC1jb250ZXh0J1xuaW1wb3J0IHsgQWdlbnQgfSBmcm9tICcuLi8uLi8uLi90eXBlcy9hZ2VudCdcbmltcG9ydCB7IEF0dGFjaG1lbnRGaWxlIH0gZnJvbSAnLi4vQ2hhdEZvb3Rlci9DaGF0Rm9vdGVyJ1xuaW1wb3J0IHsgTUFJQUlzb2xvZ28gfSBmcm9tICcuLi8uLi9hdG9tcy9pY29ucydcbmltcG9ydCB7IFRBU0tfVVJMX1JFR0VYX1BBVFRFUk4gfSBmcm9tICcuLi8uLi8uLi9jb25zdGFudHMvdGFza1VybHMnXG5cbmNvbnN0IEFzc2lzdGFudEF2YXRhciA9ICgpID0+IHtcbiAgY29uc3QgW2xvY2FsQWdlbnQsIHNldExvY2FsQWdlbnRdID0gdXNlU3RhdGU8QWdlbnQgfCBudWxsPihudWxsKVxuICBjb25zdCB7IGFnZW50IH0gPSB1c2VHbG9iYWxDb250ZXh0KClcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIHNldExvY2FsQWdlbnQoYWdlbnQpXG4gIH0sIFthZ2VudF0pXG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2XG4gICAgICBzdHlsZT17e1xuICAgICAgICB3aWR0aDogJzQwcHgnLFxuICAgICAgICBoZWlnaHQ6ICc0MHB4JyxcbiAgICAgICAgZm9udFNpemU6ICczNnB4JyxcbiAgICAgICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgICAgICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAgICAgICAganVzdGlmeUNvbnRlbnQ6ICdjZW50ZXInLFxuICAgICAgICBjdXJzb3I6ICdkZWZhdWx0JyxcbiAgICAgIH19XG4gICAgPlxuICAgICAge2xvY2FsQWdlbnQ/LnR5cGUgPT09ICdjbG9uZScgPyA8TUFJQUlzb2xvZ28gd2lkdGg9ezM4fSBoZWlnaHQ9ezM4fSAvPiA6IGxvY2FsQWdlbnQ/LmVtb2ppfVxuICAgIDwvZGl2PlxuICApXG59XG5cbnR5cGUgQ2hhdEFJTWVzc2FnZXNQcm9wcyA9IHtcbiAgdXNlckluaXRpYWxNZXNzYWdlOiB7IG1lc3NhZ2U6IHN0cmluZzsgYXR0YWNobWVudHM6IEF0dGFjaG1lbnRGaWxlW107IGZhcUlkPzogc3RyaW5nIH1cbiAgaW5pdGlhbENoYXRJZDogc3RyaW5nIHwgbnVsbFxuICBvbkVycm9yOiAoKSA9PiB2b2lkXG4gIG9uU2VuZE1lc3NhZ2VSZWFkeT86IChcbiAgICBzZW5kTWVzc2FnZTogKG1lc3NhZ2U6IHN0cmluZykgPT4gdm9pZCxcbiAgICBzdG9wR2VuZXJhdGlvbjogKCkgPT4gdm9pZCxcbiAgICBpc1N0cmVhbWluZzogYm9vbGVhbixcbiAgICBpc1dyaXRpbmc6IGJvb2xlYW5cbiAgKSA9PiB2b2lkXG4gIGlzRGlzYWJsZWQ/OiBib29sZWFuXG4gIG9uU2Nyb2xsVG9Cb3R0b20/OiAoKSA9PiB2b2lkXG4gIGF0dGFjaG1lbnRzPzogQXR0YWNobWVudEZpbGVbXVxuICBhZ2VudHM/OiBBZ2VudFtdXG59XG5cbnR5cGUgTWVzc2FnZUl0ZW1Qcm9wcyA9IENoYXRNZXNzYWdlICYge1xuICBhdXRoVXNlcjogQ09SVXNlclxuICBoYW5kbGVTZWxlY3RPcHRpb246IChvcHRpb246IFByb2plY3QpID0+IHZvaWRcbiAgaGFuZGxlRmVlZGJhY2s6IChmZWVkYmFjazogRmVlZGJhY2ssIGNoYXRNZXNzYWdlSWQ6IHN0cmluZykgPT4gdm9pZFxuICBoYW5kbGVBcHByb3ZhbERlY2lzaW9uOiAodGhyZWFkSWQ6IHN0cmluZywgZGVjaXNpb246ICdhcHByb3ZlJyB8ICdyZWplY3QnKSA9PiB2b2lkXG4gIGRpc2FibGVGZWVkYmFjaz86IEZlZWRiYWNrIHwgbnVsbFxuICBzb3VyY2VzPzogYW55XG4gIGF0dGFjaG1lbnRzPzogQXR0YWNobWVudEZpbGVbXVxufVxuXG5pbnRlcmZhY2UgTWVzc2FnZVdyYXBwZXJQcm9wcyB7XG4gIGlzQ3VycmVudFVzZXI6IGJvb2xlYW5cbiAgY2hpbGRyZW46IFJlYWN0Tm9kZVxuICAnZGF0YS1tZXNzYWdlLWlkJz86IHN0cmluZ1xuICBoYXNGZWVkYmFjaz86IGJvb2xlYW5cbn1cblxudHlwZSBNZXNzYWdlQ29udGVudFdyYXBwZXJQcm9wcyA9IE1BSUFNZXNzYWdlUHJvcHMgJiB7XG4gIGlzQ3VycmVudFVzZXI6IGJvb2xlYW5cbiAgaXNFcnJvcj86IGJvb2xlYW5cbiAgaXNDaGFuZ2VQcm9qZWN0PzogYm9vbGVhblxufVxuXG5jb25zdCBNZXNzYWdlV3JhcHBlcjogRkM8TWVzc2FnZVdyYXBwZXJQcm9wcz4gPSAoeyBpc0N1cnJlbnRVc2VyLCBjaGlsZHJlbiwgLi4ucHJvcHMgfSkgPT4ge1xuICBjb25zdCBNZXNzYWdlQ29tcG9uZW50ID0gaXNDdXJyZW50VXNlciA/IE1lc3NhZ2VGcm9tVXNlciA6IE1lc3NhZ2VGcm9tT3RoZXJcbiAgcmV0dXJuIDxNZXNzYWdlQ29tcG9uZW50IHsuLi5wcm9wc30+e2NoaWxkcmVufTwvTWVzc2FnZUNvbXBvbmVudD5cbn1cblxuY29uc3QgTWVzc2FnZUNvbnRlbnRXcmFwcGVyOiBGQzxNZXNzYWdlQ29udGVudFdyYXBwZXJQcm9wcz4gPSAoeyBpc0N1cnJlbnRVc2VyLCAuLi5wcm9wcyB9KSA9PiB7XG4gIGNvbnN0IE1lc3NhZ2VDb250ZW50Q29tcG9uZW50ID0gaXNDdXJyZW50VXNlciA/IE1lc3NhZ2VDb250ZW50RnJvbVVzZXIgOiBNZXNzYWdlQ29udGVudEZyb21PdGhlclxuICByZXR1cm4gPE1lc3NhZ2VDb250ZW50Q29tcG9uZW50IHsuLi5wcm9wc30gLz5cbn1cblxuZnVuY3Rpb24gTWVzc2FnZU9wdGlvbnMoe1xuICBvcHRpb25zLFxuICBoYW5kbGVTZWxlY3RPcHRpb24sXG59OiB7XG4gIG9wdGlvbnM6IFByb2plY3RbXSB8IG51bGxcbiAgaGFuZGxlU2VsZWN0T3B0aW9uOiAob3B0aW9uOiBQcm9qZWN0KSA9PiB2b2lkXG59KSB7XG4gIGNvbnN0IFtzZWxlY3RlZE9wdGlvbiwgc2V0U2VsZWN0ZWRPcHRpb25dID0gdXNlU3RhdGU8UHJvamVjdCB8IG51bGw+KG51bGwpXG5cbiAgY29uc3QgaGFuZGxlU2VsZWN0ID0gKG9wdGlvbjogUHJvamVjdCkgPT4ge1xuICAgIGlmIChzZWxlY3RlZE9wdGlvbikgcmV0dXJuXG4gICAgc2V0U2VsZWN0ZWRPcHRpb24ob3B0aW9uKVxuICAgIGhhbmRsZVNlbGVjdE9wdGlvbihvcHRpb24pXG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxkaXYgc3R5bGU9e3sgZGlzcGxheTogJ2ZsZXgnLCBnYXA6ICcxMnB4JywgZmxleERpcmVjdGlvbjogJ2NvbHVtbicgfX0+XG4gICAgICB7KG9wdGlvbnMgfHwgW10pLm1hcChvcHRpb24gPT4ge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgIGNvbG9yOiBHTE9CQUxfQ09MT1JTLmRhcmssXG4gICAgICAgICAgICAgIGZvbnRTaXplOiAnMTRweCcsXG4gICAgICAgICAgICAgIGxpbmVIZWlnaHQ6ICcxNDAlJyxcbiAgICAgICAgICAgICAgY3Vyc29yOiBgJHtzZWxlY3RlZE9wdGlvbiA/ICdub3QtYWxsb3dlZCcgOiAncG9pbnRlcid9YCxcbiAgICAgICAgICAgICAgb3BhY2l0eTogYCR7c2VsZWN0ZWRPcHRpb24gJiYgc2VsZWN0ZWRPcHRpb24/LmlkICE9PSBvcHRpb24uaWQgPyAwLjUgOiAxfWAsXG4gICAgICAgICAgICB9fVxuICAgICAgICAgICAgb25DbGljaz17KCkgPT4gaGFuZGxlU2VsZWN0KG9wdGlvbil9XG4gICAgICAgICAgICBrZXk9e29wdGlvbi5pZH1cbiAgICAgICAgICA+XG4gICAgICAgICAgICB7b3B0aW9uLm5hbWV9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIClcbiAgICAgIH0pfVxuICAgIDwvZGl2PlxuICApXG59XG5cbmNvbnN0IEF2YXRhckJ5VXNlclR5cGUgPSAoe1xuICB0eXBlLFxuICBkYXRhLFxuICBhdXRoVXNlcixcbn06IHtcbiAgdHlwZTogJ3VzZXInIHwgJ2Fzc2lzdGFudCdcbiAgZGF0YTogQ2hhdE1lc3NhZ2VVc2VyXG4gIGF1dGhVc2VyOiBDT1JVc2VyXG59KSA9PiB7XG4gIGlmICh0eXBlID09PSAndXNlcicpIHtcbiAgICBpZiAoZGF0YS5hdmF0YXJJY29uKSB7XG4gICAgICByZXR1cm4gZGF0YS5hdmF0YXJJY29uXG4gICAgfVxuICAgIHJldHVybiAoXG4gICAgICA8VXNlckF2YXRhclxuICAgICAgICB3aXRoVXNlckNhcGFjaXR5PXtmYWxzZX1cbiAgICAgICAgcGljdHVyZT17YXV0aFVzZXI/LnBpY3R1cmV9XG4gICAgICAgIHNob3dUb290bHRpcFxuICAgICAgICBwbGFjZT1cInRvcFwiXG4gICAgICAgIGZpcnN0TmFtZT17YXV0aFVzZXI/LmZpcnN0TmFtZX1cbiAgICAgICAgbGFzdE5hbWU9e2F1dGhVc2VyPy5sYXN0TmFtZX1cbiAgICAgICAgd2l0aENhcGFjaXR5PXtmYWxzZX1cbiAgICAgICAgc2l6ZT1cImxhcmdlXCJcbiAgICAgIC8+XG4gICAgKVxuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2IHN0eWxlPXt7IHBvc2l0aW9uOiAnc3RpY2t5JywgdG9wOiAwLCBoZWlnaHQ6ICdmaXQtY29udGVudCcgfX0+XG4gICAgICA8QXNzaXN0YW50QXZhdGFyIC8+XG4gICAgPC9kaXY+XG4gIClcbn1cblxuLy8gRXh0cmFlIGVsIHNlZ21lbnRvIGRlIHRhYiAoZGV0YWlsfG1lc3NhZ2V8bWVzc2FnZXN8ZmlsZXN8aGlzdG9yeXxob3VycykgZGVsIGhyZWYgcGFyYSBhYnJpciBlbCBtb2RhbCBjb24gZWwgdGFiIGNvcnJlY3RvXG5jb25zdCBnZXRUYWJTZWdtZW50RnJvbUhyZWYgPSAoaHJlZjogc3RyaW5nKTogc3RyaW5nID0+IHtcbiAgY29uc3QgbWF0Y2ggPSBocmVmLm1hdGNoKC9cXC90YXNrc1xcL1xcZCtcXC8oW14vP10rKS8pXG4gIHJldHVybiBtYXRjaCAmJiAvXihkZXRhaWx8bWVzc2FnZXxtZXNzYWdlc3xmaWxlc3xoaXN0b3J5fGhvdXJzKSQvLnRlc3QobWF0Y2hbMV0pID8gbWF0Y2hbMV0gOiAnZGV0YWlsJ1xufVxuXG4vLyBDb21wb25lbnQgZm9yIHRhc2sgbGlua3MgdGhhdCB1c2VzIHRoZSB1c2VUYXNrUGFuZWwgaG9va1xuY29uc3QgVGFza0xpbms6IEZDPHsgaHJlZjogc3RyaW5nOyB0YXNrSWQ6IHN0cmluZzsgY2hpbGRyZW46IFJlYWN0Tm9kZSB9PiA9ICh7IGhyZWYsIHRhc2tJZCwgY2hpbGRyZW4gfSkgPT4ge1xuICBjb25zdCB0YWJTZWdtZW50ID0gZ2V0VGFiU2VnbWVudEZyb21IcmVmKGhyZWYpXG4gIGNvbnN0IHsgYnVpbGRPcGVuVGFzayB9ID0gdXNlVGFza1BhbmVsKHRhc2tJZCwgdGFiU2VnbWVudClcbiAgY29uc3Qgb3BlblRhc2sgPSBidWlsZE9wZW5UYXNrKClcblxuICBjb25zdCBoYW5kbGVDbGljayA9IChlOiBSZWFjdC5Nb3VzZUV2ZW50PEhUTUxBbmNob3JFbGVtZW50PikgPT4ge1xuICAgIC8vIFNpIGVzIENtZC9DdHJsICsgY2xpY2ssIGRlamFyIHF1ZSBzZSBhYnJhIGVuIG51ZXZhIHBlc3Rhw7FhIChjb21wb3J0YW1pZW50byBwb3IgZGVmZWN0bylcbiAgICBpZiAoZS5tZXRhS2V5IHx8IGUuY3RybEtleSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgZS5wcmV2ZW50RGVmYXVsdCgpXG4gICAgb3BlblRhc2soKVxuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8YVxuICAgICAgaHJlZj17aHJlZn1cbiAgICAgIG9uQ2xpY2s9e2hhbmRsZUNsaWNrfVxuICAgICAgc3R5bGU9e3tcbiAgICAgICAgdGV4dERlY29yYXRpb246ICd1bmRlcmxpbmUgIWltcG9ydGFudCcsXG4gICAgICAgIGNvbG9yOiAnIzMzN2FiNyAhaW1wb3J0YW50JyxcbiAgICAgICAgY3Vyc29yOiAncG9pbnRlcicsXG4gICAgICB9fVxuICAgID5cbiAgICAgIHtjaGlsZHJlbn1cbiAgICA8L2E+XG4gIClcbn1cblxuY29uc3QgTWVzc2FnZUl0ZW0gPSBtZW1vKChwcm9wczogTWVzc2FnZUl0ZW1Qcm9wcykgPT4ge1xuICBjb25zdCB7XG4gICAgaWQsXG4gICAgdXNlcixcbiAgICBtZXNzYWdlLFxuICAgIGlzRXJyb3IsXG4gICAgYXV0aFVzZXIsXG4gICAgb3B0aW9ucyxcbiAgICBpc0NoYW5nZVByb2plY3QsXG4gICAgaGFuZGxlU2VsZWN0T3B0aW9uLFxuICAgIGhhbmRsZUZlZWRiYWNrLFxuICAgIGhhbmRsZUFwcHJvdmFsRGVjaXNpb24sXG4gICAgZGlzYWJsZUZlZWRiYWNrLFxuICAgIHJvbGUsXG4gICAgc291cmNlcyxcbiAgICBhdHRhY2htZW50cyxcbiAgICBhcHByb3ZhbCxcbiAgICBhcHByb3ZhbFN0YXR1cyxcbiAgfSA9IHByb3BzXG5cbiAgY29uc3QgZXh0cmFjdFRhc2tzRnJvbU1lc3NhZ2UgPSAobWVzc2FnZTogc3RyaW5nKTogVGFza0luZm9bXSA9PiB7XG4gICAgaWYgKCFtZXNzYWdlKSByZXR1cm4gW11cblxuICAgIC8vIE1hdGNoIFVSTHMgbGlrZTogLi4uL3Rhc2tzLzEyMzQ1Ni8oZGV0YWlsfG1lc3NhZ2V8bWVzc2FnZXN8ZmlsZXN8aGlzdG9yeXxob3VycylcbiAgICBjb25zdCB0YXNrVXJsUmVnZXggPSBuZXcgUmVnRXhwKFRBU0tfVVJMX1JFR0VYX1BBVFRFUk4sICdnJylcbiAgICBjb25zdCB0YXNrczogVGFza0luZm9bXSA9IFtdXG4gICAgY29uc3Qgc2VlbklkcyA9IG5ldyBTZXQ8c3RyaW5nPigpXG5cbiAgICBsZXQgbWF0Y2g6IFJlZ0V4cEV4ZWNBcnJheSB8IG51bGwgPSBudWxsXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbmQtYXNzaWduXG4gICAgd2hpbGUgKChtYXRjaCA9IHRhc2tVcmxSZWdleC5leGVjKG1lc3NhZ2UpKSAhPT0gbnVsbCkge1xuICAgICAgY29uc3QgdGFza0lkID0gbWF0Y2hbMV1cbiAgICAgIGNvbnN0IHVybCA9IG1hdGNoWzBdXG5cbiAgICAgIGlmICghc2Vlbklkcy5oYXModGFza0lkKSkge1xuICAgICAgICBzZWVuSWRzLmFkZCh0YXNrSWQpXG5cbiAgICAgICAgLy8gVHJ5IHRvIGV4dHJhY3QgdGhlIHRhc2sgdGl0bGUgZnJvbSBtYXJrZG93biBsaW5rIFt0aXRsZV0odXJsKVxuICAgICAgICBjb25zdCBtYXJrZG93bkxpbmtSZWdleCA9IG5ldyBSZWdFeHAoYFxcXFxbKFteXFxcXF1dKylcXFxcXVxcXFwoJHt1cmwucmVwbGFjZSgvWy4qKz9eJHt9KCl8W1xcXVxcXFxdL2csICdcXFxcJCYnKX1cXFxcKWApXG4gICAgICAgIGNvbnN0IGxpbmtNYXRjaCA9IG1lc3NhZ2UubWF0Y2gobWFya2Rvd25MaW5rUmVnZXgpXG4gICAgICAgIGNvbnN0IHRpdGxlID0gbGlua01hdGNoID8gbGlua01hdGNoWzFdIDogYFRhcmVhICMke3Rhc2tJZH1gXG5cbiAgICAgICAgdGFza3MucHVzaCh7XG4gICAgICAgICAgaWQ6IHRhc2tJZCxcbiAgICAgICAgICB0aXRsZSxcbiAgICAgICAgICB1cmwsXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRhc2tzXG4gIH1cblxuICAvLyBIZWxwZXIgZnVuY3Rpb24gdG8gZXh0cmFjdCB0YXNrSWQgZnJvbSBhIFVSTFxuICBjb25zdCBleHRyYWN0VGFza0lkRnJvbVVybCA9ICh1cmw6IHN0cmluZyk6IHN0cmluZyB8IG51bGwgPT4ge1xuICAgIGlmICghdXJsKSByZXR1cm4gbnVsbFxuICAgIGNvbnN0IHRhc2tVcmxSZWdleCA9IC9cXC90YXNrc1xcLyhcXGQrKVxcLyhkZXRhaWx8bWVzc2FnZXxtZXNzYWdlc3xmaWxlc3xoaXN0b3J5fGhvdXJzKS9cbiAgICBjb25zdCBtYXRjaCA9IHVybC5tYXRjaCh0YXNrVXJsUmVnZXgpXG4gICAgcmV0dXJuIG1hdGNoID8gbWF0Y2hbMV0gOiBudWxsXG4gIH1cblxuICBjb25zdCBbcHJldmlld0F0dGFjaG1lbnQsIHNldFByZXZpZXdBdHRhY2htZW50XSA9IHVzZVN0YXRlPEF0dGFjaG1lbnRGaWxlIHwgbnVsbD4obnVsbClcbiAgY29uc3QgaXNDdXJyZW50VXNlciA9IHJvbGUgPT09IENoYXRIaXN0b3J5Um9sZS5VU0VSIHx8IHVzZXIuaWQgPT09IGF1dGhVc2VyLmlkLnRvU3RyaW5nKClcbiAgY29uc3QgaXNBc3Npc3RhbnQgPSByb2xlID09PSBDaGF0SGlzdG9yeVJvbGUuQVNTSVNUQU5UIHx8IHVzZXIuaWQgPT09ICdhc3Npc3RhbnQnXG5cbiAgY29uc3QgaGFuZGxlQXR0YWNobWVudENsaWNrID0gKGF0dGFjaG1lbnQ6IEF0dGFjaG1lbnRGaWxlKSA9PiB7XG4gICAgLy8gUGVybWl0aXIgcHJldmlzdWFsaXphY2nDs24gc2kgdGllbmUgYXJjaGl2byBsb2NhbCBvIFVSTHMgZGVsIGJhY2tlbmRcbiAgICBpZiAoXG4gICAgICBhdHRhY2htZW50LmZpbGUgaW5zdGFuY2VvZiBGaWxlIHx8XG4gICAgICBhdHRhY2htZW50Lm9yaWdpbmFsRmlsZSBpbnN0YW5jZW9mIEZpbGUgfHxcbiAgICAgIGF0dGFjaG1lbnQudXJsX3RodW1ibmFpbCB8fFxuICAgICAgYXR0YWNobWVudC51cmxfb3JpZ2luYWwgfHxcbiAgICAgIGF0dGFjaG1lbnQudXJsX2ZpbGVcbiAgICApIHtcbiAgICAgIHNldFByZXZpZXdBdHRhY2htZW50KGF0dGFjaG1lbnQpXG4gICAgfVxuICB9XG5cbiAgY29uc3QgaGFuZGxlQ2xvc2VQcmV2aWV3ID0gKCkgPT4ge1xuICAgIHNldFByZXZpZXdBdHRhY2htZW50KG51bGwpXG4gIH1cblxuICBpZiAoaXNDaGFuZ2VQcm9qZWN0ICYmIG9wdGlvbnMpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPE1lc3NhZ2VXcmFwcGVyIGtleT17aWR9IGlzQ3VycmVudFVzZXI9e2lzQ3VycmVudFVzZXJ9IGRhdGEtbWVzc2FnZS1pZD17aWR9IGhhc0ZlZWRiYWNrPXtmYWxzZX0+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgZGlzcGxheTogJ2ZsZXgnLFxuICAgICAgICAgICAgcG9zaXRpb246ICdyZWxhdGl2ZScsXG4gICAgICAgICAgICBnYXA6ICc4cHgnLFxuICAgICAgICAgICAgZmxleERpcmVjdGlvbjogaXNDdXJyZW50VXNlciA/ICdyb3ctcmV2ZXJzZScgOiAncm93JyxcbiAgICAgICAgICAgIC4uLihpc0Fzc2lzdGFudCAmJiB7XG4gICAgICAgICAgICAgIGp1c3RpZnlDb250ZW50OiAnc3RhcnQnLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgfX1cbiAgICAgICAgPlxuICAgICAgICAgIDxBdmF0YXJCeVVzZXJUeXBlIHR5cGU9e2lzQXNzaXN0YW50ID8gJ2Fzc2lzdGFudCcgOiAndXNlcid9IGRhdGE9e3VzZXJ9IGF1dGhVc2VyPXthdXRoVXNlcn0gLz5cbiAgICAgICAgICA8TWVzc2FnZUNvbnRlbnRXcmFwcGVyXG4gICAgICAgICAgICBpc0NoYW5nZVByb2plY3Q9e2lzQ2hhbmdlUHJvamVjdH1cbiAgICAgICAgICAgIG1lc3NhZ2U9e21lc3NhZ2V9XG4gICAgICAgICAgICBpc0N1cnJlbnRVc2VyPXtpc0N1cnJlbnRVc2VyfVxuICAgICAgICAgICAgaXNFcnJvcj17aXNFcnJvcn1cbiAgICAgICAgICAgIG1lc3NhZ2VFeHRyYUNvbnRlbnQ9ezxNZXNzYWdlT3B0aW9ucyBvcHRpb25zPXtvcHRpb25zIGFzIGFueX0gaGFuZGxlU2VsZWN0T3B0aW9uPXtoYW5kbGVTZWxlY3RPcHRpb259IC8+fVxuICAgICAgICAgIC8+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9NZXNzYWdlV3JhcHBlcj5cbiAgICApXG4gIH1cblxuICBjb25zdCBoYW5kbGVGZWVkYmFja0NsaWNrID0gKGZlZWRiYWNrOiBGZWVkYmFjaykgPT4ge1xuICAgIGNvbnN0IHNlc3Npb25JZCA9IGlkXG4gICAgICAuc3BsaXQoJy0nKVxuICAgICAgLmZpbHRlcihxdWVzdGlvbklkID0+IHF1ZXN0aW9uSWQgIT09ICdhbnN3ZXInKVxuICAgICAgLmpvaW4oJy0nKVxuICAgIGhhbmRsZUZlZWRiYWNrPy4oZmVlZGJhY2ssIHNlc3Npb25JZClcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPGRpdlxuICAgICAgc3R5bGU9e3tcbiAgICAgICAgcG9zaXRpb246ICdyZWxhdGl2ZScsXG4gICAgICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICAgICAgZ2FwOiAnOHB4JyxcbiAgICAgICAgZmxleERpcmVjdGlvbjogaXNDdXJyZW50VXNlciA/ICdyb3ctcmV2ZXJzZScgOiAncm93JyxcbiAgICAgICAgLi4uKGlzQXNzaXN0YW50ICYmIHtcbiAgICAgICAgICBqdXN0aWZ5Q29udGVudDogJ3N0YXJ0JyxcbiAgICAgICAgfSksXG4gICAgICB9fVxuICAgID5cbiAgICAgIDxBdmF0YXJCeVVzZXJUeXBlIHR5cGU9e2lzQXNzaXN0YW50ID8gJ2Fzc2lzdGFudCcgOiAndXNlcid9IGRhdGE9e3VzZXJ9IGF1dGhVc2VyPXthdXRoVXNlcn0gLz5cbiAgICAgIDxkaXYgc3R5bGU9e3sgZGlzcGxheTogJ2ZsZXgnLCBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgZ2FwOiAnOHB4JyB9fT5cbiAgICAgICAgeyEhKGF0dGFjaG1lbnRzIHx8IHNvdXJjZXMpPy5sZW5ndGggJiYgIWlzQXNzaXN0YW50ICYmIChcbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgICAgICAgICAgIGp1c3RpZnlDb250ZW50OiAnZmxleC1lbmQnLFxuICAgICAgICAgICAgICBnYXA6ICcxMnB4JyxcbiAgICAgICAgICAgICAgZmxleFdyYXA6ICd3cmFwJyxcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgPlxuICAgICAgICAgICAgeyhhdHRhY2htZW50cyB8fCBzb3VyY2VzKT8ubWFwKChhdHRhY2htZW50LCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgICAvLyBEZXRlY3RhciBzaSBlcyB1biBhcmNoaXZvIGRlIGF1ZGlvXG4gICAgICAgICAgICAgIGNvbnN0IGF0dGFjaG1lbnRUeXBlID0gYXR0YWNobWVudD8udHlwZT8udG9Mb3dlckNhc2UoKSB8fCAnJ1xuICAgICAgICAgICAgICBjb25zdCBhdHRhY2htZW50TmFtZSA9IGF0dGFjaG1lbnQ/Lm5hbWU/LnRvTG93ZXJDYXNlKCkgfHwgJydcbiAgICAgICAgICAgICAgY29uc3QgaXNBdWRpb0ZpbGUgPVxuICAgICAgICAgICAgICAgIGF0dGFjaG1lbnRUeXBlLnN0YXJ0c1dpdGgoJ2F1ZGlvLycpIHx8XG4gICAgICAgICAgICAgICAgWydmbGFjJywgJ200YScsICdtcDMnLCAnbXA0JywgJ29nYScsICdvZ2cnLCAnd2F2JywgJ3dlYm0nXS5pbmNsdWRlcyhhdHRhY2htZW50VHlwZSkgfHxcbiAgICAgICAgICAgICAgICBbJy5mbGFjJywgJy5tNGEnLCAnLm1wMycsICcubXA0JywgJy5vZ2EnLCAnLm9nZycsICcud2F2JywgJy53ZWJtJ10uc29tZShleHQgPT5cbiAgICAgICAgICAgICAgICAgIGF0dGFjaG1lbnROYW1lLmVuZHNXaXRoKGV4dClcbiAgICAgICAgICAgICAgICApXG5cbiAgICAgICAgICAgICAgaWYgKGlzQXVkaW9GaWxlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIDxBdHRhY2htZW50Q2FyZEF1ZGlvIGtleT17YCR7YXR0YWNobWVudC5pZH0tJHthdHRhY2htZW50Lm5hbWV9YH0gYXR0YWNobWVudD17YXR0YWNobWVudH0gLz5cbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgPEF0dGFjaG1lbnRDYXJkXG4gICAgICAgICAgICAgICAgICBrZXk9e2Ake2F0dGFjaG1lbnQuaWR9LSR7YXR0YWNobWVudC5uYW1lfWB9XG4gICAgICAgICAgICAgICAgICBhdHRhY2htZW50PXthdHRhY2htZW50fVxuICAgICAgICAgICAgICAgICAgcG9zaXRpb25JbmRleD17aW5kZXh9XG4gICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBoYW5kbGVBdHRhY2htZW50Q2xpY2soYXR0YWNobWVudCl9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfSl9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICl9XG4gICAgICAgIHthcHByb3ZhbCAmJiBhcHByb3ZhbC5wZW5kaW5nX2FjdGlvbnMgJiYgKFxuICAgICAgICAgIDxkaXYgc3R5bGU9e3sgZGlzcGxheTogJ2ZsZXgnLCBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJywgZ2FwOiAnMTJweCcgfX0+XG4gICAgICAgICAgICB7YXBwcm92YWwucGVuZGluZ19hY3Rpb25zLm1hcChhY3Rpb24gPT4gKFxuICAgICAgICAgICAgICA8QXBwcm92YWxCb3hcbiAgICAgICAgICAgICAgICBrZXk9e2Ake2FjdGlvbi50aHJlYWRfaWR9LSR7YWN0aW9uLnRvb2xfY2FsbF9pZH1gfVxuICAgICAgICAgICAgICAgIGFjdGlvbj17YWN0aW9ufVxuICAgICAgICAgICAgICAgIHN0YXR1cz17YXBwcm92YWxTdGF0dXN9XG4gICAgICAgICAgICAgICAgb25BcHByb3ZlPXt0aHJlYWRJZCA9PiBoYW5kbGVBcHByb3ZhbERlY2lzaW9uKHRocmVhZElkLCAnYXBwcm92ZScpfVxuICAgICAgICAgICAgICAgIG9uUmVqZWN0PXt0aHJlYWRJZCA9PiBoYW5kbGVBcHByb3ZhbERlY2lzaW9uKHRocmVhZElkLCAncmVqZWN0Jyl9XG4gICAgICAgICAgICAgICAgaXNQcm9qZWN0RGVsZXRlZD17cHJvcHMucHJvamVjdE1ldGFkYXRhPy5pc19kZWxldGVkID09PSB0cnVlfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgKSl9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICl9XG4gICAgICAgIHshIW1lc3NhZ2UgJiZcbiAgICAgICAgICAvLyBTaSBoYXkgYXBwcm92YWwgKGRpc3RpbnRvIGRlIG51bGwpLCBubyByZW5kZXJpemFyIGVsIGFuc3dlciBlbiBlc3RlIG1lbnNhamVcbiAgICAgICAgICAvLyBFbCBtZW5zYWplIGRlIHJlY2hhem8gc2UgcmVuZGVyaXphIGNvbW8gbWVuc2FqZSBzZXBhcmFkb1xuICAgICAgICAgICFhcHByb3ZhbCAmJiAoXG4gICAgICAgICAgICA8U0NDQUlNZXNzYWdlV3JhcHBlclxuICAgICAgICAgICAgICBpc0N1cnJlbnRVc2VyPXtpc0N1cnJlbnRVc2VyfVxuICAgICAgICAgICAgICBpc0Zyb250ZW5kQ2FuY2VsbGVkPXtwcm9wcy5pc0Zyb250ZW5kQ2FuY2VsbGVkfVxuICAgICAgICAgICAgICBjbGFzc05hbWU9e2lzQXNzaXN0YW50ICYmIGV4dHJhY3RUYXNrc0Zyb21NZXNzYWdlKG1lc3NhZ2UpLmxlbmd0aCA+IDAgPyAnaGFzLXRhc2stbGlua3MnIDogJyd9XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxNYXJrZG93blxuICAgICAgICAgICAgICAgIHJlbWFya1BsdWdpbnM9e1tyZW1hcmtHZm1dfVxuICAgICAgICAgICAgICAgIGNvbXBvbmVudHM9e3tcbiAgICAgICAgICAgICAgICAgIGE6ICh7IGhyZWYsIGNoaWxkcmVuIH0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdGFza0lkID0gZXh0cmFjdFRhc2tJZEZyb21VcmwoaHJlZiB8fCAnJylcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaXNUYXNrTGluayA9IHRhc2tJZCAhPT0gbnVsbFxuXG4gICAgICAgICAgICAgICAgICAgIC8vIFNpIGVzIHVuIGVubGFjZSBkZSB0YXJlYSwgdXNhciBlbCBjb21wb25lbnRlIFRhc2tMaW5rIHF1ZSBtYW5lamEgZWwgaG9va1xuICAgICAgICAgICAgICAgICAgICBpZiAoaXNUYXNrTGluayAmJiB0YXNrSWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICAgICAgPFRhc2tMaW5rIGhyZWY9e2hyZWYgfHwgJyd9IHRhc2tJZD17dGFza0lkfT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAge2NoaWxkcmVufVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9UYXNrTGluaz5cbiAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAvLyBQYXJhIGVubGFjZXMgbm9ybWFsZXMsIGNvbXBvcnRhbWllbnRvIGVzdMOhbmRhclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICAgIDxhXG4gICAgICAgICAgICAgICAgICAgICAgICBocmVmPXtocmVmfVxuICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0PVwiX2JsYW5rXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlbD1cIm5vb3BlbmVyIG5vcmVmZXJyZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dERlY29yYXRpb246ICd1bmRlcmxpbmUgIWltcG9ydGFudCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yOiAnIzMzN2FiNyAhaW1wb3J0YW50JyxcbiAgICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAge2NoaWxkcmVufVxuICAgICAgICAgICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgIGltZzogKHsgc3JjLCBhbHQsIC4uLnByb3BzIH0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgICA8aW1nXG4gICAgICAgICAgICAgICAgICAgICAgICBzcmM9e3NyY31cbiAgICAgICAgICAgICAgICAgICAgICAgIGFsdD17YWx0fVxuICAgICAgICAgICAgICAgICAgICAgICAgey4uLnByb3BzfVxuICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4V2lkdGg6ICcyODBweCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDogJ2F1dG8nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5OiAnYmxvY2snLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW46ICc4cHggMCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGJvcmRlclJhZGl1czogJzRweCcsXG4gICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIHttZXNzYWdlfVxuICAgICAgICAgICAgICA8L01hcmtkb3duPlxuICAgICAgICAgICAgPC9TQ0NBSU1lc3NhZ2VXcmFwcGVyPlxuICAgICAgICAgICl9XG4gICAgICAgIHtpc0Fzc2lzdGFudCAmJiAhaXNFcnJvciAmJiAhcHJvcHMuaXNGcm9udGVuZENhbmNlbGxlZCAmJiAhYXBwcm92YWwgJiYgKFxuICAgICAgICAgIDxNZXNzYWdlRmVlZGJhY2tcbiAgICAgICAgICAgIGNvbnRlbnQ9e21lc3NhZ2V9XG4gICAgICAgICAgICBzb3VyY2VzPXtzb3VyY2VzfVxuICAgICAgICAgICAgaGFuZGxlRmVlZGJhY2s9e2hhbmRsZUZlZWRiYWNrQ2xpY2t9XG4gICAgICAgICAgICBkaXNhYmxlRmVlZGJhY2s9e2Rpc2FibGVGZWVkYmFja31cbiAgICAgICAgICAvPlxuICAgICAgICApfVxuICAgICAgPC9kaXY+XG4gICAgICA8QXR0YWNobWVudFByZXZpZXdNb2RhbFxuICAgICAgICBpc09wZW49eyEhcHJldmlld0F0dGFjaG1lbnR9XG4gICAgICAgIG9uQ2xvc2U9e2hhbmRsZUNsb3NlUHJldmlld31cbiAgICAgICAgYXR0YWNobWVudD17cHJldmlld0F0dGFjaG1lbnR9XG4gICAgICAvPlxuICAgIDwvZGl2PlxuICApXG59KVxuXG5jb25zdCBDaGF0QUlNZXNzYWdlc0lubmVyID0gKHtcbiAgdXNlckluaXRpYWxNZXNzYWdlLFxuICBpbml0aWFsQ2hhdElkLFxuICBvbkVycm9yLFxuICBvblNlbmRNZXNzYWdlUmVhZHksXG4gIG9uU2Nyb2xsVG9Cb3R0b20sXG4gIGF0dGFjaG1lbnRzLFxuICBhZ2VudHMsXG59OiBDaGF0QUlNZXNzYWdlc1Byb3BzKSA9PiB7XG4gIGNvbnN0IHsgdCB9ID0gdXNlVCgpXG4gIGNvbnN0IHsgaXNXZWJTZWFyY2hBY3RpdmUsIGlzRGVlcFNlYXJjaEFjdGl2ZSB9ID0gdXNlR2xvYmFsQ29udGV4dCgpXG4gIGNvbnN0IGF1dGhVc2VyID0gdXNlVXNlcigpXG4gIGNvbnN0IG1lc3NhZ2VzUmVmID0gdXNlUmVmPEhUTUxEaXZFbGVtZW50PihudWxsKVxuICBjb25zdCBjaGF0SW5pdGlhbGl6ZWRSZWYgPSB1c2VSZWYoZmFsc2UpXG4gIGNvbnN0IGlzTG9hZGluZ01vcmVSZWYgPSB1c2VSZWYoZmFsc2UpXG4gIGNvbnN0IHVzZXJTY3JvbGxpbmdSZWYgPSB1c2VSZWYoZmFsc2UpXG4gIGNvbnN0IHNjcm9sbFRocmVzaG9sZFJlZiA9IHVzZVJlZigzOSlcbiAgY29uc3QgbGFzdFNjcm9sbFRvcFJlZiA9IHVzZVJlZigwKVxuICBjb25zdCBzaG93U2Nyb2xsVG9Cb3R0b21SZWYgPSB1c2VSZWYoZmFsc2UpXG4gIGNvbnN0IHNjcm9sbFJhZlJlZiA9IHVzZVJlZjxudW1iZXIgfCBudWxsPihudWxsKVxuICBjb25zdCBbc2hvd1Njcm9sbFRvQm90dG9tLCBzZXRTaG93U2Nyb2xsVG9Cb3R0b21dID0gdXNlU3RhdGUoZmFsc2UpXG5cbiAgY29uc3Qge1xuICAgIG1lc3NhZ2VzLFxuICAgIGxvYWRpbmdNZXNzYWdlcyxcbiAgICBpc0xvYWRpbmdNb3JlTWVzc2FnZXMsXG4gICAgd2FpdGluZ1Jlc3BvbnNlLFxuICAgIGlzV3JpdGluZyxcbiAgICBsb2FkaW5nTWVzc2FnZSxcbiAgICBhY3RpdmVMb2FkaW5ncyxcbiAgICBzZW5kTWVzc2FnZSxcbiAgICBjaGFuZ2VQcm9qZWN0LFxuICAgIGhhbmRsZUZlZWRiYWNrLFxuICAgIGhhbmRsZUFwcHJvdmFsRGVjaXNpb24sXG4gICAgaW5pdGlhbGl6ZUNoYXQsXG4gICAgaGFuZGxlU2Nyb2xsLFxuICAgIHN0b3BHZW5lcmF0aW9uLFxuICB9ID0gdXNlQ2hhdE1hbmFnZXIoe1xuICAgIGNoYXRJZDogaW5pdGlhbENoYXRJZCB8fCB1bmRlZmluZWQsXG4gICAgdXNlckluaXRpYWxNZXNzYWdlLFxuICAgIG9uRXJyb3IsXG4gICAgYXR0YWNobWVudHMsXG4gICAgYWdlbnRzLFxuICB9KVxuXG4gIGNvbnN0IGhhbmRsZVNlbGVjdE9wdGlvbiA9IChvcHRpb246IFByb2plY3QpID0+IHtcbiAgICBjaGFuZ2VQcm9qZWN0KG9wdGlvbilcbiAgfVxuXG4gIGNvbnN0IGhhbmRsZUNsaWNrU2Nyb2xsVG9Cb3R0b20gPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgaWYgKG1lc3NhZ2VzUmVmLmN1cnJlbnQpIHtcbiAgICAgIG1lc3NhZ2VzUmVmLmN1cnJlbnQuc2Nyb2xsVG8oe1xuICAgICAgICB0b3A6IG1lc3NhZ2VzUmVmLmN1cnJlbnQuc2Nyb2xsSGVpZ2h0LFxuICAgICAgICBiZWhhdmlvcjogJ3Ntb290aCcsXG4gICAgICB9KVxuICAgICAgLy8gQWN0dWFsaXphciBlc3RhZG8gZGVzcHXDqXMgZGUgdW4gYnJldmUgZGVsYXkgcGFyYSBwZXJtaXRpciBxdWUgZWwgc2Nyb2xsIHNlIGNvbXBsZXRlXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgaWYgKG1lc3NhZ2VzUmVmLmN1cnJlbnQpIHtcbiAgICAgICAgICBjb25zdCB7IHNjcm9sbFRvcCwgc2Nyb2xsSGVpZ2h0LCBjbGllbnRIZWlnaHQgfSA9IG1lc3NhZ2VzUmVmLmN1cnJlbnRcbiAgICAgICAgICBjb25zdCBkaXN0YW5jZUZyb21Cb3R0b20gPSBzY3JvbGxIZWlnaHQgLSBzY3JvbGxUb3AgLSBjbGllbnRIZWlnaHRcbiAgICAgICAgICBjb25zdCBzaG91bGRTaG93ID0gZGlzdGFuY2VGcm9tQm90dG9tID4gNTBcbiAgICAgICAgICBzaG93U2Nyb2xsVG9Cb3R0b21SZWYuY3VycmVudCA9IHNob3VsZFNob3dcbiAgICAgICAgICBzZXRTaG93U2Nyb2xsVG9Cb3R0b20oc2hvdWxkU2hvdylcbiAgICAgICAgfVxuICAgICAgfSwgNTAwKVxuICAgIH1cbiAgfSwgW10pXG5cbiAgY29uc3QgaGFuZGxlU2Nyb2xsVG9Cb3R0b20gPSB1c2VDYWxsYmFjayhcbiAgICAoZTogUmVhY3QuVUlFdmVudDxIVE1MRGl2RWxlbWVudD4pID0+IHtcbiAgICAgIGNvbnN0IGNvbnRhaW5lciA9IGUuY3VycmVudFRhcmdldFxuXG4gICAgICBpZiAoc2Nyb2xsUmFmUmVmLmN1cnJlbnQgIT09IG51bGwpIHtcbiAgICAgICAgY2FuY2VsQW5pbWF0aW9uRnJhbWUoc2Nyb2xsUmFmUmVmLmN1cnJlbnQpXG4gICAgICB9XG5cbiAgICAgIHNjcm9sbFJhZlJlZi5jdXJyZW50ID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcbiAgICAgICAgc2Nyb2xsUmFmUmVmLmN1cnJlbnQgPSBudWxsXG4gICAgICAgIGNvbnN0IHsgc2Nyb2xsVG9wLCBzY3JvbGxIZWlnaHQsIGNsaWVudEhlaWdodCB9ID0gY29udGFpbmVyXG5cbiAgICAgICAgY29uc3QgaXNTY3JvbGxpbmdVcCA9IHNjcm9sbFRvcCA8IGxhc3RTY3JvbGxUb3BSZWYuY3VycmVudFxuXG4gICAgICAgIGlmIChpc1Njcm9sbGluZ1VwKSB7XG4gICAgICAgICAgc2Nyb2xsVGhyZXNob2xkUmVmLmN1cnJlbnQgPSAxNVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgaXNOZWFyQm90dG9tID0gc2Nyb2xsSGVpZ2h0IC0gc2Nyb2xsVG9wIC0gY2xpZW50SGVpZ2h0IDwgc2Nyb2xsVGhyZXNob2xkUmVmLmN1cnJlbnRcblxuICAgICAgICBpZiAoaXNOZWFyQm90dG9tKSB7XG4gICAgICAgICAgc2Nyb2xsVGhyZXNob2xkUmVmLmN1cnJlbnQgPSAzOVxuICAgICAgICB9XG5cbiAgICAgICAgdXNlclNjcm9sbGluZ1JlZi5jdXJyZW50ID0gIWlzTmVhckJvdHRvbVxuICAgICAgICBsYXN0U2Nyb2xsVG9wUmVmLmN1cnJlbnQgPSBzY3JvbGxUb3BcblxuICAgICAgICBjb25zdCBkaXN0YW5jZUZyb21Cb3R0b20gPSBzY3JvbGxIZWlnaHQgLSBzY3JvbGxUb3AgLSBjbGllbnRIZWlnaHRcbiAgICAgICAgY29uc3Qgc2hvdWxkU2hvdyA9IGRpc3RhbmNlRnJvbUJvdHRvbSA+IDUwXG4gICAgICAgIGNvbnN0IGRpZFNldFN0YXRlID0gc2hvd1Njcm9sbFRvQm90dG9tUmVmLmN1cnJlbnQgIT09IHNob3VsZFNob3dcbiAgICAgICAgaWYgKGRpZFNldFN0YXRlKSB7XG4gICAgICAgICAgc2hvd1Njcm9sbFRvQm90dG9tUmVmLmN1cnJlbnQgPSBzaG91bGRTaG93XG4gICAgICAgICAgc2V0U2hvd1Njcm9sbFRvQm90dG9tKHNob3VsZFNob3cpXG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaXNOZWFyQm90dG9tICYmIG9uU2Nyb2xsVG9Cb3R0b20pIHtcbiAgICAgICAgICBvblNjcm9sbFRvQm90dG9tKClcbiAgICAgICAgfVxuXG4gICAgICAgIGhhbmRsZVNjcm9sbChjb250YWluZXIpXG4gICAgICB9KVxuICAgIH0sXG4gICAgW29uU2Nyb2xsVG9Cb3R0b20sIGhhbmRsZVNjcm9sbF1cbiAgKVxuXG4gIC8vIHJlZnMgdG8gc3RhYmlsaXplIGZ1bmN0aW9ucyBhbmQgYXZvaWQgdW5uZWNlc3NhcnkgcmUtcmVuZGVyc1xuICBjb25zdCBzZW5kTWVzc2FnZVJlZiA9IHVzZVJlZihzZW5kTWVzc2FnZSlcbiAgY29uc3Qgc3RvcEdlbmVyYXRpb25SZWYgPSB1c2VSZWYoc3RvcEdlbmVyYXRpb24pXG4gIGNvbnN0IG9uU2VuZE1lc3NhZ2VSZWFkeVJlZiA9IHVzZVJlZihvblNlbmRNZXNzYWdlUmVhZHkpXG5cbiAgLy8gdXBkYXRlIHJlZnMgd2hlbiBmdW5jdGlvbnMgY2hhbmdlXG4gIHNlbmRNZXNzYWdlUmVmLmN1cnJlbnQgPSBzZW5kTWVzc2FnZVxuICBzdG9wR2VuZXJhdGlvblJlZi5jdXJyZW50ID0gc3RvcEdlbmVyYXRpb25cbiAgb25TZW5kTWVzc2FnZVJlYWR5UmVmLmN1cnJlbnQgPSBvblNlbmRNZXNzYWdlUmVhZHlcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChvblNlbmRNZXNzYWdlUmVhZHlSZWYuY3VycmVudCkge1xuICAgICAgb25TZW5kTWVzc2FnZVJlYWR5UmVmLmN1cnJlbnQoc2VuZE1lc3NhZ2VSZWYuY3VycmVudCwgc3RvcEdlbmVyYXRpb25SZWYuY3VycmVudCwgd2FpdGluZ1Jlc3BvbnNlLCBpc1dyaXRpbmcpXG4gICAgfVxuICB9LCBbd2FpdGluZ1Jlc3BvbnNlLCBpc1dyaXRpbmddKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaXNMb2FkaW5nTW9yZVJlZi5jdXJyZW50ID0gaXNMb2FkaW5nTW9yZU1lc3NhZ2VzXG4gIH0sIFtpc0xvYWRpbmdNb3JlTWVzc2FnZXNdKVxuXG4gIC8vIEN1YW5kbyBlbCBhZ2VudGUgZW1waWV6YSBhIHJlc3BvbmRlciwgcmVzZXRlYXIgZWwgZmxhZyB5IGVsIHVtYnJhbCBwYXJhIGFjdGl2YXIgZWwgYXV0by1zY3JvbGxcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAod2FpdGluZ1Jlc3BvbnNlKSB7XG4gICAgICB1c2VyU2Nyb2xsaW5nUmVmLmN1cnJlbnQgPSBmYWxzZVxuICAgICAgc2Nyb2xsVGhyZXNob2xkUmVmLmN1cnJlbnQgPSAzOVxuICAgIH1cbiAgfSwgW3dhaXRpbmdSZXNwb25zZV0pXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoIWNoYXRJbml0aWFsaXplZFJlZi5jdXJyZW50KSB7XG4gICAgICBjaGF0SW5pdGlhbGl6ZWRSZWYuY3VycmVudCA9IHRydWVcbiAgICAgIGluaXRpYWxpemVDaGF0KClcbiAgICB9XG4gIH0sIFtdKVxuXG4gIC8vIFNjcm9sbCBjdWFuZG8gbGxlZ2EgdW4gbWVuc2FqZSBkZSBhcHJvYmFjacOzbiAoQXBwcm92YWxCb3gpLiBTaW4gUmVzaXplT2JzZXJ2ZXIgZW4gZWxcbiAgLy8gY29udGVuZWRvcjogb2JzZXJ2YXJsbyBkaXNwYXJhYmEgY2FsbGJhY2tzIGFsIGNhbWJpYXIgZWwgbGF5b3V0L3Njcm9sbGJhciB5IGNhZGEgdW5vXG4gIC8vIGxsYW1hYmEgc2Nyb2xsVG9Cb3R0b20oKSwgcHJvdm9jYW5kbyB0aXJvbmVzIGFsIHNjcm9sbGVhci5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoIW1lc3NhZ2VzUmVmLmN1cnJlbnQgfHwgbG9hZGluZ01lc3NhZ2VzIHx8IGlzTG9hZGluZ01vcmVNZXNzYWdlcykge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZFxuICAgIH1cblxuICAgIGNvbnN0IGxhc3RNZXNzYWdlID0gbWVzc2FnZXNbbWVzc2FnZXMubGVuZ3RoIC0gMV1cbiAgICBjb25zdCBoYXNBcHByb3ZhbCA9IGxhc3RNZXNzYWdlICYmIChsYXN0TWVzc2FnZS5pZC5zdGFydHNXaXRoKCdhcHByb3ZhbC0nKSB8fCAhIWxhc3RNZXNzYWdlLmFwcHJvdmFsKVxuXG4gICAgaWYgKCFoYXNBcHByb3ZhbCkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZFxuICAgIH1cblxuICAgIGNvbnN0IGNvbnRhaW5lciA9IG1lc3NhZ2VzUmVmLmN1cnJlbnRcbiAgICBjb25zdCBpc0F0Qm90dG9tID0gY29udGFpbmVyLnNjcm9sbEhlaWdodCAtIGNvbnRhaW5lci5zY3JvbGxUb3AgPD0gY29udGFpbmVyLmNsaWVudEhlaWdodCArIDEwMFxuXG4gICAgaWYgKCEoaXNBdEJvdHRvbSB8fCAhdXNlclNjcm9sbGluZ1JlZi5jdXJyZW50KSkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZFxuICAgIH1cblxuICAgIGNvbnN0IHNjcm9sbFRvQm90dG9tID0gKCkgPT4ge1xuICAgICAgaWYgKG1lc3NhZ2VzUmVmLmN1cnJlbnQpIHtcbiAgICAgICAgbWVzc2FnZXNSZWYuY3VycmVudC5zY3JvbGxUb3AgPSBtZXNzYWdlc1JlZi5jdXJyZW50LnNjcm9sbEhlaWdodFxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFNlY3VlbmNpYSBpbmljaWFsIGRlIHNjcm9sbCBwYXJhIGN1YW5kbyBlbCBBcHByb3ZhbEJveCBhY2FiYSBkZSByZW5kZXJpemFyc2VcbiAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuICAgICAgc2Nyb2xsVG9Cb3R0b20oKVxuICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcbiAgICAgICAgc2Nyb2xsVG9Cb3R0b20oKVxuICAgICAgICBzZXRUaW1lb3V0KHNjcm9sbFRvQm90dG9tLCAxMDApXG4gICAgICB9KVxuICAgIH0pXG5cbiAgICByZXR1cm4gdW5kZWZpbmVkXG4gIH0sIFttZXNzYWdlcywgbG9hZGluZ01lc3NhZ2VzLCBpc0xvYWRpbmdNb3JlTWVzc2FnZXNdKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgLy8gU2kgZWwgdXN1YXJpbyBlc3TDoSBzY3JvbGxlYW5kbyBtYW51YWxtZW50ZSwgbm8gaGFjZXIgYXV0byBzY3JvbGxcbiAgICBpZiAodXNlclNjcm9sbGluZ1JlZi5jdXJyZW50ICYmIHdhaXRpbmdSZXNwb25zZSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgaWYgKHdhaXRpbmdSZXNwb25zZSAmJiBtZXNzYWdlc1JlZi5jdXJyZW50KSB7XG4gICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuICAgICAgICBpZiAobWVzc2FnZXNSZWYuY3VycmVudCkge1xuICAgICAgICAgIG1lc3NhZ2VzUmVmLmN1cnJlbnQuc2Nyb2xsVG9wID0gbWVzc2FnZXNSZWYuY3VycmVudC5zY3JvbGxIZWlnaHRcbiAgICAgICAgICBjb25zdCB7IHNjcm9sbFRvcCwgc2Nyb2xsSGVpZ2h0LCBjbGllbnRIZWlnaHQgfSA9IG1lc3NhZ2VzUmVmLmN1cnJlbnRcbiAgICAgICAgICBjb25zdCBkaXN0YW5jZUZyb21Cb3R0b20gPSBzY3JvbGxIZWlnaHQgLSBzY3JvbGxUb3AgLSBjbGllbnRIZWlnaHRcbiAgICAgICAgICBjb25zdCBzaG91bGRTaG93ID0gZGlzdGFuY2VGcm9tQm90dG9tID4gNTBcbiAgICAgICAgICBzaG93U2Nyb2xsVG9Cb3R0b21SZWYuY3VycmVudCA9IHNob3VsZFNob3dcbiAgICAgICAgICBzZXRTaG93U2Nyb2xsVG9Cb3R0b20oc2hvdWxkU2hvdylcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmICghbWVzc2FnZXNSZWYuY3VycmVudCB8fCBsb2FkaW5nTWVzc2FnZXMgfHwgaXNMb2FkaW5nTW9yZU1lc3NhZ2VzIHx8IGlzTG9hZGluZ01vcmVSZWYuY3VycmVudCkgcmV0dXJuXG5cbiAgICBjb25zdCBjb250YWluZXIgPSBtZXNzYWdlc1JlZi5jdXJyZW50XG4gICAgY29uc3QgbGFzdE1lc3NhZ2UgPSBtZXNzYWdlc1ttZXNzYWdlcy5sZW5ndGggLSAxXVxuXG4gICAgY29uc3QgaXNOZXdBbnN3ZXJNZXNzYWdlID0gbGFzdE1lc3NhZ2UgJiYgbGFzdE1lc3NhZ2UuaWQuc3RhcnRzV2l0aCgnYW5zd2VyLScpXG4gICAgY29uc3QgaXNOZXdVc2VyTWVzc2FnZSA9IGxhc3RNZXNzYWdlICYmIGxhc3RNZXNzYWdlLmlkLnN0YXJ0c1dpdGgoJ3F1ZXN0aW9uLScpXG4gICAgY29uc3QgaXNOZXdBcHByb3ZhbE1lc3NhZ2UgPSBsYXN0TWVzc2FnZSAmJiAobGFzdE1lc3NhZ2UuaWQuc3RhcnRzV2l0aCgnYXBwcm92YWwtJykgfHwgISFsYXN0TWVzc2FnZS5hcHByb3ZhbClcbiAgICBjb25zdCBpc0F0Qm90dG9tID0gY29udGFpbmVyLnNjcm9sbEhlaWdodCAtIGNvbnRhaW5lci5zY3JvbGxUb3AgPD0gY29udGFpbmVyLmNsaWVudEhlaWdodCArIDEwMFxuICAgIGNvbnN0IGhhc01lc3NhZ2VzID0gISFtZXNzYWdlcy5sZW5ndGhcbiAgICBjb25zdCBpc05vdEluaXRpYWxNZXNzYWdlID0gIW1lc3NhZ2VzLnNvbWUobXNnID0+IG1zZy5pZCA9PT0gJ3VzZXItaW5pdGlhbC1tZXNzYWdlJylcblxuICAgIGlmICgoaXNOZXdBbnN3ZXJNZXNzYWdlIHx8IGlzTmV3VXNlck1lc3NhZ2UgfHwgaXNOZXdBcHByb3ZhbE1lc3NhZ2UpICYmIGlzQXRCb3R0b20pIHtcbiAgICAgIC8vIFBhcmEgbWVuc2FqZXMgZGUgYXByb2JhY2nDs24sIHVzYXIgdW4gcGVxdWXDsW8gZGVsYXkgcGFyYSBhc2VndXJhciBxdWUgZWwgQXBwcm92YWxCb3ggc2UgaGF5YSByZW5kZXJpemFkb1xuICAgICAgY29uc3Qgc2Nyb2xsRGVsYXkgPSBpc05ld0FwcHJvdmFsTWVzc2FnZSA/IDEwMCA6IDBcbiAgICAgIGNvbnN0IGRvU2Nyb2xsID0gKCkgPT4ge1xuICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuICAgICAgICAgIGlmIChtZXNzYWdlc1JlZi5jdXJyZW50KSB7XG4gICAgICAgICAgICBtZXNzYWdlc1JlZi5jdXJyZW50LnNjcm9sbFRvcCA9IG1lc3NhZ2VzUmVmLmN1cnJlbnQuc2Nyb2xsSGVpZ2h0XG4gICAgICAgICAgICBjb25zdCB7IHNjcm9sbFRvcCwgc2Nyb2xsSGVpZ2h0LCBjbGllbnRIZWlnaHQgfSA9IG1lc3NhZ2VzUmVmLmN1cnJlbnRcbiAgICAgICAgICAgIGNvbnN0IGRpc3RhbmNlRnJvbUJvdHRvbSA9IHNjcm9sbEhlaWdodCAtIHNjcm9sbFRvcCAtIGNsaWVudEhlaWdodFxuICAgICAgICAgICAgY29uc3Qgc2hvdWxkU2hvdyA9IGRpc3RhbmNlRnJvbUJvdHRvbSA+IDUwXG4gICAgICAgICAgICBzaG93U2Nyb2xsVG9Cb3R0b21SZWYuY3VycmVudCA9IHNob3VsZFNob3dcbiAgICAgICAgICAgIHNldFNob3dTY3JvbGxUb0JvdHRvbShzaG91bGRTaG93KVxuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICAgIGlmIChzY3JvbGxEZWxheSA+IDApIHtcbiAgICAgICAgc2V0VGltZW91dChkb1Njcm9sbCwgc2Nyb2xsRGVsYXkpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkb1Njcm9sbCgpXG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChcbiAgICAgIGhhc01lc3NhZ2VzICYmXG4gICAgICBpc05vdEluaXRpYWxNZXNzYWdlICYmXG4gICAgICAhaXNOZXdBbnN3ZXJNZXNzYWdlICYmXG4gICAgICAhaXNOZXdVc2VyTWVzc2FnZSAmJlxuICAgICAgIWlzTmV3QXBwcm92YWxNZXNzYWdlXG4gICAgKSB7XG4gICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuICAgICAgICBpZiAobWVzc2FnZXNSZWYuY3VycmVudCkge1xuICAgICAgICAgIG1lc3NhZ2VzUmVmLmN1cnJlbnQuc2Nyb2xsVG9wID0gbWVzc2FnZXNSZWYuY3VycmVudC5zY3JvbGxIZWlnaHRcbiAgICAgICAgICBjb25zdCB7IHNjcm9sbFRvcCwgc2Nyb2xsSGVpZ2h0LCBjbGllbnRIZWlnaHQgfSA9IG1lc3NhZ2VzUmVmLmN1cnJlbnRcbiAgICAgICAgICBjb25zdCBkaXN0YW5jZUZyb21Cb3R0b20gPSBzY3JvbGxIZWlnaHQgLSBzY3JvbGxUb3AgLSBjbGllbnRIZWlnaHRcbiAgICAgICAgICBjb25zdCBzaG91bGRTaG93ID0gZGlzdGFuY2VGcm9tQm90dG9tID4gNTBcbiAgICAgICAgICBzaG93U2Nyb2xsVG9Cb3R0b21SZWYuY3VycmVudCA9IHNob3VsZFNob3dcbiAgICAgICAgICBzZXRTaG93U2Nyb2xsVG9Cb3R0b20oc2hvdWxkU2hvdylcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9XG4gIH0sIFttZXNzYWdlcywgbG9hZGluZ01lc3NhZ2VzLCBpc0xvYWRpbmdNb3JlTWVzc2FnZXMsIHdhaXRpbmdSZXNwb25zZV0pXG5cbiAgLy8gVmVyaWZpY2FyIGVsIGVzdGFkbyBpbmljaWFsIGRlbCBzY3JvbGxcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAobWVzc2FnZXNSZWYuY3VycmVudCAmJiAhbG9hZGluZ01lc3NhZ2VzKSB7XG4gICAgICBjb25zdCBjb250YWluZXIgPSBtZXNzYWdlc1JlZi5jdXJyZW50XG4gICAgICBjb25zdCB7IHNjcm9sbFRvcCwgc2Nyb2xsSGVpZ2h0LCBjbGllbnRIZWlnaHQgfSA9IGNvbnRhaW5lclxuICAgICAgY29uc3QgZGlzdGFuY2VGcm9tQm90dG9tID0gc2Nyb2xsSGVpZ2h0IC0gc2Nyb2xsVG9wIC0gY2xpZW50SGVpZ2h0XG4gICAgICBjb25zdCBzaG91bGRTaG93ID0gZGlzdGFuY2VGcm9tQm90dG9tID4gNTBcbiAgICAgIHNob3dTY3JvbGxUb0JvdHRvbVJlZi5jdXJyZW50ID0gc2hvdWxkU2hvd1xuICAgICAgc2V0U2hvd1Njcm9sbFRvQm90dG9tKHNob3VsZFNob3cpXG4gICAgfVxuICB9LCBbbG9hZGluZ01lc3NhZ2VzLCBtZXNzYWdlcy5sZW5ndGhdKVxuXG4gIC8vIE9idGVuZXIgZWwgw7psdGltbyBtZW5zYWplIGRlbCB1c3VhcmlvIHBhcmEgdmVyaWZpY2FyIHNpIHRpZW5lIGF0dGFjaG1lbnRzXG4gIGNvbnN0IGxhc3RVc2VyTWVzc2FnZSA9IG1lc3NhZ2VzXG4gICAgLmZpbHRlcihtc2cgPT4gbXNnLnJvbGUgPT09IENoYXRIaXN0b3J5Um9sZS5VU0VSIHx8IG1zZy51c2VyLmlkID09PSBhdXRoVXNlci5pZC50b1N0cmluZygpKVxuICAgIC5hdCgtMSlcblxuICBjb25zdCBoYXNBdHRhY2htZW50cyA9XG4gICAgKEFycmF5LmlzQXJyYXkobGFzdFVzZXJNZXNzYWdlPy5hdHRhY2htZW50cykgJiYgbGFzdFVzZXJNZXNzYWdlLmF0dGFjaG1lbnRzLmxlbmd0aCkgfHxcbiAgICAoQXJyYXkuaXNBcnJheShsYXN0VXNlck1lc3NhZ2U/LnNvdXJjZXMpICYmIGxhc3RVc2VyTWVzc2FnZS5zb3VyY2VzLmxlbmd0aClcblxuICByZXR1cm4gKFxuICAgIDxkaXYgc3R5bGU9e3sgZGlzcGxheTogJ2ZsZXgnLCBmbGV4R3JvdzogMSwganVzdGlmeUNvbnRlbnQ6ICdjZW50ZXInLCBvdmVyZmxvdzogJ2F1dG8nLCBwb3NpdGlvbjogJ3JlbGF0aXZlJyB9fT5cbiAgICAgIDxkaXZcbiAgICAgICAgcmVmPXttZXNzYWdlc1JlZn1cbiAgICAgICAgb25TY3JvbGw9e2hhbmRsZVNjcm9sbFRvQm90dG9tfVxuICAgICAgICBzdHlsZT17e1xuICAgICAgICAgIGZsZXhHcm93OiAxLFxuICAgICAgICAgIG92ZXJmbG93WTogJ2F1dG8nLFxuICAgICAgICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICAgICAgICBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJyxcbiAgICAgICAgICBnYXA6ICczNnB4JyxcbiAgICAgICAgICBwYWRkaW5nOiAnMHB4IDE2cHgnLFxuICAgICAgICAgIG1heFdpZHRoOiAnODY0cHgnLFxuICAgICAgICB9fVxuICAgICAgPlxuICAgICAgICB7aXNMb2FkaW5nTW9yZU1lc3NhZ2VzICYmIDxMb2FkaW5nVGV4dCB0ZXh0PXt0KCdjaGF0LmxvYWRpbmdNb3JlJyl9IC8+fVxuICAgICAgICB7bWVzc2FnZXMubWFwKChtZXNzYWdlLCBpbmRleCkgPT4ge1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICEobWVzc2FnZS5hdHRhY2htZW50cz8ubGVuZ3RoIHx8IG1lc3NhZ2Uuc291cmNlcz8ubGVuZ3RoKSAmJlxuICAgICAgICAgICAgIW1lc3NhZ2UubWVzc2FnZSAmJlxuICAgICAgICAgICAgIW1lc3NhZ2UucHJvamVjdD8ubmFtZSAmJlxuICAgICAgICAgICAgIW1lc3NhZ2UuYXBwcm92YWxcbiAgICAgICAgICApXG4gICAgICAgICAgICByZXR1cm4gbnVsbFxuICAgICAgICAgIGNvbnN0IG1lc3NhZ2VGZWVkYmFjayA9XG4gICAgICAgICAgICBtZXNzYWdlPy53YXNIZWxwZnVsID09PSB1bmRlZmluZWQgfHwgbWVzc2FnZS53YXNIZWxwZnVsID09PSBudWxsXG4gICAgICAgICAgICAgID8gbnVsbFxuICAgICAgICAgICAgICA6IG1lc3NhZ2Uud2FzSGVscGZ1bFxuICAgICAgICAgICAgICAgID8gRmVlZGJhY2suVEhVTUJTX1VQXG4gICAgICAgICAgICAgICAgOiBGZWVkYmFjay5USFVNQlNfRE9XTlxuXG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxNZXNzYWdlSXRlbVxuICAgICAgICAgICAgICB7Li4ubWVzc2FnZX1cbiAgICAgICAgICAgICAga2V5PXttZXNzYWdlLmlkICE9IG51bGwgPyBgJHttZXNzYWdlLmlkfS0ke21lc3NhZ2UuZGF0ZX1gIDogYG1zZy0ke2luZGV4fWB9XG4gICAgICAgICAgICAgIGF1dGhVc2VyPXthdXRoVXNlcn1cbiAgICAgICAgICAgICAgaGFuZGxlU2VsZWN0T3B0aW9uPXtoYW5kbGVTZWxlY3RPcHRpb259XG4gICAgICAgICAgICAgIGhhbmRsZUZlZWRiYWNrPXtoYW5kbGVGZWVkYmFja31cbiAgICAgICAgICAgICAgaGFuZGxlQXBwcm92YWxEZWNpc2lvbj17aGFuZGxlQXBwcm92YWxEZWNpc2lvbn1cbiAgICAgICAgICAgICAgZGlzYWJsZUZlZWRiYWNrPXttZXNzYWdlRmVlZGJhY2t9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgIClcbiAgICAgICAgfSl9XG4gICAgICAgIHsod2FpdGluZ1Jlc3BvbnNlIHx8IGxvYWRpbmdNZXNzYWdlIHx8IE9iamVjdC5rZXlzKGFjdGl2ZUxvYWRpbmdzIHx8IHt9KS5sZW5ndGggPiAwKSAmJiAoXG4gICAgICAgICAgPGRpdiBzdHlsZT17eyBkaXNwbGF5OiAnZmxleCcsIGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nIH19PlxuICAgICAgICAgICAgeyh3YWl0aW5nUmVzcG9uc2UgfHwgbG9hZGluZ01lc3NhZ2UpICYmIChcbiAgICAgICAgICAgICAgPExvYWRpbmdUZXh0XG4gICAgICAgICAgICAgICAgdGV4dD17XG4gICAgICAgICAgICAgICAgICBsb2FkaW5nTWVzc2FnZSB8fFxuICAgICAgICAgICAgICAgICAgKGlzV2ViU2VhcmNoQWN0aXZlXG4gICAgICAgICAgICAgICAgICAgID8gJ0J1c2NhbmRvIGVuIGxhIHdlYidcbiAgICAgICAgICAgICAgICAgICAgOiBpc0RlZXBTZWFyY2hBY3RpdmVcbiAgICAgICAgICAgICAgICAgICAgICA/IHQoJ2NoYXQuZ2VuZXJhdGluZ0RlZXBTZWFyY2gnKVxuICAgICAgICAgICAgICAgICAgICAgIDogaGFzQXR0YWNobWVudHNcbiAgICAgICAgICAgICAgICAgICAgICAgID8gdCgnY2hhdC5nZW5lcmF0aW5nQXR0YWNobWVudCcpXG4gICAgICAgICAgICAgICAgICAgICAgICA6IHQoJ2NoYXQuZ2VuZXJhdGluZycpKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgICB7T2JqZWN0LmVudHJpZXMoYWN0aXZlTG9hZGluZ3MgfHwge30pLm1hcCgoW3RocmVhZElkLCBtZXNzYWdlXSkgPT4gKFxuICAgICAgICAgICAgICA8TG9hZGluZ1RleHQga2V5PXtgbG9hZGluZy0ke3RocmVhZElkfWB9IHRleHQ9e21lc3NhZ2V9IC8+XG4gICAgICAgICAgICApKX1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKX1cbiAgICAgIDwvZGl2PlxuXG4gICAgICB7c2hvd1Njcm9sbFRvQm90dG9tICYmIChcbiAgICAgICAgPFNjcm9sbFRvQm90dG9tQnV0dG9uIHR5cGU9XCJidXR0b25cIiBvbkNsaWNrPXtoYW5kbGVDbGlja1Njcm9sbFRvQm90dG9tfT5cbiAgICAgICAgICA8QXJyb3dTbWFsbERvd24gY29sb3I9XCIjNjY2XCIgd2lkdGg9XCIyMHB4XCIgaGVpZ2h0PVwiMjBweFwiIC8+XG4gICAgICAgIDwvU2Nyb2xsVG9Cb3R0b21CdXR0b24+XG4gICAgICApfVxuXG4gICAgICB7bG9hZGluZ01lc3NhZ2VzICYmIDxMb2FkZXIgLz59XG4gICAgPC9kaXY+XG4gIClcbn1cblxuZXhwb3J0IGNvbnN0IENoYXRBSU1lc3NhZ2VzID0gUmVhY3QubWVtbyhDaGF0QUlNZXNzYWdlc0lubmVyKVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBT0EsS0FBSyxJQUFRQyxJQUFJLEVBQWFDLFNBQVMsRUFBRUMsTUFBTSxFQUFFQyxRQUFRLEVBQUVDLFdBQVcsRUFBQUMsYUFBQSxJQUFBQyxjQUFBLFFBQVEsT0FBTztBQUM1RixPQUFPQyxRQUFRLE1BQU0sZ0JBQWdCO0FB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QUFDO01BRU4sQ0FBQyxDQUFDLEVBQ0QsQ0FBQzlELGVBQWUsSUFBSUUsY0FBYyxJQUFJa0UsTUFBTSxDQUFDQyxJQUFJLENBQUNsRSxjQUFjLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQ2pGLE1BQU0sR0FBRyxDQUFDLGtCQUNqRjlJLEtBQUE7UUFBS1MsS0FBSyxFQUFFO1VBQUVJLE9BQU8sRUFBRSxNQUFNO1VBQUU4QixhQUFhLEVBQUU7UUFBUyxDQUFFO1FBQUExQixRQUFBLEdBQ3RELENBQUMyTSxlQUFlLElBQUlFLGNBQWMsa0JBQ2pDaE8sSUFBQSxDQUFDZixXQUFXO1VBQ1ZzUyxJQUFJLEVBQ0Z2RCxjQUFjLEtBQ2J0QixpQkFBaUIsR0FDZCxvQkFBb0IsR0FDcEJDLGtCQUFrQixHQUNoQkgsQ0FBQyxDQUFDLDJCQUEyQixDQUFDLEdBQzlCc0UsY0FBYyxHQUNadEUsQ0FBQyxDQUFDLDJCQUEyQixDQUFDLEdBQzlCQSxDQUFDLENBQUMsaUJBQWlCLENBQUM7UUFDN0IsQ0FDRixDQUNGLEVBQ0EwRixNQUFNLENBQUNFLE9BQU8sQ0FBQ25FLGNBQWMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDbkwsR0FBRyxDQUFDLFVBQUF1UCxLQUFBO1VBQUEsSUFBQUMsTUFBQSxHQUFBaFMsY0FBQSxDQUFBK1IsS0FBQTtZQUFFakksUUFBUSxHQUFBa0ksTUFBQTtZQUFFM00sT0FBTyxHQUFBMk0sTUFBQTtVQUFBLG9CQUMzRHRTLElBQUEsQ0FBQ2YsV0FBVztZQUE2QnNTLElBQUksRUFBRTVMO1VBQVEsY0FBQXpDLE1BQUEsQ0FBMUJrSCxRQUFRLENBQW9CLENBQUM7UUFBQSxDQUMzRCxDQUFDO01BQUEsQ0FDQyxDQUNOO0lBQUEsQ0FDRSxDQUFDLEVBRUxrRCxrQkFBa0IsaUJBQ2pCdE4sSUFBQSxDQUFDTixvQkFBb0I7TUFBQzBCLElBQUksRUFBQyxRQUFRO01BQUNpQyxPQUFPLEVBQUVrTCx5QkFBMEI7TUFBQXBOLFFBQUEsZUFDckVuQixJQUFBLENBQUN6QixjQUFjO1FBQUN3RSxLQUFLLEVBQUMsTUFBTTtRQUFDbkMsS0FBSyxFQUFDLE1BQU07UUFBQ0MsTUFBTSxFQUFDO01BQU0sQ0FBRTtJQUFDLENBQ3RDLENBQ3ZCLEVBRUErTSxlQUFlLGlCQUFJNU4sSUFBQSxDQUFDZCxNQUFNLElBQUUsQ0FBQztFQUFBLENBQzNCLENBQUM7QUFFVixDQUFDO0FBRUQsT0FBTyxJQUFNcVQsY0FBYyxnQkFBRzNVLEtBQUssQ0FBQ0MsSUFBSSxDQUFDa08sbUJBQW1CLENBQUMiLCJpZ25vcmVMaXN0IjpbXX0=
666
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSZWFjdCIsIm1lbW8iLCJ1c2VFZmZlY3QiLCJ1c2VSZWYiLCJ1c2VTdGF0ZSIsInVzZUNhbGxiYWNrIiwiY3JlYXRlRWxlbWVudCIsIl9jcmVhdGVFbGVtZW50IiwiU3RyZWFtZG93biIsImNyZWF0ZUNvZGVQbHVnaW4iLCJBcnJvd1NtYWxsRG93biIsIkF0dGFjaG1lbnRDYXJkIiwiQXBwcm92YWxCb3giLCJBdHRhY2htZW50UHJldmlld01vZGFsIiwiQXR0YWNobWVudENhcmRBdWRpbyIsIkNoYXRIaXN0b3J5Um9sZSIsInVzZVVzZXIiLCJ1c2VUIiwidXNlQ2hhdE1hbmFnZXIiLCJ1c2VUYXNrUGFuZWwiLCJMb2FkaW5nVGV4dCIsIkxvYWRlciIsIk1lc3NhZ2VGcm9tVXNlciIsIk1lc3NhZ2VGcm9tT3RoZXIiLCJNZXNzYWdlQ29udGVudEZyb21Vc2VyIiwiTWVzc2FnZUNvbnRlbnRGcm9tT3RoZXIiLCJNZXNzYWdlRmVlZGJhY2siLCJTQ0NBSU1lc3NhZ2VXcmFwcGVyIiwiU2Nyb2xsVG9Cb3R0b21CdXR0b24iLCJTQ01lc3NhZ2VzT3V0ZXIiLCJTQ01lc3NhZ2VzU2Nyb2xsIiwiU0NNZXNzYWdlc0lubmVyIiwiU0NMb2FkaW5nTWVzc2FnZXNDb2x1bW4iLCJTQ09wdGlvbnNMaXN0IiwiU0NPcHRpb25JdGVtIiwiU0NBc3Npc3RhbnRNZXNzYWdlSGVhZGVyIiwiU0NBc3Npc3RhbnROYW1lIiwiU0NBc3Npc3RhbnRBdmF0YXIiLCJTQ1Rhc2tMaW5rIiwiU0NNZXNzYWdlSXRlbVdyYXBwZXIiLCJTQ01lc3NhZ2VJdGVtSW5uZXIiLCJTQ0F0dGFjaG1lbnRzUm93IiwiU0NBcHByb3ZhbEFjdGlvbnNDb2x1bW4iLCJGZWVkYmFjayIsInVzZUdsb2JhbENvbnRleHQiLCJNQUlBSXNvbG9nbyIsIlRBU0tfVVJMX1JFR0VYX1BBVFRFUk4iLCJqc3giLCJfanN4IiwianN4cyIsIl9qc3hzIiwiRnJhZ21lbnQiLCJfRnJhZ21lbnQiLCJjb2RlIiwidGhlbWVzIiwiQXNzaXN0YW50QXZhdGFyIiwiX3VzZVN0YXRlIiwiX3VzZVN0YXRlMiIsIl9zbGljZWRUb0FycmF5IiwibG9jYWxBZ2VudCIsInNldExvY2FsQWdlbnQiLCJfdXNlR2xvYmFsQ29udGV4dCIsImFnZW50IiwiY2hpbGRyZW4iLCJ0eXBlIiwid2lkdGgiLCJoZWlnaHQiLCJlbW9qaSIsIk1lc3NhZ2VXcmFwcGVyIiwiX3JlZiIsImlzQ3VycmVudFVzZXIiLCJwcm9wcyIsIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsIl9leGNsdWRlZCIsIk1lc3NhZ2VDb21wb25lbnQiLCJfb2JqZWN0U3ByZWFkIiwiTWVzc2FnZUNvbnRlbnRXcmFwcGVyIiwiX3JlZjIiLCJfZXhjbHVkZWQyIiwiTWVzc2FnZUNvbnRlbnRDb21wb25lbnQiLCJNZXNzYWdlT3B0aW9ucyIsIl9yZWYzIiwib3B0aW9ucyIsImhhbmRsZVNlbGVjdE9wdGlvbiIsIl91c2VTdGF0ZTMiLCJfdXNlU3RhdGU0Iiwic2VsZWN0ZWRPcHRpb24iLCJzZXRTZWxlY3RlZE9wdGlvbiIsImhhbmRsZVNlbGVjdCIsIm9wdGlvbiIsIm1hcCIsIiRoYXNTZWxlY3Rpb24iLCIkZGltbWVkIiwiaWQiLCJvbkNsaWNrIiwibmFtZSIsIkFzc2lzdGFudE1lc3NhZ2VIZWFkZXIiLCJfdXNlU3RhdGU1IiwiX3VzZVN0YXRlNiIsIl91c2VHbG9iYWxDb250ZXh0MiIsImdldFRhYlNlZ21lbnRGcm9tSHJlZiIsImhyZWYiLCJtYXRjaCIsInRlc3QiLCJUYXNrTGluayIsIl9yZWY0IiwidGFza0lkIiwidGFiU2VnbWVudCIsIl91c2VUYXNrUGFuZWwiLCJidWlsZE9wZW5UYXNrIiwib3BlblRhc2siLCJoYW5kbGVDbGljayIsImUiLCJtZXRhS2V5IiwiY3RybEtleSIsInByZXZlbnREZWZhdWx0IiwiQ3VzdG9tTGluayIsIl9yZWY1IiwicmVzdCIsIl9leGNsdWRlZDMiLCJ0YXNrTWF0Y2giLCJSZWdFeHAiLCJNZXNzYWdlSXRlbSIsIl9yZWY2IiwiX3JlZjciLCJ1c2VyIiwibWVzc2FnZSIsImlzRXJyb3IiLCJhdXRoVXNlciIsImlzQ2hhbmdlUHJvamVjdCIsImhhbmRsZUZlZWRiYWNrIiwiaGFuZGxlQXBwcm92YWxEZWNpc2lvbiIsImRpc2FibGVGZWVkYmFjayIsInJvbGUiLCJzb3VyY2VzIiwiYXR0YWNobWVudHMiLCJhcHByb3ZhbCIsImFwcHJvdmFsU3RhdHVzIiwiZXh0cmFjdFRhc2tzRnJvbU1lc3NhZ2UiLCJ0YXNrVXJsUmVnZXgiLCJ0YXNrcyIsInNlZW5JZHMiLCJTZXQiLCJleGVjIiwidXJsIiwiaGFzIiwiYWRkIiwibWFya2Rvd25MaW5rUmVnZXgiLCJjb25jYXQiLCJyZXBsYWNlIiwibGlua01hdGNoIiwidGl0bGUiLCJwdXNoIiwiX3VzZVN0YXRlNyIsIl91c2VTdGF0ZTgiLCJwcmV2aWV3QXR0YWNobWVudCIsInNldFByZXZpZXdBdHRhY2htZW50IiwiVVNFUiIsInRvU3RyaW5nIiwiaXNBc3Npc3RhbnQiLCJBU1NJU1RBTlQiLCJoYW5kbGVBdHRhY2htZW50Q2xpY2siLCJhdHRhY2htZW50IiwiZmlsZSIsIkZpbGUiLCJvcmlnaW5hbEZpbGUiLCJ1cmxfdGh1bWJuYWlsIiwidXJsX29yaWdpbmFsIiwidXJsX2ZpbGUiLCJoYW5kbGVDbG9zZVByZXZpZXciLCJoYXNGZWVkYmFjayIsIiRpc0Fzc2lzdGFudCIsIm1lc3NhZ2VFeHRyYUNvbnRlbnQiLCJoYW5kbGVGZWVkYmFja0NsaWNrIiwiZmVlZGJhY2siLCJzZXNzaW9uSWQiLCJzcGxpdCIsImZpbHRlciIsInF1ZXN0aW9uSWQiLCJqb2luIiwibGVuZ3RoIiwiaW5kZXgiLCJfYXR0YWNobWVudCR0eXBlIiwiX2F0dGFjaG1lbnQkbmFtZSIsImF0dGFjaG1lbnRUeXBlIiwidG9Mb3dlckNhc2UiLCJhdHRhY2htZW50TmFtZSIsImlzQXVkaW9GaWxlIiwic3RhcnRzV2l0aCIsImluY2x1ZGVzIiwic29tZSIsImV4dCIsImVuZHNXaXRoIiwicG9zaXRpb25JbmRleCIsInBlbmRpbmdfYWN0aW9ucyIsImFjdGlvbiIsIl9wcm9wcyRwcm9qZWN0TWV0YWRhdCIsInN0YXR1cyIsIm9uQXBwcm92ZSIsInRocmVhZElkIiwib25SZWplY3QiLCJpc1Byb2plY3REZWxldGVkIiwicHJvamVjdE1ldGFkYXRhIiwiaXNfZGVsZXRlZCIsImlzRXhwYW5kZWQiLCJleHBhbmRlZCIsInRocmVhZF9pZCIsInRvb2xfY2FsbF9pZCIsImlzRnJvbnRlbmRDYW5jZWxsZWQiLCJjbGFzc05hbWUiLCJwbHVnaW5zIiwiY29tcG9uZW50cyIsImEiLCJsaW5rU2FmZXR5IiwiZW5hYmxlZCIsImlzQW5pbWF0aW5nIiwiaXNTdHJlYW1pbmciLCJzaGlraVRoZW1lIiwiY29udHJvbHMiLCJ0YWJsZSIsImNvbnRlbnQiLCJpc09wZW4iLCJvbkNsb3NlIiwiQ2hhdEFJTWVzc2FnZXNJbm5lciIsIl9yZWY4IiwidXNlckluaXRpYWxNZXNzYWdlIiwiaW5pdGlhbENoYXRJZCIsIm9uRXJyb3IiLCJvblNlbmRNZXNzYWdlUmVhZHkiLCJvblNjcm9sbFRvQm90dG9tIiwiYWdlbnRzIiwiX3VzZVQiLCJ0IiwiX3VzZUdsb2JhbENvbnRleHQzIiwiaXNXZWJTZWFyY2hBY3RpdmUiLCJpc0RlZXBTZWFyY2hBY3RpdmUiLCJtZXNzYWdlc1JlZiIsImNoYXRJbml0aWFsaXplZFJlZiIsImlzTG9hZGluZ01vcmVSZWYiLCJ1c2VyU2Nyb2xsaW5nUmVmIiwic2Nyb2xsVGhyZXNob2xkUmVmIiwibGFzdFNjcm9sbFRvcFJlZiIsInNob3dTY3JvbGxUb0JvdHRvbVJlZiIsInNjcm9sbFJhZlJlZiIsIl91c2VTdGF0ZTkiLCJfdXNlU3RhdGUwIiwic2hvd1Njcm9sbFRvQm90dG9tIiwic2V0U2hvd1Njcm9sbFRvQm90dG9tIiwiX3VzZUNoYXRNYW5hZ2VyIiwiY2hhdElkIiwidW5kZWZpbmVkIiwibWVzc2FnZXMiLCJsb2FkaW5nTWVzc2FnZXMiLCJpc0xvYWRpbmdNb3JlTWVzc2FnZXMiLCJ3YWl0aW5nUmVzcG9uc2UiLCJpc1dyaXRpbmciLCJsb2FkaW5nTWVzc2FnZSIsImFjdGl2ZUxvYWRpbmdzIiwic2VuZE1lc3NhZ2UiLCJjaGFuZ2VQcm9qZWN0IiwiaW5pdGlhbGl6ZUNoYXQiLCJoYW5kbGVTY3JvbGwiLCJzdG9wR2VuZXJhdGlvbiIsImhhbmRsZUNsaWNrU2Nyb2xsVG9Cb3R0b20iLCJjdXJyZW50Iiwic2Nyb2xsVG8iLCJ0b3AiLCJzY3JvbGxIZWlnaHQiLCJiZWhhdmlvciIsInNldFRpbWVvdXQiLCJfbWVzc2FnZXNSZWYkY3VycmVudCIsInNjcm9sbFRvcCIsImNsaWVudEhlaWdodCIsImRpc3RhbmNlRnJvbUJvdHRvbSIsInNob3VsZFNob3ciLCJoYW5kbGVTY3JvbGxUb0JvdHRvbSIsImNvbnRhaW5lciIsImN1cnJlbnRUYXJnZXQiLCJjYW5jZWxBbmltYXRpb25GcmFtZSIsInJlcXVlc3RBbmltYXRpb25GcmFtZSIsImlzU2Nyb2xsaW5nVXAiLCJpc05lYXJCb3R0b20iLCJkaWRTZXRTdGF0ZSIsInNlbmRNZXNzYWdlUmVmIiwic3RvcEdlbmVyYXRpb25SZWYiLCJvblNlbmRNZXNzYWdlUmVhZHlSZWYiLCJsYXN0TWVzc2FnZSIsImhhc0FwcHJvdmFsIiwiaXNBdEJvdHRvbSIsInNjcm9sbFRvQm90dG9tIiwiX21lc3NhZ2VzUmVmJGN1cnJlbnQyIiwiaXNOZXdBbnN3ZXJNZXNzYWdlIiwiaXNOZXdVc2VyTWVzc2FnZSIsImlzTmV3QXBwcm92YWxNZXNzYWdlIiwiaGFzTWVzc2FnZXMiLCJpc05vdEluaXRpYWxNZXNzYWdlIiwibXNnIiwic2Nyb2xsRGVsYXkiLCJkb1Njcm9sbCIsIl9tZXNzYWdlc1JlZiRjdXJyZW50MyIsIl9tZXNzYWdlc1JlZiRjdXJyZW50NCIsImxhc3RVc2VyTWVzc2FnZSIsImF0IiwiaGFzQXR0YWNobWVudHMiLCJBcnJheSIsImlzQXJyYXkiLCJpc1Njcm9sbE9uUGFyZW50IiwibWVzc2FnZXNDb250ZW50IiwidGV4dCIsIl9tZXNzYWdlJGF0dGFjaG1lbnRzIiwiX21lc3NhZ2Ukc291cmNlcyIsIl9tZXNzYWdlJHByb2plY3QiLCJwcm9qZWN0IiwibWVzc2FnZUZlZWRiYWNrIiwid2FzSGVscGZ1bCIsIlRIVU1CU19VUCIsIlRIVU1CU19ET1dOIiwiaXNBc3Npc3RhbnRNZXNzYWdlIiwiaXNMYXN0TWVzc2FnZSIsImtleSIsImRhdGUiLCJPYmplY3QiLCJrZXlzIiwiZW50cmllcyIsIl9yZWY5IiwiX3JlZjAiLCIkc2Nyb2xsT25QYXJlbnQiLCJyZWYiLCJvblNjcm9sbCIsImNvbG9yIiwiQ2hhdEFJTWVzc2FnZXMiXSwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50cy9tb2xlY3VsZXMvQ2hhdEFJTWVzc2FnZXMvQ2hhdEFJTWVzc2FnZXMudHN4Il0sInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIGltcG9ydC9uby1leHRyYW5lb3VzLWRlcGVuZGVuY2llcyAqL1xuLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L2luZGVudCAqL1xuLyogZXNsaW50LWRpc2FibGUgcmVhY3Qvbm8tdW5zdGFibGUtbmVzdGVkLWNvbXBvbmVudHMgKi9cbi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1zaGFkb3cgKi9cbi8qIGVzbGludC1kaXNhYmxlIG5vLW5lc3RlZC10ZXJuYXJ5ICovXG4vKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55ICovXG4vKiBlc2xpbnQtZGlzYWJsZSBuby11bmRlZiAqL1xuLyogZXNsaW50LWRpc2FibGUgcmVhY3QvZnVuY3Rpb24tY29tcG9uZW50LWRlZmluaXRpb24gKi9cbi8qIGVzbGludC1kaXNhYmxlIHJlYWN0L3JlcXVpcmUtZGVmYXVsdC1wcm9wcyAqL1xuLyogZXNsaW50LWRpc2FibGUganN4LWExMXkvY2xpY2stZXZlbnRzLWhhdmUta2V5LWV2ZW50cyAqL1xuLyogZXNsaW50LWRpc2FibGUganN4LWExMXkvbm8tc3RhdGljLWVsZW1lbnQtaW50ZXJhY3Rpb25zICovXG5pbXBvcnQgUmVhY3QsIHsgRkMsIG1lbW8sIFJlYWN0Tm9kZSwgdXNlRWZmZWN0LCB1c2VSZWYsIHVzZVN0YXRlLCB1c2VDYWxsYmFjayB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgU3RyZWFtZG93biB9IGZyb20gJ3N0cmVhbWRvd24nXG5pbXBvcnQgeyBjcmVhdGVDb2RlUGx1Z2luIH0gZnJvbSAnQHN0cmVhbWRvd24vY29kZSdcbmltcG9ydCB7IEFycm93U21hbGxEb3duIH0gZnJvbSAnQHByb2plY3Rjb3IvaWNvbnMvbGliL2NvbXBvbmVudHMvQXJyb3dTbWFsbERvd24nXG5cbmltcG9ydCB7IEF0dGFjaG1lbnRDYXJkIH0gZnJvbSAnLi4vLi4vYXRvbXMvQXR0YWNobWVudENhcmQvQXR0YWNobWVudENhcmQnXG5pbXBvcnQgeyBBcHByb3ZhbEJveCB9IGZyb20gJy4uLy4uL2F0b21zL0FwcHJvdmFsQm94L0FwcHJvdmFsQm94J1xuaW1wb3J0IHsgQXR0YWNobWVudFByZXZpZXdNb2RhbCB9IGZyb20gJy4uLy4uL2F0b21zL0F0dGFjaG1lbnRQcmV2aWV3TW9kYWwnXG5pbXBvcnQgeyBBdHRhY2htZW50Q2FyZEF1ZGlvIH0gZnJvbSAnLi4vLi4vYXRvbXMvQXR0YWNobWVudENhcmQvQXR0YWNobWVudENhcmRBdWRpbydcbmltcG9ydCB7IE1BSUFNZXNzYWdlUHJvcHMgfSBmcm9tICcuLi8uLi9hdG9tcy9NQUlBTWVzc2FnZS9NQUlBTWVzc2FnZS5pbnRlcmZhY2VzJ1xuaW1wb3J0IHsgQ2hhdE1lc3NhZ2UsIENoYXRIaXN0b3J5Um9sZSwgVGFza0luZm8gfSBmcm9tICcuLi8uLi8uLi90eXBlcy9DaGF0J1xuXG5pbXBvcnQgeyBDT1JVc2VyLCB1c2VVc2VyIH0gZnJvbSAnLi4vLi4vLi4vY29udGV4dC9jb3ItdXNlcidcblxuaW1wb3J0IHsgdXNlVCB9IGZyb20gJy4uLy4uLy4uL2hvb2tzL3VzZVQnXG5pbXBvcnQgeyB1c2VDaGF0TWFuYWdlciB9IGZyb20gJy4uLy4uLy4uL2hvb2tzL3VzZUNoYXRNYW5hZ2VyL3VzZUNoYXRNYW5hZ2VyJ1xuaW1wb3J0IHsgdXNlVGFza1BhbmVsIH0gZnJvbSAnLi4vLi4vLi4vaG9va3MvdXNlVGFza1BhbmVsJ1xuXG5pbXBvcnQgeyBMb2FkaW5nVGV4dCB9IGZyb20gJy4uLy4uL2F0b21zL0xvYWRpbmdUZXh0J1xuaW1wb3J0IHsgTG9hZGVyIH0gZnJvbSAnLi4vLi4vYXRvbXMvTG9hZGVyJ1xuXG5pbXBvcnQgeyBQcm9qZWN0IH0gZnJvbSAnLi4vLi4vLi4vdHlwZXMvUHJvamVjdCdcblxuaW1wb3J0IHsgTWVzc2FnZUZyb21Vc2VyLCBNZXNzYWdlRnJvbU90aGVyLCBNZXNzYWdlQ29udGVudEZyb21Vc2VyLCBNZXNzYWdlQ29udGVudEZyb21PdGhlciB9IGZyb20gJy4vc3R5bGVzJ1xuaW1wb3J0IHsgTWVzc2FnZUZlZWRiYWNrIH0gZnJvbSAnLi4vTWVzc2FnZUZlZWRiYWNrJ1xuaW1wb3J0IHtcbiAgU0NDQUlNZXNzYWdlV3JhcHBlcixcbiAgU2Nyb2xsVG9Cb3R0b21CdXR0b24sXG4gIFNDTWVzc2FnZXNPdXRlcixcbiAgU0NNZXNzYWdlc1Njcm9sbCxcbiAgU0NNZXNzYWdlc0lubmVyLFxuICBTQ0xvYWRpbmdNZXNzYWdlc0NvbHVtbixcbiAgU0NPcHRpb25zTGlzdCxcbiAgU0NPcHRpb25JdGVtLFxuICBTQ0Fzc2lzdGFudE1lc3NhZ2VIZWFkZXIsXG4gIFNDQXNzaXN0YW50TmFtZSxcbiAgU0NBc3Npc3RhbnRBdmF0YXIsXG4gIFNDVGFza0xpbmssXG4gIFNDTWVzc2FnZUl0ZW1XcmFwcGVyLFxuICBTQ01lc3NhZ2VJdGVtSW5uZXIsXG4gIFNDQXR0YWNobWVudHNSb3csXG4gIFNDQXBwcm92YWxBY3Rpb25zQ29sdW1uLFxufSBmcm9tICcuL25ld1N0eWxlcydcbmltcG9ydCB7IEZlZWRiYWNrIH0gZnJvbSAnLi4vTWVzc2FnZUZlZWRiYWNrL01lc3NhZ2VGZWVkYmFjaydcbmltcG9ydCB7IHVzZUdsb2JhbENvbnRleHQgfSBmcm9tICcuLi8uLi8uLi9jb250ZXh0L2dsb2JhbC1jb250ZXh0J1xuaW1wb3J0IHsgQWdlbnQgfSBmcm9tICcuLi8uLi8uLi90eXBlcy9hZ2VudCdcbmltcG9ydCB7IEF0dGFjaG1lbnRGaWxlIH0gZnJvbSAnLi4vQ2hhdEZvb3Rlci9DaGF0Rm9vdGVyJ1xuaW1wb3J0IHsgTUFJQUlzb2xvZ28gfSBmcm9tICcuLi8uLi9hdG9tcy9pY29ucydcbmltcG9ydCB7IFRBU0tfVVJMX1JFR0VYX1BBVFRFUk4gfSBmcm9tICcuLi8uLi8uLi9jb25zdGFudHMvdGFza1VybHMnXG5cbmNvbnN0IGNvZGUgPSBjcmVhdGVDb2RlUGx1Z2luKHsgdGhlbWVzOiBbJ2dpdGh1Yi1saWdodCcsICdnaXRodWItbGlnaHQnXSB9KVxuXG5jb25zdCBBc3Npc3RhbnRBdmF0YXIgPSAoKSA9PiB7XG4gIGNvbnN0IFtsb2NhbEFnZW50LCBzZXRMb2NhbEFnZW50XSA9IHVzZVN0YXRlPEFnZW50IHwgbnVsbD4obnVsbClcbiAgY29uc3QgeyBhZ2VudCB9ID0gdXNlR2xvYmFsQ29udGV4dCgpXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBzZXRMb2NhbEFnZW50KGFnZW50KVxuICB9LCBbYWdlbnRdKVxuXG4gIHJldHVybiAoXG4gICAgPFNDQXNzaXN0YW50QXZhdGFyPlxuICAgICAge2xvY2FsQWdlbnQ/LnR5cGUgPT09ICdjbG9uZScgPyA8TUFJQUlzb2xvZ28gd2lkdGg9ezE4fSBoZWlnaHQ9ezE4fSAvPiA6IGxvY2FsQWdlbnQ/LmVtb2ppfVxuICAgIDwvU0NBc3Npc3RhbnRBdmF0YXI+XG4gIClcbn1cblxudHlwZSBDaGF0QUlNZXNzYWdlc1Byb3BzID0ge1xuICB1c2VySW5pdGlhbE1lc3NhZ2U6IHsgbWVzc2FnZTogc3RyaW5nOyBhdHRhY2htZW50czogQXR0YWNobWVudEZpbGVbXTsgZmFxSWQ/OiBzdHJpbmcgfVxuICBpbml0aWFsQ2hhdElkOiBzdHJpbmcgfCBudWxsXG4gIG9uRXJyb3I6ICgpID0+IHZvaWRcbiAgb25TZW5kTWVzc2FnZVJlYWR5PzogKFxuICAgIHNlbmRNZXNzYWdlOiAobWVzc2FnZTogc3RyaW5nKSA9PiB2b2lkLFxuICAgIHN0b3BHZW5lcmF0aW9uOiAoKSA9PiB2b2lkLFxuICAgIGlzU3RyZWFtaW5nOiBib29sZWFuLFxuICAgIGlzV3JpdGluZzogYm9vbGVhblxuICApID0+IHZvaWRcbiAgaXNEaXNhYmxlZD86IGJvb2xlYW5cbiAgb25TY3JvbGxUb0JvdHRvbT86ICgpID0+IHZvaWRcbiAgYXR0YWNobWVudHM/OiBBdHRhY2htZW50RmlsZVtdXG4gIGFnZW50cz86IEFnZW50W11cbiAgZXhwYW5kZWQ/OiBib29sZWFuXG59XG5cbnR5cGUgTWVzc2FnZUl0ZW1Qcm9wcyA9IENoYXRNZXNzYWdlICYge1xuICBhdXRoVXNlcjogQ09SVXNlclxuICBoYW5kbGVTZWxlY3RPcHRpb246IChvcHRpb246IFByb2plY3QpID0+IHZvaWRcbiAgaGFuZGxlRmVlZGJhY2s6IChmZWVkYmFjazogRmVlZGJhY2ssIGNoYXRNZXNzYWdlSWQ6IHN0cmluZykgPT4gdm9pZFxuICBoYW5kbGVBcHByb3ZhbERlY2lzaW9uOiAodGhyZWFkSWQ6IHN0cmluZywgZGVjaXNpb246ICdhcHByb3ZlJyB8ICdyZWplY3QnKSA9PiB2b2lkXG4gIGRpc2FibGVGZWVkYmFjaz86IEZlZWRiYWNrIHwgbnVsbFxuICBzb3VyY2VzPzogYW55XG4gIGF0dGFjaG1lbnRzPzogQXR0YWNobWVudEZpbGVbXVxuICBpc1N0cmVhbWluZz86IGJvb2xlYW5cbiAgZXhwYW5kZWQ/OiBib29sZWFuXG59XG5cbmludGVyZmFjZSBNZXNzYWdlV3JhcHBlclByb3BzIHtcbiAgaXNDdXJyZW50VXNlcjogYm9vbGVhblxuICBjaGlsZHJlbjogUmVhY3ROb2RlXG4gICdkYXRhLW1lc3NhZ2UtaWQnPzogc3RyaW5nXG4gIGhhc0ZlZWRiYWNrPzogYm9vbGVhblxufVxuXG50eXBlIE1lc3NhZ2VDb250ZW50V3JhcHBlclByb3BzID0gTUFJQU1lc3NhZ2VQcm9wcyAmIHtcbiAgaXNDdXJyZW50VXNlcjogYm9vbGVhblxuICBpc0Vycm9yPzogYm9vbGVhblxuICBpc0NoYW5nZVByb2plY3Q/OiBib29sZWFuXG59XG5cbmNvbnN0IE1lc3NhZ2VXcmFwcGVyOiBGQzxNZXNzYWdlV3JhcHBlclByb3BzPiA9ICh7IGlzQ3VycmVudFVzZXIsIGNoaWxkcmVuLCAuLi5wcm9wcyB9KSA9PiB7XG4gIGNvbnN0IE1lc3NhZ2VDb21wb25lbnQgPSBpc0N1cnJlbnRVc2VyID8gTWVzc2FnZUZyb21Vc2VyIDogTWVzc2FnZUZyb21PdGhlclxuICByZXR1cm4gPE1lc3NhZ2VDb21wb25lbnQgey4uLnByb3BzfT57Y2hpbGRyZW59PC9NZXNzYWdlQ29tcG9uZW50PlxufVxuXG5jb25zdCBNZXNzYWdlQ29udGVudFdyYXBwZXI6IEZDPE1lc3NhZ2VDb250ZW50V3JhcHBlclByb3BzPiA9ICh7IGlzQ3VycmVudFVzZXIsIC4uLnByb3BzIH0pID0+IHtcbiAgY29uc3QgTWVzc2FnZUNvbnRlbnRDb21wb25lbnQgPSBpc0N1cnJlbnRVc2VyID8gTWVzc2FnZUNvbnRlbnRGcm9tVXNlciA6IE1lc3NhZ2VDb250ZW50RnJvbU90aGVyXG4gIHJldHVybiA8TWVzc2FnZUNvbnRlbnRDb21wb25lbnQgey4uLnByb3BzfSAvPlxufVxuXG5mdW5jdGlvbiBNZXNzYWdlT3B0aW9ucyh7XG4gIG9wdGlvbnMsXG4gIGhhbmRsZVNlbGVjdE9wdGlvbixcbn06IHtcbiAgb3B0aW9uczogUHJvamVjdFtdIHwgbnVsbFxuICBoYW5kbGVTZWxlY3RPcHRpb246IChvcHRpb246IFByb2plY3QpID0+IHZvaWRcbn0pIHtcbiAgY29uc3QgW3NlbGVjdGVkT3B0aW9uLCBzZXRTZWxlY3RlZE9wdGlvbl0gPSB1c2VTdGF0ZTxQcm9qZWN0IHwgbnVsbD4obnVsbClcblxuICBjb25zdCBoYW5kbGVTZWxlY3QgPSAob3B0aW9uOiBQcm9qZWN0KSA9PiB7XG4gICAgaWYgKHNlbGVjdGVkT3B0aW9uKSByZXR1cm5cbiAgICBzZXRTZWxlY3RlZE9wdGlvbihvcHRpb24pXG4gICAgaGFuZGxlU2VsZWN0T3B0aW9uKG9wdGlvbilcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPFNDT3B0aW9uc0xpc3Q+XG4gICAgICB7KG9wdGlvbnMgfHwgW10pLm1hcChvcHRpb24gPT4gKFxuICAgICAgICA8U0NPcHRpb25JdGVtXG4gICAgICAgICAgJGhhc1NlbGVjdGlvbj17ISFzZWxlY3RlZE9wdGlvbn1cbiAgICAgICAgICAkZGltbWVkPXshIXNlbGVjdGVkT3B0aW9uICYmIHNlbGVjdGVkT3B0aW9uPy5pZCAhPT0gb3B0aW9uLmlkfVxuICAgICAgICAgIG9uQ2xpY2s9eygpID0+IGhhbmRsZVNlbGVjdChvcHRpb24pfVxuICAgICAgICAgIGtleT17b3B0aW9uLmlkfVxuICAgICAgICA+XG4gICAgICAgICAge29wdGlvbi5uYW1lfVxuICAgICAgICA8L1NDT3B0aW9uSXRlbT5cbiAgICAgICkpfVxuICAgIDwvU0NPcHRpb25zTGlzdD5cbiAgKVxufVxuXG5jb25zdCBBc3Npc3RhbnRNZXNzYWdlSGVhZGVyID0gKCkgPT4ge1xuICBjb25zdCBbbG9jYWxBZ2VudCwgc2V0TG9jYWxBZ2VudF0gPSB1c2VTdGF0ZTxBZ2VudCB8IG51bGw+KG51bGwpXG4gIGNvbnN0IHsgYWdlbnQgfSA9IHVzZUdsb2JhbENvbnRleHQoKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgc2V0TG9jYWxBZ2VudChhZ2VudClcbiAgfSwgW2FnZW50XSlcblxuICByZXR1cm4gKFxuICAgIDxTQ0Fzc2lzdGFudE1lc3NhZ2VIZWFkZXI+XG4gICAgICA8QXNzaXN0YW50QXZhdGFyIC8+XG4gICAgICB7bG9jYWxBZ2VudD8ubmFtZSAmJiAoXG4gICAgICAgIDxTQ0Fzc2lzdGFudE5hbWU+e2xvY2FsQWdlbnQ/LnR5cGUgPT09ICdjbG9uZScgPyAnTUFJQScgOiBsb2NhbEFnZW50Py5uYW1lfTwvU0NBc3Npc3RhbnROYW1lPlxuICAgICAgKX1cbiAgICA8L1NDQXNzaXN0YW50TWVzc2FnZUhlYWRlcj5cbiAgKVxufVxuXG4vLyBFeHRyYWUgZWwgc2VnbWVudG8gZGUgdGFiIChkZXRhaWx8bWVzc2FnZXxtZXNzYWdlc3xmaWxlc3xoaXN0b3J5fGhvdXJzKSBkZWwgaHJlZiBwYXJhIGFicmlyIGVsIG1vZGFsIGNvbiBlbCB0YWIgY29ycmVjdG9cbmNvbnN0IGdldFRhYlNlZ21lbnRGcm9tSHJlZiA9IChocmVmOiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xuICBjb25zdCBtYXRjaCA9IGhyZWYubWF0Y2goL1xcL3Rhc2tzXFwvXFxkK1xcLyhbXi8/XSspLylcbiAgcmV0dXJuIG1hdGNoICYmIC9eKGRldGFpbHxtZXNzYWdlfG1lc3NhZ2VzfGZpbGVzfGhpc3Rvcnl8aG91cnMpJC8udGVzdChtYXRjaFsxXSkgPyBtYXRjaFsxXSA6ICdkZXRhaWwnXG59XG5cbi8vIENvbXBvbmVudCBmb3IgdGFzayBsaW5rcyB0aGF0IHVzZXMgdGhlIHVzZVRhc2tQYW5lbCBob29rXG5jb25zdCBUYXNrTGluazogRkM8eyBocmVmOiBzdHJpbmc7IHRhc2tJZDogc3RyaW5nOyBjaGlsZHJlbjogUmVhY3ROb2RlIH0+ID0gKHsgaHJlZiwgdGFza0lkLCBjaGlsZHJlbiB9KSA9PiB7XG4gIGNvbnN0IHRhYlNlZ21lbnQgPSBnZXRUYWJTZWdtZW50RnJvbUhyZWYoaHJlZilcbiAgY29uc3QgeyBidWlsZE9wZW5UYXNrIH0gPSB1c2VUYXNrUGFuZWwodGFza0lkLCB0YWJTZWdtZW50KVxuICBjb25zdCBvcGVuVGFzayA9IGJ1aWxkT3BlblRhc2soKVxuXG4gIGNvbnN0IGhhbmRsZUNsaWNrID0gKGU6IFJlYWN0Lk1vdXNlRXZlbnQ8SFRNTEFuY2hvckVsZW1lbnQ+KSA9PiB7XG4gICAgLy8gU2kgZXMgQ21kL0N0cmwgKyBjbGljaywgZGVqYXIgcXVlIHNlIGFicmEgZW4gbnVldmEgcGVzdGHDsWEgKGNvbXBvcnRhbWllbnRvIHBvciBkZWZlY3RvKVxuICAgIGlmIChlLm1ldGFLZXkgfHwgZS5jdHJsS2V5KSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBlLnByZXZlbnREZWZhdWx0KClcbiAgICBvcGVuVGFzaygpXG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxTQ1Rhc2tMaW5rIGhyZWY9e2hyZWZ9IG9uQ2xpY2s9e2hhbmRsZUNsaWNrfT5cbiAgICAgIHtjaGlsZHJlbn1cbiAgICA8L1NDVGFza0xpbms+XG4gIClcbn1cblxuLy8gQ3VzdG9tIGxpbmsgY29tcG9uZW50IGZvciBTdHJlYW1kb3duOiB0YXNrIFVSTHMgb3BlbiB0aGUgdGFzayBwYW5lbCwgb3RoZXIgbGlua3MgcmVuZGVyIG5vcm1hbGx5XG50eXBlIEN1c3RvbUxpbmtQcm9wcyA9IFJlYWN0LkFuY2hvckhUTUxBdHRyaWJ1dGVzPEhUTUxBbmNob3JFbGVtZW50PiAmIHsgbm9kZT86IHVua25vd24gfVxuY29uc3QgQ3VzdG9tTGluazogRkM8Q3VzdG9tTGlua1Byb3BzPiA9ICh7IGhyZWYsIGNoaWxkcmVuLCAuLi5yZXN0IH0pID0+IHtcbiAgaWYgKCFocmVmIHx8IHR5cGVvZiBocmVmICE9PSAnc3RyaW5nJykge1xuICAgIHJldHVybiAoXG4gICAgICA8YSBocmVmPXtocmVmfSB7Li4ucmVzdH0+XG4gICAgICAgIHtjaGlsZHJlbn1cbiAgICAgIDwvYT5cbiAgICApXG4gIH1cbiAgY29uc3QgdGFza01hdGNoID0gaHJlZi5tYXRjaChuZXcgUmVnRXhwKFRBU0tfVVJMX1JFR0VYX1BBVFRFUk4pKVxuICBpZiAodGFza01hdGNoKSB7XG4gICAgY29uc3QgdGFza0lkID0gdGFza01hdGNoWzFdXG4gICAgcmV0dXJuIChcbiAgICAgIDxUYXNrTGluayBocmVmPXtocmVmfSB0YXNrSWQ9e3Rhc2tJZH0+XG4gICAgICAgIHtjaGlsZHJlbn1cbiAgICAgIDwvVGFza0xpbms+XG4gICAgKVxuICB9XG4gIHJldHVybiAoXG4gICAgPGEgaHJlZj17aHJlZn0gey4uLnJlc3R9PlxuICAgICAge2NoaWxkcmVufVxuICAgIDwvYT5cbiAgKVxufVxuXG5jb25zdCBNZXNzYWdlSXRlbSA9IG1lbW8oKHByb3BzOiBNZXNzYWdlSXRlbVByb3BzKSA9PiB7XG4gIGNvbnN0IHtcbiAgICBpZCxcbiAgICB1c2VyLFxuICAgIG1lc3NhZ2UsXG4gICAgaXNFcnJvcixcbiAgICBhdXRoVXNlcixcbiAgICBvcHRpb25zLFxuICAgIGlzQ2hhbmdlUHJvamVjdCxcbiAgICBoYW5kbGVTZWxlY3RPcHRpb24sXG4gICAgaGFuZGxlRmVlZGJhY2ssXG4gICAgaGFuZGxlQXBwcm92YWxEZWNpc2lvbixcbiAgICBkaXNhYmxlRmVlZGJhY2ssXG4gICAgcm9sZSxcbiAgICBzb3VyY2VzLFxuICAgIGF0dGFjaG1lbnRzLFxuICAgIGFwcHJvdmFsLFxuICAgIGFwcHJvdmFsU3RhdHVzLFxuICB9ID0gcHJvcHNcblxuICBjb25zdCBleHRyYWN0VGFza3NGcm9tTWVzc2FnZSA9IChtZXNzYWdlOiBzdHJpbmcpOiBUYXNrSW5mb1tdID0+IHtcbiAgICBpZiAoIW1lc3NhZ2UpIHJldHVybiBbXVxuXG4gICAgLy8gTWF0Y2ggVVJMcyBsaWtlOiAuLi4vdGFza3MvMTIzNDU2LyhkZXRhaWx8bWVzc2FnZXxtZXNzYWdlc3xmaWxlc3xoaXN0b3J5fGhvdXJzKVxuICAgIGNvbnN0IHRhc2tVcmxSZWdleCA9IG5ldyBSZWdFeHAoVEFTS19VUkxfUkVHRVhfUEFUVEVSTiwgJ2cnKVxuICAgIGNvbnN0IHRhc2tzOiBUYXNrSW5mb1tdID0gW11cbiAgICBjb25zdCBzZWVuSWRzID0gbmV3IFNldDxzdHJpbmc+KClcblxuICAgIGxldCBtYXRjaDogUmVnRXhwRXhlY0FycmF5IHwgbnVsbCA9IG51bGxcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uZC1hc3NpZ25cbiAgICB3aGlsZSAoKG1hdGNoID0gdGFza1VybFJlZ2V4LmV4ZWMobWVzc2FnZSkpICE9PSBudWxsKSB7XG4gICAgICBjb25zdCB0YXNrSWQgPSBtYXRjaFsxXVxuICAgICAgY29uc3QgdXJsID0gbWF0Y2hbMF1cblxuICAgICAgaWYgKCFzZWVuSWRzLmhhcyh0YXNrSWQpKSB7XG4gICAgICAgIHNlZW5JZHMuYWRkKHRhc2tJZClcblxuICAgICAgICAvLyBUcnkgdG8gZXh0cmFjdCB0aGUgdGFzayB0aXRsZSBmcm9tIG1hcmtkb3duIGxpbmsgW3RpdGxlXSh1cmwpXG4gICAgICAgIGNvbnN0IG1hcmtkb3duTGlua1JlZ2V4ID0gbmV3IFJlZ0V4cChgXFxcXFsoW15cXFxcXV0rKVxcXFxdXFxcXCgke3VybC5yZXBsYWNlKC9bLiorP14ke30oKXxbXFxdXFxcXF0vZywgJ1xcXFwkJicpfVxcXFwpYClcbiAgICAgICAgY29uc3QgbGlua01hdGNoID0gbWVzc2FnZS5tYXRjaChtYXJrZG93bkxpbmtSZWdleClcbiAgICAgICAgY29uc3QgdGl0bGUgPSBsaW5rTWF0Y2ggPyBsaW5rTWF0Y2hbMV0gOiBgVGFyZWEgIyR7dGFza0lkfWBcblxuICAgICAgICB0YXNrcy5wdXNoKHtcbiAgICAgICAgICBpZDogdGFza0lkLFxuICAgICAgICAgIHRpdGxlLFxuICAgICAgICAgIHVybCxcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdGFza3NcbiAgfVxuXG4gIGNvbnN0IFtwcmV2aWV3QXR0YWNobWVudCwgc2V0UHJldmlld0F0dGFjaG1lbnRdID0gdXNlU3RhdGU8QXR0YWNobWVudEZpbGUgfCBudWxsPihudWxsKVxuICBjb25zdCBpc0N1cnJlbnRVc2VyID0gcm9sZSA9PT0gQ2hhdEhpc3RvcnlSb2xlLlVTRVIgfHwgdXNlci5pZCA9PT0gYXV0aFVzZXIuaWQudG9TdHJpbmcoKVxuICBjb25zdCBpc0Fzc2lzdGFudCA9IHJvbGUgPT09IENoYXRIaXN0b3J5Um9sZS5BU1NJU1RBTlQgfHwgdXNlci5pZCA9PT0gJ2Fzc2lzdGFudCdcblxuICBjb25zdCBoYW5kbGVBdHRhY2htZW50Q2xpY2sgPSAoYXR0YWNobWVudDogQXR0YWNobWVudEZpbGUpID0+IHtcbiAgICAvLyBQZXJtaXRpciBwcmV2aXN1YWxpemFjacOzbiBzaSB0aWVuZSBhcmNoaXZvIGxvY2FsIG8gVVJMcyBkZWwgYmFja2VuZFxuICAgIGlmIChcbiAgICAgIGF0dGFjaG1lbnQuZmlsZSBpbnN0YW5jZW9mIEZpbGUgfHxcbiAgICAgIGF0dGFjaG1lbnQub3JpZ2luYWxGaWxlIGluc3RhbmNlb2YgRmlsZSB8fFxuICAgICAgYXR0YWNobWVudC51cmxfdGh1bWJuYWlsIHx8XG4gICAgICBhdHRhY2htZW50LnVybF9vcmlnaW5hbCB8fFxuICAgICAgYXR0YWNobWVudC51cmxfZmlsZVxuICAgICkge1xuICAgICAgc2V0UHJldmlld0F0dGFjaG1lbnQoYXR0YWNobWVudClcbiAgICB9XG4gIH1cblxuICBjb25zdCBoYW5kbGVDbG9zZVByZXZpZXcgPSAoKSA9PiB7XG4gICAgc2V0UHJldmlld0F0dGFjaG1lbnQobnVsbClcbiAgfVxuXG4gIGlmIChpc0NoYW5nZVByb2plY3QgJiYgb3B0aW9ucykge1xuICAgIHJldHVybiAoXG4gICAgICA8TWVzc2FnZVdyYXBwZXIga2V5PXtpZH0gaXNDdXJyZW50VXNlcj17aXNDdXJyZW50VXNlcn0gZGF0YS1tZXNzYWdlLWlkPXtpZH0gaGFzRmVlZGJhY2s9e2ZhbHNlfT5cbiAgICAgICAgPFNDTWVzc2FnZUl0ZW1XcmFwcGVyICRpc0Fzc2lzdGFudD17aXNBc3Npc3RhbnR9PlxuICAgICAgICAgIHtpc0Fzc2lzdGFudCAmJiA8QXNzaXN0YW50TWVzc2FnZUhlYWRlciAvPn1cbiAgICAgICAgICA8TWVzc2FnZUNvbnRlbnRXcmFwcGVyXG4gICAgICAgICAgICBpc0NoYW5nZVByb2plY3Q9e2lzQ2hhbmdlUHJvamVjdH1cbiAgICAgICAgICAgIG1lc3NhZ2U9e21lc3NhZ2V9XG4gICAgICAgICAgICBpc0N1cnJlbnRVc2VyPXtpc0N1cnJlbnRVc2VyfVxuICAgICAgICAgICAgaXNFcnJvcj17aXNFcnJvcn1cbiAgICAgICAgICAgIG1lc3NhZ2VFeHRyYUNvbnRlbnQ9ezxNZXNzYWdlT3B0aW9ucyBvcHRpb25zPXtvcHRpb25zIGFzIGFueX0gaGFuZGxlU2VsZWN0T3B0aW9uPXtoYW5kbGVTZWxlY3RPcHRpb259IC8+fVxuICAgICAgICAgIC8+XG4gICAgICAgIDwvU0NNZXNzYWdlSXRlbVdyYXBwZXI+XG4gICAgICA8L01lc3NhZ2VXcmFwcGVyPlxuICAgIClcbiAgfVxuXG4gIGNvbnN0IGhhbmRsZUZlZWRiYWNrQ2xpY2sgPSAoZmVlZGJhY2s6IEZlZWRiYWNrKSA9PiB7XG4gICAgY29uc3Qgc2Vzc2lvbklkID0gaWRcbiAgICAgIC5zcGxpdCgnLScpXG4gICAgICAuZmlsdGVyKHF1ZXN0aW9uSWQgPT4gcXVlc3Rpb25JZCAhPT0gJ2Fuc3dlcicpXG4gICAgICAuam9pbignLScpXG4gICAgaGFuZGxlRmVlZGJhY2s/LihmZWVkYmFjaywgc2Vzc2lvbklkKVxuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8U0NNZXNzYWdlSXRlbVdyYXBwZXIgJGlzQXNzaXN0YW50PXtpc0Fzc2lzdGFudH0+XG4gICAgICB7aXNBc3Npc3RhbnQgJiYgPEFzc2lzdGFudE1lc3NhZ2VIZWFkZXIgLz59XG4gICAgICA8U0NNZXNzYWdlSXRlbUlubmVyPlxuICAgICAgICB7ISEoYXR0YWNobWVudHMgfHwgc291cmNlcyk/Lmxlbmd0aCAmJiAhaXNBc3Npc3RhbnQgJiYgKFxuICAgICAgICAgIDxTQ0F0dGFjaG1lbnRzUm93PlxuICAgICAgICAgICAgeyhhdHRhY2htZW50cyB8fCBzb3VyY2VzKT8ubWFwKChhdHRhY2htZW50LCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgICAvLyBEZXRlY3RhciBzaSBlcyB1biBhcmNoaXZvIGRlIGF1ZGlvXG4gICAgICAgICAgICAgIGNvbnN0IGF0dGFjaG1lbnRUeXBlID0gYXR0YWNobWVudD8udHlwZT8udG9Mb3dlckNhc2UoKSB8fCAnJ1xuICAgICAgICAgICAgICBjb25zdCBhdHRhY2htZW50TmFtZSA9IGF0dGFjaG1lbnQ/Lm5hbWU/LnRvTG93ZXJDYXNlKCkgfHwgJydcbiAgICAgICAgICAgICAgY29uc3QgaXNBdWRpb0ZpbGUgPVxuICAgICAgICAgICAgICAgIGF0dGFjaG1lbnRUeXBlLnN0YXJ0c1dpdGgoJ2F1ZGlvLycpIHx8XG4gICAgICAgICAgICAgICAgWydmbGFjJywgJ200YScsICdtcDMnLCAnbXA0JywgJ29nYScsICdvZ2cnLCAnd2F2JywgJ3dlYm0nXS5pbmNsdWRlcyhhdHRhY2htZW50VHlwZSkgfHxcbiAgICAgICAgICAgICAgICBbJy5mbGFjJywgJy5tNGEnLCAnLm1wMycsICcubXA0JywgJy5vZ2EnLCAnLm9nZycsICcud2F2JywgJy53ZWJtJ10uc29tZShleHQgPT5cbiAgICAgICAgICAgICAgICAgIGF0dGFjaG1lbnROYW1lLmVuZHNXaXRoKGV4dClcbiAgICAgICAgICAgICAgICApXG5cbiAgICAgICAgICAgICAgaWYgKGlzQXVkaW9GaWxlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIDxBdHRhY2htZW50Q2FyZEF1ZGlvIGtleT17YCR7YXR0YWNobWVudC5pZH0tJHthdHRhY2htZW50Lm5hbWV9YH0gYXR0YWNobWVudD17YXR0YWNobWVudH0gLz5cbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgPEF0dGFjaG1lbnRDYXJkXG4gICAgICAgICAgICAgICAgICBrZXk9e2Ake2F0dGFjaG1lbnQuaWR9LSR7YXR0YWNobWVudC5uYW1lfWB9XG4gICAgICAgICAgICAgICAgICBhdHRhY2htZW50PXthdHRhY2htZW50fVxuICAgICAgICAgICAgICAgICAgcG9zaXRpb25JbmRleD17aW5kZXh9XG4gICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBoYW5kbGVBdHRhY2htZW50Q2xpY2soYXR0YWNobWVudCl9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfSl9XG4gICAgICAgICAgPC9TQ0F0dGFjaG1lbnRzUm93PlxuICAgICAgICApfVxuICAgICAgICB7YXBwcm92YWwgJiYgYXBwcm92YWwucGVuZGluZ19hY3Rpb25zICYmIChcbiAgICAgICAgICA8U0NBcHByb3ZhbEFjdGlvbnNDb2x1bW4+XG4gICAgICAgICAgICB7YXBwcm92YWwucGVuZGluZ19hY3Rpb25zLm1hcChhY3Rpb24gPT4gKFxuICAgICAgICAgICAgICA8QXBwcm92YWxCb3hcbiAgICAgICAgICAgICAgICBrZXk9e2Ake2FjdGlvbi50aHJlYWRfaWR9LSR7YWN0aW9uLnRvb2xfY2FsbF9pZH1gfVxuICAgICAgICAgICAgICAgIGFjdGlvbj17YWN0aW9ufVxuICAgICAgICAgICAgICAgIHN0YXR1cz17YXBwcm92YWxTdGF0dXN9XG4gICAgICAgICAgICAgICAgb25BcHByb3ZlPXt0aHJlYWRJZCA9PiBoYW5kbGVBcHByb3ZhbERlY2lzaW9uKHRocmVhZElkLCAnYXBwcm92ZScpfVxuICAgICAgICAgICAgICAgIG9uUmVqZWN0PXt0aHJlYWRJZCA9PiBoYW5kbGVBcHByb3ZhbERlY2lzaW9uKHRocmVhZElkLCAncmVqZWN0Jyl9XG4gICAgICAgICAgICAgICAgaXNQcm9qZWN0RGVsZXRlZD17cHJvcHMucHJvamVjdE1ldGFkYXRhPy5pc19kZWxldGVkID09PSB0cnVlfVxuICAgICAgICAgICAgICAgIGlzRXhwYW5kZWQ9e3Byb3BzLmV4cGFuZGVkfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgKSl9XG4gICAgICAgICAgPC9TQ0FwcHJvdmFsQWN0aW9uc0NvbHVtbj5cbiAgICAgICAgKX1cbiAgICAgICAgeyEhbWVzc2FnZSAmJlxuICAgICAgICAgIC8vIFNpIGhheSBhcHByb3ZhbCAoZGlzdGludG8gZGUgbnVsbCksIG5vIHJlbmRlcml6YXIgZWwgYW5zd2VyIGVuIGVzdGUgbWVuc2FqZVxuICAgICAgICAgIC8vIEVsIG1lbnNhamUgZGUgcmVjaGF6byBzZSByZW5kZXJpemEgY29tbyBtZW5zYWplIHNlcGFyYWRvXG4gICAgICAgICAgIWFwcHJvdmFsICYmIChcbiAgICAgICAgICAgIDxTQ0NBSU1lc3NhZ2VXcmFwcGVyXG4gICAgICAgICAgICAgIGlzQ3VycmVudFVzZXI9e2lzQ3VycmVudFVzZXJ9XG4gICAgICAgICAgICAgIGlzRnJvbnRlbmRDYW5jZWxsZWQ9e3Byb3BzLmlzRnJvbnRlbmRDYW5jZWxsZWR9XG4gICAgICAgICAgICAgIGNsYXNzTmFtZT17aXNBc3Npc3RhbnQgJiYgZXh0cmFjdFRhc2tzRnJvbU1lc3NhZ2UobWVzc2FnZSkubGVuZ3RoID4gMCA/ICdoYXMtdGFzay1saW5rcycgOiAnJ31cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgey8qIGxpbmtTYWZldHkgbW9kYWwgZGVzaGFiaWxpdGFkbyBwb3IgZWwgbW9tZW50bzogbGlua1NhZmV0eT17eyBlbmFibGVkOiB0cnVlIH19ICovfVxuICAgICAgICAgICAgICA8U3RyZWFtZG93blxuICAgICAgICAgICAgICAgIHBsdWdpbnM9e3sgY29kZSB9fVxuICAgICAgICAgICAgICAgIGNvbXBvbmVudHM9e3sgYTogQ3VzdG9tTGluayB9IGFzIFBhcmFtZXRlcnM8dHlwZW9mIFN0cmVhbWRvd24+WzBdWydjb21wb25lbnRzJ119XG4gICAgICAgICAgICAgICAgbGlua1NhZmV0eT17eyBlbmFibGVkOiBmYWxzZSB9fVxuICAgICAgICAgICAgICAgIGlzQW5pbWF0aW5nPXshIXByb3BzLmlzU3RyZWFtaW5nfVxuICAgICAgICAgICAgICAgIHNoaWtpVGhlbWU9e1snZ2l0aHViLWxpZ2h0JywgJ2dpdGh1Yi1saWdodCddfVxuICAgICAgICAgICAgICAgIGNvbnRyb2xzPXt7IHRhYmxlOiBmYWxzZSwgY29kZTogZmFsc2UgfX1cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIHttZXNzYWdlfVxuICAgICAgICAgICAgICA8L1N0cmVhbWRvd24+XG4gICAgICAgICAgICA8L1NDQ0FJTWVzc2FnZVdyYXBwZXI+XG4gICAgICAgICAgKX1cbiAgICAgICAge2lzQXNzaXN0YW50ICYmICFpc0Vycm9yICYmICFwcm9wcy5pc0Zyb250ZW5kQ2FuY2VsbGVkICYmICFhcHByb3ZhbCAmJiAoXG4gICAgICAgICAgPE1lc3NhZ2VGZWVkYmFja1xuICAgICAgICAgICAgY29udGVudD17bWVzc2FnZX1cbiAgICAgICAgICAgIHNvdXJjZXM9e3NvdXJjZXN9XG4gICAgICAgICAgICBoYW5kbGVGZWVkYmFjaz17aGFuZGxlRmVlZGJhY2tDbGlja31cbiAgICAgICAgICAgIGRpc2FibGVGZWVkYmFjaz17ZGlzYWJsZUZlZWRiYWNrfVxuICAgICAgICAgIC8+XG4gICAgICAgICl9XG4gICAgICA8L1NDTWVzc2FnZUl0ZW1Jbm5lcj5cbiAgICAgIDxBdHRhY2htZW50UHJldmlld01vZGFsXG4gICAgICAgIGlzT3Blbj17ISFwcmV2aWV3QXR0YWNobWVudH1cbiAgICAgICAgb25DbG9zZT17aGFuZGxlQ2xvc2VQcmV2aWV3fVxuICAgICAgICBhdHRhY2htZW50PXtwcmV2aWV3QXR0YWNobWVudH1cbiAgICAgIC8+XG4gICAgPC9TQ01lc3NhZ2VJdGVtV3JhcHBlcj5cbiAgKVxufSlcblxuY29uc3QgQ2hhdEFJTWVzc2FnZXNJbm5lciA9ICh7XG4gIHVzZXJJbml0aWFsTWVzc2FnZSxcbiAgaW5pdGlhbENoYXRJZCxcbiAgb25FcnJvcixcbiAgb25TZW5kTWVzc2FnZVJlYWR5LFxuICBvblNjcm9sbFRvQm90dG9tLFxuICBhdHRhY2htZW50cyxcbiAgYWdlbnRzLFxuICBleHBhbmRlZCxcbn06IENoYXRBSU1lc3NhZ2VzUHJvcHMpID0+IHtcbiAgY29uc3QgeyB0IH0gPSB1c2VUKClcbiAgY29uc3QgeyBpc1dlYlNlYXJjaEFjdGl2ZSwgaXNEZWVwU2VhcmNoQWN0aXZlIH0gPSB1c2VHbG9iYWxDb250ZXh0KClcbiAgY29uc3QgYXV0aFVzZXIgPSB1c2VVc2VyKClcbiAgY29uc3QgbWVzc2FnZXNSZWYgPSB1c2VSZWY8SFRNTERpdkVsZW1lbnQ+KG51bGwpXG4gIGNvbnN0IGNoYXRJbml0aWFsaXplZFJlZiA9IHVzZVJlZihmYWxzZSlcbiAgY29uc3QgaXNMb2FkaW5nTW9yZVJlZiA9IHVzZVJlZihmYWxzZSlcbiAgY29uc3QgdXNlclNjcm9sbGluZ1JlZiA9IHVzZVJlZihmYWxzZSlcbiAgY29uc3Qgc2Nyb2xsVGhyZXNob2xkUmVmID0gdXNlUmVmKDM5KVxuICBjb25zdCBsYXN0U2Nyb2xsVG9wUmVmID0gdXNlUmVmKDApXG4gIGNvbnN0IHNob3dTY3JvbGxUb0JvdHRvbVJlZiA9IHVzZVJlZihmYWxzZSlcbiAgY29uc3Qgc2Nyb2xsUmFmUmVmID0gdXNlUmVmPG51bWJlciB8IG51bGw+KG51bGwpXG4gIGNvbnN0IFtzaG93U2Nyb2xsVG9Cb3R0b20sIHNldFNob3dTY3JvbGxUb0JvdHRvbV0gPSB1c2VTdGF0ZShmYWxzZSlcblxuICBjb25zdCB7XG4gICAgbWVzc2FnZXMsXG4gICAgbG9hZGluZ01lc3NhZ2VzLFxuICAgIGlzTG9hZGluZ01vcmVNZXNzYWdlcyxcbiAgICB3YWl0aW5nUmVzcG9uc2UsXG4gICAgaXNXcml0aW5nLFxuICAgIGxvYWRpbmdNZXNzYWdlLFxuICAgIGFjdGl2ZUxvYWRpbmdzLFxuICAgIHNlbmRNZXNzYWdlLFxuICAgIGNoYW5nZVByb2plY3QsXG4gICAgaGFuZGxlRmVlZGJhY2ssXG4gICAgaGFuZGxlQXBwcm92YWxEZWNpc2lvbixcbiAgICBpbml0aWFsaXplQ2hhdCxcbiAgICBoYW5kbGVTY3JvbGwsXG4gICAgc3RvcEdlbmVyYXRpb24sXG4gIH0gPSB1c2VDaGF0TWFuYWdlcih7XG4gICAgY2hhdElkOiBpbml0aWFsQ2hhdElkIHx8IHVuZGVmaW5lZCxcbiAgICB1c2VySW5pdGlhbE1lc3NhZ2UsXG4gICAgb25FcnJvcixcbiAgICBhdHRhY2htZW50cyxcbiAgICBhZ2VudHMsXG4gIH0pXG5cbiAgY29uc3QgaGFuZGxlU2VsZWN0T3B0aW9uID0gKG9wdGlvbjogUHJvamVjdCkgPT4ge1xuICAgIGNoYW5nZVByb2plY3Qob3B0aW9uKVxuICB9XG5cbiAgY29uc3QgaGFuZGxlQ2xpY2tTY3JvbGxUb0JvdHRvbSA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBpZiAobWVzc2FnZXNSZWYuY3VycmVudCkge1xuICAgICAgbWVzc2FnZXNSZWYuY3VycmVudC5zY3JvbGxUbyh7XG4gICAgICAgIHRvcDogbWVzc2FnZXNSZWYuY3VycmVudC5zY3JvbGxIZWlnaHQsXG4gICAgICAgIGJlaGF2aW9yOiAnc21vb3RoJyxcbiAgICAgIH0pXG4gICAgICAvLyBBY3R1YWxpemFyIGVzdGFkbyBkZXNwdcOpcyBkZSB1biBicmV2ZSBkZWxheSBwYXJhIHBlcm1pdGlyIHF1ZSBlbCBzY3JvbGwgc2UgY29tcGxldGVcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBpZiAobWVzc2FnZXNSZWYuY3VycmVudCkge1xuICAgICAgICAgIGNvbnN0IHsgc2Nyb2xsVG9wLCBzY3JvbGxIZWlnaHQsIGNsaWVudEhlaWdodCB9ID0gbWVzc2FnZXNSZWYuY3VycmVudFxuICAgICAgICAgIGNvbnN0IGRpc3RhbmNlRnJvbUJvdHRvbSA9IHNjcm9sbEhlaWdodCAtIHNjcm9sbFRvcCAtIGNsaWVudEhlaWdodFxuICAgICAgICAgIGNvbnN0IHNob3VsZFNob3cgPSBkaXN0YW5jZUZyb21Cb3R0b20gPiA1MFxuICAgICAgICAgIHNob3dTY3JvbGxUb0JvdHRvbVJlZi5jdXJyZW50ID0gc2hvdWxkU2hvd1xuICAgICAgICAgIHNldFNob3dTY3JvbGxUb0JvdHRvbShzaG91bGRTaG93KVxuICAgICAgICB9XG4gICAgICB9LCA1MDApXG4gICAgfVxuICB9LCBbXSlcblxuICBjb25zdCBoYW5kbGVTY3JvbGxUb0JvdHRvbSA9IHVzZUNhbGxiYWNrKFxuICAgIChlOiBSZWFjdC5VSUV2ZW50PEhUTUxEaXZFbGVtZW50PikgPT4ge1xuICAgICAgY29uc3QgY29udGFpbmVyID0gZS5jdXJyZW50VGFyZ2V0XG5cbiAgICAgIGlmIChzY3JvbGxSYWZSZWYuY3VycmVudCAhPT0gbnVsbCkge1xuICAgICAgICBjYW5jZWxBbmltYXRpb25GcmFtZShzY3JvbGxSYWZSZWYuY3VycmVudClcbiAgICAgIH1cblxuICAgICAgc2Nyb2xsUmFmUmVmLmN1cnJlbnQgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuICAgICAgICBzY3JvbGxSYWZSZWYuY3VycmVudCA9IG51bGxcbiAgICAgICAgY29uc3QgeyBzY3JvbGxUb3AsIHNjcm9sbEhlaWdodCwgY2xpZW50SGVpZ2h0IH0gPSBjb250YWluZXJcblxuICAgICAgICBjb25zdCBpc1Njcm9sbGluZ1VwID0gc2Nyb2xsVG9wIDwgbGFzdFNjcm9sbFRvcFJlZi5jdXJyZW50XG5cbiAgICAgICAgaWYgKGlzU2Nyb2xsaW5nVXApIHtcbiAgICAgICAgICBzY3JvbGxUaHJlc2hvbGRSZWYuY3VycmVudCA9IDE1XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBpc05lYXJCb3R0b20gPSBzY3JvbGxIZWlnaHQgLSBzY3JvbGxUb3AgLSBjbGllbnRIZWlnaHQgPCBzY3JvbGxUaHJlc2hvbGRSZWYuY3VycmVudFxuXG4gICAgICAgIGlmIChpc05lYXJCb3R0b20pIHtcbiAgICAgICAgICBzY3JvbGxUaHJlc2hvbGRSZWYuY3VycmVudCA9IDM5XG4gICAgICAgIH1cblxuICAgICAgICB1c2VyU2Nyb2xsaW5nUmVmLmN1cnJlbnQgPSAhaXNOZWFyQm90dG9tXG4gICAgICAgIGxhc3RTY3JvbGxUb3BSZWYuY3VycmVudCA9IHNjcm9sbFRvcFxuXG4gICAgICAgIGNvbnN0IGRpc3RhbmNlRnJvbUJvdHRvbSA9IHNjcm9sbEhlaWdodCAtIHNjcm9sbFRvcCAtIGNsaWVudEhlaWdodFxuICAgICAgICBjb25zdCBzaG91bGRTaG93ID0gZGlzdGFuY2VGcm9tQm90dG9tID4gNTBcbiAgICAgICAgY29uc3QgZGlkU2V0U3RhdGUgPSBzaG93U2Nyb2xsVG9Cb3R0b21SZWYuY3VycmVudCAhPT0gc2hvdWxkU2hvd1xuICAgICAgICBpZiAoZGlkU2V0U3RhdGUpIHtcbiAgICAgICAgICBzaG93U2Nyb2xsVG9Cb3R0b21SZWYuY3VycmVudCA9IHNob3VsZFNob3dcbiAgICAgICAgICBzZXRTaG93U2Nyb2xsVG9Cb3R0b20oc2hvdWxkU2hvdylcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpc05lYXJCb3R0b20gJiYgb25TY3JvbGxUb0JvdHRvbSkge1xuICAgICAgICAgIG9uU2Nyb2xsVG9Cb3R0b20oKVxuICAgICAgICB9XG5cbiAgICAgICAgaGFuZGxlU2Nyb2xsKGNvbnRhaW5lcilcbiAgICAgIH0pXG4gICAgfSxcbiAgICBbb25TY3JvbGxUb0JvdHRvbSwgaGFuZGxlU2Nyb2xsXVxuICApXG5cbiAgLy8gcmVmcyB0byBzdGFiaWxpemUgZnVuY3Rpb25zIGFuZCBhdm9pZCB1bm5lY2Vzc2FyeSByZS1yZW5kZXJzXG4gIGNvbnN0IHNlbmRNZXNzYWdlUmVmID0gdXNlUmVmKHNlbmRNZXNzYWdlKVxuICBjb25zdCBzdG9wR2VuZXJhdGlvblJlZiA9IHVzZVJlZihzdG9wR2VuZXJhdGlvbilcbiAgY29uc3Qgb25TZW5kTWVzc2FnZVJlYWR5UmVmID0gdXNlUmVmKG9uU2VuZE1lc3NhZ2VSZWFkeSlcblxuICAvLyB1cGRhdGUgcmVmcyB3aGVuIGZ1bmN0aW9ucyBjaGFuZ2VcbiAgc2VuZE1lc3NhZ2VSZWYuY3VycmVudCA9IHNlbmRNZXNzYWdlXG4gIHN0b3BHZW5lcmF0aW9uUmVmLmN1cnJlbnQgPSBzdG9wR2VuZXJhdGlvblxuICBvblNlbmRNZXNzYWdlUmVhZHlSZWYuY3VycmVudCA9IG9uU2VuZE1lc3NhZ2VSZWFkeVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKG9uU2VuZE1lc3NhZ2VSZWFkeVJlZi5jdXJyZW50KSB7XG4gICAgICBvblNlbmRNZXNzYWdlUmVhZHlSZWYuY3VycmVudChzZW5kTWVzc2FnZVJlZi5jdXJyZW50LCBzdG9wR2VuZXJhdGlvblJlZi5jdXJyZW50LCB3YWl0aW5nUmVzcG9uc2UsIGlzV3JpdGluZylcbiAgICB9XG4gIH0sIFt3YWl0aW5nUmVzcG9uc2UsIGlzV3JpdGluZ10pXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpc0xvYWRpbmdNb3JlUmVmLmN1cnJlbnQgPSBpc0xvYWRpbmdNb3JlTWVzc2FnZXNcbiAgfSwgW2lzTG9hZGluZ01vcmVNZXNzYWdlc10pXG5cbiAgLy8gQ3VhbmRvIGVsIGFnZW50ZSBlbXBpZXphIGEgcmVzcG9uZGVyLCByZXNldGVhciBlbCBmbGFnIHkgZWwgdW1icmFsIHBhcmEgYWN0aXZhciBlbCBhdXRvLXNjcm9sbFxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICh3YWl0aW5nUmVzcG9uc2UpIHtcbiAgICAgIHVzZXJTY3JvbGxpbmdSZWYuY3VycmVudCA9IGZhbHNlXG4gICAgICBzY3JvbGxUaHJlc2hvbGRSZWYuY3VycmVudCA9IDM5XG4gICAgfVxuICB9LCBbd2FpdGluZ1Jlc3BvbnNlXSlcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghY2hhdEluaXRpYWxpemVkUmVmLmN1cnJlbnQpIHtcbiAgICAgIGNoYXRJbml0aWFsaXplZFJlZi5jdXJyZW50ID0gdHJ1ZVxuICAgICAgaW5pdGlhbGl6ZUNoYXQoKVxuICAgIH1cbiAgfSwgW10pXG5cbiAgLy8gU2Nyb2xsIGN1YW5kbyBsbGVnYSB1biBtZW5zYWplIGRlIGFwcm9iYWNpw7NuIChBcHByb3ZhbEJveCkuIFNpbiBSZXNpemVPYnNlcnZlciBlbiBlbFxuICAvLyBjb250ZW5lZG9yOiBvYnNlcnZhcmxvIGRpc3BhcmFiYSBjYWxsYmFja3MgYWwgY2FtYmlhciBlbCBsYXlvdXQvc2Nyb2xsYmFyIHkgY2FkYSB1bm9cbiAgLy8gbGxhbWFiYSBzY3JvbGxUb0JvdHRvbSgpLCBwcm92b2NhbmRvIHRpcm9uZXMgYWwgc2Nyb2xsZWFyLlxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghbWVzc2FnZXNSZWYuY3VycmVudCB8fCBsb2FkaW5nTWVzc2FnZXMgfHwgaXNMb2FkaW5nTW9yZU1lc3NhZ2VzKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkXG4gICAgfVxuXG4gICAgY29uc3QgbGFzdE1lc3NhZ2UgPSBtZXNzYWdlc1ttZXNzYWdlcy5sZW5ndGggLSAxXVxuICAgIGNvbnN0IGhhc0FwcHJvdmFsID0gbGFzdE1lc3NhZ2UgJiYgKGxhc3RNZXNzYWdlLmlkLnN0YXJ0c1dpdGgoJ2FwcHJvdmFsLScpIHx8ICEhbGFzdE1lc3NhZ2UuYXBwcm92YWwpXG5cbiAgICBpZiAoIWhhc0FwcHJvdmFsKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkXG4gICAgfVxuXG4gICAgY29uc3QgY29udGFpbmVyID0gbWVzc2FnZXNSZWYuY3VycmVudFxuICAgIGNvbnN0IGlzQXRCb3R0b20gPSBjb250YWluZXIuc2Nyb2xsSGVpZ2h0IC0gY29udGFpbmVyLnNjcm9sbFRvcCA8PSBjb250YWluZXIuY2xpZW50SGVpZ2h0ICsgMTAwXG5cbiAgICBpZiAoIShpc0F0Qm90dG9tIHx8ICF1c2VyU2Nyb2xsaW5nUmVmLmN1cnJlbnQpKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkXG4gICAgfVxuXG4gICAgY29uc3Qgc2Nyb2xsVG9Cb3R0b20gPSAoKSA9PiB7XG4gICAgICBpZiAobWVzc2FnZXNSZWYuY3VycmVudCkge1xuICAgICAgICBtZXNzYWdlc1JlZi5jdXJyZW50LnNjcm9sbFRvcCA9IG1lc3NhZ2VzUmVmLmN1cnJlbnQuc2Nyb2xsSGVpZ2h0XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gU2VjdWVuY2lhIGluaWNpYWwgZGUgc2Nyb2xsIHBhcmEgY3VhbmRvIGVsIEFwcHJvdmFsQm94IGFjYWJhIGRlIHJlbmRlcml6YXJzZVxuICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICBzY3JvbGxUb0JvdHRvbSgpXG4gICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuICAgICAgICBzY3JvbGxUb0JvdHRvbSgpXG4gICAgICAgIHNldFRpbWVvdXQoc2Nyb2xsVG9Cb3R0b20sIDEwMClcbiAgICAgIH0pXG4gICAgfSlcblxuICAgIHJldHVybiB1bmRlZmluZWRcbiAgfSwgW21lc3NhZ2VzLCBsb2FkaW5nTWVzc2FnZXMsIGlzTG9hZGluZ01vcmVNZXNzYWdlc10pXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAvLyBTaSBlbCB1c3VhcmlvIGVzdMOhIHNjcm9sbGVhbmRvIG1hbnVhbG1lbnRlLCBubyBoYWNlciBhdXRvIHNjcm9sbFxuICAgIGlmICh1c2VyU2Nyb2xsaW5nUmVmLmN1cnJlbnQgJiYgd2FpdGluZ1Jlc3BvbnNlKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAod2FpdGluZ1Jlc3BvbnNlICYmIG1lc3NhZ2VzUmVmLmN1cnJlbnQpIHtcbiAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICAgIGlmIChtZXNzYWdlc1JlZi5jdXJyZW50KSB7XG4gICAgICAgICAgbWVzc2FnZXNSZWYuY3VycmVudC5zY3JvbGxUb3AgPSBtZXNzYWdlc1JlZi5jdXJyZW50LnNjcm9sbEhlaWdodFxuICAgICAgICAgIGNvbnN0IHsgc2Nyb2xsVG9wLCBzY3JvbGxIZWlnaHQsIGNsaWVudEhlaWdodCB9ID0gbWVzc2FnZXNSZWYuY3VycmVudFxuICAgICAgICAgIGNvbnN0IGRpc3RhbmNlRnJvbUJvdHRvbSA9IHNjcm9sbEhlaWdodCAtIHNjcm9sbFRvcCAtIGNsaWVudEhlaWdodFxuICAgICAgICAgIGNvbnN0IHNob3VsZFNob3cgPSBkaXN0YW5jZUZyb21Cb3R0b20gPiA1MFxuICAgICAgICAgIHNob3dTY3JvbGxUb0JvdHRvbVJlZi5jdXJyZW50ID0gc2hvdWxkU2hvd1xuICAgICAgICAgIHNldFNob3dTY3JvbGxUb0JvdHRvbShzaG91bGRTaG93KVxuICAgICAgICB9XG4gICAgICB9KVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgaWYgKCFtZXNzYWdlc1JlZi5jdXJyZW50IHx8IGxvYWRpbmdNZXNzYWdlcyB8fCBpc0xvYWRpbmdNb3JlTWVzc2FnZXMgfHwgaXNMb2FkaW5nTW9yZVJlZi5jdXJyZW50KSByZXR1cm5cblxuICAgIGNvbnN0IGNvbnRhaW5lciA9IG1lc3NhZ2VzUmVmLmN1cnJlbnRcbiAgICBjb25zdCBsYXN0TWVzc2FnZSA9IG1lc3NhZ2VzW21lc3NhZ2VzLmxlbmd0aCAtIDFdXG5cbiAgICBjb25zdCBpc05ld0Fuc3dlck1lc3NhZ2UgPSBsYXN0TWVzc2FnZSAmJiBsYXN0TWVzc2FnZS5pZC5zdGFydHNXaXRoKCdhbnN3ZXItJylcbiAgICBjb25zdCBpc05ld1VzZXJNZXNzYWdlID0gbGFzdE1lc3NhZ2UgJiYgbGFzdE1lc3NhZ2UuaWQuc3RhcnRzV2l0aCgncXVlc3Rpb24tJylcbiAgICBjb25zdCBpc05ld0FwcHJvdmFsTWVzc2FnZSA9IGxhc3RNZXNzYWdlICYmIChsYXN0TWVzc2FnZS5pZC5zdGFydHNXaXRoKCdhcHByb3ZhbC0nKSB8fCAhIWxhc3RNZXNzYWdlLmFwcHJvdmFsKVxuICAgIGNvbnN0IGlzQXRCb3R0b20gPSBjb250YWluZXIuc2Nyb2xsSGVpZ2h0IC0gY29udGFpbmVyLnNjcm9sbFRvcCA8PSBjb250YWluZXIuY2xpZW50SGVpZ2h0ICsgMTAwXG4gICAgY29uc3QgaGFzTWVzc2FnZXMgPSAhIW1lc3NhZ2VzLmxlbmd0aFxuICAgIGNvbnN0IGlzTm90SW5pdGlhbE1lc3NhZ2UgPSAhbWVzc2FnZXMuc29tZShtc2cgPT4gbXNnLmlkID09PSAndXNlci1pbml0aWFsLW1lc3NhZ2UnKVxuXG4gICAgaWYgKChpc05ld0Fuc3dlck1lc3NhZ2UgfHwgaXNOZXdVc2VyTWVzc2FnZSB8fCBpc05ld0FwcHJvdmFsTWVzc2FnZSkgJiYgaXNBdEJvdHRvbSkge1xuICAgICAgLy8gUGFyYSBtZW5zYWplcyBkZSBhcHJvYmFjacOzbiwgdXNhciB1biBwZXF1ZcOxbyBkZWxheSBwYXJhIGFzZWd1cmFyIHF1ZSBlbCBBcHByb3ZhbEJveCBzZSBoYXlhIHJlbmRlcml6YWRvXG4gICAgICBjb25zdCBzY3JvbGxEZWxheSA9IGlzTmV3QXBwcm92YWxNZXNzYWdlID8gMTAwIDogMFxuICAgICAgY29uc3QgZG9TY3JvbGwgPSAoKSA9PiB7XG4gICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICAgICAgaWYgKG1lc3NhZ2VzUmVmLmN1cnJlbnQpIHtcbiAgICAgICAgICAgIG1lc3NhZ2VzUmVmLmN1cnJlbnQuc2Nyb2xsVG9wID0gbWVzc2FnZXNSZWYuY3VycmVudC5zY3JvbGxIZWlnaHRcbiAgICAgICAgICAgIGNvbnN0IHsgc2Nyb2xsVG9wLCBzY3JvbGxIZWlnaHQsIGNsaWVudEhlaWdodCB9ID0gbWVzc2FnZXNSZWYuY3VycmVudFxuICAgICAgICAgICAgY29uc3QgZGlzdGFuY2VGcm9tQm90dG9tID0gc2Nyb2xsSGVpZ2h0IC0gc2Nyb2xsVG9wIC0gY2xpZW50SGVpZ2h0XG4gICAgICAgICAgICBjb25zdCBzaG91bGRTaG93ID0gZGlzdGFuY2VGcm9tQm90dG9tID4gNTBcbiAgICAgICAgICAgIHNob3dTY3JvbGxUb0JvdHRvbVJlZi5jdXJyZW50ID0gc2hvdWxkU2hvd1xuICAgICAgICAgICAgc2V0U2hvd1Njcm9sbFRvQm90dG9tKHNob3VsZFNob3cpXG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgfVxuICAgICAgaWYgKHNjcm9sbERlbGF5ID4gMCkge1xuICAgICAgICBzZXRUaW1lb3V0KGRvU2Nyb2xsLCBzY3JvbGxEZWxheSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRvU2Nyb2xsKClcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKFxuICAgICAgaGFzTWVzc2FnZXMgJiZcbiAgICAgIGlzTm90SW5pdGlhbE1lc3NhZ2UgJiZcbiAgICAgICFpc05ld0Fuc3dlck1lc3NhZ2UgJiZcbiAgICAgICFpc05ld1VzZXJNZXNzYWdlICYmXG4gICAgICAhaXNOZXdBcHByb3ZhbE1lc3NhZ2VcbiAgICApIHtcbiAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICAgIGlmIChtZXNzYWdlc1JlZi5jdXJyZW50KSB7XG4gICAgICAgICAgbWVzc2FnZXNSZWYuY3VycmVudC5zY3JvbGxUb3AgPSBtZXNzYWdlc1JlZi5jdXJyZW50LnNjcm9sbEhlaWdodFxuICAgICAgICAgIGNvbnN0IHsgc2Nyb2xsVG9wLCBzY3JvbGxIZWlnaHQsIGNsaWVudEhlaWdodCB9ID0gbWVzc2FnZXNSZWYuY3VycmVudFxuICAgICAgICAgIGNvbnN0IGRpc3RhbmNlRnJvbUJvdHRvbSA9IHNjcm9sbEhlaWdodCAtIHNjcm9sbFRvcCAtIGNsaWVudEhlaWdodFxuICAgICAgICAgIGNvbnN0IHNob3VsZFNob3cgPSBkaXN0YW5jZUZyb21Cb3R0b20gPiA1MFxuICAgICAgICAgIHNob3dTY3JvbGxUb0JvdHRvbVJlZi5jdXJyZW50ID0gc2hvdWxkU2hvd1xuICAgICAgICAgIHNldFNob3dTY3JvbGxUb0JvdHRvbShzaG91bGRTaG93KVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH1cbiAgfSwgW21lc3NhZ2VzLCBsb2FkaW5nTWVzc2FnZXMsIGlzTG9hZGluZ01vcmVNZXNzYWdlcywgd2FpdGluZ1Jlc3BvbnNlXSlcblxuICAvLyBWZXJpZmljYXIgZWwgZXN0YWRvIGluaWNpYWwgZGVsIHNjcm9sbFxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChtZXNzYWdlc1JlZi5jdXJyZW50ICYmICFsb2FkaW5nTWVzc2FnZXMpIHtcbiAgICAgIGNvbnN0IGNvbnRhaW5lciA9IG1lc3NhZ2VzUmVmLmN1cnJlbnRcbiAgICAgIGNvbnN0IHsgc2Nyb2xsVG9wLCBzY3JvbGxIZWlnaHQsIGNsaWVudEhlaWdodCB9ID0gY29udGFpbmVyXG4gICAgICBjb25zdCBkaXN0YW5jZUZyb21Cb3R0b20gPSBzY3JvbGxIZWlnaHQgLSBzY3JvbGxUb3AgLSBjbGllbnRIZWlnaHRcbiAgICAgIGNvbnN0IHNob3VsZFNob3cgPSBkaXN0YW5jZUZyb21Cb3R0b20gPiA1MFxuICAgICAgc2hvd1Njcm9sbFRvQm90dG9tUmVmLmN1cnJlbnQgPSBzaG91bGRTaG93XG4gICAgICBzZXRTaG93U2Nyb2xsVG9Cb3R0b20oc2hvdWxkU2hvdylcbiAgICB9XG4gIH0sIFtsb2FkaW5nTWVzc2FnZXMsIG1lc3NhZ2VzLmxlbmd0aF0pXG5cbiAgLy8gT2J0ZW5lciBlbCDDumx0aW1vIG1lbnNhamUgZGVsIHVzdWFyaW8gcGFyYSB2ZXJpZmljYXIgc2kgdGllbmUgYXR0YWNobWVudHNcbiAgY29uc3QgbGFzdFVzZXJNZXNzYWdlID0gbWVzc2FnZXNcbiAgICAuZmlsdGVyKG1zZyA9PiBtc2cucm9sZSA9PT0gQ2hhdEhpc3RvcnlSb2xlLlVTRVIgfHwgbXNnLnVzZXIuaWQgPT09IGF1dGhVc2VyLmlkLnRvU3RyaW5nKCkpXG4gICAgLmF0KC0xKVxuXG4gIGNvbnN0IGhhc0F0dGFjaG1lbnRzID1cbiAgICAoQXJyYXkuaXNBcnJheShsYXN0VXNlck1lc3NhZ2U/LmF0dGFjaG1lbnRzKSAmJiBsYXN0VXNlck1lc3NhZ2UuYXR0YWNobWVudHMubGVuZ3RoKSB8fFxuICAgIChBcnJheS5pc0FycmF5KGxhc3RVc2VyTWVzc2FnZT8uc291cmNlcykgJiYgbGFzdFVzZXJNZXNzYWdlLnNvdXJjZXMubGVuZ3RoKVxuXG4gIGNvbnN0IGlzU2Nyb2xsT25QYXJlbnQgPSAhIWV4cGFuZGVkXG5cbiAgY29uc3QgbWVzc2FnZXNDb250ZW50ID0gKFxuICAgIDw+XG4gICAgICB7aXNMb2FkaW5nTW9yZU1lc3NhZ2VzICYmIDxMb2FkaW5nVGV4dCB0ZXh0PXt0KCdjaGF0LmxvYWRpbmdNb3JlJyl9IC8+fVxuICAgICAge21lc3NhZ2VzLm1hcCgobWVzc2FnZSwgaW5kZXgpID0+IHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICEobWVzc2FnZS5hdHRhY2htZW50cz8ubGVuZ3RoIHx8IG1lc3NhZ2Uuc291cmNlcz8ubGVuZ3RoKSAmJlxuICAgICAgICAgICFtZXNzYWdlLm1lc3NhZ2UgJiZcbiAgICAgICAgICAhbWVzc2FnZS5wcm9qZWN0Py5uYW1lICYmXG4gICAgICAgICAgIW1lc3NhZ2UuYXBwcm92YWxcbiAgICAgICAgKVxuICAgICAgICAgIHJldHVybiBudWxsXG4gICAgICAgIGNvbnN0IG1lc3NhZ2VGZWVkYmFjayA9XG4gICAgICAgICAgbWVzc2FnZT8ud2FzSGVscGZ1bCA9PT0gdW5kZWZpbmVkIHx8IG1lc3NhZ2Uud2FzSGVscGZ1bCA9PT0gbnVsbFxuICAgICAgICAgICAgPyBudWxsXG4gICAgICAgICAgICA6IG1lc3NhZ2Uud2FzSGVscGZ1bFxuICAgICAgICAgICAgICA/IEZlZWRiYWNrLlRIVU1CU19VUFxuICAgICAgICAgICAgICA6IEZlZWRiYWNrLlRIVU1CU19ET1dOXG5cbiAgICAgICAgY29uc3QgaXNBc3Npc3RhbnRNZXNzYWdlID0gbWVzc2FnZS5yb2xlID09PSBDaGF0SGlzdG9yeVJvbGUuQVNTSVNUQU5UIHx8IG1lc3NhZ2UudXNlci5pZCA9PT0gJ2Fzc2lzdGFudCdcbiAgICAgICAgY29uc3QgaXNMYXN0TWVzc2FnZSA9IGluZGV4ID09PSBtZXNzYWdlcy5sZW5ndGggLSAxXG4gICAgICAgIGNvbnN0IGlzU3RyZWFtaW5nID0gaXNBc3Npc3RhbnRNZXNzYWdlICYmIGlzTGFzdE1lc3NhZ2UgJiYgKHdhaXRpbmdSZXNwb25zZSB8fCBpc1dyaXRpbmcpXG5cbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICA8TWVzc2FnZUl0ZW1cbiAgICAgICAgICAgIHsuLi5tZXNzYWdlfVxuICAgICAgICAgICAga2V5PXttZXNzYWdlLmlkICE9IG51bGwgPyBgJHttZXNzYWdlLmlkfS0ke21lc3NhZ2UuZGF0ZX1gIDogYG1zZy0ke2luZGV4fWB9XG4gICAgICAgICAgICBhdXRoVXNlcj17YXV0aFVzZXJ9XG4gICAgICAgICAgICBoYW5kbGVTZWxlY3RPcHRpb249e2hhbmRsZVNlbGVjdE9wdGlvbn1cbiAgICAgICAgICAgIGhhbmRsZUZlZWRiYWNrPXtoYW5kbGVGZWVkYmFja31cbiAgICAgICAgICAgIGhhbmRsZUFwcHJvdmFsRGVjaXNpb249e2hhbmRsZUFwcHJvdmFsRGVjaXNpb259XG4gICAgICAgICAgICBkaXNhYmxlRmVlZGJhY2s9e21lc3NhZ2VGZWVkYmFja31cbiAgICAgICAgICAgIGlzU3RyZWFtaW5nPXtpc1N0cmVhbWluZ31cbiAgICAgICAgICAgIGV4cGFuZGVkPXtleHBhbmRlZH1cbiAgICAgICAgICAvPlxuICAgICAgICApXG4gICAgICB9KX1cbiAgICAgIHsod2FpdGluZ1Jlc3BvbnNlIHx8IGxvYWRpbmdNZXNzYWdlIHx8IE9iamVjdC5rZXlzKGFjdGl2ZUxvYWRpbmdzIHx8IHt9KS5sZW5ndGggPiAwKSAmJiAoXG4gICAgICAgIDxTQ0xvYWRpbmdNZXNzYWdlc0NvbHVtbj5cbiAgICAgICAgICB7KHdhaXRpbmdSZXNwb25zZSB8fCBsb2FkaW5nTWVzc2FnZSkgJiYgKFxuICAgICAgICAgICAgPExvYWRpbmdUZXh0XG4gICAgICAgICAgICAgIHRleHQ9e1xuICAgICAgICAgICAgICAgIGxvYWRpbmdNZXNzYWdlIHx8XG4gICAgICAgICAgICAgICAgKGlzV2ViU2VhcmNoQWN0aXZlXG4gICAgICAgICAgICAgICAgICA/ICdCdXNjYW5kbyBlbiBsYSB3ZWInXG4gICAgICAgICAgICAgICAgICA6IGlzRGVlcFNlYXJjaEFjdGl2ZVxuICAgICAgICAgICAgICAgICAgICA/IHQoJ2NoYXQuZ2VuZXJhdGluZ0RlZXBTZWFyY2gnKVxuICAgICAgICAgICAgICAgICAgICA6IGhhc0F0dGFjaG1lbnRzXG4gICAgICAgICAgICAgICAgICAgICAgPyB0KCdjaGF0LmdlbmVyYXRpbmdBdHRhY2htZW50JylcbiAgICAgICAgICAgICAgICAgICAgICA6IHQoJ2NoYXQuZ2VuZXJhdGluZycpKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICl9XG4gICAgICAgICAge09iamVjdC5lbnRyaWVzKGFjdGl2ZUxvYWRpbmdzIHx8IHt9KS5tYXAoKFt0aHJlYWRJZCwgbWVzc2FnZV0pID0+IChcbiAgICAgICAgICAgIDxMb2FkaW5nVGV4dCBrZXk9e2Bsb2FkaW5nLSR7dGhyZWFkSWR9YH0gdGV4dD17bWVzc2FnZX0gLz5cbiAgICAgICAgICApKX1cbiAgICAgICAgPC9TQ0xvYWRpbmdNZXNzYWdlc0NvbHVtbj5cbiAgICAgICl9XG4gICAgPC8+XG4gIClcblxuICByZXR1cm4gKFxuICAgIDxTQ01lc3NhZ2VzT3V0ZXIgJHNjcm9sbE9uUGFyZW50PXtpc1Njcm9sbE9uUGFyZW50fT5cbiAgICAgIHtpc1Njcm9sbE9uUGFyZW50ID8gKFxuICAgICAgICA8U0NNZXNzYWdlc1Njcm9sbCByZWY9e21lc3NhZ2VzUmVmfSBvblNjcm9sbD17aGFuZGxlU2Nyb2xsVG9Cb3R0b219PlxuICAgICAgICAgIDxTQ01lc3NhZ2VzSW5uZXIgJHNjcm9sbE9uUGFyZW50PXtpc1Njcm9sbE9uUGFyZW50fT57bWVzc2FnZXNDb250ZW50fTwvU0NNZXNzYWdlc0lubmVyPlxuICAgICAgICA8L1NDTWVzc2FnZXNTY3JvbGw+XG4gICAgICApIDogKFxuICAgICAgICA8U0NNZXNzYWdlc0lubmVyIHJlZj17bWVzc2FnZXNSZWZ9IG9uU2Nyb2xsPXtoYW5kbGVTY3JvbGxUb0JvdHRvbX0gJHNjcm9sbE9uUGFyZW50PXtmYWxzZX0+XG4gICAgICAgICAge21lc3NhZ2VzQ29udGVudH1cbiAgICAgICAgPC9TQ01lc3NhZ2VzSW5uZXI+XG4gICAgICApfVxuXG4gICAgICB7c2hvd1Njcm9sbFRvQm90dG9tICYmIChcbiAgICAgICAgPFNjcm9sbFRvQm90dG9tQnV0dG9uIHR5cGU9XCJidXR0b25cIiBvbkNsaWNrPXtoYW5kbGVDbGlja1Njcm9sbFRvQm90dG9tfT5cbiAgICAgICAgICA8QXJyb3dTbWFsbERvd24gY29sb3I9XCIjNjY2XCIgd2lkdGg9XCIyMHB4XCIgaGVpZ2h0PVwiMjBweFwiIC8+XG4gICAgICAgIDwvU2Nyb2xsVG9Cb3R0b21CdXR0b24+XG4gICAgICApfVxuXG4gICAgICB7bG9hZGluZ01lc3NhZ2VzICYmIDxMb2FkZXIgLz59XG4gICAgPC9TQ01lc3NhZ2VzT3V0ZXI+XG4gIClcbn1cblxuZXhwb3J0IGNvbnN0IENoYXRBSU1lc3NhZ2VzID0gUmVhY3QubWVtbyhDaGF0QUlNZXNzYWdlc0lubmVyKVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPQSxLQUFLLElBQVFDLElBQUksRUFBYUMsU0FBUyxFQUFFQyxNQUFNLEVBQUVDLFFBQVEsRUFBRUMsV0FBVyxFQUFBQyxhQUFBLElBQUFDLGNBQUEsUUFBUSxPQUFPO0FBQzVGLFNBQVNDLFVBQVUsUUFBUSxZQUFZO0FBQ3ZDLFNBQVNDLGdCQUFnQixRQUFRLGtCQUFrQjtBQUNuRCxTQUFTQyxjQUFjLFFBQVEsaURBQWlEO0FBRWhGLFNBQVNDLGNBQWMsUUFBUSwyQ0FBMkM7QUFDMUUsU0FBU0MsV0FBVyxRQUFRLHFDQUFxQztBQUNqRSxTQUFTQyxzQkFBc0IsUUFBUSxvQ0FBb0M7QUFDM0UsU0FBU0MsbUJBQW1CLFFBQVEsZ0RBQWdEO0FBRXBGLFNBQXNCQyxlQUFlLFFBQWtCLHFCQUFxQjtBQUU1RSxTQUFrQkMsT0FBTyxRQUFRLDJCQUEyQjtBQUU1RCxTQUFTQyxJQUFJLFFBQVEscUJBQXFCO0FBQzFDLFNBQVNDLGNBQWMsUUFBUSw4Q0FBOEM7QUFDN0UsU0FBU0MsWUFBWSxRQUFRLDZCQUE2QjtBQUUxRCxTQUFTQyxXQUFXLFFBQVEseUJBQXlCO0FBQ3JELFNBQVNDLE1BQU0sUUFBUSxvQkFBb0I7QUFJM0MsU0FBU0MsZUFBZSxFQUFFQyxnQkFBZ0IsRUFBRUMsc0JBQXNCLEVBQUVDLHVCQUF1QixRQUFRLFVBQVU7QUFDN0csU0FBU0MsZUFBZSxRQUFRLG9CQUFvQjtBQUNwRCxTQUNFQyxtQkFBbUIsRUFDbkJDLG9CQUFvQixFQUNwQkMsZUFBZSxFQUNmQyxnQkFBZ0IsRUFDaEJDLGVBQWUsRUFDZkMsdUJBQXVCLEVBQ3ZCQyxhQUFhLEVBQ2JDLFlBQVksRUFDWkMsd0JBQXdCLEVBQ3hCQyxlQUFlLEVBQ2ZDLGlCQUFpQixFQUNqQkMsVUFBVSxFQUNWQyxvQkFBb0IsRUFDcEJDLGtCQUFrQixFQUNsQkMsZ0JBQWdCLEVBQ2hCQyx1QkFBdUIsUUFDbEIsYUFBYTtBQUNwQixTQUFTQyxRQUFRLFFBQVEsb0NBQW9DO0FBQzdELFNBQVNDLGdCQUFnQixRQUFRLGlDQUFpQztBQUdsRSxTQUFTQyxXQUFXLFFBQVEsbUJBQW1CO0FBQy9DLFNBQVNDLHNCQUFzQixRQUFRLDZCQUE2QjtBQUFBLFNBQUFDLEdBQUEsSUFBQUMsSUFBQSxFQUFBQyxJQUFBLElBQUFDLEtBQUEsRUFBQUMsUUFBQSxJQUFBQyxTQUFBO0FBRXBFLElBQU1DLElBQUksR0FBRzVDLGdCQUFnQixDQUFDO0VBQUU2QyxNQUFNLEVBQUUsQ0FBQyxjQUFjLEVBQUUsY0FBYztBQUFFLENBQUMsQ0FBQztBQUUzRSxJQUFNQyxlQUFlLEdBQUcsU0FBbEJBLGVBQWVBLENBQUEsRUFBUztFQUM1QixJQUFBQyxTQUFBLEdBQW9DcEQsUUFBUSxDQUFlLElBQUksQ0FBQztJQUFBcUQsVUFBQSxHQUFBQyxjQUFBLENBQUFGLFNBQUE7SUFBekRHLFVBQVUsR0FBQUYsVUFBQTtJQUFFRyxhQUFhLEdBQUFILFVBQUE7RUFDaEMsSUFBQUksaUJBQUEsR0FBa0JqQixnQkFBZ0IsQ0FBQyxDQUFDO0lBQTVCa0IsS0FBSyxHQUFBRCxpQkFBQSxDQUFMQyxLQUFLO0VBRWI1RCxTQUFTLENBQUMsWUFBTTtJQUNkMEQsYUFBYSxDQUFDRSxLQUFLLENBQUM7RUFDdEIsQ0FBQyxFQUFFLENBQUNBLEtBQUssQ0FBQyxDQUFDO0VBRVgsb0JBQ0VkLElBQUEsQ0FBQ1gsaUJBQWlCO0lBQUEwQixRQUFBLEVBQ2YsQ0FBQUosVUFBVSxhQUFWQSxVQUFVLHVCQUFWQSxVQUFVLENBQUVLLElBQUksTUFBSyxPQUFPLGdCQUFHaEIsSUFBQSxDQUFDSCxXQUFXO01BQUNvQixLQUFLLEVBQUUsRUFBRztNQUFDQyxNQUFNLEVBQUU7SUFBRyxDQUFFLENBQUMsR0FBR1AsVUFBVSxhQUFWQSxVQUFVLHVCQUFWQSxVQUFVLENBQUVRO0VBQUssQ0FDekUsQ0FBQztBQUV4QixDQUFDO0FBNENELElBQU1DLGNBQXVDLEdBQUcsU0FBMUNBLGNBQXVDQSxDQUFBQyxJQUFBLEVBQThDO0VBQUEsSUFBeENDLGFBQWEsR0FBQUQsSUFBQSxDQUFiQyxhQUFhO0lBQUVQLFFBQVEsR0FBQU0sSUFBQSxDQUFSTixRQUFRO0lBQUtRLEtBQUssR0FBQUMsd0JBQUEsQ0FBQUgsSUFBQSxFQUFBSSxTQUFBO0VBQ2xGLElBQU1DLGdCQUFnQixHQUFHSixhQUFhLEdBQUdoRCxlQUFlLEdBQUdDLGdCQUFnQjtFQUMzRSxvQkFBT3lCLElBQUEsQ0FBQzBCLGdCQUFnQixFQUFBQyxhQUFBLENBQUFBLGFBQUEsS0FBS0osS0FBSztJQUFBUixRQUFBLEVBQUdBO0VBQVEsRUFBbUIsQ0FBQztBQUNuRSxDQUFDO0FBRUQsSUFBTWEscUJBQXFELEdBQUcsU0FBeERBLHFCQUFxREEsQ0FBQUMsS0FBQSxFQUFvQztFQUFBLElBQTlCUCxhQUFhLEdBQUFPLEtBQUEsQ0FBYlAsYUFBYTtJQUFLQyxLQUFLLEdBQUFDLHdCQUFBLENBQUFLLEtBQUEsRUFBQUMsVUFBQTtFQUN0RixJQUFNQyx1QkFBdUIsR0FBR1QsYUFBYSxHQUFHOUMsc0JBQXNCLEdBQUdDLHVCQUF1QjtFQUNoRyxvQkFBT3VCLElBQUEsQ0FBQytCLHVCQUF1QixFQUFBSixhQUFBLEtBQUtKLEtBQUssQ0FBRyxDQUFDO0FBQy9DLENBQUM7QUFFRCxTQUFTUyxjQUFjQSxDQUFBQyxLQUFBLEVBTXBCO0VBQUEsSUFMREMsT0FBTyxHQUFBRCxLQUFBLENBQVBDLE9BQU87SUFDUEMsa0JBQWtCLEdBQUFGLEtBQUEsQ0FBbEJFLGtCQUFrQjtFQUtsQixJQUFBQyxVQUFBLEdBQTRDaEYsUUFBUSxDQUFpQixJQUFJLENBQUM7SUFBQWlGLFVBQUEsR0FBQTNCLGNBQUEsQ0FBQTBCLFVBQUE7SUFBbkVFLGNBQWMsR0FBQUQsVUFBQTtJQUFFRSxpQkFBaUIsR0FBQUYsVUFBQTtFQUV4QyxJQUFNRyxZQUFZLEdBQUcsU0FBZkEsWUFBWUEsQ0FBSUMsTUFBZSxFQUFLO0lBQ3hDLElBQUlILGNBQWMsRUFBRTtJQUNwQkMsaUJBQWlCLENBQUNFLE1BQU0sQ0FBQztJQUN6Qk4sa0JBQWtCLENBQUNNLE1BQU0sQ0FBQztFQUM1QixDQUFDO0VBRUQsb0JBQ0V6QyxJQUFBLENBQUNmLGFBQWE7SUFBQThCLFFBQUEsRUFDWCxDQUFDbUIsT0FBTyxJQUFJLEVBQUUsRUFBRVEsR0FBRyxDQUFDLFVBQUFELE1BQU07TUFBQSxvQkFDekJ6QyxJQUFBLENBQUNkLFlBQVk7UUFDWHlELGFBQWEsRUFBRSxDQUFDLENBQUNMLGNBQWU7UUFDaENNLE9BQU8sRUFBRSxDQUFDLENBQUNOLGNBQWMsSUFBSSxDQUFBQSxjQUFjLGFBQWRBLGNBQWMsdUJBQWRBLGNBQWMsQ0FBRU8sRUFBRSxNQUFLSixNQUFNLENBQUNJLEVBQUc7UUFDOURDLE9BQU8sRUFBRSxTQUFUQSxPQUFPQSxDQUFBO1VBQUEsT0FBUU4sWUFBWSxDQUFDQyxNQUFNLENBQUM7UUFBQSxDQUFDO1FBQUExQixRQUFBLEVBR25DMEIsTUFBTSxDQUFDTTtNQUFJLEdBRlBOLE1BQU0sQ0FBQ0ksRUFHQSxDQUFDO0lBQUEsQ0FDaEI7RUFBQyxDQUNXLENBQUM7QUFFcEI7QUFFQSxJQUFNRyxzQkFBc0IsR0FBRyxTQUF6QkEsc0JBQXNCQSxDQUFBLEVBQVM7RUFDbkMsSUFBQUMsVUFBQSxHQUFvQzdGLFFBQVEsQ0FBZSxJQUFJLENBQUM7SUFBQThGLFVBQUEsR0FBQXhDLGNBQUEsQ0FBQXVDLFVBQUE7SUFBekR0QyxVQUFVLEdBQUF1QyxVQUFBO0lBQUV0QyxhQUFhLEdBQUFzQyxVQUFBO0VBQ2hDLElBQUFDLGtCQUFBLEdBQWtCdkQsZ0JBQWdCLENBQUMsQ0FBQztJQUE1QmtCLEtBQUssR0FBQXFDLGtCQUFBLENBQUxyQyxLQUFLO0VBRWI1RCxTQUFTLENBQUMsWUFBTTtJQUNkMEQsYUFBYSxDQUFDRSxLQUFLLENBQUM7RUFDdEIsQ0FBQyxFQUFFLENBQUNBLEtBQUssQ0FBQyxDQUFDO0VBRVgsb0JBQ0VaLEtBQUEsQ0FBQ2Ysd0JBQXdCO0lBQUE0QixRQUFBLGdCQUN2QmYsSUFBQSxDQUFDTyxlQUFlLElBQUUsQ0FBQyxFQUNsQixDQUFBSSxVQUFVLGFBQVZBLFVBQVUsdUJBQVZBLFVBQVUsQ0FBRW9DLElBQUksa0JBQ2YvQyxJQUFBLENBQUNaLGVBQWU7TUFBQTJCLFFBQUEsRUFBRSxDQUFBSixVQUFVLGFBQVZBLFVBQVUsdUJBQVZBLFVBQVUsQ0FBRUssSUFBSSxNQUFLLE9BQU8sR0FBRyxNQUFNLEdBQUdMLFVBQVUsYUFBVkEsVUFBVSx1QkFBVkEsVUFBVSxDQUFFb0M7SUFBSSxDQUFrQixDQUM3RjtFQUFBLENBQ3VCLENBQUM7QUFFL0IsQ0FBQzs7QUFFRDtBQUNBLElBQU1LLHFCQUFxQixHQUFHLFNBQXhCQSxxQkFBcUJBLENBQUlDLElBQVksRUFBYTtFQUN0RCxJQUFNQyxLQUFLLEdBQUdELElBQUksQ0FBQ0MsS0FBSyxDQUFDLHdCQUF3QixDQUFDO0VBQ2xELE9BQU9BLEtBQUssSUFBSSxpREFBaUQsQ0FBQ0MsSUFBSSxDQUFDRCxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBR0EsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLFFBQVE7QUFDeEcsQ0FBQzs7QUFFRDtBQUNBLElBQU1FLFFBQW1FLEdBQUcsU0FBdEVBLFFBQW1FQSxDQUFBQyxLQUFBLEVBQW1DO0VBQUEsSUFBN0JKLElBQUksR0FBQUksS0FBQSxDQUFKSixJQUFJO0lBQUVLLE1BQU0sR0FBQUQsS0FBQSxDQUFOQyxNQUFNO0lBQUUzQyxRQUFRLEdBQUEwQyxLQUFBLENBQVIxQyxRQUFRO0VBQ25HLElBQU00QyxVQUFVLEdBQUdQLHFCQUFxQixDQUFDQyxJQUFJLENBQUM7RUFDOUMsSUFBQU8sYUFBQSxHQUEwQnpGLFlBQVksQ0FBQ3VGLE1BQU0sRUFBRUMsVUFBVSxDQUFDO0lBQWxERSxhQUFhLEdBQUFELGFBQUEsQ0FBYkMsYUFBYTtFQUNyQixJQUFNQyxRQUFRLEdBQUdELGFBQWEsQ0FBQyxDQUFDO0VBRWhDLElBQU1FLFdBQVcsR0FBRyxTQUFkQSxXQUFXQSxDQUFJQyxDQUFzQyxFQUFLO0lBQzlEO0lBQ0EsSUFBSUEsQ0FBQyxDQUFDQyxPQUFPLElBQUlELENBQUMsQ0FBQ0UsT0FBTyxFQUFFO01BQzFCO0lBQ0Y7SUFFQUYsQ0FBQyxDQUFDRyxjQUFjLENBQUMsQ0FBQztJQUNsQkwsUUFBUSxDQUFDLENBQUM7RUFDWixDQUFDO0VBRUQsb0JBQ0U5RCxJQUFBLENBQUNWLFVBQVU7SUFBQytELElBQUksRUFBRUEsSUFBSztJQUFDUCxPQUFPLEVBQUVpQixXQUFZO0lBQUFoRCxRQUFBLEVBQzFDQTtFQUFRLENBQ0MsQ0FBQztBQUVqQixDQUFDOztBQUVEOztBQUVBLElBQU1xRCxVQUErQixHQUFHLFNBQWxDQSxVQUErQkEsQ0FBQUMsS0FBQSxFQUFvQztFQUFBLElBQTlCaEIsSUFBSSxHQUFBZ0IsS0FBQSxDQUFKaEIsSUFBSTtJQUFFdEMsUUFBUSxHQUFBc0QsS0FBQSxDQUFSdEQsUUFBUTtJQUFLdUQsSUFBSSxHQUFBOUMsd0JBQUEsQ0FBQTZDLEtBQUEsRUFBQUUsVUFBQTtFQUNoRSxJQUFJLENBQUNsQixJQUFJLElBQUksT0FBT0EsSUFBSSxLQUFLLFFBQVEsRUFBRTtJQUNyQyxvQkFDRXJELElBQUEsTUFBQTJCLGFBQUEsQ0FBQUEsYUFBQTtNQUFHMEIsSUFBSSxFQUFFQTtJQUFLLEdBQUtpQixJQUFJO01BQUF2RCxRQUFBLEVBQ3BCQTtJQUFRLEVBQ1IsQ0FBQztFQUVSO0VBQ0EsSUFBTXlELFNBQVMsR0FBR25CLElBQUksQ0FBQ0MsS0FBSyxDQUFDLElBQUltQixNQUFNLENBQUMzRSxzQkFBc0IsQ0FBQyxDQUFDO0VBQ2hFLElBQUkwRSxTQUFTLEVBQUU7SUFDYixJQUFNZCxNQUFNLEdBQUdjLFNBQVMsQ0FBQyxDQUFDLENBQUM7SUFDM0Isb0JBQ0V4RSxJQUFBLENBQUN3RCxRQUFRO01BQUNILElBQUksRUFBRUEsSUFBSztNQUFDSyxNQUFNLEVBQUVBLE1BQU87TUFBQTNDLFFBQUEsRUFDbENBO0lBQVEsQ0FDRCxDQUFDO0VBRWY7RUFDQSxvQkFDRWYsSUFBQSxNQUFBMkIsYUFBQSxDQUFBQSxhQUFBO0lBQUcwQixJQUFJLEVBQUVBO0VBQUssR0FBS2lCLElBQUk7SUFBQXZELFFBQUEsRUFDcEJBO0VBQVEsRUFDUixDQUFDO0FBRVIsQ0FBQztBQUVELElBQU0yRCxXQUFXLGdCQUFHekgsSUFBSSxDQUFDLFVBQUNzRSxLQUF1QixFQUFLO0VBQUEsSUFBQW9ELEtBQUEsRUFBQUMsS0FBQTtFQUNwRCxJQUNFL0IsRUFBRSxHQWdCQXRCLEtBQUssQ0FoQlBzQixFQUFFO0lBQ0ZnQyxJQUFJLEdBZUZ0RCxLQUFLLENBZlBzRCxJQUFJO0lBQ0pDLE9BQU8sR0FjTHZELEtBQUssQ0FkUHVELE9BQU87SUFDUEMsT0FBTyxHQWFMeEQsS0FBSyxDQWJQd0QsT0FBTztJQUNQQyxRQUFRLEdBWU56RCxLQUFLLENBWlB5RCxRQUFRO0lBQ1I5QyxPQUFPLEdBV0xYLEtBQUssQ0FYUFcsT0FBTztJQUNQK0MsZUFBZSxHQVViMUQsS0FBSyxDQVZQMEQsZUFBZTtJQUNmOUMsa0JBQWtCLEdBU2hCWixLQUFLLENBVFBZLGtCQUFrQjtJQUNsQitDLGNBQWMsR0FRWjNELEtBQUssQ0FSUDJELGNBQWM7SUFDZEMsc0JBQXNCLEdBT3BCNUQsS0FBSyxDQVBQNEQsc0JBQXNCO0lBQ3RCQyxlQUFlLEdBTWI3RCxLQUFLLENBTlA2RCxlQUFlO0lBQ2ZDLElBQUksR0FLRjlELEtBQUssQ0FMUDhELElBQUk7SUFDSkMsT0FBTyxHQUlML0QsS0FBSyxDQUpQK0QsT0FBTztJQUNQQyxXQUFXLEdBR1RoRSxLQUFLLENBSFBnRSxXQUFXO0lBQ1hDLFFBQVEsR0FFTmpFLEtBQUssQ0FGUGlFLFFBQVE7SUFDUkMsY0FBYyxHQUNabEUsS0FBSyxDQURQa0UsY0FBYztFQUdoQixJQUFNQyx1QkFBdUIsR0FBRyxTQUExQkEsdUJBQXVCQSxDQUFJWixPQUFlLEVBQWlCO0lBQy9ELElBQUksQ0FBQ0EsT0FBTyxFQUFFLE9BQU8sRUFBRTs7SUFFdkI7SUFDQSxJQUFNYSxZQUFZLEdBQUcsSUFBSWxCLE1BQU0sQ0FBQzNFLHNCQUFzQixFQUFFLEdBQUcsQ0FBQztJQUM1RCxJQUFNOEYsS0FBaUIsR0FBRyxFQUFFO0lBQzVCLElBQU1DLE9BQU8sR0FBRyxJQUFJQyxHQUFHLENBQVMsQ0FBQztJQUVqQyxJQUFJeEMsS0FBNkIsR0FBRyxJQUFJO0lBQ3hDO0lBQ0EsT0FBTyxDQUFDQSxLQUFLLEdBQUdxQyxZQUFZLENBQUNJLElBQUksQ0FBQ2pCLE9BQU8sQ0FBQyxNQUFNLElBQUksRUFBRTtNQUNwRCxJQUFNcEIsTUFBTSxHQUFHSixLQUFLLENBQUMsQ0FBQyxDQUFDO01BQ3ZCLElBQU0wQyxHQUFHLEdBQUcxQyxLQUFLLENBQUMsQ0FBQyxDQUFDO01BRXBCLElBQUksQ0FBQ3VDLE9BQU8sQ0FBQ0ksR0FBRyxDQUFDdkMsTUFBTSxDQUFDLEVBQUU7UUFDeEJtQyxPQUFPLENBQUNLLEdBQUcsQ0FBQ3hDLE1BQU0sQ0FBQzs7UUFFbkI7UUFDQSxJQUFNeUMsaUJBQWlCLEdBQUcsSUFBSTFCLE1BQU0sc0JBQUEyQixNQUFBLENBQXNCSixHQUFHLENBQUNLLE9BQU8sQ0FBQyxxQkFBcUIsRUFBRSxNQUFNLENBQUMsUUFBSyxDQUFDO1FBQzFHLElBQU1DLFNBQVMsR0FBR3hCLE9BQU8sQ0FBQ3hCLEtBQUssQ0FBQzZDLGlCQUFpQixDQUFDO1FBQ2xELElBQU1JLEtBQUssR0FBR0QsU0FBUyxHQUFHQSxTQUFTLENBQUMsQ0FBQyxDQUFDLGFBQUFGLE1BQUEsQ0FBYTFDLE1BQU0sQ0FBRTtRQUUzRGtDLEtBQUssQ0FBQ1ksSUFBSSxDQUFDO1VBQ1QzRCxFQUFFLEVBQUVhLE1BQU07VUFDVjZDLEtBQUssRUFBTEEsS0FBSztVQUNMUCxHQUFHLEVBQUhBO1FBQ0YsQ0FBQyxDQUFDO01BQ0o7SUFDRjtJQUVBLE9BQU9KLEtBQUs7RUFDZCxDQUFDO0VBRUQsSUFBQWEsVUFBQSxHQUFrRHJKLFFBQVEsQ0FBd0IsSUFBSSxDQUFDO0lBQUFzSixVQUFBLEdBQUFoRyxjQUFBLENBQUErRixVQUFBO0lBQWhGRSxpQkFBaUIsR0FBQUQsVUFBQTtJQUFFRSxvQkFBb0IsR0FBQUYsVUFBQTtFQUM5QyxJQUFNcEYsYUFBYSxHQUFHK0QsSUFBSSxLQUFLdEgsZUFBZSxDQUFDOEksSUFBSSxJQUFJaEMsSUFBSSxDQUFDaEMsRUFBRSxLQUFLbUMsUUFBUSxDQUFDbkMsRUFBRSxDQUFDaUUsUUFBUSxDQUFDLENBQUM7RUFDekYsSUFBTUMsV0FBVyxHQUFHMUIsSUFBSSxLQUFLdEgsZUFBZSxDQUFDaUosU0FBUyxJQUFJbkMsSUFBSSxDQUFDaEMsRUFBRSxLQUFLLFdBQVc7RUFFakYsSUFBTW9FLHFCQUFxQixHQUFHLFNBQXhCQSxxQkFBcUJBLENBQUlDLFVBQTBCLEVBQUs7SUFDNUQ7SUFDQSxJQUNFQSxVQUFVLENBQUNDLElBQUksWUFBWUMsSUFBSSxJQUMvQkYsVUFBVSxDQUFDRyxZQUFZLFlBQVlELElBQUksSUFDdkNGLFVBQVUsQ0FBQ0ksYUFBYSxJQUN4QkosVUFBVSxDQUFDSyxZQUFZLElBQ3ZCTCxVQUFVLENBQUNNLFFBQVEsRUFDbkI7TUFDQVosb0JBQW9CLENBQUNNLFVBQVUsQ0FBQztJQUNsQztFQUNGLENBQUM7RUFFRCxJQUFNTyxrQkFBa0IsR0FBRyxTQUFyQkEsa0JBQWtCQSxDQUFBLEVBQVM7SUFDL0JiLG9CQUFvQixDQUFDLElBQUksQ0FBQztFQUM1QixDQUFDO0VBRUQsSUFBSTNCLGVBQWUsSUFBSS9DLE9BQU8sRUFBRTtJQUM5QixvQkFDRWxDLElBQUEsQ0FBQ29CLGNBQWM7TUFBVUUsYUFBYSxFQUFFQSxhQUFjO01BQUMsbUJBQWlCdUIsRUFBRztNQUFDNkUsV0FBVyxFQUFFLEtBQU07TUFBQTNHLFFBQUEsZUFDN0ZiLEtBQUEsQ0FBQ1gsb0JBQW9CO1FBQUNvSSxZQUFZLEVBQUVaLFdBQVk7UUFBQWhHLFFBQUEsR0FDN0NnRyxXQUFXLGlCQUFJL0csSUFBQSxDQUFDZ0Qsc0JBQXNCLElBQUUsQ0FBQyxlQUMxQ2hELElBQUEsQ0FBQzRCLHFCQUFxQjtVQUNwQnFELGVBQWUsRUFBRUEsZUFBZ0I7VUFDakNILE9BQU8sRUFBRUEsT0FBUTtVQUNqQnhELGFBQWEsRUFBRUEsYUFBYztVQUM3QnlELE9BQU8sRUFBRUEsT0FBUTtVQUNqQjZDLG1CQUFtQixlQUFFNUgsSUFBQSxDQUFDZ0MsY0FBYztZQUFDRSxPQUFPLEVBQUVBLE9BQWU7WUFBQ0Msa0JBQWtCLEVBQUVBO1VBQW1CLENBQUU7UUFBRSxDQUMxRyxDQUFDO01BQUEsQ0FDa0I7SUFBQyxHQVZKVSxFQVdMLENBQUM7RUFFckI7RUFFQSxJQUFNZ0YsbUJBQW1CLEdBQUcsU0FBdEJBLG1CQUFtQkEsQ0FBSUMsUUFBa0IsRUFBSztJQUNsRCxJQUFNQyxTQUFTLEdBQUdsRixFQUFFLENBQ2pCbUYsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUNWQyxNQUFNLENBQUMsVUFBQUMsVUFBVTtNQUFBLE9BQUlBLFVBQVUsS0FBSyxRQUFRO0lBQUEsRUFBQyxDQUM3Q0MsSUFBSSxDQUFDLEdBQUcsQ0FBQztJQUNaakQsY0FBYyxhQUFkQSxjQUFjLGVBQWRBLGNBQWMsQ0FBRzRDLFFBQVEsRUFBRUMsU0FBUyxDQUFDO0VBQ3ZDLENBQUM7RUFFRCxvQkFDRTdILEtBQUEsQ0FBQ1gsb0JBQW9CO0lBQUNvSSxZQUFZLEVBQUVaLFdBQVk7SUFBQWhHLFFBQUEsR0FDN0NnRyxXQUFXLGlCQUFJL0csSUFBQSxDQUFDZ0Qsc0JBQXNCLElBQUUsQ0FBQyxlQUMxQzlDLEtBQUEsQ0FBQ1Ysa0JBQWtCO01BQUF1QixRQUFBLEdBQ2hCLENBQUMsR0FBQTRELEtBQUEsR0FBRVksV0FBVyxJQUFJRCxPQUFPLGNBQUFYLEtBQUEsZUFBdkJBLEtBQUEsQ0FBMEJ5RCxNQUFNLEtBQUksQ0FBQ3JCLFdBQVcsaUJBQ2pEL0csSUFBQSxDQUFDUCxnQkFBZ0I7UUFBQXNCLFFBQUEsR0FBQTZELEtBQUEsR0FDYlcsV0FBVyxJQUFJRCxPQUFPLGNBQUFWLEtBQUEsdUJBQXZCQSxLQUFBLENBQTBCbEMsR0FBRyxDQUFDLFVBQUN3RSxVQUFVLEVBQUVtQixLQUFLLEVBQUs7VUFBQSxJQUFBQyxnQkFBQSxFQUFBQyxnQkFBQTtVQUNwRDtVQUNBLElBQU1DLGNBQWMsR0FBRyxDQUFBdEIsVUFBVSxhQUFWQSxVQUFVLGdCQUFBb0IsZ0JBQUEsR0FBVnBCLFVBQVUsQ0FBRWxHLElBQUksY0FBQXNILGdCQUFBLHVCQUFoQkEsZ0JBQUEsQ0FBa0JHLFdBQVcsQ0FBQyxDQUFDLEtBQUksRUFBRTtVQUM1RCxJQUFNQyxjQUFjLEdBQUcsQ0FBQXhCLFVBQVUsYUFBVkEsVUFBVSxnQkFBQXFCLGdCQUFBLEdBQVZyQixVQUFVLENBQUVuRSxJQUFJLGNBQUF3RixnQkFBQSx1QkFBaEJBLGdCQUFBLENBQWtCRSxXQUFXLENBQUMsQ0FBQyxLQUFJLEVBQUU7VUFDNUQsSUFBTUUsV0FBVyxHQUNmSCxjQUFjLENBQUNJLFVBQVUsQ0FBQyxRQUFRLENBQUMsSUFDbkMsQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUNDLFFBQVEsQ0FBQ0wsY0FBYyxDQUFDLElBQ25GLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDTSxJQUFJLENBQUMsVUFBQUMsR0FBRztZQUFBLE9BQ3pFTCxjQUFjLENBQUNNLFFBQVEsQ0FBQ0QsR0FBRyxDQUFDO1VBQUEsQ0FDOUIsQ0FBQztVQUVILElBQUlKLFdBQVcsRUFBRTtZQUNmLG9CQUFPM0ksSUFBQSxDQUFDbEMsbUJBQW1CO2NBQTZDb0osVUFBVSxFQUFFQTtZQUFXLE1BQUFkLE1BQUEsQ0FBM0RjLFVBQVUsQ0FBQ3JFLEVBQUUsT0FBQXVELE1BQUEsQ0FBSWMsVUFBVSxDQUFDbkUsSUFBSSxDQUE2QixDQUFDO1VBQ3BHO1VBRUEsb0JBQ0UvQyxJQUFBLENBQUNyQyxjQUFjO1lBRWJ1SixVQUFVLEVBQUVBLFVBQVc7WUFDdkIrQixhQUFhLEVBQUVaLEtBQU07WUFDckJ2RixPQUFPLEVBQUUsU0FBVEEsT0FBT0EsQ0FBQTtjQUFBLE9BQVFtRSxxQkFBcUIsQ0FBQ0MsVUFBVSxDQUFDO1lBQUE7VUFBQyxNQUFBZCxNQUFBLENBSHpDYyxVQUFVLENBQUNyRSxFQUFFLE9BQUF1RCxNQUFBLENBQUljLFVBQVUsQ0FBQ25FLElBQUksQ0FJekMsQ0FBQztRQUVOLENBQUM7TUFBQyxDQUNjLENBQ25CLEVBQ0F5QyxRQUFRLElBQUlBLFFBQVEsQ0FBQzBELGVBQWUsaUJBQ25DbEosSUFBQSxDQUFDTix1QkFBdUI7UUFBQXFCLFFBQUEsRUFDckJ5RSxRQUFRLENBQUMwRCxlQUFlLENBQUN4RyxHQUFHLENBQUMsVUFBQXlHLE1BQU07VUFBQSxJQUFBQyxxQkFBQTtVQUFBLG9CQUNsQ3BKLElBQUEsQ0FBQ3BDLFdBQVc7WUFFVnVMLE1BQU0sRUFBRUEsTUFBTztZQUNmRSxNQUFNLEVBQUU1RCxjQUFlO1lBQ3ZCNkQsU0FBUyxFQUFFLFNBQVhBLFNBQVNBLENBQUVDLFFBQVE7Y0FBQSxPQUFJcEUsc0JBQXNCLENBQUNvRSxRQUFRLEVBQUUsU0FBUyxDQUFDO1lBQUEsQ0FBQztZQUNuRUMsUUFBUSxFQUFFLFNBQVZBLFFBQVFBLENBQUVELFFBQVE7Y0FBQSxPQUFJcEUsc0JBQXNCLENBQUNvRSxRQUFRLEVBQUUsUUFBUSxDQUFDO1lBQUEsQ0FBQztZQUNqRUUsZ0JBQWdCLEVBQUUsRUFBQUwscUJBQUEsR0FBQTdILEtBQUssQ0FBQ21JLGVBQWUsY0FBQU4scUJBQUEsdUJBQXJCQSxxQkFBQSxDQUF1Qk8sVUFBVSxNQUFLLElBQUs7WUFDN0RDLFVBQVUsRUFBRXJJLEtBQUssQ0FBQ3NJO1VBQVMsTUFBQXpELE1BQUEsQ0FObkIrQyxNQUFNLENBQUNXLFNBQVMsT0FBQTFELE1BQUEsQ0FBSStDLE1BQU0sQ0FBQ1ksWUFBWSxDQU9oRCxDQUFDO1FBQUEsQ0FDSDtNQUFDLENBQ3FCLENBQzFCLEVBQ0EsQ0FBQyxDQUFDakYsT0FBTztNQUNSO01BQ0E7TUFDQSxDQUFDVSxRQUFRLGlCQUNQeEYsSUFBQSxDQUFDckIsbUJBQW1CO1FBQ2xCMkMsYUFBYSxFQUFFQSxhQUFjO1FBQzdCMEksbUJBQW1CLEVBQUV6SSxLQUFLLENBQUN5SSxtQkFBb0I7UUFDL0NDLFNBQVMsRUFBRWxELFdBQVcsSUFBSXJCLHVCQUF1QixDQUFDWixPQUFPLENBQUMsQ0FBQ3NELE1BQU0sR0FBRyxDQUFDLEdBQUcsZ0JBQWdCLEdBQUcsRUFBRztRQUFBckgsUUFBQSxlQUc5RmYsSUFBQSxDQUFDeEMsVUFBVTtVQUNUME0sT0FBTyxFQUFFO1lBQUU3SixJQUFJLEVBQUpBO1VBQUssQ0FBRTtVQUNsQjhKLFVBQVUsRUFBRTtZQUFFQyxDQUFDLEVBQUVoRztVQUFXLENBQW9EO1VBQ2hGaUcsVUFBVSxFQUFFO1lBQUVDLE9BQU8sRUFBRTtVQUFNLENBQUU7VUFDL0JDLFdBQVcsRUFBRSxDQUFDLENBQUNoSixLQUFLLENBQUNpSixXQUFZO1VBQ2pDQyxVQUFVLEVBQUUsQ0FBQyxjQUFjLEVBQUUsY0FBYyxDQUFFO1VBQzdDQyxRQUFRLEVBQUU7WUFBRUMsS0FBSyxFQUFFLEtBQUs7WUFBRXRLLElBQUksRUFBRTtVQUFNLENBQUU7VUFBQVUsUUFBQSxFQUV2QytEO1FBQU8sQ0FDRTtNQUFDLENBQ00sQ0FDdEIsRUFDRmlDLFdBQVcsSUFBSSxDQUFDaEMsT0FBTyxJQUFJLENBQUN4RCxLQUFLLENBQUN5SSxtQkFBbUIsSUFBSSxDQUFDeEUsUUFBUSxpQkFDakV4RixJQUFBLENBQUN0QixlQUFlO1FBQ2RrTSxPQUFPLEVBQUU5RixPQUFRO1FBQ2pCUSxPQUFPLEVBQUVBLE9BQVE7UUFDakJKLGNBQWMsRUFBRTJDLG1CQUFvQjtRQUNwQ3pDLGVBQWUsRUFBRUE7TUFBZ0IsQ0FDbEMsQ0FDRjtJQUFBLENBQ2lCLENBQUMsZUFDckJwRixJQUFBLENBQUNuQyxzQkFBc0I7TUFDckJnTixNQUFNLEVBQUUsQ0FBQyxDQUFDbEUsaUJBQWtCO01BQzVCbUUsT0FBTyxFQUFFckQsa0JBQW1CO01BQzVCUCxVQUFVLEVBQUVQO0lBQWtCLENBQy9CLENBQUM7RUFBQSxDQUNrQixDQUFDO0FBRTNCLENBQUMsQ0FBQztBQUVGLElBQU1vRSxtQkFBbUIsR0FBRyxTQUF0QkEsbUJBQW1CQSxDQUFBQyxLQUFBLEVBU0U7RUFBQSxJQVJ6QkMsa0JBQWtCLEdBQUFELEtBQUEsQ0FBbEJDLGtCQUFrQjtJQUNsQkMsYUFBYSxHQUFBRixLQUFBLENBQWJFLGFBQWE7SUFDYkMsT0FBTyxHQUFBSCxLQUFBLENBQVBHLE9BQU87SUFDUEMsa0JBQWtCLEdBQUFKLEtBQUEsQ0FBbEJJLGtCQUFrQjtJQUNsQkMsZ0JBQWdCLEdBQUFMLEtBQUEsQ0FBaEJLLGdCQUFnQjtJQUNoQjlGLFdBQVcsR0FBQXlGLEtBQUEsQ0FBWHpGLFdBQVc7SUFDWCtGLE1BQU0sR0FBQU4sS0FBQSxDQUFOTSxNQUFNO0lBQ056QixRQUFRLEdBQUFtQixLQUFBLENBQVJuQixRQUFRO0VBRVIsSUFBQTBCLEtBQUEsR0FBY3ROLElBQUksQ0FBQyxDQUFDO0lBQVp1TixDQUFDLEdBQUFELEtBQUEsQ0FBREMsQ0FBQztFQUNULElBQUFDLGtCQUFBLEdBQWtEN0wsZ0JBQWdCLENBQUMsQ0FBQztJQUE1RDhMLGlCQUFpQixHQUFBRCxrQkFBQSxDQUFqQkMsaUJBQWlCO0lBQUVDLGtCQUFrQixHQUFBRixrQkFBQSxDQUFsQkUsa0JBQWtCO0VBQzdDLElBQU0zRyxRQUFRLEdBQUdoSCxPQUFPLENBQUMsQ0FBQztFQUMxQixJQUFNNE4sV0FBVyxHQUFHek8sTUFBTSxDQUFpQixJQUFJLENBQUM7RUFDaEQsSUFBTTBPLGtCQUFrQixHQUFHMU8sTUFBTSxDQUFDLEtBQUssQ0FBQztFQUN4QyxJQUFNMk8sZ0JBQWdCLEdBQUczTyxNQUFNLENBQUMsS0FBSyxDQUFDO0VBQ3RDLElBQU00TyxnQkFBZ0IsR0FBRzVPLE1BQU0sQ0FBQyxLQUFLLENBQUM7RUFDdEMsSUFBTTZPLGtCQUFrQixHQUFHN08sTUFBTSxDQUFDLEVBQUUsQ0FBQztFQUNyQyxJQUFNOE8sZ0JBQWdCLEdBQUc5TyxNQUFNLENBQUMsQ0FBQyxDQUFDO0VBQ2xDLElBQU0rTyxxQkFBcUIsR0FBRy9PLE1BQU0sQ0FBQyxLQUFLLENBQUM7RUFDM0MsSUFBTWdQLFlBQVksR0FBR2hQLE1BQU0sQ0FBZ0IsSUFBSSxDQUFDO0VBQ2hELElBQUFpUCxVQUFBLEdBQW9EaFAsUUFBUSxDQUFDLEtBQUssQ0FBQztJQUFBaVAsVUFBQSxHQUFBM0wsY0FBQSxDQUFBMEwsVUFBQTtJQUE1REUsa0JBQWtCLEdBQUFELFVBQUE7SUFBRUUscUJBQXFCLEdBQUFGLFVBQUE7RUFFaEQsSUFBQUcsZUFBQSxHQWVJdE8sY0FBYyxDQUFDO01BQ2pCdU8sTUFBTSxFQUFFdkIsYUFBYSxJQUFJd0IsU0FBUztNQUNsQ3pCLGtCQUFrQixFQUFsQkEsa0JBQWtCO01BQ2xCRSxPQUFPLEVBQVBBLE9BQU87TUFDUDVGLFdBQVcsRUFBWEEsV0FBVztNQUNYK0YsTUFBTSxFQUFOQTtJQUNGLENBQUMsQ0FBQztJQXBCQXFCLFFBQVEsR0FBQUgsZUFBQSxDQUFSRyxRQUFRO0lBQ1JDLGVBQWUsR0FBQUosZUFBQSxDQUFmSSxlQUFlO0lBQ2ZDLHFCQUFxQixHQUFBTCxlQUFBLENBQXJCSyxxQkFBcUI7SUFDckJDLGVBQWUsR0FBQU4sZUFBQSxDQUFmTSxlQUFlO0lBQ2ZDLFNBQVMsR0FBQVAsZUFBQSxDQUFUTyxTQUFTO0lBQ1RDLGNBQWMsR0FBQVIsZUFBQSxDQUFkUSxjQUFjO0lBQ2RDLGNBQWMsR0FBQVQsZUFBQSxDQUFkUyxjQUFjO0lBQ2RDLFdBQVcsR0FBQVYsZUFBQSxDQUFYVSxXQUFXO0lBQ1hDLGFBQWEsR0FBQVgsZUFBQSxDQUFiVyxhQUFhO0lBQ2JqSSxjQUFjLEdBQUFzSCxlQUFBLENBQWR0SCxjQUFjO0lBQ2RDLHNCQUFzQixHQUFBcUgsZUFBQSxDQUF0QnJILHNCQUFzQjtJQUN0QmlJLGNBQWMsR0FBQVosZUFBQSxDQUFkWSxjQUFjO0lBQ2RDLFlBQVksR0FBQWIsZUFBQSxDQUFaYSxZQUFZO0lBQ1pDLGNBQWMsR0FBQWQsZUFBQSxDQUFkYyxjQUFjO0VBU2hCLElBQU1uTCxrQkFBa0IsR0FBRyxTQUFyQkEsa0JBQWtCQSxDQUFJTSxNQUFlLEVBQUs7SUFDOUMwSyxhQUFhLENBQUMxSyxNQUFNLENBQUM7RUFDdkIsQ0FBQztFQUVELElBQU04Syx5QkFBeUIsR0FBR2xRLFdBQVcsQ0FBQyxZQUFNO0lBQ2xELElBQUl1TyxXQUFXLENBQUM0QixPQUFPLEVBQUU7TUFDdkI1QixXQUFXLENBQUM0QixPQUFPLENBQUNDLFFBQVEsQ0FBQztRQUMzQkMsR0FBRyxFQUFFOUIsV0FBVyxDQUFDNEIsT0FBTyxDQUFDRyxZQUFZO1FBQ3JDQyxRQUFRLEVBQUU7TUFDWixDQUFDLENBQUM7TUFDRjtNQUNBQyxVQUFVLENBQUMsWUFBTTtRQUNmLElBQUlqQyxXQUFXLENBQUM0QixPQUFPLEVBQUU7VUFDdkIsSUFBQU0sb0JBQUEsR0FBa0RsQyxXQUFXLENBQUM0QixPQUFPO1lBQTdETyxTQUFTLEdBQUFELG9CQUFBLENBQVRDLFNBQVM7WUFBRUosWUFBWSxHQUFBRyxvQkFBQSxDQUFaSCxZQUFZO1lBQUVLLFlBQVksR0FBQUYsb0JBQUEsQ0FBWkUsWUFBWTtVQUM3QyxJQUFNQyxrQkFBa0IsR0FBR04sWUFBWSxHQUFHSSxTQUFTLEdBQUdDLFlBQVk7VUFDbEUsSUFBTUUsVUFBVSxHQUFHRCxrQkFBa0IsR0FBRyxFQUFFO1VBQzFDL0IscUJBQXFCLENBQUNzQixPQUFPLEdBQUdVLFVBQVU7VUFDMUMzQixxQkFBcUIsQ0FBQzJCLFVBQVUsQ0FBQztRQUNuQztNQUNGLENBQUMsRUFBRSxHQUFHLENBQUM7SUFDVDtFQUNGLENBQUMsRUFBRSxFQUFFLENBQUM7RUFFTixJQUFNQyxvQkFBb0IsR0FBRzlRLFdBQVcsQ0FDdEMsVUFBQzJHLENBQWdDLEVBQUs7SUFDcEMsSUFBTW9LLFNBQVMsR0FBR3BLLENBQUMsQ0FBQ3FLLGFBQWE7SUFFakMsSUFBSWxDLFlBQVksQ0FBQ3FCLE9BQU8sS0FBSyxJQUFJLEVBQUU7TUFDakNjLG9CQUFvQixDQUFDbkMsWUFBWSxDQUFDcUIsT0FBTyxDQUFDO0lBQzVDO0lBRUFyQixZQUFZLENBQUNxQixPQUFPLEdBQUdlLHFCQUFxQixDQUFDLFlBQU07TUFDakRwQyxZQUFZLENBQUNxQixPQUFPLEdBQUcsSUFBSTtNQUMzQixJQUFRTyxTQUFTLEdBQWlDSyxTQUFTLENBQW5ETCxTQUFTO1FBQUVKLFlBQVksR0FBbUJTLFNBQVMsQ0FBeENULFlBQVk7UUFBRUssWUFBWSxHQUFLSSxTQUFTLENBQTFCSixZQUFZO01BRTdDLElBQU1RLGFBQWEsR0FBR1QsU0FBUyxHQUFHOUIsZ0JBQWdCLENBQUN1QixPQUFPO01BRTFELElBQUlnQixhQUFhLEVBQUU7UUFDakJ4QyxrQkFBa0IsQ0FBQ3dCLE9BQU8sR0FBRyxFQUFFO01BQ2pDO01BRUEsSUFBTWlCLFlBQVksR0FBR2QsWUFBWSxHQUFHSSxTQUFTLEdBQUdDLFlBQVksR0FBR2hDLGtCQUFrQixDQUFDd0IsT0FBTztNQUV6RixJQUFJaUIsWUFBWSxFQUFFO1FBQ2hCekMsa0JBQWtCLENBQUN3QixPQUFPLEdBQUcsRUFBRTtNQUNqQztNQUVBekIsZ0JBQWdCLENBQUN5QixPQUFPLEdBQUcsQ0FBQ2lCLFlBQVk7TUFDeEN4QyxnQkFBZ0IsQ0FBQ3VCLE9BQU8sR0FBR08sU0FBUztNQUVwQyxJQUFNRSxrQkFBa0IsR0FBR04sWUFBWSxHQUFHSSxTQUFTLEdBQUdDLFlBQVk7TUFDbEUsSUFBTUUsVUFBVSxHQUFHRCxrQkFBa0IsR0FBRyxFQUFFO01BQzFDLElBQU1TLFdBQVcsR0FBR3hDLHFCQUFxQixDQUFDc0IsT0FBTyxLQUFLVSxVQUFVO01BQ2hFLElBQUlRLFdBQVcsRUFBRTtRQUNmeEMscUJBQXFCLENBQUNzQixPQUFPLEdBQUdVLFVBQVU7UUFDMUMzQixxQkFBcUIsQ0FBQzJCLFVBQVUsQ0FBQztNQUNuQztNQUVBLElBQUlPLFlBQVksSUFBSXBELGdCQUFnQixFQUFFO1FBQ3BDQSxnQkFBZ0IsQ0FBQyxDQUFDO01BQ3BCO01BRUFnQyxZQUFZLENBQUNlLFNBQVMsQ0FBQztJQUN6QixDQUFDLENBQUM7RUFDSixDQUFDLEVBQ0QsQ0FBQy9DLGdCQUFnQixFQUFFZ0MsWUFBWSxDQUNqQyxDQUFDOztFQUVEO0VBQ0EsSUFBTXNCLGNBQWMsR0FBR3hSLE1BQU0sQ0FBQytQLFdBQVcsQ0FBQztFQUMxQyxJQUFNMEIsaUJBQWlCLEdBQUd6UixNQUFNLENBQUNtUSxjQUFjLENBQUM7RUFDaEQsSUFBTXVCLHFCQUFxQixHQUFHMVIsTUFBTSxDQUFDaU8sa0JBQWtCLENBQUM7O0VBRXhEO0VBQ0F1RCxjQUFjLENBQUNuQixPQUFPLEdBQUdOLFdBQVc7RUFDcEMwQixpQkFBaUIsQ0FBQ3BCLE9BQU8sR0FBR0YsY0FBYztFQUMxQ3VCLHFCQUFxQixDQUFDckIsT0FBTyxHQUFHcEMsa0JBQWtCO0VBRWxEbE8sU0FBUyxDQUFDLFlBQU07SUFDZCxJQUFJMlIscUJBQXFCLENBQUNyQixPQUFPLEVBQUU7TUFDakNxQixxQkFBcUIsQ0FBQ3JCLE9BQU8sQ0FBQ21CLGNBQWMsQ0FBQ25CLE9BQU8sRUFBRW9CLGlCQUFpQixDQUFDcEIsT0FBTyxFQUFFVixlQUFlLEVBQUVDLFNBQVMsQ0FBQztJQUM5RztFQUNGLENBQUMsRUFBRSxDQUFDRCxlQUFlLEVBQUVDLFNBQVMsQ0FBQyxDQUFDO0VBRWhDN1AsU0FBUyxDQUFDLFlBQU07SUFDZDRPLGdCQUFnQixDQUFDMEIsT0FBTyxHQUFHWCxxQkFBcUI7RUFDbEQsQ0FBQyxFQUFFLENBQUNBLHFCQUFxQixDQUFDLENBQUM7O0VBRTNCO0VBQ0EzUCxTQUFTLENBQUMsWUFBTTtJQUNkLElBQUk0UCxlQUFlLEVBQUU7TUFDbkJmLGdCQUFnQixDQUFDeUIsT0FBTyxHQUFHLEtBQUs7TUFDaEN4QixrQkFBa0IsQ0FBQ3dCLE9BQU8sR0FBRyxFQUFFO0lBQ2pDO0VBQ0YsQ0FBQyxFQUFFLENBQUNWLGVBQWUsQ0FBQyxDQUFDO0VBRXJCNVAsU0FBUyxDQUFDLFlBQU07SUFDZCxJQUFJLENBQUMyTyxrQkFBa0IsQ0FBQzJCLE9BQU8sRUFBRTtNQUMvQjNCLGtCQUFrQixDQUFDMkIsT0FBTyxHQUFHLElBQUk7TUFDakNKLGNBQWMsQ0FBQyxDQUFDO0lBQ2xCO0VBQ0YsQ0FBQyxFQUFFLEVBQUUsQ0FBQzs7RUFFTjtFQUNBO0VBQ0E7RUFDQWxRLFNBQVMsQ0FBQyxZQUFNO0lBQ2QsSUFBSSxDQUFDME8sV0FBVyxDQUFDNEIsT0FBTyxJQUFJWixlQUFlLElBQUlDLHFCQUFxQixFQUFFO01BQ3BFLE9BQU9ILFNBQVM7SUFDbEI7SUFFQSxJQUFNb0MsV0FBVyxHQUFHbkMsUUFBUSxDQUFDQSxRQUFRLENBQUN2RSxNQUFNLEdBQUcsQ0FBQyxDQUFDO0lBQ2pELElBQU0yRyxXQUFXLEdBQUdELFdBQVcsS0FBS0EsV0FBVyxDQUFDak0sRUFBRSxDQUFDK0YsVUFBVSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQ2tHLFdBQVcsQ0FBQ3RKLFFBQVEsQ0FBQztJQUVyRyxJQUFJLENBQUN1SixXQUFXLEVBQUU7TUFDaEIsT0FBT3JDLFNBQVM7SUFDbEI7SUFFQSxJQUFNMEIsU0FBUyxHQUFHeEMsV0FBVyxDQUFDNEIsT0FBTztJQUNyQyxJQUFNd0IsVUFBVSxHQUFHWixTQUFTLENBQUNULFlBQVksR0FBR1MsU0FBUyxDQUFDTCxTQUFTLElBQUlLLFNBQVMsQ0FBQ0osWUFBWSxHQUFHLEdBQUc7SUFFL0YsSUFBSSxFQUFFZ0IsVUFBVSxJQUFJLENBQUNqRCxnQkFBZ0IsQ0FBQ3lCLE9BQU8sQ0FBQyxFQUFFO01BQzlDLE9BQU9kLFNBQVM7SUFDbEI7SUFFQSxJQUFNdUMsY0FBYyxHQUFHLFNBQWpCQSxjQUFjQSxDQUFBLEVBQVM7TUFDM0IsSUFBSXJELFdBQVcsQ0FBQzRCLE9BQU8sRUFBRTtRQUN2QjVCLFdBQVcsQ0FBQzRCLE9BQU8sQ0FBQ08sU0FBUyxHQUFHbkMsV0FBVyxDQUFDNEIsT0FBTyxDQUFDRyxZQUFZO01BQ2xFO0lBQ0YsQ0FBQzs7SUFFRDtJQUNBWSxxQkFBcUIsQ0FBQyxZQUFNO01BQzFCVSxjQUFjLENBQUMsQ0FBQztNQUNoQlYscUJBQXFCLENBQUMsWUFBTTtRQUMxQlUsY0FBYyxDQUFDLENBQUM7UUFDaEJwQixVQUFVLENBQUNvQixjQUFjLEVBQUUsR0FBRyxDQUFDO01BQ2pDLENBQUMsQ0FBQztJQUNKLENBQUMsQ0FBQztJQUVGLE9BQU92QyxTQUFTO0VBQ2xCLENBQUMsRUFBRSxDQUFDQyxRQUFRLEVBQUVDLGVBQWUsRUFBRUMscUJBQXFCLENBQUMsQ0FBQztFQUV0RDNQLFNBQVMsQ0FBQyxZQUFNO0lBQ2Q7SUFDQSxJQUFJNk8sZ0JBQWdCLENBQUN5QixPQUFPLElBQUlWLGVBQWUsRUFBRTtNQUMvQztJQUNGO0lBRUEsSUFBSUEsZUFBZSxJQUFJbEIsV0FBVyxDQUFDNEIsT0FBTyxFQUFFO01BQzFDZSxxQkFBcUIsQ0FBQyxZQUFNO1FBQzFCLElBQUkzQyxXQUFXLENBQUM0QixPQUFPLEVBQUU7VUFDdkI1QixXQUFXLENBQUM0QixPQUFPLENBQUNPLFNBQVMsR0FBR25DLFdBQVcsQ0FBQzRCLE9BQU8sQ0FBQ0csWUFBWTtVQUNoRSxJQUFBdUIscUJBQUEsR0FBa0R0RCxXQUFXLENBQUM0QixPQUFPO1lBQTdETyxTQUFTLEdBQUFtQixxQkFBQSxDQUFUbkIsU0FBUztZQUFFSixZQUFZLEdBQUF1QixxQkFBQSxDQUFadkIsWUFBWTtZQUFFSyxZQUFZLEdBQUFrQixxQkFBQSxDQUFabEIsWUFBWTtVQUM3QyxJQUFNQyxrQkFBa0IsR0FBR04sWUFBWSxHQUFHSSxTQUFTLEdBQUdDLFlBQVk7VUFDbEUsSUFBTUUsVUFBVSxHQUFHRCxrQkFBa0IsR0FBRyxFQUFFO1VBQzFDL0IscUJBQXFCLENBQUNzQixPQUFPLEdBQUdVLFVBQVU7VUFDMUMzQixxQkFBcUIsQ0FBQzJCLFVBQVUsQ0FBQztRQUNuQztNQUNGLENBQUMsQ0FBQztNQUNGO0lBQ0Y7SUFFQSxJQUFJLENBQUN0QyxXQUFXLENBQUM0QixPQUFPLElBQUlaLGVBQWUsSUFBSUMscUJBQXFCLElBQUlmLGdCQUFnQixDQUFDMEIsT0FBTyxFQUFFO0lBRWxHLElBQU1ZLFNBQVMsR0FBR3hDLFdBQVcsQ0FBQzRCLE9BQU87SUFDckMsSUFBTXNCLFdBQVcsR0FBR25DLFFBQVEsQ0FBQ0EsUUFBUSxDQUFDdkUsTUFBTSxHQUFHLENBQUMsQ0FBQztJQUVqRCxJQUFNK0csa0JBQWtCLEdBQUdMLFdBQVcsSUFBSUEsV0FBVyxDQUFDak0sRUFBRSxDQUFDK0YsVUFBVSxDQUFDLFNBQVMsQ0FBQztJQUM5RSxJQUFNd0csZ0JBQWdCLEdBQUdOLFdBQVcsSUFBSUEsV0FBVyxDQUFDak0sRUFBRSxDQUFDK0YsVUFBVSxDQUFDLFdBQVcsQ0FBQztJQUM5RSxJQUFNeUcsb0JBQW9CLEdBQUdQLFdBQVcsS0FBS0EsV0FBVyxDQUFDak0sRUFBRSxDQUFDK0YsVUFBVSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQ2tHLFdBQVcsQ0FBQ3RKLFFBQVEsQ0FBQztJQUM5RyxJQUFNd0osVUFBVSxHQUFHWixTQUFTLENBQUNULFlBQVksR0FBR1MsU0FBUyxDQUFDTCxTQUFTLElBQUlLLFNBQVMsQ0FBQ0osWUFBWSxHQUFHLEdBQUc7SUFDL0YsSUFBTXNCLFdBQVcsR0FBRyxDQUFDLENBQUMzQyxRQUFRLENBQUN2RSxNQUFNO0lBQ3JDLElBQU1tSCxtQkFBbUIsR0FBRyxDQUFDNUMsUUFBUSxDQUFDN0QsSUFBSSxDQUFDLFVBQUEwRyxHQUFHO01BQUEsT0FBSUEsR0FBRyxDQUFDM00sRUFBRSxLQUFLLHNCQUFzQjtJQUFBLEVBQUM7SUFFcEYsSUFBSSxDQUFDc00sa0JBQWtCLElBQUlDLGdCQUFnQixJQUFJQyxvQkFBb0IsS0FBS0wsVUFBVSxFQUFFO01BQ2xGO01BQ0EsSUFBTVMsV0FBVyxHQUFHSixvQkFBb0IsR0FBRyxHQUFHLEdBQUcsQ0FBQztNQUNsRCxJQUFNSyxRQUFRLEdBQUcsU0FBWEEsUUFBUUEsQ0FBQSxFQUFTO1FBQ3JCbkIscUJBQXFCLENBQUMsWUFBTTtVQUMxQixJQUFJM0MsV0FBVyxDQUFDNEIsT0FBTyxFQUFFO1lBQ3ZCNUIsV0FBVyxDQUFDNEIsT0FBTyxDQUFDTyxTQUFTLEdBQUduQyxXQUFXLENBQUM0QixPQUFPLENBQUNHLFlBQVk7WUFDaEUsSUFBQWdDLHFCQUFBLEdBQWtEL0QsV0FBVyxDQUFDNEIsT0FBTztjQUE3RE8sU0FBUyxHQUFBNEIscUJBQUEsQ0FBVDVCLFNBQVM7Y0FBRUosWUFBWSxHQUFBZ0MscUJBQUEsQ0FBWmhDLFlBQVk7Y0FBRUssWUFBWSxHQUFBMkIscUJBQUEsQ0FBWjNCLFlBQVk7WUFDN0MsSUFBTUMsa0JBQWtCLEdBQUdOLFlBQVksR0FBR0ksU0FBUyxHQUFHQyxZQUFZO1lBQ2xFLElBQU1FLFVBQVUsR0FBR0Qsa0JBQWtCLEdBQUcsRUFBRTtZQUMxQy9CLHFCQUFxQixDQUFDc0IsT0FBTyxHQUFHVSxVQUFVO1lBQzFDM0IscUJBQXFCLENBQUMyQixVQUFVLENBQUM7VUFDbkM7UUFDRixDQUFDLENBQUM7TUFDSixDQUFDO01BQ0QsSUFBSXVCLFdBQVcsR0FBRyxDQUFDLEVBQUU7UUFDbkI1QixVQUFVLENBQUM2QixRQUFRLEVBQUVELFdBQVcsQ0FBQztNQUNuQyxDQUFDLE1BQU07UUFDTEMsUUFBUSxDQUFDLENBQUM7TUFDWjtJQUNGLENBQUMsTUFBTSxJQUNMSixXQUFXLElBQ1hDLG1CQUFtQixJQUNuQixDQUFDSixrQkFBa0IsSUFDbkIsQ0FBQ0MsZ0JBQWdCLElBQ2pCLENBQUNDLG9CQUFvQixFQUNyQjtNQUNBZCxxQkFBcUIsQ0FBQyxZQUFNO1FBQzFCLElBQUkzQyxXQUFXLENBQUM0QixPQUFPLEVBQUU7VUFDdkI1QixXQUFXLENBQUM0QixPQUFPLENBQUNPLFNBQVMsR0FBR25DLFdBQVcsQ0FBQzRCLE9BQU8sQ0FBQ0csWUFBWTtVQUNoRSxJQUFBaUMscUJBQUEsR0FBa0RoRSxXQUFXLENBQUM0QixPQUFPO1lBQTdETyxTQUFTLEdBQUE2QixxQkFBQSxDQUFUN0IsU0FBUztZQUFFSixZQUFZLEdBQUFpQyxxQkFBQSxDQUFaakMsWUFBWTtZQUFFSyxZQUFZLEdBQUE0QixxQkFBQSxDQUFaNUIsWUFBWTtVQUM3QyxJQUFNQyxrQkFBa0IsR0FBR04sWUFBWSxHQUFHSSxTQUFTLEdBQUdDLFlBQVk7VUFDbEUsSUFBTUUsVUFBVSxHQUFHRCxrQkFBa0IsR0FBRyxFQUFFO1VBQzFDL0IscUJBQXFCLENBQUNzQixPQUFPLEdBQUdVLFVBQVU7VUFDMUMzQixxQkFBcUIsQ0FBQzJCLFVBQVUsQ0FBQztRQUNuQztNQUNGLENBQUMsQ0FBQztJQUNKO0VBQ0YsQ0FBQyxFQUFFLENBQUN2QixRQUFRLEVBQUVDLGVBQWUsRUFBRUMscUJBQXFCLEVBQUVDLGVBQWUsQ0FBQyxDQUFDOztFQUV2RTtFQUNBNVAsU0FBUyxDQUFDLFlBQU07SUFDZCxJQUFJME8sV0FBVyxDQUFDNEIsT0FBTyxJQUFJLENBQUNaLGVBQWUsRUFBRTtNQUMzQyxJQUFNd0IsU0FBUyxHQUFHeEMsV0FBVyxDQUFDNEIsT0FBTztNQUNyQyxJQUFRTyxTQUFTLEdBQWlDSyxTQUFTLENBQW5ETCxTQUFTO1FBQUVKLFlBQVksR0FBbUJTLFNBQVMsQ0FBeENULFlBQVk7UUFBRUssWUFBWSxHQUFLSSxTQUFTLENBQTFCSixZQUFZO01BQzdDLElBQU1DLGtCQUFrQixHQUFHTixZQUFZLEdBQUdJLFNBQVMsR0FBR0MsWUFBWTtNQUNsRSxJQUFNRSxVQUFVLEdBQUdELGtCQUFrQixHQUFHLEVBQUU7TUFDMUMvQixxQkFBcUIsQ0FBQ3NCLE9BQU8sR0FBR1UsVUFBVTtNQUMxQzNCLHFCQUFxQixDQUFDMkIsVUFBVSxDQUFDO0lBQ25DO0VBQ0YsQ0FBQyxFQUFFLENBQUN0QixlQUFlLEVBQUVELFFBQVEsQ0FBQ3ZFLE1BQU0sQ0FBQyxDQUFDOztFQUV0QztFQUNBLElBQU15SCxlQUFlLEdBQUdsRCxRQUFRLENBQzdCMUUsTUFBTSxDQUFDLFVBQUF1SCxHQUFHO0lBQUEsT0FBSUEsR0FBRyxDQUFDbkssSUFBSSxLQUFLdEgsZUFBZSxDQUFDOEksSUFBSSxJQUFJMkksR0FBRyxDQUFDM0ssSUFBSSxDQUFDaEMsRUFBRSxLQUFLbUMsUUFBUSxDQUFDbkMsRUFBRSxDQUFDaUUsUUFBUSxDQUFDLENBQUM7RUFBQSxFQUFDLENBQzFGZ0osRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0VBRVQsSUFBTUMsY0FBYyxHQUNqQkMsS0FBSyxDQUFDQyxPQUFPLENBQUNKLGVBQWUsYUFBZkEsZUFBZSx1QkFBZkEsZUFBZSxDQUFFdEssV0FBVyxDQUFDLElBQUlzSyxlQUFlLENBQUN0SyxXQUFXLENBQUM2QyxNQUFNLElBQ2pGNEgsS0FBSyxDQUFDQyxPQUFPLENBQUNKLGVBQWUsYUFBZkEsZUFBZSx1QkFBZkEsZUFBZSxDQUFFdkssT0FBTyxDQUFDLElBQUl1SyxlQUFlLENBQUN2SyxPQUFPLENBQUM4QyxNQUFPO0VBRTdFLElBQU04SCxnQkFBZ0IsR0FBRyxDQUFDLENBQUNyRyxRQUFRO0VBRW5DLElBQU1zRyxlQUFlLGdCQUNuQmpRLEtBQUEsQ0FBQUUsU0FBQTtJQUFBVyxRQUFBLEdBQ0c4TCxxQkFBcUIsaUJBQUk3TSxJQUFBLENBQUM1QixXQUFXO01BQUNnUyxJQUFJLEVBQUU1RSxDQUFDLENBQUMsa0JBQWtCO0lBQUUsQ0FBRSxDQUFDLEVBQ3JFbUIsUUFBUSxDQUFDakssR0FBRyxDQUFDLFVBQUNvQyxPQUFPLEVBQUV1RCxLQUFLLEVBQUs7TUFBQSxJQUFBZ0ksb0JBQUEsRUFBQUMsZ0JBQUEsRUFBQUMsZ0JBQUE7TUFDaEMsSUFDRSxFQUFFLENBQUFGLG9CQUFBLEdBQUF2TCxPQUFPLENBQUNTLFdBQVcsY0FBQThLLG9CQUFBLGVBQW5CQSxvQkFBQSxDQUFxQmpJLE1BQU0sS0FBQWtJLGdCQUFBLEdBQUl4TCxPQUFPLENBQUNRLE9BQU8sY0FBQWdMLGdCQUFBLGVBQWZBLGdCQUFBLENBQWlCbEksTUFBTSxDQUFDLElBQ3pELENBQUN0RCxPQUFPLENBQUNBLE9BQU8sSUFDaEIsR0FBQXlMLGdCQUFBLEdBQUN6TCxPQUFPLENBQUMwTCxPQUFPLGNBQUFELGdCQUFBLGVBQWZBLGdCQUFBLENBQWlCeE4sSUFBSSxLQUN0QixDQUFDK0IsT0FBTyxDQUFDVSxRQUFRLEVBRWpCLE9BQU8sSUFBSTtNQUNiLElBQU1pTCxlQUFlLEdBQ25CLENBQUEzTCxPQUFPLGFBQVBBLE9BQU8sdUJBQVBBLE9BQU8sQ0FBRTRMLFVBQVUsTUFBS2hFLFNBQVMsSUFBSTVILE9BQU8sQ0FBQzRMLFVBQVUsS0FBSyxJQUFJLEdBQzVELElBQUksR0FDSjVMLE9BQU8sQ0FBQzRMLFVBQVUsR0FDaEIvUSxRQUFRLENBQUNnUixTQUFTLEdBQ2xCaFIsUUFBUSxDQUFDaVIsV0FBVztNQUU1QixJQUFNQyxrQkFBa0IsR0FBRy9MLE9BQU8sQ0FBQ08sSUFBSSxLQUFLdEgsZUFBZSxDQUFDaUosU0FBUyxJQUFJbEMsT0FBTyxDQUFDRCxJQUFJLENBQUNoQyxFQUFFLEtBQUssV0FBVztNQUN4RyxJQUFNaU8sYUFBYSxHQUFHekksS0FBSyxLQUFLc0UsUUFBUSxDQUFDdkUsTUFBTSxHQUFHLENBQUM7TUFDbkQsSUFBTW9DLFdBQVcsR0FBR3FHLGtCQUFrQixJQUFJQyxhQUFhLEtBQUtoRSxlQUFlLElBQUlDLFNBQVMsQ0FBQztNQUV6RixvQkFDRXhQLGNBQUEsQ0FBQ21ILFdBQVcsRUFBQS9DLGFBQUEsQ0FBQUEsYUFBQSxLQUNObUQsT0FBTztRQUNYaU0sR0FBRyxFQUFFak0sT0FBTyxDQUFDakMsRUFBRSxJQUFJLElBQUksTUFBQXVELE1BQUEsQ0FBTXRCLE9BQU8sQ0FBQ2pDLEVBQUUsT0FBQXVELE1BQUEsQ0FBSXRCLE9BQU8sQ0FBQ2tNLElBQUksV0FBQTVLLE1BQUEsQ0FBWWlDLEtBQUssQ0FBRztRQUMzRXJELFFBQVEsRUFBRUEsUUFBUztRQUNuQjdDLGtCQUFrQixFQUFFQSxrQkFBbUI7UUFDdkMrQyxjQUFjLEVBQUVBLGNBQWU7UUFDL0JDLHNCQUFzQixFQUFFQSxzQkFBdUI7UUFDL0NDLGVBQWUsRUFBRXFMLGVBQWdCO1FBQ2pDakcsV0FBVyxFQUFFQSxXQUFZO1FBQ3pCWCxRQUFRLEVBQUVBO01BQVMsRUFDcEIsQ0FBQztJQUVOLENBQUMsQ0FBQyxFQUNELENBQUNpRCxlQUFlLElBQUlFLGNBQWMsSUFBSWlFLE1BQU0sQ0FBQ0MsSUFBSSxDQUFDakUsY0FBYyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM3RSxNQUFNLEdBQUcsQ0FBQyxrQkFDakZsSSxLQUFBLENBQUNsQix1QkFBdUI7TUFBQStCLFFBQUEsR0FDckIsQ0FBQytMLGVBQWUsSUFBSUUsY0FBYyxrQkFDakNoTixJQUFBLENBQUM1QixXQUFXO1FBQ1ZnUyxJQUFJLEVBQ0ZwRCxjQUFjLEtBQ2J0QixpQkFBaUIsR0FDZCxvQkFBb0IsR0FDcEJDLGtCQUFrQixHQUNoQkgsQ0FBQyxDQUFDLDJCQUEyQixDQUFDLEdBQzlCdUUsY0FBYyxHQUNadkUsQ0FBQyxDQUFDLDJCQUEyQixDQUFDLEdBQzlCQSxDQUFDLENBQUMsaUJBQWlCLENBQUM7TUFDN0IsQ0FDRixDQUNGLEVBQ0F5RixNQUFNLENBQUNFLE9BQU8sQ0FBQ2xFLGNBQWMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDdkssR0FBRyxDQUFDLFVBQUEwTyxLQUFBO1FBQUEsSUFBQUMsS0FBQSxHQUFBM1EsY0FBQSxDQUFBMFEsS0FBQTtVQUFFN0gsUUFBUSxHQUFBOEgsS0FBQTtVQUFFdk0sT0FBTyxHQUFBdU0sS0FBQTtRQUFBLG9CQUMzRHJSLElBQUEsQ0FBQzVCLFdBQVc7VUFBNkJnUyxJQUFJLEVBQUV0TDtRQUFRLGNBQUFzQixNQUFBLENBQTFCbUQsUUFBUSxDQUFvQixDQUFDO01BQUEsQ0FDM0QsQ0FBQztJQUFBLENBQ3FCLENBQzFCO0VBQUEsQ0FDRCxDQUNIO0VBRUQsb0JBQ0VySixLQUFBLENBQUNyQixlQUFlO0lBQUN5UyxlQUFlLEVBQUVwQixnQkFBaUI7SUFBQW5QLFFBQUEsR0FDaERtUCxnQkFBZ0IsZ0JBQ2ZsUSxJQUFBLENBQUNsQixnQkFBZ0I7TUFBQ3lTLEdBQUcsRUFBRTNGLFdBQVk7TUFBQzRGLFFBQVEsRUFBRXJELG9CQUFxQjtNQUFBcE4sUUFBQSxlQUNqRWYsSUFBQSxDQUFDakIsZUFBZTtRQUFDdVMsZUFBZSxFQUFFcEIsZ0JBQWlCO1FBQUFuUCxRQUFBLEVBQUVvUDtNQUFlLENBQWtCO0lBQUMsQ0FDdkUsQ0FBQyxnQkFFbkJuUSxJQUFBLENBQUNqQixlQUFlO01BQUN3UyxHQUFHLEVBQUUzRixXQUFZO01BQUM0RixRQUFRLEVBQUVyRCxvQkFBcUI7TUFBQ21ELGVBQWUsRUFBRSxLQUFNO01BQUF2USxRQUFBLEVBQ3ZGb1A7SUFBZSxDQUNELENBQ2xCLEVBRUE3RCxrQkFBa0IsaUJBQ2pCdE0sSUFBQSxDQUFDcEIsb0JBQW9CO01BQUNvQyxJQUFJLEVBQUMsUUFBUTtNQUFDOEIsT0FBTyxFQUFFeUsseUJBQTBCO01BQUF4TSxRQUFBLGVBQ3JFZixJQUFBLENBQUN0QyxjQUFjO1FBQUMrVCxLQUFLLEVBQUMsTUFBTTtRQUFDeFEsS0FBSyxFQUFDLE1BQU07UUFBQ0MsTUFBTSxFQUFDO01BQU0sQ0FBRTtJQUFDLENBQ3RDLENBQ3ZCLEVBRUEwTCxlQUFlLGlCQUFJNU0sSUFBQSxDQUFDM0IsTUFBTSxJQUFFLENBQUM7RUFBQSxDQUNmLENBQUM7QUFFdEIsQ0FBQztBQUVELE9BQU8sSUFBTXFULGNBQWMsZ0JBQUcxVSxLQUFLLENBQUNDLElBQUksQ0FBQzhOLG1CQUFtQixDQUFDIiwiaWdub3JlTGlzdCI6W119