@projectcor/maia-components 2.52.0 → 2.52.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.helpers.spec.js +63 -0
  6. package/lib/components/atoms/ApprovalBox/ApprovalBox.spec.js +183 -0
  7. package/lib/components/atoms/AttachmentCard/AttachmentCard.spec.js +123 -0
  8. package/lib/components/atoms/AttachmentCard/AttachmentCardAudio.helpers.js +3 -1
  9. package/lib/components/atoms/AttachmentCard/AttachmentCardAudio.helpers.spec.js +139 -0
  10. package/lib/components/atoms/AttachmentCard/AttachmentCardAudio.spec.js +385 -0
  11. package/lib/components/atoms/AttachmentCard/AttachmentCardImage.js +3 -1
  12. package/lib/components/atoms/AttachmentCard/AttachmentCardImage.spec.js +78 -0
  13. package/lib/components/atoms/AttachmentPreviewModal/AttachmentPreviewModal.helpers.spec.js +94 -0
  14. package/lib/components/atoms/AttachmentPreviewModal/AttachmentPreviewModal.js +24 -14
  15. package/lib/components/atoms/AttachmentPreviewModal/AttachmentPreviewModal.spec.js +396 -0
  16. package/lib/components/atoms/AttachmentPreviewModal/ExcelPreview.js +28 -10
  17. package/lib/components/atoms/AttachmentPreviewModal/ExcelPreview.spec.js +80 -0
  18. package/lib/components/atoms/AttachmentPreviewModal/PptPreview.helpers.spec.js +526 -0
  19. package/lib/components/atoms/AttachmentPreviewModal/PptPreview.js +19 -15
  20. package/lib/components/atoms/AttachmentPreviewModal/PptPreview.spec.js +169 -0
  21. package/lib/components/atoms/AttachmentPreviewModal/WordPreview.helpers.spec.js +11 -0
  22. package/lib/components/atoms/AttachmentPreviewModal/WordPreview.js +8 -4
  23. package/lib/components/atoms/AttachmentPreviewModal/WordPreview.spec.js +77 -0
  24. package/lib/components/atoms/Backdrop/Backdrop.spec.js +28 -0
  25. package/lib/components/atoms/CardMenu/CardMenu.spec.js +56 -0
  26. package/lib/components/atoms/ChatClientSelector/ChatClientSelector.spec.js +67 -0
  27. package/lib/components/atoms/Checkbox/Checkbox.spec.js +27 -0
  28. package/lib/components/atoms/Chip/Chip.spec.js +82 -0
  29. package/lib/components/atoms/ChipLlm/ChipLlm.spec.js +26 -0
  30. package/lib/components/atoms/ClientSelector/ClientSelector.helpers.spec.js +45 -0
  31. package/lib/components/atoms/ClientSelector/ClientSelector.js +15 -13
  32. package/lib/components/atoms/ClientSelector/ClientSelector.spec.js +133 -0
  33. package/lib/components/atoms/ContextCompactedNotice/ContextCompactedNotice.spec.js +107 -0
  34. package/lib/components/atoms/ContextMentionChip/ContextMentionChip.spec.js +29 -0
  35. package/lib/components/atoms/ContextMentionChip/MentionOverflowLabel.spec.js +46 -0
  36. package/lib/components/atoms/ContextMentionChip/buildChipElement.helpers.spec.js +109 -0
  37. package/lib/components/atoms/ContextMentionChip/buildChipElement.spec.js +81 -0
  38. package/lib/components/atoms/ContextMentionEditor/ContextMentionEditor.helpers.spec.js +92 -0
  39. package/lib/components/atoms/ContextMentionEditor/ContextMentionEditor.spec.js +319 -0
  40. package/lib/components/atoms/ContextMentionItem/ContextMentionItem.spec.js +107 -0
  41. package/lib/components/atoms/ContextMentionPopover/ContextMentionPopover.spec.js +136 -0
  42. package/lib/components/atoms/CopyToClipboard.spec.js +74 -0
  43. package/lib/components/atoms/EditableLabel/EditableLabel.spec.js +76 -0
  44. package/lib/components/atoms/EntitySelector/EntitySelector.spec.js +86 -0
  45. package/lib/components/atoms/Expand/Expand.spec.js +57 -0
  46. package/lib/components/atoms/Fade/Fade.js +10 -6
  47. package/lib/components/atoms/Fade/Fade.spec.js +66 -0
  48. package/lib/components/atoms/FeedbackButton/FeedbackButton.spec.js +75 -0
  49. package/lib/components/atoms/FrequentlyAskedQuestions/FrequentlyAskedQuestions.spec.js +104 -0
  50. package/lib/components/atoms/FrequentlyUsedActions/FrequentlyUsedActions.js +3 -1
  51. package/lib/components/atoms/FrequentlyUsedActions/FrequentlyUsedActions.spec.js +91 -0
  52. package/lib/components/atoms/FrequentlyUsedActions/FrequentlyUsedActions.styles.js +19 -7
  53. package/lib/components/atoms/HelpButton.spec.js +87 -0
  54. package/lib/components/atoms/ImagePreview/ImagePreview.spec.js +96 -0
  55. package/lib/components/atoms/ListMenuOption/ListMenuOption.spec.js +54 -0
  56. package/lib/components/atoms/LoadingFaqs/LoadingFaqs.spec.js +21 -0
  57. package/lib/components/atoms/LoadingSearchClients/LoadingSearchClients.spec.js +20 -0
  58. package/lib/components/atoms/LoadingSearchProjects/LoadingSearchProjects.spec.js +26 -0
  59. package/lib/components/atoms/LoadingText/LoadingText.spec.js +25 -0
  60. package/lib/components/atoms/MAIAButton/MAIAButton.spec.js +42 -0
  61. package/lib/components/atoms/MAIAError/MAIAError.spec.js +27 -0
  62. package/lib/components/atoms/MAIAInput/MAIAInput.attachments.helpers.js +3 -2
  63. package/lib/components/atoms/MAIAInput/MAIAInput.attachments.helpers.spec.js +113 -0
  64. package/lib/components/atoms/MAIAInput/MAIAInput.helpers.js +3 -2
  65. package/lib/components/atoms/MAIAInput/MAIAInput.helpers.spec.js +381 -0
  66. package/lib/components/atoms/MAIAInput/MAIAInput.js +123 -99
  67. package/lib/components/atoms/MAIAInput/MAIAInput.spec.js +719 -0
  68. package/lib/components/atoms/MAIAInput/MAIAInputEditor.helpers.spec.js +92 -0
  69. package/lib/components/atoms/MAIAInput/MAIAInputEditor.spec.js +193 -0
  70. package/lib/components/atoms/MAIAInput/maiaInputLayout.spec.js +32 -0
  71. package/lib/components/atoms/MaiaStreamdown/MaiaStreamdown.spec.js +64 -0
  72. package/lib/components/atoms/MaiaWrapper/MaiaWrapper.spec.js +43 -0
  73. package/lib/components/atoms/MaiaWrapper/MaiaWrapperBase.js +9 -4
  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.spec.js +35 -0
  81. package/lib/components/atoms/OnboardingModalButton/OnboardingModalButton.spec.js +47 -0
  82. package/lib/components/atoms/OptionAccessibility/OptionAccessibility.js +4 -5
  83. package/lib/components/atoms/OptionAccessibility/OptionAccessibility.spec.js +146 -0
  84. package/lib/components/atoms/PrimaryButton.spec.js +42 -0
  85. package/lib/components/atoms/ProjectSelector/ProjectSelector.spec.js +69 -0
  86. package/lib/components/atoms/ReasoningBlock/ReasoningBlock.js +7 -2
  87. package/lib/components/atoms/ReasoningBlock/ReasoningBlock.spec.js +69 -0
  88. package/lib/components/atoms/ReasoningBlock/ReasoningBlock.styles.js +41 -24
  89. package/lib/components/atoms/ReasoningBlock/ReasoningSteps.js +25 -10
  90. package/lib/components/atoms/ReasoningBlock/ReasoningSteps.spec.js +59 -0
  91. package/lib/components/atoms/ReasoningBlock/ReasoningTimeline.js +78 -43
  92. package/lib/components/atoms/ReasoningBlock/ReasoningTimeline.spec.js +170 -0
  93. package/lib/components/atoms/ReasoningBlock/groupParallelSteps.js +9 -11
  94. package/lib/components/atoms/ReasoningBlock/groupParallelSteps.spec.js +199 -0
  95. package/lib/components/atoms/ReasoningBlock/reasoningLeading.spec.js +70 -0
  96. package/lib/components/atoms/ReasoningBlock/reasoningLiveNarration.js +37 -15
  97. package/lib/components/atoms/ReasoningBlock/reasoningLiveNarration.spec.js +120 -0
  98. package/lib/components/atoms/ReasoningBlock/reasoningMotion.js +8 -0
  99. package/lib/components/atoms/ReasoningBlock/reasoningTimeline.helpers.spec.js +31 -0
  100. package/lib/components/atoms/ReasoningBlock/useCollapsibleHeight.js +52 -0
  101. package/lib/components/atoms/ReasoningBlock/useCollapsibleHeight.spec.js +90 -0
  102. package/lib/components/atoms/ReasoningBlock/useReasoningMarkerHandoff.js +29 -0
  103. package/lib/components/atoms/ReasoningBlock/useReasoningMarkerHandoff.spec.js +38 -0
  104. package/lib/components/atoms/SessionGeneratingDot/SessionGeneratingDot.spec.js +16 -0
  105. package/lib/components/atoms/SkillsDropdown/SkillsDropdown.spec.js +107 -0
  106. package/lib/components/atoms/SlashCommandChip/SlashCommandChip.spec.js +24 -0
  107. package/lib/components/atoms/SlashCommandDropdown/SlashCommandDropdown.helpers.spec.js +71 -0
  108. package/lib/components/atoms/SlashCommandDropdown/SlashCommandDropdown.spec.js +120 -0
  109. package/lib/components/atoms/Switch/Switch.spec.js +41 -0
  110. package/lib/components/atoms/TextArea/CustomTextArea.spec.js +52 -0
  111. package/lib/components/atoms/TextArea/TextArea.helpers.spec.js +25 -0
  112. package/lib/components/atoms/TextArea/TextArea.spec.js +126 -0
  113. package/lib/components/atoms/ThirdButton.spec.js +29 -0
  114. package/lib/components/atoms/VideoModal/VideoModal.spec.js +68 -0
  115. package/lib/components/atoms/WithAppCfg.spec.js +82 -0
  116. package/lib/components/index.js +2 -1
  117. package/lib/components/molecules/AbmSection/AbmAccessibilitySection/AbmAccessibilitySection.helpers.spec.js +53 -0
  118. package/lib/components/molecules/AbmSection/AbmAccessibilitySection/AbmAccessibilitySection.js +3 -2
  119. package/lib/components/molecules/AbmSection/AbmAccessibilitySection/AbmAccessibilitySection.spec.js +780 -0
  120. package/lib/components/molecules/AbmSection/AbmGeneralSection.helpers.spec.js +107 -0
  121. package/lib/components/molecules/AbmSection/AbmGeneralSection.spec.js +256 -0
  122. package/lib/components/molecules/AbmSection/AbmKnowledgeSection.helpers.js +6 -4
  123. package/lib/components/molecules/AbmSection/AbmKnowledgeSection.helpers.spec.js +175 -0
  124. package/lib/components/molecules/AbmSection/AbmKnowledgeSection.js +25 -16
  125. package/lib/components/molecules/AbmSection/AbmKnowledgeSection.spec.js +318 -0
  126. package/lib/components/molecules/AbmSection/AbmLoaderFiles.helpers.spec.js +50 -0
  127. package/lib/components/molecules/AbmSection/AbmLoaderFiles.spec.js +94 -0
  128. package/lib/components/molecules/AgentInputBlock/AgentInputBlockMessage.js +83 -0
  129. package/lib/components/molecules/AgentInputBlock/AgentInputBlockMessage.styles.js +30 -0
  130. package/lib/components/molecules/AgentInputBlock/index.js +5 -0
  131. package/lib/components/molecules/AgentInputBlock/resolveAgentInputBlock.js +52 -0
  132. package/lib/components/molecules/AgentInputBlock/resolveAgentInputBlock.spec.js +76 -0
  133. package/lib/components/molecules/AgentInputBlock/resolveLegacyContextSession.js +20 -0
  134. package/lib/components/molecules/AgentInputBlock/resolveLegacyContextSession.spec.js +34 -0
  135. package/lib/components/molecules/AgentInputBlock/useAgentChangeModelAction.js +36 -0
  136. package/lib/components/molecules/ChatAIClientSelector/ChatAIClientSelector.spec.js +66 -0
  137. package/lib/components/molecules/ChatAIContent/ChatAIContent.js +7 -3
  138. package/lib/components/molecules/ChatAIContent/ChatAIContent.spec.js +145 -0
  139. package/lib/components/molecules/ChatAIHistory/ChatAIHistory.spec.js +204 -0
  140. package/lib/components/molecules/ChatAIHome/ChatAIHome.helpers.spec.js +622 -0
  141. package/lib/components/molecules/ChatAIHome/ChatAIHome.js +93 -72
  142. package/lib/components/molecules/ChatAIHome/ChatAIHome.spec.js +264 -0
  143. package/lib/components/molecules/ChatAIHome/ChatAIHomeMaiaker.spec.js +86 -0
  144. package/lib/components/molecules/ChatAIHome/styles.js +85 -78
  145. package/lib/components/molecules/ChatAIMessages/ChatAICreateAgentActions.spec.js +104 -0
  146. package/lib/components/molecules/ChatAIMessages/ChatAIMessages.helpers.spec.js +967 -0
  147. package/lib/components/molecules/ChatAIMessages/ChatAIMessages.js +30 -14
  148. package/lib/components/molecules/ChatAIMessages/ChatAIMessages.spec.js +646 -0
  149. package/lib/components/molecules/ChatAIMessages/ChatAISuggestions.spec.js +46 -0
  150. package/lib/components/molecules/ChatAIMessages/newStyles.js +32 -35
  151. package/lib/components/molecules/ChatAIModal/ChatAIModal.helpers.js +8 -1
  152. package/lib/components/molecules/ChatAIModal/ChatAIModal.helpers.spec.js +1395 -0
  153. package/lib/components/molecules/ChatAIModal/ChatAIModal.js +23 -8
  154. package/lib/components/molecules/ChatAIModal/ChatAIModal.spec.js +1434 -0
  155. package/lib/components/molecules/ChatAIModal/ChatAIModal.styles.js +2 -2
  156. package/lib/components/molecules/ChatAIModal/components/ChatAiAgentOptions/ChatAiAgentOptions.helpers.spec.js +33 -0
  157. package/lib/components/molecules/ChatAIModal/components/ChatAiAgentOptions/ChatAiAgentOptions.spec.js +116 -0
  158. package/lib/components/molecules/ChatAIModal/components/ChatAiModalFooter/ChatAiModalFooter.js +15 -153
  159. package/lib/components/molecules/ChatAIModal/components/ChatAiModalFooter/ChatAiModalFooter.spec.js +134 -0
  160. package/lib/components/molecules/ChatAIModal/components/ChatAiModalFooter/ChatAiModalFooter.styles.js +2 -26
  161. package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.helpers.spec.js +142 -0
  162. package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.js +63 -367
  163. package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.spec.js +241 -0
  164. package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.utils.js +69 -0
  165. package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.utils.spec.js +144 -0
  166. package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeaderAgentDropdown.js +95 -0
  167. package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeaderAgentSelector.js +174 -0
  168. package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeaderLayoutMenu.js +99 -0
  169. package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeaderLayoutMenu.spec.js +65 -0
  170. package/lib/components/molecules/ChatAIModal/components/MaiaMinimizedPill/MaiaMinimizedPill.spec.js +37 -0
  171. package/lib/components/molecules/ChatAIModal/constants.spec.js +16 -0
  172. package/lib/components/molecules/ChatAIModal/floatingPanelMotion/FloatingPanelMotion.spec.js +22 -0
  173. package/lib/components/molecules/ChatAIModal/floatingPanelMotion/useFloatingPanelDragTilt.spec.js +67 -0
  174. package/lib/components/molecules/ChatAIModal/layout.spec.js +72 -0
  175. package/lib/components/molecules/ChatAIMultipleChoice/ChatAIMultipleChoice.spec.js +102 -0
  176. package/lib/components/molecules/ChatAIMultipleChoice/ChatAIMultipleChoiceAnswer.spec.js +49 -0
  177. package/lib/components/molecules/ChatAIMyAgents/ChatAIMyAgents.helpers.spec.js +93 -0
  178. package/lib/components/molecules/ChatAIMyAgents/ChatAIMyAgents.spec.js +297 -0
  179. package/lib/components/molecules/ChatAIMySkills/ChatAIMySkills.helpers.spec.js +62 -0
  180. package/lib/components/molecules/ChatAIMySkills/ChatAIMySkills.spec.js +221 -0
  181. package/lib/components/molecules/ChatAIProjectSelector/ChatAIProjectSelector.spec.js +66 -0
  182. package/lib/components/molecules/ChatFooter/ChatFooter.js +10 -4
  183. package/lib/components/molecules/ChatFooter/ChatFooter.spec.js +548 -0
  184. package/lib/components/molecules/ChatFooter/ChatFooterCorAccess.spec.js +10 -0
  185. package/lib/components/molecules/ChatFooter/ChatFooterFaqs.helpers.spec.js +104 -0
  186. package/lib/components/molecules/ChatFooter/ChatFooterFaqs.js +5 -2
  187. package/lib/components/molecules/ChatFooter/ChatFooterFaqs.spec.js +139 -0
  188. package/lib/components/molecules/ContextMentionInput/ContextMentionInput.spec.js +84 -0
  189. package/lib/components/molecules/MessageFeedback/MessageFeedback.spec.js +116 -0
  190. package/lib/components/molecules/ProjectSummaryChat/ProjectSummaryChat.spec.js +126 -0
  191. package/lib/components/molecules/ProjectSummaryConfig/ProjectSummaryConfig.spec.js +115 -0
  192. package/lib/components/molecules/ProjectSummaryContent/ProjectSummaryContent.spec.js +79 -0
  193. package/lib/components/molecules/ProjectSummaryModal/ProjectSummaryModal.spec.js +37 -0
  194. package/lib/components/molecules/Sidebar/Sidebar.helpers.spec.js +119 -0
  195. package/lib/components/molecules/Sidebar/Sidebar.js +41 -23
  196. package/lib/components/molecules/Sidebar/Sidebar.spec.js +526 -0
  197. package/lib/components/organisms/AbmAgentModal/AbmAgentModal.helpers.spec.js +1067 -0
  198. package/lib/components/organisms/AbmAgentModal/AbmAgentModal.js +2 -2
  199. package/lib/components/organisms/AbmAgentModal/AbmAgentModal.spec.js +1236 -0
  200. package/lib/components/organisms/AbmSkillGenerateModal/AbmSkillGenerateModal.spec.js +112 -0
  201. package/lib/components/organisms/AbmSkillModal/AbmSkillModal.helpers.spec.js +77 -0
  202. package/lib/components/organisms/AbmSkillModal/AbmSkillModal.spec.js +503 -0
  203. package/lib/components/organisms/ChatAI/ChatAI.spec.js +217 -0
  204. package/lib/components/organisms/ChatAIPage/ChatAIPage.js +525 -0
  205. package/lib/components/organisms/ChatAIPage/ChatAIPage.spec.js +246 -0
  206. package/lib/components/organisms/ChatAIPage/ChatAIPage.styles.js +16 -0
  207. package/lib/components/organisms/ChatAIPage/ChatAIPageHeader.js +253 -0
  208. package/lib/components/organisms/ChatAIPage/ChatAIPageHeader.spec.js +291 -0
  209. package/lib/components/organisms/ChatAIPage/ChatAIPageHeader.styles.js +13 -0
  210. package/lib/components/organisms/ChatAIPage/ChatAIPageHome.js +284 -0
  211. package/lib/components/organisms/ChatAIPage/ChatAIPageHome.spec.js +343 -0
  212. package/lib/components/organisms/ChatAIPage/ChatAIPageHome.styles.js +197 -0
  213. package/lib/components/organisms/ChatAIPage/ChatAIPageHomeActionCardSlot.js +94 -0
  214. package/lib/components/organisms/ChatAIPage/ChatAIPageHomeActionCardSlot.spec.js +69 -0
  215. package/lib/components/organisms/ChatAIPage/ChatAIPageHomeActionCards.skeleton.js +38 -0
  216. package/lib/components/organisms/ChatAIPage/getDaypart.js +9 -0
  217. package/lib/components/organisms/ChatAIPage/getDaypart.spec.js +19 -0
  218. package/lib/components/organisms/ChatAIPage/index.js +3 -0
  219. package/lib/components/organisms/ClientAIButton/ClientAIButton.spec.js +53 -0
  220. package/lib/components/organisms/DeleteAgentModal/DeleteAgentModal.spec.js +59 -0
  221. package/lib/components/organisms/DeleteQuestionModal/DeleteQuestionModal.spec.js +79 -0
  222. package/lib/components/organisms/EditQuestionModal/EditQuestionModal.spec.js +86 -0
  223. package/lib/components/organisms/ModalFileExceeds/ModalFileExceeds.spec.js +49 -0
  224. package/lib/components/organisms/ProjectAIButton/ProjectAIButton.spec.js +67 -0
  225. package/lib/components/organisms/ProjectSummary/ProjectSummary.js +11 -7
  226. package/lib/components/organisms/ProjectSummary/ProjectSummary.spec.js +117 -0
  227. package/lib/components/organisms/SnackBar/Snackbar.spec.js +66 -0
  228. package/lib/components/organisms/SourcesInformation/SourceItem.spec.js +19 -0
  229. package/lib/components/organisms/SourcesInformation/SourcesInformationModal.js +4 -1
  230. package/lib/components/organisms/SourcesInformation/SourcesInformationModal.spec.js +52 -0
  231. package/lib/constants/formatExtensions.spec.js +15 -0
  232. package/lib/constants/maiaExternalConnectorsAccess.spec.js +29 -0
  233. package/lib/constants/maiaFeatureAccess.spec.js +30 -0
  234. package/lib/constants/maiaHourAgentAccess.spec.js +30 -0
  235. package/lib/constants/maiaTaskPanelAccess.spec.js +41 -0
  236. package/lib/constants/permissions/clientRoleAccess.spec.js +65 -0
  237. package/lib/constants/permissions/index.js +2 -2
  238. package/lib/constants/permissions/utils.js +4 -1
  239. package/lib/constants/permissions/utils.spec.js +128 -0
  240. package/lib/constants/plannerSyncEvents.spec.js +31 -0
  241. package/lib/constants/taskUrls.spec.js +9 -0
  242. package/lib/dev/DevMaiaPage.js +30 -0
  243. package/lib/dev/DevReasoningTimeline.js +68 -37
  244. package/lib/dev/Providers.js +5 -3
  245. package/lib/hooks/frequentlyUsedActionsCache.js +17 -0
  246. package/lib/hooks/frequentlyUsedActionsCache.spec.js +25 -0
  247. package/lib/hooks/useAccessClient/useAccessClient.spec.js +149 -0
  248. package/lib/hooks/useAgentModel/useAgentModel.spec.js +83 -0
  249. package/lib/hooks/useAgentModel/useCreateAgent.helpers.spec.js +268 -0
  250. package/lib/hooks/useAgentModel/useCreateAgent.spec.js +314 -0
  251. package/lib/hooks/useAgentModel/useDeleteAgent.spec.js +183 -0
  252. package/lib/hooks/useAgentModel/useUpdateAgent.js +7 -6
  253. package/lib/hooks/useAgentModel/useUpdateAgent.spec.js +374 -0
  254. package/lib/hooks/useAgentSuggestions.spec.js +89 -0
  255. package/lib/hooks/useCaretPosition.spec.js +58 -0
  256. package/lib/hooks/useChatManager/useChatManager.helpers.js +3 -3
  257. package/lib/hooks/useChatManager/useChatManager.helpers.spec.js +2027 -0
  258. package/lib/hooks/useChatManager/useChatManager.js +8 -7
  259. package/lib/hooks/useChatManager/useChatManager.spec.js +2467 -0
  260. package/lib/hooks/useChatMessages/useChatMessages.helpers.spec.js +491 -0
  261. package/lib/hooks/useChatMessages/useChatMessages.spec.js +729 -0
  262. package/lib/hooks/useChats/useChats.spec.js +208 -0
  263. package/lib/hooks/useClientSearch.helpers.spec.js +52 -0
  264. package/lib/hooks/useClientSearch.spec.js +86 -0
  265. package/lib/hooks/useContextMentions.helpers.spec.js +267 -0
  266. package/lib/hooks/useContextMentions.spec.js +338 -0
  267. package/lib/hooks/useContextPinPopover.helpers.spec.js +183 -0
  268. package/lib/hooks/useContextPinPopover.spec.js +159 -0
  269. package/lib/hooks/useContinueLegacyContextInNewChat/index.js +2 -0
  270. package/lib/hooks/useContinueLegacyContextInNewChat/useContinueLegacyContextInNewChat.js +93 -0
  271. package/lib/hooks/useContinueLegacyContextInNewChat/useContinueLegacyContextInNewChat.spec.js +257 -0
  272. package/lib/hooks/useDebounce.spec.js +42 -0
  273. package/lib/hooks/useEntitySearch.helpers.spec.js +723 -0
  274. package/lib/hooks/useEntitySearch.js +3 -1
  275. package/lib/hooks/useEntitySearch.spec.js +718 -0
  276. package/lib/hooks/useEvent.spec.js +45 -0
  277. package/lib/hooks/useFrequentlyAskedQuestions.spec.js +222 -0
  278. package/lib/hooks/useFrequentlyUsedActions.js +61 -22
  279. package/lib/hooks/useFrequentlyUsedActions.spec.js +293 -0
  280. package/lib/hooks/useIsMaiaPageRoute.spec.js +26 -0
  281. package/lib/hooks/useKnowledge/deleteKnowledge.spec.js +122 -0
  282. package/lib/hooks/useKnowledge/downloadKnowledge.js +4 -4
  283. package/lib/hooks/useKnowledge/downloadKnowledge.spec.js +148 -0
  284. package/lib/hooks/useKnowledge/saveKnowledge.spec.js +104 -0
  285. package/lib/hooks/useKnowledge/useKnowledgeOperations.js +16 -15
  286. package/lib/hooks/useKnowledge/useKnowledgeOperations.spec.js +178 -0
  287. package/lib/hooks/useLatestRef.spec.js +50 -0
  288. package/lib/hooks/useMaiaChatSessionMeta/index.js +2 -0
  289. package/lib/hooks/useMaiaChatSessionMeta/useMaiaChatSessionMeta.js +24 -0
  290. package/lib/hooks/useMentionAllowedTypes.spec.js +89 -0
  291. package/lib/hooks/useMentionPopover.helpers.spec.js +100 -0
  292. package/lib/hooks/useMentionPopover.spec.js +392 -0
  293. package/lib/hooks/useMinimizedPillBottomOffset.helpers.spec.js +176 -0
  294. package/lib/hooks/useMinimizedPillBottomOffset.spec.js +89 -0
  295. package/lib/hooks/useMinimizedPillNoveltyDot/useMinimizedPillNoveltyDot.spec.js +67 -0
  296. package/lib/hooks/useModal/useModal.spec.js +73 -0
  297. package/lib/hooks/useOrchestratorStream/useOrchestratorStream.helpers.spec.js +138 -0
  298. package/lib/hooks/useOrchestratorStream/useOrchestratorStream.spec.js +485 -0
  299. package/lib/hooks/useProjectSearch.helpers.spec.js +89 -0
  300. package/lib/hooks/useProjectSearch.spec.js +91 -0
  301. package/lib/hooks/useProjectSummary.spec.js +193 -0
  302. package/lib/hooks/useProjectSummaryConfig.helpers.spec.js +151 -0
  303. package/lib/hooks/useProjectSummaryConfig.js +10 -5
  304. package/lib/hooks/useProjectSummaryConfig.spec.js +133 -0
  305. package/lib/hooks/useReasoningTrace/reasoningStore.spec.js +112 -0
  306. package/lib/hooks/useRecentClientsSearch.helpers.spec.js +33 -0
  307. package/lib/hooks/useRecentClientsSearch.spec.js +85 -0
  308. package/lib/hooks/useRecentContexts.spec.js +139 -0
  309. package/lib/hooks/useResize.spec.js +37 -0
  310. package/lib/hooks/useSkillsCatalog.spec.js +88 -0
  311. package/lib/hooks/useSlashCommands.spec.js +139 -0
  312. package/lib/hooks/useSmoothStreamText/useSmoothStreamText.spec.js +101 -0
  313. package/lib/hooks/useSnackBarManager/useSnackBarManager.spec.js +33 -0
  314. package/lib/hooks/useStreamResponse.spec.js +199 -0
  315. package/lib/hooks/useT.spec.js +20 -0
  316. package/lib/hooks/useToggle.spec.js +33 -0
  317. package/lib/hooks/useToggleFavorite/useToggleFavorite.spec.js +171 -0
  318. package/lib/index.js +5 -2
  319. package/lib/lang/br/index.js +26 -1
  320. package/lib/lang/en/index.js +26 -1
  321. package/lib/lang/es/index.js +26 -1
  322. package/lib/lang/fr/index.js +26 -1
  323. package/lib/services/appcues.spec.js +37 -0
  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 +121 -0
  327. package/lib/services/maia/Actions/getSlashCommands.spec.js +91 -0
  328. package/lib/services/maia/Agents/connectors.js +3 -1
  329. package/lib/services/maia/Agents/connectors.spec.js +496 -0
  330. package/lib/services/maia/Agents/createAgent.spec.js +55 -0
  331. package/lib/services/maia/Agents/deleteAgent.spec.js +57 -0
  332. package/lib/services/maia/Agents/fetchAgentDetail.spec.js +108 -0
  333. package/lib/services/maia/Agents/getAgentById.spec.js +190 -0
  334. package/lib/services/maia/Agents/getAgentModels.spec.js +190 -0
  335. package/lib/services/maia/Agents/getAgentSuggestions.spec.js +89 -0
  336. package/lib/services/maia/Agents/getAgents.helpers.spec.js +325 -0
  337. package/lib/services/maia/Agents/getAgents.spec.js +1135 -0
  338. package/lib/services/maia/Agents/setAgentToolGroups.spec.js +45 -0
  339. package/lib/services/maia/Agents/toggleFavorite.spec.js +59 -0
  340. package/lib/services/maia/Agents/updateAgent.spec.js +48 -0
  341. package/lib/services/maia/Chats/deleteChat.spec.js +31 -0
  342. package/lib/services/maia/Chats/getChatMessages.spec.js +150 -0
  343. package/lib/services/maia/Chats/getChatsByUserId.spec.js +181 -0
  344. package/lib/services/maia/Chats/markSessionAsRead.spec.js +30 -0
  345. package/lib/services/maia/Chats/patchChat.spec.js +41 -0
  346. package/lib/services/maia/Chats/wasHelpfulChat.spec.js +28 -0
  347. package/lib/services/maia/Faqs/getFrequentlyAskedQuestions.spec.js +58 -0
  348. package/lib/services/maia/Knowledge/delete.spec.js +45 -0
  349. package/lib/services/maia/Knowledge/download.spec.js +78 -0
  350. package/lib/services/maia/Knowledge/save.spec.js +58 -0
  351. package/lib/services/maia/Orchestrator/orchestrator.helpers.spec.js +261 -0
  352. package/lib/services/maia/Orchestrator/orchestrator.spec.js +181 -0
  353. package/lib/services/maia/RecentClients/getRecentClients.spec.js +52 -0
  354. package/lib/services/maia/RecentContexts/getRecentContexts.spec.js +103 -0
  355. package/lib/services/maia/RecentProjects/getRecentProjects.spec.js +82 -0
  356. package/lib/services/maia/RecentTasks/getRecentTasks.spec.js +63 -0
  357. package/lib/services/maia/RecentUsers/getRecentUsers.spec.js +82 -0
  358. package/lib/services/maia/Skills/createSkill.spec.js +68 -0
  359. package/lib/services/maia/Skills/deleteSkill.spec.js +42 -0
  360. package/lib/services/maia/Skills/generateSkill.spec.js +48 -0
  361. package/lib/services/maia/Skills/getSkills.spec.js +152 -0
  362. package/lib/services/maia/Skills/updateSkill.spec.js +62 -0
  363. package/lib/services/maia/client.spec.js +56 -0
  364. package/lib/services/utils/fetchCOR.spec.js +211 -0
  365. package/lib/services/utils/getCookie.spec.js +20 -0
  366. package/lib/services/utils/mapChatMessages.helpers.spec.js +336 -0
  367. package/lib/services/utils/mapChatMessages.multipleChoice.spec.js +87 -0
  368. package/lib/services/utils/mapChatMessages.spec.js +254 -0
  369. package/lib/store/chatsSidebarOptimistic.spec.js +145 -0
  370. package/lib/store/maiaLastChatPersistence.spec.js +22 -0
  371. package/lib/store/maiaPanelSessionPersistence.spec.js +62 -0
  372. package/lib/store/sessions/sessionNotificationSound.spec.js +145 -0
  373. package/lib/store/sessions/sessionNotifications.helpers.spec.js +63 -0
  374. package/lib/store/sessions/sessionNotifications.spec.js +106 -0
  375. package/lib/store/sessions/sessionStreamManager.helpers.spec.js +177 -0
  376. package/lib/store/sessions/sessionStreamManager.js +51 -55
  377. package/lib/store/sessions/sessionStreamManager.spec.js +939 -0
  378. package/lib/store/sessions/sessions.types.spec.js +16 -0
  379. package/lib/store/sessions/useSessionsStore.spec.js +135 -0
  380. package/lib/store/useChatsStore.js +4 -3
  381. package/lib/store/useChatsStore.spec.js +690 -0
  382. package/lib/store/useFaqsStore.spec.js +57 -0
  383. package/lib/store/useMultipleChoiceStore.spec.js +44 -0
  384. package/lib/styles/cascade.js +29 -3
  385. package/lib/styles/transitions.js +3 -1
  386. package/lib/types/global.d.js +1 -1
  387. package/lib/utils/actionCategoryMap.spec.js +18 -0
  388. package/lib/utils/agentDisplayName.spec.js +48 -0
  389. package/lib/utils/autoApproveStorage.spec.js +25 -0
  390. package/lib/utils/chatInputFiles.spec.js +39 -0
  391. package/lib/utils/contextMentionIcons.spec.js +41 -0
  392. package/lib/utils/contextMentionLabel.spec.js +13 -0
  393. package/lib/utils/contextMentionTriggers.spec.js +44 -0
  394. package/lib/utils/contextMentionTypeLabel.spec.js +14 -0
  395. package/lib/utils/corConnectorMentionTypes.spec.js +23 -0
  396. package/lib/utils/entityLinkRender.spec.js +72 -0
  397. package/lib/utils/fileDownloadHelper.spec.js +67 -0
  398. package/lib/utils/formatQuickActionMessage.spec.js +27 -0
  399. package/lib/utils/formatUnreadCount.spec.js +12 -0
  400. package/lib/utils/getUnitFileSize.spec.js +18 -0
  401. package/lib/utils/hitlAnalytics.spec.js +136 -0
  402. package/lib/utils/hoursPlannerQuickActionType.js +116 -1
  403. package/lib/utils/hoursPlannerQuickActionType.spec.js +124 -0
  404. package/lib/utils/imagePreprocessor.helpers.spec.js +28 -0
  405. package/lib/utils/imagePreprocessor.js +14 -3
  406. package/lib/utils/imagePreprocessor.spec.js +112 -0
  407. package/lib/utils/maiaPageRoute.spec.js +23 -0
  408. package/lib/utils/mapBackendLang.spec.js +19 -0
  409. package/lib/utils/navigateContextEntity.js +2 -2
  410. package/lib/utils/navigateContextEntity.spec.js +50 -0
  411. package/lib/utils/normalizeAgentConnectors.spec.js +98 -0
  412. package/lib/utils/openTaskInCorPanel.js +2 -2
  413. package/lib/utils/openTaskInCorPanel.spec.js +43 -0
  414. package/lib/utils/orchestratorSubagents.spec.js +32 -0
  415. package/lib/utils/reasoningMappers.spec.js +103 -0
  416. package/lib/utils/recentContextsHomeLimit.spec.js +32 -0
  417. package/lib/utils/renderContextMentions.helpers.spec.js +87 -0
  418. package/lib/utils/renderContextMentions.spec.js +268 -0
  419. package/lib/utils/retryCompletion.spec.js +181 -0
  420. package/lib/utils/skillContentSize.spec.js +13 -0
  421. package/lib/utils/slashCommandMarker.spec.js +43 -0
  422. package/lib/utils/sortManagerHoursHomeFuas.spec.js +51 -0
  423. package/lib/utils/sseStreamContent.spec.js +31 -0
  424. package/lib/utils/streamActivityMessages.helpers.js +5 -4
  425. package/lib/utils/streamActivityMessages.helpers.spec.js +84 -0
  426. package/lib/utils/streamActivityMessages.js +32 -20
  427. package/lib/utils/streamActivityMessages.spec.js +336 -0
  428. package/lib/utils/validateTrimmedFields.spec.js +26 -0
  429. package/package.json +1 -1
  430. package/README.md +0 -2
