@projectcor/maia-components 2.45.0 → 2.45.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 (430) hide show
  1. package/lib/App.js +44 -19
  2. package/lib/components/atoms/ActionableButton.spec.js +111 -0
  3. package/lib/components/atoms/AgentActivityIndicator/AgentActivityIndicator.spec.js +52 -0
  4. package/lib/components/atoms/AgentActivityIndicator/AgentActivityIndicator.utils.spec.js +11 -0
  5. package/lib/components/atoms/ApprovalBox/ApprovalBox.spec.js +135 -0
  6. package/lib/components/atoms/AttachmentCard/AttachmentCard.spec.js +123 -0
  7. package/lib/components/atoms/AttachmentCard/AttachmentCardAudio.helpers.js +65 -0
  8. package/lib/components/atoms/AttachmentCard/AttachmentCardAudio.helpers.spec.js +66 -0
  9. package/lib/components/atoms/AttachmentCard/AttachmentCardAudio.js +5 -51
  10. package/lib/components/atoms/AttachmentCard/AttachmentCardAudio.spec.js +211 -0
  11. package/lib/components/atoms/AttachmentCard/AttachmentCardImage.spec.js +78 -0
  12. package/lib/components/atoms/AttachmentPreviewModal/AttachmentPreviewModal.helpers.js +55 -0
  13. package/lib/components/atoms/AttachmentPreviewModal/AttachmentPreviewModal.helpers.spec.js +41 -0
  14. package/lib/components/atoms/AttachmentPreviewModal/AttachmentPreviewModal.js +18 -76
  15. package/lib/components/atoms/AttachmentPreviewModal/AttachmentPreviewModal.spec.js +253 -0
  16. package/lib/components/atoms/AttachmentPreviewModal/ExcelPreview.spec.js +80 -0
  17. package/lib/components/atoms/AttachmentPreviewModal/PptPreview.helpers.js +31 -0
  18. package/lib/components/atoms/AttachmentPreviewModal/PptPreview.helpers.spec.js +33 -0
  19. package/lib/components/atoms/AttachmentPreviewModal/PptPreview.js +3 -31
  20. package/lib/components/atoms/AttachmentPreviewModal/PptPreview.spec.js +25 -0
  21. package/lib/components/atoms/AttachmentPreviewModal/WordPreview.helpers.js +4 -0
  22. package/lib/components/atoms/AttachmentPreviewModal/WordPreview.helpers.spec.js +11 -0
  23. package/lib/components/atoms/AttachmentPreviewModal/WordPreview.js +2 -4
  24. package/lib/components/atoms/AttachmentPreviewModal/WordPreview.spec.js +77 -0
  25. package/lib/components/atoms/Backdrop/Backdrop.spec.js +28 -0
  26. package/lib/components/atoms/CardMenu/CardMenu.spec.js +56 -0
  27. package/lib/components/atoms/ChatClientSelector/ChatClientSelector.spec.js +67 -0
  28. package/lib/components/atoms/Checkbox/Checkbox.spec.js +27 -0
  29. package/lib/components/atoms/Chip/Chip.spec.js +82 -0
  30. package/lib/components/atoms/ChipLlm/ChipLlm.spec.js +26 -0
  31. package/lib/components/atoms/ClientSelector/ClientSelector.spec.js +88 -0
  32. package/lib/components/atoms/ContextMentionChip/ContextMentionChip.spec.js +29 -0
  33. package/lib/components/atoms/ContextMentionChip/MentionOverflowLabel.spec.js +46 -0
  34. package/lib/components/atoms/ContextMentionChip/buildChipElement.helpers.js +227 -0
  35. package/lib/components/atoms/ContextMentionChip/buildChipElement.helpers.spec.js +77 -0
  36. package/lib/components/atoms/ContextMentionChip/buildChipElement.js +15 -255
  37. package/lib/components/atoms/ContextMentionChip/buildChipElement.spec.js +81 -0
  38. package/lib/components/atoms/ContextMentionEditor/ContextMentionEditor.helpers.js +31 -0
  39. package/lib/components/atoms/ContextMentionEditor/ContextMentionEditor.helpers.spec.js +48 -0
  40. package/lib/components/atoms/ContextMentionEditor/ContextMentionEditor.js +5 -34
  41. package/lib/components/atoms/ContextMentionEditor/ContextMentionEditor.spec.js +231 -0
  42. package/lib/components/atoms/ContextMentionItem/ContextMentionItem.spec.js +107 -0
  43. package/lib/components/atoms/ContextMentionPopover/ContextMentionPopover.spec.js +136 -0
  44. package/lib/components/atoms/CopyToClipboard.spec.js +74 -0
  45. package/lib/components/atoms/EditableLabel/EditableLabel.spec.js +76 -0
  46. package/lib/components/atoms/EntitySelector/EntitySelector.spec.js +86 -0
  47. package/lib/components/atoms/Expand/Expand.spec.js +57 -0
  48. package/lib/components/atoms/Fade/Fade.spec.js +31 -0
  49. package/lib/components/atoms/FeedbackButton/FeedbackButton.spec.js +75 -0
  50. package/lib/components/atoms/FrequentlyAskedQuestions/FrequentlyAskedQuestions.spec.js +104 -0
  51. package/lib/components/atoms/FrequentlyUsedActions/FrequentlyUsedActions.js +3 -1
  52. package/lib/components/atoms/FrequentlyUsedActions/FrequentlyUsedActions.spec.js +91 -0
  53. package/lib/components/atoms/FrequentlyUsedActions/FrequentlyUsedActions.styles.js +19 -7
  54. package/lib/components/atoms/HelpButton.spec.js +87 -0
  55. package/lib/components/atoms/ImagePreview/ImagePreview.spec.js +96 -0
  56. package/lib/components/atoms/ListMenuOption/ListMenuOption.spec.js +54 -0
  57. package/lib/components/atoms/LoadingFaqs/LoadingFaqs.spec.js +21 -0
  58. package/lib/components/atoms/LoadingSearchClients/LoadingSearchClients.spec.js +20 -0
  59. package/lib/components/atoms/LoadingSearchProjects/LoadingSearchProjects.spec.js +26 -0
  60. package/lib/components/atoms/LoadingText/LoadingText.spec.js +25 -0
  61. package/lib/components/atoms/MAIAButton/MAIAButton.spec.js +42 -0
  62. package/lib/components/atoms/MAIAError/MAIAError.spec.js +27 -0
  63. package/lib/components/atoms/MAIAInput/MAIAInput.helpers.js +12 -0
  64. package/lib/components/atoms/MAIAInput/MAIAInput.helpers.spec.js +26 -0
  65. package/lib/components/atoms/MAIAInput/MAIAInput.js +8 -12
  66. package/lib/components/atoms/MAIAInput/MAIAInput.spec.js +444 -0
  67. package/lib/components/atoms/MAIAInput/MAIAInputEditor.helpers.js +50 -0
  68. package/lib/components/atoms/MAIAInput/MAIAInputEditor.helpers.spec.js +20 -0
  69. package/lib/components/atoms/MAIAInput/MAIAInputEditor.js +8 -60
  70. package/lib/components/atoms/MAIAInput/MAIAInputEditor.spec.js +53 -0
  71. package/lib/components/atoms/MAIAInput/maiaInputLayout.spec.js +22 -0
  72. package/lib/components/atoms/MaiaStreamdown/MaiaStreamdown.spec.js +64 -0
  73. package/lib/components/atoms/MaiaWrapper/MaiaWrapper.spec.js +43 -0
  74. package/lib/components/atoms/MaiaWrapper/MaiaWrapperBase.spec.js +114 -0
  75. package/lib/components/atoms/MaiaWrapper/ModernMaiaWrapper.spec.js +51 -0
  76. package/lib/components/atoms/ModalClientAccess/ModalClientAccess.spec.js +48 -0
  77. package/lib/components/atoms/ModalProject/ModalProject.spec.js +66 -0
  78. package/lib/components/atoms/NextPageLoader.spec.js +37 -0
  79. package/lib/components/atoms/OnboardingModalButton/OnboardingModal.spec.js +20 -0
  80. package/lib/components/atoms/OnboardingModalButton/OnboardingModalButton.helpers.js +17 -0
  81. package/lib/components/atoms/OnboardingModalButton/OnboardingModalButton.helpers.spec.js +35 -0
  82. package/lib/components/atoms/OnboardingModalButton/OnboardingModalButton.js +3 -15
  83. package/lib/components/atoms/OnboardingModalButton/OnboardingModalButton.spec.js +47 -0
  84. package/lib/components/atoms/OptionAccessibility/OptionAccessibility.spec.js +86 -0
  85. package/lib/components/atoms/PrimaryButton.spec.js +42 -0
  86. package/lib/components/atoms/ProjectSelector/ProjectSelector.spec.js +69 -0
  87. package/lib/components/atoms/ReasoningBlock/ReasoningBlock.js +7 -2
  88. package/lib/components/atoms/ReasoningBlock/ReasoningBlock.spec.js +69 -0
  89. package/lib/components/atoms/ReasoningBlock/ReasoningBlock.styles.js +41 -24
  90. package/lib/components/atoms/ReasoningBlock/ReasoningSteps.js +27 -13
  91. package/lib/components/atoms/ReasoningBlock/ReasoningSteps.spec.js +59 -0
  92. package/lib/components/atoms/ReasoningBlock/ReasoningTimeline.js +79 -52
  93. package/lib/components/atoms/ReasoningBlock/ReasoningTimeline.spec.js +170 -0
  94. package/lib/components/atoms/ReasoningBlock/groupParallelSteps.js +9 -11
  95. package/lib/components/atoms/ReasoningBlock/groupParallelSteps.spec.js +199 -0
  96. package/lib/components/atoms/ReasoningBlock/reasoningLeading.js +6 -1
  97. package/lib/components/atoms/ReasoningBlock/reasoningLeading.spec.js +70 -0
  98. package/lib/components/atoms/ReasoningBlock/reasoningLiveNarration.js +36 -15
  99. package/lib/components/atoms/ReasoningBlock/reasoningLiveNarration.spec.js +120 -0
  100. package/lib/components/atoms/ReasoningBlock/reasoningMotion.js +8 -0
  101. package/lib/components/atoms/ReasoningBlock/reasoningTimeline.helpers.js +10 -0
  102. package/lib/components/atoms/ReasoningBlock/reasoningTimeline.helpers.spec.js +31 -0
  103. package/lib/components/atoms/ReasoningBlock/useCollapsibleHeight.js +52 -0
  104. package/lib/components/atoms/ReasoningBlock/useCollapsibleHeight.spec.js +90 -0
  105. package/lib/components/atoms/ReasoningBlock/useReasoningMarkerHandoff.js +29 -0
  106. package/lib/components/atoms/ReasoningBlock/useReasoningMarkerHandoff.spec.js +38 -0
  107. package/lib/components/atoms/SessionGeneratingDot/SessionGeneratingDot.spec.js +16 -0
  108. package/lib/components/atoms/SkillsDropdown/SkillsDropdown.spec.js +107 -0
  109. package/lib/components/atoms/SlashCommandChip/SlashCommandChip.spec.js +24 -0
  110. package/lib/components/atoms/SlashCommandDropdown/SlashCommandDropdown.spec.js +85 -0
  111. package/lib/components/atoms/Switch/Switch.spec.js +41 -0
  112. package/lib/components/atoms/TextArea/CustomTextArea.spec.js +52 -0
  113. package/lib/components/atoms/TextArea/TextArea.spec.js +68 -0
  114. package/lib/components/atoms/ThirdButton.spec.js +29 -0
  115. package/lib/components/atoms/VideoModal/VideoModal.spec.js +68 -0
  116. package/lib/components/atoms/WithAppCfg.spec.js +60 -0
  117. package/lib/components/index.js +2 -1
  118. package/lib/components/molecules/AbmSection/AbmAccessibilitySection/AbmAccessibilitySection.helpers.js +37 -0
  119. package/lib/components/molecules/AbmSection/AbmAccessibilitySection/AbmAccessibilitySection.helpers.spec.js +53 -0
  120. package/lib/components/molecules/AbmSection/AbmAccessibilitySection/AbmAccessibilitySection.js +5 -29
  121. package/lib/components/molecules/AbmSection/AbmAccessibilitySection/AbmAccessibilitySection.spec.js +371 -0
  122. package/lib/components/molecules/AbmSection/AbmGeneralSection.helpers.js +39 -0
  123. package/lib/components/molecules/AbmSection/AbmGeneralSection.helpers.spec.js +57 -0
  124. package/lib/components/molecules/AbmSection/AbmGeneralSection.js +6 -40
  125. package/lib/components/molecules/AbmSection/AbmGeneralSection.spec.js +227 -0
  126. package/lib/components/molecules/AbmSection/AbmKnowledgeSection.helpers.js +86 -0
  127. package/lib/components/molecules/AbmSection/AbmKnowledgeSection.helpers.spec.js +108 -0
  128. package/lib/components/molecules/AbmSection/AbmKnowledgeSection.js +18 -90
  129. package/lib/components/molecules/AbmSection/AbmKnowledgeSection.spec.js +254 -0
  130. package/lib/components/molecules/AbmSection/AbmLoaderFiles.helpers.js +17 -0
  131. package/lib/components/molecules/AbmSection/AbmLoaderFiles.helpers.spec.js +50 -0
  132. package/lib/components/molecules/AbmSection/AbmLoaderFiles.js +5 -15
  133. package/lib/components/molecules/AbmSection/AbmLoaderFiles.spec.js +94 -0
  134. package/lib/components/molecules/AgentInputBlock/AgentInputBlockMessage.js +83 -0
  135. package/lib/components/molecules/AgentInputBlock/AgentInputBlockMessage.styles.js +30 -0
  136. package/lib/components/molecules/AgentInputBlock/index.js +5 -0
  137. package/lib/components/molecules/AgentInputBlock/resolveAgentInputBlock.js +52 -0
  138. package/lib/components/molecules/AgentInputBlock/resolveAgentInputBlock.spec.js +76 -0
  139. package/lib/components/molecules/AgentInputBlock/resolveLegacyContextSession.js +20 -0
  140. package/lib/components/molecules/AgentInputBlock/resolveLegacyContextSession.spec.js +34 -0
  141. package/lib/components/molecules/AgentInputBlock/useAgentChangeModelAction.js +36 -0
  142. package/lib/components/molecules/ChatAIClientSelector/ChatAIClientSelector.spec.js +66 -0
  143. package/lib/components/molecules/ChatAIContent/ChatAIContent.js +7 -3
  144. package/lib/components/molecules/ChatAIContent/ChatAIContent.spec.js +145 -0
  145. package/lib/components/molecules/ChatAIHistory/ChatAIHistory.spec.js +204 -0
  146. package/lib/components/molecules/ChatAIHome/ChatAIHome.js +21 -6
  147. package/lib/components/molecules/ChatAIHome/ChatAIHome.spec.js +246 -0
  148. package/lib/components/molecules/ChatAIHome/ChatAIHomeMaiaker.spec.js +86 -0
  149. package/lib/components/molecules/ChatAIMessages/ChatAICreateAgentActions.spec.js +104 -0
  150. package/lib/components/molecules/ChatAIMessages/ChatAIMessages.helpers.js +54 -0
  151. package/lib/components/molecules/ChatAIMessages/ChatAIMessages.helpers.spec.js +77 -0
  152. package/lib/components/molecules/ChatAIMessages/ChatAIMessages.js +19 -47
  153. package/lib/components/molecules/ChatAIMessages/ChatAIMessages.spec.js +410 -0
  154. package/lib/components/molecules/ChatAIMessages/ChatAISuggestions.spec.js +46 -0
  155. package/lib/components/molecules/ChatAIMessages/newStyles.js +29 -26
  156. package/lib/components/molecules/ChatAIModal/ChatAIModal.helpers.js +147 -4
  157. package/lib/components/molecules/ChatAIModal/ChatAIModal.helpers.spec.js +471 -0
  158. package/lib/components/molecules/ChatAIModal/ChatAIModal.js +64 -108
  159. package/lib/components/molecules/ChatAIModal/ChatAIModal.spec.js +659 -0
  160. package/lib/components/molecules/ChatAIModal/components/ChatAiAgentOptions/ChatAiAgentOptions.helpers.js +5 -0
  161. package/lib/components/molecules/ChatAIModal/components/ChatAiAgentOptions/ChatAiAgentOptions.helpers.spec.js +33 -0
  162. package/lib/components/molecules/ChatAIModal/components/ChatAiAgentOptions/ChatAiAgentOptions.js +3 -2
  163. package/lib/components/molecules/ChatAIModal/components/ChatAiAgentOptions/ChatAiAgentOptions.spec.js +116 -0
  164. package/lib/components/molecules/ChatAIModal/components/ChatAiModalFooter/ChatAiModalFooter.js +15 -153
  165. package/lib/components/molecules/ChatAIModal/components/ChatAiModalFooter/ChatAiModalFooter.spec.js +134 -0
  166. package/lib/components/molecules/ChatAIModal/components/ChatAiModalFooter/ChatAiModalFooter.styles.js +2 -26
  167. package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.helpers.js +30 -0
  168. package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.helpers.spec.js +95 -0
  169. package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.js +76 -86
  170. package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.spec.js +241 -0
  171. package/lib/components/molecules/ChatAIModal/components/MaiaMinimizedPill/MaiaMinimizedPill.spec.js +37 -0
  172. package/lib/components/molecules/ChatAIModal/constants.spec.js +16 -0
  173. package/lib/components/molecules/ChatAIModal/floatingPanelMotion/FloatingPanelMotion.spec.js +22 -0
  174. package/lib/components/molecules/ChatAIModal/floatingPanelMotion/useFloatingPanelDragTilt.spec.js +67 -0
  175. package/lib/components/molecules/ChatAIModal/layout.spec.js +72 -0
  176. package/lib/components/molecules/ChatAIMyAgents/ChatAIMyAgents.spec.js +172 -0
  177. package/lib/components/molecules/ChatAIMySkills/ChatAIMySkills.spec.js +128 -0
  178. package/lib/components/molecules/ChatAIProjectSelector/ChatAIProjectSelector.spec.js +66 -0
  179. package/lib/components/molecules/ChatFooter/ChatFooter.js +10 -4
  180. package/lib/components/molecules/ChatFooter/ChatFooter.spec.js +369 -0
  181. package/lib/components/molecules/ChatFooter/ChatFooterCorAccess.spec.js +10 -0
  182. package/lib/components/molecules/ChatFooter/ChatFooterFaqs.helpers.js +48 -0
  183. package/lib/components/molecules/ChatFooter/ChatFooterFaqs.helpers.spec.js +82 -0
  184. package/lib/components/molecules/ChatFooter/ChatFooterFaqs.js +9 -44
  185. package/lib/components/molecules/ChatFooter/ChatFooterFaqs.spec.js +139 -0
  186. package/lib/components/molecules/ContextMentionInput/ContextMentionInput.spec.js +84 -0
  187. package/lib/components/molecules/MessageFeedback/MessageFeedback.spec.js +116 -0
  188. package/lib/components/molecules/ProjectSummaryChat/ProjectSummaryChat.spec.js +126 -0
  189. package/lib/components/molecules/ProjectSummaryConfig/ProjectSummaryConfig.spec.js +115 -0
  190. package/lib/components/molecules/ProjectSummaryContent/ProjectSummaryContent.spec.js +79 -0
  191. package/lib/components/molecules/ProjectSummaryModal/ProjectSummaryModal.spec.js +37 -0
  192. package/lib/components/molecules/Sidebar/Sidebar.js +41 -23
  193. package/lib/components/molecules/Sidebar/Sidebar.spec.js +453 -0
  194. package/lib/components/organisms/AbmAgentModal/AbmAgentModal.helpers.js +198 -0
  195. package/lib/components/organisms/AbmAgentModal/AbmAgentModal.helpers.spec.js +385 -0
  196. package/lib/components/organisms/AbmAgentModal/AbmAgentModal.js +56 -171
  197. package/lib/components/organisms/AbmAgentModal/AbmAgentModal.spec.js +1125 -0
  198. package/lib/components/organisms/AbmSkillGenerateModal/AbmSkillGenerateModal.spec.js +112 -0
  199. package/lib/components/organisms/AbmSkillModal/AbmSkillModal.spec.js +405 -0
  200. package/lib/components/organisms/ChatAI/ChatAI.spec.js +174 -0
  201. package/lib/components/organisms/ChatAIPage/ChatAIPage.js +525 -0
  202. package/lib/components/organisms/ChatAIPage/ChatAIPage.spec.js +231 -0
  203. package/lib/components/organisms/ChatAIPage/ChatAIPage.styles.js +16 -0
  204. package/lib/components/organisms/ChatAIPage/ChatAIPageHeader.js +253 -0
  205. package/lib/components/organisms/ChatAIPage/ChatAIPageHeader.spec.js +139 -0
  206. package/lib/components/organisms/ChatAIPage/ChatAIPageHeader.styles.js +13 -0
  207. package/lib/components/organisms/ChatAIPage/ChatAIPageHome.js +275 -0
  208. package/lib/components/organisms/ChatAIPage/ChatAIPageHome.spec.js +275 -0
  209. package/lib/components/organisms/ChatAIPage/ChatAIPageHome.styles.js +195 -0
  210. package/lib/components/organisms/ChatAIPage/ChatAIPageHomeActionCardSlot.js +94 -0
  211. package/lib/components/organisms/ChatAIPage/ChatAIPageHomeActionCardSlot.spec.js +69 -0
  212. package/lib/components/organisms/ChatAIPage/ChatAIPageHomeActionCards.skeleton.js +38 -0
  213. package/lib/components/organisms/ChatAIPage/getDaypart.js +9 -0
  214. package/lib/components/organisms/ChatAIPage/getDaypart.spec.js +19 -0
  215. package/lib/components/organisms/ChatAIPage/index.js +3 -0
  216. package/lib/components/organisms/ClientAIButton/ClientAIButton.spec.js +53 -0
  217. package/lib/components/organisms/DeleteAgentModal/DeleteAgentModal.spec.js +59 -0
  218. package/lib/components/organisms/DeleteQuestionModal/DeleteQuestionModal.spec.js +79 -0
  219. package/lib/components/organisms/EditQuestionModal/EditQuestionModal.spec.js +86 -0
  220. package/lib/components/organisms/ModalFileExceeds/ModalFileExceeds.spec.js +49 -0
  221. package/lib/components/organisms/ProjectAIButton/ProjectAIButton.spec.js +67 -0
  222. package/lib/components/organisms/ProjectSummary/ProjectSummary.spec.js +117 -0
  223. package/lib/components/organisms/SnackBar/Snackbar.spec.js +66 -0
  224. package/lib/components/organisms/SourcesInformation/SourceItem.spec.js +19 -0
  225. package/lib/components/organisms/SourcesInformation/SourcesInformationModal.spec.js +52 -0
  226. package/lib/constants/maiaExternalConnectorsAccess.spec.js +29 -0
  227. package/lib/constants/permissions/index.js +2 -2
  228. package/lib/constants/permissions/utils.js +4 -1
  229. package/lib/constants/permissions/utils.spec.js +128 -0
  230. package/lib/dev/DevMaiaPage.js +30 -0
  231. package/lib/dev/DevReasoningTimeline.js +68 -37
  232. package/lib/dev/Providers.js +5 -3
  233. package/lib/hooks/frequentlyUsedActionsCache.js +17 -0
  234. package/lib/hooks/frequentlyUsedActionsCache.spec.js +25 -0
  235. package/lib/hooks/useAccessClient/useAccessClient.spec.js +149 -0
  236. package/lib/hooks/useAgentModel/useAgentModel.spec.js +83 -0
  237. package/lib/hooks/useAgentModel/useCreateAgent.spec.js +231 -0
  238. package/lib/hooks/useAgentModel/useDeleteAgent.spec.js +183 -0
  239. package/lib/hooks/useAgentModel/useUpdateAgent.spec.js +313 -0
  240. package/lib/hooks/useAgentSuggestions.spec.js +89 -0
  241. package/lib/hooks/useCaretPosition.spec.js +58 -0
  242. package/lib/hooks/useChatManager/useChatManager.helpers.js +353 -0
  243. package/lib/hooks/useChatManager/useChatManager.helpers.spec.js +506 -0
  244. package/lib/hooks/useChatManager/useChatManager.js +76 -351
  245. package/lib/hooks/useChatManager/useChatManager.spec.js +1261 -0
  246. package/lib/hooks/useChatMessages/useChatMessages.helpers.js +109 -0
  247. package/lib/hooks/useChatMessages/useChatMessages.helpers.spec.js +176 -0
  248. package/lib/hooks/useChatMessages/useChatMessages.js +12 -82
  249. package/lib/hooks/useChatMessages/useChatMessages.spec.js +379 -0
  250. package/lib/hooks/useChats/useChats.spec.js +208 -0
  251. package/lib/hooks/useClientSearch.helpers.js +36 -0
  252. package/lib/hooks/useClientSearch.helpers.spec.js +52 -0
  253. package/lib/hooks/useClientSearch.js +4 -32
  254. package/lib/hooks/useClientSearch.spec.js +86 -0
  255. package/lib/hooks/useContextMentions.helpers.js +152 -0
  256. package/lib/hooks/useContextMentions.helpers.spec.js +143 -0
  257. package/lib/hooks/useContextMentions.js +2 -163
  258. package/lib/hooks/useContextMentions.spec.js +239 -0
  259. package/lib/hooks/useContextMentions.types.js +2 -0
  260. package/lib/hooks/useContextPinPopover.helpers.js +95 -0
  261. package/lib/hooks/useContextPinPopover.helpers.spec.js +115 -0
  262. package/lib/hooks/useContextPinPopover.js +16 -75
  263. package/lib/hooks/useContextPinPopover.spec.js +159 -0
  264. package/lib/hooks/useContinueLegacyContextInNewChat/index.js +2 -0
  265. package/lib/hooks/useContinueLegacyContextInNewChat/useContinueLegacyContextInNewChat.js +93 -0
  266. package/lib/hooks/useDebounce.spec.js +42 -0
  267. package/lib/hooks/useEntitySearch.helpers.js +359 -0
  268. package/lib/hooks/useEntitySearch.helpers.spec.js +321 -0
  269. package/lib/hooks/useEntitySearch.js +38 -391
  270. package/lib/hooks/useEntitySearch.spec.js +443 -0
  271. package/lib/hooks/useEvent.spec.js +45 -0
  272. package/lib/hooks/useFrequentlyAskedQuestions.spec.js +222 -0
  273. package/lib/hooks/useFrequentlyUsedActions.js +60 -22
  274. package/lib/hooks/useFrequentlyUsedActions.spec.js +135 -0
  275. package/lib/hooks/useIsMaiaPageRoute.js +26 -0
  276. package/lib/hooks/useIsMaiaPageRoute.spec.js +26 -0
  277. package/lib/hooks/useKnowledge/deleteKnowledge.spec.js +122 -0
  278. package/lib/hooks/useKnowledge/downloadKnowledge.spec.js +148 -0
  279. package/lib/hooks/useKnowledge/saveKnowledge.spec.js +104 -0
  280. package/lib/hooks/useKnowledge/useKnowledgeOperations.spec.js +178 -0
  281. package/lib/hooks/useMaiaChatSessionMeta/index.js +2 -0
  282. package/lib/hooks/useMaiaChatSessionMeta/useMaiaChatSessionMeta.js +24 -0
  283. package/lib/hooks/useMentionAllowedTypes.spec.js +89 -0
  284. package/lib/hooks/useMentionPopover.helpers.js +41 -0
  285. package/lib/hooks/useMentionPopover.helpers.spec.js +71 -0
  286. package/lib/hooks/useMentionPopover.js +9 -35
  287. package/lib/hooks/useMentionPopover.spec.js +215 -0
  288. package/lib/hooks/useMinimizedPillBottomOffset.helpers.js +47 -0
  289. package/lib/hooks/useMinimizedPillBottomOffset.helpers.spec.js +132 -0
  290. package/lib/hooks/useMinimizedPillBottomOffset.js +15 -45
  291. package/lib/hooks/useMinimizedPillBottomOffset.spec.js +89 -0
  292. package/lib/hooks/useMinimizedPillNoveltyDot/useMinimizedPillNoveltyDot.spec.js +67 -0
  293. package/lib/hooks/useModal/useModal.spec.js +73 -0
  294. package/lib/hooks/useOrchestratorStream/useOrchestratorStream.spec.js +192 -0
  295. package/lib/hooks/useProjectSearch.helpers.js +61 -0
  296. package/lib/hooks/useProjectSearch.helpers.spec.js +70 -0
  297. package/lib/hooks/useProjectSearch.js +4 -58
  298. package/lib/hooks/useProjectSearch.spec.js +91 -0
  299. package/lib/hooks/useProjectSummary.spec.js +193 -0
  300. package/lib/hooks/useProjectSummaryConfig.helpers.js +62 -0
  301. package/lib/hooks/useProjectSummaryConfig.helpers.spec.js +92 -0
  302. package/lib/hooks/useProjectSummaryConfig.js +14 -52
  303. package/lib/hooks/useProjectSummaryConfig.spec.js +133 -0
  304. package/lib/hooks/useReasoningTrace/reasoningStore.spec.js +112 -0
  305. package/lib/hooks/useRecentClientsSearch.helpers.js +33 -0
  306. package/lib/hooks/useRecentClientsSearch.helpers.spec.js +33 -0
  307. package/lib/hooks/useRecentClientsSearch.js +4 -32
  308. package/lib/hooks/useRecentClientsSearch.spec.js +85 -0
  309. package/lib/hooks/useRecentContexts.spec.js +139 -0
  310. package/lib/hooks/useResize.spec.js +37 -0
  311. package/lib/hooks/useSkillsCatalog.spec.js +88 -0
  312. package/lib/hooks/useSlashCommands.spec.js +139 -0
  313. package/lib/hooks/useSmoothStreamText/useSmoothStreamText.spec.js +101 -0
  314. package/lib/hooks/useSnackBarManager/useSnackBarManager.spec.js +33 -0
  315. package/lib/hooks/useStreamResponse.spec.js +199 -0
  316. package/lib/hooks/useT.spec.js +20 -0
  317. package/lib/hooks/useToggle.spec.js +33 -0
  318. package/lib/hooks/useToggleFavorite/useToggleFavorite.spec.js +171 -0
  319. package/lib/index.js +5 -2
  320. package/lib/lang/br/index.js +26 -1
  321. package/lib/lang/en/index.js +26 -1
  322. package/lib/lang/es/index.js +26 -1
  323. package/lib/lang/fr/index.js +26 -1
  324. package/lib/services/maia/Access/updateAccess.spec.js +137 -0
  325. package/lib/services/maia/Actions/getFrequentlyUsedActions.js +1 -1
  326. package/lib/services/maia/Actions/getFrequentlyUsedActions.spec.js +56 -0
  327. package/lib/services/maia/Actions/getSlashCommands.spec.js +91 -0
  328. package/lib/services/maia/Agents/connectors.spec.js +359 -0
  329. package/lib/services/maia/Agents/createAgent.spec.js +55 -0
  330. package/lib/services/maia/Agents/deleteAgent.spec.js +57 -0
  331. package/lib/services/maia/Agents/fetchAgentDetail.spec.js +108 -0
  332. package/lib/services/maia/Agents/getAgentById.spec.js +190 -0
  333. package/lib/services/maia/Agents/getAgentModels.spec.js +190 -0
  334. package/lib/services/maia/Agents/getAgentSuggestions.spec.js +89 -0
  335. package/lib/services/maia/Agents/getAgents.helpers.js +181 -0
  336. package/lib/services/maia/Agents/getAgents.helpers.spec.js +211 -0
  337. package/lib/services/maia/Agents/getAgents.js +78 -242
  338. package/lib/services/maia/Agents/getAgents.spec.js +697 -0
  339. package/lib/services/maia/Agents/setAgentToolGroups.spec.js +45 -0
  340. package/lib/services/maia/Agents/toggleFavorite.spec.js +59 -0
  341. package/lib/services/maia/Agents/updateAgent.spec.js +48 -0
  342. package/lib/services/maia/Chats/deleteChat.spec.js +31 -0
  343. package/lib/services/maia/Chats/getChatMessages.spec.js +150 -0
  344. package/lib/services/maia/Chats/getChatsByUserId.spec.js +149 -0
  345. package/lib/services/maia/Chats/markSessionAsRead.spec.js +30 -0
  346. package/lib/services/maia/Chats/patchChat.spec.js +41 -0
  347. package/lib/services/maia/Chats/wasHelpfulChat.spec.js +28 -0
  348. package/lib/services/maia/Faqs/getFrequentlyAskedQuestions.spec.js +58 -0
  349. package/lib/services/maia/Knowledge/delete.spec.js +45 -0
  350. package/lib/services/maia/Knowledge/download.spec.js +78 -0
  351. package/lib/services/maia/Knowledge/save.spec.js +58 -0
  352. package/lib/services/maia/Orchestrator/orchestrator.helpers.js +130 -0
  353. package/lib/services/maia/Orchestrator/orchestrator.helpers.spec.js +153 -0
  354. package/lib/services/maia/Orchestrator/orchestrator.js +38 -121
  355. package/lib/services/maia/Orchestrator/orchestrator.spec.js +181 -0
  356. package/lib/services/maia/RecentClients/getRecentClients.spec.js +52 -0
  357. package/lib/services/maia/RecentContexts/getRecentContexts.spec.js +103 -0
  358. package/lib/services/maia/RecentProjects/getRecentProjects.spec.js +82 -0
  359. package/lib/services/maia/RecentTasks/getRecentTasks.spec.js +63 -0
  360. package/lib/services/maia/RecentUsers/getRecentUsers.spec.js +82 -0
  361. package/lib/services/maia/Skills/createSkill.spec.js +68 -0
  362. package/lib/services/maia/Skills/deleteSkill.spec.js +42 -0
  363. package/lib/services/maia/Skills/generateSkill.spec.js +48 -0
  364. package/lib/services/maia/Skills/getSkills.spec.js +152 -0
  365. package/lib/services/maia/Skills/updateSkill.spec.js +62 -0
  366. package/lib/services/maia/client.spec.js +56 -0
  367. package/lib/services/utils/fetchCOR.spec.js +211 -0
  368. package/lib/services/utils/getCookie.spec.js +20 -0
  369. package/lib/services/utils/mapChatMessages.spec.js +254 -0
  370. package/lib/store/chatsSidebarOptimistic.spec.js +112 -0
  371. package/lib/store/maiaLastChatPersistence.spec.js +22 -0
  372. package/lib/store/maiaPanelSessionPersistence.spec.js +62 -0
  373. package/lib/store/sessions/sessionNotificationSound.spec.js +145 -0
  374. package/lib/store/sessions/sessionNotifications.helpers.js +45 -0
  375. package/lib/store/sessions/sessionNotifications.helpers.spec.js +63 -0
  376. package/lib/store/sessions/sessionNotifications.js +35 -41
  377. package/lib/store/sessions/sessionNotifications.spec.js +106 -0
  378. package/lib/store/sessions/sessionStreamManager.js +40 -52
  379. package/lib/store/sessions/sessionStreamManager.spec.js +503 -0
  380. package/lib/store/sessions/sessions.types.spec.js +16 -0
  381. package/lib/store/sessions/useSessionsStore.spec.js +135 -0
  382. package/lib/store/useChatsStore.spec.js +619 -0
  383. package/lib/store/useFaqsStore.spec.js +57 -0
  384. package/lib/styles/cascade.js +29 -3
  385. package/lib/styles/transitions.js +3 -1
  386. package/lib/test/mockSseStream.js +121 -0
  387. package/lib/test/streamdownCodeMock.js +6 -0
  388. package/lib/test/streamdownMock.js +12 -0
  389. package/lib/types/agentModal.js +1 -1
  390. package/lib/types/global.d.js +1 -1
  391. package/lib/utils/actionCategoryMap.spec.js +18 -0
  392. package/lib/utils/agentDisplayName.spec.js +44 -0
  393. package/lib/utils/autoApproveStorage.spec.js +25 -0
  394. package/lib/utils/chatInputFiles.spec.js +39 -0
  395. package/lib/utils/contextMentionIcons.spec.js +41 -0
  396. package/lib/utils/contextMentionLabel.spec.js +13 -0
  397. package/lib/utils/contextMentionTriggers.spec.js +38 -0
  398. package/lib/utils/contextMentionTypeLabel.spec.js +14 -0
  399. package/lib/utils/corConnectorMentionTypes.spec.js +23 -0
  400. package/lib/utils/entityLinkRender.spec.js +72 -0
  401. package/lib/utils/fileDownloadHelper.spec.js +67 -0
  402. package/lib/utils/formatQuickActionMessage.spec.js +27 -0
  403. package/lib/utils/formatUnreadCount.spec.js +12 -0
  404. package/lib/utils/getUnitFileSize.spec.js +18 -0
  405. package/lib/utils/hitlAnalytics.spec.js +100 -0
  406. package/lib/utils/hoursPlannerQuickActionType.js +74 -1
  407. package/lib/utils/hoursPlannerQuickActionType.spec.js +64 -0
  408. package/lib/utils/imagePreprocessor.helpers.js +28 -0
  409. package/lib/utils/imagePreprocessor.helpers.spec.js +28 -0
  410. package/lib/utils/imagePreprocessor.js +12 -37
  411. package/lib/utils/imagePreprocessor.spec.js +112 -0
  412. package/lib/utils/maiaPageRoute.js +24 -0
  413. package/lib/utils/maiaPageRoute.spec.js +23 -0
  414. package/lib/utils/mapBackendLang.spec.js +19 -0
  415. package/lib/utils/navigateContextEntity.spec.js +50 -0
  416. package/lib/utils/normalizeAgentConnectors.spec.js +107 -0
  417. package/lib/utils/orchestratorSubagents.spec.js +32 -0
  418. package/lib/utils/reasoningMappers.spec.js +103 -0
  419. package/lib/utils/recentContextsHomeLimit.spec.js +32 -0
  420. package/lib/utils/renderContextMentions.spec.js +158 -0
  421. package/lib/utils/retryCompletion.spec.js +99 -0
  422. package/lib/utils/skillContentSize.spec.js +13 -0
  423. package/lib/utils/slashCommandMarker.spec.js +43 -0
  424. package/lib/utils/sortManagerHoursHomeFuas.spec.js +51 -0
  425. package/lib/utils/sseStreamContent.spec.js +31 -0
  426. package/lib/utils/streamActivityMessages.js +32 -19
  427. package/lib/utils/streamActivityMessages.spec.js +229 -0
  428. package/lib/utils/validateTrimmedFields.spec.js +26 -0
  429. package/package.json +1 -1
  430. package/README.md +0 -2
