@projectcor/maia-components 2.42.0 → 2.42.1-0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (192) hide show
  1. package/CHANGELOG.md +847 -0
  2. package/lib/App.js +44 -19
  3. package/lib/components/atoms/ApprovalBox/ApprovalBox.spec.js +135 -0
  4. package/lib/components/atoms/Checkbox/Checkbox.spec.js +27 -0
  5. package/lib/components/atoms/Chip/Chip.spec.js +82 -0
  6. package/lib/components/atoms/ContextMentionChip/ContextMentionChip.spec.js +29 -0
  7. package/lib/components/atoms/Fade/Fade.spec.js +31 -0
  8. package/lib/components/atoms/FrequentlyUsedActions/FrequentlyUsedActions.js +3 -1
  9. package/lib/components/atoms/FrequentlyUsedActions/FrequentlyUsedActions.styles.js +19 -7
  10. package/lib/components/atoms/MAIAButton/MAIAButton.spec.js +42 -0
  11. package/lib/components/atoms/MAIAInput/MAIAInput.spec.js +303 -0
  12. package/lib/components/atoms/ReasoningBlock/ReasoningBlock.js +7 -2
  13. package/lib/components/atoms/ReasoningBlock/ReasoningBlock.spec.js +69 -0
  14. package/lib/components/atoms/ReasoningBlock/ReasoningBlock.styles.js +10 -14
  15. package/lib/components/atoms/ReasoningBlock/ReasoningSteps.js +1 -1
  16. package/lib/components/atoms/ReasoningBlock/ReasoningSteps.spec.js +59 -0
  17. package/lib/components/atoms/ReasoningBlock/ReasoningTimeline.js +57 -37
  18. package/lib/components/atoms/ReasoningBlock/ReasoningTimeline.spec.js +58 -0
  19. package/lib/components/atoms/ReasoningBlock/reasoningLiveNarration.js +18 -12
  20. package/lib/components/atoms/ReasoningBlock/reasoningLiveNarration.spec.js +68 -0
  21. package/lib/components/atoms/ReasoningBlock/useCollapsibleHeight.js +52 -0
  22. package/lib/components/atoms/ReasoningBlock/useCollapsibleHeight.spec.js +90 -0
  23. package/lib/components/atoms/SkillsDropdown/SkillsDropdown.spec.js +107 -0
  24. package/lib/components/atoms/SlashCommandDropdown/SlashCommandDropdown.spec.js +85 -0
  25. package/lib/components/atoms/Switch/Switch.spec.js +41 -0
  26. package/lib/components/index.js +2 -1
  27. package/lib/components/molecules/AbmSection/AbmAccessibilitySection/AbmAccessibilitySection.spec.js +77 -0
  28. package/lib/components/molecules/AgentInputBlock/AgentInputBlockMessage.js +83 -0
  29. package/lib/components/molecules/AgentInputBlock/AgentInputBlockMessage.styles.js +30 -0
  30. package/lib/components/molecules/AgentInputBlock/index.js +5 -0
  31. package/lib/components/molecules/AgentInputBlock/resolveAgentInputBlock.js +52 -0
  32. package/lib/components/molecules/AgentInputBlock/resolveAgentInputBlock.spec.js +76 -0
  33. package/lib/components/molecules/AgentInputBlock/resolveLegacyContextSession.js +20 -0
  34. package/lib/components/molecules/AgentInputBlock/resolveLegacyContextSession.spec.js +34 -0
  35. package/lib/components/molecules/AgentInputBlock/useAgentChangeModelAction.js +36 -0
  36. package/lib/components/molecules/ChatAIContent/ChatAIContent.js +7 -3
  37. package/lib/components/molecules/ChatAIHome/ChatAIHome.js +21 -6
  38. package/lib/components/molecules/ChatAIHome/ChatAIHome.spec.js +246 -0
  39. package/lib/components/molecules/ChatAIMessages/ChatAICreateAgentActions.spec.js +104 -0
  40. package/lib/components/molecules/ChatAIMessages/ChatAIMessages.js +9 -3
  41. package/lib/components/molecules/ChatAIMessages/ChatAIMessages.spec.js +291 -0
  42. package/lib/components/molecules/ChatAIMessages/ChatAISuggestions.spec.js +46 -0
  43. package/lib/components/molecules/ChatAIMessages/newStyles.js +29 -26
  44. package/lib/components/molecules/ChatAIModal/ChatAIModal.helpers.js +8 -1
  45. package/lib/components/molecules/ChatAIModal/ChatAIModal.helpers.spec.js +148 -0
  46. package/lib/components/molecules/ChatAIModal/ChatAIModal.js +25 -8
  47. package/lib/components/molecules/ChatAIModal/components/ChatAiModalFooter/ChatAiModalFooter.js +15 -153
  48. package/lib/components/molecules/ChatAIModal/components/ChatAiModalFooter/ChatAiModalFooter.styles.js +2 -26
  49. package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.js +65 -61
  50. package/lib/components/molecules/ChatAIModal/components/MaiaMinimizedPill/MaiaMinimizedPill.spec.js +37 -0
  51. package/lib/components/molecules/ChatAIMySkills/ChatAIMySkills.spec.js +128 -0
  52. package/lib/components/molecules/ChatFooter/ChatFooter.js +5 -3
  53. package/lib/components/molecules/ChatFooter/ChatFooter.spec.js +112 -0
  54. package/lib/components/molecules/ContextMentionInput/ContextMentionInput.spec.js +84 -0
  55. package/lib/components/molecules/MessageFeedback/MessageFeedback.spec.js +116 -0
  56. package/lib/components/molecules/Sidebar/Sidebar.js +41 -23
  57. package/lib/components/molecules/Sidebar/Sidebar.spec.js +234 -0
  58. package/lib/components/organisms/AbmAgentModal/AbmAgentModal.js +2 -2
  59. package/lib/components/organisms/AbmAgentModal/AbmAgentModal.spec.js +335 -0
  60. package/lib/components/organisms/AbmSkillModal/AbmSkillModal.spec.js +405 -0
  61. package/lib/components/organisms/ChatAI/ChatAI.spec.js +174 -0
  62. package/lib/components/organisms/ChatAIPage/ChatAIPage.js +525 -0
  63. package/lib/components/organisms/ChatAIPage/ChatAIPage.spec.js +231 -0
  64. package/lib/components/organisms/ChatAIPage/ChatAIPage.styles.js +16 -0
  65. package/lib/components/organisms/ChatAIPage/ChatAIPageHeader.js +253 -0
  66. package/lib/components/organisms/ChatAIPage/ChatAIPageHeader.spec.js +139 -0
  67. package/lib/components/organisms/ChatAIPage/ChatAIPageHeader.styles.js +13 -0
  68. package/lib/components/organisms/ChatAIPage/ChatAIPageHome.js +267 -0
  69. package/lib/components/organisms/ChatAIPage/ChatAIPageHome.spec.js +261 -0
  70. package/lib/components/organisms/ChatAIPage/ChatAIPageHome.styles.js +194 -0
  71. package/lib/components/organisms/ChatAIPage/ChatAIPageHomeActionCardSlot.js +105 -0
  72. package/lib/components/organisms/ChatAIPage/ChatAIPageHomeActionCardSlot.spec.js +73 -0
  73. package/lib/components/organisms/ChatAIPage/ChatAIPageHomeActionCards.skeleton.js +38 -0
  74. package/lib/components/organisms/ChatAIPage/getDaypart.js +9 -0
  75. package/lib/components/organisms/ChatAIPage/getDaypart.spec.js +19 -0
  76. package/lib/components/organisms/ChatAIPage/index.js +3 -0
  77. package/lib/components/organisms/DeleteAgentModal/DeleteAgentModal.spec.js +59 -0
  78. package/lib/components/organisms/DeleteQuestionModal/DeleteQuestionModal.spec.js +79 -0
  79. package/lib/components/organisms/EditQuestionModal/EditQuestionModal.spec.js +86 -0
  80. package/lib/constants/permissions/index.js +2 -2
  81. package/lib/constants/permissions/utils.js +4 -1
  82. package/lib/constants/permissions/utils.spec.js +34 -0
  83. package/lib/dev/DevMaiaPage.js +30 -0
  84. package/lib/dev/DevReasoningTimeline.js +11 -17
  85. package/lib/dev/Providers.js +5 -3
  86. package/lib/hooks/frequentlyUsedActionsCache.js +17 -0
  87. package/lib/hooks/frequentlyUsedActionsCache.spec.js +25 -0
  88. package/lib/hooks/useAgentModel/useCreateAgent.spec.js +95 -0
  89. package/lib/hooks/useAgentModel/useUpdateAgent.spec.js +96 -0
  90. package/lib/hooks/useCaretPosition.spec.js +58 -0
  91. package/lib/hooks/useChatManager/useChatManager.js +7 -7
  92. package/lib/hooks/useChatMessages/useChatMessages.spec.js +279 -0
  93. package/lib/hooks/useContinueLegacyContextInNewChat/index.js +2 -0
  94. package/lib/hooks/useContinueLegacyContextInNewChat/useContinueLegacyContextInNewChat.js +93 -0
  95. package/lib/hooks/useDebounce.spec.js +42 -0
  96. package/lib/hooks/useEvent.spec.js +40 -0
  97. package/lib/hooks/useFrequentlyUsedActions.js +63 -20
  98. package/lib/hooks/useIsMaiaPageRoute.js +26 -0
  99. package/lib/hooks/useIsMaiaPageRoute.spec.js +26 -0
  100. package/lib/hooks/useMaiaChatSessionMeta/index.js +2 -0
  101. package/lib/hooks/useMaiaChatSessionMeta/useMaiaChatSessionMeta.js +24 -0
  102. package/lib/hooks/useMentionAllowedTypes.spec.js +89 -0
  103. package/lib/hooks/useMinimizedPillNoveltyDot/useMinimizedPillNoveltyDot.spec.js +67 -0
  104. package/lib/hooks/useModal/useModal.spec.js +73 -0
  105. package/lib/hooks/useResize.spec.js +37 -0
  106. package/lib/hooks/useSkillsCatalog.spec.js +88 -0
  107. package/lib/hooks/useSnackBarManager/useSnackBarManager.spec.js +33 -0
  108. package/lib/hooks/useT.spec.js +20 -0
  109. package/lib/hooks/useToggle.spec.js +33 -0
  110. package/lib/index.js +5 -2
  111. package/lib/lang/br/index.js +26 -1
  112. package/lib/lang/en/index.js +26 -1
  113. package/lib/lang/es/index.js +26 -1
  114. package/lib/lang/fr/index.js +26 -1
  115. package/lib/services/maia/Access/updateAccess.spec.js +108 -0
  116. package/lib/services/maia/Actions/getFrequentlyUsedActions.js +1 -1
  117. package/lib/services/maia/Actions/getFrequentlyUsedActions.spec.js +56 -0
  118. package/lib/services/maia/Actions/getSlashCommands.spec.js +74 -0
  119. package/lib/services/maia/Agents/createAgent.spec.js +55 -0
  120. package/lib/services/maia/Agents/deleteAgent.spec.js +42 -0
  121. package/lib/services/maia/Agents/fetchAgentDetail.spec.js +108 -0
  122. package/lib/services/maia/Agents/getAgentById.spec.js +55 -0
  123. package/lib/services/maia/Agents/getAgentSuggestions.spec.js +82 -0
  124. package/lib/services/maia/Agents/setAgentToolGroups.spec.js +45 -0
  125. package/lib/services/maia/Agents/toggleFavorite.spec.js +47 -0
  126. package/lib/services/maia/Agents/updateAgent.spec.js +48 -0
  127. package/lib/services/maia/Chats/deleteChat.spec.js +31 -0
  128. package/lib/services/maia/Chats/getChatMessages.spec.js +150 -0
  129. package/lib/services/maia/Chats/getChatsByUserId.spec.js +149 -0
  130. package/lib/services/maia/Chats/markSessionAsRead.spec.js +30 -0
  131. package/lib/services/maia/Chats/patchChat.spec.js +41 -0
  132. package/lib/services/maia/Chats/wasHelpfulChat.spec.js +28 -0
  133. package/lib/services/maia/Faqs/getFrequentlyAskedQuestions.spec.js +58 -0
  134. package/lib/services/maia/Knowledge/delete.spec.js +45 -0
  135. package/lib/services/maia/Knowledge/download.spec.js +78 -0
  136. package/lib/services/maia/Knowledge/save.spec.js +58 -0
  137. package/lib/services/maia/Orchestrator/orchestrator.spec.js +72 -0
  138. package/lib/services/maia/RecentClients/getRecentClients.spec.js +52 -0
  139. package/lib/services/maia/RecentContexts/getRecentContexts.spec.js +83 -0
  140. package/lib/services/maia/RecentProjects/getRecentProjects.spec.js +82 -0
  141. package/lib/services/maia/RecentTasks/getRecentTasks.spec.js +63 -0
  142. package/lib/services/maia/RecentUsers/getRecentUsers.spec.js +82 -0
  143. package/lib/services/maia/Skills/createSkill.spec.js +68 -0
  144. package/lib/services/maia/Skills/deleteSkill.spec.js +42 -0
  145. package/lib/services/maia/Skills/generateSkill.spec.js +48 -0
  146. package/lib/services/maia/Skills/getSkills.spec.js +152 -0
  147. package/lib/services/maia/Skills/updateSkill.spec.js +62 -0
  148. package/lib/services/maia/client.spec.js +56 -0
  149. package/lib/services/utils/fetchCOR.spec.js +211 -0
  150. package/lib/services/utils/getCookie.spec.js +20 -0
  151. package/lib/store/chatsSidebarOptimistic.spec.js +120 -0
  152. package/lib/store/maiaLastChatPersistence.spec.js +22 -0
  153. package/lib/store/maiaPanelSessionPersistence.spec.js +62 -0
  154. package/lib/store/sessions/sessionStreamManager.js +40 -52
  155. package/lib/store/sessions/sessions.types.spec.js +16 -0
  156. package/lib/store/sessions/useSessionsStore.spec.js +135 -0
  157. package/lib/store/useChatsStore.spec.js +619 -0
  158. package/lib/store/useFaqsStore.spec.js +57 -0
  159. package/lib/styles/cascade.js +29 -3
  160. package/lib/styles/transitions.js +3 -1
  161. package/lib/types/global.d.js +1 -1
  162. package/lib/utils/agentDisplayName.spec.js +44 -0
  163. package/lib/utils/autoApproveStorage.spec.js +25 -0
  164. package/lib/utils/chatInputFiles.spec.js +39 -0
  165. package/lib/utils/contextMentionLabel.spec.js +13 -0
  166. package/lib/utils/contextMentionTriggers.spec.js +38 -0
  167. package/lib/utils/contextMentionTypeLabel.spec.js +14 -0
  168. package/lib/utils/corConnectorMentionTypes.spec.js +23 -0
  169. package/lib/utils/fileDownloadHelper.spec.js +67 -0
  170. package/lib/utils/formatQuickActionMessage.spec.js +27 -0
  171. package/lib/utils/formatUnreadCount.spec.js +12 -0
  172. package/lib/utils/getUnitFileSize.spec.js +18 -0
  173. package/lib/utils/hitlAnalytics.spec.js +100 -0
  174. package/lib/utils/hoursPlannerQuickActionType.js +74 -1
  175. package/lib/utils/hoursPlannerQuickActionType.spec.js +64 -0
  176. package/lib/utils/maiaPageRoute.js +24 -0
  177. package/lib/utils/maiaPageRoute.spec.js +23 -0
  178. package/lib/utils/mapBackendLang.spec.js +19 -0
  179. package/lib/utils/navigateContextEntity.spec.js +50 -0
  180. package/lib/utils/normalizeAgentConnectors.spec.js +89 -0
  181. package/lib/utils/orchestratorSubagents.spec.js +32 -0
  182. package/lib/utils/reasoningMappers.spec.js +103 -0
  183. package/lib/utils/retryCompletion.spec.js +99 -0
  184. package/lib/utils/skillContentSize.spec.js +13 -0
  185. package/lib/utils/slashCommandMarker.spec.js +43 -0
  186. package/lib/utils/sortManagerHoursHomeFuas.spec.js +51 -0
  187. package/lib/utils/sseStreamContent.spec.js +31 -0
  188. package/lib/utils/streamActivityMessages.js +32 -19
  189. package/lib/utils/streamActivityMessages.spec.js +131 -0
  190. package/lib/utils/validateTrimmedFields.spec.js +26 -0
  191. package/package.json +1 -1
  192. package/README.md +0 -2
@@ -236,7 +236,9 @@ var MessageItem = /*#__PURE__*/memo(function (props) {
236
236
  var isActiveStreaming = !!isStreaming || isStreamingPlaceholder;
237
237
  var hasStreamText = Boolean(streamingText);
238
238
  var reasoningTrace = useReasoningTrace(isAssistant && isActiveStreaming ? id : '');
239
- var streamNarrationInTimeline = isAssistant && shouldStreamNarrationInTimeline(reasoningTrace.steps, streamActivity, streamingText, id);
239
+ var streamNarrationInTimeline = isAssistant && shouldStreamNarrationInTimeline(reasoningTrace.steps, streamActivity, streamingText, {
240
+ messageId: id
241
+ });
240
242
  var showStreamingBody = isActiveStreaming && hasStreamText && !streamNarrationInTimeline;
241
243
  var showActivityIndicator = isAssistant && isActiveStreaming && !!streamActivity;
242
244
  var messageAttachments = attachments && attachments.length > 0 ? attachments : !isAssistant && Array.isArray(sources) ? sources : [];
@@ -426,7 +428,9 @@ var ChatAIMessagesInner = function ChatAIMessagesInner(_ref5) {
426
428
  onScrollToBottom = _ref5.onScrollToBottom,
427
429
  attachments = _ref5.attachments,
428
430
  agents = _ref5.agents,
429
- expanded = _ref5.expanded;
431
+ expanded = _ref5.expanded,
432
+ _ref5$skipEnterAnimat = _ref5.skipEnterAnimation,
433
+ skipEnterAnimation = _ref5$skipEnterAnimat === void 0 ? false : _ref5$skipEnterAnimat;
430
434
  var _useT = useT(),
431
435
  t = _useT.t;
432
436
  var _useGlobalContext = useGlobalContext(),
@@ -1072,12 +1076,14 @@ var ChatAIMessagesInner = function ChatAIMessagesInner(_ref5) {
1072
1076
  onScroll: handleScrollToBottom,
1073
1077
  children: /*#__PURE__*/_jsx(SCMessagesInner, {
1074
1078
  $scrollOnParent: isScrollOnParent,
1079
+ $skipEnter: skipEnterAnimation,
1075
1080
  children: messagesContent
1076
1081
  })
1077
1082
  }) : /*#__PURE__*/_jsx(SCMessagesInner, {
1078
1083
  ref: messagesRef,
1079
1084
  onScroll: handleScrollToBottom,
1080
1085
  $scrollOnParent: false,
1086
+ $skipEnter: skipEnterAnimation,
1081
1087
  children: messagesContent
1082
1088
  }), /*#__PURE__*/_jsx(SCMessagesGradientBottom, {
1083
1089
  $show: showBottomGradient,
@@ -1113,4 +1119,4 @@ var ChatAIMessagesInner = function ChatAIMessagesInner(_ref5) {
1113
1119
  );
1114
1120
  };
1115
1121
  export var ChatAIMessages = /*#__PURE__*/React.memo(ChatAIMessagesInner);
1116
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSZWFjdCIsIm1lbW8iLCJ1c2VDYWxsYmFjayIsInVzZUVmZmVjdCIsInVzZUxheW91dEVmZmVjdCIsInVzZVJlZiIsInVzZVN0YXRlIiwiY3JlYXRlRWxlbWVudCIsIl9jcmVhdGVFbGVtZW50IiwiQXR0YWNobWVudENhcmQiLCJBcHByb3ZhbEJveCIsIkF0dGFjaG1lbnRQcmV2aWV3TW9kYWwiLCJBdHRhY2htZW50Q2FyZEF1ZGlvIiwiTWFpYVN0cmVhbWRvd24iLCJDaGF0SGlzdG9yeVJvbGUiLCJyZW5kZXJUZXh0V2l0aE1lbnRpb25zIiwiaGFzSW5saW5lTWFya2VycyIsImlzTWFpYWtlckFnZW50IiwidXNlVXNlciIsInVzZVQiLCJ1c2VDaGF0TWFuYWdlciIsInVzZVNtb290aFN0cmVhbVRleHQiLCJ1c2VTdHJlYW1pbmdNZXNzYWdlIiwiTG9hZGluZ1RleHQiLCJBZ2VudEFjdGl2aXR5SW5kaWNhdG9yIiwiUmVhc29uaW5nQmxvY2siLCJzaG91bGRTdHJlYW1OYXJyYXRpb25JblRpbWVsaW5lIiwiUmVhc29uaW5nVGltZWxpbmUiLCJTQ1RpbWVsaW5lSW5kaWNhdG9yIiwiaXNTdHJlYW1pbmdQbGFjZWhvbGRlck1lc3NhZ2VJZCIsInJlc29sdmVTdHJlYW1Mb2FkaW5nRGlzcGxheSIsInJlc29sdmVSZXRyeVR1cm5JZCIsImZpbmRVc2VyTWVzc2FnZUZvclJldHJ5IiwidXNlUmVhc29uaW5nVHJhY2UiLCJMb2FkZXIiLCJGYWRlIiwicGF0Y2hNYWlhUGFuZWxTZXNzaW9uIiwicmVhZE1haWFQYW5lbFNlc3Npb24iLCJNZXNzYWdlRnJvbVVzZXIiLCJNZXNzYWdlRnJvbU90aGVyIiwiTWVzc2FnZUNvbnRlbnRGcm9tVXNlciIsIk1lc3NhZ2VDb250ZW50RnJvbU90aGVyIiwiTWVzc2FnZUZlZWRiYWNrIiwiU0NDQUlNZXNzYWdlV3JhcHBlciIsIlNjcm9sbFRvQm90dG9tQnV0dG9uIiwiU0NTY3JvbGxJY29uU3dhcCIsIlNDV3JpdGluZ0RvdHMiLCJTQ01lc3NhZ2VzT3V0ZXIiLCJTQ01lc3NhZ2VzU2Nyb2xsIiwiU0NNZXNzYWdlc0lubmVyIiwiU0NUdXJuU3BhY2VyIiwiU0NPcHRpb25zTGlzdCIsIlNDT3B0aW9uSXRlbSIsIlNDTWVzc2FnZUl0ZW1XcmFwcGVyIiwiU0NNZXNzYWdlSXRlbUlubmVyIiwiU0NBdHRhY2htZW50c1JvdyIsIlNDQXBwcm92YWxBY3Rpb25zQ29sdW1uIiwiU0NMb2FkaW5nTWVzc2FnZXNDb2x1bW4iLCJTQ01lc3NhZ2VzR3JhZGllbnRUb3AiLCJTQ01lc3NhZ2VzR3JhZGllbnRCb3R0b20iLCJGZWVkYmFjayIsInVzZUdsb2JhbENvbnRleHQiLCJFbnRpdHlMaW5rQ3VzdG9tTGluayIsImdldEVudGl0eUxpbmtXcmFwcGVyQ2xhc3NOYW1lIiwiQ2hhdEFJU3VnZ2VzdGlvbnMiLCJDaGF0QUlDcmVhdGVBZ2VudEFjdGlvbnMiLCJFVkVOVFMiLCJ1c2VFdmVudCIsImRvd25sb2FkRmlsZUZyb21VcmwiLCJqc3giLCJfanN4IiwiRnJhZ21lbnQiLCJfRnJhZ21lbnQiLCJqc3hzIiwiX2pzeHMiLCJ0dXJuQW5jaG9yT2Zmc2V0Iiwidmlld3BvcnRIZWlnaHQiLCJNYXRoIiwibWluIiwiVFVSTl9TQ1JPTExfRFVSQVRJT05fTVMiLCJUVVJOX1NDUk9MTF9NQVhfRFVSQVRJT05fTVMiLCJUVVJOX1NDUk9MTF9MT05HX0RJU1RBTkNFX1BYIiwiTWVzc2FnZVdyYXBwZXIiLCJfcmVmIiwiaXNDdXJyZW50VXNlciIsImNoaWxkcmVuIiwicHJvcHMiLCJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCJfZXhjbHVkZWQiLCJNZXNzYWdlQ29tcG9uZW50IiwiX29iamVjdFNwcmVhZCIsIk1lc3NhZ2VDb250ZW50V3JhcHBlciIsIl9yZWYyIiwiX2V4Y2x1ZGVkMiIsIk1lc3NhZ2VDb250ZW50Q29tcG9uZW50IiwiTWVzc2FnZU9wdGlvbnMiLCJfcmVmMyIsIm9wdGlvbnMiLCJoYW5kbGVTZWxlY3RPcHRpb24iLCJfdXNlU3RhdGUiLCJfdXNlU3RhdGUyIiwiX3NsaWNlZFRvQXJyYXkiLCJzZWxlY3RlZE9wdGlvbiIsInNldFNlbGVjdGVkT3B0aW9uIiwiaGFuZGxlU2VsZWN0Iiwib3B0aW9uIiwibWFwIiwiJGhhc1NlbGVjdGlvbiIsIiRkaW1tZWQiLCJpZCIsIm9uQ2xpY2siLCJuYW1lIiwiU3RyZWFtaW5nTWVzc2FnZUJvZHkiLCJfcHJvcHMkY3JlYXRlQWdlbnRGb2wiLCJfcHJvcHMkc3VnZ2VzdGlvbnMiLCJzdHJlYW1pbmdUZXh0IiwiaXNTdHJlYW1pbmciLCJtZXNzYWdlSWQiLCJyYXdUZXh0IiwibWVzc2FnZSIsIndpbkZsYWdzIiwid2luZG93IiwiZGlzcGxheVRleHQiLCJlbmFibGVkIiwibWF4Q2hhcnNQZXJGcmFtZSIsInNuYXBUb1dvcmRCb3VuZGFyeSIsInN0cmVhbUxhZ01zIiwidGFyZ2V0TGFnTXMiLCJzdHJlYW1BZGFwdCIsImFkYXB0VG9CYWNrZW5kUmF0ZSIsInN0cmVhbUJ1ZmZlck1zIiwidGFyZ2V0QnVmZmVyTXMiLCJzdHJlYW1NaW5CdWZmZXIiLCJtaW5CdWZmZXJDaGFycyIsInN0cmVhbVdhcm11cE1zIiwid2FybXVwTXMiLCJjcmVhdGVBZ2VudEFjdGlvbnNBZ2VudElkIiwiY3JlYXRlQWdlbnRGb2xsb3dVcCIsImFnZW50SWQiLCJoYXNNZW50aW9ucyIsIm1lbnRpb25Ob2RlcyIsImlzRnJvbnRlbmRDYW5jZWxsZWQiLCJjbGFzc05hbWUiLCJzdHlsZSIsImRpc3BsYXkiLCJ2YXJpYW50IiwiY29tcG9uZW50cyIsImEiLCJpc0FuaW1hdGluZyIsImlzQXNzaXN0YW50IiwiaXNFcnJvciIsImFwcHJvdmFsIiwib25SZXRyeSIsImNvbnRlbnQiLCJzb3VyY2VzIiwidW5kZWZpbmVkIiwiaGFuZGxlRmVlZGJhY2siLCJoYW5kbGVGZWVkYmFja0NsaWNrIiwiZGlzYWJsZUZlZWRiYWNrIiwic3VnZ2VzdGlvbnMiLCJsZW5ndGgiLCJvblNlbGVjdFN1Z2dlc3Rpb24iLCJzdWdnZXN0aW9uIiwiaGFuZGxlU3VnZ2VzdGlvbkNsaWNrIiwiZGlzYWJsZWQiLCJzdWdnZXN0aW9uc0Rpc2FibGVkIiwiaGlkZGVuIiwiaXNMYXN0TWVzc2FnZSIsIk1lc3NhZ2VJdGVtIiwiX3Byb3BzJHJlYXNvbmluZyIsIl9wcm9wcyRwcm9qZWN0TWV0YWRhdCIsInVzZXIiLCJhdXRoVXNlciIsImlzQ2hhbmdlUHJvamVjdCIsImhhbmRsZUFwcHJvdmFsRGVjaXNpb24iLCJoYW5kbGVSZXRyeSIsInJvbGUiLCJhdHRhY2htZW50cyIsImFwcHJvdmFsU3RhdHVzIiwiaGFzU2VsZWN0ZWRTdWdnZXN0aW9uIiwic3RyZWFtQWN0aXZpdHkiLCJfdXNlU3RhdGUzIiwiX3VzZVN0YXRlNCIsInByZXZpZXdBdHRhY2htZW50Iiwic2V0UHJldmlld0F0dGFjaG1lbnQiLCJVU0VSIiwidG9TdHJpbmciLCJBU1NJU1RBTlQiLCJpc1N0cmVhbWluZ1BsYWNlaG9sZGVyIiwiaXNBY3RpdmVTdHJlYW1pbmciLCJoYXNTdHJlYW1UZXh0IiwiQm9vbGVhbiIsInJlYXNvbmluZ1RyYWNlIiwic3RyZWFtTmFycmF0aW9uSW5UaW1lbGluZSIsInN0ZXBzIiwic2hvd1N0cmVhbWluZ0JvZHkiLCJzaG93QWN0aXZpdHlJbmRpY2F0b3IiLCJtZXNzYWdlQXR0YWNobWVudHMiLCJBcnJheSIsImlzQXJyYXkiLCJoYW5kbGVBdHRhY2htZW50Q2xpY2siLCJhdHRhY2htZW50IiwiZmlsZSIsIkZpbGUiLCJvcmlnaW5hbEZpbGUiLCJ1cmxfdGh1bWJuYWlsIiwidXJsX29yaWdpbmFsIiwidXJsX2ZpbGUiLCJoYW5kbGVDbG9zZVByZXZpZXciLCJoYW5kbGVBdHRhY2htZW50RG93bmxvYWQiLCJfcmVmNCIsIl9hc3luY1RvR2VuZXJhdG9yIiwiX3JlZ2VuZXJhdG9yUnVudGltZSIsIm1hcmsiLCJfY2FsbGVlIiwiZXh0ZW5zaW9uIiwiZmlsZU5hbWUiLCJmaWxlVXJsIiwiYmxvYlVybCIsImRvd25sb2FkZWRGaWxlIiwibGluayIsIl90Iiwid3JhcCIsIl9jb250ZXh0IiwicHJldiIsIm5leHQiLCJpbmNsdWRlcyIsImNvbmNhdCIsInR5cGUiLCJzZW50IiwiVVJMIiwiY3JlYXRlT2JqZWN0VVJMIiwiYWJydXB0IiwiZG9jdW1lbnQiLCJocmVmIiwiZG93bmxvYWQiLCJib2R5IiwiYXBwZW5kQ2hpbGQiLCJjbGljayIsInNldFRpbWVvdXQiLCJyZW1vdmVDaGlsZCIsInJldm9rZU9iamVjdFVSTCIsImNvbnNvbGUiLCJlcnJvciIsInN0b3AiLCJfeCIsImFwcGx5IiwiYXJndW1lbnRzIiwiaGFzRmVlZGJhY2siLCIkaXNBc3Npc3RhbnQiLCJtZXNzYWdlRXh0cmFDb250ZW50IiwiZmVlZGJhY2siLCJzZXNzaW9uSWQiLCJzcGxpdCIsImZpbHRlciIsInF1ZXN0aW9uSWQiLCJqb2luIiwidHJhY2UiLCJyZWFzb25pbmciLCJpbmRleCIsIl9hdHRhY2htZW50JHR5cGUiLCJfYXR0YWNobWVudCRuYW1lIiwiYXR0YWNobWVudFR5cGUiLCJ0b0xvd2VyQ2FzZSIsImF0dGFjaG1lbnROYW1lIiwiaXNBdWRpb0ZpbGUiLCJzdGFydHNXaXRoIiwic29tZSIsImV4dCIsImVuZHNXaXRoIiwicG9zaXRpb25JbmRleCIsIm9uRG93bmxvYWQiLCJhY3Rpdml0eSIsImNvbXBhY3QiLCJwZW5kaW5nX2FjdGlvbnMiLCJhY3Rpb25zIiwic3RhdHVzIiwib25BcHByb3ZlIiwidGhyZWFkSWRzIiwibWV0YWRhdGEiLCJvblJlamVjdCIsImlzUHJvamVjdERlbGV0ZWQiLCJwcm9qZWN0TWV0YWRhdGEiLCJpc19kZWxldGVkIiwiaXNFeHBhbmRlZCIsImV4cGFuZGVkIiwiaGl0bEluc3RhbmNlSWQiLCJvcmlnaW5hbF90aHJlYWRfaWQiLCJ3YXJuaW5nTWVzc2FnZSIsIndhcm5pbmdfbWVzc2FnZSIsIm1hbnVhbEFwcHJvdmFsRGV0ZWN0ZWQiLCJtYW51YWxfYXBwcm92YWxfZGV0ZWN0ZWQiLCJpc09wZW4iLCJvbkNsb3NlIiwiQ2hhdEFJTWVzc2FnZXNJbm5lciIsIl9yZWY1IiwidXNlckluaXRpYWxNZXNzYWdlIiwiaW5pdGlhbENoYXRJZCIsIm9uRXJyb3IiLCJvblNlbmRNZXNzYWdlUmVhZHkiLCJvblNjcm9sbFRvQm90dG9tIiwiYWdlbnRzIiwiX3VzZVQiLCJ0IiwiX3VzZUdsb2JhbENvbnRleHQiLCJpc1dlYlNlYXJjaEFjdGl2ZSIsImlzRGVlcFNlYXJjaEFjdGl2ZSIsImFnZW50IiwiZXZlbnQiLCJtZXNzYWdlc1JlZiIsImNoYXRJbml0aWFsaXplZFJlZiIsImlzTG9hZGluZ01vcmVSZWYiLCJzY3JvbGxUaHJlc2hvbGRSZWYiLCJsYXN0U2Nyb2xsVG9wUmVmIiwic2hvd1Njcm9sbFRvQm90dG9tUmVmIiwic2hvd1RvcEdyYWRpZW50UmVmIiwic2hvd0JvdHRvbUdyYWRpZW50UmVmIiwic2Nyb2xsUmFmUmVmIiwiYW5jaG9yZWRUdXJuSWRSZWYiLCJzcGFjZXJFbFJlZiIsInNwYWNlckhlaWdodFJlZiIsInR1cm5TY3JvbGxSYWZSZWYiLCJ3YXNMb2FkaW5nTWVzc2FnZXNSZWYiLCJsYXN0U2Nyb2xsZWRTZXNzaW9uUmVmIiwicGVuZGluZ1Njcm9sbFJlc3RvcmVSZWYiLCJzY3JvbGxQZXJzaXN0VGltZXJSZWYiLCJfdXNlU3RhdGU1IiwiX3VzZVN0YXRlNiIsInNob3dTY3JvbGxUb0JvdHRvbSIsInNldFNob3dTY3JvbGxUb0JvdHRvbSIsIl91c2VTdGF0ZTciLCJfdXNlU3RhdGU4Iiwic2hvd1RvcEdyYWRpZW50Iiwic2V0U2hvd1RvcEdyYWRpZW50IiwiX3VzZVN0YXRlOSIsIl91c2VTdGF0ZTAiLCJzaG93Qm90dG9tR3JhZGllbnQiLCJzZXRTaG93Qm90dG9tR3JhZGllbnQiLCJfdXNlU3RhdGUxIiwiX3VzZVN0YXRlMTAiLCJzZWxlY3RlZFN1Z2dlc3Rpb25NZXNzYWdlSWRzIiwic2V0U2VsZWN0ZWRTdWdnZXN0aW9uTWVzc2FnZUlkcyIsIl91c2VDaGF0TWFuYWdlciIsImNoYXRJZCIsIm1lc3NhZ2VzIiwibG9hZGluZ01lc3NhZ2VzIiwiaXNMb2FkaW5nTW9yZU1lc3NhZ2VzIiwid2FpdGluZ1Jlc3BvbnNlIiwiaXNXcml0aW5nIiwibG9hZGluZ01lc3NhZ2UiLCJhY3RpdmVMb2FkaW5ncyIsInNlbmRNZXNzYWdlIiwicmV0cnlNZXNzYWdlIiwiY2hhbmdlUHJvamVjdCIsImluaXRpYWxpemVDaGF0IiwiaGFuZGxlU2Nyb2xsIiwic3RvcEdlbmVyYXRpb24iLCJ1cGRhdGVTY3JvbGxBZmZvcmRhbmNlcyIsImVsIiwiY3VycmVudCIsInNjcm9sbFRvcCIsInNjcm9sbEhlaWdodCIsImNsaWVudEhlaWdodCIsImRpc3RhbmNlRnJvbUJvdHRvbSIsInNob3VsZFNob3ciLCJuZXh0VG9wR3JhZGllbnQiLCJuZXh0Qm90dG9tR3JhZGllbnQiLCJzY3JvbGxUb0JvdHRvbVJhZiIsIm9wdHMiLCJfb3B0cyRkZWxheU1zIiwiZGVsYXlNcyIsInJ1biIsInJlcXVlc3RBbmltYXRpb25GcmFtZSIsImNhbmNlbFR1cm5TY3JvbGwiLCJjYW5jZWxBbmltYXRpb25GcmFtZSIsImFuaW1hdGVTY3JvbGxUbyIsInRvcCIsImZyb20iLCJkaXN0YW5jZSIsImFicyIsImR1cmF0aW9uIiwic3RhcnRlZEF0IiwicGVyZm9ybWFuY2UiLCJub3ciLCJzdGVwIiwicHJvZ3Jlc3MiLCJlYXNlZCIsInBvdyIsInNldFNwYWNlckhlaWdodCIsImhlaWdodCIsImNsZWFyVHVyblNwYWNlIiwiZHJhaW5UdXJuU3BhY2UiLCJyZW1vdmFibGUiLCJtYXgiLCJyZWxlYXNlVHVyblNwYWNlIiwiaGFuZGxlVXNlclNjcm9sbEludGVudCIsIm1lYXN1cmVUdXJuIiwic3BhY2VyRWwiLCJxdWVzdGlvbkVsIiwicXVlcnlTZWxlY3RvciIsImNvbnRhaW5lclRvcCIsImdldEJvdW5kaW5nQ2xpZW50UmVjdCIsInF1ZXN0aW9uVG9wIiwiY29udGVudEJvdHRvbSIsInR1cm5IZWlnaHQiLCJyZXNlcnZlVHVyblNwYWNlIiwibWVhc3VyZWQiLCJvZmZzZXQiLCJ0YXJnZXRTY3JvbGxUb3AiLCJzeW5jVHVyblNwYWNlIiwicmVzZXJ2ZWQiLCJoYW5kbGVDbGlja1Njcm9sbFRvQm90dG9tIiwiaGFuZGxlU2Nyb2xsVG9Cb3R0b20iLCJlIiwiY29udGFpbmVyIiwiY3VycmVudFRhcmdldCIsImlzU2Nyb2xsaW5nVXAiLCJpc05lYXJCb3R0b20iLCJjbGVhclRpbWVvdXQiLCJzY3JvbGxTZXNzaW9uSWQiLCJzZW5kTWVzc2FnZVJlZiIsInN0b3BHZW5lcmF0aW9uUmVmIiwib25TZW5kTWVzc2FnZVJlYWR5UmVmIiwic2VuZE1lc3NhZ2VQcm94eVJlZiIsImZhcUlkIiwiYWdlbnRTdWdnZXN0aW9uSWQiLCJtZW50aW9ucyIsImZ1YUlkIiwic2NJZCIsInN0b3BHZW5lcmF0aW9uUHJveHlSZWYiLCJtZXNzYWdlc0RhdGFSZWYiLCJzZWxlY3RlZFN1Z2dlc3Rpb25NZXNzYWdlSWRzUmVmIiwidHJpbSIsImN1cnJlbnRNZXNzYWdlcyIsImlzTWFya2V0cGxhY2VHbG9iYWxBZ2VudCIsImFpQ2hhdFN1Z2dlc3RlZEFuc3dlciIsImFnZW50X3R5cGUiLCJfZGVmaW5lUHJvcGVydHkiLCJ0YXJnZXRNZXNzYWdlIiwiZmluZCIsIm1zZyIsImlzUmV0cnlTdWdnZXN0aW9uIiwibGFzdFVzZXJNZXNzYWdlIiwiYXQiLCJyZXRyeUF0dGFjaG1lbnRzIiwicmFmSWQiLCJ0aWNrIiwibGFzdFJlc2VydmVkUXVlc3Rpb25SZWYiLCJfbWVzc2FnZXMkaW5kZXgiLCJsYXN0TWVzc2FnZUlkUmVmIiwibGFzdE1lc3NhZ2VzTGVuZ3RoUmVmIiwiX21lc3NhZ2VzJGlkIiwiX21lc3NhZ2VzIiwiX2xhc3RNZXNzYWdlJGlkIiwibGFzdE1lc3NhZ2UiLCJsYXN0SWQiLCJwcmV2SWQiLCJwcmV2TGVuIiwiaXNOZXdNZXNzYWdlIiwiaXNBdEJvdHRvbSIsImhhc0luaXRpYWxNZXNzYWdlIiwiaXNBcHByb3ZhbCIsImlzQW5zd2VyT3JRdWVzdGlvbiIsIl9tZXNzYWdlcyRpZDIiLCJfbWVzc2FnZXMyIiwianVzdEZpbmlzaGVkTG9hZGluZyIsImF0dGFjaG1lbnRzQ291bnQiLCJzdHJlYW1Mb2FkaW5nRGlzcGxheSIsImhhc0F0dGFjaG1lbnRzIiwiaXNTY3JvbGxPblBhcmVudCIsInNlc3Npb24iLCJleHBhbmRlZFJlZiIsInNhdmVkU2Nyb2xsVG9wIiwiZmlsbCIsImhhc01lc3NhZ2VMZXZlbEluZGljYXRvciIsIm1lc3NhZ2VzQ29udGVudCIsInRleHQiLCJfbWVzc2FnZSRhdHRhY2htZW50cyIsIl9tZXNzYWdlJHNvdXJjZXMiLCJfbWVzc2FnZSRwcm9qZWN0IiwiX21lc3NhZ2UkaWQiLCJpc0Fzc2lzdGFudE1lc3NhZ2UiLCJwcm9qZWN0IiwibWVzc2FnZUZlZWRiYWNrIiwid2FzSGVscGZ1bCIsIlRIVU1CU19VUCIsIlRIVU1CU19ET1dOIiwibWVzc2FnZUtleSIsInR1cm5JZCIsInVzZXJNZXNzYWdlRm9yUmV0cnkiLCJjYW5SZXRyeSIsImlzX2NhbmNlbGxlZCIsImtleSIsInJlZiIsIiRzY3JvbGxPblBhcmVudCIsIm9uV2hlZWwiLCJvblRvdWNoU3RhcnQiLCIkc2hvdyIsIm9uU2Nyb2xsIiwiJHZpc2libGUiLCJ4bWxucyIsIndpZHRoIiwic3Ryb2tlIiwic3Ryb2tlTGluZWNhcCIsInN0cm9rZUxpbmVqb2luIiwic3Ryb2tlV2lkdGgiLCJkIiwiQ2hhdEFJTWVzc2FnZXMiXSwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50cy9tb2xlY3VsZXMvQ2hhdEFJTWVzc2FnZXMvQ2hhdEFJTWVzc2FnZXMudHN4Il0sInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIGltcG9ydC9uby1leHRyYW5lb3VzLWRlcGVuZGVuY2llcyAqL1xuLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L2luZGVudCAqL1xuLyogZXNsaW50LWRpc2FibGUgcmVhY3Qvbm8tdW5zdGFibGUtbmVzdGVkLWNvbXBvbmVudHMgKi9cbi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1zaGFkb3cgKi9cbi8qIGVzbGludC1kaXNhYmxlIG5vLW5lc3RlZC10ZXJuYXJ5ICovXG4vKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55ICovXG4vKiBlc2xpbnQtZGlzYWJsZSBuby11bmRlZiAqL1xuLyogZXNsaW50LWRpc2FibGUgcmVhY3QvZnVuY3Rpb24tY29tcG9uZW50LWRlZmluaXRpb24gKi9cbi8qIGVzbGludC1kaXNhYmxlIHJlYWN0L3JlcXVpcmUtZGVmYXVsdC1wcm9wcyAqL1xuLyogZXNsaW50LWRpc2FibGUganN4LWExMXkvY2xpY2stZXZlbnRzLWhhdmUta2V5LWV2ZW50cyAqL1xuLyogZXNsaW50LWRpc2FibGUganN4LWExMXkvbm8tc3RhdGljLWVsZW1lbnQtaW50ZXJhY3Rpb25zICovXG5pbXBvcnQgUmVhY3QsIHsgRkMsIG1lbW8sIFJlYWN0Tm9kZSwgdXNlQ2FsbGJhY2ssIHVzZUVmZmVjdCwgdXNlTGF5b3V0RWZmZWN0LCB1c2VSZWYsIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnXG5cbmltcG9ydCB7IEF0dGFjaG1lbnRDYXJkIH0gZnJvbSAnLi4vLi4vYXRvbXMvQXR0YWNobWVudENhcmQvQXR0YWNobWVudENhcmQnXG5pbXBvcnQgeyBBcHByb3ZhbEJveCB9IGZyb20gJy4uLy4uL2F0b21zL0FwcHJvdmFsQm94L0FwcHJvdmFsQm94J1xuaW1wb3J0IHsgQXR0YWNobWVudFByZXZpZXdNb2RhbCB9IGZyb20gJy4uLy4uL2F0b21zL0F0dGFjaG1lbnRQcmV2aWV3TW9kYWwnXG5pbXBvcnQgeyBBdHRhY2htZW50Q2FyZEF1ZGlvIH0gZnJvbSAnLi4vLi4vYXRvbXMvQXR0YWNobWVudENhcmQvQXR0YWNobWVudENhcmRBdWRpbydcbmltcG9ydCB7IE1haWFTdHJlYW1kb3duIH0gZnJvbSAnLi4vLi4vYXRvbXMvTWFpYVN0cmVhbWRvd24nXG5pbXBvcnQgdHlwZSB7IE1haWFTdHJlYW1kb3duUHJvcHMgfSBmcm9tICcuLi8uLi9hdG9tcy9NYWlhU3RyZWFtZG93bidcbmltcG9ydCB7IE1BSUFNZXNzYWdlUHJvcHMgfSBmcm9tICcuLi8uLi9hdG9tcy9NQUlBTWVzc2FnZS9NQUlBTWVzc2FnZS5pbnRlcmZhY2VzJ1xuaW1wb3J0IHsgQ2hhdE1lc3NhZ2UsIENoYXRIaXN0b3J5Um9sZSB9IGZyb20gJy4uLy4uLy4uL3R5cGVzL0NoYXQnXG5pbXBvcnQgeyByZW5kZXJUZXh0V2l0aE1lbnRpb25zLCBoYXNJbmxpbmVNYXJrZXJzIH0gZnJvbSAnLi4vLi4vLi4vdXRpbHMvcmVuZGVyQ29udGV4dE1lbnRpb25zJ1xuXG5pbXBvcnQgeyBpc01haWFrZXJBZ2VudCB9IGZyb20gJy4uLy4uLy4uL3V0aWxzL2FnZW50RGlzcGxheU5hbWUnXG5pbXBvcnQgeyBDT1JVc2VyLCB1c2VVc2VyIH0gZnJvbSAnLi4vLi4vLi4vY29udGV4dC9jb3ItdXNlcidcblxuaW1wb3J0IHsgdXNlVCB9IGZyb20gJy4uLy4uLy4uL2hvb2tzL3VzZVQnXG5pbXBvcnQgeyB1c2VDaGF0TWFuYWdlciB9IGZyb20gJy4uLy4uLy4uL2hvb2tzL3VzZUNoYXRNYW5hZ2VyL3VzZUNoYXRNYW5hZ2VyJ1xuaW1wb3J0IHsgdXNlU21vb3RoU3RyZWFtVGV4dCB9IGZyb20gJy4uLy4uLy4uL2hvb2tzL3VzZVNtb290aFN0cmVhbVRleHQnXG5pbXBvcnQgeyB1c2VTdHJlYW1pbmdNZXNzYWdlIH0gZnJvbSAnLi4vLi4vLi4vaG9va3MvdXNlU3RyZWFtaW5nTWVzc2FnZSdcblxuaW1wb3J0IHsgTG9hZGluZ1RleHQgfSBmcm9tICcuLi8uLi9hdG9tcy9Mb2FkaW5nVGV4dCdcbmltcG9ydCB7IEFnZW50QWN0aXZpdHlJbmRpY2F0b3IgfSBmcm9tICcuLi8uLi9hdG9tcy9BZ2VudEFjdGl2aXR5SW5kaWNhdG9yJ1xuaW1wb3J0IHsgUmVhc29uaW5nQmxvY2sgfSBmcm9tICcuLi8uLi9hdG9tcy9SZWFzb25pbmdCbG9jay9SZWFzb25pbmdCbG9jaydcbmltcG9ydCB7IHNob3VsZFN0cmVhbU5hcnJhdGlvbkluVGltZWxpbmUgfSBmcm9tICcuLi8uLi9hdG9tcy9SZWFzb25pbmdCbG9jay9yZWFzb25pbmdMaXZlTmFycmF0aW9uJ1xuaW1wb3J0IHsgUmVhc29uaW5nVGltZWxpbmUgfSBmcm9tICcuLi8uLi9hdG9tcy9SZWFzb25pbmdCbG9jay9SZWFzb25pbmdUaW1lbGluZSdcbmltcG9ydCB7IFNDVGltZWxpbmVJbmRpY2F0b3IgfSBmcm9tICcuLi8uLi9hdG9tcy9SZWFzb25pbmdCbG9jay9SZWFzb25pbmdCbG9jay5zdHlsZXMnXG5pbXBvcnQgdHlwZSB7IFN0cmVhbUFjdGl2aXR5IH0gZnJvbSAnLi4vLi4vLi4vdHlwZXMvc3RyZWFtQWN0aXZpdHknXG5pbXBvcnQgeyBpc1N0cmVhbWluZ1BsYWNlaG9sZGVyTWVzc2FnZUlkLCByZXNvbHZlU3RyZWFtTG9hZGluZ0Rpc3BsYXkgfSBmcm9tICcuLi8uLi8uLi91dGlscy9zdHJlYW1BY3Rpdml0eU1lc3NhZ2VzJ1xuaW1wb3J0IHsgcmVzb2x2ZVJldHJ5VHVybklkLCBmaW5kVXNlck1lc3NhZ2VGb3JSZXRyeSB9IGZyb20gJy4uLy4uLy4uL3V0aWxzL3JldHJ5Q29tcGxldGlvbidcbmltcG9ydCB7IHVzZVJlYXNvbmluZ1RyYWNlIH0gZnJvbSAnLi4vLi4vLi4vaG9va3MvdXNlUmVhc29uaW5nVHJhY2UnXG5pbXBvcnQgeyBMb2FkZXIgfSBmcm9tICcuLi8uLi9hdG9tcy9Mb2FkZXInXG5pbXBvcnQgeyBGYWRlIH0gZnJvbSAnLi4vLi4vYXRvbXMvRmFkZSdcbmltcG9ydCB7IHBhdGNoTWFpYVBhbmVsU2Vzc2lvbiwgcmVhZE1haWFQYW5lbFNlc3Npb24gfSBmcm9tICcuLi8uLi8uLi9zdG9yZS9tYWlhUGFuZWxTZXNzaW9uUGVyc2lzdGVuY2UnXG5cbmltcG9ydCB7IFByb2plY3QgfSBmcm9tICcuLi8uLi8uLi90eXBlcy9Qcm9qZWN0J1xuXG5pbXBvcnQgeyBNZXNzYWdlRnJvbVVzZXIsIE1lc3NhZ2VGcm9tT3RoZXIsIE1lc3NhZ2VDb250ZW50RnJvbVVzZXIsIE1lc3NhZ2VDb250ZW50RnJvbU90aGVyIH0gZnJvbSAnLi9zdHlsZXMnXG5pbXBvcnQgeyBNZXNzYWdlRmVlZGJhY2sgfSBmcm9tICcuLi9NZXNzYWdlRmVlZGJhY2snXG5pbXBvcnQge1xuICBTQ0NBSU1lc3NhZ2VXcmFwcGVyLFxuICBTY3JvbGxUb0JvdHRvbUJ1dHRvbixcbiAgU0NTY3JvbGxJY29uU3dhcCxcbiAgU0NXcml0aW5nRG90cyxcbiAgU0NNZXNzYWdlc091dGVyLFxuICBTQ01lc3NhZ2VzU2Nyb2xsLFxuICBTQ01lc3NhZ2VzSW5uZXIsXG4gIFNDVHVyblNwYWNlcixcbiAgU0NPcHRpb25zTGlzdCxcbiAgU0NPcHRpb25JdGVtLFxuICBTQ01lc3NhZ2VJdGVtV3JhcHBlcixcbiAgU0NNZXNzYWdlSXRlbUlubmVyLFxuICBTQ0F0dGFjaG1lbnRzUm93LFxuICBTQ0FwcHJvdmFsQWN0aW9uc0NvbHVtbixcbiAgU0NMb2FkaW5nTWVzc2FnZXNDb2x1bW4sXG4gIFNDTWVzc2FnZXNHcmFkaWVudFRvcCxcbiAgU0NNZXNzYWdlc0dyYWRpZW50Qm90dG9tLFxufSBmcm9tICcuL25ld1N0eWxlcydcbmltcG9ydCB7IEZlZWRiYWNrIH0gZnJvbSAnLi4vTWVzc2FnZUZlZWRiYWNrL01lc3NhZ2VGZWVkYmFjaydcbmltcG9ydCB7IHVzZUdsb2JhbENvbnRleHQgfSBmcm9tICcuLi8uLi8uLi9jb250ZXh0L2dsb2JhbC1jb250ZXh0J1xuaW1wb3J0IHsgQWdlbnQgfSBmcm9tICcuLi8uLi8uLi90eXBlcy9hZ2VudCdcbmltcG9ydCB7IEF0dGFjaG1lbnRGaWxlIH0gZnJvbSAnLi4vQ2hhdEZvb3Rlci9DaGF0Rm9vdGVyJ1xuaW1wb3J0IHsgQ29udGV4dE1lbnRpb24gfSBmcm9tICcuLi8uLi8uLi90eXBlcy9jb250ZXh0TWVudGlvbidcbmltcG9ydCB7IEVudGl0eUxpbmtDdXN0b21MaW5rLCBnZXRFbnRpdHlMaW5rV3JhcHBlckNsYXNzTmFtZSB9IGZyb20gJy4uLy4uLy4uL3V0aWxzL2VudGl0eUxpbmtSZW5kZXInXG5pbXBvcnQgeyBDaGF0QUlTdWdnZXN0aW9ucyB9IGZyb20gJy4vQ2hhdEFJU3VnZ2VzdGlvbnMnXG5pbXBvcnQgeyBDaGF0QUlDcmVhdGVBZ2VudEFjdGlvbnMgfSBmcm9tICcuL0NoYXRBSUNyZWF0ZUFnZW50QWN0aW9ucydcbmltcG9ydCB7IEVWRU5UUywgdXNlRXZlbnQgfSBmcm9tICcuLi8uLi8uLi9ob29rcy91c2VFdmVudCdcbmltcG9ydCB7IGRvd25sb2FkRmlsZUZyb21VcmwgfSBmcm9tICcuLi8uLi8uLi91dGlscy9maWxlRG93bmxvYWRIZWxwZXInXG5cbnR5cGUgQ2hhdEFJTWVzc2FnZXNQcm9wcyA9IHtcbiAgdXNlckluaXRpYWxNZXNzYWdlOiB7XG4gICAgbWVzc2FnZTogc3RyaW5nXG4gICAgYXR0YWNobWVudHM6IEF0dGFjaG1lbnRGaWxlW11cbiAgICBmYXFJZD86IHN0cmluZ1xuICAgIGFnZW50U3VnZ2VzdGlvbklkPzogc3RyaW5nXG4gICAgbWVudGlvbnM/OiBDb250ZXh0TWVudGlvbltdXG4gICAgZnVhSWQ/OiBzdHJpbmdcbiAgICBzY0lkPzogc3RyaW5nXG4gIH1cbiAgaW5pdGlhbENoYXRJZDogc3RyaW5nIHwgbnVsbFxuICBvbkVycm9yOiAoKSA9PiB2b2lkXG4gIG9uU2VuZE1lc3NhZ2VSZWFkeT86IChcbiAgICBzZW5kTWVzc2FnZTogKFxuICAgICAgbWVzc2FnZTogc3RyaW5nLFxuICAgICAgYXR0YWNobWVudHM/OiBBdHRhY2htZW50RmlsZVtdLFxuICAgICAgZmFxSWQ/OiBzdHJpbmcsXG4gICAgICBhZ2VudFN1Z2dlc3Rpb25JZD86IHN0cmluZyxcbiAgICAgIG1lbnRpb25zPzogQ29udGV4dE1lbnRpb25bXSxcbiAgICAgIGZ1YUlkPzogc3RyaW5nLFxuICAgICAgc2NJZD86IHN0cmluZ1xuICAgICkgPT4gdm9pZCxcbiAgICBzdG9wR2VuZXJhdGlvbjogKCkgPT4gdm9pZCxcbiAgICBpc1N0cmVhbWluZzogYm9vbGVhbixcbiAgICBpc1dyaXRpbmc6IGJvb2xlYW5cbiAgKSA9PiB2b2lkXG4gIGlzRGlzYWJsZWQ/OiBib29sZWFuXG4gIG9uU2Nyb2xsVG9Cb3R0b20/OiAoKSA9PiB2b2lkXG4gIGF0dGFjaG1lbnRzPzogQXR0YWNobWVudEZpbGVbXVxuICBhZ2VudHM/OiBBZ2VudFtdXG4gIGV4cGFuZGVkPzogYm9vbGVhblxufVxuXG4vKipcbiAqIEFsIGFuY2xhciBlbCB0dXJubywgbGEgcHJlZ3VudGEgbm8gc2UgcGVnYSBhbCBib3JkZSBzdXBlcmlvcjogZGVqYW1vcyBhc29tYXJcbiAqIGxhIGNvbGEgZGVsIG1lbnNhamUgYW50ZXJpb3IgcGFyYSBubyBwZXJkZXIgZWwgaGlsbyBkZSBsYSBjb252ZXJzYWNpw7NuLlxuICogUmVsYXRpdm8gYWwgdmlld3BvcnQgcG9ycXVlIHVuIHZhbG9yIGZpam8gc2UgY29tZSBkZW1hc2lhZG8gZW4gcGFudGFsbGFzIGNvcnRhcy5cbiAqL1xuY29uc3QgdHVybkFuY2hvck9mZnNldCA9ICh2aWV3cG9ydEhlaWdodDogbnVtYmVyKTogbnVtYmVyID0+IE1hdGgubWluKHZpZXdwb3J0SGVpZ2h0ICogMC4xOCwgMjAwKVxuXG4vKipcbiAqIER1cmFjacOzbiBkZWwgc2Nyb2xsIGFuaW1hZG86IGJhc2UgeSB0b3BlIHBhcmEgcmVjb3JyaWRvcyBsYXJnb3MsIHBhcmEgcXVlIHVuXG4gKiBzYWx0byBkZSB2YXJpYXMgcGFudGFsbGFzIG5vIHNlIHNpZW50YSB1biBsYXRpZ2F6by5cbiAqL1xuY29uc3QgVFVSTl9TQ1JPTExfRFVSQVRJT05fTVMgPSA2MDBcbmNvbnN0IFRVUk5fU0NST0xMX01BWF9EVVJBVElPTl9NUyA9IDgwMFxuXG4vKiogRGlzdGFuY2lhIGEgcGFydGlyIGRlIGxhIGN1YWwgbGEgZHVyYWNpw7NuIHlhIGVzdMOhIGVuIHN1IHRvcGUuICovXG5jb25zdCBUVVJOX1NDUk9MTF9MT05HX0RJU1RBTkNFX1BYID0gMTIwMFxuXG50eXBlIE1lc3NhZ2VJdGVtUHJvcHMgPSBDaGF0TWVzc2FnZSAmIHtcbiAgYXV0aFVzZXI6IENPUlVzZXJcbiAgaGFuZGxlU2VsZWN0T3B0aW9uOiAob3B0aW9uOiBQcm9qZWN0KSA9PiB2b2lkXG4gIGhhbmRsZVN1Z2dlc3Rpb25DbGljazogKG1lc3NhZ2VJZDogc3RyaW5nLCBzdWdnZXN0aW9uOiBzdHJpbmcpID0+IHZvaWRcbiAgaGFzU2VsZWN0ZWRTdWdnZXN0aW9uPzogYm9vbGVhblxuICBoYW5kbGVGZWVkYmFjazogKGZlZWRiYWNrOiBGZWVkYmFjaywgY2hhdE1lc3NhZ2VJZDogc3RyaW5nKSA9PiB2b2lkXG4gIGhhbmRsZUFwcHJvdmFsRGVjaXNpb246IChcbiAgICB0aHJlYWRJZHM6IHN0cmluZ1tdLFxuICAgIGRlY2lzaW9uOiAnYXBwcm92ZScgfCAncmVqZWN0JyxcbiAgICBlZGl0ZWRBY3Rpb25zPzogQXJyYXk8eyB0b29sX25hbWU6IHN0cmluZzsgYXJnczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfT4sXG4gICAgbWV0YWRhdGE/OiB7IHRvb2xfZ3JvdXBfc2x1Z3M6IHN0cmluZ1tdIH1cbiAgKSA9PiB2b2lkXG4gIGhhbmRsZVJldHJ5PzogKCkgPT4gdm9pZFxuICBkaXNhYmxlRmVlZGJhY2s/OiBGZWVkYmFjayB8IG51bGxcbiAgc291cmNlcz86IGFueVxuICBhdHRhY2htZW50cz86IEF0dGFjaG1lbnRGaWxlW11cbiAgaXNTdHJlYW1pbmc/OiBib29sZWFuXG4gIGlzTGFzdE1lc3NhZ2U/OiBib29sZWFuXG4gIGV4cGFuZGVkPzogYm9vbGVhblxuICBzdHJlYW1BY3Rpdml0eT86IFN0cmVhbUFjdGl2aXR5IHwgbnVsbFxufVxuXG5pbnRlcmZhY2UgTWVzc2FnZVdyYXBwZXJQcm9wcyB7XG4gIGlzQ3VycmVudFVzZXI6IGJvb2xlYW5cbiAgY2hpbGRyZW46IFJlYWN0Tm9kZVxuICAnZGF0YS1tZXNzYWdlLWlkJz86IHN0cmluZ1xuICBoYXNGZWVkYmFjaz86IGJvb2xlYW5cbn1cblxudHlwZSBNZXNzYWdlQ29udGVudFdyYXBwZXJQcm9wcyA9IE1BSUFNZXNzYWdlUHJvcHMgJiB7XG4gIGlzQ3VycmVudFVzZXI6IGJvb2xlYW5cbiAgaXNFcnJvcj86IGJvb2xlYW5cbiAgaXNDaGFuZ2VQcm9qZWN0PzogYm9vbGVhblxufVxuXG5jb25zdCBNZXNzYWdlV3JhcHBlcjogRkM8TWVzc2FnZVdyYXBwZXJQcm9wcz4gPSAoeyBpc0N1cnJlbnRVc2VyLCBjaGlsZHJlbiwgLi4ucHJvcHMgfSkgPT4ge1xuICBjb25zdCBNZXNzYWdlQ29tcG9uZW50ID0gaXNDdXJyZW50VXNlciA/IE1lc3NhZ2VGcm9tVXNlciA6IE1lc3NhZ2VGcm9tT3RoZXJcbiAgcmV0dXJuIDxNZXNzYWdlQ29tcG9uZW50IHsuLi5wcm9wc30+e2NoaWxkcmVufTwvTWVzc2FnZUNvbXBvbmVudD5cbn1cblxuY29uc3QgTWVzc2FnZUNvbnRlbnRXcmFwcGVyOiBGQzxNZXNzYWdlQ29udGVudFdyYXBwZXJQcm9wcz4gPSAoeyBpc0N1cnJlbnRVc2VyLCAuLi5wcm9wcyB9KSA9PiB7XG4gIGNvbnN0IE1lc3NhZ2VDb250ZW50Q29tcG9uZW50ID0gaXNDdXJyZW50VXNlciA/IE1lc3NhZ2VDb250ZW50RnJvbVVzZXIgOiBNZXNzYWdlQ29udGVudEZyb21PdGhlclxuICByZXR1cm4gPE1lc3NhZ2VDb250ZW50Q29tcG9uZW50IHsuLi5wcm9wc30gLz5cbn1cblxuZnVuY3Rpb24gTWVzc2FnZU9wdGlvbnMoe1xuICBvcHRpb25zLFxuICBoYW5kbGVTZWxlY3RPcHRpb24sXG59OiB7XG4gIG9wdGlvbnM6IFByb2plY3RbXSB8IG51bGxcbiAgaGFuZGxlU2VsZWN0T3B0aW9uOiAob3B0aW9uOiBQcm9qZWN0KSA9PiB2b2lkXG59KSB7XG4gIGNvbnN0IFtzZWxlY3RlZE9wdGlvbiwgc2V0U2VsZWN0ZWRPcHRpb25dID0gdXNlU3RhdGU8UHJvamVjdCB8IG51bGw+KG51bGwpXG5cbiAgY29uc3QgaGFuZGxlU2VsZWN0ID0gKG9wdGlvbjogUHJvamVjdCkgPT4ge1xuICAgIGlmIChzZWxlY3RlZE9wdGlvbikgcmV0dXJuXG4gICAgc2V0U2VsZWN0ZWRPcHRpb24ob3B0aW9uKVxuICAgIGhhbmRsZVNlbGVjdE9wdGlvbihvcHRpb24pXG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxTQ09wdGlvbnNMaXN0PlxuICAgICAgeyhvcHRpb25zIHx8IFtdKS5tYXAob3B0aW9uID0+IChcbiAgICAgICAgPFNDT3B0aW9uSXRlbVxuICAgICAgICAgICRoYXNTZWxlY3Rpb249eyEhc2VsZWN0ZWRPcHRpb259XG4gICAgICAgICAgJGRpbW1lZD17ISFzZWxlY3RlZE9wdGlvbiAmJiBzZWxlY3RlZE9wdGlvbj8uaWQgIT09IG9wdGlvbi5pZH1cbiAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBoYW5kbGVTZWxlY3Qob3B0aW9uKX1cbiAgICAgICAgICBrZXk9e29wdGlvbi5pZH1cbiAgICAgICAgPlxuICAgICAgICAgIHtvcHRpb24ubmFtZX1cbiAgICAgICAgPC9TQ09wdGlvbkl0ZW0+XG4gICAgICApKX1cbiAgICA8L1NDT3B0aW9uc0xpc3Q+XG4gIClcbn1cblxuLyoqIFNvbG8gZXN0ZSBjb21wb25lbnRlIHJlLXJlbmRlcml6YSBjdWFuZG8gY2FtYmlhIGVsIHRleHRvIGVuIHN0cmVhbWluZyAobGVlIGRlbCBjb250ZXh0KS4gKi9cbmNvbnN0IFN0cmVhbWluZ01lc3NhZ2VCb2R5ID0gbWVtbyhcbiAgKHByb3BzOiB7XG4gICAgbWVzc2FnZTogc3RyaW5nXG4gICAgaXNTdHJlYW1pbmc6IGJvb2xlYW5cbiAgICBpc0N1cnJlbnRVc2VyOiBib29sZWFuXG4gICAgaXNBc3Npc3RhbnQ6IGJvb2xlYW5cbiAgICBpc0Zyb250ZW5kQ2FuY2VsbGVkPzogYm9vbGVhblxuICAgIGFwcHJvdmFsPzogTWVzc2FnZUl0ZW1Qcm9wc1snYXBwcm92YWwnXVxuICAgIGlzRXJyb3I/OiBib29sZWFuXG4gICAgc291cmNlcz86IE1lc3NhZ2VJdGVtUHJvcHNbJ3NvdXJjZXMnXVxuICAgIHN1Z2dlc3Rpb25zPzogc3RyaW5nW10gfCBudWxsXG4gICAgY3JlYXRlQWdlbnRGb2xsb3dVcD86IHsgYWdlbnRJZDogc3RyaW5nIH0gfCBudWxsXG4gICAgaGFuZGxlRmVlZGJhY2tDbGljazogKGY6IEZlZWRiYWNrKSA9PiB2b2lkXG4gICAgZGlzYWJsZUZlZWRiYWNrOiBGZWVkYmFjayB8IG51bGxcbiAgICBvblJldHJ5PzogKCkgPT4gdm9pZFxuICAgIGhhbmRsZVN1Z2dlc3Rpb25DbGljazogKG1lc3NhZ2VJZDogc3RyaW5nLCBzdWdnZXN0aW9uOiBzdHJpbmcpID0+IHZvaWRcbiAgICBzdWdnZXN0aW9uc0Rpc2FibGVkPzogYm9vbGVhblxuICAgIG1lc3NhZ2VJZDogc3RyaW5nXG4gICAgaXNMYXN0TWVzc2FnZT86IGJvb2xlYW5cbiAgfSkgPT4ge1xuICAgIC8vIFRleHRvIGRlbCBzdHJlYW06IHNvbG8gc2UgbGVlIGRlbCBzdG9yZSBjdWFuZG8gZXN0ZSBtZW5zYWplIGVzIGVsXG4gICAgLy8gcXVlIGVzdMOhIGVuIHN0cmVhbWluZy4gdXNlU3luY0V4dGVybmFsU3RvcmUgYcOtc2xhIGVsIHJlLXJlbmRlciBhXG4gICAgLy8gZXN0ZSBjb21wb25lbnRlLCBzaW4gdG9jYXIgZWwgcmVzdG8gZGVsIMOhcmJvbC5cbiAgICBjb25zdCBzdHJlYW1pbmdUZXh0ID0gdXNlU3RyZWFtaW5nTWVzc2FnZShwcm9wcy5pc1N0cmVhbWluZyA/IHByb3BzLm1lc3NhZ2VJZCA6IG51bGwpXG4gICAgY29uc3QgcmF3VGV4dCA9IHByb3BzLmlzU3RyZWFtaW5nID8gc3RyZWFtaW5nVGV4dCA6IHByb3BzLm1lc3NhZ2VcbiAgICAvLyBTbW9vdGggc3RyZWFtaW5nOiBkZXNhY29wbGEgbGEgY2FkZW5jaWEgZGVsIGJhY2tlbmQgZGVsIHJlbmRlci5cbiAgICAvLyBEdXJhbnRlIGVsIHN0cmVhbWluZyBsaWJlcmEgY2hhcnMgYSByaXRtbyBjb25zdGFudGUgdsOtYSByQUY7IGN1YW5kb1xuICAgIC8vIHRlcm1pbmEsIG11ZXN0cmEgZWwgdGV4dG8gZmluYWwgYWwgaW5zdGFudGUgKHNpbiBhbmltYWNpw7NuIHJlc2lkdWFsKS5cbiAgICAvLyBMb3MgZGVmYXVsdHMgZGVsIGhvb2sgc2UgYWp1c3Rhcm9uIGVtcMOtcmljYW1lbnRlIGVuIHN0YWdpbmc7IGF1biBhc8OtXG4gICAgLy8gc2UgZXhwb25lbiBmbGFncyBkZSBydW50aW1lICh3aW5kb3cuKikgcGFyYSBwb2RlciB0dW5lYXIgc2luIHJlY29tcGlsYXJcbiAgICAvLyBzaSBhbGfDum4gYmFja2VuZCBwcmVzZW50YSB1bmEgY2FkZW5jaWEgbXV5IGRpc3RpbnRhIGVuIHByb2R1Y2Npw7NuLlxuICAgIC8vICAgd2luZG93LnN0cmVhbUFkYXB0ID0gZmFsc2UgICAgICAvLyBkZXNhY3RpdmEgYWRhcHRhY2nDs24gYWwgYmFja2VuZFxuICAgIC8vICAgd2luZG93LnN0cmVhbUJ1ZmZlck1zID0gNjAwICAgICAvLyBjb2xjaMOzbiBvYmpldGl2byAobXMpXG4gICAgLy8gICB3aW5kb3cuc3RyZWFtTGFnTXMgPSA0NTAgICAgICAgIC8vIGxhZyBtw6F4aW1vIGJhc2UgKG1zKVxuICAgIC8vICAgd2luZG93LnN0cmVhbU1pbkJ1ZmZlciA9IDcwICAgICAvLyBwaXNvIGRlbCBjb2xjaMOzbiBlbiBjaGFyc1xuICAgIC8vICAgd2luZG93LnN0cmVhbVdhcm11cE1zID0gNDAwICAgICAvLyB3YXJtdXAgaW5pY2lhbCAobXMpXG4gICAgY29uc3Qgd2luRmxhZ3MgPVxuICAgICAgdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAgPyAod2luZG93IGFzIHVua25vd24gYXMge1xuICAgICAgICAgICAgc3RyZWFtQWRhcHQ/OiBib29sZWFuXG4gICAgICAgICAgICBzdHJlYW1CdWZmZXJNcz86IG51bWJlclxuICAgICAgICAgICAgc3RyZWFtTGFnTXM/OiBudW1iZXJcbiAgICAgICAgICAgIHN0cmVhbU1pbkJ1ZmZlcj86IG51bWJlclxuICAgICAgICAgICAgc3RyZWFtV2FybXVwTXM/OiBudW1iZXJcbiAgICAgICAgICB9KVxuICAgICAgICA6IHt9XG4gICAgY29uc3QgZGlzcGxheVRleHQgPSB1c2VTbW9vdGhTdHJlYW1UZXh0KHJhd1RleHQsIHtcbiAgICAgIGVuYWJsZWQ6ICEhcHJvcHMuaXNTdHJlYW1pbmcsXG4gICAgICBtYXhDaGFyc1BlckZyYW1lOiAyNCxcbiAgICAgIHNuYXBUb1dvcmRCb3VuZGFyeTogdHJ1ZSxcbiAgICAgIC4uLih3aW5GbGFncy5zdHJlYW1MYWdNcyAhPSBudWxsICYmIHsgdGFyZ2V0TGFnTXM6IHdpbkZsYWdzLnN0cmVhbUxhZ01zIH0pLFxuICAgICAgLi4uKHdpbkZsYWdzLnN0cmVhbUFkYXB0ICE9IG51bGwgJiYgeyBhZGFwdFRvQmFja2VuZFJhdGU6IHdpbkZsYWdzLnN0cmVhbUFkYXB0IH0pLFxuICAgICAgLi4uKHdpbkZsYWdzLnN0cmVhbUJ1ZmZlck1zICE9IG51bGwgJiYgeyB0YXJnZXRCdWZmZXJNczogd2luRmxhZ3Muc3RyZWFtQnVmZmVyTXMgfSksXG4gICAgICAuLi4od2luRmxhZ3Muc3RyZWFtTWluQnVmZmVyICE9IG51bGwgJiYgeyBtaW5CdWZmZXJDaGFyczogd2luRmxhZ3Muc3RyZWFtTWluQnVmZmVyIH0pLFxuICAgICAgLi4uKHdpbkZsYWdzLnN0cmVhbVdhcm11cE1zICE9IG51bGwgJiYgeyB3YXJtdXBNczogd2luRmxhZ3Muc3RyZWFtV2FybXVwTXMgfSksXG4gICAgfSlcbiAgICBjb25zdCBjcmVhdGVBZ2VudEFjdGlvbnNBZ2VudElkID0gcHJvcHMuY3JlYXRlQWdlbnRGb2xsb3dVcD8uYWdlbnRJZFxuXG4gICAgaWYgKCFkaXNwbGF5VGV4dCAmJiAhcHJvcHMuaXNTdHJlYW1pbmcpIHJldHVybiBudWxsXG4gICAgY29uc3QgaGFzTWVudGlvbnMgPSBoYXNJbmxpbmVNYXJrZXJzKGRpc3BsYXlUZXh0KVxuICAgIGNvbnN0IG1lbnRpb25Ob2RlcyA9IGhhc01lbnRpb25zID8gcmVuZGVyVGV4dFdpdGhNZW50aW9ucyhkaXNwbGF5VGV4dCkgOiBudWxsXG4gICAgcmV0dXJuIChcbiAgICAgIDw+XG4gICAgICAgIDxTQ0NBSU1lc3NhZ2VXcmFwcGVyXG4gICAgICAgICAgaXNDdXJyZW50VXNlcj17cHJvcHMuaXNDdXJyZW50VXNlcn1cbiAgICAgICAgICBpc0Zyb250ZW5kQ2FuY2VsbGVkPXtwcm9wcy5pc0Zyb250ZW5kQ2FuY2VsbGVkfVxuICAgICAgICAgIGNsYXNzTmFtZT17Z2V0RW50aXR5TGlua1dyYXBwZXJDbGFzc05hbWUoZGlzcGxheVRleHQpfVxuICAgICAgICA+XG4gICAgICAgICAge2hhc01lbnRpb25zICYmIG1lbnRpb25Ob2RlcyA/IChcbiAgICAgICAgICAgIC8vIFNpIGhheSBtZW50aW9ucywgcmVuZGVyaXphciBkaXJlY3RhbWVudGUgKHNpbiBtYXJrZG93biBlbiBlbCBtaXNtbyBww6FycmFmbylcbiAgICAgICAgICAgIDxzcGFuIHN0eWxlPXt7IGRpc3BsYXk6ICdpbmxpbmUnIH19PnttZW50aW9uTm9kZXN9PC9zcGFuPlxuICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAvLyBTaW4gbWVudGlvbnMsIHBhc2FyIGEgU3RyZWFtZG93biBwYXJhIG1hcmtkb3duIHN1cHBvcnRcbiAgICAgICAgICAgIDxNYWlhU3RyZWFtZG93blxuICAgICAgICAgICAgICB2YXJpYW50PVwiY2hhdFwiXG4gICAgICAgICAgICAgIGlzQ3VycmVudFVzZXI9e3Byb3BzLmlzQ3VycmVudFVzZXJ9XG4gICAgICAgICAgICAgIGlzRnJvbnRlbmRDYW5jZWxsZWQ9e3Byb3BzLmlzRnJvbnRlbmRDYW5jZWxsZWR9XG4gICAgICAgICAgICAgIGNvbXBvbmVudHM9e3sgYTogRW50aXR5TGlua0N1c3RvbUxpbmsgfSBhcyBNYWlhU3RyZWFtZG93blByb3BzWydjb21wb25lbnRzJ119XG4gICAgICAgICAgICAgIGlzQW5pbWF0aW5nPXshIXByb3BzLmlzU3RyZWFtaW5nfVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7ZGlzcGxheVRleHR9XG4gICAgICAgICAgICA8L01haWFTdHJlYW1kb3duPlxuICAgICAgICAgICl9XG4gICAgICAgIDwvU0NDQUlNZXNzYWdlV3JhcHBlcj5cbiAgICAgICAge3Byb3BzLmlzQXNzaXN0YW50ICYmXG4gICAgICAgICAgIXByb3BzLmlzRXJyb3IgJiZcbiAgICAgICAgICAhcHJvcHMuYXBwcm92YWwgJiZcbiAgICAgICAgICAhcHJvcHMuaXNTdHJlYW1pbmcgJiZcbiAgICAgICAgICAoIXByb3BzLmlzRnJvbnRlbmRDYW5jZWxsZWQgfHwgISFwcm9wcy5vblJldHJ5KSAmJiAoXG4gICAgICAgICAgICA8TWVzc2FnZUZlZWRiYWNrXG4gICAgICAgICAgICAgIGNvbnRlbnQ9e2Rpc3BsYXlUZXh0fVxuICAgICAgICAgICAgICBzb3VyY2VzPXtwcm9wcy5pc0Zyb250ZW5kQ2FuY2VsbGVkID8gdW5kZWZpbmVkIDogcHJvcHMuc291cmNlc31cbiAgICAgICAgICAgICAgaGFuZGxlRmVlZGJhY2s9e3Byb3BzLmlzRnJvbnRlbmRDYW5jZWxsZWQgPyB1bmRlZmluZWQgOiBwcm9wcy5oYW5kbGVGZWVkYmFja0NsaWNrfVxuICAgICAgICAgICAgICBkaXNhYmxlRmVlZGJhY2s9e3Byb3BzLmRpc2FibGVGZWVkYmFja31cbiAgICAgICAgICAgICAgb25SZXRyeT17cHJvcHMub25SZXRyeX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgKX1cbiAgICAgICAge3Byb3BzLmlzQXNzaXN0YW50ICYmXG4gICAgICAgICAgIXByb3BzLmlzRnJvbnRlbmRDYW5jZWxsZWQgJiZcbiAgICAgICAgICAhcHJvcHMuYXBwcm92YWwgJiZcbiAgICAgICAgICAoIXByb3BzLmlzRXJyb3IgfHwgcHJvcHMuc3VnZ2VzdGlvbnM/Lmxlbmd0aCkgJiYgKFxuICAgICAgICAgICAgPENoYXRBSVN1Z2dlc3Rpb25zXG4gICAgICAgICAgICAgIHN1Z2dlc3Rpb25zPXtwcm9wcy5zdWdnZXN0aW9ucyB8fCBbXX1cbiAgICAgICAgICAgICAgb25TZWxlY3RTdWdnZXN0aW9uPXtzdWdnZXN0aW9uID0+IHByb3BzLmhhbmRsZVN1Z2dlc3Rpb25DbGljayhwcm9wcy5tZXNzYWdlSWQsIHN1Z2dlc3Rpb24pfVxuICAgICAgICAgICAgICBkaXNhYmxlZD17cHJvcHMuc3VnZ2VzdGlvbnNEaXNhYmxlZH1cbiAgICAgICAgICAgICAgaGlkZGVuPXshIXByb3BzLmlzU3RyZWFtaW5nIHx8ICFwcm9wcy5pc0xhc3RNZXNzYWdlIHx8ICEhcHJvcHMuc3VnZ2VzdGlvbnNEaXNhYmxlZH1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgKX1cbiAgICAgICAge3Byb3BzLmlzQXNzaXN0YW50ICYmXG4gICAgICAgICAgIXByb3BzLmlzRXJyb3IgJiZcbiAgICAgICAgICAhcHJvcHMuaXNGcm9udGVuZENhbmNlbGxlZCAmJlxuICAgICAgICAgICFwcm9wcy5hcHByb3ZhbCAmJlxuICAgICAgICAgICEhY3JlYXRlQWdlbnRBY3Rpb25zQWdlbnRJZCAmJiAoXG4gICAgICAgICAgICA8Q2hhdEFJQ3JlYXRlQWdlbnRBY3Rpb25zXG4gICAgICAgICAgICAgIGFnZW50SWQ9e2NyZWF0ZUFnZW50QWN0aW9uc0FnZW50SWR9XG4gICAgICAgICAgICAgIGRpc2FibGVkPXtwcm9wcy5zdWdnZXN0aW9uc0Rpc2FibGVkfVxuICAgICAgICAgICAgICBoaWRkZW49eyEhcHJvcHMuaXNTdHJlYW1pbmcgfHwgIXByb3BzLmlzTGFzdE1lc3NhZ2UgfHwgISFwcm9wcy5zdWdnZXN0aW9uc0Rpc2FibGVkfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICApfVxuICAgICAgPC8+XG4gICAgKVxuICB9XG4pXG5cbmNvbnN0IE1lc3NhZ2VJdGVtID0gbWVtbygocHJvcHM6IE1lc3NhZ2VJdGVtUHJvcHMpID0+IHtcbiAgY29uc3Qge1xuICAgIGlkLFxuICAgIHVzZXIsXG4gICAgbWVzc2FnZSxcbiAgICBpc1N0cmVhbWluZyxcbiAgICBpc0Vycm9yLFxuICAgIGF1dGhVc2VyLFxuICAgIG9wdGlvbnMsXG4gICAgaXNDaGFuZ2VQcm9qZWN0LFxuICAgIGhhbmRsZVNlbGVjdE9wdGlvbixcbiAgICBoYW5kbGVTdWdnZXN0aW9uQ2xpY2ssXG4gICAgaGFuZGxlRmVlZGJhY2ssXG4gICAgaGFuZGxlQXBwcm92YWxEZWNpc2lvbixcbiAgICBkaXNhYmxlRmVlZGJhY2ssXG4gICAgaGFuZGxlUmV0cnksXG4gICAgcm9sZSxcbiAgICBzb3VyY2VzLFxuICAgIGF0dGFjaG1lbnRzLFxuICAgIGFwcHJvdmFsLFxuICAgIGFwcHJvdmFsU3RhdHVzLFxuICAgIHN1Z2dlc3Rpb25zLFxuICAgIGNyZWF0ZUFnZW50Rm9sbG93VXAsXG4gICAgaGFzU2VsZWN0ZWRTdWdnZXN0aW9uLFxuICAgIGlzTGFzdE1lc3NhZ2UsXG4gICAgc3RyZWFtQWN0aXZpdHksXG4gIH0gPSBwcm9wc1xuXG4gIGNvbnN0IFtwcmV2aWV3QXR0YWNobWVudCwgc2V0UHJldmlld0F0dGFjaG1lbnRdID0gdXNlU3RhdGU8QXR0YWNobWVudEZpbGUgfCBudWxsPihudWxsKVxuICBjb25zdCBpc0N1cnJlbnRVc2VyID0gcm9sZSA9PT0gQ2hhdEhpc3RvcnlSb2xlLlVTRVIgfHwgdXNlci5pZCA9PT0gYXV0aFVzZXIuaWQudG9TdHJpbmcoKVxuICBjb25zdCBpc0Fzc2lzdGFudCA9IHJvbGUgPT09IENoYXRIaXN0b3J5Um9sZS5BU1NJU1RBTlQgfHwgdXNlci5pZCA9PT0gJ2Fzc2lzdGFudCdcbiAgY29uc3QgaXNTdHJlYW1pbmdQbGFjZWhvbGRlciA9IGlzU3RyZWFtaW5nUGxhY2Vob2xkZXJNZXNzYWdlSWQoaWQpXG4gIGNvbnN0IHN0cmVhbWluZ1RleHQgPSB1c2VTdHJlYW1pbmdNZXNzYWdlKGlzU3RyZWFtaW5nIHx8IGlzU3RyZWFtaW5nUGxhY2Vob2xkZXIgPyBpZCA6IG51bGwpXG4gIGNvbnN0IGlzQWN0aXZlU3RyZWFtaW5nID0gISFpc1N0cmVhbWluZyB8fCBpc1N0cmVhbWluZ1BsYWNlaG9sZGVyXG4gIGNvbnN0IGhhc1N0cmVhbVRleHQgPSBCb29sZWFuKHN0cmVhbWluZ1RleHQpXG4gIGNvbnN0IHJlYXNvbmluZ1RyYWNlID0gdXNlUmVhc29uaW5nVHJhY2UoaXNBc3Npc3RhbnQgJiYgaXNBY3RpdmVTdHJlYW1pbmcgPyBpZCA6ICcnKVxuICBjb25zdCBzdHJlYW1OYXJyYXRpb25JblRpbWVsaW5lID1cbiAgICBpc0Fzc2lzdGFudCAmJiBzaG91bGRTdHJlYW1OYXJyYXRpb25JblRpbWVsaW5lKHJlYXNvbmluZ1RyYWNlLnN0ZXBzLCBzdHJlYW1BY3Rpdml0eSwgc3RyZWFtaW5nVGV4dCwgaWQpXG4gIGNvbnN0IHNob3dTdHJlYW1pbmdCb2R5ID0gaXNBY3RpdmVTdHJlYW1pbmcgJiYgaGFzU3RyZWFtVGV4dCAmJiAhc3RyZWFtTmFycmF0aW9uSW5UaW1lbGluZVxuICBjb25zdCBzaG93QWN0aXZpdHlJbmRpY2F0b3IgPSBpc0Fzc2lzdGFudCAmJiBpc0FjdGl2ZVN0cmVhbWluZyAmJiAhIXN0cmVhbUFjdGl2aXR5XG5cbiAgY29uc3QgbWVzc2FnZUF0dGFjaG1lbnRzID1cbiAgICBhdHRhY2htZW50cyAmJiBhdHRhY2htZW50cy5sZW5ndGggPiAwXG4gICAgICA/IGF0dGFjaG1lbnRzXG4gICAgICA6ICFpc0Fzc2lzdGFudCAmJiBBcnJheS5pc0FycmF5KHNvdXJjZXMpXG4gICAgICAgID8gKHNvdXJjZXMgYXMgQXR0YWNobWVudEZpbGVbXSlcbiAgICAgICAgOiBbXVxuXG4gIGNvbnN0IGhhbmRsZUF0dGFjaG1lbnRDbGljayA9IChhdHRhY2htZW50OiBBdHRhY2htZW50RmlsZSkgPT4ge1xuICAgIC8vIFBlcm1pdGlyIHByZXZpc3VhbGl6YWNpw7NuIHNpIHRpZW5lIGFyY2hpdm8gbG9jYWwgbyBVUkxzIGRlbCBiYWNrZW5kXG4gICAgaWYgKFxuICAgICAgYXR0YWNobWVudC5maWxlIGluc3RhbmNlb2YgRmlsZSB8fFxuICAgICAgYXR0YWNobWVudC5vcmlnaW5hbEZpbGUgaW5zdGFuY2VvZiBGaWxlIHx8XG4gICAgICBhdHRhY2htZW50LnVybF90aHVtYm5haWwgfHxcbiAgICAgIGF0dGFjaG1lbnQudXJsX29yaWdpbmFsIHx8XG4gICAgICBhdHRhY2htZW50LnVybF9maWxlXG4gICAgKSB7XG4gICAgICBzZXRQcmV2aWV3QXR0YWNobWVudChhdHRhY2htZW50KVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGhhbmRsZUNsb3NlUHJldmlldyA9ICgpID0+IHtcbiAgICBzZXRQcmV2aWV3QXR0YWNobWVudChudWxsKVxuICB9XG5cbiAgY29uc3QgaGFuZGxlQXR0YWNobWVudERvd25sb2FkID0gYXN5bmMgKGF0dGFjaG1lbnQ6IEF0dGFjaG1lbnRGaWxlKSA9PiB7XG4gICAgY29uc3QgZXh0ZW5zaW9uID0gYXR0YWNobWVudC5uYW1lLmluY2x1ZGVzKCcuJykgPyAnJyA6IGAuJHthdHRhY2htZW50LnR5cGV9YFxuICAgIGNvbnN0IGZpbGVOYW1lID0gYCR7YXR0YWNobWVudC5uYW1lfSR7ZXh0ZW5zaW9ufWBcbiAgICBjb25zdCBmaWxlVXJsID0gYXR0YWNobWVudC51cmxfb3JpZ2luYWwgfHwgYXR0YWNobWVudC51cmxfZmlsZSB8fCBhdHRhY2htZW50LnVybF90aHVtYm5haWxcblxuICAgIHRyeSB7XG4gICAgICBsZXQgYmxvYlVybDogc3RyaW5nIHwgbnVsbCA9IG51bGxcblxuICAgICAgaWYgKGZpbGVVcmwpIHtcbiAgICAgICAgY29uc3QgZG93bmxvYWRlZEZpbGUgPSBhd2FpdCBkb3dubG9hZEZpbGVGcm9tVXJsKGZpbGVVcmwsIGZpbGVOYW1lLCBhdHRhY2htZW50LnR5cGUpXG4gICAgICAgIGJsb2JVcmwgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKGRvd25sb2FkZWRGaWxlKVxuICAgICAgfSBlbHNlIGlmIChhdHRhY2htZW50LmZpbGUgaW5zdGFuY2VvZiBGaWxlKSB7XG4gICAgICAgIGJsb2JVcmwgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKGF0dGFjaG1lbnQuZmlsZSlcbiAgICAgIH1cblxuICAgICAgaWYgKCFibG9iVXJsKSByZXR1cm5cblxuICAgICAgY29uc3QgbGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKVxuICAgICAgbGluay5ocmVmID0gYmxvYlVybFxuICAgICAgbGluay5kb3dubG9hZCA9IGZpbGVOYW1lXG4gICAgICBsaW5rLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSdcbiAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQobGluaylcbiAgICAgIGxpbmsuY2xpY2soKVxuXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChsaW5rKVxuICAgICAgICBVUkwucmV2b2tlT2JqZWN0VVJMKGJsb2JVcmwpXG4gICAgICB9LCAxMDApXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0ZhaWxlZCB0byBkb3dubG9hZCBhdHRhY2htZW50JywgZXJyb3IpXG4gICAgfVxuICB9XG5cbiAgaWYgKGlzQ2hhbmdlUHJvamVjdCAmJiBvcHRpb25zKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxNZXNzYWdlV3JhcHBlciBrZXk9e2lkfSBpc0N1cnJlbnRVc2VyPXtpc0N1cnJlbnRVc2VyfSBkYXRhLW1lc3NhZ2UtaWQ9e2lkfSBoYXNGZWVkYmFjaz17ZmFsc2V9PlxuICAgICAgICA8U0NNZXNzYWdlSXRlbVdyYXBwZXIgJGlzQXNzaXN0YW50PXtpc0Fzc2lzdGFudH0+XG4gICAgICAgICAgPE1lc3NhZ2VDb250ZW50V3JhcHBlclxuICAgICAgICAgICAgaXNDaGFuZ2VQcm9qZWN0PXtpc0NoYW5nZVByb2plY3R9XG4gICAgICAgICAgICBtZXNzYWdlPXttZXNzYWdlfVxuICAgICAgICAgICAgaXNDdXJyZW50VXNlcj17aXNDdXJyZW50VXNlcn1cbiAgICAgICAgICAgIGlzRXJyb3I9e2lzRXJyb3J9XG4gICAgICAgICAgICBtZXNzYWdlRXh0cmFDb250ZW50PXs8TWVzc2FnZU9wdGlvbnMgb3B0aW9ucz17b3B0aW9ucyBhcyBhbnl9IGhhbmRsZVNlbGVjdE9wdGlvbj17aGFuZGxlU2VsZWN0T3B0aW9ufSAvPn1cbiAgICAgICAgICAvPlxuICAgICAgICA8L1NDTWVzc2FnZUl0ZW1XcmFwcGVyPlxuICAgICAgPC9NZXNzYWdlV3JhcHBlcj5cbiAgICApXG4gIH1cblxuICBjb25zdCBoYW5kbGVGZWVkYmFja0NsaWNrID0gKGZlZWRiYWNrOiBGZWVkYmFjaykgPT4ge1xuICAgIGNvbnN0IHNlc3Npb25JZCA9IGlkXG4gICAgICAuc3BsaXQoJy0nKVxuICAgICAgLmZpbHRlcihxdWVzdGlvbklkID0+IHF1ZXN0aW9uSWQgIT09ICdhbnN3ZXInKVxuICAgICAgLmpvaW4oJy0nKVxuICAgIGhhbmRsZUZlZWRiYWNrPy4oZmVlZGJhY2ssIHNlc3Npb25JZClcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPFNDTWVzc2FnZUl0ZW1XcmFwcGVyICRpc0Fzc2lzdGFudD17aXNBc3Npc3RhbnR9IGRhdGEtbWVzc2FnZS1pZD17aWR9PlxuICAgICAgPFNDTWVzc2FnZUl0ZW1Jbm5lcj5cbiAgICAgICAgey8qIE1pc21vIHNsb3QgcGFyYSBsYSB0cmF6YSBlbiB2aXZvIHkgbGEgeWEgcGxlZ2FkYTogbWllbnRyYXMgZWwgdHVybm9cbiAgICAgICAgICAgIGNvcnJlLCBsb3MgcGFzb3Mgc2UgYXBpbGFuIGFjw6EgKHRpbWVsYXBzZSk7IGFsIGNvbXBsZXRhciwgZWxcbiAgICAgICAgICAgIFJlYXNvbmluZ0Jsb2NrIG9jdXBhIGVsIGx1Z2FyIHkgY29sYXBzYSBzb2xvLlxuICAgICAgICAgICAgVmEgQVJSSUJBIGRlbCBjdWVycG8gcG9ycXVlIGxhIG5hcnJhY2nDs24gZGUgY2FkYSB0dXJubyB0ZXJtaW5hIGNvbW9cbiAgICAgICAgICAgIGZpbGEgZGUgbGEgdHJhemE6IHNpIGVzdHV2aWVyYSBhYmFqbywgZWwgdGV4dG8gdmllam8gcXVlZGFyw61hIHBvclxuICAgICAgICAgICAgZGViYWpvIGRlbCB0ZXh0byBudWV2by4gKi99XG4gICAgICAgIHtpc0Fzc2lzdGFudCAmJlxuICAgICAgICAgIChpc0FjdGl2ZVN0cmVhbWluZyA/IChcbiAgICAgICAgICAgIDxSZWFzb25pbmdUaW1lbGluZSBtZXNzYWdlSWQ9e2lkfSBzdHJlYW1BY3Rpdml0eT17c3RyZWFtQWN0aXZpdHl9IHN0cmVhbWluZ1RleHQ9e3N0cmVhbWluZ1RleHR9IC8+XG4gICAgICAgICAgKSA6IChcbiAgICAgICAgICAgIDxSZWFzb25pbmdCbG9jayBtZXNzYWdlSWQ9e2lkfSB0cmFjZT17cHJvcHMucmVhc29uaW5nID8/IG51bGx9IC8+XG4gICAgICAgICAgKSl9XG4gICAgICAgIHshIW1lc3NhZ2VBdHRhY2htZW50cy5sZW5ndGggJiYgKFxuICAgICAgICAgIDxTQ0F0dGFjaG1lbnRzUm93ICRpc0Fzc2lzdGFudD17aXNBc3Npc3RhbnR9PlxuICAgICAgICAgICAge21lc3NhZ2VBdHRhY2htZW50cy5tYXAoKGF0dGFjaG1lbnQsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICAgIC8vIERldGVjdGFyIHNpIGVzIHVuIGFyY2hpdm8gZGUgYXVkaW9cbiAgICAgICAgICAgICAgY29uc3QgYXR0YWNobWVudFR5cGUgPSBhdHRhY2htZW50Py50eXBlPy50b0xvd2VyQ2FzZSgpIHx8ICcnXG4gICAgICAgICAgICAgIGNvbnN0IGF0dGFjaG1lbnROYW1lID0gYXR0YWNobWVudD8ubmFtZT8udG9Mb3dlckNhc2UoKSB8fCAnJ1xuICAgICAgICAgICAgICBjb25zdCBpc0F1ZGlvRmlsZSA9XG4gICAgICAgICAgICAgICAgYXR0YWNobWVudFR5cGUuc3RhcnRzV2l0aCgnYXVkaW8vJykgfHxcbiAgICAgICAgICAgICAgICBbJ2ZsYWMnLCAnbTRhJywgJ21wMycsICdtcDQnLCAnb2dhJywgJ29nZycsICd3YXYnLCAnd2VibSddLmluY2x1ZGVzKGF0dGFjaG1lbnRUeXBlKSB8fFxuICAgICAgICAgICAgICAgIFsnLmZsYWMnLCAnLm00YScsICcubXAzJywgJy5tcDQnLCAnLm9nYScsICcub2dnJywgJy53YXYnLCAnLndlYm0nXS5zb21lKGV4dCA9PlxuICAgICAgICAgICAgICAgICAgYXR0YWNobWVudE5hbWUuZW5kc1dpdGgoZXh0KVxuICAgICAgICAgICAgICAgIClcblxuICAgICAgICAgICAgICBpZiAoaXNBdWRpb0ZpbGUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gPEF0dGFjaG1lbnRDYXJkQXVkaW8ga2V5PXtgJHthdHRhY2htZW50LmlkfS0ke2F0dGFjaG1lbnQubmFtZX1gfSBhdHRhY2htZW50PXthdHRhY2htZW50fSAvPlxuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICA8QXR0YWNobWVudENhcmRcbiAgICAgICAgICAgICAgICAgIGtleT17YCR7YXR0YWNobWVudC5pZH0tJHthdHRhY2htZW50Lm5hbWV9YH1cbiAgICAgICAgICAgICAgICAgIGF0dGFjaG1lbnQ9e2F0dGFjaG1lbnR9XG4gICAgICAgICAgICAgICAgICBwb3NpdGlvbkluZGV4PXtpbmRleH1cbiAgICAgICAgICAgICAgICAgIG9uRG93bmxvYWQ9eygpID0+IGhhbmRsZUF0dGFjaG1lbnREb3dubG9hZChhdHRhY2htZW50KX1cbiAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IGhhbmRsZUF0dGFjaG1lbnRDbGljayhhdHRhY2htZW50KX1cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9KX1cbiAgICAgICAgICA8L1NDQXR0YWNobWVudHNSb3c+XG4gICAgICAgICl9XG4gICAgICAgIHsoISFtZXNzYWdlIHx8IHNob3dTdHJlYW1pbmdCb2R5KSAmJiAhKGlzQXNzaXN0YW50ICYmICEhbWVzc2FnZUF0dGFjaG1lbnRzLmxlbmd0aCkgJiYgKFxuICAgICAgICAgIDxTdHJlYW1pbmdNZXNzYWdlQm9keVxuICAgICAgICAgICAgbWVzc2FnZT17bWVzc2FnZSA/PyAnJ31cbiAgICAgICAgICAgIGlzU3RyZWFtaW5nPXtzaG93U3RyZWFtaW5nQm9keX1cbiAgICAgICAgICAgIGlzQ3VycmVudFVzZXI9e2lzQ3VycmVudFVzZXJ9XG4gICAgICAgICAgICBpc0Fzc2lzdGFudD17aXNBc3Npc3RhbnR9XG4gICAgICAgICAgICBpc0Zyb250ZW5kQ2FuY2VsbGVkPXtwcm9wcy5pc0Zyb250ZW5kQ2FuY2VsbGVkfVxuICAgICAgICAgICAgYXBwcm92YWw9e2FwcHJvdmFsfVxuICAgICAgICAgICAgaXNFcnJvcj17aXNFcnJvcn1cbiAgICAgICAgICAgIHNvdXJjZXM9e3NvdXJjZXN9XG4gICAgICAgICAgICBzdWdnZXN0aW9ucz17c3VnZ2VzdGlvbnN9XG4gICAgICAgICAgICBjcmVhdGVBZ2VudEZvbGxvd1VwPXtjcmVhdGVBZ2VudEZvbGxvd1VwfVxuICAgICAgICAgICAgaGFuZGxlRmVlZGJhY2tDbGljaz17aGFuZGxlRmVlZGJhY2tDbGlja31cbiAgICAgICAgICAgIGRpc2FibGVGZWVkYmFjaz17ZGlzYWJsZUZlZWRiYWNrID8/IG51bGx9XG4gICAgICAgICAgICBvblJldHJ5PXtoYW5kbGVSZXRyeX1cbiAgICAgICAgICAgIGhhbmRsZVN1Z2dlc3Rpb25DbGljaz17aGFuZGxlU3VnZ2VzdGlvbkNsaWNrfVxuICAgICAgICAgICAgc3VnZ2VzdGlvbnNEaXNhYmxlZD17aXNBY3RpdmVTdHJlYW1pbmcgfHwgISFoYXNTZWxlY3RlZFN1Z2dlc3Rpb259XG4gICAgICAgICAgICBtZXNzYWdlSWQ9e2lkfVxuICAgICAgICAgICAgaXNMYXN0TWVzc2FnZT17aXNMYXN0TWVzc2FnZX1cbiAgICAgICAgICAvPlxuICAgICAgICApfVxuICAgICAgICB7LyogU3Bpbm5lciBkZSBhY3RpdmlkYWQ6IHZpc2libGUgdGFtYmnDqW4gZW4gd3JpdGluZyAobmFycmFjacOzbiBlbiB0cmF6YSBvIHJlc3B1ZXN0YSBmaW5hbCkuICovfVxuICAgICAgICB7c2hvd0FjdGl2aXR5SW5kaWNhdG9yICYmIChcbiAgICAgICAgICA8U0NUaW1lbGluZUluZGljYXRvcj5cbiAgICAgICAgICAgIDxBZ2VudEFjdGl2aXR5SW5kaWNhdG9yIGFjdGl2aXR5PXtzdHJlYW1BY3Rpdml0eX0gY29tcGFjdCAvPlxuICAgICAgICAgIDwvU0NUaW1lbGluZUluZGljYXRvcj5cbiAgICAgICAgKX1cbiAgICAgICAge2FwcHJvdmFsICYmIGFwcHJvdmFsLnBlbmRpbmdfYWN0aW9ucyAmJiAoXG4gICAgICAgICAgPFNDQXBwcm92YWxBY3Rpb25zQ29sdW1uPlxuICAgICAgICAgICAgPEFwcHJvdmFsQm94XG4gICAgICAgICAgICAgIGFjdGlvbnM9e2FwcHJvdmFsLnBlbmRpbmdfYWN0aW9uc31cbiAgICAgICAgICAgICAgc3RhdHVzPXthcHByb3ZhbFN0YXR1c31cbiAgICAgICAgICAgICAgb25BcHByb3ZlPXsodGhyZWFkSWRzLCBtZXRhZGF0YSkgPT4gaGFuZGxlQXBwcm92YWxEZWNpc2lvbih0aHJlYWRJZHMsICdhcHByb3ZlJywgdW5kZWZpbmVkLCBtZXRhZGF0YSl9XG4gICAgICAgICAgICAgIG9uUmVqZWN0PXt0aHJlYWRJZHMgPT4gaGFuZGxlQXBwcm92YWxEZWNpc2lvbih0aHJlYWRJZHMsICdyZWplY3QnKX1cbiAgICAgICAgICAgICAgaXNQcm9qZWN0RGVsZXRlZD17cHJvcHMucHJvamVjdE1ldGFkYXRhPy5pc19kZWxldGVkID09PSB0cnVlfVxuICAgICAgICAgICAgICBpc0V4cGFuZGVkPXtwcm9wcy5leHBhbmRlZH1cbiAgICAgICAgICAgICAgaGl0bEluc3RhbmNlSWQ9e2FwcHJvdmFsLm9yaWdpbmFsX3RocmVhZF9pZH1cbiAgICAgICAgICAgICAgd2FybmluZ01lc3NhZ2U9e2FwcHJvdmFsLndhcm5pbmdfbWVzc2FnZX1cbiAgICAgICAgICAgICAgbWFudWFsQXBwcm92YWxEZXRlY3RlZD17YXBwcm92YWwubWFudWFsX2FwcHJvdmFsX2RldGVjdGVkfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L1NDQXBwcm92YWxBY3Rpb25zQ29sdW1uPlxuICAgICAgICApfVxuICAgICAgPC9TQ01lc3NhZ2VJdGVtSW5uZXI+XG4gICAgICA8QXR0YWNobWVudFByZXZpZXdNb2RhbFxuICAgICAgICBpc09wZW49eyEhcHJldmlld0F0dGFjaG1lbnR9XG4gICAgICAgIG9uQ2xvc2U9e2hhbmRsZUNsb3NlUHJldmlld31cbiAgICAgICAgYXR0YWNobWVudD17cHJldmlld0F0dGFjaG1lbnR9XG4gICAgICAvPlxuICAgIDwvU0NNZXNzYWdlSXRlbVdyYXBwZXI+XG4gIClcbn0pXG5cbmNvbnN0IENoYXRBSU1lc3NhZ2VzSW5uZXIgPSAoe1xuICB1c2VySW5pdGlhbE1lc3NhZ2UsXG4gIGluaXRpYWxDaGF0SWQsXG4gIG9uRXJyb3IsXG4gIG9uU2VuZE1lc3NhZ2VSZWFkeSxcbiAgb25TY3JvbGxUb0JvdHRvbSxcbiAgYXR0YWNobWVudHMsXG4gIGFnZW50cyxcbiAgZXhwYW5kZWQsXG59OiBDaGF0QUlNZXNzYWdlc1Byb3BzKSA9PiB7XG4gIGNvbnN0IHsgdCB9ID0gdXNlVCgpXG4gIGNvbnN0IHsgaXNXZWJTZWFyY2hBY3RpdmUsIGlzRGVlcFNlYXJjaEFjdGl2ZSwgYWdlbnQgfSA9IHVzZUdsb2JhbENvbnRleHQoKVxuICBjb25zdCBldmVudCA9IHVzZUV2ZW50KClcbiAgY29uc3QgYXV0aFVzZXIgPSB1c2VVc2VyKClcbiAgY29uc3QgbWVzc2FnZXNSZWYgPSB1c2VSZWY8SFRNTERpdkVsZW1lbnQ+KG51bGwpXG4gIGNvbnN0IGNoYXRJbml0aWFsaXplZFJlZiA9IHVzZVJlZihmYWxzZSlcbiAgY29uc3QgaXNMb2FkaW5nTW9yZVJlZiA9IHVzZVJlZihmYWxzZSlcbiAgY29uc3Qgc2Nyb2xsVGhyZXNob2xkUmVmID0gdXNlUmVmKDM5KVxuICBjb25zdCBsYXN0U2Nyb2xsVG9wUmVmID0gdXNlUmVmKDApXG4gIGNvbnN0IHNob3dTY3JvbGxUb0JvdHRvbVJlZiA9IHVzZVJlZihmYWxzZSlcbiAgY29uc3Qgc2hvd1RvcEdyYWRpZW50UmVmID0gdXNlUmVmKGZhbHNlKVxuICBjb25zdCBzaG93Qm90dG9tR3JhZGllbnRSZWYgPSB1c2VSZWYoZmFsc2UpXG4gIGNvbnN0IHNjcm9sbFJhZlJlZiA9IHVzZVJlZjxudW1iZXIgfCBudWxsPihudWxsKVxuICAvKipcbiAgICogVHVybm8gY29uIGVsIHNjcm9sbCBiYWpvIGNvbnRyb2wgZGVsIHVzdWFyaW86IGRlc2RlIHF1ZSBlbnbDrWEgZWwgbWVuc2FqZSB5XG4gICAqIGhhc3RhIGVsIHByw7N4aW1vIGVudsOtbyBubyBtb3ZlbW9zIGVsIHNjcm9sbCBwb3IgbmluZ8O6biBtb3Rpdm8uIEVzXG4gICAqIGluZGVwZW5kaWVudGUgZGUgbGEgYWx0dXJhIGRlbCBzcGFjZXIsIHF1ZSBwdWVkZSBsbGVnYXIgYSAwIHNpbiBkZXNhbmNsYXIuXG4gICAqL1xuICBjb25zdCBhbmNob3JlZFR1cm5JZFJlZiA9IHVzZVJlZjxzdHJpbmcgfCBudWxsPihudWxsKVxuICBjb25zdCBzcGFjZXJFbFJlZiA9IHVzZVJlZjxIVE1MRGl2RWxlbWVudCB8IG51bGw+KG51bGwpXG4gIGNvbnN0IHNwYWNlckhlaWdodFJlZiA9IHVzZVJlZigwKVxuICBjb25zdCB0dXJuU2Nyb2xsUmFmUmVmID0gdXNlUmVmPG51bWJlciB8IG51bGw+KG51bGwpXG4gIGNvbnN0IHdhc0xvYWRpbmdNZXNzYWdlc1JlZiA9IHVzZVJlZihmYWxzZSlcbiAgY29uc3QgbGFzdFNjcm9sbGVkU2Vzc2lvblJlZiA9IHVzZVJlZjxzdHJpbmcgfCBudWxsPihudWxsKVxuICBjb25zdCBwZW5kaW5nU2Nyb2xsUmVzdG9yZVJlZiA9IHVzZVJlZjxudW1iZXIgfCBudWxsPihudWxsKVxuICBjb25zdCBzY3JvbGxQZXJzaXN0VGltZXJSZWYgPSB1c2VSZWY8bnVtYmVyIHwgbnVsbD4obnVsbClcbiAgY29uc3QgW3Nob3dTY3JvbGxUb0JvdHRvbSwgc2V0U2hvd1Njcm9sbFRvQm90dG9tXSA9IHVzZVN0YXRlKGZhbHNlKVxuICBjb25zdCBbc2hvd1RvcEdyYWRpZW50LCBzZXRTaG93VG9wR3JhZGllbnRdID0gdXNlU3RhdGUoZmFsc2UpXG4gIGNvbnN0IFtzaG93Qm90dG9tR3JhZGllbnQsIHNldFNob3dCb3R0b21HcmFkaWVudF0gPSB1c2VTdGF0ZShmYWxzZSlcbiAgY29uc3QgW3NlbGVjdGVkU3VnZ2VzdGlvbk1lc3NhZ2VJZHMsIHNldFNlbGVjdGVkU3VnZ2VzdGlvbk1lc3NhZ2VJZHNdID0gdXNlU3RhdGU8UmVjb3JkPHN0cmluZywgYm9vbGVhbj4+KHt9KVxuXG4gIGNvbnN0IHtcbiAgICBtZXNzYWdlcyxcbiAgICBsb2FkaW5nTWVzc2FnZXMsXG4gICAgaXNMb2FkaW5nTW9yZU1lc3NhZ2VzLFxuICAgIHdhaXRpbmdSZXNwb25zZSxcbiAgICBpc1dyaXRpbmcsXG4gICAgbG9hZGluZ01lc3NhZ2UsXG4gICAgc3RyZWFtQWN0aXZpdHksXG4gICAgYWN0aXZlTG9hZGluZ3MsXG4gICAgc2VuZE1lc3NhZ2UsXG4gICAgcmV0cnlNZXNzYWdlLFxuICAgIGNoYW5nZVByb2plY3QsXG4gICAgaGFuZGxlRmVlZGJhY2ssXG4gICAgaGFuZGxlQXBwcm92YWxEZWNpc2lvbixcbiAgICBpbml0aWFsaXplQ2hhdCxcbiAgICBoYW5kbGVTY3JvbGwsXG4gICAgc3RvcEdlbmVyYXRpb24sXG4gIH0gPSB1c2VDaGF0TWFuYWdlcih7XG4gICAgY2hhdElkOiBpbml0aWFsQ2hhdElkIHx8IHVuZGVmaW5lZCxcbiAgICB1c2VySW5pdGlhbE1lc3NhZ2UsXG4gICAgb25FcnJvcixcbiAgICBhdHRhY2htZW50cyxcbiAgICBhZ2VudHMsXG4gIH0pXG5cbiAgY29uc3QgaGFuZGxlU2VsZWN0T3B0aW9uID0gdXNlQ2FsbGJhY2soXG4gICAgKG9wdGlvbjogUHJvamVjdCkgPT4ge1xuICAgICAgY2hhbmdlUHJvamVjdChvcHRpb24pXG4gICAgfSxcbiAgICBbY2hhbmdlUHJvamVjdF1cbiAgKVxuXG4gIC8qKlxuICAgKiBSZWNhbGN1bGEgZWwgYm90w7NuIFwic2Nyb2xsIHRvIGJvdHRvbVwiIHkgbG9zIGdyYWRpZW50ZXMgZGUgYm9yZGUgYSBwYXJ0aXIgZGVcbiAgICogbGEgcG9zaWNpw7NuIGRlbCBzY3JvbGwuIExvcyByZWZzIGV2aXRhbiBgc2V0U3RhdGVgIGN1YW5kbyBlbCB2YWxvciBubyBjYW1iaWE6XG4gICAqIGVzdG8gY29ycmUgZW4gY2FkYSBmcmFtZSBkZWwgc3RyZWFtLlxuICAgKi9cbiAgY29uc3QgdXBkYXRlU2Nyb2xsQWZmb3JkYW5jZXMgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgY29uc3QgZWwgPSBtZXNzYWdlc1JlZi5jdXJyZW50XG4gICAgaWYgKCFlbCkgcmV0dXJuXG4gICAgY29uc3QgeyBzY3JvbGxUb3AsIHNjcm9sbEhlaWdodCwgY2xpZW50SGVpZ2h0IH0gPSBlbFxuICAgIC8vIEVsIHNwYWNlciBkZWwgdHVybm8gZXMgYWx0byByZXNlcnZhZG8sIG5vIGNvbnRlbmlkbzogc2kgbm8gbG8gZGVzY29udGFtb3NcbiAgICAvLyBsYSBmbGVjaGEgeSBlbCBncmFkaWVudGUgZGUgYWJham8gcXVlZGFuIGVuY2VuZGlkb3MgZHVyYW50ZSB0b2RvIGVsIHR1cm5vLlxuICAgIGNvbnN0IGRpc3RhbmNlRnJvbUJvdHRvbSA9IHNjcm9sbEhlaWdodCAtIHNwYWNlckhlaWdodFJlZi5jdXJyZW50IC0gc2Nyb2xsVG9wIC0gY2xpZW50SGVpZ2h0XG5cbiAgICBjb25zdCBzaG91bGRTaG93ID0gZGlzdGFuY2VGcm9tQm90dG9tID4gNTBcbiAgICBpZiAoc2hvd1Njcm9sbFRvQm90dG9tUmVmLmN1cnJlbnQgIT09IHNob3VsZFNob3cpIHtcbiAgICAgIHNob3dTY3JvbGxUb0JvdHRvbVJlZi5jdXJyZW50ID0gc2hvdWxkU2hvd1xuICAgICAgc2V0U2hvd1Njcm9sbFRvQm90dG9tKHNob3VsZFNob3cpXG4gICAgfVxuXG4gICAgY29uc3QgbmV4dFRvcEdyYWRpZW50ID0gc2Nyb2xsVG9wID4gMVxuICAgIGlmIChzaG93VG9wR3JhZGllbnRSZWYuY3VycmVudCAhPT0gbmV4dFRvcEdyYWRpZW50KSB7XG4gICAgICBzaG93VG9wR3JhZGllbnRSZWYuY3VycmVudCA9IG5leHRUb3BHcmFkaWVudFxuICAgICAgc2V0U2hvd1RvcEdyYWRpZW50KG5leHRUb3BHcmFkaWVudClcbiAgICB9XG5cbiAgICBjb25zdCBuZXh0Qm90dG9tR3JhZGllbnQgPSBkaXN0YW5jZUZyb21Cb3R0b20gPiAxXG4gICAgaWYgKHNob3dCb3R0b21HcmFkaWVudFJlZi5jdXJyZW50ICE9PSBuZXh0Qm90dG9tR3JhZGllbnQpIHtcbiAgICAgIHNob3dCb3R0b21HcmFkaWVudFJlZi5jdXJyZW50ID0gbmV4dEJvdHRvbUdyYWRpZW50XG4gICAgICBzZXRTaG93Qm90dG9tR3JhZGllbnQobmV4dEJvdHRvbUdyYWRpZW50KVxuICAgIH1cbiAgfSwgW10pXG5cbiAgLyoqXG4gICAqIFNjcm9sbCBpbm1lZGlhdG8gYWwgZm9uZG8gKGRlbnRybyBkZSByQUYgcGFyYSBjb29yZGluYXIgY29uIGVsIHBhaW50KVxuICAgKiB5IGFjdHVhbGl6YSBsYSB2aXNpYmlsaWRhZCBkZWwgYm90w7NuLiBTb2xvIHNlIHVzYSBhbCBhYnJpci9jYXJnYXIgdW4gY2hhdFxuICAgKiBvIGN1YW5kbyBlbCB1c3VhcmlvIHBpZGUgaXIgYWwgZm9uZG86IG51bmNhIGR1cmFudGUgZWwgc3RyZWFtLlxuICAgKi9cbiAgY29uc3Qgc2Nyb2xsVG9Cb3R0b21SYWYgPSB1c2VDYWxsYmFjayhcbiAgICAob3B0czogeyBkZWxheU1zPzogbnVtYmVyIH0gPSB7fSkgPT4ge1xuICAgICAgY29uc3QgeyBkZWxheU1zID0gMCB9ID0gb3B0c1xuICAgICAgY29uc3QgcnVuID0gKCkgPT4ge1xuICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGVsID0gbWVzc2FnZXNSZWYuY3VycmVudFxuICAgICAgICAgIGlmICghZWwpIHJldHVyblxuICAgICAgICAgIGVsLnNjcm9sbFRvcCA9IGVsLnNjcm9sbEhlaWdodFxuICAgICAgICAgIHVwZGF0ZVNjcm9sbEFmZm9yZGFuY2VzKClcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICAgIGlmIChkZWxheU1zID4gMCkgc2V0VGltZW91dChydW4sIGRlbGF5TXMpXG4gICAgICBlbHNlIHJ1bigpXG4gICAgfSxcbiAgICBbdXBkYXRlU2Nyb2xsQWZmb3JkYW5jZXNdXG4gIClcblxuICBjb25zdCBjYW5jZWxUdXJuU2Nyb2xsID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGlmICh0dXJuU2Nyb2xsUmFmUmVmLmN1cnJlbnQgPT09IG51bGwpIHJldHVyblxuICAgIGNhbmNlbEFuaW1hdGlvbkZyYW1lKHR1cm5TY3JvbGxSYWZSZWYuY3VycmVudClcbiAgICB0dXJuU2Nyb2xsUmFmUmVmLmN1cnJlbnQgPSBudWxsXG4gIH0sIFtdKVxuXG4gIC8qKlxuICAgKiBTY3JvbGwgYW5pbWFkbyBjb24gZWFzaW5nIHByb3BpbzogYGJlaGF2aW9yOiAnc21vb3RoJ2Agbm8gcGVybWl0ZSByZWd1bGFyIGxhXG4gICAqIGR1cmFjacOzbiB5IGVsIHNhbHRvIGFsIGFuY2xhciBlbCB0dXJubyBxdWVkYSBkZW1hc2lhZG8gc2Vjby5cbiAgICovXG4gIGNvbnN0IGFuaW1hdGVTY3JvbGxUbyA9IHVzZUNhbGxiYWNrKFxuICAgICh0b3A6IG51bWJlcikgPT4ge1xuICAgICAgY2FuY2VsVHVyblNjcm9sbCgpXG4gICAgICBjb25zdCBlbCA9IG1lc3NhZ2VzUmVmLmN1cnJlbnRcbiAgICAgIGlmICghZWwpIHJldHVyblxuICAgICAgY29uc3QgZnJvbSA9IGVsLnNjcm9sbFRvcFxuICAgICAgY29uc3QgZGlzdGFuY2UgPSB0b3AgLSBmcm9tXG4gICAgICBpZiAoTWF0aC5hYnMoZGlzdGFuY2UpIDwgMSkgcmV0dXJuXG5cbiAgICAgIGNvbnN0IGR1cmF0aW9uID1cbiAgICAgICAgVFVSTl9TQ1JPTExfRFVSQVRJT05fTVMgK1xuICAgICAgICAoVFVSTl9TQ1JPTExfTUFYX0RVUkFUSU9OX01TIC0gVFVSTl9TQ1JPTExfRFVSQVRJT05fTVMpICpcbiAgICAgICAgICBNYXRoLm1pbigxLCBNYXRoLmFicyhkaXN0YW5jZSkgLyBUVVJOX1NDUk9MTF9MT05HX0RJU1RBTkNFX1BYKVxuXG4gICAgICBjb25zdCBzdGFydGVkQXQgPSBwZXJmb3JtYW5jZS5ub3coKVxuICAgICAgY29uc3Qgc3RlcCA9IChub3c6IG51bWJlcikgPT4ge1xuICAgICAgICBjb25zdCBwcm9ncmVzcyA9IE1hdGgubWluKDEsIChub3cgLSBzdGFydGVkQXQpIC8gZHVyYXRpb24pXG4gICAgICAgIC8vIGVhc2VPdXRFeHBvICh+Y3ViaWMtYmV6aWVyKDAuMTYsIDEsIDAuMywgMSkpOiBlbXBpZXphIGEgZnJlbmFyIG11Y2hvXG4gICAgICAgIC8vIGFudGVzIHF1ZSBlbCBxdWludCB5IGF0ZXJyaXphIHNpbiBjb3J0ZSBwZXJjZXB0aWJsZS5cbiAgICAgICAgY29uc3QgZWFzZWQgPSBwcm9ncmVzcyA9PT0gMSA/IDEgOiAxIC0gMiAqKiAoLTEyICogcHJvZ3Jlc3MpXG4gICAgICAgIGVsLnNjcm9sbFRvcCA9IGZyb20gKyBkaXN0YW5jZSAqIGVhc2VkXG4gICAgICAgIHVwZGF0ZVNjcm9sbEFmZm9yZGFuY2VzKClcbiAgICAgICAgdHVyblNjcm9sbFJhZlJlZi5jdXJyZW50ID0gcHJvZ3Jlc3MgPCAxID8gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHN0ZXApIDogbnVsbFxuICAgICAgfVxuICAgICAgdHVyblNjcm9sbFJhZlJlZi5jdXJyZW50ID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHN0ZXApXG4gICAgfSxcbiAgICBbY2FuY2VsVHVyblNjcm9sbCwgdXBkYXRlU2Nyb2xsQWZmb3JkYW5jZXNdXG4gIClcblxuICB1c2VFZmZlY3QoKCkgPT4gY2FuY2VsVHVyblNjcm9sbCwgW2NhbmNlbFR1cm5TY3JvbGxdKVxuXG4gIGNvbnN0IHNldFNwYWNlckhlaWdodCA9IHVzZUNhbGxiYWNrKChuZXh0OiBudW1iZXIpID0+IHtcbiAgICBpZiAoTWF0aC5hYnMoc3BhY2VySGVpZ2h0UmVmLmN1cnJlbnQgLSBuZXh0KSA8IDEpIHJldHVyblxuICAgIHNwYWNlckhlaWdodFJlZi5jdXJyZW50ID0gbmV4dFxuICAgIGlmIChzcGFjZXJFbFJlZi5jdXJyZW50KSB7XG4gICAgICBzcGFjZXJFbFJlZi5jdXJyZW50LnN0eWxlLmhlaWdodCA9IGAke25leHR9cHhgXG4gICAgfVxuICB9LCBbXSlcblxuICBjb25zdCBjbGVhclR1cm5TcGFjZSA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBhbmNob3JlZFR1cm5JZFJlZi5jdXJyZW50ID0gbnVsbFxuICAgIHNldFNwYWNlckhlaWdodCgwKVxuICB9LCBbc2V0U3BhY2VySGVpZ2h0XSlcblxuICAvKipcbiAgICogRGV2dWVsdmUgZWwgYWx0byByZXNlcnZhZG8gcXVlIHNlIHB1ZWRlIHNhY2FyIHNpbiBtb3ZlciBsYSB2aXN0YTogdG9kbyBsb1xuICAgKiBxdWUgcXVlZGUgcG9yIGRlYmFqbyBkZWwgc2Nyb2xsIGFjdHVhbC4gU2kgZWwgdXN1YXJpbyBlc3TDoSBlbiBlbCBmb25kbywgc2VcbiAgICogc2FjYSBlbnRlcm87IHNpIGVzdMOhIGEgbWl0YWQgZGUgY2FtaW5vLCBzZSB2YSBkcmVuYW5kbyBhIG1lZGlkYSBxdWUgYmFqYS5cbiAgICovXG4gIGNvbnN0IGRyYWluVHVyblNwYWNlID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGNvbnN0IGVsID0gbWVzc2FnZXNSZWYuY3VycmVudFxuICAgIGlmICghZWwgfHwgc3BhY2VySGVpZ2h0UmVmLmN1cnJlbnQgPD0gMCkgcmV0dXJuXG4gICAgY29uc3QgcmVtb3ZhYmxlID0gTWF0aC5tYXgoMCwgZWwuc2Nyb2xsSGVpZ2h0IC0gZWwuY2xpZW50SGVpZ2h0IC0gZWwuc2Nyb2xsVG9wKVxuICAgIHNldFNwYWNlckhlaWdodChNYXRoLm1heCgwLCBzcGFjZXJIZWlnaHRSZWYuY3VycmVudCAtIHJlbW92YWJsZSkpXG4gIH0sIFtzZXRTcGFjZXJIZWlnaHRdKVxuXG4gIC8qKlxuICAgKiBFbCB1c3VhcmlvIHRvbcOzIGVsIGNvbnRyb2wgZGVsIHNjcm9sbDogZWwgdHVybm8gZGVqYSBkZSBlc3RhciBhbmNsYWRvIHkgZWxcbiAgICogZXNwYWNpbyByZXNlcnZhZG8gZW1waWV6YSBhIGRldm9sdmVyc2UuIFNpbiBhbmNsYSB5IGNvbiBzcGFjZXIgPiAwLCBlbFxuICAgKiBoYW5kbGVyIGRlIHNjcm9sbCBzaWd1ZSBkcmVuYW5kbyBoYXN0YSBxdWUgbGxlZ2EgYWwgZm9uZG8geSBubyBxdWVkYSBodWVjby5cbiAgICovXG4gIGNvbnN0IHJlbGVhc2VUdXJuU3BhY2UgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgaWYgKCFhbmNob3JlZFR1cm5JZFJlZi5jdXJyZW50ICYmIHNwYWNlckhlaWdodFJlZi5jdXJyZW50IDw9IDApIHJldHVyblxuICAgIGFuY2hvcmVkVHVybklkUmVmLmN1cnJlbnQgPSBudWxsXG4gICAgZHJhaW5UdXJuU3BhY2UoKVxuICB9LCBbZHJhaW5UdXJuU3BhY2VdKVxuXG4gIGNvbnN0IGhhbmRsZVVzZXJTY3JvbGxJbnRlbnQgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgY2FuY2VsVHVyblNjcm9sbCgpXG4gICAgcmVsZWFzZVR1cm5TcGFjZSgpXG4gIH0sIFtjYW5jZWxUdXJuU2Nyb2xsLCByZWxlYXNlVHVyblNwYWNlXSlcblxuICBjb25zdCBtZWFzdXJlVHVybiA9IHVzZUNhbGxiYWNrKChxdWVzdGlvbklkOiBzdHJpbmcpID0+IHtcbiAgICBjb25zdCBlbCA9IG1lc3NhZ2VzUmVmLmN1cnJlbnRcbiAgICBjb25zdCBzcGFjZXJFbCA9IHNwYWNlckVsUmVmLmN1cnJlbnRcbiAgICBpZiAoIWVsIHx8ICFzcGFjZXJFbCkgcmV0dXJuIG51bGxcblxuICAgIGNvbnN0IHF1ZXN0aW9uRWwgPSBlbC5xdWVyeVNlbGVjdG9yPEhUTUxFbGVtZW50PihgW2RhdGEtbWVzc2FnZS1pZD1cIiR7cXVlc3Rpb25JZH1cIl1gKVxuICAgIGlmICghcXVlc3Rpb25FbCkgcmV0dXJuIG51bGxcblxuICAgIGNvbnN0IGNvbnRhaW5lclRvcCA9IGVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcFxuICAgIGNvbnN0IHF1ZXN0aW9uVG9wID0gcXVlc3Rpb25FbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3AgLSBjb250YWluZXJUb3AgKyBlbC5zY3JvbGxUb3BcbiAgICBjb25zdCBjb250ZW50Qm90dG9tID0gc3BhY2VyRWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wIC0gY29udGFpbmVyVG9wICsgZWwuc2Nyb2xsVG9wXG4gICAgcmV0dXJuIHsgZWwsIHF1ZXN0aW9uVG9wLCB0dXJuSGVpZ2h0OiBjb250ZW50Qm90dG9tIC0gcXVlc3Rpb25Ub3AgfVxuICB9LCBbXSlcblxuICBjb25zdCByZXNlcnZlVHVyblNwYWNlID0gdXNlQ2FsbGJhY2soXG4gICAgKHF1ZXN0aW9uSWQ6IHN0cmluZykgPT4ge1xuICAgICAgY29uc3QgbWVhc3VyZWQgPSBtZWFzdXJlVHVybihxdWVzdGlvbklkKVxuICAgICAgaWYgKCFtZWFzdXJlZCkgcmV0dXJuXG4gICAgICBjb25zdCB7IGVsLCBxdWVzdGlvblRvcCwgdHVybkhlaWdodCB9ID0gbWVhc3VyZWRcblxuICAgICAgLy8gQW5jbGFtb3Mgc2llbXByZSwgaW5jbHVzbyBjdWFuZG8gbm8gaGFnYSBmYWx0YSByZXNlcnZhcjogZHVyYW50ZSBlbFxuICAgICAgLy8gdHVybm8gZWwgc2Nyb2xsIG5vIHNlIG11ZXZlIHNvbG8gZW4gbmluZ8O6biBjYXNvLlxuICAgICAgYW5jaG9yZWRUdXJuSWRSZWYuY3VycmVudCA9IHF1ZXN0aW9uSWRcblxuICAgICAgY29uc3Qgb2Zmc2V0ID0gdHVybkFuY2hvck9mZnNldChlbC5jbGllbnRIZWlnaHQpXG4gICAgICBjb25zdCB0YXJnZXRTY3JvbGxUb3AgPSBNYXRoLm1heCgwLCBxdWVzdGlvblRvcCAtIG9mZnNldClcbiAgICAgIC8vIENoYXQgcmVjacOpbiBpbmljaWFkbyBvIGNvbnZlcnNhY2nDs24gcXVlIGHDum4gZW50cmEgZW4gcGFudGFsbGE6IGxhXG4gICAgICAvLyBwcmVndW50YSB5YSBlc3TDoSBhcnJpYmEsIG5vIGhheSBuYWRhIHF1ZSBzdWJpciBuaSBxdWUgcmVzZXJ2YXIuXG4gICAgICBpZiAodGFyZ2V0U2Nyb2xsVG9wIDw9IGVsLnNjcm9sbFRvcCkge1xuICAgICAgICBzZXRTcGFjZXJIZWlnaHQoMClcbiAgICAgICAgdXBkYXRlU2Nyb2xsQWZmb3JkYW5jZXMoKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgLy8gUmVzZXJ2YW1vcyBsbyBtw61uaW1vIHBhcmEgcXVlIGB0YXJnZXRTY3JvbGxUb3BgIHNlYSBhbGNhbnphYmxlLiBFbFxuICAgICAgLy8gc3BhY2VyIHNlIGluc2VydGEgZGUgdW5hIChlcyBhbHRvIHJlc2VydmFkbywgbm8gY29udGVuaWRvIHZpc2libGUpO1xuICAgICAgLy8gbG8gw7puaWNvIHF1ZSBzZSBwZXJjaWJlIGVzIGVsIGRlc3BsYXphbWllbnRvIGFuaW1hZG8uXG4gICAgICBzZXRTcGFjZXJIZWlnaHQoTWF0aC5tYXgoMCwgZWwuY2xpZW50SGVpZ2h0IC0gdHVybkhlaWdodCAtIG9mZnNldCkpXG4gICAgICBhbmltYXRlU2Nyb2xsVG8odGFyZ2V0U2Nyb2xsVG9wKVxuICAgIH0sXG4gICAgW21lYXN1cmVUdXJuLCBzZXRTcGFjZXJIZWlnaHQsIHVwZGF0ZVNjcm9sbEFmZm9yZGFuY2VzLCBhbmltYXRlU2Nyb2xsVG9dXG4gIClcblxuICAvKipcbiAgICogRW5jb2dlIGVsIHNwYWNlciBhIG1lZGlkYSBxdWUgY3JlY2UgbGEgcmVzcHVlc3RhOiBlbCBhbHRvIHRvdGFsIGRlbCBzY3JvbGxcbiAgICogcXVlZGEgY29uc3RhbnRlIHkgbGEgdmlzdGEgbm8gc2UgbXVldmUgc29sYS4gU29sbyBhY2hpY2EsIG51bmNhIGFncmFuZGEsXG4gICAqIHBhcmEgbm8gaW55ZWN0YXIgZXNwYWNpbyBlbiB0dXJub3MgcXVlIGFycmFuY2Fyb24gc2luIHJlc2VydmEuXG4gICAqIERldnVlbHZlIHNpIGVsIHR1cm5vIHNpZ3VlIGFuY2xhZG8gKGF1bnF1ZSBlbCBzcGFjZXIgeWEgc2VhIDApLlxuICAgKi9cbiAgY29uc3Qgc3luY1R1cm5TcGFjZSA9IHVzZUNhbGxiYWNrKCgpOiBib29sZWFuID0+IHtcbiAgICBpZiAoIWFuY2hvcmVkVHVybklkUmVmLmN1cnJlbnQpIHJldHVybiBmYWxzZVxuICAgIGlmIChzcGFjZXJIZWlnaHRSZWYuY3VycmVudCA+IDApIHtcbiAgICAgIGNvbnN0IG1lYXN1cmVkID0gbWVhc3VyZVR1cm4oYW5jaG9yZWRUdXJuSWRSZWYuY3VycmVudClcbiAgICAgIGlmIChtZWFzdXJlZCkge1xuICAgICAgICBjb25zdCBvZmZzZXQgPSB0dXJuQW5jaG9yT2Zmc2V0KG1lYXN1cmVkLmVsLmNsaWVudEhlaWdodClcbiAgICAgICAgY29uc3QgcmVzZXJ2ZWQgPSBNYXRoLm1heCgwLCBtZWFzdXJlZC5lbC5jbGllbnRIZWlnaHQgLSBtZWFzdXJlZC50dXJuSGVpZ2h0IC0gb2Zmc2V0KVxuICAgICAgICBzZXRTcGFjZXJIZWlnaHQoTWF0aC5taW4oc3BhY2VySGVpZ2h0UmVmLmN1cnJlbnQsIHJlc2VydmVkKSlcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRydWVcbiAgfSwgW21lYXN1cmVUdXJuLCBzZXRTcGFjZXJIZWlnaHRdKVxuXG4gIGNvbnN0IGhhbmRsZUNsaWNrU2Nyb2xsVG9Cb3R0b20gPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgY29uc3QgZWwgPSBtZXNzYWdlc1JlZi5jdXJyZW50XG4gICAgaWYgKCFlbCkgcmV0dXJuXG4gICAgY2xlYXJUdXJuU3BhY2UoKVxuICAgIC8vIE1pc21hIGN1cnZhIHkgZHVyYWNpw7NuIHF1ZSBlbCBhbmNsYWplIGRlbCB0dXJubzogZWwgYHNtb290aGAgbmF0aXZvIGZyZW5hIHNlY28uXG4gICAgYW5pbWF0ZVNjcm9sbFRvKGVsLnNjcm9sbEhlaWdodCAtIGVsLmNsaWVudEhlaWdodClcbiAgfSwgW2NsZWFyVHVyblNwYWNlLCBhbmltYXRlU2Nyb2xsVG9dKVxuXG4gIGNvbnN0IGhhbmRsZVNjcm9sbFRvQm90dG9tID0gdXNlQ2FsbGJhY2soXG4gICAgKGU6IFJlYWN0LlVJRXZlbnQ8SFRNTERpdkVsZW1lbnQ+KSA9PiB7XG4gICAgICBjb25zdCBjb250YWluZXIgPSBlLmN1cnJlbnRUYXJnZXRcblxuICAgICAgaWYgKHNjcm9sbFJhZlJlZi5jdXJyZW50ICE9PSBudWxsKSB7XG4gICAgICAgIGNhbmNlbEFuaW1hdGlvbkZyYW1lKHNjcm9sbFJhZlJlZi5jdXJyZW50KVxuICAgICAgfVxuXG4gICAgICBzY3JvbGxSYWZSZWYuY3VycmVudCA9IHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICAgIHNjcm9sbFJhZlJlZi5jdXJyZW50ID0gbnVsbFxuICAgICAgICBjb25zdCB7IHNjcm9sbFRvcCwgc2Nyb2xsSGVpZ2h0LCBjbGllbnRIZWlnaHQgfSA9IGNvbnRhaW5lclxuXG4gICAgICAgIGNvbnN0IGlzU2Nyb2xsaW5nVXAgPSBzY3JvbGxUb3AgPCBsYXN0U2Nyb2xsVG9wUmVmLmN1cnJlbnRcblxuICAgICAgICBpZiAoaXNTY3JvbGxpbmdVcCkge1xuICAgICAgICAgIHNjcm9sbFRocmVzaG9sZFJlZi5jdXJyZW50ID0gMTVcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGlzTmVhckJvdHRvbSA9IHNjcm9sbEhlaWdodCAtIHNjcm9sbFRvcCAtIGNsaWVudEhlaWdodCA8IHNjcm9sbFRocmVzaG9sZFJlZi5jdXJyZW50XG5cbiAgICAgICAgaWYgKGlzTmVhckJvdHRvbSkge1xuICAgICAgICAgIHNjcm9sbFRocmVzaG9sZFJlZi5jdXJyZW50ID0gMzlcbiAgICAgICAgfVxuXG4gICAgICAgIGxhc3RTY3JvbGxUb3BSZWYuY3VycmVudCA9IHNjcm9sbFRvcFxuXG4gICAgICAgIC8vIFR1cm5vIHlhIGxpYmVyYWRvIHBvciBlbCB1c3VhcmlvOiBzZWd1aW1vcyBkZXZvbHZpZW5kbyBlbCBhbHRvXG4gICAgICAgIC8vIHJlc2VydmFkbyBtaWVudHJhcyBiYWphLCBwYXJhIHF1ZSBhbCBsbGVnYXIgYWwgw7psdGltbyBtZW5zYWplIG5vXG4gICAgICAgIC8vIHF1ZWRlIGh1ZWNvIGRlYmFqby5cbiAgICAgICAgaWYgKCFhbmNob3JlZFR1cm5JZFJlZi5jdXJyZW50KSBkcmFpblR1cm5TcGFjZSgpXG5cbiAgICAgICAgdXBkYXRlU2Nyb2xsQWZmb3JkYW5jZXMoKVxuXG4gICAgICAgIGlmIChpbml0aWFsQ2hhdElkICYmIHNjcm9sbFRvcCA+IDApIHtcbiAgICAgICAgICBpZiAoc2Nyb2xsUGVyc2lzdFRpbWVyUmVmLmN1cnJlbnQgIT0gbnVsbCkge1xuICAgICAgICAgICAgd2luZG93LmNsZWFyVGltZW91dChzY3JvbGxQZXJzaXN0VGltZXJSZWYuY3VycmVudClcbiAgICAgICAgICB9XG4gICAgICAgICAgc2Nyb2xsUGVyc2lzdFRpbWVyUmVmLmN1cnJlbnQgPSB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICBwYXRjaE1haWFQYW5lbFNlc3Npb24oYXV0aFVzZXIuaWQsIHtcbiAgICAgICAgICAgICAgc2Nyb2xsVG9wLFxuICAgICAgICAgICAgICBzY3JvbGxTZXNzaW9uSWQ6IGluaXRpYWxDaGF0SWQsXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH0sIDE1MClcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpc05lYXJCb3R0b20gJiYgb25TY3JvbGxUb0JvdHRvbSkge1xuICAgICAgICAgIG9uU2Nyb2xsVG9Cb3R0b20oKVxuICAgICAgICB9XG5cbiAgICAgICAgaGFuZGxlU2Nyb2xsKGNvbnRhaW5lcilcbiAgICAgIH0pXG4gICAgfSxcbiAgICBbYXV0aFVzZXIuaWQsIGRyYWluVHVyblNwYWNlLCBoYW5kbGVTY3JvbGwsIGluaXRpYWxDaGF0SWQsIG9uU2Nyb2xsVG9Cb3R0b20sIHVwZGF0ZVNjcm9sbEFmZm9yZGFuY2VzXVxuICApXG5cbiAgLy8gcmVmcyB0byBzdGFiaWxpemUgZnVuY3Rpb25zIGFuZCBhdm9pZCB1bm5lY2Vzc2FyeSByZS1yZW5kZXJzXG4gIGNvbnN0IHNlbmRNZXNzYWdlUmVmID0gdXNlUmVmKHNlbmRNZXNzYWdlKVxuICBjb25zdCBzdG9wR2VuZXJhdGlvblJlZiA9IHVzZVJlZihzdG9wR2VuZXJhdGlvbilcbiAgY29uc3Qgb25TZW5kTWVzc2FnZVJlYWR5UmVmID0gdXNlUmVmKG9uU2VuZE1lc3NhZ2VSZWFkeSlcbiAgY29uc3Qgc2VuZE1lc3NhZ2VQcm94eVJlZiA9IHVzZVJlZihcbiAgICAoXG4gICAgICBtZXNzYWdlOiBzdHJpbmcsXG4gICAgICBhdHRhY2htZW50cz86IEF0dGFjaG1lbnRGaWxlW10sXG4gICAgICBmYXFJZD86IHN0cmluZyxcbiAgICAgIGFnZW50U3VnZ2VzdGlvbklkPzogc3RyaW5nLFxuICAgICAgbWVudGlvbnM/OiBDb250ZXh0TWVudGlvbltdLFxuICAgICAgZnVhSWQ/OiBzdHJpbmcsXG4gICAgICBzY0lkPzogc3RyaW5nXG4gICAgKSA9PiBzZW5kTWVzc2FnZVJlZi5jdXJyZW50KG1lc3NhZ2UsIGF0dGFjaG1lbnRzLCBmYXFJZCwgYWdlbnRTdWdnZXN0aW9uSWQsIG1lbnRpb25zLCBmdWFJZCwgc2NJZClcbiAgKVxuICBjb25zdCBzdG9wR2VuZXJhdGlvblByb3h5UmVmID0gdXNlUmVmKCgpID0+IHN0b3BHZW5lcmF0aW9uUmVmLmN1cnJlbnQoKSlcblxuICAvLyB1cGRhdGUgcmVmcyB3aGVuIGZ1bmN0aW9ucyBjaGFuZ2VcbiAgc2VuZE1lc3NhZ2VSZWYuY3VycmVudCA9IHNlbmRNZXNzYWdlXG4gIHN0b3BHZW5lcmF0aW9uUmVmLmN1cnJlbnQgPSBzdG9wR2VuZXJhdGlvblxuICBvblNlbmRNZXNzYWdlUmVhZHlSZWYuY3VycmVudCA9IG9uU2VuZE1lc3NhZ2VSZWFkeVxuXG4gIC8qKlxuICAgKiBgaGFuZGxlU3VnZ2VzdGlvbkNsaWNrYCBzZSBwYXNhIGEgVE9ET1MgbG9zIE1lc3NhZ2VJdGVtLCBhc8OtIHF1ZSBzdSBpZGVudGlkYWRcbiAgICogZGVjaWRlIHNpIGVsIGBtZW1vYCBkZSBsYSBsaXN0YSBzb3N0aWVuZS4gTGVlbW9zIHBvciByZWYgbG8gcXVlIGNhbWJpYSBlbiBjYWRhXG4gICAqIHVwZGF0ZSAoYG1lc3NhZ2VzYCwgYHNlbmRNZXNzYWdlYCwgbGFzIHN1Z2VyZW5jaWFzIHlhIGVsZWdpZGFzKSBwYXJhIHF1ZSBlbFxuICAgKiBjYWxsYmFjayBzZWEgZXN0YWJsZTogc2kgbm8sIGFsIHRlcm1pbmFyIGVsIHN0cmVhbSBzZSByZXBpbnRhIGVsIGNoYXQgZW50ZXJvXG4gICAqIHkgY2FkYSBNYWlhU3RyZWFtZG93biB2dWVsdmUgYSBwYXJzZWFyIHN1IG1hcmtkb3duLlxuICAgKi9cbiAgY29uc3QgbWVzc2FnZXNEYXRhUmVmID0gdXNlUmVmKG1lc3NhZ2VzKVxuICBtZXNzYWdlc0RhdGFSZWYuY3VycmVudCA9IG1lc3NhZ2VzXG4gIGNvbnN0IHNlbGVjdGVkU3VnZ2VzdGlvbk1lc3NhZ2VJZHNSZWYgPSB1c2VSZWYoc2VsZWN0ZWRTdWdnZXN0aW9uTWVzc2FnZUlkcylcbiAgc2VsZWN0ZWRTdWdnZXN0aW9uTWVzc2FnZUlkc1JlZi5jdXJyZW50ID0gc2VsZWN0ZWRTdWdnZXN0aW9uTWVzc2FnZUlkc1xuXG4gIGNvbnN0IGhhbmRsZVN1Z2dlc3Rpb25DbGljayA9IHVzZUNhbGxiYWNrKFxuICAgIChtZXNzYWdlSWQ6IHN0cmluZywgc3VnZ2VzdGlvbjogc3RyaW5nKSA9PiB7XG4gICAgICBpZiAoIXN1Z2dlc3Rpb24/LnRyaW0oKSkgcmV0dXJuXG4gICAgICBpZiAoc2VsZWN0ZWRTdWdnZXN0aW9uTWVzc2FnZUlkc1JlZi5jdXJyZW50W21lc3NhZ2VJZF0pIHJldHVyblxuICAgICAgY29uc3QgY3VycmVudE1lc3NhZ2VzID0gbWVzc2FnZXNEYXRhUmVmLmN1cnJlbnRcbiAgICAgIGNvbnN0IGlzTWFya2V0cGxhY2VHbG9iYWxBZ2VudCA9IGlzTWFpYWtlckFnZW50KGFnZW50KVxuICAgICAgZXZlbnQoRVZFTlRTLmFpQ2hhdFN1Z2dlc3RlZEFuc3dlciwge1xuICAgICAgICBhZ2VudF90eXBlOiBpc01hcmtldHBsYWNlR2xvYmFsQWdlbnQgPyAnbWFya2V0cGxhY2UnIDogYWdlbnQ/LnR5cGUsXG4gICAgICB9KVxuICAgICAgc2V0U2VsZWN0ZWRTdWdnZXN0aW9uTWVzc2FnZUlkcyhwcmV2ID0+ICh7IC4uLnByZXYsIFttZXNzYWdlSWRdOiB0cnVlIH0pKVxuXG4gICAgICBjb25zdCB0YXJnZXRNZXNzYWdlID0gY3VycmVudE1lc3NhZ2VzLmZpbmQobXNnID0+IG1zZy5pZCA9PT0gbWVzc2FnZUlkKVxuICAgICAgY29uc3QgaXNSZXRyeVN1Z2dlc3Rpb24gPSAhIXRhcmdldE1lc3NhZ2U/LmlzRXJyb3IgJiYgc3VnZ2VzdGlvbiA9PT0gdCgnY2hhdC5yZXRyeScpXG4gICAgICBpZiAoaXNSZXRyeVN1Z2dlc3Rpb24pIHtcbiAgICAgICAgY29uc3QgbGFzdFVzZXJNZXNzYWdlID0gY3VycmVudE1lc3NhZ2VzXG4gICAgICAgICAgLmZpbHRlcihtc2cgPT4gbXNnLnJvbGUgPT09IENoYXRIaXN0b3J5Um9sZS5VU0VSIHx8IG1zZy51c2VyLmlkID09PSBhdXRoVXNlci5pZC50b1N0cmluZygpKVxuICAgICAgICAgIC5hdCgtMSlcbiAgICAgICAgaWYgKGxhc3RVc2VyTWVzc2FnZT8ubWVzc2FnZSkge1xuICAgICAgICAgIGNvbnN0IHJldHJ5QXR0YWNobWVudHMgPSBBcnJheS5pc0FycmF5KGxhc3RVc2VyTWVzc2FnZS5hdHRhY2htZW50cylcbiAgICAgICAgICAgID8gbGFzdFVzZXJNZXNzYWdlLmF0dGFjaG1lbnRzXG4gICAgICAgICAgICA6IEFycmF5LmlzQXJyYXkobGFzdFVzZXJNZXNzYWdlLnNvdXJjZXMpXG4gICAgICAgICAgICAgID8gbGFzdFVzZXJNZXNzYWdlLnNvdXJjZXNcbiAgICAgICAgICAgICAgOiBbXVxuICAgICAgICAgIHNlbmRNZXNzYWdlUmVmLmN1cnJlbnQobGFzdFVzZXJNZXNzYWdlLm1lc3NhZ2UsIHJldHJ5QXR0YWNobWVudHMpXG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgc2VuZE1lc3NhZ2VSZWYuY3VycmVudChzdWdnZXN0aW9uKVxuICAgIH0sXG4gICAgW2V2ZW50LCBhZ2VudCwgdCwgYXV0aFVzZXIuaWRdXG4gIClcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChvblNlbmRNZXNzYWdlUmVhZHlSZWYuY3VycmVudCkge1xuICAgICAgb25TZW5kTWVzc2FnZVJlYWR5UmVmLmN1cnJlbnQoXG4gICAgICAgIHNlbmRNZXNzYWdlUHJveHlSZWYuY3VycmVudCxcbiAgICAgICAgc3RvcEdlbmVyYXRpb25Qcm94eVJlZi5jdXJyZW50LFxuICAgICAgICB3YWl0aW5nUmVzcG9uc2UsXG4gICAgICAgIGlzV3JpdGluZ1xuICAgICAgKVxuICAgIH1cbiAgfSwgW3dhaXRpbmdSZXNwb25zZSwgaXNXcml0aW5nXSlcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlzTG9hZGluZ01vcmVSZWYuY3VycmVudCA9IGlzTG9hZGluZ01vcmVNZXNzYWdlc1xuICB9LCBbaXNMb2FkaW5nTW9yZU1lc3NhZ2VzXSlcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghY2hhdEluaXRpYWxpemVkUmVmLmN1cnJlbnQpIHtcbiAgICAgIGNoYXRJbml0aWFsaXplZFJlZi5jdXJyZW50ID0gdHJ1ZVxuICAgICAgaW5pdGlhbGl6ZUNoYXQoKVxuICAgIH1cbiAgfSwgW10pXG5cbiAgLy8gTWllbnRyYXMgZWwgc3RyZWFtIGNyZWNlOiBlbmNvZ2VyIGVsIHNwYWNlciBkZWwgdHVybm8gYW5jbGFkbyB5XG4gIC8vIGFjdHVhbGl6YXIgZmxlY2hhL2dyYWRpZW50ZXMuIEVsIHNjcm9sbCBubyBzZSBtdWV2ZSBzb2xvLlxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghd2FpdGluZ1Jlc3BvbnNlICYmICFpc1dyaXRpbmcpIHJldHVybiB1bmRlZmluZWRcbiAgICBpZiAoIW1lc3NhZ2VzUmVmLmN1cnJlbnQpIHJldHVybiB1bmRlZmluZWRcblxuICAgIGxldCByYWZJZDogbnVtYmVyIHwgbnVsbCA9IG51bGxcblxuICAgIGNvbnN0IHRpY2sgPSAoKSA9PiB7XG4gICAgICBjb25zdCBlbCA9IG1lc3NhZ2VzUmVmLmN1cnJlbnRcbiAgICAgIGlmICghZWwpIHtcbiAgICAgICAgcmFmSWQgPSBudWxsXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgICAgc3luY1R1cm5TcGFjZSgpXG4gICAgICB1cGRhdGVTY3JvbGxBZmZvcmRhbmNlcygpXG4gICAgICByYWZJZCA9IHJlcXVlc3RBbmltYXRpb25GcmFtZSh0aWNrKVxuICAgIH1cblxuICAgIHJhZklkID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHRpY2spXG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGlmIChyYWZJZCAhPSBudWxsKSBjYW5jZWxBbmltYXRpb25GcmFtZShyYWZJZClcbiAgICB9XG4gIH0sIFt3YWl0aW5nUmVzcG9uc2UsIGlzV3JpdGluZywgc3luY1R1cm5TcGFjZSwgdXBkYXRlU2Nyb2xsQWZmb3JkYW5jZXNdKVxuXG4gIGNvbnN0IGxhc3RSZXNlcnZlZFF1ZXN0aW9uUmVmID0gdXNlUmVmPHN0cmluZyB8IG51bGw+KG51bGwpXG5cbiAgLy8gQ2FtYmlvIGRlIGNoYXQ6IGVsIGFuY2xhIHkgZWwgc3BhY2VyIGRlbCB0dXJubyBhbnRlcmlvciBkZWphbiBkZSBhcGxpY2FyLlxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghbG9hZGluZ01lc3NhZ2VzKSByZXR1cm5cbiAgICBsYXN0UmVzZXJ2ZWRRdWVzdGlvblJlZi5jdXJyZW50ID0gbnVsbFxuICAgIGNsZWFyVHVyblNwYWNlKClcbiAgfSwgW2xvYWRpbmdNZXNzYWdlcywgY2xlYXJUdXJuU3BhY2VdKVxuXG4gIC8vIEFsIGVudmlhciB1biBtZW5zYWplOiBhbmNsYW1vcyBlbCB0dXJubyB5IGhhY2Vtb3MgZWwgw7puaWNvIHNjcm9sbCBkZWwgY2ljbG8uXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGxvYWRpbmdNZXNzYWdlcyB8fCBpc0xvYWRpbmdNb3JlTWVzc2FnZXMpIHJldHVyblxuXG4gICAgbGV0IHF1ZXN0aW9uSWQ6IHN0cmluZyB8IG51bGwgPSBudWxsXG4gICAgZm9yIChsZXQgaW5kZXggPSBtZXNzYWdlcy5sZW5ndGggLSAxOyBpbmRleCA+PSAwOyBpbmRleCAtPSAxKSB7XG4gICAgICBpZiAobWVzc2FnZXNbaW5kZXhdPy5pZD8uc3RhcnRzV2l0aCgncXVlc3Rpb24tJykpIHtcbiAgICAgICAgcXVlc3Rpb25JZCA9IG1lc3NhZ2VzW2luZGV4XS5pZFxuICAgICAgICBicmVha1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoIXF1ZXN0aW9uSWQgfHwgcXVlc3Rpb25JZCA9PT0gbGFzdFJlc2VydmVkUXVlc3Rpb25SZWYuY3VycmVudCkgcmV0dXJuXG5cbiAgICBsYXN0UmVzZXJ2ZWRRdWVzdGlvblJlZi5jdXJyZW50ID0gcXVlc3Rpb25JZFxuICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiByZXNlcnZlVHVyblNwYWNlKHF1ZXN0aW9uSWQpKVxuICB9LCBbbWVzc2FnZXMsIGxvYWRpbmdNZXNzYWdlcywgaXNMb2FkaW5nTW9yZU1lc3NhZ2VzLCByZXNlcnZlVHVyblNwYWNlXSlcblxuICAvLyBTY3JvbGwgY3VhbmRvIGNhbWJpYW4gbG9zIG1lbnNhamVzOiBkaXN0aW5ndWUgXCJudWV2byBtZW5zYWplXCIgKGFncmVnYWRvKVxuICAvLyBkZSBcInJlZW1wbGF6b1wiIChtaXNtbyBpZC9sZW5ndGgsIGVqLiBmZWVkYmFjayBvIGFwcHJvdmFsU3RhdHVzKS4gRW5cbiAgLy8gcmVlbXBsYXpvcyBzb2xvIHNlIHJlY2FsY3VsYSBsYSB2aXNpYmlsaWRhZCBkZWwgYm90w7NuIHNpbiBmb3J6YXIgc2Nyb2xsLlxuICBjb25zdCBsYXN0TWVzc2FnZUlkUmVmID0gdXNlUmVmPHN0cmluZyB8IG51bGw+KG51bGwpXG4gIGNvbnN0IGxhc3RNZXNzYWdlc0xlbmd0aFJlZiA9IHVzZVJlZjxudW1iZXI+KDApXG5cbiAgLy8gQWwgY2FtYmlhciBkZSBzZXNpw7NuLCByZXNldGVhciBlc3RhZG8gZGUgc2Nyb2xsIG1hbnVhbCBwYXJhIG5vIGhlcmVkYXIgZWwgY2hhdCBhbnRlcmlvci5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICB3YXNMb2FkaW5nTWVzc2FnZXNSZWYuY3VycmVudCA9IGZhbHNlXG4gICAgbGFzdFNjcm9sbGVkU2Vzc2lvblJlZi5jdXJyZW50ID0gbnVsbFxuICAgIHNjcm9sbFRocmVzaG9sZFJlZi5jdXJyZW50ID0gMzlcbiAgICBsYXN0U2Nyb2xsVG9wUmVmLmN1cnJlbnQgPSAwXG4gICAgbGFzdE1lc3NhZ2VJZFJlZi5jdXJyZW50ID0gbnVsbFxuICAgIGxhc3RNZXNzYWdlc0xlbmd0aFJlZi5jdXJyZW50ID0gMFxuICB9LCBbaW5pdGlhbENoYXRJZF0pXG5cbiAgLy8gUmVzdGF1cmFjacOzbiBkZXNkZSBjYWNoZSAoc2luIExvYWRlcik6IGJhamFyIGFsIGZvbmRvIGFsIHJlYWJyaXIgc2VzacOzbiB2aXNpdGFkYS5cbiAgdXNlTGF5b3V0RWZmZWN0KCgpID0+IHtcbiAgICBpZiAobG9hZGluZ01lc3NhZ2VzIHx8ICFpbml0aWFsQ2hhdElkIHx8IG1lc3NhZ2VzLmxlbmd0aCA9PT0gMCkgcmV0dXJuXG4gICAgaWYgKGxhc3RTY3JvbGxlZFNlc3Npb25SZWYuY3VycmVudCA9PT0gaW5pdGlhbENoYXRJZCkgcmV0dXJuXG4gICAgbGFzdFNjcm9sbGVkU2Vzc2lvblJlZi5jdXJyZW50ID0gaW5pdGlhbENoYXRJZFxuXG4gICAgc2Nyb2xsVGhyZXNob2xkUmVmLmN1cnJlbnQgPSAzOVxuICAgIGxhc3RNZXNzYWdlSWRSZWYuY3VycmVudCA9IG1lc3NhZ2VzW21lc3NhZ2VzLmxlbmd0aCAtIDFdPy5pZCA/PyBudWxsXG4gICAgbGFzdE1lc3NhZ2VzTGVuZ3RoUmVmLmN1cnJlbnQgPSBtZXNzYWdlcy5sZW5ndGhcblxuICAgIHNjcm9sbFRvQm90dG9tUmFmKClcbiAgICBzY3JvbGxUb0JvdHRvbVJhZih7IGRlbGF5TXM6IDEwMCB9KVxuICB9LCBbaW5pdGlhbENoYXRJZCwgbG9hZGluZ01lc3NhZ2VzLCBtZXNzYWdlcy5sZW5ndGgsIG1lc3NhZ2VzLCBzY3JvbGxUb0JvdHRvbVJhZl0pXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoIW1lc3NhZ2VzUmVmLmN1cnJlbnQgfHwgbG9hZGluZ01lc3NhZ2VzIHx8IGlzTG9hZGluZ01vcmVNZXNzYWdlcyB8fCBpc0xvYWRpbmdNb3JlUmVmLmN1cnJlbnQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IGxhc3RNZXNzYWdlID0gbWVzc2FnZXNbbWVzc2FnZXMubGVuZ3RoIC0gMV1cbiAgICBjb25zdCBsYXN0SWQgPSBsYXN0TWVzc2FnZT8uaWQgPz8gbnVsbFxuICAgIGNvbnN0IHByZXZJZCA9IGxhc3RNZXNzYWdlSWRSZWYuY3VycmVudFxuICAgIGNvbnN0IHByZXZMZW4gPSBsYXN0TWVzc2FnZXNMZW5ndGhSZWYuY3VycmVudFxuICAgIGxhc3RNZXNzYWdlSWRSZWYuY3VycmVudCA9IGxhc3RJZFxuICAgIGxhc3RNZXNzYWdlc0xlbmd0aFJlZi5jdXJyZW50ID0gbWVzc2FnZXMubGVuZ3RoXG5cbiAgICBjb25zdCBpc05ld01lc3NhZ2UgPSBsYXN0SWQgIT09IHByZXZJZCB8fCBtZXNzYWdlcy5sZW5ndGggIT09IHByZXZMZW5cbiAgICBpZiAoIWlzTmV3TWVzc2FnZSkge1xuICAgICAgdXBkYXRlU2Nyb2xsQWZmb3JkYW5jZXMoKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgLy8gVHVybm8gYW5jbGFkbzogbmkgZWwgcmVlbXBsYXpvIGRlbCBwbGFjZWhvbGRlciBwb3IgZWwgbWVuc2FqZSBmaW5hbCwgbmkgbGFcbiAgICAvLyBhcGFyaWNpw7NuIGRlbCBBcHByb3ZhbEJveCBtdWV2ZW4gZWwgc2Nyb2xsLiBTb2xvIHNlIGFqdXN0YSBlbCBzcGFjZXIuXG4gICAgaWYgKGFuY2hvcmVkVHVybklkUmVmLmN1cnJlbnQpIHtcbiAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZShzeW5jVHVyblNwYWNlKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgLy8gTWllbnRyYXMgZWwgYWdlbnRlIHJlc3BvbmRlIG5vIGVtcHVqYW1vcyBlbCBzY3JvbGw6IGVsIHVzdWFyaW8gc2UgcXVlZGFcbiAgICAvLyBkb25kZSBlc3TDoSB5IHVzYSBlbCBib3TDs24gc2kgcXVpZXJlIGlyIGFsIGZvbmRvLlxuICAgIGlmICh3YWl0aW5nUmVzcG9uc2UgfHwgaXNXcml0aW5nKSB7XG4gICAgICB1cGRhdGVTY3JvbGxBZmZvcmRhbmNlcygpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCBjb250YWluZXIgPSBtZXNzYWdlc1JlZi5jdXJyZW50XG4gICAgY29uc3QgaXNBdEJvdHRvbSA9IGNvbnRhaW5lci5zY3JvbGxIZWlnaHQgLSBjb250YWluZXIuc2Nyb2xsVG9wIDw9IGNvbnRhaW5lci5jbGllbnRIZWlnaHQgKyAxMDBcbiAgICBjb25zdCBoYXNJbml0aWFsTWVzc2FnZSA9IG1lc3NhZ2VzLnNvbWUobXNnID0+IG1zZy5pZCA9PT0gJ3VzZXItaW5pdGlhbC1tZXNzYWdlJylcbiAgICBjb25zdCBpc0FwcHJvdmFsID0gISFsYXN0TWVzc2FnZSAmJiAobGFzdE1lc3NhZ2UuaWQuc3RhcnRzV2l0aCgnYXBwcm92YWwtJykgfHwgISFsYXN0TWVzc2FnZS5hcHByb3ZhbClcbiAgICBjb25zdCBpc0Fuc3dlck9yUXVlc3Rpb24gPVxuICAgICAgISFsYXN0TWVzc2FnZSAmJiAobGFzdE1lc3NhZ2UuaWQuc3RhcnRzV2l0aCgnYW5zd2VyLScpIHx8IGxhc3RNZXNzYWdlLmlkLnN0YXJ0c1dpdGgoJ3F1ZXN0aW9uLScpKVxuXG4gICAgLy8gTnVldm9zIGFuc3dlci9xdWVzdGlvbjogc2Nyb2xsIHNpIGVsIHVzdWFyaW8geWEgZXN0YWJhIGFsIGZvbmRvLlxuICAgIGlmIChpc0Fuc3dlck9yUXVlc3Rpb24gJiYgaXNBdEJvdHRvbSkge1xuICAgICAgc2Nyb2xsVG9Cb3R0b21SYWYoKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgLy8gQ2FzbyBib3JkZTogY2FtYmlvcyBkZSBtZW5zYWplcyBzaW4gc2VyIG51ZXZvIGFuc3dlci91c2VyL2FwcHJvdmFsXG4gICAgLy8gcGVybyBzw60gdW4gbWVuc2FqZSBudWV2byAobm8gZWwgXCJ1c2VyLWluaXRpYWwtbWVzc2FnZVwiKS4gU2Nyb2xsZWEuXG4gICAgaWYgKCFpc0Fuc3dlck9yUXVlc3Rpb24gJiYgIWlzQXBwcm92YWwgJiYgIWhhc0luaXRpYWxNZXNzYWdlICYmIG1lc3NhZ2VzLmxlbmd0aCA+IHByZXZMZW4pIHtcbiAgICAgIHNjcm9sbFRvQm90dG9tUmFmKClcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIHVwZGF0ZVNjcm9sbEFmZm9yZGFuY2VzKClcbiAgfSwgW1xuICAgIG1lc3NhZ2VzLFxuICAgIGxvYWRpbmdNZXNzYWdlcyxcbiAgICBpc0xvYWRpbmdNb3JlTWVzc2FnZXMsXG4gICAgd2FpdGluZ1Jlc3BvbnNlLFxuICAgIGlzV3JpdGluZyxcbiAgICBzY3JvbGxUb0JvdHRvbVJhZixcbiAgICBzeW5jVHVyblNwYWNlLFxuICAgIHVwZGF0ZVNjcm9sbEFmZm9yZGFuY2VzLFxuICBdKVxuXG4gIC8vIEFsIGFicmlyL2NhcmdhciB1bmEgY29udmVyc2FjacOzbiBlbCBjb250ZW5lZG9yIHNlIHJlbW9udGEgKExvYWRlciDihpIgbGlzdGEpIGNvblxuICAvLyBzY3JvbGxUb3A9MC4gRm9yemFtb3MgaXIgYWwgZm9uZG8gYWwgdGVybWluYXIgbG9hZE1lc3NhZ2VzLCBzaW4gYWZlY3RhciBwYWdpbmFjacOzbiBoYWNpYSBhcnJpYmEuXG4gIHVzZUxheW91dEVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QganVzdEZpbmlzaGVkTG9hZGluZyA9IHdhc0xvYWRpbmdNZXNzYWdlc1JlZi5jdXJyZW50ICYmICFsb2FkaW5nTWVzc2FnZXNcbiAgICB3YXNMb2FkaW5nTWVzc2FnZXNSZWYuY3VycmVudCA9IGxvYWRpbmdNZXNzYWdlc1xuXG4gICAgaWYgKCFqdXN0RmluaXNoZWRMb2FkaW5nIHx8IG1lc3NhZ2VzLmxlbmd0aCA9PT0gMCkgcmV0dXJuXG5cbiAgICBzY3JvbGxUaHJlc2hvbGRSZWYuY3VycmVudCA9IDM5XG4gICAgbGFzdE1lc3NhZ2VJZFJlZi5jdXJyZW50ID0gbWVzc2FnZXNbbWVzc2FnZXMubGVuZ3RoIC0gMV0/LmlkID8/IG51bGxcbiAgICBsYXN0TWVzc2FnZXNMZW5ndGhSZWYuY3VycmVudCA9IG1lc3NhZ2VzLmxlbmd0aFxuXG4gICAgc2Nyb2xsVG9Cb3R0b21SYWYoKVxuICAgIHNjcm9sbFRvQm90dG9tUmFmKHsgZGVsYXlNczogMTAwIH0pXG4gIH0sIFtsb2FkaW5nTWVzc2FnZXMsIG1lc3NhZ2VzLmxlbmd0aCwgc2Nyb2xsVG9Cb3R0b21SYWZdKVxuXG4gIC8vIEVzdGFkbyBpbmljaWFsIGRlbCBib3TDs24gc2Nyb2xsLXRvLWJvdHRvbSBhbCB0ZXJtaW5hciBsb2FkaW5nTWVzc2FnZXMuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFsb2FkaW5nTWVzc2FnZXMpIHtcbiAgICAgIHVwZGF0ZVNjcm9sbEFmZm9yZGFuY2VzKClcbiAgICB9XG4gIH0sIFtsb2FkaW5nTWVzc2FnZXMsIG1lc3NhZ2VzLmxlbmd0aCwgdXBkYXRlU2Nyb2xsQWZmb3JkYW5jZXNdKVxuXG4gIC8vIE9idGVuZXIgZWwgw7psdGltbyBtZW5zYWplIGRlbCB1c3VhcmlvIHBhcmEgdmVyaWZpY2FyIHNpIHRpZW5lIGF0dGFjaG1lbnRzXG4gIGNvbnN0IGxhc3RVc2VyTWVzc2FnZSA9IG1lc3NhZ2VzXG4gICAgLmZpbHRlcihtc2cgPT4gbXNnLnJvbGUgPT09IENoYXRIaXN0b3J5Um9sZS5VU0VSIHx8IG1zZy51c2VyLmlkID09PSBhdXRoVXNlci5pZC50b1N0cmluZygpKVxuICAgIC5hdCgtMSlcblxuICBjb25zdCBhdHRhY2htZW50c0NvdW50ID1cbiAgICAoQXJyYXkuaXNBcnJheShsYXN0VXNlck1lc3NhZ2U/LmF0dGFjaG1lbnRzKSA/IGxhc3RVc2VyTWVzc2FnZS5hdHRhY2htZW50cy5sZW5ndGggOiAwKSB8fFxuICAgIChBcnJheS5pc0FycmF5KGxhc3RVc2VyTWVzc2FnZT8uc291cmNlcykgPyBsYXN0VXNlck1lc3NhZ2Uuc291cmNlcy5sZW5ndGggOiAwKVxuXG4gIGNvbnN0IHN0cmVhbUxvYWRpbmdEaXNwbGF5ID0gcmVzb2x2ZVN0cmVhbUxvYWRpbmdEaXNwbGF5KHtcbiAgICBzdHJlYW1BY3Rpdml0eSxcbiAgICBsb2FkaW5nTWVzc2FnZSxcbiAgICBhY3RpdmVMb2FkaW5nczogYWN0aXZlTG9hZGluZ3MgfHwge30sXG4gICAgd2FpdGluZ1Jlc3BvbnNlLFxuICAgIGlzV2ViU2VhcmNoQWN0aXZlLFxuICAgIGlzRGVlcFNlYXJjaEFjdGl2ZSxcbiAgICBoYXNBdHRhY2htZW50czogQm9vbGVhbihhdHRhY2htZW50c0NvdW50KSxcbiAgICBhdHRhY2htZW50c0NvdW50LFxuICAgIHQsXG4gIH0pXG5cbiAgY29uc3QgaXNTY3JvbGxPblBhcmVudCA9ICEhZXhwYW5kZWRcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghaW5pdGlhbENoYXRJZCkge1xuICAgICAgcGVuZGluZ1Njcm9sbFJlc3RvcmVSZWYuY3VycmVudCA9IG51bGxcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBjb25zdCBzZXNzaW9uID0gcmVhZE1haWFQYW5lbFNlc3Npb24oYXV0aFVzZXIuaWQpXG4gICAgaWYgKHNlc3Npb24/LnNjcm9sbFNlc3Npb25JZCA9PT0gaW5pdGlhbENoYXRJZCAmJiB0eXBlb2Ygc2Vzc2lvbi5zY3JvbGxUb3AgPT09ICdudW1iZXInICYmIHNlc3Npb24uc2Nyb2xsVG9wID4gMCkge1xuICAgICAgcGVuZGluZ1Njcm9sbFJlc3RvcmVSZWYuY3VycmVudCA9IHNlc3Npb24uc2Nyb2xsVG9wXG4gICAgfVxuICB9LCBbYXV0aFVzZXIuaWQsIGluaXRpYWxDaGF0SWRdKVxuXG4gIHVzZUxheW91dEVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGxvYWRpbmdNZXNzYWdlcyB8fCBwZW5kaW5nU2Nyb2xsUmVzdG9yZVJlZi5jdXJyZW50ID09IG51bGwgfHwgIW1lc3NhZ2VzUmVmLmN1cnJlbnQpIHJldHVyblxuICAgIG1lc3NhZ2VzUmVmLmN1cnJlbnQuc2Nyb2xsVG9wID0gcGVuZGluZ1Njcm9sbFJlc3RvcmVSZWYuY3VycmVudFxuICAgIGxhc3RTY3JvbGxUb3BSZWYuY3VycmVudCA9IHBlbmRpbmdTY3JvbGxSZXN0b3JlUmVmLmN1cnJlbnRcbiAgICBwZW5kaW5nU2Nyb2xsUmVzdG9yZVJlZi5jdXJyZW50ID0gbnVsbFxuICB9LCBbbG9hZGluZ01lc3NhZ2VzLCBtZXNzYWdlcy5sZW5ndGhdKVxuXG4gIC8vIEFsIGV4cGFuZGlyL2NvbnRyYWVyIGVsIG1vZGFsIGVsIHJlZiBwYXNhIGEgb3RybyBjb250ZW5lZG9yIChzY3JvbGxUb3Agc2UgcmVzZXRlYSBhIDApLlxuICAvLyBSZXN0YXVyYXIgbGEgcG9zaWNpw7NuIGRlIHNjcm9sbCBhbnRlcyBkZWwgcGFpbnQgcGFyYSBldml0YXIgcXVlIGxhIGNvbnZlcnNhY2nDs24gc2FsdGUgYXJyaWJhLlxuICBjb25zdCBleHBhbmRlZFJlZiA9IHVzZVJlZihleHBhbmRlZClcbiAgdXNlTGF5b3V0RWZmZWN0KCgpID0+IHtcbiAgICBpZiAoZXhwYW5kZWRSZWYuY3VycmVudCAhPT0gZXhwYW5kZWQgJiYgbWVzc2FnZXNSZWYuY3VycmVudCkge1xuICAgICAgY29uc3Qgc2F2ZWRTY3JvbGxUb3AgPSBsYXN0U2Nyb2xsVG9wUmVmLmN1cnJlbnRcbiAgICAgIG1lc3NhZ2VzUmVmLmN1cnJlbnQuc2Nyb2xsVG9wID0gc2F2ZWRTY3JvbGxUb3BcbiAgICAgIGV4cGFuZGVkUmVmLmN1cnJlbnQgPSBleHBhbmRlZFxuICAgIH0gZWxzZSB7XG4gICAgICBleHBhbmRlZFJlZi5jdXJyZW50ID0gZXhwYW5kZWRcbiAgICB9XG4gIH0sIFtleHBhbmRlZF0pXG5cbiAgaWYgKGxvYWRpbmdNZXNzYWdlcykge1xuICAgIHJldHVybiAoXG4gICAgICA8RmFkZSBmaWxsPlxuICAgICAgICA8TG9hZGVyIC8+XG4gICAgICA8L0ZhZGU+XG4gICAgKVxuICB9XG5cbiAgY29uc3QgbGFzdE1lc3NhZ2UgPSBtZXNzYWdlc1ttZXNzYWdlcy5sZW5ndGggLSAxXVxuICBjb25zdCBoYXNNZXNzYWdlTGV2ZWxJbmRpY2F0b3IgPVxuICAgICEhbGFzdE1lc3NhZ2UgJiYgaXNTdHJlYW1pbmdQbGFjZWhvbGRlck1lc3NhZ2VJZChsYXN0TWVzc2FnZS5pZCkgJiYgKHdhaXRpbmdSZXNwb25zZSB8fCBpc1dyaXRpbmcpXG5cbiAgY29uc3QgbWVzc2FnZXNDb250ZW50ID0gKFxuICAgIDw+XG4gICAgICB7aXNMb2FkaW5nTW9yZU1lc3NhZ2VzICYmIDxMb2FkaW5nVGV4dCB0ZXh0PXt0KCdjaGF0LmxvYWRpbmdNb3JlJyl9IC8+fVxuICAgICAgPD5cbiAgICAgICAge21lc3NhZ2VzLm1hcCgobWVzc2FnZSwgaW5kZXgpID0+IHtcbiAgICAgICAgICBjb25zdCBpc0Fzc2lzdGFudE1lc3NhZ2UgPSBtZXNzYWdlLnJvbGUgPT09IENoYXRIaXN0b3J5Um9sZS5BU1NJU1RBTlQgfHwgbWVzc2FnZS51c2VyLmlkID09PSAnYXNzaXN0YW50J1xuICAgICAgICAgIGNvbnN0IGlzTGFzdE1lc3NhZ2UgPSBpbmRleCA9PT0gbWVzc2FnZXMubGVuZ3RoIC0gMVxuICAgICAgICAgIGNvbnN0IGlzU3RyZWFtaW5nUGxhY2Vob2xkZXIgPVxuICAgICAgICAgICAgaXNBc3Npc3RhbnRNZXNzYWdlICYmIGlzTGFzdE1lc3NhZ2UgJiYgaXNTdHJlYW1pbmdQbGFjZWhvbGRlck1lc3NhZ2VJZChtZXNzYWdlLmlkKVxuICAgICAgICAgIGNvbnN0IGlzU3RyZWFtaW5nID0gaXNTdHJlYW1pbmdQbGFjZWhvbGRlciAmJiAod2FpdGluZ1Jlc3BvbnNlIHx8IGlzV3JpdGluZylcblxuICAgICAgICAgIC8vIE5vIGZpbHRyYXIgZWwgcGxhY2Vob2xkZXIgZGVsIG1lbnNhamUgZW4gc3RyZWFtaW5nOiBzdSB0ZXh0byB2aXZlXG4gICAgICAgICAgLy8gZW4gZWwgc3RyZWFtaW5nU3RvcmUgeSBgbWVzc2FnZS5tZXNzYWdlYCBlcyAnJyBoYXN0YSBlbCBjb21wbGV0ZS5cbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAhaXNTdHJlYW1pbmdQbGFjZWhvbGRlciAmJlxuICAgICAgICAgICAgIWlzU3RyZWFtaW5nICYmXG4gICAgICAgICAgICAhKG1lc3NhZ2UuYXR0YWNobWVudHM/Lmxlbmd0aCB8fCBtZXNzYWdlLnNvdXJjZXM/Lmxlbmd0aCkgJiZcbiAgICAgICAgICAgICFtZXNzYWdlLm1lc3NhZ2UgJiZcbiAgICAgICAgICAgICFtZXNzYWdlLnByb2plY3Q/Lm5hbWUgJiZcbiAgICAgICAgICAgICFtZXNzYWdlLmFwcHJvdmFsXG4gICAgICAgICAgKVxuICAgICAgICAgICAgcmV0dXJuIG51bGxcblxuICAgICAgICAgIGNvbnN0IG1lc3NhZ2VGZWVkYmFjayA9XG4gICAgICAgICAgICBtZXNzYWdlPy53YXNIZWxwZnVsID09PSB1bmRlZmluZWQgfHwgbWVzc2FnZS53YXNIZWxwZnVsID09PSBudWxsXG4gICAgICAgICAgICAgID8gbnVsbFxuICAgICAgICAgICAgICA6IG1lc3NhZ2Uud2FzSGVscGZ1bFxuICAgICAgICAgICAgICAgID8gRmVlZGJhY2suVEhVTUJTX1VQXG4gICAgICAgICAgICAgICAgOiBGZWVkYmFjay5USFVNQlNfRE9XTlxuXG4gICAgICAgICAgLy8gS2V5IGVzdGFibGU6IHNvbG8gbWVzc2FnZS5pZCBwYXJhIGV2aXRhciByZW1vdW50IGR1cmFudGUgc3RyZWFtaW5nIChtZXNzYWdlLmRhdGUgcHVlZGUgY2FtYmlhcilcbiAgICAgICAgICBjb25zdCBtZXNzYWdlS2V5ID0gbWVzc2FnZS5pZCA/PyBgbXNnLSR7aW5kZXh9YFxuXG4gICAgICAgICAgY29uc3QgdHVybklkID0gcmVzb2x2ZVJldHJ5VHVybklkKG1lc3NhZ2UpXG4gICAgICAgICAgY29uc3QgdXNlck1lc3NhZ2VGb3JSZXRyeSA9IGZpbmRVc2VyTWVzc2FnZUZvclJldHJ5KG1lc3NhZ2VzLCBtZXNzYWdlKVxuICAgICAgICAgIGNvbnN0IGNhblJldHJ5ID1cbiAgICAgICAgICAgICEhdXNlck1lc3NhZ2VGb3JSZXRyeSAmJlxuICAgICAgICAgICAgIWlzU3RyZWFtaW5nICYmXG4gICAgICAgICAgICAhbWVzc2FnZS5pc0Vycm9yICYmXG4gICAgICAgICAgICAhbWVzc2FnZS5hcHByb3ZhbCAmJlxuICAgICAgICAgICAgKG1lc3NhZ2UuaXNGcm9udGVuZENhbmNlbGxlZCB8fCAoIW1lc3NhZ2UuaXNfY2FuY2VsbGVkICYmICEhdHVybklkKSlcblxuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8TWVzc2FnZUl0ZW1cbiAgICAgICAgICAgICAgey4uLm1lc3NhZ2V9XG4gICAgICAgICAgICAgIGtleT17bWVzc2FnZUtleX1cbiAgICAgICAgICAgICAgYXV0aFVzZXI9e2F1dGhVc2VyfVxuICAgICAgICAgICAgICBoYW5kbGVTZWxlY3RPcHRpb249e2hhbmRsZVNlbGVjdE9wdGlvbn1cbiAgICAgICAgICAgICAgaGFuZGxlRmVlZGJhY2s9e2hhbmRsZUZlZWRiYWNrfVxuICAgICAgICAgICAgICBoYW5kbGVBcHByb3ZhbERlY2lzaW9uPXtoYW5kbGVBcHByb3ZhbERlY2lzaW9ufVxuICAgICAgICAgICAgICBoYW5kbGVTdWdnZXN0aW9uQ2xpY2s9e2hhbmRsZVN1Z2dlc3Rpb25DbGlja31cbiAgICAgICAgICAgICAgaGFuZGxlUmV0cnk9e2NhblJldHJ5ID8gKCkgPT4gcmV0cnlNZXNzYWdlKG1lc3NhZ2UpIDogdW5kZWZpbmVkfVxuICAgICAgICAgICAgICBoYXNTZWxlY3RlZFN1Z2dlc3Rpb249eyEhc2VsZWN0ZWRTdWdnZXN0aW9uTWVzc2FnZUlkc1ttZXNzYWdlLmlkXX1cbiAgICAgICAgICAgICAgZGlzYWJsZUZlZWRiYWNrPXttZXNzYWdlRmVlZGJhY2t9XG4gICAgICAgICAgICAgIGlzU3RyZWFtaW5nPXtpc1N0cmVhbWluZ31cbiAgICAgICAgICAgICAgaXNMYXN0TWVzc2FnZT17aXNMYXN0TWVzc2FnZX1cbiAgICAgICAgICAgICAgZXhwYW5kZWQ9e2V4cGFuZGVkfVxuICAgICAgICAgICAgICBzdHJlYW1BY3Rpdml0eT17aXNTdHJlYW1pbmcgPyBzdHJlYW1Mb2FkaW5nRGlzcGxheSA6IG51bGx9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgIClcbiAgICAgICAgfSl9XG4gICAgICA8Lz5cbiAgICAgIHshaGFzTWVzc2FnZUxldmVsSW5kaWNhdG9yICYmIHN0cmVhbUxvYWRpbmdEaXNwbGF5ICYmIChcbiAgICAgICAgPFNDTG9hZGluZ01lc3NhZ2VzQ29sdW1uPlxuICAgICAgICAgIDxBZ2VudEFjdGl2aXR5SW5kaWNhdG9yIGFjdGl2aXR5PXtzdHJlYW1Mb2FkaW5nRGlzcGxheX0gLz5cbiAgICAgICAgPC9TQ0xvYWRpbmdNZXNzYWdlc0NvbHVtbj5cbiAgICAgICl9XG4gICAgICB7LyogRXNwYWNpbyBxdWUgbGUgcGVybWl0ZSBhIGxhIHByZWd1bnRhIHN1YmlyIGFsIHRvcGUuIEFsdHVyYSBtYW5lamFkYVxuICAgICAgICAgIGltcGVyYXRpdmFtZW50ZSBkZXNkZSBgc2V0U3BhY2VySGVpZ2h0YDsgYXJyYW5jYSBlbiAwLiAqL31cbiAgICAgIDxTQ1R1cm5TcGFjZXIgcmVmPXtzcGFjZXJFbFJlZn0gYXJpYS1oaWRkZW49XCJ0cnVlXCIgLz5cbiAgICA8Lz5cbiAgKVxuXG4gIHJldHVybiAoXG4gICAgLy8gU2kgZWwgdXN1YXJpbyBtdWV2ZSBlbCBzY3JvbGwgYWJvcnRhbW9zIGxhIGFuaW1hY2nDs24geSBzb2x0YW1vcyBlbCB0dXJubzpcbiAgICAvLyBubyBsZSBwZWxlYW1vcyBlbCBjb250cm9sIGRlbCBjb250ZW5lZG9yLlxuICAgIDxTQ01lc3NhZ2VzT3V0ZXJcbiAgICAgICRzY3JvbGxPblBhcmVudD17aXNTY3JvbGxPblBhcmVudH1cbiAgICAgIG9uV2hlZWw9e2hhbmRsZVVzZXJTY3JvbGxJbnRlbnR9XG4gICAgICBvblRvdWNoU3RhcnQ9e2hhbmRsZVVzZXJTY3JvbGxJbnRlbnR9XG4gICAgPlxuICAgICAgPFNDTWVzc2FnZXNHcmFkaWVudFRvcCAkc2hvdz17c2hvd1RvcEdyYWRpZW50fSBhcmlhLWhpZGRlbj1cInRydWVcIiAvPlxuICAgICAge2lzU2Nyb2xsT25QYXJlbnQgPyAoXG4gICAgICAgIDxTQ01lc3NhZ2VzU2Nyb2xsIHJlZj17bWVzc2FnZXNSZWZ9IG9uU2Nyb2xsPXtoYW5kbGVTY3JvbGxUb0JvdHRvbX0+XG4gICAgICAgICAgPFNDTWVzc2FnZXNJbm5lciAkc2Nyb2xsT25QYXJlbnQ9e2lzU2Nyb2xsT25QYXJlbnR9PnttZXNzYWdlc0NvbnRlbnR9PC9TQ01lc3NhZ2VzSW5uZXI+XG4gICAgICAgIDwvU0NNZXNzYWdlc1Njcm9sbD5cbiAgICAgICkgOiAoXG4gICAgICAgIDxTQ01lc3NhZ2VzSW5uZXIgcmVmPXttZXNzYWdlc1JlZn0gb25TY3JvbGw9e2hhbmRsZVNjcm9sbFRvQm90dG9tfSAkc2Nyb2xsT25QYXJlbnQ9e2ZhbHNlfT5cbiAgICAgICAgICB7bWVzc2FnZXNDb250ZW50fVxuICAgICAgICA8L1NDTWVzc2FnZXNJbm5lcj5cbiAgICAgICl9XG5cbiAgICAgIDxTQ01lc3NhZ2VzR3JhZGllbnRCb3R0b20gJHNob3c9e3Nob3dCb3R0b21HcmFkaWVudH0gYXJpYS1oaWRkZW49XCJ0cnVlXCIgLz5cblxuICAgICAge3Nob3dTY3JvbGxUb0JvdHRvbSAmJiAoXG4gICAgICAgIDxTY3JvbGxUb0JvdHRvbUJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgb25DbGljaz17aGFuZGxlQ2xpY2tTY3JvbGxUb0JvdHRvbX0+XG4gICAgICAgICAgPFNDU2Nyb2xsSWNvblN3YXAgJHZpc2libGU9e2lzV3JpdGluZ30gYXJpYS1oaWRkZW4+XG4gICAgICAgICAgICA8U0NXcml0aW5nRG90cz5cbiAgICAgICAgICAgICAgPHNwYW4gLz5cbiAgICAgICAgICAgICAgPHNwYW4gLz5cbiAgICAgICAgICAgICAgPHNwYW4gLz5cbiAgICAgICAgICAgIDwvU0NXcml0aW5nRG90cz5cbiAgICAgICAgICA8L1NDU2Nyb2xsSWNvblN3YXA+XG4gICAgICAgICAgPFNDU2Nyb2xsSWNvblN3YXAgJHZpc2libGU9eyFpc1dyaXRpbmd9IGFyaWEtaGlkZGVuPlxuICAgICAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9ezEyfSBoZWlnaHQ9ezEyfSBmaWxsPVwibm9uZVwiPlxuICAgICAgICAgICAgICA8cGF0aFxuICAgICAgICAgICAgICAgIHN0cm9rZT1cIiMyMDIwMjBcIlxuICAgICAgICAgICAgICAgIHN0cm9rZUxpbmVjYXA9XCJyb3VuZFwiXG4gICAgICAgICAgICAgICAgc3Ryb2tlTGluZWpvaW49XCJyb3VuZFwiXG4gICAgICAgICAgICAgICAgc3Ryb2tlV2lkdGg9ezEuNX1cbiAgICAgICAgICAgICAgICBkPVwiTTYgLjc1djEwLjVNLjc1IDYgNiAxMS4yNSAxMS4yNSA2XCJcbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgIDwvU0NTY3JvbGxJY29uU3dhcD5cbiAgICAgICAgPC9TY3JvbGxUb0JvdHRvbUJ1dHRvbj5cbiAgICAgICl9XG4gICAgPC9TQ01lc3NhZ2VzT3V0ZXI+XG4gIClcbn1cblxuZXhwb3J0IGNvbnN0IENoYXRBSU1lc3NhZ2VzID0gUmVhY3QubWVtbyhDaGF0QUlNZXNzYWdlc0lubmVyKVxuIl0sIm1hcHBpbmdzIjoi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
1122
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSZWFjdCIsIm1lbW8iLCJ1c2VDYWxsYmFjayIsInVzZUVmZmVjdCIsInVzZUxheW91dEVmZmVjdCIsInVzZVJlZiIsInVzZVN0YXRlIiwiY3JlYXRlRWxlbWVudCIsIl9jcmVhdGVFbGVtZW50IiwiQXR0YWNobWVudENhcmQiLCJBcHByb3ZhbEJveCIsIkF0dGFjaG1lbnRQcmV2aWV3TW9kYWwiLCJBdHRhY2htZW50Q2FyZEF1ZGlvIiwiTWFpYVN0cmVhbWRvd24iLCJDaGF0SGlzdG9yeVJvbGUiLCJyZW5kZXJUZXh0V2l0aE1lbnRpb25zIiwiaGFzSW5saW5lTWFya2VycyIsImlzTWFpYWtlckFnZW50IiwidXNlVXNlciIsInVzZVQiLCJ1c2VDaGF0TWFuYWdlciIsInVzZVNtb290aFN0cmVhbVRleHQiLCJ1c2VTdHJlYW1pbmdNZXNzYWdlIiwiTG9hZGluZ1RleHQiLCJBZ2VudEFjdGl2aXR5SW5kaWNhdG9yIiwiUmVhc29uaW5nQmxvY2siLCJzaG91bGRTdHJlYW1OYXJyYXRpb25JblRpbWVsaW5lIiwiUmVhc29uaW5nVGltZWxpbmUiLCJTQ1RpbWVsaW5lSW5kaWNhdG9yIiwiaXNTdHJlYW1pbmdQbGFjZWhvbGRlck1lc3NhZ2VJZCIsInJlc29sdmVTdHJlYW1Mb2FkaW5nRGlzcGxheSIsInJlc29sdmVSZXRyeVR1cm5JZCIsImZpbmRVc2VyTWVzc2FnZUZvclJldHJ5IiwidXNlUmVhc29uaW5nVHJhY2UiLCJMb2FkZXIiLCJGYWRlIiwicGF0Y2hNYWlhUGFuZWxTZXNzaW9uIiwicmVhZE1haWFQYW5lbFNlc3Npb24iLCJNZXNzYWdlRnJvbVVzZXIiLCJNZXNzYWdlRnJvbU90aGVyIiwiTWVzc2FnZUNvbnRlbnRGcm9tVXNlciIsIk1lc3NhZ2VDb250ZW50RnJvbU90aGVyIiwiTWVzc2FnZUZlZWRiYWNrIiwiU0NDQUlNZXNzYWdlV3JhcHBlciIsIlNjcm9sbFRvQm90dG9tQnV0dG9uIiwiU0NTY3JvbGxJY29uU3dhcCIsIlNDV3JpdGluZ0RvdHMiLCJTQ01lc3NhZ2VzT3V0ZXIiLCJTQ01lc3NhZ2VzU2Nyb2xsIiwiU0NNZXNzYWdlc0lubmVyIiwiU0NUdXJuU3BhY2VyIiwiU0NPcHRpb25zTGlzdCIsIlNDT3B0aW9uSXRlbSIsIlNDTWVzc2FnZUl0ZW1XcmFwcGVyIiwiU0NNZXNzYWdlSXRlbUlubmVyIiwiU0NBdHRhY2htZW50c1JvdyIsIlNDQXBwcm92YWxBY3Rpb25zQ29sdW1uIiwiU0NMb2FkaW5nTWVzc2FnZXNDb2x1bW4iLCJTQ01lc3NhZ2VzR3JhZGllbnRUb3AiLCJTQ01lc3NhZ2VzR3JhZGllbnRCb3R0b20iLCJGZWVkYmFjayIsInVzZUdsb2JhbENvbnRleHQiLCJFbnRpdHlMaW5rQ3VzdG9tTGluayIsImdldEVudGl0eUxpbmtXcmFwcGVyQ2xhc3NOYW1lIiwiQ2hhdEFJU3VnZ2VzdGlvbnMiLCJDaGF0QUlDcmVhdGVBZ2VudEFjdGlvbnMiLCJFVkVOVFMiLCJ1c2VFdmVudCIsImRvd25sb2FkRmlsZUZyb21VcmwiLCJqc3giLCJfanN4IiwiRnJhZ21lbnQiLCJfRnJhZ21lbnQiLCJqc3hzIiwiX2pzeHMiLCJ0dXJuQW5jaG9yT2Zmc2V0Iiwidmlld3BvcnRIZWlnaHQiLCJNYXRoIiwibWluIiwiVFVSTl9TQ1JPTExfRFVSQVRJT05fTVMiLCJUVVJOX1NDUk9MTF9NQVhfRFVSQVRJT05fTVMiLCJUVVJOX1NDUk9MTF9MT05HX0RJU1RBTkNFX1BYIiwiTWVzc2FnZVdyYXBwZXIiLCJfcmVmIiwiaXNDdXJyZW50VXNlciIsImNoaWxkcmVuIiwicHJvcHMiLCJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCJfZXhjbHVkZWQiLCJNZXNzYWdlQ29tcG9uZW50IiwiX29iamVjdFNwcmVhZCIsIk1lc3NhZ2VDb250ZW50V3JhcHBlciIsIl9yZWYyIiwiX2V4Y2x1ZGVkMiIsIk1lc3NhZ2VDb250ZW50Q29tcG9uZW50IiwiTWVzc2FnZU9wdGlvbnMiLCJfcmVmMyIsIm9wdGlvbnMiLCJoYW5kbGVTZWxlY3RPcHRpb24iLCJfdXNlU3RhdGUiLCJfdXNlU3RhdGUyIiwiX3NsaWNlZFRvQXJyYXkiLCJzZWxlY3RlZE9wdGlvbiIsInNldFNlbGVjdGVkT3B0aW9uIiwiaGFuZGxlU2VsZWN0Iiwib3B0aW9uIiwibWFwIiwiJGhhc1NlbGVjdGlvbiIsIiRkaW1tZWQiLCJpZCIsIm9uQ2xpY2siLCJuYW1lIiwiU3RyZWFtaW5nTWVzc2FnZUJvZHkiLCJfcHJvcHMkY3JlYXRlQWdlbnRGb2wiLCJfcHJvcHMkc3VnZ2VzdGlvbnMiLCJzdHJlYW1pbmdUZXh0IiwiaXNTdHJlYW1pbmciLCJtZXNzYWdlSWQiLCJyYXdUZXh0IiwibWVzc2FnZSIsIndpbkZsYWdzIiwid2luZG93IiwiZGlzcGxheVRleHQiLCJlbmFibGVkIiwibWF4Q2hhcnNQZXJGcmFtZSIsInNuYXBUb1dvcmRCb3VuZGFyeSIsInN0cmVhbUxhZ01zIiwidGFyZ2V0TGFnTXMiLCJzdHJlYW1BZGFwdCIsImFkYXB0VG9CYWNrZW5kUmF0ZSIsInN0cmVhbUJ1ZmZlck1zIiwidGFyZ2V0QnVmZmVyTXMiLCJzdHJlYW1NaW5CdWZmZXIiLCJtaW5CdWZmZXJDaGFycyIsInN0cmVhbVdhcm11cE1zIiwid2FybXVwTXMiLCJjcmVhdGVBZ2VudEFjdGlvbnNBZ2VudElkIiwiY3JlYXRlQWdlbnRGb2xsb3dVcCIsImFnZW50SWQiLCJoYXNNZW50aW9ucyIsIm1lbnRpb25Ob2RlcyIsImlzRnJvbnRlbmRDYW5jZWxsZWQiLCJjbGFzc05hbWUiLCJzdHlsZSIsImRpc3BsYXkiLCJ2YXJpYW50IiwiY29tcG9uZW50cyIsImEiLCJpc0FuaW1hdGluZyIsImlzQXNzaXN0YW50IiwiaXNFcnJvciIsImFwcHJvdmFsIiwib25SZXRyeSIsImNvbnRlbnQiLCJzb3VyY2VzIiwidW5kZWZpbmVkIiwiaGFuZGxlRmVlZGJhY2siLCJoYW5kbGVGZWVkYmFja0NsaWNrIiwiZGlzYWJsZUZlZWRiYWNrIiwic3VnZ2VzdGlvbnMiLCJsZW5ndGgiLCJvblNlbGVjdFN1Z2dlc3Rpb24iLCJzdWdnZXN0aW9uIiwiaGFuZGxlU3VnZ2VzdGlvbkNsaWNrIiwiZGlzYWJsZWQiLCJzdWdnZXN0aW9uc0Rpc2FibGVkIiwiaGlkZGVuIiwiaXNMYXN0TWVzc2FnZSIsIk1lc3NhZ2VJdGVtIiwiX3Byb3BzJHJlYXNvbmluZyIsIl9wcm9wcyRwcm9qZWN0TWV0YWRhdCIsInVzZXIiLCJhdXRoVXNlciIsImlzQ2hhbmdlUHJvamVjdCIsImhhbmRsZUFwcHJvdmFsRGVjaXNpb24iLCJoYW5kbGVSZXRyeSIsInJvbGUiLCJhdHRhY2htZW50cyIsImFwcHJvdmFsU3RhdHVzIiwiaGFzU2VsZWN0ZWRTdWdnZXN0aW9uIiwic3RyZWFtQWN0aXZpdHkiLCJfdXNlU3RhdGUzIiwiX3VzZVN0YXRlNCIsInByZXZpZXdBdHRhY2htZW50Iiwic2V0UHJldmlld0F0dGFjaG1lbnQiLCJVU0VSIiwidG9TdHJpbmciLCJBU1NJU1RBTlQiLCJpc1N0cmVhbWluZ1BsYWNlaG9sZGVyIiwiaXNBY3RpdmVTdHJlYW1pbmciLCJoYXNTdHJlYW1UZXh0IiwiQm9vbGVhbiIsInJlYXNvbmluZ1RyYWNlIiwic3RyZWFtTmFycmF0aW9uSW5UaW1lbGluZSIsInN0ZXBzIiwic2hvd1N0cmVhbWluZ0JvZHkiLCJzaG93QWN0aXZpdHlJbmRpY2F0b3IiLCJtZXNzYWdlQXR0YWNobWVudHMiLCJBcnJheSIsImlzQXJyYXkiLCJoYW5kbGVBdHRhY2htZW50Q2xpY2siLCJhdHRhY2htZW50IiwiZmlsZSIsIkZpbGUiLCJvcmlnaW5hbEZpbGUiLCJ1cmxfdGh1bWJuYWlsIiwidXJsX29yaWdpbmFsIiwidXJsX2ZpbGUiLCJoYW5kbGVDbG9zZVByZXZpZXciLCJoYW5kbGVBdHRhY2htZW50RG93bmxvYWQiLCJfcmVmNCIsIl9hc3luY1RvR2VuZXJhdG9yIiwiX3JlZ2VuZXJhdG9yUnVudGltZSIsIm1hcmsiLCJfY2FsbGVlIiwiZXh0ZW5zaW9uIiwiZmlsZU5hbWUiLCJmaWxlVXJsIiwiYmxvYlVybCIsImRvd25sb2FkZWRGaWxlIiwibGluayIsIl90Iiwid3JhcCIsIl9jb250ZXh0IiwicHJldiIsIm5leHQiLCJpbmNsdWRlcyIsImNvbmNhdCIsInR5cGUiLCJzZW50IiwiVVJMIiwiY3JlYXRlT2JqZWN0VVJMIiwiYWJydXB0IiwiZG9jdW1lbnQiLCJocmVmIiwiZG93bmxvYWQiLCJib2R5IiwiYXBwZW5kQ2hpbGQiLCJjbGljayIsInNldFRpbWVvdXQiLCJyZW1vdmVDaGlsZCIsInJldm9rZU9iamVjdFVSTCIsImNvbnNvbGUiLCJlcnJvciIsInN0b3AiLCJfeCIsImFwcGx5IiwiYXJndW1lbnRzIiwiaGFzRmVlZGJhY2siLCIkaXNBc3Npc3RhbnQiLCJtZXNzYWdlRXh0cmFDb250ZW50IiwiZmVlZGJhY2siLCJzZXNzaW9uSWQiLCJzcGxpdCIsImZpbHRlciIsInF1ZXN0aW9uSWQiLCJqb2luIiwidHJhY2UiLCJyZWFzb25pbmciLCJpbmRleCIsIl9hdHRhY2htZW50JHR5cGUiLCJfYXR0YWNobWVudCRuYW1lIiwiYXR0YWNobWVudFR5cGUiLCJ0b0xvd2VyQ2FzZSIsImF0dGFjaG1lbnROYW1lIiwiaXNBdWRpb0ZpbGUiLCJzdGFydHNXaXRoIiwic29tZSIsImV4dCIsImVuZHNXaXRoIiwicG9zaXRpb25JbmRleCIsIm9uRG93bmxvYWQiLCJhY3Rpdml0eSIsImNvbXBhY3QiLCJwZW5kaW5nX2FjdGlvbnMiLCJhY3Rpb25zIiwic3RhdHVzIiwib25BcHByb3ZlIiwidGhyZWFkSWRzIiwibWV0YWRhdGEiLCJvblJlamVjdCIsImlzUHJvamVjdERlbGV0ZWQiLCJwcm9qZWN0TWV0YWRhdGEiLCJpc19kZWxldGVkIiwiaXNFeHBhbmRlZCIsImV4cGFuZGVkIiwiaGl0bEluc3RhbmNlSWQiLCJvcmlnaW5hbF90aHJlYWRfaWQiLCJ3YXJuaW5nTWVzc2FnZSIsIndhcm5pbmdfbWVzc2FnZSIsIm1hbnVhbEFwcHJvdmFsRGV0ZWN0ZWQiLCJtYW51YWxfYXBwcm92YWxfZGV0ZWN0ZWQiLCJpc09wZW4iLCJvbkNsb3NlIiwiQ2hhdEFJTWVzc2FnZXNJbm5lciIsIl9yZWY1IiwidXNlckluaXRpYWxNZXNzYWdlIiwiaW5pdGlhbENoYXRJZCIsIm9uRXJyb3IiLCJvblNlbmRNZXNzYWdlUmVhZHkiLCJvblNjcm9sbFRvQm90dG9tIiwiYWdlbnRzIiwiX3JlZjUkc2tpcEVudGVyQW5pbWF0Iiwic2tpcEVudGVyQW5pbWF0aW9uIiwiX3VzZVQiLCJ0IiwiX3VzZUdsb2JhbENvbnRleHQiLCJpc1dlYlNlYXJjaEFjdGl2ZSIsImlzRGVlcFNlYXJjaEFjdGl2ZSIsImFnZW50IiwiZXZlbnQiLCJtZXNzYWdlc1JlZiIsImNoYXRJbml0aWFsaXplZFJlZiIsImlzTG9hZGluZ01vcmVSZWYiLCJzY3JvbGxUaHJlc2hvbGRSZWYiLCJsYXN0U2Nyb2xsVG9wUmVmIiwic2hvd1Njcm9sbFRvQm90dG9tUmVmIiwic2hvd1RvcEdyYWRpZW50UmVmIiwic2hvd0JvdHRvbUdyYWRpZW50UmVmIiwic2Nyb2xsUmFmUmVmIiwiYW5jaG9yZWRUdXJuSWRSZWYiLCJzcGFjZXJFbFJlZiIsInNwYWNlckhlaWdodFJlZiIsInR1cm5TY3JvbGxSYWZSZWYiLCJ3YXNMb2FkaW5nTWVzc2FnZXNSZWYiLCJsYXN0U2Nyb2xsZWRTZXNzaW9uUmVmIiwicGVuZGluZ1Njcm9sbFJlc3RvcmVSZWYiLCJzY3JvbGxQZXJzaXN0VGltZXJSZWYiLCJfdXNlU3RhdGU1IiwiX3VzZVN0YXRlNiIsInNob3dTY3JvbGxUb0JvdHRvbSIsInNldFNob3dTY3JvbGxUb0JvdHRvbSIsIl91c2VTdGF0ZTciLCJfdXNlU3RhdGU4Iiwic2hvd1RvcEdyYWRpZW50Iiwic2V0U2hvd1RvcEdyYWRpZW50IiwiX3VzZVN0YXRlOSIsIl91c2VTdGF0ZTAiLCJzaG93Qm90dG9tR3JhZGllbnQiLCJzZXRTaG93Qm90dG9tR3JhZGllbnQiLCJfdXNlU3RhdGUxIiwiX3VzZVN0YXRlMTAiLCJzZWxlY3RlZFN1Z2dlc3Rpb25NZXNzYWdlSWRzIiwic2V0U2VsZWN0ZWRTdWdnZXN0aW9uTWVzc2FnZUlkcyIsIl91c2VDaGF0TWFuYWdlciIsImNoYXRJZCIsIm1lc3NhZ2VzIiwibG9hZGluZ01lc3NhZ2VzIiwiaXNMb2FkaW5nTW9yZU1lc3NhZ2VzIiwid2FpdGluZ1Jlc3BvbnNlIiwiaXNXcml0aW5nIiwibG9hZGluZ01lc3NhZ2UiLCJhY3RpdmVMb2FkaW5ncyIsInNlbmRNZXNzYWdlIiwicmV0cnlNZXNzYWdlIiwiY2hhbmdlUHJvamVjdCIsImluaXRpYWxpemVDaGF0IiwiaGFuZGxlU2Nyb2xsIiwic3RvcEdlbmVyYXRpb24iLCJ1cGRhdGVTY3JvbGxBZmZvcmRhbmNlcyIsImVsIiwiY3VycmVudCIsInNjcm9sbFRvcCIsInNjcm9sbEhlaWdodCIsImNsaWVudEhlaWdodCIsImRpc3RhbmNlRnJvbUJvdHRvbSIsInNob3VsZFNob3ciLCJuZXh0VG9wR3JhZGllbnQiLCJuZXh0Qm90dG9tR3JhZGllbnQiLCJzY3JvbGxUb0JvdHRvbVJhZiIsIm9wdHMiLCJfb3B0cyRkZWxheU1zIiwiZGVsYXlNcyIsInJ1biIsInJlcXVlc3RBbmltYXRpb25GcmFtZSIsImNhbmNlbFR1cm5TY3JvbGwiLCJjYW5jZWxBbmltYXRpb25GcmFtZSIsImFuaW1hdGVTY3JvbGxUbyIsInRvcCIsImZyb20iLCJkaXN0YW5jZSIsImFicyIsImR1cmF0aW9uIiwic3RhcnRlZEF0IiwicGVyZm9ybWFuY2UiLCJub3ciLCJzdGVwIiwicHJvZ3Jlc3MiLCJlYXNlZCIsInBvdyIsInNldFNwYWNlckhlaWdodCIsImhlaWdodCIsImNsZWFyVHVyblNwYWNlIiwiZHJhaW5UdXJuU3BhY2UiLCJyZW1vdmFibGUiLCJtYXgiLCJyZWxlYXNlVHVyblNwYWNlIiwiaGFuZGxlVXNlclNjcm9sbEludGVudCIsIm1lYXN1cmVUdXJuIiwic3BhY2VyRWwiLCJxdWVzdGlvbkVsIiwicXVlcnlTZWxlY3RvciIsImNvbnRhaW5lclRvcCIsImdldEJvdW5kaW5nQ2xpZW50UmVjdCIsInF1ZXN0aW9uVG9wIiwiY29udGVudEJvdHRvbSIsInR1cm5IZWlnaHQiLCJyZXNlcnZlVHVyblNwYWNlIiwibWVhc3VyZWQiLCJvZmZzZXQiLCJ0YXJnZXRTY3JvbGxUb3AiLCJzeW5jVHVyblNwYWNlIiwicmVzZXJ2ZWQiLCJoYW5kbGVDbGlja1Njcm9sbFRvQm90dG9tIiwiaGFuZGxlU2Nyb2xsVG9Cb3R0b20iLCJlIiwiY29udGFpbmVyIiwiY3VycmVudFRhcmdldCIsImlzU2Nyb2xsaW5nVXAiLCJpc05lYXJCb3R0b20iLCJjbGVhclRpbWVvdXQiLCJzY3JvbGxTZXNzaW9uSWQiLCJzZW5kTWVzc2FnZVJlZiIsInN0b3BHZW5lcmF0aW9uUmVmIiwib25TZW5kTWVzc2FnZVJlYWR5UmVmIiwic2VuZE1lc3NhZ2VQcm94eVJlZiIsImZhcUlkIiwiYWdlbnRTdWdnZXN0aW9uSWQiLCJtZW50aW9ucyIsImZ1YUlkIiwic2NJZCIsInN0b3BHZW5lcmF0aW9uUHJveHlSZWYiLCJtZXNzYWdlc0RhdGFSZWYiLCJzZWxlY3RlZFN1Z2dlc3Rpb25NZXNzYWdlSWRzUmVmIiwidHJpbSIsImN1cnJlbnRNZXNzYWdlcyIsImlzTWFya2V0cGxhY2VHbG9iYWxBZ2VudCIsImFpQ2hhdFN1Z2dlc3RlZEFuc3dlciIsImFnZW50X3R5cGUiLCJfZGVmaW5lUHJvcGVydHkiLCJ0YXJnZXRNZXNzYWdlIiwiZmluZCIsIm1zZyIsImlzUmV0cnlTdWdnZXN0aW9uIiwibGFzdFVzZXJNZXNzYWdlIiwiYXQiLCJyZXRyeUF0dGFjaG1lbnRzIiwicmFmSWQiLCJ0aWNrIiwibGFzdFJlc2VydmVkUXVlc3Rpb25SZWYiLCJfbWVzc2FnZXMkaW5kZXgiLCJsYXN0TWVzc2FnZUlkUmVmIiwibGFzdE1lc3NhZ2VzTGVuZ3RoUmVmIiwiX21lc3NhZ2VzJGlkIiwiX21lc3NhZ2VzIiwiX2xhc3RNZXNzYWdlJGlkIiwibGFzdE1lc3NhZ2UiLCJsYXN0SWQiLCJwcmV2SWQiLCJwcmV2TGVuIiwiaXNOZXdNZXNzYWdlIiwiaXNBdEJvdHRvbSIsImhhc0luaXRpYWxNZXNzYWdlIiwiaXNBcHByb3ZhbCIsImlzQW5zd2VyT3JRdWVzdGlvbiIsIl9tZXNzYWdlcyRpZDIiLCJfbWVzc2FnZXMyIiwianVzdEZpbmlzaGVkTG9hZGluZyIsImF0dGFjaG1lbnRzQ291bnQiLCJzdHJlYW1Mb2FkaW5nRGlzcGxheSIsImhhc0F0dGFjaG1lbnRzIiwiaXNTY3JvbGxPblBhcmVudCIsInNlc3Npb24iLCJleHBhbmRlZFJlZiIsInNhdmVkU2Nyb2xsVG9wIiwiZmlsbCIsImhhc01lc3NhZ2VMZXZlbEluZGljYXRvciIsIm1lc3NhZ2VzQ29udGVudCIsInRleHQiLCJfbWVzc2FnZSRhdHRhY2htZW50cyIsIl9tZXNzYWdlJHNvdXJjZXMiLCJfbWVzc2FnZSRwcm9qZWN0IiwiX21lc3NhZ2UkaWQiLCJpc0Fzc2lzdGFudE1lc3NhZ2UiLCJwcm9qZWN0IiwibWVzc2FnZUZlZWRiYWNrIiwid2FzSGVscGZ1bCIsIlRIVU1CU19VUCIsIlRIVU1CU19ET1dOIiwibWVzc2FnZUtleSIsInR1cm5JZCIsInVzZXJNZXNzYWdlRm9yUmV0cnkiLCJjYW5SZXRyeSIsImlzX2NhbmNlbGxlZCIsImtleSIsInJlZiIsIiRzY3JvbGxPblBhcmVudCIsIm9uV2hlZWwiLCJvblRvdWNoU3RhcnQiLCIkc2hvdyIsIm9uU2Nyb2xsIiwiJHNraXBFbnRlciIsIiR2aXNpYmxlIiwieG1sbnMiLCJ3aWR0aCIsInN0cm9rZSIsInN0cm9rZUxpbmVjYXAiLCJzdHJva2VMaW5lam9pbiIsInN0cm9rZVdpZHRoIiwiZCIsIkNoYXRBSU1lc3NhZ2VzIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvbW9sZWN1bGVzL0NoYXRBSU1lc3NhZ2VzL0NoYXRBSU1lc3NhZ2VzLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBpbXBvcnQvbm8tZXh0cmFuZW91cy1kZXBlbmRlbmNpZXMgKi9cbi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9pbmRlbnQgKi9cbi8qIGVzbGludC1kaXNhYmxlIHJlYWN0L25vLXVuc3RhYmxlLW5lc3RlZC1jb21wb25lbnRzICovXG4vKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tc2hhZG93ICovXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1uZXN0ZWQtdGVybmFyeSAqL1xuLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSAqL1xuLyogZXNsaW50LWRpc2FibGUgbm8tdW5kZWYgKi9cbi8qIGVzbGludC1kaXNhYmxlIHJlYWN0L2Z1bmN0aW9uLWNvbXBvbmVudC1kZWZpbml0aW9uICovXG4vKiBlc2xpbnQtZGlzYWJsZSByZWFjdC9yZXF1aXJlLWRlZmF1bHQtcHJvcHMgKi9cbi8qIGVzbGludC1kaXNhYmxlIGpzeC1hMTF5L2NsaWNrLWV2ZW50cy1oYXZlLWtleS1ldmVudHMgKi9cbi8qIGVzbGludC1kaXNhYmxlIGpzeC1hMTF5L25vLXN0YXRpYy1lbGVtZW50LWludGVyYWN0aW9ucyAqL1xuaW1wb3J0IFJlYWN0LCB7IEZDLCBtZW1vLCBSZWFjdE5vZGUsIHVzZUNhbGxiYWNrLCB1c2VFZmZlY3QsIHVzZUxheW91dEVmZmVjdCwgdXNlUmVmLCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0J1xuXG5pbXBvcnQgeyBBdHRhY2htZW50Q2FyZCB9IGZyb20gJy4uLy4uL2F0b21zL0F0dGFjaG1lbnRDYXJkL0F0dGFjaG1lbnRDYXJkJ1xuaW1wb3J0IHsgQXBwcm92YWxCb3ggfSBmcm9tICcuLi8uLi9hdG9tcy9BcHByb3ZhbEJveC9BcHByb3ZhbEJveCdcbmltcG9ydCB7IEF0dGFjaG1lbnRQcmV2aWV3TW9kYWwgfSBmcm9tICcuLi8uLi9hdG9tcy9BdHRhY2htZW50UHJldmlld01vZGFsJ1xuaW1wb3J0IHsgQXR0YWNobWVudENhcmRBdWRpbyB9IGZyb20gJy4uLy4uL2F0b21zL0F0dGFjaG1lbnRDYXJkL0F0dGFjaG1lbnRDYXJkQXVkaW8nXG5pbXBvcnQgeyBNYWlhU3RyZWFtZG93biB9IGZyb20gJy4uLy4uL2F0b21zL01haWFTdHJlYW1kb3duJ1xuaW1wb3J0IHR5cGUgeyBNYWlhU3RyZWFtZG93blByb3BzIH0gZnJvbSAnLi4vLi4vYXRvbXMvTWFpYVN0cmVhbWRvd24nXG5pbXBvcnQgeyBNQUlBTWVzc2FnZVByb3BzIH0gZnJvbSAnLi4vLi4vYXRvbXMvTUFJQU1lc3NhZ2UvTUFJQU1lc3NhZ2UuaW50ZXJmYWNlcydcbmltcG9ydCB7IENoYXRNZXNzYWdlLCBDaGF0SGlzdG9yeVJvbGUgfSBmcm9tICcuLi8uLi8uLi90eXBlcy9DaGF0J1xuaW1wb3J0IHsgcmVuZGVyVGV4dFdpdGhNZW50aW9ucywgaGFzSW5saW5lTWFya2VycyB9IGZyb20gJy4uLy4uLy4uL3V0aWxzL3JlbmRlckNvbnRleHRNZW50aW9ucydcblxuaW1wb3J0IHsgaXNNYWlha2VyQWdlbnQgfSBmcm9tICcuLi8uLi8uLi91dGlscy9hZ2VudERpc3BsYXlOYW1lJ1xuaW1wb3J0IHsgQ09SVXNlciwgdXNlVXNlciB9IGZyb20gJy4uLy4uLy4uL2NvbnRleHQvY29yLXVzZXInXG5cbmltcG9ydCB7IHVzZVQgfSBmcm9tICcuLi8uLi8uLi9ob29rcy91c2VUJ1xuaW1wb3J0IHsgdXNlQ2hhdE1hbmFnZXIgfSBmcm9tICcuLi8uLi8uLi9ob29rcy91c2VDaGF0TWFuYWdlci91c2VDaGF0TWFuYWdlcidcbmltcG9ydCB7IHVzZVNtb290aFN0cmVhbVRleHQgfSBmcm9tICcuLi8uLi8uLi9ob29rcy91c2VTbW9vdGhTdHJlYW1UZXh0J1xuaW1wb3J0IHsgdXNlU3RyZWFtaW5nTWVzc2FnZSB9IGZyb20gJy4uLy4uLy4uL2hvb2tzL3VzZVN0cmVhbWluZ01lc3NhZ2UnXG5cbmltcG9ydCB7IExvYWRpbmdUZXh0IH0gZnJvbSAnLi4vLi4vYXRvbXMvTG9hZGluZ1RleHQnXG5pbXBvcnQgeyBBZ2VudEFjdGl2aXR5SW5kaWNhdG9yIH0gZnJvbSAnLi4vLi4vYXRvbXMvQWdlbnRBY3Rpdml0eUluZGljYXRvcidcbmltcG9ydCB7IFJlYXNvbmluZ0Jsb2NrIH0gZnJvbSAnLi4vLi4vYXRvbXMvUmVhc29uaW5nQmxvY2svUmVhc29uaW5nQmxvY2snXG5pbXBvcnQgeyBzaG91bGRTdHJlYW1OYXJyYXRpb25JblRpbWVsaW5lIH0gZnJvbSAnLi4vLi4vYXRvbXMvUmVhc29uaW5nQmxvY2svcmVhc29uaW5nTGl2ZU5hcnJhdGlvbidcbmltcG9ydCB7IFJlYXNvbmluZ1RpbWVsaW5lIH0gZnJvbSAnLi4vLi4vYXRvbXMvUmVhc29uaW5nQmxvY2svUmVhc29uaW5nVGltZWxpbmUnXG5pbXBvcnQgeyBTQ1RpbWVsaW5lSW5kaWNhdG9yIH0gZnJvbSAnLi4vLi4vYXRvbXMvUmVhc29uaW5nQmxvY2svUmVhc29uaW5nQmxvY2suc3R5bGVzJ1xuaW1wb3J0IHR5cGUgeyBTdHJlYW1BY3Rpdml0eSB9IGZyb20gJy4uLy4uLy4uL3R5cGVzL3N0cmVhbUFjdGl2aXR5J1xuaW1wb3J0IHsgaXNTdHJlYW1pbmdQbGFjZWhvbGRlck1lc3NhZ2VJZCwgcmVzb2x2ZVN0cmVhbUxvYWRpbmdEaXNwbGF5IH0gZnJvbSAnLi4vLi4vLi4vdXRpbHMvc3RyZWFtQWN0aXZpdHlNZXNzYWdlcydcbmltcG9ydCB7IHJlc29sdmVSZXRyeVR1cm5JZCwgZmluZFVzZXJNZXNzYWdlRm9yUmV0cnkgfSBmcm9tICcuLi8uLi8uLi91dGlscy9yZXRyeUNvbXBsZXRpb24nXG5pbXBvcnQgeyB1c2VSZWFzb25pbmdUcmFjZSB9IGZyb20gJy4uLy4uLy4uL2hvb2tzL3VzZVJlYXNvbmluZ1RyYWNlJ1xuaW1wb3J0IHsgTG9hZGVyIH0gZnJvbSAnLi4vLi4vYXRvbXMvTG9hZGVyJ1xuaW1wb3J0IHsgRmFkZSB9IGZyb20gJy4uLy4uL2F0b21zL0ZhZGUnXG5pbXBvcnQgeyBwYXRjaE1haWFQYW5lbFNlc3Npb24sIHJlYWRNYWlhUGFuZWxTZXNzaW9uIH0gZnJvbSAnLi4vLi4vLi4vc3RvcmUvbWFpYVBhbmVsU2Vzc2lvblBlcnNpc3RlbmNlJ1xuXG5pbXBvcnQgeyBQcm9qZWN0IH0gZnJvbSAnLi4vLi4vLi4vdHlwZXMvUHJvamVjdCdcblxuaW1wb3J0IHsgTWVzc2FnZUZyb21Vc2VyLCBNZXNzYWdlRnJvbU90aGVyLCBNZXNzYWdlQ29udGVudEZyb21Vc2VyLCBNZXNzYWdlQ29udGVudEZyb21PdGhlciB9IGZyb20gJy4vc3R5bGVzJ1xuaW1wb3J0IHsgTWVzc2FnZUZlZWRiYWNrIH0gZnJvbSAnLi4vTWVzc2FnZUZlZWRiYWNrJ1xuaW1wb3J0IHtcbiAgU0NDQUlNZXNzYWdlV3JhcHBlcixcbiAgU2Nyb2xsVG9Cb3R0b21CdXR0b24sXG4gIFNDU2Nyb2xsSWNvblN3YXAsXG4gIFNDV3JpdGluZ0RvdHMsXG4gIFNDTWVzc2FnZXNPdXRlcixcbiAgU0NNZXNzYWdlc1Njcm9sbCxcbiAgU0NNZXNzYWdlc0lubmVyLFxuICBTQ1R1cm5TcGFjZXIsXG4gIFNDT3B0aW9uc0xpc3QsXG4gIFNDT3B0aW9uSXRlbSxcbiAgU0NNZXNzYWdlSXRlbVdyYXBwZXIsXG4gIFNDTWVzc2FnZUl0ZW1Jbm5lcixcbiAgU0NBdHRhY2htZW50c1JvdyxcbiAgU0NBcHByb3ZhbEFjdGlvbnNDb2x1bW4sXG4gIFNDTG9hZGluZ01lc3NhZ2VzQ29sdW1uLFxuICBTQ01lc3NhZ2VzR3JhZGllbnRUb3AsXG4gIFNDTWVzc2FnZXNHcmFkaWVudEJvdHRvbSxcbn0gZnJvbSAnLi9uZXdTdHlsZXMnXG5pbXBvcnQgeyBGZWVkYmFjayB9IGZyb20gJy4uL01lc3NhZ2VGZWVkYmFjay9NZXNzYWdlRmVlZGJhY2snXG5pbXBvcnQgeyB1c2VHbG9iYWxDb250ZXh0IH0gZnJvbSAnLi4vLi4vLi4vY29udGV4dC9nbG9iYWwtY29udGV4dCdcbmltcG9ydCB7IEFnZW50IH0gZnJvbSAnLi4vLi4vLi4vdHlwZXMvYWdlbnQnXG5pbXBvcnQgeyBBdHRhY2htZW50RmlsZSB9IGZyb20gJy4uL0NoYXRGb290ZXIvQ2hhdEZvb3RlcidcbmltcG9ydCB7IENvbnRleHRNZW50aW9uIH0gZnJvbSAnLi4vLi4vLi4vdHlwZXMvY29udGV4dE1lbnRpb24nXG5pbXBvcnQgeyBFbnRpdHlMaW5rQ3VzdG9tTGluaywgZ2V0RW50aXR5TGlua1dyYXBwZXJDbGFzc05hbWUgfSBmcm9tICcuLi8uLi8uLi91dGlscy9lbnRpdHlMaW5rUmVuZGVyJ1xuaW1wb3J0IHsgQ2hhdEFJU3VnZ2VzdGlvbnMgfSBmcm9tICcuL0NoYXRBSVN1Z2dlc3Rpb25zJ1xuaW1wb3J0IHsgQ2hhdEFJQ3JlYXRlQWdlbnRBY3Rpb25zIH0gZnJvbSAnLi9DaGF0QUlDcmVhdGVBZ2VudEFjdGlvbnMnXG5pbXBvcnQgeyBFVkVOVFMsIHVzZUV2ZW50IH0gZnJvbSAnLi4vLi4vLi4vaG9va3MvdXNlRXZlbnQnXG5pbXBvcnQgeyBkb3dubG9hZEZpbGVGcm9tVXJsIH0gZnJvbSAnLi4vLi4vLi4vdXRpbHMvZmlsZURvd25sb2FkSGVscGVyJ1xuXG50eXBlIENoYXRBSU1lc3NhZ2VzUHJvcHMgPSB7XG4gIHVzZXJJbml0aWFsTWVzc2FnZToge1xuICAgIG1lc3NhZ2U6IHN0cmluZ1xuICAgIGF0dGFjaG1lbnRzOiBBdHRhY2htZW50RmlsZVtdXG4gICAgZmFxSWQ/OiBzdHJpbmdcbiAgICBhZ2VudFN1Z2dlc3Rpb25JZD86IHN0cmluZ1xuICAgIG1lbnRpb25zPzogQ29udGV4dE1lbnRpb25bXVxuICAgIGZ1YUlkPzogc3RyaW5nXG4gICAgc2NJZD86IHN0cmluZ1xuICAgIGNvbnRleHREYXRhPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj5cbiAgfVxuICBpbml0aWFsQ2hhdElkOiBzdHJpbmcgfCBudWxsXG4gIG9uRXJyb3I6ICgpID0+IHZvaWRcbiAgb25TZW5kTWVzc2FnZVJlYWR5PzogKFxuICAgIHNlbmRNZXNzYWdlOiAoXG4gICAgICBtZXNzYWdlOiBzdHJpbmcsXG4gICAgICBhdHRhY2htZW50cz86IEF0dGFjaG1lbnRGaWxlW10sXG4gICAgICBmYXFJZD86IHN0cmluZyxcbiAgICAgIGFnZW50U3VnZ2VzdGlvbklkPzogc3RyaW5nLFxuICAgICAgbWVudGlvbnM/OiBDb250ZXh0TWVudGlvbltdLFxuICAgICAgZnVhSWQ/OiBzdHJpbmcsXG4gICAgICBzY0lkPzogc3RyaW5nLFxuICAgICAgY29udGV4dERhdGE/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxuICAgICkgPT4gdm9pZCxcbiAgICBzdG9wR2VuZXJhdGlvbjogKCkgPT4gdm9pZCxcbiAgICBpc1N0cmVhbWluZzogYm9vbGVhbixcbiAgICBpc1dyaXRpbmc6IGJvb2xlYW5cbiAgKSA9PiB2b2lkXG4gIGlzRGlzYWJsZWQ/OiBib29sZWFuXG4gIG9uU2Nyb2xsVG9Cb3R0b20/OiAoKSA9PiB2b2lkXG4gIGF0dGFjaG1lbnRzPzogQXR0YWNobWVudEZpbGVbXVxuICBhZ2VudHM/OiBBZ2VudFtdXG4gIGV4cGFuZGVkPzogYm9vbGVhblxuICBza2lwRW50ZXJBbmltYXRpb24/OiBib29sZWFuXG59XG5cbi8qKlxuICogQWwgYW5jbGFyIGVsIHR1cm5vLCBsYSBwcmVndW50YSBubyBzZSBwZWdhIGFsIGJvcmRlIHN1cGVyaW9yOiBkZWphbW9zIGFzb21hclxuICogbGEgY29sYSBkZWwgbWVuc2FqZSBhbnRlcmlvciBwYXJhIG5vIHBlcmRlciBlbCBoaWxvIGRlIGxhIGNvbnZlcnNhY2nDs24uXG4gKiBSZWxhdGl2byBhbCB2aWV3cG9ydCBwb3JxdWUgdW4gdmFsb3IgZmlqbyBzZSBjb21lIGRlbWFzaWFkbyBlbiBwYW50YWxsYXMgY29ydGFzLlxuICovXG5jb25zdCB0dXJuQW5jaG9yT2Zmc2V0ID0gKHZpZXdwb3J0SGVpZ2h0OiBudW1iZXIpOiBudW1iZXIgPT4gTWF0aC5taW4odmlld3BvcnRIZWlnaHQgKiAwLjE4LCAyMDApXG5cbi8qKlxuICogRHVyYWNpw7NuIGRlbCBzY3JvbGwgYW5pbWFkbzogYmFzZSB5IHRvcGUgcGFyYSByZWNvcnJpZG9zIGxhcmdvcywgcGFyYSBxdWUgdW5cbiAqIHNhbHRvIGRlIHZhcmlhcyBwYW50YWxsYXMgbm8gc2Ugc2llbnRhIHVuIGxhdGlnYXpvLlxuICovXG5jb25zdCBUVVJOX1NDUk9MTF9EVVJBVElPTl9NUyA9IDYwMFxuY29uc3QgVFVSTl9TQ1JPTExfTUFYX0RVUkFUSU9OX01TID0gODAwXG5cbi8qKiBEaXN0YW5jaWEgYSBwYXJ0aXIgZGUgbGEgY3VhbCBsYSBkdXJhY2nDs24geWEgZXN0w6EgZW4gc3UgdG9wZS4gKi9cbmNvbnN0IFRVUk5fU0NST0xMX0xPTkdfRElTVEFOQ0VfUFggPSAxMjAwXG5cbnR5cGUgTWVzc2FnZUl0ZW1Qcm9wcyA9IENoYXRNZXNzYWdlICYge1xuICBhdXRoVXNlcjogQ09SVXNlclxuICBoYW5kbGVTZWxlY3RPcHRpb246IChvcHRpb246IFByb2plY3QpID0+IHZvaWRcbiAgaGFuZGxlU3VnZ2VzdGlvbkNsaWNrOiAobWVzc2FnZUlkOiBzdHJpbmcsIHN1Z2dlc3Rpb246IHN0cmluZykgPT4gdm9pZFxuICBoYXNTZWxlY3RlZFN1Z2dlc3Rpb24/OiBib29sZWFuXG4gIGhhbmRsZUZlZWRiYWNrOiAoZmVlZGJhY2s6IEZlZWRiYWNrLCBjaGF0TWVzc2FnZUlkOiBzdHJpbmcpID0+IHZvaWRcbiAgaGFuZGxlQXBwcm92YWxEZWNpc2lvbjogKFxuICAgIHRocmVhZElkczogc3RyaW5nW10sXG4gICAgZGVjaXNpb246ICdhcHByb3ZlJyB8ICdyZWplY3QnLFxuICAgIGVkaXRlZEFjdGlvbnM/OiBBcnJheTx7IHRvb2xfbmFtZTogc3RyaW5nOyBhcmdzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB9PixcbiAgICBtZXRhZGF0YT86IHsgdG9vbF9ncm91cF9zbHVnczogc3RyaW5nW10gfVxuICApID0+IHZvaWRcbiAgaGFuZGxlUmV0cnk/OiAoKSA9PiB2b2lkXG4gIGRpc2FibGVGZWVkYmFjaz86IEZlZWRiYWNrIHwgbnVsbFxuICBzb3VyY2VzPzogYW55XG4gIGF0dGFjaG1lbnRzPzogQXR0YWNobWVudEZpbGVbXVxuICBpc1N0cmVhbWluZz86IGJvb2xlYW5cbiAgaXNMYXN0TWVzc2FnZT86IGJvb2xlYW5cbiAgZXhwYW5kZWQ/OiBib29sZWFuXG4gIHN0cmVhbUFjdGl2aXR5PzogU3RyZWFtQWN0aXZpdHkgfCBudWxsXG59XG5cbmludGVyZmFjZSBNZXNzYWdlV3JhcHBlclByb3BzIHtcbiAgaXNDdXJyZW50VXNlcjogYm9vbGVhblxuICBjaGlsZHJlbjogUmVhY3ROb2RlXG4gICdkYXRhLW1lc3NhZ2UtaWQnPzogc3RyaW5nXG4gIGhhc0ZlZWRiYWNrPzogYm9vbGVhblxufVxuXG50eXBlIE1lc3NhZ2VDb250ZW50V3JhcHBlclByb3BzID0gTUFJQU1lc3NhZ2VQcm9wcyAmIHtcbiAgaXNDdXJyZW50VXNlcjogYm9vbGVhblxuICBpc0Vycm9yPzogYm9vbGVhblxuICBpc0NoYW5nZVByb2plY3Q/OiBib29sZWFuXG59XG5cbmNvbnN0IE1lc3NhZ2VXcmFwcGVyOiBGQzxNZXNzYWdlV3JhcHBlclByb3BzPiA9ICh7IGlzQ3VycmVudFVzZXIsIGNoaWxkcmVuLCAuLi5wcm9wcyB9KSA9PiB7XG4gIGNvbnN0IE1lc3NhZ2VDb21wb25lbnQgPSBpc0N1cnJlbnRVc2VyID8gTWVzc2FnZUZyb21Vc2VyIDogTWVzc2FnZUZyb21PdGhlclxuICByZXR1cm4gPE1lc3NhZ2VDb21wb25lbnQgey4uLnByb3BzfT57Y2hpbGRyZW59PC9NZXNzYWdlQ29tcG9uZW50PlxufVxuXG5jb25zdCBNZXNzYWdlQ29udGVudFdyYXBwZXI6IEZDPE1lc3NhZ2VDb250ZW50V3JhcHBlclByb3BzPiA9ICh7IGlzQ3VycmVudFVzZXIsIC4uLnByb3BzIH0pID0+IHtcbiAgY29uc3QgTWVzc2FnZUNvbnRlbnRDb21wb25lbnQgPSBpc0N1cnJlbnRVc2VyID8gTWVzc2FnZUNvbnRlbnRGcm9tVXNlciA6IE1lc3NhZ2VDb250ZW50RnJvbU90aGVyXG4gIHJldHVybiA8TWVzc2FnZUNvbnRlbnRDb21wb25lbnQgey4uLnByb3BzfSAvPlxufVxuXG5mdW5jdGlvbiBNZXNzYWdlT3B0aW9ucyh7XG4gIG9wdGlvbnMsXG4gIGhhbmRsZVNlbGVjdE9wdGlvbixcbn06IHtcbiAgb3B0aW9uczogUHJvamVjdFtdIHwgbnVsbFxuICBoYW5kbGVTZWxlY3RPcHRpb246IChvcHRpb246IFByb2plY3QpID0+IHZvaWRcbn0pIHtcbiAgY29uc3QgW3NlbGVjdGVkT3B0aW9uLCBzZXRTZWxlY3RlZE9wdGlvbl0gPSB1c2VTdGF0ZTxQcm9qZWN0IHwgbnVsbD4obnVsbClcblxuICBjb25zdCBoYW5kbGVTZWxlY3QgPSAob3B0aW9uOiBQcm9qZWN0KSA9PiB7XG4gICAgaWYgKHNlbGVjdGVkT3B0aW9uKSByZXR1cm5cbiAgICBzZXRTZWxlY3RlZE9wdGlvbihvcHRpb24pXG4gICAgaGFuZGxlU2VsZWN0T3B0aW9uKG9wdGlvbilcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPFNDT3B0aW9uc0xpc3Q+XG4gICAgICB7KG9wdGlvbnMgfHwgW10pLm1hcChvcHRpb24gPT4gKFxuICAgICAgICA8U0NPcHRpb25JdGVtXG4gICAgICAgICAgJGhhc1NlbGVjdGlvbj17ISFzZWxlY3RlZE9wdGlvbn1cbiAgICAgICAgICAkZGltbWVkPXshIXNlbGVjdGVkT3B0aW9uICYmIHNlbGVjdGVkT3B0aW9uPy5pZCAhPT0gb3B0aW9uLmlkfVxuICAgICAgICAgIG9uQ2xpY2s9eygpID0+IGhhbmRsZVNlbGVjdChvcHRpb24pfVxuICAgICAgICAgIGtleT17b3B0aW9uLmlkfVxuICAgICAgICA+XG4gICAgICAgICAge29wdGlvbi5uYW1lfVxuICAgICAgICA8L1NDT3B0aW9uSXRlbT5cbiAgICAgICkpfVxuICAgIDwvU0NPcHRpb25zTGlzdD5cbiAgKVxufVxuXG4vKiogU29sbyBlc3RlIGNvbXBvbmVudGUgcmUtcmVuZGVyaXphIGN1YW5kbyBjYW1iaWEgZWwgdGV4dG8gZW4gc3RyZWFtaW5nIChsZWUgZGVsIGNvbnRleHQpLiAqL1xuY29uc3QgU3RyZWFtaW5nTWVzc2FnZUJvZHkgPSBtZW1vKFxuICAocHJvcHM6IHtcbiAgICBtZXNzYWdlOiBzdHJpbmdcbiAgICBpc1N0cmVhbWluZzogYm9vbGVhblxuICAgIGlzQ3VycmVudFVzZXI6IGJvb2xlYW5cbiAgICBpc0Fzc2lzdGFudDogYm9vbGVhblxuICAgIGlzRnJvbnRlbmRDYW5jZWxsZWQ/OiBib29sZWFuXG4gICAgYXBwcm92YWw/OiBNZXNzYWdlSXRlbVByb3BzWydhcHByb3ZhbCddXG4gICAgaXNFcnJvcj86IGJvb2xlYW5cbiAgICBzb3VyY2VzPzogTWVzc2FnZUl0ZW1Qcm9wc1snc291cmNlcyddXG4gICAgc3VnZ2VzdGlvbnM/OiBzdHJpbmdbXSB8IG51bGxcbiAgICBjcmVhdGVBZ2VudEZvbGxvd1VwPzogeyBhZ2VudElkOiBzdHJpbmcgfSB8IG51bGxcbiAgICBoYW5kbGVGZWVkYmFja0NsaWNrOiAoZjogRmVlZGJhY2spID0+IHZvaWRcbiAgICBkaXNhYmxlRmVlZGJhY2s6IEZlZWRiYWNrIHwgbnVsbFxuICAgIG9uUmV0cnk/OiAoKSA9PiB2b2lkXG4gICAgaGFuZGxlU3VnZ2VzdGlvbkNsaWNrOiAobWVzc2FnZUlkOiBzdHJpbmcsIHN1Z2dlc3Rpb246IHN0cmluZykgPT4gdm9pZFxuICAgIHN1Z2dlc3Rpb25zRGlzYWJsZWQ/OiBib29sZWFuXG4gICAgbWVzc2FnZUlkOiBzdHJpbmdcbiAgICBpc0xhc3RNZXNzYWdlPzogYm9vbGVhblxuICB9KSA9PiB7XG4gICAgLy8gVGV4dG8gZGVsIHN0cmVhbTogc29sbyBzZSBsZWUgZGVsIHN0b3JlIGN1YW5kbyBlc3RlIG1lbnNhamUgZXMgZWxcbiAgICAvLyBxdWUgZXN0w6EgZW4gc3RyZWFtaW5nLiB1c2VTeW5jRXh0ZXJuYWxTdG9yZSBhw61zbGEgZWwgcmUtcmVuZGVyIGFcbiAgICAvLyBlc3RlIGNvbXBvbmVudGUsIHNpbiB0b2NhciBlbCByZXN0byBkZWwgw6FyYm9sLlxuICAgIGNvbnN0IHN0cmVhbWluZ1RleHQgPSB1c2VTdHJlYW1pbmdNZXNzYWdlKHByb3BzLmlzU3RyZWFtaW5nID8gcHJvcHMubWVzc2FnZUlkIDogbnVsbClcbiAgICBjb25zdCByYXdUZXh0ID0gcHJvcHMuaXNTdHJlYW1pbmcgPyBzdHJlYW1pbmdUZXh0IDogcHJvcHMubWVzc2FnZVxuICAgIC8vIFNtb290aCBzdHJlYW1pbmc6IGRlc2Fjb3BsYSBsYSBjYWRlbmNpYSBkZWwgYmFja2VuZCBkZWwgcmVuZGVyLlxuICAgIC8vIER1cmFudGUgZWwgc3RyZWFtaW5nIGxpYmVyYSBjaGFycyBhIHJpdG1vIGNvbnN0YW50ZSB2w61hIHJBRjsgY3VhbmRvXG4gICAgLy8gdGVybWluYSwgbXVlc3RyYSBlbCB0ZXh0byBmaW5hbCBhbCBpbnN0YW50ZSAoc2luIGFuaW1hY2nDs24gcmVzaWR1YWwpLlxuICAgIC8vIExvcyBkZWZhdWx0cyBkZWwgaG9vayBzZSBhanVzdGFyb24gZW1ww61yaWNhbWVudGUgZW4gc3RhZ2luZzsgYXVuIGFzw61cbiAgICAvLyBzZSBleHBvbmVuIGZsYWdzIGRlIHJ1bnRpbWUgKHdpbmRvdy4qKSBwYXJhIHBvZGVyIHR1bmVhciBzaW4gcmVjb21waWxhclxuICAgIC8vIHNpIGFsZ8O6biBiYWNrZW5kIHByZXNlbnRhIHVuYSBjYWRlbmNpYSBtdXkgZGlzdGludGEgZW4gcHJvZHVjY2nDs24uXG4gICAgLy8gICB3aW5kb3cuc3RyZWFtQWRhcHQgPSBmYWxzZSAgICAgIC8vIGRlc2FjdGl2YSBhZGFwdGFjacOzbiBhbCBiYWNrZW5kXG4gICAgLy8gICB3aW5kb3cuc3RyZWFtQnVmZmVyTXMgPSA2MDAgICAgIC8vIGNvbGNow7NuIG9iamV0aXZvIChtcylcbiAgICAvLyAgIHdpbmRvdy5zdHJlYW1MYWdNcyA9IDQ1MCAgICAgICAgLy8gbGFnIG3DoXhpbW8gYmFzZSAobXMpXG4gICAgLy8gICB3aW5kb3cuc3RyZWFtTWluQnVmZmVyID0gNzAgICAgIC8vIHBpc28gZGVsIGNvbGNow7NuIGVuIGNoYXJzXG4gICAgLy8gICB3aW5kb3cuc3RyZWFtV2FybXVwTXMgPSA0MDAgICAgIC8vIHdhcm11cCBpbmljaWFsIChtcylcbiAgICBjb25zdCB3aW5GbGFncyA9XG4gICAgICB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICA/ICh3aW5kb3cgYXMgdW5rbm93biBhcyB7XG4gICAgICAgICAgICBzdHJlYW1BZGFwdD86IGJvb2xlYW5cbiAgICAgICAgICAgIHN0cmVhbUJ1ZmZlck1zPzogbnVtYmVyXG4gICAgICAgICAgICBzdHJlYW1MYWdNcz86IG51bWJlclxuICAgICAgICAgICAgc3RyZWFtTWluQnVmZmVyPzogbnVtYmVyXG4gICAgICAgICAgICBzdHJlYW1XYXJtdXBNcz86IG51bWJlclxuICAgICAgICAgIH0pXG4gICAgICAgIDoge31cbiAgICBjb25zdCBkaXNwbGF5VGV4dCA9IHVzZVNtb290aFN0cmVhbVRleHQocmF3VGV4dCwge1xuICAgICAgZW5hYmxlZDogISFwcm9wcy5pc1N0cmVhbWluZyxcbiAgICAgIG1heENoYXJzUGVyRnJhbWU6IDI0LFxuICAgICAgc25hcFRvV29yZEJvdW5kYXJ5OiB0cnVlLFxuICAgICAgLi4uKHdpbkZsYWdzLnN0cmVhbUxhZ01zICE9IG51bGwgJiYgeyB0YXJnZXRMYWdNczogd2luRmxhZ3Muc3RyZWFtTGFnTXMgfSksXG4gICAgICAuLi4od2luRmxhZ3Muc3RyZWFtQWRhcHQgIT0gbnVsbCAmJiB7IGFkYXB0VG9CYWNrZW5kUmF0ZTogd2luRmxhZ3Muc3RyZWFtQWRhcHQgfSksXG4gICAgICAuLi4od2luRmxhZ3Muc3RyZWFtQnVmZmVyTXMgIT0gbnVsbCAmJiB7IHRhcmdldEJ1ZmZlck1zOiB3aW5GbGFncy5zdHJlYW1CdWZmZXJNcyB9KSxcbiAgICAgIC4uLih3aW5GbGFncy5zdHJlYW1NaW5CdWZmZXIgIT0gbnVsbCAmJiB7IG1pbkJ1ZmZlckNoYXJzOiB3aW5GbGFncy5zdHJlYW1NaW5CdWZmZXIgfSksXG4gICAgICAuLi4od2luRmxhZ3Muc3RyZWFtV2FybXVwTXMgIT0gbnVsbCAmJiB7IHdhcm11cE1zOiB3aW5GbGFncy5zdHJlYW1XYXJtdXBNcyB9KSxcbiAgICB9KVxuICAgIGNvbnN0IGNyZWF0ZUFnZW50QWN0aW9uc0FnZW50SWQgPSBwcm9wcy5jcmVhdGVBZ2VudEZvbGxvd1VwPy5hZ2VudElkXG5cbiAgICBpZiAoIWRpc3BsYXlUZXh0ICYmICFwcm9wcy5pc1N0cmVhbWluZykgcmV0dXJuIG51bGxcbiAgICBjb25zdCBoYXNNZW50aW9ucyA9IGhhc0lubGluZU1hcmtlcnMoZGlzcGxheVRleHQpXG4gICAgY29uc3QgbWVudGlvbk5vZGVzID0gaGFzTWVudGlvbnMgPyByZW5kZXJUZXh0V2l0aE1lbnRpb25zKGRpc3BsYXlUZXh0KSA6IG51bGxcbiAgICByZXR1cm4gKFxuICAgICAgPD5cbiAgICAgICAgPFNDQ0FJTWVzc2FnZVdyYXBwZXJcbiAgICAgICAgICBpc0N1cnJlbnRVc2VyPXtwcm9wcy5pc0N1cnJlbnRVc2VyfVxuICAgICAgICAgIGlzRnJvbnRlbmRDYW5jZWxsZWQ9e3Byb3BzLmlzRnJvbnRlbmRDYW5jZWxsZWR9XG4gICAgICAgICAgY2xhc3NOYW1lPXtnZXRFbnRpdHlMaW5rV3JhcHBlckNsYXNzTmFtZShkaXNwbGF5VGV4dCl9XG4gICAgICAgID5cbiAgICAgICAgICB7aGFzTWVudGlvbnMgJiYgbWVudGlvbk5vZGVzID8gKFxuICAgICAgICAgICAgLy8gU2kgaGF5IG1lbnRpb25zLCByZW5kZXJpemFyIGRpcmVjdGFtZW50ZSAoc2luIG1hcmtkb3duIGVuIGVsIG1pc21vIHDDoXJyYWZvKVxuICAgICAgICAgICAgPHNwYW4gc3R5bGU9e3sgZGlzcGxheTogJ2lubGluZScgfX0+e21lbnRpb25Ob2Rlc308L3NwYW4+XG4gICAgICAgICAgKSA6IChcbiAgICAgICAgICAgIC8vIFNpbiBtZW50aW9ucywgcGFzYXIgYSBTdHJlYW1kb3duIHBhcmEgbWFya2Rvd24gc3VwcG9ydFxuICAgICAgICAgICAgPE1haWFTdHJlYW1kb3duXG4gICAgICAgICAgICAgIHZhcmlhbnQ9XCJjaGF0XCJcbiAgICAgICAgICAgICAgaXNDdXJyZW50VXNlcj17cHJvcHMuaXNDdXJyZW50VXNlcn1cbiAgICAgICAgICAgICAgaXNGcm9udGVuZENhbmNlbGxlZD17cHJvcHMuaXNGcm9udGVuZENhbmNlbGxlZH1cbiAgICAgICAgICAgICAgY29tcG9uZW50cz17eyBhOiBFbnRpdHlMaW5rQ3VzdG9tTGluayB9IGFzIE1haWFTdHJlYW1kb3duUHJvcHNbJ2NvbXBvbmVudHMnXX1cbiAgICAgICAgICAgICAgaXNBbmltYXRpbmc9eyEhcHJvcHMuaXNTdHJlYW1pbmd9XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIHtkaXNwbGF5VGV4dH1cbiAgICAgICAgICAgIDwvTWFpYVN0cmVhbWRvd24+XG4gICAgICAgICAgKX1cbiAgICAgICAgPC9TQ0NBSU1lc3NhZ2VXcmFwcGVyPlxuICAgICAgICB7cHJvcHMuaXNBc3Npc3RhbnQgJiZcbiAgICAgICAgICAhcHJvcHMuaXNFcnJvciAmJlxuICAgICAgICAgICFwcm9wcy5hcHByb3ZhbCAmJlxuICAgICAgICAgICFwcm9wcy5pc1N0cmVhbWluZyAmJlxuICAgICAgICAgICghcHJvcHMuaXNGcm9udGVuZENhbmNlbGxlZCB8fCAhIXByb3BzLm9uUmV0cnkpICYmIChcbiAgICAgICAgICAgIDxNZXNzYWdlRmVlZGJhY2tcbiAgICAgICAgICAgICAgY29udGVudD17ZGlzcGxheVRleHR9XG4gICAgICAgICAgICAgIHNvdXJjZXM9e3Byb3BzLmlzRnJvbnRlbmRDYW5jZWxsZWQgPyB1bmRlZmluZWQgOiBwcm9wcy5zb3VyY2VzfVxuICAgICAgICAgICAgICBoYW5kbGVGZWVkYmFjaz17cHJvcHMuaXNGcm9udGVuZENhbmNlbGxlZCA/IHVuZGVmaW5lZCA6IHByb3BzLmhhbmRsZUZlZWRiYWNrQ2xpY2t9XG4gICAgICAgICAgICAgIGRpc2FibGVGZWVkYmFjaz17cHJvcHMuZGlzYWJsZUZlZWRiYWNrfVxuICAgICAgICAgICAgICBvblJldHJ5PXtwcm9wcy5vblJldHJ5fVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICApfVxuICAgICAgICB7cHJvcHMuaXNBc3Npc3RhbnQgJiZcbiAgICAgICAgICAhcHJvcHMuaXNGcm9udGVuZENhbmNlbGxlZCAmJlxuICAgICAgICAgICFwcm9wcy5hcHByb3ZhbCAmJlxuICAgICAgICAgICghcHJvcHMuaXNFcnJvciB8fCBwcm9wcy5zdWdnZXN0aW9ucz8ubGVuZ3RoKSAmJiAoXG4gICAgICAgICAgICA8Q2hhdEFJU3VnZ2VzdGlvbnNcbiAgICAgICAgICAgICAgc3VnZ2VzdGlvbnM9e3Byb3BzLnN1Z2dlc3Rpb25zIHx8IFtdfVxuICAgICAgICAgICAgICBvblNlbGVjdFN1Z2dlc3Rpb249e3N1Z2dlc3Rpb24gPT4gcHJvcHMuaGFuZGxlU3VnZ2VzdGlvbkNsaWNrKHByb3BzLm1lc3NhZ2VJZCwgc3VnZ2VzdGlvbil9XG4gICAgICAgICAgICAgIGRpc2FibGVkPXtwcm9wcy5zdWdnZXN0aW9uc0Rpc2FibGVkfVxuICAgICAgICAgICAgICBoaWRkZW49eyEhcHJvcHMuaXNTdHJlYW1pbmcgfHwgIXByb3BzLmlzTGFzdE1lc3NhZ2UgfHwgISFwcm9wcy5zdWdnZXN0aW9uc0Rpc2FibGVkfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICApfVxuICAgICAgICB7cHJvcHMuaXNBc3Npc3RhbnQgJiZcbiAgICAgICAgICAhcHJvcHMuaXNFcnJvciAmJlxuICAgICAgICAgICFwcm9wcy5pc0Zyb250ZW5kQ2FuY2VsbGVkICYmXG4gICAgICAgICAgIXByb3BzLmFwcHJvdmFsICYmXG4gICAgICAgICAgISFjcmVhdGVBZ2VudEFjdGlvbnNBZ2VudElkICYmIChcbiAgICAgICAgICAgIDxDaGF0QUlDcmVhdGVBZ2VudEFjdGlvbnNcbiAgICAgICAgICAgICAgYWdlbnRJZD17Y3JlYXRlQWdlbnRBY3Rpb25zQWdlbnRJZH1cbiAgICAgICAgICAgICAgZGlzYWJsZWQ9e3Byb3BzLnN1Z2dlc3Rpb25zRGlzYWJsZWR9XG4gICAgICAgICAgICAgIGhpZGRlbj17ISFwcm9wcy5pc1N0cmVhbWluZyB8fCAhcHJvcHMuaXNMYXN0TWVzc2FnZSB8fCAhIXByb3BzLnN1Z2dlc3Rpb25zRGlzYWJsZWR9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICl9XG4gICAgICA8Lz5cbiAgICApXG4gIH1cbilcblxuY29uc3QgTWVzc2FnZUl0ZW0gPSBtZW1vKChwcm9wczogTWVzc2FnZUl0ZW1Qcm9wcykgPT4ge1xuICBjb25zdCB7XG4gICAgaWQsXG4gICAgdXNlcixcbiAgICBtZXNzYWdlLFxuICAgIGlzU3RyZWFtaW5nLFxuICAgIGlzRXJyb3IsXG4gICAgYXV0aFVzZXIsXG4gICAgb3B0aW9ucyxcbiAgICBpc0NoYW5nZVByb2plY3QsXG4gICAgaGFuZGxlU2VsZWN0T3B0aW9uLFxuICAgIGhhbmRsZVN1Z2dlc3Rpb25DbGljayxcbiAgICBoYW5kbGVGZWVkYmFjayxcbiAgICBoYW5kbGVBcHByb3ZhbERlY2lzaW9uLFxuICAgIGRpc2FibGVGZWVkYmFjayxcbiAgICBoYW5kbGVSZXRyeSxcbiAgICByb2xlLFxuICAgIHNvdXJjZXMsXG4gICAgYXR0YWNobWVudHMsXG4gICAgYXBwcm92YWwsXG4gICAgYXBwcm92YWxTdGF0dXMsXG4gICAgc3VnZ2VzdGlvbnMsXG4gICAgY3JlYXRlQWdlbnRGb2xsb3dVcCxcbiAgICBoYXNTZWxlY3RlZFN1Z2dlc3Rpb24sXG4gICAgaXNMYXN0TWVzc2FnZSxcbiAgICBzdHJlYW1BY3Rpdml0eSxcbiAgfSA9IHByb3BzXG5cbiAgY29uc3QgW3ByZXZpZXdBdHRhY2htZW50LCBzZXRQcmV2aWV3QXR0YWNobWVudF0gPSB1c2VTdGF0ZTxBdHRhY2htZW50RmlsZSB8IG51bGw+KG51bGwpXG4gIGNvbnN0IGlzQ3VycmVudFVzZXIgPSByb2xlID09PSBDaGF0SGlzdG9yeVJvbGUuVVNFUiB8fCB1c2VyLmlkID09PSBhdXRoVXNlci5pZC50b1N0cmluZygpXG4gIGNvbnN0IGlzQXNzaXN0YW50ID0gcm9sZSA9PT0gQ2hhdEhpc3RvcnlSb2xlLkFTU0lTVEFOVCB8fCB1c2VyLmlkID09PSAnYXNzaXN0YW50J1xuICBjb25zdCBpc1N0cmVhbWluZ1BsYWNlaG9sZGVyID0gaXNTdHJlYW1pbmdQbGFjZWhvbGRlck1lc3NhZ2VJZChpZClcbiAgY29uc3Qgc3RyZWFtaW5nVGV4dCA9IHVzZVN0cmVhbWluZ01lc3NhZ2UoaXNTdHJlYW1pbmcgfHwgaXNTdHJlYW1pbmdQbGFjZWhvbGRlciA/IGlkIDogbnVsbClcbiAgY29uc3QgaXNBY3RpdmVTdHJlYW1pbmcgPSAhIWlzU3RyZWFtaW5nIHx8IGlzU3RyZWFtaW5nUGxhY2Vob2xkZXJcbiAgY29uc3QgaGFzU3RyZWFtVGV4dCA9IEJvb2xlYW4oc3RyZWFtaW5nVGV4dClcbiAgY29uc3QgcmVhc29uaW5nVHJhY2UgPSB1c2VSZWFzb25pbmdUcmFjZShpc0Fzc2lzdGFudCAmJiBpc0FjdGl2ZVN0cmVhbWluZyA/IGlkIDogJycpXG4gIGNvbnN0IHN0cmVhbU5hcnJhdGlvbkluVGltZWxpbmUgPVxuICAgIGlzQXNzaXN0YW50ICYmXG4gICAgc2hvdWxkU3RyZWFtTmFycmF0aW9uSW5UaW1lbGluZShyZWFzb25pbmdUcmFjZS5zdGVwcywgc3RyZWFtQWN0aXZpdHksIHN0cmVhbWluZ1RleHQsIHsgbWVzc2FnZUlkOiBpZCB9KVxuICBjb25zdCBzaG93U3RyZWFtaW5nQm9keSA9IGlzQWN0aXZlU3RyZWFtaW5nICYmIGhhc1N0cmVhbVRleHQgJiYgIXN0cmVhbU5hcnJhdGlvbkluVGltZWxpbmVcbiAgY29uc3Qgc2hvd0FjdGl2aXR5SW5kaWNhdG9yID0gaXNBc3Npc3RhbnQgJiYgaXNBY3RpdmVTdHJlYW1pbmcgJiYgISFzdHJlYW1BY3Rpdml0eVxuXG4gIGNvbnN0IG1lc3NhZ2VBdHRhY2htZW50cyA9XG4gICAgYXR0YWNobWVudHMgJiYgYXR0YWNobWVudHMubGVuZ3RoID4gMFxuICAgICAgPyBhdHRhY2htZW50c1xuICAgICAgOiAhaXNBc3Npc3RhbnQgJiYgQXJyYXkuaXNBcnJheShzb3VyY2VzKVxuICAgICAgICA/IChzb3VyY2VzIGFzIEF0dGFjaG1lbnRGaWxlW10pXG4gICAgICAgIDogW11cblxuICBjb25zdCBoYW5kbGVBdHRhY2htZW50Q2xpY2sgPSAoYXR0YWNobWVudDogQXR0YWNobWVudEZpbGUpID0+IHtcbiAgICAvLyBQZXJtaXRpciBwcmV2aXN1YWxpemFjacOzbiBzaSB0aWVuZSBhcmNoaXZvIGxvY2FsIG8gVVJMcyBkZWwgYmFja2VuZFxuICAgIGlmIChcbiAgICAgIGF0dGFjaG1lbnQuZmlsZSBpbnN0YW5jZW9mIEZpbGUgfHxcbiAgICAgIGF0dGFjaG1lbnQub3JpZ2luYWxGaWxlIGluc3RhbmNlb2YgRmlsZSB8fFxuICAgICAgYXR0YWNobWVudC51cmxfdGh1bWJuYWlsIHx8XG4gICAgICBhdHRhY2htZW50LnVybF9vcmlnaW5hbCB8fFxuICAgICAgYXR0YWNobWVudC51cmxfZmlsZVxuICAgICkge1xuICAgICAgc2V0UHJldmlld0F0dGFjaG1lbnQoYXR0YWNobWVudClcbiAgICB9XG4gIH1cblxuICBjb25zdCBoYW5kbGVDbG9zZVByZXZpZXcgPSAoKSA9PiB7XG4gICAgc2V0UHJldmlld0F0dGFjaG1lbnQobnVsbClcbiAgfVxuXG4gIGNvbnN0IGhhbmRsZUF0dGFjaG1lbnREb3dubG9hZCA9IGFzeW5jIChhdHRhY2htZW50OiBBdHRhY2htZW50RmlsZSkgPT4ge1xuICAgIGNvbnN0IGV4dGVuc2lvbiA9IGF0dGFjaG1lbnQubmFtZS5pbmNsdWRlcygnLicpID8gJycgOiBgLiR7YXR0YWNobWVudC50eXBlfWBcbiAgICBjb25zdCBmaWxlTmFtZSA9IGAke2F0dGFjaG1lbnQubmFtZX0ke2V4dGVuc2lvbn1gXG4gICAgY29uc3QgZmlsZVVybCA9IGF0dGFjaG1lbnQudXJsX29yaWdpbmFsIHx8IGF0dGFjaG1lbnQudXJsX2ZpbGUgfHwgYXR0YWNobWVudC51cmxfdGh1bWJuYWlsXG5cbiAgICB0cnkge1xuICAgICAgbGV0IGJsb2JVcmw6IHN0cmluZyB8IG51bGwgPSBudWxsXG5cbiAgICAgIGlmIChmaWxlVXJsKSB7XG4gICAgICAgIGNvbnN0IGRvd25sb2FkZWRGaWxlID0gYXdhaXQgZG93bmxvYWRGaWxlRnJvbVVybChmaWxlVXJsLCBmaWxlTmFtZSwgYXR0YWNobWVudC50eXBlKVxuICAgICAgICBibG9iVXJsID0gVVJMLmNyZWF0ZU9iamVjdFVSTChkb3dubG9hZGVkRmlsZSlcbiAgICAgIH0gZWxzZSBpZiAoYXR0YWNobWVudC5maWxlIGluc3RhbmNlb2YgRmlsZSkge1xuICAgICAgICBibG9iVXJsID0gVVJMLmNyZWF0ZU9iamVjdFVSTChhdHRhY2htZW50LmZpbGUpXG4gICAgICB9XG5cbiAgICAgIGlmICghYmxvYlVybCkgcmV0dXJuXG5cbiAgICAgIGNvbnN0IGxpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJylcbiAgICAgIGxpbmsuaHJlZiA9IGJsb2JVcmxcbiAgICAgIGxpbmsuZG93bmxvYWQgPSBmaWxlTmFtZVxuICAgICAgbGluay5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnXG4gICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGxpbmspXG4gICAgICBsaW5rLmNsaWNrKClcblxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQobGluaylcbiAgICAgICAgVVJMLnJldm9rZU9iamVjdFVSTChibG9iVXJsKVxuICAgICAgfSwgMTAwKVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdGYWlsZWQgdG8gZG93bmxvYWQgYXR0YWNobWVudCcsIGVycm9yKVxuICAgIH1cbiAgfVxuXG4gIGlmIChpc0NoYW5nZVByb2plY3QgJiYgb3B0aW9ucykge1xuICAgIHJldHVybiAoXG4gICAgICA8TWVzc2FnZVdyYXBwZXIga2V5PXtpZH0gaXNDdXJyZW50VXNlcj17aXNDdXJyZW50VXNlcn0gZGF0YS1tZXNzYWdlLWlkPXtpZH0gaGFzRmVlZGJhY2s9e2ZhbHNlfT5cbiAgICAgICAgPFNDTWVzc2FnZUl0ZW1XcmFwcGVyICRpc0Fzc2lzdGFudD17aXNBc3Npc3RhbnR9PlxuICAgICAgICAgIDxNZXNzYWdlQ29udGVudFdyYXBwZXJcbiAgICAgICAgICAgIGlzQ2hhbmdlUHJvamVjdD17aXNDaGFuZ2VQcm9qZWN0fVxuICAgICAgICAgICAgbWVzc2FnZT17bWVzc2FnZX1cbiAgICAgICAgICAgIGlzQ3VycmVudFVzZXI9e2lzQ3VycmVudFVzZXJ9XG4gICAgICAgICAgICBpc0Vycm9yPXtpc0Vycm9yfVxuICAgICAgICAgICAgbWVzc2FnZUV4dHJhQ29udGVudD17PE1lc3NhZ2VPcHRpb25zIG9wdGlvbnM9e29wdGlvbnMgYXMgYW55fSBoYW5kbGVTZWxlY3RPcHRpb249e2hhbmRsZVNlbGVjdE9wdGlvbn0gLz59XG4gICAgICAgICAgLz5cbiAgICAgICAgPC9TQ01lc3NhZ2VJdGVtV3JhcHBlcj5cbiAgICAgIDwvTWVzc2FnZVdyYXBwZXI+XG4gICAgKVxuICB9XG5cbiAgY29uc3QgaGFuZGxlRmVlZGJhY2tDbGljayA9IChmZWVkYmFjazogRmVlZGJhY2spID0+IHtcbiAgICBjb25zdCBzZXNzaW9uSWQgPSBpZFxuICAgICAgLnNwbGl0KCctJylcbiAgICAgIC5maWx0ZXIocXVlc3Rpb25JZCA9PiBxdWVzdGlvbklkICE9PSAnYW5zd2VyJylcbiAgICAgIC5qb2luKCctJylcbiAgICBoYW5kbGVGZWVkYmFjaz8uKGZlZWRiYWNrLCBzZXNzaW9uSWQpXG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxTQ01lc3NhZ2VJdGVtV3JhcHBlciAkaXNBc3Npc3RhbnQ9e2lzQXNzaXN0YW50fSBkYXRhLW1lc3NhZ2UtaWQ9e2lkfT5cbiAgICAgIDxTQ01lc3NhZ2VJdGVtSW5uZXI+XG4gICAgICAgIHsvKiBNaXNtbyBzbG90IHBhcmEgbGEgdHJhemEgZW4gdml2byB5IGxhIHlhIHBsZWdhZGE6IG1pZW50cmFzIGVsIHR1cm5vXG4gICAgICAgICAgICBjb3JyZSwgbG9zIHBhc29zIHNlIGFwaWxhbiBhY8OhICh0aW1lbGFwc2UpOyBhbCBjb21wbGV0YXIsIGVsXG4gICAgICAgICAgICBSZWFzb25pbmdCbG9jayBvY3VwYSBlbCBsdWdhciB5IGNvbGFwc2Egc29sby5cbiAgICAgICAgICAgIFZhIEFSUklCQSBkZWwgY3VlcnBvIHBvcnF1ZSBsYSBuYXJyYWNpw7NuIGRlIGNhZGEgdHVybm8gdGVybWluYSBjb21vXG4gICAgICAgICAgICBmaWxhIGRlIGxhIHRyYXphOiBzaSBlc3R1dmllcmEgYWJham8sIGVsIHRleHRvIHZpZWpvIHF1ZWRhcsOtYSBwb3JcbiAgICAgICAgICAgIGRlYmFqbyBkZWwgdGV4dG8gbnVldm8uICovfVxuICAgICAgICB7aXNBc3Npc3RhbnQgJiZcbiAgICAgICAgICAoaXNBY3RpdmVTdHJlYW1pbmcgPyAoXG4gICAgICAgICAgICA8UmVhc29uaW5nVGltZWxpbmUgbWVzc2FnZUlkPXtpZH0gc3RyZWFtQWN0aXZpdHk9e3N0cmVhbUFjdGl2aXR5fSBzdHJlYW1pbmdUZXh0PXtzdHJlYW1pbmdUZXh0fSAvPlxuICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICA8UmVhc29uaW5nQmxvY2sgbWVzc2FnZUlkPXtpZH0gdHJhY2U9e3Byb3BzLnJlYXNvbmluZyA/PyBudWxsfSAvPlxuICAgICAgICAgICkpfVxuICAgICAgICB7ISFtZXNzYWdlQXR0YWNobWVudHMubGVuZ3RoICYmIChcbiAgICAgICAgICA8U0NBdHRhY2htZW50c1JvdyAkaXNBc3Npc3RhbnQ9e2lzQXNzaXN0YW50fT5cbiAgICAgICAgICAgIHttZXNzYWdlQXR0YWNobWVudHMubWFwKChhdHRhY2htZW50LCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgICAvLyBEZXRlY3RhciBzaSBlcyB1biBhcmNoaXZvIGRlIGF1ZGlvXG4gICAgICAgICAgICAgIGNvbnN0IGF0dGFjaG1lbnRUeXBlID0gYXR0YWNobWVudD8udHlwZT8udG9Mb3dlckNhc2UoKSB8fCAnJ1xuICAgICAgICAgICAgICBjb25zdCBhdHRhY2htZW50TmFtZSA9IGF0dGFjaG1lbnQ/Lm5hbWU/LnRvTG93ZXJDYXNlKCkgfHwgJydcbiAgICAgICAgICAgICAgY29uc3QgaXNBdWRpb0ZpbGUgPVxuICAgICAgICAgICAgICAgIGF0dGFjaG1lbnRUeXBlLnN0YXJ0c1dpdGgoJ2F1ZGlvLycpIHx8XG4gICAgICAgICAgICAgICAgWydmbGFjJywgJ200YScsICdtcDMnLCAnbXA0JywgJ29nYScsICdvZ2cnLCAnd2F2JywgJ3dlYm0nXS5pbmNsdWRlcyhhdHRhY2htZW50VHlwZSkgfHxcbiAgICAgICAgICAgICAgICBbJy5mbGFjJywgJy5tNGEnLCAnLm1wMycsICcubXA0JywgJy5vZ2EnLCAnLm9nZycsICcud2F2JywgJy53ZWJtJ10uc29tZShleHQgPT5cbiAgICAgICAgICAgICAgICAgIGF0dGFjaG1lbnROYW1lLmVuZHNXaXRoKGV4dClcbiAgICAgICAgICAgICAgICApXG5cbiAgICAgICAgICAgICAgaWYgKGlzQXVkaW9GaWxlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIDxBdHRhY2htZW50Q2FyZEF1ZGlvIGtleT17YCR7YXR0YWNobWVudC5pZH0tJHthdHRhY2htZW50Lm5hbWV9YH0gYXR0YWNobWVudD17YXR0YWNobWVudH0gLz5cbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgPEF0dGFjaG1lbnRDYXJkXG4gICAgICAgICAgICAgICAgICBrZXk9e2Ake2F0dGFjaG1lbnQuaWR9LSR7YXR0YWNobWVudC5uYW1lfWB9XG4gICAgICAgICAgICAgICAgICBhdHRhY2htZW50PXthdHRhY2htZW50fVxuICAgICAgICAgICAgICAgICAgcG9zaXRpb25JbmRleD17aW5kZXh9XG4gICAgICAgICAgICAgICAgICBvbkRvd25sb2FkPXsoKSA9PiBoYW5kbGVBdHRhY2htZW50RG93bmxvYWQoYXR0YWNobWVudCl9XG4gICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBoYW5kbGVBdHRhY2htZW50Q2xpY2soYXR0YWNobWVudCl9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfSl9XG4gICAgICAgICAgPC9TQ0F0dGFjaG1lbnRzUm93PlxuICAgICAgICApfVxuICAgICAgICB7KCEhbWVzc2FnZSB8fCBzaG93U3RyZWFtaW5nQm9keSkgJiYgIShpc0Fzc2lzdGFudCAmJiAhIW1lc3NhZ2VBdHRhY2htZW50cy5sZW5ndGgpICYmIChcbiAgICAgICAgICA8U3RyZWFtaW5nTWVzc2FnZUJvZHlcbiAgICAgICAgICAgIG1lc3NhZ2U9e21lc3NhZ2UgPz8gJyd9XG4gICAgICAgICAgICBpc1N0cmVhbWluZz17c2hvd1N0cmVhbWluZ0JvZHl9XG4gICAgICAgICAgICBpc0N1cnJlbnRVc2VyPXtpc0N1cnJlbnRVc2VyfVxuICAgICAgICAgICAgaXNBc3Npc3RhbnQ9e2lzQXNzaXN0YW50fVxuICAgICAgICAgICAgaXNGcm9udGVuZENhbmNlbGxlZD17cHJvcHMuaXNGcm9udGVuZENhbmNlbGxlZH1cbiAgICAgICAgICAgIGFwcHJvdmFsPXthcHByb3ZhbH1cbiAgICAgICAgICAgIGlzRXJyb3I9e2lzRXJyb3J9XG4gICAgICAgICAgICBzb3VyY2VzPXtzb3VyY2VzfVxuICAgICAgICAgICAgc3VnZ2VzdGlvbnM9e3N1Z2dlc3Rpb25zfVxuICAgICAgICAgICAgY3JlYXRlQWdlbnRGb2xsb3dVcD17Y3JlYXRlQWdlbnRGb2xsb3dVcH1cbiAgICAgICAgICAgIGhhbmRsZUZlZWRiYWNrQ2xpY2s9e2hhbmRsZUZlZWRiYWNrQ2xpY2t9XG4gICAgICAgICAgICBkaXNhYmxlRmVlZGJhY2s9e2Rpc2FibGVGZWVkYmFjayA/PyBudWxsfVxuICAgICAgICAgICAgb25SZXRyeT17aGFuZGxlUmV0cnl9XG4gICAgICAgICAgICBoYW5kbGVTdWdnZXN0aW9uQ2xpY2s9e2hhbmRsZVN1Z2dlc3Rpb25DbGlja31cbiAgICAgICAgICAgIHN1Z2dlc3Rpb25zRGlzYWJsZWQ9e2lzQWN0aXZlU3RyZWFtaW5nIHx8ICEhaGFzU2VsZWN0ZWRTdWdnZXN0aW9ufVxuICAgICAgICAgICAgbWVzc2FnZUlkPXtpZH1cbiAgICAgICAgICAgIGlzTGFzdE1lc3NhZ2U9e2lzTGFzdE1lc3NhZ2V9XG4gICAgICAgICAgLz5cbiAgICAgICAgKX1cbiAgICAgICAgey8qIFNwaW5uZXIgZGUgYWN0aXZpZGFkOiB2aXNpYmxlIHRhbWJpw6luIGVuIHdyaXRpbmcgKG5hcnJhY2nDs24gZW4gdHJhemEgbyByZXNwdWVzdGEgZmluYWwpLiAqL31cbiAgICAgICAge3Nob3dBY3Rpdml0eUluZGljYXRvciAmJiAoXG4gICAgICAgICAgPFNDVGltZWxpbmVJbmRpY2F0b3I+XG4gICAgICAgICAgICA8QWdlbnRBY3Rpdml0eUluZGljYXRvciBhY3Rpdml0eT17c3RyZWFtQWN0aXZpdHl9IGNvbXBhY3QgLz5cbiAgICAgICAgICA8L1NDVGltZWxpbmVJbmRpY2F0b3I+XG4gICAgICAgICl9XG4gICAgICAgIHthcHByb3ZhbCAmJiBhcHByb3ZhbC5wZW5kaW5nX2FjdGlvbnMgJiYgKFxuICAgICAgICAgIDxTQ0FwcHJvdmFsQWN0aW9uc0NvbHVtbj5cbiAgICAgICAgICAgIDxBcHByb3ZhbEJveFxuICAgICAgICAgICAgICBhY3Rpb25zPXthcHByb3ZhbC5wZW5kaW5nX2FjdGlvbnN9XG4gICAgICAgICAgICAgIHN0YXR1cz17YXBwcm92YWxTdGF0dXN9XG4gICAgICAgICAgICAgIG9uQXBwcm92ZT17KHRocmVhZElkcywgbWV0YWRhdGEpID0+IGhhbmRsZUFwcHJvdmFsRGVjaXNpb24odGhyZWFkSWRzLCAnYXBwcm92ZScsIHVuZGVmaW5lZCwgbWV0YWRhdGEpfVxuICAgICAgICAgICAgICBvblJlamVjdD17dGhyZWFkSWRzID0+IGhhbmRsZUFwcHJvdmFsRGVjaXNpb24odGhyZWFkSWRzLCAncmVqZWN0Jyl9XG4gICAgICAgICAgICAgIGlzUHJvamVjdERlbGV0ZWQ9e3Byb3BzLnByb2plY3RNZXRhZGF0YT8uaXNfZGVsZXRlZCA9PT0gdHJ1ZX1cbiAgICAgICAgICAgICAgaXNFeHBhbmRlZD17cHJvcHMuZXhwYW5kZWR9XG4gICAgICAgICAgICAgIGhpdGxJbnN0YW5jZUlkPXthcHByb3ZhbC5vcmlnaW5hbF90aHJlYWRfaWR9XG4gICAgICAgICAgICAgIHdhcm5pbmdNZXNzYWdlPXthcHByb3ZhbC53YXJuaW5nX21lc3NhZ2V9XG4gICAgICAgICAgICAgIG1hbnVhbEFwcHJvdmFsRGV0ZWN0ZWQ9e2FwcHJvdmFsLm1hbnVhbF9hcHByb3ZhbF9kZXRlY3RlZH1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC9TQ0FwcHJvdmFsQWN0aW9uc0NvbHVtbj5cbiAgICAgICAgKX1cbiAgICAgIDwvU0NNZXNzYWdlSXRlbUlubmVyPlxuICAgICAgPEF0dGFjaG1lbnRQcmV2aWV3TW9kYWxcbiAgICAgICAgaXNPcGVuPXshIXByZXZpZXdBdHRhY2htZW50fVxuICAgICAgICBvbkNsb3NlPXtoYW5kbGVDbG9zZVByZXZpZXd9XG4gICAgICAgIGF0dGFjaG1lbnQ9e3ByZXZpZXdBdHRhY2htZW50fVxuICAgICAgLz5cbiAgICA8L1NDTWVzc2FnZUl0ZW1XcmFwcGVyPlxuICApXG59KVxuXG5jb25zdCBDaGF0QUlNZXNzYWdlc0lubmVyID0gKHtcbiAgdXNlckluaXRpYWxNZXNzYWdlLFxuICBpbml0aWFsQ2hhdElkLFxuICBvbkVycm9yLFxuICBvblNlbmRNZXNzYWdlUmVhZHksXG4gIG9uU2Nyb2xsVG9Cb3R0b20sXG4gIGF0dGFjaG1lbnRzLFxuICBhZ2VudHMsXG4gIGV4cGFuZGVkLFxuICBza2lwRW50ZXJBbmltYXRpb24gPSBmYWxzZSxcbn06IENoYXRBSU1lc3NhZ2VzUHJvcHMpID0+IHtcbiAgY29uc3QgeyB0IH0gPSB1c2VUKClcbiAgY29uc3QgeyBpc1dlYlNlYXJjaEFjdGl2ZSwgaXNEZWVwU2VhcmNoQWN0aXZlLCBhZ2VudCB9ID0gdXNlR2xvYmFsQ29udGV4dCgpXG4gIGNvbnN0IGV2ZW50ID0gdXNlRXZlbnQoKVxuICBjb25zdCBhdXRoVXNlciA9IHVzZVVzZXIoKVxuICBjb25zdCBtZXNzYWdlc1JlZiA9IHVzZVJlZjxIVE1MRGl2RWxlbWVudD4obnVsbClcbiAgY29uc3QgY2hhdEluaXRpYWxpemVkUmVmID0gdXNlUmVmKGZhbHNlKVxuICBjb25zdCBpc0xvYWRpbmdNb3JlUmVmID0gdXNlUmVmKGZhbHNlKVxuICBjb25zdCBzY3JvbGxUaHJlc2hvbGRSZWYgPSB1c2VSZWYoMzkpXG4gIGNvbnN0IGxhc3RTY3JvbGxUb3BSZWYgPSB1c2VSZWYoMClcbiAgY29uc3Qgc2hvd1Njcm9sbFRvQm90dG9tUmVmID0gdXNlUmVmKGZhbHNlKVxuICBjb25zdCBzaG93VG9wR3JhZGllbnRSZWYgPSB1c2VSZWYoZmFsc2UpXG4gIGNvbnN0IHNob3dCb3R0b21HcmFkaWVudFJlZiA9IHVzZVJlZihmYWxzZSlcbiAgY29uc3Qgc2Nyb2xsUmFmUmVmID0gdXNlUmVmPG51bWJlciB8IG51bGw+KG51bGwpXG4gIC8qKlxuICAgKiBUdXJubyBjb24gZWwgc2Nyb2xsIGJham8gY29udHJvbCBkZWwgdXN1YXJpbzogZGVzZGUgcXVlIGVudsOtYSBlbCBtZW5zYWplIHlcbiAgICogaGFzdGEgZWwgcHLDs3hpbW8gZW52w61vIG5vIG1vdmVtb3MgZWwgc2Nyb2xsIHBvciBuaW5nw7puIG1vdGl2by4gRXNcbiAgICogaW5kZXBlbmRpZW50ZSBkZSBsYSBhbHR1cmEgZGVsIHNwYWNlciwgcXVlIHB1ZWRlIGxsZWdhciBhIDAgc2luIGRlc2FuY2xhci5cbiAgICovXG4gIGNvbnN0IGFuY2hvcmVkVHVybklkUmVmID0gdXNlUmVmPHN0cmluZyB8IG51bGw+KG51bGwpXG4gIGNvbnN0IHNwYWNlckVsUmVmID0gdXNlUmVmPEhUTUxEaXZFbGVtZW50IHwgbnVsbD4obnVsbClcbiAgY29uc3Qgc3BhY2VySGVpZ2h0UmVmID0gdXNlUmVmKDApXG4gIGNvbnN0IHR1cm5TY3JvbGxSYWZSZWYgPSB1c2VSZWY8bnVtYmVyIHwgbnVsbD4obnVsbClcbiAgY29uc3Qgd2FzTG9hZGluZ01lc3NhZ2VzUmVmID0gdXNlUmVmKGZhbHNlKVxuICBjb25zdCBsYXN0U2Nyb2xsZWRTZXNzaW9uUmVmID0gdXNlUmVmPHN0cmluZyB8IG51bGw+KG51bGwpXG4gIGNvbnN0IHBlbmRpbmdTY3JvbGxSZXN0b3JlUmVmID0gdXNlUmVmPG51bWJlciB8IG51bGw+KG51bGwpXG4gIGNvbnN0IHNjcm9sbFBlcnNpc3RUaW1lclJlZiA9IHVzZVJlZjxudW1iZXIgfCBudWxsPihudWxsKVxuICBjb25zdCBbc2hvd1Njcm9sbFRvQm90dG9tLCBzZXRTaG93U2Nyb2xsVG9Cb3R0b21dID0gdXNlU3RhdGUoZmFsc2UpXG4gIGNvbnN0IFtzaG93VG9wR3JhZGllbnQsIHNldFNob3dUb3BHcmFkaWVudF0gPSB1c2VTdGF0ZShmYWxzZSlcbiAgY29uc3QgW3Nob3dCb3R0b21HcmFkaWVudCwgc2V0U2hvd0JvdHRvbUdyYWRpZW50XSA9IHVzZVN0YXRlKGZhbHNlKVxuICBjb25zdCBbc2VsZWN0ZWRTdWdnZXN0aW9uTWVzc2FnZUlkcywgc2V0U2VsZWN0ZWRTdWdnZXN0aW9uTWVzc2FnZUlkc10gPSB1c2VTdGF0ZTxSZWNvcmQ8c3RyaW5nLCBib29sZWFuPj4oe30pXG5cbiAgY29uc3Qge1xuICAgIG1lc3NhZ2VzLFxuICAgIGxvYWRpbmdNZXNzYWdlcyxcbiAgICBpc0xvYWRpbmdNb3JlTWVzc2FnZXMsXG4gICAgd2FpdGluZ1Jlc3BvbnNlLFxuICAgIGlzV3JpdGluZyxcbiAgICBsb2FkaW5nTWVzc2FnZSxcbiAgICBzdHJlYW1BY3Rpdml0eSxcbiAgICBhY3RpdmVMb2FkaW5ncyxcbiAgICBzZW5kTWVzc2FnZSxcbiAgICByZXRyeU1lc3NhZ2UsXG4gICAgY2hhbmdlUHJvamVjdCxcbiAgICBoYW5kbGVGZWVkYmFjayxcbiAgICBoYW5kbGVBcHByb3ZhbERlY2lzaW9uLFxuICAgIGluaXRpYWxpemVDaGF0LFxuICAgIGhhbmRsZVNjcm9sbCxcbiAgICBzdG9wR2VuZXJhdGlvbixcbiAgfSA9IHVzZUNoYXRNYW5hZ2VyKHtcbiAgICBjaGF0SWQ6IGluaXRpYWxDaGF0SWQgfHwgdW5kZWZpbmVkLFxuICAgIHVzZXJJbml0aWFsTWVzc2FnZSxcbiAgICBvbkVycm9yLFxuICAgIGF0dGFjaG1lbnRzLFxuICAgIGFnZW50cyxcbiAgfSlcblxuICBjb25zdCBoYW5kbGVTZWxlY3RPcHRpb24gPSB1c2VDYWxsYmFjayhcbiAgICAob3B0aW9uOiBQcm9qZWN0KSA9PiB7XG4gICAgICBjaGFuZ2VQcm9qZWN0KG9wdGlvbilcbiAgICB9LFxuICAgIFtjaGFuZ2VQcm9qZWN0XVxuICApXG5cbiAgLyoqXG4gICAqIFJlY2FsY3VsYSBlbCBib3TDs24gXCJzY3JvbGwgdG8gYm90dG9tXCIgeSBsb3MgZ3JhZGllbnRlcyBkZSBib3JkZSBhIHBhcnRpciBkZVxuICAgKiBsYSBwb3NpY2nDs24gZGVsIHNjcm9sbC4gTG9zIHJlZnMgZXZpdGFuIGBzZXRTdGF0ZWAgY3VhbmRvIGVsIHZhbG9yIG5vIGNhbWJpYTpcbiAgICogZXN0byBjb3JyZSBlbiBjYWRhIGZyYW1lIGRlbCBzdHJlYW0uXG4gICAqL1xuICBjb25zdCB1cGRhdGVTY3JvbGxBZmZvcmRhbmNlcyA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBjb25zdCBlbCA9IG1lc3NhZ2VzUmVmLmN1cnJlbnRcbiAgICBpZiAoIWVsKSByZXR1cm5cbiAgICBjb25zdCB7IHNjcm9sbFRvcCwgc2Nyb2xsSGVpZ2h0LCBjbGllbnRIZWlnaHQgfSA9IGVsXG4gICAgLy8gRWwgc3BhY2VyIGRlbCB0dXJubyBlcyBhbHRvIHJlc2VydmFkbywgbm8gY29udGVuaWRvOiBzaSBubyBsbyBkZXNjb250YW1vc1xuICAgIC8vIGxhIGZsZWNoYSB5IGVsIGdyYWRpZW50ZSBkZSBhYmFqbyBxdWVkYW4gZW5jZW5kaWRvcyBkdXJhbnRlIHRvZG8gZWwgdHVybm8uXG4gICAgY29uc3QgZGlzdGFuY2VGcm9tQm90dG9tID0gc2Nyb2xsSGVpZ2h0IC0gc3BhY2VySGVpZ2h0UmVmLmN1cnJlbnQgLSBzY3JvbGxUb3AgLSBjbGllbnRIZWlnaHRcblxuICAgIGNvbnN0IHNob3VsZFNob3cgPSBkaXN0YW5jZUZyb21Cb3R0b20gPiA1MFxuICAgIGlmIChzaG93U2Nyb2xsVG9Cb3R0b21SZWYuY3VycmVudCAhPT0gc2hvdWxkU2hvdykge1xuICAgICAgc2hvd1Njcm9sbFRvQm90dG9tUmVmLmN1cnJlbnQgPSBzaG91bGRTaG93XG4gICAgICBzZXRTaG93U2Nyb2xsVG9Cb3R0b20oc2hvdWxkU2hvdylcbiAgICB9XG5cbiAgICBjb25zdCBuZXh0VG9wR3JhZGllbnQgPSBzY3JvbGxUb3AgPiAxXG4gICAgaWYgKHNob3dUb3BHcmFkaWVudFJlZi5jdXJyZW50ICE9PSBuZXh0VG9wR3JhZGllbnQpIHtcbiAgICAgIHNob3dUb3BHcmFkaWVudFJlZi5jdXJyZW50ID0gbmV4dFRvcEdyYWRpZW50XG4gICAgICBzZXRTaG93VG9wR3JhZGllbnQobmV4dFRvcEdyYWRpZW50KVxuICAgIH1cblxuICAgIGNvbnN0IG5leHRCb3R0b21HcmFkaWVudCA9IGRpc3RhbmNlRnJvbUJvdHRvbSA+IDFcbiAgICBpZiAoc2hvd0JvdHRvbUdyYWRpZW50UmVmLmN1cnJlbnQgIT09IG5leHRCb3R0b21HcmFkaWVudCkge1xuICAgICAgc2hvd0JvdHRvbUdyYWRpZW50UmVmLmN1cnJlbnQgPSBuZXh0Qm90dG9tR3JhZGllbnRcbiAgICAgIHNldFNob3dCb3R0b21HcmFkaWVudChuZXh0Qm90dG9tR3JhZGllbnQpXG4gICAgfVxuICB9LCBbXSlcblxuICAvKipcbiAgICogU2Nyb2xsIGlubWVkaWF0byBhbCBmb25kbyAoZGVudHJvIGRlIHJBRiBwYXJhIGNvb3JkaW5hciBjb24gZWwgcGFpbnQpXG4gICAqIHkgYWN0dWFsaXphIGxhIHZpc2liaWxpZGFkIGRlbCBib3TDs24uIFNvbG8gc2UgdXNhIGFsIGFicmlyL2NhcmdhciB1biBjaGF0XG4gICAqIG8gY3VhbmRvIGVsIHVzdWFyaW8gcGlkZSBpciBhbCBmb25kbzogbnVuY2EgZHVyYW50ZSBlbCBzdHJlYW0uXG4gICAqL1xuICBjb25zdCBzY3JvbGxUb0JvdHRvbVJhZiA9IHVzZUNhbGxiYWNrKFxuICAgIChvcHRzOiB7IGRlbGF5TXM/OiBudW1iZXIgfSA9IHt9KSA9PiB7XG4gICAgICBjb25zdCB7IGRlbGF5TXMgPSAwIH0gPSBvcHRzXG4gICAgICBjb25zdCBydW4gPSAoKSA9PiB7XG4gICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICAgICAgY29uc3QgZWwgPSBtZXNzYWdlc1JlZi5jdXJyZW50XG4gICAgICAgICAgaWYgKCFlbCkgcmV0dXJuXG4gICAgICAgICAgZWwuc2Nyb2xsVG9wID0gZWwuc2Nyb2xsSGVpZ2h0XG4gICAgICAgICAgdXBkYXRlU2Nyb2xsQWZmb3JkYW5jZXMoKVxuICAgICAgICB9KVxuICAgICAgfVxuICAgICAgaWYgKGRlbGF5TXMgPiAwKSBzZXRUaW1lb3V0KHJ1biwgZGVsYXlNcylcbiAgICAgIGVsc2UgcnVuKClcbiAgICB9LFxuICAgIFt1cGRhdGVTY3JvbGxBZmZvcmRhbmNlc11cbiAgKVxuXG4gIGNvbnN0IGNhbmNlbFR1cm5TY3JvbGwgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgaWYgKHR1cm5TY3JvbGxSYWZSZWYuY3VycmVudCA9PT0gbnVsbCkgcmV0dXJuXG4gICAgY2FuY2VsQW5pbWF0aW9uRnJhbWUodHVyblNjcm9sbFJhZlJlZi5jdXJyZW50KVxuICAgIHR1cm5TY3JvbGxSYWZSZWYuY3VycmVudCA9IG51bGxcbiAgfSwgW10pXG5cbiAgLyoqXG4gICAqIFNjcm9sbCBhbmltYWRvIGNvbiBlYXNpbmcgcHJvcGlvOiBgYmVoYXZpb3I6ICdzbW9vdGgnYCBubyBwZXJtaXRlIHJlZ3VsYXIgbGFcbiAgICogZHVyYWNpw7NuIHkgZWwgc2FsdG8gYWwgYW5jbGFyIGVsIHR1cm5vIHF1ZWRhIGRlbWFzaWFkbyBzZWNvLlxuICAgKi9cbiAgY29uc3QgYW5pbWF0ZVNjcm9sbFRvID0gdXNlQ2FsbGJhY2soXG4gICAgKHRvcDogbnVtYmVyKSA9PiB7XG4gICAgICBjYW5jZWxUdXJuU2Nyb2xsKClcbiAgICAgIGNvbnN0IGVsID0gbWVzc2FnZXNSZWYuY3VycmVudFxuICAgICAgaWYgKCFlbCkgcmV0dXJuXG4gICAgICBjb25zdCBmcm9tID0gZWwuc2Nyb2xsVG9wXG4gICAgICBjb25zdCBkaXN0YW5jZSA9IHRvcCAtIGZyb21cbiAgICAgIGlmIChNYXRoLmFicyhkaXN0YW5jZSkgPCAxKSByZXR1cm5cblxuICAgICAgY29uc3QgZHVyYXRpb24gPVxuICAgICAgICBUVVJOX1NDUk9MTF9EVVJBVElPTl9NUyArXG4gICAgICAgIChUVVJOX1NDUk9MTF9NQVhfRFVSQVRJT05fTVMgLSBUVVJOX1NDUk9MTF9EVVJBVElPTl9NUykgKlxuICAgICAgICAgIE1hdGgubWluKDEsIE1hdGguYWJzKGRpc3RhbmNlKSAvIFRVUk5fU0NST0xMX0xPTkdfRElTVEFOQ0VfUFgpXG5cbiAgICAgIGNvbnN0IHN0YXJ0ZWRBdCA9IHBlcmZvcm1hbmNlLm5vdygpXG4gICAgICBjb25zdCBzdGVwID0gKG5vdzogbnVtYmVyKSA9PiB7XG4gICAgICAgIGNvbnN0IHByb2dyZXNzID0gTWF0aC5taW4oMSwgKG5vdyAtIHN0YXJ0ZWRBdCkgLyBkdXJhdGlvbilcbiAgICAgICAgLy8gZWFzZU91dEV4cG8gKH5jdWJpYy1iZXppZXIoMC4xNiwgMSwgMC4zLCAxKSk6IGVtcGllemEgYSBmcmVuYXIgbXVjaG9cbiAgICAgICAgLy8gYW50ZXMgcXVlIGVsIHF1aW50IHkgYXRlcnJpemEgc2luIGNvcnRlIHBlcmNlcHRpYmxlLlxuICAgICAgICBjb25zdCBlYXNlZCA9IHByb2dyZXNzID09PSAxID8gMSA6IDEgLSAyICoqICgtMTIgKiBwcm9ncmVzcylcbiAgICAgICAgZWwuc2Nyb2xsVG9wID0gZnJvbSArIGRpc3RhbmNlICogZWFzZWRcbiAgICAgICAgdXBkYXRlU2Nyb2xsQWZmb3JkYW5jZXMoKVxuICAgICAgICB0dXJuU2Nyb2xsUmFmUmVmLmN1cnJlbnQgPSBwcm9ncmVzcyA8IDEgPyByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoc3RlcCkgOiBudWxsXG4gICAgICB9XG4gICAgICB0dXJuU2Nyb2xsUmFmUmVmLmN1cnJlbnQgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoc3RlcClcbiAgICB9LFxuICAgIFtjYW5jZWxUdXJuU2Nyb2xsLCB1cGRhdGVTY3JvbGxBZmZvcmRhbmNlc11cbiAgKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiBjYW5jZWxUdXJuU2Nyb2xsLCBbY2FuY2VsVHVyblNjcm9sbF0pXG5cbiAgY29uc3Qgc2V0U3BhY2VySGVpZ2h0ID0gdXNlQ2FsbGJhY2soKG5leHQ6IG51bWJlcikgPT4ge1xuICAgIGlmIChNYXRoLmFicyhzcGFjZXJIZWlnaHRSZWYuY3VycmVudCAtIG5leHQpIDwgMSkgcmV0dXJuXG4gICAgc3BhY2VySGVpZ2h0UmVmLmN1cnJlbnQgPSBuZXh0XG4gICAgaWYgKHNwYWNlckVsUmVmLmN1cnJlbnQpIHtcbiAgICAgIHNwYWNlckVsUmVmLmN1cnJlbnQuc3R5bGUuaGVpZ2h0ID0gYCR7bmV4dH1weGBcbiAgICB9XG4gIH0sIFtdKVxuXG4gIGNvbnN0IGNsZWFyVHVyblNwYWNlID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGFuY2hvcmVkVHVybklkUmVmLmN1cnJlbnQgPSBudWxsXG4gICAgc2V0U3BhY2VySGVpZ2h0KDApXG4gIH0sIFtzZXRTcGFjZXJIZWlnaHRdKVxuXG4gIC8qKlxuICAgKiBEZXZ1ZWx2ZSBlbCBhbHRvIHJlc2VydmFkbyBxdWUgc2UgcHVlZGUgc2FjYXIgc2luIG1vdmVyIGxhIHZpc3RhOiB0b2RvIGxvXG4gICAqIHF1ZSBxdWVkZSBwb3IgZGViYWpvIGRlbCBzY3JvbGwgYWN0dWFsLiBTaSBlbCB1c3VhcmlvIGVzdMOhIGVuIGVsIGZvbmRvLCBzZVxuICAgKiBzYWNhIGVudGVybzsgc2kgZXN0w6EgYSBtaXRhZCBkZSBjYW1pbm8sIHNlIHZhIGRyZW5hbmRvIGEgbWVkaWRhIHF1ZSBiYWphLlxuICAgKi9cbiAgY29uc3QgZHJhaW5UdXJuU3BhY2UgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgY29uc3QgZWwgPSBtZXNzYWdlc1JlZi5jdXJyZW50XG4gICAgaWYgKCFlbCB8fCBzcGFjZXJIZWlnaHRSZWYuY3VycmVudCA8PSAwKSByZXR1cm5cbiAgICBjb25zdCByZW1vdmFibGUgPSBNYXRoLm1heCgwLCBlbC5zY3JvbGxIZWlnaHQgLSBlbC5jbGllbnRIZWlnaHQgLSBlbC5zY3JvbGxUb3ApXG4gICAgc2V0U3BhY2VySGVpZ2h0KE1hdGgubWF4KDAsIHNwYWNlckhlaWdodFJlZi5jdXJyZW50IC0gcmVtb3ZhYmxlKSlcbiAgfSwgW3NldFNwYWNlckhlaWdodF0pXG5cbiAgLyoqXG4gICAqIEVsIHVzdWFyaW8gdG9tw7MgZWwgY29udHJvbCBkZWwgc2Nyb2xsOiBlbCB0dXJubyBkZWphIGRlIGVzdGFyIGFuY2xhZG8geSBlbFxuICAgKiBlc3BhY2lvIHJlc2VydmFkbyBlbXBpZXphIGEgZGV2b2x2ZXJzZS4gU2luIGFuY2xhIHkgY29uIHNwYWNlciA+IDAsIGVsXG4gICAqIGhhbmRsZXIgZGUgc2Nyb2xsIHNpZ3VlIGRyZW5hbmRvIGhhc3RhIHF1ZSBsbGVnYSBhbCBmb25kbyB5IG5vIHF1ZWRhIGh1ZWNvLlxuICAgKi9cbiAgY29uc3QgcmVsZWFzZVR1cm5TcGFjZSA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBpZiAoIWFuY2hvcmVkVHVybklkUmVmLmN1cnJlbnQgJiYgc3BhY2VySGVpZ2h0UmVmLmN1cnJlbnQgPD0gMCkgcmV0dXJuXG4gICAgYW5jaG9yZWRUdXJuSWRSZWYuY3VycmVudCA9IG51bGxcbiAgICBkcmFpblR1cm5TcGFjZSgpXG4gIH0sIFtkcmFpblR1cm5TcGFjZV0pXG5cbiAgY29uc3QgaGFuZGxlVXNlclNjcm9sbEludGVudCA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBjYW5jZWxUdXJuU2Nyb2xsKClcbiAgICByZWxlYXNlVHVyblNwYWNlKClcbiAgfSwgW2NhbmNlbFR1cm5TY3JvbGwsIHJlbGVhc2VUdXJuU3BhY2VdKVxuXG4gIGNvbnN0IG1lYXN1cmVUdXJuID0gdXNlQ2FsbGJhY2soKHF1ZXN0aW9uSWQ6IHN0cmluZykgPT4ge1xuICAgIGNvbnN0IGVsID0gbWVzc2FnZXNSZWYuY3VycmVudFxuICAgIGNvbnN0IHNwYWNlckVsID0gc3BhY2VyRWxSZWYuY3VycmVudFxuICAgIGlmICghZWwgfHwgIXNwYWNlckVsKSByZXR1cm4gbnVsbFxuXG4gICAgY29uc3QgcXVlc3Rpb25FbCA9IGVsLnF1ZXJ5U2VsZWN0b3I8SFRNTEVsZW1lbnQ+KGBbZGF0YS1tZXNzYWdlLWlkPVwiJHtxdWVzdGlvbklkfVwiXWApXG4gICAgaWYgKCFxdWVzdGlvbkVsKSByZXR1cm4gbnVsbFxuXG4gICAgY29uc3QgY29udGFpbmVyVG9wID0gZWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wXG4gICAgY29uc3QgcXVlc3Rpb25Ub3AgPSBxdWVzdGlvbkVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcCAtIGNvbnRhaW5lclRvcCArIGVsLnNjcm9sbFRvcFxuICAgIGNvbnN0IGNvbnRlbnRCb3R0b20gPSBzcGFjZXJFbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3AgLSBjb250YWluZXJUb3AgKyBlbC5zY3JvbGxUb3BcbiAgICByZXR1cm4geyBlbCwgcXVlc3Rpb25Ub3AsIHR1cm5IZWlnaHQ6IGNvbnRlbnRCb3R0b20gLSBxdWVzdGlvblRvcCB9XG4gIH0sIFtdKVxuXG4gIGNvbnN0IHJlc2VydmVUdXJuU3BhY2UgPSB1c2VDYWxsYmFjayhcbiAgICAocXVlc3Rpb25JZDogc3RyaW5nKSA9PiB7XG4gICAgICBjb25zdCBtZWFzdXJlZCA9IG1lYXN1cmVUdXJuKHF1ZXN0aW9uSWQpXG4gICAgICBpZiAoIW1lYXN1cmVkKSByZXR1cm5cbiAgICAgIGNvbnN0IHsgZWwsIHF1ZXN0aW9uVG9wLCB0dXJuSGVpZ2h0IH0gPSBtZWFzdXJlZFxuXG4gICAgICAvLyBBbmNsYW1vcyBzaWVtcHJlLCBpbmNsdXNvIGN1YW5kbyBubyBoYWdhIGZhbHRhIHJlc2VydmFyOiBkdXJhbnRlIGVsXG4gICAgICAvLyB0dXJubyBlbCBzY3JvbGwgbm8gc2UgbXVldmUgc29sbyBlbiBuaW5nw7puIGNhc28uXG4gICAgICBhbmNob3JlZFR1cm5JZFJlZi5jdXJyZW50ID0gcXVlc3Rpb25JZFxuXG4gICAgICBjb25zdCBvZmZzZXQgPSB0dXJuQW5jaG9yT2Zmc2V0KGVsLmNsaWVudEhlaWdodClcbiAgICAgIGNvbnN0IHRhcmdldFNjcm9sbFRvcCA9IE1hdGgubWF4KDAsIHF1ZXN0aW9uVG9wIC0gb2Zmc2V0KVxuICAgICAgLy8gQ2hhdCByZWNpw6luIGluaWNpYWRvIG8gY29udmVyc2FjacOzbiBxdWUgYcO6biBlbnRyYSBlbiBwYW50YWxsYTogbGFcbiAgICAgIC8vIHByZWd1bnRhIHlhIGVzdMOhIGFycmliYSwgbm8gaGF5IG5hZGEgcXVlIHN1YmlyIG5pIHF1ZSByZXNlcnZhci5cbiAgICAgIGlmICh0YXJnZXRTY3JvbGxUb3AgPD0gZWwuc2Nyb2xsVG9wKSB7XG4gICAgICAgIHNldFNwYWNlckhlaWdodCgwKVxuICAgICAgICB1cGRhdGVTY3JvbGxBZmZvcmRhbmNlcygpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICAvLyBSZXNlcnZhbW9zIGxvIG3DrW5pbW8gcGFyYSBxdWUgYHRhcmdldFNjcm9sbFRvcGAgc2VhIGFsY2FuemFibGUuIEVsXG4gICAgICAvLyBzcGFjZXIgc2UgaW5zZXJ0YSBkZSB1bmEgKGVzIGFsdG8gcmVzZXJ2YWRvLCBubyBjb250ZW5pZG8gdmlzaWJsZSk7XG4gICAgICAvLyBsbyDDum5pY28gcXVlIHNlIHBlcmNpYmUgZXMgZWwgZGVzcGxhemFtaWVudG8gYW5pbWFkby5cbiAgICAgIHNldFNwYWNlckhlaWdodChNYXRoLm1heCgwLCBlbC5jbGllbnRIZWlnaHQgLSB0dXJuSGVpZ2h0IC0gb2Zmc2V0KSlcbiAgICAgIGFuaW1hdGVTY3JvbGxUbyh0YXJnZXRTY3JvbGxUb3ApXG4gICAgfSxcbiAgICBbbWVhc3VyZVR1cm4sIHNldFNwYWNlckhlaWdodCwgdXBkYXRlU2Nyb2xsQWZmb3JkYW5jZXMsIGFuaW1hdGVTY3JvbGxUb11cbiAgKVxuXG4gIC8qKlxuICAgKiBFbmNvZ2UgZWwgc3BhY2VyIGEgbWVkaWRhIHF1ZSBjcmVjZSBsYSByZXNwdWVzdGE6IGVsIGFsdG8gdG90YWwgZGVsIHNjcm9sbFxuICAgKiBxdWVkYSBjb25zdGFudGUgeSBsYSB2aXN0YSBubyBzZSBtdWV2ZSBzb2xhLiBTb2xvIGFjaGljYSwgbnVuY2EgYWdyYW5kYSxcbiAgICogcGFyYSBubyBpbnllY3RhciBlc3BhY2lvIGVuIHR1cm5vcyBxdWUgYXJyYW5jYXJvbiBzaW4gcmVzZXJ2YS5cbiAgICogRGV2dWVsdmUgc2kgZWwgdHVybm8gc2lndWUgYW5jbGFkbyAoYXVucXVlIGVsIHNwYWNlciB5YSBzZWEgMCkuXG4gICAqL1xuICBjb25zdCBzeW5jVHVyblNwYWNlID0gdXNlQ2FsbGJhY2soKCk6IGJvb2xlYW4gPT4ge1xuICAgIGlmICghYW5jaG9yZWRUdXJuSWRSZWYuY3VycmVudCkgcmV0dXJuIGZhbHNlXG4gICAgaWYgKHNwYWNlckhlaWdodFJlZi5jdXJyZW50ID4gMCkge1xuICAgICAgY29uc3QgbWVhc3VyZWQgPSBtZWFzdXJlVHVybihhbmNob3JlZFR1cm5JZFJlZi5jdXJyZW50KVxuICAgICAgaWYgKG1lYXN1cmVkKSB7XG4gICAgICAgIGNvbnN0IG9mZnNldCA9IHR1cm5BbmNob3JPZmZzZXQobWVhc3VyZWQuZWwuY2xpZW50SGVpZ2h0KVxuICAgICAgICBjb25zdCByZXNlcnZlZCA9IE1hdGgubWF4KDAsIG1lYXN1cmVkLmVsLmNsaWVudEhlaWdodCAtIG1lYXN1cmVkLnR1cm5IZWlnaHQgLSBvZmZzZXQpXG4gICAgICAgIHNldFNwYWNlckhlaWdodChNYXRoLm1pbihzcGFjZXJIZWlnaHRSZWYuY3VycmVudCwgcmVzZXJ2ZWQpKVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdHJ1ZVxuICB9LCBbbWVhc3VyZVR1cm4sIHNldFNwYWNlckhlaWdodF0pXG5cbiAgY29uc3QgaGFuZGxlQ2xpY2tTY3JvbGxUb0JvdHRvbSA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBjb25zdCBlbCA9IG1lc3NhZ2VzUmVmLmN1cnJlbnRcbiAgICBpZiAoIWVsKSByZXR1cm5cbiAgICBjbGVhclR1cm5TcGFjZSgpXG4gICAgLy8gTWlzbWEgY3VydmEgeSBkdXJhY2nDs24gcXVlIGVsIGFuY2xhamUgZGVsIHR1cm5vOiBlbCBgc21vb3RoYCBuYXRpdm8gZnJlbmEgc2Vjby5cbiAgICBhbmltYXRlU2Nyb2xsVG8oZWwuc2Nyb2xsSGVpZ2h0IC0gZWwuY2xpZW50SGVpZ2h0KVxuICB9LCBbY2xlYXJUdXJuU3BhY2UsIGFuaW1hdGVTY3JvbGxUb10pXG5cbiAgY29uc3QgaGFuZGxlU2Nyb2xsVG9Cb3R0b20gPSB1c2VDYWxsYmFjayhcbiAgICAoZTogUmVhY3QuVUlFdmVudDxIVE1MRGl2RWxlbWVudD4pID0+IHtcbiAgICAgIGNvbnN0IGNvbnRhaW5lciA9IGUuY3VycmVudFRhcmdldFxuXG4gICAgICBpZiAoc2Nyb2xsUmFmUmVmLmN1cnJlbnQgIT09IG51bGwpIHtcbiAgICAgICAgY2FuY2VsQW5pbWF0aW9uRnJhbWUoc2Nyb2xsUmFmUmVmLmN1cnJlbnQpXG4gICAgICB9XG5cbiAgICAgIHNjcm9sbFJhZlJlZi5jdXJyZW50ID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcbiAgICAgICAgc2Nyb2xsUmFmUmVmLmN1cnJlbnQgPSBudWxsXG4gICAgICAgIGNvbnN0IHsgc2Nyb2xsVG9wLCBzY3JvbGxIZWlnaHQsIGNsaWVudEhlaWdodCB9ID0gY29udGFpbmVyXG5cbiAgICAgICAgY29uc3QgaXNTY3JvbGxpbmdVcCA9IHNjcm9sbFRvcCA8IGxhc3RTY3JvbGxUb3BSZWYuY3VycmVudFxuXG4gICAgICAgIGlmIChpc1Njcm9sbGluZ1VwKSB7XG4gICAgICAgICAgc2Nyb2xsVGhyZXNob2xkUmVmLmN1cnJlbnQgPSAxNVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgaXNOZWFyQm90dG9tID0gc2Nyb2xsSGVpZ2h0IC0gc2Nyb2xsVG9wIC0gY2xpZW50SGVpZ2h0IDwgc2Nyb2xsVGhyZXNob2xkUmVmLmN1cnJlbnRcblxuICAgICAgICBpZiAoaXNOZWFyQm90dG9tKSB7XG4gICAgICAgICAgc2Nyb2xsVGhyZXNob2xkUmVmLmN1cnJlbnQgPSAzOVxuICAgICAgICB9XG5cbiAgICAgICAgbGFzdFNjcm9sbFRvcFJlZi5jdXJyZW50ID0gc2Nyb2xsVG9wXG5cbiAgICAgICAgLy8gVHVybm8geWEgbGliZXJhZG8gcG9yIGVsIHVzdWFyaW86IHNlZ3VpbW9zIGRldm9sdmllbmRvIGVsIGFsdG9cbiAgICAgICAgLy8gcmVzZXJ2YWRvIG1pZW50cmFzIGJhamEsIHBhcmEgcXVlIGFsIGxsZWdhciBhbCDDumx0aW1vIG1lbnNhamUgbm9cbiAgICAgICAgLy8gcXVlZGUgaHVlY28gZGViYWpvLlxuICAgICAgICBpZiAoIWFuY2hvcmVkVHVybklkUmVmLmN1cnJlbnQpIGRyYWluVHVyblNwYWNlKClcblxuICAgICAgICB1cGRhdGVTY3JvbGxBZmZvcmRhbmNlcygpXG5cbiAgICAgICAgaWYgKGluaXRpYWxDaGF0SWQgJiYgc2Nyb2xsVG9wID4gMCkge1xuICAgICAgICAgIGlmIChzY3JvbGxQZXJzaXN0VGltZXJSZWYuY3VycmVudCAhPSBudWxsKSB7XG4gICAgICAgICAgICB3aW5kb3cuY2xlYXJUaW1lb3V0KHNjcm9sbFBlcnNpc3RUaW1lclJlZi5jdXJyZW50KVxuICAgICAgICAgIH1cbiAgICAgICAgICBzY3JvbGxQZXJzaXN0VGltZXJSZWYuY3VycmVudCA9IHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHBhdGNoTWFpYVBhbmVsU2Vzc2lvbihhdXRoVXNlci5pZCwge1xuICAgICAgICAgICAgICBzY3JvbGxUb3AsXG4gICAgICAgICAgICAgIHNjcm9sbFNlc3Npb25JZDogaW5pdGlhbENoYXRJZCxcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfSwgMTUwKVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGlzTmVhckJvdHRvbSAmJiBvblNjcm9sbFRvQm90dG9tKSB7XG4gICAgICAgICAgb25TY3JvbGxUb0JvdHRvbSgpXG4gICAgICAgIH1cblxuICAgICAgICBoYW5kbGVTY3JvbGwoY29udGFpbmVyKVxuICAgICAgfSlcbiAgICB9LFxuICAgIFthdXRoVXNlci5pZCwgZHJhaW5UdXJuU3BhY2UsIGhhbmRsZVNjcm9sbCwgaW5pdGlhbENoYXRJZCwgb25TY3JvbGxUb0JvdHRvbSwgdXBkYXRlU2Nyb2xsQWZmb3JkYW5jZXNdXG4gIClcblxuICAvLyByZWZzIHRvIHN0YWJpbGl6ZSBmdW5jdGlvbnMgYW5kIGF2b2lkIHVubmVjZXNzYXJ5IHJlLXJlbmRlcnNcbiAgY29uc3Qgc2VuZE1lc3NhZ2VSZWYgPSB1c2VSZWYoc2VuZE1lc3NhZ2UpXG4gIGNvbnN0IHN0b3BHZW5lcmF0aW9uUmVmID0gdXNlUmVmKHN0b3BHZW5lcmF0aW9uKVxuICBjb25zdCBvblNlbmRNZXNzYWdlUmVhZHlSZWYgPSB1c2VSZWYob25TZW5kTWVzc2FnZVJlYWR5KVxuICBjb25zdCBzZW5kTWVzc2FnZVByb3h5UmVmID0gdXNlUmVmKFxuICAgIChcbiAgICAgIG1lc3NhZ2U6IHN0cmluZyxcbiAgICAgIGF0dGFjaG1lbnRzPzogQXR0YWNobWVudEZpbGVbXSxcbiAgICAgIGZhcUlkPzogc3RyaW5nLFxuICAgICAgYWdlbnRTdWdnZXN0aW9uSWQ/OiBzdHJpbmcsXG4gICAgICBtZW50aW9ucz86IENvbnRleHRNZW50aW9uW10sXG4gICAgICBmdWFJZD86IHN0cmluZyxcbiAgICAgIHNjSWQ/OiBzdHJpbmdcbiAgICApID0+IHNlbmRNZXNzYWdlUmVmLmN1cnJlbnQobWVzc2FnZSwgYXR0YWNobWVudHMsIGZhcUlkLCBhZ2VudFN1Z2dlc3Rpb25JZCwgbWVudGlvbnMsIGZ1YUlkLCBzY0lkKVxuICApXG4gIGNvbnN0IHN0b3BHZW5lcmF0aW9uUHJveHlSZWYgPSB1c2VSZWYoKCkgPT4gc3RvcEdlbmVyYXRpb25SZWYuY3VycmVudCgpKVxuXG4gIC8vIHVwZGF0ZSByZWZzIHdoZW4gZnVuY3Rpb25zIGNoYW5nZVxuICBzZW5kTWVzc2FnZVJlZi5jdXJyZW50ID0gc2VuZE1lc3NhZ2VcbiAgc3RvcEdlbmVyYXRpb25SZWYuY3VycmVudCA9IHN0b3BHZW5lcmF0aW9uXG4gIG9uU2VuZE1lc3NhZ2VSZWFkeVJlZi5jdXJyZW50ID0gb25TZW5kTWVzc2FnZVJlYWR5XG5cbiAgLyoqXG4gICAqIGBoYW5kbGVTdWdnZXN0aW9uQ2xpY2tgIHNlIHBhc2EgYSBUT0RPUyBsb3MgTWVzc2FnZUl0ZW0sIGFzw60gcXVlIHN1IGlkZW50aWRhZFxuICAgKiBkZWNpZGUgc2kgZWwgYG1lbW9gIGRlIGxhIGxpc3RhIHNvc3RpZW5lLiBMZWVtb3MgcG9yIHJlZiBsbyBxdWUgY2FtYmlhIGVuIGNhZGFcbiAgICogdXBkYXRlIChgbWVzc2FnZXNgLCBgc2VuZE1lc3NhZ2VgLCBsYXMgc3VnZXJlbmNpYXMgeWEgZWxlZ2lkYXMpIHBhcmEgcXVlIGVsXG4gICAqIGNhbGxiYWNrIHNlYSBlc3RhYmxlOiBzaSBubywgYWwgdGVybWluYXIgZWwgc3RyZWFtIHNlIHJlcGludGEgZWwgY2hhdCBlbnRlcm9cbiAgICogeSBjYWRhIE1haWFTdHJlYW1kb3duIHZ1ZWx2ZSBhIHBhcnNlYXIgc3UgbWFya2Rvd24uXG4gICAqL1xuICBjb25zdCBtZXNzYWdlc0RhdGFSZWYgPSB1c2VSZWYobWVzc2FnZXMpXG4gIG1lc3NhZ2VzRGF0YVJlZi5jdXJyZW50ID0gbWVzc2FnZXNcbiAgY29uc3Qgc2VsZWN0ZWRTdWdnZXN0aW9uTWVzc2FnZUlkc1JlZiA9IHVzZVJlZihzZWxlY3RlZFN1Z2dlc3Rpb25NZXNzYWdlSWRzKVxuICBzZWxlY3RlZFN1Z2dlc3Rpb25NZXNzYWdlSWRzUmVmLmN1cnJlbnQgPSBzZWxlY3RlZFN1Z2dlc3Rpb25NZXNzYWdlSWRzXG5cbiAgY29uc3QgaGFuZGxlU3VnZ2VzdGlvbkNsaWNrID0gdXNlQ2FsbGJhY2soXG4gICAgKG1lc3NhZ2VJZDogc3RyaW5nLCBzdWdnZXN0aW9uOiBzdHJpbmcpID0+IHtcbiAgICAgIGlmICghc3VnZ2VzdGlvbj8udHJpbSgpKSByZXR1cm5cbiAgICAgIGlmIChzZWxlY3RlZFN1Z2dlc3Rpb25NZXNzYWdlSWRzUmVmLmN1cnJlbnRbbWVzc2FnZUlkXSkgcmV0dXJuXG4gICAgICBjb25zdCBjdXJyZW50TWVzc2FnZXMgPSBtZXNzYWdlc0RhdGFSZWYuY3VycmVudFxuICAgICAgY29uc3QgaXNNYXJrZXRwbGFjZUdsb2JhbEFnZW50ID0gaXNNYWlha2VyQWdlbnQoYWdlbnQpXG4gICAgICBldmVudChFVkVOVFMuYWlDaGF0U3VnZ2VzdGVkQW5zd2VyLCB7XG4gICAgICAgIGFnZW50X3R5cGU6IGlzTWFya2V0cGxhY2VHbG9iYWxBZ2VudCA/ICdtYXJrZXRwbGFjZScgOiBhZ2VudD8udHlwZSxcbiAgICAgIH0pXG4gICAgICBzZXRTZWxlY3RlZFN1Z2dlc3Rpb25NZXNzYWdlSWRzKHByZXYgPT4gKHsgLi4ucHJldiwgW21lc3NhZ2VJZF06IHRydWUgfSkpXG5cbiAgICAgIGNvbnN0IHRhcmdldE1lc3NhZ2UgPSBjdXJyZW50TWVzc2FnZXMuZmluZChtc2cgPT4gbXNnLmlkID09PSBtZXNzYWdlSWQpXG4gICAgICBjb25zdCBpc1JldHJ5U3VnZ2VzdGlvbiA9ICEhdGFyZ2V0TWVzc2FnZT8uaXNFcnJvciAmJiBzdWdnZXN0aW9uID09PSB0KCdjaGF0LnJldHJ5JylcbiAgICAgIGlmIChpc1JldHJ5U3VnZ2VzdGlvbikge1xuICAgICAgICBjb25zdCBsYXN0VXNlck1lc3NhZ2UgPSBjdXJyZW50TWVzc2FnZXNcbiAgICAgICAgICAuZmlsdGVyKG1zZyA9PiBtc2cucm9sZSA9PT0gQ2hhdEhpc3RvcnlSb2xlLlVTRVIgfHwgbXNnLnVzZXIuaWQgPT09IGF1dGhVc2VyLmlkLnRvU3RyaW5nKCkpXG4gICAgICAgICAgLmF0KC0xKVxuICAgICAgICBpZiAobGFzdFVzZXJNZXNzYWdlPy5tZXNzYWdlKSB7XG4gICAgICAgICAgY29uc3QgcmV0cnlBdHRhY2htZW50cyA9IEFycmF5LmlzQXJyYXkobGFzdFVzZXJNZXNzYWdlLmF0dGFjaG1lbnRzKVxuICAgICAgICAgICAgPyBsYXN0VXNlck1lc3NhZ2UuYXR0YWNobWVudHNcbiAgICAgICAgICAgIDogQXJyYXkuaXNBcnJheShsYXN0VXNlck1lc3NhZ2Uuc291cmNlcylcbiAgICAgICAgICAgICAgPyBsYXN0VXNlck1lc3NhZ2Uuc291cmNlc1xuICAgICAgICAgICAgICA6IFtdXG4gICAgICAgICAgc2VuZE1lc3NhZ2VSZWYuY3VycmVudChsYXN0VXNlck1lc3NhZ2UubWVzc2FnZSwgcmV0cnlBdHRhY2htZW50cylcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBzZW5kTWVzc2FnZVJlZi5jdXJyZW50KHN1Z2dlc3Rpb24pXG4gICAgfSxcbiAgICBbZXZlbnQsIGFnZW50LCB0LCBhdXRoVXNlci5pZF1cbiAgKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKG9uU2VuZE1lc3NhZ2VSZWFkeVJlZi5jdXJyZW50KSB7XG4gICAgICBvblNlbmRNZXNzYWdlUmVhZHlSZWYuY3VycmVudChcbiAgICAgICAgc2VuZE1lc3NhZ2VQcm94eVJlZi5jdXJyZW50LFxuICAgICAgICBzdG9wR2VuZXJhdGlvblByb3h5UmVmLmN1cnJlbnQsXG4gICAgICAgIHdhaXRpbmdSZXNwb25zZSxcbiAgICAgICAgaXNXcml0aW5nXG4gICAgICApXG4gICAgfVxuICB9LCBbd2FpdGluZ1Jlc3BvbnNlLCBpc1dyaXRpbmddKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaXNMb2FkaW5nTW9yZVJlZi5jdXJyZW50ID0gaXNMb2FkaW5nTW9yZU1lc3NhZ2VzXG4gIH0sIFtpc0xvYWRpbmdNb3JlTWVzc2FnZXNdKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFjaGF0SW5pdGlhbGl6ZWRSZWYuY3VycmVudCkge1xuICAgICAgY2hhdEluaXRpYWxpemVkUmVmLmN1cnJlbnQgPSB0cnVlXG4gICAgICBpbml0aWFsaXplQ2hhdCgpXG4gICAgfVxuICB9LCBbXSlcblxuICAvLyBNaWVudHJhcyBlbCBzdHJlYW0gY3JlY2U6IGVuY29nZXIgZWwgc3BhY2VyIGRlbCB0dXJubyBhbmNsYWRvIHlcbiAgLy8gYWN0dWFsaXphciBmbGVjaGEvZ3JhZGllbnRlcy4gRWwgc2Nyb2xsIG5vIHNlIG11ZXZlIHNvbG8uXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCF3YWl0aW5nUmVzcG9uc2UgJiYgIWlzV3JpdGluZykgcmV0dXJuIHVuZGVmaW5lZFxuICAgIGlmICghbWVzc2FnZXNSZWYuY3VycmVudCkgcmV0dXJuIHVuZGVmaW5lZFxuXG4gICAgbGV0IHJhZklkOiBudW1iZXIgfCBudWxsID0gbnVsbFxuXG4gICAgY29uc3QgdGljayA9ICgpID0+IHtcbiAgICAgIGNvbnN0IGVsID0gbWVzc2FnZXNSZWYuY3VycmVudFxuICAgICAgaWYgKCFlbCkge1xuICAgICAgICByYWZJZCA9IG51bGxcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgICBzeW5jVHVyblNwYWNlKClcbiAgICAgIHVwZGF0ZVNjcm9sbEFmZm9yZGFuY2VzKClcbiAgICAgIHJhZklkID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHRpY2spXG4gICAgfVxuXG4gICAgcmFmSWQgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUodGljaylcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgaWYgKHJhZklkICE9IG51bGwpIGNhbmNlbEFuaW1hdGlvbkZyYW1lKHJhZklkKVxuICAgIH1cbiAgfSwgW3dhaXRpbmdSZXNwb25zZSwgaXNXcml0aW5nLCBzeW5jVHVyblNwYWNlLCB1cGRhdGVTY3JvbGxBZmZvcmRhbmNlc10pXG5cbiAgY29uc3QgbGFzdFJlc2VydmVkUXVlc3Rpb25SZWYgPSB1c2VSZWY8c3RyaW5nIHwgbnVsbD4obnVsbClcblxuICAvLyBDYW1iaW8gZGUgY2hhdDogZWwgYW5jbGEgeSBlbCBzcGFjZXIgZGVsIHR1cm5vIGFudGVyaW9yIGRlamFuIGRlIGFwbGljYXIuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFsb2FkaW5nTWVzc2FnZXMpIHJldHVyblxuICAgIGxhc3RSZXNlcnZlZFF1ZXN0aW9uUmVmLmN1cnJlbnQgPSBudWxsXG4gICAgY2xlYXJUdXJuU3BhY2UoKVxuICB9LCBbbG9hZGluZ01lc3NhZ2VzLCBjbGVhclR1cm5TcGFjZV0pXG5cbiAgLy8gQWwgZW52aWFyIHVuIG1lbnNhamU6IGFuY2xhbW9zIGVsIHR1cm5vIHkgaGFjZW1vcyBlbCDDum5pY28gc2Nyb2xsIGRlbCBjaWNsby5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAobG9hZGluZ01lc3NhZ2VzIHx8IGlzTG9hZGluZ01vcmVNZXNzYWdlcykgcmV0dXJuXG5cbiAgICBsZXQgcXVlc3Rpb25JZDogc3RyaW5nIHwgbnVsbCA9IG51bGxcbiAgICBmb3IgKGxldCBpbmRleCA9IG1lc3NhZ2VzLmxlbmd0aCAtIDE7IGluZGV4ID49IDA7IGluZGV4IC09IDEpIHtcbiAgICAgIGlmIChtZXNzYWdlc1tpbmRleF0/LmlkPy5zdGFydHNXaXRoKCdxdWVzdGlvbi0nKSkge1xuICAgICAgICBxdWVzdGlvbklkID0gbWVzc2FnZXNbaW5kZXhdLmlkXG4gICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgfVxuICAgIGlmICghcXVlc3Rpb25JZCB8fCBxdWVzdGlvbklkID09PSBsYXN0UmVzZXJ2ZWRRdWVzdGlvblJlZi5jdXJyZW50KSByZXR1cm5cblxuICAgIGxhc3RSZXNlcnZlZFF1ZXN0aW9uUmVmLmN1cnJlbnQgPSBxdWVzdGlvbklkXG4gICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHJlc2VydmVUdXJuU3BhY2UocXVlc3Rpb25JZCkpXG4gIH0sIFttZXNzYWdlcywgbG9hZGluZ01lc3NhZ2VzLCBpc0xvYWRpbmdNb3JlTWVzc2FnZXMsIHJlc2VydmVUdXJuU3BhY2VdKVxuXG4gIC8vIFNjcm9sbCBjdWFuZG8gY2FtYmlhbiBsb3MgbWVuc2FqZXM6IGRpc3Rpbmd1ZSBcIm51ZXZvIG1lbnNhamVcIiAoYWdyZWdhZG8pXG4gIC8vIGRlIFwicmVlbXBsYXpvXCIgKG1pc21vIGlkL2xlbmd0aCwgZWouIGZlZWRiYWNrIG8gYXBwcm92YWxTdGF0dXMpLiBFblxuICAvLyByZWVtcGxhem9zIHNvbG8gc2UgcmVjYWxjdWxhIGxhIHZpc2liaWxpZGFkIGRlbCBib3TDs24gc2luIGZvcnphciBzY3JvbGwuXG4gIGNvbnN0IGxhc3RNZXNzYWdlSWRSZWYgPSB1c2VSZWY8c3RyaW5nIHwgbnVsbD4obnVsbClcbiAgY29uc3QgbGFzdE1lc3NhZ2VzTGVuZ3RoUmVmID0gdXNlUmVmPG51bWJlcj4oMClcblxuICAvLyBBbCBjYW1iaWFyIGRlIHNlc2nDs24sIHJlc2V0ZWFyIGVzdGFkbyBkZSBzY3JvbGwgbWFudWFsIHBhcmEgbm8gaGVyZWRhciBlbCBjaGF0IGFudGVyaW9yLlxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIHdhc0xvYWRpbmdNZXNzYWdlc1JlZi5jdXJyZW50ID0gZmFsc2VcbiAgICBsYXN0U2Nyb2xsZWRTZXNzaW9uUmVmLmN1cnJlbnQgPSBudWxsXG4gICAgc2Nyb2xsVGhyZXNob2xkUmVmLmN1cnJlbnQgPSAzOVxuICAgIGxhc3RTY3JvbGxUb3BSZWYuY3VycmVudCA9IDBcbiAgICBsYXN0TWVzc2FnZUlkUmVmLmN1cnJlbnQgPSBudWxsXG4gICAgbGFzdE1lc3NhZ2VzTGVuZ3RoUmVmLmN1cnJlbnQgPSAwXG4gIH0sIFtpbml0aWFsQ2hhdElkXSlcblxuICAvLyBSZXN0YXVyYWNpw7NuIGRlc2RlIGNhY2hlIChzaW4gTG9hZGVyKTogYmFqYXIgYWwgZm9uZG8gYWwgcmVhYnJpciBzZXNpw7NuIHZpc2l0YWRhLlxuICB1c2VMYXlvdXRFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChsb2FkaW5nTWVzc2FnZXMgfHwgIWluaXRpYWxDaGF0SWQgfHwgbWVzc2FnZXMubGVuZ3RoID09PSAwKSByZXR1cm5cbiAgICBpZiAobGFzdFNjcm9sbGVkU2Vzc2lvblJlZi5jdXJyZW50ID09PSBpbml0aWFsQ2hhdElkKSByZXR1cm5cbiAgICBsYXN0U2Nyb2xsZWRTZXNzaW9uUmVmLmN1cnJlbnQgPSBpbml0aWFsQ2hhdElkXG5cbiAgICBzY3JvbGxUaHJlc2hvbGRSZWYuY3VycmVudCA9IDM5XG4gICAgbGFzdE1lc3NhZ2VJZFJlZi5jdXJyZW50ID0gbWVzc2FnZXNbbWVzc2FnZXMubGVuZ3RoIC0gMV0/LmlkID8/IG51bGxcbiAgICBsYXN0TWVzc2FnZXNMZW5ndGhSZWYuY3VycmVudCA9IG1lc3NhZ2VzLmxlbmd0aFxuXG4gICAgc2Nyb2xsVG9Cb3R0b21SYWYoKVxuICAgIHNjcm9sbFRvQm90dG9tUmFmKHsgZGVsYXlNczogMTAwIH0pXG4gIH0sIFtpbml0aWFsQ2hhdElkLCBsb2FkaW5nTWVzc2FnZXMsIG1lc3NhZ2VzLmxlbmd0aCwgbWVzc2FnZXMsIHNjcm9sbFRvQm90dG9tUmFmXSlcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghbWVzc2FnZXNSZWYuY3VycmVudCB8fCBsb2FkaW5nTWVzc2FnZXMgfHwgaXNMb2FkaW5nTW9yZU1lc3NhZ2VzIHx8IGlzTG9hZGluZ01vcmVSZWYuY3VycmVudCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY29uc3QgbGFzdE1lc3NhZ2UgPSBtZXNzYWdlc1ttZXNzYWdlcy5sZW5ndGggLSAxXVxuICAgIGNvbnN0IGxhc3RJZCA9IGxhc3RNZXNzYWdlPy5pZCA/PyBudWxsXG4gICAgY29uc3QgcHJldklkID0gbGFzdE1lc3NhZ2VJZFJlZi5jdXJyZW50XG4gICAgY29uc3QgcHJldkxlbiA9IGxhc3RNZXNzYWdlc0xlbmd0aFJlZi5jdXJyZW50XG4gICAgbGFzdE1lc3NhZ2VJZFJlZi5jdXJyZW50ID0gbGFzdElkXG4gICAgbGFzdE1lc3NhZ2VzTGVuZ3RoUmVmLmN1cnJlbnQgPSBtZXNzYWdlcy5sZW5ndGhcblxuICAgIGNvbnN0IGlzTmV3TWVzc2FnZSA9IGxhc3RJZCAhPT0gcHJldklkIHx8IG1lc3NhZ2VzLmxlbmd0aCAhPT0gcHJldkxlblxuICAgIGlmICghaXNOZXdNZXNzYWdlKSB7XG4gICAgICB1cGRhdGVTY3JvbGxBZmZvcmRhbmNlcygpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICAvLyBUdXJubyBhbmNsYWRvOiBuaSBlbCByZWVtcGxhem8gZGVsIHBsYWNlaG9sZGVyIHBvciBlbCBtZW5zYWplIGZpbmFsLCBuaSBsYVxuICAgIC8vIGFwYXJpY2nDs24gZGVsIEFwcHJvdmFsQm94IG11ZXZlbiBlbCBzY3JvbGwuIFNvbG8gc2UgYWp1c3RhIGVsIHNwYWNlci5cbiAgICBpZiAoYW5jaG9yZWRUdXJuSWRSZWYuY3VycmVudCkge1xuICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHN5bmNUdXJuU3BhY2UpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICAvLyBNaWVudHJhcyBlbCBhZ2VudGUgcmVzcG9uZGUgbm8gZW1wdWphbW9zIGVsIHNjcm9sbDogZWwgdXN1YXJpbyBzZSBxdWVkYVxuICAgIC8vIGRvbmRlIGVzdMOhIHkgdXNhIGVsIGJvdMOzbiBzaSBxdWllcmUgaXIgYWwgZm9uZG8uXG4gICAgaWYgKHdhaXRpbmdSZXNwb25zZSB8fCBpc1dyaXRpbmcpIHtcbiAgICAgIHVwZGF0ZVNjcm9sbEFmZm9yZGFuY2VzKClcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IGNvbnRhaW5lciA9IG1lc3NhZ2VzUmVmLmN1cnJlbnRcbiAgICBjb25zdCBpc0F0Qm90dG9tID0gY29udGFpbmVyLnNjcm9sbEhlaWdodCAtIGNvbnRhaW5lci5zY3JvbGxUb3AgPD0gY29udGFpbmVyLmNsaWVudEhlaWdodCArIDEwMFxuICAgIGNvbnN0IGhhc0luaXRpYWxNZXNzYWdlID0gbWVzc2FnZXMuc29tZShtc2cgPT4gbXNnLmlkID09PSAndXNlci1pbml0aWFsLW1lc3NhZ2UnKVxuICAgIGNvbnN0IGlzQXBwcm92YWwgPSAhIWxhc3RNZXNzYWdlICYmIChsYXN0TWVzc2FnZS5pZC5zdGFydHNXaXRoKCdhcHByb3ZhbC0nKSB8fCAhIWxhc3RNZXNzYWdlLmFwcHJvdmFsKVxuICAgIGNvbnN0IGlzQW5zd2VyT3JRdWVzdGlvbiA9XG4gICAgICAhIWxhc3RNZXNzYWdlICYmIChsYXN0TWVzc2FnZS5pZC5zdGFydHNXaXRoKCdhbnN3ZXItJykgfHwgbGFzdE1lc3NhZ2UuaWQuc3RhcnRzV2l0aCgncXVlc3Rpb24tJykpXG5cbiAgICAvLyBOdWV2b3MgYW5zd2VyL3F1ZXN0aW9uOiBzY3JvbGwgc2kgZWwgdXN1YXJpbyB5YSBlc3RhYmEgYWwgZm9uZG8uXG4gICAgaWYgKGlzQW5zd2VyT3JRdWVzdGlvbiAmJiBpc0F0Qm90dG9tKSB7XG4gICAgICBzY3JvbGxUb0JvdHRvbVJhZigpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICAvLyBDYXNvIGJvcmRlOiBjYW1iaW9zIGRlIG1lbnNhamVzIHNpbiBzZXIgbnVldm8gYW5zd2VyL3VzZXIvYXBwcm92YWxcbiAgICAvLyBwZXJvIHPDrSB1biBtZW5zYWplIG51ZXZvIChubyBlbCBcInVzZXItaW5pdGlhbC1tZXNzYWdlXCIpLiBTY3JvbGxlYS5cbiAgICBpZiAoIWlzQW5zd2VyT3JRdWVzdGlvbiAmJiAhaXNBcHByb3ZhbCAmJiAhaGFzSW5pdGlhbE1lc3NhZ2UgJiYgbWVzc2FnZXMubGVuZ3RoID4gcHJldkxlbikge1xuICAgICAgc2Nyb2xsVG9Cb3R0b21SYWYoKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgdXBkYXRlU2Nyb2xsQWZmb3JkYW5jZXMoKVxuICB9LCBbXG4gICAgbWVzc2FnZXMsXG4gICAgbG9hZGluZ01lc3NhZ2VzLFxuICAgIGlzTG9hZGluZ01vcmVNZXNzYWdlcyxcbiAgICB3YWl0aW5nUmVzcG9uc2UsXG4gICAgaXNXcml0aW5nLFxuICAgIHNjcm9sbFRvQm90dG9tUmFmLFxuICAgIHN5bmNUdXJuU3BhY2UsXG4gICAgdXBkYXRlU2Nyb2xsQWZmb3JkYW5jZXMsXG4gIF0pXG5cbiAgLy8gQWwgYWJyaXIvY2FyZ2FyIHVuYSBjb252ZXJzYWNpw7NuIGVsIGNvbnRlbmVkb3Igc2UgcmVtb250YSAoTG9hZGVyIOKGkiBsaXN0YSkgY29uXG4gIC8vIHNjcm9sbFRvcD0wLiBGb3J6YW1vcyBpciBhbCBmb25kbyBhbCB0ZXJtaW5hciBsb2FkTWVzc2FnZXMsIHNpbiBhZmVjdGFyIHBhZ2luYWNpw7NuIGhhY2lhIGFycmliYS5cbiAgdXNlTGF5b3V0RWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBqdXN0RmluaXNoZWRMb2FkaW5nID0gd2FzTG9hZGluZ01lc3NhZ2VzUmVmLmN1cnJlbnQgJiYgIWxvYWRpbmdNZXNzYWdlc1xuICAgIHdhc0xvYWRpbmdNZXNzYWdlc1JlZi5jdXJyZW50ID0gbG9hZGluZ01lc3NhZ2VzXG5cbiAgICBpZiAoIWp1c3RGaW5pc2hlZExvYWRpbmcgfHwgbWVzc2FnZXMubGVuZ3RoID09PSAwKSByZXR1cm5cblxuICAgIHNjcm9sbFRocmVzaG9sZFJlZi5jdXJyZW50ID0gMzlcbiAgICBsYXN0TWVzc2FnZUlkUmVmLmN1cnJlbnQgPSBtZXNzYWdlc1ttZXNzYWdlcy5sZW5ndGggLSAxXT8uaWQgPz8gbnVsbFxuICAgIGxhc3RNZXNzYWdlc0xlbmd0aFJlZi5jdXJyZW50ID0gbWVzc2FnZXMubGVuZ3RoXG5cbiAgICBzY3JvbGxUb0JvdHRvbVJhZigpXG4gICAgc2Nyb2xsVG9Cb3R0b21SYWYoeyBkZWxheU1zOiAxMDAgfSlcbiAgfSwgW2xvYWRpbmdNZXNzYWdlcywgbWVzc2FnZXMubGVuZ3RoLCBzY3JvbGxUb0JvdHRvbVJhZl0pXG5cbiAgLy8gRXN0YWRvIGluaWNpYWwgZGVsIGJvdMOzbiBzY3JvbGwtdG8tYm90dG9tIGFsIHRlcm1pbmFyIGxvYWRpbmdNZXNzYWdlcy5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoIWxvYWRpbmdNZXNzYWdlcykge1xuICAgICAgdXBkYXRlU2Nyb2xsQWZmb3JkYW5jZXMoKVxuICAgIH1cbiAgfSwgW2xvYWRpbmdNZXNzYWdlcywgbWVzc2FnZXMubGVuZ3RoLCB1cGRhdGVTY3JvbGxBZmZvcmRhbmNlc10pXG5cbiAgLy8gT2J0ZW5lciBlbCDDumx0aW1vIG1lbnNhamUgZGVsIHVzdWFyaW8gcGFyYSB2ZXJpZmljYXIgc2kgdGllbmUgYXR0YWNobWVudHNcbiAgY29uc3QgbGFzdFVzZXJNZXNzYWdlID0gbWVzc2FnZXNcbiAgICAuZmlsdGVyKG1zZyA9PiBtc2cucm9sZSA9PT0gQ2hhdEhpc3RvcnlSb2xlLlVTRVIgfHwgbXNnLnVzZXIuaWQgPT09IGF1dGhVc2VyLmlkLnRvU3RyaW5nKCkpXG4gICAgLmF0KC0xKVxuXG4gIGNvbnN0IGF0dGFjaG1lbnRzQ291bnQgPVxuICAgIChBcnJheS5pc0FycmF5KGxhc3RVc2VyTWVzc2FnZT8uYXR0YWNobWVudHMpID8gbGFzdFVzZXJNZXNzYWdlLmF0dGFjaG1lbnRzLmxlbmd0aCA6IDApIHx8XG4gICAgKEFycmF5LmlzQXJyYXkobGFzdFVzZXJNZXNzYWdlPy5zb3VyY2VzKSA/IGxhc3RVc2VyTWVzc2FnZS5zb3VyY2VzLmxlbmd0aCA6IDApXG5cbiAgY29uc3Qgc3RyZWFtTG9hZGluZ0Rpc3BsYXkgPSByZXNvbHZlU3RyZWFtTG9hZGluZ0Rpc3BsYXkoe1xuICAgIHN0cmVhbUFjdGl2aXR5LFxuICAgIGxvYWRpbmdNZXNzYWdlLFxuICAgIGFjdGl2ZUxvYWRpbmdzOiBhY3RpdmVMb2FkaW5ncyB8fCB7fSxcbiAgICB3YWl0aW5nUmVzcG9uc2UsXG4gICAgaXNXZWJTZWFyY2hBY3RpdmUsXG4gICAgaXNEZWVwU2VhcmNoQWN0aXZlLFxuICAgIGhhc0F0dGFjaG1lbnRzOiBCb29sZWFuKGF0dGFjaG1lbnRzQ291bnQpLFxuICAgIGF0dGFjaG1lbnRzQ291bnQsXG4gICAgdCxcbiAgfSlcblxuICBjb25zdCBpc1Njcm9sbE9uUGFyZW50ID0gISFleHBhbmRlZFxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFpbml0aWFsQ2hhdElkKSB7XG4gICAgICBwZW5kaW5nU2Nyb2xsUmVzdG9yZVJlZi5jdXJyZW50ID0gbnVsbFxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGNvbnN0IHNlc3Npb24gPSByZWFkTWFpYVBhbmVsU2Vzc2lvbihhdXRoVXNlci5pZClcbiAgICBpZiAoc2Vzc2lvbj8uc2Nyb2xsU2Vzc2lvbklkID09PSBpbml0aWFsQ2hhdElkICYmIHR5cGVvZiBzZXNzaW9uLnNjcm9sbFRvcCA9PT0gJ251bWJlcicgJiYgc2Vzc2lvbi5zY3JvbGxUb3AgPiAwKSB7XG4gICAgICBwZW5kaW5nU2Nyb2xsUmVzdG9yZVJlZi5jdXJyZW50ID0gc2Vzc2lvbi5zY3JvbGxUb3BcbiAgICB9XG4gIH0sIFthdXRoVXNlci5pZCwgaW5pdGlhbENoYXRJZF0pXG5cbiAgdXNlTGF5b3V0RWZmZWN0KCgpID0+IHtcbiAgICBpZiAobG9hZGluZ01lc3NhZ2VzIHx8IHBlbmRpbmdTY3JvbGxSZXN0b3JlUmVmLmN1cnJlbnQgPT0gbnVsbCB8fCAhbWVzc2FnZXNSZWYuY3VycmVudCkgcmV0dXJuXG4gICAgbWVzc2FnZXNSZWYuY3VycmVudC5zY3JvbGxUb3AgPSBwZW5kaW5nU2Nyb2xsUmVzdG9yZVJlZi5jdXJyZW50XG4gICAgbGFzdFNjcm9sbFRvcFJlZi5jdXJyZW50ID0gcGVuZGluZ1Njcm9sbFJlc3RvcmVSZWYuY3VycmVudFxuICAgIHBlbmRpbmdTY3JvbGxSZXN0b3JlUmVmLmN1cnJlbnQgPSBudWxsXG4gIH0sIFtsb2FkaW5nTWVzc2FnZXMsIG1lc3NhZ2VzLmxlbmd0aF0pXG5cbiAgLy8gQWwgZXhwYW5kaXIvY29udHJhZXIgZWwgbW9kYWwgZWwgcmVmIHBhc2EgYSBvdHJvIGNvbnRlbmVkb3IgKHNjcm9sbFRvcCBzZSByZXNldGVhIGEgMCkuXG4gIC8vIFJlc3RhdXJhciBsYSBwb3NpY2nDs24gZGUgc2Nyb2xsIGFudGVzIGRlbCBwYWludCBwYXJhIGV2aXRhciBxdWUgbGEgY29udmVyc2FjacOzbiBzYWx0ZSBhcnJpYmEuXG4gIGNvbnN0IGV4cGFuZGVkUmVmID0gdXNlUmVmKGV4cGFuZGVkKVxuICB1c2VMYXlvdXRFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChleHBhbmRlZFJlZi5jdXJyZW50ICE9PSBleHBhbmRlZCAmJiBtZXNzYWdlc1JlZi5jdXJyZW50KSB7XG4gICAgICBjb25zdCBzYXZlZFNjcm9sbFRvcCA9IGxhc3RTY3JvbGxUb3BSZWYuY3VycmVudFxuICAgICAgbWVzc2FnZXNSZWYuY3VycmVudC5zY3JvbGxUb3AgPSBzYXZlZFNjcm9sbFRvcFxuICAgICAgZXhwYW5kZWRSZWYuY3VycmVudCA9IGV4cGFuZGVkXG4gICAgfSBlbHNlIHtcbiAgICAgIGV4cGFuZGVkUmVmLmN1cnJlbnQgPSBleHBhbmRlZFxuICAgIH1cbiAgfSwgW2V4cGFuZGVkXSlcblxuICBpZiAobG9hZGluZ01lc3NhZ2VzKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxGYWRlIGZpbGw+XG4gICAgICAgIDxMb2FkZXIgLz5cbiAgICAgIDwvRmFkZT5cbiAgICApXG4gIH1cblxuICBjb25zdCBsYXN0TWVzc2FnZSA9IG1lc3NhZ2VzW21lc3NhZ2VzLmxlbmd0aCAtIDFdXG4gIGNvbnN0IGhhc01lc3NhZ2VMZXZlbEluZGljYXRvciA9XG4gICAgISFsYXN0TWVzc2FnZSAmJiBpc1N0cmVhbWluZ1BsYWNlaG9sZGVyTWVzc2FnZUlkKGxhc3RNZXNzYWdlLmlkKSAmJiAod2FpdGluZ1Jlc3BvbnNlIHx8IGlzV3JpdGluZylcblxuICBjb25zdCBtZXNzYWdlc0NvbnRlbnQgPSAoXG4gICAgPD5cbiAgICAgIHtpc0xvYWRpbmdNb3JlTWVzc2FnZXMgJiYgPExvYWRpbmdUZXh0IHRleHQ9e3QoJ2NoYXQubG9hZGluZ01vcmUnKX0gLz59XG4gICAgICA8PlxuICAgICAgICB7bWVzc2FnZXMubWFwKChtZXNzYWdlLCBpbmRleCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGlzQXNzaXN0YW50TWVzc2FnZSA9IG1lc3NhZ2Uucm9sZSA9PT0gQ2hhdEhpc3RvcnlSb2xlLkFTU0lTVEFOVCB8fCBtZXNzYWdlLnVzZXIuaWQgPT09ICdhc3Npc3RhbnQnXG4gICAgICAgICAgY29uc3QgaXNMYXN0TWVzc2FnZSA9IGluZGV4ID09PSBtZXNzYWdlcy5sZW5ndGggLSAxXG4gICAgICAgICAgY29uc3QgaXNTdHJlYW1pbmdQbGFjZWhvbGRlciA9XG4gICAgICAgICAgICBpc0Fzc2lzdGFudE1lc3NhZ2UgJiYgaXNMYXN0TWVzc2FnZSAmJiBpc1N0cmVhbWluZ1BsYWNlaG9sZGVyTWVzc2FnZUlkKG1lc3NhZ2UuaWQpXG4gICAgICAgICAgY29uc3QgaXNTdHJlYW1pbmcgPSBpc1N0cmVhbWluZ1BsYWNlaG9sZGVyICYmICh3YWl0aW5nUmVzcG9uc2UgfHwgaXNXcml0aW5nKVxuXG4gICAgICAgICAgLy8gTm8gZmlsdHJhciBlbCBwbGFjZWhvbGRlciBkZWwgbWVuc2FqZSBlbiBzdHJlYW1pbmc6IHN1IHRleHRvIHZpdmVcbiAgICAgICAgICAvLyBlbiBlbCBzdHJlYW1pbmdTdG9yZSB5IGBtZXNzYWdlLm1lc3NhZ2VgIGVzICcnIGhhc3RhIGVsIGNvbXBsZXRlLlxuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICFpc1N0cmVhbWluZ1BsYWNlaG9sZGVyICYmXG4gICAgICAgICAgICAhaXNTdHJlYW1pbmcgJiZcbiAgICAgICAgICAgICEobWVzc2FnZS5hdHRhY2htZW50cz8ubGVuZ3RoIHx8IG1lc3NhZ2Uuc291cmNlcz8ubGVuZ3RoKSAmJlxuICAgICAgICAgICAgIW1lc3NhZ2UubWVzc2FnZSAmJlxuICAgICAgICAgICAgIW1lc3NhZ2UucHJvamVjdD8ubmFtZSAmJlxuICAgICAgICAgICAgIW1lc3NhZ2UuYXBwcm92YWxcbiAgICAgICAgICApXG4gICAgICAgICAgICByZXR1cm4gbnVsbFxuXG4gICAgICAgICAgY29uc3QgbWVzc2FnZUZlZWRiYWNrID1cbiAgICAgICAgICAgIG1lc3NhZ2U/Lndhc0hlbHBmdWwgPT09IHVuZGVmaW5lZCB8fCBtZXNzYWdlLndhc0hlbHBmdWwgPT09IG51bGxcbiAgICAgICAgICAgICAgPyBudWxsXG4gICAgICAgICAgICAgIDogbWVzc2FnZS53YXNIZWxwZnVsXG4gICAgICAgICAgICAgICAgPyBGZWVkYmFjay5USFVNQlNfVVBcbiAgICAgICAgICAgICAgICA6IEZlZWRiYWNrLlRIVU1CU19ET1dOXG5cbiAgICAgICAgICAvLyBLZXkgZXN0YWJsZTogc29sbyBtZXNzYWdlLmlkIHBhcmEgZXZpdGFyIHJlbW91bnQgZHVyYW50ZSBzdHJlYW1pbmcgKG1lc3NhZ2UuZGF0ZSBwdWVkZSBjYW1iaWFyKVxuICAgICAgICAgIGNvbnN0IG1lc3NhZ2VLZXkgPSBtZXNzYWdlLmlkID8/IGBtc2ctJHtpbmRleH1gXG5cbiAgICAgICAgICBjb25zdCB0dXJuSWQgPSByZXNvbHZlUmV0cnlUdXJuSWQobWVzc2FnZSlcbiAgICAgICAgICBjb25zdCB1c2VyTWVzc2FnZUZvclJldHJ5ID0gZmluZFVzZXJNZXNzYWdlRm9yUmV0cnkobWVzc2FnZXMsIG1lc3NhZ2UpXG4gICAgICAgICAgY29uc3QgY2FuUmV0cnkgPVxuICAgICAgICAgICAgISF1c2VyTWVzc2FnZUZvclJldHJ5ICYmXG4gICAgICAgICAgICAhaXNTdHJlYW1pbmcgJiZcbiAgICAgICAgICAgICFtZXNzYWdlLmlzRXJyb3IgJiZcbiAgICAgICAgICAgICFtZXNzYWdlLmFwcHJvdmFsICYmXG4gICAgICAgICAgICAobWVzc2FnZS5pc0Zyb250ZW5kQ2FuY2VsbGVkIHx8ICghbWVzc2FnZS5pc19jYW5jZWxsZWQgJiYgISF0dXJuSWQpKVxuXG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxNZXNzYWdlSXRlbVxuICAgICAgICAgICAgICB7Li4ubWVzc2FnZX1cbiAgICAgICAgICAgICAga2V5PXttZXNzYWdlS2V5fVxuICAgICAgICAgICAgICBhdXRoVXNlcj17YXV0aFVzZXJ9XG4gICAgICAgICAgICAgIGhhbmRsZVNlbGVjdE9wdGlvbj17aGFuZGxlU2VsZWN0T3B0aW9ufVxuICAgICAgICAgICAgICBoYW5kbGVGZWVkYmFjaz17aGFuZGxlRmVlZGJhY2t9XG4gICAgICAgICAgICAgIGhhbmRsZUFwcHJvdmFsRGVjaXNpb249e2hhbmRsZUFwcHJvdmFsRGVjaXNpb259XG4gICAgICAgICAgICAgIGhhbmRsZVN1Z2dlc3Rpb25DbGljaz17aGFuZGxlU3VnZ2VzdGlvbkNsaWNrfVxuICAgICAgICAgICAgICBoYW5kbGVSZXRyeT17Y2FuUmV0cnkgPyAoKSA9PiByZXRyeU1lc3NhZ2UobWVzc2FnZSkgOiB1bmRlZmluZWR9XG4gICAgICAgICAgICAgIGhhc1NlbGVjdGVkU3VnZ2VzdGlvbj17ISFzZWxlY3RlZFN1Z2dlc3Rpb25NZXNzYWdlSWRzW21lc3NhZ2UuaWRdfVxuICAgICAgICAgICAgICBkaXNhYmxlRmVlZGJhY2s9e21lc3NhZ2VGZWVkYmFja31cbiAgICAgICAgICAgICAgaXNTdHJlYW1pbmc9e2lzU3RyZWFtaW5nfVxuICAgICAgICAgICAgICBpc0xhc3RNZXNzYWdlPXtpc0xhc3RNZXNzYWdlfVxuICAgICAgICAgICAgICBleHBhbmRlZD17ZXhwYW5kZWR9XG4gICAgICAgICAgICAgIHN0cmVhbUFjdGl2aXR5PXtpc1N0cmVhbWluZyA/IHN0cmVhbUxvYWRpbmdEaXNwbGF5IDogbnVsbH1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgKVxuICAgICAgICB9KX1cbiAgICAgIDwvPlxuICAgICAgeyFoYXNNZXNzYWdlTGV2ZWxJbmRpY2F0b3IgJiYgc3RyZWFtTG9hZGluZ0Rpc3BsYXkgJiYgKFxuICAgICAgICA8U0NMb2FkaW5nTWVzc2FnZXNDb2x1bW4+XG4gICAgICAgICAgPEFnZW50QWN0aXZpdHlJbmRpY2F0b3IgYWN0aXZpdHk9e3N0cmVhbUxvYWRpbmdEaXNwbGF5fSAvPlxuICAgICAgICA8L1NDTG9hZGluZ01lc3NhZ2VzQ29sdW1uPlxuICAgICAgKX1cbiAgICAgIHsvKiBFc3BhY2lvIHF1ZSBsZSBwZXJtaXRlIGEgbGEgcHJlZ3VudGEgc3ViaXIgYWwgdG9wZS4gQWx0dXJhIG1hbmVqYWRhXG4gICAgICAgICAgaW1wZXJhdGl2YW1lbnRlIGRlc2RlIGBzZXRTcGFjZXJIZWlnaHRgOyBhcnJhbmNhIGVuIDAuICovfVxuICAgICAgPFNDVHVyblNwYWNlciByZWY9e3NwYWNlckVsUmVmfSBhcmlhLWhpZGRlbj1cInRydWVcIiAvPlxuICAgIDwvPlxuICApXG5cbiAgcmV0dXJuIChcbiAgICAvLyBTaSBlbCB1c3VhcmlvIG11ZXZlIGVsIHNjcm9sbCBhYm9ydGFtb3MgbGEgYW5pbWFjacOzbiB5IHNvbHRhbW9zIGVsIHR1cm5vOlxuICAgIC8vIG5vIGxlIHBlbGVhbW9zIGVsIGNvbnRyb2wgZGVsIGNvbnRlbmVkb3IuXG4gICAgPFNDTWVzc2FnZXNPdXRlclxuICAgICAgJHNjcm9sbE9uUGFyZW50PXtpc1Njcm9sbE9uUGFyZW50fVxuICAgICAgb25XaGVlbD17aGFuZGxlVXNlclNjcm9sbEludGVudH1cbiAgICAgIG9uVG91Y2hTdGFydD17aGFuZGxlVXNlclNjcm9sbEludGVudH1cbiAgICA+XG4gICAgICA8U0NNZXNzYWdlc0dyYWRpZW50VG9wICRzaG93PXtzaG93VG9wR3JhZGllbnR9IGFyaWEtaGlkZGVuPVwidHJ1ZVwiIC8+XG4gICAgICB7aXNTY3JvbGxPblBhcmVudCA/IChcbiAgICAgICAgPFNDTWVzc2FnZXNTY3JvbGwgcmVmPXttZXNzYWdlc1JlZn0gb25TY3JvbGw9e2hhbmRsZVNjcm9sbFRvQm90dG9tfT5cbiAgICAgICAgICA8U0NNZXNzYWdlc0lubmVyICRzY3JvbGxPblBhcmVudD17aXNTY3JvbGxPblBhcmVudH0gJHNraXBFbnRlcj17c2tpcEVudGVyQW5pbWF0aW9ufT5cbiAgICAgICAgICAgIHttZXNzYWdlc0NvbnRlbnR9XG4gICAgICAgICAgPC9TQ01lc3NhZ2VzSW5uZXI+XG4gICAgICAgIDwvU0NNZXNzYWdlc1Njcm9sbD5cbiAgICAgICkgOiAoXG4gICAgICAgIDxTQ01lc3NhZ2VzSW5uZXJcbiAgICAgICAgICByZWY9e21lc3NhZ2VzUmVmfVxuICAgICAgICAgIG9uU2Nyb2xsPXtoYW5kbGVTY3JvbGxUb0JvdHRvbX1cbiAgICAgICAgICAkc2Nyb2xsT25QYXJlbnQ9e2ZhbHNlfVxuICAgICAgICAgICRza2lwRW50ZXI9e3NraXBFbnRlckFuaW1hdGlvbn1cbiAgICAgICAgPlxuICAgICAgICAgIHttZXNzYWdlc0NvbnRlbnR9XG4gICAgICAgIDwvU0NNZXNzYWdlc0lubmVyPlxuICAgICAgKX1cblxuICAgICAgPFNDTWVzc2FnZXNHcmFkaWVudEJvdHRvbSAkc2hvdz17c2hvd0JvdHRvbUdyYWRpZW50fSBhcmlhLWhpZGRlbj1cInRydWVcIiAvPlxuXG4gICAgICB7c2hvd1Njcm9sbFRvQm90dG9tICYmIChcbiAgICAgICAgPFNjcm9sbFRvQm90dG9tQnV0dG9uIHR5cGU9XCJidXR0b25cIiBvbkNsaWNrPXtoYW5kbGVDbGlja1Njcm9sbFRvQm90dG9tfT5cbiAgICAgICAgICA8U0NTY3JvbGxJY29uU3dhcCAkdmlzaWJsZT17aXNXcml0aW5nfSBhcmlhLWhpZGRlbj5cbiAgICAgICAgICAgIDxTQ1dyaXRpbmdEb3RzPlxuICAgICAgICAgICAgICA8c3BhbiAvPlxuICAgICAgICAgICAgICA8c3BhbiAvPlxuICAgICAgICAgICAgICA8c3BhbiAvPlxuICAgICAgICAgICAgPC9TQ1dyaXRpbmdEb3RzPlxuICAgICAgICAgIDwvU0NTY3JvbGxJY29uU3dhcD5cbiAgICAgICAgICA8U0NTY3JvbGxJY29uU3dhcCAkdmlzaWJsZT17IWlzV3JpdGluZ30gYXJpYS1oaWRkZW4+XG4gICAgICAgICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD17MTJ9IGhlaWdodD17MTJ9IGZpbGw9XCJub25lXCI+XG4gICAgICAgICAgICAgIDxwYXRoXG4gICAgICAgICAgICAgICAgc3Ryb2tlPVwiIzIwMjAyMFwiXG4gICAgICAgICAgICAgICAgc3Ryb2tlTGluZWNhcD1cInJvdW5kXCJcbiAgICAgICAgICAgICAgICBzdHJva2VMaW5lam9pbj1cInJvdW5kXCJcbiAgICAgICAgICAgICAgICBzdHJva2VXaWR0aD17MS41fVxuICAgICAgICAgICAgICAgIGQ9XCJNNiAuNzV2MTAuNU0uNzUgNiA2IDExLjI1IDExLjI1IDZcIlxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgPC9TQ1Njcm9sbEljb25Td2FwPlxuICAgICAgICA8L1Njcm9sbFRvQm90dG9tQnV0dG9uPlxuICAgICAgKX1cbiAgICA8L1NDTWVzc2FnZXNPdXRlcj5cbiAgKVxufVxuXG5leHBvcnQgY29uc3QgQ2hhdEFJTWVzc2FnZXMgPSBSZWFjdC5tZW1vKENoYXRBSU1lc3NhZ2VzSW5uZXIpXG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPQSxLQUFLLElBQVFDLElBQUksRUFBYUMsV0FBVyxFQUFFQyxTQUFTLEVBQUVDLGVBQWUsRUFBRUMsTUFBTSxFQUFFQyxRQUFRLEVBQUFDLGFBQUEsSUFBQUMsY0FBQSxRQUFRLE9BQU87QUFFN0csU0FBU0MsY0FBYyxRQUFRLDJDQUEyQztBQUMxRSxTQUFTQyxXQUFXLFFBQVEscUNBQXFDO0FBQ2pFLFNBQVNDLHNCQUFzQixRQUFRLG9DQUFvQztBQUMzRSxTQUFTQyxtQkFBbUIsUUFBUSxnREFBZ0Q7QUFDcEYsU0FBU0MsY0FBYyxRQUFRLDRCQUE0QjtBQUczRCxTQUFzQkMsZUFBZSxRQUFRLHFCQUFxQjtBQUNsRSxTQUFTQyxzQkFBc0IsRUFBRUMsZ0JBQWdCLFFBQVEsc0NBQXNDO0FBRS9GLFNBQVNDLGNBQWMsUUFBUSxpQ0FBaUM7QUFDaEUsU0FBa0JDLE9BQU8sUUFBUSwyQkFBMkI7QUFFNUQsU0FBU0MsSUFBSSxRQUFRLHFCQUFxQjtBQUMxQyxTQUFTQyxjQUFjLFFBQVEsOENBQThDO0FBQzdFLFNB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VSxRQUFBLGVBQ2pFZixJQUFBLENBQUNyQixlQUFlO1VBQUMrYixlQUFlLEVBQUV6QixnQkFBaUI7VUFBQzhCLFVBQVUsRUFBRXRNLGtCQUFtQjtVQUFBMU4sUUFBQSxFQUNoRndZO1FBQWUsQ0FDRDtNQUFDLENBQ0YsQ0FBQyxnQkFFbkJ2WixJQUFBLENBQUNyQixlQUFlO1FBQ2Q4YixHQUFHLEVBQUV4TCxXQUFZO1FBQ2pCNkwsUUFBUSxFQUFFdEYsb0JBQXFCO1FBQy9Ca0YsZUFBZSxFQUFFLEtBQU07UUFDdkJLLFVBQVUsRUFBRXRNLGtCQUFtQjtRQUFBMU4sUUFBQSxFQUU5QndZO01BQWUsQ0FDRCxDQUNsQixlQUVEdlosSUFBQSxDQUFDWCx3QkFBd0I7UUFBQ3diLEtBQUssRUFBRWpLLGtCQUFtQjtRQUFDLGVBQVk7TUFBTSxDQUFFLENBQUMsRUFFekVSLGtCQUFrQixpQkFDakJoUSxLQUFBLENBQUM5QixvQkFBb0I7UUFBQ3dMLElBQUksRUFBQyxRQUFRO1FBQUN0SCxPQUFPLEVBQUUrUyx5QkFBMEI7UUFBQXhVLFFBQUEsZ0JBQ3JFZixJQUFBLENBQUN6QixnQkFBZ0I7VUFBQ3ljLFFBQVEsRUFBRXhKLFNBQVU7VUFBQyxtQkFBVztVQUFBelEsUUFBQSxlQUNoRFgsS0FBQSxDQUFDNUIsYUFBYTtZQUFBdUMsUUFBQSxnQkFDWmYsSUFBQSxXQUFPLENBQUMsZUFDUkEsSUFBQSxXQUFPLENBQUMsZUFDUkEsSUFBQSxXQUFPLENBQUM7VUFBQSxDQUNLO1FBQUMsQ0FDQSxDQUFDLGVBQ25CQSxJQUFBLENBQUN6QixnQkFBZ0I7VUFBQ3ljLFFBQVEsRUFBRSxDQUFDeEosU0FBVTtVQUFDLG1CQUFXO1VBQUF6USxRQUFBLGVBQ2pEZixJQUFBO1lBQUtpYixLQUFLLEVBQUMsNEJBQTRCO1lBQUNDLEtBQUssRUFBRSxFQUFHO1lBQUNqSCxNQUFNLEVBQUUsRUFBRztZQUFDb0YsSUFBSSxFQUFDLE1BQU07WUFBQXRZLFFBQUEsZUFDeEVmLElBQUE7Y0FDRW1iLE1BQU0sRUFBQyxTQUFTO2NBQ2hCQyxhQUFhLEVBQUMsT0FBTztjQUNyQkMsY0FBYyxFQUFDLE9BQU87Y0FDdEJDLFdBQVcsRUFBRSxHQUFJO2NBQ2pCQyxDQUFDLEVBQUM7WUFBbUMsQ0FDdEM7VUFBQyxDQUNDO1FBQUMsQ0FDVSxDQUFDO01BQUEsQ0FDQyxDQUN2QjtJQUFBLENBQ2M7RUFBQztBQUV0QixDQUFDO0FBRUQsT0FBTyxJQUFNQyxjQUFjLGdCQUFHOWYsS0FBSyxDQUFDQyxJQUFJLENBQUNxUyxtQkFBbUIsQ0FBQyIsImlnbm9yZUxpc3QiOltdfQ==