@projectcor/maia-components 2.11.26-11 → 2.11.26-3

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.
@@ -14,6 +14,7 @@ import { useCallback, useRef, useEffect, useState } from 'react';
14
14
  import { v4 as uuidv4 } from 'uuid';
15
15
  import { useChatMessages } from '../useChatMessages';
16
16
  import { useOrchestratorStream } from '../useOrchestratorStream';
17
+ import { createStreamRevealSmooth } from '../useOrchestratorStream/streamRevealSmooth';
17
18
  import { useT } from '../useT';
18
19
  import { useUser } from '../../context/cor-user';
19
20
  import { useGlobalContext } from '../../context/global-context';
@@ -25,7 +26,6 @@ import { useProjects } from '../useProjects';
25
26
  import { useTabTaskDefault } from '../useTabTaskDefault';
26
27
  import { TASK_URL_REGEX_PATTERN } from '../../constants/taskUrls';
27
28
  import { fetchAgentDetail } from '../../services/maia/Agents/fetchAgentDetail';
28
- import { buildHitlActionTypeList, getHitlAnalyticsAgentType } from '../../utils/hitlAnalytics';
29
29
  var normalizeSendMessageArgs = function normalizeSendMessageArgs(attachmentsOrOptions) {
30
30
  var _options$attachments;
31
31
  if (Array.isArray(attachmentsOrOptions)) {
@@ -393,6 +393,17 @@ export var useChatManager = function useChatManager(_ref3) {
393
393
  memorySessionId: memorySessionId
394
394
  });
395
395
  }, [addMessage]);
396
+ var handleStreamUpdateForContinueRef = useRef(handleStreamUpdate);
397
+ handleStreamUpdateForContinueRef.current = handleStreamUpdate;
398
+ var continueStreamRevealRef = useRef(null);
399
+ var getContinueStreamReveal = useCallback(function () {
400
+ if (continueStreamRevealRef.current === null) {
401
+ continueStreamRevealRef.current = createStreamRevealSmooth(function (text) {
402
+ handleStreamUpdateForContinueRef.current(text, null, '');
403
+ });
404
+ }
405
+ return continueStreamRevealRef.current;
406
+ }, []);
396
407
  var handleStreamFinish = useCallback(/*#__PURE__*/function () {
397
408
  var _ref6 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee2(content, sources, memorySessionId, suggestions, completedAgentId) {
398
409
  var _previousMessage$appr, _createAgentFollowUp, _editAgentFollowUp;
@@ -411,7 +422,7 @@ export var useChatManager = function useChatManager(_ref3) {
411
422
  return m.id !== tempMessageId;
412
423
  }).at(-1);
413
424
  hasApprovalInPreviousMessage = (previousMessage === null || previousMessage === void 0 ? void 0 : previousMessage.approval) != null;
414
- TASK_CREATION_TOOLS = ['create_task', 'create_tasks_batch', 'clone_task'];
425
+ TASK_CREATION_TOOLS = ['create_task', 'create_tasks_batch'];
415
426
  TASK_EDIT_TOOLS = ['edit_task', 'edit_tasks_batch', 'task_assign', 'task_unassign', 'update_task_type', 'update_estimated_hours', 'assign_task_label'];
416
427
  TASK_DELETE_TOOLS = ['delete_task', 'delete_tasks_batch'];
417
428
  pendingActions = (previousMessage === null || previousMessage === void 0 || (_previousMessage$appr = previousMessage.approval) === null || _previousMessage$appr === void 0 ? void 0 : _previousMessage$appr.pending_actions) || [];
@@ -440,16 +451,6 @@ export var useChatManager = function useChatManager(_ref3) {
440
451
  agentId: configuredAgentId
441
452
  };
442
453
  }
443
- if (wasCreateAgentApproved) {
444
- event(EVENTS.aiChatHitlOption, _objectSpread({
445
- agent_type: getHitlAnalyticsAgentType(agent),
446
- action_type: buildHitlActionTypeList(pendingActions),
447
- decision: 'accept',
448
- option: 'create_agent'
449
- }, completedAgentId !== null && completedAgentId !== void 0 && completedAgentId.trim() ? {
450
- created_agent_id: completedAgentId.trim()
451
- } : {}));
452
- }
453
454
  wasEditAgentApproved = hasApprovalInPreviousMessage && (previousMessage === null || previousMessage === void 0 ? void 0 : previousMessage.approvalStatus) === 'approved' && pendingActions.some(function (action) {
454
455
  return (action.tool_name || '').toLowerCase() === 'edit_agent';
455
456
  });
@@ -558,7 +559,7 @@ export var useChatManager = function useChatManager(_ref3) {
558
559
  return function (_x4, _x5, _x6, _x7, _x8) {
559
560
  return _ref6.apply(this, arguments);
560
561
  };
561
- }(), [addMessage, removeMessage, project, getTabTaskDefault, event, agent]);
562
+ }(), [addMessage, removeMessage, project, getTabTaskDefault]);
562
563
  var handleStreamStop = useCallback(function () {
563
564
  addMessage({
564
565
  id: "answer-".concat(currentMessageId.current, "-cancelled"),
@@ -578,6 +579,8 @@ export var useChatManager = function useChatManager(_ref3) {
578
579
  }, 500);
579
580
  }, [addMessage, t]);
580
581
  var handleApprovalRequired = useCallback(function (approval, accumulatedContent) {
582
+ // Skip manual approval messages – don't render them in the chat
583
+ if (approval.manual_approval_detected) return;
581
584
  var tempMessageId = "answer-".concat(currentMessageId.current, "-streaming");
582
585
  removeMessage(tempMessageId);
583
586
 
@@ -592,7 +595,7 @@ export var useChatManager = function useChatManager(_ref3) {
592
595
  },
593
596
  role: ChatHistoryRole.ASSISTANT,
594
597
  approval: approval,
595
- approvalStatus: 'pending'
598
+ approvalStatus: approval.approval_status || 'pending'
596
599
  });
597
600
  isProcessingRef.current = false;
598
601
  }, [addMessage, removeMessage]);
@@ -864,18 +867,22 @@ export var useChatManager = function useChatManager(_ref3) {
864
867
  });
865
868
  return _context5.abrupt("return");
866
869
  case 5:
870
+ // Process SSE stream
871
+ getContinueStreamReveal().reset();
867
872
  _context5.next = 6;
868
873
  return processSSEStream(response, loadingKey, {
869
874
  onToken: function onToken(content) {
870
- handleStreamUpdate(content, null, '');
875
+ getContinueStreamReveal().setTarget(content);
871
876
  },
872
877
  onNode: function onNode(message, currentThreadId) {
873
- var displayMsg = message.includes('create_task') || message.includes('clone_task') ? message : t('chat.executingAction');
878
+ var displayMsg = message.includes('create_task') ? message : t('chat.executingAction');
874
879
  setActiveLoadings(function (prev) {
875
880
  return _objectSpread(_objectSpread({}, prev), {}, _defineProperty({}, currentThreadId, displayMsg));
876
881
  });
877
882
  },
878
883
  onComplete: function onComplete(finalContent, sources, memorySessionId, currentThreadId, suggestions, agentId) {
884
+ getContinueStreamReveal().cancel();
885
+ getContinueStreamReveal().reset();
879
886
  handleStreamFinish(finalContent, sources, memorySessionId, suggestions, agentId);
880
887
  setActiveLoadings(function (prev) {
881
888
  var newLoadings = _objectSpread({}, prev);
@@ -884,6 +891,8 @@ export var useChatManager = function useChatManager(_ref3) {
884
891
  });
885
892
  },
886
893
  onApprovalRequired: function onApprovalRequired(approvalPayload, accumulatedContent, currentThreadId) {
894
+ getContinueStreamReveal().cancel();
895
+ getContinueStreamReveal().reset();
887
896
  // New HITL interruption detected after resume (chained actions)
888
897
  setActiveLoadings(function (prev) {
889
898
  var newLoadings = _objectSpread({}, prev);
@@ -894,6 +903,8 @@ export var useChatManager = function useChatManager(_ref3) {
894
903
  },
895
904
  onError: function onError(error, currentThreadId) {
896
905
  console.error('SSE Error:', error);
906
+ getContinueStreamReveal().cancel();
907
+ getContinueStreamReveal().reset();
897
908
  handleStreamError();
898
909
  setActiveLoadings(function (prev) {
899
910
  var newLoadings = _objectSpread({}, prev);
@@ -908,6 +919,8 @@ export var useChatManager = function useChatManager(_ref3) {
908
919
  case 7:
909
920
  _context5.prev = 7;
910
921
  _t = _context5["catch"](3);
922
+ getContinueStreamReveal().cancel();
923
+ getContinueStreamReveal().reset();
911
924
  handleStreamError();
912
925
  setActiveLoadings(function (prev) {
913
926
  var newLoadings = _objectSpread({}, prev);
@@ -923,7 +936,7 @@ export var useChatManager = function useChatManager(_ref3) {
923
936
  return function (_x13, _x14, _x15) {
924
937
  return _ref9.apply(this, arguments);
925
938
  };
926
- }(), [authUser, agent, addMessage, handleStreamError, handleStreamUpdate, handleStreamFinish, handleApprovalRequired]);
939
+ }(), [authUser, agent, addMessage, handleStreamError, handleStreamFinish, handleApprovalRequired, getContinueStreamReveal]);
927
940
  var initializeChat = useCallback(/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee6() {
928
941
  var _userInitialMessage$m, _userInitialMessage$a, _project$client2, _project$client3, hasInitialMessage, hasInitialAttachments, hasInitialFaq, history;
929
942
  return _regeneratorRuntime.wrap(function (_context6) {
@@ -1033,4 +1046,4 @@ export var useChatManager = function useChatManager(_ref3) {
1033
1046
  isDisabled: waitingResponse || loadingMessages
1034
1047
  };
1035
1048
  };
1036
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1c2VDYWxsYmFjayIsInVzZVJlZiIsInVzZUVmZmVjdCIsInVzZVN0YXRlIiwidjQiLCJ1dWlkdjQiLCJ1c2VDaGF0TWVzc2FnZXMiLCJ1c2VPcmNoZXN0cmF0b3JTdHJlYW0iLCJ1c2VUIiwidXNlVXNlciIsInVzZUdsb2JhbENvbnRleHQiLCJFVkVOVFMiLCJ1c2VFdmVudCIsIm1haWEiLCJGZWVkYmFjayIsIkNoYXRIaXN0b3J5Um9sZSIsInVzZVByb2plY3RzIiwidXNlVGFiVGFza0RlZmF1bHQiLCJUQVNLX1VSTF9SRUdFWF9QQVRURVJOIiwiZmV0Y2hBZ2VudERldGFpbCIsImJ1aWxkSGl0bEFjdGlvblR5cGVMaXN0IiwiZ2V0SGl0bEFuYWx5dGljc0FnZW50VHlwZSIsIm5vcm1hbGl6ZVNlbmRNZXNzYWdlQXJncyIsImF0dGFjaG1lbnRzT3JPcHRpb25zIiwiX29wdGlvbnMkYXR0YWNobWVudHMiLCJBcnJheSIsImlzQXJyYXkiLCJhdHRhY2htZW50cyIsIm9wdGlvbnMiLCJleHRyYWN0VGFza0lkc0Zyb21EZWxldGVQZW5kaW5nQWN0aW9ucyIsInBlbmRpbmdBY3Rpb25zIiwiaWRzIiwiZm9yRWFjaCIsImFjdGlvbiIsIl90eXBlb2YiLCJhcmdzIiwidG9vbF9hcmdzIiwicmVjIiwidG9vbF9uYW1lIiwiX3JlYyR0YXNrX2lkIiwicmF3IiwidGFza19pZCIsImlkIiwibiIsInBhcnNlSW50IiwiU3RyaW5nIiwiTnVtYmVyIiwiaXNOYU4iLCJwdXNoIiwibGlzdCIsInRhc2tfaWRzIiwidGlkIiwiZXh0cmFjdEFnZW50SWRGcm9tRWRpdEFnZW50UGVuZGluZ0FjdGlvbnMiLCJfcmVjJGFnZW50X2lkIiwiZWRpdEFjdGlvbiIsImZpbmQiLCJhIiwidG9Mb3dlckNhc2UiLCJhZ2VudF9pZCIsImFnZW50SWQiLCJleHRyYWN0QWdlbnRJZEZyb21QZW5kaW5nQWN0aW9uc0J5VG9vbE5hbWUiLCJ0b29sTmFtZSIsIl9yZWYiLCJfcmVjJGFnZW50X2lkMiIsImV4dHJhY3RUYXNrSWRzRnJvbUFzc2lzdGFudERlbGV0aW9uVGV4dCIsInRleHQiLCJsYWJlbGVkIiwibWF0Y2giLCJib2xkIiwidXNlU3RhYmxlQ2FsbGJhY2tzIiwiYXV0aFVzZXIiLCJjdXJyZW50VXNlciIsInRvU3RyaW5nIiwibmFtZSIsImZpcnN0TmFtZSIsImF2YXRhciIsInBpY3R1cmUiLCJjdXJyZW50IiwicGFyc2VTU0VMaW5lIiwibGluZSIsInRyaW0iLCJfbGluZSRzcGxpdCIsInNwbGl0IiwiX2xpbmUkc3BsaXQyIiwiX3NsaWNlZFRvQXJyYXkiLCJldmVudExpbmUiLCJkYXRhTGluZSIsImV2ZW50VHlwZSIsInJlcGxhY2UiLCJkYXRhU3RyIiwiZGF0YSIsIkpTT04iLCJwYXJzZSIsInBhcnNlRXJyb3IiLCJjb25zb2xlIiwiZXJyb3IiLCJwcm9jZXNzU1NFU3RyZWFtIiwiX3JlZjIiLCJfYXN5bmNUb0dlbmVyYXRvciIsIl9yZWdlbmVyYXRvclJ1bnRpbWUiLCJtYXJrIiwiX2NhbGxlZSIsInJlc3BvbnNlIiwidGhyZWFkSWQiLCJjYWxsYmFja3MiLCJfcmVzcG9uc2UkYm9keSIsInJlYWRlciIsImRlY29kZXIiLCJidWZmZXIiLCJhY2N1bXVsYXRlZENvbnRlbnQiLCJpc1N0cmVhbUNvbXBsZXRlIiwiaGFuZGxlTGluZSIsIl95aWVsZCRyZWFkZXIkcmVhZCIsImRvbmUiLCJ2YWx1ZSIsImxpbmVzIiwiaSIsIndyYXAiLCJfY29udGV4dCIsInByZXYiLCJuZXh0IiwiX2hhbmRsZUxpbmUiLCJwYXJzZWQiLCJldmVudERhdGEiLCJjb250ZW50Iiwib25Ub2tlbiIsIm1lc3NhZ2UiLCJvbk5vZGUiLCJfZXZlbnREYXRhJGFnZW50X2lkIiwiZmluYWxDb250ZW50Iiwic291cmNlcyIsIm1lbW9yeVNlc3Npb25JZCIsIm1lbW9yeV9zZXNzaW9uX2lkIiwic3VnZ2VzdGlvbnMiLCJzdWdnZXN0X3JlcGx5IiwiYWdlbnRJZFJhdyIsImNvbXBsZXRlZEFnZW50SWQiLCJvbkNvbXBsZXRlIiwiX2NhbGxiYWNrcyRvbkFwcHJvdmFsIiwib25BcHByb3ZhbFJlcXVpcmVkIiwiY2FsbCIsIm9uRXJyb3IiLCJib2R5IiwiZ2V0UmVhZGVyIiwiRXJyb3IiLCJUZXh0RGVjb2RlciIsInJlYWQiLCJzZW50IiwiYWJydXB0IiwiZGVjb2RlIiwic3RyZWFtIiwicG9wIiwibGVuZ3RoIiwic3RvcCIsIl94IiwiX3gyIiwiX3gzIiwiYXBwbHkiLCJhcmd1bWVudHMiLCJ1c2VDaGF0TWFuYWdlciIsIl9yZWYzIiwiaW5pdGlhbENoYXRJZCIsImNoYXRJZCIsInVzZXJJbml0aWFsTWVzc2FnZSIsIl9yZWYzJGFnZW50cyIsImFnZW50cyIsIl91c2VUIiwidCIsIl91c2VHbG9iYWxDb250ZXh0IiwicHJvamVjdCIsInNldFByb2plY3QiLCJjbGllbnQiLCJzZXRDbGllbnQiLCJhZ2VudCIsImlzV2ViU2VhcmNoQWN0aXZlIiwiaXNEZWVwU2VhcmNoQWN0aXZlIiwiY2hpcHNQcm9qZWN0Iiwic2V0Q2hpcHNQcm9qZWN0IiwiZXZlbnQiLCJfdXNlUHJvamVjdHMiLCJmZXRjaFByb2plY3RzIiwiX3VzZVN0YWJsZUNhbGxiYWNrcyIsIl91c2VUYWJUYXNrRGVmYXVsdCIsImdldFRhYlRhc2tEZWZhdWx0IiwiY3VycmVudE1lc3NhZ2VJZCIsImN1cnJlbnRVc2VyUXVlc3Rpb24iLCJjdXJyZW50Q2hhdElkIiwicmVwb3J0ZWRFdmVudCIsIm1lc3NhZ2VzUmVmIiwiaXNQcm9jZXNzaW5nUmVmIiwiZmlyc3RUaW1lUmVmIiwiX3VzZVN0YXRlIiwiX3VzZVN0YXRlMiIsImFjdGl2ZUxvYWRpbmdzIiwic2V0QWN0aXZlTG9hZGluZ3MiLCJpc1dlYlNlYXJjaEFjdGl2ZVJlZiIsImlzRGVlcFNlYXJjaEFjdGl2ZVJlZiIsIl91c2VDaGF0TWVzc2FnZXMiLCJsb2FkaW5nTWVzc2FnZXMiLCJtZXNzYWdlcyIsImlzTG9hZGluZ01vcmVNZXNzYWdlcyIsImxvYWRNZXNzYWdlcyIsImFkZE1lc3NhZ2UiLCJyZW1vdmVNZXNzYWdlIiwiaGFuZGxlU2Nyb2xsIiwiY3VzdG9tRXZlbnQiLCJDdXN0b21FdmVudCIsImRldGFpbCIsImRvY3VtZW50IiwiZGlzcGF0Y2hFdmVudCIsImxhc3RNc2dXaXRoUHJvamVjdCIsImZpbHRlciIsIm1zZyIsInByb2plY3RJZCIsImF0IiwiX3JlZjQiLCJwcm9qZWN0TmFtZSIsInRoZW4iLCJwcm9qZWN0cyIsImZvdW5kIiwicCIsIl9mb3VuZCRjbGllbnQiLCJjbGllbnROYW1lIiwibGFzdE1zZ1dpdGhDbGllbnQiLCJjbGllbnRJZCIsIl9yZWY1IiwibXNnQ2xpZW50SWQiLCJtc2dDbGllbnROYW1lIiwiaGFuZGxlU3RyZWFtRXJyb3IiLCJlcnJvck1lc3NhZ2UiLCJjb25jYXQiLCJpc0Vycm9yIiwiZGF0ZSIsIkRhdGUiLCJ1c2VyIiwicm9sZSIsIkFTU0lTVEFOVCIsImhhbmRsZVN0cmVhbVVwZGF0ZSIsInRlbXBNZXNzYWdlSWQiLCJoYW5kbGVTdHJlYW1GaW5pc2giLCJfcmVmNiIsIl9jYWxsZWUyIiwiX3ByZXZpb3VzTWVzc2FnZSRhcHByIiwiX2NyZWF0ZUFnZW50Rm9sbG93VXAiLCJfZWRpdEFnZW50Rm9sbG93VXAiLCJ0YXNrVXJsUmVnZXgiLCJtYXRjaGVzIiwiY29udGVudFRvQWRkIiwicHJldmlvdXNNZXNzYWdlIiwiaGFzQXBwcm92YWxJblByZXZpb3VzTWVzc2FnZSIsIlRBU0tfQ1JFQVRJT05fVE9PTFMiLCJUQVNLX0VESVRfVE9PTFMiLCJUQVNLX0RFTEVURV9UT09MUyIsIndhc1Rhc2tDcmVhdGlvbiIsIndhc1Rhc2tFZGl0Iiwid2FzVGFza0RlbGV0ZSIsIndhc0NyZWF0ZUFnZW50QXBwcm92ZWQiLCJ3YXNDb25maWd1cmVBZ2VudEFjY2Vzc0FwcHJvdmVkIiwiY3JlYXRlQWdlbnRGb2xsb3dVcCIsImNvbmZpZ3VyZWRBZ2VudElkIiwid2FzRWRpdEFnZW50QXBwcm92ZWQiLCJlZGl0QWdlbnRGb2xsb3dVcCIsImZyb21TdHJlYW0iLCJmcm9tQXJncyIsInJlc29sdmVkQWdlbnRJZCIsInRhc2tJZHNGcm9tVXJscyIsInRhc2tJZHNGcm9tRGVsZXRlQXBwcm92YWwiLCJ0YXNrSWRzRnJvbURlbGV0aW9uVGV4dCIsInRhc2tJZHNGb3JEYXNoYm9hcmQiLCJzaG91bGRTeW5jRGFzaGJvYXJkIiwidGFza0lkcyIsInRhYiIsInRhYlNlZ21lbnQiLCJsYXN0UHJvamVjdE1lc3NhZ2UiLCJjb250ZXh0UHJvamVjdElkUmF3IiwiY29udGV4dFByb2plY3RJZCIsInBhdGhNYXRjaCIsInJvdXRlUHJvamVjdElkIiwiaXNPblByb2plY3RSb3V0ZSIsIl93aW5kb3ckbmV3UHJvamVjdERhcyIsIl93aW5kb3ckbmV3UHJvamVjdERhczIiLCJfd2luZG93JG5ld1Byb2plY3REYXMzIiwiX3dpbmRvdyRuZXdQcm9qZWN0RGFzNCIsIl93aW5kb3ckbmV3UHJvamVjdERhczUiLCJfd2luZG93JG5ld1Byb2plY3REYXM2IiwiX2NvbnRleHQyIiwiUmVnRXhwIiwiX3RvQ29uc3VtYWJsZUFycmF5IiwibWF0Y2hBbGwiLCJtIiwiYXBwcm92YWwiLCJwZW5kaW5nX2FjdGlvbnMiLCJzb21lIiwiaW5jbHVkZXMiLCJhcHByb3ZhbFN0YXR1cyIsIndpbmRvdyIsIk1BSUFfQ0hBVF9BSV9GRUFUVVJFX0FDQ0VTU19NVUxUSV9BR0VOVFMiLCJhaUNoYXRIaXRsT3B0aW9uIiwiX29iamVjdFNwcmVhZCIsImFnZW50X3R5cGUiLCJhY3Rpb25fdHlwZSIsImRlY2lzaW9uIiwib3B0aW9uIiwiY3JlYXRlZF9hZ2VudF9pZCIsIm1hcCIsInVybCIsImxvY2F0aW9uIiwicGF0aG5hbWUiLCJuZXdQcm9qZWN0RGFzaGJvYXJkIiwiYWRkRXhpc3RpbmdUYXNrVG9EYXNoYm9hcmQiLCJlZGl0RXhpc3RpbmdUYXNrSW5EYXNoYm9hcmQiLCJkZWxldGVFeGlzdGluZ1Rhc2tGcm9tRGFzaGJvYXJkIiwiY2hhdEFnZW50IiwiZXJyIiwiX3g0IiwiX3g1IiwiX3g2IiwiX3g3IiwiX3g4IiwiaGFuZGxlU3RyZWFtU3RvcCIsImlzRnJvbnRlbmRDYW5jZWxsZWQiLCJzZXRUaW1lb3V0IiwiaGFuZGxlQXBwcm92YWxSZXF1aXJlZCIsIm9yaWdpbmFsX3RocmVhZF9pZCIsIl91c2VPcmNoZXN0cmF0b3JTdHJlYSIsIm9uU3RyZWFtVXBkYXRlIiwib25GaW5pc2hTdHJlYW0iLCJvblN0b3AiLCJhc2tNYWlhIiwid2FpdGluZ1Jlc3BvbnNlIiwiaXNMb2FkaW5nIiwiaXNXcml0aW5nIiwibG9hZGluZ01lc3NhZ2UiLCJzdG9wU3RyZWFtaW5nIiwiY3VycmVudFByb2plY3QiLCJzZW5kTWVzc2FnZSIsIl9yZWY3IiwiX2NhbGxlZTMiLCJmYXFJZCIsImFnZW50U3VnZ2VzdGlvbklkIiwiX21lc3NhZ2VzUmVmJGN1cnJlbnQiLCJfcHJvamVjdCRjbGllbnQiLCJfbm9ybWFsaXplU2VuZE1lc3NhZ2UiLCJuZXdNZXNzYWdlSWQiLCJsYXN0TWVzc2FnZVdpdGhQcm9qZWN0IiwiY3VycmVudEFnZW50RnJvbU1lc3NhZ2VzIiwiZmluYWxNZXNzYWdlIiwiX29wdGlvbnMkcHJvamVjdENoYW5nIiwiaGlzdG9yeSIsImxhc3RNZXNzYWdlUHJvamVjdElkIiwicHJvamVjdFRvUmVxdWVzdCIsInBheWxvYWRGYXFJZCIsInBheWxvYWRBZ2VudFN1Z2dlc3Rpb25JZCIsInBheWxvYWREYXRhIiwiX2NvbnRleHQzIiwicG1BaVR5cGVkVGV4dCIsIlVTRVIiLCJwcm9qZWN0Q2hhbmdlZCIsImluY29tZVR5cGUiLCJoaXN0b3J5TWVzc2FnZSIsImlzRmluaXRlIiwibGFuZyIsInVzZXJJZCIsImxhc3ROYW1lIiwiY29tcGFueUlkIiwiY29tcGFueV9pZCIsIm1lc3NhZ2VJZCIsImFnZW50TmFtZSIsImVudGl0eSIsImFnZW50RW50aXR5IiwiX3g5IiwiX3gwIiwiX3gxIiwiX3gxMCIsImNoYW5nZVByb2plY3QiLCJoYW5kbGVGZWVkYmFjayIsIl9yZWY4IiwiX2NhbGxlZTQiLCJmZWVkYmFja1Byb3AiLCJjaGF0TWVzc2FnZUlkIiwiX2NvbnRleHQ0IiwiQ2hhdHMiLCJ3YXNIZWxwZnVsQ2hhdCIsIlRIVU1CU19VUCIsIndhc0hlbHBmdWwiLCJfeDExIiwiX3gxMiIsImhhbmRsZUFwcHJvdmFsRGVjaXNpb24iLCJfcmVmOSIsIl9jYWxsZWU1IiwidGhyZWFkSWRzIiwiZWRpdGVkQWN0aW9ucyIsIm1lc3NhZ2VXaXRoQXBwcm92YWwiLCJsb2FkaW5nS2V5IiwiZXhpc3RpbmdNZXNzYWdlIiwibmV3U3RhdHVzIiwiX3QiLCJfY29udGV4dDUiLCJfbSRhcHByb3ZhbCIsInRocmVhZF9pZCIsIl9kZWZpbmVQcm9wZXJ0eSIsIk9yY2hlc3RyYXRvciIsImNvbnRpbnVlVGhyZWFkIiwic2Vzc2lvbklkIiwic2Vzc2lvbl9pZCIsIm9rIiwibmV3TG9hZGluZ3MiLCJjdXJyZW50VGhyZWFkSWQiLCJkaXNwbGF5TXNnIiwiYXBwcm92YWxQYXlsb2FkIiwiX3gxMyIsIl94MTQiLCJfeDE1IiwiaW5pdGlhbGl6ZUNoYXQiLCJfY2FsbGVlNiIsIl91c2VySW5pdGlhbE1lc3NhZ2UkbSIsIl91c2VySW5pdGlhbE1lc3NhZ2UkYSIsIl9wcm9qZWN0JGNsaWVudDIiLCJfcHJvamVjdCRjbGllbnQzIiwiaGFzSW5pdGlhbE1lc3NhZ2UiLCJoYXNJbml0aWFsQXR0YWNobWVudHMiLCJoYXNJbml0aWFsRmFxIiwiX2NvbnRleHQ2IiwiQm9vbGVhbiIsInJlc2V0Q2hhdCIsInN0b3BHZW5lcmF0aW9uIiwiaXNEaXNhYmxlZCJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9ob29rcy91c2VDaGF0TWFuYWdlci91c2VDaGF0TWFuYWdlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSByYWRpeCAqL1xuLyogZXNsaW50LWRpc2FibGUgbm8tbmVzdGVkLXRlcm5hcnkgKi9cbi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1ub24tbnVsbC1hc3NlcnRlZC1vcHRpb25hbC1jaGFpbiAqL1xuLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSAqL1xuaW1wb3J0IHsgdXNlQ2FsbGJhY2ssIHVzZVJlZiwgdXNlRWZmZWN0LCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgdjQgYXMgdXVpZHY0IH0gZnJvbSAndXVpZCdcbmltcG9ydCB7IHVzZUNoYXRNZXNzYWdlcyB9IGZyb20gJy4uL3VzZUNoYXRNZXNzYWdlcydcbmltcG9ydCB7IHVzZU9yY2hlc3RyYXRvclN0cmVhbSB9IGZyb20gJy4uL3VzZU9yY2hlc3RyYXRvclN0cmVhbSdcbmltcG9ydCB7IHVzZVQgfSBmcm9tICcuLi91c2VUJ1xuaW1wb3J0IHsgQXR0YWNobWVudEZpbGUgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL21vbGVjdWxlcy9DaGF0Rm9vdGVyL0NoYXRGb290ZXInXG5pbXBvcnQgeyBTZW5kTWVzc2FnZU9wdGlvbnMsIFVzZUNoYXRNYW5hZ2VyUHJvcHMgfSBmcm9tICcuL3VzZUNoYXRNYW5hZ2VyLmludGVyZmFjZSdcbmltcG9ydCB7IHVzZVVzZXIsIENPUlVzZXIgfSBmcm9tICcuLi8uLi9jb250ZXh0L2Nvci11c2VyJ1xuaW1wb3J0IHsgdXNlR2xvYmFsQ29udGV4dCB9IGZyb20gJy4uLy4uL2NvbnRleHQvZ2xvYmFsLWNvbnRleHQnXG5pbXBvcnQgeyBFVkVOVFMsIHVzZUV2ZW50IH0gZnJvbSAnLi4vdXNlRXZlbnQnXG5pbXBvcnQgbWFpYSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9tYWlhJ1xuaW1wb3J0IHsgRmVlZGJhY2sgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL21vbGVjdWxlcy9NZXNzYWdlRmVlZGJhY2svTWVzc2FnZUZlZWRiYWNrJ1xuaW1wb3J0IHsgQ2hhdE1lc3NhZ2UsIENoYXRNZXNzYWdlVXNlciwgQ2hhdEhpc3RvcnlSb2xlLCBBcHByb3ZhbFJlcXVlc3QsIFBlbmRpbmdBY3Rpb24gfSBmcm9tICcuLi8uLi90eXBlcy9DaGF0J1xuXG5pbXBvcnQgeyBQcm9qZWN0IH0gZnJvbSAnLi4vLi4vdHlwZXMvUHJvamVjdCdcbmltcG9ydCB7IHVzZVByb2plY3RzIH0gZnJvbSAnLi4vdXNlUHJvamVjdHMnXG5pbXBvcnQgeyB1c2VUYWJUYXNrRGVmYXVsdCB9IGZyb20gJy4uL3VzZVRhYlRhc2tEZWZhdWx0J1xuaW1wb3J0IHsgVEFTS19VUkxfUkVHRVhfUEFUVEVSTiB9IGZyb20gJy4uLy4uL2NvbnN0YW50cy90YXNrVXJscydcbmltcG9ydCB7IGZldGNoQWdlbnREZXRhaWwgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9tYWlhL0FnZW50cy9mZXRjaEFnZW50RGV0YWlsJ1xuaW1wb3J0IHsgYnVpbGRIaXRsQWN0aW9uVHlwZUxpc3QsIGdldEhpdGxBbmFseXRpY3NBZ2VudFR5cGUgfSBmcm9tICcuLi8uLi91dGlscy9oaXRsQW5hbHl0aWNzJ1xuXG50eXBlIEF0dGFjaG1lbnRzT3JPcHRpb25zID0gQXR0YWNobWVudEZpbGVbXSB8IFNlbmRNZXNzYWdlT3B0aW9uc1xuXG5jb25zdCBub3JtYWxpemVTZW5kTWVzc2FnZUFyZ3MgPSAoYXR0YWNobWVudHNPck9wdGlvbnM/OiBBdHRhY2htZW50c09yT3B0aW9ucykgPT4ge1xuICBpZiAoQXJyYXkuaXNBcnJheShhdHRhY2htZW50c09yT3B0aW9ucykpIHtcbiAgICByZXR1cm4geyBhdHRhY2htZW50czogYXR0YWNobWVudHNPck9wdGlvbnMsIG9wdGlvbnM6IHt9IGFzIFNlbmRNZXNzYWdlT3B0aW9ucyB9XG4gIH1cblxuICBjb25zdCBvcHRpb25zOiBTZW5kTWVzc2FnZU9wdGlvbnMgPSBhdHRhY2htZW50c09yT3B0aW9ucyA/PyB7fVxuICByZXR1cm4geyBhdHRhY2htZW50czogb3B0aW9ucy5hdHRhY2htZW50cyA/PyBbXSwgb3B0aW9ucyB9XG59XG5cbi8qKiB0YXNrX2lkIC8gdGFza19pZHMgZW4gcGVuZGluZ19hY3Rpb25zIGRlIGRlbGV0ZV8qIChsYSByZXNwdWVzdGEgcHVlZGUgbm8gaW5jbHVpciBVUkxzIC90YXNrcy/igKYvZGV0YWlsKS4gKi9cbmZ1bmN0aW9uIGV4dHJhY3RUYXNrSWRzRnJvbURlbGV0ZVBlbmRpbmdBY3Rpb25zKHBlbmRpbmdBY3Rpb25zOiBQZW5kaW5nQWN0aW9uW10pOiBudW1iZXJbXSB7XG4gIGNvbnN0IGlkczogbnVtYmVyW10gPSBbXVxuICBwZW5kaW5nQWN0aW9ucy5mb3JFYWNoKGFjdGlvbiA9PiB7XG4gICAgaWYgKCFhY3Rpb24gfHwgdHlwZW9mIGFjdGlvbiAhPT0gJ29iamVjdCcpIHJldHVyblxuICAgIGNvbnN0IGFyZ3MgPSBhY3Rpb24udG9vbF9hcmdzXG4gICAgaWYgKCEoYXJncyAmJiB0eXBlb2YgYXJncyA9PT0gJ29iamVjdCcgJiYgIUFycmF5LmlzQXJyYXkoYXJncykpKSByZXR1cm5cbiAgICBjb25zdCByZWMgPSBhcmdzIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+XG4gICAgaWYgKGFjdGlvbi50b29sX25hbWUgPT09ICdkZWxldGVfdGFzaycpIHtcbiAgICAgIGNvbnN0IHJhdyA9IHJlYy50YXNrX2lkID8/IHJlYy5pZFxuICAgICAgaWYgKHJhdyAhPSBudWxsKSB7XG4gICAgICAgIGNvbnN0IG4gPSBwYXJzZUludChTdHJpbmcocmF3KSwgMTApXG4gICAgICAgIGlmICghTnVtYmVyLmlzTmFOKG4pKSBpZHMucHVzaChuKVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAoYWN0aW9uLnRvb2xfbmFtZSA9PT0gJ2RlbGV0ZV90YXNrc19iYXRjaCcpIHtcbiAgICAgIGNvbnN0IGxpc3QgPSByZWMudGFza19pZHNcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KGxpc3QpKSB7XG4gICAgICAgIGxpc3QuZm9yRWFjaCh0aWQgPT4ge1xuICAgICAgICAgIGNvbnN0IG4gPSBwYXJzZUludChTdHJpbmcodGlkKSwgMTApXG4gICAgICAgICAgaWYgKCFOdW1iZXIuaXNOYU4obikpIGlkcy5wdXNoKG4pXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfVxuICB9KVxuICByZXR1cm4gaWRzXG59XG5cbmZ1bmN0aW9uIGV4dHJhY3RBZ2VudElkRnJvbUVkaXRBZ2VudFBlbmRpbmdBY3Rpb25zKHBlbmRpbmdBY3Rpb25zOiBQZW5kaW5nQWN0aW9uW10pOiBzdHJpbmcgfCBudWxsIHtcbiAgY29uc3QgZWRpdEFjdGlvbiA9IHBlbmRpbmdBY3Rpb25zLmZpbmQoYSA9PiAoYS50b29sX25hbWUgfHwgJycpLnRvTG93ZXJDYXNlKCkgPT09ICdlZGl0X2FnZW50JylcbiAgaWYgKFxuICAgICFlZGl0QWN0aW9uIHx8XG4gICAgIWVkaXRBY3Rpb24udG9vbF9hcmdzIHx8XG4gICAgdHlwZW9mIGVkaXRBY3Rpb24udG9vbF9hcmdzICE9PSAnb2JqZWN0JyB8fFxuICAgIEFycmF5LmlzQXJyYXkoZWRpdEFjdGlvbi50b29sX2FyZ3MpXG4gICkge1xuICAgIHJldHVybiBudWxsXG4gIH1cbiAgY29uc3QgcmVjID0gZWRpdEFjdGlvbi50b29sX2FyZ3MgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj5cbiAgY29uc3QgcmF3ID0gcmVjLmFnZW50X2lkID8/IHJlYy5hZ2VudElkXG4gIHJldHVybiByYXcgIT0gbnVsbCA/IFN0cmluZyhyYXcpIDogbnVsbFxufVxuXG5mdW5jdGlvbiBleHRyYWN0QWdlbnRJZEZyb21QZW5kaW5nQWN0aW9uc0J5VG9vbE5hbWUocGVuZGluZ0FjdGlvbnM6IFBlbmRpbmdBY3Rpb25bXSwgdG9vbE5hbWU6IHN0cmluZyk6IHN0cmluZyB8IG51bGwge1xuICBjb25zdCBhY3Rpb24gPSBwZW5kaW5nQWN0aW9ucy5maW5kKGEgPT4gKGEudG9vbF9uYW1lIHx8ICcnKS50b0xvd2VyQ2FzZSgpID09PSB0b29sTmFtZS50b0xvd2VyQ2FzZSgpKVxuICBpZiAoIWFjdGlvbiB8fCAhYWN0aW9uLnRvb2xfYXJncyB8fCB0eXBlb2YgYWN0aW9uLnRvb2xfYXJncyAhPT0gJ29iamVjdCcgfHwgQXJyYXkuaXNBcnJheShhY3Rpb24udG9vbF9hcmdzKSkge1xuICAgIHJldHVybiBudWxsXG4gIH1cbiAgY29uc3QgcmVjID0gYWN0aW9uLnRvb2xfYXJncyBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxuICBjb25zdCByYXcgPSByZWMuYWdlbnRfaWQgPz8gcmVjLmFnZW50SWQgPz8gcmVjLmlkXG4gIHJldHVybiByYXcgIT0gbnVsbCA/IFN0cmluZyhyYXcpIDogbnVsbFxufVxuXG4vKiogw5psdGltbyByZWN1cnNvIHNpIG5vIGhheSBsaW5rcyBuaSB0b29sX2FyZ3MgcGFyc2VhYmxlcyAocC4gZWouIFwiSUQgKio3NTk3MTA2KipcIikuICovXG5mdW5jdGlvbiBleHRyYWN0VGFza0lkc0Zyb21Bc3Npc3RhbnREZWxldGlvblRleHQodGV4dDogc3RyaW5nKTogbnVtYmVyW10ge1xuICBjb25zdCBsYWJlbGVkID0gdGV4dC5tYXRjaCgvXFxiSURcXHMqXFwqXFwqKFxcZCspXFwqXFwqL2kpXG4gIGlmIChsYWJlbGVkKSB7XG4gICAgY29uc3QgbiA9IHBhcnNlSW50KGxhYmVsZWRbMV0sIDEwKVxuICAgIHJldHVybiBOdW1iZXIuaXNOYU4obikgPyBbXSA6IFtuXVxuICB9XG4gIGNvbnN0IGJvbGQgPSB0ZXh0Lm1hdGNoKC9cXCpcXCooXFxkezUsfSlcXCpcXCovKVxuICBpZiAoYm9sZCkge1xuICAgIGNvbnN0IG4gPSBwYXJzZUludChib2xkWzFdLCAxMClcbiAgICByZXR1cm4gTnVtYmVyLmlzTmFOKG4pID8gW10gOiBbbl1cbiAgfVxuICByZXR1cm4gW11cbn1cblxuY29uc3QgdXNlU3RhYmxlQ2FsbGJhY2tzID0gKGF1dGhVc2VyOiBDT1JVc2VyKSA9PiB7XG4gIGNvbnN0IGN1cnJlbnRVc2VyID0gdXNlUmVmPENoYXRNZXNzYWdlVXNlcj4oe1xuICAgIGlkOiBhdXRoVXNlci5pZC50b1N0cmluZygpLFxuICAgIG5hbWU6IGF1dGhVc2VyLmZpcnN0TmFtZSxcbiAgICBhdmF0YXI6IGF1dGhVc2VyLnBpY3R1cmUsXG4gIH0pXG5cbiAgaWYgKFxuICAgIGN1cnJlbnRVc2VyLmN1cnJlbnQuaWQgIT09IGF1dGhVc2VyLmlkLnRvU3RyaW5nKCkgfHxcbiAgICBjdXJyZW50VXNlci5jdXJyZW50Lm5hbWUgIT09IGF1dGhVc2VyLmZpcnN0TmFtZSB8fFxuICAgIGN1cnJlbnRVc2VyLmN1cnJlbnQuYXZhdGFyICE9PSBhdXRoVXNlci5waWN0dXJlXG4gICkge1xuICAgIGN1cnJlbnRVc2VyLmN1cnJlbnQgPSB7XG4gICAgICBpZDogYXV0aFVzZXIuaWQudG9TdHJpbmcoKSxcbiAgICAgIG5hbWU6IGF1dGhVc2VyLmZpcnN0TmFtZSxcbiAgICAgIGF2YXRhcjogYXV0aFVzZXIucGljdHVyZSxcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBjdXJyZW50VXNlcjogY3VycmVudFVzZXIuY3VycmVudCxcbiAgfVxufVxuXG5jb25zdCBwYXJzZVNTRUxpbmUgPSAobGluZTogc3RyaW5nKTogeyBldmVudFR5cGU6IHN0cmluZzsgZGF0YTogdW5rbm93biB9IHwgbnVsbCA9PiB7XG4gIGlmICghbGluZS50cmltKCkpIHJldHVybiBudWxsXG5cbiAgY29uc3QgW2V2ZW50TGluZSwgZGF0YUxpbmVdID0gbGluZS5zcGxpdCgnXFxuJylcbiAgaWYgKCFldmVudExpbmUgfHwgIWRhdGFMaW5lKSByZXR1cm4gbnVsbFxuXG4gIGNvbnN0IGV2ZW50VHlwZSA9IGV2ZW50TGluZS5yZXBsYWNlKCdldmVudDogJywgJycpLnRyaW0oKVxuICBjb25zdCBkYXRhU3RyID0gZGF0YUxpbmUucmVwbGFjZSgnZGF0YTogJywgJycpLnRyaW0oKVxuXG4gIHRyeSB7XG4gICAgY29uc3QgZGF0YSA9IEpTT04ucGFyc2UoZGF0YVN0cilcbiAgICByZXR1cm4geyBldmVudFR5cGUsIGRhdGEgfVxuICB9IGNhdGNoIChwYXJzZUVycm9yKSB7XG4gICAgY29uc29sZS5lcnJvcignRXJyb3IgcGFyc2luZyBTU0UgZGF0YTonLCBwYXJzZUVycm9yLCBkYXRhU3RyKVxuICAgIHJldHVybiBudWxsXG4gIH1cbn1cblxuY29uc3QgcHJvY2Vzc1NTRVN0cmVhbSA9IGFzeW5jIChcbiAgcmVzcG9uc2U6IFJlc3BvbnNlLFxuICB0aHJlYWRJZDogc3RyaW5nLFxuICBjYWxsYmFja3M6IHtcbiAgICBvblRva2VuOiAoY29udGVudDogc3RyaW5nKSA9PiB2b2lkXG4gICAgb25Ob2RlOiAobWVzc2FnZTogc3RyaW5nLCB0aHJlYWRJZDogc3RyaW5nKSA9PiB2b2lkXG4gICAgb25Db21wbGV0ZTogKFxuICAgICAgZmluYWxDb250ZW50OiBzdHJpbmcsXG4gICAgICBzb3VyY2VzOiBhbnksXG4gICAgICBtZW1vcnlTZXNzaW9uSWQ6IHN0cmluZyxcbiAgICAgIGN1cnJlbnRUaHJlYWRJZDogc3RyaW5nLFxuICAgICAgc3VnZ2VzdGlvbnM/OiBzdHJpbmdbXSB8IG51bGwsXG4gICAgICBhZ2VudElkPzogc3RyaW5nIHwgbnVsbFxuICAgICkgPT4gdm9pZFxuICAgIG9uRXJyb3I6IChlcnJvcjogYW55LCB0aHJlYWRJZDogc3RyaW5nKSA9PiB2b2lkXG4gICAgb25BcHByb3ZhbFJlcXVpcmVkPzogKGFwcHJvdmFsOiBhbnksIGFjY3VtdWxhdGVkQ29udGVudDogc3RyaW5nLCBjdXJyZW50VGhyZWFkSWQ6IHN0cmluZykgPT4gdm9pZFxuICB9XG4pOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgY29uc3QgcmVhZGVyID0gcmVzcG9uc2UuYm9keT8uZ2V0UmVhZGVyKClcbiAgaWYgKCFyZWFkZXIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIHJlYWRlciBhdmFpbGFibGUnKVxuICB9XG5cbiAgY29uc3QgZGVjb2RlciA9IG5ldyBUZXh0RGVjb2RlcigpXG4gIGxldCBidWZmZXIgPSAnJ1xuICBsZXQgYWNjdW11bGF0ZWRDb250ZW50ID0gJydcbiAgbGV0IGlzU3RyZWFtQ29tcGxldGUgPSBmYWxzZVxuXG4gIGZ1bmN0aW9uIGhhbmRsZUxpbmUobGluZTogc3RyaW5nKSB7XG4gICAgY29uc3QgcGFyc2VkID0gcGFyc2VTU0VMaW5lKGxpbmUpXG4gICAgaWYgKCFwYXJzZWQpIHJldHVyblxuXG4gICAgY29uc3QgeyBldmVudFR5cGUsIGRhdGEgfSA9IHBhcnNlZFxuICAgIGNvbnN0IGV2ZW50RGF0YSA9IGRhdGEgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj5cblxuICAgIGlmIChldmVudFR5cGUgPT09ICd0b2tlbicpIHtcbiAgICAgIGNvbnN0IGNvbnRlbnQgPSBldmVudERhdGEuY29udGVudCBhcyBzdHJpbmdcbiAgICAgIGFjY3VtdWxhdGVkQ29udGVudCArPSBjb250ZW50XG4gICAgICBjYWxsYmFja3Mub25Ub2tlbihhY2N1bXVsYXRlZENvbnRlbnQpXG4gICAgfSBlbHNlIGlmIChldmVudFR5cGUgPT09ICdub2RlJykge1xuICAgICAgaWYgKGV2ZW50RGF0YS5tZXNzYWdlICYmIHR5cGVvZiBldmVudERhdGEubWVzc2FnZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgY2FsbGJhY2tzLm9uTm9kZShldmVudERhdGEubWVzc2FnZSwgdGhyZWFkSWQpXG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChldmVudFR5cGUgPT09ICdjb21wbGV0ZScpIHtcbiAgICAgIGNvbnN0IGZpbmFsQ29udGVudCA9IChldmVudERhdGEuY29udGVudCBhcyBzdHJpbmcpIHx8IGFjY3VtdWxhdGVkQ29udGVudFxuICAgICAgY29uc3Qgc291cmNlcyA9IChldmVudERhdGEuc291cmNlcyBhcyB1bmtub3duKSB8fCBudWxsXG4gICAgICBjb25zdCBtZW1vcnlTZXNzaW9uSWQgPSAoZXZlbnREYXRhLm1lbW9yeV9zZXNzaW9uX2lkIGFzIHN0cmluZykgfHwgJydcbiAgICAgIGNvbnN0IHN1Z2dlc3Rpb25zID0gQXJyYXkuaXNBcnJheShldmVudERhdGEuc3VnZ2VzdF9yZXBseSlcbiAgICAgICAgPyAoZXZlbnREYXRhLnN1Z2dlc3RfcmVwbHkgYXMgc3RyaW5nW10pXG4gICAgICAgIDogQXJyYXkuaXNBcnJheShldmVudERhdGEuc3VnZ2VzdGlvbnMpXG4gICAgICAgICAgPyAoZXZlbnREYXRhLnN1Z2dlc3Rpb25zIGFzIHN0cmluZ1tdKVxuICAgICAgICAgIDogbnVsbFxuICAgICAgY29uc3QgYWdlbnRJZFJhdyA9IGV2ZW50RGF0YS5hZ2VudF9pZCA/PyBldmVudERhdGEuYWdlbnRJZFxuICAgICAgY29uc3QgY29tcGxldGVkQWdlbnRJZCA9IGFnZW50SWRSYXcgIT0gbnVsbCAmJiBTdHJpbmcoYWdlbnRJZFJhdykudHJpbSgpICE9PSAnJyA/IFN0cmluZyhhZ2VudElkUmF3KS50cmltKCkgOiBudWxsXG4gICAgICBjYWxsYmFja3Mub25Db21wbGV0ZShmaW5hbENvbnRlbnQsIHNvdXJjZXMsIG1lbW9yeVNlc3Npb25JZCwgdGhyZWFkSWQsIHN1Z2dlc3Rpb25zLCBjb21wbGV0ZWRBZ2VudElkKVxuICAgIH0gZWxzZSBpZiAoZXZlbnRUeXBlID09PSAnYXBwcm92YWxfcmVxdWlyZWQnKSB7XG4gICAgICBjYWxsYmFja3Mub25BcHByb3ZhbFJlcXVpcmVkPy4oZXZlbnREYXRhLCBhY2N1bXVsYXRlZENvbnRlbnQsIHRocmVhZElkKVxuICAgIH0gZWxzZSBpZiAoZXZlbnRUeXBlID09PSAnZXJyb3InKSB7XG4gICAgICBjYWxsYmFja3Mub25FcnJvcihldmVudERhdGEuZXJyb3IsIHRocmVhZElkKVxuICAgIH1cbiAgfVxuXG4gIHdoaWxlICghaXNTdHJlYW1Db21wbGV0ZSkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1hd2FpdC1pbi1sb29wXG4gICAgY29uc3QgeyBkb25lLCB2YWx1ZSB9ID0gYXdhaXQgcmVhZGVyLnJlYWQoKVxuICAgIGlmIChkb25lKSB7XG4gICAgICBpc1N0cmVhbUNvbXBsZXRlID0gdHJ1ZVxuICAgICAgYnJlYWtcbiAgICB9XG5cbiAgICBidWZmZXIgKz0gZGVjb2Rlci5kZWNvZGUodmFsdWUsIHsgc3RyZWFtOiB0cnVlIH0pXG4gICAgY29uc3QgbGluZXMgPSBidWZmZXIuc3BsaXQoJ1xcblxcbicpXG4gICAgYnVmZmVyID0gbGluZXMucG9wKCkgfHwgJydcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGluZXMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgIGhhbmRsZUxpbmUobGluZXNbaV0pXG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBjb25zdCB1c2VDaGF0TWFuYWdlciA9ICh7XG4gIGNoYXRJZDogaW5pdGlhbENoYXRJZCxcbiAgdXNlckluaXRpYWxNZXNzYWdlLFxuICBvbkVycm9yLFxuICBhZ2VudHMgPSBbXSxcbn06IFVzZUNoYXRNYW5hZ2VyUHJvcHMpID0+IHtcbiAgY29uc3QgeyB0IH0gPSB1c2VUKClcbiAgY29uc3QgYXV0aFVzZXIgPSB1c2VVc2VyKClcbiAgY29uc3Qge1xuICAgIHByb2plY3QsXG4gICAgc2V0UHJvamVjdCxcbiAgICBjbGllbnQsXG4gICAgc2V0Q2xpZW50LFxuICAgIGFnZW50LFxuICAgIGlzV2ViU2VhcmNoQWN0aXZlLFxuICAgIGlzRGVlcFNlYXJjaEFjdGl2ZSxcbiAgICBjaGlwc1Byb2plY3QsXG4gICAgc2V0Q2hpcHNQcm9qZWN0LFxuICB9ID0gdXNlR2xvYmFsQ29udGV4dCgpXG4gIGNvbnN0IGV2ZW50ID0gdXNlRXZlbnQoKVxuICBjb25zdCB7IGZldGNoUHJvamVjdHMgfSA9IHVzZVByb2plY3RzKClcbiAgY29uc3QgeyBjdXJyZW50VXNlciB9ID0gdXNlU3RhYmxlQ2FsbGJhY2tzKGF1dGhVc2VyKVxuICBjb25zdCB7IGdldFRhYlRhc2tEZWZhdWx0IH0gPSB1c2VUYWJUYXNrRGVmYXVsdCgpXG4gIGNvbnN0IGN1cnJlbnRNZXNzYWdlSWQgPSB1c2VSZWYodXVpZHY0KCkpXG4gIGNvbnN0IGN1cnJlbnRVc2VyUXVlc3Rpb24gPSB1c2VSZWY8c3RyaW5nIHwgbnVsbD4obnVsbClcbiAgY29uc3QgY3VycmVudENoYXRJZCA9IHVzZVJlZihpbml0aWFsQ2hhdElkIHx8IHV1aWR2NCgpKVxuICBjb25zdCByZXBvcnRlZEV2ZW50ID0gdXNlUmVmKGZhbHNlKVxuICBjb25zdCBtZXNzYWdlc1JlZiA9IHVzZVJlZjxDaGF0TWVzc2FnZVtdPihbXSlcbiAgY29uc3QgaXNQcm9jZXNzaW5nUmVmID0gdXNlUmVmKGZhbHNlKVxuICBjb25zdCBmaXJzdFRpbWVSZWYgPSB1c2VSZWYoZmFsc2UpXG4gIGNvbnN0IFthY3RpdmVMb2FkaW5ncywgc2V0QWN0aXZlTG9hZGluZ3NdID0gdXNlU3RhdGU8UmVjb3JkPHN0cmluZywgc3RyaW5nPj4oe30pXG5cbiAgY29uc3QgaXNXZWJTZWFyY2hBY3RpdmVSZWYgPSB1c2VSZWYoaXNXZWJTZWFyY2hBY3RpdmUpXG4gIGNvbnN0IGlzRGVlcFNlYXJjaEFjdGl2ZVJlZiA9IHVzZVJlZihpc0RlZXBTZWFyY2hBY3RpdmUpXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpc1dlYlNlYXJjaEFjdGl2ZVJlZi5jdXJyZW50ID0gaXNXZWJTZWFyY2hBY3RpdmVcbiAgICBpc0RlZXBTZWFyY2hBY3RpdmVSZWYuY3VycmVudCA9IGlzRGVlcFNlYXJjaEFjdGl2ZVxuICB9LCBbaXNXZWJTZWFyY2hBY3RpdmUsIGlzRGVlcFNlYXJjaEFjdGl2ZV0pXG5cbiAgY29uc3QgeyBsb2FkaW5nTWVzc2FnZXMsIG1lc3NhZ2VzLCBpc0xvYWRpbmdNb3JlTWVzc2FnZXMsIGxvYWRNZXNzYWdlcywgYWRkTWVzc2FnZSwgcmVtb3ZlTWVzc2FnZSwgaGFuZGxlU2Nyb2xsIH0gPVxuICAgIHVzZUNoYXRNZXNzYWdlcyh7XG4gICAgICBjaGF0SWQ6IGluaXRpYWxDaGF0SWQgfHwgY3VycmVudENoYXRJZC5jdXJyZW50LFxuICAgICAgY3VycmVudFVzZXIsXG4gICAgICB1c2VySW5pdGlhbE1lc3NhZ2UsXG4gICAgICBvbkVycm9yLFxuICAgICAgYWdlbnRzLFxuICAgIH0pXG5cbiAgbWVzc2FnZXNSZWYuY3VycmVudCA9IG1lc3NhZ2VzXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBjdXN0b21FdmVudCA9IG5ldyBDdXN0b21FdmVudCgnY2hhdC1sb2FkaW5nLW1lc3NhZ2VzLWNoYW5nZWQnLCB7XG4gICAgICBkZXRhaWw6IHsgbG9hZGluZ01lc3NhZ2VzIH0sXG4gICAgfSlcbiAgICBkb2N1bWVudC5kaXNwYXRjaEV2ZW50KGN1c3RvbUV2ZW50KVxuICB9LCBbbG9hZGluZ01lc3NhZ2VzXSlcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChpbml0aWFsQ2hhdElkICYmIGluaXRpYWxDaGF0SWQgIT09IGN1cnJlbnRDaGF0SWQuY3VycmVudCkge1xuICAgICAgLy8gTGltcGlhciBjb250ZXh0byBnbG9iYWwgYWwgY2FtYmlhciBkZSBjb252ZXJzYWNpw7NuXG4gICAgICBzZXRQcm9qZWN0KG51bGwpXG4gICAgICBzZXRDbGllbnQ/LihudWxsKVxuICAgICAgc2V0Q2hpcHNQcm9qZWN0KG51bGwpXG5cbiAgICAgIGN1cnJlbnRDaGF0SWQuY3VycmVudCA9IGluaXRpYWxDaGF0SWRcbiAgICAgIGN1cnJlbnRNZXNzYWdlSWQuY3VycmVudCA9IHV1aWR2NCgpXG4gICAgICBjdXJyZW50VXNlclF1ZXN0aW9uLmN1cnJlbnQgPSBudWxsXG4gICAgICByZXBvcnRlZEV2ZW50LmN1cnJlbnQgPSBmYWxzZVxuICAgICAgaXNQcm9jZXNzaW5nUmVmLmN1cnJlbnQgPSBmYWxzZVxuXG4gICAgICBsb2FkTWVzc2FnZXMoKVxuICAgIH1cbiAgfSwgW2luaXRpYWxDaGF0SWQsIHByb2plY3QsIHNldFByb2plY3QsIHNldENsaWVudCwgc2V0Q2hpcHNQcm9qZWN0LCBsb2FkTWVzc2FnZXNdKVxuXG4gIC8vIFNpbmNyb25pemFyIGNoaXBzUHJvamVjdCBjdWFuZG8gaGF5IG1lbnNhamVzIGNvbiBwcm9qZWN0SWQgcGVybyBjaGlwc1Byb2plY3Qgbm8gc2UgaGEgc2V0ZWFkb1xuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChjaGlwc1Byb2plY3QgfHwgbG9hZGluZ01lc3NhZ2VzKSByZXR1cm5cbiAgICBjb25zdCBsYXN0TXNnV2l0aFByb2plY3QgPSBtZXNzYWdlcy5maWx0ZXIobXNnID0+IG1zZy5wcm9qZWN0SWQpLmF0KC0xKVxuICAgIGNvbnN0IHsgcHJvamVjdElkLCBwcm9qZWN0TmFtZSB9ID0gbGFzdE1zZ1dpdGhQcm9qZWN0IHx8IHt9XG4gICAgaWYgKCFwcm9qZWN0SWQpIHJldHVyblxuXG4gICAgZmV0Y2hQcm9qZWN0cyhwcm9qZWN0SWQpLnRoZW4ocHJvamVjdHMgPT4ge1xuICAgICAgY29uc3QgZm91bmQgPSBwcm9qZWN0cz8uZmluZChwID0+IE51bWJlcihwLmlkKSA9PT0gTnVtYmVyKHByb2plY3RJZCkpXG4gICAgICBpZiAoZm91bmQpIHtcbiAgICAgICAgc2V0Q2hpcHNQcm9qZWN0KHtcbiAgICAgICAgICBwcm9qZWN0TmFtZTogZm91bmQubmFtZSxcbiAgICAgICAgICBjbGllbnROYW1lOiBmb3VuZC5jbGllbnQ/Lm5hbWUgfHwgJycsXG4gICAgICAgICAgcHJvamVjdElkOiBTdHJpbmcoZm91bmQuaWQpLFxuICAgICAgICB9KVxuICAgICAgICBzZXRQcm9qZWN0KGZvdW5kKVxuICAgICAgfSBlbHNlIGlmIChwcm9qZWN0TmFtZSkge1xuICAgICAgICBzZXRDaGlwc1Byb2plY3Qoe1xuICAgICAgICAgIHByb2plY3ROYW1lLFxuICAgICAgICAgIGNsaWVudE5hbWU6ICcnLFxuICAgICAgICAgIHByb2plY3RJZDogU3RyaW5nKHByb2plY3RJZCksXG4gICAgICAgIH0pXG4gICAgICAgIHNldFByb2plY3QoeyBpZDogTnVtYmVyKHByb2plY3RJZCksIG5hbWU6IHByb2plY3ROYW1lIH0pXG4gICAgICB9XG4gICAgfSlcbiAgfSwgW21lc3NhZ2VzLCBjaGlwc1Byb2plY3QsIGxvYWRpbmdNZXNzYWdlcywgZmV0Y2hQcm9qZWN0cywgc2V0Q2hpcHNQcm9qZWN0LCBzZXRQcm9qZWN0XSlcblxuICAvLyBTaW5jcm9uaXphciBjbGllbnQgY3VhbmRvIGhheSBtZW5zYWplcyBjb24gY2xpZW50SWQgcGVybyBjbGllbnQgbm8gc2UgaGEgc2V0ZWFkb1xuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChjbGllbnQgfHwgbG9hZGluZ01lc3NhZ2VzKSByZXR1cm5cbiAgICBjb25zdCBsYXN0TXNnV2l0aENsaWVudCA9IG1lc3NhZ2VzLmZpbHRlcihtc2cgPT4gbXNnLmNsaWVudElkICE9IG51bGwgJiYgbXNnLmNsaWVudE5hbWUpLmF0KC0xKVxuICAgIGNvbnN0IHsgY2xpZW50SWQ6IG1zZ0NsaWVudElkLCBjbGllbnROYW1lOiBtc2dDbGllbnROYW1lIH0gPSBsYXN0TXNnV2l0aENsaWVudCB8fCB7fVxuICAgIGlmIChtc2dDbGllbnRJZCA9PSBudWxsIHx8ICFtc2dDbGllbnROYW1lKSByZXR1cm5cblxuICAgIHNldENsaWVudD8uKHsgaWQ6IE51bWJlcihtc2dDbGllbnRJZCksIG5hbWU6IG1zZ0NsaWVudE5hbWUgfSlcbiAgfSwgW21lc3NhZ2VzLCBjbGllbnQsIGxvYWRpbmdNZXNzYWdlcywgc2V0Q2xpZW50XSlcblxuICBjb25zdCBoYW5kbGVTdHJlYW1FcnJvciA9IHVzZUNhbGxiYWNrKFxuICAgIChlcnJvck1lc3NhZ2U/OiBzdHJpbmcpID0+IHtcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPVxuICAgICAgICBlcnJvck1lc3NhZ2UgPT09IFwiQWNjZXNzIGRlbmllZDogWW91IGRvbid0IGhhdmUgcGVybWlzc2lvbiB0byBhY2Nlc3MgdGhpcyBhZ2VudFwiXG4gICAgICAgICAgPyB0KCdjaGF0LmVycm9yQWNjZXNzRGVuaWVkJylcbiAgICAgICAgICA6IHQoJ2NoYXQuZXJyb3InKVxuXG4gICAgICBhZGRNZXNzYWdlKHtcbiAgICAgICAgaWQ6IGBhbnN3ZXItJHtjdXJyZW50TWVzc2FnZUlkLmN1cnJlbnR9YCxcbiAgICAgICAgbWVzc2FnZSxcbiAgICAgICAgaXNFcnJvcjogdHJ1ZSxcbiAgICAgICAgZGF0ZTogbmV3IERhdGUoKSxcbiAgICAgICAgdXNlcjogeyBpZDogJ2Fzc2lzdGFudCcsIG5hbWU6ICdBc3Npc3RhbnQnIH0sXG4gICAgICAgIHJvbGU6IENoYXRIaXN0b3J5Um9sZS5BU1NJU1RBTlQsXG4gICAgICB9KVxuICAgICAgaXNQcm9jZXNzaW5nUmVmLmN1cnJlbnQgPSBmYWxzZVxuICAgIH0sXG4gICAgW2FkZE1lc3NhZ2UsIHRdXG4gIClcblxuICBjb25zdCBoYW5kbGVTdHJlYW1VcGRhdGUgPSB1c2VDYWxsYmFjayhcbiAgICAoY29udGVudDogc3RyaW5nLCBzb3VyY2VzOiBhbnksIG1lbW9yeVNlc3Npb25JZDogc3RyaW5nKSA9PiB7XG4gICAgICBjb25zdCB0ZW1wTWVzc2FnZUlkID0gYGFuc3dlci0ke2N1cnJlbnRNZXNzYWdlSWQuY3VycmVudH0tc3RyZWFtaW5nYFxuXG4gICAgICBhZGRNZXNzYWdlKHtcbiAgICAgICAgaWQ6IHRlbXBNZXNzYWdlSWQsXG4gICAgICAgIG1lc3NhZ2U6IGNvbnRlbnQsXG4gICAgICAgIGRhdGU6IG5ldyBEYXRlKCksXG4gICAgICAgIHVzZXI6IHsgaWQ6ICdhc3Npc3RhbnQnLCBuYW1lOiAnQXNzaXN0YW50JyB9LFxuICAgICAgICByb2xlOiBDaGF0SGlzdG9yeVJvbGUuQVNTSVNUQU5ULFxuICAgICAgICBzb3VyY2VzLFxuICAgICAgICBtZW1vcnlTZXNzaW9uSWQsXG4gICAgICB9KVxuICAgIH0sXG4gICAgW2FkZE1lc3NhZ2VdXG4gIClcblxuICBjb25zdCBoYW5kbGVTdHJlYW1GaW5pc2ggPSB1c2VDYWxsYmFjayhcbiAgICBhc3luYyAoXG4gICAgICBjb250ZW50OiBzdHJpbmcsXG4gICAgICBzb3VyY2VzOiBhbnksXG4gICAgICBtZW1vcnlTZXNzaW9uSWQ6IHN0cmluZyxcbiAgICAgIHN1Z2dlc3Rpb25zPzogc3RyaW5nW10gfCBudWxsLFxuICAgICAgY29tcGxldGVkQWdlbnRJZD86IHN0cmluZyB8IG51bGxcbiAgICApID0+IHtcbiAgICAgIGNvbnN0IHRlbXBNZXNzYWdlSWQgPSBgYW5zd2VyLSR7Y3VycmVudE1lc3NhZ2VJZC5jdXJyZW50fS1zdHJlYW1pbmdgXG4gICAgICByZW1vdmVNZXNzYWdlKHRlbXBNZXNzYWdlSWQpXG5cbiAgICAgIC8vIERldGVjdGFyIHRvZGFzIGxhcyBVUkxzIGRlIHRhcmVhcyAoLi4uL3Rhc2tzLzEyMy9kZXRhaWx8bWVzc2FnZXxtZXNzYWdlc3xmaWxlc3xoaXN0b3J5fGhvdXJzKVxuICAgICAgY29uc3QgdGFza1VybFJlZ2V4ID0gbmV3IFJlZ0V4cChUQVNLX1VSTF9SRUdFWF9QQVRURVJOLCAnZycpXG4gICAgICBjb25zdCBtYXRjaGVzID0gWy4uLmNvbnRlbnQubWF0Y2hBbGwodGFza1VybFJlZ2V4KV1cblxuICAgICAgbGV0IGNvbnRlbnRUb0FkZCA9IGNvbnRlbnRcbiAgICAgIGNvbnN0IHByZXZpb3VzTWVzc2FnZSA9IG1lc3NhZ2VzUmVmLmN1cnJlbnQuZmlsdGVyKG0gPT4gbS5pZCAhPT0gdGVtcE1lc3NhZ2VJZCkuYXQoLTEpXG4gICAgICBjb25zdCBoYXNBcHByb3ZhbEluUHJldmlvdXNNZXNzYWdlID0gcHJldmlvdXNNZXNzYWdlPy5hcHByb3ZhbCAhPSBudWxsXG4gICAgICBjb25zdCBUQVNLX0NSRUFUSU9OX1RPT0xTID0gWydjcmVhdGVfdGFzaycsICdjcmVhdGVfdGFza3NfYmF0Y2gnLCAnY2xvbmVfdGFzayddXG4gICAgICBjb25zdCBUQVNLX0VESVRfVE9PTFMgPSBbXG4gICAgICAgICdlZGl0X3Rhc2snLFxuICAgICAgICAnZWRpdF90YXNrc19iYXRjaCcsXG4gICAgICAgICd0YXNrX2Fzc2lnbicsXG4gICAgICAgICd0YXNrX3VuYXNzaWduJyxcbiAgICAgICAgJ3VwZGF0ZV90YXNrX3R5cGUnLFxuICAgICAgICAndXBkYXRlX2VzdGltYXRlZF9ob3VycycsXG4gICAgICAgICdhc3NpZ25fdGFza19sYWJlbCcsXG4gICAgICBdXG4gICAgICBjb25zdCBUQVNLX0RFTEVURV9UT09MUyA9IFsnZGVsZXRlX3Rhc2snLCAnZGVsZXRlX3Rhc2tzX2JhdGNoJ11cbiAgICAgIGNvbnN0IHBlbmRpbmdBY3Rpb25zID0gcHJldmlvdXNNZXNzYWdlPy5hcHByb3ZhbD8ucGVuZGluZ19hY3Rpb25zIHx8IFtdXG4gICAgICBjb25zdCB3YXNUYXNrQ3JlYXRpb24gPVxuICAgICAgICBoYXNBcHByb3ZhbEluUHJldmlvdXNNZXNzYWdlICYmXG4gICAgICAgIHBlbmRpbmdBY3Rpb25zLnNvbWUoKGFjdGlvbjogYW55KSA9PiBUQVNLX0NSRUFUSU9OX1RPT0xTLmluY2x1ZGVzKGFjdGlvbi50b29sX25hbWUpKVxuICAgICAgY29uc3Qgd2FzVGFza0VkaXQgPVxuICAgICAgICBoYXNBcHByb3ZhbEluUHJldmlvdXNNZXNzYWdlICYmIHBlbmRpbmdBY3Rpb25zLnNvbWUoKGFjdGlvbjogYW55KSA9PiBUQVNLX0VESVRfVE9PTFMuaW5jbHVkZXMoYWN0aW9uLnRvb2xfbmFtZSkpXG4gICAgICBjb25zdCB3YXNUYXNrRGVsZXRlID1cbiAgICAgICAgaGFzQXBwcm92YWxJblByZXZpb3VzTWVzc2FnZSAmJlxuICAgICAgICBwZW5kaW5nQWN0aW9ucy5zb21lKChhY3Rpb246IGFueSkgPT4gVEFTS19ERUxFVEVfVE9PTFMuaW5jbHVkZXMoYWN0aW9uLnRvb2xfbmFtZSkpXG4gICAgICBjb25zdCB3YXNDcmVhdGVBZ2VudEFwcHJvdmVkID1cbiAgICAgICAgaGFzQXBwcm92YWxJblByZXZpb3VzTWVzc2FnZSAmJlxuICAgICAgICBwcmV2aW91c01lc3NhZ2U/LmFwcHJvdmFsU3RhdHVzID09PSAnYXBwcm92ZWQnICYmXG4gICAgICAgIHBlbmRpbmdBY3Rpb25zLnNvbWUoKGFjdGlvbjogYW55KSA9PiBhY3Rpb24udG9vbF9uYW1lID09PSAnY3JlYXRlX2FnZW50JylcbiAgICAgIGNvbnN0IHdhc0NvbmZpZ3VyZUFnZW50QWNjZXNzQXBwcm92ZWQgPVxuICAgICAgICBoYXNBcHByb3ZhbEluUHJldmlvdXNNZXNzYWdlICYmXG4gICAgICAgIHByZXZpb3VzTWVzc2FnZT8uYXBwcm92YWxTdGF0dXMgPT09ICdhcHByb3ZlZCcgJiZcbiAgICAgICAgcGVuZGluZ0FjdGlvbnMuc29tZSgoYWN0aW9uOiBhbnkpID0+IChhY3Rpb24udG9vbF9uYW1lIHx8ICcnKS50b0xvd2VyQ2FzZSgpID09PSAnY29uZmlndXJlX2FnZW50X2FjY2VzcycpXG4gICAgICBsZXQgY3JlYXRlQWdlbnRGb2xsb3dVcDogeyBhZ2VudElkOiBzdHJpbmcgfSB8IHVuZGVmaW5lZFxuICAgICAgaWYgKHdhc0NyZWF0ZUFnZW50QXBwcm92ZWQgJiYgd2luZG93Lk1BSUFfQ0hBVF9BSV9GRUFUVVJFX0FDQ0VTU19NVUxUSV9BR0VOVFMgJiYgY29tcGxldGVkQWdlbnRJZD8udHJpbSgpKSB7XG4gICAgICAgIGNyZWF0ZUFnZW50Rm9sbG93VXAgPSB7IGFnZW50SWQ6IGNvbXBsZXRlZEFnZW50SWQudHJpbSgpIH1cbiAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgIHdhc0NvbmZpZ3VyZUFnZW50QWNjZXNzQXBwcm92ZWQgJiZcbiAgICAgICAgd2luZG93Lk1BSUFfQ0hBVF9BSV9GRUFUVVJFX0FDQ0VTU19NVUxUSV9BR0VOVFMgJiZcbiAgICAgICAgKGNvbXBsZXRlZEFnZW50SWQ/LnRyaW0oKSB8fFxuICAgICAgICAgIGV4dHJhY3RBZ2VudElkRnJvbVBlbmRpbmdBY3Rpb25zQnlUb29sTmFtZShwZW5kaW5nQWN0aW9ucywgJ2NvbmZpZ3VyZV9hZ2VudF9hY2Nlc3MnKSlcbiAgICAgICkge1xuICAgICAgICBjb25zdCBjb25maWd1cmVkQWdlbnRJZCA9XG4gICAgICAgICAgY29tcGxldGVkQWdlbnRJZD8udHJpbSgpIHx8XG4gICAgICAgICAgZXh0cmFjdEFnZW50SWRGcm9tUGVuZGluZ0FjdGlvbnNCeVRvb2xOYW1lKHBlbmRpbmdBY3Rpb25zLCAnY29uZmlndXJlX2FnZW50X2FjY2VzcycpXG4gICAgICAgIGNyZWF0ZUFnZW50Rm9sbG93VXAgPSB7XG4gICAgICAgICAgYWdlbnRJZDogY29uZmlndXJlZEFnZW50SWQgYXMgc3RyaW5nLFxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICh3YXNDcmVhdGVBZ2VudEFwcHJvdmVkKSB7XG4gICAgICAgIGV2ZW50KEVWRU5UUy5haUNoYXRIaXRsT3B0aW9uLCB7XG4gICAgICAgICAgYWdlbnRfdHlwZTogZ2V0SGl0bEFuYWx5dGljc0FnZW50VHlwZShhZ2VudCksXG4gICAgICAgICAgYWN0aW9uX3R5cGU6IGJ1aWxkSGl0bEFjdGlvblR5cGVMaXN0KHBlbmRpbmdBY3Rpb25zKSxcbiAgICAgICAgICBkZWNpc2lvbjogJ2FjY2VwdCcsXG4gICAgICAgICAgb3B0aW9uOiAnY3JlYXRlX2FnZW50JyxcbiAgICAgICAgICAuLi4oY29tcGxldGVkQWdlbnRJZD8udHJpbSgpID8geyBjcmVhdGVkX2FnZW50X2lkOiBjb21wbGV0ZWRBZ2VudElkLnRyaW0oKSB9IDoge30pLFxuICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICBjb25zdCB3YXNFZGl0QWdlbnRBcHByb3ZlZCA9XG4gICAgICAgIGhhc0FwcHJvdmFsSW5QcmV2aW91c01lc3NhZ2UgJiZcbiAgICAgICAgcHJldmlvdXNNZXNzYWdlPy5hcHByb3ZhbFN0YXR1cyA9PT0gJ2FwcHJvdmVkJyAmJlxuICAgICAgICBwZW5kaW5nQWN0aW9ucy5zb21lKChhY3Rpb246IGFueSkgPT4gKGFjdGlvbi50b29sX25hbWUgfHwgJycpLnRvTG93ZXJDYXNlKCkgPT09ICdlZGl0X2FnZW50JylcblxuICAgICAgbGV0IGVkaXRBZ2VudEZvbGxvd1VwOiB7IGFnZW50SWQ6IHN0cmluZyB9IHwgdW5kZWZpbmVkXG4gICAgICBpZiAod2FzRWRpdEFnZW50QXBwcm92ZWQpIHtcbiAgICAgICAgY29uc3QgZnJvbVN0cmVhbSA9IGNvbXBsZXRlZEFnZW50SWQ/LnRyaW0oKVxuICAgICAgICBjb25zdCBmcm9tQXJncyA9IGV4dHJhY3RBZ2VudElkRnJvbUVkaXRBZ2VudFBlbmRpbmdBY3Rpb25zKHBlbmRpbmdBY3Rpb25zKVxuICAgICAgICBjb25zdCByZXNvbHZlZEFnZW50SWQgPSBmcm9tU3RyZWFtIHx8IGZyb21BcmdzXG4gICAgICAgIGlmIChyZXNvbHZlZEFnZW50SWQpIHtcbiAgICAgICAgICBlZGl0QWdlbnRGb2xsb3dVcCA9IHsgYWdlbnRJZDogcmVzb2x2ZWRBZ2VudElkIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjb25zdCB0YXNrSWRzRnJvbVVybHMgPSBtYXRjaGVzLm1hcChtYXRjaCA9PiBwYXJzZUludChtYXRjaFsxXSwgMTApKVxuICAgICAgY29uc3QgdGFza0lkc0Zyb21EZWxldGVBcHByb3ZhbCA9IGV4dHJhY3RUYXNrSWRzRnJvbURlbGV0ZVBlbmRpbmdBY3Rpb25zKHBlbmRpbmdBY3Rpb25zKVxuICAgICAgY29uc3QgdGFza0lkc0Zyb21EZWxldGlvblRleHQgPVxuICAgICAgICB3YXNUYXNrRGVsZXRlICYmIHRhc2tJZHNGcm9tVXJscy5sZW5ndGggPT09IDAgJiYgdGFza0lkc0Zyb21EZWxldGVBcHByb3ZhbC5sZW5ndGggPT09IDBcbiAgICAgICAgICA/IGV4dHJhY3RUYXNrSWRzRnJvbUFzc2lzdGFudERlbGV0aW9uVGV4dChjb250ZW50KVxuICAgICAgICAgIDogW11cbiAgICAgIGNvbnN0IHRhc2tJZHNGb3JEYXNoYm9hcmQgPVxuICAgICAgICB0YXNrSWRzRnJvbVVybHMubGVuZ3RoID4gMFxuICAgICAgICAgID8gdGFza0lkc0Zyb21VcmxzXG4gICAgICAgICAgOiB0YXNrSWRzRnJvbURlbGV0ZUFwcHJvdmFsLmxlbmd0aCA+IDBcbiAgICAgICAgICAgID8gdGFza0lkc0Zyb21EZWxldGVBcHByb3ZhbFxuICAgICAgICAgICAgOiB0YXNrSWRzRnJvbURlbGV0aW9uVGV4dFxuXG4gICAgICBjb25zdCBzaG91bGRTeW5jRGFzaGJvYXJkID1cbiAgICAgICAgaGFzQXBwcm92YWxJblByZXZpb3VzTWVzc2FnZSAmJlxuICAgICAgICAod2FzVGFza0NyZWF0aW9uIHx8IHdhc1Rhc2tFZGl0IHx8IHdhc1Rhc2tEZWxldGUpICYmXG4gICAgICAgIHRhc2tJZHNGb3JEYXNoYm9hcmQubGVuZ3RoID4gMFxuXG4gICAgICBpZiAoc2hvdWxkU3luY0Rhc2hib2FyZCkge1xuICAgICAgICBjb25zdCB0YXNrSWRzID0gdGFza0lkc0ZvckRhc2hib2FyZFxuICAgICAgICBpZiAobWF0Y2hlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgY29uc3QgdGFiID0gYXdhaXQgZ2V0VGFiVGFza0RlZmF1bHQodGFza0lkc1swXSlcbiAgICAgICAgICBjb25zdCB0YWJTZWdtZW50ID0gdGFiID8gYC8ke3RhYn1gIDogJy9kZXRhaWwnXG4gICAgICAgICAgY29udGVudFRvQWRkID0gY29udGVudC5yZXBsYWNlKHRhc2tVcmxSZWdleCwgdXJsID0+XG4gICAgICAgICAgICB1cmwucmVwbGFjZSgvXFwvKGRldGFpbHxtZXNzYWdlfG1lc3NhZ2VzfGZpbGVzfGhpc3Rvcnl8aG91cnMpKD89JHxcXD8pLywgdGFiU2VnbWVudClcbiAgICAgICAgICApXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBsYXN0UHJvamVjdE1lc3NhZ2UgPSBtZXNzYWdlc1JlZi5jdXJyZW50LmZpbHRlcihtc2cgPT4gbXNnLnByb2plY3RJZCkuYXQoLTEpXG4gICAgICAgIGNvbnN0IGNvbnRleHRQcm9qZWN0SWRSYXcgPSBwcm9qZWN0Py5pZCB8fCBsYXN0UHJvamVjdE1lc3NhZ2U/LnByb2plY3RJZFxuICAgICAgICBjb25zdCBjb250ZXh0UHJvamVjdElkID0gY29udGV4dFByb2plY3RJZFJhdyA/IHBhcnNlSW50KFN0cmluZyhjb250ZXh0UHJvamVjdElkUmF3KSwgMTApIDogbnVsbFxuICAgICAgICBjb25zdCBwYXRoTWF0Y2ggPSB3aW5kb3cubG9jYXRpb24ucGF0aG5hbWUubWF0Y2goL15cXC9wcm9qZWN0c1xcLyhcXGQrKVxcLy8pXG4gICAgICAgIGNvbnN0IHJvdXRlUHJvamVjdElkID0gcGF0aE1hdGNoID8gcGFyc2VJbnQocGF0aE1hdGNoWzFdLCAxMCkgOiBudWxsXG4gICAgICAgIGNvbnN0IGlzT25Qcm9qZWN0Um91dGUgPSBjb250ZXh0UHJvamVjdElkICYmIHJvdXRlUHJvamVjdElkICYmIGNvbnRleHRQcm9qZWN0SWQgPT09IHJvdXRlUHJvamVjdElkXG5cbiAgICAgICAgaWYgKGlzT25Qcm9qZWN0Um91dGUpIHtcbiAgICAgICAgICBpZiAod2FzVGFza0NyZWF0aW9uKSB7XG4gICAgICAgICAgICB3aW5kb3cubmV3UHJvamVjdERhc2hib2FyZD8uYWRkRXhpc3RpbmdUYXNrVG9EYXNoYm9hcmQ/Lih0YXNrSWRzKVxuICAgICAgICAgIH0gZWxzZSBpZiAod2FzVGFza0VkaXQpIHtcbiAgICAgICAgICAgIHdpbmRvdy5uZXdQcm9qZWN0RGFzaGJvYXJkPy5lZGl0RXhpc3RpbmdUYXNrSW5EYXNoYm9hcmQ/Lih0YXNrSWRzKVxuICAgICAgICAgIH0gZWxzZSBpZiAod2FzVGFza0RlbGV0ZSkge1xuICAgICAgICAgICAgd2luZG93Lm5ld1Byb2plY3REYXNoYm9hcmQ/LmRlbGV0ZUV4aXN0aW5nVGFza0Zyb21EYXNoYm9hcmQ/Lih0YXNrSWRzKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBhZGRNZXNzYWdlKHtcbiAgICAgICAgaWQ6IGBhbnN3ZXItJHttZW1vcnlTZXNzaW9uSWR9YCxcbiAgICAgICAgbWVzc2FnZTogY29udGVudFRvQWRkLFxuICAgICAgICBkYXRlOiBuZXcgRGF0ZSgpLFxuICAgICAgICB1c2VyOiB7IGlkOiAnYXNzaXN0YW50JywgbmFtZTogJ0Fzc2lzdGFudCcgfSxcbiAgICAgICAgcm9sZTogQ2hhdEhpc3RvcnlSb2xlLkFTU0lTVEFOVCxcbiAgICAgICAgc291cmNlcyxcbiAgICAgICAgbWVtb3J5U2Vzc2lvbklkLFxuICAgICAgICBzdWdnZXN0aW9uczogc3VnZ2VzdGlvbnMgfHwgW10sXG4gICAgICAgIC4uLihjcmVhdGVBZ2VudEZvbGxvd1VwID8geyBjcmVhdGVBZ2VudEZvbGxvd1VwIH0gOiB7fSksXG4gICAgICB9KVxuXG4gICAgICBpZiAoY3JlYXRlQWdlbnRGb2xsb3dVcD8uYWdlbnRJZCkge1xuICAgICAgICBmZXRjaEFnZW50RGV0YWlsKGNyZWF0ZUFnZW50Rm9sbG93VXAuYWdlbnRJZClcbiAgICAgICAgICAudGhlbihjaGF0QWdlbnQgPT4ge1xuICAgICAgICAgICAgZG9jdW1lbnQuZGlzcGF0Y2hFdmVudChcbiAgICAgICAgICAgICAgbmV3IEN1c3RvbUV2ZW50KCdtYWlhLW1lcmdlLWNyZWF0ZWQtYWdlbnQtaW50by1saXN0Jywge1xuICAgICAgICAgICAgICAgIGRldGFpbDogeyBhZ2VudDogY2hhdEFnZW50IH0sXG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApXG4gICAgICAgICAgfSlcbiAgICAgICAgICAuY2F0Y2goZXJyID0+IHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1t1c2VDaGF0TWFuYWdlcl0gTm8gc2UgcHVkbyBhw7FhZGlyIGVsIGFnZW50ZSByZWNpw6luIGNyZWFkbyBhbCBsaXN0YWRvJywgZXJyKVxuICAgICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIGlmIChlZGl0QWdlbnRGb2xsb3dVcD8uYWdlbnRJZCkge1xuICAgICAgICBmZXRjaEFnZW50RGV0YWlsKGVkaXRBZ2VudEZvbGxvd1VwLmFnZW50SWQpXG4gICAgICAgICAgLnRoZW4oY2hhdEFnZW50ID0+IHtcbiAgICAgICAgICAgIGRvY3VtZW50LmRpc3BhdGNoRXZlbnQoXG4gICAgICAgICAgICAgIG5ldyBDdXN0b21FdmVudCgnbWFpYS1zeW5jLWVkaXRlZC1hZ2VudC1mcm9tLWNoYXQnLCB7XG4gICAgICAgICAgICAgICAgZGV0YWlsOiB7IGFnZW50OiBjaGF0QWdlbnQgfSxcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICB9KVxuICAgICAgICAgIC5jYXRjaChlcnIgPT4ge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcignW3VzZUNoYXRNYW5hZ2VyXSBObyBzZSBwdWRvIHJlZnJlc2NhciBlbCBhZ2VudGUgZWRpdGFkbycsIGVycilcbiAgICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICBpc1Byb2Nlc3NpbmdSZWYuY3VycmVudCA9IGZhbHNlXG4gICAgICBpZiAoZmlyc3RUaW1lUmVmLmN1cnJlbnQpIHtcbiAgICAgICAgY29uc3QgY3VzdG9tRXZlbnQgPSBuZXcgQ3VzdG9tRXZlbnQoJ3JlZmV0Y2gtc2Vzc2lvbicpXG4gICAgICAgIGRvY3VtZW50LmRpc3BhdGNoRXZlbnQoY3VzdG9tRXZlbnQpXG4gICAgICAgIGZpcnN0VGltZVJlZi5jdXJyZW50ID0gZmFsc2VcbiAgICAgIH1cbiAgICB9LFxuICAgIFthZGRNZXNzYWdlLCByZW1vdmVNZXNzYWdlLCBwcm9qZWN0LCBnZXRUYWJUYXNrRGVmYXVsdCwgZXZlbnQsIGFnZW50XVxuICApXG5cbiAgY29uc3QgaGFuZGxlU3RyZWFtU3RvcCA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBhZGRNZXNzYWdlKHtcbiAgICAgIGlkOiBgYW5zd2VyLSR7Y3VycmVudE1lc3NhZ2VJZC5jdXJyZW50fS1jYW5jZWxsZWRgLFxuICAgICAgbWVzc2FnZTogdCgnY2hhdC5jYW5jZWxsZWQnKSxcbiAgICAgIGRhdGU6IG5ldyBEYXRlKCksXG4gICAgICB1c2VyOiB7IGlkOiAnYXNzaXN0YW50JywgbmFtZTogJ0Fzc2lzdGFudCcgfSxcbiAgICAgIHJvbGU6IENoYXRIaXN0b3J5Um9sZS5BU1NJU1RBTlQsXG4gICAgICBpc0Zyb250ZW5kQ2FuY2VsbGVkOiB0cnVlLFxuICAgIH0pXG4gICAgaXNQcm9jZXNzaW5nUmVmLmN1cnJlbnQgPSBmYWxzZVxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgY29uc3QgY3VzdG9tRXZlbnQgPSBuZXcgQ3VzdG9tRXZlbnQoJ3JlZmV0Y2gtc2Vzc2lvbicpXG4gICAgICBkb2N1bWVudC5kaXNwYXRjaEV2ZW50KGN1c3RvbUV2ZW50KVxuICAgIH0sIDUwMClcbiAgfSwgW2FkZE1lc3NhZ2UsIHRdKVxuXG4gIGNvbnN0IGhhbmRsZUFwcHJvdmFsUmVxdWlyZWQgPSB1c2VDYWxsYmFjayhcbiAgICAoYXBwcm92YWw6IEFwcHJvdmFsUmVxdWVzdCwgYWNjdW11bGF0ZWRDb250ZW50OiBzdHJpbmcpID0+IHtcbiAgICAgIGNvbnN0IHRlbXBNZXNzYWdlSWQgPSBgYW5zd2VyLSR7Y3VycmVudE1lc3NhZ2VJZC5jdXJyZW50fS1zdHJlYW1pbmdgXG4gICAgICByZW1vdmVNZXNzYWdlKHRlbXBNZXNzYWdlSWQpXG5cbiAgICAgIC8vIEFkZCBhIG1lc3NhZ2Ugd2l0aCB0aGUgYXBwcm92YWwgcmVxdWVzdFxuICAgICAgYWRkTWVzc2FnZSh7XG4gICAgICAgIGlkOiBgYXBwcm92YWwtJHthcHByb3ZhbC5vcmlnaW5hbF90aHJlYWRfaWR9YCxcbiAgICAgICAgbWVzc2FnZTogYWNjdW11bGF0ZWRDb250ZW50IHx8ICcnLFxuICAgICAgICBkYXRlOiBuZXcgRGF0ZSgpLFxuICAgICAgICB1c2VyOiB7IGlkOiAnYXNzaXN0YW50JywgbmFtZTogJ0Fzc2lzdGFudCcgfSxcbiAgICAgICAgcm9sZTogQ2hhdEhpc3RvcnlSb2xlLkFTU0lTVEFOVCxcbiAgICAgICAgYXBwcm92YWwsXG4gICAgICAgIGFwcHJvdmFsU3RhdHVzOiAncGVuZGluZycsXG4gICAgICB9KVxuICAgICAgaXNQcm9jZXNzaW5nUmVmLmN1cnJlbnQgPSBmYWxzZVxuICAgIH0sXG4gICAgW2FkZE1lc3NhZ2UsIHJlbW92ZU1lc3NhZ2VdXG4gIClcblxuICBjb25zdCB7XG4gICAgYXNrTWFpYSxcbiAgICBpc0xvYWRpbmc6IHdhaXRpbmdSZXNwb25zZSxcbiAgICBpc1dyaXRpbmcsXG4gICAgbG9hZGluZ01lc3NhZ2UsXG4gICAgc3RvcFN0cmVhbWluZyxcbiAgfSA9IHVzZU9yY2hlc3RyYXRvclN0cmVhbSh7XG4gICAgb25FcnJvcjogaGFuZGxlU3RyZWFtRXJyb3IsXG4gICAgb25TdHJlYW1VcGRhdGU6IGhhbmRsZVN0cmVhbVVwZGF0ZSxcbiAgICBvbkZpbmlzaFN0cmVhbTogaGFuZGxlU3RyZWFtRmluaXNoLFxuICAgIG9uU3RvcDogaGFuZGxlU3RyZWFtU3RvcCxcbiAgICBvbkFwcHJvdmFsUmVxdWlyZWQ6IGhhbmRsZUFwcHJvdmFsUmVxdWlyZWQsXG4gIH0pXG5cbiAgY29uc3QgY3VycmVudFByb2plY3QgPSBwcm9qZWN0XG5cbiAgY29uc3Qgc2VuZE1lc3NhZ2UgPSB1c2VDYWxsYmFjayhcbiAgICBhc3luYyAoXG4gICAgICBtZXNzYWdlOiBzdHJpbmcsXG4gICAgICBhdHRhY2htZW50c09yT3B0aW9ucz86IEF0dGFjaG1lbnRGaWxlW10gfCBTZW5kTWVzc2FnZU9wdGlvbnMsXG4gICAgICBmYXFJZD86IHN0cmluZyxcbiAgICAgIGFnZW50U3VnZ2VzdGlvbklkPzogc3RyaW5nXG4gICAgKSA9PiB7XG4gICAgICBpZiAoaXNQcm9jZXNzaW5nUmVmLmN1cnJlbnQgfHwgd2FpdGluZ1Jlc3BvbnNlIHx8IGxvYWRpbmdNZXNzYWdlcykge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgY29uc3QgeyBhdHRhY2htZW50cywgb3B0aW9ucyB9ID0gbm9ybWFsaXplU2VuZE1lc3NhZ2VBcmdzKGF0dGFjaG1lbnRzT3JPcHRpb25zKVxuXG4gICAgICBpc1Byb2Nlc3NpbmdSZWYuY3VycmVudCA9IHRydWVcbiAgICAgIGNvbnN0IG5ld01lc3NhZ2VJZCA9IHV1aWR2NCgpXG4gICAgICBjdXJyZW50TWVzc2FnZUlkLmN1cnJlbnQgPSBuZXdNZXNzYWdlSWRcbiAgICAgIGN1cnJlbnRVc2VyUXVlc3Rpb24uY3VycmVudCA9IG1lc3NhZ2VcblxuICAgICAgaWYgKCFyZXBvcnRlZEV2ZW50LmN1cnJlbnQpIHtcbiAgICAgICAgZXZlbnQoRVZFTlRTLnBtQWlUeXBlZFRleHQpXG4gICAgICAgIHJlcG9ydGVkRXZlbnQuY3VycmVudCA9IHRydWVcbiAgICAgIH1cblxuICAgICAgLy8gVmVyaWZpY2FyIHNpIGVsIGNvbnRleHRvIGdsb2JhbCBlc3TDoSBkZXNhY3R1YWxpemFkb1xuICAgICAgY29uc3QgbGFzdE1lc3NhZ2VXaXRoUHJvamVjdCA9IG1lc3NhZ2VzUmVmLmN1cnJlbnQuZmlsdGVyKG1zZyA9PiBtc2cucHJvamVjdElkKS5hdCgtMSlcblxuICAgICAgY29uc3QgY3VycmVudEFnZW50RnJvbU1lc3NhZ2VzID0gbWVzc2FnZXNSZWYuY3VycmVudD8uW21lc3NhZ2VzUmVmLmN1cnJlbnQubGVuZ3RoIC0gMV0/LmFnZW50SWRcblxuICAgICAgLy8gTm8gYWdyZWdhciBwcm9qZWN0SWQgYWwgbWVuc2FqZSBkZWwgdXN1YXJpbyAtIHNlIGRldGVybWluYXLDoSBkZXNwdcOpc1xuICAgICAgYWRkTWVzc2FnZSh7XG4gICAgICAgIGlkOiBgcXVlc3Rpb24tJHtjdXJyZW50TWVzc2FnZUlkLmN1cnJlbnR9YCxcbiAgICAgICAgbWVzc2FnZSxcbiAgICAgICAgZGF0ZTogbmV3IERhdGUoKSxcbiAgICAgICAgdXNlcjogY3VycmVudFVzZXIsXG4gICAgICAgIHJvbGU6IENoYXRIaXN0b3J5Um9sZS5VU0VSLFxuICAgICAgICBzb3VyY2VzOiBhdHRhY2htZW50cyxcbiAgICAgIH0pXG5cbiAgICAgIGN1cnJlbnRNZXNzYWdlSWQuY3VycmVudCA9IHV1aWR2NCgpXG4gICAgICBsZXQgZmluYWxNZXNzYWdlID0gbWVzc2FnZVxuXG4gICAgICBpZiAobWVzc2FnZSA9PT0gdCgncWEuaXRlbXMucmVudGFiaWxpZGFkX3Byb3llY3RvJykpIHtcbiAgICAgICAgZmluYWxNZXNzYWdlID0gYEZBUTogJHt0KCdxYS5pdGVtcy5yZW50YWJpbGlkYWRfcHJveWVjdG8nKX0gLSBUaXBvIGRlIHJlbnRhYmlsaWRhZDogJHtcbiAgICAgICAgICBvcHRpb25zLnByb2plY3RDaGFuZ2VkPy5pbmNvbWVUeXBlIHx8IHByb2plY3Q/LmluY29tZVR5cGVcbiAgICAgICAgfWBcbiAgICAgIH1cblxuICAgICAgY29uc3QgaGlzdG9yeSA9IG1lc3NhZ2VzUmVmLmN1cnJlbnQubWFwKGhpc3RvcnlNZXNzYWdlID0+ICh7XG4gICAgICAgIGNvbnRlbnQ6IGhpc3RvcnlNZXNzYWdlLm1lc3NhZ2UsXG4gICAgICAgIHJvbGU6IGhpc3RvcnlNZXNzYWdlLnVzZXIuaWQgPT09IGF1dGhVc2VyLmlkLnRvU3RyaW5nKCkgPyBDaGF0SGlzdG9yeVJvbGUuVVNFUiA6IENoYXRIaXN0b3J5Um9sZS5BU1NJU1RBTlQsXG4gICAgICB9KSlcblxuICAgICAgLy8gVmVyaWZpY2FyIGNvbnNpc3RlbmNpYSBlbnRyZSBjb250ZXh0byBnbG9iYWwgeSDDumx0aW1vIG1lbnNhamVcbiAgICAgIGNvbnN0IGNvbnRleHRQcm9qZWN0SWQgPSBwcm9qZWN0Py5pZFxuICAgICAgY29uc3QgbGFzdE1lc3NhZ2VQcm9qZWN0SWQgPSBsYXN0TWVzc2FnZVdpdGhQcm9qZWN0Py5wcm9qZWN0SWRcblxuICAgICAgbGV0IHByb2plY3RUb1JlcXVlc3Q6IG51bWJlciB8IG51bGwgPSBudWxsXG5cbiAgICAgIC8vIFNpIGhheSDDumx0aW1vIG1lbnNhamUgY29uIHByb2plY3RJZCwgdXNhcmxvIChtw6FzIGNvbmZpYWJsZSlcbiAgICAgIGlmIChsYXN0TWVzc2FnZVByb2plY3RJZCAhPSBudWxsKSB7XG4gICAgICAgIGNvbnN0IHBhcnNlZCA9IE51bWJlcihsYXN0TWVzc2FnZVByb2plY3RJZClcbiAgICAgICAgcHJvamVjdFRvUmVxdWVzdCA9IE51bWJlci5pc0Zpbml0ZShwYXJzZWQpID8gcGFyc2VkIDogbnVsbFxuICAgICAgfVxuICAgICAgLy8gU2kgbm8gaGF5IMO6bHRpbW8gbWVuc2FqZSwgdXNhciBlbCBjb250ZXh0byBnbG9iYWxcbiAgICAgIGVsc2UgaWYgKGNvbnRleHRQcm9qZWN0SWQgIT0gbnVsbCkge1xuICAgICAgICBwcm9qZWN0VG9SZXF1ZXN0ID0gY29udGV4dFByb2plY3RJZFxuICAgICAgfVxuXG4gICAgICBjb25zdCBwcm9qZWN0cyA9IGF3YWl0IGZldGNoUHJvamVjdHMoW3Byb2plY3RUb1JlcXVlc3RdKVxuXG4gICAgICBjb25zdCBwYXlsb2FkRmFxSWQgPSBmYXFJZCA/PyBvcHRpb25zLmZhcUlkXG4gICAgICBjb25zdCBwYXlsb2FkQWdlbnRTdWdnZXN0aW9uSWQgPSBhZ2VudFN1Z2dlc3Rpb25JZCA/PyBvcHRpb25zLmFnZW50U3VnZ2VzdGlvbklkXG5cbiAgICAgIGNvbnN0IHBheWxvYWREYXRhID0ge1xuICAgICAgICBtZXNzYWdlOiBmaW5hbE1lc3NhZ2UsXG4gICAgICAgIGhpc3RvcnksXG4gICAgICAgIHByb2plY3RJZDogcHJvamVjdFRvUmVxdWVzdCxcbiAgICAgICAgbGFuZzogYXV0aFVzZXIubGFuZyxcbiAgICAgICAgdXNlcklkOiBhdXRoVXNlci5pZC50b1N0cmluZygpLFxuICAgICAgICBmaXJzdE5hbWU6IGF1dGhVc2VyLmZpcnN0TmFtZSxcbiAgICAgICAgbGFzdE5hbWU6IGF1dGhVc2VyLmxhc3ROYW1lLFxuICAgICAgICBjb21wYW55SWQ6IGF1dGhVc2VyLmNvbXBhbnlfaWQudG9TdHJpbmcoKSxcbiAgICAgICAgY2hhdElkOiBjdXJyZW50Q2hhdElkLmN1cnJlbnQsXG4gICAgICAgIG1lc3NhZ2VJZDogY3VycmVudE1lc3NhZ2VJZC5jdXJyZW50LFxuICAgICAgICBhZ2VudE5hbWU6IGFnZW50Py5uYW1lIHx8ICcnLFxuICAgICAgICBhZ2VudElkOiBjdXJyZW50QWdlbnRGcm9tTWVzc2FnZXMgfHwgYWdlbnQ/LmlkISxcbiAgICAgICAgaXNXZWJTZWFyY2hBY3RpdmU6IGlzV2ViU2VhcmNoQWN0aXZlUmVmLmN1cnJlbnQsXG4gICAgICAgIGlzRGVlcFNlYXJjaEFjdGl2ZTogaXNEZWVwU2VhcmNoQWN0aXZlUmVmLmN1cnJlbnQsXG4gICAgICAgIC4uLihjbGllbnQ/LmlkXG4gICAgICAgICAgPyB7IGNsaWVudElkOiBjbGllbnQuaWQsIC4uLihjbGllbnQubmFtZSA/IHsgY2xpZW50TmFtZTogY2xpZW50Lm5hbWUgfSA6IHt9KSB9XG4gICAgICAgICAgOiBwcm9qZWN0Py5jbGllbnQ/LmlkXG4gICAgICAgICAgICA/IHsgY2xpZW50SWQ6IHByb2plY3QuY2xpZW50LmlkLCAuLi4ocHJvamVjdC5jbGllbnQubmFtZSA/IHsgY2xpZW50TmFtZTogcHJvamVjdC5jbGllbnQubmFtZSB9IDoge30pIH1cbiAgICAgICAgICAgIDoge30pLFxuICAgICAgICAuLi4ocHJvamVjdHM/Lmxlbmd0aCA/IHsgcHJvamVjdE5hbWU6IHByb2plY3RzWzBdLm5hbWUgfSA6IHt9KSxcbiAgICAgICAgLi4uKGF0dGFjaG1lbnRzLmxlbmd0aCA+IDAgPyB7IGF0dGFjaG1lbnRzIH0gOiB7fSksXG4gICAgICAgIC4uLihwYXlsb2FkRmFxSWQgPyB7IGZhcUlkOiBwYXlsb2FkRmFxSWQgfSA6IHt9KSxcbiAgICAgICAgLi4uKHBheWxvYWRBZ2VudFN1Z2dlc3Rpb25JZCA/IHsgYWdlbnRTdWdnZXN0aW9uSWQ6IHBheWxvYWRBZ2VudFN1Z2dlc3Rpb25JZCB9IDoge30pLFxuICAgICAgICAuLi4oYWdlbnQ/LmVudGl0eSAhPSBudWxsID8geyBhZ2VudEVudGl0eTogYWdlbnQuZW50aXR5IH0gOiB7fSksXG4gICAgICB9XG5cbiAgICAgIGFza01haWEocGF5bG9hZERhdGEpXG4gICAgfSxcbiAgICBbXG4gICAgICBhZGRNZXNzYWdlLFxuICAgICAgZXZlbnQsXG4gICAgICBhc2tNYWlhLFxuICAgICAgcHJvamVjdCxcbiAgICAgIGNsaWVudCxcbiAgICAgIGF1dGhVc2VyLFxuICAgICAgYWdlbnQsXG4gICAgICB0LFxuICAgICAgd2FpdGluZ1Jlc3BvbnNlLFxuICAgICAgbG9hZGluZ01lc3NhZ2VzLFxuICAgICAgaXNXZWJTZWFyY2hBY3RpdmUsXG4gICAgICBpc0RlZXBTZWFyY2hBY3RpdmUsXG4gICAgXVxuICApXG5cbiAgY29uc3QgY2hhbmdlUHJvamVjdCA9IHVzZUNhbGxiYWNrKFxuICAgIChvcHRpb246IFByb2plY3QpID0+IHtcbiAgICAgIGlmICghY3VycmVudFVzZXJRdWVzdGlvbi5jdXJyZW50KSByZXR1cm5cblxuICAgICAgaWYgKG9wdGlvbi5pZCAhPT0gcHJvamVjdD8uaWQpIHtcbiAgICAgICAgc2V0UHJvamVjdChvcHRpb24pXG4gICAgICB9XG5cbiAgICAgIGlmIChwcm9qZWN0ICYmIGN1cnJlbnRVc2VyUXVlc3Rpb24uY3VycmVudCkge1xuICAgICAgICBjb25zdCBoaXN0b3J5ID0gbWVzc2FnZXNSZWYuY3VycmVudC5tYXAoaGlzdG9yeU1lc3NhZ2UgPT4gKHtcbiAgICAgICAgICBjb250ZW50OiBoaXN0b3J5TWVzc2FnZS5tZXNzYWdlLFxuICAgICAgICAgIHJvbGU6IGhpc3RvcnlNZXNzYWdlLnVzZXIuaWQgPT09IGF1dGhVc2VyLmlkLnRvU3RyaW5nKCkgPyBDaGF0SGlzdG9yeVJvbGUuVVNFUiA6IENoYXRIaXN0b3J5Um9sZS5BU1NJU1RBTlQsXG4gICAgICAgIH0pKVxuXG4gICAgICAgIGFza01haWEoe1xuICAgICAgICAgIG1lc3NhZ2U6IGN1cnJlbnRVc2VyUXVlc3Rpb24uY3VycmVudCxcbiAgICAgICAgICBoaXN0b3J5LFxuICAgICAgICAgIHByb2plY3RJZDogb3B0aW9uLmlkLFxuICAgICAgICAgIGxhbmc6IGF1dGhVc2VyLmxhbmcsXG4gICAgICAgICAgdXNlcklkOiBhdXRoVXNlci5pZC50b1N0cmluZygpLFxuICAgICAgICAgIGZpcnN0TmFtZTogYXV0aFVzZXIuZmlyc3ROYW1lLFxuICAgICAgICAgIGxhc3ROYW1lOiBhdXRoVXNlci5sYXN0TmFtZSxcbiAgICAgICAgICBjb21wYW55SWQ6IGF1dGhVc2VyLmNvbXBhbnlfaWQudG9TdHJpbmcoKSxcbiAgICAgICAgICBjaGF0SWQ6IGN1cnJlbnRDaGF0SWQuY3VycmVudCxcbiAgICAgICAgICBtZXNzYWdlSWQ6IGN1cnJlbnRNZXNzYWdlSWQuY3VycmVudCxcbiAgICAgICAgICBhZ2VudE5hbWU6IGFnZW50Py5uYW1lIHx8ICcnLFxuICAgICAgICAgIGFnZW50SWQ6IGFnZW50Py5pZCB8fCAnJyxcbiAgICAgICAgICBpc1dlYlNlYXJjaEFjdGl2ZTogaXNXZWJTZWFyY2hBY3RpdmVSZWYuY3VycmVudCxcbiAgICAgICAgICBpc0RlZXBTZWFyY2hBY3RpdmU6IGlzRGVlcFNlYXJjaEFjdGl2ZVJlZi5jdXJyZW50LFxuICAgICAgICAgIC4uLihhZ2VudD8uZW50aXR5ICE9IG51bGwgPyB7IGFnZW50RW50aXR5OiBhZ2VudC5lbnRpdHkgfSA6IHt9KSxcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9LFxuICAgIFtwcm9qZWN0LCBzZXRQcm9qZWN0LCBhc2tNYWlhLCBhdXRoVXNlciwgaXNXZWJTZWFyY2hBY3RpdmUsIGFnZW50XVxuICApXG5cbiAgY29uc3QgaGFuZGxlRmVlZGJhY2sgPSB1c2VDYWxsYmFjayhhc3luYyAoZmVlZGJhY2tQcm9wOiBGZWVkYmFjaywgY2hhdE1lc3NhZ2VJZDogc3RyaW5nKSA9PiB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBtYWlhLkNoYXRzLndhc0hlbHBmdWxDaGF0KGNoYXRNZXNzYWdlSWQsIGZlZWRiYWNrUHJvcCA9PT0gRmVlZGJhY2suVEhVTUJTX1VQKVxuICAgIGlmIChyZXNwb25zZSkge1xuICAgICAgbWVzc2FnZXNSZWYuY3VycmVudCA9IG1lc3NhZ2VzUmVmLmN1cnJlbnQubWFwKG1lc3NhZ2UgPT4ge1xuICAgICAgICBpZiAobWVzc2FnZS5pZCA9PT0gY2hhdE1lc3NhZ2VJZCAmJiBtZXNzYWdlLnJvbGUgPT09ICdhc3Npc3RhbnQnKSB7XG4gICAgICAgICAgcmV0dXJuIHsgLi4ubWVzc2FnZSwgd2FzSGVscGZ1bDogZmVlZGJhY2tQcm9wID09PSBGZWVkYmFjay5USFVNQlNfVVAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtZXNzYWdlXG4gICAgICB9KVxuICAgIH1cbiAgfSwgW10pXG5cbiAgY29uc3QgaGFuZGxlQXBwcm92YWxEZWNpc2lvbiA9IHVzZUNhbGxiYWNrKFxuICAgIGFzeW5jIChcbiAgICAgIHRocmVhZElkczogc3RyaW5nW10sXG4gICAgICBkZWNpc2lvbjogJ2FwcHJvdmUnIHwgJ3JlamVjdCcsXG4gICAgICBlZGl0ZWRBY3Rpb25zPzogQXJyYXk8eyB0b29sX25hbWU6IHN0cmluZzsgYXJnczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfT5cbiAgICApID0+IHtcbiAgICAgIGlmICghdGhyZWFkSWRzPy5sZW5ndGgpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignTm8gdGhyZWFkX2lkcyBwcm92aWRlZCBmb3IgYXBwcm92YWwgZGVjaXNpb24nKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgLy8gQnVzY2FyIGVsIG1lbnNhamUgcXVlIGNvbnRpZW5lIGFsZ3VubyBkZSBlc3RvcyB0aHJlYWRJZHMgZW4gc3VzIHBlbmRpbmdfYWN0aW9uc1xuICAgICAgY29uc3QgbWVzc2FnZVdpdGhBcHByb3ZhbCA9IG1lc3NhZ2VzUmVmLmN1cnJlbnQuZmluZChtID0+XG4gICAgICAgIG0uYXBwcm92YWw/LnBlbmRpbmdfYWN0aW9ucz8uc29tZShhY3Rpb24gPT4gdGhyZWFkSWRzLmluY2x1ZGVzKGFjdGlvbi50aHJlYWRfaWQpKVxuICAgICAgKVxuXG4gICAgICBpZiAoIW1lc3NhZ2VXaXRoQXBwcm92YWwgfHwgIW1lc3NhZ2VXaXRoQXBwcm92YWwuYXBwcm92YWwpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignTm8gc2UgZW5jb250csOzIG1lbnNhamUgY29uIGFwcHJvdmFsIHBhcmEgdGhyZWFkX2lkczonLCB0aHJlYWRJZHMpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBjb25zdCB7IGFwcHJvdmFsIH0gPSBtZXNzYWdlV2l0aEFwcHJvdmFsXG4gICAgICBjb25zdCBtZXNzYWdlSWQgPSBtZXNzYWdlV2l0aEFwcHJvdmFsLmlkXG4gICAgICAvLyBVc2UgZmlyc3QgdGhyZWFkSWQgYXMgdGhlIGxvYWRpbmcga2V5XG4gICAgICBjb25zdCBsb2FkaW5nS2V5ID0gdGhyZWFkSWRzWzBdXG4gICAgICAvLyBVcGRhdGUgbWVzc2FnZSBzdGF0dXMgaW1tZWRpYXRlbHlcbiAgICAgIG1lc3NhZ2VzUmVmLmN1cnJlbnQgPSBtZXNzYWdlc1JlZi5jdXJyZW50Lm1hcChtZXNzYWdlID0+IHtcbiAgICAgICAgaWYgKG1lc3NhZ2UuaWQgPT09IG1lc3NhZ2VJZCkge1xuICAgICAgICAgIGNvbnN0IG5ld1N0YXR1cyA9IGRlY2lzaW9uID09PSAnYXBwcm92ZScgPyAnYXBwcm92ZWQnIDogJ3JlamVjdGVkJ1xuICAgICAgICAgIHJldHVybiB7IC4uLm1lc3NhZ2UsIGFwcHJvdmFsU3RhdHVzOiBuZXdTdGF0dXMgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtZXNzYWdlXG4gICAgICB9KVxuXG4gICAgICAvLyBUcmlnZ2VyIHJlLXJlbmRlclxuICAgICAgY29uc3QgZXhpc3RpbmdNZXNzYWdlID0gbWVzc2FnZXNSZWYuY3VycmVudC5maW5kKG0gPT4gbS5pZCA9PT0gbWVzc2FnZUlkKVxuICAgICAgaWYgKGV4aXN0aW5nTWVzc2FnZSkge1xuICAgICAgICBjb25zdCBuZXdTdGF0dXMgPSBkZWNpc2lvbiA9PT0gJ2FwcHJvdmUnID8gJ2FwcHJvdmVkJyA6ICdyZWplY3RlZCdcbiAgICAgICAgYWRkTWVzc2FnZSh7IC4uLmV4aXN0aW5nTWVzc2FnZSwgYXBwcm92YWxTdGF0dXM6IG5ld1N0YXR1cyB9KVxuICAgICAgfVxuXG4gICAgICAvLyBDYWxsIGNvbnRpbnVlLXRocmVhZCBlbmRwb2ludCB3aXRoIEFMTCB0aHJlYWRfaWRzIGluIGEgc2luZ2xlIHJlcXVlc3RcbiAgICAgIGlzUHJvY2Vzc2luZ1JlZi5jdXJyZW50ID0gdHJ1ZVxuICAgICAgY3VycmVudE1lc3NhZ2VJZC5jdXJyZW50ID0gdXVpZHY0KClcblxuICAgICAgLy8gQWRkIGxvYWRpbmdcbiAgICAgIHNldEFjdGl2ZUxvYWRpbmdzKHByZXYgPT4gKHtcbiAgICAgICAgLi4ucHJldixcbiAgICAgICAgW2xvYWRpbmdLZXldOiB0KCdjaGF0LnByb2Nlc3NpbmcnKSxcbiAgICAgIH0pKVxuXG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IG1haWEuT3JjaGVzdHJhdG9yLmNvbnRpbnVlVGhyZWFkKHtcbiAgICAgICAgICB0aHJlYWRJZHMsIC8vIFNlbmQgYWxsIGFjdGlvbiB0aHJlYWRfaWRzIGF0IG9uY2VcbiAgICAgICAgICBzZXNzaW9uSWQ6IGFwcHJvdmFsLnNlc3Npb25faWQsXG4gICAgICAgICAgZGVjaXNpb246IGVkaXRlZEFjdGlvbnMgPyAnZWRpdCcgOiBkZWNpc2lvbixcbiAgICAgICAgICBlZGl0ZWRBY3Rpb25zLFxuICAgICAgICAgIGFnZW50SWQ6IGFnZW50Py5pZCB8fCAnJyxcbiAgICAgICAgICBsYW5nOiBhdXRoVXNlci5sYW5nLFxuICAgICAgICB9KVxuXG4gICAgICAgIGlmICghcmVzcG9uc2Uub2spIHtcbiAgICAgICAgICBoYW5kbGVTdHJlYW1FcnJvcigpXG4gICAgICAgICAgc2V0QWN0aXZlTG9hZGluZ3MocHJldiA9PiB7XG4gICAgICAgICAgICBjb25zdCBuZXdMb2FkaW5ncyA9IHsgLi4ucHJldiB9XG4gICAgICAgICAgICBkZWxldGUgbmV3TG9hZGluZ3NbbG9hZGluZ0tleV1cbiAgICAgICAgICAgIHJldHVybiBuZXdMb2FkaW5nc1xuICAgICAgICAgIH0pXG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cblxuICAgICAgICAvLyBQcm9jZXNzIFNTRSBzdHJlYW1cbiAgICAgICAgYXdhaXQgcHJvY2Vzc1NTRVN0cmVhbShyZXNwb25zZSwgbG9hZGluZ0tleSwge1xuICAgICAgICAgIG9uVG9rZW46IChjb250ZW50OiBzdHJpbmcpID0+IHtcbiAgICAgICAgICAgIGhhbmRsZVN0cmVhbVVwZGF0ZShjb250ZW50LCBudWxsLCAnJylcbiAgICAgICAgICB9LFxuICAgICAgICAgIG9uTm9kZTogKG1lc3NhZ2U6IHN0cmluZywgY3VycmVudFRocmVhZElkOiBzdHJpbmcpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGRpc3BsYXlNc2cgPVxuICAgICAgICAgICAgICBtZXNzYWdlLmluY2x1ZGVzKCdjcmVhdGVfdGFzaycpIHx8IG1lc3NhZ2UuaW5jbHVkZXMoJ2Nsb25lX3Rhc2snKSA/IG1lc3NhZ2UgOiB0KCdjaGF0LmV4ZWN1dGluZ0FjdGlvbicpXG4gICAgICAgICAgICBzZXRBY3RpdmVMb2FkaW5ncyhwcmV2ID0+ICh7XG4gICAgICAgICAgICAgIC4uLnByZXYsXG4gICAgICAgICAgICAgIFtjdXJyZW50VGhyZWFkSWRdOiBkaXNwbGF5TXNnLFxuICAgICAgICAgICAgfSkpXG4gICAgICAgICAgfSxcbiAgICAgICAgICBvbkNvbXBsZXRlOiAoXG4gICAgICAgICAgICBmaW5hbENvbnRlbnQ6IHN0cmluZyxcbiAgICAgICAgICAgIHNvdXJjZXM6IGFueSxcbiAgICAgICAgICAgIG1lbW9yeVNlc3Npb25JZDogc3RyaW5nLFxuICAgICAgICAgICAgY3VycmVudFRocmVhZElkOiBzdHJpbmcsXG4gICAgICAgICAgICBzdWdnZXN0aW9ucz86IHN0cmluZ1tdIHwgbnVsbCxcbiAgICAgICAgICAgIGFnZW50SWQ/OiBzdHJpbmcgfCBudWxsXG4gICAgICAgICAgKSA9PiB7XG4gICAgICAgICAgICBoYW5kbGVTdHJlYW1GaW5pc2goZmluYWxDb250ZW50LCBzb3VyY2VzLCBtZW1vcnlTZXNzaW9uSWQsIHN1Z2dlc3Rpb25zLCBhZ2VudElkKVxuICAgICAgICAgICAgc2V0QWN0aXZlTG9hZGluZ3MocHJldiA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IG5ld0xvYWRpbmdzID0geyAuLi5wcmV2IH1cbiAgICAgICAgICAgICAgZGVsZXRlIG5ld0xvYWRpbmdzW2N1cnJlbnRUaHJlYWRJZF1cbiAgICAgICAgICAgICAgcmV0dXJuIG5ld0xvYWRpbmdzXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH0sXG4gICAgICAgICAgb25BcHByb3ZhbFJlcXVpcmVkOiAoYXBwcm92YWxQYXlsb2FkOiBhbnksIGFjY3VtdWxhdGVkQ29udGVudDogc3RyaW5nLCBjdXJyZW50VGhyZWFkSWQ6IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgLy8gTmV3IEhJVEwgaW50ZXJydXB0aW9uIGRldGVjdGVkIGFmdGVyIHJlc3VtZSAoY2hhaW5lZCBhY3Rpb25zKVxuICAgICAgICAgICAgc2V0QWN0aXZlTG9hZGluZ3MocHJldiA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IG5ld0xvYWRpbmdzID0geyAuLi5wcmV2IH1cbiAgICAgICAgICAgICAgZGVsZXRlIG5ld0xvYWRpbmdzW2N1cnJlbnRUaHJlYWRJZF1cbiAgICAgICAgICAgICAgcmV0dXJuIG5ld0xvYWRpbmdzXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgaGFuZGxlQXBwcm92YWxSZXF1aXJlZChhcHByb3ZhbFBheWxvYWQgYXMgQXBwcm92YWxSZXF1ZXN0LCBhY2N1bXVsYXRlZENvbnRlbnQpXG4gICAgICAgICAgfSxcbiAgICAgICAgICBvbkVycm9yOiAoZXJyb3I6IGFueSwgY3VycmVudFRocmVhZElkOiBzdHJpbmcpID0+IHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1NTRSBFcnJvcjonLCBlcnJvcilcbiAgICAgICAgICAgIGhhbmRsZVN0cmVhbUVycm9yKClcbiAgICAgICAgICAgIHNldEFjdGl2ZUxvYWRpbmdzKHByZXYgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBuZXdMb2FkaW5ncyA9IHsgLi4ucHJldiB9XG4gICAgICAgICAgICAgIGRlbGV0ZSBuZXdMb2FkaW5nc1tjdXJyZW50VGhyZWFkSWRdXG4gICAgICAgICAgICAgIHJldHVybiBuZXdMb2FkaW5nc1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9LFxuICAgICAgICB9KVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgaGFuZGxlU3RyZWFtRXJyb3IoKVxuICAgICAgICBzZXRBY3RpdmVMb2FkaW5ncyhwcmV2ID0+IHtcbiAgICAgICAgICBjb25zdCBuZXdMb2FkaW5ncyA9IHsgLi4ucHJldiB9XG4gICAgICAgICAgZGVsZXRlIG5ld0xvYWRpbmdzW2xvYWRpbmdLZXldXG4gICAgICAgICAgcmV0dXJuIG5ld0xvYWRpbmdzXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfSxcbiAgICBbYXV0aFVzZXIsIGFnZW50LCBhZGRNZXNzYWdlLCBoYW5kbGVTdHJlYW1FcnJvciwgaGFuZGxlU3RyZWFtVXBkYXRlLCBoYW5kbGVTdHJlYW1GaW5pc2gsIGhhbmRsZUFwcHJvdmFsUmVxdWlyZWRdXG4gIClcblxuICBjb25zdCBpbml0aWFsaXplQ2hhdCA9IHVzZUNhbGxiYWNrKGFzeW5jICgpID0+IHtcbiAgICBpZiAoIWZpcnN0VGltZVJlZi5jdXJyZW50KSB7XG4gICAgICBmaXJzdFRpbWVSZWYuY3VycmVudCA9IHRydWVcbiAgICB9XG4gICAgaWYgKGluaXRpYWxDaGF0SWQpIHtcbiAgICAgIGF3YWl0IGxvYWRNZXNzYWdlcygpXG4gICAgfSBlbHNlIGlmICh1c2VySW5pdGlhbE1lc3NhZ2UpIHtcbiAgICAgIGNvbnN0IGhhc0luaXRpYWxNZXNzYWdlID0gQm9vbGVhbih1c2VySW5pdGlhbE1lc3NhZ2UubWVzc2FnZT8udHJpbSgpKVxuICAgICAgY29uc3QgaGFzSW5pdGlhbEF0dGFjaG1lbnRzID0gQm9vbGVhbih1c2VySW5pdGlhbE1lc3NhZ2UuYXR0YWNobWVudHM/Lmxlbmd0aClcbiAgICAgIGNvbnN0IGhhc0luaXRpYWxGYXEgPSBCb29sZWFuKHVzZXJJbml0aWFsTWVzc2FnZS5mYXFJZClcblxuICAgICAgaWYgKCFoYXNJbml0aWFsTWVzc2FnZSAmJiAhaGFzSW5pdGlhbEF0dGFjaG1lbnRzICYmICFoYXNJbml0aWFsRmFxKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBjb25zdCBoaXN0b3J5ID0gbWVzc2FnZXNSZWYuY3VycmVudC5tYXAoaGlzdG9yeU1lc3NhZ2UgPT4gKHtcbiAgICAgICAgY29udGVudDogaGlzdG9yeU1lc3NhZ2UubWVzc2FnZSxcbiAgICAgICAgcm9sZTogaGlzdG9yeU1lc3NhZ2UudXNlci5pZCA9PT0gYXV0aFVzZXIuaWQudG9TdHJpbmcoKSA/IENoYXRIaXN0b3J5Um9sZS5VU0VSIDogQ2hhdEhpc3RvcnlSb2xlLkFTU0lTVEFOVCxcbiAgICAgIH0pKVxuXG4gICAgICBhc2tNYWlhKHtcbiAgICAgICAgbWVzc2FnZTogdXNlckluaXRpYWxNZXNzYWdlLm1lc3NhZ2UsXG4gICAgICAgIGhpc3RvcnksXG4gICAgICAgIHByb2plY3RJZDogcHJvamVjdD8uaWQgfHwgbnVsbCxcbiAgICAgICAgbGFuZzogYXV0aFVzZXIubGFuZyxcbiAgICAgICAgdXNlcklkOiBhdXRoVXNlci5pZC50b1N0cmluZygpLFxuICAgICAgICBmaXJzdE5hbWU6IGF1dGhVc2VyLmZpcnN0TmFtZSxcbiAgICAgICAgbGFzdE5hbWU6IGF1dGhVc2VyLmxhc3ROYW1lLFxuICAgICAgICBjb21wYW55SWQ6IGF1dGhVc2VyLmNvbXBhbnlfaWQudG9TdHJpbmcoKSxcbiAgICAgICAgY2hhdElkOiBjdXJyZW50Q2hhdElkLmN1cnJlbnQsXG4gICAgICAgIG1lc3NhZ2VJZDogY3VycmVudE1lc3NhZ2VJZC5jdXJyZW50LFxuICAgICAgICBhZ2VudE5hbWU6IGFnZW50Py5uYW1lISxcbiAgICAgICAgYWdlbnRJZDogYWdlbnQ/LmlkISxcbiAgICAgICAgaXNXZWJTZWFyY2hBY3RpdmU6IGlzV2ViU2VhcmNoQWN0aXZlUmVmLmN1cnJlbnQsXG4gICAgICAgIGlzRGVlcFNlYXJjaEFjdGl2ZTogaXNEZWVwU2VhcmNoQWN0aXZlUmVmLmN1cnJlbnQsXG4gICAgICAgIC4uLihjbGllbnQ/LmlkID8geyBjbGllbnRJZDogY2xpZW50LmlkIH0gOiBwcm9qZWN0Py5jbGllbnQ/LmlkID8geyBjbGllbnRJZDogcHJvamVjdC5jbGllbnQuaWQgfSA6IHt9KSxcbiAgICAgICAgLi4uKHByb2plY3Q/Lm5hbWUgPyB7IHByb2plY3ROYW1lOiBwcm9qZWN0Lm5hbWUgfSA6IHt9KSxcbiAgICAgICAgLi4uKHByb2plY3Q/LmNsaWVudD8ubmFtZVxuICAgICAgICAgID8geyBjbGllbnROYW1lOiBwcm9qZWN0LmNsaWVudC5uYW1lIH1cbiAgICAgICAgICA6IGNsaWVudD8ubmFtZVxuICAgICAgICAgICAgPyB7IGNsaWVudE5hbWU6IGNsaWVudC5uYW1lIH1cbiAgICAgICAgICAgIDoge30pLFxuICAgICAgICAuLi4odXNlckluaXRpYWxNZXNzYWdlLmF0dGFjaG1lbnRzID8geyBhdHRhY2htZW50czogdXNlckluaXRpYWxNZXNzYWdlLmF0dGFjaG1lbnRzIH0gOiB7fSksXG4gICAgICAgIC4uLih1c2VySW5pdGlhbE1lc3NhZ2UuZmFxSWQgPyB7IGZhcUlkOiB1c2VySW5pdGlhbE1lc3NhZ2UuZmFxSWQgfSA6IHt9KSxcbiAgICAgICAgLi4uKHVzZXJJbml0aWFsTWVzc2FnZS5hZ2VudFN1Z2dlc3Rpb25JZCA/IHsgYWdlbnRTdWdnZXN0aW9uSWQ6IHVzZXJJbml0aWFsTWVzc2FnZS5hZ2VudFN1Z2dlc3Rpb25JZCB9IDoge30pLFxuICAgICAgICAuLi4oYWdlbnQ/LmVudGl0eSAhPSBudWxsID8geyBhZ2VudEVudGl0eTogYWdlbnQuZW50aXR5IH0gOiB7fSksXG4gICAgICB9KVxuICAgIH1cbiAgfSwgW1xuICAgIGluaXRpYWxDaGF0SWQsXG4gICAgdXNlckluaXRpYWxNZXNzYWdlLFxuICAgIHByb2plY3QsXG4gICAgY2xpZW50LFxuICAgIGF1dGhVc2VyLFxuICAgIGFnZW50LFxuICAgIGFza01haWEsXG4gICAgaXNXZWJTZWFyY2hBY3RpdmUsXG4gICAgaXNEZWVwU2VhcmNoQWN0aXZlLFxuICBdKVxuXG4gIGNvbnN0IHJlc2V0Q2hhdCA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBjdXJyZW50TWVzc2FnZUlkLmN1cnJlbnQgPSB1dWlkdjQoKVxuICAgIGN1cnJlbnRVc2VyUXVlc3Rpb24uY3VycmVudCA9IG51bGxcbiAgICBjdXJyZW50Q2hhdElkLmN1cnJlbnQgPSB1dWlkdjQoKVxuICAgIHJlcG9ydGVkRXZlbnQuY3VycmVudCA9IGZhbHNlXG4gIH0sIFtdKVxuXG4gIGNvbnN0IHN0b3BHZW5lcmF0aW9uID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIHN0b3BTdHJlYW1pbmcoKVxuICAgIGlzUHJvY2Vzc2luZ1JlZi5jdXJyZW50ID0gZmFsc2VcbiAgfSwgW3N0b3BTdHJlYW1pbmddKVxuXG4gIHJldHVybiB7XG4gICAgbWVzc2FnZXMsXG4gICAgbG9hZGluZ01lc3NhZ2VzLFxuICAgIGlzTG9hZGluZ01vcmVNZXNzYWdlcyxcbiAgICB3YWl0aW5nUmVzcG9uc2UsXG4gICAgaXNXcml0aW5nLFxuICAgIGxvYWRpbmdNZXNzYWdlLFxuICAgIGFjdGl2ZUxvYWRpbmdzLFxuICAgIGN1cnJlbnRQcm9qZWN0LFxuICAgIGN1cnJlbnRDaGF0SWQ6IGN1cnJlbnRDaGF0SWQuY3VycmVudCxcbiAgICBjdXJyZW50TWVzc2FnZUlkOiBjdXJyZW50TWVzc2FnZUlkLmN1cnJlbnQsXG5cbiAgICBzZW5kTWVzc2FnZSxcbiAgICBjaGFuZ2VQcm9qZWN0LFxuICAgIGhhbmRsZUZlZWRiYWNrLFxuICAgIGhhbmRsZUFwcHJvdmFsRGVjaXNpb24sXG4gICAgaGFuZGxlU2Nyb2xsLFxuICAgIGluaXRpYWxpemVDaGF0LFxuICAgIHJlc2V0Q2hhdCxcbiAgICBzdG9wR2VuZXJhdGlvbixcblxuICAgIGlzRGlzYWJsZWQ6IHdhaXRpbmdSZXNwb25zZSB8fCBsb2FkaW5nTWVzc2FnZXMsXG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVNBLFdBQVcsRUFBRUMsTUFBTSxFQUFFQyxTQUFTLEVBQUVDLFFBQVEsUUFBUSxPQUFPO0FBQ2hFLFNBQVNDLEVBQUUsSUFBSUMsTUFBTSxRQUFRLE1BQU07QUFDbkMsU0FBU0MsZUFBZSxRQUFRLG9CQUFvQjtBQUNwRCxTQUFTQyxxQkFBcUIsUUFBUSwwQkFBMEI7QUFDaEUsU0FBU0MsSUFBSSxRQUFRLFNBQVM7QUFHOUIsU0FBU0MsT0FBTyxRQUFpQix3QkFBd0I7QUFDekQsU0FBU0MsZ0JBQWdCLFFBQVEsOEJBQThCO0FBQy9ELFNBQVNDLE1BQU0sRUFBRUMsUUFBUSxRQUFRLGFBQWE7QUFDOUMsT0FBT0MsSUFBSSxNQUFNLHFCQUFxQjtBQUN0QyxTQUFTQyxRQUFRLFFBQVEsNERBQTREO0FBQ3JGLFNBQXVDQyxlQUFlLFFBQXdDLGtCQUFrQjtBQUdoSCxTQUFTQyxXQUFXLFFBQVEsZ0JBQWdCO0FBQzVDLFNBQVNDLGlCQUFpQixRQUFRLHNCQUFzQjtBQUN4RCxTQUFTQyxzQkFBc0IsUUFBUSwwQkFBMEI7QUFDakUsU0FBU0MsZ0JBQWdCLFFBQVEsNkNBQTZDO0FBQzlFLFNBQVNDLHVCQUF1QixFQUFFQyx5QkFBeUIsUUFBUSwyQkFBMkI7QUFJOUYsSUFBTUMsd0JBQXdCLEdBQUcsU0FBM0JBLHdCQUF3QkEsQ0FBSUMsb0JBQTJDLEVBQUs7RUFBQSxJQUFBQyxvQkFBQTtFQUNoRixJQUFJQyxLQUFLLENBQUNDLE9BQU8sQ0FBQ0gsb0JBQW9CLENBQUMsRUFBRTtJQUN2QyxPQUFPO01BQUVJLFdBQVcsRUFBRUosb0JBQW9CO01BQUVLLE9BQU8sRUFBRSxDQUFDO0lBQXdCLENBQUM7RUFDakY7RUFFQSxJQUFNQSxPQUEyQixHQUFHTCxvQkFBb0IsYUFBcEJBLG9CQUFvQixjQUFwQkEsb0JBQW9CLEdBQUksQ0FBQyxDQUFDO0VBQzlELE9BQU87SUFBRUksV0FBVyxHQUFBSCxvQkFBQSxHQUFFSSxPQUFPLENBQUNELFdBQVcsY0FBQUgsb0JBQUEsY0FBQUEsb0JBQUEsR0FBSSxFQUFFO0lBQUVJLE9BQU8sRUFBUEE7RUFBUSxDQUFDO0FBQzVELENBQUM7O0FBRUQ7QUFDQSxTQUFTQyxzQ0FBc0NBLENBQUNDLGNBQStCLEVBQVk7RUFDekYsSUFBTUMsR0FBYSxHQUFHLEVBQUU7RUFDeEJELGNBQWMsQ0FBQ0UsT0FBTyxDQUFDLFVBQUFDLE1BQU0sRUFBSTtJQUMvQixJQUFJLENBQUNBLE1BQU0sSUFBSUMsT0FBQSxDQUFPRCxNQUFNLE1BQUssUUFBUSxFQUFFO0lBQzNDLElBQU1FLElBQUksR0FBR0YsTUFBTSxDQUFDRyxTQUFTO0lBQzdCLElBQUksRUFBRUQsSUFBSSxJQUFJRCxPQUFBLENBQU9DLElBQUksTUFBSyxRQUFRLElBQUksQ0FBQ1YsS0FBSyxDQUFDQyxPQUFPLENBQUNTLElBQUksQ0FBQyxDQUFDLEVBQUU7SUFDakUsSUFBTUUsR0FBRyxHQUFHRixJQUErQjtJQUMzQyxJQUFJRixNQUFNLENBQUNLLFNBQVMsS0FBSyxhQUFhLEVBQUU7TUFBQSxJQUFBQyxZQUFBO01BQ3RDLElBQU1DLEdBQUcsSUFBQUQsWUFBQSxHQUFHRixHQUFHLENBQUNJLE9BQU8sY0FBQUYsWUFBQSxjQUFBQSxZQUFBLEdBQUlGLEdBQUcsQ0FBQ0ssRUFBRTtNQUNqQyxJQUFJRixHQUFHLElBQUksSUFBSSxFQUFFO1FBQ2YsSUFBTUcsQ0FBQyxHQUFHQyxRQUFRLENBQUNDLE1BQU0sQ0FBQ0wsR0FBRyxDQUFDLEVBQUUsRUFBRSxDQUFDO1FBQ25DLElBQUksQ0FBQ00sTUFBTSxDQUFDQyxLQUFLLENBQUNKLENBQUMsQ0FBQyxFQUFFWixHQUFHLENBQUNpQixJQUFJLENBQUNMLENBQUMsQ0FBQztNQUNuQztJQUNGO0lBQ0EsSUFBSVYsTUFBTSxDQUFDSyxTQUFTLEtBQUssb0JBQW9CLEVBQUU7TUFDN0MsSUFBTVcsSUFBSSxHQUFHWixHQUFHLENBQUNhLFFBQVE7TUFDekIsSUFBSXpCLEtBQUssQ0FBQ0MsT0FBTyxDQUFDdUIsSUFBSSxDQUFDLEVBQUU7UUFDdkJBLElBQUksQ0FBQ2pCLE9BQU8sQ0FBQyxVQUFBbUIsR0FBRyxFQUFJO1VBQ2xCLElBQU1SLENBQUMsR0FBR0MsUUFBUSxDQUFDQyxNQUFNLENBQUNNLEdBQUcsQ0FBQyxFQUFFLEVBQUUsQ0FBQztVQUNuQyxJQUFJLENBQUNMLE1BQU0sQ0FBQ0MsS0FBSyxDQUFDSixDQUFDLENBQUMsRUFBRVosR0FBRyxDQUFDaUIsSUFBSSxDQUFDTCxDQUFDLENBQUM7UUFDbkMsQ0FBQyxDQUFDO01BQ0o7SUFDRjtFQUNGLENBQUMsQ0FBQztFQUNGLE9BQU9aLEdBQUc7QUFDWjtBQUVBLFNBQVNxQix5Q0FBeUNBLENBQUN0QixjQUErQixFQUFpQjtFQUFBLElBQUF1QixhQUFBO0VBQ2pHLElBQU1DLFVBQVUsR0FBR3hCLGNBQWMsQ0FBQ3lCLElBQUksQ0FBQyxVQUFBQyxDQUFDO0lBQUEsT0FBSSxDQUFDQSxDQUFDLENBQUNsQixTQUFTLElBQUksRUFBRSxFQUFFbUIsV0FBVyxDQUFDLENBQUMsS0FBSyxZQUFZO0VBQUEsRUFBQztFQUMvRixJQUNFLENBQUNILFVBQVUsSUFDWCxDQUFDQSxVQUFVLENBQUNsQixTQUFTLElBQ3JCRixPQUFBLENBQU9vQixVQUFVLENBQUNsQixTQUFTLE1BQUssUUFBUSxJQUN4Q1gsS0FBSyxDQUFDQyxPQUFPLENBQUM0QixVQUFVLENBQUNsQixTQUFTLENBQUMsRUFDbkM7SUFDQSxPQUFPLElBQUk7RUFDYjtFQUNBLElBQU1DLEdBQUcsR0FBR2lCLFVBQVUsQ0FBQ2xCLFNBQW9DO0VBQzNELElBQU1JLEdBQUcsSUFBQWEsYUFBQSxHQUFHaEIsR0FBRyxDQUFDcUIsUUFBUSxjQUFBTCxhQUFBLGNBQUFBLGFBQUEsR0FBSWhCLEdBQUcsQ0FBQ3NCLE9BQU87RUFDdkMsT0FBT25CLEdBQUcsSUFBSSxJQUFJLEdBQUdLLE1BQU0sQ0FBQ0wsR0FBRyxDQUFDLEdBQUcsSUFBSTtBQUN6QztBQUVBLFNBQVNvQiwwQ0FBMENBLENBQUM5QixjQUErQixFQUFFK0IsUUFBZ0IsRUFBaUI7RUFBQSxJQUFBQyxJQUFBLEVBQUFDLGNBQUE7RUFDcEgsSUFBTTlCLE1BQU0sR0FBR0gsY0FBYyxDQUFDeUIsSUFBSSxDQUFDLFVBQUFDLENBQUM7SUFBQSxPQUFJLENBQUNBLENBQUMsQ0FBQ2xCLFNBQVMsSUFBSSxFQUFFLEVBQUVtQixXQUFXLENBQUMsQ0FBQyxLQUFLSSxRQUFRLENBQUNKLFdBQVcsQ0FBQyxDQUFDO0VBQUEsRUFBQztFQUNyRyxJQUFJLENBQUN4QixNQUFNLElBQUksQ0FBQ0EsTUFBTSxDQUFDRyxTQUFTLElBQUlGLE9BQUEsQ0FBT0QsTUFBTSxDQUFDRyxTQUFTLE1BQUssUUFBUSxJQUFJWCxLQUFLLENBQUNDLE9BQU8sQ0FBQ08sTUFBTSxDQUFDRyxTQUFTLENBQUMsRUFBRTtJQUMzRyxPQUFPLElBQUk7RUFDYjtFQUNBLElBQU1DLEdBQUcsR0FBR0osTUFBTSxDQUFDRyxTQUFvQztFQUN2RCxJQUFNSSxHQUFHLElBQUFzQixJQUFBLElBQUFDLGNBQUEsR0FBRzFCLEdBQUcsQ0FBQ3FCLFFBQVEsY0FBQUssY0FBQSxjQUFBQSxjQUFBLEdBQUkxQixHQUFHLENBQUNzQixPQUFPLGNBQUFHLElBQUEsY0FBQUEsSUFBQSxHQUFJekIsR0FBRyxDQUFDSyxFQUFFO0VBQ2pELE9BQU9GLEdBQUcsSUFBSSxJQUFJLEdBQUdLLE1BQU0sQ0FBQ0wsR0FBRyxDQUFDLEdBQUcsSUFBSTtBQUN6Qzs7QUFFQTtBQUNBLFNBQVN3Qix1Q0FBdUNBLENBQUNDLElBQVksRUFBWTtFQUN2RSxJQUFNQyxPQUFPLEdBQUdELElBQUksQ0FBQ0UsS0FBSyxDQUFDLHVCQUF1QixDQUFDO0VBQ25ELElBQUlELE9BQU8sRUFBRTtJQUNYLElBQU12QixDQUFDLEdBQUdDLFFBQVEsQ0FBQ3NCLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7SUFDbEMsT0FBT3BCLE1BQU0sQ0FBQ0MsS0FBSyxDQUFDSixDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQ0EsQ0FBQyxDQUFDO0VBQ25DO0VBQ0EsSUFBTXlCLElBQUksR0FBR0gsSUFBSSxDQUFDRSxLQUFLLENBQUMsa0JBQWtCLENBQUM7RUFDM0MsSUFBSUMsSUFBSSxFQUFFO0lBQ1IsSUFBTXpCLEVBQUMsR0FBR0MsUUFBUSxDQUFDd0IsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztJQUMvQixPQUFPdEIsTUFBTSxDQUFDQyxLQUFLLENBQUNKLEVBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDQSxFQUFDLENBQUM7RUFDbkM7RUFDQSxPQUFPLEVBQUU7QUFDWDtBQUVBLElBQU0wQixrQkFBa0IsR0FBRyxTQUFyQkEsa0JBQWtCQSxDQUFJQyxRQUFpQixFQUFLO0VBQ2hELElBQU1DLFdBQVcsR0FBR3RFLE1BQU0sQ0FBa0I7SUFDMUN5QyxFQUFFLEVBQUU0QixRQUFRLENBQUM1QixFQUFFLENBQUM4QixRQUFRLENBQUMsQ0FBQztJQUMxQkMsSUFBSSxFQUFFSCxRQUFRLENBQUNJLFNBQVM7SUFDeEJDLE1BQU0sRUFBRUwsUUFBUSxDQUFDTTtFQUNuQixDQUFDLENBQUM7RUFFRixJQUNFTCxXQUFXLENBQUNNLE9BQU8sQ0FBQ25DLEVBQUUsS0FBSzRCLFFBQVEsQ0FBQzVCLEVBQUUsQ0FBQzhCLFFBQVEsQ0FBQyxDQUFDLElBQ2pERCxXQUFXLENBQUNNLE9BQU8sQ0FBQ0osSUFBSSxLQUFLSCxRQUFRLENBQUNJLFNBQVMsSUFDL0NILFdBQVcsQ0FBQ00sT0FBTyxDQUFDRixNQUFNLEtBQUtMLFFBQVEsQ0FBQ00sT0FBTyxFQUMvQztJQUNBTCxXQUFXLENBQUNNLE9BQU8sR0FBRztNQUNwQm5DLEVBQUUsRUFBRTRCLFFBQVEsQ0FBQzVCLEVBQUUsQ0FBQzhCLFFBQVEsQ0FBQyxDQUFDO01BQzFCQyxJQUFJLEVBQUVILFFBQVEsQ0FBQ0ksU0FBUztNQUN4QkMsTUFBTSxFQUFFTCxRQUFRLENBQUNNO0lBQ25CLENBQUM7RUFDSDtFQUNBLE9BQU87SUFDTEwsV0FBVyxFQUFFQSxXQUFXLENBQUNNO0VBQzNCLENBQUM7QUFDSCxDQUFDO0FBRUQsSUFBTUMsWUFBWSxHQUFHLFNBQWZBLFlBQVlBLENBQUlDLElBQVksRUFBa0Q7RUFDbEYsSUFBSSxDQUFDQSxJQUFJLENBQUNDLElBQUksQ0FBQyxDQUFDLEVBQUUsT0FBTyxJQUFJO0VBRTdCLElBQUFDLFdBQUEsR0FBOEJGLElBQUksQ0FBQ0csS0FBSyxDQUFDLElBQUksQ0FBQztJQUFBQyxZQUFBLEdBQUFDLGNBQUEsQ0FBQUgsV0FBQTtJQUF2Q0ksU0FBUyxHQUFBRixZQUFBO0lBQUVHLFFBQVEsR0FBQUgsWUFBQTtFQUMxQixJQUFJLENBQUNFLFNBQVMsSUFBSSxDQUFDQyxRQUFRLEVBQUUsT0FBTyxJQUFJO0VBRXhDLElBQU1DLFNBQVMsR0FBR0YsU0FBUyxDQUFDRyxPQUFPLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxDQUFDUixJQUFJLENBQUMsQ0FBQztFQUN6RCxJQUFNUyxPQUFPLEdBQUdILFFBQVEsQ0FBQ0UsT0FBTyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsQ0FBQ1IsSUFBSSxDQUFDLENBQUM7RUFFckQsSUFBSTtJQUNGLElBQU1VLElBQUksR0FBR0MsSUFBSSxDQUFDQyxLQUFLLENBQUNILE9BQU8sQ0FBQztJQUNoQyxPQUFPO01BQUVGLFNBQVMsRUFBVEEsU0FBUztNQUFFRyxJQUFJLEVBQUpBO0lBQUssQ0FBQztFQUM1QixDQUFDLENBQUMsT0FBT0csVUFBVSxFQUFFO0lBQ25CQyxPQUFPLENBQUNDLEtBQUssQ0FBQyx5QkFBeUIsRUFBRUYsVUFBVSxFQUFFSixPQUFPLENBQUM7SUFDN0QsT0FBTyxJQUFJO0VBQ2I7QUFDRixDQUFDO0FBRUQsSUFBTU8sZ0JBQWdCO0VBQUEsSUFBQUMsS0FBQSxHQUFBQyxpQkFBQSxjQUFBQyxtQkFBQSxDQUFBQyxJQUFBLENBQUcsU0FBQUMsUUFDdkJDLFFBQWtCLEVBQ2xCQyxRQUFnQixFQUNoQkMsU0FhQztJQUFBLElBQUFDLGNBQUE7SUFBQSxJQUFBQyxNQUFBLEVBQUFDLE9BQUEsRUFBQUMsTUFBQSxFQUFBQyxrQkFBQSxFQUFBQyxnQkFBQSxFQVlRQyxVQUFVLEVBQUFDLGtCQUFBLEVBQUFDLElBQUEsRUFBQUMsS0FBQSxFQUFBQyxLQUFBLEVBQUFDLENBQUE7SUFBQSxPQUFBakIsbUJBQUEsQ0FBQWtCLElBQUEsV0FBQUMsUUFBQTtNQUFBLGtCQUFBQSxRQUFBLENBQUFDLElBQUEsR0FBQUQsUUFBQSxDQUFBRSxJQUFBO1FBQUE7VUFBVlQsVUFBVSxZQUFBVSxZQUFDMUMsSUFBWSxFQUFFO1lBQ2hDLElBQU0yQyxNQUFNLEdBQUc1QyxZQUFZLENBQUNDLElBQUksQ0FBQztZQUNqQyxJQUFJLENBQUMyQyxNQUFNLEVBQUU7WUFFYixJQUFRbkMsU0FBUyxHQUFXbUMsTUFBTSxDQUExQm5DLFNBQVM7Y0FBRUcsSUFBSSxHQUFLZ0MsTUFBTSxDQUFmaEMsSUFBSTtZQUN2QixJQUFNaUMsU0FBUyxHQUFHakMsSUFBK0I7WUFFakQsSUFBSUgsU0FBUyxLQUFLLE9BQU8sRUFBRTtjQUN6QixJQUFNcUMsT0FBTyxHQUFHRCxTQUFTLENBQUNDLE9BQWlCO2NBQzNDZixrQkFBa0IsSUFBSWUsT0FBTztjQUM3QnBCLFNBQVMsQ0FBQ3FCLE9BQU8sQ0FBQ2hCLGtCQUFrQixDQUFDO1lBQ3ZDLENBQUMsTUFBTSxJQUFJdEIsU0FBUyxLQUFLLE1BQU0sRUFBRTtjQUMvQixJQUFJb0MsU0FBUyxDQUFDRyxPQUFPLElBQUksT0FBT0gsU0FBUyxDQUFDRyxPQUFPLEtBQUssUUFBUSxFQUFFO2dCQUM5RHRCLFNBQVMsQ0FBQ3VCLE1BQU0sQ0FBQ0osU0FBUyxDQUFDRyxPQUFPLEVBQUV2QixRQUFRLENBQUM7Y0FDL0M7WUFDRixDQUFDLE1BQU0sSUFBSWhCLFNBQVMsS0FBSyxVQUFVLEVBQUU7Y0FBQSxJQUFBeUMsbUJBQUE7Y0FDbkMsSUFBTUMsWUFBWSxHQUFJTixTQUFTLENBQUNDLE9BQU8sSUFBZWYsa0JBQWtCO2NBQ3hFLElBQU1xQixPQUFPLEdBQUlQLFNBQVMsQ0FBQ08sT0FBTyxJQUFnQixJQUFJO2NBQ3RELElBQU1DLGVBQWUsR0FBSVIsU0FBUyxDQUFDUyxpQkFBaUIsSUFBZSxFQUFFO2NBQ3JFLElBQU1DLFdBQVcsR0FBRzVHLEtBQUssQ0FBQ0MsT0FBTyxDQUFDaUcsU0FBUyxDQUFDVyxhQUFhLENBQUMsR0FDckRYLFNBQVMsQ0FBQ1csYUFBYSxHQUN4QjdHLEtBQUssQ0FBQ0MsT0FBTyxDQUFDaUcsU0FBUyxDQUFDVSxXQUFXLENBQUMsR0FDakNWLFNBQVMsQ0FBQ1UsV0FBVyxHQUN0QixJQUFJO2NBQ1YsSUFBTUUsVUFBVSxJQUFBUCxtQkFBQSxHQUFHTCxTQUFTLENBQUNqRSxRQUFRLGNBQUFzRSxtQkFBQSxjQUFBQSxtQkFBQSxHQUFJTCxTQUFTLENBQUNoRSxPQUFPO2NBQzFELElBQU02RSxnQkFBZ0IsR0FBR0QsVUFBVSxJQUFJLElBQUksSUFBSTFGLE1BQU0sQ0FBQzBGLFVBQVUsQ0FBQyxDQUFDdkQsSUFBSSxDQUFDLENBQUMsS0FBSyxFQUFFLEdBQUduQyxNQUFNLENBQUMwRixVQUFVLENBQUMsQ0FBQ3ZELElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSTtjQUNsSHdCLFNBQVMsQ0FBQ2lDLFVBQVUsQ0FBQ1IsWUFBWSxFQUFFQyxPQUFPLEVBQUVDLGVBQWUsRUFBRTVCLFFBQVEsRUFBRThCLFdBQVcsRUFBRUcsZ0JBQWdCLENBQUM7WUFDdkcsQ0FBQyxNQUFNLElBQUlqRCxTQUFTLEtBQUssbUJBQW1CLEVBQUU7Y0FBQSxJQUFBbUQscUJBQUE7Y0FDNUMsQ0FBQUEscUJBQUEsR0FBQWxDLFNBQVMsQ0FBQ21DLGtCQUFrQixjQUFBRCxxQkFBQSxlQUE1QkEscUJBQUEsQ0FBQUUsSUFBQSxDQUFBcEMsU0FBUyxFQUFzQm1CLFNBQVMsRUFBRWQsa0JBQWtCLEVBQUVOLFFBQVEsQ0FBQztZQUN6RSxDQUFDLE1BQU0sSUFBSWhCLFNBQVMsS0FBSyxPQUFPLEVBQUU7Y0FDaENpQixTQUFTLENBQUNxQyxPQUFPLENBQUNsQixTQUFTLENBQUM1QixLQUFLLEVBQUVRLFFBQVEsQ0FBQztZQUM5QztVQUNGLENBQUM7VUExQ0tHLE1BQU0sSUFBQUQsY0FBQSxHQUFHSCxRQUFRLENBQUN3QyxJQUFJLGNBQUFyQyxjQUFBLHVCQUFiQSxjQUFBLENBQWVzQyxTQUFTLENBQUMsQ0FBQztVQUFBLElBQ3BDckMsTUFBTTtZQUFBWSxRQUFBLENBQUFFLElBQUE7WUFBQTtVQUFBO1VBQUEsTUFDSCxJQUFJd0IsS0FBSyxDQUFDLHFCQUFxQixDQUFDO1FBQUE7VUFHbENyQyxPQUFPLEdBQUcsSUFBSXNDLFdBQVcsQ0FBQyxDQUFDO1VBQzdCckMsTUFBTSxHQUFHLEVBQUU7VUFDWEMsa0JBQWtCLEdBQUcsRUFBRTtVQUN2QkMsZ0JBQWdCLEdBQUcsS0FBSztRQUFBO1VBQUEsSUFvQ3BCQSxnQkFBZ0I7WUFBQVEsUUFBQSxDQUFBRSxJQUFBO1lBQUE7VUFBQTtVQUFBRixRQUFBLENBQUFFLElBQUE7VUFBQSxPQUVRZCxNQUFNLENBQUN3QyxJQUFJLENBQUMsQ0FBQztRQUFBO1VBQUFsQyxrQkFBQSxHQUFBTSxRQUFBLENBQUE2QixJQUFBO1VBQW5DbEMsSUFBSSxHQUFBRCxrQkFBQSxDQUFKQyxJQUFJO1VBQUVDLEtBQUssR0FBQUYsa0JBQUEsQ0FBTEUsS0FBSztVQUFBLEtBQ2ZELElBQUk7WUFBQUssUUFBQSxDQUFBRSxJQUFBO1lBQUE7VUFBQTtVQUNOVixnQkFBZ0IsR0FBRyxJQUFJO1VBQUEsT0FBQVEsUUFBQSxDQUFBOEIsTUFBQTtRQUFBO1VBSXpCeEMsTUFBTSxJQUFJRCxPQUFPLENBQUMwQyxNQUFNLENBQUNuQyxLQUFLLEVBQUU7WUFBRW9DLE1BQU0sRUFBRTtVQUFLLENBQUMsQ0FBQztVQUMzQ25DLEtBQUssR0FBR1AsTUFBTSxDQUFDMUIsS0FBSyxDQUFDLE1BQU0sQ0FBQztVQUNsQzBCLE1BQU0sR0FBR08sS0FBSyxDQUFDb0MsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFO1VBRTFCLEtBQVNuQyxDQUFDLEdBQUcsQ0FBQyxFQUFFQSxDQUFDLEdBQUdELEtBQUssQ0FBQ3FDLE1BQU0sRUFBRXBDLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDeENMLFVBQVUsQ0FBQ0ksS0FBSyxDQUFDQyxDQUFDLENBQUMsQ0FBQztVQUN0QjtVQUFDRSxRQUFBLENBQUFFLElBQUE7VUFBQTtRQUFBO1FBQUE7VUFBQSxPQUFBRixRQUFBLENBQUFtQyxJQUFBO01BQUE7SUFBQSxHQUFBcEQsT0FBQTtFQUFBLENBRUo7RUFBQSxnQkE5RUtMLGdCQUFnQkEsQ0FBQTBELEVBQUEsRUFBQUMsR0FBQSxFQUFBQyxHQUFBO0lBQUEsT0FBQTNELEtBQUEsQ0FBQTRELEtBQUEsT0FBQUMsU0FBQTtFQUFBO0FBQUEsR0E4RXJCO0FBRUQsT0FBTyxJQUFNQyxjQUFjLEdBQUcsU0FBakJBLGNBQWNBLENBQUFDLEtBQUEsRUFLQTtFQUFBLElBSmpCQyxhQUFhLEdBQUFELEtBQUEsQ0FBckJFLE1BQU07SUFDTkMsa0JBQWtCLEdBQUFILEtBQUEsQ0FBbEJHLGtCQUFrQjtJQUNsQnRCLE9BQU8sR0FBQW1CLEtBQUEsQ0FBUG5CLE9BQU87SUFBQXVCLFlBQUEsR0FBQUosS0FBQSxDQUNQSyxNQUFNO0lBQU5BLE1BQU0sR0FBQUQsWUFBQSxjQUFHLEVBQUUsR0FBQUEsWUFBQTtFQUVYLElBQUFFLEtBQUEsR0FBYzlKLElBQUksQ0FBQyxDQUFDO0lBQVorSixDQUFDLEdBQUFELEtBQUEsQ0FBREMsQ0FBQztFQUNULElBQU1qRyxRQUFRLEdBQUc3RCxPQUFPLENBQUMsQ0FBQztFQUMxQixJQUFBK0osaUJBQUEsR0FVSTlKLGdCQUFnQixDQUFDLENBQUM7SUFUcEIrSixPQUFPLEdBQUFELGlCQUFBLENBQVBDLE9BQU87SUFDUEMsVUFBVSxHQUFBRixpQkFBQSxDQUFWRSxVQUFVO0lBQ1ZDLE1BQU0sR0FBQUgsaUJBQUEsQ0FBTkcsTUFBTTtJQUNOQyxTQUFTLEdBQUFKLGlCQUFBLENBQVRJLFNBQVM7SUFDVEMsS0FBSyxHQUFBTCxpQkFBQSxDQUFMSyxLQUFLO0lBQ0xDLGlCQUFpQixHQUFBTixpQkFBQSxDQUFqQk0saUJBQWlCO0lBQ2pCQyxrQkFBa0IsR0FBQVAsaUJBQUEsQ0FBbEJPLGtCQUFrQjtJQUNsQkMsWUFBWSxHQUFBUixpQkFBQSxDQUFaUSxZQUFZO0lBQ1pDLGVBQWUsR0FBQVQsaUJBQUEsQ0FBZlMsZUFBZTtFQUVqQixJQUFNQyxLQUFLLEdBQUd0SyxRQUFRLENBQUMsQ0FBQztFQUN4QixJQUFBdUssWUFBQSxHQUEwQm5LLFdBQVcsQ0FBQyxDQUFDO0lBQS9Cb0ssYUFBYSxHQUFBRCxZQUFBLENBQWJDLGFBQWE7RUFDckIsSUFBQUMsbUJBQUEsR0FBd0JoSCxrQkFBa0IsQ0FBQ0MsUUFBUSxDQUFDO0lBQTVDQyxXQUFXLEdBQUE4RyxtQkFBQSxDQUFYOUcsV0FBVztFQUNuQixJQUFBK0csa0JBQUEsR0FBOEJySyxpQkFBaUIsQ0FBQyxDQUFDO0lBQXpDc0ssaUJBQWlCLEdBQUFELGtCQUFBLENBQWpCQyxpQkFBaUI7RUFDekIsSUFBTUMsZ0JBQWdCLEdBQUd2TCxNQUFNLENBQUNJLE1BQU0sQ0FBQyxDQUFDLENBQUM7RUFDekMsSUFBTW9MLG1CQUFtQixHQUFHeEwsTUFBTSxDQUFnQixJQUFJLENBQUM7RUFDdkQsSUFBTXlMLGFBQWEsR0FBR3pMLE1BQU0sQ0FBQ2dLLGFBQWEsSUFBSTVKLE1BQU0sQ0FBQyxDQUFDLENBQUM7RUFDdkQsSUFBTXNMLGFBQWEsR0FBRzFMLE1BQU0sQ0FBQyxLQUFLLENBQUM7RUFDbkMsSUFBTTJMLFdBQVcsR0FBRzNMLE1BQU0sQ0FBZ0IsRUFBRSxDQUFDO0VBQzdDLElBQU00TCxlQUFlLEdBQUc1TCxNQUFNLENBQUMsS0FBSyxDQUFDO0VBQ3JDLElBQU02TCxZQUFZLEdBQUc3TCxNQUFNLENBQUMsS0FBSyxDQUFDO0VBQ2xDLElBQUE4TCxTQUFBLEdBQTRDNUwsUUFBUSxDQUF5QixDQUFDLENBQUMsQ0FBQztJQUFBNkwsVUFBQSxHQUFBNUcsY0FBQSxDQUFBMkcsU0FBQTtJQUF6RUUsY0FBYyxHQUFBRCxVQUFBO0lBQUVFLGlCQUFpQixHQUFBRixVQUFBO0VBRXhDLElBQU1HLG9CQUFvQixHQUFHbE0sTUFBTSxDQUFDNkssaUJBQWlCLENBQUM7RUFDdEQsSUFBTXNCLHFCQUFxQixHQUFHbk0sTUFBTSxDQUFDOEssa0JBQWtCLENBQUM7RUFFeEQ3SyxTQUFTLENBQUMsWUFBTTtJQUNkaU0sb0JBQW9CLENBQUN0SCxPQUFPLEdBQUdpRyxpQkFBaUI7SUFDaERzQixxQkFBcUIsQ0FBQ3ZILE9BQU8sR0FBR2tHLGtCQUFrQjtFQUNwRCxDQUFDLEVBQUUsQ0FBQ0QsaUJBQWlCLEVBQUVDLGtCQUFrQixDQUFDLENBQUM7RUFFM0MsSUFBQXNCLGdCQUFBLEdBQ0UvTCxlQUFlLENBQUM7TUFDZDRKLE1BQU0sRUFBRUQsYUFBYSxJQUFJeUIsYUFBYSxDQUFDN0csT0FBTztNQUM5Q04sV0FBVyxFQUFYQSxXQUFXO01BQ1g0RixrQkFBa0IsRUFBbEJBLGtCQUFrQjtNQUNsQnRCLE9BQU8sRUFBUEEsT0FBTztNQUNQd0IsTUFBTSxFQUFOQTtJQUNGLENBQUMsQ0FBQztJQVBJaUMsZUFBZSxHQUFBRCxnQkFBQSxDQUFmQyxlQUFlO0lBQUVDLFFBQVEsR0FBQUYsZ0JBQUEsQ0FBUkUsUUFBUTtJQUFFQyxxQkFBcUIsR0FBQUgsZ0JBQUEsQ0FBckJHLHFCQUFxQjtJQUFFQyxZQUFZLEdBQUFKLGdCQUFBLENBQVpJLFlBQVk7SUFBRUMsVUFBVSxHQUFBTCxnQkFBQSxDQUFWSyxVQUFVO0lBQUVDLGFBQWEsR0FBQU4sZ0JBQUEsQ0FBYk0sYUFBYTtJQUFFQyxZQUFZLEdBQUFQLGdCQUFBLENBQVpPLFlBQVk7RUFTL0doQixXQUFXLENBQUMvRyxPQUFPLEdBQUcwSCxRQUFRO0VBRTlCck0sU0FBUyxDQUFDLFlBQU07SUFDZCxJQUFNMk0sV0FBVyxHQUFHLElBQUlDLFdBQVcsQ0FBQywrQkFBK0IsRUFBRTtNQUNuRUMsTUFBTSxFQUFFO1FBQUVULGVBQWUsRUFBZkE7TUFBZ0I7SUFDNUIsQ0FBQyxDQUFDO0lBQ0ZVLFFBQVEsQ0FBQ0MsYUFBYSxDQUFDSixXQUFXLENBQUM7RUFDckMsQ0FBQyxFQUFFLENBQUNQLGVBQWUsQ0FBQyxDQUFDO0VBRXJCcE0sU0FBUyxDQUFDLFlBQU07SUFDZCxJQUFJK0osYUFBYSxJQUFJQSxhQUFhLEtBQUt5QixhQUFhLENBQUM3RyxPQUFPLEVBQUU7TUFDNUQ7TUFDQTZGLFVBQVUsQ0FBQyxJQUFJLENBQUM7TUFDaEJFLFNBQVMsYUFBVEEsU0FBUyxlQUFUQSxTQUFTLENBQUcsSUFBSSxDQUFDO01BQ2pCSyxlQUFlLENBQUMsSUFBSSxDQUFDO01BRXJCUyxhQUFhLENBQUM3RyxPQUFPLEdBQUdvRixhQUFhO01BQ3JDdUIsZ0JBQWdCLENBQUMzRyxPQUFPLEdBQUd4RSxNQUFNLENBQUMsQ0FBQztNQUNuQ29MLG1CQUFtQixDQUFDNUcsT0FBTyxHQUFHLElBQUk7TUFDbEM4RyxhQUFhLENBQUM5RyxPQUFPLEdBQUcsS0FBSztNQUM3QmdILGVBQWUsQ0FBQ2hILE9BQU8sR0FBRyxLQUFLO01BRS9CNEgsWUFBWSxDQUFDLENBQUM7SUFDaEI7RUFDRixDQUFDLEVBQUUsQ0FBQ3hDLGFBQWEsRUFBRVEsT0FBTyxFQUFFQyxVQUFVLEVBQUVFLFNBQVMsRUFBRUssZUFBZSxFQUFFd0IsWUFBWSxDQUFDLENBQUM7O0VBRWxGO0VBQ0F2TSxTQUFTLENBQUMsWUFBTTtJQUNkLElBQUk4SyxZQUFZLElBQUlzQixlQUFlLEVBQUU7SUFDckMsSUFBTVksa0JBQWtCLEdBQUdYLFFBQVEsQ0FBQ1ksTUFBTSxDQUFDLFVBQUFDLEdBQUc7TUFBQSxPQUFJQSxHQUFHLENBQUNDLFNBQVM7SUFBQSxFQUFDLENBQUNDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN2RSxJQUFBQyxLQUFBLEdBQW1DTCxrQkFBa0IsSUFBSSxDQUFDLENBQUM7TUFBbkRHLFNBQVMsR0FBQUUsS0FBQSxDQUFURixTQUFTO01BQUVHLFdBQVcsR0FBQUQsS0FBQSxDQUFYQyxXQUFXO0lBQzlCLElBQUksQ0FBQ0gsU0FBUyxFQUFFO0lBRWhCakMsYUFBYSxDQUFDaUMsU0FBUyxDQUFDLENBQUNJLElBQUksQ0FBQyxVQUFBQyxRQUFRLEVBQUk7TUFDeEMsSUFBTUMsS0FBSyxHQUFHRCxRQUFRLGFBQVJBLFFBQVEsdUJBQVJBLFFBQVEsQ0FBRW5LLElBQUksQ0FBQyxVQUFBcUssQ0FBQztRQUFBLE9BQUk5SyxNQUFNLENBQUM4SyxDQUFDLENBQUNsTCxFQUFFLENBQUMsS0FBS0ksTUFBTSxDQUFDdUssU0FBUyxDQUFDO01BQUEsRUFBQztNQUNyRSxJQUFJTSxLQUFLLEVBQUU7UUFBQSxJQUFBRSxhQUFBO1FBQ1Q1QyxlQUFlLENBQUM7VUFDZHVDLFdBQVcsRUFBRUcsS0FBSyxDQUFDbEosSUFBSTtVQUN2QnFKLFVBQVUsRUFBRSxFQUFBRCxhQUFBLEdBQUFGLEtBQUssQ0FBQ2hELE1BQU0sY0FBQWtELGFBQUEsdUJBQVpBLGFBQUEsQ0FBY3BKLElBQUksS0FBSSxFQUFFO1VBQ3BDNEksU0FBUyxFQUFFeEssTUFBTSxDQUFDOEssS0FBSyxDQUFDakwsRUFBRTtRQUM1QixDQUFDLENBQUM7UUFDRmdJLFVBQVUsQ0FBQ2lELEtBQUssQ0FBQztNQUNuQixDQUFDLE1BQU0sSUFBSUgsV0FBVyxFQUFFO1FBQ3RCdkMsZUFBZSxDQUFDO1VBQ2R1QyxXQUFXLEVBQVhBLFdBQVc7VUFDWE0sVUFBVSxFQUFFLEVBQUU7VUFDZFQsU0FBUyxFQUFFeEssTUFBTSxDQUFDd0ssU0FBUztRQUM3QixDQUFDLENBQUM7UUFDRjNDLFVBQVUsQ0FBQztVQUFFaEksRUFBRSxFQUFFSSxNQUFNLENBQUN1SyxTQUFTLENBQUM7VUFBRTVJLElBQUksRUFBRStJO1FBQVksQ0FBQyxDQUFDO01BQzFEO0lBQ0YsQ0FBQyxDQUFDO0VBQ0osQ0FBQyxFQUFFLENBQUNqQixRQUFRLEVBQUV2QixZQUFZLEVBQUVzQixlQUFlLEVBQUVsQixhQUFhLEVBQUVILGVBQWUsRUFBRVAsVUFBVSxDQUFDLENBQUM7O0VBRXpGO0VBQ0F4SyxTQUFTLENBQUMsWUFBTTtJQUNkLElBQUl5SyxNQUFNLElBQUkyQixlQUFlLEVBQUU7SUFDL0IsSUFBTXlCLGlCQUFpQixHQUFHeEIsUUFBUSxDQUFDWSxNQUFNLENBQUMsVUFBQUMsR0FBRztNQUFBLE9BQUlBLEdBQUcsQ0FBQ1ksUUFBUSxJQUFJLElBQUksSUFBSVosR0FBRyxDQUFDVSxVQUFVO0lBQUEsRUFBQyxDQUFDUixFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDL0YsSUFBQVcsS0FBQSxHQUE2REYsaUJBQWlCLElBQUksQ0FBQyxDQUFDO01BQWxFRyxXQUFXLEdBQUFELEtBQUEsQ0FBckJELFFBQVE7TUFBMkJHLGFBQWEsR0FBQUYsS0FBQSxDQUF6QkgsVUFBVTtJQUN6QyxJQUFJSSxXQUFXLElBQUksSUFBSSxJQUFJLENBQUNDLGFBQWEsRUFBRTtJQUUzQ3ZELFNBQVMsYUFBVEEsU0FBUyxlQUFUQSxTQUFTLENBQUc7TUFBRWxJLEVBQUUsRUFBRUksTUFBTSxDQUFDb0wsV0FBVyxDQUFDO01BQUV6SixJQUFJLEVBQUUwSjtJQUFjLENBQUMsQ0FBQztFQUMvRCxDQUFDLEVBQUUsQ0FBQzVCLFFBQVEsRUFBRTVCLE1BQU0sRUFBRTJCLGVBQWUsRUFBRTFCLFNBQVMsQ0FBQyxDQUFDO0VBRWxELElBQU13RCxpQkFBaUIsR0FBR3BPLFdBQVcsQ0FDbkMsVUFBQ3FPLFlBQXFCLEVBQUs7SUFDekIsSUFBTXZHLE9BQU8sR0FDWHVHLFlBQVksS0FBSywrREFBK0QsR0FDNUU5RCxDQUFDLENBQUMsd0JBQXdCLENBQUMsR0FDM0JBLENBQUMsQ0FBQyxZQUFZLENBQUM7SUFFckJtQyxVQUFVLENBQUM7TUFDVGhLLEVBQUUsWUFBQTRMLE1BQUEsQ0FBWTlDLGdCQUFnQixDQUFDM0csT0FBTyxDQUFFO01BQ3hDaUQsT0FBTyxFQUFQQSxPQUFPO01BQ1B5RyxPQUFPLEVBQUUsSUFBSTtNQUNiQyxJQUFJLEVBQUUsSUFBSUMsSUFBSSxDQUFDLENBQUM7TUFDaEJDLElBQUksRUFBRTtRQUFFaE0sRUFBRSxFQUFFLFdBQVc7UUFBRStCLElBQUksRUFBRTtNQUFZLENBQUM7TUFDNUNrSyxJQUFJLEVBQUU1TixlQUFlLENBQUM2TjtJQUN4QixDQUFDLENBQUM7SUFDRi9DLGVBQWUsQ0FBQ2hILE9BQU8sR0FBRyxLQUFLO0VBQ2pDLENBQUMsRUFDRCxDQUFDNkgsVUFBVSxFQUFFbkMsQ0FBQyxDQUNoQixDQUFDO0VBRUQsSUFBTXNFLGtCQUFrQixHQUFHN08sV0FBVyxDQUNwQyxVQUFDNEgsT0FBZSxFQUFFTSxPQUFZLEVBQUVDLGVBQXVCLEVBQUs7SUFDMUQsSUFBTTJHLGFBQWEsYUFBQVIsTUFBQSxDQUFhOUMsZ0JBQWdCLENBQUMzRyxPQUFPLGVBQVk7SUFFcEU2SCxVQUFVLENBQUM7TUFDVGhLLEVBQUUsRUFBRW9NLGFBQWE7TUFDakJoSCxPQUFPLEVBQUVGLE9BQU87TUFDaEI0RyxJQUFJLEVBQUUsSUFBSUMsSUFBSSxDQUFDLENBQUM7TUFDaEJDLElBQUksRUFBRTtRQUFFaE0sRUFBRSxFQUFFLFdBQVc7UUFBRStCLElBQUksRUFBRTtNQUFZLENBQUM7TUFDNUNrSyxJQUFJLEVBQUU1TixlQUFlLENBQUM2TixTQUFTO01BQy9CMUcsT0FBTyxFQUFQQSxPQUFPO01BQ1BDLGVBQWUsRUFBZkE7SUFDRixDQUFDLENBQUM7RUFDSixDQUFDLEVBQ0QsQ0FBQ3VFLFVBQVUsQ0FDYixDQUFDO0VBRUQsSUFBTXFDLGtCQUFrQixHQUFHL08sV0FBVztJQUFBLElBQUFnUCxLQUFBLEdBQUE5SSxpQkFBQSxjQUFBQyxtQkFBQSxDQUFBQyxJQUFBLENBQ3BDLFNBQUE2SSxTQUNFckgsT0FBZSxFQUNmTSxPQUFZLEVBQ1pDLGVBQXVCLEVBQ3ZCRSxXQUE2QixFQUM3QkcsZ0JBQWdDO01BQUEsSUFBQTBHLHFCQUFBLEVBQUFDLG9CQUFBLEVBQUFDLGtCQUFBO01BQUEsSUFBQU4sYUFBQSxFQUFBTyxZQUFBLEVBQUFDLE9BQUEsRUFBQUMsWUFBQSxFQUFBQyxlQUFBLEVBQUFDLDRCQUFBLEVBQUFDLG1CQUFBLEVBQUFDLGVBQUEsRUFBQUMsaUJBQUEsRUFBQTlOLGNBQUEsRUFBQStOLGVBQUEsRUFBQUMsV0FBQSxFQUFBQyxhQUFBLEVBQUFDLHNCQUFBLEVBQUFDLCtCQUFBLEVBQUFDLG1CQUFBLEVBQUFDLGlCQUFBLEVBQUFDLG9CQUFBLEVBQUFDLGlCQUFBLEVBQUFDLFVBQUEsRUFBQUMsUUFBQSxFQUFBQyxlQUFBLEVBQUFDLGVBQUEsRUFBQUMseUJBQUEsRUFBQUMsdUJBQUEsRUFBQUMsbUJBQUEsRUFBQUMsbUJBQUEsRUFBQUMsT0FBQSxFQUFBQyxHQUFBLEVBQUFDLFVBQUEsRUFBQUMsa0JBQUEsRUFBQUMsbUJBQUEsRUFBQUMsZ0JBQUEsRUFBQUMsU0FBQSxFQUFBQyxjQUFBLEVBQUFDLGdCQUFBLEVBQUFDLHFCQUFBLEVBQUFDLHNCQUFBLEVBQUFDLHNCQUFBLEVBQUFDLHNCQUFBLEVBQUFDLHNCQUFBLEVBQUFDLHNCQUFBLEVBQUEvRSxXQUFBO01BQUEsT0FBQTFHLG1CQUFBLENBQUFrQixJQUFBLFdBQUF3SyxTQUFBO1FBQUEsa0JBQUFBLFNBQUEsQ0FBQXRLLElBQUEsR0FBQXNLLFNBQUEsQ0FBQXJLLElBQUE7VUFBQTtZQUUxQnNILGFBQWEsYUFBQVIsTUFBQSxDQUFhOUMsZ0JBQWdCLENBQUMzRyxPQUFPO1lBQ3hEOEgsYUFBYSxDQUFDbUMsYUFBYSxDQUFDOztZQUU1QjtZQUNNTyxZQUFZLEdBQUcsSUFBSXlDLE1BQU0sQ0FBQzVRLHNCQUFzQixFQUFFLEdBQUcsQ0FBQztZQUN0RG9PLE9BQU8sR0FBQXlDLGtCQUFBLENBQU9uSyxPQUFPLENBQUNvSyxRQUFRLENBQUMzQyxZQUFZLENBQUM7WUFFOUNFLFlBQVksR0FBRzNILE9BQU87WUFDcEI0SCxlQUFlLEdBQUc1RCxXQUFXLENBQUMvRyxPQUFPLENBQUNzSSxNQUFNLENBQUMsVUFBQThFLENBQUM7Y0FBQSxPQUFJQSxDQUFDLENBQUN2UCxFQUFFLEtBQUtvTSxhQUFhO1lBQUEsRUFBQyxDQUFDeEIsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ2hGbUMsNEJBQTRCLEdBQUcsQ0FBQUQsZUFBZSxhQUFmQSxlQUFlLHVCQUFmQSxlQUFlLENBQUUwQyxRQUFRLEtBQUksSUFBSTtZQUNoRXhDLG1CQUFtQixHQUFHLENBQUMsYUFBYSxFQUFFLG9CQUFvQixFQUFFLFlBQVksQ0FBQztZQUN6RUMsZUFBZSxHQUFHLENBQ3RCLFdBQVcsRUFDWCxrQkFBa0IsRUFDbEIsYUFBYSxFQUNiLGVBQWUsRUFDZixrQkFBa0IsRUFDbEIsd0JBQXdCLEVBQ3hCLG1CQUFtQixDQUNwQjtZQUNLQyxpQkFBaUIsR0FBRyxDQUFDLGFBQWEsRUFBRSxvQkFBb0IsQ0FBQztZQUN6RDlOLGNBQWMsR0FBRyxDQUFBME4sZUFBZSxhQUFmQSxlQUFlLGdCQUFBTixxQkFBQSxHQUFmTSxlQUFlLENBQUUwQyxRQUFRLGNBQUFoRCxxQkFBQSx1QkFBekJBLHFCQUFBLENBQTJCaUQsZUFBZSxLQUFJLEVBQUU7WUFDakV0QyxlQUFlLEdBQ25CSiw0QkFBNEIsSUFDNUIzTixjQUFjLENBQUNzUSxJQUFJLENBQUMsVUFBQ25RLE1BQVc7Y0FBQSxPQUFLeU4sbUJBQW1CLENBQUMyQyxRQUFRLENBQUNwUSxNQUFNLENBQUNLLFNBQVMsQ0FBQztZQUFBLEVBQUM7WUFDaEZ3TixXQUFXLEdBQ2ZMLDRCQUE0QixJQUFJM04sY0FBYyxDQUFDc1EsSUFBSSxDQUFDLFVBQUNuUSxNQUFXO2NBQUEsT0FBSzBOLGVBQWUsQ0FBQzBDLFFBQVEsQ0FBQ3BRLE1BQU0sQ0FBQ0ssU0FBUyxDQUFDO1lBQUEsRUFBQztZQUM1R3lOLGFBQWEsR0FDakJOLDRCQUE0QixJQUM1QjNOLGNBQWMsQ0FBQ3NRLElBQUksQ0FBQyxVQUFDblEsTUFBVztjQUFBLE9BQUsyTixpQkFBaUIsQ0FBQ3lDLFFBQVEsQ0FBQ3BRLE1BQU0sQ0FBQ0ssU0FBUyxDQUFDO1lBQUEsRUFBQztZQUM5RTBOLHNCQUFzQixHQUMxQlAsNEJBQTRCLElBQzVCLENBQUFELGVBQWUsYUFBZkEsZUFBZSx1QkFBZkEsZUFBZSxDQUFFOEMsY0FBYyxNQUFLLFVBQVUsSUFDOUN4USxjQUFjLENBQUNzUSxJQUFJLENBQUMsVUFBQ25RLE1BQVc7Y0FBQSxPQUFLQSxNQUFNLENBQUNLLFNBQVMsS0FBSyxjQUFjO1lBQUEsRUFBQztZQUNyRTJOLCtCQUErQixHQUNuQ1IsNEJBQTRCLElBQzVCLENBQUFELGVBQWUsYUFBZkEsZUFBZSx1QkFBZkEsZUFBZSxDQUFFOEMsY0FBYyxNQUFLLFVBQVUsSUFDOUN4USxjQUFjLENBQUNzUSxJQUFJLENBQUMsVUFBQ25RLE1BQVc7Y0FBQSxPQUFLLENBQUNBLE1BQU0sQ0FBQ0ssU0FBUyxJQUFJLEVBQUUsRUFBRW1CLFdBQVcsQ0FBQyxDQUFDLEtBQUssd0JBQXdCO1lBQUEsRUFBQztZQUUzRyxJQUFJdU0sc0JBQXNCLElBQUl1QyxNQUFNLENBQUNDLHdDQUF3QyxJQUFJaEssZ0JBQWdCLGFBQWhCQSxnQkFBZ0IsZUFBaEJBLGdCQUFnQixDQUFFeEQsSUFBSSxDQUFDLENBQUMsRUFBRTtjQUN6R2tMLG1CQUFtQixHQUFHO2dCQUFFdk0sT0FBTyxFQUFFNkUsZ0JBQWdCLENBQUN4RCxJQUFJLENBQUM7Y0FBRSxDQUFDO1lBQzVELENBQUMsTUFBTSxJQUNMaUwsK0JBQStCLElBQy9Cc0MsTUFBTSxDQUFDQyx3Q0FBd0MsS0FDOUNoSyxnQkFBZ0IsYUFBaEJBLGdCQUFnQixlQUFoQkEsZ0JBQWdCLENBQUV4RCxJQUFJLENBQUMsQ0FBQyxJQUN2QnBCLDBDQUEwQyxDQUFDOUIsY0FBYyxFQUFFLHdCQUF3QixDQUFDLENBQUMsRUFDdkY7Y0FDTXFPLGlCQUFpQixHQUNyQixDQUFBM0gsZ0JBQWdCLGFBQWhCQSxnQkFBZ0IsdUJBQWhCQSxnQkFBZ0IsQ0FBRXhELElBQUksQ0FBQyxDQUFDLEtBQ3hCcEIsMENBQTBDLENBQUM5QixjQUFjLEVBQUUsd0JBQXdCLENBQUM7Y0FDdEZvTyxtQkFBbUIsR0FBRztnQkFDcEJ2TSxPQUFPLEVBQUV3TTtjQUNYLENBQUM7WUFDSDtZQUVBLElBQUlILHNCQUFzQixFQUFFO2NBQzFCOUUsS0FBSyxDQUFDdkssTUFBTSxDQUFDOFIsZ0JBQWdCLEVBQUFDLGFBQUE7Z0JBQzNCQyxVQUFVLEVBQUV0Uix5QkFBeUIsQ0FBQ3dKLEtBQUssQ0FBQztnQkFDNUMrSCxXQUFXLEVBQUV4Uix1QkFBdUIsQ0FBQ1UsY0FBYyxDQUFDO2dCQUNwRCtRLFFBQVEsRUFBRSxRQUFRO2dCQUNsQkMsTUFBTSxFQUFFO2NBQWMsR0FDbEJ0SyxnQkFBZ0IsYUFBaEJBLGdCQUFnQixlQUFoQkEsZ0JBQWdCLENBQUV4RCxJQUFJLENBQUMsQ0FBQyxHQUFHO2dCQUFFK04sZ0JBQWdCLEVBQUV2SyxnQkFBZ0IsQ0FBQ3hELElBQUksQ0FBQztjQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FDbEYsQ0FBQztZQUNKO1lBRU1vTCxvQkFBb0IsR0FDeEJYLDRCQUE0QixJQUM1QixDQUFBRCxlQUFlLGFBQWZBLGVBQWUsdUJBQWZBLGVBQWUsQ0FBRThDLGNBQWMsTUFBSyxVQUFVLElBQzlDeFEsY0FBYyxDQUFDc1EsSUFBSSxDQUFDLFVBQUNuUSxNQUFXO2NBQUEsT0FBSyxDQUFDQSxNQUFNLENBQUNLLFNBQVMsSUFBSSxFQUFFLEVBQUVtQixXQUFXLENBQUMsQ0FBQyxLQUFLLFlBQVk7WUFBQSxFQUFDO1lBRy9GLElBQUkyTSxvQkFBb0IsRUFBRTtjQUNsQkUsVUFBVSxHQUFHOUgsZ0JBQWdCLGFBQWhCQSxnQkFBZ0IsdUJBQWhCQSxnQkFBZ0IsQ0FBRXhELElBQUksQ0FBQyxDQUFDO2NBQ3JDdUwsUUFBUSxHQUFHbk4seUNBQXlDLENBQUN0QixjQUFjLENBQUM7Y0FDcEUwTyxlQUFlLEdBQUdGLFVBQVUsSUFBSUMsUUFBUTtjQUM5QyxJQUFJQyxlQUFlLEVBQUU7Z0JBQ25CSCxpQkFBaUIsR0FBRztrQkFBRTFNLE9BQU8sRUFBRTZNO2dCQUFnQixDQUFDO2NBQ2xEO1lBQ0Y7WUFFTUMsZUFBZSxHQUFHbkIsT0FBTyxDQUFDMEQsR0FBRyxDQUFDLFVBQUE3TyxLQUFLO2NBQUEsT0FBSXZCLFFBQVEsQ0FBQ3VCLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7WUFBQSxFQUFDO1lBQzlEdU0seUJBQXlCLEdBQUc3TyxzQ0FBc0MsQ0FBQ0MsY0FBYyxDQUFDO1lBQ2xGNk8sdUJBQXVCLEdBQzNCWixhQUFhLElBQUlVLGVBQWUsQ0FBQ2pILE1BQU0sS0FBSyxDQUFDLElBQUlrSCx5QkFBeUIsQ0FBQ2xILE1BQU0sS0FBSyxDQUFDLEdBQ25GeEYsdUNBQXVDLENBQUM0RCxPQUFPLENBQUMsR0FDaEQsRUFBRTtZQUNGZ0osbUJBQW1CLEdBQ3ZCSCxlQUFlLENBQUNqSCxNQUFNLEdBQUcsQ0FBQyxHQUN0QmlILGVBQWUsR0FDZkMseUJBQXlCLENBQUNsSCxNQUFNLEdBQUcsQ0FBQyxHQUNsQ2tILHlCQUF5QixHQUN6QkMsdUJBQXVCO1lBRXpCRSxtQkFBbUIsR0FDdkJwQiw0QkFBNEIsS0FDM0JJLGVBQWUsSUFBSUMsV0FBVyxJQUFJQyxhQUFhLENBQUMsSUFDakRhLG1CQUFtQixDQUFDcEgsTUFBTSxHQUFHLENBQUM7WUFBQSxLQUU1QnFILG1CQUFtQjtjQUFBZ0IsU0FBQSxDQUFBckssSUFBQTtjQUFBO1lBQUE7WUFDZnNKLE9BQU8sR0FBR0YsbUJBQW1CO1lBQUEsTUFDL0J0QixPQUFPLENBQUM5RixNQUFNLEdBQUcsQ0FBQztjQUFBcUksU0FBQSxDQUFBckssSUFBQTtjQUFBO1lBQUE7WUFBQXFLLFNBQUEsQ0FBQXJLLElBQUE7WUFBQSxPQUNGK0QsaUJBQWlCLENBQUN1RixPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7VUFBQTtZQUF6Q0MsR0FBRyxHQUFBYyxTQUFBLENBQUExSSxJQUFBO1lBQ0g2SCxVQUFVLEdBQUdELEdBQUcsT0FBQXpDLE1BQUEsQ0FBT3lDLEdBQUcsSUFBSyxTQUFTO1lBQzlDeEIsWUFBWSxHQUFHM0gsT0FBTyxDQUFDcEMsT0FBTyxDQUFDNkosWUFBWSxFQUFFLFVBQUE0RCxHQUFHO2NBQUEsT0FDOUNBLEdBQUcsQ0FBQ3pOLE9BQU8sQ0FBQyx5REFBeUQsRUFBRXdMLFVBQVUsQ0FBQztZQUFBLENBQ3BGLENBQUM7VUFBQTtZQUdHQyxrQkFBa0IsR0FBR3JGLFdBQVcsQ0FBQy9HLE9BQU8sQ0FBQ3NJLE1BQU0sQ0FBQyxVQUFBQyxHQUFHO2NBQUEsT0FBSUEsR0FBRyxDQUFDQyxTQUFTO1lBQUEsRUFBQyxDQUFDQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDNUU0RCxtQkFBbUIsR0FBRyxDQUFBekcsT0FBTyxhQUFQQSxPQUFPLHVCQUFQQSxPQUFPLENBQUUvSCxFQUFFLE1BQUl1TyxrQkFBa0IsYUFBbEJBLGtCQUFrQix1QkFBbEJBLGtCQUFrQixDQUFFNUQsU0FBUztZQUNsRThELGdCQUFnQixHQUFHRCxtQkFBbUIsR0FBR3RPLFFBQVEsQ0FBQ0MsTUFBTSxDQUFDcU8sbUJBQW1CLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBRyxJQUFJO1lBQ3pGRSxTQUFTLEdBQUdtQixNQUFNLENBQUNXLFFBQVEsQ0FBQ0MsUUFBUSxDQUFDaFAsS0FBSyxDQUFDLHNCQUFzQixDQUFDO1lBQ2xFa04sY0FBYyxHQUFHRCxTQUFTLEdBQUd4TyxRQUFRLENBQUN3TyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcsSUFBSTtZQUM5REUsZ0JBQWdCLEdBQUdILGdCQUFnQixJQUFJRSxjQUFjLElBQUlGLGdCQUFnQixLQUFLRSxjQUFjO1lBRWxHLElBQUlDLGdCQUFnQixFQUFFO2NBQ3BCLElBQUl6QixlQUFlLEVBQUU7Z0JBQ25CLENBQUEwQixxQkFBQSxHQUFBZ0IsTUFBTSxDQUFDYSxtQkFBbUIsY0FBQTdCLHFCQUFBLGdCQUFBQyxzQkFBQSxHQUExQkQscUJBQUEsQ0FBNEI4QiwwQkFBMEIsY0FBQTdCLHNCQUFBLGVBQXREQSxzQkFBQSxDQUFBNUksSUFBQSxDQUFBMkkscUJBQUEsRUFBeURULE9BQU8sQ0FBQztjQUNuRSxDQUFDLE1BQU0sSUFBSWhCLFdBQVcsRUFBRTtnQkFDdEIsQ0FBQTJCLHNCQUFBLEdBQUFjLE1BQU0sQ0FBQ2EsbUJBQW1CLGNBQUEzQixzQkFBQSxnQkFBQUMsc0JBQUEsR0FBMUJELHNCQUFBLENBQTRCNkIsMkJBQTJCLGNBQUE1QixzQkFBQSxlQUF2REEsc0JBQUEsQ0FBQTlJLElBQUEsQ0FBQTZJLHNCQUFBLEVBQTBEWCxPQUFPLENBQUM7Y0FDcEUsQ0FBQyxNQUFNLElBQUlmLGFBQWEsRUFBRTtnQkFDeEIsQ0FBQTRCLHNCQUFBLEdBQUFZLE1BQU0sQ0FBQ2EsbUJBQW1CLGNBQUF6QixzQkFBQSxnQkFBQUMsc0JBQUEsR0FBMUJELHNCQUFBLENBQTRCNEIsK0JBQStCLGNBQUEzQixzQkFBQSxlQUEzREEsc0JBQUEsQ0FBQWhKLElBQUEsQ0FBQStJLHNCQUFBLEVBQThEYixPQUFPLENBQUM7Y0FDeEU7WUFDRjtVQUFDO1lBR0hwRSxVQUFVLENBQUFnRyxhQUFBO2NBQ1JoUSxFQUFFLFlBQUE0TCxNQUFBLENBQVluRyxlQUFlLENBQUU7Y0FDL0JMLE9BQU8sRUFBRXlILFlBQVk7Y0FDckJmLElBQUksRUFBRSxJQUFJQyxJQUFJLENBQUMsQ0FBQztjQUNoQkMsSUFBSSxFQUFFO2dCQUFFaE0sRUFBRSxFQUFFLFdBQVc7Z0JBQUUrQixJQUFJLEVBQUU7Y0FBWSxDQUFDO2NBQzVDa0ssSUFBSSxFQUFFNU4sZUFBZSxDQUFDNk4sU0FBUztjQUMvQjFHLE9BQU8sRUFBUEEsT0FBTztjQUNQQyxlQUFlLEVBQWZBLGVBQWU7Y0FDZkUsV0FBVyxFQUFFQSxXQUFXLElBQUk7WUFBRSxHQUMxQjZILG1CQUFtQixHQUFHO2NBQUVBLG1CQUFtQixFQUFuQkE7WUFBb0IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUN2RCxDQUFDO1lBRUYsS0FBQWYsb0JBQUEsR0FBSWUsbUJBQW1CLGNBQUFmLG9CQUFBLGVBQW5CQSxvQkFBQSxDQUFxQnhMLE9BQU8sRUFBRTtjQUNoQ3hDLGdCQUFnQixDQUFDK08sbUJBQW1CLENBQUN2TSxPQUFPLENBQUMsQ0FDMUM4SixJQUFJLENBQUMsVUFBQStGLFNBQVMsRUFBSTtnQkFDakJ4RyxRQUFRLENBQUNDLGFBQWEsQ0FDcEIsSUFBSUgsV0FBVyxDQUFDLG9DQUFvQyxFQUFFO2tCQUNwREMsTUFBTSxFQUFFO29CQUFFbEMsS0FBSyxFQUFFMkk7a0JBQVU7Z0JBQzdCLENBQUMsQ0FDSCxDQUFDO2NBQ0gsQ0FBQyxDQUFDLFNBQ0ksQ0FBQyxVQUFBQyxHQUFHLEVBQUk7Z0JBQ1ozTixPQUFPLENBQUNDLEtBQUssQ0FBQyx1RUFBdUUsRUFBRTBOLEdBQUcsQ0FBQztjQUM3RixDQUFDLENBQUM7WUFDTjtZQUVBLEtBQUFyRSxrQkFBQSxHQUFJaUIsaUJBQWlCLGNBQUFqQixrQkFBQSxlQUFqQkEsa0JBQUEsQ0FBbUJ6TCxPQUFPLEVBQUU7Y0FDOUJ4QyxnQkFBZ0IsQ0FBQ2tQLGlCQUFpQixDQUFDMU0sT0FBTyxDQUFDLENBQ3hDOEosSUFBSSxDQUFDLFVBQUErRixTQUFTLEVBQUk7Z0JBQ2pCeEcsUUFBUSxDQUFDQyxhQUFhLENBQ3BCLElBQUlILFdBQVcsQ0FBQyxrQ0FBa0MsRUFBRTtrQkFDbERDLE1BQU0sRUFBRTtvQkFBRWxDLEtBQUssRUFBRTJJO2tCQUFVO2dCQUM3QixDQUFDLENBQ0gsQ0FBQztjQUNILENBQUMsQ0FBQyxTQUNJLENBQUMsVUFBQUMsR0FBRyxFQUFJO2dCQUNaM04sT0FBTyxDQUFDQyxLQUFLLENBQUMseURBQXlELEVBQUUwTixHQUFHLENBQUM7Y0FDL0UsQ0FBQyxDQUFDO1lBQ047WUFFQTVILGVBQWUsQ0FBQ2hILE9BQU8sR0FBRyxLQUFLO1lBQy9CLElBQUlpSCxZQUFZLENBQUNqSCxPQUFPLEVBQUU7Y0FDbEJnSSxXQUFXLEdBQUcsSUFBSUMsV0FBVyxDQUFDLGlCQUFpQixDQUFDO2NBQ3RERSxRQUFRLENBQUNDLGFBQWEsQ0FBQ0osV0FBVyxDQUFDO2NBQ25DZixZQUFZLENBQUNqSCxPQUFPLEdBQUcsS0FBSztZQUM5QjtVQUFDO1VBQUE7WUFBQSxPQUFBZ04sU0FBQSxDQUFBcEksSUFBQTtRQUFBO01BQUEsR0FBQXdGLFFBQUE7SUFBQSxDQUNGO0lBQUEsaUJBQUF5RSxHQUFBLEVBQUFDLEdBQUEsRUFBQUMsR0FBQSxFQUFBQyxHQUFBLEVBQUFDLEdBQUE7TUFBQSxPQUFBOUUsS0FBQSxDQUFBbkYsS0FBQSxPQUFBQyxTQUFBO0lBQUE7RUFBQSxLQUNELENBQUM0QyxVQUFVLEVBQUVDLGFBQWEsRUFBRWxDLE9BQU8sRUFBRWMsaUJBQWlCLEVBQUVMLEtBQUssRUFBRUwsS0FBSyxDQUN0RSxDQUFDO0VBRUQsSUFBTWtKLGdCQUFnQixHQUFHL1QsV0FBVyxDQUFDLFlBQU07SUFDekMwTSxVQUFVLENBQUM7TUFDVGhLLEVBQUUsWUFBQTRMLE1BQUEsQ0FBWTlDLGdCQUFnQixDQUFDM0csT0FBTyxlQUFZO01BQ2xEaUQsT0FBTyxFQUFFeUMsQ0FBQyxDQUFDLGdCQUFnQixDQUFDO01BQzVCaUUsSUFBSSxFQUFFLElBQUlDLElBQUksQ0FBQyxDQUFDO01BQ2hCQyxJQUFJLEVBQUU7UUFBRWhNLEVBQUUsRUFBRSxXQUFXO1FBQUUrQixJQUFJLEVBQUU7TUFBWSxDQUFDO01BQzVDa0ssSUFBSSxFQUFFNU4sZUFBZSxDQUFDNk4sU0FBUztNQUMvQm9GLG1CQUFtQixFQUFFO0lBQ3ZCLENBQUMsQ0FBQztJQUNGbkksZUFBZSxDQUFDaEgsT0FBTyxHQUFHLEtBQUs7SUFDL0JvUCxVQUFVLENBQUMsWUFBTTtNQUNmLElBQU1wSCxXQUFXLEdBQUcsSUFBSUMsV0FBVyxDQUFDLGlCQUFpQixDQUFDO01BQ3RERSxRQUFRLENBQUNDLGFBQWEsQ0FBQ0osV0FBVyxDQUFDO0lBQ3JDLENBQUMsRUFBRSxHQUFHLENBQUM7RUFDVCxDQUFDLEVBQUUsQ0FBQ0gsVUFBVSxFQUFFbkMsQ0FBQyxDQUFDLENBQUM7RUFFbkIsSUFBTTJKLHNCQUFzQixHQUFHbFUsV0FBVyxDQUN4QyxVQUFDa1MsUUFBeUIsRUFBRXJMLGtCQUEwQixFQUFLO0lBQ3pELElBQU1pSSxhQUFhLGFBQUFSLE1BQUEsQ0FBYTlDLGdCQUFnQixDQUFDM0csT0FBTyxlQUFZO0lBQ3BFOEgsYUFBYSxDQUFDbUMsYUFBYSxDQUFDOztJQUU1QjtJQUNBcEMsVUFBVSxDQUFDO01BQ1RoSyxFQUFFLGNBQUE0TCxNQUFBLENBQWM0RCxRQUFRLENBQUNpQyxrQkFBa0IsQ0FBRTtNQUM3Q3JNLE9BQU8sRUFBRWpCLGtCQUFrQixJQUFJLEVBQUU7TUFDakMySCxJQUFJLEVBQUUsSUFBSUMsSUFBSSxDQUFDLENBQUM7TUFDaEJDLElBQUksRUFBRTtRQUFFaE0sRUFBRSxFQUFFLFdBQVc7UUFBRStCLElBQUksRUFBRTtNQUFZLENBQUM7TUFDNUNrSyxJQUFJLEVBQUU1TixlQUFlLENBQUM2TixTQUFTO01BQy9Cc0QsUUFBUSxFQUFSQSxRQUFRO01BQ1JJLGNBQWMsRUFBRTtJQUNsQixDQUFDLENBQUM7SUFDRnpHLGVBQWUsQ0FBQ2hILE9BQU8sR0FBRyxLQUFLO0VBQ2pDLENBQUMsRUFDRCxDQUFDNkgsVUFBVSxFQUFFQyxhQUFhLENBQzVCLENBQUM7RUFFRCxJQUFBeUgscUJBQUEsR0FNSTdULHFCQUFxQixDQUFDO01BQ3hCc0ksT0FBTyxFQUFFdUYsaUJBQWlCO01BQzFCaUcsY0FBYyxFQUFFeEYsa0JBQWtCO01BQ2xDeUYsY0FBYyxFQUFFdkYsa0JBQWtCO01BQ2xDd0YsTUFBTSxFQUFFUixnQkFBZ0I7TUFDeEJwTCxrQkFBa0IsRUFBRXVMO0lBQ3RCLENBQUMsQ0FBQztJQVhBTSxPQUFPLEdBQUFKLHFCQUFBLENBQVBJLE9BQU87SUFDSUMsZUFBZSxHQUFBTCxxQkFBQSxDQUExQk0sU0FBUztJQUNUQyxTQUFTLEdBQUFQLHFCQUFBLENBQVRPLFNBQVM7SUFDVEMsY0FBYyxHQUFBUixxQkFBQSxDQUFkUSxjQUFjO0lBQ2RDLGFBQWEsR0FBQVQscUJBQUEsQ0FBYlMsYUFBYTtFQVNmLElBQU1DLGNBQWMsR0FBR3JLLE9BQU87RUFFOUIsSUFBTXNLLFdBQVcsR0FBRy9VLFdBQVc7SUFBQSxJQUFBZ1YsS0FBQSxHQUFBOU8saUJBQUEsY0FBQUMsbUJBQUEsQ0FBQUMsSUFBQSxDQUM3QixTQUFBNk8sU0FDRW5OLE9BQWUsRUFDZnZHLG9CQUE0RCxFQUM1RDJULEtBQWMsRUFDZEMsaUJBQTBCO01BQUEsSUFBQUMsb0JBQUEsRUFBQUMsZUFBQTtNQUFBLElBQUFDLHFCQUFBLEVBQUEzVCxXQUFBLEVBQUFDLE9BQUEsRUFBQTJULFlBQUEsRUFBQUMsc0JBQUEsRUFBQUMsd0JBQUEsRUFBQUMsWUFBQSxFQUFBQyxxQkFBQSxFQUFBQyxPQUFBLEVBQUF6RSxnQkFBQSxFQUFBMEUsb0JBQUEsRUFBQUMsZ0JBQUEsRUFBQXBPLE1BQUEsRUFBQWdHLFFBQUEsRUFBQXFJLFlBQUEsRUFBQUMsd0JBQUEsRUFBQUMsV0FBQTtNQUFBLE9BQUE5UCxtQkFBQSxDQUFBa0IsSUFBQSxXQUFBNk8sU0FBQTtRQUFBLGtCQUFBQSxTQUFBLENBQUEzTyxJQUFBLEdBQUEyTyxTQUFBLENBQUExTyxJQUFBO1VBQUE7WUFBQSxNQUV0QnFFLGVBQWUsQ0FBQ2hILE9BQU8sSUFBSTRQLGVBQWUsSUFBSW5JLGVBQWU7Y0FBQTRKLFNBQUEsQ0FBQTFPLElBQUE7Y0FBQTtZQUFBO1lBQUEsT0FBQTBPLFNBQUEsQ0FBQTlNLE1BQUE7VUFBQTtZQUFBa00scUJBQUEsR0FJaENoVSx3QkFBd0IsQ0FBQ0Msb0JBQW9CLENBQUMsRUFBdkVJLFdBQVcsR0FBQTJULHFCQUFBLENBQVgzVCxXQUFXLEVBQUVDLE9BQU8sR0FBQTBULHFCQUFBLENBQVAxVCxPQUFPO1lBRTVCaUssZUFBZSxDQUFDaEgsT0FBTyxHQUFHLElBQUk7WUFDeEIwUSxZQUFZLEdBQUdsVixNQUFNLENBQUMsQ0FBQztZQUM3Qm1MLGdCQUFnQixDQUFDM0csT0FBTyxHQUFHMFEsWUFBWTtZQUN2QzlKLG1CQUFtQixDQUFDNUcsT0FBTyxHQUFHaUQsT0FBTztZQUVyQyxJQUFJLENBQUM2RCxhQUFhLENBQUM5RyxPQUFPLEVBQUU7Y0FDMUJxRyxLQUFLLENBQUN2SyxNQUFNLENBQUN3VixhQUFhLENBQUM7Y0FDM0J4SyxhQUFhLENBQUM5RyxPQUFPLEdBQUcsSUFBSTtZQUM5Qjs7WUFFQTtZQUNNMlEsc0JBQXNCLEdBQUc1SixXQUFXLENBQUMvRyxPQUFPLENBQUNzSSxNQUFNLENBQUMsVUFBQUMsR0FBRztjQUFBLE9BQUlBLEdBQUcsQ0FBQ0MsU0FBUztZQUFBLEVBQUMsQ0FBQ0MsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBRWhGbUksd0JBQXdCLElBQUFMLG9CQUFBLEdBQUd4SixXQUFXLENBQUMvRyxPQUFPLGNBQUF1USxvQkFBQSxnQkFBQUEsb0JBQUEsR0FBbkJBLG9CQUFBLENBQXNCeEosV0FBVyxDQUFDL0csT0FBTyxDQUFDMkUsTUFBTSxHQUFHLENBQUMsQ0FBQyxjQUFBNEwsb0JBQUEsdUJBQXJEQSxvQkFBQSxDQUF1RHpSLE9BQU8sRUFFL0Y7WUFDQStJLFVBQVUsQ0FBQztjQUNUaEssRUFBRSxjQUFBNEwsTUFBQSxDQUFjOUMsZ0JBQWdCLENBQUMzRyxPQUFPLENBQUU7Y0FDMUNpRCxPQUFPLEVBQVBBLE9BQU87Y0FDUDBHLElBQUksRUFBRSxJQUFJQyxJQUFJLENBQUMsQ0FBQztjQUNoQkMsSUFBSSxFQUFFbkssV0FBVztjQUNqQm9LLElBQUksRUFBRTVOLGVBQWUsQ0FBQ3FWLElBQUk7Y0FDMUJsTyxPQUFPLEVBQUV2RztZQUNYLENBQUMsQ0FBQztZQUVGNkosZ0JBQWdCLENBQUMzRyxPQUFPLEdBQUd4RSxNQUFNLENBQUMsQ0FBQztZQUMvQnFWLFlBQVksR0FBRzVOLE9BQU87WUFFMUIsSUFBSUEsT0FBTyxLQUFLeUMsQ0FBQyxDQUFDLGdDQUFnQyxDQUFDLEVBQUU7Y0FDbkRtTCxZQUFZLFdBQUFwSCxNQUFBLENBQVcvRCxDQUFDLENBQUMsZ0NBQWdDLENBQUMsK0JBQUErRCxNQUFBLENBQ3hELEVBQUFxSCxxQkFBQSxHQUFBL1QsT0FBTyxDQUFDeVUsY0FBYyxjQUFBVixxQkFBQSx1QkFBdEJBLHFCQUFBLENBQXdCVyxVQUFVLE1BQUk3TCxPQUFPLGFBQVBBLE9BQU8sdUJBQVBBLE9BQU8sQ0FBRTZMLFVBQVUsRUFDekQ7WUFDSjtZQUVNVixPQUFPLEdBQUdoSyxXQUFXLENBQUMvRyxPQUFPLENBQUNtTyxHQUFHLENBQUMsVUFBQXVELGNBQWM7Y0FBQSxPQUFLO2dCQUN6RDNPLE9BQU8sRUFBRTJPLGNBQWMsQ0FBQ3pPLE9BQU87Z0JBQy9CNkcsSUFBSSxFQUFFNEgsY0FBYyxDQUFDN0gsSUFBSSxDQUFDaE0sRUFBRSxLQUFLNEIsUUFBUSxDQUFDNUIsRUFBRSxDQUFDOEIsUUFBUSxDQUFDLENBQUMsR0FBR3pELGVBQWUsQ0FBQ3FWLElBQUksR0FBR3JWLGVBQWUsQ0FBQzZOO2NBQ25HLENBQUM7WUFBQSxDQUFDLENBQUMsRUFFSDtZQUNNdUMsZ0JBQWdCLEdBQUcxRyxPQUFPLGFBQVBBLE9BQU8sdUJBQVBBLE9BQU8sQ0FBRS9ILEVBQUU7WUFDOUJtVCxvQkFBb0IsR0FBR0wsc0JBQXNCLGFBQXRCQSxzQkFBc0IsdUJBQXRCQSxzQkFBc0IsQ0FBRW5JLFNBQVM7WUFFMUR5SSxnQkFBK0IsR0FBRyxJQUFJLEVBRTFDO1lBQ0EsSUFBSUQsb0JBQW9CLElBQUksSUFBSSxFQUFFO2NBQzFCbk8sTUFBTSxHQUFHNUUsTUFBTSxDQUFDK1Msb0JBQW9CLENBQUM7Y0FDM0NDLGdCQUFnQixHQUFHaFQsTUFBTSxDQUFDMFQsUUFBUSxDQUFDOU8sTUFBTSxDQUFDLEdBQUdBLE1BQU0sR0FBRyxJQUFJO1lBQzVEO1lBQ0E7WUFBQSxLQUNLLElBQUl5SixnQkFBZ0IsSUFBSSxJQUFJLEVBQUU7Y0FDakMyRSxnQkFBZ0IsR0FBRzNFLGdCQUFnQjtZQUNyQztZQUFDK0UsU0FBQSxDQUFBMU8sSUFBQTtZQUFBLE9BRXNCNEQsYUFBYSxDQUFDLENBQUMwSyxnQkFBZ0IsQ0FBQyxDQUFDO1VBQUE7WUFBbERwSSxRQUFRLEdBQUF3SSxTQUFBLENBQUEvTSxJQUFBO1lBRVI0TSxZQUFZLEdBQUdiLEtBQUssYUFBTEEsS0FBSyxjQUFMQSxLQUFLLEdBQUl0VCxPQUFPLENBQUNzVCxLQUFLO1lBQ3JDYyx3QkFBd0IsR0FBR2IsaUJBQWlCLGFBQWpCQSxpQkFBaUIsY0FBakJBLGlCQUFpQixHQUFJdlQsT0FBTyxDQUFDdVQsaUJBQWlCO1lBRXpFYyxXQUFXLEdBQUF2RCxhQUFBLENBQUFBLGFBQUEsQ0FBQUEsYUFBQSxDQUFBQSxhQUFBLENBQUFBLGFBQUEsQ0FBQUEsYUFBQTtjQUNmNUssT0FBTyxFQUFFNE4sWUFBWTtjQUNyQkUsT0FBTyxFQUFQQSxPQUFPO2NBQ1B2SSxTQUFTLEVBQUV5SSxnQkFBZ0I7Y0FDM0JXLElBQUksRUFBRW5TLFFBQVEsQ0FBQ21TLElBQUk7Y0FDbkJDLE1BQU0sRUFBRXBTLFFBQVEsQ0FBQzVCLEVBQUUsQ0FBQzhCLFFBQVEsQ0FBQyxDQUFDO2NBQzlCRSxTQUFTLEVBQUVKLFFBQVEsQ0FBQ0ksU0FBUztjQUM3QmlTLFFBQVEsRUFBRXJTLFFBQVEsQ0FBQ3FTLFFBQVE7Y0FDM0JDLFNBQVMsRUFBRXRTLFFBQVEsQ0FBQ3VTLFVBQVUsQ0FBQ3JTLFFBQVEsQ0FBQyxDQUFDO2NBQ3pDMEYsTUFBTSxFQUFFd0IsYUFBYSxDQUFDN0csT0FBTztjQUM3QmlTLFNBQVMsRUFBRXRMLGdCQUFnQixDQUFDM0csT0FBTztjQUNuQ2tTLFNBQVMsRUFBRSxDQUFBbE0sS0FBSyxhQUFMQSxLQUFLLHVCQUFMQSxLQUFLLENBQUVwRyxJQUFJLEtBQUksRUFBRTtjQUM1QmQsT0FBTyxFQUFFOFIsd0JBQXdCLEtBQUk1SyxLQUFLLGFBQUxBLEtBQUssdUJBQUxBLEtBQUssQ0FBRW5JLEVBQUUsQ0FBQztjQUMvQ29JLGlCQUFpQixFQUFFcUIsb0JBQW9CLENBQUN0SCxPQUFPO2NBQy9Da0csa0JBQWtCLEVBQUVxQixxQkFBcUIsQ0FBQ3ZIO1lBQU8sR0FDN0M4RixNQUFNLGFBQU5BLE1BQU0sZUFBTkEsTUFBTSxDQUFFakksRUFBRSxHQUFBZ1EsYUFBQTtjQUNSMUUsUUFBUSxFQUFFckQsTUFBTSxDQUFDakk7WUFBRSxHQUFNaUksTUFBTSxDQUFDbEcsSUFBSSxHQUFHO2NBQUVxSixVQUFVLEVBQUVuRCxNQUFNLENBQUNsRztZQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsSUFDekVnRyxPQUFPLGFBQVBBLE9BQU8sZ0JBQUE0SyxlQUFBLEdBQVA1SyxPQUFPLENBQUVFLE1BQU0sY0FBQTBLLGVBQUEsZUFBZkEsZUFBQSxDQUFpQjNTLEVBQUUsR0FBQWdRLGFBQUE7Y0FDZjFFLFFBQVEsRUFBRXZELE9BQU8sQ0FBQ0UsTUFBTSxDQUFDakk7WUFBRSxHQUFNK0gsT0FBTyxDQUFDRSxNQUFNLENBQUNsRyxJQUFJLEdBQUc7Y0FBRXFKLFVBQVUsRUFBRXJELE9BQU8sQ0FBQ0UsTUFBTSxDQUFDbEc7WUFBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQ2pHLENBQUMsQ0FBQyxHQUNKaUosUUFBUSxhQUFSQSxRQUFRLGVBQVJBLFFBQVEsQ0FBRWxFLE1BQU0sR0FBRztjQUFFZ0UsV0FBVyxFQUFFRSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUNqSjtZQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsR0FDekQ5QyxXQUFXLENBQUM2SCxNQUFNLEdBQUcsQ0FBQyxHQUFHO2NBQUU3SCxXQUFXLEVBQVhBO1lBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUM3Q29VLFlBQVksR0FBRztjQUFFYixLQUFLLEVBQUVhO1lBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUMzQ0Msd0JBQXdCLEdBQUc7Y0FBRWIsaUJBQWlCLEVBQUVhO1lBQXlCLENBQUMsR0FBRyxDQUFDLENBQUMsR0FDL0UsQ0FBQW5MLEtBQUssYUFBTEEsS0FBSyx1QkFBTEEsS0FBSyxDQUFFbU0sTUFBTSxLQUFJLElBQUksR0FBRztjQUFFQyxXQUFXLEVBQUVwTSxLQUFLLENBQUNtTTtZQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7WUFHaEV4QyxPQUFPLENBQUN5QixXQUFXLENBQUM7VUFBQTtVQUFBO1lBQUEsT0FBQUMsU0FBQSxDQUFBek0sSUFBQTtRQUFBO01BQUEsR0FBQXdMLFFBQUE7SUFBQSxDQUNyQjtJQUFBLGlCQUFBaUMsR0FBQSxFQUFBQyxHQUFBLEVBQUFDLEdBQUEsRUFBQUMsSUFBQTtNQUFBLE9BQUFyQyxLQUFBLENBQUFuTCxLQUFBLE9BQUFDLFNBQUE7SUFBQTtFQUFBLEtBQ0QsQ0FDRTRDLFVBQVUsRUFDVnhCLEtBQUssRUFDTHNKLE9BQU8sRUFDUC9KLE9BQU8sRUFDUEUsTUFBTSxFQUNOckcsUUFBUSxFQUNSdUcsS0FBSyxFQUNMTixDQUFDLEVBQ0RrSyxlQUFlLEVBQ2ZuSSxlQUFlLEVBQ2Z4QixpQkFBaUIsRUFDakJDLGtCQUFrQixDQUV0QixDQUFDO0VBRUQsSUFBTXVNLGFBQWEsR0FBR3RYLFdBQVcsQ0FDL0IsVUFBQzhTLE1BQWUsRUFBSztJQUNuQixJQUFJLENBQUNySCxtQkFBbUIsQ0FBQzVHLE9BQU8sRUFBRTtJQUVsQyxJQUFJaU8sTUFBTSxDQUFDcFEsRUFBRSxNQUFLK0gsT0FBTyxhQUFQQSxPQUFPLHVCQUFQQSxPQUFPLENBQUUvSCxFQUFFLEdBQUU7TUFDN0JnSSxVQUFVLENBQUNvSSxNQUFNLENBQUM7SUFDcEI7SUFFQSxJQUFJckksT0FBTyxJQUFJZ0IsbUJBQW1CLENBQUM1RyxPQUFPLEVBQUU7TUFDMUMsSUFBTStRLE9BQU8sR0FBR2hLLFdBQVcsQ0FBQy9HLE9BQU8sQ0FBQ21PLEdBQUcsQ0FBQyxVQUFBdUQsY0FBYztRQUFBLE9BQUs7VUFDekQzTyxPQUFPLEVBQUUyTyxjQUFjLENBQUN6TyxPQUFPO1VBQy9CNkcsSUFBSSxFQUFFNEgsY0FBYyxDQUFDN0gsSUFBSSxDQUFDaE0sRUFBRSxLQUFLNEIsUUFBUSxDQUFDNUIsRUFBRSxDQUFDOEIsUUFBUSxDQUFDLENBQUMsR0FBR3pELGVBQWUsQ0FBQ3FWLElBQUksR0FBR3JWLGVBQWUsQ0FBQzZOO1FBQ25HLENBQUM7TUFBQSxDQUFDLENBQUM7TUFFSDRGLE9BQU8sQ0FBQTlCLGFBQUE7UUFDTDVLLE9BQU8sRUFBRTJELG1CQUFtQixDQUFDNUcsT0FBTztRQUNwQytRLE9BQU8sRUFBUEEsT0FBTztRQUNQdkksU0FBUyxFQUFFeUYsTUFBTSxDQUFDcFEsRUFBRTtRQUNwQitULElBQUksRUFBRW5TLFFBQVEsQ0FBQ21TLElBQUk7UUFDbkJDLE1BQU0sRUFBRXBTLFFBQVEsQ0FBQzVCLEVBQUUsQ0FBQzhCLFFBQVEsQ0FBQyxDQUFDO1FBQzlCRSxTQUFTLEVBQUVKLFFBQVEsQ0FBQ0ksU0FBUztRQUM3QmlTLFFBQVEsRUFBRXJTLFFBQVEsQ0FBQ3FTLFFBQVE7UUFDM0JDLFNBQVMsRUFBRXRTLFFBQVEsQ0FBQ3VTLFVBQVUsQ0FBQ3JTLFFBQVEsQ0FBQyxDQUFDO1FBQ3pDMEYsTUFBTSxFQUFFd0IsYUFBYSxDQUFDN0csT0FBTztRQUM3QmlTLFNBQVMsRUFBRXRMLGdCQUFnQixDQUFDM0csT0FBTztRQUNuQ2tTLFNBQVMsRUFBRSxDQUFBbE0sS0FBSyxhQUFMQSxLQUFLLHVCQUFMQSxLQUFLLENBQUVwRyxJQUFJLEtBQUksRUFBRTtRQUM1QmQsT0FBTyxFQUFFLENBQUFrSCxLQUFLLGFBQUxBLEtBQUssdUJBQUxBLEtBQUssQ0FBRW5JLEVBQUUsS0FBSSxFQUFFO1FBQ3hCb0ksaUJBQWlCLEVBQUVxQixvQkFBb0IsQ0FBQ3RILE9BQU87UUFDL0NrRyxrQkFBa0IsRUFBRXFCLHFCQUFxQixDQUFDdkg7TUFBTyxHQUM3QyxDQUFBZ0csS0FBSyxhQUFMQSxLQUFLLHVCQUFMQSxLQUFLLENBQUVtTSxNQUFNLEtBQUksSUFBSSxHQUFHO1FBQUVDLFdBQVcsRUFBRXBNLEtBQUssQ0FBQ21NO01BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUMvRCxDQUFDO0lBQ0o7RUFDRixDQUFDLEVBQ0QsQ0FBQ3ZNLE9BQU8sRUFBRUMsVUFBVSxFQUFFOEosT0FBTyxFQUFFbFEsUUFBUSxFQUFFd0csaUJBQWlCLEVBQUVELEtBQUssQ0FDbkUsQ0FBQztFQUVELElBQU0wTSxjQUFjLEdBQUd2WCxXQUFXO0lBQUEsSUFBQXdYLEtBQUEsR0FBQXRSLGlCQUFBLGNBQUFDLG1CQUFBLENBQUFDLElBQUEsQ0FBQyxTQUFBcVIsU0FBT0MsWUFBc0IsRUFBRUMsYUFBcUI7TUFBQSxJQUFBclIsUUFBQTtNQUFBLE9BQUFILG1CQUFBLENBQUFrQixJQUFBLFdBQUF1USxTQUFBO1FBQUEsa0JBQUFBLFNBQUEsQ0FBQXJRLElBQUEsR0FBQXFRLFNBQUEsQ0FBQXBRLElBQUE7VUFBQTtZQUFBb1EsU0FBQSxDQUFBcFEsSUFBQTtZQUFBLE9BQzlEM0csSUFBSSxDQUFDZ1gsS0FBSyxDQUFDQyxjQUFjLENBQUNILGFBQWEsRUFBRUQsWUFBWSxLQUFLNVcsUUFBUSxDQUFDaVgsU0FBUyxDQUFDO1VBQUE7WUFBOUZ6UixRQUFRLEdBQUFzUixTQUFBLENBQUF6TyxJQUFBO1lBQ2QsSUFBSTdDLFFBQVEsRUFBRTtjQUNac0YsV0FBVyxDQUFDL0csT0FBTyxHQUFHK0csV0FBVyxDQUFDL0csT0FBTyxDQUFDbU8sR0FBRyxDQUFDLFVBQUFsTCxPQUFPLEVBQUk7Z0JBQ3ZELElBQUlBLE9BQU8sQ0FBQ3BGLEVBQUUsS0FBS2lWLGFBQWEsSUFBSTdQLE9BQU8sQ0FBQzZHLElBQUksS0FBSyxXQUFXLEVBQUU7a0JBQ2hFLE9BQUErRCxhQUFBLENBQUFBLGFBQUEsS0FBWTVLLE9BQU87b0JBQUVrUSxVQUFVLEVBQUVOLFlBQVksS0FBSzVXLFFBQVEsQ0FBQ2lYO2tCQUFTO2dCQUN0RTtnQkFDQSxPQUFPalEsT0FBTztjQUNoQixDQUFDLENBQUM7WUFDSjtVQUFDO1VBQUE7WUFBQSxPQUFBOFAsU0FBQSxDQUFBbk8sSUFBQTtRQUFBO01BQUEsR0FBQWdPLFFBQUE7SUFBQSxDQUNGO0lBQUEsaUJBQUFRLElBQUEsRUFBQUMsSUFBQTtNQUFBLE9BQUFWLEtBQUEsQ0FBQTNOLEtBQUEsT0FBQUMsU0FBQTtJQUFBO0VBQUEsS0FBRSxFQUFFLENBQUM7RUFFTixJQUFNcU8sc0JBQXNCLEdBQUduWSxXQUFXO0lBQUEsSUFBQW9ZLEtBQUEsR0FBQWxTLGlCQUFBLGNBQUFDLG1CQUFBLENBQUFDLElBQUEsQ0FDeEMsU0FBQWlTLFNBQ0VDLFNBQW1CLEVBQ25CekYsUUFBOEIsRUFDOUIwRixhQUEyRTtNQUFBLElBQUFDLG1CQUFBLEVBQUF0RyxRQUFBLEVBQUE0RSxTQUFBLEVBQUEyQixVQUFBLEVBQUFDLGVBQUEsRUFBQUMsU0FBQSxFQUFBclMsUUFBQSxFQUFBc1MsRUFBQTtNQUFBLE9BQUF6UyxtQkFBQSxDQUFBa0IsSUFBQSxXQUFBd1IsU0FBQTtRQUFBLGtCQUFBQSxTQUFBLENBQUF0UixJQUFBLEdBQUFzUixTQUFBLENBQUFyUixJQUFBO1VBQUE7WUFBQSxJQUV0RThRLFNBQVMsYUFBVEEsU0FBUyxlQUFUQSxTQUFTLENBQUU5TyxNQUFNO2NBQUFxUCxTQUFBLENBQUFyUixJQUFBO2NBQUE7WUFBQTtZQUNwQjFCLE9BQU8sQ0FBQ0MsS0FBSyxDQUFDLDhDQUE4QyxDQUFDO1lBQUEsT0FBQThTLFNBQUEsQ0FBQXpQLE1BQUE7VUFBQTtZQUkvRDtZQUNNb1AsbUJBQW1CLEdBQUc1TSxXQUFXLENBQUMvRyxPQUFPLENBQUN0QixJQUFJLENBQUMsVUFBQTBPLENBQUM7Y0FBQSxJQUFBNkcsV0FBQTtjQUFBLFFBQUFBLFdBQUEsR0FDcEQ3RyxDQUFDLENBQUNDLFFBQVEsY0FBQTRHLFdBQUEsZ0JBQUFBLFdBQUEsR0FBVkEsV0FBQSxDQUFZM0csZUFBZSxjQUFBMkcsV0FBQSx1QkFBM0JBLFdBQUEsQ0FBNkIxRyxJQUFJLENBQUMsVUFBQW5RLE1BQU07Z0JBQUEsT0FBSXFXLFNBQVMsQ0FBQ2pHLFFBQVEsQ0FBQ3BRLE1BQU0sQ0FBQzhXLFNBQVMsQ0FBQztjQUFBLEVBQUM7WUFBQSxDQUNuRixDQUFDO1lBQUEsTUFFRyxDQUFDUCxtQkFBbUIsSUFBSSxDQUFDQSxtQkFBbUIsQ0FBQ3RHLFFBQVE7Y0FBQTJHLFNBQUEsQ0FBQXJSLElBQUE7Y0FBQTtZQUFBO1lBQ3ZEMUIsT0FBTyxDQUFDQyxLQUFLLENBQUMsc0RBQXNELEVBQUV1UyxTQUFTLENBQUM7WUFBQSxPQUFBTyxTQUFBLENBQUF6UCxNQUFBO1VBQUE7WUFJMUU4SSxRQUFRLEdBQUtzRyxtQkFBbUIsQ0FBaEN0RyxRQUFRO1lBQ1Y0RSxTQUFTLEdBQUcwQixtQkFBbUIsQ0FBQzlWLEVBQUUsRUFDeEM7WUFDTStWLFVBQVUsR0FBR0gsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUMvQjtZQUNBMU0sV0FBVyxDQUFDL0csT0FBTyxHQUFHK0csV0FBVyxDQUFDL0csT0FBTyxDQUFDbU8sR0FBRyxDQUFDLFVBQUFsTCxPQUFPLEVBQUk7Y0FDdkQsSUFBSUEsT0FBTyxDQUFDcEYsRUFBRSxLQUFLb1UsU0FBUyxFQUFFO2dCQUM1QixJQUFNNkIsU0FBUyxHQUFHOUYsUUFBUSxLQUFLLFNBQVMsR0FBRyxVQUFVLEdBQUcsVUFBVTtnQkFDbEUsT0FBQUgsYUFBQSxDQUFBQSxhQUFBLEtBQVk1SyxPQUFPO2tCQUFFd0ssY0FBYyxFQUFFcUc7Z0JBQVM7Y0FDaEQ7Y0FDQSxPQUFPN1EsT0FBTztZQUNoQixDQUFDLENBQUM7O1lBRUY7WUFDTTRRLGVBQWUsR0FBRzlNLFdBQVcsQ0FBQy9HLE9BQU8sQ0FBQ3RCLElBQUksQ0FBQyxVQUFBME8sQ0FBQztjQUFBLE9BQUlBLENBQUMsQ0FBQ3ZQLEVBQUUsS0FBS29VLFNBQVM7WUFBQSxFQUFDO1lBQ3pFLElBQUk0QixlQUFlLEVBQUU7Y0FDYkMsU0FBUyxHQUFHOUYsUUFBUSxLQUFLLFNBQVMsR0FBRyxVQUFVLEdBQUcsVUFBVTtjQUNsRW5HLFVBQVUsQ0FBQWdHLGFBQUEsQ0FBQUEsYUFBQSxLQUFNZ0csZUFBZTtnQkFBRXBHLGNBQWMsRUFBRXFHO2NBQVMsRUFBRSxDQUFDO1lBQy9EOztZQUVBO1lBQ0E5TSxlQUFlLENBQUNoSCxPQUFPLEdBQUcsSUFBSTtZQUM5QjJHLGdCQUFnQixDQUFDM0csT0FBTyxHQUFHeEUsTUFBTSxDQUFDLENBQUM7O1lBRW5DO1lBQ0E2TCxpQkFBaUIsQ0FBQyxVQUFBM0UsSUFBSTtjQUFBLE9BQUFtTCxhQUFBLENBQUFBLGFBQUEsS0FDakJuTCxJQUFJLE9BQUF5UixlQUFBLEtBQ05QLFVBQVUsRUFBR2xPLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQztZQUFBLENBQ2xDLENBQUM7WUFBQXNPLFNBQUEsQ0FBQXRSLElBQUE7WUFBQXNSLFNBQUEsQ0FBQXJSLElBQUE7WUFBQSxPQUdzQjNHLElBQUksQ0FBQ29ZLFlBQVksQ0FBQ0MsY0FBYyxDQUFDO2NBQ3REWixTQUFTLEVBQVRBLFNBQVM7Y0FBRTtjQUNYYSxTQUFTLEVBQUVqSCxRQUFRLENBQUNrSCxVQUFVO2NBQzlCdkcsUUFBUSxFQUFFMEYsYUFBYSxHQUFHLE1BQU0sR0FBRzFGLFFBQVE7Y0FDM0MwRixhQUFhLEVBQWJBLGFBQWE7Y0FDYjVVLE9BQU8sRUFBRSxDQUFBa0gsS0FBSyxhQUFMQSxLQUFLLHVCQUFMQSxLQUFLLENBQUVuSSxFQUFFLEtBQUksRUFBRTtjQUN4QitULElBQUksRUFBRW5TLFFBQVEsQ0FBQ21TO1lBQ2pCLENBQUMsQ0FBQztVQUFBO1lBUEluUSxRQUFRLEdBQUF1UyxTQUFBLENBQUExUCxJQUFBO1lBQUEsSUFTVDdDLFFBQVEsQ0FBQytTLEVBQUU7Y0FBQVIsU0FBQSxDQUFBclIsSUFBQTtjQUFBO1lBQUE7WUFDZDRHLGlCQUFpQixDQUFDLENBQUM7WUFDbkJsQyxpQkFBaUIsQ0FBQyxVQUFBM0UsSUFBSSxFQUFJO2NBQ3hCLElBQU0rUixXQUFXLEdBQUE1RyxhQUFBLEtBQVFuTCxJQUFJLENBQUU7Y0FDL0IsT0FBTytSLFdBQVcsQ0FBQ2IsVUFBVSxDQUFDO2NBQzlCLE9BQU9hLFdBQVc7WUFDcEIsQ0FBQyxDQUFDO1lBQUEsT0FBQVQsU0FBQSxDQUFBelAsTUFBQTtVQUFBO1lBQUF5UCxTQUFBLENBQUFyUixJQUFBO1lBQUEsT0FLRXhCLGdCQUFnQixDQUFDTSxRQUFRLEVBQUVtUyxVQUFVLEVBQUU7Y0FDM0M1USxPQUFPLEVBQUUsU0FBVEEsT0FBT0EsQ0FBR0QsT0FBZSxFQUFLO2dCQUM1QmlILGtCQUFrQixDQUFDakgsT0FBTyxFQUFFLElBQUksRUFBRSxFQUFFLENBQUM7Y0FDdkMsQ0FBQztjQUNERyxNQUFNLEVBQUUsU0FBUkEsTUFBTUEsQ0FBR0QsT0FBZSxFQUFFeVIsZUFBdUIsRUFBSztnQkFDcEQsSUFBTUMsVUFBVSxHQUNkMVIsT0FBTyxDQUFDdUssUUFBUSxDQUFDLGFBQWEsQ0FBQyxJQUFJdkssT0FBTyxDQUFDdUssUUFBUSxDQUFDLFlBQVksQ0FBQyxHQUFHdkssT0FBTyxHQUFHeUMsQ0FBQyxDQUFDLHNCQUFzQixDQUFDO2dCQUN6RzJCLGlCQUFpQixDQUFDLFVBQUEzRSxJQUFJO2tCQUFBLE9BQUFtTCxhQUFBLENBQUFBLGFBQUEsS0FDakJuTCxJQUFJLE9BQUF5UixlQUFBLEtBQ05PLGVBQWUsRUFBR0MsVUFBVTtnQkFBQSxDQUM3QixDQUFDO2NBQ0wsQ0FBQztjQUNEL1EsVUFBVSxFQUFFLFNBQVpBLFVBQVVBLENBQ1JSLFlBQW9CLEVBQ3BCQyxPQUFZLEVBQ1pDLGVBQXVCLEVBQ3ZCb1IsZUFBdUIsRUFDdkJsUixXQUE2QixFQUM3QjFFLE9BQXVCLEVBQ3BCO2dCQUNIb0wsa0JBQWtCLENBQUM5RyxZQUFZLEVBQUVDLE9BQU8sRUFBRUMsZUFBZSxFQUFFRSxXQUFXLEVBQUUxRSxPQUFPLENBQUM7Z0JBQ2hGdUksaUJBQWlCLENBQUMsVUFBQTNFLElBQUksRUFBSTtrQkFDeEIsSUFBTStSLFdBQVcsR0FBQTVHLGFBQUEsS0FBUW5MLElBQUksQ0FBRTtrQkFDL0IsT0FBTytSLFdBQVcsQ0FBQ0MsZUFBZSxDQUFDO2tCQUNuQyxPQUFPRCxXQUFXO2dCQUNwQixDQUFDLENBQUM7Y0FDSixDQUFDO2NBQ0QzUSxrQkFBa0IsRUFBRSxTQUFwQkEsa0JBQWtCQSxDQUFHOFEsZUFBb0IsRUFBRTVTLGtCQUEwQixFQUFFMFMsZUFBdUIsRUFBSztnQkFDakc7Z0JBQ0FyTixpQkFBaUIsQ0FBQyxVQUFBM0UsSUFBSSxFQUFJO2tCQUN4QixJQUFNK1IsV0FBVyxHQUFBNUcsYUFBQSxLQUFRbkwsSUFBSSxDQUFFO2tCQUMvQixPQUFPK1IsV0FBVyxDQUFDQyxlQUFlLENBQUM7a0JBQ25DLE9BQU9ELFdBQVc7Z0JBQ3BCLENBQUMsQ0FBQztnQkFDRnBGLHNCQUFzQixDQUFDdUYsZUFBZSxFQUFxQjVTLGtCQUFrQixDQUFDO2NBQ2hGLENBQUM7Y0FDRGdDLE9BQU8sRUFBRSxTQUFUQSxPQUFPQSxDQUFHOUMsS0FBVSxFQUFFd1QsZUFBdUIsRUFBSztnQkFDaER6VCxPQUFPLENBQUNDLEtBQUssQ0FBQyxZQUFZLEVBQUVBLEtBQUssQ0FBQztnQkFDbENxSSxpQkFBaUIsQ0FBQyxDQUFDO2dCQUNuQmxDLGlCQUFpQixDQUFDLFVBQUEzRSxJQUFJLEVBQUk7a0JBQ3hCLElBQU0rUixXQUFXLEdBQUE1RyxhQUFBLEtBQVFuTCxJQUFJLENBQUU7a0JBQy9CLE9BQU8rUixXQUFXLENBQUNDLGVBQWUsQ0FBQztrQkFDbkMsT0FBT0QsV0FBVztnQkFDcEIsQ0FBQyxDQUFDO2NBQ0o7WUFDRixDQUFDLENBQUM7VUFBQTtZQUFBVCxTQUFBLENBQUFyUixJQUFBO1lBQUE7VUFBQTtZQUFBcVIsU0FBQSxDQUFBdFIsSUFBQTtZQUFBcVIsRUFBQSxHQUFBQyxTQUFBO1lBRUZ6SyxpQkFBaUIsQ0FBQyxDQUFDO1lBQ25CbEMsaUJBQWlCLENBQUMsVUFBQTNFLElBQUksRUFBSTtjQUN4QixJQUFNK1IsV0FBVyxHQUFBNUcsYUFBQSxLQUFRbkwsSUFBSSxDQUFFO2NBQy9CLE9BQU8rUixXQUFXLENBQUNiLFVBQVUsQ0FBQztjQUM5QixPQUFPYSxXQUFXO1lBQ3BCLENBQUMsQ0FBQztVQUFBO1VBQUE7WUFBQSxPQUFBVCxTQUFBLENBQUFwUCxJQUFBO1FBQUE7TUFBQSxHQUFBNE8sUUFBQTtJQUFBLENBRUw7SUFBQSxpQkFBQXFCLElBQUEsRUFBQUMsSUFBQSxFQUFBQyxJQUFBO01BQUEsT0FBQXhCLEtBQUEsQ0FBQXZPLEtBQUEsT0FBQUMsU0FBQTtJQUFBO0VBQUEsS0FDRCxDQUFDeEYsUUFBUSxFQUFFdUcsS0FBSyxFQUFFNkIsVUFBVSxFQUFFMEIsaUJBQWlCLEVBQUVTLGtCQUFrQixFQUFFRSxrQkFBa0IsRUFBRW1GLHNCQUFzQixDQUNqSCxDQUFDO0VBRUQsSUFBTTJGLGNBQWMsR0FBRzdaLFdBQVcsY0FBQWtHLGlCQUFBLGNBQUFDLG1CQUFBLENBQUFDLElBQUEsQ0FBQyxTQUFBMFQsU0FBQTtJQUFBLElBQUFDLHFCQUFBLEVBQUFDLHFCQUFBLEVBQUFDLGdCQUFBLEVBQUFDLGdCQUFBLEVBQUFDLGlCQUFBLEVBQUFDLHFCQUFBLEVBQUFDLGFBQUEsRUFBQXpFLE9BQUE7SUFBQSxPQUFBelAsbUJBQUEsQ0FBQWtCLElBQUEsV0FBQWlULFNBQUE7TUFBQSxrQkFBQUEsU0FBQSxDQUFBL1MsSUFBQSxHQUFBK1MsU0FBQSxDQUFBOVMsSUFBQTtRQUFBO1VBQ2pDLElBQUksQ0FBQ3NFLFlBQVksQ0FBQ2pILE9BQU8sRUFBRTtZQUN6QmlILFlBQVksQ0FBQ2pILE9BQU8sR0FBRyxJQUFJO1VBQzdCO1VBQUMsS0FDR29GLGFBQWE7WUFBQXFRLFNBQUEsQ0FBQTlTLElBQUE7WUFBQTtVQUFBO1VBQUE4UyxTQUFBLENBQUE5UyxJQUFBO1VBQUEsT0FDVGlGLFlBQVksQ0FBQyxDQUFDO1FBQUE7VUFBQTZOLFNBQUEsQ0FBQTlTLElBQUE7VUFBQTtRQUFBO1VBQUEsS0FDWDJDLGtCQUFrQjtZQUFBbVEsU0FBQSxDQUFBOVMsSUFBQTtZQUFBO1VBQUE7VUFDckIyUyxpQkFBaUIsR0FBR0ksT0FBTyxFQUFBUixxQkFBQSxHQUFDNVAsa0JBQWtCLENBQUNyQyxPQUFPLGNBQUFpUyxxQkFBQSx1QkFBMUJBLHFCQUFBLENBQTRCL1UsSUFBSSxDQUFDLENBQUMsQ0FBQztVQUMvRG9WLHFCQUFxQixHQUFHRyxPQUFPLEVBQUFQLHFCQUFBLEdBQUM3UCxrQkFBa0IsQ0FBQ3hJLFdBQVcsY0FBQXFZLHFCQUFBLHVCQUE5QkEscUJBQUEsQ0FBZ0N4USxNQUFNLENBQUM7VUFDdkU2USxhQUFhLEdBQUdFLE9BQU8sQ0FBQ3BRLGtCQUFrQixDQUFDK0ssS0FBSyxDQUFDO1VBQUEsTUFFbkQsQ0FBQ2lGLGlCQUFpQixJQUFJLENBQUNDLHFCQUFxQixJQUFJLENBQUNDLGFBQWE7WUFBQUMsU0FBQSxDQUFBOVMsSUFBQTtZQUFBO1VBQUE7VUFBQSxPQUFBOFMsU0FBQSxDQUFBbFIsTUFBQTtRQUFBO1VBSTVEd00sT0FBTyxHQUFHaEssV0FBVyxDQUFDL0csT0FBTyxDQUFDbU8sR0FBRyxDQUFDLFVBQUF1RCxjQUFjO1lBQUEsT0FBSztjQUN6RDNPLE9BQU8sRUFBRTJPLGNBQWMsQ0FBQ3pPLE9BQU87Y0FDL0I2RyxJQUFJLEVBQUU0SCxjQUFjLENBQUM3SCxJQUFJLENBQUNoTSxFQUFFLEtBQUs0QixRQUFRLENBQUM1QixFQUFFLENBQUM4QixRQUFRLENBQUMsQ0FBQyxHQUFHekQsZUFBZSxDQUFDcVYsSUFBSSxHQUFHclYsZUFBZSxDQUFDNk47WUFDbkcsQ0FBQztVQUFBLENBQUMsQ0FBQztVQUVINEYsT0FBTyxDQUFBOUIsYUFBQSxDQUFBQSxhQUFBLENBQUFBLGFBQUEsQ0FBQUEsYUFBQSxDQUFBQSxhQUFBLENBQUFBLGFBQUEsQ0FBQUEsYUFBQTtZQUNMNUssT0FBTyxFQUFFcUMsa0JBQWtCLENBQUNyQyxPQUFPO1lBQ25DOE4sT0FBTyxFQUFQQSxPQUFPO1lBQ1B2SSxTQUFTLEVBQUUsQ0FBQTVDLE9BQU8sYUFBUEEsT0FBTyx1QkFBUEEsT0FBTyxDQUFFL0gsRUFBRSxLQUFJLElBQUk7WUFDOUIrVCxJQUFJLEVBQUVuUyxRQUFRLENBQUNtUyxJQUFJO1lBQ25CQyxNQUFNLEVBQUVwUyxRQUFRLENBQUM1QixFQUFFLENBQUM4QixRQUFRLENBQUMsQ0FBQztZQUM5QkUsU0FBUyxFQUFFSixRQUFRLENBQUNJLFNBQVM7WUFDN0JpUyxRQUFRLEVBQUVyUyxRQUFRLENBQUNxUyxRQUFRO1lBQzNCQyxTQUFTLEVBQUV0UyxRQUFRLENBQUN1UyxVQUFVLENBQUNyUyxRQUFRLENBQUMsQ0FBQztZQUN6QzBGLE1BQU0sRUFBRXdCLGFBQWEsQ0FBQzdHLE9BQU87WUFDN0JpUyxTQUFTLEVBQUV0TCxnQkFBZ0IsQ0FBQzNHLE9BQU87WUFDbkNrUyxTQUFTLEVBQUVsTSxLQUFLLGFBQUxBLEtBQUssdUJBQUxBLEtBQUssQ0FBRXBHLElBQUs7WUFDdkJkLE9BQU8sRUFBRWtILEtBQUssYUFBTEEsS0FBSyx1QkFBTEEsS0FBSyxDQUFFbkksRUFBRztZQUNuQm9JLGlCQUFpQixFQUFFcUIsb0JBQW9CLENBQUN0SCxPQUFPO1lBQy9Da0csa0JBQWtCLEVBQUVxQixxQkFBcUIsQ0FBQ3ZIO1VBQU8sR0FDN0M4RixNQUFNLGFBQU5BLE1BQU0sZUFBTkEsTUFBTSxDQUFFakksRUFBRSxHQUFHO1lBQUVzTCxRQUFRLEVBQUVyRCxNQUFNLENBQUNqSTtVQUFHLENBQUMsR0FBRytILE9BQU8sYUFBUEEsT0FBTyxnQkFBQXdQLGdCQUFBLEdBQVB4UCxPQUFPLENBQUVFLE1BQU0sY0FBQXNQLGdCQUFBLGVBQWZBLGdCQUFBLENBQWlCdlgsRUFBRSxHQUFHO1lBQUVzTCxRQUFRLEVBQUV2RCxPQUFPLENBQUNFLE1BQU0sQ0FBQ2pJO1VBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUNqRytILE9BQU8sYUFBUEEsT0FBTyxlQUFQQSxPQUFPLENBQUVoRyxJQUFJLEdBQUc7WUFBRStJLFdBQVcsRUFBRS9DLE9BQU8sQ0FBQ2hHO1VBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUNsRGdHLE9BQU8sYUFBUEEsT0FBTyxnQkFBQXlQLGdCQUFBLEdBQVB6UCxPQUFPLENBQUVFLE1BQU0sY0FBQXVQLGdCQUFBLGVBQWZBLGdCQUFBLENBQWlCelYsSUFBSSxHQUNyQjtZQUFFcUosVUFBVSxFQUFFckQsT0FBTyxDQUFDRSxNQUFNLENBQUNsRztVQUFLLENBQUMsR0FDbkNrRyxNQUFNLGFBQU5BLE1BQU0sZUFBTkEsTUFBTSxDQUFFbEcsSUFBSSxHQUNWO1lBQUVxSixVQUFVLEVBQUVuRCxNQUFNLENBQUNsRztVQUFLLENBQUMsR0FDM0IsQ0FBQyxDQUFDLEdBQ0owRixrQkFBa0IsQ0FBQ3hJLFdBQVcsR0FBRztZQUFFQSxXQUFXLEVBQUV3SSxrQkFBa0IsQ0FBQ3hJO1VBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUNyRndJLGtCQUFrQixDQUFDK0ssS0FBSyxHQUFHO1lBQUVBLEtBQUssRUFBRS9LLGtCQUFrQixDQUFDK0s7VUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQ25FL0ssa0JBQWtCLENBQUNnTCxpQkFBaUIsR0FBRztZQUFFQSxpQkFBaUIsRUFBRWhMLGtCQUFrQixDQUFDZ0w7VUFBa0IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUN2RyxDQUFBdEssS0FBSyxhQUFMQSxLQUFLLHVCQUFMQSxLQUFLLENBQUVtTSxNQUFNLEtBQUksSUFBSSxHQUFHO1lBQUVDLFdBQVcsRUFBRXBNLEtBQUssQ0FBQ21NO1VBQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUMvRCxDQUFDO1FBQUE7UUFBQTtVQUFBLE9BQUFzRCxTQUFBLENBQUE3USxJQUFBO01BQUE7SUFBQSxHQUFBcVEsUUFBQTtFQUFBLENBRUwsSUFBRSxDQUNEN1AsYUFBYSxFQUNiRSxrQkFBa0IsRUFDbEJNLE9BQU8sRUFDUEUsTUFBTSxFQUNOckcsUUFBUSxFQUNSdUcsS0FBSyxFQUNMMkosT0FBTyxFQUNQMUosaUJBQWlCLEVBQ2pCQyxrQkFBa0IsQ0FDbkIsQ0FBQztFQUVGLElBQU15UCxTQUFTLEdBQUd4YSxXQUFXLENBQUMsWUFBTTtJQUNsQ3dMLGdCQUFnQixDQUFDM0csT0FBTyxHQUFHeEUsTUFBTSxDQUFDLENBQUM7SUFDbkNvTCxtQkFBbUIsQ0FBQzVHLE9BQU8sR0FBRyxJQUFJO0lBQ2xDNkcsYUFBYSxDQUFDN0csT0FBTyxHQUFHeEUsTUFBTSxDQUFDLENBQUM7SUFDaENzTCxhQUFhLENBQUM5RyxPQUFPLEdBQUcsS0FBSztFQUMvQixDQUFDLEVBQUUsRUFBRSxDQUFDO0VBRU4sSUFBTTRWLGNBQWMsR0FBR3phLFdBQVcsQ0FBQyxZQUFNO0lBQ3ZDNlUsYUFBYSxDQUFDLENBQUM7SUFDZmhKLGVBQWUsQ0FBQ2hILE9BQU8sR0FBRyxLQUFLO0VBQ2pDLENBQUMsRUFBRSxDQUFDZ1EsYUFBYSxDQUFDLENBQUM7RUFFbkIsT0FBTztJQUNMdEksUUFBUSxFQUFSQSxRQUFRO0lBQ1JELGVBQWUsRUFBZkEsZUFBZTtJQUNmRSxxQkFBcUIsRUFBckJBLHFCQUFxQjtJQUNyQmlJLGVBQWUsRUFBZkEsZUFBZTtJQUNmRSxTQUFTLEVBQVRBLFNBQVM7SUFDVEMsY0FBYyxFQUFkQSxjQUFjO0lBQ2QzSSxjQUFjLEVBQWRBLGNBQWM7SUFDZDZJLGNBQWMsRUFBZEEsY0FBYztJQUNkcEosYUFBYSxFQUFFQSxhQUFhLENBQUM3RyxPQUFPO0lBQ3BDMkcsZ0JBQWdCLEVBQUVBLGdCQUFnQixDQUFDM0csT0FBTztJQUUxQ2tRLFdBQVcsRUFBWEEsV0FBVztJQUNYdUMsYUFBYSxFQUFiQSxhQUFhO0lBQ2JDLGNBQWMsRUFBZEEsY0FBYztJQUNkWSxzQkFBc0IsRUFBdEJBLHNCQUFzQjtJQUN0QnZMLFlBQVksRUFBWkEsWUFBWTtJQUNaaU4sY0FBYyxFQUFkQSxjQUFjO0lBQ2RXLFNBQVMsRUFBVEEsU0FBUztJQUNUQyxjQUFjLEVBQWRBLGNBQWM7SUFFZEMsVUFBVSxFQUFFakcsZUFBZSxJQUFJbkk7RUFDakMsQ0FBQztBQUNILENBQUMiLCJpZ25vcmVMaXN0IjpbXX0=
1049
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1c2VDYWxsYmFjayIsInVzZVJlZiIsInVzZUVmZmVjdCIsInVzZVN0YXRlIiwidjQiLCJ1dWlkdjQiLCJ1c2VDaGF0TWVzc2FnZXMiLCJ1c2VPcmNoZXN0cmF0b3JTdHJlYW0iLCJjcmVhdGVTdHJlYW1SZXZlYWxTbW9vdGgiLCJ1c2VUIiwidXNlVXNlciIsInVzZUdsb2JhbENvbnRleHQiLCJFVkVOVFMiLCJ1c2VFdmVudCIsIm1haWEiLCJGZWVkYmFjayIsIkNoYXRIaXN0b3J5Um9sZSIsInVzZVByb2plY3RzIiwidXNlVGFiVGFza0RlZmF1bHQiLCJUQVNLX1VSTF9SRUdFWF9QQVRURVJOIiwiZmV0Y2hBZ2VudERldGFpbCIsIm5vcm1hbGl6ZVNlbmRNZXNzYWdlQXJncyIsImF0dGFjaG1lbnRzT3JPcHRpb25zIiwiX29wdGlvbnMkYXR0YWNobWVudHMiLCJBcnJheSIsImlzQXJyYXkiLCJhdHRhY2htZW50cyIsIm9wdGlvbnMiLCJleHRyYWN0VGFza0lkc0Zyb21EZWxldGVQZW5kaW5nQWN0aW9ucyIsInBlbmRpbmdBY3Rpb25zIiwiaWRzIiwiZm9yRWFjaCIsImFjdGlvbiIsIl90eXBlb2YiLCJhcmdzIiwidG9vbF9hcmdzIiwicmVjIiwidG9vbF9uYW1lIiwiX3JlYyR0YXNrX2lkIiwicmF3IiwidGFza19pZCIsImlkIiwibiIsInBhcnNlSW50IiwiU3RyaW5nIiwiTnVtYmVyIiwiaXNOYU4iLCJwdXNoIiwibGlzdCIsInRhc2tfaWRzIiwidGlkIiwiZXh0cmFjdEFnZW50SWRGcm9tRWRpdEFnZW50UGVuZGluZ0FjdGlvbnMiLCJfcmVjJGFnZW50X2lkIiwiZWRpdEFjdGlvbiIsImZpbmQiLCJhIiwidG9Mb3dlckNhc2UiLCJhZ2VudF9pZCIsImFnZW50SWQiLCJleHRyYWN0QWdlbnRJZEZyb21QZW5kaW5nQWN0aW9uc0J5VG9vbE5hbWUiLCJ0b29sTmFtZSIsIl9yZWYiLCJfcmVjJGFnZW50X2lkMiIsImV4dHJhY3RUYXNrSWRzRnJvbUFzc2lzdGFudERlbGV0aW9uVGV4dCIsInRleHQiLCJsYWJlbGVkIiwibWF0Y2giLCJib2xkIiwidXNlU3RhYmxlQ2FsbGJhY2tzIiwiYXV0aFVzZXIiLCJjdXJyZW50VXNlciIsInRvU3RyaW5nIiwibmFtZSIsImZpcnN0TmFtZSIsImF2YXRhciIsInBpY3R1cmUiLCJjdXJyZW50IiwicGFyc2VTU0VMaW5lIiwibGluZSIsInRyaW0iLCJfbGluZSRzcGxpdCIsInNwbGl0IiwiX2xpbmUkc3BsaXQyIiwiX3NsaWNlZFRvQXJyYXkiLCJldmVudExpbmUiLCJkYXRhTGluZSIsImV2ZW50VHlwZSIsInJlcGxhY2UiLCJkYXRhU3RyIiwiZGF0YSIsIkpTT04iLCJwYXJzZSIsInBhcnNlRXJyb3IiLCJjb25zb2xlIiwiZXJyb3IiLCJwcm9jZXNzU1NFU3RyZWFtIiwiX3JlZjIiLCJfYXN5bmNUb0dlbmVyYXRvciIsIl9yZWdlbmVyYXRvclJ1bnRpbWUiLCJtYXJrIiwiX2NhbGxlZSIsInJlc3BvbnNlIiwidGhyZWFkSWQiLCJjYWxsYmFja3MiLCJfcmVzcG9uc2UkYm9keSIsInJlYWRlciIsImRlY29kZXIiLCJidWZmZXIiLCJhY2N1bXVsYXRlZENvbnRlbnQiLCJpc1N0cmVhbUNvbXBsZXRlIiwiaGFuZGxlTGluZSIsIl95aWVsZCRyZWFkZXIkcmVhZCIsImRvbmUiLCJ2YWx1ZSIsImxpbmVzIiwiaSIsIndyYXAiLCJfY29udGV4dCIsInByZXYiLCJuZXh0IiwiX2hhbmRsZUxpbmUiLCJwYXJzZWQiLCJldmVudERhdGEiLCJjb250ZW50Iiwib25Ub2tlbiIsIm1lc3NhZ2UiLCJvbk5vZGUiLCJfZXZlbnREYXRhJGFnZW50X2lkIiwiZmluYWxDb250ZW50Iiwic291cmNlcyIsIm1lbW9yeVNlc3Npb25JZCIsIm1lbW9yeV9zZXNzaW9uX2lkIiwic3VnZ2VzdGlvbnMiLCJzdWdnZXN0X3JlcGx5IiwiYWdlbnRJZFJhdyIsImNvbXBsZXRlZEFnZW50SWQiLCJvbkNvbXBsZXRlIiwiX2NhbGxiYWNrcyRvbkFwcHJvdmFsIiwib25BcHByb3ZhbFJlcXVpcmVkIiwiY2FsbCIsIm9uRXJyb3IiLCJib2R5IiwiZ2V0UmVhZGVyIiwiRXJyb3IiLCJUZXh0RGVjb2RlciIsInJlYWQiLCJzZW50IiwiYWJydXB0IiwiZGVjb2RlIiwic3RyZWFtIiwicG9wIiwibGVuZ3RoIiwic3RvcCIsIl94IiwiX3gyIiwiX3gzIiwiYXBwbHkiLCJhcmd1bWVudHMiLCJ1c2VDaGF0TWFuYWdlciIsIl9yZWYzIiwiaW5pdGlhbENoYXRJZCIsImNoYXRJZCIsInVzZXJJbml0aWFsTWVzc2FnZSIsIl9yZWYzJGFnZW50cyIsImFnZW50cyIsIl91c2VUIiwidCIsIl91c2VHbG9iYWxDb250ZXh0IiwicHJvamVjdCIsInNldFByb2plY3QiLCJjbGllbnQiLCJzZXRDbGllbnQiLCJhZ2VudCIsImlzV2ViU2VhcmNoQWN0aXZlIiwiaXNEZWVwU2VhcmNoQWN0aXZlIiwiY2hpcHNQcm9qZWN0Iiwic2V0Q2hpcHNQcm9qZWN0IiwiZXZlbnQiLCJfdXNlUHJvamVjdHMiLCJmZXRjaFByb2plY3RzIiwiX3VzZVN0YWJsZUNhbGxiYWNrcyIsIl91c2VUYWJUYXNrRGVmYXVsdCIsImdldFRhYlRhc2tEZWZhdWx0IiwiY3VycmVudE1lc3NhZ2VJZCIsImN1cnJlbnRVc2VyUXVlc3Rpb24iLCJjdXJyZW50Q2hhdElkIiwicmVwb3J0ZWRFdmVudCIsIm1lc3NhZ2VzUmVmIiwiaXNQcm9jZXNzaW5nUmVmIiwiZmlyc3RUaW1lUmVmIiwiX3VzZVN0YXRlIiwiX3VzZVN0YXRlMiIsImFjdGl2ZUxvYWRpbmdzIiwic2V0QWN0aXZlTG9hZGluZ3MiLCJpc1dlYlNlYXJjaEFjdGl2ZVJlZiIsImlzRGVlcFNlYXJjaEFjdGl2ZVJlZiIsIl91c2VDaGF0TWVzc2FnZXMiLCJsb2FkaW5nTWVzc2FnZXMiLCJtZXNzYWdlcyIsImlzTG9hZGluZ01vcmVNZXNzYWdlcyIsImxvYWRNZXNzYWdlcyIsImFkZE1lc3NhZ2UiLCJyZW1vdmVNZXNzYWdlIiwiaGFuZGxlU2Nyb2xsIiwiY3VzdG9tRXZlbnQiLCJDdXN0b21FdmVudCIsImRldGFpbCIsImRvY3VtZW50IiwiZGlzcGF0Y2hFdmVudCIsImxhc3RNc2dXaXRoUHJvamVjdCIsImZpbHRlciIsIm1zZyIsInByb2plY3RJZCIsImF0IiwiX3JlZjQiLCJwcm9qZWN0TmFtZSIsInRoZW4iLCJwcm9qZWN0cyIsImZvdW5kIiwicCIsIl9mb3VuZCRjbGllbnQiLCJjbGllbnROYW1lIiwibGFzdE1zZ1dpdGhDbGllbnQiLCJjbGllbnRJZCIsIl9yZWY1IiwibXNnQ2xpZW50SWQiLCJtc2dDbGllbnROYW1lIiwiaGFuZGxlU3RyZWFtRXJyb3IiLCJlcnJvck1lc3NhZ2UiLCJjb25jYXQiLCJpc0Vycm9yIiwiZGF0ZSIsIkRhdGUiLCJ1c2VyIiwicm9sZSIsIkFTU0lTVEFOVCIsImhhbmRsZVN0cmVhbVVwZGF0ZSIsInRlbXBNZXNzYWdlSWQiLCJoYW5kbGVTdHJlYW1VcGRhdGVGb3JDb250aW51ZVJlZiIsImNvbnRpbnVlU3RyZWFtUmV2ZWFsUmVmIiwiZ2V0Q29udGludWVTdHJlYW1SZXZlYWwiLCJoYW5kbGVTdHJlYW1GaW5pc2giLCJfcmVmNiIsIl9jYWxsZWUyIiwiX3ByZXZpb3VzTWVzc2FnZSRhcHByIiwiX2NyZWF0ZUFnZW50Rm9sbG93VXAiLCJfZWRpdEFnZW50Rm9sbG93VXAiLCJ0YXNrVXJsUmVnZXgiLCJtYXRjaGVzIiwiY29udGVudFRvQWRkIiwicHJldmlvdXNNZXNzYWdlIiwiaGFzQXBwcm92YWxJblByZXZpb3VzTWVzc2FnZSIsIlRBU0tfQ1JFQVRJT05fVE9PTFMiLCJUQVNLX0VESVRfVE9PTFMiLCJUQVNLX0RFTEVURV9UT09MUyIsIndhc1Rhc2tDcmVhdGlvbiIsIndhc1Rhc2tFZGl0Iiwid2FzVGFza0RlbGV0ZSIsIndhc0NyZWF0ZUFnZW50QXBwcm92ZWQiLCJ3YXNDb25maWd1cmVBZ2VudEFjY2Vzc0FwcHJvdmVkIiwiY3JlYXRlQWdlbnRGb2xsb3dVcCIsImNvbmZpZ3VyZWRBZ2VudElkIiwid2FzRWRpdEFnZW50QXBwcm92ZWQiLCJlZGl0QWdlbnRGb2xsb3dVcCIsImZyb21TdHJlYW0iLCJmcm9tQXJncyIsInJlc29sdmVkQWdlbnRJZCIsInRhc2tJZHNGcm9tVXJscyIsInRhc2tJZHNGcm9tRGVsZXRlQXBwcm92YWwiLCJ0YXNrSWRzRnJvbURlbGV0aW9uVGV4dCIsInRhc2tJZHNGb3JEYXNoYm9hcmQiLCJzaG91bGRTeW5jRGFzaGJvYXJkIiwidGFza0lkcyIsInRhYiIsInRhYlNlZ21lbnQiLCJsYXN0UHJvamVjdE1lc3NhZ2UiLCJjb250ZXh0UHJvamVjdElkUmF3IiwiY29udGV4dFByb2plY3RJZCIsInBhdGhNYXRjaCIsInJvdXRlUHJvamVjdElkIiwiaXNPblByb2plY3RSb3V0ZSIsIl93aW5kb3ckbmV3UHJvamVjdERhcyIsIl93aW5kb3ckbmV3UHJvamVjdERhczIiLCJfd2luZG93JG5ld1Byb2plY3REYXMzIiwiX3dpbmRvdyRuZXdQcm9qZWN0RGFzNCIsIl93aW5kb3ckbmV3UHJvamVjdERhczUiLCJfd2luZG93JG5ld1Byb2plY3REYXM2IiwiX2NvbnRleHQyIiwiUmVnRXhwIiwiX3RvQ29uc3VtYWJsZUFycmF5IiwibWF0Y2hBbGwiLCJtIiwiYXBwcm92YWwiLCJwZW5kaW5nX2FjdGlvbnMiLCJzb21lIiwiaW5jbHVkZXMiLCJhcHByb3ZhbFN0YXR1cyIsIndpbmRvdyIsIk1BSUFfQ0hBVF9BSV9GRUFUVVJFX0FDQ0VTU19NVUxUSV9BR0VOVFMiLCJtYXAiLCJ1cmwiLCJsb2NhdGlvbiIsInBhdGhuYW1lIiwibmV3UHJvamVjdERhc2hib2FyZCIsImFkZEV4aXN0aW5nVGFza1RvRGFzaGJvYXJkIiwiZWRpdEV4aXN0aW5nVGFza0luRGFzaGJvYXJkIiwiZGVsZXRlRXhpc3RpbmdUYXNrRnJvbURhc2hib2FyZCIsIl9vYmplY3RTcHJlYWQiLCJjaGF0QWdlbnQiLCJlcnIiLCJfeDQiLCJfeDUiLCJfeDYiLCJfeDciLCJfeDgiLCJoYW5kbGVTdHJlYW1TdG9wIiwiaXNGcm9udGVuZENhbmNlbGxlZCIsInNldFRpbWVvdXQiLCJoYW5kbGVBcHByb3ZhbFJlcXVpcmVkIiwibWFudWFsX2FwcHJvdmFsX2RldGVjdGVkIiwib3JpZ2luYWxfdGhyZWFkX2lkIiwiYXBwcm92YWxfc3RhdHVzIiwiX3VzZU9yY2hlc3RyYXRvclN0cmVhIiwib25TdHJlYW1VcGRhdGUiLCJvbkZpbmlzaFN0cmVhbSIsIm9uU3RvcCIsImFza01haWEiLCJ3YWl0aW5nUmVzcG9uc2UiLCJpc0xvYWRpbmciLCJpc1dyaXRpbmciLCJsb2FkaW5nTWVzc2FnZSIsInN0b3BTdHJlYW1pbmciLCJjdXJyZW50UHJvamVjdCIsInNlbmRNZXNzYWdlIiwiX3JlZjciLCJfY2FsbGVlMyIsImZhcUlkIiwiYWdlbnRTdWdnZXN0aW9uSWQiLCJfbWVzc2FnZXNSZWYkY3VycmVudCIsIl9wcm9qZWN0JGNsaWVudCIsIl9ub3JtYWxpemVTZW5kTWVzc2FnZSIsIm5ld01lc3NhZ2VJZCIsImxhc3RNZXNzYWdlV2l0aFByb2plY3QiLCJjdXJyZW50QWdlbnRGcm9tTWVzc2FnZXMiLCJmaW5hbE1lc3NhZ2UiLCJfb3B0aW9ucyRwcm9qZWN0Q2hhbmciLCJoaXN0b3J5IiwibGFzdE1lc3NhZ2VQcm9qZWN0SWQiLCJwcm9qZWN0VG9SZXF1ZXN0IiwicGF5bG9hZEZhcUlkIiwicGF5bG9hZEFnZW50U3VnZ2VzdGlvbklkIiwicGF5bG9hZERhdGEiLCJfY29udGV4dDMiLCJwbUFpVHlwZWRUZXh0IiwiVVNFUiIsInByb2plY3RDaGFuZ2VkIiwiaW5jb21lVHlwZSIsImhpc3RvcnlNZXNzYWdlIiwiaXNGaW5pdGUiLCJsYW5nIiwidXNlcklkIiwibGFzdE5hbWUiLCJjb21wYW55SWQiLCJjb21wYW55X2lkIiwibWVzc2FnZUlkIiwiYWdlbnROYW1lIiwiZW50aXR5IiwiYWdlbnRFbnRpdHkiLCJfeDkiLCJfeDAiLCJfeDEiLCJfeDEwIiwiY2hhbmdlUHJvamVjdCIsIm9wdGlvbiIsImhhbmRsZUZlZWRiYWNrIiwiX3JlZjgiLCJfY2FsbGVlNCIsImZlZWRiYWNrUHJvcCIsImNoYXRNZXNzYWdlSWQiLCJfY29udGV4dDQiLCJDaGF0cyIsIndhc0hlbHBmdWxDaGF0IiwiVEhVTUJTX1VQIiwid2FzSGVscGZ1bCIsIl94MTEiLCJfeDEyIiwiaGFuZGxlQXBwcm92YWxEZWNpc2lvbiIsIl9yZWY5IiwiX2NhbGxlZTUiLCJ0aHJlYWRJZHMiLCJkZWNpc2lvbiIsImVkaXRlZEFjdGlvbnMiLCJtZXNzYWdlV2l0aEFwcHJvdmFsIiwibG9hZGluZ0tleSIsImV4aXN0aW5nTWVzc2FnZSIsIm5ld1N0YXR1cyIsIl90IiwiX2NvbnRleHQ1IiwiX20kYXBwcm92YWwiLCJ0aHJlYWRfaWQiLCJfZGVmaW5lUHJvcGVydHkiLCJPcmNoZXN0cmF0b3IiLCJjb250aW51ZVRocmVhZCIsInNlc3Npb25JZCIsInNlc3Npb25faWQiLCJvayIsIm5ld0xvYWRpbmdzIiwicmVzZXQiLCJzZXRUYXJnZXQiLCJjdXJyZW50VGhyZWFkSWQiLCJkaXNwbGF5TXNnIiwiY2FuY2VsIiwiYXBwcm92YWxQYXlsb2FkIiwiX3gxMyIsIl94MTQiLCJfeDE1IiwiaW5pdGlhbGl6ZUNoYXQiLCJfY2FsbGVlNiIsIl91c2VySW5pdGlhbE1lc3NhZ2UkbSIsIl91c2VySW5pdGlhbE1lc3NhZ2UkYSIsIl9wcm9qZWN0JGNsaWVudDIiLCJfcHJvamVjdCRjbGllbnQzIiwiaGFzSW5pdGlhbE1lc3NhZ2UiLCJoYXNJbml0aWFsQXR0YWNobWVudHMiLCJoYXNJbml0aWFsRmFxIiwiX2NvbnRleHQ2IiwiQm9vbGVhbiIsInJlc2V0Q2hhdCIsInN0b3BHZW5lcmF0aW9uIiwiaXNEaXNhYmxlZCJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9ob29rcy91c2VDaGF0TWFuYWdlci91c2VDaGF0TWFuYWdlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSByYWRpeCAqL1xuLyogZXNsaW50LWRpc2FibGUgbm8tbmVzdGVkLXRlcm5hcnkgKi9cbi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1ub24tbnVsbC1hc3NlcnRlZC1vcHRpb25hbC1jaGFpbiAqL1xuLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSAqL1xuaW1wb3J0IHsgdXNlQ2FsbGJhY2ssIHVzZVJlZiwgdXNlRWZmZWN0LCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgdjQgYXMgdXVpZHY0IH0gZnJvbSAndXVpZCdcbmltcG9ydCB7IHVzZUNoYXRNZXNzYWdlcyB9IGZyb20gJy4uL3VzZUNoYXRNZXNzYWdlcydcbmltcG9ydCB7IHVzZU9yY2hlc3RyYXRvclN0cmVhbSB9IGZyb20gJy4uL3VzZU9yY2hlc3RyYXRvclN0cmVhbSdcbmltcG9ydCB7IGNyZWF0ZVN0cmVhbVJldmVhbFNtb290aCB9IGZyb20gJy4uL3VzZU9yY2hlc3RyYXRvclN0cmVhbS9zdHJlYW1SZXZlYWxTbW9vdGgnXG5pbXBvcnQgeyB1c2VUIH0gZnJvbSAnLi4vdXNlVCdcbmltcG9ydCB7IEF0dGFjaG1lbnRGaWxlIH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9tb2xlY3VsZXMvQ2hhdEZvb3Rlci9DaGF0Rm9vdGVyJ1xuaW1wb3J0IHsgU2VuZE1lc3NhZ2VPcHRpb25zLCBVc2VDaGF0TWFuYWdlclByb3BzIH0gZnJvbSAnLi91c2VDaGF0TWFuYWdlci5pbnRlcmZhY2UnXG5pbXBvcnQgeyB1c2VVc2VyLCBDT1JVc2VyIH0gZnJvbSAnLi4vLi4vY29udGV4dC9jb3ItdXNlcidcbmltcG9ydCB7IHVzZUdsb2JhbENvbnRleHQgfSBmcm9tICcuLi8uLi9jb250ZXh0L2dsb2JhbC1jb250ZXh0J1xuaW1wb3J0IHsgRVZFTlRTLCB1c2VFdmVudCB9IGZyb20gJy4uL3VzZUV2ZW50J1xuaW1wb3J0IG1haWEgZnJvbSAnLi4vLi4vc2VydmljZXMvbWFpYSdcbmltcG9ydCB7IEZlZWRiYWNrIH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9tb2xlY3VsZXMvTWVzc2FnZUZlZWRiYWNrL01lc3NhZ2VGZWVkYmFjaydcbmltcG9ydCB7IENoYXRNZXNzYWdlLCBDaGF0TWVzc2FnZVVzZXIsIENoYXRIaXN0b3J5Um9sZSwgQXBwcm92YWxSZXF1ZXN0LCBQZW5kaW5nQWN0aW9uIH0gZnJvbSAnLi4vLi4vdHlwZXMvQ2hhdCdcblxuaW1wb3J0IHsgUHJvamVjdCB9IGZyb20gJy4uLy4uL3R5cGVzL1Byb2plY3QnXG5pbXBvcnQgeyB1c2VQcm9qZWN0cyB9IGZyb20gJy4uL3VzZVByb2plY3RzJ1xuaW1wb3J0IHsgdXNlVGFiVGFza0RlZmF1bHQgfSBmcm9tICcuLi91c2VUYWJUYXNrRGVmYXVsdCdcbmltcG9ydCB7IFRBU0tfVVJMX1JFR0VYX1BBVFRFUk4gfSBmcm9tICcuLi8uLi9jb25zdGFudHMvdGFza1VybHMnXG5pbXBvcnQgeyBmZXRjaEFnZW50RGV0YWlsIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvbWFpYS9BZ2VudHMvZmV0Y2hBZ2VudERldGFpbCdcblxudHlwZSBBdHRhY2htZW50c09yT3B0aW9ucyA9IEF0dGFjaG1lbnRGaWxlW10gfCBTZW5kTWVzc2FnZU9wdGlvbnNcblxuY29uc3Qgbm9ybWFsaXplU2VuZE1lc3NhZ2VBcmdzID0gKGF0dGFjaG1lbnRzT3JPcHRpb25zPzogQXR0YWNobWVudHNPck9wdGlvbnMpID0+IHtcbiAgaWYgKEFycmF5LmlzQXJyYXkoYXR0YWNobWVudHNPck9wdGlvbnMpKSB7XG4gICAgcmV0dXJuIHsgYXR0YWNobWVudHM6IGF0dGFjaG1lbnRzT3JPcHRpb25zLCBvcHRpb25zOiB7fSBhcyBTZW5kTWVzc2FnZU9wdGlvbnMgfVxuICB9XG5cbiAgY29uc3Qgb3B0aW9uczogU2VuZE1lc3NhZ2VPcHRpb25zID0gYXR0YWNobWVudHNPck9wdGlvbnMgPz8ge31cbiAgcmV0dXJuIHsgYXR0YWNobWVudHM6IG9wdGlvbnMuYXR0YWNobWVudHMgPz8gW10sIG9wdGlvbnMgfVxufVxuXG4vKiogdGFza19pZCAvIHRhc2tfaWRzIGVuIHBlbmRpbmdfYWN0aW9ucyBkZSBkZWxldGVfKiAobGEgcmVzcHVlc3RhIHB1ZWRlIG5vIGluY2x1aXIgVVJMcyAvdGFza3Mv4oCmL2RldGFpbCkuICovXG5mdW5jdGlvbiBleHRyYWN0VGFza0lkc0Zyb21EZWxldGVQZW5kaW5nQWN0aW9ucyhwZW5kaW5nQWN0aW9uczogUGVuZGluZ0FjdGlvbltdKTogbnVtYmVyW10ge1xuICBjb25zdCBpZHM6IG51bWJlcltdID0gW11cbiAgcGVuZGluZ0FjdGlvbnMuZm9yRWFjaChhY3Rpb24gPT4ge1xuICAgIGlmICghYWN0aW9uIHx8IHR5cGVvZiBhY3Rpb24gIT09ICdvYmplY3QnKSByZXR1cm5cbiAgICBjb25zdCBhcmdzID0gYWN0aW9uLnRvb2xfYXJnc1xuICAgIGlmICghKGFyZ3MgJiYgdHlwZW9mIGFyZ3MgPT09ICdvYmplY3QnICYmICFBcnJheS5pc0FycmF5KGFyZ3MpKSkgcmV0dXJuXG4gICAgY29uc3QgcmVjID0gYXJncyBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxuICAgIGlmIChhY3Rpb24udG9vbF9uYW1lID09PSAnZGVsZXRlX3Rhc2snKSB7XG4gICAgICBjb25zdCByYXcgPSByZWMudGFza19pZCA/PyByZWMuaWRcbiAgICAgIGlmIChyYXcgIT0gbnVsbCkge1xuICAgICAgICBjb25zdCBuID0gcGFyc2VJbnQoU3RyaW5nKHJhdyksIDEwKVxuICAgICAgICBpZiAoIU51bWJlci5pc05hTihuKSkgaWRzLnB1c2gobilcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGFjdGlvbi50b29sX25hbWUgPT09ICdkZWxldGVfdGFza3NfYmF0Y2gnKSB7XG4gICAgICBjb25zdCBsaXN0ID0gcmVjLnRhc2tfaWRzXG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShsaXN0KSkge1xuICAgICAgICBsaXN0LmZvckVhY2godGlkID0+IHtcbiAgICAgICAgICBjb25zdCBuID0gcGFyc2VJbnQoU3RyaW5nKHRpZCksIDEwKVxuICAgICAgICAgIGlmICghTnVtYmVyLmlzTmFOKG4pKSBpZHMucHVzaChuKVxuICAgICAgICB9KVxuICAgICAgfVxuICAgIH1cbiAgfSlcbiAgcmV0dXJuIGlkc1xufVxuXG5mdW5jdGlvbiBleHRyYWN0QWdlbnRJZEZyb21FZGl0QWdlbnRQZW5kaW5nQWN0aW9ucyhwZW5kaW5nQWN0aW9uczogUGVuZGluZ0FjdGlvbltdKTogc3RyaW5nIHwgbnVsbCB7XG4gIGNvbnN0IGVkaXRBY3Rpb24gPSBwZW5kaW5nQWN0aW9ucy5maW5kKGEgPT4gKGEudG9vbF9uYW1lIHx8ICcnKS50b0xvd2VyQ2FzZSgpID09PSAnZWRpdF9hZ2VudCcpXG4gIGlmIChcbiAgICAhZWRpdEFjdGlvbiB8fFxuICAgICFlZGl0QWN0aW9uLnRvb2xfYXJncyB8fFxuICAgIHR5cGVvZiBlZGl0QWN0aW9uLnRvb2xfYXJncyAhPT0gJ29iamVjdCcgfHxcbiAgICBBcnJheS5pc0FycmF5KGVkaXRBY3Rpb24udG9vbF9hcmdzKVxuICApIHtcbiAgICByZXR1cm4gbnVsbFxuICB9XG4gIGNvbnN0IHJlYyA9IGVkaXRBY3Rpb24udG9vbF9hcmdzIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+XG4gIGNvbnN0IHJhdyA9IHJlYy5hZ2VudF9pZCA/PyByZWMuYWdlbnRJZFxuICByZXR1cm4gcmF3ICE9IG51bGwgPyBTdHJpbmcocmF3KSA6IG51bGxcbn1cblxuZnVuY3Rpb24gZXh0cmFjdEFnZW50SWRGcm9tUGVuZGluZ0FjdGlvbnNCeVRvb2xOYW1lKHBlbmRpbmdBY3Rpb25zOiBQZW5kaW5nQWN0aW9uW10sIHRvb2xOYW1lOiBzdHJpbmcpOiBzdHJpbmcgfCBudWxsIHtcbiAgY29uc3QgYWN0aW9uID0gcGVuZGluZ0FjdGlvbnMuZmluZChhID0+IChhLnRvb2xfbmFtZSB8fCAnJykudG9Mb3dlckNhc2UoKSA9PT0gdG9vbE5hbWUudG9Mb3dlckNhc2UoKSlcbiAgaWYgKCFhY3Rpb24gfHwgIWFjdGlvbi50b29sX2FyZ3MgfHwgdHlwZW9mIGFjdGlvbi50b29sX2FyZ3MgIT09ICdvYmplY3QnIHx8IEFycmF5LmlzQXJyYXkoYWN0aW9uLnRvb2xfYXJncykpIHtcbiAgICByZXR1cm4gbnVsbFxuICB9XG4gIGNvbnN0IHJlYyA9IGFjdGlvbi50b29sX2FyZ3MgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj5cbiAgY29uc3QgcmF3ID0gcmVjLmFnZW50X2lkID8/IHJlYy5hZ2VudElkID8/IHJlYy5pZFxuICByZXR1cm4gcmF3ICE9IG51bGwgPyBTdHJpbmcocmF3KSA6IG51bGxcbn1cblxuLyoqIMOabHRpbW8gcmVjdXJzbyBzaSBubyBoYXkgbGlua3MgbmkgdG9vbF9hcmdzIHBhcnNlYWJsZXMgKHAuIGVqLiBcIklEICoqNzU5NzEwNioqXCIpLiAqL1xuZnVuY3Rpb24gZXh0cmFjdFRhc2tJZHNGcm9tQXNzaXN0YW50RGVsZXRpb25UZXh0KHRleHQ6IHN0cmluZyk6IG51bWJlcltdIHtcbiAgY29uc3QgbGFiZWxlZCA9IHRleHQubWF0Y2goL1xcYklEXFxzKlxcKlxcKihcXGQrKVxcKlxcKi9pKVxuICBpZiAobGFiZWxlZCkge1xuICAgIGNvbnN0IG4gPSBwYXJzZUludChsYWJlbGVkWzFdLCAxMClcbiAgICByZXR1cm4gTnVtYmVyLmlzTmFOKG4pID8gW10gOiBbbl1cbiAgfVxuICBjb25zdCBib2xkID0gdGV4dC5tYXRjaCgvXFwqXFwqKFxcZHs1LH0pXFwqXFwqLylcbiAgaWYgKGJvbGQpIHtcbiAgICBjb25zdCBuID0gcGFyc2VJbnQoYm9sZFsxXSwgMTApXG4gICAgcmV0dXJuIE51bWJlci5pc05hTihuKSA/IFtdIDogW25dXG4gIH1cbiAgcmV0dXJuIFtdXG59XG5cbmNvbnN0IHVzZVN0YWJsZUNhbGxiYWNrcyA9IChhdXRoVXNlcjogQ09SVXNlcikgPT4ge1xuICBjb25zdCBjdXJyZW50VXNlciA9IHVzZVJlZjxDaGF0TWVzc2FnZVVzZXI+KHtcbiAgICBpZDogYXV0aFVzZXIuaWQudG9TdHJpbmcoKSxcbiAgICBuYW1lOiBhdXRoVXNlci5maXJzdE5hbWUsXG4gICAgYXZhdGFyOiBhdXRoVXNlci5waWN0dXJlLFxuICB9KVxuXG4gIGlmIChcbiAgICBjdXJyZW50VXNlci5jdXJyZW50LmlkICE9PSBhdXRoVXNlci5pZC50b1N0cmluZygpIHx8XG4gICAgY3VycmVudFVzZXIuY3VycmVudC5uYW1lICE9PSBhdXRoVXNlci5maXJzdE5hbWUgfHxcbiAgICBjdXJyZW50VXNlci5jdXJyZW50LmF2YXRhciAhPT0gYXV0aFVzZXIucGljdHVyZVxuICApIHtcbiAgICBjdXJyZW50VXNlci5jdXJyZW50ID0ge1xuICAgICAgaWQ6IGF1dGhVc2VyLmlkLnRvU3RyaW5nKCksXG4gICAgICBuYW1lOiBhdXRoVXNlci5maXJzdE5hbWUsXG4gICAgICBhdmF0YXI6IGF1dGhVc2VyLnBpY3R1cmUsXG4gICAgfVxuICB9XG4gIHJldHVybiB7XG4gICAgY3VycmVudFVzZXI6IGN1cnJlbnRVc2VyLmN1cnJlbnQsXG4gIH1cbn1cblxuY29uc3QgcGFyc2VTU0VMaW5lID0gKGxpbmU6IHN0cmluZyk6IHsgZXZlbnRUeXBlOiBzdHJpbmc7IGRhdGE6IHVua25vd24gfSB8IG51bGwgPT4ge1xuICBpZiAoIWxpbmUudHJpbSgpKSByZXR1cm4gbnVsbFxuXG4gIGNvbnN0IFtldmVudExpbmUsIGRhdGFMaW5lXSA9IGxpbmUuc3BsaXQoJ1xcbicpXG4gIGlmICghZXZlbnRMaW5lIHx8ICFkYXRhTGluZSkgcmV0dXJuIG51bGxcblxuICBjb25zdCBldmVudFR5cGUgPSBldmVudExpbmUucmVwbGFjZSgnZXZlbnQ6ICcsICcnKS50cmltKClcbiAgY29uc3QgZGF0YVN0ciA9IGRhdGFMaW5lLnJlcGxhY2UoJ2RhdGE6ICcsICcnKS50cmltKClcblxuICB0cnkge1xuICAgIGNvbnN0IGRhdGEgPSBKU09OLnBhcnNlKGRhdGFTdHIpXG4gICAgcmV0dXJuIHsgZXZlbnRUeXBlLCBkYXRhIH1cbiAgfSBjYXRjaCAocGFyc2VFcnJvcikge1xuICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIHBhcnNpbmcgU1NFIGRhdGE6JywgcGFyc2VFcnJvciwgZGF0YVN0cilcbiAgICByZXR1cm4gbnVsbFxuICB9XG59XG5cbmNvbnN0IHByb2Nlc3NTU0VTdHJlYW0gPSBhc3luYyAoXG4gIHJlc3BvbnNlOiBSZXNwb25zZSxcbiAgdGhyZWFkSWQ6IHN0cmluZyxcbiAgY2FsbGJhY2tzOiB7XG4gICAgb25Ub2tlbjogKGNvbnRlbnQ6IHN0cmluZykgPT4gdm9pZFxuICAgIG9uTm9kZTogKG1lc3NhZ2U6IHN0cmluZywgdGhyZWFkSWQ6IHN0cmluZykgPT4gdm9pZFxuICAgIG9uQ29tcGxldGU6IChcbiAgICAgIGZpbmFsQ29udGVudDogc3RyaW5nLFxuICAgICAgc291cmNlczogYW55LFxuICAgICAgbWVtb3J5U2Vzc2lvbklkOiBzdHJpbmcsXG4gICAgICBjdXJyZW50VGhyZWFkSWQ6IHN0cmluZyxcbiAgICAgIHN1Z2dlc3Rpb25zPzogc3RyaW5nW10gfCBudWxsLFxuICAgICAgYWdlbnRJZD86IHN0cmluZyB8IG51bGxcbiAgICApID0+IHZvaWRcbiAgICBvbkVycm9yOiAoZXJyb3I6IGFueSwgdGhyZWFkSWQ6IHN0cmluZykgPT4gdm9pZFxuICAgIG9uQXBwcm92YWxSZXF1aXJlZD86IChhcHByb3ZhbDogYW55LCBhY2N1bXVsYXRlZENvbnRlbnQ6IHN0cmluZywgY3VycmVudFRocmVhZElkOiBzdHJpbmcpID0+IHZvaWRcbiAgfVxuKTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gIGNvbnN0IHJlYWRlciA9IHJlc3BvbnNlLmJvZHk/LmdldFJlYWRlcigpXG4gIGlmICghcmVhZGVyKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdObyByZWFkZXIgYXZhaWxhYmxlJylcbiAgfVxuXG4gIGNvbnN0IGRlY29kZXIgPSBuZXcgVGV4dERlY29kZXIoKVxuICBsZXQgYnVmZmVyID0gJydcbiAgbGV0IGFjY3VtdWxhdGVkQ29udGVudCA9ICcnXG4gIGxldCBpc1N0cmVhbUNvbXBsZXRlID0gZmFsc2VcblxuICBmdW5jdGlvbiBoYW5kbGVMaW5lKGxpbmU6IHN0cmluZykge1xuICAgIGNvbnN0IHBhcnNlZCA9IHBhcnNlU1NFTGluZShsaW5lKVxuICAgIGlmICghcGFyc2VkKSByZXR1cm5cblxuICAgIGNvbnN0IHsgZXZlbnRUeXBlLCBkYXRhIH0gPSBwYXJzZWRcbiAgICBjb25zdCBldmVudERhdGEgPSBkYXRhIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+XG5cbiAgICBpZiAoZXZlbnRUeXBlID09PSAndG9rZW4nKSB7XG4gICAgICBjb25zdCBjb250ZW50ID0gZXZlbnREYXRhLmNvbnRlbnQgYXMgc3RyaW5nXG4gICAgICBhY2N1bXVsYXRlZENvbnRlbnQgKz0gY29udGVudFxuICAgICAgY2FsbGJhY2tzLm9uVG9rZW4oYWNjdW11bGF0ZWRDb250ZW50KVxuICAgIH0gZWxzZSBpZiAoZXZlbnRUeXBlID09PSAnbm9kZScpIHtcbiAgICAgIGlmIChldmVudERhdGEubWVzc2FnZSAmJiB0eXBlb2YgZXZlbnREYXRhLm1lc3NhZ2UgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGNhbGxiYWNrcy5vbk5vZGUoZXZlbnREYXRhLm1lc3NhZ2UsIHRocmVhZElkKVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoZXZlbnRUeXBlID09PSAnY29tcGxldGUnKSB7XG4gICAgICBjb25zdCBmaW5hbENvbnRlbnQgPSAoZXZlbnREYXRhLmNvbnRlbnQgYXMgc3RyaW5nKSB8fCBhY2N1bXVsYXRlZENvbnRlbnRcbiAgICAgIGNvbnN0IHNvdXJjZXMgPSAoZXZlbnREYXRhLnNvdXJjZXMgYXMgdW5rbm93bikgfHwgbnVsbFxuICAgICAgY29uc3QgbWVtb3J5U2Vzc2lvbklkID0gKGV2ZW50RGF0YS5tZW1vcnlfc2Vzc2lvbl9pZCBhcyBzdHJpbmcpIHx8ICcnXG4gICAgICBjb25zdCBzdWdnZXN0aW9ucyA9IEFycmF5LmlzQXJyYXkoZXZlbnREYXRhLnN1Z2dlc3RfcmVwbHkpXG4gICAgICAgID8gKGV2ZW50RGF0YS5zdWdnZXN0X3JlcGx5IGFzIHN0cmluZ1tdKVxuICAgICAgICA6IEFycmF5LmlzQXJyYXkoZXZlbnREYXRhLnN1Z2dlc3Rpb25zKVxuICAgICAgICAgID8gKGV2ZW50RGF0YS5zdWdnZXN0aW9ucyBhcyBzdHJpbmdbXSlcbiAgICAgICAgICA6IG51bGxcbiAgICAgIGNvbnN0IGFnZW50SWRSYXcgPSBldmVudERhdGEuYWdlbnRfaWQgPz8gZXZlbnREYXRhLmFnZW50SWRcbiAgICAgIGNvbnN0IGNvbXBsZXRlZEFnZW50SWQgPSBhZ2VudElkUmF3ICE9IG51bGwgJiYgU3RyaW5nKGFnZW50SWRSYXcpLnRyaW0oKSAhPT0gJycgPyBTdHJpbmcoYWdlbnRJZFJhdykudHJpbSgpIDogbnVsbFxuICAgICAgY2FsbGJhY2tzLm9uQ29tcGxldGUoZmluYWxDb250ZW50LCBzb3VyY2VzLCBtZW1vcnlTZXNzaW9uSWQsIHRocmVhZElkLCBzdWdnZXN0aW9ucywgY29tcGxldGVkQWdlbnRJZClcbiAgICB9IGVsc2UgaWYgKGV2ZW50VHlwZSA9PT0gJ2FwcHJvdmFsX3JlcXVpcmVkJykge1xuICAgICAgY2FsbGJhY2tzLm9uQXBwcm92YWxSZXF1aXJlZD8uKGV2ZW50RGF0YSwgYWNjdW11bGF0ZWRDb250ZW50LCB0aHJlYWRJZClcbiAgICB9IGVsc2UgaWYgKGV2ZW50VHlwZSA9PT0gJ2Vycm9yJykge1xuICAgICAgY2FsbGJhY2tzLm9uRXJyb3IoZXZlbnREYXRhLmVycm9yLCB0aHJlYWRJZClcbiAgICB9XG4gIH1cblxuICB3aGlsZSAoIWlzU3RyZWFtQ29tcGxldGUpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tYXdhaXQtaW4tbG9vcFxuICAgIGNvbnN0IHsgZG9uZSwgdmFsdWUgfSA9IGF3YWl0IHJlYWRlci5yZWFkKClcbiAgICBpZiAoZG9uZSkge1xuICAgICAgaXNTdHJlYW1Db21wbGV0ZSA9IHRydWVcbiAgICAgIGJyZWFrXG4gICAgfVxuXG4gICAgYnVmZmVyICs9IGRlY29kZXIuZGVjb2RlKHZhbHVlLCB7IHN0cmVhbTogdHJ1ZSB9KVxuICAgIGNvbnN0IGxpbmVzID0gYnVmZmVyLnNwbGl0KCdcXG5cXG4nKVxuICAgIGJ1ZmZlciA9IGxpbmVzLnBvcCgpIHx8ICcnXG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxpbmVzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICBoYW5kbGVMaW5lKGxpbmVzW2ldKVxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgY29uc3QgdXNlQ2hhdE1hbmFnZXIgPSAoe1xuICBjaGF0SWQ6IGluaXRpYWxDaGF0SWQsXG4gIHVzZXJJbml0aWFsTWVzc2FnZSxcbiAgb25FcnJvcixcbiAgYWdlbnRzID0gW10sXG59OiBVc2VDaGF0TWFuYWdlclByb3BzKSA9PiB7XG4gIGNvbnN0IHsgdCB9ID0gdXNlVCgpXG4gIGNvbnN0IGF1dGhVc2VyID0gdXNlVXNlcigpXG4gIGNvbnN0IHtcbiAgICBwcm9qZWN0LFxuICAgIHNldFByb2plY3QsXG4gICAgY2xpZW50LFxuICAgIHNldENsaWVudCxcbiAgICBhZ2VudCxcbiAgICBpc1dlYlNlYXJjaEFjdGl2ZSxcbiAgICBpc0RlZXBTZWFyY2hBY3RpdmUsXG4gICAgY2hpcHNQcm9qZWN0LFxuICAgIHNldENoaXBzUHJvamVjdCxcbiAgfSA9IHVzZUdsb2JhbENvbnRleHQoKVxuICBjb25zdCBldmVudCA9IHVzZUV2ZW50KClcbiAgY29uc3QgeyBmZXRjaFByb2plY3RzIH0gPSB1c2VQcm9qZWN0cygpXG4gIGNvbnN0IHsgY3VycmVudFVzZXIgfSA9IHVzZVN0YWJsZUNhbGxiYWNrcyhhdXRoVXNlcilcbiAgY29uc3QgeyBnZXRUYWJUYXNrRGVmYXVsdCB9ID0gdXNlVGFiVGFza0RlZmF1bHQoKVxuICBjb25zdCBjdXJyZW50TWVzc2FnZUlkID0gdXNlUmVmKHV1aWR2NCgpKVxuICBjb25zdCBjdXJyZW50VXNlclF1ZXN0aW9uID0gdXNlUmVmPHN0cmluZyB8IG51bGw+KG51bGwpXG4gIGNvbnN0IGN1cnJlbnRDaGF0SWQgPSB1c2VSZWYoaW5pdGlhbENoYXRJZCB8fCB1dWlkdjQoKSlcbiAgY29uc3QgcmVwb3J0ZWRFdmVudCA9IHVzZVJlZihmYWxzZSlcbiAgY29uc3QgbWVzc2FnZXNSZWYgPSB1c2VSZWY8Q2hhdE1lc3NhZ2VbXT4oW10pXG4gIGNvbnN0IGlzUHJvY2Vzc2luZ1JlZiA9IHVzZVJlZihmYWxzZSlcbiAgY29uc3QgZmlyc3RUaW1lUmVmID0gdXNlUmVmKGZhbHNlKVxuICBjb25zdCBbYWN0aXZlTG9hZGluZ3MsIHNldEFjdGl2ZUxvYWRpbmdzXSA9IHVzZVN0YXRlPFJlY29yZDxzdHJpbmcsIHN0cmluZz4+KHt9KVxuXG4gIGNvbnN0IGlzV2ViU2VhcmNoQWN0aXZlUmVmID0gdXNlUmVmKGlzV2ViU2VhcmNoQWN0aXZlKVxuICBjb25zdCBpc0RlZXBTZWFyY2hBY3RpdmVSZWYgPSB1c2VSZWYoaXNEZWVwU2VhcmNoQWN0aXZlKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaXNXZWJTZWFyY2hBY3RpdmVSZWYuY3VycmVudCA9IGlzV2ViU2VhcmNoQWN0aXZlXG4gICAgaXNEZWVwU2VhcmNoQWN0aXZlUmVmLmN1cnJlbnQgPSBpc0RlZXBTZWFyY2hBY3RpdmVcbiAgfSwgW2lzV2ViU2VhcmNoQWN0aXZlLCBpc0RlZXBTZWFyY2hBY3RpdmVdKVxuXG4gIGNvbnN0IHsgbG9hZGluZ01lc3NhZ2VzLCBtZXNzYWdlcywgaXNMb2FkaW5nTW9yZU1lc3NhZ2VzLCBsb2FkTWVzc2FnZXMsIGFkZE1lc3NhZ2UsIHJlbW92ZU1lc3NhZ2UsIGhhbmRsZVNjcm9sbCB9ID1cbiAgICB1c2VDaGF0TWVzc2FnZXMoe1xuICAgICAgY2hhdElkOiBpbml0aWFsQ2hhdElkIHx8IGN1cnJlbnRDaGF0SWQuY3VycmVudCxcbiAgICAgIGN1cnJlbnRVc2VyLFxuICAgICAgdXNlckluaXRpYWxNZXNzYWdlLFxuICAgICAgb25FcnJvcixcbiAgICAgIGFnZW50cyxcbiAgICB9KVxuXG4gIG1lc3NhZ2VzUmVmLmN1cnJlbnQgPSBtZXNzYWdlc1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgY3VzdG9tRXZlbnQgPSBuZXcgQ3VzdG9tRXZlbnQoJ2NoYXQtbG9hZGluZy1tZXNzYWdlcy1jaGFuZ2VkJywge1xuICAgICAgZGV0YWlsOiB7IGxvYWRpbmdNZXNzYWdlcyB9LFxuICAgIH0pXG4gICAgZG9jdW1lbnQuZGlzcGF0Y2hFdmVudChjdXN0b21FdmVudClcbiAgfSwgW2xvYWRpbmdNZXNzYWdlc10pXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoaW5pdGlhbENoYXRJZCAmJiBpbml0aWFsQ2hhdElkICE9PSBjdXJyZW50Q2hhdElkLmN1cnJlbnQpIHtcbiAgICAgIC8vIExpbXBpYXIgY29udGV4dG8gZ2xvYmFsIGFsIGNhbWJpYXIgZGUgY29udmVyc2FjacOzblxuICAgICAgc2V0UHJvamVjdChudWxsKVxuICAgICAgc2V0Q2xpZW50Py4obnVsbClcbiAgICAgIHNldENoaXBzUHJvamVjdChudWxsKVxuXG4gICAgICBjdXJyZW50Q2hhdElkLmN1cnJlbnQgPSBpbml0aWFsQ2hhdElkXG4gICAgICBjdXJyZW50TWVzc2FnZUlkLmN1cnJlbnQgPSB1dWlkdjQoKVxuICAgICAgY3VycmVudFVzZXJRdWVzdGlvbi5jdXJyZW50ID0gbnVsbFxuICAgICAgcmVwb3J0ZWRFdmVudC5jdXJyZW50ID0gZmFsc2VcbiAgICAgIGlzUHJvY2Vzc2luZ1JlZi5jdXJyZW50ID0gZmFsc2VcblxuICAgICAgbG9hZE1lc3NhZ2VzKClcbiAgICB9XG4gIH0sIFtpbml0aWFsQ2hhdElkLCBwcm9qZWN0LCBzZXRQcm9qZWN0LCBzZXRDbGllbnQsIHNldENoaXBzUHJvamVjdCwgbG9hZE1lc3NhZ2VzXSlcblxuICAvLyBTaW5jcm9uaXphciBjaGlwc1Byb2plY3QgY3VhbmRvIGhheSBtZW5zYWplcyBjb24gcHJvamVjdElkIHBlcm8gY2hpcHNQcm9qZWN0IG5vIHNlIGhhIHNldGVhZG9cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoY2hpcHNQcm9qZWN0IHx8IGxvYWRpbmdNZXNzYWdlcykgcmV0dXJuXG4gICAgY29uc3QgbGFzdE1zZ1dpdGhQcm9qZWN0ID0gbWVzc2FnZXMuZmlsdGVyKG1zZyA9PiBtc2cucHJvamVjdElkKS5hdCgtMSlcbiAgICBjb25zdCB7IHByb2plY3RJZCwgcHJvamVjdE5hbWUgfSA9IGxhc3RNc2dXaXRoUHJvamVjdCB8fCB7fVxuICAgIGlmICghcHJvamVjdElkKSByZXR1cm5cblxuICAgIGZldGNoUHJvamVjdHMocHJvamVjdElkKS50aGVuKHByb2plY3RzID0+IHtcbiAgICAgIGNvbnN0IGZvdW5kID0gcHJvamVjdHM/LmZpbmQocCA9PiBOdW1iZXIocC5pZCkgPT09IE51bWJlcihwcm9qZWN0SWQpKVxuICAgICAgaWYgKGZvdW5kKSB7XG4gICAgICAgIHNldENoaXBzUHJvamVjdCh7XG4gICAgICAgICAgcHJvamVjdE5hbWU6IGZvdW5kLm5hbWUsXG4gICAgICAgICAgY2xpZW50TmFtZTogZm91bmQuY2xpZW50Py5uYW1lIHx8ICcnLFxuICAgICAgICAgIHByb2plY3RJZDogU3RyaW5nKGZvdW5kLmlkKSxcbiAgICAgICAgfSlcbiAgICAgICAgc2V0UHJvamVjdChmb3VuZClcbiAgICAgIH0gZWxzZSBpZiAocHJvamVjdE5hbWUpIHtcbiAgICAgICAgc2V0Q2hpcHNQcm9qZWN0KHtcbiAgICAgICAgICBwcm9qZWN0TmFtZSxcbiAgICAgICAgICBjbGllbnROYW1lOiAnJyxcbiAgICAgICAgICBwcm9qZWN0SWQ6IFN0cmluZyhwcm9qZWN0SWQpLFxuICAgICAgICB9KVxuICAgICAgICBzZXRQcm9qZWN0KHsgaWQ6IE51bWJlcihwcm9qZWN0SWQpLCBuYW1lOiBwcm9qZWN0TmFtZSB9KVxuICAgICAgfVxuICAgIH0pXG4gIH0sIFttZXNzYWdlcywgY2hpcHNQcm9qZWN0LCBsb2FkaW5nTWVzc2FnZXMsIGZldGNoUHJvamVjdHMsIHNldENoaXBzUHJvamVjdCwgc2V0UHJvamVjdF0pXG5cbiAgLy8gU2luY3Jvbml6YXIgY2xpZW50IGN1YW5kbyBoYXkgbWVuc2FqZXMgY29uIGNsaWVudElkIHBlcm8gY2xpZW50IG5vIHNlIGhhIHNldGVhZG9cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoY2xpZW50IHx8IGxvYWRpbmdNZXNzYWdlcykgcmV0dXJuXG4gICAgY29uc3QgbGFzdE1zZ1dpdGhDbGllbnQgPSBtZXNzYWdlcy5maWx0ZXIobXNnID0+IG1zZy5jbGllbnRJZCAhPSBudWxsICYmIG1zZy5jbGllbnROYW1lKS5hdCgtMSlcbiAgICBjb25zdCB7IGNsaWVudElkOiBtc2dDbGllbnRJZCwgY2xpZW50TmFtZTogbXNnQ2xpZW50TmFtZSB9ID0gbGFzdE1zZ1dpdGhDbGllbnQgfHwge31cbiAgICBpZiAobXNnQ2xpZW50SWQgPT0gbnVsbCB8fCAhbXNnQ2xpZW50TmFtZSkgcmV0dXJuXG5cbiAgICBzZXRDbGllbnQ/Lih7IGlkOiBOdW1iZXIobXNnQ2xpZW50SWQpLCBuYW1lOiBtc2dDbGllbnROYW1lIH0pXG4gIH0sIFttZXNzYWdlcywgY2xpZW50LCBsb2FkaW5nTWVzc2FnZXMsIHNldENsaWVudF0pXG5cbiAgY29uc3QgaGFuZGxlU3RyZWFtRXJyb3IgPSB1c2VDYWxsYmFjayhcbiAgICAoZXJyb3JNZXNzYWdlPzogc3RyaW5nKSA9PiB7XG4gICAgICBjb25zdCBtZXNzYWdlID1cbiAgICAgICAgZXJyb3JNZXNzYWdlID09PSBcIkFjY2VzcyBkZW5pZWQ6IFlvdSBkb24ndCBoYXZlIHBlcm1pc3Npb24gdG8gYWNjZXNzIHRoaXMgYWdlbnRcIlxuICAgICAgICAgID8gdCgnY2hhdC5lcnJvckFjY2Vzc0RlbmllZCcpXG4gICAgICAgICAgOiB0KCdjaGF0LmVycm9yJylcblxuICAgICAgYWRkTWVzc2FnZSh7XG4gICAgICAgIGlkOiBgYW5zd2VyLSR7Y3VycmVudE1lc3NhZ2VJZC5jdXJyZW50fWAsXG4gICAgICAgIG1lc3NhZ2UsXG4gICAgICAgIGlzRXJyb3I6IHRydWUsXG4gICAgICAgIGRhdGU6IG5ldyBEYXRlKCksXG4gICAgICAgIHVzZXI6IHsgaWQ6ICdhc3Npc3RhbnQnLCBuYW1lOiAnQXNzaXN0YW50JyB9LFxuICAgICAgICByb2xlOiBDaGF0SGlzdG9yeVJvbGUuQVNTSVNUQU5ULFxuICAgICAgfSlcbiAgICAgIGlzUHJvY2Vzc2luZ1JlZi5jdXJyZW50ID0gZmFsc2VcbiAgICB9LFxuICAgIFthZGRNZXNzYWdlLCB0XVxuICApXG5cbiAgY29uc3QgaGFuZGxlU3RyZWFtVXBkYXRlID0gdXNlQ2FsbGJhY2soXG4gICAgKGNvbnRlbnQ6IHN0cmluZywgc291cmNlczogYW55LCBtZW1vcnlTZXNzaW9uSWQ6IHN0cmluZykgPT4ge1xuICAgICAgY29uc3QgdGVtcE1lc3NhZ2VJZCA9IGBhbnN3ZXItJHtjdXJyZW50TWVzc2FnZUlkLmN1cnJlbnR9LXN0cmVhbWluZ2BcblxuICAgICAgYWRkTWVzc2FnZSh7XG4gICAgICAgIGlkOiB0ZW1wTWVzc2FnZUlkLFxuICAgICAgICBtZXNzYWdlOiBjb250ZW50LFxuICAgICAgICBkYXRlOiBuZXcgRGF0ZSgpLFxuICAgICAgICB1c2VyOiB7IGlkOiAnYXNzaXN0YW50JywgbmFtZTogJ0Fzc2lzdGFudCcgfSxcbiAgICAgICAgcm9sZTogQ2hhdEhpc3RvcnlSb2xlLkFTU0lTVEFOVCxcbiAgICAgICAgc291cmNlcyxcbiAgICAgICAgbWVtb3J5U2Vzc2lvbklkLFxuICAgICAgfSlcbiAgICB9LFxuICAgIFthZGRNZXNzYWdlXVxuICApXG5cbiAgY29uc3QgaGFuZGxlU3RyZWFtVXBkYXRlRm9yQ29udGludWVSZWYgPSB1c2VSZWYoaGFuZGxlU3RyZWFtVXBkYXRlKVxuICBoYW5kbGVTdHJlYW1VcGRhdGVGb3JDb250aW51ZVJlZi5jdXJyZW50ID0gaGFuZGxlU3RyZWFtVXBkYXRlXG5cbiAgY29uc3QgY29udGludWVTdHJlYW1SZXZlYWxSZWYgPSB1c2VSZWY8UmV0dXJuVHlwZTx0eXBlb2YgY3JlYXRlU3RyZWFtUmV2ZWFsU21vb3RoPiB8IG51bGw+KG51bGwpXG4gIGNvbnN0IGdldENvbnRpbnVlU3RyZWFtUmV2ZWFsID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGlmIChjb250aW51ZVN0cmVhbVJldmVhbFJlZi5jdXJyZW50ID09PSBudWxsKSB7XG4gICAgICBjb250aW51ZVN0cmVhbVJldmVhbFJlZi5jdXJyZW50ID0gY3JlYXRlU3RyZWFtUmV2ZWFsU21vb3RoKHRleHQgPT4ge1xuICAgICAgICBoYW5kbGVTdHJlYW1VcGRhdGVGb3JDb250aW51ZVJlZi5jdXJyZW50KHRleHQsIG51bGwsICcnKVxuICAgICAgfSlcbiAgICB9XG4gICAgcmV0dXJuIGNvbnRpbnVlU3RyZWFtUmV2ZWFsUmVmLmN1cnJlbnRcbiAgfSwgW10pXG5cbiAgY29uc3QgaGFuZGxlU3RyZWFtRmluaXNoID0gdXNlQ2FsbGJhY2soXG4gICAgYXN5bmMgKFxuICAgICAgY29udGVudDogc3RyaW5nLFxuICAgICAgc291cmNlczogYW55LFxuICAgICAgbWVtb3J5U2Vzc2lvbklkOiBzdHJpbmcsXG4gICAgICBzdWdnZXN0aW9ucz86IHN0cmluZ1tdIHwgbnVsbCxcbiAgICAgIGNvbXBsZXRlZEFnZW50SWQ/OiBzdHJpbmcgfCBudWxsXG4gICAgKSA9PiB7XG4gICAgICBjb25zdCB0ZW1wTWVzc2FnZUlkID0gYGFuc3dlci0ke2N1cnJlbnRNZXNzYWdlSWQuY3VycmVudH0tc3RyZWFtaW5nYFxuICAgICAgcmVtb3ZlTWVzc2FnZSh0ZW1wTWVzc2FnZUlkKVxuXG4gICAgICAvLyBEZXRlY3RhciB0b2RhcyBsYXMgVVJMcyBkZSB0YXJlYXMgKC4uLi90YXNrcy8xMjMvZGV0YWlsfG1lc3NhZ2V8bWVzc2FnZXN8ZmlsZXN8aGlzdG9yeXxob3VycylcbiAgICAgIGNvbnN0IHRhc2tVcmxSZWdleCA9IG5ldyBSZWdFeHAoVEFTS19VUkxfUkVHRVhfUEFUVEVSTiwgJ2cnKVxuICAgICAgY29uc3QgbWF0Y2hlcyA9IFsuLi5jb250ZW50Lm1hdGNoQWxsKHRhc2tVcmxSZWdleCldXG5cbiAgICAgIGxldCBjb250ZW50VG9BZGQgPSBjb250ZW50XG4gICAgICBjb25zdCBwcmV2aW91c01lc3NhZ2UgPSBtZXNzYWdlc1JlZi5jdXJyZW50LmZpbHRlcihtID0+IG0uaWQgIT09IHRlbXBNZXNzYWdlSWQpLmF0KC0xKVxuICAgICAgY29uc3QgaGFzQXBwcm92YWxJblByZXZpb3VzTWVzc2FnZSA9IHByZXZpb3VzTWVzc2FnZT8uYXBwcm92YWwgIT0gbnVsbFxuICAgICAgY29uc3QgVEFTS19DUkVBVElPTl9UT09MUyA9IFsnY3JlYXRlX3Rhc2snLCAnY3JlYXRlX3Rhc2tzX2JhdGNoJ11cbiAgICAgIGNvbnN0IFRBU0tfRURJVF9UT09MUyA9IFtcbiAgICAgICAgJ2VkaXRfdGFzaycsXG4gICAgICAgICdlZGl0X3Rhc2tzX2JhdGNoJyxcbiAgICAgICAgJ3Rhc2tfYXNzaWduJyxcbiAgICAgICAgJ3Rhc2tfdW5hc3NpZ24nLFxuICAgICAgICAndXBkYXRlX3Rhc2tfdHlwZScsXG4gICAgICAgICd1cGRhdGVfZXN0aW1hdGVkX2hvdXJzJyxcbiAgICAgICAgJ2Fzc2lnbl90YXNrX2xhYmVsJyxcbiAgICAgIF1cbiAgICAgIGNvbnN0IFRBU0tfREVMRVRFX1RPT0xTID0gWydkZWxldGVfdGFzaycsICdkZWxldGVfdGFza3NfYmF0Y2gnXVxuICAgICAgY29uc3QgcGVuZGluZ0FjdGlvbnMgPSBwcmV2aW91c01lc3NhZ2U/LmFwcHJvdmFsPy5wZW5kaW5nX2FjdGlvbnMgfHwgW11cbiAgICAgIGNvbnN0IHdhc1Rhc2tDcmVhdGlvbiA9XG4gICAgICAgIGhhc0FwcHJvdmFsSW5QcmV2aW91c01lc3NhZ2UgJiZcbiAgICAgICAgcGVuZGluZ0FjdGlvbnMuc29tZSgoYWN0aW9uOiBhbnkpID0+IFRBU0tfQ1JFQVRJT05fVE9PTFMuaW5jbHVkZXMoYWN0aW9uLnRvb2xfbmFtZSkpXG4gICAgICBjb25zdCB3YXNUYXNrRWRpdCA9XG4gICAgICAgIGhhc0FwcHJvdmFsSW5QcmV2aW91c01lc3NhZ2UgJiYgcGVuZGluZ0FjdGlvbnMuc29tZSgoYWN0aW9uOiBhbnkpID0+IFRBU0tfRURJVF9UT09MUy5pbmNsdWRlcyhhY3Rpb24udG9vbF9uYW1lKSlcbiAgICAgIGNvbnN0IHdhc1Rhc2tEZWxldGUgPVxuICAgICAgICBoYXNBcHByb3ZhbEluUHJldmlvdXNNZXNzYWdlICYmXG4gICAgICAgIHBlbmRpbmdBY3Rpb25zLnNvbWUoKGFjdGlvbjogYW55KSA9PiBUQVNLX0RFTEVURV9UT09MUy5pbmNsdWRlcyhhY3Rpb24udG9vbF9uYW1lKSlcbiAgICAgIGNvbnN0IHdhc0NyZWF0ZUFnZW50QXBwcm92ZWQgPVxuICAgICAgICBoYXNBcHByb3ZhbEluUHJldmlvdXNNZXNzYWdlICYmXG4gICAgICAgIHByZXZpb3VzTWVzc2FnZT8uYXBwcm92YWxTdGF0dXMgPT09ICdhcHByb3ZlZCcgJiZcbiAgICAgICAgcGVuZGluZ0FjdGlvbnMuc29tZSgoYWN0aW9uOiBhbnkpID0+IGFjdGlvbi50b29sX25hbWUgPT09ICdjcmVhdGVfYWdlbnQnKVxuICAgICAgY29uc3Qgd2FzQ29uZmlndXJlQWdlbnRBY2Nlc3NBcHByb3ZlZCA9XG4gICAgICAgIGhhc0FwcHJvdmFsSW5QcmV2aW91c01lc3NhZ2UgJiZcbiAgICAgICAgcHJldmlvdXNNZXNzYWdlPy5hcHByb3ZhbFN0YXR1cyA9PT0gJ2FwcHJvdmVkJyAmJlxuICAgICAgICBwZW5kaW5nQWN0aW9ucy5zb21lKChhY3Rpb246IGFueSkgPT4gKGFjdGlvbi50b29sX25hbWUgfHwgJycpLnRvTG93ZXJDYXNlKCkgPT09ICdjb25maWd1cmVfYWdlbnRfYWNjZXNzJylcbiAgICAgIGxldCBjcmVhdGVBZ2VudEZvbGxvd1VwOiB7IGFnZW50SWQ6IHN0cmluZyB9IHwgdW5kZWZpbmVkXG4gICAgICBpZiAod2FzQ3JlYXRlQWdlbnRBcHByb3ZlZCAmJiB3aW5kb3cuTUFJQV9DSEFUX0FJX0ZFQVRVUkVfQUNDRVNTX01VTFRJX0FHRU5UUyAmJiBjb21wbGV0ZWRBZ2VudElkPy50cmltKCkpIHtcbiAgICAgICAgY3JlYXRlQWdlbnRGb2xsb3dVcCA9IHsgYWdlbnRJZDogY29tcGxldGVkQWdlbnRJZC50cmltKCkgfVxuICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgd2FzQ29uZmlndXJlQWdlbnRBY2Nlc3NBcHByb3ZlZCAmJlxuICAgICAgICB3aW5kb3cuTUFJQV9DSEFUX0FJX0ZFQVRVUkVfQUNDRVNTX01VTFRJX0FHRU5UUyAmJlxuICAgICAgICAoY29tcGxldGVkQWdlbnRJZD8udHJpbSgpIHx8XG4gICAgICAgICAgZXh0cmFjdEFnZW50SWRGcm9tUGVuZGluZ0FjdGlvbnNCeVRvb2xOYW1lKHBlbmRpbmdBY3Rpb25zLCAnY29uZmlndXJlX2FnZW50X2FjY2VzcycpKVxuICAgICAgKSB7XG4gICAgICAgIGNvbnN0IGNvbmZpZ3VyZWRBZ2VudElkID1cbiAgICAgICAgICBjb21wbGV0ZWRBZ2VudElkPy50cmltKCkgfHxcbiAgICAgICAgICBleHRyYWN0QWdlbnRJZEZyb21QZW5kaW5nQWN0aW9uc0J5VG9vbE5hbWUocGVuZGluZ0FjdGlvbnMsICdjb25maWd1cmVfYWdlbnRfYWNjZXNzJylcbiAgICAgICAgY3JlYXRlQWdlbnRGb2xsb3dVcCA9IHtcbiAgICAgICAgICBhZ2VudElkOiBjb25maWd1cmVkQWdlbnRJZCBhcyBzdHJpbmcsXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgY29uc3Qgd2FzRWRpdEFnZW50QXBwcm92ZWQgPVxuICAgICAgICBoYXNBcHByb3ZhbEluUHJldmlvdXNNZXNzYWdlICYmXG4gICAgICAgIHByZXZpb3VzTWVzc2FnZT8uYXBwcm92YWxTdGF0dXMgPT09ICdhcHByb3ZlZCcgJiZcbiAgICAgICAgcGVuZGluZ0FjdGlvbnMuc29tZSgoYWN0aW9uOiBhbnkpID0+IChhY3Rpb24udG9vbF9uYW1lIHx8ICcnKS50b0xvd2VyQ2FzZSgpID09PSAnZWRpdF9hZ2VudCcpXG5cbiAgICAgIGxldCBlZGl0QWdlbnRGb2xsb3dVcDogeyBhZ2VudElkOiBzdHJpbmcgfSB8IHVuZGVmaW5lZFxuICAgICAgaWYgKHdhc0VkaXRBZ2VudEFwcHJvdmVkKSB7XG4gICAgICAgIGNvbnN0IGZyb21TdHJlYW0gPSBjb21wbGV0ZWRBZ2VudElkPy50cmltKClcbiAgICAgICAgY29uc3QgZnJvbUFyZ3MgPSBleHRyYWN0QWdlbnRJZEZyb21FZGl0QWdlbnRQZW5kaW5nQWN0aW9ucyhwZW5kaW5nQWN0aW9ucylcbiAgICAgICAgY29uc3QgcmVzb2x2ZWRBZ2VudElkID0gZnJvbVN0cmVhbSB8fCBmcm9tQXJnc1xuICAgICAgICBpZiAocmVzb2x2ZWRBZ2VudElkKSB7XG4gICAgICAgICAgZWRpdEFnZW50Rm9sbG93VXAgPSB7IGFnZW50SWQ6IHJlc29sdmVkQWdlbnRJZCB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgY29uc3QgdGFza0lkc0Zyb21VcmxzID0gbWF0Y2hlcy5tYXAobWF0Y2ggPT4gcGFyc2VJbnQobWF0Y2hbMV0sIDEwKSlcbiAgICAgIGNvbnN0IHRhc2tJZHNGcm9tRGVsZXRlQXBwcm92YWwgPSBleHRyYWN0VGFza0lkc0Zyb21EZWxldGVQZW5kaW5nQWN0aW9ucyhwZW5kaW5nQWN0aW9ucylcbiAgICAgIGNvbnN0IHRhc2tJZHNGcm9tRGVsZXRpb25UZXh0ID1cbiAgICAgICAgd2FzVGFza0RlbGV0ZSAmJiB0YXNrSWRzRnJvbVVybHMubGVuZ3RoID09PSAwICYmIHRhc2tJZHNGcm9tRGVsZXRlQXBwcm92YWwubGVuZ3RoID09PSAwXG4gICAgICAgICAgPyBleHRyYWN0VGFza0lkc0Zyb21Bc3Npc3RhbnREZWxldGlvblRleHQoY29udGVudClcbiAgICAgICAgICA6IFtdXG4gICAgICBjb25zdCB0YXNrSWRzRm9yRGFzaGJvYXJkID1cbiAgICAgICAgdGFza0lkc0Zyb21VcmxzLmxlbmd0aCA+IDBcbiAgICAgICAgICA/IHRhc2tJZHNGcm9tVXJsc1xuICAgICAgICAgIDogdGFza0lkc0Zyb21EZWxldGVBcHByb3ZhbC5sZW5ndGggPiAwXG4gICAgICAgICAgICA/IHRhc2tJZHNGcm9tRGVsZXRlQXBwcm92YWxcbiAgICAgICAgICAgIDogdGFza0lkc0Zyb21EZWxldGlvblRleHRcblxuICAgICAgY29uc3Qgc2hvdWxkU3luY0Rhc2hib2FyZCA9XG4gICAgICAgIGhhc0FwcHJvdmFsSW5QcmV2aW91c01lc3NhZ2UgJiZcbiAgICAgICAgKHdhc1Rhc2tDcmVhdGlvbiB8fCB3YXNUYXNrRWRpdCB8fCB3YXNUYXNrRGVsZXRlKSAmJlxuICAgICAgICB0YXNrSWRzRm9yRGFzaGJvYXJkLmxlbmd0aCA+IDBcblxuICAgICAgaWYgKHNob3VsZFN5bmNEYXNoYm9hcmQpIHtcbiAgICAgICAgY29uc3QgdGFza0lkcyA9IHRhc2tJZHNGb3JEYXNoYm9hcmRcbiAgICAgICAgaWYgKG1hdGNoZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGNvbnN0IHRhYiA9IGF3YWl0IGdldFRhYlRhc2tEZWZhdWx0KHRhc2tJZHNbMF0pXG4gICAgICAgICAgY29uc3QgdGFiU2VnbWVudCA9IHRhYiA/IGAvJHt0YWJ9YCA6ICcvZGV0YWlsJ1xuICAgICAgICAgIGNvbnRlbnRUb0FkZCA9IGNvbnRlbnQucmVwbGFjZSh0YXNrVXJsUmVnZXgsIHVybCA9PlxuICAgICAgICAgICAgdXJsLnJlcGxhY2UoL1xcLyhkZXRhaWx8bWVzc2FnZXxtZXNzYWdlc3xmaWxlc3xoaXN0b3J5fGhvdXJzKSg/PSR8XFw/KS8sIHRhYlNlZ21lbnQpXG4gICAgICAgICAgKVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgbGFzdFByb2plY3RNZXNzYWdlID0gbWVzc2FnZXNSZWYuY3VycmVudC5maWx0ZXIobXNnID0+IG1zZy5wcm9qZWN0SWQpLmF0KC0xKVxuICAgICAgICBjb25zdCBjb250ZXh0UHJvamVjdElkUmF3ID0gcHJvamVjdD8uaWQgfHwgbGFzdFByb2plY3RNZXNzYWdlPy5wcm9qZWN0SWRcbiAgICAgICAgY29uc3QgY29udGV4dFByb2plY3RJZCA9IGNvbnRleHRQcm9qZWN0SWRSYXcgPyBwYXJzZUludChTdHJpbmcoY29udGV4dFByb2plY3RJZFJhdyksIDEwKSA6IG51bGxcbiAgICAgICAgY29uc3QgcGF0aE1hdGNoID0gd2luZG93LmxvY2F0aW9uLnBhdGhuYW1lLm1hdGNoKC9eXFwvcHJvamVjdHNcXC8oXFxkKylcXC8vKVxuICAgICAgICBjb25zdCByb3V0ZVByb2plY3RJZCA9IHBhdGhNYXRjaCA/IHBhcnNlSW50KHBhdGhNYXRjaFsxXSwgMTApIDogbnVsbFxuICAgICAgICBjb25zdCBpc09uUHJvamVjdFJvdXRlID0gY29udGV4dFByb2plY3RJZCAmJiByb3V0ZVByb2plY3RJZCAmJiBjb250ZXh0UHJvamVjdElkID09PSByb3V0ZVByb2plY3RJZFxuXG4gICAgICAgIGlmIChpc09uUHJvamVjdFJvdXRlKSB7XG4gICAgICAgICAgaWYgKHdhc1Rhc2tDcmVhdGlvbikge1xuICAgICAgICAgICAgd2luZG93Lm5ld1Byb2plY3REYXNoYm9hcmQ/LmFkZEV4aXN0aW5nVGFza1RvRGFzaGJvYXJkPy4odGFza0lkcylcbiAgICAgICAgICB9IGVsc2UgaWYgKHdhc1Rhc2tFZGl0KSB7XG4gICAgICAgICAgICB3aW5kb3cubmV3UHJvamVjdERhc2hib2FyZD8uZWRpdEV4aXN0aW5nVGFza0luRGFzaGJvYXJkPy4odGFza0lkcylcbiAgICAgICAgICB9IGVsc2UgaWYgKHdhc1Rhc2tEZWxldGUpIHtcbiAgICAgICAgICAgIHdpbmRvdy5uZXdQcm9qZWN0RGFzaGJvYXJkPy5kZWxldGVFeGlzdGluZ1Rhc2tGcm9tRGFzaGJvYXJkPy4odGFza0lkcylcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgYWRkTWVzc2FnZSh7XG4gICAgICAgIGlkOiBgYW5zd2VyLSR7bWVtb3J5U2Vzc2lvbklkfWAsXG4gICAgICAgIG1lc3NhZ2U6IGNvbnRlbnRUb0FkZCxcbiAgICAgICAgZGF0ZTogbmV3IERhdGUoKSxcbiAgICAgICAgdXNlcjogeyBpZDogJ2Fzc2lzdGFudCcsIG5hbWU6ICdBc3Npc3RhbnQnIH0sXG4gICAgICAgIHJvbGU6IENoYXRIaXN0b3J5Um9sZS5BU1NJU1RBTlQsXG4gICAgICAgIHNvdXJjZXMsXG4gICAgICAgIG1lbW9yeVNlc3Npb25JZCxcbiAgICAgICAgc3VnZ2VzdGlvbnM6IHN1Z2dlc3Rpb25zIHx8IFtdLFxuICAgICAgICAuLi4oY3JlYXRlQWdlbnRGb2xsb3dVcCA/IHsgY3JlYXRlQWdlbnRGb2xsb3dVcCB9IDoge30pLFxuICAgICAgfSlcblxuICAgICAgaWYgKGNyZWF0ZUFnZW50Rm9sbG93VXA/LmFnZW50SWQpIHtcbiAgICAgICAgZmV0Y2hBZ2VudERldGFpbChjcmVhdGVBZ2VudEZvbGxvd1VwLmFnZW50SWQpXG4gICAgICAgICAgLnRoZW4oY2hhdEFnZW50ID0+IHtcbiAgICAgICAgICAgIGRvY3VtZW50LmRpc3BhdGNoRXZlbnQoXG4gICAgICAgICAgICAgIG5ldyBDdXN0b21FdmVudCgnbWFpYS1tZXJnZS1jcmVhdGVkLWFnZW50LWludG8tbGlzdCcsIHtcbiAgICAgICAgICAgICAgICBkZXRhaWw6IHsgYWdlbnQ6IGNoYXRBZ2VudCB9LFxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKVxuICAgICAgICAgIH0pXG4gICAgICAgICAgLmNhdGNoKGVyciA9PiB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdbdXNlQ2hhdE1hbmFnZXJdIE5vIHNlIHB1ZG8gYcOxYWRpciBlbCBhZ2VudGUgcmVjacOpbiBjcmVhZG8gYWwgbGlzdGFkbycsIGVycilcbiAgICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICBpZiAoZWRpdEFnZW50Rm9sbG93VXA/LmFnZW50SWQpIHtcbiAgICAgICAgZmV0Y2hBZ2VudERldGFpbChlZGl0QWdlbnRGb2xsb3dVcC5hZ2VudElkKVxuICAgICAgICAgIC50aGVuKGNoYXRBZ2VudCA9PiB7XG4gICAgICAgICAgICBkb2N1bWVudC5kaXNwYXRjaEV2ZW50KFxuICAgICAgICAgICAgICBuZXcgQ3VzdG9tRXZlbnQoJ21haWEtc3luYy1lZGl0ZWQtYWdlbnQtZnJvbS1jaGF0Jywge1xuICAgICAgICAgICAgICAgIGRldGFpbDogeyBhZ2VudDogY2hhdEFnZW50IH0sXG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApXG4gICAgICAgICAgfSlcbiAgICAgICAgICAuY2F0Y2goZXJyID0+IHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1t1c2VDaGF0TWFuYWdlcl0gTm8gc2UgcHVkbyByZWZyZXNjYXIgZWwgYWdlbnRlIGVkaXRhZG8nLCBlcnIpXG4gICAgICAgICAgfSlcbiAgICAgIH1cblxuICAgICAgaXNQcm9jZXNzaW5nUmVmLmN1cnJlbnQgPSBmYWxzZVxuICAgICAgaWYgKGZpcnN0VGltZVJlZi5jdXJyZW50KSB7XG4gICAgICAgIGNvbnN0IGN1c3RvbUV2ZW50ID0gbmV3IEN1c3RvbUV2ZW50KCdyZWZldGNoLXNlc3Npb24nKVxuICAgICAgICBkb2N1bWVudC5kaXNwYXRjaEV2ZW50KGN1c3RvbUV2ZW50KVxuICAgICAgICBmaXJzdFRpbWVSZWYuY3VycmVudCA9IGZhbHNlXG4gICAgICB9XG4gICAgfSxcbiAgICBbYWRkTWVzc2FnZSwgcmVtb3ZlTWVzc2FnZSwgcHJvamVjdCwgZ2V0VGFiVGFza0RlZmF1bHRdXG4gIClcblxuICBjb25zdCBoYW5kbGVTdHJlYW1TdG9wID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGFkZE1lc3NhZ2Uoe1xuICAgICAgaWQ6IGBhbnN3ZXItJHtjdXJyZW50TWVzc2FnZUlkLmN1cnJlbnR9LWNhbmNlbGxlZGAsXG4gICAgICBtZXNzYWdlOiB0KCdjaGF0LmNhbmNlbGxlZCcpLFxuICAgICAgZGF0ZTogbmV3IERhdGUoKSxcbiAgICAgIHVzZXI6IHsgaWQ6ICdhc3Npc3RhbnQnLCBuYW1lOiAnQXNzaXN0YW50JyB9LFxuICAgICAgcm9sZTogQ2hhdEhpc3RvcnlSb2xlLkFTU0lTVEFOVCxcbiAgICAgIGlzRnJvbnRlbmRDYW5jZWxsZWQ6IHRydWUsXG4gICAgfSlcbiAgICBpc1Byb2Nlc3NpbmdSZWYuY3VycmVudCA9IGZhbHNlXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBjb25zdCBjdXN0b21FdmVudCA9IG5ldyBDdXN0b21FdmVudCgncmVmZXRjaC1zZXNzaW9uJylcbiAgICAgIGRvY3VtZW50LmRpc3BhdGNoRXZlbnQoY3VzdG9tRXZlbnQpXG4gICAgfSwgNTAwKVxuICB9LCBbYWRkTWVzc2FnZSwgdF0pXG5cbiAgY29uc3QgaGFuZGxlQXBwcm92YWxSZXF1aXJlZCA9IHVzZUNhbGxiYWNrKFxuICAgIChhcHByb3ZhbDogQXBwcm92YWxSZXF1ZXN0LCBhY2N1bXVsYXRlZENvbnRlbnQ6IHN0cmluZykgPT4ge1xuICAgICAgLy8gU2tpcCBtYW51YWwgYXBwcm92YWwgbWVzc2FnZXMg4oCTIGRvbid0IHJlbmRlciB0aGVtIGluIHRoZSBjaGF0XG4gICAgICBpZiAoYXBwcm92YWwubWFudWFsX2FwcHJvdmFsX2RldGVjdGVkKSByZXR1cm5cblxuICAgICAgY29uc3QgdGVtcE1lc3NhZ2VJZCA9IGBhbnN3ZXItJHtjdXJyZW50TWVzc2FnZUlkLmN1cnJlbnR9LXN0cmVhbWluZ2BcbiAgICAgIHJlbW92ZU1lc3NhZ2UodGVtcE1lc3NhZ2VJZClcblxuICAgICAgLy8gQWRkIGEgbWVzc2FnZSB3aXRoIHRoZSBhcHByb3ZhbCByZXF1ZXN0XG4gICAgICBhZGRNZXNzYWdlKHtcbiAgICAgICAgaWQ6IGBhcHByb3ZhbC0ke2FwcHJvdmFsLm9yaWdpbmFsX3RocmVhZF9pZH1gLFxuICAgICAgICBtZXNzYWdlOiBhY2N1bXVsYXRlZENvbnRlbnQgfHwgJycsXG4gICAgICAgIGRhdGU6IG5ldyBEYXRlKCksXG4gICAgICAgIHVzZXI6IHsgaWQ6ICdhc3Npc3RhbnQnLCBuYW1lOiAnQXNzaXN0YW50JyB9LFxuICAgICAgICByb2xlOiBDaGF0SGlzdG9yeVJvbGUuQVNTSVNUQU5ULFxuICAgICAgICBhcHByb3ZhbCxcbiAgICAgICAgYXBwcm92YWxTdGF0dXM6IGFwcHJvdmFsLmFwcHJvdmFsX3N0YXR1cyB8fCAncGVuZGluZycsXG4gICAgICB9KVxuICAgICAgaXNQcm9jZXNzaW5nUmVmLmN1cnJlbnQgPSBmYWxzZVxuICAgIH0sXG4gICAgW2FkZE1lc3NhZ2UsIHJlbW92ZU1lc3NhZ2VdXG4gIClcblxuICBjb25zdCB7XG4gICAgYXNrTWFpYSxcbiAgICBpc0xvYWRpbmc6IHdhaXRpbmdSZXNwb25zZSxcbiAgICBpc1dyaXRpbmcsXG4gICAgbG9hZGluZ01lc3NhZ2UsXG4gICAgc3RvcFN0cmVhbWluZyxcbiAgfSA9IHVzZU9yY2hlc3RyYXRvclN0cmVhbSh7XG4gICAgb25FcnJvcjogaGFuZGxlU3RyZWFtRXJyb3IsXG4gICAgb25TdHJlYW1VcGRhdGU6IGhhbmRsZVN0cmVhbVVwZGF0ZSxcbiAgICBvbkZpbmlzaFN0cmVhbTogaGFuZGxlU3RyZWFtRmluaXNoLFxuICAgIG9uU3RvcDogaGFuZGxlU3RyZWFtU3RvcCxcbiAgICBvbkFwcHJvdmFsUmVxdWlyZWQ6IGhhbmRsZUFwcHJvdmFsUmVxdWlyZWQsXG4gIH0pXG5cbiAgY29uc3QgY3VycmVudFByb2plY3QgPSBwcm9qZWN0XG5cbiAgY29uc3Qgc2VuZE1lc3NhZ2UgPSB1c2VDYWxsYmFjayhcbiAgICBhc3luYyAoXG4gICAgICBtZXNzYWdlOiBzdHJpbmcsXG4gICAgICBhdHRhY2htZW50c09yT3B0aW9ucz86IEF0dGFjaG1lbnRGaWxlW10gfCBTZW5kTWVzc2FnZU9wdGlvbnMsXG4gICAgICBmYXFJZD86IHN0cmluZyxcbiAgICAgIGFnZW50U3VnZ2VzdGlvbklkPzogc3RyaW5nXG4gICAgKSA9PiB7XG4gICAgICBpZiAoaXNQcm9jZXNzaW5nUmVmLmN1cnJlbnQgfHwgd2FpdGluZ1Jlc3BvbnNlIHx8IGxvYWRpbmdNZXNzYWdlcykge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgY29uc3QgeyBhdHRhY2htZW50cywgb3B0aW9ucyB9ID0gbm9ybWFsaXplU2VuZE1lc3NhZ2VBcmdzKGF0dGFjaG1lbnRzT3JPcHRpb25zKVxuXG4gICAgICBpc1Byb2Nlc3NpbmdSZWYuY3VycmVudCA9IHRydWVcbiAgICAgIGNvbnN0IG5ld01lc3NhZ2VJZCA9IHV1aWR2NCgpXG4gICAgICBjdXJyZW50TWVzc2FnZUlkLmN1cnJlbnQgPSBuZXdNZXNzYWdlSWRcbiAgICAgIGN1cnJlbnRVc2VyUXVlc3Rpb24uY3VycmVudCA9IG1lc3NhZ2VcblxuICAgICAgaWYgKCFyZXBvcnRlZEV2ZW50LmN1cnJlbnQpIHtcbiAgICAgICAgZXZlbnQoRVZFTlRTLnBtQWlUeXBlZFRleHQpXG4gICAgICAgIHJlcG9ydGVkRXZlbnQuY3VycmVudCA9IHRydWVcbiAgICAgIH1cblxuICAgICAgLy8gVmVyaWZpY2FyIHNpIGVsIGNvbnRleHRvIGdsb2JhbCBlc3TDoSBkZXNhY3R1YWxpemFkb1xuICAgICAgY29uc3QgbGFzdE1lc3NhZ2VXaXRoUHJvamVjdCA9IG1lc3NhZ2VzUmVmLmN1cnJlbnQuZmlsdGVyKG1zZyA9PiBtc2cucHJvamVjdElkKS5hdCgtMSlcblxuICAgICAgY29uc3QgY3VycmVudEFnZW50RnJvbU1lc3NhZ2VzID0gbWVzc2FnZXNSZWYuY3VycmVudD8uW21lc3NhZ2VzUmVmLmN1cnJlbnQubGVuZ3RoIC0gMV0/LmFnZW50SWRcblxuICAgICAgLy8gTm8gYWdyZWdhciBwcm9qZWN0SWQgYWwgbWVuc2FqZSBkZWwgdXN1YXJpbyAtIHNlIGRldGVybWluYXLDoSBkZXNwdcOpc1xuICAgICAgYWRkTWVzc2FnZSh7XG4gICAgICAgIGlkOiBgcXVlc3Rpb24tJHtjdXJyZW50TWVzc2FnZUlkLmN1cnJlbnR9YCxcbiAgICAgICAgbWVzc2FnZSxcbiAgICAgICAgZGF0ZTogbmV3IERhdGUoKSxcbiAgICAgICAgdXNlcjogY3VycmVudFVzZXIsXG4gICAgICAgIHJvbGU6IENoYXRIaXN0b3J5Um9sZS5VU0VSLFxuICAgICAgICBzb3VyY2VzOiBhdHRhY2htZW50cyxcbiAgICAgIH0pXG5cbiAgICAgIGN1cnJlbnRNZXNzYWdlSWQuY3VycmVudCA9IHV1aWR2NCgpXG4gICAgICBsZXQgZmluYWxNZXNzYWdlID0gbWVzc2FnZVxuXG4gICAgICBpZiAobWVzc2FnZSA9PT0gdCgncWEuaXRlbXMucmVudGFiaWxpZGFkX3Byb3llY3RvJykpIHtcbiAgICAgICAgZmluYWxNZXNzYWdlID0gYEZBUTogJHt0KCdxYS5pdGVtcy5yZW50YWJpbGlkYWRfcHJveWVjdG8nKX0gLSBUaXBvIGRlIHJlbnRhYmlsaWRhZDogJHtcbiAgICAgICAgICBvcHRpb25zLnByb2plY3RDaGFuZ2VkPy5pbmNvbWVUeXBlIHx8IHByb2plY3Q/LmluY29tZVR5cGVcbiAgICAgICAgfWBcbiAgICAgIH1cblxuICAgICAgY29uc3QgaGlzdG9yeSA9IG1lc3NhZ2VzUmVmLmN1cnJlbnQubWFwKGhpc3RvcnlNZXNzYWdlID0+ICh7XG4gICAgICAgIGNvbnRlbnQ6IGhpc3RvcnlNZXNzYWdlLm1lc3NhZ2UsXG4gICAgICAgIHJvbGU6IGhpc3RvcnlNZXNzYWdlLnVzZXIuaWQgPT09IGF1dGhVc2VyLmlkLnRvU3RyaW5nKCkgPyBDaGF0SGlzdG9yeVJvbGUuVVNFUiA6IENoYXRIaXN0b3J5Um9sZS5BU1NJU1RBTlQsXG4gICAgICB9KSlcblxuICAgICAgLy8gVmVyaWZpY2FyIGNvbnNpc3RlbmNpYSBlbnRyZSBjb250ZXh0byBnbG9iYWwgeSDDumx0aW1vIG1lbnNhamVcbiAgICAgIGNvbnN0IGNvbnRleHRQcm9qZWN0SWQgPSBwcm9qZWN0Py5pZFxuICAgICAgY29uc3QgbGFzdE1lc3NhZ2VQcm9qZWN0SWQgPSBsYXN0TWVzc2FnZVdpdGhQcm9qZWN0Py5wcm9qZWN0SWRcblxuICAgICAgbGV0IHByb2plY3RUb1JlcXVlc3Q6IG51bWJlciB8IG51bGwgPSBudWxsXG5cbiAgICAgIC8vIFNpIGhheSDDumx0aW1vIG1lbnNhamUgY29uIHByb2plY3RJZCwgdXNhcmxvIChtw6FzIGNvbmZpYWJsZSlcbiAgICAgIGlmIChsYXN0TWVzc2FnZVByb2plY3RJZCAhPSBudWxsKSB7XG4gICAgICAgIGNvbnN0IHBhcnNlZCA9IE51bWJlcihsYXN0TWVzc2FnZVByb2plY3RJZClcbiAgICAgICAgcHJvamVjdFRvUmVxdWVzdCA9IE51bWJlci5pc0Zpbml0ZShwYXJzZWQpID8gcGFyc2VkIDogbnVsbFxuICAgICAgfVxuICAgICAgLy8gU2kgbm8gaGF5IMO6bHRpbW8gbWVuc2FqZSwgdXNhciBlbCBjb250ZXh0byBnbG9iYWxcbiAgICAgIGVsc2UgaWYgKGNvbnRleHRQcm9qZWN0SWQgIT0gbnVsbCkge1xuICAgICAgICBwcm9qZWN0VG9SZXF1ZXN0ID0gY29udGV4dFByb2plY3RJZFxuICAgICAgfVxuXG4gICAgICBjb25zdCBwcm9qZWN0cyA9IGF3YWl0IGZldGNoUHJvamVjdHMoW3Byb2plY3RUb1JlcXVlc3RdKVxuXG4gICAgICBjb25zdCBwYXlsb2FkRmFxSWQgPSBmYXFJZCA/PyBvcHRpb25zLmZhcUlkXG4gICAgICBjb25zdCBwYXlsb2FkQWdlbnRTdWdnZXN0aW9uSWQgPSBhZ2VudFN1Z2dlc3Rpb25JZCA/PyBvcHRpb25zLmFnZW50U3VnZ2VzdGlvbklkXG5cbiAgICAgIGNvbnN0IHBheWxvYWREYXRhID0ge1xuICAgICAgICBtZXNzYWdlOiBmaW5hbE1lc3NhZ2UsXG4gICAgICAgIGhpc3RvcnksXG4gICAgICAgIHByb2plY3RJZDogcHJvamVjdFRvUmVxdWVzdCxcbiAgICAgICAgbGFuZzogYXV0aFVzZXIubGFuZyxcbiAgICAgICAgdXNlcklkOiBhdXRoVXNlci5pZC50b1N0cmluZygpLFxuICAgICAgICBmaXJzdE5hbWU6IGF1dGhVc2VyLmZpcnN0TmFtZSxcbiAgICAgICAgbGFzdE5hbWU6IGF1dGhVc2VyLmxhc3ROYW1lLFxuICAgICAgICBjb21wYW55SWQ6IGF1dGhVc2VyLmNvbXBhbnlfaWQudG9TdHJpbmcoKSxcbiAgICAgICAgY2hhdElkOiBjdXJyZW50Q2hhdElkLmN1cnJlbnQsXG4gICAgICAgIG1lc3NhZ2VJZDogY3VycmVudE1lc3NhZ2VJZC5jdXJyZW50LFxuICAgICAgICBhZ2VudE5hbWU6IGFnZW50Py5uYW1lIHx8ICcnLFxuICAgICAgICBhZ2VudElkOiBjdXJyZW50QWdlbnRGcm9tTWVzc2FnZXMgfHwgYWdlbnQ/LmlkISxcbiAgICAgICAgaXNXZWJTZWFyY2hBY3RpdmU6IGlzV2ViU2VhcmNoQWN0aXZlUmVmLmN1cnJlbnQsXG4gICAgICAgIGlzRGVlcFNlYXJjaEFjdGl2ZTogaXNEZWVwU2VhcmNoQWN0aXZlUmVmLmN1cnJlbnQsXG4gICAgICAgIC4uLihjbGllbnQ/LmlkXG4gICAgICAgICAgPyB7IGNsaWVudElkOiBjbGllbnQuaWQsIC4uLihjbGllbnQubmFtZSA/IHsgY2xpZW50TmFtZTogY2xpZW50Lm5hbWUgfSA6IHt9KSB9XG4gICAgICAgICAgOiBwcm9qZWN0Py5jbGllbnQ/LmlkXG4gICAgICAgICAgICA/IHsgY2xpZW50SWQ6IHByb2plY3QuY2xpZW50LmlkLCAuLi4ocHJvamVjdC5jbGllbnQubmFtZSA/IHsgY2xpZW50TmFtZTogcHJvamVjdC5jbGllbnQubmFtZSB9IDoge30pIH1cbiAgICAgICAgICAgIDoge30pLFxuICAgICAgICAuLi4ocHJvamVjdHM/Lmxlbmd0aCA/IHsgcHJvamVjdE5hbWU6IHByb2plY3RzWzBdLm5hbWUgfSA6IHt9KSxcbiAgICAgICAgLi4uKGF0dGFjaG1lbnRzLmxlbmd0aCA+IDAgPyB7IGF0dGFjaG1lbnRzIH0gOiB7fSksXG4gICAgICAgIC4uLihwYXlsb2FkRmFxSWQgPyB7IGZhcUlkOiBwYXlsb2FkRmFxSWQgfSA6IHt9KSxcbiAgICAgICAgLi4uKHBheWxvYWRBZ2VudFN1Z2dlc3Rpb25JZCA/IHsgYWdlbnRTdWdnZXN0aW9uSWQ6IHBheWxvYWRBZ2VudFN1Z2dlc3Rpb25JZCB9IDoge30pLFxuICAgICAgICAuLi4oYWdlbnQ/LmVudGl0eSAhPSBudWxsID8geyBhZ2VudEVudGl0eTogYWdlbnQuZW50aXR5IH0gOiB7fSksXG4gICAgICB9XG5cbiAgICAgIGFza01haWEocGF5bG9hZERhdGEpXG4gICAgfSxcbiAgICBbXG4gICAgICBhZGRNZXNzYWdlLFxuICAgICAgZXZlbnQsXG4gICAgICBhc2tNYWlhLFxuICAgICAgcHJvamVjdCxcbiAgICAgIGNsaWVudCxcbiAgICAgIGF1dGhVc2VyLFxuICAgICAgYWdlbnQsXG4gICAgICB0LFxuICAgICAgd2FpdGluZ1Jlc3BvbnNlLFxuICAgICAgbG9hZGluZ01lc3NhZ2VzLFxuICAgICAgaXNXZWJTZWFyY2hBY3RpdmUsXG4gICAgICBpc0RlZXBTZWFyY2hBY3RpdmUsXG4gICAgXVxuICApXG5cbiAgY29uc3QgY2hhbmdlUHJvamVjdCA9IHVzZUNhbGxiYWNrKFxuICAgIChvcHRpb246IFByb2plY3QpID0+IHtcbiAgICAgIGlmICghY3VycmVudFVzZXJRdWVzdGlvbi5jdXJyZW50KSByZXR1cm5cblxuICAgICAgaWYgKG9wdGlvbi5pZCAhPT0gcHJvamVjdD8uaWQpIHtcbiAgICAgICAgc2V0UHJvamVjdChvcHRpb24pXG4gICAgICB9XG5cbiAgICAgIGlmIChwcm9qZWN0ICYmIGN1cnJlbnRVc2VyUXVlc3Rpb24uY3VycmVudCkge1xuICAgICAgICBjb25zdCBoaXN0b3J5ID0gbWVzc2FnZXNSZWYuY3VycmVudC5tYXAoaGlzdG9yeU1lc3NhZ2UgPT4gKHtcbiAgICAgICAgICBjb250ZW50OiBoaXN0b3J5TWVzc2FnZS5tZXNzYWdlLFxuICAgICAgICAgIHJvbGU6IGhpc3RvcnlNZXNzYWdlLnVzZXIuaWQgPT09IGF1dGhVc2VyLmlkLnRvU3RyaW5nKCkgPyBDaGF0SGlzdG9yeVJvbGUuVVNFUiA6IENoYXRIaXN0b3J5Um9sZS5BU1NJU1RBTlQsXG4gICAgICAgIH0pKVxuXG4gICAgICAgIGFza01haWEoe1xuICAgICAgICAgIG1lc3NhZ2U6IGN1cnJlbnRVc2VyUXVlc3Rpb24uY3VycmVudCxcbiAgICAgICAgICBoaXN0b3J5LFxuICAgICAgICAgIHByb2plY3RJZDogb3B0aW9uLmlkLFxuICAgICAgICAgIGxhbmc6IGF1dGhVc2VyLmxhbmcsXG4gICAgICAgICAgdXNlcklkOiBhdXRoVXNlci5pZC50b1N0cmluZygpLFxuICAgICAgICAgIGZpcnN0TmFtZTogYXV0aFVzZXIuZmlyc3ROYW1lLFxuICAgICAgICAgIGxhc3ROYW1lOiBhdXRoVXNlci5sYXN0TmFtZSxcbiAgICAgICAgICBjb21wYW55SWQ6IGF1dGhVc2VyLmNvbXBhbnlfaWQudG9TdHJpbmcoKSxcbiAgICAgICAgICBjaGF0SWQ6IGN1cnJlbnRDaGF0SWQuY3VycmVudCxcbiAgICAgICAgICBtZXNzYWdlSWQ6IGN1cnJlbnRNZXNzYWdlSWQuY3VycmVudCxcbiAgICAgICAgICBhZ2VudE5hbWU6IGFnZW50Py5uYW1lIHx8ICcnLFxuICAgICAgICAgIGFnZW50SWQ6IGFnZW50Py5pZCB8fCAnJyxcbiAgICAgICAgICBpc1dlYlNlYXJjaEFjdGl2ZTogaXNXZWJTZWFyY2hBY3RpdmVSZWYuY3VycmVudCxcbiAgICAgICAgICBpc0RlZXBTZWFyY2hBY3RpdmU6IGlzRGVlcFNlYXJjaEFjdGl2ZVJlZi5jdXJyZW50LFxuICAgICAgICAgIC4uLihhZ2VudD8uZW50aXR5ICE9IG51bGwgPyB7IGFnZW50RW50aXR5OiBhZ2VudC5lbnRpdHkgfSA6IHt9KSxcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9LFxuICAgIFtwcm9qZWN0LCBzZXRQcm9qZWN0LCBhc2tNYWlhLCBhdXRoVXNlciwgaXNXZWJTZWFyY2hBY3RpdmUsIGFnZW50XVxuICApXG5cbiAgY29uc3QgaGFuZGxlRmVlZGJhY2sgPSB1c2VDYWxsYmFjayhhc3luYyAoZmVlZGJhY2tQcm9wOiBGZWVkYmFjaywgY2hhdE1lc3NhZ2VJZDogc3RyaW5nKSA9PiB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBtYWlhLkNoYXRzLndhc0hlbHBmdWxDaGF0KGNoYXRNZXNzYWdlSWQsIGZlZWRiYWNrUHJvcCA9PT0gRmVlZGJhY2suVEhVTUJTX1VQKVxuICAgIGlmIChyZXNwb25zZSkge1xuICAgICAgbWVzc2FnZXNSZWYuY3VycmVudCA9IG1lc3NhZ2VzUmVmLmN1cnJlbnQubWFwKG1lc3NhZ2UgPT4ge1xuICAgICAgICBpZiAobWVzc2FnZS5pZCA9PT0gY2hhdE1lc3NhZ2VJZCAmJiBtZXNzYWdlLnJvbGUgPT09ICdhc3Npc3RhbnQnKSB7XG4gICAgICAgICAgcmV0dXJuIHsgLi4ubWVzc2FnZSwgd2FzSGVscGZ1bDogZmVlZGJhY2tQcm9wID09PSBGZWVkYmFjay5USFVNQlNfVVAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtZXNzYWdlXG4gICAgICB9KVxuICAgIH1cbiAgfSwgW10pXG5cbiAgY29uc3QgaGFuZGxlQXBwcm92YWxEZWNpc2lvbiA9IHVzZUNhbGxiYWNrKFxuICAgIGFzeW5jIChcbiAgICAgIHRocmVhZElkczogc3RyaW5nW10sXG4gICAgICBkZWNpc2lvbjogJ2FwcHJvdmUnIHwgJ3JlamVjdCcsXG4gICAgICBlZGl0ZWRBY3Rpb25zPzogQXJyYXk8eyB0b29sX25hbWU6IHN0cmluZzsgYXJnczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfT5cbiAgICApID0+IHtcbiAgICAgIGlmICghdGhyZWFkSWRzPy5sZW5ndGgpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignTm8gdGhyZWFkX2lkcyBwcm92aWRlZCBmb3IgYXBwcm92YWwgZGVjaXNpb24nKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgLy8gQnVzY2FyIGVsIG1lbnNhamUgcXVlIGNvbnRpZW5lIGFsZ3VubyBkZSBlc3RvcyB0aHJlYWRJZHMgZW4gc3VzIHBlbmRpbmdfYWN0aW9uc1xuICAgICAgY29uc3QgbWVzc2FnZVdpdGhBcHByb3ZhbCA9IG1lc3NhZ2VzUmVmLmN1cnJlbnQuZmluZChtID0+XG4gICAgICAgIG0uYXBwcm92YWw/LnBlbmRpbmdfYWN0aW9ucz8uc29tZShhY3Rpb24gPT4gdGhyZWFkSWRzLmluY2x1ZGVzKGFjdGlvbi50aHJlYWRfaWQpKVxuICAgICAgKVxuXG4gICAgICBpZiAoIW1lc3NhZ2VXaXRoQXBwcm92YWwgfHwgIW1lc3NhZ2VXaXRoQXBwcm92YWwuYXBwcm92YWwpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignTm8gc2UgZW5jb250csOzIG1lbnNhamUgY29uIGFwcHJvdmFsIHBhcmEgdGhyZWFkX2lkczonLCB0aHJlYWRJZHMpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBjb25zdCB7IGFwcHJvdmFsIH0gPSBtZXNzYWdlV2l0aEFwcHJvdmFsXG4gICAgICBjb25zdCBtZXNzYWdlSWQgPSBtZXNzYWdlV2l0aEFwcHJvdmFsLmlkXG4gICAgICAvLyBVc2UgZmlyc3QgdGhyZWFkSWQgYXMgdGhlIGxvYWRpbmcga2V5XG4gICAgICBjb25zdCBsb2FkaW5nS2V5ID0gdGhyZWFkSWRzWzBdXG4gICAgICAvLyBVcGRhdGUgbWVzc2FnZSBzdGF0dXMgaW1tZWRpYXRlbHlcbiAgICAgIG1lc3NhZ2VzUmVmLmN1cnJlbnQgPSBtZXNzYWdlc1JlZi5jdXJyZW50Lm1hcChtZXNzYWdlID0+IHtcbiAgICAgICAgaWYgKG1lc3NhZ2UuaWQgPT09IG1lc3NhZ2VJZCkge1xuICAgICAgICAgIGNvbnN0IG5ld1N0YXR1cyA9IGRlY2lzaW9uID09PSAnYXBwcm92ZScgPyAnYXBwcm92ZWQnIDogJ3JlamVjdGVkJ1xuICAgICAgICAgIHJldHVybiB7IC4uLm1lc3NhZ2UsIGFwcHJvdmFsU3RhdHVzOiBuZXdTdGF0dXMgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtZXNzYWdlXG4gICAgICB9KVxuXG4gICAgICAvLyBUcmlnZ2VyIHJlLXJlbmRlclxuICAgICAgY29uc3QgZXhpc3RpbmdNZXNzYWdlID0gbWVzc2FnZXNSZWYuY3VycmVudC5maW5kKG0gPT4gbS5pZCA9PT0gbWVzc2FnZUlkKVxuICAgICAgaWYgKGV4aXN0aW5nTWVzc2FnZSkge1xuICAgICAgICBjb25zdCBuZXdTdGF0dXMgPSBkZWNpc2lvbiA9PT0gJ2FwcHJvdmUnID8gJ2FwcHJvdmVkJyA6ICdyZWplY3RlZCdcbiAgICAgICAgYWRkTWVzc2FnZSh7IC4uLmV4aXN0aW5nTWVzc2FnZSwgYXBwcm92YWxTdGF0dXM6IG5ld1N0YXR1cyB9KVxuICAgICAgfVxuXG4gICAgICAvLyBDYWxsIGNvbnRpbnVlLXRocmVhZCBlbmRwb2ludCB3aXRoIEFMTCB0aHJlYWRfaWRzIGluIGEgc2luZ2xlIHJlcXVlc3RcbiAgICAgIGlzUHJvY2Vzc2luZ1JlZi5jdXJyZW50ID0gdHJ1ZVxuICAgICAgY3VycmVudE1lc3NhZ2VJZC5jdXJyZW50ID0gdXVpZHY0KClcblxuICAgICAgLy8gQWRkIGxvYWRpbmdcbiAgICAgIHNldEFjdGl2ZUxvYWRpbmdzKHByZXYgPT4gKHtcbiAgICAgICAgLi4ucHJldixcbiAgICAgICAgW2xvYWRpbmdLZXldOiB0KCdjaGF0LnByb2Nlc3NpbmcnKSxcbiAgICAgIH0pKVxuXG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IG1haWEuT3JjaGVzdHJhdG9yLmNvbnRpbnVlVGhyZWFkKHtcbiAgICAgICAgICB0aHJlYWRJZHMsIC8vIFNlbmQgYWxsIGFjdGlvbiB0aHJlYWRfaWRzIGF0IG9uY2VcbiAgICAgICAgICBzZXNzaW9uSWQ6IGFwcHJvdmFsLnNlc3Npb25faWQsXG4gICAgICAgICAgZGVjaXNpb246IGVkaXRlZEFjdGlvbnMgPyAnZWRpdCcgOiBkZWNpc2lvbixcbiAgICAgICAgICBlZGl0ZWRBY3Rpb25zLFxuICAgICAgICAgIGFnZW50SWQ6IGFnZW50Py5pZCB8fCAnJyxcbiAgICAgICAgICBsYW5nOiBhdXRoVXNlci5sYW5nLFxuICAgICAgICB9KVxuXG4gICAgICAgIGlmICghcmVzcG9uc2Uub2spIHtcbiAgICAgICAgICBoYW5kbGVTdHJlYW1FcnJvcigpXG4gICAgICAgICAgc2V0QWN0aXZlTG9hZGluZ3MocHJldiA9PiB7XG4gICAgICAgICAgICBjb25zdCBuZXdMb2FkaW5ncyA9IHsgLi4ucHJldiB9XG4gICAgICAgICAgICBkZWxldGUgbmV3TG9hZGluZ3NbbG9hZGluZ0tleV1cbiAgICAgICAgICAgIHJldHVybiBuZXdMb2FkaW5nc1xuICAgICAgICAgIH0pXG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cblxuICAgICAgICAvLyBQcm9jZXNzIFNTRSBzdHJlYW1cbiAgICAgICAgZ2V0Q29udGludWVTdHJlYW1SZXZlYWwoKS5yZXNldCgpXG4gICAgICAgIGF3YWl0IHByb2Nlc3NTU0VTdHJlYW0ocmVzcG9uc2UsIGxvYWRpbmdLZXksIHtcbiAgICAgICAgICBvblRva2VuOiAoY29udGVudDogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICBnZXRDb250aW51ZVN0cmVhbVJldmVhbCgpLnNldFRhcmdldChjb250ZW50KVxuICAgICAgICAgIH0sXG4gICAgICAgICAgb25Ob2RlOiAobWVzc2FnZTogc3RyaW5nLCBjdXJyZW50VGhyZWFkSWQ6IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgY29uc3QgZGlzcGxheU1zZyA9IG1lc3NhZ2UuaW5jbHVkZXMoJ2NyZWF0ZV90YXNrJykgPyBtZXNzYWdlIDogdCgnY2hhdC5leGVjdXRpbmdBY3Rpb24nKVxuICAgICAgICAgICAgc2V0QWN0aXZlTG9hZGluZ3MocHJldiA9PiAoe1xuICAgICAgICAgICAgICAuLi5wcmV2LFxuICAgICAgICAgICAgICBbY3VycmVudFRocmVhZElkXTogZGlzcGxheU1zZyxcbiAgICAgICAgICAgIH0pKVxuICAgICAgICAgIH0sXG4gICAgICAgICAgb25Db21wbGV0ZTogKFxuICAgICAgICAgICAgZmluYWxDb250ZW50OiBzdHJpbmcsXG4gICAgICAgICAgICBzb3VyY2VzOiBhbnksXG4gICAgICAgICAgICBtZW1vcnlTZXNzaW9uSWQ6IHN0cmluZyxcbiAgICAgICAgICAgIGN1cnJlbnRUaHJlYWRJZDogc3RyaW5nLFxuICAgICAgICAgICAgc3VnZ2VzdGlvbnM/OiBzdHJpbmdbXSB8IG51bGwsXG4gICAgICAgICAgICBhZ2VudElkPzogc3RyaW5nIHwgbnVsbFxuICAgICAgICAgICkgPT4ge1xuICAgICAgICAgICAgZ2V0Q29udGludWVTdHJlYW1SZXZlYWwoKS5jYW5jZWwoKVxuICAgICAgICAgICAgZ2V0Q29udGludWVTdHJlYW1SZXZlYWwoKS5yZXNldCgpXG4gICAgICAgICAgICBoYW5kbGVTdHJlYW1GaW5pc2goZmluYWxDb250ZW50LCBzb3VyY2VzLCBtZW1vcnlTZXNzaW9uSWQsIHN1Z2dlc3Rpb25zLCBhZ2VudElkKVxuICAgICAgICAgICAgc2V0QWN0aXZlTG9hZGluZ3MocHJldiA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IG5ld0xvYWRpbmdzID0geyAuLi5wcmV2IH1cbiAgICAgICAgICAgICAgZGVsZXRlIG5ld0xvYWRpbmdzW2N1cnJlbnRUaHJlYWRJZF1cbiAgICAgICAgICAgICAgcmV0dXJuIG5ld0xvYWRpbmdzXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH0sXG4gICAgICAgICAgb25BcHByb3ZhbFJlcXVpcmVkOiAoYXBwcm92YWxQYXlsb2FkOiBhbnksIGFjY3VtdWxhdGVkQ29udGVudDogc3RyaW5nLCBjdXJyZW50VGhyZWFkSWQ6IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgZ2V0Q29udGludWVTdHJlYW1SZXZlYWwoKS5jYW5jZWwoKVxuICAgICAgICAgICAgZ2V0Q29udGludWVTdHJlYW1SZXZlYWwoKS5yZXNldCgpXG4gICAgICAgICAgICAvLyBOZXcgSElUTCBpbnRlcnJ1cHRpb24gZGV0ZWN0ZWQgYWZ0ZXIgcmVzdW1lIChjaGFpbmVkIGFjdGlvbnMpXG4gICAgICAgICAgICBzZXRBY3RpdmVMb2FkaW5ncyhwcmV2ID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgbmV3TG9hZGluZ3MgPSB7IC4uLnByZXYgfVxuICAgICAgICAgICAgICBkZWxldGUgbmV3TG9hZGluZ3NbY3VycmVudFRocmVhZElkXVxuICAgICAgICAgICAgICByZXR1cm4gbmV3TG9hZGluZ3NcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICBoYW5kbGVBcHByb3ZhbFJlcXVpcmVkKGFwcHJvdmFsUGF5bG9hZCBhcyBBcHByb3ZhbFJlcXVlc3QsIGFjY3VtdWxhdGVkQ29udGVudClcbiAgICAgICAgICB9LFxuICAgICAgICAgIG9uRXJyb3I6IChlcnJvcjogYW55LCBjdXJyZW50VGhyZWFkSWQ6IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcignU1NFIEVycm9yOicsIGVycm9yKVxuICAgICAgICAgICAgZ2V0Q29udGludWVTdHJlYW1SZXZlYWwoKS5jYW5jZWwoKVxuICAgICAgICAgICAgZ2V0Q29udGludWVTdHJlYW1SZXZlYWwoKS5yZXNldCgpXG4gICAgICAgICAgICBoYW5kbGVTdHJlYW1FcnJvcigpXG4gICAgICAgICAgICBzZXRBY3RpdmVMb2FkaW5ncyhwcmV2ID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgbmV3TG9hZGluZ3MgPSB7IC4uLnByZXYgfVxuICAgICAgICAgICAgICBkZWxldGUgbmV3TG9hZGluZ3NbY3VycmVudFRocmVhZElkXVxuICAgICAgICAgICAgICByZXR1cm4gbmV3TG9hZGluZ3NcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfSxcbiAgICAgICAgfSlcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGdldENvbnRpbnVlU3RyZWFtUmV2ZWFsKCkuY2FuY2VsKClcbiAgICAgICAgZ2V0Q29udGludWVTdHJlYW1SZXZlYWwoKS5yZXNldCgpXG4gICAgICAgIGhhbmRsZVN0cmVhbUVycm9yKClcbiAgICAgICAgc2V0QWN0aXZlTG9hZGluZ3MocHJldiA9PiB7XG4gICAgICAgICAgY29uc3QgbmV3TG9hZGluZ3MgPSB7IC4uLnByZXYgfVxuICAgICAgICAgIGRlbGV0ZSBuZXdMb2FkaW5nc1tsb2FkaW5nS2V5XVxuICAgICAgICAgIHJldHVybiBuZXdMb2FkaW5nc1xuICAgICAgICB9KVxuICAgICAgfVxuICAgIH0sXG4gICAgW1xuICAgICAgYXV0aFVzZXIsXG4gICAgICBhZ2VudCxcbiAgICAgIGFkZE1lc3NhZ2UsXG4gICAgICBoYW5kbGVTdHJlYW1FcnJvcixcbiAgICAgIGhhbmRsZVN0cmVhbUZpbmlzaCxcbiAgICAgIGhhbmRsZUFwcHJvdmFsUmVxdWlyZWQsXG4gICAgICBnZXRDb250aW51ZVN0cmVhbVJldmVhbCxcbiAgICBdXG4gIClcblxuICBjb25zdCBpbml0aWFsaXplQ2hhdCA9IHVzZUNhbGxiYWNrKGFzeW5jICgpID0+IHtcbiAgICBpZiAoIWZpcnN0VGltZVJlZi5jdXJyZW50KSB7XG4gICAgICBmaXJzdFRpbWVSZWYuY3VycmVudCA9IHRydWVcbiAgICB9XG4gICAgaWYgKGluaXRpYWxDaGF0SWQpIHtcbiAgICAgIGF3YWl0IGxvYWRNZXNzYWdlcygpXG4gICAgfSBlbHNlIGlmICh1c2VySW5pdGlhbE1lc3NhZ2UpIHtcbiAgICAgIGNvbnN0IGhhc0luaXRpYWxNZXNzYWdlID0gQm9vbGVhbih1c2VySW5pdGlhbE1lc3NhZ2UubWVzc2FnZT8udHJpbSgpKVxuICAgICAgY29uc3QgaGFzSW5pdGlhbEF0dGFjaG1lbnRzID0gQm9vbGVhbih1c2VySW5pdGlhbE1lc3NhZ2UuYXR0YWNobWVudHM/Lmxlbmd0aClcbiAgICAgIGNvbnN0IGhhc0luaXRpYWxGYXEgPSBCb29sZWFuKHVzZXJJbml0aWFsTWVzc2FnZS5mYXFJZClcblxuICAgICAgaWYgKCFoYXNJbml0aWFsTWVzc2FnZSAmJiAhaGFzSW5pdGlhbEF0dGFjaG1lbnRzICYmICFoYXNJbml0aWFsRmFxKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBjb25zdCBoaXN0b3J5ID0gbWVzc2FnZXNSZWYuY3VycmVudC5tYXAoaGlzdG9yeU1lc3NhZ2UgPT4gKHtcbiAgICAgICAgY29udGVudDogaGlzdG9yeU1lc3NhZ2UubWVzc2FnZSxcbiAgICAgICAgcm9sZTogaGlzdG9yeU1lc3NhZ2UudXNlci5pZCA9PT0gYXV0aFVzZXIuaWQudG9TdHJpbmcoKSA/IENoYXRIaXN0b3J5Um9sZS5VU0VSIDogQ2hhdEhpc3RvcnlSb2xlLkFTU0lTVEFOVCxcbiAgICAgIH0pKVxuXG4gICAgICBhc2tNYWlhKHtcbiAgICAgICAgbWVzc2FnZTogdXNlckluaXRpYWxNZXNzYWdlLm1lc3NhZ2UsXG4gICAgICAgIGhpc3RvcnksXG4gICAgICAgIHByb2plY3RJZDogcHJvamVjdD8uaWQgfHwgbnVsbCxcbiAgICAgICAgbGFuZzogYXV0aFVzZXIubGFuZyxcbiAgICAgICAgdXNlcklkOiBhdXRoVXNlci5pZC50b1N0cmluZygpLFxuICAgICAgICBmaXJzdE5hbWU6IGF1dGhVc2VyLmZpcnN0TmFtZSxcbiAgICAgICAgbGFzdE5hbWU6IGF1dGhVc2VyLmxhc3ROYW1lLFxuICAgICAgICBjb21wYW55SWQ6IGF1dGhVc2VyLmNvbXBhbnlfaWQudG9TdHJpbmcoKSxcbiAgICAgICAgY2hhdElkOiBjdXJyZW50Q2hhdElkLmN1cnJlbnQsXG4gICAgICAgIG1lc3NhZ2VJZDogY3VycmVudE1lc3NhZ2VJZC5jdXJyZW50LFxuICAgICAgICBhZ2VudE5hbWU6IGFnZW50Py5uYW1lISxcbiAgICAgICAgYWdlbnRJZDogYWdlbnQ/LmlkISxcbiAgICAgICAgaXNXZWJTZWFyY2hBY3RpdmU6IGlzV2ViU2VhcmNoQWN0aXZlUmVmLmN1cnJlbnQsXG4gICAgICAgIGlzRGVlcFNlYXJjaEFjdGl2ZTogaXNEZWVwU2VhcmNoQWN0aXZlUmVmLmN1cnJlbnQsXG4gICAgICAgIC4uLihjbGllbnQ/LmlkID8geyBjbGllbnRJZDogY2xpZW50LmlkIH0gOiBwcm9qZWN0Py5jbGllbnQ/LmlkID8geyBjbGllbnRJZDogcHJvamVjdC5jbGllbnQuaWQgfSA6IHt9KSxcbiAgICAgICAgLi4uKHByb2plY3Q/Lm5hbWUgPyB7IHByb2plY3ROYW1lOiBwcm9qZWN0Lm5hbWUgfSA6IHt9KSxcbiAgICAgICAgLi4uKHByb2plY3Q/LmNsaWVudD8ubmFtZVxuICAgICAgICAgID8geyBjbGllbnROYW1lOiBwcm9qZWN0LmNsaWVudC5uYW1lIH1cbiAgICAgICAgICA6IGNsaWVudD8ubmFtZVxuICAgICAgICAgICAgPyB7IGNsaWVudE5hbWU6IGNsaWVudC5uYW1lIH1cbiAgICAgICAgICAgIDoge30pLFxuICAgICAgICAuLi4odXNlckluaXRpYWxNZXNzYWdlLmF0dGFjaG1lbnRzID8geyBhdHRhY2htZW50czogdXNlckluaXRpYWxNZXNzYWdlLmF0dGFjaG1lbnRzIH0gOiB7fSksXG4gICAgICAgIC4uLih1c2VySW5pdGlhbE1lc3NhZ2UuZmFxSWQgPyB7IGZhcUlkOiB1c2VySW5pdGlhbE1lc3NhZ2UuZmFxSWQgfSA6IHt9KSxcbiAgICAgICAgLi4uKHVzZXJJbml0aWFsTWVzc2FnZS5hZ2VudFN1Z2dlc3Rpb25JZCA/IHsgYWdlbnRTdWdnZXN0aW9uSWQ6IHVzZXJJbml0aWFsTWVzc2FnZS5hZ2VudFN1Z2dlc3Rpb25JZCB9IDoge30pLFxuICAgICAgICAuLi4oYWdlbnQ/LmVudGl0eSAhPSBudWxsID8geyBhZ2VudEVudGl0eTogYWdlbnQuZW50aXR5IH0gOiB7fSksXG4gICAgICB9KVxuICAgIH1cbiAgfSwgW1xuICAgIGluaXRpYWxDaGF0SWQsXG4gICAgdXNlckluaXRpYWxNZXNzYWdlLFxuICAgIHByb2plY3QsXG4gICAgY2xpZW50LFxuICAgIGF1dGhVc2VyLFxuICAgIGFnZW50LFxuICAgIGFza01haWEsXG4gICAgaXNXZWJTZWFyY2hBY3RpdmUsXG4gICAgaXNEZWVwU2VhcmNoQWN0aXZlLFxuICBdKVxuXG4gIGNvbnN0IHJlc2V0Q2hhdCA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBjdXJyZW50TWVzc2FnZUlkLmN1cnJlbnQgPSB1dWlkdjQoKVxuICAgIGN1cnJlbnRVc2VyUXVlc3Rpb24uY3VycmVudCA9IG51bGxcbiAgICBjdXJyZW50Q2hhdElkLmN1cnJlbnQgPSB1dWlkdjQoKVxuICAgIHJlcG9ydGVkRXZlbnQuY3VycmVudCA9IGZhbHNlXG4gIH0sIFtdKVxuXG4gIGNvbnN0IHN0b3BHZW5lcmF0aW9uID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIHN0b3BTdHJlYW1pbmcoKVxuICAgIGlzUHJvY2Vzc2luZ1JlZi5jdXJyZW50ID0gZmFsc2VcbiAgfSwgW3N0b3BTdHJlYW1pbmddKVxuXG4gIHJldHVybiB7XG4gICAgbWVzc2FnZXMsXG4gICAgbG9hZGluZ01lc3NhZ2VzLFxuICAgIGlzTG9hZGluZ01vcmVNZXNzYWdlcyxcbiAgICB3YWl0aW5nUmVzcG9uc2UsXG4gICAgaXNXcml0aW5nLFxuICAgIGxvYWRpbmdNZXNzYWdlLFxuICAgIGFjdGl2ZUxvYWRpbmdzLFxuICAgIGN1cnJlbnRQcm9qZWN0LFxuICAgIGN1cnJlbnRDaGF0SWQ6IGN1cnJlbnRDaGF0SWQuY3VycmVudCxcbiAgICBjdXJyZW50TWVzc2FnZUlkOiBjdXJyZW50TWVzc2FnZUlkLmN1cnJlbnQsXG5cbiAgICBzZW5kTWVzc2FnZSxcbiAgICBjaGFuZ2VQcm9qZWN0LFxuICAgIGhhbmRsZUZlZWRiYWNrLFxuICAgIGhhbmRsZUFwcHJvdmFsRGVjaXNpb24sXG4gICAgaGFuZGxlU2Nyb2xsLFxuICAgIGluaXRpYWxpemVDaGF0LFxuICAgIHJlc2V0Q2hhdCxcbiAgICBzdG9wR2VuZXJhdGlvbixcblxuICAgIGlzRGlzYWJsZWQ6IHdhaXRpbmdSZXNwb25zZSB8fCBsb2FkaW5nTWVzc2FnZXMsXG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVNBLFdBQVcsRUFBRUMsTUFBTSxFQUFFQyxTQUFTLEVBQUVDLFFBQVEsUUFBUSxPQUFPO0FBQ2hFLFNBQVNDLEVBQUUsSUFBSUMsTUFBTSxRQUFRLE1BQU07QUFDbkMsU0FBU0MsZUFBZSxRQUFRLG9CQUFvQjtBQUNwRCxTQUFTQyxxQkFBcUIsUUFBUSwwQkFBMEI7QUFDaEUsU0FBU0Msd0JBQXdCLFFBQVEsNkNBQTZDO0FBQ3RGLFNBQVNDLElBQUksUUFBUSxTQUFTO0FBRzlCLFNBQVNDLE9BQU8sUUFBaUIsd0JBQXdCO0FBQ3pELFNBQVNDLGdC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