@projectcor/maia-components 2.48.1-1 → 2.49.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/README.md +2 -0
- package/lib/App.js +19 -44
- package/lib/components/atoms/ApprovalBox/ApprovalBox.helpers.js +37 -0
- package/lib/components/atoms/ApprovalBox/ApprovalBox.js +3 -37
- package/lib/components/atoms/AttachmentCard/AttachmentCardAudio.helpers.js +53 -1
- package/lib/components/atoms/AttachmentCard/AttachmentCardAudio.js +28 -52
- package/lib/components/atoms/AttachmentPreviewModal/AttachmentPreviewModal.helpers.js +37 -1
- package/lib/components/atoms/AttachmentPreviewModal/AttachmentPreviewModal.js +33 -66
- package/lib/components/atoms/AttachmentPreviewModal/PptPreview.helpers.js +227 -1
- package/lib/components/atoms/AttachmentPreviewModal/PptPreview.js +53 -177
- package/lib/components/atoms/ClientSelector/ClientSelector.helpers.js +26 -0
- package/lib/components/atoms/ClientSelector/ClientSelector.js +12 -21
- package/lib/components/atoms/ContextMentionEditor/ContextMentionEditor.helpers.js +29 -1
- package/lib/components/atoms/ContextMentionEditor/ContextMentionEditor.js +12 -28
- package/lib/components/atoms/FrequentlyUsedActions/FrequentlyUsedActions.js +1 -3
- package/lib/components/atoms/FrequentlyUsedActions/FrequentlyUsedActions.styles.js +7 -19
- package/lib/components/atoms/MAIAInput/MAIAInput.attachments.helpers.js +74 -0
- package/lib/components/atoms/MAIAInput/MAIAInput.helpers.js +173 -1
- package/lib/components/atoms/MAIAInput/MAIAInput.js +126 -171
- package/lib/components/atoms/MAIAInput/MAIAInputEditor.helpers.js +47 -1
- package/lib/components/atoms/MAIAInput/MAIAInputEditor.js +40 -61
- package/lib/components/atoms/ReasoningBlock/ReasoningBlock.js +2 -7
- package/lib/components/atoms/ReasoningBlock/ReasoningBlock.styles.js +24 -41
- package/lib/components/atoms/ReasoningBlock/ReasoningSteps.js +10 -25
- package/lib/components/atoms/ReasoningBlock/ReasoningTimeline.js +43 -78
- package/lib/components/atoms/ReasoningBlock/groupParallelSteps.js +11 -9
- package/lib/components/atoms/ReasoningBlock/reasoningLiveNarration.js +15 -37
- package/lib/components/atoms/SlashCommandDropdown/SlashCommandDropdown.helpers.js +101 -0
- package/lib/components/atoms/SlashCommandDropdown/SlashCommandDropdown.js +21 -77
- package/lib/components/atoms/TextArea/TextArea.helpers.js +23 -0
- package/lib/components/atoms/TextArea/TextArea.js +11 -20
- package/lib/components/index.js +1 -2
- package/lib/components/molecules/AbmSection/AbmGeneralSection.helpers.js +30 -1
- package/lib/components/molecules/AbmSection/AbmGeneralSection.js +13 -18
- package/lib/components/molecules/AbmSection/AbmKnowledgeSection.helpers.js +48 -1
- package/lib/components/molecules/AbmSection/AbmKnowledgeSection.js +17 -26
- package/lib/components/molecules/ChatAIContent/ChatAIContent.js +3 -7
- package/lib/components/molecules/ChatAIHome/ChatAIHome.helpers.js +370 -0
- package/lib/components/molecules/ChatAIHome/ChatAIHome.js +266 -321
- package/lib/components/molecules/ChatAIHome/styles.js +78 -85
- package/lib/components/molecules/ChatAIMessages/ChatAIMessages.helpers.js +345 -1
- package/lib/components/molecules/ChatAIMessages/ChatAIMessages.js +201 -200
- package/lib/components/molecules/ChatAIMessages/newStyles.js +35 -32
- package/lib/components/molecules/ChatAIModal/ChatAIModal.helpers.js +373 -5
- package/lib/components/molecules/ChatAIModal/ChatAIModal.js +199 -271
- package/lib/components/molecules/ChatAIModal/ChatAIModal.styles.js +2 -2
- package/lib/components/molecules/ChatAIModal/components/ChatAiModalFooter/ChatAiModalFooter.js +153 -15
- package/lib/components/molecules/ChatAIModal/components/ChatAiModalFooter/ChatAiModalFooter.styles.js +26 -2
- package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.helpers.js +20 -1
- package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.js +87 -74
- package/lib/components/molecules/ChatAIMyAgents/ChatAIMyAgents.helpers.js +39 -0
- package/lib/components/molecules/ChatAIMyAgents/ChatAIMyAgents.js +30 -33
- package/lib/components/molecules/ChatAIMySkills/ChatAIMySkills.helpers.js +41 -0
- package/lib/components/molecules/ChatAIMySkills/ChatAIMySkills.js +9 -35
- package/lib/components/molecules/ChatFooter/ChatFooter.js +4 -10
- package/lib/components/molecules/Sidebar/Sidebar.helpers.js +43 -0
- package/lib/components/molecules/Sidebar/Sidebar.js +46 -61
- package/lib/components/organisms/AbmAgentModal/AbmAgentModal.helpers.js +314 -1
- package/lib/components/organisms/AbmAgentModal/AbmAgentModal.js +261 -480
- package/lib/components/organisms/AbmSkillModal/AbmSkillModal.helpers.js +37 -0
- package/lib/components/organisms/AbmSkillModal/AbmSkillModal.js +13 -25
- package/lib/constants/permissions/index.js +2 -2
- package/lib/constants/permissions/utils.js +1 -4
- package/lib/dev/DevReasoningTimeline.js +37 -68
- package/lib/dev/Providers.js +3 -5
- package/lib/hooks/useAgentModel/useCreateAgent.helpers.js +144 -0
- package/lib/hooks/useAgentModel/useCreateAgent.js +38 -102
- package/lib/hooks/useChatManager/useChatManager.helpers.js +550 -1
- package/lib/hooks/useChatManager/useChatManager.js +245 -429
- package/lib/hooks/useChatMessages/useChatMessages.helpers.js +257 -1
- package/lib/hooks/useChatMessages/useChatMessages.js +50 -206
- package/lib/hooks/useContextMentions.helpers.js +61 -1
- package/lib/hooks/useContextMentions.js +5 -62
- package/lib/hooks/useEntitySearch.helpers.js +49 -1
- package/lib/hooks/useEntitySearch.js +22 -53
- package/lib/hooks/useFrequentlyUsedActions.js +22 -60
- package/lib/hooks/useOrchestratorStream/useOrchestratorStream.helpers.js +86 -0
- package/lib/hooks/useOrchestratorStream/useOrchestratorStream.js +8 -82
- package/lib/index.js +2 -5
- package/lib/lang/br/index.js +1 -26
- package/lib/lang/en/index.js +1 -26
- package/lib/lang/es/index.js +1 -26
- package/lib/lang/fr/index.js +1 -26
- package/lib/services/maia/Actions/getFrequentlyUsedActions.js +1 -1
- package/lib/services/maia/Agents/getAgents.helpers.js +61 -1
- package/lib/services/maia/Agents/getAgents.js +31 -59
- package/lib/services/utils/mapChatMessages.helpers.js +223 -0
- package/lib/services/utils/mapChatMessages.js +25 -249
- package/lib/store/sessions/sessionStreamManager.helpers.js +134 -0
- package/lib/store/sessions/sessionStreamManager.js +213 -273
- package/lib/styles/cascade.js +3 -29
- package/lib/styles/transitions.js +1 -3
- package/lib/types/global.d.js +1 -1
- package/lib/utils/hoursPlannerQuickActionType.js +1 -74
- package/lib/utils/renderContextMentions.helpers.js +110 -0
- package/lib/utils/renderContextMentions.js +4 -110
- package/lib/utils/streamActivityMessages.helpers.js +222 -0
- package/lib/utils/streamActivityMessages.js +21 -251
- package/package.json +1 -1
- package/lib/components/atoms/ActionableButton.spec.js +0 -111
- package/lib/components/atoms/AgentActivityIndicator/AgentActivityIndicator.spec.js +0 -52
- package/lib/components/atoms/AgentActivityIndicator/AgentActivityIndicator.utils.spec.js +0 -11
- package/lib/components/atoms/ApprovalBox/ApprovalBox.spec.js +0 -135
- package/lib/components/atoms/AttachmentCard/AttachmentCard.spec.js +0 -123
- package/lib/components/atoms/AttachmentCard/AttachmentCardAudio.helpers.spec.js +0 -66
- package/lib/components/atoms/AttachmentCard/AttachmentCardAudio.spec.js +0 -211
- package/lib/components/atoms/AttachmentCard/AttachmentCardImage.spec.js +0 -78
- package/lib/components/atoms/AttachmentPreviewModal/AttachmentPreviewModal.helpers.spec.js +0 -41
- package/lib/components/atoms/AttachmentPreviewModal/AttachmentPreviewModal.spec.js +0 -253
- package/lib/components/atoms/AttachmentPreviewModal/ExcelPreview.spec.js +0 -80
- package/lib/components/atoms/AttachmentPreviewModal/PptPreview.helpers.spec.js +0 -33
- package/lib/components/atoms/AttachmentPreviewModal/PptPreview.spec.js +0 -25
- package/lib/components/atoms/AttachmentPreviewModal/WordPreview.helpers.spec.js +0 -11
- package/lib/components/atoms/AttachmentPreviewModal/WordPreview.spec.js +0 -77
- package/lib/components/atoms/Backdrop/Backdrop.spec.js +0 -28
- package/lib/components/atoms/CardMenu/CardMenu.spec.js +0 -56
- package/lib/components/atoms/ChatClientSelector/ChatClientSelector.spec.js +0 -67
- package/lib/components/atoms/Checkbox/Checkbox.spec.js +0 -27
- package/lib/components/atoms/Chip/Chip.spec.js +0 -82
- package/lib/components/atoms/ChipLlm/ChipLlm.spec.js +0 -26
- package/lib/components/atoms/ClientSelector/ClientSelector.spec.js +0 -88
- package/lib/components/atoms/ContextMentionChip/ContextMentionChip.spec.js +0 -29
- package/lib/components/atoms/ContextMentionChip/MentionOverflowLabel.spec.js +0 -46
- package/lib/components/atoms/ContextMentionChip/buildChipElement.helpers.spec.js +0 -77
- package/lib/components/atoms/ContextMentionChip/buildChipElement.spec.js +0 -81
- package/lib/components/atoms/ContextMentionEditor/ContextMentionEditor.helpers.spec.js +0 -48
- package/lib/components/atoms/ContextMentionEditor/ContextMentionEditor.spec.js +0 -231
- package/lib/components/atoms/ContextMentionItem/ContextMentionItem.spec.js +0 -107
- package/lib/components/atoms/ContextMentionPopover/ContextMentionPopover.spec.js +0 -136
- package/lib/components/atoms/CopyToClipboard.spec.js +0 -74
- package/lib/components/atoms/EditableLabel/EditableLabel.spec.js +0 -76
- package/lib/components/atoms/EntitySelector/EntitySelector.spec.js +0 -86
- package/lib/components/atoms/Expand/Expand.spec.js +0 -57
- package/lib/components/atoms/Fade/Fade.spec.js +0 -31
- package/lib/components/atoms/FeedbackButton/FeedbackButton.spec.js +0 -75
- package/lib/components/atoms/FrequentlyAskedQuestions/FrequentlyAskedQuestions.spec.js +0 -104
- package/lib/components/atoms/FrequentlyUsedActions/FrequentlyUsedActions.spec.js +0 -91
- package/lib/components/atoms/HelpButton.spec.js +0 -87
- package/lib/components/atoms/ImagePreview/ImagePreview.spec.js +0 -96
- package/lib/components/atoms/ListMenuOption/ListMenuOption.spec.js +0 -54
- package/lib/components/atoms/LoadingFaqs/LoadingFaqs.spec.js +0 -21
- package/lib/components/atoms/LoadingSearchClients/LoadingSearchClients.spec.js +0 -20
- package/lib/components/atoms/LoadingSearchProjects/LoadingSearchProjects.spec.js +0 -26
- package/lib/components/atoms/LoadingText/LoadingText.spec.js +0 -25
- package/lib/components/atoms/MAIAButton/MAIAButton.spec.js +0 -42
- package/lib/components/atoms/MAIAError/MAIAError.spec.js +0 -27
- package/lib/components/atoms/MAIAInput/MAIAInput.helpers.spec.js +0 -26
- package/lib/components/atoms/MAIAInput/MAIAInput.spec.js +0 -444
- package/lib/components/atoms/MAIAInput/MAIAInputEditor.helpers.spec.js +0 -20
- package/lib/components/atoms/MAIAInput/MAIAInputEditor.spec.js +0 -53
- package/lib/components/atoms/MAIAInput/maiaInputLayout.spec.js +0 -22
- package/lib/components/atoms/MaiaStreamdown/MaiaStreamdown.spec.js +0 -64
- package/lib/components/atoms/MaiaWrapper/MaiaWrapper.spec.js +0 -43
- package/lib/components/atoms/MaiaWrapper/MaiaWrapperBase.spec.js +0 -114
- package/lib/components/atoms/MaiaWrapper/ModernMaiaWrapper.spec.js +0 -51
- package/lib/components/atoms/ModalClientAccess/ModalClientAccess.spec.js +0 -48
- package/lib/components/atoms/ModalProject/ModalProject.spec.js +0 -66
- package/lib/components/atoms/NextPageLoader.spec.js +0 -37
- package/lib/components/atoms/OnboardingModalButton/OnboardingModal.spec.js +0 -20
- package/lib/components/atoms/OnboardingModalButton/OnboardingModalButton.helpers.spec.js +0 -35
- package/lib/components/atoms/OnboardingModalButton/OnboardingModalButton.spec.js +0 -47
- package/lib/components/atoms/OptionAccessibility/OptionAccessibility.spec.js +0 -86
- package/lib/components/atoms/PrimaryButton.spec.js +0 -42
- package/lib/components/atoms/ProjectSelector/ProjectSelector.spec.js +0 -69
- package/lib/components/atoms/ReasoningBlock/ReasoningBlock.spec.js +0 -69
- package/lib/components/atoms/ReasoningBlock/ReasoningSteps.spec.js +0 -59
- package/lib/components/atoms/ReasoningBlock/ReasoningTimeline.spec.js +0 -170
- package/lib/components/atoms/ReasoningBlock/groupParallelSteps.spec.js +0 -199
- package/lib/components/atoms/ReasoningBlock/reasoningLeading.spec.js +0 -70
- package/lib/components/atoms/ReasoningBlock/reasoningLiveNarration.spec.js +0 -120
- package/lib/components/atoms/ReasoningBlock/reasoningMotion.js +0 -8
- package/lib/components/atoms/ReasoningBlock/reasoningTimeline.helpers.spec.js +0 -31
- package/lib/components/atoms/ReasoningBlock/useCollapsibleHeight.js +0 -52
- package/lib/components/atoms/ReasoningBlock/useCollapsibleHeight.spec.js +0 -90
- package/lib/components/atoms/ReasoningBlock/useReasoningMarkerHandoff.js +0 -29
- package/lib/components/atoms/ReasoningBlock/useReasoningMarkerHandoff.spec.js +0 -38
- package/lib/components/atoms/SessionGeneratingDot/SessionGeneratingDot.spec.js +0 -16
- package/lib/components/atoms/SkillsDropdown/SkillsDropdown.spec.js +0 -107
- package/lib/components/atoms/SlashCommandChip/SlashCommandChip.spec.js +0 -24
- package/lib/components/atoms/SlashCommandDropdown/SlashCommandDropdown.spec.js +0 -85
- package/lib/components/atoms/Switch/Switch.spec.js +0 -41
- package/lib/components/atoms/TextArea/CustomTextArea.spec.js +0 -52
- package/lib/components/atoms/TextArea/TextArea.spec.js +0 -68
- package/lib/components/atoms/ThirdButton.spec.js +0 -29
- package/lib/components/atoms/VideoModal/VideoModal.spec.js +0 -68
- package/lib/components/atoms/WithAppCfg.spec.js +0 -60
- package/lib/components/molecules/AbmSection/AbmAccessibilitySection/AbmAccessibilitySection.helpers.spec.js +0 -53
- package/lib/components/molecules/AbmSection/AbmAccessibilitySection/AbmAccessibilitySection.spec.js +0 -495
- package/lib/components/molecules/AbmSection/AbmGeneralSection.helpers.spec.js +0 -57
- package/lib/components/molecules/AbmSection/AbmGeneralSection.spec.js +0 -227
- package/lib/components/molecules/AbmSection/AbmKnowledgeSection.helpers.spec.js +0 -108
- package/lib/components/molecules/AbmSection/AbmKnowledgeSection.spec.js +0 -254
- package/lib/components/molecules/AbmSection/AbmLoaderFiles.helpers.spec.js +0 -50
- package/lib/components/molecules/AbmSection/AbmLoaderFiles.spec.js +0 -94
- package/lib/components/molecules/AgentInputBlock/AgentInputBlockMessage.js +0 -83
- package/lib/components/molecules/AgentInputBlock/AgentInputBlockMessage.styles.js +0 -30
- package/lib/components/molecules/AgentInputBlock/index.js +0 -5
- package/lib/components/molecules/AgentInputBlock/resolveAgentInputBlock.js +0 -52
- package/lib/components/molecules/AgentInputBlock/resolveAgentInputBlock.spec.js +0 -76
- package/lib/components/molecules/AgentInputBlock/resolveLegacyContextSession.js +0 -20
- package/lib/components/molecules/AgentInputBlock/resolveLegacyContextSession.spec.js +0 -34
- package/lib/components/molecules/AgentInputBlock/useAgentChangeModelAction.js +0 -36
- package/lib/components/molecules/ChatAIClientSelector/ChatAIClientSelector.spec.js +0 -66
- package/lib/components/molecules/ChatAIContent/ChatAIContent.spec.js +0 -145
- package/lib/components/molecules/ChatAIHistory/ChatAIHistory.spec.js +0 -204
- package/lib/components/molecules/ChatAIHome/ChatAIHome.spec.js +0 -246
- package/lib/components/molecules/ChatAIHome/ChatAIHomeMaiaker.spec.js +0 -86
- package/lib/components/molecules/ChatAIMessages/ChatAICreateAgentActions.spec.js +0 -104
- package/lib/components/molecules/ChatAIMessages/ChatAIMessages.helpers.spec.js +0 -77
- package/lib/components/molecules/ChatAIMessages/ChatAIMessages.spec.js +0 -445
- package/lib/components/molecules/ChatAIMessages/ChatAISuggestions.spec.js +0 -46
- package/lib/components/molecules/ChatAIModal/ChatAIModal.helpers.spec.js +0 -471
- package/lib/components/molecules/ChatAIModal/ChatAIModal.spec.js +0 -659
- package/lib/components/molecules/ChatAIModal/components/ChatAiAgentOptions/ChatAiAgentOptions.helpers.spec.js +0 -33
- package/lib/components/molecules/ChatAIModal/components/ChatAiAgentOptions/ChatAiAgentOptions.spec.js +0 -116
- package/lib/components/molecules/ChatAIModal/components/ChatAiModalFooter/ChatAiModalFooter.spec.js +0 -134
- package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.helpers.spec.js +0 -95
- package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.spec.js +0 -241
- package/lib/components/molecules/ChatAIModal/components/MaiaMinimizedPill/MaiaMinimizedPill.spec.js +0 -37
- package/lib/components/molecules/ChatAIModal/constants.spec.js +0 -16
- package/lib/components/molecules/ChatAIModal/floatingPanelMotion/FloatingPanelMotion.spec.js +0 -22
- package/lib/components/molecules/ChatAIModal/floatingPanelMotion/useFloatingPanelDragTilt.spec.js +0 -67
- package/lib/components/molecules/ChatAIModal/layout.spec.js +0 -72
- package/lib/components/molecules/ChatAIMyAgents/ChatAIMyAgents.spec.js +0 -172
- package/lib/components/molecules/ChatAIMySkills/ChatAIMySkills.spec.js +0 -128
- package/lib/components/molecules/ChatAIProjectSelector/ChatAIProjectSelector.spec.js +0 -66
- package/lib/components/molecules/ChatFooter/ChatFooter.spec.js +0 -369
- package/lib/components/molecules/ChatFooter/ChatFooterCorAccess.spec.js +0 -10
- package/lib/components/molecules/ChatFooter/ChatFooterFaqs.helpers.spec.js +0 -82
- package/lib/components/molecules/ChatFooter/ChatFooterFaqs.spec.js +0 -139
- package/lib/components/molecules/ContextMentionInput/ContextMentionInput.spec.js +0 -84
- package/lib/components/molecules/MessageFeedback/MessageFeedback.spec.js +0 -116
- package/lib/components/molecules/ProjectSummaryChat/ProjectSummaryChat.spec.js +0 -126
- package/lib/components/molecules/ProjectSummaryConfig/ProjectSummaryConfig.spec.js +0 -115
- package/lib/components/molecules/ProjectSummaryContent/ProjectSummaryContent.spec.js +0 -79
- package/lib/components/molecules/ProjectSummaryModal/ProjectSummaryModal.spec.js +0 -37
- package/lib/components/molecules/Sidebar/Sidebar.spec.js +0 -453
- package/lib/components/organisms/AbmAgentModal/AbmAgentModal.helpers.spec.js +0 -391
- package/lib/components/organisms/AbmAgentModal/AbmAgentModal.spec.js +0 -1204
- package/lib/components/organisms/AbmSkillGenerateModal/AbmSkillGenerateModal.spec.js +0 -112
- package/lib/components/organisms/AbmSkillModal/AbmSkillModal.spec.js +0 -405
- package/lib/components/organisms/ChatAI/ChatAI.spec.js +0 -174
- package/lib/components/organisms/ChatAIPage/ChatAIPage.js +0 -525
- package/lib/components/organisms/ChatAIPage/ChatAIPage.spec.js +0 -246
- package/lib/components/organisms/ChatAIPage/ChatAIPage.styles.js +0 -16
- package/lib/components/organisms/ChatAIPage/ChatAIPageHeader.js +0 -253
- package/lib/components/organisms/ChatAIPage/ChatAIPageHeader.spec.js +0 -139
- package/lib/components/organisms/ChatAIPage/ChatAIPageHeader.styles.js +0 -13
- package/lib/components/organisms/ChatAIPage/ChatAIPageHome.js +0 -275
- package/lib/components/organisms/ChatAIPage/ChatAIPageHome.spec.js +0 -275
- package/lib/components/organisms/ChatAIPage/ChatAIPageHome.styles.js +0 -195
- package/lib/components/organisms/ChatAIPage/ChatAIPageHomeActionCardSlot.js +0 -94
- package/lib/components/organisms/ChatAIPage/ChatAIPageHomeActionCardSlot.spec.js +0 -69
- package/lib/components/organisms/ChatAIPage/ChatAIPageHomeActionCards.skeleton.js +0 -38
- package/lib/components/organisms/ChatAIPage/getDaypart.js +0 -9
- package/lib/components/organisms/ChatAIPage/getDaypart.spec.js +0 -19
- package/lib/components/organisms/ChatAIPage/index.js +0 -3
- package/lib/components/organisms/ClientAIButton/ClientAIButton.spec.js +0 -53
- package/lib/components/organisms/DeleteAgentModal/DeleteAgentModal.spec.js +0 -59
- package/lib/components/organisms/DeleteQuestionModal/DeleteQuestionModal.spec.js +0 -79
- package/lib/components/organisms/EditQuestionModal/EditQuestionModal.spec.js +0 -86
- package/lib/components/organisms/ModalFileExceeds/ModalFileExceeds.spec.js +0 -49
- package/lib/components/organisms/ProjectAIButton/ProjectAIButton.spec.js +0 -67
- package/lib/components/organisms/ProjectSummary/ProjectSummary.spec.js +0 -117
- package/lib/components/organisms/SnackBar/Snackbar.spec.js +0 -66
- package/lib/components/organisms/SourcesInformation/SourceItem.spec.js +0 -19
- package/lib/components/organisms/SourcesInformation/SourcesInformationModal.spec.js +0 -52
- package/lib/constants/maiaExternalConnectorsAccess.spec.js +0 -29
- package/lib/constants/maiaFeatureAccess.spec.js +0 -30
- package/lib/constants/maiaHourAgentAccess.spec.js +0 -30
- package/lib/constants/maiaTaskPanelAccess.spec.js +0 -30
- package/lib/constants/permissions/clientRoleAccess.spec.js +0 -31
- package/lib/constants/permissions/utils.spec.js +0 -128
- package/lib/dev/DevMaiaPage.js +0 -30
- package/lib/hooks/frequentlyUsedActionsCache.js +0 -17
- package/lib/hooks/frequentlyUsedActionsCache.spec.js +0 -25
- package/lib/hooks/useAccessClient/useAccessClient.spec.js +0 -149
- package/lib/hooks/useAgentModel/useAgentModel.spec.js +0 -83
- package/lib/hooks/useAgentModel/useCreateAgent.spec.js +0 -231
- package/lib/hooks/useAgentModel/useDeleteAgent.spec.js +0 -183
- package/lib/hooks/useAgentModel/useUpdateAgent.spec.js +0 -313
- package/lib/hooks/useAgentSuggestions.spec.js +0 -89
- package/lib/hooks/useCaretPosition.spec.js +0 -58
- package/lib/hooks/useChatManager/useChatManager.helpers.spec.js +0 -506
- package/lib/hooks/useChatManager/useChatManager.spec.js +0 -1261
- package/lib/hooks/useChatMessages/useChatMessages.helpers.spec.js +0 -176
- package/lib/hooks/useChatMessages/useChatMessages.spec.js +0 -379
- package/lib/hooks/useChats/useChats.spec.js +0 -208
- package/lib/hooks/useClientSearch.helpers.spec.js +0 -52
- package/lib/hooks/useClientSearch.spec.js +0 -86
- package/lib/hooks/useContextMentions.helpers.spec.js +0 -143
- package/lib/hooks/useContextMentions.spec.js +0 -239
- package/lib/hooks/useContextPinPopover.helpers.spec.js +0 -115
- package/lib/hooks/useContextPinPopover.spec.js +0 -159
- package/lib/hooks/useContinueLegacyContextInNewChat/index.js +0 -2
- package/lib/hooks/useContinueLegacyContextInNewChat/useContinueLegacyContextInNewChat.js +0 -93
- package/lib/hooks/useDebounce.spec.js +0 -42
- package/lib/hooks/useEntitySearch.helpers.spec.js +0 -321
- package/lib/hooks/useEntitySearch.spec.js +0 -443
- package/lib/hooks/useEvent.spec.js +0 -45
- package/lib/hooks/useFrequentlyAskedQuestions.spec.js +0 -222
- package/lib/hooks/useFrequentlyUsedActions.spec.js +0 -135
- package/lib/hooks/useIsMaiaPageRoute.js +0 -26
- package/lib/hooks/useIsMaiaPageRoute.spec.js +0 -26
- package/lib/hooks/useKnowledge/deleteKnowledge.spec.js +0 -122
- package/lib/hooks/useKnowledge/downloadKnowledge.spec.js +0 -148
- package/lib/hooks/useKnowledge/saveKnowledge.spec.js +0 -104
- package/lib/hooks/useKnowledge/useKnowledgeOperations.spec.js +0 -178
- package/lib/hooks/useMaiaChatSessionMeta/index.js +0 -2
- package/lib/hooks/useMaiaChatSessionMeta/useMaiaChatSessionMeta.js +0 -24
- package/lib/hooks/useMentionAllowedTypes.spec.js +0 -89
- package/lib/hooks/useMentionPopover.helpers.spec.js +0 -71
- package/lib/hooks/useMentionPopover.spec.js +0 -215
- package/lib/hooks/useMinimizedPillBottomOffset.helpers.spec.js +0 -132
- package/lib/hooks/useMinimizedPillBottomOffset.spec.js +0 -89
- package/lib/hooks/useMinimizedPillNoveltyDot/useMinimizedPillNoveltyDot.spec.js +0 -67
- package/lib/hooks/useModal/useModal.spec.js +0 -73
- package/lib/hooks/useOrchestratorStream/useOrchestratorStream.spec.js +0 -192
- package/lib/hooks/useProjectSearch.helpers.spec.js +0 -70
- package/lib/hooks/useProjectSearch.spec.js +0 -91
- package/lib/hooks/useProjectSummary.spec.js +0 -193
- package/lib/hooks/useProjectSummaryConfig.helpers.spec.js +0 -92
- package/lib/hooks/useProjectSummaryConfig.spec.js +0 -133
- package/lib/hooks/useReasoningTrace/reasoningStore.spec.js +0 -112
- package/lib/hooks/useRecentClientsSearch.helpers.spec.js +0 -33
- package/lib/hooks/useRecentClientsSearch.spec.js +0 -85
- package/lib/hooks/useRecentContexts.spec.js +0 -139
- package/lib/hooks/useResize.spec.js +0 -37
- package/lib/hooks/useSkillsCatalog.spec.js +0 -88
- package/lib/hooks/useSlashCommands.spec.js +0 -139
- package/lib/hooks/useSmoothStreamText/useSmoothStreamText.spec.js +0 -101
- package/lib/hooks/useSnackBarManager/useSnackBarManager.spec.js +0 -33
- package/lib/hooks/useStreamResponse.spec.js +0 -199
- package/lib/hooks/useT.spec.js +0 -20
- package/lib/hooks/useToggle.spec.js +0 -33
- package/lib/hooks/useToggleFavorite/useToggleFavorite.spec.js +0 -171
- package/lib/services/maia/Access/updateAccess.spec.js +0 -137
- package/lib/services/maia/Actions/getFrequentlyUsedActions.spec.js +0 -56
- package/lib/services/maia/Actions/getSlashCommands.spec.js +0 -91
- package/lib/services/maia/Agents/connectors.spec.js +0 -359
- package/lib/services/maia/Agents/createAgent.spec.js +0 -55
- package/lib/services/maia/Agents/deleteAgent.spec.js +0 -57
- package/lib/services/maia/Agents/fetchAgentDetail.spec.js +0 -108
- package/lib/services/maia/Agents/getAgentById.spec.js +0 -190
- package/lib/services/maia/Agents/getAgentModels.spec.js +0 -190
- package/lib/services/maia/Agents/getAgentSuggestions.spec.js +0 -89
- package/lib/services/maia/Agents/getAgents.helpers.spec.js +0 -211
- package/lib/services/maia/Agents/getAgents.spec.js +0 -697
- package/lib/services/maia/Agents/setAgentToolGroups.spec.js +0 -45
- package/lib/services/maia/Agents/toggleFavorite.spec.js +0 -59
- package/lib/services/maia/Agents/updateAgent.spec.js +0 -48
- package/lib/services/maia/Chats/deleteChat.spec.js +0 -31
- package/lib/services/maia/Chats/getChatMessages.spec.js +0 -150
- package/lib/services/maia/Chats/getChatsByUserId.spec.js +0 -149
- package/lib/services/maia/Chats/markSessionAsRead.spec.js +0 -30
- package/lib/services/maia/Chats/patchChat.spec.js +0 -41
- package/lib/services/maia/Chats/wasHelpfulChat.spec.js +0 -28
- package/lib/services/maia/Faqs/getFrequentlyAskedQuestions.spec.js +0 -58
- package/lib/services/maia/Knowledge/delete.spec.js +0 -45
- package/lib/services/maia/Knowledge/download.spec.js +0 -78
- package/lib/services/maia/Knowledge/save.spec.js +0 -58
- package/lib/services/maia/Orchestrator/orchestrator.helpers.spec.js +0 -153
- package/lib/services/maia/Orchestrator/orchestrator.spec.js +0 -181
- package/lib/services/maia/RecentClients/getRecentClients.spec.js +0 -52
- package/lib/services/maia/RecentContexts/getRecentContexts.spec.js +0 -103
- package/lib/services/maia/RecentProjects/getRecentProjects.spec.js +0 -82
- package/lib/services/maia/RecentTasks/getRecentTasks.spec.js +0 -63
- package/lib/services/maia/RecentUsers/getRecentUsers.spec.js +0 -82
- package/lib/services/maia/Skills/createSkill.spec.js +0 -68
- package/lib/services/maia/Skills/deleteSkill.spec.js +0 -42
- package/lib/services/maia/Skills/generateSkill.spec.js +0 -48
- package/lib/services/maia/Skills/getSkills.spec.js +0 -152
- package/lib/services/maia/Skills/updateSkill.spec.js +0 -62
- package/lib/services/maia/client.spec.js +0 -56
- package/lib/services/utils/fetchCOR.spec.js +0 -211
- package/lib/services/utils/getCookie.spec.js +0 -20
- package/lib/services/utils/mapChatMessages.spec.js +0 -254
- package/lib/store/chatsSidebarOptimistic.spec.js +0 -112
- package/lib/store/maiaLastChatPersistence.spec.js +0 -22
- package/lib/store/maiaPanelSessionPersistence.spec.js +0 -62
- package/lib/store/sessions/sessionNotificationSound.spec.js +0 -145
- package/lib/store/sessions/sessionNotifications.helpers.spec.js +0 -63
- package/lib/store/sessions/sessionNotifications.spec.js +0 -106
- package/lib/store/sessions/sessionStreamManager.spec.js +0 -503
- package/lib/store/sessions/sessions.types.spec.js +0 -16
- package/lib/store/sessions/useSessionsStore.spec.js +0 -135
- package/lib/store/useChatsStore.spec.js +0 -619
- package/lib/store/useFaqsStore.spec.js +0 -57
- package/lib/utils/actionCategoryMap.spec.js +0 -18
- package/lib/utils/agentDisplayName.spec.js +0 -44
- package/lib/utils/autoApproveStorage.spec.js +0 -25
- package/lib/utils/chatInputFiles.spec.js +0 -39
- package/lib/utils/contextMentionIcons.spec.js +0 -41
- package/lib/utils/contextMentionLabel.spec.js +0 -13
- package/lib/utils/contextMentionTriggers.spec.js +0 -38
- package/lib/utils/contextMentionTypeLabel.spec.js +0 -14
- package/lib/utils/corConnectorMentionTypes.spec.js +0 -23
- package/lib/utils/entityLinkRender.spec.js +0 -72
- package/lib/utils/fileDownloadHelper.spec.js +0 -67
- package/lib/utils/formatQuickActionMessage.spec.js +0 -27
- package/lib/utils/formatUnreadCount.spec.js +0 -12
- package/lib/utils/getUnitFileSize.spec.js +0 -18
- package/lib/utils/hitlAnalytics.spec.js +0 -100
- package/lib/utils/hoursPlannerQuickActionType.spec.js +0 -64
- package/lib/utils/imagePreprocessor.helpers.spec.js +0 -28
- package/lib/utils/imagePreprocessor.spec.js +0 -112
- package/lib/utils/maiaPageRoute.js +0 -24
- package/lib/utils/maiaPageRoute.spec.js +0 -23
- package/lib/utils/mapBackendLang.spec.js +0 -19
- package/lib/utils/navigateContextEntity.spec.js +0 -50
- package/lib/utils/normalizeAgentConnectors.spec.js +0 -98
- package/lib/utils/orchestratorSubagents.spec.js +0 -32
- package/lib/utils/reasoningMappers.spec.js +0 -103
- package/lib/utils/recentContextsHomeLimit.spec.js +0 -32
- package/lib/utils/renderContextMentions.spec.js +0 -158
- package/lib/utils/retryCompletion.spec.js +0 -99
- package/lib/utils/skillContentSize.spec.js +0 -13
- package/lib/utils/slashCommandMarker.spec.js +0 -43
- package/lib/utils/sortManagerHoursHomeFuas.spec.js +0 -51
- package/lib/utils/sseStreamContent.spec.js +0 -31
- package/lib/utils/streamActivityMessages.spec.js +0 -253
- package/lib/utils/validateTrimmedFields.spec.js +0 -26
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import _toConsumableArray from "@babel/runtime/helpers/toConsumableArray";
|
|
2
|
-
import _asyncToGenerator from "@babel/runtime/helpers/asyncToGenerator";
|
|
3
2
|
import _defineProperty from "@babel/runtime/helpers/defineProperty";
|
|
3
|
+
import _asyncToGenerator from "@babel/runtime/helpers/asyncToGenerator";
|
|
4
4
|
import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
|
|
5
|
-
import _regeneratorRuntime from "@babel/runtime/regenerator";
|
|
6
5
|
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; }
|
|
7
6
|
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; }
|
|
7
|
+
import _regeneratorRuntime from "@babel/runtime/regenerator";
|
|
8
8
|
/* eslint-disable radix */
|
|
9
9
|
/* eslint-disable no-nested-ternary */
|
|
10
10
|
/* eslint-disable @typescript-eslint/no-non-null-asserted-optional-chain */
|
|
@@ -15,7 +15,7 @@ import { v4 as uuidv4 } from 'uuid';
|
|
|
15
15
|
import { useChatMessages } from '../useChatMessages';
|
|
16
16
|
import { useOrchestratorStream } from '../useOrchestratorStream';
|
|
17
17
|
import { useT } from '../useT';
|
|
18
|
-
import {
|
|
18
|
+
import { findMessageWithApprovalByThreadIds, resolveApprovalDecisionStatus, resolveContinueStreamDecision, mapAuthUserToChatMessageUser, normalizeAssistantAttachments, normalizeSendMessageArgs, reasoningTraceFor, resolveClientPayload, resolveProjectToRequest, resolveStreamErrorMessageKey, applyProjectDashboardMutation, shouldRefetchOpenTaskPanel, resolveSendMessageGate, resolveSendMessagePayloadFields, buildChatHistoryFromMessages, resolveLastMessageAgentId, resolveAgentIdForStream, resolveUserQuestionMessageId, buildMaiaStreamRequestPayload, buildMaiaStreamRequestPayloadForProjectChange, resolveStreamErrorHandlingMode, buildStreamErrorAssistantMessage, resolveHitlApprovalRequiredOutcome, buildHitlApprovalPendingMessage, shouldPreserveReasoningOnStreamStop, buildStreamStopPartialAssistantMessage, buildStreamStopCancelledAssistantMessage, resolveRetryBlockReason, resolveRetryEligibility, resolveRetryUserAttachments, shouldUpdateProjectOnChange, shouldResendAfterProjectChange, resolveStreamFinishFinalMessageId, resolveStreamStopMessageIds, resolveRentabilidadProjectFaqMessage, resolveStreamErrorUserMessage, resolveHitlExecutionContext, resolveSkippedHitlManualApproval, resolveHitlSkipResolutionSource, resolveCreateAgentHitlAnalyticsEvents, buildTerminalSessionReconciliationKey, shouldForceReloadMessagesOnTerminalSession, shouldRotateSessionForNewHome, shouldSwitchToInitialChatSession, buildStreamFinishAssistantMessage, resolveActiveStreamFinishProcessing, shouldMarkChatReadAfterStreamFinish, shouldDispatchFirstSessionRefetch } from './useChatManager.helpers';
|
|
19
19
|
import { useUser } from '../../context/cor-user';
|
|
20
20
|
import { useGlobalContext } from '../../context/global-context';
|
|
21
21
|
import { EVENTS, useEvent } from '../useEvent';
|
|
@@ -27,7 +27,7 @@ import { formatQuickActionMessageForDisplay } from '../../utils/formatQuickActio
|
|
|
27
27
|
import { useProjects } from '../useProjects';
|
|
28
28
|
import { useTabTaskDefault } from '../useTabTaskDefault';
|
|
29
29
|
import { TASK_URL_REGEX_PATTERN } from '../../constants/taskUrls';
|
|
30
|
-
import { dispatchMaiaHoursCharged
|
|
30
|
+
import { dispatchMaiaHoursCharged } from '../../constants/plannerSyncEvents';
|
|
31
31
|
import { fetchAgentDetail } from '../../services/maia/Agents/fetchAgentDetail';
|
|
32
32
|
import { buildHitlActionTypeList, getHitlAnalyticsAgentType, normalizeHitlToolName, trackManualHitlEvents } from '../../utils/hitlAnalytics';
|
|
33
33
|
import { sessionStreamingText } from '../../store/sessions/sessionStreamingText';
|
|
@@ -38,7 +38,7 @@ import { activeView } from '../../store/sessions/activeView';
|
|
|
38
38
|
import { notifySessionFinishedInBackground } from '../../store/sessions/sessionNotifications';
|
|
39
39
|
import { buildSidebarSessionTitle, ensureSessionInSidebar } from '../../store/chatsSidebarOptimistic';
|
|
40
40
|
import { isStreamingPlaceholderMessageId, streamingPlaceholderMessageId } from '../../utils/streamActivityMessages';
|
|
41
|
-
import { findUserMessageForRetry, messagesWithoutRetriedTurn
|
|
41
|
+
import { findUserMessageForRetry, messagesWithoutRetriedTurn } from '../../utils/retryCompletion';
|
|
42
42
|
import { getChatsStoreState, useChatsStore } from '../../store/useChatsStore';
|
|
43
43
|
import { reasoningStore } from '../useReasoningTrace';
|
|
44
44
|
import { mapReasoningTrace } from '../../utils/reasoningMappers';
|
|
@@ -218,19 +218,13 @@ export var useChatManager = function useChatManager(_ref) {
|
|
|
218
218
|
// cancelado) y recargar acá mostraba la pantalla de carga del chat entero.
|
|
219
219
|
var activeSessionMeta = useSessionMeta(activeSessionId);
|
|
220
220
|
useEffect(function () {
|
|
221
|
-
var _activeSessionMeta$fi;
|
|
222
221
|
var status = activeSessionMeta === null || activeSessionMeta === void 0 ? void 0 : activeSessionMeta.status;
|
|
223
222
|
if (!status) return;
|
|
224
|
-
var
|
|
225
|
-
if (!isTerminal) return;
|
|
226
|
-
var key = "".concat(activeSessionId, ":").concat(status, ":").concat((_activeSessionMeta$fi = activeSessionMeta === null || activeSessionMeta === void 0 ? void 0 : activeSessionMeta.finishedAt) !== null && _activeSessionMeta$fi !== void 0 ? _activeSessionMeta$fi : '');
|
|
223
|
+
var key = buildTerminalSessionReconciliationKey(activeSessionId, status, activeSessionMeta === null || activeSessionMeta === void 0 ? void 0 : activeSessionMeta.finishedAt);
|
|
227
224
|
if (lastHandledTerminalRef.current === key) return;
|
|
228
225
|
lastHandledTerminalRef.current = key;
|
|
229
226
|
var tail = useSessionsStore.getState().getMessages(activeSessionId);
|
|
230
|
-
|
|
231
|
-
return isStreamingPlaceholderMessageId(msg.id);
|
|
232
|
-
});
|
|
233
|
-
if (hasStalePlaceholder) {
|
|
227
|
+
if (shouldForceReloadMessagesOnTerminalSession(status, tail, isStreamingPlaceholderMessageId)) {
|
|
234
228
|
loadMessages({
|
|
235
229
|
force: true
|
|
236
230
|
});
|
|
@@ -254,7 +248,7 @@ export var useChatManager = function useChatManager(_ref) {
|
|
|
254
248
|
// anterior, `activeView` la sigue marcando como activa y cuando termina no se
|
|
255
249
|
// notifica (y su respuesta se commitea sobre la vista nueva). El árbol no
|
|
256
250
|
// remonta en este flujo (no hay `key`) y nadie consume `resetChat`.
|
|
257
|
-
if (
|
|
251
|
+
if (shouldRotateSessionForNewHome(initialChatId, previousInitialChatId)) {
|
|
258
252
|
currentChatId.current = uuidv4();
|
|
259
253
|
setActiveSessionId(currentChatId.current);
|
|
260
254
|
currentMessageId.current = uuidv4();
|
|
@@ -265,7 +259,7 @@ export var useChatManager = function useChatManager(_ref) {
|
|
|
265
259
|
activeStreamChatIdRef.current = null;
|
|
266
260
|
return;
|
|
267
261
|
}
|
|
268
|
-
if (initialChatId
|
|
262
|
+
if (shouldSwitchToInitialChatSession(initialChatId, currentChatId.current) && initialChatId) {
|
|
269
263
|
// NO abortamos el stream anterior: puede seguir generando en background.
|
|
270
264
|
// Solo cambiamos de sesión activa; el motor rutea cada stream por su
|
|
271
265
|
// sessionId, así que los tokens de la sesión previa siguen aplicándose a
|
|
@@ -302,7 +296,7 @@ export var useChatManager = function useChatManager(_ref) {
|
|
|
302
296
|
sessionStreamingText.clear(sessionId);
|
|
303
297
|
dropFromSession(sessionId, placeholderId);
|
|
304
298
|
var retrySnapshot = retrySnapshotRef.current;
|
|
305
|
-
if (retrySnapshot) {
|
|
299
|
+
if (resolveStreamErrorHandlingMode(Boolean(retrySnapshot)) === 'retry-restore' && retrySnapshot) {
|
|
306
300
|
retrySnapshotRef.current = null;
|
|
307
301
|
messagesRef.current = retrySnapshot;
|
|
308
302
|
replaceMessages(retrySnapshot);
|
|
@@ -327,27 +321,16 @@ export var useChatManager = function useChatManager(_ref) {
|
|
|
327
321
|
activeStreamChatIdRef.current = null;
|
|
328
322
|
isProcessingRef.current = false;
|
|
329
323
|
}
|
|
330
|
-
var
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
}) : t('chat.error');
|
|
338
|
-
commitToSession(sessionId, _objectSpread(_objectSpread({
|
|
339
|
-
id: "answer-".concat(messageId),
|
|
324
|
+
var _resolveStreamErrorMe = resolveStreamErrorMessageKey(errorMessage, errorRawMessage),
|
|
325
|
+
messageKey = _resolveStreamErrorMe.messageKey,
|
|
326
|
+
tokensUsed = _resolveStreamErrorMe.tokensUsed,
|
|
327
|
+
showRetry = _resolveStreamErrorMe.showRetry;
|
|
328
|
+
var message = resolveStreamErrorUserMessage(messageKey, t, tokensUsed);
|
|
329
|
+
commitToSession(sessionId, buildStreamErrorAssistantMessage({
|
|
330
|
+
messageId: messageId,
|
|
340
331
|
message: message,
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
suggestions: [t('chat.retry')]
|
|
344
|
-
} : {}), {}, {
|
|
345
|
-
date: new Date(),
|
|
346
|
-
user: {
|
|
347
|
-
id: 'assistant',
|
|
348
|
-
name: 'Assistant'
|
|
349
|
-
},
|
|
350
|
-
role: ChatHistoryRole.ASSISTANT
|
|
332
|
+
showRetry: showRetry,
|
|
333
|
+
retryLabel: t('chat.retry')
|
|
351
334
|
}));
|
|
352
335
|
clearSessionTail(sessionId);
|
|
353
336
|
if (!isActive) {
|
|
@@ -386,8 +369,8 @@ export var useChatManager = function useChatManager(_ref) {
|
|
|
386
369
|
}, [commitToSession]);
|
|
387
370
|
var handleStreamFinish = useCallback(/*#__PURE__*/function () {
|
|
388
371
|
var _ref2 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee(ctx, content, sources, memorySessionId, rawAttachments, suggestions, completedAgentId, _resolvedContext, reasoning) {
|
|
389
|
-
var _reasoningTraceFor,
|
|
390
|
-
var sessionId, placeholderId, isActive, tempMessageId, attachments, finalMessageId, finalTrace, taskUrlRegex,
|
|
372
|
+
var _reasoningTraceFor, _window$taskPanel;
|
|
373
|
+
var sessionId, placeholderId, isActive, tempMessageId, attachments, finalMessageId, finalTrace, taskUrlRegex, manualApprovalForAnalytics, manualApproval, _yield$resolveActiveS, contentToAdd, createAgentFollowUp, editAgentFollowUp, hoursChargeTools, affectedTaskIds, manualWasTaskEdit, manualWasTaskDelete, wasTaskEdit, wasTaskDelete, wasCreateAgentApproved, pendingActions, openTaskPanelId, _window$taskPanel2, _window$taskPanel2$re, _getChatsStoreState, isChatViewVisible, markChatAsRead;
|
|
391
374
|
return _regeneratorRuntime.wrap(function (_context) {
|
|
392
375
|
while (1) switch (_context.prev = _context.next) {
|
|
393
376
|
case 0:
|
|
@@ -400,7 +383,7 @@ export var useChatManager = function useChatManager(_ref) {
|
|
|
400
383
|
useSessionsStore.getState().removeMessage(sessionId, tempMessageId);
|
|
401
384
|
attachments = normalizeAssistantAttachments(rawAttachments); // El trace acumulado en vivo está keyed por el placeholder; lo movemos al
|
|
402
385
|
// id definitivo para que el bloque de razonamiento sobreviva al swap.
|
|
403
|
-
finalMessageId =
|
|
386
|
+
finalMessageId = resolveStreamFinishFinalMessageId(memorySessionId); // Preferir el snapshot en vivo (narración anclada al inicio) sobre el
|
|
404
387
|
// `complete` del back, que suele mandar esa narración al final.
|
|
405
388
|
finalTrace = (_reasoningTraceFor = reasoningTraceFor(tempMessageId)) !== null && _reasoningTraceFor !== void 0 ? _reasoningTraceFor : mapReasoningTrace(reasoning);
|
|
406
389
|
reasoningStore.rename(tempMessageId, finalMessageId);
|
|
@@ -412,21 +395,13 @@ export var useChatManager = function useChatManager(_ref) {
|
|
|
412
395
|
_context.next = 1;
|
|
413
396
|
break;
|
|
414
397
|
}
|
|
415
|
-
commitToSession(sessionId,
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
id: 'assistant',
|
|
421
|
-
name: 'Assistant'
|
|
422
|
-
},
|
|
423
|
-
role: ChatHistoryRole.ASSISTANT,
|
|
424
|
-
sources: sources
|
|
425
|
-
}, attachments.length > 0 ? {
|
|
426
|
-
attachments: attachments
|
|
427
|
-
} : {}), {}, {
|
|
398
|
+
commitToSession(sessionId, buildStreamFinishAssistantMessage({
|
|
399
|
+
finalMessageId: finalMessageId,
|
|
400
|
+
content: content,
|
|
401
|
+
sources: sources,
|
|
402
|
+
attachments: attachments,
|
|
428
403
|
memorySessionId: memorySessionId,
|
|
429
|
-
suggestions: suggestions
|
|
404
|
+
suggestions: suggestions,
|
|
430
405
|
reasoning: finalTrace
|
|
431
406
|
}));
|
|
432
407
|
clearSessionTail(sessionId);
|
|
@@ -437,109 +412,58 @@ export var useChatManager = function useChatManager(_ref) {
|
|
|
437
412
|
streamingPlaceholderIdRef.current = null;
|
|
438
413
|
activeStreamChatIdRef.current = null;
|
|
439
414
|
hitlExecutionContextRef.current = null;
|
|
440
|
-
|
|
441
|
-
// Detectar todas las URLs de tareas (.../tasks/123/detail|message|messages|files|history|hours)
|
|
442
415
|
taskUrlRegex = new RegExp(TASK_URL_REGEX_PATTERN, 'g');
|
|
443
|
-
matches = _toConsumableArray(content.matchAll(taskUrlRegex));
|
|
444
|
-
contentToAdd = content;
|
|
445
|
-
previousMessage = messagesRef.current.filter(function (m) {
|
|
446
|
-
return m.id !== tempMessageId;
|
|
447
|
-
}).at(-1);
|
|
448
|
-
hasApprovalInPreviousMessage = (previousMessage === null || previousMessage === void 0 ? void 0 : previousMessage.approval) != null;
|
|
449
|
-
pendingActions = (previousMessage === null || previousMessage === void 0 || (_previousMessage$appr = previousMessage.approval) === null || _previousMessage$appr === void 0 ? void 0 : _previousMessage$appr.pending_actions) || [];
|
|
450
|
-
_resolveApprovedPendi = resolveApprovedPendingActionFlags(hasApprovalInPreviousMessage, previousMessage === null || previousMessage === void 0 ? void 0 : previousMessage.approvalStatus, pendingActions), wasTaskCreation = _resolveApprovedPendi.wasTaskCreation, wasTaskEdit = _resolveApprovedPendi.wasTaskEdit, wasTaskDelete = _resolveApprovedPendi.wasTaskDelete, wasCreateAgentApproved = _resolveApprovedPendi.wasCreateAgentApproved, wasConfigureAgentAccessApproved = _resolveApprovedPendi.wasConfigureAgentAccessApproved, wasEditAgentApproved = _resolveApprovedPendi.wasEditAgentApproved;
|
|
451
|
-
createAgentFollowUp = resolveCreateAgentFollowUp({
|
|
452
|
-
wasCreateAgentApproved: wasCreateAgentApproved,
|
|
453
|
-
wasConfigureAgentAccessApproved: wasConfigureAgentAccessApproved
|
|
454
|
-
}, Boolean(window.MAIA_CHAT_AI_FEATURE_ACCESS_MULTI_AGENTS), completedAgentId, pendingActions);
|
|
455
|
-
if (wasCreateAgentApproved) {
|
|
456
|
-
event(EVENTS.aiChatHitlOption, _objectSpread({
|
|
457
|
-
agent_type: getHitlAnalyticsAgentType(agent),
|
|
458
|
-
action_type: buildHitlActionTypeList(pendingActions),
|
|
459
|
-
decision: 'accept',
|
|
460
|
-
option: 'create_agent'
|
|
461
|
-
}, completedAgentId !== null && completedAgentId !== void 0 && completedAgentId.trim() ? {
|
|
462
|
-
created_agent_id: completedAgentId.trim()
|
|
463
|
-
} : {}));
|
|
464
|
-
}
|
|
465
416
|
manualApprovalForAnalytics = lastManualApprovalRef.current;
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
event(EVENTS.aiChatHitlOption, _objectSpread({
|
|
469
|
-
agent_type: getHitlAnalyticsAgentType(agent),
|
|
470
|
-
action_type: 'create_agent',
|
|
471
|
-
decision: 'accept',
|
|
472
|
-
resolution_source: 'manual',
|
|
473
|
-
option: 'create_agent'
|
|
474
|
-
}, completedAgentId !== null && completedAgentId !== void 0 && completedAgentId.trim() ? {
|
|
475
|
-
created_agent_id: completedAgentId.trim()
|
|
476
|
-
} : {}));
|
|
477
|
-
}
|
|
478
|
-
editAgentFollowUp = resolveEditAgentFollowUp(wasEditAgentApproved, completedAgentId, pendingActions);
|
|
479
|
-
taskIdsForDashboard = resolveTaskIdsForDashboard(content, taskUrlRegex, pendingActions, wasTaskDelete);
|
|
480
|
-
shouldSyncDashboard = shouldSyncTaskDashboard(hasApprovalInPreviousMessage, wasTaskCreation, wasTaskEdit, wasTaskDelete, taskIdsForDashboard);
|
|
481
|
-
if (!shouldSyncDashboard) {
|
|
482
|
-
_context.next = 4;
|
|
483
|
-
break;
|
|
484
|
-
}
|
|
485
|
-
taskIds = taskIdsForDashboard;
|
|
486
|
-
if (!(matches.length > 0)) {
|
|
487
|
-
_context.next = 3;
|
|
488
|
-
break;
|
|
489
|
-
}
|
|
417
|
+
manualApproval = lastManualApprovalRef.current;
|
|
418
|
+
lastManualApprovalRef.current = null;
|
|
490
419
|
_context.next = 2;
|
|
491
|
-
return
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
if (wasTaskCreation) {
|
|
505
|
-
(_window$newProjectDas = window.newProjectDashboard) === null || _window$newProjectDas === void 0 || (_window$newProjectDas2 = _window$newProjectDas.addExistingTaskToDashboard) === null || _window$newProjectDas2 === void 0 || _window$newProjectDas2.call(_window$newProjectDas, taskIds);
|
|
506
|
-
} else if (wasTaskEdit) {
|
|
507
|
-
(_window$newProjectDas3 = window.newProjectDashboard) === null || _window$newProjectDas3 === void 0 || (_window$newProjectDas4 = _window$newProjectDas3.editExistingTaskInDashboard) === null || _window$newProjectDas4 === void 0 || _window$newProjectDas4.call(_window$newProjectDas3, taskIds);
|
|
508
|
-
} else if (wasTaskDelete) {
|
|
509
|
-
(_window$newProjectDas5 = window.newProjectDashboard) === null || _window$newProjectDas5 === void 0 || (_window$newProjectDas6 = _window$newProjectDas5.deleteExistingTaskFromDashboard) === null || _window$newProjectDas6 === void 0 || _window$newProjectDas6.call(_window$newProjectDas5, taskIds);
|
|
420
|
+
return resolveActiveStreamFinishProcessing({
|
|
421
|
+
content: content,
|
|
422
|
+
messages: messagesRef.current,
|
|
423
|
+
tempMessageId: tempMessageId,
|
|
424
|
+
taskUrlRegex: taskUrlRegex,
|
|
425
|
+
projectId: project === null || project === void 0 ? void 0 : project.id,
|
|
426
|
+
pathname: window.location.pathname,
|
|
427
|
+
getTabTaskDefault: getTabTaskDefault,
|
|
428
|
+
multiAgentsAccess: Boolean(window.MAIA_CHAT_AI_FEATURE_ACCESS_MULTI_AGENTS),
|
|
429
|
+
completedAgentId: completedAgentId,
|
|
430
|
+
manualApproval: manualApproval,
|
|
431
|
+
applyDashboardMutation: function applyDashboardMutation(mutation, taskIds) {
|
|
432
|
+
applyProjectDashboardMutation(mutation, taskIds, window.newProjectDashboard);
|
|
510
433
|
}
|
|
511
|
-
}
|
|
512
|
-
case 4:
|
|
513
|
-
// Refetch del task panel si está abierto y la tool aprobada editó/borró esa tarea.
|
|
514
|
-
// Cubre los dos flujos de approval:
|
|
515
|
-
// 1) Approval por botón → `previousMessage.approval.pending_actions` (vía hasApprovalInPreviousMessage)
|
|
516
|
-
// 2) Manual approval (usuario tipea "si"/"no") → `lastManualApprovalRef.current`
|
|
517
|
-
openTaskPanelId = (_window$taskPanel = window.taskPanel) === null || _window$taskPanel === void 0 ? void 0 : _window$taskPanel.taskId;
|
|
518
|
-
manualApproval = lastManualApprovalRef.current;
|
|
519
|
-
lastManualApprovalRef.current = null; // consumir una sola vez
|
|
520
|
-
manualWasTaskEdit = isTaskEditToolName(manualApproval === null || manualApproval === void 0 ? void 0 : manualApproval.toolName);
|
|
521
|
-
manualWasTaskDelete = isTaskDeleteToolName(manualApproval === null || manualApproval === void 0 ? void 0 : manualApproval.toolName); // Sync Planner: avisar carga de horas confirmada (create_hour / create_hours).
|
|
522
|
-
hoursToolsFromApproval = pendingActions.map(function (action) {
|
|
523
|
-
return action.tool_name;
|
|
524
|
-
}).filter(function (toolName) {
|
|
525
|
-
return isHoursChargeTool(toolName);
|
|
526
434
|
});
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
|
|
435
|
+
case 2:
|
|
436
|
+
_yield$resolveActiveS = _context.sent;
|
|
437
|
+
contentToAdd = _yield$resolveActiveS.contentToAdd;
|
|
438
|
+
createAgentFollowUp = _yield$resolveActiveS.createAgentFollowUp;
|
|
439
|
+
editAgentFollowUp = _yield$resolveActiveS.editAgentFollowUp;
|
|
440
|
+
hoursChargeTools = _yield$resolveActiveS.hoursChargeTools;
|
|
441
|
+
affectedTaskIds = _yield$resolveActiveS.affectedTaskIds;
|
|
442
|
+
manualWasTaskEdit = _yield$resolveActiveS.manualWasTaskEdit;
|
|
443
|
+
manualWasTaskDelete = _yield$resolveActiveS.manualWasTaskDelete;
|
|
444
|
+
wasTaskEdit = _yield$resolveActiveS.wasTaskEdit;
|
|
445
|
+
wasTaskDelete = _yield$resolveActiveS.wasTaskDelete;
|
|
446
|
+
wasCreateAgentApproved = _yield$resolveActiveS.wasCreateAgentApproved;
|
|
447
|
+
pendingActions = _yield$resolveActiveS.pendingActions;
|
|
448
|
+
resolveCreateAgentHitlAnalyticsEvents({
|
|
449
|
+
wasCreateAgentApproved: wasCreateAgentApproved,
|
|
450
|
+
pendingActions: pendingActions,
|
|
451
|
+
manualApprovalToolName: manualApprovalForAnalytics === null || manualApprovalForAnalytics === void 0 ? void 0 : manualApprovalForAnalytics.toolName,
|
|
452
|
+
completedAgentId: completedAgentId,
|
|
453
|
+
agentType: getHitlAnalyticsAgentType(agent),
|
|
454
|
+
normalizeToolName: normalizeHitlToolName,
|
|
455
|
+
buildActionTypeList: buildHitlActionTypeList
|
|
456
|
+
}).forEach(function (payload) {
|
|
457
|
+
event(EVENTS.aiChatHitlOption, payload);
|
|
458
|
+
});
|
|
459
|
+
openTaskPanelId = (_window$taskPanel = window.taskPanel) === null || _window$taskPanel === void 0 ? void 0 : _window$taskPanel.taskId;
|
|
460
|
+
if (hoursChargeTools.length > 0) {
|
|
532
461
|
dispatchMaiaHoursCharged({
|
|
533
462
|
source: 'maia',
|
|
534
|
-
tools:
|
|
463
|
+
tools: hoursChargeTools,
|
|
535
464
|
sessionId: memorySessionId
|
|
536
465
|
});
|
|
537
466
|
}
|
|
538
|
-
manualPseudoAction = manualApproval ? {
|
|
539
|
-
tool_name: manualApproval.toolName,
|
|
540
|
-
tool_args: (_manualApproval$toolA = manualApproval.toolArgs) !== null && _manualApproval$toolA !== void 0 ? _manualApproval$toolA : {}
|
|
541
|
-
} : null;
|
|
542
|
-
affectedTaskIds = [].concat(_toConsumableArray(extractTaskIdsFromPendingActionsArgs(pendingActions)), _toConsumableArray(taskIdsForDashboard), _toConsumableArray(manualPseudoAction ? extractTaskIdsFromPendingActionsArgs([manualPseudoAction]) : [])).map(String);
|
|
543
467
|
if (shouldRefetchOpenTaskPanel(openTaskPanelId, {
|
|
544
468
|
wasTaskEdit: wasTaskEdit,
|
|
545
469
|
wasTaskDelete: wasTaskDelete
|
|
@@ -560,24 +484,14 @@ export var useChatManager = function useChatManager(_ref) {
|
|
|
560
484
|
// stream entra en un único commit.
|
|
561
485
|
flushSync(function () {
|
|
562
486
|
dropFromSession(sessionId, tempMessageId);
|
|
563
|
-
commitToSession(sessionId,
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
|
|
568
|
-
id: 'assistant',
|
|
569
|
-
name: 'Assistant'
|
|
570
|
-
},
|
|
571
|
-
role: ChatHistoryRole.ASSISTANT,
|
|
572
|
-
sources: sources
|
|
573
|
-
}, attachments.length > 0 ? {
|
|
574
|
-
attachments: attachments
|
|
575
|
-
} : {}), {}, {
|
|
487
|
+
commitToSession(sessionId, buildStreamFinishAssistantMessage({
|
|
488
|
+
finalMessageId: finalMessageId,
|
|
489
|
+
content: contentToAdd,
|
|
490
|
+
sources: sources,
|
|
491
|
+
attachments: attachments,
|
|
576
492
|
memorySessionId: memorySessionId,
|
|
577
|
-
suggestions: suggestions
|
|
578
|
-
|
|
579
|
-
createAgentFollowUp: createAgentFollowUp
|
|
580
|
-
} : {}), {}, {
|
|
493
|
+
suggestions: suggestions,
|
|
494
|
+
createAgentFollowUp: createAgentFollowUp,
|
|
581
495
|
reasoning: finalTrace
|
|
582
496
|
}));
|
|
583
497
|
});
|
|
@@ -607,21 +521,20 @@ export var useChatManager = function useChatManager(_ref) {
|
|
|
607
521
|
isProcessingRef.current = false;
|
|
608
522
|
retrySnapshotRef.current = null;
|
|
609
523
|
_getChatsStoreState = getChatsStoreState(), isChatViewVisible = _getChatsStoreState.isChatViewVisible, markChatAsRead = _getChatsStoreState.markChatAsRead;
|
|
610
|
-
if (!(isActive
|
|
611
|
-
_context.next =
|
|
524
|
+
if (!shouldMarkChatReadAfterStreamFinish(isActive, isChatViewVisible)) {
|
|
525
|
+
_context.next = 3;
|
|
612
526
|
break;
|
|
613
527
|
}
|
|
614
|
-
_context.next =
|
|
528
|
+
_context.next = 3;
|
|
615
529
|
return markChatAsRead(sessionId, {
|
|
616
530
|
force: true
|
|
617
531
|
});
|
|
618
|
-
case
|
|
619
|
-
if (firstTimeRef.current) {
|
|
620
|
-
|
|
621
|
-
document.dispatchEvent(customEvent);
|
|
532
|
+
case 3:
|
|
533
|
+
if (shouldDispatchFirstSessionRefetch(firstTimeRef.current)) {
|
|
534
|
+
document.dispatchEvent(new CustomEvent('refetch-session'));
|
|
622
535
|
firstTimeRef.current = false;
|
|
623
536
|
}
|
|
624
|
-
case
|
|
537
|
+
case 4:
|
|
625
538
|
case "end":
|
|
626
539
|
return _context.stop();
|
|
627
540
|
}
|
|
@@ -640,49 +553,37 @@ export var useChatManager = function useChatManager(_ref) {
|
|
|
640
553
|
var sessionId = currentChatId.current;
|
|
641
554
|
clearStreamUiRef.current();
|
|
642
555
|
var tempMessageId = streamingPlaceholderMessageId(currentMessageId.current);
|
|
643
|
-
var
|
|
556
|
+
var _resolveStreamStopMes = resolveStreamStopMessageIds(currentMessageId.current),
|
|
557
|
+
finalMessageId = _resolveStreamStopMes.finalMessageId,
|
|
558
|
+
cancelledMessageId = _resolveStreamStopMes.cancelledMessageId;
|
|
644
559
|
var stoppedTrace = reasoningTraceFor(tempMessageId);
|
|
645
560
|
sessionStreamingText.clear(sessionId);
|
|
646
561
|
streamingPlaceholderIdRef.current = null;
|
|
647
562
|
activeStreamChatIdRef.current = null;
|
|
648
563
|
dropFromSession(sessionId, tempMessageId);
|
|
649
|
-
if (stoppedTrace
|
|
564
|
+
if (shouldPreserveReasoningOnStreamStop(stoppedTrace)) {
|
|
650
565
|
reasoningStore.finish(tempMessageId, null);
|
|
651
566
|
reasoningStore.rename(tempMessageId, finalMessageId);
|
|
652
567
|
} else {
|
|
653
568
|
reasoningStore.remove(tempMessageId);
|
|
654
569
|
}
|
|
655
570
|
if (partialText) {
|
|
656
|
-
commitToSession(sessionId,
|
|
657
|
-
|
|
658
|
-
|
|
659
|
-
|
|
660
|
-
|
|
661
|
-
id: 'assistant',
|
|
662
|
-
name: 'Assistant'
|
|
663
|
-
},
|
|
664
|
-
role: ChatHistoryRole.ASSISTANT
|
|
665
|
-
}, stoppedTrace ? {
|
|
666
|
-
reasoning: stoppedTrace
|
|
667
|
-
} : {}));
|
|
571
|
+
commitToSession(sessionId, buildStreamStopPartialAssistantMessage({
|
|
572
|
+
finalMessageId: finalMessageId,
|
|
573
|
+
partialText: partialText,
|
|
574
|
+
stoppedTrace: stoppedTrace
|
|
575
|
+
}));
|
|
668
576
|
}
|
|
669
|
-
commitToSession(sessionId, {
|
|
670
|
-
|
|
671
|
-
|
|
672
|
-
|
|
673
|
-
user: {
|
|
674
|
-
id: 'assistant',
|
|
675
|
-
name: 'Assistant'
|
|
676
|
-
},
|
|
677
|
-
role: ChatHistoryRole.ASSISTANT,
|
|
678
|
-
isFrontendCancelled: true
|
|
679
|
-
});
|
|
577
|
+
commitToSession(sessionId, buildStreamStopCancelledAssistantMessage({
|
|
578
|
+
cancelledMessageId: cancelledMessageId,
|
|
579
|
+
cancelledLabel: t('chat.cancelled')
|
|
580
|
+
}));
|
|
680
581
|
clearSessionTail(sessionId);
|
|
681
582
|
isProcessingRef.current = false;
|
|
682
583
|
retrySnapshotRef.current = null;
|
|
683
584
|
}, [commitToSession, dropFromSession, clearSessionTail, t]);
|
|
684
585
|
var handleApprovalRequired = useCallback(function (ctx, approval, accumulatedContent) {
|
|
685
|
-
var
|
|
586
|
+
var _mapReasoningTrace;
|
|
686
587
|
var sessionId = ctx.sessionId,
|
|
687
588
|
placeholderId = ctx.placeholderId;
|
|
688
589
|
var isActive = activeView.is(sessionId);
|
|
@@ -693,59 +594,37 @@ export var useChatManager = function useChatManager(_ref) {
|
|
|
693
594
|
streamingPlaceholderIdRef.current = null;
|
|
694
595
|
activeStreamChatIdRef.current = null;
|
|
695
596
|
}
|
|
696
|
-
var hitlContext =
|
|
697
|
-
messageId: "approval-".concat(approval.original_thread_id),
|
|
698
|
-
messageText: accumulatedContent || '',
|
|
699
|
-
approval: approval,
|
|
700
|
-
pendingActions: approval.pending_actions,
|
|
701
|
-
threadIds: (_approval$pending_act = approval.pending_actions) === null || _approval$pending_act === void 0 ? void 0 : _approval$pending_act.map(function (action) {
|
|
702
|
-
return action.thread_id;
|
|
703
|
-
})
|
|
704
|
-
};
|
|
597
|
+
var hitlContext = resolveHitlExecutionContext(approval, accumulatedContent);
|
|
705
598
|
if (isActive) {
|
|
706
599
|
hitlExecutionContextRef.current = hitlContext;
|
|
707
600
|
}
|
|
601
|
+
var hitlOutcome = resolveHitlApprovalRequiredOutcome(approval);
|
|
708
602
|
|
|
709
603
|
// Preaprobado: por detección manual o por auto-approve. En ambos casos el
|
|
710
604
|
// stream continúa y no hay que pintar la caja de aprobación.
|
|
711
|
-
if (
|
|
712
|
-
var _approval$pending_act2, _ref3, _tool_name, _tool_args;
|
|
605
|
+
if (hitlOutcome.type === 'skip-ui') {
|
|
713
606
|
trackManualHitlEvents(event, {
|
|
714
607
|
impression: EVENTS.aiChatHitl,
|
|
715
608
|
option: EVENTS.aiChatHitlOption
|
|
716
|
-
}, agent, approval, trackedManualHitlKeysRef.current, approval
|
|
717
|
-
var
|
|
718
|
-
|
|
719
|
-
|
|
720
|
-
if (toolName && isActive) {
|
|
721
|
-
lastManualApprovalRef.current = {
|
|
722
|
-
toolName: toolName,
|
|
723
|
-
toolArgs: toolArgs
|
|
724
|
-
};
|
|
609
|
+
}, agent, approval, trackedManualHitlKeysRef.current, resolveHitlSkipResolutionSource(approval));
|
|
610
|
+
var skippedManualApproval = resolveSkippedHitlManualApproval(approval);
|
|
611
|
+
if (skippedManualApproval && isActive) {
|
|
612
|
+
lastManualApprovalRef.current = skippedManualApproval;
|
|
725
613
|
}
|
|
726
614
|
if (isActive) {
|
|
727
615
|
isProcessingRef.current = false;
|
|
728
616
|
}
|
|
729
617
|
return;
|
|
730
618
|
}
|
|
731
|
-
|
|
732
|
-
// Add a message with the approval request
|
|
733
|
-
var approvalMessageId = "approval-".concat(approval.original_thread_id);
|
|
619
|
+
var approvalMessageId = hitlOutcome.approvalMessageId;
|
|
734
620
|
reasoningStore.rename(placeholderId, approvalMessageId);
|
|
735
621
|
var approvalTrace = (_mapReasoningTrace = mapReasoningTrace(approval.reasoning)) !== null && _mapReasoningTrace !== void 0 ? _mapReasoningTrace : reasoningTraceFor(approvalMessageId);
|
|
736
|
-
commitToSession(sessionId, {
|
|
737
|
-
|
|
738
|
-
|
|
739
|
-
date: new Date(),
|
|
740
|
-
user: {
|
|
741
|
-
id: 'assistant',
|
|
742
|
-
name: 'Assistant'
|
|
743
|
-
},
|
|
744
|
-
role: ChatHistoryRole.ASSISTANT,
|
|
622
|
+
commitToSession(sessionId, buildHitlApprovalPendingMessage({
|
|
623
|
+
approvalMessageId: approvalMessageId,
|
|
624
|
+
accumulatedContent: accumulatedContent,
|
|
745
625
|
approval: approval,
|
|
746
|
-
approvalStatus: 'pending',
|
|
747
626
|
reasoning: approvalTrace
|
|
748
|
-
});
|
|
627
|
+
}));
|
|
749
628
|
if (isActive) {
|
|
750
629
|
isProcessingRef.current = false;
|
|
751
630
|
} else {
|
|
@@ -777,23 +656,23 @@ export var useChatManager = function useChatManager(_ref) {
|
|
|
777
656
|
};
|
|
778
657
|
var currentProject = project;
|
|
779
658
|
var sendMessage = useCallback(/*#__PURE__*/function () {
|
|
780
|
-
var
|
|
781
|
-
var
|
|
782
|
-
var willStartNewStream, _normalizeSendMessage, attachments, options,
|
|
659
|
+
var _ref3 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee2(message, attachmentsOrOptions, faqId, agentSuggestionId, mentions, fuaId, scId) {
|
|
660
|
+
var _options$projectChang, _contextRef$current$p;
|
|
661
|
+
var willStartNewStream, sendGate, _normalizeSendMessage, attachments, options, payloadFields, contextMessage, displayMessage, newMessageId, lastMessageWithProject, currentAgentFromMessages, sessionId, _contextRef$current, ctxChipsProject, ctxProject, ctxClient, ctxTask, streamingPlaceholderId, finalMessage, history, lastMessageProjectId, projectToRequest, projects, payloadData;
|
|
783
662
|
return _regeneratorRuntime.wrap(function (_context2) {
|
|
784
663
|
while (1) switch (_context2.prev = _context2.next) {
|
|
785
664
|
case 0:
|
|
786
|
-
if (canSendChatMessage(isProcessingRef.current, waitingResponse, loadingMessages)) {
|
|
787
|
-
_context2.next = 1;
|
|
788
|
-
break;
|
|
789
|
-
}
|
|
790
|
-
return _context2.abrupt("return");
|
|
791
|
-
case 1:
|
|
792
|
-
// Tope de concurrencia: si esta sesión no está generando y ya hay
|
|
793
|
-
// MAX_CONCURRENT_STREAMS activas, avisamos y no arrancamos otra.
|
|
794
665
|
willStartNewStream = !sessionStreamManager.isActive(currentChatId.current);
|
|
795
|
-
|
|
796
|
-
|
|
666
|
+
sendGate = resolveSendMessageGate({
|
|
667
|
+
isProcessing: isProcessingRef.current,
|
|
668
|
+
waitingResponse: waitingResponse,
|
|
669
|
+
loadingMessages: loadingMessages,
|
|
670
|
+
willStartNewStream: willStartNewStream,
|
|
671
|
+
activeStreamCount: sessionStreamManager.getActiveCount(),
|
|
672
|
+
maxConcurrent: MAX_CONCURRENT_STREAMS
|
|
673
|
+
});
|
|
674
|
+
if (!(sendGate === 'concurrency')) {
|
|
675
|
+
_context2.next = 1;
|
|
797
676
|
break;
|
|
798
677
|
}
|
|
799
678
|
document.dispatchEvent(new CustomEvent('snackbar-event', {
|
|
@@ -804,17 +683,25 @@ export var useChatManager = function useChatManager(_ref) {
|
|
|
804
683
|
}
|
|
805
684
|
}));
|
|
806
685
|
return _context2.abrupt("return");
|
|
686
|
+
case 1:
|
|
687
|
+
if (!(sendGate === 'busy')) {
|
|
688
|
+
_context2.next = 2;
|
|
689
|
+
break;
|
|
690
|
+
}
|
|
691
|
+
return _context2.abrupt("return");
|
|
807
692
|
case 2:
|
|
808
|
-
_normalizeSendMessage = normalizeSendMessageArgs(attachmentsOrOptions), attachments = _normalizeSendMessage.attachments, options = _normalizeSendMessage.options;
|
|
809
|
-
|
|
810
|
-
|
|
811
|
-
|
|
812
|
-
|
|
813
|
-
|
|
814
|
-
|
|
693
|
+
_normalizeSendMessage = normalizeSendMessageArgs(attachmentsOrOptions), attachments = _normalizeSendMessage.attachments, options = _normalizeSendMessage.options;
|
|
694
|
+
payloadFields = resolveSendMessagePayloadFields(options, {
|
|
695
|
+
faqId: faqId,
|
|
696
|
+
agentSuggestionId: agentSuggestionId,
|
|
697
|
+
mentions: mentions,
|
|
698
|
+
fuaId: fuaId,
|
|
699
|
+
scId: scId
|
|
700
|
+
});
|
|
701
|
+
contextMessage = buildContextMessage(payloadFields.mentions);
|
|
815
702
|
displayMessage = formatQuickActionMessageForDisplay(message, {
|
|
816
|
-
fuaId:
|
|
817
|
-
scId:
|
|
703
|
+
fuaId: payloadFields.fuaId,
|
|
704
|
+
scId: payloadFields.scId
|
|
818
705
|
});
|
|
819
706
|
isProcessingRef.current = true;
|
|
820
707
|
setActiveChatId(currentChatId.current);
|
|
@@ -830,7 +717,7 @@ export var useChatManager = function useChatManager(_ref) {
|
|
|
830
717
|
lastMessageWithProject = messagesRef.current.filter(function (msg) {
|
|
831
718
|
return msg.projectId;
|
|
832
719
|
}).at(-1);
|
|
833
|
-
currentAgentFromMessages = (
|
|
720
|
+
currentAgentFromMessages = resolveLastMessageAgentId(messagesRef.current);
|
|
834
721
|
sessionId = currentChatId.current;
|
|
835
722
|
_contextRef$current = contextRef.current, ctxChipsProject = _contextRef$current.chipsProject, ctxProject = _contextRef$current.project, ctxClient = _contextRef$current.client, ctxTask = _contextRef$current.task;
|
|
836
723
|
ensureSessionInSidebar({
|
|
@@ -845,7 +732,7 @@ export var useChatManager = function useChatManager(_ref) {
|
|
|
845
732
|
|
|
846
733
|
// No agregar projectId al mensaje del usuario - se determinará después
|
|
847
734
|
commitToSession(sessionId, _objectSpread({
|
|
848
|
-
id:
|
|
735
|
+
id: resolveUserQuestionMessageId(currentMessageId.current),
|
|
849
736
|
message: displayMessage,
|
|
850
737
|
date: new Date(),
|
|
851
738
|
user: currentUser,
|
|
@@ -870,68 +757,41 @@ export var useChatManager = function useChatManager(_ref) {
|
|
|
870
757
|
role: ChatHistoryRole.ASSISTANT
|
|
871
758
|
});
|
|
872
759
|
finalMessage = message;
|
|
873
|
-
|
|
874
|
-
|
|
875
|
-
}
|
|
876
|
-
history = messagesRef.current.map(function (historyMessage) {
|
|
877
|
-
return {
|
|
878
|
-
content: historyMessage.message,
|
|
879
|
-
role: historyMessage.user.id === authUser.id.toString() ? ChatHistoryRole.USER : ChatHistoryRole.ASSISTANT
|
|
880
|
-
};
|
|
881
|
-
});
|
|
760
|
+
finalMessage = resolveRentabilidadProjectFaqMessage(message, t('qa.items.rentabilidad_proyecto'), ((_options$projectChang = options.projectChanged) === null || _options$projectChang === void 0 ? void 0 : _options$projectChang.incomeType) || ((_contextRef$current$p = contextRef.current.project) === null || _contextRef$current$p === void 0 ? void 0 : _contextRef$current$p.incomeType));
|
|
761
|
+
history = buildChatHistoryFromMessages(messagesRef.current, authUser.id.toString());
|
|
882
762
|
lastMessageProjectId = lastMessageWithProject === null || lastMessageWithProject === void 0 ? void 0 : lastMessageWithProject.projectId;
|
|
883
763
|
projectToRequest = resolveProjectToRequest(ctxChipsProject, lastMessageProjectId);
|
|
884
764
|
_context2.next = 3;
|
|
885
765
|
return fetchProjects([projectToRequest]);
|
|
886
766
|
case 3:
|
|
887
767
|
projects = _context2.sent;
|
|
888
|
-
|
|
889
|
-
payloadAgentSuggestionId = agentSuggestionId !== null && agentSuggestionId !== void 0 ? agentSuggestionId : options.agentSuggestionId;
|
|
890
|
-
payloadData = _objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread({
|
|
768
|
+
payloadData = buildMaiaStreamRequestPayload({
|
|
891
769
|
message: finalMessage,
|
|
892
770
|
history: history,
|
|
893
771
|
projectId: projectToRequest,
|
|
894
|
-
|
|
895
|
-
userId: authUser.id.toString(),
|
|
896
|
-
firstName: authUser.firstName,
|
|
897
|
-
lastName: authUser.lastName,
|
|
898
|
-
companyId: authUser.company_id.toString(),
|
|
772
|
+
authUser: authUser,
|
|
899
773
|
chatId: currentChatId.current,
|
|
900
774
|
messageId: currentMessageId.current,
|
|
901
775
|
agentName: (agent === null || agent === void 0 ? void 0 : agent.name) || '',
|
|
902
|
-
agentId: currentAgentFromMessages
|
|
903
|
-
isWebSearchActive: isWebSearchActiveRef.current,
|
|
904
|
-
isDeepSearchActive: isDeepSearchActiveRef.current,
|
|
905
|
-
isAutoApproveActive: isAutoApproveActiveRef.current
|
|
906
|
-
|
|
907
|
-
|
|
908
|
-
|
|
909
|
-
projectName: projects[0].name
|
|
910
|
-
|
|
911
|
-
|
|
912
|
-
|
|
913
|
-
|
|
914
|
-
|
|
915
|
-
|
|
916
|
-
|
|
917
|
-
|
|
918
|
-
|
|
919
|
-
|
|
920
|
-
}
|
|
921
|
-
fuaId: payloadFuaId
|
|
922
|
-
} : {}), payloadScId ? {
|
|
923
|
-
scId: payloadScId
|
|
924
|
-
} : {}), (agent === null || agent === void 0 ? void 0 : agent.entity) != null ? {
|
|
925
|
-
agentEntity: agent.entity
|
|
926
|
-
} : {}), (agent === null || agent === void 0 ? void 0 : agent.type) != null ? {
|
|
927
|
-
agentType: agent.type
|
|
928
|
-
} : {}), (agent === null || agent === void 0 ? void 0 : agent.emoji) != null ? {
|
|
929
|
-
agentEmoji: agent.emoji
|
|
930
|
-
} : {}), contextMessage ? {
|
|
931
|
-
contextMessage: contextMessage
|
|
932
|
-
} : {}), payloadContextData ? {
|
|
933
|
-
contextData: payloadContextData
|
|
934
|
-
} : {});
|
|
776
|
+
agentId: resolveAgentIdForStream(currentAgentFromMessages, agent === null || agent === void 0 ? void 0 : agent.id),
|
|
777
|
+
isWebSearchActive: Boolean(isWebSearchActiveRef.current),
|
|
778
|
+
isDeepSearchActive: Boolean(isDeepSearchActiveRef.current),
|
|
779
|
+
isAutoApproveActive: Boolean(isAutoApproveActiveRef.current),
|
|
780
|
+
ctxProject: ctxProject,
|
|
781
|
+
ctxClient: ctxClient,
|
|
782
|
+
ctxTask: ctxTask,
|
|
783
|
+
projectName: projects !== null && projects !== void 0 && projects.length ? projects[0].name : undefined,
|
|
784
|
+
attachments: attachments,
|
|
785
|
+
faqId: payloadFields.faqId,
|
|
786
|
+
agentSuggestionId: payloadFields.agentSuggestionId,
|
|
787
|
+
fuaId: payloadFields.fuaId,
|
|
788
|
+
scId: payloadFields.scId,
|
|
789
|
+
agentEntity: agent === null || agent === void 0 ? void 0 : agent.entity,
|
|
790
|
+
agentType: agent === null || agent === void 0 ? void 0 : agent.type,
|
|
791
|
+
agentEmoji: agent === null || agent === void 0 ? void 0 : agent.emoji,
|
|
792
|
+
contextMessage: contextMessage,
|
|
793
|
+
contextData: payloadFields.contextData
|
|
794
|
+
});
|
|
935
795
|
askMaia(payloadData);
|
|
936
796
|
case 4:
|
|
937
797
|
case "end":
|
|
@@ -939,71 +799,52 @@ export var useChatManager = function useChatManager(_ref) {
|
|
|
939
799
|
}
|
|
940
800
|
}, _callee2);
|
|
941
801
|
}));
|
|
942
|
-
return function (_x0, _x1, _x10, _x11, _x12, _x13, _x14
|
|
943
|
-
return
|
|
802
|
+
return function (_x0, _x1, _x10, _x11, _x12, _x13, _x14) {
|
|
803
|
+
return _ref3.apply(this, arguments);
|
|
944
804
|
};
|
|
945
805
|
}(), [addMessage, commitToSession, event, askMaia, project, client, task, chipsProject, authUser, agent, t, waitingResponse, loadingMessages, isWebSearchActive, isDeepSearchActive]);
|
|
946
806
|
var changeProject = useCallback(function (option) {
|
|
947
807
|
if (!currentUserQuestion.current) return;
|
|
948
|
-
if (option.id
|
|
808
|
+
if (shouldUpdateProjectOnChange(option.id, project === null || project === void 0 ? void 0 : project.id)) {
|
|
949
809
|
setProject(option);
|
|
950
810
|
}
|
|
951
|
-
if (
|
|
952
|
-
var history = messagesRef.current.
|
|
953
|
-
|
|
954
|
-
content: historyMessage.message,
|
|
955
|
-
role: historyMessage.user.id === authUser.id.toString() ? ChatHistoryRole.USER : ChatHistoryRole.ASSISTANT
|
|
956
|
-
};
|
|
957
|
-
});
|
|
958
|
-
askMaia(_objectSpread(_objectSpread(_objectSpread(_objectSpread({
|
|
811
|
+
if (shouldResendAfterProjectChange(currentUserQuestion.current, project)) {
|
|
812
|
+
var history = buildChatHistoryFromMessages(messagesRef.current, authUser.id.toString());
|
|
813
|
+
askMaia(buildMaiaStreamRequestPayloadForProjectChange({
|
|
959
814
|
message: currentUserQuestion.current,
|
|
960
815
|
history: history,
|
|
961
|
-
|
|
962
|
-
|
|
963
|
-
userId: authUser.id.toString(),
|
|
964
|
-
firstName: authUser.firstName,
|
|
965
|
-
lastName: authUser.lastName,
|
|
966
|
-
companyId: authUser.company_id.toString(),
|
|
816
|
+
project: option,
|
|
817
|
+
authUser: authUser,
|
|
967
818
|
chatId: currentChatId.current,
|
|
968
819
|
messageId: currentMessageId.current,
|
|
969
820
|
agentName: (agent === null || agent === void 0 ? void 0 : agent.name) || '',
|
|
970
821
|
agentId: (agent === null || agent === void 0 ? void 0 : agent.id) || '',
|
|
971
|
-
isWebSearchActive: isWebSearchActiveRef.current,
|
|
972
|
-
isDeepSearchActive: isDeepSearchActiveRef.current,
|
|
973
|
-
isAutoApproveActive: isAutoApproveActiveRef.current
|
|
974
|
-
|
|
975
|
-
|
|
976
|
-
}
|
|
977
|
-
clientId: Number(option.clientId)
|
|
978
|
-
} : {}), (agent === null || agent === void 0 ? void 0 : agent.entity) != null ? {
|
|
979
|
-
agentEntity: agent.entity
|
|
980
|
-
} : {}), (agent === null || agent === void 0 ? void 0 : agent.type) != null ? {
|
|
981
|
-
agentType: agent.type
|
|
982
|
-
} : {}));
|
|
822
|
+
isWebSearchActive: Boolean(isWebSearchActiveRef.current),
|
|
823
|
+
isDeepSearchActive: Boolean(isDeepSearchActiveRef.current),
|
|
824
|
+
isAutoApproveActive: Boolean(isAutoApproveActiveRef.current),
|
|
825
|
+
agentEntity: agent === null || agent === void 0 ? void 0 : agent.entity,
|
|
826
|
+
agentType: agent === null || agent === void 0 ? void 0 : agent.type
|
|
827
|
+
}));
|
|
983
828
|
}
|
|
984
829
|
}, [project, setProject, askMaia, authUser, isWebSearchActive, agent]);
|
|
985
830
|
var retryMessage = useCallback(/*#__PURE__*/function () {
|
|
986
|
-
var
|
|
987
|
-
var
|
|
988
|
-
var sessionId, previousMessages, userMessage, turnId, useOrchestratorFallback, truncated, newMessageId, streamingPlaceholderId, placeholder, nextMessages, _contextRef$current2, ctxChipsProject, ctxProject, ctxClient, ctxTask, lastMessageWithProject, projectToRequest, currentAgentFromMessages, attachments, replayViaOrchestrator, result;
|
|
831
|
+
var _ref4 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee4(message) {
|
|
832
|
+
var _truncated$at;
|
|
833
|
+
var sessionId, retryBlock, previousMessages, userMessage, retryEligibility, turnId, useOrchestratorFallback, truncated, newMessageId, streamingPlaceholderId, placeholder, nextMessages, _contextRef$current2, ctxChipsProject, ctxProject, ctxClient, ctxTask, lastMessageWithProject, projectToRequest, currentAgentFromMessages, attachments, replayViaOrchestrator, result;
|
|
989
834
|
return _regeneratorRuntime.wrap(function (_context4) {
|
|
990
835
|
while (1) switch (_context4.prev = _context4.next) {
|
|
991
836
|
case 0:
|
|
992
|
-
if (!(isProcessingRef.current || waitingResponse || loadingMessages)) {
|
|
993
|
-
_context4.next = 1;
|
|
994
|
-
break;
|
|
995
|
-
}
|
|
996
|
-
return _context4.abrupt("return");
|
|
997
|
-
case 1:
|
|
998
837
|
sessionId = currentChatId.current;
|
|
999
|
-
|
|
1000
|
-
|
|
1001
|
-
|
|
1002
|
-
|
|
1003
|
-
|
|
1004
|
-
|
|
1005
|
-
|
|
1006
|
-
|
|
838
|
+
retryBlock = resolveRetryBlockReason({
|
|
839
|
+
isProcessing: isProcessingRef.current,
|
|
840
|
+
waitingResponse: waitingResponse,
|
|
841
|
+
loadingMessages: loadingMessages,
|
|
842
|
+
isSessionStreamActive: sessionStreamManager.isActive(sessionId),
|
|
843
|
+
activeStreamCount: sessionStreamManager.getActiveCount(),
|
|
844
|
+
maxConcurrent: MAX_CONCURRENT_STREAMS
|
|
845
|
+
});
|
|
846
|
+
if (!(retryBlock === 'concurrency')) {
|
|
847
|
+
_context4.next = 1;
|
|
1007
848
|
break;
|
|
1008
849
|
}
|
|
1009
850
|
document.dispatchEvent(new CustomEvent('snackbar-event', {
|
|
@@ -1014,31 +855,23 @@ export var useChatManager = function useChatManager(_ref) {
|
|
|
1014
855
|
}
|
|
1015
856
|
}));
|
|
1016
857
|
return _context4.abrupt("return");
|
|
1017
|
-
case
|
|
1018
|
-
|
|
1019
|
-
|
|
1020
|
-
return item.id === message.id;
|
|
1021
|
-
})) {
|
|
1022
|
-
_context4.next = 4;
|
|
858
|
+
case 1:
|
|
859
|
+
if (!(retryBlock != null)) {
|
|
860
|
+
_context4.next = 2;
|
|
1023
861
|
break;
|
|
1024
862
|
}
|
|
1025
863
|
return _context4.abrupt("return");
|
|
1026
|
-
case
|
|
864
|
+
case 2:
|
|
865
|
+
previousMessages = messagesRef.current;
|
|
1027
866
|
userMessage = findUserMessageForRetry(previousMessages, message);
|
|
1028
|
-
|
|
1029
|
-
|
|
1030
|
-
|
|
1031
|
-
}
|
|
1032
|
-
return _context4.abrupt("return");
|
|
1033
|
-
case 5:
|
|
1034
|
-
turnId = resolveRetryTurnId(message);
|
|
1035
|
-
useOrchestratorFallback = message.isFrontendCancelled && !((_message$memorySessio = message.memorySessionId) !== null && _message$memorySessio !== void 0 && _message$memorySessio.trim());
|
|
1036
|
-
if (!(!turnId && !useOrchestratorFallback)) {
|
|
1037
|
-
_context4.next = 6;
|
|
867
|
+
retryEligibility = resolveRetryEligibility(previousMessages, message, userMessage);
|
|
868
|
+
if (!(!retryEligibility.eligible || !userMessage)) {
|
|
869
|
+
_context4.next = 3;
|
|
1038
870
|
break;
|
|
1039
871
|
}
|
|
1040
872
|
return _context4.abrupt("return");
|
|
1041
|
-
case
|
|
873
|
+
case 3:
|
|
874
|
+
turnId = retryEligibility.turnId, useOrchestratorFallback = retryEligibility.useOrchestratorFallback;
|
|
1042
875
|
truncated = messagesWithoutRetriedTurn(previousMessages, message);
|
|
1043
876
|
isProcessingRef.current = true;
|
|
1044
877
|
retrySnapshotRef.current = previousMessages;
|
|
@@ -1069,19 +902,14 @@ export var useChatManager = function useChatManager(_ref) {
|
|
|
1069
902
|
}).at(-1);
|
|
1070
903
|
projectToRequest = resolveProjectToRequest(ctxChipsProject, lastMessageWithProject === null || lastMessageWithProject === void 0 ? void 0 : lastMessageWithProject.projectId);
|
|
1071
904
|
currentAgentFromMessages = ((_truncated$at = truncated.at(-1)) === null || _truncated$at === void 0 ? void 0 : _truncated$at.agentId) || message.agentId;
|
|
1072
|
-
attachments =
|
|
905
|
+
attachments = resolveRetryUserAttachments(userMessage);
|
|
1073
906
|
replayViaOrchestrator = /*#__PURE__*/function () {
|
|
1074
|
-
var
|
|
907
|
+
var _ref5 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee3() {
|
|
1075
908
|
var history, projects, result, _t;
|
|
1076
909
|
return _regeneratorRuntime.wrap(function (_context3) {
|
|
1077
910
|
while (1) switch (_context3.prev = _context3.next) {
|
|
1078
911
|
case 0:
|
|
1079
|
-
history = truncated.
|
|
1080
|
-
return {
|
|
1081
|
-
content: historyMessage.message,
|
|
1082
|
-
role: historyMessage.user.id === authUser.id.toString() ? ChatHistoryRole.USER : ChatHistoryRole.ASSISTANT
|
|
1083
|
-
};
|
|
1084
|
-
});
|
|
912
|
+
history = buildChatHistoryFromMessages(truncated, authUser.id.toString());
|
|
1085
913
|
if (!projectToRequest) {
|
|
1086
914
|
_context3.next = 2;
|
|
1087
915
|
break;
|
|
@@ -1097,40 +925,28 @@ export var useChatManager = function useChatManager(_ref) {
|
|
|
1097
925
|
case 3:
|
|
1098
926
|
projects = _t;
|
|
1099
927
|
_context3.next = 4;
|
|
1100
|
-
return askMaia(
|
|
928
|
+
return askMaia(buildMaiaStreamRequestPayload({
|
|
1101
929
|
message: userMessage.message,
|
|
1102
930
|
history: history,
|
|
1103
931
|
projectId: projectToRequest,
|
|
1104
|
-
|
|
1105
|
-
userId: authUser.id.toString(),
|
|
1106
|
-
firstName: authUser.firstName,
|
|
1107
|
-
lastName: authUser.lastName,
|
|
1108
|
-
companyId: authUser.company_id.toString(),
|
|
932
|
+
authUser: authUser,
|
|
1109
933
|
chatId: sessionId,
|
|
1110
934
|
messageId: newMessageId,
|
|
1111
935
|
agentName: (agent === null || agent === void 0 ? void 0 : agent.name) || '',
|
|
1112
|
-
agentId:
|
|
1113
|
-
isWebSearchActive: isWebSearchActiveRef.current,
|
|
1114
|
-
isDeepSearchActive: isDeepSearchActiveRef.current
|
|
1115
|
-
|
|
1116
|
-
|
|
1117
|
-
|
|
1118
|
-
|
|
1119
|
-
|
|
1120
|
-
|
|
1121
|
-
|
|
1122
|
-
|
|
1123
|
-
|
|
1124
|
-
attachments: attachments
|
|
1125
|
-
} : {}), (agent === null || agent === void 0 ? void 0 : agent.entity) != null ? {
|
|
1126
|
-
agentEntity: agent.entity
|
|
1127
|
-
} : {}), (agent === null || agent === void 0 ? void 0 : agent.type) != null ? {
|
|
1128
|
-
agentType: agent.type
|
|
1129
|
-
} : {}), (agent === null || agent === void 0 ? void 0 : agent.emoji) != null ? {
|
|
1130
|
-
agentEmoji: agent.emoji
|
|
1131
|
-
} : {}), userMessage.contextMessage ? {
|
|
936
|
+
agentId: resolveAgentIdForStream(currentAgentFromMessages, agent === null || agent === void 0 ? void 0 : agent.id),
|
|
937
|
+
isWebSearchActive: Boolean(isWebSearchActiveRef.current),
|
|
938
|
+
isDeepSearchActive: Boolean(isDeepSearchActiveRef.current),
|
|
939
|
+
isAutoApproveActive: Boolean(isAutoApproveActiveRef.current),
|
|
940
|
+
ctxProject: ctxProject,
|
|
941
|
+
ctxClient: ctxClient,
|
|
942
|
+
ctxTask: ctxTask,
|
|
943
|
+
projectName: projects !== null && projects !== void 0 && projects.length ? projects[0].name : undefined,
|
|
944
|
+
attachments: attachments,
|
|
945
|
+
agentEntity: agent === null || agent === void 0 ? void 0 : agent.entity,
|
|
946
|
+
agentType: agent === null || agent === void 0 ? void 0 : agent.type,
|
|
947
|
+
agentEmoji: agent === null || agent === void 0 ? void 0 : agent.emoji,
|
|
1132
948
|
contextMessage: userMessage.contextMessage
|
|
1133
|
-
}
|
|
949
|
+
}));
|
|
1134
950
|
case 4:
|
|
1135
951
|
result = _context3.sent;
|
|
1136
952
|
if (!result.started) {
|
|
@@ -1158,19 +974,19 @@ export var useChatManager = function useChatManager(_ref) {
|
|
|
1158
974
|
}, _callee3);
|
|
1159
975
|
}));
|
|
1160
976
|
return function replayViaOrchestrator() {
|
|
1161
|
-
return
|
|
977
|
+
return _ref5.apply(this, arguments);
|
|
1162
978
|
};
|
|
1163
979
|
}();
|
|
1164
980
|
if (!(useOrchestratorFallback || !turnId)) {
|
|
1165
|
-
_context4.next =
|
|
981
|
+
_context4.next = 5;
|
|
1166
982
|
break;
|
|
1167
983
|
}
|
|
1168
|
-
_context4.next =
|
|
984
|
+
_context4.next = 4;
|
|
1169
985
|
return replayViaOrchestrator();
|
|
1170
|
-
case
|
|
986
|
+
case 4:
|
|
1171
987
|
return _context4.abrupt("return");
|
|
1172
|
-
case
|
|
1173
|
-
_context4.next =
|
|
988
|
+
case 5:
|
|
989
|
+
_context4.next = 6;
|
|
1174
990
|
return retryCompletion(_objectSpread(_objectSpread(_objectSpread(_objectSpread({
|
|
1175
991
|
chatId: sessionId,
|
|
1176
992
|
messageId: newMessageId,
|
|
@@ -1188,23 +1004,23 @@ export var useChatManager = function useChatManager(_ref) {
|
|
|
1188
1004
|
} : {}), resolveClientPayload(ctxClient, ctxProject)), (ctxTask === null || ctxTask === void 0 ? void 0 : ctxTask.id) != null ? {
|
|
1189
1005
|
taskId: Number(ctxTask.id)
|
|
1190
1006
|
} : {}));
|
|
1191
|
-
case
|
|
1007
|
+
case 6:
|
|
1192
1008
|
result = _context4.sent;
|
|
1193
1009
|
if (!result.started) {
|
|
1194
|
-
_context4.next =
|
|
1010
|
+
_context4.next = 7;
|
|
1195
1011
|
break;
|
|
1196
1012
|
}
|
|
1197
1013
|
return _context4.abrupt("return");
|
|
1198
|
-
case
|
|
1014
|
+
case 7:
|
|
1199
1015
|
if (!(result.reason === 'turn_not_found')) {
|
|
1200
|
-
_context4.next =
|
|
1016
|
+
_context4.next = 9;
|
|
1201
1017
|
break;
|
|
1202
1018
|
}
|
|
1203
|
-
_context4.next =
|
|
1019
|
+
_context4.next = 8;
|
|
1204
1020
|
return replayViaOrchestrator();
|
|
1205
|
-
case
|
|
1021
|
+
case 8:
|
|
1206
1022
|
return _context4.abrupt("return");
|
|
1207
|
-
case
|
|
1023
|
+
case 9:
|
|
1208
1024
|
retrySnapshotRef.current = null;
|
|
1209
1025
|
messagesRef.current = previousMessages;
|
|
1210
1026
|
replaceMessages(previousMessages);
|
|
@@ -1221,18 +1037,18 @@ export var useChatManager = function useChatManager(_ref) {
|
|
|
1221
1037
|
}
|
|
1222
1038
|
}));
|
|
1223
1039
|
}
|
|
1224
|
-
case
|
|
1040
|
+
case 10:
|
|
1225
1041
|
case "end":
|
|
1226
1042
|
return _context4.stop();
|
|
1227
1043
|
}
|
|
1228
1044
|
}, _callee4);
|
|
1229
1045
|
}));
|
|
1230
|
-
return function (
|
|
1231
|
-
return
|
|
1046
|
+
return function (_x15) {
|
|
1047
|
+
return _ref4.apply(this, arguments);
|
|
1232
1048
|
};
|
|
1233
1049
|
}(), [waitingResponse, loadingMessages, replaceMessages, retryCompletion, askMaia, fetchProjects, authUser, agent, t, setActiveChatId]);
|
|
1234
1050
|
var handleFeedback = useCallback(/*#__PURE__*/function () {
|
|
1235
|
-
var
|
|
1051
|
+
var _ref6 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee5(feedbackProp, chatMessageId) {
|
|
1236
1052
|
var response;
|
|
1237
1053
|
return _regeneratorRuntime.wrap(function (_context5) {
|
|
1238
1054
|
while (1) switch (_context5.prev = _context5.next) {
|
|
@@ -1257,12 +1073,12 @@ export var useChatManager = function useChatManager(_ref) {
|
|
|
1257
1073
|
}
|
|
1258
1074
|
}, _callee5);
|
|
1259
1075
|
}));
|
|
1260
|
-
return function (
|
|
1261
|
-
return
|
|
1076
|
+
return function (_x16, _x17) {
|
|
1077
|
+
return _ref6.apply(this, arguments);
|
|
1262
1078
|
};
|
|
1263
1079
|
}(), []);
|
|
1264
1080
|
var handleApprovalDecision = useCallback(/*#__PURE__*/function () {
|
|
1265
|
-
var
|
|
1081
|
+
var _ref7 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee6(threadIds, decision, editedActions, metadata) {
|
|
1266
1082
|
var found, messageWithApproval, foundSessionId, approval, sessionId, messageId, newStatus, hitlContext, isActiveSession, streamMessageId, hitlCtx, releaseActiveProcessing, result;
|
|
1267
1083
|
return _regeneratorRuntime.wrap(function (_context6) {
|
|
1268
1084
|
while (1) switch (_context6.prev = _context6.next) {
|
|
@@ -1404,12 +1220,12 @@ export var useChatManager = function useChatManager(_ref) {
|
|
|
1404
1220
|
}
|
|
1405
1221
|
}, _callee6);
|
|
1406
1222
|
}));
|
|
1407
|
-
return function (_x19, _x20, _x21
|
|
1408
|
-
return
|
|
1223
|
+
return function (_x18, _x19, _x20, _x21) {
|
|
1224
|
+
return _ref7.apply(this, arguments);
|
|
1409
1225
|
};
|
|
1410
1226
|
}(), [authUser, agent, commitToSession, handleStreamError, handleStreamUpdate, handleStreamFinish, handleApprovalRequired, t]);
|
|
1411
1227
|
var initializeChat = useCallback(/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee7() {
|
|
1412
|
-
var _userInitialMessage$m, _userInitialMessage$a,
|
|
1228
|
+
var _userInitialMessage$m, _userInitialMessage$a, _ref9, _resolveProjectToRequ, hasInitialMessage, hasInitialAttachments, hasInitialFaq, hasInitialFua, hasInitialSc, history, _contextRef$current3, ctxChipsProject, ctxProject, ctxClient, ctxTask, projectToRequest, initialDisplayMessage;
|
|
1413
1229
|
return _regeneratorRuntime.wrap(function (_context7) {
|
|
1414
1230
|
while (1) switch (_context7.prev = _context7.next) {
|
|
1415
1231
|
case 0:
|
|
@@ -1448,7 +1264,7 @@ export var useChatManager = function useChatManager(_ref) {
|
|
|
1448
1264
|
};
|
|
1449
1265
|
});
|
|
1450
1266
|
_contextRef$current3 = contextRef.current, ctxChipsProject = _contextRef$current3.chipsProject, ctxProject = _contextRef$current3.project, ctxClient = _contextRef$current3.client, ctxTask = _contextRef$current3.task;
|
|
1451
|
-
projectToRequest = (
|
|
1267
|
+
projectToRequest = (_ref9 = (_resolveProjectToRequ = resolveProjectToRequest(ctxChipsProject, null)) !== null && _resolveProjectToRequ !== void 0 ? _resolveProjectToRequ : ctxProject === null || ctxProject === void 0 ? void 0 : ctxProject.id) !== null && _ref9 !== void 0 ? _ref9 : null;
|
|
1452
1268
|
initialDisplayMessage = formatQuickActionMessageForDisplay(userInitialMessage.message, {
|
|
1453
1269
|
fuaId: userInitialMessage.fuaId,
|
|
1454
1270
|
scId: userInitialMessage.scId
|
|
@@ -1554,4 +1370,4 @@ export var useChatManager = function useChatManager(_ref) {
|
|
|
1554
1370
|
isDisabled: waitingResponse || loadingMessages
|
|
1555
1371
|
};
|
|
1556
1372
|
};
|
|
1557
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1c2VDYWxsYmFjayIsInVzZVJlZiIsInVzZUVmZmVjdCIsInVzZVN0YXRlIiwiZmx1c2hTeW5jIiwidjQiLCJ1dWlkdjQiLCJ1c2VDaGF0TWVzc2FnZXMiLCJ1c2VPcmNoZXN0cmF0b3JTdHJlYW0iLCJ1c2VUIiwiZXh0cmFjdFRhc2tJZHNGcm9tUGVuZGluZ0FjdGlvbnNBcmdzIiwiZmluZE1lc3NhZ2VXaXRoQXBwcm92YWxCeVRocmVhZElkcyIsInJlc29sdmVBcHByb3ZhbERlY2lzaW9uU3RhdHVzIiwicmVzb2x2ZUNvbnRpbnVlU3RyZWFtRGVjaXNpb24iLCJtYXBBdXRoVXNlclRvQ2hhdE1lc3NhZ2VVc2VyIiwibm9ybWFsaXplQXNzaXN0YW50QXR0YWNobWVudHMiLCJub3JtYWxpemVTZW5kTWVzc2FnZUFyZ3MiLCJyZWFzb25pbmdUcmFjZUZvciIsInJlcGxhY2VUYXNrVXJsc1dpdGhUYWJTZWdtZW50IiwicmVzb2x2ZUFwcHJvdmVkUGVuZGluZ0FjdGlvbkZsYWdzIiwicmVzb2x2ZUNsaWVudFBheWxvYWQiLCJyZXNvbHZlQ3JlYXRlQWdlbnRGb2xsb3dVcCIsInJlc29sdmVFZGl0QWdlbnRGb2xsb3dVcCIsInJlc29sdmVQcm9qZWN0RGFzaGJvYXJkU3luYyIsInJlc29sdmVQcm9qZWN0VG9SZXF1ZXN0IiwicmVzb2x2ZVN0cmVhbUVycm9yUHJlc2VudGF0aW9uIiwicmVzb2x2ZVRhc2tJZHNGb3JEYXNoYm9hcmQiLCJzaG91bGRTeW5jVGFza0Rhc2hib2FyZCIsInNob3VsZEJsb2NrQ29uY3VycmVudFN0cmVhbVN0YXJ0Iiwic2hvdWxkUmVmZXRjaE9wZW5UYXNrUGFuZWwiLCJjYW5TZW5kQ2hhdE1lc3NhZ2UiLCJpc1Rhc2tEZWxldGVUb29sTmFtZSIsImlzVGFza0VkaXRUb29sTmFtZSIsInVzZVVzZXIiLCJ1c2VHbG9iYWxDb250ZXh0IiwiRVZFTlRTIiwidXNlRXZlbnQiLCJtYWlhIiwiRmVlZGJhY2siLCJDaGF0SGlzdG9yeVJvbGUiLCJidWlsZENvbnRleHRNZXNzYWdlIiwiZm9ybWF0UXVpY2tBY3Rpb25NZXNzYWdlRm9yRGlzcGxheSIsInVzZVByb2plY3RzIiwidXNlVGFiVGFza0RlZmF1bHQiLCJUQVNLX1VSTF9SRUdFWF9QQVRURVJOIiwiZGlzcGF0Y2hNYWlhSG91cnNDaGFyZ2VkIiwiaXNIb3Vyc0NoYXJnZVRvb2wiLCJmZXRjaEFnZW50RGV0YWlsIiwiYnVpbGRIaXRsQWN0aW9uVHlwZUxpc3QiLCJnZXRIaXRsQW5hbHl0aWNzQWdlbnRUeXBlIiwibm9ybWFsaXplSGl0bFRvb2xOYW1lIiwidHJhY2tNYW51YWxIaXRsRXZlbnRzIiwic2Vzc2lvblN0cmVhbWluZ1RleHQiLCJ1c2VTZXNzaW9uc1N0b3JlIiwidXNlU2Vzc2lvbk1ldGEiLCJzZXNzaW9uU3RyZWFtTWFuYWdlciIsIk1BWF9DT05DVVJSRU5UX1NUUkVBTVMiLCJhY3RpdmVWaWV3Iiwibm90aWZ5U2Vzc2lvbkZpbmlzaGVkSW5CYWNrZ3JvdW5kIiwiYnVpbGRTaWRlYmFyU2Vzc2lvblRpdGxlIiwiZW5zdXJlU2Vzc2lvbkluU2lkZWJhciIsImlzU3RyZWFtaW5nUGxhY2Vob2xkZXJNZXNzYWdlSWQiLCJzdHJlYW1pbmdQbGFjZWhvbGRlck1lc3NhZ2VJZCIsImZpbmRVc2VyTWVzc2FnZUZvclJldHJ5IiwibWVzc2FnZXNXaXRob3V0UmV0cmllZFR1cm4iLCJyZXNvbHZlUmV0cnlUdXJuSWQiLCJnZXRDaGF0c1N0b3JlU3RhdGUiLCJ1c2VDaGF0c1N0b3JlIiwicmVhc29uaW5nU3RvcmUiLCJtYXBSZWFzb25pbmdUcmFjZSIsInVzZVN0YWJsZUNhbGxiYWNrcyIsImF1dGhVc2VyIiwiY3VycmVudFVzZXIiLCJuZXh0VXNlciIsImN1cnJlbnQiLCJpZCIsIm5hbWUiLCJhdmF0YXIiLCJ1c2VDaGF0TWFuYWdlciIsIl9yZWYiLCJpbml0aWFsQ2hhdElkIiwiY2hhdElkIiwidXNlckluaXRpYWxNZXNzYWdlIiwib25FcnJvciIsIl9yZWYkYWdlbnRzIiwiYWdlbnRzIiwiX3VzZVQiLCJ0IiwiX3VzZUdsb2JhbENvbnRleHQiLCJwcm9qZWN0Iiwic2V0UHJvamVjdCIsImNsaWVudCIsInNldENsaWVudCIsInRhc2siLCJzZXRUYXNrIiwiYWdlbnQiLCJpc1dlYlNlYXJjaEFjdGl2ZSIsImlzRGVlcFNlYXJjaEFjdGl2ZSIsImlzQXV0b0FwcHJvdmVBY3RpdmUiLCJjaGlwc1Byb2plY3QiLCJzZXRDaGlwc1Byb2plY3QiLCJldmVudCIsIl91c2VQcm9qZWN0cyIsImZldGNoUHJvamVjdHMiLCJfdXNlU3RhYmxlQ2FsbGJhY2tzIiwiX3VzZVRhYlRhc2tEZWZhdWx0IiwiZ2V0VGFiVGFza0RlZmF1bHQiLCJjdXJyZW50TWVzc2FnZUlkIiwiY3VycmVudFVzZXJRdWVzdGlvbiIsImN1cnJlbnRDaGF0SWQiLCJzZXRBY3RpdmVDaGF0SWQiLCJzdGF0ZSIsInJlcG9ydGVkRXZlbnQiLCJtZXNzYWdlc1JlZiIsImxhc3RNYW51YWxBcHByb3ZhbFJlZiIsInRyYWNrZWRNYW51YWxIaXRsS2V5c1JlZiIsIlNldCIsImhpdGxFeGVjdXRpb25Db250ZXh0UmVmIiwicmV0cnlTbmFwc2hvdFJlZiIsImlzUHJvY2Vzc2luZ1JlZiIsImZpcnN0VGltZVJlZiIsInN0cmVhbWluZ1BsYWNlaG9sZGVySWRSZWYiLCJhY3RpdmVTdHJlYW1DaGF0SWRSZWYiLCJjbGVhclN0cmVhbVVpUmVmIiwidW5kZWZpbmVkIiwiX3VzZVN0YXRlIiwiX3VzZVN0YXRlMiIsIl9zbGljZWRUb0FycmF5IiwiYWN0aXZlTG9hZGluZ3MiLCJzZXRBY3RpdmVMb2FkaW5ncyIsIl91c2VTdGF0ZTMiLCJfdXNlU3RhdGU0IiwiYWN0aXZlU2Vzc2lvbklkIiwic2V0QWN0aXZlU2Vzc2lvbklkIiwiaXNNb3VudGVkUmVmIiwibGFzdEhhbmRsZWRUZXJtaW5hbFJlZiIsImlzV2ViU2VhcmNoQWN0aXZlUmVmIiwiaXNEZWVwU2VhcmNoQWN0aXZlUmVmIiwiaXNBdXRvQXBwcm92ZUFjdGl2ZVJlZiIsImNvbnRleHRSZWYiLCJfdXNlQ2hhdE1lc3NhZ2VzIiwibG9hZGluZ01lc3NhZ2VzIiwibWVzc2FnZXMiLCJpc0xvYWRpbmdNb3JlTWVzc2FnZXMiLCJsb2FkTWVzc2FnZXMiLCJhZGRNZXNzYWdlIiwicmVtb3ZlTWVzc2FnZSIsInJlcGxhY2VNZXNzYWdlcyIsImhhbmRsZVNjcm9sbCIsImNvbW1pdFRvU2Vzc2lvbiIsInNlc3Npb25JZCIsIm1lc3NhZ2UiLCJnZXRTdGF0ZSIsImlzIiwiZHJvcEZyb21TZXNzaW9uIiwibWVzc2FnZUlkIiwiY2xlYXJTZXNzaW9uVGFpbCIsInNldE1lc3NhZ2VzIiwic2V0IiwiYWN0aXZlU2Vzc2lvbk1ldGEiLCJfYWN0aXZlU2Vzc2lvbk1ldGEkZmkiLCJzdGF0dXMiLCJpc1Rlcm1pbmFsIiwia2V5IiwiY29uY2F0IiwiZmluaXNoZWRBdCIsInRhaWwiLCJnZXRNZXNzYWdlcyIsImhhc1N0YWxlUGxhY2Vob2xkZXIiLCJzb21lIiwibXNnIiwiZm9yY2UiLCJjdXN0b21FdmVudCIsIkN1c3RvbUV2ZW50IiwiZGV0YWlsIiwiZG9jdW1lbnQiLCJkaXNwYXRjaEV2ZW50IiwicHJldmlvdXNJbml0aWFsQ2hhdElkUmVmIiwicHJldmlvdXNJbml0aWFsQ2hhdElkIiwiaXNBY3RpdmUiLCJoYW5kbGVTdHJlYW1FcnJvciIsImN0eCIsImVycm9yTWVzc2FnZSIsImVycm9yUmF3TWVzc2FnZSIsInBsYWNlaG9sZGVySWQiLCJjbGVhciIsInJldHJ5U25hcHNob3QiLCJzaG93Iiwic2V2ZXJpdHkiLCJfcmVzb2x2ZVN0cmVhbUVycm9yUHIiLCJpc0FjY2Vzc0RlbmllZCIsImlzUHJvbXB0VG9vTG9uZyIsInRva2Vuc1VzZWQiLCJzaG93UmV0cnkiLCJ1c2VkIiwiX29iamVjdFNwcmVhZCIsImlzRXJyb3IiLCJzdWdnZXN0aW9ucyIsImRhdGUiLCJEYXRlIiwidXNlciIsInJvbGUiLCJBU1NJU1RBTlQiLCJtYXJrQ2hhdEFzVW5yZWFkIiwiaGFuZGxlU3RyZWFtVXBkYXRlIiwiY29udGVudCIsInBsYWNlaG9sZGVyRXhpc3RzIiwic3RhcnQiLCJzZXRUZXh0IiwiaGFuZGxlU3RyZWFtRmluaXNoIiwiX3JlZjIiLCJfYXN5bmNUb0dlbmVyYXRvciIsIl9yZWdlbmVyYXRvclJ1bnRpbWUiLCJtYXJrIiwiX2NhbGxlZSIsInNvdXJjZXMiLCJtZW1vcnlTZXNzaW9uSWQiLCJyYXdBdHRhY2htZW50cyIsImNvbXBsZXRlZEFnZW50SWQiLCJfcmVzb2x2ZWRDb250ZXh0IiwicmVhc29uaW5nIiwiX3JlYXNvbmluZ1RyYWNlRm9yIiwiX3ByZXZpb3VzTWVzc2FnZSRhcHByIiwiX3dpbmRvdyR0YXNrUGFuZWwiLCJfbWFudWFsQXBwcm92YWwkdG9vbEEiLCJ0ZW1wTWVzc2FnZUlkIiwiYXR0YWNobWVudHMiLCJmaW5hbE1lc3NhZ2VJZCIsImZpbmFsVHJhY2UiLCJ0YXNrVXJsUmVnZXgiLCJtYXRjaGVzIiwiY29udGVudFRvQWRkIiwicHJldmlvdXNNZXNzYWdlIiwiaGFzQXBwcm92YWxJblByZXZpb3VzTWVzc2FnZSIsInBlbmRpbmdBY3Rpb25zIiwiX3Jlc29sdmVBcHByb3ZlZFBlbmRpIiwid2FzVGFza0NyZWF0aW9uIiwid2FzVGFza0VkaXQiLCJ3YXNUYXNrRGVsZXRlIiwid2FzQ3JlYXRlQWdlbnRBcHByb3ZlZCIsIndhc0NvbmZpZ3VyZUFnZW50QWNjZXNzQXBwcm92ZWQiLCJ3YXNFZGl0QWdlbnRBcHByb3ZlZCIsImNyZWF0ZUFnZW50Rm9sbG93VXAiLCJtYW51YWxBcHByb3ZhbEZvckFuYWx5dGljcyIsIndhc01hbnVhbENyZWF0ZUFnZW50QXBwcm92ZWQiLCJlZGl0QWdlbnRGb2xsb3dVcCIsInRhc2tJZHNGb3JEYXNoYm9hcmQiLCJzaG91bGRTeW5jRGFzaGJvYXJkIiwidGFza0lkcyIsInRhYiIsInRhYlNlZ21lbnQiLCJsYXN0UHJvamVjdE1lc3NhZ2UiLCJjb250ZXh0UHJvamVjdElkUmF3IiwiY29udGV4dFByb2plY3RJZCIsIl9yZXNvbHZlUHJvamVjdERhc2hibyIsImlzT25Qcm9qZWN0Um91dGUiLCJfd2luZG93JG5ld1Byb2plY3REYXMiLCJfd2luZG93JG5ld1Byb2plY3REYXMyIiwiX3dpbmRvdyRuZXdQcm9qZWN0RGFzMyIsIl93aW5kb3ckbmV3UHJvamVjdERhczQiLCJfd2luZG93JG5ld1Byb2plY3REYXM1IiwiX3dpbmRvdyRuZXdQcm9qZWN0RGFzNiIsIm9wZW5UYXNrUGFuZWxJZCIsIm1hbnVhbEFwcHJvdmFsIiwibWFudWFsV2FzVGFza0VkaXQiLCJtYW51YWxXYXNUYXNrRGVsZXRlIiwiaG91cnNUb29sc0Zyb21BcHByb3ZhbCIsIndhc0hvdXJzQ2hhcmdlQXBwcm92ZWQiLCJtYW51YWxIb3Vyc1Rvb2wiLCJ3YXNIb3Vyc0NoYXJnZU1hbnVhbEFwcHJvdmVkIiwidG9vbHMiLCJtYW51YWxQc2V1ZG9BY3Rpb24iLCJhZmZlY3RlZFRhc2tJZHMiLCJfd2luZG93JHRhc2tQYW5lbDIiLCJfd2luZG93JHRhc2tQYW5lbDIkcmUiLCJfZ2V0Q2hhdHNTdG9yZVN0YXRlIiwiaXNDaGF0Vmlld1Zpc2libGUiLCJtYXJrQ2hhdEFzUmVhZCIsIndyYXAiLCJfY29udGV4dCIsInByZXYiLCJuZXh0IiwicmVuYW1lIiwibGVuZ3RoIiwiYWJydXB0IiwiUmVnRXhwIiwiX3RvQ29uc3VtYWJsZUFycmF5IiwibWF0Y2hBbGwiLCJmaWx0ZXIiLCJtIiwiYXQiLCJhcHByb3ZhbCIsInBlbmRpbmdfYWN0aW9ucyIsImFwcHJvdmFsU3RhdHVzIiwiQm9vbGVhbiIsIndpbmRvdyIsIk1BSUFfQ0hBVF9BSV9GRUFUVVJFX0FDQ0VTU19NVUxUSV9BR0VOVFMiLCJhaUNoYXRIaXRsT3B0aW9uIiwiYWdlbnRfdHlwZSIsImFjdGlvbl90eXBlIiwiZGVjaXNpb24iLCJvcHRpb24iLCJ0cmltIiwiY3JlYXRlZF9hZ2VudF9pZCIsInRvb2xOYW1lIiwicmVzb2x1dGlvbl9zb3VyY2UiLCJzZW50IiwicHJvamVjdElkIiwicGFyc2VJbnQiLCJTdHJpbmciLCJsb2NhdGlvbiIsInBhdGhuYW1lIiwibmV3UHJvamVjdERhc2hib2FyZCIsImFkZEV4aXN0aW5nVGFza1RvRGFzaGJvYXJkIiwiY2FsbCIsImVkaXRFeGlzdGluZ1Rhc2tJbkRhc2hib2FyZCIsImRlbGV0ZUV4aXN0aW5nVGFza0Zyb21EYXNoYm9hcmQiLCJ0YXNrUGFuZWwiLCJ0YXNrSWQiLCJtYXAiLCJhY3Rpb24iLCJ0b29sX25hbWUiLCJzb3VyY2UiLCJ0b29sX2FyZ3MiLCJ0b29sQXJncyIsInJlZmV0Y2hUYXNrIiwiYWdlbnRJZCIsInRoZW4iLCJjaGF0QWdlbnQiLCJlcnIiLCJjb25zb2xlIiwiZXJyb3IiLCJzdG9wIiwiX3giLCJfeDIiLCJfeDMiLCJfeDQiLCJfeDUiLCJfeDYiLCJfeDciLCJfeDgiLCJfeDkiLCJhcHBseSIsImFyZ3VtZW50cyIsImhhbmRsZVN0cmVhbVN0b3AiLCJwYXJ0aWFsVGV4dCIsInN0b3BwZWRUcmFjZSIsInN0ZXBzIiwiZmluaXNoIiwicmVtb3ZlIiwiaXNGcm9udGVuZENhbmNlbGxlZCIsImhhbmRsZUFwcHJvdmFsUmVxdWlyZWQiLCJhY2N1bXVsYXRlZENvbnRlbnQiLCJfYXBwcm92YWwkcGVuZGluZ19hY3QiLCJfbWFwUmVhc29uaW5nVHJhY2UiLCJoaXRsQ29udGV4dCIsIm9yaWdpbmFsX3RocmVhZF9pZCIsIm1lc3NhZ2VUZXh0IiwidGhyZWFkSWRzIiwidGhyZWFkX2lkIiwibWFudWFsX2FwcHJvdmFsX2RldGVjdGVkIiwiYXV0b19hcHByb3ZlZCIsImFwcHJvdmFsX3N0YXR1cyIsIl9hcHByb3ZhbCRwZW5kaW5nX2FjdDIiLCJfcmVmMyIsIl90b29sX25hbWUiLCJfdG9vbF9hcmdzIiwiaW1wcmVzc2lvbiIsImFpQ2hhdEhpdGwiLCJmaXJzdEFjdGlvbiIsImFwcHJvdmFsTWVzc2FnZUlkIiwiYXBwcm92YWxUcmFjZSIsIl91c2VPcmNoZXN0cmF0b3JTdHJlYSIsIm9uU3RyZWFtVXBkYXRlIiwib25GaW5pc2hTdHJlYW0iLCJvblN0b3AiLCJvbkFwcHJvdmFsUmVxdWlyZWQiLCJhc2tNYWlhIiwicmV0cnlDb21wbGV0aW9uIiwid2FpdGluZ1Jlc3BvbnNlIiwiaXNMb2FkaW5nIiwiaXNXcml0aW5nIiwibG9hZGluZ01lc3NhZ2UiLCJzdHJlYW1BY3Rpdml0eSIsInVwZGF0ZVN0cmVhbUFjdGl2aXR5Iiwic3RvcFN0cmVhbWluZyIsImN1cnJlbnRQcm9qZWN0Iiwic2VuZE1lc3NhZ2UiLCJfcmVmNCIsIl9jYWxsZWUyIiwiYXR0YWNobWVudHNPck9wdGlvbnMiLCJmYXFJZCIsImFnZW50U3VnZ2VzdGlvbklkIiwibWVudGlvbnMiLCJmdWFJZCIsInNjSWQiLCJjb250ZXh0RGF0YSIsIl9tZXNzYWdlc1JlZiRjdXJyZW50Iiwid2lsbFN0YXJ0TmV3U3RyZWFtIiwiX25vcm1hbGl6ZVNlbmRNZXNzYWdlIiwib3B0aW9ucyIsImVmZmVjdGl2ZU1lbnRpb25zIiwiY29udGV4dE1lc3NhZ2UiLCJwYXlsb2FkRnVhSWQiLCJwYXlsb2FkU2NJZCIsInBheWxvYWRDb250ZXh0RGF0YSIsImRpc3BsYXlNZXNzYWdlIiwibmV3TWVzc2FnZUlkIiwibGFzdE1lc3NhZ2VXaXRoUHJvamVjdCIsImN1cnJlbnRBZ2VudEZyb21NZXNzYWdlcyIsIl9jb250ZXh0UmVmJGN1cnJlbnQiLCJjdHhDaGlwc1Byb2plY3QiLCJjdHhQcm9qZWN0IiwiY3R4Q2xpZW50IiwiY3R4VGFzayIsInN0cmVhbWluZ1BsYWNlaG9sZGVySWQiLCJmaW5hbE1lc3NhZ2UiLCJfb3B0aW9ucyRwcm9qZWN0Q2hhbmciLCJfY29udGV4dFJlZiRjdXJyZW50JHAiLCJoaXN0b3J5IiwibGFzdE1lc3NhZ2VQcm9qZWN0SWQiLCJwcm9qZWN0VG9SZXF1ZXN0IiwicHJvamVjdHMiLCJwYXlsb2FkRmFxSWQiLCJwYXlsb2FkQWdlbnRTdWdnZXN0aW9uSWQiLCJwYXlsb2FkRGF0YSIsIl9jb250ZXh0MiIsImdldEFjdGl2ZUNvdW50IiwicG1BaVR5cGVkVGV4dCIsInRpdGxlIiwiVVNFUiIsInByb2plY3RDaGFuZ2VkIiwiaW5jb21lVHlwZSIsImhpc3RvcnlNZXNzYWdlIiwidG9TdHJpbmciLCJsYW5nIiwidXNlcklkIiwiZmlyc3ROYW1lIiwibGFzdE5hbWUiLCJjb21wYW55SWQiLCJjb21wYW55X2lkIiwiYWdlbnROYW1lIiwiZmVlSWQiLCJOdW1iZXIiLCJwcm9qZWN0TmFtZSIsInRhc2tOYW1lIiwiZW50aXR5IiwiYWdlbnRFbnRpdHkiLCJ0eXBlIiwiYWdlbnRUeXBlIiwiZW1vamkiLCJhZ2VudEVtb2ppIiwiX3gwIiwiX3gxIiwiX3gxMCIsIl94MTEiLCJfeDEyIiwiX3gxMyIsIl94MTQiLCJfeDE1IiwiY2hhbmdlUHJvamVjdCIsImNsaWVudElkIiwicmV0cnlNZXNzYWdlIiwiX3JlZjUiLCJfY2FsbGVlNCIsIl91c2VyTWVzc2FnZSRtZXNzYWdlIiwiX3VzZXJNZXNzYWdlJGF0dGFjaG1lIiwiX3VzZXJNZXNzYWdlJHNvdXJjZXMiLCJfbWVzc2FnZSRtZW1vcnlTZXNzaW8iLCJfdHJ1bmNhdGVkJGF0IiwicHJldmlvdXNNZXNzYWdlcyIsInVzZXJNZXNzYWdlIiwidHVybklkIiwidXNlT3JjaGVzdHJhdG9yRmFsbGJhY2siLCJ0cnVuY2F0ZWQiLCJwbGFjZWhvbGRlciIsIm5leHRNZXNzYWdlcyIsIl9jb250ZXh0UmVmJGN1cnJlbnQyIiwicmVwbGF5VmlhT3JjaGVzdHJhdG9yIiwicmVzdWx0IiwiX2NvbnRleHQ0IiwiaXRlbSIsIkFycmF5IiwiaXNBcnJheSIsIl9yZWY2IiwiX2NhbGxlZTMiLCJfdCIsIl9jb250ZXh0MyIsInN0YXJ0ZWQiLCJyZWFzb24iLCJfeDE2IiwiaGFuZGxlRmVlZGJhY2siLCJfcmVmNyIsIl9jYWxsZWU1IiwiZmVlZGJhY2tQcm9wIiwiY2hhdE1lc3NhZ2VJZCIsInJlc3BvbnNlIiwiX2NvbnRleHQ1IiwiQ2hhdHMiLCJ3YXNIZWxwZnVsQ2hhdCIsIlRIVU1CU19VUCIsIndhc0hlbHBmdWwiLCJfeDE3IiwiX3gxOCIsImhhbmRsZUFwcHJvdmFsRGVjaXNpb24iLCJfcmVmOCIsIl9jYWxsZWU2IiwiZWRpdGVkQWN0aW9ucyIsIm1ldGFkYXRhIiwiZm91bmQiLCJtZXNzYWdlV2l0aEFwcHJvdmFsIiwiZm91bmRTZXNzaW9uSWQiLCJuZXdTdGF0dXMiLCJpc0FjdGl2ZVNlc3Npb24iLCJzdHJlYW1NZXNzYWdlSWQiLCJoaXRsQ3R4IiwicmVsZWFzZUFjdGl2ZVByb2Nlc3NpbmciLCJfY29udGV4dDYiLCJnZXQiLCJzZXNzaW9uX2lkIiwic3RhcnRDb250aW51ZVN0cmVhbSIsImNvbnRpbnVlUmVxdWVzdCIsImhpdGxFeGVjdXRpb25Db250ZXh0IiwiY2FsbGJhY2tzIiwiZmluaXNoUGF5bG9hZCIsInJlc29sdmVkQ29udGV4dCIsImFwcHJvdmFsUGF5bG9hZCIsIl94MTkiLCJfeDIwIiwiX3gyMSIsIl94MjIiLCJpbml0aWFsaXplQ2hhdCIsIl9jYWxsZWU3IiwiX3VzZXJJbml0aWFsTWVzc2FnZSRtIiwiX3VzZXJJbml0aWFsTWVzc2FnZSRhIiwiX3JlZjAiLCJfcmVzb2x2ZVByb2plY3RUb1JlcXUiLCJoYXNJbml0aWFsTWVzc2FnZSIsImhhc0luaXRpYWxBdHRhY2htZW50cyIsImhhc0luaXRpYWxGYXEiLCJoYXNJbml0aWFsRnVhIiwiaGFzSW5pdGlhbFNjIiwiX2NvbnRleHRSZWYkY3VycmVudDMiLCJpbml0aWFsRGlzcGxheU1lc3NhZ2UiLCJfY29udGV4dDciLCJyZXNldENoYXQiLCJwcmV2aW91c1Nlc3Npb25JZCIsInN0b3BHZW5lcmF0aW9uIiwiaXNEaXNhYmxlZCJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9ob29rcy91c2VDaGF0TWFuYWdlci91c2VDaGF0TWFuYWdlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSByYWRpeCAqL1xuLyogZXNsaW50LWRpc2FibGUgbm8tbmVzdGVkLXRlcm5hcnkgKi9cbi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1ub24tbnVsbC1hc3NlcnRlZC1vcHRpb25hbC1jaGFpbiAqL1xuLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSAqL1xuaW1wb3J0IHsgdXNlQ2FsbGJhY2ssIHVzZVJlZiwgdXNlRWZmZWN0LCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgZmx1c2hTeW5jIH0gZnJvbSAncmVhY3QtZG9tJ1xuaW1wb3J0IHsgdjQgYXMgdXVpZHY0IH0gZnJvbSAndXVpZCdcbmltcG9ydCB7IHVzZUNoYXRNZXNzYWdlcyB9IGZyb20gJy4uL3VzZUNoYXRNZXNzYWdlcydcbmltcG9ydCB7IHVzZU9yY2hlc3RyYXRvclN0cmVhbSB9IGZyb20gJy4uL3VzZU9yY2hlc3RyYXRvclN0cmVhbSdcbmltcG9ydCB7IHVzZVQgfSBmcm9tICcuLi91c2VUJ1xuaW1wb3J0IHsgQXR0YWNobWVudEZpbGUgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL21vbGVjdWxlcy9DaGF0Rm9vdGVyL0NoYXRGb290ZXInXG5pbXBvcnQge1xuICBleHRyYWN0VGFza0lkc0Zyb21QZW5kaW5nQWN0aW9uc0FyZ3MsXG4gIGZpbmRNZXNzYWdlV2l0aEFwcHJvdmFsQnlUaHJlYWRJZHMsXG4gIHJlc29sdmVBcHByb3ZhbERlY2lzaW9uU3RhdHVzLFxuICByZXNvbHZlQ29udGludWVTdHJlYW1EZWNpc2lvbixcbiAgbWFwQXV0aFVzZXJUb0NoYXRNZXNzYWdlVXNlcixcbiAgbm9ybWFsaXplQXNzaXN0YW50QXR0YWNobWVudHMsXG4gIG5vcm1hbGl6ZVNlbmRNZXNzYWdlQXJncyxcbiAgcmVhc29uaW5nVHJhY2VGb3IsXG4gIHJlcGxhY2VUYXNrVXJsc1dpdGhUYWJTZWdtZW50LFxuICByZXNvbHZlQXBwcm92ZWRQZW5kaW5nQWN0aW9uRmxhZ3MsXG4gIHJlc29sdmVDbGllbnRQYXlsb2FkLFxuICByZXNvbHZlQ3JlYXRlQWdlbnRGb2xsb3dVcCxcbiAgcmVzb2x2ZUVkaXRBZ2VudEZvbGxvd1VwLFxuICByZXNvbHZlUHJvamVjdERhc2hib2FyZFN5bmMsXG4gIHJlc29sdmVQcm9qZWN0VG9SZXF1ZXN0LFxuICByZXNvbHZlU3RyZWFtRXJyb3JQcmVzZW50YXRpb24sXG4gIHJlc29sdmVUYXNrSWRzRm9yRGFzaGJvYXJkLFxuICBzaG91bGRTeW5jVGFza0Rhc2hib2FyZCxcbiAgc2hvdWxkQmxvY2tDb25jdXJyZW50U3RyZWFtU3RhcnQsXG4gIHNob3VsZFJlZmV0Y2hPcGVuVGFza1BhbmVsLFxuICBjYW5TZW5kQ2hhdE1lc3NhZ2UsXG4gIGlzVGFza0RlbGV0ZVRvb2xOYW1lLFxuICBpc1Rhc2tFZGl0VG9vbE5hbWUsXG59IGZyb20gJy4vdXNlQ2hhdE1hbmFnZXIuaGVscGVycydcbmltcG9ydCB7IFNlbmRNZXNzYWdlT3B0aW9ucywgVXNlQ2hhdE1hbmFnZXJQcm9wcyB9IGZyb20gJy4vdXNlQ2hhdE1hbmFnZXIuaW50ZXJmYWNlJ1xuaW1wb3J0IHsgdXNlVXNlciwgQ09SVXNlciB9IGZyb20gJy4uLy4uL2NvbnRleHQvY29yLXVzZXInXG5pbXBvcnQgeyB1c2VHbG9iYWxDb250ZXh0IH0gZnJvbSAnLi4vLi4vY29udGV4dC9nbG9iYWwtY29udGV4dCdcbmltcG9ydCB7IEVWRU5UUywgdXNlRXZlbnQgfSBmcm9tICcuLi91c2VFdmVudCdcbmltcG9ydCBtYWlhIGZyb20gJy4uLy4uL3NlcnZpY2VzL21haWEnXG5pbXBvcnQgeyBGZWVkYmFjayB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvbW9sZWN1bGVzL01lc3NhZ2VGZWVkYmFjay9NZXNzYWdlRmVlZGJhY2snXG5pbXBvcnQgeyBDaGF0TWVzc2FnZSwgQ2hhdE1lc3NhZ2VVc2VyLCBDaGF0SGlzdG9yeVJvbGUsIEFwcHJvdmFsUmVxdWVzdCwgUGVuZGluZ0FjdGlvbiB9IGZyb20gJy4uLy4uL3R5cGVzL0NoYXQnXG5pbXBvcnQgeyBDb250ZXh0TWVudGlvbiwgQ29udGV4dE1lc3NhZ2UsIGJ1aWxkQ29udGV4dE1lc3NhZ2UgfSBmcm9tICcuLi8uLi90eXBlcy9jb250ZXh0TWVudGlvbidcbmltcG9ydCB7IGZvcm1hdFF1aWNrQWN0aW9uTWVzc2FnZUZvckRpc3BsYXkgfSBmcm9tICcuLi8uLi91dGlscy9mb3JtYXRRdWlja0FjdGlvbk1lc3NhZ2UnXG5cbmltcG9ydCB7IFByb2plY3QgfSBmcm9tICcuLi8uLi90eXBlcy9Qcm9qZWN0J1xuaW1wb3J0IHsgdXNlUHJvamVjdHMgfSBmcm9tICcuLi91c2VQcm9qZWN0cydcbmltcG9ydCB7IHVzZVRhYlRhc2tEZWZhdWx0IH0gZnJvbSAnLi4vdXNlVGFiVGFza0RlZmF1bHQnXG5pbXBvcnQgeyBUQVNLX1VSTF9SRUdFWF9QQVRURVJOIH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzL3Rhc2tVcmxzJ1xuaW1wb3J0IHsgZGlzcGF0Y2hNYWlhSG91cnNDaGFyZ2VkLCBpc0hvdXJzQ2hhcmdlVG9vbCB9IGZyb20gJy4uLy4uL2NvbnN0YW50cy9wbGFubmVyU3luY0V2ZW50cydcbmltcG9ydCB7IGZldGNoQWdlbnREZXRhaWwgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9tYWlhL0FnZW50cy9mZXRjaEFnZW50RGV0YWlsJ1xuaW1wb3J0IHtcbiAgYnVpbGRIaXRsQWN0aW9uVHlwZUxpc3QsXG4gIGdldEhpdGxBbmFseXRpY3NBZ2VudFR5cGUsXG4gIG5vcm1hbGl6ZUhpdGxUb29sTmFtZSxcbiAgdHJhY2tNYW51YWxIaXRsRXZlbnRzLFxufSBmcm9tICcuLi8uLi91dGlscy9oaXRsQW5hbHl0aWNzJ1xuaW1wb3J0IHsgdHlwZSBIaXRsRXhlY3V0aW9uQ29udGV4dCB9IGZyb20gJy4uLy4uL3V0aWxzL3N0cmVhbUFjdGl2aXR5TWVzc2FnZXMnXG5pbXBvcnQgeyBzZXNzaW9uU3RyZWFtaW5nVGV4dCB9IGZyb20gJy4uLy4uL3N0b3JlL3Nlc3Npb25zL3Nlc3Npb25TdHJlYW1pbmdUZXh0J1xuaW1wb3J0IHsgdXNlU2Vzc2lvbnNTdG9yZSB9IGZyb20gJy4uLy4uL3N0b3JlL3Nlc3Npb25zL3VzZVNlc3Npb25zU3RvcmUnXG5pbXBvcnQgeyB1c2VTZXNzaW9uTWV0YSB9IGZyb20gJy4uLy4uL3N0b3JlL3Nlc3Npb25zL3VzZVNlc3Npb25NZXRhJ1xuaW1wb3J0IHsgc2Vzc2lvblN0cmVhbU1hbmFnZXIsIE1BWF9DT05DVVJSRU5UX1NUUkVBTVMgfSBmcm9tICcuLi8uLi9zdG9yZS9zZXNzaW9ucy9zZXNzaW9uU3RyZWFtTWFuYWdlcidcbmltcG9ydCB7IGFjdGl2ZVZpZXcgfSBmcm9tICcuLi8uLi9zdG9yZS9zZXNzaW9ucy9hY3RpdmVWaWV3J1xuaW1wb3J0IHsgbm90aWZ5U2Vzc2lvbkZpbmlzaGVkSW5CYWNrZ3JvdW5kIH0gZnJvbSAnLi4vLi4vc3RvcmUvc2Vzc2lvbnMvc2Vzc2lvbk5vdGlmaWNhdGlvbnMnXG5pbXBvcnQgeyBidWlsZFNpZGViYXJTZXNzaW9uVGl0bGUsIGVuc3VyZVNlc3Npb25JblNpZGViYXIgfSBmcm9tICcuLi8uLi9zdG9yZS9jaGF0c1NpZGViYXJPcHRpbWlzdGljJ1xuaW1wb3J0IHsgaXNTdHJlYW1pbmdQbGFjZWhvbGRlck1lc3NhZ2VJZCwgc3RyZWFtaW5nUGxhY2Vob2xkZXJNZXNzYWdlSWQgfSBmcm9tICcuLi8uLi91dGlscy9zdHJlYW1BY3Rpdml0eU1lc3NhZ2VzJ1xuaW1wb3J0IHsgZmluZFVzZXJNZXNzYWdlRm9yUmV0cnksIG1lc3NhZ2VzV2l0aG91dFJldHJpZWRUdXJuLCByZXNvbHZlUmV0cnlUdXJuSWQgfSBmcm9tICcuLi8uLi91dGlscy9yZXRyeUNvbXBsZXRpb24nXG5pbXBvcnQgdHlwZSB7IFN0cmVhbUNvbnRleHQgfSBmcm9tICcuLi91c2VPcmNoZXN0cmF0b3JTdHJlYW0vdXNlT3JjaGVzdHJhdG9yU3RyZWFtLmludGVyZmFjZSdcbmltcG9ydCB7IGdldENoYXRzU3RvcmVTdGF0ZSwgdXNlQ2hhdHNTdG9yZSB9IGZyb20gJy4uLy4uL3N0b3JlL3VzZUNoYXRzU3RvcmUnXG5pbXBvcnQgeyByZWFzb25pbmdTdG9yZSB9IGZyb20gJy4uL3VzZVJlYXNvbmluZ1RyYWNlJ1xuaW1wb3J0IHsgbWFwUmVhc29uaW5nVHJhY2UgfSBmcm9tICcuLi8uLi91dGlscy9yZWFzb25pbmdNYXBwZXJzJ1xuaW1wb3J0IHR5cGUgeyBSZWFzb25pbmdUcmFjZVBheWxvYWQgfSBmcm9tICcuLi8uLi90eXBlcy9yZWFzb25pbmcnXG5cbmNvbnN0IHVzZVN0YWJsZUNhbGxiYWNrcyA9IChhdXRoVXNlcjogQ09SVXNlcikgPT4ge1xuICBjb25zdCBjdXJyZW50VXNlciA9IHVzZVJlZjxDaGF0TWVzc2FnZVVzZXI+KG1hcEF1dGhVc2VyVG9DaGF0TWVzc2FnZVVzZXIoYXV0aFVzZXIpKVxuXG4gIGNvbnN0IG5leHRVc2VyID0gbWFwQXV0aFVzZXJUb0NoYXRNZXNzYWdlVXNlcihhdXRoVXNlcilcbiAgaWYgKFxuICAgIGN1cnJlbnRVc2VyLmN1cnJlbnQuaWQgIT09IG5leHRVc2VyLmlkIHx8XG4gICAgY3VycmVudFVzZXIuY3VycmVudC5uYW1lICE9PSBuZXh0VXNlci5uYW1lIHx8XG4gICAgY3VycmVudFVzZXIuY3VycmVudC5hdmF0YXIgIT09IG5leHRVc2VyLmF2YXRhclxuICApIHtcbiAgICBjdXJyZW50VXNlci5jdXJyZW50ID0gbmV4dFVzZXJcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgY3VycmVudFVzZXI6IGN1cnJlbnRVc2VyLmN1cnJlbnQsXG4gIH1cbn1cblxuZXhwb3J0IGNvbnN0IHVzZUNoYXRNYW5hZ2VyID0gKHtcbiAgY2hhdElkOiBpbml0aWFsQ2hhdElkLFxuICB1c2VySW5pdGlhbE1lc3NhZ2UsXG4gIG9uRXJyb3IsXG4gIGFnZW50cyA9IFtdLFxufTogVXNlQ2hhdE1hbmFnZXJQcm9wcykgPT4ge1xuICBjb25zdCB7IHQgfSA9IHVzZVQoKVxuICBjb25zdCBhdXRoVXNlciA9IHVzZVVzZXIoKVxuICBjb25zdCB7XG4gICAgcHJvamVjdCxcbiAgICBzZXRQcm9qZWN0LFxuICAgIGNsaWVudCxcbiAgICBzZXRDbGllbnQsXG4gICAgdGFzayxcbiAgICBzZXRUYXNrLFxuICAgIGFnZW50LFxuICAgIGlzV2ViU2VhcmNoQWN0aXZlLFxuICAgIGlzRGVlcFNlYXJjaEFjdGl2ZSxcbiAgICBpc0F1dG9BcHByb3ZlQWN0aXZlLFxuICAgIGNoaXBzUHJvamVjdCxcbiAgICBzZXRDaGlwc1Byb2plY3QsXG4gIH0gPSB1c2VHbG9iYWxDb250ZXh0KClcbiAgY29uc3QgZXZlbnQgPSB1c2VFdmVudCgpXG4gIGNvbnN0IHsgZmV0Y2hQcm9qZWN0cyB9ID0gdXNlUHJvamVjdHMoKVxuICBjb25zdCB7IGN1cnJlbnRVc2VyIH0gPSB1c2VTdGFibGVDYWxsYmFja3MoYXV0aFVzZXIpXG4gIGNvbnN0IHsgZ2V0VGFiVGFza0RlZmF1bHQgfSA9IHVzZVRhYlRhc2tEZWZhdWx0KClcblxuICBjb25zdCBjdXJyZW50TWVzc2FnZUlkID0gdXNlUmVmKHV1aWR2NCgpKVxuICBjb25zdCBjdXJyZW50VXNlclF1ZXN0aW9uID0gdXNlUmVmPHN0cmluZyB8IG51bGw+KG51bGwpXG4gIGNvbnN0IGN1cnJlbnRDaGF0SWQgPSB1c2VSZWYoaW5pdGlhbENoYXRJZCB8fCB1dWlkdjQoKSlcbiAgY29uc3Qgc2V0QWN0aXZlQ2hhdElkID0gdXNlQ2hhdHNTdG9yZShzdGF0ZSA9PiBzdGF0ZS5zZXRBY3RpdmVDaGF0SWQpXG4gIGNvbnN0IHJlcG9ydGVkRXZlbnQgPSB1c2VSZWYoZmFsc2UpXG4gIGNvbnN0IG1lc3NhZ2VzUmVmID0gdXNlUmVmPENoYXRNZXNzYWdlW10+KFtdKVxuICAvKipcbiAgICogR3VhcmRhIGluZm8gZGVsIMO6bHRpbW8gYXBwcm92YWwgbWFudWFsIChjdWFuZG8gZWwgdXN1YXJpbyB0aXBlYSBcInNpXCIvXCJub1wiIGVuIGx1Z2FyXG4gICAqIGRlIGNsaWNrZWFyIGVsIGJvdMOzbikuIEVuIG1hbnVhbCBhcHByb3ZhbCwgYGhhbmRsZUFwcHJvdmFsUmVxdWlyZWRgIHJldG9ybmEgZWFybHlcbiAgICogc2luIGFncmVnYXIgdW4gbWVuc2FqZSBjb24gYGFwcHJvdmFsYCwgYXPDrSBxdWUgbGEgbMOzZ2ljYSBkZSByZWZldGNoIGVuIGBvblN0cmVhbUZpbmlzaGBcbiAgICogbm8gbG8gZGV0ZWN0YSB2w61hIGBwcmV2aW91c01lc3NhZ2UuYXBwcm92YWxgLiBMbyBndWFyZGFtb3MgYWPDoSBwYXJhIGNvbnN1bWlybG8gZGVzcHXDqXMuXG4gICAqL1xuICBjb25zdCBsYXN0TWFudWFsQXBwcm92YWxSZWYgPSB1c2VSZWY8e1xuICAgIHRvb2xOYW1lOiBzdHJpbmdcbiAgICB0b29sQXJnczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCBudWxsXG4gIH0gfCBudWxsPihudWxsKVxuICAvKiogRXZpdGEgZHVwbGljYXIgQUlfQ0hBVF9ISVRMIC8gQUlfQ0hBVF9ISVRMX09QVElPTiBlbiBwcmVhcHJvYmFjaW9uZXMgKG1hbnVhbCBvIGF1dG8pIHBvciBsb3RlLiAqL1xuICBjb25zdCB0cmFja2VkTWFudWFsSGl0bEtleXNSZWYgPSB1c2VSZWY8U2V0PHN0cmluZz4+KG5ldyBTZXQoKSlcbiAgLyoqIENvbnRleHRvIGRlbCBtZW5zYWplIGRlIGFwcm9iYWNpw7NuIHByZXZpbyBhbCBlamVjdXRhciBjb250aW51ZS10aHJlYWQuICovXG4gIGNvbnN0IGhpdGxFeGVjdXRpb25Db250ZXh0UmVmID0gdXNlUmVmPEhpdGxFeGVjdXRpb25Db250ZXh0IHwgbnVsbD4obnVsbClcbiAgLyoqIE1lbnNhamVzIGEgcmVzdGF1cmFyIHNpIGByZXRyeV9jb21wbGV0aW9uYCBmYWxsYSBhbnRlcyBkZSBwZXJzaXN0aXIgZWwgcmVlbXBsYXpvLiAqL1xuICBjb25zdCByZXRyeVNuYXBzaG90UmVmID0gdXNlUmVmPENoYXRNZXNzYWdlW10gfCBudWxsPihudWxsKVxuICBjb25zdCBpc1Byb2Nlc3NpbmdSZWYgPSB1c2VSZWYoZmFsc2UpXG4gIGNvbnN0IGZpcnN0VGltZVJlZiA9IHVzZVJlZihmYWxzZSlcbiAgLyoqIElkIGRlbCBwbGFjZWhvbGRlciBkZWwgbWVuc2FqZSBlbiBzdHJlYW1pbmcgYWN0aXZvIChzaSBoYXkpLiAqL1xuICBjb25zdCBzdHJlYW1pbmdQbGFjZWhvbGRlcklkUmVmID0gdXNlUmVmPHN0cmluZyB8IG51bGw+KG51bGwpXG4gIC8qKlxuICAgKiBDaGF0IGFsIHF1ZSBwZXJ0ZW5lY2UgZWwgc3RyZWFtIGFjdHVhbG1lbnRlIGFjdGl2by4gU2kgY2FtYmlhIGVsIGNoYXRcbiAgICogbWllbnRyYXMgdW4gc3RyZWFtIGVzdMOhIGVuIHZ1ZWxvLCBkZXNjYXJ0YW1vcyBsb3MgdG9rZW5zIHJlc2lkdWFsZXNcbiAgICogcXVlIHB1ZWRhbiBsbGVnYXIgYW50ZXMgZGUgcXVlIGVsIGFib3J0IHNlIGNvbXBsZXRlLlxuICAgKi9cbiAgY29uc3QgYWN0aXZlU3RyZWFtQ2hhdElkUmVmID0gdXNlUmVmPHN0cmluZyB8IG51bGw+KG51bGwpXG4gIGNvbnN0IGNsZWFyU3RyZWFtVWlSZWYgPSB1c2VSZWY8KCkgPT4gdm9pZD4oKCkgPT4gdW5kZWZpbmVkKVxuICBjb25zdCBbYWN0aXZlTG9hZGluZ3MsIHNldEFjdGl2ZUxvYWRpbmdzXSA9IHVzZVN0YXRlPFJlY29yZDxzdHJpbmcsIHN0cmluZz4+KHt9KVxuICAvKipcbiAgICogU2VzacOzbiBhY3R1YWxtZW50ZSB2aXNpYmxlLiBTZSBtYW50aWVuZSBlbiBzdGF0ZSAobm8gc29sbyBlbiByZWYpIHBhcmEgcXVlXG4gICAqIGVsIG1vdG9yIGRlIHN0cmVhbWluZyBwdWVkYSBsZWVyIHJlYWN0aXZhbWVudGUgbG9zIGZsYWdzIGRlIEVTVEEgc2VzacOzblxuICAgKiBkZXNkZSBlbCBzdG9yZSwgbWllbnRyYXMgb3RyYXMgc2lndWVuIGdlbmVyYW5kbyBlbiBiYWNrZ3JvdW5kLlxuICAgKi9cbiAgY29uc3QgW2FjdGl2ZVNlc3Npb25JZCwgc2V0QWN0aXZlU2Vzc2lvbklkXSA9IHVzZVN0YXRlPHN0cmluZz4oY3VycmVudENoYXRJZC5jdXJyZW50KVxuICAvKiogVHJ1ZSBtaWVudHJhcyBlc3RhIGluc3RhbmNpYSBlc3TDqSBtb250YWRhIChldml0YSBzZXRTdGF0ZSB0cmFzIGRlc21vbnRhcikuICovXG4gIGNvbnN0IGlzTW91bnRlZFJlZiA9IHVzZVJlZih0cnVlKVxuICAvKiogRXZpdGEgcmVjb25jaWxpYXIgZG9zIHZlY2VzIGVsIG1pc21vIGVzdGFkbyB0ZXJtaW5hbCBkZSB1bmEgc2VzacOzbi4gKi9cbiAgY29uc3QgbGFzdEhhbmRsZWRUZXJtaW5hbFJlZiA9IHVzZVJlZjxzdHJpbmcgfCBudWxsPihudWxsKVxuXG4gIGNvbnN0IGlzV2ViU2VhcmNoQWN0aXZlUmVmID0gdXNlUmVmKGlzV2ViU2VhcmNoQWN0aXZlKVxuICBjb25zdCBpc0RlZXBTZWFyY2hBY3RpdmVSZWYgPSB1c2VSZWYoaXNEZWVwU2VhcmNoQWN0aXZlKVxuICBjb25zdCBpc0F1dG9BcHByb3ZlQWN0aXZlUmVmID0gdXNlUmVmKGlzQXV0b0FwcHJvdmVBY3RpdmUpXG4gIC8qKiBFdml0YSBjbG9zdXJlcyBvYnNvbGV0YXMgY3VhbmRvIGVsIGZvb3RlciBjb25zZXJ2YSBzZW5kTWVzc2FnZSBlbnRyZSByZW5kZXJzLiAqL1xuICBjb25zdCBjb250ZXh0UmVmID0gdXNlUmVmKHsgY2hpcHNQcm9qZWN0LCBwcm9qZWN0LCBjbGllbnQsIHRhc2sgfSlcbiAgY29udGV4dFJlZi5jdXJyZW50ID0geyBjaGlwc1Byb2plY3QsIHByb2plY3QsIGNsaWVudCwgdGFzayB9XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpc1dlYlNlYXJjaEFjdGl2ZVJlZi5jdXJyZW50ID0gaXNXZWJTZWFyY2hBY3RpdmVcbiAgICBpc0RlZXBTZWFyY2hBY3RpdmVSZWYuY3VycmVudCA9IGlzRGVlcFNlYXJjaEFjdGl2ZVxuICAgIGlzQXV0b0FwcHJvdmVBY3RpdmVSZWYuY3VycmVudCA9IGlzQXV0b0FwcHJvdmVBY3RpdmVcbiAgfSwgW2lzV2ViU2VhcmNoQWN0aXZlLCBpc0RlZXBTZWFyY2hBY3RpdmUsIGlzQXV0b0FwcHJvdmVBY3RpdmVdKVxuXG4gIGNvbnN0IHtcbiAgICBsb2FkaW5nTWVzc2FnZXMsXG4gICAgbWVzc2FnZXMsXG4gICAgaXNMb2FkaW5nTW9yZU1lc3NhZ2VzLFxuICAgIGxvYWRNZXNzYWdlcyxcbiAgICBhZGRNZXNzYWdlLFxuICAgIHJlbW92ZU1lc3NhZ2UsXG4gICAgcmVwbGFjZU1lc3NhZ2VzLFxuICAgIGhhbmRsZVNjcm9sbCxcbiAgfSA9IHVzZUNoYXRNZXNzYWdlcyh7XG4gICAgY2hhdElkOiBpbml0aWFsQ2hhdElkIHx8IGN1cnJlbnRDaGF0SWQuY3VycmVudCxcbiAgICBjdXJyZW50VXNlcixcbiAgICB1c2VySW5pdGlhbE1lc3NhZ2UsXG4gICAgb25FcnJvcixcbiAgICBhZ2VudHMsXG4gIH0pXG5cbiAgbWVzc2FnZXNSZWYuY3VycmVudCA9IG1lc3NhZ2VzXG5cbiAgLyoqXG4gICAqIEVzY3JpYmUgdW4gbWVuc2FqZSBlbiBlbCBzdG9yZSBwb3Itc2VzacOzbiB5LCBzaSBsYSBzZXNpw7NuIGVzIGxhIGFjdGl2YSxcbiAgICogdGFtYmnDqW4gZW4gbGEgdmlzdGEgbG9jYWwuIFBlcm1pdGUgcXVlIHNlc2lvbmVzIGVuIGJhY2tncm91bmQgYWN1bXVsZW4gc3VcbiAgICogcmVzdWx0YWRvIHNpbiBwaXNhciBlbCBjaGF0IHF1ZSBlbCB1c3VhcmlvIGVzdMOhIG1pcmFuZG8uXG4gICAqL1xuICBjb25zdCBjb21taXRUb1Nlc3Npb24gPSB1c2VDYWxsYmFjayhcbiAgICAoc2Vzc2lvbklkOiBzdHJpbmcsIG1lc3NhZ2U6IENoYXRNZXNzYWdlKSA9PiB7XG4gICAgICB1c2VTZXNzaW9uc1N0b3JlLmdldFN0YXRlKCkuYWRkTWVzc2FnZShzZXNzaW9uSWQsIG1lc3NhZ2UpXG4gICAgICBpZiAoaXNNb3VudGVkUmVmLmN1cnJlbnQgJiYgYWN0aXZlVmlldy5pcyhzZXNzaW9uSWQpKSB7XG4gICAgICAgIGFkZE1lc3NhZ2UobWVzc2FnZSlcbiAgICAgIH1cbiAgICB9LFxuICAgIFthZGRNZXNzYWdlXVxuICApXG5cbiAgY29uc3QgZHJvcEZyb21TZXNzaW9uID0gdXNlQ2FsbGJhY2soXG4gICAgKHNlc3Npb25JZDogc3RyaW5nLCBtZXNzYWdlSWQ6IHN0cmluZykgPT4ge1xuICAgICAgdXNlU2Vzc2lvbnNTdG9yZS5nZXRTdGF0ZSgpLnJlbW92ZU1lc3NhZ2Uoc2Vzc2lvbklkLCBtZXNzYWdlSWQpXG4gICAgICBpZiAoaXNNb3VudGVkUmVmLmN1cnJlbnQgJiYgYWN0aXZlVmlldy5pcyhzZXNzaW9uSWQpKSB7XG4gICAgICAgIHJlbW92ZU1lc3NhZ2UobWVzc2FnZUlkKVxuICAgICAgfVxuICAgIH0sXG4gICAgW3JlbW92ZU1lc3NhZ2VdXG4gIClcblxuICAvKiogTGltcGlhIGVsIHRhaWwgZW4gdnVlbG8gZGUgdW5hIHNlc2nDs24gKHRyYXMgdGVybWluYXI7IGVsIGJhY2tlbmQgcGFzYSBhIHNlciBmdWVudGUpLiAqL1xuICBjb25zdCBjbGVhclNlc3Npb25UYWlsID0gdXNlQ2FsbGJhY2soKHNlc3Npb25JZDogc3RyaW5nKSA9PiB7XG4gICAgdXNlU2Vzc2lvbnNTdG9yZS5nZXRTdGF0ZSgpLnNldE1lc3NhZ2VzKHNlc3Npb25JZCwgW10pXG4gIH0sIFtdKVxuXG4gIC8vIFJlZ2lzdHJhciBsYSBzZXNpw7NuIHZpc2libGUgZW4gZWwgdHJhY2tlciBnbG9iYWwgcGFyYSBxdWUgbG9zIGNhbGxiYWNrcyBkZWxcbiAgLy8gbW90b3IgKHF1ZSBwdWVkZW4gcGVydGVuZWNlciBhIHVuYSBpbnN0YW5jaWEgeWEgZGVzbW9udGFkYSkgc2VwYW4gY3XDoWwgZXMgbGFcbiAgLy8gc2VzacOzbiBhY3RpdmEgYWN0dWFsLlxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGFjdGl2ZVZpZXcuc2V0KGFjdGl2ZVNlc3Npb25JZClcbiAgfSwgW2FjdGl2ZVNlc3Npb25JZF0pXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpc01vdW50ZWRSZWYuY3VycmVudCA9IHRydWVcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgaXNNb3VudGVkUmVmLmN1cnJlbnQgPSBmYWxzZVxuICAgICAgaWYgKGFjdGl2ZVZpZXcuaXMoY3VycmVudENoYXRJZC5jdXJyZW50KSkge1xuICAgICAgICBhY3RpdmVWaWV3LnNldChudWxsKVxuICAgICAgfVxuICAgIH1cbiAgfSwgW10pXG5cbiAgLy8gUmVjb25jaWxpYWNpw7NuOiBzaSBsYSBzZXNpw7NuIGFjdGl2YSB0ZXJtaW5hIChjb21wbGV0ZS9lcnJvcikgcGVybyBlbCBzdG9yZVxuICAvLyBwb3Itc2VzacOzbiB0b2RhdsOtYSB0aWVuZSB1biBwbGFjZWhvbGRlciBkZSBzdHJlYW1pbmcsIHJlZnJlc2NhbW9zIGRlc2RlXG4gIC8vIGVsIGJhY2tlbmQuIFVzYW1vcyBlbCBzdG9yZSAobm8gbWVzc2FnZXNSZWYpOiBoYW5kbGVTdHJlYW1GaW5pc2ggbGltcGlhIGVsXG4gIC8vIHBsYWNlaG9sZGVyIGFow60gZGUgZm9ybWEgc8OtbmNyb25hOyBtZXNzYWdlc1JlZiBwdWVkZSBxdWVkYXIgc3RhbGUgdW4gcmVuZGVyXG4gIC8vIHBvcnF1ZSBzZXRTdGF0dXMgKFp1c3RhbmQpIHkgcmVtb3ZlTWVzc2FnZSAoUmVhY3QpIG5vIGJhdGNoYW4ganVudG9zLlxuICAvLyBgY2FuY2VsbGVkYCBxdWVkYSBhZnVlcmE6IGVsIHN0b3AgeWEgcmVjb25jaWxpYSBsb2NhbCAocGFyY2lhbCArIGJ1cmJ1amEgZGVcbiAgLy8gY2FuY2VsYWRvKSB5IHJlY2FyZ2FyIGFjw6EgbW9zdHJhYmEgbGEgcGFudGFsbGEgZGUgY2FyZ2EgZGVsIGNoYXQgZW50ZXJvLlxuICBjb25zdCBhY3RpdmVTZXNzaW9uTWV0YSA9IHVzZVNlc3Npb25NZXRhKGFjdGl2ZVNlc3Npb25JZClcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBzdGF0dXMgPSBhY3RpdmVTZXNzaW9uTWV0YT8uc3RhdHVzXG4gICAgaWYgKCFzdGF0dXMpIHJldHVyblxuICAgIGNvbnN0IGlzVGVybWluYWwgPSBzdGF0dXMgPT09ICdjb21wbGV0ZScgfHwgc3RhdHVzID09PSAnZXJyb3InXG4gICAgaWYgKCFpc1Rlcm1pbmFsKSByZXR1cm5cbiAgICBjb25zdCBrZXkgPSBgJHthY3RpdmVTZXNzaW9uSWR9OiR7c3RhdHVzfToke2FjdGl2ZVNlc3Npb25NZXRhPy5maW5pc2hlZEF0ID8/ICcnfWBcbiAgICBpZiAobGFzdEhhbmRsZWRUZXJtaW5hbFJlZi5jdXJyZW50ID09PSBrZXkpIHJldHVyblxuICAgIGxhc3RIYW5kbGVkVGVybWluYWxSZWYuY3VycmVudCA9IGtleVxuXG4gICAgY29uc3QgdGFpbCA9IHVzZVNlc3Npb25zU3RvcmUuZ2V0U3RhdGUoKS5nZXRNZXNzYWdlcyhhY3RpdmVTZXNzaW9uSWQpXG4gICAgY29uc3QgaGFzU3RhbGVQbGFjZWhvbGRlciA9IHRhaWwuc29tZShtc2cgPT4gaXNTdHJlYW1pbmdQbGFjZWhvbGRlck1lc3NhZ2VJZChtc2cuaWQpKVxuICAgIGlmIChoYXNTdGFsZVBsYWNlaG9sZGVyKSB7XG4gICAgICBsb2FkTWVzc2FnZXMoeyBmb3JjZTogdHJ1ZSB9KVxuICAgIH1cbiAgfSwgW2FjdGl2ZVNlc3Npb25NZXRhPy5zdGF0dXMsIGFjdGl2ZVNlc3Npb25NZXRhPy5maW5pc2hlZEF0LCBhY3RpdmVTZXNzaW9uSWQsIGxvYWRNZXNzYWdlc10pXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBjdXN0b21FdmVudCA9IG5ldyBDdXN0b21FdmVudCgnY2hhdC1sb2FkaW5nLW1lc3NhZ2VzLWNoYW5nZWQnLCB7XG4gICAgICBkZXRhaWw6IHsgbG9hZGluZ01lc3NhZ2VzIH0sXG4gICAgfSlcbiAgICBkb2N1bWVudC5kaXNwYXRjaEV2ZW50KGN1c3RvbUV2ZW50KVxuICB9LCBbbG9hZGluZ01lc3NhZ2VzXSlcblxuICBjb25zdCBwcmV2aW91c0luaXRpYWxDaGF0SWRSZWYgPSB1c2VSZWY8c3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZD4oaW5pdGlhbENoYXRJZClcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IHByZXZpb3VzSW5pdGlhbENoYXRJZCA9IHByZXZpb3VzSW5pdGlhbENoYXRJZFJlZi5jdXJyZW50XG4gICAgcHJldmlvdXNJbml0aWFsQ2hhdElkUmVmLmN1cnJlbnQgPSBpbml0aWFsQ2hhdElkXG5cbiAgICAvLyBDaGF0IG51ZXZvIC8gaG9tZTogaW5pdGlhbENoYXRJZCBwYXNhIGEgbnVsbCwgYXPDrSBxdWUgbGEgcmFtYSBkZSBhYmFqbyBub1xuICAgIC8vIGFwbGljYS4gSGF5IHF1ZSByb3RhciBhIHVuYSBzZXNpw7NuIG51ZXZhIGlndWFsOiBzaSBzZWd1aW1vcyBhcHVudGFuZG8gYSBsYVxuICAgIC8vIGFudGVyaW9yLCBgYWN0aXZlVmlld2AgbGEgc2lndWUgbWFyY2FuZG8gY29tbyBhY3RpdmEgeSBjdWFuZG8gdGVybWluYSBubyBzZVxuICAgIC8vIG5vdGlmaWNhICh5IHN1IHJlc3B1ZXN0YSBzZSBjb21taXRlYSBzb2JyZSBsYSB2aXN0YSBudWV2YSkuIEVsIMOhcmJvbCBub1xuICAgIC8vIHJlbW9udGEgZW4gZXN0ZSBmbHVqbyAobm8gaGF5IGBrZXlgKSB5IG5hZGllIGNvbnN1bWUgYHJlc2V0Q2hhdGAuXG4gICAgaWYgKCFpbml0aWFsQ2hhdElkICYmIHByZXZpb3VzSW5pdGlhbENoYXRJZCkge1xuICAgICAgY3VycmVudENoYXRJZC5jdXJyZW50ID0gdXVpZHY0KClcbiAgICAgIHNldEFjdGl2ZVNlc3Npb25JZChjdXJyZW50Q2hhdElkLmN1cnJlbnQpXG4gICAgICBjdXJyZW50TWVzc2FnZUlkLmN1cnJlbnQgPSB1dWlkdjQoKVxuICAgICAgY3VycmVudFVzZXJRdWVzdGlvbi5jdXJyZW50ID0gbnVsbFxuICAgICAgcmVwb3J0ZWRFdmVudC5jdXJyZW50ID0gZmFsc2VcbiAgICAgIGlzUHJvY2Vzc2luZ1JlZi5jdXJyZW50ID0gZmFsc2VcbiAgICAgIHN0cmVhbWluZ1BsYWNlaG9sZGVySWRSZWYuY3VycmVudCA9IG51bGxcbiAgICAgIGFjdGl2ZVN0cmVhbUNoYXRJZFJlZi5jdXJyZW50ID0gbnVsbFxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgaWYgKGluaXRpYWxDaGF0SWQgJiYgaW5pdGlhbENoYXRJZCAhPT0gY3VycmVudENoYXRJZC5jdXJyZW50KSB7XG4gICAgICAvLyBOTyBhYm9ydGFtb3MgZWwgc3RyZWFtIGFudGVyaW9yOiBwdWVkZSBzZWd1aXIgZ2VuZXJhbmRvIGVuIGJhY2tncm91bmQuXG4gICAgICAvLyBTb2xvIGNhbWJpYW1vcyBkZSBzZXNpw7NuIGFjdGl2YTsgZWwgbW90b3IgcnV0ZWEgY2FkYSBzdHJlYW0gcG9yIHN1XG4gICAgICAvLyBzZXNzaW9uSWQsIGFzw60gcXVlIGxvcyB0b2tlbnMgZGUgbGEgc2VzacOzbiBwcmV2aWEgc2lndWVuIGFwbGljw6FuZG9zZSBhXG4gICAgICAvLyBFU0Egc2VzacOzbiAoc3RvcmUpLCBubyBhIGxhIG51ZXZhLlxuXG4gICAgICAvLyBMaW1waWFyIGNvbnRleHRvIGdsb2JhbCBhbCBjYW1iaWFyIGRlIGNvbnZlcnNhY2nDs25cbiAgICAgIHNldFByb2plY3QobnVsbClcbiAgICAgIHNldENsaWVudD8uKG51bGwpXG4gICAgICBzZXRDaGlwc1Byb2plY3QobnVsbClcbiAgICAgIHNldFRhc2sobnVsbClcblxuICAgICAgY3VycmVudENoYXRJZC5jdXJyZW50ID0gaW5pdGlhbENoYXRJZFxuICAgICAgc2V0QWN0aXZlU2Vzc2lvbklkKGluaXRpYWxDaGF0SWQpXG4gICAgICBjdXJyZW50TWVzc2FnZUlkLmN1cnJlbnQgPSB1dWlkdjQoKVxuICAgICAgY3VycmVudFVzZXJRdWVzdGlvbi5jdXJyZW50ID0gbnVsbFxuICAgICAgcmVwb3J0ZWRFdmVudC5jdXJyZW50ID0gZmFsc2VcbiAgICAgIC8vIGlzUHJvY2Vzc2luZ1JlZiByZWZsZWphIHNpIGxhIHNlc2nDs24gQUNUSVZBIGVzdMOhIG9jdXBhZGEuIFNpIGxhIHNlc2nDs25cbiAgICAgIC8vIGEgbGEgcXVlIGVudHJhbW9zIHNpZ3VlIGdlbmVyYW5kbyBlbiBiYWNrZ3JvdW5kLCBxdWVkYSBibG9xdWVhZGE7IHNpIG5vLFxuICAgICAgLy8gc2UgaGFiaWxpdGEgZWwgZW52w61vIGF1bnF1ZSBvdHJhcyBzZXNpb25lcyBzaWdhbiBnZW5lcmFuZG8uXG4gICAgICBpc1Byb2Nlc3NpbmdSZWYuY3VycmVudCA9IHNlc3Npb25TdHJlYW1NYW5hZ2VyLmlzQWN0aXZlKGluaXRpYWxDaGF0SWQpXG4gICAgICBzdHJlYW1pbmdQbGFjZWhvbGRlcklkUmVmLmN1cnJlbnQgPSBudWxsXG4gICAgICBhY3RpdmVTdHJlYW1DaGF0SWRSZWYuY3VycmVudCA9IG51bGxcblxuICAgICAgLy8gbG9hZE1lc3NhZ2VzIGxvIGRpc3BhcmEgdXNlQ2hhdE1lc3NhZ2VzIGFsIGNhbWJpYXIgY2hhdElkIChjb24gY2FjaGUgZW4gbWVtb3JpYSkuXG4gICAgfVxuICB9LCBbaW5pdGlhbENoYXRJZCwgcHJvamVjdCwgc2V0UHJvamVjdCwgc2V0Q2xpZW50LCBzZXRDaGlwc1Byb2plY3QsIHNldFRhc2tdKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgc2V0QWN0aXZlQ2hhdElkKGluaXRpYWxDaGF0SWQgfHwgbnVsbClcbiAgfSwgW2luaXRpYWxDaGF0SWQsIHNldEFjdGl2ZUNoYXRJZF0pXG5cbiAgY29uc3QgaGFuZGxlU3RyZWFtRXJyb3IgPSB1c2VDYWxsYmFjayhcbiAgICAoY3R4OiBTdHJlYW1Db250ZXh0LCBlcnJvck1lc3NhZ2U/OiBzdHJpbmcsIGVycm9yUmF3TWVzc2FnZT86IHN0cmluZykgPT4ge1xuICAgICAgY29uc3QgeyBzZXNzaW9uSWQsIG1lc3NhZ2VJZCwgcGxhY2Vob2xkZXJJZCB9ID0gY3R4XG4gICAgICBjb25zdCBpc0FjdGl2ZSA9IGFjdGl2ZVZpZXcuaXMoc2Vzc2lvbklkKVxuXG4gICAgICBzZXNzaW9uU3RyZWFtaW5nVGV4dC5jbGVhcihzZXNzaW9uSWQpXG4gICAgICBkcm9wRnJvbVNlc3Npb24oc2Vzc2lvbklkLCBwbGFjZWhvbGRlcklkKVxuXG4gICAgICBjb25zdCByZXRyeVNuYXBzaG90ID0gcmV0cnlTbmFwc2hvdFJlZi5jdXJyZW50XG4gICAgICBpZiAocmV0cnlTbmFwc2hvdCkge1xuICAgICAgICByZXRyeVNuYXBzaG90UmVmLmN1cnJlbnQgPSBudWxsXG4gICAgICAgIG1lc3NhZ2VzUmVmLmN1cnJlbnQgPSByZXRyeVNuYXBzaG90XG4gICAgICAgIHJlcGxhY2VNZXNzYWdlcyhyZXRyeVNuYXBzaG90KVxuICAgICAgICBpZiAoaXNBY3RpdmUpIHtcbiAgICAgICAgICBjbGVhclN0cmVhbVVpUmVmLmN1cnJlbnQoKVxuICAgICAgICAgIHN0cmVhbWluZ1BsYWNlaG9sZGVySWRSZWYuY3VycmVudCA9IG51bGxcbiAgICAgICAgICBhY3RpdmVTdHJlYW1DaGF0SWRSZWYuY3VycmVudCA9IG51bGxcbiAgICAgICAgICBpc1Byb2Nlc3NpbmdSZWYuY3VycmVudCA9IGZhbHNlXG4gICAgICAgIH1cbiAgICAgICAgZG9jdW1lbnQuZGlzcGF0Y2hFdmVudChcbiAgICAgICAgICBuZXcgQ3VzdG9tRXZlbnQoJ3NuYWNrYmFyLWV2ZW50Jywge1xuICAgICAgICAgICAgZGV0YWlsOiB7IHNob3c6IHRydWUsIHNldmVyaXR5OiAnZXJyb3InLCBtZXNzYWdlOiB0KCdjaGF0LmVycm9yJykgfSxcbiAgICAgICAgICB9KVxuICAgICAgICApXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBpZiAoaXNBY3RpdmUpIHtcbiAgICAgICAgY2xlYXJTdHJlYW1VaVJlZi5jdXJyZW50KClcbiAgICAgICAgc3RyZWFtaW5nUGxhY2Vob2xkZXJJZFJlZi5jdXJyZW50ID0gbnVsbFxuICAgICAgICBhY3RpdmVTdHJlYW1DaGF0SWRSZWYuY3VycmVudCA9IG51bGxcbiAgICAgICAgaXNQcm9jZXNzaW5nUmVmLmN1cnJlbnQgPSBmYWxzZVxuICAgICAgfVxuXG4gICAgICBjb25zdCB7IGlzQWNjZXNzRGVuaWVkLCBpc1Byb21wdFRvb0xvbmcsIHRva2Vuc1VzZWQsIHNob3dSZXRyeSB9ID0gcmVzb2x2ZVN0cmVhbUVycm9yUHJlc2VudGF0aW9uKFxuICAgICAgICBlcnJvck1lc3NhZ2UsXG4gICAgICAgIGVycm9yUmF3TWVzc2FnZVxuICAgICAgKVxuICAgICAgY29uc3QgbWVzc2FnZSA9IGlzQWNjZXNzRGVuaWVkXG4gICAgICAgID8gdCgnY2hhdC5lcnJvckFjY2Vzc0RlbmllZCcpXG4gICAgICAgIDogaXNQcm9tcHRUb29Mb25nXG4gICAgICAgICAgPyB0KCdjaGF0LmVycm9yUHJvbXB0VG9vTG9uZycsIHsgdXNlZDogdG9rZW5zVXNlZCB9KVxuICAgICAgICAgIDogdCgnY2hhdC5lcnJvcicpXG5cbiAgICAgIGNvbW1pdFRvU2Vzc2lvbihzZXNzaW9uSWQsIHtcbiAgICAgICAgaWQ6IGBhbnN3ZXItJHttZXNzYWdlSWR9YCxcbiAgICAgICAgbWVzc2FnZSxcbiAgICAgICAgaXNFcnJvcjogdHJ1ZSxcbiAgICAgICAgLy8gQ2hpcCBcIlJlaW50ZW50YXJcIiBzb2xvIGVuIGVsIGVycm9yIGdlbsOpcmljbyAocC4gZWouIDUwMCk7IG5vIGFwbGljYSBhIGFjY2VzcyBkZW5pZWQgbmkgcHJvbXB0IHRvbyBsb25nLlxuICAgICAgICAuLi4oc2hvd1JldHJ5ID8geyBzdWdnZXN0aW9uczogW3QoJ2NoYXQucmV0cnknKV0gfSA6IHt9KSxcbiAgICAgICAgZGF0ZTogbmV3IERhdGUoKSxcbiAgICAgICAgdXNlcjogeyBpZDogJ2Fzc2lzdGFudCcsIG5hbWU6ICdBc3Npc3RhbnQnIH0sXG4gICAgICAgIHJvbGU6IENoYXRIaXN0b3J5Um9sZS5BU1NJU1RBTlQsXG4gICAgICB9KVxuICAgICAgY2xlYXJTZXNzaW9uVGFpbChzZXNzaW9uSWQpXG5cbiAgICAgIGlmICghaXNBY3RpdmUpIHtcbiAgICAgICAgZ2V0Q2hhdHNTdG9yZVN0YXRlKCkubWFya0NoYXRBc1VucmVhZChzZXNzaW9uSWQpXG4gICAgICAgIG5vdGlmeVNlc3Npb25GaW5pc2hlZEluQmFja2dyb3VuZChzZXNzaW9uSWQsICdlcnJvcicpXG4gICAgICB9XG4gICAgfSxcbiAgICBbY29tbWl0VG9TZXNzaW9uLCBkcm9wRnJvbVNlc3Npb24sIGNsZWFyU2Vzc2lvblRhaWwsIHJlcGxhY2VNZXNzYWdlcywgdF1cbiAgKVxuXG4gIGNvbnN0IGhhbmRsZVN0cmVhbVVwZGF0ZSA9IHVzZUNhbGxiYWNrKFxuICAgIChjdHg6IFN0cmVhbUNvbnRleHQsIGNvbnRlbnQ6IHN0cmluZykgPT4ge1xuICAgICAgY29uc3QgeyBzZXNzaW9uSWQsIHBsYWNlaG9sZGVySWQgfSA9IGN0eFxuXG4gICAgICAvLyBBc2VndXJhbW9zIGVsIHBsYWNlaG9sZGVyIHVuYSDDum5pY2EgdmV6IHBvciBzdHJlYW0sIHRhbnRvIGVuIGVsIHN0b3JlXG4gICAgICAvLyBkZSBsYSBzZXNpw7NuIGNvbW8gZW4gbGEgdmlzdGEgc2kgZXMgbGEgYWN0aXZhLiBFbCB0ZXh0byBlbiB2aXZvIHZpYWphXG4gICAgICAvLyBwb3Igc2Vzc2lvblN0cmVhbWluZ1RleHQgKGV4dGVybm8pLCBzaW4gcmUtcmVuZGVyIGRlbCDDoXJib2wgY29tcGxldG8uXG4gICAgICBjb25zdCBwbGFjZWhvbGRlckV4aXN0cyA9IHVzZVNlc3Npb25zU3RvcmVcbiAgICAgICAgLmdldFN0YXRlKClcbiAgICAgICAgLmdldE1lc3NhZ2VzKHNlc3Npb25JZClcbiAgICAgICAgLnNvbWUobXNnID0+IG1zZy5pZCA9PT0gcGxhY2Vob2xkZXJJZClcblxuICAgICAgaWYgKCFwbGFjZWhvbGRlckV4aXN0cykge1xuICAgICAgICBzZXNzaW9uU3RyZWFtaW5nVGV4dC5zdGFydChzZXNzaW9uSWQsIHBsYWNlaG9sZGVySWQpXG4gICAgICAgIGNvbW1pdFRvU2Vzc2lvbihzZXNzaW9uSWQsIHtcbiAgICAgICAgICBpZDogcGxhY2Vob2xkZXJJZCxcbiAgICAgICAgICBtZXNzYWdlOiAnJyxcbiAgICAgICAgICBkYXRlOiBuZXcgRGF0ZSgpLFxuICAgICAgICAgIHVzZXI6IHsgaWQ6ICdhc3Npc3RhbnQnLCBuYW1lOiAnQXNzaXN0YW50JyB9LFxuICAgICAgICAgIHJvbGU6IENoYXRIaXN0b3J5Um9sZS5BU1NJU1RBTlQsXG4gICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIGlmIChhY3RpdmVWaWV3LmlzKHNlc3Npb25JZCkpIHtcbiAgICAgICAgc3RyZWFtaW5nUGxhY2Vob2xkZXJJZFJlZi5jdXJyZW50ID0gcGxhY2Vob2xkZXJJZFxuICAgICAgICBhY3RpdmVTdHJlYW1DaGF0SWRSZWYuY3VycmVudCA9IHNlc3Npb25JZFxuICAgICAgfVxuXG4gICAgICBzZXNzaW9uU3RyZWFtaW5nVGV4dC5zZXRUZXh0KHNlc3Npb25JZCwgcGxhY2Vob2xkZXJJZCwgY29udGVudClcbiAgICB9LFxuICAgIFtjb21taXRUb1Nlc3Npb25dXG4gIClcblxuICBjb25zdCBoYW5kbGVTdHJlYW1GaW5pc2ggPSB1c2VDYWxsYmFjayhcbiAgICBhc3luYyAoXG4gICAgICBjdHg6IFN0cmVhbUNvbnRleHQsXG4gICAgICBjb250ZW50OiBzdHJpbmcsXG4gICAgICBzb3VyY2VzOiBhbnksXG4gICAgICBtZW1vcnlTZXNzaW9uSWQ6IHN0cmluZyxcbiAgICAgIHJhd0F0dGFjaG1lbnRzPzogYW55W10gfCBudWxsLFxuICAgICAgc3VnZ2VzdGlvbnM/OiBzdHJpbmdbXSB8IG51bGwsXG4gICAgICBjb21wbGV0ZWRBZ2VudElkPzogc3RyaW5nIHwgbnVsbCxcbiAgICAgIC8qKiBQb3NpY2lvbmFsOiBtYXN0ZXIgbm8gbG8gY29uc3VtZSwgcGVybyBgcmVhc29uaW5nYCB2aWVuZSBkZXNwdcOpcy4gKi9cbiAgICAgIF9yZXNvbHZlZENvbnRleHQ/OiBhbnksXG4gICAgICByZWFzb25pbmc/OiBSZWFzb25pbmdUcmFjZVBheWxvYWQgfCBudWxsXG4gICAgKSA9PiB7XG4gICAgICBjb25zdCB7IHNlc3Npb25JZCwgcGxhY2Vob2xkZXJJZCB9ID0gY3R4XG4gICAgICBjb25zdCBpc0FjdGl2ZSA9IGFjdGl2ZVZpZXcuaXMoc2Vzc2lvbklkKVxuICAgICAgcmV0cnlTbmFwc2hvdFJlZi5jdXJyZW50ID0gbnVsbFxuXG4gICAgICBjb25zdCB0ZW1wTWVzc2FnZUlkID0gcGxhY2Vob2xkZXJJZFxuICAgICAgLy8gRWwgcGxhY2Vob2xkZXIgc2FsZSBkZWwgc3RvcmUgcG9yLXNlc2nDs24geWE6IGVsIGVmZWN0byBkZSByZWNvbmNpbGlhY2nDs25cbiAgICAgIC8vIGxvIHVzYSBwYXJhIGRldGVjdGFyIHJlc3B1ZXN0YXMgaHXDqXJmYW5hcyB5IGRlIGFjw6EgYWwgY29tbWl0IHB1ZWRlIGhhYmVyXG4gICAgICAvLyB1biBhd2FpdC4gTGEgdmlzdGEgbG9jYWwgbG8gc3VlbHRhIG3DoXMgYWJham8sIGp1bnRvIGFsIGNvbW1pdC5cbiAgICAgIHVzZVNlc3Npb25zU3RvcmUuZ2V0U3RhdGUoKS5yZW1vdmVNZXNzYWdlKHNlc3Npb25JZCwgdGVtcE1lc3NhZ2VJZClcbiAgICAgIGNvbnN0IGF0dGFjaG1lbnRzID0gbm9ybWFsaXplQXNzaXN0YW50QXR0YWNobWVudHMocmF3QXR0YWNobWVudHMpXG5cbiAgICAgIC8vIEVsIHRyYWNlIGFjdW11bGFkbyBlbiB2aXZvIGVzdMOhIGtleWVkIHBvciBlbCBwbGFjZWhvbGRlcjsgbG8gbW92ZW1vcyBhbFxuICAgICAgLy8gaWQgZGVmaW5pdGl2byBwYXJhIHF1ZSBlbCBibG9xdWUgZGUgcmF6b25hbWllbnRvIHNvYnJldml2YSBhbCBzd2FwLlxuICAgICAgY29uc3QgZmluYWxNZXNzYWdlSWQgPSBgYW5zd2VyLSR7bWVtb3J5U2Vzc2lvbklkfWBcbiAgICAgIC8vIFByZWZlcmlyIGVsIHNuYXBzaG90IGVuIHZpdm8gKG5hcnJhY2nDs24gYW5jbGFkYSBhbCBpbmljaW8pIHNvYnJlIGVsXG4gICAgICAvLyBgY29tcGxldGVgIGRlbCBiYWNrLCBxdWUgc3VlbGUgbWFuZGFyIGVzYSBuYXJyYWNpw7NuIGFsIGZpbmFsLlxuICAgICAgY29uc3QgZmluYWxUcmFjZSA9IHJlYXNvbmluZ1RyYWNlRm9yKHRlbXBNZXNzYWdlSWQpID8/IG1hcFJlYXNvbmluZ1RyYWNlKHJlYXNvbmluZylcbiAgICAgIHJlYXNvbmluZ1N0b3JlLnJlbmFtZSh0ZW1wTWVzc2FnZUlkLCBmaW5hbE1lc3NhZ2VJZClcblxuICAgICAgLy8gU2VzacOzbiBlbiBiYWNrZ3JvdW5kOiBjZXJyYW1vcyBsZWFuLiBFbCBiYWNrZW5kIHlhIHBlcnNpc3Rpw7MgbGFcbiAgICAgIC8vIHJlc3B1ZXN0YSwgYXPDrSBxdWUgYWwgdm9sdmVyIGEgbGEgc2VzacOzbiBzZSBjYXJnYSBkZXNkZSBhaMOtLiBBdmlzYW1vc1xuICAgICAgLy8gcXVlIHRlcm1pbsOzICh1bnJlYWQgKyBldmVudG8gcGFyYSB0b2FzdC9zb25pZG8pLlxuICAgICAgaWYgKCFpc0FjdGl2ZSkge1xuICAgICAgICBjb21taXRUb1Nlc3Npb24oc2Vzc2lvbklkLCB7XG4gICAgICAgICAgaWQ6IGZpbmFsTWVzc2FnZUlkLFxuICAgICAgICAgIG1lc3NhZ2U6IGNvbnRlbnQsXG4gICAgICAgICAgZGF0ZTogbmV3IERhdGUoKSxcbiAgICAgICAgICB1c2VyOiB7IGlkOiAnYXNzaXN0YW50JywgbmFtZTogJ0Fzc2lzdGFudCcgfSxcbiAgICAgICAgICByb2xlOiBDaGF0SGlzdG9yeVJvbGUuQVNTSVNUQU5ULFxuICAgICAgICAgIHNvdXJjZXMsXG4gICAgICAgICAgLi4uKGF0dGFjaG1lbnRzLmxlbmd0aCA+IDAgPyB7IGF0dGFjaG1lbnRzIH0gOiB7fSksXG4gICAgICAgICAgbWVtb3J5U2Vzc2lvbklkLFxuICAgICAgICAgIHN1Z2dlc3Rpb25zOiBzdWdnZXN0aW9ucyB8fCBbXSxcbiAgICAgICAgICByZWFzb25pbmc6IGZpbmFsVHJhY2UsXG4gICAgICAgIH0pXG4gICAgICAgIGNsZWFyU2Vzc2lvblRhaWwoc2Vzc2lvbklkKVxuICAgICAgICBnZXRDaGF0c1N0b3JlU3RhdGUoKS5tYXJrQ2hhdEFzVW5yZWFkKHNlc3Npb25JZClcbiAgICAgICAgbm90aWZ5U2Vzc2lvbkZpbmlzaGVkSW5CYWNrZ3JvdW5kKHNlc3Npb25JZCwgJ2NvbXBsZXRlJylcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIHN0cmVhbWluZ1BsYWNlaG9sZGVySWRSZWYuY3VycmVudCA9IG51bGxcbiAgICAgIGFjdGl2ZVN0cmVhbUNoYXRJZFJlZi5jdXJyZW50ID0gbnVsbFxuICAgICAgaGl0bEV4ZWN1dGlvbkNvbnRleHRSZWYuY3VycmVudCA9IG51bGxcblxuICAgICAgLy8gRGV0ZWN0YXIgdG9kYXMgbGFzIFVSTHMgZGUgdGFyZWFzICguLi4vdGFza3MvMTIzL2RldGFpbHxtZXNzYWdlfG1lc3NhZ2VzfGZpbGVzfGhpc3Rvcnl8aG91cnMpXG4gICAgICBjb25zdCB0YXNrVXJsUmVnZXggPSBuZXcgUmVnRXhwKFRBU0tfVVJMX1JFR0VYX1BBVFRFUk4sICdnJylcbiAgICAgIGNvbnN0IG1hdGNoZXMgPSBbLi4uY29udGVudC5tYXRjaEFsbCh0YXNrVXJsUmVnZXgpXVxuXG4gICAgICBsZXQgY29udGVudFRvQWRkID0gY29udGVudFxuICAgICAgY29uc3QgcHJldmlvdXNNZXNzYWdlID0gbWVzc2FnZXNSZWYuY3VycmVudC5maWx0ZXIobSA9PiBtLmlkICE9PSB0ZW1wTWVzc2FnZUlkKS5hdCgtMSlcbiAgICAgIGNvbnN0IGhhc0FwcHJvdmFsSW5QcmV2aW91c01lc3NhZ2UgPSBwcmV2aW91c01lc3NhZ2U/LmFwcHJvdmFsICE9IG51bGxcbiAgICAgIGNvbnN0IHBlbmRpbmdBY3Rpb25zID0gcHJldmlvdXNNZXNzYWdlPy5hcHByb3ZhbD8ucGVuZGluZ19hY3Rpb25zIHx8IFtdXG4gICAgICBjb25zdCB7XG4gICAgICAgIHdhc1Rhc2tDcmVhdGlvbixcbiAgICAgICAgd2FzVGFza0VkaXQsXG4gICAgICAgIHdhc1Rhc2tEZWxldGUsXG4gICAgICAgIHdhc0NyZWF0ZUFnZW50QXBwcm92ZWQsXG4gICAgICAgIHdhc0NvbmZpZ3VyZUFnZW50QWNjZXNzQXBwcm92ZWQsXG4gICAgICAgIHdhc0VkaXRBZ2VudEFwcHJvdmVkLFxuICAgICAgfSA9IHJlc29sdmVBcHByb3ZlZFBlbmRpbmdBY3Rpb25GbGFncyhcbiAgICAgICAgaGFzQXBwcm92YWxJblByZXZpb3VzTWVzc2FnZSxcbiAgICAgICAgcHJldmlvdXNNZXNzYWdlPy5hcHByb3ZhbFN0YXR1cyxcbiAgICAgICAgcGVuZGluZ0FjdGlvbnNcbiAgICAgIClcbiAgICAgIGNvbnN0IGNyZWF0ZUFnZW50Rm9sbG93VXAgPSByZXNvbHZlQ3JlYXRlQWdlbnRGb2xsb3dVcChcbiAgICAgICAgeyB3YXNDcmVhdGVBZ2VudEFwcHJvdmVkLCB3YXNDb25maWd1cmVBZ2VudEFjY2Vzc0FwcHJvdmVkIH0sXG4gICAgICAgIEJvb2xlYW4od2luZG93Lk1BSUFfQ0hBVF9BSV9GRUFUVVJFX0FDQ0VTU19NVUxUSV9BR0VOVFMpLFxuICAgICAgICBjb21wbGV0ZWRBZ2VudElkLFxuICAgICAgICBwZW5kaW5nQWN0aW9uc1xuICAgICAgKVxuXG4gICAgICBpZiAod2FzQ3JlYXRlQWdlbnRBcHByb3ZlZCkge1xuICAgICAgICBldmVudChFVkVOVFMuYWlDaGF0SGl0bE9wdGlvbiwge1xuICAgICAgICAgIGFnZW50X3R5cGU6IGdldEhpdGxBbmFseXRpY3NBZ2VudFR5cGUoYWdlbnQpLFxuICAgICAgICAgIGFjdGlvbl90eXBlOiBidWlsZEhpdGxBY3Rpb25UeXBlTGlzdChwZW5kaW5nQWN0aW9ucyksXG4gICAgICAgICAgZGVjaXNpb246ICdhY2NlcHQnLFxuICAgICAgICAgIG9wdGlvbjogJ2NyZWF0ZV9hZ2VudCcsXG4gICAgICAgICAgLi4uKGNvbXBsZXRlZEFnZW50SWQ/LnRyaW0oKSA/IHsgY3JlYXRlZF9hZ2VudF9pZDogY29tcGxldGVkQWdlbnRJZC50cmltKCkgfSA6IHt9KSxcbiAgICAgICAgfSlcbiAgICAgIH1cblxuICAgICAgY29uc3QgbWFudWFsQXBwcm92YWxGb3JBbmFseXRpY3MgPSBsYXN0TWFudWFsQXBwcm92YWxSZWYuY3VycmVudFxuICAgICAgY29uc3Qgd2FzTWFudWFsQ3JlYXRlQWdlbnRBcHByb3ZlZCA9XG4gICAgICAgIG1hbnVhbEFwcHJvdmFsRm9yQW5hbHl0aWNzICYmIG5vcm1hbGl6ZUhpdGxUb29sTmFtZShtYW51YWxBcHByb3ZhbEZvckFuYWx5dGljcy50b29sTmFtZSkgPT09ICdjcmVhdGVfYWdlbnQnXG5cbiAgICAgIGlmICh3YXNNYW51YWxDcmVhdGVBZ2VudEFwcHJvdmVkKSB7XG4gICAgICAgIGV2ZW50KEVWRU5UUy5haUNoYXRIaXRsT3B0aW9uLCB7XG4gICAgICAgICAgYWdlbnRfdHlwZTogZ2V0SGl0bEFuYWx5dGljc0FnZW50VHlwZShhZ2VudCksXG4gICAgICAgICAgYWN0aW9uX3R5cGU6ICdjcmVhdGVfYWdlbnQnLFxuICAgICAgICAgIGRlY2lzaW9uOiAnYWNjZXB0JyxcbiAgICAgICAgICByZXNvbHV0aW9uX3NvdXJjZTogJ21hbnVhbCcsXG4gICAgICAgICAgb3B0aW9uOiAnY3JlYXRlX2FnZW50JyxcbiAgICAgICAgICAuLi4oY29tcGxldGVkQWdlbnRJZD8udHJpbSgpID8geyBjcmVhdGVkX2FnZW50X2lkOiBjb21wbGV0ZWRBZ2VudElkLnRyaW0oKSB9IDoge30pLFxuICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICBjb25zdCBlZGl0QWdlbnRGb2xsb3dVcCA9IHJlc29sdmVFZGl0QWdlbnRGb2xsb3dVcCh3YXNFZGl0QWdlbnRBcHByb3ZlZCwgY29tcGxldGVkQWdlbnRJZCwgcGVuZGluZ0FjdGlvbnMpXG4gICAgICBjb25zdCB0YXNrSWRzRm9yRGFzaGJvYXJkID0gcmVzb2x2ZVRhc2tJZHNGb3JEYXNoYm9hcmQoY29udGVudCwgdGFza1VybFJlZ2V4LCBwZW5kaW5nQWN0aW9ucywgd2FzVGFza0RlbGV0ZSlcblxuICAgICAgY29uc3Qgc2hvdWxkU3luY0Rhc2hib2FyZCA9IHNob3VsZFN5bmNUYXNrRGFzaGJvYXJkKFxuICAgICAgICBoYXNBcHByb3ZhbEluUHJldmlvdXNNZXNzYWdlLFxuICAgICAgICB3YXNUYXNrQ3JlYXRpb24sXG4gICAgICAgIHdhc1Rhc2tFZGl0LFxuICAgICAgICB3YXNUYXNrRGVsZXRlLFxuICAgICAgICB0YXNrSWRzRm9yRGFzaGJvYXJkXG4gICAgICApXG5cbiAgICAgIGlmIChzaG91bGRTeW5jRGFzaGJvYXJkKSB7XG4gICAgICAgIGNvbnN0IHRhc2tJZHMgPSB0YXNrSWRzRm9yRGFzaGJvYXJkXG4gICAgICAgIGlmIChtYXRjaGVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBjb25zdCB0YWIgPSBhd2FpdCBnZXRUYWJUYXNrRGVmYXVsdCh0YXNrSWRzWzBdKVxuICAgICAgICAgIGNvbnN0IHRhYlNlZ21lbnQgPSB0YWIgPyBgLyR7dGFifWAgOiAnL2RldGFpbCdcbiAgICAgICAgICBjb250ZW50VG9BZGQgPSByZXBsYWNlVGFza1VybHNXaXRoVGFiU2VnbWVudChjb250ZW50LCB0YXNrVXJsUmVnZXgsIHRhYlNlZ21lbnQpXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBsYXN0UHJvamVjdE1lc3NhZ2UgPSBtZXNzYWdlc1JlZi5jdXJyZW50LmZpbHRlcihtc2cgPT4gbXNnLnByb2plY3RJZCkuYXQoLTEpXG4gICAgICAgIGNvbnN0IGNvbnRleHRQcm9qZWN0SWRSYXcgPSBwcm9qZWN0Py5pZCB8fCBsYXN0UHJvamVjdE1lc3NhZ2U/LnByb2plY3RJZFxuICAgICAgICBjb25zdCBjb250ZXh0UHJvamVjdElkID0gY29udGV4dFByb2plY3RJZFJhdyA/IHBhcnNlSW50KFN0cmluZyhjb250ZXh0UHJvamVjdElkUmF3KSwgMTApIDogbnVsbFxuICAgICAgICBjb25zdCB7IGlzT25Qcm9qZWN0Um91dGUgfSA9IHJlc29sdmVQcm9qZWN0RGFzaGJvYXJkU3luYyhjb250ZXh0UHJvamVjdElkLCB3aW5kb3cubG9jYXRpb24ucGF0aG5hbWUpXG5cbiAgICAgICAgaWYgKGlzT25Qcm9qZWN0Um91dGUpIHtcbiAgICAgICAgICBpZiAod2FzVGFza0NyZWF0aW9uKSB7XG4gICAgICAgICAgICB3aW5kb3cubmV3UHJvamVjdERhc2hib2FyZD8uYWRkRXhpc3RpbmdUYXNrVG9EYXNoYm9hcmQ/Lih0YXNrSWRzKVxuICAgICAgICAgIH0gZWxzZSBpZiAod2FzVGFza0VkaXQpIHtcbiAgICAgICAgICAgIHdpbmRvdy5uZXdQcm9qZWN0RGFzaGJvYXJkPy5lZGl0RXhpc3RpbmdUYXNrSW5EYXNoYm9hcmQ/Lih0YXNrSWRzKVxuICAgICAgICAgIH0gZWxzZSBpZiAod2FzVGFza0RlbGV0ZSkge1xuICAgICAgICAgICAgd2luZG93Lm5ld1Byb2plY3REYXNoYm9hcmQ/LmRlbGV0ZUV4aXN0aW5nVGFza0Zyb21EYXNoYm9hcmQ/Lih0YXNrSWRzKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBSZWZldGNoIGRlbCB0YXNrIHBhbmVsIHNpIGVzdMOhIGFiaWVydG8geSBsYSB0b29sIGFwcm9iYWRhIGVkaXTDsy9ib3Jyw7MgZXNhIHRhcmVhLlxuICAgICAgLy8gQ3VicmUgbG9zIGRvcyBmbHVqb3MgZGUgYXBwcm92YWw6XG4gICAgICAvLyAgIDEpIEFwcHJvdmFsIHBvciBib3TDs24g4oaSIGBwcmV2aW91c01lc3NhZ2UuYXBwcm92YWwucGVuZGluZ19hY3Rpb25zYCAodsOtYSBoYXNBcHByb3ZhbEluUHJldmlvdXNNZXNzYWdlKVxuICAgICAgLy8gICAyKSBNYW51YWwgYXBwcm92YWwgKHVzdWFyaW8gdGlwZWEgXCJzaVwiL1wibm9cIikg4oaSIGBsYXN0TWFudWFsQXBwcm92YWxSZWYuY3VycmVudGBcbiAgICAgIGNvbnN0IG9wZW5UYXNrUGFuZWxJZCA9IHdpbmRvdy50YXNrUGFuZWw/LnRhc2tJZFxuICAgICAgY29uc3QgbWFudWFsQXBwcm92YWwgPSBsYXN0TWFudWFsQXBwcm92YWxSZWYuY3VycmVudFxuICAgICAgbGFzdE1hbnVhbEFwcHJvdmFsUmVmLmN1cnJlbnQgPSBudWxsIC8vIGNvbnN1bWlyIHVuYSBzb2xhIHZlelxuICAgICAgY29uc3QgbWFudWFsV2FzVGFza0VkaXQgPSBpc1Rhc2tFZGl0VG9vbE5hbWUobWFudWFsQXBwcm92YWw/LnRvb2xOYW1lKVxuICAgICAgY29uc3QgbWFudWFsV2FzVGFza0RlbGV0ZSA9IGlzVGFza0RlbGV0ZVRvb2xOYW1lKG1hbnVhbEFwcHJvdmFsPy50b29sTmFtZSlcblxuICAgICAgLy8gU3luYyBQbGFubmVyOiBhdmlzYXIgY2FyZ2EgZGUgaG9yYXMgY29uZmlybWFkYSAoY3JlYXRlX2hvdXIgLyBjcmVhdGVfaG91cnMpLlxuICAgICAgY29uc3QgaG91cnNUb29sc0Zyb21BcHByb3ZhbCA9IHBlbmRpbmdBY3Rpb25zXG4gICAgICAgIC5tYXAoKGFjdGlvbjogUGVuZGluZ0FjdGlvbikgPT4gYWN0aW9uLnRvb2xfbmFtZSlcbiAgICAgICAgLmZpbHRlcigodG9vbE5hbWUpOiB0b29sTmFtZSBpcyBzdHJpbmcgPT4gaXNIb3Vyc0NoYXJnZVRvb2wodG9vbE5hbWUpKVxuICAgICAgY29uc3Qgd2FzSG91cnNDaGFyZ2VBcHByb3ZlZCA9XG4gICAgICAgIGhhc0FwcHJvdmFsSW5QcmV2aW91c01lc3NhZ2UgJiZcbiAgICAgICAgcHJldmlvdXNNZXNzYWdlPy5hcHByb3ZhbFN0YXR1cyA9PT0gJ2FwcHJvdmVkJyAmJlxuICAgICAgICBob3Vyc1Rvb2xzRnJvbUFwcHJvdmFsLmxlbmd0aCA+IDBcbiAgICAgIGNvbnN0IG1hbnVhbEhvdXJzVG9vbCA9IG1hbnVhbEFwcHJvdmFsPy50b29sTmFtZVxuICAgICAgY29uc3Qgd2FzSG91cnNDaGFyZ2VNYW51YWxBcHByb3ZlZCA9IGlzSG91cnNDaGFyZ2VUb29sKG1hbnVhbEhvdXJzVG9vbClcblxuICAgICAgaWYgKHdhc0hvdXJzQ2hhcmdlQXBwcm92ZWQgfHwgd2FzSG91cnNDaGFyZ2VNYW51YWxBcHByb3ZlZCkge1xuICAgICAgICBjb25zdCB0b29scyA9IHdhc0hvdXJzQ2hhcmdlQXBwcm92ZWQgPyBob3Vyc1Rvb2xzRnJvbUFwcHJvdmFsIDogbWFudWFsSG91cnNUb29sID8gW21hbnVhbEhvdXJzVG9vbF0gOiBbXVxuICAgICAgICBkaXNwYXRjaE1haWFIb3Vyc0NoYXJnZWQoe1xuICAgICAgICAgIHNvdXJjZTogJ21haWEnLFxuICAgICAgICAgIHRvb2xzLFxuICAgICAgICAgIHNlc3Npb25JZDogbWVtb3J5U2Vzc2lvbklkLFxuICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICBjb25zdCBtYW51YWxQc2V1ZG9BY3Rpb246IFBlbmRpbmdBY3Rpb24gfCBudWxsID0gbWFudWFsQXBwcm92YWxcbiAgICAgICAgPyAoeyB0b29sX25hbWU6IG1hbnVhbEFwcHJvdmFsLnRvb2xOYW1lLCB0b29sX2FyZ3M6IG1hbnVhbEFwcHJvdmFsLnRvb2xBcmdzID8/IHt9IH0gYXMgUGVuZGluZ0FjdGlvbilcbiAgICAgICAgOiBudWxsXG4gICAgICBjb25zdCBhZmZlY3RlZFRhc2tJZHMgPSBbXG4gICAgICAgIC4uLmV4dHJhY3RUYXNrSWRzRnJvbVBlbmRpbmdBY3Rpb25zQXJncyhwZW5kaW5nQWN0aW9ucyksXG4gICAgICAgIC4uLnRhc2tJZHNGb3JEYXNoYm9hcmQsXG4gICAgICAgIC4uLihtYW51YWxQc2V1ZG9BY3Rpb24gPyBleHRyYWN0VGFza0lkc0Zyb21QZW5kaW5nQWN0aW9uc0FyZ3MoW21hbnVhbFBzZXVkb0FjdGlvbl0pIDogW10pLFxuICAgICAgXS5tYXAoU3RyaW5nKVxuXG4gICAgICBpZiAoXG4gICAgICAgIHNob3VsZFJlZmV0Y2hPcGVuVGFza1BhbmVsKFxuICAgICAgICAgIG9wZW5UYXNrUGFuZWxJZCxcbiAgICAgICAgICB7IHdhc1Rhc2tFZGl0LCB3YXNUYXNrRGVsZXRlIH0sXG4gICAgICAgICAgeyBtYW51YWxXYXNUYXNrRWRpdCwgbWFudWFsV2FzVGFza0RlbGV0ZSB9LFxuICAgICAgICAgIGFmZmVjdGVkVGFza0lkc1xuICAgICAgICApXG4gICAgICApIHtcbiAgICAgICAgd2luZG93LnRhc2tQYW5lbD8ucmVmZXRjaFRhc2s/LigpXG4gICAgICB9XG5cbiAgICAgIC8vIFN3YXAgcGxhY2Vob2xkZXIg4oaSIG1lbnNhamUgZmluYWwuIFZhIGVuIGBmbHVzaFN5bmNgIHBvcnF1ZSBlbCBtb3RvciB5YVxuICAgICAgLy8gZGVqw7MgZW5jb2xhZGFzIGxhcyBlc2NyaXR1cmFzIGRlIGZpbiBkZSBzdHJlYW0gKGlzV3JpdGluZywgYWN0aXZpdHksXG4gICAgICAvLyBzdGF0dXMpLCB5IGVzYXMgdmlhamFuIGVuIFN5bmNMYW5lIHBvciBzZXIgZGUgdW4gc3RvcmUgZXh0ZXJubyBtaWVudHJhc1xuICAgICAgLy8gcXVlIGVzdG9zIHNldFN0YXRlIHZpYWphbiBlbiBEZWZhdWx0TGFuZS4gU2luIGZvcnphcmxvLCBSZWFjdCBwaW50YVxuICAgICAgLy8gcHJpbWVybyBlbCBwbGFjZWhvbGRlciB5YSBzaW4gaW5kaWNhZG9yIGRlIGFjdGl2aWRhZCAodHVybm8gNDFweCBtw6FzXG4gICAgICAvLyBiYWpvKSB5IHJlY2nDqW4gfjI1bXMgZGVzcHXDqXMgZWwgbWVuc2FqZSBkZWZpbml0aXZvOiBlc2Ugc2FsdG8gZGUgaWRhIHlcbiAgICAgIC8vIHZ1ZWx0YSBlcmEgZWwgZmxpY2tlciBkZSBmaW4gZGUgc3RyZWFtLiBDb24gZWwgZmx1c2gsIHRvZG8gZWwgZmluIGRlXG4gICAgICAvLyBzdHJlYW0gZW50cmEgZW4gdW4gw7puaWNvIGNvbW1pdC5cbiAgICAgIGZsdXNoU3luYygoKSA9PiB7XG4gICAgICAgIGRyb3BGcm9tU2Vzc2lvbihzZXNzaW9uSWQsIHRlbXBNZXNzYWdlSWQpXG4gICAgICAgIGNvbW1pdFRvU2Vzc2lvbihzZXNzaW9uSWQsIHtcbiAgICAgICAgICBpZDogZmluYWxNZXNzYWdlSWQsXG4gICAgICAgICAgbWVzc2FnZTogY29udGVudFRvQWRkLFxuICAgICAgICAgIGRhdGU6IG5ldyBEYXRlKCksXG4gICAgICAgICAgdXNlcjogeyBpZDogJ2Fzc2lzdGFudCcsIG5hbWU6ICdBc3Npc3RhbnQnIH0sXG4gICAgICAgICAgcm9sZTogQ2hhdEhpc3RvcnlSb2xlLkFTU0lTVEFOVCxcbiAgICAgICAgICBzb3VyY2VzLFxuICAgICAgICAgIC4uLihhdHRhY2htZW50cy5sZW5ndGggPiAwID8geyBhdHRhY2htZW50cyB9IDoge30pLFxuICAgICAgICAgIG1lbW9yeVNlc3Npb25JZCxcbiAgICAgICAgICBzdWdnZXN0aW9uczogc3VnZ2VzdGlvbnMgfHwgW10sXG4gICAgICAgICAgLi4uKGNyZWF0ZUFnZW50Rm9sbG93VXAgPyB7IGNyZWF0ZUFnZW50Rm9sbG93VXAgfSA6IHt9KSxcbiAgICAgICAgICByZWFzb25pbmc6IGZpbmFsVHJhY2UsXG4gICAgICAgIH0pXG4gICAgICB9KVxuICAgICAgY2xlYXJTZXNzaW9uVGFpbChzZXNzaW9uSWQpXG5cbiAgICAgIGlmIChjcmVhdGVBZ2VudEZvbGxvd1VwPy5hZ2VudElkKSB7XG4gICAgICAgIGZldGNoQWdlbnREZXRhaWwoY3JlYXRlQWdlbnRGb2xsb3dVcC5hZ2VudElkKVxuICAgICAgICAgIC50aGVuKGNoYXRBZ2VudCA9PiB7XG4gICAgICAgICAgICBkb2N1bWVudC5kaXNwYXRjaEV2ZW50KFxuICAgICAgICAgICAgICBuZXcgQ3VzdG9tRXZlbnQoJ21haWEtbWVyZ2UtY3JlYXRlZC1hZ2VudC1pbnRvLWxpc3QnLCB7XG4gICAgICAgICAgICAgICAgZGV0YWlsOiB7IGFnZW50OiBjaGF0QWdlbnQgfSxcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICB9KVxuICAgICAgICAgIC5jYXRjaChlcnIgPT4ge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcignW3VzZUNoYXRNYW5hZ2VyXSBObyBzZSBwdWRvIGHDsWFkaXIgZWwgYWdlbnRlIHJlY2nDqW4gY3JlYWRvIGFsIGxpc3RhZG8nLCBlcnIpXG4gICAgICAgICAgfSlcbiAgICAgIH1cblxuICAgICAgaWYgKGVkaXRBZ2VudEZvbGxvd1VwPy5hZ2VudElkKSB7XG4gICAgICAgIGZldGNoQWdlbnREZXRhaWwoZWRpdEFnZW50Rm9sbG93VXAuYWdlbnRJZClcbiAgICAgICAgICAudGhlbihjaGF0QWdlbnQgPT4ge1xuICAgICAgICAgICAgZG9jdW1lbnQuZGlzcGF0Y2hFdmVudChcbiAgICAgICAgICAgICAgbmV3IEN1c3RvbUV2ZW50KCdtYWlhLXN5bmMtZWRpdGVkLWFnZW50LWZyb20tY2hhdCcsIHtcbiAgICAgICAgICAgICAgICBkZXRhaWw6IHsgYWdlbnQ6IGNoYXRBZ2VudCB9LFxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKVxuICAgICAgICAgIH0pXG4gICAgICAgICAgLmNhdGNoKGVyciA9PiB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdbdXNlQ2hhdE1hbmFnZXJdIE5vIHNlIHB1ZG8gcmVmcmVzY2FyIGVsIGFnZW50ZSBlZGl0YWRvJywgZXJyKVxuICAgICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIGlzUHJvY2Vzc2luZ1JlZi5jdXJyZW50ID0gZmFsc2VcbiAgICAgIHJldHJ5U25hcHNob3RSZWYuY3VycmVudCA9IG51bGxcblxuICAgICAgY29uc3QgeyBpc0NoYXRWaWV3VmlzaWJsZSwgbWFya0NoYXRBc1JlYWQgfSA9IGdldENoYXRzU3RvcmVTdGF0ZSgpXG4gICAgICBpZiAoaXNBY3RpdmUgJiYgaXNDaGF0Vmlld1Zpc2libGUpIHtcbiAgICAgICAgYXdhaXQgbWFya0NoYXRBc1JlYWQoc2Vzc2lvbklkLCB7IGZvcmNlOiB0cnVlIH0pXG4gICAgICB9XG5cbiAgICAgIGlmIChmaXJzdFRpbWVSZWYuY3VycmVudCkge1xuICAgICAgICBjb25zdCBjdXN0b21FdmVudCA9IG5ldyBDdXN0b21FdmVudCgncmVmZXRjaC1zZXNzaW9uJylcbiAgICAgICAgZG9jdW1lbnQuZGlzcGF0Y2hFdmVudChjdXN0b21FdmVudClcbiAgICAgICAgZmlyc3RUaW1lUmVmLmN1cnJlbnQgPSBmYWxzZVxuICAgICAgfVxuICAgIH0sXG4gICAgW2NvbW1pdFRvU2Vzc2lvbiwgZHJvcEZyb21TZXNzaW9uLCBjbGVhclNlc3Npb25UYWlsLCBwcm9qZWN0LCBnZXRUYWJUYXNrRGVmYXVsdCwgZXZlbnQsIGFnZW50XVxuICApXG5cbiAgLy8gYHBhcnRpYWxUZXh0YCBsbyByZXNjYXRhIGBzdG9wU3RyZWFtYCBhbnRlcyBkZSBsaW1waWFyIGVsIHN0b3JlIGV4dGVybm86IGVsIHRleHRvIGVuIHZpdm9cbiAgLy8gbm8gdml2ZSBlbiBgbWVzc2FnZXNgLCBhc8OtIHF1ZSBzaW4gZXN0byBsYSByZXNwdWVzdGEgYSBtZWRpYXMgZGVzYXBhcmVjZSBkZSBwYW50YWxsYSBhdW5xdWVcbiAgLy8gZWwgYmFja2VuZCBzw60gbGEgaGF5YSBwZXJzaXN0aWRvLlxuICBjb25zdCBoYW5kbGVTdHJlYW1TdG9wID0gdXNlQ2FsbGJhY2soXG4gICAgKHBhcnRpYWxUZXh0OiBzdHJpbmcpID0+IHtcbiAgICAgIC8vIEVsIHN0b3Agc2llbXByZSBhcGxpY2EgYSBsYSBzZXNpw7NuIGFjdGl2YSAoYm90w7NuIGRlbCBpbnB1dCB2aXNpYmxlKS5cbiAgICAgIGNvbnN0IHNlc3Npb25JZCA9IGN1cnJlbnRDaGF0SWQuY3VycmVudFxuICAgICAgY2xlYXJTdHJlYW1VaVJlZi5jdXJyZW50KClcbiAgICAgIGNvbnN0IHRlbXBNZXNzYWdlSWQgPSBzdHJlYW1pbmdQbGFjZWhvbGRlck1lc3NhZ2VJZChjdXJyZW50TWVzc2FnZUlkLmN1cnJlbnQpXG4gICAgICBjb25zdCBmaW5hbE1lc3NhZ2VJZCA9IGBhbnN3ZXItJHtjdXJyZW50TWVzc2FnZUlkLmN1cnJlbnR9YFxuICAgICAgY29uc3Qgc3RvcHBlZFRyYWNlID0gcmVhc29uaW5nVHJhY2VGb3IodGVtcE1lc3NhZ2VJZClcblxuICAgICAgc2Vzc2lvblN0cmVhbWluZ1RleHQuY2xlYXIoc2Vzc2lvbklkKVxuICAgICAgc3RyZWFtaW5nUGxhY2Vob2xkZXJJZFJlZi5jdXJyZW50ID0gbnVsbFxuICAgICAgYWN0aXZlU3RyZWFtQ2hhdElkUmVmLmN1cnJlbnQgPSBudWxsXG4gICAgICBkcm9wRnJvbVNlc3Npb24oc2Vzc2lvbklkLCB0ZW1wTWVzc2FnZUlkKVxuXG4gICAgICBpZiAoc3RvcHBlZFRyYWNlPy5zdGVwcy5sZW5ndGgpIHtcbiAgICAgICAgcmVhc29uaW5nU3RvcmUuZmluaXNoKHRlbXBNZXNzYWdlSWQsIG51bGwpXG4gICAgICAgIHJlYXNvbmluZ1N0b3JlLnJlbmFtZSh0ZW1wTWVzc2FnZUlkLCBmaW5hbE1lc3NhZ2VJZClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlYXNvbmluZ1N0b3JlLnJlbW92ZSh0ZW1wTWVzc2FnZUlkKVxuICAgICAgfVxuXG4gICAgICBpZiAocGFydGlhbFRleHQpIHtcbiAgICAgICAgY29tbWl0VG9TZXNzaW9uKHNlc3Npb25JZCwge1xuICAgICAgICAgIGlkOiBmaW5hbE1lc3NhZ2VJZCxcbiAgICAgICAgICBtZXNzYWdlOiBwYXJ0aWFsVGV4dCxcbiAgICAgICAgICBkYXRlOiBuZXcgRGF0ZSgpLFxuICAgICAgICAgIHVzZXI6IHsgaWQ6ICdhc3Npc3RhbnQnLCBuYW1lOiAnQXNzaXN0YW50JyB9LFxuICAgICAgICAgIHJvbGU6IENoYXRIaXN0b3J5Um9sZS5BU1NJU1RBTlQsXG4gICAgICAgICAgLi4uKHN0b3BwZWRUcmFjZSA/IHsgcmVhc29uaW5nOiBzdG9wcGVkVHJhY2UgfSA6IHt9KSxcbiAgICAgICAgfSlcbiAgICAgIH1cblxuICAgICAgY29tbWl0VG9TZXNzaW9uKHNlc3Npb25JZCwge1xuICAgICAgICBpZDogYCR7ZmluYWxNZXNzYWdlSWR9LWNhbmNlbGxlZGAsXG4gICAgICAgIG1lc3NhZ2U6IHQoJ2NoYXQuY2FuY2VsbGVkJyksXG4gICAgICAgIGRhdGU6IG5ldyBEYXRlKCksXG4gICAgICAgIHVzZXI6IHsgaWQ6ICdhc3Npc3RhbnQnLCBuYW1lOiAnQXNzaXN0YW50JyB9LFxuICAgICAgICByb2xlOiBDaGF0SGlzdG9yeVJvbGUuQVNTSVNUQU5ULFxuICAgICAgICBpc0Zyb250ZW5kQ2FuY2VsbGVkOiB0cnVlLFxuICAgICAgfSlcbiAgICAgIGNsZWFyU2Vzc2lvblRhaWwoc2Vzc2lvbklkKVxuICAgICAgaXNQcm9jZXNzaW5nUmVmLmN1cnJlbnQgPSBmYWxzZVxuICAgICAgcmV0cnlTbmFwc2hvdFJlZi5jdXJyZW50ID0gbnVsbFxuICAgIH0sXG4gICAgW2NvbW1pdFRvU2Vzc2lvbiwgZHJvcEZyb21TZXNzaW9uLCBjbGVhclNlc3Npb25UYWlsLCB0XVxuICApXG5cbiAgY29uc3QgaGFuZGxlQXBwcm92YWxSZXF1aXJlZCA9IHVzZUNhbGxiYWNrKFxuICAgIChjdHg6IFN0cmVhbUNvbnRleHQsIGFwcHJvdmFsOiBBcHByb3ZhbFJlcXVlc3QsIGFjY3VtdWxhdGVkQ29udGVudDogc3RyaW5nKSA9PiB7XG4gICAgICBjb25zdCB7IHNlc3Npb25JZCwgcGxhY2Vob2xkZXJJZCB9ID0gY3R4XG4gICAgICBjb25zdCBpc0FjdGl2ZSA9IGFjdGl2ZVZpZXcuaXMoc2Vzc2lvbklkKVxuXG4gICAgICBzZXNzaW9uU3RyZWFtaW5nVGV4dC5jbGVhcihzZXNzaW9uSWQpXG4gICAgICBkcm9wRnJvbVNlc3Npb24oc2Vzc2lvbklkLCBwbGFjZWhvbGRlcklkKVxuXG4gICAgICByZXRyeVNuYXBzaG90UmVmLmN1cnJlbnQgPSBudWxsXG5cbiAgICAgIGlmIChpc0FjdGl2ZSkge1xuICAgICAgICBzdHJlYW1pbmdQbGFjZWhvbGRlcklkUmVmLmN1cnJlbnQgPSBudWxsXG4gICAgICAgIGFjdGl2ZVN0cmVhbUNoYXRJZFJlZi5jdXJyZW50ID0gbnVsbFxuICAgICAgfVxuXG4gICAgICBjb25zdCBoaXRsQ29udGV4dDogSGl0bEV4ZWN1dGlvbkNvbnRleHQgPSB7XG4gICAgICAgIG1lc3NhZ2VJZDogYGFwcHJvdmFsLSR7YXBwcm92YWwub3JpZ2luYWxfdGhyZWFkX2lkfWAsXG4gICAgICAgIG1lc3NhZ2VUZXh0OiBhY2N1bXVsYXRlZENvbnRlbnQgfHwgJycsXG4gICAgICAgIGFwcHJvdmFsLFxuICAgICAgICBwZW5kaW5nQWN0aW9uczogYXBwcm92YWwucGVuZGluZ19hY3Rpb25zLFxuICAgICAgICB0aHJlYWRJZHM6IGFwcHJvdmFsLnBlbmRpbmdfYWN0aW9ucz8ubWFwKGFjdGlvbiA9PiBhY3Rpb24udGhyZWFkX2lkKSxcbiAgICAgIH1cbiAgICAgIGlmIChpc0FjdGl2ZSkge1xuICAgICAgICBoaXRsRXhlY3V0aW9uQ29udGV4dFJlZi5jdXJyZW50ID0gaGl0bENvbnRleHRcbiAgICAgIH1cblxuICAgICAgLy8gUHJlYXByb2JhZG86IHBvciBkZXRlY2Npw7NuIG1hbnVhbCBvIHBvciBhdXRvLWFwcHJvdmUuIEVuIGFtYm9zIGNhc29zIGVsXG4gICAgICAvLyBzdHJlYW0gY29udGluw7phIHkgbm8gaGF5IHF1ZSBwaW50YXIgbGEgY2FqYSBkZSBhcHJvYmFjacOzbi5cbiAgICAgIGlmIChhcHByb3ZhbC5tYW51YWxfYXBwcm92YWxfZGV0ZWN0ZWQgfHwgYXBwcm92YWwuYXV0b19hcHByb3ZlZCB8fCBhcHByb3ZhbC5hcHByb3ZhbF9zdGF0dXMgPT09ICdhcHByb3ZlZCcpIHtcbiAgICAgICAgdHJhY2tNYW51YWxIaXRsRXZlbnRzKFxuICAgICAgICAgIGV2ZW50LFxuICAgICAgICAgIHsgaW1wcmVzc2lvbjogRVZFTlRTLmFpQ2hhdEhpdGwsIG9wdGlvbjogRVZFTlRTLmFpQ2hhdEhpdGxPcHRpb24gfSxcbiAgICAgICAgICBhZ2VudCxcbiAgICAgICAgICBhcHByb3ZhbCxcbiAgICAgICAgICB0cmFja2VkTWFudWFsSGl0bEtleXNSZWYuY3VycmVudCxcbiAgICAgICAgICBhcHByb3ZhbC5tYW51YWxfYXBwcm92YWxfZGV0ZWN0ZWQgPyAnbWFudWFsJyA6ICdhdXRvJ1xuICAgICAgICApXG5cbiAgICAgICAgY29uc3QgZmlyc3RBY3Rpb24gPSBhcHByb3ZhbC5wZW5kaW5nX2FjdGlvbnM/LlswXVxuICAgICAgICBjb25zdCB0b29sTmFtZSA9IChhcHByb3ZhbCBhcyB7IHRvb2xfbmFtZT86IHN0cmluZyB9KS50b29sX25hbWUgPz8gZmlyc3RBY3Rpb24/LnRvb2xfbmFtZSA/PyAnJ1xuICAgICAgICBjb25zdCB0b29sQXJncyA9XG4gICAgICAgICAgKChhcHByb3ZhbCBhcyB7IHRvb2xfYXJncz86IFJlY29yZDxzdHJpbmcsIHVua25vd24+IH0pLnRvb2xfYXJncyA/P1xuICAgICAgICAgICAgKGZpcnN0QWN0aW9uPy50b29sX2FyZ3MgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCB1bmRlZmluZWQpKSB8fFxuICAgICAgICAgIG51bGxcbiAgICAgICAgaWYgKHRvb2xOYW1lICYmIGlzQWN0aXZlKSB7XG4gICAgICAgICAgbGFzdE1hbnVhbEFwcHJvdmFsUmVmLmN1cnJlbnQgPSB7IHRvb2xOYW1lLCB0b29sQXJncyB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzQWN0aXZlKSB7XG4gICAgICAgICAgaXNQcm9jZXNzaW5nUmVmLmN1cnJlbnQgPSBmYWxzZVxuICAgICAgICB9XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICAvLyBBZGQgYSBtZXNzYWdlIHdpdGggdGhlIGFwcHJvdmFsIHJlcXVlc3RcbiAgICAgIGNvbnN0IGFwcHJvdmFsTWVzc2FnZUlkID0gYGFwcHJvdmFsLSR7YXBwcm92YWwub3JpZ2luYWxfdGhyZWFkX2lkfWBcbiAgICAgIHJlYXNvbmluZ1N0b3JlLnJlbmFtZShwbGFjZWhvbGRlcklkLCBhcHByb3ZhbE1lc3NhZ2VJZClcbiAgICAgIGNvbnN0IGFwcHJvdmFsVHJhY2UgPSBtYXBSZWFzb25pbmdUcmFjZShhcHByb3ZhbC5yZWFzb25pbmcpID8/IHJlYXNvbmluZ1RyYWNlRm9yKGFwcHJvdmFsTWVzc2FnZUlkKVxuICAgICAgY29tbWl0VG9TZXNzaW9uKHNlc3Npb25JZCwge1xuICAgICAgICBpZDogYXBwcm92YWxNZXNzYWdlSWQsXG4gICAgICAgIG1lc3NhZ2U6IGFjY3VtdWxhdGVkQ29udGVudCB8fCAnJyxcbiAgICAgICAgZGF0ZTogbmV3IERhdGUoKSxcbiAgICAgICAgdXNlcjogeyBpZDogJ2Fzc2lzdGFudCcsIG5hbWU6ICdBc3Npc3RhbnQnIH0sXG4gICAgICAgIHJvbGU6IENoYXRIaXN0b3J5Um9sZS5BU1NJU1RBTlQsXG4gICAgICAgIGFwcHJvdmFsLFxuICAgICAgICBhcHByb3ZhbFN0YXR1czogJ3BlbmRpbmcnLFxuICAgICAgICByZWFzb25pbmc6IGFwcHJvdmFsVHJhY2UsXG4gICAgICB9KVxuICAgICAgaWYgKGlzQWN0aXZlKSB7XG4gICAgICAgIGlzUHJvY2Vzc2luZ1JlZi5jdXJyZW50ID0gZmFsc2VcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGdldENoYXRzU3RvcmVTdGF0ZSgpLm1hcmtDaGF0QXNVbnJlYWQoc2Vzc2lvbklkKVxuICAgICAgICBub3RpZnlTZXNzaW9uRmluaXNoZWRJbkJhY2tncm91bmQoc2Vzc2lvbklkLCAnYXBwcm92YWxfcmVxdWlyZWQnKVxuICAgICAgfVxuICAgIH0sXG4gICAgW2FnZW50LCBjb21taXRUb1Nlc3Npb24sIGRyb3BGcm9tU2Vzc2lvbiwgZXZlbnRdXG4gIClcblxuICBjb25zdCB7XG4gICAgYXNrTWFpYSxcbiAgICByZXRyeUNvbXBsZXRpb24sXG4gICAgaXNMb2FkaW5nOiB3YWl0aW5nUmVzcG9uc2UsXG4gICAgaXNXcml0aW5nLFxuICAgIGxvYWRpbmdNZXNzYWdlLFxuICAgIHN0cmVhbUFjdGl2aXR5LFxuICAgIHVwZGF0ZVN0cmVhbUFjdGl2aXR5LFxuICAgIHN0b3BTdHJlYW1pbmcsXG4gIH0gPSB1c2VPcmNoZXN0cmF0b3JTdHJlYW0oe1xuICAgIGFjdGl2ZVNlc3Npb25JZCxcbiAgICBvbkVycm9yOiBoYW5kbGVTdHJlYW1FcnJvcixcbiAgICBvblN0cmVhbVVwZGF0ZTogaGFuZGxlU3RyZWFtVXBkYXRlLFxuICAgIG9uRmluaXNoU3RyZWFtOiBoYW5kbGVTdHJlYW1GaW5pc2gsXG4gICAgb25TdG9wOiBoYW5kbGVTdHJlYW1TdG9wLFxuICAgIG9uQXBwcm92YWxSZXF1aXJlZDogaGFuZGxlQXBwcm92YWxSZXF1aXJlZCxcbiAgICBoaXRsRXhlY3V0aW9uQ29udGV4dFJlZixcbiAgfSlcblxuICBjbGVhclN0cmVhbVVpUmVmLmN1cnJlbnQgPSAoKSA9PiB7XG4gICAgdXBkYXRlU3RyZWFtQWN0aXZpdHkobnVsbClcbiAgICBzZXRBY3RpdmVMb2FkaW5ncyh7fSlcbiAgICBoaXRsRXhlY3V0aW9uQ29udGV4dFJlZi5jdXJyZW50ID0gbnVsbFxuICB9XG5cbiAgY29uc3QgY3VycmVudFByb2plY3QgPSBwcm9qZWN0XG5cbiAgY29uc3Qgc2VuZE1lc3NhZ2UgPSB1c2VDYWxsYmFjayhcbiAgICBhc3luYyAoXG4gICAgICBtZXNzYWdlOiBzdHJpbmcsXG4gICAgICBhdHRhY2htZW50c09yT3B0aW9ucz86IEF0dGFjaG1lbnRGaWxlW10gfCBTZW5kTWVzc2FnZU9wdGlvbnMsXG4gICAgICBmYXFJZD86IHN0cmluZyxcbiAgICAgIGFnZW50U3VnZ2VzdGlvbklkPzogc3RyaW5nLFxuICAgICAgbWVudGlvbnM/OiBDb250ZXh0TWVudGlvbltdLFxuICAgICAgZnVhSWQ/OiBzdHJpbmcsXG4gICAgICBzY0lkPzogc3RyaW5nLFxuICAgICAgY29udGV4dERhdGE/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxuICAgICkgPT4ge1xuICAgICAgaWYgKCFjYW5TZW5kQ2hhdE1lc3NhZ2UoaXNQcm9jZXNzaW5nUmVmLmN1cnJlbnQsIHdhaXRpbmdSZXNwb25zZSwgbG9hZGluZ01lc3NhZ2VzKSkge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgLy8gVG9wZSBkZSBjb25jdXJyZW5jaWE6IHNpIGVzdGEgc2VzacOzbiBubyBlc3TDoSBnZW5lcmFuZG8geSB5YSBoYXlcbiAgICAgIC8vIE1BWF9DT05DVVJSRU5UX1NUUkVBTVMgYWN0aXZhcywgYXZpc2Ftb3MgeSBubyBhcnJhbmNhbW9zIG90cmEuXG4gICAgICBjb25zdCB3aWxsU3RhcnROZXdTdHJlYW0gPSAhc2Vzc2lvblN0cmVhbU1hbmFnZXIuaXNBY3RpdmUoY3VycmVudENoYXRJZC5jdXJyZW50KVxuICAgICAgaWYgKFxuICAgICAgICBzaG91bGRCbG9ja0NvbmN1cnJlbnRTdHJlYW1TdGFydChcbiAgICAgICAgICB3aWxsU3RhcnROZXdTdHJlYW0sXG4gICAgICAgICAgc2Vzc2lvblN0cmVhbU1hbmFnZXIuZ2V0QWN0aXZlQ291bnQoKSxcbiAgICAgICAgICBNQVhfQ09OQ1VSUkVOVF9TVFJFQU1TXG4gICAgICAgIClcbiAgICAgICkge1xuICAgICAgICBkb2N1bWVudC5kaXNwYXRjaEV2ZW50KFxuICAgICAgICAgIG5ldyBDdXN0b21FdmVudCgnc25hY2tiYXItZXZlbnQnLCB7XG4gICAgICAgICAgICBkZXRhaWw6IHsgc2hvdzogdHJ1ZSwgc2V2ZXJpdHk6ICdpbmZvJywgbWVzc2FnZTogdCgnY2hhdC50b29NYW55QWN0aXZlU2Vzc2lvbnMnKSB9LFxuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHsgYXR0YWNobWVudHMsIG9wdGlvbnMgfSA9IG5vcm1hbGl6ZVNlbmRNZXNzYWdlQXJncyhhdHRhY2htZW50c09yT3B0aW9ucylcbiAgICAgIC8vIExhcyBtZW50aW9ucyBwdWVkZW4gdmVuaXIgdsOtYSA1dG8gcGFyw6FtZXRybyAoY2FsbCBwb3NpdGlvbmFsIGRlc2RlIGVsIGZvb3RlcilcbiAgICAgIC8vIG8gdsOtYSBTZW5kTWVzc2FnZU9wdGlvbnMgKGNhbGwgcHJvZ3JhbcOhdGljbykuIEVsIHBhcsOhbWV0cm8gZXhwbMOtY2l0byBnYW5hLlxuICAgICAgY29uc3QgZWZmZWN0aXZlTWVudGlvbnMgPSBtZW50aW9ucyA/PyBvcHRpb25zLm1lbnRpb25zXG4gICAgICBjb25zdCBjb250ZXh0TWVzc2FnZTogQ29udGV4dE1lc3NhZ2UgfCB1bmRlZmluZWQgPSBidWlsZENvbnRleHRNZXNzYWdlKGVmZmVjdGl2ZU1lbnRpb25zKVxuICAgICAgY29uc3QgcGF5bG9hZEZ1YUlkID0gZnVhSWQgPz8gb3B0aW9ucy5mdWFJZFxuICAgICAgY29uc3QgcGF5bG9hZFNjSWQgPSBzY0lkID8/IG9wdGlvbnMuc2NJZFxuICAgICAgY29uc3QgcGF5bG9hZENvbnRleHREYXRhID0gY29udGV4dERhdGEgPz8gb3B0aW9ucy5jb250ZXh0RGF0YVxuICAgICAgY29uc3QgZGlzcGxheU1lc3NhZ2UgPSBmb3JtYXRRdWlja0FjdGlvbk1lc3NhZ2VGb3JEaXNwbGF5KG1lc3NhZ2UsIHtcbiAgICAgICAgZnVhSWQ6IHBheWxvYWRGdWFJZCxcbiAgICAgICAgc2NJZDogcGF5bG9hZFNjSWQsXG4gICAgICB9KVxuXG4gICAgICBpc1Byb2Nlc3NpbmdSZWYuY3VycmVudCA9IHRydWVcbiAgICAgIHNldEFjdGl2ZUNoYXRJZChjdXJyZW50Q2hhdElkLmN1cnJlbnQpXG4gICAgICBjb25zdCBuZXdNZXNzYWdlSWQgPSB1dWlkdjQoKVxuICAgICAgY3VycmVudE1lc3NhZ2VJZC5jdXJyZW50ID0gbmV3TWVzc2FnZUlkXG4gICAgICBjdXJyZW50VXNlclF1ZXN0aW9uLmN1cnJlbnQgPSBtZXNzYWdlXG5cbiAgICAgIGlmICghcmVwb3J0ZWRFdmVudC5jdXJyZW50KSB7XG4gICAgICAgIGV2ZW50KEVWRU5UUy5wbUFpVHlwZWRUZXh0KVxuICAgICAgICByZXBvcnRlZEV2ZW50LmN1cnJlbnQgPSB0cnVlXG4gICAgICB9XG5cbiAgICAgIC8vIFZlcmlmaWNhciBzaSBlbCBjb250ZXh0byBnbG9iYWwgZXN0w6EgZGVzYWN0dWFsaXphZG9cbiAgICAgIGNvbnN0IGxhc3RNZXNzYWdlV2l0aFByb2plY3QgPSBtZXNzYWdlc1JlZi5jdXJyZW50LmZpbHRlcihtc2cgPT4gbXNnLnByb2plY3RJZCkuYXQoLTEpXG5cbiAgICAgIGNvbnN0IGN1cnJlbnRBZ2VudEZyb21NZXNzYWdlcyA9IG1lc3NhZ2VzUmVmLmN1cnJlbnQ/LlttZXNzYWdlc1JlZi5jdXJyZW50Lmxlbmd0aCAtIDFdPy5hZ2VudElkXG5cbiAgICAgIGNvbnN0IHNlc3Npb25JZCA9IGN1cnJlbnRDaGF0SWQuY3VycmVudFxuICAgICAgY29uc3Qge1xuICAgICAgICBjaGlwc1Byb2plY3Q6IGN0eENoaXBzUHJvamVjdCxcbiAgICAgICAgcHJvamVjdDogY3R4UHJvamVjdCxcbiAgICAgICAgY2xpZW50OiBjdHhDbGllbnQsXG4gICAgICAgIHRhc2s6IGN0eFRhc2ssXG4gICAgICB9ID0gY29udGV4dFJlZi5jdXJyZW50XG5cbiAgICAgIGVuc3VyZVNlc3Npb25JblNpZGViYXIoe1xuICAgICAgICBzZXNzaW9uSWQsXG4gICAgICAgIHRpdGxlOiBidWlsZFNpZGViYXJTZXNzaW9uVGl0bGUoZGlzcGxheU1lc3NhZ2UpLFxuICAgICAgICBhZ2VudCxcbiAgICAgICAgYWdlbnRJZDogY3VycmVudEFnZW50RnJvbU1lc3NhZ2VzIHx8IGFnZW50Py5pZCxcbiAgICAgICAgcHJvamVjdDogY3R4UHJvamVjdCxcbiAgICAgICAgY2xpZW50OiBjdHhDbGllbnQsXG4gICAgICAgIGF0dGFjaG1lbnRzLFxuICAgICAgfSlcblxuICAgICAgLy8gTm8gYWdyZWdhciBwcm9qZWN0SWQgYWwgbWVuc2FqZSBkZWwgdXN1YXJpbyAtIHNlIGRldGVybWluYXLDoSBkZXNwdcOpc1xuICAgICAgY29tbWl0VG9TZXNzaW9uKHNlc3Npb25JZCwge1xuICAgICAgICBpZDogYHF1ZXN0aW9uLSR7Y3VycmVudE1lc3NhZ2VJZC5jdXJyZW50fWAsXG4gICAgICAgIG1lc3NhZ2U6IGRpc3BsYXlNZXNzYWdlLFxuICAgICAgICBkYXRlOiBuZXcgRGF0ZSgpLFxuICAgICAgICB1c2VyOiBjdXJyZW50VXNlcixcbiAgICAgICAgcm9sZTogQ2hhdEhpc3RvcnlSb2xlLlVTRVIsXG4gICAgICAgIHNvdXJjZXM6IGF0dGFjaG1lbnRzLFxuICAgICAgICAuLi4oY29udGV4dE1lc3NhZ2UgPyB7IGNvbnRleHRNZXNzYWdlIH0gOiB7fSksXG4gICAgICB9KVxuXG4gICAgICBjdXJyZW50TWVzc2FnZUlkLmN1cnJlbnQgPSB1dWlkdjQoKVxuXG4gICAgICBjb25zdCBzdHJlYW1pbmdQbGFjZWhvbGRlcklkID0gc3RyZWFtaW5nUGxhY2Vob2xkZXJNZXNzYWdlSWQoY3VycmVudE1lc3NhZ2VJZC5jdXJyZW50KVxuICAgICAgc3RyZWFtaW5nUGxhY2Vob2xkZXJJZFJlZi5jdXJyZW50ID0gc3RyZWFtaW5nUGxhY2Vob2xkZXJJZFxuICAgICAgYWN0aXZlU3RyZWFtQ2hhdElkUmVmLmN1cnJlbnQgPSBzZXNzaW9uSWRcbiAgICAgIHNlc3Npb25TdHJlYW1pbmdUZXh0LnN0YXJ0KHNlc3Npb25JZCwgc3RyZWFtaW5nUGxhY2Vob2xkZXJJZClcbiAgICAgIGNvbW1pdFRvU2Vzc2lvbihzZXNzaW9uSWQsIHtcbiAgICAgICAgaWQ6IHN0cmVhbWluZ1BsYWNlaG9sZGVySWQsXG4gICAgICAgIG1lc3NhZ2U6ICcnLFxuICAgICAgICBkYXRlOiBuZXcgRGF0ZSgpLFxuICAgICAgICB1c2VyOiB7IGlkOiAnYXNzaXN0YW50JywgbmFtZTogYWdlbnQ/Lm5hbWUgfHwgJ0Fzc2lzdGFudCcgfSxcbiAgICAgICAgcm9sZTogQ2hhdEhpc3RvcnlSb2xlLkFTU0lTVEFOVCxcbiAgICAgIH0pXG5cbiAgICAgIGxldCBmaW5hbE1lc3NhZ2UgPSBtZXNzYWdlXG5cbiAgICAgIGlmIChtZXNzYWdlID09PSB0KCdxYS5pdGVtcy5yZW50YWJpbGlkYWRfcHJveWVjdG8nKSkge1xuICAgICAgICBmaW5hbE1lc3NhZ2UgPSBgRkFROiAke3QoJ3FhLml0ZW1zLnJlbnRhYmlsaWRhZF9wcm95ZWN0bycpfSAtIFRpcG8gZGUgcmVudGFiaWxpZGFkOiAke1xuICAgICAgICAgIG9wdGlvbnMucHJvamVjdENoYW5nZWQ/LmluY29tZVR5cGUgfHwgY29udGV4dFJlZi5jdXJyZW50LnByb2plY3Q/LmluY29tZVR5cGVcbiAgICAgICAgfWBcbiAgICAgIH1cblxuICAgICAgY29uc3QgaGlzdG9yeSA9IG1lc3NhZ2VzUmVmLmN1cnJlbnQubWFwKGhpc3RvcnlNZXNzYWdlID0+ICh7XG4gICAgICAgIGNvbnRlbnQ6IGhpc3RvcnlNZXNzYWdlLm1lc3NhZ2UsXG4gICAgICAgIHJvbGU6IGhpc3RvcnlNZXNzYWdlLnVzZXIuaWQgPT09IGF1dGhVc2VyLmlkLnRvU3RyaW5nKCkgPyBDaGF0SGlzdG9yeVJvbGUuVVNFUiA6IENoYXRIaXN0b3J5Um9sZS5BU1NJU1RBTlQsXG4gICAgICB9KSlcblxuICAgICAgY29uc3QgbGFzdE1lc3NhZ2VQcm9qZWN0SWQgPSBsYXN0TWVzc2FnZVdpdGhQcm9qZWN0Py5wcm9qZWN0SWRcbiAgICAgIGNvbnN0IHByb2plY3RUb1JlcXVlc3QgPSByZXNvbHZlUHJvamVjdFRvUmVxdWVzdChjdHhDaGlwc1Byb2plY3QsIGxhc3RNZXNzYWdlUHJvamVjdElkKVxuXG4gICAgICBjb25zdCBwcm9qZWN0cyA9IGF3YWl0IGZldGNoUHJvamVjdHMoW3Byb2plY3RUb1JlcXVlc3RdKVxuXG4gICAgICBjb25zdCBwYXlsb2FkRmFxSWQgPSBmYXFJZCA/PyBvcHRpb25zLmZhcUlkXG4gICAgICBjb25zdCBwYXlsb2FkQWdlbnRTdWdnZXN0aW9uSWQgPSBhZ2VudFN1Z2dlc3Rpb25JZCA/PyBvcHRpb25zLmFnZW50U3VnZ2VzdGlvbklkXG5cbiAgICAgIGNvbnN0IHBheWxvYWREYXRhID0ge1xuICAgICAgICBtZXNzYWdlOiBmaW5hbE1lc3NhZ2UsXG4gICAgICAgIGhpc3RvcnksXG4gICAgICAgIHByb2plY3RJZDogcHJvamVjdFRvUmVxdWVzdCxcbiAgICAgICAgbGFuZzogYXV0aFVzZXIubGFuZyxcbiAgICAgICAgdXNlcklkOiBhdXRoVXNlci5pZC50b1N0cmluZygpLFxuICAgICAgICBmaXJzdE5hbWU6IGF1dGhVc2VyLmZpcnN0TmFtZSxcbiAgICAgICAgbGFzdE5hbWU6IGF1dGhVc2VyLmxhc3ROYW1lLFxuICAgICAgICBjb21wYW55SWQ6IGF1dGhVc2VyLmNvbXBhbnlfaWQudG9TdHJpbmcoKSxcbiAgICAgICAgY2hhdElkOiBjdXJyZW50Q2hhdElkLmN1cnJlbnQsXG4gICAgICAgIG1lc3NhZ2VJZDogY3VycmVudE1lc3NhZ2VJZC5jdXJyZW50LFxuICAgICAgICBhZ2VudE5hbWU6IGFnZW50Py5uYW1lIHx8ICcnLFxuICAgICAgICBhZ2VudElkOiBjdXJyZW50QWdlbnRGcm9tTWVzc2FnZXMgfHwgYWdlbnQ/LmlkISxcbiAgICAgICAgaXNXZWJTZWFyY2hBY3RpdmU6IGlzV2ViU2VhcmNoQWN0aXZlUmVmLmN1cnJlbnQsXG4gICAgICAgIGlzRGVlcFNlYXJjaEFjdGl2ZTogaXNEZWVwU2VhcmNoQWN0aXZlUmVmLmN1cnJlbnQsXG4gICAgICAgIGlzQXV0b0FwcHJvdmVBY3RpdmU6IGlzQXV0b0FwcHJvdmVBY3RpdmVSZWYuY3VycmVudCxcbiAgICAgICAgLi4uKGN0eFByb2plY3Q/LmZlZUlkICE9IG51bGwgPyB7IGZlZUlkOiBOdW1iZXIoY3R4UHJvamVjdC5mZWVJZCkgfSA6IHt9KSxcbiAgICAgICAgLi4ucmVzb2x2ZUNsaWVudFBheWxvYWQoY3R4Q2xpZW50LCBjdHhQcm9qZWN0KSxcbiAgICAgICAgLi4uKHByb2plY3RzPy5sZW5ndGggPyB7IHByb2plY3ROYW1lOiBwcm9qZWN0c1swXS5uYW1lIH0gOiB7fSksXG4gICAgICAgIC4uLihjdHhUYXNrPy5pZCAhPSBudWxsXG4gICAgICAgICAgPyB7IHRhc2tJZDogTnVtYmVyKGN0eFRhc2suaWQpLCAuLi4oY3R4VGFzay5uYW1lID8geyB0YXNrTmFtZTogY3R4VGFzay5uYW1lIH0gOiB7fSkgfVxuICAgICAgICAgIDoge30pLFxuICAgICAgICAuLi4oYXR0YWNobWVudHMubGVuZ3RoID4gMCA/IHsgYXR0YWNobWVudHMgfSA6IHt9KSxcbiAgICAgICAgLi4uKHBheWxvYWRGYXFJZCA/IHsgZmFxSWQ6IHBheWxvYWRGYXFJZCB9IDoge30pLFxuICAgICAgICAuLi4ocGF5bG9hZEFnZW50U3VnZ2VzdGlvbklkID8geyBhZ2VudFN1Z2dlc3Rpb25JZDogcGF5bG9hZEFnZW50U3VnZ2VzdGlvbklkIH0gOiB7fSksXG4gICAgICAgIC4uLihwYXlsb2FkRnVhSWQgPyB7IGZ1YUlkOiBwYXlsb2FkRnVhSWQgfSA6IHt9KSxcbiAgICAgICAgLi4uKHBheWxvYWRTY0lkID8geyBzY0lkOiBwYXlsb2FkU2NJZCB9IDoge30pLFxuICAgICAgICAuLi4oYWdlbnQ/LmVudGl0eSAhPSBudWxsID8geyBhZ2VudEVudGl0eTogYWdlbnQuZW50aXR5IH0gOiB7fSksXG4gICAgICAgIC4uLihhZ2VudD8udHlwZSAhPSBudWxsID8geyBhZ2VudFR5cGU6IGFnZW50LnR5cGUgfSA6IHt9KSxcbiAgICAgICAgLi4uKGFnZW50Py5lbW9qaSAhPSBudWxsID8geyBhZ2VudEVtb2ppOiBhZ2VudC5lbW9qaSB9IDoge30pLFxuICAgICAgICAuLi4oY29udGV4dE1lc3NhZ2UgPyB7IGNvbnRleHRNZXNzYWdlIH0gOiB7fSksXG4gICAgICAgIC4uLihwYXlsb2FkQ29udGV4dERhdGEgPyB7IGNvbnRleHREYXRhOiBwYXlsb2FkQ29udGV4dERhdGEgfSA6IHt9KSxcbiAgICAgIH1cblxuICAgICAgYXNrTWFpYShwYXlsb2FkRGF0YSlcbiAgICB9LFxuICAgIFtcbiAgICAgIGFkZE1lc3NhZ2UsXG4gICAgICBjb21taXRUb1Nlc3Npb24sXG4gICAgICBldmVudCxcbiAgICAgIGFza01haWEsXG4gICAgICBwcm9qZWN0LFxuICAgICAgY2xpZW50LFxuICAgICAgdGFzayxcbiAgICAgIGNoaXBzUHJvamVjdCxcbiAgICAgIGF1dGhVc2VyLFxuICAgICAgYWdlbnQsXG4gICAgICB0LFxuICAgICAgd2FpdGluZ1Jlc3BvbnNlLFxuICAgICAgbG9hZGluZ01lc3NhZ2VzLFxuICAgICAgaXNXZWJTZWFyY2hBY3RpdmUsXG4gICAgICBpc0RlZXBTZWFyY2hBY3RpdmUsXG4gICAgXVxuICApXG5cbiAgY29uc3QgY2hhbmdlUHJvamVjdCA9IHVzZUNhbGxiYWNrKFxuICAgIChvcHRpb246IFByb2plY3QpID0+IHtcbiAgICAgIGlmICghY3VycmVudFVzZXJRdWVzdGlvbi5jdXJyZW50KSByZXR1cm5cblxuICAgICAgaWYgKG9wdGlvbi5pZCAhPT0gcHJvamVjdD8uaWQpIHtcbiAgICAgICAgc2V0UHJvamVjdChvcHRpb24pXG4gICAgICB9XG5cbiAgICAgIGlmIChwcm9qZWN0ICYmIGN1cnJlbnRVc2VyUXVlc3Rpb24uY3VycmVudCkge1xuICAgICAgICBjb25zdCBoaXN0b3J5ID0gbWVzc2FnZXNSZWYuY3VycmVudC5tYXAoaGlzdG9yeU1lc3NhZ2UgPT4gKHtcbiAgICAgICAgICBjb250ZW50OiBoaXN0b3J5TWVzc2FnZS5tZXNzYWdlLFxuICAgICAgICAgIHJvbGU6IGhpc3RvcnlNZXNzYWdlLnVzZXIuaWQgPT09IGF1dGhVc2VyLmlkLnRvU3RyaW5nKCkgPyBDaGF0SGlzdG9yeVJvbGUuVVNFUiA6IENoYXRIaXN0b3J5Um9sZS5BU1NJU1RBTlQsXG4gICAgICAgIH0pKVxuXG4gICAgICAgIGFza01haWEoe1xuICAgICAgICAgIG1lc3NhZ2U6IGN1cnJlbnRVc2VyUXVlc3Rpb24uY3VycmVudCxcbiAgICAgICAgICBoaXN0b3J5LFxuICAgICAgICAgIHByb2plY3RJZDogb3B0aW9uLmlkLFxuICAgICAgICAgIGxhbmc6IGF1dGhVc2VyLmxhbmcsXG4gICAgICAgICAgdXNlcklkOiBhdXRoVXNlci5pZC50b1N0cmluZygpLFxuICAgICAgICAgIGZpcnN0TmFtZTogYXV0aFVzZXIuZmlyc3ROYW1lLFxuICAgICAgICAgIGxhc3ROYW1lOiBhdXRoVXNlci5sYXN0TmFtZSxcbiAgICAgICAgICBjb21wYW55SWQ6IGF1dGhVc2VyLmNvbXBhbnlfaWQudG9TdHJpbmcoKSxcbiAgICAgICAgICBjaGF0SWQ6IGN1cnJlbnRDaGF0SWQuY3VycmVudCxcbiAgICAgICAgICBtZXNzYWdlSWQ6IGN1cnJlbnRNZXNzYWdlSWQuY3VycmVudCxcbiAgICAgICAgICBhZ2VudE5hbWU6IGFnZW50Py5uYW1lIHx8ICcnLFxuICAgICAgICAgIGFnZW50SWQ6IGFnZW50Py5pZCB8fCAnJyxcbiAgICAgICAgICBpc1dlYlNlYXJjaEFjdGl2ZTogaXNXZWJTZWFyY2hBY3RpdmVSZWYuY3VycmVudCxcbiAgICAgICAgICBpc0RlZXBTZWFyY2hBY3RpdmU6IGlzRGVlcFNlYXJjaEFjdGl2ZVJlZi5jdXJyZW50LFxuICAgICAgICAgIGlzQXV0b0FwcHJvdmVBY3RpdmU6IGlzQXV0b0FwcHJvdmVBY3RpdmVSZWYuY3VycmVudCxcbiAgICAgICAgICAuLi4ob3B0aW9uPy5mZWVJZCAhPSBudWxsID8geyBmZWVJZDogTnVtYmVyKG9wdGlvbi5mZWVJZCkgfSA6IHt9KSxcbiAgICAgICAgICAuLi4ob3B0aW9uPy5jbGllbnRJZCAhPSBudWxsID8geyBjbGllbnRJZDogTnVtYmVyKG9wdGlvbi5jbGllbnRJZCkgfSA6IHt9KSxcbiAgICAgICAgICAuLi4oYWdlbnQ/LmVudGl0eSAhPSBudWxsID8geyBhZ2VudEVudGl0eTogYWdlbnQuZW50aXR5IH0gOiB7fSksXG4gICAgICAgICAgLi4uKGFnZW50Py50eXBlICE9IG51bGwgPyB7IGFnZW50VHlwZTogYWdlbnQudHlwZSB9IDoge30pLFxuICAgICAgICB9KVxuICAgICAgfVxuICAgIH0sXG4gICAgW3Byb2plY3QsIHNldFByb2plY3QsIGFza01haWEsIGF1dGhVc2VyLCBpc1dlYlNlYXJjaEFjdGl2ZSwgYWdlbnRdXG4gIClcblxuICBjb25zdCByZXRyeU1lc3NhZ2UgPSB1c2VDYWxsYmFjayhcbiAgICBhc3luYyAobWVzc2FnZTogQ2hhdE1lc3NhZ2UpID0+IHtcbiAgICAgIGlmIChpc1Byb2Nlc3NpbmdSZWYuY3VycmVudCB8fCB3YWl0aW5nUmVzcG9uc2UgfHwgbG9hZGluZ01lc3NhZ2VzKSByZXR1cm5cblxuICAgICAgY29uc3Qgc2Vzc2lvbklkID0gY3VycmVudENoYXRJZC5jdXJyZW50XG4gICAgICBpZiAoc2Vzc2lvblN0cmVhbU1hbmFnZXIuaXNBY3RpdmUoc2Vzc2lvbklkKSkgcmV0dXJuXG4gICAgICBpZiAoc2Vzc2lvblN0cmVhbU1hbmFnZXIuZ2V0QWN0aXZlQ291bnQoKSA+PSBNQVhfQ09OQ1VSUkVOVF9TVFJFQU1TKSB7XG4gICAgICAgIGRvY3VtZW50LmRpc3BhdGNoRXZlbnQoXG4gICAgICAgICAgbmV3IEN1c3RvbUV2ZW50KCdzbmFja2Jhci1ldmVudCcsIHtcbiAgICAgICAgICAgIGRldGFpbDogeyBzaG93OiB0cnVlLCBzZXZlcml0eTogJ2luZm8nLCBtZXNzYWdlOiB0KCdjaGF0LnRvb01hbnlBY3RpdmVTZXNzaW9ucycpIH0sXG4gICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgY29uc3QgcHJldmlvdXNNZXNzYWdlcyA9IG1lc3NhZ2VzUmVmLmN1cnJlbnRcbiAgICAgIGlmICghcHJldmlvdXNNZXNzYWdlcy5zb21lKGl0ZW0gPT4gaXRlbS5pZCA9PT0gbWVzc2FnZS5pZCkpIHJldHVyblxuXG4gICAgICBjb25zdCB1c2VyTWVzc2FnZSA9IGZpbmRVc2VyTWVzc2FnZUZvclJldHJ5KHByZXZpb3VzTWVzc2FnZXMsIG1lc3NhZ2UpXG4gICAgICBpZiAoIXVzZXJNZXNzYWdlPy5tZXNzYWdlPy50cmltKCkgJiYgIXVzZXJNZXNzYWdlPy5hdHRhY2htZW50cz8ubGVuZ3RoICYmICF1c2VyTWVzc2FnZT8uc291cmNlcz8ubGVuZ3RoKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBjb25zdCB0dXJuSWQgPSByZXNvbHZlUmV0cnlUdXJuSWQobWVzc2FnZSlcbiAgICAgIGNvbnN0IHVzZU9yY2hlc3RyYXRvckZhbGxiYWNrID0gbWVzc2FnZS5pc0Zyb250ZW5kQ2FuY2VsbGVkICYmICFtZXNzYWdlLm1lbW9yeVNlc3Npb25JZD8udHJpbSgpXG4gICAgICBpZiAoIXR1cm5JZCAmJiAhdXNlT3JjaGVzdHJhdG9yRmFsbGJhY2spIHJldHVyblxuXG4gICAgICBjb25zdCB0cnVuY2F0ZWQgPSBtZXNzYWdlc1dpdGhvdXRSZXRyaWVkVHVybihwcmV2aW91c01lc3NhZ2VzLCBtZXNzYWdlKVxuXG4gICAgICBpc1Byb2Nlc3NpbmdSZWYuY3VycmVudCA9IHRydWVcbiAgICAgIHJldHJ5U25hcHNob3RSZWYuY3VycmVudCA9IHByZXZpb3VzTWVzc2FnZXNcbiAgICAgIHNldEFjdGl2ZUNoYXRJZChzZXNzaW9uSWQpXG5cbiAgICAgIGNvbnN0IG5ld01lc3NhZ2VJZCA9IHV1aWR2NCgpXG4gICAgICBjdXJyZW50TWVzc2FnZUlkLmN1cnJlbnQgPSBuZXdNZXNzYWdlSWRcbiAgICAgIGN1cnJlbnRVc2VyUXVlc3Rpb24uY3VycmVudCA9IHVzZXJNZXNzYWdlLm1lc3NhZ2VcbiAgICAgIGNvbnN0IHN0cmVhbWluZ1BsYWNlaG9sZGVySWQgPSBgYW5zd2VyLSR7bmV3TWVzc2FnZUlkfS1zdHJlYW1pbmdgXG4gICAgICBzdHJlYW1pbmdQbGFjZWhvbGRlcklkUmVmLmN1cnJlbnQgPSBzdHJlYW1pbmdQbGFjZWhvbGRlcklkXG4gICAgICBhY3RpdmVTdHJlYW1DaGF0SWRSZWYuY3VycmVudCA9IHNlc3Npb25JZFxuXG4gICAgICBjb25zdCBwbGFjZWhvbGRlcjogQ2hhdE1lc3NhZ2UgPSB7XG4gICAgICAgIGlkOiBzdHJlYW1pbmdQbGFjZWhvbGRlcklkLFxuICAgICAgICBtZXNzYWdlOiAnJyxcbiAgICAgICAgZGF0ZTogbmV3IERhdGUoKSxcbiAgICAgICAgdXNlcjogeyBpZDogJ2Fzc2lzdGFudCcsIG5hbWU6IGFnZW50Py5uYW1lIHx8ICdBc3Npc3RhbnQnIH0sXG4gICAgICAgIHJvbGU6IENoYXRIaXN0b3J5Um9sZS5BU1NJU1RBTlQsXG4gICAgICB9XG4gICAgICBjb25zdCBuZXh0TWVzc2FnZXMgPSBbLi4udHJ1bmNhdGVkLCBwbGFjZWhvbGRlcl1cbiAgICAgIG1lc3NhZ2VzUmVmLmN1cnJlbnQgPSBuZXh0TWVzc2FnZXNcbiAgICAgIHJlcGxhY2VNZXNzYWdlcyhuZXh0TWVzc2FnZXMpXG4gICAgICBzZXNzaW9uU3RyZWFtaW5nVGV4dC5zdGFydChzZXNzaW9uSWQsIHN0cmVhbWluZ1BsYWNlaG9sZGVySWQpXG5cbiAgICAgIGNvbnN0IHtcbiAgICAgICAgY2hpcHNQcm9qZWN0OiBjdHhDaGlwc1Byb2plY3QsXG4gICAgICAgIHByb2plY3Q6IGN0eFByb2plY3QsXG4gICAgICAgIGNsaWVudDogY3R4Q2xpZW50LFxuICAgICAgICB0YXNrOiBjdHhUYXNrLFxuICAgICAgfSA9IGNvbnRleHRSZWYuY3VycmVudFxuICAgICAgY29uc3QgbGFzdE1lc3NhZ2VXaXRoUHJvamVjdCA9IHRydW5jYXRlZC5maWx0ZXIobXNnID0+IG1zZy5wcm9qZWN0SWQpLmF0KC0xKVxuICAgICAgY29uc3QgcHJvamVjdFRvUmVxdWVzdCA9IHJlc29sdmVQcm9qZWN0VG9SZXF1ZXN0KGN0eENoaXBzUHJvamVjdCwgbGFzdE1lc3NhZ2VXaXRoUHJvamVjdD8ucHJvamVjdElkKVxuICAgICAgY29uc3QgY3VycmVudEFnZW50RnJvbU1lc3NhZ2VzID0gdHJ1bmNhdGVkLmF0KC0xKT8uYWdlbnRJZCB8fCBtZXNzYWdlLmFnZW50SWRcbiAgICAgIGNvbnN0IGF0dGFjaG1lbnRzID0gQXJyYXkuaXNBcnJheSh1c2VyTWVzc2FnZS5hdHRhY2htZW50cylcbiAgICAgICAgPyB1c2VyTWVzc2FnZS5hdHRhY2htZW50c1xuICAgICAgICA6IEFycmF5LmlzQXJyYXkodXNlck1lc3NhZ2Uuc291cmNlcylcbiAgICAgICAgICA/IHVzZXJNZXNzYWdlLnNvdXJjZXNcbiAgICAgICAgICA6IFtdXG5cbiAgICAgIGNvbnN0IHJlcGxheVZpYU9yY2hlc3RyYXRvciA9IGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3QgaGlzdG9yeSA9IHRydW5jYXRlZC5tYXAoaGlzdG9yeU1lc3NhZ2UgPT4gKHtcbiAgICAgICAgICBjb250ZW50OiBoaXN0b3J5TWVzc2FnZS5tZXNzYWdlLFxuICAgICAgICAgIHJvbGU6IGhpc3RvcnlNZXNzYWdlLnVzZXIuaWQgPT09IGF1dGhVc2VyLmlkLnRvU3RyaW5nKCkgPyBDaGF0SGlzdG9yeVJvbGUuVVNFUiA6IENoYXRIaXN0b3J5Um9sZS5BU1NJU1RBTlQsXG4gICAgICAgIH0pKVxuICAgICAgICBjb25zdCBwcm9qZWN0cyA9IHByb2plY3RUb1JlcXVlc3QgPyBhd2FpdCBmZXRjaFByb2plY3RzKFtwcm9qZWN0VG9SZXF1ZXN0XSkgOiBudWxsXG5cbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgYXNrTWFpYSh7XG4gICAgICAgICAgbWVzc2FnZTogdXNlck1lc3NhZ2UubWVzc2FnZSxcbiAgICAgICAgICBoaXN0b3J5LFxuICAgICAgICAgIHByb2plY3RJZDogcHJvamVjdFRvUmVxdWVzdCxcbiAgICAgICAgICBsYW5nOiBhdXRoVXNlci5sYW5nLFxuICAgICAgICAgIHVzZXJJZDogYXV0aFVzZXIuaWQudG9TdHJpbmcoKSxcbiAgICAgICAgICBmaXJzdE5hbWU6IGF1dGhVc2VyLmZpcnN0TmFtZSxcbiAgICAgICAgICBsYXN0TmFtZTogYXV0aFVzZXIubGFzdE5hbWUsXG4gICAgICAgICAgY29tcGFueUlkOiBhdXRoVXNlci5jb21wYW55X2lkLnRvU3RyaW5nKCksXG4gICAgICAgICAgY2hhdElkOiBzZXNzaW9uSWQsXG4gICAgICAgICAgbWVzc2FnZUlkOiBuZXdNZXNzYWdlSWQsXG4gICAgICAgICAgYWdlbnROYW1lOiBhZ2VudD8ubmFtZSB8fCAnJyxcbiAgICAgICAgICBhZ2VudElkOiBTdHJpbmcoY3VycmVudEFnZW50RnJvbU1lc3NhZ2VzIHx8IGFnZW50Py5pZCB8fCAnJyksXG4gICAgICAgICAgaXNXZWJTZWFyY2hBY3RpdmU6IGlzV2ViU2VhcmNoQWN0aXZlUmVmLmN1cnJlbnQsXG4gICAgICAgICAgaXNEZWVwU2VhcmNoQWN0aXZlOiBpc0RlZXBTZWFyY2hBY3RpdmVSZWYuY3VycmVudCxcbiAgICAgICAgICAuLi4oY3R4UHJvamVjdD8uZmVlSWQgIT0gbnVsbCA/IHsgZmVlSWQ6IE51bWJlcihjdHhQcm9qZWN0LmZlZUlkKSB9IDoge30pLFxuICAgICAgICAgIC4uLnJlc29sdmVDbGllbnRQYXlsb2FkKGN0eENsaWVudCwgY3R4UHJvamVjdCksXG4gICAgICAgICAgLi4uKHByb2plY3RzPy5sZW5ndGggPyB7IHByb2plY3ROYW1lOiBwcm9qZWN0c1swXS5uYW1lIH0gOiB7fSksXG4gICAgICAgICAgLi4uKGN0eFRhc2s/LmlkICE9IG51bGxcbiAgICAgICAgICAgID8geyB0YXNrSWQ6IE51bWJlcihjdHhUYXNrLmlkKSwgLi4uKGN0eFRhc2submFtZSA/IHsgdGFza05hbWU6IGN0eFRhc2submFtZSB9IDoge30pIH1cbiAgICAgICAgICAgIDoge30pLFxuICAgICAgICAgIC4uLihhdHRhY2htZW50cy5sZW5ndGggPiAwID8geyBhdHRhY2htZW50cyB9IDoge30pLFxuICAgICAgICAgIC4uLihhZ2VudD8uZW50aXR5ICE9IG51bGwgPyB7IGFnZW50RW50aXR5OiBhZ2VudC5lbnRpdHkgfSA6IHt9KSxcbiAgICAgICAgICAuLi4oYWdlbnQ/LnR5cGUgIT0gbnVsbCA/IHsgYWdlbnRUeXBlOiBhZ2VudC50eXBlIH0gOiB7fSksXG4gICAgICAgICAgLi4uKGFnZW50Py5lbW9qaSAhPSBudWxsID8geyBhZ2VudEVtb2ppOiBhZ2VudC5lbW9qaSB9IDoge30pLFxuICAgICAgICAgIC4uLih1c2VyTWVzc2FnZS5jb250ZXh0TWVzc2FnZSA/IHsgY29udGV4dE1lc3NhZ2U6IHVzZXJNZXNzYWdlLmNvbnRleHRNZXNzYWdlIH0gOiB7fSksXG4gICAgICAgIH0pXG5cbiAgICAgICAgaWYgKCFyZXN1bHQuc3RhcnRlZCkge1xuICAgICAgICAgIHJldHJ5U25hcHNob3RSZWYuY3VycmVudCA9IG51bGxcbiAgICAgICAgICBtZXNzYWdlc1JlZi5jdXJyZW50ID0gcHJldmlvdXNNZXNzYWdlc1xuICAgICAgICAgIHJlcGxhY2VNZXNzYWdlcyhwcmV2aW91c01lc3NhZ2VzKVxuICAgICAgICAgIHNlc3Npb25TdHJlYW1pbmdUZXh0LmNsZWFyKHNlc3Npb25JZClcbiAgICAgICAgICBzdHJlYW1pbmdQbGFjZWhvbGRlcklkUmVmLmN1cnJlbnQgPSBudWxsXG4gICAgICAgICAgYWN0aXZlU3RyZWFtQ2hhdElkUmVmLmN1cnJlbnQgPSBudWxsXG4gICAgICAgICAgaXNQcm9jZXNzaW5nUmVmLmN1cnJlbnQgPSBmYWxzZVxuICAgICAgICAgIGlmIChyZXN1bHQucmVhc29uID09PSAnbGltaXQnKSB7XG4gICAgICAgICAgICBkb2N1bWVudC5kaXNwYXRjaEV2ZW50KFxuICAgICAgICAgICAgICBuZXcgQ3VzdG9tRXZlbnQoJ3NuYWNrYmFyLWV2ZW50Jywge1xuICAgICAgICAgICAgICAgIGRldGFpbDogeyBzaG93OiB0cnVlLCBzZXZlcml0eTogJ2luZm8nLCBtZXNzYWdlOiB0KCdjaGF0LnRvb01hbnlBY3RpdmVTZXNzaW9ucycpIH0sXG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICh1c2VPcmNoZXN0cmF0b3JGYWxsYmFjayB8fCAhdHVybklkKSB7XG4gICAgICAgIGF3YWl0IHJlcGxheVZpYU9yY2hlc3RyYXRvcigpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCByZXRyeUNvbXBsZXRpb24oe1xuICAgICAgICBjaGF0SWQ6IHNlc3Npb25JZCxcbiAgICAgICAgbWVzc2FnZUlkOiBuZXdNZXNzYWdlSWQsXG4gICAgICAgIG1lbW9yeVNlc3Npb25JZDogdHVybklkLFxuICAgICAgICBsYW5nOiBhdXRoVXNlci5sYW5nLFxuICAgICAgICBhZ2VudElkOiBTdHJpbmcoY3VycmVudEFnZW50RnJvbU1lc3NhZ2VzIHx8IGFnZW50Py5pZCB8fCAnJyksXG4gICAgICAgIGFnZW50TmFtZTogYWdlbnQ/Lm5hbWUgfHwgJycsXG4gICAgICAgIC4uLihhZ2VudD8udHlwZSAhPSBudWxsID8geyBhZ2VudFR5cGU6IGFnZW50LnR5cGUgfSA6IHt9KSxcbiAgICAgICAgaXNXZWJTZWFyY2hBY3RpdmU6IGlzV2ViU2VhcmNoQWN0aXZlUmVmLmN1cnJlbnQsXG4gICAgICAgIGlzRGVlcFNlYXJjaEFjdGl2ZTogaXNEZWVwU2VhcmNoQWN0aXZlUmVmLmN1cnJlbnQsXG4gICAgICAgIC4uLihwcm9qZWN0VG9SZXF1ZXN0ID8geyBwcm9qZWN0SWQ6IHByb2plY3RUb1JlcXVlc3QgfSA6IHt9KSxcbiAgICAgICAgLi4ucmVzb2x2ZUNsaWVudFBheWxvYWQoY3R4Q2xpZW50LCBjdHhQcm9qZWN0KSxcbiAgICAgICAgLi4uKGN0eFRhc2s/LmlkICE9IG51bGwgPyB7IHRhc2tJZDogTnVtYmVyKGN0eFRhc2suaWQpIH0gOiB7fSksXG4gICAgICB9KVxuXG4gICAgICBpZiAocmVzdWx0LnN0YXJ0ZWQpIHJldHVyblxuXG4gICAgICBpZiAocmVzdWx0LnJlYXNvbiA9PT0gJ3R1cm5fbm90X2ZvdW5kJykge1xuICAgICAgICBhd2FpdCByZXBsYXlWaWFPcmNoZXN0cmF0b3IoKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgcmV0cnlTbmFwc2hvdFJlZi5jdXJyZW50ID0gbnVsbFxuICAgICAgbWVzc2FnZXNSZWYuY3VycmVudCA9IHByZXZpb3VzTWVzc2FnZXNcbiAgICAgIHJlcGxhY2VNZXNzYWdlcyhwcmV2aW91c01lc3NhZ2VzKVxuICAgICAgc2Vzc2lvblN0cmVhbWluZ1RleHQuY2xlYXIoc2Vzc2lvbklkKVxuICAgICAgc3RyZWFtaW5nUGxhY2Vob2xkZXJJZFJlZi5jdXJyZW50ID0gbnVsbFxuICAgICAgYWN0aXZlU3RyZWFtQ2hhdElkUmVmLmN1cnJlbnQgPSBudWxsXG4gICAgICBpc1Byb2Nlc3NpbmdSZWYuY3VycmVudCA9IGZhbHNlXG4gICAgICBpZiAocmVzdWx0LnJlYXNvbiA9PT0gJ2xpbWl0Jykge1xuICAgICAgICBkb2N1bWVudC5kaXNwYXRjaEV2ZW50KFxuICAgICAgICAgIG5ldyBDdXN0b21FdmVudCgnc25hY2tiYXItZXZlbnQnLCB7XG4gICAgICAgICAgICBkZXRhaWw6IHsgc2hvdzogdHJ1ZSwgc2V2ZXJpdHk6ICdpbmZvJywgbWVzc2FnZTogdCgnY2hhdC50b29NYW55QWN0aXZlU2Vzc2lvbnMnKSB9LFxuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgIH1cbiAgICB9LFxuICAgIFtcbiAgICAgIHdhaXRpbmdSZXNwb25zZSxcbiAgICAgIGxvYWRpbmdNZXNzYWdlcyxcbiAgICAgIHJlcGxhY2VNZXNzYWdlcyxcbiAgICAgIHJldHJ5Q29tcGxldGlvbixcbiAgICAgIGFza01haWEsXG4gICAgICBmZXRjaFByb2plY3RzLFxuICAgICAgYXV0aFVzZXIsXG4gICAgICBhZ2VudCxcbiAgICAgIHQsXG4gICAgICBzZXRBY3RpdmVDaGF0SWQsXG4gICAgXVxuICApXG5cbiAgY29uc3QgaGFuZGxlRmVlZGJhY2sgPSB1c2VDYWxsYmFjayhhc3luYyAoZmVlZGJhY2tQcm9wOiBGZWVkYmFjaywgY2hhdE1lc3NhZ2VJZDogc3RyaW5nKSA9PiB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBtYWlhLkNoYXRzLndhc0hlbHBmdWxDaGF0KGNoYXRNZXNzYWdlSWQsIGZlZWRiYWNrUHJvcCA9PT0gRmVlZGJhY2suVEhVTUJTX1VQKVxuICAgIGlmIChyZXNwb25zZSkge1xuICAgICAgbWVzc2FnZXNSZWYuY3VycmVudCA9IG1lc3NhZ2VzUmVmLmN1cnJlbnQubWFwKG1lc3NhZ2UgPT4ge1xuICAgICAgICBpZiAobWVzc2FnZS5pZCA9PT0gY2hhdE1lc3NhZ2VJZCAmJiBtZXNzYWdlLnJvbGUgPT09ICdhc3Npc3RhbnQnKSB7XG4gICAgICAgICAgcmV0dXJuIHsgLi4ubWVzc2FnZSwgd2FzSGVscGZ1bDogZmVlZGJhY2tQcm9wID09PSBGZWVkYmFjay5USFVNQlNfVVAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtZXNzYWdlXG4gICAgICB9KVxuICAgIH1cbiAgfSwgW10pXG5cbiAgY29uc3QgaGFuZGxlQXBwcm92YWxEZWNpc2lvbiA9IHVzZUNhbGxiYWNrKFxuICAgIGFzeW5jIChcbiAgICAgIHRocmVhZElkczogc3RyaW5nW10sXG4gICAgICBkZWNpc2lvbjogJ2FwcHJvdmUnIHwgJ3JlamVjdCcsXG4gICAgICBlZGl0ZWRBY3Rpb25zPzogQXJyYXk8eyB0b29sX25hbWU6IHN0cmluZzsgYXJnczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfT4sXG4gICAgICBtZXRhZGF0YT86IHsgdG9vbF9ncm91cF9zbHVnczogc3RyaW5nW10gfVxuICAgICkgPT4ge1xuICAgICAgaWYgKCF0aHJlYWRJZHM/Lmxlbmd0aCkge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdObyB0aHJlYWRfaWRzIHByb3ZpZGVkIGZvciBhcHByb3ZhbCBkZWNpc2lvbicpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBjb25zdCBmb3VuZCA9IGZpbmRNZXNzYWdlV2l0aEFwcHJvdmFsQnlUaHJlYWRJZHMoXG4gICAgICAgIHRocmVhZElkcyxcbiAgICAgICAgbWVzc2FnZXNSZWYuY3VycmVudCxcbiAgICAgICAgdXNlU2Vzc2lvbnNTdG9yZS5nZXRTdGF0ZSgpLm1lc3NhZ2VzLFxuICAgICAgICBhY3RpdmVWaWV3LmdldCgpXG4gICAgICApXG4gICAgICBpZiAoIWZvdW5kPy5tZXNzYWdlLmFwcHJvdmFsKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ05vIHNlIGVuY29udHLDsyBtZW5zYWplIGNvbiBhcHByb3ZhbCBwYXJhIHRocmVhZF9pZHM6JywgdGhyZWFkSWRzKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgY29uc3QgeyBtZXNzYWdlOiBtZXNzYWdlV2l0aEFwcHJvdmFsLCBzZXNzaW9uSWQ6IGZvdW5kU2Vzc2lvbklkIH0gPSBmb3VuZFxuICAgICAgY29uc3QgeyBhcHByb3ZhbCB9ID0gbWVzc2FnZVdpdGhBcHByb3ZhbFxuICAgICAgaWYgKCFhcHByb3ZhbCkge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgY29uc3Qgc2Vzc2lvbklkID0gYXBwcm92YWwuc2Vzc2lvbl9pZCB8fCBmb3VuZFNlc3Npb25JZFxuICAgICAgaWYgKCFzZXNzaW9uSWQpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignTm8gc2Vzc2lvbl9pZCBkaXNwb25pYmxlIHBhcmEgYXBwcm92YWw6JywgdGhyZWFkSWRzKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgaWYgKHNlc3Npb25TdHJlYW1NYW5hZ2VyLmlzQWN0aXZlKHNlc3Npb25JZCkpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGlmIChzZXNzaW9uU3RyZWFtTWFuYWdlci5nZXRBY3RpdmVDb3VudCgpID49IE1BWF9DT05DVVJSRU5UX1NUUkVBTVMpIHtcbiAgICAgICAgZG9jdW1lbnQuZGlzcGF0Y2hFdmVudChcbiAgICAgICAgICBuZXcgQ3VzdG9tRXZlbnQoJ3NuYWNrYmFyLWV2ZW50Jywge1xuICAgICAgICAgICAgZGV0YWlsOiB7IHNob3c6IHRydWUsIHNldmVyaXR5OiAnaW5mbycsIG1lc3NhZ2U6IHQoJ2NoYXQudG9vTWFueUFjdGl2ZVNlc3Npb25zJykgfSxcbiAgICAgICAgICB9KVxuICAgICAgICApXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBjb25zdCBtZXNzYWdlSWQgPSBtZXNzYWdlV2l0aEFwcHJvdmFsLmlkXG4gICAgICBjb25zdCBuZXdTdGF0dXMgPSByZXNvbHZlQXBwcm92YWxEZWNpc2lvblN0YXR1cyhkZWNpc2lvbilcbiAgICAgIGNvbnN0IGhpdGxDb250ZXh0OiBIaXRsRXhlY3V0aW9uQ29udGV4dCA9IHtcbiAgICAgICAgbWVzc2FnZUlkLFxuICAgICAgICBtZXNzYWdlVGV4dDogbWVzc2FnZVdpdGhBcHByb3ZhbC5tZXNzYWdlLFxuICAgICAgICBhcHByb3ZhbCxcbiAgICAgICAgcGVuZGluZ0FjdGlvbnM6IGFwcHJvdmFsLnBlbmRpbmdfYWN0aW9ucyxcbiAgICAgICAgdGhyZWFkSWRzLFxuICAgICAgfVxuXG4gICAgICBjb25zdCBpc0FjdGl2ZVNlc3Npb24gPSBhY3RpdmVWaWV3LmlzKHNlc3Npb25JZClcbiAgICAgIGlmIChpc0FjdGl2ZVNlc3Npb24pIHtcbiAgICAgICAgaGl0bEV4ZWN1dGlvbkNvbnRleHRSZWYuY3VycmVudCA9IGhpdGxDb250ZXh0XG4gICAgICAgIGlzUHJvY2Vzc2luZ1JlZi5jdXJyZW50ID0gdHJ1ZVxuICAgICAgfVxuXG4gICAgICBjb21taXRUb1Nlc3Npb24oc2Vzc2lvbklkLCB7IC4uLm1lc3NhZ2VXaXRoQXBwcm92YWwsIGFwcHJvdmFsU3RhdHVzOiBuZXdTdGF0dXMgfSlcblxuICAgICAgY29uc3Qgc3RyZWFtTWVzc2FnZUlkID0gdXVpZHY0KClcbiAgICAgIGlmIChpc0FjdGl2ZVNlc3Npb24pIHtcbiAgICAgICAgY3VycmVudE1lc3NhZ2VJZC5jdXJyZW50ID0gc3RyZWFtTWVzc2FnZUlkXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGhpdGxDdHg6IFN0cmVhbUNvbnRleHQgPSB7XG4gICAgICAgIHNlc3Npb25JZCxcbiAgICAgICAgbWVzc2FnZUlkOiBzdHJlYW1NZXNzYWdlSWQsXG4gICAgICAgIHBsYWNlaG9sZGVySWQ6IHN0cmVhbWluZ1BsYWNlaG9sZGVyTWVzc2FnZUlkKHN0cmVhbU1lc3NhZ2VJZCksXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHJlbGVhc2VBY3RpdmVQcm9jZXNzaW5nID0gKCkgPT4ge1xuICAgICAgICBpZiAoIWlzQWN0aXZlU2Vzc2lvbikgcmV0dXJuXG4gICAgICAgIGlzUHJvY2Vzc2luZ1JlZi5jdXJyZW50ID0gZmFsc2VcbiAgICAgICAgaGl0bEV4ZWN1dGlvbkNvbnRleHRSZWYuY3VycmVudCA9IG51bGxcbiAgICAgIH1cblxuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgc2Vzc2lvblN0cmVhbU1hbmFnZXIuc3RhcnRDb250aW51ZVN0cmVhbSh7XG4gICAgICAgIHNlc3Npb25JZCxcbiAgICAgICAgcGxhY2Vob2xkZXJJZDogaGl0bEN0eC5wbGFjZWhvbGRlcklkLFxuICAgICAgICBjb250aW51ZVJlcXVlc3Q6IHtcbiAgICAgICAgICB0aHJlYWRJZHMsXG4gICAgICAgICAgc2Vzc2lvbklkOiBhcHByb3ZhbC5zZXNzaW9uX2lkLFxuICAgICAgICAgIGRlY2lzaW9uOiByZXNvbHZlQ29udGludWVTdHJlYW1EZWNpc2lvbihkZWNpc2lvbiwgZWRpdGVkQWN0aW9ucyksXG4gICAgICAgICAgZWRpdGVkQWN0aW9ucyxcbiAgICAgICAgICBhZ2VudElkOiBhZ2VudD8uaWQgfHwgJycsXG4gICAgICAgICAgbGFuZzogYXV0aFVzZXIubGFuZyxcbiAgICAgICAgICBpc0F1dG9BcHByb3ZlQWN0aXZlOiBpc0F1dG9BcHByb3ZlQWN0aXZlUmVmLmN1cnJlbnQsXG4gICAgICAgICAgbWV0YWRhdGEsXG4gICAgICAgIH0sXG4gICAgICAgIHQsXG4gICAgICAgIGhpdGxFeGVjdXRpb25Db250ZXh0OiBoaXRsQ29udGV4dCxcbiAgICAgICAgYWdlbnRJZDogYWdlbnQ/LmlkLFxuICAgICAgICBhZ2VudE5hbWU6IGFnZW50Py5uYW1lLFxuICAgICAgICBjYWxsYmFja3M6IHtcbiAgICAgICAgICBvblN0cmVhbVVwZGF0ZTogY29udGVudCA9PiBoYW5kbGVTdHJlYW1VcGRhdGUoaGl0bEN0eCwgY29udGVudCksXG4gICAgICAgICAgb25GaW5pc2hTdHJlYW06IGZpbmlzaFBheWxvYWQgPT4ge1xuICAgICAgICAgICAgcmVsZWFzZUFjdGl2ZVByb2Nlc3NpbmcoKVxuICAgICAgICAgICAgaGFuZGxlU3RyZWFtRmluaXNoKFxuICAgICAgICAgICAgICBoaXRsQ3R4LFxuICAgICAgICAgICAgICBmaW5pc2hQYXlsb2FkLmNvbnRlbnQsXG4gICAgICAgICAgICAgIGZpbmlzaFBheWxvYWQuc291cmNlcyxcbiAgICAgICAgICAgICAgZmluaXNoUGF5bG9hZC5tZW1vcnlTZXNzaW9uSWQsXG4gICAgICAgICAgICAgIGZpbmlzaFBheWxvYWQuYXR0YWNobWVudHMsXG4gICAgICAgICAgICAgIGZpbmlzaFBheWxvYWQuc3VnZ2VzdGlvbnMsXG4gICAgICAgICAgICAgIGZpbmlzaFBheWxvYWQuY29tcGxldGVkQWdlbnRJZCxcbiAgICAgICAgICAgICAgZmluaXNoUGF5bG9hZC5yZXNvbHZlZENvbnRleHQsXG4gICAgICAgICAgICAgIGZpbmlzaFBheWxvYWQucmVhc29uaW5nXG4gICAgICAgICAgICApXG4gICAgICAgICAgfSxcbiAgICAgICAgICBvbkVycm9yOiAoKSA9PiB7XG4gICAgICAgICAgICByZWxlYXNlQWN0aXZlUHJvY2Vzc2luZygpXG4gICAgICAgICAgICBoYW5kbGVTdHJlYW1FcnJvcihoaXRsQ3R4KVxuICAgICAgICAgIH0sXG4gICAgICAgICAgb25BcHByb3ZhbFJlcXVpcmVkOiAoYXBwcm92YWxQYXlsb2FkLCBhY2N1bXVsYXRlZENvbnRlbnQpID0+IHtcbiAgICAgICAgICAgIHJlbGVhc2VBY3RpdmVQcm9jZXNzaW5nKClcbiAgICAgICAgICAgIGhhbmRsZUFwcHJvdmFsUmVxdWlyZWQoaGl0bEN0eCwgYXBwcm92YWxQYXlsb2FkLCBhY2N1bXVsYXRlZENvbnRlbnQpXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH0pXG5cbiAgICAgIGlmICghcmVzdWx0LnN0YXJ0ZWQpIHtcbiAgICAgICAgcmVsZWFzZUFjdGl2ZVByb2Nlc3NpbmcoKVxuICAgICAgICBpZiAocmVzdWx0LnJlYXNvbiA9PT0gJ2xpbWl0Jykge1xuICAgICAgICAgIGRvY3VtZW50LmRpc3BhdGNoRXZlbnQoXG4gICAgICAgICAgICBuZXcgQ3VzdG9tRXZlbnQoJ3NuYWNrYmFyLWV2ZW50Jywge1xuICAgICAgICAgICAgICBkZXRhaWw6IHsgc2hvdzogdHJ1ZSwgc2V2ZXJpdHk6ICdpbmZvJywgbWVzc2FnZTogdCgnY2hhdC50b29NYW55QWN0aXZlU2Vzc2lvbnMnKSB9LFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICApXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIFtcbiAgICAgIGF1dGhVc2VyLFxuICAgICAgYWdlbnQsXG4gICAgICBjb21taXRUb1Nlc3Npb24sXG4gICAgICBoYW5kbGVTdHJlYW1FcnJvcixcbiAgICAgIGhhbmRsZVN0cmVhbVVwZGF0ZSxcbiAgICAgIGhhbmRsZVN0cmVhbUZpbmlzaCxcbiAgICAgIGhhbmRsZUFwcHJvdmFsUmVxdWlyZWQsXG4gICAgICB0LFxuICAgIF1cbiAgKVxuXG4gIGNvbnN0IGluaXRpYWxpemVDaGF0ID0gdXNlQ2FsbGJhY2soYXN5bmMgKCkgPT4ge1xuICAgIGlmICghZmlyc3RUaW1lUmVmLmN1cnJlbnQpIHtcbiAgICAgIGZpcnN0VGltZVJlZi5jdXJyZW50ID0gdHJ1ZVxuICAgIH1cbiAgICBpZiAoaW5pdGlhbENoYXRJZCkge1xuICAgICAgYXdhaXQgbG9hZE1lc3NhZ2VzKClcbiAgICB9IGVsc2UgaWYgKHVzZXJJbml0aWFsTWVzc2FnZSkge1xuICAgICAgY29uc3QgaGFzSW5pdGlhbE1lc3NhZ2UgPSBCb29sZWFuKHVzZXJJbml0aWFsTWVzc2FnZS5tZXNzYWdlPy50cmltKCkpXG4gICAgICBjb25zdCBoYXNJbml0aWFsQXR0YWNobWVudHMgPSBCb29sZWFuKHVzZXJJbml0aWFsTWVzc2FnZS5hdHRhY2htZW50cz8ubGVuZ3RoKVxuICAgICAgY29uc3QgaGFzSW5pdGlhbEZhcSA9IEJvb2xlYW4odXNlckluaXRpYWxNZXNzYWdlLmZhcUlkKVxuICAgICAgY29uc3QgaGFzSW5pdGlhbEZ1YSA9IEJvb2xlYW4odXNlckluaXRpYWxNZXNzYWdlLmZ1YUlkKVxuICAgICAgY29uc3QgaGFzSW5pdGlhbFNjID0gQm9vbGVhbih1c2VySW5pdGlhbE1lc3NhZ2Uuc2NJZClcblxuICAgICAgaWYgKCFoYXNJbml0aWFsTWVzc2FnZSAmJiAhaGFzSW5pdGlhbEF0dGFjaG1lbnRzICYmICFoYXNJbml0aWFsRmFxICYmICFoYXNJbml0aWFsRnVhICYmICFoYXNJbml0aWFsU2MpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGhpc3RvcnkgPSBtZXNzYWdlc1JlZi5jdXJyZW50Lm1hcChoaXN0b3J5TWVzc2FnZSA9PiAoe1xuICAgICAgICBjb250ZW50OiBoaXN0b3J5TWVzc2FnZS5tZXNzYWdlLFxuICAgICAgICByb2xlOiBoaXN0b3J5TWVzc2FnZS51c2VyLmlkID09PSBhdXRoVXNlci5pZC50b1N0cmluZygpID8gQ2hhdEhpc3RvcnlSb2xlLlVTRVIgOiBDaGF0SGlzdG9yeVJvbGUuQVNTSVNUQU5ULFxuICAgICAgfSkpXG5cbiAgICAgIGNvbnN0IHtcbiAgICAgICAgY2hpcHNQcm9qZWN0OiBjdHhDaGlwc1Byb2plY3QsXG4gICAgICAgIHByb2plY3Q6IGN0eFByb2plY3QsXG4gICAgICAgIGNsaWVudDogY3R4Q2xpZW50LFxuICAgICAgICB0YXNrOiBjdHhUYXNrLFxuICAgICAgfSA9IGNvbnRleHRSZWYuY3VycmVudFxuICAgICAgY29uc3QgcHJvamVjdFRvUmVxdWVzdCA9IHJlc29sdmVQcm9qZWN0VG9SZXF1ZXN0KGN0eENoaXBzUHJvamVjdCwgbnVsbCkgPz8gY3R4UHJvamVjdD8uaWQgPz8gbnVsbFxuXG4gICAgICBjb25zdCBpbml0aWFsRGlzcGxheU1lc3NhZ2UgPSBmb3JtYXRRdWlja0FjdGlvbk1lc3NhZ2VGb3JEaXNwbGF5KHVzZXJJbml0aWFsTWVzc2FnZS5tZXNzYWdlLCB7XG4gICAgICAgIGZ1YUlkOiB1c2VySW5pdGlhbE1lc3NhZ2UuZnVhSWQsXG4gICAgICAgIHNjSWQ6IHVzZXJJbml0aWFsTWVzc2FnZS5zY0lkLFxuICAgICAgfSlcblxuICAgICAgZW5zdXJlU2Vzc2lvbkluU2lkZWJhcih7XG4gICAgICAgIHNlc3Npb25JZDogY3VycmVudENoYXRJZC5jdXJyZW50LFxuICAgICAgICB0aXRsZTogYnVpbGRTaWRlYmFyU2Vzc2lvblRpdGxlKGluaXRpYWxEaXNwbGF5TWVzc2FnZSksXG4gICAgICAgIGFnZW50LFxuICAgICAgICBhZ2VudElkOiBhZ2VudD8uaWQsXG4gICAgICAgIHByb2plY3Q6IGN0eFByb2plY3QsXG4gICAgICAgIGNsaWVudDogY3R4Q2xpZW50LFxuICAgICAgICBhdHRhY2htZW50czogdXNlckluaXRpYWxNZXNzYWdlLmF0dGFjaG1lbnRzLFxuICAgICAgfSlcblxuICAgICAgYXNrTWFpYSh7XG4gICAgICAgIG1lc3NhZ2U6IHVzZXJJbml0aWFsTWVzc2FnZS5tZXNzYWdlLFxuICAgICAgICBoaXN0b3J5LFxuICAgICAgICBwcm9qZWN0SWQ6IHByb2plY3RUb1JlcXVlc3QsXG4gICAgICAgIGxhbmc6IGF1dGhVc2VyLmxhbmcsXG4gICAgICAgIHVzZXJJZDogYXV0aFVzZXIuaWQudG9TdHJpbmcoKSxcbiAgICAgICAgZmlyc3ROYW1lOiBhdXRoVXNlci5maXJzdE5hbWUsXG4gICAgICAgIGxhc3ROYW1lOiBhdXRoVXNlci5sYXN0TmFtZSxcbiAgICAgICAgY29tcGFueUlkOiBhdXRoVXNlci5jb21wYW55X2lkLnRvU3RyaW5nKCksXG4gICAgICAgIGNoYXRJZDogY3VycmVudENoYXRJZC5jdXJyZW50LFxuICAgICAgICBtZXNzYWdlSWQ6IGN1cnJlbnRNZXNzYWdlSWQuY3VycmVudCxcbiAgICAgICAgYWdlbnROYW1lOiBhZ2VudD8ubmFtZSEsXG4gICAgICAgIGFnZW50SWQ6IGFnZW50Py5pZCEsXG4gICAgICAgIGlzV2ViU2VhcmNoQWN0aXZlOiBpc1dlYlNlYXJjaEFjdGl2ZVJlZi5jdXJyZW50LFxuICAgICAgICBpc0RlZXBTZWFyY2hBY3RpdmU6IGlzRGVlcFNlYXJjaEFjdGl2ZVJlZi5jdXJyZW50LFxuICAgICAgICBpc0F1dG9BcHByb3ZlQWN0aXZlOiBpc0F1dG9BcHByb3ZlQWN0aXZlUmVmLmN1cnJlbnQsXG4gICAgICAgIC4uLihjdHhQcm9qZWN0Py5mZWVJZCAhPSBudWxsID8geyBmZWVJZDogTnVtYmVyKGN0eFByb2plY3QuZmVlSWQpIH0gOiB7fSksXG4gICAgICAgIC4uLnJlc29sdmVDbGllbnRQYXlsb2FkKGN0eENsaWVudCwgY3R4UHJvamVjdCksXG4gICAgICAgIC4uLihjdHhQcm9qZWN0Py5uYW1lID8geyBwcm9qZWN0TmFtZTogY3R4UHJvamVjdC5uYW1lIH0gOiB7fSksXG4gICAgICAgIC4uLihjdHhUYXNrPy5pZCAhPSBudWxsXG4gICAgICAgICAgPyB7IHRhc2tJZDogTnVtYmVyKGN0eFRhc2suaWQpLCAuLi4oY3R4VGFzay5uYW1lID8geyB0YXNrTmFtZTogY3R4VGFzay5uYW1lIH0gOiB7fSkgfVxuICAgICAgICAgIDoge30pLFxuICAgICAgICAuLi4odXNlckluaXRpYWxNZXNzYWdlLmF0dGFjaG1lbnRzID8geyBhdHRhY2htZW50czogdXNlckluaXRpYWxNZXNzYWdlLmF0dGFjaG1lbnRzIH0gOiB7fSksXG4gICAgICAgIC4uLih1c2VySW5pdGlhbE1lc3NhZ2UuZmFxSWQgPyB7IGZhcUlkOiB1c2VySW5pdGlhbE1lc3NhZ2UuZmFxSWQgfSA6IHt9KSxcbiAgICAgICAgLi4uKHVzZXJJbml0aWFsTWVzc2FnZS5hZ2VudFN1Z2dlc3Rpb25JZCA/IHsgYWdlbnRTdWdnZXN0aW9uSWQ6IHVzZXJJbml0aWFsTWVzc2FnZS5hZ2VudFN1Z2dlc3Rpb25JZCB9IDoge30pLFxuICAgICAgICAuLi4odXNlckluaXRpYWxNZXNzYWdlLmZ1YUlkID8geyBmdWFJZDogdXNlckluaXRpYWxNZXNzYWdlLmZ1YUlkIH0gOiB7fSksXG4gICAgICAgIC4uLih1c2VySW5pdGlhbE1lc3NhZ2Uuc2NJZCA/IHsgc2NJZDogdXNlckluaXRpYWxNZXNzYWdlLnNjSWQgfSA6IHt9KSxcbiAgICAgICAgLi4uKGFnZW50Py5lbnRpdHkgIT0gbnVsbCA/IHsgYWdlbnRFbnRpdHk6IGFnZW50LmVudGl0eSB9IDoge30pLFxuICAgICAgICAuLi4oYWdlbnQ/LnR5cGUgIT0gbnVsbCA/IHsgYWdlbnRUeXBlOiBhZ2VudC50eXBlIH0gOiB7fSksXG4gICAgICAgIC4uLihhZ2VudD8uZW1vamkgIT0gbnVsbCA/IHsgYWdlbnRFbW9qaTogYWdlbnQuZW1vamkgfSA6IHt9KSxcbiAgICAgICAgLi4uKGJ1aWxkQ29udGV4dE1lc3NhZ2UodXNlckluaXRpYWxNZXNzYWdlLm1lbnRpb25zKVxuICAgICAgICAgID8geyBjb250ZXh0TWVzc2FnZTogYnVpbGRDb250ZXh0TWVzc2FnZSh1c2VySW5pdGlhbE1lc3NhZ2UubWVudGlvbnMpIH1cbiAgICAgICAgICA6IHt9KSxcbiAgICAgICAgLi4uKHVzZXJJbml0aWFsTWVzc2FnZS5jb250ZXh0RGF0YSA/IHsgY29udGV4dERhdGE6IHVzZXJJbml0aWFsTWVzc2FnZS5jb250ZXh0RGF0YSB9IDoge30pLFxuICAgICAgfSlcbiAgICB9XG4gIH0sIFtcbiAgICBpbml0aWFsQ2hhdElkLFxuICAgIHVzZXJJbml0aWFsTWVzc2FnZSxcbiAgICBwcm9qZWN0LFxuICAgIGNsaWVudCxcbiAgICB0YXNrLFxuICAgIGF1dGhVc2VyLFxuICAgIGFnZW50LFxuICAgIGFza01haWEsXG4gICAgaXNXZWJTZWFyY2hBY3RpdmUsXG4gICAgaXNEZWVwU2VhcmNoQWN0aXZlLFxuICBdKVxuXG4gIGNvbnN0IHJlc2V0Q2hhdCA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBjb25zdCBwcmV2aW91c1Nlc3Npb25JZCA9IGN1cnJlbnRDaGF0SWQuY3VycmVudFxuICAgIHNlc3Npb25TdHJlYW1pbmdUZXh0LmNsZWFyKHByZXZpb3VzU2Vzc2lvbklkKVxuICAgIHJlYXNvbmluZ1N0b3JlLmNsZWFyKClcbiAgICBjdXJyZW50TWVzc2FnZUlkLmN1cnJlbnQgPSB1dWlkdjQoKVxuICAgIGN1cnJlbnRVc2VyUXVlc3Rpb24uY3VycmVudCA9IG51bGxcbiAgICBjdXJyZW50Q2hhdElkLmN1cnJlbnQgPSB1dWlkdjQoKVxuICAgIHNldEFjdGl2ZVNlc3Npb25JZChjdXJyZW50Q2hhdElkLmN1cnJlbnQpXG4gICAgcmVwb3J0ZWRFdmVudC5jdXJyZW50ID0gZmFsc2VcbiAgICBzdHJlYW1pbmdQbGFjZWhvbGRlcklkUmVmLmN1cnJlbnQgPSBudWxsXG4gICAgYWN0aXZlU3RyZWFtQ2hhdElkUmVmLmN1cnJlbnQgPSBudWxsXG4gICAgc2V0QWN0aXZlQ2hhdElkKG51bGwpXG4gIH0sIFtzZXRBY3RpdmVDaGF0SWRdKVxuXG4gIGNvbnN0IHN0b3BHZW5lcmF0aW9uID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIHN0b3BTdHJlYW1pbmcoKVxuICAgIGlzUHJvY2Vzc2luZ1JlZi5jdXJyZW50ID0gZmFsc2VcbiAgfSwgW3N0b3BTdHJlYW1pbmddKVxuXG4gIHJldHVybiB7XG4gICAgbWVzc2FnZXMsXG4gICAgbG9hZGluZ01lc3NhZ2VzLFxuICAgIGlzTG9hZGluZ01vcmVNZXNzYWdlcyxcbiAgICB3YWl0aW5nUmVzcG9uc2UsXG4gICAgaXNXcml0aW5nLFxuICAgIGxvYWRpbmdNZXNzYWdlLFxuICAgIHN0cmVhbUFjdGl2aXR5LFxuICAgIGFjdGl2ZUxvYWRpbmdzLFxuICAgIGN1cnJlbnRQcm9qZWN0LFxuICAgIGN1cnJlbnRDaGF0SWQ6IGN1cnJlbnRDaGF0SWQuY3VycmVudCxcbiAgICBjdXJyZW50TWVzc2FnZUlkOiBjdXJyZW50TWVzc2FnZUlkLmN1cnJlbnQsXG5cbiAgICBzZW5kTWVzc2FnZSxcbiAgICByZXRyeU1lc3NhZ2UsXG4gICAgY2hhbmdlUHJvamVjdCxcbiAgICBoYW5kbGVGZWVkYmFjayxcbiAgICBoYW5kbGVBcHByb3ZhbERlY2lzaW9uLFxuICAgIGhhbmRsZVNjcm9sbCxcbiAgICBpbml0aWFsaXplQ2hhdCxcbiAgICByZXNldENoYXQsXG4gICAgc3RvcEdlbmVyYXRpb24sXG5cbiAgICBpc0Rpc2FibGVkOiB3YWl0aW5nUmVzcG9uc2UgfHwgbG9hZGluZ01lc3NhZ2VzLFxuICB9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVNBLFdBQVcsRUFBRUMsTUFBTSxFQUFFQyxTQUFTLEVBQUVDLFFBQVEsUUFBUSxPQUFPO0FBQ2hFLFNBQVNDLFNBQVMsUUFBUSxXQUFXO0FBQ3JDLFNBQVND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
|
|
1373
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1c2VDYWxsYmFjayIsInVzZVJlZiIsInVzZUVmZmVjdCIsInVzZVN0YXRlIiwiZmx1c2hTeW5jIiwidjQiLCJ1dWlkdjQiLCJ1c2VDaGF0TWVzc2FnZXMiLCJ1c2VPcmNoZXN0cmF0b3JTdHJlYW0iLCJ1c2VUIiwiZmluZE1lc3NhZ2VXaXRoQXBwcm92YWxCeVRocmVhZElkcyIsInJlc29sdmVBcHByb3ZhbERlY2lzaW9uU3RhdHVzIiwicmVzb2x2ZUNvbnRpbnVlU3RyZWFtRGVjaXNpb24iLCJtYXBBdXRoVXNlclRvQ2hhdE1lc3NhZ2VVc2VyIiwibm9ybWFsaXplQXNzaXN0YW50QXR0YWNobWVudHMiLCJub3JtYWxpemVTZW5kTWVzc2FnZUFyZ3MiLCJyZWFzb25pbmdUcmFjZUZvciIsInJlc29sdmVDbGllbnRQYXlsb2FkIiwicmVzb2x2ZVByb2plY3RUb1JlcXVlc3QiLCJyZXNvbHZlU3RyZWFtRXJyb3JNZXNzYWdlS2V5IiwiYXBwbHlQcm9qZWN0RGFzaGJvYXJkTXV0YXRpb24iLCJzaG91bGRSZWZldGNoT3BlblRhc2tQYW5lbCIsInJlc29sdmVTZW5kTWVzc2FnZUdhdGUiLCJyZXNvbHZlU2VuZE1lc3NhZ2VQYXlsb2FkRmllbGRzIiwiYnVpbGRDaGF0SGlzdG9yeUZyb21NZXNzYWdlcyIsInJlc29sdmVMYXN0TWVzc2FnZUFnZW50SWQiLCJyZXNvbHZlQWdlbnRJZEZvclN0cmVhbSIsInJlc29sdmVVc2VyUXVlc3Rpb25NZXNzYWdlSWQiLCJidWlsZE1haWFTdHJlYW1SZXF1ZXN0UGF5bG9hZCIsImJ1aWxkTWFpYVN0cmVhbVJlcXVlc3RQYXlsb2FkRm9yUHJvamVjdENoYW5nZSIsInJlc29sdmVTdHJlYW1FcnJvckhhbmRsaW5nTW9kZSIsImJ1aWxkU3RyZWFtRXJyb3JBc3Npc3RhbnRNZXNzYWdlIiwicmVzb2x2ZUhpdGxBcHByb3ZhbFJlcXVpcmVkT3V0Y29tZSIsImJ1aWxkSGl0bEFwcHJvdmFsUGVuZGluZ01lc3NhZ2UiLCJzaG91bGRQcmVzZXJ2ZVJlYXNvbmluZ09uU3RyZWFtU3RvcCIsImJ1aWxkU3RyZWFtU3RvcFBhcnRpYWxBc3Npc3RhbnRNZXNzYWdlIiwiYnVpbGRTdHJlYW1TdG9wQ2FuY2VsbGVkQXNzaXN0YW50TWVzc2FnZSIsInJlc29sdmVSZXRyeUJsb2NrUmVhc29uIiwicmVzb2x2ZVJldHJ5RWxpZ2liaWxpdHkiLCJyZXNvbHZlUmV0cnlVc2VyQXR0YWNobWVudHMiLCJzaG91bGRVcGRhdGVQcm9qZWN0T25DaGFuZ2UiLCJzaG91bGRSZXNlbmRBZnRlclByb2plY3RDaGFuZ2UiLCJyZXNvbHZlU3RyZWFtRmluaXNoRmluYWxNZXNzYWdlSWQiLCJyZXNvbHZlU3RyZWFtU3RvcE1lc3NhZ2VJZHMiLCJyZXNvbHZlUmVudGFiaWxpZGFkUHJvamVjdEZhcU1lc3NhZ2UiLCJyZXNvbHZlU3RyZWFtRXJyb3JVc2VyTWVzc2FnZSIsInJlc29sdmVIaXRsRXhlY3V0aW9uQ29udGV4dCIsInJlc29sdmVTa2lwcGVkSGl0bE1hbnVhbEFwcHJvdmFsIiwicmVzb2x2ZUhpdGxTa2lwUmVzb2x1dGlvblNvdXJjZSIsInJlc29sdmVDcmVhdGVBZ2VudEhpdGxBbmFseXRpY3NFdmVudHMiLCJidWlsZFRlcm1pbmFsU2Vzc2lvblJlY29uY2lsaWF0aW9uS2V5Iiwic2hvdWxkRm9yY2VSZWxvYWRNZXNzYWdlc09uVGVybWluYWxTZXNzaW9uIiwic2hvdWxkUm90YXRlU2Vzc2lvbkZvck5ld0hvbWUiLCJzaG91bGRTd2l0Y2hUb0luaXRpYWxDaGF0U2Vzc2lvbiIsImJ1aWxkU3RyZWFtRmluaXNoQXNzaXN0YW50TWVzc2FnZSIsInJlc29sdmVBY3RpdmVTdHJlYW1GaW5pc2hQcm9jZXNzaW5nIiwic2hvdWxkTWFya0NoYXRSZWFkQWZ0ZXJTdHJlYW1GaW5pc2giLCJzaG91bGREaXNwYXRjaEZpcnN0U2Vzc2lvblJlZmV0Y2giLCJ1c2VVc2VyIiwidXNlR2xvYmFsQ29udGV4dCIsIkVWRU5UUyIsInVzZUV2ZW50IiwibWFpYSIsIkZlZWRiYWNrIiwiQ2hhdEhpc3RvcnlSb2xlIiwiYnVpbGRDb250ZXh0TWVzc2FnZSIsImZvcm1hdFF1aWNrQWN0aW9uTWVzc2FnZUZvckRpc3BsYXkiLCJ1c2VQcm9qZWN0cyIsInVzZVRhYlRhc2tEZWZhdWx0IiwiVEFTS19VUkxfUkVHRVhfUEFUVEVSTiIsImRpc3BhdGNoTWFpYUhvdXJzQ2hhcmdlZCIsImZldGNoQWdlbnREZXRhaWwiLCJidWlsZEhpdGxBY3Rpb25UeXBlTGlzdCIsImdldEhpdGxBbmFseXRpY3NBZ2VudFR5cGUiLCJub3JtYWxpemVIaXRsVG9vbE5hbWUiLCJ0cmFja01hbnVhbEhpdGxFdmVudHMiLCJzZXNzaW9uU3RyZWFtaW5nVGV4dCIsInVzZVNlc3Npb25zU3RvcmUiLCJ1c2VTZXNzaW9uTWV0YSIsInNlc3Npb25TdHJlYW1NYW5hZ2VyIiwiTUFYX0NPTkNVUlJFTlRfU1RSRUFNUyIsImFjdGl2ZVZpZXciLCJub3RpZnlTZXNzaW9uRmluaXNoZWRJbkJhY2tncm91bmQiLCJidWlsZFNpZGViYXJTZXNzaW9uVGl0bGUiLCJlbnN1cmVTZXNzaW9uSW5TaWRlYmFyIiwiaXNTdHJlYW1pbmdQbGFjZWhvbGRlck1lc3NhZ2VJZCIsInN0cmVhbWluZ1BsYWNlaG9sZGVyTWVzc2FnZUlkIiwiZmluZFVzZXJNZXNzYWdlRm9yUmV0cnkiLCJtZXNzYWdlc1dpdGhvdXRSZXRyaWVkVHVybiIsImdldENoYXRzU3RvcmVTdGF0ZSIsInVzZUNoYXRzU3RvcmUiLCJyZWFzb25pbmdTdG9yZSIsIm1hcFJlYXNvbmluZ1RyYWNlIiwidXNlU3RhYmxlQ2FsbGJhY2tzIiwiYXV0aFVzZXIiLCJjdXJyZW50VXNlciIsIm5leHRVc2VyIiwiY3VycmVudCIsImlkIiwibmFtZSIsImF2YXRhciIsInVzZUNoYXRNYW5hZ2VyIiwiX3JlZiIsImluaXRpYWxDaGF0SWQiLCJjaGF0SWQiLCJ1c2VySW5pdGlhbE1lc3NhZ2UiLCJvbkVycm9yIiwiX3JlZiRhZ2VudHMiLCJhZ2VudHMiLCJfdXNlVCIsInQiLCJfdXNlR2xvYmFsQ29udGV4dCIsInByb2plY3QiLCJzZXRQcm9qZWN0IiwiY2xpZW50Iiwic2V0Q2xpZW50IiwidGFzayIsInNldFRhc2siLCJhZ2VudCIsImlzV2ViU2VhcmNoQWN0aXZlIiwiaXNEZWVwU2VhcmNoQWN0aXZlIiwiaXNBdXRvQXBwcm92ZUFjdGl2ZSIsImNoaXBzUHJvamVjdCIsInNldENoaXBzUHJvamVjdCIsImV2ZW50IiwiX3VzZVByb2plY3RzIiwiZmV0Y2hQcm9qZWN0cyIsIl91c2VTdGFibGVDYWxsYmFja3MiLCJfdXNlVGFiVGFza0RlZmF1bHQiLCJnZXRUYWJUYXNrRGVmYXVsdCIsImN1cnJlbnRNZXNzYWdlSWQiLCJjdXJyZW50VXNlclF1ZXN0aW9uIiwiY3VycmVudENoYXRJZCIsInNldEFjdGl2ZUNoYXRJZCIsInN0YXRlIiwicmVwb3J0ZWRFdmVudCIsIm1lc3NhZ2VzUmVmIiwibGFzdE1hbnVhbEFwcHJvdmFsUmVmIiwidHJhY2tlZE1hbnVhbEhpdGxLZXlzUmVmIiwiU2V0IiwiaGl0bEV4ZWN1dGlvbkNvbnRleHRSZWYiLCJyZXRyeVNuYXBzaG90UmVmIiwiaXNQcm9jZXNzaW5nUmVmIiwiZmlyc3RUaW1lUmVmIiwic3RyZWFtaW5nUGxhY2Vob2xkZXJJZFJlZiIsImFjdGl2ZVN0cmVhbUNoYXRJZFJlZiIsImNsZWFyU3RyZWFtVWlSZWYiLCJ1bmRlZmluZWQiLCJfdXNlU3RhdGUiLCJfdXNlU3RhdGUyIiwiX3NsaWNlZFRvQXJyYXkiLCJhY3RpdmVMb2FkaW5ncyIsInNldEFjdGl2ZUxvYWRpbmdzIiwiX3VzZVN0YXRlMyIsIl91c2VTdGF0ZTQiLCJhY3RpdmVTZXNzaW9uSWQiLCJzZXRBY3RpdmVTZXNzaW9uSWQiLCJpc01vdW50ZWRSZWYiLCJsYXN0SGFuZGxlZFRlcm1pbmFsUmVmIiwiaXNXZWJTZWFyY2hBY3RpdmVSZWYiLCJpc0RlZXBTZWFyY2hBY3RpdmVSZWYiLCJpc0F1dG9BcHByb3ZlQWN0aXZlUmVmIiwiY29udGV4dFJlZiIsIl91c2VDaGF0TWVzc2FnZXMiLCJsb2FkaW5nTWVzc2FnZXMiLCJtZXNzYWdlcyIsImlzTG9hZGluZ01vcmVNZXNzYWdlcyIsImxvYWRNZXNzYWdlcyIsImFkZE1lc3NhZ2UiLCJyZW1vdmVNZXNzYWdlIiwicmVwbGFjZU1lc3NhZ2VzIiwiaGFuZGxlU2Nyb2xsIiwiY29tbWl0VG9TZXNzaW9uIiwic2Vzc2lvbklkIiwibWVzc2FnZSIsImdldFN0YXRlIiwiaXMiLCJkcm9wRnJvbVNlc3Npb24iLCJtZXNzYWdlSWQiLCJjbGVhclNlc3Npb25UYWlsIiwic2V0TWVzc2FnZXMiLCJzZXQiLCJhY3RpdmVTZXNzaW9uTWV0YSIsInN0YXR1cyIsImtleSIsImZpbmlzaGVkQXQiLCJ0YWlsIiwiZ2V0TWVzc2FnZXMiLCJmb3JjZSIsImN1c3RvbUV2ZW50IiwiQ3VzdG9tRXZlbnQiLCJkZXRhaWwiLCJkb2N1bWVudCIsImRpc3BhdGNoRXZlbnQiLCJwcmV2aW91c0luaXRpYWxDaGF0SWRSZWYiLCJwcmV2aW91c0luaXRpYWxDaGF0SWQiLCJpc0FjdGl2ZSIsImhhbmRsZVN0cmVhbUVycm9yIiwiY3R4IiwiZXJyb3JNZXNzYWdlIiwiZXJyb3JSYXdNZXNzYWdlIiwicGxhY2Vob2xkZXJJZCIsImNsZWFyIiwicmV0cnlTbmFwc2hvdCIsIkJvb2xlYW4iLCJzaG93Iiwic2V2ZXJpdHkiLCJfcmVzb2x2ZVN0cmVhbUVycm9yTWUiLCJtZXNzYWdlS2V5IiwidG9rZW5zVXNlZCIsInNob3dSZXRyeSIsInJldHJ5TGFiZWwiLCJtYXJrQ2hhdEFzVW5yZWFkIiwiaGFuZGxlU3RyZWFtVXBkYXRlIiwiY29udGVudCIsInBsYWNlaG9sZGVyRXhpc3RzIiwic29tZSIsIm1zZyIsInN0YXJ0IiwiZGF0ZSIsIkRhdGUiLCJ1c2VyIiwicm9sZSIsIkFTU0lTVEFOVCIsInNldFRleHQiLCJoYW5kbGVTdHJlYW1GaW5pc2giLCJfcmVmMiIsIl9hc3luY1RvR2VuZXJhdG9yIiwiX3JlZ2VuZXJhdG9yUnVudGltZSIsIm1hcmsiLCJfY2FsbGVlIiwic291cmNlcyIsIm1lbW9yeVNlc3Npb25JZCIsInJhd0F0dGFjaG1lbnRzIiwic3VnZ2VzdGlvbnMiLCJjb21wbGV0ZWRBZ2VudElkIiwiX3Jlc29sdmVkQ29udGV4dCIsInJlYXNvbmluZyIsIl9yZWFzb25pbmdUcmFjZUZvciIsIl93aW5kb3ckdGFza1BhbmVsIiwidGVtcE1lc3NhZ2VJZCIsImF0dGFjaG1lbnRzIiwiZmluYWxNZXNzYWdlSWQiLCJmaW5hbFRyYWNlIiwidGFza1VybFJlZ2V4IiwibWFudWFsQXBwcm92YWxGb3JBbmFseXRpY3MiLCJtYW51YWxBcHByb3ZhbCIsIl95aWVsZCRyZXNvbHZlQWN0aXZlUyIsImNvbnRlbnRUb0FkZCIsImNyZWF0ZUFnZW50Rm9sbG93VXAiLCJlZGl0QWdlbnRGb2xsb3dVcCIsImhvdXJzQ2hhcmdlVG9vbHMiLCJhZmZlY3RlZFRhc2tJZHMiLCJtYW51YWxXYXNUYXNrRWRpdCIsIm1hbnVhbFdhc1Rhc2tEZWxldGUiLCJ3YXNUYXNrRWRpdCIsIndhc1Rhc2tEZWxldGUiLCJ3YXNDcmVhdGVBZ2VudEFwcHJvdmVkIiwicGVuZGluZ0FjdGlvbnMiLCJvcGVuVGFza1BhbmVsSWQiLCJfd2luZG93JHRhc2tQYW5lbDIiLCJfd2luZG93JHRhc2tQYW5lbDIkcmUiLCJfZ2V0Q2hhdHNTdG9yZVN0YXRlIiwiaXNDaGF0Vmlld1Zpc2libGUiLCJtYXJrQ2hhdEFzUmVhZCIsIndyYXAiLCJfY29udGV4dCIsInByZXYiLCJuZXh0IiwicmVuYW1lIiwiYWJydXB0IiwiUmVnRXhwIiwicHJvamVjdElkIiwicGF0aG5hbWUiLCJ3aW5kb3ciLCJsb2NhdGlvbiIsIm11bHRpQWdlbnRzQWNjZXNzIiwiTUFJQV9DSEFUX0FJX0ZFQVRVUkVfQUNDRVNTX01VTFRJX0FHRU5UUyIsImFwcGx5RGFzaGJvYXJkTXV0YXRpb24iLCJtdXRhdGlvbiIsInRhc2tJZHMiLCJuZXdQcm9qZWN0RGFzaGJvYXJkIiwic2VudCIsIm1hbnVhbEFwcHJvdmFsVG9vbE5hbWUiLCJ0b29sTmFtZSIsImFnZW50VHlwZSIsIm5vcm1hbGl6ZVRvb2xOYW1lIiwiYnVpbGRBY3Rpb25UeXBlTGlzdCIsImZvckVhY2giLCJwYXlsb2FkIiwiYWlDaGF0SGl0bE9wdGlvbiIsInRhc2tQYW5lbCIsInRhc2tJZCIsImxlbmd0aCIsInNvdXJjZSIsInRvb2xzIiwicmVmZXRjaFRhc2siLCJjYWxsIiwiYWdlbnRJZCIsInRoZW4iLCJjaGF0QWdlbnQiLCJlcnIiLCJjb25zb2xlIiwiZXJyb3IiLCJzdG9wIiwiX3giLCJfeDIiLCJfeDMiLCJfeDQiLCJfeDUiLCJfeDYiLCJfeDciLCJfeDgiLCJfeDkiLCJhcHBseSIsImFyZ3VtZW50cyIsImhhbmRsZVN0cmVhbVN0b3AiLCJwYXJ0aWFsVGV4dCIsIl9yZXNvbHZlU3RyZWFtU3RvcE1lcyIsImNhbmNlbGxlZE1lc3NhZ2VJZCIsInN0b3BwZWRUcmFjZSIsImZpbmlzaCIsInJlbW92ZSIsImNhbmNlbGxlZExhYmVsIiwiaGFuZGxlQXBwcm92YWxSZXF1aXJlZCIsImFwcHJvdmFsIiwiYWNjdW11bGF0ZWRDb250ZW50IiwiX21hcFJlYXNvbmluZ1RyYWNlIiwiaGl0bENvbnRleHQiLCJoaXRsT3V0Y29tZSIsInR5cGUiLCJpbXByZXNzaW9uIiwiYWlDaGF0SGl0bCIsIm9wdGlvbiIsInNraXBwZWRNYW51YWxBcHByb3ZhbCIsImFwcHJvdmFsTWVzc2FnZUlkIiwiYXBwcm92YWxUcmFjZSIsIl91c2VPcmNoZXN0cmF0b3JTdHJlYSIsIm9uU3RyZWFtVXBkYXRlIiwib25GaW5pc2hTdHJlYW0iLCJvblN0b3AiLCJvbkFwcHJvdmFsUmVxdWlyZWQiLCJhc2tNYWlhIiwicmV0cnlDb21wbGV0aW9uIiwid2FpdGluZ1Jlc3BvbnNlIiwiaXNMb2FkaW5nIiwiaXNXcml0aW5nIiwibG9hZGluZ01lc3NhZ2UiLCJzdHJlYW1BY3Rpdml0eSIsInVwZGF0ZVN0cmVhbUFjdGl2aXR5Iiwic3RvcFN0cmVhbWluZyIsImN1cnJlbnRQcm9qZWN0Iiwic2VuZE1lc3NhZ2UiLCJfcmVmMyIsIl9jYWxsZWUyIiwiYXR0YWNobWVudHNPck9wdGlvbnMiLCJmYXFJZCIsImFnZW50U3VnZ2VzdGlvbklkIiwibWVudGlvbnMiLCJmdWFJZCIsInNjSWQiLCJfb3B0aW9ucyRwcm9qZWN0Q2hhbmciLCJfY29udGV4dFJlZiRjdXJyZW50JHAiLCJ3aWxsU3RhcnROZXdTdHJlYW0iLCJzZW5kR2F0ZSIsIl9ub3JtYWxpemVTZW5kTWVzc2FnZSIsIm9wdGlvbnMiLCJwYXlsb2FkRmllbGRzIiwiY29udGV4dE1lc3NhZ2UiLCJkaXNwbGF5TWVzc2FnZSIsIm5ld01lc3NhZ2VJZCIsImxhc3RNZXNzYWdlV2l0aFByb2plY3QiLCJjdXJyZW50QWdlbnRGcm9tTWVzc2FnZXMiLCJfY29udGV4dFJlZiRjdXJyZW50IiwiY3R4Q2hpcHNQcm9qZWN0IiwiY3R4UHJvamVjdCIsImN0eENsaWVudCIsImN0eFRhc2siLCJzdHJlYW1pbmdQbGFjZWhvbGRlcklkIiwiZmluYWxNZXNzYWdlIiwiaGlzdG9yeSIsImxhc3RNZXNzYWdlUHJvamVjdElkIiwicHJvamVjdFRvUmVxdWVzdCIsInByb2plY3RzIiwicGF5bG9hZERhdGEiLCJfY29udGV4dDIiLCJpc1Byb2Nlc3NpbmciLCJhY3RpdmVTdHJlYW1Db3VudCIsImdldEFjdGl2ZUNvdW50IiwibWF4Q29uY3VycmVudCIsInBtQWlUeXBlZFRleHQiLCJmaWx0ZXIiLCJhdCIsInRpdGxlIiwiX29iamVjdFNwcmVhZCIsIlVTRVIiLCJwcm9qZWN0Q2hhbmdlZCIsImluY29tZVR5cGUiLCJ0b1N0cmluZyIsImFnZW50TmFtZSIsInByb2plY3ROYW1lIiwiYWdlbnRFbnRpdHkiLCJlbnRpdHkiLCJhZ2VudEVtb2ppIiwiZW1vamkiLCJjb250ZXh0RGF0YSIsIl94MCIsIl94MSIsIl94MTAiLCJfeDExIiwiX3gxMiIsIl94MTMiLCJfeDE0IiwiY2hhbmdlUHJvamVjdCIsInJldHJ5TWVzc2FnZSIsIl9yZWY0IiwiX2NhbGxlZTQiLCJfdHJ1bmNhdGVkJGF0IiwicmV0cnlCbG9jayIsInByZXZpb3VzTWVzc2FnZXMiLCJ1c2VyTWVzc2FnZSIsInJldHJ5RWxpZ2liaWxpdHkiLCJ0dXJuSWQiLCJ1c2VPcmNoZXN0cmF0b3JGYWxsYmFjayIsInRydW5jYXRlZCIsInBsYWNlaG9sZGVyIiwibmV4dE1lc3NhZ2VzIiwiX2NvbnRleHRSZWYkY3VycmVudDIiLCJyZXBsYXlWaWFPcmNoZXN0cmF0b3IiLCJyZXN1bHQiLCJfY29udGV4dDQiLCJpc1Nlc3Npb25TdHJlYW1BY3RpdmUiLCJlbGlnaWJsZSIsImNvbmNhdCIsIl90b0NvbnN1bWFibGVBcnJheSIsIl9yZWY1IiwiX2NhbGxlZTMiLCJfdCIsIl9jb250ZXh0MyIsInN0YXJ0ZWQiLCJyZWFzb24iLCJsYW5nIiwiU3RyaW5nIiwiTnVtYmVyIiwiX3gxNSIsImhhbmRsZUZlZWRiYWNrIiwiX3JlZjYiLCJfY2FsbGVlNSIsImZlZWRiYWNrUHJvcCIsImNoYXRNZXNzYWdlSWQiLCJyZXNwb25zZSIsIl9jb250ZXh0NSIsIkNoYXRzIiwid2FzSGVscGZ1bENoYXQiLCJUSFVNQlNfVVAiLCJtYXAiLCJ3YXNIZWxwZnVsIiwiX3gxNiIsIl94MTciLCJoYW5kbGVBcHByb3ZhbERlY2lzaW9uIiwiX3JlZjciLCJfY2FsbGVlNiIsInRocmVhZElkcyIsImRlY2lzaW9uIiwiZWRpdGVkQWN0aW9ucyIsIm1ldGFkYXRhIiwiZm91bmQiLCJtZXNzYWdlV2l0aEFwcHJvdmFsIiwiZm91bmRTZXNzaW9uSWQiLCJuZXdTdGF0dXMiLCJpc0FjdGl2ZVNlc3Npb24iLCJzdHJlYW1NZXNzYWdlSWQiLCJoaXRsQ3R4IiwicmVsZWFzZUFjdGl2ZVByb2Nlc3NpbmciLCJfY29udGV4dDYiLCJnZXQiLCJzZXNzaW9uX2lkIiwibWVzc2FnZVRleHQiLCJwZW5kaW5nX2FjdGlvbnMiLCJhcHByb3ZhbFN0YXR1cyIsInN0YXJ0Q29udGludWVTdHJlYW0iLCJjb250aW51ZVJlcXVlc3QiLCJoaXRsRXhlY3V0aW9uQ29udGV4dCIsImNhbGxiYWNrcyIsImZpbmlzaFBheWxvYWQiLCJyZXNvbHZlZENvbnRleHQiLCJhcHByb3ZhbFBheWxvYWQiLCJfeDE4IiwiX3gxOSIsIl94MjAiLCJfeDIxIiwiaW5pdGlhbGl6ZUNoYXQiLCJfY2FsbGVlNyIsIl91c2VySW5pdGlhbE1lc3NhZ2UkbSIsIl91c2VySW5pdGlhbE1lc3NhZ2UkYSIsIl9yZWY5IiwiX3Jlc29sdmVQcm9qZWN0VG9SZXF1IiwiaGFzSW5pdGlhbE1lc3NhZ2UiLCJoYXNJbml0aWFsQXR0YWNobWVudHMiLCJoYXNJbml0aWFsRmFxIiwiaGFzSW5pdGlhbEZ1YSIsImhhc0luaXRpYWxTYyIsIl9jb250ZXh0UmVmJGN1cnJlbnQzIiwiaW5pdGlhbERpc3BsYXlNZXNzYWdlIiwiX2NvbnRleHQ3IiwidHJpbSIsImhpc3RvcnlNZXNzYWdlIiwidXNlcklkIiwiZmlyc3ROYW1lIiwibGFzdE5hbWUiLCJjb21wYW55SWQiLCJjb21wYW55X2lkIiwiZmVlSWQiLCJ0YXNrTmFtZSIsInJlc2V0Q2hhdCIsInByZXZpb3VzU2Vzc2lvbklkIiwic3RvcEdlbmVyYXRpb24iLCJpc0Rpc2FibGVkIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2hvb2tzL3VzZUNoYXRNYW5hZ2VyL3VzZUNoYXRNYW5hZ2VyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIHJhZGl4ICovXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1uZXN0ZWQtdGVybmFyeSAqL1xuLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLW5vbi1udWxsLWFzc2VydGVkLW9wdGlvbmFsLWNoYWluICovXG4vKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55ICovXG5pbXBvcnQgeyB1c2VDYWxsYmFjaywgdXNlUmVmLCB1c2VFZmZlY3QsIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBmbHVzaFN5bmMgfSBmcm9tICdyZWFjdC1kb20nXG5pbXBvcnQgeyB2NCBhcyB1dWlkdjQgfSBmcm9tICd1dWlkJ1xuaW1wb3J0IHsgdXNlQ2hhdE1lc3NhZ2VzIH0gZnJvbSAnLi4vdXNlQ2hhdE1lc3NhZ2VzJ1xuaW1wb3J0IHsgdXNlT3JjaGVzdHJhdG9yU3RyZWFtIH0gZnJvbSAnLi4vdXNlT3JjaGVzdHJhdG9yU3RyZWFtJ1xuaW1wb3J0IHsgdXNlVCB9IGZyb20gJy4uL3VzZVQnXG5pbXBvcnQgeyBBdHRhY2htZW50RmlsZSB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvbW9sZWN1bGVzL0NoYXRGb290ZXIvQ2hhdEZvb3RlcidcbmltcG9ydCB7XG4gIGZpbmRNZXNzYWdlV2l0aEFwcHJvdmFsQnlUaHJlYWRJZHMsXG4gIHJlc29sdmVBcHByb3ZhbERlY2lzaW9uU3RhdHVzLFxuICByZXNvbHZlQ29udGludWVTdHJlYW1EZWNpc2lvbixcbiAgbWFwQXV0aFVzZXJUb0NoYXRNZXNzYWdlVXNlcixcbiAgbm9ybWFsaXplQXNzaXN0YW50QXR0YWNobWVudHMsXG4gIG5vcm1hbGl6ZVNlbmRNZXNzYWdlQXJncyxcbiAgcmVhc29uaW5nVHJhY2VGb3IsXG4gIHJlc29sdmVDbGllbnRQYXlsb2FkLFxuICByZXNvbHZlUHJvamVjdFRvUmVxdWVzdCxcbiAgcmVzb2x2ZVN0cmVhbUVycm9yTWVzc2FnZUtleSxcbiAgYXBwbHlQcm9qZWN0RGFzaGJvYXJkTXV0YXRpb24sXG4gIHNob3VsZFJlZmV0Y2hPcGVuVGFza1BhbmVsLFxuICByZXNvbHZlU2VuZE1lc3NhZ2VHYXRlLFxuICByZXNvbHZlU2VuZE1lc3NhZ2VQYXlsb2FkRmllbGRzLFxuICBidWlsZENoYXRIaXN0b3J5RnJvbU1lc3NhZ2VzLFxuICByZXNvbHZlTGFzdE1lc3NhZ2VBZ2VudElkLFxuICByZXNvbHZlQWdlbnRJZEZvclN0cmVhbSxcbiAgcmVzb2x2ZVVzZXJRdWVzdGlvbk1lc3NhZ2VJZCxcbiAgYnVpbGRNYWlhU3RyZWFtUmVxdWVzdFBheWxvYWQsXG4gIGJ1aWxkTWFpYVN0cmVhbVJlcXVlc3RQYXlsb2FkRm9yUHJvamVjdENoYW5nZSxcbiAgcmVzb2x2ZVN0cmVhbUVycm9ySGFuZGxpbmdNb2RlLFxuICBidWlsZFN0cmVhbUVycm9yQXNzaXN0YW50TWVzc2FnZSxcbiAgcmVzb2x2ZUhpdGxBcHByb3ZhbFJlcXVpcmVkT3V0Y29tZSxcbiAgYnVpbGRIaXRsQXBwcm92YWxQZW5kaW5nTWVzc2FnZSxcbiAgc2hvdWxkUHJlc2VydmVSZWFzb25pbmdPblN0cmVhbVN0b3AsXG4gIGJ1aWxkU3RyZWFtU3RvcFBhcnRpYWxBc3Npc3RhbnRNZXNzYWdlLFxuICBidWlsZFN0cmVhbVN0b3BDYW5jZWxsZWRBc3Npc3RhbnRNZXNzYWdlLFxuICByZXNvbHZlUmV0cnlCbG9ja1JlYXNvbixcbiAgcmVzb2x2ZVJldHJ5RWxpZ2liaWxpdHksXG4gIHJlc29sdmVSZXRyeVVzZXJBdHRhY2htZW50cyxcbiAgc2hvdWxkVXBkYXRlUHJvamVjdE9uQ2hhbmdlLFxuICBzaG91bGRSZXNlbmRBZnRlclByb2plY3RDaGFuZ2UsXG4gIHJlc29sdmVTdHJlYW1GaW5pc2hGaW5hbE1lc3NhZ2VJZCxcbiAgcmVzb2x2ZVN0cmVhbVN0b3BNZXNzYWdlSWRzLFxuICByZXNvbHZlUmVudGFiaWxpZGFkUHJvamVjdEZhcU1lc3NhZ2UsXG4gIHJlc29sdmVTdHJlYW1FcnJvclVzZXJNZXNzYWdlLFxuICByZXNvbHZlSGl0bEV4ZWN1dGlvbkNvbnRleHQsXG4gIHJlc29sdmVTa2lwcGVkSGl0bE1hbnVhbEFwcHJvdmFsLFxuICByZXNvbHZlSGl0bFNraXBSZXNvbHV0aW9uU291cmNlLFxuICByZXNvbHZlQ3JlYXRlQWdlbnRIaXRsQW5hbHl0aWNzRXZlbnRzLFxuICBidWlsZFRlcm1pbmFsU2Vzc2lvblJlY29uY2lsaWF0aW9uS2V5LFxuICBzaG91bGRGb3JjZVJlbG9hZE1lc3NhZ2VzT25UZXJtaW5hbFNlc3Npb24sXG4gIHNob3VsZFJvdGF0ZVNlc3Npb25Gb3JOZXdIb21lLFxuICBzaG91bGRTd2l0Y2hUb0luaXRpYWxDaGF0U2Vzc2lvbixcbiAgYnVpbGRTdHJlYW1GaW5pc2hBc3Npc3RhbnRNZXNzYWdlLFxuICByZXNvbHZlQWN0aXZlU3RyZWFtRmluaXNoUHJvY2Vzc2luZyxcbiAgc2hvdWxkTWFya0NoYXRSZWFkQWZ0ZXJTdHJlYW1GaW5pc2gsXG4gIHNob3VsZERpc3BhdGNoRmlyc3RTZXNzaW9uUmVmZXRjaCxcbn0gZnJvbSAnLi91c2VDaGF0TWFuYWdlci5oZWxwZXJzJ1xuaW1wb3J0IHsgU2VuZE1lc3NhZ2VPcHRpb25zLCBVc2VDaGF0TWFuYWdlclByb3BzIH0gZnJvbSAnLi91c2VDaGF0TWFuYWdlci5pbnRlcmZhY2UnXG5pbXBvcnQgeyB1c2VVc2VyLCBDT1JVc2VyIH0gZnJvbSAnLi4vLi4vY29udGV4dC9jb3ItdXNlcidcbmltcG9ydCB7IHVzZUdsb2JhbENvbnRleHQgfSBmcm9tICcuLi8uLi9jb250ZXh0L2dsb2JhbC1jb250ZXh0J1xuaW1wb3J0IHsgRVZFTlRTLCB1c2VFdmVudCB9IGZyb20gJy4uL3VzZUV2ZW50J1xuaW1wb3J0IG1haWEgZnJvbSAnLi4vLi4vc2VydmljZXMvbWFpYSdcbmltcG9ydCB7IEZlZWRiYWNrIH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9tb2xlY3VsZXMvTWVzc2FnZUZlZWRiYWNrL01lc3NhZ2VGZWVkYmFjaydcbmltcG9ydCB7IENoYXRNZXNzYWdlLCBDaGF0TWVzc2FnZVVzZXIsIENoYXRIaXN0b3J5Um9sZSwgQXBwcm92YWxSZXF1ZXN0IH0gZnJvbSAnLi4vLi4vdHlwZXMvQ2hhdCdcbmltcG9ydCB7IENvbnRleHRNZW50aW9uLCBDb250ZXh0TWVzc2FnZSwgYnVpbGRDb250ZXh0TWVzc2FnZSB9IGZyb20gJy4uLy4uL3R5cGVzL2NvbnRleHRNZW50aW9uJ1xuaW1wb3J0IHsgZm9ybWF0UXVpY2tBY3Rpb25NZXNzYWdlRm9yRGlzcGxheSB9IGZyb20gJy4uLy4uL3V0aWxzL2Zvcm1hdFF1aWNrQWN0aW9uTWVzc2FnZSdcblxuaW1wb3J0IHsgUHJvamVjdCB9IGZyb20gJy4uLy4uL3R5cGVzL1Byb2plY3QnXG5pbXBvcnQgeyB1c2VQcm9qZWN0cyB9IGZyb20gJy4uL3VzZVByb2plY3RzJ1xuaW1wb3J0IHsgdXNlVGFiVGFza0RlZmF1bHQgfSBmcm9tICcuLi91c2VUYWJUYXNrRGVmYXVsdCdcbmltcG9ydCB7IFRBU0tfVVJMX1JFR0VYX1BBVFRFUk4gfSBmcm9tICcuLi8uLi9jb25zdGFudHMvdGFza1VybHMnXG5pbXBvcnQgeyBkaXNwYXRjaE1haWFIb3Vyc0NoYXJnZWQgfSBmcm9tICcuLi8uLi9jb25zdGFudHMvcGxhbm5lclN5bmNFdmVudHMnXG5pbXBvcnQgeyBmZXRjaEFnZW50RGV0YWlsIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvbWFpYS9BZ2VudHMvZmV0Y2hBZ2VudERldGFpbCdcbmltcG9ydCB7XG4gIGJ1aWxkSGl0bEFjdGlvblR5cGVMaXN0LFxuICBnZXRIaXRsQW5hbHl0aWNzQWdlbnRUeXBlLFxuICBub3JtYWxpemVIaXRsVG9vbE5hbWUsXG4gIHRyYWNrTWFudWFsSGl0bEV2ZW50cyxcbn0gZnJvbSAnLi4vLi4vdXRpbHMvaGl0bEFuYWx5dGljcydcbmltcG9ydCB7IHR5cGUgSGl0bEV4ZWN1dGlvbkNvbnRleHQgfSBmcm9tICcuLi8uLi91dGlscy9zdHJlYW1BY3Rpdml0eU1lc3NhZ2VzJ1xuaW1wb3J0IHsgc2Vzc2lvblN0cmVhbWluZ1RleHQgfSBmcm9tICcuLi8uLi9zdG9yZS9zZXNzaW9ucy9zZXNzaW9uU3RyZWFtaW5nVGV4dCdcbmltcG9ydCB7IHVzZVNlc3Npb25zU3RvcmUgfSBmcm9tICcuLi8uLi9zdG9yZS9zZXNzaW9ucy91c2VTZXNzaW9uc1N0b3JlJ1xuaW1wb3J0IHsgdXNlU2Vzc2lvbk1ldGEgfSBmcm9tICcuLi8uLi9zdG9yZS9zZXNzaW9ucy91c2VTZXNzaW9uTWV0YSdcbmltcG9ydCB7IHNlc3Npb25TdHJlYW1NYW5hZ2VyLCBNQVhfQ09OQ1VSUkVOVF9TVFJFQU1TIH0gZnJvbSAnLi4vLi4vc3RvcmUvc2Vzc2lvbnMvc2Vzc2lvblN0cmVhbU1hbmFnZXInXG5pbXBvcnQgeyBhY3RpdmVWaWV3IH0gZnJvbSAnLi4vLi4vc3RvcmUvc2Vzc2lvbnMvYWN0aXZlVmlldydcbmltcG9ydCB7IG5vdGlmeVNlc3Npb25GaW5pc2hlZEluQmFja2dyb3VuZCB9IGZyb20gJy4uLy4uL3N0b3JlL3Nlc3Npb25zL3Nlc3Npb25Ob3RpZmljYXRpb25zJ1xuaW1wb3J0IHsgYnVpbGRTaWRlYmFyU2Vzc2lvblRpdGxlLCBlbnN1cmVTZXNzaW9uSW5TaWRlYmFyIH0gZnJvbSAnLi4vLi4vc3RvcmUvY2hhdHNTaWRlYmFyT3B0aW1pc3RpYydcbmltcG9ydCB7IGlzU3RyZWFtaW5nUGxhY2Vob2xkZXJNZXNzYWdlSWQsIHN0cmVhbWluZ1BsYWNlaG9sZGVyTWVzc2FnZUlkIH0gZnJvbSAnLi4vLi4vdXRpbHMvc3RyZWFtQWN0aXZpdHlNZXNzYWdlcydcbmltcG9ydCB7IGZpbmRVc2VyTWVzc2FnZUZvclJldHJ5LCBtZXNzYWdlc1dpdGhvdXRSZXRyaWVkVHVybiB9IGZyb20gJy4uLy4uL3V0aWxzL3JldHJ5Q29tcGxldGlvbidcbmltcG9ydCB0eXBlIHsgU3RyZWFtQ29udGV4dCB9IGZyb20gJy4uL3VzZU9yY2hlc3RyYXRvclN0cmVhbS91c2VPcmNoZXN0cmF0b3JTdHJlYW0uaW50ZXJmYWNlJ1xuaW1wb3J0IHsgZ2V0Q2hhdHNTdG9yZVN0YXRlLCB1c2VDaGF0c1N0b3JlIH0gZnJvbSAnLi4vLi4vc3RvcmUvdXNlQ2hhdHNTdG9yZSdcbmltcG9ydCB7IHJlYXNvbmluZ1N0b3JlIH0gZnJvbSAnLi4vdXNlUmVhc29uaW5nVHJhY2UnXG5pbXBvcnQgeyBtYXBSZWFzb25pbmdUcmFjZSB9IGZyb20gJy4uLy4uL3V0aWxzL3JlYXNvbmluZ01hcHBlcnMnXG5pbXBvcnQgdHlwZSB7IFJlYXNvbmluZ1RyYWNlUGF5bG9hZCB9IGZyb20gJy4uLy4uL3R5cGVzL3JlYXNvbmluZydcblxuY29uc3QgdXNlU3RhYmxlQ2FsbGJhY2tzID0gKGF1dGhVc2VyOiBDT1JVc2VyKSA9PiB7XG4gIGNvbnN0IGN1cnJlbnRVc2VyID0gdXNlUmVmPENoYXRNZXNzYWdlVXNlcj4obWFwQXV0aFVzZXJUb0NoYXRNZXNzYWdlVXNlcihhdXRoVXNlcikpXG5cbiAgY29uc3QgbmV4dFVzZXIgPSBtYXBBdXRoVXNlclRvQ2hhdE1lc3NhZ2VVc2VyKGF1dGhVc2VyKVxuICBpZiAoXG4gICAgY3VycmVudFVzZXIuY3VycmVudC5pZCAhPT0gbmV4dFVzZXIuaWQgfHxcbiAgICBjdXJyZW50VXNlci5jdXJyZW50Lm5hbWUgIT09IG5leHRVc2VyLm5hbWUgfHxcbiAgICBjdXJyZW50VXNlci5jdXJyZW50LmF2YXRhciAhPT0gbmV4dFVzZXIuYXZhdGFyXG4gICkge1xuICAgIGN1cnJlbnRVc2VyLmN1cnJlbnQgPSBuZXh0VXNlclxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBjdXJyZW50VXNlcjogY3VycmVudFVzZXIuY3VycmVudCxcbiAgfVxufVxuXG5leHBvcnQgY29uc3QgdXNlQ2hhdE1hbmFnZXIgPSAoe1xuICBjaGF0SWQ6IGluaXRpYWxDaGF0SWQsXG4gIHVzZXJJbml0aWFsTWVzc2FnZSxcbiAgb25FcnJvcixcbiAgYWdlbnRzID0gW10sXG59OiBVc2VDaGF0TWFuYWdlclByb3BzKSA9PiB7XG4gIGNvbnN0IHsgdCB9ID0gdXNlVCgpXG4gIGNvbnN0IGF1dGhVc2VyID0gdXNlVXNlcigpXG4gIGNvbnN0IHtcbiAgICBwcm9qZWN0LFxuICAgIHNldFByb2plY3QsXG4gICAgY2xpZW50LFxuICAgIHNldENsaWVudCxcbiAgICB0YXNrLFxuICAgIHNldFRhc2ssXG4gICAgYWdlbnQsXG4gICAgaXNXZWJTZWFyY2hBY3RpdmUsXG4gICAgaXNEZWVwU2VhcmNoQWN0aXZlLFxuICAgIGlzQXV0b0FwcHJvdmVBY3RpdmUsXG4gICAgY2hpcHNQcm9qZWN0LFxuICAgIHNldENoaXBzUHJvamVjdCxcbiAgfSA9IHVzZUdsb2JhbENvbnRleHQoKVxuICBjb25zdCBldmVudCA9IHVzZUV2ZW50KClcbiAgY29uc3QgeyBmZXRjaFByb2plY3RzIH0gPSB1c2VQcm9qZWN0cygpXG4gIGNvbnN0IHsgY3VycmVudFVzZXIgfSA9IHVzZVN0YWJsZUNhbGxiYWNrcyhhdXRoVXNlcilcbiAgY29uc3QgeyBnZXRUYWJUYXNrRGVmYXVsdCB9ID0gdXNlVGFiVGFza0RlZmF1bHQoKVxuXG4gIGNvbnN0IGN1cnJlbnRNZXNzYWdlSWQgPSB1c2VSZWYodXVpZHY0KCkpXG4gIGNvbnN0IGN1cnJlbnRVc2VyUXVlc3Rpb24gPSB1c2VSZWY8c3RyaW5nIHwgbnVsbD4obnVsbClcbiAgY29uc3QgY3VycmVudENoYXRJZCA9IHVzZVJlZihpbml0aWFsQ2hhdElkIHx8IHV1aWR2NCgpKVxuICBjb25zdCBzZXRBY3RpdmVDaGF0SWQgPSB1c2VDaGF0c1N0b3JlKHN0YXRlID0+IHN0YXRlLnNldEFjdGl2ZUNoYXRJZClcbiAgY29uc3QgcmVwb3J0ZWRFdmVudCA9IHVzZVJlZihmYWxzZSlcbiAgY29uc3QgbWVzc2FnZXNSZWYgPSB1c2VSZWY8Q2hhdE1lc3NhZ2VbXT4oW10pXG4gIC8qKlxuICAgKiBHdWFyZGEgaW5mbyBkZWwgw7psdGltbyBhcHByb3ZhbCBtYW51YWwgKGN1YW5kbyBlbCB1c3VhcmlvIHRpcGVhIFwic2lcIi9cIm5vXCIgZW4gbHVnYXJcbiAgICogZGUgY2xpY2tlYXIgZWwgYm90w7NuKS4gRW4gbWFudWFsIGFwcHJvdmFsLCBgaGFuZGxlQXBwcm92YWxSZXF1aXJlZGAgcmV0b3JuYSBlYXJseVxuICAgKiBzaW4gYWdyZWdhciB1biBtZW5zYWplIGNvbiBgYXBwcm92YWxgLCBhc8OtIHF1ZSBsYSBsw7NnaWNhIGRlIHJlZmV0Y2ggZW4gYG9uU3RyZWFtRmluaXNoYFxuICAgKiBubyBsbyBkZXRlY3RhIHbDrWEgYHByZXZpb3VzTWVzc2FnZS5hcHByb3ZhbGAuIExvIGd1YXJkYW1vcyBhY8OhIHBhcmEgY29uc3VtaXJsbyBkZXNwdcOpcy5cbiAgICovXG4gIGNvbnN0IGxhc3RNYW51YWxBcHByb3ZhbFJlZiA9IHVzZVJlZjx7XG4gICAgdG9vbE5hbWU6IHN0cmluZ1xuICAgIHRvb2xBcmdzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IG51bGxcbiAgfSB8IG51bGw+KG51bGwpXG4gIC8qKiBFdml0YSBkdXBsaWNhciBBSV9DSEFUX0hJVEwgLyBBSV9DSEFUX0hJVExfT1BUSU9OIGVuIHByZWFwcm9iYWNpb25lcyAobWFudWFsIG8gYXV0bykgcG9yIGxvdGUuICovXG4gIGNvbnN0IHRyYWNrZWRNYW51YWxIaXRsS2V5c1JlZiA9IHVzZVJlZjxTZXQ8c3RyaW5nPj4obmV3IFNldCgpKVxuICAvKiogQ29udGV4dG8gZGVsIG1lbnNhamUgZGUgYXByb2JhY2nDs24gcHJldmlvIGFsIGVqZWN1dGFyIGNvbnRpbnVlLXRocmVhZC4gKi9cbiAgY29uc3QgaGl0bEV4ZWN1dGlvbkNvbnRleHRSZWYgPSB1c2VSZWY8SGl0bEV4ZWN1dGlvbkNvbnRleHQgfCBudWxsPihudWxsKVxuICAvKiogTWVuc2FqZXMgYSByZXN0YXVyYXIgc2kgYHJldHJ5X2NvbXBsZXRpb25gIGZhbGxhIGFudGVzIGRlIHBlcnNpc3RpciBlbCByZWVtcGxhem8uICovXG4gIGNvbnN0IHJldHJ5U25hcHNob3RSZWYgPSB1c2VSZWY8Q2hhdE1lc3NhZ2VbXSB8IG51bGw+KG51bGwpXG4gIGNvbnN0IGlzUHJvY2Vzc2luZ1JlZiA9IHVzZVJlZihmYWxzZSlcbiAgY29uc3QgZmlyc3RUaW1lUmVmID0gdXNlUmVmKGZhbHNlKVxuICAvKiogSWQgZGVsIHBsYWNlaG9sZGVyIGRlbCBtZW5zYWplIGVuIHN0cmVhbWluZyBhY3Rpdm8gKHNpIGhheSkuICovXG4gIGNvbnN0IHN0cmVhbWluZ1BsYWNlaG9sZGVySWRSZWYgPSB1c2VSZWY8c3RyaW5nIHwgbnVsbD4obnVsbClcbiAgLyoqXG4gICAqIENoYXQgYWwgcXVlIHBlcnRlbmVjZSBlbCBzdHJlYW0gYWN0dWFsbWVudGUgYWN0aXZvLiBTaSBjYW1iaWEgZWwgY2hhdFxuICAgKiBtaWVudHJhcyB1biBzdHJlYW0gZXN0w6EgZW4gdnVlbG8sIGRlc2NhcnRhbW9zIGxvcyB0b2tlbnMgcmVzaWR1YWxlc1xuICAgKiBxdWUgcHVlZGFuIGxsZWdhciBhbnRlcyBkZSBxdWUgZWwgYWJvcnQgc2UgY29tcGxldGUuXG4gICAqL1xuICBjb25zdCBhY3RpdmVTdHJlYW1DaGF0SWRSZWYgPSB1c2VSZWY8c3RyaW5nIHwgbnVsbD4obnVsbClcbiAgY29uc3QgY2xlYXJTdHJlYW1VaVJlZiA9IHVzZVJlZjwoKSA9PiB2b2lkPigoKSA9PiB1bmRlZmluZWQpXG4gIGNvbnN0IFthY3RpdmVMb2FkaW5ncywgc2V0QWN0aXZlTG9hZGluZ3NdID0gdXNlU3RhdGU8UmVjb3JkPHN0cmluZywgc3RyaW5nPj4oe30pXG4gIC8qKlxuICAgKiBTZXNpw7NuIGFjdHVhbG1lbnRlIHZpc2libGUuIFNlIG1hbnRpZW5lIGVuIHN0YXRlIChubyBzb2xvIGVuIHJlZikgcGFyYSBxdWVcbiAgICogZWwgbW90b3IgZGUgc3RyZWFtaW5nIHB1ZWRhIGxlZXIgcmVhY3RpdmFtZW50ZSBsb3MgZmxhZ3MgZGUgRVNUQSBzZXNpw7NuXG4gICAqIGRlc2RlIGVsIHN0b3JlLCBtaWVudHJhcyBvdHJhcyBzaWd1ZW4gZ2VuZXJhbmRvIGVuIGJhY2tncm91bmQuXG4gICAqL1xuICBjb25zdCBbYWN0aXZlU2Vzc2lvbklkLCBzZXRBY3RpdmVTZXNzaW9uSWRdID0gdXNlU3RhdGU8c3RyaW5nPihjdXJyZW50Q2hhdElkLmN1cnJlbnQpXG4gIC8qKiBUcnVlIG1pZW50cmFzIGVzdGEgaW5zdGFuY2lhIGVzdMOpIG1vbnRhZGEgKGV2aXRhIHNldFN0YXRlIHRyYXMgZGVzbW9udGFyKS4gKi9cbiAgY29uc3QgaXNNb3VudGVkUmVmID0gdXNlUmVmKHRydWUpXG4gIC8qKiBFdml0YSByZWNvbmNpbGlhciBkb3MgdmVjZXMgZWwgbWlzbW8gZXN0YWRvIHRlcm1pbmFsIGRlIHVuYSBzZXNpw7NuLiAqL1xuICBjb25zdCBsYXN0SGFuZGxlZFRlcm1pbmFsUmVmID0gdXNlUmVmPHN0cmluZyB8IG51bGw+KG51bGwpXG5cbiAgY29uc3QgaXNXZWJTZWFyY2hBY3RpdmVSZWYgPSB1c2VSZWYoaXNXZWJTZWFyY2hBY3RpdmUpXG4gIGNvbnN0IGlzRGVlcFNlYXJjaEFjdGl2ZVJlZiA9IHVzZVJlZihpc0RlZXBTZWFyY2hBY3RpdmUpXG4gIGNvbnN0IGlzQXV0b0FwcHJvdmVBY3RpdmVSZWYgPSB1c2VSZWYoaXNBdXRvQXBwcm92ZUFjdGl2ZSlcbiAgLyoqIEV2aXRhIGNsb3N1cmVzIG9ic29sZXRhcyBjdWFuZG8gZWwgZm9vdGVyIGNvbnNlcnZhIHNlbmRNZXNzYWdlIGVudHJlIHJlbmRlcnMuICovXG4gIGNvbnN0IGNvbnRleHRSZWYgPSB1c2VSZWYoeyBjaGlwc1Byb2plY3QsIHByb2plY3QsIGNsaWVudCwgdGFzayB9KVxuICBjb250ZXh0UmVmLmN1cnJlbnQgPSB7IGNoaXBzUHJvamVjdCwgcHJvamVjdCwgY2xpZW50LCB0YXNrIH1cblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlzV2ViU2VhcmNoQWN0aXZlUmVmLmN1cnJlbnQgPSBpc1dlYlNlYXJjaEFjdGl2ZVxuICAgIGlzRGVlcFNlYXJjaEFjdGl2ZVJlZi5jdXJyZW50ID0gaXNEZWVwU2VhcmNoQWN0aXZlXG4gICAgaXNBdXRvQXBwcm92ZUFjdGl2ZVJlZi5jdXJyZW50ID0gaXNBdXRvQXBwcm92ZUFjdGl2ZVxuICB9LCBbaXNXZWJTZWFyY2hBY3RpdmUsIGlzRGVlcFNlYXJjaEFjdGl2ZSwgaXNBdXRvQXBwcm92ZUFjdGl2ZV0pXG5cbiAgY29uc3Qge1xuICAgIGxvYWRpbmdNZXNzYWdlcyxcbiAgICBtZXNzYWdlcyxcbiAgICBpc0xvYWRpbmdNb3JlTWVzc2FnZXMsXG4gICAgbG9hZE1lc3NhZ2VzLFxuICAgIGFkZE1lc3NhZ2UsXG4gICAgcmVtb3ZlTWVzc2FnZSxcbiAgICByZXBsYWNlTWVzc2FnZXMsXG4gICAgaGFuZGxlU2Nyb2xsLFxuICB9ID0gdXNlQ2hhdE1lc3NhZ2VzKHtcbiAgICBjaGF0SWQ6IGluaXRpYWxDaGF0SWQgfHwgY3VycmVudENoYXRJZC5jdXJyZW50LFxuICAgIGN1cnJlbnRVc2VyLFxuICAgIHVzZXJJbml0aWFsTWVzc2FnZSxcbiAgICBvbkVycm9yLFxuICAgIGFnZW50cyxcbiAgfSlcblxuICBtZXNzYWdlc1JlZi5jdXJyZW50ID0gbWVzc2FnZXNcblxuICAvKipcbiAgICogRXNjcmliZSB1biBtZW5zYWplIGVuIGVsIHN0b3JlIHBvci1zZXNpw7NuIHksIHNpIGxhIHNlc2nDs24gZXMgbGEgYWN0aXZhLFxuICAgKiB0YW1iacOpbiBlbiBsYSB2aXN0YSBsb2NhbC4gUGVybWl0ZSBxdWUgc2VzaW9uZXMgZW4gYmFja2dyb3VuZCBhY3VtdWxlbiBzdVxuICAgKiByZXN1bHRhZG8gc2luIHBpc2FyIGVsIGNoYXQgcXVlIGVsIHVzdWFyaW8gZXN0w6EgbWlyYW5kby5cbiAgICovXG4gIGNvbnN0IGNvbW1pdFRvU2Vzc2lvbiA9IHVzZUNhbGxiYWNrKFxuICAgIChzZXNzaW9uSWQ6IHN0cmluZywgbWVzc2FnZTogQ2hhdE1lc3NhZ2UpID0+IHtcbiAgICAgIHVzZVNlc3Npb25zU3RvcmUuZ2V0U3RhdGUoKS5hZGRNZXNzYWdlKHNlc3Npb25JZCwgbWVzc2FnZSlcbiAgICAgIGlmIChpc01vdW50ZWRSZWYuY3VycmVudCAmJiBhY3RpdmVWaWV3LmlzKHNlc3Npb25JZCkpIHtcbiAgICAgICAgYWRkTWVzc2FnZShtZXNzYWdlKVxuICAgICAgfVxuICAgIH0sXG4gICAgW2FkZE1lc3NhZ2VdXG4gIClcblxuICBjb25zdCBkcm9wRnJvbVNlc3Npb24gPSB1c2VDYWxsYmFjayhcbiAgICAoc2Vzc2lvbklkOiBzdHJpbmcsIG1lc3NhZ2VJZDogc3RyaW5nKSA9PiB7XG4gICAgICB1c2VTZXNzaW9uc1N0b3JlLmdldFN0YXRlKCkucmVtb3ZlTWVzc2FnZShzZXNzaW9uSWQsIG1lc3NhZ2VJZClcbiAgICAgIGlmIChpc01vdW50ZWRSZWYuY3VycmVudCAmJiBhY3RpdmVWaWV3LmlzKHNlc3Npb25JZCkpIHtcbiAgICAgICAgcmVtb3ZlTWVzc2FnZShtZXNzYWdlSWQpXG4gICAgICB9XG4gICAgfSxcbiAgICBbcmVtb3ZlTWVzc2FnZV1cbiAgKVxuXG4gIC8qKiBMaW1waWEgZWwgdGFpbCBlbiB2dWVsbyBkZSB1bmEgc2VzacOzbiAodHJhcyB0ZXJtaW5hcjsgZWwgYmFja2VuZCBwYXNhIGEgc2VyIGZ1ZW50ZSkuICovXG4gIGNvbnN0IGNsZWFyU2Vzc2lvblRhaWwgPSB1c2VDYWxsYmFjaygoc2Vzc2lvbklkOiBzdHJpbmcpID0+IHtcbiAgICB1c2VTZXNzaW9uc1N0b3JlLmdldFN0YXRlKCkuc2V0TWVzc2FnZXMoc2Vzc2lvbklkLCBbXSlcbiAgfSwgW10pXG5cbiAgLy8gUmVnaXN0cmFyIGxhIHNlc2nDs24gdmlzaWJsZSBlbiBlbCB0cmFja2VyIGdsb2JhbCBwYXJhIHF1ZSBsb3MgY2FsbGJhY2tzIGRlbFxuICAvLyBtb3RvciAocXVlIHB1ZWRlbiBwZXJ0ZW5lY2VyIGEgdW5hIGluc3RhbmNpYSB5YSBkZXNtb250YWRhKSBzZXBhbiBjdcOhbCBlcyBsYVxuICAvLyBzZXNpw7NuIGFjdGl2YSBhY3R1YWwuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgYWN0aXZlVmlldy5zZXQoYWN0aXZlU2Vzc2lvbklkKVxuICB9LCBbYWN0aXZlU2Vzc2lvbklkXSlcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlzTW91bnRlZFJlZi5jdXJyZW50ID0gdHJ1ZVxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBpc01vdW50ZWRSZWYuY3VycmVudCA9IGZhbHNlXG4gICAgICBpZiAoYWN0aXZlVmlldy5pcyhjdXJyZW50Q2hhdElkLmN1cnJlbnQpKSB7XG4gICAgICAgIGFjdGl2ZVZpZXcuc2V0KG51bGwpXG4gICAgICB9XG4gICAgfVxuICB9LCBbXSlcblxuICAvLyBSZWNvbmNpbGlhY2nDs246IHNpIGxhIHNlc2nDs24gYWN0aXZhIHRlcm1pbmEgKGNvbXBsZXRlL2Vycm9yKSBwZXJvIGVsIHN0b3JlXG4gIC8vIHBvci1zZXNpw7NuIHRvZGF2w61hIHRpZW5lIHVuIHBsYWNlaG9sZGVyIGRlIHN0cmVhbWluZywgcmVmcmVzY2Ftb3MgZGVzZGVcbiAgLy8gZWwgYmFja2VuZC4gVXNhbW9zIGVsIHN0b3JlIChubyBtZXNzYWdlc1JlZik6IGhhbmRsZVN0cmVhbUZpbmlzaCBsaW1waWEgZWxcbiAgLy8gcGxhY2Vob2xkZXIgYWjDrSBkZSBmb3JtYSBzw61uY3JvbmE7IG1lc3NhZ2VzUmVmIHB1ZWRlIHF1ZWRhciBzdGFsZSB1biByZW5kZXJcbiAgLy8gcG9ycXVlIHNldFN0YXR1cyAoWnVzdGFuZCkgeSByZW1vdmVNZXNzYWdlIChSZWFjdCkgbm8gYmF0Y2hhbiBqdW50b3MuXG4gIC8vIGBjYW5jZWxsZWRgIHF1ZWRhIGFmdWVyYTogZWwgc3RvcCB5YSByZWNvbmNpbGlhIGxvY2FsIChwYXJjaWFsICsgYnVyYnVqYSBkZVxuICAvLyBjYW5jZWxhZG8pIHkgcmVjYXJnYXIgYWPDoSBtb3N0cmFiYSBsYSBwYW50YWxsYSBkZSBjYXJnYSBkZWwgY2hhdCBlbnRlcm8uXG4gIGNvbnN0IGFjdGl2ZVNlc3Npb25NZXRhID0gdXNlU2Vzc2lvbk1ldGEoYWN0aXZlU2Vzc2lvbklkKVxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IHN0YXR1cyA9IGFjdGl2ZVNlc3Npb25NZXRhPy5zdGF0dXNcbiAgICBpZiAoIXN0YXR1cykgcmV0dXJuXG4gICAgY29uc3Qga2V5ID0gYnVpbGRUZXJtaW5hbFNlc3Npb25SZWNvbmNpbGlhdGlvbktleShhY3RpdmVTZXNzaW9uSWQsIHN0YXR1cywgYWN0aXZlU2Vzc2lvbk1ldGE/LmZpbmlzaGVkQXQpXG4gICAgaWYgKGxhc3RIYW5kbGVkVGVybWluYWxSZWYuY3VycmVudCA9PT0ga2V5KSByZXR1cm5cbiAgICBsYXN0SGFuZGxlZFRlcm1pbmFsUmVmLmN1cnJlbnQgPSBrZXlcblxuICAgIGNvbnN0IHRhaWwgPSB1c2VTZXNzaW9uc1N0b3JlLmdldFN0YXRlKCkuZ2V0TWVzc2FnZXMoYWN0aXZlU2Vzc2lvbklkKVxuICAgIGlmIChzaG91bGRGb3JjZVJlbG9hZE1lc3NhZ2VzT25UZXJtaW5hbFNlc3Npb24oc3RhdHVzLCB0YWlsLCBpc1N0cmVhbWluZ1BsYWNlaG9sZGVyTWVzc2FnZUlkKSkge1xuICAgICAgbG9hZE1lc3NhZ2VzKHsgZm9yY2U6IHRydWUgfSlcbiAgICB9XG4gIH0sIFthY3RpdmVTZXNzaW9uTWV0YT8uc3RhdHVzLCBhY3RpdmVTZXNzaW9uTWV0YT8uZmluaXNoZWRBdCwgYWN0aXZlU2Vzc2lvbklkLCBsb2FkTWVzc2FnZXNdKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgY3VzdG9tRXZlbnQgPSBuZXcgQ3VzdG9tRXZlbnQoJ2NoYXQtbG9hZGluZy1tZXNzYWdlcy1jaGFuZ2VkJywge1xuICAgICAgZGV0YWlsOiB7IGxvYWRpbmdNZXNzYWdlcyB9LFxuICAgIH0pXG4gICAgZG9jdW1lbnQuZGlzcGF0Y2hFdmVudChjdXN0b21FdmVudClcbiAgfSwgW2xvYWRpbmdNZXNzYWdlc10pXG5cbiAgY29uc3QgcHJldmlvdXNJbml0aWFsQ2hhdElkUmVmID0gdXNlUmVmPHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQ+KGluaXRpYWxDaGF0SWQpXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBwcmV2aW91c0luaXRpYWxDaGF0SWQgPSBwcmV2aW91c0luaXRpYWxDaGF0SWRSZWYuY3VycmVudFxuICAgIHByZXZpb3VzSW5pdGlhbENoYXRJZFJlZi5jdXJyZW50ID0gaW5pdGlhbENoYXRJZFxuXG4gICAgLy8gQ2hhdCBudWV2byAvIGhvbWU6IGluaXRpYWxDaGF0SWQgcGFzYSBhIG51bGwsIGFzw60gcXVlIGxhIHJhbWEgZGUgYWJham8gbm9cbiAgICAvLyBhcGxpY2EuIEhheSBxdWUgcm90YXIgYSB1bmEgc2VzacOzbiBudWV2YSBpZ3VhbDogc2kgc2VndWltb3MgYXB1bnRhbmRvIGEgbGFcbiAgICAvLyBhbnRlcmlvciwgYGFjdGl2ZVZpZXdgIGxhIHNpZ3VlIG1hcmNhbmRvIGNvbW8gYWN0aXZhIHkgY3VhbmRvIHRlcm1pbmEgbm8gc2VcbiAgICAvLyBub3RpZmljYSAoeSBzdSByZXNwdWVzdGEgc2UgY29tbWl0ZWEgc29icmUgbGEgdmlzdGEgbnVldmEpLiBFbCDDoXJib2wgbm9cbiAgICAvLyByZW1vbnRhIGVuIGVzdGUgZmx1am8gKG5vIGhheSBga2V5YCkgeSBuYWRpZSBjb25zdW1lIGByZXNldENoYXRgLlxuICAgIGlmIChzaG91bGRSb3RhdGVTZXNzaW9uRm9yTmV3SG9tZShpbml0aWFsQ2hhdElkLCBwcmV2aW91c0luaXRpYWxDaGF0SWQpKSB7XG4gICAgICBjdXJyZW50Q2hhdElkLmN1cnJlbnQgPSB1dWlkdjQoKVxuICAgICAgc2V0QWN0aXZlU2Vzc2lvbklkKGN1cnJlbnRDaGF0SWQuY3VycmVudClcbiAgICAgIGN1cnJlbnRNZXNzYWdlSWQuY3VycmVudCA9IHV1aWR2NCgpXG4gICAgICBjdXJyZW50VXNlclF1ZXN0aW9uLmN1cnJlbnQgPSBudWxsXG4gICAgICByZXBvcnRlZEV2ZW50LmN1cnJlbnQgPSBmYWxzZVxuICAgICAgaXNQcm9jZXNzaW5nUmVmLmN1cnJlbnQgPSBmYWxzZVxuICAgICAgc3RyZWFtaW5nUGxhY2Vob2xkZXJJZFJlZi5jdXJyZW50ID0gbnVsbFxuICAgICAgYWN0aXZlU3RyZWFtQ2hhdElkUmVmLmN1cnJlbnQgPSBudWxsXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAoc2hvdWxkU3dpdGNoVG9Jbml0aWFsQ2hhdFNlc3Npb24oaW5pdGlhbENoYXRJZCwgY3VycmVudENoYXRJZC5jdXJyZW50KSAmJiBpbml0aWFsQ2hhdElkKSB7XG4gICAgICAvLyBOTyBhYm9ydGFtb3MgZWwgc3RyZWFtIGFudGVyaW9yOiBwdWVkZSBzZWd1aXIgZ2VuZXJhbmRvIGVuIGJhY2tncm91bmQuXG4gICAgICAvLyBTb2xvIGNhbWJpYW1vcyBkZSBzZXNpw7NuIGFjdGl2YTsgZWwgbW90b3IgcnV0ZWEgY2FkYSBzdHJlYW0gcG9yIHN1XG4gICAgICAvLyBzZXNzaW9uSWQsIGFzw60gcXVlIGxvcyB0b2tlbnMgZGUgbGEgc2VzacOzbiBwcmV2aWEgc2lndWVuIGFwbGljw6FuZG9zZSBhXG4gICAgICAvLyBFU0Egc2VzacOzbiAoc3RvcmUpLCBubyBhIGxhIG51ZXZhLlxuXG4gICAgICAvLyBMaW1waWFyIGNvbnRleHRvIGdsb2JhbCBhbCBjYW1iaWFyIGRlIGNvbnZlcnNhY2nDs25cbiAgICAgIHNldFByb2plY3QobnVsbClcbiAgICAgIHNldENsaWVudD8uKG51bGwpXG4gICAgICBzZXRDaGlwc1Byb2plY3QobnVsbClcbiAgICAgIHNldFRhc2sobnVsbClcblxuICAgICAgY3VycmVudENoYXRJZC5jdXJyZW50ID0gaW5pdGlhbENoYXRJZFxuICAgICAgc2V0QWN0aXZlU2Vzc2lvbklkKGluaXRpYWxDaGF0SWQpXG4gICAgICBjdXJyZW50TWVzc2FnZUlkLmN1cnJlbnQgPSB1dWlkdjQoKVxuICAgICAgY3VycmVudFVzZXJRdWVzdGlvbi5jdXJyZW50ID0gbnVsbFxuICAgICAgcmVwb3J0ZWRFdmVudC5jdXJyZW50ID0gZmFsc2VcbiAgICAgIC8vIGlzUHJvY2Vzc2luZ1JlZiByZWZsZWphIHNpIGxhIHNlc2nDs24gQUNUSVZBIGVzdMOhIG9jdXBhZGEuIFNpIGxhIHNlc2nDs25cbiAgICAgIC8vIGEgbGEgcXVlIGVudHJhbW9zIHNpZ3VlIGdlbmVyYW5kbyBlbiBiYWNrZ3JvdW5kLCBxdWVkYSBibG9xdWVhZGE7IHNpIG5vLFxuICAgICAgLy8gc2UgaGFiaWxpdGEgZWwgZW52w61vIGF1bnF1ZSBvdHJhcyBzZXNpb25lcyBzaWdhbiBnZW5lcmFuZG8uXG4gICAgICBpc1Byb2Nlc3NpbmdSZWYuY3VycmVudCA9IHNlc3Npb25TdHJlYW1NYW5hZ2VyLmlzQWN0aXZlKGluaXRpYWxDaGF0SWQpXG4gICAgICBzdHJlYW1pbmdQbGFjZWhvbGRlcklkUmVmLmN1cnJlbnQgPSBudWxsXG4gICAgICBhY3RpdmVTdHJlYW1DaGF0SWRSZWYuY3VycmVudCA9IG51bGxcblxuICAgICAgLy8gbG9hZE1lc3NhZ2VzIGxvIGRpc3BhcmEgdXNlQ2hhdE1lc3NhZ2VzIGFsIGNhbWJpYXIgY2hhdElkIChjb24gY2FjaGUgZW4gbWVtb3JpYSkuXG4gICAgfVxuICB9LCBbaW5pdGlhbENoYXRJZCwgcHJvamVjdCwgc2V0UHJvamVjdCwgc2V0Q2xpZW50LCBzZXRDaGlwc1Byb2plY3QsIHNldFRhc2tdKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgc2V0QWN0aXZlQ2hhdElkKGluaXRpYWxDaGF0SWQgfHwgbnVsbClcbiAgfSwgW2luaXRpYWxDaGF0SWQsIHNldEFjdGl2ZUNoYXRJZF0pXG5cbiAgY29uc3QgaGFuZGxlU3RyZWFtRXJyb3IgPSB1c2VDYWxsYmFjayhcbiAgICAoY3R4OiBTdHJlYW1Db250ZXh0LCBlcnJvck1lc3NhZ2U/OiBzdHJpbmcsIGVycm9yUmF3TWVzc2FnZT86IHN0cmluZykgPT4ge1xuICAgICAgY29uc3QgeyBzZXNzaW9uSWQsIG1lc3NhZ2VJZCwgcGxhY2Vob2xkZXJJZCB9ID0gY3R4XG4gICAgICBjb25zdCBpc0FjdGl2ZSA9IGFjdGl2ZVZpZXcuaXMoc2Vzc2lvbklkKVxuXG4gICAgICBzZXNzaW9uU3RyZWFtaW5nVGV4dC5jbGVhcihzZXNzaW9uSWQpXG4gICAgICBkcm9wRnJvbVNlc3Npb24oc2Vzc2lvbklkLCBwbGFjZWhvbGRlcklkKVxuXG4gICAgICBjb25zdCByZXRyeVNuYXBzaG90ID0gcmV0cnlTbmFwc2hvdFJlZi5jdXJyZW50XG4gICAgICBpZiAocmVzb2x2ZVN0cmVhbUVycm9ySGFuZGxpbmdNb2RlKEJvb2xlYW4ocmV0cnlTbmFwc2hvdCkpID09PSAncmV0cnktcmVzdG9yZScgJiYgcmV0cnlTbmFwc2hvdCkge1xuICAgICAgICByZXRyeVNuYXBzaG90UmVmLmN1cnJlbnQgPSBudWxsXG4gICAgICAgIG1lc3NhZ2VzUmVmLmN1cnJlbnQgPSByZXRyeVNuYXBzaG90XG4gICAgICAgIHJlcGxhY2VNZXNzYWdlcyhyZXRyeVNuYXBzaG90KVxuICAgICAgICBpZiAoaXNBY3RpdmUpIHtcbiAgICAgICAgICBjbGVhclN0cmVhbVVpUmVmLmN1cnJlbnQoKVxuICAgICAgICAgIHN0cmVhbWluZ1BsYWNlaG9sZGVySWRSZWYuY3VycmVudCA9IG51bGxcbiAgICAgICAgICBhY3RpdmVTdHJlYW1DaGF0SWRSZWYuY3VycmVudCA9IG51bGxcbiAgICAgICAgICBpc1Byb2Nlc3NpbmdSZWYuY3VycmVudCA9IGZhbHNlXG4gICAgICAgIH1cbiAgICAgICAgZG9jdW1lbnQuZGlzcGF0Y2hFdmVudChcbiAgICAgICAgICBuZXcgQ3VzdG9tRXZlbnQoJ3NuYWNrYmFyLWV2ZW50Jywge1xuICAgICAgICAgICAgZGV0YWlsOiB7IHNob3c6IHRydWUsIHNldmVyaXR5OiAnZXJyb3InLCBtZXNzYWdlOiB0KCdjaGF0LmVycm9yJykgfSxcbiAgICAgICAgICB9KVxuICAgICAgICApXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBpZiAoaXNBY3RpdmUpIHtcbiAgICAgICAgY2xlYXJTdHJlYW1VaVJlZi5jdXJyZW50KClcbiAgICAgICAgc3RyZWFtaW5nUGxhY2Vob2xkZXJJZFJlZi5jdXJyZW50ID0gbnVsbFxuICAgICAgICBhY3RpdmVTdHJlYW1DaGF0SWRSZWYuY3VycmVudCA9IG51bGxcbiAgICAgICAgaXNQcm9jZXNzaW5nUmVmLmN1cnJlbnQgPSBmYWxzZVxuICAgICAgfVxuXG4gICAgICBjb25zdCB7IG1lc3NhZ2VLZXksIHRva2Vuc1VzZWQsIHNob3dSZXRyeSB9ID0gcmVzb2x2ZVN0cmVhbUVycm9yTWVzc2FnZUtleShlcnJvck1lc3NhZ2UsIGVycm9yUmF3TWVzc2FnZSlcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSByZXNvbHZlU3RyZWFtRXJyb3JVc2VyTWVzc2FnZShtZXNzYWdlS2V5LCB0LCB0b2tlbnNVc2VkKVxuXG4gICAgICBjb21taXRUb1Nlc3Npb24oXG4gICAgICAgIHNlc3Npb25JZCxcbiAgICAgICAgYnVpbGRTdHJlYW1FcnJvckFzc2lzdGFudE1lc3NhZ2Uoe1xuICAgICAgICAgIG1lc3NhZ2VJZCxcbiAgICAgICAgICBtZXNzYWdlLFxuICAgICAgICAgIHNob3dSZXRyeSxcbiAgICAgICAgICByZXRyeUxhYmVsOiB0KCdjaGF0LnJldHJ5JyksXG4gICAgICAgIH0pXG4gICAgICApXG4gICAgICBjbGVhclNlc3Npb25UYWlsKHNlc3Npb25JZClcblxuICAgICAgaWYgKCFpc0FjdGl2ZSkge1xuICAgICAgICBnZXRDaGF0c1N0b3JlU3RhdGUoKS5tYXJrQ2hhdEFzVW5yZWFkKHNlc3Npb25JZClcbiAgICAgICAgbm90aWZ5U2Vzc2lvbkZpbmlzaGVkSW5CYWNrZ3JvdW5kKHNlc3Npb25JZCwgJ2Vycm9yJylcbiAgICAgIH1cbiAgICB9LFxuICAgIFtjb21taXRUb1Nlc3Npb24sIGRyb3BGcm9tU2Vzc2lvbiwgY2xlYXJTZXNzaW9uVGFpbCwgcmVwbGFjZU1lc3NhZ2VzLCB0XVxuICApXG5cbiAgY29uc3QgaGFuZGxlU3RyZWFtVXBkYXRlID0gdXNlQ2FsbGJhY2soXG4gICAgKGN0eDogU3RyZWFtQ29udGV4dCwgY29udGVudDogc3RyaW5nKSA9PiB7XG4gICAgICBjb25zdCB7IHNlc3Npb25JZCwgcGxhY2Vob2xkZXJJZCB9ID0gY3R4XG5cbiAgICAgIC8vIEFzZWd1cmFtb3MgZWwgcGxhY2Vob2xkZXIgdW5hIMO6bmljYSB2ZXogcG9yIHN0cmVhbSwgdGFudG8gZW4gZWwgc3RvcmVcbiAgICAgIC8vIGRlIGxhIHNlc2nDs24gY29tbyBlbiBsYSB2aXN0YSBzaSBlcyBsYSBhY3RpdmEuIEVsIHRleHRvIGVuIHZpdm8gdmlhamFcbiAgICAgIC8vIHBvciBzZXNzaW9uU3RyZWFtaW5nVGV4dCAoZXh0ZXJubyksIHNpbiByZS1yZW5kZXIgZGVsIMOhcmJvbCBjb21wbGV0by5cbiAgICAgIGNvbnN0IHBsYWNlaG9sZGVyRXhpc3RzID0gdXNlU2Vzc2lvbnNTdG9yZVxuICAgICAgICAuZ2V0U3RhdGUoKVxuICAgICAgICAuZ2V0TWVzc2FnZXMoc2Vzc2lvbklkKVxuICAgICAgICAuc29tZShtc2cgPT4gbXNnLmlkID09PSBwbGFjZWhvbGRlcklkKVxuXG4gICAgICBpZiAoIXBsYWNlaG9sZGVyRXhpc3RzKSB7XG4gICAgICAgIHNlc3Npb25TdHJlYW1pbmdUZXh0LnN0YXJ0KHNlc3Npb25JZCwgcGxhY2Vob2xkZXJJZClcbiAgICAgICAgY29tbWl0VG9TZXNzaW9uKHNlc3Npb25JZCwge1xuICAgICAgICAgIGlkOiBwbGFjZWhvbGRlcklkLFxuICAgICAgICAgIG1lc3NhZ2U6ICcnLFxuICAgICAgICAgIGRhdGU6IG5ldyBEYXRlKCksXG4gICAgICAgICAgdXNlcjogeyBpZDogJ2Fzc2lzdGFudCcsIG5hbWU6ICdBc3Npc3RhbnQnIH0sXG4gICAgICAgICAgcm9sZTogQ2hhdEhpc3RvcnlSb2xlLkFTU0lTVEFOVCxcbiAgICAgICAgfSlcbiAgICAgIH1cblxuICAgICAgaWYgKGFjdGl2ZVZpZXcuaXMoc2Vzc2lvbklkKSkge1xuICAgICAgICBzdHJlYW1pbmdQbGFjZWhvbGRlcklkUmVmLmN1cnJlbnQgPSBwbGFjZWhvbGRlcklkXG4gICAgICAgIGFjdGl2ZVN0cmVhbUNoYXRJZFJlZi5jdXJyZW50ID0gc2Vzc2lvbklkXG4gICAgICB9XG5cbiAgICAgIHNlc3Npb25TdHJlYW1pbmdUZXh0LnNldFRleHQoc2Vzc2lvbklkLCBwbGFjZWhvbGRlcklkLCBjb250ZW50KVxuICAgIH0sXG4gICAgW2NvbW1pdFRvU2Vzc2lvbl1cbiAgKVxuXG4gIGNvbnN0IGhhbmRsZVN0cmVhbUZpbmlzaCA9IHVzZUNhbGxiYWNrKFxuICAgIGFzeW5jIChcbiAgICAgIGN0eDogU3RyZWFtQ29udGV4dCxcbiAgICAgIGNvbnRlbnQ6IHN0cmluZyxcbiAgICAgIHNvdXJjZXM6IGFueSxcbiAgICAgIG1lbW9yeVNlc3Npb25JZDogc3RyaW5nLFxuICAgICAgcmF3QXR0YWNobWVudHM/OiBhbnlbXSB8IG51bGwsXG4gICAgICBzdWdnZXN0aW9ucz86IHN0cmluZ1tdIHwgbnVsbCxcbiAgICAgIGNvbXBsZXRlZEFnZW50SWQ/OiBzdHJpbmcgfCBudWxsLFxuICAgICAgLyoqIFBvc2ljaW9uYWw6IG1hc3RlciBubyBsbyBjb25zdW1lLCBwZXJvIGByZWFzb25pbmdgIHZpZW5lIGRlc3B1w6lzLiAqL1xuICAgICAgX3Jlc29sdmVkQ29udGV4dD86IGFueSxcbiAgICAgIHJlYXNvbmluZz86IFJlYXNvbmluZ1RyYWNlUGF5bG9hZCB8IG51bGxcbiAgICApID0+IHtcbiAgICAgIGNvbnN0IHsgc2Vzc2lvbklkLCBwbGFjZWhvbGRlcklkIH0gPSBjdHhcbiAgICAgIGNvbnN0IGlzQWN0aXZlID0gYWN0aXZlVmlldy5pcyhzZXNzaW9uSWQpXG4gICAgICByZXRyeVNuYXBzaG90UmVmLmN1cnJlbnQgPSBudWxsXG5cbiAgICAgIGNvbnN0IHRlbXBNZXNzYWdlSWQgPSBwbGFjZWhvbGRlcklkXG4gICAgICAvLyBFbCBwbGFjZWhvbGRlciBzYWxlIGRlbCBzdG9yZSBwb3Itc2VzacOzbiB5YTogZWwgZWZlY3RvIGRlIHJlY29uY2lsaWFjacOzblxuICAgICAgLy8gbG8gdXNhIHBhcmEgZGV0ZWN0YXIgcmVzcHVlc3RhcyBodcOpcmZhbmFzIHkgZGUgYWPDoSBhbCBjb21taXQgcHVlZGUgaGFiZXJcbiAgICAgIC8vIHVuIGF3YWl0LiBMYSB2aXN0YSBsb2NhbCBsbyBzdWVsdGEgbcOhcyBhYmFqbywganVudG8gYWwgY29tbWl0LlxuICAgICAgdXNlU2Vzc2lvbnNTdG9yZS5nZXRTdGF0ZSgpLnJlbW92ZU1lc3NhZ2Uoc2Vzc2lvbklkLCB0ZW1wTWVzc2FnZUlkKVxuICAgICAgY29uc3QgYXR0YWNobWVudHMgPSBub3JtYWxpemVBc3Npc3RhbnRBdHRhY2htZW50cyhyYXdBdHRhY2htZW50cylcblxuICAgICAgLy8gRWwgdHJhY2UgYWN1bXVsYWRvIGVuIHZpdm8gZXN0w6Ega2V5ZWQgcG9yIGVsIHBsYWNlaG9sZGVyOyBsbyBtb3ZlbW9zIGFsXG4gICAgICAvLyBpZCBkZWZpbml0aXZvIHBhcmEgcXVlIGVsIGJsb3F1ZSBkZSByYXpvbmFtaWVudG8gc29icmV2aXZhIGFsIHN3YXAuXG4gICAgICBjb25zdCBmaW5hbE1lc3NhZ2VJZCA9IHJlc29sdmVTdHJlYW1GaW5pc2hGaW5hbE1lc3NhZ2VJZChtZW1vcnlTZXNzaW9uSWQpXG4gICAgICAvLyBQcmVmZXJpciBlbCBzbmFwc2hvdCBlbiB2aXZvIChuYXJyYWNpw7NuIGFuY2xhZGEgYWwgaW5pY2lvKSBzb2JyZSBlbFxuICAgICAgLy8gYGNvbXBsZXRlYCBkZWwgYmFjaywgcXVlIHN1ZWxlIG1hbmRhciBlc2EgbmFycmFjacOzbiBhbCBmaW5hbC5cbiAgICAgIGNvbnN0IGZpbmFsVHJhY2UgPSByZWFzb25pbmdUcmFjZUZvcih0ZW1wTWVzc2FnZUlkKSA/PyBtYXBSZWFzb25pbmdUcmFjZShyZWFzb25pbmcpXG4gICAgICByZWFzb25pbmdTdG9yZS5yZW5hbWUodGVtcE1lc3NhZ2VJZCwgZmluYWxNZXNzYWdlSWQpXG5cbiAgICAgIC8vIFNlc2nDs24gZW4gYmFja2dyb3VuZDogY2VycmFtb3MgbGVhbi4gRWwgYmFja2VuZCB5YSBwZXJzaXN0acOzIGxhXG4gICAgICAvLyByZXNwdWVzdGEsIGFzw60gcXVlIGFsIHZvbHZlciBhIGxhIHNlc2nDs24gc2UgY2FyZ2EgZGVzZGUgYWjDrS4gQXZpc2Ftb3NcbiAgICAgIC8vIHF1ZSB0ZXJtaW7DsyAodW5yZWFkICsgZXZlbnRvIHBhcmEgdG9hc3Qvc29uaWRvKS5cbiAgICAgIGlmICghaXNBY3RpdmUpIHtcbiAgICAgICAgY29tbWl0VG9TZXNzaW9uKFxuICAgICAgICAgIHNlc3Npb25JZCxcbiAgICAgICAgICBidWlsZFN0cmVhbUZpbmlzaEFzc2lzdGFudE1lc3NhZ2Uoe1xuICAgICAgICAgICAgZmluYWxNZXNzYWdlSWQsXG4gICAgICAgICAgICBjb250ZW50LFxuICAgICAgICAgICAgc291cmNlcyxcbiAgICAgICAgICAgIGF0dGFjaG1lbnRzLFxuICAgICAgICAgICAgbWVtb3J5U2Vzc2lvbklkLFxuICAgICAgICAgICAgc3VnZ2VzdGlvbnMsXG4gICAgICAgICAgICByZWFzb25pbmc6IGZpbmFsVHJhY2UsXG4gICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgICAgICBjbGVhclNlc3Npb25UYWlsKHNlc3Npb25JZClcbiAgICAgICAgZ2V0Q2hhdHNTdG9yZVN0YXRlKCkubWFya0NoYXRBc1VucmVhZChzZXNzaW9uSWQpXG4gICAgICAgIG5vdGlmeVNlc3Npb25GaW5pc2hlZEluQmFja2dyb3VuZChzZXNzaW9uSWQsICdjb21wbGV0ZScpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBzdHJlYW1pbmdQbGFjZWhvbGRlcklkUmVmLmN1cnJlbnQgPSBudWxsXG4gICAgICBhY3RpdmVTdHJlYW1DaGF0SWRSZWYuY3VycmVudCA9IG51bGxcbiAgICAgIGhpdGxFeGVjdXRpb25Db250ZXh0UmVmLmN1cnJlbnQgPSBudWxsXG5cbiAgICAgIGNvbnN0IHRhc2tVcmxSZWdleCA9IG5ldyBSZWdFeHAoVEFTS19VUkxfUkVHRVhfUEFUVEVSTiwgJ2cnKVxuICAgICAgY29uc3QgbWFudWFsQXBwcm92YWxGb3JBbmFseXRpY3MgPSBsYXN0TWFudWFsQXBwcm92YWxSZWYuY3VycmVudFxuICAgICAgY29uc3QgbWFudWFsQXBwcm92YWwgPSBsYXN0TWFudWFsQXBwcm92YWxSZWYuY3VycmVudFxuICAgICAgbGFzdE1hbnVhbEFwcHJvdmFsUmVmLmN1cnJlbnQgPSBudWxsXG5cbiAgICAgIGNvbnN0IHtcbiAgICAgICAgY29udGVudFRvQWRkLFxuICAgICAgICBjcmVhdGVBZ2VudEZvbGxvd1VwLFxuICAgICAgICBlZGl0QWdlbnRGb2xsb3dVcCxcbiAgICAgICAgaG91cnNDaGFyZ2VUb29scyxcbiAgICAgICAgYWZmZWN0ZWRUYXNrSWRzLFxuICAgICAgICBtYW51YWxXYXNUYXNrRWRpdCxcbiAgICAgICAgbWFudWFsV2FzVGFza0RlbGV0ZSxcbiAgICAgICAgd2FzVGFza0VkaXQsXG4gICAgICAgIHdhc1Rhc2tEZWxldGUsXG4gICAgICAgIHdhc0NyZWF0ZUFnZW50QXBwcm92ZWQsXG4gICAgICAgIHBlbmRpbmdBY3Rpb25zLFxuICAgICAgfSA9IGF3YWl0IHJlc29sdmVBY3RpdmVTdHJlYW1GaW5pc2hQcm9jZXNzaW5nKHtcbiAgICAgICAgY29udGVudCxcbiAgICAgICAgbWVzc2FnZXM6IG1lc3NhZ2VzUmVmLmN1cnJlbnQsXG4gICAgICAgIHRlbXBNZXNzYWdlSWQsXG4gICAgICAgIHRhc2tVcmxSZWdleCxcbiAgICAgICAgcHJvamVjdElkOiBwcm9qZWN0Py5pZCxcbiAgICAgICAgcGF0aG5hbWU6IHdpbmRvdy5sb2NhdGlvbi5wYXRobmFtZSxcbiAgICAgICAgZ2V0VGFiVGFza0RlZmF1bHQsXG4gICAgICAgIG11bHRpQWdlbnRzQWNjZXNzOiBCb29sZWFuKHdpbmRvdy5NQUlBX0NIQVRfQUlfRkVBVFVSRV9BQ0NFU1NfTVVMVElfQUdFTlRTKSxcbiAgICAgICAgY29tcGxldGVkQWdlbnRJZCxcbiAgICAgICAgbWFudWFsQXBwcm92YWwsXG4gICAgICAgIGFwcGx5RGFzaGJvYXJkTXV0YXRpb246IChtdXRhdGlvbiwgdGFza0lkcykgPT4ge1xuICAgICAgICAgIGFwcGx5UHJvamVjdERhc2hib2FyZE11dGF0aW9uKG11dGF0aW9uLCB0YXNrSWRzLCB3aW5kb3cubmV3UHJvamVjdERhc2hib2FyZClcbiAgICAgICAgfSxcbiAgICAgIH0pXG5cbiAgICAgIHJlc29sdmVDcmVhdGVBZ2VudEhpdGxBbmFseXRpY3NFdmVudHMoe1xuICAgICAgICB3YXNDcmVhdGVBZ2VudEFwcHJvdmVkLFxuICAgICAgICBwZW5kaW5nQWN0aW9ucyxcbiAgICAgICAgbWFudWFsQXBwcm92YWxUb29sTmFtZTogbWFudWFsQXBwcm92YWxGb3JBbmFseXRpY3M/LnRvb2xOYW1lLFxuICAgICAgICBjb21wbGV0ZWRBZ2VudElkLFxuICAgICAgICBhZ2VudFR5cGU6IGdldEhpdGxBbmFseXRpY3NBZ2VudFR5cGUoYWdlbnQpLFxuICAgICAgICBub3JtYWxpemVUb29sTmFtZTogbm9ybWFsaXplSGl0bFRvb2xOYW1lLFxuICAgICAgICBidWlsZEFjdGlvblR5cGVMaXN0OiBidWlsZEhpdGxBY3Rpb25UeXBlTGlzdCxcbiAgICAgIH0pLmZvckVhY2gocGF5bG9hZCA9PiB7XG4gICAgICAgIGV2ZW50KEVWRU5UUy5haUNoYXRIaXRsT3B0aW9uLCBwYXlsb2FkKVxuICAgICAgfSlcblxuICAgICAgY29uc3Qgb3BlblRhc2tQYW5lbElkID0gd2luZG93LnRhc2tQYW5lbD8udGFza0lkXG5cbiAgICAgIGlmIChob3Vyc0NoYXJnZVRvb2xzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgZGlzcGF0Y2hNYWlhSG91cnNDaGFyZ2VkKHtcbiAgICAgICAgICBzb3VyY2U6ICdtYWlhJyxcbiAgICAgICAgICB0b29sczogaG91cnNDaGFyZ2VUb29scyxcbiAgICAgICAgICBzZXNzaW9uSWQ6IG1lbW9yeVNlc3Npb25JZCxcbiAgICAgICAgfSlcbiAgICAgIH1cblxuICAgICAgaWYgKFxuICAgICAgICBzaG91bGRSZWZldGNoT3BlblRhc2tQYW5lbChcbiAgICAgICAgICBvcGVuVGFza1BhbmVsSWQsXG4gICAgICAgICAgeyB3YXNUYXNrRWRpdCwgd2FzVGFza0RlbGV0ZSB9LFxuICAgICAgICAgIHsgbWFudWFsV2FzVGFza0VkaXQsIG1hbnVhbFdhc1Rhc2tEZWxldGUgfSxcbiAgICAgICAgICBhZmZlY3RlZFRhc2tJZHNcbiAgICAgICAgKVxuICAgICAgKSB7XG4gICAgICAgIHdpbmRvdy50YXNrUGFuZWw/LnJlZmV0Y2hUYXNrPy4oKVxuICAgICAgfVxuXG4gICAgICAvLyBTd2FwIHBsYWNlaG9sZGVyIOKGkiBtZW5zYWplIGZpbmFsLiBWYSBlbiBgZmx1c2hTeW5jYCBwb3JxdWUgZWwgbW90b3IgeWFcbiAgICAgIC8vIGRlasOzIGVuY29sYWRhcyBsYXMgZXNjcml0dXJhcyBkZSBmaW4gZGUgc3RyZWFtIChpc1dyaXRpbmcsIGFjdGl2aXR5LFxuICAgICAgLy8gc3RhdHVzKSwgeSBlc2FzIHZpYWphbiBlbiBTeW5jTGFuZSBwb3Igc2VyIGRlIHVuIHN0b3JlIGV4dGVybm8gbWllbnRyYXNcbiAgICAgIC8vIHF1ZSBlc3RvcyBzZXRTdGF0ZSB2aWFqYW4gZW4gRGVmYXVsdExhbmUuIFNpbiBmb3J6YXJsbywgUmVhY3QgcGludGFcbiAgICAgIC8vIHByaW1lcm8gZWwgcGxhY2Vob2xkZXIgeWEgc2luIGluZGljYWRvciBkZSBhY3RpdmlkYWQgKHR1cm5vIDQxcHggbcOhc1xuICAgICAgLy8gYmFqbykgeSByZWNpw6luIH4yNW1zIGRlc3B1w6lzIGVsIG1lbnNhamUgZGVmaW5pdGl2bzogZXNlIHNhbHRvIGRlIGlkYSB5XG4gICAgICAvLyB2dWVsdGEgZXJhIGVsIGZsaWNrZXIgZGUgZmluIGRlIHN0cmVhbS4gQ29uIGVsIGZsdXNoLCB0b2RvIGVsIGZpbiBkZVxuICAgICAgLy8gc3RyZWFtIGVudHJhIGVuIHVuIMO6bmljbyBjb21taXQuXG4gICAgICBmbHVzaFN5bmMoKCkgPT4ge1xuICAgICAgICBkcm9wRnJvbVNlc3Npb24oc2Vzc2lvbklkLCB0ZW1wTWVzc2FnZUlkKVxuICAgICAgICBjb21taXRUb1Nlc3Npb24oXG4gICAgICAgICAgc2Vzc2lvbklkLFxuICAgICAgICAgIGJ1aWxkU3RyZWFtRmluaXNoQXNzaXN0YW50TWVzc2FnZSh7XG4gICAgICAgICAgICBmaW5hbE1lc3NhZ2VJZCxcbiAgICAgICAgICAgIGNvbnRlbnQ6IGNvbnRlbnRUb0FkZCxcbiAgICAgICAgICAgIHNvdXJjZXMsXG4gICAgICAgICAgICBhdHRhY2htZW50cyxcbiAgICAgICAgICAgIG1lbW9yeVNlc3Npb25JZCxcbiAgICAgICAgICAgIHN1Z2dlc3Rpb25zLFxuICAgICAgICAgICAgY3JlYXRlQWdlbnRGb2xsb3dVcCxcbiAgICAgICAgICAgIHJlYXNvbmluZzogZmluYWxUcmFjZSxcbiAgICAgICAgICB9KVxuICAgICAgICApXG4gICAgICB9KVxuICAgICAgY2xlYXJTZXNzaW9uVGFpbChzZXNzaW9uSWQpXG5cbiAgICAgIGlmIChjcmVhdGVBZ2VudEZvbGxvd1VwPy5hZ2VudElkKSB7XG4gICAgICAgIGZldGNoQWdlbnREZXRhaWwoY3JlYXRlQWdlbnRGb2xsb3dVcC5hZ2VudElkKVxuICAgICAgICAgIC50aGVuKGNoYXRBZ2VudCA9PiB7XG4gICAgICAgICAgICBkb2N1bWVudC5kaXNwYXRjaEV2ZW50KFxuICAgICAgICAgICAgICBuZXcgQ3VzdG9tRXZlbnQoJ21haWEtbWVyZ2UtY3JlYXRlZC1hZ2VudC1pbnRvLWxpc3QnLCB7XG4gICAgICAgICAgICAgICAgZGV0YWlsOiB7IGFnZW50OiBjaGF0QWdlbnQgfSxcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICB9KVxuICAgICAgICAgIC5jYXRjaChlcnIgPT4ge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcignW3VzZUNoYXRNYW5hZ2VyXSBObyBzZSBwdWRvIGHDsWFkaXIgZWwgYWdlbnRlIHJlY2nDqW4gY3JlYWRvIGFsIGxpc3RhZG8nLCBlcnIpXG4gICAgICAgICAgfSlcbiAgICAgIH1cblxuICAgICAgaWYgKGVkaXRBZ2VudEZvbGxvd1VwPy5hZ2VudElkKSB7XG4gICAgICAgIGZldGNoQWdlbnREZXRhaWwoZWRpdEFnZW50Rm9sbG93VXAuYWdlbnRJZClcbiAgICAgICAgICAudGhlbihjaGF0QWdlbnQgPT4ge1xuICAgICAgICAgICAgZG9jdW1lbnQuZGlzcGF0Y2hFdmVudChcbiAgICAgICAgICAgICAgbmV3IEN1c3RvbUV2ZW50KCdtYWlhLXN5bmMtZWRpdGVkLWFnZW50LWZyb20tY2hhdCcsIHtcbiAgICAgICAgICAgICAgICBkZXRhaWw6IHsgYWdlbnQ6IGNoYXRBZ2VudCB9LFxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKVxuICAgICAgICAgIH0pXG4gICAgICAgICAgLmNhdGNoKGVyciA9PiB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdbdXNlQ2hhdE1hbmFnZXJdIE5vIHNlIHB1ZG8gcmVmcmVzY2FyIGVsIGFnZW50ZSBlZGl0YWRvJywgZXJyKVxuICAgICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIGlzUHJvY2Vzc2luZ1JlZi5jdXJyZW50ID0gZmFsc2VcbiAgICAgIHJldHJ5U25hcHNob3RSZWYuY3VycmVudCA9IG51bGxcblxuICAgICAgY29uc3QgeyBpc0NoYXRWaWV3VmlzaWJsZSwgbWFya0NoYXRBc1JlYWQgfSA9IGdldENoYXRzU3RvcmVTdGF0ZSgpXG4gICAgICBpZiAoc2hvdWxkTWFya0NoYXRSZWFkQWZ0ZXJTdHJlYW1GaW5pc2goaXNBY3RpdmUsIGlzQ2hhdFZpZXdWaXNpYmxlKSkge1xuICAgICAgICBhd2FpdCBtYXJrQ2hhdEFzUmVhZChzZXNzaW9uSWQsIHsgZm9yY2U6IHRydWUgfSlcbiAgICAgIH1cblxuICAgICAgaWYgKHNob3VsZERpc3BhdGNoRmlyc3RTZXNzaW9uUmVmZXRjaChmaXJzdFRpbWVSZWYuY3VycmVudCkpIHtcbiAgICAgICAgZG9jdW1lbnQuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoJ3JlZmV0Y2gtc2Vzc2lvbicpKVxuICAgICAgICBmaXJzdFRpbWVSZWYuY3VycmVudCA9IGZhbHNlXG4gICAgICB9XG4gICAgfSxcbiAgICBbY29tbWl0VG9TZXNzaW9uLCBkcm9wRnJvbVNlc3Npb24sIGNsZWFyU2Vzc2lvblRhaWwsIHByb2plY3QsIGdldFRhYlRhc2tEZWZhdWx0LCBldmVudCwgYWdlbnRdXG4gIClcblxuICAvLyBgcGFydGlhbFRleHRgIGxvIHJlc2NhdGEgYHN0b3BTdHJlYW1gIGFudGVzIGRlIGxpbXBpYXIgZWwgc3RvcmUgZXh0ZXJubzogZWwgdGV4dG8gZW4gdml2b1xuICAvLyBubyB2aXZlIGVuIGBtZXNzYWdlc2AsIGFzw60gcXVlIHNpbiBlc3RvIGxhIHJlc3B1ZXN0YSBhIG1lZGlhcyBkZXNhcGFyZWNlIGRlIHBhbnRhbGxhIGF1bnF1ZVxuICAvLyBlbCBiYWNrZW5kIHPDrSBsYSBoYXlhIHBlcnNpc3RpZG8uXG4gIGNvbnN0IGhhbmRsZVN0cmVhbVN0b3AgPSB1c2VDYWxsYmFjayhcbiAgICAocGFydGlhbFRleHQ6IHN0cmluZykgPT4ge1xuICAgICAgLy8gRWwgc3RvcCBzaWVtcHJlIGFwbGljYSBhIGxhIHNlc2nDs24gYWN0aXZhIChib3TDs24gZGVsIGlucHV0IHZpc2libGUpLlxuICAgICAgY29uc3Qgc2Vzc2lvbklkID0gY3VycmVudENoYXRJZC5jdXJyZW50XG4gICAgICBjbGVhclN0cmVhbVVpUmVmLmN1cnJlbnQoKVxuICAgICAgY29uc3QgdGVtcE1lc3NhZ2VJZCA9IHN0cmVhbWluZ1BsYWNlaG9sZGVyTWVzc2FnZUlkKGN1cnJlbnRNZXNzYWdlSWQuY3VycmVudClcbiAgICAgIGNvbnN0IHsgZmluYWxNZXNzYWdlSWQsIGNhbmNlbGxlZE1lc3NhZ2VJZCB9ID0gcmVzb2x2ZVN0cmVhbVN0b3BNZXNzYWdlSWRzKGN1cnJlbnRNZXNzYWdlSWQuY3VycmVudClcbiAgICAgIGNvbnN0IHN0b3BwZWRUcmFjZSA9IHJlYXNvbmluZ1RyYWNlRm9yKHRlbXBNZXNzYWdlSWQpXG5cbiAgICAgIHNlc3Npb25TdHJlYW1pbmdUZXh0LmNsZWFyKHNlc3Npb25JZClcbiAgICAgIHN0cmVhbWluZ1BsYWNlaG9sZGVySWRSZWYuY3VycmVudCA9IG51bGxcbiAgICAgIGFjdGl2ZVN0cmVhbUNoYXRJZFJlZi5jdXJyZW50ID0gbnVsbFxuICAgICAgZHJvcEZyb21TZXNzaW9uKHNlc3Npb25JZCwgdGVtcE1lc3NhZ2VJZClcblxuICAgICAgaWYgKHNob3VsZFByZXNlcnZlUmVhc29uaW5nT25TdHJlYW1TdG9wKHN0b3BwZWRUcmFjZSkpIHtcbiAgICAgICAgcmVhc29uaW5nU3RvcmUuZmluaXNoKHRlbXBNZXNzYWdlSWQsIG51bGwpXG4gICAgICAgIHJlYXNvbmluZ1N0b3JlLnJlbmFtZSh0ZW1wTWVzc2FnZUlkLCBmaW5hbE1lc3NhZ2VJZClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlYXNvbmluZ1N0b3JlLnJlbW92ZSh0ZW1wTWVzc2FnZUlkKVxuICAgICAgfVxuXG4gICAgICBpZiAocGFydGlhbFRleHQpIHtcbiAgICAgICAgY29tbWl0VG9TZXNzaW9uKFxuICAgICAgICAgIHNlc3Npb25JZCxcbiAgICAgICAgICBidWlsZFN0cmVhbVN0b3BQYXJ0aWFsQXNzaXN0YW50TWVzc2FnZSh7XG4gICAgICAgICAgICBmaW5hbE1lc3NhZ2VJZCxcbiAgICAgICAgICAgIHBhcnRpYWxUZXh0LFxuICAgICAgICAgICAgc3RvcHBlZFRyYWNlLFxuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgIH1cblxuICAgICAgY29tbWl0VG9TZXNzaW9uKFxuICAgICAgICBzZXNzaW9uSWQsXG4gICAgICAgIGJ1aWxkU3RyZWFtU3RvcENhbmNlbGxlZEFzc2lzdGFudE1lc3NhZ2Uoe1xuICAgICAgICAgIGNhbmNlbGxlZE1lc3NhZ2VJZCxcbiAgICAgICAgICBjYW5jZWxsZWRMYWJlbDogdCgnY2hhdC5jYW5jZWxsZWQnKSxcbiAgICAgICAgfSlcbiAgICAgIClcbiAgICAgIGNsZWFyU2Vzc2lvblRhaWwoc2Vzc2lvbklkKVxuICAgICAgaXNQcm9jZXNzaW5nUmVmLmN1cnJlbnQgPSBmYWxzZVxuICAgICAgcmV0cnlTbmFwc2hvdFJlZi5jdXJyZW50ID0gbnVsbFxuICAgIH0sXG4gICAgW2NvbW1pdFRvU2Vzc2lvbiwgZHJvcEZyb21TZXNzaW9uLCBjbGVhclNlc3Npb25UYWlsLCB0XVxuICApXG5cbiAgY29uc3QgaGFuZGxlQXBwcm92YWxSZXF1aXJlZCA9IHVzZUNhbGxiYWNrKFxuICAgIChjdHg6IFN0cmVhbUNvbnRleHQsIGFwcHJvdmFsOiBBcHByb3ZhbFJlcXVlc3QsIGFjY3VtdWxhdGVkQ29udGVudDogc3RyaW5nKSA9PiB7XG4gICAgICBjb25zdCB7IHNlc3Npb25JZCwgcGxhY2Vob2xkZXJJZCB9ID0gY3R4XG4gICAgICBjb25zdCBpc0FjdGl2ZSA9IGFjdGl2ZVZpZXcuaXMoc2Vzc2lvbklkKVxuXG4gICAgICBzZXNzaW9uU3RyZWFtaW5nVGV4dC5jbGVhcihzZXNzaW9uSWQpXG4gICAgICBkcm9wRnJvbVNlc3Npb24oc2Vzc2lvbklkLCBwbGFjZWhvbGRlcklkKVxuXG4gICAgICByZXRyeVNuYXBzaG90UmVmLmN1cnJlbnQgPSBudWxsXG5cbiAgICAgIGlmIChpc0FjdGl2ZSkge1xuICAgICAgICBzdHJlYW1pbmdQbGFjZWhvbGRlcklkUmVmLmN1cnJlbnQgPSBudWxsXG4gICAgICAgIGFjdGl2ZVN0cmVhbUNoYXRJZFJlZi5jdXJyZW50ID0gbnVsbFxuICAgICAgfVxuXG4gICAgICBjb25zdCBoaXRsQ29udGV4dDogSGl0bEV4ZWN1dGlvbkNvbnRleHQgPSByZXNvbHZlSGl0bEV4ZWN1dGlvbkNvbnRleHQoYXBwcm92YWwsIGFjY3VtdWxhdGVkQ29udGVudClcbiAgICAgIGlmIChpc0FjdGl2ZSkge1xuICAgICAgICBoaXRsRXhlY3V0aW9uQ29udGV4dFJlZi5jdXJyZW50ID0gaGl0bENvbnRleHRcbiAgICAgIH1cblxuICAgICAgY29uc3QgaGl0bE91dGNvbWUgPSByZXNvbHZlSGl0bEFwcHJvdmFsUmVxdWlyZWRPdXRjb21lKGFwcHJvdmFsKVxuXG4gICAgICAvLyBQcmVhcHJvYmFkbzogcG9yIGRldGVjY2nDs24gbWFudWFsIG8gcG9yIGF1dG8tYXBwcm92ZS4gRW4gYW1ib3MgY2Fzb3MgZWxcbiAgICAgIC8vIHN0cmVhbSBjb250aW7DumEgeSBubyBoYXkgcXVlIHBpbnRhciBsYSBjYWphIGRlIGFwcm9iYWNpw7NuLlxuICAgICAgaWYgKGhpdGxPdXRjb21lLnR5cGUgPT09ICdza2lwLXVpJykge1xuICAgICAgICB0cmFja01hbnVhbEhpdGxFdmVudHMoXG4gICAgICAgICAgZXZlbnQsXG4gICAgICAgICAgeyBpbXByZXNzaW9uOiBFVkVOVFMuYWlDaGF0SGl0bCwgb3B0aW9uOiBFVkVOVFMuYWlDaGF0SGl0bE9wdGlvbiB9LFxuICAgICAgICAgIGFnZW50LFxuICAgICAgICAgIGFwcHJvdmFsLFxuICAgICAgICAgIHRyYWNrZWRNYW51YWxIaXRsS2V5c1JlZi5jdXJyZW50LFxuICAgICAgICAgIHJlc29sdmVIaXRsU2tpcFJlc29sdXRpb25Tb3VyY2UoYXBwcm92YWwpXG4gICAgICAgIClcblxuICAgICAgICBjb25zdCBza2lwcGVkTWFudWFsQXBwcm92YWwgPSByZXNvbHZlU2tpcHBlZEhpdGxNYW51YWxBcHByb3ZhbChhcHByb3ZhbClcbiAgICAgICAgaWYgKHNraXBwZWRNYW51YWxBcHByb3ZhbCAmJiBpc0FjdGl2ZSkge1xuICAgICAgICAgIGxhc3RNYW51YWxBcHByb3ZhbFJlZi5jdXJyZW50ID0gc2tpcHBlZE1hbnVhbEFwcHJvdmFsXG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzQWN0aXZlKSB7XG4gICAgICAgICAgaXNQcm9jZXNzaW5nUmVmLmN1cnJlbnQgPSBmYWxzZVxuICAgICAgICB9XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBjb25zdCB7IGFwcHJvdmFsTWVzc2FnZUlkIH0gPSBoaXRsT3V0Y29tZVxuICAgICAgcmVhc29uaW5nU3RvcmUucmVuYW1lKHBsYWNlaG9sZGVySWQsIGFwcHJvdmFsTWVzc2FnZUlkKVxuICAgICAgY29uc3QgYXBwcm92YWxUcmFjZSA9IG1hcFJlYXNvbmluZ1RyYWNlKGFwcHJvdmFsLnJlYXNvbmluZykgPz8gcmVhc29uaW5nVHJhY2VGb3IoYXBwcm92YWxNZXNzYWdlSWQpXG4gICAgICBjb21taXRUb1Nlc3Npb24oXG4gICAgICAgIHNlc3Npb25JZCxcbiAgICAgICAgYnVpbGRIaXRsQXBwcm92YWxQZW5kaW5nTWVzc2FnZSh7XG4gICAgICAgICAgYXBwcm92YWxNZXNzYWdlSWQsXG4gICAgICAgICAgYWNjdW11bGF0ZWRDb250ZW50LFxuICAgICAgICAgIGFwcHJvdmFsLFxuICAgICAgICAgIHJlYXNvbmluZzogYXBwcm92YWxUcmFjZSxcbiAgICAgICAgfSlcbiAgICAgIClcbiAgICAgIGlmIChpc0FjdGl2ZSkge1xuICAgICAgICBpc1Byb2Nlc3NpbmdSZWYuY3VycmVudCA9IGZhbHNlXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBnZXRDaGF0c1N0b3JlU3RhdGUoKS5tYXJrQ2hhdEFzVW5yZWFkKHNlc3Npb25JZClcbiAgICAgICAgbm90aWZ5U2Vzc2lvbkZpbmlzaGVkSW5CYWNrZ3JvdW5kKHNlc3Npb25JZCwgJ2FwcHJvdmFsX3JlcXVpcmVkJylcbiAgICAgIH1cbiAgICB9LFxuICAgIFthZ2VudCwgY29tbWl0VG9TZXNzaW9uLCBkcm9wRnJvbVNlc3Npb24sIGV2ZW50XVxuICApXG5cbiAgY29uc3Qge1xuICAgIGFza01haWEsXG4gICAgcmV0cnlDb21wbGV0aW9uLFxuICAgIGlzTG9hZGluZzogd2FpdGluZ1Jlc3BvbnNlLFxuICAgIGlzV3JpdGluZyxcbiAgICBsb2FkaW5nTWVzc2FnZSxcbiAgICBzdHJlYW1BY3Rpdml0eSxcbiAgICB1cGRhdGVTdHJlYW1BY3Rpdml0eSxcbiAgICBzdG9wU3RyZWFtaW5nLFxuICB9ID0gdXNlT3JjaGVzdHJhdG9yU3RyZWFtKHtcbiAgICBhY3RpdmVTZXNzaW9uSWQsXG4gICAgb25FcnJvcjogaGFuZGxlU3RyZWFtRXJyb3IsXG4gICAgb25TdHJlYW1VcGRhdGU6IGhhbmRsZVN0cmVhbVVwZGF0ZSxcbiAgICBvbkZpbmlzaFN0cmVhbTogaGFuZGxlU3RyZWFtRmluaXNoLFxuICAgIG9uU3RvcDogaGFuZGxlU3RyZWFtU3RvcCxcbiAgICBvbkFwcHJvdmFsUmVxdWlyZWQ6IGhhbmRsZUFwcHJvdmFsUmVxdWlyZWQsXG4gICAgaGl0bEV4ZWN1dGlvbkNvbnRleHRSZWYsXG4gIH0pXG5cbiAgY2xlYXJTdHJlYW1VaVJlZi5jdXJyZW50ID0gKCkgPT4ge1xuICAgIHVwZGF0ZVN0cmVhbUFjdGl2aXR5KG51bGwpXG4gICAgc2V0QWN0aXZlTG9hZGluZ3Moe30pXG4gICAgaGl0bEV4ZWN1dGlvbkNvbnRleHRSZWYuY3VycmVudCA9IG51bGxcbiAgfVxuXG4gIGNvbnN0IGN1cnJlbnRQcm9qZWN0ID0gcHJvamVjdFxuXG4gIGNvbnN0IHNlbmRNZXNzYWdlID0gdXNlQ2FsbGJhY2soXG4gICAgYXN5bmMgKFxuICAgICAgbWVzc2FnZTogc3RyaW5nLFxuICAgICAgYXR0YWNobWVudHNPck9wdGlvbnM/OiBBdHRhY2htZW50RmlsZVtdIHwgU2VuZE1lc3NhZ2VPcHRpb25zLFxuICAgICAgZmFxSWQ/OiBzdHJpbmcsXG4gICAgICBhZ2VudFN1Z2dlc3Rpb25JZD86IHN0cmluZyxcbiAgICAgIG1lbnRpb25zPzogQ29udGV4dE1lbnRpb25bXSxcbiAgICAgIGZ1YUlkPzogc3RyaW5nLFxuICAgICAgc2NJZD86IHN0cmluZ1xuICAgICkgPT4ge1xuICAgICAgY29uc3Qgd2lsbFN0YXJ0TmV3U3RyZWFtID0gIXNlc3Npb25TdHJlYW1NYW5hZ2VyLmlzQWN0aXZlKGN1cnJlbnRDaGF0SWQuY3VycmVudClcbiAgICAgIGNvbnN0IHNlbmRHYXRlID0gcmVzb2x2ZVNlbmRNZXNzYWdlR2F0ZSh7XG4gICAgICAgIGlzUHJvY2Vzc2luZzogaXNQcm9jZXNzaW5nUmVmLmN1cnJlbnQsXG4gICAgICAgIHdhaXRpbmdSZXNwb25zZSxcbiAgICAgICAgbG9hZGluZ01lc3NhZ2VzLFxuICAgICAgICB3aWxsU3RhcnROZXdTdHJlYW0sXG4gICAgICAgIGFjdGl2ZVN0cmVhbUNvdW50OiBzZXNzaW9uU3RyZWFtTWFuYWdlci5nZXRBY3RpdmVDb3VudCgpLFxuICAgICAgICBtYXhDb25jdXJyZW50OiBNQVhfQ09OQ1VSUkVOVF9TVFJFQU1TLFxuICAgICAgfSlcbiAgICAgIGlmIChzZW5kR2F0ZSA9PT0gJ2NvbmN1cnJlbmN5Jykge1xuICAgICAgICBkb2N1bWVudC5kaXNwYXRjaEV2ZW50KFxuICAgICAgICAgIG5ldyBDdXN0b21FdmVudCgnc25hY2tiYXItZXZlbnQnLCB7XG4gICAgICAgICAgICBkZXRhaWw6IHsgc2hvdzogdHJ1ZSwgc2V2ZXJpdHk6ICdpbmZvJywgbWVzc2FnZTogdCgnY2hhdC50b29NYW55QWN0aXZlU2Vzc2lvbnMnKSB9LFxuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgICBpZiAoc2VuZEdhdGUgPT09ICdidXN5Jykge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgY29uc3QgeyBhdHRhY2htZW50cywgb3B0aW9ucyB9ID0gbm9ybWFsaXplU2VuZE1lc3NhZ2VBcmdzKGF0dGFjaG1lbnRzT3JPcHRpb25zKVxuICAgICAgY29uc3QgcGF5bG9hZEZpZWxkcyA9IHJlc29sdmVTZW5kTWVzc2FnZVBheWxvYWRGaWVsZHMob3B0aW9ucywge1xuICAgICAgICBmYXFJZCxcbiAgICAgICAgYWdlbnRTdWdnZXN0aW9uSWQsXG4gICAgICAgIG1lbnRpb25zLFxuICAgICAgICBmdWFJZCxcbiAgICAgICAgc2NJZCxcbiAgICAgIH0pXG4gICAgICBjb25zdCBjb250ZXh0TWVzc2FnZTogQ29udGV4dE1lc3NhZ2UgfCB1bmRlZmluZWQgPSBidWlsZENvbnRleHRNZXNzYWdlKHBheWxvYWRGaWVsZHMubWVudGlvbnMpXG4gICAgICBjb25zdCBkaXNwbGF5TWVzc2FnZSA9IGZvcm1hdFF1aWNrQWN0aW9uTWVzc2FnZUZvckRpc3BsYXkobWVzc2FnZSwge1xuICAgICAgICBmdWFJZDogcGF5bG9hZEZpZWxkcy5mdWFJZCxcbiAgICAgICAgc2NJZDogcGF5bG9hZEZpZWxkcy5zY0lkLFxuICAgICAgfSlcblxuICAgICAgaXNQcm9jZXNzaW5nUmVmLmN1cnJlbnQgPSB0cnVlXG4gICAgICBzZXRBY3RpdmVDaGF0SWQoY3VycmVudENoYXRJZC5jdXJyZW50KVxuICAgICAgY29uc3QgbmV3TWVzc2FnZUlkID0gdXVpZHY0KClcbiAgICAgIGN1cnJlbnRNZXNzYWdlSWQuY3VycmVudCA9IG5ld01lc3NhZ2VJZFxuICAgICAgY3VycmVudFVzZXJRdWVzdGlvbi5jdXJyZW50ID0gbWVzc2FnZVxuXG4gICAgICBpZiAoIXJlcG9ydGVkRXZlbnQuY3VycmVudCkge1xuICAgICAgICBldmVudChFVkVOVFMucG1BaVR5cGVkVGV4dClcbiAgICAgICAgcmVwb3J0ZWRFdmVudC5jdXJyZW50ID0gdHJ1ZVxuICAgICAgfVxuXG4gICAgICAvLyBWZXJpZmljYXIgc2kgZWwgY29udGV4dG8gZ2xvYmFsIGVzdMOhIGRlc2FjdHVhbGl6YWRvXG4gICAgICBjb25zdCBsYXN0TWVzc2FnZVdpdGhQcm9qZWN0ID0gbWVzc2FnZXNSZWYuY3VycmVudC5maWx0ZXIobXNnID0+IG1zZy5wcm9qZWN0SWQpLmF0KC0xKVxuXG4gICAgICBjb25zdCBjdXJyZW50QWdlbnRGcm9tTWVzc2FnZXMgPSByZXNvbHZlTGFzdE1lc3NhZ2VBZ2VudElkKG1lc3NhZ2VzUmVmLmN1cnJlbnQpXG5cbiAgICAgIGNvbnN0IHNlc3Npb25JZCA9IGN1cnJlbnRDaGF0SWQuY3VycmVudFxuICAgICAgY29uc3Qge1xuICAgICAgICBjaGlwc1Byb2plY3Q6IGN0eENoaXBzUHJvamVjdCxcbiAgICAgICAgcHJvamVjdDogY3R4UHJvamVjdCxcbiAgICAgICAgY2xpZW50OiBjdHhDbGllbnQsXG4gICAgICAgIHRhc2s6IGN0eFRhc2ssXG4gICAgICB9ID0gY29udGV4dFJlZi5jdXJyZW50XG5cbiAgICAgIGVuc3VyZVNlc3Npb25JblNpZGViYXIoe1xuICAgICAgICBzZXNzaW9uSWQsXG4gICAgICAgIHRpdGxlOiBidWlsZFNpZGViYXJTZXNzaW9uVGl0bGUoZGlzcGxheU1lc3NhZ2UpLFxuICAgICAgICBhZ2VudCxcbiAgICAgICAgYWdlbnRJZDogY3VycmVudEFnZW50RnJvbU1lc3NhZ2VzIHx8IGFnZW50Py5pZCxcbiAgICAgICAgcHJvamVjdDogY3R4UHJvamVjdCxcbiAgICAgICAgY2xpZW50OiBjdHhDbGllbnQsXG4gICAgICAgIGF0dGFjaG1lbnRzLFxuICAgICAgfSlcblxuICAgICAgLy8gTm8gYWdyZWdhciBwcm9qZWN0SWQgYWwgbWVuc2FqZSBkZWwgdXN1YXJpbyAtIHNlIGRldGVybWluYXLDoSBkZXNwdcOpc1xuICAgICAgY29tbWl0VG9TZXNzaW9uKHNlc3Npb25JZCwge1xuICAgICAgICBpZDogcmVzb2x2ZVVzZXJRdWVzdGlvbk1lc3NhZ2VJZChjdXJyZW50TWVzc2FnZUlkLmN1cnJlbnQpLFxuICAgICAgICBtZXNzYWdlOiBkaXNwbGF5TWVzc2FnZSxcbiAgICAgICAgZGF0ZTogbmV3IERhdGUoKSxcbiAgICAgICAgdXNlcjogY3VycmVudFVzZXIsXG4gICAgICAgIHJvbGU6IENoYXRIaXN0b3J5Um9sZS5VU0VSLFxuICAgICAgICBzb3VyY2VzOiBhdHRhY2htZW50cyxcbiAgICAgICAgLi4uKGNvbnRleHRNZXNzYWdlID8geyBjb250ZXh0TWVzc2FnZSB9IDoge30pLFxuICAgICAgfSlcblxuICAgICAgY3VycmVudE1lc3NhZ2VJZC5jdXJyZW50ID0gdXVpZHY0KClcblxuICAgICAgY29uc3Qgc3RyZWFtaW5nUGxhY2Vob2xkZXJJZCA9IHN0cmVhbWluZ1BsYWNlaG9sZGVyTWVzc2FnZUlkKGN1cnJlbnRNZXNzYWdlSWQuY3VycmVudClcbiAgICAgIHN0cmVhbWluZ1BsYWNlaG9sZGVySWRSZWYuY3VycmVudCA9IHN0cmVhbWluZ1BsYWNlaG9sZGVySWRcbiAgICAgIGFjdGl2ZVN0cmVhbUNoYXRJZFJlZi5jdXJyZW50ID0gc2Vzc2lvbklkXG4gICAgICBzZXNzaW9uU3RyZWFtaW5nVGV4dC5zdGFydChzZXNzaW9uSWQsIHN0cmVhbWluZ1BsYWNlaG9sZGVySWQpXG4gICAgICBjb21taXRUb1Nlc3Npb24oc2Vzc2lvbklkLCB7XG4gICAgICAgIGlkOiBzdHJlYW1pbmdQbGFjZWhvbGRlcklkLFxuICAgICAgICBtZXNzYWdlOiAnJyxcbiAgICAgICAgZGF0ZTogbmV3IERhdGUoKSxcbiAgICAgICAgdXNlcjogeyBpZDogJ2Fzc2lzdGFudCcsIG5hbWU6IGFnZW50Py5uYW1lIHx8ICdBc3Npc3RhbnQnIH0sXG4gICAgICAgIHJvbGU6IENoYXRIaXN0b3J5Um9sZS5BU1NJU1RBTlQsXG4gICAgICB9KVxuXG4gICAgICBsZXQgZmluYWxNZXNzYWdlID0gbWVzc2FnZVxuXG4gICAgICBmaW5hbE1lc3NhZ2UgPSByZXNvbHZlUmVudGFiaWxpZGFkUHJvamVjdEZhcU1lc3NhZ2UoXG4gICAgICAgIG1lc3NhZ2UsXG4gICAgICAgIHQoJ3FhLml0ZW1zLnJlbnRhYmlsaWRhZF9wcm95ZWN0bycpLFxuICAgICAgICBvcHRpb25zLnByb2plY3RDaGFuZ2VkPy5pbmNvbWVUeXBlIHx8IGNvbnRleHRSZWYuY3VycmVudC5wcm9qZWN0Py5pbmNvbWVUeXBlXG4gICAgICApXG5cbiAgICAgIGNvbnN0IGhpc3RvcnkgPSBidWlsZENoYXRIaXN0b3J5RnJvbU1lc3NhZ2VzKG1lc3NhZ2VzUmVmLmN1cnJlbnQsIGF1dGhVc2VyLmlkLnRvU3RyaW5nKCkpXG5cbiAgICAgIGNvbnN0IGxhc3RNZXNzYWdlUHJvamVjdElkID0gbGFzdE1lc3NhZ2VXaXRoUHJvamVjdD8ucHJvamVjdElkXG4gICAgICBjb25zdCBwcm9qZWN0VG9SZXF1ZXN0ID0gcmVzb2x2ZVByb2plY3RUb1JlcXVlc3QoY3R4Q2hpcHNQcm9qZWN0LCBsYXN0TWVzc2FnZVByb2plY3RJZClcblxuICAgICAgY29uc3QgcHJvamVjdHMgPSBhd2FpdCBmZXRjaFByb2plY3RzKFtwcm9qZWN0VG9SZXF1ZXN0XSlcblxuICAgICAgY29uc3QgcGF5bG9hZERhdGEgPSBidWlsZE1haWFTdHJlYW1SZXF1ZXN0UGF5bG9hZCh7XG4gICAgICAgIG1lc3NhZ2U6IGZpbmFsTWVzc2FnZSxcbiAgICAgICAgaGlzdG9yeSxcbiAgICAgICAgcHJvamVjdElkOiBwcm9qZWN0VG9SZXF1ZXN0LFxuICAgICAgICBhdXRoVXNlcixcbiAgICAgICAgY2hhdElkOiBjdXJyZW50Q2hhdElkLmN1cnJlbnQsXG4gICAgICAgIG1lc3NhZ2VJZDogY3VycmVudE1lc3NhZ2VJZC5jdXJyZW50LFxuICAgICAgICBhZ2VudE5hbWU6IGFnZW50Py5uYW1lIHx8ICcnLFxuICAgICAgICBhZ2VudElkOiByZXNvbHZlQWdlbnRJZEZvclN0cmVhbShjdXJyZW50QWdlbnRGcm9tTWVzc2FnZXMsIGFnZW50Py5pZCksXG4gICAgICAgIGlzV2ViU2VhcmNoQWN0aXZlOiBCb29sZWFuKGlzV2ViU2VhcmNoQWN0aXZlUmVmLmN1cnJlbnQpLFxuICAgICAgICBpc0RlZXBTZWFyY2hBY3RpdmU6IEJvb2xlYW4oaXNEZWVwU2VhcmNoQWN0aXZlUmVmLmN1cnJlbnQpLFxuICAgICAgICBpc0F1dG9BcHByb3ZlQWN0aXZlOiBCb29sZWFuKGlzQXV0b0FwcHJvdmVBY3RpdmVSZWYuY3VycmVudCksXG4gICAgICAgIGN0eFByb2plY3QsXG4gICAgICAgIGN0eENsaWVudCxcbiAgICAgICAgY3R4VGFzayxcbiAgICAgICAgcHJvamVjdE5hbWU6IHByb2plY3RzPy5sZW5ndGggPyBwcm9qZWN0c1swXS5uYW1lIDogdW5kZWZpbmVkLFxuICAgICAgICBhdHRhY2htZW50cyxcbiAgICAgICAgZmFxSWQ6IHBheWxvYWRGaWVsZHMuZmFxSWQsXG4gICAgICAgIGFnZW50U3VnZ2VzdGlvbklkOiBwYXlsb2FkRmllbGRzLmFnZW50U3VnZ2VzdGlvbklkLFxuICAgICAgICBmdWFJZDogcGF5bG9hZEZpZWxkcy5mdWFJZCxcbiAgICAgICAgc2NJZDogcGF5bG9hZEZpZWxkcy5zY0lkLFxuICAgICAgICBhZ2VudEVudGl0eTogYWdlbnQ/LmVudGl0eSxcbiAgICAgICAgYWdlbnRUeXBlOiBhZ2VudD8udHlwZSxcbiAgICAgICAgYWdlbnRFbW9qaTogYWdlbnQ/LmVtb2ppLFxuICAgICAgICBjb250ZXh0TWVzc2FnZSxcbiAgICAgICAgY29udGV4dERhdGE6IHBheWxvYWRGaWVsZHMuY29udGV4dERhdGEsXG4gICAgICB9KVxuXG4gICAgICBhc2tNYWlhKHBheWxvYWREYXRhKVxuICAgIH0sXG4gICAgW1xuICAgICAgYWRkTWVzc2FnZSxcbiAgICAgIGNvbW1pdFRvU2Vzc2lvbixcbiAgICAgIGV2ZW50LFxuICAgICAgYXNrTWFpYSxcbiAgICAgIHByb2plY3QsXG4gICAgICBjbGllbnQsXG4gICAgICB0YXNrLFxuICAgICAgY2hpcHNQcm9qZWN0LFxuICAgICAgYXV0aFVzZXIsXG4gICAgICBhZ2VudCxcbiAgICAgIHQsXG4gICAgICB3YWl0aW5nUmVzcG9uc2UsXG4gICAgICBsb2FkaW5nTWVzc2FnZXMsXG4gICAgICBpc1dlYlNlYXJjaEFjdGl2ZSxcbiAgICAgIGlzRGVlcFNlYXJjaEFjdGl2ZSxcbiAgICBdXG4gIClcblxuICBjb25zdCBjaGFuZ2VQcm9qZWN0ID0gdXNlQ2FsbGJhY2soXG4gICAgKG9wdGlvbjogUHJvamVjdCkgPT4ge1xuICAgICAgaWYgKCFjdXJyZW50VXNlclF1ZXN0aW9uLmN1cnJlbnQpIHJldHVyblxuXG4gICAgICBpZiAoc2hvdWxkVXBkYXRlUHJvamVjdE9uQ2hhbmdlKG9wdGlvbi5pZCwgcHJvamVjdD8uaWQpKSB7XG4gICAgICAgIHNldFByb2plY3Qob3B0aW9uKVxuICAgICAgfVxuXG4gICAgICBpZiAoc2hvdWxkUmVzZW5kQWZ0ZXJQcm9qZWN0Q2hhbmdlKGN1cnJlbnRVc2VyUXVlc3Rpb24uY3VycmVudCwgcHJvamVjdCkpIHtcbiAgICAgICAgY29uc3QgaGlzdG9yeSA9IGJ1aWxkQ2hhdEhpc3RvcnlGcm9tTWVzc2FnZXMobWVzc2FnZXNSZWYuY3VycmVudCwgYXV0aFVzZXIuaWQudG9TdHJpbmcoKSlcblxuICAgICAgICBhc2tNYWlhKFxuICAgICAgICAgIGJ1aWxkTWFpYVN0cmVhbVJlcXVlc3RQYXlsb2FkRm9yUHJvamVjdENoYW5nZSh7XG4gICAgICAgICAgICBtZXNzYWdlOiBjdXJyZW50VXNlclF1ZXN0aW9uLmN1cnJlbnQsXG4gICAgICAgICAgICBoaXN0b3J5LFxuICAgICAgICAgICAgcHJvamVjdDogb3B0aW9uLFxuICAgICAgICAgICAgYXV0aFVzZXIsXG4gICAgICAgICAgICBjaGF0SWQ6IGN1cnJlbnRDaGF0SWQuY3VycmVudCxcbiAgICAgICAgICAgIG1lc3NhZ2VJZDogY3VycmVudE1lc3NhZ2VJZC5jdXJyZW50LFxuICAgICAgICAgICAgYWdlbnROYW1lOiBhZ2VudD8ubmFtZSB8fCAnJyxcbiAgICAgICAgICAgIGFnZW50SWQ6IGFnZW50Py5pZCB8fCAnJyxcbiAgICAgICAgICAgIGlzV2ViU2VhcmNoQWN0aXZlOiBCb29sZWFuKGlzV2ViU2VhcmNoQWN0aXZlUmVmLmN1cnJlbnQpLFxuICAgICAgICAgICAgaXNEZWVwU2VhcmNoQWN0aXZlOiBCb29sZWFuKGlzRGVlcFNlYXJjaEFjdGl2ZVJlZi5jdXJyZW50KSxcbiAgICAgICAgICAgIGlzQXV0b0FwcHJvdmVBY3RpdmU6IEJvb2xlYW4oaXNBdXRvQXBwcm92ZUFjdGl2ZVJlZi5jdXJyZW50KSxcbiAgICAgICAgICAgIGFnZW50RW50aXR5OiBhZ2VudD8uZW50aXR5LFxuICAgICAgICAgICAgYWdlbnRUeXBlOiBhZ2VudD8udHlwZSxcbiAgICAgICAgICB9KVxuICAgICAgICApXG4gICAgICB9XG4gICAgfSxcbiAgICBbcHJvamVjdCwgc2V0UHJvamVjdCwgYXNrTWFpYSwgYXV0aFVzZXIsIGlzV2ViU2VhcmNoQWN0aXZlLCBhZ2VudF1cbiAgKVxuXG4gIGNvbnN0IHJldHJ5TWVzc2FnZSA9IHVzZUNhbGxiYWNrKFxuICAgIGFzeW5jIChtZXNzYWdlOiBDaGF0TWVzc2FnZSkgPT4ge1xuICAgICAgY29uc3Qgc2Vzc2lvbklkID0gY3VycmVudENoYXRJZC5jdXJyZW50XG4gICAgICBjb25zdCByZXRyeUJsb2NrID0gcmVzb2x2ZVJldHJ5QmxvY2tSZWFzb24oe1xuICAgICAgICBpc1Byb2Nlc3Npbmc6IGlzUHJvY2Vzc2luZ1JlZi5jdXJyZW50LFxuICAgICAgICB3YWl0aW5nUmVzcG9uc2UsXG4gICAgICAgIGxvYWRpbmdNZXNzYWdlcyxcbiAgICAgICAgaXNTZXNzaW9uU3RyZWFtQWN0aXZlOiBzZXNzaW9uU3RyZWFtTWFuYWdlci5pc0FjdGl2ZShzZXNzaW9uSWQpLFxuICAgICAgICBhY3RpdmVTdHJlYW1Db3VudDogc2Vzc2lvblN0cmVhbU1hbmFnZXIuZ2V0QWN0aXZlQ291bnQoKSxcbiAgICAgICAgbWF4Q29uY3VycmVudDogTUFYX0NPTkNVUlJFTlRfU1RSRUFNUyxcbiAgICAgIH0pXG4gICAgICBpZiAocmV0cnlCbG9jayA9PT0gJ2NvbmN1cnJlbmN5Jykge1xuICAgICAgICBkb2N1bWVudC5kaXNwYXRjaEV2ZW50KFxuICAgICAgICAgIG5ldyBDdXN0b21FdmVudCgnc25hY2tiYXItZXZlbnQnLCB7XG4gICAgICAgICAgICBkZXRhaWw6IHsgc2hvdzogdHJ1ZSwgc2V2ZXJpdHk6ICdpbmZvJywgbWVzc2FnZTogdCgnY2hhdC50b29NYW55QWN0aXZlU2Vzc2lvbnMnKSB9LFxuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgICBpZiAocmV0cnlCbG9jayAhPSBudWxsKSByZXR1cm5cblxuICAgICAgY29uc3QgcHJldmlvdXNNZXNzYWdlcyA9IG1lc3NhZ2VzUmVmLmN1cnJlbnRcbiAgICAgIGNvbnN0IHVzZXJNZXNzYWdlID0gZmluZFVzZXJNZXNzYWdlRm9yUmV0cnkocHJldmlvdXNNZXNzYWdlcywgbWVzc2FnZSlcbiAgICAgIGNvbnN0IHJldHJ5RWxpZ2liaWxpdHkgPSByZXNvbHZlUmV0cnlFbGlnaWJpbGl0eShwcmV2aW91c01lc3NhZ2VzLCBtZXNzYWdlLCB1c2VyTWVzc2FnZSlcbiAgICAgIGlmICghcmV0cnlFbGlnaWJpbGl0eS5lbGlnaWJsZSB8fCAhdXNlck1lc3NhZ2UpIHJldHVyblxuXG4gICAgICBjb25zdCB7IHR1cm5JZCwgdXNlT3JjaGVzdHJhdG9yRmFsbGJhY2sgfSA9IHJldHJ5RWxpZ2liaWxpdHlcblxuICAgICAgY29uc3QgdHJ1bmNhdGVkID0gbWVzc2FnZXNXaXRob3V0UmV0cmllZFR1cm4ocHJldmlvdXNNZXNzYWdlcywgbWVzc2FnZSlcblxuICAgICAgaXNQcm9jZXNzaW5nUmVmLmN1cnJlbnQgPSB0cnVlXG4gICAgICByZXRyeVNuYXBzaG90UmVmLmN1cnJlbnQgPSBwcmV2aW91c01lc3NhZ2VzXG4gICAgICBzZXRBY3RpdmVDaGF0SWQoc2Vzc2lvbklkKVxuXG4gICAgICBjb25zdCBuZXdNZXNzYWdlSWQgPSB1dWlkdjQoKVxuICAgICAgY3VycmVudE1lc3NhZ2VJZC5jdXJyZW50ID0gbmV3TWVzc2FnZUlkXG4gICAgICBjdXJyZW50VXNlclF1ZXN0aW9uLmN1cnJlbnQgPSB1c2VyTWVzc2FnZS5tZXNzYWdlXG4gICAgICBjb25zdCBzdHJlYW1pbmdQbGFjZWhvbGRlcklkID0gYGFuc3dlci0ke25ld01lc3NhZ2VJZH0tc3RyZWFtaW5nYFxuICAgICAgc3RyZWFtaW5nUGxhY2Vob2xkZXJJZFJlZi5jdXJyZW50ID0gc3RyZWFtaW5nUGxhY2Vob2xkZXJJZFxuICAgICAgYWN0aXZlU3RyZWFtQ2hhdElkUmVmLmN1cnJlbnQgPSBzZXNzaW9uSWRcblxuICAgICAgY29uc3QgcGxhY2Vob2xkZXI6IENoYXRNZXNzYWdlID0ge1xuICAgICAgICBpZDogc3RyZWFtaW5nUGxhY2Vob2xkZXJJZCxcbiAgICAgICAgbWVzc2FnZTogJycsXG4gICAgICAgIGRhdGU6IG5ldyBEYXRlKCksXG4gICAgICAgIHVzZXI6IHsgaWQ6ICdhc3Npc3RhbnQnLCBuYW1lOiBhZ2VudD8ubmFtZSB8fCAnQXNzaXN0YW50JyB9LFxuICAgICAgICByb2xlOiBDaGF0SGlzdG9yeVJvbGUuQVNTSVNUQU5ULFxuICAgICAgfVxuICAgICAgY29uc3QgbmV4dE1lc3NhZ2VzID0gWy4uLnRydW5jYXRlZCwgcGxhY2Vob2xkZXJdXG4gICAgICBtZXNzYWdlc1JlZi5jdXJyZW50ID0gbmV4dE1lc3NhZ2VzXG4gICAgICByZXBsYWNlTWVzc2FnZXMobmV4dE1lc3NhZ2VzKVxuICAgICAgc2Vzc2lvblN0cmVhbWluZ1RleHQuc3RhcnQoc2Vzc2lvbklkLCBzdHJlYW1pbmdQbGFjZWhvbGRlcklkKVxuXG4gICAgICBjb25zdCB7XG4gICAgICAgIGNoaXBzUHJvamVjdDogY3R4Q2hpcHNQcm9qZWN0LFxuICAgICAgICBwcm9qZWN0OiBjdHhQcm9qZWN0LFxuICAgICAgICBjbGllbnQ6IGN0eENsaWVudCxcbiAgICAgICAgdGFzazogY3R4VGFzayxcbiAgICAgIH0gPSBjb250ZXh0UmVmLmN1cnJlbnRcbiAgICAgIGNvbnN0IGxhc3RNZXNzYWdlV2l0aFByb2plY3QgPSB0cnVuY2F0ZWQuZmlsdGVyKG1zZyA9PiBtc2cucHJvamVjdElkKS5hdCgtMSlcbiAgICAgIGNvbnN0IHByb2plY3RUb1JlcXVlc3QgPSByZXNvbHZlUHJvamVjdFRvUmVxdWVzdChjdHhDaGlwc1Byb2plY3QsIGxhc3RNZXNzYWdlV2l0aFByb2plY3Q/LnByb2plY3RJZClcbiAgICAgIGNvbnN0IGN1cnJlbnRBZ2VudEZyb21NZXNzYWdlcyA9IHRydW5jYXRlZC5hdCgtMSk/LmFnZW50SWQgfHwgbWVzc2FnZS5hZ2VudElkXG4gICAgICBjb25zdCBhdHRhY2htZW50cyA9IHJlc29sdmVSZXRyeVVzZXJBdHRhY2htZW50cyh1c2VyTWVzc2FnZSlcblxuICAgICAgY29uc3QgcmVwbGF5VmlhT3JjaGVzdHJhdG9yID0gYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCBoaXN0b3J5ID0gYnVpbGRDaGF0SGlzdG9yeUZyb21NZXNzYWdlcyh0cnVuY2F0ZWQsIGF1dGhVc2VyLmlkLnRvU3RyaW5nKCkpXG4gICAgICAgIGNvbnN0IHByb2plY3RzID0gcHJvamVjdFRvUmVxdWVzdCA/IGF3YWl0IGZldGNoUHJvamVjdHMoW3Byb2plY3RUb1JlcXVlc3RdKSA6IG51bGxcblxuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBhc2tNYWlhKFxuICAgICAgICAgIGJ1aWxkTWFpYVN0cmVhbVJlcXVlc3RQYXlsb2FkKHtcbiAgICAgICAgICAgIG1lc3NhZ2U6IHVzZXJNZXNzYWdlLm1lc3NhZ2UsXG4gICAgICAgICAgICBoaXN0b3J5LFxuICAgICAgICAgICAgcHJvamVjdElkOiBwcm9qZWN0VG9SZXF1ZXN0LFxuICAgICAgICAgICAgYXV0aFVzZXIsXG4gICAgICAgICAgICBjaGF0SWQ6IHNlc3Npb25JZCxcbiAgICAgICAgICAgIG1lc3NhZ2VJZDogbmV3TWVzc2FnZUlkLFxuICAgICAgICAgICAgYWdlbnROYW1lOiBhZ2VudD8ubmFtZSB8fCAnJyxcbiAgICAgICAgICAgIGFnZW50SWQ6IHJlc29sdmVBZ2VudElkRm9yU3RyZWFtKGN1cnJlbnRBZ2VudEZyb21NZXNzYWdlcywgYWdlbnQ/LmlkKSxcbiAgICAgICAgICAgIGlzV2ViU2VhcmNoQWN0aXZlOiBCb29sZWFuKGlzV2ViU2VhcmNoQWN0aXZlUmVmLmN1cnJlbnQpLFxuICAgICAgICAgICAgaXNEZWVwU2VhcmNoQWN0aXZlOiBCb29sZWFuKGlzRGVlcFNlYXJjaEFjdGl2ZVJlZi5jdXJyZW50KSxcbiAgICAgICAgICAgIGlzQXV0b0FwcHJvdmVBY3RpdmU6IEJvb2xlYW4oaXNBdXRvQXBwcm92ZUFjdGl2ZVJlZi5jdXJyZW50KSxcbiAgICAgICAgICAgIGN0eFByb2plY3QsXG4gICAgICAgICAgICBjdHhDbGllbnQsXG4gICAgICAgICAgICBjdHhUYXNrLFxuICAgICAgICAgICAgcHJvamVjdE5hbWU6IHByb2plY3RzPy5sZW5ndGggPyBwcm9qZWN0c1swXS5uYW1lIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgYXR0YWNobWVudHMsXG4gICAgICAgICAgICBhZ2VudEVudGl0eTogYWdlbnQ/LmVudGl0eSxcbiAgICAgICAgICAgIGFnZW50VHlwZTogYWdlbnQ/LnR5cGUsXG4gICAgICAgICAgICBhZ2VudEVtb2ppOiBhZ2VudD8uZW1vamksXG4gICAgICAgICAgICBjb250ZXh0TWVzc2FnZTogdXNlck1lc3NhZ2UuY29udGV4dE1lc3NhZ2UsXG4gICAgICAgICAgfSlcbiAgICAgICAgKVxuXG4gICAgICAgIGlmICghcmVzdWx0LnN0YXJ0ZWQpIHtcbiAgICAgICAgICByZXRyeVNuYXBzaG90UmVmLmN1cnJlbnQgPSBudWxsXG4gICAgICAgICAgbWVzc2FnZXNSZWYuY3VycmVudCA9IHByZXZpb3VzTWVzc2FnZXNcbiAgICAgICAgICByZXBsYWNlTWVzc2FnZXMocHJldmlvdXNNZXNzYWdlcylcbiAgICAgICAgICBzZXNzaW9uU3RyZWFtaW5nVGV4dC5jbGVhcihzZXNzaW9uSWQpXG4gICAgICAgICAgc3RyZWFtaW5nUGxhY2Vob2xkZXJJZFJlZi5jdXJyZW50ID0gbnVsbFxuICAgICAgICAgIGFjdGl2ZVN0cmVhbUNoYXRJZFJlZi5jdXJyZW50ID0gbnVsbFxuICAgICAgICAgIGlzUHJvY2Vzc2luZ1JlZi5jdXJyZW50ID0gZmFsc2VcbiAgICAgICAgICBpZiAocmVzdWx0LnJlYXNvbiA9PT0gJ2xpbWl0Jykge1xuICAgICAgICAgICAgZG9jdW1lbnQuZGlzcGF0Y2hFdmVudChcbiAgICAgICAgICAgICAgbmV3IEN1c3RvbUV2ZW50KCdzbmFja2Jhci1ldmVudCcsIHtcbiAgICAgICAgICAgICAgICBkZXRhaWw6IHsgc2hvdzogdHJ1ZSwgc2V2ZXJpdHk6ICdpbmZvJywgbWVzc2FnZTogdCgnY2hhdC50b29NYW55QWN0aXZlU2Vzc2lvbnMnKSB9LFxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAodXNlT3JjaGVzdHJhdG9yRmFsbGJhY2sgfHwgIXR1cm5JZCkge1xuICAgICAgICBhd2FpdCByZXBsYXlWaWFPcmNoZXN0cmF0b3IoKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcmV0cnlDb21wbGV0aW9uKHtcbiAgICAgICAgY2hhdElkOiBzZXNzaW9uSWQsXG4gICAgICAgIG1lc3NhZ2VJZDogbmV3TWVzc2FnZUlkLFxuICAgICAgICBtZW1vcnlTZXNzaW9uSWQ6IHR1cm5JZCxcbiAgICAgICAgbGFuZzogYXV0aFVzZXIubGFuZyxcbiAgICAgICAgYWdlbnRJZDogU3RyaW5nKGN1cnJlbnRBZ2VudEZyb21NZXNzYWdlcyB8fCBhZ2VudD8uaWQgfHwgJycpLFxuICAgICAgICBhZ2VudE5hbWU6IGFnZW50Py5uYW1lIHx8ICcnLFxuICAgICAgICAuLi4oYWdlbnQ/LnR5cGUgIT0gbnVsbCA/IHsgYWdlbnRUeXBlOiBhZ2VudC50eXBlIH0gOiB7fSksXG4gICAgICAgIGlzV2ViU2VhcmNoQWN0aXZlOiBpc1dlYlNlYXJjaEFjdGl2ZVJlZi5jdXJyZW50LFxuICAgICAgICBpc0RlZXBTZWFyY2hBY3RpdmU6IGlzRGVlcFNlYXJjaEFjdGl2ZVJlZi5jdXJyZW50LFxuICAgICAgICAuLi4ocHJvamVjdFRvUmVxdWVzdCA/IHsgcHJvamVjdElkOiBwcm9qZWN0VG9SZXF1ZXN0IH0gOiB7fSksXG4gICAgICAgIC4uLnJlc29sdmVDbGllbnRQYXlsb2FkKGN0eENsaWVudCwgY3R4UHJvamVjdCksXG4gICAgICAgIC4uLihjdHhUYXNrPy5pZCAhPSBudWxsID8geyB0YXNrSWQ6IE51bWJlcihjdHhUYXNrLmlkKSB9IDoge30pLFxuICAgICAgfSlcblxuICAgICAgaWYgKHJlc3VsdC5zdGFydGVkKSByZXR1cm5cblxuICAgICAgaWYgKHJlc3VsdC5yZWFzb24gPT09ICd0dXJuX25vdF9mb3VuZCcpIHtcbiAgICAgICAgYXdhaXQgcmVwbGF5VmlhT3JjaGVzdHJhdG9yKClcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIHJldHJ5U25hcHNob3RSZWYuY3VycmVudCA9IG51bGxcbiAgICAgIG1lc3NhZ2VzUmVmLmN1cnJlbnQgPSBwcmV2aW91c01lc3NhZ2VzXG4gICAgICByZXBsYWNlTWVzc2FnZXMocHJldmlvdXNNZXNzYWdlcylcbiAgICAgIHNlc3Npb25TdHJlYW1pbmdUZXh0LmNsZWFyKHNlc3Npb25JZClcbiAgICAgIHN0cmVhbWluZ1BsYWNlaG9sZGVySWRSZWYuY3VycmVudCA9IG51bGxcbiAgICAgIGFjdGl2ZVN0cmVhbUNoYXRJZFJlZi5jdXJyZW50ID0gbnVsbFxuICAgICAgaXNQcm9jZXNzaW5nUmVmLmN1cnJlbnQgPSBmYWxzZVxuICAgICAgaWYgKHJlc3VsdC5yZWFzb24gPT09ICdsaW1pdCcpIHtcbiAgICAgICAgZG9jdW1lbnQuZGlzcGF0Y2hFdmVudChcbiAgICAgICAgICBuZXcgQ3VzdG9tRXZlbnQoJ3NuYWNrYmFyLWV2ZW50Jywge1xuICAgICAgICAgICAgZGV0YWlsOiB7IHNob3c6IHRydWUsIHNldmVyaXR5OiAnaW5mbycsIG1lc3NhZ2U6IHQoJ2NoYXQudG9vTWFueUFjdGl2ZVNlc3Npb25zJykgfSxcbiAgICAgICAgICB9KVxuICAgICAgICApXG4gICAgICB9XG4gICAgfSxcbiAgICBbXG4gICAgICB3YWl0aW5nUmVzcG9uc2UsXG4gICAgICBsb2FkaW5nTWVzc2FnZXMsXG4gICAgICByZXBsYWNlTWVzc2FnZXMsXG4gICAgICByZXRyeUNvbXBsZXRpb24sXG4gICAgICBhc2tNYWlhLFxuICAgICAgZmV0Y2hQcm9qZWN0cyxcbiAgICAgIGF1dGhVc2VyLFxuICAgICAgYWdlbnQsXG4gICAgICB0LFxuICAgICAgc2V0QWN0aXZlQ2hhdElkLFxuICAgIF1cbiAgKVxuXG4gIGNvbnN0IGhhbmRsZUZlZWRiYWNrID0gdXNlQ2FsbGJhY2soYXN5bmMgKGZlZWRiYWNrUHJvcDogRmVlZGJhY2ssIGNoYXRNZXNzYWdlSWQ6IHN0cmluZykgPT4ge1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgbWFpYS5DaGF0cy53YXNIZWxwZnVsQ2hhdChjaGF0TWVzc2FnZUlkLCBmZWVkYmFja1Byb3AgPT09IEZlZWRiYWNrLlRIVU1CU19VUClcbiAgICBpZiAocmVzcG9uc2UpIHtcbiAgICAgIG1lc3NhZ2VzUmVmLmN1cnJlbnQgPSBtZXNzYWdlc1JlZi5jdXJyZW50Lm1hcChtZXNzYWdlID0+IHtcbiAgICAgICAgaWYgKG1lc3NhZ2UuaWQgPT09IGNoYXRNZXNzYWdlSWQgJiYgbWVzc2FnZS5yb2xlID09PSAnYXNzaXN0YW50Jykge1xuICAgICAgICAgIHJldHVybiB7IC4uLm1lc3NhZ2UsIHdhc0hlbHBmdWw6IGZlZWRiYWNrUHJvcCA9PT0gRmVlZGJhY2suVEhVTUJTX1VQIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbWVzc2FnZVxuICAgICAgfSlcbiAgICB9XG4gIH0sIFtdKVxuXG4gIGNvbnN0IGhhbmRsZUFwcHJvdmFsRGVjaXNpb24gPSB1c2VDYWxsYmFjayhcbiAgICBhc3luYyAoXG4gICAgICB0aHJlYWRJZHM6IHN0cmluZ1tdLFxuICAgICAgZGVjaXNpb246ICdhcHByb3ZlJyB8ICdyZWplY3QnLFxuICAgICAgZWRpdGVkQWN0aW9ucz86IEFycmF5PHsgdG9vbF9uYW1lOiBzdHJpbmc7IGFyZ3M6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IH0+LFxuICAgICAgbWV0YWRhdGE/OiB7IHRvb2xfZ3JvdXBfc2x1Z3M6IHN0cmluZ1tdIH1cbiAgICApID0+IHtcbiAgICAgIGlmICghdGhyZWFkSWRzPy5sZW5ndGgpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignTm8gdGhyZWFkX2lkcyBwcm92aWRlZCBmb3IgYXBwcm92YWwgZGVjaXNpb24nKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgY29uc3QgZm91bmQgPSBmaW5kTWVzc2FnZVdpdGhBcHByb3ZhbEJ5VGhyZWFkSWRzKFxuICAgICAgICB0aHJlYWRJZHMsXG4gICAgICAgIG1lc3NhZ2VzUmVmLmN1cnJlbnQsXG4gICAgICAgIHVzZVNlc3Npb25zU3RvcmUuZ2V0U3RhdGUoKS5tZXNzYWdlcyxcbiAgICAgICAgYWN0aXZlVmlldy5nZXQoKVxuICAgICAgKVxuICAgICAgaWYgKCFmb3VuZD8ubWVzc2FnZS5hcHByb3ZhbCkge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdObyBzZSBlbmNvbnRyw7MgbWVuc2FqZSBjb24gYXBwcm92YWwgcGFyYSB0aHJlYWRfaWRzOicsIHRocmVhZElkcylcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHsgbWVzc2FnZTogbWVzc2FnZVdpdGhBcHByb3ZhbCwgc2Vzc2lvbklkOiBmb3VuZFNlc3Npb25JZCB9ID0gZm91bmRcbiAgICAgIGNvbnN0IHsgYXBwcm92YWwgfSA9IG1lc3NhZ2VXaXRoQXBwcm92YWxcbiAgICAgIGlmICghYXBwcm92YWwpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHNlc3Npb25JZCA9IGFwcHJvdmFsLnNlc3Npb25faWQgfHwgZm91bmRTZXNzaW9uSWRcbiAgICAgIGlmICghc2Vzc2lvbklkKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ05vIHNlc3Npb25faWQgZGlzcG9uaWJsZSBwYXJhIGFwcHJvdmFsOicsIHRocmVhZElkcylcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGlmIChzZXNzaW9uU3RyZWFtTWFuYWdlci5pc0FjdGl2ZShzZXNzaW9uSWQpKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBpZiAoc2Vzc2lvblN0cmVhbU1hbmFnZXIuZ2V0QWN0aXZlQ291bnQoKSA+PSBNQVhfQ09OQ1VSUkVOVF9TVFJFQU1TKSB7XG4gICAgICAgIGRvY3VtZW50LmRpc3BhdGNoRXZlbnQoXG4gICAgICAgICAgbmV3IEN1c3RvbUV2ZW50KCdzbmFja2Jhci1ldmVudCcsIHtcbiAgICAgICAgICAgIGRldGFpbDogeyBzaG93OiB0cnVlLCBzZXZlcml0eTogJ2luZm8nLCBtZXNzYWdlOiB0KCdjaGF0LnRvb01hbnlBY3RpdmVTZXNzaW9ucycpIH0sXG4gICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgY29uc3QgbWVzc2FnZUlkID0gbWVzc2FnZVdpdGhBcHByb3ZhbC5pZFxuICAgICAgY29uc3QgbmV3U3RhdHVzID0gcmVzb2x2ZUFwcHJvdmFsRGVjaXNpb25TdGF0dXMoZGVjaXNpb24pXG4gICAgICBjb25zdCBoaXRsQ29udGV4dDogSGl0bEV4ZWN1dGlvbkNvbnRleHQgPSB7XG4gICAgICAgIG1lc3NhZ2VJZCxcbiAgICAgICAgbWVzc2FnZVRleHQ6IG1lc3NhZ2VXaXRoQXBwcm92YWwubWVzc2FnZSxcbiAgICAgICAgYXBwcm92YWwsXG4gICAgICAgIHBlbmRpbmdBY3Rpb25zOiBhcHByb3ZhbC5wZW5kaW5nX2FjdGlvbnMsXG4gICAgICAgIHRocmVhZElkcyxcbiAgICAgIH1cblxuICAgICAgY29uc3QgaXNBY3RpdmVTZXNzaW9uID0gYWN0aXZlVmlldy5pcyhzZXNzaW9uSWQpXG4gICAgICBpZiAoaXNBY3RpdmVTZXNzaW9uKSB7XG4gICAgICAgIGhpdGxFeGVjdXRpb25Db250ZXh0UmVmLmN1cnJlbnQgPSBoaXRsQ29udGV4dFxuICAgICAgICBpc1Byb2Nlc3NpbmdSZWYuY3VycmVudCA9IHRydWVcbiAgICAgIH1cblxuICAgICAgY29tbWl0VG9TZXNzaW9uKHNlc3Npb25JZCwgeyAuLi5tZXNzYWdlV2l0aEFwcHJvdmFsLCBhcHByb3ZhbFN0YXR1czogbmV3U3RhdHVzIH0pXG5cbiAgICAgIGNvbnN0IHN0cmVhbU1lc3NhZ2VJZCA9IHV1aWR2NCgpXG4gICAgICBpZiAoaXNBY3RpdmVTZXNzaW9uKSB7XG4gICAgICAgIGN1cnJlbnRNZXNzYWdlSWQuY3VycmVudCA9IHN0cmVhbU1lc3NhZ2VJZFxuICAgICAgfVxuXG4gICAgICBjb25zdCBoaXRsQ3R4OiBTdHJlYW1Db250ZXh0ID0ge1xuICAgICAgICBzZXNzaW9uSWQsXG4gICAgICAgIG1lc3NhZ2VJZDogc3RyZWFtTWVzc2FnZUlkLFxuICAgICAgICBwbGFjZWhvbGRlcklkOiBzdHJlYW1pbmdQbGFjZWhvbGRlck1lc3NhZ2VJZChzdHJlYW1NZXNzYWdlSWQpLFxuICAgICAgfVxuXG4gICAgICBjb25zdCByZWxlYXNlQWN0aXZlUHJvY2Vzc2luZyA9ICgpID0+IHtcbiAgICAgICAgaWYgKCFpc0FjdGl2ZVNlc3Npb24pIHJldHVyblxuICAgICAgICBpc1Byb2Nlc3NpbmdSZWYuY3VycmVudCA9IGZhbHNlXG4gICAgICAgIGhpdGxFeGVjdXRpb25Db250ZXh0UmVmLmN1cnJlbnQgPSBudWxsXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHNlc3Npb25TdHJlYW1NYW5hZ2VyLnN0YXJ0Q29udGludWVTdHJlYW0oe1xuICAgICAgICBzZXNzaW9uSWQsXG4gICAgICAgIHBsYWNlaG9sZGVySWQ6IGhpdGxDdHgucGxhY2Vob2xkZXJJZCxcbiAgICAgICAgY29udGludWVSZXF1ZXN0OiB7XG4gICAgICAgICAgdGhyZWFkSWRzLFxuICAgICAgICAgIHNlc3Npb25JZDogYXBwcm92YWwuc2Vzc2lvbl9pZCxcbiAgICAgICAgICBkZWNpc2lvbjogcmVzb2x2ZUNvbnRpbnVlU3RyZWFtRGVjaXNpb24oZGVjaXNpb24sIGVkaXRlZEFjdGlvbnMpLFxuICAgICAgICAgIGVkaXRlZEFjdGlvbnMsXG4gICAgICAgICAgYWdlbnRJZDogYWdlbnQ/LmlkIHx8ICcnLFxuICAgICAgICAgIGxhbmc6IGF1dGhVc2VyLmxhbmcsXG4gICAgICAgICAgaXNBdXRvQXBwcm92ZUFjdGl2ZTogaXNBdXRvQXBwcm92ZUFjdGl2ZVJlZi5jdXJyZW50LFxuICAgICAgICAgIG1ldGFkYXRhLFxuICAgICAgICB9LFxuICAgICAgICB0LFxuICAgICAgICBoaXRsRXhlY3V0aW9uQ29udGV4dDogaGl0bENvbnRleHQsXG4gICAgICAgIGFnZW50SWQ6IGFnZW50Py5pZCxcbiAgICAgICAgYWdlbnROYW1lOiBhZ2VudD8ubmFtZSxcbiAgICAgICAgY2FsbGJhY2tzOiB7XG4gICAgICAgICAgb25TdHJlYW1VcGRhdGU6IGNvbnRlbnQgPT4gaGFuZGxlU3RyZWFtVXBkYXRlKGhpdGxDdHgsIGNvbnRlbnQpLFxuICAgICAgICAgIG9uRmluaXNoU3RyZWFtOiBmaW5pc2hQYXlsb2FkID0+IHtcbiAgICAgICAgICAgIHJlbGVhc2VBY3RpdmVQcm9jZXNzaW5nKClcbiAgICAgICAgICAgIGhhbmRsZVN0cmVhbUZpbmlzaChcbiAgICAgICAgICAgICAgaGl0bEN0eCxcbiAgICAgICAgICAgICAgZmluaXNoUGF5bG9hZC5jb250ZW50LFxuICAgICAgICAgICAgICBmaW5pc2hQYXlsb2FkLnNvdXJjZXMsXG4gICAgICAgICAgICAgIGZpbmlzaFBheWxvYWQubWVtb3J5U2Vzc2lvbklkLFxuICAgICAgICAgICAgICBmaW5pc2hQYXlsb2FkLmF0dGFjaG1lbnRzLFxuICAgICAgICAgICAgICBmaW5pc2hQYXlsb2FkLnN1Z2dlc3Rpb25zLFxuICAgICAgICAgICAgICBmaW5pc2hQYXlsb2FkLmNvbXBsZXRlZEFnZW50SWQsXG4gICAgICAgICAgICAgIGZpbmlzaFBheWxvYWQucmVzb2x2ZWRDb250ZXh0LFxuICAgICAgICAgICAgICBmaW5pc2hQYXlsb2FkLnJlYXNvbmluZ1xuICAgICAgICAgICAgKVxuICAgICAgICAgIH0sXG4gICAgICAgICAgb25FcnJvcjogKCkgPT4ge1xuICAgICAgICAgICAgcmVsZWFzZUFjdGl2ZVByb2Nlc3NpbmcoKVxuICAgICAgICAgICAgaGFuZGxlU3RyZWFtRXJyb3IoaGl0bEN0eClcbiAgICAgICAgICB9LFxuICAgICAgICAgIG9uQXBwcm92YWxSZXF1aXJlZDogKGFwcHJvdmFsUGF5bG9hZCwgYWNjdW11bGF0ZWRDb250ZW50KSA9PiB7XG4gICAgICAgICAgICByZWxlYXNlQWN0aXZlUHJvY2Vzc2luZygpXG4gICAgICAgICAgICBoYW5kbGVBcHByb3ZhbFJlcXVpcmVkKGhpdGxDdHgsIGFwcHJvdmFsUGF5bG9hZCwgYWNjdW11bGF0ZWRDb250ZW50KVxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9KVxuXG4gICAgICBpZiAoIXJlc3VsdC5zdGFydGVkKSB7XG4gICAgICAgIHJlbGVhc2VBY3RpdmVQcm9jZXNzaW5nKClcbiAgICAgICAgaWYgKHJlc3VsdC5yZWFzb24gPT09ICdsaW1pdCcpIHtcbiAgICAgICAgICBkb2N1bWVudC5kaXNwYXRjaEV2ZW50KFxuICAgICAgICAgICAgbmV3IEN1c3RvbUV2ZW50KCdzbmFja2Jhci1ldmVudCcsIHtcbiAgICAgICAgICAgICAgZGV0YWlsOiB7IHNob3c6IHRydWUsIHNldmVyaXR5OiAnaW5mbycsIG1lc3NhZ2U6IHQoJ2NoYXQudG9vTWFueUFjdGl2ZVNlc3Npb25zJykgfSxcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgICBbXG4gICAgICBhdXRoVXNlcixcbiAgICAgIGFnZW50LFxuICAgICAgY29tbWl0VG9TZXNzaW9uLFxuICAgICAgaGFuZGxlU3RyZWFtRXJyb3IsXG4gICAgICBoYW5kbGVTdHJlYW1VcGRhdGUsXG4gICAgICBoYW5kbGVTdHJlYW1GaW5pc2gsXG4gICAgICBoYW5kbGVBcHByb3ZhbFJlcXVpcmVkLFxuICAgICAgdCxcbiAgICBdXG4gIClcblxuICBjb25zdCBpbml0aWFsaXplQ2hhdCA9IHVzZUNhbGxiYWNrKGFzeW5jICgpID0+IHtcbiAgICBpZiAoIWZpcnN0VGltZVJlZi5jdXJyZW50KSB7XG4gICAgICBmaXJzdFRpbWVSZWYuY3VycmVudCA9IHRydWVcbiAgICB9XG4gICAgaWYgKGluaXRpYWxDaGF0SWQpIHtcbiAgICAgIGF3YWl0IGxvYWRNZXNzYWdlcygpXG4gICAgfSBlbHNlIGlmICh1c2VySW5pdGlhbE1lc3NhZ2UpIHtcbiAgICAgIGNvbnN0IGhhc0luaXRpYWxNZXNzYWdlID0gQm9vbGVhbih1c2VySW5pdGlhbE1lc3NhZ2UubWVzc2FnZT8udHJpbSgpKVxuICAgICAgY29uc3QgaGFzSW5pdGlhbEF0dGFjaG1lbnRzID0gQm9vbGVhbih1c2VySW5pdGlhbE1lc3NhZ2UuYXR0YWNobWVudHM/Lmxlbmd0aClcbiAgICAgIGNvbnN0IGhhc0luaXRpYWxGYXEgPSBCb29sZWFuKHVzZXJJbml0aWFsTWVzc2FnZS5mYXFJZClcbiAgICAgIGNvbnN0IGhhc0luaXRpYWxGdWEgPSBCb29sZWFuKHVzZXJJbml0aWFsTWVzc2FnZS5mdWFJZClcbiAgICAgIGNvbnN0IGhhc0luaXRpYWxTYyA9IEJvb2xlYW4odXNlckluaXRpYWxNZXNzYWdlLnNjSWQpXG5cbiAgICAgIGlmICghaGFzSW5pdGlhbE1lc3NhZ2UgJiYgIWhhc0luaXRpYWxBdHRhY2htZW50cyAmJiAhaGFzSW5pdGlhbEZhcSAmJiAhaGFzSW5pdGlhbEZ1YSAmJiAhaGFzSW5pdGlhbFNjKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBjb25zdCBoaXN0b3J5ID0gbWVzc2FnZXNSZWYuY3VycmVudC5tYXAoaGlzdG9yeU1lc3NhZ2UgPT4gKHtcbiAgICAgICAgY29udGVudDogaGlzdG9yeU1lc3NhZ2UubWVzc2FnZSxcbiAgICAgICAgcm9sZTogaGlzdG9yeU1lc3NhZ2UudXNlci5pZCA9PT0gYXV0aFVzZXIuaWQudG9TdHJpbmcoKSA/IENoYXRIaXN0b3J5Um9sZS5VU0VSIDogQ2hhdEhpc3RvcnlSb2xlLkFTU0lTVEFOVCxcbiAgICAgIH0pKVxuXG4gICAgICBjb25zdCB7XG4gICAgICAgIGNoaXBzUHJvamVjdDogY3R4Q2hpcHNQcm9qZWN0LFxuICAgICAgICBwcm9qZWN0OiBjdHhQcm9qZWN0LFxuICAgICAgICBjbGllbnQ6IGN0eENsaWVudCxcbiAgICAgICAgdGFzazogY3R4VGFzayxcbiAgICAgIH0gPSBjb250ZXh0UmVmLmN1cnJlbnRcbiAgICAgIGNvbnN0IHByb2plY3RUb1JlcXVlc3QgPSByZXNvbHZlUHJvamVjdFRvUmVxdWVzdChjdHhDaGlwc1Byb2plY3QsIG51bGwpID8/IGN0eFByb2plY3Q/LmlkID8/IG51bGxcblxuICAgICAgY29uc3QgaW5pdGlhbERpc3BsYXlNZXNzYWdlID0gZm9ybWF0UXVpY2tBY3Rpb25NZXNzYWdlRm9yRGlzcGxheSh1c2VySW5pdGlhbE1lc3NhZ2UubWVzc2FnZSwge1xuICAgICAgICBmdWFJZDogdXNlckluaXRpYWxNZXNzYWdlLmZ1YUlkLFxuICAgICAgICBzY0lkOiB1c2VySW5pdGlhbE1lc3NhZ2Uuc2NJZCxcbiAgICAgIH0pXG5cbiAgICAgIGVuc3VyZVNlc3Npb25JblNpZGViYXIoe1xuICAgICAgICBzZXNzaW9uSWQ6IGN1cnJlbnRDaGF0SWQuY3VycmVudCxcbiAgICAgICAgdGl0bGU6IGJ1aWxkU2lkZWJhclNlc3Npb25UaXRsZShpbml0aWFsRGlzcGxheU1lc3NhZ2UpLFxuICAgICAgICBhZ2VudCxcbiAgICAgICAgYWdlbnRJZDogYWdlbnQ/LmlkLFxuICAgICAgICBwcm9qZWN0OiBjdHhQcm9qZWN0LFxuICAgICAgICBjbGllbnQ6IGN0eENsaWVudCxcbiAgICAgICAgYXR0YWNobWVudHM6IHVzZXJJbml0aWFsTWVzc2FnZS5hdHRhY2htZW50cyxcbiAgICAgIH0pXG5cbiAgICAgIGFza01haWEoe1xuICAgICAgICBtZXNzYWdlOiB1c2VySW5pdGlhbE1lc3NhZ2UubWVzc2FnZSxcbiAgICAgICAgaGlzdG9yeSxcbiAgICAgICAgcHJvamVjdElkOiBwcm9qZWN0VG9SZXF1ZXN0LFxuICAgICAgICBsYW5nOiBhdXRoVXNlci5sYW5nLFxuICAgICAgICB1c2VySWQ6IGF1dGhVc2VyLmlkLnRvU3RyaW5nKCksXG4gICAgICAgIGZpcnN0TmFtZTogYXV0aFVzZXIuZmlyc3ROYW1lLFxuICAgICAgICBsYXN0TmFtZTogYXV0aFVzZXIubGFzdE5hbWUsXG4gICAgICAgIGNvbXBhbnlJZDogYXV0aFVzZXIuY29tcGFueV9pZC50b1N0cmluZygpLFxuICAgICAgICBjaGF0SWQ6IGN1cnJlbnRDaGF0SWQuY3VycmVudCxcbiAgICAgICAgbWVzc2FnZUlkOiBjdXJyZW50TWVzc2FnZUlkLmN1cnJlbnQsXG4gICAgICAgIGFnZW50TmFtZTogYWdlbnQ/Lm5hbWUhLFxuICAgICAgICBhZ2VudElkOiBhZ2VudD8uaWQhLFxuICAgICAgICBpc1dlYlNlYXJjaEFjdGl2ZTogaXNXZWJTZWFyY2hBY3RpdmVSZWYuY3VycmVudCxcbiAgICAgICAgaXNEZWVwU2VhcmNoQWN0aXZlOiBpc0RlZXBTZWFyY2hBY3RpdmVSZWYuY3VycmVudCxcbiAgICAgICAgaXNBdXRvQXBwcm92ZUFjdGl2ZTogaXNBdXRvQXBwcm92ZUFjdGl2ZVJlZi5jdXJyZW50LFxuICAgICAgICAuLi4oY3R4UHJvamVjdD8uZmVlSWQgIT0gbnVsbCA/IHsgZmVlSWQ6IE51bWJlcihjdHhQcm9qZWN0LmZlZUlkKSB9IDoge30pLFxuICAgICAgICAuLi5yZXNvbHZlQ2xpZW50UGF5bG9hZChjdHhDbGllbnQsIGN0eFByb2plY3QpLFxuICAgICAgICAuLi4oY3R4UHJvamVjdD8ubmFtZSA/IHsgcHJvamVjdE5hbWU6IGN0eFByb2plY3QubmFtZSB9IDoge30pLFxuICAgICAgICAuLi4oY3R4VGFzaz8uaWQgIT0gbnVsbFxuICAgICAgICAgID8geyB0YXNrSWQ6IE51bWJlcihjdHhUYXNrLmlkKSwgLi4uKGN0eFRhc2submFtZSA/IHsgdGFza05hbWU6IGN0eFRhc2submFtZSB9IDoge30pIH1cbiAgICAgICAgICA6IHt9KSxcbiAgICAgICAgLi4uKHVzZXJJbml0aWFsTWVzc2FnZS5hdHRhY2htZW50cyA/IHsgYXR0YWNobWVudHM6IHVzZXJJbml0aWFsTWVzc2FnZS5hdHRhY2htZW50cyB9IDoge30pLFxuICAgICAgICAuLi4odXNlckluaXRpYWxNZXNzYWdlLmZhcUlkID8geyBmYXFJZDogdXNlckluaXRpYWxNZXNzYWdlLmZhcUlkIH0gOiB7fSksXG4gICAgICAgIC4uLih1c2VySW5pdGlhbE1lc3NhZ2UuYWdlbnRTdWdnZXN0aW9uSWQgPyB7IGFnZW50U3VnZ2VzdGlvbklkOiB1c2VySW5pdGlhbE1lc3NhZ2UuYWdlbnRTdWdnZXN0aW9uSWQgfSA6IHt9KSxcbiAgICAgICAgLi4uKHVzZXJJbml0aWFsTWVzc2FnZS5mdWFJZCA/IHsgZnVhSWQ6IHVzZXJJbml0aWFsTWVzc2FnZS5mdWFJZCB9IDoge30pLFxuICAgICAgICAuLi4odXNlckluaXRpYWxNZXNzYWdlLnNjSWQgPyB7IHNjSWQ6IHVzZXJJbml0aWFsTWVzc2FnZS5zY0lkIH0gOiB7fSksXG4gICAgICAgIC4uLihhZ2VudD8uZW50aXR5ICE9IG51bGwgPyB7IGFnZW50RW50aXR5OiBhZ2VudC5lbnRpdHkgfSA6IHt9KSxcbiAgICAgICAgLi4uKGFnZW50Py50eXBlICE9IG51bGwgPyB7IGFnZW50VHlwZTogYWdlbnQudHlwZSB9IDoge30pLFxuICAgICAgICAuLi4oYWdlbnQ/LmVtb2ppICE9IG51bGwgPyB7IGFnZW50RW1vamk6IGFnZW50LmVtb2ppIH0gOiB7fSksXG4gICAgICAgIC4uLihidWlsZENvbnRleHRNZXNzYWdlKHVzZXJJbml0aWFsTWVzc2FnZS5tZW50aW9ucylcbiAgICAgICAgICA/IHsgY29udGV4dE1lc3NhZ2U6IGJ1aWxkQ29udGV4dE1lc3NhZ2UodXNlckluaXRpYWxNZXNzYWdlLm1lbnRpb25zKSB9XG4gICAgICAgICAgOiB7fSksXG4gICAgICAgIC4uLih1c2VySW5pdGlhbE1lc3NhZ2UuY29udGV4dERhdGEgPyB7IGNvbnRleHREYXRhOiB1c2VySW5pdGlhbE1lc3NhZ2UuY29udGV4dERhdGEgfSA6IHt9KSxcbiAgICAgIH0pXG4gICAgfVxuICB9LCBbXG4gICAgaW5pdGlhbENoYXRJZCxcbiAgICB1c2VySW5pdGlhbE1lc3NhZ2UsXG4gICAgcHJvamVjdCxcbiAgICBjbGllbnQsXG4gICAgdGFzayxcbiAgICBhdXRoVXNlcixcbiAgICBhZ2VudCxcbiAgICBhc2tNYWlhLFxuICAgIGlzV2ViU2VhcmNoQWN0aXZlLFxuICAgIGlzRGVlcFNlYXJjaEFjdGl2ZSxcbiAgXSlcblxuICBjb25zdCByZXNldENoYXQgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgY29uc3QgcHJldmlvdXNTZXNzaW9uSWQgPSBjdXJyZW50Q2hhdElkLmN1cnJlbnRcbiAgICBzZXNzaW9uU3RyZWFtaW5nVGV4dC5jbGVhcihwcmV2aW91c1Nlc3Npb25JZClcbiAgICByZWFzb25pbmdTdG9yZS5jbGVhcigpXG4gICAgY3VycmVudE1lc3NhZ2VJZC5jdXJyZW50ID0gdXVpZHY0KClcbiAgICBjdXJyZW50VXNlclF1ZXN0aW9uLmN1cnJlbnQgPSBudWxsXG4gICAgY3VycmVudENoYXRJZC5jdXJyZW50ID0gdXVpZHY0KClcbiAgICBzZXRBY3RpdmVTZXNzaW9uSWQoY3VycmVudENoYXRJZC5jdXJyZW50KVxuICAgIHJlcG9ydGVkRXZlbnQuY3VycmVudCA9IGZhbHNlXG4gICAgc3RyZWFtaW5nUGxhY2Vob2xkZXJJZFJlZi5jdXJyZW50ID0gbnVsbFxuICAgIGFjdGl2ZVN0cmVhbUNoYXRJZFJlZi5jdXJyZW50ID0gbnVsbFxuICAgIHNldEFjdGl2ZUNoYXRJZChudWxsKVxuICB9LCBbc2V0QWN0aXZlQ2hhdElkXSlcblxuICBjb25zdCBzdG9wR2VuZXJhdGlvbiA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBzdG9wU3RyZWFtaW5nKClcbiAgICBpc1Byb2Nlc3NpbmdSZWYuY3VycmVudCA9IGZhbHNlXG4gIH0sIFtzdG9wU3RyZWFtaW5nXSlcblxuICByZXR1cm4ge1xuICAgIG1lc3NhZ2VzLFxuICAgIGxvYWRpbmdNZXNzYWdlcyxcbiAgICBpc0xvYWRpbmdNb3JlTWVzc2FnZXMsXG4gICAgd2FpdGluZ1Jlc3BvbnNlLFxuICAgIGlzV3JpdGluZyxcbiAgICBsb2FkaW5nTWVzc2FnZSxcbiAgICBzdHJlYW1BY3Rpdml0eSxcbiAgICBhY3RpdmVMb2FkaW5ncyxcbiAgICBjdXJyZW50UHJvamVjdCxcbiAgICBjdXJyZW50Q2hhdElkOiBjdXJyZW50Q2hhdElkLmN1cnJlbnQsXG4gICAgY3VycmVudE1lc3NhZ2VJZDogY3VycmVudE1lc3NhZ2VJZC5jdXJyZW50LFxuXG4gICAgc2VuZE1lc3NhZ2UsXG4gICAgcmV0cnlNZXNzYWdlLFxuICAgIGNoYW5nZVByb2plY3QsXG4gICAgaGFuZGxlRmVlZGJhY2ssXG4gICAgaGFuZGxlQXBwcm92YWxEZWNpc2lvbixcbiAgICBoYW5kbGVTY3JvbGwsXG4gICAgaW5pdGlhbGl6ZUNoYXQsXG4gICAgcmVzZXRDaGF0LFxuICAgIHN0b3BHZW5lcmF0aW9uLFxuXG4gICAgaXNEaXNhYmxlZDogd2FpdGluZ1Jlc3BvbnNlIHx8IGxvYWRpbmdNZXNzYWdlcyxcbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTQSxXQUFXLEVBQUVDLE1BQU0sRUFBRUMsU0FBUyxFQUFFQyxRQUFRLFFBQVEsT0FBTztBQUNoRSxTQUFTQyxTQUFTLFFBQVEsV0FBVztBQUNyQyxTQUFTQyxFQUFFLElBQUlDLE1BQU0sUUFBUSxNQUFNO0FBQ25DLFNBQVNDLGVBQWUsUUFBUSxvQkFBb0I7QUFDcEQsU0FBU0MscUJBQXFCLFFBQVEsMEJBQTBCO0FBQ2hFLFNBQVNDLElBQUksUUFBUSxTQUFTO0FBRTlCLFNBQ0VDLGtDQUFrQyxFQUNsQ0MsNkJBQTZCLEVBQzdCQyw2QkFBNkIsRUFDN0JDLDRCQUE0QixFQUM1QkMsNkJBQTZCLEVBQzdCQyx3QkFBd0IsRUFDeEJDLGlCQUFpQixFQUNqQkMsb0JBQW9CLEVBQ3BCQyx1QkFBdUIsRUFDdkJDLDRCQUE0QixFQUM1QkMsNkJBQTZCLEVBQzdCQywwQkFBMEIsRUFDMUJDLHNCQUFzQixFQUN0QkMsK0JBQStCLEVBQy9CQyw0QkFBNEIsRUFDNUJDLHlCQUF5QixFQUN6QkMsdUJBQXVCLEVBQ3ZCQyw0QkFBNEIsRUFDNUJDLDZCQUE2QixFQUM3QkMsNkNBQTZDLEVBQzdDQyw4QkFBOEIsRUFDOUJDLGdDQUFnQyxFQUNoQ0Msa0NBQWtDLEVBQ2xDQywrQkFBK0IsRUFDL0JDLG1DQUFtQyxFQUNuQ0Msc0NBQXNDLEVBQ3RDQyx3Q0FBd0MsRUFDeENDLHVCQUF1QixFQUN2QkMsdUJBQXVCLEVBQ3ZCQywyQkFBMkIsRUFDM0JDLDJCQUEyQixFQUMzQkMsOEJBQThCLEVBQzlCQyxpQ0FBaUMsRUFDakNDLDJCQUEyQixFQUMzQkMsb0NBQW9DLEVBQ3BDQyw2QkFBNkIsRUFDN0JDLDJCQUEyQixFQUMzQkMsZ0NBQWdDLEVBQ2hDQywrQkFBK0Is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
|