@@ -14,7 +14,7 @@ function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length)
14
14
  /* eslint-disable no-constant-condition */
15
15
  /* eslint-disable @typescript-eslint/no-explicit-any */
16
16
  import maia from '../../services/maia';
17
- import { getInitialStreamActivity, getThinkingLoadingMessage, getWritingStreamActivity, resolveHitlNodeStreamActivity, resolveInitialHitlStreamActivity, resolveToolActionLabel } from '../../utils/streamActivityMessages';
17
+ import { getInitialStreamActivity, getThinkingStreamActivity, getWritingStreamActivity, resolveInitialHitlStreamActivity } from '../../utils/streamActivityMessages';
18
18
  import { isCompleteLikeSsePayload, mergeStreamChunk } from '../../utils/sseStreamContent';
19
19
  import { reasoningStore } from '../../hooks/useReasoningTrace';
20
20
  import { sessionStreamingText } from './sessionStreamingText';
@@ -42,13 +42,12 @@ var getActiveStreamCount = function getActiveStreamCount() {
42
42
  };
43
43
  var parseSessionSSE = /*#__PURE__*/function () {
44
44
  var _ref = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee(response, active, params) {
45
- var _params$hitlExecution, _response$body, _data$error, _data$error2, _callbacks$onError, _data$error3, _data$error4;
46
- var sessionId, placeholderId, callbacks, t, hitlExecutionContext, pendingContent, throttleTimer, flushToStores, emitThrottled, flushPending, reader, decoder, buffer, accumulatedContent, hasStartedWriting, ensureWritingStarted, applyStreamChunk, clearStreamLikeAnswerReset, applyStreamComplete, _yield$reader$read, done, value, lines, _iterator, _step, line, _line$split, _line$split2, eventLine, dataLine, eventType, dataStr, data, thinkingDelta, stepTool, stepType, label, chunk, _chunk, _callbacks$onApproval, isPreApproved, _ref3, _t, _t2, _t3;
45
+ var _response$body, _data$error, _data$error2, _callbacks$onError, _data$error3, _data$error4;
46
+ var sessionId, placeholderId, callbacks, t, pendingContent, throttleTimer, flushToStores, emitThrottled, flushPending, reader, decoder, buffer, accumulatedContent, hasStartedWriting, setThinkingActivity, ensureWritingStarted, applyStreamChunk, clearStreamLikeAnswerReset, applyStreamComplete, _yield$reader$read, done, value, lines, _iterator, _step, line, _line$split, _line$split2, eventLine, dataLine, eventType, dataStr, data, thinkingDelta, stepTool, stepType, chunk, _chunk, _callbacks$onApproval, isPreApproved, _ref3, _t, _t2, _t3;
47
47
  return _regeneratorRuntime.wrap(function (_context) {
48
48
  while (1) switch (_context.prev = _context.next) {
49
49
  case 0:
50
50
  sessionId = params.sessionId, placeholderId = params.placeholderId, callbacks = params.callbacks, t = params.t;
51
- hitlExecutionContext = (_params$hitlExecution = params.hitlExecutionContext) !== null && _params$hitlExecution !== void 0 ? _params$hitlExecution : sessionHitlContext.get(sessionId);
52
51
  pendingContent = null;
53
52
  throttleTimer = null;
54
53
  flushToStores = function flushToStores(content) {
@@ -90,17 +89,37 @@ var parseSessionSSE = /*#__PURE__*/function () {
90
89
  buffer = '';
91
90
  accumulatedContent = '';
92
91
  hasStartedWriting = false;
93
- ensureWritingStarted = function ensureWritingStarted() {
94
- var _callbacks$onStartWri;
95
- if (hasStartedWriting) return;
96
- hasStartedWriting = true;
92
+ setThinkingActivity = function setThinkingActivity() {
93
+ var _store$getMeta;
94
+ var thinkingActivity = getThinkingStreamActivity(t);
95
+ var current = (_store$getMeta = store().getMeta(sessionId)) === null || _store$getMeta === void 0 ? void 0 : _store$getMeta.streamActivity;
96
+ if ((current === null || current === void 0 ? void 0 : current.phase) === 'thinking' && current.message === thinkingActivity.message) return;
97
97
  store().patchMeta(sessionId, {
98
- isLoading: true,
99
- isWriting: true
98
+ isLoading: true
100
99
  });
101
- store().setStatus(sessionId, 'writing');
102
- store().setActivity(sessionId, getWritingStreamActivity(t));
103
- (_callbacks$onStartWri = callbacks.onStartWriting) === null || _callbacks$onStartWri === void 0 || _callbacks$onStartWri.call(callbacks);
100
+ store().setStatus(sessionId, 'thinking');
101
+ store().setActivity(sessionId, thinkingActivity);
102
+ };
103
+ ensureWritingStarted = function ensureWritingStarted() {
104
+ var _store$getMeta2;
105
+ if (!hasStartedWriting) {
106
+ var _callbacks$onStartWri;
107
+ hasStartedWriting = true;
108
+ store().patchMeta(sessionId, {
109
+ isLoading: true,
110
+ isWriting: true
111
+ });
112
+ (_callbacks$onStartWri = callbacks.onStartWriting) === null || _callbacks$onStartWri === void 0 || _callbacks$onStartWri.call(callbacks);
113
+ }
114
+ var current = (_store$getMeta2 = store().getMeta(sessionId)) === null || _store$getMeta2 === void 0 ? void 0 : _store$getMeta2.streamActivity;
115
+ if ((current === null || current === void 0 ? void 0 : current.phase) !== 'writing') {
116
+ store().patchMeta(sessionId, {
117
+ isLoading: true,
118
+ isWriting: true
119
+ });
120
+ store().setStatus(sessionId, 'writing');
121
+ store().setActivity(sessionId, getWritingStreamActivity(t));
122
+ }
104
123
  };
105
124
  applyStreamChunk = function applyStreamChunk(chunk) {
106
125
  if (!chunk) return;
@@ -234,16 +253,7 @@ var parseSessionSSE = /*#__PURE__*/function () {
234
253
  if (typeof data.i === 'number' && thinkingDelta) {
235
254
  reasoningStore.appendThinking(placeholderId, data.i, thinkingDelta);
236
255
  }
237
- if (!hasStartedWriting) {
238
- store().patchMeta(sessionId, {
239
- isLoading: true
240
- });
241
- store().setStatus(sessionId, 'thinking');
242
- store().setActivity(sessionId, {
243
- phase: 'thinking',
244
- message: getThinkingLoadingMessage(0, t)
245
- });
246
- }
256
+ setThinkingActivity();
247
257
  return _context.abrupt("continue", 23);
248
258
  case 14:
249
259
  clearStreamLikeAnswerReset();
@@ -252,16 +262,7 @@ var parseSessionSSE = /*#__PURE__*/function () {
252
262
  stepTool = typeof data.tool === 'string' ? data.tool : '';
253
263
  stepType = typeof data.type === 'string' ? data.type : '';
254
264
  if (stepTool && stepType !== 'handoff' && data.status === 'running') {
255
- label = resolveToolActionLabel(stepTool, t, 'present');
256
- if (label) {
257
- store().patchMeta(sessionId, {
258
- isLoading: true
259
- });
260
- store().setActivity(sessionId, {
261
- phase: 'action',
262
- message: label
263
- });
264
- }
265
+ setThinkingActivity();
265
266
  }
266
267
  if (typeof data.i === 'number') {
267
268
  reasoningStore.captureLeadingFromBody(placeholderId, accumulatedContent);
@@ -285,17 +286,8 @@ var parseSessionSSE = /*#__PURE__*/function () {
285
286
  }
286
287
  return _context.abrupt("continue", 23);
287
288
  case 18:
288
- if (data.node === 'agent_transfer') {
289
- store().patchMeta(sessionId, {
290
- isLoading: true
291
- });
292
- store().setStatus(sessionId, 'thinking');
293
- } else if (data.message && typeof data.message === 'string') {
294
- store().patchMeta(sessionId, {
295
- isLoading: true
296
- });
297
- store().setStatus(sessionId, 'thinking');
298
- store().setActivity(sessionId, resolveHitlNodeStreamActivity(data.message, t, hitlExecutionContext !== null && hitlExecutionContext !== void 0 ? hitlExecutionContext : undefined, typeof data.thread_id === 'string' ? data.thread_id : undefined));
289
+ if (data.node === 'agent_transfer' || data.message && typeof data.message === 'string') {
290
+ setThinkingActivity();
299
291
  }
300
292
  return _context.abrupt("continue", 23);
301
293
  case 19:
@@ -320,11 +312,7 @@ var parseSessionSSE = /*#__PURE__*/function () {
320
312
  store().setStatus(sessionId, 'awaiting_approval');
321
313
  (_callbacks$onApproval = callbacks.onApprovalRequired) === null || _callbacks$onApproval === void 0 || _callbacks$onApproval.call(callbacks, data, accumulatedContent);
322
314
  if (isPreApproved && Array.isArray(data.pending_actions) && data.pending_actions.length > 0) {
323
- store().patchMeta(sessionId, {
324
- isLoading: true
325
- });
326
- store().setStatus(sessionId, 'thinking');
327
- store().setActivity(sessionId, resolveInitialHitlStreamActivity(t, hitlExecutionContext !== null && hitlExecutionContext !== void 0 ? hitlExecutionContext : undefined));
315
+ setThinkingActivity();
328
316
  }
329
317
  return _context.abrupt("continue", 23);
330
318
  case 21:
@@ -745,7 +733,7 @@ export var sessionStreamManager = {
745
733
  callbacks === null || callbacks === void 0 || (_callbacks$onStop = callbacks.onStop) === null || _callbacks$onStop === void 0 || _callbacks$onStop.call(callbacks, partialText);
746
734
  },
747
735
  /** Aborta sin marcar "cancelado" (uso interno / limpieza). */abortSilently: function abortSilently(sessionId) {
748
- var _store$getMeta;
736
+ var _store$getMeta3;
749
737
  var active = activeStreams.get(sessionId);
750
738
  if (!active) return;
751
739
  active.isStopped = true;
@@ -757,7 +745,7 @@ export var sessionStreamManager = {
757
745
  isWriting: false
758
746
  });
759
747
  store().setActivity(sessionId, null);
760
- if (((_store$getMeta = store().getMeta(sessionId)) === null || _store$getMeta === void 0 ? void 0 : _store$getMeta.status) !== 'complete') {
748
+ if (((_store$getMeta3 = store().getMeta(sessionId)) === null || _store$getMeta3 === void 0 ? void 0 : _store$getMeta3.status) !== 'complete') {
761
749
  store().setStatus(sessionId, 'idle');
762
750
  }
763
751
  },
@@ -768,4 +756,4 @@ export var sessionStreamManager = {
768
756
  });
769
757
  }
770
758
  };
771
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJtYWlhIiwiZ2V0SW5pdGlhbFN0cmVhbUFjdGl2aXR5IiwiZ2V0VGhpbmtpbmdMb2FkaW5nTWVzc2FnZSIsImdldFdyaXRpbmdTdHJlYW1BY3Rpdml0eSIsInJlc29sdmVIaXRsTm9kZVN0cmVhbUFjdGl2aXR5IiwicmVzb2x2ZUluaXRpYWxIaXRsU3RyZWFtQWN0aXZpdHkiLCJyZXNvbHZlVG9vbEFjdGlvbkxhYmVsIiwiaXNDb21wbGV0ZUxpa2VTc2VQYXlsb2FkIiwibWVyZ2VTdHJlYW1DaHVuayIsInJlYXNvbmluZ1N0b3JlIiwic2Vzc2lvblN0cmVhbWluZ1RleHQiLCJ1c2VTZXNzaW9uc1N0b3JlIiwiZW5zdXJlU2Vzc2lvbk5vdGlmaWNhdGlvbnNJbml0aWFsaXplZCIsInNlc3Npb25IaXRsQ29udGV4dCIsIk1BWF9DT05DVVJSRU5UX1NUUkVBTVMiLCJTVFJFQU1fVEhST1RUTEVfTVMiLCJhY3RpdmVTdHJlYW1zIiwiTWFwIiwic3RvcmUiLCJnZXRTdGF0ZSIsImlzU3RyZWFtQWN0aXZlIiwic2Vzc2lvbklkIiwiaGFzIiwiZ2V0QWN0aXZlU3RyZWFtQ291bnQiLCJzaXplIiwicGFyc2VTZXNzaW9uU1NFIiwiX3JlZiIsIl9hc3luY1RvR2VuZXJhdG9yIiwiX3JlZ2VuZXJhdG9yUnVudGltZSIsIm1hcmsiLCJfY2FsbGVlIiwicmVzcG9uc2UiLCJhY3RpdmUiLCJwYXJhbXMiLCJfcGFyYW1zJGhpdGxFeGVjdXRpb24iLCJfcmVzcG9uc2UkYm9keSIsIl9kYXRhJGVycm9yIiwiX2RhdGEkZXJyb3IyIiwiX2NhbGxiYWNrcyRvbkVycm9yIiwiX2RhdGEkZXJyb3IzIiwiX2RhdGEkZXJyb3I0IiwicGxhY2Vob2xkZXJJZCIsImNhbGxiYWNrcyIsInQiLCJoaXRsRXhlY3V0aW9uQ29udGV4dCIsInBlbmRpbmdDb250ZW50IiwidGhyb3R0bGVUaW1lciIsImZsdXNoVG9TdG9yZXMiLCJlbWl0VGhyb3R0bGVkIiwiZmx1c2hQZW5kaW5nIiwicmVhZGVyIiwiZGVjb2RlciIsImJ1ZmZlciIsImFjY3VtdWxhdGVkQ29udGVudCIsImhhc1N0YXJ0ZWRXcml0aW5nIiwiZW5zdXJlV3JpdGluZ1N0YXJ0ZWQiLCJhcHBseVN0cmVhbUNodW5rIiwiY2xlYXJTdHJlYW1MaWtlQW5zd2VyUmVzZXQiLCJhcHBseVN0cmVhbUNvbXBsZXRlIiwiX3lpZWxkJHJlYWRlciRyZWFkIiwiZG9uZSIsInZhbHVlIiwibGluZXMiLCJfaXRlcmF0b3IiLCJfc3RlcCIsImxpbmUiLCJfbGluZSRzcGxpdCIsIl9saW5lJHNwbGl0MiIsImV2ZW50TGluZSIsImRhdGFMaW5lIiwiZXZlbnRUeXBlIiwiZGF0YVN0ciIsImRhdGEiLCJ0aGlua2luZ0RlbHRhIiwic3RlcFRvb2wiLCJzdGVwVHlwZSIsImxhYmVsIiwiY2h1bmsiLCJfY2h1bmsiLCJfY2FsbGJhY2tzJG9uQXBwcm92YWwiLCJpc1ByZUFwcHJvdmVkIiwiX3JlZjMiLCJfdCIsIl90MiIsIl90MyIsIndyYXAiLCJfY29udGV4dCIsInByZXYiLCJuZXh0IiwiZ2V0IiwiY29udGVudCIsIl9jYWxsYmFja3Mkb25TdHJlYW1VcCIsInNldFRleHQiLCJvblN0cmVhbVVwZGF0ZSIsImNhbGwiLCJ3aW5kb3ciLCJzZXRUaW1lb3V0IiwidG9FbWl0IiwiY2xlYXJUaW1lb3V0IiwiYm9keSIsImdldFJlYWRlciIsIkVycm9yIiwiVGV4dERlY29kZXIiLCJfY2FsbGJhY2tzJG9uU3RhcnRXcmkiLCJwYXRjaE1ldGEiLCJpc0xvYWRpbmciLCJpc1dyaXRpbmciLCJzZXRTdGF0dXMiLCJzZXRBY3Rpdml0eSIsIm9uU3RhcnRXcml0aW5nIiwic3luY0xpdmVOYXJyYXRpb24iLCJtYXJrQW5zd2VyUmVzZXQiLCJwYXlsb2FkIiwiX3BheWxvYWQkYWdlbnRfaWQiLCJfc3ViYWdlbnRSYXckcmVzb2x2ZWQiLCJfcmVmMiIsIl9jYWxsYmFja3Mkb25GaW5pc2hTdCIsImZpbmFsQ29udGVudCIsInNvdXJjZXMiLCJtZW1vcnlTZXNzaW9uSWQiLCJtZW1vcnlfc2Vzc2lvbl9pZCIsImF0dGFjaG1lbnRzIiwiQXJyYXkiLCJpc0FycmF5Iiwic3VnZ2VzdGlvbnMiLCJzdWdnZXN0X3JlcGx5IiwiYWdlbnRJZFJhdyIsImFnZW50X2lkIiwiYWdlbnRJZCIsImNvbXBsZXRlZEFnZW50SWQiLCJTdHJpbmciLCJ0cmltIiwic3ViYWdlbnRSYXciLCJzdWJhZ2VudCIsInJlc29sdmVkQ29udGV4dCIsInJlc29sdmVkX2NvbnRleHQiLCJyZWFzb25pbmciLCJmaW5pc2giLCJmaW5pc2hQYXlsb2FkIiwib25GaW5pc2hTdHJlYW0iLCJpc1N0b3BwZWQiLCJjYW5jZWwiLCJhYnJ1cHQiLCJyZWFkIiwic2VudCIsImRlY29kZSIsInN0cmVhbSIsInNwbGl0IiwicG9wIiwiX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIiLCJzIiwibiIsIl9zbGljZWRUb0FycmF5IiwicmVwbGFjZSIsIkpTT04iLCJwYXJzZSIsImRlbHRhIiwiaSIsImFwcGVuZFRoaW5raW5nIiwicGhhc2UiLCJtZXNzYWdlIiwidG9vbCIsInR5cGUiLCJzdGF0dXMiLCJjYXB0dXJlTGVhZGluZ0Zyb21Cb2R5IiwiYXBwbHlTdGVwIiwic2hvdWxkQ2xlYXJTdHJlYW1Gb3JMZWFkaW5nIiwibm9kZSIsInVuZGVmaW5lZCIsInRocmVhZF9pZCIsIm1hbnVhbF9hcHByb3ZhbF9kZXRlY3RlZCIsImF1dG9fYXBwcm92ZWQiLCJhcHByb3ZhbF9zdGF0dXMiLCJjbGVhciIsIm9uQXBwcm92YWxSZXF1aXJlZCIsInBlbmRpbmdfYWN0aW9ucyIsImxlbmd0aCIsImNvbnNvbGUiLCJlcnJvciIsInNldEVycm9yIiwib25FcnJvciIsIndhcm4iLCJlIiwiZiIsInN0b3AiLCJfeCIsIl94MiIsIl94MyIsImFwcGx5IiwiYXJndW1lbnRzIiwic2Vzc2lvblN0cmVhbU1hbmFnZXIiLCJpc0FjdGl2ZSIsImdldEFjdGl2ZUNvdW50IiwiZ2V0QWN0aXZlU2Vzc2lvbklkcyIsImZyb20iLCJrZXlzIiwic3RhcnRTdHJlYW0iLCJfY2FsbGVlMiIsInJlcXVlc3QiLCJhY3Rpdml0eU9wdGlvbnMiLCJhZ2VudE5hbWUiLCJjb250cm9sbGVyIiwiX2NhbGxiYWNrcyRvbkVycm9yMiIsIl90NCIsIl9jb250ZXh0MiIsInN0YXJ0ZWQiLCJyZWFzb24iLCJBYm9ydENvbnRyb2xsZXIiLCJzZXQiLCJlbnN1cmVTZXNzaW9uIiwiX29iamVjdFNwcmVhZCIsInN0YXJ0IiwiT3JjaGVzdHJhdG9yIiwib3JjaGVzdHJhdG9yIiwic2lnbmFsIiwic3RhcnRDb250aW51ZVN0cmVhbSIsIl9jYWxsZWUzIiwiX3JlZjQiLCJjb250aW51ZVJlcXVlc3QiLCJzc2VQYXJhbXMiLCJfY2FsbGJhY2tzJG9uRXJyb3IzIiwiX3Q1IiwiX2NvbnRleHQzIiwiY29udGludWVUaHJlYWQiLCJvayIsImNvbmNhdCIsInN0YXJ0UmV0cnlTdHJlYW0iLCJfY2FsbGVlNCIsInJldHJ5UmVxdWVzdCIsImRldGFpbCIsIl9jYWxsYmFja3Mkb25FcnJvcjQiLCJfdDYiLCJfdDciLCJfY29udGV4dDQiLCJyZXRyeUNvbXBsZXRpb24iLCJqc29uIiwic3RvcFN0cmVhbSIsIl9jYWxsYmFja3Mkb25TdG9wIiwiYWJvcnQiLCJwYXJ0aWFsVGV4dCIsImdldFNuYXBzaG90IiwidGV4dCIsIm9uU3RvcCIsImFib3J0U2lsZW50bHkiLCJfc3RvcmUkZ2V0TWV0YSIsImdldE1ldGEiLCJhYm9ydEFsbCIsIl90aGlzIiwiZm9yRWFjaCJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9zdG9yZS9zZXNzaW9ucy9zZXNzaW9uU3RyZWFtTWFuYWdlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBuby1jb25zb2xlICovXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1jb250aW51ZSAqL1xuLyogZXNsaW50LWRpc2FibGUgbm8tYXdhaXQtaW4tbG9vcCAqL1xuLyogZXNsaW50LWRpc2FibGUgbm8tcmVzdHJpY3RlZC1zeW50YXggKi9cbi8qIGVzbGludC1kaXNhYmxlIG5vLWNvbnN0YW50LWNvbmRpdGlvbiAqL1xuLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSAqL1xuaW1wb3J0IG1haWEgZnJvbSAnLi4vLi4vc2VydmljZXMvbWFpYSdcbmltcG9ydCB0eXBlIHsgQXBwcm92YWxSZXF1ZXN0IH0gZnJvbSAnLi4vLi4vdHlwZXMvQ2hhdCdcbmltcG9ydCB7XG4gIGdldEluaXRpYWxTdHJlYW1BY3Rpdml0eSxcbiAgZ2V0VGhpbmtpbmdMb2FkaW5nTWVzc2FnZSxcbiAgZ2V0V3JpdGluZ1N0cmVhbUFjdGl2aXR5LFxuICByZXNvbHZlSGl0bE5vZGVTdHJlYW1BY3Rpdml0eSxcbiAgcmVzb2x2ZUluaXRpYWxIaXRsU3RyZWFtQWN0aXZpdHksXG4gIHJlc29sdmVUb29sQWN0aW9uTGFiZWwsXG59IGZyb20gJy4uLy4uL3V0aWxzL3N0cmVhbUFjdGl2aXR5TWVzc2FnZXMnXG5pbXBvcnQgdHlwZSB7IEhpdGxFeGVjdXRpb25Db250ZXh0IH0gZnJvbSAnLi4vLi4vdXRpbHMvc3RyZWFtQWN0aXZpdHlNZXNzYWdlcydcbmltcG9ydCB7IGlzQ29tcGxldGVMaWtlU3NlUGF5bG9hZCwgbWVyZ2VTdHJlYW1DaHVuayB9IGZyb20gJy4uLy4uL3V0aWxzL3NzZVN0cmVhbUNvbnRlbnQnXG5pbXBvcnQgeyByZWFzb25pbmdTdG9yZSB9IGZyb20gJy4uLy4uL2hvb2tzL3VzZVJlYXNvbmluZ1RyYWNlJ1xuaW1wb3J0IHR5cGUgeyBSZWFzb25pbmdTdGVwUGF5bG9hZCwgUmVhc29uaW5nVHJhY2VQYXlsb2FkIH0gZnJvbSAnLi4vLi4vdHlwZXMvcmVhc29uaW5nJ1xuaW1wb3J0IHsgc2Vzc2lvblN0cmVhbWluZ1RleHQgfSBmcm9tICcuL3Nlc3Npb25TdHJlYW1pbmdUZXh0J1xuaW1wb3J0IHsgdXNlU2Vzc2lvbnNTdG9yZSB9IGZyb20gJy4vdXNlU2Vzc2lvbnNTdG9yZSdcbmltcG9ydCB7IGVuc3VyZVNlc3Npb25Ob3RpZmljYXRpb25zSW5pdGlhbGl6ZWQgfSBmcm9tICcuL3Nlc3Npb25Ob3RpZmljYXRpb25zJ1xuaW1wb3J0IHsgc2Vzc2lvbkhpdGxDb250ZXh0IH0gZnJvbSAnLi9zZXNzaW9uSGl0bENvbnRleHQnXG5pbXBvcnQgdHlwZSB7IFNlc3Npb25GaW5pc2hQYXlsb2FkLCBTZXNzaW9uU3RyZWFtQ2FsbGJhY2tzLCBTdGFydFN0cmVhbVJlc3VsdCB9IGZyb20gJy4vc2Vzc2lvbnMudHlwZXMnXG5cbnR5cGUgT3JjaGVzdHJhdG9yUmVxdWVzdCA9IFBhcmFtZXRlcnM8dHlwZW9mIG1haWEuT3JjaGVzdHJhdG9yLm9yY2hlc3RyYXRvcj5bMF1cbnR5cGUgQ29udGludWVUaHJlYWRSZXF1ZXN0ID0gUGFyYW1ldGVyczx0eXBlb2YgbWFpYS5PcmNoZXN0cmF0b3IuY29udGludWVUaHJlYWQ+WzBdXG50eXBlIFJldHJ5Q29tcGxldGlvblJlcXVlc3QgPSBQYXJhbWV0ZXJzPHR5cGVvZiBtYWlhLk9yY2hlc3RyYXRvci5yZXRyeUNvbXBsZXRpb24+WzBdXG5cbi8qKiBDb21wYXRpYmxlIGNvbiBlbCBgdGAgZGUgaTE4bmV4dCAodXNvIGRlIHVuYSBzb2xhIGtleSkuICovXG50eXBlIFRyYW5zbGF0ZUZuID0gKGtleTogc3RyaW5nKSA9PiBzdHJpbmdcblxudHlwZSBTdGFydFN0cmVhbVBhcmFtcyA9IHtcbiAgc2Vzc2lvbklkOiBzdHJpbmdcbiAgcGxhY2Vob2xkZXJJZDogc3RyaW5nXG4gIHJlcXVlc3Q6IE9yY2hlc3RyYXRvclJlcXVlc3RcbiAgY2FsbGJhY2tzOiBTZXNzaW9uU3RyZWFtQ2FsbGJhY2tzXG4gIHQ6IFRyYW5zbGF0ZUZuXG4gIGFjdGl2aXR5T3B0aW9ucz86IHtcbiAgICBpc1dlYlNlYXJjaEFjdGl2ZT86IGJvb2xlYW5cbiAgICBpc0RlZXBTZWFyY2hBY3RpdmU/OiBib29sZWFuXG4gICAgaGFzQXR0YWNobWVudHM/OiBib29sZWFuXG4gICAgYXR0YWNobWVudHNDb3VudD86IG51bWJlclxuICB9XG4gIGhpdGxFeGVjdXRpb25Db250ZXh0PzogSGl0bEV4ZWN1dGlvbkNvbnRleHQgfCBudWxsXG4gIGFnZW50SWQ/OiBzdHJpbmcgfCBudW1iZXJcbiAgYWdlbnROYW1lPzogc3RyaW5nXG59XG5cbnR5cGUgU3RhcnRDb250aW51ZVN0cmVhbVBhcmFtcyA9IHtcbiAgc2Vzc2lvbklkOiBzdHJpbmdcbiAgcGxhY2Vob2xkZXJJZDogc3RyaW5nXG4gIGNvbnRpbnVlUmVxdWVzdDogQ29udGludWVUaHJlYWRSZXF1ZXN0XG4gIGNhbGxiYWNrczogU2Vzc2lvblN0cmVhbUNhbGxiYWNrc1xuICB0OiBUcmFuc2xhdGVGblxuICBoaXRsRXhlY3V0aW9uQ29udGV4dD86IEhpdGxFeGVjdXRpb25Db250ZXh0IHwgbnVsbFxuICBhZ2VudElkPzogc3RyaW5nIHwgbnVtYmVyXG4gIGFnZW50TmFtZT86IHN0cmluZ1xufVxuXG50eXBlIFN0YXJ0UmV0cnlTdHJlYW1QYXJhbXMgPSB7XG4gIHNlc3Npb25JZDogc3RyaW5nXG4gIHBsYWNlaG9sZGVySWQ6IHN0cmluZ1xuICByZXRyeVJlcXVlc3Q6IFJldHJ5Q29tcGxldGlvblJlcXVlc3RcbiAgY2FsbGJhY2tzOiBTZXNzaW9uU3RyZWFtQ2FsbGJhY2tzXG4gIHQ6IFRyYW5zbGF0ZUZuXG4gIGFjdGl2aXR5T3B0aW9ucz86IHtcbiAgICBpc1dlYlNlYXJjaEFjdGl2ZT86IGJvb2xlYW5cbiAgICBpc0RlZXBTZWFyY2hBY3RpdmU/OiBib29sZWFuXG4gICAgaGFzQXR0YWNobWVudHM/OiBib29sZWFuXG4gICAgYXR0YWNobWVudHNDb3VudD86IG51bWJlclxuICB9XG4gIGFnZW50SWQ/OiBzdHJpbmcgfCBudW1iZXJcbiAgYWdlbnROYW1lPzogc3RyaW5nXG59XG5cbnR5cGUgQWN0aXZlU3RyZWFtID0ge1xuICBzZXNzaW9uSWQ6IHN0cmluZ1xuICBjb250cm9sbGVyOiBBYm9ydENvbnRyb2xsZXJcbiAgaXNTdG9wcGVkOiBib29sZWFuXG59XG5cbi8qKlxuICogTcOheGltbyBkZSBzZXNpb25lcyBnZW5lcmFuZG8gZW4gcGFyYWxlbG8uIFByb3RlZ2UgcmVkL3JlY3Vyc29zIGRlbCBjbGllbnRlLlxuICogQWp1c3RhYmxlIGEgZnV0dXJvIHbDrWEgZmxhZyBkZWwgaG9zdC5cbiAqL1xuZXhwb3J0IGNvbnN0IE1BWF9DT05DVVJSRU5UX1NUUkVBTVMgPSA0XG5cbmNvbnN0IFNUUkVBTV9USFJPVFRMRV9NUyA9IDE2XG5cbmNvbnN0IGFjdGl2ZVN0cmVhbXMgPSBuZXcgTWFwPHN0cmluZywgQWN0aXZlU3RyZWFtPigpXG5cbmNvbnN0IHN0b3JlID0gKCkgPT4gdXNlU2Vzc2lvbnNTdG9yZS5nZXRTdGF0ZSgpXG5cbmNvbnN0IGlzU3RyZWFtQWN0aXZlID0gKHNlc3Npb25JZDogc3RyaW5nKTogYm9vbGVhbiA9PiBhY3RpdmVTdHJlYW1zLmhhcyhzZXNzaW9uSWQpXG5cbmNvbnN0IGdldEFjdGl2ZVN0cmVhbUNvdW50ID0gKCk6IG51bWJlciA9PiBhY3RpdmVTdHJlYW1zLnNpemVcblxuY29uc3QgcGFyc2VTZXNzaW9uU1NFID0gYXN5bmMgKHJlc3BvbnNlOiBSZXNwb25zZSwgYWN0aXZlOiBBY3RpdmVTdHJlYW0sIHBhcmFtczogU3RhcnRTdHJlYW1QYXJhbXMpOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgY29uc3QgeyBzZXNzaW9uSWQsIHBsYWNlaG9sZGVySWQsIGNhbGxiYWNrcywgdCB9ID0gcGFyYW1zXG4gIGNvbnN0IGhpdGxFeGVjdXRpb25Db250ZXh0ID0gcGFyYW1zLmhpdGxFeGVjdXRpb25Db250ZXh0ID8/IHNlc3Npb25IaXRsQ29udGV4dC5nZXQoc2Vzc2lvbklkKVxuXG4gIGxldCBwZW5kaW5nQ29udGVudDogc3RyaW5nIHwgbnVsbCA9IG51bGxcbiAgbGV0IHRocm90dGxlVGltZXI6IG51bWJlciB8IG51bGwgPSBudWxsXG5cbiAgY29uc3QgZmx1c2hUb1N0b3JlcyA9IChjb250ZW50OiBzdHJpbmcpID0+IHtcbiAgICBzZXNzaW9uU3RyZWFtaW5nVGV4dC5zZXRUZXh0KHNlc3Npb25JZCwgcGxhY2Vob2xkZXJJZCwgY29udGVudClcbiAgICBjYWxsYmFja3Mub25TdHJlYW1VcGRhdGU/Lihjb250ZW50KVxuICB9XG5cbiAgY29uc3QgZW1pdFRocm90dGxlZCA9IChjb250ZW50OiBzdHJpbmcpID0+IHtcbiAgICBwZW5kaW5nQ29udGVudCA9IGNvbnRlbnRcbiAgICBpZiAodGhyb3R0bGVUaW1lciAhPSBudWxsKSByZXR1cm5cbiAgICB0aHJvdHRsZVRpbWVyID0gd2luZG93LnNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhyb3R0bGVUaW1lciA9IG51bGxcbiAgICAgIGlmIChwZW5kaW5nQ29udGVudCAhPSBudWxsKSB7XG4gICAgICAgIGNvbnN0IHRvRW1pdCA9IHBlbmRpbmdDb250ZW50XG4gICAgICAgIHBlbmRpbmdDb250ZW50ID0gbnVsbFxuICAgICAgICBmbHVzaFRvU3RvcmVzKHRvRW1pdClcbiAgICAgIH1cbiAgICB9LCBTVFJFQU1fVEhST1RUTEVfTVMpXG4gIH1cblxuICBjb25zdCBmbHVzaFBlbmRpbmcgPSAoKSA9PiB7XG4gICAgaWYgKHRocm90dGxlVGltZXIgIT0gbnVsbCkge1xuICAgICAgd2luZG93LmNsZWFyVGltZW91dCh0aHJvdHRsZVRpbWVyKVxuICAgICAgdGhyb3R0bGVUaW1lciA9IG51bGxcbiAgICB9XG4gICAgaWYgKHBlbmRpbmdDb250ZW50ICE9IG51bGwpIHtcbiAgICAgIGNvbnN0IHRvRW1pdCA9IHBlbmRpbmdDb250ZW50XG4gICAgICBwZW5kaW5nQ29udGVudCA9IG51bGxcbiAgICAgIGZsdXNoVG9TdG9yZXModG9FbWl0KVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHJlYWRlciA9IHJlc3BvbnNlLmJvZHk/LmdldFJlYWRlcigpXG4gIGlmICghcmVhZGVyKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdObyByZWFkZXIgYXZhaWxhYmxlJylcbiAgfVxuXG4gIGNvbnN0IGRlY29kZXIgPSBuZXcgVGV4dERlY29kZXIoKVxuICBsZXQgYnVmZmVyID0gJydcbiAgbGV0IGFjY3VtdWxhdGVkQ29udGVudCA9ICcnXG4gIGxldCBoYXNTdGFydGVkV3JpdGluZyA9IGZhbHNlXG5cbiAgY29uc3QgZW5zdXJlV3JpdGluZ1N0YXJ0ZWQgPSAoKSA9PiB7XG4gICAgaWYgKGhhc1N0YXJ0ZWRXcml0aW5nKSByZXR1cm5cbiAgICBoYXNTdGFydGVkV3JpdGluZyA9IHRydWVcbiAgICBzdG9yZSgpLnBhdGNoTWV0YShzZXNzaW9uSWQsIHsgaXNMb2FkaW5nOiB0cnVlLCBpc1dyaXRpbmc6IHRydWUgfSlcbiAgICBzdG9yZSgpLnNldFN0YXR1cyhzZXNzaW9uSWQsICd3cml0aW5nJylcbiAgICBzdG9yZSgpLnNldEFjdGl2aXR5KHNlc3Npb25JZCwgZ2V0V3JpdGluZ1N0cmVhbUFjdGl2aXR5KHQpKVxuICAgIGNhbGxiYWNrcy5vblN0YXJ0V3JpdGluZz8uKClcbiAgfVxuXG4gIGNvbnN0IGFwcGx5U3RyZWFtQ2h1bmsgPSAoY2h1bms6IHN0cmluZykgPT4ge1xuICAgIGlmICghY2h1bmspIHJldHVyblxuICAgIGFjY3VtdWxhdGVkQ29udGVudCA9IG1lcmdlU3RyZWFtQ2h1bmsoYWNjdW11bGF0ZWRDb250ZW50LCBjaHVuaylcbiAgICByZWFzb25pbmdTdG9yZS5zeW5jTGl2ZU5hcnJhdGlvbihwbGFjZWhvbGRlcklkLCBhY2N1bXVsYXRlZENvbnRlbnQpXG4gICAgZW1pdFRocm90dGxlZChhY2N1bXVsYXRlZENvbnRlbnQpXG4gIH1cblxuICBjb25zdCBjbGVhclN0cmVhbUxpa2VBbnN3ZXJSZXNldCA9ICgpID0+IHtcbiAgICBpZiAodGhyb3R0bGVUaW1lciAhPSBudWxsKSB7XG4gICAgICB3aW5kb3cuY2xlYXJUaW1lb3V0KHRocm90dGxlVGltZXIpXG4gICAgICB0aHJvdHRsZVRpbWVyID0gbnVsbFxuICAgIH1cbiAgICBwZW5kaW5nQ29udGVudCA9IG51bGxcbiAgICBhY2N1bXVsYXRlZENvbnRlbnQgPSAnJ1xuICAgIGZsdXNoVG9TdG9yZXMoJycpXG4gICAgcmVhc29uaW5nU3RvcmUubWFya0Fuc3dlclJlc2V0KHBsYWNlaG9sZGVySWQpXG4gIH1cblxuICBjb25zdCBhcHBseVN0cmVhbUNvbXBsZXRlID0gKHBheWxvYWQ6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KSA9PiB7XG4gICAgY29uc3QgZmluYWxDb250ZW50ID0gKHBheWxvYWQuY29udGVudCBhcyBzdHJpbmcpIHx8IGFjY3VtdWxhdGVkQ29udGVudFxuICAgIGNvbnN0IHNvdXJjZXMgPSBwYXlsb2FkLnNvdXJjZXMgfHwgbnVsbFxuICAgIGNvbnN0IG1lbW9yeVNlc3Npb25JZCA9IChwYXlsb2FkLm1lbW9yeV9zZXNzaW9uX2lkIGFzIHN0cmluZykgfHwgJydcbiAgICBjb25zdCBhdHRhY2htZW50cyA9IEFycmF5LmlzQXJyYXkocGF5bG9hZC5hdHRhY2htZW50cykgPyBwYXlsb2FkLmF0dGFjaG1lbnRzIDogbnVsbFxuICAgIGxldCBzdWdnZXN0aW9uczogc3RyaW5nW10gfCBudWxsID0gbnVsbFxuICAgIGlmIChBcnJheS5pc0FycmF5KHBheWxvYWQuc3VnZ2VzdF9yZXBseSkpIHtcbiAgICAgIHN1Z2dlc3Rpb25zID0gcGF5bG9hZC5zdWdnZXN0X3JlcGx5IGFzIHN0cmluZ1tdXG4gICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KHBheWxvYWQuc3VnZ2VzdGlvbnMpKSB7XG4gICAgICBzdWdnZXN0aW9ucyA9IHBheWxvYWQuc3VnZ2VzdGlvbnMgYXMgc3RyaW5nW11cbiAgICB9XG4gICAgY29uc3QgYWdlbnRJZFJhdyA9IHBheWxvYWQuYWdlbnRfaWQgPz8gcGF5bG9hZC5hZ2VudElkXG4gICAgY29uc3QgY29tcGxldGVkQWdlbnRJZCA9IGFnZW50SWRSYXcgIT0gbnVsbCAmJiBTdHJpbmcoYWdlbnRJZFJhdykudHJpbSgpICE9PSAnJyA/IFN0cmluZyhhZ2VudElkUmF3KS50cmltKCkgOiBudWxsXG4gICAgY29uc3Qgc3ViYWdlbnRSYXcgPSBwYXlsb2FkLnN1YmFnZW50IGFzIHsgcmVzb2x2ZWRfY29udGV4dD86IHVua25vd24gfSB8IG51bGwgfCB1bmRlZmluZWRcbiAgICBjb25zdCByZXNvbHZlZENvbnRleHQgPSBzdWJhZ2VudFJhdz8ucmVzb2x2ZWRfY29udGV4dCA/PyBudWxsXG4gICAgY29uc3QgcmVhc29uaW5nID0gKHBheWxvYWQucmVhc29uaW5nIGFzIFJlYXNvbmluZ1RyYWNlUGF5bG9hZCB8IG51bGwpID8/IG51bGxcblxuICAgIHJlYXNvbmluZ1N0b3JlLmZpbmlzaChwbGFjZWhvbGRlcklkLCByZWFzb25pbmcpXG4gICAgZmx1c2hQZW5kaW5nKClcbiAgICBzdG9yZSgpLnBhdGNoTWV0YShzZXNzaW9uSWQsIHsgaXNMb2FkaW5nOiBmYWxzZSwgaXNXcml0aW5nOiBmYWxzZSB9KVxuICAgIHN0b3JlKCkuc2V0QWN0aXZpdHkoc2Vzc2lvbklkLCBudWxsKVxuICAgIHN0b3JlKCkuc2V0U3RhdHVzKHNlc3Npb25JZCwgJ2NvbXBsZXRlJylcblxuICAgIGNvbnN0IGZpbmlzaFBheWxvYWQ6IFNlc3Npb25GaW5pc2hQYXlsb2FkID0ge1xuICAgICAgY29udGVudDogZmluYWxDb250ZW50LFxuICAgICAgc291cmNlcyxcbiAgICAgIG1lbW9yeVNlc3Npb25JZCxcbiAgICAgIGF0dGFjaG1lbnRzLFxuICAgICAgc3VnZ2VzdGlvbnMsXG4gICAgICBjb21wbGV0ZWRBZ2VudElkLFxuICAgICAgcmVzb2x2ZWRDb250ZXh0LFxuICAgICAgcmVhc29uaW5nLFxuICAgIH1cbiAgICBjYWxsYmFja3Mub25GaW5pc2hTdHJlYW0/LihmaW5pc2hQYXlsb2FkKVxuXG4gICAgLy8gRWwgdGV4dG8gZW4gdml2byBOTyBzZSBsaW1waWEgYWPDoSBhIHByb3DDs3NpdG8uIEVsIHBsYWNlaG9sZGVyIHNlIHZhIGNvbiBlbFxuICAgIC8vIGBkcm9wYCBxdWUgaGFjZSBlbCBjb25zdW1pZG9yLCB5IGNvbiDDqWwgc3Ugc3VzY3JpcGNpw7NuOyB2YWNpYXJsbyBhbnRlcyBsb1xuICAgIC8vIGRlamFiYSBtb250YWRvIHkgc2luIHRleHRvIChhbHR1cmEgMCkgZHVyYW50ZSB+MjVtczogZWwgZmxpY2tlciBkZSBmaW4gZGVcbiAgICAvLyBzdHJlYW0uIE5vIGFsY2FuemEgY29uIGRpZmVyaXJsbywgcG9ycXVlIGVzdGUgY2xlYXIgdmlhamEgZW4gU3luY0xhbmVcbiAgICAvLyAoc3RvcmUgZXh0ZXJubykgeSBlbCBzd2FwIGRlIG1lbnNhamVzIGVuIERlZmF1bHRMYW5lLCBhc8OtIHF1ZSBzaWVtcHJlIHNlXG4gICAgLy8gY3VlbGEgZW4gZWwgbWVkaW8uIEVsIHNsb3Qgc2UgbGliZXJhIGVuIGVsIHByw7N4aW1vIGBzdGFydCgpYCBkZSBsYSBzZXNpw7NuLFxuICAgIC8vIHkgZW4gc3RvcC9lcnJvci9hcHByb3ZhbC9jYW1iaW8gZGUgc2VzacOzbiwgcXVlIHPDrSBsbGFtYW4gYGNsZWFyYC5cbiAgfVxuXG4gIHRyeSB7XG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgIGlmIChhY3RpdmUuaXNTdG9wcGVkKSB7XG4gICAgICAgIHJlYWRlci5jYW5jZWwoKVxuICAgICAgICBicmVha1xuICAgICAgfVxuXG4gICAgICBjb25zdCB7IGRvbmUsIHZhbHVlIH0gPSBhd2FpdCByZWFkZXIucmVhZCgpXG4gICAgICBpZiAoZG9uZSkgYnJlYWtcblxuICAgICAgaWYgKGFjdGl2ZS5pc1N0b3BwZWQpIHtcbiAgICAgICAgcmVhZGVyLmNhbmNlbCgpXG4gICAgICAgIGJyZWFrXG4gICAgICB9XG5cbiAgICAgIGJ1ZmZlciArPSBkZWNvZGVyLmRlY29kZSh2YWx1ZSwgeyBzdHJlYW06IHRydWUgfSlcbiAgICAgIGNvbnN0IGxpbmVzID0gYnVmZmVyLnNwbGl0KCdcXG5cXG4nKVxuICAgICAgYnVmZmVyID0gbGluZXMucG9wKCkgfHwgJydcblxuICAgICAgZm9yIChjb25zdCBsaW5lIG9mIGxpbmVzKSB7XG4gICAgICAgIGlmIChsaW5lLnRyaW0oKSA9PT0gJycpIGNvbnRpbnVlXG5cbiAgICAgICAgY29uc3QgW2V2ZW50TGluZSwgZGF0YUxpbmVdID0gbGluZS5zcGxpdCgnXFxuJylcbiAgICAgICAgaWYgKCFldmVudExpbmUgfHwgIWRhdGFMaW5lKSBjb250aW51ZVxuXG4gICAgICAgIGNvbnN0IGV2ZW50VHlwZSA9IGV2ZW50TGluZS5yZXBsYWNlKCdldmVudDogJywgJycpLnRyaW0oKVxuICAgICAgICBjb25zdCBkYXRhU3RyID0gZGF0YUxpbmUucmVwbGFjZSgnZGF0YTogJywgJycpLnRyaW0oKVxuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgZGF0YSA9IEpTT04ucGFyc2UoZGF0YVN0cilcblxuICAgICAgICAgIHN3aXRjaCAoZXZlbnRUeXBlKSB7XG4gICAgICAgICAgICBjYXNlICd0aGlua2luZyc6IHtcbiAgICAgICAgICAgICAgY29uc3QgdGhpbmtpbmdEZWx0YSA9IHR5cGVvZiBkYXRhLmRlbHRhID09PSAnc3RyaW5nJyA/IGRhdGEuZGVsdGEgOiAnJ1xuICAgICAgICAgICAgICBpZiAodHlwZW9mIGRhdGEuaSA9PT0gJ251bWJlcicgJiYgdGhpbmtpbmdEZWx0YSkge1xuICAgICAgICAgICAgICAgIHJlYXNvbmluZ1N0b3JlLmFwcGVuZFRoaW5raW5nKHBsYWNlaG9sZGVySWQsIGRhdGEuaSwgdGhpbmtpbmdEZWx0YSlcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBpZiAoIWhhc1N0YXJ0ZWRXcml0aW5nKSB7XG4gICAgICAgICAgICAgICAgc3RvcmUoKS5wYXRjaE1ldGEoc2Vzc2lvbklkLCB7IGlzTG9hZGluZzogdHJ1ZSB9KVxuICAgICAgICAgICAgICAgIHN0b3JlKCkuc2V0U3RhdHVzKHNlc3Npb25JZCwgJ3RoaW5raW5nJylcbiAgICAgICAgICAgICAgICBzdG9yZSgpLnNldEFjdGl2aXR5KHNlc3Npb25JZCwgeyBwaGFzZTogJ3RoaW5raW5nJywgbWVzc2FnZTogZ2V0VGhpbmtpbmdMb2FkaW5nTWVzc2FnZSgwLCB0KSB9KVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIEVsIGJhY2tlbmQgZGVzY2FydGEgbG8gZW1pdGlkbyB5IHJlaW5pY2lhIGxhIHJlc3B1ZXN0YSBkZXNkZSBjZXJvLlxuICAgICAgICAgICAgY2FzZSAnYW5zd2VyX3Jlc2V0JzpcbiAgICAgICAgICAgICAgY2xlYXJTdHJlYW1MaWtlQW5zd2VyUmVzZXQoKVxuICAgICAgICAgICAgICBicmVha1xuXG4gICAgICAgICAgICBjYXNlICdyZWFzb25pbmdfc3RlcCc6IHtcbiAgICAgICAgICAgICAgY29uc3Qgc3RlcFRvb2wgPSB0eXBlb2YgZGF0YS50b29sID09PSAnc3RyaW5nJyA/IGRhdGEudG9vbCA6ICcnXG4gICAgICAgICAgICAgIGNvbnN0IHN0ZXBUeXBlID0gdHlwZW9mIGRhdGEudHlwZSA9PT0gJ3N0cmluZycgPyBkYXRhLnR5cGUgOiAnJ1xuICAgICAgICAgICAgICBpZiAoc3RlcFRvb2wgJiYgc3RlcFR5cGUgIT09ICdoYW5kb2ZmJyAmJiBkYXRhLnN0YXR1cyA9PT0gJ3J1bm5pbmcnKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbGFiZWwgPSByZXNvbHZlVG9vbEFjdGlvbkxhYmVsKHN0ZXBUb29sLCB0LCAncHJlc2VudCcpXG4gICAgICAgICAgICAgICAgaWYgKGxhYmVsKSB7XG4gICAgICAgICAgICAgICAgICBzdG9yZSgpLnBhdGNoTWV0YShzZXNzaW9uSWQsIHsgaXNMb2FkaW5nOiB0cnVlIH0pXG4gICAgICAgICAgICAgICAgICBzdG9yZSgpLnNldEFjdGl2aXR5KHNlc3Npb25JZCwgeyBwaGFzZTogJ2FjdGlvbicsIG1lc3NhZ2U6IGxhYmVsIH0pXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGlmICh0eXBlb2YgZGF0YS5pID09PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgICAgIHJlYXNvbmluZ1N0b3JlLmNhcHR1cmVMZWFkaW5nRnJvbUJvZHkocGxhY2Vob2xkZXJJZCwgYWNjdW11bGF0ZWRDb250ZW50KVxuICAgICAgICAgICAgICAgIHJlYXNvbmluZ1N0b3JlLmFwcGx5U3RlcChwbGFjZWhvbGRlcklkLCBkYXRhIGFzIFJlYXNvbmluZ1N0ZXBQYXlsb2FkKVxuICAgICAgICAgICAgICAgIGlmIChyZWFzb25pbmdTdG9yZS5zaG91bGRDbGVhclN0cmVhbUZvckxlYWRpbmcocGxhY2Vob2xkZXJJZCwgYWNjdW11bGF0ZWRDb250ZW50KSkge1xuICAgICAgICAgICAgICAgICAgY2xlYXJTdHJlYW1MaWtlQW5zd2VyUmVzZXQoKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjYXNlICd0b2tlbic6IHtcbiAgICAgICAgICAgICAgY29uc3QgY2h1bmsgPSB0eXBlb2YgZGF0YS5jb250ZW50ID09PSAnc3RyaW5nJyA/IGRhdGEuY29udGVudCA6ICcnXG4gICAgICAgICAgICAgIGVuc3VyZVdyaXRpbmdTdGFydGVkKClcbiAgICAgICAgICAgICAgYXBwbHlTdHJlYW1DaHVuayhjaHVuaylcbiAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY2FzZSAnY29udGVudCc6IHtcbiAgICAgICAgICAgICAgY29uc3QgY2h1bmsgPSB0eXBlb2YgZGF0YS5jb250ZW50ID09PSAnc3RyaW5nJyA/IGRhdGEuY29udGVudCA6ICcnXG4gICAgICAgICAgICAgIGVuc3VyZVdyaXRpbmdTdGFydGVkKClcbiAgICAgICAgICAgICAgYXBwbHlTdHJlYW1DaHVuayhjaHVuaylcbiAgICAgICAgICAgICAgaWYgKGlzQ29tcGxldGVMaWtlU3NlUGF5bG9hZChkYXRhKSkge1xuICAgICAgICAgICAgICAgIGFwcGx5U3RyZWFtQ29tcGxldGUoZGF0YSlcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjYXNlICdub2RlJzpcbiAgICAgICAgICAgICAgaWYgKGRhdGEubm9kZSA9PT0gJ2FnZW50X3RyYW5zZmVyJykge1xuICAgICAgICAgICAgICAgIHN0b3JlKCkucGF0Y2hNZXRhKHNlc3Npb25JZCwgeyBpc0xvYWRpbmc6IHRydWUgfSlcbiAgICAgICAgICAgICAgICBzdG9yZSgpLnNldFN0YXR1cyhzZXNzaW9uSWQsICd0aGlua2luZycpXG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAoZGF0YS5tZXNzYWdlICYmIHR5cGVvZiBkYXRhLm1lc3NhZ2UgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgc3RvcmUoKS5wYXRjaE1ldGEoc2Vzc2lvbklkLCB7IGlzTG9hZGluZzogdHJ1ZSB9KVxuICAgICAgICAgICAgICAgIHN0b3JlKCkuc2V0U3RhdHVzKHNlc3Npb25JZCwgJ3RoaW5raW5nJylcbiAgICAgICAgICAgICAgICBzdG9yZSgpLnNldEFjdGl2aXR5KFxuICAgICAgICAgICAgICAgICAgc2Vzc2lvbklkLFxuICAgICAgICAgICAgICAgICAgcmVzb2x2ZUhpdGxOb2RlU3RyZWFtQWN0aXZpdHkoXG4gICAgICAgICAgICAgICAgICAgIGRhdGEubWVzc2FnZSxcbiAgICAgICAgICAgICAgICAgICAgdCxcbiAgICAgICAgICAgICAgICAgICAgaGl0bEV4ZWN1dGlvbkNvbnRleHQgPz8gdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgICB0eXBlb2YgZGF0YS50aHJlYWRfaWQgPT09ICdzdHJpbmcnID8gZGF0YS50aHJlYWRfaWQgOiB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgYnJlYWtcblxuICAgICAgICAgICAgY2FzZSAnY29tcGxldGUnOlxuICAgICAgICAgICAgICBhcHBseVN0cmVhbUNvbXBsZXRlKGRhdGEpXG4gICAgICAgICAgICAgIGJyZWFrXG5cbiAgICAgICAgICAgIGNhc2UgJ2FwcHJvdmFsX3JlcXVpcmVkJzoge1xuICAgICAgICAgICAgICBmbHVzaFBlbmRpbmcoKVxuICAgICAgICAgICAgICAvLyBQcmVhcHJvYmFkbyAoYXV0by1hcHByb3ZlIG8gZGV0ZWNjacOzbiBtYW51YWwpOiBlbCBzdHJlYW0gbm8gc2UgY29ydGEsXG4gICAgICAgICAgICAgIC8vIHNpZ3VlIGVqZWN1dGFuZG8gbGFzIGFjY2lvbmVzIHNpbiBlc3BlcmFyIGRlY2lzacOzbiBkZWwgdXN1YXJpby5cbiAgICAgICAgICAgICAgY29uc3QgaXNQcmVBcHByb3ZlZCA9XG4gICAgICAgICAgICAgICAgZGF0YS5tYW51YWxfYXBwcm92YWxfZGV0ZWN0ZWQgPT09IHRydWUgfHxcbiAgICAgICAgICAgICAgICBkYXRhLmF1dG9fYXBwcm92ZWQgPT09IHRydWUgfHxcbiAgICAgICAgICAgICAgICBkYXRhLmFwcHJvdmFsX3N0YXR1cyA9PT0gJ2FwcHJvdmVkJ1xuICAgICAgICAgICAgICBzdG9yZSgpLnBhdGNoTWV0YShzZXNzaW9uSWQsIHsgaXNXcml0aW5nOiBmYWxzZSB9KVxuICAgICAgICAgICAgICBpZiAoIWlzUHJlQXBwcm92ZWQpIHtcbiAgICAgICAgICAgICAgICByZWFzb25pbmdTdG9yZS5maW5pc2gocGxhY2Vob2xkZXJJZCwgKGRhdGEucmVhc29uaW5nIGFzIFJlYXNvbmluZ1RyYWNlUGF5bG9hZCB8IG51bGwpID8/IG51bGwpXG4gICAgICAgICAgICAgICAgc3RvcmUoKS5wYXRjaE1ldGEoc2Vzc2lvbklkLCB7IGlzTG9hZGluZzogZmFsc2UgfSlcbiAgICAgICAgICAgICAgICBzZXNzaW9uU3RyZWFtaW5nVGV4dC5jbGVhcihzZXNzaW9uSWQpXG4gICAgICAgICAgICAgICAgc3RvcmUoKS5zZXRBY3Rpdml0eShzZXNzaW9uSWQsIG51bGwpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgc3RvcmUoKS5zZXRTdGF0dXMoc2Vzc2lvbklkLCAnYXdhaXRpbmdfYXBwcm92YWwnKVxuICAgICAgICAgICAgICBjYWxsYmFja3Mub25BcHByb3ZhbFJlcXVpcmVkPy4oZGF0YSBhcyBBcHByb3ZhbFJlcXVlc3QsIGFjY3VtdWxhdGVkQ29udGVudClcbiAgICAgICAgICAgICAgaWYgKGlzUHJlQXBwcm92ZWQgJiYgQXJyYXkuaXNBcnJheShkYXRhLnBlbmRpbmdfYWN0aW9ucykgJiYgZGF0YS5wZW5kaW5nX2FjdGlvbnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIHN0b3JlKCkucGF0Y2hNZXRhKHNlc3Npb25JZCwgeyBpc0xvYWRpbmc6IHRydWUgfSlcbiAgICAgICAgICAgICAgICBzdG9yZSgpLnNldFN0YXR1cyhzZXNzaW9uSWQsICd0aGlua2luZycpXG4gICAgICAgICAgICAgICAgc3RvcmUoKS5zZXRBY3Rpdml0eShzZXNzaW9uSWQsIHJlc29sdmVJbml0aWFsSGl0bFN0cmVhbUFjdGl2aXR5KHQsIGhpdGxFeGVjdXRpb25Db250ZXh0ID8/IHVuZGVmaW5lZCkpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY2FzZSAnZXJyb3InOlxuICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdTU0UgRXJyb3I6JywgZGF0YS5lcnJvcilcbiAgICAgICAgICAgICAgZmx1c2hQZW5kaW5nKClcbiAgICAgICAgICAgICAgc2Vzc2lvblN0cmVhbWluZ1RleHQuY2xlYXIoc2Vzc2lvbklkKVxuICAgICAgICAgICAgICBzdG9yZSgpLnBhdGNoTWV0YShzZXNzaW9uSWQsIHsgaXNMb2FkaW5nOiBmYWxzZSwgaXNXcml0aW5nOiBmYWxzZSB9KVxuICAgICAgICAgICAgICBzdG9yZSgpLnNldEFjdGl2aXR5KHNlc3Npb25JZCwgbnVsbClcbiAgICAgICAgICAgICAgc3RvcmUoKS5zZXRFcnJvcihzZXNzaW9uSWQsIHsgdHlwZTogZGF0YS5lcnJvcj8udHlwZSwgbWVzc2FnZTogZGF0YS5lcnJvcj8ubWVzc2FnZSB9KVxuICAgICAgICAgICAgICBzdG9yZSgpLnNldFN0YXR1cyhzZXNzaW9uSWQsICdlcnJvcicpXG4gICAgICAgICAgICAgIGNhbGxiYWNrcy5vbkVycm9yPy4oZGF0YS5lcnJvcj8udHlwZSwgZGF0YS5lcnJvcj8ubWVzc2FnZSlcbiAgICAgICAgICAgICAgYnJlYWtcblxuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgY29uc29sZS53YXJuKCdVbmtub3duIFNTRSBldmVudCB0eXBlOicsIGV2ZW50VHlwZSlcbiAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKHBhcnNlRXJyb3IpIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBwYXJzaW5nIFNTRSBkYXRhOicsIHBhcnNlRXJyb3IsIGRhdGFTdHIpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0gZmluYWxseSB7XG4gICAgZmx1c2hQZW5kaW5nKClcbiAgfVxufVxuXG4vKipcbiAqIE1hbmFnZXIgc2luZ2xldG9uIChtb2R1bGUtbGV2ZWwpIHF1ZSBjb3JyZSBOIHN0cmVhbXMgZGVsIG9yY2hlc3RyYXRvciBlblxuICogcGFyYWxlbG8sIHVubyBwb3IgYHNlc3Npb25JZGAuIFNvYnJldml2ZSBhIGNhbWJpb3MgZGUgdmlzdGEgeSBhbCBjaWVycmUgZGVsXG4gKiBtb2RhbDogbG9zIHN0cmVhbXMgc29sbyBzZSBjYW5jZWxhbiBjb24gc3RvcCBleHBsw61jaXRvIGRlbCB1c3VhcmlvIG8gYWxcbiAqIGNvbXBsZXRhci9lcnJvcmFyLlxuICovXG5leHBvcnQgY29uc3Qgc2Vzc2lvblN0cmVhbU1hbmFnZXIgPSB7XG4gIGlzQWN0aXZlOiBpc1N0cmVhbUFjdGl2ZSxcbiAgZ2V0QWN0aXZlQ291bnQ6IGdldEFjdGl2ZVN0cmVhbUNvdW50LFxuICBnZXRBY3RpdmVTZXNzaW9uSWRzOiAoKTogc3RyaW5nW10gPT4gQXJyYXkuZnJvbShhY3RpdmVTdHJlYW1zLmtleXMoKSksXG5cbiAgYXN5bmMgc3RhcnRTdHJlYW0ocGFyYW1zOiBTdGFydFN0cmVhbVBhcmFtcyk6IFByb21pc2U8U3RhcnRTdHJlYW1SZXN1bHQ+IHtcbiAgICBlbnN1cmVTZXNzaW9uTm90aWZpY2F0aW9uc0luaXRpYWxpemVkKClcblxuICAgIGNvbnN0IHsgc2Vzc2lvbklkLCBwbGFjZWhvbGRlcklkLCByZXF1ZXN0LCBjYWxsYmFja3MsIHQsIGFjdGl2aXR5T3B0aW9ucywgYWdlbnRJZCwgYWdlbnROYW1lIH0gPSBwYXJhbXNcblxuICAgIGlmIChpc1N0cmVhbUFjdGl2ZShzZXNzaW9uSWQpKSB7XG4gICAgICByZXR1cm4geyBzdGFydGVkOiBmYWxzZSwgcmVhc29uOiAnYWxyZWFkeV9hY3RpdmUnIH1cbiAgICB9XG4gICAgaWYgKGdldEFjdGl2ZVN0cmVhbUNvdW50KCkgPj0gTUFYX0NPTkNVUlJFTlRfU1RSRUFNUykge1xuICAgICAgcmV0dXJuIHsgc3RhcnRlZDogZmFsc2UsIHJlYXNvbjogJ2xpbWl0JyB9XG4gICAgfVxuXG4gICAgY29uc3QgY29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKVxuICAgIGNvbnN0IGFjdGl2ZTogQWN0aXZlU3RyZWFtID0geyBzZXNzaW9uSWQsIGNvbnRyb2xsZXIsIGlzU3RvcHBlZDogZmFsc2UgfVxuICAgIGFjdGl2ZVN0cmVhbXMuc2V0KHNlc3Npb25JZCwgYWN0aXZlKVxuXG4gICAgc3RvcmUoKS5lbnN1cmVTZXNzaW9uKHNlc3Npb25JZClcbiAgICBzdG9yZSgpLnBhdGNoTWV0YShzZXNzaW9uSWQsIHtcbiAgICAgIHBsYWNlaG9sZGVySWQsXG4gICAgICBlcnJvcjogbnVsbCxcbiAgICAgIGlzTG9hZGluZzogdHJ1ZSxcbiAgICAgIGlzV3JpdGluZzogZmFsc2UsXG4gICAgICAuLi4oYWdlbnRJZCAhPSBudWxsID8geyBhZ2VudElkIH0gOiB7fSksXG4gICAgICAuLi4oYWdlbnROYW1lICE9IG51bGwgPyB7IGFnZW50TmFtZSB9IDoge30pLFxuICAgIH0pXG4gICAgc3RvcmUoKS5zZXRTdGF0dXMoc2Vzc2lvbklkLCAndGhpbmtpbmcnKVxuICAgIHNlc3Npb25TdHJlYW1pbmdUZXh0LnN0YXJ0KHNlc3Npb25JZCwgcGxhY2Vob2xkZXJJZClcbiAgICByZWFzb25pbmdTdG9yZS5zdGFydChwbGFjZWhvbGRlcklkKVxuICAgIHN0b3JlKCkuc2V0QWN0aXZpdHkoc2Vzc2lvbklkLCBnZXRJbml0aWFsU3RyZWFtQWN0aXZpdHkodCwgYWN0aXZpdHlPcHRpb25zID8/IHt9KSlcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IG1haWEuT3JjaGVzdHJhdG9yLm9yY2hlc3RyYXRvcihyZXF1ZXN0LCBjb250cm9sbGVyLnNpZ25hbClcbiAgICAgIGF3YWl0IHBhcnNlU2Vzc2lvblNTRShyZXNwb25zZSwgYWN0aXZlLCBwYXJhbXMpXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGlmICghYWN0aXZlLmlzU3RvcHBlZCkge1xuICAgICAgICBzZXNzaW9uU3RyZWFtaW5nVGV4dC5jbGVhcihzZXNzaW9uSWQpXG4gICAgICAgIHN0b3JlKCkucGF0Y2hNZXRhKHNlc3Npb25JZCwgeyBpc0xvYWRpbmc6IGZhbHNlLCBpc1dyaXRpbmc6IGZhbHNlIH0pXG4gICAgICAgIHN0b3JlKCkuc2V0QWN0aXZpdHkoc2Vzc2lvbklkLCBudWxsKVxuICAgICAgICBzdG9yZSgpLnNldFN0YXR1cyhzZXNzaW9uSWQsICdlcnJvcicpXG4gICAgICAgIGNhbGxiYWNrcy5vbkVycm9yPy4oKVxuICAgICAgfVxuICAgIH0gZmluYWxseSB7XG4gICAgICBhY3RpdmVTdHJlYW1zLmRlbGV0ZShzZXNzaW9uSWQpXG4gICAgfVxuXG4gICAgcmV0dXJuIHsgc3RhcnRlZDogdHJ1ZSB9XG4gIH0sXG5cbiAgLyoqIFJlc3VtZSBISVRMIChgY29udGludWUtdGhyZWFkYCkga2V5ZWQgcG9yIHNlc3Npb25JZCDigJQgbWlzbW8gbW90b3IgcXVlIG9yY2hlc3RyYXRvci4gKi9cbiAgYXN5bmMgc3RhcnRDb250aW51ZVN0cmVhbShwYXJhbXM6IFN0YXJ0Q29udGludWVTdHJlYW1QYXJhbXMpOiBQcm9taXNlPFN0YXJ0U3RyZWFtUmVzdWx0PiB7XG4gICAgZW5zdXJlU2Vzc2lvbk5vdGlmaWNhdGlvbnNJbml0aWFsaXplZCgpXG5cbiAgICBjb25zdCB7IHNlc3Npb25JZCwgcGxhY2Vob2xkZXJJZCwgY29udGludWVSZXF1ZXN0LCBjYWxsYmFja3MsIHQsIGhpdGxFeGVjdXRpb25Db250ZXh0LCBhZ2VudElkLCBhZ2VudE5hbWUgfSA9IHBhcmFtc1xuXG4gICAgaWYgKGlzU3RyZWFtQWN0aXZlKHNlc3Npb25JZCkpIHtcbiAgICAgIHJldHVybiB7IHN0YXJ0ZWQ6IGZhbHNlLCByZWFzb246ICdhbHJlYWR5X2FjdGl2ZScgfVxuICAgIH1cbiAgICBpZiAoZ2V0QWN0aXZlU3RyZWFtQ291bnQoKSA+PSBNQVhfQ09OQ1VSUkVOVF9TVFJFQU1TKSB7XG4gICAgICByZXR1cm4geyBzdGFydGVkOiBmYWxzZSwgcmVhc29uOiAnbGltaXQnIH1cbiAgICB9XG5cbiAgICBpZiAoaGl0bEV4ZWN1dGlvbkNvbnRleHQpIHtcbiAgICAgIHNlc3Npb25IaXRsQ29udGV4dC5zZXQoc2Vzc2lvbklkLCBoaXRsRXhlY3V0aW9uQ29udGV4dClcbiAgICB9XG5cbiAgICBjb25zdCBjb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpXG4gICAgY29uc3QgYWN0aXZlOiBBY3RpdmVTdHJlYW0gPSB7IHNlc3Npb25JZCwgY29udHJvbGxlciwgaXNTdG9wcGVkOiBmYWxzZSB9XG4gICAgYWN0aXZlU3RyZWFtcy5zZXQoc2Vzc2lvbklkLCBhY3RpdmUpXG5cbiAgICBzdG9yZSgpLmVuc3VyZVNlc3Npb24oc2Vzc2lvbklkKVxuICAgIHN0b3JlKCkucGF0Y2hNZXRhKHNlc3Npb25JZCwge1xuICAgICAgcGxhY2Vob2xkZXJJZCxcbiAgICAgIGVycm9yOiBudWxsLFxuICAgICAgaXNMb2FkaW5nOiB0cnVlLFxuICAgICAgaXNXcml0aW5nOiBmYWxzZSxcbiAgICAgIC4uLihhZ2VudElkICE9IG51bGwgPyB7IGFnZW50SWQgfSA6IHt9KSxcbiAgICAgIC4uLihhZ2VudE5hbWUgIT0gbnVsbCA/IHsgYWdlbnROYW1lIH0gOiB7fSksXG4gICAgfSlcbiAgICBzdG9yZSgpLnNldFN0YXR1cyhzZXNzaW9uSWQsICd0aGlua2luZycpXG4gICAgc2Vzc2lvblN0cmVhbWluZ1RleHQuc3RhcnQoc2Vzc2lvbklkLCBwbGFjZWhvbGRlcklkKVxuICAgIHN0b3JlKCkuc2V0QWN0aXZpdHkoXG4gICAgICBzZXNzaW9uSWQsXG4gICAgICByZXNvbHZlSW5pdGlhbEhpdGxTdHJlYW1BY3Rpdml0eSh0LCBoaXRsRXhlY3V0aW9uQ29udGV4dCA/PyBzZXNzaW9uSGl0bENvbnRleHQuZ2V0KHNlc3Npb25JZCkgPz8gdW5kZWZpbmVkKVxuICAgIClcblxuICAgIGNvbnN0IHNzZVBhcmFtczogU3RhcnRTdHJlYW1QYXJhbXMgPSB7XG4gICAgICBzZXNzaW9uSWQsXG4gICAgICBwbGFjZWhvbGRlcklkLFxuICAgICAgcmVxdWVzdDoge30gYXMgT3JjaGVzdHJhdG9yUmVxdWVzdCxcbiAgICAgIGNhbGxiYWNrcyxcbiAgICAgIHQsXG4gICAgICBoaXRsRXhlY3V0aW9uQ29udGV4dDogaGl0bEV4ZWN1dGlvbkNvbnRleHQgPz8gc2Vzc2lvbkhpdGxDb250ZXh0LmdldChzZXNzaW9uSWQpLFxuICAgICAgYWdlbnRJZCxcbiAgICAgIGFnZW50TmFtZSxcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBtYWlhLk9yY2hlc3RyYXRvci5jb250aW51ZVRocmVhZChjb250aW51ZVJlcXVlc3QsIGNvbnRyb2xsZXIuc2lnbmFsKVxuICAgICAgaWYgKCFyZXNwb25zZS5vaykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGNvbnRpbnVlLXRocmVhZCBmYWlsZWQ6ICR7cmVzcG9uc2Uuc3RhdHVzfWApXG4gICAgICB9XG4gICAgICBhd2FpdCBwYXJzZVNlc3Npb25TU0UocmVzcG9uc2UsIGFjdGl2ZSwgc3NlUGFyYW1zKVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpZiAoIWFjdGl2ZS5pc1N0b3BwZWQpIHtcbiAgICAgICAgc2Vzc2lvblN0cmVhbWluZ1RleHQuY2xlYXIoc2Vzc2lvbklkKVxuICAgICAgICBzdG9yZSgpLnBhdGNoTWV0YShzZXNzaW9uSWQsIHsgaXNMb2FkaW5nOiBmYWxzZSwgaXNXcml0aW5nOiBmYWxzZSB9KVxuICAgICAgICBzdG9yZSgpLnNldEFjdGl2aXR5KHNlc3Npb25JZCwgbnVsbClcbiAgICAgICAgc3RvcmUoKS5zZXRTdGF0dXMoc2Vzc2lvbklkLCAnZXJyb3InKVxuICAgICAgICBjYWxsYmFja3Mub25FcnJvcj8uKClcbiAgICAgIH1cbiAgICB9IGZpbmFsbHkge1xuICAgICAgYWN0aXZlU3RyZWFtcy5kZWxldGUoc2Vzc2lvbklkKVxuICAgICAgc2Vzc2lvbkhpdGxDb250ZXh0LmNsZWFyKHNlc3Npb25JZClcbiAgICB9XG5cbiAgICByZXR1cm4geyBzdGFydGVkOiB0cnVlIH1cbiAgfSxcblxuICAvKiogUmVnZW5lcmEgbGEgcmVzcHVlc3RhIGRlIHVuIHR1cm5vIChgcmV0cnlfY29tcGxldGlvbmApIOKAlCBtaXNtbyBtb3RvciBTU0UgcXVlIG9yY2hlc3RyYXRvci4gKi9cbiAgYXN5bmMgc3RhcnRSZXRyeVN0cmVhbShwYXJhbXM6IFN0YXJ0UmV0cnlTdHJlYW1QYXJhbXMpOiBQcm9taXNlPFN0YXJ0U3RyZWFtUmVzdWx0PiB7XG4gICAgZW5zdXJlU2Vzc2lvbk5vdGlmaWNhdGlvbnNJbml0aWFsaXplZCgpXG5cbiAgICBjb25zdCB7IHNlc3Npb25JZCwgcGxhY2Vob2xkZXJJZCwgcmV0cnlSZXF1ZXN0LCBjYWxsYmFja3MsIHQsIGFjdGl2aXR5T3B0aW9ucywgYWdlbnRJZCwgYWdlbnROYW1lIH0gPSBwYXJhbXNcblxuICAgIGlmIChpc1N0cmVhbUFjdGl2ZShzZXNzaW9uSWQpKSB7XG4gICAgICByZXR1cm4geyBzdGFydGVkOiBmYWxzZSwgcmVhc29uOiAnYWxyZWFkeV9hY3RpdmUnIH1cbiAgICB9XG4gICAgaWYgKGdldEFjdGl2ZVN0cmVhbUNvdW50KCkgPj0gTUFYX0NPTkNVUlJFTlRfU1RSRUFNUykge1xuICAgICAgcmV0dXJuIHsgc3RhcnRlZDogZmFsc2UsIHJlYXNvbjogJ2xpbWl0JyB9XG4gICAgfVxuXG4gICAgY29uc3QgY29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKVxuICAgIGNvbnN0IGFjdGl2ZTogQWN0aXZlU3RyZWFtID0geyBzZXNzaW9uSWQsIGNvbnRyb2xsZXIsIGlzU3RvcHBlZDogZmFsc2UgfVxuICAgIGFjdGl2ZVN0cmVhbXMuc2V0KHNlc3Npb25JZCwgYWN0aXZlKVxuXG4gICAgc3RvcmUoKS5lbnN1cmVTZXNzaW9uKHNlc3Npb25JZClcbiAgICBzdG9yZSgpLnBhdGNoTWV0YShzZXNzaW9uSWQsIHtcbiAgICAgIHBsYWNlaG9sZGVySWQsXG4gICAgICBlcnJvcjogbnVsbCxcbiAgICAgIGlzTG9hZGluZzogdHJ1ZSxcbiAgICAgIGlzV3JpdGluZzogZmFsc2UsXG4gICAgICAuLi4oYWdlbnRJZCAhPSBudWxsID8geyBhZ2VudElkIH0gOiB7fSksXG4gICAgICAuLi4oYWdlbnROYW1lICE9IG51bGwgPyB7IGFnZW50TmFtZSB9IDoge30pLFxuICAgIH0pXG4gICAgc3RvcmUoKS5zZXRTdGF0dXMoc2Vzc2lvbklkLCAndGhpbmtpbmcnKVxuICAgIHNlc3Npb25TdHJlYW1pbmdUZXh0LnN0YXJ0KHNlc3Npb25JZCwgcGxhY2Vob2xkZXJJZClcbiAgICBzdG9yZSgpLnNldEFjdGl2aXR5KHNlc3Npb25JZCwgZ2V0SW5pdGlhbFN0cmVhbUFjdGl2aXR5KHQsIGFjdGl2aXR5T3B0aW9ucyA/PyB7fSkpXG5cbiAgICBjb25zdCBzc2VQYXJhbXM6IFN0YXJ0U3RyZWFtUGFyYW1zID0ge1xuICAgICAgc2Vzc2lvbklkLFxuICAgICAgcGxhY2Vob2xkZXJJZCxcbiAgICAgIHJlcXVlc3Q6IHt9IGFzIE9yY2hlc3RyYXRvclJlcXVlc3QsXG4gICAgICBjYWxsYmFja3MsXG4gICAgICB0LFxuICAgICAgYWN0aXZpdHlPcHRpb25zLFxuICAgICAgYWdlbnRJZCxcbiAgICAgIGFnZW50TmFtZSxcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBtYWlhLk9yY2hlc3RyYXRvci5yZXRyeUNvbXBsZXRpb24ocmV0cnlSZXF1ZXN0LCBjb250cm9sbGVyLnNpZ25hbClcbiAgICAgIGlmICghcmVzcG9uc2Uub2spIHtcbiAgICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PT0gNDA0KSB7XG4gICAgICAgICAgbGV0IGRldGFpbDogc3RyaW5nIHwgdW5kZWZpbmVkXG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IGRhdGEgPSAoYXdhaXQgcmVzcG9uc2UuanNvbigpKSBhcyB7IGRldGFpbD86IHN0cmluZyB9XG4gICAgICAgICAgICBkZXRhaWwgPSB0eXBlb2YgZGF0YS5kZXRhaWwgPT09ICdzdHJpbmcnID8gZGF0YS5kZXRhaWwgOiB1bmRlZmluZWRcbiAgICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAgIGRldGFpbCA9IHVuZGVmaW5lZFxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoZGV0YWlsID09PSAnVHVybiBub3QgZm91bmQnKSB7XG4gICAgICAgICAgICBzZXNzaW9uU3RyZWFtaW5nVGV4dC5jbGVhcihzZXNzaW9uSWQpXG4gICAgICAgICAgICBzdG9yZSgpLnBhdGNoTWV0YShzZXNzaW9uSWQsIHsgaXNMb2FkaW5nOiBmYWxzZSwgaXNXcml0aW5nOiBmYWxzZSwgcGxhY2Vob2xkZXJJZDogbnVsbCB9KVxuICAgICAgICAgICAgc3RvcmUoKS5zZXRBY3Rpdml0eShzZXNzaW9uSWQsIG51bGwpXG4gICAgICAgICAgICBzdG9yZSgpLnNldFN0YXR1cyhzZXNzaW9uSWQsICdpZGxlJylcbiAgICAgICAgICAgIGFjdGl2ZVN0cmVhbXMuZGVsZXRlKHNlc3Npb25JZClcbiAgICAgICAgICAgIHJldHVybiB7IHN0YXJ0ZWQ6IGZhbHNlLCByZWFzb246ICd0dXJuX25vdF9mb3VuZCcgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYHJldHJ5X2NvbXBsZXRpb24gZmFpbGVkOiAke3Jlc3BvbnNlLnN0YXR1c31gKVxuICAgICAgfVxuICAgICAgYXdhaXQgcGFyc2VTZXNzaW9uU1NFKHJlc3BvbnNlLCBhY3RpdmUsIHNzZVBhcmFtcylcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgaWYgKCFhY3RpdmUuaXNTdG9wcGVkKSB7XG4gICAgICAgIHNlc3Npb25TdHJlYW1pbmdUZXh0LmNsZWFyKHNlc3Npb25JZClcbiAgICAgICAgc3RvcmUoKS5wYXRjaE1ldGEoc2Vzc2lvbklkLCB7IGlzTG9hZGluZzogZmFsc2UsIGlzV3JpdGluZzogZmFsc2UgfSlcbiAgICAgICAgc3RvcmUoKS5zZXRBY3Rpdml0eShzZXNzaW9uSWQsIG51bGwpXG4gICAgICAgIHN0b3JlKCkuc2V0U3RhdHVzKHNlc3Npb25JZCwgJ2Vycm9yJylcbiAgICAgICAgY2FsbGJhY2tzLm9uRXJyb3I/LigpXG4gICAgICB9XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGFjdGl2ZVN0cmVhbXMuZGVsZXRlKHNlc3Npb25JZClcbiAgICB9XG5cbiAgICByZXR1cm4geyBzdGFydGVkOiB0cnVlIH1cbiAgfSxcblxuICAvKiogQ2FuY2VsYWNpw7NuIGV4cGzDrWNpdGEgZGVsIHVzdWFyaW8gKG1lbnNhamUgXCJjYW5jZWxhZG9cIikuICovXG4gIHN0b3BTdHJlYW0oc2Vzc2lvbklkOiBzdHJpbmcsIGNhbGxiYWNrcz86IFNlc3Npb25TdHJlYW1DYWxsYmFja3MpIHtcbiAgICBjb25zdCBhY3RpdmUgPSBhY3RpdmVTdHJlYW1zLmdldChzZXNzaW9uSWQpXG4gICAgaWYgKCFhY3RpdmUpIHJldHVyblxuICAgIGFjdGl2ZS5pc1N0b3BwZWQgPSB0cnVlXG4gICAgYWN0aXZlLmNvbnRyb2xsZXIuYWJvcnQoKVxuICAgIGFjdGl2ZVN0cmVhbXMuZGVsZXRlKHNlc3Npb25JZClcbiAgICAvLyBFbCBwYXJjaWFsIHNlIHJlc2NhdGEgYW50ZXMgZGUgbGltcGlhcjogZWwgYmFja2VuZCBsbyBwZXJzaXN0ZSwgcGVybyBzaSBubyBsb1xuICAgIC8vIHBhc2Ftb3MgYWwgY2FsbGJhY2sgZGVzYXBhcmVjZSBkZSBwYW50YWxsYSBoYXN0YSBlbCBwcsOzeGltbyBmZXRjaCBkZSBsYSBzZXNpw7NuLlxuICAgIGNvbnN0IHBhcnRpYWxUZXh0ID0gc2Vzc2lvblN0cmVhbWluZ1RleHQuZ2V0U25hcHNob3Qoc2Vzc2lvbklkKS50ZXh0XG4gICAgc2Vzc2lvblN0cmVhbWluZ1RleHQuY2xlYXIoc2Vzc2lvbklkKVxuICAgIHN0b3JlKCkucGF0Y2hNZXRhKHNlc3Npb25JZCwgeyBpc0xvYWRpbmc6IGZhbHNlLCBpc1dyaXRpbmc6IGZhbHNlIH0pXG4gICAgc3RvcmUoKS5zZXRBY3Rpdml0eShzZXNzaW9uSWQsIG51bGwpXG4gICAgc3RvcmUoKS5zZXRTdGF0dXMoc2Vzc2lvbklkLCAnY2FuY2VsbGVkJylcbiAgICBjYWxsYmFja3M/Lm9uU3RvcD8uKHBhcnRpYWxUZXh0KVxuICB9LFxuXG4gIC8qKiBBYm9ydGEgc2luIG1hcmNhciBcImNhbmNlbGFkb1wiICh1c28gaW50ZXJubyAvIGxpbXBpZXphKS4gKi9cbiAgYWJvcnRTaWxlbnRseShzZXNzaW9uSWQ6IHN0cmluZykge1xuICAgIGNvbnN0IGFjdGl2ZSA9IGFjdGl2ZVN0cmVhbXMuZ2V0KHNlc3Npb25JZClcbiAgICBpZiAoIWFjdGl2ZSkgcmV0dXJuXG4gICAgYWN0aXZlLmlzU3RvcHBlZCA9IHRydWVcbiAgICBhY3RpdmUuY29udHJvbGxlci5hYm9ydCgpXG4gICAgYWN0aXZlU3RyZWFtcy5kZWxldGUoc2Vzc2lvbklkKVxuICAgIHNlc3Npb25TdHJlYW1pbmdUZXh0LmNsZWFyKHNlc3Npb25JZClcbiAgICBzdG9yZSgpLnBhdGNoTWV0YShzZXNzaW9uSWQsIHsgaXNMb2FkaW5nOiBmYWxzZSwgaXNXcml0aW5nOiBmYWxzZSB9KVxuICAgIHN0b3JlKCkuc2V0QWN0aXZpdHkoc2Vzc2lvbklkLCBudWxsKVxuICAgIGlmIChzdG9yZSgpLmdldE1ldGEoc2Vzc2lvbklkKT8uc3RhdHVzICE9PSAnY29tcGxldGUnKSB7XG4gICAgICBzdG9yZSgpLnNldFN0YXR1cyhzZXNzaW9uSWQsICdpZGxlJylcbiAgICB9XG4gIH0sXG5cbiAgYWJvcnRBbGwoKSB7XG4gICAgQXJyYXkuZnJvbShhY3RpdmVTdHJlYW1zLmtleXMoKSkuZm9yRWFjaChzZXNzaW9uSWQgPT4gdGhpcy5hYm9ydFNpbGVudGx5KHNlc3Npb25JZCkpXG4gIH0sXG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU9BLElBQUksTUFBTSxxQkFBcUI7QUFFdEMsU0FDRUMsd0JBQXdCLEVBQ3hCQyx5QkFBeUIsRUFDekJDLHdCQUF3QixFQUN4QkMsNkJBQTZCLEVBQzdCQyxnQ0FBZ0MsRUFDaENDLHNCQUFzQixRQUNqQixvQ0FBb0M7QUFFM0MsU0FBU0Msd0JBQXdCLEVBQUVDLGdCQUFnQixRQUFRLDhCQUE4QjtBQUN6RixTQUFTQyxjQUFjLFFBQVEsK0JBQStCO0FBRTlELFNBQVNDLG9CQUFvQixRQUFRLHdCQUF3QjtBQUM3RCxTQUFTQyxnQkFBZ0IsUUFBUSxvQkFBb0I7QUFDckQsU0FBU0MscUNBQXFDLFFBQVEsd0JBQXdCO0FBQzlFLFNBQVNDLGtCQUFrQixRQUFRLHNCQUFzQjs7QUFPekQ7O0FBcURBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTyxJQUFNQyxzQkFBc0IsR0FBRyxDQUFDO0FBRXZDLElBQU1DLGtC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
759
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJtYWlhIiwiZ2V0SW5pdGlhbFN0cmVhbUFjdGl2aXR5IiwiZ2V0VGhpbmtpbmdTdHJlYW1BY3Rpdml0eSIsImdldFdyaXRpbmdTdHJlYW1BY3Rpdml0eSIsInJlc29sdmVJbml0aWFsSGl0bFN0cmVhbUFjdGl2aXR5IiwiaXNDb21wbGV0ZUxpa2VTc2VQYXlsb2FkIiwibWVyZ2VTdHJlYW1DaHVuayIsInJlYXNvbmluZ1N0b3JlIiwic2Vzc2lvblN0cmVhbWluZ1RleHQiLCJ1c2VTZXNzaW9uc1N0b3JlIiwiZW5zdXJlU2Vzc2lvbk5vdGlmaWNhdGlvbnNJbml0aWFsaXplZCIsInNlc3Npb25IaXRsQ29udGV4dCIsIk1BWF9DT05DVVJSRU5UX1NUUkVBTVMiLCJTVFJFQU1fVEhST1RUTEVfTVMiLCJhY3RpdmVTdHJlYW1zIiwiTWFwIiwic3RvcmUiLCJnZXRTdGF0ZSIsImlzU3RyZWFtQWN0aXZlIiwic2Vzc2lvbklkIiwiaGFzIiwiZ2V0QWN0aXZlU3RyZWFtQ291bnQiLCJzaXplIiwicGFyc2VTZXNzaW9uU1NFIiwiX3JlZiIsIl9hc3luY1RvR2VuZXJhdG9yIiwiX3JlZ2VuZXJhdG9yUnVudGltZSIsIm1hcmsiLCJfY2FsbGVlIiwicmVzcG9uc2UiLCJhY3RpdmUiLCJwYXJhbXMiLCJfcmVzcG9uc2UkYm9keSIsIl9kYXRhJGVycm9yIiwiX2RhdGEkZXJyb3IyIiwiX2NhbGxiYWNrcyRvbkVycm9yIiwiX2RhdGEkZXJyb3IzIiwiX2RhdGEkZXJyb3I0IiwicGxhY2Vob2xkZXJJZCIsImNhbGxiYWNrcyIsInQiLCJwZW5kaW5nQ29udGVudCIsInRocm90dGxlVGltZXIiLCJmbHVzaFRvU3RvcmVzIiwiZW1pdFRocm90dGxlZCIsImZsdXNoUGVuZGluZyIsInJlYWRlciIsImRlY29kZXIiLCJidWZmZXIiLCJhY2N1bXVsYXRlZENvbnRlbnQiLCJoYXNTdGFydGVkV3JpdGluZyIsInNldFRoaW5raW5nQWN0aXZpdHkiLCJlbnN1cmVXcml0aW5nU3RhcnRlZCIsImFwcGx5U3RyZWFtQ2h1bmsiLCJjbGVhclN0cmVhbUxpa2VBbnN3ZXJSZXNldCIsImFwcGx5U3RyZWFtQ29tcGxldGUiLCJfeWllbGQkcmVhZGVyJHJlYWQiLCJkb25lIiwidmFsdWUiLCJsaW5lcyIsIl9pdGVyYXRvciIsIl9zdGVwIiwibGluZSIsIl9saW5lJHNwbGl0IiwiX2xpbmUkc3BsaXQyIiwiZXZlbnRMaW5lIiwiZGF0YUxpbmUiLCJldmVudFR5cGUiLCJkYXRhU3RyIiwiZGF0YSIsInRoaW5raW5nRGVsdGEiLCJzdGVwVG9vbCIsInN0ZXBUeXBlIiwiY2h1bmsiLCJfY2h1bmsiLCJfY2FsbGJhY2tzJG9uQXBwcm92YWwiLCJpc1ByZUFwcHJvdmVkIiwiX3JlZjMiLCJfdCIsIl90MiIsIl90MyIsIndyYXAiLCJfY29udGV4dCIsInByZXYiLCJuZXh0IiwiY29udGVudCIsIl9jYWxsYmFja3Mkb25TdHJlYW1VcCIsInNldFRleHQiLCJvblN0cmVhbVVwZGF0ZSIsImNhbGwiLCJ3aW5kb3ciLCJzZXRUaW1lb3V0IiwidG9FbWl0IiwiY2xlYXJUaW1lb3V0IiwiYm9keSIsImdldFJlYWRlciIsIkVycm9yIiwiVGV4dERlY29kZXIiLCJfc3RvcmUkZ2V0TWV0YSIsInRoaW5raW5nQWN0aXZpdHkiLCJjdXJyZW50IiwiZ2V0TWV0YSIsInN0cmVhbUFjdGl2aXR5IiwicGhhc2UiLCJtZXNzYWdlIiwicGF0Y2hNZXRhIiwiaXNMb2FkaW5nIiwic2V0U3RhdHVzIiwic2V0QWN0aXZpdHkiLCJfc3RvcmUkZ2V0TWV0YTIiLCJfY2FsbGJhY2tzJG9uU3RhcnRXcmkiLCJpc1dyaXRpbmciLCJvblN0YXJ0V3JpdGluZyIsInN5bmNMaXZlTmFycmF0aW9uIiwibWFya0Fuc3dlclJlc2V0IiwicGF5bG9hZCIsIl9wYXlsb2FkJGFnZW50X2lkIiwiX3N1YmFnZW50UmF3JHJlc29sdmVkIiwiX3JlZjIiLCJfY2FsbGJhY2tzJG9uRmluaXNoU3QiLCJmaW5hbENvbnRlbnQiLCJzb3VyY2VzIiwibWVtb3J5U2Vzc2lvbklkIiwibWVtb3J5X3Nlc3Npb25faWQiLCJhdHRhY2htZW50cyIsIkFycmF5IiwiaXNBcnJheSIsInN1Z2dlc3Rpb25zIiwic3VnZ2VzdF9yZXBseSIsImFnZW50SWRSYXciLCJhZ2VudF9pZCIsImFnZW50SWQiLCJjb21wbGV0ZWRBZ2VudElkIiwiU3RyaW5nIiwidHJpbSIsInN1YmFnZW50UmF3Iiwic3ViYWdlbnQiLCJyZXNvbHZlZENvbnRleHQiLCJyZXNvbHZlZF9jb250ZXh0IiwicmVhc29uaW5nIiwiZmluaXNoIiwiZmluaXNoUGF5bG9hZCIsIm9uRmluaXNoU3RyZWFtIiwiaXNTdG9wcGVkIiwiY2FuY2VsIiwiYWJydXB0IiwicmVhZCIsInNlbnQiLCJkZWNvZGUiLCJzdHJlYW0iLCJzcGxpdCIsInBvcCIsIl9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyIiwicyIsIm4iLCJfc2xpY2VkVG9BcnJheSIsInJlcGxhY2UiLCJKU09OIiwicGFyc2UiLCJkZWx0YSIsImkiLCJhcHBlbmRUaGlua2luZyIsInRvb2wiLCJ0eXBlIiwic3RhdHVzIiwiY2FwdHVyZUxlYWRpbmdGcm9tQm9keSIsImFwcGx5U3RlcCIsInNob3VsZENsZWFyU3RyZWFtRm9yTGVhZGluZyIsIm5vZGUiLCJtYW51YWxfYXBwcm92YWxfZGV0ZWN0ZWQiLCJhdXRvX2FwcHJvdmVkIiwiYXBwcm92YWxfc3RhdHVzIiwiY2xlYXIiLCJvbkFwcHJvdmFsUmVxdWlyZWQiLCJwZW5kaW5nX2FjdGlvbnMiLCJsZW5ndGgiLCJjb25zb2xlIiwiZXJyb3IiLCJzZXRFcnJvciIsIm9uRXJyb3IiLCJ3YXJuIiwiZSIsImYiLCJzdG9wIiwiX3giLCJfeDIiLCJfeDMiLCJhcHBseSIsImFyZ3VtZW50cyIsInNlc3Npb25TdHJlYW1NYW5hZ2VyIiwiaXNBY3RpdmUiLCJnZXRBY3RpdmVDb3VudCIsImdldEFjdGl2ZVNlc3Npb25JZHMiLCJmcm9tIiwia2V5cyIsInN0YXJ0U3RyZWFtIiwiX2NhbGxlZTIiLCJyZXF1ZXN0IiwiYWN0aXZpdHlPcHRpb25zIiwiYWdlbnROYW1lIiwiY29udHJvbGxlciIsIl9jYWxsYmFja3Mkb25FcnJvcjIiLCJfdDQiLCJfY29udGV4dDIiLCJzdGFydGVkIiwicmVhc29uIiwiQWJvcnRDb250cm9sbGVyIiwic2V0IiwiZW5zdXJlU2Vzc2lvbiIsIl9vYmplY3RTcHJlYWQiLCJzdGFydCIsIk9yY2hlc3RyYXRvciIsIm9yY2hlc3RyYXRvciIsInNpZ25hbCIsInN0YXJ0Q29udGludWVTdHJlYW0iLCJfY2FsbGVlMyIsIl9yZWY0IiwiY29udGludWVSZXF1ZXN0IiwiaGl0bEV4ZWN1dGlvbkNvbnRleHQiLCJzc2VQYXJhbXMiLCJfY2FsbGJhY2tzJG9uRXJyb3IzIiwiX3Q1IiwiX2NvbnRleHQzIiwiZ2V0IiwidW5kZWZpbmVkIiwiY29udGludWVUaHJlYWQiLCJvayIsImNvbmNhdCIsInN0YXJ0UmV0cnlTdHJlYW0iLCJfY2FsbGVlNCIsInJldHJ5UmVxdWVzdCIsImRldGFpbCIsIl9jYWxsYmFja3Mkb25FcnJvcjQiLCJfdDYiLCJfdDciLCJfY29udGV4dDQiLCJyZXRyeUNvbXBsZXRpb24iLCJqc29uIiwic3RvcFN0cmVhbSIsIl9jYWxsYmFja3Mkb25TdG9wIiwiYWJvcnQiLCJwYXJ0aWFsVGV4dCIsImdldFNuYXBzaG90IiwidGV4dCIsIm9uU3RvcCIsImFib3J0U2lsZW50bHkiLCJfc3RvcmUkZ2V0TWV0YTMiLCJhYm9ydEFsbCIsIl90aGlzIiwiZm9yRWFjaCJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9zdG9yZS9zZXNzaW9ucy9zZXNzaW9uU3RyZWFtTWFuYWdlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBuby1jb25zb2xlICovXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1jb250aW51ZSAqL1xuLyogZXNsaW50LWRpc2FibGUgbm8tYXdhaXQtaW4tbG9vcCAqL1xuLyogZXNsaW50LWRpc2FibGUgbm8tcmVzdHJpY3RlZC1zeW50YXggKi9cbi8qIGVzbGludC1kaXNhYmxlIG5vLWNvbnN0YW50LWNvbmRpdGlvbiAqL1xuLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSAqL1xuaW1wb3J0IG1haWEgZnJvbSAnLi4vLi4vc2VydmljZXMvbWFpYSdcbmltcG9ydCB0eXBlIHsgQXBwcm92YWxSZXF1ZXN0IH0gZnJvbSAnLi4vLi4vdHlwZXMvQ2hhdCdcbmltcG9ydCB7XG4gIGdldEluaXRpYWxTdHJlYW1BY3Rpdml0eSxcbiAgZ2V0VGhpbmtpbmdTdHJlYW1BY3Rpdml0eSxcbiAgZ2V0V3JpdGluZ1N0cmVhbUFjdGl2aXR5LFxuICByZXNvbHZlSW5pdGlhbEhpdGxTdHJlYW1BY3Rpdml0eSxcbn0gZnJvbSAnLi4vLi4vdXRpbHMvc3RyZWFtQWN0aXZpdHlNZXNzYWdlcydcbmltcG9ydCB0eXBlIHsgSGl0bEV4ZWN1dGlvbkNvbnRleHQgfSBmcm9tICcuLi8uLi91dGlscy9zdHJlYW1BY3Rpdml0eU1lc3NhZ2VzJ1xuaW1wb3J0IHsgaXNDb21wbGV0ZUxpa2VTc2VQYXlsb2FkLCBtZXJnZVN0cmVhbUNodW5rIH0gZnJvbSAnLi4vLi4vdXRpbHMvc3NlU3RyZWFtQ29udGVudCdcbmltcG9ydCB7IHJlYXNvbmluZ1N0b3JlIH0gZnJvbSAnLi4vLi4vaG9va3MvdXNlUmVhc29uaW5nVHJhY2UnXG5pbXBvcnQgdHlwZSB7IFJlYXNvbmluZ1N0ZXBQYXlsb2FkLCBSZWFzb25pbmdUcmFjZVBheWxvYWQgfSBmcm9tICcuLi8uLi90eXBlcy9yZWFzb25pbmcnXG5pbXBvcnQgeyBzZXNzaW9uU3RyZWFtaW5nVGV4dCB9IGZyb20gJy4vc2Vzc2lvblN0cmVhbWluZ1RleHQnXG5pbXBvcnQgeyB1c2VTZXNzaW9uc1N0b3JlIH0gZnJvbSAnLi91c2VTZXNzaW9uc1N0b3JlJ1xuaW1wb3J0IHsgZW5zdXJlU2Vzc2lvbk5vdGlmaWNhdGlvbnNJbml0aWFsaXplZCB9IGZyb20gJy4vc2Vzc2lvbk5vdGlmaWNhdGlvbnMnXG5pbXBvcnQgeyBzZXNzaW9uSGl0bENvbnRleHQgfSBmcm9tICcuL3Nlc3Npb25IaXRsQ29udGV4dCdcbmltcG9ydCB0eXBlIHsgU2Vzc2lvbkZpbmlzaFBheWxvYWQsIFNlc3Npb25TdHJlYW1DYWxsYmFja3MsIFN0YXJ0U3RyZWFtUmVzdWx0IH0gZnJvbSAnLi9zZXNzaW9ucy50eXBlcydcblxudHlwZSBPcmNoZXN0cmF0b3JSZXF1ZXN0ID0gUGFyYW1ldGVyczx0eXBlb2YgbWFpYS5PcmNoZXN0cmF0b3Iub3JjaGVzdHJhdG9yPlswXVxudHlwZSBDb250aW51ZVRocmVhZFJlcXVlc3QgPSBQYXJhbWV0ZXJzPHR5cGVvZiBtYWlhLk9yY2hlc3RyYXRvci5jb250aW51ZVRocmVhZD5bMF1cbnR5cGUgUmV0cnlDb21wbGV0aW9uUmVxdWVzdCA9IFBhcmFtZXRlcnM8dHlwZW9mIG1haWEuT3JjaGVzdHJhdG9yLnJldHJ5Q29tcGxldGlvbj5bMF1cblxuLyoqIENvbXBhdGlibGUgY29uIGVsIGB0YCBkZSBpMThuZXh0ICh1c28gZGUgdW5hIHNvbGEga2V5KS4gKi9cbnR5cGUgVHJhbnNsYXRlRm4gPSAoa2V5OiBzdHJpbmcpID0+IHN0cmluZ1xuXG50eXBlIFN0YXJ0U3RyZWFtUGFyYW1zID0ge1xuICBzZXNzaW9uSWQ6IHN0cmluZ1xuICBwbGFjZWhvbGRlcklkOiBzdHJpbmdcbiAgcmVxdWVzdDogT3JjaGVzdHJhdG9yUmVxdWVzdFxuICBjYWxsYmFja3M6IFNlc3Npb25TdHJlYW1DYWxsYmFja3NcbiAgdDogVHJhbnNsYXRlRm5cbiAgYWN0aXZpdHlPcHRpb25zPzoge1xuICAgIGlzV2ViU2VhcmNoQWN0aXZlPzogYm9vbGVhblxuICAgIGlzRGVlcFNlYXJjaEFjdGl2ZT86IGJvb2xlYW5cbiAgICBoYXNBdHRhY2htZW50cz86IGJvb2xlYW5cbiAgICBhdHRhY2htZW50c0NvdW50PzogbnVtYmVyXG4gIH1cbiAgaGl0bEV4ZWN1dGlvbkNvbnRleHQ/OiBIaXRsRXhlY3V0aW9uQ29udGV4dCB8IG51bGxcbiAgYWdlbnRJZD86IHN0cmluZyB8IG51bWJlclxuICBhZ2VudE5hbWU/OiBzdHJpbmdcbn1cblxudHlwZSBTdGFydENvbnRpbnVlU3RyZWFtUGFyYW1zID0ge1xuICBzZXNzaW9uSWQ6IHN0cmluZ1xuICBwbGFjZWhvbGRlcklkOiBzdHJpbmdcbiAgY29udGludWVSZXF1ZXN0OiBDb250aW51ZVRocmVhZFJlcXVlc3RcbiAgY2FsbGJhY2tzOiBTZXNzaW9uU3RyZWFtQ2FsbGJhY2tzXG4gIHQ6IFRyYW5zbGF0ZUZuXG4gIGhpdGxFeGVjdXRpb25Db250ZXh0PzogSGl0bEV4ZWN1dGlvbkNvbnRleHQgfCBudWxsXG4gIGFnZW50SWQ/OiBzdHJpbmcgfCBudW1iZXJcbiAgYWdlbnROYW1lPzogc3RyaW5nXG59XG5cbnR5cGUgU3RhcnRSZXRyeVN0cmVhbVBhcmFtcyA9IHtcbiAgc2Vzc2lvbklkOiBzdHJpbmdcbiAgcGxhY2Vob2xkZXJJZDogc3RyaW5nXG4gIHJldHJ5UmVxdWVzdDogUmV0cnlDb21wbGV0aW9uUmVxdWVzdFxuICBjYWxsYmFja3M6IFNlc3Npb25TdHJlYW1DYWxsYmFja3NcbiAgdDogVHJhbnNsYXRlRm5cbiAgYWN0aXZpdHlPcHRpb25zPzoge1xuICAgIGlzV2ViU2VhcmNoQWN0aXZlPzogYm9vbGVhblxuICAgIGlzRGVlcFNlYXJjaEFjdGl2ZT86IGJvb2xlYW5cbiAgICBoYXNBdHRhY2htZW50cz86IGJvb2xlYW5cbiAgICBhdHRhY2htZW50c0NvdW50PzogbnVtYmVyXG4gIH1cbiAgYWdlbnRJZD86IHN0cmluZyB8IG51bWJlclxuICBhZ2VudE5hbWU/OiBzdHJpbmdcbn1cblxudHlwZSBBY3RpdmVTdHJlYW0gPSB7XG4gIHNlc3Npb25JZDogc3RyaW5nXG4gIGNvbnRyb2xsZXI6IEFib3J0Q29udHJvbGxlclxuICBpc1N0b3BwZWQ6IGJvb2xlYW5cbn1cblxuLyoqXG4gKiBNw6F4aW1vIGRlIHNlc2lvbmVzIGdlbmVyYW5kbyBlbiBwYXJhbGVsby4gUHJvdGVnZSByZWQvcmVjdXJzb3MgZGVsIGNsaWVudGUuXG4gKiBBanVzdGFibGUgYSBmdXR1cm8gdsOtYSBmbGFnIGRlbCBob3N0LlxuICovXG5leHBvcnQgY29uc3QgTUFYX0NPTkNVUlJFTlRfU1RSRUFNUyA9IDRcblxuY29uc3QgU1RSRUFNX1RIUk9UVExFX01TID0gMTZcblxuY29uc3QgYWN0aXZlU3RyZWFtcyA9IG5ldyBNYXA8c3RyaW5nLCBBY3RpdmVTdHJlYW0+KClcblxuY29uc3Qgc3RvcmUgPSAoKSA9PiB1c2VTZXNzaW9uc1N0b3JlLmdldFN0YXRlKClcblxuY29uc3QgaXNTdHJlYW1BY3RpdmUgPSAoc2Vzc2lvbklkOiBzdHJpbmcpOiBib29sZWFuID0+IGFjdGl2ZVN0cmVhbXMuaGFzKHNlc3Npb25JZClcblxuY29uc3QgZ2V0QWN0aXZlU3RyZWFtQ291bnQgPSAoKTogbnVtYmVyID0+IGFjdGl2ZVN0cmVhbXMuc2l6ZVxuXG5jb25zdCBwYXJzZVNlc3Npb25TU0UgPSBhc3luYyAocmVzcG9uc2U6IFJlc3BvbnNlLCBhY3RpdmU6IEFjdGl2ZVN0cmVhbSwgcGFyYW1zOiBTdGFydFN0cmVhbVBhcmFtcyk6IFByb21pc2U8dm9pZD4gPT4ge1xuICBjb25zdCB7IHNlc3Npb25JZCwgcGxhY2Vob2xkZXJJZCwgY2FsbGJhY2tzLCB0IH0gPSBwYXJhbXNcblxuICBsZXQgcGVuZGluZ0NvbnRlbnQ6IHN0cmluZyB8IG51bGwgPSBudWxsXG4gIGxldCB0aHJvdHRsZVRpbWVyOiBudW1iZXIgfCBudWxsID0gbnVsbFxuXG4gIGNvbnN0IGZsdXNoVG9TdG9yZXMgPSAoY29udGVudDogc3RyaW5nKSA9PiB7XG4gICAgc2Vzc2lvblN0cmVhbWluZ1RleHQuc2V0VGV4dChzZXNzaW9uSWQsIHBsYWNlaG9sZGVySWQsIGNvbnRlbnQpXG4gICAgY2FsbGJhY2tzLm9uU3RyZWFtVXBkYXRlPy4oY29udGVudClcbiAgfVxuXG4gIGNvbnN0IGVtaXRUaHJvdHRsZWQgPSAoY29udGVudDogc3RyaW5nKSA9PiB7XG4gICAgcGVuZGluZ0NvbnRlbnQgPSBjb250ZW50XG4gICAgaWYgKHRocm90dGxlVGltZXIgIT0gbnVsbCkgcmV0dXJuXG4gICAgdGhyb3R0bGVUaW1lciA9IHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRocm90dGxlVGltZXIgPSBudWxsXG4gICAgICBpZiAocGVuZGluZ0NvbnRlbnQgIT0gbnVsbCkge1xuICAgICAgICBjb25zdCB0b0VtaXQgPSBwZW5kaW5nQ29udGVudFxuICAgICAgICBwZW5kaW5nQ29udGVudCA9IG51bGxcbiAgICAgICAgZmx1c2hUb1N0b3Jlcyh0b0VtaXQpXG4gICAgICB9XG4gICAgfSwgU1RSRUFNX1RIUk9UVExFX01TKVxuICB9XG5cbiAgY29uc3QgZmx1c2hQZW5kaW5nID0gKCkgPT4ge1xuICAgIGlmICh0aHJvdHRsZVRpbWVyICE9IG51bGwpIHtcbiAgICAgIHdpbmRvdy5jbGVhclRpbWVvdXQodGhyb3R0bGVUaW1lcilcbiAgICAgIHRocm90dGxlVGltZXIgPSBudWxsXG4gICAgfVxuICAgIGlmIChwZW5kaW5nQ29udGVudCAhPSBudWxsKSB7XG4gICAgICBjb25zdCB0b0VtaXQgPSBwZW5kaW5nQ29udGVudFxuICAgICAgcGVuZGluZ0NvbnRlbnQgPSBudWxsXG4gICAgICBmbHVzaFRvU3RvcmVzKHRvRW1pdClcbiAgICB9XG4gIH1cblxuICBjb25zdCByZWFkZXIgPSByZXNwb25zZS5ib2R5Py5nZXRSZWFkZXIoKVxuICBpZiAoIXJlYWRlcikge1xuICAgIHRocm93IG5ldyBFcnJvcignTm8gcmVhZGVyIGF2YWlsYWJsZScpXG4gIH1cblxuICBjb25zdCBkZWNvZGVyID0gbmV3IFRleHREZWNvZGVyKClcbiAgbGV0IGJ1ZmZlciA9ICcnXG4gIGxldCBhY2N1bXVsYXRlZENvbnRlbnQgPSAnJ1xuICBsZXQgaGFzU3RhcnRlZFdyaXRpbmcgPSBmYWxzZVxuXG4gIGNvbnN0IHNldFRoaW5raW5nQWN0aXZpdHkgPSAoKSA9PiB7XG4gICAgY29uc3QgdGhpbmtpbmdBY3Rpdml0eSA9IGdldFRoaW5raW5nU3RyZWFtQWN0aXZpdHkodClcbiAgICBjb25zdCBjdXJyZW50ID0gc3RvcmUoKS5nZXRNZXRhKHNlc3Npb25JZCk/LnN0cmVhbUFjdGl2aXR5XG4gICAgaWYgKGN1cnJlbnQ/LnBoYXNlID09PSAndGhpbmtpbmcnICYmIGN1cnJlbnQubWVzc2FnZSA9PT0gdGhpbmtpbmdBY3Rpdml0eS5tZXNzYWdlKSByZXR1cm5cbiAgICBzdG9yZSgpLnBhdGNoTWV0YShzZXNzaW9uSWQsIHsgaXNMb2FkaW5nOiB0cnVlIH0pXG4gICAgc3RvcmUoKS5zZXRTdGF0dXMoc2Vzc2lvbklkLCAndGhpbmtpbmcnKVxuICAgIHN0b3JlKCkuc2V0QWN0aXZpdHkoc2Vzc2lvbklkLCB0aGlua2luZ0FjdGl2aXR5KVxuICB9XG5cbiAgY29uc3QgZW5zdXJlV3JpdGluZ1N0YXJ0ZWQgPSAoKSA9PiB7XG4gICAgaWYgKCFoYXNTdGFydGVkV3JpdGluZykge1xuICAgICAgaGFzU3RhcnRlZFdyaXRpbmcgPSB0cnVlXG4gICAgICBzdG9yZSgpLnBhdGNoTWV0YShzZXNzaW9uSWQsIHsgaXNMb2FkaW5nOiB0cnVlLCBpc1dyaXRpbmc6IHRydWUgfSlcbiAgICAgIGNhbGxiYWNrcy5vblN0YXJ0V3JpdGluZz8uKClcbiAgICB9XG4gICAgY29uc3QgY3VycmVudCA9IHN0b3JlKCkuZ2V0TWV0YShzZXNzaW9uSWQpPy5zdHJlYW1BY3Rpdml0eVxuICAgIGlmIChjdXJyZW50Py5waGFzZSAhPT0gJ3dyaXRpbmcnKSB7XG4gICAgICBzdG9yZSgpLnBhdGNoTWV0YShzZXNzaW9uSWQsIHsgaXNMb2FkaW5nOiB0cnVlLCBpc1dyaXRpbmc6IHRydWUgfSlcbiAgICAgIHN0b3JlKCkuc2V0U3RhdHVzKHNlc3Npb25JZCwgJ3dyaXRpbmcnKVxuICAgICAgc3RvcmUoKS5zZXRBY3Rpdml0eShzZXNzaW9uSWQsIGdldFdyaXRpbmdTdHJlYW1BY3Rpdml0eSh0KSlcbiAgICB9XG4gIH1cblxuICBjb25zdCBhcHBseVN0cmVhbUNodW5rID0gKGNodW5rOiBzdHJpbmcpID0+IHtcbiAgICBpZiAoIWNodW5rKSByZXR1cm5cbiAgICBhY2N1bXVsYXRlZENvbnRlbnQgPSBtZXJnZVN0cmVhbUNodW5rKGFjY3VtdWxhdGVkQ29udGVudCwgY2h1bmspXG4gICAgcmVhc29uaW5nU3RvcmUuc3luY0xpdmVOYXJyYXRpb24ocGxhY2Vob2xkZXJJZCwgYWNjdW11bGF0ZWRDb250ZW50KVxuICAgIGVtaXRUaHJvdHRsZWQoYWNjdW11bGF0ZWRDb250ZW50KVxuICB9XG5cbiAgY29uc3QgY2xlYXJTdHJlYW1MaWtlQW5zd2VyUmVzZXQgPSAoKSA9PiB7XG4gICAgaWYgKHRocm90dGxlVGltZXIgIT0gbnVsbCkge1xuICAgICAgd2luZG93LmNsZWFyVGltZW91dCh0aHJvdHRsZVRpbWVyKVxuICAgICAgdGhyb3R0bGVUaW1lciA9IG51bGxcbiAgICB9XG4gICAgcGVuZGluZ0NvbnRlbnQgPSBudWxsXG4gICAgYWNjdW11bGF0ZWRDb250ZW50ID0gJydcbiAgICBmbHVzaFRvU3RvcmVzKCcnKVxuICAgIHJlYXNvbmluZ1N0b3JlLm1hcmtBbnN3ZXJSZXNldChwbGFjZWhvbGRlcklkKVxuICB9XG5cbiAgY29uc3QgYXBwbHlTdHJlYW1Db21wbGV0ZSA9IChwYXlsb2FkOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikgPT4ge1xuICAgIGNvbnN0IGZpbmFsQ29udGVudCA9IChwYXlsb2FkLmNvbnRlbnQgYXMgc3RyaW5nKSB8fCBhY2N1bXVsYXRlZENvbnRlbnRcbiAgICBjb25zdCBzb3VyY2VzID0gcGF5bG9hZC5zb3VyY2VzIHx8IG51bGxcbiAgICBjb25zdCBtZW1vcnlTZXNzaW9uSWQgPSAocGF5bG9hZC5tZW1vcnlfc2Vzc2lvbl9pZCBhcyBzdHJpbmcpIHx8ICcnXG4gICAgY29uc3QgYXR0YWNobWVudHMgPSBBcnJheS5pc0FycmF5KHBheWxvYWQuYXR0YWNobWVudHMpID8gcGF5bG9hZC5hdHRhY2htZW50cyA6IG51bGxcbiAgICBsZXQgc3VnZ2VzdGlvbnM6IHN0cmluZ1tdIHwgbnVsbCA9IG51bGxcbiAgICBpZiAoQXJyYXkuaXNBcnJheShwYXlsb2FkLnN1Z2dlc3RfcmVwbHkpKSB7XG4gICAgICBzdWdnZXN0aW9ucyA9IHBheWxvYWQuc3VnZ2VzdF9yZXBseSBhcyBzdHJpbmdbXVxuICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShwYXlsb2FkLnN1Z2dlc3Rpb25zKSkge1xuICAgICAgc3VnZ2VzdGlvbnMgPSBwYXlsb2FkLnN1Z2dlc3Rpb25zIGFzIHN0cmluZ1tdXG4gICAgfVxuICAgIGNvbnN0IGFnZW50SWRSYXcgPSBwYXlsb2FkLmFnZW50X2lkID8/IHBheWxvYWQuYWdlbnRJZFxuICAgIGNvbnN0IGNvbXBsZXRlZEFnZW50SWQgPSBhZ2VudElkUmF3ICE9IG51bGwgJiYgU3RyaW5nKGFnZW50SWRSYXcpLnRyaW0oKSAhPT0gJycgPyBTdHJpbmcoYWdlbnRJZFJhdykudHJpbSgpIDogbnVsbFxuICAgIGNvbnN0IHN1YmFnZW50UmF3ID0gcGF5bG9hZC5zdWJhZ2VudCBhcyB7IHJlc29sdmVkX2NvbnRleHQ/OiB1bmtub3duIH0gfCBudWxsIHwgdW5kZWZpbmVkXG4gICAgY29uc3QgcmVzb2x2ZWRDb250ZXh0ID0gc3ViYWdlbnRSYXc/LnJlc29sdmVkX2NvbnRleHQgPz8gbnVsbFxuICAgIGNvbnN0IHJlYXNvbmluZyA9IChwYXlsb2FkLnJlYXNvbmluZyBhcyBSZWFzb25pbmdUcmFjZVBheWxvYWQgfCBudWxsKSA/PyBudWxsXG5cbiAgICByZWFzb25pbmdTdG9yZS5maW5pc2gocGxhY2Vob2xkZXJJZCwgcmVhc29uaW5nKVxuICAgIGZsdXNoUGVuZGluZygpXG4gICAgc3RvcmUoKS5wYXRjaE1ldGEoc2Vzc2lvbklkLCB7IGlzTG9hZGluZzogZmFsc2UsIGlzV3JpdGluZzogZmFsc2UgfSlcbiAgICBzdG9yZSgpLnNldEFjdGl2aXR5KHNlc3Npb25JZCwgbnVsbClcbiAgICBzdG9yZSgpLnNldFN0YXR1cyhzZXNzaW9uSWQsICdjb21wbGV0ZScpXG5cbiAgICBjb25zdCBmaW5pc2hQYXlsb2FkOiBTZXNzaW9uRmluaXNoUGF5bG9hZCA9IHtcbiAgICAgIGNvbnRlbnQ6IGZpbmFsQ29udGVudCxcbiAgICAgIHNvdXJjZXMsXG4gICAgICBtZW1vcnlTZXNzaW9uSWQsXG4gICAgICBhdHRhY2htZW50cyxcbiAgICAgIHN1Z2dlc3Rpb25zLFxuICAgICAgY29tcGxldGVkQWdlbnRJZCxcbiAgICAgIHJlc29sdmVkQ29udGV4dCxcbiAgICAgIHJlYXNvbmluZyxcbiAgICB9XG4gICAgY2FsbGJhY2tzLm9uRmluaXNoU3RyZWFtPy4oZmluaXNoUGF5bG9hZClcblxuICAgIC8vIEVsIHRleHRvIGVuIHZpdm8gTk8gc2UgbGltcGlhIGFjw6EgYSBwcm9ww7NzaXRvLiBFbCBwbGFjZWhvbGRlciBzZSB2YSBjb24gZWxcbiAgICAvLyBgZHJvcGAgcXVlIGhhY2UgZWwgY29uc3VtaWRvciwgeSBjb24gw6lsIHN1IHN1c2NyaXBjacOzbjsgdmFjaWFybG8gYW50ZXMgbG9cbiAgICAvLyBkZWphYmEgbW9udGFkbyB5IHNpbiB0ZXh0byAoYWx0dXJhIDApIGR1cmFudGUgfjI1bXM6IGVsIGZsaWNrZXIgZGUgZmluIGRlXG4gICAgLy8gc3RyZWFtLiBObyBhbGNhbnphIGNvbiBkaWZlcmlybG8sIHBvcnF1ZSBlc3RlIGNsZWFyIHZpYWphIGVuIFN5bmNMYW5lXG4gICAgLy8gKHN0b3JlIGV4dGVybm8pIHkgZWwgc3dhcCBkZSBtZW5zYWplcyBlbiBEZWZhdWx0TGFuZSwgYXPDrSBxdWUgc2llbXByZSBzZVxuICAgIC8vIGN1ZWxhIGVuIGVsIG1lZGlvLiBFbCBzbG90IHNlIGxpYmVyYSBlbiBlbCBwcsOzeGltbyBgc3RhcnQoKWAgZGUgbGEgc2VzacOzbixcbiAgICAvLyB5IGVuIHN0b3AvZXJyb3IvYXBwcm92YWwvY2FtYmlvIGRlIHNlc2nDs24sIHF1ZSBzw60gbGxhbWFuIGBjbGVhcmAuXG4gIH1cblxuICB0cnkge1xuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICBpZiAoYWN0aXZlLmlzU3RvcHBlZCkge1xuICAgICAgICByZWFkZXIuY2FuY2VsKClcbiAgICAgICAgYnJlYWtcbiAgICAgIH1cblxuICAgICAgY29uc3QgeyBkb25lLCB2YWx1ZSB9ID0gYXdhaXQgcmVhZGVyLnJlYWQoKVxuICAgICAgaWYgKGRvbmUpIGJyZWFrXG5cbiAgICAgIGlmIChhY3RpdmUuaXNTdG9wcGVkKSB7XG4gICAgICAgIHJlYWRlci5jYW5jZWwoKVxuICAgICAgICBicmVha1xuICAgICAgfVxuXG4gICAgICBidWZmZXIgKz0gZGVjb2Rlci5kZWNvZGUodmFsdWUsIHsgc3RyZWFtOiB0cnVlIH0pXG4gICAgICBjb25zdCBsaW5lcyA9IGJ1ZmZlci5zcGxpdCgnXFxuXFxuJylcbiAgICAgIGJ1ZmZlciA9IGxpbmVzLnBvcCgpIHx8ICcnXG5cbiAgICAgIGZvciAoY29uc3QgbGluZSBvZiBsaW5lcykge1xuICAgICAgICBpZiAobGluZS50cmltKCkgPT09ICcnKSBjb250aW51ZVxuXG4gICAgICAgIGNvbnN0IFtldmVudExpbmUsIGRhdGFMaW5lXSA9IGxpbmUuc3BsaXQoJ1xcbicpXG4gICAgICAgIGlmICghZXZlbnRMaW5lIHx8ICFkYXRhTGluZSkgY29udGludWVcblxuICAgICAgICBjb25zdCBldmVudFR5cGUgPSBldmVudExpbmUucmVwbGFjZSgnZXZlbnQ6ICcsICcnKS50cmltKClcbiAgICAgICAgY29uc3QgZGF0YVN0ciA9IGRhdGFMaW5lLnJlcGxhY2UoJ2RhdGE6ICcsICcnKS50cmltKClcblxuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IGRhdGEgPSBKU09OLnBhcnNlKGRhdGFTdHIpXG5cbiAgICAgICAgICBzd2l0Y2ggKGV2ZW50VHlwZSkge1xuICAgICAgICAgICAgY2FzZSAndGhpbmtpbmcnOiB7XG4gICAgICAgICAgICAgIGNvbnN0IHRoaW5raW5nRGVsdGEgPSB0eXBlb2YgZGF0YS5kZWx0YSA9PT0gJ3N0cmluZycgPyBkYXRhLmRlbHRhIDogJydcbiAgICAgICAgICAgICAgaWYgKHR5cGVvZiBkYXRhLmkgPT09ICdudW1iZXInICYmIHRoaW5raW5nRGVsdGEpIHtcbiAgICAgICAgICAgICAgICByZWFzb25pbmdTdG9yZS5hcHBlbmRUaGlua2luZyhwbGFjZWhvbGRlcklkLCBkYXRhLmksIHRoaW5raW5nRGVsdGEpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgc2V0VGhpbmtpbmdBY3Rpdml0eSgpXG4gICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIEVsIGJhY2tlbmQgZGVzY2FydGEgbG8gZW1pdGlkbyB5IHJlaW5pY2lhIGxhIHJlc3B1ZXN0YSBkZXNkZSBjZXJvLlxuICAgICAgICAgICAgY2FzZSAnYW5zd2VyX3Jlc2V0JzpcbiAgICAgICAgICAgICAgY2xlYXJTdHJlYW1MaWtlQW5zd2VyUmVzZXQoKVxuICAgICAgICAgICAgICBicmVha1xuXG4gICAgICAgICAgICBjYXNlICdyZWFzb25pbmdfc3RlcCc6IHtcbiAgICAgICAgICAgICAgY29uc3Qgc3RlcFRvb2wgPSB0eXBlb2YgZGF0YS50b29sID09PSAnc3RyaW5nJyA/IGRhdGEudG9vbCA6ICcnXG4gICAgICAgICAgICAgIGNvbnN0IHN0ZXBUeXBlID0gdHlwZW9mIGRhdGEudHlwZSA9PT0gJ3N0cmluZycgPyBkYXRhLnR5cGUgOiAnJ1xuICAgICAgICAgICAgICBpZiAoc3RlcFRvb2wgJiYgc3RlcFR5cGUgIT09ICdoYW5kb2ZmJyAmJiBkYXRhLnN0YXR1cyA9PT0gJ3J1bm5pbmcnKSB7XG4gICAgICAgICAgICAgICAgc2V0VGhpbmtpbmdBY3Rpdml0eSgpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgaWYgKHR5cGVvZiBkYXRhLmkgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICAgICAgcmVhc29uaW5nU3RvcmUuY2FwdHVyZUxlYWRpbmdGcm9tQm9keShwbGFjZWhvbGRlcklkLCBhY2N1bXVsYXRlZENvbnRlbnQpXG4gICAgICAgICAgICAgICAgcmVhc29uaW5nU3RvcmUuYXBwbHlTdGVwKHBsYWNlaG9sZGVySWQsIGRhdGEgYXMgUmVhc29uaW5nU3RlcFBheWxvYWQpXG4gICAgICAgICAgICAgICAgaWYgKHJlYXNvbmluZ1N0b3JlLnNob3VsZENsZWFyU3RyZWFtRm9yTGVhZGluZyhwbGFjZWhvbGRlcklkLCBhY2N1bXVsYXRlZENvbnRlbnQpKSB7XG4gICAgICAgICAgICAgICAgICBjbGVhclN0cmVhbUxpa2VBbnN3ZXJSZXNldCgpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNhc2UgJ3Rva2VuJzoge1xuICAgICAgICAgICAgICBjb25zdCBjaHVuayA9IHR5cGVvZiBkYXRhLmNvbnRlbnQgPT09ICdzdHJpbmcnID8gZGF0YS5jb250ZW50IDogJydcbiAgICAgICAgICAgICAgZW5zdXJlV3JpdGluZ1N0YXJ0ZWQoKVxuICAgICAgICAgICAgICBhcHBseVN0cmVhbUNodW5rKGNodW5rKVxuICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjYXNlICdjb250ZW50Jzoge1xuICAgICAgICAgICAgICBjb25zdCBjaHVuayA9IHR5cGVvZiBkYXRhLmNvbnRlbnQgPT09ICdzdHJpbmcnID8gZGF0YS5jb250ZW50IDogJydcbiAgICAgICAgICAgICAgZW5zdXJlV3JpdGluZ1N0YXJ0ZWQoKVxuICAgICAgICAgICAgICBhcHBseVN0cmVhbUNodW5rKGNodW5rKVxuICAgICAgICAgICAgICBpZiAoaXNDb21wbGV0ZUxpa2VTc2VQYXlsb2FkKGRhdGEpKSB7XG4gICAgICAgICAgICAgICAgYXBwbHlTdHJlYW1Db21wbGV0ZShkYXRhKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNhc2UgJ25vZGUnOlxuICAgICAgICAgICAgICBpZiAoZGF0YS5ub2RlID09PSAnYWdlbnRfdHJhbnNmZXInIHx8IChkYXRhLm1lc3NhZ2UgJiYgdHlwZW9mIGRhdGEubWVzc2FnZSA9PT0gJ3N0cmluZycpKSB7XG4gICAgICAgICAgICAgICAgc2V0VGhpbmtpbmdBY3Rpdml0eSgpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgYnJlYWtcblxuICAgICAgICAgICAgY2FzZSAnY29tcGxldGUnOlxuICAgICAgICAgICAgICBhcHBseVN0cmVhbUNvbXBsZXRlKGRhdGEpXG4gICAgICAgICAgICAgIGJyZWFrXG5cbiAgICAgICAgICAgIGNhc2UgJ2FwcHJvdmFsX3JlcXVpcmVkJzoge1xuICAgICAgICAgICAgICBmbHVzaFBlbmRpbmcoKVxuICAgICAgICAgICAgICAvLyBQcmVhcHJvYmFkbyAoYXV0by1hcHByb3ZlIG8gZGV0ZWNjacOzbiBtYW51YWwpOiBlbCBzdHJlYW0gbm8gc2UgY29ydGEsXG4gICAgICAgICAgICAgIC8vIHNpZ3VlIGVqZWN1dGFuZG8gbGFzIGFjY2lvbmVzIHNpbiBlc3BlcmFyIGRlY2lzacOzbiBkZWwgdXN1YXJpby5cbiAgICAgICAgICAgICAgY29uc3QgaXNQcmVBcHByb3ZlZCA9XG4gICAgICAgICAgICAgICAgZGF0YS5tYW51YWxfYXBwcm92YWxfZGV0ZWN0ZWQgPT09IHRydWUgfHxcbiAgICAgICAgICAgICAgICBkYXRhLmF1dG9fYXBwcm92ZWQgPT09IHRydWUgfHxcbiAgICAgICAgICAgICAgICBkYXRhLmFwcHJvdmFsX3N0YXR1cyA9PT0gJ2FwcHJvdmVkJ1xuICAgICAgICAgICAgICBzdG9yZSgpLnBhdGNoTWV0YShzZXNzaW9uSWQsIHsgaXNXcml0aW5nOiBmYWxzZSB9KVxuICAgICAgICAgICAgICBpZiAoIWlzUHJlQXBwcm92ZWQpIHtcbiAgICAgICAgICAgICAgICByZWFzb25pbmdTdG9yZS5maW5pc2gocGxhY2Vob2xkZXJJZCwgKGRhdGEucmVhc29uaW5nIGFzIFJlYXNvbmluZ1RyYWNlUGF5bG9hZCB8IG51bGwpID8/IG51bGwpXG4gICAgICAgICAgICAgICAgc3RvcmUoKS5wYXRjaE1ldGEoc2Vzc2lvbklkLCB7IGlzTG9hZGluZzogZmFsc2UgfSlcbiAgICAgICAgICAgICAgICBzZXNzaW9uU3RyZWFtaW5nVGV4dC5jbGVhcihzZXNzaW9uSWQpXG4gICAgICAgICAgICAgICAgc3RvcmUoKS5zZXRBY3Rpdml0eShzZXNzaW9uSWQsIG51bGwpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgc3RvcmUoKS5zZXRTdGF0dXMoc2Vzc2lvbklkLCAnYXdhaXRpbmdfYXBwcm92YWwnKVxuICAgICAgICAgICAgICBjYWxsYmFja3Mub25BcHByb3ZhbFJlcXVpcmVkPy4oZGF0YSBhcyBBcHByb3ZhbFJlcXVlc3QsIGFjY3VtdWxhdGVkQ29udGVudClcbiAgICAgICAgICAgICAgaWYgKGlzUHJlQXBwcm92ZWQgJiYgQXJyYXkuaXNBcnJheShkYXRhLnBlbmRpbmdfYWN0aW9ucykgJiYgZGF0YS5wZW5kaW5nX2FjdGlvbnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIHNldFRoaW5raW5nQWN0aXZpdHkoKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNhc2UgJ2Vycm9yJzpcbiAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignU1NFIEVycm9yOicsIGRhdGEuZXJyb3IpXG4gICAgICAgICAgICAgIGZsdXNoUGVuZGluZygpXG4gICAgICAgICAgICAgIHNlc3Npb25TdHJlYW1pbmdUZXh0LmNsZWFyKHNlc3Npb25JZClcbiAgICAgICAgICAgICAgc3RvcmUoKS5wYXRjaE1ldGEoc2Vzc2lvbklkLCB7IGlzTG9hZGluZzogZmFsc2UsIGlzV3JpdGluZzogZmFsc2UgfSlcbiAgICAgICAgICAgICAgc3RvcmUoKS5zZXRBY3Rpdml0eShzZXNzaW9uSWQsIG51bGwpXG4gICAgICAgICAgICAgIHN0b3JlKCkuc2V0RXJyb3Ioc2Vzc2lvbklkLCB7IHR5cGU6IGRhdGEuZXJyb3I/LnR5cGUsIG1lc3NhZ2U6IGRhdGEuZXJyb3I/Lm1lc3NhZ2UgfSlcbiAgICAgICAgICAgICAgc3RvcmUoKS5zZXRTdGF0dXMoc2Vzc2lvbklkLCAnZXJyb3InKVxuICAgICAgICAgICAgICBjYWxsYmFja3Mub25FcnJvcj8uKGRhdGEuZXJyb3I/LnR5cGUsIGRhdGEuZXJyb3I/Lm1lc3NhZ2UpXG4gICAgICAgICAgICAgIGJyZWFrXG5cbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgIGNvbnNvbGUud2FybignVW5rbm93biBTU0UgZXZlbnQgdHlwZTonLCBldmVudFR5cGUpXG4gICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIChwYXJzZUVycm9yKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgcGFyc2luZyBTU0UgZGF0YTonLCBwYXJzZUVycm9yLCBkYXRhU3RyKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9IGZpbmFsbHkge1xuICAgIGZsdXNoUGVuZGluZygpXG4gIH1cbn1cblxuLyoqXG4gKiBNYW5hZ2VyIHNpbmdsZXRvbiAobW9kdWxlLWxldmVsKSBxdWUgY29ycmUgTiBzdHJlYW1zIGRlbCBvcmNoZXN0cmF0b3IgZW5cbiAqIHBhcmFsZWxvLCB1bm8gcG9yIGBzZXNzaW9uSWRgLiBTb2JyZXZpdmUgYSBjYW1iaW9zIGRlIHZpc3RhIHkgYWwgY2llcnJlIGRlbFxuICogbW9kYWw6IGxvcyBzdHJlYW1zIHNvbG8gc2UgY2FuY2VsYW4gY29uIHN0b3AgZXhwbMOtY2l0byBkZWwgdXN1YXJpbyBvIGFsXG4gKiBjb21wbGV0YXIvZXJyb3Jhci5cbiAqL1xuZXhwb3J0IGNvbnN0IHNlc3Npb25TdHJlYW1NYW5hZ2VyID0ge1xuICBpc0FjdGl2ZTogaXNTdHJlYW1BY3RpdmUsXG4gIGdldEFjdGl2ZUNvdW50OiBnZXRBY3RpdmVTdHJlYW1Db3VudCxcbiAgZ2V0QWN0aXZlU2Vzc2lvbklkczogKCk6IHN0cmluZ1tdID0+IEFycmF5LmZyb20oYWN0aXZlU3RyZWFtcy5rZXlzKCkpLFxuXG4gIGFzeW5jIHN0YXJ0U3RyZWFtKHBhcmFtczogU3RhcnRTdHJlYW1QYXJhbXMpOiBQcm9taXNlPFN0YXJ0U3RyZWFtUmVzdWx0PiB7XG4gICAgZW5zdXJlU2Vzc2lvbk5vdGlmaWNhdGlvbnNJbml0aWFsaXplZCgpXG5cbiAgICBjb25zdCB7IHNlc3Npb25JZCwgcGxhY2Vob2xkZXJJZCwgcmVxdWVzdCwgY2FsbGJhY2tzLCB0LCBhY3Rpdml0eU9wdGlvbnMsIGFnZW50SWQsIGFnZW50TmFtZSB9ID0gcGFyYW1zXG5cbiAgICBpZiAoaXNTdHJlYW1BY3RpdmUoc2Vzc2lvbklkKSkge1xuICAgICAgcmV0dXJuIHsgc3RhcnRlZDogZmFsc2UsIHJlYXNvbjogJ2FscmVhZHlfYWN0aXZlJyB9XG4gICAgfVxuICAgIGlmIChnZXRBY3RpdmVTdHJlYW1Db3VudCgpID49IE1BWF9DT05DVVJSRU5UX1NUUkVBTVMpIHtcbiAgICAgIHJldHVybiB7IHN0YXJ0ZWQ6IGZhbHNlLCByZWFzb246ICdsaW1pdCcgfVxuICAgIH1cblxuICAgIGNvbnN0IGNvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKClcbiAgICBjb25zdCBhY3RpdmU6IEFjdGl2ZVN0cmVhbSA9IHsgc2Vzc2lvbklkLCBjb250cm9sbGVyLCBpc1N0b3BwZWQ6IGZhbHNlIH1cbiAgICBhY3RpdmVTdHJlYW1zLnNldChzZXNzaW9uSWQsIGFjdGl2ZSlcblxuICAgIHN0b3JlKCkuZW5zdXJlU2Vzc2lvbihzZXNzaW9uSWQpXG4gICAgc3RvcmUoKS5wYXRjaE1ldGEoc2Vzc2lvbklkLCB7XG4gICAgICBwbGFjZWhvbGRlcklkLFxuICAgICAgZXJyb3I6IG51bGwsXG4gICAgICBpc0xvYWRpbmc6IHRydWUsXG4gICAgICBpc1dyaXRpbmc6IGZhbHNlLFxuICAgICAgLi4uKGFnZW50SWQgIT0gbnVsbCA/IHsgYWdlbnRJZCB9IDoge30pLFxuICAgICAgLi4uKGFnZW50TmFtZSAhPSBudWxsID8geyBhZ2VudE5hbWUgfSA6IHt9KSxcbiAgICB9KVxuICAgIHN0b3JlKCkuc2V0U3RhdHVzKHNlc3Npb25JZCwgJ3RoaW5raW5nJylcbiAgICBzZXNzaW9uU3RyZWFtaW5nVGV4dC5zdGFydChzZXNzaW9uSWQsIHBsYWNlaG9sZGVySWQpXG4gICAgcmVhc29uaW5nU3RvcmUuc3RhcnQocGxhY2Vob2xkZXJJZClcbiAgICBzdG9yZSgpLnNldEFjdGl2aXR5KHNlc3Npb25JZCwgZ2V0SW5pdGlhbFN0cmVhbUFjdGl2aXR5KHQsIGFjdGl2aXR5T3B0aW9ucyA/PyB7fSkpXG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBtYWlhLk9yY2hlc3RyYXRvci5vcmNoZXN0cmF0b3IocmVxdWVzdCwgY29udHJvbGxlci5zaWduYWwpXG4gICAgICBhd2FpdCBwYXJzZVNlc3Npb25TU0UocmVzcG9uc2UsIGFjdGl2ZSwgcGFyYW1zKVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpZiAoIWFjdGl2ZS5pc1N0b3BwZWQpIHtcbiAgICAgICAgc2Vzc2lvblN0cmVhbWluZ1RleHQuY2xlYXIoc2Vzc2lvbklkKVxuICAgICAgICBzdG9yZSgpLnBhdGNoTWV0YShzZXNzaW9uSWQsIHsgaXNMb2FkaW5nOiBmYWxzZSwgaXNXcml0aW5nOiBmYWxzZSB9KVxuICAgICAgICBzdG9yZSgpLnNldEFjdGl2aXR5KHNlc3Npb25JZCwgbnVsbClcbiAgICAgICAgc3RvcmUoKS5zZXRTdGF0dXMoc2Vzc2lvbklkLCAnZXJyb3InKVxuICAgICAgICBjYWxsYmFja3Mub25FcnJvcj8uKClcbiAgICAgIH1cbiAgICB9IGZpbmFsbHkge1xuICAgICAgYWN0aXZlU3RyZWFtcy5kZWxldGUoc2Vzc2lvbklkKVxuICAgIH1cblxuICAgIHJldHVybiB7IHN0YXJ0ZWQ6IHRydWUgfVxuICB9LFxuXG4gIC8qKiBSZXN1bWUgSElUTCAoYGNvbnRpbnVlLXRocmVhZGApIGtleWVkIHBvciBzZXNzaW9uSWQg4oCUIG1pc21vIG1vdG9yIHF1ZSBvcmNoZXN0cmF0b3IuICovXG4gIGFzeW5jIHN0YXJ0Q29udGludWVTdHJlYW0ocGFyYW1zOiBTdGFydENvbnRpbnVlU3RyZWFtUGFyYW1zKTogUHJvbWlzZTxTdGFydFN0cmVhbVJlc3VsdD4ge1xuICAgIGVuc3VyZVNlc3Npb25Ob3RpZmljYXRpb25zSW5pdGlhbGl6ZWQoKVxuXG4gICAgY29uc3QgeyBzZXNzaW9uSWQsIHBsYWNlaG9sZGVySWQsIGNvbnRpbnVlUmVxdWVzdCwgY2FsbGJhY2tzLCB0LCBoaXRsRXhlY3V0aW9uQ29udGV4dCwgYWdlbnRJZCwgYWdlbnROYW1lIH0gPSBwYXJhbXNcblxuICAgIGlmIChpc1N0cmVhbUFjdGl2ZShzZXNzaW9uSWQpKSB7XG4gICAgICByZXR1cm4geyBzdGFydGVkOiBmYWxzZSwgcmVhc29uOiAnYWxyZWFkeV9hY3RpdmUnIH1cbiAgICB9XG4gICAgaWYgKGdldEFjdGl2ZVN0cmVhbUNvdW50KCkgPj0gTUFYX0NPTkNVUlJFTlRfU1RSRUFNUykge1xuICAgICAgcmV0dXJuIHsgc3RhcnRlZDogZmFsc2UsIHJlYXNvbjogJ2xpbWl0JyB9XG4gICAgfVxuXG4gICAgaWYgKGhpdGxFeGVjdXRpb25Db250ZXh0KSB7XG4gICAgICBzZXNzaW9uSGl0bENvbnRleHQuc2V0KHNlc3Npb25JZCwgaGl0bEV4ZWN1dGlvbkNvbnRleHQpXG4gICAgfVxuXG4gICAgY29uc3QgY29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKVxuICAgIGNvbnN0IGFjdGl2ZTogQWN0aXZlU3RyZWFtID0geyBzZXNzaW9uSWQsIGNvbnRyb2xsZXIsIGlzU3RvcHBlZDogZmFsc2UgfVxuICAgIGFjdGl2ZVN0cmVhbXMuc2V0KHNlc3Npb25JZCwgYWN0aXZlKVxuXG4gICAgc3RvcmUoKS5lbnN1cmVTZXNzaW9uKHNlc3Npb25JZClcbiAgICBzdG9yZSgpLnBhdGNoTWV0YShzZXNzaW9uSWQsIHtcbiAgICAgIHBsYWNlaG9sZGVySWQsXG4gICAgICBlcnJvcjogbnVsbCxcbiAgICAgIGlzTG9hZGluZzogdHJ1ZSxcbiAgICAgIGlzV3JpdGluZzogZmFsc2UsXG4gICAgICAuLi4oYWdlbnRJZCAhPSBudWxsID8geyBhZ2VudElkIH0gOiB7fSksXG4gICAgICAuLi4oYWdlbnROYW1lICE9IG51bGwgPyB7IGFnZW50TmFtZSB9IDoge30pLFxuICAgIH0pXG4gICAgc3RvcmUoKS5zZXRTdGF0dXMoc2Vzc2lvbklkLCAndGhpbmtpbmcnKVxuICAgIHNlc3Npb25TdHJlYW1pbmdUZXh0LnN0YXJ0KHNlc3Npb25JZCwgcGxhY2Vob2xkZXJJZClcbiAgICBzdG9yZSgpLnNldEFjdGl2aXR5KFxuICAgICAgc2Vzc2lvbklkLFxuICAgICAgcmVzb2x2ZUluaXRpYWxIaXRsU3RyZWFtQWN0aXZpdHkodCwgaGl0bEV4ZWN1dGlvbkNvbnRleHQgPz8gc2Vzc2lvbkhpdGxDb250ZXh0LmdldChzZXNzaW9uSWQpID8/IHVuZGVmaW5lZClcbiAgICApXG5cbiAgICBjb25zdCBzc2VQYXJhbXM6IFN0YXJ0U3RyZWFtUGFyYW1zID0ge1xuICAgICAgc2Vzc2lvbklkLFxuICAgICAgcGxhY2Vob2xkZXJJZCxcbiAgICAgIHJlcXVlc3Q6IHt9IGFzIE9yY2hlc3RyYXRvclJlcXVlc3QsXG4gICAgICBjYWxsYmFja3MsXG4gICAgICB0LFxuICAgICAgaGl0bEV4ZWN1dGlvbkNvbnRleHQ6IGhpdGxFeGVjdXRpb25Db250ZXh0ID8/IHNlc3Npb25IaXRsQ29udGV4dC5nZXQoc2Vzc2lvbklkKSxcbiAgICAgIGFnZW50SWQsXG4gICAgICBhZ2VudE5hbWUsXG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgbWFpYS5PcmNoZXN0cmF0b3IuY29udGludWVUaHJlYWQoY29udGludWVSZXF1ZXN0LCBjb250cm9sbGVyLnNpZ25hbClcbiAgICAgIGlmICghcmVzcG9uc2Uub2spIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBjb250aW51ZS10aHJlYWQgZmFpbGVkOiAke3Jlc3BvbnNlLnN0YXR1c31gKVxuICAgICAgfVxuICAgICAgYXdhaXQgcGFyc2VTZXNzaW9uU1NFKHJlc3BvbnNlLCBhY3RpdmUsIHNzZVBhcmFtcylcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgaWYgKCFhY3RpdmUuaXNTdG9wcGVkKSB7XG4gICAgICAgIHNlc3Npb25TdHJlYW1pbmdUZXh0LmNsZWFyKHNlc3Npb25JZClcbiAgICAgICAgc3RvcmUoKS5wYXRjaE1ldGEoc2Vzc2lvbklkLCB7IGlzTG9hZGluZzogZmFsc2UsIGlzV3JpdGluZzogZmFsc2UgfSlcbiAgICAgICAgc3RvcmUoKS5zZXRBY3Rpdml0eShzZXNzaW9uSWQsIG51bGwpXG4gICAgICAgIHN0b3JlKCkuc2V0U3RhdHVzKHNlc3Npb25JZCwgJ2Vycm9yJylcbiAgICAgICAgY2FsbGJhY2tzLm9uRXJyb3I/LigpXG4gICAgICB9XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGFjdGl2ZVN0cmVhbXMuZGVsZXRlKHNlc3Npb25JZClcbiAgICAgIHNlc3Npb25IaXRsQ29udGV4dC5jbGVhcihzZXNzaW9uSWQpXG4gICAgfVxuXG4gICAgcmV0dXJuIHsgc3RhcnRlZDogdHJ1ZSB9XG4gIH0sXG5cbiAgLyoqIFJlZ2VuZXJhIGxhIHJlc3B1ZXN0YSBkZSB1biB0dXJubyAoYHJldHJ5X2NvbXBsZXRpb25gKSDigJQgbWlzbW8gbW90b3IgU1NFIHF1ZSBvcmNoZXN0cmF0b3IuICovXG4gIGFzeW5jIHN0YXJ0UmV0cnlTdHJlYW0ocGFyYW1zOiBTdGFydFJldHJ5U3RyZWFtUGFyYW1zKTogUHJvbWlzZTxTdGFydFN0cmVhbVJlc3VsdD4ge1xuICAgIGVuc3VyZVNlc3Npb25Ob3RpZmljYXRpb25zSW5pdGlhbGl6ZWQoKVxuXG4gICAgY29uc3QgeyBzZXNzaW9uSWQsIHBsYWNlaG9sZGVySWQsIHJldHJ5UmVxdWVzdCwgY2FsbGJhY2tzLCB0LCBhY3Rpdml0eU9wdGlvbnMsIGFnZW50SWQsIGFnZW50TmFtZSB9ID0gcGFyYW1zXG5cbiAgICBpZiAoaXNTdHJlYW1BY3RpdmUoc2Vzc2lvbklkKSkge1xuICAgICAgcmV0dXJuIHsgc3RhcnRlZDogZmFsc2UsIHJlYXNvbjogJ2FscmVhZHlfYWN0aXZlJyB9XG4gICAgfVxuICAgIGlmIChnZXRBY3RpdmVTdHJlYW1Db3VudCgpID49IE1BWF9DT05DVVJSRU5UX1NUUkVBTVMpIHtcbiAgICAgIHJldHVybiB7IHN0YXJ0ZWQ6IGZhbHNlLCByZWFzb246ICdsaW1pdCcgfVxuICAgIH1cblxuICAgIGNvbnN0IGNvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKClcbiAgICBjb25zdCBhY3RpdmU6IEFjdGl2ZVN0cmVhbSA9IHsgc2Vzc2lvbklkLCBjb250cm9sbGVyLCBpc1N0b3BwZWQ6IGZhbHNlIH1cbiAgICBhY3RpdmVTdHJlYW1zLnNldChzZXNzaW9uSWQsIGFjdGl2ZSlcblxuICAgIHN0b3JlKCkuZW5zdXJlU2Vzc2lvbihzZXNzaW9uSWQpXG4gICAgc3RvcmUoKS5wYXRjaE1ldGEoc2Vzc2lvbklkLCB7XG4gICAgICBwbGFjZWhvbGRlcklkLFxuICAgICAgZXJyb3I6IG51bGwsXG4gICAgICBpc0xvYWRpbmc6IHRydWUsXG4gICAgICBpc1dyaXRpbmc6IGZhbHNlLFxuICAgICAgLi4uKGFnZW50SWQgIT0gbnVsbCA/IHsgYWdlbnRJZCB9IDoge30pLFxuICAgICAgLi4uKGFnZW50TmFtZSAhPSBudWxsID8geyBhZ2VudE5hbWUgfSA6IHt9KSxcbiAgICB9KVxuICAgIHN0b3JlKCkuc2V0U3RhdHVzKHNlc3Npb25JZCwgJ3RoaW5raW5nJylcbiAgICBzZXNzaW9uU3RyZWFtaW5nVGV4dC5zdGFydChzZXNzaW9uSWQsIHBsYWNlaG9sZGVySWQpXG4gICAgc3RvcmUoKS5zZXRBY3Rpdml0eShzZXNzaW9uSWQsIGdldEluaXRpYWxTdHJlYW1BY3Rpdml0eSh0LCBhY3Rpdml0eU9wdGlvbnMgPz8ge30pKVxuXG4gICAgY29uc3Qgc3NlUGFyYW1zOiBTdGFydFN0cmVhbVBhcmFtcyA9IHtcbiAgICAgIHNlc3Npb25JZCxcbiAgICAgIHBsYWNlaG9sZGVySWQsXG4gICAgICByZXF1ZXN0OiB7fSBhcyBPcmNoZXN0cmF0b3JSZXF1ZXN0LFxuICAgICAgY2FsbGJhY2tzLFxuICAgICAgdCxcbiAgICAgIGFjdGl2aXR5T3B0aW9ucyxcbiAgICAgIGFnZW50SWQsXG4gICAgICBhZ2VudE5hbWUsXG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgbWFpYS5PcmNoZXN0cmF0b3IucmV0cnlDb21wbGV0aW9uKHJldHJ5UmVxdWVzdCwgY29udHJvbGxlci5zaWduYWwpXG4gICAgICBpZiAoIXJlc3BvbnNlLm9rKSB7XG4gICAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPT09IDQwNCkge1xuICAgICAgICAgIGxldCBkZXRhaWw6IHN0cmluZyB8IHVuZGVmaW5lZFxuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBkYXRhID0gKGF3YWl0IHJlc3BvbnNlLmpzb24oKSkgYXMgeyBkZXRhaWw/OiBzdHJpbmcgfVxuICAgICAgICAgICAgZGV0YWlsID0gdHlwZW9mIGRhdGEuZGV0YWlsID09PSAnc3RyaW5nJyA/IGRhdGEuZGV0YWlsIDogdW5kZWZpbmVkXG4gICAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgICBkZXRhaWwgPSB1bmRlZmluZWRcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGRldGFpbCA9PT0gJ1R1cm4gbm90IGZvdW5kJykge1xuICAgICAgICAgICAgc2Vzc2lvblN0cmVhbWluZ1RleHQuY2xlYXIoc2Vzc2lvbklkKVxuICAgICAgICAgICAgc3RvcmUoKS5wYXRjaE1ldGEoc2Vzc2lvbklkLCB7IGlzTG9hZGluZzogZmFsc2UsIGlzV3JpdGluZzogZmFsc2UsIHBsYWNlaG9sZGVySWQ6IG51bGwgfSlcbiAgICAgICAgICAgIHN0b3JlKCkuc2V0QWN0aXZpdHkoc2Vzc2lvbklkLCBudWxsKVxuICAgICAgICAgICAgc3RvcmUoKS5zZXRTdGF0dXMoc2Vzc2lvbklkLCAnaWRsZScpXG4gICAgICAgICAgICBhY3RpdmVTdHJlYW1zLmRlbGV0ZShzZXNzaW9uSWQpXG4gICAgICAgICAgICByZXR1cm4geyBzdGFydGVkOiBmYWxzZSwgcmVhc29uOiAndHVybl9ub3RfZm91bmQnIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGByZXRyeV9jb21wbGV0aW9uIGZhaWxlZDogJHtyZXNwb25zZS5zdGF0dXN9YClcbiAgICAgIH1cbiAgICAgIGF3YWl0IHBhcnNlU2Vzc2lvblNTRShyZXNwb25zZSwgYWN0aXZlLCBzc2VQYXJhbXMpXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGlmICghYWN0aXZlLmlzU3RvcHBlZCkge1xuICAgICAgICBzZXNzaW9uU3RyZWFtaW5nVGV4dC5jbGVhcihzZXNzaW9uSWQpXG4gICAgICAgIHN0b3JlKCkucGF0Y2hNZXRhKHNlc3Npb25JZCwgeyBpc0xvYWRpbmc6IGZhbHNlLCBpc1dyaXRpbmc6IGZhbHNlIH0pXG4gICAgICAgIHN0b3JlKCkuc2V0QWN0aXZpdHkoc2Vzc2lvbklkLCBudWxsKVxuICAgICAgICBzdG9yZSgpLnNldFN0YXR1cyhzZXNzaW9uSWQsICdlcnJvcicpXG4gICAgICAgIGNhbGxiYWNrcy5vbkVycm9yPy4oKVxuICAgICAgfVxuICAgIH0gZmluYWxseSB7XG4gICAgICBhY3RpdmVTdHJlYW1zLmRlbGV0ZShzZXNzaW9uSWQpXG4gICAgfVxuXG4gICAgcmV0dXJuIHsgc3RhcnRlZDogdHJ1ZSB9XG4gIH0sXG5cbiAgLyoqIENhbmNlbGFjacOzbiBleHBsw61jaXRhIGRlbCB1c3VhcmlvIChtZW5zYWplIFwiY2FuY2VsYWRvXCIpLiAqL1xuICBzdG9wU3RyZWFtKHNlc3Npb25JZDogc3RyaW5nLCBjYWxsYmFja3M/OiBTZXNzaW9uU3RyZWFtQ2FsbGJhY2tzKSB7XG4gICAgY29uc3QgYWN0aXZlID0gYWN0aXZlU3RyZWFtcy5nZXQoc2Vzc2lvbklkKVxuICAgIGlmICghYWN0aXZlKSByZXR1cm5cbiAgICBhY3RpdmUuaXNTdG9wcGVkID0gdHJ1ZVxuICAgIGFjdGl2ZS5jb250cm9sbGVyLmFib3J0KClcbiAgICBhY3RpdmVTdHJlYW1zLmRlbGV0ZShzZXNzaW9uSWQpXG4gICAgLy8gRWwgcGFyY2lhbCBzZSByZXNjYXRhIGFudGVzIGRlIGxpbXBpYXI6IGVsIGJhY2tlbmQgbG8gcGVyc2lzdGUsIHBlcm8gc2kgbm8gbG9cbiAgICAvLyBwYXNhbW9zIGFsIGNhbGxiYWNrIGRlc2FwYXJlY2UgZGUgcGFudGFsbGEgaGFzdGEgZWwgcHLDs3hpbW8gZmV0Y2ggZGUgbGEgc2VzacOzbi5cbiAgICBjb25zdCBwYXJ0aWFsVGV4dCA9IHNlc3Npb25TdHJlYW1pbmdUZXh0LmdldFNuYXBzaG90KHNlc3Npb25JZCkudGV4dFxuICAgIHNlc3Npb25TdHJlYW1pbmdUZXh0LmNsZWFyKHNlc3Npb25JZClcbiAgICBzdG9yZSgpLnBhdGNoTWV0YShzZXNzaW9uSWQsIHsgaXNMb2FkaW5nOiBmYWxzZSwgaXNXcml0aW5nOiBmYWxzZSB9KVxuICAgIHN0b3JlKCkuc2V0QWN0aXZpdHkoc2Vzc2lvbklkLCBudWxsKVxuICAgIHN0b3JlKCkuc2V0U3RhdHVzKHNlc3Npb25JZCwgJ2NhbmNlbGxlZCcpXG4gICAgY2FsbGJhY2tzPy5vblN0b3A/LihwYXJ0aWFsVGV4dClcbiAgfSxcblxuICAvKiogQWJvcnRhIHNpbiBtYXJjYXIgXCJjYW5jZWxhZG9cIiAodXNvIGludGVybm8gLyBsaW1waWV6YSkuICovXG4gIGFib3J0U2lsZW50bHkoc2Vzc2lvbklkOiBzdHJpbmcpIHtcbiAgICBjb25zdCBhY3RpdmUgPSBhY3RpdmVTdHJlYW1zLmdldChzZXNzaW9uSWQpXG4gICAgaWYgKCFhY3RpdmUpIHJldHVyblxuICAgIGFjdGl2ZS5pc1N0b3BwZWQgPSB0cnVlXG4gICAgYWN0aXZlLmNvbnRyb2xsZXIuYWJvcnQoKVxuICAgIGFjdGl2ZVN0cmVhbXMuZGVsZXRlKHNlc3Npb25JZClcbiAgICBzZXNzaW9uU3RyZWFtaW5nVGV4dC5jbGVhcihzZXNzaW9uSWQpXG4gICAgc3RvcmUoKS5wYXRjaE1ldGEoc2Vzc2lvbklkLCB7IGlzTG9hZGluZzogZmFsc2UsIGlzV3JpdGluZzogZmFsc2UgfSlcbiAgICBzdG9yZSgpLnNldEFjdGl2aXR5KHNlc3Npb25JZCwgbnVsbClcbiAgICBpZiAoc3RvcmUoKS5nZXRNZXRhKHNlc3Npb25JZCk/LnN0YXR1cyAhPT0gJ2NvbXBsZXRlJykge1xuICAgICAgc3RvcmUoKS5zZXRTdGF0dXMoc2Vzc2lvbklkLCAnaWRsZScpXG4gICAgfVxuICB9LFxuXG4gIGFib3J0QWxsKCkge1xuICAgIEFycmF5LmZyb20oYWN0aXZlU3RyZWFtcy5rZXlzKCkpLmZvckVhY2goc2Vzc2lvbklkID0+IHRoaXMuYWJvcnRTaWxlbnRseShzZXNzaW9uSWQpKVxuICB9LFxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPQSxJQUFJLE1BQU0scUJBQXFCO0FBRXRDLFNBQ0VDLHdCQUF3QixFQUN4QkMseUJBQXlCLEVBQ3pCQyx3QkFBd0IsRUFDeEJDLGdDQUFnQyxRQUMzQixvQ0FBb0M7QUFFM0MsU0FBU0Msd0JBQXdCLEVBQUVDLGdCQUFnQixRQUFRLDhCQUE4QjtBQUN6RixTQUFTQyxjQUFjLFFBQVEsK0JBQStCO0FBRTlELFNBQVNDLG9CQUFvQixRQUFRLHdCQUF3QjtBQUM3RCxTQUFTQyxnQkFBZ0IsUUFBUSxvQkFBb0I7QUFDckQsU0FBU0MscUNBQXFDLFFBQVEsd0JBQXdCO0FBQzlFLFNBQVNDLGtCQUFrQixRQUFRLHNCQUFzQjs7QUFPekQ7O0FBcURBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTyxJQUFN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