@@ -0,0 +1,94 @@
1
+ import { appendExtensionIfMissing, getAttachmentPreviewFileDetails, resolveDownloadMimeType, resolveRemoteImagePreviewUrl } from './AttachmentPreviewModal.helpers';
2
+ describe('AttachmentPreviewModal.helpers', function () {
3
+ describe('getAttachmentPreviewFileDetails', function () {
4
+ it('detects file types from the file name extension', function () {
5
+ expect(getAttachmentPreviewFileDetails('brief.pdf')).toMatchObject({
6
+ fileExtension: '.pdf',
7
+ isPdf: true,
8
+ isImage: false
9
+ });
10
+ expect(getAttachmentPreviewFileDetails('photo.png')).toMatchObject({
11
+ isImage: true,
12
+ isPdf: false
13
+ });
14
+ expect(getAttachmentPreviewFileDetails('deck.pptx')).toMatchObject({
15
+ isPpt: true,
16
+ isOfficeDoc: false
17
+ });
18
+ expect(getAttachmentPreviewFileDetails('notes.docx')).toMatchObject({
19
+ isOfficeDoc: true,
20
+ isPpt: false
21
+ });
22
+ });
23
+ it('falls back to mime type when the extension is missing', function () {
24
+ expect(getAttachmentPreviewFileDetails('report', 'application/pdf')).toMatchObject({
25
+ fileExtension: '.pdf',
26
+ isPdf: true
27
+ });
28
+ expect(getAttachmentPreviewFileDetails('data', 'csv')).toMatchObject({
29
+ fileExtension: '.csv',
30
+ isText: true
31
+ });
32
+ expect(getAttachmentPreviewFileDetails('sheet', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet')).toMatchObject({
33
+ isExcel: true
34
+ });
35
+ expect(getAttachmentPreviewFileDetails('notes', 'text/markdown')).toMatchObject({
36
+ isMarkdown: true
37
+ });
38
+ });
39
+ it('prefers the file name extension over a generic mime type', function () {
40
+ expect(getAttachmentPreviewFileDetails('slides.pptx', 'application/vnd.ms-powerpoint')).toMatchObject({
41
+ fileExtension: '.pptx',
42
+ isPpt: true
43
+ });
44
+ });
45
+ it('ignores invalid extensions and falls back to short mime aliases', function () {
46
+ expect(getAttachmentPreviewFileDetails('archive.badext', 'application/pdf')).toMatchObject({
47
+ fileExtension: '.pdf',
48
+ isPdf: true
49
+ });
50
+ expect(getAttachmentPreviewFileDetails('data', 'json')).toMatchObject({
51
+ fileExtension: '.json',
52
+ isPdf: false
53
+ });
54
+ });
55
+ });
56
+ describe('resolveDownloadMimeType', function () {
57
+ it('maps extension-only attachment types to mime types', function () {
58
+ expect(resolveDownloadMimeType('pdf', '.pdf')).toBe('application/pdf');
59
+ expect(resolveDownloadMimeType('txt', '')).toBe('text/plain');
60
+ expect(resolveDownloadMimeType(undefined, '.xlsx')).toBe('application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
61
+ });
62
+ it('returns undefined when no type or extension mapping exists', function () {
63
+ expect(resolveDownloadMimeType(undefined, '')).toBeUndefined();
64
+ expect(resolveDownloadMimeType('application/json', '.json')).toBe('application/json');
65
+ });
66
+ it('returns attachmentType when extension mapping is unavailable', function () {
67
+ expect(resolveDownloadMimeType('custom-type', '')).toBe('custom-type');
68
+ expect(resolveDownloadMimeType('application/json', '')).toBe('application/json');
69
+ });
70
+ it('prefers file extension mapping for full mime types when available', function () {
71
+ expect(resolveDownloadMimeType('application/octet-stream', '.docx')).toBe('application/vnd.openxmlformats-officedocument.wordprocessingml.document');
72
+ });
73
+ });
74
+ describe('appendExtensionIfMissing', function () {
75
+ it('appends extension only when missing', function () {
76
+ expect(appendExtensionIfMissing('report', '.pdf')).toBe('report.pdf');
77
+ expect(appendExtensionIfMissing('report.PDF', '.pdf')).toBe('report.PDF');
78
+ expect(appendExtensionIfMissing('report', '')).toBe('report');
79
+ });
80
+ });
81
+ describe('resolveRemoteImagePreviewUrl', function () {
82
+ it('prefers original url over thumbnail', function () {
83
+ expect(resolveRemoteImagePreviewUrl({
84
+ urlOriginal: 'https://cdn/original.png',
85
+ urlThumbnail: 'https://cdn/thumb.png'
86
+ })).toBe('https://cdn/original.png');
87
+ expect(resolveRemoteImagePreviewUrl({
88
+ urlThumbnail: 'https://cdn/thumb.png'
89
+ })).toBe('https://cdn/thumb.png');
90
+ expect(resolveRemoteImagePreviewUrl({})).toBeNull();
91
+ });
92
+ });
93
+ });
94
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJhcHBlbmRFeHRlbnNpb25JZk1pc3NpbmciLCJnZXRBdHRhY2htZW50UHJldmlld0ZpbGVEZXRhaWxzIiwicmVzb2x2ZURvd25sb2FkTWltZVR5cGUiLCJyZXNvbHZlUmVtb3RlSW1hZ2VQcmV2aWV3VXJsIiwiZGVzY3JpYmUiLCJpdCIsImV4cGVjdCIsInRvTWF0Y2hPYmplY3QiLCJmaWxlRXh0ZW5zaW9uIiwiaXNQZGYiLCJpc0ltYWdlIiwiaXNQcHQiLCJpc09mZmljZURvYyIsImlzVGV4dCIsImlzRXhjZWwiLCJpc01hcmtkb3duIiwidG9CZSIsInVuZGVmaW5lZCIsInRvQmVVbmRlZmluZWQiLCJ1cmxPcmlnaW5hbCIsInVybFRodW1ibmFpbCIsInRvQmVOdWxsIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvYXRvbXMvQXR0YWNobWVudFByZXZpZXdNb2RhbC9BdHRhY2htZW50UHJldmlld01vZGFsLmhlbHBlcnMuc3BlYy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBhcHBlbmRFeHRlbnNpb25JZk1pc3NpbmcsXG4gIGdldEF0dGFjaG1lbnRQcmV2aWV3RmlsZURldGFpbHMsXG4gIHJlc29sdmVEb3dubG9hZE1pbWVUeXBlLFxuICByZXNvbHZlUmVtb3RlSW1hZ2VQcmV2aWV3VXJsLFxufSBmcm9tICcuL0F0dGFjaG1lbnRQcmV2aWV3TW9kYWwuaGVscGVycydcblxuZGVzY3JpYmUoJ0F0dGFjaG1lbnRQcmV2aWV3TW9kYWwuaGVscGVycycsICgpID0+IHtcbiAgZGVzY3JpYmUoJ2dldEF0dGFjaG1lbnRQcmV2aWV3RmlsZURldGFpbHMnLCAoKSA9PiB7XG4gICAgaXQoJ2RldGVjdHMgZmlsZSB0eXBlcyBmcm9tIHRoZSBmaWxlIG5hbWUgZXh0ZW5zaW9uJywgKCkgPT4ge1xuICAgICAgZXhwZWN0KGdldEF0dGFjaG1lbnRQcmV2aWV3RmlsZURldGFpbHMoJ2JyaWVmLnBkZicpKS50b01hdGNoT2JqZWN0KHtcbiAgICAgICAgZmlsZUV4dGVuc2lvbjogJy5wZGYnLFxuICAgICAgICBpc1BkZjogdHJ1ZSxcbiAgICAgICAgaXNJbWFnZTogZmFsc2UsXG4gICAgICB9KVxuICAgICAgZXhwZWN0KGdldEF0dGFjaG1lbnRQcmV2aWV3RmlsZURldGFpbHMoJ3Bob3RvLnBuZycpKS50b01hdGNoT2JqZWN0KHtcbiAgICAgICAgaXNJbWFnZTogdHJ1ZSxcbiAgICAgICAgaXNQZGY6IGZhbHNlLFxuICAgICAgfSlcbiAgICAgIGV4cGVjdChnZXRBdHRhY2htZW50UHJldmlld0ZpbGVEZXRhaWxzKCdkZWNrLnBwdHgnKSkudG9NYXRjaE9iamVjdCh7XG4gICAgICAgIGlzUHB0OiB0cnVlLFxuICAgICAgICBpc09mZmljZURvYzogZmFsc2UsXG4gICAgICB9KVxuICAgICAgZXhwZWN0KGdldEF0dGFjaG1lbnRQcmV2aWV3RmlsZURldGFpbHMoJ25vdGVzLmRvY3gnKSkudG9NYXRjaE9iamVjdCh7XG4gICAgICAgIGlzT2ZmaWNlRG9jOiB0cnVlLFxuICAgICAgICBpc1BwdDogZmFsc2UsXG4gICAgICB9KVxuICAgIH0pXG5cbiAgICBpdCgnZmFsbHMgYmFjayB0byBtaW1lIHR5cGUgd2hlbiB0aGUgZXh0ZW5zaW9uIGlzIG1pc3NpbmcnLCAoKSA9PiB7XG4gICAgICBleHBlY3QoZ2V0QXR0YWNobWVudFByZXZpZXdGaWxlRGV0YWlscygncmVwb3J0JywgJ2FwcGxpY2F0aW9uL3BkZicpKS50b01hdGNoT2JqZWN0KHtcbiAgICAgICAgZmlsZUV4dGVuc2lvbjogJy5wZGYnLFxuICAgICAgICBpc1BkZjogdHJ1ZSxcbiAgICAgIH0pXG4gICAgICBleHBlY3QoZ2V0QXR0YWNobWVudFByZXZpZXdGaWxlRGV0YWlscygnZGF0YScsICdjc3YnKSkudG9NYXRjaE9iamVjdCh7XG4gICAgICAgIGZpbGVFeHRlbnNpb246ICcuY3N2JyxcbiAgICAgICAgaXNUZXh0OiB0cnVlLFxuICAgICAgfSlcbiAgICAgIGV4cGVjdChcbiAgICAgICAgZ2V0QXR0YWNobWVudFByZXZpZXdGaWxlRGV0YWlscygnc2hlZXQnLCAnYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwuc2hlZXQnKVxuICAgICAgKS50b01hdGNoT2JqZWN0KHtcbiAgICAgICAgaXNFeGNlbDogdHJ1ZSxcbiAgICAgIH0pXG4gICAgICBleHBlY3QoZ2V0QXR0YWNobWVudFByZXZpZXdGaWxlRGV0YWlscygnbm90ZXMnLCAndGV4dC9tYXJrZG93bicpKS50b01hdGNoT2JqZWN0KHtcbiAgICAgICAgaXNNYXJrZG93bjogdHJ1ZSxcbiAgICAgIH0pXG4gICAgfSlcblxuICAgIGl0KCdwcmVmZXJzIHRoZSBmaWxlIG5hbWUgZXh0ZW5zaW9uIG92ZXIgYSBnZW5lcmljIG1pbWUgdHlwZScsICgpID0+IHtcbiAgICAgIGV4cGVjdChnZXRBdHRhY2htZW50UHJldmlld0ZpbGVEZXRhaWxzKCdzbGlkZXMucHB0eCcsICdhcHBsaWNhdGlvbi92bmQubXMtcG93ZXJwb2ludCcpKS50b01hdGNoT2JqZWN0KHtcbiAgICAgICAgZmlsZUV4dGVuc2lvbjogJy5wcHR4JyxcbiAgICAgICAgaXNQcHQ6IHRydWUsXG4gICAgICB9KVxuICAgIH0pXG5cbiAgICBpdCgnaWdub3JlcyBpbnZhbGlkIGV4dGVuc2lvbnMgYW5kIGZhbGxzIGJhY2sgdG8gc2hvcnQgbWltZSBhbGlhc2VzJywgKCkgPT4ge1xuICAgICAgZXhwZWN0KGdldEF0dGFjaG1lbnRQcmV2aWV3RmlsZURldGFpbHMoJ2FyY2hpdmUuYmFkZXh0JywgJ2FwcGxpY2F0aW9uL3BkZicpKS50b01hdGNoT2JqZWN0KHtcbiAgICAgICAgZmlsZUV4dGVuc2lvbjogJy5wZGYnLFxuICAgICAgICBpc1BkZjogdHJ1ZSxcbiAgICAgIH0pXG4gICAgICBleHBlY3QoZ2V0QXR0YWNobWVudFByZXZpZXdGaWxlRGV0YWlscygnZGF0YScsICdqc29uJykpLnRvTWF0Y2hPYmplY3Qoe1xuICAgICAgICBmaWxlRXh0ZW5zaW9uOiAnLmpzb24nLFxuICAgICAgICBpc1BkZjogZmFsc2UsXG4gICAgICB9KVxuICAgIH0pXG4gIH0pXG5cbiAgZGVzY3JpYmUoJ3Jlc29sdmVEb3dubG9hZE1pbWVUeXBlJywgKCkgPT4ge1xuICAgIGl0KCdtYXBzIGV4dGVuc2lvbi1vbmx5IGF0dGFjaG1lbnQgdHlwZXMgdG8gbWltZSB0eXBlcycsICgpID0+IHtcbiAgICAgIGV4cGVjdChyZXNvbHZlRG93bmxvYWRNaW1lVHlwZSgncGRmJywgJy5wZGYnKSkudG9CZSgnYXBwbGljYXRpb24vcGRmJylcbiAgICAgIGV4cGVjdChyZXNvbHZlRG93bmxvYWRNaW1lVHlwZSgndHh0JywgJycpKS50b0JlKCd0ZXh0L3BsYWluJylcbiAgICAgIGV4cGVjdChyZXNvbHZlRG93bmxvYWRNaW1lVHlwZSh1bmRlZmluZWQsICcueGxzeCcpKS50b0JlKFxuICAgICAgICAnYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwuc2hlZXQnXG4gICAgICApXG4gICAgfSlcblxuICAgIGl0KCdyZXR1cm5zIHVuZGVmaW5lZCB3aGVuIG5vIHR5cGUgb3IgZXh0ZW5zaW9uIG1hcHBpbmcgZXhpc3RzJywgKCkgPT4ge1xuICAgICAgZXhwZWN0KHJlc29sdmVEb3dubG9hZE1pbWVUeXBlKHVuZGVmaW5lZCwgJycpKS50b0JlVW5kZWZpbmVkKClcbiAgICAgIGV4cGVjdChyZXNvbHZlRG93bmxvYWRNaW1lVHlwZSgnYXBwbGljYXRpb24vanNvbicsICcuanNvbicpKS50b0JlKCdhcHBsaWNhdGlvbi9qc29uJylcbiAgICB9KVxuXG4gICAgaXQoJ3JldHVybnMgYXR0YWNobWVudFR5cGUgd2hlbiBleHRlbnNpb24gbWFwcGluZyBpcyB1bmF2YWlsYWJsZScsICgpID0+IHtcbiAgICAgIGV4cGVjdChyZXNvbHZlRG93bmxvYWRNaW1lVHlwZSgnY3VzdG9tLXR5cGUnLCAnJykpLnRvQmUoJ2N1c3RvbS10eXBlJylcbiAgICAgIGV4cGVjdChyZXNvbHZlRG93bmxvYWRNaW1lVHlwZSgnYXBwbGljYXRpb24vanNvbicsICcnKSkudG9CZSgnYXBwbGljYXRpb24vanNvbicpXG4gICAgfSlcblxuICAgIGl0KCdwcmVmZXJzIGZpbGUgZXh0ZW5zaW9uIG1hcHBpbmcgZm9yIGZ1bGwgbWltZSB0eXBlcyB3aGVuIGF2YWlsYWJsZScsICgpID0+IHtcbiAgICAgIGV4cGVjdChyZXNvbHZlRG93bmxvYWRNaW1lVHlwZSgnYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtJywgJy5kb2N4JykpLnRvQmUoXG4gICAgICAgICdhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQud29yZHByb2Nlc3NpbmdtbC5kb2N1bWVudCdcbiAgICAgIClcbiAgICB9KVxuICB9KVxuXG4gIGRlc2NyaWJlKCdhcHBlbmRFeHRlbnNpb25JZk1pc3NpbmcnLCAoKSA9PiB7XG4gICAgaXQoJ2FwcGVuZHMgZXh0ZW5zaW9uIG9ubHkgd2hlbiBtaXNzaW5nJywgKCkgPT4ge1xuICAgICAgZXhwZWN0KGFwcGVuZEV4dGVuc2lvbklmTWlzc2luZygncmVwb3J0JywgJy5wZGYnKSkudG9CZSgncmVwb3J0LnBkZicpXG4gICAgICBleHBlY3QoYXBwZW5kRXh0ZW5zaW9uSWZNaXNzaW5nKCdyZXBvcnQuUERGJywgJy5wZGYnKSkudG9CZSgncmVwb3J0LlBERicpXG4gICAgICBleHBlY3QoYXBwZW5kRXh0ZW5zaW9uSWZNaXNzaW5nKCdyZXBvcnQnLCAnJykpLnRvQmUoJ3JlcG9ydCcpXG4gICAgfSlcbiAgfSlcblxuICBkZXNjcmliZSgncmVzb2x2ZVJlbW90ZUltYWdlUHJldmlld1VybCcsICgpID0+IHtcbiAgICBpdCgncHJlZmVycyBvcmlnaW5hbCB1cmwgb3ZlciB0aHVtYm5haWwnLCAoKSA9PiB7XG4gICAgICBleHBlY3QoXG4gICAgICAgIHJlc29sdmVSZW1vdGVJbWFnZVByZXZpZXdVcmwoeyB1cmxPcmlnaW5hbDogJ2h0dHBzOi8vY2RuL29yaWdpbmFsLnBuZycsIHVybFRodW1ibmFpbDogJ2h0dHBzOi8vY2RuL3RodW1iLnBuZycgfSlcbiAgICAgICkudG9CZSgnaHR0cHM6Ly9jZG4vb3JpZ2luYWwucG5nJylcbiAgICAgIGV4cGVjdChyZXNvbHZlUmVtb3RlSW1hZ2VQcmV2aWV3VXJsKHsgdXJsVGh1bWJuYWlsOiAnaHR0cHM6Ly9jZG4vdGh1bWIucG5nJyB9KSkudG9CZSgnaHR0cHM6Ly9jZG4vdGh1bWIucG5nJylcbiAgICAgIGV4cGVjdChyZXNvbHZlUmVtb3RlSW1hZ2VQcmV2aWV3VXJsKHt9KSkudG9CZU51bGwoKVxuICAgIH0pXG4gIH0pXG59KVxuIl0sIm1hcHBpbmdzIjoiQUFBQSxTQUNFQSx3QkFBd0IsRUFDeEJDLCtCQUErQixFQUMvQkMsdUJBQXVCLEVBQ3ZCQyw0QkFBNEIsUUFDdkIsa0NBQWtDO0FBRXpDQyxRQUFRLENBQUMsZ0NBQWdDLEVBQUUsWUFBTTtFQUMvQ0EsUUFBUSxDQUFDLGlDQUFpQyxFQUFFLFlBQU07SUFDaERDLEVBQUUsQ0FBQyxpREFBaUQsRUFBRSxZQUFNO01BQzFEQyxNQUFNLENBQUNMLCtCQUErQixDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUNNLGFBQWEsQ0FBQztRQUNqRUMsYUFBYSxFQUFFLE1BQU07UUFDckJDLEtBQUssRUFBRSxJQUFJO1FBQ1hDLE9BQU8sRUFBRTtNQUNYLENBQUMsQ0FBQztNQUNGSixNQUFNLENBQUNMLCtCQUErQixDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUNNLGFBQWEsQ0FBQztRQUNqRUcsT0FBTyxFQUFFLElBQUk7UUFDYkQsS0FBSyxFQUFFO01BQ1QsQ0FBQyxDQUFDO01BQ0ZILE1BQU0sQ0FBQ0wsK0JBQStCLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQ00sYUFBYSxDQUFDO1FBQ2pFSSxLQUFLLEVBQUUsSUFBSTtRQUNYQyxXQUFXLEVBQUU7TUFDZixDQUFDLENBQUM7TUFDRk4sTUFBTSxDQUFDTCwrQkFBK0IsQ0FBQyxZQUFZ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
@@ -89,8 +89,10 @@ export var AttachmentPreviewModal = function AttachmentPreviewModal(_ref) {
89
89
  if (!isOpen || !attachment) {
90
90
  setFileUrl('');
91
91
  setTextContent('');
92
- return;
92
+ return undefined;
93
93
  }
94
+ var cancelled = false;
95
+ var objectUrl = null;
94
96
  setIsLoading(true);
95
97
 
96
98
  // Determinar el tipo de archivo usando la función de utilidad
@@ -103,25 +105,29 @@ export var AttachmentPreviewModal = function AttachmentPreviewModal(_ref) {
103
105
  isExcel = _getAttachmentPreview.isExcel;
104
106
  var processFile = /*#__PURE__*/function () {
105
107
  var _ref2 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee(file, isImg, isPdfFile, isMd, isTxt, isXls) {
106
- var url, _url, reader;
108
+ var reader;
107
109
  return _regeneratorRuntime.wrap(function (_context) {
108
110
  while (1) switch (_context.prev = _context.next) {
109
111
  case 0:
110
- if (isImg) {
111
- // Para imágenes, crear URL del blob
112
- url = URL.createObjectURL(file);
113
- setFileUrl(url);
114
- setIsLoading(false);
115
- } else if (isPdfFile) {
116
- // Para PDFs, crear URL del blob
117
- _url = URL.createObjectURL(file);
118
- setFileUrl(_url);
112
+ if (!cancelled) {
113
+ _context.next = 1;
114
+ break;
115
+ }
116
+ return _context.abrupt("return");
117
+ case 1:
118
+ if (isImg || isPdfFile) {
119
+ // Para imágenes y PDFs, crear URL del blob (se revoca en el cleanup del efecto)
120
+ // Falso positivo: se revoca en el cleanup del efecto
121
+ // react-doctor-disable-next-line react-doctor/no-create-object-url-without-revoke
122
+ objectUrl = URL.createObjectURL(file);
123
+ setFileUrl(objectUrl);
119
124
  setIsLoading(false);
120
125
  } else if (isMd || isTxt) {
121
126
  // Para archivos de texto y markdown, leer el contenido
122
127
  reader = new FileReader();
123
128
  reader.onload = function (e) {
124
129
  var _e$target;
130
+ if (cancelled) return;
125
131
  var content = (_e$target = e.target) === null || _e$target === void 0 ? void 0 : _e$target.result;
126
132
  setTextContent(content);
127
133
  setIsLoading(false);
@@ -136,7 +142,7 @@ export var AttachmentPreviewModal = function AttachmentPreviewModal(_ref) {
136
142
  } else {
137
143
  setIsLoading(false);
138
144
  }
139
- case 1:
145
+ case 2:
140
146
  case "end":
141
147
  return _context.stop();
142
148
  }
@@ -218,7 +224,7 @@ export var AttachmentPreviewModal = function AttachmentPreviewModal(_ref) {
218
224
  case 10:
219
225
  _context2.prev = 10;
220
226
  _t = _context2["catch"](0);
221
- setIsLoading(false);
227
+ if (!cancelled) setIsLoading(false);
222
228
  case 11:
223
229
  case "end":
224
230
  return _context2.stop();
@@ -230,6 +236,10 @@ export var AttachmentPreviewModal = function AttachmentPreviewModal(_ref) {
230
236
  };
231
237
  }();
232
238
  loadFile();
239
+ return function () {
240
+ cancelled = true;
241
+ if (objectUrl) URL.revokeObjectURL(objectUrl);
242
+ };
233
243
  }, [isOpen, attachment]);
234
244
  var handleModalClick = function handleModalClick(e) {
235
245
  e.stopPropagation();
@@ -348,4 +358,4 @@ export var AttachmentPreviewModal = function AttachmentPreviewModal(_ref) {
348
358
  })
349
359
  }), container);
350
360
  };
351
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSZWFjdCIsInVzZVN0YXRlIiwidXNlRWZmZWN0IiwidXNlUmVmIiwiY3JlYXRlUG9ydGFsIiwiQ1VCdXR0b24iLCJDcm9zcyIsIlNwaW5uZXJMb3R0aWUiLCJ1c2VUcmFuc2xhdGlvbiIsIk1haWFTdHJlYW1kb3duIiwiQmFja2Ryb3AiLCJ1c2VNYWlhVGFza1BhbmVsWkluZGV4IiwiSW1hZ2VQcmV2aWV3IiwiRXhjZWxQcmV2aWV3IiwiV29yZFByZXZpZXciLCJQcHRQcmV2aWV3IiwiZG93bmxvYWRGaWxlRnJvbVVybCIsIlNDQVBNV3JhcHBlciIsIlNDQVBNTW9kYWwiLCJTQ0FQTUhlYWRlciIsIlNDQVBNQ29udGVudCIsIlNDQVBNSW1hZ2VDb250YWluZXIiLCJTQ0FQTVBkZkNvbnRhaW5lciIsIlNDQVBNVGV4dENvbnRhaW5lciIsIlNDQVBNTWFya2Rvd25Db250YWluZXIiLCJTQ0FQTVVuc3VwcG9ydGVkQ29udGFpbmVyIiwiU0NBUE1Mb2FkaW5nQ29udGFpbmVyIiwiU0NBUE1QZGZJZnJhbWUiLCJTQ0FQTVVuc3VwcG9ydGVkQ29udGFpbmVyVGV4dCIsIlNDQVBNRXJyb3JDb250YWluZXIiLCJTQ0FQTUVycm9yRmlsZU5hbWUiLCJFcnJvclN0YXRlIiwiYXBwZW5kRXh0ZW5zaW9uSWZNaXNzaW5nIiwiZ2V0QXR0YWNobWVudFByZXZpZXdGaWxlRGV0YWlscyIsInJlc29sdmVEb3dubG9hZE1pbWVUeXBlIiwicmVzb2x2ZVJlbW90ZUltYWdlUHJldmlld1VybCIsImpzeCIsIl9qc3giLCJqc3hzIiwiX2pzeHMiLCJBdHRhY2htZW50UHJldmlld01vZGFsIiwiX3JlZiIsImlzT3BlbiIsIm9uQ2xvc2UiLCJhdHRhY2htZW50IiwiX3VzZVRyYW5zbGF0aW9uIiwidCIsImJhY2tkcm9wWkluZGV4IiwiX3VzZVN0YXRlIiwiX3VzZVN0YXRlMiIsIl9zbGljZWRUb0FycmF5IiwiZmlsZVVybCIsInNldEZpbGVVcmwiLCJfdXNlU3RhdGUzIiwiX3VzZVN0YXRlNCIsInRleHRDb250ZW50Iiwic2V0VGV4dENvbnRlbnQiLCJfdXNlU3RhdGU1IiwiX3VzZVN0YXRlNiIsImlzTG9hZGluZyIsInNldElzTG9hZGluZyIsIm1vZGFsUmVmIiwiY29udGFpbmVyIiwiZG9jdW1lbnQiLCJnZXRFbGVtZW50QnlJZCIsIlVSTCIsInJldm9rZU9iamVjdFVSTCIsInVuZGVmaW5lZCIsImhhbmRsZUtleURvd24iLCJldmVudCIsImtleSIsImFkZEV2ZW50TGlzdGVuZXIiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwiX2RvY3VtZW50IiwiYm9keSIsIm9yaWdpbmFsT3ZlcmZsb3ciLCJzdHlsZSIsIm92ZXJmbG93IiwiX2dldEF0dGFjaG1lbnRQcmV2aWV3IiwibmFtZSIsInR5cGUiLCJmaWxlRXh0ZW5zaW9uIiwiaXNJbWFnZSIsImlzUGRmIiwiaXNNYXJrZG93biIsImlzVGV4dCIsImlzRXhjZWwiLCJwcm9jZXNzRmlsZSIsIl9yZWYyIiwiX2FzeW5jVG9HZW5lcmF0b3IiLCJfcmVnZW5lcmF0b3JSdW50aW1lIiwibWFyayIsIl9jYWxsZWUiLCJmaWxlIiwiaXNJbWciLCJpc1BkZkZpbGUiLCJpc01kIiwiaXNUeHQiLCJpc1hscyIsInVybCIsIl91cmwiLCJyZWFkZXIiLCJ3cmFwIiwiX2NvbnRleHQiLCJwcmV2IiwibmV4dCIsImNyZWF0ZU9iamVjdFVSTCIsIkZpbGVSZWFkZXIiLCJvbmxvYWQiLCJlIiwiX2UkdGFyZ2V0IiwiY29udGVudCIsInRhcmdldCIsInJlc3VsdCIsIm9uZXJyb3IiLCJyZWFkQXNUZXh0Iiwic3RvcCIsIl94IiwiX3gyIiwiX3gzIiwiX3g0IiwiX3g1IiwiX3g2IiwiYXBwbHkiLCJhcmd1bWVudHMiLCJsb2FkRmlsZSIsIl9yZWYzIiwiX2NhbGxlZTIiLCJyZW1vdGVJbWFnZVVybCIsIm1pbWVUeXBlIiwiZmlsZU5hbWVXaXRoRXh0ZW5zaW9uIiwiX2ZpbGUiLCJkb3dubG9hZGVkRmlsZURldGFpbHMiLCJkb3dubG9hZGVkRmlsZSIsIl90IiwiX2NvbnRleHQyIiwidXJsT3JpZ2luYWwiLCJ1cmxfb3JpZ2luYWwiLCJ1cmxUaHVtYm5haWwiLCJ1cmxfdGh1bWJuYWlsIiwiYWJydXB0Iiwic2VudCIsIm9yaWdpbmFsRmlsZSIsIkZpbGUiLCJzaXplIiwiaGFuZGxlTW9kYWxDbGljayIsInN0b3BQcm9wYWdhdGlvbiIsIl9nZXRBdHRhY2htZW50UHJldmlldzIiLCJpc09mZmljZURvYyIsImlzUHB0IiwiY2hpbGRyZW4iLCJvbkNsaWNrIiwiekluZGV4IiwicmVmIiwiaWNvbk9ubHkiLCJ2YXJpYW50IiwiY29sb3IiLCJoZWlnaHQiLCJ3aWR0aCIsImVycm9yIiwic3JjIiwiYWx0IiwibWF4V2lkdGgiLCJtYXhIZWlnaHQiLCJib3JkZXJSYWRpdXMiLCJiYWNrZ3JvdW5kQ29sb3IiLCJ0aXRsZSIsImZpbGVOYW1lIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvYXRvbXMvQXR0YWNobWVudFByZXZpZXdNb2RhbC9BdHRhY2htZW50UHJldmlld01vZGFsLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55ICovXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1uZXN0ZWQtdGVybmFyeSAqL1xuLyogZXNsaW50LWRpc2FibGUgaW1wb3J0L25vLWV4dHJhbmVvdXMtZGVwZW5kZW5jaWVzICovXG5pbXBvcnQgUmVhY3QsIHsgdXNlU3RhdGUsIHVzZUVmZmVjdCwgdXNlUmVmIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBjcmVhdGVQb3J0YWwgfSBmcm9tICdyZWFjdC1kb20nXG5pbXBvcnQgeyBDVUJ1dHRvbiB9IGZyb20gJ0Bwcm9qZWN0Y29yL2J1dHRvbi9saWIvY29tcG9uZW50cy9DVUJ1dHRvbidcbmltcG9ydCB7IENyb3NzIH0gZnJvbSAnQHByb2plY3Rjb3IvaWNvbnMvbGliL2NvbXBvbmVudHMvQ3Jvc3MnXG5pbXBvcnQgeyBTcGlubmVyTG90dGllIH0gZnJvbSAnQHByb2plY3Rjb3IvY29yLWNvbW1vbnMvbGliL2NvbXBvbmVudHMvc3Bpbm5lci1sb3R0aWUvU3Bpbm5lckxvdHRpZSdcbmltcG9ydCB7IHVzZVRyYW5zbGF0aW9uIH0gZnJvbSAncmVhY3QtaTE4bmV4dCdcbmltcG9ydCB7IE1haWFTdHJlYW1kb3duIH0gZnJvbSAnLi4vTWFpYVN0cmVhbWRvd24nXG5pbXBvcnQgeyBCYWNrZHJvcCB9IGZyb20gJy4uL0JhY2tkcm9wJ1xuaW1wb3J0IHsgdXNlTWFpYVRhc2tQYW5lbFpJbmRleCB9IGZyb20gJy4uLy4uLy4uL2hvb2tzL3VzZU1haWFUYXNrUGFuZWxaSW5kZXgnXG5pbXBvcnQgeyBBdHRhY2htZW50RmlsZSB9IGZyb20gJy4uLy4uL21vbGVjdWxlcy9DaGF0Rm9vdGVyL0NoYXRGb290ZXInXG5pbXBvcnQgeyBJbWFnZVByZXZpZXcgfSBmcm9tICcuLi9JbWFnZVByZXZpZXcvSW1hZ2VQcmV2aWV3J1xuaW1wb3J0IHsgRXhjZWxQcmV2aWV3IH0gZnJvbSAnLi9FeGNlbFByZXZpZXcnXG5pbXBvcnQgeyBXb3JkUHJldmlldyB9IGZyb20gJy4vV29yZFByZXZpZXcnXG5pbXBvcnQgeyBQcHRQcmV2aWV3IH0gZnJvbSAnLi9QcHRQcmV2aWV3J1xuaW1wb3J0IHsgZG93bmxvYWRGaWxlRnJvbVVybCB9IGZyb20gJy4uLy4uLy4uL3V0aWxzL2ZpbGVEb3dubG9hZEhlbHBlcidcbmltcG9ydCB7XG4gIFNDQVBNV3JhcHBlcixcbiAgU0NBUE1Nb2RhbCxcbiAgU0NBUE1IZWFkZXIsXG4gIFNDQVBNQ29udGVudCxcbiAgU0NBUE1JbWFnZUNvbnRhaW5lcixcbiAgU0NBUE1QZGZDb250YWluZXIsXG4gIFNDQVBNVGV4dENvbnRhaW5lcixcbiAgU0NBUE1NYXJrZG93bkNvbnRhaW5lcixcbiAgU0NBUE1VbnN1cHBvcnRlZENvbnRhaW5lcixcbiAgU0NBUE1Mb2FkaW5nQ29udGFpbmVyLFxuICBTQ0FQTVBkZklmcmFtZSxcbiAgU0NBUE1VbnN1cHBvcnRlZENvbnRhaW5lclRleHQsXG4gIFNDQVBNRXJyb3JDb250YWluZXIsXG4gIFNDQVBNRXJyb3JGaWxlTmFtZSxcbn0gZnJvbSAnLi9BdHRhY2htZW50UHJldmlld01vZGFsLnN0eWxlcydcbmltcG9ydCB7IEVycm9yU3RhdGUgfSBmcm9tICcuLi9pY29ucy9FcnJvclN0YXRlJ1xuaW1wb3J0IHtcbiAgYXBwZW5kRXh0ZW5zaW9uSWZNaXNzaW5nLFxuICBnZXRBdHRhY2htZW50UHJldmlld0ZpbGVEZXRhaWxzLFxuICByZXNvbHZlRG93bmxvYWRNaW1lVHlwZSxcbiAgcmVzb2x2ZVJlbW90ZUltYWdlUHJldmlld1VybCxcbn0gZnJvbSAnLi9BdHRhY2htZW50UHJldmlld01vZGFsLmhlbHBlcnMnXG5cbnR5cGUgQXR0YWNobWVudFByZXZpZXdNb2RhbFByb3BzID0ge1xuICBpc09wZW46IGJvb2xlYW5cbiAgb25DbG9zZTogKCkgPT4gdm9pZFxuICBhdHRhY2htZW50OiBBdHRhY2htZW50RmlsZSB8IG51bGxcbn1cblxuZXhwb3J0IGNvbnN0IEF0dGFjaG1lbnRQcmV2aWV3TW9kYWwgPSAoeyBpc09wZW4sIG9uQ2xvc2UsIGF0dGFjaG1lbnQgfTogQXR0YWNobWVudFByZXZpZXdNb2RhbFByb3BzKSA9PiB7XG4gIGNvbnN0IHsgdCB9ID0gdXNlVHJhbnNsYXRpb24oWydjaGF0X2FpX3NlY3Rpb24nXSlcbiAgY29uc3QgYmFja2Ryb3BaSW5kZXggPSB1c2VNYWlhVGFza1BhbmVsWkluZGV4KDExMTEyLCAnbmVzdGVkTW9kYWwnKVxuICBjb25zdCBbZmlsZVVybCwgc2V0RmlsZVVybF0gPSB1c2VTdGF0ZTxzdHJpbmc+KCcnKVxuICBjb25zdCBbdGV4dENvbnRlbnQsIHNldFRleHRDb250ZW50XSA9IHVzZVN0YXRlPHN0cmluZz4oJycpXG4gIGNvbnN0IFtpc0xvYWRpbmcsIHNldElzTG9hZGluZ10gPSB1c2VTdGF0ZShmYWxzZSlcbiAgY29uc3QgbW9kYWxSZWYgPSB1c2VSZWY8SFRNTERpdkVsZW1lbnQ+KG51bGwpXG4gIGNvbnN0IGNvbnRhaW5lciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtb2RhbC1yb290LWFjdGlvbnMnKVxuXG4gIC8vIENsZWFudXAgZGUgVVJMcyBjdWFuZG8gZWwgY29tcG9uZW50ZSBzZSBkZXNtb250ZSBvIGNhbWJpZSBlbCBhcmNoaXZvXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGlmIChmaWxlVXJsKSB7XG4gICAgICAgIFVSTC5yZXZva2VPYmplY3RVUkwoZmlsZVVybClcbiAgICAgIH1cbiAgICB9XG4gIH0sIFtmaWxlVXJsXSlcblxuICAvLyBMaXN0ZW5lciBwYXJhIGNlcnJhciBlbCBtb2RhbCBjb24gbGEgdGVjbGEgRVNDXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFpc09wZW4pIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWRcbiAgICB9XG5cbiAgICBjb25zdCBoYW5kbGVLZXlEb3duID0gKGV2ZW50OiBLZXlib2FyZEV2ZW50KSA9PiB7XG4gICAgICBpZiAoZXZlbnQua2V5ID09PSAnRXNjYXBlJyB8fCBldmVudC5rZXkgPT09ICdFc2MnKSB7XG4gICAgICAgIG9uQ2xvc2UoKVxuICAgICAgfVxuICAgIH1cblxuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCBoYW5kbGVLZXlEb3duKVxuXG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCBoYW5kbGVLZXlEb3duKVxuICAgIH1cbiAgfSwgW2lzT3Blbiwgb25DbG9zZV0pXG5cbiAgLy8gUHJldmVuaXIgc2Nyb2xsIGRlbCBib2R5IGN1YW5kbyBlbCBtb2RhbCBlc3TDoSBhYmllcnRvXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFpc09wZW4pIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWRcbiAgICB9XG5cbiAgICBjb25zdCB7IGJvZHkgfSA9IGRvY3VtZW50XG4gICAgaWYgKCFib2R5KSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkXG4gICAgfVxuXG4gICAgY29uc3Qgb3JpZ2luYWxPdmVyZmxvdyA9IGJvZHkuc3R5bGUub3ZlcmZsb3dcbiAgICBib2R5LnN0eWxlLm92ZXJmbG93ID0gJ2hpZGRlbidcblxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBib2R5LnN0eWxlLm92ZXJmbG93ID0gb3JpZ2luYWxPdmVyZmxvd1xuICAgIH1cbiAgfSwgW2lzT3Blbl0pXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoIWlzT3BlbiB8fCAhYXR0YWNobWVudCkge1xuICAgICAgc2V0RmlsZVVybCgnJylcbiAgICAgIHNldFRleHRDb250ZW50KCcnKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgc2V0SXNMb2FkaW5nKHRydWUpXG5cbiAgICAvLyBEZXRlcm1pbmFyIGVsIHRpcG8gZGUgYXJjaGl2byB1c2FuZG8gbGEgZnVuY2nDs24gZGUgdXRpbGlkYWRcbiAgICBjb25zdCB7IGZpbGVFeHRlbnNpb24sIGlzSW1hZ2UsIGlzUGRmLCBpc01hcmtkb3duLCBpc1RleHQsIGlzRXhjZWwgfSA9IGdldEF0dGFjaG1lbnRQcmV2aWV3RmlsZURldGFpbHMoXG4gICAgICBhdHRhY2htZW50Lm5hbWUsXG4gICAgICBhdHRhY2htZW50LnR5cGVcbiAgICApXG5cbiAgICBjb25zdCBwcm9jZXNzRmlsZSA9IGFzeW5jIChcbiAgICAgIGZpbGU6IEZpbGUsXG4gICAgICBpc0ltZzogYm9vbGVhbixcbiAgICAgIGlzUGRmRmlsZTogYm9vbGVhbixcbiAgICAgIGlzTWQ6IGJvb2xlYW4sXG4gICAgICBpc1R4dDogYm9vbGVhbixcbiAgICAgIGlzWGxzOiBib29sZWFuXG4gICAgKSA9PiB7XG4gICAgICBpZiAoaXNJbWcpIHtcbiAgICAgICAgLy8gUGFyYSBpbcOhZ2VuZXMsIGNyZWFyIFVSTCBkZWwgYmxvYlxuICAgICAgICBjb25zdCB1cmwgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKGZpbGUpXG4gICAgICAgIHNldEZpbGVVcmwodXJsKVxuICAgICAgICBzZXRJc0xvYWRpbmcoZmFsc2UpXG4gICAgICB9IGVsc2UgaWYgKGlzUGRmRmlsZSkge1xuICAgICAgICAvLyBQYXJhIFBERnMsIGNyZWFyIFVSTCBkZWwgYmxvYlxuICAgICAgICBjb25zdCB1cmwgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKGZpbGUpXG4gICAgICAgIHNldEZpbGVVcmwodXJsKVxuICAgICAgICBzZXRJc0xvYWRpbmcoZmFsc2UpXG4gICAgICB9IGVsc2UgaWYgKGlzTWQgfHwgaXNUeHQpIHtcbiAgICAgICAgLy8gUGFyYSBhcmNoaXZvcyBkZSB0ZXh0byB5IG1hcmtkb3duLCBsZWVyIGVsIGNvbnRlbmlkb1xuICAgICAgICBjb25zdCByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpXG4gICAgICAgIHJlYWRlci5vbmxvYWQgPSBlID0+IHtcbiAgICAgICAgICBjb25zdCBjb250ZW50ID0gZS50YXJnZXQ/LnJlc3VsdCBhcyBzdHJpbmdcbiAgICAgICAgICBzZXRUZXh0Q29udGVudChjb250ZW50KVxuICAgICAgICAgIHNldElzTG9hZGluZyhmYWxzZSlcbiAgICAgICAgfVxuICAgICAgICByZWFkZXIub25lcnJvciA9ICgpID0+IHtcbiAgICAgICAgICBzZXRJc0xvYWRpbmcoZmFsc2UpXG4gICAgICAgIH1cbiAgICAgICAgcmVhZGVyLnJlYWRBc1RleHQoZmlsZSlcbiAgICAgIH0gZWxzZSBpZiAoaXNYbHMpIHtcbiAgICAgICAgLy8gUGFyYSBhcmNoaXZvcyBFeGNlbCwgZWwgY29tcG9uZW50ZSBFeGNlbFByZXZpZXcgbWFuZWphcsOhIGxhIGNhcmdhXG4gICAgICAgIHNldElzTG9hZGluZyhmYWxzZSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNldElzTG9hZGluZyhmYWxzZSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBsb2FkRmlsZSA9IGFzeW5jICgpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIC8vIFNpIGVzIGltYWdlbiwgdXNhciB1cmxfb3JpZ2luYWwgZGlyZWN0YW1lbnRlIChzaWVtcHJlIHZpZW5lIGRlbCBiYWNrZW5kKVxuICAgICAgICAvLyBTaSBubyB0aWVuZSB1cmxfb3JpZ2luYWwsIHVzYXIgdXJsX3RodW1ibmFpbCBjb21vIGZhbGxiYWNrXG4gICAgICAgIGlmIChpc0ltYWdlKSB7XG4gICAgICAgICAgY29uc3QgcmVtb3RlSW1hZ2VVcmwgPSByZXNvbHZlUmVtb3RlSW1hZ2VQcmV2aWV3VXJsKHtcbiAgICAgICAgICAgIHVybE9yaWdpbmFsOiBhdHRhY2htZW50LnVybF9vcmlnaW5hbCxcbiAgICAgICAgICAgIHVybFRodW1ibmFpbDogYXR0YWNobWVudC51cmxfdGh1bWJuYWlsLFxuICAgICAgICAgIH0pXG4gICAgICAgICAgaWYgKHJlbW90ZUltYWdlVXJsKSB7XG4gICAgICAgICAgICBzZXRGaWxlVXJsKHJlbW90ZUltYWdlVXJsKVxuICAgICAgICAgICAgc2V0SXNMb2FkaW5nKGZhbHNlKVxuICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gU2kgdGllbmUgdXJsX29yaWdpbmFsIGRlbCBiYWNrZW5kIChwYXJhIGFyY2hpdm9zIG5vLWltYWdlbiksIGRlc2NhcmdhciBlbCBhcmNoaXZvXG4gICAgICAgIC8vIHVybF9vcmlnaW5hbCBhaG9yYSB2aWVuZSBwYXJhIHRvZG9zIGxvcyBhcmNoaXZvcyBkZWwgYmFja2VuZFxuICAgICAgICBpZiAoYXR0YWNobWVudC51cmxfb3JpZ2luYWwpIHtcbiAgICAgICAgICBjb25zdCBtaW1lVHlwZSA9IHJlc29sdmVEb3dubG9hZE1pbWVUeXBlKGF0dGFjaG1lbnQudHlwZSwgZmlsZUV4dGVuc2lvbikgfHwgYXR0YWNobWVudC50eXBlXG4gICAgICAgICAgY29uc3QgZmlsZU5hbWVXaXRoRXh0ZW5zaW9uID0gYXBwZW5kRXh0ZW5zaW9uSWZNaXNzaW5nKGF0dGFjaG1lbnQubmFtZSwgZmlsZUV4dGVuc2lvbilcblxuICAgICAgICAgIGNvbnN0IGZpbGUgPSBhd2FpdCBkb3dubG9hZEZpbGVGcm9tVXJsKGF0dGFjaG1lbnQudXJsX29yaWdpbmFsLCBmaWxlTmFtZVdpdGhFeHRlbnNpb24sIG1pbWVUeXBlKVxuXG4gICAgICAgICAgLy8gUmUtZGV0ZWN0YXIgZWwgdGlwbyBkZSBhcmNoaXZvIGRlc3B1w6lzIGRlIGRlc2NhcmdhciAoZWwgYXJjaGl2byBkZXNjYXJnYWRvIHB1ZWRlIHRlbmVyIG1lam9yIGluZm9ybWFjacOzbilcbiAgICAgICAgICAvLyBVc2FyIGxhIGZ1bmNpw7NuIGRlIHV0aWxpZGFkIHBhcmEgb2J0ZW5lciBsb3MgZGV0YWxsZXMgZGVsIGFyY2hpdm8gZGVzY2FyZ2Fkb1xuICAgICAgICAgIC8vIFNpIG5vIGhheSBleHRlbnNpw7NuIGVuIGVsIGFyY2hpdm8gZGVzY2FyZ2FkbywgdXNhciBlbCB0aXBvIE1JTUUgZGVsIGFyY2hpdm8gbyBkZWwgYXR0YWNobWVudFxuICAgICAgICAgIGNvbnN0IGRvd25sb2FkZWRGaWxlRGV0YWlscyA9IGdldEF0dGFjaG1lbnRQcmV2aWV3RmlsZURldGFpbHMoZmlsZS5uYW1lLCBmaWxlLnR5cGUgfHwgYXR0YWNobWVudC50eXBlKVxuXG4gICAgICAgICAgYXdhaXQgcHJvY2Vzc0ZpbGUoXG4gICAgICAgICAgICBmaWxlLFxuICAgICAgICAgICAgZG93bmxvYWRlZEZpbGVEZXRhaWxzLmlzSW1hZ2UsXG4gICAgICAgICAgICBkb3dubG9hZGVkRmlsZURldGFpbHMuaXNQZGYsXG4gICAgICAgICAgICBkb3dubG9hZGVkRmlsZURldGFpbHMuaXNNYXJrZG93bixcbiAgICAgICAgICAgIGRvd25sb2FkZWRGaWxlRGV0YWlscy5pc1RleHQsXG4gICAgICAgICAgICBkb3dubG9hZGVkRmlsZURldGFpbHMuaXNFeGNlbFxuICAgICAgICAgIClcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIE9idGVuZXIgZWwgYXJjaGl2byBsb2NhbCAocHJlZmVyaXIgb3JpZ2luYWxGaWxlIHBhcmEgaW3DoWdlbmVzKVxuICAgICAgICBjb25zdCBmaWxlID0gYXR0YWNobWVudC5vcmlnaW5hbEZpbGUgfHwgYXR0YWNobWVudC5maWxlXG5cbiAgICAgICAgLy8gU2kgZWwgYXJjaGl2byBsb2NhbCBlc3TDoSB2YWPDrW8gKHNpemUgPT09IDApIHkgdGVuZW1vcyB1cmxfb3JpZ2luYWwsIHVzYXIgdXJsX29yaWdpbmFsXG4gICAgICAgIGlmIChmaWxlIGluc3RhbmNlb2YgRmlsZSAmJiBmaWxlLnNpemUgPT09IDAgJiYgYXR0YWNobWVudC51cmxfb3JpZ2luYWwpIHtcbiAgICAgICAgICBjb25zdCBkb3dubG9hZGVkRmlsZSA9IGF3YWl0IGRvd25sb2FkRmlsZUZyb21VcmwoYXR0YWNobWVudC51cmxfb3JpZ2luYWwsIGF0dGFjaG1lbnQubmFtZSwgYXR0YWNobWVudC50eXBlKVxuICAgICAgICAgIGF3YWl0IHByb2Nlc3NGaWxlKGRvd25sb2FkZWRGaWxlLCBpc0ltYWdlLCBpc1BkZiwgaXNNYXJrZG93biwgaXNUZXh0LCBpc0V4Y2VsKVxuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCEoZmlsZSBpbnN0YW5jZW9mIEZpbGUpKSB7XG4gICAgICAgICAgc2V0SXNMb2FkaW5nKGZhbHNlKVxuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG5cbiAgICAgICAgYXdhaXQgcHJvY2Vzc0ZpbGUoZmlsZSwgaXNJbWFnZSwgaXNQZGYsIGlzTWFya2Rvd24sIGlzVGV4dCwgaXNFeGNlbClcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIHNldElzTG9hZGluZyhmYWxzZSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICBsb2FkRmlsZSgpXG4gIH0sIFtpc09wZW4sIGF0dGFjaG1lbnRdKVxuXG4gIGNvbnN0IGhhbmRsZU1vZGFsQ2xpY2sgPSAoZTogUmVhY3QuTW91c2VFdmVudCkgPT4ge1xuICAgIGUuc3RvcFByb3BhZ2F0aW9uKClcbiAgfVxuXG4gIGlmICghaXNPcGVuIHx8ICFhdHRhY2htZW50IHx8ICFjb250YWluZXIpIHJldHVybiBudWxsXG5cbiAgLy8gVXNhciBsYSBmdW5jacOzbiBkZSB1dGlsaWRhZCBwYXJhIG9idGVuZXIgbG9zIGRldGFsbGVzIGRlbCBhcmNoaXZvXG4gIGNvbnN0IHsgaXNJbWFnZSwgaXNQZGYsIGlzTWFya2Rvd24sIGlzVGV4dCwgaXNFeGNlbCwgaXNPZmZpY2VEb2MsIGlzUHB0IH0gPSBnZXRBdHRhY2htZW50UHJldmlld0ZpbGVEZXRhaWxzKFxuICAgIGF0dGFjaG1lbnQubmFtZSxcbiAgICBhdHRhY2htZW50LnR5cGVcbiAgKVxuXG4gIHJldHVybiBjcmVhdGVQb3J0YWwoXG4gICAgPFNDQVBNV3JhcHBlcj5cbiAgICAgIDxCYWNrZHJvcCBvbkNsaWNrPXtvbkNsb3NlfSB6SW5kZXg9e2JhY2tkcm9wWkluZGV4fT5cbiAgICAgICAgPFNDQVBNTW9kYWwgcmVmPXttb2RhbFJlZn0gb25DbGljaz17aGFuZGxlTW9kYWxDbGlja30+XG4gICAgICAgICAgPFNDQVBNSGVhZGVyPlxuICAgICAgICAgICAgPENVQnV0dG9uIGljb25Pbmx5IHZhcmlhbnQ9XCJ0ZXh0XCIgc2l6ZT1cInNtYWxsXCIgb25DbGljaz17b25DbG9zZX0+XG4gICAgICAgICAgICAgIDxDcm9zcyBjb2xvcj1cIiM2NjY2NjZcIiBoZWlnaHQ9ezIyfSB3aWR0aD17MjJ9IC8+XG4gICAgICAgICAgICA8L0NVQnV0dG9uPlxuICAgICAgICAgIDwvU0NBUE1IZWFkZXI+XG4gICAgICAgICAgPFNDQVBNQ29udGVudFxuICAgICAgICAgICAgaXNJbWFnZT17aXNJbWFnZX1cbiAgICAgICAgICAgIGVycm9yPXshaXNMb2FkaW5nICYmICFpc0ltYWdlICYmICFpc1BkZiAmJiAhaXNNYXJrZG93biAmJiAhaXNUZXh0ICYmICFpc0V4Y2VsICYmICFpc09mZmljZURvYyAmJiAhaXNQcHR9XG4gICAgICAgICAgPlxuICAgICAgICAgICAge2lzTG9hZGluZyAmJiAoXG4gICAgICAgICAgICAgIDxTQ0FQTUxvYWRpbmdDb250YWluZXI+XG4gICAgICAgICAgICAgICAgPFNwaW5uZXJMb3R0aWUgc2l6ZT17NDh9IC8+XG4gICAgICAgICAgICAgIDwvU0NBUE1Mb2FkaW5nQ29udGFpbmVyPlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIHshaXNMb2FkaW5nICYmIGlzSW1hZ2UgJiYgKFxuICAgICAgICAgICAgICA8U0NBUE1JbWFnZUNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8SW1hZ2VQcmV2aWV3XG4gICAgICAgICAgICAgICAgICBzcmM9e2ZpbGVVcmx9XG4gICAgICAgICAgICAgICAgICBhbHQ9e2F0dGFjaG1lbnQubmFtZX1cbiAgICAgICAgICAgICAgICAgIG1heFdpZHRoPVwiMTAwJVwiXG4gICAgICAgICAgICAgICAgICBtYXhIZWlnaHQ9XCIxMDAlXCJcbiAgICAgICAgICAgICAgICAgIGJvcmRlclJhZGl1cz1cIjhweFwiXG4gICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I9XCJ0cmFuc3BhcmVudFwiXG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgPC9TQ0FQTUltYWdlQ29udGFpbmVyPlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIHshaXNMb2FkaW5nICYmIGlzUGRmICYmIChcbiAgICAgICAgICAgICAgPFNDQVBNUGRmQ29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDxTQ0FQTVBkZklmcmFtZSBzcmM9e2ZpbGVVcmx9IHRpdGxlPXthdHRhY2htZW50Lm5hbWV9IC8+XG4gICAgICAgICAgICAgIDwvU0NBUE1QZGZDb250YWluZXI+XG4gICAgICAgICAgICApfVxuICAgICAgICAgICAgeyFpc0xvYWRpbmcgJiYgaXNNYXJrZG93biAmJiAoXG4gICAgICAgICAgICAgIDxTQ0FQTU1hcmtkb3duQ29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDxNYWlhU3RyZWFtZG93biB2YXJpYW50PVwiY29tcGFjdFwiPnt0ZXh0Q29udGVudH08L01haWFTdHJlYW1kb3duPlxuICAgICAgICAgICAgICA8L1NDQVBNTWFya2Rvd25Db250YWluZXI+XG4gICAgICAgICAgICApfVxuICAgICAgICAgICAgeyFpc0xvYWRpbmcgJiYgaXNUZXh0ICYmIChcbiAgICAgICAgICAgICAgPFNDQVBNVGV4dENvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8cHJlPnt0ZXh0Q29udGVudH08L3ByZT5cbiAgICAgICAgICAgICAgPC9TQ0FQTVRleHRDb250YWluZXI+XG4gICAgICAgICAgICApfVxuICAgICAgICAgICAgeyFpc0xvYWRpbmcgJiZcbiAgICAgICAgICAgICAgaXNFeGNlbCAmJlxuICAgICAgICAgICAgICAoKCkgPT4ge1xuICAgICAgICAgICAgICAgIC8vIFNpIHRpZW5lIHVybF9vcmlnaW5hbCwgRXhjZWxQcmV2aWV3IG1hbmVqYXLDoSBsYSBkZXNjYXJnYVxuICAgICAgICAgICAgICAgIGlmIChhdHRhY2htZW50LnVybF9vcmlnaW5hbCkge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIDxFeGNlbFByZXZpZXcgZmlsZVVybD17YXR0YWNobWVudC51cmxfb3JpZ2luYWx9IGZpbGVOYW1lPXthdHRhY2htZW50Lm5hbWV9IC8+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IGZpbGUgPSBhdHRhY2htZW50Lm9yaWdpbmFsRmlsZSB8fCBhdHRhY2htZW50LmZpbGVcbiAgICAgICAgICAgICAgICBpZiAoIShmaWxlIGluc3RhbmNlb2YgRmlsZSkpIHJldHVybiBudWxsXG4gICAgICAgICAgICAgICAgcmV0dXJuIDxFeGNlbFByZXZpZXcgZmlsZT17ZmlsZX0gZmlsZU5hbWU9e2F0dGFjaG1lbnQubmFtZX0gLz5cbiAgICAgICAgICAgICAgfSkoKX1cbiAgICAgICAgICAgIHshaXNMb2FkaW5nICYmXG4gICAgICAgICAgICAgIGlzT2ZmaWNlRG9jICYmXG4gICAgICAgICAgICAgICgoKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGF0dGFjaG1lbnQudXJsX29yaWdpbmFsKSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gPFdvcmRQcmV2aWV3IGZpbGVVcmw9e2F0dGFjaG1lbnQudXJsX29yaWdpbmFsfSBmaWxlTmFtZT17YXR0YWNobWVudC5uYW1lfSAvPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBmaWxlID0gYXR0YWNobWVudC5vcmlnaW5hbEZpbGUgfHwgYXR0YWNobWVudC5maWxlXG4gICAgICAgICAgICAgICAgaWYgKCEoZmlsZSBpbnN0YW5jZW9mIEZpbGUpKSByZXR1cm4gbnVsbFxuICAgICAgICAgICAgICAgIHJldHVybiA8V29yZFByZXZpZXcgZmlsZT17ZmlsZX0gZmlsZU5hbWU9e2F0dGFjaG1lbnQubmFtZX0gLz5cbiAgICAgICAgICAgICAgfSkoKX1cbiAgICAgICAgICAgIHshaXNMb2FkaW5nICYmXG4gICAgICAgICAgICAgIGlzUHB0ICYmXG4gICAgICAgICAgICAgICgoKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGF0dGFjaG1lbnQudXJsX29yaWdpbmFsKSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gPFBwdFByZXZpZXcgZmlsZVVybD17YXR0YWNobWVudC51cmxfb3JpZ2luYWx9IGZpbGVOYW1lPXthdHRhY2htZW50Lm5hbWV9IC8+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IGZpbGUgPSBhdHRhY2htZW50Lm9yaWdpbmFsRmlsZSB8fCBhdHRhY2htZW50LmZpbGVcbiAgICAgICAgICAgICAgICBpZiAoIShmaWxlIGluc3RhbmNlb2YgRmlsZSkpIHJldHVybiBudWxsXG4gICAgICAgICAgICAgICAgcmV0dXJuIDxQcHRQcmV2aWV3IGZpbGU9e2ZpbGV9IGZpbGVOYW1lPXthdHRhY2htZW50Lm5hbWV9IC8+XG4gICAgICAgICAgICAgIH0pKCl9XG4gICAgICAgICAgICB7IWlzTG9hZGluZyAmJiAhaXNJbWFnZSAmJiAhaXNQZGYgJiYgIWlzTWFya2Rvd24gJiYgIWlzVGV4dCAmJiAhaXNFeGNlbCAmJiAhaXNPZmZpY2VEb2MgJiYgIWlzUHB0ICYmIChcbiAgICAgICAgICAgICAgPFNDQVBNRXJyb3JDb250YWluZXI+XG4gICAgICAgICAgICAgICAgPFNDQVBNVW5zdXBwb3J0ZWRDb250YWluZXI+XG4gICAgICAgICAgICAgICAgICA8RXJyb3JTdGF0ZSAvPlxuICAgICAgICAgICAgICAgICAgPFNDQVBNVW5zdXBwb3J0ZWRDb250YWluZXJUZXh0PlxuICAgICAgICAgICAgICAgICAgICB7dCgnY2hhdC5hdHRhY2htZW50UHJldmlld01vZGFsLnVuc3VwcG9ydGVkRmlsZU1lc3NhZ2UnKX1cbiAgICAgICAgICAgICAgICAgIDwvU0NBUE1VbnN1cHBvcnRlZENvbnRhaW5lclRleHQ+XG4gICAgICAgICAgICAgICAgPC9TQ0FQTVVuc3VwcG9ydGVkQ29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDxTQ0FQTUVycm9yRmlsZU5hbWU+e2F0dGFjaG1lbnQubmFtZX08L1NDQVBNRXJyb3JGaWxlTmFtZT5cbiAgICAgICAgICAgICAgPC9TQ0FQTUVycm9yQ29udGFpbmVyPlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICA8L1NDQVBNQ29udGVudD5cbiAgICAgICAgPC9TQ0FQTU1vZGFsPlxuICAgICAgPC9CYWNrZHJvcD5cbiAgICA8L1NDQVBNV3JhcHBlcj4sXG4gICAgY29udGFpbmVyXG4gIClcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7O0FBQUE7QUFDQTtBQUNBO0FBQ0EsT0FBT0EsS0FBSyxJQUFJQyxRQUFRLEVBQUVDLFNBQVMsRUFBRUMsTUFBTSxRQUFRLE9BQU87QUFDMUQsU0FBU0MsWUFBWSxRQUFRLFdBQVc7QUFDeEMsU0FBU0MsUUFBUSxRQUFRLDRDQUE0QztBQUNyRSxTQUFTQyxLQUFLLFFB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
361
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSZWFjdCIsInVzZVN0YXRlIiwidXNlRWZmZWN0IiwidXNlUmVmIiwiY3JlYXRlUG9ydGFsIiwiQ1VCdXR0b24iLCJDcm9zcyIsIlNwaW5uZXJMb3R0aWUiLCJ1c2VUcmFuc2xhdGlvbiIsIk1haWFTdHJlYW1kb3duIiwiQmFja2Ryb3AiLCJ1c2VNYWlhVGFza1BhbmVsWkluZGV4IiwiSW1hZ2VQcmV2aWV3IiwiRXhjZWxQcmV2aWV3IiwiV29yZFByZXZpZXciLCJQcHRQcmV2aWV3IiwiZG93bmxvYWRGaWxlRnJvbVVybCIsIlNDQVBNV3JhcHBlciIsIlNDQVBNTW9kYWwiLCJTQ0FQTUhlYWRlciIsIlNDQVBNQ29udGVudCIsIlNDQVBNSW1hZ2VDb250YWluZXIiLCJTQ0FQTVBkZkNvbnRhaW5lciIsIlNDQVBNVGV4dENvbnRhaW5lciIsIlNDQVBNTWFya2Rvd25Db250YWluZXIiLCJTQ0FQTVVuc3VwcG9ydGVkQ29udGFpbmVyIiwiU0NBUE1Mb2FkaW5nQ29udGFpbmVyIiwiU0NBUE1QZGZJZnJhbWUiLCJTQ0FQTVVuc3VwcG9ydGVkQ29udGFpbmVyVGV4dCIsIlNDQVBNRXJyb3JDb250YWluZXIiLCJTQ0FQTUVycm9yRmlsZU5hbWUiLCJFcnJvclN0YXRlIiwiYXBwZW5kRXh0ZW5zaW9uSWZNaXNzaW5nIiwiZ2V0QXR0YWNobWVudFByZXZpZXdGaWxlRGV0YWlscyIsInJlc29sdmVEb3dubG9hZE1pbWVUeXBlIiwicmVzb2x2ZVJlbW90ZUltYWdlUHJldmlld1VybCIsImpzeCIsIl9qc3giLCJqc3hzIiwiX2pzeHMiLCJBdHRhY2htZW50UHJldmlld01vZGFsIiwiX3JlZiIsImlzT3BlbiIsIm9uQ2xvc2UiLCJhdHRhY2htZW50IiwiX3VzZVRyYW5zbGF0aW9uIiwidCIsImJhY2tkcm9wWkluZGV4IiwiX3VzZVN0YXRlIiwiX3VzZVN0YXRlMiIsIl9zbGljZWRUb0FycmF5IiwiZmlsZVVybCIsInNldEZpbGVVcmwiLCJfdXNlU3RhdGUzIiwiX3VzZVN0YXRlNCIsInRleHRDb250ZW50Iiwic2V0VGV4dENvbnRlbnQiLCJfdXNlU3RhdGU1IiwiX3VzZVN0YXRlNiIsImlzTG9hZGluZyIsInNldElzTG9hZGluZyIsIm1vZGFsUmVmIiwiY29udGFpbmVyIiwiZG9jdW1lbnQiLCJnZXRFbGVtZW50QnlJZCIsIlVSTCIsInJldm9rZU9iamVjdFVSTCIsInVuZGVmaW5lZCIsImhhbmRsZUtleURvd24iLCJldmVudCIsImtleSIsImFkZEV2ZW50TGlzdGVuZXIiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwiX2RvY3VtZW50IiwiYm9keSIsIm9yaWdpbmFsT3ZlcmZsb3ciLCJzdHlsZSIsIm92ZXJmbG93IiwiY2FuY2VsbGVkIiwib2JqZWN0VXJsIiwiX2dldEF0dGFjaG1lbnRQcmV2aWV3IiwibmFtZSIsInR5cGUiLCJmaWxlRXh0ZW5zaW9uIiwiaXNJbWFnZSIsImlzUGRmIiwiaXNNYXJrZG93biIsImlzVGV4dCIsImlzRXhjZWwiLCJwcm9jZXNzRmlsZSIsIl9yZWYyIiwiX2FzeW5jVG9HZW5lcmF0b3IiLCJfcmVnZW5lcmF0b3JSdW50aW1lIiwibWFyayIsIl9jYWxsZWUiLCJmaWxlIiwiaXNJbWciLCJpc1BkZkZpbGUiLCJpc01kIiwiaXNUeHQiLCJpc1hscyIsInJlYWRlciIsIndyYXAiLCJfY29udGV4dCIsInByZXYiLCJuZXh0IiwiYWJydXB0IiwiY3JlYXRlT2JqZWN0VVJMIiwiRmlsZVJlYWRlciIsIm9ubG9hZCIsImUiLCJfZSR0YXJnZXQiLCJjb250ZW50IiwidGFyZ2V0IiwicmVzdWx0Iiwib25lcnJvciIsInJlYWRBc1RleHQiLCJzdG9wIiwiX3giLCJfeDIiLCJfeDMiLCJfeDQiLCJfeDUiLCJfeDYiLCJhcHBseSIsImFyZ3VtZW50cyIsImxvYWRGaWxlIiwiX3JlZjMiLCJfY2FsbGVlMiIsInJlbW90ZUltYWdlVXJsIiwibWltZVR5cGUiLCJmaWxlTmFtZVdpdGhFeHRlbnNpb24iLCJfZmlsZSIsImRvd25sb2FkZWRGaWxlRGV0YWlscyIsImRvd25sb2FkZWRGaWxlIiwiX3QiLCJfY29udGV4dDIiLCJ1cmxPcmlnaW5hbCIsInVybF9vcmlnaW5hbCIsInVybFRodW1ibmFpbCIsInVybF90aHVtYm5haWwiLCJzZW50Iiwib3JpZ2luYWxGaWxlIiwiRmlsZSIsInNpemUiLCJoYW5kbGVNb2RhbENsaWNrIiwic3RvcFByb3BhZ2F0aW9uIiwiX2dldEF0dGFjaG1lbnRQcmV2aWV3MiIsImlzT2ZmaWNlRG9jIiwiaXNQcHQiLCJjaGlsZHJlbiIsIm9uQ2xpY2siLCJ6SW5kZXgiLCJyZWYiLCJpY29uT25seSIsInZhcmlhbnQiLCJjb2xvciIsImhlaWdodCIsIndpZHRoIiwiZXJyb3IiLCJzcmMiLCJhbHQiLCJtYXhXaWR0aCIsIm1heEhlaWdodCIsImJvcmRlclJhZGl1cyIsImJhY2tncm91bmRDb2xvciIsInRpdGxlIiwiZmlsZU5hbWUiXSwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50cy9hdG9tcy9BdHRhY2htZW50UHJldmlld01vZGFsL0F0dGFjaG1lbnRQcmV2aWV3TW9kYWwudHN4Il0sInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkgKi9cbi8qIGVzbGludC1kaXNhYmxlIG5vLW5lc3RlZC10ZXJuYXJ5ICovXG4vKiBlc2xpbnQtZGlzYWJsZSBpbXBvcnQvbm8tZXh0cmFuZW91cy1kZXBlbmRlbmNpZXMgKi9cbmltcG9ydCBSZWFjdCwgeyB1c2VTdGF0ZSwgdXNlRWZmZWN0LCB1c2VSZWYgfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IGNyZWF0ZVBvcnRhbCB9IGZyb20gJ3JlYWN0LWRvbSdcbmltcG9ydCB7IENVQnV0dG9uIH0gZnJvbSAnQHByb2plY3Rjb3IvYnV0dG9uL2xpYi9jb21wb25lbnRzL0NVQnV0dG9uJ1xuaW1wb3J0IHsgQ3Jvc3MgfSBmcm9tICdAcHJvamVjdGNvci9pY29ucy9saWIvY29tcG9uZW50cy9Dcm9zcydcbmltcG9ydCB7IFNwaW5uZXJMb3R0aWUgfSBmcm9tICdAcHJvamVjdGNvci9jb3ItY29tbW9ucy9saWIvY29tcG9uZW50cy9zcGlubmVyLWxvdHRpZS9TcGlubmVyTG90dGllJ1xuaW1wb3J0IHsgdXNlVHJhbnNsYXRpb24gfSBmcm9tICdyZWFjdC1pMThuZXh0J1xuaW1wb3J0IHsgTWFpYVN0cmVhbWRvd24gfSBmcm9tICcuLi9NYWlhU3RyZWFtZG93bidcbmltcG9ydCB7IEJhY2tkcm9wIH0gZnJvbSAnLi4vQmFja2Ryb3AnXG5pbXBvcnQgeyB1c2VNYWlhVGFza1BhbmVsWkluZGV4IH0gZnJvbSAnLi4vLi4vLi4vaG9va3MvdXNlTWFpYVRhc2tQYW5lbFpJbmRleCdcbmltcG9ydCB7IEF0dGFjaG1lbnRGaWxlIH0gZnJvbSAnLi4vLi4vbW9sZWN1bGVzL0NoYXRGb290ZXIvQ2hhdEZvb3RlcidcbmltcG9ydCB7IEltYWdlUHJldmlldyB9IGZyb20gJy4uL0ltYWdlUHJldmlldy9JbWFnZVByZXZpZXcnXG5pbXBvcnQgeyBFeGNlbFByZXZpZXcgfSBmcm9tICcuL0V4Y2VsUHJldmlldydcbmltcG9ydCB7IFdvcmRQcmV2aWV3IH0gZnJvbSAnLi9Xb3JkUHJldmlldydcbmltcG9ydCB7IFBwdFByZXZpZXcgfSBmcm9tICcuL1BwdFByZXZpZXcnXG5pbXBvcnQgeyBkb3dubG9hZEZpbGVGcm9tVXJsIH0gZnJvbSAnLi4vLi4vLi4vdXRpbHMvZmlsZURvd25sb2FkSGVscGVyJ1xuaW1wb3J0IHtcbiAgU0NBUE1XcmFwcGVyLFxuICBTQ0FQTU1vZGFsLFxuICBTQ0FQTUhlYWRlcixcbiAgU0NBUE1Db250ZW50LFxuICBTQ0FQTUltYWdlQ29udGFpbmVyLFxuICBTQ0FQTVBkZkNvbnRhaW5lcixcbiAgU0NBUE1UZXh0Q29udGFpbmVyLFxuICBTQ0FQTU1hcmtkb3duQ29udGFpbmVyLFxuICBTQ0FQTVVuc3VwcG9ydGVkQ29udGFpbmVyLFxuICBTQ0FQTUxvYWRpbmdDb250YWluZXIsXG4gIFNDQVBNUGRmSWZyYW1lLFxuICBTQ0FQTVVuc3VwcG9ydGVkQ29udGFpbmVyVGV4dCxcbiAgU0NBUE1FcnJvckNvbnRhaW5lcixcbiAgU0NBUE1FcnJvckZpbGVOYW1lLFxufSBmcm9tICcuL0F0dGFjaG1lbnRQcmV2aWV3TW9kYWwuc3R5bGVzJ1xuaW1wb3J0IHsgRXJyb3JTdGF0ZSB9IGZyb20gJy4uL2ljb25zL0Vycm9yU3RhdGUnXG5pbXBvcnQge1xuICBhcHBlbmRFeHRlbnNpb25JZk1pc3NpbmcsXG4gIGdldEF0dGFjaG1lbnRQcmV2aWV3RmlsZURldGFpbHMsXG4gIHJlc29sdmVEb3dubG9hZE1pbWVUeXBlLFxuICByZXNvbHZlUmVtb3RlSW1hZ2VQcmV2aWV3VXJsLFxufSBmcm9tICcuL0F0dGFjaG1lbnRQcmV2aWV3TW9kYWwuaGVscGVycydcblxudHlwZSBBdHRhY2htZW50UHJldmlld01vZGFsUHJvcHMgPSB7XG4gIGlzT3BlbjogYm9vbGVhblxuICBvbkNsb3NlOiAoKSA9PiB2b2lkXG4gIGF0dGFjaG1lbnQ6IEF0dGFjaG1lbnRGaWxlIHwgbnVsbFxufVxuXG5leHBvcnQgY29uc3QgQXR0YWNobWVudFByZXZpZXdNb2RhbCA9ICh7IGlzT3Blbiwgb25DbG9zZSwgYXR0YWNobWVudCB9OiBBdHRhY2htZW50UHJldmlld01vZGFsUHJvcHMpID0+IHtcbiAgY29uc3QgeyB0IH0gPSB1c2VUcmFuc2xhdGlvbihbJ2NoYXRfYWlfc2VjdGlvbiddKVxuICBjb25zdCBiYWNrZHJvcFpJbmRleCA9IHVzZU1haWFUYXNrUGFuZWxaSW5kZXgoMTExMTIsICduZXN0ZWRNb2RhbCcpXG4gIGNvbnN0IFtmaWxlVXJsLCBzZXRGaWxlVXJsXSA9IHVzZVN0YXRlPHN0cmluZz4oJycpXG4gIGNvbnN0IFt0ZXh0Q29udGVudCwgc2V0VGV4dENvbnRlbnRdID0gdXNlU3RhdGU8c3RyaW5nPignJylcbiAgY29uc3QgW2lzTG9hZGluZywgc2V0SXNMb2FkaW5nXSA9IHVzZVN0YXRlKGZhbHNlKVxuICBjb25zdCBtb2RhbFJlZiA9IHVzZVJlZjxIVE1MRGl2RWxlbWVudD4obnVsbClcbiAgY29uc3QgY29udGFpbmVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21vZGFsLXJvb3QtYWN0aW9ucycpXG5cbiAgLy8gQ2xlYW51cCBkZSBVUkxzIGN1YW5kbyBlbCBjb21wb25lbnRlIHNlIGRlc21vbnRlIG8gY2FtYmllIGVsIGFyY2hpdm9cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgaWYgKGZpbGVVcmwpIHtcbiAgICAgICAgVVJMLnJldm9rZU9iamVjdFVSTChmaWxlVXJsKVxuICAgICAgfVxuICAgIH1cbiAgfSwgW2ZpbGVVcmxdKVxuXG4gIC8vIExpc3RlbmVyIHBhcmEgY2VycmFyIGVsIG1vZGFsIGNvbiBsYSB0ZWNsYSBFU0NcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoIWlzT3Blbikge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZFxuICAgIH1cblxuICAgIGNvbnN0IGhhbmRsZUtleURvd24gPSAoZXZlbnQ6IEtleWJvYXJkRXZlbnQpID0+IHtcbiAgICAgIGlmIChldmVudC5rZXkgPT09ICdFc2NhcGUnIHx8IGV2ZW50LmtleSA9PT0gJ0VzYycpIHtcbiAgICAgICAgb25DbG9zZSgpXG4gICAgICB9XG4gICAgfVxuXG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIGhhbmRsZUtleURvd24pXG5cbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIGhhbmRsZUtleURvd24pXG4gICAgfVxuICB9LCBbaXNPcGVuLCBvbkNsb3NlXSlcblxuICAvLyBQcmV2ZW5pciBzY3JvbGwgZGVsIGJvZHkgY3VhbmRvIGVsIG1vZGFsIGVzdMOhIGFiaWVydG9cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoIWlzT3Blbikge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZFxuICAgIH1cblxuICAgIGNvbnN0IHsgYm9keSB9ID0gZG9jdW1lbnRcbiAgICBpZiAoIWJvZHkpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWRcbiAgICB9XG5cbiAgICBjb25zdCBvcmlnaW5hbE92ZXJmbG93ID0gYm9keS5zdHlsZS5vdmVyZmxvd1xuICAgIGJvZHkuc3R5bGUub3ZlcmZsb3cgPSAnaGlkZGVuJ1xuXG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGJvZHkuc3R5bGUub3ZlcmZsb3cgPSBvcmlnaW5hbE92ZXJmbG93XG4gICAgfVxuICB9LCBbaXNPcGVuXSlcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghaXNPcGVuIHx8ICFhdHRhY2htZW50KSB7XG4gICAgICBzZXRGaWxlVXJsKCcnKVxuICAgICAgc2V0VGV4dENvbnRlbnQoJycpXG4gICAgICByZXR1cm4gdW5kZWZpbmVkXG4gICAgfVxuXG4gICAgbGV0IGNhbmNlbGxlZCA9IGZhbHNlXG4gICAgbGV0IG9iamVjdFVybDogc3RyaW5nIHwgbnVsbCA9IG51bGxcbiAgICBzZXRJc0xvYWRpbmcodHJ1ZSlcblxuICAgIC8vIERldGVybWluYXIgZWwgdGlwbyBkZSBhcmNoaXZvIHVzYW5kbyBsYSBmdW5jacOzbiBkZSB1dGlsaWRhZFxuICAgIGNvbnN0IHsgZmlsZUV4dGVuc2lvbiwgaXNJbWFnZSwgaXNQZGYsIGlzTWFya2Rvd24sIGlzVGV4dCwgaXNFeGNlbCB9ID0gZ2V0QXR0YWNobWVudFByZXZpZXdGaWxlRGV0YWlscyhcbiAgICAgIGF0dGFjaG1lbnQubmFtZSxcbiAgICAgIGF0dGFjaG1lbnQudHlwZVxuICAgIClcblxuICAgIGNvbnN0IHByb2Nlc3NGaWxlID0gYXN5bmMgKFxuICAgICAgZmlsZTogRmlsZSxcbiAgICAgIGlzSW1nOiBib29sZWFuLFxuICAgICAgaXNQZGZGaWxlOiBib29sZWFuLFxuICAgICAgaXNNZDogYm9vbGVhbixcbiAgICAgIGlzVHh0OiBib29sZWFuLFxuICAgICAgaXNYbHM6IGJvb2xlYW5cbiAgICApID0+IHtcbiAgICAgIGlmIChjYW5jZWxsZWQpIHJldHVyblxuICAgICAgaWYgKGlzSW1nIHx8IGlzUGRmRmlsZSkge1xuICAgICAgICAvLyBQYXJhIGltw6FnZW5lcyB5IFBERnMsIGNyZWFyIFVSTCBkZWwgYmxvYiAoc2UgcmV2b2NhIGVuIGVsIGNsZWFudXAgZGVsIGVmZWN0bylcbiAgICAgICAgLy8gRmFsc28gcG9zaXRpdm86IHNlIHJldm9jYSBlbiBlbCBjbGVhbnVwIGRlbCBlZmVjdG9cbiAgICAgICAgLy8gcmVhY3QtZG9jdG9yLWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWRvY3Rvci9uby1jcmVhdGUtb2JqZWN0LXVybC13aXRob3V0LXJldm9rZVxuICAgICAgICBvYmplY3RVcmwgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKGZpbGUpXG4gICAgICAgIHNldEZpbGVVcmwob2JqZWN0VXJsKVxuICAgICAgICBzZXRJc0xvYWRpbmcoZmFsc2UpXG4gICAgICB9IGVsc2UgaWYgKGlzTWQgfHwgaXNUeHQpIHtcbiAgICAgICAgLy8gUGFyYSBhcmNoaXZvcyBkZSB0ZXh0byB5IG1hcmtkb3duLCBsZWVyIGVsIGNvbnRlbmlkb1xuICAgICAgICBjb25zdCByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpXG4gICAgICAgIHJlYWRlci5vbmxvYWQgPSBlID0+IHtcbiAgICAgICAgICBpZiAoY2FuY2VsbGVkKSByZXR1cm5cbiAgICAgICAgICBjb25zdCBjb250ZW50ID0gZS50YXJnZXQ/LnJlc3VsdCBhcyBzdHJpbmdcbiAgICAgICAgICBzZXRUZXh0Q29udGVudChjb250ZW50KVxuICAgICAgICAgIHNldElzTG9hZGluZyhmYWxzZSlcbiAgICAgICAgfVxuICAgICAgICByZWFkZXIub25lcnJvciA9ICgpID0+IHtcbiAgICAgICAgICBzZXRJc0xvYWRpbmcoZmFsc2UpXG4gICAgICAgIH1cbiAgICAgICAgcmVhZGVyLnJlYWRBc1RleHQoZmlsZSlcbiAgICAgIH0gZWxzZSBpZiAoaXNYbHMpIHtcbiAgICAgICAgLy8gUGFyYSBhcmNoaXZvcyBFeGNlbCwgZWwgY29tcG9uZW50ZSBFeGNlbFByZXZpZXcgbWFuZWphcsOhIGxhIGNhcmdhXG4gICAgICAgIHNldElzTG9hZGluZyhmYWxzZSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNldElzTG9hZGluZyhmYWxzZSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBsb2FkRmlsZSA9IGFzeW5jICgpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIC8vIFNpIGVzIGltYWdlbiwgdXNhciB1cmxfb3JpZ2luYWwgZGlyZWN0YW1lbnRlIChzaWVtcHJlIHZpZW5lIGRlbCBiYWNrZW5kKVxuICAgICAgICAvLyBTaSBubyB0aWVuZSB1cmxfb3JpZ2luYWwsIHVzYXIgdXJsX3RodW1ibmFpbCBjb21vIGZhbGxiYWNrXG4gICAgICAgIGlmIChpc0ltYWdlKSB7XG4gICAgICAgICAgY29uc3QgcmVtb3RlSW1hZ2VVcmwgPSByZXNvbHZlUmVtb3RlSW1hZ2VQcmV2aWV3VXJsKHtcbiAgICAgICAgICAgIHVybE9yaWdpbmFsOiBhdHRhY2htZW50LnVybF9vcmlnaW5hbCxcbiAgICAgICAgICAgIHVybFRodW1ibmFpbDogYXR0YWNobWVudC51cmxfdGh1bWJuYWlsLFxuICAgICAgICAgIH0pXG4gICAgICAgICAgaWYgKHJlbW90ZUltYWdlVXJsKSB7XG4gICAgICAgICAgICBzZXRGaWxlVXJsKHJlbW90ZUltYWdlVXJsKVxuICAgICAgICAgICAgc2V0SXNMb2FkaW5nKGZhbHNlKVxuICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gU2kgdGllbmUgdXJsX29yaWdpbmFsIGRlbCBiYWNrZW5kIChwYXJhIGFyY2hpdm9zIG5vLWltYWdlbiksIGRlc2NhcmdhciBlbCBhcmNoaXZvXG4gICAgICAgIC8vIHVybF9vcmlnaW5hbCBhaG9yYSB2aWVuZSBwYXJhIHRvZG9zIGxvcyBhcmNoaXZvcyBkZWwgYmFja2VuZFxuICAgICAgICBpZiAoYXR0YWNobWVudC51cmxfb3JpZ2luYWwpIHtcbiAgICAgICAgICBjb25zdCBtaW1lVHlwZSA9IHJlc29sdmVEb3dubG9hZE1pbWVUeXBlKGF0dGFjaG1lbnQudHlwZSwgZmlsZUV4dGVuc2lvbikgfHwgYXR0YWNobWVudC50eXBlXG4gICAgICAgICAgY29uc3QgZmlsZU5hbWVXaXRoRXh0ZW5zaW9uID0gYXBwZW5kRXh0ZW5zaW9uSWZNaXNzaW5nKGF0dGFjaG1lbnQubmFtZSwgZmlsZUV4dGVuc2lvbilcblxuICAgICAgICAgIGNvbnN0IGZpbGUgPSBhd2FpdCBkb3dubG9hZEZpbGVGcm9tVXJsKGF0dGFjaG1lbnQudXJsX29yaWdpbmFsLCBmaWxlTmFtZVdpdGhFeHRlbnNpb24sIG1pbWVUeXBlKVxuXG4gICAgICAgICAgLy8gUmUtZGV0ZWN0YXIgZWwgdGlwbyBkZSBhcmNoaXZvIGRlc3B1w6lzIGRlIGRlc2NhcmdhciAoZWwgYXJjaGl2byBkZXNjYXJnYWRvIHB1ZWRlIHRlbmVyIG1lam9yIGluZm9ybWFjacOzbilcbiAgICAgICAgICAvLyBVc2FyIGxhIGZ1bmNpw7NuIGRlIHV0aWxpZGFkIHBhcmEgb2J0ZW5lciBsb3MgZGV0YWxsZXMgZGVsIGFyY2hpdm8gZGVzY2FyZ2Fkb1xuICAgICAgICAgIC8vIFNpIG5vIGhheSBleHRlbnNpw7NuIGVuIGVsIGFyY2hpdm8gZGVzY2FyZ2FkbywgdXNhciBlbCB0aXBvIE1JTUUgZGVsIGFyY2hpdm8gbyBkZWwgYXR0YWNobWVudFxuICAgICAgICAgIGNvbnN0IGRvd25sb2FkZWRGaWxlRGV0YWlscyA9IGdldEF0dGFjaG1lbnRQcmV2aWV3RmlsZURldGFpbHMoZmlsZS5uYW1lLCBmaWxlLnR5cGUgfHwgYXR0YWNobWVudC50eXBlKVxuXG4gICAgICAgICAgYXdhaXQgcHJvY2Vzc0ZpbGUoXG4gICAgICAgICAgICBmaWxlLFxuICAgICAgICAgICAgZG93bmxvYWRlZEZpbGVEZXRhaWxzLmlzSW1hZ2UsXG4gICAgICAgICAgICBkb3dubG9hZGVkRmlsZURldGFpbHMuaXNQZGYsXG4gICAgICAgICAgICBkb3dubG9hZGVkRmlsZURldGFpbHMuaXNNYXJrZG93bixcbiAgICAgICAgICAgIGRvd25sb2FkZWRGaWxlRGV0YWlscy5pc1RleHQsXG4gICAgICAgICAgICBkb3dubG9hZGVkRmlsZURldGFpbHMuaXNFeGNlbFxuICAgICAgICAgIClcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIE9idGVuZXIgZWwgYXJjaGl2byBsb2NhbCAocHJlZmVyaXIgb3JpZ2luYWxGaWxlIHBhcmEgaW3DoWdlbmVzKVxuICAgICAgICBjb25zdCBmaWxlID0gYXR0YWNobWVudC5vcmlnaW5hbEZpbGUgfHwgYXR0YWNobWVudC5maWxlXG5cbiAgICAgICAgLy8gU2kgZWwgYXJjaGl2byBsb2NhbCBlc3TDoSB2YWPDrW8gKHNpemUgPT09IDApIHkgdGVuZW1vcyB1cmxfb3JpZ2luYWwsIHVzYXIgdXJsX29yaWdpbmFsXG4gICAgICAgIGlmIChmaWxlIGluc3RhbmNlb2YgRmlsZSAmJiBmaWxlLnNpemUgPT09IDAgJiYgYXR0YWNobWVudC51cmxfb3JpZ2luYWwpIHtcbiAgICAgICAgICBjb25zdCBkb3dubG9hZGVkRmlsZSA9IGF3YWl0IGRvd25sb2FkRmlsZUZyb21VcmwoYXR0YWNobWVudC51cmxfb3JpZ2luYWwsIGF0dGFjaG1lbnQubmFtZSwgYXR0YWNobWVudC50eXBlKVxuICAgICAgICAgIGF3YWl0IHByb2Nlc3NGaWxlKGRvd25sb2FkZWRGaWxlLCBpc0ltYWdlLCBpc1BkZiwgaXNNYXJrZG93biwgaXNUZXh0LCBpc0V4Y2VsKVxuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCEoZmlsZSBpbnN0YW5jZW9mIEZpbGUpKSB7XG4gICAgICAgICAgc2V0SXNMb2FkaW5nKGZhbHNlKVxuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG5cbiAgICAgICAgYXdhaXQgcHJvY2Vzc0ZpbGUoZmlsZSwgaXNJbWFnZSwgaXNQZGYsIGlzTWFya2Rvd24sIGlzVGV4dCwgaXNFeGNlbClcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGlmICghY2FuY2VsbGVkKSBzZXRJc0xvYWRpbmcoZmFsc2UpXG4gICAgICB9XG4gICAgfVxuXG4gICAgbG9hZEZpbGUoKVxuXG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGNhbmNlbGxlZCA9IHRydWVcbiAgICAgIGlmIChvYmplY3RVcmwpIFVSTC5yZXZva2VPYmplY3RVUkwob2JqZWN0VXJsKVxuICAgIH1cbiAgfSwgW2lzT3BlbiwgYXR0YWNobWVudF0pXG5cbiAgY29uc3QgaGFuZGxlTW9kYWxDbGljayA9IChlOiBSZWFjdC5Nb3VzZUV2ZW50KSA9PiB7XG4gICAgZS5zdG9wUHJvcGFnYXRpb24oKVxuICB9XG5cbiAgaWYgKCFpc09wZW4gfHwgIWF0dGFjaG1lbnQgfHwgIWNvbnRhaW5lcikgcmV0dXJuIG51bGxcblxuICAvLyBVc2FyIGxhIGZ1bmNpw7NuIGRlIHV0aWxpZGFkIHBhcmEgb2J0ZW5lciBsb3MgZGV0YWxsZXMgZGVsIGFyY2hpdm9cbiAgY29uc3QgeyBpc0ltYWdlLCBpc1BkZiwgaXNNYXJrZG93biwgaXNUZXh0LCBpc0V4Y2VsLCBpc09mZmljZURvYywgaXNQcHQgfSA9IGdldEF0dGFjaG1lbnRQcmV2aWV3RmlsZURldGFpbHMoXG4gICAgYXR0YWNobWVudC5uYW1lLFxuICAgIGF0dGFjaG1lbnQudHlwZVxuICApXG5cbiAgcmV0dXJuIGNyZWF0ZVBvcnRhbChcbiAgICA8U0NBUE1XcmFwcGVyPlxuICAgICAgPEJhY2tkcm9wIG9uQ2xpY2s9e29uQ2xvc2V9IHpJbmRleD17YmFja2Ryb3BaSW5kZXh9PlxuICAgICAgICA8U0NBUE1Nb2RhbCByZWY9e21vZGFsUmVmfSBvbkNsaWNrPXtoYW5kbGVNb2RhbENsaWNrfT5cbiAgICAgICAgICA8U0NBUE1IZWFkZXI+XG4gICAgICAgICAgICA8Q1VCdXR0b24gaWNvbk9ubHkgdmFyaWFudD1cInRleHRcIiBzaXplPVwic21hbGxcIiBvbkNsaWNrPXtvbkNsb3NlfT5cbiAgICAgICAgICAgICAgPENyb3NzIGNvbG9yPVwiIzY2NjY2NlwiIGhlaWdodD17MjJ9IHdpZHRoPXsyMn0gLz5cbiAgICAgICAgICAgIDwvQ1VCdXR0b24+XG4gICAgICAgICAgPC9TQ0FQTUhlYWRlcj5cbiAgICAgICAgICA8U0NBUE1Db250ZW50XG4gICAgICAgICAgICBpc0ltYWdlPXtpc0ltYWdlfVxuICAgICAgICAgICAgZXJyb3I9eyFpc0xvYWRpbmcgJiYgIWlzSW1hZ2UgJiYgIWlzUGRmICYmICFpc01hcmtkb3duICYmICFpc1RleHQgJiYgIWlzRXhjZWwgJiYgIWlzT2ZmaWNlRG9jICYmICFpc1BwdH1cbiAgICAgICAgICA+XG4gICAgICAgICAgICB7aXNMb2FkaW5nICYmIChcbiAgICAgICAgICAgICAgPFNDQVBNTG9hZGluZ0NvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8U3Bpbm5lckxvdHRpZSBzaXplPXs0OH0gLz5cbiAgICAgICAgICAgICAgPC9TQ0FQTUxvYWRpbmdDb250YWluZXI+XG4gICAgICAgICAgICApfVxuICAgICAgICAgICAgeyFpc0xvYWRpbmcgJiYgaXNJbWFnZSAmJiAoXG4gICAgICAgICAgICAgIDxTQ0FQTUltYWdlQ29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDxJbWFnZVByZXZpZXdcbiAgICAgICAgICAgICAgICAgIHNyYz17ZmlsZVVybH1cbiAgICAgICAgICAgICAgICAgIGFsdD17YXR0YWNobWVudC5uYW1lfVxuICAgICAgICAgICAgICAgICAgbWF4V2lkdGg9XCIxMDAlXCJcbiAgICAgICAgICAgICAgICAgIG1heEhlaWdodD1cIjEwMCVcIlxuICAgICAgICAgICAgICAgICAgYm9yZGVyUmFkaXVzPVwiOHB4XCJcbiAgICAgICAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcj1cInRyYW5zcGFyZW50XCJcbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8L1NDQVBNSW1hZ2VDb250YWluZXI+XG4gICAgICAgICAgICApfVxuICAgICAgICAgICAgeyFpc0xvYWRpbmcgJiYgaXNQZGYgJiYgKFxuICAgICAgICAgICAgICA8U0NBUE1QZGZDb250YWluZXI+XG4gICAgICAgICAgICAgICAgPFNDQVBNUGRmSWZyYW1lIHNyYz17ZmlsZVVybH0gdGl0bGU9e2F0dGFjaG1lbnQubmFtZX0gLz5cbiAgICAgICAgICAgICAgPC9TQ0FQTVBkZkNvbnRhaW5lcj5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgICB7IWlzTG9hZGluZyAmJiBpc01hcmtkb3duICYmIChcbiAgICAgICAgICAgICAgPFNDQVBNTWFya2Rvd25Db250YWluZXI+XG4gICAgICAgICAgICAgICAgPE1haWFTdHJlYW1kb3duIHZhcmlhbnQ9XCJjb21wYWN0XCI+e3RleHRDb250ZW50fTwvTWFpYVN0cmVhbWRvd24+XG4gICAgICAgICAgICAgIDwvU0NBUE1NYXJrZG93bkNvbnRhaW5lcj5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgICB7IWlzTG9hZGluZyAmJiBpc1RleHQgJiYgKFxuICAgICAgICAgICAgICA8U0NBUE1UZXh0Q29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDxwcmU+e3RleHRDb250ZW50fTwvcHJlPlxuICAgICAgICAgICAgICA8L1NDQVBNVGV4dENvbnRhaW5lcj5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgICB7IWlzTG9hZGluZyAmJlxuICAgICAgICAgICAgICBpc0V4Y2VsICYmXG4gICAgICAgICAgICAgICgoKSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gU2kgdGllbmUgdXJsX29yaWdpbmFsLCBFeGNlbFByZXZpZXcgbWFuZWphcsOhIGxhIGRlc2NhcmdhXG4gICAgICAgICAgICAgICAgaWYgKGF0dGFjaG1lbnQudXJsX29yaWdpbmFsKSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gPEV4Y2VsUHJldmlldyBmaWxlVXJsPXthdHRhY2htZW50LnVybF9vcmlnaW5hbH0gZmlsZU5hbWU9e2F0dGFjaG1lbnQubmFtZX0gLz5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgZmlsZSA9IGF0dGFjaG1lbnQub3JpZ2luYWxGaWxlIHx8IGF0dGFjaG1lbnQuZmlsZVxuICAgICAgICAgICAgICAgIGlmICghKGZpbGUgaW5zdGFuY2VvZiBGaWxlKSkgcmV0dXJuIG51bGxcbiAgICAgICAgICAgICAgICByZXR1cm4gPEV4Y2VsUHJldmlldyBmaWxlPXtmaWxlfSBmaWxlTmFtZT17YXR0YWNobWVudC5uYW1lfSAvPlxuICAgICAgICAgICAgICB9KSgpfVxuICAgICAgICAgICAgeyFpc0xvYWRpbmcgJiZcbiAgICAgICAgICAgICAgaXNPZmZpY2VEb2MgJiZcbiAgICAgICAgICAgICAgKCgpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoYXR0YWNobWVudC51cmxfb3JpZ2luYWwpIHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiA8V29yZFByZXZpZXcgZmlsZVVybD17YXR0YWNobWVudC51cmxfb3JpZ2luYWx9IGZpbGVOYW1lPXthdHRhY2htZW50Lm5hbWV9IC8+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IGZpbGUgPSBhdHRhY2htZW50Lm9yaWdpbmFsRmlsZSB8fCBhdHRhY2htZW50LmZpbGVcbiAgICAgICAgICAgICAgICBpZiAoIShmaWxlIGluc3RhbmNlb2YgRmlsZSkpIHJldHVybiBudWxsXG4gICAgICAgICAgICAgICAgcmV0dXJuIDxXb3JkUHJldmlldyBmaWxlPXtmaWxlfSBmaWxlTmFtZT17YXR0YWNobWVudC5uYW1lfSAvPlxuICAgICAgICAgICAgICB9KSgpfVxuICAgICAgICAgICAgeyFpc0xvYWRpbmcgJiZcbiAgICAgICAgICAgICAgaXNQcHQgJiZcbiAgICAgICAgICAgICAgKCgpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoYXR0YWNobWVudC51cmxfb3JpZ2luYWwpIHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiA8UHB0UHJldmlldyBmaWxlVXJsPXthdHRhY2htZW50LnVybF9vcmlnaW5hbH0gZmlsZU5hbWU9e2F0dGFjaG1lbnQubmFtZX0gLz5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgZmlsZSA9IGF0dGFjaG1lbnQub3JpZ2luYWxGaWxlIHx8IGF0dGFjaG1lbnQuZmlsZVxuICAgICAgICAgICAgICAgIGlmICghKGZpbGUgaW5zdGFuY2VvZiBGaWxlKSkgcmV0dXJuIG51bGxcbiAgICAgICAgICAgICAgICByZXR1cm4gPFBwdFByZXZpZXcgZmlsZT17ZmlsZX0gZmlsZU5hbWU9e2F0dGFjaG1lbnQubmFtZX0gLz5cbiAgICAgICAgICAgICAgfSkoKX1cbiAgICAgICAgICAgIHshaXNMb2FkaW5nICYmICFpc0ltYWdlICYmICFpc1BkZiAmJiAhaXNNYXJrZG93biAmJiAhaXNUZXh0ICYmICFpc0V4Y2VsICYmICFpc09mZmljZURvYyAmJiAhaXNQcHQgJiYgKFxuICAgICAgICAgICAgICA8U0NBUE1FcnJvckNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8U0NBUE1VbnN1cHBvcnRlZENvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgIDxFcnJvclN0YXRlIC8+XG4gICAgICAgICAgICAgICAgICA8U0NBUE1VbnN1cHBvcnRlZENvbnRhaW5lclRleHQ+XG4gICAgICAgICAgICAgICAgICAgIHt0KCdjaGF0LmF0dGFjaG1lbnRQcmV2aWV3TW9kYWwudW5zdXBwb3J0ZWRGaWxlTWVzc2FnZScpfVxuICAgICAgICAgICAgICAgICAgPC9TQ0FQTVVuc3VwcG9ydGVkQ29udGFpbmVyVGV4dD5cbiAgICAgICAgICAgICAgICA8L1NDQVBNVW5zdXBwb3J0ZWRDb250YWluZXI+XG4gICAgICAgICAgICAgICAgPFNDQVBNRXJyb3JGaWxlTmFtZT57YXR0YWNobWVudC5uYW1lfTwvU0NBUE1FcnJvckZpbGVOYW1lPlxuICAgICAgICAgICAgICA8L1NDQVBNRXJyb3JDb250YWluZXI+XG4gICAgICAgICAgICApfVxuICAgICAgICAgIDwvU0NBUE1Db250ZW50PlxuICAgICAgICA8L1NDQVBNTW9kYWw+XG4gICAgICA8L0JhY2tkcm9wPlxuICAgIDwvU0NBUE1XcmFwcGVyPixcbiAgICBjb250YWluZXJcbiAgKVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7QUFBQTtBQUNBO0FBQ0E7QUFDQSxPQUFPQSxLQUFLLElBQUlDLFFBQVEsRUFBRUMsU0FBUyxFQUFFQyxNQUFNLFFBQVEsT0FBTztBQUMxRCxTQUFTQyxZQUFZLFFBQVEsV0FBVztBQUN4QyxTQUFTQyxRQUFRLFFBQVEsNENBQTRDO0FBQ3JFLFNBQVNDLEtBQUssUUFBUSx3Q0FBd0M7QUFDOUQsU0FBU0MsYUFBYSxRQUFRLHFFQUFxRTtBQUNuRyxTQUFTQyxjQUFjLFFBQVEsZUFBZTtBQUM5QyxTQUFTQyxjQUFjLFFBQVEsbUJBQW1CO0FBQ2xELFNBQVNDLFFBQVEsUUFBUSxhQUFhO0FBQ3RDLFNBQVNDLHNCQUFzQixRQUFRLHVDQUF1QztBQUU5RSxTQUFTQyxZQUFZLFFBQVEsOEJBQThCO0FBQzNELFNBQVNDLFlBQVksUUFBUSxnQkFBZ0I7QUFDN0MsU0FBU0MsV0FBVyxRQUFRLGVBQWU7QUFDM0MsU0FBU0MsVUFBVSxRQUFRLGNBQWM7QUFDekMsU0FBU0MsbUJBQW1CLFFBQVEsbUNBQW1DO0FBQ3ZFLFNBQ0VDLFlBQVksRUFDWkMsVUFBVSxFQUNWQyxXQUFXLEVBQ1hDLFlBQVksRUFDWkMsbUJBQW1CLEVBQ25CQyxpQkFBaUIsRUFDakJDLGtCQUFrQixFQUNsQkMsc0JBQXNCLEVBQ3RCQyx5QkFBeUIsRUFDekJDLHFCQUFxQixFQUNyQkMsY0FBYyxFQUNkQyw2QkFBNkIsRUFDN0JDLG1CQUFtQixFQUNuQkMsa0JBQWtCLFFBQ2IsaUNBQWlDO0FBQ3hDLFNBQVNDLFVBQVUsUUFBUSxxQkFBcUI7QUFDaEQsU0FDRUMsd0JBQXdCLEVBQ3hCQywrQkFBK0IsRUFDL0JDLHVCQUF1QixFQUN2QkMsNEJBQTRC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