@projectcor/maia-components 2.51.1 → 2.52.1-0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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/ContextCompactedNotice/ContextCompactedNotice.spec.js +107 -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 +123 -99
- package/lib/components/atoms/MAIAInput/MAIAInput.spec.js +719 -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 +780 -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.js +95 -3
- package/lib/components/molecules/ChatAIMessages/ChatAIMessages.helpers.spec.js +967 -0
- package/lib/components/molecules/ChatAIMessages/ChatAIMessages.js +136 -53
- package/lib/components/molecules/ChatAIMessages/ChatAIMessages.spec.js +646 -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 +1395 -0
- package/lib/components/molecules/ChatAIModal/ChatAIModal.js +23 -8
- package/lib/components/molecules/ChatAIModal/ChatAIModal.spec.js +1434 -0
- package/lib/components/molecules/ChatAIModal/ChatAIModal.styles.js +3 -3
- 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/ChatAIMultipleChoice/ChatAIMultipleChoice.js +108 -0
- package/lib/components/molecules/ChatAIMultipleChoice/ChatAIMultipleChoice.spec.js +102 -0
- package/lib/components/molecules/ChatAIMultipleChoice/ChatAIMultipleChoice.styles.js +77 -0
- package/lib/components/molecules/ChatAIMultipleChoice/ChatAIMultipleChoiceAnswer.js +62 -0
- package/lib/components/molecules/ChatAIMultipleChoice/ChatAIMultipleChoiceAnswer.spec.js +49 -0
- package/lib/components/molecules/ChatAIMultipleChoice/ChatAIMultipleChoiceAnswer.styles.js +26 -0
- package/lib/components/molecules/ChatAIMultipleChoice/index.js +3 -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 +91 -5
- package/lib/components/molecules/ChatFooter/ChatFooter.spec.js +548 -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 +526 -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 +217 -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 +291 -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 +343 -0
- package/lib/components/organisms/ChatAIPage/ChatAIPageHome.styles.js +197 -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 +15 -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 +8 -5
- package/lib/hooks/useChatManager/useChatManager.helpers.spec.js +2027 -0
- package/lib/hooks/useChatManager/useChatManager.js +53 -35
- package/lib/hooks/useChatManager/useChatManager.spec.js +2467 -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/useContinueLegacyContextInNewChat/useContinueLegacyContextInNewChat.spec.js +257 -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.js +3 -1
- package/lib/hooks/useEvent.spec.js +45 -0
- package/lib/hooks/useFrequentlyAskedQuestions.spec.js +222 -0
- package/lib/hooks/useFrequentlyUsedActions.js +61 -22
- package/lib/hooks/useFrequentlyUsedActions.spec.js +293 -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/useLatestRef.js +15 -0
- package/lib/hooks/useLatestRef.spec.js +50 -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.js +4 -2
- package/lib/hooks/useOrchestratorStream/useOrchestratorStream.helpers.spec.js +138 -0
- package/lib/hooks/useOrchestratorStream/useOrchestratorStream.interface.js +1 -1
- package/lib/hooks/useOrchestratorStream/useOrchestratorStream.js +3 -3
- package/lib/hooks/useOrchestratorStream/useOrchestratorStream.spec.js +485 -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 +32 -1
- package/lib/lang/en/index.js +32 -1
- package/lib/lang/es/index.js +32 -1
- package/lib/lang/fr/index.js +32 -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 +121 -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 +181 -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.js +11 -6
- package/lib/services/maia/Orchestrator/orchestrator.helpers.spec.js +261 -0
- package/lib/services/maia/Orchestrator/orchestrator.js +5 -4
- 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.js +6 -3
- package/lib/services/utils/mapChatMessages.helpers.spec.js +336 -0
- package/lib/services/utils/mapChatMessages.multipleChoice.spec.js +87 -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.js +7 -1
- 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.js +1 -1
- 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 +690 -0
- package/lib/store/useFaqsStore.spec.js +57 -0
- package/lib/store/useMultipleChoiceStore.js +47 -0
- package/lib/store/useMultipleChoiceStore.spec.js +44 -0
- package/lib/styles/cascade.js +29 -3
- package/lib/styles/transitions.js +3 -1
- package/lib/types/Chat.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 +116 -1
- package/lib/utils/hoursPlannerQuickActionType.spec.js +124 -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.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
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
import _asyncToGenerator from "@babel/runtime/helpers/asyncToGenerator";
|
|
2
|
+
import _regeneratorRuntime from "@babel/runtime/regenerator";
|
|
3
|
+
import { fireEvent, renderWithProviders, screen, waitFor } from '../../../test/test-utils';
|
|
4
|
+
import { fetchAgentDetailAndParsedForAbm } from '../../../services/maia/Agents/fetchAgentDetail';
|
|
5
|
+
import { ChatAICreateAgentActions } from './ChatAICreateAgentActions';
|
|
6
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
7
|
+
jest.mock('../../../services/maia/Agents/fetchAgentDetail', function () {
|
|
8
|
+
return {
|
|
9
|
+
fetchAgentDetailAndParsedForAbm: jest.fn()
|
|
10
|
+
};
|
|
11
|
+
});
|
|
12
|
+
jest.mock('../../../hooks/useSnackBarManager/useSnackBarManager', function () {
|
|
13
|
+
return {
|
|
14
|
+
useSnackBarManager: function useSnackBarManager() {
|
|
15
|
+
return {
|
|
16
|
+
handleSnackbarError: jest.fn()
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
};
|
|
20
|
+
});
|
|
21
|
+
var fetchDetail = fetchAgentDetailAndParsedForAbm;
|
|
22
|
+
var flags = window;
|
|
23
|
+
describe('ChatAICreateAgentActions', function () {
|
|
24
|
+
beforeEach(function () {
|
|
25
|
+
flags.MAIA_CHAT_AI_FEATURE_ACCESS_MULTI_AGENTS = true;
|
|
26
|
+
fetchDetail.mockResolvedValue({
|
|
27
|
+
chatAgent: {
|
|
28
|
+
id: 'a1',
|
|
29
|
+
name: 'Nuevo',
|
|
30
|
+
emoji: '✨',
|
|
31
|
+
type: 'custom'
|
|
32
|
+
},
|
|
33
|
+
abmParsed: {
|
|
34
|
+
id: 'a1',
|
|
35
|
+
name: 'Nuevo'
|
|
36
|
+
}
|
|
37
|
+
});
|
|
38
|
+
});
|
|
39
|
+
afterEach(function () {
|
|
40
|
+
delete flags.MAIA_CHAT_AI_FEATURE_ACCESS_MULTI_AGENTS;
|
|
41
|
+
});
|
|
42
|
+
it('returns null without the multi-agents flag', function () {
|
|
43
|
+
delete flags.MAIA_CHAT_AI_FEATURE_ACCESS_MULTI_AGENTS;
|
|
44
|
+
var _renderWithProviders = renderWithProviders(/*#__PURE__*/_jsx(ChatAICreateAgentActions, {
|
|
45
|
+
agentId: "a1"
|
|
46
|
+
})),
|
|
47
|
+
container = _renderWithProviders.container;
|
|
48
|
+
expect(container).toBeEmptyDOMElement();
|
|
49
|
+
});
|
|
50
|
+
it('opens a new chat with the created agent', /*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee() {
|
|
51
|
+
var onOpen;
|
|
52
|
+
return _regeneratorRuntime.wrap(function (_context) {
|
|
53
|
+
while (1) switch (_context.prev = _context.next) {
|
|
54
|
+
case 0:
|
|
55
|
+
onOpen = jest.fn();
|
|
56
|
+
document.addEventListener('maia-open-new-chat-with-agent', onOpen);
|
|
57
|
+
renderWithProviders(/*#__PURE__*/_jsx(ChatAICreateAgentActions, {
|
|
58
|
+
agentId: "a1"
|
|
59
|
+
}));
|
|
60
|
+
fireEvent.click(screen.getByRole('button', {
|
|
61
|
+
name: 'chat.createAgentActionStartChat'
|
|
62
|
+
}));
|
|
63
|
+
_context.next = 1;
|
|
64
|
+
return waitFor(function () {
|
|
65
|
+
expect(fetchDetail).toHaveBeenCalledWith('a1');
|
|
66
|
+
expect(onOpen).toHaveBeenCalled();
|
|
67
|
+
});
|
|
68
|
+
case 1:
|
|
69
|
+
document.removeEventListener('maia-open-new-chat-with-agent', onOpen);
|
|
70
|
+
case 2:
|
|
71
|
+
case "end":
|
|
72
|
+
return _context.stop();
|
|
73
|
+
}
|
|
74
|
+
}, _callee);
|
|
75
|
+
})));
|
|
76
|
+
it('opens the ABM on the knowledge section', /*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee2() {
|
|
77
|
+
var onAbm, event;
|
|
78
|
+
return _regeneratorRuntime.wrap(function (_context2) {
|
|
79
|
+
while (1) switch (_context2.prev = _context2.next) {
|
|
80
|
+
case 0:
|
|
81
|
+
onAbm = jest.fn();
|
|
82
|
+
document.addEventListener('abm-agent-modal-set-values', onAbm);
|
|
83
|
+
renderWithProviders(/*#__PURE__*/_jsx(ChatAICreateAgentActions, {
|
|
84
|
+
agentId: "a1"
|
|
85
|
+
}));
|
|
86
|
+
fireEvent.click(screen.getByRole('button', {
|
|
87
|
+
name: 'chat.createAgentActionKnowledge'
|
|
88
|
+
}));
|
|
89
|
+
_context2.next = 1;
|
|
90
|
+
return waitFor(function () {
|
|
91
|
+
expect(onAbm).toHaveBeenCalled();
|
|
92
|
+
});
|
|
93
|
+
case 1:
|
|
94
|
+
event = onAbm.mock.calls[0][0];
|
|
95
|
+
expect(event.detail.agentValues.initialSection).toBe('knowledge');
|
|
96
|
+
document.removeEventListener('abm-agent-modal-set-values', onAbm);
|
|
97
|
+
case 2:
|
|
98
|
+
case "end":
|
|
99
|
+
return _context2.stop();
|
|
100
|
+
}
|
|
101
|
+
}, _callee2);
|
|
102
|
+
})));
|
|
103
|
+
});
|
|
104
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJmaXJlRXZlbnQiLCJyZW5kZXJXaXRoUHJvdmlkZXJzIiwic2NyZWVuIiwid2FpdEZvciIsImZldGNoQWdlbnREZXRhaWxBbmRQYXJzZWRGb3JBYm0iLCJDaGF0QUlDcmVhdGVBZ2VudEFjdGlvbnMiLCJqc3giLCJfanN4IiwiamVzdCIsIm1vY2siLCJmbiIsInVzZVNuYWNrQmFyTWFuYWdlciIsImhhbmRsZVNuYWNrYmFyRXJyb3IiLCJmZXRjaERldGFpbCIsImZsYWdzIiwid2luZG93IiwiZGVzY3JpYmUiLCJiZWZvcmVFYWNoIiwiTUFJQV9DSEFUX0FJX0ZFQVRVUkVfQUNDRVNTX01VTFRJX0FHRU5UUyIsIm1vY2tSZXNvbHZlZFZhbHVlIiwiY2hhdEFnZW50IiwiaWQiLCJuYW1lIiwiZW1vamkiLCJ0eXBlIiwiYWJtUGFyc2VkIiwiYWZ0ZXJFYWNoIiwiaXQiLCJfcmVuZGVyV2l0aFByb3ZpZGVycyIsImFnZW50SWQiLCJjb250YWluZXIiLCJleHBlY3QiLCJ0b0JlRW1wdHlET01FbGVtZW50IiwiX2FzeW5jVG9HZW5lcmF0b3IiLCJfcmVnZW5lcmF0b3JSdW50aW1lIiwibWFyayIsIl9jYWxsZWUiLCJvbk9wZW4iLCJ3cmFwIiwiX2NvbnRleHQiLCJwcmV2IiwibmV4dCIsImRvY3VtZW50IiwiYWRkRXZlbnRMaXN0ZW5lciIsImNsaWNrIiwiZ2V0QnlSb2xlIiwidG9IYXZlQmVlbkNhbGxlZFdpdGgiLCJ0b0hhdmVCZWVuQ2FsbGVkIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsInN0b3AiLCJfY2FsbGVlMiIsIm9uQWJtIiwiZXZlbnQiLCJfY29udGV4dDIiLCJjYWxscyIsImRldGFpbCIsImFnZW50VmFsdWVzIiwiaW5pdGlhbFNlY3Rpb24iLCJ0b0JlIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvbW9sZWN1bGVzL0NoYXRBSU1lc3NhZ2VzL0NoYXRBSUNyZWF0ZUFnZW50QWN0aW9ucy5zcGVjLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBmaXJlRXZlbnQsIHJlbmRlcldpdGhQcm92aWRlcnMsIHNjcmVlbiwgd2FpdEZvciB9IGZyb20gJy4uLy4uLy4uL3Rlc3QvdGVzdC11dGlscydcbmltcG9ydCB7IGZldGNoQWdlbnREZXRhaWxBbmRQYXJzZWRGb3JBYm0gfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9tYWlhL0FnZW50cy9mZXRjaEFnZW50RGV0YWlsJ1xuaW1wb3J0IHsgQ2hhdEFJQ3JlYXRlQWdlbnRBY3Rpb25zIH0gZnJvbSAnLi9DaGF0QUlDcmVhdGVBZ2VudEFjdGlvbnMnXG5cbmplc3QubW9jaygnLi4vLi4vLi4vc2VydmljZXMvbWFpYS9BZ2VudHMvZmV0Y2hBZ2VudERldGFpbCcsICgpID0+ICh7XG4gIGZldGNoQWdlbnREZXRhaWxBbmRQYXJzZWRGb3JBYm06IGplc3QuZm4oKSxcbn0pKVxuXG5qZXN0Lm1vY2soJy4uLy4uLy4uL2hvb2tzL3VzZVNuYWNrQmFyTWFuYWdlci91c2VTbmFja0Jhck1hbmFnZXInLCAoKSA9PiAoe1xuICB1c2VTbmFja0Jhck1hbmFnZXI6ICgpID0+ICh7IGhhbmRsZVNuYWNrYmFyRXJyb3I6IGplc3QuZm4oKSB9KSxcbn0pKVxuXG5jb25zdCBmZXRjaERldGFpbCA9IGZldGNoQWdlbnREZXRhaWxBbmRQYXJzZWRGb3JBYm0gYXMgamVzdC5Nb2NrZWRGdW5jdGlvbjx0eXBlb2YgZmV0Y2hBZ2VudERldGFpbEFuZFBhcnNlZEZvckFibT5cblxudHlwZSBNdWx0aUFnZW50V2luZG93ID0gV2luZG93ICYgeyBNQUlBX0NIQVRfQUlfRkVBVFVSRV9BQ0NFU1NfTVVMVElfQUdFTlRTPzogYm9vbGVhbiB9XG5cbmNvbnN0IGZsYWdzID0gd2luZG93IGFzIE11bHRpQWdlbnRXaW5kb3dcblxuZGVzY3JpYmUoJ0NoYXRBSUNyZWF0ZUFnZW50QWN0aW9ucycsICgpID0+IHtcbiAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgZmxhZ3MuTUFJQV9DSEFUX0FJX0ZFQVRVUkVfQUNDRVNTX01VTFRJX0FHRU5UUyA9IHRydWVcbiAgICBmZXRjaERldGFpbC5tb2NrUmVzb2x2ZWRWYWx1ZSh7XG4gICAgICBjaGF0QWdlbnQ6IHsgaWQ6ICdhMScsIG5hbWU6ICdOdWV2bycsIGVtb2ppOiAn4pyoJywgdHlwZTogJ2N1c3RvbScgfSxcbiAgICAgIGFibVBhcnNlZDogeyBpZDogJ2ExJywgbmFtZTogJ051ZXZvJyB9LFxuICAgIH0gYXMgQXdhaXRlZDxSZXR1cm5UeXBlPHR5cGVvZiBmZXRjaEFnZW50RGV0YWlsQW5kUGFyc2VkRm9yQWJtPj4pXG4gIH0pXG5cbiAgYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICBkZWxldGUgZmxhZ3MuTUFJQV9DSEFUX0FJX0ZFQVRVUkVfQUNDRVNTX01VTFRJX0FHRU5UU1xuICB9KVxuXG4gIGl0KCdyZXR1cm5zIG51bGwgd2l0aG91dCB0aGUgbXVsdGktYWdlbnRzIGZsYWcnLCAoKSA9PiB7XG4gICAgZGVsZXRlIGZsYWdzLk1BSUFfQ0hBVF9BSV9GRUFUVVJFX0FDQ0VTU19NVUxUSV9BR0VOVFNcbiAgICBjb25zdCB7IGNvbnRhaW5lciB9ID0gcmVuZGVyV2l0aFByb3ZpZGVycyg8Q2hhdEFJQ3JlYXRlQWdlbnRBY3Rpb25zIGFnZW50SWQ9XCJhMVwiIC8+KVxuXG4gICAgZXhwZWN0KGNvbnRhaW5lcikudG9CZUVtcHR5RE9NRWxlbWVudCgpXG4gIH0pXG5cbiAgaXQoJ29wZW5zIGEgbmV3IGNoYXQgd2l0aCB0aGUgY3JlYXRlZCBhZ2VudCcsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBvbk9wZW4gPSBqZXN0LmZuKClcbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtYWlhLW9wZW4tbmV3LWNoYXQtd2l0aC1hZ2VudCcsIG9uT3BlbilcblxuICAgIHJlbmRlcldpdGhQcm92aWRlcnMoPENoYXRBSUNyZWF0ZUFnZW50QWN0aW9ucyBhZ2VudElkPVwiYTFcIiAvPilcbiAgICBmaXJlRXZlbnQuY2xpY2soc2NyZWVuLmdldEJ5Um9sZSgnYnV0dG9uJywgeyBuYW1lOiAnY2hhdC5jcmVhdGVBZ2VudEFjdGlvblN0YXJ0Q2hhdCcgfSkpXG5cbiAgICBhd2FpdCB3YWl0Rm9yKCgpID0+IHtcbiAgICAgIGV4cGVjdChmZXRjaERldGFpbCkudG9IYXZlQmVlbkNhbGxlZFdpdGgoJ2ExJylcbiAgICAgIGV4cGVjdChvbk9wZW4pLnRvSGF2ZUJlZW5DYWxsZWQoKVxuICAgIH0pXG5cbiAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtYWlhLW9wZW4tbmV3LWNoYXQtd2l0aC1hZ2VudCcsIG9uT3BlbilcbiAgfSlcblxuICBpdCgnb3BlbnMgdGhlIEFCTSBvbiB0aGUga25vd2xlZGdlIHNlY3Rpb24nLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3Qgb25BYm0gPSBqZXN0LmZuKClcbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdhYm0tYWdlbnQtbW9kYWwtc2V0LXZhbHVlcycsIG9uQWJtKVxuXG4gICAgcmVuZGVyV2l0aFByb3ZpZGVycyg8Q2hhdEFJQ3JlYXRlQWdlbnRBY3Rpb25zIGFnZW50SWQ9XCJhMVwiIC8+KVxuICAgIGZpcmVFdmVudC5jbGljayhzY3JlZW4uZ2V0QnlSb2xlKCdidXR0b24nLCB7IG5hbWU6ICdjaGF0LmNyZWF0ZUFnZW50QWN0aW9uS25vd2xlZGdlJyB9KSlcblxuICAgIGF3YWl0IHdhaXRGb3IoKCkgPT4ge1xuICAgICAgZXhwZWN0KG9uQWJtKS50b0hhdmVCZWVuQ2FsbGVkKClcbiAgICB9KVxuXG4gICAgY29uc3QgZXZlbnQgPSBvbkFibS5tb2NrLmNhbGxzWzBdWzBdIGFzIEN1c3RvbUV2ZW50XG4gICAgZXhwZWN0KGV2ZW50LmRldGFpbC5hZ2VudFZhbHVlcy5pbml0aWFsU2VjdGlvbikudG9CZSgna25vd2xlZGdlJylcblxuICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2FibS1hZ2VudC1tb2RhbC1zZXQtdmFsdWVzJywgb25BYm0pXG4gIH0pXG59KVxuIl0sIm1hcHBpbmdzIjoiOztBQUFBLFNBQVNBLFNBQVMsRUFBRUMsbUJBQW1CLEVBQUVDLE1BQU0sRUFBRUMsT0FBTyxRQUFRLDBCQUEwQjtBQUMxRixTQUFTQywrQkFBK0IsUUFBUSxnREFBZ0Q7QUFDaEcsU0FBU0Msd0JBQXdCLFFBQVEsNEJBQTRCO0FBQUEsU0FBQUMsR0FBQSxJQUFBQyxJQUFBO0FBRXJFQyxJQUFJLENBQUNDLElBQUksQ0FBQyxnREFBZ0QsRUFBRTtFQUFBLE9BQU87SUFDakVMLCtCQUErQixFQUFFSSxJQUFJLENBQUNFLEVBQUUsQ0FBQztFQUMzQyxDQUFDO0FBQUEsQ0FBQyxDQUFDO0FBRUhGLElBQUksQ0FBQ0MsSUFBSSxDQUFDLHNEQUFzRCxFQUFFO0VBQUEsT0FBTztJQUN2RUUsa0JBQWtCLEVBQUUsU0FBcEJBLGtCQUFrQkEsQ0FBQTtNQUFBLE9BQVM7UUFBRUMsbUJBQW1CLEVBQUVKLElBQUksQ0FBQ0UsRUFBRSxDQUFDO01BQUUsQ0FBQztJQUFBO0VBQy9ELENBQUM7QUFBQSxDQUFDLENBQUM7QUFFSCxJQUFNRyxXQUFXLEdBQUdULCtCQUE4RjtBQUlsSCxJQUFNVSxLQUFLLEdBQUdDLE1BQTBCO0FBRXhDQyxRQUFRLENBQUMsMEJBQTBCLEVBQUUsWUFBTTtFQUN6Q0MsVUFBVSxDQUFDLFlBQU07SUFDZkgsS0FBSyxDQUFDSSx3Q0FBd0MsR0FBRyxJQUFJO0lBQ3JETCxXQUFXLENBQUNNLGlCQUFpQixDQUFDO01BQzVCQyxTQUFTLEVBQUU7UUFBRUMsRUFBRSxFQUFFLElBQUk7UUFBRUMsSUFBSSxFQUFFLE9BQU87UUFBRUMsS0FBSyxFQUFFLEdBQUc7UUFBRUMsSUFBSSxFQUFFO01BQVMsQ0FBQztNQUNsRUMsU0FBUyxFQUFFO1FBQUVKLEVBQUUsRUFBRSxJQUFJO1FBQUVDLElBQUksRUFBRTtNQUFRO0lBQ3ZDLENBQWdFLENBQUM7RUFDbkUsQ0FBQyxDQUFDO0VBRUZJLFNBQVMsQ0FBQyxZQUFNO0lBQ2QsT0FBT1osS0FBSyxDQUFDSSx3Q0FBd0M7RUFDdkQsQ0FBQyxDQUFDO0VBRUZTLEVBQUUsQ0FBQyw0Q0FBNEMsRUFBRSxZQUFNO0lBQ3JELE9BQU9iLEtBQUssQ0FBQ0ksd0NBQXdDO0lBQ3JELElBQUFVLG9CQUFBLEdBQXNCM0IsbUJBQW1CLGNBQUNNLElBQUEsQ0FBQ0Ysd0JBQXdCO1FBQUN3QixPQUFPLEVBQUM7TUFBSSxDQUFFLENBQUMsQ0FBQztNQUE1RUMsU0FBUyxHQUFBRixvQkFBQSxDQUFURSxTQUFTO0lBRWpCQyxNQUFNLENBQUNELFNBQVMsQ0FBQyxDQUFDRSxtQkFBbUIsQ0FBQyxDQUFDO0VBQ3pDLENBQUMsQ0FBQztFQUVGTCxFQUFFLENBQUMseUNBQXlDLGVBQUFNLGlCQUFBLGNBQUFDLG1CQUFBLENBQUFDLElBQUEsQ0FBRSxTQUFBQyxRQUFBO0lBQUEsSUFBQUMsTUFBQTtJQUFBLE9BQUFILG1CQUFBLENBQUFJLElBQUEsV0FBQUMsUUFBQTtNQUFBLGtCQUFBQSxRQUFBLENBQUFDLElBQUEsR0FBQUQsUUFBQSxDQUFBRSxJQUFBO1FBQUE7VUFDdENKLE1BQU0sR0FBRzdCLElBQUksQ0FBQ0UsRUFBRSxDQUFDLENBQUM7VUFDeEJnQyxRQUFRLENBQUNDLGdCQUFnQixDQUFDLCtCQUErQixFQUFFTixNQUFNLENBQUM7VUFFbEVwQyxtQkFBbUIsY0FBQ00sSUFBQSxDQUFDRix3QkFBd0I7WUFBQ3dCLE9BQU8sRUFBQztVQUFJLENBQUUsQ0FBQyxDQUFDO1VBQzlEN0IsU0FBUyxDQUFDNEMsS0FBSyxDQUFDMUMsTUFBTSxDQUFDMkMsU0FBUyxDQUFDLFFBQVEsRUFBRTtZQUFFdkIsSUFBSSxFQUFFO1VBQWtDLENBQUMsQ0FBQyxDQUFDO1VBQUFpQixRQUFBLENBQUFFLElBQUE7VUFBQSxPQUVsRnRDLE9BQU8sQ0FBQyxZQUFNO1lBQ2xCNEIsTUFBTSxDQUFDbEIsV0FBVyxDQUFDLENBQUNpQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUM7WUFDOUNmLE1BQU0sQ0FBQ00sTUFBTSxDQUFDLENBQUNVLGdCQUFnQixDQUFDLENBQUM7VUFDbkMsQ0FBQyxDQUFDO1FBQUE7VUFFRkwsUUFBUSxDQUFDTSxtQkFBbUIsQ0FBQywrQkFBK0IsRUFBRVgsTUFBTSxDQUFDO1FBQUE7UUFBQTtVQUFBLE9BQUFFLFFBQUEsQ0FBQVUsSUFBQTtNQUFBO0lBQUEsR0FBQWIsT0FBQTtFQUFBLENBQ3RFLEdBQUM7RUFFRlQsRUFBRSxDQUFDLHdDQUF3QyxlQUFBTSxpQkFBQSxjQUFBQyxtQkFBQSxDQUFBQyxJQUFBLENBQUUsU0FBQWUsU0FBQTtJQUFBLElBQUFDLEtBQUEsRUFBQUMsS0FBQTtJQUFBLE9BQUFsQixtQkFBQSxDQUFBSSxJQUFBLFdBQUFlLFNBQUE7TUFBQSxrQkFBQUEsU0FBQSxDQUFBYixJQUFBLEdBQUFhLFNBQUEsQ0FBQVosSUFBQTtRQUFBO1VBQ3JDVSxLQUFLLEdBQUczQyxJQUFJLENBQUNFLEVBQUUsQ0FBQyxDQUFDO1VBQ3ZCZ0MsUUFBUSxDQUFDQyxnQkFBZ0IsQ0FBQyw0QkFBNEIsRUFBRVEsS0FBSyxDQUFDO1VBRTlEbEQsbUJBQW1CLGNBQUNNLElBQUEsQ0FBQ0Ysd0JBQXdCO1lBQUN3QixPQUFPLEVBQUM7VUFBSSxDQUFFLENBQUMsQ0FBQztVQUM5RDdCLFNBQVMsQ0FBQzRDLEtBQUssQ0FBQzFDLE1BQU0sQ0FBQzJDLFNBQVMsQ0FBQyxRQUFRLEVBQUU7WUFBRXZCLElBQUksRUFBRTtVQUFrQyxDQUFDLENBQUMsQ0FBQztVQUFBK0IsU0FBQSxDQUFBWixJQUFBO1VBQUEsT0FFbEZ0QyxPQUFPLENBQUMsWUFBTTtZQUNsQjRCLE1BQU0sQ0FBQ29CLEtBQUssQ0FBQyxDQUFDSixnQkFBZ0IsQ0FBQyxDQUFDO1VBQ2xDLENBQUMsQ0FBQztRQUFBO1VBRUlLLEtBQUssR0FBR0QsS0FBSyxDQUFDMUMsSUFBSSxDQUFDNkMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztVQUNwQ3ZCLE1BQU0sQ0FBQ3FCLEtBQUssQ0FBQ0csTUFBTSxDQUFDQyxXQUFXLENBQUNDLGNBQWMsQ0FBQyxDQUFDQyxJQUFJLENBQUMsV0FBVyxDQUFDO1VBRWpFaEIsUUFBUSxDQUFDTSxtQkFBbUIsQ0FBQyw0QkFBNEIsRUFBRUcsS0FBSyxDQUFDO1FBQUE7UUFBQTtVQUFBLE9BQUFFLFNBQUEsQ0FBQUosSUFBQTtNQUFBO0lBQUEsR0FBQUMsUUFBQTtFQUFBLENBQ2xFLEdBQUM7QUFDSixDQUFDLENBQUMiLCJpZ25vcmVMaXN0IjpbXX0=
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import _defineProperty from "@babel/runtime/helpers/defineProperty";
|
|
2
|
+
import _toConsumableArray from "@babel/runtime/helpers/toConsumableArray";
|
|
2
3
|
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
3
4
|
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
4
5
|
import { Feedback } from '../MessageFeedback/MessageFeedback';
|
|
@@ -143,14 +144,104 @@ export var shouldHideEmptyStreamingBody = function shouldHideEmptyStreamingBody(
|
|
|
143
144
|
return !displayText && !isStreaming;
|
|
144
145
|
};
|
|
145
146
|
export var shouldRenderAssistantFeedback = function shouldRenderAssistantFeedback(params) {
|
|
146
|
-
return params.isAssistant && !params.isError && !params.approval && !params.isStreaming && (!params.isFrontendCancelled || Boolean(params.onRetry));
|
|
147
|
+
return params.isAssistant && !params.isError && !params.approval && !params.multipleChoice && !params.isStreaming && (!params.isFrontendCancelled || Boolean(params.onRetry));
|
|
147
148
|
};
|
|
148
149
|
export var shouldRenderAssistantSuggestions = function shouldRenderAssistantSuggestions(params) {
|
|
149
|
-
return params.isAssistant && !params.isFrontendCancelled && !params.approval &&
|
|
150
|
+
return params.isAssistant && !params.isFrontendCancelled && !params.approval &&
|
|
151
|
+
// Una pregunta bloqueante (multipleChoice) manda: el backend nunca manda las dos, pero si llegaran
|
|
152
|
+
// juntas no se muestran sugerencias opcionales al lado de una decisión pendiente.
|
|
153
|
+
!params.multipleChoice && (!params.isError || params.suggestionsLength > 0);
|
|
150
154
|
};
|
|
151
155
|
export var shouldHideAssistantSuggestions = function shouldHideAssistantSuggestions(isStreaming, isLastMessage, suggestionsDisabled) {
|
|
152
156
|
return Boolean(isStreaming || !isLastMessage || suggestionsDisabled);
|
|
153
157
|
};
|
|
158
|
+
var MARKDOWN_DECORATION = /(\*\*|__|`|^#+\s*|^\s*(?:[-*]|\d+[.)])\s+)/gm;
|
|
159
|
+
|
|
160
|
+
/**
|
|
161
|
+
* La pregunta es la última línea del mensaje que termina en "?". El backend manda la prosa y las opciones
|
|
162
|
+
* por separado, sin marcar cuál es la pregunta; si no hay ninguna, el título cae al texto genérico.
|
|
163
|
+
*/
|
|
164
|
+
export var extractMultipleChoiceQuestion = function extractMultipleChoiceQuestion(text) {
|
|
165
|
+
var lines = (text !== null && text !== void 0 ? text : '').split('\n').map(function (line) {
|
|
166
|
+
return line.replace(MARKDOWN_DECORATION, '').trim();
|
|
167
|
+
}).filter(Boolean);
|
|
168
|
+
var question = _toConsumableArray(lines).reverse().find(function (line) {
|
|
169
|
+
return line.endsWith('?');
|
|
170
|
+
});
|
|
171
|
+
return question !== null && question !== void 0 ? question : null;
|
|
172
|
+
};
|
|
173
|
+
|
|
174
|
+
/** La card vive sobre el input: solo aplica al último mensaje, cuando terminó de llegar y nadie la cerró. */
|
|
175
|
+
export var resolvePendingMultipleChoice = function resolvePendingMultipleChoice(params) {
|
|
176
|
+
var _last$multipleChoice;
|
|
177
|
+
if (params.isStreaming) return null;
|
|
178
|
+
var last = params.messages[params.messages.length - 1];
|
|
179
|
+
if (!last || !isAssistantChatMessage(last.role, last.user.id)) return null;
|
|
180
|
+
if (last.isError || last.isFrontendCancelled || last.approval) return null;
|
|
181
|
+
if (params.dismissedMessageIds[last.id]) return null;
|
|
182
|
+
var options = (_last$multipleChoice = last.multipleChoice) === null || _last$multipleChoice === void 0 ? void 0 : _last$multipleChoice.options;
|
|
183
|
+
if (!Array.isArray(options) || options.length < 2) return null;
|
|
184
|
+
return {
|
|
185
|
+
messageId: last.id,
|
|
186
|
+
question: extractMultipleChoiceQuestion(last.message),
|
|
187
|
+
options: options
|
|
188
|
+
};
|
|
189
|
+
};
|
|
190
|
+
|
|
191
|
+
/** Lo que eligió el usuario, tal como lo muestra la card resuelta. `number` es null si no eligió una opción. */
|
|
192
|
+
|
|
193
|
+
/**
|
|
194
|
+
* Una card queda resuelta cuando el mensaje siguiente es del usuario y viene marcado como su respuesta
|
|
195
|
+
* (lo marca el front al enviar y lo devuelve el historial). Esa respuesta se dibuja dentro de la card del
|
|
196
|
+
* asistente y la burbuja del usuario no se muestra.
|
|
197
|
+
*/
|
|
198
|
+
export var resolveAnsweredMultipleChoices = function resolveAnsweredMultipleChoices(messages) {
|
|
199
|
+
var answers = {};
|
|
200
|
+
var hiddenMessageIds = {};
|
|
201
|
+
messages.forEach(function (message, index) {
|
|
202
|
+
var _message$multipleChoi, _reply$message$trim, _reply$message;
|
|
203
|
+
var options = (_message$multipleChoi = message.multipleChoice) === null || _message$multipleChoi === void 0 ? void 0 : _message$multipleChoi.options;
|
|
204
|
+
var reply = messages[index + 1];
|
|
205
|
+
if (!(options !== null && options !== void 0 && options.length) || !isAssistantChatMessage(message.role, message.user.id)) return;
|
|
206
|
+
if (!(reply !== null && reply !== void 0 && reply.multipleChoiceAnswer) || isAssistantChatMessage(reply.role, reply.user.id)) return;
|
|
207
|
+
var _reply$multipleChoice = reply.multipleChoiceAnswer,
|
|
208
|
+
key = _reply$multipleChoice.key,
|
|
209
|
+
skipped = _reply$multipleChoice.skipped;
|
|
210
|
+
var optionIndex = key == null ? -1 : options.findIndex(function (option) {
|
|
211
|
+
return option.key === key;
|
|
212
|
+
});
|
|
213
|
+
var option = options[optionIndex];
|
|
214
|
+
if (skipped) answers[message.id] = {
|
|
215
|
+
number: null,
|
|
216
|
+
text: '',
|
|
217
|
+
skipped: true
|
|
218
|
+
};else if (option) answers[message.id] = {
|
|
219
|
+
number: optionIndex + 1,
|
|
220
|
+
text: option.text,
|
|
221
|
+
description: option.description
|
|
222
|
+
};else answers[message.id] = {
|
|
223
|
+
number: null,
|
|
224
|
+
text: (_reply$message$trim = (_reply$message = reply.message) === null || _reply$message === void 0 ? void 0 : _reply$message.trim()) !== null && _reply$message$trim !== void 0 ? _reply$message$trim : ''
|
|
225
|
+
};
|
|
226
|
+
hiddenMessageIds[reply.id] = true;
|
|
227
|
+
});
|
|
228
|
+
return {
|
|
229
|
+
answers: answers,
|
|
230
|
+
hiddenMessageIds: hiddenMessageIds
|
|
231
|
+
};
|
|
232
|
+
};
|
|
233
|
+
|
|
234
|
+
/** Si la última pregunta es una respuesta de card (oculta), el turno se ancla en la card resuelta. */
|
|
235
|
+
export var resolveTurnAnchorId = function resolveTurnAnchorId(messages, questionId, hiddenMessageIds) {
|
|
236
|
+
if (!questionId || !hiddenMessageIds[questionId]) return questionId;
|
|
237
|
+
var index = messages.findIndex(function (message) {
|
|
238
|
+
return message.id === questionId;
|
|
239
|
+
});
|
|
240
|
+
return index > 0 ? messages[index - 1].id : questionId;
|
|
241
|
+
};
|
|
242
|
+
export var isSamePendingMultipleChoice = function isSamePendingMultipleChoice(a, b) {
|
|
243
|
+
return (a === null || a === void 0 ? void 0 : a.messageId) === (b === null || b === void 0 ? void 0 : b.messageId) && (a === null || a === void 0 ? void 0 : a.question) === (b === null || b === void 0 ? void 0 : b.question) && (a === null || a === void 0 ? void 0 : a.options) === (b === null || b === void 0 ? void 0 : b.options);
|
|
244
|
+
};
|
|
154
245
|
export var shouldRenderCreateAgentActions = function shouldRenderCreateAgentActions(params) {
|
|
155
246
|
return params.isAssistant && !params.isError && !params.isFrontendCancelled && !params.approval && Boolean(params.agentId);
|
|
156
247
|
};
|
|
@@ -241,6 +332,7 @@ export var shouldSkipEmptyChatListMessage = function shouldSkipEmptyChatListMess
|
|
|
241
332
|
if (params.messageText) return false;
|
|
242
333
|
if (params.projectName) return false;
|
|
243
334
|
if (params.hasApproval) return false;
|
|
335
|
+
if (params.hasMultipleChoice) return false;
|
|
244
336
|
return true;
|
|
245
337
|
};
|
|
246
338
|
export var resolveDisableFeedbackFromWasHelpful = function resolveDisableFeedbackFromWasHelpful(wasHelpful) {
|
|
@@ -395,4 +487,4 @@ export var resolveReserveTurnSpacePlan = function resolveReserveTurnSpacePlan(pa
|
|
|
395
487
|
export var resolveScrollToBottomTargetTop = function resolveScrollToBottomTargetTop(scrollHeight, clientHeight) {
|
|
396
488
|
return scrollHeight - clientHeight;
|
|
397
489
|
};
|
|
398
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJGZWVkYmFjayIsIkNoYXRIaXN0b3J5Um9sZSIsImlzU3RyZWFtaW5nUGxhY2Vob2xkZXJNZXNzYWdlSWQiLCJ0dXJuQW5jaG9yT2Zmc2V0Iiwidmlld3BvcnRIZWlnaHQiLCJNYXRoIiwibWluIiwiVFVSTl9TQ1JPTExfRFVSQVRJT05fTVMiLCJUVVJOX1NDUk9MTF9NQVhfRFVSQVRJT05fTVMiLCJUVVJOX1NDUk9MTF9MT05HX0RJU1RBTkNFX1BYIiwiY29tcHV0ZVR1cm5TY3JvbGxEdXJhdGlvbk1zIiwiZGlzdGFuY2UiLCJhYnMiLCJjb21wdXRlRGlzdGFuY2VGcm9tQm90dG9tIiwic2Nyb2xsSGVpZ2h0Iiwic3BhY2VySGVpZ2h0Iiwic2Nyb2xsVG9wIiwiY2xpZW50SGVpZ2h0Iiwic2hvdWxkU2hvd1Njcm9sbFRvQm90dG9tIiwiZGlzdGFuY2VGcm9tQm90dG9tIiwidGhyZXNob2xkIiwiYXJndW1lbnRzIiwibGVuZ3RoIiwidW5kZWZpbmVkIiwiU0NST0xMX0dSQURJRU5UX1RIUkVTSE9MRF9QWCIsIlNDUk9MTF9ORUFSX0JPVFRPTV9ERUZBVUxUX1RIUkVTSE9MRCIsIlNDUk9MTF9ORUFSX0JPVFRPTV9VUF9USFJFU0hPTEQiLCJTQ1JPTExfQVRfQk9UVE9NX1RPTEVSQU5DRV9QWCIsIlNQQUNFUl9IRUlHSFRfRVBTSUxPTl9QWCIsInNob3VsZFNob3dUb3BTY3JvbGxHcmFkaWVudCIsInNob3VsZFNob3dCb3R0b21TY3JvbGxHcmFkaWVudCIsImlzU2Nyb2xsaW5nVXB3YXJkIiwibGFzdFNjcm9sbFRvcCIsImlzTmVhclNjcm9sbEJvdHRvbSIsInJlc29sdmVTY3JvbGxOZWFyQm90dG9tVGhyZXNob2xkIiwiY3VycmVudFRocmVzaG9sZCIsImlzU2Nyb2xsaW5nVXAiLCJpc05lYXJCb3R0b20iLCJzaG91bGRTa2lwVHVyblNjcm9sbEFuaW1hdGlvbiIsImVhc2VPdXRFeHBvU2Nyb2xsUHJvZ3Jlc3MiLCJwcm9ncmVzcyIsInBvdyIsImNvbXB1dGVUdXJuU2Nyb2xsVGFyZ2V0VG9wIiwicXVlc3Rpb25Ub3AiLCJvZmZzZXQiLCJtYXgiLCJzaG91bGRTa2lwVHVyblNwYWNlUmVzZXJ2YXRpb24iLCJjdXJyZW50U2Nyb2xsVG9wIiwidGFyZ2V0U2Nyb2xsVG9wIiwic2hvdWxkVXBkYXRlU3BhY2VySGVpZ2h0IiwiY3VycmVudEhlaWdodCIsIm5leHRIZWlnaHQiLCJjb21wdXRlU3luY2VkVHVyblNwYWNlckhlaWdodCIsInR1cm5IZWlnaHQiLCJjdXJyZW50U3BhY2VySGVpZ2h0IiwicmVzZXJ2ZWQiLCJzaG91bGREcmFpblR1cm5TcGFjZU9uU2Nyb2xsIiwiYW5jaG9yZWRUdXJuSWQiLCJzaG91bGRSZWxlYXNlVHVyblNwYWNlIiwiQm9vbGVhbiIsInNob3VsZFBlcnNpc3RNYWlhUGFuZWxTY3JvbGwiLCJpbml0aWFsQ2hhdElkIiwiaXNDb250YWluZXJBdFNjcm9sbEJvdHRvbSIsInRvbGVyYW5jZSIsImlzTmV3Q2hhdE1lc3NhZ2VFdmVudCIsImxhc3RJZCIsInByZXZJZCIsIm1lc3NhZ2VzTGVuZ3RoIiwicHJldkxlbmd0aCIsImhhc0luaXRpYWxVc2VyTWVzc2FnZUluTGlzdCIsIm1lc3NhZ2VzIiwic29tZSIsIm1zZyIsImlkIiwiaXNBcHByb3ZhbENoYXRNZXNzYWdlIiwibWVzc2FnZSIsIl9tZXNzYWdlJGlkIiwic3RhcnRzV2l0aCIsImFwcHJvdmFsIiwiaXNBbnN3ZXJPclF1ZXN0aW9uQ2hhdE1lc3NhZ2VJZCIsIm1lc3NhZ2VJZCIsInNob3VsZEF1dG9TY3JvbGxPbk1lc3NhZ2VzQ2hhbmdlIiwicGFyYW1zIiwiaXNOZXdNZXNzYWdlIiwid2FpdGluZ1Jlc3BvbnNlIiwiaXNXcml0aW5nIiwiaXNBbnN3ZXJPclF1ZXN0aW9uIiwiaXNBdEJvdHRvbSIsImlzQXBwcm92YWwiLCJoYXNJbml0aWFsTWVzc2FnZSIsInByZXZNZXNzYWdlc0xlbmd0aCIsInNob3VsZFJ1blN0cmVhbVR1cm5TeW5jRWZmZWN0IiwiaGFzTWVzc2FnZUxldmVsU3RyZWFtSW5kaWNhdG9yIiwibGFzdE1lc3NhZ2VJZCIsInNob3VsZFNob3dHbG9iYWxTdHJlYW1Mb2FkaW5nSW5kaWNhdG9yIiwiaGFzTWVzc2FnZUxldmVsSW5kaWNhdG9yIiwic3RyZWFtTG9hZGluZ0Rpc3BsYXkiLCJpc0N1cnJlbnRVc2VyTWVzc2FnZSIsInJvbGUiLCJ1c2VySWQiLCJhdXRoVXNlcklkIiwiVVNFUiIsImlzQXNzaXN0YW50Q2hhdE1lc3NhZ2UiLCJBU1NJU1RBTlQiLCJpc0FjdGl2ZVN0cmVhbWluZ1N0YXRlIiwiaXNTdHJlYW1pbmciLCJpc1N0cmVhbWluZ1BsYWNlaG9sZGVyIiwic2hvdWxkU2hvd1N0cmVhbWluZ01lc3NhZ2VCb2R5IiwiaXNBY3RpdmVTdHJlYW1pbmciLCJoYXNTdHJlYW1UZXh0Iiwic3RyZWFtTmFycmF0aW9uSW5UaW1lbGluZSIsInNob3VsZFNob3dTdHJlYW1BY3Rpdml0eUluZGljYXRvciIsImlzQXNzaXN0YW50Iiwic3RyZWFtQWN0aXZpdHkiLCJzaG91bGRSZW5kZXJDaGFuZ2VQcm9qZWN0TWVzc2FnZSIsImlzQ2hhbmdlUHJvamVjdCIsIm9wdGlvbnMiLCJzaG91bGRTaG93TWVzc2FnZUF0dGFjaG1lbnRzUm93IiwiYXR0YWNobWVudENvdW50Iiwic2hvdWxkUmVuZGVyTWVzc2FnZVRleHRCb2R5IiwibWVzc2FnZVRleHQiLCJzaG93U3RyZWFtaW5nQm9keSIsInNob3VsZFNob3dBcHByb3ZhbEFjdGlvbnMiLCJwZW5kaW5nX2FjdGlvbnMiLCJzaG91bGRIaWRlRW1wdHlTdHJlYW1pbmdCb2R5IiwiZGlzcGxheVRleHQiLCJzaG91bGRSZW5kZXJBc3Npc3RhbnRGZWVkYmFjayIsImlzRXJyb3IiLCJpc0Zyb250ZW5kQ2FuY2VsbGVkIiwib25SZXRyeSIsInNob3VsZFJlbmRlckFzc2lzdGFudFN1Z2dlc3Rpb25zIiwic3VnZ2VzdGlvbnNMZW5ndGgiLCJzaG91bGRIaWRlQXNzaXN0YW50U3VnZ2VzdGlvbnMiLCJpc0xhc3RNZXNzYWdlIiwic3VnZ2VzdGlvbnNEaXNhYmxlZCIsInNob3VsZFJlbmRlckNyZWF0ZUFnZW50QWN0aW9ucyIsImFnZW50SWQiLCJyZXNvbHZlQ2hhdExpc3RJdGVtU3RyZWFtaW5nRmxhZ3MiLCJjb3VudFVzZXJNZXNzYWdlQXR0YWNobWVudHMiLCJBcnJheSIsImlzQXJyYXkiLCJhdHRhY2htZW50cyIsInNvdXJjZUNvdW50Iiwic291cmNlcyIsInNob3VsZElnbm9yZVN1Z2dlc3Rpb25DbGljayIsInN1Z2dlc3Rpb24iLCJhbHJlYWR5U2VsZWN0ZWQiLCJ0cmltIiwiaXNSZXRyeVN1Z2dlc3Rpb25TZWxlY3Rpb24iLCJyZXRyeUxhYmVsIiwicmVzb2x2ZVJldHJ5QXR0YWNobWVudHNGcm9tVXNlck1lc3NhZ2UiLCJ1c2VyTWVzc2FnZSIsInNob3VsZE9wZW5NZXNzYWdlT3B0aW9uIiwic2VsZWN0ZWRPcHRpb24iLCJyZXNvbHZlQXR0YWNobWVudERvd25sb2FkQmxvYlN0cmF0ZWd5IiwiZmlsZVVybCIsImZpbGUiLCJGaWxlIiwiZXh0cmFjdEZlZWRiYWNrU2Vzc2lvbklkIiwic3BsaXQiLCJmaWx0ZXIiLCJxdWVzdGlvbklkIiwiam9pbiIsIkFVRElPX0VYVEVOU0lPTlMiLCJBVURJT19UWVBFUyIsImlzQXVkaW9BdHRhY2htZW50IiwiYXR0YWNobWVudCIsIl9hdHRhY2htZW50JHR5cGUiLCJfYXR0YWNobWVudCRuYW1lIiwiYXR0YWNobWVudFR5cGUiLCJ0eXBlIiwidG9Mb3dlckNhc2UiLCJhdHRhY2htZW50TmFtZSIsIm5hbWUiLCJpbmNsdWRlcyIsImV4dCIsImVuZHNXaXRoIiwiY2FuT3BlbkF0dGFjaG1lbnRQcmV2aWV3Iiwib3JpZ2luYWxGaWxlIiwidXJsX3RodW1ibmFpbCIsInVybF9vcmlnaW5hbCIsInVybF9maWxlIiwiZmluZExhc3RRdWVzdGlvbklkIiwiaW5kZXgiLCJfbWVzc2FnZXMkaW5kZXgiLCJjb21wdXRlUmVzZXJ2ZWRUdXJuU3BhY2UiLCJyZXNvbHZlTWVzc2FnZUF0dGFjaG1lbnRzIiwicmVzb2x2ZUF0dGFjaG1lbnREb3dubG9hZEZpbGVOYW1lIiwiZXh0ZW5zaW9uIiwiY29uY2F0IiwicmVzb2x2ZUF0dGFjaG1lbnREb3dubG9hZFVybCIsInNob3VsZFNraXBFbXB0eUNoYXRMaXN0TWVzc2FnZSIsInByb2plY3ROYW1lIiwiaGFzQXBwcm92YWwiLCJyZXNvbHZlRGlzYWJsZUZlZWRiYWNrRnJvbVdhc0hlbHBmdWwiLCJ3YXNIZWxwZnVsIiwiVEhVTUJTX1VQIiwiVEhVTUJTX0RPV04iLCJjYW5SZXRyeUFzc2lzdGFudE1lc3NhZ2UiLCJoYXNVc2VyTWVzc2FnZUZvclJldHJ5IiwiaXNDYW5jZWxsZWQiLCJ0dXJuSWQiLCJjb21wdXRlUmVtb3ZhYmxlVHVyblNwYWNlIiwicmVtb3ZhYmxlIiwicmVhZFNtb290aFN0cmVhbVdpbmRvd0ZsYWdzIiwid2luZG93IiwiYnVpbGRTbW9vdGhTdHJlYW1UZXh0T3B0aW9ucyIsImZsYWdzIiwiX29iamVjdFNwcmVhZCIsImVuYWJsZWQiLCJtYXhDaGFyc1BlckZyYW1lIiwic25hcFRvV29yZEJvdW5kYXJ5Iiwic3RyZWFtTGFnTXMiLCJ0YXJnZXRMYWdNcyIsInN0cmVhbUFkYXB0IiwiYWRhcHRUb0JhY2tlbmRSYXRlIiwic3RyZWFtQnVmZmVyTXMiLCJ0YXJnZXRCdWZmZXJNcyIsInN0cmVhbU1pbkJ1ZmZlciIsIm1pbkJ1ZmZlckNoYXJzIiwic3RyZWFtV2FybXVwTXMiLCJ3YXJtdXBNcyIsInJlc29sdmVTdHJlYW1pbmdSYXdUZXh0Iiwic3RyZWFtaW5nVGV4dCIsInNob3VsZFJlbmRlck1lbnRpb25JbmxpbmVOb2RlcyIsImhhc01lbnRpb25zIiwibWVudGlvbk5vZGVzIiwicmVzb2x2ZUZlZWRiYWNrUHJvcHNGb3JDYW5jZWxsZWQiLCJoYW5kbGVGZWVkYmFja0NsaWNrIiwiaGFuZGxlRmVlZGJhY2siLCJyZXNvbHZlU3RyZWFtaW5nTWVzc2FnZUhvb2tJZCIsInNob3VsZEluaXRpYWxpemVDaGF0IiwiYWxyZWFkeUluaXRpYWxpemVkIiwic2hvdWxkQ2xlYXJMYXN0UmVzZXJ2ZWRRdWVzdGlvbiIsImxvYWRpbmdNZXNzYWdlcyIsInNob3VsZFNjaGVkdWxlVHVyblNwYWNlUmVzZXJ2YXRpb24iLCJpc0xvYWRpbmdNb3JlTWVzc2FnZXMiLCJsYXN0UmVzZXJ2ZWRRdWVzdGlvbklkIiwic2hvdWxkU2tpcE1lc3NhZ2VzU2Nyb2xsRWZmZWN0IiwiaGFzQ29udGFpbmVyIiwiaXNMb2FkaW5nTW9yZVJlZiIsInJlc29sdmVDb250YWluZXJBdEJvdHRvbSIsImNvbnRhaW5lciIsInNob3VsZFJ1blNlc3Npb25DYWNoZVNjcm9sbFRvQm90dG9tIiwibGFzdFNjcm9sbGVkU2Vzc2lvbklkIiwiZGV0ZWN0SnVzdEZpbmlzaGVkTG9hZGluZ01lc3NhZ2VzIiwid2FzTG9hZGluZyIsInNob3VsZFNjcm9sbFRvQm90dG9tQWZ0ZXJMb2FkIiwianVzdEZpbmlzaGVkTG9hZGluZyIsInNob3VsZFVwZGF0ZVNjcm9sbEFmZm9yZGFuY2VzT25Mb2FkRW5kIiwic2hvdWxkQ2xlYXJTY3JvbGxSZXN0b3JlV2l0aG91dENoYXQiLCJyZXNvbHZlUGVuZGluZ1Njcm9sbFRvcEZyb21TZXNzaW9uIiwic2Vzc2lvbiIsInNjcm9sbFNlc3Npb25JZCIsInNob3VsZEFwcGx5UGVuZGluZ1Njcm9sbFJlc3RvcmUiLCJwZW5kaW5nU2Nyb2xsVG9wIiwic2hvdWxkUmVzdG9yZVNjcm9sbE9uRXhwYW5kZWRDaGFuZ2UiLCJwcmV2aW91c0V4cGFuZGVkIiwiZXhwYW5kZWQiLCJyZXNvbHZlTWVzc2FnZUxpc3RJdGVtS2V5IiwicmVzb2x2ZUNyZWF0ZUFnZW50QWN0aW9uc0FnZW50SWQiLCJmb2xsb3dVcCIsInJlc29sdmVTdHJlYW1pbmdUZXh0SG9va0lkIiwicmVzb2x2ZVJlYXNvbmluZ1RyYWNlSG9va0lkIiwicmVzb2x2ZVNjcm9sbE9uUGFyZW50TW9kZSIsInJlc29sdmVMYXN0VXNlck1lc3NhZ2VGb3JBdHRhY2htZW50cyIsInVzZXIiLCJ0b1N0cmluZyIsImF0IiwicmVzb2x2ZVN1Z2dlc3Rpb25BbmFseXRpY3NBZ2VudFR5cGUiLCJpc01hcmtldHBsYWNlR2xvYmFsQWdlbnQiLCJhZ2VudFR5cGUiLCJwcm9jZXNzQ2hhdE1lc3NhZ2VzU2Nyb2xsRnJhbWUiLCJpbnB1dCIsInNjcm9sbFRocmVzaG9sZCIsIm5leHRTY3JvbGxUaHJlc2hvbGQiLCJzaG91bGREcmFpblR1cm5TcGFjZSIsInNob3VsZFNjaGVkdWxlU2Nyb2xsUGVyc2lzdCIsInNob3VsZE5vdGlmeVNjcm9sbFRvQm90dG9tIiwiY29tcHV0ZU1lYXN1cmVUdXJuTGF5b3V0IiwicXVlc3Rpb25TY3JvbGxUb3AiLCJjb250YWluZXJUb3AiLCJjb250ZW50Qm90dG9tU2Nyb2xsIiwiY29udGVudEJvdHRvbSIsInJlc29sdmVSZXNlcnZlVHVyblNwYWNlUGxhbiIsImtpbmQiLCJyZXNvbHZlU2Nyb2xsVG9Cb3R0b21UYXJnZXRUb3AiXSwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50cy9tb2xlY3VsZXMvQ2hhdEFJTWVzc2FnZXMvQ2hhdEFJTWVzc2FnZXMuaGVscGVycy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IEF0dGFjaG1lbnRGaWxlIH0gZnJvbSAnLi4vQ2hhdEZvb3Rlci9DaGF0Rm9vdGVyJ1xuaW1wb3J0IHsgRmVlZGJhY2sgfSBmcm9tICcuLi9NZXNzYWdlRmVlZGJhY2svTWVzc2FnZUZlZWRiYWNrJ1xuaW1wb3J0IHsgQ2hhdEhpc3RvcnlSb2xlIH0gZnJvbSAnLi4vLi4vLi4vdHlwZXMvQ2hhdCdcbmltcG9ydCB7IGlzU3RyZWFtaW5nUGxhY2Vob2xkZXJNZXNzYWdlSWQgfSBmcm9tICcuLi8uLi8uLi91dGlscy9zdHJlYW1BY3Rpdml0eU1lc3NhZ2VzJ1xuXG5leHBvcnQgY29uc3QgdHVybkFuY2hvck9mZnNldCA9ICh2aWV3cG9ydEhlaWdodDogbnVtYmVyKTogbnVtYmVyID0+IE1hdGgubWluKHZpZXdwb3J0SGVpZ2h0ICogMC4xOCwgMjAwKVxuXG5leHBvcnQgY29uc3QgVFVSTl9TQ1JPTExfRFVSQVRJT05fTVMgPSA2MDBcbmV4cG9ydCBjb25zdCBUVVJOX1NDUk9MTF9NQVhfRFVSQVRJT05fTVMgPSA4MDBcbmV4cG9ydCBjb25zdCBUVVJOX1NDUk9MTF9MT05HX0RJU1RBTkNFX1BYID0gMTIwMFxuXG5leHBvcnQgY29uc3QgY29tcHV0ZVR1cm5TY3JvbGxEdXJhdGlvbk1zID0gKGRpc3RhbmNlOiBudW1iZXIpOiBudW1iZXIgPT5cbiAgVFVSTl9TQ1JPTExfRFVSQVRJT05fTVMgK1xuICAoVFVSTl9TQ1JPTExfTUFYX0RVUkFUSU9OX01TIC0gVFVSTl9TQ1JPTExfRFVSQVRJT05fTVMpICpcbiAgICBNYXRoLm1pbigxLCBNYXRoLmFicyhkaXN0YW5jZSkgLyBUVVJOX1NDUk9MTF9MT05HX0RJU1RBTkNFX1BYKVxuXG5leHBvcnQgY29uc3QgY29tcHV0ZURpc3RhbmNlRnJvbUJvdHRvbSA9IChcbiAgc2Nyb2xsSGVpZ2h0OiBudW1iZXIsXG4gIHNwYWNlckhlaWdodDogbnVtYmVyLFxuICBzY3JvbGxUb3A6IG51bWJlcixcbiAgY2xpZW50SGVpZ2h0OiBudW1iZXJcbik6IG51bWJlciA9PiBzY3JvbGxIZWlnaHQgLSBzcGFjZXJIZWlnaHQgLSBzY3JvbGxUb3AgLSBjbGllbnRIZWlnaHRcblxuZXhwb3J0IGNvbnN0IHNob3VsZFNob3dTY3JvbGxUb0JvdHRvbSA9IChkaXN0YW5jZUZyb21Cb3R0b206IG51bWJlciwgdGhyZXNob2xkID0gNTApOiBib29sZWFuID0+XG4gIGRpc3RhbmNlRnJvbUJvdHRvbSA+IHRocmVzaG9sZFxuXG5leHBvcnQgY29uc3QgU0NST0xMX0dSQURJRU5UX1RIUkVTSE9MRF9QWCA9IDFcbmV4cG9ydCBjb25zdCBTQ1JPTExfTkVBUl9CT1RUT01fREVGQVVMVF9USFJFU0hPTEQgPSAzOVxuZXhwb3J0IGNvbnN0IFNDUk9MTF9ORUFSX0JPVFRPTV9VUF9USFJFU0hPTEQgPSAxNVxuZXhwb3J0IGNvbnN0IFNDUk9MTF9BVF9CT1RUT01fVE9MRVJBTkNFX1BYID0gMTAwXG5leHBvcnQgY29uc3QgU1BBQ0VSX0hFSUdIVF9FUFNJTE9OX1BYID0gMVxuXG5leHBvcnQgY29uc3Qgc2hvdWxkU2hvd1RvcFNjcm9sbEdyYWRpZW50ID0gKHNjcm9sbFRvcDogbnVtYmVyLCB0aHJlc2hvbGQgPSBTQ1JPTExfR1JBRElFTlRfVEhSRVNIT0xEX1BYKTogYm9vbGVhbiA9PlxuICBzY3JvbGxUb3AgPiB0aHJlc2hvbGRcblxuZXhwb3J0IGNvbnN0IHNob3VsZFNob3dCb3R0b21TY3JvbGxHcmFkaWVudCA9IChcbiAgZGlzdGFuY2VGcm9tQm90dG9tOiBudW1iZXIsXG4gIHRocmVzaG9sZCA9IFNDUk9MTF9HUkFESUVOVF9USFJFU0hPTERfUFhcbik6IGJvb2xlYW4gPT4gZGlzdGFuY2VGcm9tQm90dG9tID4gdGhyZXNob2xkXG5cbmV4cG9ydCBjb25zdCBpc1Njcm9sbGluZ1Vwd2FyZCA9IChzY3JvbGxUb3A6IG51bWJlciwgbGFzdFNjcm9sbFRvcDogbnVtYmVyKTogYm9vbGVhbiA9PiBzY3JvbGxUb3AgPCBsYXN0U2Nyb2xsVG9wXG5cbmV4cG9ydCBjb25zdCBpc05lYXJTY3JvbGxCb3R0b20gPSAoXG4gIHNjcm9sbEhlaWdodDogbnVtYmVyLFxuICBzY3JvbGxUb3A6IG51bWJlcixcbiAgY2xpZW50SGVpZ2h0OiBudW1iZXIsXG4gIHRocmVzaG9sZDogbnVtYmVyXG4pOiBib29sZWFuID0+IHNjcm9sbEhlaWdodCAtIHNjcm9sbFRvcCAtIGNsaWVudEhlaWdodCA8IHRocmVzaG9sZFxuXG5leHBvcnQgY29uc3QgcmVzb2x2ZVNjcm9sbE5lYXJCb3R0b21UaHJlc2hvbGQgPSAoXG4gIGN1cnJlbnRUaHJlc2hvbGQ6IG51bWJlcixcbiAgaXNTY3JvbGxpbmdVcDogYm9vbGVhbixcbiAgaXNOZWFyQm90dG9tOiBib29sZWFuXG4pOiBudW1iZXIgPT4ge1xuICBpZiAoaXNOZWFyQm90dG9tKSByZXR1cm4gU0NST0xMX05FQVJfQk9UVE9NX0RFRkFVTFRfVEhSRVNIT0xEXG4gIGlmIChpc1Njcm9sbGluZ1VwKSByZXR1cm4gU0NST0xMX05FQVJfQk9UVE9NX1VQX1RIUkVTSE9MRFxuICByZXR1cm4gY3VycmVudFRocmVzaG9sZFxufVxuXG5leHBvcnQgY29uc3Qgc2hvdWxkU2tpcFR1cm5TY3JvbGxBbmltYXRpb24gPSAoZGlzdGFuY2U6IG51bWJlcik6IGJvb2xlYW4gPT4gTWF0aC5hYnMoZGlzdGFuY2UpIDwgMVxuXG5leHBvcnQgY29uc3QgZWFzZU91dEV4cG9TY3JvbGxQcm9ncmVzcyA9IChwcm9ncmVzczogbnVtYmVyKTogbnVtYmVyID0+IChwcm9ncmVzcyA9PT0gMSA/IDEgOiAxIC0gMiAqKiAoLTEyICogcHJvZ3Jlc3MpKVxuXG5leHBvcnQgY29uc3QgY29tcHV0ZVR1cm5TY3JvbGxUYXJnZXRUb3AgPSAocXVlc3Rpb25Ub3A6IG51bWJlciwgdmlld3BvcnRIZWlnaHQ6IG51bWJlcik6IG51bWJlciA9PiB7XG4gIGNvbnN0IG9mZnNldCA9IHR1cm5BbmNob3JPZmZzZXQodmlld3BvcnRIZWlnaHQpXG4gIHJldHVybiBNYXRoLm1heCgwLCBxdWVzdGlvblRvcCAtIG9mZnNldClcbn1cblxuZXhwb3J0IGNvbnN0IHNob3VsZFNraXBUdXJuU3BhY2VSZXNlcnZhdGlvbiA9IChjdXJyZW50U2Nyb2xsVG9wOiBudW1iZXIsIHRhcmdldFNjcm9sbFRvcDogbnVtYmVyKTogYm9vbGVhbiA9PlxuICB0YXJnZXRTY3JvbGxUb3AgPD0gY3VycmVudFNjcm9sbFRvcFxuXG5leHBvcnQgY29uc3Qgc2hvdWxkVXBkYXRlU3BhY2VySGVpZ2h0ID0gKGN1cnJlbnRIZWlnaHQ6IG51bWJlciwgbmV4dEhlaWdodDogbnVtYmVyKTogYm9vbGVhbiA9PlxuICBNYXRoLmFicyhjdXJyZW50SGVpZ2h0IC0gbmV4dEhlaWdodCkgPj0gU1BBQ0VSX0hFSUdIVF9FUFNJTE9OX1BYXG5cbmV4cG9ydCBjb25zdCBjb21wdXRlU3luY2VkVHVyblNwYWNlckhlaWdodCA9IChcbiAgY2xpZW50SGVpZ2h0OiBudW1iZXIsXG4gIHR1cm5IZWlnaHQ6IG51bWJlcixcbiAgY3VycmVudFNwYWNlckhlaWdodDogbnVtYmVyXG4pOiBudW1iZXIgPT4ge1xuICBjb25zdCBvZmZzZXQgPSB0dXJuQW5jaG9yT2Zmc2V0KGNsaWVudEhlaWdodClcbiAgY29uc3QgcmVzZXJ2ZWQgPSBNYXRoLm1heCgwLCBjbGllbnRIZWlnaHQgLSB0dXJuSGVpZ2h0IC0gb2Zmc2V0KVxuICByZXR1cm4gTWF0aC5taW4oY3VycmVudFNwYWNlckhlaWdodCwgcmVzZXJ2ZWQpXG59XG5cbmV4cG9ydCBjb25zdCBzaG91bGREcmFpblR1cm5TcGFjZU9uU2Nyb2xsID0gKGFuY2hvcmVkVHVybklkOiBzdHJpbmcgfCBudWxsKTogYm9vbGVhbiA9PiAhYW5jaG9yZWRUdXJuSWRcblxuZXhwb3J0IGNvbnN0IHNob3VsZFJlbGVhc2VUdXJuU3BhY2UgPSAoYW5jaG9yZWRUdXJuSWQ6IHN0cmluZyB8IG51bGwsIHNwYWNlckhlaWdodDogbnVtYmVyKTogYm9vbGVhbiA9PlxuICBCb29sZWFuKGFuY2hvcmVkVHVybklkKSB8fCBzcGFjZXJIZWlnaHQgPiAwXG5cbmV4cG9ydCBjb25zdCBzaG91bGRQZXJzaXN0TWFpYVBhbmVsU2Nyb2xsID0gKGluaXRpYWxDaGF0SWQ6IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQsIHNjcm9sbFRvcDogbnVtYmVyKTogYm9vbGVhbiA9PlxuICBCb29sZWFuKGluaXRpYWxDaGF0SWQpICYmIHNjcm9sbFRvcCA+IDBcblxuZXhwb3J0IGNvbnN0IGlzQ29udGFpbmVyQXRTY3JvbGxCb3R0b20gPSAoXG4gIHNjcm9sbEhlaWdodDogbnVtYmVyLFxuICBzY3JvbGxUb3A6IG51bWJlcixcbiAgY2xpZW50SGVpZ2h0OiBudW1iZXIsXG4gIHRvbGVyYW5jZSA9IFNDUk9MTF9BVF9CT1RUT01fVE9MRVJBTkNFX1BYXG4pOiBib29sZWFuID0+IHNjcm9sbEhlaWdodCAtIHNjcm9sbFRvcCA8PSBjbGllbnRIZWlnaHQgKyB0b2xlcmFuY2VcblxuZXhwb3J0IGNvbnN0IGlzTmV3Q2hhdE1lc3NhZ2VFdmVudCA9IChcbiAgbGFzdElkOiBzdHJpbmcgfCBudWxsLFxuICBwcmV2SWQ6IHN0cmluZyB8IG51bGwsXG4gIG1lc3NhZ2VzTGVuZ3RoOiBudW1iZXIsXG4gIHByZXZMZW5ndGg6IG51bWJlclxuKTogYm9vbGVhbiA9PiBsYXN0SWQgIT09IHByZXZJZCB8fCBtZXNzYWdlc0xlbmd0aCAhPT0gcHJldkxlbmd0aFxuXG5leHBvcnQgY29uc3QgaGFzSW5pdGlhbFVzZXJNZXNzYWdlSW5MaXN0ID0gKG1lc3NhZ2VzOiBBcnJheTx7IGlkPzogc3RyaW5nIH0+KTogYm9vbGVhbiA9PlxuICBtZXNzYWdlcy5zb21lKG1zZyA9PiBtc2cuaWQgPT09ICd1c2VyLWluaXRpYWwtbWVzc2FnZScpXG5cbmV4cG9ydCBjb25zdCBpc0FwcHJvdmFsQ2hhdE1lc3NhZ2UgPSAobWVzc2FnZTogeyBpZD86IHN0cmluZzsgYXBwcm92YWw/OiB1bmtub3duIH0gfCBudWxsIHwgdW5kZWZpbmVkKTogYm9vbGVhbiA9PlxuICBCb29sZWFuKG1lc3NhZ2UgJiYgKG1lc3NhZ2UuaWQ/LnN0YXJ0c1dpdGgoJ2FwcHJvdmFsLScpIHx8IG1lc3NhZ2UuYXBwcm92YWwpKVxuXG5leHBvcnQgY29uc3QgaXNBbnN3ZXJPclF1ZXN0aW9uQ2hhdE1lc3NhZ2VJZCA9IChtZXNzYWdlSWQ6IHN0cmluZyB8IHVuZGVmaW5lZCk6IGJvb2xlYW4gPT5cbiAgQm9vbGVhbihtZXNzYWdlSWQ/LnN0YXJ0c1dpdGgoJ2Fuc3dlci0nKSB8fCBtZXNzYWdlSWQ/LnN0YXJ0c1dpdGgoJ3F1ZXN0aW9uLScpKVxuXG5leHBvcnQgY29uc3Qgc2hvdWxkQXV0b1Njcm9sbE9uTWVzc2FnZXNDaGFuZ2UgPSAocGFyYW1zOiB7XG4gIGlzTmV3TWVzc2FnZTogYm9vbGVhblxuICBhbmNob3JlZFR1cm5JZDogc3RyaW5nIHwgbnVsbFxuICB3YWl0aW5nUmVzcG9uc2U6IGJvb2xlYW5cbiAgaXNXcml0aW5nOiBib29sZWFuXG4gIGlzQXRCb3R0b206IGJvb2xlYW5cbiAgaXNBbnN3ZXJPclF1ZXN0aW9uOiBib29sZWFuXG4gIGlzQXBwcm92YWw6IGJvb2xlYW5cbiAgaGFzSW5pdGlhbE1lc3NhZ2U6IGJvb2xlYW5cbiAgbWVzc2FnZXNMZW5ndGg6IG51bWJlclxuICBwcmV2TWVzc2FnZXNMZW5ndGg6IG51bWJlclxufSk6ICdzY3JvbGwnIHwgJ3N5bmMtdHVybicgfCAnYWZmb3JkYW5jZXMtb25seScgPT4ge1xuICBpZiAoIXBhcmFtcy5pc05ld01lc3NhZ2UpIHJldHVybiAnYWZmb3JkYW5jZXMtb25seSdcbiAgaWYgKHBhcmFtcy5hbmNob3JlZFR1cm5JZCkgcmV0dXJuICdzeW5jLXR1cm4nXG4gIGlmIChwYXJhbXMud2FpdGluZ1Jlc3BvbnNlIHx8IHBhcmFtcy5pc1dyaXRpbmcpIHJldHVybiAnYWZmb3JkYW5jZXMtb25seSdcbiAgaWYgKHBhcmFtcy5pc0Fuc3dlck9yUXVlc3Rpb24gJiYgcGFyYW1zLmlzQXRCb3R0b20pIHJldHVybiAnc2Nyb2xsJ1xuICBpZiAoXG4gICAgIXBhcmFtcy5pc0Fuc3dlck9yUXVlc3Rpb24gJiZcbiAgICAhcGFyYW1zLmlzQXBwcm92YWwgJiZcbiAgICAhcGFyYW1zLmhhc0luaXRpYWxNZXNzYWdlICYmXG4gICAgcGFyYW1zLm1lc3NhZ2VzTGVuZ3RoID4gcGFyYW1zLnByZXZNZXNzYWdlc0xlbmd0aFxuICApIHtcbiAgICByZXR1cm4gJ3Njcm9sbCdcbiAgfVxuICByZXR1cm4gJ2FmZm9yZGFuY2VzLW9ubHknXG59XG5cbmV4cG9ydCBjb25zdCBzaG91bGRSdW5TdHJlYW1UdXJuU3luY0VmZmVjdCA9ICh3YWl0aW5nUmVzcG9uc2U6IGJvb2xlYW4sIGlzV3JpdGluZzogYm9vbGVhbik6IGJvb2xlYW4gPT5cbiAgd2FpdGluZ1Jlc3BvbnNlIHx8IGlzV3JpdGluZ1xuXG5leHBvcnQgY29uc3QgaGFzTWVzc2FnZUxldmVsU3RyZWFtSW5kaWNhdG9yID0gKFxuICBsYXN0TWVzc2FnZUlkOiBzdHJpbmcgfCB1bmRlZmluZWQsXG4gIHdhaXRpbmdSZXNwb25zZTogYm9vbGVhbixcbiAgaXNXcml0aW5nOiBib29sZWFuXG4pOiBib29sZWFuID0+IEJvb2xlYW4obGFzdE1lc3NhZ2VJZCAmJiBpc1N0cmVhbWluZ1BsYWNlaG9sZGVyTWVzc2FnZUlkKGxhc3RNZXNzYWdlSWQpICYmICh3YWl0aW5nUmVzcG9uc2UgfHwgaXNXcml0aW5nKSlcblxuZXhwb3J0IGNvbnN0IHNob3VsZFNob3dHbG9iYWxTdHJlYW1Mb2FkaW5nSW5kaWNhdG9yID0gKFxuICBoYXNNZXNzYWdlTGV2ZWxJbmRpY2F0b3I6IGJvb2xlYW4sXG4gIHN0cmVhbUxvYWRpbmdEaXNwbGF5OiB1bmtub3duXG4pOiBib29sZWFuID0+ICFoYXNNZXNzYWdlTGV2ZWxJbmRpY2F0b3IgJiYgQm9vbGVhbihzdHJlYW1Mb2FkaW5nRGlzcGxheSlcblxuZXhwb3J0IGNvbnN0IGlzQ3VycmVudFVzZXJNZXNzYWdlID0gKHJvbGU6IENoYXRIaXN0b3J5Um9sZSB8IHVuZGVmaW5lZCwgdXNlcklkOiBzdHJpbmcsIGF1dGhVc2VySWQ6IHN0cmluZyk6IGJvb2xlYW4gPT5cbiAgcm9sZSA9PT0gQ2hhdEhpc3RvcnlSb2xlLlVTRVIgfHwgdXNlcklkID09PSBhdXRoVXNlcklkXG5cbmV4cG9ydCBjb25zdCBpc0Fzc2lzdGFudENoYXRNZXNzYWdlID0gKHJvbGU6IENoYXRIaXN0b3J5Um9sZSB8IHVuZGVmaW5lZCwgdXNlcklkOiBzdHJpbmcpOiBib29sZWFuID0+XG4gIHJvbGUgPT09IENoYXRIaXN0b3J5Um9sZS5BU1NJU1RBTlQgfHwgdXNlcklkID09PSAnYXNzaXN0YW50J1xuXG5leHBvcnQgY29uc3QgaXNBY3RpdmVTdHJlYW1pbmdTdGF0ZSA9IChpc1N0cmVhbWluZzogYm9vbGVhbiB8IHVuZGVmaW5lZCwgaXNTdHJlYW1pbmdQbGFjZWhvbGRlcjogYm9vbGVhbik6IGJvb2xlYW4gPT5cbiAgQm9vbGVhbihpc1N0cmVhbWluZykgfHwgaXNTdHJlYW1pbmdQbGFjZWhvbGRlclxuXG5leHBvcnQgY29uc3Qgc2hvdWxkU2hvd1N0cmVhbWluZ01lc3NhZ2VCb2R5ID0gKFxuICBpc0FjdGl2ZVN0cmVhbWluZzogYm9vbGVhbixcbiAgaGFzU3RyZWFtVGV4dDogYm9vbGVhbixcbiAgc3RyZWFtTmFycmF0aW9uSW5UaW1lbGluZTogYm9vbGVhblxuKTogYm9vbGVhbiA9PiBpc0FjdGl2ZVN0cmVhbWluZyAmJiBoYXNTdHJlYW1UZXh0ICYmICFzdHJlYW1OYXJyYXRpb25JblRpbWVsaW5lXG5cbmV4cG9ydCBjb25zdCBzaG91bGRTaG93U3RyZWFtQWN0aXZpdHlJbmRpY2F0b3IgPSAoXG4gIGlzQXNzaXN0YW50OiBib29sZWFuLFxuICBpc0FjdGl2ZVN0cmVhbWluZzogYm9vbGVhbixcbiAgc3RyZWFtQWN0aXZpdHk6IHVua25vd25cbik6IGJvb2xlYW4gPT4gaXNBc3Npc3RhbnQgJiYgaXNBY3RpdmVTdHJlYW1pbmcgJiYgQm9vbGVhbihzdHJlYW1BY3Rpdml0eSlcblxuZXhwb3J0IGNvbnN0IHNob3VsZFJlbmRlckNoYW5nZVByb2plY3RNZXNzYWdlID0gKFxuICBpc0NoYW5nZVByb2plY3Q6IGJvb2xlYW4gfCB1bmRlZmluZWQsXG4gIG9wdGlvbnM6IHVua25vd25bXSB8IG51bGwgfCB1bmRlZmluZWRcbik6IGJvb2xlYW4gPT4gQm9vbGVhbihpc0NoYW5nZVByb2plY3QgJiYgb3B0aW9ucylcblxuZXhwb3J0IGNvbnN0IHNob3VsZFNob3dNZXNzYWdlQXR0YWNobWVudHNSb3cgPSAoYXR0YWNobWVudENvdW50OiBudW1iZXIpOiBib29sZWFuID0+IGF0dGFjaG1lbnRDb3VudCA+IDBcblxuZXhwb3J0IGNvbnN0IHNob3VsZFJlbmRlck1lc3NhZ2VUZXh0Qm9keSA9IChwYXJhbXM6IHtcbiAgbWVzc2FnZVRleHQ6IHN0cmluZyB8IHVuZGVmaW5lZCB8IG51bGxcbiAgc2hvd1N0cmVhbWluZ0JvZHk6IGJvb2xlYW5cbiAgaXNBc3Npc3RhbnQ6IGJvb2xlYW5cbiAgYXR0YWNobWVudENvdW50OiBudW1iZXJcbn0pOiBib29sZWFuID0+XG4gIEJvb2xlYW4ocGFyYW1zLm1lc3NhZ2VUZXh0IHx8IHBhcmFtcy5zaG93U3RyZWFtaW5nQm9keSkgJiYgIShwYXJhbXMuaXNBc3Npc3RhbnQgJiYgcGFyYW1zLmF0dGFjaG1lbnRDb3VudCA+IDApXG5cbmV4cG9ydCBjb25zdCBzaG91bGRTaG93QXBwcm92YWxBY3Rpb25zID0gKGFwcHJvdmFsOiB7IHBlbmRpbmdfYWN0aW9ucz86IHVua25vd24gfSB8IG51bGwgfCB1bmRlZmluZWQpOiBib29sZWFuID0+XG4gIEJvb2xlYW4oYXBwcm92YWw/LnBlbmRpbmdfYWN0aW9ucylcblxuZXhwb3J0IGNvbnN0IHNob3VsZEhpZGVFbXB0eVN0cmVhbWluZ0JvZHkgPSAoZGlzcGxheVRleHQ6IHN0cmluZywgaXNTdHJlYW1pbmc6IGJvb2xlYW4pOiBib29sZWFuID0+XG4gICFkaXNwbGF5VGV4dCAmJiAhaXNTdHJlYW1pbmdcblxuZXhwb3J0IGNvbnN0IHNob3VsZFJlbmRlckFzc2lzdGFudEZlZWRiYWNrID0gKHBhcmFtczoge1xuICBpc0Fzc2lzdGFudDogYm9vbGVhblxuICBpc0Vycm9yPzogYm9vbGVhblxuICBhcHByb3ZhbD86IHVua25vd25cbiAgaXNTdHJlYW1pbmc6IGJvb2xlYW5cbiAgaXNGcm9udGVuZENhbmNlbGxlZD86IGJvb2xlYW5cbiAgb25SZXRyeT86ICgpID0+IHZvaWRcbn0pOiBib29sZWFuID0+XG4gIHBhcmFtcy5pc0Fzc2lzdGFudCAmJlxuICAhcGFyYW1zLmlzRXJyb3IgJiZcbiAgIXBhcmFtcy5hcHByb3ZhbCAmJlxuICAhcGFyYW1zLmlzU3RyZWFtaW5nICYmXG4gICghcGFyYW1zLmlzRnJvbnRlbmRDYW5jZWxsZWQgfHwgQm9vbGVhbihwYXJhbXMub25SZXRyeSkpXG5cbmV4cG9ydCBjb25zdCBzaG91bGRSZW5kZXJBc3Npc3RhbnRTdWdnZXN0aW9ucyA9IChwYXJhbXM6IHtcbiAgaXNBc3Npc3RhbnQ6IGJvb2xlYW5cbiAgaXNGcm9udGVuZENhbmNlbGxlZD86IGJvb2xlYW5cbiAgYXBwcm92YWw/OiB1bmtub3duXG4gIGlzRXJyb3I/OiBib29sZWFuXG4gIHN1Z2dlc3Rpb25zTGVuZ3RoOiBudW1iZXJcbn0pOiBib29sZWFuID0+XG4gIHBhcmFtcy5pc0Fzc2lzdGFudCAmJlxuICAhcGFyYW1zLmlzRnJvbnRlbmRDYW5jZWxsZWQgJiZcbiAgIXBhcmFtcy5hcHByb3ZhbCAmJlxuICAoIXBhcmFtcy5pc0Vycm9yIHx8IHBhcmFtcy5zdWdnZXN0aW9uc0xlbmd0aCA+IDApXG5cbmV4cG9ydCBjb25zdCBzaG91bGRIaWRlQXNzaXN0YW50U3VnZ2VzdGlvbnMgPSAoXG4gIGlzU3RyZWFtaW5nOiBib29sZWFuLFxuICBpc0xhc3RNZXNzYWdlOiBib29sZWFuIHwgdW5kZWZpbmVkLFxuICBzdWdnZXN0aW9uc0Rpc2FibGVkOiBib29sZWFuIHwgdW5kZWZpbmVkXG4pOiBib29sZWFuID0+IEJvb2xlYW4oaXNTdHJlYW1pbmcgfHwgIWlzTGFzdE1lc3NhZ2UgfHwgc3VnZ2VzdGlvbnNEaXNhYmxlZClcblxuZXhwb3J0IGNvbnN0IHNob3VsZFJlbmRlckNyZWF0ZUFnZW50QWN0aW9ucyA9IChwYXJhbXM6IHtcbiAgaXNBc3Npc3RhbnQ6IGJvb2xlYW5cbiAgaXNFcnJvcj86IGJvb2xlYW5cbiAgaXNGcm9udGVuZENhbmNlbGxlZD86IGJvb2xlYW5cbiAgYXBwcm92YWw/OiB1bmtub3duXG4gIGFnZW50SWQ6IHN0cmluZyB8IHVuZGVmaW5lZFxufSk6IGJvb2xlYW4gPT5cbiAgcGFyYW1zLmlzQXNzaXN0YW50ICYmICFwYXJhbXMuaXNFcnJvciAmJiAhcGFyYW1zLmlzRnJvbnRlbmRDYW5jZWxsZWQgJiYgIXBhcmFtcy5hcHByb3ZhbCAmJiBCb29sZWFuKHBhcmFtcy5hZ2VudElkKVxuXG5leHBvcnQgY29uc3QgcmVzb2x2ZUNoYXRMaXN0SXRlbVN0cmVhbWluZ0ZsYWdzID0gKHBhcmFtczoge1xuICByb2xlOiBDaGF0SGlzdG9yeVJvbGUgfCB1bmRlZmluZWRcbiAgdXNlcklkOiBzdHJpbmdcbiAgbWVzc2FnZUlkOiBzdHJpbmdcbiAgaXNMYXN0TWVzc2FnZTogYm9vbGVhblxuICB3YWl0aW5nUmVzcG9uc2U6IGJvb2xlYW5cbiAgaXNXcml0aW5nOiBib29sZWFuXG59KTogeyBpc1N0cmVhbWluZ1BsYWNlaG9sZGVyOiBib29sZWFuOyBpc1N0cmVhbWluZzogYm9vbGVhbiB9ID0+IHtcbiAgY29uc3QgaXNBc3Npc3RhbnQgPSBpc0Fzc2lzdGFudENoYXRNZXNzYWdlKHBhcmFtcy5yb2xlLCBwYXJhbXMudXNlcklkKVxuICBjb25zdCBpc1N0cmVhbWluZ1BsYWNlaG9sZGVyID1cbiAgICBpc0Fzc2lzdGFudCAmJiBwYXJhbXMuaXNMYXN0TWVzc2FnZSAmJiBpc1N0cmVhbWluZ1BsYWNlaG9sZGVyTWVzc2FnZUlkKHBhcmFtcy5tZXNzYWdlSWQpXG4gIHJldHVybiB7XG4gICAgaXNTdHJlYW1pbmdQbGFjZWhvbGRlcixcbiAgICBpc1N0cmVhbWluZzogaXNTdHJlYW1pbmdQbGFjZWhvbGRlciAmJiAocGFyYW1zLndhaXRpbmdSZXNwb25zZSB8fCBwYXJhbXMuaXNXcml0aW5nKSxcbiAgfVxufVxuXG50eXBlIFVzZXJNZXNzYWdlQXR0YWNobWVudHNTb3VyY2UgPSB7XG4gIGF0dGFjaG1lbnRzPzogQXR0YWNobWVudEZpbGVbXVxuICBzb3VyY2VzPzogdW5rbm93blxufVxuXG5leHBvcnQgY29uc3QgY291bnRVc2VyTWVzc2FnZUF0dGFjaG1lbnRzID0gKG1lc3NhZ2U6IFVzZXJNZXNzYWdlQXR0YWNobWVudHNTb3VyY2UgfCBudWxsIHwgdW5kZWZpbmVkKTogbnVtYmVyID0+IHtcbiAgaWYgKCFtZXNzYWdlKSByZXR1cm4gMFxuICBjb25zdCBhdHRhY2htZW50Q291bnQgPSBBcnJheS5pc0FycmF5KG1lc3NhZ2UuYXR0YWNobWVudHMpID8gbWVzc2FnZS5hdHRhY2htZW50cy5sZW5ndGggOiAwXG4gIGNvbnN0IHNvdXJjZUNvdW50ID0gQXJyYXkuaXNBcnJheShtZXNzYWdlLnNvdXJjZXMpID8gbWVzc2FnZS5zb3VyY2VzLmxlbmd0aCA6IDBcbiAgcmV0dXJuIGF0dGFjaG1lbnRDb3VudCB8fCBzb3VyY2VDb3VudFxufVxuXG5leHBvcnQgY29uc3Qgc2hvdWxkSWdub3JlU3VnZ2VzdGlvbkNsaWNrID0gKHN1Z2dlc3Rpb246IHN0cmluZywgYWxyZWFkeVNlbGVjdGVkOiBib29sZWFuKTogYm9vbGVhbiA9PlxuICAhc3VnZ2VzdGlvbj8udHJpbSgpIHx8IGFscmVhZHlTZWxlY3RlZFxuXG5leHBvcnQgY29uc3QgaXNSZXRyeVN1Z2dlc3Rpb25TZWxlY3Rpb24gPSAoXG4gIGlzRXJyb3I6IGJvb2xlYW4gfCB1bmRlZmluZWQsXG4gIHN1Z2dlc3Rpb246IHN0cmluZyxcbiAgcmV0cnlMYWJlbDogc3RyaW5nXG4pOiBib29sZWFuID0+IEJvb2xlYW4oaXNFcnJvciAmJiBzdWdnZXN0aW9uID09PSByZXRyeUxhYmVsKVxuXG5leHBvcnQgY29uc3QgcmVzb2x2ZVJldHJ5QXR0YWNobWVudHNGcm9tVXNlck1lc3NhZ2UgPSAodXNlck1lc3NhZ2U6IHtcbiAgYXR0YWNobWVudHM/OiBBdHRhY2htZW50RmlsZVtdXG4gIHNvdXJjZXM/OiB1bmtub3duXG59KTogQXR0YWNobWVudEZpbGVbXSA9PiB7XG4gIGlmIChBcnJheS5pc0FycmF5KHVzZXJNZXNzYWdlLmF0dGFjaG1lbnRzKSkgcmV0dXJuIHVzZXJNZXNzYWdlLmF0dGFjaG1lbnRzXG4gIGlmIChBcnJheS5pc0FycmF5KHVzZXJNZXNzYWdlLnNvdXJjZXMpKSByZXR1cm4gdXNlck1lc3NhZ2Uuc291cmNlcyBhcyBBdHRhY2htZW50RmlsZVtdXG4gIHJldHVybiBbXVxufVxuXG5leHBvcnQgY29uc3Qgc2hvdWxkT3Blbk1lc3NhZ2VPcHRpb24gPSAoc2VsZWN0ZWRPcHRpb246IHVua25vd24pOiBib29sZWFuID0+ICFzZWxlY3RlZE9wdGlvblxuXG5leHBvcnQgY29uc3QgcmVzb2x2ZUF0dGFjaG1lbnREb3dubG9hZEJsb2JTdHJhdGVneSA9IChcbiAgZmlsZVVybDogc3RyaW5nIHwgdW5kZWZpbmVkLFxuICBmaWxlOiB1bmtub3duXG4pOiAncmVtb3RlLXVybCcgfCAnbG9jYWwtZmlsZScgfCBudWxsID0+IHtcbiAgaWYgKGZpbGVVcmwpIHJldHVybiAncmVtb3RlLXVybCdcbiAgaWYgKGZpbGUgaW5zdGFuY2VvZiBGaWxlKSByZXR1cm4gJ2xvY2FsLWZpbGUnXG4gIHJldHVybiBudWxsXG59XG5cbmV4cG9ydCBjb25zdCBleHRyYWN0RmVlZGJhY2tTZXNzaW9uSWQgPSAobWVzc2FnZUlkOiBzdHJpbmcpOiBzdHJpbmcgPT5cbiAgbWVzc2FnZUlkXG4gICAgLnNwbGl0KCctJylcbiAgICAuZmlsdGVyKHF1ZXN0aW9uSWQgPT4gcXVlc3Rpb25JZCAhPT0gJ2Fuc3dlcicpXG4gICAgLmpvaW4oJy0nKVxuXG5jb25zdCBBVURJT19FWFRFTlNJT05TID0gWycuZmxhYycsICcubTRhJywgJy5tcDMnLCAnLm1wNCcsICcub2dhJywgJy5vZ2cnLCAnLndhdicsICcud2VibSddIGFzIGNvbnN0XG5jb25zdCBBVURJT19UWVBFUyA9IFsnZmxhYycsICdtNGEnLCAnbXAzJywgJ21wNCcsICdvZ2EnLCAnb2dnJywgJ3dhdicsICd3ZWJtJ10gYXMgY29uc3RcblxuZXhwb3J0IGNvbnN0IGlzQXVkaW9BdHRhY2htZW50ID0gKGF0dGFjaG1lbnQ6IFBpY2s8QXR0YWNobWVudEZpbGUsICd0eXBlJyB8ICduYW1lJz4pOiBib29sZWFuID0+IHtcbiAgY29uc3QgYXR0YWNobWVudFR5cGUgPSBhdHRhY2htZW50Py50eXBlPy50b0xvd2VyQ2FzZSgpIHx8ICcnXG4gIGNvbnN0IGF0dGFjaG1lbnROYW1lID0gYXR0YWNobWVudD8ubmFtZT8udG9Mb3dlckNhc2UoKSB8fCAnJ1xuXG4gIHJldHVybiAoXG4gICAgYXR0YWNobWVudFR5cGUuc3RhcnRzV2l0aCgnYXVkaW8vJykgfHxcbiAgICBBVURJT19UWVBFUy5pbmNsdWRlcyhhdHRhY2htZW50VHlwZSBhcyAodHlwZW9mIEFVRElPX1RZUEVTKVtudW1iZXJdKSB8fFxuICAgIEFVRElPX0VYVEVOU0lPTlMuc29tZShleHQgPT4gYXR0YWNobWVudE5hbWUuZW5kc1dpdGgoZXh0KSlcbiAgKVxufVxuXG5leHBvcnQgY29uc3QgY2FuT3BlbkF0dGFjaG1lbnRQcmV2aWV3ID0gKGF0dGFjaG1lbnQ6IEF0dGFjaG1lbnRGaWxlKTogYm9vbGVhbiA9PlxuICBhdHRhY2htZW50LmZpbGUgaW5zdGFuY2VvZiBGaWxlIHx8XG4gIGF0dGFjaG1lbnQub3JpZ2luYWxGaWxlIGluc3RhbmNlb2YgRmlsZSB8fFxuICBCb29sZWFuKGF0dGFjaG1lbnQudXJsX3RodW1ibmFpbCB8fCBhdHRhY2htZW50LnVybF9vcmlnaW5hbCB8fCBhdHRhY2htZW50LnVybF9maWxlKVxuXG5leHBvcnQgY29uc3QgZmluZExhc3RRdWVzdGlvbklkID0gKG1lc3NhZ2VzOiBBcnJheTx7IGlkPzogc3RyaW5nIH0+KTogc3RyaW5nIHwgbnVsbCA9PiB7XG4gIGZvciAobGV0IGluZGV4ID0gbWVzc2FnZXMubGVuZ3RoIC0gMTsgaW5kZXggPj0gMDsgaW5kZXggLT0gMSkge1xuICAgIGNvbnN0IG1lc3NhZ2VJZCA9IG1lc3NhZ2VzW2luZGV4XT8uaWRcbiAgICBpZiAobWVzc2FnZUlkPy5zdGFydHNXaXRoKCdxdWVzdGlvbi0nKSkge1xuICAgICAgcmV0dXJuIG1lc3NhZ2VJZFxuICAgIH1cbiAgfVxuICByZXR1cm4gbnVsbFxufVxuXG5leHBvcnQgY29uc3QgY29tcHV0ZVJlc2VydmVkVHVyblNwYWNlID0gKGNsaWVudEhlaWdodDogbnVtYmVyLCB0dXJuSGVpZ2h0OiBudW1iZXIsIHZpZXdwb3J0SGVpZ2h0OiBudW1iZXIpOiBudW1iZXIgPT4ge1xuICBjb25zdCBvZmZzZXQgPSB0dXJuQW5jaG9yT2Zmc2V0KHZpZXdwb3J0SGVpZ2h0KVxuICByZXR1cm4gTWF0aC5tYXgoMCwgY2xpZW50SGVpZ2h0IC0gdHVybkhlaWdodCAtIG9mZnNldClcbn1cblxuZXhwb3J0IGNvbnN0IHJlc29sdmVNZXNzYWdlQXR0YWNobWVudHMgPSAoXG4gIGF0dGFjaG1lbnRzOiBBdHRhY2htZW50RmlsZVtdIHwgdW5kZWZpbmVkLFxuICBpc0Fzc2lzdGFudDogYm9vbGVhbixcbiAgc291cmNlczogdW5rbm93blxuKTogQXR0YWNobWVudEZpbGVbXSA9PiB7XG4gIGlmIChhdHRhY2htZW50cyAmJiBhdHRhY2htZW50cy5sZW5ndGggPiAwKSB7XG4gICAgcmV0dXJuIGF0dGFjaG1lbnRzXG4gIH1cbiAgaWYgKCFpc0Fzc2lzdGFudCAmJiBBcnJheS5pc0FycmF5KHNvdXJjZXMpKSB7XG4gICAgcmV0dXJuIHNvdXJjZXMgYXMgQXR0YWNobWVudEZpbGVbXVxuICB9XG4gIHJldHVybiBbXVxufVxuXG5leHBvcnQgY29uc3QgcmVzb2x2ZUF0dGFjaG1lbnREb3dubG9hZEZpbGVOYW1lID0gKGF0dGFjaG1lbnQ6IFBpY2s8QXR0YWNobWVudEZpbGUsICduYW1lJyB8ICd0eXBlJz4pOiBzdHJpbmcgPT4ge1xuICBjb25zdCBleHRlbnNpb24gPSBhdHRhY2htZW50Lm5hbWUuaW5jbHVkZXMoJy4nKSA/ICcnIDogYC4ke2F0dGFjaG1lbnQudHlwZX1gXG4gIHJldHVybiBgJHthdHRhY2htZW50Lm5hbWV9JHtleHRlbnNpb259YFxufVxuXG5leHBvcnQgY29uc3QgcmVzb2x2ZUF0dGFjaG1lbnREb3dubG9hZFVybCA9IChcbiAgYXR0YWNobWVudDogUGljazxBdHRhY2htZW50RmlsZSwgJ3VybF9vcmlnaW5hbCcgfCAndXJsX2ZpbGUnIHwgJ3VybF90aHVtYm5haWwnPlxuKTogc3RyaW5nIHwgdW5kZWZpbmVkID0+IGF0dGFjaG1lbnQudXJsX29yaWdpbmFsIHx8IGF0dGFjaG1lbnQudXJsX2ZpbGUgfHwgYXR0YWNobWVudC51cmxfdGh1bWJuYWlsXG5cbmV4cG9ydCBjb25zdCBzaG91bGRTa2lwRW1wdHlDaGF0TGlzdE1lc3NhZ2UgPSAocGFyYW1zOiB7XG4gIGlzU3RyZWFtaW5nUGxhY2Vob2xkZXI6IGJvb2xlYW5cbiAgaXNTdHJlYW1pbmc6IGJvb2xlYW5cbiAgYXR0YWNobWVudENvdW50OiBudW1iZXJcbiAgc291cmNlQ291bnQ6IG51bWJlclxuICBtZXNzYWdlVGV4dDogc3RyaW5nXG4gIHByb2plY3ROYW1lPzogc3RyaW5nXG4gIGhhc0FwcHJvdmFsOiBib29sZWFuXG59KTogYm9vbGVhbiA9PiB7XG4gIGlmIChwYXJhbXMuaXNTdHJlYW1pbmdQbGFjZWhvbGRlciB8fCBwYXJhbXMuaXNTdHJlYW1pbmcpIHJldHVybiBmYWxzZVxuICBpZiAocGFyYW1zLmF0dGFjaG1lbnRDb3VudCA+IDAgfHwgcGFyYW1zLnNvdXJjZUNvdW50ID4gMCkgcmV0dXJuIGZhbHNlXG4gIGlmIChwYXJhbXMubWVzc2FnZVRleHQpIHJldHVybiBmYWxzZVxuICBpZiAocGFyYW1zLnByb2plY3ROYW1lKSByZXR1cm4gZmFsc2VcbiAgaWYgKHBhcmFtcy5oYXNBcHByb3ZhbCkgcmV0dXJuIGZhbHNlXG4gIHJldHVybiB0cnVlXG59XG5cbmV4cG9ydCBjb25zdCByZXNvbHZlRGlzYWJsZUZlZWRiYWNrRnJvbVdhc0hlbHBmdWwgPSAod2FzSGVscGZ1bDogYm9vbGVhbiB8IG51bGwgfCB1bmRlZmluZWQpOiBGZWVkYmFjayB8IG51bGwgPT4ge1xuICBpZiAod2FzSGVscGZ1bCA9PT0gdW5kZWZpbmVkIHx8IHdhc0hlbHBmdWwgPT09IG51bGwpIHJldHVybiBudWxsXG4gIHJldHVybiB3YXNIZWxwZnVsID8gRmVlZGJhY2suVEhVTUJTX1VQIDogRmVlZGJhY2suVEhVTUJTX0RPV05cbn1cblxuZXhwb3J0IGNvbnN0IGNhblJldHJ5QXNzaXN0YW50TWVzc2FnZSA9IChwYXJhbXM6IHtcbiAgaGFzVXNlck1lc3NhZ2VGb3JSZXRyeTogYm9vbGVhblxuICBpc1N0cmVhbWluZzogYm9vbGVhblxuICBpc0Vycm9yOiBib29sZWFuXG4gIGhhc0FwcHJvdmFsOiBib29sZWFuXG4gIGlzRnJvbnRlbmRDYW5jZWxsZWQ/OiBib29sZWFuXG4gIGlzQ2FuY2VsbGVkPzogYm9vbGVhblxuICB0dXJuSWQ6IHN0cmluZyB8IG51bGxcbn0pOiBib29sZWFuID0+IHtcbiAgaWYgKCFwYXJhbXMuaGFzVXNlck1lc3NhZ2VGb3JSZXRyeSB8fCBwYXJhbXMuaXNTdHJlYW1pbmcgfHwgcGFyYW1zLmlzRXJyb3IgfHwgcGFyYW1zLmhhc0FwcHJvdmFsKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cbiAgcmV0dXJuIEJvb2xlYW4ocGFyYW1zLmlzRnJvbnRlbmRDYW5jZWxsZWQgfHwgKCFwYXJhbXMuaXNDYW5jZWxsZWQgJiYgcGFyYW1zLnR1cm5JZCkpXG59XG5cbmV4cG9ydCBjb25zdCBjb21wdXRlUmVtb3ZhYmxlVHVyblNwYWNlID0gKFxuICBzY3JvbGxIZWlnaHQ6IG51bWJlcixcbiAgY2xpZW50SGVpZ2h0OiBudW1iZXIsXG4gIHNjcm9sbFRvcDogbnVtYmVyLFxuICBjdXJyZW50U3BhY2VySGVpZ2h0OiBudW1iZXJcbik6IG51bWJlciA9PiB7XG4gIGlmIChjdXJyZW50U3BhY2VySGVpZ2h0IDw9IDApIHJldHVybiBjdXJyZW50U3BhY2VySGVpZ2h0XG4gIGNvbnN0IHJlbW92YWJsZSA9IE1hdGgubWF4KDAsIHNjcm9sbEhlaWdodCAtIGNsaWVudEhlaWdodCAtIHNjcm9sbFRvcClcbiAgcmV0dXJuIE1hdGgubWF4KDAsIGN1cnJlbnRTcGFjZXJIZWlnaHQgLSByZW1vdmFibGUpXG59XG5cbmV4cG9ydCB0eXBlIFNtb290aFN0cmVhbVdpbmRvd0ZsYWdzID0ge1xuICBzdHJlYW1BZGFwdD86IGJvb2xlYW5cbiAgc3RyZWFtQnVmZmVyTXM/OiBudW1iZXJcbiAgc3RyZWFtTGFnTXM/OiBudW1iZXJcbiAgc3RyZWFtTWluQnVmZmVyPzogbnVtYmVyXG4gIHN0cmVhbVdhcm11cE1zPzogbnVtYmVyXG59XG5cbmV4cG9ydCBjb25zdCByZWFkU21vb3RoU3RyZWFtV2luZG93RmxhZ3MgPSAoKTogU21vb3RoU3RyZWFtV2luZG93RmxhZ3MgPT4ge1xuICBpZiAodHlwZW9mIHdpbmRvdyA9PT0gJ3VuZGVmaW5lZCcpIHJldHVybiB7fVxuICByZXR1cm4gd2luZG93IGFzIHVua25vd24gYXMgU21vb3RoU3RyZWFtV2luZG93RmxhZ3Ncbn1cblxuZXhwb3J0IGNvbnN0IGJ1aWxkU21vb3RoU3RyZWFtVGV4dE9wdGlvbnMgPSAoXG4gIGZsYWdzOiBTbW9vdGhTdHJlYW1XaW5kb3dGbGFncyxcbiAgaXNTdHJlYW1pbmc6IGJvb2xlYW5cbik6IHtcbiAgZW5hYmxlZDogYm9vbGVhblxuICBtYXhDaGFyc1BlckZyYW1lOiBudW1iZXJcbiAgc25hcFRvV29yZEJvdW5kYXJ5OiBib29sZWFuXG4gIHRhcmdldExhZ01zPzogbnVtYmVyXG4gIGFkYXB0VG9CYWNrZW5kUmF0ZT86IGJvb2xlYW5cbiAgdGFyZ2V0QnVmZmVyTXM/OiBudW1iZXJcbiAgbWluQnVmZmVyQ2hhcnM/OiBudW1iZXJcbiAgd2FybXVwTXM/OiBudW1iZXJcbn0gPT4gKHtcbiAgZW5hYmxlZDogaXNTdHJlYW1pbmcsXG4gIG1heENoYXJzUGVyRnJhbWU6IDI0LFxuICBzbmFwVG9Xb3JkQm91bmRhcnk6IHRydWUsXG4gIC4uLihmbGFncy5zdHJlYW1MYWdNcyAhPSBudWxsICYmIHsgdGFyZ2V0TGFnTXM6IGZsYWdzLnN0cmVhbUxhZ01zIH0pLFxuICAuLi4oZmxhZ3Muc3RyZWFtQWRhcHQgIT0gbnVsbCAmJiB7IGFkYXB0VG9CYWNrZW5kUmF0ZTogZmxhZ3Muc3RyZWFtQWRhcHQgfSksXG4gIC4uLihmbGFncy5zdHJlYW1CdWZmZXJNcyAhPSBudWxsICYmIHsgdGFyZ2V0QnVmZmVyTXM6IGZsYWdzLnN0cmVhbUJ1ZmZlck1zIH0pLFxuICAuLi4oZmxhZ3Muc3RyZWFtTWluQnVmZmVyICE9IG51bGwgJiYgeyBtaW5CdWZmZXJDaGFyczogZmxhZ3Muc3RyZWFtTWluQnVmZmVyIH0pLFxuICAuLi4oZmxhZ3Muc3RyZWFtV2FybXVwTXMgIT0gbnVsbCAmJiB7IHdhcm11cE1zOiBmbGFncy5zdHJlYW1XYXJtdXBNcyB9KSxcbn0pXG5cbmV4cG9ydCBjb25zdCByZXNvbHZlU3RyZWFtaW5nUmF3VGV4dCA9IChpc1N0cmVhbWluZzogYm9vbGVhbiwgc3RyZWFtaW5nVGV4dDogc3RyaW5nLCBtZXNzYWdlOiBzdHJpbmcpOiBzdHJpbmcgPT5cbiAgaXNTdHJlYW1pbmcgPyBzdHJlYW1pbmdUZXh0IDogbWVzc2FnZVxuXG5leHBvcnQgY29uc3Qgc2hvdWxkUmVuZGVyTWVudGlvbklubGluZU5vZGVzID0gKGhhc01lbnRpb25zOiBib29sZWFuLCBtZW50aW9uTm9kZXM6IHVua25vd24pOiBib29sZWFuID0+XG4gIEJvb2xlYW4oaGFzTWVudGlvbnMgJiYgbWVudGlvbk5vZGVzKVxuXG5leHBvcnQgY29uc3QgcmVzb2x2ZUZlZWRiYWNrUHJvcHNGb3JDYW5jZWxsZWQgPSA8VFNvdXJjZXMsIFRIYW5kbGVyPihcbiAgaXNGcm9udGVuZENhbmNlbGxlZDogYm9vbGVhbiB8IHVuZGVmaW5lZCxcbiAgc291cmNlczogVFNvdXJjZXMsXG4gIGhhbmRsZUZlZWRiYWNrQ2xpY2s6IFRIYW5kbGVyXG4pOiB7IHNvdXJjZXM6IFRTb3VyY2VzIHwgdW5kZWZpbmVkOyBoYW5kbGVGZWVkYmFjazogVEhhbmRsZXIgfCB1bmRlZmluZWQgfSA9PiAoe1xuICBzb3VyY2VzOiBpc0Zyb250ZW5kQ2FuY2VsbGVkID8gdW5kZWZpbmVkIDogc291cmNlcyxcbiAgaGFuZGxlRmVlZGJhY2s6IGlzRnJvbnRlbmRDYW5jZWxsZWQgPyB1bmRlZmluZWQgOiBoYW5kbGVGZWVkYmFja0NsaWNrLFxufSlcblxuZXhwb3J0IGNvbnN0IHJlc29sdmVTdHJlYW1pbmdNZXNzYWdlSG9va0lkID0gKGlzU3RyZWFtaW5nOiBib29sZWFuLCBtZXNzYWdlSWQ6IHN0cmluZyk6IHN0cmluZyB8IG51bGwgPT5cbiAgaXNTdHJlYW1pbmcgPyBtZXNzYWdlSWQgOiBudWxsXG5cbmV4cG9ydCBjb25zdCBzaG91bGRJbml0aWFsaXplQ2hhdCA9IChhbHJlYWR5SW5pdGlhbGl6ZWQ6IGJvb2xlYW4pOiBib29sZWFuID0+ICFhbHJlYWR5SW5pdGlhbGl6ZWRcblxuZXhwb3J0IGNvbnN0IHNob3VsZENsZWFyTGFzdFJlc2VydmVkUXVlc3Rpb24gPSAobG9hZGluZ01lc3NhZ2VzOiBib29sZWFuKTogYm9vbGVhbiA9PiBsb2FkaW5nTWVzc2FnZXNcblxuZXhwb3J0IGNvbnN0IHNob3VsZFNjaGVkdWxlVHVyblNwYWNlUmVzZXJ2YXRpb24gPSAoXG4gIGxvYWRpbmdNZXNzYWdlczogYm9vbGVhbixcbiAgaXNMb2FkaW5nTW9yZU1lc3NhZ2VzOiBib29sZWFuLFxuICBxdWVzdGlvbklkOiBzdHJpbmcgfCBudWxsLFxuICBsYXN0UmVzZXJ2ZWRRdWVzdGlvbklkOiBzdHJpbmcgfCBudWxsXG4pOiBib29sZWFuID0+ICFsb2FkaW5nTWVzc2FnZXMgJiYgIWlzTG9hZGluZ01vcmVNZXNzYWdlcyAmJiBCb29sZWFuKHF1ZXN0aW9uSWQpICYmIHF1ZXN0aW9uSWQgIT09IGxhc3RSZXNlcnZlZFF1ZXN0aW9uSWRcblxuZXhwb3J0IGNvbnN0IHNob3VsZFNraXBNZXNzYWdlc1Njcm9sbEVmZmVjdCA9IChcbiAgaGFzQ29udGFpbmVyOiBib29sZWFuLFxuICBsb2FkaW5nTWVzc2FnZXM6IGJvb2xlYW4sXG4gIGlzTG9hZGluZ01vcmVNZXNzYWdlczogYm9vbGVhbixcbiAgaXNMb2FkaW5nTW9yZVJlZjogYm9vbGVhblxuKTogYm9vbGVhbiA9PiAhaGFzQ29udGFpbmVyIHx8IGxvYWRpbmdNZXNzYWdlcyB8fCBpc0xvYWRpbmdNb3JlTWVzc2FnZXMgfHwgaXNMb2FkaW5nTW9yZVJlZlxuXG5leHBvcnQgY29uc3QgcmVzb2x2ZUNvbnRhaW5lckF0Qm90dG9tID0gKFxuICBjb250YWluZXI6IHsgc2Nyb2xsSGVpZ2h0OiBudW1iZXI7IHNjcm9sbFRvcDogbnVtYmVyOyBjbGllbnRIZWlnaHQ6IG51bWJlciB9IHwgbnVsbCB8IHVuZGVmaW5lZFxuKTogYm9vbGVhbiA9PlxuICBjb250YWluZXIgPyBpc0NvbnRhaW5lckF0U2Nyb2xsQm90dG9tKGNvbnRhaW5lci5zY3JvbGxIZWlnaHQsIGNvbnRhaW5lci5zY3JvbGxUb3AsIGNvbnRhaW5lci5jbGllbnRIZWlnaHQpIDogZmFsc2VcblxuZXhwb3J0IGNvbnN0IHNob3VsZFJ1blNlc3Npb25DYWNoZVNjcm9sbFRvQm90dG9tID0gKFxuICBsb2FkaW5nTWVzc2FnZXM6IGJvb2xlYW4sXG4gIGluaXRpYWxDaGF0SWQ6IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQsXG4gIG1lc3NhZ2VzTGVuZ3RoOiBudW1iZXIsXG4gIGxhc3RTY3JvbGxlZFNlc3Npb25JZDogc3RyaW5nIHwgbnVsbFxuKTogYm9vbGVhbiA9PlxuICAhbG9hZGluZ01lc3NhZ2VzICYmIEJvb2xlYW4oaW5pdGlhbENoYXRJZCkgJiYgbWVzc2FnZXNMZW5ndGggPiAwICYmIGxhc3RTY3JvbGxlZFNlc3Npb25JZCAhPT0gaW5pdGlhbENoYXRJZFxuXG5leHBvcnQgY29uc3QgZGV0ZWN0SnVzdEZpbmlzaGVkTG9hZGluZ01lc3NhZ2VzID0gKHdhc0xvYWRpbmc6IGJvb2xlYW4sIGxvYWRpbmdNZXNzYWdlczogYm9vbGVhbik6IGJvb2xlYW4gPT5cbiAgd2FzTG9hZGluZyAmJiAhbG9hZGluZ01lc3NhZ2VzXG5cbmV4cG9ydCBjb25zdCBzaG91bGRTY3JvbGxUb0JvdHRvbUFmdGVyTG9hZCA9IChqdXN0RmluaXNoZWRMb2FkaW5nOiBib29sZWFuLCBtZXNzYWdlc0xlbmd0aDogbnVtYmVyKTogYm9vbGVhbiA9PlxuICBqdXN0RmluaXNoZWRMb2FkaW5nICYmIG1lc3NhZ2VzTGVuZ3RoID4gMFxuXG5leHBvcnQgY29uc3Qgc2hvdWxkVXBkYXRlU2Nyb2xsQWZmb3JkYW5jZXNPbkxvYWRFbmQgPSAobG9hZGluZ01lc3NhZ2VzOiBib29sZWFuKTogYm9vbGVhbiA9PiAhbG9hZGluZ01lc3NhZ2VzXG5cbmV4cG9ydCBjb25zdCBzaG91bGRDbGVhclNjcm9sbFJlc3RvcmVXaXRob3V0Q2hhdCA9IChpbml0aWFsQ2hhdElkOiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkKTogYm9vbGVhbiA9PiAhaW5pdGlhbENoYXRJZFxuXG5leHBvcnQgY29uc3QgcmVzb2x2ZVBlbmRpbmdTY3JvbGxUb3BGcm9tU2Vzc2lvbiA9IChcbiAgc2Vzc2lvbjogeyBzY3JvbGxTZXNzaW9uSWQ/OiBzdHJpbmc7IHNjcm9sbFRvcD86IG51bWJlciB9IHwgbnVsbCB8IHVuZGVmaW5lZCxcbiAgaW5pdGlhbENoYXRJZDogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZFxuKTogbnVtYmVyIHwgbnVsbCA9PiB7XG4gIGlmICghaW5pdGlhbENoYXRJZCB8fCAhc2Vzc2lvbikgcmV0dXJuIG51bGxcbiAgaWYgKHNlc3Npb24uc2Nyb2xsU2Vzc2lvbklkID09PSBpbml0aWFsQ2hhdElkICYmIHR5cGVvZiBzZXNzaW9uLnNjcm9sbFRvcCA9PT0gJ251bWJlcicgJiYgc2Vzc2lvbi5zY3JvbGxUb3AgPiAwKSB7XG4gICAgcmV0dXJuIHNlc3Npb24uc2Nyb2xsVG9wXG4gIH1cbiAgcmV0dXJuIG51bGxcbn1cblxuZXhwb3J0IGNvbnN0IHNob3VsZEFwcGx5UGVuZGluZ1Njcm9sbFJlc3RvcmUgPSAoXG4gIGxvYWRpbmdNZXNzYWdlczogYm9vbGVhbixcbiAgcGVuZGluZ1Njcm9sbFRvcDogbnVtYmVyIHwgbnVsbCB8IHVuZGVmaW5lZCxcbiAgaGFzQ29udGFpbmVyOiBib29sZWFuXG4pOiBib29sZWFuID0+ICFsb2FkaW5nTWVzc2FnZXMgJiYgcGVuZGluZ1Njcm9sbFRvcCAhPSBudWxsICYmIHBlbmRpbmdTY3JvbGxUb3AgPiAwICYmIGhhc0NvbnRhaW5lclxuXG5leHBvcnQgY29uc3Qgc2hvdWxkUmVzdG9yZVNjcm9sbE9uRXhwYW5kZWRDaGFuZ2UgPSAoXG4gIHByZXZpb3VzRXhwYW5kZWQ6IGJvb2xlYW4sXG4gIGV4cGFuZGVkOiBib29sZWFuLFxuICBoYXNDb250YWluZXI6IGJvb2xlYW5cbik6IGJvb2xlYW4gPT4gcHJldmlvdXNFeHBhbmRlZCAhPT0gZXhwYW5kZWQgJiYgaGFzQ29udGFpbmVyXG5cbmV4cG9ydCBjb25zdCByZXNvbHZlTWVzc2FnZUxpc3RJdGVtS2V5ID0gKG1lc3NhZ2VJZDogc3RyaW5nIHwgdW5kZWZpbmVkLCBpbmRleDogbnVtYmVyKTogc3RyaW5nID0+XG4gIG1lc3NhZ2VJZCA/PyBgbXNnLSR7aW5kZXh9YFxuXG5leHBvcnQgY29uc3QgcmVzb2x2ZUNyZWF0ZUFnZW50QWN0aW9uc0FnZW50SWQgPSAoXG4gIGZvbGxvd1VwOiB7IGFnZW50SWQ6IHN0cmluZyB9IHwgbnVsbCB8IHVuZGVmaW5lZFxuKTogc3RyaW5nIHwgdW5kZWZpbmVkID0+IGZvbGxvd1VwPy5hZ2VudElkXG5cbmV4cG9ydCBjb25zdCByZXNvbHZlU3RyZWFtaW5nVGV4dEhvb2tJZCA9IChcbiAgaXNTdHJlYW1pbmc6IGJvb2xlYW4sXG4gIGlzU3RyZWFtaW5nUGxhY2Vob2xkZXI6IGJvb2xlYW4sXG4gIG1lc3NhZ2VJZDogc3RyaW5nXG4pOiBzdHJpbmcgfCBudWxsID0+IChpc1N0cmVhbWluZyB8fCBpc1N0cmVhbWluZ1BsYWNlaG9sZGVyID8gbWVzc2FnZUlkIDogbnVsbClcblxuZXhwb3J0IGNvbnN0IHJlc29sdmVSZWFzb25pbmdUcmFjZUhvb2tJZCA9IChpc0Fzc2lzdGFudDogYm9vbGVhbiwgaXNBY3RpdmVTdHJlYW1pbmc6IGJvb2xlYW4sIGlkOiBzdHJpbmcpOiBzdHJpbmcgPT5cbiAgaXNBc3Npc3RhbnQgJiYgaXNBY3RpdmVTdHJlYW1pbmcgPyBpZCA6ICcnXG5cbmV4cG9ydCBjb25zdCByZXNvbHZlU2Nyb2xsT25QYXJlbnRNb2RlID0gKGV4cGFuZGVkOiBib29sZWFuIHwgdW5kZWZpbmVkKTogYm9vbGVhbiA9PiBCb29sZWFuKGV4cGFuZGVkKVxuXG5leHBvcnQgY29uc3QgcmVzb2x2ZUxhc3RVc2VyTWVzc2FnZUZvckF0dGFjaG1lbnRzID0gPFQgZXh0ZW5kcyB7IHJvbGU/OiBDaGF0SGlzdG9yeVJvbGU7IHVzZXI6IHsgaWQ6IHN0cmluZyB9IH0+KFxuICBtZXNzYWdlczogVFtdLFxuICBhdXRoVXNlcklkOiBzdHJpbmdcbik6IFQgfCB1bmRlZmluZWQgPT5cbiAgbWVzc2FnZXMuZmlsdGVyKG1zZyA9PiBtc2cucm9sZSA9PT0gQ2hhdEhpc3RvcnlSb2xlLlVTRVIgfHwgbXNnLnVzZXIuaWQgPT09IGF1dGhVc2VySWQudG9TdHJpbmcoKSkuYXQoLTEpXG5cbmV4cG9ydCBjb25zdCByZXNvbHZlU3VnZ2VzdGlvbkFuYWx5dGljc0FnZW50VHlwZSA9IChcbiAgaXNNYXJrZXRwbGFjZUdsb2JhbEFnZW50OiBib29sZWFuLFxuICBhZ2VudFR5cGU6IHN0cmluZyB8IHVuZGVmaW5lZFxuKTogc3RyaW5nIHwgdW5kZWZpbmVkID0+IChpc01hcmtldHBsYWNlR2xvYmFsQWdlbnQgPyAnbWFya2V0cGxhY2UnIDogYWdlbnRUeXBlKVxuXG5leHBvcnQgdHlwZSBDaGF0TWVzc2FnZXNTY3JvbGxGcmFtZUlucHV0ID0ge1xuICBzY3JvbGxUb3A6IG51bWJlclxuICBzY3JvbGxIZWlnaHQ6IG51bWJlclxuICBjbGllbnRIZWlnaHQ6IG51bWJlclxuICBsYXN0U2Nyb2xsVG9wOiBudW1iZXJcbiAgc2Nyb2xsVGhyZXNob2xkOiBudW1iZXJcbiAgYW5jaG9yZWRUdXJuSWQ6IHN0cmluZyB8IG51bGxcbiAgaW5pdGlhbENoYXRJZDogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZFxufVxuXG5leHBvcnQgY29uc3QgcHJvY2Vzc0NoYXRNZXNzYWdlc1Njcm9sbEZyYW1lID0gKGlucHV0OiBDaGF0TWVzc2FnZXNTY3JvbGxGcmFtZUlucHV0KSA9PiB7XG4gIGNvbnN0IGlzU2Nyb2xsaW5nVXAgPSBpc1Njcm9sbGluZ1Vwd2FyZChpbnB1dC5zY3JvbGxUb3AsIGlucHV0Lmxhc3RTY3JvbGxUb3ApXG4gIGNvbnN0IGlzTmVhckJvdHRvbSA9IGlzTmVhclNjcm9sbEJvdHRvbShcbiAgICBpbnB1dC5zY3JvbGxIZWlnaHQsXG4gICAgaW5wdXQuc2Nyb2xsVG9wLFxuICAgIGlucHV0LmNsaWVudEhlaWdodCxcbiAgICBpbnB1dC5zY3JvbGxUaHJlc2hvbGRcbiAgKVxuICBjb25zdCBuZXh0U2Nyb2xsVGhyZXNob2xkID0gcmVzb2x2ZVNjcm9sbE5lYXJCb3R0b21UaHJlc2hvbGQoaW5wdXQuc2Nyb2xsVGhyZXNob2xkLCBpc1Njcm9sbGluZ1VwLCBpc05lYXJCb3R0b20pXG5cbiAgcmV0dXJuIHtcbiAgICBuZXh0U2Nyb2xsVGhyZXNob2xkLFxuICAgIGxhc3RTY3JvbGxUb3A6IGlucHV0LnNjcm9sbFRvcCxcbiAgICBzaG91bGREcmFpblR1cm5TcGFjZTogc2hvdWxkRHJhaW5UdXJuU3BhY2VPblNjcm9sbChpbnB1dC5hbmNob3JlZFR1cm5JZCksXG4gICAgc2hvdWxkU2NoZWR1bGVTY3JvbGxQZXJzaXN0OiBzaG91bGRQZXJzaXN0TWFpYVBhbmVsU2Nyb2xsKGlucHV0LmluaXRpYWxDaGF0SWQsIGlucHV0LnNjcm9sbFRvcCksXG4gICAgc2hvdWxkTm90aWZ5U2Nyb2xsVG9Cb3R0b206IGlzTmVhckJvdHRvbSxcbiAgfVxufVxuXG5leHBvcnQgY29uc3QgY29tcHV0ZU1lYXN1cmVUdXJuTGF5b3V0ID0gKHBhcmFtczoge1xuICBjb250YWluZXJUb3A6IG51bWJlclxuICBxdWVzdGlvblRvcDogbnVtYmVyXG4gIGNvbnRlbnRCb3R0b206IG51bWJlclxuICBzY3JvbGxUb3A6IG51bWJlclxufSk6IHsgcXVlc3Rpb25Ub3A6IG51bWJlcjsgdHVybkhlaWdodDogbnVtYmVyIH0gPT4ge1xuICBjb25zdCBxdWVzdGlvblNjcm9sbFRvcCA9IHBhcmFtcy5xdWVzdGlvblRvcCAtIHBhcmFtcy5jb250YWluZXJUb3AgKyBwYXJhbXMuc2Nyb2xsVG9wXG4gIGNvbnN0IGNvbnRlbnRCb3R0b21TY3JvbGwgPSBwYXJhbXMuY29udGVudEJvdHRvbSAtIHBhcmFtcy5jb250YWluZXJUb3AgKyBwYXJhbXMuc2Nyb2xsVG9wXG4gIHJldHVybiB7IHF1ZXN0aW9uVG9wOiBxdWVzdGlvblNjcm9sbFRvcCwgdHVybkhlaWdodDogY29udGVudEJvdHRvbVNjcm9sbCAtIHF1ZXN0aW9uU2Nyb2xsVG9wIH1cbn1cblxuZXhwb3J0IHR5cGUgUmVzZXJ2ZVR1cm5TcGFjZVBsYW4gPVxuICB7IGtpbmQ6ICdza2lwLXJlc2VydmF0aW9uJyB9IHwgeyBraW5kOiAncmVzZXJ2ZSc7IHNwYWNlckhlaWdodDogbnVtYmVyOyB0YXJnZXRTY3JvbGxUb3A6IG51bWJlciB9XG5cbmV4cG9ydCBjb25zdCByZXNvbHZlUmVzZXJ2ZVR1cm5TcGFjZVBsYW4gPSAocGFyYW1zOiB7XG4gIGN1cnJlbnRTY3JvbGxUb3A6IG51bWJlclxuICB0YXJnZXRTY3JvbGxUb3A6IG51bWJlclxuICBjbGllbnRIZWlnaHQ6IG51bWJlclxuICB0dXJuSGVpZ2h0OiBudW1iZXJcbn0pOiBSZXNlcnZlVHVyblNwYWNlUGxhbiA9PiB7XG4gIGlmIChzaG91bGRTa2lwVHVyblNwYWNlUmVzZXJ2YXRpb24ocGFyYW1zLmN1cnJlbnRTY3JvbGxUb3AsIHBhcmFtcy50YXJnZXRTY3JvbGxUb3ApKSB7XG4gICAgcmV0dXJuIHsga2luZDogJ3NraXAtcmVzZXJ2YXRpb24nIH1cbiAgfVxuICByZXR1cm4ge1xuICAgIGtpbmQ6ICdyZXNlcnZlJyxcbiAgICBzcGFjZXJIZWlnaHQ6IGNvbXB1dGVSZXNlcnZlZFR1cm5TcGFjZShwYXJhbXMuY2xpZW50SGVpZ2h0LCBwYXJhbXMudHVybkhlaWdodCwgcGFyYW1zLmNsaWVudEhlaWdodCksXG4gICAgdGFyZ2V0U2Nyb2xsVG9wOiBwYXJhbXMudGFyZ2V0U2Nyb2xsVG9wLFxuICB9XG59XG5cbmV4cG9ydCBjb25zdCByZXNvbHZlU2Nyb2xsVG9Cb3R0b21UYXJnZXRUb3AgPSAoc2Nyb2xsSGVpZ2h0OiBudW1iZXIsIGNsaWVu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
|
|
490
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJGZWVkYmFjayIsIkNoYXRIaXN0b3J5Um9sZSIsImlzU3RyZWFtaW5nUGxhY2Vob2xkZXJNZXNzYWdlSWQiLCJ0dXJuQW5jaG9yT2Zmc2V0Iiwidmlld3BvcnRIZWlnaHQiLCJNYXRoIiwibWluIiwiVFVSTl9TQ1JPTExfRFVSQVRJT05fTVMiLCJUVVJOX1NDUk9MTF9NQVhfRFVSQVRJT05fTVMiLCJUVVJOX1NDUk9MTF9MT05HX0RJU1RBTkNFX1BYIiwiY29tcHV0ZVR1cm5TY3JvbGxEdXJhdGlvbk1zIiwiZGlzdGFuY2UiLCJhYnMiLCJjb21wdXRlRGlzdGFuY2VGcm9tQm90dG9tIiwic2Nyb2xsSGVpZ2h0Iiwic3BhY2VySGVpZ2h0Iiwic2Nyb2xsVG9wIiwiY2xpZW50SGVpZ2h0Iiwic2hvdWxkU2hvd1Njcm9sbFRvQm90dG9tIiwiZGlzdGFuY2VGcm9tQm90dG9tIiwidGhyZXNob2xkIiwiYXJndW1lbnRzIiwibGVuZ3RoIiwidW5kZWZpbmVkIiwiU0NST0xMX0dSQURJRU5UX1RIUkVTSE9MRF9QWCIsIlNDUk9MTF9ORUFSX0JPVFRPTV9ERUZBVUxUX1RIUkVTSE9MRCIsIlNDUk9MTF9ORUFSX0JPVFRPTV9VUF9USFJFU0hPTEQiLCJTQ1JPTExfQVRfQk9UVE9NX1RPTEVSQU5DRV9QWCIsIlNQQUNFUl9IRUlHSFRfRVBTSUxPTl9QWCIsInNob3VsZFNob3dUb3BTY3JvbGxHcmFkaWVudCIsInNob3VsZFNob3dCb3R0b21TY3JvbGxHcmFkaWVudCIsImlzU2Nyb2xsaW5nVXB3YXJkIiwibGFzdFNjcm9sbFRvcCIsImlzTmVhclNjcm9sbEJvdHRvbSIsInJlc29sdmVTY3JvbGxOZWFyQm90dG9tVGhyZXNob2xkIiwiY3VycmVudFRocmVzaG9sZCIsImlzU2Nyb2xsaW5nVXAiLCJpc05lYXJCb3R0b20iLCJzaG91bGRTa2lwVHVyblNjcm9sbEFuaW1hdGlvbiIsImVhc2VPdXRFeHBvU2Nyb2xsUHJvZ3Jlc3MiLCJwcm9ncmVzcyIsInBvdyIsImNvbXB1dGVUdXJuU2Nyb2xsVGFyZ2V0VG9wIiwicXVlc3Rpb25Ub3AiLCJvZmZzZXQiLCJtYXgiLCJzaG91bGRTa2lwVHVyblNwYWNlUmVzZXJ2YXRpb24iLCJjdXJyZW50U2Nyb2xsVG9wIiwidGFyZ2V0U2Nyb2xsVG9wIiwic2hvdWxkVXBkYXRlU3BhY2VySGVpZ2h0IiwiY3VycmVudEhlaWdodCIsIm5leHRIZWlnaHQiLCJjb21wdXRlU3luY2VkVHVyblNwYWNlckhlaWdodCIsInR1cm5IZWlnaHQiLCJjdXJyZW50U3BhY2VySGVpZ2h0IiwicmVzZXJ2ZWQiLCJzaG91bGREcmFpblR1cm5TcGFjZU9uU2Nyb2xsIiwiYW5jaG9yZWRUdXJuSWQiLCJzaG91bGRSZWxlYXNlVHVyblNwYWNlIiwiQm9vbGVhbiIsInNob3VsZFBlcnNpc3RNYWlhUGFuZWxTY3JvbGwiLCJpbml0aWFsQ2hhdElkIiwiaXNDb250YWluZXJBdFNjcm9sbEJvdHRvbSIsInRvbGVyYW5jZSIsImlzTmV3Q2hhdE1lc3NhZ2VFdmVudCIsImxhc3RJZCIsInByZXZJZCIsIm1lc3NhZ2VzTGVuZ3RoIiwicHJldkxlbmd0aCIsImhhc0luaXRpYWxVc2VyTWVzc2FnZUluTGlzdCIsIm1lc3NhZ2VzIiwic29tZSIsIm1zZyIsImlkIiwiaXNBcHByb3ZhbENoYXRNZXNzYWdlIiwibWVzc2FnZSIsIl9tZXNzYWdlJGlkIiwic3RhcnRzV2l0aCIsImFwcHJvdmFsIiwiaXNBbnN3ZXJPclF1ZXN0aW9uQ2hhdE1lc3NhZ2VJZCIsIm1lc3NhZ2VJZCIsInNob3VsZEF1dG9TY3JvbGxPbk1lc3NhZ2VzQ2hhbmdlIiwicGFyYW1zIiwiaXNOZXdNZXNzYWdlIiwid2FpdGluZ1Jlc3BvbnNlIiwiaXNXcml0aW5nIiwiaXNBbnN3ZXJPclF1ZXN0aW9uIiwiaXNBdEJvdHRvbSIsImlzQXBwcm92YWwiLCJoYXNJbml0aWFsTWVzc2FnZSIsInByZXZNZXNzYWdlc0xlbmd0aCIsInNob3VsZFJ1blN0cmVhbVR1cm5TeW5jRWZmZWN0IiwiaGFzTWVzc2FnZUxldmVsU3RyZWFtSW5kaWNhdG9yIiwibGFzdE1lc3NhZ2VJZCIsInNob3VsZFNob3dHbG9iYWxTdHJlYW1Mb2FkaW5nSW5kaWNhdG9yIiwiaGFzTWVzc2FnZUxldmVsSW5kaWNhdG9yIiwic3RyZWFtTG9hZGluZ0Rpc3BsYXkiLCJpc0N1cnJlbnRVc2VyTWVzc2FnZSIsInJvbGUiLCJ1c2VySWQiLCJhdXRoVXNlcklkIiwiVVNFUiIsImlzQXNzaXN0YW50Q2hhdE1lc3NhZ2UiLCJBU1NJU1RBTlQiLCJpc0FjdGl2ZVN0cmVhbWluZ1N0YXRlIiwiaXNTdHJlYW1pbmciLCJpc1N0cmVhbWluZ1BsYWNlaG9sZGVyIiwic2hvdWxkU2hvd1N0cmVhbWluZ01lc3NhZ2VCb2R5IiwiaXNBY3RpdmVTdHJlYW1pbmciLCJoYXNTdHJlYW1UZXh0Iiwic3RyZWFtTmFycmF0aW9uSW5UaW1lbGluZSIsInNob3VsZFNob3dTdHJlYW1BY3Rpdml0eUluZGljYXRvciIsImlzQXNzaXN0YW50Iiwic3RyZWFtQWN0aXZpdHkiLCJzaG91bGRSZW5kZXJDaGFuZ2VQcm9qZWN0TWVzc2FnZSIsImlzQ2hhbmdlUHJvamVjdCIsIm9wdGlvbnMiLCJzaG91bGRTaG93TWVzc2FnZUF0dGFjaG1lbnRzUm93IiwiYXR0YWNobWVudENvdW50Iiwic2hvdWxkUmVuZGVyTWVzc2FnZVRleHRCb2R5IiwibWVzc2FnZVRleHQiLCJzaG93U3RyZWFtaW5nQm9keSIsInNob3VsZFNob3dBcHByb3ZhbEFjdGlvbnMiLCJwZW5kaW5nX2FjdGlvbnMiLCJzaG91bGRIaWRlRW1wdHlTdHJlYW1pbmdCb2R5IiwiZGlzcGxheVRleHQiLCJzaG91bGRSZW5kZXJBc3Npc3RhbnRGZWVkYmFjayIsImlzRXJyb3IiLCJtdWx0aXBsZUNob2ljZSIsImlzRnJvbnRlbmRDYW5jZWxsZWQiLCJvblJldHJ5Iiwic2hvdWxkUmVuZGVyQXNzaXN0YW50U3VnZ2VzdGlvbnMiLCJzdWdnZXN0aW9uc0xlbmd0aCIsInNob3VsZEhpZGVBc3Npc3RhbnRTdWdnZXN0aW9ucyIsImlzTGFzdE1lc3NhZ2UiLCJzdWdnZXN0aW9uc0Rpc2FibGVkIiwiTUFSS0RPV05fREVDT1JBVElPTiIsImV4dHJhY3RNdWx0aXBsZUNob2ljZVF1ZXN0aW9uIiwidGV4dCIsImxpbmVzIiwic3BsaXQiLCJtYXAiLCJsaW5lIiwicmVwbGFjZSIsInRyaW0iLCJmaWx0ZXIiLCJxdWVzdGlvbiIsIl90b0NvbnN1bWFibGVBcnJheSIsInJldmVyc2UiLCJmaW5kIiwiZW5kc1dpdGgiLCJyZXNvbHZlUGVuZGluZ011bHRpcGxlQ2hvaWNlIiwiX2xhc3QkbXVsdGlwbGVDaG9pY2UiLCJsYXN0IiwidXNlciIsImRpc21pc3NlZE1lc3NhZ2VJZHMiLCJBcnJheSIsImlzQXJyYXkiLCJyZXNvbHZlQW5zd2VyZWRNdWx0aXBsZUNob2ljZXMiLCJhbnN3ZXJzIiwiaGlkZGVuTWVzc2FnZUlkcyIsImZvckVhY2giLCJpbmRleCIsIl9tZXNzYWdlJG11bHRpcGxlQ2hvaSIsIl9yZXBseSRtZXNzYWdlJHRyaW0iLCJfcmVwbHkkbWVzc2FnZSIsInJlcGx5IiwibXVsdGlwbGVDaG9pY2VBbnN3ZXIiLCJfcmVwbHkkbXVsdGlwbGVDaG9pY2UiLCJrZXkiLCJza2lwcGVkIiwib3B0aW9uSW5kZXgiLCJmaW5kSW5kZXgiLCJvcHRpb24iLCJudW1iZXIiLCJkZXNjcmlwdGlvbiIsInJlc29sdmVUdXJuQW5jaG9ySWQiLCJxdWVzdGlvbklkIiwiaXNTYW1lUGVuZGluZ011bHRpcGxlQ2hvaWNlIiwiYSIsImIiLCJzaG91bGRSZW5kZXJDcmVhdGVBZ2VudEFjdGlvbnMiLCJhZ2VudElkIiwicmVzb2x2ZUNoYXRMaXN0SXRlbVN0cmVhbWluZ0ZsYWdzIiwiY291bnRVc2VyTWVzc2FnZUF0dGFjaG1lbnRzIiwiYXR0YWNobWVudHMiLCJzb3VyY2VDb3VudCIsInNvdXJjZXMiLCJzaG91bGRJZ25vcmVTdWdnZXN0aW9uQ2xpY2siLCJzdWdnZXN0aW9uIiwiYWxyZWFkeVNlbGVjdGVkIiwiaXNSZXRyeVN1Z2dlc3Rpb25TZWxlY3Rpb24iLCJyZXRyeUxhYmVsIiwicmVzb2x2ZVJldHJ5QXR0YWNobWVudHNGcm9tVXNlck1lc3NhZ2UiLCJ1c2VyTWVzc2FnZSIsInNob3VsZE9wZW5NZXNzYWdlT3B0aW9uIiwic2VsZWN0ZWRPcHRpb24iLCJyZXNvbHZlQXR0YWNobWVudERvd25sb2FkQmxvYlN0cmF0ZWd5IiwiZmlsZVVybCIsImZpbGUiLCJGaWxlIiwiZXh0cmFjdEZlZWRiYWNrU2Vzc2lvbklkIiwiam9pbiIsIkFVRElPX0VYVEVOU0lPTlMiLCJBVURJT19UWVBFUyIsImlzQXVkaW9BdHRhY2htZW50IiwiYXR0YWNobWVudCIsIl9hdHRhY2htZW50JHR5cGUiLCJfYXR0YWNobWVudCRuYW1lIiwiYXR0YWNobWVudFR5cGUiLCJ0eXBlIiwidG9Mb3dlckNhc2UiLCJhdHRhY2htZW50TmFtZSIsIm5hbWUiLCJpbmNsdWRlcyIsImV4dCIsImNhbk9wZW5BdHRhY2htZW50UHJldmlldyIsIm9yaWdpbmFsRmlsZSIsInVybF90aHVtYm5haWwiLCJ1cmxfb3JpZ2luYWwiLCJ1cmxfZmlsZSIsImZpbmRMYXN0UXVlc3Rpb25JZCIsIl9tZXNzYWdlcyRpbmRleCIsImNvbXB1dGVSZXNlcnZlZFR1cm5TcGFjZSIsInJlc29sdmVNZXNzYWdlQXR0YWNobWVudHMiLCJyZXNvbHZlQXR0YWNobWVudERvd25sb2FkRmlsZU5hbWUiLCJleHRlbnNpb24iLCJjb25jYXQiLCJyZXNvbHZlQXR0YWNobWVudERvd25sb2FkVXJsIiwic2hvdWxkU2tpcEVtcHR5Q2hhdExpc3RNZXNzYWdlIiwicHJvamVjdE5hbWUiLCJoYXNBcHByb3ZhbCIsImhhc011bHRpcGxlQ2hvaWNlIiwicmVzb2x2ZURpc2FibGVGZWVkYmFja0Zyb21XYXNIZWxwZnVsIiwid2FzSGVscGZ1bCIsIlRIVU1CU19VUCIsIlRIVU1CU19ET1dOIiwiY2FuUmV0cnlBc3Npc3RhbnRNZXNzYWdlIiwiaGFzVXNlck1lc3NhZ2VGb3JSZXRyeSIsImlzQ2FuY2VsbGVkIiwidHVybklkIiwiY29tcHV0ZVJlbW92YWJsZVR1cm5TcGFjZSIsInJlbW92YWJsZSIsInJlYWRTbW9vdGhTdHJlYW1XaW5kb3dGbGFncyIsIndpbmRvdyIsImJ1aWxkU21vb3RoU3RyZWFtVGV4dE9wdGlvbnMiLCJmbGFncyIsIl9vYmplY3RTcHJlYWQiLCJlbmFibGVkIiwibWF4Q2hhcnNQZXJGcmFtZSIsInNuYXBUb1dvcmRCb3VuZGFyeSIsInN0cmVhbUxhZ01zIiwidGFyZ2V0TGFnTXMiLCJzdHJlYW1BZGFwdCIsImFkYXB0VG9CYWNrZW5kUmF0ZSIsInN0cmVhbUJ1ZmZlck1zIiwidGFyZ2V0QnVmZmVyTXMiLCJzdHJlYW1NaW5CdWZmZXIiLCJtaW5CdWZmZXJDaGFycyIsInN0cmVhbVdhcm11cE1zIiwid2FybXVwTXMiLCJyZXNvbHZlU3RyZWFtaW5nUmF3VGV4dCIsInN0cmVhbWluZ1RleHQiLCJzaG91bGRSZW5kZXJNZW50aW9uSW5saW5lTm9kZXMiLCJoYXNNZW50aW9ucyIsIm1lbnRpb25Ob2RlcyIsInJlc29sdmVGZWVkYmFja1Byb3BzRm9yQ2FuY2VsbGVkIiwiaGFuZGxlRmVlZGJhY2tDbGljayIsImhhbmRsZUZlZWRiYWNrIiwicmVzb2x2ZVN0cmVhbWluZ01lc3NhZ2VIb29rSWQiLCJzaG91bGRJbml0aWFsaXplQ2hhdCIsImFscmVhZHlJbml0aWFsaXplZCIsInNob3VsZENsZWFyTGFzdFJlc2VydmVkUXVlc3Rpb24iLCJsb2FkaW5nTWVzc2FnZXMiLCJzaG91bGRTY2hlZHVsZVR1cm5TcGFjZVJlc2VydmF0aW9uIiwiaXNMb2FkaW5nTW9yZU1lc3NhZ2VzIiwibGFzdFJlc2VydmVkUXVlc3Rpb25JZCIsInNob3VsZFNraXBNZXNzYWdlc1Njcm9sbEVmZmVjdCIsImhhc0NvbnRhaW5lciIsImlzTG9hZGluZ01vcmVSZWYiLCJyZXNvbHZlQ29udGFpbmVyQXRCb3R0b20iLCJjb250YWluZXIiLCJzaG91bGRSdW5TZXNzaW9uQ2FjaGVTY3JvbGxUb0JvdHRvbSIsImxhc3RTY3JvbGxlZFNlc3Npb25JZCIsImRldGVjdEp1c3RGaW5pc2hlZExvYWRpbmdNZXNzYWdlcyIsIndhc0xvYWRpbmciLCJzaG91bGRTY3JvbGxUb0JvdHRvbUFmdGVyTG9hZCIsImp1c3RGaW5pc2hlZExvYWRpbmciLCJzaG91bGRVcGRhdGVTY3JvbGxBZmZvcmRhbmNlc09uTG9hZEVuZCIsInNob3VsZENsZWFyU2Nyb2xsUmVzdG9yZVdpdGhvdXRDaGF0IiwicmVzb2x2ZVBlbmRpbmdTY3JvbGxUb3BGcm9tU2Vzc2lvbiIsInNlc3Npb24iLCJzY3JvbGxTZXNzaW9uSWQiLCJzaG91bGRBcHBseVBlbmRpbmdTY3JvbGxSZXN0b3JlIiwicGVuZGluZ1Njcm9sbFRvcCIsInNob3VsZFJlc3RvcmVTY3JvbGxPbkV4cGFuZGVkQ2hhbmdlIiwicHJldmlvdXNFeHBhbmRlZCIsImV4cGFuZGVkIiwicmVzb2x2ZU1lc3NhZ2VMaXN0SXRlbUtleSIsInJlc29sdmVDcmVhdGVBZ2VudEFjdGlvbnNBZ2VudElkIiwiZm9sbG93VXAiLCJyZXNvbHZlU3RyZWFtaW5nVGV4dEhvb2tJZCIsInJlc29sdmVSZWFzb25pbmdUcmFjZUhvb2tJZCIsInJlc29sdmVTY3JvbGxPblBhcmVudE1vZGUiLCJyZXNvbHZlTGFzdFVzZXJNZXNzYWdlRm9yQXR0YWNobWVudHMiLCJ0b1N0cmluZyIsImF0IiwicmVzb2x2ZVN1Z2dlc3Rpb25BbmFseXRpY3NBZ2VudFR5cGUiLCJpc01hcmtldHBsYWNlR2xvYmFsQWdlbnQiLCJhZ2VudFR5cGUiLCJwcm9jZXNzQ2hhdE1lc3NhZ2VzU2Nyb2xsRnJhbWUiLCJpbnB1dCIsInNjcm9sbFRocmVzaG9sZCIsIm5leHRTY3JvbGxUaHJlc2hvbGQiLCJzaG91bGREcmFpblR1cm5TcGFjZSIsInNob3VsZFNjaGVkdWxlU2Nyb2xsUGVyc2lzdCIsInNob3VsZE5vdGlmeVNjcm9sbFRvQm90dG9tIiwiY29tcHV0ZU1lYXN1cmVUdXJuTGF5b3V0IiwicXVlc3Rpb25TY3JvbGxUb3AiLCJjb250YWluZXJUb3AiLCJjb250ZW50Qm90dG9tU2Nyb2xsIiwiY29udGVudEJvdHRvbSIsInJlc29sdmVSZXNlcnZlVHVyblNwYWNlUGxhbiIsImtpbmQiLCJyZXNvbHZlU2Nyb2xsVG9Cb3R0b21UYXJnZXRUb3AiXSwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50cy9tb2xlY3VsZXMvQ2hhdEFJTWVzc2FnZXMvQ2hhdEFJTWVzc2FnZXMuaGVscGVycy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IEF0dGFjaG1lbnRGaWxlIH0gZnJvbSAnLi4vQ2hhdEZvb3Rlci9DaGF0Rm9vdGVyJ1xuaW1wb3J0IHsgRmVlZGJhY2sgfSBmcm9tICcuLi9NZXNzYWdlRmVlZGJhY2svTWVzc2FnZUZlZWRiYWNrJ1xuaW1wb3J0IHsgQ2hhdEhpc3RvcnlSb2xlLCBNdWx0aXBsZUNob2ljZSwgTXVsdGlwbGVDaG9pY2VBbnN3ZXIgfSBmcm9tICcuLi8uLi8uLi90eXBlcy9DaGF0J1xuaW1wb3J0IHR5cGUgeyBQZW5kaW5nTXVsdGlwbGVDaG9pY2UgfSBmcm9tICcuLi8uLi8uLi9zdG9yZS91c2VNdWx0aXBsZUNob2ljZVN0b3JlJ1xuaW1wb3J0IHsgaXNTdHJlYW1pbmdQbGFjZWhvbGRlck1lc3NhZ2VJZCB9IGZyb20gJy4uLy4uLy4uL3V0aWxzL3N0cmVhbUFjdGl2aXR5TWVzc2FnZXMnXG5cbmV4cG9ydCBjb25zdCB0dXJuQW5jaG9yT2Zmc2V0ID0gKHZpZXdwb3J0SGVpZ2h0OiBudW1iZXIpOiBudW1iZXIgPT4gTWF0aC5taW4odmlld3BvcnRIZWlnaHQgKiAwLjE4LCAyMDApXG5cbmV4cG9ydCBjb25zdCBUVVJOX1NDUk9MTF9EVVJBVElPTl9NUyA9IDYwMFxuZXhwb3J0IGNvbnN0IFRVUk5fU0NST0xMX01BWF9EVVJBVElPTl9NUyA9IDgwMFxuZXhwb3J0IGNvbnN0IFRVUk5fU0NST0xMX0xPTkdfRElTVEFOQ0VfUFggPSAxMjAwXG5cbmV4cG9ydCBjb25zdCBjb21wdXRlVHVyblNjcm9sbER1cmF0aW9uTXMgPSAoZGlzdGFuY2U6IG51bWJlcik6IG51bWJlciA9PlxuICBUVVJOX1NDUk9MTF9EVVJBVElPTl9NUyArXG4gIChUVVJOX1NDUk9MTF9NQVhfRFVSQVRJT05fTVMgLSBUVVJOX1NDUk9MTF9EVVJBVElPTl9NUykgKlxuICAgIE1hdGgubWluKDEsIE1hdGguYWJzKGRpc3RhbmNlKSAvIFRVUk5fU0NST0xMX0xPTkdfRElTVEFOQ0VfUFgpXG5cbmV4cG9ydCBjb25zdCBjb21wdXRlRGlzdGFuY2VGcm9tQm90dG9tID0gKFxuICBzY3JvbGxIZWlnaHQ6IG51bWJlcixcbiAgc3BhY2VySGVpZ2h0OiBudW1iZXIsXG4gIHNjcm9sbFRvcDogbnVtYmVyLFxuICBjbGllbnRIZWlnaHQ6IG51bWJlclxuKTogbnVtYmVyID0+IHNjcm9sbEhlaWdodCAtIHNwYWNlckhlaWdodCAtIHNjcm9sbFRvcCAtIGNsaWVudEhlaWdodFxuXG5leHBvcnQgY29uc3Qgc2hvdWxkU2hvd1Njcm9sbFRvQm90dG9tID0gKGRpc3RhbmNlRnJvbUJvdHRvbTogbnVtYmVyLCB0aHJlc2hvbGQgPSA1MCk6IGJvb2xlYW4gPT5cbiAgZGlzdGFuY2VGcm9tQm90dG9tID4gdGhyZXNob2xkXG5cbmV4cG9ydCBjb25zdCBTQ1JPTExfR1JBRElFTlRfVEhSRVNIT0xEX1BYID0gMVxuZXhwb3J0IGNvbnN0IFNDUk9MTF9ORUFSX0JPVFRPTV9ERUZBVUxUX1RIUkVTSE9MRCA9IDM5XG5leHBvcnQgY29uc3QgU0NST0xMX05FQVJfQk9UVE9NX1VQX1RIUkVTSE9MRCA9IDE1XG5leHBvcnQgY29uc3QgU0NST0xMX0FUX0JPVFRPTV9UT0xFUkFOQ0VfUFggPSAxMDBcbmV4cG9ydCBjb25zdCBTUEFDRVJfSEVJR0hUX0VQU0lMT05fUFggPSAxXG5cbmV4cG9ydCBjb25zdCBzaG91bGRTaG93VG9wU2Nyb2xsR3JhZGllbnQgPSAoc2Nyb2xsVG9wOiBudW1iZXIsIHRocmVzaG9sZCA9IFNDUk9MTF9HUkFESUVOVF9USFJFU0hPTERfUFgpOiBib29sZWFuID0+XG4gIHNjcm9sbFRvcCA+IHRocmVzaG9sZFxuXG5leHBvcnQgY29uc3Qgc2hvdWxkU2hvd0JvdHRvbVNjcm9sbEdyYWRpZW50ID0gKFxuICBkaXN0YW5jZUZyb21Cb3R0b206IG51bWJlcixcbiAgdGhyZXNob2xkID0gU0NST0xMX0dSQURJRU5UX1RIUkVTSE9MRF9QWFxuKTogYm9vbGVhbiA9PiBkaXN0YW5jZUZyb21Cb3R0b20gPiB0aHJlc2hvbGRcblxuZXhwb3J0IGNvbnN0IGlzU2Nyb2xsaW5nVXB3YXJkID0gKHNjcm9sbFRvcDogbnVtYmVyLCBsYXN0U2Nyb2xsVG9wOiBudW1iZXIpOiBib29sZWFuID0+IHNjcm9sbFRvcCA8IGxhc3RTY3JvbGxUb3BcblxuZXhwb3J0IGNvbnN0IGlzTmVhclNjcm9sbEJvdHRvbSA9IChcbiAgc2Nyb2xsSGVpZ2h0OiBudW1iZXIsXG4gIHNjcm9sbFRvcDogbnVtYmVyLFxuICBjbGllbnRIZWlnaHQ6IG51bWJlcixcbiAgdGhyZXNob2xkOiBudW1iZXJcbik6IGJvb2xlYW4gPT4gc2Nyb2xsSGVpZ2h0IC0gc2Nyb2xsVG9wIC0gY2xpZW50SGVpZ2h0IDwgdGhyZXNob2xkXG5cbmV4cG9ydCBjb25zdCByZXNvbHZlU2Nyb2xsTmVhckJvdHRvbVRocmVzaG9sZCA9IChcbiAgY3VycmVudFRocmVzaG9sZDogbnVtYmVyLFxuICBpc1Njcm9sbGluZ1VwOiBib29sZWFuLFxuICBpc05lYXJCb3R0b206IGJvb2xlYW5cbik6IG51bWJlciA9PiB7XG4gIGlmIChpc05lYXJCb3R0b20pIHJldHVybiBTQ1JPTExfTkVBUl9CT1RUT01fREVGQVVMVF9USFJFU0hPTERcbiAgaWYgKGlzU2Nyb2xsaW5nVXApIHJldHVybiBTQ1JPTExfTkVBUl9CT1RUT01fVVBfVEhSRVNIT0xEXG4gIHJldHVybiBjdXJyZW50VGhyZXNob2xkXG59XG5cbmV4cG9ydCBjb25zdCBzaG91bGRTa2lwVHVyblNjcm9sbEFuaW1hdGlvbiA9IChkaXN0YW5jZTogbnVtYmVyKTogYm9vbGVhbiA9PiBNYXRoLmFicyhkaXN0YW5jZSkgPCAxXG5cbmV4cG9ydCBjb25zdCBlYXNlT3V0RXhwb1Njcm9sbFByb2dyZXNzID0gKHByb2dyZXNzOiBudW1iZXIpOiBudW1iZXIgPT4gKHByb2dyZXNzID09PSAxID8gMSA6IDEgLSAyICoqICgtMTIgKiBwcm9ncmVzcykpXG5cbmV4cG9ydCBjb25zdCBjb21wdXRlVHVyblNjcm9sbFRhcmdldFRvcCA9IChxdWVzdGlvblRvcDogbnVtYmVyLCB2aWV3cG9ydEhlaWdodDogbnVtYmVyKTogbnVtYmVyID0+IHtcbiAgY29uc3Qgb2Zmc2V0ID0gdHVybkFuY2hvck9mZnNldCh2aWV3cG9ydEhlaWdodClcbiAgcmV0dXJuIE1hdGgubWF4KDAsIHF1ZXN0aW9uVG9wIC0gb2Zmc2V0KVxufVxuXG5leHBvcnQgY29uc3Qgc2hvdWxkU2tpcFR1cm5TcGFjZVJlc2VydmF0aW9uID0gKGN1cnJlbnRTY3JvbGxUb3A6IG51bWJlciwgdGFyZ2V0U2Nyb2xsVG9wOiBudW1iZXIpOiBib29sZWFuID0+XG4gIHRhcmdldFNjcm9sbFRvcCA8PSBjdXJyZW50U2Nyb2xsVG9wXG5cbmV4cG9ydCBjb25zdCBzaG91bGRVcGRhdGVTcGFjZXJIZWlnaHQgPSAoY3VycmVudEhlaWdodDogbnVtYmVyLCBuZXh0SGVpZ2h0OiBudW1iZXIpOiBib29sZWFuID0+XG4gIE1hdGguYWJzKGN1cnJlbnRIZWlnaHQgLSBuZXh0SGVpZ2h0KSA+PSBTUEFDRVJfSEVJR0hUX0VQU0lMT05fUFhcblxuZXhwb3J0IGNvbnN0IGNvbXB1dGVTeW5jZWRUdXJuU3BhY2VySGVpZ2h0ID0gKFxuICBjbGllbnRIZWlnaHQ6IG51bWJlcixcbiAgdHVybkhlaWdodDogbnVtYmVyLFxuICBjdXJyZW50U3BhY2VySGVpZ2h0OiBudW1iZXJcbik6IG51bWJlciA9PiB7XG4gIGNvbnN0IG9mZnNldCA9IHR1cm5BbmNob3JPZmZzZXQoY2xpZW50SGVpZ2h0KVxuICBjb25zdCByZXNlcnZlZCA9IE1hdGgubWF4KDAsIGNsaWVudEhlaWdodCAtIHR1cm5IZWlnaHQgLSBvZmZzZXQpXG4gIHJldHVybiBNYXRoLm1pbihjdXJyZW50U3BhY2VySGVpZ2h0LCByZXNlcnZlZClcbn1cblxuZXhwb3J0IGNvbnN0IHNob3VsZERyYWluVHVyblNwYWNlT25TY3JvbGwgPSAoYW5jaG9yZWRUdXJuSWQ6IHN0cmluZyB8IG51bGwpOiBib29sZWFuID0+ICFhbmNob3JlZFR1cm5JZFxuXG5leHBvcnQgY29uc3Qgc2hvdWxkUmVsZWFzZVR1cm5TcGFjZSA9IChhbmNob3JlZFR1cm5JZDogc3RyaW5nIHwgbnVsbCwgc3BhY2VySGVpZ2h0OiBudW1iZXIpOiBib29sZWFuID0+XG4gIEJvb2xlYW4oYW5jaG9yZWRUdXJuSWQpIHx8IHNwYWNlckhlaWdodCA+IDBcblxuZXhwb3J0IGNvbnN0IHNob3VsZFBlcnNpc3RNYWlhUGFuZWxTY3JvbGwgPSAoaW5pdGlhbENoYXRJZDogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZCwgc2Nyb2xsVG9wOiBudW1iZXIpOiBib29sZWFuID0+XG4gIEJvb2xlYW4oaW5pdGlhbENoYXRJZCkgJiYgc2Nyb2xsVG9wID4gMFxuXG5leHBvcnQgY29uc3QgaXNDb250YWluZXJBdFNjcm9sbEJvdHRvbSA9IChcbiAgc2Nyb2xsSGVpZ2h0OiBudW1iZXIsXG4gIHNjcm9sbFRvcDogbnVtYmVyLFxuICBjbGllbnRIZWlnaHQ6IG51bWJlcixcbiAgdG9sZXJhbmNlID0gU0NST0xMX0FUX0JPVFRPTV9UT0xFUkFOQ0VfUFhcbik6IGJvb2xlYW4gPT4gc2Nyb2xsSGVpZ2h0IC0gc2Nyb2xsVG9wIDw9IGNsaWVudEhlaWdodCArIHRvbGVyYW5jZVxuXG5leHBvcnQgY29uc3QgaXNOZXdDaGF0TWVzc2FnZUV2ZW50ID0gKFxuICBsYXN0SWQ6IHN0cmluZyB8IG51bGwsXG4gIHByZXZJZDogc3RyaW5nIHwgbnVsbCxcbiAgbWVzc2FnZXNMZW5ndGg6IG51bWJlcixcbiAgcHJldkxlbmd0aDogbnVtYmVyXG4pOiBib29sZWFuID0+IGxhc3RJZCAhPT0gcHJldklkIHx8IG1lc3NhZ2VzTGVuZ3RoICE9PSBwcmV2TGVuZ3RoXG5cbmV4cG9ydCBjb25zdCBoYXNJbml0aWFsVXNlck1lc3NhZ2VJbkxpc3QgPSAobWVzc2FnZXM6IEFycmF5PHsgaWQ/OiBzdHJpbmcgfT4pOiBib29sZWFuID0+XG4gIG1lc3NhZ2VzLnNvbWUobXNnID0+IG1zZy5pZCA9PT0gJ3VzZXItaW5pdGlhbC1tZXNzYWdlJylcblxuZXhwb3J0IGNvbnN0IGlzQXBwcm92YWxDaGF0TWVzc2FnZSA9IChtZXNzYWdlOiB7IGlkPzogc3RyaW5nOyBhcHByb3ZhbD86IHVua25vd24gfSB8IG51bGwgfCB1bmRlZmluZWQpOiBib29sZWFuID0+XG4gIEJvb2xlYW4obWVzc2FnZSAmJiAobWVzc2FnZS5pZD8uc3RhcnRzV2l0aCgnYXBwcm92YWwtJykgfHwgbWVzc2FnZS5hcHByb3ZhbCkpXG5cbmV4cG9ydCBjb25zdCBpc0Fuc3dlck9yUXVlc3Rpb25DaGF0TWVzc2FnZUlkID0gKG1lc3NhZ2VJZDogc3RyaW5nIHwgdW5kZWZpbmVkKTogYm9vbGVhbiA9PlxuICBCb29sZWFuKG1lc3NhZ2VJZD8uc3RhcnRzV2l0aCgnYW5zd2VyLScpIHx8IG1lc3NhZ2VJZD8uc3RhcnRzV2l0aCgncXVlc3Rpb24tJykpXG5cbmV4cG9ydCBjb25zdCBzaG91bGRBdXRvU2Nyb2xsT25NZXNzYWdlc0NoYW5nZSA9IChwYXJhbXM6IHtcbiAgaXNOZXdNZXNzYWdlOiBib29sZWFuXG4gIGFuY2hvcmVkVHVybklkOiBzdHJpbmcgfCBudWxsXG4gIHdhaXRpbmdSZXNwb25zZTogYm9vbGVhblxuICBpc1dyaXRpbmc6IGJvb2xlYW5cbiAgaXNBdEJvdHRvbTogYm9vbGVhblxuICBpc0Fuc3dlck9yUXVlc3Rpb246IGJvb2xlYW5cbiAgaXNBcHByb3ZhbDogYm9vbGVhblxuICBoYXNJbml0aWFsTWVzc2FnZTogYm9vbGVhblxuICBtZXNzYWdlc0xlbmd0aDogbnVtYmVyXG4gIHByZXZNZXNzYWdlc0xlbmd0aDogbnVtYmVyXG59KTogJ3Njcm9sbCcgfCAnc3luYy10dXJuJyB8ICdhZmZvcmRhbmNlcy1vbmx5JyA9PiB7XG4gIGlmICghcGFyYW1zLmlzTmV3TWVzc2FnZSkgcmV0dXJuICdhZmZvcmRhbmNlcy1vbmx5J1xuICBpZiAocGFyYW1zLmFuY2hvcmVkVHVybklkKSByZXR1cm4gJ3N5bmMtdHVybidcbiAgaWYgKHBhcmFtcy53YWl0aW5nUmVzcG9uc2UgfHwgcGFyYW1zLmlzV3JpdGluZykgcmV0dXJuICdhZmZvcmRhbmNlcy1vbmx5J1xuICBpZiAocGFyYW1zLmlzQW5zd2VyT3JRdWVzdGlvbiAmJiBwYXJhbXMuaXNBdEJvdHRvbSkgcmV0dXJuICdzY3JvbGwnXG4gIGlmIChcbiAgICAhcGFyYW1zLmlzQW5zd2VyT3JRdWVzdGlvbiAmJlxuICAgICFwYXJhbXMuaXNBcHByb3ZhbCAmJlxuICAgICFwYXJhbXMuaGFzSW5pdGlhbE1lc3NhZ2UgJiZcbiAgICBwYXJhbXMubWVzc2FnZXNMZW5ndGggPiBwYXJhbXMucHJldk1lc3NhZ2VzTGVuZ3RoXG4gICkge1xuICAgIHJldHVybiAnc2Nyb2xsJ1xuICB9XG4gIHJldHVybiAnYWZmb3JkYW5jZXMtb25seSdcbn1cblxuZXhwb3J0IGNvbnN0IHNob3VsZFJ1blN0cmVhbVR1cm5TeW5jRWZmZWN0ID0gKHdhaXRpbmdSZXNwb25zZTogYm9vbGVhbiwgaXNXcml0aW5nOiBib29sZWFuKTogYm9vbGVhbiA9PlxuICB3YWl0aW5nUmVzcG9uc2UgfHwgaXNXcml0aW5nXG5cbmV4cG9ydCBjb25zdCBoYXNNZXNzYWdlTGV2ZWxTdHJlYW1JbmRpY2F0b3IgPSAoXG4gIGxhc3RNZXNzYWdlSWQ6IHN0cmluZyB8IHVuZGVmaW5lZCxcbiAgd2FpdGluZ1Jlc3BvbnNlOiBib29sZWFuLFxuICBpc1dyaXRpbmc6IGJvb2xlYW5cbik6IGJvb2xlYW4gPT4gQm9vbGVhbihsYXN0TWVzc2FnZUlkICYmIGlzU3RyZWFtaW5nUGxhY2Vob2xkZXJNZXNzYWdlSWQobGFzdE1lc3NhZ2VJZCkgJiYgKHdhaXRpbmdSZXNwb25zZSB8fCBpc1dyaXRpbmcpKVxuXG5leHBvcnQgY29uc3Qgc2hvdWxkU2hvd0dsb2JhbFN0cmVhbUxvYWRpbmdJbmRpY2F0b3IgPSAoXG4gIGhhc01lc3NhZ2VMZXZlbEluZGljYXRvcjogYm9vbGVhbixcbiAgc3RyZWFtTG9hZGluZ0Rpc3BsYXk6IHVua25vd25cbik6IGJvb2xlYW4gPT4gIWhhc01lc3NhZ2VMZXZlbEluZGljYXRvciAmJiBCb29sZWFuKHN0cmVhbUxvYWRpbmdEaXNwbGF5KVxuXG5leHBvcnQgY29uc3QgaXNDdXJyZW50VXNlck1lc3NhZ2UgPSAocm9sZTogQ2hhdEhpc3RvcnlSb2xlIHwgdW5kZWZpbmVkLCB1c2VySWQ6IHN0cmluZywgYXV0aFVzZXJJZDogc3RyaW5nKTogYm9vbGVhbiA9PlxuICByb2xlID09PSBDaGF0SGlzdG9yeVJvbGUuVVNFUiB8fCB1c2VySWQgPT09IGF1dGhVc2VySWRcblxuZXhwb3J0IGNvbnN0IGlzQXNzaXN0YW50Q2hhdE1lc3NhZ2UgPSAocm9sZTogQ2hhdEhpc3RvcnlSb2xlIHwgdW5kZWZpbmVkLCB1c2VySWQ6IHN0cmluZyk6IGJvb2xlYW4gPT5cbiAgcm9sZSA9PT0gQ2hhdEhpc3RvcnlSb2xlLkFTU0lTVEFOVCB8fCB1c2VySWQgPT09ICdhc3Npc3RhbnQnXG5cbmV4cG9ydCBjb25zdCBpc0FjdGl2ZVN0cmVhbWluZ1N0YXRlID0gKGlzU3RyZWFtaW5nOiBib29sZWFuIHwgdW5kZWZpbmVkLCBpc1N0cmVhbWluZ1BsYWNlaG9sZGVyOiBib29sZWFuKTogYm9vbGVhbiA9PlxuICBCb29sZWFuKGlzU3RyZWFtaW5nKSB8fCBpc1N0cmVhbWluZ1BsYWNlaG9sZGVyXG5cbmV4cG9ydCBjb25zdCBzaG91bGRTaG93U3RyZWFtaW5nTWVzc2FnZUJvZHkgPSAoXG4gIGlzQWN0aXZlU3RyZWFtaW5nOiBib29sZWFuLFxuICBoYXNTdHJlYW1UZXh0OiBib29sZWFuLFxuICBzdHJlYW1OYXJyYXRpb25JblRpbWVsaW5lOiBib29sZWFuXG4pOiBib29sZWFuID0+IGlzQWN0aXZlU3RyZWFtaW5nICYmIGhhc1N0cmVhbVRleHQgJiYgIXN0cmVhbU5hcnJhdGlvbkluVGltZWxpbmVcblxuZXhwb3J0IGNvbnN0IHNob3VsZFNob3dTdHJlYW1BY3Rpdml0eUluZGljYXRvciA9IChcbiAgaXNBc3Npc3RhbnQ6IGJvb2xlYW4sXG4gIGlzQWN0aXZlU3RyZWFtaW5nOiBib29sZWFuLFxuICBzdHJlYW1BY3Rpdml0eTogdW5rbm93blxuKTogYm9vbGVhbiA9PiBpc0Fzc2lzdGFudCAmJiBpc0FjdGl2ZVN0cmVhbWluZyAmJiBCb29sZWFuKHN0cmVhbUFjdGl2aXR5KVxuXG5leHBvcnQgY29uc3Qgc2hvdWxkUmVuZGVyQ2hhbmdlUHJvamVjdE1lc3NhZ2UgPSAoXG4gIGlzQ2hhbmdlUHJvamVjdDogYm9vbGVhbiB8IHVuZGVmaW5lZCxcbiAgb3B0aW9uczogdW5rbm93bltdIHwgbnVsbCB8IHVuZGVmaW5lZFxuKTogYm9vbGVhbiA9PiBCb29sZWFuKGlzQ2hhbmdlUHJvamVjdCAmJiBvcHRpb25zKVxuXG5leHBvcnQgY29uc3Qgc2hvdWxkU2hvd01lc3NhZ2VBdHRhY2htZW50c1JvdyA9IChhdHRhY2htZW50Q291bnQ6IG51bWJlcik6IGJvb2xlYW4gPT4gYXR0YWNobWVudENvdW50ID4gMFxuXG5leHBvcnQgY29uc3Qgc2hvdWxkUmVuZGVyTWVzc2FnZVRleHRCb2R5ID0gKHBhcmFtczoge1xuICBtZXNzYWdlVGV4dDogc3RyaW5nIHwgdW5kZWZpbmVkIHwgbnVsbFxuICBzaG93U3RyZWFtaW5nQm9keTogYm9vbGVhblxuICBpc0Fzc2lzdGFudDogYm9vbGVhblxuICBhdHRhY2htZW50Q291bnQ6IG51bWJlclxufSk6IGJvb2xlYW4gPT5cbiAgQm9vbGVhbihwYXJhbXMubWVzc2FnZVRleHQgfHwgcGFyYW1zLnNob3dTdHJlYW1pbmdCb2R5KSAmJiAhKHBhcmFtcy5pc0Fzc2lzdGFudCAmJiBwYXJhbXMuYXR0YWNobWVudENvdW50ID4gMClcblxuZXhwb3J0IGNvbnN0IHNob3VsZFNob3dBcHByb3ZhbEFjdGlvbnMgPSAoYXBwcm92YWw6IHsgcGVuZGluZ19hY3Rpb25zPzogdW5rbm93biB9IHwgbnVsbCB8IHVuZGVmaW5lZCk6IGJvb2xlYW4gPT5cbiAgQm9vbGVhbihhcHByb3ZhbD8ucGVuZGluZ19hY3Rpb25zKVxuXG5leHBvcnQgY29uc3Qgc2hvdWxkSGlkZUVtcHR5U3RyZWFtaW5nQm9keSA9IChkaXNwbGF5VGV4dDogc3RyaW5nLCBpc1N0cmVhbWluZzogYm9vbGVhbik6IGJvb2xlYW4gPT5cbiAgIWRpc3BsYXlUZXh0ICYmICFpc1N0cmVhbWluZ1xuXG5leHBvcnQgY29uc3Qgc2hvdWxkUmVuZGVyQXNzaXN0YW50RmVlZGJhY2sgPSAocGFyYW1zOiB7XG4gIGlzQXNzaXN0YW50OiBib29sZWFuXG4gIGlzRXJyb3I/OiBib29sZWFuXG4gIGFwcHJvdmFsPzogdW5rbm93blxuICBtdWx0aXBsZUNob2ljZT86IHVua25vd25cbiAgaXNTdHJlYW1pbmc6IGJvb2xlYW5cbiAgaXNGcm9udGVuZENhbmNlbGxlZD86IGJvb2xlYW5cbiAgb25SZXRyeT86ICgpID0+IHZvaWRcbn0pOiBib29sZWFuID0+XG4gIHBhcmFtcy5pc0Fzc2lzdGFudCAmJlxuICAhcGFyYW1zLmlzRXJyb3IgJiZcbiAgIXBhcmFtcy5hcHByb3ZhbCAmJlxuICAhcGFyYW1zLm11bHRpcGxlQ2hvaWNlICYmXG4gICFwYXJhbXMuaXNTdHJlYW1pbmcgJiZcbiAgKCFwYXJhbXMuaXNGcm9udGVuZENhbmNlbGxlZCB8fCBCb29sZWFuKHBhcmFtcy5vblJldHJ5KSlcblxuZXhwb3J0IGNvbnN0IHNob3VsZFJlbmRlckFzc2lzdGFudFN1Z2dlc3Rpb25zID0gKHBhcmFtczoge1xuICBpc0Fzc2lzdGFudDogYm9vbGVhblxuICBpc0Zyb250ZW5kQ2FuY2VsbGVkPzogYm9vbGVhblxuICBhcHByb3ZhbD86IHVua25vd25cbiAgaXNFcnJvcj86IGJvb2xlYW5cbiAgc3VnZ2VzdGlvbnNMZW5ndGg6IG51bWJlclxuICBtdWx0aXBsZUNob2ljZT86IHVua25vd25cbn0pOiBib29sZWFuID0+XG4gIHBhcmFtcy5pc0Fzc2lzdGFudCAmJlxuICAhcGFyYW1zLmlzRnJvbnRlbmRDYW5jZWxsZWQgJiZcbiAgIXBhcmFtcy5hcHByb3ZhbCAmJlxuICAvLyBVbmEgcHJlZ3VudGEgYmxvcXVlYW50ZSAobXVsdGlwbGVDaG9pY2UpIG1hbmRhOiBlbCBiYWNrZW5kIG51bmNhIG1hbmRhIGxhcyBkb3MsIHBlcm8gc2kgbGxlZ2FyYW5cbiAgLy8ganVudGFzIG5vIHNlIG11ZXN0cmFuIHN1Z2VyZW5jaWFzIG9wY2lvbmFsZXMgYWwgbGFkbyBkZSB1bmEgZGVjaXNpw7NuIHBlbmRpZW50ZS5cbiAgIXBhcmFtcy5tdWx0aXBsZUNob2ljZSAmJlxuICAoIXBhcmFtcy5pc0Vycm9yIHx8IHBhcmFtcy5zdWdnZXN0aW9uc0xlbmd0aCA+IDApXG5cbmV4cG9ydCBjb25zdCBzaG91bGRIaWRlQXNzaXN0YW50U3VnZ2VzdGlvbnMgPSAoXG4gIGlzU3RyZWFtaW5nOiBib29sZWFuLFxuICBpc0xhc3RNZXNzYWdlOiBib29sZWFuIHwgdW5kZWZpbmVkLFxuICBzdWdnZXN0aW9uc0Rpc2FibGVkOiBib29sZWFuIHwgdW5kZWZpbmVkXG4pOiBib29sZWFuID0+IEJvb2xlYW4oaXNTdHJlYW1pbmcgfHwgIWlzTGFzdE1lc3NhZ2UgfHwgc3VnZ2VzdGlvbnNEaXNhYmxlZClcblxudHlwZSBQZW5kaW5nTXVsdGlwbGVDaG9pY2VNZXNzYWdlID0ge1xuICBpZDogc3RyaW5nXG4gIG1lc3NhZ2U/OiBzdHJpbmdcbiAgcm9sZT86IENoYXRIaXN0b3J5Um9sZVxuICB1c2VyOiB7IGlkOiBzdHJpbmcgfVxuICBpc0Vycm9yPzogYm9vbGVhblxuICBpc0Zyb250ZW5kQ2FuY2VsbGVkPzogYm9vbGVhblxuICBhcHByb3ZhbD86IHVua25vd25cbiAgbXVsdGlwbGVDaG9pY2U/OiBNdWx0aXBsZUNob2ljZSB8IG51bGxcbn1cblxuY29uc3QgTUFSS0RPV05fREVDT1JBVElPTiA9IC8oXFwqXFwqfF9ffGB8XiMrXFxzKnxeXFxzKig/OlstKl18XFxkK1suKV0pXFxzKykvZ21cblxuLyoqXG4gKiBMYSBwcmVndW50YSBlcyBsYSDDumx0aW1hIGzDrW5lYSBkZWwgbWVuc2FqZSBxdWUgdGVybWluYSBlbiBcIj9cIi4gRWwgYmFja2VuZCBtYW5kYSBsYSBwcm9zYSB5IGxhcyBvcGNpb25lc1xuICogcG9yIHNlcGFyYWRvLCBzaW4gbWFyY2FyIGN1w6FsIGVzIGxhIHByZWd1bnRhOyBzaSBubyBoYXkgbmluZ3VuYSwgZWwgdMOtdHVsbyBjYWUgYWwgdGV4dG8gZ2Vuw6lyaWNvLlxuICovXG5leHBvcnQgY29uc3QgZXh0cmFjdE11bHRpcGxlQ2hvaWNlUXVlc3Rpb24gPSAodGV4dDogc3RyaW5nIHwgdW5kZWZpbmVkKTogc3RyaW5nIHwgbnVsbCA9PiB7XG4gIGNvbnN0IGxpbmVzID0gKHRleHQgPz8gJycpXG4gICAgLnNwbGl0KCdcXG4nKVxuICAgIC5tYXAobGluZSA9PiBsaW5lLnJlcGxhY2UoTUFSS0RPV05fREVDT1JBVElPTiwgJycpLnRyaW0oKSlcbiAgICAuZmlsdGVyKEJvb2xlYW4pXG4gIGNvbnN0IHF1ZXN0aW9uID0gWy4uLmxpbmVzXS5yZXZlcnNlKCkuZmluZChsaW5lID0+IGxpbmUuZW5kc1dpdGgoJz8nKSlcbiAgcmV0dXJuIHF1ZXN0aW9uID8/IG51bGxcbn1cblxuLyoqIExhIGNhcmQgdml2ZSBzb2JyZSBlbCBpbnB1dDogc29sbyBhcGxpY2EgYWwgw7psdGltbyBtZW5zYWplLCBjdWFuZG8gdGVybWluw7MgZGUgbGxlZ2FyIHkgbmFkaWUgbGEgY2VycsOzLiAqL1xuZXhwb3J0IGNvbnN0IHJlc29sdmVQZW5kaW5nTXVsdGlwbGVDaG9pY2UgPSAocGFyYW1zOiB7XG4gIG1lc3NhZ2VzOiBQZW5kaW5nTXVsdGlwbGVDaG9pY2VNZXNzYWdlW11cbiAgaXNTdHJlYW1pbmc6IGJvb2xlYW5cbiAgZGlzbWlzc2VkTWVzc2FnZUlkczogUmVjb3JkPHN0cmluZywgdHJ1ZT5cbn0pOiBQZW5kaW5nTXVsdGlwbGVDaG9pY2UgfCBudWxsID0+IHtcbiAgaWYgKHBhcmFtcy5pc1N0cmVhbWluZykgcmV0dXJuIG51bGxcbiAgY29uc3QgbGFzdCA9IHBhcmFtcy5tZXNzYWdlc1twYXJhbXMubWVzc2FnZXMubGVuZ3RoIC0gMV1cbiAgaWYgKCFsYXN0IHx8ICFpc0Fzc2lzdGFudENoYXRNZXNzYWdlKGxhc3Qucm9sZSwgbGFzdC51c2VyLmlkKSkgcmV0dXJuIG51bGxcbiAgaWYgKGxhc3QuaXNFcnJvciB8fCBsYXN0LmlzRnJvbnRlbmRDYW5jZWxsZWQgfHwgbGFzdC5hcHByb3ZhbCkgcmV0dXJuIG51bGxcbiAgaWYgKHBhcmFtcy5kaXNtaXNzZWRNZXNzYWdlSWRzW2xhc3QuaWRdKSByZXR1cm4gbnVsbFxuICBjb25zdCBvcHRpb25zID0gbGFzdC5tdWx0aXBsZUNob2ljZT8ub3B0aW9uc1xuICBpZiAoIUFycmF5LmlzQXJyYXkob3B0aW9ucykgfHwgb3B0aW9ucy5sZW5ndGggPCAyKSByZXR1cm4gbnVsbFxuICByZXR1cm4geyBtZXNzYWdlSWQ6IGxhc3QuaWQsIHF1ZXN0aW9uOiBleHRyYWN0TXVsdGlwbGVDaG9pY2VRdWVzdGlvbihsYXN0Lm1lc3NhZ2UpLCBvcHRpb25zIH1cbn1cblxuLyoqIExvIHF1ZSBlbGlnacOzIGVsIHVzdWFyaW8sIHRhbCBjb21vIGxvIG11ZXN0cmEgbGEgY2FyZCByZXN1ZWx0YS4gYG51bWJlcmAgZXMgbnVsbCBzaSBubyBlbGlnacOzIHVuYSBvcGNpw7NuLiAqL1xuZXhwb3J0IHR5cGUgUmVzb2x2ZWRNdWx0aXBsZUNob2ljZUFuc3dlciA9IHtcbiAgbnVtYmVyOiBudW1iZXIgfCBudWxsXG4gIHRleHQ6IHN0cmluZ1xuICBkZXNjcmlwdGlvbj86IHN0cmluZyB8IG51bGxcbiAgc2tpcHBlZD86IGJvb2xlYW5cbn1cblxudHlwZSBBbnN3ZXJlZE11bHRpcGxlQ2hvaWNlTWVzc2FnZSA9IFBlbmRpbmdNdWx0aXBsZUNob2ljZU1lc3NhZ2UgJiB7XG4gIG11bHRpcGxlQ2hvaWNlQW5zd2VyPzogTXVsdGlwbGVDaG9pY2VBbnN3ZXIgfCBudWxsXG59XG5cbi8qKlxuICogVW5hIGNhcmQgcXVlZGEgcmVzdWVsdGEgY3VhbmRvIGVsIG1lbnNhamUgc2lndWllbnRlIGVzIGRlbCB1c3VhcmlvIHkgdmllbmUgbWFyY2FkbyBjb21vIHN1IHJlc3B1ZXN0YVxuICogKGxvIG1hcmNhIGVsIGZyb250IGFsIGVudmlhciB5IGxvIGRldnVlbHZlIGVsIGhpc3RvcmlhbCkuIEVzYSByZXNwdWVzdGEgc2UgZGlidWphIGRlbnRybyBkZSBsYSBjYXJkIGRlbFxuICogYXNpc3RlbnRlIHkgbGEgYnVyYnVqYSBkZWwgdXN1YXJpbyBubyBzZSBtdWVzdHJhLlxuICovXG5leHBvcnQgY29uc3QgcmVzb2x2ZUFuc3dlcmVkTXVsdGlwbGVDaG9pY2VzID0gKFxuICBtZXNzYWdlczogQW5zd2VyZWRNdWx0aXBsZUNob2ljZU1lc3NhZ2VbXVxuKToge1xuICBhbnN3ZXJzOiBSZWNvcmQ8c3RyaW5nLCBSZXNvbHZlZE11bHRpcGxlQ2hvaWNlQW5zd2VyPlxuICBoaWRkZW5NZXNzYWdlSWRzOiBSZWNvcmQ8c3RyaW5nLCB0cnVlPlxufSA9PiB7XG4gIGNvbnN0IGFuc3dlcnM6IFJlY29yZDxzdHJpbmcsIFJlc29sdmVkTXVsdGlwbGVDaG9pY2VBbnN3ZXI+ID0ge31cbiAgY29uc3QgaGlkZGVuTWVzc2FnZUlkczogUmVjb3JkPHN0cmluZywgdHJ1ZT4gPSB7fVxuICBtZXNzYWdlcy5mb3JFYWNoKChtZXNzYWdlLCBpbmRleCkgPT4ge1xuICAgIGNvbnN0IG9wdGlvbnMgPSBtZXNzYWdlLm11bHRpcGxlQ2hvaWNlPy5vcHRpb25zXG4gICAgY29uc3QgcmVwbHkgPSBtZXNzYWdlc1tpbmRleCArIDFdXG4gICAgaWYgKCFvcHRpb25zPy5sZW5ndGggfHwgIWlzQXNzaXN0YW50Q2hhdE1lc3NhZ2UobWVzc2FnZS5yb2xlLCBtZXNzYWdlLnVzZXIuaWQpKSByZXR1cm5cbiAgICBpZiAoIXJlcGx5Py5tdWx0aXBsZUNob2ljZUFuc3dlciB8fCBpc0Fzc2lzdGFudENoYXRNZXNzYWdlKHJlcGx5LnJvbGUsIHJlcGx5LnVzZXIuaWQpKSByZXR1cm5cbiAgICBjb25zdCB7IGtleSwgc2tpcHBlZCB9ID0gcmVwbHkubXVsdGlwbGVDaG9pY2VBbnN3ZXJcbiAgICBjb25zdCBvcHRpb25JbmRleCA9IGtleSA9PSBudWxsID8gLTEgOiBvcHRpb25zLmZpbmRJbmRleChvcHRpb24gPT4gb3B0aW9uLmtleSA9PT0ga2V5KVxuICAgIGNvbnN0IG9wdGlvbiA9IG9wdGlvbnNbb3B0aW9uSW5kZXhdXG4gICAgaWYgKHNraXBwZWQpIGFuc3dlcnNbbWVzc2FnZS5pZF0gPSB7IG51bWJlcjogbnVsbCwgdGV4dDogJycsIHNraXBwZWQ6IHRydWUgfVxuICAgIGVsc2UgaWYgKG9wdGlvbilcbiAgICAgIGFuc3dlcnNbbWVzc2FnZS5pZF0gPSB7IG51bWJlcjogb3B0aW9uSW5kZXggKyAxLCB0ZXh0OiBvcHRpb24udGV4dCwgZGVzY3JpcHRpb246IG9wdGlvbi5kZXNjcmlwdGlvbiB9XG4gICAgZWxzZSBhbnN3ZXJzW21lc3NhZ2UuaWRdID0geyBudW1iZXI6IG51bGwsIHRleHQ6IHJlcGx5Lm1lc3NhZ2U/LnRyaW0oKSA/PyAnJyB9XG4gICAgaGlkZGVuTWVzc2FnZUlkc1tyZXBseS5pZF0gPSB0cnVlXG4gIH0pXG4gIHJldHVybiB7IGFuc3dlcnMsIGhpZGRlbk1lc3NhZ2VJZHMgfVxufVxuXG4vKiogU2kgbGEgw7psdGltYSBwcmVndW50YSBlcyB1bmEgcmVzcHVlc3RhIGRlIGNhcmQgKG9jdWx0YSksIGVsIHR1cm5vIHNlIGFuY2xhIGVuIGxhIGNhcmQgcmVzdWVsdGEuICovXG5leHBvcnQgY29uc3QgcmVzb2x2ZVR1cm5BbmNob3JJZCA9IChcbiAgbWVzc2FnZXM6IHsgaWQ6IHN0cmluZyB9W10sXG4gIHF1ZXN0aW9uSWQ6IHN0cmluZyB8IG51bGwsXG4gIGhpZGRlbk1lc3NhZ2VJZHM6IFJlY29yZDxzdHJpbmcsIHRydWU+XG4pOiBzdHJpbmcgfCBudWxsID0+IHtcbiAgaWYgKCFxdWVzdGlvbklkIHx8ICFoaWRkZW5NZXNzYWdlSWRzW3F1ZXN0aW9uSWRdKSByZXR1cm4gcXVlc3Rpb25JZFxuICBjb25zdCBpbmRleCA9IG1lc3NhZ2VzLmZpbmRJbmRleChtZXNzYWdlID0+IG1lc3NhZ2UuaWQgPT09IHF1ZXN0aW9uSWQpXG4gIHJldHVybiBpbmRleCA+IDAgPyBtZXNzYWdlc1tpbmRleCAtIDFdLmlkIDogcXVlc3Rpb25JZFxufVxuXG5leHBvcnQgY29uc3QgaXNTYW1lUGVuZGluZ011bHRpcGxlQ2hvaWNlID0gKFxuICBhOiBQZW5kaW5nTXVsdGlwbGVDaG9pY2UgfCBudWxsLFxuICBiOiBQZW5kaW5nTXVsdGlwbGVDaG9pY2UgfCBudWxsXG4pOiBib29sZWFuID0+IGE/Lm1lc3NhZ2VJZCA9PT0gYj8ubWVzc2FnZUlkICYmIGE/LnF1ZXN0aW9uID09PSBiPy5xdWVzdGlvbiAmJiBhPy5vcHRpb25zID09PSBiPy5vcHRpb25zXG5cbmV4cG9ydCBjb25zdCBzaG91bGRSZW5kZXJDcmVhdGVBZ2VudEFjdGlvbnMgPSAocGFyYW1zOiB7XG4gIGlzQXNzaXN0YW50OiBib29sZWFuXG4gIGlzRXJyb3I/OiBib29sZWFuXG4gIGlzRnJvbnRlbmRDYW5jZWxsZWQ/OiBib29sZWFuXG4gIGFwcHJvdmFsPzogdW5rbm93blxuICBhZ2VudElkOiBzdHJpbmcgfCB1bmRlZmluZWRcbn0pOiBib29sZWFuID0+XG4gIHBhcmFtcy5pc0Fzc2lzdGFudCAmJiAhcGFyYW1zLmlzRXJyb3IgJiYgIXBhcmFtcy5pc0Zyb250ZW5kQ2FuY2VsbGVkICYmICFwYXJhbXMuYXBwcm92YWwgJiYgQm9vbGVhbihwYXJhbXMuYWdlbnRJZClcblxuZXhwb3J0IGNvbnN0IHJlc29sdmVDaGF0TGlzdEl0ZW1TdHJlYW1pbmdGbGFncyA9IChwYXJhbXM6IHtcbiAgcm9sZTogQ2hhdEhpc3RvcnlSb2xlIHwgdW5kZWZpbmVkXG4gIHVzZXJJZDogc3RyaW5nXG4gIG1lc3NhZ2VJZDogc3RyaW5nXG4gIGlzTGFzdE1lc3NhZ2U6IGJvb2xlYW5cbiAgd2FpdGluZ1Jlc3BvbnNlOiBib29sZWFuXG4gIGlzV3JpdGluZzogYm9vbGVhblxufSk6IHsgaXNTdHJlYW1pbmdQbGFjZWhvbGRlcjogYm9vbGVhbjsgaXNTdHJlYW1pbmc6IGJvb2xlYW4gfSA9PiB7XG4gIGNvbnN0IGlzQXNzaXN0YW50ID0gaXNBc3Npc3RhbnRDaGF0TWVzc2FnZShwYXJhbXMucm9sZSwgcGFyYW1zLnVzZXJJZClcbiAgY29uc3QgaXNTdHJlYW1pbmdQbGFjZWhvbGRlciA9XG4gICAgaXNBc3Npc3RhbnQgJiYgcGFyYW1zLmlzTGFzdE1lc3NhZ2UgJiYgaXNTdHJlYW1pbmdQbGFjZWhvbGRlck1lc3NhZ2VJZChwYXJhbXMubWVzc2FnZUlkKVxuICByZXR1cm4ge1xuICAgIGlzU3RyZWFtaW5nUGxhY2Vob2xkZXIsXG4gICAgaXNTdHJlYW1pbmc6IGlzU3RyZWFtaW5nUGxhY2Vob2xkZXIgJiYgKHBhcmFtcy53YWl0aW5nUmVzcG9uc2UgfHwgcGFyYW1zLmlzV3JpdGluZyksXG4gIH1cbn1cblxudHlwZSBVc2VyTWVzc2FnZUF0dGFjaG1lbnRzU291cmNlID0ge1xuICBhdHRhY2htZW50cz86IEF0dGFjaG1lbnRGaWxlW11cbiAgc291cmNlcz86IHVua25vd25cbn1cblxuZXhwb3J0IGNvbnN0IGNvdW50VXNlck1lc3NhZ2VBdHRhY2htZW50cyA9IChtZXNzYWdlOiBVc2VyTWVzc2FnZUF0dGFjaG1lbnRzU291cmNlIHwgbnVsbCB8IHVuZGVmaW5lZCk6IG51bWJlciA9PiB7XG4gIGlmICghbWVzc2FnZSkgcmV0dXJuIDBcbiAgY29uc3QgYXR0YWNobWVudENvdW50ID0gQXJyYXkuaXNBcnJheShtZXNzYWdlLmF0dGFjaG1lbnRzKSA/IG1lc3NhZ2UuYXR0YWNobWVudHMubGVuZ3RoIDogMFxuICBjb25zdCBzb3VyY2VDb3VudCA9IEFycmF5LmlzQXJyYXkobWVzc2FnZS5zb3VyY2VzKSA/IG1lc3NhZ2Uuc291cmNlcy5sZW5ndGggOiAwXG4gIHJldHVybiBhdHRhY2htZW50Q291bnQgfHwgc291cmNlQ291bnRcbn1cblxuZXhwb3J0IGNvbnN0IHNob3VsZElnbm9yZVN1Z2dlc3Rpb25DbGljayA9IChzdWdnZXN0aW9uOiBzdHJpbmcsIGFscmVhZHlTZWxlY3RlZDogYm9vbGVhbik6IGJvb2xlYW4gPT5cbiAgIXN1Z2dlc3Rpb24/LnRyaW0oKSB8fCBhbHJlYWR5U2VsZWN0ZWRcblxuZXhwb3J0IGNvbnN0IGlzUmV0cnlTdWdnZXN0aW9uU2VsZWN0aW9uID0gKFxuICBpc0Vycm9yOiBib29sZWFuIHwgdW5kZWZpbmVkLFxuICBzdWdnZXN0aW9uOiBzdHJpbmcsXG4gIHJldHJ5TGFiZWw6IHN0cmluZ1xuKTogYm9vbGVhbiA9PiBCb29sZWFuKGlzRXJyb3IgJiYgc3VnZ2VzdGlvbiA9PT0gcmV0cnlMYWJlbClcblxuZXhwb3J0IGNvbnN0IHJlc29sdmVSZXRyeUF0dGFjaG1lbnRzRnJvbVVzZXJNZXNzYWdlID0gKHVzZXJNZXNzYWdlOiB7XG4gIGF0dGFjaG1lbnRzPzogQXR0YWNobWVudEZpbGVbXVxuICBzb3VyY2VzPzogdW5rbm93blxufSk6IEF0dGFjaG1lbnRGaWxlW10gPT4ge1xuICBpZiAoQXJyYXkuaXNBcnJheSh1c2VyTWVzc2FnZS5hdHRhY2htZW50cykpIHJldHVybiB1c2VyTWVzc2FnZS5hdHRhY2htZW50c1xuICBpZiAoQXJyYXkuaXNBcnJheSh1c2VyTWVzc2FnZS5zb3VyY2VzKSkgcmV0dXJuIHVzZXJNZXNzYWdlLnNvdXJjZXMgYXMgQXR0YWNobWVudEZpbGVbXVxuICByZXR1cm4gW11cbn1cblxuZXhwb3J0IGNvbnN0IHNob3VsZE9wZW5NZXNzYWdlT3B0aW9uID0gKHNlbGVjdGVkT3B0aW9uOiB1bmtub3duKTogYm9vbGVhbiA9PiAhc2VsZWN0ZWRPcHRpb25cblxuZXhwb3J0IGNvbnN0IHJlc29sdmVBdHRhY2htZW50RG93bmxvYWRCbG9iU3RyYXRlZ3kgPSAoXG4gIGZpbGVVcmw6IHN0cmluZyB8IHVuZGVmaW5lZCxcbiAgZmlsZTogdW5rbm93blxuKTogJ3JlbW90ZS11cmwnIHwgJ2xvY2FsLWZpbGUnIHwgbnVsbCA9PiB7XG4gIGlmIChmaWxlVXJsKSByZXR1cm4gJ3JlbW90ZS11cmwnXG4gIGlmIChmaWxlIGluc3RhbmNlb2YgRmlsZSkgcmV0dXJuICdsb2NhbC1maWxlJ1xuICByZXR1cm4gbnVsbFxufVxuXG5leHBvcnQgY29uc3QgZXh0cmFjdEZlZWRiYWNrU2Vzc2lvbklkID0gKG1lc3NhZ2VJZDogc3RyaW5nKTogc3RyaW5nID0+XG4gIG1lc3NhZ2VJZFxuICAgIC5zcGxpdCgnLScpXG4gICAgLmZpbHRlcihxdWVzdGlvbklkID0+IHF1ZXN0aW9uSWQgIT09ICdhbnN3ZXInKVxuICAgIC5qb2luKCctJylcblxuY29uc3QgQVVESU9fRVhURU5TSU9OUyA9IFsnLmZsYWMnLCAnLm00YScsICcubXAzJywgJy5tcDQnLCAnLm9nYScsICcub2dnJywgJy53YXYnLCAnLndlYm0nXSBhcyBjb25zdFxuY29uc3QgQVVESU9fVFlQRVMgPSBbJ2ZsYWMnLCAnbTRhJywgJ21wMycsICdtcDQnLCAnb2dhJywgJ29nZycsICd3YXYnLCAnd2VibSddIGFzIGNvbnN0XG5cbmV4cG9ydCBjb25zdCBpc0F1ZGlvQXR0YWNobWVudCA9IChhdHRhY2htZW50OiBQaWNrPEF0dGFjaG1lbnRGaWxlLCAndHlwZScgfCAnbmFtZSc+KTogYm9vbGVhbiA9PiB7XG4gIGNvbnN0IGF0dGFjaG1lbnRUeXBlID0gYXR0YWNobWVudD8udHlwZT8udG9Mb3dlckNhc2UoKSB8fCAnJ1xuICBjb25zdCBhdHRhY2htZW50TmFtZSA9IGF0dGFjaG1lbnQ/Lm5hbWU/LnRvTG93ZXJDYXNlKCkgfHwgJydcblxuICByZXR1cm4gKFxuICAgIGF0dGFjaG1lbnRUeXBlLnN0YXJ0c1dpdGgoJ2F1ZGlvLycpIHx8XG4gICAgQVVESU9fVFlQRVMuaW5jbHVkZXMoYXR0YWNobWVudFR5cGUgYXMgKHR5cGVvZiBBVURJT19UWVBFUylbbnVtYmVyXSkgfHxcbiAgICBBVURJT19FWFRFTlNJT05TLnNvbWUoZXh0ID0+IGF0dGFjaG1lbnROYW1lLmVuZHNXaXRoKGV4dCkpXG4gIClcbn1cblxuZXhwb3J0IGNvbnN0IGNhbk9wZW5BdHRhY2htZW50UHJldmlldyA9IChhdHRhY2htZW50OiBBdHRhY2htZW50RmlsZSk6IGJvb2xlYW4gPT5cbiAgYXR0YWNobWVudC5maWxlIGluc3RhbmNlb2YgRmlsZSB8fFxuICBhdHRhY2htZW50Lm9yaWdpbmFsRmlsZSBpbnN0YW5jZW9mIEZpbGUgfHxcbiAgQm9vbGVhbihhdHRhY2htZW50LnVybF90aHVtYm5haWwgfHwgYXR0YWNobWVudC51cmxfb3JpZ2luYWwgfHwgYXR0YWNobWVudC51cmxfZmlsZSlcblxuZXhwb3J0IGNvbnN0IGZpbmRMYXN0UXVlc3Rpb25JZCA9IChtZXNzYWdlczogQXJyYXk8eyBpZD86IHN0cmluZyB9Pik6IHN0cmluZyB8IG51bGwgPT4ge1xuICBmb3IgKGxldCBpbmRleCA9IG1lc3NhZ2VzLmxlbmd0aCAtIDE7IGluZGV4ID49IDA7IGluZGV4IC09IDEpIHtcbiAgICBjb25zdCBtZXNzYWdlSWQgPSBtZXNzYWdlc1tpbmRleF0/LmlkXG4gICAgaWYgKG1lc3NhZ2VJZD8uc3RhcnRzV2l0aCgncXVlc3Rpb24tJykpIHtcbiAgICAgIHJldHVybiBtZXNzYWdlSWRcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG51bGxcbn1cblxuZXhwb3J0IGNvbnN0IGNvbXB1dGVSZXNlcnZlZFR1cm5TcGFjZSA9IChjbGllbnRIZWlnaHQ6IG51bWJlciwgdHVybkhlaWdodDogbnVtYmVyLCB2aWV3cG9ydEhlaWdodDogbnVtYmVyKTogbnVtYmVyID0+IHtcbiAgY29uc3Qgb2Zmc2V0ID0gdHVybkFuY2hvck9mZnNldCh2aWV3cG9ydEhlaWdodClcbiAgcmV0dXJuIE1hdGgubWF4KDAsIGNsaWVudEhlaWdodCAtIHR1cm5IZWlnaHQgLSBvZmZzZXQpXG59XG5cbmV4cG9ydCBjb25zdCByZXNvbHZlTWVzc2FnZUF0dGFjaG1lbnRzID0gKFxuICBhdHRhY2htZW50czogQXR0YWNobWVudEZpbGVbXSB8IHVuZGVmaW5lZCxcbiAgaXNBc3Npc3RhbnQ6IGJvb2xlYW4sXG4gIHNvdXJjZXM6IHVua25vd25cbik6IEF0dGFjaG1lbnRGaWxlW10gPT4ge1xuICBpZiAoYXR0YWNobWVudHMgJiYgYXR0YWNobWVudHMubGVuZ3RoID4gMCkge1xuICAgIHJldHVybiBhdHRhY2htZW50c1xuICB9XG4gIGlmICghaXNBc3Npc3RhbnQgJiYgQXJyYXkuaXNBcnJheShzb3VyY2VzKSkge1xuICAgIHJldHVybiBzb3VyY2VzIGFzIEF0dGFjaG1lbnRGaWxlW11cbiAgfVxuICByZXR1cm4gW11cbn1cblxuZXhwb3J0IGNvbnN0IHJlc29sdmVBdHRhY2htZW50RG93bmxvYWRGaWxlTmFtZSA9IChhdHRhY2htZW50OiBQaWNrPEF0dGFjaG1lbnRGaWxlLCAnbmFtZScgfCAndHlwZSc+KTogc3RyaW5nID0+IHtcbiAgY29uc3QgZXh0ZW5zaW9uID0gYXR0YWNobWVudC5uYW1lLmluY2x1ZGVzKCcuJykgPyAnJyA6IGAuJHthdHRhY2htZW50LnR5cGV9YFxuICByZXR1cm4gYCR7YXR0YWNobWVudC5uYW1lfSR7ZXh0ZW5zaW9ufWBcbn1cblxuZXhwb3J0IGNvbnN0IHJlc29sdmVBdHRhY2htZW50RG93bmxvYWRVcmwgPSAoXG4gIGF0dGFjaG1lbnQ6IFBpY2s8QXR0YWNobWVudEZpbGUsICd1cmxfb3JpZ2luYWwnIHwgJ3VybF9maWxlJyB8ICd1cmxfdGh1bWJuYWlsJz5cbik6IHN0cmluZyB8IHVuZGVmaW5lZCA9PiBhdHRhY2htZW50LnVybF9vcmlnaW5hbCB8fCBhdHRhY2htZW50LnVybF9maWxlIHx8IGF0dGFjaG1lbnQudXJsX3RodW1ibmFpbFxuXG5leHBvcnQgY29uc3Qgc2hvdWxkU2tpcEVtcHR5Q2hhdExpc3RNZXNzYWdlID0gKHBhcmFtczoge1xuICBpc1N0cmVhbWluZ1BsYWNlaG9sZGVyOiBib29sZWFuXG4gIGlzU3RyZWFtaW5nOiBib29sZWFuXG4gIGF0dGFjaG1lbnRDb3VudDogbnVtYmVyXG4gIHNvdXJjZUNvdW50OiBudW1iZXJcbiAgbWVzc2FnZVRleHQ6IHN0cmluZ1xuICBwcm9qZWN0TmFtZT86IHN0cmluZ1xuICBoYXNBcHByb3ZhbDogYm9vbGVhblxuICBoYXNNdWx0aXBsZUNob2ljZT86IGJvb2xlYW5cbn0pOiBib29sZWFuID0+IHtcbiAgaWYgKHBhcmFtcy5pc1N0cmVhbWluZ1BsYWNlaG9sZGVyIHx8IHBhcmFtcy5pc1N0cmVhbWluZykgcmV0dXJuIGZhbHNlXG4gIGlmIChwYXJhbXMuYXR0YWNobWVudENvdW50ID4gMCB8fCBwYXJhbXMuc291cmNlQ291bnQgPiAwKSByZXR1cm4gZmFsc2VcbiAgaWYgKHBhcmFtcy5tZXNzYWdlVGV4dCkgcmV0dXJuIGZhbHNlXG4gIGlmIChwYXJhbXMucHJvamVjdE5hbWUpIHJldHVybiBmYWxzZVxuICBpZiAocGFyYW1zLmhhc0FwcHJvdmFsKSByZXR1cm4gZmFsc2VcbiAgaWYgKHBhcmFtcy5oYXNNdWx0aXBsZUNob2ljZSkgcmV0dXJuIGZhbHNlXG4gIHJldHVybiB0cnVlXG59XG5cbmV4cG9ydCBjb25zdCByZXNvbHZlRGlzYWJsZUZlZWRiYWNrRnJvbVdhc0hlbHBmdWwgPSAod2FzSGVscGZ1bDogYm9vbGVhbiB8IG51bGwgfCB1bmRlZmluZWQpOiBGZWVkYmFjayB8IG51bGwgPT4ge1xuICBpZiAod2FzSGVscGZ1bCA9PT0gdW5kZWZpbmVkIHx8IHdhc0hlbHBmdWwgPT09IG51bGwpIHJldHVybiBudWxsXG4gIHJldHVybiB3YXNIZWxwZnVsID8gRmVlZGJhY2suVEhVTUJTX1VQIDogRmVlZGJhY2suVEhVTUJTX0RPV05cbn1cblxuZXhwb3J0IGNvbnN0IGNhblJldHJ5QXNzaXN0YW50TWVzc2FnZSA9IChwYXJhbXM6IHtcbiAgaGFzVXNlck1lc3NhZ2VGb3JSZXRyeTogYm9vbGVhblxuICBpc1N0cmVhbWluZzogYm9vbGVhblxuICBpc0Vycm9yOiBib29sZWFuXG4gIGhhc0FwcHJvdmFsOiBib29sZWFuXG4gIGlzRnJvbnRlbmRDYW5jZWxsZWQ/OiBib29sZWFuXG4gIGlzQ2FuY2VsbGVkPzogYm9vbGVhblxuICB0dXJuSWQ6IHN0cmluZyB8IG51bGxcbn0pOiBib29sZWFuID0+IHtcbiAgaWYgKCFwYXJhbXMuaGFzVXNlck1lc3NhZ2VGb3JSZXRyeSB8fCBwYXJhbXMuaXNTdHJlYW1pbmcgfHwgcGFyYW1zLmlzRXJyb3IgfHwgcGFyYW1zLmhhc0FwcHJvdmFsKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cbiAgcmV0dXJuIEJvb2xlYW4ocGFyYW1zLmlzRnJvbnRlbmRDYW5jZWxsZWQgfHwgKCFwYXJhbXMuaXNDYW5jZWxsZWQgJiYgcGFyYW1zLnR1cm5JZCkpXG59XG5cbmV4cG9ydCBjb25zdCBjb21wdXRlUmVtb3ZhYmxlVHVyblNwYWNlID0gKFxuICBzY3JvbGxIZWlnaHQ6IG51bWJlcixcbiAgY2xpZW50SGVpZ2h0OiBudW1iZXIsXG4gIHNjcm9sbFRvcDogbnVtYmVyLFxuICBjdXJyZW50U3BhY2VySGVpZ2h0OiBudW1iZXJcbik6IG51bWJlciA9PiB7XG4gIGlmIChjdXJyZW50U3BhY2VySGVpZ2h0IDw9IDApIHJldHVybiBjdXJyZW50U3BhY2VySGVpZ2h0XG4gIGNvbnN0IHJlbW92YWJsZSA9IE1hdGgubWF4KDAsIHNjcm9sbEhlaWdodCAtIGNsaWVudEhlaWdodCAtIHNjcm9sbFRvcClcbiAgcmV0dXJuIE1hdGgubWF4KDAsIGN1cnJlbnRTcGFjZXJIZWlnaHQgLSByZW1vdmFibGUpXG59XG5cbmV4cG9ydCB0eXBlIFNtb290aFN0cmVhbVdpbmRvd0ZsYWdzID0ge1xuICBzdHJlYW1BZGFwdD86IGJvb2xlYW5cbiAgc3RyZWFtQnVmZmVyTXM/OiBudW1iZXJcbiAgc3RyZWFtTGFnTXM/OiBudW1iZXJcbiAgc3RyZWFtTWluQnVmZmVyPzogbnVtYmVyXG4gIHN0cmVhbVdhcm11cE1zPzogbnVtYmVyXG59XG5cbmV4cG9ydCBjb25zdCByZWFkU21vb3RoU3RyZWFtV2luZG93RmxhZ3MgPSAoKTogU21vb3RoU3RyZWFtV2luZG93RmxhZ3MgPT4ge1xuICBpZiAodHlwZW9mIHdpbmRvdyA9PT0gJ3VuZGVmaW5lZCcpIHJldHVybiB7fVxuICByZXR1cm4gd2luZG93IGFzIHVua25vd24gYXMgU21vb3RoU3RyZWFtV2luZG93RmxhZ3Ncbn1cblxuZXhwb3J0IGNvbnN0IGJ1aWxkU21vb3RoU3RyZWFtVGV4dE9wdGlvbnMgPSAoXG4gIGZsYWdzOiBTbW9vdGhTdHJlYW1XaW5kb3dGbGFncyxcbiAgaXNTdHJlYW1pbmc6IGJvb2xlYW5cbik6IHtcbiAgZW5hYmxlZDogYm9vbGVhblxuICBtYXhDaGFyc1BlckZyYW1lOiBudW1iZXJcbiAgc25hcFRvV29yZEJvdW5kYXJ5OiBib29sZWFuXG4gIHRhcmdldExhZ01zPzogbnVtYmVyXG4gIGFkYXB0VG9CYWNrZW5kUmF0ZT86IGJvb2xlYW5cbiAgdGFyZ2V0QnVmZmVyTXM/OiBudW1iZXJcbiAgbWluQnVmZmVyQ2hhcnM/OiBudW1iZXJcbiAgd2FybXVwTXM/OiBudW1iZXJcbn0gPT4gKHtcbiAgZW5hYmxlZDogaXNTdHJlYW1pbmcsXG4gIG1heENoYXJzUGVyRnJhbWU6IDI0LFxuICBzbmFwVG9Xb3JkQm91bmRhcnk6IHRydWUsXG4gIC4uLihmbGFncy5zdHJlYW1MYWdNcyAhPSBudWxsICYmIHsgdGFyZ2V0TGFnTXM6IGZsYWdzLnN0cmVhbUxhZ01zIH0pLFxuICAuLi4oZmxhZ3Muc3RyZWFtQWRhcHQgIT0gbnVsbCAmJiB7IGFkYXB0VG9CYWNrZW5kUmF0ZTogZmxhZ3Muc3RyZWFtQWRhcHQgfSksXG4gIC4uLihmbGFncy5zdHJlYW1CdWZmZXJNcyAhPSBudWxsICYmIHsgdGFyZ2V0QnVmZmVyTXM6IGZsYWdzLnN0cmVhbUJ1ZmZlck1zIH0pLFxuICAuLi4oZmxhZ3Muc3RyZWFtTWluQnVmZmVyICE9IG51bGwgJiYgeyBtaW5CdWZmZXJDaGFyczogZmxhZ3Muc3RyZWFtTWluQnVmZmVyIH0pLFxuICAuLi4oZmxhZ3Muc3RyZWFtV2FybXVwTXMgIT0gbnVsbCAmJiB7IHdhcm11cE1zOiBmbGFncy5zdHJlYW1XYXJtdXBNcyB9KSxcbn0pXG5cbmV4cG9ydCBjb25zdCByZXNvbHZlU3RyZWFtaW5nUmF3VGV4dCA9IChpc1N0cmVhbWluZzogYm9vbGVhbiwgc3RyZWFtaW5nVGV4dDogc3RyaW5nLCBtZXNzYWdlOiBzdHJpbmcpOiBzdHJpbmcgPT5cbiAgaXNTdHJlYW1pbmcgPyBzdHJlYW1pbmdUZXh0IDogbWVzc2FnZVxuXG5leHBvcnQgY29uc3Qgc2hvdWxkUmVuZGVyTWVudGlvbklubGluZU5vZGVzID0gKGhhc01lbnRpb25zOiBib29sZWFuLCBtZW50aW9uTm9kZXM6IHVua25vd24pOiBib29sZWFuID0+XG4gIEJvb2xlYW4oaGFzTWVudGlvbnMgJiYgbWVudGlvbk5vZGVzKVxuXG5leHBvcnQgY29uc3QgcmVzb2x2ZUZlZWRiYWNrUHJvcHNGb3JDYW5jZWxsZWQgPSA8VFNvdXJjZXMsIFRIYW5kbGVyPihcbiAgaXNGcm9udGVuZENhbmNlbGxlZDogYm9vbGVhbiB8IHVuZGVmaW5lZCxcbiAgc291cmNlczogVFNvdXJjZXMsXG4gIGhhbmRsZUZlZWRiYWNrQ2xpY2s6IFRIYW5kbGVyXG4pOiB7IHNvdXJjZXM6IFRTb3VyY2VzIHwgdW5kZWZpbmVkOyBoYW5kbGVGZWVkYmFjazogVEhhbmRsZXIgfCB1bmRlZmluZWQgfSA9PiAoe1xuICBzb3VyY2VzOiBpc0Zyb250ZW5kQ2FuY2VsbGVkID8gdW5kZWZpbmVkIDogc291cmNlcyxcbiAgaGFuZGxlRmVlZGJhY2s6IGlzRnJvbnRlbmRDYW5jZWxsZWQgPyB1bmRlZmluZWQgOiBoYW5kbGVGZWVkYmFja0NsaWNrLFxufSlcblxuZXhwb3J0IGNvbnN0IHJlc29sdmVTdHJlYW1pbmdNZXNzYWdlSG9va0lkID0gKGlzU3RyZWFtaW5nOiBib29sZWFuLCBtZXNzYWdlSWQ6IHN0cmluZyk6IHN0cmluZyB8IG51bGwgPT5cbiAgaXNTdHJlYW1pbmcgPyBtZXNzYWdlSWQgOiBudWxsXG5cbmV4cG9ydCBjb25zdCBzaG91bGRJbml0aWFsaXplQ2hhdCA9IChhbHJlYWR5SW5pdGlhbGl6ZWQ6IGJvb2xlYW4pOiBib29sZWFuID0+ICFhbHJlYWR5SW5pdGlhbGl6ZWRcblxuZXhwb3J0IGNvbnN0IHNob3VsZENsZWFyTGFzdFJlc2VydmVkUXVlc3Rpb24gPSAobG9hZGluZ01lc3NhZ2VzOiBib29sZWFuKTogYm9vbGVhbiA9PiBsb2FkaW5nTWVzc2FnZXNcblxuZXhwb3J0IGNvbnN0IHNob3VsZFNjaGVkdWxlVHVyblNwYWNlUmVzZXJ2YXRpb24gPSAoXG4gIGxvYWRpbmdNZXNzYWdlczogYm9vbGVhbixcbiAgaXNMb2FkaW5nTW9yZU1lc3NhZ2VzOiBib29sZWFuLFxuICBxdWVzdGlvbklkOiBzdHJpbmcgfCBudWxsLFxuICBsYXN0UmVzZXJ2ZWRRdWVzdGlvbklkOiBzdHJpbmcgfCBudWxsXG4pOiBib29sZWFuID0+ICFsb2FkaW5nTWVzc2FnZXMgJiYgIWlzTG9hZGluZ01vcmVNZXNzYWdlcyAmJiBCb29sZWFuKHF1ZXN0aW9uSWQpICYmIHF1ZXN0aW9uSWQgIT09IGxhc3RSZXNlcnZlZFF1ZXN0aW9uSWRcblxuZXhwb3J0IGNvbnN0IHNob3VsZFNraXBNZXNzYWdlc1Njcm9sbEVmZmVjdCA9IChcbiAgaGFzQ29udGFpbmVyOiBib29sZWFuLFxuICBsb2FkaW5nTWVzc2FnZXM6IGJvb2xlYW4sXG4gIGlzTG9hZGluZ01vcmVNZXNzYWdlczogYm9vbGVhbixcbiAgaXNMb2FkaW5nTW9yZVJlZjogYm9vbGVhblxuKTogYm9vbGVhbiA9PiAhaGFzQ29udGFpbmVyIHx8IGxvYWRpbmdNZXNzYWdlcyB8fCBpc0xvYWRpbmdNb3JlTWVzc2FnZXMgfHwgaXNMb2FkaW5nTW9yZVJlZlxuXG5leHBvcnQgY29uc3QgcmVzb2x2ZUNvbnRhaW5lckF0Qm90dG9tID0gKFxuICBjb250YWluZXI6IHsgc2Nyb2xsSGVpZ2h0OiBudW1iZXI7IHNjcm9sbFRvcDogbnVtYmVyOyBjbGllbnRIZWlnaHQ6IG51bWJlciB9IHwgbnVsbCB8IHVuZGVmaW5lZFxuKTogYm9vbGVhbiA9PlxuICBjb250YWluZXIgPyBpc0NvbnRhaW5lckF0U2Nyb2xsQm90dG9tKGNvbnRhaW5lci5zY3JvbGxIZWlnaHQsIGNvbnRhaW5lci5zY3JvbGxUb3AsIGNvbnRhaW5lci5jbGllbnRIZWlnaHQpIDogZmFsc2VcblxuZXhwb3J0IGNvbnN0IHNob3VsZFJ1blNlc3Npb25DYWNoZVNjcm9sbFRvQm90dG9tID0gKFxuICBsb2FkaW5nTWVzc2FnZXM6IGJvb2xlYW4sXG4gIGluaXRpYWxDaGF0SWQ6IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQsXG4gIG1lc3NhZ2VzTGVuZ3RoOiBudW1iZXIsXG4gIGxhc3RTY3JvbGxlZFNlc3Npb25JZDogc3RyaW5nIHwgbnVsbFxuKTogYm9vbGVhbiA9PlxuICAhbG9hZGluZ01lc3NhZ2VzICYmIEJvb2xlYW4oaW5pdGlhbENoYXRJZCkgJiYgbWVzc2FnZXNMZW5ndGggPiAwICYmIGxhc3RTY3JvbGxlZFNlc3Npb25JZCAhPT0gaW5pdGlhbENoYXRJZFxuXG5leHBvcnQgY29uc3QgZGV0ZWN0SnVzdEZpbmlzaGVkTG9hZGluZ01lc3NhZ2VzID0gKHdhc0xvYWRpbmc6IGJvb2xlYW4sIGxvYWRpbmdNZXNzYWdlczogYm9vbGVhbik6IGJvb2xlYW4gPT5cbiAgd2FzTG9hZGluZyAmJiAhbG9hZGluZ01lc3NhZ2VzXG5cbmV4cG9ydCBjb25zdCBzaG91bGRTY3JvbGxUb0JvdHRvbUFmdGVyTG9hZCA9IChqdXN0RmluaXNoZWRMb2FkaW5nOiBib29sZWFuLCBtZXNzYWdlc0xlbmd0aDogbnVtYmVyKTogYm9vbGVhbiA9PlxuICBqdXN0RmluaXNoZWRMb2FkaW5nICYmIG1lc3NhZ2VzTGVuZ3RoID4gMFxuXG5leHBvcnQgY29uc3Qgc2hvdWxkVXBkYXRlU2Nyb2xsQWZmb3JkYW5jZXNPbkxvYWRFbmQgPSAobG9hZGluZ01lc3NhZ2VzOiBib29sZWFuKTogYm9vbGVhbiA9PiAhbG9hZGluZ01lc3NhZ2VzXG5cbmV4cG9ydCBjb25zdCBzaG91bGRDbGVhclNjcm9sbFJlc3RvcmVXaXRob3V0Q2hhdCA9IChpbml0aWFsQ2hhdElkOiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkKTogYm9vbGVhbiA9PiAhaW5pdGlhbENoYXRJZFxuXG5leHBvcnQgY29uc3QgcmVzb2x2ZVBlbmRpbmdTY3JvbGxUb3BGcm9tU2Vzc2lvbiA9IChcbiAgc2Vzc2lvbjogeyBzY3JvbGxTZXNzaW9uSWQ/OiBzdHJpbmc7IHNjcm9sbFRvcD86IG51bWJlciB9IHwgbnVsbCB8IHVuZGVmaW5lZCxcbiAgaW5pdGlhbENoYXRJZDogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZFxuKTogbnVtYmVyIHwgbnVsbCA9PiB7XG4gIGlmICghaW5pdGlhbENoYXRJZCB8fCAhc2Vzc2lvbikgcmV0dXJuIG51bGxcbiAgaWYgKHNlc3Npb24uc2Nyb2xsU2Vzc2lvbklkID09PSBpbml0aWFsQ2hhdElkICYmIHR5cGVvZiBzZXNzaW9uLnNjcm9sbFRvcCA9PT0gJ251bWJlcicgJiYgc2Vzc2lvbi5zY3JvbGxUb3AgPiAwKSB7XG4gICAgcmV0dXJuIHNlc3Npb24uc2Nyb2xsVG9wXG4gIH1cbiAgcmV0dXJuIG51bGxcbn1cblxuZXhwb3J0IGNvbnN0IHNob3VsZEFwcGx5UGVuZGluZ1Njcm9sbFJlc3RvcmUgPSAoXG4gIGxvYWRpbmdNZXNzYWdlczogYm9vbGVhbixcbiAgcGVuZGluZ1Njcm9sbFRvcDogbnVtYmVyIHwgbnVsbCB8IHVuZGVmaW5lZCxcbiAgaGFzQ29udGFpbmVyOiBib29sZWFuXG4pOiBib29sZWFuID0+ICFsb2FkaW5nTWVzc2FnZXMgJiYgcGVuZGluZ1Njcm9sbFRvcCAhPSBudWxsICYmIHBlbmRpbmdTY3JvbGxUb3AgPiAwICYmIGhhc0NvbnRhaW5lclxuXG5leHBvcnQgY29uc3Qgc2hvdWxkUmVzdG9yZVNjcm9sbE9uRXhwYW5kZWRDaGFuZ2UgPSAoXG4gIHByZXZpb3VzRXhwYW5kZWQ6IGJvb2xlYW4sXG4gIGV4cGFuZGVkOiBib29sZWFuLFxuICBoYXNDb250YWluZXI6IGJvb2xlYW5cbik6IGJvb2xlYW4gPT4gcHJldmlvdXNFeHBhbmRlZCAhPT0gZXhwYW5kZWQgJiYgaGFzQ29udGFpbmVyXG5cbmV4cG9ydCBjb25zdCByZXNvbHZlTWVzc2FnZUxpc3RJdGVtS2V5ID0gKG1lc3NhZ2VJZDogc3RyaW5nIHwgdW5kZWZpbmVkLCBpbmRleDogbnVtYmVyKTogc3RyaW5nID0+XG4gIG1lc3NhZ2VJZCA/PyBgbXNnLSR7aW5kZXh9YFxuXG5leHBvcnQgY29uc3QgcmVzb2x2ZUNyZWF0ZUFnZW50QWN0aW9uc0FnZW50SWQgPSAoXG4gIGZvbGxvd1VwOiB7IGFnZW50SWQ6IHN0cmluZyB9IHwgbnVsbCB8IHVuZGVmaW5lZFxuKTogc3RyaW5nIHwgdW5kZWZpbmVkID0+IGZvbGxvd1VwPy5hZ2VudElkXG5cbmV4cG9ydCBjb25zdCByZXNvbHZlU3RyZWFtaW5nVGV4dEhvb2tJZCA9IChcbiAgaXNTdHJlYW1pbmc6IGJvb2xlYW4sXG4gIGlzU3RyZWFtaW5nUGxhY2Vob2xkZXI6IGJvb2xlYW4sXG4gIG1lc3NhZ2VJZDogc3RyaW5nXG4pOiBzdHJpbmcgfCBudWxsID0+IChpc1N0cmVhbWluZyB8fCBpc1N0cmVhbWluZ1BsYWNlaG9sZGVyID8gbWVzc2FnZUlkIDogbnVsbClcblxuZXhwb3J0IGNvbnN0IHJlc29sdmVSZWFzb25pbmdUcmFjZUhvb2tJZCA9IChpc0Fzc2lzdGFudDogYm9vbGVhbiwgaXNBY3RpdmVTdHJlYW1pbmc6IGJvb2xlYW4sIGlkOiBzdHJpbmcpOiBzdHJpbmcgPT5cbiAgaXNBc3Npc3RhbnQgJiYgaXNBY3RpdmVTdHJlYW1pbmcgPyBpZCA6ICcnXG5cbmV4cG9ydCBjb25zdCByZXNvbHZlU2Nyb2xsT25QYXJlbnRNb2RlID0gKGV4cGFuZGVkOiBib29sZWFuIHwgdW5kZWZpbmVkKTogYm9vbGVhbiA9PiBCb29sZWFuKGV4cGFuZGVkKVxuXG5leHBvcnQgY29uc3QgcmVzb2x2ZUxhc3RVc2VyTWVzc2FnZUZvckF0dGFjaG1lbnRzID0gPFQgZXh0ZW5kcyB7IHJvbGU/OiBDaGF0SGlzdG9yeVJvbGU7IHVzZXI6IHsgaWQ6IHN0cmluZyB9IH0+KFxuICBtZXNzYWdlczogVFtdLFxuICBhdXRoVXNlcklkOiBzdHJpbmdcbik6IFQgfCB1bmRlZmluZWQgPT5cbiAgbWVzc2FnZXMuZmlsdGVyKG1zZyA9PiBtc2cucm9sZSA9PT0gQ2hhdEhpc3RvcnlSb2xlLlVTRVIgfHwgbXNnLnVzZXIuaWQgPT09IGF1dGhVc2VySWQudG9TdHJpbmcoKSkuYXQoLTEpXG5cbmV4cG9ydCBjb25zdCByZXNvbHZlU3VnZ2VzdGlvbkFuYWx5dGljc0FnZW50VHlwZSA9IChcbiAgaXNNYXJrZXRwbGFjZUdsb2JhbEFnZW50OiBib29sZWFuLFxuICBhZ2VudFR5cGU6IHN0cmluZyB8IHVuZGVmaW5lZFxuKTogc3RyaW5nIHwgdW5kZWZpbmVkID0+IChpc01hcmtldHBsYWNlR2xvYmFsQWdlbnQgPyAnbWFya2V0cGxhY2UnIDogYWdlbnRUeXBlKVxuXG5leHBvcnQgdHlwZSBDaGF0TWVzc2FnZXNTY3JvbGxGcmFtZUlucHV0ID0ge1xuICBzY3JvbGxUb3A6IG51bWJlclxuICBzY3JvbGxIZWlnaHQ6IG51bWJlclxuICBjbGllbnRIZWlnaHQ6IG51bWJlclxuICBsYXN0U2Nyb2xsVG9wOiBudW1iZXJcbiAgc2Nyb2xsVGhyZXNob2xkOiBudW1iZXJcbiAgYW5jaG9yZWRUdXJuSWQ6IHN0cmluZyB8IG51bGxcbiAgaW5pdGlhbENoYXRJZDogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZFxufVxuXG5leHBvcnQgY29uc3QgcHJvY2Vzc0NoYXRNZXNzYWdlc1Njcm9sbEZyYW1lID0gKGlucHV0OiBDaGF0TWVzc2FnZXNTY3JvbGxGcmFtZUlucHV0KSA9PiB7XG4gIGNvbnN0IGlzU2Nyb2xsaW5nVXAgPSBpc1Njcm9sbGluZ1Vwd2FyZChpbnB1dC5zY3JvbGxUb3AsIGlucHV0Lmxhc3RTY3JvbGxUb3ApXG4gIGNvbnN0IGlzTmVhckJvdHRvbSA9IGlzTmVhclNjcm9sbEJvdHRvbShcbiAgICBpbnB1dC5zY3JvbGxIZWlnaHQsXG4gICAgaW5wdXQuc2Nyb2xsVG9wLFxuICAgIGlucHV0LmNsaWVudEhlaWdodCxcbiAgICBpbnB1dC5zY3JvbGxUaHJlc2hvbGRcbiAgKVxuICBjb25zdCBuZXh0U2Nyb2xsVGhyZXNob2xkID0gcmVzb2x2ZVNjcm9sbE5lYXJCb3R0b21UaHJlc2hvbGQoaW5wdXQuc2Nyb2xsVGhyZXNob2xkLCBpc1Njcm9sbGluZ1VwLCBpc05lYXJCb3R0b20pXG5cbiAgcmV0dXJuIHtcbiAgICBuZXh0U2Nyb2xsVGhyZXNob2xkLFxuICAgIGxhc3RTY3JvbGxUb3A6IGlucHV0LnNjcm9sbFRvcCxcbiAgICBzaG91bGREcmFpblR1cm5TcGFjZTogc2hvdWxkRHJhaW5UdXJuU3BhY2VPblNjcm9sbChpbnB1dC5hbmNob3JlZFR1cm5JZCksXG4gICAgc2hvdWxkU2NoZWR1bGVTY3JvbGxQZXJzaXN0OiBzaG91bGRQZXJzaXN0TWFpYVBhbmVsU2Nyb2xsKGlucHV0LmluaXRpYWxDaGF0SWQsIGlucHV0LnNjcm9sbFRvcCksXG4gICAgc2hvdWxkTm90aWZ5U2Nyb2xsVG9Cb3R0b206IGlzTmVhckJvdHRvbSxcbiAgfVxufVxuXG5leHBvcnQgY29uc3QgY29tcHV0ZU1lYXN1cmVUdXJuTGF5b3V0ID0gKHBhcmFtczoge1xuICBjb250YWluZXJUb3A6IG51bWJlclxuICBxdWVzdGlvblRvcDogbnVtYmVyXG4gIGNvbnRlbnRCb3R0b206IG51bWJlclxuICBzY3JvbGxUb3A6IG51bWJlclxufSk6IHsgcXVlc3Rpb25Ub3A6IG51bWJlcjsgdHVybkhlaWdodDogbnVtYmVyIH0gPT4ge1xuICBjb25zdCBxdWVzdGlvblNjcm9sbFRvcCA9IHBhcmFtcy5xdWVzdGlvblRvcCAtIHBhcmFtcy5jb250YWluZXJUb3AgKyBwYXJhbXMuc2Nyb2xsVG9wXG4gIGNvbnN0IGNvbnRlbnRCb3R0b21TY3JvbGwgPSBwYXJhbXMuY29udGVudEJvdHRvbSAtIHBhcmFtcy5jb250YWluZXJUb3AgKyBwYXJhbXMuc2Nyb2xsVG9wXG4gIHJldHVybiB7IHF1ZXN0aW9uVG9wOiBxdWVzdGlvblNjcm9sbFRvcCwgdHVybkhlaWdodDogY29udGVudEJvdHRvbVNjcm9sbCAtIHF1ZXN0aW9uU2Nyb2xsVG9wIH1cbn1cblxuZXhwb3J0IHR5cGUgUmVzZXJ2ZVR1cm5TcGFjZVBsYW4gPVxuICB7IGtpbmQ6ICdza2lwLXJlc2VydmF0aW9uJyB9IHwgeyBraW5kOiAncmVzZXJ2ZSc7IHNwYWNlckhlaWdodDogbnVtYmVyOyB0YXJnZXRTY3JvbGxUb3A6IG51bWJlciB9XG5cbmV4cG9ydCBjb25zdCByZXNvbHZlUmVzZXJ2ZVR1cm5TcGFjZVBsYW4gPSAocGFyYW1zOiB7XG4gIGN1cnJlbnRTY3JvbGxUb3A6IG51bWJlclxuICB0YXJnZXRTY3JvbGxUb3A6IG51bWJlclxuICBjbGllbnRIZWlnaHQ6IG51bWJlclxuICB0dXJuSGVpZ2h0OiBudW1iZXJcbn0pOiBSZXNlcnZlVHVyblNwYWNlUGxhbiA9PiB7XG4gIGlmIChzaG91bGRTa2lwVHVyblNwYWNlUmVzZXJ2YXRpb24ocGFyYW1zLmN1cnJlbnRTY3JvbGxUb3AsIHBhcmFtcy50YXJnZXRTY3JvbGxUb3ApKSB7XG4gICAgcmV0dXJuIHsga2luZDogJ3NraXAtcmVzZXJ2YXRpb24nIH1cbiAgfVxuICByZXR1cm4ge1xuICAgIGtpbmQ6ICdyZXNlcnZlJyxcbiAgICBzcGFjZXJIZWlnaHQ6IGNvbXB1dGVSZXNlcnZlZFR1cm5TcGFjZShwYXJhbXMuY2xpZW50SGVpZ2h0LCBwYXJhbXMudHVybkhlaWdodCwgcGFyYW1zLmNsaWVudEhlaWdodCksXG4gICAgdGFyZ2V0U2Nyb2xsVG9wOiBwYXJhbXMudGFyZ2V0U2Nyb2xsVG9wLFxuICB9XG59XG5cbmV4cG9ydCBjb25zdCByZXNvbHZlU2Nyb2xsVG9Cb3R0b21UYXJnZXRUb3AgPSAoc2Nyb2xsSGVpZ2h0OiBudW1iZXIsIGNsaWVudEhlaWdodDogbnVtYmVyKTogbnVtYmVyID0+XG4gIHNjcm9sbEhlaWdodCAtIGNsaWVudEhlaWdodFxuIl0sIm1hcHBpbmdzIjoiOzs7O0FBQ0EsU0FBU0EsUUFBUSxRQUFRLG9DQUFvQztBQUM3RCxTQUFTQyxlQUFlLFFBQThDLHFCQUFxQjtBQUUzRixTQUFTQywrQkFBK0IsUUFBUSx1Q0FBdUM7QUFFdkYsT0FBTyxJQUFNQyxnQkFBZ0IsR0FBRyxTQUFuQkEsZ0JBQWdCQSxDQUFJQyxjQUFzQjtFQUFBLE9BQWFDLElBQUksQ0FBQ0MsR0FBRyxDQUFDRixjQUFjLEdBQUcsSUFBSSxFQUFFLEdBQUcsQ0FBQztBQUFBO0FBRXhHLE9BQU8sSUFBTUcsdUJBQXVCLEdBQUcsR0FBRztBQUMxQyxPQUFPLElBQU1DLDJCQUEyQixHQUFHLEdBQUc7QUFDOUMsT0FBTyxJQUFNQyw0QkFBNEIsR0FBRyxJQUFJO0FBRWhELE9BQU8sSUFBTUMsMkJBQTJCLEdBQUcsU0FBOUJBLDJCQUEyQkEsQ0FBSUMsUUFBZ0I7RUFBQSxPQUMxREosdUJBQXVCLEdBQ3ZCLENBQUNDLDJCQUEyQixHQUFHRCx1QkFBdUIsSUFDcERGLElBQUksQ0FBQ0MsR0FBRyxDQUFDLENBQUMsRUFBRUQsSUFBSSxDQUFDTyxHQUFHLENBQUNELFFBQVEsQ0FBQyxHQUFHRiw0QkFBNEIsQ0FBQztBQUFBO0FBRWxFLE9BQU8sSUFBTUkseUJBQXlCLEdBQUcsU0FBNUJBLHlCQUF5QkEsQ0FDcENDLFlBQW9CLEVBQ3BCQyxZQUFvQixFQUNwQkMsU0FBaUIsRUFDakJDLFlBQW9CO0VBQUEsT0FDVEgsWUFBWSxHQUFHQyxZQUFZLEdBQUdDLFNBQVMsR0FBR0MsWUFBWTtBQUFBO0FBRW5FLE9BQU8sSUFBTUMsd0JBQXdCLEdBQUcsU0FBM0JBLHdCQUF3QkEsQ0FBSUMsa0JBQTBCO0VBQUEsSUFBRUMsU0FBUyxHQUFBQyxTQUFBLENBQUFDLE1BQUEsUUFBQUQsU0FBQSxRQUFBRSxTQUFBLEdBQUFGLFNBQUEs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
|