@projectcor/maia-components 2.49.0 → 2.49.1-1
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.
- package/lib/App.js +44 -19
- package/lib/components/atoms/ActionableButton.spec.js +111 -0
- package/lib/components/atoms/AgentActivityIndicator/AgentActivityIndicator.spec.js +52 -0
- package/lib/components/atoms/AgentActivityIndicator/AgentActivityIndicator.utils.spec.js +11 -0
- package/lib/components/atoms/ApprovalBox/ApprovalBox.helpers.spec.js +63 -0
- package/lib/components/atoms/ApprovalBox/ApprovalBox.spec.js +183 -0
- package/lib/components/atoms/AttachmentCard/AttachmentCard.spec.js +123 -0
- package/lib/components/atoms/AttachmentCard/AttachmentCardAudio.helpers.js +3 -1
- package/lib/components/atoms/AttachmentCard/AttachmentCardAudio.helpers.spec.js +139 -0
- package/lib/components/atoms/AttachmentCard/AttachmentCardAudio.spec.js +385 -0
- package/lib/components/atoms/AttachmentCard/AttachmentCardImage.js +3 -1
- package/lib/components/atoms/AttachmentCard/AttachmentCardImage.spec.js +78 -0
- package/lib/components/atoms/AttachmentPreviewModal/AttachmentPreviewModal.helpers.spec.js +94 -0
- package/lib/components/atoms/AttachmentPreviewModal/AttachmentPreviewModal.js +24 -14
- package/lib/components/atoms/AttachmentPreviewModal/AttachmentPreviewModal.spec.js +396 -0
- package/lib/components/atoms/AttachmentPreviewModal/ExcelPreview.js +28 -10
- package/lib/components/atoms/AttachmentPreviewModal/ExcelPreview.spec.js +80 -0
- package/lib/components/atoms/AttachmentPreviewModal/PptPreview.helpers.spec.js +526 -0
- package/lib/components/atoms/AttachmentPreviewModal/PptPreview.js +19 -15
- package/lib/components/atoms/AttachmentPreviewModal/PptPreview.spec.js +169 -0
- package/lib/components/atoms/AttachmentPreviewModal/WordPreview.helpers.spec.js +11 -0
- package/lib/components/atoms/AttachmentPreviewModal/WordPreview.js +8 -4
- package/lib/components/atoms/AttachmentPreviewModal/WordPreview.spec.js +77 -0
- package/lib/components/atoms/Backdrop/Backdrop.spec.js +28 -0
- package/lib/components/atoms/CardMenu/CardMenu.spec.js +56 -0
- package/lib/components/atoms/ChatClientSelector/ChatClientSelector.spec.js +67 -0
- package/lib/components/atoms/Checkbox/Checkbox.spec.js +27 -0
- package/lib/components/atoms/Chip/Chip.spec.js +82 -0
- package/lib/components/atoms/ChipLlm/ChipLlm.spec.js +26 -0
- package/lib/components/atoms/ClientSelector/ClientSelector.helpers.spec.js +45 -0
- package/lib/components/atoms/ClientSelector/ClientSelector.js +15 -13
- package/lib/components/atoms/ClientSelector/ClientSelector.spec.js +133 -0
- package/lib/components/atoms/ContextMentionChip/ContextMentionChip.spec.js +29 -0
- package/lib/components/atoms/ContextMentionChip/MentionOverflowLabel.spec.js +46 -0
- package/lib/components/atoms/ContextMentionChip/buildChipElement.helpers.spec.js +109 -0
- package/lib/components/atoms/ContextMentionChip/buildChipElement.spec.js +81 -0
- package/lib/components/atoms/ContextMentionEditor/ContextMentionEditor.helpers.spec.js +92 -0
- package/lib/components/atoms/ContextMentionEditor/ContextMentionEditor.spec.js +319 -0
- package/lib/components/atoms/ContextMentionItem/ContextMentionItem.spec.js +107 -0
- package/lib/components/atoms/ContextMentionPopover/ContextMentionPopover.spec.js +136 -0
- package/lib/components/atoms/CopyToClipboard.spec.js +74 -0
- package/lib/components/atoms/EditableLabel/EditableLabel.spec.js +76 -0
- package/lib/components/atoms/EntitySelector/EntitySelector.spec.js +86 -0
- package/lib/components/atoms/Expand/Expand.spec.js +57 -0
- package/lib/components/atoms/Fade/Fade.js +10 -6
- package/lib/components/atoms/Fade/Fade.spec.js +66 -0
- package/lib/components/atoms/FeedbackButton/FeedbackButton.spec.js +75 -0
- package/lib/components/atoms/FrequentlyAskedQuestions/FrequentlyAskedQuestions.spec.js +104 -0
- package/lib/components/atoms/FrequentlyUsedActions/FrequentlyUsedActions.js +3 -1
- package/lib/components/atoms/FrequentlyUsedActions/FrequentlyUsedActions.spec.js +91 -0
- package/lib/components/atoms/FrequentlyUsedActions/FrequentlyUsedActions.styles.js +19 -7
- package/lib/components/atoms/HelpButton.spec.js +87 -0
- package/lib/components/atoms/ImagePreview/ImagePreview.spec.js +96 -0
- package/lib/components/atoms/ListMenuOption/ListMenuOption.spec.js +54 -0
- package/lib/components/atoms/LoadingFaqs/LoadingFaqs.spec.js +21 -0
- package/lib/components/atoms/LoadingSearchClients/LoadingSearchClients.spec.js +20 -0
- package/lib/components/atoms/LoadingSearchProjects/LoadingSearchProjects.spec.js +26 -0
- package/lib/components/atoms/LoadingText/LoadingText.spec.js +25 -0
- package/lib/components/atoms/MAIAButton/MAIAButton.spec.js +42 -0
- package/lib/components/atoms/MAIAError/MAIAError.spec.js +27 -0
- package/lib/components/atoms/MAIAInput/MAIAInput.attachments.helpers.js +3 -2
- package/lib/components/atoms/MAIAInput/MAIAInput.attachments.helpers.spec.js +113 -0
- package/lib/components/atoms/MAIAInput/MAIAInput.helpers.js +3 -2
- package/lib/components/atoms/MAIAInput/MAIAInput.helpers.spec.js +381 -0
- package/lib/components/atoms/MAIAInput/MAIAInput.js +14 -7
- package/lib/components/atoms/MAIAInput/MAIAInput.spec.js +641 -0
- package/lib/components/atoms/MAIAInput/MAIAInputEditor.helpers.spec.js +92 -0
- package/lib/components/atoms/MAIAInput/MAIAInputEditor.spec.js +193 -0
- package/lib/components/atoms/MAIAInput/maiaInputLayout.spec.js +32 -0
- package/lib/components/atoms/MaiaStreamdown/MaiaStreamdown.spec.js +64 -0
- package/lib/components/atoms/MaiaWrapper/MaiaWrapper.spec.js +43 -0
- package/lib/components/atoms/MaiaWrapper/MaiaWrapperBase.js +9 -4
- package/lib/components/atoms/MaiaWrapper/MaiaWrapperBase.spec.js +114 -0
- package/lib/components/atoms/MaiaWrapper/ModernMaiaWrapper.spec.js +51 -0
- package/lib/components/atoms/ModalClientAccess/ModalClientAccess.spec.js +48 -0
- package/lib/components/atoms/ModalProject/ModalProject.spec.js +66 -0
- package/lib/components/atoms/NextPageLoader.spec.js +37 -0
- package/lib/components/atoms/OnboardingModalButton/OnboardingModal.spec.js +20 -0
- package/lib/components/atoms/OnboardingModalButton/OnboardingModalButton.helpers.spec.js +35 -0
- package/lib/components/atoms/OnboardingModalButton/OnboardingModalButton.spec.js +47 -0
- package/lib/components/atoms/OptionAccessibility/OptionAccessibility.js +4 -5
- package/lib/components/atoms/OptionAccessibility/OptionAccessibility.spec.js +146 -0
- package/lib/components/atoms/PrimaryButton.spec.js +42 -0
- package/lib/components/atoms/ProjectSelector/ProjectSelector.spec.js +69 -0
- package/lib/components/atoms/ReasoningBlock/ReasoningBlock.js +7 -2
- package/lib/components/atoms/ReasoningBlock/ReasoningBlock.spec.js +69 -0
- package/lib/components/atoms/ReasoningBlock/ReasoningBlock.styles.js +41 -24
- package/lib/components/atoms/ReasoningBlock/ReasoningSteps.js +25 -10
- package/lib/components/atoms/ReasoningBlock/ReasoningSteps.spec.js +59 -0
- package/lib/components/atoms/ReasoningBlock/ReasoningTimeline.js +78 -43
- package/lib/components/atoms/ReasoningBlock/ReasoningTimeline.spec.js +170 -0
- package/lib/components/atoms/ReasoningBlock/groupParallelSteps.js +9 -11
- package/lib/components/atoms/ReasoningBlock/groupParallelSteps.spec.js +199 -0
- package/lib/components/atoms/ReasoningBlock/reasoningLeading.spec.js +70 -0
- package/lib/components/atoms/ReasoningBlock/reasoningLiveNarration.js +37 -15
- package/lib/components/atoms/ReasoningBlock/reasoningLiveNarration.spec.js +120 -0
- package/lib/components/atoms/ReasoningBlock/reasoningMotion.js +8 -0
- package/lib/components/atoms/ReasoningBlock/reasoningTimeline.helpers.spec.js +31 -0
- package/lib/components/atoms/ReasoningBlock/useCollapsibleHeight.js +52 -0
- package/lib/components/atoms/ReasoningBlock/useCollapsibleHeight.spec.js +90 -0
- package/lib/components/atoms/ReasoningBlock/useReasoningMarkerHandoff.js +29 -0
- package/lib/components/atoms/ReasoningBlock/useReasoningMarkerHandoff.spec.js +38 -0
- package/lib/components/atoms/SessionGeneratingDot/SessionGeneratingDot.spec.js +16 -0
- package/lib/components/atoms/SkillsDropdown/SkillsDropdown.spec.js +107 -0
- package/lib/components/atoms/SlashCommandChip/SlashCommandChip.spec.js +24 -0
- package/lib/components/atoms/SlashCommandDropdown/SlashCommandDropdown.helpers.spec.js +71 -0
- package/lib/components/atoms/SlashCommandDropdown/SlashCommandDropdown.spec.js +120 -0
- package/lib/components/atoms/Switch/Switch.spec.js +41 -0
- package/lib/components/atoms/TextArea/CustomTextArea.spec.js +52 -0
- package/lib/components/atoms/TextArea/TextArea.helpers.spec.js +25 -0
- package/lib/components/atoms/TextArea/TextArea.spec.js +126 -0
- package/lib/components/atoms/ThirdButton.spec.js +29 -0
- package/lib/components/atoms/VideoModal/VideoModal.spec.js +68 -0
- package/lib/components/atoms/WithAppCfg.spec.js +82 -0
- package/lib/components/index.js +2 -1
- package/lib/components/molecules/AbmSection/AbmAccessibilitySection/AbmAccessibilitySection.helpers.spec.js +53 -0
- package/lib/components/molecules/AbmSection/AbmAccessibilitySection/AbmAccessibilitySection.js +3 -2
- package/lib/components/molecules/AbmSection/AbmAccessibilitySection/AbmAccessibilitySection.spec.js +742 -0
- package/lib/components/molecules/AbmSection/AbmGeneralSection.helpers.spec.js +107 -0
- package/lib/components/molecules/AbmSection/AbmGeneralSection.spec.js +256 -0
- package/lib/components/molecules/AbmSection/AbmKnowledgeSection.helpers.js +6 -4
- package/lib/components/molecules/AbmSection/AbmKnowledgeSection.helpers.spec.js +175 -0
- package/lib/components/molecules/AbmSection/AbmKnowledgeSection.js +25 -16
- package/lib/components/molecules/AbmSection/AbmKnowledgeSection.spec.js +318 -0
- package/lib/components/molecules/AbmSection/AbmLoaderFiles.helpers.spec.js +50 -0
- package/lib/components/molecules/AbmSection/AbmLoaderFiles.spec.js +94 -0
- package/lib/components/molecules/AgentInputBlock/AgentInputBlockMessage.js +83 -0
- package/lib/components/molecules/AgentInputBlock/AgentInputBlockMessage.styles.js +30 -0
- package/lib/components/molecules/AgentInputBlock/index.js +5 -0
- package/lib/components/molecules/AgentInputBlock/resolveAgentInputBlock.js +52 -0
- package/lib/components/molecules/AgentInputBlock/resolveAgentInputBlock.spec.js +76 -0
- package/lib/components/molecules/AgentInputBlock/resolveLegacyContextSession.js +20 -0
- package/lib/components/molecules/AgentInputBlock/resolveLegacyContextSession.spec.js +34 -0
- package/lib/components/molecules/AgentInputBlock/useAgentChangeModelAction.js +36 -0
- package/lib/components/molecules/ChatAIClientSelector/ChatAIClientSelector.spec.js +66 -0
- package/lib/components/molecules/ChatAIContent/ChatAIContent.js +7 -3
- package/lib/components/molecules/ChatAIContent/ChatAIContent.spec.js +145 -0
- package/lib/components/molecules/ChatAIHistory/ChatAIHistory.spec.js +204 -0
- package/lib/components/molecules/ChatAIHome/ChatAIHome.helpers.spec.js +622 -0
- package/lib/components/molecules/ChatAIHome/ChatAIHome.js +93 -72
- package/lib/components/molecules/ChatAIHome/ChatAIHome.spec.js +264 -0
- package/lib/components/molecules/ChatAIHome/ChatAIHomeMaiaker.spec.js +86 -0
- package/lib/components/molecules/ChatAIHome/styles.js +85 -78
- package/lib/components/molecules/ChatAIMessages/ChatAICreateAgentActions.spec.js +104 -0
- package/lib/components/molecules/ChatAIMessages/ChatAIMessages.helpers.spec.js +742 -0
- package/lib/components/molecules/ChatAIMessages/ChatAIMessages.js +30 -14
- package/lib/components/molecules/ChatAIMessages/ChatAIMessages.spec.js +541 -0
- package/lib/components/molecules/ChatAIMessages/ChatAISuggestions.spec.js +46 -0
- package/lib/components/molecules/ChatAIMessages/newStyles.js +32 -35
- package/lib/components/molecules/ChatAIModal/ChatAIModal.helpers.js +8 -1
- package/lib/components/molecules/ChatAIModal/ChatAIModal.helpers.spec.js +1394 -0
- package/lib/components/molecules/ChatAIModal/ChatAIModal.js +25 -8
- package/lib/components/molecules/ChatAIModal/ChatAIModal.spec.js +1401 -0
- package/lib/components/molecules/ChatAIModal/ChatAIModal.styles.js +2 -2
- package/lib/components/molecules/ChatAIModal/components/ChatAiAgentOptions/ChatAiAgentOptions.helpers.spec.js +33 -0
- package/lib/components/molecules/ChatAIModal/components/ChatAiAgentOptions/ChatAiAgentOptions.spec.js +116 -0
- package/lib/components/molecules/ChatAIModal/components/ChatAiModalFooter/ChatAiModalFooter.js +15 -153
- package/lib/components/molecules/ChatAIModal/components/ChatAiModalFooter/ChatAiModalFooter.spec.js +134 -0
- package/lib/components/molecules/ChatAIModal/components/ChatAiModalFooter/ChatAiModalFooter.styles.js +2 -26
- package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.helpers.spec.js +142 -0
- package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.js +63 -367
- package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.spec.js +241 -0
- package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.utils.js +69 -0
- package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.utils.spec.js +144 -0
- package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeaderAgentDropdown.js +95 -0
- package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeaderAgentSelector.js +174 -0
- package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeaderLayoutMenu.js +99 -0
- package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeaderLayoutMenu.spec.js +65 -0
- package/lib/components/molecules/ChatAIModal/components/MaiaMinimizedPill/MaiaMinimizedPill.spec.js +37 -0
- package/lib/components/molecules/ChatAIModal/constants.spec.js +16 -0
- package/lib/components/molecules/ChatAIModal/floatingPanelMotion/FloatingPanelMotion.spec.js +22 -0
- package/lib/components/molecules/ChatAIModal/floatingPanelMotion/useFloatingPanelDragTilt.spec.js +67 -0
- package/lib/components/molecules/ChatAIModal/layout.spec.js +72 -0
- package/lib/components/molecules/ChatAIMyAgents/ChatAIMyAgents.helpers.spec.js +93 -0
- package/lib/components/molecules/ChatAIMyAgents/ChatAIMyAgents.spec.js +297 -0
- package/lib/components/molecules/ChatAIMySkills/ChatAIMySkills.helpers.spec.js +62 -0
- package/lib/components/molecules/ChatAIMySkills/ChatAIMySkills.spec.js +221 -0
- package/lib/components/molecules/ChatAIProjectSelector/ChatAIProjectSelector.spec.js +66 -0
- package/lib/components/molecules/ChatFooter/ChatFooter.js +10 -4
- package/lib/components/molecules/ChatFooter/ChatFooter.spec.js +369 -0
- package/lib/components/molecules/ChatFooter/ChatFooterCorAccess.spec.js +10 -0
- package/lib/components/molecules/ChatFooter/ChatFooterFaqs.helpers.spec.js +104 -0
- package/lib/components/molecules/ChatFooter/ChatFooterFaqs.js +5 -2
- package/lib/components/molecules/ChatFooter/ChatFooterFaqs.spec.js +139 -0
- package/lib/components/molecules/ContextMentionInput/ContextMentionInput.spec.js +84 -0
- package/lib/components/molecules/MessageFeedback/MessageFeedback.spec.js +116 -0
- package/lib/components/molecules/ProjectSummaryChat/ProjectSummaryChat.spec.js +126 -0
- package/lib/components/molecules/ProjectSummaryConfig/ProjectSummaryConfig.spec.js +115 -0
- package/lib/components/molecules/ProjectSummaryContent/ProjectSummaryContent.spec.js +79 -0
- package/lib/components/molecules/ProjectSummaryModal/ProjectSummaryModal.spec.js +37 -0
- package/lib/components/molecules/Sidebar/Sidebar.helpers.spec.js +119 -0
- package/lib/components/molecules/Sidebar/Sidebar.js +41 -23
- package/lib/components/molecules/Sidebar/Sidebar.spec.js +464 -0
- package/lib/components/organisms/AbmAgentModal/AbmAgentModal.helpers.spec.js +1067 -0
- package/lib/components/organisms/AbmAgentModal/AbmAgentModal.js +2 -2
- package/lib/components/organisms/AbmAgentModal/AbmAgentModal.spec.js +1236 -0
- package/lib/components/organisms/AbmSkillGenerateModal/AbmSkillGenerateModal.spec.js +112 -0
- package/lib/components/organisms/AbmSkillModal/AbmSkillModal.helpers.spec.js +77 -0
- package/lib/components/organisms/AbmSkillModal/AbmSkillModal.spec.js +503 -0
- package/lib/components/organisms/ChatAI/ChatAI.spec.js +174 -0
- package/lib/components/organisms/ChatAIPage/ChatAIPage.js +525 -0
- package/lib/components/organisms/ChatAIPage/ChatAIPage.spec.js +246 -0
- package/lib/components/organisms/ChatAIPage/ChatAIPage.styles.js +16 -0
- package/lib/components/organisms/ChatAIPage/ChatAIPageHeader.js +253 -0
- package/lib/components/organisms/ChatAIPage/ChatAIPageHeader.spec.js +139 -0
- package/lib/components/organisms/ChatAIPage/ChatAIPageHeader.styles.js +13 -0
- package/lib/components/organisms/ChatAIPage/ChatAIPageHome.js +284 -0
- package/lib/components/organisms/ChatAIPage/ChatAIPageHome.spec.js +275 -0
- package/lib/components/organisms/ChatAIPage/ChatAIPageHome.styles.js +196 -0
- package/lib/components/organisms/ChatAIPage/ChatAIPageHomeActionCardSlot.js +94 -0
- package/lib/components/organisms/ChatAIPage/ChatAIPageHomeActionCardSlot.spec.js +69 -0
- package/lib/components/organisms/ChatAIPage/ChatAIPageHomeActionCards.skeleton.js +38 -0
- package/lib/components/organisms/ChatAIPage/getDaypart.js +9 -0
- package/lib/components/organisms/ChatAIPage/getDaypart.spec.js +19 -0
- package/lib/components/organisms/ChatAIPage/index.js +3 -0
- package/lib/components/organisms/ClientAIButton/ClientAIButton.spec.js +53 -0
- package/lib/components/organisms/DeleteAgentModal/DeleteAgentModal.spec.js +59 -0
- package/lib/components/organisms/DeleteQuestionModal/DeleteQuestionModal.spec.js +79 -0
- package/lib/components/organisms/EditQuestionModal/EditQuestionModal.spec.js +86 -0
- package/lib/components/organisms/ModalFileExceeds/ModalFileExceeds.spec.js +49 -0
- package/lib/components/organisms/ProjectAIButton/ProjectAIButton.spec.js +67 -0
- package/lib/components/organisms/ProjectSummary/ProjectSummary.js +11 -7
- package/lib/components/organisms/ProjectSummary/ProjectSummary.spec.js +117 -0
- package/lib/components/organisms/SnackBar/Snackbar.spec.js +66 -0
- package/lib/components/organisms/SourcesInformation/SourceItem.spec.js +19 -0
- package/lib/components/organisms/SourcesInformation/SourcesInformationModal.js +4 -1
- package/lib/components/organisms/SourcesInformation/SourcesInformationModal.spec.js +52 -0
- package/lib/constants/formatExtensions.spec.js +14 -0
- package/lib/constants/maiaExternalConnectorsAccess.spec.js +29 -0
- package/lib/constants/maiaFeatureAccess.spec.js +30 -0
- package/lib/constants/maiaHourAgentAccess.spec.js +30 -0
- package/lib/constants/maiaTaskPanelAccess.spec.js +41 -0
- package/lib/constants/permissions/clientRoleAccess.spec.js +65 -0
- package/lib/constants/permissions/index.js +2 -2
- package/lib/constants/permissions/utils.js +4 -1
- package/lib/constants/permissions/utils.spec.js +128 -0
- package/lib/constants/plannerSyncEvents.spec.js +31 -0
- package/lib/constants/taskUrls.spec.js +9 -0
- package/lib/dev/DevMaiaPage.js +30 -0
- package/lib/dev/DevReasoningTimeline.js +68 -37
- package/lib/dev/Providers.js +5 -3
- package/lib/hooks/frequentlyUsedActionsCache.js +17 -0
- package/lib/hooks/frequentlyUsedActionsCache.spec.js +25 -0
- package/lib/hooks/useAccessClient/useAccessClient.spec.js +149 -0
- package/lib/hooks/useAgentModel/useAgentModel.spec.js +83 -0
- package/lib/hooks/useAgentModel/useCreateAgent.helpers.spec.js +268 -0
- package/lib/hooks/useAgentModel/useCreateAgent.spec.js +314 -0
- package/lib/hooks/useAgentModel/useDeleteAgent.spec.js +183 -0
- package/lib/hooks/useAgentModel/useUpdateAgent.js +7 -6
- package/lib/hooks/useAgentModel/useUpdateAgent.spec.js +374 -0
- package/lib/hooks/useAgentSuggestions.spec.js +89 -0
- package/lib/hooks/useCaretPosition.spec.js +58 -0
- package/lib/hooks/useChatManager/useChatManager.helpers.js +3 -3
- package/lib/hooks/useChatManager/useChatManager.helpers.spec.js +2027 -0
- package/lib/hooks/useChatManager/useChatManager.js +8 -7
- package/lib/hooks/useChatManager/useChatManager.spec.js +2409 -0
- package/lib/hooks/useChatMessages/useChatMessages.helpers.spec.js +491 -0
- package/lib/hooks/useChatMessages/useChatMessages.spec.js +729 -0
- package/lib/hooks/useChats/useChats.spec.js +208 -0
- package/lib/hooks/useClientSearch.helpers.spec.js +52 -0
- package/lib/hooks/useClientSearch.spec.js +86 -0
- package/lib/hooks/useContextMentions.helpers.spec.js +267 -0
- package/lib/hooks/useContextMentions.spec.js +338 -0
- package/lib/hooks/useContextPinPopover.helpers.spec.js +183 -0
- package/lib/hooks/useContextPinPopover.spec.js +159 -0
- package/lib/hooks/useContinueLegacyContextInNewChat/index.js +2 -0
- package/lib/hooks/useContinueLegacyContextInNewChat/useContinueLegacyContextInNewChat.js +93 -0
- package/lib/hooks/useDebounce.spec.js +42 -0
- package/lib/hooks/useEntitySearch.helpers.spec.js +723 -0
- package/lib/hooks/useEntitySearch.js +3 -1
- package/lib/hooks/useEntitySearch.spec.js +718 -0
- package/lib/hooks/useEvent.spec.js +45 -0
- package/lib/hooks/useFrequentlyAskedQuestions.spec.js +222 -0
- package/lib/hooks/useFrequentlyUsedActions.js +60 -22
- package/lib/hooks/useFrequentlyUsedActions.spec.js +135 -0
- package/lib/hooks/useIsMaiaPageRoute.js +26 -0
- package/lib/hooks/useIsMaiaPageRoute.spec.js +26 -0
- package/lib/hooks/useKnowledge/deleteKnowledge.spec.js +122 -0
- package/lib/hooks/useKnowledge/downloadKnowledge.js +4 -4
- package/lib/hooks/useKnowledge/downloadKnowledge.spec.js +148 -0
- package/lib/hooks/useKnowledge/saveKnowledge.spec.js +104 -0
- package/lib/hooks/useKnowledge/useKnowledgeOperations.js +16 -15
- package/lib/hooks/useKnowledge/useKnowledgeOperations.spec.js +178 -0
- package/lib/hooks/useMaiaChatSessionMeta/index.js +2 -0
- package/lib/hooks/useMaiaChatSessionMeta/useMaiaChatSessionMeta.js +24 -0
- package/lib/hooks/useMentionAllowedTypes.spec.js +89 -0
- package/lib/hooks/useMentionPopover.helpers.spec.js +100 -0
- package/lib/hooks/useMentionPopover.spec.js +392 -0
- package/lib/hooks/useMinimizedPillBottomOffset.helpers.spec.js +176 -0
- package/lib/hooks/useMinimizedPillBottomOffset.spec.js +89 -0
- package/lib/hooks/useMinimizedPillNoveltyDot/useMinimizedPillNoveltyDot.spec.js +67 -0
- package/lib/hooks/useModal/useModal.spec.js +73 -0
- package/lib/hooks/useOrchestratorStream/useOrchestratorStream.helpers.spec.js +138 -0
- package/lib/hooks/useOrchestratorStream/useOrchestratorStream.spec.js +417 -0
- package/lib/hooks/useProjectSearch.helpers.spec.js +89 -0
- package/lib/hooks/useProjectSearch.spec.js +91 -0
- package/lib/hooks/useProjectSummary.spec.js +193 -0
- package/lib/hooks/useProjectSummaryConfig.helpers.spec.js +151 -0
- package/lib/hooks/useProjectSummaryConfig.js +10 -5
- package/lib/hooks/useProjectSummaryConfig.spec.js +133 -0
- package/lib/hooks/useReasoningTrace/reasoningStore.spec.js +112 -0
- package/lib/hooks/useRecentClientsSearch.helpers.spec.js +33 -0
- package/lib/hooks/useRecentClientsSearch.spec.js +85 -0
- package/lib/hooks/useRecentContexts.spec.js +139 -0
- package/lib/hooks/useResize.spec.js +37 -0
- package/lib/hooks/useSkillsCatalog.spec.js +88 -0
- package/lib/hooks/useSlashCommands.spec.js +139 -0
- package/lib/hooks/useSmoothStreamText/useSmoothStreamText.spec.js +101 -0
- package/lib/hooks/useSnackBarManager/useSnackBarManager.spec.js +33 -0
- package/lib/hooks/useStreamResponse.spec.js +199 -0
- package/lib/hooks/useT.spec.js +20 -0
- package/lib/hooks/useToggle.spec.js +33 -0
- package/lib/hooks/useToggleFavorite/useToggleFavorite.spec.js +171 -0
- package/lib/index.js +5 -2
- package/lib/lang/br/index.js +26 -1
- package/lib/lang/en/index.js +26 -1
- package/lib/lang/es/index.js +26 -1
- package/lib/lang/fr/index.js +26 -1
- package/lib/services/appcues.spec.js +37 -0
- package/lib/services/maia/Access/updateAccess.spec.js +137 -0
- package/lib/services/maia/Actions/getFrequentlyUsedActions.js +1 -1
- package/lib/services/maia/Actions/getFrequentlyUsedActions.spec.js +56 -0
- package/lib/services/maia/Actions/getSlashCommands.spec.js +91 -0
- package/lib/services/maia/Agents/connectors.js +3 -1
- package/lib/services/maia/Agents/connectors.spec.js +496 -0
- package/lib/services/maia/Agents/createAgent.spec.js +55 -0
- package/lib/services/maia/Agents/deleteAgent.spec.js +57 -0
- package/lib/services/maia/Agents/fetchAgentDetail.spec.js +108 -0
- package/lib/services/maia/Agents/getAgentById.spec.js +190 -0
- package/lib/services/maia/Agents/getAgentModels.spec.js +190 -0
- package/lib/services/maia/Agents/getAgentSuggestions.spec.js +89 -0
- package/lib/services/maia/Agents/getAgents.helpers.spec.js +325 -0
- package/lib/services/maia/Agents/getAgents.spec.js +1135 -0
- package/lib/services/maia/Agents/setAgentToolGroups.spec.js +45 -0
- package/lib/services/maia/Agents/toggleFavorite.spec.js +59 -0
- package/lib/services/maia/Agents/updateAgent.spec.js +48 -0
- package/lib/services/maia/Chats/deleteChat.spec.js +31 -0
- package/lib/services/maia/Chats/getChatMessages.spec.js +150 -0
- package/lib/services/maia/Chats/getChatsByUserId.spec.js +149 -0
- package/lib/services/maia/Chats/markSessionAsRead.spec.js +30 -0
- package/lib/services/maia/Chats/patchChat.spec.js +41 -0
- package/lib/services/maia/Chats/wasHelpfulChat.spec.js +28 -0
- package/lib/services/maia/Faqs/getFrequentlyAskedQuestions.spec.js +58 -0
- package/lib/services/maia/Knowledge/delete.spec.js +45 -0
- package/lib/services/maia/Knowledge/download.spec.js +78 -0
- package/lib/services/maia/Knowledge/save.spec.js +58 -0
- package/lib/services/maia/Orchestrator/orchestrator.helpers.spec.js +225 -0
- package/lib/services/maia/Orchestrator/orchestrator.spec.js +181 -0
- package/lib/services/maia/RecentClients/getRecentClients.spec.js +52 -0
- package/lib/services/maia/RecentContexts/getRecentContexts.spec.js +103 -0
- package/lib/services/maia/RecentProjects/getRecentProjects.spec.js +82 -0
- package/lib/services/maia/RecentTasks/getRecentTasks.spec.js +63 -0
- package/lib/services/maia/RecentUsers/getRecentUsers.spec.js +82 -0
- package/lib/services/maia/Skills/createSkill.spec.js +68 -0
- package/lib/services/maia/Skills/deleteSkill.spec.js +42 -0
- package/lib/services/maia/Skills/generateSkill.spec.js +48 -0
- package/lib/services/maia/Skills/getSkills.spec.js +152 -0
- package/lib/services/maia/Skills/updateSkill.spec.js +62 -0
- package/lib/services/maia/client.spec.js +56 -0
- package/lib/services/utils/fetchCOR.spec.js +211 -0
- package/lib/services/utils/getCookie.spec.js +20 -0
- package/lib/services/utils/mapChatMessages.helpers.spec.js +336 -0
- package/lib/services/utils/mapChatMessages.spec.js +254 -0
- package/lib/store/chatsSidebarOptimistic.spec.js +145 -0
- package/lib/store/maiaLastChatPersistence.spec.js +22 -0
- package/lib/store/maiaPanelSessionPersistence.spec.js +62 -0
- package/lib/store/sessions/sessionNotificationSound.spec.js +145 -0
- package/lib/store/sessions/sessionNotifications.helpers.spec.js +63 -0
- package/lib/store/sessions/sessionNotifications.spec.js +106 -0
- package/lib/store/sessions/sessionStreamManager.helpers.spec.js +177 -0
- package/lib/store/sessions/sessionStreamManager.js +51 -55
- package/lib/store/sessions/sessionStreamManager.spec.js +939 -0
- package/lib/store/sessions/sessions.types.spec.js +16 -0
- package/lib/store/sessions/useSessionsStore.spec.js +135 -0
- package/lib/store/useChatsStore.js +4 -3
- package/lib/store/useChatsStore.spec.js +619 -0
- package/lib/store/useFaqsStore.spec.js +57 -0
- package/lib/styles/cascade.js +29 -3
- package/lib/styles/transitions.js +3 -1
- package/lib/types/global.d.js +1 -1
- package/lib/utils/actionCategoryMap.spec.js +18 -0
- package/lib/utils/agentDisplayName.spec.js +48 -0
- package/lib/utils/autoApproveStorage.spec.js +25 -0
- package/lib/utils/chatInputFiles.spec.js +39 -0
- package/lib/utils/contextMentionIcons.spec.js +41 -0
- package/lib/utils/contextMentionLabel.spec.js +13 -0
- package/lib/utils/contextMentionTriggers.spec.js +44 -0
- package/lib/utils/contextMentionTypeLabel.spec.js +14 -0
- package/lib/utils/corConnectorMentionTypes.spec.js +23 -0
- package/lib/utils/entityLinkRender.spec.js +72 -0
- package/lib/utils/fileDownloadHelper.spec.js +67 -0
- package/lib/utils/formatQuickActionMessage.spec.js +27 -0
- package/lib/utils/formatUnreadCount.spec.js +12 -0
- package/lib/utils/getUnitFileSize.spec.js +18 -0
- package/lib/utils/hitlAnalytics.spec.js +136 -0
- package/lib/utils/hoursPlannerQuickActionType.js +74 -1
- package/lib/utils/hoursPlannerQuickActionType.spec.js +64 -0
- package/lib/utils/imagePreprocessor.helpers.spec.js +28 -0
- package/lib/utils/imagePreprocessor.js +14 -3
- package/lib/utils/imagePreprocessor.spec.js +112 -0
- package/lib/utils/maiaPageRoute.js +24 -0
- package/lib/utils/maiaPageRoute.spec.js +23 -0
- package/lib/utils/mapBackendLang.spec.js +19 -0
- package/lib/utils/navigateContextEntity.js +2 -2
- package/lib/utils/navigateContextEntity.spec.js +50 -0
- package/lib/utils/normalizeAgentConnectors.spec.js +98 -0
- package/lib/utils/openTaskInCorPanel.js +2 -2
- package/lib/utils/openTaskInCorPanel.spec.js +43 -0
- package/lib/utils/orchestratorSubagents.spec.js +32 -0
- package/lib/utils/reasoningMappers.spec.js +103 -0
- package/lib/utils/recentContextsHomeLimit.spec.js +32 -0
- package/lib/utils/renderContextMentions.helpers.spec.js +87 -0
- package/lib/utils/renderContextMentions.spec.js +268 -0
- package/lib/utils/retryCompletion.spec.js +181 -0
- package/lib/utils/skillContentSize.spec.js +13 -0
- package/lib/utils/slashCommandMarker.spec.js +43 -0
- package/lib/utils/sortManagerHoursHomeFuas.spec.js +51 -0
- package/lib/utils/sseStreamContent.spec.js +31 -0
- package/lib/utils/streamActivityMessages.helpers.js +5 -4
- package/lib/utils/streamActivityMessages.helpers.spec.js +84 -0
- package/lib/utils/streamActivityMessages.js +32 -20
- package/lib/utils/streamActivityMessages.spec.js +336 -0
- package/lib/utils/validateTrimmedFields.spec.js +26 -0
- package/package.json +1 -1
- package/README.md +0 -2
|
@@ -13,14 +13,14 @@ function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length)
|
|
|
13
13
|
/* eslint-disable no-constant-condition */
|
|
14
14
|
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
15
15
|
import maia from '../../services/maia';
|
|
16
|
-
import { getInitialStreamActivity,
|
|
16
|
+
import { getInitialStreamActivity, getThinkingStreamActivity, getUsingSkillActivity, getWritingStreamActivity, resolveInitialHitlStreamActivity } from '../../utils/streamActivityMessages';
|
|
17
17
|
import { isCompleteLikeSsePayload, mergeStreamChunk } from '../../utils/sseStreamContent';
|
|
18
18
|
import { reasoningStore } from '../../hooks/useReasoningTrace';
|
|
19
19
|
import { sessionStreamingText } from './sessionStreamingText';
|
|
20
20
|
import { useSessionsStore } from './useSessionsStore';
|
|
21
21
|
import { ensureSessionNotificationsInitialized } from './sessionNotifications';
|
|
22
22
|
import { sessionHitlContext } from './sessionHitlContext';
|
|
23
|
-
import { buildSessionFinishPayload, isAgentTransferNode, isApprovalPreApproved, isRetryTurnNotFoundResponse, parseSseBlock, patchMetaAgentFields, resolveNodeStreamMessage,
|
|
23
|
+
import { buildSessionFinishPayload, isAgentTransferNode, isApprovalPreApproved, isRetryTurnNotFoundResponse, parseSseBlock, patchMetaAgentFields, resolveNodeStreamMessage, resolveReasoningStepTool, resolveReasoningStepType, resolveStartStreamGuard, resolveStreamTextChunk, resolveThinkingDelta, shouldAbortSessionStreamOnStop, shouldApplyReasoningStepIndex, shouldAppendThinkingStep, shouldResumeHitlAfterPreApproval, shouldSetIdleOnSilentAbort, shouldShowReasoningToolActivity, splitSseBuffer } from './sessionStreamManager.helpers';
|
|
24
24
|
|
|
25
25
|
/** Compatible con el `t` de i18next (uso de una sola key). */
|
|
26
26
|
|
|
@@ -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
|
|
46
|
-
var sessionId, placeholderId, callbacks, t,
|
|
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, isUsingSkill, setThinkingActivity, ensureWritingStarted, applyStreamChunk, clearStreamLikeAnswerReset, applyStreamComplete, _yield$reader$read, done, value, _splitSseBuffer, blocks, remainder, _iterator, _step, line, parsedBlock, eventType, dataStr, data, _resolveThinkingDelta, index, thinkingDelta, stepTool, stepType, _data$args, stepIndex, chunk, _chunk, _callbacks$onApproval, isPreApproved, _ref2, _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) {
|
|
@@ -92,17 +91,39 @@ var parseSessionSSE = /*#__PURE__*/function () {
|
|
|
92
91
|
hasStartedWriting = false; // "Usando Skill" queda visible mientras el modelo piensa con la skill cargada;
|
|
93
92
|
// los deltas de `thinking` no lo pisan hasta la próxima acción o el primer token.
|
|
94
93
|
isUsingSkill = false;
|
|
95
|
-
|
|
96
|
-
var
|
|
97
|
-
|
|
98
|
-
|
|
94
|
+
setThinkingActivity = function setThinkingActivity() {
|
|
95
|
+
var _store$getMeta;
|
|
96
|
+
var thinkingActivity = getThinkingStreamActivity(t);
|
|
97
|
+
var current = (_store$getMeta = store().getMeta(sessionId)) === null || _store$getMeta === void 0 ? void 0 : _store$getMeta.streamActivity;
|
|
98
|
+
if ((current === null || current === void 0 ? void 0 : current.phase) === 'thinking' && current.message === thinkingActivity.message) return;
|
|
99
99
|
store().patchMeta(sessionId, {
|
|
100
|
-
isLoading: true
|
|
101
|
-
isWriting: true
|
|
100
|
+
isLoading: true
|
|
102
101
|
});
|
|
103
|
-
store().setStatus(sessionId, '
|
|
104
|
-
store().setActivity(sessionId,
|
|
105
|
-
|
|
102
|
+
store().setStatus(sessionId, 'thinking');
|
|
103
|
+
store().setActivity(sessionId, thinkingActivity);
|
|
104
|
+
};
|
|
105
|
+
ensureWritingStarted = function ensureWritingStarted() {
|
|
106
|
+
var _store$getMeta2;
|
|
107
|
+
// Cualquier token corta "Usando Skill": el indicador vuelve a alternar pensando / escribiendo.
|
|
108
|
+
isUsingSkill = false;
|
|
109
|
+
if (!hasStartedWriting) {
|
|
110
|
+
var _callbacks$onStartWri;
|
|
111
|
+
hasStartedWriting = true;
|
|
112
|
+
store().patchMeta(sessionId, {
|
|
113
|
+
isLoading: true,
|
|
114
|
+
isWriting: true
|
|
115
|
+
});
|
|
116
|
+
(_callbacks$onStartWri = callbacks.onStartWriting) === null || _callbacks$onStartWri === void 0 || _callbacks$onStartWri.call(callbacks);
|
|
117
|
+
}
|
|
118
|
+
var current = (_store$getMeta2 = store().getMeta(sessionId)) === null || _store$getMeta2 === void 0 ? void 0 : _store$getMeta2.streamActivity;
|
|
119
|
+
if ((current === null || current === void 0 ? void 0 : current.phase) !== 'writing') {
|
|
120
|
+
store().patchMeta(sessionId, {
|
|
121
|
+
isLoading: true,
|
|
122
|
+
isWriting: true
|
|
123
|
+
});
|
|
124
|
+
store().setStatus(sessionId, 'writing');
|
|
125
|
+
store().setActivity(sessionId, getWritingStreamActivity(t));
|
|
126
|
+
}
|
|
106
127
|
};
|
|
107
128
|
applyStreamChunk = function applyStreamChunk(chunk) {
|
|
108
129
|
if (!chunk) return;
|
|
@@ -205,17 +226,9 @@ var parseSessionSSE = /*#__PURE__*/function () {
|
|
|
205
226
|
if (shouldAppendThinkingStep(index, thinkingDelta)) {
|
|
206
227
|
reasoningStore.appendThinking(placeholderId, index, thinkingDelta);
|
|
207
228
|
}
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
});
|
|
212
|
-
store().setStatus(sessionId, 'thinking');
|
|
213
|
-
if (!isUsingSkill) {
|
|
214
|
-
store().setActivity(sessionId, {
|
|
215
|
-
phase: 'thinking',
|
|
216
|
-
message: getThinkingLoadingMessage(0, t)
|
|
217
|
-
});
|
|
218
|
-
}
|
|
229
|
+
// Mientras dura "Usando Skill" los deltas de thinking no pisan la actividad.
|
|
230
|
+
if (!isUsingSkill) {
|
|
231
|
+
setThinkingActivity();
|
|
219
232
|
}
|
|
220
233
|
return _context.abrupt("continue", 23);
|
|
221
234
|
case 13:
|
|
@@ -235,17 +248,16 @@ var parseSessionSSE = /*#__PURE__*/function () {
|
|
|
235
248
|
stepTool = resolveReasoningStepTool(data);
|
|
236
249
|
stepType = resolveReasoningStepType(data);
|
|
237
250
|
if (shouldShowReasoningToolActivity(stepTool, stepType, data.status)) {
|
|
238
|
-
|
|
239
|
-
if (
|
|
240
|
-
|
|
251
|
+
isUsingSkill = stepTool === 'get_skill';
|
|
252
|
+
if (isUsingSkill) {
|
|
253
|
+
// El step de `get_skill` llega justo después de `using_skill`: mantiene el nombre.
|
|
241
254
|
store().patchMeta(sessionId, {
|
|
242
255
|
isLoading: true
|
|
243
256
|
});
|
|
244
|
-
|
|
245
|
-
store().setActivity(sessionId,
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
});
|
|
257
|
+
store().setStatus(sessionId, 'thinking');
|
|
258
|
+
store().setActivity(sessionId, getUsingSkillActivity(t, (_data$args = data.args) === null || _data$args === void 0 ? void 0 : _data$args.name));
|
|
259
|
+
} else {
|
|
260
|
+
setThinkingActivity();
|
|
249
261
|
}
|
|
250
262
|
}
|
|
251
263
|
if (shouldApplyReasoningStepIndex(data.i)) {
|
|
@@ -274,20 +286,8 @@ var parseSessionSSE = /*#__PURE__*/function () {
|
|
|
274
286
|
return _context.abrupt("continue", 23);
|
|
275
287
|
case 18:
|
|
276
288
|
isUsingSkill = false;
|
|
277
|
-
if (isAgentTransferNode(data)) {
|
|
278
|
-
|
|
279
|
-
isLoading: true
|
|
280
|
-
});
|
|
281
|
-
store().setStatus(sessionId, 'thinking');
|
|
282
|
-
} else {
|
|
283
|
-
nodeMessage = resolveNodeStreamMessage(data);
|
|
284
|
-
if (nodeMessage) {
|
|
285
|
-
store().patchMeta(sessionId, {
|
|
286
|
-
isLoading: true
|
|
287
|
-
});
|
|
288
|
-
store().setStatus(sessionId, 'thinking');
|
|
289
|
-
store().setActivity(sessionId, resolveHitlNodeStreamActivity(nodeMessage, t, hitlExecutionContext !== null && hitlExecutionContext !== void 0 ? hitlExecutionContext : undefined, resolveNodeThreadId(data)));
|
|
290
|
-
}
|
|
289
|
+
if (isAgentTransferNode(data) || resolveNodeStreamMessage(data)) {
|
|
290
|
+
setThinkingActivity();
|
|
291
291
|
}
|
|
292
292
|
return _context.abrupt("continue", 23);
|
|
293
293
|
case 19:
|
|
@@ -312,11 +312,7 @@ var parseSessionSSE = /*#__PURE__*/function () {
|
|
|
312
312
|
store().setStatus(sessionId, 'awaiting_approval');
|
|
313
313
|
(_callbacks$onApproval = callbacks.onApprovalRequired) === null || _callbacks$onApproval === void 0 || _callbacks$onApproval.call(callbacks, data, accumulatedContent);
|
|
314
314
|
if (shouldResumeHitlAfterPreApproval(isPreApproved, data.pending_actions)) {
|
|
315
|
-
|
|
316
|
-
isLoading: true
|
|
317
|
-
});
|
|
318
|
-
store().setStatus(sessionId, 'thinking');
|
|
319
|
-
store().setActivity(sessionId, resolveInitialHitlStreamActivity(t, hitlExecutionContext !== null && hitlExecutionContext !== void 0 ? hitlExecutionContext : undefined));
|
|
315
|
+
setThinkingActivity();
|
|
320
316
|
}
|
|
321
317
|
return _context.abrupt("continue", 23);
|
|
322
318
|
case 21:
|
|
@@ -701,7 +697,7 @@ export var sessionStreamManager = {
|
|
|
701
697
|
callbacks === null || callbacks === void 0 || (_callbacks$onStop = callbacks.onStop) === null || _callbacks$onStop === void 0 || _callbacks$onStop.call(callbacks, partialText);
|
|
702
698
|
},
|
|
703
699
|
/** Aborta sin marcar "cancelado" (uso interno / limpieza). */abortSilently: function abortSilently(sessionId) {
|
|
704
|
-
var _store$
|
|
700
|
+
var _store$getMeta3;
|
|
705
701
|
var active = activeStreams.get(sessionId);
|
|
706
702
|
if (!active) return;
|
|
707
703
|
active.isStopped = true;
|
|
@@ -713,7 +709,7 @@ export var sessionStreamManager = {
|
|
|
713
709
|
isWriting: false
|
|
714
710
|
});
|
|
715
711
|
store().setActivity(sessionId, null);
|
|
716
|
-
if (shouldSetIdleOnSilentAbort((_store$
|
|
712
|
+
if (shouldSetIdleOnSilentAbort((_store$getMeta3 = store().getMeta(sessionId)) === null || _store$getMeta3 === void 0 ? void 0 : _store$getMeta3.status)) {
|
|
717
713
|
store().setStatus(sessionId, 'idle');
|
|
718
714
|
}
|
|
719
715
|
},
|
|
@@ -724,4 +720,4 @@ export var sessionStreamManager = {
|
|
|
724
720
|
});
|
|
725
721
|
}
|
|
726
722
|
};
|
|
727
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJtYWlhIiwiZ2V0SW5pdGlhbFN0cmVhbUFjdGl2aXR5IiwiZ2V0VGhpbmtpbmdMb2FkaW5nTWVzc2FnZSIsImdldFVzaW5nU2tpbGxBY3Rpdml0eSIsImdldFdyaXRpbmdTdHJlYW1BY3Rpdml0eSIsInJlc29sdmVIaXRsTm9kZVN0cmVhbUFjdGl2aXR5IiwicmVzb2x2ZUluaXRpYWxIaXRsU3RyZWFtQWN0aXZpdHkiLCJyZXNvbHZlVG9vbEFjdGlvbkxhYmVsIiwiaXNDb21wbGV0ZUxpa2VTc2VQYXlsb2FkIiwibWVyZ2VTdHJlYW1DaHVuayIsInJlYXNvbmluZ1N0b3JlIiwic2Vzc2lvblN0cmVhbWluZ1RleHQiLCJ1c2VTZXNzaW9uc1N0b3JlIiwiZW5zdXJlU2Vzc2lvbk5vdGlmaWNhdGlvbnNJbml0aWFsaXplZCIsInNlc3Npb25IaXRsQ29udGV4dCIsImJ1aWxkU2Vzc2lvbkZpbmlzaFBheWxvYWQiLCJpc0FnZW50VHJhbnNmZXJOb2RlIiwiaXNBcHByb3ZhbFByZUFwcHJvdmVkIiwiaXNSZXRyeVR1cm5Ob3RGb3VuZFJlc3BvbnNlIiwicGFyc2VTc2VCbG9jayIsInBhdGNoTWV0YUFnZW50RmllbGRzIiwicmVzb2x2ZU5vZGVTdHJlYW1NZXNzYWdlIiwicmVzb2x2ZU5vZGVUaHJlYWRJZCIsInJlc29sdmVSZWFzb25pbmdTdGVwVG9vbCIsInJlc29sdmVSZWFzb25pbmdTdGVwVHlwZSIsInJlc29sdmVTdGFydFN0cmVhbUd1YXJkIiwicmVzb2x2ZVN0cmVhbVRleHRDaHVuayIsInJlc29sdmVUaGlua2luZ0RlbHRhIiwic2hvdWxkQWJvcnRTZXNzaW9uU3RyZWFtT25TdG9wIiwic2hvdWxkQXBwbHlSZWFzb25pbmdTdGVwSW5kZXgiLCJzaG91bGRBcHBlbmRUaGlua2luZ1N0ZXAiLCJzaG91bGRSZXN1bWVIaXRsQWZ0ZXJQcmVBcHByb3ZhbCIsInNob3VsZFNldElkbGVPblNpbGVudEFib3J0Iiwic2hvdWxkU2hvd1JlYXNvbmluZ1Rvb2xBY3Rpdml0eSIsInNwbGl0U3NlQnVmZmVyIiwiTUFYX0NPTkNVUlJFTlRfU1RSRUFNUyIsIlNUUkVBTV9USFJPVFRMRV9NUyIsImFjdGl2ZVN0cmVhbXMiLCJNYXAiLCJzdG9yZSIsImdldFN0YXRlIiwiaXNTdHJlYW1BY3RpdmUiLCJzZXNzaW9uSWQiLCJoYXMiLCJnZXRBY3RpdmVTdHJlYW1Db3VudCIsInNpemUiLCJwYXJzZVNlc3Npb25TU0UiLCJfcmVmIiwiX2FzeW5jVG9HZW5lcmF0b3IiLCJfcmVnZW5lcmF0b3JSdW50aW1lIiwibWFyayIsIl9jYWxsZWUiLCJyZXNwb25zZSIsImFjdGl2ZSIsInBhcmFtcyIsIl9wYXJhbXMkaGl0bEV4ZWN1dGlvbiIsIl9yZXNwb25zZSRib2R5IiwiX2RhdGEkZXJyb3IiLCJfZGF0YSRlcnJvcjIiLCJfY2FsbGJhY2tzJG9uRXJyb3IiLCJfZGF0YSRlcnJvcjMiLCJfZGF0YSRlcnJvcjQiLCJwbGFjZWhvbGRlcklkIiwiY2FsbGJhY2tzIiwidCIsImhpdGxFeGVjdXRpb25Db250ZXh0IiwicGVuZGluZ0NvbnRlbnQiLCJ0aHJvdHRsZVRpbWVyIiwiZmx1c2hUb1N0b3JlcyIsImVtaXRUaHJvdHRsZWQiLCJmbHVzaFBlbmRpbmciLCJyZWFkZXIiLCJkZWNvZGVyIiwiYnVmZmVyIiwiYWNjdW11bGF0ZWRDb250ZW50IiwiaGFzU3RhcnRlZFdyaXRpbmciLCJpc1VzaW5nU2tpbGwiLCJlbnN1cmVXcml0aW5nU3RhcnRlZCIsImFwcGx5U3RyZWFtQ2h1bmsiLCJjbGVhclN0cmVhbUxpa2VBbnN3ZXJSZXNldCIsImFwcGx5U3RyZWFtQ29tcGxldGUiLCJfeWllbGQkcmVhZGVyJHJlYWQiLCJkb25lIiwidmFsdWUiLCJfc3BsaXRTc2VCdWZmZXIiLCJibG9ja3MiLCJyZW1haW5kZXIiLCJfaXRlcmF0b3IiLCJfc3RlcCIsImxpbmUiLCJwYXJzZWRCbG9jayIsImV2ZW50VHlwZSIsImRhdGFTdHIiLCJkYXRhIiwiX3Jlc29sdmVUaGlua2luZ0RlbHRhIiwiaW5kZXgiLCJ0aGlua2luZ0RlbHRhIiwic3RlcFRvb2wiLCJzdGVwVHlwZSIsImxhYmVsIiwiX2RhdGEkYXJncyIsInN0ZXBJbmRleCIsImNodW5rIiwiX2NodW5rIiwibm9kZU1lc3NhZ2UiLCJfY2FsbGJhY2tzJG9uQXBwcm92YWwiLCJpc1ByZUFwcHJvdmVkIiwiX3JlZjIiLCJfdCIsIl90MiIsIl90MyIsIndyYXAiLCJfY29udGV4dCIsInByZXYiLCJuZXh0IiwiZ2V0IiwiY29udGVudCIsIl9jYWxsYmFja3Mkb25TdHJlYW1VcCIsInNldFRleHQiLCJvblN0cmVhbVVwZGF0ZSIsImNhbGwiLCJ3aW5kb3ciLCJzZXRUaW1lb3V0IiwidG9FbWl0IiwiY2xlYXJUaW1lb3V0IiwiYm9keSIsImdldFJlYWRlciIsIkVycm9yIiwiVGV4dERlY29kZXIiLCJfY2FsbGJhY2tzJG9uU3RhcnRXcmkiLCJwYXRjaE1ldGEiLCJpc0xvYWRpbmciLCJpc1dyaXRpbmciLCJzZXRTdGF0dXMiLCJzZXRBY3Rpdml0eSIsIm9uU3RhcnRXcml0aW5nIiwic3luY0xpdmVOYXJyYXRpb24iLCJtYXJrQW5zd2VyUmVzZXQiLCJwYXlsb2FkIiwiX2NhbGxiYWNrcyRvbkZpbmlzaFN0IiwiZmluaXNoUGF5bG9hZCIsImZpbmlzaCIsInJlYXNvbmluZyIsIm9uRmluaXNoU3RyZWFtIiwiaXNTdG9wcGVkIiwiY2FuY2VsIiwiYWJydXB0IiwicmVhZCIsInNlbnQiLCJkZWNvZGUiLCJzdHJlYW0iLCJfY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlciIsInMiLCJuIiwiSlNPTiIsInBhcnNlIiwiZGVsdGEiLCJhcHBlbmRUaGlua2luZyIsInBoYXNlIiwibWVzc2FnZSIsInNraWxsIiwic3RhdHVzIiwiYXJncyIsIm5hbWUiLCJpIiwiY2FwdHVyZUxlYWRpbmdGcm9tQm9keSIsImFwcGx5U3RlcCIsIl9vYmplY3RTcHJlYWQiLCJzaG91bGRDbGVhclN0cmVhbUZvckxlYWRpbmciLCJ1bmRlZmluZWQiLCJjbGVhciIsIm9uQXBwcm92YWxSZXF1aXJlZCIsInBlbmRpbmdfYWN0aW9ucyIsImNvbnNvbGUiLCJlcnJvciIsInNldEVycm9yIiwidHlwZSIsIm9uRXJyb3IiLCJ3YXJuIiwiZSIsImYiLCJzdG9wIiwiX3giLCJfeDIiLCJfeDMiLCJhcHBseSIsImFyZ3VtZW50cyIsInNlc3Npb25TdHJlYW1NYW5hZ2VyIiwiaXNBY3RpdmUiLCJnZXRBY3RpdmVDb3VudCIsImdldEFjdGl2ZVNlc3Npb25JZHMiLCJBcnJheSIsImZyb20iLCJrZXlzIiwic3RhcnRTdHJlYW0iLCJfY2FsbGVlMiIsInJlcXVlc3QiLCJhY3Rpdml0eU9wdGlvbnMiLCJhZ2VudElkIiwiYWdlbnROYW1lIiwic3RhcnRHdWFyZCIsImNvbnRyb2xsZXIiLCJfY2FsbGJhY2tzJG9uRXJyb3IyIiwiX3Q0IiwiX2NvbnRleHQyIiwiYWxsb3dlZCIsInN0YXJ0ZWQiLCJyZWFzb24iLCJBYm9ydENvbnRyb2xsZXIiLCJzZXQiLCJlbnN1cmVTZXNzaW9uIiwic3RhcnQiLCJPcmNoZXN0cmF0b3IiLCJvcmNoZXN0cmF0b3IiLCJzaWduYWwiLCJzdGFydENvbnRpbnVlU3RyZWFtIiwiX2NhbGxlZTMiLCJfcmVmMyIsImNvbnRpbnVlUmVxdWVzdCIsImNvbnRpbnVlR3VhcmQiLCJzc2VQYXJhbXMiLCJfY2FsbGJhY2tzJG9uRXJyb3IzIiwiX3Q1IiwiX2NvbnRleHQzIiwiY29udGludWVUaHJlYWQiLCJvayIsImNvbmNhdCIsInN0YXJ0UmV0cnlTdHJlYW0iLCJfY2FsbGVlNCIsInJldHJ5UmVxdWVzdCIsInJldHJ5R3VhcmQiLCJkZXRhaWwiLCJfY2FsbGJhY2tzJG9uRXJyb3I0IiwiX3Q2IiwiX3Q3IiwiX2NvbnRleHQ0IiwicmV0cnlDb21wbGV0aW9uIiwianNvbiIsInN0b3BTdHJlYW0iLCJfY2FsbGJhY2tzJG9uU3RvcCIsImFib3J0IiwicGFydGlhbFRleHQiLCJnZXRTbmFwc2hvdCIsInRleHQiLCJvblN0b3AiLCJhYm9ydFNpbGVudGx5IiwiX3N0b3JlJGdldE1ldGEiLCJnZXRNZXRhIiwiYWJvcnRBbGwiLCJfdGhpcyIsImZvckVhY2giXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvc3RvcmUvc2Vzc2lvbnMvc2Vzc2lvblN0cmVhbU1hbmFnZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgbm8tY29uc29sZSAqL1xuLyogZXNsaW50LWRpc2FibGUgbm8tY29udGludWUgKi9cbi8qIGVzbGludC1kaXNhYmxlIG5vLWF3YWl0LWluLWxvb3AgKi9cbi8qIGVzbGludC1kaXNhYmxlIG5vLXJlc3RyaWN0ZWQtc3ludGF4ICovXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1jb25zdGFudC1jb25kaXRpb24gKi9cbi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkgKi9cbmltcG9ydCBtYWlhIGZyb20gJy4uLy4uL3NlcnZpY2VzL21haWEnXG5pbXBvcnQgdHlwZSB7IEFwcHJvdmFsUmVxdWVzdCB9IGZyb20gJy4uLy4uL3R5cGVzL0NoYXQnXG5pbXBvcnQge1xuICBnZXRJbml0aWFsU3RyZWFtQWN0aXZpdHksXG4gIGdldFRoaW5raW5nTG9hZGluZ01lc3NhZ2UsXG4gIGdldFVzaW5nU2tpbGxBY3Rpdml0eSxcbiAgZ2V0V3JpdGluZ1N0cmVhbUFjdGl2aXR5LFxuICByZXNvbHZlSGl0bE5vZGVTdHJlYW1BY3Rpdml0eSxcbiAgcmVzb2x2ZUluaXRpYWxIaXRsU3RyZWFtQWN0aXZpdHksXG4gIHJlc29sdmVUb29sQWN0aW9uTGFiZWwsXG59IGZyb20gJy4uLy4uL3V0aWxzL3N0cmVhbUFjdGl2aXR5TWVzc2FnZXMnXG5pbXBvcnQgdHlwZSB7IEhpdGxFeGVjdXRpb25Db250ZXh0IH0gZnJvbSAnLi4vLi4vdXRpbHMvc3RyZWFtQWN0aXZpdHlNZXNzYWdlcydcbmltcG9ydCB7IGlzQ29tcGxldGVMaWtlU3NlUGF5bG9hZCwgbWVyZ2VTdHJlYW1DaHVuayB9IGZyb20gJy4uLy4uL3V0aWxzL3NzZVN0cmVhbUNvbnRlbnQnXG5pbXBvcnQgeyByZWFzb25pbmdTdG9yZSB9IGZyb20gJy4uLy4uL2hvb2tzL3VzZVJlYXNvbmluZ1RyYWNlJ1xuaW1wb3J0IHR5cGUgeyBSZWFzb25pbmdTdGVwUGF5bG9hZCwgUmVhc29uaW5nVHJhY2VQYXlsb2FkIH0gZnJvbSAnLi4vLi4vdHlwZXMvcmVhc29uaW5nJ1xuaW1wb3J0IHsgc2Vzc2lvblN0cmVhbWluZ1RleHQgfSBmcm9tICcuL3Nlc3Npb25TdHJlYW1pbmdUZXh0J1xuaW1wb3J0IHsgdXNlU2Vzc2lvbnNTdG9yZSB9IGZyb20gJy4vdXNlU2Vzc2lvbnNTdG9yZSdcbmltcG9ydCB7IGVuc3VyZVNlc3Npb25Ob3RpZmljYXRpb25zSW5pdGlhbGl6ZWQgfSBmcm9tICcuL3Nlc3Npb25Ob3RpZmljYXRpb25zJ1xuaW1wb3J0IHsgc2Vzc2lvbkhpdGxDb250ZXh0IH0gZnJvbSAnLi9zZXNzaW9uSGl0bENvbnRleHQnXG5pbXBvcnQgdHlwZSB7IFNlc3Npb25TdHJlYW1DYWxsYmFja3MsIFN0YXJ0U3RyZWFtUmVzdWx0IH0gZnJvbSAnLi9zZXNzaW9ucy50eXBlcydcbmltcG9ydCB7XG4gIGJ1aWxkU2Vzc2lvbkZpbmlzaFBheWxvYWQsXG4gIGlzQWdlbnRUcmFuc2Zlck5vZGUsXG4gIGlzQXBwcm92YWxQcmVBcHByb3ZlZCxcbiAgaXNSZXRyeVR1cm5Ob3RGb3VuZFJlc3BvbnNlLFxuICBwYXJzZVNzZUJsb2NrLFxuICBwYXRjaE1ldGFBZ2VudEZpZWxkcyxcbiAgcmVzb2x2ZU5vZGVTdHJlYW1NZXNzYWdlLFxuICByZXNvbHZlTm9kZVRocmVhZElkLFxuICByZXNvbHZlUmVhc29uaW5nU3RlcFRvb2wsXG4gIHJlc29sdmVSZWFzb25pbmdTdGVwVHlwZSxcbiAgcmVzb2x2ZVN0YXJ0U3RyZWFtR3VhcmQsXG4gIHJlc29sdmVTdHJlYW1UZXh0Q2h1bmssXG4gIHJlc29sdmVUaGlua2luZ0RlbHRhLFxuICBzaG91bGRBYm9ydFNlc3Npb25TdHJlYW1PblN0b3AsXG4gIHNob3VsZEFwcGx5UmVhc29uaW5nU3RlcEluZGV4LFxuICBzaG91bGRBcHBlbmRUaGlua2luZ1N0ZXAsXG4gIHNob3VsZFJlc3VtZUhpdGxBZnRlclByZUFwcHJvdmFsLFxuICBzaG91bGRTZXRJZGxlT25TaWxlbnRBYm9ydCxcbiAgc2hvdWxkU2hvd1JlYXNvbmluZ1Rvb2xBY3Rpdml0eSxcbiAgc3BsaXRTc2VCdWZmZXIsXG59IGZyb20gJy4vc2Vzc2lvblN0cmVhbU1hbmFnZXIuaGVscGVycydcblxudHlwZSBPcmNoZXN0cmF0b3JSZXF1ZXN0ID0gUGFyYW1ldGVyczx0eXBlb2YgbWFpYS5PcmNoZXN0cmF0b3Iub3JjaGVzdHJhdG9yPlswXVxudHlwZSBDb250aW51ZVRocmVhZFJlcXVlc3QgPSBQYXJhbWV0ZXJzPHR5cGVvZiBtYWlhLk9yY2hlc3RyYXRvci5jb250aW51ZVRocmVhZD5bMF1cbnR5cGUgUmV0cnlDb21wbGV0aW9uUmVxdWVzdCA9IFBhcmFtZXRlcnM8dHlwZW9mIG1haWEuT3JjaGVzdHJhdG9yLnJldHJ5Q29tcGxldGlvbj5bMF1cblxuLyoqIENvbXBhdGlibGUgY29uIGVsIGB0YCBkZSBpMThuZXh0ICh1c28gZGUgdW5hIHNvbGEga2V5KS4gKi9cbnR5cGUgVHJhbnNsYXRlRm4gPSAoa2V5OiBzdHJpbmcpID0+IHN0cmluZ1xuXG50eXBlIFN0YXJ0U3RyZWFtUGFyYW1zID0ge1xuICBzZXNzaW9uSWQ6IHN0cmluZ1xuICBwbGFjZWhvbGRlcklkOiBzdHJpbmdcbiAgcmVxdWVzdDogT3JjaGVzdHJhdG9yUmVxdWVzdFxuICBjYWxsYmFja3M6IFNlc3Npb25TdHJlYW1DYWxsYmFja3NcbiAgdDogVHJhbnNsYXRlRm5cbiAgYWN0aXZpdHlPcHRpb25zPzoge1xuICAgIGlzV2ViU2VhcmNoQWN0aXZlPzogYm9vbGVhblxuICAgIGlzRGVlcFNlYXJjaEFjdGl2ZT86IGJvb2xlYW5cbiAgICBoYXNBdHRhY2htZW50cz86IGJvb2xlYW5cbiAgICBhdHRhY2htZW50c0NvdW50PzogbnVtYmVyXG4gIH1cbiAgaGl0bEV4ZWN1dGlvbkNvbnRleHQ/OiBIaXRsRXhlY3V0aW9uQ29udGV4dCB8IG51bGxcbiAgYWdlbnRJZD86IHN0cmluZyB8IG51bWJlclxuICBhZ2VudE5hbWU/OiBzdHJpbmdcbn1cblxudHlwZSBTdGFydENvbnRpbnVlU3RyZWFtUGFyYW1zID0ge1xuICBzZXNzaW9uSWQ6IHN0cmluZ1xuICBwbGFjZWhvbGRlcklkOiBzdHJpbmdcbiAgY29udGludWVSZXF1ZXN0OiBDb250aW51ZVRocmVhZFJlcXVlc3RcbiAgY2FsbGJhY2tzOiBTZXNzaW9uU3RyZWFtQ2FsbGJhY2tzXG4gIHQ6IFRyYW5zbGF0ZUZuXG4gIGhpdGxFeGVjdXRpb25Db250ZXh0PzogSGl0bEV4ZWN1dGlvbkNvbnRleHQgfCBudWxsXG4gIGFnZW50SWQ/OiBzdHJpbmcgfCBudW1iZXJcbiAgYWdlbnROYW1lPzogc3RyaW5nXG59XG5cbnR5cGUgU3RhcnRSZXRyeVN0cmVhbVBhcmFtcyA9IHtcbiAgc2Vzc2lvbklkOiBzdHJpbmdcbiAgcGxhY2Vob2xkZXJJZDogc3RyaW5nXG4gIHJldHJ5UmVxdWVzdDogUmV0cnlDb21wbGV0aW9uUmVxdWVzdFxuICBjYWxsYmFja3M6IFNlc3Npb25TdHJlYW1DYWxsYmFja3NcbiAgdDogVHJhbnNsYXRlRm5cbiAgYWN0aXZpdHlPcHRpb25zPzoge1xuICAgIGlzV2ViU2VhcmNoQWN0aXZlPzogYm9vbGVhblxuICAgIGlzRGVlcFNlYXJjaEFjdGl2ZT86IGJvb2xlYW5cbiAgICBoYXNBdHRhY2htZW50cz86IGJvb2xlYW5cbiAgICBhdHRhY2htZW50c0NvdW50PzogbnVtYmVyXG4gIH1cbiAgYWdlbnRJZD86IHN0cmluZyB8IG51bWJlclxuICBhZ2VudE5hbWU/OiBzdHJpbmdcbn1cblxudHlwZSBBY3RpdmVTdHJlYW0gPSB7XG4gIHNlc3Npb25JZDogc3RyaW5nXG4gIGNvbnRyb2xsZXI6IEFib3J0Q29udHJvbGxlclxuICBpc1N0b3BwZWQ6IGJvb2xlYW5cbn1cblxuLyoqXG4gKiBNw6F4aW1vIGRlIHNlc2lvbmVzIGdlbmVyYW5kbyBlbiBwYXJhbGVsby4gUHJvdGVnZSByZWQvcmVjdXJzb3MgZGVsIGNsaWVudGUuXG4gKiBBanVzdGFibGUgYSBmdXR1cm8gdsOtYSBmbGFnIGRlbCBob3N0LlxuICovXG5leHBvcnQgY29uc3QgTUFYX0NPTkNVUlJFTlRfU1RSRUFNUyA9IDRcblxuY29uc3QgU1RSRUFNX1RIUk9UVExFX01TID0gMTZcblxuY29uc3QgYWN0aXZlU3RyZWFtcyA9IG5ldyBNYXA8c3RyaW5nLCBBY3RpdmVTdHJlYW0+KClcblxuY29uc3Qgc3RvcmUgPSAoKSA9PiB1c2VTZXNzaW9uc1N0b3JlLmdldFN0YXRlKClcblxuY29uc3QgaXNTdHJlYW1BY3RpdmUgPSAoc2Vzc2lvbklkOiBzdHJpbmcpOiBib29sZWFuID0+IGFjdGl2ZVN0cmVhbXMuaGFzKHNlc3Npb25JZClcblxuY29uc3QgZ2V0QWN0aXZlU3RyZWFtQ291bnQgPSAoKTogbnVtYmVyID0+IGFjdGl2ZVN0cmVhbXMuc2l6ZVxuXG5jb25zdCBwYXJzZVNlc3Npb25TU0UgPSBhc3luYyAocmVzcG9uc2U6IFJlc3BvbnNlLCBhY3RpdmU6IEFjdGl2ZVN0cmVhbSwgcGFyYW1zOiBTdGFydFN0cmVhbVBhcmFtcyk6IFByb21pc2U8dm9pZD4gPT4ge1xuICBjb25zdCB7IHNlc3Npb25JZCwgcGxhY2Vob2xkZXJJZCwgY2FsbGJhY2tzLCB0IH0gPSBwYXJhbXNcbiAgY29uc3QgaGl0bEV4ZWN1dGlvbkNvbnRleHQgPSBwYXJhbXMuaGl0bEV4ZWN1dGlvbkNvbnRleHQgPz8gc2Vzc2lvbkhpdGxDb250ZXh0LmdldChzZXNzaW9uSWQpXG5cbiAgbGV0IHBlbmRpbmdDb250ZW50OiBzdHJpbmcgfCBudWxsID0gbnVsbFxuICBsZXQgdGhyb3R0bGVUaW1lcjogbnVtYmVyIHwgbnVsbCA9IG51bGxcblxuICBjb25zdCBmbHVzaFRvU3RvcmVzID0gKGNvbnRlbnQ6IHN0cmluZykgPT4ge1xuICAgIHNlc3Npb25TdHJlYW1pbmdUZXh0LnNldFRleHQoc2Vzc2lvbklkLCBwbGFjZWhvbGRlcklkLCBjb250ZW50KVxuICAgIGNhbGxiYWNrcy5vblN0cmVhbVVwZGF0ZT8uKGNvbnRlbnQpXG4gIH1cblxuICBjb25zdCBlbWl0VGhyb3R0bGVkID0gKGNvbnRlbnQ6IHN0cmluZykgPT4ge1xuICAgIHBlbmRpbmdDb250ZW50ID0gY29udGVudFxuICAgIGlmICh0aHJvdHRsZVRpbWVyICE9IG51bGwpIHJldHVyblxuICAgIHRocm90dGxlVGltZXIgPSB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aHJvdHRsZVRpbWVyID0gbnVsbFxuICAgICAgaWYgKHBlbmRpbmdDb250ZW50ICE9IG51bGwpIHtcbiAgICAgICAgY29uc3QgdG9FbWl0ID0gcGVuZGluZ0NvbnRlbnRcbiAgICAgICAgcGVuZGluZ0NvbnRlbnQgPSBudWxsXG4gICAgICAgIGZsdXNoVG9TdG9yZXModG9FbWl0KVxuICAgICAgfVxuICAgIH0sIFNUUkVBTV9USFJPVFRMRV9NUylcbiAgfVxuXG4gIGNvbnN0IGZsdXNoUGVuZGluZyA9ICgpID0+IHtcbiAgICBpZiAodGhyb3R0bGVUaW1lciAhPSBudWxsKSB7XG4gICAgICB3aW5kb3cuY2xlYXJUaW1lb3V0KHRocm90dGxlVGltZXIpXG4gICAgICB0aHJvdHRsZVRpbWVyID0gbnVsbFxuICAgIH1cbiAgICBpZiAocGVuZGluZ0NvbnRlbnQgIT0gbnVsbCkge1xuICAgICAgY29uc3QgdG9FbWl0ID0gcGVuZGluZ0NvbnRlbnRcbiAgICAgIHBlbmRpbmdDb250ZW50ID0gbnVsbFxuICAgICAgZmx1c2hUb1N0b3Jlcyh0b0VtaXQpXG4gICAgfVxuICB9XG5cbiAgY29uc3QgcmVhZGVyID0gcmVzcG9uc2UuYm9keT8uZ2V0UmVhZGVyKClcbiAgaWYgKCFyZWFkZXIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIHJlYWRlciBhdmFpbGFibGUnKVxuICB9XG5cbiAgY29uc3QgZGVjb2RlciA9IG5ldyBUZXh0RGVjb2RlcigpXG4gIGxldCBidWZmZXIgPSAnJ1xuICBsZXQgYWNjdW11bGF0ZWRDb250ZW50ID0gJydcbiAgbGV0IGhhc1N0YXJ0ZWRXcml0aW5nID0gZmFsc2VcbiAgLy8gXCJVc2FuZG8gU2tpbGxcIiBxdWVkYSB2aXNpYmxlIG1pZW50cmFzIGVsIG1vZGVsbyBwaWVuc2EgY29uIGxhIHNraWxsIGNhcmdhZGE7XG4gIC8vIGxvcyBkZWx0YXMgZGUgYHRoaW5raW5nYCBubyBsbyBwaXNhbiBoYXN0YSBsYSBwcsOzeGltYSBhY2Npw7NuIG8gZWwgcHJpbWVyIHRva2VuLlxuICBsZXQgaXNVc2luZ1NraWxsID0gZmFsc2VcblxuICBjb25zdCBlbnN1cmVXcml0aW5nU3RhcnRlZCA9ICgpID0+IHtcbiAgICBpZiAoaGFzU3RhcnRlZFdyaXRpbmcpIHJldHVyblxuICAgIGhhc1N0YXJ0ZWRXcml0aW5nID0gdHJ1ZVxuICAgIHN0b3JlKCkucGF0Y2hNZXRhKHNlc3Npb25JZCwgeyBpc0xvYWRpbmc6IHRydWUsIGlzV3JpdGluZzogdHJ1ZSB9KVxuICAgIHN0b3JlKCkuc2V0U3RhdHVzKHNlc3Npb25JZCwgJ3dyaXRpbmcnKVxuICAgIHN0b3JlKCkuc2V0QWN0aXZpdHkoc2Vzc2lvbklkLCBnZXRXcml0aW5nU3RyZWFtQWN0aXZpdHkodCkpXG4gICAgY2FsbGJhY2tzLm9uU3RhcnRXcml0aW5nPy4oKVxuICB9XG5cbiAgY29uc3QgYXBwbHlTdHJlYW1DaHVuayA9IChjaHVuazogc3RyaW5nKSA9PiB7XG4gICAgaWYgKCFjaHVuaykgcmV0dXJuXG4gICAgYWNjdW11bGF0ZWRDb250ZW50ID0gbWVyZ2VTdHJlYW1DaHVuayhhY2N1bXVsYXRlZENvbnRlbnQsIGNodW5rKVxuICAgIHJlYXNvbmluZ1N0b3JlLnN5bmNMaXZlTmFycmF0aW9uKHBsYWNlaG9sZGVySWQsIGFjY3VtdWxhdGVkQ29udGVudClcbiAgICBlbWl0VGhyb3R0bGVkKGFjY3VtdWxhdGVkQ29udGVudClcbiAgfVxuXG4gIGNvbnN0IGNsZWFyU3RyZWFtTGlrZUFuc3dlclJlc2V0ID0gKCkgPT4ge1xuICAgIGlmICh0aHJvdHRsZVRpbWVyICE9IG51bGwpIHtcbiAgICAgIHdpbmRvdy5jbGVhclRpbWVvdXQodGhyb3R0bGVUaW1lcilcbiAgICAgIHRocm90dGxlVGltZXIgPSBudWxsXG4gICAgfVxuICAgIHBlbmRpbmdDb250ZW50ID0gbnVsbFxuICAgIGFjY3VtdWxhdGVkQ29udGVudCA9ICcnXG4gICAgZmx1c2hUb1N0b3JlcygnJylcbiAgICByZWFzb25pbmdTdG9yZS5tYXJrQW5zd2VyUmVzZXQocGxhY2Vob2xkZXJJZClcbiAgfVxuXG4gIGNvbnN0IGFwcGx5U3RyZWFtQ29tcGxldGUgPSAocGF5bG9hZDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pID0+IHtcbiAgICBjb25zdCBmaW5pc2hQYXlsb2FkID0gYnVpbGRTZXNzaW9uRmluaXNoUGF5bG9hZChwYXlsb2FkLCBhY2N1bXVsYXRlZENvbnRlbnQpXG5cbiAgICByZWFzb25pbmdTdG9yZS5maW5pc2gocGxhY2Vob2xkZXJJZCwgZmluaXNoUGF5bG9hZC5yZWFzb25pbmcpXG4gICAgZmx1c2hQZW5kaW5nKClcbiAgICBzdG9yZSgpLnBhdGNoTWV0YShzZXNzaW9uSWQsIHsgaXNMb2FkaW5nOiBmYWxzZSwgaXNXcml0aW5nOiBmYWxzZSB9KVxuICAgIHN0b3JlKCkuc2V0QWN0aXZpdHkoc2Vzc2lvbklkLCBudWxsKVxuICAgIHN0b3JlKCkuc2V0U3RhdHVzKHNlc3Npb25JZCwgJ2NvbXBsZXRlJylcblxuICAgIGNhbGxiYWNrcy5vbkZpbmlzaFN0cmVhbT8uKGZpbmlzaFBheWxvYWQpXG5cbiAgICAvLyBFbCB0ZXh0byBlbiB2aXZvIE5PIHNlIGxpbXBpYSBhY8OhIGEgcHJvcMOzc2l0by4gRWwgcGxhY2Vob2xkZXIgc2UgdmEgY29uIGVsXG4gICAgLy8gYGRyb3BgIHF1ZSBoYWNlIGVsIGNvbnN1bWlkb3IsIHkgY29uIMOpbCBzdSBzdXNjcmlwY2nDs247IHZhY2lhcmxvIGFudGVzIGxvXG4gICAgLy8gZGVqYWJhIG1vbnRhZG8geSBzaW4gdGV4dG8gKGFsdHVyYSAwKSBkdXJhbnRlIH4yNW1zOiBlbCBmbGlja2VyIGRlIGZpbiBkZVxuICAgIC8vIHN0cmVhbS4gTm8gYWxjYW56YSBjb24gZGlmZXJpcmxvLCBwb3JxdWUgZXN0ZSBjbGVhciB2aWFqYSBlbiBTeW5jTGFuZVxuICAgIC8vIChzdG9yZSBleHRlcm5vKSB5IGVsIHN3YXAgZGUgbWVuc2FqZXMgZW4gRGVmYXVsdExhbmUsIGFzw60gcXVlIHNpZW1wcmUgc2VcbiAgICAvLyBjdWVsYSBlbiBlbCBtZWRpby4gRWwgc2xvdCBzZSBsaWJlcmEgZW4gZWwgcHLDs3hpbW8gYHN0YXJ0KClgIGRlIGxhIHNlc2nDs24sXG4gICAgLy8geSBlbiBzdG9wL2Vycm9yL2FwcHJvdmFsL2NhbWJpbyBkZSBzZXNpw7NuLCBxdWUgc8OtIGxsYW1hbiBgY2xlYXJgLlxuICB9XG5cbiAgdHJ5IHtcbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgaWYgKHNob3VsZEFib3J0U2Vzc2lvblN0cmVhbU9uU3RvcChhY3RpdmUuaXNTdG9wcGVkKSkge1xuICAgICAgICByZWFkZXIuY2FuY2VsKClcbiAgICAgICAgYnJlYWtcbiAgICAgIH1cblxuICAgICAgY29uc3QgeyBkb25lLCB2YWx1ZSB9ID0gYXdhaXQgcmVhZGVyLnJlYWQoKVxuICAgICAgaWYgKGRvbmUpIGJyZWFrXG5cbiAgICAgIGlmIChzaG91bGRBYm9ydFNlc3Npb25TdHJlYW1PblN0b3AoYWN0aXZlLmlzU3RvcHBlZCkpIHtcbiAgICAgICAgcmVhZGVyLmNhbmNlbCgpXG4gICAgICAgIGJyZWFrXG4gICAgICB9XG5cbiAgICAgIGJ1ZmZlciArPSBkZWNvZGVyLmRlY29kZSh2YWx1ZSwgeyBzdHJlYW06IHRydWUgfSlcbiAgICAgIGNvbnN0IHsgYmxvY2tzLCByZW1haW5kZXIgfSA9IHNwbGl0U3NlQnVmZmVyKGJ1ZmZlcilcbiAgICAgIGJ1ZmZlciA9IHJlbWFpbmRlclxuXG4gICAgICBmb3IgKGNvbnN0IGxpbmUgb2YgYmxvY2tzKSB7XG4gICAgICAgIGNvbnN0IHBhcnNlZEJsb2NrID0gcGFyc2VTc2VCbG9jayhsaW5lKVxuICAgICAgICBpZiAoIXBhcnNlZEJsb2NrKSBjb250aW51ZVxuXG4gICAgICAgIGNvbnN0IHsgZXZlbnRUeXBlLCBkYXRhU3RyIH0gPSBwYXJzZWRCbG9ja1xuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgZGF0YSA9IEpTT04ucGFyc2UoZGF0YVN0cilcblxuICAgICAgICAgIHN3aXRjaCAoZXZlbnRUeXBlKSB7XG4gICAgICAgICAgICBjYXNlICd0aGlua2luZyc6IHtcbiAgICAgICAgICAgICAgY29uc3QgeyBpbmRleCwgZGVsdGE6IHRoaW5raW5nRGVsdGEgfSA9IHJlc29sdmVUaGlua2luZ0RlbHRhKGRhdGEpXG4gICAgICAgICAgICAgIGlmIChzaG91bGRBcHBlbmRUaGlua2luZ1N0ZXAoaW5kZXgsIHRoaW5raW5nRGVsdGEpKSB7XG4gICAgICAgICAgICAgICAgcmVhc29uaW5nU3RvcmUuYXBwZW5kVGhpbmtpbmcocGxhY2Vob2xkZXJJZCwgaW5kZXgsIHRoaW5raW5nRGVsdGEpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgaWYgKCFoYXNTdGFydGVkV3JpdGluZykge1xuICAgICAgICAgICAgICAgIHN0b3JlKCkucGF0Y2hNZXRhKHNlc3Npb25JZCwgeyBpc0xvYWRpbmc6IHRydWUgfSlcbiAgICAgICAgICAgICAgICBzdG9yZSgpLnNldFN0YXR1cyhzZXNzaW9uSWQsICd0aGlua2luZycpXG4gICAgICAgICAgICAgICAgaWYgKCFpc1VzaW5nU2tpbGwpIHtcbiAgICAgICAgICAgICAgICAgIHN0b3JlKCkuc2V0QWN0aXZpdHkoc2Vzc2lvbklkLCB7IHBoYXNlOiAndGhpbmtpbmcnLCBtZXNzYWdlOiBnZXRUaGlua2luZ0xvYWRpbmdNZXNzYWdlKDAsIHQpIH0pXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIFNraWxsIEAtbWVuY2lvbmFkYSAoYWwgYWJyaXIgZWwgc3RyZWFtKSBvIGxsYW1hZGEgYSBgZ2V0X3NraWxsYC5cbiAgICAgICAgICAgIGNhc2UgJ3VzaW5nX3NraWxsJzpcbiAgICAgICAgICAgICAgaWYgKCFoYXNTdGFydGVkV3JpdGluZykge1xuICAgICAgICAgICAgICAgIGlzVXNpbmdTa2lsbCA9IHRydWVcbiAgICAgICAgICAgICAgICBzdG9yZSgpLnBhdGNoTWV0YShzZXNzaW9uSWQsIHsgaXNMb2FkaW5nOiB0cnVlIH0pXG4gICAgICAgICAgICAgICAgc3RvcmUoKS5zZXRTdGF0dXMoc2Vzc2lvbklkLCAndGhpbmtpbmcnKVxuICAgICAgICAgICAgICAgIHN0b3JlKCkuc2V0QWN0aXZpdHkoc2Vzc2lvbklkLCBnZXRVc2luZ1NraWxsQWN0aXZpdHkodCwgZGF0YS5za2lsbCkpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgYnJlYWtcblxuICAgICAgICAgICAgLy8gRWwgYmFja2VuZCBkZXNjYXJ0YSBsbyBlbWl0aWRvIHkgcmVpbmljaWEgbGEgcmVzcHVlc3RhIGRlc2RlIGNlcm8uXG4gICAgICAgICAgICBjYXNlICdhbnN3ZXJfcmVzZXQnOlxuICAgICAgICAgICAgICBjbGVhclN0cmVhbUxpa2VBbnN3ZXJSZXNldCgpXG4gICAgICAgICAgICAgIGJyZWFrXG5cbiAgICAgICAgICAgIGNhc2UgJ3JlYXNvbmluZ19zdGVwJzoge1xuICAgICAgICAgICAgICBjb25zdCBzdGVwVG9vbCA9IHJlc29sdmVSZWFzb25pbmdTdGVwVG9vbChkYXRhKVxuICAgICAgICAgICAgICBjb25zdCBzdGVwVHlwZSA9IHJlc29sdmVSZWFzb25pbmdTdGVwVHlwZShkYXRhKVxuICAgICAgICAgICAgICBpZiAoc2hvdWxkU2hvd1JlYXNvbmluZ1Rvb2xBY3Rpdml0eShzdGVwVG9vbCwgc3RlcFR5cGUsIGRhdGEuc3RhdHVzKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGxhYmVsID0gcmVzb2x2ZVRvb2xBY3Rpb25MYWJlbChzdGVwVG9vbCwgdCwgJ3ByZXNlbnQnKVxuICAgICAgICAgICAgICAgIGlmIChsYWJlbCkge1xuICAgICAgICAgICAgICAgICAgaXNVc2luZ1NraWxsID0gc3RlcFRvb2wgPT09ICdnZXRfc2tpbGwnXG4gICAgICAgICAgICAgICAgICBzdG9yZSgpLnBhdGNoTWV0YShzZXNzaW9uSWQsIHsgaXNMb2FkaW5nOiB0cnVlIH0pXG4gICAgICAgICAgICAgICAgICAvLyBFbCBzdGVwIGRlIGBnZXRfc2tpbGxgIGxsZWdhIGp1c3RvIGRlc3B1w6lzIGRlIGB1c2luZ19za2lsbGA6IG1hbnRpZW5lIGVsIG5vbWJyZS5cbiAgICAgICAgICAgICAgICAgIHN0b3JlKCkuc2V0QWN0aXZpdHkoXG4gICAgICAgICAgICAgICAgICAgIHNlc3Npb25JZCxcbiAgICAgICAgICAgICAgICAgICAgaXNVc2luZ1NraWxsID8gZ2V0VXNpbmdTa2lsbEFjdGl2aXR5KHQsIGRhdGEuYXJncz8ubmFtZSkgOiB7IHBoYXNlOiAnYWN0aW9uJywgbWVzc2FnZTogbGFiZWwgfVxuICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBpZiAoc2hvdWxkQXBwbHlSZWFzb25pbmdTdGVwSW5kZXgoZGF0YS5pKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHN0ZXBJbmRleCA9IGRhdGEuaVxuICAgICAgICAgICAgICAgIHJlYXNvbmluZ1N0b3JlLmNhcHR1cmVMZWFkaW5nRnJvbUJvZHkocGxhY2Vob2xkZXJJZCwgYWNjdW11bGF0ZWRDb250ZW50KVxuICAgICAgICAgICAgICAgIHJlYXNvbmluZ1N0b3JlLmFwcGx5U3RlcChwbGFjZWhvbGRlcklkLCB7IC4uLmRhdGEsIGk6IHN0ZXBJbmRleCB9IGFzIFJlYXNvbmluZ1N0ZXBQYXlsb2FkKVxuICAgICAgICAgICAgICAgIGlmIChyZWFzb25pbmdTdG9yZS5zaG91bGRDbGVhclN0cmVhbUZvckxlYWRpbmcocGxhY2Vob2xkZXJJZCwgYWNjdW11bGF0ZWRDb250ZW50KSkge1xuICAgICAgICAgICAgICAgICAgY2xlYXJTdHJlYW1MaWtlQW5zd2VyUmVzZXQoKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjYXNlICd0b2tlbic6IHtcbiAgICAgICAgICAgICAgY29uc3QgY2h1bmsgPSByZXNvbHZlU3RyZWFtVGV4dENodW5rKGRhdGEpXG4gICAgICAgICAgICAgIGVuc3VyZVdyaXRpbmdTdGFydGVkKClcbiAgICAgICAgICAgICAgYXBwbHlTdHJlYW1DaHVuayhjaHVuaylcbiAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY2FzZSAnY29udGVudCc6IHtcbiAgICAgICAgICAgICAgY29uc3QgY2h1bmsgPSByZXNvbHZlU3RyZWFtVGV4dENodW5rKGRhdGEpXG4gICAgICAgICAgICAgIGVuc3VyZVdyaXRpbmdTdGFydGVkKClcbiAgICAgICAgICAgICAgYXBwbHlTdHJlYW1DaHVuayhjaHVuaylcbiAgICAgICAgICAgICAgaWYgKGlzQ29tcGxldGVMaWtlU3NlUGF5bG9hZChkYXRhKSkge1xuICAgICAgICAgICAgICAgIGFwcGx5U3RyZWFtQ29tcGxldGUoZGF0YSlcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjYXNlICdub2RlJzpcbiAgICAgICAgICAgICAgaXNVc2luZ1NraWxsID0gZmFsc2VcbiAgICAgICAgICAgICAgaWYgKGlzQWdlbnRUcmFuc2Zlck5vZGUoZGF0YSkpIHtcbiAgICAgICAgICAgICAgICBzdG9yZSgpLnBhdGNoTWV0YShzZXNzaW9uSWQsIHsgaXNMb2FkaW5nOiB0cnVlIH0pXG4gICAgICAgICAgICAgICAgc3RvcmUoKS5zZXRTdGF0dXMoc2Vzc2lvbklkLCAndGhpbmtpbmcnKVxuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IG5vZGVNZXNzYWdlID0gcmVzb2x2ZU5vZGVTdHJlYW1NZXNzYWdlKGRhdGEpXG4gICAgICAgICAgICAgICAgaWYgKG5vZGVNZXNzYWdlKSB7XG4gICAgICAgICAgICAgICAgICBzdG9yZSgpLnBhdGNoTWV0YShzZXNzaW9uSWQsIHsgaXNMb2FkaW5nOiB0cnVlIH0pXG4gICAgICAgICAgICAgICAgICBzdG9yZSgpLnNldFN0YXR1cyhzZXNzaW9uSWQsICd0aGlua2luZycpXG4gICAgICAgICAgICAgICAgICBzdG9yZSgpLnNldEFjdGl2aXR5KFxuICAgICAgICAgICAgICAgICAgICBzZXNzaW9uSWQsXG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmVIaXRsTm9kZVN0cmVhbUFjdGl2aXR5KFxuICAgICAgICAgICAgICAgICAgICAgIG5vZGVNZXNzYWdlLFxuICAgICAgICAgICAgICAgICAgICAgIHQsXG4gICAgICAgICAgICAgICAgICAgICAgaGl0bEV4ZWN1dGlvbkNvbnRleHQgPz8gdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmVOb2RlVGhyZWFkSWQoZGF0YSlcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBicmVha1xuXG4gICAgICAgICAgICBjYXNlICdjb21wbGV0ZSc6XG4gICAgICAgICAgICAgIGFwcGx5U3RyZWFtQ29tcGxldGUoZGF0YSlcbiAgICAgICAgICAgICAgYnJlYWtcblxuICAgICAgICAgICAgY2FzZSAnYXBwcm92YWxfcmVxdWlyZWQnOiB7XG4gICAgICAgICAgICAgIGZsdXNoUGVuZGluZygpXG4gICAgICAgICAgICAgIC8vIFByZWFwcm9iYWRvIChhdXRvLWFwcHJvdmUgbyBkZXRlY2Npw7NuIG1hbnVhbCk6IGVsIHN0cmVhbSBubyBzZSBjb3J0YSxcbiAgICAgICAgICAgICAgLy8gc2lndWUgZWplY3V0YW5kbyBsYXMgYWNjaW9uZXMgc2luIGVzcGVyYXIgZGVjaXNpw7NuIGRlbCB1c3VhcmlvLlxuICAgICAgICAgICAgICBjb25zdCBpc1ByZUFwcHJvdmVkID0gaXNBcHByb3ZhbFByZUFwcHJvdmVkKGRhdGEpXG4gICAgICAgICAgICAgIHN0b3JlKCkucGF0Y2hNZXRhKHNlc3Npb25JZCwgeyBpc1dyaXRpbmc6IGZhbHNlIH0pXG4gICAgICAgICAgICAgIGlmICghaXNQcmVBcHByb3ZlZCkge1xuICAgICAgICAgICAgICAgIHJlYXNvbmluZ1N0b3JlLmZpbmlzaChwbGFjZWhvbGRlcklkLCAoZGF0YS5yZWFzb25pbmcgYXMgUmVhc29uaW5nVHJhY2VQYXlsb2FkIHwgbnVsbCkgPz8gbnVsbClcbiAgICAgICAgICAgICAgICBzdG9yZSgpLnBhdGNoTWV0YShzZXNzaW9uSWQsIHsgaXNMb2FkaW5nOiBmYWxzZSB9KVxuICAgICAgICAgICAgICAgIHNlc3Npb25TdHJlYW1pbmdUZXh0LmNsZWFyKHNlc3Npb25JZClcbiAgICAgICAgICAgICAgICBzdG9yZSgpLnNldEFjdGl2aXR5KHNlc3Npb25JZCwgbnVsbClcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBzdG9yZSgpLnNldFN0YXR1cyhzZXNzaW9uSWQsICdhd2FpdGluZ19hcHByb3ZhbCcpXG4gICAgICAgICAgICAgIGNhbGxiYWNrcy5vbkFwcHJvdmFsUmVxdWlyZWQ/LihkYXRhIGFzIEFwcHJvdmFsUmVxdWVzdCwgYWNjdW11bGF0ZWRDb250ZW50KVxuICAgICAgICAgICAgICBpZiAoc2hvdWxkUmVzdW1lSGl0bEFmdGVyUHJlQXBwcm92YWwoaXNQcmVBcHByb3ZlZCwgZGF0YS5wZW5kaW5nX2FjdGlvbnMpKSB7XG4gICAgICAgICAgICAgICAgc3RvcmUoKS5wYXRjaE1ldGEoc2Vzc2lvbklkLCB7IGlzTG9hZGluZzogdHJ1ZSB9KVxuICAgICAgICAgICAgICAgIHN0b3JlKCkuc2V0U3RhdHVzKHNlc3Npb25JZCwgJ3RoaW5raW5nJylcbiAgICAgICAgICAgICAgICBzdG9yZSgpLnNldEFjdGl2aXR5KHNlc3Npb25JZCwgcmVzb2x2ZUluaXRpYWxIaXRsU3RyZWFtQWN0aXZpdHkodCwgaGl0bEV4ZWN1dGlvbkNvbnRleHQgPz8gdW5kZWZpbmVkKSlcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjYXNlICdlcnJvcic6XG4gICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1NTRSBFcnJvcjonLCBkYXRhLmVycm9yKVxuICAgICAgICAgICAgICBmbHVzaFBlbmRpbmcoKVxuICAgICAgICAgICAgICBzZXNzaW9uU3RyZWFtaW5nVGV4dC5jbGVhcihzZXNzaW9uSWQpXG4gICAgICAgICAgICAgIHN0b3JlKCkucGF0Y2hNZXRhKHNlc3Npb25JZCwgeyBpc0xvYWRpbmc6IGZhbHNlLCBpc1dyaXRpbmc6IGZhbHNlIH0pXG4gICAgICAgICAgICAgIHN0b3JlKCkuc2V0QWN0aXZpdHkoc2Vzc2lvbklkLCBudWxsKVxuICAgICAgICAgICAgICBzdG9yZSgpLnNldEVycm9yKHNlc3Npb25JZCwgeyB0eXBlOiBkYXRhLmVycm9yPy50eXBlLCBtZXNzYWdlOiBkYXRhLmVycm9yPy5tZXNzYWdlIH0pXG4gICAgICAgICAgICAgIHN0b3JlKCkuc2V0U3RhdHVzKHNlc3Npb25JZCwgJ2Vycm9yJylcbiAgICAgICAgICAgICAgY2FsbGJhY2tzLm9uRXJyb3I/LihkYXRhLmVycm9yPy50eXBlLCBkYXRhLmVycm9yPy5tZXNzYWdlKVxuICAgICAgICAgICAgICBicmVha1xuXG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICBjb25zb2xlLndhcm4oJ1Vua25vd24gU1NFIGV2ZW50IHR5cGU6JywgZXZlbnRUeXBlKVxuICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAocGFyc2VFcnJvcikge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIHBhcnNpbmcgU1NFIGRhdGE6JywgcGFyc2VFcnJvciwgZGF0YVN0cilcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSBmaW5hbGx5IHtcbiAgICBmbHVzaFBlbmRpbmcoKVxuICB9XG59XG5cbi8qKlxuICogTWFuYWdlciBzaW5nbGV0b24gKG1vZHVsZS1sZXZlbCkgcXVlIGNvcnJlIE4gc3RyZWFtcyBkZWwgb3JjaGVzdHJhdG9yIGVuXG4gKiBwYXJhbGVsbywgdW5vIHBvciBgc2Vzc2lvbklkYC4gU29icmV2aXZlIGEgY2FtYmlvcyBkZSB2aXN0YSB5IGFsIGNpZXJyZSBkZWxcbiAqIG1vZGFsOiBsb3Mgc3RyZWFtcyBzb2xvIHNlIGNhbmNlbGFuIGNvbiBzdG9wIGV4cGzDrWNpdG8gZGVsIHVzdWFyaW8gbyBhbFxuICogY29tcGxldGFyL2Vycm9yYXIuXG4gKi9cbmV4cG9ydCBjb25zdCBzZXNzaW9uU3RyZWFtTWFuYWdlciA9IHtcbiAgaXNBY3RpdmU6IGlzU3RyZWFtQWN0aXZlLFxuICBnZXRBY3RpdmVDb3VudDogZ2V0QWN0aXZlU3RyZWFtQ291bnQsXG4gIGdldEFjdGl2ZVNlc3Npb25JZHM6ICgpOiBzdHJpbmdbXSA9PiBBcnJheS5mcm9tKGFjdGl2ZVN0cmVhbXMua2V5cygpKSxcblxuICBhc3luYyBzdGFydFN0cmVhbShwYXJhbXM6IFN0YXJ0U3RyZWFtUGFyYW1zKTogUHJvbWlzZTxTdGFydFN0cmVhbVJlc3VsdD4ge1xuICAgIGVuc3VyZVNlc3Npb25Ob3RpZmljYXRpb25zSW5pdGlhbGl6ZWQoKVxuXG4gICAgY29uc3QgeyBzZXNzaW9uSWQsIHBsYWNlaG9sZGVySWQsIHJlcXVlc3QsIGNhbGxiYWNrcywgdCwgYWN0aXZpdHlPcHRpb25zLCBhZ2VudElkLCBhZ2VudE5hbWUgfSA9IHBhcmFtc1xuXG4gICAgY29uc3Qgc3RhcnRHdWFyZCA9IHJlc29sdmVTdGFydFN0cmVhbUd1YXJkKFxuICAgICAgaXNTdHJlYW1BY3RpdmUoc2Vzc2lvbklkKSxcbiAgICAgIGdldEFjdGl2ZVN0cmVhbUNvdW50KCksXG4gICAgICBNQVhfQ09OQ1VSUkVOVF9TVFJFQU1TXG4gICAgKVxuICAgIGlmICghc3RhcnRHdWFyZC5hbGxvd2VkKSB7XG4gICAgICByZXR1cm4geyBzdGFydGVkOiBmYWxzZSwgcmVhc29uOiBzdGFydEd1YXJkLnJlYXNvbiB9XG4gICAgfVxuXG4gICAgY29uc3QgY29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKVxuICAgIGNvbnN0IGFjdGl2ZTogQWN0aXZlU3RyZWFtID0geyBzZXNzaW9uSWQsIGNvbnRyb2xsZXIsIGlzU3RvcHBlZDogZmFsc2UgfVxuICAgIGFjdGl2ZVN0cmVhbXMuc2V0KHNlc3Npb25JZCwgYWN0aXZlKVxuXG4gICAgc3RvcmUoKS5lbnN1cmVTZXNzaW9uKHNlc3Npb25JZClcbiAgICBzdG9yZSgpLnBhdGNoTWV0YShzZXNzaW9uSWQsIHtcbiAgICAgIHBsYWNlaG9sZGVySWQsXG4gICAgICBlcnJvcjogbnVsbCxcbiAgICAgIGlzTG9hZGluZzogdHJ1ZSxcbiAgICAgIGlzV3JpdGluZzogZmFsc2UsXG4gICAgICAuLi5wYXRjaE1ldGFBZ2VudEZpZWxkcyhhZ2VudElkLCBhZ2VudE5hbWUpLFxuICAgIH0pXG4gICAgc3RvcmUoKS5zZXRTdGF0dXMoc2Vzc2lvbklkLCAndGhpbmtpbmcnKVxuICAgIHNlc3Npb25TdHJlYW1pbmdUZXh0LnN0YXJ0KHNlc3Npb25JZCwgcGxhY2Vob2xkZXJJZClcbiAgICByZWFzb25pbmdTdG9yZS5zdGFydChwbGFjZWhvbGRlcklkKVxuICAgIHN0b3JlKCkuc2V0QWN0aXZpdHkoc2Vzc2lvbklkLCBnZXRJbml0aWFsU3RyZWFtQWN0aXZpdHkodCwgYWN0aXZpdHlPcHRpb25zID8/IHt9KSlcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IG1haWEuT3JjaGVzdHJhdG9yLm9yY2hlc3RyYXRvcihyZXF1ZXN0LCBjb250cm9sbGVyLnNpZ25hbClcbiAgICAgIGF3YWl0IHBhcnNlU2Vzc2lvblNTRShyZXNwb25zZSwgYWN0aXZlLCBwYXJhbXMpXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGlmICghYWN0aXZlLmlzU3RvcHBlZCkge1xuICAgICAgICBzZXNzaW9uU3RyZWFtaW5nVGV4dC5jbGVhcihzZXNzaW9uSWQpXG4gICAgICAgIHN0b3JlKCkucGF0Y2hNZXRhKHNlc3Npb25JZCwgeyBpc0xvYWRpbmc6IGZhbHNlLCBpc1dyaXRpbmc6IGZhbHNlIH0pXG4gICAgICAgIHN0b3JlKCkuc2V0QWN0aXZpdHkoc2Vzc2lvbklkLCBudWxsKVxuICAgICAgICBzdG9yZSgpLnNldFN0YXR1cyhzZXNzaW9uSWQsICdlcnJvcicpXG4gICAgICAgIGNhbGxiYWNrcy5vbkVycm9yPy4oKVxuICAgICAgfVxuICAgIH0gZmluYWxseSB7XG4gICAgICBhY3RpdmVTdHJlYW1zLmRlbGV0ZShzZXNzaW9uSWQpXG4gICAgfVxuXG4gICAgcmV0dXJuIHsgc3RhcnRlZDogdHJ1ZSB9XG4gIH0sXG5cbiAgLyoqIFJlc3VtZSBISVRMIChgY29udGludWUtdGhyZWFkYCkga2V5ZWQgcG9yIHNlc3Npb25JZCDigJQgbWlzbW8gbW90b3IgcXVlIG9yY2hlc3RyYXRvci4gKi9cbiAgYXN5bmMgc3RhcnRDb250aW51ZVN0cmVhbShwYXJhbXM6IFN0YXJ0Q29udGludWVTdHJlYW1QYXJhbXMpOiBQcm9taXNlPFN0YXJ0U3RyZWFtUmVzdWx0PiB7XG4gICAgZW5zdXJlU2Vzc2lvbk5vdGlmaWNhdGlvbnNJbml0aWFsaXplZCgpXG5cbiAgICBjb25zdCB7IHNlc3Npb25JZCwgcGxhY2Vob2xkZXJJZCwgY29udGludWVSZXF1ZXN0LCBjYWxsYmFja3MsIHQsIGhpdGxFeGVjdXRpb25Db250ZXh0LCBhZ2VudElkLCBhZ2VudE5hbWUgfSA9IHBhcmFtc1xuXG4gICAgY29uc3QgY29udGludWVHdWFyZCA9IHJlc29sdmVTdGFydFN0cmVhbUd1YXJkKFxuICAgICAgaXNTdHJlYW1BY3RpdmUoc2Vzc2lvbklkKSxcbiAgICAgIGdldEFjdGl2ZVN0cmVhbUNvdW50KCksXG4gICAgICBNQVhfQ09OQ1VSUkVOVF9TVFJFQU1TXG4gICAgKVxuICAgIGlmICghY29udGludWVHdWFyZC5hbGxvd2VkKSB7XG4gICAgICByZXR1cm4geyBzdGFydGVkOiBmYWxzZSwgcmVhc29uOiBjb250aW51ZUd1YXJkLnJlYXNvbiB9XG4gICAgfVxuXG4gICAgaWYgKGhpdGxFeGVjdXRpb25Db250ZXh0KSB7XG4gICAgICBzZXNzaW9uSGl0bENvbnRleHQuc2V0KHNlc3Npb25JZCwgaGl0bEV4ZWN1dGlvbkNvbnRleHQpXG4gICAgfVxuXG4gICAgY29uc3QgY29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKVxuICAgIGNvbnN0IGFjdGl2ZTogQWN0aXZlU3RyZWFtID0geyBzZXNzaW9uSWQsIGNvbnRyb2xsZXIsIGlzU3RvcHBlZDogZmFsc2UgfVxuICAgIGFjdGl2ZVN0cmVhbXMuc2V0KHNlc3Npb25JZCwgYWN0aXZlKVxuXG4gICAgc3RvcmUoKS5lbnN1cmVTZXNzaW9uKHNlc3Npb25JZClcbiAgICBzdG9yZSgpLnBhdGNoTWV0YShzZXNzaW9uSWQsIHtcbiAgICAgIHBsYWNlaG9sZGVySWQsXG4gICAgICBlcnJvcjogbnVsbCxcbiAgICAgIGlzTG9hZGluZzogdHJ1ZSxcbiAgICAgIGlzV3JpdGluZzogZmFsc2UsXG4gICAgICAuLi5wYXRjaE1ldGFBZ2VudEZpZWxkcyhhZ2VudElkLCBhZ2VudE5hbWUpLFxuICAgIH0pXG4gICAgc3RvcmUoKS5zZXRTdGF0dXMoc2Vzc2lvbklkLCAndGhpbmtpbmcnKVxuICAgIHNlc3Npb25TdHJlYW1pbmdUZXh0LnN0YXJ0KHNlc3Npb25JZCwgcGxhY2Vob2xkZXJJZClcbiAgICBzdG9yZSgpLnNldEFjdGl2aXR5KFxuICAgICAgc2Vzc2lvbklkLFxuICAgICAgcmVzb2x2ZUluaXRpYWxIaXRsU3RyZWFtQWN0aXZpdHkodCwgaGl0bEV4ZWN1dGlvbkNvbnRleHQgPz8gc2Vzc2lvbkhpdGxDb250ZXh0LmdldChzZXNzaW9uSWQpID8/IHVuZGVmaW5lZClcbiAgICApXG5cbiAgICBjb25zdCBzc2VQYXJhbXM6IFN0YXJ0U3RyZWFtUGFyYW1zID0ge1xuICAgICAgc2Vzc2lvbklkLFxuICAgICAgcGxhY2Vob2xkZXJJZCxcbiAgICAgIHJlcXVlc3Q6IHt9IGFzIE9yY2hlc3RyYXRvclJlcXVlc3QsXG4gICAgICBjYWxsYmFja3MsXG4gICAgICB0LFxuICAgICAgaGl0bEV4ZWN1dGlvbkNvbnRleHQ6IGhpdGxFeGVjdXRpb25Db250ZXh0ID8/IHNlc3Npb25IaXRsQ29udGV4dC5nZXQoc2Vzc2lvbklkKSxcbiAgICAgIGFnZW50SWQsXG4gICAgICBhZ2VudE5hbWUsXG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgbWFpYS5PcmNoZXN0cmF0b3IuY29udGludWVUaHJlYWQoY29udGludWVSZXF1ZXN0LCBjb250cm9sbGVyLnNpZ25hbClcbiAgICAgIGlmICghcmVzcG9uc2Uub2spIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBjb250aW51ZS10aHJlYWQgZmFpbGVkOiAke3Jlc3BvbnNlLnN0YXR1c31gKVxuICAgICAgfVxuICAgICAgYXdhaXQgcGFyc2VTZXNzaW9uU1NFKHJlc3BvbnNlLCBhY3RpdmUsIHNzZVBhcmFtcylcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgaWYgKCFhY3RpdmUuaXNTdG9wcGVkKSB7XG4gICAgICAgIHNlc3Npb25TdHJlYW1pbmdUZXh0LmNsZWFyKHNlc3Npb25JZClcbiAgICAgICAgc3RvcmUoKS5wYXRjaE1ldGEoc2Vzc2lvbklkLCB7IGlzTG9hZGluZzogZmFsc2UsIGlzV3JpdGluZzogZmFsc2UgfSlcbiAgICAgICAgc3RvcmUoKS5zZXRBY3Rpdml0eShzZXNzaW9uSWQsIG51bGwpXG4gICAgICAgIHN0b3JlKCkuc2V0U3RhdHVzKHNlc3Npb25JZCwgJ2Vycm9yJylcbiAgICAgICAgY2FsbGJhY2tzLm9uRXJyb3I/LigpXG4gICAgICB9XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGFjdGl2ZVN0cmVhbXMuZGVsZXRlKHNlc3Npb25JZClcbiAgICAgIHNlc3Npb25IaXRsQ29udGV4dC5jbGVhcihzZXNzaW9uSWQpXG4gICAgfVxuXG4gICAgcmV0dXJuIHsgc3RhcnRlZDogdHJ1ZSB9XG4gIH0sXG5cbiAgLyoqIFJlZ2VuZXJhIGxhIHJlc3B1ZXN0YSBkZSB1biB0dXJubyAoYHJldHJ5X2NvbXBsZXRpb25gKSDigJQgbWlzbW8gbW90b3IgU1NFIHF1ZSBvcmNoZXN0cmF0b3IuICovXG4gIGFzeW5jIHN0YXJ0UmV0cnlTdHJlYW0ocGFyYW1zOiBTdGFydFJldHJ5U3RyZWFtUGFyYW1zKTogUHJvbWlzZTxTdGFydFN0cmVhbVJlc3VsdD4ge1xuICAgIGVuc3VyZVNlc3Npb25Ob3RpZmljYXRpb25zSW5pdGlhbGl6ZWQoKVxuXG4gICAgY29uc3QgeyBzZXNzaW9uSWQsIHBsYWNlaG9sZGVySWQsIHJldHJ5UmVxdWVzdCwgY2FsbGJhY2tzLCB0LCBhY3Rpdml0eU9wdGlvbnMsIGFnZW50SWQsIGFnZW50TmFtZSB9ID0gcGFyYW1zXG5cbiAgICBjb25zdCByZXRyeUd1YXJkID0gcmVzb2x2ZVN0YXJ0U3RyZWFtR3VhcmQoXG4gICAgICBpc1N0cmVhbUFjdGl2ZShzZXNzaW9uSWQpLFxuICAgICAgZ2V0QWN0aXZlU3RyZWFtQ291bnQoKSxcbiAgICAgIE1BWF9DT05DVVJSRU5UX1NUUkVBTVNcbiAgICApXG4gICAgaWYgKCFyZXRyeUd1YXJkLmFsbG93ZWQpIHtcbiAgICAgIHJldHVybiB7IHN0YXJ0ZWQ6IGZhbHNlLCByZWFzb246IHJldHJ5R3VhcmQucmVhc29uIH1cbiAgICB9XG5cbiAgICBjb25zdCBjb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpXG4gICAgY29uc3QgYWN0aXZlOiBBY3RpdmVTdHJlYW0gPSB7IHNlc3Npb25JZCwgY29udHJvbGxlciwgaXNTdG9wcGVkOiBmYWxzZSB9XG4gICAgYWN0aXZlU3RyZWFtcy5zZXQoc2Vzc2lvbklkLCBhY3RpdmUpXG5cbiAgICBzdG9yZSgpLmVuc3VyZVNlc3Npb24oc2Vzc2lvbklkKVxuICAgIHN0b3JlKCkucGF0Y2hNZXRhKHNlc3Npb25JZCwge1xuICAgICAgcGxhY2Vob2xkZXJJZCxcbiAgICAgIGVycm9yOiBudWxsLFxuICAgICAgaXNMb2FkaW5nOiB0cnVlLFxuICAgICAgaXNXcml0aW5nOiBmYWxzZSxcbiAgICAgIC4uLnBhdGNoTWV0YUFnZW50RmllbGRzKGFnZW50SWQsIGFnZW50TmFtZSksXG4gICAgfSlcbiAgICBzdG9yZSgpLnNldFN0YXR1cyhzZXNzaW9uSWQsICd0aGlua2luZycpXG4gICAgc2Vzc2lvblN0cmVhbWluZ1RleHQuc3RhcnQoc2Vzc2lvbklkLCBwbGFjZWhvbGRlcklkKVxuICAgIHN0b3JlKCkuc2V0QWN0aXZpdHkoc2Vzc2lvbklkLCBnZXRJbml0aWFsU3RyZWFtQWN0aXZpdHkodCwgYWN0aXZpdHlPcHRpb25zID8/IHt9KSlcblxuICAgIGNvbnN0IHNzZVBhcmFtczogU3RhcnRTdHJlYW1QYXJhbXMgPSB7XG4gICAgICBzZXNzaW9uSWQsXG4gICAgICBwbGFjZWhvbGRlcklkLFxuICAgICAgcmVxdWVzdDoge30gYXMgT3JjaGVzdHJhdG9yUmVxdWVzdCxcbiAgICAgIGNhbGxiYWNrcyxcbiAgICAgIHQsXG4gICAgICBhY3Rpdml0eU9wdGlvbnMsXG4gICAgICBhZ2VudElkLFxuICAgICAgYWdlbnROYW1lLFxuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IG1haWEuT3JjaGVzdHJhdG9yLnJldHJ5Q29tcGxldGlvbihyZXRyeVJlcXVlc3QsIGNvbnRyb2xsZXIuc2lnbmFsKVxuICAgICAgaWYgKCFyZXNwb25zZS5vaykge1xuICAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09PSA0MDQpIHtcbiAgICAgICAgICBsZXQgZGV0YWlsOiBzdHJpbmcgfCB1bmRlZmluZWRcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgZGF0YSA9IChhd2FpdCByZXNwb25zZS5qc29uKCkpIGFzIHsgZGV0YWlsPzogc3RyaW5nIH1cbiAgICAgICAgICAgIGRldGFpbCA9IHR5cGVvZiBkYXRhLmRldGFpbCA9PT0gJ3N0cmluZycgPyBkYXRhLmRldGFpbCA6IHVuZGVmaW5lZFxuICAgICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgICAgZGV0YWlsID0gdW5kZWZpbmVkXG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChpc1JldHJ5VHVybk5vdEZvdW5kUmVzcG9uc2UocmVzcG9uc2Uuc3RhdHVzLCBkZXRhaWwpKSB7XG4gICAgICAgICAgICBzZXNzaW9uU3RyZWFtaW5nVGV4dC5jbGVhcihzZXNzaW9uSWQpXG4gICAgICAgICAgICBzdG9yZSgpLnBhdGNoTWV0YShzZXNzaW9uSWQsIHsgaXNMb2FkaW5nOiBmYWxzZSwgaXNXcml0aW5nOiBmYWxzZSwgcGxhY2Vob2xkZXJJZDogbnVsbCB9KVxuICAgICAgICAgICAgc3RvcmUoKS5zZXRBY3Rpdml0eShzZXNzaW9uSWQsIG51bGwpXG4gICAgICAgICAgICBzdG9yZSgpLnNldFN0YXR1cyhzZXNzaW9uSWQsICdpZGxlJylcbiAgICAgICAgICAgIGFjdGl2ZVN0cmVhbXMuZGVsZXRlKHNlc3Npb25JZClcbiAgICAgICAgICAgIHJldHVybiB7IHN0YXJ0ZWQ6IGZhbHNlLCByZWFzb246ICd0dXJuX25vdF9mb3VuZCcgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYHJldHJ5X2NvbXBsZXRpb24gZmFpbGVkOiAke3Jlc3BvbnNlLnN0YXR1c31gKVxuICAgICAgfVxuICAgICAgYXdhaXQgcGFyc2VTZXNzaW9uU1NFKHJlc3BvbnNlLCBhY3RpdmUsIHNzZVBhcmFtcylcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgaWYgKCFhY3RpdmUuaXNTdG9wcGVkKSB7XG4gICAgICAgIHNlc3Npb25TdHJlYW1pbmdUZXh0LmNsZWFyKHNlc3Npb25JZClcbiAgICAgICAgc3RvcmUoKS5wYXRjaE1ldGEoc2Vzc2lvbklkLCB7IGlzTG9hZGluZzogZmFsc2UsIGlzV3JpdGluZzogZmFsc2UgfSlcbiAgICAgICAgc3RvcmUoKS5zZXRBY3Rpdml0eShzZXNzaW9uSWQsIG51bGwpXG4gICAgICAgIHN0b3JlKCkuc2V0U3RhdHVzKHNlc3Npb25JZCwgJ2Vycm9yJylcbiAgICAgICAgY2FsbGJhY2tzLm9uRXJyb3I/LigpXG4gICAgICB9XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGFjdGl2ZVN0cmVhbXMuZGVsZXRlKHNlc3Npb25JZClcbiAgICB9XG5cbiAgICByZXR1cm4geyBzdGFydGVkOiB0cnVlIH1cbiAgfSxcblxuICAvKiogQ2FuY2VsYWNpw7NuIGV4cGzDrWNpdGEgZGVsIHVzdWFyaW8gKG1lbnNhamUgXCJjYW5jZWxhZG9cIikuICovXG4gIHN0b3BTdHJlYW0oc2Vzc2lvbklkOiBzdHJpbmcsIGNhbGxiYWNrcz86IFNlc3Npb25TdHJlYW1DYWxsYmFja3MpIHtcbiAgICBjb25zdCBhY3RpdmUgPSBhY3RpdmVTdHJlYW1zLmdldChzZXNzaW9uSWQpXG4gICAgaWYgKCFhY3RpdmUpIHJldHVyblxuICAgIGFjdGl2ZS5pc1N0b3BwZWQgPSB0cnVlXG4gICAgYWN0aXZlLmNvbnRyb2xsZXIuYWJvcnQoKVxuICAgIGFjdGl2ZVN0cmVhbXMuZGVsZXRlKHNlc3Npb25JZClcbiAgICAvLyBFbCBwYXJjaWFsIHNlIHJlc2NhdGEgYW50ZXMgZGUgbGltcGlhcjogZWwgYmFja2VuZCBsbyBwZXJzaXN0ZSwgcGVybyBzaSBubyBsb1xuICAgIC8vIHBhc2Ftb3MgYWwgY2FsbGJhY2sgZGVzYXBhcmVjZSBkZSBwYW50YWxsYSBoYXN0YSBlbCBwcsOzeGltbyBmZXRjaCBkZSBsYSBzZXNpw7NuLlxuICAgIGNvbnN0IHBhcnRpYWxUZXh0ID0gc2Vzc2lvblN0cmVhbWluZ1RleHQuZ2V0U25hcHNob3Qoc2Vzc2lvbklkKS50ZXh0XG4gICAgc2Vzc2lvblN0cmVhbWluZ1RleHQuY2xlYXIoc2Vzc2lvbklkKVxuICAgIHN0b3JlKCkucGF0Y2hNZXRhKHNlc3Npb25JZCwgeyBpc0xvYWRpbmc6IGZhbHNlLCBpc1dyaXRpbmc6IGZhbHNlIH0pXG4gICAgc3RvcmUoKS5zZXRBY3Rpdml0eShzZXNzaW9uSWQsIG51bGwpXG4gICAgc3RvcmUoKS5zZXRTdGF0dXMoc2Vzc2lvbklkLCAnY2FuY2VsbGVkJylcbiAgICBjYWxsYmFja3M/Lm9uU3RvcD8uKHBhcnRpYWxUZXh0KVxuICB9LFxuXG4gIC8qKiBBYm9ydGEgc2luIG1hcmNhciBcImNhbmNlbGFkb1wiICh1c28gaW50ZXJubyAvIGxpbXBpZXphKS4gKi9cbiAgYWJvcnRTaWxlbnRseShzZXNzaW9uSWQ6IHN0cmluZykge1xuICAgIGNvbnN0IGFjdGl2ZSA9IGFjdGl2ZVN0cmVhbXMuZ2V0KHNlc3Npb25JZClcbiAgICBpZiAoIWFjdGl2ZSkgcmV0dXJuXG4gICAgYWN0aXZlLmlzU3RvcHBlZCA9IHRydWVcbiAgICBhY3RpdmUuY29udHJvbGxlci5hYm9ydCgpXG4gICAgYWN0aXZlU3RyZWFtcy5kZWxldGUoc2Vzc2lvbklkKVxuICAgIHNlc3Npb25TdHJlYW1pbmdUZXh0LmNsZWFyKHNlc3Npb25JZClcbiAgICBzdG9yZSgpLnBhdGNoTWV0YShzZXNzaW9uSWQsIHsgaXNMb2FkaW5nOiBmYWxzZSwgaXNXcml0aW5nOiBmYWxzZSB9KVxuICAgIHN0b3JlKCkuc2V0QWN0aXZpdHkoc2Vzc2lvbklkLCBudWxsKVxuICAgIGlmIChzaG91bGRTZXRJZGxlT25TaWxlbnRBYm9ydChzdG9yZSgpLmdldE1ldGEoc2Vzc2lvbklkKT8uc3RhdHVzKSkge1xuICAgICAgc3RvcmUoKS5zZXRTdGF0dXMoc2Vzc2lvbklkLCAnaWRsZScpXG4gICAgfVxuICB9LFxuXG4gIGFib3J0QWxsKCkge1xuICAgIEFycmF5LmZyb20oYWN0aXZlU3RyZWFtcy5rZXlzKCkpLmZvckVhY2goc2Vzc2lvbklkID0+IHRoaXMuYWJvcnRTaWxlbnRseShzZXNzaW9uSWQpKVxuICB9LFxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU9BLElBQUksTUFBTSxxQkFBcUI7QUFFdEMsU0FDRUMsd0JBQXdCLEVBQ3hCQyx5QkFBeUIsRUFDekJDLHFCQUFxQixFQUNyQkMsd0JBQXdCLEVBQ3hCQyw2QkFBNkIsRUFDN0JDLGdDQUFnQyxFQUNoQ0Msc0JBQXNCLFFBQ2pCLG9DQUFvQztBQUUzQyxTQUFTQyx3QkFBd0IsRUFBRUMsZ0JBQWdCLFFBQVEsOEJBQThCO0FBQ3pGLFNBQVNDLGNBQWMsUUFBUSwrQkFBK0I7QUFFOUQsU0FBU0Msb0JBQW9CLFFBQVEsd0JBQXdCO0FBQzdELFNBQVNDLGdCQUFnQixRQUFRLG9CQUFvQjtBQUNyRCxTQUFTQyxxQ0FBcUMsUUFBUSx3QkFBd0I7QUFDOUUsU0FBU0Msa0JBQWtCLFFBQVEsc0JBQXNCO0FBRXpELFNBQ0VDLHlCQUF5QixFQUN6QkMsbUJBQW1CLEVBQ25CQyxxQkFBcUIsRUFDckJDLDJCQUEyQixFQUMzQkMsYUFBYSxFQUNiQyxvQkFBb0IsRUFDcEJDLHdCQUF3QixFQUN4QkMsbUJBQW1CLEVBQ25CQyx3QkFBd0IsRUFDeEJDLHdCQUF3QixFQUN4QkMsdUJBQXVCLEVBQ3ZCQyxzQkFBc0IsRUFDdEJDLG9CQUFvQixFQUNwQkMsOEJBQThCLEVBQzlCQyw2QkFBNkIsRUFDN0JDLHdCQUF3QixFQUN4QkMsZ0NBQWdDLEVBQ2hDQywwQkFBMEIsRUFDMUJDLCtCQUErQixFQUMvQkMsY0FBYyxRQUNULGdDQUFnQzs7QUFNdkM7O0FBcURBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTyxJQUFNQyxzQkFB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
|
|
723
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJtYWlhIiwiZ2V0SW5pdGlhbFN0cmVhbUFjdGl2aXR5IiwiZ2V0VGhpbmtpbmdTdHJlYW1BY3Rpdml0eSIsImdldFVzaW5nU2tpbGxBY3Rpdml0eSIsImdldFdyaXRpbmdTdHJlYW1BY3Rpdml0eSIsInJlc29sdmVJbml0aWFsSGl0bFN0cmVhbUFjdGl2aXR5IiwiaXNDb21wbGV0ZUxpa2VTc2VQYXlsb2FkIiwibWVyZ2VTdHJlYW1DaHVuayIsInJlYXNvbmluZ1N0b3JlIiwic2Vzc2lvblN0cmVhbWluZ1RleHQiLCJ1c2VTZXNzaW9uc1N0b3JlIiwiZW5zdXJlU2Vzc2lvbk5vdGlmaWNhdGlvbnNJbml0aWFsaXplZCIsInNlc3Npb25IaXRsQ29udGV4dCIsImJ1aWxkU2Vzc2lvbkZpbmlzaFBheWxvYWQiLCJpc0FnZW50VHJhbnNmZXJOb2RlIiwiaXNBcHByb3ZhbFByZUFwcHJvdmVkIiwiaXNSZXRyeVR1cm5Ob3RGb3VuZFJlc3BvbnNlIiwicGFyc2VTc2VCbG9jayIsInBhdGNoTWV0YUFnZW50RmllbGRzIiwicmVzb2x2ZU5vZGVTdHJlYW1NZXNzYWdlIiwicmVzb2x2ZVJlYXNvbmluZ1N0ZXBUb29sIiwicmVzb2x2ZVJlYXNvbmluZ1N0ZXBUeXBlIiwicmVzb2x2ZVN0YXJ0U3RyZWFtR3VhcmQiLCJyZXNvbHZlU3RyZWFtVGV4dENodW5rIiwicmVzb2x2ZVRoaW5raW5nRGVsdGEiLCJzaG91bGRBYm9ydFNlc3Npb25TdHJlYW1PblN0b3AiLCJzaG91bGRBcHBseVJlYXNvbmluZ1N0ZXBJbmRleCIsInNob3VsZEFwcGVuZFRoaW5raW5nU3RlcCIsInNob3VsZFJlc3VtZUhpdGxBZnRlclByZUFwcHJvdmFsIiwic2hvdWxkU2V0SWRsZU9uU2lsZW50QWJvcnQiLCJzaG91bGRTaG93UmVhc29uaW5nVG9vbEFjdGl2aXR5Iiwic3BsaXRTc2VCdWZmZXIiLCJNQVhfQ09OQ1VSUkVOVF9TVFJFQU1TIiwiU1RSRUFNX1RIUk9UVExFX01TIiwiYWN0aXZlU3RyZWFtcyIsIk1hcCIsInN0b3JlIiwiZ2V0U3RhdGUiLCJpc1N0cmVhbUFjdGl2ZSIsInNlc3Npb25JZCIsImhhcyIsImdldEFjdGl2ZVN0cmVhbUNvdW50Iiwic2l6ZSIsInBhcnNlU2Vzc2lvblNTRSIsIl9yZWYiLCJfYXN5bmNUb0dlbmVyYXRvciIsIl9yZWdlbmVyYXRvclJ1bnRpbWUiLCJtYXJrIiwiX2NhbGxlZSIsInJlc3BvbnNlIiwiYWN0aXZlIiwicGFyYW1zIiwiX3Jlc3BvbnNlJGJvZHkiLCJfZGF0YSRlcnJvciIsIl9kYXRhJGVycm9yMiIsIl9jYWxsYmFja3Mkb25FcnJvciIsIl9kYXRhJGVycm9yMyIsIl9kYXRhJGVycm9yNCIsInBsYWNlaG9sZGVySWQiLCJjYWxsYmFja3MiLCJ0IiwicGVuZGluZ0NvbnRlbnQiLCJ0aHJvdHRsZVRpbWVyIiwiZmx1c2hUb1N0b3JlcyIsImVtaXRUaHJvdHRsZWQiLCJmbHVzaFBlbmRpbmciLCJyZWFkZXIiLCJkZWNvZGVyIiwiYnVmZmVyIiwiYWNjdW11bGF0ZWRDb250ZW50IiwiaGFzU3RhcnRlZFdyaXRpbmciLCJpc1VzaW5nU2tpbGwiLCJzZXRUaGlua2luZ0FjdGl2aXR5IiwiZW5zdXJlV3JpdGluZ1N0YXJ0ZWQiLCJhcHBseVN0cmVhbUNodW5rIiwiY2xlYXJTdHJlYW1MaWtlQW5zd2VyUmVzZXQiLCJhcHBseVN0cmVhbUNvbXBsZXRlIiwiX3lpZWxkJHJlYWRlciRyZWFkIiwiZG9uZSIsInZhbHVlIiwiX3NwbGl0U3NlQnVmZmVyIiwiYmxvY2tzIiwicmVtYWluZGVyIiwiX2l0ZXJhdG9yIiwiX3N0ZXAiLCJsaW5lIiwicGFyc2VkQmxvY2siLCJldmVudFR5cGUiLCJkYXRhU3RyIiwiZGF0YSIsIl9yZXNvbHZlVGhpbmtpbmdEZWx0YSIsImluZGV4IiwidGhpbmtpbmdEZWx0YSIsInN0ZXBUb29sIiwic3RlcFR5cGUiLCJfZGF0YSRhcmdzIiwic3RlcEluZGV4IiwiY2h1bmsiLCJfY2h1bmsiLCJfY2FsbGJhY2tzJG9uQXBwcm92YWwiLCJpc1ByZUFwcHJvdmVkIiwiX3JlZjIiLCJfdCIsIl90MiIsIl90MyIsIndyYXAiLCJfY29udGV4dCIsInByZXYiLCJuZXh0IiwiY29udGVudCIsIl9jYWxsYmFja3Mkb25TdHJlYW1VcCIsInNldFRleHQiLCJvblN0cmVhbVVwZGF0ZSIsImNhbGwiLCJ3aW5kb3ciLCJzZXRUaW1lb3V0IiwidG9FbWl0IiwiY2xlYXJUaW1lb3V0IiwiYm9keSIsImdldFJlYWRlciIsIkVycm9yIiwiVGV4dERlY29kZXIiLCJfc3RvcmUkZ2V0TWV0YSIsInRoaW5raW5nQWN0aXZpdHkiLCJjdXJyZW50IiwiZ2V0TWV0YSIsInN0cmVhbUFjdGl2aXR5IiwicGhhc2UiLCJtZXNzYWdlIiwicGF0Y2hNZXRhIiwiaXNMb2FkaW5nIiwic2V0U3RhdHVzIiwic2V0QWN0aXZpdHkiLCJfc3RvcmUkZ2V0TWV0YTIiLCJfY2FsbGJhY2tzJG9uU3RhcnRXcmkiLCJpc1dyaXRpbmciLCJvblN0YXJ0V3JpdGluZyIsInN5bmNMaXZlTmFycmF0aW9uIiwibWFya0Fuc3dlclJlc2V0IiwicGF5bG9hZCIsIl9jYWxsYmFja3Mkb25GaW5pc2hTdCIsImZpbmlzaFBheWxvYWQiLCJmaW5pc2giLCJyZWFzb25pbmciLCJvbkZpbmlzaFN0cmVhbSIsImlzU3RvcHBlZCIsImNhbmNlbCIsImFicnVwdCIsInJlYWQiLCJzZW50IiwiZGVjb2RlIiwic3RyZWFtIiwiX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIiLCJzIiwibiIsIkpTT04iLCJwYXJzZSIsImRlbHRhIiwiYXBwZW5kVGhpbmtpbmciLCJza2lsbCIsInN0YXR1cyIsImFyZ3MiLCJuYW1lIiwiaSIsImNhcHR1cmVMZWFkaW5nRnJvbUJvZHkiLCJhcHBseVN0ZXAiLCJfb2JqZWN0U3ByZWFkIiwic2hvdWxkQ2xlYXJTdHJlYW1Gb3JMZWFkaW5nIiwiY2xlYXIiLCJvbkFwcHJvdmFsUmVxdWlyZWQiLCJwZW5kaW5nX2FjdGlvbnMiLCJjb25zb2xlIiwiZXJyb3IiLCJzZXRFcnJvciIsInR5cGUiLCJvbkVycm9yIiwid2FybiIsImUiLCJmIiwic3RvcCIsIl94IiwiX3gyIiwiX3gzIiwiYXBwbHkiLCJhcmd1bWVudHMiLCJzZXNzaW9uU3RyZWFtTWFuYWdlciIsImlzQWN0aXZlIiwiZ2V0QWN0aXZlQ291bnQiLCJnZXRBY3RpdmVTZXNzaW9uSWRzIiwiQXJyYXkiLCJmcm9tIiwia2V5cyIsInN0YXJ0U3RyZWFtIiwiX2NhbGxlZTIiLCJyZXF1ZXN0IiwiYWN0aXZpdHlPcHRpb25zIiwiYWdlbnRJZCIsImFnZW50TmFtZSIsInN0YXJ0R3VhcmQiLCJjb250cm9sbGVyIiwiX2NhbGxiYWNrcyRvbkVycm9yMiIsIl90NCIsIl9jb250ZXh0MiIsImFsbG93ZWQiLCJzdGFydGVkIiwicmVhc29uIiwiQWJvcnRDb250cm9sbGVyIiwic2V0IiwiZW5zdXJlU2Vzc2lvbiIsInN0YXJ0IiwiT3JjaGVzdHJhdG9yIiwib3JjaGVzdHJhdG9yIiwic2lnbmFsIiwic3RhcnRDb250aW51ZVN0cmVhbSIsIl9jYWxsZWUzIiwiX3JlZjMiLCJjb250aW51ZVJlcXVlc3QiLCJoaXRsRXhlY3V0aW9uQ29udGV4dCIsImNvbnRpbnVlR3VhcmQiLCJzc2VQYXJhbXMiLCJfY2FsbGJhY2tzJG9uRXJyb3IzIiwiX3Q1IiwiX2NvbnRleHQzIiwiZ2V0IiwidW5kZWZpbmVkIiwiY29udGludWVUaHJlYWQiLCJvayIsImNvbmNhdCIsInN0YXJ0UmV0cnlTdHJlYW0iLCJfY2FsbGVlNCIsInJldHJ5UmVxdWVzdCIsInJldHJ5R3VhcmQiLCJkZXRhaWwiLCJfY2FsbGJhY2tzJG9uRXJyb3I0IiwiX3Q2IiwiX3Q3IiwiX2NvbnRleHQ0IiwicmV0cnlDb21wbGV0aW9uIiwianNvbiIsInN0b3BTdHJlYW0iLCJfY2FsbGJhY2tzJG9uU3RvcCIsImFib3J0IiwicGFydGlhbFRleHQiLCJnZXRTbmFwc2hvdCIsInRleHQiLCJvblN0b3AiLCJhYm9ydFNpbGVudGx5IiwiX3N0b3JlJGdldE1ldGEzIiwiYWJvcnRBbGwiLCJfdGhpcyIsImZvckVhY2giXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvc3RvcmUvc2Vzc2lvbnMvc2Vzc2lvblN0cmVhbU1hbmFnZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgbm8tY29uc29sZSAqL1xuLyogZXNsaW50LWRpc2FibGUgbm8tY29udGludWUgKi9cbi8qIGVzbGludC1kaXNhYmxlIG5vLWF3YWl0LWluLWxvb3AgKi9cbi8qIGVzbGludC1kaXNhYmxlIG5vLXJlc3RyaWN0ZWQtc3ludGF4ICovXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1jb25zdGFudC1jb25kaXRpb24gKi9cbi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkgKi9cbmltcG9ydCBtYWlhIGZyb20gJy4uLy4uL3NlcnZpY2VzL21haWEnXG5pbXBvcnQgdHlwZSB7IEFwcHJvdmFsUmVxdWVzdCB9IGZyb20gJy4uLy4uL3R5cGVzL0NoYXQnXG5pbXBvcnQge1xuICBnZXRJbml0aWFsU3RyZWFtQWN0aXZpdHksXG4gIGdldFRoaW5raW5nU3RyZWFtQWN0aXZpdHksXG4gIGdldFVzaW5nU2tpbGxBY3Rpdml0eSxcbiAgZ2V0V3JpdGluZ1N0cmVhbUFjdGl2aXR5LFxuICByZXNvbHZlSW5pdGlhbEhpdGxTdHJlYW1BY3Rpdml0eSxcbn0gZnJvbSAnLi4vLi4vdXRpbHMvc3RyZWFtQWN0aXZpdHlNZXNzYWdlcydcbmltcG9ydCB0eXBlIHsgSGl0bEV4ZWN1dGlvbkNvbnRleHQgfSBmcm9tICcuLi8uLi91dGlscy9zdHJlYW1BY3Rpdml0eU1lc3NhZ2VzJ1xuaW1wb3J0IHsgaXNDb21wbGV0ZUxpa2VTc2VQYXlsb2FkLCBtZXJnZVN0cmVhbUNodW5rIH0gZnJvbSAnLi4vLi4vdXRpbHMvc3NlU3RyZWFtQ29udGVudCdcbmltcG9ydCB7IHJlYXNvbmluZ1N0b3JlIH0gZnJvbSAnLi4vLi4vaG9va3MvdXNlUmVhc29uaW5nVHJhY2UnXG5pbXBvcnQgdHlwZSB7IFJlYXNvbmluZ1N0ZXBQYXlsb2FkLCBSZWFzb25pbmdUcmFjZVBheWxvYWQgfSBmcm9tICcuLi8uLi90eXBlcy9yZWFzb25pbmcnXG5pbXBvcnQgeyBzZXNzaW9uU3RyZWFtaW5nVGV4dCB9IGZyb20gJy4vc2Vzc2lvblN0cmVhbWluZ1RleHQnXG5pbXBvcnQgeyB1c2VTZXNzaW9uc1N0b3JlIH0gZnJvbSAnLi91c2VTZXNzaW9uc1N0b3JlJ1xuaW1wb3J0IHsgZW5zdXJlU2Vzc2lvbk5vdGlmaWNhdGlvbnNJbml0aWFsaXplZCB9IGZyb20gJy4vc2Vzc2lvbk5vdGlmaWNhdGlvbnMnXG5pbXBvcnQgeyBzZXNzaW9uSGl0bENvbnRleHQgfSBmcm9tICcuL3Nlc3Npb25IaXRsQ29udGV4dCdcbmltcG9ydCB0eXBlIHsgU2Vzc2lvblN0cmVhbUNhbGxiYWNrcywgU3RhcnRTdHJlYW1SZXN1bHQgfSBmcm9tICcuL3Nlc3Npb25zLnR5cGVzJ1xuaW1wb3J0IHtcbiAgYnVpbGRTZXNzaW9uRmluaXNoUGF5bG9hZCxcbiAgaXNBZ2VudFRyYW5zZmVyTm9kZSxcbiAgaXNBcHByb3ZhbFByZUFwcHJvdmVkLFxuICBpc1JldHJ5VHVybk5vdEZvdW5kUmVzcG9uc2UsXG4gIHBhcnNlU3NlQmxvY2ssXG4gIHBhdGNoTWV0YUFnZW50RmllbGRzLFxuICByZXNvbHZlTm9kZVN0cmVhbU1lc3NhZ2UsXG4gIHJlc29sdmVSZWFzb25pbmdTdGVwVG9vbCxcbiAgcmVzb2x2ZVJlYXNvbmluZ1N0ZXBUeXBlLFxuICByZXNvbHZlU3RhcnRTdHJlYW1HdWFyZCxcbiAgcmVzb2x2ZVN0cmVhbVRleHRDaHVuayxcbiAgcmVzb2x2ZVRoaW5raW5nRGVsdGEsXG4gIHNob3VsZEFib3J0U2Vzc2lvblN0cmVhbU9uU3RvcCxcbiAgc2hvdWxkQXBwbHlSZWFzb25pbmdTdGVwSW5kZXgsXG4gIHNob3VsZEFwcGVuZFRoaW5raW5nU3RlcCxcbiAgc2hvdWxkUmVzdW1lSGl0bEFmdGVyUHJlQXBwcm92YWwsXG4gIHNob3VsZFNldElkbGVPblNpbGVudEFib3J0LFxuICBzaG91bGRTaG93UmVhc29uaW5nVG9vbEFjdGl2aXR5LFxuICBzcGxpdFNzZUJ1ZmZlcixcbn0gZnJvbSAnLi9zZXNzaW9uU3RyZWFtTWFuYWdlci5oZWxwZXJzJ1xuXG50eXBlIE9yY2hlc3RyYXRvclJlcXVlc3QgPSBQYXJhbWV0ZXJzPHR5cGVvZiBtYWlhLk9yY2hlc3RyYXRvci5vcmNoZXN0cmF0b3I+WzBdXG50eXBlIENvbnRpbnVlVGhyZWFkUmVxdWVzdCA9IFBhcmFtZXRlcnM8dHlwZW9mIG1haWEuT3JjaGVzdHJhdG9yLmNvbnRpbnVlVGhyZWFkPlswXVxudHlwZSBSZXRyeUNvbXBsZXRpb25SZXF1ZXN0ID0gUGFyYW1ldGVyczx0eXBlb2YgbWFpYS5PcmNoZXN0cmF0b3IucmV0cnlDb21wbGV0aW9uPlswXVxuXG4vKiogQ29tcGF0aWJsZSBjb24gZWwgYHRgIGRlIGkxOG5leHQgKHVzbyBkZSB1bmEgc29sYSBrZXkpLiAqL1xudHlwZSBUcmFuc2xhdGVGbiA9IChrZXk6IHN0cmluZykgPT4gc3RyaW5nXG5cbnR5cGUgU3RhcnRTdHJlYW1QYXJhbXMgPSB7XG4gIHNlc3Npb25JZDogc3RyaW5nXG4gIHBsYWNlaG9sZGVySWQ6IHN0cmluZ1xuICByZXF1ZXN0OiBPcmNoZXN0cmF0b3JSZXF1ZXN0XG4gIGNhbGxiYWNrczogU2Vzc2lvblN0cmVhbUNhbGxiYWNrc1xuICB0OiBUcmFuc2xhdGVGblxuICBhY3Rpdml0eU9wdGlvbnM/OiB7XG4gICAgaXNXZWJTZWFyY2hBY3RpdmU/OiBib29sZWFuXG4gICAgaXNEZWVwU2VhcmNoQWN0aXZlPzogYm9vbGVhblxuICAgIGhhc0F0dGFjaG1lbnRzPzogYm9vbGVhblxuICAgIGF0dGFjaG1lbnRzQ291bnQ/OiBudW1iZXJcbiAgfVxuICBoaXRsRXhlY3V0aW9uQ29udGV4dD86IEhpdGxFeGVjdXRpb25Db250ZXh0IHwgbnVsbFxuICBhZ2VudElkPzogc3RyaW5nIHwgbnVtYmVyXG4gIGFnZW50TmFtZT86IHN0cmluZ1xufVxuXG50eXBlIFN0YXJ0Q29udGludWVTdHJlYW1QYXJhbXMgPSB7XG4gIHNlc3Npb25JZDogc3RyaW5nXG4gIHBsYWNlaG9sZGVySWQ6IHN0cmluZ1xuICBjb250aW51ZVJlcXVlc3Q6IENvbnRpbnVlVGhyZWFkUmVxdWVzdFxuICBjYWxsYmFja3M6IFNlc3Npb25TdHJlYW1DYWxsYmFja3NcbiAgdDogVHJhbnNsYXRlRm5cbiAgaGl0bEV4ZWN1dGlvbkNvbnRleHQ/OiBIaXRsRXhlY3V0aW9uQ29udGV4dCB8IG51bGxcbiAgYWdlbnRJZD86IHN0cmluZyB8IG51bWJlclxuICBhZ2VudE5hbWU/OiBzdHJpbmdcbn1cblxudHlwZSBTdGFydFJldHJ5U3RyZWFtUGFyYW1zID0ge1xuICBzZXNzaW9uSWQ6IHN0cmluZ1xuICBwbGFjZWhvbGRlcklkOiBzdHJpbmdcbiAgcmV0cnlSZXF1ZXN0OiBSZXRyeUNvbXBsZXRpb25SZXF1ZXN0XG4gIGNhbGxiYWNrczogU2Vzc2lvblN0cmVhbUNhbGxiYWNrc1xuICB0OiBUcmFuc2xhdGVGblxuICBhY3Rpdml0eU9wdGlvbnM/OiB7XG4gICAgaXNXZWJTZWFyY2hBY3RpdmU/OiBib29sZWFuXG4gICAgaXNEZWVwU2VhcmNoQWN0aXZlPzogYm9vbGVhblxuICAgIGhhc0F0dGFjaG1lbnRzPzogYm9vbGVhblxuICAgIGF0dGFjaG1lbnRzQ291bnQ/OiBudW1iZXJcbiAgfVxuICBhZ2VudElkPzogc3RyaW5nIHwgbnVtYmVyXG4gIGFnZW50TmFtZT86IHN0cmluZ1xufVxuXG50eXBlIEFjdGl2ZVN0cmVhbSA9IHtcbiAgc2Vzc2lvbklkOiBzdHJpbmdcbiAgY29udHJvbGxlcjogQWJvcnRDb250cm9sbGVyXG4gIGlzU3RvcHBlZDogYm9vbGVhblxufVxuXG4vKipcbiAqIE3DoXhpbW8gZGUgc2VzaW9uZXMgZ2VuZXJhbmRvIGVuIHBhcmFsZWxvLiBQcm90ZWdlIHJlZC9yZWN1cnNvcyBkZWwgY2xpZW50ZS5cbiAqIEFqdXN0YWJsZSBhIGZ1dHVybyB2w61hIGZsYWcgZGVsIGhvc3QuXG4gKi9cbmV4cG9ydCBjb25zdCBNQVhfQ09OQ1VSUkVOVF9TVFJFQU1TID0gNFxuXG5jb25zdCBTVFJFQU1fVEhST1RUTEVfTVMgPSAxNlxuXG5jb25zdCBhY3RpdmVTdHJlYW1zID0gbmV3IE1hcDxzdHJpbmcsIEFjdGl2ZVN0cmVhbT4oKVxuXG5jb25zdCBzdG9yZSA9ICgpID0+IHVzZVNlc3Npb25zU3RvcmUuZ2V0U3RhdGUoKVxuXG5jb25zdCBpc1N0cmVhbUFjdGl2ZSA9IChzZXNzaW9uSWQ6IHN0cmluZyk6IGJvb2xlYW4gPT4gYWN0aXZlU3RyZWFtcy5oYXMoc2Vzc2lvbklkKVxuXG5jb25zdCBnZXRBY3RpdmVTdHJlYW1Db3VudCA9ICgpOiBudW1iZXIgPT4gYWN0aXZlU3RyZWFtcy5zaXplXG5cbmNvbnN0IHBhcnNlU2Vzc2lvblNTRSA9IGFzeW5jIChyZXNwb25zZTogUmVzcG9uc2UsIGFjdGl2ZTogQWN0aXZlU3RyZWFtLCBwYXJhbXM6IFN0YXJ0U3RyZWFtUGFyYW1zKTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gIGNvbnN0IHsgc2Vzc2lvbklkLCBwbGFjZWhvbGRlcklkLCBjYWxsYmFja3MsIHQgfSA9IHBhcmFtc1xuXG4gIGxldCBwZW5kaW5nQ29udGVudDogc3RyaW5nIHwgbnVsbCA9IG51bGxcbiAgbGV0IHRocm90dGxlVGltZXI6IG51bWJlciB8IG51bGwgPSBudWxsXG5cbiAgY29uc3QgZmx1c2hUb1N0b3JlcyA9IChjb250ZW50OiBzdHJpbmcpID0+IHtcbiAgICBzZXNzaW9uU3RyZWFtaW5nVGV4dC5zZXRUZXh0KHNlc3Npb25JZCwgcGxhY2Vob2xkZXJJZCwgY29udGVudClcbiAgICBjYWxsYmFja3Mub25TdHJlYW1VcGRhdGU/Lihjb250ZW50KVxuICB9XG5cbiAgY29uc3QgZW1pdFRocm90dGxlZCA9IChjb250ZW50OiBzdHJpbmcpID0+IHtcbiAgICBwZW5kaW5nQ29udGVudCA9IGNvbnRlbnRcbiAgICBpZiAodGhyb3R0bGVUaW1lciAhPSBudWxsKSByZXR1cm5cbiAgICB0aHJvdHRsZVRpbWVyID0gd2luZG93LnNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhyb3R0bGVUaW1lciA9IG51bGxcbiAgICAgIGlmIChwZW5kaW5nQ29udGVudCAhPSBudWxsKSB7XG4gICAgICAgIGNvbnN0IHRvRW1pdCA9IHBlbmRpbmdDb250ZW50XG4gICAgICAgIHBlbmRpbmdDb250ZW50ID0gbnVsbFxuICAgICAgICBmbHVzaFRvU3RvcmVzKHRvRW1pdClcbiAgICAgIH1cbiAgICB9LCBTVFJFQU1fVEhST1RUTEVfTVMpXG4gIH1cblxuICBjb25zdCBmbHVzaFBlbmRpbmcgPSAoKSA9PiB7XG4gICAgaWYgKHRocm90dGxlVGltZXIgIT0gbnVsbCkge1xuICAgICAgd2luZG93LmNsZWFyVGltZW91dCh0aHJvdHRsZVRpbWVyKVxuICAgICAgdGhyb3R0bGVUaW1lciA9IG51bGxcbiAgICB9XG4gICAgaWYgKHBlbmRpbmdDb250ZW50ICE9IG51bGwpIHtcbiAgICAgIGNvbnN0IHRvRW1pdCA9IHBlbmRpbmdDb250ZW50XG4gICAgICBwZW5kaW5nQ29udGVudCA9IG51bGxcbiAgICAgIGZsdXNoVG9TdG9yZXModG9FbWl0KVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHJlYWRlciA9IHJlc3BvbnNlLmJvZHk/LmdldFJlYWRlcigpXG4gIGlmICghcmVhZGVyKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdObyByZWFkZXIgYXZhaWxhYmxlJylcbiAgfVxuXG4gIGNvbnN0IGRlY29kZXIgPSBuZXcgVGV4dERlY29kZXIoKVxuICBsZXQgYnVmZmVyID0gJydcbiAgbGV0IGFjY3VtdWxhdGVkQ29udGVudCA9ICcnXG4gIGxldCBoYXNTdGFydGVkV3JpdGluZyA9IGZhbHNlXG4gIC8vIFwiVXNhbmRvIFNraWxsXCIgcXVlZGEgdmlzaWJsZSBtaWVudHJhcyBlbCBtb2RlbG8gcGllbnNhIGNvbiBsYSBza2lsbCBjYXJnYWRhO1xuICAvLyBsb3MgZGVsdGFzIGRlIGB0aGlua2luZ2Agbm8gbG8gcGlzYW4gaGFzdGEgbGEgcHLDs3hpbWEgYWNjacOzbiBvIGVsIHByaW1lciB0b2tlbi5cbiAgbGV0IGlzVXNpbmdTa2lsbCA9IGZhbHNlXG5cbiAgY29uc3Qgc2V0VGhpbmtpbmdBY3Rpdml0eSA9ICgpID0+IHtcbiAgICBjb25zdCB0aGlua2luZ0FjdGl2aXR5ID0gZ2V0VGhpbmtpbmdTdHJlYW1BY3Rpdml0eSh0KVxuICAgIGNvbnN0IGN1cnJlbnQgPSBzdG9yZSgpLmdldE1ldGEoc2Vzc2lvbklkKT8uc3RyZWFtQWN0aXZpdHlcbiAgICBpZiAoY3VycmVudD8ucGhhc2UgPT09ICd0aGlua2luZycgJiYgY3VycmVudC5tZXNzYWdlID09PSB0aGlua2luZ0FjdGl2aXR5Lm1lc3NhZ2UpIHJldHVyblxuICAgIHN0b3JlKCkucGF0Y2hNZXRhKHNlc3Npb25JZCwgeyBpc0xvYWRpbmc6IHRydWUgfSlcbiAgICBzdG9yZSgpLnNldFN0YXR1cyhzZXNzaW9uSWQsICd0aGlua2luZycpXG4gICAgc3RvcmUoKS5zZXRBY3Rpdml0eShzZXNzaW9uSWQsIHRoaW5raW5nQWN0aXZpdHkpXG4gIH1cblxuICBjb25zdCBlbnN1cmVXcml0aW5nU3RhcnRlZCA9ICgpID0+IHtcbiAgICAvLyBDdWFscXVpZXIgdG9rZW4gY29ydGEgXCJVc2FuZG8gU2tpbGxcIjogZWwgaW5kaWNhZG9yIHZ1ZWx2ZSBhIGFsdGVybmFyIHBlbnNhbmRvIC8gZXNjcmliaWVuZG8uXG4gICAgaXNVc2luZ1NraWxsID0gZmFsc2VcbiAgICBpZiAoIWhhc1N0YXJ0ZWRXcml0aW5nKSB7XG4gICAgICBoYXNTdGFydGVkV3JpdGluZyA9IHRydWVcbiAgICAgIHN0b3JlKCkucGF0Y2hNZXRhKHNlc3Npb25JZCwgeyBpc0xvYWRpbmc6IHRydWUsIGlzV3JpdGluZzogdHJ1ZSB9KVxuICAgICAgY2FsbGJhY2tzLm9uU3RhcnRXcml0aW5nPy4oKVxuICAgIH1cbiAgICBjb25zdCBjdXJyZW50ID0gc3RvcmUoKS5nZXRNZXRhKHNlc3Npb25JZCk/LnN0cmVhbUFjdGl2aXR5XG4gICAgaWYgKGN1cnJlbnQ/LnBoYXNlICE9PSAnd3JpdGluZycpIHtcbiAgICAgIHN0b3JlKCkucGF0Y2hNZXRhKHNlc3Npb25JZCwgeyBpc0xvYWRpbmc6IHRydWUsIGlzV3JpdGluZzogdHJ1ZSB9KVxuICAgICAgc3RvcmUoKS5zZXRTdGF0dXMoc2Vzc2lvbklkLCAnd3JpdGluZycpXG4gICAgICBzdG9yZSgpLnNldEFjdGl2aXR5KHNlc3Npb25JZCwgZ2V0V3JpdGluZ1N0cmVhbUFjdGl2aXR5KHQpKVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGFwcGx5U3RyZWFtQ2h1bmsgPSAoY2h1bms6IHN0cmluZykgPT4ge1xuICAgIGlmICghY2h1bmspIHJldHVyblxuICAgIGFjY3VtdWxhdGVkQ29udGVudCA9IG1lcmdlU3RyZWFtQ2h1bmsoYWNjdW11bGF0ZWRDb250ZW50LCBjaHVuaylcbiAgICByZWFzb25pbmdTdG9yZS5zeW5jTGl2ZU5hcnJhdGlvbihwbGFjZWhvbGRlcklkLCBhY2N1bXVsYXRlZENvbnRlbnQpXG4gICAgZW1pdFRocm90dGxlZChhY2N1bXVsYXRlZENvbnRlbnQpXG4gIH1cblxuICBjb25zdCBjbGVhclN0cmVhbUxpa2VBbnN3ZXJSZXNldCA9ICgpID0+IHtcbiAgICBpZiAodGhyb3R0bGVUaW1lciAhPSBudWxsKSB7XG4gICAgICB3aW5kb3cuY2xlYXJUaW1lb3V0KHRocm90dGxlVGltZXIpXG4gICAgICB0aHJvdHRsZVRpbWVyID0gbnVsbFxuICAgIH1cbiAgICBwZW5kaW5nQ29udGVudCA9IG51bGxcbiAgICBhY2N1bXVsYXRlZENvbnRlbnQgPSAnJ1xuICAgIGZsdXNoVG9TdG9yZXMoJycpXG4gICAgcmVhc29uaW5nU3RvcmUubWFya0Fuc3dlclJlc2V0KHBsYWNlaG9sZGVySWQpXG4gIH1cblxuICBjb25zdCBhcHBseVN0cmVhbUNvbXBsZXRlID0gKHBheWxvYWQ6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KSA9PiB7XG4gICAgY29uc3QgZmluaXNoUGF5bG9hZCA9IGJ1aWxkU2Vzc2lvbkZpbmlzaFBheWxvYWQocGF5bG9hZCwgYWNjdW11bGF0ZWRDb250ZW50KVxuXG4gICAgcmVhc29uaW5nU3RvcmUuZmluaXNoKHBsYWNlaG9sZGVySWQsIGZpbmlzaFBheWxvYWQucmVhc29uaW5nKVxuICAgIGZsdXNoUGVuZGluZygpXG4gICAgc3RvcmUoKS5wYXRjaE1ldGEoc2Vzc2lvbklkLCB7IGlzTG9hZGluZzogZmFsc2UsIGlzV3JpdGluZzogZmFsc2UgfSlcbiAgICBzdG9yZSgpLnNldEFjdGl2aXR5KHNlc3Npb25JZCwgbnVsbClcbiAgICBzdG9yZSgpLnNldFN0YXR1cyhzZXNzaW9uSWQsICdjb21wbGV0ZScpXG5cbiAgICBjYWxsYmFja3Mub25GaW5pc2hTdHJlYW0/LihmaW5pc2hQYXlsb2FkKVxuXG4gICAgLy8gRWwgdGV4dG8gZW4gdml2byBOTyBzZSBsaW1waWEgYWPDoSBhIHByb3DDs3NpdG8uIEVsIHBsYWNlaG9sZGVyIHNlIHZhIGNvbiBlbFxuICAgIC8vIGBkcm9wYCBxdWUgaGFjZSBlbCBjb25zdW1pZG9yLCB5IGNvbiDDqWwgc3Ugc3VzY3JpcGNpw7NuOyB2YWNpYXJsbyBhbnRlcyBsb1xuICAgIC8vIGRlamFiYSBtb250YWRvIHkgc2luIHRleHRvIChhbHR1cmEgMCkgZHVyYW50ZSB+MjVtczogZWwgZmxpY2tlciBkZSBmaW4gZGVcbiAgICAvLyBzdHJlYW0uIE5vIGFsY2FuemEgY29uIGRpZmVyaXJsbywgcG9ycXVlIGVzdGUgY2xlYXIgdmlhamEgZW4gU3luY0xhbmVcbiAgICAvLyAoc3RvcmUgZXh0ZXJubykgeSBlbCBzd2FwIGRlIG1lbnNhamVzIGVuIERlZmF1bHRMYW5lLCBhc8OtIHF1ZSBzaWVtcHJlIHNlXG4gICAgLy8gY3VlbGEgZW4gZWwgbWVkaW8uIEVsIHNsb3Qgc2UgbGliZXJhIGVuIGVsIHByw7N4aW1vIGBzdGFydCgpYCBkZSBsYSBzZXNpw7NuLFxuICAgIC8vIHkgZW4gc3RvcC9lcnJvci9hcHByb3ZhbC9jYW1iaW8gZGUgc2VzacOzbiwgcXVlIHPDrSBsbGFtYW4gYGNsZWFyYC5cbiAgfVxuXG4gIHRyeSB7XG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgIGlmIChzaG91bGRBYm9ydFNlc3Npb25TdHJlYW1PblN0b3AoYWN0aXZlLmlzU3RvcHBlZCkpIHtcbiAgICAgICAgcmVhZGVyLmNhbmNlbCgpXG4gICAgICAgIGJyZWFrXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHsgZG9uZSwgdmFsdWUgfSA9IGF3YWl0IHJlYWRlci5yZWFkKClcbiAgICAgIGlmIChkb25lKSBicmVha1xuXG4gICAgICBpZiAoc2hvdWxkQWJvcnRTZXNzaW9uU3RyZWFtT25TdG9wKGFjdGl2ZS5pc1N0b3BwZWQpKSB7XG4gICAgICAgIHJlYWRlci5jYW5jZWwoKVxuICAgICAgICBicmVha1xuICAgICAgfVxuXG4gICAgICBidWZmZXIgKz0gZGVjb2Rlci5kZWNvZGUodmFsdWUsIHsgc3RyZWFtOiB0cnVlIH0pXG4gICAgICBjb25zdCB7IGJsb2NrcywgcmVtYWluZGVyIH0gPSBzcGxpdFNzZUJ1ZmZlcihidWZmZXIpXG4gICAgICBidWZmZXIgPSByZW1haW5kZXJcblxuICAgICAgZm9yIChjb25zdCBsaW5lIG9mIGJsb2Nrcykge1xuICAgICAgICBjb25zdCBwYXJzZWRCbG9jayA9IHBhcnNlU3NlQmxvY2sobGluZSlcbiAgICAgICAgaWYgKCFwYXJzZWRCbG9jaykgY29udGludWVcblxuICAgICAgICBjb25zdCB7IGV2ZW50VHlwZSwgZGF0YVN0ciB9ID0gcGFyc2VkQmxvY2tcblxuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IGRhdGEgPSBKU09OLnBhcnNlKGRhdGFTdHIpXG5cbiAgICAgICAgICBzd2l0Y2ggKGV2ZW50VHlwZSkge1xuICAgICAgICAgICAgY2FzZSAndGhpbmtpbmcnOiB7XG4gICAgICAgICAgICAgIGNvbnN0IHsgaW5kZXgsIGRlbHRhOiB0aGlua2luZ0RlbHRhIH0gPSByZXNvbHZlVGhpbmtpbmdEZWx0YShkYXRhKVxuICAgICAgICAgICAgICBpZiAoc2hvdWxkQXBwZW5kVGhpbmtpbmdTdGVwKGluZGV4LCB0aGlua2luZ0RlbHRhKSkge1xuICAgICAgICAgICAgICAgIHJlYXNvbmluZ1N0b3JlLmFwcGVuZFRoaW5raW5nKHBsYWNlaG9sZGVySWQsIGluZGV4LCB0aGlua2luZ0RlbHRhKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIC8vIE1pZW50cmFzIGR1cmEgXCJVc2FuZG8gU2tpbGxcIiBsb3MgZGVsdGFzIGRlIHRoaW5raW5nIG5vIHBpc2FuIGxhIGFjdGl2aWRhZC5cbiAgICAgICAgICAgICAgaWYgKCFpc1VzaW5nU2tpbGwpIHtcbiAgICAgICAgICAgICAgICBzZXRUaGlua2luZ0FjdGl2aXR5KClcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBTa2lsbCBALW1lbmNpb25hZGEgKGFsIGFicmlyIGVsIHN0cmVhbSkgbyBsbGFtYWRhIGEgYGdldF9za2lsbGAuXG4gICAgICAgICAgICBjYXNlICd1c2luZ19za2lsbCc6XG4gICAgICAgICAgICAgIGlmICghaGFzU3RhcnRlZFdyaXRpbmcpIHtcbiAgICAgICAgICAgICAgICBpc1VzaW5nU2tpbGwgPSB0cnVlXG4gICAgICAgICAgICAgICAgc3RvcmUoKS5wYXRjaE1ldGEoc2Vzc2lvbklkLCB7IGlzTG9hZGluZzogdHJ1ZSB9KVxuICAgICAgICAgICAgICAgIHN0b3JlKCkuc2V0U3RhdHVzKHNlc3Npb25JZCwgJ3RoaW5raW5nJylcbiAgICAgICAgICAgICAgICBzdG9yZSgpLnNldEFjdGl2aXR5KHNlc3Npb25JZCwgZ2V0VXNpbmdTa2lsbEFjdGl2aXR5KHQsIGRhdGEuc2tpbGwpKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGJyZWFrXG5cbiAgICAgICAgICAgIC8vIEVsIGJhY2tlbmQgZGVzY2FydGEgbG8gZW1pdGlkbyB5IHJlaW5pY2lhIGxhIHJlc3B1ZXN0YSBkZXNkZSBjZXJvLlxuICAgICAgICAgICAgY2FzZSAnYW5zd2VyX3Jlc2V0JzpcbiAgICAgICAgICAgICAgY2xlYXJTdHJlYW1MaWtlQW5zd2VyUmVzZXQoKVxuICAgICAgICAgICAgICBicmVha1xuXG4gICAgICAgICAgICBjYXNlICdyZWFzb25pbmdfc3RlcCc6IHtcbiAgICAgICAgICAgICAgY29uc3Qgc3RlcFRvb2wgPSByZXNvbHZlUmVhc29uaW5nU3RlcFRvb2woZGF0YSlcbiAgICAgICAgICAgICAgY29uc3Qgc3RlcFR5cGUgPSByZXNvbHZlUmVhc29uaW5nU3RlcFR5cGUoZGF0YSlcbiAgICAgICAgICAgICAgaWYgKHNob3VsZFNob3dSZWFzb25pbmdUb29sQWN0aXZpdHkoc3RlcFRvb2wsIHN0ZXBUeXBlLCBkYXRhLnN0YXR1cykpIHtcbiAgICAgICAgICAgICAgICBpc1VzaW5nU2tpbGwgPSBzdGVwVG9vbCA9PT0gJ2dldF9za2lsbCdcbiAgICAgICAgICAgICAgICBpZiAoaXNVc2luZ1NraWxsKSB7XG4gICAgICAgICAgICAgICAgICAvLyBFbCBzdGVwIGRlIGBnZXRfc2tpbGxgIGxsZWdhIGp1c3RvIGRlc3B1w6lzIGRlIGB1c2luZ19za2lsbGA6IG1hbnRpZW5lIGVsIG5vbWJyZS5cbiAgICAgICAgICAgICAgICAgIHN0b3JlKCkucGF0Y2hNZXRhKHNlc3Npb25JZCwgeyBpc0xvYWRpbmc6IHRydWUgfSlcbiAgICAgICAgICAgICAgICAgIHN0b3JlKCkuc2V0U3RhdHVzKHNlc3Npb25JZCwgJ3RoaW5raW5nJylcbiAgICAgICAgICAgICAgICAgIHN0b3JlKCkuc2V0QWN0aXZpdHkoc2Vzc2lvbklkLCBnZXRVc2luZ1NraWxsQWN0aXZpdHkodCwgZGF0YS5hcmdzPy5uYW1lKSlcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgc2V0VGhpbmtpbmdBY3Rpdml0eSgpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGlmIChzaG91bGRBcHBseVJlYXNvbmluZ1N0ZXBJbmRleChkYXRhLmkpKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc3RlcEluZGV4ID0gZGF0YS5pXG4gICAgICAgICAgICAgICAgcmVhc29uaW5nU3RvcmUuY2FwdHVyZUxlYWRpbmdGcm9tQm9keShwbGFjZWhvbGRlcklkLCBhY2N1bXVsYXRlZENvbnRlbnQpXG4gICAgICAgICAgICAgICAgcmVhc29uaW5nU3RvcmUuYXBwbHlTdGVwKHBsYWNlaG9sZGVySWQsIHsgLi4uZGF0YSwgaTogc3RlcEluZGV4IH0gYXMgUmVhc29uaW5nU3RlcFBheWxvYWQpXG4gICAgICAgICAgICAgICAgaWYgKHJlYXNvbmluZ1N0b3JlLnNob3VsZENsZWFyU3RyZWFtRm9yTGVhZGluZyhwbGFjZWhvbGRlcklkLCBhY2N1bXVsYXRlZENvbnRlbnQpKSB7XG4gICAgICAgICAgICAgICAgICBjbGVhclN0cmVhbUxpa2VBbnN3ZXJSZXNldCgpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNhc2UgJ3Rva2VuJzoge1xuICAgICAgICAgICAgICBjb25zdCBjaHVuayA9IHJlc29sdmVTdHJlYW1UZXh0Q2h1bmsoZGF0YSlcbiAgICAgICAgICAgICAgZW5zdXJlV3JpdGluZ1N0YXJ0ZWQoKVxuICAgICAgICAgICAgICBhcHBseVN0cmVhbUNodW5rKGNodW5rKVxuICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjYXNlICdjb250ZW50Jzoge1xuICAgICAgICAgICAgICBjb25zdCBjaHVuayA9IHJlc29sdmVTdHJlYW1UZXh0Q2h1bmsoZGF0YSlcbiAgICAgICAgICAgICAgZW5zdXJlV3JpdGluZ1N0YXJ0ZWQoKVxuICAgICAgICAgICAgICBhcHBseVN0cmVhbUNodW5rKGNodW5rKVxuICAgICAgICAgICAgICBpZiAoaXNDb21wbGV0ZUxpa2VTc2VQYXlsb2FkKGRhdGEpKSB7XG4gICAgICAgICAgICAgICAgYXBwbHlTdHJlYW1Db21wbGV0ZShkYXRhKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNhc2UgJ25vZGUnOlxuICAgICAgICAgICAgICBpc1VzaW5nU2tpbGwgPSBmYWxzZVxuICAgICAgICAgICAgICBpZiAoaXNBZ2VudFRyYW5zZmVyTm9kZShkYXRhKSB8fCByZXNvbHZlTm9kZVN0cmVhbU1lc3NhZ2UoZGF0YSkpIHtcbiAgICAgICAgICAgICAgICBzZXRUaGlua2luZ0FjdGl2aXR5KClcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBicmVha1xuXG4gICAgICAgICAgICBjYXNlICdjb21wbGV0ZSc6XG4gICAgICAgICAgICAgIGFwcGx5U3RyZWFtQ29tcGxldGUoZGF0YSlcbiAgICAgICAgICAgICAgYnJlYWtcblxuICAgICAgICAgICAgY2FzZSAnYXBwcm92YWxfcmVxdWlyZWQnOiB7XG4gICAgICAgICAgICAgIGZsdXNoUGVuZGluZygpXG4gICAgICAgICAgICAgIC8vIFByZWFwcm9iYWRvIChhdXRvLWFwcHJvdmUgbyBkZXRlY2Npw7NuIG1hbnVhbCk6IGVsIHN0cmVhbSBubyBzZSBjb3J0YSxcbiAgICAgICAgICAgICAgLy8gc2lndWUgZWplY3V0YW5kbyBsYXMgYWNjaW9uZXMgc2luIGVzcGVyYXIgZGVjaXNpw7NuIGRlbCB1c3VhcmlvLlxuICAgICAgICAgICAgICBjb25zdCBpc1ByZUFwcHJvdmVkID0gaXNBcHByb3ZhbFByZUFwcHJvdmVkKGRhdGEpXG4gICAgICAgICAgICAgIHN0b3JlKCkucGF0Y2hNZXRhKHNlc3Npb25JZCwgeyBpc1dyaXRpbmc6IGZhbHNlIH0pXG4gICAgICAgICAgICAgIGlmICghaXNQcmVBcHByb3ZlZCkge1xuICAgICAgICAgICAgICAgIHJlYXNvbmluZ1N0b3JlLmZpbmlzaChwbGFjZWhvbGRlcklkLCAoZGF0YS5yZWFzb25pbmcgYXMgUmVhc29uaW5nVHJhY2VQYXlsb2FkIHwgbnVsbCkgPz8gbnVsbClcbiAgICAgICAgICAgICAgICBzdG9yZSgpLnBhdGNoTWV0YShzZXNzaW9uSWQsIHsgaXNMb2FkaW5nOiBmYWxzZSB9KVxuICAgICAgICAgICAgICAgIHNlc3Npb25TdHJlYW1pbmdUZXh0LmNsZWFyKHNlc3Npb25JZClcbiAgICAgICAgICAgICAgICBzdG9yZSgpLnNldEFjdGl2aXR5KHNlc3Npb25JZCwgbnVsbClcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBzdG9yZSgpLnNldFN0YXR1cyhzZXNzaW9uSWQsICdhd2FpdGluZ19hcHByb3ZhbCcpXG4gICAgICAgICAgICAgIGNhbGxiYWNrcy5vbkFwcHJvdmFsUmVxdWlyZWQ/LihkYXRhIGFzIEFwcHJvdmFsUmVxdWVzdCwgYWNjdW11bGF0ZWRDb250ZW50KVxuICAgICAgICAgICAgICBpZiAoc2hvdWxkUmVzdW1lSGl0bEFmdGVyUHJlQXBwcm92YWwoaXNQcmVBcHByb3ZlZCwgZGF0YS5wZW5kaW5nX2FjdGlvbnMpKSB7XG4gICAgICAgICAgICAgICAgc2V0VGhpbmtpbmdBY3Rpdml0eSgpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY2FzZSAnZXJyb3InOlxuICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdTU0UgRXJyb3I6JywgZGF0YS5lcnJvcilcbiAgICAgICAgICAgICAgZmx1c2hQZW5kaW5nKClcbiAgICAgICAgICAgICAgc2Vzc2lvblN0cmVhbWluZ1RleHQuY2xlYXIoc2Vzc2lvbklkKVxuICAgICAgICAgICAgICBzdG9yZSgpLnBhdGNoTWV0YShzZXNzaW9uSWQsIHsgaXNMb2FkaW5nOiBmYWxzZSwgaXNXcml0aW5nOiBmYWxzZSB9KVxuICAgICAgICAgICAgICBzdG9yZSgpLnNldEFjdGl2aXR5KHNlc3Npb25JZCwgbnVsbClcbiAgICAgICAgICAgICAgc3RvcmUoKS5zZXRFcnJvcihzZXNzaW9uSWQsIHsgdHlwZTogZGF0YS5lcnJvcj8udHlwZSwgbWVzc2FnZTogZGF0YS5lcnJvcj8ubWVzc2FnZSB9KVxuICAgICAgICAgICAgICBzdG9yZSgpLnNldFN0YXR1cyhzZXNzaW9uSWQsICdlcnJvcicpXG4gICAgICAgICAgICAgIGNhbGxiYWNrcy5vbkVycm9yPy4oZGF0YS5lcnJvcj8udHlwZSwgZGF0YS5lcnJvcj8ubWVzc2FnZSlcbiAgICAgICAgICAgICAgYnJlYWtcblxuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgY29uc29sZS53YXJuKCdVbmtub3duIFNTRSBldmVudCB0eXBlOicsIGV2ZW50VHlwZSlcbiAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKHBhcnNlRXJyb3IpIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBwYXJzaW5nIFNTRSBkYXRhOicsIHBhcnNlRXJyb3IsIGRhdGFTdHIpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0gZmluYWxseSB7XG4gICAgZmx1c2hQZW5kaW5nKClcbiAgfVxufVxuXG4vKipcbiAqIE1hbmFnZXIgc2luZ2xldG9uIChtb2R1bGUtbGV2ZWwpIHF1ZSBjb3JyZSBOIHN0cmVhbXMgZGVsIG9yY2hlc3RyYXRvciBlblxuICogcGFyYWxlbG8sIHVubyBwb3IgYHNlc3Npb25JZGAuIFNvYnJldml2ZSBhIGNhbWJpb3MgZGUgdmlzdGEgeSBhbCBjaWVycmUgZGVsXG4gKiBtb2RhbDogbG9zIHN0cmVhbXMgc29sbyBzZSBjYW5jZWxhbiBjb24gc3RvcCBleHBsw61jaXRvIGRlbCB1c3VhcmlvIG8gYWxcbiAqIGNvbXBsZXRhci9lcnJvcmFyLlxuICovXG5leHBvcnQgY29uc3Qgc2Vzc2lvblN0cmVhbU1hbmFnZXIgPSB7XG4gIGlzQWN0aXZlOiBpc1N0cmVhbUFjdGl2ZSxcbiAgZ2V0QWN0aXZlQ291bnQ6IGdldEFjdGl2ZVN0cmVhbUNvdW50LFxuICBnZXRBY3RpdmVTZXNzaW9uSWRzOiAoKTogc3RyaW5nW10gPT4gQXJyYXkuZnJvbShhY3RpdmVTdHJlYW1zLmtleXMoKSksXG5cbiAgYXN5bmMgc3RhcnRTdHJlYW0ocGFyYW1zOiBTdGFydFN0cmVhbVBhcmFtcyk6IFByb21pc2U8U3RhcnRTdHJlYW1SZXN1bHQ+IHtcbiAgICBlbnN1cmVTZXNzaW9uTm90aWZpY2F0aW9uc0luaXRpYWxpemVkKClcblxuICAgIGNvbnN0IHsgc2Vzc2lvbklkLCBwbGFjZWhvbGRlcklkLCByZXF1ZXN0LCBjYWxsYmFja3MsIHQsIGFjdGl2aXR5T3B0aW9ucywgYWdlbnRJZCwgYWdlbnROYW1lIH0gPSBwYXJhbXNcblxuICAgIGNvbnN0IHN0YXJ0R3VhcmQgPSByZXNvbHZlU3RhcnRTdHJlYW1HdWFyZChcbiAgICAgIGlzU3RyZWFtQWN0aXZlKHNlc3Npb25JZCksXG4gICAgICBnZXRBY3RpdmVTdHJlYW1Db3VudCgpLFxuICAgICAgTUFYX0NPTkNVUlJFTlRfU1RSRUFNU1xuICAgIClcbiAgICBpZiAoIXN0YXJ0R3VhcmQuYWxsb3dlZCkge1xuICAgICAgcmV0dXJuIHsgc3RhcnRlZDogZmFsc2UsIHJlYXNvbjogc3RhcnRHdWFyZC5yZWFzb24gfVxuICAgIH1cblxuICAgIGNvbnN0IGNvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKClcbiAgICBjb25zdCBhY3RpdmU6IEFjdGl2ZVN0cmVhbSA9IHsgc2Vzc2lvbklkLCBjb250cm9sbGVyLCBpc1N0b3BwZWQ6IGZhbHNlIH1cbiAgICBhY3RpdmVTdHJlYW1zLnNldChzZXNzaW9uSWQsIGFjdGl2ZSlcblxuICAgIHN0b3JlKCkuZW5zdXJlU2Vzc2lvbihzZXNzaW9uSWQpXG4gICAgc3RvcmUoKS5wYXRjaE1ldGEoc2Vzc2lvbklkLCB7XG4gICAgICBwbGFjZWhvbGRlcklkLFxuICAgICAgZXJyb3I6IG51bGwsXG4gICAgICBpc0xvYWRpbmc6IHRydWUsXG4gICAgICBpc1dyaXRpbmc6IGZhbHNlLFxuICAgICAgLi4ucGF0Y2hNZXRhQWdlbnRGaWVsZHMoYWdlbnRJZCwgYWdlbnROYW1lKSxcbiAgICB9KVxuICAgIHN0b3JlKCkuc2V0U3RhdHVzKHNlc3Npb25JZCwgJ3RoaW5raW5nJylcbiAgICBzZXNzaW9uU3RyZWFtaW5nVGV4dC5zdGFydChzZXNzaW9uSWQsIHBsYWNlaG9sZGVySWQpXG4gICAgcmVhc29uaW5nU3RvcmUuc3RhcnQocGxhY2Vob2xkZXJJZClcbiAgICBzdG9yZSgpLnNldEFjdGl2aXR5KHNlc3Npb25JZCwgZ2V0SW5pdGlhbFN0cmVhbUFjdGl2aXR5KHQsIGFjdGl2aXR5T3B0aW9ucyA/PyB7fSkpXG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBtYWlhLk9yY2hlc3RyYXRvci5vcmNoZXN0cmF0b3IocmVxdWVzdCwgY29udHJvbGxlci5zaWduYWwpXG4gICAgICBhd2FpdCBwYXJzZVNlc3Npb25TU0UocmVzcG9uc2UsIGFjdGl2ZSwgcGFyYW1zKVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpZiAoIWFjdGl2ZS5pc1N0b3BwZWQpIHtcbiAgICAgICAgc2Vzc2lvblN0cmVhbWluZ1RleHQuY2xlYXIoc2Vzc2lvbklkKVxuICAgICAgICBzdG9yZSgpLnBhdGNoTWV0YShzZXNzaW9uSWQsIHsgaXNMb2FkaW5nOiBmYWxzZSwgaXNXcml0aW5nOiBmYWxzZSB9KVxuICAgICAgICBzdG9yZSgpLnNldEFjdGl2aXR5KHNlc3Npb25JZCwgbnVsbClcbiAgICAgICAgc3RvcmUoKS5zZXRTdGF0dXMoc2Vzc2lvbklkLCAnZXJyb3InKVxuICAgICAgICBjYWxsYmFja3Mub25FcnJvcj8uKClcbiAgICAgIH1cbiAgICB9IGZpbmFsbHkge1xuICAgICAgYWN0aXZlU3RyZWFtcy5kZWxldGUoc2Vzc2lvbklkKVxuICAgIH1cblxuICAgIHJldHVybiB7IHN0YXJ0ZWQ6IHRydWUgfVxuICB9LFxuXG4gIC8qKiBSZXN1bWUgSElUTCAoYGNvbnRpbnVlLXRocmVhZGApIGtleWVkIHBvciBzZXNzaW9uSWQg4oCUIG1pc21vIG1vdG9yIHF1ZSBvcmNoZXN0cmF0b3IuICovXG4gIGFzeW5jIHN0YXJ0Q29udGludWVTdHJlYW0ocGFyYW1zOiBTdGFydENvbnRpbnVlU3RyZWFtUGFyYW1zKTogUHJvbWlzZTxTdGFydFN0cmVhbVJlc3VsdD4ge1xuICAgIGVuc3VyZVNlc3Npb25Ob3RpZmljYXRpb25zSW5pdGlhbGl6ZWQoKVxuXG4gICAgY29uc3QgeyBzZXNzaW9uSWQsIHBsYWNlaG9sZGVySWQsIGNvbnRpbnVlUmVxdWVzdCwgY2FsbGJhY2tzLCB0LCBoaXRsRXhlY3V0aW9uQ29udGV4dCwgYWdlbnRJZCwgYWdlbnROYW1lIH0gPSBwYXJhbXNcblxuICAgIGNvbnN0IGNvbnRpbnVlR3VhcmQgPSByZXNvbHZlU3RhcnRTdHJlYW1HdWFyZChcbiAgICAgIGlzU3RyZWFtQWN0aXZlKHNlc3Npb25JZCksXG4gICAgICBnZXRBY3RpdmVTdHJlYW1Db3VudCgpLFxuICAgICAgTUFYX0NPTkNVUlJFTlRfU1RSRUFNU1xuICAgIClcbiAgICBpZiAoIWNvbnRpbnVlR3VhcmQuYWxsb3dlZCkge1xuICAgICAgcmV0dXJuIHsgc3RhcnRlZDogZmFsc2UsIHJlYXNvbjogY29udGludWVHdWFyZC5yZWFzb24gfVxuICAgIH1cblxuICAgIGlmIChoaXRsRXhlY3V0aW9uQ29udGV4dCkge1xuICAgICAgc2Vzc2lvbkhpdGxDb250ZXh0LnNldChzZXNzaW9uSWQsIGhpdGxFeGVjdXRpb25Db250ZXh0KVxuICAgIH1cblxuICAgIGNvbnN0IGNvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKClcbiAgICBjb25zdCBhY3RpdmU6IEFjdGl2ZVN0cmVhbSA9IHsgc2Vzc2lvbklkLCBjb250cm9sbGVyLCBpc1N0b3BwZWQ6IGZhbHNlIH1cbiAgICBhY3RpdmVTdHJlYW1zLnNldChzZXNzaW9uSWQsIGFjdGl2ZSlcblxuICAgIHN0b3JlKCkuZW5zdXJlU2Vzc2lvbihzZXNzaW9uSWQpXG4gICAgc3RvcmUoKS5wYXRjaE1ldGEoc2Vzc2lvbklkLCB7XG4gICAgICBwbGFjZWhvbGRlcklkLFxuICAgICAgZXJyb3I6IG51bGwsXG4gICAgICBpc0xvYWRpbmc6IHRydWUsXG4gICAgICBpc1dyaXRpbmc6IGZhbHNlLFxuICAgICAgLi4ucGF0Y2hNZXRhQWdlbnRGaWVsZHMoYWdlbnRJZCwgYWdlbnROYW1lKSxcbiAgICB9KVxuICAgIHN0b3JlKCkuc2V0U3RhdHVzKHNlc3Npb25JZCwgJ3RoaW5raW5nJylcbiAgICBzZXNzaW9uU3RyZWFtaW5nVGV4dC5zdGFydChzZXNzaW9uSWQsIHBsYWNlaG9sZGVySWQpXG4gICAgc3RvcmUoKS5zZXRBY3Rpdml0eShcbiAgICAgIHNlc3Npb25JZCxcbiAgICAgIHJlc29sdmVJbml0aWFsSGl0bFN0cmVhbUFjdGl2aXR5KHQsIGhpdGxFeGVjdXRpb25Db250ZXh0ID8/IHNlc3Npb25IaXRsQ29udGV4dC5nZXQoc2Vzc2lvbklkKSA/PyB1bmRlZmluZWQpXG4gICAgKVxuXG4gICAgY29uc3Qgc3NlUGFyYW1zOiBTdGFydFN0cmVhbVBhcmFtcyA9IHtcbiAgICAgIHNlc3Npb25JZCxcbiAgICAgIHBsYWNlaG9sZGVySWQsXG4gICAgICByZXF1ZXN0OiB7fSBhcyBPcmNoZXN0cmF0b3JSZXF1ZXN0LFxuICAgICAgY2FsbGJhY2tzLFxuICAgICAgdCxcbiAgICAgIGhpdGxFeGVjdXRpb25Db250ZXh0OiBoaXRsRXhlY3V0aW9uQ29udGV4dCA/PyBzZXNzaW9uSGl0bENvbnRleHQuZ2V0KHNlc3Npb25JZCksXG4gICAgICBhZ2VudElkLFxuICAgICAgYWdlbnROYW1lLFxuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IG1haWEuT3JjaGVzdHJhdG9yLmNvbnRpbnVlVGhyZWFkKGNvbnRpbnVlUmVxdWVzdCwgY29udHJvbGxlci5zaWduYWwpXG4gICAgICBpZiAoIXJlc3BvbnNlLm9rKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgY29udGludWUtdGhyZWFkIGZhaWxlZDogJHtyZXNwb25zZS5zdGF0dXN9YClcbiAgICAgIH1cbiAgICAgIGF3YWl0IHBhcnNlU2Vzc2lvblNTRShyZXNwb25zZSwgYWN0aXZlLCBzc2VQYXJhbXMpXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGlmICghYWN0aXZlLmlzU3RvcHBlZCkge1xuICAgICAgICBzZXNzaW9uU3RyZWFtaW5nVGV4dC5jbGVhcihzZXNzaW9uSWQpXG4gICAgICAgIHN0b3JlKCkucGF0Y2hNZXRhKHNlc3Npb25JZCwgeyBpc0xvYWRpbmc6IGZhbHNlLCBpc1dyaXRpbmc6IGZhbHNlIH0pXG4gICAgICAgIHN0b3JlKCkuc2V0QWN0aXZpdHkoc2Vzc2lvbklkLCBudWxsKVxuICAgICAgICBzdG9yZSgpLnNldFN0YXR1cyhzZXNzaW9uSWQsICdlcnJvcicpXG4gICAgICAgIGNhbGxiYWNrcy5vbkVycm9yPy4oKVxuICAgICAgfVxuICAgIH0gZmluYWxseSB7XG4gICAgICBhY3RpdmVTdHJlYW1zLmRlbGV0ZShzZXNzaW9uSWQpXG4gICAgICBzZXNzaW9uSGl0bENvbnRleHQuY2xlYXIoc2Vzc2lvbklkKVxuICAgIH1cblxuICAgIHJldHVybiB7IHN0YXJ0ZWQ6IHRydWUgfVxuICB9LFxuXG4gIC8qKiBSZWdlbmVyYSBsYSByZXNwdWVzdGEgZGUgdW4gdHVybm8gKGByZXRyeV9jb21wbGV0aW9uYCkg4oCUIG1pc21vIG1vdG9yIFNTRSBxdWUgb3JjaGVzdHJhdG9yLiAqL1xuICBhc3luYyBzdGFydFJldHJ5U3RyZWFtKHBhcmFtczogU3RhcnRSZXRyeVN0cmVhbVBhcmFtcyk6IFByb21pc2U8U3RhcnRTdHJlYW1SZXN1bHQ+IHtcbiAgICBlbnN1cmVTZXNzaW9uTm90aWZpY2F0aW9uc0luaXRpYWxpemVkKClcblxuICAgIGNvbnN0IHsgc2Vzc2lvbklkLCBwbGFjZWhvbGRlcklkLCByZXRyeVJlcXVlc3QsIGNhbGxiYWNrcywgdCwgYWN0aXZpdHlPcHRpb25zLCBhZ2VudElkLCBhZ2VudE5hbWUgfSA9IHBhcmFtc1xuXG4gICAgY29uc3QgcmV0cnlHdWFyZCA9IHJlc29sdmVTdGFydFN0cmVhbUd1YXJkKFxuICAgICAgaXNTdHJlYW1BY3RpdmUoc2Vzc2lvbklkKSxcbiAgICAgIGdldEFjdGl2ZVN0cmVhbUNvdW50KCksXG4gICAgICBNQVhfQ09OQ1VSUkVOVF9TVFJFQU1TXG4gICAgKVxuICAgIGlmICghcmV0cnlHdWFyZC5hbGxvd2VkKSB7XG4gICAgICByZXR1cm4geyBzdGFydGVkOiBmYWxzZSwgcmVhc29uOiByZXRyeUd1YXJkLnJlYXNvbiB9XG4gICAgfVxuXG4gICAgY29uc3QgY29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKVxuICAgIGNvbnN0IGFjdGl2ZTogQWN0aXZlU3RyZWFtID0geyBzZXNzaW9uSWQsIGNvbnRyb2xsZXIsIGlzU3RvcHBlZDogZmFsc2UgfVxuICAgIGFjdGl2ZVN0cmVhbXMuc2V0KHNlc3Npb25JZCwgYWN0aXZlKVxuXG4gICAgc3RvcmUoKS5lbnN1cmVTZXNzaW9uKHNlc3Npb25JZClcbiAgICBzdG9yZSgpLnBhdGNoTWV0YShzZXNzaW9uSWQsIHtcbiAgICAgIHBsYWNlaG9sZGVySWQsXG4gICAgICBlcnJvcjogbnVsbCxcbiAgICAgIGlzTG9hZGluZzogdHJ1ZSxcbiAgICAgIGlzV3JpdGluZzogZmFsc2UsXG4gICAgICAuLi5wYXRjaE1ldGFBZ2VudEZpZWxkcyhhZ2VudElkLCBhZ2VudE5hbWUpLFxuICAgIH0pXG4gICAgc3RvcmUoKS5zZXRTdGF0dXMoc2Vzc2lvbklkLCAndGhpbmtpbmcnKVxuICAgIHNlc3Npb25TdHJlYW1pbmdUZXh0LnN0YXJ0KHNlc3Npb25JZCwgcGxhY2Vob2xkZXJJZClcbiAgICBzdG9yZSgpLnNldEFjdGl2aXR5KHNlc3Npb25JZCwgZ2V0SW5pdGlhbFN0cmVhbUFjdGl2aXR5KHQsIGFjdGl2aXR5T3B0aW9ucyA/PyB7fSkpXG5cbiAgICBjb25zdCBzc2VQYXJhbXM6IFN0YXJ0U3RyZWFtUGFyYW1zID0ge1xuICAgICAgc2Vzc2lvbklkLFxuICAgICAgcGxhY2Vob2xkZXJJZCxcbiAgICAgIHJlcXVlc3Q6IHt9IGFzIE9yY2hlc3RyYXRvclJlcXVlc3QsXG4gICAgICBjYWxsYmFja3MsXG4gICAgICB0LFxuICAgICAgYWN0aXZpdHlPcHRpb25zLFxuICAgICAgYWdlbnRJZCxcbiAgICAgIGFnZW50TmFtZSxcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBtYWlhLk9yY2hlc3RyYXRvci5yZXRyeUNvbXBsZXRpb24ocmV0cnlSZXF1ZXN0LCBjb250cm9sbGVyLnNpZ25hbClcbiAgICAgIGlmICghcmVzcG9uc2Uub2spIHtcbiAgICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PT0gNDA0KSB7XG4gICAgICAgICAgbGV0IGRldGFpbDogc3RyaW5nIHwgdW5kZWZpbmVkXG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IGRhdGEgPSAoYXdhaXQgcmVzcG9uc2UuanNvbigpKSBhcyB7IGRldGFpbD86IHN0cmluZyB9XG4gICAgICAgICAgICBkZXRhaWwgPSB0eXBlb2YgZGF0YS5kZXRhaWwgPT09ICdzdHJpbmcnID8gZGF0YS5kZXRhaWwgOiB1bmRlZmluZWRcbiAgICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAgIGRldGFpbCA9IHVuZGVmaW5lZFxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoaXNSZXRyeVR1cm5Ob3RGb3VuZFJlc3BvbnNlKHJlc3BvbnNlLnN0YXR1cywgZGV0YWlsKSkge1xuICAgICAgICAgICAgc2Vzc2lvblN0cmVhbWluZ1RleHQuY2xlYXIoc2Vzc2lvbklkKVxuICAgICAgICAgICAgc3RvcmUoKS5wYXRjaE1ldGEoc2Vzc2lvbklkLCB7IGlzTG9hZGluZzogZmFsc2UsIGlzV3JpdGluZzogZmFsc2UsIHBsYWNlaG9sZGVySWQ6IG51bGwgfSlcbiAgICAgICAgICAgIHN0b3JlKCkuc2V0QWN0aXZpdHkoc2Vzc2lvbklkLCBudWxsKVxuICAgICAgICAgICAgc3RvcmUoKS5zZXRTdGF0dXMoc2Vzc2lvbklkLCAnaWRsZScpXG4gICAgICAgICAgICBhY3RpdmVTdHJlYW1zLmRlbGV0ZShzZXNzaW9uSWQpXG4gICAgICAgICAgICByZXR1cm4geyBzdGFydGVkOiBmYWxzZSwgcmVhc29uOiAndHVybl9ub3RfZm91bmQnIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGByZXRyeV9jb21wbGV0aW9uIGZhaWxlZDogJHtyZXNwb25zZS5zdGF0dXN9YClcbiAgICAgIH1cbiAgICAgIGF3YWl0IHBhcnNlU2Vzc2lvblNTRShyZXNwb25zZSwgYWN0aXZlLCBzc2VQYXJhbXMpXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGlmICghYWN0aXZlLmlzU3RvcHBlZCkge1xuICAgICAgICBzZXNzaW9uU3RyZWFtaW5nVGV4dC5jbGVhcihzZXNzaW9uSWQpXG4gICAgICAgIHN0b3JlKCkucGF0Y2hNZXRhKHNlc3Npb25JZCwgeyBpc0xvYWRpbmc6IGZhbHNlLCBpc1dyaXRpbmc6IGZhbHNlIH0pXG4gICAgICAgIHN0b3JlKCkuc2V0QWN0aXZpdHkoc2Vzc2lvbklkLCBudWxsKVxuICAgICAgICBzdG9yZSgpLnNldFN0YXR1cyhzZXNzaW9uSWQsICdlcnJvcicpXG4gICAgICAgIGNhbGxiYWNrcy5vbkVycm9yPy4oKVxuICAgICAgfVxuICAgIH0gZmluYWxseSB7XG4gICAgICBhY3RpdmVTdHJlYW1zLmRlbGV0ZShzZXNzaW9uSWQpXG4gICAgfVxuXG4gICAgcmV0dXJuIHsgc3RhcnRlZDogdHJ1ZSB9XG4gIH0sXG5cbiAgLyoqIENhbmNlbGFjacOzbiBleHBsw61jaXRhIGRlbCB1c3VhcmlvIChtZW5zYWplIFwiY2FuY2VsYWRvXCIpLiAqL1xuICBzdG9wU3RyZWFtKHNlc3Npb25JZDogc3RyaW5nLCBjYWxsYmFja3M/OiBTZXNzaW9uU3RyZWFtQ2FsbGJhY2tzKSB7XG4gICAgY29uc3QgYWN0aXZlID0gYWN0aXZlU3RyZWFtcy5nZXQoc2Vzc2lvbklkKVxuICAgIGlmICghYWN0aXZlKSByZXR1cm5cbiAgICBhY3RpdmUuaXNTdG9wcGVkID0gdHJ1ZVxuICAgIGFjdGl2ZS5jb250cm9sbGVyLmFib3J0KClcbiAgICBhY3RpdmVTdHJlYW1zLmRlbGV0ZShzZXNzaW9uSWQpXG4gICAgLy8gRWwgcGFyY2lhbCBzZSByZXNjYXRhIGFudGVzIGRlIGxpbXBpYXI6IGVsIGJhY2tlbmQgbG8gcGVyc2lzdGUsIHBlcm8gc2kgbm8gbG9cbiAgICAvLyBwYXNhbW9zIGFsIGNhbGxiYWNrIGRlc2FwYXJlY2UgZGUgcGFudGFsbGEgaGFzdGEgZWwgcHLDs3hpbW8gZmV0Y2ggZGUgbGEgc2VzacOzbi5cbiAgICBjb25zdCBwYXJ0aWFsVGV4dCA9IHNlc3Npb25TdHJlYW1pbmdUZXh0LmdldFNuYXBzaG90KHNlc3Npb25JZCkudGV4dFxuICAgIHNlc3Npb25TdHJlYW1pbmdUZXh0LmNsZWFyKHNlc3Npb25JZClcbiAgICBzdG9yZSgpLnBhdGNoTWV0YShzZXNzaW9uSWQsIHsgaXNMb2FkaW5nOiBmYWxzZSwgaXNXcml0aW5nOiBmYWxzZSB9KVxuICAgIHN0b3JlKCkuc2V0QWN0aXZpdHkoc2Vzc2lvbklkLCBudWxsKVxuICAgIHN0b3JlKCkuc2V0U3RhdHVzKHNlc3Npb25JZCwgJ2NhbmNlbGxlZCcpXG4gICAgY2FsbGJhY2tzPy5vblN0b3A/LihwYXJ0aWFsVGV4dClcbiAgfSxcblxuICAvKiogQWJvcnRhIHNpbiBtYXJjYXIgXCJjYW5jZWxhZG9cIiAodXNvIGludGVybm8gLyBsaW1waWV6YSkuICovXG4gIGFib3J0U2lsZW50bHkoc2Vzc2lvbklkOiBzdHJpbmcpIHtcbiAgICBjb25zdCBhY3RpdmUgPSBhY3RpdmVTdHJlYW1zLmdldChzZXNzaW9uSWQpXG4gICAgaWYgKCFhY3RpdmUpIHJldHVyblxuICAgIGFjdGl2ZS5pc1N0b3BwZWQgPSB0cnVlXG4gICAgYWN0aXZlLmNvbnRyb2xsZXIuYWJvcnQoKVxuICAgIGFjdGl2ZVN0cmVhbXMuZGVsZXRlKHNlc3Npb25JZClcbiAgICBzZXNzaW9uU3RyZWFtaW5nVGV4dC5jbGVhcihzZXNzaW9uSWQpXG4gICAgc3RvcmUoKS5wYXRjaE1ldGEoc2Vzc2lvbklkLCB7IGlzTG9hZGluZzogZmFsc2UsIGlzV3JpdGluZzogZmFsc2UgfSlcbiAgICBzdG9yZSgpLnNldEFjdGl2aXR5KHNlc3Npb25JZCwgbnVsbClcbiAgICBpZiAoc2hvdWxkU2V0SWRsZU9uU2lsZW50QWJvcnQoc3RvcmUoKS5nZXRNZXRhKHNlc3Npb25JZCk/LnN0YXR1cykpIHtcbiAgICAgIHN0b3JlKCkuc2V0U3RhdHVzKHNlc3Npb25JZCwgJ2lkbGUnKVxuICAgIH1cbiAgfSxcblxuICBhYm9ydEFsbCgpIHtcbiAgICBBcnJheS5mcm9tKGFjdGl2ZVN0cmVhbXMua2V5cygpKS5mb3JFYWNoKHNlc3Npb25JZCA9PiB0aGlzLmFib3J0U2lsZW50bHkoc2Vzc2lvbklkKSlcbiAgfSxcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPQSxJQUFJLE1BQU0scUJBQXFCO0FBRXRDLFNBQ0VDLHdCQUF3QixFQUN4QkMseUJBQXlCLEVBQ3pCQyxxQkFBcUIsRUFDckJDLHdCQUF3QixFQUN4QkMsZ0NBQWdDLFFBQzNCLG9DQUFvQztBQUUzQyxTQUFTQyx3QkFBd0IsRUFBRUMsZ0JBQWdCLFFBQVEsOEJBQThCO0FBQ3pGLFNBQVNDLGNBQWMsUUFBUSwrQkFBK0I7QUFFOUQsU0FBU0Msb0JBQW9CLFFBQVEsd0JBQXdCO0FBQzdELFNBQVNDLGdCQUFnQixRQUFRLG9CQUFvQjtBQUNyRCxTQUFTQyxxQ0FBcUMsUUFBUSx3QkFBd0I7QUFDOUUsU0FBU0Msa0JBQWtCLFFBQVEsc0JBQXNCO0FBRXpELFNBQ0VDLHlCQUF5QixFQUN6QkMs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
|