@projectcor/maia-components 2.44.3 → 2.44.5-0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/App.js +44 -19
- package/lib/components/atoms/ActionableButton.spec.js +111 -0
- package/lib/components/atoms/AgentActivityIndicator/AgentActivityIndicator.spec.js +52 -0
- package/lib/components/atoms/AgentActivityIndicator/AgentActivityIndicator.utils.spec.js +11 -0
- package/lib/components/atoms/ApprovalBox/ApprovalBox.spec.js +135 -0
- package/lib/components/atoms/AttachmentCard/AttachmentCard.spec.js +123 -0
- package/lib/components/atoms/AttachmentCard/AttachmentCardAudio.helpers.js +65 -0
- package/lib/components/atoms/AttachmentCard/AttachmentCardAudio.helpers.spec.js +66 -0
- package/lib/components/atoms/AttachmentCard/AttachmentCardAudio.js +5 -51
- package/lib/components/atoms/AttachmentCard/AttachmentCardAudio.spec.js +211 -0
- package/lib/components/atoms/AttachmentCard/AttachmentCardImage.spec.js +78 -0
- package/lib/components/atoms/AttachmentPreviewModal/AttachmentPreviewModal.helpers.js +55 -0
- package/lib/components/atoms/AttachmentPreviewModal/AttachmentPreviewModal.helpers.spec.js +41 -0
- package/lib/components/atoms/AttachmentPreviewModal/AttachmentPreviewModal.js +18 -76
- package/lib/components/atoms/AttachmentPreviewModal/AttachmentPreviewModal.spec.js +253 -0
- package/lib/components/atoms/AttachmentPreviewModal/ExcelPreview.spec.js +80 -0
- package/lib/components/atoms/AttachmentPreviewModal/PptPreview.helpers.js +31 -0
- package/lib/components/atoms/AttachmentPreviewModal/PptPreview.helpers.spec.js +33 -0
- package/lib/components/atoms/AttachmentPreviewModal/PptPreview.js +3 -31
- package/lib/components/atoms/AttachmentPreviewModal/PptPreview.spec.js +25 -0
- package/lib/components/atoms/AttachmentPreviewModal/WordPreview.helpers.js +4 -0
- package/lib/components/atoms/AttachmentPreviewModal/WordPreview.helpers.spec.js +11 -0
- package/lib/components/atoms/AttachmentPreviewModal/WordPreview.js +2 -4
- package/lib/components/atoms/AttachmentPreviewModal/WordPreview.spec.js +77 -0
- package/lib/components/atoms/Backdrop/Backdrop.spec.js +28 -0
- package/lib/components/atoms/CardMenu/CardMenu.spec.js +56 -0
- package/lib/components/atoms/ChatClientSelector/ChatClientSelector.spec.js +67 -0
- package/lib/components/atoms/Checkbox/Checkbox.spec.js +27 -0
- package/lib/components/atoms/Chip/Chip.spec.js +82 -0
- package/lib/components/atoms/ChipLlm/ChipLlm.spec.js +26 -0
- package/lib/components/atoms/ClientSelector/ClientSelector.spec.js +88 -0
- package/lib/components/atoms/ContextMentionChip/ContextMentionChip.spec.js +29 -0
- package/lib/components/atoms/ContextMentionChip/MentionOverflowLabel.spec.js +46 -0
- package/lib/components/atoms/ContextMentionChip/buildChipElement.helpers.js +227 -0
- package/lib/components/atoms/ContextMentionChip/buildChipElement.helpers.spec.js +77 -0
- package/lib/components/atoms/ContextMentionChip/buildChipElement.js +15 -255
- package/lib/components/atoms/ContextMentionChip/buildChipElement.spec.js +81 -0
- package/lib/components/atoms/ContextMentionEditor/ContextMentionEditor.helpers.js +31 -0
- package/lib/components/atoms/ContextMentionEditor/ContextMentionEditor.helpers.spec.js +48 -0
- package/lib/components/atoms/ContextMentionEditor/ContextMentionEditor.js +5 -34
- package/lib/components/atoms/ContextMentionEditor/ContextMentionEditor.spec.js +231 -0
- package/lib/components/atoms/ContextMentionItem/ContextMentionItem.spec.js +107 -0
- package/lib/components/atoms/ContextMentionPopover/ContextMentionPopover.spec.js +136 -0
- package/lib/components/atoms/CopyToClipboard.spec.js +74 -0
- package/lib/components/atoms/EditableLabel/EditableLabel.spec.js +76 -0
- package/lib/components/atoms/EntitySelector/EntitySelector.spec.js +86 -0
- package/lib/components/atoms/Expand/Expand.spec.js +57 -0
- package/lib/components/atoms/Fade/Fade.spec.js +31 -0
- package/lib/components/atoms/FeedbackButton/FeedbackButton.spec.js +75 -0
- package/lib/components/atoms/FrequentlyAskedQuestions/FrequentlyAskedQuestions.spec.js +104 -0
- package/lib/components/atoms/FrequentlyUsedActions/FrequentlyUsedActions.js +3 -1
- package/lib/components/atoms/FrequentlyUsedActions/FrequentlyUsedActions.spec.js +91 -0
- package/lib/components/atoms/FrequentlyUsedActions/FrequentlyUsedActions.styles.js +19 -7
- package/lib/components/atoms/HelpButton.spec.js +87 -0
- package/lib/components/atoms/ImagePreview/ImagePreview.spec.js +96 -0
- package/lib/components/atoms/ListMenuOption/ListMenuOption.spec.js +54 -0
- package/lib/components/atoms/LoadingFaqs/LoadingFaqs.spec.js +21 -0
- package/lib/components/atoms/LoadingSearchClients/LoadingSearchClients.spec.js +20 -0
- package/lib/components/atoms/LoadingSearchProjects/LoadingSearchProjects.spec.js +26 -0
- package/lib/components/atoms/LoadingText/LoadingText.spec.js +25 -0
- package/lib/components/atoms/MAIAButton/MAIAButton.spec.js +42 -0
- package/lib/components/atoms/MAIAError/MAIAError.spec.js +27 -0
- package/lib/components/atoms/MAIAInput/MAIAInput.helpers.js +12 -0
- package/lib/components/atoms/MAIAInput/MAIAInput.helpers.spec.js +26 -0
- package/lib/components/atoms/MAIAInput/MAIAInput.js +4 -10
- package/lib/components/atoms/MAIAInput/MAIAInput.spec.js +430 -0
- package/lib/components/atoms/MAIAInput/MAIAInputEditor.helpers.js +50 -0
- package/lib/components/atoms/MAIAInput/MAIAInputEditor.helpers.spec.js +20 -0
- package/lib/components/atoms/MAIAInput/MAIAInputEditor.js +8 -60
- package/lib/components/atoms/MAIAInput/MAIAInputEditor.spec.js +53 -0
- package/lib/components/atoms/MAIAInput/maiaInputLayout.spec.js +22 -0
- package/lib/components/atoms/MaiaStreamdown/MaiaStreamdown.spec.js +64 -0
- package/lib/components/atoms/MaiaWrapper/MaiaWrapper.spec.js +43 -0
- package/lib/components/atoms/MaiaWrapper/MaiaWrapperBase.spec.js +114 -0
- package/lib/components/atoms/MaiaWrapper/ModernMaiaWrapper.spec.js +51 -0
- package/lib/components/atoms/ModalClientAccess/ModalClientAccess.spec.js +48 -0
- package/lib/components/atoms/ModalProject/ModalProject.spec.js +66 -0
- package/lib/components/atoms/NextPageLoader.spec.js +37 -0
- package/lib/components/atoms/OnboardingModalButton/OnboardingModal.spec.js +20 -0
- package/lib/components/atoms/OnboardingModalButton/OnboardingModalButton.helpers.js +17 -0
- package/lib/components/atoms/OnboardingModalButton/OnboardingModalButton.helpers.spec.js +35 -0
- package/lib/components/atoms/OnboardingModalButton/OnboardingModalButton.js +3 -15
- package/lib/components/atoms/OnboardingModalButton/OnboardingModalButton.spec.js +47 -0
- package/lib/components/atoms/OptionAccessibility/OptionAccessibility.spec.js +86 -0
- package/lib/components/atoms/PrimaryButton.spec.js +42 -0
- package/lib/components/atoms/ProjectSelector/ProjectSelector.spec.js +69 -0
- package/lib/components/atoms/ReasoningBlock/ReasoningBlock.js +7 -2
- package/lib/components/atoms/ReasoningBlock/ReasoningBlock.spec.js +69 -0
- package/lib/components/atoms/ReasoningBlock/ReasoningBlock.styles.js +21 -16
- package/lib/components/atoms/ReasoningBlock/ReasoningSteps.js +7 -5
- package/lib/components/atoms/ReasoningBlock/ReasoningSteps.spec.js +59 -0
- package/lib/components/atoms/ReasoningBlock/ReasoningTimeline.js +72 -52
- package/lib/components/atoms/ReasoningBlock/ReasoningTimeline.spec.js +132 -0
- package/lib/components/atoms/ReasoningBlock/groupParallelSteps.spec.js +162 -0
- package/lib/components/atoms/ReasoningBlock/reasoningLeading.js +6 -1
- package/lib/components/atoms/ReasoningBlock/reasoningLeading.spec.js +70 -0
- package/lib/components/atoms/ReasoningBlock/reasoningLiveNarration.js +36 -15
- package/lib/components/atoms/ReasoningBlock/reasoningLiveNarration.spec.js +120 -0
- package/lib/components/atoms/ReasoningBlock/reasoningMotion.js +4 -0
- package/lib/components/atoms/ReasoningBlock/reasoningTimeline.helpers.js +10 -0
- package/lib/components/atoms/ReasoningBlock/reasoningTimeline.helpers.spec.js +31 -0
- package/lib/components/atoms/ReasoningBlock/useCollapsibleHeight.js +52 -0
- package/lib/components/atoms/ReasoningBlock/useCollapsibleHeight.spec.js +90 -0
- package/lib/components/atoms/SessionGeneratingDot/SessionGeneratingDot.spec.js +16 -0
- package/lib/components/atoms/SkillsDropdown/SkillsDropdown.spec.js +107 -0
- package/lib/components/atoms/SlashCommandChip/SlashCommandChip.spec.js +24 -0
- package/lib/components/atoms/SlashCommandDropdown/SlashCommandDropdown.spec.js +85 -0
- package/lib/components/atoms/Switch/Switch.spec.js +41 -0
- package/lib/components/atoms/TextArea/CustomTextArea.spec.js +52 -0
- package/lib/components/atoms/TextArea/TextArea.spec.js +68 -0
- package/lib/components/atoms/ThirdButton.spec.js +29 -0
- package/lib/components/atoms/VideoModal/VideoModal.spec.js +68 -0
- package/lib/components/atoms/WithAppCfg.spec.js +60 -0
- package/lib/components/index.js +2 -1
- package/lib/components/molecules/AbmSection/AbmAccessibilitySection/AbmAccessibilitySection.helpers.js +37 -0
- package/lib/components/molecules/AbmSection/AbmAccessibilitySection/AbmAccessibilitySection.helpers.spec.js +53 -0
- package/lib/components/molecules/AbmSection/AbmAccessibilitySection/AbmAccessibilitySection.js +5 -29
- package/lib/components/molecules/AbmSection/AbmAccessibilitySection/AbmAccessibilitySection.spec.js +371 -0
- package/lib/components/molecules/AbmSection/AbmGeneralSection.helpers.js +39 -0
- package/lib/components/molecules/AbmSection/AbmGeneralSection.helpers.spec.js +57 -0
- package/lib/components/molecules/AbmSection/AbmGeneralSection.js +6 -40
- package/lib/components/molecules/AbmSection/AbmGeneralSection.spec.js +227 -0
- package/lib/components/molecules/AbmSection/AbmKnowledgeSection.helpers.js +86 -0
- package/lib/components/molecules/AbmSection/AbmKnowledgeSection.helpers.spec.js +108 -0
- package/lib/components/molecules/AbmSection/AbmKnowledgeSection.js +18 -90
- package/lib/components/molecules/AbmSection/AbmKnowledgeSection.spec.js +254 -0
- package/lib/components/molecules/AbmSection/AbmLoaderFiles.helpers.js +17 -0
- package/lib/components/molecules/AbmSection/AbmLoaderFiles.helpers.spec.js +50 -0
- package/lib/components/molecules/AbmSection/AbmLoaderFiles.js +5 -15
- package/lib/components/molecules/AbmSection/AbmLoaderFiles.spec.js +94 -0
- package/lib/components/molecules/AgentInputBlock/AgentInputBlockMessage.js +83 -0
- package/lib/components/molecules/AgentInputBlock/AgentInputBlockMessage.styles.js +30 -0
- package/lib/components/molecules/AgentInputBlock/index.js +5 -0
- package/lib/components/molecules/AgentInputBlock/resolveAgentInputBlock.js +52 -0
- package/lib/components/molecules/AgentInputBlock/resolveAgentInputBlock.spec.js +76 -0
- package/lib/components/molecules/AgentInputBlock/resolveLegacyContextSession.js +20 -0
- package/lib/components/molecules/AgentInputBlock/resolveLegacyContextSession.spec.js +34 -0
- package/lib/components/molecules/AgentInputBlock/useAgentChangeModelAction.js +36 -0
- package/lib/components/molecules/ChatAIClientSelector/ChatAIClientSelector.spec.js +66 -0
- package/lib/components/molecules/ChatAIContent/ChatAIContent.js +7 -3
- package/lib/components/molecules/ChatAIContent/ChatAIContent.spec.js +145 -0
- package/lib/components/molecules/ChatAIHistory/ChatAIHistory.spec.js +204 -0
- package/lib/components/molecules/ChatAIHome/ChatAIHome.js +21 -6
- package/lib/components/molecules/ChatAIHome/ChatAIHome.spec.js +246 -0
- package/lib/components/molecules/ChatAIHome/ChatAIHomeMaiaker.spec.js +86 -0
- package/lib/components/molecules/ChatAIMessages/ChatAICreateAgentActions.spec.js +104 -0
- package/lib/components/molecules/ChatAIMessages/ChatAIMessages.helpers.js +54 -0
- package/lib/components/molecules/ChatAIMessages/ChatAIMessages.helpers.spec.js +77 -0
- package/lib/components/molecules/ChatAIMessages/ChatAIMessages.js +19 -47
- package/lib/components/molecules/ChatAIMessages/ChatAIMessages.spec.js +410 -0
- package/lib/components/molecules/ChatAIMessages/ChatAISuggestions.spec.js +46 -0
- package/lib/components/molecules/ChatAIMessages/newStyles.js +29 -26
- package/lib/components/molecules/ChatAIModal/ChatAIModal.helpers.js +147 -4
- package/lib/components/molecules/ChatAIModal/ChatAIModal.helpers.spec.js +471 -0
- package/lib/components/molecules/ChatAIModal/ChatAIModal.js +64 -108
- package/lib/components/molecules/ChatAIModal/ChatAIModal.spec.js +659 -0
- package/lib/components/molecules/ChatAIModal/components/ChatAiAgentOptions/ChatAiAgentOptions.helpers.js +5 -0
- package/lib/components/molecules/ChatAIModal/components/ChatAiAgentOptions/ChatAiAgentOptions.helpers.spec.js +33 -0
- package/lib/components/molecules/ChatAIModal/components/ChatAiAgentOptions/ChatAiAgentOptions.js +3 -2
- package/lib/components/molecules/ChatAIModal/components/ChatAiAgentOptions/ChatAiAgentOptions.spec.js +116 -0
- package/lib/components/molecules/ChatAIModal/components/ChatAiModalFooter/ChatAiModalFooter.js +15 -153
- package/lib/components/molecules/ChatAIModal/components/ChatAiModalFooter/ChatAiModalFooter.spec.js +134 -0
- package/lib/components/molecules/ChatAIModal/components/ChatAiModalFooter/ChatAiModalFooter.styles.js +2 -26
- package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.helpers.js +30 -0
- package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.helpers.spec.js +95 -0
- package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.js +76 -86
- package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.spec.js +241 -0
- package/lib/components/molecules/ChatAIModal/components/MaiaMinimizedPill/MaiaMinimizedPill.spec.js +37 -0
- package/lib/components/molecules/ChatAIModal/constants.spec.js +16 -0
- package/lib/components/molecules/ChatAIModal/floatingPanelMotion/FloatingPanelMotion.spec.js +22 -0
- package/lib/components/molecules/ChatAIModal/floatingPanelMotion/useFloatingPanelDragTilt.spec.js +67 -0
- package/lib/components/molecules/ChatAIModal/layout.spec.js +72 -0
- package/lib/components/molecules/ChatAIMyAgents/ChatAIMyAgents.spec.js +172 -0
- package/lib/components/molecules/ChatAIMySkills/ChatAIMySkills.spec.js +128 -0
- package/lib/components/molecules/ChatAIProjectSelector/ChatAIProjectSelector.spec.js +66 -0
- package/lib/components/molecules/ChatFooter/ChatFooter.js +5 -3
- package/lib/components/molecules/ChatFooter/ChatFooter.spec.js +355 -0
- package/lib/components/molecules/ChatFooter/ChatFooterCorAccess.spec.js +10 -0
- package/lib/components/molecules/ChatFooter/ChatFooterFaqs.helpers.js +48 -0
- package/lib/components/molecules/ChatFooter/ChatFooterFaqs.helpers.spec.js +82 -0
- package/lib/components/molecules/ChatFooter/ChatFooterFaqs.js +9 -44
- package/lib/components/molecules/ChatFooter/ChatFooterFaqs.spec.js +139 -0
- package/lib/components/molecules/ContextMentionInput/ContextMentionInput.spec.js +84 -0
- package/lib/components/molecules/MessageFeedback/MessageFeedback.spec.js +116 -0
- package/lib/components/molecules/ProjectSummaryChat/ProjectSummaryChat.spec.js +126 -0
- package/lib/components/molecules/ProjectSummaryConfig/ProjectSummaryConfig.spec.js +115 -0
- package/lib/components/molecules/ProjectSummaryContent/ProjectSummaryContent.spec.js +79 -0
- package/lib/components/molecules/ProjectSummaryModal/ProjectSummaryModal.spec.js +37 -0
- package/lib/components/molecules/Sidebar/Sidebar.js +41 -23
- package/lib/components/molecules/Sidebar/Sidebar.spec.js +453 -0
- package/lib/components/organisms/AbmAgentModal/AbmAgentModal.helpers.js +198 -0
- package/lib/components/organisms/AbmAgentModal/AbmAgentModal.helpers.spec.js +385 -0
- package/lib/components/organisms/AbmAgentModal/AbmAgentModal.js +56 -171
- package/lib/components/organisms/AbmAgentModal/AbmAgentModal.spec.js +1125 -0
- package/lib/components/organisms/AbmSkillGenerateModal/AbmSkillGenerateModal.spec.js +112 -0
- package/lib/components/organisms/AbmSkillModal/AbmSkillModal.spec.js +405 -0
- package/lib/components/organisms/ChatAI/ChatAI.spec.js +174 -0
- package/lib/components/organisms/ChatAIPage/ChatAIPage.js +525 -0
- package/lib/components/organisms/ChatAIPage/ChatAIPage.spec.js +231 -0
- package/lib/components/organisms/ChatAIPage/ChatAIPage.styles.js +16 -0
- package/lib/components/organisms/ChatAIPage/ChatAIPageHeader.js +253 -0
- package/lib/components/organisms/ChatAIPage/ChatAIPageHeader.spec.js +139 -0
- package/lib/components/organisms/ChatAIPage/ChatAIPageHeader.styles.js +13 -0
- package/lib/components/organisms/ChatAIPage/ChatAIPageHome.js +267 -0
- package/lib/components/organisms/ChatAIPage/ChatAIPageHome.spec.js +261 -0
- package/lib/components/organisms/ChatAIPage/ChatAIPageHome.styles.js +194 -0
- package/lib/components/organisms/ChatAIPage/ChatAIPageHomeActionCardSlot.js +105 -0
- package/lib/components/organisms/ChatAIPage/ChatAIPageHomeActionCardSlot.spec.js +73 -0
- package/lib/components/organisms/ChatAIPage/ChatAIPageHomeActionCards.skeleton.js +38 -0
- package/lib/components/organisms/ChatAIPage/getDaypart.js +9 -0
- package/lib/components/organisms/ChatAIPage/getDaypart.spec.js +19 -0
- package/lib/components/organisms/ChatAIPage/index.js +3 -0
- package/lib/components/organisms/ClientAIButton/ClientAIButton.spec.js +53 -0
- package/lib/components/organisms/DeleteAgentModal/DeleteAgentModal.spec.js +59 -0
- package/lib/components/organisms/DeleteQuestionModal/DeleteQuestionModal.spec.js +79 -0
- package/lib/components/organisms/EditQuestionModal/EditQuestionModal.spec.js +86 -0
- package/lib/components/organisms/ModalFileExceeds/ModalFileExceeds.spec.js +49 -0
- package/lib/components/organisms/ProjectAIButton/ProjectAIButton.spec.js +67 -0
- package/lib/components/organisms/ProjectSummary/ProjectSummary.spec.js +117 -0
- package/lib/components/organisms/SnackBar/Snackbar.spec.js +66 -0
- package/lib/components/organisms/SourcesInformation/SourceItem.spec.js +19 -0
- package/lib/components/organisms/SourcesInformation/SourcesInformationModal.spec.js +52 -0
- package/lib/constants/maiaExternalConnectorsAccess.spec.js +29 -0
- package/lib/constants/permissions/index.js +2 -2
- package/lib/constants/permissions/utils.js +4 -1
- package/lib/constants/permissions/utils.spec.js +128 -0
- package/lib/dev/DevMaiaPage.js +30 -0
- package/lib/dev/DevReasoningTimeline.js +68 -37
- package/lib/dev/Providers.js +5 -3
- package/lib/hooks/frequentlyUsedActionsCache.js +17 -0
- package/lib/hooks/frequentlyUsedActionsCache.spec.js +25 -0
- package/lib/hooks/useAccessClient/useAccessClient.spec.js +149 -0
- package/lib/hooks/useAgentModel/useAgentModel.spec.js +83 -0
- package/lib/hooks/useAgentModel/useCreateAgent.spec.js +231 -0
- package/lib/hooks/useAgentModel/useDeleteAgent.spec.js +183 -0
- package/lib/hooks/useAgentModel/useUpdateAgent.spec.js +313 -0
- package/lib/hooks/useAgentSuggestions.spec.js +89 -0
- package/lib/hooks/useCaretPosition.spec.js +58 -0
- package/lib/hooks/useChatManager/useChatManager.helpers.js +353 -0
- package/lib/hooks/useChatManager/useChatManager.helpers.spec.js +506 -0
- package/lib/hooks/useChatManager/useChatManager.js +76 -351
- package/lib/hooks/useChatManager/useChatManager.spec.js +1261 -0
- package/lib/hooks/useChatMessages/useChatMessages.helpers.js +109 -0
- package/lib/hooks/useChatMessages/useChatMessages.helpers.spec.js +176 -0
- package/lib/hooks/useChatMessages/useChatMessages.js +12 -82
- package/lib/hooks/useChatMessages/useChatMessages.spec.js +379 -0
- package/lib/hooks/useChats/useChats.spec.js +208 -0
- package/lib/hooks/useClientSearch.helpers.js +36 -0
- package/lib/hooks/useClientSearch.helpers.spec.js +52 -0
- package/lib/hooks/useClientSearch.js +4 -32
- package/lib/hooks/useClientSearch.spec.js +86 -0
- package/lib/hooks/useContextMentions.helpers.js +152 -0
- package/lib/hooks/useContextMentions.helpers.spec.js +143 -0
- package/lib/hooks/useContextMentions.js +2 -163
- package/lib/hooks/useContextMentions.spec.js +239 -0
- package/lib/hooks/useContextMentions.types.js +2 -0
- package/lib/hooks/useContextPinPopover.helpers.js +95 -0
- package/lib/hooks/useContextPinPopover.helpers.spec.js +115 -0
- package/lib/hooks/useContextPinPopover.js +16 -75
- package/lib/hooks/useContextPinPopover.spec.js +159 -0
- package/lib/hooks/useContinueLegacyContextInNewChat/index.js +2 -0
- package/lib/hooks/useContinueLegacyContextInNewChat/useContinueLegacyContextInNewChat.js +93 -0
- package/lib/hooks/useDebounce.spec.js +42 -0
- package/lib/hooks/useEntitySearch.helpers.js +359 -0
- package/lib/hooks/useEntitySearch.helpers.spec.js +321 -0
- package/lib/hooks/useEntitySearch.js +38 -391
- package/lib/hooks/useEntitySearch.spec.js +443 -0
- package/lib/hooks/useEvent.spec.js +45 -0
- package/lib/hooks/useFrequentlyAskedQuestions.spec.js +222 -0
- package/lib/hooks/useFrequentlyUsedActions.js +60 -22
- package/lib/hooks/useFrequentlyUsedActions.spec.js +135 -0
- package/lib/hooks/useIsMaiaPageRoute.js +26 -0
- package/lib/hooks/useIsMaiaPageRoute.spec.js +26 -0
- package/lib/hooks/useKnowledge/deleteKnowledge.spec.js +122 -0
- package/lib/hooks/useKnowledge/downloadKnowledge.spec.js +148 -0
- package/lib/hooks/useKnowledge/saveKnowledge.spec.js +104 -0
- package/lib/hooks/useKnowledge/useKnowledgeOperations.spec.js +178 -0
- package/lib/hooks/useMaiaChatSessionMeta/index.js +2 -0
- package/lib/hooks/useMaiaChatSessionMeta/useMaiaChatSessionMeta.js +24 -0
- package/lib/hooks/useMentionAllowedTypes.spec.js +89 -0
- package/lib/hooks/useMentionPopover.helpers.js +41 -0
- package/lib/hooks/useMentionPopover.helpers.spec.js +71 -0
- package/lib/hooks/useMentionPopover.js +9 -35
- package/lib/hooks/useMentionPopover.spec.js +215 -0
- package/lib/hooks/useMinimizedPillBottomOffset.helpers.js +47 -0
- package/lib/hooks/useMinimizedPillBottomOffset.helpers.spec.js +132 -0
- package/lib/hooks/useMinimizedPillBottomOffset.js +15 -45
- package/lib/hooks/useMinimizedPillBottomOffset.spec.js +89 -0
- package/lib/hooks/useMinimizedPillNoveltyDot/useMinimizedPillNoveltyDot.spec.js +67 -0
- package/lib/hooks/useModal/useModal.spec.js +73 -0
- package/lib/hooks/useOrchestratorStream/useOrchestratorStream.spec.js +192 -0
- package/lib/hooks/useProjectSearch.helpers.js +61 -0
- package/lib/hooks/useProjectSearch.helpers.spec.js +70 -0
- package/lib/hooks/useProjectSearch.js +4 -58
- package/lib/hooks/useProjectSearch.spec.js +91 -0
- package/lib/hooks/useProjectSummary.spec.js +193 -0
- package/lib/hooks/useProjectSummaryConfig.helpers.js +62 -0
- package/lib/hooks/useProjectSummaryConfig.helpers.spec.js +92 -0
- package/lib/hooks/useProjectSummaryConfig.js +14 -52
- package/lib/hooks/useProjectSummaryConfig.spec.js +133 -0
- package/lib/hooks/useReasoningTrace/reasoningStore.spec.js +112 -0
- package/lib/hooks/useRecentClientsSearch.helpers.js +33 -0
- package/lib/hooks/useRecentClientsSearch.helpers.spec.js +33 -0
- package/lib/hooks/useRecentClientsSearch.js +4 -32
- package/lib/hooks/useRecentClientsSearch.spec.js +85 -0
- package/lib/hooks/useRecentContexts.spec.js +139 -0
- package/lib/hooks/useResize.spec.js +37 -0
- package/lib/hooks/useSkillsCatalog.spec.js +88 -0
- package/lib/hooks/useSlashCommands.spec.js +139 -0
- package/lib/hooks/useSmoothStreamText/useSmoothStreamText.spec.js +101 -0
- package/lib/hooks/useSnackBarManager/useSnackBarManager.spec.js +33 -0
- package/lib/hooks/useStreamResponse.spec.js +199 -0
- package/lib/hooks/useT.spec.js +20 -0
- package/lib/hooks/useToggle.spec.js +33 -0
- package/lib/hooks/useToggleFavorite/useToggleFavorite.spec.js +171 -0
- package/lib/index.js +5 -2
- package/lib/lang/br/index.js +26 -1
- package/lib/lang/en/index.js +26 -1
- package/lib/lang/es/index.js +26 -1
- package/lib/lang/fr/index.js +26 -1
- package/lib/services/maia/Access/updateAccess.spec.js +137 -0
- package/lib/services/maia/Actions/getFrequentlyUsedActions.js +1 -1
- package/lib/services/maia/Actions/getFrequentlyUsedActions.spec.js +56 -0
- package/lib/services/maia/Actions/getSlashCommands.spec.js +91 -0
- package/lib/services/maia/Agents/connectors.spec.js +359 -0
- package/lib/services/maia/Agents/createAgent.spec.js +55 -0
- package/lib/services/maia/Agents/deleteAgent.spec.js +57 -0
- package/lib/services/maia/Agents/fetchAgentDetail.spec.js +108 -0
- package/lib/services/maia/Agents/getAgentById.spec.js +190 -0
- package/lib/services/maia/Agents/getAgentModels.spec.js +190 -0
- package/lib/services/maia/Agents/getAgentSuggestions.spec.js +89 -0
- package/lib/services/maia/Agents/getAgents.helpers.js +181 -0
- package/lib/services/maia/Agents/getAgents.helpers.spec.js +211 -0
- package/lib/services/maia/Agents/getAgents.js +78 -242
- package/lib/services/maia/Agents/getAgents.spec.js +697 -0
- package/lib/services/maia/Agents/setAgentToolGroups.spec.js +45 -0
- package/lib/services/maia/Agents/toggleFavorite.spec.js +59 -0
- package/lib/services/maia/Agents/updateAgent.spec.js +48 -0
- package/lib/services/maia/Chats/deleteChat.spec.js +31 -0
- package/lib/services/maia/Chats/getChatMessages.spec.js +150 -0
- package/lib/services/maia/Chats/getChatsByUserId.spec.js +149 -0
- package/lib/services/maia/Chats/markSessionAsRead.spec.js +30 -0
- package/lib/services/maia/Chats/patchChat.spec.js +41 -0
- package/lib/services/maia/Chats/wasHelpfulChat.spec.js +28 -0
- package/lib/services/maia/Faqs/getFrequentlyAskedQuestions.spec.js +58 -0
- package/lib/services/maia/Knowledge/delete.spec.js +45 -0
- package/lib/services/maia/Knowledge/download.spec.js +78 -0
- package/lib/services/maia/Knowledge/save.spec.js +58 -0
- package/lib/services/maia/Orchestrator/orchestrator.helpers.js +130 -0
- package/lib/services/maia/Orchestrator/orchestrator.helpers.spec.js +153 -0
- package/lib/services/maia/Orchestrator/orchestrator.js +38 -121
- package/lib/services/maia/Orchestrator/orchestrator.spec.js +181 -0
- package/lib/services/maia/RecentClients/getRecentClients.spec.js +52 -0
- package/lib/services/maia/RecentContexts/getRecentContexts.spec.js +103 -0
- package/lib/services/maia/RecentProjects/getRecentProjects.spec.js +82 -0
- package/lib/services/maia/RecentTasks/getRecentTasks.spec.js +63 -0
- package/lib/services/maia/RecentUsers/getRecentUsers.spec.js +82 -0
- package/lib/services/maia/Skills/createSkill.spec.js +68 -0
- package/lib/services/maia/Skills/deleteSkill.spec.js +42 -0
- package/lib/services/maia/Skills/generateSkill.spec.js +48 -0
- package/lib/services/maia/Skills/getSkills.spec.js +152 -0
- package/lib/services/maia/Skills/updateSkill.spec.js +62 -0
- package/lib/services/maia/client.spec.js +56 -0
- package/lib/services/utils/fetchCOR.spec.js +211 -0
- package/lib/services/utils/getCookie.spec.js +20 -0
- package/lib/services/utils/mapChatMessages.spec.js +254 -0
- package/lib/store/chatsSidebarOptimistic.spec.js +112 -0
- package/lib/store/maiaLastChatPersistence.spec.js +22 -0
- package/lib/store/maiaPanelSessionPersistence.spec.js +62 -0
- package/lib/store/sessions/sessionNotificationSound.spec.js +145 -0
- package/lib/store/sessions/sessionNotifications.helpers.js +45 -0
- package/lib/store/sessions/sessionNotifications.helpers.spec.js +63 -0
- package/lib/store/sessions/sessionNotifications.js +35 -41
- package/lib/store/sessions/sessionNotifications.spec.js +106 -0
- package/lib/store/sessions/sessionStreamManager.js +40 -52
- package/lib/store/sessions/sessionStreamManager.spec.js +503 -0
- package/lib/store/sessions/sessions.types.spec.js +16 -0
- package/lib/store/sessions/useSessionsStore.spec.js +135 -0
- package/lib/store/useChatsStore.spec.js +619 -0
- package/lib/store/useFaqsStore.spec.js +57 -0
- package/lib/styles/cascade.js +29 -3
- package/lib/styles/transitions.js +3 -1
- package/lib/test/mockSseStream.js +121 -0
- package/lib/test/streamdownCodeMock.js +6 -0
- package/lib/test/streamdownMock.js +12 -0
- package/lib/types/agentModal.js +1 -1
- package/lib/types/global.d.js +1 -1
- package/lib/utils/actionCategoryMap.spec.js +18 -0
- package/lib/utils/agentDisplayName.spec.js +44 -0
- package/lib/utils/autoApproveStorage.spec.js +25 -0
- package/lib/utils/chatInputFiles.spec.js +39 -0
- package/lib/utils/contextMentionIcons.spec.js +41 -0
- package/lib/utils/contextMentionLabel.spec.js +13 -0
- package/lib/utils/contextMentionTriggers.spec.js +38 -0
- package/lib/utils/contextMentionTypeLabel.spec.js +14 -0
- package/lib/utils/corConnectorMentionTypes.spec.js +23 -0
- package/lib/utils/entityLinkRender.spec.js +72 -0
- package/lib/utils/fileDownloadHelper.spec.js +67 -0
- package/lib/utils/formatQuickActionMessage.spec.js +27 -0
- package/lib/utils/formatUnreadCount.spec.js +12 -0
- package/lib/utils/getUnitFileSize.spec.js +18 -0
- package/lib/utils/hitlAnalytics.spec.js +100 -0
- package/lib/utils/hoursPlannerQuickActionType.js +74 -1
- package/lib/utils/hoursPlannerQuickActionType.spec.js +64 -0
- package/lib/utils/imagePreprocessor.helpers.js +28 -0
- package/lib/utils/imagePreprocessor.helpers.spec.js +28 -0
- package/lib/utils/imagePreprocessor.js +12 -37
- package/lib/utils/imagePreprocessor.spec.js +112 -0
- package/lib/utils/maiaPageRoute.js +24 -0
- package/lib/utils/maiaPageRoute.spec.js +23 -0
- package/lib/utils/mapBackendLang.spec.js +19 -0
- package/lib/utils/navigateContextEntity.spec.js +50 -0
- package/lib/utils/normalizeAgentConnectors.spec.js +107 -0
- package/lib/utils/orchestratorSubagents.spec.js +32 -0
- package/lib/utils/reasoningMappers.spec.js +103 -0
- package/lib/utils/recentContextsHomeLimit.spec.js +32 -0
- package/lib/utils/renderContextMentions.spec.js +158 -0
- package/lib/utils/retryCompletion.spec.js +99 -0
- package/lib/utils/skillContentSize.spec.js +13 -0
- package/lib/utils/slashCommandMarker.spec.js +43 -0
- package/lib/utils/sortManagerHoursHomeFuas.spec.js +51 -0
- package/lib/utils/sseStreamContent.spec.js +31 -0
- package/lib/utils/streamActivityMessages.js +32 -19
- package/lib/utils/streamActivityMessages.spec.js +227 -0
- package/lib/utils/validateTrimmedFields.spec.js +26 -0
- package/package.json +1 -1
- package/README.md +0 -2
|
@@ -54,25 +54,8 @@ import { ChatAISuggestions } from './ChatAISuggestions';
|
|
|
54
54
|
import { ChatAICreateAgentActions } from './ChatAICreateAgentActions';
|
|
55
55
|
import { EVENTS, useEvent } from '../../../hooks/useEvent';
|
|
56
56
|
import { downloadFileFromUrl } from '../../../utils/fileDownloadHelper';
|
|
57
|
+
import { canOpenAttachmentPreview, computeDistanceFromBottom, computeRemovableTurnSpace, computeReservedTurnSpace, computeTurnScrollDurationMs, extractFeedbackSessionId, findLastQuestionId, isAudioAttachment, shouldShowScrollToBottom, turnAnchorOffset } from './ChatAIMessages.helpers';
|
|
57
58
|
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
58
|
-
/**
|
|
59
|
-
* Al anclar el turno, la pregunta no se pega al borde superior: dejamos asomar
|
|
60
|
-
* la cola del mensaje anterior para no perder el hilo de la conversación.
|
|
61
|
-
* Relativo al viewport porque un valor fijo se come demasiado en pantallas cortas.
|
|
62
|
-
*/
|
|
63
|
-
var turnAnchorOffset = function turnAnchorOffset(viewportHeight) {
|
|
64
|
-
return Math.min(viewportHeight * 0.18, 200);
|
|
65
|
-
};
|
|
66
|
-
|
|
67
|
-
/**
|
|
68
|
-
* Duración del scroll animado: base y tope para recorridos largos, para que un
|
|
69
|
-
* salto de varias pantallas no se sienta un latigazo.
|
|
70
|
-
*/
|
|
71
|
-
var TURN_SCROLL_DURATION_MS = 600;
|
|
72
|
-
var TURN_SCROLL_MAX_DURATION_MS = 800;
|
|
73
|
-
|
|
74
|
-
/** Distancia a partir de la cual la duración ya está en su tope. */
|
|
75
|
-
var TURN_SCROLL_LONG_DISTANCE_PX = 1200;
|
|
76
59
|
var MessageWrapper = function MessageWrapper(_ref) {
|
|
77
60
|
var isCurrentUser = _ref.isCurrentUser,
|
|
78
61
|
children = _ref.children,
|
|
@@ -236,13 +219,15 @@ var MessageItem = /*#__PURE__*/memo(function (props) {
|
|
|
236
219
|
var isActiveStreaming = !!isStreaming || isStreamingPlaceholder;
|
|
237
220
|
var hasStreamText = Boolean(streamingText);
|
|
238
221
|
var reasoningTrace = useReasoningTrace(isAssistant && isActiveStreaming ? id : '');
|
|
239
|
-
var streamNarrationInTimeline = isAssistant && shouldStreamNarrationInTimeline(reasoningTrace.steps, streamActivity, streamingText,
|
|
222
|
+
var streamNarrationInTimeline = isAssistant && shouldStreamNarrationInTimeline(reasoningTrace.steps, streamActivity, streamingText, {
|
|
223
|
+
messageId: id
|
|
224
|
+
});
|
|
240
225
|
var showStreamingBody = isActiveStreaming && hasStreamText && !streamNarrationInTimeline;
|
|
241
226
|
var showActivityIndicator = isAssistant && isActiveStreaming && !!streamActivity;
|
|
242
227
|
var messageAttachments = attachments && attachments.length > 0 ? attachments : !isAssistant && Array.isArray(sources) ? sources : [];
|
|
243
228
|
var handleAttachmentClick = function handleAttachmentClick(attachment) {
|
|
244
229
|
// Permitir previsualización si tiene archivo local o URLs del backend
|
|
245
|
-
if (attachment
|
|
230
|
+
if (canOpenAttachmentPreview(attachment)) {
|
|
246
231
|
setPreviewAttachment(attachment);
|
|
247
232
|
}
|
|
248
233
|
};
|
|
@@ -329,10 +314,7 @@ var MessageItem = /*#__PURE__*/memo(function (props) {
|
|
|
329
314
|
}, id);
|
|
330
315
|
}
|
|
331
316
|
var handleFeedbackClick = function handleFeedbackClick(feedback) {
|
|
332
|
-
|
|
333
|
-
return questionId !== 'answer';
|
|
334
|
-
}).join('-');
|
|
335
|
-
handleFeedback === null || handleFeedback === void 0 || handleFeedback(feedback, sessionId);
|
|
317
|
+
handleFeedback === null || handleFeedback === void 0 || handleFeedback(feedback, extractFeedbackSessionId(id));
|
|
336
318
|
};
|
|
337
319
|
return /*#__PURE__*/_jsxs(SCMessageItemWrapper, {
|
|
338
320
|
$isAssistant: isAssistant,
|
|
@@ -348,14 +330,8 @@ var MessageItem = /*#__PURE__*/memo(function (props) {
|
|
|
348
330
|
})), !!messageAttachments.length && /*#__PURE__*/_jsx(SCAttachmentsRow, {
|
|
349
331
|
$isAssistant: isAssistant,
|
|
350
332
|
children: messageAttachments.map(function (attachment, index) {
|
|
351
|
-
var _attachment$type, _attachment$name;
|
|
352
333
|
// Detectar si es un archivo de audio
|
|
353
|
-
|
|
354
|
-
var attachmentName = (attachment === null || attachment === void 0 || (_attachment$name = attachment.name) === null || _attachment$name === void 0 ? void 0 : _attachment$name.toLowerCase()) || '';
|
|
355
|
-
var isAudioFile = attachmentType.startsWith('audio/') || ['flac', 'm4a', 'mp3', 'mp4', 'oga', 'ogg', 'wav', 'webm'].includes(attachmentType) || ['.flac', '.m4a', '.mp3', '.mp4', '.oga', '.ogg', '.wav', '.webm'].some(function (ext) {
|
|
356
|
-
return attachmentName.endsWith(ext);
|
|
357
|
-
});
|
|
358
|
-
if (isAudioFile) {
|
|
334
|
+
if (isAudioAttachment(attachment)) {
|
|
359
335
|
return /*#__PURE__*/_jsx(AttachmentCardAudio, {
|
|
360
336
|
attachment: attachment
|
|
361
337
|
}, "".concat(attachment.id, "-").concat(attachment.name));
|
|
@@ -426,7 +402,9 @@ var ChatAIMessagesInner = function ChatAIMessagesInner(_ref5) {
|
|
|
426
402
|
onScrollToBottom = _ref5.onScrollToBottom,
|
|
427
403
|
attachments = _ref5.attachments,
|
|
428
404
|
agents = _ref5.agents,
|
|
429
|
-
expanded = _ref5.expanded
|
|
405
|
+
expanded = _ref5.expanded,
|
|
406
|
+
_ref5$skipEnterAnimat = _ref5.skipEnterAnimation,
|
|
407
|
+
skipEnterAnimation = _ref5$skipEnterAnimat === void 0 ? false : _ref5$skipEnterAnimat;
|
|
430
408
|
var _useT = useT(),
|
|
431
409
|
t = _useT.t;
|
|
432
410
|
var _useGlobalContext = useGlobalContext(),
|
|
@@ -513,8 +491,8 @@ var ChatAIMessagesInner = function ChatAIMessagesInner(_ref5) {
|
|
|
513
491
|
clientHeight = el.clientHeight;
|
|
514
492
|
// El spacer del turno es alto reservado, no contenido: si no lo descontamos
|
|
515
493
|
// la flecha y el gradiente de abajo quedan encendidos durante todo el turno.
|
|
516
|
-
var distanceFromBottom = scrollHeight
|
|
517
|
-
var shouldShow = distanceFromBottom
|
|
494
|
+
var distanceFromBottom = computeDistanceFromBottom(scrollHeight, spacerHeightRef.current, scrollTop, clientHeight);
|
|
495
|
+
var shouldShow = shouldShowScrollToBottom(distanceFromBottom);
|
|
518
496
|
if (showScrollToBottomRef.current !== shouldShow) {
|
|
519
497
|
showScrollToBottomRef.current = shouldShow;
|
|
520
498
|
setShowScrollToBottom(shouldShow);
|
|
@@ -567,7 +545,7 @@ var ChatAIMessagesInner = function ChatAIMessagesInner(_ref5) {
|
|
|
567
545
|
var from = el.scrollTop;
|
|
568
546
|
var distance = top - from;
|
|
569
547
|
if (Math.abs(distance) < 1) return;
|
|
570
|
-
var duration =
|
|
548
|
+
var duration = computeTurnScrollDurationMs(distance);
|
|
571
549
|
var startedAt = performance.now();
|
|
572
550
|
var _step = function step(now) {
|
|
573
551
|
var progress = Math.min(1, (now - startedAt) / duration);
|
|
@@ -603,8 +581,7 @@ var ChatAIMessagesInner = function ChatAIMessagesInner(_ref5) {
|
|
|
603
581
|
var drainTurnSpace = useCallback(function () {
|
|
604
582
|
var el = messagesRef.current;
|
|
605
583
|
if (!el || spacerHeightRef.current <= 0) return;
|
|
606
|
-
|
|
607
|
-
setSpacerHeight(Math.max(0, spacerHeightRef.current - removable));
|
|
584
|
+
setSpacerHeight(computeRemovableTurnSpace(el.scrollHeight, el.clientHeight, el.scrollTop, spacerHeightRef.current));
|
|
608
585
|
}, [setSpacerHeight]);
|
|
609
586
|
|
|
610
587
|
/**
|
|
@@ -659,7 +636,7 @@ var ChatAIMessagesInner = function ChatAIMessagesInner(_ref5) {
|
|
|
659
636
|
// Reservamos lo mínimo para que `targetScrollTop` sea alcanzable. El
|
|
660
637
|
// spacer se inserta de una (es alto reservado, no contenido visible);
|
|
661
638
|
// lo único que se percibe es el desplazamiento animado.
|
|
662
|
-
setSpacerHeight(
|
|
639
|
+
setSpacerHeight(computeReservedTurnSpace(el.clientHeight, turnHeight, el.clientHeight));
|
|
663
640
|
animateScrollTo(targetScrollTop);
|
|
664
641
|
}, [measureTurn, setSpacerHeight, updateScrollAffordances, animateScrollTo]);
|
|
665
642
|
|
|
@@ -833,14 +810,7 @@ var ChatAIMessagesInner = function ChatAIMessagesInner(_ref5) {
|
|
|
833
810
|
// Al enviar un mensaje: anclamos el turno y hacemos el único scroll del ciclo.
|
|
834
811
|
useEffect(function () {
|
|
835
812
|
if (loadingMessages || isLoadingMoreMessages) return;
|
|
836
|
-
var questionId =
|
|
837
|
-
for (var index = messages.length - 1; index >= 0; index -= 1) {
|
|
838
|
-
var _messages$index;
|
|
839
|
-
if ((_messages$index = messages[index]) !== null && _messages$index !== void 0 && (_messages$index = _messages$index.id) !== null && _messages$index !== void 0 && _messages$index.startsWith('question-')) {
|
|
840
|
-
questionId = messages[index].id;
|
|
841
|
-
break;
|
|
842
|
-
}
|
|
843
|
-
}
|
|
813
|
+
var questionId = findLastQuestionId(messages);
|
|
844
814
|
if (!questionId || questionId === lastReservedQuestionRef.current) return;
|
|
845
815
|
lastReservedQuestionRef.current = questionId;
|
|
846
816
|
requestAnimationFrame(function () {
|
|
@@ -1072,12 +1042,14 @@ var ChatAIMessagesInner = function ChatAIMessagesInner(_ref5) {
|
|
|
1072
1042
|
onScroll: handleScrollToBottom,
|
|
1073
1043
|
children: /*#__PURE__*/_jsx(SCMessagesInner, {
|
|
1074
1044
|
$scrollOnParent: isScrollOnParent,
|
|
1045
|
+
$skipEnter: skipEnterAnimation,
|
|
1075
1046
|
children: messagesContent
|
|
1076
1047
|
})
|
|
1077
1048
|
}) : /*#__PURE__*/_jsx(SCMessagesInner, {
|
|
1078
1049
|
ref: messagesRef,
|
|
1079
1050
|
onScroll: handleScrollToBottom,
|
|
1080
1051
|
$scrollOnParent: false,
|
|
1052
|
+
$skipEnter: skipEnterAnimation,
|
|
1081
1053
|
children: messagesContent
|
|
1082
1054
|
}), /*#__PURE__*/_jsx(SCMessagesGradientBottom, {
|
|
1083
1055
|
$show: showBottomGradient,
|
|
@@ -1113,4 +1085,4 @@ var ChatAIMessagesInner = function ChatAIMessagesInner(_ref5) {
|
|
|
1113
1085
|
);
|
|
1114
1086
|
};
|
|
1115
1087
|
export var ChatAIMessages = /*#__PURE__*/React.memo(ChatAIMessagesInner);
|
|
1116
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSZWFjdCIsIm1lbW8iLCJ1c2VDYWxsYmFjayIsInVzZUVmZmVjdCIsInVzZUxheW91dEVmZmVjdCIsInVzZVJlZiIsInVzZVN0YXRlIiwiY3JlYXRlRWxlbWVudCIsIl9jcmVhdGVFbGVtZW50IiwiQXR0YWNobWVudENhcmQiLCJBcHByb3ZhbEJveCIsIkF0dGFjaG1lbnRQcmV2aWV3TW9kYWwiLCJBdHRhY2htZW50Q2FyZEF1ZGlvIiwiTWFpYVN0cmVhbWRvd24iLCJDaGF0SGlzdG9yeVJvbGUiLCJyZW5kZXJUZXh0V2l0aE1lbnRpb25zIiwiaGFzSW5saW5lTWFya2VycyIsImlzTWFpYWtlckFnZW50IiwidXNlVXNlciIsInVzZVQiLCJ1c2VDaGF0TWFuYWdlciIsInVzZVNtb290aFN0cmVhbVRleHQiLCJ1c2VTdHJlYW1pbmdNZXNzYWdlIiwiTG9hZGluZ1RleHQiLCJBZ2VudEFjdGl2aXR5SW5kaWNhdG9yIiwiUmVhc29uaW5nQmxvY2siLCJzaG91bGRTdHJlYW1OYXJyYXRpb25JblRpbWVsaW5lIiwiUmVhc29uaW5nVGltZWxpbmUiLCJTQ1RpbWVsaW5lSW5kaWNhdG9yIiwiaXNTdHJlYW1pbmdQbGFjZWhvbGRlck1lc3NhZ2VJZCIsInJlc29sdmVTdHJlYW1Mb2FkaW5nRGlzcGxheSIsInJlc29sdmVSZXRyeVR1cm5JZCIsImZpbmRVc2VyTWVzc2FnZUZvclJldHJ5IiwidXNlUmVhc29uaW5nVHJhY2UiLCJMb2FkZXIiLCJGYWRlIiwicGF0Y2hNYWlhUGFuZWxTZXNzaW9uIiwicmVhZE1haWFQYW5lbFNlc3Npb24iLCJNZXNzYWdlRnJvbVVzZXIiLCJNZXNzYWdlRnJvbU90aGVyIiwiTWVzc2FnZUNvbnRlbnRGcm9tVXNlciIsIk1lc3NhZ2VDb250ZW50RnJvbU90aGVyIiwiTWVzc2FnZUZlZWRiYWNrIiwiU0NDQUlNZXNzYWdlV3JhcHBlciIsIlNjcm9sbFRvQm90dG9tQnV0dG9uIiwiU0NTY3JvbGxJY29uU3dhcCIsIlNDV3JpdGluZ0RvdHMiLCJTQ01lc3NhZ2VzT3V0ZXIiLCJTQ01lc3NhZ2VzU2Nyb2xsIiwiU0NNZXNzYWdlc0lubmVyIiwiU0NUdXJuU3BhY2VyIiwiU0NPcHRpb25zTGlzdCIsIlNDT3B0aW9uSXRlbSIsIlNDTWVzc2FnZUl0ZW1XcmFwcGVyIiwiU0NNZXNzYWdlSXRlbUlubmVyIiwiU0NBdHRhY2htZW50c1JvdyIsIlNDQXBwcm92YWxBY3Rpb25zQ29sdW1uIiwiU0NMb2FkaW5nTWVzc2FnZXNDb2x1bW4iLCJTQ01lc3NhZ2VzR3JhZGllbnRUb3AiLCJTQ01lc3NhZ2VzR3JhZGllbnRCb3R0b20iLCJGZWVkYmFjayIsInVzZUdsb2JhbENvbnRleHQiLCJFbnRpdHlMaW5rQ3VzdG9tTGluayIsImdldEVudGl0eUxpbmtXcmFwcGVyQ2xhc3NOYW1lIiwiQ2hhdEFJU3VnZ2VzdGlvbnMiLCJDaGF0QUlDcmVhdGVBZ2VudEFjdGlvbnMiLCJFVkVOVFMiLCJ1c2VFdmVudCIsImRvd25sb2FkRmlsZUZyb21VcmwiLCJqc3giLCJfanN4IiwiRnJhZ21lbnQiLCJfRnJhZ21lbnQiLCJqc3hzIiwiX2pzeHMiLCJ0dXJuQW5jaG9yT2Zmc2V0Iiwidmlld3BvcnRIZWlnaHQiLCJNYXRoIiwibWluIiwiVFVSTl9TQ1JPTExfRFVSQVRJT05fTVMiLCJUVVJOX1NDUk9MTF9NQVhfRFVSQVRJT05fTVMiLCJUVVJOX1NDUk9MTF9MT05HX0RJU1RBTkNFX1BYIiwiTWVzc2FnZVdyYXBwZXIiLCJfcmVmIiwiaXNDdXJyZW50VXNlciIsImNoaWxkcmVuIiwicHJvcHMiLCJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCJfZXhjbHVkZWQiLCJNZXNzYWdlQ29tcG9uZW50IiwiX29iamVjdFNwcmVhZCIsIk1lc3NhZ2VDb250ZW50V3JhcHBlciIsIl9yZWYyIiwiX2V4Y2x1ZGVkMiIsIk1lc3NhZ2VDb250ZW50Q29tcG9uZW50IiwiTWVzc2FnZU9wdGlvbnMiLCJfcmVmMyIsIm9wdGlvbnMiLCJoYW5kbGVTZWxlY3RPcHRpb24iLCJfdXNlU3RhdGUiLCJfdXNlU3RhdGUyIiwiX3NsaWNlZFRvQXJyYXkiLCJzZWxlY3RlZE9wdGlvbiIsInNldFNlbGVjdGVkT3B0aW9uIiwiaGFuZGxlU2VsZWN0Iiwib3B0aW9uIiwibWFwIiwiJGhhc1NlbGVjdGlvbiIsIiRkaW1tZWQiLCJpZCIsIm9uQ2xpY2siLCJuYW1lIiwiU3RyZWFtaW5nTWVzc2FnZUJvZHkiLCJfcHJvcHMkY3JlYXRlQWdlbnRGb2wiLCJfcHJvcHMkc3VnZ2VzdGlvbnMiLCJzdHJlYW1pbmdUZXh0IiwiaXNTdHJlYW1pbmciLCJtZXNzYWdlSWQiLCJyYXdUZXh0IiwibWVzc2FnZSIsIndpbkZsYWdzIiwid2luZG93IiwiZGlzcGxheVRleHQiLCJlbmFibGVkIiwibWF4Q2hhcnNQZXJGcmFtZSIsInNuYXBUb1dvcmRCb3VuZGFyeSIsInN0cmVhbUxhZ01zIiwidGFyZ2V0TGFnTXMiLCJzdHJlYW1BZGFwdCIsImFkYXB0VG9CYWNrZW5kUmF0ZSIsInN0cmVhbUJ1ZmZlck1zIiwidGFyZ2V0QnVmZmVyTXMiLCJzdHJlYW1NaW5CdWZmZXIiLCJtaW5CdWZmZXJDaGFycyIsInN0cmVhbVdhcm11cE1zIiwid2FybXVwTXMiLCJjcmVhdGVBZ2VudEFjdGlvbnNBZ2VudElkIiwiY3JlYXRlQWdlbnRGb2xsb3dVcCIsImFnZW50SWQiLCJoYXNNZW50aW9ucyIsIm1lbnRpb25Ob2RlcyIsImlzRnJvbnRlbmRDYW5jZWxsZWQiLCJjbGFzc05hbWUiLCJzdHlsZSIsImRpc3BsYXkiLCJ2YXJpYW50IiwiY29tcG9uZW50cyIsImEiLCJpc0FuaW1hdGluZyIsImlzQXNzaXN0YW50IiwiaXNFcnJvciIsImFwcHJvdmFsIiwib25SZXRyeSIsImNvbnRlbnQiLCJzb3VyY2VzIiwidW5kZWZpbmVkIiwiaGFuZGxlRmVlZGJhY2siLCJoYW5kbGVGZWVkYmFja0NsaWNrIiwiZGlzYWJsZUZlZWRiYWNrIiwic3VnZ2VzdGlvbnMiLCJsZW5ndGgiLCJvblNlbGVjdFN1Z2dlc3Rpb24iLCJzdWdnZXN0aW9uIiwiaGFuZGxlU3VnZ2VzdGlvbkNsaWNrIiwiZGlzYWJsZWQiLCJzdWdnZXN0aW9uc0Rpc2FibGVkIiwiaGlkZGVuIiwiaXNMYXN0TWVzc2FnZSIsIk1lc3NhZ2VJdGVtIiwiX3Byb3BzJHJlYXNvbmluZyIsIl9wcm9wcyRwcm9qZWN0TWV0YWRhdCIsInVzZXIiLCJhdXRoVXNlciIsImlzQ2hhbmdlUHJvamVjdCIsImhhbmRsZUFwcHJvdmFsRGVjaXNpb24iLCJoYW5kbGVSZXRyeSIsInJvbGUiLCJhdHRhY2htZW50cyIsImFwcHJvdmFsU3RhdHVzIiwiaGFzU2VsZWN0ZWRTdWdnZXN0aW9uIiwic3RyZWFtQWN0aXZpdHkiLCJfdXNlU3RhdGUzIiwiX3VzZVN0YXRlNCIsInByZXZpZXdBdHRhY2htZW50Iiwic2V0UHJldmlld0F0dGFjaG1lbnQiLCJVU0VSIiwidG9TdHJpbmciLCJBU1NJU1RBTlQiLCJpc1N0cmVhbWluZ1BsYWNlaG9sZGVyIiwiaXNBY3RpdmVTdHJlYW1pbmciLCJoYXNTdHJlYW1UZXh0IiwiQm9vbGVhbiIsInJlYXNvbmluZ1RyYWNlIiwic3RyZWFtTmFycmF0aW9uSW5UaW1lbGluZSIsInN0ZXBzIiwic2hvd1N0cmVhbWluZ0JvZHkiLCJzaG93QWN0aXZpdHlJbmRpY2F0b3IiLCJtZXNzYWdlQXR0YWNobWVudHMiLCJBcnJheSIsImlzQXJyYXkiLCJoYW5kbGVBdHRhY2htZW50Q2xpY2siLCJhdHRhY2htZW50IiwiZmlsZSIsIkZpbGUiLCJvcmlnaW5hbEZpbGUiLCJ1cmxfdGh1bWJuYWlsIiwidXJsX29yaWdpbmFsIiwidXJsX2ZpbGUiLCJoYW5kbGVDbG9zZVByZXZpZXciLCJoYW5kbGVBdHRhY2htZW50RG93bmxvYWQiLCJfcmVmNCIsIl9hc3luY1RvR2VuZXJhdG9yIiwiX3JlZ2VuZXJhdG9yUnVudGltZSIsIm1hcmsiLCJfY2FsbGVlIiwiZXh0ZW5zaW9uIiwiZmlsZU5hbWUiLCJmaWxlVXJsIiwiYmxvYlVybCIsImRvd25sb2FkZWRGaWxlIiwibGluayIsIl90Iiwid3JhcCIsIl9jb250ZXh0IiwicHJldiIsIm5leHQiLCJpbmNsdWRlcyIsImNvbmNhdCIsInR5cGUiLCJzZW50IiwiVVJMIiwiY3JlYXRlT2JqZWN0VVJMIiwiYWJydXB0IiwiZG9jdW1lbnQiLCJocmVmIiwiZG93bmxvYWQiLCJib2R5IiwiYXBwZW5kQ2hpbGQiLCJjbGljayIsInNldFRpbWVvdXQiLCJyZW1vdmVDaGlsZCIsInJldm9rZU9iamVjdFVSTCIsImNvbnNvbGUiLCJlcnJvciIsInN0b3AiLCJfeCIsImFwcGx5IiwiYXJndW1lbnRzIiwiaGFzRmVlZGJhY2siLCIkaXNBc3Npc3RhbnQiLCJtZXNzYWdlRXh0cmFDb250ZW50IiwiZmVlZGJhY2siLCJzZXNzaW9uSWQiLCJzcGxpdCIsImZpbHRlciIsInF1ZXN0aW9uSWQiLCJqb2luIiwidHJhY2UiLCJyZWFzb25pbmciLCJpbmRleCIsIl9hdHRhY2htZW50JHR5cGUiLCJfYXR0YWNobWVudCRuYW1lIiwiYXR0YWNobWVudFR5cGUiLCJ0b0xvd2VyQ2FzZSIsImF0dGFjaG1lbnROYW1lIiwiaXNBdWRpb0ZpbGUiLCJzdGFydHNXaXRoIiwic29tZSIsImV4dCIsImVuZHNXaXRoIiwicG9zaXRpb25JbmRleCIsIm9uRG93bmxvYWQiLCJhY3Rpdml0eSIsImNvbXBhY3QiLCJwZW5kaW5nX2FjdGlvbnMiLCJhY3Rpb25zIiwic3RhdHVzIiwib25BcHByb3ZlIiwidGhyZWFkSWRzIiwibWV0YWRhdGEiLCJvblJlamVjdCIsImlzUHJvamVjdERlbGV0ZWQiLCJwcm9qZWN0TWV0YWRhdGEiLCJpc19kZWxldGVkIiwiaXNFeHBhbmRlZCIsImV4cGFuZGVkIiwiaGl0bEluc3RhbmNlSWQiLCJvcmlnaW5hbF90aHJlYWRfaWQiLCJ3YXJuaW5nTWVzc2FnZSIsIndhcm5pbmdfbWVzc2FnZSIsIm1hbnVhbEFwcHJvdmFsRGV0ZWN0ZWQiLCJtYW51YWxfYXBwcm92YWxfZGV0ZWN0ZWQiLCJpc09wZW4iLCJvbkNsb3NlIiwiQ2hhdEFJTWVzc2FnZXNJbm5lciIsIl9yZWY1IiwidXNlckluaXRpYWxNZXNzYWdlIiwiaW5pdGlhbENoYXRJZCIsIm9uRXJyb3IiLCJvblNlbmRNZXNzYWdlUmVhZHkiLCJvblNjcm9sbFRvQm90dG9tIiwiYWdlbnRzIiwiX3VzZVQiLCJ0IiwiX3VzZUdsb2JhbENvbnRleHQiLCJpc1dlYlNlYXJjaEFjdGl2ZSIsImlzRGVlcFNlYXJjaEFjdGl2ZSIsImFnZW50IiwiZXZlbnQiLCJtZXNzYWdlc1JlZiIsImNoYXRJbml0aWFsaXplZFJlZiIsImlzTG9hZGluZ01vcmVSZWYiLCJzY3JvbGxUaHJlc2hvbGRSZWYiLCJsYXN0U2Nyb2xsVG9wUmVmIiwic2hvd1Njcm9sbFRvQm90dG9tUmVmIiwic2hvd1RvcEdyYWRpZW50UmVmIiwic2hvd0JvdHRvbUdyYWRpZW50UmVmIiwic2Nyb2xsUmFmUmVmIiwiYW5jaG9yZWRUdXJuSWRSZWYiLCJzcGFjZXJFbFJlZiIsInNwYWNlckhlaWdodFJlZiIsInR1cm5TY3JvbGxSYWZSZWYiLCJ3YXNMb2FkaW5nTWVzc2FnZXNSZWYiLCJsYXN0U2Nyb2xsZWRTZXNzaW9uUmVmIiwicGVuZGluZ1Njcm9sbFJlc3RvcmVSZWYiLCJzY3JvbGxQZXJzaXN0VGltZXJSZWYiLCJfdXNlU3RhdGU1IiwiX3VzZVN0YXRlNiIsInNob3dTY3JvbGxUb0JvdHRvbSIsInNldFNob3dTY3JvbGxUb0JvdHRvbSIsIl91c2VTdGF0ZTciLCJfdXNlU3RhdGU4Iiwic2hvd1RvcEdyYWRpZW50Iiwic2V0U2hvd1RvcEdyYWRpZW50IiwiX3VzZVN0YXRlOSIsIl91c2VTdGF0ZTAiLCJzaG93Qm90dG9tR3JhZGllbnQiLCJzZXRTaG93Qm90dG9tR3JhZGllbnQiLCJfdXNlU3RhdGUxIiwiX3VzZVN0YXRlMTAiLCJzZWxlY3RlZFN1Z2dlc3Rpb25NZXNzYWdlSWRzIiwic2V0U2VsZWN0ZWRTdWdnZXN0aW9uTWVzc2FnZUlkcyIsIl91c2VDaGF0TWFuYWdlciIsImNoYXRJZCIsIm1lc3NhZ2VzIiwibG9hZGluZ01lc3NhZ2VzIiwiaXNMb2FkaW5nTW9yZU1lc3NhZ2VzIiwid2FpdGluZ1Jlc3BvbnNlIiwiaXNXcml0aW5nIiwibG9hZGluZ01lc3NhZ2UiLCJhY3RpdmVMb2FkaW5ncyIsInNlbmRNZXNzYWdlIiwicmV0cnlNZXNzYWdlIiwiY2hhbmdlUHJvamVjdCIsImluaXRpYWxpemVDaGF0IiwiaGFuZGxlU2Nyb2xsIiwic3RvcEdlbmVyYXRpb24iLCJ1cGRhdGVTY3JvbGxBZmZvcmRhbmNlcyIsImVsIiwiY3VycmVudCIsInNjcm9sbFRvcCIsInNjcm9sbEhlaWdodCIsImNsaWVudEhlaWdodCIsImRpc3RhbmNlRnJvbUJvdHRvbSIsInNob3VsZFNob3ciLCJuZXh0VG9wR3JhZGllbnQiLCJuZXh0Qm90dG9tR3JhZGllbnQiLCJzY3JvbGxUb0JvdHRvbVJhZiIsIm9wdHMiLCJfb3B0cyRkZWxheU1zIiwiZGVsYXlNcyIsInJ1biIsInJlcXVlc3RBbmltYXRpb25GcmFtZSIsImNhbmNlbFR1cm5TY3JvbGwiLCJjYW5jZWxBbmltYXRpb25GcmFtZSIsImFuaW1hdGVTY3JvbGxUbyIsInRvcCIsImZyb20iLCJkaXN0YW5jZSIsImFicyIsImR1cmF0aW9uIiwic3RhcnRlZEF0IiwicGVyZm9ybWFuY2UiLCJub3ciLCJzdGVwIiwicHJvZ3Jlc3MiLCJlYXNlZCIsInBvdyIsInNldFNwYWNlckhlaWdodCIsImhlaWdodCIsImNsZWFyVHVyblNwYWNlIiwiZHJhaW5UdXJuU3BhY2UiLCJyZW1vdmFibGUiLCJtYXgiLCJyZWxlYXNlVHVyblNwYWNlIiwiaGFuZGxlVXNlclNjcm9sbEludGVudCIsIm1lYXN1cmVUdXJuIiwic3BhY2VyRWwiLCJxdWVzdGlvbkVsIiwicXVlcnlTZWxlY3RvciIsImNvbnRhaW5lclRvcCIsImdldEJvdW5kaW5nQ2xpZW50UmVjdCIsInF1ZXN0aW9uVG9wIiwiY29udGVudEJvdHRvbSIsInR1cm5IZWlnaHQiLCJyZXNlcnZlVHVyblNwYWNlIiwibWVhc3VyZWQiLCJvZmZzZXQiLCJ0YXJnZXRTY3JvbGxUb3AiLCJzeW5jVHVyblNwYWNlIiwicmVzZXJ2ZWQiLCJoYW5kbGVDbGlja1Njcm9sbFRvQm90dG9tIiwiaGFuZGxlU2Nyb2xsVG9Cb3R0b20iLCJlIiwiY29udGFpbmVyIiwiY3VycmVudFRhcmdldCIsImlzU2Nyb2xsaW5nVXAiLCJpc05lYXJCb3R0b20iLCJjbGVhclRpbWVvdXQiLCJzY3JvbGxTZXNzaW9uSWQiLCJzZW5kTWVzc2FnZVJlZiIsInN0b3BHZW5lcmF0aW9uUmVmIiwib25TZW5kTWVzc2FnZVJlYWR5UmVmIiwic2VuZE1lc3NhZ2VQcm94eVJlZiIsImZhcUlkIiwiYWdlbnRTdWdnZXN0aW9uSWQiLCJtZW50aW9ucyIsImZ1YUlkIiwic2NJZCIsInN0b3BHZW5lcmF0aW9uUHJveHlSZWYiLCJtZXNzYWdlc0RhdGFSZWYiLCJzZWxlY3RlZFN1Z2dlc3Rpb25NZXNzYWdlSWRzUmVmIiwidHJpbSIsImN1cnJlbnRNZXNzYWdlcyIsImlzTWFya2V0cGxhY2VHbG9iYWxBZ2VudCIsImFpQ2hhdFN1Z2dlc3RlZEFuc3dlciIsImFnZW50X3R5cGUiLCJfZGVmaW5lUHJvcGVydHkiLCJ0YXJnZXRNZXNzYWdlIiwiZmluZCIsIm1zZyIsImlzUmV0cnlTdWdnZXN0aW9uIiwibGFzdFVzZXJNZXNzYWdlIiwiYXQiLCJyZXRyeUF0dGFjaG1lbnRzIiwicmFmSWQiLCJ0aWNrIiwibGFzdFJlc2VydmVkUXVlc3Rpb25SZWYiLCJfbWVzc2FnZXMkaW5kZXgiLCJsYXN0TWVzc2FnZUlkUmVmIiwibGFzdE1lc3NhZ2VzTGVuZ3RoUmVmIiwiX21lc3NhZ2VzJGlkIiwiX21lc3NhZ2VzIiwiX2xhc3RNZXNzYWdlJGlkIiwibGFzdE1lc3NhZ2UiLCJsYXN0SWQiLCJwcmV2SWQiLCJwcmV2TGVuIiwiaXNOZXdNZXNzYWdlIiwiaXNBdEJvdHRvbSIsImhhc0luaXRpYWxNZXNzYWdlIiwiaXNBcHByb3ZhbCIsImlzQW5zd2VyT3JRdWVzdGlvbiIsIl9tZXNzYWdlcyRpZDIiLCJfbWVzc2FnZXMyIiwianVzdEZpbmlzaGVkTG9hZGluZyIsImF0dGFjaG1lbnRzQ291bnQiLCJzdHJlYW1Mb2FkaW5nRGlzcGxheSIsImhhc0F0dGFjaG1lbnRzIiwiaXNTY3JvbGxPblBhcmVudCIsInNlc3Npb24iLCJleHBhbmRlZFJlZiIsInNhdmVkU2Nyb2xsVG9wIiwiZmlsbCIsImhhc01lc3NhZ2VMZXZlbEluZGljYXRvciIsIm1lc3NhZ2VzQ29udGVudCIsInRleHQiLCJfbWVzc2FnZSRhdHRhY2htZW50cyIsIl9tZXNzYWdlJHNvdXJjZXMiLCJfbWVzc2FnZSRwcm9qZWN0IiwiX21lc3NhZ2UkaWQiLCJpc0Fzc2lzdGFudE1lc3NhZ2UiLCJwcm9qZWN0IiwibWVzc2FnZUZlZWRiYWNrIiwid2FzSGVscGZ1bCIsIlRIVU1CU19VUCIsIlRIVU1CU19ET1dOIiwibWVzc2FnZUtleSIsInR1cm5JZCIsInVzZXJNZXNzYWdlRm9yUmV0cnkiLCJjYW5SZXRyeSIsImlzX2NhbmNlbGxlZCIsImtleSIsInJlZiIsIiRzY3JvbGxPblBhcmVudCIsIm9uV2hlZWwiLCJvblRvdWNoU3RhcnQiLCIkc2hvdyIsIm9uU2Nyb2xsIiwiJHZpc2libGUiLCJ4bWxucyIsIndpZHRoIiwic3Ryb2tlIiwic3Ryb2tlTGluZWNhcCIsInN0cm9rZUxpbmVqb2luIiwic3Ryb2tlV2lkdGgiLCJkIiwiQ2hhdEFJTWVzc2FnZXMiXSwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50cy9tb2xlY3VsZXMvQ2hhdEFJTWVzc2FnZXMvQ2hhdEFJTWVzc2FnZXMudHN4Il0sInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIGltcG9ydC9uby1leHRyYW5lb3VzLWRlcGVuZGVuY2llcyAqL1xuLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L2luZGVudCAqL1xuLyogZXNsaW50LWRpc2FibGUgcmVhY3Qvbm8tdW5zdGFibGUtbmVzdGVkLWNvbXBvbmVudHMgKi9cbi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1zaGFkb3cgKi9cbi8qIGVzbGludC1kaXNhYmxlIG5vLW5lc3RlZC10ZXJuYXJ5ICovXG4vKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55ICovXG4vKiBlc2xpbnQtZGlzYWJsZSBuby11bmRlZiAqL1xuLyogZXNsaW50LWRpc2FibGUgcmVhY3QvZnVuY3Rpb24tY29tcG9uZW50LWRlZmluaXRpb24gKi9cbi8qIGVzbGludC1kaXNhYmxlIHJlYWN0L3JlcXVpcmUtZGVmYXVsdC1wcm9wcyAqL1xuLyogZXNsaW50LWRpc2FibGUganN4LWExMXkvY2xpY2stZXZlbnRzLWhhdmUta2V5LWV2ZW50cyAqL1xuLyogZXNsaW50LWRpc2FibGUganN4LWExMXkvbm8tc3RhdGljLWVsZW1lbnQtaW50ZXJhY3Rpb25zICovXG5pbXBvcnQgUmVhY3QsIHsgRkMsIG1lbW8sIFJlYWN0Tm9kZSwgdXNlQ2FsbGJhY2ssIHVzZUVmZmVjdCwgdXNlTGF5b3V0RWZmZWN0LCB1c2VSZWYsIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnXG5cbmltcG9ydCB7IEF0dGFjaG1lbnRDYXJkIH0gZnJvbSAnLi4vLi4vYXRvbXMvQXR0YWNobWVudENhcmQvQXR0YWNobWVudENhcmQnXG5pbXBvcnQgeyBBcHByb3ZhbEJveCB9IGZyb20gJy4uLy4uL2F0b21zL0FwcHJvdmFsQm94L0FwcHJvdmFsQm94J1xuaW1wb3J0IHsgQXR0YWNobWVudFByZXZpZXdNb2RhbCB9IGZyb20gJy4uLy4uL2F0b21zL0F0dGFjaG1lbnRQcmV2aWV3TW9kYWwnXG5pbXBvcnQgeyBBdHRhY2htZW50Q2FyZEF1ZGlvIH0gZnJvbSAnLi4vLi4vYXRvbXMvQXR0YWNobWVudENhcmQvQXR0YWNobWVudENhcmRBdWRpbydcbmltcG9ydCB7IE1haWFTdHJlYW1kb3duIH0gZnJvbSAnLi4vLi4vYXRvbXMvTWFpYVN0cmVhbWRvd24nXG5pbXBvcnQgdHlwZSB7IE1haWFTdHJlYW1kb3duUHJvcHMgfSBmcm9tICcuLi8uLi9hdG9tcy9NYWlhU3RyZWFtZG93bidcbmltcG9ydCB7IE1BSUFNZXNzYWdlUHJvcHMgfSBmcm9tICcuLi8uLi9hdG9tcy9NQUlBTWVzc2FnZS9NQUlBTWVzc2FnZS5pbnRlcmZhY2VzJ1xuaW1wb3J0IHsgQ2hhdE1lc3NhZ2UsIENoYXRIaXN0b3J5Um9sZSB9IGZyb20gJy4uLy4uLy4uL3R5cGVzL0NoYXQnXG5pbXBvcnQgeyByZW5kZXJUZXh0V2l0aE1lbnRpb25zLCBoYXNJbmxpbmVNYXJrZXJzIH0gZnJvbSAnLi4vLi4vLi4vdXRpbHMvcmVuZGVyQ29udGV4dE1lbnRpb25zJ1xuXG5pbXBvcnQgeyBpc01haWFrZXJBZ2VudCB9IGZyb20gJy4uLy4uLy4uL3V0aWxzL2FnZW50RGlzcGxheU5hbWUnXG5pbXBvcnQgeyBDT1JVc2VyLCB1c2VVc2VyIH0gZnJvbSAnLi4vLi4vLi4vY29udGV4dC9jb3ItdXNlcidcblxuaW1wb3J0IHsgdXNlVCB9IGZyb20gJy4uLy4uLy4uL2hvb2tzL3VzZVQnXG5pbXBvcnQgeyB1c2VDaGF0TWFuYWdlciB9IGZyb20gJy4uLy4uLy4uL2hvb2tzL3VzZUNoYXRNYW5hZ2VyL3VzZUNoYXRNYW5hZ2VyJ1xuaW1wb3J0IHsgdXNlU21vb3RoU3RyZWFtVGV4dCB9IGZyb20gJy4uLy4uLy4uL2hvb2tzL3VzZVNtb290aFN0cmVhbVRleHQnXG5pbXBvcnQgeyB1c2VTdHJlYW1pbmdNZXNzYWdlIH0gZnJvbSAnLi4vLi4vLi4vaG9va3MvdXNlU3RyZWFtaW5nTWVzc2FnZSdcblxuaW1wb3J0IHsgTG9hZGluZ1RleHQgfSBmcm9tICcuLi8uLi9hdG9tcy9Mb2FkaW5nVGV4dCdcbmltcG9ydCB7IEFnZW50QWN0aXZpdHlJbmRpY2F0b3IgfSBmcm9tICcuLi8uLi9hdG9tcy9BZ2VudEFjdGl2aXR5SW5kaWNhdG9yJ1xuaW1wb3J0IHsgUmVhc29uaW5nQmxvY2sgfSBmcm9tICcuLi8uLi9hdG9tcy9SZWFzb25pbmdCbG9jay9SZWFzb25pbmdCbG9jaydcbmltcG9ydCB7IHNob3VsZFN0cmVhbU5hcnJhdGlvbkluVGltZWxpbmUgfSBmcm9tICcuLi8uLi9hdG9tcy9SZWFzb25pbmdCbG9jay9yZWFzb25pbmdMaXZlTmFycmF0aW9uJ1xuaW1wb3J0IHsgUmVhc29uaW5nVGltZWxpbmUgfSBmcm9tICcuLi8uLi9hdG9tcy9SZWFzb25pbmdCbG9jay9SZWFzb25pbmdUaW1lbGluZSdcbmltcG9ydCB7IFNDVGltZWxpbmVJbmRpY2F0b3IgfSBmcm9tICcuLi8uLi9hdG9tcy9SZWFzb25pbmdCbG9jay9SZWFzb25pbmdCbG9jay5zdHlsZXMnXG5pbXBvcnQgdHlwZSB7IFN0cmVhbUFjdGl2aXR5IH0gZnJvbSAnLi4vLi4vLi4vdHlwZXMvc3RyZWFtQWN0aXZpdHknXG5pbXBvcnQgeyBpc1N0cmVhbWluZ1BsYWNlaG9sZGVyTWVzc2FnZUlkLCByZXNvbHZlU3RyZWFtTG9hZGluZ0Rpc3BsYXkgfSBmcm9tICcuLi8uLi8uLi91dGlscy9zdHJlYW1BY3Rpdml0eU1lc3NhZ2VzJ1xuaW1wb3J0IHsgcmVzb2x2ZVJldHJ5VHVybklkLCBmaW5kVXNlck1lc3NhZ2VGb3JSZXRyeSB9IGZyb20gJy4uLy4uLy4uL3V0aWxzL3JldHJ5Q29tcGxldGlvbidcbmltcG9ydCB7IHVzZVJlYXNvbmluZ1RyYWNlIH0gZnJvbSAnLi4vLi4vLi4vaG9va3MvdXNlUmVhc29uaW5nVHJhY2UnXG5pbXBvcnQgeyBMb2FkZXIgfSBmcm9tICcuLi8uLi9hdG9tcy9Mb2FkZXInXG5pbXBvcnQgeyBGYWRlIH0gZnJvbSAnLi4vLi4vYXRvbXMvRmFkZSdcbmltcG9ydCB7IHBhdGNoTWFpYVBhbmVsU2Vzc2lvbiwgcmVhZE1haWFQYW5lbFNlc3Npb24gfSBmcm9tICcuLi8uLi8uLi9zdG9yZS9tYWlhUGFuZWxTZXNzaW9uUGVyc2lzdGVuY2UnXG5cbmltcG9ydCB7IFByb2plY3QgfSBmcm9tICcuLi8uLi8uLi90eXBlcy9Qcm9qZWN0J1xuXG5pbXBvcnQgeyBNZXNzYWdlRnJvbVVzZXIsIE1lc3NhZ2VGcm9tT3RoZXIsIE1lc3NhZ2VDb250ZW50RnJvbVVzZXIsIE1lc3NhZ2VDb250ZW50RnJvbU90aGVyIH0gZnJvbSAnLi9zdHlsZXMnXG5pbXBvcnQgeyBNZXNzYWdlRmVlZGJhY2sgfSBmcm9tICcuLi9NZXNzYWdlRmVlZGJhY2snXG5pbXBvcnQge1xuICBTQ0NBSU1lc3NhZ2VXcmFwcGVyLFxuICBTY3JvbGxUb0JvdHRvbUJ1dHRvbixcbiAgU0NTY3JvbGxJY29uU3dhcCxcbiAgU0NXcml0aW5nRG90cyxcbiAgU0NNZXNzYWdlc091dGVyLFxuICBTQ01lc3NhZ2VzU2Nyb2xsLFxuICBTQ01lc3NhZ2VzSW5uZXIsXG4gIFNDVHVyblNwYWNlcixcbiAgU0NPcHRpb25zTGlzdCxcbiAgU0NPcHRpb25JdGVtLFxuICBTQ01lc3NhZ2VJdGVtV3JhcHBlcixcbiAgU0NNZXNzYWdlSXRlbUlubmVyLFxuICBTQ0F0dGFjaG1lbnRzUm93LFxuICBTQ0FwcHJvdmFsQWN0aW9uc0NvbHVtbixcbiAgU0NMb2FkaW5nTWVzc2FnZXNDb2x1bW4sXG4gIFNDTWVzc2FnZXNHcmFkaWVudFRvcCxcbiAgU0NNZXNzYWdlc0dyYWRpZW50Qm90dG9tLFxufSBmcm9tICcuL25ld1N0eWxlcydcbmltcG9ydCB7IEZlZWRiYWNrIH0gZnJvbSAnLi4vTWVzc2FnZUZlZWRiYWNrL01lc3NhZ2VGZWVkYmFjaydcbmltcG9ydCB7IHVzZUdsb2JhbENvbnRleHQgfSBmcm9tICcuLi8uLi8uLi9jb250ZXh0L2dsb2JhbC1jb250ZXh0J1xuaW1wb3J0IHsgQWdlbnQgfSBmcm9tICcuLi8uLi8uLi90eXBlcy9hZ2VudCdcbmltcG9ydCB7IEF0dGFjaG1lbnRGaWxlIH0gZnJvbSAnLi4vQ2hhdEZvb3Rlci9DaGF0Rm9vdGVyJ1xuaW1wb3J0IHsgQ29udGV4dE1lbnRpb24gfSBmcm9tICcuLi8uLi8uLi90eXBlcy9jb250ZXh0TWVudGlvbidcbmltcG9ydCB7IEVudGl0eUxpbmtDdXN0b21MaW5rLCBnZXRFbnRpdHlMaW5rV3JhcHBlckNsYXNzTmFtZSB9IGZyb20gJy4uLy4uLy4uL3V0aWxzL2VudGl0eUxpbmtSZW5kZXInXG5pbXBvcnQgeyBDaGF0QUlTdWdnZXN0aW9ucyB9IGZyb20gJy4vQ2hhdEFJU3VnZ2VzdGlvbnMnXG5pbXBvcnQgeyBDaGF0QUlDcmVhdGVBZ2VudEFjdGlvbnMgfSBmcm9tICcuL0NoYXRBSUNyZWF0ZUFnZW50QWN0aW9ucydcbmltcG9ydCB7IEVWRU5UUywgdXNlRXZlbnQgfSBmcm9tICcuLi8uLi8uLi9ob29rcy91c2VFdmVudCdcbmltcG9ydCB7IGRvd25sb2FkRmlsZUZyb21VcmwgfSBmcm9tICcuLi8uLi8uLi91dGlscy9maWxlRG93bmxvYWRIZWxwZXInXG5cbnR5cGUgQ2hhdEFJTWVzc2FnZXNQcm9wcyA9IHtcbiAgdXNlckluaXRpYWxNZXNzYWdlOiB7XG4gICAgbWVzc2FnZTogc3RyaW5nXG4gICAgYXR0YWNobWVudHM6IEF0dGFjaG1lbnRGaWxlW11cbiAgICBmYXFJZD86IHN0cmluZ1xuICAgIGFnZW50U3VnZ2VzdGlvbklkPzogc3RyaW5nXG4gICAgbWVudGlvbnM/OiBDb250ZXh0TWVudGlvbltdXG4gICAgZnVhSWQ/OiBzdHJpbmdcbiAgICBzY0lkPzogc3RyaW5nXG4gIH1cbiAgaW5pdGlhbENoYXRJZDogc3RyaW5nIHwgbnVsbFxuICBvbkVycm9yOiAoKSA9PiB2b2lkXG4gIG9uU2VuZE1lc3NhZ2VSZWFkeT86IChcbiAgICBzZW5kTWVzc2FnZTogKFxuICAgICAgbWVzc2FnZTogc3RyaW5nLFxuICAgICAgYXR0YWNobWVudHM/OiBBdHRhY2htZW50RmlsZVtdLFxuICAgICAgZmFxSWQ/OiBzdHJpbmcsXG4gICAgICBhZ2VudFN1Z2dlc3Rpb25JZD86IHN0cmluZyxcbiAgICAgIG1lbnRpb25zPzogQ29udGV4dE1lbnRpb25bXSxcbiAgICAgIGZ1YUlkPzogc3RyaW5nLFxuICAgICAgc2NJZD86IHN0cmluZ1xuICAgICkgPT4gdm9pZCxcbiAgICBzdG9wR2VuZXJhdGlvbjogKCkgPT4gdm9pZCxcbiAgICBpc1N0cmVhbWluZzogYm9vbGVhbixcbiAgICBpc1dyaXRpbmc6IGJvb2xlYW5cbiAgKSA9PiB2b2lkXG4gIGlzRGlzYWJsZWQ/OiBib29sZWFuXG4gIG9uU2Nyb2xsVG9Cb3R0b20/OiAoKSA9PiB2b2lkXG4gIGF0dGFjaG1lbnRzPzogQXR0YWNobWVudEZpbGVbXVxuICBhZ2VudHM/OiBBZ2VudFtdXG4gIGV4cGFuZGVkPzogYm9vbGVhblxufVxuXG4vKipcbiAqIEFsIGFuY2xhciBlbCB0dXJubywgbGEgcHJlZ3VudGEgbm8gc2UgcGVnYSBhbCBib3JkZSBzdXBlcmlvcjogZGVqYW1vcyBhc29tYXJcbiAqIGxhIGNvbGEgZGVsIG1lbnNhamUgYW50ZXJpb3IgcGFyYSBubyBwZXJkZXIgZWwgaGlsbyBkZSBsYSBjb252ZXJzYWNpw7NuLlxuICogUmVsYXRpdm8gYWwgdmlld3BvcnQgcG9ycXVlIHVuIHZhbG9yIGZpam8gc2UgY29tZSBkZW1hc2lhZG8gZW4gcGFudGFsbGFzIGNvcnRhcy5cbiAqL1xuY29uc3QgdHVybkFuY2hvck9mZnNldCA9ICh2aWV3cG9ydEhlaWdodDogbnVtYmVyKTogbnVtYmVyID0+IE1hdGgubWluKHZpZXdwb3J0SGVpZ2h0ICogMC4xOCwgMjAwKVxuXG4vKipcbiAqIER1cmFjacOzbiBkZWwgc2Nyb2xsIGFuaW1hZG86IGJhc2UgeSB0b3BlIHBhcmEgcmVjb3JyaWRvcyBsYXJnb3MsIHBhcmEgcXVlIHVuXG4gKiBzYWx0byBkZSB2YXJpYXMgcGFudGFsbGFzIG5vIHNlIHNpZW50YSB1biBsYXRpZ2F6by5cbiAqL1xuY29uc3QgVFVSTl9TQ1JPTExfRFVSQVRJT05fTVMgPSA2MDBcbmNvbnN0IFRVUk5fU0NST0xMX01BWF9EVVJBVElPTl9NUyA9IDgwMFxuXG4vKiogRGlzdGFuY2lhIGEgcGFydGlyIGRlIGxhIGN1YWwgbGEgZHVyYWNpw7NuIHlhIGVzdMOhIGVuIHN1IHRvcGUuICovXG5jb25zdCBUVVJOX1NDUk9MTF9MT05HX0RJU1RBTkNFX1BYID0gMTIwMFxuXG50eXBlIE1lc3NhZ2VJdGVtUHJvcHMgPSBDaGF0TWVzc2FnZSAmIHtcbiAgYXV0aFVzZXI6IENPUlVzZXJcbiAgaGFuZGxlU2VsZWN0T3B0aW9uOiAob3B0aW9uOiBQcm9qZWN0KSA9PiB2b2lkXG4gIGhhbmRsZVN1Z2dlc3Rpb25DbGljazogKG1lc3NhZ2VJZDogc3RyaW5nLCBzdWdnZXN0aW9uOiBzdHJpbmcpID0+IHZvaWRcbiAgaGFzU2VsZWN0ZWRTdWdnZXN0aW9uPzogYm9vbGVhblxuICBoYW5kbGVGZWVkYmFjazogKGZlZWRiYWNrOiBGZWVkYmFjaywgY2hhdE1lc3NhZ2VJZDogc3RyaW5nKSA9PiB2b2lkXG4gIGhhbmRsZUFwcHJvdmFsRGVjaXNpb246IChcbiAgICB0aHJlYWRJZHM6IHN0cmluZ1tdLFxuICAgIGRlY2lzaW9uOiAnYXBwcm92ZScgfCAncmVqZWN0JyxcbiAgICBlZGl0ZWRBY3Rpb25zPzogQXJyYXk8eyB0b29sX25hbWU6IHN0cmluZzsgYXJnczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfT4sXG4gICAgbWV0YWRhdGE/OiB7IHRvb2xfZ3JvdXBfc2x1Z3M6IHN0cmluZ1tdIH1cbiAgKSA9PiB2b2lkXG4gIGhhbmRsZVJldHJ5PzogKCkgPT4gdm9pZFxuICBkaXNhYmxlRmVlZGJhY2s/OiBGZWVkYmFjayB8IG51bGxcbiAgc291cmNlcz86IGFueVxuICBhdHRhY2htZW50cz86IEF0dGFjaG1lbnRGaWxlW11cbiAgaXNTdHJlYW1pbmc/OiBib29sZWFuXG4gIGlzTGFzdE1lc3NhZ2U/OiBib29sZWFuXG4gIGV4cGFuZGVkPzogYm9vbGVhblxuICBzdHJlYW1BY3Rpdml0eT86IFN0cmVhbUFjdGl2aXR5IHwgbnVsbFxufVxuXG5pbnRlcmZhY2UgTWVzc2FnZVdyYXBwZXJQcm9wcyB7XG4gIGlzQ3VycmVudFVzZXI6IGJvb2xlYW5cbiAgY2hpbGRyZW46IFJlYWN0Tm9kZVxuICAnZGF0YS1tZXNzYWdlLWlkJz86IHN0cmluZ1xuICBoYXNGZWVkYmFjaz86IGJvb2xlYW5cbn1cblxudHlwZSBNZXNzYWdlQ29udGVudFdyYXBwZXJQcm9wcyA9IE1BSUFNZXNzYWdlUHJvcHMgJiB7XG4gIGlzQ3VycmVudFVzZXI6IGJvb2xlYW5cbiAgaXNFcnJvcj86IGJvb2xlYW5cbiAgaXNDaGFuZ2VQcm9qZWN0PzogYm9vbGVhblxufVxuXG5jb25zdCBNZXNzYWdlV3JhcHBlcjogRkM8TWVzc2FnZVdyYXBwZXJQcm9wcz4gPSAoeyBpc0N1cnJlbnRVc2VyLCBjaGlsZHJlbiwgLi4ucHJvcHMgfSkgPT4ge1xuICBjb25zdCBNZXNzYWdlQ29tcG9uZW50ID0gaXNDdXJyZW50VXNlciA/IE1lc3NhZ2VGcm9tVXNlciA6IE1lc3NhZ2VGcm9tT3RoZXJcbiAgcmV0dXJuIDxNZXNzYWdlQ29tcG9uZW50IHsuLi5wcm9wc30+e2NoaWxkcmVufTwvTWVzc2FnZUNvbXBvbmVudD5cbn1cblxuY29uc3QgTWVzc2FnZUNvbnRlbnRXcmFwcGVyOiBGQzxNZXNzYWdlQ29udGVudFdyYXBwZXJQcm9wcz4gPSAoeyBpc0N1cnJlbnRVc2VyLCAuLi5wcm9wcyB9KSA9PiB7XG4gIGNvbnN0IE1lc3NhZ2VDb250ZW50Q29tcG9uZW50ID0gaXNDdXJyZW50VXNlciA/IE1lc3NhZ2VDb250ZW50RnJvbVVzZXIgOiBNZXNzYWdlQ29udGVudEZyb21PdGhlclxuICByZXR1cm4gPE1lc3NhZ2VDb250ZW50Q29tcG9uZW50IHsuLi5wcm9wc30gLz5cbn1cblxuZnVuY3Rpb24gTWVzc2FnZU9wdGlvbnMoe1xuICBvcHRpb25zLFxuICBoYW5kbGVTZWxlY3RPcHRpb24sXG59OiB7XG4gIG9wdGlvbnM6IFByb2plY3RbXSB8IG51bGxcbiAgaGFuZGxlU2VsZWN0T3B0aW9uOiAob3B0aW9uOiBQcm9qZWN0KSA9PiB2b2lkXG59KSB7XG4gIGNvbnN0IFtzZWxlY3RlZE9wdGlvbiwgc2V0U2VsZWN0ZWRPcHRpb25dID0gdXNlU3RhdGU8UHJvamVjdCB8IG51bGw+KG51bGwpXG5cbiAgY29uc3QgaGFuZGxlU2VsZWN0ID0gKG9wdGlvbjogUHJvamVjdCkgPT4ge1xuICAgIGlmIChzZWxlY3RlZE9wdGlvbikgcmV0dXJuXG4gICAgc2V0U2VsZWN0ZWRPcHRpb24ob3B0aW9uKVxuICAgIGhhbmRsZVNlbGVjdE9wdGlvbihvcHRpb24pXG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxTQ09wdGlvbnNMaXN0PlxuICAgICAgeyhvcHRpb25zIHx8IFtdKS5tYXAob3B0aW9uID0+IChcbiAgICAgICAgPFNDT3B0aW9uSXRlbVxuICAgICAgICAgICRoYXNTZWxlY3Rpb249eyEhc2VsZWN0ZWRPcHRpb259XG4gICAgICAgICAgJGRpbW1lZD17ISFzZWxlY3RlZE9wdGlvbiAmJiBzZWxlY3RlZE9wdGlvbj8uaWQgIT09IG9wdGlvbi5pZH1cbiAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBoYW5kbGVTZWxlY3Qob3B0aW9uKX1cbiAgICAgICAgICBrZXk9e29wdGlvbi5pZH1cbiAgICAgICAgPlxuICAgICAgICAgIHtvcHRpb24ubmFtZX1cbiAgICAgICAgPC9TQ09wdGlvbkl0ZW0+XG4gICAgICApKX1cbiAgICA8L1NDT3B0aW9uc0xpc3Q+XG4gIClcbn1cblxuLyoqIFNvbG8gZXN0ZSBjb21wb25lbnRlIHJlLXJlbmRlcml6YSBjdWFuZG8gY2FtYmlhIGVsIHRleHRvIGVuIHN0cmVhbWluZyAobGVlIGRlbCBjb250ZXh0KS4gKi9cbmNvbnN0IFN0cmVhbWluZ01lc3NhZ2VCb2R5ID0gbWVtbyhcbiAgKHByb3BzOiB7XG4gICAgbWVzc2FnZTogc3RyaW5nXG4gICAgaXNTdHJlYW1pbmc6IGJvb2xlYW5cbiAgICBpc0N1cnJlbnRVc2VyOiBib29sZWFuXG4gICAgaXNBc3Npc3RhbnQ6IGJvb2xlYW5cbiAgICBpc0Zyb250ZW5kQ2FuY2VsbGVkPzogYm9vbGVhblxuICAgIGFwcHJvdmFsPzogTWVzc2FnZUl0ZW1Qcm9wc1snYXBwcm92YWwnXVxuICAgIGlzRXJyb3I/OiBib29sZWFuXG4gICAgc291cmNlcz86IE1lc3NhZ2VJdGVtUHJvcHNbJ3NvdXJjZXMnXVxuICAgIHN1Z2dlc3Rpb25zPzogc3RyaW5nW10gfCBudWxsXG4gICAgY3JlYXRlQWdlbnRGb2xsb3dVcD86IHsgYWdlbnRJZDogc3RyaW5nIH0gfCBudWxsXG4gICAgaGFuZGxlRmVlZGJhY2tDbGljazogKGY6IEZlZWRiYWNrKSA9PiB2b2lkXG4gICAgZGlzYWJsZUZlZWRiYWNrOiBGZWVkYmFjayB8IG51bGxcbiAgICBvblJldHJ5PzogKCkgPT4gdm9pZFxuICAgIGhhbmRsZVN1Z2dlc3Rpb25DbGljazogKG1lc3NhZ2VJZDogc3RyaW5nLCBzdWdnZXN0aW9uOiBzdHJpbmcpID0+IHZvaWRcbiAgICBzdWdnZXN0aW9uc0Rpc2FibGVkPzogYm9vbGVhblxuICAgIG1lc3NhZ2VJZDogc3RyaW5nXG4gICAgaXNMYXN0TWVzc2FnZT86IGJvb2xlYW5cbiAgfSkgPT4ge1xuICAgIC8vIFRleHRvIGRlbCBzdHJlYW06IHNvbG8gc2UgbGVlIGRlbCBzdG9yZSBjdWFuZG8gZXN0ZSBtZW5zYWplIGVzIGVsXG4gICAgLy8gcXVlIGVzdMOhIGVuIHN0cmVhbWluZy4gdXNlU3luY0V4dGVybmFsU3RvcmUgYcOtc2xhIGVsIHJlLXJlbmRlciBhXG4gICAgLy8gZXN0ZSBjb21wb25lbnRlLCBzaW4gdG9jYXIgZWwgcmVzdG8gZGVsIMOhcmJvbC5cbiAgICBjb25zdCBzdHJlYW1pbmdUZXh0ID0gdXNlU3RyZWFtaW5nTWVzc2FnZShwcm9wcy5pc1N0cmVhbWluZyA/IHByb3BzLm1lc3NhZ2VJZCA6IG51bGwpXG4gICAgY29uc3QgcmF3VGV4dCA9IHByb3BzLmlzU3RyZWFtaW5nID8gc3RyZWFtaW5nVGV4dCA6IHByb3BzLm1lc3NhZ2VcbiAgICAvLyBTbW9vdGggc3RyZWFtaW5nOiBkZXNhY29wbGEgbGEgY2FkZW5jaWEgZGVsIGJhY2tlbmQgZGVsIHJlbmRlci5cbiAgICAvLyBEdXJhbnRlIGVsIHN0cmVhbWluZyBsaWJlcmEgY2hhcnMgYSByaXRtbyBjb25zdGFudGUgdsOtYSByQUY7IGN1YW5kb1xuICAgIC8vIHRlcm1pbmEsIG11ZXN0cmEgZWwgdGV4dG8gZmluYWwgYWwgaW5zdGFudGUgKHNpbiBhbmltYWNpw7NuIHJlc2lkdWFsKS5cbiAgICAvLyBMb3MgZGVmYXVsdHMgZGVsIGhvb2sgc2UgYWp1c3Rhcm9uIGVtcMOtcmljYW1lbnRlIGVuIHN0YWdpbmc7IGF1biBhc8OtXG4gICAgLy8gc2UgZXhwb25lbiBmbGFncyBkZSBydW50aW1lICh3aW5kb3cuKikgcGFyYSBwb2RlciB0dW5lYXIgc2luIHJlY29tcGlsYXJcbiAgICAvLyBzaSBhbGfDum4gYmFja2VuZCBwcmVzZW50YSB1bmEgY2FkZW5jaWEgbXV5IGRpc3RpbnRhIGVuIHByb2R1Y2Npw7NuLlxuICAgIC8vICAgd2luZG93LnN0cmVhbUFkYXB0ID0gZmFsc2UgICAgICAvLyBkZXNhY3RpdmEgYWRhcHRhY2nDs24gYWwgYmFja2VuZFxuICAgIC8vICAgd2luZG93LnN0cmVhbUJ1ZmZlck1zID0gNjAwICAgICAvLyBjb2xjaMOzbiBvYmpldGl2byAobXMpXG4gICAgLy8gICB3aW5kb3cuc3RyZWFtTGFnTXMgPSA0NTAgICAgICAgIC8vIGxhZyBtw6F4aW1vIGJhc2UgKG1zKVxuICAgIC8vICAgd2luZG93LnN0cmVhbU1pbkJ1ZmZlciA9IDcwICAgICAvLyBwaXNvIGRlbCBjb2xjaMOzbiBlbiBjaGFyc1xuICAgIC8vICAgd2luZG93LnN0cmVhbVdhcm11cE1zID0gNDAwICAgICAvLyB3YXJtdXAgaW5pY2lhbCAobXMpXG4gICAgY29uc3Qgd2luRmxhZ3MgPVxuICAgICAgdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAgPyAod2luZG93IGFzIHVua25vd24gYXMge1xuICAgICAgICAgICAgc3RyZWFtQWRhcHQ/OiBib29sZWFuXG4gICAgICAgICAgICBzdHJlYW1CdWZmZXJNcz86IG51bWJlclxuICAgICAgICAgICAgc3RyZWFtTGFnTXM/OiBudW1iZXJcbiAgICAgICAgICAgIHN0cmVhbU1pbkJ1ZmZlcj86IG51bWJlclxuICAgICAgICAgICAgc3RyZWFtV2FybXVwTXM/OiBudW1iZXJcbiAgICAgICAgICB9KVxuICAgICAgICA6IHt9XG4gICAgY29uc3QgZGlzcGxheVRleHQgPSB1c2VTbW9vdGhTdHJlYW1UZXh0KHJhd1RleHQsIHtcbiAgICAgIGVuYWJsZWQ6ICEhcHJvcHMuaXNTdHJlYW1pbmcsXG4gICAgICBtYXhDaGFyc1BlckZyYW1lOiAyNCxcbiAgICAgIHNuYXBUb1dvcmRCb3VuZGFyeTogdHJ1ZSxcbiAgICAgIC4uLih3aW5GbGFncy5zdHJlYW1MYWdNcyAhPSBudWxsICYmIHsgdGFyZ2V0TGFnTXM6IHdpbkZsYWdzLnN0cmVhbUxhZ01zIH0pLFxuICAgICAgLi4uKHdpbkZsYWdzLnN0cmVhbUFkYXB0ICE9IG51bGwgJiYgeyBhZGFwdFRvQmFja2VuZFJhdGU6IHdpbkZsYWdzLnN0cmVhbUFkYXB0IH0pLFxuICAgICAgLi4uKHdpbkZsYWdzLnN0cmVhbUJ1ZmZlck1zICE9IG51bGwgJiYgeyB0YXJnZXRCdWZmZXJNczogd2luRmxhZ3Muc3RyZWFtQnVmZmVyTXMgfSksXG4gICAgICAuLi4od2luRmxhZ3Muc3RyZWFtTWluQnVmZmVyICE9IG51bGwgJiYgeyBtaW5CdWZmZXJDaGFyczogd2luRmxhZ3Muc3RyZWFtTWluQnVmZmVyIH0pLFxuICAgICAgLi4uKHdpbkZsYWdzLnN0cmVhbVdhcm11cE1zICE9IG51bGwgJiYgeyB3YXJtdXBNczogd2luRmxhZ3Muc3RyZWFtV2FybXVwTXMgfSksXG4gICAgfSlcbiAgICBjb25zdCBjcmVhdGVBZ2VudEFjdGlvbnNBZ2VudElkID0gcHJvcHMuY3JlYXRlQWdlbnRGb2xsb3dVcD8uYWdlbnRJZFxuXG4gICAgaWYgKCFkaXNwbGF5VGV4dCAmJiAhcHJvcHMuaXNTdHJlYW1pbmcpIHJldHVybiBudWxsXG4gICAgY29uc3QgaGFzTWVudGlvbnMgPSBoYXNJbmxpbmVNYXJrZXJzKGRpc3BsYXlUZXh0KVxuICAgIGNvbnN0IG1lbnRpb25Ob2RlcyA9IGhhc01lbnRpb25zID8gcmVuZGVyVGV4dFdpdGhNZW50aW9ucyhkaXNwbGF5VGV4dCkgOiBudWxsXG4gICAgcmV0dXJuIChcbiAgICAgIDw+XG4gICAgICAgIDxTQ0NBSU1lc3NhZ2VXcmFwcGVyXG4gICAgICAgICAgaXNDdXJyZW50VXNlcj17cHJvcHMuaXNDdXJyZW50VXNlcn1cbiAgICAgICAgICBpc0Zyb250ZW5kQ2FuY2VsbGVkPXtwcm9wcy5pc0Zyb250ZW5kQ2FuY2VsbGVkfVxuICAgICAgICAgIGNsYXNzTmFtZT17Z2V0RW50aXR5TGlua1dyYXBwZXJDbGFzc05hbWUoZGlzcGxheVRleHQpfVxuICAgICAgICA+XG4gICAgICAgICAge2hhc01lbnRpb25zICYmIG1lbnRpb25Ob2RlcyA/IChcbiAgICAgICAgICAgIC8vIFNpIGhheSBtZW50aW9ucywgcmVuZGVyaXphciBkaXJlY3RhbWVudGUgKHNpbiBtYXJrZG93biBlbiBlbCBtaXNtbyBww6FycmFmbylcbiAgICAgICAgICAgIDxzcGFuIHN0eWxlPXt7IGRpc3BsYXk6ICdpbmxpbmUnIH19PnttZW50aW9uTm9kZXN9PC9zcGFuPlxuICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAvLyBTaW4gbWVudGlvbnMsIHBhc2FyIGEgU3RyZWFtZG93biBwYXJhIG1hcmtkb3duIHN1cHBvcnRcbiAgICAgICAgICAgIDxNYWlhU3RyZWFtZG93blxuICAgICAgICAgICAgICB2YXJpYW50PVwiY2hhdFwiXG4gICAgICAgICAgICAgIGlzQ3VycmVudFVzZXI9e3Byb3BzLmlzQ3VycmVudFVzZXJ9XG4gICAgICAgICAgICAgIGlzRnJvbnRlbmRDYW5jZWxsZWQ9e3Byb3BzLmlzRnJvbnRlbmRDYW5jZWxsZWR9XG4gICAgICAgICAgICAgIGNvbXBvbmVudHM9e3sgYTogRW50aXR5TGlua0N1c3RvbUxpbmsgfSBhcyBNYWlhU3RyZWFtZG93blByb3BzWydjb21wb25lbnRzJ119XG4gICAgICAgICAgICAgIGlzQW5pbWF0aW5nPXshIXByb3BzLmlzU3RyZWFtaW5nfVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7ZGlzcGxheVRleHR9XG4gICAgICAgICAgICA8L01haWFTdHJlYW1kb3duPlxuICAgICAgICAgICl9XG4gICAgICAgIDwvU0NDQUlNZXNzYWdlV3JhcHBlcj5cbiAgICAgICAge3Byb3BzLmlzQXNzaXN0YW50ICYmXG4gICAgICAgICAgIXByb3BzLmlzRXJyb3IgJiZcbiAgICAgICAgICAhcHJvcHMuYXBwcm92YWwgJiZcbiAgICAgICAgICAhcHJvcHMuaXNTdHJlYW1pbmcgJiZcbiAgICAgICAgICAoIXByb3BzLmlzRnJvbnRlbmRDYW5jZWxsZWQgfHwgISFwcm9wcy5vblJldHJ5KSAmJiAoXG4gICAgICAgICAgICA8TWVzc2FnZUZlZWRiYWNrXG4gICAgICAgICAgICAgIGNvbnRlbnQ9e2Rpc3BsYXlUZXh0fVxuICAgICAgICAgICAgICBzb3VyY2VzPXtwcm9wcy5pc0Zyb250ZW5kQ2FuY2VsbGVkID8gdW5kZWZpbmVkIDogcHJvcHMuc291cmNlc31cbiAgICAgICAgICAgICAgaGFuZGxlRmVlZGJhY2s9e3Byb3BzLmlzRnJvbnRlbmRDYW5jZWxsZWQgPyB1bmRlZmluZWQgOiBwcm9wcy5oYW5kbGVGZWVkYmFja0NsaWNrfVxuICAgICAgICAgICAgICBkaXNhYmxlRmVlZGJhY2s9e3Byb3BzLmRpc2FibGVGZWVkYmFja31cbiAgICAgICAgICAgICAgb25SZXRyeT17cHJvcHMub25SZXRyeX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgKX1cbiAgICAgICAge3Byb3BzLmlzQXNzaXN0YW50ICYmXG4gICAgICAgICAgIXByb3BzLmlzRnJvbnRlbmRDYW5jZWxsZWQgJiZcbiAgICAgICAgICAhcHJvcHMuYXBwcm92YWwgJiZcbiAgICAgICAgICAoIXByb3BzLmlzRXJyb3IgfHwgcHJvcHMuc3VnZ2VzdGlvbnM/Lmxlbmd0aCkgJiYgKFxuICAgICAgICAgICAgPENoYXRBSVN1Z2dlc3Rpb25zXG4gICAgICAgICAgICAgIHN1Z2dlc3Rpb25zPXtwcm9wcy5zdWdnZXN0aW9ucyB8fCBbXX1cbiAgICAgICAgICAgICAgb25TZWxlY3RTdWdnZXN0aW9uPXtzdWdnZXN0aW9uID0+IHByb3BzLmhhbmRsZVN1Z2dlc3Rpb25DbGljayhwcm9wcy5tZXNzYWdlSWQsIHN1Z2dlc3Rpb24pfVxuICAgICAgICAgICAgICBkaXNhYmxlZD17cHJvcHMuc3VnZ2VzdGlvbnNEaXNhYmxlZH1cbiAgICAgICAgICAgICAgaGlkZGVuPXshIXByb3BzLmlzU3RyZWFtaW5nIHx8ICFwcm9wcy5pc0xhc3RNZXNzYWdlIHx8ICEhcHJvcHMuc3VnZ2VzdGlvbnNEaXNhYmxlZH1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgKX1cbiAgICAgICAge3Byb3BzLmlzQXNzaXN0YW50ICYmXG4gICAgICAgICAgIXByb3BzLmlzRXJyb3IgJiZcbiAgICAgICAgICAhcHJvcHMuaXNGcm9udGVuZENhbmNlbGxlZCAmJlxuICAgICAgICAgICFwcm9wcy5hcHByb3ZhbCAmJlxuICAgICAgICAgICEhY3JlYXRlQWdlbnRBY3Rpb25zQWdlbnRJZCAmJiAoXG4gICAgICAgICAgICA8Q2hhdEFJQ3JlYXRlQWdlbnRBY3Rpb25zXG4gICAgICAgICAgICAgIGFnZW50SWQ9e2NyZWF0ZUFnZW50QWN0aW9uc0FnZW50SWR9XG4gICAgICAgICAgICAgIGRpc2FibGVkPXtwcm9wcy5zdWdnZXN0aW9uc0Rpc2FibGVkfVxuICAgICAgICAgICAgICBoaWRkZW49eyEhcHJvcHMuaXNTdHJlYW1pbmcgfHwgIXByb3BzLmlzTGFzdE1lc3NhZ2UgfHwgISFwcm9wcy5zdWdnZXN0aW9uc0Rpc2FibGVkfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICApfVxuICAgICAgPC8+XG4gICAgKVxuICB9XG4pXG5cbmNvbnN0IE1lc3NhZ2VJdGVtID0gbWVtbygocHJvcHM6IE1lc3NhZ2VJdGVtUHJvcHMpID0+IHtcbiAgY29uc3Qge1xuICAgIGlkLFxuICAgIHVzZXIsXG4gICAgbWVzc2FnZSxcbiAgICBpc1N0cmVhbWluZyxcbiAgICBpc0Vycm9yLFxuICAgIGF1dGhVc2VyLFxuICAgIG9wdGlvbnMsXG4gICAgaXNDaGFuZ2VQcm9qZWN0LFxuICAgIGhhbmRsZVNlbGVjdE9wdGlvbixcbiAgICBoYW5kbGVTdWdnZXN0aW9uQ2xpY2ssXG4gICAgaGFuZGxlRmVlZGJhY2ssXG4gICAgaGFuZGxlQXBwcm92YWxEZWNpc2lvbixcbiAgICBkaXNhYmxlRmVlZGJhY2ssXG4gICAgaGFuZGxlUmV0cnksXG4gICAgcm9sZSxcbiAgICBzb3VyY2VzLFxuICAgIGF0dGFjaG1lbnRzLFxuICAgIGFwcHJvdmFsLFxuICAgIGFwcHJvdmFsU3RhdHVzLFxuICAgIHN1Z2dlc3Rpb25zLFxuICAgIGNyZWF0ZUFnZW50Rm9sbG93VXAsXG4gICAgaGFzU2VsZWN0ZWRTdWdnZXN0aW9uLFxuICAgIGlzTGFzdE1lc3NhZ2UsXG4gICAgc3RyZWFtQWN0aXZpdHksXG4gIH0gPSBwcm9wc1xuXG4gIGNvbnN0IFtwcmV2aWV3QXR0YWNobWVudCwgc2V0UHJldmlld0F0dGFjaG1lbnRdID0gdXNlU3RhdGU8QXR0YWNobWVudEZpbGUgfCBudWxsPihudWxsKVxuICBjb25zdCBpc0N1cnJlbnRVc2VyID0gcm9sZSA9PT0gQ2hhdEhpc3RvcnlSb2xlLlVTRVIgfHwgdXNlci5pZCA9PT0gYXV0aFVzZXIuaWQudG9TdHJpbmcoKVxuICBjb25zdCBpc0Fzc2lzdGFudCA9IHJvbGUgPT09IENoYXRIaXN0b3J5Um9sZS5BU1NJU1RBTlQgfHwgdXNlci5pZCA9PT0gJ2Fzc2lzdGFudCdcbiAgY29uc3QgaXNTdHJlYW1pbmdQbGFjZWhvbGRlciA9IGlzU3RyZWFtaW5nUGxhY2Vob2xkZXJNZXNzYWdlSWQoaWQpXG4gIGNvbnN0IHN0cmVhbWluZ1RleHQgPSB1c2VTdHJlYW1pbmdNZXNzYWdlKGlzU3RyZWFtaW5nIHx8IGlzU3RyZWFtaW5nUGxhY2Vob2xkZXIgPyBpZCA6IG51bGwpXG4gIGNvbnN0IGlzQWN0aXZlU3RyZWFtaW5nID0gISFpc1N0cmVhbWluZyB8fCBpc1N0cmVhbWluZ1BsYWNlaG9sZGVyXG4gIGNvbnN0IGhhc1N0cmVhbVRleHQgPSBCb29sZWFuKHN0cmVhbWluZ1RleHQpXG4gIGNvbnN0IHJlYXNvbmluZ1RyYWNlID0gdXNlUmVhc29uaW5nVHJhY2UoaXNBc3Npc3RhbnQgJiYgaXNBY3RpdmVTdHJlYW1pbmcgPyBpZCA6ICcnKVxuICBjb25zdCBzdHJlYW1OYXJyYXRpb25JblRpbWVsaW5lID1cbiAgICBpc0Fzc2lzdGFudCAmJiBzaG91bGRTdHJlYW1OYXJyYXRpb25JblRpbWVsaW5lKHJlYXNvbmluZ1RyYWNlLnN0ZXBzLCBzdHJlYW1BY3Rpdml0eSwgc3RyZWFtaW5nVGV4dCwgaWQpXG4gIGNvbnN0IHNob3dTdHJlYW1pbmdCb2R5ID0gaXNBY3RpdmVTdHJlYW1pbmcgJiYgaGFzU3RyZWFtVGV4dCAmJiAhc3RyZWFtTmFycmF0aW9uSW5UaW1lbGluZVxuICBjb25zdCBzaG93QWN0aXZpdHlJbmRpY2F0b3IgPSBpc0Fzc2lzdGFudCAmJiBpc0FjdGl2ZVN0cmVhbWluZyAmJiAhIXN0cmVhbUFjdGl2aXR5XG5cbiAgY29uc3QgbWVzc2FnZUF0dGFjaG1lbnRzID1cbiAgICBhdHRhY2htZW50cyAmJiBhdHRhY2htZW50cy5sZW5ndGggPiAwXG4gICAgICA/IGF0dGFjaG1lbnRzXG4gICAgICA6ICFpc0Fzc2lzdGFudCAmJiBBcnJheS5pc0FycmF5KHNvdXJjZXMpXG4gICAgICAgID8gKHNvdXJjZXMgYXMgQXR0YWNobWVudEZpbGVbXSlcbiAgICAgICAgOiBbXVxuXG4gIGNvbnN0IGhhbmRsZUF0dGFjaG1lbnRDbGljayA9IChhdHRhY2htZW50OiBBdHRhY2htZW50RmlsZSkgPT4ge1xuICAgIC8vIFBlcm1pdGlyIHByZXZpc3VhbGl6YWNpw7NuIHNpIHRpZW5lIGFyY2hpdm8gbG9jYWwgbyBVUkxzIGRlbCBiYWNrZW5kXG4gICAgaWYgKFxuICAgICAgYXR0YWNobWVudC5maWxlIGluc3RhbmNlb2YgRmlsZSB8fFxuICAgICAgYXR0YWNobWVudC5vcmlnaW5hbEZpbGUgaW5zdGFuY2VvZiBGaWxlIHx8XG4gICAgICBhdHRhY2htZW50LnVybF90aHVtYm5haWwgfHxcbiAgICAgIGF0dGFjaG1lbnQudXJsX29yaWdpbmFsIHx8XG4gICAgICBhdHRhY2htZW50LnVybF9maWxlXG4gICAgKSB7XG4gICAgICBzZXRQcmV2aWV3QXR0YWNobWVudChhdHRhY2htZW50KVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGhhbmRsZUNsb3NlUHJldmlldyA9ICgpID0+IHtcbiAgICBzZXRQcmV2aWV3QXR0YWNobWVudChudWxsKVxuICB9XG5cbiAgY29uc3QgaGFuZGxlQXR0YWNobWVudERvd25sb2FkID0gYXN5bmMgKGF0dGFjaG1lbnQ6IEF0dGFjaG1lbnRGaWxlKSA9PiB7XG4gICAgY29uc3QgZXh0ZW5zaW9uID0gYXR0YWNobWVudC5uYW1lLmluY2x1ZGVzKCcuJykgPyAnJyA6IGAuJHthdHRhY2htZW50LnR5cGV9YFxuICAgIGNvbnN0IGZpbGVOYW1lID0gYCR7YXR0YWNobWVudC5uYW1lfSR7ZXh0ZW5zaW9ufWBcbiAgICBjb25zdCBmaWxlVXJsID0gYXR0YWNobWVudC51cmxfb3JpZ2luYWwgfHwgYXR0YWNobWVudC51cmxfZmlsZSB8fCBhdHRhY2htZW50LnVybF90aHVtYm5haWxcblxuICAgIHRyeSB7XG4gICAgICBsZXQgYmxvYlVybDogc3RyaW5nIHwgbnVsbCA9IG51bGxcblxuICAgICAgaWYgKGZpbGVVcmwpIHtcbiAgICAgICAgY29uc3QgZG93bmxvYWRlZEZpbGUgPSBhd2FpdCBkb3dubG9hZEZpbGVGcm9tVXJsKGZpbGVVcmwsIGZpbGVOYW1lLCBhdHRhY2htZW50LnR5cGUpXG4gICAgICAgIGJsb2JVcmwgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKGRvd25sb2FkZWRGaWxlKVxuICAgICAgfSBlbHNlIGlmIChhdHRhY2htZW50LmZpbGUgaW5zdGFuY2VvZiBGaWxlKSB7XG4gICAgICAgIGJsb2JVcmwgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKGF0dGFjaG1lbnQuZmlsZSlcbiAgICAgIH1cblxuICAgICAgaWYgKCFibG9iVXJsKSByZXR1cm5cblxuICAgICAgY29uc3QgbGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKVxuICAgICAgbGluay5ocmVmID0gYmxvYlVybFxuICAgICAgbGluay5kb3dubG9hZCA9IGZpbGVOYW1lXG4gICAgICBsaW5rLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSdcbiAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQobGluaylcbiAgICAgIGxpbmsuY2xpY2soKVxuXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChsaW5rKVxuICAgICAgICBVUkwucmV2b2tlT2JqZWN0VVJMKGJsb2JVcmwpXG4gICAgICB9LCAxMDApXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0ZhaWxlZCB0byBkb3dubG9hZCBhdHRhY2htZW50JywgZXJyb3IpXG4gICAgfVxuICB9XG5cbiAgaWYgKGlzQ2hhbmdlUHJvamVjdCAmJiBvcHRpb25zKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxNZXNzYWdlV3JhcHBlciBrZXk9e2lkfSBpc0N1cnJlbnRVc2VyPXtpc0N1cnJlbnRVc2VyfSBkYXRhLW1lc3NhZ2UtaWQ9e2lkfSBoYXNGZWVkYmFjaz17ZmFsc2V9PlxuICAgICAgICA8U0NNZXNzYWdlSXRlbVdyYXBwZXIgJGlzQXNzaXN0YW50PXtpc0Fzc2lzdGFudH0+XG4gICAgICAgICAgPE1lc3NhZ2VDb250ZW50V3JhcHBlclxuICAgICAgICAgICAgaXNDaGFuZ2VQcm9qZWN0PXtpc0NoYW5nZVByb2plY3R9XG4gICAgICAgICAgICBtZXNzYWdlPXttZXNzYWdlfVxuICAgICAgICAgICAgaXNDdXJyZW50VXNlcj17aXNDdXJyZW50VXNlcn1cbiAgICAgICAgICAgIGlzRXJyb3I9e2lzRXJyb3J9XG4gICAgICAgICAgICBtZXNzYWdlRXh0cmFDb250ZW50PXs8TWVzc2FnZU9wdGlvbnMgb3B0aW9ucz17b3B0aW9ucyBhcyBhbnl9IGhhbmRsZVNlbGVjdE9wdGlvbj17aGFuZGxlU2VsZWN0T3B0aW9ufSAvPn1cbiAgICAgICAgICAvPlxuICAgICAgICA8L1NDTWVzc2FnZUl0ZW1XcmFwcGVyPlxuICAgICAgPC9NZXNzYWdlV3JhcHBlcj5cbiAgICApXG4gIH1cblxuICBjb25zdCBoYW5kbGVGZWVkYmFja0NsaWNrID0gKGZlZWRiYWNrOiBGZWVkYmFjaykgPT4ge1xuICAgIGNvbnN0IHNlc3Npb25JZCA9IGlkXG4gICAgICAuc3BsaXQoJy0nKVxuICAgICAgLmZpbHRlcihxdWVzdGlvbklkID0+IHF1ZXN0aW9uSWQgIT09ICdhbnN3ZXInKVxuICAgICAgLmpvaW4oJy0nKVxuICAgIGhhbmRsZUZlZWRiYWNrPy4oZmVlZGJhY2ssIHNlc3Npb25JZClcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPFNDTWVzc2FnZUl0ZW1XcmFwcGVyICRpc0Fzc2lzdGFudD17aXNBc3Npc3RhbnR9IGRhdGEtbWVzc2FnZS1pZD17aWR9PlxuICAgICAgPFNDTWVzc2FnZUl0ZW1Jbm5lcj5cbiAgICAgICAgey8qIE1pc21vIHNsb3QgcGFyYSBsYSB0cmF6YSBlbiB2aXZvIHkgbGEgeWEgcGxlZ2FkYTogbWllbnRyYXMgZWwgdHVybm9cbiAgICAgICAgICAgIGNvcnJlLCBsb3MgcGFzb3Mgc2UgYXBpbGFuIGFjw6EgKHRpbWVsYXBzZSk7IGFsIGNvbXBsZXRhciwgZWxcbiAgICAgICAgICAgIFJlYXNvbmluZ0Jsb2NrIG9jdXBhIGVsIGx1Z2FyIHkgY29sYXBzYSBzb2xvLlxuICAgICAgICAgICAgVmEgQVJSSUJBIGRlbCBjdWVycG8gcG9ycXVlIGxhIG5hcnJhY2nDs24gZGUgY2FkYSB0dXJubyB0ZXJtaW5hIGNvbW9cbiAgICAgICAgICAgIGZpbGEgZGUgbGEgdHJhemE6IHNpIGVzdHV2aWVyYSBhYmFqbywgZWwgdGV4dG8gdmllam8gcXVlZGFyw61hIHBvclxuICAgICAgICAgICAgZGViYWpvIGRlbCB0ZXh0byBudWV2by4gKi99XG4gICAgICAgIHtpc0Fzc2lzdGFudCAmJlxuICAgICAgICAgIChpc0FjdGl2ZVN0cmVhbWluZyA/IChcbiAgICAgICAgICAgIDxSZWFzb25pbmdUaW1lbGluZSBtZXNzYWdlSWQ9e2lkfSBzdHJlYW1BY3Rpdml0eT17c3RyZWFtQWN0aXZpdHl9IHN0cmVhbWluZ1RleHQ9e3N0cmVhbWluZ1RleHR9IC8+XG4gICAgICAgICAgKSA6IChcbiAgICAgICAgICAgIDxSZWFzb25pbmdCbG9jayBtZXNzYWdlSWQ9e2lkfSB0cmFjZT17cHJvcHMucmVhc29uaW5nID8/IG51bGx9IC8+XG4gICAgICAgICAgKSl9XG4gICAgICAgIHshIW1lc3NhZ2VBdHRhY2htZW50cy5sZW5ndGggJiYgKFxuICAgICAgICAgIDxTQ0F0dGFjaG1lbnRzUm93ICRpc0Fzc2lzdGFudD17aXNBc3Npc3RhbnR9PlxuICAgICAgICAgICAge21lc3NhZ2VBdHRhY2htZW50cy5tYXAoKGF0dGFjaG1lbnQsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICAgIC8vIERldGVjdGFyIHNpIGVzIHVuIGFyY2hpdm8gZGUgYXVkaW9cbiAgICAgICAgICAgICAgY29uc3QgYXR0YWNobWVudFR5cGUgPSBhdHRhY2htZW50Py50eXBlPy50b0xvd2VyQ2FzZSgpIHx8ICcnXG4gICAgICAgICAgICAgIGNvbnN0IGF0dGFjaG1lbnROYW1lID0gYXR0YWNobWVudD8ubmFtZT8udG9Mb3dlckNhc2UoKSB8fCAnJ1xuICAgICAgICAgICAgICBjb25zdCBpc0F1ZGlvRmlsZSA9XG4gICAgICAgICAgICAgICAgYXR0YWNobWVudFR5cGUuc3RhcnRzV2l0aCgnYXVkaW8vJykgfHxcbiAgICAgICAgICAgICAgICBbJ2ZsYWMnLCAnbTRhJywgJ21wMycsICdtcDQnLCAnb2dhJywgJ29nZycsICd3YXYnLCAnd2VibSddLmluY2x1ZGVzKGF0dGFjaG1lbnRUeXBlKSB8fFxuICAgICAgICAgICAgICAgIFsnLmZsYWMnLCAnLm00YScsICcubXAzJywgJy5tcDQnLCAnLm9nYScsICcub2dnJywgJy53YXYnLCAnLndlYm0nXS5zb21lKGV4dCA9PlxuICAgICAgICAgICAgICAgICAgYXR0YWNobWVudE5hbWUuZW5kc1dpdGgoZXh0KVxuICAgICAgICAgICAgICAgIClcblxuICAgICAgICAgICAgICBpZiAoaXNBdWRpb0ZpbGUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gPEF0dGFjaG1lbnRDYXJkQXVkaW8ga2V5PXtgJHthdHRhY2htZW50LmlkfS0ke2F0dGFjaG1lbnQubmFtZX1gfSBhdHRhY2htZW50PXthdHRhY2htZW50fSAvPlxuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICA8QXR0YWNobWVudENhcmRcbiAgICAgICAgICAgICAgICAgIGtleT17YCR7YXR0YWNobWVudC5pZH0tJHthdHRhY2htZW50Lm5hbWV9YH1cbiAgICAgICAgICAgICAgICAgIGF0dGFjaG1lbnQ9e2F0dGFjaG1lbnR9XG4gICAgICAgICAgICAgICAgICBwb3NpdGlvbkluZGV4PXtpbmRleH1cbiAgICAgICAgICAgICAgICAgIG9uRG93bmxvYWQ9eygpID0+IGhhbmRsZUF0dGFjaG1lbnREb3dubG9hZChhdHRhY2htZW50KX1cbiAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IGhhbmRsZUF0dGFjaG1lbnRDbGljayhhdHRhY2htZW50KX1cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9KX1cbiAgICAgICAgICA8L1NDQXR0YWNobWVudHNSb3c+XG4gICAgICAgICl9XG4gICAgICAgIHsoISFtZXNzYWdlIHx8IHNob3dTdHJlYW1pbmdCb2R5KSAmJiAhKGlzQXNzaXN0YW50ICYmICEhbWVzc2FnZUF0dGFjaG1lbnRzLmxlbmd0aCkgJiYgKFxuICAgICAgICAgIDxTdHJlYW1pbmdNZXNzYWdlQm9keVxuICAgICAgICAgICAgbWVzc2FnZT17bWVzc2FnZSA/PyAnJ31cbiAgICAgICAgICAgIGlzU3RyZWFtaW5nPXtzaG93U3RyZWFtaW5nQm9keX1cbiAgICAgICAgICAgIGlzQ3VycmVudFVzZXI9e2lzQ3VycmVudFVzZXJ9XG4gICAgICAgICAgICBpc0Fzc2lzdGFudD17aXNBc3Npc3RhbnR9XG4gICAgICAgICAgICBpc0Zyb250ZW5kQ2FuY2VsbGVkPXtwcm9wcy5pc0Zyb250ZW5kQ2FuY2VsbGVkfVxuICAgICAgICAgICAgYXBwcm92YWw9e2FwcHJvdmFsfVxuICAgICAgICAgICAgaXNFcnJvcj17aXNFcnJvcn1cbiAgICAgICAgICAgIHNvdXJjZXM9e3NvdXJjZXN9XG4gICAgICAgICAgICBzdWdnZXN0aW9ucz17c3VnZ2VzdGlvbnN9XG4gICAgICAgICAgICBjcmVhdGVBZ2VudEZvbGxvd1VwPXtjcmVhdGVBZ2VudEZvbGxvd1VwfVxuICAgICAgICAgICAgaGFuZGxlRmVlZGJhY2tDbGljaz17aGFuZGxlRmVlZGJhY2tDbGlja31cbiAgICAgICAgICAgIGRpc2FibGVGZWVkYmFjaz17ZGlzYWJsZUZlZWRiYWNrID8/IG51bGx9XG4gICAgICAgICAgICBvblJldHJ5PXtoYW5kbGVSZXRyeX1cbiAgICAgICAgICAgIGhhbmRsZVN1Z2dlc3Rpb25DbGljaz17aGFuZGxlU3VnZ2VzdGlvbkNsaWNrfVxuICAgICAgICAgICAgc3VnZ2VzdGlvbnNEaXNhYmxlZD17aXNBY3RpdmVTdHJlYW1pbmcgfHwgISFoYXNTZWxlY3RlZFN1Z2dlc3Rpb259XG4gICAgICAgICAgICBtZXNzYWdlSWQ9e2lkfVxuICAgICAgICAgICAgaXNMYXN0TWVzc2FnZT17aXNMYXN0TWVzc2FnZX1cbiAgICAgICAgICAvPlxuICAgICAgICApfVxuICAgICAgICB7LyogU3Bpbm5lciBkZSBhY3RpdmlkYWQ6IHZpc2libGUgdGFtYmnDqW4gZW4gd3JpdGluZyAobmFycmFjacOzbiBlbiB0cmF6YSBvIHJlc3B1ZXN0YSBmaW5hbCkuICovfVxuICAgICAgICB7c2hvd0FjdGl2aXR5SW5kaWNhdG9yICYmIChcbiAgICAgICAgICA8U0NUaW1lbGluZUluZGljYXRvcj5cbiAgICAgICAgICAgIDxBZ2VudEFjdGl2aXR5SW5kaWNhdG9yIGFjdGl2aXR5PXtzdHJlYW1BY3Rpdml0eX0gY29tcGFjdCAvPlxuICAgICAgICAgIDwvU0NUaW1lbGluZUluZGljYXRvcj5cbiAgICAgICAgKX1cbiAgICAgICAge2FwcHJvdmFsICYmIGFwcHJvdmFsLnBlbmRpbmdfYWN0aW9ucyAmJiAoXG4gICAgICAgICAgPFNDQXBwcm92YWxBY3Rpb25zQ29sdW1uPlxuICAgICAgICAgICAgPEFwcHJvdmFsQm94XG4gICAgICAgICAgICAgIGFjdGlvbnM9e2FwcHJvdmFsLnBlbmRpbmdfYWN0aW9uc31cbiAgICAgICAgICAgICAgc3RhdHVzPXthcHByb3ZhbFN0YXR1c31cbiAgICAgICAgICAgICAgb25BcHByb3ZlPXsodGhyZWFkSWRzLCBtZXRhZGF0YSkgPT4gaGFuZGxlQXBwcm92YWxEZWNpc2lvbih0aHJlYWRJZHMsICdhcHByb3ZlJywgdW5kZWZpbmVkLCBtZXRhZGF0YSl9XG4gICAgICAgICAgICAgIG9uUmVqZWN0PXt0aHJlYWRJZHMgPT4gaGFuZGxlQXBwcm92YWxEZWNpc2lvbih0aHJlYWRJZHMsICdyZWplY3QnKX1cbiAgICAgICAgICAgICAgaXNQcm9qZWN0RGVsZXRlZD17cHJvcHMucHJvamVjdE1ldGFkYXRhPy5pc19kZWxldGVkID09PSB0cnVlfVxuICAgICAgICAgICAgICBpc0V4cGFuZGVkPXtwcm9wcy5leHBhbmRlZH1cbiAgICAgICAgICAgICAgaGl0bEluc3RhbmNlSWQ9e2FwcHJvdmFsLm9yaWdpbmFsX3RocmVhZF9pZH1cbiAgICAgICAgICAgICAgd2FybmluZ01lc3NhZ2U9e2FwcHJvdmFsLndhcm5pbmdfbWVzc2FnZX1cbiAgICAgICAgICAgICAgbWFudWFsQXBwcm92YWxEZXRlY3RlZD17YXBwcm92YWwubWFudWFsX2FwcHJvdmFsX2RldGVjdGVkfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L1NDQXBwcm92YWxBY3Rpb25zQ29sdW1uPlxuICAgICAgICApfVxuICAgICAgPC9TQ01lc3NhZ2VJdGVtSW5uZXI+XG4gICAgICA8QXR0YWNobWVudFByZXZpZXdNb2RhbFxuICAgICAgICBpc09wZW49eyEhcHJldmlld0F0dGFjaG1lbnR9XG4gICAgICAgIG9uQ2xvc2U9e2hhbmRsZUNsb3NlUHJldmlld31cbiAgICAgICAgYXR0YWNobWVudD17cHJldmlld0F0dGFjaG1lbnR9XG4gICAgICAvPlxuICAgIDwvU0NNZXNzYWdlSXRlbVdyYXBwZXI+XG4gIClcbn0pXG5cbmNvbnN0IENoYXRBSU1lc3NhZ2VzSW5uZXIgPSAoe1xuICB1c2VySW5pdGlhbE1lc3NhZ2UsXG4gIGluaXRpYWxDaGF0SWQsXG4gIG9uRXJyb3IsXG4gIG9uU2VuZE1lc3NhZ2VSZWFkeSxcbiAgb25TY3JvbGxUb0JvdHRvbSxcbiAgYXR0YWNobWVudHMsXG4gIGFnZW50cyxcbiAgZXhwYW5kZWQsXG59OiBDaGF0QUlNZXNzYWdlc1Byb3BzKSA9PiB7XG4gIGNvbnN0IHsgdCB9ID0gdXNlVCgpXG4gIGNvbnN0IHsgaXNXZWJTZWFyY2hBY3RpdmUsIGlzRGVlcFNlYXJjaEFjdGl2ZSwgYWdlbnQgfSA9IHVzZUdsb2JhbENvbnRleHQoKVxuICBjb25zdCBldmVudCA9IHVzZUV2ZW50KClcbiAgY29uc3QgYXV0aFVzZXIgPSB1c2VVc2VyKClcbiAgY29uc3QgbWVzc2FnZXNSZWYgPSB1c2VSZWY8SFRNTERpdkVsZW1lbnQ+KG51bGwpXG4gIGNvbnN0IGNoYXRJbml0aWFsaXplZFJlZiA9IHVzZVJlZihmYWxzZSlcbiAgY29uc3QgaXNMb2FkaW5nTW9yZVJlZiA9IHVzZVJlZihmYWxzZSlcbiAgY29uc3Qgc2Nyb2xsVGhyZXNob2xkUmVmID0gdXNlUmVmKDM5KVxuICBjb25zdCBsYXN0U2Nyb2xsVG9wUmVmID0gdXNlUmVmKDApXG4gIGNvbnN0IHNob3dTY3JvbGxUb0JvdHRvbVJlZiA9IHVzZVJlZihmYWxzZSlcbiAgY29uc3Qgc2hvd1RvcEdyYWRpZW50UmVmID0gdXNlUmVmKGZhbHNlKVxuICBjb25zdCBzaG93Qm90dG9tR3JhZGllbnRSZWYgPSB1c2VSZWYoZmFsc2UpXG4gIGNvbnN0IHNjcm9sbFJhZlJlZiA9IHVzZVJlZjxudW1iZXIgfCBudWxsPihudWxsKVxuICAvKipcbiAgICogVHVybm8gY29uIGVsIHNjcm9sbCBiYWpvIGNvbnRyb2wgZGVsIHVzdWFyaW86IGRlc2RlIHF1ZSBlbnbDrWEgZWwgbWVuc2FqZSB5XG4gICAqIGhhc3RhIGVsIHByw7N4aW1vIGVudsOtbyBubyBtb3ZlbW9zIGVsIHNjcm9sbCBwb3IgbmluZ8O6biBtb3Rpdm8uIEVzXG4gICAqIGluZGVwZW5kaWVudGUgZGUgbGEgYWx0dXJhIGRlbCBzcGFjZXIsIHF1ZSBwdWVkZSBsbGVnYXIgYSAwIHNpbiBkZXNhbmNsYXIuXG4gICAqL1xuICBjb25zdCBhbmNob3JlZFR1cm5JZFJlZiA9IHVzZVJlZjxzdHJpbmcgfCBudWxsPihudWxsKVxuICBjb25zdCBzcGFjZXJFbFJlZiA9IHVzZVJlZjxIVE1MRGl2RWxlbWVudCB8IG51bGw+KG51bGwpXG4gIGNvbnN0IHNwYWNlckhlaWdodFJlZiA9IHVzZVJlZigwKVxuICBjb25zdCB0dXJuU2Nyb2xsUmFmUmVmID0gdXNlUmVmPG51bWJlciB8IG51bGw+KG51bGwpXG4gIGNvbnN0IHdhc0xvYWRpbmdNZXNzYWdlc1JlZiA9IHVzZVJlZihmYWxzZSlcbiAgY29uc3QgbGFzdFNjcm9sbGVkU2Vzc2lvblJlZiA9IHVzZVJlZjxzdHJpbmcgfCBudWxsPihudWxsKVxuICBjb25zdCBwZW5kaW5nU2Nyb2xsUmVzdG9yZVJlZiA9IHVzZVJlZjxudW1iZXIgfCBudWxsPihudWxsKVxuICBjb25zdCBzY3JvbGxQZXJzaXN0VGltZXJSZWYgPSB1c2VSZWY8bnVtYmVyIHwgbnVsbD4obnVsbClcbiAgY29uc3QgW3Nob3dTY3JvbGxUb0JvdHRvbSwgc2V0U2hvd1Njcm9sbFRvQm90dG9tXSA9IHVzZVN0YXRlKGZhbHNlKVxuICBjb25zdCBbc2hvd1RvcEdyYWRpZW50LCBzZXRTaG93VG9wR3JhZGllbnRdID0gdXNlU3RhdGUoZmFsc2UpXG4gIGNvbnN0IFtzaG93Qm90dG9tR3JhZGllbnQsIHNldFNob3dCb3R0b21HcmFkaWVudF0gPSB1c2VTdGF0ZShmYWxzZSlcbiAgY29uc3QgW3NlbGVjdGVkU3VnZ2VzdGlvbk1lc3NhZ2VJZHMsIHNldFNlbGVjdGVkU3VnZ2VzdGlvbk1lc3NhZ2VJZHNdID0gdXNlU3RhdGU8UmVjb3JkPHN0cmluZywgYm9vbGVhbj4+KHt9KVxuXG4gIGNvbnN0IHtcbiAgICBtZXNzYWdlcyxcbiAgICBsb2FkaW5nTWVzc2FnZXMsXG4gICAgaXNMb2FkaW5nTW9yZU1lc3NhZ2VzLFxuICAgIHdhaXRpbmdSZXNwb25zZSxcbiAgICBpc1dyaXRpbmcsXG4gICAgbG9hZGluZ01lc3NhZ2UsXG4gICAgc3RyZWFtQWN0aXZpdHksXG4gICAgYWN0aXZlTG9hZGluZ3MsXG4gICAgc2VuZE1lc3NhZ2UsXG4gICAgcmV0cnlNZXNzYWdlLFxuICAgIGNoYW5nZVByb2plY3QsXG4gICAgaGFuZGxlRmVlZGJhY2ssXG4gICAgaGFuZGxlQXBwcm92YWxEZWNpc2lvbixcbiAgICBpbml0aWFsaXplQ2hhdCxcbiAgICBoYW5kbGVTY3JvbGwsXG4gICAgc3RvcEdlbmVyYXRpb24sXG4gIH0gPSB1c2VDaGF0TWFuYWdlcih7XG4gICAgY2hhdElkOiBpbml0aWFsQ2hhdElkIHx8IHVuZGVmaW5lZCxcbiAgICB1c2VySW5pdGlhbE1lc3NhZ2UsXG4gICAgb25FcnJvcixcbiAgICBhdHRhY2htZW50cyxcbiAgICBhZ2VudHMsXG4gIH0pXG5cbiAgY29uc3QgaGFuZGxlU2VsZWN0T3B0aW9uID0gdXNlQ2FsbGJhY2soXG4gICAgKG9wdGlvbjogUHJvamVjdCkgPT4ge1xuICAgICAgY2hhbmdlUHJvamVjdChvcHRpb24pXG4gICAgfSxcbiAgICBbY2hhbmdlUHJvamVjdF1cbiAgKVxuXG4gIC8qKlxuICAgKiBSZWNhbGN1bGEgZWwgYm90w7NuIFwic2Nyb2xsIHRvIGJvdHRvbVwiIHkgbG9zIGdyYWRpZW50ZXMgZGUgYm9yZGUgYSBwYXJ0aXIgZGVcbiAgICogbGEgcG9zaWNpw7NuIGRlbCBzY3JvbGwuIExvcyByZWZzIGV2aXRhbiBgc2V0U3RhdGVgIGN1YW5kbyBlbCB2YWxvciBubyBjYW1iaWE6XG4gICAqIGVzdG8gY29ycmUgZW4gY2FkYSBmcmFtZSBkZWwgc3RyZWFtLlxuICAgKi9cbiAgY29uc3QgdXBkYXRlU2Nyb2xsQWZmb3JkYW5jZXMgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgY29uc3QgZWwgPSBtZXNzYWdlc1JlZi5jdXJyZW50XG4gICAgaWYgKCFlbCkgcmV0dXJuXG4gICAgY29uc3QgeyBzY3JvbGxUb3AsIHNjcm9sbEhlaWdodCwgY2xpZW50SGVpZ2h0IH0gPSBlbFxuICAgIC8vIEVsIHNwYWNlciBkZWwgdHVybm8gZXMgYWx0byByZXNlcnZhZG8sIG5vIGNvbnRlbmlkbzogc2kgbm8gbG8gZGVzY29udGFtb3NcbiAgICAvLyBsYSBmbGVjaGEgeSBlbCBncmFkaWVudGUgZGUgYWJham8gcXVlZGFuIGVuY2VuZGlkb3MgZHVyYW50ZSB0b2RvIGVsIHR1cm5vLlxuICAgIGNvbnN0IGRpc3RhbmNlRnJvbUJvdHRvbSA9IHNjcm9sbEhlaWdodCAtIHNwYWNlckhlaWdodFJlZi5jdXJyZW50IC0gc2Nyb2xsVG9wIC0gY2xpZW50SGVpZ2h0XG5cbiAgICBjb25zdCBzaG91bGRTaG93ID0gZGlzdGFuY2VGcm9tQm90dG9tID4gNTBcbiAgICBpZiAoc2hvd1Njcm9sbFRvQm90dG9tUmVmLmN1cnJlbnQgIT09IHNob3VsZFNob3cpIHtcbiAgICAgIHNob3dTY3JvbGxUb0JvdHRvbVJlZi5jdXJyZW50ID0gc2hvdWxkU2hvd1xuICAgICAgc2V0U2hvd1Njcm9sbFRvQm90dG9tKHNob3VsZFNob3cpXG4gICAgfVxuXG4gICAgY29uc3QgbmV4dFRvcEdyYWRpZW50ID0gc2Nyb2xsVG9wID4gMVxuICAgIGlmIChzaG93VG9wR3JhZGllbnRSZWYuY3VycmVudCAhPT0gbmV4dFRvcEdyYWRpZW50KSB7XG4gICAgICBzaG93VG9wR3JhZGllbnRSZWYuY3VycmVudCA9IG5leHRUb3BHcmFkaWVudFxuICAgICAgc2V0U2hvd1RvcEdyYWRpZW50KG5leHRUb3BHcmFkaWVudClcbiAgICB9XG5cbiAgICBjb25zdCBuZXh0Qm90dG9tR3JhZGllbnQgPSBkaXN0YW5jZUZyb21Cb3R0b20gPiAxXG4gICAgaWYgKHNob3dCb3R0b21HcmFkaWVudFJlZi5jdXJyZW50ICE9PSBuZXh0Qm90dG9tR3JhZGllbnQpIHtcbiAgICAgIHNob3dCb3R0b21HcmFkaWVudFJlZi5jdXJyZW50ID0gbmV4dEJvdHRvbUdyYWRpZW50XG4gICAgICBzZXRTaG93Qm90dG9tR3JhZGllbnQobmV4dEJvdHRvbUdyYWRpZW50KVxuICAgIH1cbiAgfSwgW10pXG5cbiAgLyoqXG4gICAqIFNjcm9sbCBpbm1lZGlhdG8gYWwgZm9uZG8gKGRlbnRybyBkZSByQUYgcGFyYSBjb29yZGluYXIgY29uIGVsIHBhaW50KVxuICAgKiB5IGFjdHVhbGl6YSBsYSB2aXNpYmlsaWRhZCBkZWwgYm90w7NuLiBTb2xvIHNlIHVzYSBhbCBhYnJpci9jYXJnYXIgdW4gY2hhdFxuICAgKiBvIGN1YW5kbyBlbCB1c3VhcmlvIHBpZGUgaXIgYWwgZm9uZG86IG51bmNhIGR1cmFudGUgZWwgc3RyZWFtLlxuICAgKi9cbiAgY29uc3Qgc2Nyb2xsVG9Cb3R0b21SYWYgPSB1c2VDYWxsYmFjayhcbiAgICAob3B0czogeyBkZWxheU1zPzogbnVtYmVyIH0gPSB7fSkgPT4ge1xuICAgICAgY29uc3QgeyBkZWxheU1zID0gMCB9ID0gb3B0c1xuICAgICAgY29uc3QgcnVuID0gKCkgPT4ge1xuICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGVsID0gbWVzc2FnZXNSZWYuY3VycmVudFxuICAgICAgICAgIGlmICghZWwpIHJldHVyblxuICAgICAgICAgIGVsLnNjcm9sbFRvcCA9IGVsLnNjcm9sbEhlaWdodFxuICAgICAgICAgIHVwZGF0ZVNjcm9sbEFmZm9yZGFuY2VzKClcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICAgIGlmIChkZWxheU1zID4gMCkgc2V0VGltZW91dChydW4sIGRlbGF5TXMpXG4gICAgICBlbHNlIHJ1bigpXG4gICAgfSxcbiAgICBbdXBkYXRlU2Nyb2xsQWZmb3JkYW5jZXNdXG4gIClcblxuICBjb25zdCBjYW5jZWxUdXJuU2Nyb2xsID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGlmICh0dXJuU2Nyb2xsUmFmUmVmLmN1cnJlbnQgPT09IG51bGwpIHJldHVyblxuICAgIGNhbmNlbEFuaW1hdGlvbkZyYW1lKHR1cm5TY3JvbGxSYWZSZWYuY3VycmVudClcbiAgICB0dXJuU2Nyb2xsUmFmUmVmLmN1cnJlbnQgPSBudWxsXG4gIH0sIFtdKVxuXG4gIC8qKlxuICAgKiBTY3JvbGwgYW5pbWFkbyBjb24gZWFzaW5nIHByb3BpbzogYGJlaGF2aW9yOiAnc21vb3RoJ2Agbm8gcGVybWl0ZSByZWd1bGFyIGxhXG4gICAqIGR1cmFjacOzbiB5IGVsIHNhbHRvIGFsIGFuY2xhciBlbCB0dXJubyBxdWVkYSBkZW1hc2lhZG8gc2Vjby5cbiAgICovXG4gIGNvbnN0IGFuaW1hdGVTY3JvbGxUbyA9IHVzZUNhbGxiYWNrKFxuICAgICh0b3A6IG51bWJlcikgPT4ge1xuICAgICAgY2FuY2VsVHVyblNjcm9sbCgpXG4gICAgICBjb25zdCBlbCA9IG1lc3NhZ2VzUmVmLmN1cnJlbnRcbiAgICAgIGlmICghZWwpIHJldHVyblxuICAgICAgY29uc3QgZnJvbSA9IGVsLnNjcm9sbFRvcFxuICAgICAgY29uc3QgZGlzdGFuY2UgPSB0b3AgLSBmcm9tXG4gICAgICBpZiAoTWF0aC5hYnMoZGlzdGFuY2UpIDwgMSkgcmV0dXJuXG5cbiAgICAgIGNvbnN0IGR1cmF0aW9uID1cbiAgICAgICAgVFVSTl9TQ1JPTExfRFVSQVRJT05fTVMgK1xuICAgICAgICAoVFVSTl9TQ1JPTExfTUFYX0RVUkFUSU9OX01TIC0gVFVSTl9TQ1JPTExfRFVSQVRJT05fTVMpICpcbiAgICAgICAgICBNYXRoLm1pbigxLCBNYXRoLmFicyhkaXN0YW5jZSkgLyBUVVJOX1NDUk9MTF9MT05HX0RJU1RBTkNFX1BYKVxuXG4gICAgICBjb25zdCBzdGFydGVkQXQgPSBwZXJmb3JtYW5jZS5ub3coKVxuICAgICAgY29uc3Qgc3RlcCA9IChub3c6IG51bWJlcikgPT4ge1xuICAgICAgICBjb25zdCBwcm9ncmVzcyA9IE1hdGgubWluKDEsIChub3cgLSBzdGFydGVkQXQpIC8gZHVyYXRpb24pXG4gICAgICAgIC8vIGVhc2VPdXRFeHBvICh+Y3ViaWMtYmV6aWVyKDAuMTYsIDEsIDAuMywgMSkpOiBlbXBpZXphIGEgZnJlbmFyIG11Y2hvXG4gICAgICAgIC8vIGFudGVzIHF1ZSBlbCBxdWludCB5IGF0ZXJyaXphIHNpbiBjb3J0ZSBwZXJjZXB0aWJsZS5cbiAgICAgICAgY29uc3QgZWFzZWQgPSBwcm9ncmVzcyA9PT0gMSA/IDEgOiAxIC0gMiAqKiAoLTEyICogcHJvZ3Jlc3MpXG4gICAgICAgIGVsLnNjcm9sbFRvcCA9IGZyb20gKyBkaXN0YW5jZSAqIGVhc2VkXG4gICAgICAgIHVwZGF0ZVNjcm9sbEFmZm9yZGFuY2VzKClcbiAgICAgICAgdHVyblNjcm9sbFJhZlJlZi5jdXJyZW50ID0gcHJvZ3Jlc3MgPCAxID8gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHN0ZXApIDogbnVsbFxuICAgICAgfVxuICAgICAgdHVyblNjcm9sbFJhZlJlZi5jdXJyZW50ID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHN0ZXApXG4gICAgfSxcbiAgICBbY2FuY2VsVHVyblNjcm9sbCwgdXBkYXRlU2Nyb2xsQWZmb3JkYW5jZXNdXG4gIClcblxuICB1c2VFZmZlY3QoKCkgPT4gY2FuY2VsVHVyblNjcm9sbCwgW2NhbmNlbFR1cm5TY3JvbGxdKVxuXG4gIGNvbnN0IHNldFNwYWNlckhlaWdodCA9IHVzZUNhbGxiYWNrKChuZXh0OiBudW1iZXIpID0+IHtcbiAgICBpZiAoTWF0aC5hYnMoc3BhY2VySGVpZ2h0UmVmLmN1cnJlbnQgLSBuZXh0KSA8IDEpIHJldHVyblxuICAgIHNwYWNlckhlaWdodFJlZi5jdXJyZW50ID0gbmV4dFxuICAgIGlmIChzcGFjZXJFbFJlZi5jdXJyZW50KSB7XG4gICAgICBzcGFjZXJFbFJlZi5jdXJyZW50LnN0eWxlLmhlaWdodCA9IGAke25leHR9cHhgXG4gICAgfVxuICB9LCBbXSlcblxuICBjb25zdCBjbGVhclR1cm5TcGFjZSA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBhbmNob3JlZFR1cm5JZFJlZi5jdXJyZW50ID0gbnVsbFxuICAgIHNldFNwYWNlckhlaWdodCgwKVxuICB9LCBbc2V0U3BhY2VySGVpZ2h0XSlcblxuICAvKipcbiAgICogRGV2dWVsdmUgZWwgYWx0byByZXNlcnZhZG8gcXVlIHNlIHB1ZWRlIHNhY2FyIHNpbiBtb3ZlciBsYSB2aXN0YTogdG9kbyBsb1xuICAgKiBxdWUgcXVlZGUgcG9yIGRlYmFqbyBkZWwgc2Nyb2xsIGFjdHVhbC4gU2kgZWwgdXN1YXJpbyBlc3TDoSBlbiBlbCBmb25kbywgc2VcbiAgICogc2FjYSBlbnRlcm87IHNpIGVzdMOhIGEgbWl0YWQgZGUgY2FtaW5vLCBzZSB2YSBkcmVuYW5kbyBhIG1lZGlkYSBxdWUgYmFqYS5cbiAgICovXG4gIGNvbnN0IGRyYWluVHVyblNwYWNlID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGNvbnN0IGVsID0gbWVzc2FnZXNSZWYuY3VycmVudFxuICAgIGlmICghZWwgfHwgc3BhY2VySGVpZ2h0UmVmLmN1cnJlbnQgPD0gMCkgcmV0dXJuXG4gICAgY29uc3QgcmVtb3ZhYmxlID0gTWF0aC5tYXgoMCwgZWwuc2Nyb2xsSGVpZ2h0IC0gZWwuY2xpZW50SGVpZ2h0IC0gZWwuc2Nyb2xsVG9wKVxuICAgIHNldFNwYWNlckhlaWdodChNYXRoLm1heCgwLCBzcGFjZXJIZWlnaHRSZWYuY3VycmVudCAtIHJlbW92YWJsZSkpXG4gIH0sIFtzZXRTcGFjZXJIZWlnaHRdKVxuXG4gIC8qKlxuICAgKiBFbCB1c3VhcmlvIHRvbcOzIGVsIGNvbnRyb2wgZGVsIHNjcm9sbDogZWwgdHVybm8gZGVqYSBkZSBlc3RhciBhbmNsYWRvIHkgZWxcbiAgICogZXNwYWNpbyByZXNlcnZhZG8gZW1waWV6YSBhIGRldm9sdmVyc2UuIFNpbiBhbmNsYSB5IGNvbiBzcGFjZXIgPiAwLCBlbFxuICAgKiBoYW5kbGVyIGRlIHNjcm9sbCBzaWd1ZSBkcmVuYW5kbyBoYXN0YSBxdWUgbGxlZ2EgYWwgZm9uZG8geSBubyBxdWVkYSBodWVjby5cbiAgICovXG4gIGNvbnN0IHJlbGVhc2VUdXJuU3BhY2UgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgaWYgKCFhbmNob3JlZFR1cm5JZFJlZi5jdXJyZW50ICYmIHNwYWNlckhlaWdodFJlZi5jdXJyZW50IDw9IDApIHJldHVyblxuICAgIGFuY2hvcmVkVHVybklkUmVmLmN1cnJlbnQgPSBudWxsXG4gICAgZHJhaW5UdXJuU3BhY2UoKVxuICB9LCBbZHJhaW5UdXJuU3BhY2VdKVxuXG4gIGNvbnN0IGhhbmRsZVVzZXJTY3JvbGxJbnRlbnQgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgY2FuY2VsVHVyblNjcm9sbCgpXG4gICAgcmVsZWFzZVR1cm5TcGFjZSgpXG4gIH0sIFtjYW5jZWxUdXJuU2Nyb2xsLCByZWxlYXNlVHVyblNwYWNlXSlcblxuICBjb25zdCBtZWFzdXJlVHVybiA9IHVzZUNhbGxiYWNrKChxdWVzdGlvbklkOiBzdHJpbmcpID0+IHtcbiAgICBjb25zdCBlbCA9IG1lc3NhZ2VzUmVmLmN1cnJlbnRcbiAgICBjb25zdCBzcGFjZXJFbCA9IHNwYWNlckVsUmVmLmN1cnJlbnRcbiAgICBpZiAoIWVsIHx8ICFzcGFjZXJFbCkgcmV0dXJuIG51bGxcblxuICAgIGNvbnN0IHF1ZXN0aW9uRWwgPSBlbC5xdWVyeVNlbGVjdG9yPEhUTUxFbGVtZW50PihgW2RhdGEtbWVzc2FnZS1pZD1cIiR7cXVlc3Rpb25JZH1cIl1gKVxuICAgIGlmICghcXVlc3Rpb25FbCkgcmV0dXJuIG51bGxcblxuICAgIGNvbnN0IGNvbnRhaW5lclRvcCA9IGVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcFxuICAgIGNvbnN0IHF1ZXN0aW9uVG9wID0gcXVlc3Rpb25FbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3AgLSBjb250YWluZXJUb3AgKyBlbC5zY3JvbGxUb3BcbiAgICBjb25zdCBjb250ZW50Qm90dG9tID0gc3BhY2VyRWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wIC0gY29udGFpbmVyVG9wICsgZWwuc2Nyb2xsVG9wXG4gICAgcmV0dXJuIHsgZWwsIHF1ZXN0aW9uVG9wLCB0dXJuSGVpZ2h0OiBjb250ZW50Qm90dG9tIC0gcXVlc3Rpb25Ub3AgfVxuICB9LCBbXSlcblxuICBjb25zdCByZXNlcnZlVHVyblNwYWNlID0gdXNlQ2FsbGJhY2soXG4gICAgKHF1ZXN0aW9uSWQ6IHN0cmluZykgPT4ge1xuICAgICAgY29uc3QgbWVhc3VyZWQgPSBtZWFzdXJlVHVybihxdWVzdGlvbklkKVxuICAgICAgaWYgKCFtZWFzdXJlZCkgcmV0dXJuXG4gICAgICBjb25zdCB7IGVsLCBxdWVzdGlvblRvcCwgdHVybkhlaWdodCB9ID0gbWVhc3VyZWRcblxuICAgICAgLy8gQW5jbGFtb3Mgc2llbXByZSwgaW5jbHVzbyBjdWFuZG8gbm8gaGFnYSBmYWx0YSByZXNlcnZhcjogZHVyYW50ZSBlbFxuICAgICAgLy8gdHVybm8gZWwgc2Nyb2xsIG5vIHNlIG11ZXZlIHNvbG8gZW4gbmluZ8O6biBjYXNvLlxuICAgICAgYW5jaG9yZWRUdXJuSWRSZWYuY3VycmVudCA9IHF1ZXN0aW9uSWRcblxuICAgICAgY29uc3Qgb2Zmc2V0ID0gdHVybkFuY2hvck9mZnNldChlbC5jbGllbnRIZWlnaHQpXG4gICAgICBjb25zdCB0YXJnZXRTY3JvbGxUb3AgPSBNYXRoLm1heCgwLCBxdWVzdGlvblRvcCAtIG9mZnNldClcbiAgICAgIC8vIENoYXQgcmVjacOpbiBpbmljaWFkbyBvIGNvbnZlcnNhY2nDs24gcXVlIGHDum4gZW50cmEgZW4gcGFudGFsbGE6IGxhXG4gICAgICAvLyBwcmVndW50YSB5YSBlc3TDoSBhcnJpYmEsIG5vIGhheSBuYWRhIHF1ZSBzdWJpciBuaSBxdWUgcmVzZXJ2YXIuXG4gICAgICBpZiAodGFyZ2V0U2Nyb2xsVG9wIDw9IGVsLnNjcm9sbFRvcCkge1xuICAgICAgICBzZXRTcGFjZXJIZWlnaHQoMClcbiAgICAgICAgdXBkYXRlU2Nyb2xsQWZmb3JkYW5jZXMoKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgLy8gUmVzZXJ2YW1vcyBsbyBtw61uaW1vIHBhcmEgcXVlIGB0YXJnZXRTY3JvbGxUb3BgIHNlYSBhbGNhbnphYmxlLiBFbFxuICAgICAgLy8gc3BhY2VyIHNlIGluc2VydGEgZGUgdW5hIChlcyBhbHRvIHJlc2VydmFkbywgbm8gY29udGVuaWRvIHZpc2libGUpO1xuICAgICAgLy8gbG8gw7puaWNvIHF1ZSBzZSBwZXJjaWJlIGVzIGVsIGRlc3BsYXphbWllbnRvIGFuaW1hZG8uXG4gICAgICBzZXRTcGFjZXJIZWlnaHQoTWF0aC5tYXgoMCwgZWwuY2xpZW50SGVpZ2h0IC0gdHVybkhlaWdodCAtIG9mZnNldCkpXG4gICAgICBhbmltYXRlU2Nyb2xsVG8odGFyZ2V0U2Nyb2xsVG9wKVxuICAgIH0sXG4gICAgW21lYXN1cmVUdXJuLCBzZXRTcGFjZXJIZWlnaHQsIHVwZGF0ZVNjcm9sbEFmZm9yZGFuY2VzLCBhbmltYXRlU2Nyb2xsVG9dXG4gIClcblxuICAvKipcbiAgICogRW5jb2dlIGVsIHNwYWNlciBhIG1lZGlkYSBxdWUgY3JlY2UgbGEgcmVzcHVlc3RhOiBlbCBhbHRvIHRvdGFsIGRlbCBzY3JvbGxcbiAgICogcXVlZGEgY29uc3RhbnRlIHkgbGEgdmlzdGEgbm8gc2UgbXVldmUgc29sYS4gU29sbyBhY2hpY2EsIG51bmNhIGFncmFuZGEsXG4gICAqIHBhcmEgbm8gaW55ZWN0YXIgZXNwYWNpbyBlbiB0dXJub3MgcXVlIGFycmFuY2Fyb24gc2luIHJlc2VydmEuXG4gICAqIERldnVlbHZlIHNpIGVsIHR1cm5vIHNpZ3VlIGFuY2xhZG8gKGF1bnF1ZSBlbCBzcGFjZXIgeWEgc2VhIDApLlxuICAgKi9cbiAgY29uc3Qgc3luY1R1cm5TcGFjZSA9IHVzZUNhbGxiYWNrKCgpOiBib29sZWFuID0+IHtcbiAgICBpZiAoIWFuY2hvcmVkVHVybklkUmVmLmN1cnJlbnQpIHJldHVybiBmYWxzZVxuICAgIGlmIChzcGFjZXJIZWlnaHRSZWYuY3VycmVudCA+IDApIHtcbiAgICAgIGNvbnN0IG1lYXN1cmVkID0gbWVhc3VyZVR1cm4oYW5jaG9yZWRUdXJuSWRSZWYuY3VycmVudClcbiAgICAgIGlmIChtZWFzdXJlZCkge1xuICAgICAgICBjb25zdCBvZmZzZXQgPSB0dXJuQW5jaG9yT2Zmc2V0KG1lYXN1cmVkLmVsLmNsaWVudEhlaWdodClcbiAgICAgICAgY29uc3QgcmVzZXJ2ZWQgPSBNYXRoLm1heCgwLCBtZWFzdXJlZC5lbC5jbGllbnRIZWlnaHQgLSBtZWFzdXJlZC50dXJuSGVpZ2h0IC0gb2Zmc2V0KVxuICAgICAgICBzZXRTcGFjZXJIZWlnaHQoTWF0aC5taW4oc3BhY2VySGVpZ2h0UmVmLmN1cnJlbnQsIHJlc2VydmVkKSlcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRydWVcbiAgfSwgW21lYXN1cmVUdXJuLCBzZXRTcGFjZXJIZWlnaHRdKVxuXG4gIGNvbnN0IGhhbmRsZUNsaWNrU2Nyb2xsVG9Cb3R0b20gPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgY29uc3QgZWwgPSBtZXNzYWdlc1JlZi5jdXJyZW50XG4gICAgaWYgKCFlbCkgcmV0dXJuXG4gICAgY2xlYXJUdXJuU3BhY2UoKVxuICAgIC8vIE1pc21hIGN1cnZhIHkgZHVyYWNpw7NuIHF1ZSBlbCBhbmNsYWplIGRlbCB0dXJubzogZWwgYHNtb290aGAgbmF0aXZvIGZyZW5hIHNlY28uXG4gICAgYW5pbWF0ZVNjcm9sbFRvKGVsLnNjcm9sbEhlaWdodCAtIGVsLmNsaWVudEhlaWdodClcbiAgfSwgW2NsZWFyVHVyblNwYWNlLCBhbmltYXRlU2Nyb2xsVG9dKVxuXG4gIGNvbnN0IGhhbmRsZVNjcm9sbFRvQm90dG9tID0gdXNlQ2FsbGJhY2soXG4gICAgKGU6IFJlYWN0LlVJRXZlbnQ8SFRNTERpdkVsZW1lbnQ+KSA9PiB7XG4gICAgICBjb25zdCBjb250YWluZXIgPSBlLmN1cnJlbnRUYXJnZXRcblxuICAgICAgaWYgKHNjcm9sbFJhZlJlZi5jdXJyZW50ICE9PSBudWxsKSB7XG4gICAgICAgIGNhbmNlbEFuaW1hdGlvbkZyYW1lKHNjcm9sbFJhZlJlZi5jdXJyZW50KVxuICAgICAgfVxuXG4gICAgICBzY3JvbGxSYWZSZWYuY3VycmVudCA9IHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICAgIHNjcm9sbFJhZlJlZi5jdXJyZW50ID0gbnVsbFxuICAgICAgICBjb25zdCB7IHNjcm9sbFRvcCwgc2Nyb2xsSGVpZ2h0LCBjbGllbnRIZWlnaHQgfSA9IGNvbnRhaW5lclxuXG4gICAgICAgIGNvbnN0IGlzU2Nyb2xsaW5nVXAgPSBzY3JvbGxUb3AgPCBsYXN0U2Nyb2xsVG9wUmVmLmN1cnJlbnRcblxuICAgICAgICBpZiAoaXNTY3JvbGxpbmdVcCkge1xuICAgICAgICAgIHNjcm9sbFRocmVzaG9sZFJlZi5jdXJyZW50ID0gMTVcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGlzTmVhckJvdHRvbSA9IHNjcm9sbEhlaWdodCAtIHNjcm9sbFRvcCAtIGNsaWVudEhlaWdodCA8IHNjcm9sbFRocmVzaG9sZFJlZi5jdXJyZW50XG5cbiAgICAgICAgaWYgKGlzTmVhckJvdHRvbSkge1xuICAgICAgICAgIHNjcm9sbFRocmVzaG9sZFJlZi5jdXJyZW50ID0gMzlcbiAgICAgICAgfVxuXG4gICAgICAgIGxhc3RTY3JvbGxUb3BSZWYuY3VycmVudCA9IHNjcm9sbFRvcFxuXG4gICAgICAgIC8vIFR1cm5vIHlhIGxpYmVyYWRvIHBvciBlbCB1c3VhcmlvOiBzZWd1aW1vcyBkZXZvbHZpZW5kbyBlbCBhbHRvXG4gICAgICAgIC8vIHJlc2VydmFkbyBtaWVudHJhcyBiYWphLCBwYXJhIHF1ZSBhbCBsbGVnYXIgYWwgw7psdGltbyBtZW5zYWplIG5vXG4gICAgICAgIC8vIHF1ZWRlIGh1ZWNvIGRlYmFqby5cbiAgICAgICAgaWYgKCFhbmNob3JlZFR1cm5JZFJlZi5jdXJyZW50KSBkcmFpblR1cm5TcGFjZSgpXG5cbiAgICAgICAgdXBkYXRlU2Nyb2xsQWZmb3JkYW5jZXMoKVxuXG4gICAgICAgIGlmIChpbml0aWFsQ2hhdElkICYmIHNjcm9sbFRvcCA+IDApIHtcbiAgICAgICAgICBpZiAoc2Nyb2xsUGVyc2lzdFRpbWVyUmVmLmN1cnJlbnQgIT0gbnVsbCkge1xuICAgICAgICAgICAgd2luZG93LmNsZWFyVGltZW91dChzY3JvbGxQZXJzaXN0VGltZXJSZWYuY3VycmVudClcbiAgICAgICAgICB9XG4gICAgICAgICAgc2Nyb2xsUGVyc2lzdFRpbWVyUmVmLmN1cnJlbnQgPSB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICBwYXRjaE1haWFQYW5lbFNlc3Npb24oYXV0aFVzZXIuaWQsIHtcbiAgICAgICAgICAgICAgc2Nyb2xsVG9wLFxuICAgICAgICAgICAgICBzY3JvbGxTZXNzaW9uSWQ6IGluaXRpYWxDaGF0SWQsXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH0sIDE1MClcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpc05lYXJCb3R0b20gJiYgb25TY3JvbGxUb0JvdHRvbSkge1xuICAgICAgICAgIG9uU2Nyb2xsVG9Cb3R0b20oKVxuICAgICAgICB9XG5cbiAgICAgICAgaGFuZGxlU2Nyb2xsKGNvbnRhaW5lcilcbiAgICAgIH0pXG4gICAgfSxcbiAgICBbYXV0aFVzZXIuaWQsIGRyYWluVHVyblNwYWNlLCBoYW5kbGVTY3JvbGwsIGluaXRpYWxDaGF0SWQsIG9uU2Nyb2xsVG9Cb3R0b20sIHVwZGF0ZVNjcm9sbEFmZm9yZGFuY2VzXVxuICApXG5cbiAgLy8gcmVmcyB0byBzdGFiaWxpemUgZnVuY3Rpb25zIGFuZCBhdm9pZCB1bm5lY2Vzc2FyeSByZS1yZW5kZXJzXG4gIGNvbnN0IHNlbmRNZXNzYWdlUmVmID0gdXNlUmVmKHNlbmRNZXNzYWdlKVxuICBjb25zdCBzdG9wR2VuZXJhdGlvblJlZiA9IHVzZVJlZihzdG9wR2VuZXJhdGlvbilcbiAgY29uc3Qgb25TZW5kTWVzc2FnZVJlYWR5UmVmID0gdXNlUmVmKG9uU2VuZE1lc3NhZ2VSZWFkeSlcbiAgY29uc3Qgc2VuZE1lc3NhZ2VQcm94eVJlZiA9IHVzZVJlZihcbiAgICAoXG4gICAgICBtZXNzYWdlOiBzdHJpbmcsXG4gICAgICBhdHRhY2htZW50cz86IEF0dGFjaG1lbnRGaWxlW10sXG4gICAgICBmYXFJZD86IHN0cmluZyxcbiAgICAgIGFnZW50U3VnZ2VzdGlvbklkPzogc3RyaW5nLFxuICAgICAgbWVudGlvbnM/OiBDb250ZXh0TWVudGlvbltdLFxuICAgICAgZnVhSWQ/OiBzdHJpbmcsXG4gICAgICBzY0lkPzogc3RyaW5nXG4gICAgKSA9PiBzZW5kTWVzc2FnZVJlZi5jdXJyZW50KG1lc3NhZ2UsIGF0dGFjaG1lbnRzLCBmYXFJZCwgYWdlbnRTdWdnZXN0aW9uSWQsIG1lbnRpb25zLCBmdWFJZCwgc2NJZClcbiAgKVxuICBjb25zdCBzdG9wR2VuZXJhdGlvblByb3h5UmVmID0gdXNlUmVmKCgpID0+IHN0b3BHZW5lcmF0aW9uUmVmLmN1cnJlbnQoKSlcblxuICAvLyB1cGRhdGUgcmVmcyB3aGVuIGZ1bmN0aW9ucyBjaGFuZ2VcbiAgc2VuZE1lc3NhZ2VSZWYuY3VycmVudCA9IHNlbmRNZXNzYWdlXG4gIHN0b3BHZW5lcmF0aW9uUmVmLmN1cnJlbnQgPSBzdG9wR2VuZXJhdGlvblxuICBvblNlbmRNZXNzYWdlUmVhZHlSZWYuY3VycmVudCA9IG9uU2VuZE1lc3NhZ2VSZWFkeVxuXG4gIC8qKlxuICAgKiBgaGFuZGxlU3VnZ2VzdGlvbkNsaWNrYCBzZSBwYXNhIGEgVE9ET1MgbG9zIE1lc3NhZ2VJdGVtLCBhc8OtIHF1ZSBzdSBpZGVudGlkYWRcbiAgICogZGVjaWRlIHNpIGVsIGBtZW1vYCBkZSBsYSBsaXN0YSBzb3N0aWVuZS4gTGVlbW9zIHBvciByZWYgbG8gcXVlIGNhbWJpYSBlbiBjYWRhXG4gICAqIHVwZGF0ZSAoYG1lc3NhZ2VzYCwgYHNlbmRNZXNzYWdlYCwgbGFzIHN1Z2VyZW5jaWFzIHlhIGVsZWdpZGFzKSBwYXJhIHF1ZSBlbFxuICAgKiBjYWxsYmFjayBzZWEgZXN0YWJsZTogc2kgbm8sIGFsIHRlcm1pbmFyIGVsIHN0cmVhbSBzZSByZXBpbnRhIGVsIGNoYXQgZW50ZXJvXG4gICAqIHkgY2FkYSBNYWlhU3RyZWFtZG93biB2dWVsdmUgYSBwYXJzZWFyIHN1IG1hcmtkb3duLlxuICAgKi9cbiAgY29uc3QgbWVzc2FnZXNEYXRhUmVmID0gdXNlUmVmKG1lc3NhZ2VzKVxuICBtZXNzYWdlc0RhdGFSZWYuY3VycmVudCA9IG1lc3NhZ2VzXG4gIGNvbnN0IHNlbGVjdGVkU3VnZ2VzdGlvbk1lc3NhZ2VJZHNSZWYgPSB1c2VSZWYoc2VsZWN0ZWRTdWdnZXN0aW9uTWVzc2FnZUlkcylcbiAgc2VsZWN0ZWRTdWdnZXN0aW9uTWVzc2FnZUlkc1JlZi5jdXJyZW50ID0gc2VsZWN0ZWRTdWdnZXN0aW9uTWVzc2FnZUlkc1xuXG4gIGNvbnN0IGhhbmRsZVN1Z2dlc3Rpb25DbGljayA9IHVzZUNhbGxiYWNrKFxuICAgIChtZXNzYWdlSWQ6IHN0cmluZywgc3VnZ2VzdGlvbjogc3RyaW5nKSA9PiB7XG4gICAgICBpZiAoIXN1Z2dlc3Rpb24/LnRyaW0oKSkgcmV0dXJuXG4gICAgICBpZiAoc2VsZWN0ZWRTdWdnZXN0aW9uTWVzc2FnZUlkc1JlZi5jdXJyZW50W21lc3NhZ2VJZF0pIHJldHVyblxuICAgICAgY29uc3QgY3VycmVudE1lc3NhZ2VzID0gbWVzc2FnZXNEYXRhUmVmLmN1cnJlbnRcbiAgICAgIGNvbnN0IGlzTWFya2V0cGxhY2VHbG9iYWxBZ2VudCA9IGlzTWFpYWtlckFnZW50KGFnZW50KVxuICAgICAgZXZlbnQoRVZFTlRTLmFpQ2hhdFN1Z2dlc3RlZEFuc3dlciwge1xuICAgICAgICBhZ2VudF90eXBlOiBpc01hcmtldHBsYWNlR2xvYmFsQWdlbnQgPyAnbWFya2V0cGxhY2UnIDogYWdlbnQ/LnR5cGUsXG4gICAgICB9KVxuICAgICAgc2V0U2VsZWN0ZWRTdWdnZXN0aW9uTWVzc2FnZUlkcyhwcmV2ID0+ICh7IC4uLnByZXYsIFttZXNzYWdlSWRdOiB0cnVlIH0pKVxuXG4gICAgICBjb25zdCB0YXJnZXRNZXNzYWdlID0gY3VycmVudE1lc3NhZ2VzLmZpbmQobXNnID0+IG1zZy5pZCA9PT0gbWVzc2FnZUlkKVxuICAgICAgY29uc3QgaXNSZXRyeVN1Z2dlc3Rpb24gPSAhIXRhcmdldE1lc3NhZ2U/LmlzRXJyb3IgJiYgc3VnZ2VzdGlvbiA9PT0gdCgnY2hhdC5yZXRyeScpXG4gICAgICBpZiAoaXNSZXRyeVN1Z2dlc3Rpb24pIHtcbiAgICAgICAgY29uc3QgbGFzdFVzZXJNZXNzYWdlID0gY3VycmVudE1lc3NhZ2VzXG4gICAgICAgICAgLmZpbHRlcihtc2cgPT4gbXNnLnJvbGUgPT09IENoYXRIaXN0b3J5Um9sZS5VU0VSIHx8IG1zZy51c2VyLmlkID09PSBhdXRoVXNlci5pZC50b1N0cmluZygpKVxuICAgICAgICAgIC5hdCgtMSlcbiAgICAgICAgaWYgKGxhc3RVc2VyTWVzc2FnZT8ubWVzc2FnZSkge1xuICAgICAgICAgIGNvbnN0IHJldHJ5QXR0YWNobWVudHMgPSBBcnJheS5pc0FycmF5KGxhc3RVc2VyTWVzc2FnZS5hdHRhY2htZW50cylcbiAgICAgICAgICAgID8gbGFzdFVzZXJNZXNzYWdlLmF0dGFjaG1lbnRzXG4gICAgICAgICAgICA6IEFycmF5LmlzQXJyYXkobGFzdFVzZXJNZXNzYWdlLnNvdXJjZXMpXG4gICAgICAgICAgICAgID8gbGFzdFVzZXJNZXNzYWdlLnNvdXJjZXNcbiAgICAgICAgICAgICAgOiBbXVxuICAgICAgICAgIHNlbmRNZXNzYWdlUmVmLmN1cnJlbnQobGFzdFVzZXJNZXNzYWdlLm1lc3NhZ2UsIHJldHJ5QXR0YWNobWVudHMpXG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgc2VuZE1lc3NhZ2VSZWYuY3VycmVudChzdWdnZXN0aW9uKVxuICAgIH0sXG4gICAgW2V2ZW50LCBhZ2VudCwgdCwgYXV0aFVzZXIuaWRdXG4gIClcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChvblNlbmRNZXNzYWdlUmVhZHlSZWYuY3VycmVudCkge1xuICAgICAgb25TZW5kTWVzc2FnZVJlYWR5UmVmLmN1cnJlbnQoXG4gICAgICAgIHNlbmRNZXNzYWdlUHJveHlSZWYuY3VycmVudCxcbiAgICAgICAgc3RvcEdlbmVyYXRpb25Qcm94eVJlZi5jdXJyZW50LFxuICAgICAgICB3YWl0aW5nUmVzcG9uc2UsXG4gICAgICAgIGlzV3JpdGluZ1xuICAgICAgKVxuICAgIH1cbiAgfSwgW3dhaXRpbmdSZXNwb25zZSwgaXNXcml0aW5nXSlcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlzTG9hZGluZ01vcmVSZWYuY3VycmVudCA9IGlzTG9hZGluZ01vcmVNZXNzYWdlc1xuICB9LCBbaXNMb2FkaW5nTW9yZU1lc3NhZ2VzXSlcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghY2hhdEluaXRpYWxpemVkUmVmLmN1cnJlbnQpIHtcbiAgICAgIGNoYXRJbml0aWFsaXplZFJlZi5jdXJyZW50ID0gdHJ1ZVxuICAgICAgaW5pdGlhbGl6ZUNoYXQoKVxuICAgIH1cbiAgfSwgW10pXG5cbiAgLy8gTWllbnRyYXMgZWwgc3RyZWFtIGNyZWNlOiBlbmNvZ2VyIGVsIHNwYWNlciBkZWwgdHVybm8gYW5jbGFkbyB5XG4gIC8vIGFjdHVhbGl6YXIgZmxlY2hhL2dyYWRpZW50ZXMuIEVsIHNjcm9sbCBubyBzZSBtdWV2ZSBzb2xvLlxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghd2FpdGluZ1Jlc3BvbnNlICYmICFpc1dyaXRpbmcpIHJldHVybiB1bmRlZmluZWRcbiAgICBpZiAoIW1lc3NhZ2VzUmVmLmN1cnJlbnQpIHJldHVybiB1bmRlZmluZWRcblxuICAgIGxldCByYWZJZDogbnVtYmVyIHwgbnVsbCA9IG51bGxcblxuICAgIGNvbnN0IHRpY2sgPSAoKSA9PiB7XG4gICAgICBjb25zdCBlbCA9IG1lc3NhZ2VzUmVmLmN1cnJlbnRcbiAgICAgIGlmICghZWwpIHtcbiAgICAgICAgcmFmSWQgPSBudWxsXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgICAgc3luY1R1cm5TcGFjZSgpXG4gICAgICB1cGRhdGVTY3JvbGxBZmZvcmRhbmNlcygpXG4gICAgICByYWZJZCA9IHJlcXVlc3RBbmltYXRpb25GcmFtZSh0aWNrKVxuICAgIH1cblxuICAgIHJhZklkID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHRpY2spXG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGlmIChyYWZJZCAhPSBudWxsKSBjYW5jZWxBbmltYXRpb25GcmFtZShyYWZJZClcbiAgICB9XG4gIH0sIFt3YWl0aW5nUmVzcG9uc2UsIGlzV3JpdGluZywgc3luY1R1cm5TcGFjZSwgdXBkYXRlU2Nyb2xsQWZmb3JkYW5jZXNdKVxuXG4gIGNvbnN0IGxhc3RSZXNlcnZlZFF1ZXN0aW9uUmVmID0gdXNlUmVmPHN0cmluZyB8IG51bGw+KG51bGwpXG5cbiAgLy8gQ2FtYmlvIGRlIGNoYXQ6IGVsIGFuY2xhIHkgZWwgc3BhY2VyIGRlbCB0dXJubyBhbnRlcmlvciBkZWphbiBkZSBhcGxpY2FyLlxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghbG9hZGluZ01lc3NhZ2VzKSByZXR1cm5cbiAgICBsYXN0UmVzZXJ2ZWRRdWVzdGlvblJlZi5jdXJyZW50ID0gbnVsbFxuICAgIGNsZWFyVHVyblNwYWNlKClcbiAgfSwgW2xvYWRpbmdNZXNzYWdlcywgY2xlYXJUdXJuU3BhY2VdKVxuXG4gIC8vIEFsIGVudmlhciB1biBtZW5zYWplOiBhbmNsYW1vcyBlbCB0dXJubyB5IGhhY2Vtb3MgZWwgw7puaWNvIHNjcm9sbCBkZWwgY2ljbG8uXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGxvYWRpbmdNZXNzYWdlcyB8fCBpc0xvYWRpbmdNb3JlTWVzc2FnZXMpIHJldHVyblxuXG4gICAgbGV0IHF1ZXN0aW9uSWQ6IHN0cmluZyB8IG51bGwgPSBudWxsXG4gICAgZm9yIChsZXQgaW5kZXggPSBtZXNzYWdlcy5sZW5ndGggLSAxOyBpbmRleCA+PSAwOyBpbmRleCAtPSAxKSB7XG4gICAgICBpZiAobWVzc2FnZXNbaW5kZXhdPy5pZD8uc3RhcnRzV2l0aCgncXVlc3Rpb24tJykpIHtcbiAgICAgICAgcXVlc3Rpb25JZCA9IG1lc3NhZ2VzW2luZGV4XS5pZFxuICAgICAgICBicmVha1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoIXF1ZXN0aW9uSWQgfHwgcXVlc3Rpb25JZCA9PT0gbGFzdFJlc2VydmVkUXVlc3Rpb25SZWYuY3VycmVudCkgcmV0dXJuXG5cbiAgICBsYXN0UmVzZXJ2ZWRRdWVzdGlvblJlZi5jdXJyZW50ID0gcXVlc3Rpb25JZFxuICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiByZXNlcnZlVHVyblNwYWNlKHF1ZXN0aW9uSWQpKVxuICB9LCBbbWVzc2FnZXMsIGxvYWRpbmdNZXNzYWdlcywgaXNMb2FkaW5nTW9yZU1lc3NhZ2VzLCByZXNlcnZlVHVyblNwYWNlXSlcblxuICAvLyBTY3JvbGwgY3VhbmRvIGNhbWJpYW4gbG9zIG1lbnNhamVzOiBkaXN0aW5ndWUgXCJudWV2byBtZW5zYWplXCIgKGFncmVnYWRvKVxuICAvLyBkZSBcInJlZW1wbGF6b1wiIChtaXNtbyBpZC9sZW5ndGgsIGVqLiBmZWVkYmFjayBvIGFwcHJvdmFsU3RhdHVzKS4gRW5cbiAgLy8gcmVlbXBsYXpvcyBzb2xvIHNlIHJlY2FsY3VsYSBsYSB2aXNpYmlsaWRhZCBkZWwgYm90w7NuIHNpbiBmb3J6YXIgc2Nyb2xsLlxuICBjb25zdCBsYXN0TWVzc2FnZUlkUmVmID0gdXNlUmVmPHN0cmluZyB8IG51bGw+KG51bGwpXG4gIGNvbnN0IGxhc3RNZXNzYWdlc0xlbmd0aFJlZiA9IHVzZVJlZjxudW1iZXI+KDApXG5cbiAgLy8gQWwgY2FtYmlhciBkZSBzZXNpw7NuLCByZXNldGVhciBlc3RhZG8gZGUgc2Nyb2xsIG1hbnVhbCBwYXJhIG5vIGhlcmVkYXIgZWwgY2hhdCBhbnRlcmlvci5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICB3YXNMb2FkaW5nTWVzc2FnZXNSZWYuY3VycmVudCA9IGZhbHNlXG4gICAgbGFzdFNjcm9sbGVkU2Vzc2lvblJlZi5jdXJyZW50ID0gbnVsbFxuICAgIHNjcm9sbFRocmVzaG9sZFJlZi5jdXJyZW50ID0gMzlcbiAgICBsYXN0U2Nyb2xsVG9wUmVmLmN1cnJlbnQgPSAwXG4gICAgbGFzdE1lc3NhZ2VJZFJlZi5jdXJyZW50ID0gbnVsbFxuICAgIGxhc3RNZXNzYWdlc0xlbmd0aFJlZi5jdXJyZW50ID0gMFxuICB9LCBbaW5pdGlhbENoYXRJZF0pXG5cbiAgLy8gUmVzdGF1cmFjacOzbiBkZXNkZSBjYWNoZSAoc2luIExvYWRlcik6IGJhamFyIGFsIGZvbmRvIGFsIHJlYWJyaXIgc2VzacOzbiB2aXNpdGFkYS5cbiAgdXNlTGF5b3V0RWZmZWN0KCgpID0+IHtcbiAgICBpZiAobG9hZGluZ01lc3NhZ2VzIHx8ICFpbml0aWFsQ2hhdElkIHx8IG1lc3NhZ2VzLmxlbmd0aCA9PT0gMCkgcmV0dXJuXG4gICAgaWYgKGxhc3RTY3JvbGxlZFNlc3Npb25SZWYuY3VycmVudCA9PT0gaW5pdGlhbENoYXRJZCkgcmV0dXJuXG4gICAgbGFzdFNjcm9sbGVkU2Vzc2lvblJlZi5jdXJyZW50ID0gaW5pdGlhbENoYXRJZFxuXG4gICAgc2Nyb2xsVGhyZXNob2xkUmVmLmN1cnJlbnQgPSAzOVxuICAgIGxhc3RNZXNzYWdlSWRSZWYuY3VycmVudCA9IG1lc3NhZ2VzW21lc3NhZ2VzLmxlbmd0aCAtIDFdPy5pZCA/PyBudWxsXG4gICAgbGFzdE1lc3NhZ2VzTGVuZ3RoUmVmLmN1cnJlbnQgPSBtZXNzYWdlcy5sZW5ndGhcblxuICAgIHNjcm9sbFRvQm90dG9tUmFmKClcbiAgICBzY3JvbGxUb0JvdHRvbVJhZih7IGRlbGF5TXM6IDEwMCB9KVxuICB9LCBbaW5pdGlhbENoYXRJZCwgbG9hZGluZ01lc3NhZ2VzLCBtZXNzYWdlcy5sZW5ndGgsIG1lc3NhZ2VzLCBzY3JvbGxUb0JvdHRvbVJhZl0pXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoIW1lc3NhZ2VzUmVmLmN1cnJlbnQgfHwgbG9hZGluZ01lc3NhZ2VzIHx8IGlzTG9hZGluZ01vcmVNZXNzYWdlcyB8fCBpc0xvYWRpbmdNb3JlUmVmLmN1cnJlbnQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IGxhc3RNZXNzYWdlID0gbWVzc2FnZXNbbWVzc2FnZXMubGVuZ3RoIC0gMV1cbiAgICBjb25zdCBsYXN0SWQgPSBsYXN0TWVzc2FnZT8uaWQgPz8gbnVsbFxuICAgIGNvbnN0IHByZXZJZCA9IGxhc3RNZXNzYWdlSWRSZWYuY3VycmVudFxuICAgIGNvbnN0IHByZXZMZW4gPSBsYXN0TWVzc2FnZXNMZW5ndGhSZWYuY3VycmVudFxuICAgIGxhc3RNZXNzYWdlSWRSZWYuY3VycmVudCA9IGxhc3RJZFxuICAgIGxhc3RNZXNzYWdlc0xlbmd0aFJlZi5jdXJyZW50ID0gbWVzc2FnZXMubGVuZ3RoXG5cbiAgICBjb25zdCBpc05ld01lc3NhZ2UgPSBsYXN0SWQgIT09IHByZXZJZCB8fCBtZXNzYWdlcy5sZW5ndGggIT09IHByZXZMZW5cbiAgICBpZiAoIWlzTmV3TWVzc2FnZSkge1xuICAgICAgdXBkYXRlU2Nyb2xsQWZmb3JkYW5jZXMoKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgLy8gVHVybm8gYW5jbGFkbzogbmkgZWwgcmVlbXBsYXpvIGRlbCBwbGFjZWhvbGRlciBwb3IgZWwgbWVuc2FqZSBmaW5hbCwgbmkgbGFcbiAgICAvLyBhcGFyaWNpw7NuIGRlbCBBcHByb3ZhbEJveCBtdWV2ZW4gZWwgc2Nyb2xsLiBTb2xvIHNlIGFqdXN0YSBlbCBzcGFjZXIuXG4gICAgaWYgKGFuY2hvcmVkVHVybklkUmVmLmN1cnJlbnQpIHtcbiAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZShzeW5jVHVyblNwYWNlKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgLy8gTWllbnRyYXMgZWwgYWdlbnRlIHJlc3BvbmRlIG5vIGVtcHVqYW1vcyBlbCBzY3JvbGw6IGVsIHVzdWFyaW8gc2UgcXVlZGFcbiAgICAvLyBkb25kZSBlc3TDoSB5IHVzYSBlbCBib3TDs24gc2kgcXVpZXJlIGlyIGFsIGZvbmRvLlxuICAgIGlmICh3YWl0aW5nUmVzcG9uc2UgfHwgaXNXcml0aW5nKSB7XG4gICAgICB1cGRhdGVTY3JvbGxBZmZvcmRhbmNlcygpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCBjb250YWluZXIgPSBtZXNzYWdlc1JlZi5jdXJyZW50XG4gICAgY29uc3QgaXNBdEJvdHRvbSA9IGNvbnRhaW5lci5zY3JvbGxIZWlnaHQgLSBjb250YWluZXIuc2Nyb2xsVG9wIDw9IGNvbnRhaW5lci5jbGllbnRIZWlnaHQgKyAxMDBcbiAgICBjb25zdCBoYXNJbml0aWFsTWVzc2FnZSA9IG1lc3NhZ2VzLnNvbWUobXNnID0+IG1zZy5pZCA9PT0gJ3VzZXItaW5pdGlhbC1tZXNzYWdlJylcbiAgICBjb25zdCBpc0FwcHJvdmFsID0gISFsYXN0TWVzc2FnZSAmJiAobGFzdE1lc3NhZ2UuaWQuc3RhcnRzV2l0aCgnYXBwcm92YWwtJykgfHwgISFsYXN0TWVzc2FnZS5hcHByb3ZhbClcbiAgICBjb25zdCBpc0Fuc3dlck9yUXVlc3Rpb24gPVxuICAgICAgISFsYXN0TWVzc2FnZSAmJiAobGFzdE1lc3NhZ2UuaWQuc3RhcnRzV2l0aCgnYW5zd2VyLScpIHx8IGxhc3RNZXNzYWdlLmlkLnN0YXJ0c1dpdGgoJ3F1ZXN0aW9uLScpKVxuXG4gICAgLy8gTnVldm9zIGFuc3dlci9xdWVzdGlvbjogc2Nyb2xsIHNpIGVsIHVzdWFyaW8geWEgZXN0YWJhIGFsIGZvbmRvLlxuICAgIGlmIChpc0Fuc3dlck9yUXVlc3Rpb24gJiYgaXNBdEJvdHRvbSkge1xuICAgICAgc2Nyb2xsVG9Cb3R0b21SYWYoKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgLy8gQ2FzbyBib3JkZTogY2FtYmlvcyBkZSBtZW5zYWplcyBzaW4gc2VyIG51ZXZvIGFuc3dlci91c2VyL2FwcHJvdmFsXG4gICAgLy8gcGVybyBzw60gdW4gbWVuc2FqZSBudWV2byAobm8gZWwgXCJ1c2VyLWluaXRpYWwtbWVzc2FnZVwiKS4gU2Nyb2xsZWEuXG4gICAgaWYgKCFpc0Fuc3dlck9yUXVlc3Rpb24gJiYgIWlzQXBwcm92YWwgJiYgIWhhc0luaXRpYWxNZXNzYWdlICYmIG1lc3NhZ2VzLmxlbmd0aCA+IHByZXZMZW4pIHtcbiAgICAgIHNjcm9sbFRvQm90dG9tUmFmKClcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIHVwZGF0ZVNjcm9sbEFmZm9yZGFuY2VzKClcbiAgfSwgW1xuICAgIG1lc3NhZ2VzLFxuICAgIGxvYWRpbmdNZXNzYWdlcyxcbiAgICBpc0xvYWRpbmdNb3JlTWVzc2FnZXMsXG4gICAgd2FpdGluZ1Jlc3BvbnNlLFxuICAgIGlzV3JpdGluZyxcbiAgICBzY3JvbGxUb0JvdHRvbVJhZixcbiAgICBzeW5jVHVyblNwYWNlLFxuICAgIHVwZGF0ZVNjcm9sbEFmZm9yZGFuY2VzLFxuICBdKVxuXG4gIC8vIEFsIGFicmlyL2NhcmdhciB1bmEgY29udmVyc2FjacOzbiBlbCBjb250ZW5lZG9yIHNlIHJlbW9udGEgKExvYWRlciDihpIgbGlzdGEpIGNvblxuICAvLyBzY3JvbGxUb3A9MC4gRm9yemFtb3MgaXIgYWwgZm9uZG8gYWwgdGVybWluYXIgbG9hZE1lc3NhZ2VzLCBzaW4gYWZlY3RhciBwYWdpbmFjacOzbiBoYWNpYSBhcnJpYmEuXG4gIHVzZUxheW91dEVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QganVzdEZpbmlzaGVkTG9hZGluZyA9IHdhc0xvYWRpbmdNZXNzYWdlc1JlZi5jdXJyZW50ICYmICFsb2FkaW5nTWVzc2FnZXNcbiAgICB3YXNMb2FkaW5nTWVzc2FnZXNSZWYuY3VycmVudCA9IGxvYWRpbmdNZXNzYWdlc1xuXG4gICAgaWYgKCFqdXN0RmluaXNoZWRMb2FkaW5nIHx8IG1lc3NhZ2VzLmxlbmd0aCA9PT0gMCkgcmV0dXJuXG5cbiAgICBzY3JvbGxUaHJlc2hvbGRSZWYuY3VycmVudCA9IDM5XG4gICAgbGFzdE1lc3NhZ2VJZFJlZi5jdXJyZW50ID0gbWVzc2FnZXNbbWVzc2FnZXMubGVuZ3RoIC0gMV0/LmlkID8/IG51bGxcbiAgICBsYXN0TWVzc2FnZXNMZW5ndGhSZWYuY3VycmVudCA9IG1lc3NhZ2VzLmxlbmd0aFxuXG4gICAgc2Nyb2xsVG9Cb3R0b21SYWYoKVxuICAgIHNjcm9sbFRvQm90dG9tUmFmKHsgZGVsYXlNczogMTAwIH0pXG4gIH0sIFtsb2FkaW5nTWVzc2FnZXMsIG1lc3NhZ2VzLmxlbmd0aCwgc2Nyb2xsVG9Cb3R0b21SYWZdKVxuXG4gIC8vIEVzdGFkbyBpbmljaWFsIGRlbCBib3TDs24gc2Nyb2xsLXRvLWJvdHRvbSBhbCB0ZXJtaW5hciBsb2FkaW5nTWVzc2FnZXMuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFsb2FkaW5nTWVzc2FnZXMpIHtcbiAgICAgIHVwZGF0ZVNjcm9sbEFmZm9yZGFuY2VzKClcbiAgICB9XG4gIH0sIFtsb2FkaW5nTWVzc2FnZXMsIG1lc3NhZ2VzLmxlbmd0aCwgdXBkYXRlU2Nyb2xsQWZmb3JkYW5jZXNdKVxuXG4gIC8vIE9idGVuZXIgZWwgw7psdGltbyBtZW5zYWplIGRlbCB1c3VhcmlvIHBhcmEgdmVyaWZpY2FyIHNpIHRpZW5lIGF0dGFjaG1lbnRzXG4gIGNvbnN0IGxhc3RVc2VyTWVzc2FnZSA9IG1lc3NhZ2VzXG4gICAgLmZpbHRlcihtc2cgPT4gbXNnLnJvbGUgPT09IENoYXRIaXN0b3J5Um9sZS5VU0VSIHx8IG1zZy51c2VyLmlkID09PSBhdXRoVXNlci5pZC50b1N0cmluZygpKVxuICAgIC5hdCgtMSlcblxuICBjb25zdCBhdHRhY2htZW50c0NvdW50ID1cbiAgICAoQXJyYXkuaXNBcnJheShsYXN0VXNlck1lc3NhZ2U/LmF0dGFjaG1lbnRzKSA/IGxhc3RVc2VyTWVzc2FnZS5hdHRhY2htZW50cy5sZW5ndGggOiAwKSB8fFxuICAgIChBcnJheS5pc0FycmF5KGxhc3RVc2VyTWVzc2FnZT8uc291cmNlcykgPyBsYXN0VXNlck1lc3NhZ2Uuc291cmNlcy5sZW5ndGggOiAwKVxuXG4gIGNvbnN0IHN0cmVhbUxvYWRpbmdEaXNwbGF5ID0gcmVzb2x2ZVN0cmVhbUxvYWRpbmdEaXNwbGF5KHtcbiAgICBzdHJlYW1BY3Rpdml0eSxcbiAgICBsb2FkaW5nTWVzc2FnZSxcbiAgICBhY3RpdmVMb2FkaW5nczogYWN0aXZlTG9hZGluZ3MgfHwge30sXG4gICAgd2FpdGluZ1Jlc3BvbnNlLFxuICAgIGlzV2ViU2VhcmNoQWN0aXZlLFxuICAgIGlzRGVlcFNlYXJjaEFjdGl2ZSxcbiAgICBoYXNBdHRhY2htZW50czogQm9vbGVhbihhdHRhY2htZW50c0NvdW50KSxcbiAgICBhdHRhY2htZW50c0NvdW50LFxuICAgIHQsXG4gIH0pXG5cbiAgY29uc3QgaXNTY3JvbGxPblBhcmVudCA9ICEhZXhwYW5kZWRcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghaW5pdGlhbENoYXRJZCkge1xuICAgICAgcGVuZGluZ1Njcm9sbFJlc3RvcmVSZWYuY3VycmVudCA9IG51bGxcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBjb25zdCBzZXNzaW9uID0gcmVhZE1haWFQYW5lbFNlc3Npb24oYXV0aFVzZXIuaWQpXG4gICAgaWYgKHNlc3Npb24/LnNjcm9sbFNlc3Npb25JZCA9PT0gaW5pdGlhbENoYXRJZCAmJiB0eXBlb2Ygc2Vzc2lvbi5zY3JvbGxUb3AgPT09ICdudW1iZXInICYmIHNlc3Npb24uc2Nyb2xsVG9wID4gMCkge1xuICAgICAgcGVuZGluZ1Njcm9sbFJlc3RvcmVSZWYuY3VycmVudCA9IHNlc3Npb24uc2Nyb2xsVG9wXG4gICAgfVxuICB9LCBbYXV0aFVzZXIuaWQsIGluaXRpYWxDaGF0SWRdKVxuXG4gIHVzZUxheW91dEVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGxvYWRpbmdNZXNzYWdlcyB8fCBwZW5kaW5nU2Nyb2xsUmVzdG9yZVJlZi5jdXJyZW50ID09IG51bGwgfHwgIW1lc3NhZ2VzUmVmLmN1cnJlbnQpIHJldHVyblxuICAgIG1lc3NhZ2VzUmVmLmN1cnJlbnQuc2Nyb2xsVG9wID0gcGVuZGluZ1Njcm9sbFJlc3RvcmVSZWYuY3VycmVudFxuICAgIGxhc3RTY3JvbGxUb3BSZWYuY3VycmVudCA9IHBlbmRpbmdTY3JvbGxSZXN0b3JlUmVmLmN1cnJlbnRcbiAgICBwZW5kaW5nU2Nyb2xsUmVzdG9yZVJlZi5jdXJyZW50ID0gbnVsbFxuICB9LCBbbG9hZGluZ01lc3NhZ2VzLCBtZXNzYWdlcy5sZW5ndGhdKVxuXG4gIC8vIEFsIGV4cGFuZGlyL2NvbnRyYWVyIGVsIG1vZGFsIGVsIHJlZiBwYXNhIGEgb3RybyBjb250ZW5lZG9yIChzY3JvbGxUb3Agc2UgcmVzZXRlYSBhIDApLlxuICAvLyBSZXN0YXVyYXIgbGEgcG9zaWNpw7NuIGRlIHNjcm9sbCBhbnRlcyBkZWwgcGFpbnQgcGFyYSBldml0YXIgcXVlIGxhIGNvbnZlcnNhY2nDs24gc2FsdGUgYXJyaWJhLlxuICBjb25zdCBleHBhbmRlZFJlZiA9IHVzZVJlZihleHBhbmRlZClcbiAgdXNlTGF5b3V0RWZmZWN0KCgpID0+IHtcbiAgICBpZiAoZXhwYW5kZWRSZWYuY3VycmVudCAhPT0gZXhwYW5kZWQgJiYgbWVzc2FnZXNSZWYuY3VycmVudCkge1xuICAgICAgY29uc3Qgc2F2ZWRTY3JvbGxUb3AgPSBsYXN0U2Nyb2xsVG9wUmVmLmN1cnJlbnRcbiAgICAgIG1lc3NhZ2VzUmVmLmN1cnJlbnQuc2Nyb2xsVG9wID0gc2F2ZWRTY3JvbGxUb3BcbiAgICAgIGV4cGFuZGVkUmVmLmN1cnJlbnQgPSBleHBhbmRlZFxuICAgIH0gZWxzZSB7XG4gICAgICBleHBhbmRlZFJlZi5jdXJyZW50ID0gZXhwYW5kZWRcbiAgICB9XG4gIH0sIFtleHBhbmRlZF0pXG5cbiAgaWYgKGxvYWRpbmdNZXNzYWdlcykge1xuICAgIHJldHVybiAoXG4gICAgICA8RmFkZSBmaWxsPlxuICAgICAgICA8TG9hZGVyIC8+XG4gICAgICA8L0ZhZGU+XG4gICAgKVxuICB9XG5cbiAgY29uc3QgbGFzdE1lc3NhZ2UgPSBtZXNzYWdlc1ttZXNzYWdlcy5sZW5ndGggLSAxXVxuICBjb25zdCBoYXNNZXNzYWdlTGV2ZWxJbmRpY2F0b3IgPVxuICAgICEhbGFzdE1lc3NhZ2UgJiYgaXNTdHJlYW1pbmdQbGFjZWhvbGRlck1lc3NhZ2VJZChsYXN0TWVzc2FnZS5pZCkgJiYgKHdhaXRpbmdSZXNwb25zZSB8fCBpc1dyaXRpbmcpXG5cbiAgY29uc3QgbWVzc2FnZXNDb250ZW50ID0gKFxuICAgIDw+XG4gICAgICB7aXNMb2FkaW5nTW9yZU1lc3NhZ2VzICYmIDxMb2FkaW5nVGV4dCB0ZXh0PXt0KCdjaGF0LmxvYWRpbmdNb3JlJyl9IC8+fVxuICAgICAgPD5cbiAgICAgICAge21lc3NhZ2VzLm1hcCgobWVzc2FnZSwgaW5kZXgpID0+IHtcbiAgICAgICAgICBjb25zdCBpc0Fzc2lzdGFudE1lc3NhZ2UgPSBtZXNzYWdlLnJvbGUgPT09IENoYXRIaXN0b3J5Um9sZS5BU1NJU1RBTlQgfHwgbWVzc2FnZS51c2VyLmlkID09PSAnYXNzaXN0YW50J1xuICAgICAgICAgIGNvbnN0IGlzTGFzdE1lc3NhZ2UgPSBpbmRleCA9PT0gbWVzc2FnZXMubGVuZ3RoIC0gMVxuICAgICAgICAgIGNvbnN0IGlzU3RyZWFtaW5nUGxhY2Vob2xkZXIgPVxuICAgICAgICAgICAgaXNBc3Npc3RhbnRNZXNzYWdlICYmIGlzTGFzdE1lc3NhZ2UgJiYgaXNTdHJlYW1pbmdQbGFjZWhvbGRlck1lc3NhZ2VJZChtZXNzYWdlLmlkKVxuICAgICAgICAgIGNvbnN0IGlzU3RyZWFtaW5nID0gaXNTdHJlYW1pbmdQbGFjZWhvbGRlciAmJiAod2FpdGluZ1Jlc3BvbnNlIHx8IGlzV3JpdGluZylcblxuICAgICAgICAgIC8vIE5vIGZpbHRyYXIgZWwgcGxhY2Vob2xkZXIgZGVsIG1lbnNhamUgZW4gc3RyZWFtaW5nOiBzdSB0ZXh0byB2aXZlXG4gICAgICAgICAgLy8gZW4gZWwgc3RyZWFtaW5nU3RvcmUgeSBgbWVzc2FnZS5tZXNzYWdlYCBlcyAnJyBoYXN0YSBlbCBjb21wbGV0ZS5cbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAhaXNTdHJlYW1pbmdQbGFjZWhvbGRlciAmJlxuICAgICAgICAgICAgIWlzU3RyZWFtaW5nICYmXG4gICAgICAgICAgICAhKG1lc3NhZ2UuYXR0YWNobWVudHM/Lmxlbmd0aCB8fCBtZXNzYWdlLnNvdXJjZXM/Lmxlbmd0aCkgJiZcbiAgICAgICAgICAgICFtZXNzYWdlLm1lc3NhZ2UgJiZcbiAgICAgICAgICAgICFtZXNzYWdlLnByb2plY3Q/Lm5hbWUgJiZcbiAgICAgICAgICAgICFtZXNzYWdlLmFwcHJvdmFsXG4gICAgICAgICAgKVxuICAgICAgICAgICAgcmV0dXJuIG51bGxcblxuICAgICAgICAgIGNvbnN0IG1lc3NhZ2VGZWVkYmFjayA9XG4gICAgICAgICAgICBtZXNzYWdlPy53YXNIZWxwZnVsID09PSB1bmRlZmluZWQgfHwgbWVzc2FnZS53YXNIZWxwZnVsID09PSBudWxsXG4gICAgICAgICAgICAgID8gbnVsbFxuICAgICAgICAgICAgICA6IG1lc3NhZ2Uud2FzSGVscGZ1bFxuICAgICAgICAgICAgICAgID8gRmVlZGJhY2suVEhVTUJTX1VQXG4gICAgICAgICAgICAgICAgOiBGZWVkYmFjay5USFVNQlNfRE9XTlxuXG4gICAgICAgICAgLy8gS2V5IGVzdGFibGU6IHNvbG8gbWVzc2FnZS5pZCBwYXJhIGV2aXRhciByZW1vdW50IGR1cmFudGUgc3RyZWFtaW5nIChtZXNzYWdlLmRhdGUgcHVlZGUgY2FtYmlhcilcbiAgICAgICAgICBjb25zdCBtZXNzYWdlS2V5ID0gbWVzc2FnZS5pZCA/PyBgbXNnLSR7aW5kZXh9YFxuXG4gICAgICAgICAgY29uc3QgdHVybklkID0gcmVzb2x2ZVJldHJ5VHVybklkKG1lc3NhZ2UpXG4gICAgICAgICAgY29uc3QgdXNlck1lc3NhZ2VGb3JSZXRyeSA9IGZpbmRVc2VyTWVzc2FnZUZvclJldHJ5KG1lc3NhZ2VzLCBtZXNzYWdlKVxuICAgICAgICAgIGNvbnN0IGNhblJldHJ5ID1cbiAgICAgICAgICAgICEhdXNlck1lc3NhZ2VGb3JSZXRyeSAmJlxuICAgICAgICAgICAgIWlzU3RyZWFtaW5nICYmXG4gICAgICAgICAgICAhbWVzc2FnZS5pc0Vycm9yICYmXG4gICAgICAgICAgICAhbWVzc2FnZS5hcHByb3ZhbCAmJlxuICAgICAgICAgICAgKG1lc3NhZ2UuaXNGcm9udGVuZENhbmNlbGxlZCB8fCAoIW1lc3NhZ2UuaXNfY2FuY2VsbGVkICYmICEhdHVybklkKSlcblxuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8TWVzc2FnZUl0ZW1cbiAgICAgICAgICAgICAgey4uLm1lc3NhZ2V9XG4gICAgICAgICAgICAgIGtleT17bWVzc2FnZUtleX1cbiAgICAgICAgICAgICAgYXV0aFVzZXI9e2F1dGhVc2VyfVxuICAgICAgICAgICAgICBoYW5kbGVTZWxlY3RPcHRpb249e2hhbmRsZVNlbGVjdE9wdGlvbn1cbiAgICAgICAgICAgICAgaGFuZGxlRmVlZGJhY2s9e2hhbmRsZUZlZWRiYWNrfVxuICAgICAgICAgICAgICBoYW5kbGVBcHByb3ZhbERlY2lzaW9uPXtoYW5kbGVBcHByb3ZhbERlY2lzaW9ufVxuICAgICAgICAgICAgICBoYW5kbGVTdWdnZXN0aW9uQ2xpY2s9e2hhbmRsZVN1Z2dlc3Rpb25DbGlja31cbiAgICAgICAgICAgICAgaGFuZGxlUmV0cnk9e2NhblJldHJ5ID8gKCkgPT4gcmV0cnlNZXNzYWdlKG1lc3NhZ2UpIDogdW5kZWZpbmVkfVxuICAgICAgICAgICAgICBoYXNTZWxlY3RlZFN1Z2dlc3Rpb249eyEhc2VsZWN0ZWRTdWdnZXN0aW9uTWVzc2FnZUlkc1ttZXNzYWdlLmlkXX1cbiAgICAgICAgICAgICAgZGlzYWJsZUZlZWRiYWNrPXttZXNzYWdlRmVlZGJhY2t9XG4gICAgICAgICAgICAgIGlzU3RyZWFtaW5nPXtpc1N0cmVhbWluZ31cbiAgICAgICAgICAgICAgaXNMYXN0TWVzc2FnZT17aXNMYXN0TWVzc2FnZX1cbiAgICAgICAgICAgICAgZXhwYW5kZWQ9e2V4cGFuZGVkfVxuICAgICAgICAgICAgICBzdHJlYW1BY3Rpdml0eT17aXNTdHJlYW1pbmcgPyBzdHJlYW1Mb2FkaW5nRGlzcGxheSA6IG51bGx9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgIClcbiAgICAgICAgfSl9XG4gICAgICA8Lz5cbiAgICAgIHshaGFzTWVzc2FnZUxldmVsSW5kaWNhdG9yICYmIHN0cmVhbUxvYWRpbmdEaXNwbGF5ICYmIChcbiAgICAgICAgPFNDTG9hZGluZ01lc3NhZ2VzQ29sdW1uPlxuICAgICAgICAgIDxBZ2VudEFjdGl2aXR5SW5kaWNhdG9yIGFjdGl2aXR5PXtzdHJlYW1Mb2FkaW5nRGlzcGxheX0gLz5cbiAgICAgICAgPC9TQ0xvYWRpbmdNZXNzYWdlc0NvbHVtbj5cbiAgICAgICl9XG4gICAgICB7LyogRXNwYWNpbyBxdWUgbGUgcGVybWl0ZSBhIGxhIHByZWd1bnRhIHN1YmlyIGFsIHRvcGUuIEFsdHVyYSBtYW5lamFkYVxuICAgICAgICAgIGltcGVyYXRpdmFtZW50ZSBkZXNkZSBgc2V0U3BhY2VySGVpZ2h0YDsgYXJyYW5jYSBlbiAwLiAqL31cbiAgICAgIDxTQ1R1cm5TcGFjZXIgcmVmPXtzcGFjZXJFbFJlZn0gYXJpYS1oaWRkZW49XCJ0cnVlXCIgLz5cbiAgICA8Lz5cbiAgKVxuXG4gIHJldHVybiAoXG4gICAgLy8gU2kgZWwgdXN1YXJpbyBtdWV2ZSBlbCBzY3JvbGwgYWJvcnRhbW9zIGxhIGFuaW1hY2nDs24geSBzb2x0YW1vcyBlbCB0dXJubzpcbiAgICAvLyBubyBsZSBwZWxlYW1vcyBlbCBjb250cm9sIGRlbCBjb250ZW5lZG9yLlxuICAgIDxTQ01lc3NhZ2VzT3V0ZXJcbiAgICAgICRzY3JvbGxPblBhcmVudD17aXNTY3JvbGxPblBhcmVudH1cbiAgICAgIG9uV2hlZWw9e2hhbmRsZVVzZXJTY3JvbGxJbnRlbnR9XG4gICAgICBvblRvdWNoU3RhcnQ9e2hhbmRsZVVzZXJTY3JvbGxJbnRlbnR9XG4gICAgPlxuICAgICAgPFNDTWVzc2FnZXNHcmFkaWVudFRvcCAkc2hvdz17c2hvd1RvcEdyYWRpZW50fSBhcmlhLWhpZGRlbj1cInRydWVcIiAvPlxuICAgICAge2lzU2Nyb2xsT25QYXJlbnQgPyAoXG4gICAgICAgIDxTQ01lc3NhZ2VzU2Nyb2xsIHJlZj17bWVzc2FnZXNSZWZ9IG9uU2Nyb2xsPXtoYW5kbGVTY3JvbGxUb0JvdHRvbX0+XG4gICAgICAgICAgPFNDTWVzc2FnZXNJbm5lciAkc2Nyb2xsT25QYXJlbnQ9e2lzU2Nyb2xsT25QYXJlbnR9PnttZXNzYWdlc0NvbnRlbnR9PC9TQ01lc3NhZ2VzSW5uZXI+XG4gICAgICAgIDwvU0NNZXNzYWdlc1Njcm9sbD5cbiAgICAgICkgOiAoXG4gICAgICAgIDxTQ01lc3NhZ2VzSW5uZXIgcmVmPXttZXNzYWdlc1JlZn0gb25TY3JvbGw9e2hhbmRsZVNjcm9sbFRvQm90dG9tfSAkc2Nyb2xsT25QYXJlbnQ9e2ZhbHNlfT5cbiAgICAgICAgICB7bWVzc2FnZXNDb250ZW50fVxuICAgICAgICA8L1NDTWVzc2FnZXNJbm5lcj5cbiAgICAgICl9XG5cbiAgICAgIDxTQ01lc3NhZ2VzR3JhZGllbnRCb3R0b20gJHNob3c9e3Nob3dCb3R0b21HcmFkaWVudH0gYXJpYS1oaWRkZW49XCJ0cnVlXCIgLz5cblxuICAgICAge3Nob3dTY3JvbGxUb0JvdHRvbSAmJiAoXG4gICAgICAgIDxTY3JvbGxUb0JvdHRvbUJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgb25DbGljaz17aGFuZGxlQ2xpY2tTY3JvbGxUb0JvdHRvbX0+XG4gICAgICAgICAgPFNDU2Nyb2xsSWNvblN3YXAgJHZpc2libGU9e2lzV3JpdGluZ30gYXJpYS1oaWRkZW4+XG4gICAgICAgICAgICA8U0NXcml0aW5nRG90cz5cbiAgICAgICAgICAgICAgPHNwYW4gLz5cbiAgICAgICAgICAgICAgPHNwYW4gLz5cbiAgICAgICAgICAgICAgPHNwYW4gLz5cbiAgICAgICAgICAgIDwvU0NXcml0aW5nRG90cz5cbiAgICAgICAgICA8L1NDU2Nyb2xsSWNvblN3YXA+XG4gICAgICAgICAgPFNDU2Nyb2xsSWNvblN3YXAgJHZpc2libGU9eyFpc1dyaXRpbmd9IGFyaWEtaGlkZGVuPlxuICAgICAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9ezEyfSBoZWlnaHQ9ezEyfSBmaWxsPVwibm9uZVwiPlxuICAgICAgICAgICAgICA8cGF0aFxuICAgICAgICAgICAgICAgIHN0cm9rZT1cIiMyMDIwMjBcIlxuICAgICAgICAgICAgICAgIHN0cm9rZUxpbmVjYXA9XCJyb3VuZFwiXG4gICAgICAgICAgICAgICAgc3Ryb2tlTGluZWpvaW49XCJyb3VuZFwiXG4gICAgICAgICAgICAgICAgc3Ryb2tlV2lkdGg9ezEuNX1cbiAgICAgICAgICAgICAgICBkPVwiTTYgLjc1djEwLjVNLjc1IDYgNiAxMS4yNSAxMS4yNSA2XCJcbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgIDwvU0NTY3JvbGxJY29uU3dhcD5cbiAgICAgICAgPC9TY3JvbGxUb0JvdHRvbUJ1dHRvbj5cbiAgICAgICl9XG4gICAgPC9TQ01lc3NhZ2VzT3V0ZXI+XG4gIClcbn1cblxuZXhwb3J0IGNvbnN0IENoYXRBSU1lc3NhZ2VzID0gUmVhY3QubWVtbyhDaGF0QUlNZXNzYWdlc0lubmVyKVxuIl0sIm1hcHBpbmdzIjoi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
|
|
1088
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSZWFjdCIsIm1lbW8iLCJ1c2VDYWxsYmFjayIsInVzZUVmZmVjdCIsInVzZUxheW91dEVmZmVjdCIsInVzZVJlZiIsInVzZVN0YXRlIiwiY3JlYXRlRWxlbWVudCIsIl9jcmVhdGVFbGVtZW50IiwiQXR0YWNobWVudENhcmQiLCJBcHByb3ZhbEJveCIsIkF0dGFjaG1lbnRQcmV2aWV3TW9kYWwiLCJBdHRhY2htZW50Q2FyZEF1ZGlvIiwiTWFpYVN0cmVhbWRvd24iLCJDaGF0SGlzdG9yeVJvbGUiLCJyZW5kZXJUZXh0V2l0aE1lbnRpb25zIiwiaGFzSW5saW5lTWFya2VycyIsImlzTWFpYWtlckFnZW50IiwidXNlVXNlciIsInVzZVQiLCJ1c2VDaGF0TWFuYWdlciIsInVzZVNtb290aFN0cmVhbVRleHQiLCJ1c2VTdHJlYW1pbmdNZXNzYWdlIiwiTG9hZGluZ1RleHQiLCJBZ2VudEFjdGl2aXR5SW5kaWNhdG9yIiwiUmVhc29uaW5nQmxvY2siLCJzaG91bGRTdHJlYW1OYXJyYXRpb25JblRpbWVsaW5lIiwiUmVhc29uaW5nVGltZWxpbmUiLCJTQ1RpbWVsaW5lSW5kaWNhdG9yIiwiaXNTdHJlYW1pbmdQbGFjZWhvbGRlck1lc3NhZ2VJZCIsInJlc29sdmVTdHJlYW1Mb2FkaW5nRGlzcGxheSIsInJlc29sdmVSZXRyeVR1cm5JZCIsImZpbmRVc2VyTWVzc2FnZUZvclJldHJ5IiwidXNlUmVhc29uaW5nVHJhY2UiLCJMb2FkZXIiLCJGYWRlIiwicGF0Y2hNYWlhUGFuZWxTZXNzaW9uIiwicmVhZE1haWFQYW5lbFNlc3Npb24iLCJNZXNzYWdlRnJvbVVzZXIiLCJNZXNzYWdlRnJvbU90aGVyIiwiTWVzc2FnZUNvbnRlbnRGcm9tVXNlciIsIk1lc3NhZ2VDb250ZW50RnJvbU90aGVyIiwiTWVzc2FnZUZlZWRiYWNrIiwiU0NDQUlNZXNzYWdlV3JhcHBlciIsIlNjcm9sbFRvQm90dG9tQnV0dG9uIiwiU0NTY3JvbGxJY29uU3dhcCIsIlNDV3JpdGluZ0RvdHMiLCJTQ01lc3NhZ2VzT3V0ZXIiLCJTQ01lc3NhZ2VzU2Nyb2xsIiwiU0NNZXNzYWdlc0lubmVyIiwiU0NUdXJuU3BhY2VyIiwiU0NPcHRpb25zTGlzdCIsIlNDT3B0aW9uSXRlbSIsIlNDTWVzc2FnZUl0ZW1XcmFwcGVyIiwiU0NNZXNzYWdlSXRlbUlubmVyIiwiU0NBdHRhY2htZW50c1JvdyIsIlNDQXBwcm92YWxBY3Rpb25zQ29sdW1uIiwiU0NMb2FkaW5nTWVzc2FnZXNDb2x1bW4iLCJTQ01lc3NhZ2VzR3JhZGllbnRUb3AiLCJTQ01lc3NhZ2VzR3JhZGllbnRCb3R0b20iLCJGZWVkYmFjayIsInVzZUdsb2JhbENvbnRleHQiLCJFbnRpdHlMaW5rQ3VzdG9tTGluayIsImdldEVudGl0eUxpbmtXcmFwcGVyQ2xhc3NOYW1lIiwiQ2hhdEFJU3VnZ2VzdGlvbnMiLCJDaGF0QUlDcmVhdGVBZ2VudEFjdGlvbnMiLCJFVkVOVFMiLCJ1c2VFdmVudCIsImRvd25sb2FkRmlsZUZyb21VcmwiLCJjYW5PcGVuQXR0YWNobWVudFByZXZpZXciLCJjb21wdXRlRGlzdGFuY2VGcm9tQm90dG9tIiwiY29tcHV0ZVJlbW92YWJsZVR1cm5TcGFjZSIsImNvbXB1dGVSZXNlcnZlZFR1cm5TcGFjZSIsImNvbXB1dGVUdXJuU2Nyb2xsRHVyYXRpb25NcyIsImV4dHJhY3RGZWVkYmFja1Nlc3Npb25JZCIsImZpbmRMYXN0UXVlc3Rpb25JZCIsImlzQXVkaW9BdHRhY2htZW50Iiwic2hvdWxkU2hvd1Njcm9sbFRvQm90dG9tIiwidHVybkFuY2hvck9mZnNldCIsImpzeCIsIl9qc3giLCJGcmFnbWVudCIsIl9GcmFnbWVudCIsImpzeHMiLCJfanN4cyIsIk1lc3NhZ2VXcmFwcGVyIiwiX3JlZiIsImlzQ3VycmVudFVzZXIiLCJjaGlsZHJlbiIsInByb3BzIiwiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwiX2V4Y2x1ZGVkIiwiTWVzc2FnZUNvbXBvbmVudCIsIl9vYmplY3RTcHJlYWQiLCJNZXNzYWdlQ29udGVudFdyYXBwZXIiLCJfcmVmMiIsIl9leGNsdWRlZDIiLCJNZXNzYWdlQ29udGVudENvbXBvbmVudCIsIk1lc3NhZ2VPcHRpb25zIiwiX3JlZjMiLCJvcHRpb25zIiwiaGFuZGxlU2VsZWN0T3B0aW9uIiwiX3VzZVN0YXRlIiwiX3VzZVN0YXRlMiIsIl9zbGljZWRUb0FycmF5Iiwic2VsZWN0ZWRPcHRpb24iLCJzZXRTZWxlY3RlZE9wdGlvbiIsImhhbmRsZVNlbGVjdCIsIm9wdGlvbiIsIm1hcCIsIiRoYXNTZWxlY3Rpb24iLCIkZGltbWVkIiwiaWQiLCJvbkNsaWNrIiwibmFtZSIsIlN0cmVhbWluZ01lc3NhZ2VCb2R5IiwiX3Byb3BzJGNyZWF0ZUFnZW50Rm9sIiwiX3Byb3BzJHN1Z2dlc3Rpb25zIiwic3RyZWFtaW5nVGV4dCIsImlzU3RyZWFtaW5nIiwibWVzc2FnZUlkIiwicmF3VGV4dCIsIm1lc3NhZ2UiLCJ3aW5GbGFncyIsIndpbmRvdyIsImRpc3BsYXlUZXh0IiwiZW5hYmxlZCIsIm1heENoYXJzUGVyRnJhbWUiLCJzbmFwVG9Xb3JkQm91bmRhcnkiLCJzdHJlYW1MYWdNcyIsInRhcmdldExhZ01zIiwic3RyZWFtQWRhcHQiLCJhZGFwdFRvQmFja2VuZFJhdGUiLCJzdHJlYW1CdWZmZXJNcyIsInRhcmdldEJ1ZmZlck1zIiwic3RyZWFtTWluQnVmZmVyIiwibWluQnVmZmVyQ2hhcnMiLCJzdHJlYW1XYXJtdXBNcyIsIndhcm11cE1zIiwiY3JlYXRlQWdlbnRBY3Rpb25zQWdlbnRJZCIsImNyZWF0ZUFnZW50Rm9sbG93VXAiLCJhZ2VudElkIiwiaGFzTWVudGlvbnMiLCJtZW50aW9uTm9kZXMiLCJpc0Zyb250ZW5kQ2FuY2VsbGVkIiwiY2xhc3NOYW1lIiwic3R5bGUiLCJkaXNwbGF5IiwidmFyaWFudCIsImNvbXBvbmVudHMiLCJhIiwiaXNBbmltYXRpbmciLCJpc0Fzc2lzdGFudCIsImlzRXJyb3IiLCJhcHByb3ZhbCIsIm9uUmV0cnkiLCJjb250ZW50Iiwic291cmNlcyIsInVuZGVmaW5lZCIsImhhbmRsZUZlZWRiYWNrIiwiaGFuZGxlRmVlZGJhY2tDbGljayIsImRpc2FibGVGZWVkYmFjayIsInN1Z2dlc3Rpb25zIiwibGVuZ3RoIiwib25TZWxlY3RTdWdnZXN0aW9uIiwic3VnZ2VzdGlvbiIsImhhbmRsZVN1Z2dlc3Rpb25DbGljayIsImRpc2FibGVkIiwic3VnZ2VzdGlvbnNEaXNhYmxlZCIsImhpZGRlbiIsImlzTGFzdE1lc3NhZ2UiLCJNZXNzYWdlSXRlbSIsIl9wcm9wcyRyZWFzb25pbmciLCJfcHJvcHMkcHJvamVjdE1ldGFkYXQiLCJ1c2VyIiwiYXV0aFVzZXIiLCJpc0NoYW5nZVByb2plY3QiLCJoYW5kbGVBcHByb3ZhbERlY2lzaW9uIiwiaGFuZGxlUmV0cnkiLCJyb2xlIiwiYXR0YWNobWVudHMiLCJhcHByb3ZhbFN0YXR1cyIsImhhc1NlbGVjdGVkU3VnZ2VzdGlvbiIsInN0cmVhbUFjdGl2aXR5IiwiX3VzZVN0YXRlMyIsIl91c2VTdGF0ZTQiLCJwcmV2aWV3QXR0YWNobWVudCIsInNldFByZXZpZXdBdHRhY2htZW50IiwiVVNFUiIsInRvU3RyaW5nIiwiQVNTSVNUQU5UIiwiaXNTdHJlYW1pbmdQbGFjZWhvbGRlciIsImlzQWN0aXZlU3RyZWFtaW5nIiwiaGFzU3RyZWFtVGV4dCIsIkJvb2xlYW4iLCJyZWFzb25pbmdUcmFjZSIsInN0cmVhbU5hcnJhdGlvbkluVGltZWxpbmUiLCJzdGVwcyIsInNob3dTdHJlYW1pbmdCb2R5Iiwic2hvd0FjdGl2aXR5SW5kaWNhdG9yIiwibWVzc2FnZUF0dGFjaG1lbnRzIiwiQXJyYXkiLCJpc0FycmF5IiwiaGFuZGxlQXR0YWNobWVudENsaWNrIiwiYXR0YWNobWVudCIsImhhbmRsZUNsb3NlUHJldmlldyIsImhhbmRsZUF0dGFjaG1lbnREb3dubG9hZCIsIl9yZWY0IiwiX2FzeW5jVG9HZW5lcmF0b3IiLCJfcmVnZW5lcmF0b3JSdW50aW1lIiwibWFyayIsIl9jYWxsZWUiLCJleHRlbnNpb24iLCJmaWxlTmFtZSIsImZpbGVVcmwiLCJibG9iVXJsIiwiZG93bmxvYWRlZEZpbGUiLCJsaW5rIiwiX3QiLCJ3cmFwIiwiX2NvbnRleHQiLCJwcmV2IiwibmV4dCIsImluY2x1ZGVzIiwiY29uY2F0IiwidHlwZSIsInVybF9vcmlnaW5hbCIsInVybF9maWxlIiwidXJsX3RodW1ibmFpbCIsInNlbnQiLCJVUkwiLCJjcmVhdGVPYmplY3RVUkwiLCJmaWxlIiwiRmlsZSIsImFicnVwdCIsImRvY3VtZW50IiwiaHJlZiIsImRvd25sb2FkIiwiYm9keSIsImFwcGVuZENoaWxkIiwiY2xpY2siLCJzZXRUaW1lb3V0IiwicmVtb3ZlQ2hpbGQiLCJyZXZva2VPYmplY3RVUkwiLCJjb25zb2xlIiwiZXJyb3IiLCJzdG9wIiwiX3giLCJhcHBseSIsImFyZ3VtZW50cyIsImhhc0ZlZWRiYWNrIiwiJGlzQXNzaXN0YW50IiwibWVzc2FnZUV4dHJhQ29udGVudCIsImZlZWRiYWNrIiwidHJhY2UiLCJyZWFzb25pbmciLCJpbmRleCIsInBvc2l0aW9uSW5kZXgiLCJvbkRvd25sb2FkIiwiYWN0aXZpdHkiLCJjb21wYWN0IiwicGVuZGluZ19hY3Rpb25zIiwiYWN0aW9ucyIsInN0YXR1cyIsIm9uQXBwcm92ZSIsInRocmVhZElkcyIsIm1ldGFkYXRhIiwib25SZWplY3QiLCJpc1Byb2plY3REZWxldGVkIiwicHJvamVjdE1ldGFkYXRhIiwiaXNfZGVsZXRlZCIsImlzRXhwYW5kZWQiLCJleHBhbmRlZCIsImhpdGxJbnN0YW5jZUlkIiwib3JpZ2luYWxfdGhyZWFkX2lkIiwid2FybmluZ01lc3NhZ2UiLCJ3YXJuaW5nX21lc3NhZ2UiLCJtYW51YWxBcHByb3ZhbERldGVjdGVkIiwibWFudWFsX2FwcHJvdmFsX2RldGVjdGVkIiwiaXNPcGVuIiwib25DbG9zZSIsIkNoYXRBSU1lc3NhZ2VzSW5uZXIiLCJfcmVmNSIsInVzZXJJbml0aWFsTWVzc2FnZSIsImluaXRpYWxDaGF0SWQiLCJvbkVycm9yIiwib25TZW5kTWVzc2FnZVJlYWR5Iiwib25TY3JvbGxUb0JvdHRvbSIsImFnZW50cyIsIl9yZWY1JHNraXBFbnRlckFuaW1hdCIsInNraXBFbnRlckFuaW1hdGlvbiIsIl91c2VUIiwidCIsIl91c2VHbG9iYWxDb250ZXh0IiwiaXNXZWJTZWFyY2hBY3RpdmUiLCJpc0RlZXBTZWFyY2hBY3RpdmUiLCJhZ2VudCIsImV2ZW50IiwibWVzc2FnZXNSZWYiLCJjaGF0SW5pdGlhbGl6ZWRSZWYiLCJpc0xvYWRpbmdNb3JlUmVmIiwic2Nyb2xsVGhyZXNob2xkUmVmIiwibGFzdFNjcm9sbFRvcFJlZiIsInNob3dTY3JvbGxUb0JvdHRvbVJlZiIsInNob3dUb3BHcmFkaWVudFJlZiIsInNob3dCb3R0b21HcmFkaWVudFJlZiIsInNjcm9sbFJhZlJlZiIsImFuY2hvcmVkVHVybklkUmVmIiwic3BhY2VyRWxSZWYiLCJzcGFjZXJIZWlnaHRSZWYiLCJ0dXJuU2Nyb2xsUmFmUmVmIiwid2FzTG9hZGluZ01lc3NhZ2VzUmVmIiwibGFzdFNjcm9sbGVkU2Vzc2lvblJlZiIsInBlbmRpbmdTY3JvbGxSZXN0b3JlUmVmIiwic2Nyb2xsUGVyc2lzdFRpbWVyUmVmIiwiX3VzZVN0YXRlNSIsIl91c2VTdGF0ZTYiLCJzaG93U2Nyb2xsVG9Cb3R0b20iLCJzZXRTaG93U2Nyb2xsVG9Cb3R0b20iLCJfdXNlU3RhdGU3IiwiX3VzZVN0YXRlOCIsInNob3dUb3BHcmFkaWVudCIsInNldFNob3dUb3BHcmFkaWVudCIsIl91c2VTdGF0ZTkiLCJfdXNlU3RhdGUwIiwic2hvd0JvdHRvbUdyYWRpZW50Iiwic2V0U2hvd0JvdHRvbUdyYWRpZW50IiwiX3VzZVN0YXRlMSIsIl91c2VTdGF0ZTEwIiwic2VsZWN0ZWRTdWdnZXN0aW9uTWVzc2FnZUlkcyIsInNldFNlbGVjdGVkU3VnZ2VzdGlvbk1lc3NhZ2VJZHMiLCJfdXNlQ2hhdE1hbmFnZXIiLCJjaGF0SWQiLCJtZXNzYWdlcyIsImxvYWRpbmdNZXNzYWdlcyIsImlzTG9hZGluZ01vcmVNZXNzYWdlcyIsIndhaXRpbmdSZXNwb25zZSIsImlzV3JpdGluZyIsImxvYWRpbmdNZXNzYWdlIiwiYWN0aXZlTG9hZGluZ3MiLCJzZW5kTWVzc2FnZSIsInJldHJ5TWVzc2FnZSIsImNoYW5nZVByb2plY3QiLCJpbml0aWFsaXplQ2hhdCIsImhhbmRsZVNjcm9sbCIsInN0b3BHZW5lcmF0aW9uIiwidXBkYXRlU2Nyb2xsQWZmb3JkYW5jZXMiLCJlbCIsImN1cnJlbnQiLCJzY3JvbGxUb3AiLCJzY3JvbGxIZWlnaHQiLCJjbGllbnRIZWlnaHQiLCJkaXN0YW5jZUZyb21Cb3R0b20iLCJzaG91bGRTaG93IiwibmV4dFRvcEdyYWRpZW50IiwibmV4dEJvdHRvbUdyYWRpZW50Iiwic2Nyb2xsVG9Cb3R0b21SYWYiLCJvcHRzIiwiX29wdHMkZGVsYXlNcyIsImRlbGF5TXMiLCJydW4iLCJyZXF1ZXN0QW5pbWF0aW9uRnJhbWUiLCJjYW5jZWxUdXJuU2Nyb2xsIiwiY2FuY2VsQW5pbWF0aW9uRnJhbWUiLCJhbmltYXRlU2Nyb2xsVG8iLCJ0b3AiLCJmcm9tIiwiZGlzdGFuY2UiLCJNYXRoIiwiYWJzIiwiZHVyYXRpb24iLCJzdGFydGVkQXQiLCJwZXJmb3JtYW5jZSIsIm5vdyIsInN0ZXAiLCJwcm9ncmVzcyIsIm1pbiIsImVhc2VkIiwicG93Iiwic2V0U3BhY2VySGVpZ2h0IiwiaGVpZ2h0IiwiY2xlYXJUdXJuU3BhY2UiLCJkcmFpblR1cm5TcGFjZSIsInJlbGVhc2VUdXJuU3BhY2UiLCJoYW5kbGVVc2VyU2Nyb2xsSW50ZW50IiwibWVhc3VyZVR1cm4iLCJxdWVzdGlvbklkIiwic3BhY2VyRWwiLCJxdWVzdGlvbkVsIiwicXVlcnlTZWxlY3RvciIsImNvbnRhaW5lclRvcCIsImdldEJvdW5kaW5nQ2xpZW50UmVjdCIsInF1ZXN0aW9uVG9wIiwiY29udGVudEJvdHRvbSIsInR1cm5IZWlnaHQiLCJyZXNlcnZlVHVyblNwYWNlIiwibWVhc3VyZWQiLCJvZmZzZXQiLCJ0YXJnZXRTY3JvbGxUb3AiLCJtYXgiLCJzeW5jVHVyblNwYWNlIiwicmVzZXJ2ZWQiLCJoYW5kbGVDbGlja1Njcm9sbFRvQm90dG9tIiwiaGFuZGxlU2Nyb2xsVG9Cb3R0b20iLCJlIiwiY29udGFpbmVyIiwiY3VycmVudFRhcmdldCIsImlzU2Nyb2xsaW5nVXAiLCJpc05lYXJCb3R0b20iLCJjbGVhclRpbWVvdXQiLCJzY3JvbGxTZXNzaW9uSWQiLCJzZW5kTWVzc2FnZVJlZiIsInN0b3BHZW5lcmF0aW9uUmVmIiwib25TZW5kTWVzc2FnZVJlYWR5UmVmIiwic2VuZE1lc3NhZ2VQcm94eVJlZiIsImZhcUlkIiwiYWdlbnRTdWdnZXN0aW9uSWQiLCJtZW50aW9ucyIsImZ1YUlkIiwic2NJZCIsInN0b3BHZW5lcmF0aW9uUHJveHlSZWYiLCJtZXNzYWdlc0RhdGFSZWYiLCJzZWxlY3RlZFN1Z2dlc3Rpb25NZXNzYWdlSWRzUmVmIiwidHJpbSIsImN1cnJlbnRNZXNzYWdlcyIsImlzTWFya2V0cGxhY2VHbG9iYWxBZ2VudCIsImFpQ2hhdFN1Z2dlc3RlZEFuc3dlciIsImFnZW50X3R5cGUiLCJfZGVmaW5lUHJvcGVydHkiLCJ0YXJnZXRNZXNzYWdlIiwiZmluZCIsIm1zZyIsImlzUmV0cnlTdWdnZXN0aW9uIiwibGFzdFVzZXJNZXNzYWdlIiwiZmlsdGVyIiwiYXQiLCJyZXRyeUF0dGFjaG1lbnRzIiwicmFmSWQiLCJ0aWNrIiwibGFzdFJlc2VydmVkUXVlc3Rpb25SZWYiLCJsYXN0TWVzc2FnZUlkUmVmIiwibGFzdE1lc3NhZ2VzTGVuZ3RoUmVmIiwiX21lc3NhZ2VzJGlkIiwiX21lc3NhZ2VzIiwiX2xhc3RNZXNzYWdlJGlkIiwibGFzdE1lc3NhZ2UiLCJsYXN0SWQiLCJwcmV2SWQiLCJwcmV2TGVuIiwiaXNOZXdNZXNzYWdlIiwiaXNBdEJvdHRvbSIsImhhc0luaXRpYWxNZXNzYWdlIiwic29tZSIsImlzQXBwcm92YWwiLCJzdGFydHNXaXRoIiwiaXNBbnN3ZXJPclF1ZXN0aW9uIiwiX21lc3NhZ2VzJGlkMiIsIl9tZXNzYWdlczIiLCJqdXN0RmluaXNoZWRMb2FkaW5nIiwiYXR0YWNobWVudHNDb3VudCIsInN0cmVhbUxvYWRpbmdEaXNwbGF5IiwiaGFzQXR0YWNobWVudHMiLCJpc1Njcm9sbE9uUGFyZW50Iiwic2Vzc2lvbiIsImV4cGFuZGVkUmVmIiwic2F2ZWRTY3JvbGxUb3AiLCJmaWxsIiwiaGFzTWVzc2FnZUxldmVsSW5kaWNhdG9yIiwibWVzc2FnZXNDb250ZW50IiwidGV4dCIsIl9tZXNzYWdlJGF0dGFjaG1lbnRzIiwiX21lc3NhZ2Ukc291cmNlcyIsIl9tZXNzYWdlJHByb2plY3QiLCJfbWVzc2FnZSRpZCIsImlzQXNzaXN0YW50TWVzc2FnZSIsInByb2plY3QiLCJtZXNzYWdlRmVlZGJhY2siLCJ3YXNIZWxwZnVsIiwiVEhVTUJTX1VQIiwiVEhVTUJTX0RPV04iLCJtZXNzYWdlS2V5IiwidHVybklkIiwidXNlck1lc3NhZ2VGb3JSZXRyeSIsImNhblJldHJ5IiwiaXNfY2FuY2VsbGVkIiwia2V5IiwicmVmIiwiJHNjcm9sbE9uUGFyZW50Iiwib25XaGVlbCIsIm9uVG91Y2hTdGFydCIsIiRzaG93Iiwib25TY3JvbGwiLCIkc2tpcEVudGVyIiwiJHZpc2libGUiLCJ4bWxucyIsIndpZHRoIiwic3Ryb2tlIiwic3Ryb2tlTGluZWNhcCIsInN0cm9rZUxpbmVqb2luIiwic3Ryb2tlV2lkdGgiLCJkIiwiQ2hhdEFJTWVzc2FnZXMiXSwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50cy9tb2xlY3VsZXMvQ2hhdEFJTWVzc2FnZXMvQ2hhdEFJTWVzc2FnZXMudHN4Il0sInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIGltcG9ydC9uby1leHRyYW5lb3VzLWRlcGVuZGVuY2llcyAqL1xuLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L2luZGVudCAqL1xuLyogZXNsaW50LWRpc2FibGUgcmVhY3Qvbm8tdW5zdGFibGUtbmVzdGVkLWNvbXBvbmVudHMgKi9cbi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1zaGFkb3cgKi9cbi8qIGVzbGludC1kaXNhYmxlIG5vLW5lc3RlZC10ZXJuYXJ5ICovXG4vKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55ICovXG4vKiBlc2xpbnQtZGlzYWJsZSBuby11bmRlZiAqL1xuLyogZXNsaW50LWRpc2FibGUgcmVhY3QvZnVuY3Rpb24tY29tcG9uZW50LWRlZmluaXRpb24gKi9cbi8qIGVzbGludC1kaXNhYmxlIHJlYWN0L3JlcXVpcmUtZGVmYXVsdC1wcm9wcyAqL1xuLyogZXNsaW50LWRpc2FibGUganN4LWExMXkvY2xpY2stZXZlbnRzLWhhdmUta2V5LWV2ZW50cyAqL1xuLyogZXNsaW50LWRpc2FibGUganN4LWExMXkvbm8tc3RhdGljLWVsZW1lbnQtaW50ZXJhY3Rpb25zICovXG5pbXBvcnQgUmVhY3QsIHsgRkMsIG1lbW8sIFJlYWN0Tm9kZSwgdXNlQ2FsbGJhY2ssIHVzZUVmZmVjdCwgdXNlTGF5b3V0RWZmZWN0LCB1c2VSZWYsIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnXG5cbmltcG9ydCB7IEF0dGFjaG1lbnRDYXJkIH0gZnJvbSAnLi4vLi4vYXRvbXMvQXR0YWNobWVudENhcmQvQXR0YWNobWVudENhcmQnXG5pbXBvcnQgeyBBcHByb3ZhbEJveCB9IGZyb20gJy4uLy4uL2F0b21zL0FwcHJvdmFsQm94L0FwcHJvdmFsQm94J1xuaW1wb3J0IHsgQXR0YWNobWVudFByZXZpZXdNb2RhbCB9IGZyb20gJy4uLy4uL2F0b21zL0F0dGFjaG1lbnRQcmV2aWV3TW9kYWwnXG5pbXBvcnQgeyBBdHRhY2htZW50Q2FyZEF1ZGlvIH0gZnJvbSAnLi4vLi4vYXRvbXMvQXR0YWNobWVudENhcmQvQXR0YWNobWVudENhcmRBdWRpbydcbmltcG9ydCB7IE1haWFTdHJlYW1kb3duIH0gZnJvbSAnLi4vLi4vYXRvbXMvTWFpYVN0cmVhbWRvd24nXG5pbXBvcnQgdHlwZSB7IE1haWFTdHJlYW1kb3duUHJvcHMgfSBmcm9tICcuLi8uLi9hdG9tcy9NYWlhU3RyZWFtZG93bidcbmltcG9ydCB7IE1BSUFNZXNzYWdlUHJvcHMgfSBmcm9tICcuLi8uLi9hdG9tcy9NQUlBTWVzc2FnZS9NQUlBTWVzc2FnZS5pbnRlcmZhY2VzJ1xuaW1wb3J0IHsgQ2hhdE1lc3NhZ2UsIENoYXRIaXN0b3J5Um9sZSB9IGZyb20gJy4uLy4uLy4uL3R5cGVzL0NoYXQnXG5pbXBvcnQgeyByZW5kZXJUZXh0V2l0aE1lbnRpb25zLCBoYXNJbmxpbmVNYXJrZXJzIH0gZnJvbSAnLi4vLi4vLi4vdXRpbHMvcmVuZGVyQ29udGV4dE1lbnRpb25zJ1xuXG5pbXBvcnQgeyBpc01haWFrZXJBZ2VudCB9IGZyb20gJy4uLy4uLy4uL3V0aWxzL2FnZW50RGlzcGxheU5hbWUnXG5pbXBvcnQgeyBDT1JVc2VyLCB1c2VVc2VyIH0gZnJvbSAnLi4vLi4vLi4vY29udGV4dC9jb3ItdXNlcidcblxuaW1wb3J0IHsgdXNlVCB9IGZyb20gJy4uLy4uLy4uL2hvb2tzL3VzZVQnXG5pbXBvcnQgeyB1c2VDaGF0TWFuYWdlciB9IGZyb20gJy4uLy4uLy4uL2hvb2tzL3VzZUNoYXRNYW5hZ2VyL3VzZUNoYXRNYW5hZ2VyJ1xuaW1wb3J0IHsgdXNlU21vb3RoU3RyZWFtVGV4dCB9IGZyb20gJy4uLy4uLy4uL2hvb2tzL3VzZVNtb290aFN0cmVhbVRleHQnXG5pbXBvcnQgeyB1c2VTdHJlYW1pbmdNZXNzYWdlIH0gZnJvbSAnLi4vLi4vLi4vaG9va3MvdXNlU3RyZWFtaW5nTWVzc2FnZSdcblxuaW1wb3J0IHsgTG9hZGluZ1RleHQgfSBmcm9tICcuLi8uLi9hdG9tcy9Mb2FkaW5nVGV4dCdcbmltcG9ydCB7IEFnZW50QWN0aXZpdHlJbmRpY2F0b3IgfSBmcm9tICcuLi8uLi9hdG9tcy9BZ2VudEFjdGl2aXR5SW5kaWNhdG9yJ1xuaW1wb3J0IHsgUmVhc29uaW5nQmxvY2sgfSBmcm9tICcuLi8uLi9hdG9tcy9SZWFzb25pbmdCbG9jay9SZWFzb25pbmdCbG9jaydcbmltcG9ydCB7IHNob3VsZFN0cmVhbU5hcnJhdGlvbkluVGltZWxpbmUgfSBmcm9tICcuLi8uLi9hdG9tcy9SZWFzb25pbmdCbG9jay9yZWFzb25pbmdMaXZlTmFycmF0aW9uJ1xuaW1wb3J0IHsgUmVhc29uaW5nVGltZWxpbmUgfSBmcm9tICcuLi8uLi9hdG9tcy9SZWFzb25pbmdCbG9jay9SZWFzb25pbmdUaW1lbGluZSdcbmltcG9ydCB7IFNDVGltZWxpbmVJbmRpY2F0b3IgfSBmcm9tICcuLi8uLi9hdG9tcy9SZWFzb25pbmdCbG9jay9SZWFzb25pbmdCbG9jay5zdHlsZXMnXG5pbXBvcnQgdHlwZSB7IFN0cmVhbUFjdGl2aXR5IH0gZnJvbSAnLi4vLi4vLi4vdHlwZXMvc3RyZWFtQWN0aXZpdHknXG5pbXBvcnQgeyBpc1N0cmVhbWluZ1BsYWNlaG9sZGVyTWVzc2FnZUlkLCByZXNvbHZlU3RyZWFtTG9hZGluZ0Rpc3BsYXkgfSBmcm9tICcuLi8uLi8uLi91dGlscy9zdHJlYW1BY3Rpdml0eU1lc3NhZ2VzJ1xuaW1wb3J0IHsgcmVzb2x2ZVJldHJ5VHVybklkLCBmaW5kVXNlck1lc3NhZ2VGb3JSZXRyeSB9IGZyb20gJy4uLy4uLy4uL3V0aWxzL3JldHJ5Q29tcGxldGlvbidcbmltcG9ydCB7IHVzZVJlYXNvbmluZ1RyYWNlIH0gZnJvbSAnLi4vLi4vLi4vaG9va3MvdXNlUmVhc29uaW5nVHJhY2UnXG5pbXBvcnQgeyBMb2FkZXIgfSBmcm9tICcuLi8uLi9hdG9tcy9Mb2FkZXInXG5pbXBvcnQgeyBGYWRlIH0gZnJvbSAnLi4vLi4vYXRvbXMvRmFkZSdcbmltcG9ydCB7IHBhdGNoTWFpYVBhbmVsU2Vzc2lvbiwgcmVhZE1haWFQYW5lbFNlc3Npb24gfSBmcm9tICcuLi8uLi8uLi9zdG9yZS9tYWlhUGFuZWxTZXNzaW9uUGVyc2lzdGVuY2UnXG5cbmltcG9ydCB7IFByb2plY3QgfSBmcm9tICcuLi8uLi8uLi90eXBlcy9Qcm9qZWN0J1xuXG5pbXBvcnQgeyBNZXNzYWdlRnJvbVVzZXIsIE1lc3NhZ2VGcm9tT3RoZXIsIE1lc3NhZ2VDb250ZW50RnJvbVVzZXIsIE1lc3NhZ2VDb250ZW50RnJvbU90aGVyIH0gZnJvbSAnLi9zdHlsZXMnXG5pbXBvcnQgeyBNZXNzYWdlRmVlZGJhY2sgfSBmcm9tICcuLi9NZXNzYWdlRmVlZGJhY2snXG5pbXBvcnQge1xuICBTQ0NBSU1lc3NhZ2VXcmFwcGVyLFxuICBTY3JvbGxUb0JvdHRvbUJ1dHRvbixcbiAgU0NTY3JvbGxJY29uU3dhcCxcbiAgU0NXcml0aW5nRG90cyxcbiAgU0NNZXNzYWdlc091dGVyLFxuICBTQ01lc3NhZ2VzU2Nyb2xsLFxuICBTQ01lc3NhZ2VzSW5uZXIsXG4gIFNDVHVyblNwYWNlcixcbiAgU0NPcHRpb25zTGlzdCxcbiAgU0NPcHRpb25JdGVtLFxuICBTQ01lc3NhZ2VJdGVtV3JhcHBlcixcbiAgU0NNZXNzYWdlSXRlbUlubmVyLFxuICBTQ0F0dGFjaG1lbnRzUm93LFxuICBTQ0FwcHJvdmFsQWN0aW9uc0NvbHVtbixcbiAgU0NMb2FkaW5nTWVzc2FnZXNDb2x1bW4sXG4gIFNDTWVzc2FnZXNHcmFkaWVudFRvcCxcbiAgU0NNZXNzYWdlc0dyYWRpZW50Qm90dG9tLFxufSBmcm9tICcuL25ld1N0eWxlcydcbmltcG9ydCB7IEZlZWRiYWNrIH0gZnJvbSAnLi4vTWVzc2FnZUZlZWRiYWNrL01lc3NhZ2VGZWVkYmFjaydcbmltcG9ydCB7IHVzZUdsb2JhbENvbnRleHQgfSBmcm9tICcuLi8uLi8uLi9jb250ZXh0L2dsb2JhbC1jb250ZXh0J1xuaW1wb3J0IHsgQWdlbnQgfSBmcm9tICcuLi8uLi8uLi90eXBlcy9hZ2VudCdcbmltcG9ydCB7IEF0dGFjaG1lbnRGaWxlIH0gZnJvbSAnLi4vQ2hhdEZvb3Rlci9DaGF0Rm9vdGVyJ1xuaW1wb3J0IHsgQ29udGV4dE1lbnRpb24gfSBmcm9tICcuLi8uLi8uLi90eXBlcy9jb250ZXh0TWVudGlvbidcbmltcG9ydCB7IEVudGl0eUxpbmtDdXN0b21MaW5rLCBnZXRFbnRpdHlMaW5rV3JhcHBlckNsYXNzTmFtZSB9IGZyb20gJy4uLy4uLy4uL3V0aWxzL2VudGl0eUxpbmtSZW5kZXInXG5pbXBvcnQgeyBDaGF0QUlTdWdnZXN0aW9ucyB9IGZyb20gJy4vQ2hhdEFJU3VnZ2VzdGlvbnMnXG5pbXBvcnQgeyBDaGF0QUlDcmVhdGVBZ2VudEFjdGlvbnMgfSBmcm9tICcuL0NoYXRBSUNyZWF0ZUFnZW50QWN0aW9ucydcbmltcG9ydCB7IEVWRU5UUywgdXNlRXZlbnQgfSBmcm9tICcuLi8uLi8uLi9ob29rcy91c2VFdmVudCdcbmltcG9ydCB7IGRvd25sb2FkRmlsZUZyb21VcmwgfSBmcm9tICcuLi8uLi8uLi91dGlscy9maWxlRG93bmxvYWRIZWxwZXInXG5pbXBvcnQge1xuICBjYW5PcGVuQXR0YWNobWVudFByZXZpZXcsXG4gIGNvbXB1dGVEaXN0YW5jZUZyb21Cb3R0b20sXG4gIGNvbXB1dGVSZW1vdmFibGVUdXJuU3BhY2UsXG4gIGNvbXB1dGVSZXNlcnZlZFR1cm5TcGFjZSxcbiAgY29tcHV0ZVR1cm5TY3JvbGxEdXJhdGlvbk1zLFxuICBleHRyYWN0RmVlZGJhY2tTZXNzaW9uSWQsXG4gIGZpbmRMYXN0UXVlc3Rpb25JZCxcbiAgaXNBdWRpb0F0dGFjaG1lbnQsXG4gIHNob3VsZFNob3dTY3JvbGxUb0JvdHRvbSxcbiAgdHVybkFuY2hvck9mZnNldCxcbn0gZnJvbSAnLi9DaGF0QUlNZXNzYWdlcy5oZWxwZXJzJ1xuXG50eXBlIENoYXRBSU1lc3NhZ2VzUHJvcHMgPSB7XG4gIHVzZXJJbml0aWFsTWVzc2FnZToge1xuICAgIG1lc3NhZ2U6IHN0cmluZ1xuICAgIGF0dGFjaG1lbnRzOiBBdHRhY2htZW50RmlsZVtdXG4gICAgZmFxSWQ/OiBzdHJpbmdcbiAgICBhZ2VudFN1Z2dlc3Rpb25JZD86IHN0cmluZ1xuICAgIG1lbnRpb25zPzogQ29udGV4dE1lbnRpb25bXVxuICAgIGZ1YUlkPzogc3RyaW5nXG4gICAgc2NJZD86IHN0cmluZ1xuICAgIGNvbnRleHREYXRhPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj5cbiAgfVxuICBpbml0aWFsQ2hhdElkOiBzdHJpbmcgfCBudWxsXG4gIG9uRXJyb3I6ICgpID0+IHZvaWRcbiAgb25TZW5kTWVzc2FnZVJlYWR5PzogKFxuICAgIHNlbmRNZXNzYWdlOiAoXG4gICAgICBtZXNzYWdlOiBzdHJpbmcsXG4gICAgICBhdHRhY2htZW50cz86IEF0dGFjaG1lbnRGaWxlW10sXG4gICAgICBmYXFJZD86IHN0cmluZyxcbiAgICAgIGFnZW50U3VnZ2VzdGlvbklkPzogc3RyaW5nLFxuICAgICAgbWVudGlvbnM/OiBDb250ZXh0TWVudGlvbltdLFxuICAgICAgZnVhSWQ/OiBzdHJpbmcsXG4gICAgICBzY0lkPzogc3RyaW5nLFxuICAgICAgY29udGV4dERhdGE/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxuICAgICkgPT4gdm9pZCxcbiAgICBzdG9wR2VuZXJhdGlvbjogKCkgPT4gdm9pZCxcbiAgICBpc1N0cmVhbWluZzogYm9vbGVhbixcbiAgICBpc1dyaXRpbmc6IGJvb2xlYW5cbiAgKSA9PiB2b2lkXG4gIGlzRGlzYWJsZWQ/OiBib29sZWFuXG4gIG9uU2Nyb2xsVG9Cb3R0b20/OiAoKSA9PiB2b2lkXG4gIGF0dGFjaG1lbnRzPzogQXR0YWNobWVudEZpbGVbXVxuICBhZ2VudHM/OiBBZ2VudFtdXG4gIGV4cGFuZGVkPzogYm9vbGVhblxuICBza2lwRW50ZXJBbmltYXRpb24/OiBib29sZWFuXG59XG5cbnR5cGUgTWVzc2FnZUl0ZW1Qcm9wcyA9IENoYXRNZXNzYWdlICYge1xuICBhdXRoVXNlcjogQ09SVXNlclxuICBoYW5kbGVTZWxlY3RPcHRpb246IChvcHRpb246IFByb2plY3QpID0+IHZvaWRcbiAgaGFuZGxlU3VnZ2VzdGlvbkNsaWNrOiAobWVzc2FnZUlkOiBzdHJpbmcsIHN1Z2dlc3Rpb246IHN0cmluZykgPT4gdm9pZFxuICBoYXNTZWxlY3RlZFN1Z2dlc3Rpb24/OiBib29sZWFuXG4gIGhhbmRsZUZlZWRiYWNrOiAoZmVlZGJhY2s6IEZlZWRiYWNrLCBjaGF0TWVzc2FnZUlkOiBzdHJpbmcpID0+IHZvaWRcbiAgaGFuZGxlQXBwcm92YWxEZWNpc2lvbjogKFxuICAgIHRocmVhZElkczogc3RyaW5nW10sXG4gICAgZGVjaXNpb246ICdhcHByb3ZlJyB8ICdyZWplY3QnLFxuICAgIGVkaXRlZEFjdGlvbnM/OiBBcnJheTx7IHRvb2xfbmFtZTogc3RyaW5nOyBhcmdzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB9PixcbiAgICBtZXRhZGF0YT86IHsgdG9vbF9ncm91cF9zbHVnczogc3RyaW5nW10gfVxuICApID0+IHZvaWRcbiAgaGFuZGxlUmV0cnk/OiAoKSA9PiB2b2lkXG4gIGRpc2FibGVGZWVkYmFjaz86IEZlZWRiYWNrIHwgbnVsbFxuICBzb3VyY2VzPzogYW55XG4gIGF0dGFjaG1lbnRzPzogQXR0YWNobWVudEZpbGVbXVxuICBpc1N0cmVhbWluZz86IGJvb2xlYW5cbiAgaXNMYXN0TWVzc2FnZT86IGJvb2xlYW5cbiAgZXhwYW5kZWQ/OiBib29sZWFuXG4gIHN0cmVhbUFjdGl2aXR5PzogU3RyZWFtQWN0aXZpdHkgfCBudWxsXG59XG5cbmludGVyZmFjZSBNZXNzYWdlV3JhcHBlclByb3BzIHtcbiAgaXNDdXJyZW50VXNlcjogYm9vbGVhblxuICBjaGlsZHJlbjogUmVhY3ROb2RlXG4gICdkYXRhLW1lc3NhZ2UtaWQnPzogc3RyaW5nXG4gIGhhc0ZlZWRiYWNrPzogYm9vbGVhblxufVxuXG50eXBlIE1lc3NhZ2VDb250ZW50V3JhcHBlclByb3BzID0gTUFJQU1lc3NhZ2VQcm9wcyAmIHtcbiAgaXNDdXJyZW50VXNlcjogYm9vbGVhblxuICBpc0Vycm9yPzogYm9vbGVhblxuICBpc0NoYW5nZVByb2plY3Q/OiBib29sZWFuXG59XG5cbmNvbnN0IE1lc3NhZ2VXcmFwcGVyOiBGQzxNZXNzYWdlV3JhcHBlclByb3BzPiA9ICh7IGlzQ3VycmVudFVzZXIsIGNoaWxkcmVuLCAuLi5wcm9wcyB9KSA9PiB7XG4gIGNvbnN0IE1lc3NhZ2VDb21wb25lbnQgPSBpc0N1cnJlbnRVc2VyID8gTWVzc2FnZUZyb21Vc2VyIDogTWVzc2FnZUZyb21PdGhlclxuICByZXR1cm4gPE1lc3NhZ2VDb21wb25lbnQgey4uLnByb3BzfT57Y2hpbGRyZW59PC9NZXNzYWdlQ29tcG9uZW50PlxufVxuXG5jb25zdCBNZXNzYWdlQ29udGVudFdyYXBwZXI6IEZDPE1lc3NhZ2VDb250ZW50V3JhcHBlclByb3BzPiA9ICh7IGlzQ3VycmVudFVzZXIsIC4uLnByb3BzIH0pID0+IHtcbiAgY29uc3QgTWVzc2FnZUNvbnRlbnRDb21wb25lbnQgPSBpc0N1cnJlbnRVc2VyID8gTWVzc2FnZUNvbnRlbnRGcm9tVXNlciA6IE1lc3NhZ2VDb250ZW50RnJvbU90aGVyXG4gIHJldHVybiA8TWVzc2FnZUNvbnRlbnRDb21wb25lbnQgey4uLnByb3BzfSAvPlxufVxuXG5mdW5jdGlvbiBNZXNzYWdlT3B0aW9ucyh7XG4gIG9wdGlvbnMsXG4gIGhhbmRsZVNlbGVjdE9wdGlvbixcbn06IHtcbiAgb3B0aW9uczogUHJvamVjdFtdIHwgbnVsbFxuICBoYW5kbGVTZWxlY3RPcHRpb246IChvcHRpb246IFByb2plY3QpID0+IHZvaWRcbn0pIHtcbiAgY29uc3QgW3NlbGVjdGVkT3B0aW9uLCBzZXRTZWxlY3RlZE9wdGlvbl0gPSB1c2VTdGF0ZTxQcm9qZWN0IHwgbnVsbD4obnVsbClcblxuICBjb25zdCBoYW5kbGVTZWxlY3QgPSAob3B0aW9uOiBQcm9qZWN0KSA9PiB7XG4gICAgaWYgKHNlbGVjdGVkT3B0aW9uKSByZXR1cm5cbiAgICBzZXRTZWxlY3RlZE9wdGlvbihvcHRpb24pXG4gICAgaGFuZGxlU2VsZWN0T3B0aW9uKG9wdGlvbilcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPFNDT3B0aW9uc0xpc3Q+XG4gICAgICB7KG9wdGlvbnMgfHwgW10pLm1hcChvcHRpb24gPT4gKFxuICAgICAgICA8U0NPcHRpb25JdGVtXG4gICAgICAgICAgJGhhc1NlbGVjdGlvbj17ISFzZWxlY3RlZE9wdGlvbn1cbiAgICAgICAgICAkZGltbWVkPXshIXNlbGVjdGVkT3B0aW9uICYmIHNlbGVjdGVkT3B0aW9uPy5pZCAhPT0gb3B0aW9uLmlkfVxuICAgICAgICAgIG9uQ2xpY2s9eygpID0+IGhhbmRsZVNlbGVjdChvcHRpb24pfVxuICAgICAgICAgIGtleT17b3B0aW9uLmlkfVxuICAgICAgICA+XG4gICAgICAgICAge29wdGlvbi5uYW1lfVxuICAgICAgICA8L1NDT3B0aW9uSXRlbT5cbiAgICAgICkpfVxuICAgIDwvU0NPcHRpb25zTGlzdD5cbiAgKVxufVxuXG4vKiogU29sbyBlc3RlIGNvbXBvbmVudGUgcmUtcmVuZGVyaXphIGN1YW5kbyBjYW1iaWEgZWwgdGV4dG8gZW4gc3RyZWFtaW5nIChsZWUgZGVsIGNvbnRleHQpLiAqL1xuY29uc3QgU3RyZWFtaW5nTWVzc2FnZUJvZHkgPSBtZW1vKFxuICAocHJvcHM6IHtcbiAgICBtZXNzYWdlOiBzdHJpbmdcbiAgICBpc1N0cmVhbWluZzogYm9vbGVhblxuICAgIGlzQ3VycmVudFVzZXI6IGJvb2xlYW5cbiAgICBpc0Fzc2lzdGFudDogYm9vbGVhblxuICAgIGlzRnJvbnRlbmRDYW5jZWxsZWQ/OiBib29sZWFuXG4gICAgYXBwcm92YWw/OiBNZXNzYWdlSXRlbVByb3BzWydhcHByb3ZhbCddXG4gICAgaXNFcnJvcj86IGJvb2xlYW5cbiAgICBzb3VyY2VzPzogTWVzc2FnZUl0ZW1Qcm9wc1snc291cmNlcyddXG4gICAgc3VnZ2VzdGlvbnM/OiBzdHJpbmdbXSB8IG51bGxcbiAgICBjcmVhdGVBZ2VudEZvbGxvd1VwPzogeyBhZ2VudElkOiBzdHJpbmcgfSB8IG51bGxcbiAgICBoYW5kbGVGZWVkYmFja0NsaWNrOiAoZjogRmVlZGJhY2spID0+IHZvaWRcbiAgICBkaXNhYmxlRmVlZGJhY2s6IEZlZWRiYWNrIHwgbnVsbFxuICAgIG9uUmV0cnk/OiAoKSA9PiB2b2lkXG4gICAgaGFuZGxlU3VnZ2VzdGlvbkNsaWNrOiAobWVzc2FnZUlkOiBzdHJpbmcsIHN1Z2dlc3Rpb246IHN0cmluZykgPT4gdm9pZFxuICAgIHN1Z2dlc3Rpb25zRGlzYWJsZWQ/OiBib29sZWFuXG4gICAgbWVzc2FnZUlkOiBzdHJpbmdcbiAgICBpc0xhc3RNZXNzYWdlPzogYm9vbGVhblxuICB9KSA9PiB7XG4gICAgLy8gVGV4dG8gZGVsIHN0cmVhbTogc29sbyBzZSBsZWUgZGVsIHN0b3JlIGN1YW5kbyBlc3RlIG1lbnNhamUgZXMgZWxcbiAgICAvLyBxdWUgZXN0w6EgZW4gc3RyZWFtaW5nLiB1c2VTeW5jRXh0ZXJuYWxTdG9yZSBhw61zbGEgZWwgcmUtcmVuZGVyIGFcbiAgICAvLyBlc3RlIGNvbXBvbmVudGUsIHNpbiB0b2NhciBlbCByZXN0byBkZWwgw6FyYm9sLlxuICAgIGNvbnN0IHN0cmVhbWluZ1RleHQgPSB1c2VTdHJlYW1pbmdNZXNzYWdlKHByb3BzLmlzU3RyZWFtaW5nID8gcHJvcHMubWVzc2FnZUlkIDogbnVsbClcbiAgICBjb25zdCByYXdUZXh0ID0gcHJvcHMuaXNTdHJlYW1pbmcgPyBzdHJlYW1pbmdUZXh0IDogcHJvcHMubWVzc2FnZVxuICAgIC8vIFNtb290aCBzdHJlYW1pbmc6IGRlc2Fjb3BsYSBsYSBjYWRlbmNpYSBkZWwgYmFja2VuZCBkZWwgcmVuZGVyLlxuICAgIC8vIER1cmFudGUgZWwgc3RyZWFtaW5nIGxpYmVyYSBjaGFycyBhIHJpdG1vIGNvbnN0YW50ZSB2w61hIHJBRjsgY3VhbmRvXG4gICAgLy8gdGVybWluYSwgbXVlc3RyYSBlbCB0ZXh0byBmaW5hbCBhbCBpbnN0YW50ZSAoc2luIGFuaW1hY2nDs24gcmVzaWR1YWwpLlxuICAgIC8vIExvcyBkZWZhdWx0cyBkZWwgaG9vayBzZSBhanVzdGFyb24gZW1ww61yaWNhbWVudGUgZW4gc3RhZ2luZzsgYXVuIGFzw61cbiAgICAvLyBzZSBleHBvbmVuIGZsYWdzIGRlIHJ1bnRpbWUgKHdpbmRvdy4qKSBwYXJhIHBvZGVyIHR1bmVhciBzaW4gcmVjb21waWxhclxuICAgIC8vIHNpIGFsZ8O6biBiYWNrZW5kIHByZXNlbnRhIHVuYSBjYWRlbmNpYSBtdXkgZGlzdGludGEgZW4gcHJvZHVjY2nDs24uXG4gICAgLy8gICB3aW5kb3cuc3RyZWFtQWRhcHQgPSBmYWxzZSAgICAgIC8vIGRlc2FjdGl2YSBhZGFwdGFjacOzbiBhbCBiYWNrZW5kXG4gICAgLy8gICB3aW5kb3cuc3RyZWFtQnVmZmVyTXMgPSA2MDAgICAgIC8vIGNvbGNow7NuIG9iamV0aXZvIChtcylcbiAgICAvLyAgIHdpbmRvdy5zdHJlYW1MYWdNcyA9IDQ1MCAgICAgICAgLy8gbGFnIG3DoXhpbW8gYmFzZSAobXMpXG4gICAgLy8gICB3aW5kb3cuc3RyZWFtTWluQnVmZmVyID0gNzAgICAgIC8vIHBpc28gZGVsIGNvbGNow7NuIGVuIGNoYXJzXG4gICAgLy8gICB3aW5kb3cuc3RyZWFtV2FybXVwTXMgPSA0MDAgICAgIC8vIHdhcm11cCBpbmljaWFsIChtcylcbiAgICBjb25zdCB3aW5GbGFncyA9XG4gICAgICB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICA/ICh3aW5kb3cgYXMgdW5rbm93biBhcyB7XG4gICAgICAgICAgICBzdHJlYW1BZGFwdD86IGJvb2xlYW5cbiAgICAgICAgICAgIHN0cmVhbUJ1ZmZlck1zPzogbnVtYmVyXG4gICAgICAgICAgICBzdHJlYW1MYWdNcz86IG51bWJlclxuICAgICAgICAgICAgc3RyZWFtTWluQnVmZmVyPzogbnVtYmVyXG4gICAgICAgICAgICBzdHJlYW1XYXJtdXBNcz86IG51bWJlclxuICAgICAgICAgIH0pXG4gICAgICAgIDoge31cbiAgICBjb25zdCBkaXNwbGF5VGV4dCA9IHVzZVNtb290aFN0cmVhbVRleHQocmF3VGV4dCwge1xuICAgICAgZW5hYmxlZDogISFwcm9wcy5pc1N0cmVhbWluZyxcbiAgICAgIG1heENoYXJzUGVyRnJhbWU6IDI0LFxuICAgICAgc25hcFRvV29yZEJvdW5kYXJ5OiB0cnVlLFxuICAgICAgLi4uKHdpbkZsYWdzLnN0cmVhbUxhZ01zICE9IG51bGwgJiYgeyB0YXJnZXRMYWdNczogd2luRmxhZ3Muc3RyZWFtTGFnTXMgfSksXG4gICAgICAuLi4od2luRmxhZ3Muc3RyZWFtQWRhcHQgIT0gbnVsbCAmJiB7IGFkYXB0VG9CYWNrZW5kUmF0ZTogd2luRmxhZ3Muc3RyZWFtQWRhcHQgfSksXG4gICAgICAuLi4od2luRmxhZ3Muc3RyZWFtQnVmZmVyTXMgIT0gbnVsbCAmJiB7IHRhcmdldEJ1ZmZlck1zOiB3aW5GbGFncy5zdHJlYW1CdWZmZXJNcyB9KSxcbiAgICAgIC4uLih3aW5GbGFncy5zdHJlYW1NaW5CdWZmZXIgIT0gbnVsbCAmJiB7IG1pbkJ1ZmZlckNoYXJzOiB3aW5GbGFncy5zdHJlYW1NaW5CdWZmZXIgfSksXG4gICAgICAuLi4od2luRmxhZ3Muc3RyZWFtV2FybXVwTXMgIT0gbnVsbCAmJiB7IHdhcm11cE1zOiB3aW5GbGFncy5zdHJlYW1XYXJtdXBNcyB9KSxcbiAgICB9KVxuICAgIGNvbnN0IGNyZWF0ZUFnZW50QWN0aW9uc0FnZW50SWQgPSBwcm9wcy5jcmVhdGVBZ2VudEZvbGxvd1VwPy5hZ2VudElkXG5cbiAgICBpZiAoIWRpc3BsYXlUZXh0ICYmICFwcm9wcy5pc1N0cmVhbWluZykgcmV0dXJuIG51bGxcbiAgICBjb25zdCBoYXNNZW50aW9ucyA9IGhhc0lubGluZU1hcmtlcnMoZGlzcGxheVRleHQpXG4gICAgY29uc3QgbWVudGlvbk5vZGVzID0gaGFzTWVudGlvbnMgPyByZW5kZXJUZXh0V2l0aE1lbnRpb25zKGRpc3BsYXlUZXh0KSA6IG51bGxcbiAgICByZXR1cm4gKFxuICAgICAgPD5cbiAgICAgICAgPFNDQ0FJTWVzc2FnZVdyYXBwZXJcbiAgICAgICAgICBpc0N1cnJlbnRVc2VyPXtwcm9wcy5pc0N1cnJlbnRVc2VyfVxuICAgICAgICAgIGlzRnJvbnRlbmRDYW5jZWxsZWQ9e3Byb3BzLmlzRnJvbnRlbmRDYW5jZWxsZWR9XG4gICAgICAgICAgY2xhc3NOYW1lPXtnZXRFbnRpdHlMaW5rV3JhcHBlckNsYXNzTmFtZShkaXNwbGF5VGV4dCl9XG4gICAgICAgID5cbiAgICAgICAgICB7aGFzTWVudGlvbnMgJiYgbWVudGlvbk5vZGVzID8gKFxuICAgICAgICAgICAgLy8gU2kgaGF5IG1lbnRpb25zLCByZW5kZXJpemFyIGRpcmVjdGFtZW50ZSAoc2luIG1hcmtkb3duIGVuIGVsIG1pc21vIHDDoXJyYWZvKVxuICAgICAgICAgICAgPHNwYW4gc3R5bGU9e3sgZGlzcGxheTogJ2lubGluZScgfX0+e21lbnRpb25Ob2Rlc308L3NwYW4+XG4gICAgICAgICAgKSA6IChcbiAgICAgICAgICAgIC8vIFNpbiBtZW50aW9ucywgcGFzYXIgYSBTdHJlYW1kb3duIHBhcmEgbWFya2Rvd24gc3VwcG9ydFxuICAgICAgICAgICAgPE1haWFTdHJlYW1kb3duXG4gICAgICAgICAgICAgIHZhcmlhbnQ9XCJjaGF0XCJcbiAgICAgICAgICAgICAgaXNDdXJyZW50VXNlcj17cHJvcHMuaXNDdXJyZW50VXNlcn1cbiAgICAgICAgICAgICAgaXNGcm9udGVuZENhbmNlbGxlZD17cHJvcHMuaXNGcm9udGVuZENhbmNlbGxlZH1cbiAgICAgICAgICAgICAgY29tcG9uZW50cz17eyBhOiBFbnRpdHlMaW5rQ3VzdG9tTGluayB9IGFzIE1haWFTdHJlYW1kb3duUHJvcHNbJ2NvbXBvbmVudHMnXX1cbiAgICAgICAgICAgICAgaXNBbmltYXRpbmc9eyEhcHJvcHMuaXNTdHJlYW1pbmd9XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIHtkaXNwbGF5VGV4dH1cbiAgICAgICAgICAgIDwvTWFpYVN0cmVhbWRvd24+XG4gICAgICAgICAgKX1cbiAgICAgICAgPC9TQ0NBSU1lc3NhZ2VXcmFwcGVyPlxuICAgICAgICB7cHJvcHMuaXNBc3Npc3RhbnQgJiZcbiAgICAgICAgICAhcHJvcHMuaXNFcnJvciAmJlxuICAgICAgICAgICFwcm9wcy5hcHByb3ZhbCAmJlxuICAgICAgICAgICFwcm9wcy5pc1N0cmVhbWluZyAmJlxuICAgICAgICAgICghcHJvcHMuaXNGcm9udGVuZENhbmNlbGxlZCB8fCAhIXByb3BzLm9uUmV0cnkpICYmIChcbiAgICAgICAgICAgIDxNZXNzYWdlRmVlZGJhY2tcbiAgICAgICAgICAgICAgY29udGVudD17ZGlzcGxheVRleHR9XG4gICAgICAgICAgICAgIHNvdXJjZXM9e3Byb3BzLmlzRnJvbnRlbmRDYW5jZWxsZWQgPyB1bmRlZmluZWQgOiBwcm9wcy5zb3VyY2VzfVxuICAgICAgICAgICAgICBoYW5kbGVGZWVkYmFjaz17cHJvcHMuaXNGcm9udGVuZENhbmNlbGxlZCA/IHVuZGVmaW5lZCA6IHByb3BzLmhhbmRsZUZlZWRiYWNrQ2xpY2t9XG4gICAgICAgICAgICAgIGRpc2FibGVGZWVkYmFjaz17cHJvcHMuZGlzYWJsZUZlZWRiYWNrfVxuICAgICAgICAgICAgICBvblJldHJ5PXtwcm9wcy5vblJldHJ5fVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICApfVxuICAgICAgICB7cHJvcHMuaXNBc3Npc3RhbnQgJiZcbiAgICAgICAgICAhcHJvcHMuaXNGcm9udGVuZENhbmNlbGxlZCAmJlxuICAgICAgICAgICFwcm9wcy5hcHByb3ZhbCAmJlxuICAgICAgICAgICghcHJvcHMuaXNFcnJvciB8fCBwcm9wcy5zdWdnZXN0aW9ucz8ubGVuZ3RoKSAmJiAoXG4gICAgICAgICAgICA8Q2hhdEFJU3VnZ2VzdGlvbnNcbiAgICAgICAgICAgICAgc3VnZ2VzdGlvbnM9e3Byb3BzLnN1Z2dlc3Rpb25zIHx8IFtdfVxuICAgICAgICAgICAgICBvblNlbGVjdFN1Z2dlc3Rpb249e3N1Z2dlc3Rpb24gPT4gcHJvcHMuaGFuZGxlU3VnZ2VzdGlvbkNsaWNrKHByb3BzLm1lc3NhZ2VJZCwgc3VnZ2VzdGlvbil9XG4gICAgICAgICAgICAgIGRpc2FibGVkPXtwcm9wcy5zdWdnZXN0aW9uc0Rpc2FibGVkfVxuICAgICAgICAgICAgICBoaWRkZW49eyEhcHJvcHMuaXNTdHJlYW1pbmcgfHwgIXByb3BzLmlzTGFzdE1lc3NhZ2UgfHwgISFwcm9wcy5zdWdnZXN0aW9uc0Rpc2FibGVkfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICApfVxuICAgICAgICB7cHJvcHMuaXNBc3Npc3RhbnQgJiZcbiAgICAgICAgICAhcHJvcHMuaXNFcnJvciAmJlxuICAgICAgICAgICFwcm9wcy5pc0Zyb250ZW5kQ2FuY2VsbGVkICYmXG4gICAgICAgICAgIXByb3BzLmFwcHJvdmFsICYmXG4gICAgICAgICAgISFjcmVhdGVBZ2VudEFjdGlvbnNBZ2VudElkICYmIChcbiAgICAgICAgICAgIDxDaGF0QUlDcmVhdGVBZ2VudEFjdGlvbnNcbiAgICAgICAgICAgICAgYWdlbnRJZD17Y3JlYXRlQWdlbnRBY3Rpb25zQWdlbnRJZH1cbiAgICAgICAgICAgICAgZGlzYWJsZWQ9e3Byb3BzLnN1Z2dlc3Rpb25zRGlzYWJsZWR9XG4gICAgICAgICAgICAgIGhpZGRlbj17ISFwcm9wcy5pc1N0cmVhbWluZyB8fCAhcHJvcHMuaXNMYXN0TWVzc2FnZSB8fCAhIXByb3BzLnN1Z2dlc3Rpb25zRGlzYWJsZWR9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICl9XG4gICAgICA8Lz5cbiAgICApXG4gIH1cbilcblxuY29uc3QgTWVzc2FnZUl0ZW0gPSBtZW1vKChwcm9wczogTWVzc2FnZUl0ZW1Qcm9wcykgPT4ge1xuICBjb25zdCB7XG4gICAgaWQsXG4gICAgdXNlcixcbiAgICBtZXNzYWdlLFxuICAgIGlzU3RyZWFtaW5nLFxuICAgIGlzRXJyb3IsXG4gICAgYXV0aFVzZXIsXG4gICAgb3B0aW9ucyxcbiAgICBpc0NoYW5nZVByb2plY3QsXG4gICAgaGFuZGxlU2VsZWN0T3B0aW9uLFxuICAgIGhhbmRsZVN1Z2dlc3Rpb25DbGljayxcbiAgICBoYW5kbGVGZWVkYmFjayxcbiAgICBoYW5kbGVBcHByb3ZhbERlY2lzaW9uLFxuICAgIGRpc2FibGVGZWVkYmFjayxcbiAgICBoYW5kbGVSZXRyeSxcbiAgICByb2xlLFxuICAgIHNvdXJjZXMsXG4gICAgYXR0YWNobWVudHMsXG4gICAgYXBwcm92YWwsXG4gICAgYXBwcm92YWxTdGF0dXMsXG4gICAgc3VnZ2VzdGlvbnMsXG4gICAgY3JlYXRlQWdlbnRGb2xsb3dVcCxcbiAgICBoYXNTZWxlY3RlZFN1Z2dlc3Rpb24sXG4gICAgaXNMYXN0TWVzc2FnZSxcbiAgICBzdHJlYW1BY3Rpdml0eSxcbiAgfSA9IHByb3BzXG5cbiAgY29uc3QgW3ByZXZpZXdBdHRhY2htZW50LCBzZXRQcmV2aWV3QXR0YWNobWVudF0gPSB1c2VTdGF0ZTxBdHRhY2htZW50RmlsZSB8IG51bGw+KG51bGwpXG4gIGNvbnN0IGlzQ3VycmVudFVzZXIgPSByb2xlID09PSBDaGF0SGlzdG9yeVJvbGUuVVNFUiB8fCB1c2VyLmlkID09PSBhdXRoVXNlci5pZC50b1N0cmluZygpXG4gIGNvbnN0IGlzQXNzaXN0YW50ID0gcm9sZSA9PT0gQ2hhdEhpc3RvcnlSb2xlLkFTU0lTVEFOVCB8fCB1c2VyLmlkID09PSAnYXNzaXN0YW50J1xuICBjb25zdCBpc1N0cmVhbWluZ1BsYWNlaG9sZGVyID0gaXNTdHJlYW1pbmdQbGFjZWhvbGRlck1lc3NhZ2VJZChpZClcbiAgY29uc3Qgc3RyZWFtaW5nVGV4dCA9IHVzZVN0cmVhbWluZ01lc3NhZ2UoaXNTdHJlYW1pbmcgfHwgaXNTdHJlYW1pbmdQbGFjZWhvbGRlciA/IGlkIDogbnVsbClcbiAgY29uc3QgaXNBY3RpdmVTdHJlYW1pbmcgPSAhIWlzU3RyZWFtaW5nIHx8IGlzU3RyZWFtaW5nUGxhY2Vob2xkZXJcbiAgY29uc3QgaGFzU3RyZWFtVGV4dCA9IEJvb2xlYW4oc3RyZWFtaW5nVGV4dClcbiAgY29uc3QgcmVhc29uaW5nVHJhY2UgPSB1c2VSZWFzb25pbmdUcmFjZShpc0Fzc2lzdGFudCAmJiBpc0FjdGl2ZVN0cmVhbWluZyA/IGlkIDogJycpXG4gIGNvbnN0IHN0cmVhbU5hcnJhdGlvbkluVGltZWxpbmUgPVxuICAgIGlzQXNzaXN0YW50ICYmXG4gICAgc2hvdWxkU3RyZWFtTmFycmF0aW9uSW5UaW1lbGluZShyZWFzb25pbmdUcmFjZS5zdGVwcywgc3RyZWFtQWN0aXZpdHksIHN0cmVhbWluZ1RleHQsIHsgbWVzc2FnZUlkOiBpZCB9KVxuICBjb25zdCBzaG93U3RyZWFtaW5nQm9keSA9IGlzQWN0aXZlU3RyZWFtaW5nICYmIGhhc1N0cmVhbVRleHQgJiYgIXN0cmVhbU5hcnJhdGlvbkluVGltZWxpbmVcbiAgY29uc3Qgc2hvd0FjdGl2aXR5SW5kaWNhdG9yID0gaXNBc3Npc3RhbnQgJiYgaXNBY3RpdmVTdHJlYW1pbmcgJiYgISFzdHJlYW1BY3Rpdml0eVxuXG4gIGNvbnN0IG1lc3NhZ2VBdHRhY2htZW50cyA9XG4gICAgYXR0YWNobWVudHMgJiYgYXR0YWNobWVudHMubGVuZ3RoID4gMFxuICAgICAgPyBhdHRhY2htZW50c1xuICAgICAgOiAhaXNBc3Npc3RhbnQgJiYgQXJyYXkuaXNBcnJheShzb3VyY2VzKVxuICAgICAgICA/IChzb3VyY2VzIGFzIEF0dGFjaG1lbnRGaWxlW10pXG4gICAgICAgIDogW11cblxuICBjb25zdCBoYW5kbGVBdHRhY2htZW50Q2xpY2sgPSAoYXR0YWNobWVudDogQXR0YWNobWVudEZpbGUpID0+IHtcbiAgICAvLyBQZXJtaXRpciBwcmV2aXN1YWxpemFjacOzbiBzaSB0aWVuZSBhcmNoaXZvIGxvY2FsIG8gVVJMcyBkZWwgYmFja2VuZFxuICAgIGlmIChjYW5PcGVuQXR0YWNobWVudFByZXZpZXcoYXR0YWNobWVudCkpIHtcbiAgICAgIHNldFByZXZpZXdBdHRhY2htZW50KGF0dGFjaG1lbnQpXG4gICAgfVxuICB9XG5cbiAgY29uc3QgaGFuZGxlQ2xvc2VQcmV2aWV3ID0gKCkgPT4ge1xuICAgIHNldFByZXZpZXdBdHRhY2htZW50KG51bGwpXG4gIH1cblxuICBjb25zdCBoYW5kbGVBdHRhY2htZW50RG93bmxvYWQgPSBhc3luYyAoYXR0YWNobWVudDogQXR0YWNobWVudEZpbGUpID0+IHtcbiAgICBjb25zdCBleHRlbnNpb24gPSBhdHRhY2htZW50Lm5hbWUuaW5jbHVkZXMoJy4nKSA/ICcnIDogYC4ke2F0dGFjaG1lbnQudHlwZX1gXG4gICAgY29uc3QgZmlsZU5hbWUgPSBgJHthdHRhY2htZW50Lm5hbWV9JHtleHRlbnNpb259YFxuICAgIGNvbnN0IGZpbGVVcmwgPSBhdHRhY2htZW50LnVybF9vcmlnaW5hbCB8fCBhdHRhY2htZW50LnVybF9maWxlIHx8IGF0dGFjaG1lbnQudXJsX3RodW1ibmFpbFxuXG4gICAgdHJ5IHtcbiAgICAgIGxldCBibG9iVXJsOiBzdHJpbmcgfCBudWxsID0gbnVsbFxuXG4gICAgICBpZiAoZmlsZVVybCkge1xuICAgICAgICBjb25zdCBkb3dubG9hZGVkRmlsZSA9IGF3YWl0IGRvd25sb2FkRmlsZUZyb21VcmwoZmlsZVVybCwgZmlsZU5hbWUsIGF0dGFjaG1lbnQudHlwZSlcbiAgICAgICAgYmxvYlVybCA9IFVSTC5jcmVhdGVPYmplY3RVUkwoZG93bmxvYWRlZEZpbGUpXG4gICAgICB9IGVsc2UgaWYgKGF0dGFjaG1lbnQuZmlsZSBpbnN0YW5jZW9mIEZpbGUpIHtcbiAgICAgICAgYmxvYlVybCA9IFVSTC5jcmVhdGVPYmplY3RVUkwoYXR0YWNobWVudC5maWxlKVxuICAgICAgfVxuXG4gICAgICBpZiAoIWJsb2JVcmwpIHJldHVyblxuXG4gICAgICBjb25zdCBsaW5rID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpXG4gICAgICBsaW5rLmhyZWYgPSBibG9iVXJsXG4gICAgICBsaW5rLmRvd25sb2FkID0gZmlsZU5hbWVcbiAgICAgIGxpbmsuc3R5bGUuZGlzcGxheSA9ICdub25lJ1xuICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChsaW5rKVxuICAgICAgbGluay5jbGljaygpXG5cbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGxpbmspXG4gICAgICAgIFVSTC5yZXZva2VPYmplY3RVUkwoYmxvYlVybClcbiAgICAgIH0sIDEwMClcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcignRmFpbGVkIHRvIGRvd25sb2FkIGF0dGFjaG1lbnQnLCBlcnJvcilcbiAgICB9XG4gIH1cblxuICBpZiAoaXNDaGFuZ2VQcm9qZWN0ICYmIG9wdGlvbnMpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPE1lc3NhZ2VXcmFwcGVyIGtleT17aWR9IGlzQ3VycmVudFVzZXI9e2lzQ3VycmVudFVzZXJ9IGRhdGEtbWVzc2FnZS1pZD17aWR9IGhhc0ZlZWRiYWNrPXtmYWxzZX0+XG4gICAgICAgIDxTQ01lc3NhZ2VJdGVtV3JhcHBlciAkaXNBc3Npc3RhbnQ9e2lzQXNzaXN0YW50fT5cbiAgICAgICAgICA8TWVzc2FnZUNvbnRlbnRXcmFwcGVyXG4gICAgICAgICAgICBpc0NoYW5nZVByb2plY3Q9e2lzQ2hhbmdlUHJvamVjdH1cbiAgICAgICAgICAgIG1lc3NhZ2U9e21lc3NhZ2V9XG4gICAgICAgICAgICBpc0N1cnJlbnRVc2VyPXtpc0N1cnJlbnRVc2VyfVxuICAgICAgICAgICAgaXNFcnJvcj17aXNFcnJvcn1cbiAgICAgICAgICAgIG1lc3NhZ2VFeHRyYUNvbnRlbnQ9ezxNZXNzYWdlT3B0aW9ucyBvcHRpb25zPXtvcHRpb25zIGFzIGFueX0gaGFuZGxlU2VsZWN0T3B0aW9uPXtoYW5kbGVTZWxlY3RPcHRpb259IC8+fVxuICAgICAgICAgIC8+XG4gICAgICAgIDwvU0NNZXNzYWdlSXRlbVdyYXBwZXI+XG4gICAgICA8L01lc3NhZ2VXcmFwcGVyPlxuICAgIClcbiAgfVxuXG4gIGNvbnN0IGhhbmRsZUZlZWRiYWNrQ2xpY2sgPSAoZmVlZGJhY2s6IEZlZWRiYWNrKSA9PiB7XG4gICAgaGFuZGxlRmVlZGJhY2s/LihmZWVkYmFjaywgZXh0cmFjdEZlZWRiYWNrU2Vzc2lvbklkKGlkKSlcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPFNDTWVzc2FnZUl0ZW1XcmFwcGVyICRpc0Fzc2lzdGFudD17aXNBc3Npc3RhbnR9IGRhdGEtbWVzc2FnZS1pZD17aWR9PlxuICAgICAgPFNDTWVzc2FnZUl0ZW1Jbm5lcj5cbiAgICAgICAgey8qIE1pc21vIHNsb3QgcGFyYSBsYSB0cmF6YSBlbiB2aXZvIHkgbGEgeWEgcGxlZ2FkYTogbWllbnRyYXMgZWwgdHVybm9cbiAgICAgICAgICAgIGNvcnJlLCBsb3MgcGFzb3Mgc2UgYXBpbGFuIGFjw6EgKHRpbWVsYXBzZSk7IGFsIGNvbXBsZXRhciwgZWxcbiAgICAgICAgICAgIFJlYXNvbmluZ0Jsb2NrIG9jdXBhIGVsIGx1Z2FyIHkgY29sYXBzYSBzb2xvLlxuICAgICAgICAgICAgVmEgQVJSSUJBIGRlbCBjdWVycG8gcG9ycXVlIGxhIG5hcnJhY2nDs24gZGUgY2FkYSB0dXJubyB0ZXJtaW5hIGNvbW9cbiAgICAgICAgICAgIGZpbGEgZGUgbGEgdHJhemE6IHNpIGVzdHV2aWVyYSBhYmFqbywgZWwgdGV4dG8gdmllam8gcXVlZGFyw61hIHBvclxuICAgICAgICAgICAgZGViYWpvIGRlbCB0ZXh0byBudWV2by4gKi99XG4gICAgICAgIHtpc0Fzc2lzdGFudCAmJlxuICAgICAgICAgIChpc0FjdGl2ZVN0cmVhbWluZyA/IChcbiAgICAgICAgICAgIDxSZWFzb25pbmdUaW1lbGluZSBtZXNzYWdlSWQ9e2lkfSBzdHJlYW1BY3Rpdml0eT17c3RyZWFtQWN0aXZpdHl9IHN0cmVhbWluZ1RleHQ9e3N0cmVhbWluZ1RleHR9IC8+XG4gICAgICAgICAgKSA6IChcbiAgICAgICAgICAgIDxSZWFzb25pbmdCbG9jayBtZXNzYWdlSWQ9e2lkfSB0cmFjZT17cHJvcHMucmVhc29uaW5nID8/IG51bGx9IC8+XG4gICAgICAgICAgKSl9XG4gICAgICAgIHshIW1lc3NhZ2VBdHRhY2htZW50cy5sZW5ndGggJiYgKFxuICAgICAgICAgIDxTQ0F0dGFjaG1lbnRzUm93ICRpc0Fzc2lzdGFudD17aXNBc3Npc3RhbnR9PlxuICAgICAgICAgICAge21lc3NhZ2VBdHRhY2htZW50cy5tYXAoKGF0dGFjaG1lbnQsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICAgIC8vIERldGVjdGFyIHNpIGVzIHVuIGFyY2hpdm8gZGUgYXVkaW9cbiAgICAgICAgICAgICAgaWYgKGlzQXVkaW9BdHRhY2htZW50KGF0dGFjaG1lbnQpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIDxBdHRhY2htZW50Q2FyZEF1ZGlvIGtleT17YCR7YXR0YWNobWVudC5pZH0tJHthdHRhY2htZW50Lm5hbWV9YH0gYXR0YWNobWVudD17YXR0YWNobWVudH0gLz5cbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgPEF0dGFjaG1lbnRDYXJkXG4gICAgICAgICAgICAgICAgICBrZXk9e2Ake2F0dGFjaG1lbnQuaWR9LSR7YXR0YWNobWVudC5uYW1lfWB9XG4gICAgICAgICAgICAgICAgICBhdHRhY2htZW50PXthdHRhY2htZW50fVxuICAgICAgICAgICAgICAgICAgcG9zaXRpb25JbmRleD17aW5kZXh9XG4gICAgICAgICAgICAgICAgICBvbkRvd25sb2FkPXsoKSA9PiBoYW5kbGVBdHRhY2htZW50RG93bmxvYWQoYXR0YWNobWVudCl9XG4gICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBoYW5kbGVBdHRhY2htZW50Q2xpY2soYXR0YWNobWVudCl9XG4gICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfSl9XG4gICAgICAgICAgPC9TQ0F0dGFjaG1lbnRzUm93PlxuICAgICAgICApfVxuICAgICAgICB7KCEhbWVzc2FnZSB8fCBzaG93U3RyZWFtaW5nQm9keSkgJiYgIShpc0Fzc2lzdGFudCAmJiAhIW1lc3NhZ2VBdHRhY2htZW50cy5sZW5ndGgpICYmIChcbiAgICAgICAgICA8U3RyZWFtaW5nTWVzc2FnZUJvZHlcbiAgICAgICAgICAgIG1lc3NhZ2U9e21lc3NhZ2UgPz8gJyd9XG4gICAgICAgICAgICBpc1N0cmVhbWluZz17c2hvd1N0cmVhbWluZ0JvZHl9XG4gICAgICAgICAgICBpc0N1cnJlbnRVc2VyPXtpc0N1cnJlbnRVc2VyfVxuICAgICAgICAgICAgaXNBc3Npc3RhbnQ9e2lzQXNzaXN0YW50fVxuICAgICAgICAgICAgaXNGcm9udGVuZENhbmNlbGxlZD17cHJvcHMuaXNGcm9udGVuZENhbmNlbGxlZH1cbiAgICAgICAgICAgIGFwcHJvdmFsPXthcHByb3ZhbH1cbiAgICAgICAgICAgIGlzRXJyb3I9e2lzRXJyb3J9XG4gICAgICAgICAgICBzb3VyY2VzPXtzb3VyY2VzfVxuICAgICAgICAgICAgc3VnZ2VzdGlvbnM9e3N1Z2dlc3Rpb25zfVxuICAgICAgICAgICAgY3JlYXRlQWdlbnRGb2xsb3dVcD17Y3JlYXRlQWdlbnRGb2xsb3dVcH1cbiAgICAgICAgICAgIGhhbmRsZUZlZWRiYWNrQ2xpY2s9e2hhbmRsZUZlZWRiYWNrQ2xpY2t9XG4gICAgICAgICAgICBkaXNhYmxlRmVlZGJhY2s9e2Rpc2FibGVGZWVkYmFjayA/PyBudWxsfVxuICAgICAgICAgICAgb25SZXRyeT17aGFuZGxlUmV0cnl9XG4gICAgICAgICAgICBoYW5kbGVTdWdnZXN0aW9uQ2xpY2s9e2hhbmRsZVN1Z2dlc3Rpb25DbGlja31cbiAgICAgICAgICAgIHN1Z2dlc3Rpb25zRGlzYWJsZWQ9e2lzQWN0aXZlU3RyZWFtaW5nIHx8ICEhaGFzU2VsZWN0ZWRTdWdnZXN0aW9ufVxuICAgICAgICAgICAgbWVzc2FnZUlkPXtpZH1cbiAgICAgICAgICAgIGlzTGFzdE1lc3NhZ2U9e2lzTGFzdE1lc3NhZ2V9XG4gICAgICAgICAgLz5cbiAgICAgICAgKX1cbiAgICAgICAgey8qIFNwaW5uZXIgZGUgYWN0aXZpZGFkOiB2aXNpYmxlIHRhbWJpw6luIGVuIHdyaXRpbmcgKG5hcnJhY2nDs24gZW4gdHJhemEgbyByZXNwdWVzdGEgZmluYWwpLiAqL31cbiAgICAgICAge3Nob3dBY3Rpdml0eUluZGljYXRvciAmJiAoXG4gICAgICAgICAgPFNDVGltZWxpbmVJbmRpY2F0b3I+XG4gICAgICAgICAgICA8QWdlbnRBY3Rpdml0eUluZGljYXRvciBhY3Rpdml0eT17c3RyZWFtQWN0aXZpdHl9IGNvbXBhY3QgLz5cbiAgICAgICAgICA8L1NDVGltZWxpbmVJbmRpY2F0b3I+XG4gICAgICAgICl9XG4gICAgICAgIHthcHByb3ZhbCAmJiBhcHByb3ZhbC5wZW5kaW5nX2FjdGlvbnMgJiYgKFxuICAgICAgICAgIDxTQ0FwcHJvdmFsQWN0aW9uc0NvbHVtbj5cbiAgICAgICAgICAgIDxBcHByb3ZhbEJveFxuICAgICAgICAgICAgICBhY3Rpb25zPXthcHByb3ZhbC5wZW5kaW5nX2FjdGlvbnN9XG4gICAgICAgICAgICAgIHN0YXR1cz17YXBwcm92YWxTdGF0dXN9XG4gICAgICAgICAgICAgIG9uQXBwcm92ZT17KHRocmVhZElkcywgbWV0YWRhdGEpID0+IGhhbmRsZUFwcHJvdmFsRGVjaXNpb24odGhyZWFkSWRzLCAnYXBwcm92ZScsIHVuZGVmaW5lZCwgbWV0YWRhdGEpfVxuICAgICAgICAgICAgICBvblJlamVjdD17dGhyZWFkSWRzID0+IGhhbmRsZUFwcHJvdmFsRGVjaXNpb24odGhyZWFkSWRzLCAncmVqZWN0Jyl9XG4gICAgICAgICAgICAgIGlzUHJvamVjdERlbGV0ZWQ9e3Byb3BzLnByb2plY3RNZXRhZGF0YT8uaXNfZGVsZXRlZCA9PT0gdHJ1ZX1cbiAgICAgICAgICAgICAgaXNFeHBhbmRlZD17cHJvcHMuZXhwYW5kZWR9XG4gICAgICAgICAgICAgIGhpdGxJbnN0YW5jZUlkPXthcHByb3ZhbC5vcmlnaW5hbF90aHJlYWRfaWR9XG4gICAgICAgICAgICAgIHdhcm5pbmdNZXNzYWdlPXthcHByb3ZhbC53YXJuaW5nX21lc3NhZ2V9XG4gICAgICAgICAgICAgIG1hbnVhbEFwcHJvdmFsRGV0ZWN0ZWQ9e2FwcHJvdmFsLm1hbnVhbF9hcHByb3ZhbF9kZXRlY3RlZH1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC9TQ0FwcHJvdmFsQWN0aW9uc0NvbHVtbj5cbiAgICAgICAgKX1cbiAgICAgIDwvU0NNZXNzYWdlSXRlbUlubmVyPlxuICAgICAgPEF0dGFjaG1lbnRQcmV2aWV3TW9kYWxcbiAgICAgICAgaXNPcGVuPXshIXByZXZpZXdBdHRhY2htZW50fVxuICAgICAgICBvbkNsb3NlPXtoYW5kbGVDbG9zZVByZXZpZXd9XG4gICAgICAgIGF0dGFjaG1lbnQ9e3ByZXZpZXdBdHRhY2htZW50fVxuICAgICAgLz5cbiAgICA8L1NDTWVzc2FnZUl0ZW1XcmFwcGVyPlxuICApXG59KVxuXG5jb25zdCBDaGF0QUlNZXNzYWdlc0lubmVyID0gKHtcbiAgdXNlckluaXRpYWxNZXNzYWdlLFxuICBpbml0aWFsQ2hhdElkLFxuICBvbkVycm9yLFxuICBvblNlbmRNZXNzYWdlUmVhZHksXG4gIG9uU2Nyb2xsVG9Cb3R0b20sXG4gIGF0dGFjaG1lbnRzLFxuICBhZ2VudHMsXG4gIGV4cGFuZGVkLFxuICBza2lwRW50ZXJBbmltYXRpb24gPSBmYWxzZSxcbn06IENoYXRBSU1lc3NhZ2VzUHJvcHMpID0+IHtcbiAgY29uc3QgeyB0IH0gPSB1c2VUKClcbiAgY29uc3QgeyBpc1dlYlNlYXJjaEFjdGl2ZSwgaXNEZWVwU2VhcmNoQWN0aXZlLCBhZ2VudCB9ID0gdXNlR2xvYmFsQ29udGV4dCgpXG4gIGNvbnN0IGV2ZW50ID0gdXNlRXZlbnQoKVxuICBjb25zdCBhdXRoVXNlciA9IHVzZVVzZXIoKVxuICBjb25zdCBtZXNzYWdlc1JlZiA9IHVzZVJlZjxIVE1MRGl2RWxlbWVudD4obnVsbClcbiAgY29uc3QgY2hhdEluaXRpYWxpemVkUmVmID0gdXNlUmVmKGZhbHNlKVxuICBjb25zdCBpc0xvYWRpbmdNb3JlUmVmID0gdXNlUmVmKGZhbHNlKVxuICBjb25zdCBzY3JvbGxUaHJlc2hvbGRSZWYgPSB1c2VSZWYoMzkpXG4gIGNvbnN0IGxhc3RTY3JvbGxUb3BSZWYgPSB1c2VSZWYoMClcbiAgY29uc3Qgc2hvd1Njcm9sbFRvQm90dG9tUmVmID0gdXNlUmVmKGZhbHNlKVxuICBjb25zdCBzaG93VG9wR3JhZGllbnRSZWYgPSB1c2VSZWYoZmFsc2UpXG4gIGNvbnN0IHNob3dCb3R0b21HcmFkaWVudFJlZiA9IHVzZVJlZihmYWxzZSlcbiAgY29uc3Qgc2Nyb2xsUmFmUmVmID0gdXNlUmVmPG51bWJlciB8IG51bGw+KG51bGwpXG4gIC8qKlxuICAgKiBUdXJubyBjb24gZWwgc2Nyb2xsIGJham8gY29udHJvbCBkZWwgdXN1YXJpbzogZGVzZGUgcXVlIGVudsOtYSBlbCBtZW5zYWplIHlcbiAgICogaGFzdGEgZWwgcHLDs3hpbW8gZW52w61vIG5vIG1vdmVtb3MgZWwgc2Nyb2xsIHBvciBuaW5nw7puIG1vdGl2by4gRXNcbiAgICogaW5kZXBlbmRpZW50ZSBkZSBsYSBhbHR1cmEgZGVsIHNwYWNlciwgcXVlIHB1ZWRlIGxsZWdhciBhIDAgc2luIGRlc2FuY2xhci5cbiAgICovXG4gIGNvbnN0IGFuY2hvcmVkVHVybklkUmVmID0gdXNlUmVmPHN0cmluZyB8IG51bGw+KG51bGwpXG4gIGNvbnN0IHNwYWNlckVsUmVmID0gdXNlUmVmPEhUTUxEaXZFbGVtZW50IHwgbnVsbD4obnVsbClcbiAgY29uc3Qgc3BhY2VySGVpZ2h0UmVmID0gdXNlUmVmKDApXG4gIGNvbnN0IHR1cm5TY3JvbGxSYWZSZWYgPSB1c2VSZWY8bnVtYmVyIHwgbnVsbD4obnVsbClcbiAgY29uc3Qgd2FzTG9hZGluZ01lc3NhZ2VzUmVmID0gdXNlUmVmKGZhbHNlKVxuICBjb25zdCBsYXN0U2Nyb2xsZWRTZXNzaW9uUmVmID0gdXNlUmVmPHN0cmluZyB8IG51bGw+KG51bGwpXG4gIGNvbnN0IHBlbmRpbmdTY3JvbGxSZXN0b3JlUmVmID0gdXNlUmVmPG51bWJlciB8IG51bGw+KG51bGwpXG4gIGNvbnN0IHNjcm9sbFBlcnNpc3RUaW1lclJlZiA9IHVzZVJlZjxudW1iZXIgfCBudWxsPihudWxsKVxuICBjb25zdCBbc2hvd1Njcm9sbFRvQm90dG9tLCBzZXRTaG93U2Nyb2xsVG9Cb3R0b21dID0gdXNlU3RhdGUoZmFsc2UpXG4gIGNvbnN0IFtzaG93VG9wR3JhZGllbnQsIHNldFNob3dUb3BHcmFkaWVudF0gPSB1c2VTdGF0ZShmYWxzZSlcbiAgY29uc3QgW3Nob3dCb3R0b21HcmFkaWVudCwgc2V0U2hvd0JvdHRvbUdyYWRpZW50XSA9IHVzZVN0YXRlKGZhbHNlKVxuICBjb25zdCBbc2VsZWN0ZWRTdWdnZXN0aW9uTWVzc2FnZUlkcywgc2V0U2VsZWN0ZWRTdWdnZXN0aW9uTWVzc2FnZUlkc10gPSB1c2VTdGF0ZTxSZWNvcmQ8c3RyaW5nLCBib29sZWFuPj4oe30pXG5cbiAgY29uc3Qge1xuICAgIG1lc3NhZ2VzLFxuICAgIGxvYWRpbmdNZXNzYWdlcyxcbiAgICBpc0xvYWRpbmdNb3JlTWVzc2FnZXMsXG4gICAgd2FpdGluZ1Jlc3BvbnNlLFxuICAgIGlzV3JpdGluZyxcbiAgICBsb2FkaW5nTWVzc2FnZSxcbiAgICBzdHJlYW1BY3Rpdml0eSxcbiAgICBhY3RpdmVMb2FkaW5ncyxcbiAgICBzZW5kTWVzc2FnZSxcbiAgICByZXRyeU1lc3NhZ2UsXG4gICAgY2hhbmdlUHJvamVjdCxcbiAgICBoYW5kbGVGZWVkYmFjayxcbiAgICBoYW5kbGVBcHByb3ZhbERlY2lzaW9uLFxuICAgIGluaXRpYWxpemVDaGF0LFxuICAgIGhhbmRsZVNjcm9sbCxcbiAgICBzdG9wR2VuZXJhdGlvbixcbiAgfSA9IHVzZUNoYXRNYW5hZ2VyKHtcbiAgICBjaGF0SWQ6IGluaXRpYWxDaGF0SWQgfHwgdW5kZWZpbmVkLFxuICAgIHVzZXJJbml0aWFsTWVzc2FnZSxcbiAgICBvbkVycm9yLFxuICAgIGF0dGFjaG1lbnRzLFxuICAgIGFnZW50cyxcbiAgfSlcblxuICBjb25zdCBoYW5kbGVTZWxlY3RPcHRpb24gPSB1c2VDYWxsYmFjayhcbiAgICAob3B0aW9uOiBQcm9qZWN0KSA9PiB7XG4gICAgICBjaGFuZ2VQcm9qZWN0KG9wdGlvbilcbiAgICB9LFxuICAgIFtjaGFuZ2VQcm9qZWN0XVxuICApXG5cbiAgLyoqXG4gICAqIFJlY2FsY3VsYSBlbCBib3TDs24gXCJzY3JvbGwgdG8gYm90dG9tXCIgeSBsb3MgZ3JhZGllbnRlcyBkZSBib3JkZSBhIHBhcnRpciBkZVxuICAgKiBsYSBwb3NpY2nDs24gZGVsIHNjcm9sbC4gTG9zIHJlZnMgZXZpdGFuIGBzZXRTdGF0ZWAgY3VhbmRvIGVsIHZhbG9yIG5vIGNhbWJpYTpcbiAgICogZXN0byBjb3JyZSBlbiBjYWRhIGZyYW1lIGRlbCBzdHJlYW0uXG4gICAqL1xuICBjb25zdCB1cGRhdGVTY3JvbGxBZmZvcmRhbmNlcyA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBjb25zdCBlbCA9IG1lc3NhZ2VzUmVmLmN1cnJlbnRcbiAgICBpZiAoIWVsKSByZXR1cm5cbiAgICBjb25zdCB7IHNjcm9sbFRvcCwgc2Nyb2xsSGVpZ2h0LCBjbGllbnRIZWlnaHQgfSA9IGVsXG4gICAgLy8gRWwgc3BhY2VyIGRlbCB0dXJubyBlcyBhbHRvIHJlc2VydmFkbywgbm8gY29udGVuaWRvOiBzaSBubyBsbyBkZXNjb250YW1vc1xuICAgIC8vIGxhIGZsZWNoYSB5IGVsIGdyYWRpZW50ZSBkZSBhYmFqbyBxdWVkYW4gZW5jZW5kaWRvcyBkdXJhbnRlIHRvZG8gZWwgdHVybm8uXG4gICAgY29uc3QgZGlzdGFuY2VGcm9tQm90dG9tID0gY29tcHV0ZURpc3RhbmNlRnJvbUJvdHRvbShzY3JvbGxIZWlnaHQsIHNwYWNlckhlaWdodFJlZi5jdXJyZW50LCBzY3JvbGxUb3AsIGNsaWVudEhlaWdodClcblxuICAgIGNvbnN0IHNob3VsZFNob3cgPSBzaG91bGRTaG93U2Nyb2xsVG9Cb3R0b20oZGlzdGFuY2VGcm9tQm90dG9tKVxuICAgIGlmIChzaG93U2Nyb2xsVG9Cb3R0b21SZWYuY3VycmVudCAhPT0gc2hvdWxkU2hvdykge1xuICAgICAgc2hvd1Njcm9sbFRvQm90dG9tUmVmLmN1cnJlbnQgPSBzaG91bGRTaG93XG4gICAgICBzZXRTaG93U2Nyb2xsVG9Cb3R0b20oc2hvdWxkU2hvdylcbiAgICB9XG5cbiAgICBjb25zdCBuZXh0VG9wR3JhZGllbnQgPSBzY3JvbGxUb3AgPiAxXG4gICAgaWYgKHNob3dUb3BHcmFkaWVudFJlZi5jdXJyZW50ICE9PSBuZXh0VG9wR3JhZGllbnQpIHtcbiAgICAgIHNob3dUb3BHcmFkaWVudFJlZi5jdXJyZW50ID0gbmV4dFRvcEdyYWRpZW50XG4gICAgICBzZXRTaG93VG9wR3JhZGllbnQobmV4dFRvcEdyYWRpZW50KVxuICAgIH1cblxuICAgIGNvbnN0IG5leHRCb3R0b21HcmFkaWVudCA9IGRpc3RhbmNlRnJvbUJvdHRvbSA+IDFcbiAgICBpZiAoc2hvd0JvdHRvbUdyYWRpZW50UmVmLmN1cnJlbnQgIT09IG5leHRCb3R0b21HcmFkaWVudCkge1xuICAgICAgc2hvd0JvdHRvbUdyYWRpZW50UmVmLmN1cnJlbnQgPSBuZXh0Qm90dG9tR3JhZGllbnRcbiAgICAgIHNldFNob3dCb3R0b21HcmFkaWVudChuZXh0Qm90dG9tR3JhZGllbnQpXG4gICAgfVxuICB9LCBbXSlcblxuICAvKipcbiAgICogU2Nyb2xsIGlubWVkaWF0byBhbCBmb25kbyAoZGVudHJvIGRlIHJBRiBwYXJhIGNvb3JkaW5hciBjb24gZWwgcGFpbnQpXG4gICAqIHkgYWN0dWFsaXphIGxhIHZpc2liaWxpZGFkIGRlbCBib3TDs24uIFNvbG8gc2UgdXNhIGFsIGFicmlyL2NhcmdhciB1biBjaGF0XG4gICAqIG8gY3VhbmRvIGVsIHVzdWFyaW8gcGlkZSBpciBhbCBmb25kbzogbnVuY2EgZHVyYW50ZSBlbCBzdHJlYW0uXG4gICAqL1xuICBjb25zdCBzY3JvbGxUb0JvdHRvbVJhZiA9IHVzZUNhbGxiYWNrKFxuICAgIChvcHRzOiB7IGRlbGF5TXM/OiBudW1iZXIgfSA9IHt9KSA9PiB7XG4gICAgICBjb25zdCB7IGRlbGF5TXMgPSAwIH0gPSBvcHRzXG4gICAgICBjb25zdCBydW4gPSAoKSA9PiB7XG4gICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICAgICAgY29uc3QgZWwgPSBtZXNzYWdlc1JlZi5jdXJyZW50XG4gICAgICAgICAgaWYgKCFlbCkgcmV0dXJuXG4gICAgICAgICAgZWwuc2Nyb2xsVG9wID0gZWwuc2Nyb2xsSGVpZ2h0XG4gICAgICAgICAgdXBkYXRlU2Nyb2xsQWZmb3JkYW5jZXMoKVxuICAgICAgICB9KVxuICAgICAgfVxuICAgICAgaWYgKGRlbGF5TXMgPiAwKSBzZXRUaW1lb3V0KHJ1biwgZGVsYXlNcylcbiAgICAgIGVsc2UgcnVuKClcbiAgICB9LFxuICAgIFt1cGRhdGVTY3JvbGxBZmZvcmRhbmNlc11cbiAgKVxuXG4gIGNvbnN0IGNhbmNlbFR1cm5TY3JvbGwgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgaWYgKHR1cm5TY3JvbGxSYWZSZWYuY3VycmVudCA9PT0gbnVsbCkgcmV0dXJuXG4gICAgY2FuY2VsQW5pbWF0aW9uRnJhbWUodHVyblNjcm9sbFJhZlJlZi5jdXJyZW50KVxuICAgIHR1cm5TY3JvbGxSYWZSZWYuY3VycmVudCA9IG51bGxcbiAgfSwgW10pXG5cbiAgLyoqXG4gICAqIFNjcm9sbCBhbmltYWRvIGNvbiBlYXNpbmcgcHJvcGlvOiBgYmVoYXZpb3I6ICdzbW9vdGgnYCBubyBwZXJtaXRlIHJlZ3VsYXIgbGFcbiAgICogZHVyYWNpw7NuIHkgZWwgc2FsdG8gYWwgYW5jbGFyIGVsIHR1cm5vIHF1ZWRhIGRlbWFzaWFkbyBzZWNvLlxuICAgKi9cbiAgY29uc3QgYW5pbWF0ZVNjcm9sbFRvID0gdXNlQ2FsbGJhY2soXG4gICAgKHRvcDogbnVtYmVyKSA9PiB7XG4gICAgICBjYW5jZWxUdXJuU2Nyb2xsKClcbiAgICAgIGNvbnN0IGVsID0gbWVzc2FnZXNSZWYuY3VycmVudFxuICAgICAgaWYgKCFlbCkgcmV0dXJuXG4gICAgICBjb25zdCBmcm9tID0gZWwuc2Nyb2xsVG9wXG4gICAgICBjb25zdCBkaXN0YW5jZSA9IHRvcCAtIGZyb21cbiAgICAgIGlmIChNYXRoLmFicyhkaXN0YW5jZSkgPCAxKSByZXR1cm5cblxuICAgICAgY29uc3QgZHVyYXRpb24gPSBjb21wdXRlVHVyblNjcm9sbER1cmF0aW9uTXMoZGlzdGFuY2UpXG5cbiAgICAgIGNvbnN0IHN0YXJ0ZWRBdCA9IHBlcmZvcm1hbmNlLm5vdygpXG4gICAgICBjb25zdCBzdGVwID0gKG5vdzogbnVtYmVyKSA9PiB7XG4gICAgICAgIGNvbnN0IHByb2dyZXNzID0gTWF0aC5taW4oMSwgKG5vdyAtIHN0YXJ0ZWRBdCkgLyBkdXJhdGlvbilcbiAgICAgICAgLy8gZWFzZU91dEV4cG8gKH5jdWJpYy1iZXppZXIoMC4xNiwgMSwgMC4zLCAxKSk6IGVtcGllemEgYSBmcmVuYXIgbXVjaG9cbiAgICAgICAgLy8gYW50ZXMgcXVlIGVsIHF1aW50IHkgYXRlcnJpemEgc2luIGNvcnRlIHBlcmNlcHRpYmxlLlxuICAgICAgICBjb25zdCBlYXNlZCA9IHByb2dyZXNzID09PSAxID8gMSA6IDEgLSAyICoqICgtMTIgKiBwcm9ncmVzcylcbiAgICAgICAgZWwuc2Nyb2xsVG9wID0gZnJvbSArIGRpc3RhbmNlICogZWFzZWRcbiAgICAgICAgdXBkYXRlU2Nyb2xsQWZmb3JkYW5jZXMoKVxuICAgICAgICB0dXJuU2Nyb2xsUmFmUmVmLmN1cnJlbnQgPSBwcm9ncmVzcyA8IDEgPyByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoc3RlcCkgOiBudWxsXG4gICAgICB9XG4gICAgICB0dXJuU2Nyb2xsUmFmUmVmLmN1cnJlbnQgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoc3RlcClcbiAgICB9LFxuICAgIFtjYW5jZWxUdXJuU2Nyb2xsLCB1cGRhdGVTY3JvbGxBZmZvcmRhbmNlc11cbiAgKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiBjYW5jZWxUdXJuU2Nyb2xsLCBbY2FuY2VsVHVyblNjcm9sbF0pXG5cbiAgY29uc3Qgc2V0U3BhY2VySGVpZ2h0ID0gdXNlQ2FsbGJhY2soKG5leHQ6IG51bWJlcikgPT4ge1xuICAgIGlmIChNYXRoLmFicyhzcGFjZXJIZWlnaHRSZWYuY3VycmVudCAtIG5leHQpIDwgMSkgcmV0dXJuXG4gICAgc3BhY2VySGVpZ2h0UmVmLmN1cnJlbnQgPSBuZXh0XG4gICAgaWYgKHNwYWNlckVsUmVmLmN1cnJlbnQpIHtcbiAgICAgIHNwYWNlckVsUmVmLmN1cnJlbnQuc3R5bGUuaGVpZ2h0ID0gYCR7bmV4dH1weGBcbiAgICB9XG4gIH0sIFtdKVxuXG4gIGNvbnN0IGNsZWFyVHVyblNwYWNlID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGFuY2hvcmVkVHVybklkUmVmLmN1cnJlbnQgPSBudWxsXG4gICAgc2V0U3BhY2VySGVpZ2h0KDApXG4gIH0sIFtzZXRTcGFjZXJIZWlnaHRdKVxuXG4gIC8qKlxuICAgKiBEZXZ1ZWx2ZSBlbCBhbHRvIHJlc2VydmFkbyBxdWUgc2UgcHVlZGUgc2FjYXIgc2luIG1vdmVyIGxhIHZpc3RhOiB0b2RvIGxvXG4gICAqIHF1ZSBxdWVkZSBwb3IgZGViYWpvIGRlbCBzY3JvbGwgYWN0dWFsLiBTaSBlbCB1c3VhcmlvIGVzdMOhIGVuIGVsIGZvbmRvLCBzZVxuICAgKiBzYWNhIGVudGVybzsgc2kgZXN0w6EgYSBtaXRhZCBkZSBjYW1pbm8sIHNlIHZhIGRyZW5hbmRvIGEgbWVkaWRhIHF1ZSBiYWphLlxuICAgKi9cbiAgY29uc3QgZHJhaW5UdXJuU3BhY2UgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgY29uc3QgZWwgPSBtZXNzYWdlc1JlZi5jdXJyZW50XG4gICAgaWYgKCFlbCB8fCBzcGFjZXJIZWlnaHRSZWYuY3VycmVudCA8PSAwKSByZXR1cm5cbiAgICBzZXRTcGFjZXJIZWlnaHQoY29tcHV0ZVJlbW92YWJsZVR1cm5TcGFjZShlbC5zY3JvbGxIZWlnaHQsIGVsLmNsaWVudEhlaWdodCwgZWwuc2Nyb2xsVG9wLCBzcGFjZXJIZWlnaHRSZWYuY3VycmVudCkpXG4gIH0sIFtzZXRTcGFjZXJIZWlnaHRdKVxuXG4gIC8qKlxuICAgKiBFbCB1c3VhcmlvIHRvbcOzIGVsIGNvbnRyb2wgZGVsIHNjcm9sbDogZWwgdHVybm8gZGVqYSBkZSBlc3RhciBhbmNsYWRvIHkgZWxcbiAgICogZXNwYWNpbyByZXNlcnZhZG8gZW1waWV6YSBhIGRldm9sdmVyc2UuIFNpbiBhbmNsYSB5IGNvbiBzcGFjZXIgPiAwLCBlbFxuICAgKiBoYW5kbGVyIGRlIHNjcm9sbCBzaWd1ZSBkcmVuYW5kbyBoYXN0YSBxdWUgbGxlZ2EgYWwgZm9uZG8geSBubyBxdWVkYSBodWVjby5cbiAgICovXG4gIGNvbnN0IHJlbGVhc2VUdXJuU3BhY2UgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgaWYgKCFhbmNob3JlZFR1cm5JZFJlZi5jdXJyZW50ICYmIHNwYWNlckhlaWdodFJlZi5jdXJyZW50IDw9IDApIHJldHVyblxuICAgIGFuY2hvcmVkVHVybklkUmVmLmN1cnJlbnQgPSBudWxsXG4gICAgZHJhaW5UdXJuU3BhY2UoKVxuICB9LCBbZHJhaW5UdXJuU3BhY2VdKVxuXG4gIGNvbnN0IGhhbmRsZVVzZXJTY3JvbGxJbnRlbnQgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgY2FuY2VsVHVyblNjcm9sbCgpXG4gICAgcmVsZWFzZVR1cm5TcGFjZSgpXG4gIH0sIFtjYW5jZWxUdXJuU2Nyb2xsLCByZWxlYXNlVHVyblNwYWNlXSlcblxuICBjb25zdCBtZWFzdXJlVHVybiA9IHVzZUNhbGxiYWNrKChxdWVzdGlvbklkOiBzdHJpbmcpID0+IHtcbiAgICBjb25zdCBlbCA9IG1lc3NhZ2VzUmVmLmN1cnJlbnRcbiAgICBjb25zdCBzcGFjZXJFbCA9IHNwYWNlckVsUmVmLmN1cnJlbnRcbiAgICBpZiAoIWVsIHx8ICFzcGFjZXJFbCkgcmV0dXJuIG51bGxcblxuICAgIGNvbnN0IHF1ZXN0aW9uRWwgPSBlbC5xdWVyeVNlbGVjdG9yPEhUTUxFbGVtZW50PihgW2RhdGEtbWVzc2FnZS1pZD1cIiR7cXVlc3Rpb25JZH1cIl1gKVxuICAgIGlmICghcXVlc3Rpb25FbCkgcmV0dXJuIG51bGxcblxuICAgIGNvbnN0IGNvbnRhaW5lclRvcCA9IGVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcFxuICAgIGNvbnN0IHF1ZXN0aW9uVG9wID0gcXVlc3Rpb25FbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3AgLSBjb250YWluZXJUb3AgKyBlbC5zY3JvbGxUb3BcbiAgICBjb25zdCBjb250ZW50Qm90dG9tID0gc3BhY2VyRWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wIC0gY29udGFpbmVyVG9wICsgZWwuc2Nyb2xsVG9wXG4gICAgcmV0dXJuIHsgZWwsIHF1ZXN0aW9uVG9wLCB0dXJuSGVpZ2h0OiBjb250ZW50Qm90dG9tIC0gcXVlc3Rpb25Ub3AgfVxuICB9LCBbXSlcblxuICBjb25zdCByZXNlcnZlVHVyblNwYWNlID0gdXNlQ2FsbGJhY2soXG4gICAgKHF1ZXN0aW9uSWQ6IHN0cmluZykgPT4ge1xuICAgICAgY29uc3QgbWVhc3VyZWQgPSBtZWFzdXJlVHVybihxdWVzdGlvbklkKVxuICAgICAgaWYgKCFtZWFzdXJlZCkgcmV0dXJuXG4gICAgICBjb25zdCB7IGVsLCBxdWVzdGlvblRvcCwgdHVybkhlaWdodCB9ID0gbWVhc3VyZWRcblxuICAgICAgLy8gQW5jbGFtb3Mgc2llbXByZSwgaW5jbHVzbyBjdWFuZG8gbm8gaGFnYSBmYWx0YSByZXNlcnZhcjogZHVyYW50ZSBlbFxuICAgICAgLy8gdHVybm8gZWwgc2Nyb2xsIG5vIHNlIG11ZXZlIHNvbG8gZW4gbmluZ8O6biBjYXNvLlxuICAgICAgYW5jaG9yZWRUdXJuSWRSZWYuY3VycmVudCA9IHF1ZXN0aW9uSWRcblxuICAgICAgY29uc3Qgb2Zmc2V0ID0gdHVybkFuY2hvck9mZnNldChlbC5jbGllbnRIZWlnaHQpXG4gICAgICBjb25zdCB0YXJnZXRTY3JvbGxUb3AgPSBNYXRoLm1heCgwLCBxdWVzdGlvblRvcCAtIG9mZnNldClcbiAgICAgIC8vIENoYXQgcmVjacOpbiBpbmljaWFkbyBvIGNvbnZlcnNhY2nDs24gcXVlIGHDum4gZW50cmEgZW4gcGFudGFsbGE6IGxhXG4gICAgICAvLyBwcmVndW50YSB5YSBlc3TDoSBhcnJpYmEsIG5vIGhheSBuYWRhIHF1ZSBzdWJpciBuaSBxdWUgcmVzZXJ2YXIuXG4gICAgICBpZiAodGFyZ2V0U2Nyb2xsVG9wIDw9IGVsLnNjcm9sbFRvcCkge1xuICAgICAgICBzZXRTcGFjZXJIZWlnaHQoMClcbiAgICAgICAgdXBkYXRlU2Nyb2xsQWZmb3JkYW5jZXMoKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgLy8gUmVzZXJ2YW1vcyBsbyBtw61uaW1vIHBhcmEgcXVlIGB0YXJnZXRTY3JvbGxUb3BgIHNlYSBhbGNhbnphYmxlLiBFbFxuICAgICAgLy8gc3BhY2VyIHNlIGluc2VydGEgZGUgdW5hIChlcyBhbHRvIHJlc2VydmFkbywgbm8gY29udGVuaWRvIHZpc2libGUpO1xuICAgICAgLy8gbG8gw7puaWNvIHF1ZSBzZSBwZXJjaWJlIGVzIGVsIGRlc3BsYXphbWllbnRvIGFuaW1hZG8uXG4gICAgICBzZXRTcGFjZXJIZWlnaHQoY29tcHV0ZVJlc2VydmVkVHVyblNwYWNlKGVsLmNsaWVudEhlaWdodCwgdHVybkhlaWdodCwgZWwuY2xpZW50SGVpZ2h0KSlcbiAgICAgIGFuaW1hdGVTY3JvbGxUbyh0YXJnZXRTY3JvbGxUb3ApXG4gICAgfSxcbiAgICBbbWVhc3VyZVR1cm4sIHNldFNwYWNlckhlaWdodCwgdXBkYXRlU2Nyb2xsQWZmb3JkYW5jZXMsIGFuaW1hdGVTY3JvbGxUb11cbiAgKVxuXG4gIC8qKlxuICAgKiBFbmNvZ2UgZWwgc3BhY2VyIGEgbWVkaWRhIHF1ZSBjcmVjZSBsYSByZXNwdWVzdGE6IGVsIGFsdG8gdG90YWwgZGVsIHNjcm9sbFxuICAgKiBxdWVkYSBjb25zdGFudGUgeSBsYSB2aXN0YSBubyBzZSBtdWV2ZSBzb2xhLiBTb2xvIGFjaGljYSwgbnVuY2EgYWdyYW5kYSxcbiAgICogcGFyYSBubyBpbnllY3RhciBlc3BhY2lvIGVuIHR1cm5vcyBxdWUgYXJyYW5jYXJvbiBzaW4gcmVzZXJ2YS5cbiAgICogRGV2dWVsdmUgc2kgZWwgdHVybm8gc2lndWUgYW5jbGFkbyAoYXVucXVlIGVsIHNwYWNlciB5YSBzZWEgMCkuXG4gICAqL1xuICBjb25zdCBzeW5jVHVyblNwYWNlID0gdXNlQ2FsbGJhY2soKCk6IGJvb2xlYW4gPT4ge1xuICAgIGlmICghYW5jaG9yZWRUdXJuSWRSZWYuY3VycmVudCkgcmV0dXJuIGZhbHNlXG4gICAgaWYgKHNwYWNlckhlaWdodFJlZi5jdXJyZW50ID4gMCkge1xuICAgICAgY29uc3QgbWVhc3VyZWQgPSBtZWFzdXJlVHVybihhbmNob3JlZFR1cm5JZFJlZi5jdXJyZW50KVxuICAgICAgaWYgKG1lYXN1cmVkKSB7XG4gICAgICAgIGNvbnN0IG9mZnNldCA9IHR1cm5BbmNob3JPZmZzZXQobWVhc3VyZWQuZWwuY2xpZW50SGVpZ2h0KVxuICAgICAgICBjb25zdCByZXNlcnZlZCA9IE1hdGgubWF4KDAsIG1lYXN1cmVkLmVsLmNsaWVudEhlaWdodCAtIG1lYXN1cmVkLnR1cm5IZWlnaHQgLSBvZmZzZXQpXG4gICAgICAgIHNldFNwYWNlckhlaWdodChNYXRoLm1pbihzcGFjZXJIZWlnaHRSZWYuY3VycmVudCwgcmVzZXJ2ZWQpKVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdHJ1ZVxuICB9LCBbbWVhc3VyZVR1cm4sIHNldFNwYWNlckhlaWdodF0pXG5cbiAgY29uc3QgaGFuZGxlQ2xpY2tTY3JvbGxUb0JvdHRvbSA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBjb25zdCBlbCA9IG1lc3NhZ2VzUmVmLmN1cnJlbnRcbiAgICBpZiAoIWVsKSByZXR1cm5cbiAgICBjbGVhclR1cm5TcGFjZSgpXG4gICAgLy8gTWlzbWEgY3VydmEgeSBkdXJhY2nDs24gcXVlIGVsIGFuY2xhamUgZGVsIHR1cm5vOiBlbCBgc21vb3RoYCBuYXRpdm8gZnJlbmEgc2Vjby5cbiAgICBhbmltYXRlU2Nyb2xsVG8oZWwuc2Nyb2xsSGVpZ2h0IC0gZWwuY2xpZW50SGVpZ2h0KVxuICB9LCBbY2xlYXJUdXJuU3BhY2UsIGFuaW1hdGVTY3JvbGxUb10pXG5cbiAgY29uc3QgaGFuZGxlU2Nyb2xsVG9Cb3R0b20gPSB1c2VDYWxsYmFjayhcbiAgICAoZTogUmVhY3QuVUlFdmVudDxIVE1MRGl2RWxlbWVudD4pID0+IHtcbiAgICAgIGNvbnN0IGNvbnRhaW5lciA9IGUuY3VycmVudFRhcmdldFxuXG4gICAgICBpZiAoc2Nyb2xsUmFmUmVmLmN1cnJlbnQgIT09IG51bGwpIHtcbiAgICAgICAgY2FuY2VsQW5pbWF0aW9uRnJhbWUoc2Nyb2xsUmFmUmVmLmN1cnJlbnQpXG4gICAgICB9XG5cbiAgICAgIHNjcm9sbFJhZlJlZi5jdXJyZW50ID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcbiAgICAgICAgc2Nyb2xsUmFmUmVmLmN1cnJlbnQgPSBudWxsXG4gICAgICAgIGNvbnN0IHsgc2Nyb2xsVG9wLCBzY3JvbGxIZWlnaHQsIGNsaWVudEhlaWdodCB9ID0gY29udGFpbmVyXG5cbiAgICAgICAgY29uc3QgaXNTY3JvbGxpbmdVcCA9IHNjcm9sbFRvcCA8IGxhc3RTY3JvbGxUb3BSZWYuY3VycmVudFxuXG4gICAgICAgIGlmIChpc1Njcm9sbGluZ1VwKSB7XG4gICAgICAgICAgc2Nyb2xsVGhyZXNob2xkUmVmLmN1cnJlbnQgPSAxNVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgaXNOZWFyQm90dG9tID0gc2Nyb2xsSGVpZ2h0IC0gc2Nyb2xsVG9wIC0gY2xpZW50SGVpZ2h0IDwgc2Nyb2xsVGhyZXNob2xkUmVmLmN1cnJlbnRcblxuICAgICAgICBpZiAoaXNOZWFyQm90dG9tKSB7XG4gICAgICAgICAgc2Nyb2xsVGhyZXNob2xkUmVmLmN1cnJlbnQgPSAzOVxuICAgICAgICB9XG5cbiAgICAgICAgbGFzdFNjcm9sbFRvcFJlZi5jdXJyZW50ID0gc2Nyb2xsVG9wXG5cbiAgICAgICAgLy8gVHVybm8geWEgbGliZXJhZG8gcG9yIGVsIHVzdWFyaW86IHNlZ3VpbW9zIGRldm9sdmllbmRvIGVsIGFsdG9cbiAgICAgICAgLy8gcmVzZXJ2YWRvIG1pZW50cmFzIGJhamEsIHBhcmEgcXVlIGFsIGxsZWdhciBhbCDDumx0aW1vIG1lbnNhamUgbm9cbiAgICAgICAgLy8gcXVlZGUgaHVlY28gZGViYWpvLlxuICAgICAgICBpZiAoIWFuY2hvcmVkVHVybklkUmVmLmN1cnJlbnQpIGRyYWluVHVyblNwYWNlKClcblxuICAgICAgICB1cGRhdGVTY3JvbGxBZmZvcmRhbmNlcygpXG5cbiAgICAgICAgaWYgKGluaXRpYWxDaGF0SWQgJiYgc2Nyb2xsVG9wID4gMCkge1xuICAgICAgICAgIGlmIChzY3JvbGxQZXJzaXN0VGltZXJSZWYuY3VycmVudCAhPSBudWxsKSB7XG4gICAgICAgICAgICB3aW5kb3cuY2xlYXJUaW1lb3V0KHNjcm9sbFBlcnNpc3RUaW1lclJlZi5jdXJyZW50KVxuICAgICAgICAgIH1cbiAgICAgICAgICBzY3JvbGxQZXJzaXN0VGltZXJSZWYuY3VycmVudCA9IHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHBhdGNoTWFpYVBhbmVsU2Vzc2lvbihhdXRoVXNlci5pZCwge1xuICAgICAgICAgICAgICBzY3JvbGxUb3AsXG4gICAgICAgICAgICAgIHNjcm9sbFNlc3Npb25JZDogaW5pdGlhbENoYXRJZCxcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfSwgMTUwKVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGlzTmVhckJvdHRvbSAmJiBvblNjcm9sbFRvQm90dG9tKSB7XG4gICAgICAgICAgb25TY3JvbGxUb0JvdHRvbSgpXG4gICAgICAgIH1cblxuICAgICAgICBoYW5kbGVTY3JvbGwoY29udGFpbmVyKVxuICAgICAgfSlcbiAgICB9LFxuICAgIFthdXRoVXNlci5pZCwgZHJhaW5UdXJuU3BhY2UsIGhhbmRsZVNjcm9sbCwgaW5pdGlhbENoYXRJZCwgb25TY3JvbGxUb0JvdHRvbSwgdXBkYXRlU2Nyb2xsQWZmb3JkYW5jZXNdXG4gIClcblxuICAvLyByZWZzIHRvIHN0YWJpbGl6ZSBmdW5jdGlvbnMgYW5kIGF2b2lkIHVubmVjZXNzYXJ5IHJlLXJlbmRlcnNcbiAgY29uc3Qgc2VuZE1lc3NhZ2VSZWYgPSB1c2VSZWYoc2VuZE1lc3NhZ2UpXG4gIGNvbnN0IHN0b3BHZW5lcmF0aW9uUmVmID0gdXNlUmVmKHN0b3BHZW5lcmF0aW9uKVxuICBjb25zdCBvblNlbmRNZXNzYWdlUmVhZHlSZWYgPSB1c2VSZWYob25TZW5kTWVzc2FnZVJlYWR5KVxuICBjb25zdCBzZW5kTWVzc2FnZVByb3h5UmVmID0gdXNlUmVmKFxuICAgIChcbiAgICAgIG1lc3NhZ2U6IHN0cmluZyxcbiAgICAgIGF0dGFjaG1lbnRzPzogQXR0YWNobWVudEZpbGVbXSxcbiAgICAgIGZhcUlkPzogc3RyaW5nLFxuICAgICAgYWdlbnRTdWdnZXN0aW9uSWQ/OiBzdHJpbmcsXG4gICAgICBtZW50aW9ucz86IENvbnRleHRNZW50aW9uW10sXG4gICAgICBmdWFJZD86IHN0cmluZyxcbiAgICAgIHNjSWQ/OiBzdHJpbmdcbiAgICApID0+IHNlbmRNZXNzYWdlUmVmLmN1cnJlbnQobWVzc2FnZSwgYXR0YWNobWVudHMsIGZhcUlkLCBhZ2VudFN1Z2dlc3Rpb25JZCwgbWVudGlvbnMsIGZ1YUlkLCBzY0lkKVxuICApXG4gIGNvbnN0IHN0b3BHZW5lcmF0aW9uUHJveHlSZWYgPSB1c2VSZWYoKCkgPT4gc3RvcEdlbmVyYXRpb25SZWYuY3VycmVudCgpKVxuXG4gIC8vIHVwZGF0ZSByZWZzIHdoZW4gZnVuY3Rpb25zIGNoYW5nZVxuICBzZW5kTWVzc2FnZVJlZi5jdXJyZW50ID0gc2VuZE1lc3NhZ2VcbiAgc3RvcEdlbmVyYXRpb25SZWYuY3VycmVudCA9IHN0b3BHZW5lcmF0aW9uXG4gIG9uU2VuZE1lc3NhZ2VSZWFkeVJlZi5jdXJyZW50ID0gb25TZW5kTWVzc2FnZVJlYWR5XG5cbiAgLyoqXG4gICAqIGBoYW5kbGVTdWdnZXN0aW9uQ2xpY2tgIHNlIHBhc2EgYSBUT0RPUyBsb3MgTWVzc2FnZUl0ZW0sIGFzw60gcXVlIHN1IGlkZW50aWRhZFxuICAgKiBkZWNpZGUgc2kgZWwgYG1lbW9gIGRlIGxhIGxpc3RhIHNvc3RpZW5lLiBMZWVtb3MgcG9yIHJlZiBsbyBxdWUgY2FtYmlhIGVuIGNhZGFcbiAgICogdXBkYXRlIChgbWVzc2FnZXNgLCBgc2VuZE1lc3NhZ2VgLCBsYXMgc3VnZXJlbmNpYXMgeWEgZWxlZ2lkYXMpIHBhcmEgcXVlIGVsXG4gICAqIGNhbGxiYWNrIHNlYSBlc3RhYmxlOiBzaSBubywgYWwgdGVybWluYXIgZWwgc3RyZWFtIHNlIHJlcGludGEgZWwgY2hhdCBlbnRlcm9cbiAgICogeSBjYWRhIE1haWFTdHJlYW1kb3duIHZ1ZWx2ZSBhIHBhcnNlYXIgc3UgbWFya2Rvd24uXG4gICAqL1xuICBjb25zdCBtZXNzYWdlc0RhdGFSZWYgPSB1c2VSZWYobWVzc2FnZXMpXG4gIG1lc3NhZ2VzRGF0YVJlZi5jdXJyZW50ID0gbWVzc2FnZXNcbiAgY29uc3Qgc2VsZWN0ZWRTdWdnZXN0aW9uTWVzc2FnZUlkc1JlZiA9IHVzZVJlZihzZWxlY3RlZFN1Z2dlc3Rpb25NZXNzYWdlSWRzKVxuICBzZWxlY3RlZFN1Z2dlc3Rpb25NZXNzYWdlSWRzUmVmLmN1cnJlbnQgPSBzZWxlY3RlZFN1Z2dlc3Rpb25NZXNzYWdlSWRzXG5cbiAgY29uc3QgaGFuZGxlU3VnZ2VzdGlvbkNsaWNrID0gdXNlQ2FsbGJhY2soXG4gICAgKG1lc3NhZ2VJZDogc3RyaW5nLCBzdWdnZXN0aW9uOiBzdHJpbmcpID0+IHtcbiAgICAgIGlmICghc3VnZ2VzdGlvbj8udHJpbSgpKSByZXR1cm5cbiAgICAgIGlmIChzZWxlY3RlZFN1Z2dlc3Rpb25NZXNzYWdlSWRzUmVmLmN1cnJlbnRbbWVzc2FnZUlkXSkgcmV0dXJuXG4gICAgICBjb25zdCBjdXJyZW50TWVzc2FnZXMgPSBtZXNzYWdlc0RhdGFSZWYuY3VycmVudFxuICAgICAgY29uc3QgaXNNYXJrZXRwbGFjZUdsb2JhbEFnZW50ID0gaXNNYWlha2VyQWdlbnQoYWdlbnQpXG4gICAgICBldmVudChFVkVOVFMuYWlDaGF0U3VnZ2VzdGVkQW5zd2VyLCB7XG4gICAgICAgIGFnZW50X3R5cGU6IGlzTWFya2V0cGxhY2VHbG9iYWxBZ2VudCA/ICdtYXJrZXRwbGFjZScgOiBhZ2VudD8udHlwZSxcbiAgICAgIH0pXG4gICAgICBzZXRTZWxlY3RlZFN1Z2dlc3Rpb25NZXNzYWdlSWRzKHByZXYgPT4gKHsgLi4ucHJldiwgW21lc3NhZ2VJZF06IHRydWUgfSkpXG5cbiAgICAgIGNvbnN0IHRhcmdldE1lc3NhZ2UgPSBjdXJyZW50TWVzc2FnZXMuZmluZChtc2cgPT4gbXNnLmlkID09PSBtZXNzYWdlSWQpXG4gICAgICBjb25zdCBpc1JldHJ5U3VnZ2VzdGlvbiA9ICEhdGFyZ2V0TWVzc2FnZT8uaXNFcnJvciAmJiBzdWdnZXN0aW9uID09PSB0KCdjaGF0LnJldHJ5JylcbiAgICAgIGlmIChpc1JldHJ5U3VnZ2VzdGlvbikge1xuICAgICAgICBjb25zdCBsYXN0VXNlck1lc3NhZ2UgPSBjdXJyZW50TWVzc2FnZXNcbiAgICAgICAgICAuZmlsdGVyKG1zZyA9PiBtc2cucm9sZSA9PT0gQ2hhdEhpc3RvcnlSb2xlLlVTRVIgfHwgbXNnLnVzZXIuaWQgPT09IGF1dGhVc2VyLmlkLnRvU3RyaW5nKCkpXG4gICAgICAgICAgLmF0KC0xKVxuICAgICAgICBpZiAobGFzdFVzZXJNZXNzYWdlPy5tZXNzYWdlKSB7XG4gICAgICAgICAgY29uc3QgcmV0cnlBdHRhY2htZW50cyA9IEFycmF5LmlzQXJyYXkobGFzdFVzZXJNZXNzYWdlLmF0dGFjaG1lbnRzKVxuICAgICAgICAgICAgPyBsYXN0VXNlck1lc3NhZ2UuYXR0YWNobWVudHNcbiAgICAgICAgICAgIDogQXJyYXkuaXNBcnJheShsYXN0VXNlck1lc3NhZ2Uuc291cmNlcylcbiAgICAgICAgICAgICAgPyBsYXN0VXNlck1lc3NhZ2Uuc291cmNlc1xuICAgICAgICAgICAgICA6IFtdXG4gICAgICAgICAgc2VuZE1lc3NhZ2VSZWYuY3VycmVudChsYXN0VXNlck1lc3NhZ2UubWVzc2FnZSwgcmV0cnlBdHRhY2htZW50cylcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBzZW5kTWVzc2FnZVJlZi5jdXJyZW50KHN1Z2dlc3Rpb24pXG4gICAgfSxcbiAgICBbZXZlbnQsIGFnZW50LCB0LCBhdXRoVXNlci5pZF1cbiAgKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKG9uU2VuZE1lc3NhZ2VSZWFkeVJlZi5jdXJyZW50KSB7XG4gICAgICBvblNlbmRNZXNzYWdlUmVhZHlSZWYuY3VycmVudChcbiAgICAgICAgc2VuZE1lc3NhZ2VQcm94eVJlZi5jdXJyZW50LFxuICAgICAgICBzdG9wR2VuZXJhdGlvblByb3h5UmVmLmN1cnJlbnQsXG4gICAgICAgIHdhaXRpbmdSZXNwb25zZSxcbiAgICAgICAgaXNXcml0aW5nXG4gICAgICApXG4gICAgfVxuICB9LCBbd2FpdGluZ1Jlc3BvbnNlLCBpc1dyaXRpbmddKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaXNMb2FkaW5nTW9yZVJlZi5jdXJyZW50ID0gaXNMb2FkaW5nTW9yZU1lc3NhZ2VzXG4gIH0sIFtpc0xvYWRpbmdNb3JlTWVzc2FnZXNdKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFjaGF0SW5pdGlhbGl6ZWRSZWYuY3VycmVudCkge1xuICAgICAgY2hhdEluaXRpYWxpemVkUmVmLmN1cnJlbnQgPSB0cnVlXG4gICAgICBpbml0aWFsaXplQ2hhdCgpXG4gICAgfVxuICB9LCBbXSlcblxuICAvLyBNaWVudHJhcyBlbCBzdHJlYW0gY3JlY2U6IGVuY29nZXIgZWwgc3BhY2VyIGRlbCB0dXJubyBhbmNsYWRvIHlcbiAgLy8gYWN0dWFsaXphciBmbGVjaGEvZ3JhZGllbnRlcy4gRWwgc2Nyb2xsIG5vIHNlIG11ZXZlIHNvbG8uXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCF3YWl0aW5nUmVzcG9uc2UgJiYgIWlzV3JpdGluZykgcmV0dXJuIHVuZGVmaW5lZFxuICAgIGlmICghbWVzc2FnZXNSZWYuY3VycmVudCkgcmV0dXJuIHVuZGVmaW5lZFxuXG4gICAgbGV0IHJhZklkOiBudW1iZXIgfCBudWxsID0gbnVsbFxuXG4gICAgY29uc3QgdGljayA9ICgpID0+IHtcbiAgICAgIGNvbnN0IGVsID0gbWVzc2FnZXNSZWYuY3VycmVudFxuICAgICAgaWYgKCFlbCkge1xuICAgICAgICByYWZJZCA9IG51bGxcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgICBzeW5jVHVyblNwYWNlKClcbiAgICAgIHVwZGF0ZVNjcm9sbEFmZm9yZGFuY2VzKClcbiAgICAgIHJhZklkID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHRpY2spXG4gICAgfVxuXG4gICAgcmFmSWQgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUodGljaylcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgaWYgKHJhZklkICE9IG51bGwpIGNhbmNlbEFuaW1hdGlvbkZyYW1lKHJhZklkKVxuICAgIH1cbiAgfSwgW3dhaXRpbmdSZXNwb25zZSwgaXNXcml0aW5nLCBzeW5jVHVyblNwYWNlLCB1cGRhdGVTY3JvbGxBZmZvcmRhbmNlc10pXG5cbiAgY29uc3QgbGFzdFJlc2VydmVkUXVlc3Rpb25SZWYgPSB1c2VSZWY8c3RyaW5nIHwgbnVsbD4obnVsbClcblxuICAvLyBDYW1iaW8gZGUgY2hhdDogZWwgYW5jbGEgeSBlbCBzcGFjZXIgZGVsIHR1cm5vIGFudGVyaW9yIGRlamFuIGRlIGFwbGljYXIuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFsb2FkaW5nTWVzc2FnZXMpIHJldHVyblxuICAgIGxhc3RSZXNlcnZlZFF1ZXN0aW9uUmVmLmN1cnJlbnQgPSBudWxsXG4gICAgY2xlYXJUdXJuU3BhY2UoKVxuICB9LCBbbG9hZGluZ01lc3NhZ2VzLCBjbGVhclR1cm5TcGFjZV0pXG5cbiAgLy8gQWwgZW52aWFyIHVuIG1lbnNhamU6IGFuY2xhbW9zIGVsIHR1cm5vIHkgaGFjZW1vcyBlbCDDum5pY28gc2Nyb2xsIGRlbCBjaWNsby5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAobG9hZGluZ01lc3NhZ2VzIHx8IGlzTG9hZGluZ01vcmVNZXNzYWdlcykgcmV0dXJuXG5cbiAgICBjb25zdCBxdWVzdGlvbklkID0gZmluZExhc3RRdWVzdGlvbklkKG1lc3NhZ2VzKVxuICAgIGlmICghcXVlc3Rpb25JZCB8fCBxdWVzdGlvbklkID09PSBsYXN0UmVzZXJ2ZWRRdWVzdGlvblJlZi5jdXJyZW50KSByZXR1cm5cblxuICAgIGxhc3RSZXNlcnZlZFF1ZXN0aW9uUmVmLmN1cnJlbnQgPSBxdWVzdGlvbklkXG4gICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHJlc2VydmVUdXJuU3BhY2UocXVlc3Rpb25JZCkpXG4gIH0sIFttZXNzYWdlcywgbG9hZGluZ01lc3NhZ2VzLCBpc0xvYWRpbmdNb3JlTWVzc2FnZXMsIHJlc2VydmVUdXJuU3BhY2VdKVxuXG4gIC8vIFNjcm9sbCBjdWFuZG8gY2FtYmlhbiBsb3MgbWVuc2FqZXM6IGRpc3Rpbmd1ZSBcIm51ZXZvIG1lbnNhamVcIiAoYWdyZWdhZG8pXG4gIC8vIGRlIFwicmVlbXBsYXpvXCIgKG1pc21vIGlkL2xlbmd0aCwgZWouIGZlZWRiYWNrIG8gYXBwcm92YWxTdGF0dXMpLiBFblxuICAvLyByZWVtcGxhem9zIHNvbG8gc2UgcmVjYWxjdWxhIGxhIHZpc2liaWxpZGFkIGRlbCBib3TDs24gc2luIGZvcnphciBzY3JvbGwuXG4gIGNvbnN0IGxhc3RNZXNzYWdlSWRSZWYgPSB1c2VSZWY8c3RyaW5nIHwgbnVsbD4obnVsbClcbiAgY29uc3QgbGFzdE1lc3NhZ2VzTGVuZ3RoUmVmID0gdXNlUmVmPG51bWJlcj4oMClcblxuICAvLyBBbCBjYW1iaWFyIGRlIHNlc2nDs24sIHJlc2V0ZWFyIGVzdGFkbyBkZSBzY3JvbGwgbWFudWFsIHBhcmEgbm8gaGVyZWRhciBlbCBjaGF0IGFudGVyaW9yLlxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIHdhc0xvYWRpbmdNZXNzYWdlc1JlZi5jdXJyZW50ID0gZmFsc2VcbiAgICBsYXN0U2Nyb2xsZWRTZXNzaW9uUmVmLmN1cnJlbnQgPSBudWxsXG4gICAgc2Nyb2xsVGhyZXNob2xkUmVmLmN1cnJlbnQgPSAzOVxuICAgIGxhc3RTY3JvbGxUb3BSZWYuY3VycmVudCA9IDBcbiAgICBsYXN0TWVzc2FnZUlkUmVmLmN1cnJlbnQgPSBudWxsXG4gICAgbGFzdE1lc3NhZ2VzTGVuZ3RoUmVmLmN1cnJlbnQgPSAwXG4gIH0sIFtpbml0aWFsQ2hhdElkXSlcblxuICAvLyBSZXN0YXVyYWNpw7NuIGRlc2RlIGNhY2hlIChzaW4gTG9hZGVyKTogYmFqYXIgYWwgZm9uZG8gYWwgcmVhYnJpciBzZXNpw7NuIHZpc2l0YWRhLlxuICB1c2VMYXlvdXRFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChsb2FkaW5nTWVzc2FnZXMgfHwgIWluaXRpYWxDaGF0SWQgfHwgbWVzc2FnZXMubGVuZ3RoID09PSAwKSByZXR1cm5cbiAgICBpZiAobGFzdFNjcm9sbGVkU2Vzc2lvblJlZi5jdXJyZW50ID09PSBpbml0aWFsQ2hhdElkKSByZXR1cm5cbiAgICBsYXN0U2Nyb2xsZWRTZXNzaW9uUmVmLmN1cnJlbnQgPSBpbml0aWFsQ2hhdElkXG5cbiAgICBzY3JvbGxUaHJlc2hvbGRSZWYuY3VycmVudCA9IDM5XG4gICAgbGFzdE1lc3NhZ2VJZFJlZi5jdXJyZW50ID0gbWVzc2FnZXNbbWVzc2FnZXMubGVuZ3RoIC0gMV0/LmlkID8/IG51bGxcbiAgICBsYXN0TWVzc2FnZXNMZW5ndGhSZWYuY3VycmVudCA9IG1lc3NhZ2VzLmxlbmd0aFxuXG4gICAgc2Nyb2xsVG9Cb3R0b21SYWYoKVxuICAgIHNjcm9sbFRvQm90dG9tUmFmKHsgZGVsYXlNczogMTAwIH0pXG4gIH0sIFtpbml0aWFsQ2hhdElkLCBsb2FkaW5nTWVzc2FnZXMsIG1lc3NhZ2VzLmxlbmd0aCwgbWVzc2FnZXMsIHNjcm9sbFRvQm90dG9tUmFmXSlcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghbWVzc2FnZXNSZWYuY3VycmVudCB8fCBsb2FkaW5nTWVzc2FnZXMgfHwgaXNMb2FkaW5nTW9yZU1lc3NhZ2VzIHx8IGlzTG9hZGluZ01vcmVSZWYuY3VycmVudCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY29uc3QgbGFzdE1lc3NhZ2UgPSBtZXNzYWdlc1ttZXNzYWdlcy5sZW5ndGggLSAxXVxuICAgIGNvbnN0IGxhc3RJZCA9IGxhc3RNZXNzYWdlPy5pZCA/PyBudWxsXG4gICAgY29uc3QgcHJldklkID0gbGFzdE1lc3NhZ2VJZFJlZi5jdXJyZW50XG4gICAgY29uc3QgcHJldkxlbiA9IGxhc3RNZXNzYWdlc0xlbmd0aFJlZi5jdXJyZW50XG4gICAgbGFzdE1lc3NhZ2VJZFJlZi5jdXJyZW50ID0gbGFzdElkXG4gICAgbGFzdE1lc3NhZ2VzTGVuZ3RoUmVmLmN1cnJlbnQgPSBtZXNzYWdlcy5sZW5ndGhcblxuICAgIGNvbnN0IGlzTmV3TWVzc2FnZSA9IGxhc3RJZCAhPT0gcHJldklkIHx8IG1lc3NhZ2VzLmxlbmd0aCAhPT0gcHJldkxlblxuICAgIGlmICghaXNOZXdNZXNzYWdlKSB7XG4gICAgICB1cGRhdGVTY3JvbGxBZmZvcmRhbmNlcygpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICAvLyBUdXJubyBhbmNsYWRvOiBuaSBlbCByZWVtcGxhem8gZGVsIHBsYWNlaG9sZGVyIHBvciBlbCBtZW5zYWplIGZpbmFsLCBuaSBsYVxuICAgIC8vIGFwYXJpY2nDs24gZGVsIEFwcHJvdmFsQm94IG11ZXZlbiBlbCBzY3JvbGwuIFNvbG8gc2UgYWp1c3RhIGVsIHNwYWNlci5cbiAgICBpZiAoYW5jaG9yZWRUdXJuSWRSZWYuY3VycmVudCkge1xuICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHN5bmNUdXJuU3BhY2UpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICAvLyBNaWVudHJhcyBlbCBhZ2VudGUgcmVzcG9uZGUgbm8gZW1wdWphbW9zIGVsIHNjcm9sbDogZWwgdXN1YXJpbyBzZSBxdWVkYVxuICAgIC8vIGRvbmRlIGVzdMOhIHkgdXNhIGVsIGJvdMOzbiBzaSBxdWllcmUgaXIgYWwgZm9uZG8uXG4gICAgaWYgKHdhaXRpbmdSZXNwb25zZSB8fCBpc1dyaXRpbmcpIHtcbiAgICAgIHVwZGF0ZVNjcm9sbEFmZm9yZGFuY2VzKClcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IGNvbnRhaW5lciA9IG1lc3NhZ2VzUmVmLmN1cnJlbnRcbiAgICBjb25zdCBpc0F0Qm90dG9tID0gY29udGFpbmVyLnNjcm9sbEhlaWdodCAtIGNvbnRhaW5lci5zY3JvbGxUb3AgPD0gY29udGFpbmVyLmNsaWVudEhlaWdodCArIDEwMFxuICAgIGNvbnN0IGhhc0luaXRpYWxNZXNzYWdlID0gbWVzc2FnZXMuc29tZShtc2cgPT4gbXNnLmlkID09PSAndXNlci1pbml0aWFsLW1lc3NhZ2UnKVxuICAgIGNvbnN0IGlzQXBwcm92YWwgPSAhIWxhc3RNZXNzYWdlICYmIChsYXN0TWVzc2FnZS5pZC5zdGFydHNXaXRoKCdhcHByb3ZhbC0nKSB8fCAhIWxhc3RNZXNzYWdlLmFwcHJvdmFsKVxuICAgIGNvbnN0IGlzQW5zd2VyT3JRdWVzdGlvbiA9XG4gICAgICAhIWxhc3RNZXNzYWdlICYmIChsYXN0TWVzc2FnZS5pZC5zdGFydHNXaXRoKCdhbnN3ZXItJykgfHwgbGFzdE1lc3NhZ2UuaWQuc3RhcnRzV2l0aCgncXVlc3Rpb24tJykpXG5cbiAgICAvLyBOdWV2b3MgYW5zd2VyL3F1ZXN0aW9uOiBzY3JvbGwgc2kgZWwgdXN1YXJpbyB5YSBlc3RhYmEgYWwgZm9uZG8uXG4gICAgaWYgKGlzQW5zd2VyT3JRdWVzdGlvbiAmJiBpc0F0Qm90dG9tKSB7XG4gICAgICBzY3JvbGxUb0JvdHRvbVJhZigpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICAvLyBDYXNvIGJvcmRlOiBjYW1iaW9zIGRlIG1lbnNhamVzIHNpbiBzZXIgbnVldm8gYW5zd2VyL3VzZXIvYXBwcm92YWxcbiAgICAvLyBwZXJvIHPDrSB1biBtZW5zYWplIG51ZXZvIChubyBlbCBcInVzZXItaW5pdGlhbC1tZXNzYWdlXCIpLiBTY3JvbGxlYS5cbiAgICBpZiAoIWlzQW5zd2VyT3JRdWVzdGlvbiAmJiAhaXNBcHByb3ZhbCAmJiAhaGFzSW5pdGlhbE1lc3NhZ2UgJiYgbWVzc2FnZXMubGVuZ3RoID4gcHJldkxlbikge1xuICAgICAgc2Nyb2xsVG9Cb3R0b21SYWYoKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgdXBkYXRlU2Nyb2xsQWZmb3JkYW5jZXMoKVxuICB9LCBbXG4gICAgbWVzc2FnZXMsXG4gICAgbG9hZGluZ01lc3NhZ2VzLFxuICAgIGlzTG9hZGluZ01vcmVNZXNzYWdlcyxcbiAgICB3YWl0aW5nUmVzcG9uc2UsXG4gICAgaXNXcml0aW5nLFxuICAgIHNjcm9sbFRvQm90dG9tUmFmLFxuICAgIHN5bmNUdXJuU3BhY2UsXG4gICAgdXBkYXRlU2Nyb2xsQWZmb3JkYW5jZXMsXG4gIF0pXG5cbiAgLy8gQWwgYWJyaXIvY2FyZ2FyIHVuYSBjb252ZXJzYWNpw7NuIGVsIGNvbnRlbmVkb3Igc2UgcmVtb250YSAoTG9hZGVyIOKGkiBsaXN0YSkgY29uXG4gIC8vIHNjcm9sbFRvcD0wLiBGb3J6YW1vcyBpciBhbCBmb25kbyBhbCB0ZXJtaW5hciBsb2FkTWVzc2FnZXMsIHNpbiBhZmVjdGFyIHBhZ2luYWNpw7NuIGhhY2lhIGFycmliYS5cbiAgdXNlTGF5b3V0RWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBqdXN0RmluaXNoZWRMb2FkaW5nID0gd2FzTG9hZGluZ01lc3NhZ2VzUmVmLmN1cnJlbnQgJiYgIWxvYWRpbmdNZXNzYWdlc1xuICAgIHdhc0xvYWRpbmdNZXNzYWdlc1JlZi5jdXJyZW50ID0gbG9hZGluZ01lc3NhZ2VzXG5cbiAgICBpZiAoIWp1c3RGaW5pc2hlZExvYWRpbmcgfHwgbWVzc2FnZXMubGVuZ3RoID09PSAwKSByZXR1cm5cblxuICAgIHNjcm9sbFRocmVzaG9sZFJlZi5jdXJyZW50ID0gMzlcbiAgICBsYXN0TWVzc2FnZUlkUmVmLmN1cnJlbnQgPSBtZXNzYWdlc1ttZXNzYWdlcy5sZW5ndGggLSAxXT8uaWQgPz8gbnVsbFxuICAgIGxhc3RNZXNzYWdlc0xlbmd0aFJlZi5jdXJyZW50ID0gbWVzc2FnZXMubGVuZ3RoXG5cbiAgICBzY3JvbGxUb0JvdHRvbVJhZigpXG4gICAgc2Nyb2xsVG9Cb3R0b21SYWYoeyBkZWxheU1zOiAxMDAgfSlcbiAgfSwgW2xvYWRpbmdNZXNzYWdlcywgbWVzc2FnZXMubGVuZ3RoLCBzY3JvbGxUb0JvdHRvbVJhZl0pXG5cbiAgLy8gRXN0YWRvIGluaWNpYWwgZGVsIGJvdMOzbiBzY3JvbGwtdG8tYm90dG9tIGFsIHRlcm1pbmFyIGxvYWRpbmdNZXNzYWdlcy5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoIWxvYWRpbmdNZXNzYWdlcykge1xuICAgICAgdXBkYXRlU2Nyb2xsQWZmb3JkYW5jZXMoKVxuICAgIH1cbiAgfSwgW2xvYWRpbmdNZXNzYWdlcywgbWVzc2FnZXMubGVuZ3RoLCB1cGRhdGVTY3JvbGxBZmZvcmRhbmNlc10pXG5cbiAgLy8gT2J0ZW5lciBlbCDDumx0aW1vIG1lbnNhamUgZGVsIHVzdWFyaW8gcGFyYSB2ZXJpZmljYXIgc2kgdGllbmUgYXR0YWNobWVudHNcbiAgY29uc3QgbGFzdFVzZXJNZXNzYWdlID0gbWVzc2FnZXNcbiAgICAuZmlsdGVyKG1zZyA9PiBtc2cucm9sZSA9PT0gQ2hhdEhpc3RvcnlSb2xlLlVTRVIgfHwgbXNnLnVzZXIuaWQgPT09IGF1dGhVc2VyLmlkLnRvU3RyaW5nKCkpXG4gICAgLmF0KC0xKVxuXG4gIGNvbnN0IGF0dGFjaG1lbnRzQ291bnQgPVxuICAgIChBcnJheS5pc0FycmF5KGxhc3RVc2VyTWVzc2FnZT8uYXR0YWNobWVudHMpID8gbGFzdFVzZXJNZXNzYWdlLmF0dGFjaG1lbnRzLmxlbmd0aCA6IDApIHx8XG4gICAgKEFycmF5LmlzQXJyYXkobGFzdFVzZXJNZXNzYWdlPy5zb3VyY2VzKSA/IGxhc3RVc2VyTWVzc2FnZS5zb3VyY2VzLmxlbmd0aCA6IDApXG5cbiAgY29uc3Qgc3RyZWFtTG9hZGluZ0Rpc3BsYXkgPSByZXNvbHZlU3RyZWFtTG9hZGluZ0Rpc3BsYXkoe1xuICAgIHN0cmVhbUFjdGl2aXR5LFxuICAgIGxvYWRpbmdNZXNzYWdlLFxuICAgIGFjdGl2ZUxvYWRpbmdzOiBhY3RpdmVMb2FkaW5ncyB8fCB7fSxcbiAgICB3YWl0aW5nUmVzcG9uc2UsXG4gICAgaXNXZWJTZWFyY2hBY3RpdmUsXG4gICAgaXNEZWVwU2VhcmNoQWN0aXZlLFxuICAgIGhhc0F0dGFjaG1lbnRzOiBCb29sZWFuKGF0dGFjaG1lbnRzQ291bnQpLFxuICAgIGF0dGFjaG1lbnRzQ291bnQsXG4gICAgdCxcbiAgfSlcblxuICBjb25zdCBpc1Njcm9sbE9uUGFyZW50ID0gISFleHBhbmRlZFxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFpbml0aWFsQ2hhdElkKSB7XG4gICAgICBwZW5kaW5nU2Nyb2xsUmVzdG9yZVJlZi5jdXJyZW50ID0gbnVsbFxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGNvbnN0IHNlc3Npb24gPSByZWFkTWFpYVBhbmVsU2Vzc2lvbihhdXRoVXNlci5pZClcbiAgICBpZiAoc2Vzc2lvbj8uc2Nyb2xsU2Vzc2lvbklkID09PSBpbml0aWFsQ2hhdElkICYmIHR5cGVvZiBzZXNzaW9uLnNjcm9sbFRvcCA9PT0gJ251bWJlcicgJiYgc2Vzc2lvbi5zY3JvbGxUb3AgPiAwKSB7XG4gICAgICBwZW5kaW5nU2Nyb2xsUmVzdG9yZVJlZi5jdXJyZW50ID0gc2Vzc2lvbi5zY3JvbGxUb3BcbiAgICB9XG4gIH0sIFthdXRoVXNlci5pZCwgaW5pdGlhbENoYXRJZF0pXG5cbiAgdXNlTGF5b3V0RWZmZWN0KCgpID0+IHtcbiAgICBpZiAobG9hZGluZ01lc3NhZ2VzIHx8IHBlbmRpbmdTY3JvbGxSZXN0b3JlUmVmLmN1cnJlbnQgPT0gbnVsbCB8fCAhbWVzc2FnZXNSZWYuY3VycmVudCkgcmV0dXJuXG4gICAgbWVzc2FnZXNSZWYuY3VycmVudC5zY3JvbGxUb3AgPSBwZW5kaW5nU2Nyb2xsUmVzdG9yZVJlZi5jdXJyZW50XG4gICAgbGFzdFNjcm9sbFRvcFJlZi5jdXJyZW50ID0gcGVuZGluZ1Njcm9sbFJlc3RvcmVSZWYuY3VycmVudFxuICAgIHBlbmRpbmdTY3JvbGxSZXN0b3JlUmVmLmN1cnJlbnQgPSBudWxsXG4gIH0sIFtsb2FkaW5nTWVzc2FnZXMsIG1lc3NhZ2VzLmxlbmd0aF0pXG5cbiAgLy8gQWwgZXhwYW5kaXIvY29udHJhZXIgZWwgbW9kYWwgZWwgcmVmIHBhc2EgYSBvdHJvIGNvbnRlbmVkb3IgKHNjcm9sbFRvcCBzZSByZXNldGVhIGEgMCkuXG4gIC8vIFJlc3RhdXJhciBsYSBwb3NpY2nDs24gZGUgc2Nyb2xsIGFudGVzIGRlbCBwYWludCBwYXJhIGV2aXRhciBxdWUgbGEgY29udmVyc2FjacOzbiBzYWx0ZSBhcnJpYmEuXG4gIGNvbnN0IGV4cGFuZGVkUmVmID0gdXNlUmVmKGV4cGFuZGVkKVxuICB1c2VMYXlvdXRFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChleHBhbmRlZFJlZi5jdXJyZW50ICE9PSBleHBhbmRlZCAmJiBtZXNzYWdlc1JlZi5jdXJyZW50KSB7XG4gICAgICBjb25zdCBzYXZlZFNjcm9sbFRvcCA9IGxhc3RTY3JvbGxUb3BSZWYuY3VycmVudFxuICAgICAgbWVzc2FnZXNSZWYuY3VycmVudC5zY3JvbGxUb3AgPSBzYXZlZFNjcm9sbFRvcFxuICAgICAgZXhwYW5kZWRSZWYuY3VycmVudCA9IGV4cGFuZGVkXG4gICAgfSBlbHNlIHtcbiAgICAgIGV4cGFuZGVkUmVmLmN1cnJlbnQgPSBleHBhbmRlZFxuICAgIH1cbiAgfSwgW2V4cGFuZGVkXSlcblxuICBpZiAobG9hZGluZ01lc3NhZ2VzKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxGYWRlIGZpbGw+XG4gICAgICAgIDxMb2FkZXIgLz5cbiAgICAgIDwvRmFkZT5cbiAgICApXG4gIH1cblxuICBjb25zdCBsYXN0TWVzc2FnZSA9IG1lc3NhZ2VzW21lc3NhZ2VzLmxlbmd0aCAtIDFdXG4gIGNvbnN0IGhhc01lc3NhZ2VMZXZlbEluZGljYXRvciA9XG4gICAgISFsYXN0TWVzc2FnZSAmJiBpc1N0cmVhbWluZ1BsYWNlaG9sZGVyTWVzc2FnZUlkKGxhc3RNZXNzYWdlLmlkKSAmJiAod2FpdGluZ1Jlc3BvbnNlIHx8IGlzV3JpdGluZylcblxuICBjb25zdCBtZXNzYWdlc0NvbnRlbnQgPSAoXG4gICAgPD5cbiAgICAgIHtpc0xvYWRpbmdNb3JlTWVzc2FnZXMgJiYgPExvYWRpbmdUZXh0IHRleHQ9e3QoJ2NoYXQubG9hZGluZ01vcmUnKX0gLz59XG4gICAgICA8PlxuICAgICAgICB7bWVzc2FnZXMubWFwKChtZXNzYWdlLCBpbmRleCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGlzQXNzaXN0YW50TWVzc2FnZSA9IG1lc3NhZ2Uucm9sZSA9PT0gQ2hhdEhpc3RvcnlSb2xlLkFTU0lTVEFOVCB8fCBtZXNzYWdlLnVzZXIuaWQgPT09ICdhc3Npc3RhbnQnXG4gICAgICAgICAgY29uc3QgaXNMYXN0TWVzc2FnZSA9IGluZGV4ID09PSBtZXNzYWdlcy5sZW5ndGggLSAxXG4gICAgICAgICAgY29uc3QgaXNTdHJlYW1pbmdQbGFjZWhvbGRlciA9XG4gICAgICAgICAgICBpc0Fzc2lzdGFudE1lc3NhZ2UgJiYgaXNMYXN0TWVzc2FnZSAmJiBpc1N0cmVhbWluZ1BsYWNlaG9sZGVyTWVzc2FnZUlkKG1lc3NhZ2UuaWQpXG4gICAgICAgICAgY29uc3QgaXNTdHJlYW1pbmcgPSBpc1N0cmVhbWluZ1BsYWNlaG9sZGVyICYmICh3YWl0aW5nUmVzcG9uc2UgfHwgaXNXcml0aW5nKVxuXG4gICAgICAgICAgLy8gTm8gZmlsdHJhciBlbCBwbGFjZWhvbGRlciBkZWwgbWVuc2FqZSBlbiBzdHJlYW1pbmc6IHN1IHRleHRvIHZpdmVcbiAgICAgICAgICAvLyBlbiBlbCBzdHJlYW1pbmdTdG9yZSB5IGBtZXNzYWdlLm1lc3NhZ2VgIGVzICcnIGhhc3RhIGVsIGNvbXBsZXRlLlxuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICFpc1N0cmVhbWluZ1BsYWNlaG9sZGVyICYmXG4gICAgICAgICAgICAhaXNTdHJlYW1pbmcgJiZcbiAgICAgICAgICAgICEobWVzc2FnZS5hdHRhY2htZW50cz8ubGVuZ3RoIHx8IG1lc3NhZ2Uuc291cmNlcz8ubGVuZ3RoKSAmJlxuICAgICAgICAgICAgIW1lc3NhZ2UubWVzc2FnZSAmJlxuICAgICAgICAgICAgIW1lc3NhZ2UucHJvamVjdD8ubmFtZSAmJlxuICAgICAgICAgICAgIW1lc3NhZ2UuYXBwcm92YWxcbiAgICAgICAgICApXG4gICAgICAgICAgICByZXR1cm4gbnVsbFxuXG4gICAgICAgICAgY29uc3QgbWVzc2FnZUZlZWRiYWNrID1cbiAgICAgICAgICAgIG1lc3NhZ2U/Lndhc0hlbHBmdWwgPT09IHVuZGVmaW5lZCB8fCBtZXNzYWdlLndhc0hlbHBmdWwgPT09IG51bGxcbiAgICAgICAgICAgICAgPyBudWxsXG4gICAgICAgICAgICAgIDogbWVzc2FnZS53YXNIZWxwZnVsXG4gICAgICAgICAgICAgICAgPyBGZWVkYmFjay5USFVNQlNfVVBcbiAgICAgICAgICAgICAgICA6IEZlZWRiYWNrLlRIVU1CU19ET1dOXG5cbiAgICAgICAgICAvLyBLZXkgZXN0YWJsZTogc29sbyBtZXNzYWdlLmlkIHBhcmEgZXZpdGFyIHJlbW91bnQgZHVyYW50ZSBzdHJlYW1pbmcgKG1lc3NhZ2UuZGF0ZSBwdWVkZSBjYW1iaWFyKVxuICAgICAgICAgIGNvbnN0IG1lc3NhZ2VLZXkgPSBtZXNzYWdlLmlkID8/IGBtc2ctJHtpbmRleH1gXG5cbiAgICAgICAgICBjb25zdCB0dXJuSWQgPSByZXNvbHZlUmV0cnlUdXJuSWQobWVzc2FnZSlcbiAgICAgICAgICBjb25zdCB1c2VyTWVzc2FnZUZvclJldHJ5ID0gZmluZFVzZXJNZXNzYWdlRm9yUmV0cnkobWVzc2FnZXMsIG1lc3NhZ2UpXG4gICAgICAgICAgY29uc3QgY2FuUmV0cnkgPVxuICAgICAgICAgICAgISF1c2VyTWVzc2FnZUZvclJldHJ5ICYmXG4gICAgICAgICAgICAhaXNTdHJlYW1pbmcgJiZcbiAgICAgICAgICAgICFtZXNzYWdlLmlzRXJyb3IgJiZcbiAgICAgICAgICAgICFtZXNzYWdlLmFwcHJvdmFsICYmXG4gICAgICAgICAgICAobWVzc2FnZS5pc0Zyb250ZW5kQ2FuY2VsbGVkIHx8ICghbWVzc2FnZS5pc19jYW5jZWxsZWQgJiYgISF0dXJuSWQpKVxuXG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxNZXNzYWdlSXRlbVxuICAgICAgICAgICAgICB7Li4ubWVzc2FnZX1cbiAgICAgICAgICAgICAga2V5PXttZXNzYWdlS2V5fVxuICAgICAgICAgICAgICBhdXRoVXNlcj17YXV0aFVzZXJ9XG4gICAgICAgICAgICAgIGhhbmRsZVNlbGVjdE9wdGlvbj17aGFuZGxlU2VsZWN0T3B0aW9ufVxuICAgICAgICAgICAgICBoYW5kbGVGZWVkYmFjaz17aGFuZGxlRmVlZGJhY2t9XG4gICAgICAgICAgICAgIGhhbmRsZUFwcHJvdmFsRGVjaXNpb249e2hhbmRsZUFwcHJvdmFsRGVjaXNpb259XG4gICAgICAgICAgICAgIGhhbmRsZVN1Z2dlc3Rpb25DbGljaz17aGFuZGxlU3VnZ2VzdGlvbkNsaWNrfVxuICAgICAgICAgICAgICBoYW5kbGVSZXRyeT17Y2FuUmV0cnkgPyAoKSA9PiByZXRyeU1lc3NhZ2UobWVzc2FnZSkgOiB1bmRlZmluZWR9XG4gICAgICAgICAgICAgIGhhc1NlbGVjdGVkU3VnZ2VzdGlvbj17ISFzZWxlY3RlZFN1Z2dlc3Rpb25NZXNzYWdlSWRzW21lc3NhZ2UuaWRdfVxuICAgICAgICAgICAgICBkaXNhYmxlRmVlZGJhY2s9e21lc3NhZ2VGZWVkYmFja31cbiAgICAgICAgICAgICAgaXNTdHJlYW1pbmc9e2lzU3RyZWFtaW5nfVxuICAgICAgICAgICAgICBpc0xhc3RNZXNzYWdlPXtpc0xhc3RNZXNzYWdlfVxuICAgICAgICAgICAgICBleHBhbmRlZD17ZXhwYW5kZWR9XG4gICAgICAgICAgICAgIHN0cmVhbUFjdGl2aXR5PXtpc1N0cmVhbWluZyA/IHN0cmVhbUxvYWRpbmdEaXNwbGF5IDogbnVsbH1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgKVxuICAgICAgICB9KX1cbiAgICAgIDwvPlxuICAgICAgeyFoYXNNZXNzYWdlTGV2ZWxJbmRpY2F0b3IgJiYgc3RyZWFtTG9hZGluZ0Rpc3BsYXkgJiYgKFxuICAgICAgICA8U0NMb2FkaW5nTWVzc2FnZXNDb2x1bW4+XG4gICAgICAgICAgPEFnZW50QWN0aXZpdHlJbmRpY2F0b3IgYWN0aXZpdHk9e3N0cmVhbUxvYWRpbmdEaXNwbGF5fSAvPlxuICAgICAgICA8L1NDTG9hZGluZ01lc3NhZ2VzQ29sdW1uPlxuICAgICAgKX1cbiAgICAgIHsvKiBFc3BhY2lvIHF1ZSBsZSBwZXJtaXRlIGEgbGEgcHJlZ3VudGEgc3ViaXIgYWwgdG9wZS4gQWx0dXJhIG1hbmVqYWRhXG4gICAgICAgICAgaW1wZXJhdGl2YW1lbnRlIGRlc2RlIGBzZXRTcGFjZXJIZWlnaHRgOyBhcnJhbmNhIGVuIDAuICovfVxuICAgICAgPFNDVHVyblNwYWNlciByZWY9e3NwYWNlckVsUmVmfSBhcmlhLWhpZGRlbj1cInRydWVcIiAvPlxuICAgIDwvPlxuICApXG5cbiAgcmV0dXJuIChcbiAgICAvLyBTaSBlbCB1c3VhcmlvIG11ZXZlIGVsIHNjcm9sbCBhYm9ydGFtb3MgbGEgYW5pbWFjacOzbiB5IHNvbHRhbW9zIGVsIHR1cm5vOlxuICAgIC8vIG5vIGxlIHBlbGVhbW9zIGVsIGNvbnRyb2wgZGVsIGNvbnRlbmVkb3IuXG4gICAgPFNDTWVzc2FnZXNPdXRlclxuICAgICAgJHNjcm9sbE9uUGFyZW50PXtpc1Njcm9sbE9uUGFyZW50fVxuICAgICAgb25XaGVlbD17aGFuZGxlVXNlclNjcm9sbEludGVudH1cbiAgICAgIG9uVG91Y2hTdGFydD17aGFuZGxlVXNlclNjcm9sbEludGVudH1cbiAgICA+XG4gICAgICA8U0NNZXNzYWdlc0dyYWRpZW50VG9wICRzaG93PXtzaG93VG9wR3JhZGllbnR9IGFyaWEtaGlkZGVuPVwidHJ1ZVwiIC8+XG4gICAgICB7aXNTY3JvbGxPblBhcmVudCA/IChcbiAgICAgICAgPFNDTWVzc2FnZXNTY3JvbGwgcmVmPXttZXNzYWdlc1JlZn0gb25TY3JvbGw9e2hhbmRsZVNjcm9sbFRvQm90dG9tfT5cbiAgICAgICAgICA8U0NNZXNzYWdlc0lubmVyICRzY3JvbGxPblBhcmVudD17aXNTY3JvbGxPblBhcmVudH0gJHNraXBFbnRlcj17c2tpcEVudGVyQW5pbWF0aW9ufT5cbiAgICAgICAgICAgIHttZXNzYWdlc0NvbnRlbnR9XG4gICAgICAgICAgPC9TQ01lc3NhZ2VzSW5uZXI+XG4gICAgICAgIDwvU0NNZXNzYWdlc1Njcm9sbD5cbiAgICAgICkgOiAoXG4gICAgICAgIDxTQ01lc3NhZ2VzSW5uZXJcbiAgICAgICAgICByZWY9e21lc3NhZ2VzUmVmfVxuICAgICAgICAgIG9uU2Nyb2xsPXtoYW5kbGVTY3JvbGxUb0JvdHRvbX1cbiAgICAgICAgICAkc2Nyb2xsT25QYXJlbnQ9e2ZhbHNlfVxuICAgICAgICAgICRza2lwRW50ZXI9e3NraXBFbnRlckFuaW1hdGlvbn1cbiAgICAgICAgPlxuICAgICAgICAgIHttZXNzYWdlc0NvbnRlbnR9XG4gICAgICAgIDwvU0NNZXNzYWdlc0lubmVyPlxuICAgICAgKX1cblxuICAgICAgPFNDTWVzc2FnZXNHcmFkaWVudEJvdHRvbSAkc2hvdz17c2hvd0JvdHRvbUdyYWRpZW50fSBhcmlhLWhpZGRlbj1cInRydWVcIiAvPlxuXG4gICAgICB7c2hvd1Njcm9sbFRvQm90dG9tICYmIChcbiAgICAgICAgPFNjcm9sbFRvQm90dG9tQnV0dG9uIHR5cGU9XCJidXR0b25cIiBvbkNsaWNrPXtoYW5kbGVDbGlja1Njcm9sbFRvQm90dG9tfT5cbiAgICAgICAgICA8U0NTY3JvbGxJY29uU3dhcCAkdmlzaWJsZT17aXNXcml0aW5nfSBhcmlhLWhpZGRlbj5cbiAgICAgICAgICAgIDxTQ1dyaXRpbmdEb3RzPlxuICAgICAgICAgICAgICA8c3BhbiAvPlxuICAgICAgICAgICAgICA8c3BhbiAvPlxuICAgICAgICAgICAgICA8c3BhbiAvPlxuICAgICAgICAgICAgPC9TQ1dyaXRpbmdEb3RzPlxuICAgICAgICAgIDwvU0NTY3JvbGxJY29uU3dhcD5cbiAgICAgICAgICA8U0NTY3JvbGxJY29uU3dhcCAkdmlzaWJsZT17IWlzV3JpdGluZ30gYXJpYS1oaWRkZW4+XG4gICAgICAgICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD17MTJ9IGhlaWdodD17MTJ9IGZpbGw9XCJub25lXCI+XG4gICAgICAgICAgICAgIDxwYXRoXG4gICAgICAgICAgICAgICAgc3Ryb2tlPVwiIzIwMjAyMFwiXG4gICAgICAgICAgICAgICAgc3Ryb2tlTGluZWNhcD1cInJvdW5kXCJcbiAgICAgICAgICAgICAgICBzdHJva2VMaW5lam9pbj1cInJvdW5kXCJcbiAgICAgICAgICAgICAgICBzdHJva2VXaWR0aD17MS41fVxuICAgICAgICAgICAgICAgIGQ9XCJNNiAuNzV2MTAuNU0uNzUgNiA2IDExLjI1IDExLjI1IDZcIlxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgPC9TQ1Njcm9sbEljb25Td2FwPlxuICAgICAgICA8L1Njcm9sbFRvQm90dG9tQnV0dG9uPlxuICAgICAgKX1cbiAgICA8L1NDTWVzc2FnZXNPdXRlcj5cbiAgKVxufVxuXG5leHBvcnQgY29uc3QgQ2hhdEFJTWVzc2FnZXMgPSBSZWFjdC5tZW1vKENoYXRBSU1lc3NhZ2VzSW5uZXIpXG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPQSxLQUFLLElBQVFDLElBQUksRUFBYUMsV0FBVyxFQUFFQyxTQUFTLEVBQUVDLGVBQWUsRUFBRUMsTUFBTSxFQUFFQyxRQUFRLEVBQUFDLGFBQUEsSUFBQUMsY0FBQSxRQUFRLE9BQU87QUFFN0csU0FBU0MsY0FBYyxRQUFRLDJDQUEyQztBQUMx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
|