@projectcor/maia-components 2.11.11-7 → 2.11.11

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 (63) hide show
  1. package/lib/components/atoms/ChatClientSelector/ChatClientSelector.js +2 -1
  2. package/lib/components/atoms/Chip/styles.js +2 -2
  3. package/lib/components/atoms/EntitySelector/EntitySelector.js +19 -5
  4. package/lib/components/atoms/EntitySelector/EntitySelector.styles.js +8 -2
  5. package/lib/components/atoms/EntitySelector/index.js +1 -1
  6. package/lib/components/atoms/FrequentlyAskedQuestions/FrequentlyAskedQuestions.js +56 -78
  7. package/lib/components/atoms/FrequentlyAskedQuestions/FrequentlyAskedQuestions.styles.js +7 -67
  8. package/lib/components/atoms/MAIAInput/MAIAInput.js +18 -122
  9. package/lib/components/atoms/MAIAInput/styles.js +11 -27
  10. package/lib/components/atoms/ProjectSelector/ProjectSelector.js +2 -1
  11. package/lib/components/atoms/index.js +1 -2
  12. package/lib/components/molecules/ChatAIClientSelector/ChatAIClientSelector.js +2 -8
  13. package/lib/components/molecules/ChatAIMessages/ChatAIMessages.js +1 -1
  14. package/lib/components/molecules/ChatAIModal/ChatAIModal.js +6 -12
  15. package/lib/components/molecules/ChatAIModal/components/ChatAiModalFooter/ChatAiModalFooter.js +4 -77
  16. package/lib/components/molecules/ChatAIModal/components/ChatAiModalFooter/ChatAiModalFooter.styles.js +2 -10
  17. package/lib/components/molecules/ChatFooter/ChatFooter.js +7 -24
  18. package/lib/components/molecules/ChatFooter/styles.js +1 -5
  19. package/lib/components/molecules/Sidebar/Sidebar.js +8 -2
  20. package/lib/hooks/useChatManager/useChatManager.interface.js +1 -1
  21. package/lib/hooks/useChatManager/useChatManager.js +25 -17
  22. package/lib/hooks/useChatMessages/useChatMessages.js +136 -158
  23. package/lib/hooks/useChats/useChats.js +10 -6
  24. package/lib/hooks/useFrequentlyAskedQuestions.js +53 -68
  25. package/lib/hooks/useProjectSearch.js +15 -8
  26. package/lib/hooks/useRecentClientsSearch.js +15 -11
  27. package/lib/lang/br/index.js +2 -15
  28. package/lib/lang/en/index.js +2 -15
  29. package/lib/lang/es/index.js +2 -15
  30. package/lib/services/maia/Agents/getAgents.js +6 -5
  31. package/lib/services/maia/Chats/getChatMessages.js +5 -4
  32. package/lib/services/maia/Chats/getChatsByUserId.js +4 -3
  33. package/lib/store/chatsStore.types.js +1 -1
  34. package/lib/store/index.js +1 -2
  35. package/lib/store/useChatsStore.js +9 -7
  36. package/lib/types/FrequentlyAskedQuestion.js +1 -1
  37. package/lib/types/agent.js +1 -1
  38. package/package.json +1 -1
  39. package/lib/components/atoms/ChatDisclaimerMessage/ChatDisclaimerMessage.js +0 -9
  40. package/lib/components/atoms/ChatDisclaimerMessage/index.js +0 -2
  41. package/lib/components/atoms/ChatDisclaimerMessage/styles.js +0 -6
  42. package/lib/components/atoms/SlashCommandDropdown/CategoryStepRegistry.js +0 -5
  43. package/lib/components/atoms/SlashCommandDropdown/SlashCommandDropdown.js +0 -56
  44. package/lib/components/atoms/SlashCommandDropdown/SlashCommandList.js +0 -26
  45. package/lib/components/atoms/SlashCommandDropdown/index.js +0 -2
  46. package/lib/components/atoms/SlashCommandDropdown/steps/TaskStepSelector.js +0 -208
  47. package/lib/components/atoms/SlashCommandDropdown/steps/index.js +0 -2
  48. package/lib/components/atoms/SlashCommandDropdown/styles.js +0 -50
  49. package/lib/components/atoms/SlashCommandDropdown/types.js +0 -2
  50. package/lib/components/molecules/ChatFooter/ChatFooterFaqs.js +0 -156
  51. package/lib/components/molecules/ChatFooter/ChatFooterFaqs.styles.js +0 -51
  52. package/lib/hooks/useFrequentlyUsedActions.js +0 -73
  53. package/lib/hooks/useSlashCommands.js +0 -73
  54. package/lib/services/cor/getProjectTasks.js +0 -71
  55. package/lib/services/maia/FrequentlyUsedActions/getFrequentlyUsedActions.js +0 -48
  56. package/lib/services/maia/FrequentlyUsedActions/index.js +0 -5
  57. package/lib/services/maia/SlashCommands/getSlashCommands.js +0 -48
  58. package/lib/services/maia/SlashCommands/index.js +0 -5
  59. package/lib/services/query/getTaskFamilyProjectsQuery.js +0 -5
  60. package/lib/store/faqsStore.types.js +0 -2
  61. package/lib/store/useFaqsStore.js +0 -27
  62. package/lib/types/FrequentlyUsedAction.js +0 -2
  63. package/lib/types/SlashCommand.js +0 -2
@@ -14,6 +14,7 @@ import { useT } from '../useT';
14
14
  import { useUser } from '../../context/cor-user';
15
15
  import { useTabTaskDefault } from '../useTabTaskDefault';
16
16
  import { TASK_URL_REGEX_PATTERN } from '../../constants/taskUrls';
17
+ import { mapCORLang } from '../../lang/utils';
17
18
  var rewriteTaskUrlsInContent = function rewriteTaskUrlsInContent(content, tabSegment) {
18
19
  var taskUrlRegex = new RegExp(TASK_URL_REGEX_PATTERN, 'g');
19
20
  return content.replace(taskUrlRegex, function (url) {
@@ -29,7 +30,8 @@ export var useChatMessages = function useChatMessages(_ref) {
29
30
  _ref$agents = _ref.agents,
30
31
  agents = _ref$agents === void 0 ? [] : _ref$agents;
31
32
  var _useT = useT(),
32
- t = _useT.t;
33
+ t = _useT.t,
34
+ i18n = _useT.i18n;
33
35
  var user = useUser();
34
36
  var userPermissions = user === null || user === void 0 || (_user$permissions = user.permissions) === null || _user$permissions === void 0 ? void 0 : _user$permissions.ai_agents;
35
37
  var _useState = useState(false),
@@ -70,23 +72,90 @@ export var useChatMessages = function useChatMessages(_ref) {
70
72
  var isLoadingRef = useRef(false);
71
73
  var initialLoadDone = useRef(false);
72
74
  var previousChatId = useRef(chatId);
73
- var loadMessages = useCallback(/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee() {
74
- var _yield$maia$Chats$get, items, nextItem, agentDeleted, agentNoPermission, hasAgentAccess, hasAgentPermission, projectIdMessage, projectNameFromSession, projectDeleted, clientIdFromSession, clientNameFromSession, agentInList, projects, hasMultiAgentsAccess, projectIdNum, foundProject, _foundProject$client, chipsData, _chipsData, contextProjectId, itemsToSet, tab, tabSegment, _t;
75
- return _regeneratorRuntime.wrap(function (_context) {
76
- while (1) switch (_context.prev = _context.next) {
75
+ var setConversationContextFromMetadata = useCallback(/*#__PURE__*/function () {
76
+ var _ref3 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee(_ref2) {
77
+ var projectIdMessage, projectNameFromSession, clientIdFromSession, clientNameFromSession, projects, hasMultiAgentsAccess, projectIdNum, foundProject, _foundProject$client;
78
+ return _regeneratorRuntime.wrap(function (_context) {
79
+ while (1) switch (_context.prev = _context.next) {
80
+ case 0:
81
+ projectIdMessage = _ref2.projectIdMessage, projectNameFromSession = _ref2.projectNameFromSession, clientIdFromSession = _ref2.clientIdFromSession, clientNameFromSession = _ref2.clientNameFromSession;
82
+ if (!(clientIdFromSession != null && clientNameFromSession)) {
83
+ _context.next = 1;
84
+ break;
85
+ }
86
+ setClient({
87
+ id: Number(clientIdFromSession),
88
+ name: clientNameFromSession
89
+ });
90
+ setChipsProject(null);
91
+ setProject(null);
92
+ return _context.abrupt("return");
93
+ case 1:
94
+ _context.next = 2;
95
+ return fetchProjects(projectIdMessage);
96
+ case 2:
97
+ projects = _context.sent;
98
+ hasMultiAgentsAccess = !!window.MAIA_CHAT_AI_FEATURE_ACCESS_MULTI_AGENTS;
99
+ if (projectIdMessage && hasMultiAgentsAccess) {
100
+ projectIdNum = Number(projectIdMessage);
101
+ foundProject = projects === null || projects === void 0 ? void 0 : projects.find(function (p) {
102
+ return Number(p.id) === projectIdNum;
103
+ });
104
+ if (foundProject) {
105
+ setChipsProject({
106
+ projectName: foundProject.name,
107
+ clientName: ((_foundProject$client = foundProject.client) === null || _foundProject$client === void 0 ? void 0 : _foundProject$client.name) || '',
108
+ projectId: String(foundProject.id)
109
+ });
110
+ setProject(foundProject);
111
+ } else if (projectNameFromSession) {
112
+ setChipsProject({
113
+ projectName: projectNameFromSession,
114
+ clientName: '',
115
+ projectId: String(projectIdMessage)
116
+ });
117
+ setProject({
118
+ id: projectIdNum,
119
+ name: projectNameFromSession
120
+ });
121
+ } else {
122
+ setChipsProject(null);
123
+ setProject(null);
124
+ }
125
+ setClient === null || setClient === void 0 || setClient(null);
126
+ } else {
127
+ setChipsProject(null);
128
+ setProject(null);
129
+ setClient === null || setClient === void 0 || setClient(null);
130
+ }
131
+ case 3:
132
+ case "end":
133
+ return _context.stop();
134
+ }
135
+ }, _callee);
136
+ }));
137
+ return function (_x) {
138
+ return _ref3.apply(this, arguments);
139
+ };
140
+ }(), [fetchProjects, setClient, setChipsProject, setProject]);
141
+ var loadMessages = useCallback(/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee2() {
142
+ var _yield$maia$Chats$get, items, nextItem, agentDeleted, agentNoPermission, hasAgentAccess, hasAgentPermission, projectIdMessage, projectNameFromSession, projectDeleted, clientIdFromSession, clientNameFromSession, agentInList, contextProjectId, itemsToSet, tab, tabSegment, _t;
143
+ return _regeneratorRuntime.wrap(function (_context2) {
144
+ while (1) switch (_context2.prev = _context2.next) {
77
145
  case 0:
78
- _context.prev = 0;
146
+ _context2.prev = 0;
79
147
  setLoadingMessages(true);
80
148
  initialLoadDone.current = false;
81
- _context.next = 1;
149
+ _context2.next = 1;
82
150
  return maia.Chats.getChatMessages({
83
151
  chatId: chatId,
84
152
  currentUser: currentUser,
85
153
  offset: lastEvaluatedKey,
86
- cancelledText: t('chat.cancelled')
154
+ cancelledText: t('chat.cancelled'),
155
+ lang: mapCORLang(i18n.language)
87
156
  });
88
157
  case 1:
89
- _yield$maia$Chats$get = _context.sent;
158
+ _yield$maia$Chats$get = _context2.sent;
90
159
  items = _yield$maia$Chats$get.items;
91
160
  nextItem = _yield$maia$Chats$get.nextItem;
92
161
  agentDeleted = _yield$maia$Chats$get.agentDeleted;
@@ -187,200 +256,109 @@ export var useChatMessages = function useChatMessages(_ref) {
187
256
  });
188
257
  }
189
258
  }
190
-
191
- // Conversación con client_metadata: setear cliente y limpiar proyecto
192
- if (!(clientIdFromSession != null && clientNameFromSession)) {
193
- _context.next = 2;
194
- break;
195
- }
196
- setClient({
197
- id: Number(clientIdFromSession),
198
- name: clientNameFromSession
259
+ _context2.next = 2;
260
+ return setConversationContextFromMetadata({
261
+ projectIdMessage: projectIdMessage,
262
+ projectNameFromSession: projectNameFromSession,
263
+ clientIdFromSession: clientIdFromSession,
264
+ clientNameFromSession: clientNameFromSession
199
265
  });
200
- setChipsProject(null);
201
- setProject(null);
202
- _context.next = 4;
203
- break;
204
266
  case 2:
205
- _context.next = 3;
206
- return fetchProjects(projectIdMessage);
207
- case 3:
208
- projects = _context.sent;
209
- hasMultiAgentsAccess = !!window.MAIA_CHAT_AI_FEATURE_ACCESS_MULTI_AGENTS;
210
- if (projectIdMessage && hasMultiAgentsAccess) {
211
- projectIdNum = Number(projectIdMessage);
212
- foundProject = projects === null || projects === void 0 ? void 0 : projects.find(function (p) {
213
- return Number(p.id) === projectIdNum;
214
- });
215
- if (foundProject) {
216
- chipsData = {
217
- projectName: foundProject.name,
218
- clientName: ((_foundProject$client = foundProject.client) === null || _foundProject$client === void 0 ? void 0 : _foundProject$client.name) || '',
219
- projectId: String(foundProject.id)
220
- };
221
- setChipsProject(chipsData);
222
- setProject(foundProject);
223
- } else if (projectIdMessage && projectNameFromSession) {
224
- _chipsData = {
225
- projectName: projectNameFromSession,
226
- clientName: '',
227
- projectId: String(projectIdMessage)
228
- };
229
- setChipsProject(_chipsData);
230
- setProject({
231
- id: Number(projectIdMessage),
232
- name: projectNameFromSession
233
- });
234
- } else {
235
- setChipsProject(null);
236
- setProject(null);
237
- }
238
- setClient === null || setClient === void 0 || setClient(null);
239
- } else {
240
- setChipsProject(null);
241
- setProject(null);
242
- setClient === null || setClient === void 0 || setClient(null);
243
- }
244
- case 4:
245
267
  // Si hay proyecto en la conversación, reescribir URLs de tareas con el tab del usuario (me)
246
268
  contextProjectId = projectIdMessage ? parseInt(String(projectIdMessage), 10) : null;
247
269
  itemsToSet = items;
248
270
  if (!contextProjectId) {
249
- _context.next = 6;
271
+ _context2.next = 4;
250
272
  break;
251
273
  }
252
- _context.next = 5;
274
+ _context2.next = 3;
253
275
  return getTabTaskDefault(1);
254
- case 5:
255
- tab = _context.sent;
276
+ case 3:
277
+ tab = _context2.sent;
256
278
  tabSegment = tab ? "/".concat(tab) : '/detail';
257
279
  itemsToSet = items.map(function (item) {
258
280
  return _objectSpread(_objectSpread({}, item), {}, {
259
281
  message: rewriteTaskUrlsInContent(item.message || '', tabSegment)
260
282
  });
261
283
  });
262
- case 6:
284
+ case 4:
263
285
  setMessages(itemsToSet);
264
286
  setLastEvaluatedKey(Number(nextItem));
265
287
  initialLoadDone.current = true;
266
- _context.next = 8;
288
+ _context2.next = 6;
267
289
  break;
268
- case 7:
269
- _context.prev = 7;
270
- _t = _context["catch"](0);
290
+ case 5:
291
+ _context2.prev = 5;
292
+ _t = _context2["catch"](0);
271
293
  onError === null || onError === void 0 || onError();
272
- case 8:
273
- _context.prev = 8;
294
+ case 6:
295
+ _context2.prev = 6;
274
296
  setLoadingMessages(false);
275
- return _context.finish(8);
276
- case 9:
297
+ return _context2.finish(6);
298
+ case 7:
277
299
  case "end":
278
- return _context.stop();
300
+ return _context2.stop();
279
301
  }
280
- }, _callee, null, [[0, 7, 8, 9]]);
281
- })), [chatId, currentUser, fetchProjects, setClient, onError, getTabTaskDefault]);
302
+ }, _callee2, null, [[0, 5, 6, 7]]);
303
+ })), [chatId, currentUser, setConversationContextFromMetadata, onError, getTabTaskDefault]);
282
304
  var loadMoreMessages = useCallback(/*#__PURE__*/function () {
283
- var _ref3 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee2(container) {
284
- var oldScrollHeight, oldScrollTop, _yield$maia$Chats$get2, items, nextItem, projectIdMessage, projectNameFromSession, clientIdFromSession, clientNameFromSession, projects, hasMultiAgentsAccess, projectIdNum, foundProject, _foundProject$client2, chipsData, _chipsData2, contextProjectId, itemsToMerge, tab, tabSegment, newMessages, _t2;
285
- return _regeneratorRuntime.wrap(function (_context2) {
286
- while (1) switch (_context2.prev = _context2.next) {
305
+ var _ref5 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee3(container) {
306
+ var oldScrollHeight, oldScrollTop, _yield$maia$Chats$get2, items, nextItem, projectIdMessage, projectNameFromSession, clientIdFromSession, clientNameFromSession, contextProjectId, itemsToMerge, tab, tabSegment, newMessages, _t2;
307
+ return _regeneratorRuntime.wrap(function (_context3) {
308
+ while (1) switch (_context3.prev = _context3.next) {
287
309
  case 0:
288
310
  if (!(isLoadingRef.current || !lastEvaluatedKey || !container)) {
289
- _context2.next = 1;
311
+ _context3.next = 1;
290
312
  break;
291
313
  }
292
- return _context2.abrupt("return");
314
+ return _context3.abrupt("return");
293
315
  case 1:
294
- _context2.prev = 1;
316
+ _context3.prev = 1;
295
317
  isLoadingRef.current = true;
296
318
  setIsLoadingMoreMessages(true);
297
319
  oldScrollHeight = container.scrollHeight;
298
320
  oldScrollTop = container.scrollTop;
299
- _context2.next = 2;
321
+ _context3.next = 2;
300
322
  return maia.Chats.getChatMessages({
301
323
  chatId: chatId,
302
324
  currentUser: currentUser,
303
- offset: lastEvaluatedKey
325
+ offset: lastEvaluatedKey,
326
+ lang: mapCORLang(i18n.language)
304
327
  });
305
328
  case 2:
306
- _yield$maia$Chats$get2 = _context2.sent;
329
+ _yield$maia$Chats$get2 = _context3.sent;
307
330
  items = _yield$maia$Chats$get2.items;
308
331
  nextItem = _yield$maia$Chats$get2.nextItem;
309
332
  projectIdMessage = _yield$maia$Chats$get2.projectId;
310
333
  projectNameFromSession = _yield$maia$Chats$get2.projectName;
311
334
  clientIdFromSession = _yield$maia$Chats$get2.clientId;
312
335
  clientNameFromSession = _yield$maia$Chats$get2.clientName;
313
- if (!(clientIdFromSession != null && clientNameFromSession)) {
314
- _context2.next = 3;
315
- break;
316
- }
317
- setClient({
318
- id: Number(clientIdFromSession),
319
- name: clientNameFromSession
336
+ _context3.next = 3;
337
+ return setConversationContextFromMetadata({
338
+ projectIdMessage: projectIdMessage,
339
+ projectNameFromSession: projectNameFromSession,
340
+ clientIdFromSession: clientIdFromSession,
341
+ clientNameFromSession: clientNameFromSession
320
342
  });
321
- setChipsProject(null);
322
- setProject(null);
323
- _context2.next = 5;
324
- break;
325
343
  case 3:
326
- _context2.next = 4;
327
- return fetchProjects(projectIdMessage);
328
- case 4:
329
- projects = _context2.sent;
330
- hasMultiAgentsAccess = !!window.MAIA_CHAT_AI_FEATURE_ACCESS_MULTI_AGENTS;
331
- if (projectIdMessage && hasMultiAgentsAccess) {
332
- projectIdNum = Number(projectIdMessage);
333
- foundProject = projects === null || projects === void 0 ? void 0 : projects.find(function (p) {
334
- return Number(p.id) === projectIdNum;
335
- });
336
- if (foundProject) {
337
- chipsData = {
338
- projectName: foundProject.name,
339
- clientName: ((_foundProject$client2 = foundProject.client) === null || _foundProject$client2 === void 0 ? void 0 : _foundProject$client2.name) || '',
340
- projectId: String(foundProject.id)
341
- };
342
- setChipsProject(chipsData);
343
- setProject(foundProject);
344
- } else if (projectNameFromSession) {
345
- _chipsData2 = {
346
- projectName: projectNameFromSession,
347
- clientName: '',
348
- projectId: String(projectIdMessage)
349
- };
350
- setChipsProject(_chipsData2);
351
- setProject({
352
- id: projectIdNum,
353
- name: projectNameFromSession
354
- });
355
- } else {
356
- setChipsProject(null);
357
- setProject(null);
358
- }
359
- setClient === null || setClient === void 0 || setClient(null);
360
- } else {
361
- setChipsProject(null);
362
- setProject(null);
363
- setClient === null || setClient === void 0 || setClient(null);
364
- }
365
- case 5:
366
344
  // Si hay proyecto en la conversación, reescribir URLs de tareas en los mensajes cargados
367
345
  contextProjectId = projectIdMessage ? parseInt(String(projectIdMessage), 10) : null;
368
346
  itemsToMerge = items;
369
347
  if (!contextProjectId) {
370
- _context2.next = 7;
348
+ _context3.next = 5;
371
349
  break;
372
350
  }
373
- _context2.next = 6;
351
+ _context3.next = 4;
374
352
  return getTabTaskDefault(1);
375
- case 6:
376
- tab = _context2.sent;
353
+ case 4:
354
+ tab = _context3.sent;
377
355
  tabSegment = tab ? "/".concat(tab) : '/detail';
378
356
  itemsToMerge = items.map(function (item) {
379
357
  return _objectSpread(_objectSpread({}, item), {}, {
380
358
  message: rewriteTaskUrlsInContent(item.message || '', tabSegment)
381
359
  });
382
360
  });
383
- case 7:
361
+ case 5:
384
362
  newMessages = [].concat(_toConsumableArray(messages.slice(0, 1)), _toConsumableArray(itemsToMerge), _toConsumableArray(messages.slice(1)));
385
363
  setMessages(newMessages);
386
364
  setLastEvaluatedKey(Number(nextItem));
@@ -394,27 +372,27 @@ export var useChatMessages = function useChatMessages(_ref) {
394
372
  }
395
373
  });
396
374
  });
397
- _context2.next = 9;
375
+ _context3.next = 7;
398
376
  break;
399
- case 8:
400
- _context2.prev = 8;
401
- _t2 = _context2["catch"](1);
377
+ case 6:
378
+ _context3.prev = 6;
379
+ _t2 = _context3["catch"](1);
402
380
  onError === null || onError === void 0 || onError();
403
- case 9:
404
- _context2.prev = 9;
381
+ case 7:
382
+ _context3.prev = 7;
405
383
  setIsLoadingMoreMessages(false);
406
384
  isLoadingRef.current = false;
407
- return _context2.finish(9);
408
- case 10:
385
+ return _context3.finish(7);
386
+ case 8:
409
387
  case "end":
410
- return _context2.stop();
388
+ return _context3.stop();
411
389
  }
412
- }, _callee2, null, [[1, 8, 9, 10]]);
390
+ }, _callee3, null, [[1, 6, 7, 8]]);
413
391
  }));
414
- return function (_x) {
415
- return _ref3.apply(this, arguments);
392
+ return function (_x2) {
393
+ return _ref5.apply(this, arguments);
416
394
  };
417
- }(), [chatId, currentUser, lastEvaluatedKey, onError, fetchProjects, setClient, messages, getTabTaskDefault]);
395
+ }(), [chatId, currentUser, lastEvaluatedKey, onError, messages, getTabTaskDefault, setConversationContextFromMetadata]);
418
396
  var handleScroll = useCallback(function (container) {
419
397
  if (!container || isLoadingRef.current || !initialLoadDone.current) return;
420
398
  var scrollTop = container.scrollTop,
@@ -512,4 +490,4 @@ export var useChatMessages = function useChatMessages(_ref) {
512
490
  handleScroll: handleScroll
513
491
  };
514
492
  };
515
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1c2VDYWxsYmFjayIsInVzZVN0YXRlIiwidXNlUmVmIiwidXNlRWZmZWN0IiwidXNlUHJvamVjdHMiLCJtYWlhIiwidXNlR2xvYmFsQ29udGV4dCIsInVzZVQiLCJ1c2VVc2VyIiwidXNlVGFiVGFza0RlZmF1bHQiLCJUQVNLX1VSTF9SRUdFWF9QQVRURVJOIiwicmV3cml0ZVRhc2tVcmxzSW5Db250ZW50IiwiY29udGVudCIsInRhYlNlZ21lbnQiLCJ0YXNrVXJsUmVnZXgiLCJSZWdFeHAiLCJyZXBsYWNlIiwidXJsIiwidXNlQ2hhdE1lc3NhZ2VzIiwiX3JlZiIsIl91c2VyJHBlcm1pc3Npb25zIiwib25FcnJvciIsImNoYXRJZCIsImN1cnJlbnRVc2VyIiwidXNlckluaXRpYWxNZXNzYWdlIiwiX3JlZiRhZ2VudHMiLCJhZ2VudHMiLCJfdXNlVCIsInQiLCJ1c2VyIiwidXNlclBlcm1pc3Npb25zIiwicGVybWlzc2lvbnMiLCJhaV9hZ2VudHMiLCJfdXNlU3RhdGUiLCJfdXNlU3RhdGUyIiwiX3NsaWNlZFRvQXJyYXkiLCJsb2FkaW5nTWVzc2FnZXMiLCJzZXRMb2FkaW5nTWVzc2FnZXMiLCJfdXNlU3RhdGUzIiwiX29iamVjdFNwcmVhZCIsImlkIiwiZGF0ZSIsIkRhdGUiLCJtZXNzYWdlIiwiYXR0YWNobWVudHMiLCJfdXNlU3RhdGU0IiwibWVzc2FnZXMiLCJzZXRNZXNzYWdlcyIsIl91c2VQcm9qZWN0cyIsImZldGNoUHJvamVjdHMiLCJfdXNlR2xvYmFsQ29udGV4dCIsInNlbGVjdEFnZW50Iiwic2V0Q2hpcHNQcm9qZWN0Iiwic2V0UHJvamVjdCIsInNldENsaWVudCIsInByb2plY3QiLCJfdXNlVGFiVGFza0RlZmF1bHQiLCJnZXRUYWJUYXNrRGVmYXVsdCIsInRhYlRhc2tEZWZhdWx0IiwicmVmZXRjaFRhYlRhc2tEZWZhdWx0IiwiX3VzZVN0YXRlNSIsIl91c2VTdGF0ZTYiLCJpc0xvYWRpbmdNb3JlTWVzc2FnZXMiLCJzZXRJc0xvYWRpbmdNb3JlTWVzc2FnZXMiLCJfdXNlU3RhdGU3IiwiX3VzZVN0YXRlOCIsImxhc3RFdmFsdWF0ZWRLZXkiLCJzZXRMYXN0RXZhbHVhdGVkS2V5IiwiaXNMb2FkaW5nUmVmIiwiaW5pdGlhbExvYWREb25lIiwicHJldmlvdXNDaGF0SWQiLCJsb2FkTWVzc2FnZXMiLCJfYXN5bmNUb0dlbmVyYXRvciIsIl9yZWdlbmVyYXRvclJ1bnRpbWUiLCJtYXJrIiwiX2NhbGxlZSIsIl95aWVsZCRtYWlhJENoYXRzJGdldCIsIml0ZW1zIiwibmV4dEl0ZW0iLCJhZ2VudERlbGV0ZWQiLCJhZ2VudE5vUGVybWlzc2lvbiIsImhhc0FnZW50QWNjZXNzIiwiaGFzQWdlbnRQZXJtaXNzaW9uIiwicHJvamVjdElkTWVzc2FnZSIsInByb2plY3ROYW1lRnJvbVNlc3Npb24iLCJwcm9qZWN0RGVsZXRlZCIsImNsaWVudElkRnJvbVNlc3Npb24iLCJjbGllbnROYW1lRnJvbVNlc3Npb24iLCJhZ2VudEluTGlzdCIsInByb2plY3RzIiwiaGFzTXVsdGlBZ2VudHNBY2Nlc3MiLCJwcm9qZWN0SWROdW0iLCJmb3VuZFByb2plY3QiLCJfZm91bmRQcm9qZWN0JGNsaWVudCIsImNoaXBzRGF0YSIsIl9jaGlwc0RhdGEiLCJjb250ZXh0UHJvamVjdElkIiwiaXRlbXNUb1NldCIsInRhYiIsIl90Iiwid3JhcCIsIl9jb250ZXh0IiwicHJldiIsIm5leHQiLCJjdXJyZW50IiwiQ2hhdHMiLCJnZXRDaGF0TWVzc2FnZXMiLCJvZmZzZXQiLCJjYW5jZWxsZWRUZXh0Iiwic2VudCIsInByb2plY3RJZCIsInByb2plY3ROYW1lIiwiY2xpZW50SWQiLCJjbGllbnROYW1lIiwibmFtZSIsImVtb2ppIiwidHlwZSIsImlzX2RlbGV0ZWQiLCJkZWxldGVkX2F0IiwiZGVsZXRlZEF0IiwidmlldyIsImZpbmQiLCJhZ2VudCIsImlzX2Zyb21fY29udmVyc2F0aW9uIiwicHJvamVjdF9kZWxldGVkIiwiYSIsInVuZGVmaW5lZCIsImhhc19ub3RfYWNjZXNzIiwiaGFzX25vdF9wZXJtaXNzaW9ucyIsIk51bWJlciIsIndpbmRvdyIsIk1BSUFfQ0hBVF9BSV9GRUFUVVJFX0FDQ0VTU19NVUxUSV9BR0VOVFMiLCJwIiwiY2xpZW50IiwiU3RyaW5nIiwicGFyc2VJbnQiLCJjb25jYXQiLCJtYXAiLCJpdGVtIiwiZmluaXNoIiwic3RvcCIsImxvYWRNb3JlTWVzc2FnZXMiLCJfcmVmMyIsIl9jYWxsZWUyIiwiY29udGFpbmVyIiwib2xkU2Nyb2xsSGVpZ2h0Iiwib2xkU2Nyb2xsVG9wIiwiX3lpZWxkJG1haWEkQ2hhdHMkZ2V0MiIsIl9mb3VuZFByb2plY3QkY2xpZW50MiIsIl9jaGlwc0RhdGEyIiwiaXRlbXNUb01lcmdlIiwibmV3TWVzc2FnZXMiLCJfdDIiLCJfY29udGV4dDIiLCJhYnJ1cHQiLCJzY3JvbGxIZWlnaHQiLCJzY3JvbGxUb3AiLCJfdG9Db25zdW1hYmxlQXJyYXkiLCJzbGljZSIsInJlcXVlc3RBbmltYXRpb25GcmFtZSIsImNvbnRhaW5lclJlZiIsIm5ld1Njcm9sbEhlaWdodCIsImhlaWdodERpZmZlcmVuY2UiLCJfeCIsImFwcGx5IiwiYXJndW1lbnRzIiwiaGFuZGxlU2Nyb2xsIiwiY2xpZW50SGVpZ2h0Iiwic2Nyb2xsUGVyY2VudGFnZSIsImRpZFJld3JpdGVSZWYiLCJsZW5ndGgiLCJuZWVkc1Jld3JpdGUiLCJzb21lIiwibXNnIiwibWF0Y2hlcyIsIm1hdGNoIiwiZW5kc1dpdGgiLCJpbmNsdWRlcyIsInJld3JpdHRlbiIsImFkZE1lc3NhZ2UiLCJleGlzdGluZ01lc3NhZ2VJbmRleCIsImZpbmRJbmRleCIsInJlbW92ZU1lc3NhZ2UiLCJtZXNzYWdlSWQiLCJmaWx0ZXIiLCJoYXNNb3JlTWVzc2FnZXMiXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvaG9va3MvdXNlQ2hhdE1lc3NhZ2VzL3VzZUNoYXRNZXNzYWdlcy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvaW5kZW50ICovXG5pbXBvcnQgeyB1c2VDYWxsYmFjaywgdXNlU3RhdGUsIHVzZVJlZiwgdXNlRWZmZWN0IH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyB1c2VQcm9qZWN0cyB9IGZyb20gJy4uL3VzZVByb2plY3RzJ1xuaW1wb3J0IHsgQ2hhdE1lc3NhZ2UgfSBmcm9tICcuLi8uLi90eXBlcy9DaGF0J1xuaW1wb3J0IG1haWEgZnJvbSAnLi4vLi4vc2VydmljZXMvbWFpYSdcbmltcG9ydCB7IFVzZUNoYXRNZXNzYWdlc1Byb3BzIH0gZnJvbSAnLi91c2VDaGF0TWVzc2FnZXMuaW50ZXJmYWNlJ1xuaW1wb3J0IHsgdXNlR2xvYmFsQ29udGV4dCB9IGZyb20gJy4uLy4uL2NvbnRleHQvZ2xvYmFsLWNvbnRleHQnXG5pbXBvcnQgeyB1c2VUIH0gZnJvbSAnLi4vdXNlVCdcbmltcG9ydCB7IHVzZVVzZXIgfSBmcm9tICcuLi8uLi9jb250ZXh0L2Nvci11c2VyJ1xuaW1wb3J0IHsgdXNlVGFiVGFza0RlZmF1bHQgfSBmcm9tICcuLi91c2VUYWJUYXNrRGVmYXVsdCdcbmltcG9ydCB7IFRBU0tfVVJMX1JFR0VYX1BBVFRFUk4gfSBmcm9tICcuLi8uLi9jb25zdGFudHMvdGFza1VybHMnXG5cbmNvbnN0IHJld3JpdGVUYXNrVXJsc0luQ29udGVudCA9IChjb250ZW50OiBzdHJpbmcsIHRhYlNlZ21lbnQ6IHN0cmluZyk6IHN0cmluZyA9PiB7XG4gIGNvbnN0IHRhc2tVcmxSZWdleCA9IG5ldyBSZWdFeHAoVEFTS19VUkxfUkVHRVhfUEFUVEVSTiwgJ2cnKVxuICByZXR1cm4gY29udGVudC5yZXBsYWNlKHRhc2tVcmxSZWdleCwgdXJsID0+XG4gICAgdXJsLnJlcGxhY2UoL1xcLyhkZXRhaWx8bWVzc2FnZXxtZXNzYWdlc3xmaWxlc3xoaXN0b3J5fGhvdXJzKSg/PSR8XFw/KS8sIHRhYlNlZ21lbnQpXG4gIClcbn1cblxuZXhwb3J0IGNvbnN0IHVzZUNoYXRNZXNzYWdlcyA9ICh7XG4gIG9uRXJyb3IsXG4gIGNoYXRJZCxcbiAgY3VycmVudFVzZXIsXG4gIHVzZXJJbml0aWFsTWVzc2FnZSxcbiAgYWdlbnRzID0gW10sXG59OiBVc2VDaGF0TWVzc2FnZXNQcm9wcykgPT4ge1xuICBjb25zdCB7IHQgfSA9IHVzZVQoKVxuICBjb25zdCB1c2VyID0gdXNlVXNlcigpXG4gIGNvbnN0IHVzZXJQZXJtaXNzaW9ucyA9IHVzZXI/LnBlcm1pc3Npb25zPy5haV9hZ2VudHNcbiAgY29uc3QgW2xvYWRpbmdNZXNzYWdlcywgc2V0TG9hZGluZ01lc3NhZ2VzXSA9IHVzZVN0YXRlKGZhbHNlKVxuICBjb25zdCBbbWVzc2FnZXMsIHNldE1lc3NhZ2VzXSA9IHVzZVN0YXRlPENoYXRNZXNzYWdlW10+KFxuICAgIHVzZXJJbml0aWFsTWVzc2FnZVxuICAgICAgPyBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgaWQ6ICd1c2VyLWluaXRpYWwtbWVzc2FnZScsXG4gICAgICAgICAgICBkYXRlOiBuZXcgRGF0ZSgpLFxuICAgICAgICAgICAgdXNlcjogY3VycmVudFVzZXIsXG4gICAgICAgICAgICBtZXNzYWdlOiB1c2VySW5pdGlhbE1lc3NhZ2UubWVzc2FnZSxcbiAgICAgICAgICAgIC4uLih1c2VySW5pdGlhbE1lc3NhZ2UuYXR0YWNobWVudHMgPyB7IGF0dGFjaG1lbnRzOiB1c2VySW5pdGlhbE1lc3NhZ2UuYXR0YWNobWVudHMgfSA6IHt9KSxcbiAgICAgICAgICB9LFxuICAgICAgICBdXG4gICAgICA6IFtdXG4gIClcbiAgY29uc3QgeyBmZXRjaFByb2plY3RzIH0gPSB1c2VQcm9qZWN0cygpXG4gIGNvbnN0IHsgc2VsZWN0QWdlbnQsIHNldENoaXBzUHJvamVjdCwgc2V0UHJvamVjdCwgc2V0Q2xpZW50LCBwcm9qZWN0IH0gPSB1c2VHbG9iYWxDb250ZXh0KClcbiAgY29uc3QgeyBnZXRUYWJUYXNrRGVmYXVsdCwgdGFiVGFza0RlZmF1bHQsIHJlZmV0Y2hUYWJUYXNrRGVmYXVsdCB9ID0gdXNlVGFiVGFza0RlZmF1bHQoKVxuICBjb25zdCBbaXNMb2FkaW5nTW9yZU1lc3NhZ2VzLCBzZXRJc0xvYWRpbmdNb3JlTWVzc2FnZXNdID0gdXNlU3RhdGUoZmFsc2UpXG4gIGNvbnN0IFtsYXN0RXZhbHVhdGVkS2V5LCBzZXRMYXN0RXZhbHVhdGVkS2V5XSA9IHVzZVN0YXRlPG51bWJlciB8IHVuZGVmaW5lZD4oMClcbiAgY29uc3QgaXNMb2FkaW5nUmVmID0gdXNlUmVmKGZhbHNlKVxuICBjb25zdCBpbml0aWFsTG9hZERvbmUgPSB1c2VSZWYoZmFsc2UpXG4gIGNvbnN0IHByZXZpb3VzQ2hhdElkID0gdXNlUmVmKGNoYXRJZClcblxuICBjb25zdCBsb2FkTWVzc2FnZXMgPSB1c2VDYWxsYmFjayhhc3luYyAoKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIHNldExvYWRpbmdNZXNzYWdlcyh0cnVlKVxuICAgICAgaW5pdGlhbExvYWREb25lLmN1cnJlbnQgPSBmYWxzZVxuICAgICAgY29uc3Qge1xuICAgICAgICBpdGVtcyxcbiAgICAgICAgbmV4dEl0ZW0sXG4gICAgICAgIGFnZW50RGVsZXRlZCxcbiAgICAgICAgYWdlbnROb1Blcm1pc3Npb24sXG4gICAgICAgIGhhc0FnZW50QWNjZXNzLFxuICAgICAgICBoYXNBZ2VudFBlcm1pc3Npb24sXG4gICAgICAgIHByb2plY3RJZDogcHJvamVjdElkTWVzc2FnZSxcbiAgICAgICAgcHJvamVjdE5hbWU6IHByb2plY3ROYW1lRnJvbVNlc3Npb24sXG4gICAgICAgIHByb2plY3REZWxldGVkLFxuICAgICAgICBjbGllbnRJZDogY2xpZW50SWRGcm9tU2Vzc2lvbixcbiAgICAgICAgY2xpZW50TmFtZTogY2xpZW50TmFtZUZyb21TZXNzaW9uLFxuICAgICAgfSA9IGF3YWl0IG1haWEuQ2hhdHMuZ2V0Q2hhdE1lc3NhZ2VzKHtcbiAgICAgICAgY2hhdElkLFxuICAgICAgICBjdXJyZW50VXNlcixcbiAgICAgICAgb2Zmc2V0OiBsYXN0RXZhbHVhdGVkS2V5LFxuICAgICAgICBjYW5jZWxsZWRUZXh0OiB0KCdjaGF0LmNhbmNlbGxlZCcpLFxuICAgICAgfSlcbiAgICAgIGlmIChhZ2VudERlbGV0ZWQpIHtcbiAgICAgICAgc2VsZWN0QWdlbnQoe1xuICAgICAgICAgIGlkOiBhZ2VudERlbGV0ZWQuaWQsXG4gICAgICAgICAgbmFtZTogYWdlbnREZWxldGVkLm5hbWUsXG4gICAgICAgICAgZW1vamk6IGFnZW50RGVsZXRlZC5lbW9qaSxcbiAgICAgICAgICB0eXBlOiAnY3VzdG9tJyxcbiAgICAgICAgICBpc19kZWxldGVkOiB0cnVlLFxuICAgICAgICAgIGRlbGV0ZWRfYXQ6IGFnZW50RGVsZXRlZC5kZWxldGVkQXQsXG4gICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIC8vIFNpIGVsIGFnZW50ZSBubyBlc3TDoSBlbiBsYSBsaXN0YSBwZXJvIHRpZW5lIHBlcm1pc29zLCBhY2Nlc28geSBubyBlc3TDoSBlbGltaW5hZG8sIHNldGVhcmxvIG5vcm1hbG1lbnRlXG4gICAgICAvLyBFeGNsdWlyIGFnZW50ZXMgbm8tY3VzdG9tIHBhcmEgdXN1YXJpb3MgY29uIHJvbGVzIGRlc2hhYmlsaXRhZG9zXG4gICAgICBpZiAoXG4gICAgICAgIGFnZW50Tm9QZXJtaXNzaW9uICYmXG4gICAgICAgICFhZ2VudERlbGV0ZWQgJiZcbiAgICAgICAgdXNlclBlcm1pc3Npb25zPy52aWV3ICYmXG4gICAgICAgIGhhc0FnZW50QWNjZXNzICYmXG4gICAgICAgIGhhc0FnZW50UGVybWlzc2lvbiAmJlxuICAgICAgICAhYWdlbnRzLmZpbmQoYWdlbnQgPT4gYWdlbnQuaWQgPT09IGFnZW50Tm9QZXJtaXNzaW9uLmlkKVxuICAgICAgKSB7XG4gICAgICAgIHNlbGVjdEFnZW50KHtcbiAgICAgICAgICBpZDogYWdlbnROb1Blcm1pc3Npb24uaWQsXG4gICAgICAgICAgbmFtZTogYWdlbnROb1Blcm1pc3Npb24ubmFtZSxcbiAgICAgICAgICBlbW9qaTogYWdlbnROb1Blcm1pc3Npb24uZW1vamksXG4gICAgICAgICAgdHlwZTogYWdlbnROb1Blcm1pc3Npb24udHlwZSBhcyAncG0nIHwgJ2N1c3RvbScgfCAnY2xvbmUnLFxuICAgICAgICAgIGlzX2Zyb21fY29udmVyc2F0aW9uOiB0cnVlLFxuICAgICAgICAgIC4uLihwcm9qZWN0RGVsZXRlZCA/IHsgcHJvamVjdF9kZWxldGVkOiB7IG5hbWU6IHByb2plY3REZWxldGVkLm5hbWUgfSB9IDoge30pLFxuICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICAvLyBTaSBlbCBhZ2VudGUgZXN0w6EgZW4gbGEgbGlzdGEgeSB0aWVuZSBhY2Nlc28vcGVybWlzb3MsIGFjdHVhbGl6YXIgcHJvamVjdF9kZWxldGVkIChvIGxpbXBpYXJsbyBhbCBjYW1iaWFyIGRlIGNoYXQpXG4gICAgICBpZiAoXG4gICAgICAgIGFnZW50Tm9QZXJtaXNzaW9uICYmXG4gICAgICAgICFhZ2VudERlbGV0ZWQgJiZcbiAgICAgICAgaGFzQWdlbnRBY2Nlc3MgJiZcbiAgICAgICAgaGFzQWdlbnRQZXJtaXNzaW9uICYmXG4gICAgICAgIGFnZW50cy5maW5kKGEgPT4gYS5pZCA9PT0gYWdlbnROb1Blcm1pc3Npb24uaWQpXG4gICAgICApIHtcbiAgICAgICAgY29uc3QgYWdlbnRJbkxpc3QgPSBhZ2VudHMuZmluZChhID0+IGEuaWQgPT09IGFnZW50Tm9QZXJtaXNzaW9uLmlkKVxuICAgICAgICBpZiAoYWdlbnRJbkxpc3QpIHtcbiAgICAgICAgICBzZWxlY3RBZ2VudCh7XG4gICAgICAgICAgICAuLi5hZ2VudEluTGlzdCxcbiAgICAgICAgICAgIC4uLihwcm9qZWN0RGVsZXRlZCA/IHsgcHJvamVjdF9kZWxldGVkOiB7IG5hbWU6IHByb2plY3REZWxldGVkLm5hbWUgfSB9IDogeyBwcm9qZWN0X2RlbGV0ZWQ6IHVuZGVmaW5lZCB9KSxcbiAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIFNpIGVsIGFnZW50ZSBubyB0aWVuZSBhY2Nlc28gbyBwZXJtaXNvcyBzZWfDum4gbGEgcmVzcHVlc3RhIGRlIHNlc3Npb25zLCBzZWxlY2Npb25hcmxvIGNvbiBlbCBmbGFnIGNvcnJlc3BvbmRpZW50ZVxuICAgICAgLy8gTGEgdmFsaWRhY2nDs24gYWhvcmEgc2UgYmFzYSBlbiBsYXMgcHJvcGllZGFkZXMgaGFzX2FnZW50X2FjY2VzcyB5IGhhc19hZ2VudF9wZXJtaXNzaW9uIGRlIGxhIHJlc3B1ZXN0YVxuICAgICAgaWYgKGFnZW50Tm9QZXJtaXNzaW9uICYmICFhZ2VudERlbGV0ZWQpIHtcbiAgICAgICAgaWYgKCFoYXNBZ2VudEFjY2Vzcykge1xuICAgICAgICAgIC8vIENhc28gMTogTm8gdGllbmUgYWNjZXNvIGFsIGFnZW50ZVxuICAgICAgICAgIHNlbGVjdEFnZW50KHtcbiAgICAgICAgICAgIGlkOiBhZ2VudE5vUGVybWlzc2lvbi5pZCxcbiAgICAgICAgICAgIG5hbWU6IGFnZW50Tm9QZXJtaXNzaW9uLm5hbWUsXG4gICAgICAgICAgICBlbW9qaTogYWdlbnROb1Blcm1pc3Npb24uZW1vamksXG4gICAgICAgICAgICB0eXBlOiBhZ2VudE5vUGVybWlzc2lvbi50eXBlIGFzICdwbScgfCAnY3VzdG9tJyB8ICdjbG9uZScsXG4gICAgICAgICAgICBoYXNfbm90X2FjY2VzczogdHJ1ZSxcbiAgICAgICAgICAgIC4uLihwcm9qZWN0RGVsZXRlZCA/IHsgcHJvamVjdF9kZWxldGVkOiB7IG5hbWU6IHByb2plY3REZWxldGVkLm5hbWUgfSB9IDoge30pLFxuICAgICAgICAgIH0pXG4gICAgICAgIH0gZWxzZSBpZiAoIWhhc0FnZW50UGVybWlzc2lvbikge1xuICAgICAgICAgIC8vIENhc28gMjogTm8gdGllbmUgcGVybWlzb3MgcGFyYSB2aXN1YWxpemFyL2ludGVyYWN0dWFyIGNvbiBlbCBhZ2VudGVcbiAgICAgICAgICBzZWxlY3RBZ2VudCh7XG4gICAgICAgICAgICBpZDogYWdlbnROb1Blcm1pc3Npb24uaWQsXG4gICAgICAgICAgICBuYW1lOiBhZ2VudE5vUGVybWlzc2lvbi5uYW1lLFxuICAgICAgICAgICAgZW1vamk6IGFnZW50Tm9QZXJtaXNzaW9uLmVtb2ppLFxuICAgICAgICAgICAgdHlwZTogYWdlbnROb1Blcm1pc3Npb24udHlwZSBhcyAncG0nIHwgJ2N1c3RvbScgfCAnY2xvbmUnLFxuICAgICAgICAgICAgaGFzX25vdF9wZXJtaXNzaW9uczogdHJ1ZSxcbiAgICAgICAgICAgIC4uLihwcm9qZWN0RGVsZXRlZCA/IHsgcHJvamVjdF9kZWxldGVkOiB7IG5hbWU6IHByb2plY3REZWxldGVkLm5hbWUgfSB9IDoge30pLFxuICAgICAgICAgIH0pXG4gICAgICAgIH0gZWxzZSBpZiAocHJvamVjdERlbGV0ZWQpIHtcbiAgICAgICAgICAvLyBDYXNvIDM6IEVsIHByb3llY3RvIGRlIGxhIGNvbnZlcnNhY2nDs24gZnVlIGVsaW1pbmFkb1xuICAgICAgICAgIHNlbGVjdEFnZW50KHtcbiAgICAgICAgICAgIGlkOiBhZ2VudE5vUGVybWlzc2lvbi5pZCxcbiAgICAgICAgICAgIG5hbWU6IGFnZW50Tm9QZXJtaXNzaW9uLm5hbWUsXG4gICAgICAgICAgICBlbW9qaTogYWdlbnROb1Blcm1pc3Npb24uZW1vamksXG4gICAgICAgICAgICB0eXBlOiBhZ2VudE5vUGVybWlzc2lvbi50eXBlIGFzICdwbScgfCAnY3VzdG9tJyB8ICdjbG9uZScsXG4gICAgICAgICAgICBwcm9qZWN0X2RlbGV0ZWQ6IHsgbmFtZTogcHJvamVjdERlbGV0ZWQubmFtZSB9LFxuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gQ29udmVyc2FjacOzbiBjb24gY2xpZW50X21ldGFkYXRhOiBzZXRlYXIgY2xpZW50ZSB5IGxpbXBpYXIgcHJveWVjdG9cbiAgICAgIGlmIChjbGllbnRJZEZyb21TZXNzaW9uICE9IG51bGwgJiYgY2xpZW50TmFtZUZyb21TZXNzaW9uKSB7XG4gICAgICAgIHNldENsaWVudCh7IGlkOiBOdW1iZXIoY2xpZW50SWRGcm9tU2Vzc2lvbiksIG5hbWU6IGNsaWVudE5hbWVGcm9tU2Vzc2lvbiB9KVxuICAgICAgICBzZXRDaGlwc1Byb2plY3QobnVsbClcbiAgICAgICAgc2V0UHJvamVjdChudWxsKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgcHJvamVjdHMgPSBhd2FpdCBmZXRjaFByb2plY3RzKHByb2plY3RJZE1lc3NhZ2UpXG4gICAgICAgIGNvbnN0IGhhc011bHRpQWdlbnRzQWNjZXNzID0gISF3aW5kb3cuTUFJQV9DSEFUX0FJX0ZFQVRVUkVfQUNDRVNTX01VTFRJX0FHRU5UU1xuXG4gICAgICAgIGlmIChwcm9qZWN0SWRNZXNzYWdlICYmIGhhc011bHRpQWdlbnRzQWNjZXNzKSB7XG4gICAgICAgICAgY29uc3QgcHJvamVjdElkTnVtID0gTnVtYmVyKHByb2plY3RJZE1lc3NhZ2UpXG4gICAgICAgICAgY29uc3QgZm91bmRQcm9qZWN0ID0gcHJvamVjdHM/LmZpbmQocCA9PiBOdW1iZXIocC5pZCkgPT09IHByb2plY3RJZE51bSlcblxuICAgICAgICAgIGlmIChmb3VuZFByb2plY3QpIHtcbiAgICAgICAgICAgIGNvbnN0IGNoaXBzRGF0YSA9IHtcbiAgICAgICAgICAgICAgcHJvamVjdE5hbWU6IGZvdW5kUHJvamVjdC5uYW1lLFxuICAgICAgICAgICAgICBjbGllbnROYW1lOiBmb3VuZFByb2plY3QuY2xpZW50Py5uYW1lIHx8ICcnLFxuICAgICAgICAgICAgICBwcm9qZWN0SWQ6IFN0cmluZyhmb3VuZFByb2plY3QuaWQpLFxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc2V0Q2hpcHNQcm9qZWN0KGNoaXBzRGF0YSlcbiAgICAgICAgICAgIHNldFByb2plY3QoZm91bmRQcm9qZWN0KVxuICAgICAgICAgIH0gZWxzZSBpZiAocHJvamVjdElkTWVzc2FnZSAmJiBwcm9qZWN0TmFtZUZyb21TZXNzaW9uKSB7XG4gICAgICAgICAgICBjb25zdCBjaGlwc0RhdGEgPSB7XG4gICAgICAgICAgICAgIHByb2plY3ROYW1lOiBwcm9qZWN0TmFtZUZyb21TZXNzaW9uLFxuICAgICAgICAgICAgICBjbGllbnROYW1lOiAnJyxcbiAgICAgICAgICAgICAgcHJvamVjdElkOiBTdHJpbmcocHJvamVjdElkTWVzc2FnZSksXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzZXRDaGlwc1Byb2plY3QoY2hpcHNEYXRhKVxuICAgICAgICAgICAgc2V0UHJvamVjdCh7XG4gICAgICAgICAgICAgIGlkOiBOdW1iZXIocHJvamVjdElkTWVzc2FnZSksXG4gICAgICAgICAgICAgIG5hbWU6IHByb2plY3ROYW1lRnJvbVNlc3Npb24sXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzZXRDaGlwc1Byb2plY3QobnVsbClcbiAgICAgICAgICAgIHNldFByb2plY3QobnVsbClcbiAgICAgICAgICB9XG4gICAgICAgICAgc2V0Q2xpZW50Py4obnVsbClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzZXRDaGlwc1Byb2plY3QobnVsbClcbiAgICAgICAgICBzZXRQcm9qZWN0KG51bGwpXG4gICAgICAgICAgc2V0Q2xpZW50Py4obnVsbClcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBTaSBoYXkgcHJveWVjdG8gZW4gbGEgY29udmVyc2FjacOzbiwgcmVlc2NyaWJpciBVUkxzIGRlIHRhcmVhcyBjb24gZWwgdGFiIGRlbCB1c3VhcmlvIChtZSlcbiAgICAgIGNvbnN0IGNvbnRleHRQcm9qZWN0SWQgPSBwcm9qZWN0SWRNZXNzYWdlID8gcGFyc2VJbnQoU3RyaW5nKHByb2plY3RJZE1lc3NhZ2UpLCAxMCkgOiBudWxsXG4gICAgICBsZXQgaXRlbXNUb1NldCA9IGl0ZW1zXG4gICAgICBpZiAoY29udGV4dFByb2plY3RJZCkge1xuICAgICAgICBjb25zdCB0YWIgPSBhd2FpdCBnZXRUYWJUYXNrRGVmYXVsdCgxKVxuICAgICAgICBjb25zdCB0YWJTZWdtZW50ID0gdGFiID8gYC8ke3RhYn1gIDogJy9kZXRhaWwnXG4gICAgICAgIGl0ZW1zVG9TZXQgPSBpdGVtcy5tYXAoaXRlbSA9PiAoe1xuICAgICAgICAgIC4uLml0ZW0sXG4gICAgICAgICAgbWVzc2FnZTogcmV3cml0ZVRhc2tVcmxzSW5Db250ZW50KGl0ZW0ubWVzc2FnZSB8fCAnJywgdGFiU2VnbWVudCksXG4gICAgICAgIH0pKVxuICAgICAgfVxuICAgICAgc2V0TWVzc2FnZXMoaXRlbXNUb1NldClcbiAgICAgIHNldExhc3RFdmFsdWF0ZWRLZXkoTnVtYmVyKG5leHRJdGVtKSlcbiAgICAgIGluaXRpYWxMb2FkRG9uZS5jdXJyZW50ID0gdHJ1ZVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBvbkVycm9yPy4oKVxuICAgIH0gZmluYWxseSB7XG4gICAgICBzZXRMb2FkaW5nTWVzc2FnZXMoZmFsc2UpXG4gICAgfVxuICB9LCBbY2hhdElkLCBjdXJyZW50VXNlciwgZmV0Y2hQcm9qZWN0cywgc2V0Q2xpZW50LCBvbkVycm9yLCBnZXRUYWJUYXNrRGVmYXVsdF0pXG5cbiAgY29uc3QgbG9hZE1vcmVNZXNzYWdlcyA9IHVzZUNhbGxiYWNrKFxuICAgIGFzeW5jIChjb250YWluZXI6IEhUTUxEaXZFbGVtZW50IHwgbnVsbCkgPT4ge1xuICAgICAgaWYgKGlzTG9hZGluZ1JlZi5jdXJyZW50IHx8ICFsYXN0RXZhbHVhdGVkS2V5IHx8ICFjb250YWluZXIpIHJldHVyblxuICAgICAgdHJ5IHtcbiAgICAgICAgaXNMb2FkaW5nUmVmLmN1cnJlbnQgPSB0cnVlXG4gICAgICAgIHNldElzTG9hZGluZ01vcmVNZXNzYWdlcyh0cnVlKVxuXG4gICAgICAgIGNvbnN0IG9sZFNjcm9sbEhlaWdodCA9IGNvbnRhaW5lci5zY3JvbGxIZWlnaHRcbiAgICAgICAgY29uc3Qgb2xkU2Nyb2xsVG9wID0gY29udGFpbmVyLnNjcm9sbFRvcFxuXG4gICAgICAgIGNvbnN0IHtcbiAgICAgICAgICBpdGVtcyxcbiAgICAgICAgICBuZXh0SXRlbSxcbiAgICAgICAgICBwcm9qZWN0SWQ6IHByb2plY3RJZE1lc3NhZ2UsXG4gICAgICAgICAgcHJvamVjdE5hbWU6IHByb2plY3ROYW1lRnJvbVNlc3Npb24sXG4gICAgICAgICAgY2xpZW50SWQ6IGNsaWVudElkRnJvbVNlc3Npb24sXG4gICAgICAgICAgY2xpZW50TmFtZTogY2xpZW50TmFtZUZyb21TZXNzaW9uLFxuICAgICAgICB9ID0gYXdhaXQgbWFpYS5DaGF0cy5nZXRDaGF0TWVzc2FnZXMoe1xuICAgICAgICAgIGNoYXRJZCxcbiAgICAgICAgICBjdXJyZW50VXNlcixcbiAgICAgICAgICBvZmZzZXQ6IGxhc3RFdmFsdWF0ZWRLZXksXG4gICAgICAgIH0pXG5cbiAgICAgICAgaWYgKGNsaWVudElkRnJvbVNlc3Npb24gIT0gbnVsbCAmJiBjbGllbnROYW1lRnJvbVNlc3Npb24pIHtcbiAgICAgICAgICBzZXRDbGllbnQoeyBpZDogTnVtYmVyKGNsaWVudElkRnJvbVNlc3Npb24pLCBuYW1lOiBjbGllbnROYW1lRnJvbVNlc3Npb24gfSlcbiAgICAgICAgICBzZXRDaGlwc1Byb2plY3QobnVsbClcbiAgICAgICAgICBzZXRQcm9qZWN0KG51bGwpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3QgcHJvamVjdHMgPSBhd2FpdCBmZXRjaFByb2plY3RzKHByb2plY3RJZE1lc3NhZ2UpXG4gICAgICAgICAgY29uc3QgaGFzTXVsdGlBZ2VudHNBY2Nlc3MgPSAhIXdpbmRvdy5NQUlBX0NIQVRfQUlfRkVBVFVSRV9BQ0NFU1NfTVVMVElfQUdFTlRTXG5cbiAgICAgICAgICBpZiAocHJvamVjdElkTWVzc2FnZSAmJiBoYXNNdWx0aUFnZW50c0FjY2Vzcykge1xuICAgICAgICAgICAgY29uc3QgcHJvamVjdElkTnVtID0gTnVtYmVyKHByb2plY3RJZE1lc3NhZ2UpXG4gICAgICAgICAgICBjb25zdCBmb3VuZFByb2plY3QgPSBwcm9qZWN0cz8uZmluZChwID0+IE51bWJlcihwLmlkKSA9PT0gcHJvamVjdElkTnVtKVxuICAgICAgICAgICAgaWYgKGZvdW5kUHJvamVjdCkge1xuICAgICAgICAgICAgICBjb25zdCBjaGlwc0RhdGEgPSB7XG4gICAgICAgICAgICAgICAgcHJvamVjdE5hbWU6IGZvdW5kUHJvamVjdC5uYW1lLFxuICAgICAgICAgICAgICAgIGNsaWVudE5hbWU6IGZvdW5kUHJvamVjdC5jbGllbnQ/Lm5hbWUgfHwgJycsXG4gICAgICAgICAgICAgICAgcHJvamVjdElkOiBTdHJpbmcoZm91bmRQcm9qZWN0LmlkKSxcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBzZXRDaGlwc1Byb2plY3QoY2hpcHNEYXRhKVxuICAgICAgICAgICAgICBzZXRQcm9qZWN0KGZvdW5kUHJvamVjdClcbiAgICAgICAgICAgIH0gZWxzZSBpZiAocHJvamVjdE5hbWVGcm9tU2Vzc2lvbikge1xuICAgICAgICAgICAgICBjb25zdCBjaGlwc0RhdGEgPSB7XG4gICAgICAgICAgICAgICAgcHJvamVjdE5hbWU6IHByb2plY3ROYW1lRnJvbVNlc3Npb24sXG4gICAgICAgICAgICAgICAgY2xpZW50TmFtZTogJycsXG4gICAgICAgICAgICAgICAgcHJvamVjdElkOiBTdHJpbmcocHJvamVjdElkTWVzc2FnZSksXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgc2V0Q2hpcHNQcm9qZWN0KGNoaXBzRGF0YSlcbiAgICAgICAgICAgICAgc2V0UHJvamVjdCh7IGlkOiBwcm9qZWN0SWROdW0sIG5hbWU6IHByb2plY3ROYW1lRnJvbVNlc3Npb24gfSlcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHNldENoaXBzUHJvamVjdChudWxsKVxuICAgICAgICAgICAgICBzZXRQcm9qZWN0KG51bGwpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzZXRDbGllbnQ/LihudWxsKVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzZXRDaGlwc1Byb2plY3QobnVsbClcbiAgICAgICAgICAgIHNldFByb2plY3QobnVsbClcbiAgICAgICAgICAgIHNldENsaWVudD8uKG51bGwpXG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gU2kgaGF5IHByb3llY3RvIGVuIGxhIGNvbnZlcnNhY2nDs24sIHJlZXNjcmliaXIgVVJMcyBkZSB0YXJlYXMgZW4gbG9zIG1lbnNhamVzIGNhcmdhZG9zXG4gICAgICAgIGNvbnN0IGNvbnRleHRQcm9qZWN0SWQgPSBwcm9qZWN0SWRNZXNzYWdlID8gcGFyc2VJbnQoU3RyaW5nKHByb2plY3RJZE1lc3NhZ2UpLCAxMCkgOiBudWxsXG4gICAgICAgIGxldCBpdGVtc1RvTWVyZ2UgPSBpdGVtc1xuICAgICAgICBpZiAoY29udGV4dFByb2plY3RJZCkge1xuICAgICAgICAgIGNvbnN0IHRhYiA9IGF3YWl0IGdldFRhYlRhc2tEZWZhdWx0KDEpXG4gICAgICAgICAgY29uc3QgdGFiU2VnbWVudCA9IHRhYiA/IGAvJHt0YWJ9YCA6ICcvZGV0YWlsJ1xuICAgICAgICAgIGl0ZW1zVG9NZXJnZSA9IGl0ZW1zLm1hcChpdGVtID0+ICh7XG4gICAgICAgICAgICAuLi5pdGVtLFxuICAgICAgICAgICAgbWVzc2FnZTogcmV3cml0ZVRhc2tVcmxzSW5Db250ZW50KGl0ZW0ubWVzc2FnZSB8fCAnJywgdGFiU2VnbWVudCksXG4gICAgICAgICAgfSkpXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbmV3TWVzc2FnZXMgPSBbLi4ubWVzc2FnZXMuc2xpY2UoMCwgMSksIC4uLml0ZW1zVG9NZXJnZSwgLi4ubWVzc2FnZXMuc2xpY2UoMSldXG4gICAgICAgIHNldE1lc3NhZ2VzKG5ld01lc3NhZ2VzKVxuICAgICAgICBzZXRMYXN0RXZhbHVhdGVkS2V5KE51bWJlcihuZXh0SXRlbSkpXG5cbiAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcbiAgICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgY29udGFpbmVyUmVmID0gY29udGFpbmVyXG4gICAgICAgICAgICBpZiAoY29udGFpbmVyUmVmKSB7XG4gICAgICAgICAgICAgIGNvbnN0IG5ld1Njcm9sbEhlaWdodCA9IGNvbnRhaW5lclJlZi5zY3JvbGxIZWlnaHRcbiAgICAgICAgICAgICAgY29uc3QgaGVpZ2h0RGlmZmVyZW5jZSA9IG5ld1Njcm9sbEhlaWdodCAtIG9sZFNjcm9sbEhlaWdodFxuICAgICAgICAgICAgICBjb250YWluZXJSZWYuc2Nyb2xsVG9wID0gb2xkU2Nyb2xsVG9wICsgaGVpZ2h0RGlmZmVyZW5jZVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICAgIH0pXG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBvbkVycm9yPy4oKVxuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgc2V0SXNMb2FkaW5nTW9yZU1lc3NhZ2VzKGZhbHNlKVxuICAgICAgICBpc0xvYWRpbmdSZWYuY3VycmVudCA9IGZhbHNlXG4gICAgICB9XG4gICAgfSxcbiAgICBbY2hhdElkLCBjdXJyZW50VXNlciwgbGFzdEV2YWx1YXRlZEtleSwgb25FcnJvciwgZmV0Y2hQcm9qZWN0cywgc2V0Q2xpZW50LCBtZXNzYWdlcywgZ2V0VGFiVGFza0RlZmF1bHRdXG4gIClcblxuICBjb25zdCBoYW5kbGVTY3JvbGwgPSB1c2VDYWxsYmFjayhcbiAgICAoY29udGFpbmVyOiBIVE1MRGl2RWxlbWVudCB8IG51bGwpID0+IHtcbiAgICAgIGlmICghY29udGFpbmVyIHx8IGlzTG9hZGluZ1JlZi5jdXJyZW50IHx8ICFpbml0aWFsTG9hZERvbmUuY3VycmVudCkgcmV0dXJuXG5cbiAgICAgIGNvbnN0IHsgc2Nyb2xsVG9wLCBzY3JvbGxIZWlnaHQsIGNsaWVudEhlaWdodCB9ID0gY29udGFpbmVyXG4gICAgICBjb25zdCBzY3JvbGxQZXJjZW50YWdlID0gc2Nyb2xsSGVpZ2h0IC0gY2xpZW50SGVpZ2h0ID4gMCA/IChzY3JvbGxUb3AgLyAoc2Nyb2xsSGVpZ2h0IC0gY2xpZW50SGVpZ2h0KSkgKiAxMDAgOiAwXG5cbiAgICAgIGlmIChzY3JvbGxQZXJjZW50YWdlIDwgMTApIHtcbiAgICAgICAgbG9hZE1vcmVNZXNzYWdlcyhjb250YWluZXIpXG4gICAgICB9XG4gICAgfSxcbiAgICBbbG9hZE1vcmVNZXNzYWdlc11cbiAgKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGNoYXRJZCAhPT0gcHJldmlvdXNDaGF0SWQuY3VycmVudCkge1xuICAgICAgc2V0TWVzc2FnZXMoXG4gICAgICAgIHVzZXJJbml0aWFsTWVzc2FnZVxuICAgICAgICAgID8gW1xuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgaWQ6ICd1c2VyLWluaXRpYWwtbWVzc2FnZScsXG4gICAgICAgICAgICAgICAgZGF0ZTogbmV3IERhdGUoKSxcbiAgICAgICAgICAgICAgICB1c2VyOiBjdXJyZW50VXNlcixcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiB1c2VySW5pdGlhbE1lc3NhZ2UubWVzc2FnZSxcbiAgICAgICAgICAgICAgICAuLi4odXNlckluaXRpYWxNZXNzYWdlLmF0dGFjaG1lbnRzID8geyBhdHRhY2htZW50czogdXNlckluaXRpYWxNZXNzYWdlLmF0dGFjaG1lbnRzIH0gOiB7fSksXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBdXG4gICAgICAgICAgOiBbXVxuICAgICAgKVxuICAgICAgc2V0TGFzdEV2YWx1YXRlZEtleSgwKVxuICAgICAgaXNMb2FkaW5nUmVmLmN1cnJlbnQgPSBmYWxzZVxuICAgICAgaW5pdGlhbExvYWREb25lLmN1cnJlbnQgPSBmYWxzZVxuICAgICAgcHJldmlvdXNDaGF0SWQuY3VycmVudCA9IGNoYXRJZFxuXG4gICAgICAvLyBMaW1waWFyIGVsIGVzdGFkbyBkZWwgcHJveWVjdG8gY3VhbmRvIGNhbWJpYSBkZSBjb252ZXJzYWNpw7NuXG4gICAgICBzZXRDaGlwc1Byb2plY3QobnVsbClcbiAgICAgIHNldFByb2plY3QobnVsbClcblxuICAgICAgLy8gVm9sdmVyIGEgZWplY3V0YXIgbGEgcXVlcnkgbWUgcGFyYSB0ZW5lciB0YWJUYXNrRGVmYXVsdCBhY3R1YWxpemFkbyBlbiBsYSBudWV2YSBjb252ZXJzYWNpw7NuXG4gICAgICByZWZldGNoVGFiVGFza0RlZmF1bHQoKVxuXG4gICAgICBpZiAoIXVzZXJJbml0aWFsTWVzc2FnZSkge1xuICAgICAgICBsb2FkTWVzc2FnZXMoKVxuICAgICAgfVxuICAgIH1cbiAgfSwgW2NoYXRJZCwgdXNlckluaXRpYWxNZXNzYWdlLCBjdXJyZW50VXNlciwgbG9hZE1lc3NhZ2VzLCBzZXRDaGlwc1Byb2plY3QsIHNldFByb2plY3QsIHJlZmV0Y2hUYWJUYXNrRGVmYXVsdF0pXG5cbiAgLy8gQ3VhbmRvIHRhYlRhc2tEZWZhdWx0IHBhc2EgYSBlc3RhciBkaXNwb25pYmxlIGRlc3B1w6lzIGRlIGNhcmdhciwgcmVlc2NyaWJpciBVUkxzIGRlIHRhcmVhcyBlbiBsb3MgbWVuc2FqZXMgeWEgY2FyZ2Fkb3MuXG4gIC8vIFJlZiBwYXJhIGV2aXRhciBidWNsZTogc2V0TWVzc2FnZXMocmV3cml0dGVuKSBjYW1iaWEgbWVzc2FnZXMgeSByZS1lamVjdXRhIGVsIGVmZWN0bzsgc29sbyByZWVzY3JpYmltb3MgdW5hIHZleiBwb3IgbG90ZS5cbiAgY29uc3QgZGlkUmV3cml0ZVJlZiA9IHVzZVJlZihmYWxzZSlcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoIXRhYlRhc2tEZWZhdWx0IHx8ICFwcm9qZWN0Py5pZCB8fCBtZXNzYWdlcy5sZW5ndGggPT09IDApIHJldHVyblxuICAgIGNvbnN0IHRhc2tVcmxSZWdleCA9IG5ldyBSZWdFeHAoVEFTS19VUkxfUkVHRVhfUEFUVEVSTiwgJ2cnKVxuICAgIGNvbnN0IHRhYlNlZ21lbnQgPSBgLyR7dGFiVGFza0RlZmF1bHR9YFxuICAgIGNvbnN0IG5lZWRzUmV3cml0ZSA9IG1lc3NhZ2VzLnNvbWUobXNnID0+IHtcbiAgICAgIGNvbnN0IGNvbnRlbnQgPSBtc2cubWVzc2FnZSB8fCAnJ1xuICAgICAgY29uc3QgbWF0Y2hlcyA9IGNvbnRlbnQubWF0Y2godGFza1VybFJlZ2V4KVxuICAgICAgaWYgKCFtYXRjaGVzPy5sZW5ndGgpIHJldHVybiBmYWxzZVxuICAgICAgcmV0dXJuIG1hdGNoZXMuc29tZSh1cmwgPT4gIXVybC5lbmRzV2l0aChgLyR7dGFiVGFza0RlZmF1bHR9YCkgJiYgIXVybC5pbmNsdWRlcyhgLyR7dGFiVGFza0RlZmF1bHR9P2ApKVxuICAgIH0pXG4gICAgaWYgKCFuZWVkc1Jld3JpdGUpIHtcbiAgICAgIGRpZFJld3JpdGVSZWYuY3VycmVudCA9IGZhbHNlXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgaWYgKGRpZFJld3JpdGVSZWYuY3VycmVudCkgcmV0dXJuXG4gICAgZGlkUmV3cml0ZVJlZi5jdXJyZW50ID0gdHJ1ZVxuICAgIGNvbnN0IHJld3JpdHRlbiA9IG1lc3NhZ2VzLm1hcChtc2cgPT4gKHtcbiAgICAgIC4uLm1zZyxcbiAgICAgIG1lc3NhZ2U6IHJld3JpdGVUYXNrVXJsc0luQ29udGVudChtc2cubWVzc2FnZSB8fCAnJywgdGFiU2VnbWVudCksXG4gICAgfSkpXG4gICAgc2V0TWVzc2FnZXMocmV3cml0dGVuKVxuICB9LCBbdGFiVGFza0RlZmF1bHQsIHByb2plY3Q/LmlkLCBtZXNzYWdlc10pXG5cbiAgY29uc3QgYWRkTWVzc2FnZSA9IHVzZUNhbGxiYWNrKChtZXNzYWdlOiBDaGF0TWVzc2FnZSkgPT4ge1xuICAgIHNldE1lc3NhZ2VzKHByZXYgPT4ge1xuICAgICAgY29uc3QgZXhpc3RpbmdNZXNzYWdlSW5kZXggPSBwcmV2LmZpbmRJbmRleChtc2cgPT4gbXNnLmlkID09PSBtZXNzYWdlLmlkKVxuXG4gICAgICBpZiAoZXhpc3RpbmdNZXNzYWdlSW5kZXggPj0gMCkge1xuICAgICAgICBjb25zdCBuZXdNZXNzYWdlcyA9IFsuLi5wcmV2XVxuICAgICAgICBuZXdNZXNzYWdlc1tleGlzdGluZ01lc3NhZ2VJbmRleF0gPSBtZXNzYWdlXG4gICAgICAgIHJldHVybiBuZXdNZXNzYWdlc1xuICAgICAgfVxuICAgICAgcmV0dXJuIFsuLi5wcmV2LCBtZXNzYWdlXVxuICAgIH0pXG4gIH0sIFtdKVxuXG4gIGNvbnN0IHJlbW92ZU1lc3NhZ2UgPSB1c2VDYWxsYmFjaygobWVzc2FnZUlkOiBzdHJpbmcpID0+IHtcbiAgICBzZXRNZXNzYWdlcyhwcmV2ID0+IHByZXYuZmlsdGVyKG1zZyA9PiBtc2cuaWQgIT09IG1lc3NhZ2VJZCkpXG4gIH0sIFtdKVxuXG4gIHJldHVybiB7XG4gICAgbG9hZGluZ01lc3NhZ2VzLFxuICAgIG1lc3NhZ2VzLFxuICAgIGhhc01vcmVNZXNzYWdlczogISFsYXN0RXZhbHVhdGVkS2V5LFxuICAgIGlzTG9hZGluZ01vcmVNZXNzYWdlcyxcbiAgICBsb2FkTWVzc2FnZXMsXG4gICAgbG9hZE1vcmVNZXNzYWdlcyxcbiAgICBhZGRNZXNzYWdlLFxuICAgIHJlbW92ZU1lc3NhZ2UsXG4gICAgaGFuZGxlU2Nyb2xsLFxuICB9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBQTtBQUNBLFNBQVNBLFdBQVcsRUFBRUMsUUFBUSxFQUFFQyxNQUFNLEVBQUVDLFNBQVMsUUFBUSxPQUFPO0FBQ2hFLFNBQVNDLFdBQVcsUUFBUSxnQkFBZ0I7QUFFNUMsT0FBT0MsSUFBSSxNQUFNLHFCQUFxQjtBQUV0QyxTQUFTQyxnQkFBZ0IsUUFBUSw4QkFBOEI7QUFDL0QsU0FBU0MsSUFBSSxRQUFRLFNBQVM7QUFDOUIsU0FBU0MsT0FBTyxRQUFRLHdCQUF3QjtBQUNoRCxTQUFTQyxpQkFBaUIsUUFBUSxzQkFBc0I7QUFDeEQsU0FBU0Msc0JBQXNCLFFBQVEsMEJBQTBCO0FBRWpFLElBQU1DLHdCQUF3QixHQUFHLFNBQTNCQSx3QkFBd0JBLENBQUlDLE9BQWUsRUFBRUMsVUFBa0IsRUFBYTtFQUNoRixJQUFNQyxZQUFZLEdBQUcsSUFBSUMsTUFBTSxDQUFDTCxz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Q0FBQ2tLLEdBQUcsQ0FBQ2xJLE9BQU8sSUFBSSxFQUFFLEVBQUU5QixVQUFVO01BQUM7SUFBQSxDQUNoRSxDQUFDO0lBQ0hrQyxXQUFXLENBQUNtSSxTQUFTLENBQUM7RUFDeEIsQ0FBQyxFQUFFLENBQUN4SCxjQUFjLEVBQUVILE9BQU8sYUFBUEEsT0FBTyx1QkFBUEEsT0FBTyxDQUFFZixFQUFFLEVBQUVNLFFBQVEsQ0FBQyxDQUFDO0VBRTNDLElBQU1xSSxVQUFVLEdBQUduTCxXQUFXLENBQUMsVUFBQzJDLE9BQW9CLEVBQUs7SUFDdkRJLFdBQVcsQ0FBQyxVQUFBdUQsSUFBSSxFQUFJO01BQ2xCLElBQU04RSxvQkFBb0IsR0FBRzlFLElBQUksQ0FBQytFLFNBQVMsQ0FBQyxVQUFBUixHQUFHO1FBQUEsT0FBSUEsR0FBRyxDQUFDckksRUFBRSxLQUFLRyxPQUFPLENBQUNILEVBQUU7TUFBQSxFQUFDO01BRXpFLElBQUk0SSxvQkFBb0IsSUFBSSxDQUFDLEVBQUU7UUFDN0IsSUFBTTdCLFdBQVcsR0FBQU0sa0JBQUEsQ0FBT3ZELElBQUksQ0FBQztRQUM3QmlELFdBQVcsQ0FBQzZCLG9CQUFvQixDQUFDLEdBQUd6SSxPQUFPO1FBQzNDLE9BQU80RyxXQUFXO01BQ3BCO01BQ0EsVUFBQWYsTUFBQSxDQUFBcUIsa0JBQUEsQ0FBV3ZELElBQUksSUFBRTNELE9BQU87SUFDMUIsQ0FBQyxDQUFDO0VBQ0osQ0FBQyxFQUFFLEVBQUUsQ0FBQztFQUVOLElBQU0ySSxhQUFhLEdBQUd0TCxXQUFXLENBQUMsVUFBQ3VMLFNBQWlCLEVBQUs7SUFDdkR4SSxXQUFXLENBQUMsVUFBQXVELElBQUk7TUFBQSxPQUFJQSxJQUFJLENBQUNrRixNQUFNLENBQUMsVUFBQVgsR0FBRztRQUFBLE9BQUlBLEdBQUcsQ0FBQ3JJLEVBQUUsS0FBSytJLFNBQVM7TUFBQSxFQUFDO0lBQUEsRUFBQztFQUMvRCxDQUFDLEVBQUUsRUFBRSxDQUFDO0VBRU4sT0FBTztJQUNMbkosZUFBZSxFQUFmQSxlQUFlO0lBQ2ZVLFFBQVEsRUFBUkEsUUFBUTtJQUNSMkksZUFBZSxFQUFFLENBQUMsQ0FBQ3ZILGdCQUFnQjtJQUNuQ0oscUJBQXFCLEVBQXJCQSxxQkFBcUI7SUFDckJTLFlBQVksRUFBWkEsWUFBWTtJQUNac0UsZ0JBQWdCLEVBQWhCQSxnQkFBZ0I7SUFDaEJzQyxVQUFVLEVBQVZBLFVBQVU7SUFDVkcsYUFBYSxFQUFiQSxhQUFhO0lBQ2JoQixZQUFZLEVBQVpBO0VBQ0YsQ0FBQztBQUNILENBQUMiLCJpZ25vcmVMaXN0IjpbXX0=
493
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1c2VDYWxsYmFjayIsInVzZVN0YXRlIiwidXNlUmVmIiwidXNlRWZmZWN0IiwidXNlUHJvamVjdHMiLCJtYWlhIiwidXNlR2xvYmFsQ29udGV4dCIsInVzZVQiLCJ1c2VVc2VyIiwidXNlVGFiVGFza0RlZmF1bHQiLCJUQVNLX1VSTF9SRUdFWF9QQVRURVJOIiwibWFwQ09STGFuZyIsInJld3JpdGVUYXNrVXJsc0luQ29udGVudCIsImNvbnRlbnQiLCJ0YWJTZWdtZW50IiwidGFza1VybFJlZ2V4IiwiUmVnRXhwIiwicmVwbGFjZSIsInVybCIsInVzZUNoYXRNZXNzYWdlcyIsIl9yZWYiLCJfdXNlciRwZXJtaXNzaW9ucyIsIm9uRXJyb3IiLCJjaGF0SWQiLCJjdXJyZW50VXNlciIsInVzZXJJbml0aWFsTWVzc2FnZSIsIl9yZWYkYWdlbnRzIiwiYWdlbnRzIiwiX3VzZVQiLCJ0IiwiaTE4biIsInVzZXIiLCJ1c2VyUGVybWlzc2lvbnMiLCJwZXJtaXNzaW9ucyIsImFpX2FnZW50cyIsIl91c2VTdGF0ZSIsIl91c2VTdGF0ZTIiLCJfc2xpY2VkVG9BcnJheSIsImxvYWRpbmdNZXNzYWdlcyIsInNldExvYWRpbmdNZXNzYWdlcyIsIl91c2VTdGF0ZTMiLCJfb2JqZWN0U3ByZWFkIiwiaWQiLCJkYXRlIiwiRGF0ZSIsIm1lc3NhZ2UiLCJhdHRhY2htZW50cyIsIl91c2VTdGF0ZTQiLCJtZXNzYWdlcyIsInNldE1lc3NhZ2VzIiwiX3VzZVByb2plY3RzIiwiZmV0Y2hQcm9qZWN0cyIsIl91c2VHbG9iYWxDb250ZXh0Iiwic2VsZWN0QWdlbnQiLCJzZXRDaGlwc1Byb2plY3QiLCJzZXRQcm9qZWN0Iiwic2V0Q2xpZW50IiwicHJvamVjdCIsIl91c2VUYWJUYXNrRGVmYXVsdCIsImdldFRhYlRhc2tEZWZhdWx0IiwidGFiVGFza0RlZmF1bHQiLCJyZWZldGNoVGFiVGFza0RlZmF1bHQiLCJfdXNlU3RhdGU1IiwiX3VzZVN0YXRlNiIsImlzTG9hZGluZ01vcmVNZXNzYWdlcyIsInNldElzTG9hZGluZ01vcmVNZXNzYWdlcyIsIl91c2VTdGF0ZTciLCJfdXNlU3RhdGU4IiwibGFzdEV2YWx1YXRlZEtleSIsInNldExhc3RFdmFsdWF0ZWRLZXkiLCJpc0xvYWRpbmdSZWYiLCJpbml0aWFsTG9hZERvbmUiLCJwcmV2aW91c0NoYXRJZCIsInNldENvbnZlcnNhdGlvbkNvbnRleHRGcm9tTWV0YWRhdGEiLCJfcmVmMyIsIl9hc3luY1RvR2VuZXJhdG9yIiwiX3JlZ2VuZXJhdG9yUnVudGltZSIsIm1hcmsiLCJfY2FsbGVlIiwiX3JlZjIiLCJwcm9qZWN0SWRNZXNzYWdlIiwicHJvamVjdE5hbWVGcm9tU2Vzc2lvbiIsImNsaWVudElkRnJvbVNlc3Npb24iLCJjbGllbnROYW1lRnJvbVNlc3Npb24iLCJwcm9qZWN0cyIsImhhc011bHRpQWdlbnRzQWNjZXNzIiwicHJvamVjdElkTnVtIiwiZm91bmRQcm9qZWN0IiwiX2ZvdW5kUHJvamVjdCRjbGllbnQiLCJ3cmFwIiwiX2NvbnRleHQiLCJwcmV2IiwibmV4dCIsIk51bWJlciIsIm5hbWUiLCJhYnJ1cHQiLCJzZW50Iiwid2luZG93IiwiTUFJQV9DSEFUX0FJX0ZFQVRVUkVfQUNDRVNTX01VTFRJX0FHRU5UUyIsImZpbmQiLCJwIiwicHJvamVjdE5hbWUiLCJjbGllbnROYW1lIiwiY2xpZW50IiwicHJvamVjdElkIiwiU3RyaW5nIiwic3RvcCIsIl94IiwiYXBwbHkiLCJhcmd1bWVudHMiLCJsb2FkTWVzc2FnZXMiLCJfY2FsbGVlMiIsIl95aWVsZCRtYWlhJENoYXRzJGdldCIsIml0ZW1zIiwibmV4dEl0ZW0iLCJhZ2VudERlbGV0ZWQiLCJhZ2VudE5vUGVybWlzc2lvbiIsImhhc0FnZW50QWNjZXNzIiwiaGFzQWdlbnRQZXJtaXNzaW9uIiwicHJvamVjdERlbGV0ZWQiLCJhZ2VudEluTGlzdCIsImNvbnRleHRQcm9qZWN0SWQiLCJpdGVtc1RvU2V0IiwidGFiIiwiX3QiLCJfY29udGV4dDIiLCJjdXJyZW50IiwiQ2hhdHMiLCJnZXRDaGF0TWVzc2FnZXMiLCJvZmZzZXQiLCJjYW5jZWxsZWRUZXh0IiwibGFuZyIsImxhbmd1YWdlIiwiY2xpZW50SWQiLCJlbW9qaSIsInR5cGUiLCJpc19kZWxldGVkIiwiZGVsZXRlZF9hdCIsImRlbGV0ZWRBdCIsInZpZXciLCJhZ2VudCIsImlzX2Zyb21fY29udmVyc2F0aW9uIiwicHJvamVjdF9kZWxldGVkIiwiYSIsInVuZGVmaW5lZCIsImhhc19ub3RfYWNjZXNzIiwiaGFzX25vdF9wZXJtaXNzaW9ucyIsInBhcnNlSW50IiwiY29uY2F0IiwibWFwIiwiaXRlbSIsImZpbmlzaCIsImxvYWRNb3JlTWVzc2FnZXMiLCJfcmVmNSIsIl9jYWxsZWUzIiwiY29udGFpbmVyIiwib2xkU2Nyb2xsSGVpZ2h0Iiwib2xkU2Nyb2xsVG9wIiwiX3lpZWxkJG1haWEkQ2hhdHMkZ2V0MiIsIml0ZW1zVG9NZXJnZSIsIm5ld01lc3NhZ2VzIiwiX3QyIiwiX2NvbnRleHQzIiwic2Nyb2xsSGVpZ2h0Iiwic2Nyb2xsVG9wIiwiX3RvQ29uc3VtYWJsZUFycmF5Iiwic2xpY2UiLCJyZXF1ZXN0QW5pbWF0aW9uRnJhbWUiLCJjb250YWluZXJSZWYiLCJuZXdTY3JvbGxIZWlnaHQiLCJoZWlnaHREaWZmZXJlbmNlIiwiX3gyIiwiaGFuZGxlU2Nyb2xsIiwiY2xpZW50SGVpZ2h0Iiwic2Nyb2xsUGVyY2VudGFnZSIsImRpZFJld3JpdGVSZWYiLCJsZW5ndGgiLCJuZWVkc1Jld3JpdGUiLCJzb21lIiwibXNnIiwibWF0Y2hlcyIsIm1hdGNoIiwiZW5kc1dpdGgiLCJpbmNsdWRlcyIsInJld3JpdHRlbiIsImFkZE1lc3NhZ2UiLCJleGlzdGluZ01lc3NhZ2VJbmRleCIsImZpbmRJbmRleCIsInJlbW92ZU1lc3NhZ2UiLCJtZXNzYWdlSWQiLCJmaWx0ZXIiLCJoYXNNb3JlTWVzc2FnZXMiXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvaG9va3MvdXNlQ2hhdE1lc3NhZ2VzL3VzZUNoYXRNZXNzYWdlcy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvaW5kZW50ICovXG5pbXBvcnQgeyB1c2VDYWxsYmFjaywgdXNlU3RhdGUsIHVzZVJlZiwgdXNlRWZmZWN0IH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyB1c2VQcm9qZWN0cyB9IGZyb20gJy4uL3VzZVByb2plY3RzJ1xuaW1wb3J0IHsgQ2hhdE1lc3NhZ2UgfSBmcm9tICcuLi8uLi90eXBlcy9DaGF0J1xuaW1wb3J0IG1haWEgZnJvbSAnLi4vLi4vc2VydmljZXMvbWFpYSdcbmltcG9ydCB7IFVzZUNoYXRNZXNzYWdlc1Byb3BzIH0gZnJvbSAnLi91c2VDaGF0TWVzc2FnZXMuaW50ZXJmYWNlJ1xuaW1wb3J0IHsgdXNlR2xvYmFsQ29udGV4dCB9IGZyb20gJy4uLy4uL2NvbnRleHQvZ2xvYmFsLWNvbnRleHQnXG5pbXBvcnQgeyB1c2VUIH0gZnJvbSAnLi4vdXNlVCdcbmltcG9ydCB7IHVzZVVzZXIgfSBmcm9tICcuLi8uLi9jb250ZXh0L2Nvci11c2VyJ1xuaW1wb3J0IHsgdXNlVGFiVGFza0RlZmF1bHQgfSBmcm9tICcuLi91c2VUYWJUYXNrRGVmYXVsdCdcbmltcG9ydCB7IFRBU0tfVVJMX1JFR0VYX1BBVFRFUk4gfSBmcm9tICcuLi8uLi9jb25zdGFudHMvdGFza1VybHMnXG5pbXBvcnQgeyBtYXBDT1JMYW5nIH0gZnJvbSAnLi4vLi4vbGFuZy91dGlscydcblxuY29uc3QgcmV3cml0ZVRhc2tVcmxzSW5Db250ZW50ID0gKGNvbnRlbnQ6IHN0cmluZywgdGFiU2VnbWVudDogc3RyaW5nKTogc3RyaW5nID0+IHtcbiAgY29uc3QgdGFza1VybFJlZ2V4ID0gbmV3IFJlZ0V4cChUQVNLX1VSTF9SRUdFWF9QQVRURVJOLCAnZycpXG4gIHJldHVybiBjb250ZW50LnJlcGxhY2UodGFza1VybFJlZ2V4LCB1cmwgPT5cbiAgICB1cmwucmVwbGFjZSgvXFwvKGRldGFpbHxtZXNzYWdlfG1lc3NhZ2VzfGZpbGVzfGhpc3Rvcnl8aG91cnMpKD89JHxcXD8pLywgdGFiU2VnbWVudClcbiAgKVxufVxuXG5leHBvcnQgY29uc3QgdXNlQ2hhdE1lc3NhZ2VzID0gKHtcbiAgb25FcnJvcixcbiAgY2hhdElkLFxuICBjdXJyZW50VXNlcixcbiAgdXNlckluaXRpYWxNZXNzYWdlLFxuICBhZ2VudHMgPSBbXSxcbn06IFVzZUNoYXRNZXNzYWdlc1Byb3BzKSA9PiB7XG4gIGNvbnN0IHsgdCwgaTE4biB9ID0gdXNlVCgpXG4gIGNvbnN0IHVzZXIgPSB1c2VVc2VyKClcbiAgY29uc3QgdXNlclBlcm1pc3Npb25zID0gdXNlcj8ucGVybWlzc2lvbnM/LmFpX2FnZW50c1xuICBjb25zdCBbbG9hZGluZ01lc3NhZ2VzLCBzZXRMb2FkaW5nTWVzc2FnZXNdID0gdXNlU3RhdGUoZmFsc2UpXG4gIGNvbnN0IFttZXNzYWdlcywgc2V0TWVzc2FnZXNdID0gdXNlU3RhdGU8Q2hhdE1lc3NhZ2VbXT4oXG4gICAgdXNlckluaXRpYWxNZXNzYWdlXG4gICAgICA/IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBpZDogJ3VzZXItaW5pdGlhbC1tZXNzYWdlJyxcbiAgICAgICAgICAgIGRhdGU6IG5ldyBEYXRlKCksXG4gICAgICAgICAgICB1c2VyOiBjdXJyZW50VXNlcixcbiAgICAgICAgICAgIG1lc3NhZ2U6IHVzZXJJbml0aWFsTWVzc2FnZS5tZXNzYWdlLFxuICAgICAgICAgICAgLi4uKHVzZXJJbml0aWFsTWVzc2FnZS5hdHRhY2htZW50cyA/IHsgYXR0YWNobWVudHM6IHVzZXJJbml0aWFsTWVzc2FnZS5hdHRhY2htZW50cyB9IDoge30pLFxuICAgICAgICAgIH0sXG4gICAgICAgIF1cbiAgICAgIDogW11cbiAgKVxuICBjb25zdCB7IGZldGNoUHJvamVjdHMgfSA9IHVzZVByb2plY3RzKClcbiAgY29uc3QgeyBzZWxlY3RBZ2VudCwgc2V0Q2hpcHNQcm9qZWN0LCBzZXRQcm9qZWN0LCBzZXRDbGllbnQsIHByb2plY3QgfSA9IHVzZUdsb2JhbENvbnRleHQoKVxuICBjb25zdCB7IGdldFRhYlRhc2tEZWZhdWx0LCB0YWJUYXNrRGVmYXVsdCwgcmVmZXRjaFRhYlRhc2tEZWZhdWx0IH0gPSB1c2VUYWJUYXNrRGVmYXVsdCgpXG4gIGNvbnN0IFtpc0xvYWRpbmdNb3JlTWVzc2FnZXMsIHNldElzTG9hZGluZ01vcmVNZXNzYWdlc10gPSB1c2VTdGF0ZShmYWxzZSlcbiAgY29uc3QgW2xhc3RFdmFsdWF0ZWRLZXksIHNldExhc3RFdmFsdWF0ZWRLZXldID0gdXNlU3RhdGU8bnVtYmVyIHwgdW5kZWZpbmVkPigwKVxuICBjb25zdCBpc0xvYWRpbmdSZWYgPSB1c2VSZWYoZmFsc2UpXG4gIGNvbnN0IGluaXRpYWxMb2FkRG9uZSA9IHVzZVJlZihmYWxzZSlcbiAgY29uc3QgcHJldmlvdXNDaGF0SWQgPSB1c2VSZWYoY2hhdElkKVxuXG4gIGNvbnN0IHNldENvbnZlcnNhdGlvbkNvbnRleHRGcm9tTWV0YWRhdGEgPSB1c2VDYWxsYmFjayhcbiAgICBhc3luYyAoe1xuICAgICAgcHJvamVjdElkTWVzc2FnZSxcbiAgICAgIHByb2plY3ROYW1lRnJvbVNlc3Npb24sXG4gICAgICBjbGllbnRJZEZyb21TZXNzaW9uLFxuICAgICAgY2xpZW50TmFtZUZyb21TZXNzaW9uLFxuICAgIH06IHtcbiAgICAgIHByb2plY3RJZE1lc3NhZ2U6IHN0cmluZyB8IG51bWJlciB8IG51bGwgfCB1bmRlZmluZWRcbiAgICAgIHByb2plY3ROYW1lRnJvbVNlc3Npb246IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWRcbiAgICAgIGNsaWVudElkRnJvbVNlc3Npb246IHN0cmluZyB8IG51bWJlciB8IG51bGwgfCB1bmRlZmluZWRcbiAgICAgIGNsaWVudE5hbWVGcm9tU2Vzc2lvbjogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZFxuICAgIH0pID0+IHtcbiAgICAgIC8vIENvbnZlcnNhY2nDs24gY29uIGNsaWVudF9tZXRhZGF0YTogc2V0ZWFyIGNsaWVudGUgeSBsaW1waWFyIHByb3llY3RvXG4gICAgICBpZiAoY2xpZW50SWRGcm9tU2Vzc2lvbiAhPSBudWxsICYmIGNsaWVudE5hbWVGcm9tU2Vzc2lvbikge1xuICAgICAgICBzZXRDbGllbnQoeyBpZDogTnVtYmVyKGNsaWVudElkRnJvbVNlc3Npb24pLCBuYW1lOiBjbGllbnROYW1lRnJvbVNlc3Npb24gfSlcbiAgICAgICAgc2V0Q2hpcHNQcm9qZWN0KG51bGwpXG4gICAgICAgIHNldFByb2plY3QobnVsbClcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHByb2plY3RzID0gYXdhaXQgZmV0Y2hQcm9qZWN0cyhwcm9qZWN0SWRNZXNzYWdlKVxuICAgICAgY29uc3QgaGFzTXVsdGlBZ2VudHNBY2Nlc3MgPSAhIXdpbmRvdy5NQUlBX0NIQVRfQUlfRkVBVFVSRV9BQ0NFU1NfTVVMVElfQUdFTlRTXG5cbiAgICAgIGlmIChwcm9qZWN0SWRNZXNzYWdlICYmIGhhc011bHRpQWdlbnRzQWNjZXNzKSB7XG4gICAgICAgIGNvbnN0IHByb2plY3RJZE51bSA9IE51bWJlcihwcm9qZWN0SWRNZXNzYWdlKVxuICAgICAgICBjb25zdCBmb3VuZFByb2plY3QgPSBwcm9qZWN0cz8uZmluZChwID0+IE51bWJlcihwLmlkKSA9PT0gcHJvamVjdElkTnVtKVxuXG4gICAgICAgIGlmIChmb3VuZFByb2plY3QpIHtcbiAgICAgICAgICBzZXRDaGlwc1Byb2plY3Qoe1xuICAgICAgICAgICAgcHJvamVjdE5hbWU6IGZvdW5kUHJvamVjdC5uYW1lLFxuICAgICAgICAgICAgY2xpZW50TmFtZTogZm91bmRQcm9qZWN0LmNsaWVudD8ubmFtZSB8fCAnJyxcbiAgICAgICAgICAgIHByb2plY3RJZDogU3RyaW5nKGZvdW5kUHJvamVjdC5pZCksXG4gICAgICAgICAgfSlcbiAgICAgICAgICBzZXRQcm9qZWN0KGZvdW5kUHJvamVjdClcbiAgICAgICAgfSBlbHNlIGlmIChwcm9qZWN0TmFtZUZyb21TZXNzaW9uKSB7XG4gICAgICAgICAgc2V0Q2hpcHNQcm9qZWN0KHtcbiAgICAgICAgICAgIHByb2plY3ROYW1lOiBwcm9qZWN0TmFtZUZyb21TZXNzaW9uLFxuICAgICAgICAgICAgY2xpZW50TmFtZTogJycsXG4gICAgICAgICAgICBwcm9qZWN0SWQ6IFN0cmluZyhwcm9qZWN0SWRNZXNzYWdlKSxcbiAgICAgICAgICB9KVxuICAgICAgICAgIHNldFByb2plY3QoeyBpZDogcHJvamVjdElkTnVtLCBuYW1lOiBwcm9qZWN0TmFtZUZyb21TZXNzaW9uIH0pXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc2V0Q2hpcHNQcm9qZWN0KG51bGwpXG4gICAgICAgICAgc2V0UHJvamVjdChudWxsKVxuICAgICAgICB9XG5cbiAgICAgICAgc2V0Q2xpZW50Py4obnVsbClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNldENoaXBzUHJvamVjdChudWxsKVxuICAgICAgICBzZXRQcm9qZWN0KG51bGwpXG4gICAgICAgIHNldENsaWVudD8uKG51bGwpXG4gICAgICB9XG4gICAgfSxcbiAgICBbZmV0Y2hQcm9qZWN0cywgc2V0Q2xpZW50LCBzZXRDaGlwc1Byb2plY3QsIHNldFByb2plY3RdXG4gIClcblxuICBjb25zdCBsb2FkTWVzc2FnZXMgPSB1c2VDYWxsYmFjayhhc3luYyAoKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIHNldExvYWRpbmdNZXNzYWdlcyh0cnVlKVxuICAgICAgaW5pdGlhbExvYWREb25lLmN1cnJlbnQgPSBmYWxzZVxuICAgICAgY29uc3Qge1xuICAgICAgICBpdGVtcyxcbiAgICAgICAgbmV4dEl0ZW0sXG4gICAgICAgIGFnZW50RGVsZXRlZCxcbiAgICAgICAgYWdlbnROb1Blcm1pc3Npb24sXG4gICAgICAgIGhhc0FnZW50QWNjZXNzLFxuICAgICAgICBoYXNBZ2VudFBlcm1pc3Npb24sXG4gICAgICAgIHByb2plY3RJZDogcHJvamVjdElkTWVzc2FnZSxcbiAgICAgICAgcHJvamVjdE5hbWU6IHByb2plY3ROYW1lRnJvbVNlc3Npb24sXG4gICAgICAgIHByb2plY3REZWxldGVkLFxuICAgICAgICBjbGllbnRJZDogY2xpZW50SWRGcm9tU2Vzc2lvbixcbiAgICAgICAgY2xpZW50TmFtZTogY2xpZW50TmFtZUZyb21TZXNzaW9uLFxuICAgICAgfSA9IGF3YWl0IG1haWEuQ2hhdHMuZ2V0Q2hhdE1lc3NhZ2VzKHtcbiAgICAgICAgY2hhdElkLFxuICAgICAgICBjdXJyZW50VXNlcixcbiAgICAgICAgb2Zmc2V0OiBsYXN0RXZhbHVhdGVkS2V5LFxuICAgICAgICBjYW5jZWxsZWRUZXh0OiB0KCdjaGF0LmNhbmNlbGxlZCcpLFxuICAgICAgICBsYW5nOiBtYXBDT1JMYW5nKGkxOG4ubGFuZ3VhZ2UpLFxuICAgICAgfSlcbiAgICAgIGlmIChhZ2VudERlbGV0ZWQpIHtcbiAgICAgICAgc2VsZWN0QWdlbnQoe1xuICAgICAgICAgIGlkOiBhZ2VudERlbGV0ZWQuaWQsXG4gICAgICAgICAgbmFtZTogYWdlbnREZWxldGVkLm5hbWUsXG4gICAgICAgICAgZW1vamk6IGFnZW50RGVsZXRlZC5lbW9qaSxcbiAgICAgICAgICB0eXBlOiAnY3VzdG9tJyxcbiAgICAgICAgICBpc19kZWxldGVkOiB0cnVlLFxuICAgICAgICAgIGRlbGV0ZWRfYXQ6IGFnZW50RGVsZXRlZC5kZWxldGVkQXQsXG4gICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIC8vIFNpIGVsIGFnZW50ZSBubyBlc3TDoSBlbiBsYSBsaXN0YSBwZXJvIHRpZW5lIHBlcm1pc29zLCBhY2Nlc28geSBubyBlc3TDoSBlbGltaW5hZG8sIHNldGVhcmxvIG5vcm1hbG1lbnRlXG4gICAgICAvLyBFeGNsdWlyIGFnZW50ZXMgbm8tY3VzdG9tIHBhcmEgdXN1YXJpb3MgY29uIHJvbGVzIGRlc2hhYmlsaXRhZG9zXG4gICAgICBpZiAoXG4gICAgICAgIGFnZW50Tm9QZXJtaXNzaW9uICYmXG4gICAgICAgICFhZ2VudERlbGV0ZWQgJiZcbiAgICAgICAgdXNlclBlcm1pc3Npb25zPy52aWV3ICYmXG4gICAgICAgIGhhc0FnZW50QWNjZXNzICYmXG4gICAgICAgIGhhc0FnZW50UGVybWlzc2lvbiAmJlxuICAgICAgICAhYWdlbnRzLmZpbmQoYWdlbnQgPT4gYWdlbnQuaWQgPT09IGFnZW50Tm9QZXJtaXNzaW9uLmlkKVxuICAgICAgKSB7XG4gICAgICAgIHNlbGVjdEFnZW50KHtcbiAgICAgICAgICBpZDogYWdlbnROb1Blcm1pc3Npb24uaWQsXG4gICAgICAgICAgbmFtZTogYWdlbnROb1Blcm1pc3Npb24ubmFtZSxcbiAgICAgICAgICBlbW9qaTogYWdlbnROb1Blcm1pc3Npb24uZW1vamksXG4gICAgICAgICAgdHlwZTogYWdlbnROb1Blcm1pc3Npb24udHlwZSBhcyAncG0nIHwgJ2N1c3RvbScgfCAnY2xvbmUnLFxuICAgICAgICAgIGlzX2Zyb21fY29udmVyc2F0aW9uOiB0cnVlLFxuICAgICAgICAgIC4uLihwcm9qZWN0RGVsZXRlZCA/IHsgcHJvamVjdF9kZWxldGVkOiB7IG5hbWU6IHByb2plY3REZWxldGVkLm5hbWUgfSB9IDoge30pLFxuICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICAvLyBTaSBlbCBhZ2VudGUgZXN0w6EgZW4gbGEgbGlzdGEgeSB0aWVuZSBhY2Nlc28vcGVybWlzb3MsIGFjdHVhbGl6YXIgcHJvamVjdF9kZWxldGVkIChvIGxpbXBpYXJsbyBhbCBjYW1iaWFyIGRlIGNoYXQpXG4gICAgICBpZiAoXG4gICAgICAgIGFnZW50Tm9QZXJtaXNzaW9uICYmXG4gICAgICAgICFhZ2VudERlbGV0ZWQgJiZcbiAgICAgICAgaGFzQWdlbnRBY2Nlc3MgJiZcbiAgICAgICAgaGFzQWdlbnRQZXJtaXNzaW9uICYmXG4gICAgICAgIGFnZW50cy5maW5kKGEgPT4gYS5pZCA9PT0gYWdlbnROb1Blcm1pc3Npb24uaWQpXG4gICAgICApIHtcbiAgICAgICAgY29uc3QgYWdlbnRJbkxpc3QgPSBhZ2VudHMuZmluZChhID0+IGEuaWQgPT09IGFnZW50Tm9QZXJtaXNzaW9uLmlkKVxuICAgICAgICBpZiAoYWdlbnRJbkxpc3QpIHtcbiAgICAgICAgICBzZWxlY3RBZ2VudCh7XG4gICAgICAgICAgICAuLi5hZ2VudEluTGlzdCxcbiAgICAgICAgICAgIC4uLihwcm9qZWN0RGVsZXRlZCA/IHsgcHJvamVjdF9kZWxldGVkOiB7IG5hbWU6IHByb2plY3REZWxldGVkLm5hbWUgfSB9IDogeyBwcm9qZWN0X2RlbGV0ZWQ6IHVuZGVmaW5lZCB9KSxcbiAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIFNpIGVsIGFnZW50ZSBubyB0aWVuZSBhY2Nlc28gbyBwZXJtaXNvcyBzZWfDum4gbGEgcmVzcHVlc3RhIGRlIHNlc3Npb25zLCBzZWxlY2Npb25hcmxvIGNvbiBlbCBmbGFnIGNvcnJlc3BvbmRpZW50ZVxuICAgICAgLy8gTGEgdmFsaWRhY2nDs24gYWhvcmEgc2UgYmFzYSBlbiBsYXMgcHJvcGllZGFkZXMgaGFzX2FnZW50X2FjY2VzcyB5IGhhc19hZ2VudF9wZXJtaXNzaW9uIGRlIGxhIHJlc3B1ZXN0YVxuICAgICAgaWYgKGFnZW50Tm9QZXJtaXNzaW9uICYmICFhZ2VudERlbGV0ZWQpIHtcbiAgICAgICAgaWYgKCFoYXNBZ2VudEFjY2Vzcykge1xuICAgICAgICAgIC8vIENhc28gMTogTm8gdGllbmUgYWNjZXNvIGFsIGFnZW50ZVxuICAgICAgICAgIHNlbGVjdEFnZW50KHtcbiAgICAgICAgICAgIGlkOiBhZ2VudE5vUGVybWlzc2lvbi5pZCxcbiAgICAgICAgICAgIG5hbWU6IGFnZW50Tm9QZXJtaXNzaW9uLm5hbWUsXG4gICAgICAgICAgICBlbW9qaTogYWdlbnROb1Blcm1pc3Npb24uZW1vamksXG4gICAgICAgICAgICB0eXBlOiBhZ2VudE5vUGVybWlzc2lvbi50eXBlIGFzICdwbScgfCAnY3VzdG9tJyB8ICdjbG9uZScsXG4gICAgICAgICAgICBoYXNfbm90X2FjY2VzczogdHJ1ZSxcbiAgICAgICAgICAgIC4uLihwcm9qZWN0RGVsZXRlZCA/IHsgcHJvamVjdF9kZWxldGVkOiB7IG5hbWU6IHByb2plY3REZWxldGVkLm5hbWUgfSB9IDoge30pLFxuICAgICAgICAgIH0pXG4gICAgICAgIH0gZWxzZSBpZiAoIWhhc0FnZW50UGVybWlzc2lvbikge1xuICAgICAgICAgIC8vIENhc28gMjogTm8gdGllbmUgcGVybWlzb3MgcGFyYSB2aXN1YWxpemFyL2ludGVyYWN0dWFyIGNvbiBlbCBhZ2VudGVcbiAgICAgICAgICBzZWxlY3RBZ2VudCh7XG4gICAgICAgICAgICBpZDogYWdlbnROb1Blcm1pc3Npb24uaWQsXG4gICAgICAgICAgICBuYW1lOiBhZ2VudE5vUGVybWlzc2lvbi5uYW1lLFxuICAgICAgICAgICAgZW1vamk6IGFnZW50Tm9QZXJtaXNzaW9uLmVtb2ppLFxuICAgICAgICAgICAgdHlwZTogYWdlbnROb1Blcm1pc3Npb24udHlwZSBhcyAncG0nIHwgJ2N1c3RvbScgfCAnY2xvbmUnLFxuICAgICAgICAgICAgaGFzX25vdF9wZXJtaXNzaW9uczogdHJ1ZSxcbiAgICAgICAgICAgIC4uLihwcm9qZWN0RGVsZXRlZCA/IHsgcHJvamVjdF9kZWxldGVkOiB7IG5hbWU6IHByb2plY3REZWxldGVkLm5hbWUgfSB9IDoge30pLFxuICAgICAgICAgIH0pXG4gICAgICAgIH0gZWxzZSBpZiAocHJvamVjdERlbGV0ZWQpIHtcbiAgICAgICAgICAvLyBDYXNvIDM6IEVsIHByb3llY3RvIGRlIGxhIGNvbnZlcnNhY2nDs24gZnVlIGVsaW1pbmFkb1xuICAgICAgICAgIHNlbGVjdEFnZW50KHtcbiAgICAgICAgICAgIGlkOiBhZ2VudE5vUGVybWlzc2lvbi5pZCxcbiAgICAgICAgICAgIG5hbWU6IGFnZW50Tm9QZXJtaXNzaW9uLm5hbWUsXG4gICAgICAgICAgICBlbW9qaTogYWdlbnROb1Blcm1pc3Npb24uZW1vamksXG4gICAgICAgICAgICB0eXBlOiBhZ2VudE5vUGVybWlzc2lvbi50eXBlIGFzICdwbScgfCAnY3VzdG9tJyB8ICdjbG9uZScsXG4gICAgICAgICAgICBwcm9qZWN0X2RlbGV0ZWQ6IHsgbmFtZTogcHJvamVjdERlbGV0ZWQubmFtZSB9LFxuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgYXdhaXQgc2V0Q29udmVyc2F0aW9uQ29udGV4dEZyb21NZXRhZGF0YSh7XG4gICAgICAgIHByb2plY3RJZE1lc3NhZ2UsXG4gICAgICAgIHByb2plY3ROYW1lRnJvbVNlc3Npb24sXG4gICAgICAgIGNsaWVudElkRnJvbVNlc3Npb24sXG4gICAgICAgIGNsaWVudE5hbWVGcm9tU2Vzc2lvbixcbiAgICAgIH0pXG5cbiAgICAgIC8vIFNpIGhheSBwcm95ZWN0byBlbiBsYSBjb252ZXJzYWNpw7NuLCByZWVzY3JpYmlyIFVSTHMgZGUgdGFyZWFzIGNvbiBlbCB0YWIgZGVsIHVzdWFyaW8gKG1lKVxuICAgICAgY29uc3QgY29udGV4dFByb2plY3RJZCA9IHByb2plY3RJZE1lc3NhZ2UgPyBwYXJzZUludChTdHJpbmcocHJvamVjdElkTWVzc2FnZSksIDEwKSA6IG51bGxcbiAgICAgIGxldCBpdGVtc1RvU2V0ID0gaXRlbXNcbiAgICAgIGlmIChjb250ZXh0UHJvamVjdElkKSB7XG4gICAgICAgIGNvbnN0IHRhYiA9IGF3YWl0IGdldFRhYlRhc2tEZWZhdWx0KDEpXG4gICAgICAgIGNvbnN0IHRhYlNlZ21lbnQgPSB0YWIgPyBgLyR7dGFifWAgOiAnL2RldGFpbCdcbiAgICAgICAgaXRlbXNUb1NldCA9IGl0ZW1zLm1hcChpdGVtID0+ICh7XG4gICAgICAgICAgLi4uaXRlbSxcbiAgICAgICAgICBtZXNzYWdlOiByZXdyaXRlVGFza1VybHNJbkNvbnRlbnQoaXRlbS5tZXNzYWdlIHx8ICcnLCB0YWJTZWdtZW50KSxcbiAgICAgICAgfSkpXG4gICAgICB9XG4gICAgICBzZXRNZXNzYWdlcyhpdGVtc1RvU2V0KVxuICAgICAgc2V0TGFzdEV2YWx1YXRlZEtleShOdW1iZXIobmV4dEl0ZW0pKVxuICAgICAgaW5pdGlhbExvYWREb25lLmN1cnJlbnQgPSB0cnVlXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIG9uRXJyb3I/LigpXG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHNldExvYWRpbmdNZXNzYWdlcyhmYWxzZSlcbiAgICB9XG4gIH0sIFtjaGF0SWQsIGN1cnJlbnRVc2VyLCBzZXRDb252ZXJzYXRpb25Db250ZXh0RnJvbU1ldGFkYXRhLCBvbkVycm9yLCBnZXRUYWJUYXNrRGVmYXVsdF0pXG5cbiAgY29uc3QgbG9hZE1vcmVNZXNzYWdlcyA9IHVzZUNhbGxiYWNrKFxuICAgIGFzeW5jIChjb250YWluZXI6IEhUTUxEaXZFbGVtZW50IHwgbnVsbCkgPT4ge1xuICAgICAgaWYgKGlzTG9hZGluZ1JlZi5jdXJyZW50IHx8ICFsYXN0RXZhbHVhdGVkS2V5IHx8ICFjb250YWluZXIpIHJldHVyblxuICAgICAgdHJ5IHtcbiAgICAgICAgaXNMb2FkaW5nUmVmLmN1cnJlbnQgPSB0cnVlXG4gICAgICAgIHNldElzTG9hZGluZ01vcmVNZXNzYWdlcyh0cnVlKVxuXG4gICAgICAgIGNvbnN0IG9sZFNjcm9sbEhlaWdodCA9IGNvbnRhaW5lci5zY3JvbGxIZWlnaHRcbiAgICAgICAgY29uc3Qgb2xkU2Nyb2xsVG9wID0gY29udGFpbmVyLnNjcm9sbFRvcFxuXG4gICAgICAgIGNvbnN0IHtcbiAgICAgICAgICBpdGVtcyxcbiAgICAgICAgICBuZXh0SXRlbSxcbiAgICAgICAgICBwcm9qZWN0SWQ6IHByb2plY3RJZE1lc3NhZ2UsXG4gICAgICAgICAgcHJvamVjdE5hbWU6IHByb2plY3ROYW1lRnJvbVNlc3Npb24sXG4gICAgICAgICAgY2xpZW50SWQ6IGNsaWVudElkRnJvbVNlc3Npb24sXG4gICAgICAgICAgY2xpZW50TmFtZTogY2xpZW50TmFtZUZyb21TZXNzaW9uLFxuICAgICAgICB9ID0gYXdhaXQgbWFpYS5DaGF0cy5nZXRDaGF0TWVzc2FnZXMoe1xuICAgICAgICAgIGNoYXRJZCxcbiAgICAgICAgICBjdXJyZW50VXNlcixcbiAgICAgICAgICBvZmZzZXQ6IGxhc3RFdmFsdWF0ZWRLZXksXG4gICAgICAgICAgbGFuZzogbWFwQ09STGFuZyhpMThuLmxhbmd1YWdlKSxcbiAgICAgICAgfSlcblxuICAgICAgICBhd2FpdCBzZXRDb252ZXJzYXRpb25Db250ZXh0RnJvbU1ldGFkYXRhKHtcbiAgICAgICAgICBwcm9qZWN0SWRNZXNzYWdlLFxuICAgICAgICAgIHByb2plY3ROYW1lRnJvbVNlc3Npb24sXG4gICAgICAgICAgY2xpZW50SWRGcm9tU2Vzc2lvbixcbiAgICAgICAgICBjbGllbnROYW1lRnJvbVNlc3Npb24sXG4gICAgICAgIH0pXG5cbiAgICAgICAgLy8gU2kgaGF5IHByb3llY3RvIGVuIGxhIGNvbnZlcnNhY2nDs24sIHJlZXNjcmliaXIgVVJMcyBkZSB0YXJlYXMgZW4gbG9zIG1lbnNhamVzIGNhcmdhZG9zXG4gICAgICAgIGNvbnN0IGNvbnRleHRQcm9qZWN0SWQgPSBwcm9qZWN0SWRNZXNzYWdlID8gcGFyc2VJbnQoU3RyaW5nKHByb2plY3RJZE1lc3NhZ2UpLCAxMCkgOiBudWxsXG4gICAgICAgIGxldCBpdGVtc1RvTWVyZ2UgPSBpdGVtc1xuICAgICAgICBpZiAoY29udGV4dFByb2plY3RJZCkge1xuICAgICAgICAgIGNvbnN0IHRhYiA9IGF3YWl0IGdldFRhYlRhc2tEZWZhdWx0KDEpXG4gICAgICAgICAgY29uc3QgdGFiU2VnbWVudCA9IHRhYiA/IGAvJHt0YWJ9YCA6ICcvZGV0YWlsJ1xuICAgICAgICAgIGl0ZW1zVG9NZXJnZSA9IGl0ZW1zLm1hcChpdGVtID0+ICh7XG4gICAgICAgICAgICAuLi5pdGVtLFxuICAgICAgICAgICAgbWVzc2FnZTogcmV3cml0ZVRhc2tVcmxzSW5Db250ZW50KGl0ZW0ubWVzc2FnZSB8fCAnJywgdGFiU2VnbWVudCksXG4gICAgICAgICAgfSkpXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbmV3TWVzc2FnZXMgPSBbLi4ubWVzc2FnZXMuc2xpY2UoMCwgMSksIC4uLml0ZW1zVG9NZXJnZSwgLi4ubWVzc2FnZXMuc2xpY2UoMSldXG4gICAgICAgIHNldE1lc3NhZ2VzKG5ld01lc3NhZ2VzKVxuICAgICAgICBzZXRMYXN0RXZhbHVhdGVkS2V5KE51bWJlcihuZXh0SXRlbSkpXG5cbiAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcbiAgICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgY29udGFpbmVyUmVmID0gY29udGFpbmVyXG4gICAgICAgICAgICBpZiAoY29udGFpbmVyUmVmKSB7XG4gICAgICAgICAgICAgIGNvbnN0IG5ld1Njcm9sbEhlaWdodCA9IGNvbnRhaW5lclJlZi5zY3JvbGxIZWlnaHRcbiAgICAgICAgICAgICAgY29uc3QgaGVpZ2h0RGlmZmVyZW5jZSA9IG5ld1Njcm9sbEhlaWdodCAtIG9sZFNjcm9sbEhlaWdodFxuICAgICAgICAgICAgICBjb250YWluZXJSZWYuc2Nyb2xsVG9wID0gb2xkU2Nyb2xsVG9wICsgaGVpZ2h0RGlmZmVyZW5jZVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICAgIH0pXG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBvbkVycm9yPy4oKVxuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgc2V0SXNMb2FkaW5nTW9yZU1lc3NhZ2VzKGZhbHNlKVxuICAgICAgICBpc0xvYWRpbmdSZWYuY3VycmVudCA9IGZhbHNlXG4gICAgICB9XG4gICAgfSxcbiAgICBbY2hhdElkLCBjdXJyZW50VXNlciwgbGFzdEV2YWx1YXRlZEtleSwgb25FcnJvciwgbWVzc2FnZXMsIGdldFRhYlRhc2tEZWZhdWx0LCBzZXRDb252ZXJzYXRpb25Db250ZXh0RnJvbU1ldGFkYXRhXVxuICApXG5cbiAgY29uc3QgaGFuZGxlU2Nyb2xsID0gdXNlQ2FsbGJhY2soXG4gICAgKGNvbnRhaW5lcjogSFRNTERpdkVsZW1lbnQgfCBudWxsKSA9PiB7XG4gICAgICBpZiAoIWNvbnRhaW5lciB8fCBpc0xvYWRpbmdSZWYuY3VycmVudCB8fCAhaW5pdGlhbExvYWREb25lLmN1cnJlbnQpIHJldHVyblxuXG4gICAgICBjb25zdCB7IHNjcm9sbFRvcCwgc2Nyb2xsSGVpZ2h0LCBjbGllbnRIZWlnaHQgfSA9IGNvbnRhaW5lclxuICAgICAgY29uc3Qgc2Nyb2xsUGVyY2VudGFnZSA9IHNjcm9sbEhlaWdodCAtIGNsaWVudEhlaWdodCA+IDAgPyAoc2Nyb2xsVG9wIC8gKHNjcm9sbEhlaWdodCAtIGNsaWVudEhlaWdodCkpICogMTAwIDogMFxuXG4gICAgICBpZiAoc2Nyb2xsUGVyY2VudGFnZSA8IDEwKSB7XG4gICAgICAgIGxvYWRNb3JlTWVzc2FnZXMoY29udGFpbmVyKVxuICAgICAgfVxuICAgIH0sXG4gICAgW2xvYWRNb3JlTWVzc2FnZXNdXG4gIClcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChjaGF0SWQgIT09IHByZXZpb3VzQ2hhdElkLmN1cnJlbnQpIHtcbiAgICAgIHNldE1lc3NhZ2VzKFxuICAgICAgICB1c2VySW5pdGlhbE1lc3NhZ2VcbiAgICAgICAgICA/IFtcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGlkOiAndXNlci1pbml0aWFsLW1lc3NhZ2UnLFxuICAgICAgICAgICAgICAgIGRhdGU6IG5ldyBEYXRlKCksXG4gICAgICAgICAgICAgICAgdXNlcjogY3VycmVudFVzZXIsXG4gICAgICAgICAgICAgICAgbWVzc2FnZTogdXNlckluaXRpYWxNZXNzYWdlLm1lc3NhZ2UsXG4gICAgICAgICAgICAgICAgLi4uKHVzZXJJbml0aWFsTWVzc2FnZS5hdHRhY2htZW50cyA/IHsgYXR0YWNobWVudHM6IHVzZXJJbml0aWFsTWVzc2FnZS5hdHRhY2htZW50cyB9IDoge30pLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgXVxuICAgICAgICAgIDogW11cbiAgICAgIClcbiAgICAgIHNldExhc3RFdmFsdWF0ZWRLZXkoMClcbiAgICAgIGlzTG9hZGluZ1JlZi5jdXJyZW50ID0gZmFsc2VcbiAgICAgIGluaXRpYWxMb2FkRG9uZS5jdXJyZW50ID0gZmFsc2VcbiAgICAgIHByZXZpb3VzQ2hhdElkLmN1cnJlbnQgPSBjaGF0SWRcblxuICAgICAgLy8gTGltcGlhciBlbCBlc3RhZG8gZGVsIHByb3llY3RvIGN1YW5kbyBjYW1iaWEgZGUgY29udmVyc2FjacOzblxuICAgICAgc2V0Q2hpcHNQcm9qZWN0KG51bGwpXG4gICAgICBzZXRQcm9qZWN0KG51bGwpXG5cbiAgICAgIC8vIFZvbHZlciBhIGVqZWN1dGFyIGxhIHF1ZXJ5IG1lIHBhcmEgdGVuZXIgdGFiVGFza0RlZmF1bHQgYWN0dWFsaXphZG8gZW4gbGEgbnVldmEgY29udmVyc2FjacOzblxuICAgICAgcmVmZXRjaFRhYlRhc2tEZWZhdWx0KClcblxuICAgICAgaWYgKCF1c2VySW5pdGlhbE1lc3NhZ2UpIHtcbiAgICAgICAgbG9hZE1lc3NhZ2VzKClcbiAgICAgIH1cbiAgICB9XG4gIH0sIFtjaGF0SWQsIHVzZXJJbml0aWFsTWVzc2FnZSwgY3VycmVudFVzZXIsIGxvYWRNZXNzYWdlcywgc2V0Q2hpcHNQcm9qZWN0LCBzZXRQcm9qZWN0LCByZWZldGNoVGFiVGFza0RlZmF1bHRdKVxuXG4gIC8vIEN1YW5kbyB0YWJUYXNrRGVmYXVsdCBwYXNhIGEgZXN0YXIgZGlzcG9uaWJsZSBkZXNwdcOpcyBkZSBjYXJnYXIsIHJlZXNjcmliaXIgVVJMcyBkZSB0YXJlYXMgZW4gbG9zIG1lbnNhamVzIHlhIGNhcmdhZG9zLlxuICAvLyBSZWYgcGFyYSBldml0YXIgYnVjbGU6IHNldE1lc3NhZ2VzKHJld3JpdHRlbikgY2FtYmlhIG1lc3NhZ2VzIHkgcmUtZWplY3V0YSBlbCBlZmVjdG87IHNvbG8gcmVlc2NyaWJpbW9zIHVuYSB2ZXogcG9yIGxvdGUuXG4gIGNvbnN0IGRpZFJld3JpdGVSZWYgPSB1c2VSZWYoZmFsc2UpXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCF0YWJUYXNrRGVmYXVsdCB8fCAhcHJvamVjdD8uaWQgfHwgbWVzc2FnZXMubGVuZ3RoID09PSAwKSByZXR1cm5cbiAgICBjb25zdCB0YXNrVXJsUmVnZXggPSBuZXcgUmVnRXhwKFRBU0tfVVJMX1JFR0VYX1BBVFRFUk4sICdnJylcbiAgICBjb25zdCB0YWJTZWdtZW50ID0gYC8ke3RhYlRhc2tEZWZhdWx0fWBcbiAgICBjb25zdCBuZWVkc1Jld3JpdGUgPSBtZXNzYWdlcy5zb21lKG1zZyA9PiB7XG4gICAgICBjb25zdCBjb250ZW50ID0gbXNnLm1lc3NhZ2UgfHwgJydcbiAgICAgIGNvbnN0IG1hdGNoZXMgPSBjb250ZW50Lm1hdGNoKHRhc2tVcmxSZWdleClcbiAgICAgIGlmICghbWF0Y2hlcz8ubGVuZ3RoKSByZXR1cm4gZmFsc2VcbiAgICAgIHJldHVybiBtYXRjaGVzLnNvbWUodXJsID0+ICF1cmwuZW5kc1dpdGgoYC8ke3RhYlRhc2tEZWZhdWx0fWApICYmICF1cmwuaW5jbHVkZXMoYC8ke3RhYlRhc2tEZWZhdWx0fT9gKSlcbiAgICB9KVxuICAgIGlmICghbmVlZHNSZXdyaXRlKSB7XG4gICAgICBkaWRSZXdyaXRlUmVmLmN1cnJlbnQgPSBmYWxzZVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGlmIChkaWRSZXdyaXRlUmVmLmN1cnJlbnQpIHJldHVyblxuICAgIGRpZFJld3JpdGVSZWYuY3VycmVudCA9IHRydWVcbiAgICBjb25zdCByZXdyaXR0ZW4gPSBtZXNzYWdlcy5tYXAobXNnID0+ICh7XG4gICAgICAuLi5tc2csXG4gICAgICBtZXNzYWdlOiByZXdyaXRlVGFza1VybHNJbkNvbnRlbnQobXNnLm1lc3NhZ2UgfHwgJycsIHRhYlNlZ21lbnQpLFxuICAgIH0pKVxuICAgIHNldE1lc3NhZ2VzKHJld3JpdHRlbilcbiAgfSwgW3RhYlRhc2tEZWZhdWx0LCBwcm9qZWN0Py5pZCwgbWVzc2FnZXNdKVxuXG4gIGNvbnN0IGFkZE1lc3NhZ2UgPSB1c2VDYWxsYmFjaygobWVzc2FnZTogQ2hhdE1lc3NhZ2UpID0+IHtcbiAgICBzZXRNZXNzYWdlcyhwcmV2ID0+IHtcbiAgICAgIGNvbnN0IGV4aXN0aW5nTWVzc2FnZUluZGV4ID0gcHJldi5maW5kSW5kZXgobXNnID0+IG1zZy5pZCA9PT0gbWVzc2FnZS5pZClcblxuICAgICAgaWYgKGV4aXN0aW5nTWVzc2FnZUluZGV4ID49IDApIHtcbiAgICAgICAgY29uc3QgbmV3TWVzc2FnZXMgPSBbLi4ucHJldl1cbiAgICAgICAgbmV3TWVzc2FnZXNbZXhpc3RpbmdNZXNzYWdlSW5kZXhdID0gbWVzc2FnZVxuICAgICAgICByZXR1cm4gbmV3TWVzc2FnZXNcbiAgICAgIH1cbiAgICAgIHJldHVybiBbLi4ucHJldiwgbWVzc2FnZV1cbiAgICB9KVxuICB9LCBbXSlcblxuICBjb25zdCByZW1vdmVNZXNzYWdlID0gdXNlQ2FsbGJhY2soKG1lc3NhZ2VJZDogc3RyaW5nKSA9PiB7XG4gICAgc2V0TWVzc2FnZXMocHJldiA9PiBwcmV2LmZpbHRlcihtc2cgPT4gbXNnLmlkICE9PSBtZXNzYWdlSWQpKVxuICB9LCBbXSlcblxuICByZXR1cm4ge1xuICAgIGxvYWRpbmdNZXNzYWdlcyxcbiAgICBtZXNzYWdlcyxcbiAgICBoYXNNb3JlTWVzc2FnZXM6ICEhbGFzdEV2YWx1YXRlZEtleSxcbiAgICBpc0xvYWRpbmdNb3JlTWVzc2FnZXMsXG4gICAgbG9hZE1lc3NhZ2VzLFxuICAgIGxvYWRNb3JlTWVzc2FnZXMsXG4gICAgYWRkTWVzc2FnZSxcbiAgICByZW1vdmVNZXNzYWdlLFxuICAgIGhhbmRsZVNjcm9sbCxcbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQUE7QUFDQSxTQUFTQSxXQUFXLEVBQUVDLFFBQVEsRUFBRUMsTUFBTSxFQUFFQyxTQUFTLFFBQVEsT0FBTztBQUNoRSxTQUFTQyxXQUFXLFFBQVEsZ0JBQWdCO0FBRTVDLE9BQU9DLElBQUksTUFBTSxxQkFBcUI7QUFFdEMsU0FBU0MsZ0JBQWdCLFFB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