@projectcor/maia-components 2.52.0 → 2.52.1-0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/App.js +44 -19
- package/lib/components/atoms/ActionableButton.spec.js +111 -0
- package/lib/components/atoms/AgentActivityIndicator/AgentActivityIndicator.spec.js +52 -0
- package/lib/components/atoms/AgentActivityIndicator/AgentActivityIndicator.utils.spec.js +11 -0
- package/lib/components/atoms/ApprovalBox/ApprovalBox.helpers.spec.js +63 -0
- package/lib/components/atoms/ApprovalBox/ApprovalBox.spec.js +183 -0
- package/lib/components/atoms/AttachmentCard/AttachmentCard.spec.js +123 -0
- package/lib/components/atoms/AttachmentCard/AttachmentCardAudio.helpers.js +3 -1
- package/lib/components/atoms/AttachmentCard/AttachmentCardAudio.helpers.spec.js +139 -0
- package/lib/components/atoms/AttachmentCard/AttachmentCardAudio.spec.js +385 -0
- package/lib/components/atoms/AttachmentCard/AttachmentCardImage.js +3 -1
- package/lib/components/atoms/AttachmentCard/AttachmentCardImage.spec.js +78 -0
- package/lib/components/atoms/AttachmentPreviewModal/AttachmentPreviewModal.helpers.spec.js +94 -0
- package/lib/components/atoms/AttachmentPreviewModal/AttachmentPreviewModal.js +24 -14
- package/lib/components/atoms/AttachmentPreviewModal/AttachmentPreviewModal.spec.js +396 -0
- package/lib/components/atoms/AttachmentPreviewModal/ExcelPreview.js +28 -10
- package/lib/components/atoms/AttachmentPreviewModal/ExcelPreview.spec.js +80 -0
- package/lib/components/atoms/AttachmentPreviewModal/PptPreview.helpers.spec.js +526 -0
- package/lib/components/atoms/AttachmentPreviewModal/PptPreview.js +19 -15
- package/lib/components/atoms/AttachmentPreviewModal/PptPreview.spec.js +169 -0
- package/lib/components/atoms/AttachmentPreviewModal/WordPreview.helpers.spec.js +11 -0
- package/lib/components/atoms/AttachmentPreviewModal/WordPreview.js +8 -4
- package/lib/components/atoms/AttachmentPreviewModal/WordPreview.spec.js +77 -0
- package/lib/components/atoms/Backdrop/Backdrop.spec.js +28 -0
- package/lib/components/atoms/CardMenu/CardMenu.spec.js +56 -0
- package/lib/components/atoms/ChatClientSelector/ChatClientSelector.spec.js +67 -0
- package/lib/components/atoms/Checkbox/Checkbox.spec.js +27 -0
- package/lib/components/atoms/Chip/Chip.spec.js +82 -0
- package/lib/components/atoms/ChipLlm/ChipLlm.spec.js +26 -0
- package/lib/components/atoms/ClientSelector/ClientSelector.helpers.spec.js +45 -0
- package/lib/components/atoms/ClientSelector/ClientSelector.js +15 -13
- package/lib/components/atoms/ClientSelector/ClientSelector.spec.js +133 -0
- package/lib/components/atoms/ContextCompactedNotice/ContextCompactedNotice.spec.js +107 -0
- package/lib/components/atoms/ContextMentionChip/ContextMentionChip.spec.js +29 -0
- package/lib/components/atoms/ContextMentionChip/MentionOverflowLabel.spec.js +46 -0
- package/lib/components/atoms/ContextMentionChip/buildChipElement.helpers.spec.js +109 -0
- package/lib/components/atoms/ContextMentionChip/buildChipElement.spec.js +81 -0
- package/lib/components/atoms/ContextMentionEditor/ContextMentionEditor.helpers.spec.js +92 -0
- package/lib/components/atoms/ContextMentionEditor/ContextMentionEditor.spec.js +319 -0
- package/lib/components/atoms/ContextMentionItem/ContextMentionItem.spec.js +107 -0
- package/lib/components/atoms/ContextMentionPopover/ContextMentionPopover.spec.js +136 -0
- package/lib/components/atoms/CopyToClipboard.spec.js +74 -0
- package/lib/components/atoms/EditableLabel/EditableLabel.spec.js +76 -0
- package/lib/components/atoms/EntitySelector/EntitySelector.spec.js +86 -0
- package/lib/components/atoms/Expand/Expand.spec.js +57 -0
- package/lib/components/atoms/Fade/Fade.js +10 -6
- package/lib/components/atoms/Fade/Fade.spec.js +66 -0
- package/lib/components/atoms/FeedbackButton/FeedbackButton.spec.js +75 -0
- package/lib/components/atoms/FrequentlyAskedQuestions/FrequentlyAskedQuestions.spec.js +104 -0
- package/lib/components/atoms/FrequentlyUsedActions/FrequentlyUsedActions.js +3 -1
- package/lib/components/atoms/FrequentlyUsedActions/FrequentlyUsedActions.spec.js +91 -0
- package/lib/components/atoms/FrequentlyUsedActions/FrequentlyUsedActions.styles.js +19 -7
- package/lib/components/atoms/HelpButton.spec.js +87 -0
- package/lib/components/atoms/ImagePreview/ImagePreview.spec.js +96 -0
- package/lib/components/atoms/ListMenuOption/ListMenuOption.spec.js +54 -0
- package/lib/components/atoms/LoadingFaqs/LoadingFaqs.spec.js +21 -0
- package/lib/components/atoms/LoadingSearchClients/LoadingSearchClients.spec.js +20 -0
- package/lib/components/atoms/LoadingSearchProjects/LoadingSearchProjects.spec.js +26 -0
- package/lib/components/atoms/LoadingText/LoadingText.spec.js +25 -0
- package/lib/components/atoms/MAIAButton/MAIAButton.spec.js +42 -0
- package/lib/components/atoms/MAIAError/MAIAError.spec.js +27 -0
- package/lib/components/atoms/MAIAInput/MAIAInput.attachments.helpers.js +3 -2
- package/lib/components/atoms/MAIAInput/MAIAInput.attachments.helpers.spec.js +113 -0
- package/lib/components/atoms/MAIAInput/MAIAInput.helpers.js +3 -2
- package/lib/components/atoms/MAIAInput/MAIAInput.helpers.spec.js +381 -0
- package/lib/components/atoms/MAIAInput/MAIAInput.js +123 -99
- package/lib/components/atoms/MAIAInput/MAIAInput.spec.js +719 -0
- package/lib/components/atoms/MAIAInput/MAIAInputEditor.helpers.spec.js +92 -0
- package/lib/components/atoms/MAIAInput/MAIAInputEditor.spec.js +193 -0
- package/lib/components/atoms/MAIAInput/maiaInputLayout.spec.js +32 -0
- package/lib/components/atoms/MaiaStreamdown/MaiaStreamdown.spec.js +64 -0
- package/lib/components/atoms/MaiaWrapper/MaiaWrapper.spec.js +43 -0
- package/lib/components/atoms/MaiaWrapper/MaiaWrapperBase.js +9 -4
- package/lib/components/atoms/MaiaWrapper/MaiaWrapperBase.spec.js +114 -0
- package/lib/components/atoms/MaiaWrapper/ModernMaiaWrapper.spec.js +51 -0
- package/lib/components/atoms/ModalClientAccess/ModalClientAccess.spec.js +48 -0
- package/lib/components/atoms/ModalProject/ModalProject.spec.js +66 -0
- package/lib/components/atoms/NextPageLoader.spec.js +37 -0
- package/lib/components/atoms/OnboardingModalButton/OnboardingModal.spec.js +20 -0
- package/lib/components/atoms/OnboardingModalButton/OnboardingModalButton.helpers.spec.js +35 -0
- package/lib/components/atoms/OnboardingModalButton/OnboardingModalButton.spec.js +47 -0
- package/lib/components/atoms/OptionAccessibility/OptionAccessibility.js +4 -5
- package/lib/components/atoms/OptionAccessibility/OptionAccessibility.spec.js +146 -0
- package/lib/components/atoms/PrimaryButton.spec.js +42 -0
- package/lib/components/atoms/ProjectSelector/ProjectSelector.spec.js +69 -0
- package/lib/components/atoms/ReasoningBlock/ReasoningBlock.js +7 -2
- package/lib/components/atoms/ReasoningBlock/ReasoningBlock.spec.js +69 -0
- package/lib/components/atoms/ReasoningBlock/ReasoningBlock.styles.js +41 -24
- package/lib/components/atoms/ReasoningBlock/ReasoningSteps.js +25 -10
- package/lib/components/atoms/ReasoningBlock/ReasoningSteps.spec.js +59 -0
- package/lib/components/atoms/ReasoningBlock/ReasoningTimeline.js +78 -43
- package/lib/components/atoms/ReasoningBlock/ReasoningTimeline.spec.js +170 -0
- package/lib/components/atoms/ReasoningBlock/groupParallelSteps.js +9 -11
- package/lib/components/atoms/ReasoningBlock/groupParallelSteps.spec.js +199 -0
- package/lib/components/atoms/ReasoningBlock/reasoningLeading.spec.js +70 -0
- package/lib/components/atoms/ReasoningBlock/reasoningLiveNarration.js +37 -15
- package/lib/components/atoms/ReasoningBlock/reasoningLiveNarration.spec.js +120 -0
- package/lib/components/atoms/ReasoningBlock/reasoningMotion.js +8 -0
- package/lib/components/atoms/ReasoningBlock/reasoningTimeline.helpers.spec.js +31 -0
- package/lib/components/atoms/ReasoningBlock/useCollapsibleHeight.js +52 -0
- package/lib/components/atoms/ReasoningBlock/useCollapsibleHeight.spec.js +90 -0
- package/lib/components/atoms/ReasoningBlock/useReasoningMarkerHandoff.js +29 -0
- package/lib/components/atoms/ReasoningBlock/useReasoningMarkerHandoff.spec.js +38 -0
- package/lib/components/atoms/SessionGeneratingDot/SessionGeneratingDot.spec.js +16 -0
- package/lib/components/atoms/SkillsDropdown/SkillsDropdown.spec.js +107 -0
- package/lib/components/atoms/SlashCommandChip/SlashCommandChip.spec.js +24 -0
- package/lib/components/atoms/SlashCommandDropdown/SlashCommandDropdown.helpers.spec.js +71 -0
- package/lib/components/atoms/SlashCommandDropdown/SlashCommandDropdown.spec.js +120 -0
- package/lib/components/atoms/Switch/Switch.spec.js +41 -0
- package/lib/components/atoms/TextArea/CustomTextArea.spec.js +52 -0
- package/lib/components/atoms/TextArea/TextArea.helpers.spec.js +25 -0
- package/lib/components/atoms/TextArea/TextArea.spec.js +126 -0
- package/lib/components/atoms/ThirdButton.spec.js +29 -0
- package/lib/components/atoms/VideoModal/VideoModal.spec.js +68 -0
- package/lib/components/atoms/WithAppCfg.spec.js +82 -0
- package/lib/components/index.js +2 -1
- package/lib/components/molecules/AbmSection/AbmAccessibilitySection/AbmAccessibilitySection.helpers.spec.js +53 -0
- package/lib/components/molecules/AbmSection/AbmAccessibilitySection/AbmAccessibilitySection.js +3 -2
- package/lib/components/molecules/AbmSection/AbmAccessibilitySection/AbmAccessibilitySection.spec.js +780 -0
- package/lib/components/molecules/AbmSection/AbmGeneralSection.helpers.spec.js +107 -0
- package/lib/components/molecules/AbmSection/AbmGeneralSection.spec.js +256 -0
- package/lib/components/molecules/AbmSection/AbmKnowledgeSection.helpers.js +6 -4
- package/lib/components/molecules/AbmSection/AbmKnowledgeSection.helpers.spec.js +175 -0
- package/lib/components/molecules/AbmSection/AbmKnowledgeSection.js +25 -16
- package/lib/components/molecules/AbmSection/AbmKnowledgeSection.spec.js +318 -0
- package/lib/components/molecules/AbmSection/AbmLoaderFiles.helpers.spec.js +50 -0
- package/lib/components/molecules/AbmSection/AbmLoaderFiles.spec.js +94 -0
- package/lib/components/molecules/AgentInputBlock/AgentInputBlockMessage.js +83 -0
- package/lib/components/molecules/AgentInputBlock/AgentInputBlockMessage.styles.js +30 -0
- package/lib/components/molecules/AgentInputBlock/index.js +5 -0
- package/lib/components/molecules/AgentInputBlock/resolveAgentInputBlock.js +52 -0
- package/lib/components/molecules/AgentInputBlock/resolveAgentInputBlock.spec.js +76 -0
- package/lib/components/molecules/AgentInputBlock/resolveLegacyContextSession.js +20 -0
- package/lib/components/molecules/AgentInputBlock/resolveLegacyContextSession.spec.js +34 -0
- package/lib/components/molecules/AgentInputBlock/useAgentChangeModelAction.js +36 -0
- package/lib/components/molecules/ChatAIClientSelector/ChatAIClientSelector.spec.js +66 -0
- package/lib/components/molecules/ChatAIContent/ChatAIContent.js +7 -3
- package/lib/components/molecules/ChatAIContent/ChatAIContent.spec.js +145 -0
- package/lib/components/molecules/ChatAIHistory/ChatAIHistory.spec.js +204 -0
- package/lib/components/molecules/ChatAIHome/ChatAIHome.helpers.spec.js +622 -0
- package/lib/components/molecules/ChatAIHome/ChatAIHome.js +93 -72
- package/lib/components/molecules/ChatAIHome/ChatAIHome.spec.js +264 -0
- package/lib/components/molecules/ChatAIHome/ChatAIHomeMaiaker.spec.js +86 -0
- package/lib/components/molecules/ChatAIHome/styles.js +85 -78
- package/lib/components/molecules/ChatAIMessages/ChatAICreateAgentActions.spec.js +104 -0
- package/lib/components/molecules/ChatAIMessages/ChatAIMessages.helpers.spec.js +967 -0
- package/lib/components/molecules/ChatAIMessages/ChatAIMessages.js +30 -14
- package/lib/components/molecules/ChatAIMessages/ChatAIMessages.spec.js +646 -0
- package/lib/components/molecules/ChatAIMessages/ChatAISuggestions.spec.js +46 -0
- package/lib/components/molecules/ChatAIMessages/newStyles.js +32 -35
- package/lib/components/molecules/ChatAIModal/ChatAIModal.helpers.js +8 -1
- package/lib/components/molecules/ChatAIModal/ChatAIModal.helpers.spec.js +1395 -0
- package/lib/components/molecules/ChatAIModal/ChatAIModal.js +23 -8
- package/lib/components/molecules/ChatAIModal/ChatAIModal.spec.js +1434 -0
- package/lib/components/molecules/ChatAIModal/ChatAIModal.styles.js +2 -2
- package/lib/components/molecules/ChatAIModal/components/ChatAiAgentOptions/ChatAiAgentOptions.helpers.spec.js +33 -0
- package/lib/components/molecules/ChatAIModal/components/ChatAiAgentOptions/ChatAiAgentOptions.spec.js +116 -0
- package/lib/components/molecules/ChatAIModal/components/ChatAiModalFooter/ChatAiModalFooter.js +15 -153
- package/lib/components/molecules/ChatAIModal/components/ChatAiModalFooter/ChatAiModalFooter.spec.js +134 -0
- package/lib/components/molecules/ChatAIModal/components/ChatAiModalFooter/ChatAiModalFooter.styles.js +2 -26
- package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.helpers.spec.js +142 -0
- package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.js +63 -367
- package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.spec.js +241 -0
- package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.utils.js +69 -0
- package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.utils.spec.js +144 -0
- package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeaderAgentDropdown.js +95 -0
- package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeaderAgentSelector.js +174 -0
- package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeaderLayoutMenu.js +99 -0
- package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeaderLayoutMenu.spec.js +65 -0
- package/lib/components/molecules/ChatAIModal/components/MaiaMinimizedPill/MaiaMinimizedPill.spec.js +37 -0
- package/lib/components/molecules/ChatAIModal/constants.spec.js +16 -0
- package/lib/components/molecules/ChatAIModal/floatingPanelMotion/FloatingPanelMotion.spec.js +22 -0
- package/lib/components/molecules/ChatAIModal/floatingPanelMotion/useFloatingPanelDragTilt.spec.js +67 -0
- package/lib/components/molecules/ChatAIModal/layout.spec.js +72 -0
- package/lib/components/molecules/ChatAIMultipleChoice/ChatAIMultipleChoice.spec.js +102 -0
- package/lib/components/molecules/ChatAIMultipleChoice/ChatAIMultipleChoiceAnswer.spec.js +49 -0
- package/lib/components/molecules/ChatAIMyAgents/ChatAIMyAgents.helpers.spec.js +93 -0
- package/lib/components/molecules/ChatAIMyAgents/ChatAIMyAgents.spec.js +297 -0
- package/lib/components/molecules/ChatAIMySkills/ChatAIMySkills.helpers.spec.js +62 -0
- package/lib/components/molecules/ChatAIMySkills/ChatAIMySkills.spec.js +221 -0
- package/lib/components/molecules/ChatAIProjectSelector/ChatAIProjectSelector.spec.js +66 -0
- package/lib/components/molecules/ChatFooter/ChatFooter.js +10 -4
- package/lib/components/molecules/ChatFooter/ChatFooter.spec.js +548 -0
- package/lib/components/molecules/ChatFooter/ChatFooterCorAccess.spec.js +10 -0
- package/lib/components/molecules/ChatFooter/ChatFooterFaqs.helpers.spec.js +104 -0
- package/lib/components/molecules/ChatFooter/ChatFooterFaqs.js +5 -2
- package/lib/components/molecules/ChatFooter/ChatFooterFaqs.spec.js +139 -0
- package/lib/components/molecules/ContextMentionInput/ContextMentionInput.spec.js +84 -0
- package/lib/components/molecules/MessageFeedback/MessageFeedback.spec.js +116 -0
- package/lib/components/molecules/ProjectSummaryChat/ProjectSummaryChat.spec.js +126 -0
- package/lib/components/molecules/ProjectSummaryConfig/ProjectSummaryConfig.spec.js +115 -0
- package/lib/components/molecules/ProjectSummaryContent/ProjectSummaryContent.spec.js +79 -0
- package/lib/components/molecules/ProjectSummaryModal/ProjectSummaryModal.spec.js +37 -0
- package/lib/components/molecules/Sidebar/Sidebar.helpers.spec.js +119 -0
- package/lib/components/molecules/Sidebar/Sidebar.js +41 -23
- package/lib/components/molecules/Sidebar/Sidebar.spec.js +526 -0
- package/lib/components/organisms/AbmAgentModal/AbmAgentModal.helpers.spec.js +1067 -0
- package/lib/components/organisms/AbmAgentModal/AbmAgentModal.js +2 -2
- package/lib/components/organisms/AbmAgentModal/AbmAgentModal.spec.js +1236 -0
- package/lib/components/organisms/AbmSkillGenerateModal/AbmSkillGenerateModal.spec.js +112 -0
- package/lib/components/organisms/AbmSkillModal/AbmSkillModal.helpers.spec.js +77 -0
- package/lib/components/organisms/AbmSkillModal/AbmSkillModal.spec.js +503 -0
- package/lib/components/organisms/ChatAI/ChatAI.spec.js +217 -0
- package/lib/components/organisms/ChatAIPage/ChatAIPage.js +525 -0
- package/lib/components/organisms/ChatAIPage/ChatAIPage.spec.js +246 -0
- package/lib/components/organisms/ChatAIPage/ChatAIPage.styles.js +16 -0
- package/lib/components/organisms/ChatAIPage/ChatAIPageHeader.js +253 -0
- package/lib/components/organisms/ChatAIPage/ChatAIPageHeader.spec.js +291 -0
- package/lib/components/organisms/ChatAIPage/ChatAIPageHeader.styles.js +13 -0
- package/lib/components/organisms/ChatAIPage/ChatAIPageHome.js +284 -0
- package/lib/components/organisms/ChatAIPage/ChatAIPageHome.spec.js +343 -0
- package/lib/components/organisms/ChatAIPage/ChatAIPageHome.styles.js +197 -0
- package/lib/components/organisms/ChatAIPage/ChatAIPageHomeActionCardSlot.js +94 -0
- package/lib/components/organisms/ChatAIPage/ChatAIPageHomeActionCardSlot.spec.js +69 -0
- package/lib/components/organisms/ChatAIPage/ChatAIPageHomeActionCards.skeleton.js +38 -0
- package/lib/components/organisms/ChatAIPage/getDaypart.js +9 -0
- package/lib/components/organisms/ChatAIPage/getDaypart.spec.js +19 -0
- package/lib/components/organisms/ChatAIPage/index.js +3 -0
- package/lib/components/organisms/ClientAIButton/ClientAIButton.spec.js +53 -0
- package/lib/components/organisms/DeleteAgentModal/DeleteAgentModal.spec.js +59 -0
- package/lib/components/organisms/DeleteQuestionModal/DeleteQuestionModal.spec.js +79 -0
- package/lib/components/organisms/EditQuestionModal/EditQuestionModal.spec.js +86 -0
- package/lib/components/organisms/ModalFileExceeds/ModalFileExceeds.spec.js +49 -0
- package/lib/components/organisms/ProjectAIButton/ProjectAIButton.spec.js +67 -0
- package/lib/components/organisms/ProjectSummary/ProjectSummary.js +11 -7
- package/lib/components/organisms/ProjectSummary/ProjectSummary.spec.js +117 -0
- package/lib/components/organisms/SnackBar/Snackbar.spec.js +66 -0
- package/lib/components/organisms/SourcesInformation/SourceItem.spec.js +19 -0
- package/lib/components/organisms/SourcesInformation/SourcesInformationModal.js +4 -1
- package/lib/components/organisms/SourcesInformation/SourcesInformationModal.spec.js +52 -0
- package/lib/constants/formatExtensions.spec.js +15 -0
- package/lib/constants/maiaExternalConnectorsAccess.spec.js +29 -0
- package/lib/constants/maiaFeatureAccess.spec.js +30 -0
- package/lib/constants/maiaHourAgentAccess.spec.js +30 -0
- package/lib/constants/maiaTaskPanelAccess.spec.js +41 -0
- package/lib/constants/permissions/clientRoleAccess.spec.js +65 -0
- package/lib/constants/permissions/index.js +2 -2
- package/lib/constants/permissions/utils.js +4 -1
- package/lib/constants/permissions/utils.spec.js +128 -0
- package/lib/constants/plannerSyncEvents.spec.js +31 -0
- package/lib/constants/taskUrls.spec.js +9 -0
- package/lib/dev/DevMaiaPage.js +30 -0
- package/lib/dev/DevReasoningTimeline.js +68 -37
- package/lib/dev/Providers.js +5 -3
- package/lib/hooks/frequentlyUsedActionsCache.js +17 -0
- package/lib/hooks/frequentlyUsedActionsCache.spec.js +25 -0
- package/lib/hooks/useAccessClient/useAccessClient.spec.js +149 -0
- package/lib/hooks/useAgentModel/useAgentModel.spec.js +83 -0
- package/lib/hooks/useAgentModel/useCreateAgent.helpers.spec.js +268 -0
- package/lib/hooks/useAgentModel/useCreateAgent.spec.js +314 -0
- package/lib/hooks/useAgentModel/useDeleteAgent.spec.js +183 -0
- package/lib/hooks/useAgentModel/useUpdateAgent.js +7 -6
- package/lib/hooks/useAgentModel/useUpdateAgent.spec.js +374 -0
- package/lib/hooks/useAgentSuggestions.spec.js +89 -0
- package/lib/hooks/useCaretPosition.spec.js +58 -0
- package/lib/hooks/useChatManager/useChatManager.helpers.js +3 -3
- package/lib/hooks/useChatManager/useChatManager.helpers.spec.js +2027 -0
- package/lib/hooks/useChatManager/useChatManager.js +8 -7
- package/lib/hooks/useChatManager/useChatManager.spec.js +2467 -0
- package/lib/hooks/useChatMessages/useChatMessages.helpers.spec.js +491 -0
- package/lib/hooks/useChatMessages/useChatMessages.spec.js +729 -0
- package/lib/hooks/useChats/useChats.spec.js +208 -0
- package/lib/hooks/useClientSearch.helpers.spec.js +52 -0
- package/lib/hooks/useClientSearch.spec.js +86 -0
- package/lib/hooks/useContextMentions.helpers.spec.js +267 -0
- package/lib/hooks/useContextMentions.spec.js +338 -0
- package/lib/hooks/useContextPinPopover.helpers.spec.js +183 -0
- package/lib/hooks/useContextPinPopover.spec.js +159 -0
- package/lib/hooks/useContinueLegacyContextInNewChat/index.js +2 -0
- package/lib/hooks/useContinueLegacyContextInNewChat/useContinueLegacyContextInNewChat.js +93 -0
- package/lib/hooks/useContinueLegacyContextInNewChat/useContinueLegacyContextInNewChat.spec.js +257 -0
- package/lib/hooks/useDebounce.spec.js +42 -0
- package/lib/hooks/useEntitySearch.helpers.spec.js +723 -0
- package/lib/hooks/useEntitySearch.js +3 -1
- package/lib/hooks/useEntitySearch.spec.js +718 -0
- package/lib/hooks/useEvent.spec.js +45 -0
- package/lib/hooks/useFrequentlyAskedQuestions.spec.js +222 -0
- package/lib/hooks/useFrequentlyUsedActions.js +61 -22
- package/lib/hooks/useFrequentlyUsedActions.spec.js +293 -0
- package/lib/hooks/useIsMaiaPageRoute.spec.js +26 -0
- package/lib/hooks/useKnowledge/deleteKnowledge.spec.js +122 -0
- package/lib/hooks/useKnowledge/downloadKnowledge.js +4 -4
- package/lib/hooks/useKnowledge/downloadKnowledge.spec.js +148 -0
- package/lib/hooks/useKnowledge/saveKnowledge.spec.js +104 -0
- package/lib/hooks/useKnowledge/useKnowledgeOperations.js +16 -15
- package/lib/hooks/useKnowledge/useKnowledgeOperations.spec.js +178 -0
- package/lib/hooks/useLatestRef.spec.js +50 -0
- package/lib/hooks/useMaiaChatSessionMeta/index.js +2 -0
- package/lib/hooks/useMaiaChatSessionMeta/useMaiaChatSessionMeta.js +24 -0
- package/lib/hooks/useMentionAllowedTypes.spec.js +89 -0
- package/lib/hooks/useMentionPopover.helpers.spec.js +100 -0
- package/lib/hooks/useMentionPopover.spec.js +392 -0
- package/lib/hooks/useMinimizedPillBottomOffset.helpers.spec.js +176 -0
- package/lib/hooks/useMinimizedPillBottomOffset.spec.js +89 -0
- package/lib/hooks/useMinimizedPillNoveltyDot/useMinimizedPillNoveltyDot.spec.js +67 -0
- package/lib/hooks/useModal/useModal.spec.js +73 -0
- package/lib/hooks/useOrchestratorStream/useOrchestratorStream.helpers.spec.js +138 -0
- package/lib/hooks/useOrchestratorStream/useOrchestratorStream.spec.js +485 -0
- package/lib/hooks/useProjectSearch.helpers.spec.js +89 -0
- package/lib/hooks/useProjectSearch.spec.js +91 -0
- package/lib/hooks/useProjectSummary.spec.js +193 -0
- package/lib/hooks/useProjectSummaryConfig.helpers.spec.js +151 -0
- package/lib/hooks/useProjectSummaryConfig.js +10 -5
- package/lib/hooks/useProjectSummaryConfig.spec.js +133 -0
- package/lib/hooks/useReasoningTrace/reasoningStore.spec.js +112 -0
- package/lib/hooks/useRecentClientsSearch.helpers.spec.js +33 -0
- package/lib/hooks/useRecentClientsSearch.spec.js +85 -0
- package/lib/hooks/useRecentContexts.spec.js +139 -0
- package/lib/hooks/useResize.spec.js +37 -0
- package/lib/hooks/useSkillsCatalog.spec.js +88 -0
- package/lib/hooks/useSlashCommands.spec.js +139 -0
- package/lib/hooks/useSmoothStreamText/useSmoothStreamText.spec.js +101 -0
- package/lib/hooks/useSnackBarManager/useSnackBarManager.spec.js +33 -0
- package/lib/hooks/useStreamResponse.spec.js +199 -0
- package/lib/hooks/useT.spec.js +20 -0
- package/lib/hooks/useToggle.spec.js +33 -0
- package/lib/hooks/useToggleFavorite/useToggleFavorite.spec.js +171 -0
- package/lib/index.js +5 -2
- package/lib/lang/br/index.js +26 -1
- package/lib/lang/en/index.js +26 -1
- package/lib/lang/es/index.js +26 -1
- package/lib/lang/fr/index.js +26 -1
- package/lib/services/appcues.spec.js +37 -0
- package/lib/services/maia/Access/updateAccess.spec.js +137 -0
- package/lib/services/maia/Actions/getFrequentlyUsedActions.js +1 -1
- package/lib/services/maia/Actions/getFrequentlyUsedActions.spec.js +121 -0
- package/lib/services/maia/Actions/getSlashCommands.spec.js +91 -0
- package/lib/services/maia/Agents/connectors.js +3 -1
- package/lib/services/maia/Agents/connectors.spec.js +496 -0
- package/lib/services/maia/Agents/createAgent.spec.js +55 -0
- package/lib/services/maia/Agents/deleteAgent.spec.js +57 -0
- package/lib/services/maia/Agents/fetchAgentDetail.spec.js +108 -0
- package/lib/services/maia/Agents/getAgentById.spec.js +190 -0
- package/lib/services/maia/Agents/getAgentModels.spec.js +190 -0
- package/lib/services/maia/Agents/getAgentSuggestions.spec.js +89 -0
- package/lib/services/maia/Agents/getAgents.helpers.spec.js +325 -0
- package/lib/services/maia/Agents/getAgents.spec.js +1135 -0
- package/lib/services/maia/Agents/setAgentToolGroups.spec.js +45 -0
- package/lib/services/maia/Agents/toggleFavorite.spec.js +59 -0
- package/lib/services/maia/Agents/updateAgent.spec.js +48 -0
- package/lib/services/maia/Chats/deleteChat.spec.js +31 -0
- package/lib/services/maia/Chats/getChatMessages.spec.js +150 -0
- package/lib/services/maia/Chats/getChatsByUserId.spec.js +181 -0
- package/lib/services/maia/Chats/markSessionAsRead.spec.js +30 -0
- package/lib/services/maia/Chats/patchChat.spec.js +41 -0
- package/lib/services/maia/Chats/wasHelpfulChat.spec.js +28 -0
- package/lib/services/maia/Faqs/getFrequentlyAskedQuestions.spec.js +58 -0
- package/lib/services/maia/Knowledge/delete.spec.js +45 -0
- package/lib/services/maia/Knowledge/download.spec.js +78 -0
- package/lib/services/maia/Knowledge/save.spec.js +58 -0
- package/lib/services/maia/Orchestrator/orchestrator.helpers.spec.js +261 -0
- package/lib/services/maia/Orchestrator/orchestrator.spec.js +181 -0
- package/lib/services/maia/RecentClients/getRecentClients.spec.js +52 -0
- package/lib/services/maia/RecentContexts/getRecentContexts.spec.js +103 -0
- package/lib/services/maia/RecentProjects/getRecentProjects.spec.js +82 -0
- package/lib/services/maia/RecentTasks/getRecentTasks.spec.js +63 -0
- package/lib/services/maia/RecentUsers/getRecentUsers.spec.js +82 -0
- package/lib/services/maia/Skills/createSkill.spec.js +68 -0
- package/lib/services/maia/Skills/deleteSkill.spec.js +42 -0
- package/lib/services/maia/Skills/generateSkill.spec.js +48 -0
- package/lib/services/maia/Skills/getSkills.spec.js +152 -0
- package/lib/services/maia/Skills/updateSkill.spec.js +62 -0
- package/lib/services/maia/client.spec.js +56 -0
- package/lib/services/utils/fetchCOR.spec.js +211 -0
- package/lib/services/utils/getCookie.spec.js +20 -0
- package/lib/services/utils/mapChatMessages.helpers.spec.js +336 -0
- package/lib/services/utils/mapChatMessages.multipleChoice.spec.js +87 -0
- package/lib/services/utils/mapChatMessages.spec.js +254 -0
- package/lib/store/chatsSidebarOptimistic.spec.js +145 -0
- package/lib/store/maiaLastChatPersistence.spec.js +22 -0
- package/lib/store/maiaPanelSessionPersistence.spec.js +62 -0
- package/lib/store/sessions/sessionNotificationSound.spec.js +145 -0
- package/lib/store/sessions/sessionNotifications.helpers.spec.js +63 -0
- package/lib/store/sessions/sessionNotifications.spec.js +106 -0
- package/lib/store/sessions/sessionStreamManager.helpers.spec.js +177 -0
- package/lib/store/sessions/sessionStreamManager.js +51 -55
- package/lib/store/sessions/sessionStreamManager.spec.js +939 -0
- package/lib/store/sessions/sessions.types.spec.js +16 -0
- package/lib/store/sessions/useSessionsStore.spec.js +135 -0
- package/lib/store/useChatsStore.js +4 -3
- package/lib/store/useChatsStore.spec.js +690 -0
- package/lib/store/useFaqsStore.spec.js +57 -0
- package/lib/store/useMultipleChoiceStore.spec.js +44 -0
- package/lib/styles/cascade.js +29 -3
- package/lib/styles/transitions.js +3 -1
- package/lib/types/global.d.js +1 -1
- package/lib/utils/actionCategoryMap.spec.js +18 -0
- package/lib/utils/agentDisplayName.spec.js +48 -0
- package/lib/utils/autoApproveStorage.spec.js +25 -0
- package/lib/utils/chatInputFiles.spec.js +39 -0
- package/lib/utils/contextMentionIcons.spec.js +41 -0
- package/lib/utils/contextMentionLabel.spec.js +13 -0
- package/lib/utils/contextMentionTriggers.spec.js +44 -0
- package/lib/utils/contextMentionTypeLabel.spec.js +14 -0
- package/lib/utils/corConnectorMentionTypes.spec.js +23 -0
- package/lib/utils/entityLinkRender.spec.js +72 -0
- package/lib/utils/fileDownloadHelper.spec.js +67 -0
- package/lib/utils/formatQuickActionMessage.spec.js +27 -0
- package/lib/utils/formatUnreadCount.spec.js +12 -0
- package/lib/utils/getUnitFileSize.spec.js +18 -0
- package/lib/utils/hitlAnalytics.spec.js +136 -0
- package/lib/utils/hoursPlannerQuickActionType.js +116 -1
- package/lib/utils/hoursPlannerQuickActionType.spec.js +124 -0
- package/lib/utils/imagePreprocessor.helpers.spec.js +28 -0
- package/lib/utils/imagePreprocessor.js +14 -3
- package/lib/utils/imagePreprocessor.spec.js +112 -0
- package/lib/utils/maiaPageRoute.spec.js +23 -0
- package/lib/utils/mapBackendLang.spec.js +19 -0
- package/lib/utils/navigateContextEntity.js +2 -2
- package/lib/utils/navigateContextEntity.spec.js +50 -0
- package/lib/utils/normalizeAgentConnectors.spec.js +98 -0
- package/lib/utils/openTaskInCorPanel.js +2 -2
- package/lib/utils/openTaskInCorPanel.spec.js +43 -0
- package/lib/utils/orchestratorSubagents.spec.js +32 -0
- package/lib/utils/reasoningMappers.spec.js +103 -0
- package/lib/utils/recentContextsHomeLimit.spec.js +32 -0
- package/lib/utils/renderContextMentions.helpers.spec.js +87 -0
- package/lib/utils/renderContextMentions.spec.js +268 -0
- package/lib/utils/retryCompletion.spec.js +181 -0
- package/lib/utils/skillContentSize.spec.js +13 -0
- package/lib/utils/slashCommandMarker.spec.js +43 -0
- package/lib/utils/sortManagerHoursHomeFuas.spec.js +51 -0
- package/lib/utils/sseStreamContent.spec.js +31 -0
- package/lib/utils/streamActivityMessages.helpers.js +5 -4
- package/lib/utils/streamActivityMessages.helpers.spec.js +84 -0
- package/lib/utils/streamActivityMessages.js +32 -20
- package/lib/utils/streamActivityMessages.spec.js +336 -0
- package/lib/utils/validateTrimmedFields.spec.js +26 -0
- package/package.json +1 -1
- package/README.md +0 -2
|
@@ -53,7 +53,7 @@ import { mapCORLang } from '../../../lang/utils';
|
|
|
53
53
|
import { EVENTS, useEvent } from '../../../hooks/useEvent';
|
|
54
54
|
import { MAIA_OPEN_FROM_HOST_EVENT } from '../../../utils/maiaHostOpen';
|
|
55
55
|
import { useIsMaiaPageRoute } from '../../../hooks/useIsMaiaPageRoute';
|
|
56
|
-
import { clampFloatingPanelPosition, hasAnyActiveSessionInMeta, hasBannerFaqTitle, isBannerFaqReadyToAutoSend, resolveAiChatBackDestination, resolveComputedCurrentOption, resolveInitialCurrentOption, resolveLegacyContextSession, resolveSidebarAgentsNavActive, shouldRestoreExpandedPanel, shouldSkipFloatingDragTarget, validateAccessByFeature, resolveHostTakeoverEntityState, buildHostTakeoverPersistContext, buildMaiaPanelSessionPatch, dispatchSkillMentionInsert, ensureAgentsBeforeSkillUse, resolveFloatingPanelDragPosition, resolveHostTakeoverAgentId, resolveMaiaModalI18nLang, resolveMinimizedRestoreTarget, resolveNextDragPosition, resolveUserHasAgentManagementPermissions, shouldBackClearPinnedContext, shouldBackStartNewChatPreservingContext, shouldMarkOrchestratorContextReset, shouldStartNewChatFromCatalog, resolveHasPinnedContext, resolveOrchestratorHomeNavFlags, shouldShowOrchestratorBackButton, shouldClearClientOnGoHomeFromChat, shouldClearTaskOnGoHomeFromChat, shouldResetAgentToFirstOnGoHome, shouldClearOrchestratorGlobalContextOnGoHome, shouldUseActiveChatSendHandler, shouldPrefetchAgentsForCatalogNewChat, canOpenMaiaMarketplace, shouldMarkAgentAsLegacyContext, buildLegacyContextAgent, buildLegacyContextMigrationPatch, findOrchestratorAgent, shouldSetChatViewHiddenOnMount, shouldPersistLastActiveChatId, shouldSyncPanelSessionOnPageHide, resolveCachedAgentsIfAvailable, shouldAttemptInitialAgentsFetch, findAgentForChatItem, shouldApplyClientOnHostTakeover, shouldSelectFirstAgentOnHostTakeover, shouldResetChatStateOnGoHome, shouldClearContextForCatalogOrSkillAgent, resolveOpenNewChatWithAgentContext, canContinueLegacyContextInNewChat, resolveSessionRestoreNavRoute, shouldSkipAgentsLoadOnSessionRestore, shouldFetchAgentDetailOnSessionRestore, shouldPassAgentToGetAgentsOnRestore, shouldSelectFetchedAgentAfterRestore, resolveSnapshotChipsProject, resolveChatModalSectionFlags, shouldRenderChatSidebar, resolveChatModalMainContentView, shouldShowChatModalFooter, shouldUseElevatedMaiaPanel, shouldReselectAgentAfterDelete, shouldClearDragPositionOnLayoutChange, shouldStartFloatingPanelDrag, isActiveFloatingDragPointer, shouldOpenSkillsCatalog, shouldUseDragClampFallback, resolveLayoutDragPositionUpdate, resolvePersistedDragPositionOnEnd, buildUserInitialMessageFromStartChat, shouldResetSidebarErrorOnStartChat } from './ChatAIModal.helpers';
|
|
56
|
+
import { clampFloatingPanelPosition, hasAnyActiveSessionInMeta, hasBannerFaqTitle, isBannerFaqReadyToAutoSend, resolveAiChatBackDestination, resolveComputedCurrentOption, resolveInitialCurrentOption, resolveLegacyContextSession, resolveSidebarAgentsNavActive, shouldRestoreExpandedPanel, shouldSkipFloatingDragTarget, validateAccessByFeature, resolveHostTakeoverEntityState, buildHostTakeoverPersistContext, buildMaiaPanelSessionPatch, dispatchSkillMentionInsert, ensureAgentsBeforeSkillUse, resolveFloatingPanelDragPosition, resolveHostTakeoverAgentId, resolveMaiaModalI18nLang, resolveMinimizedRestoreTarget, resolveNextDragPosition, resolveUserHasAgentManagementPermissions, shouldBackClearPinnedContext, shouldBackStartNewChatPreservingContext, shouldMarkOrchestratorContextReset, shouldStartNewChatFromCatalog, resolveHasPinnedContext, resolveOrchestratorHomeNavFlags, shouldShowOrchestratorBackButton, shouldClearClientOnGoHomeFromChat, shouldClearTaskOnGoHomeFromChat, shouldResetAgentToFirstOnGoHome, shouldClearOrchestratorGlobalContextOnGoHome, shouldUseActiveChatSendHandler, shouldPrefetchAgentsForCatalogNewChat, canOpenMaiaMarketplace, shouldMarkAgentAsLegacyContext, buildLegacyContextAgent, buildLegacyContextMigrationPatch, findOrchestratorAgent, shouldSetChatViewHiddenOnMount, shouldPersistLastActiveChatId, shouldSyncPanelSessionOnPageHide, resolveCachedAgentsIfAvailable, shouldAttemptInitialAgentsFetch, findAgentForChatItem, shouldApplyClientOnHostTakeover, shouldSelectFirstAgentOnHostTakeover, shouldResetChatStateOnGoHome, shouldClearContextForCatalogOrSkillAgent, resolveOpenNewChatWithAgentContext, canContinueLegacyContextInNewChat, resolveSessionRestoreNavRoute, shouldSkipAgentsLoadOnSessionRestore, shouldFetchAgentDetailOnSessionRestore, shouldPassAgentToGetAgentsOnRestore, shouldSelectFetchedAgentAfterRestore, resolveSnapshotChipsProject, resolveChatModalSectionFlags, shouldRenderChatSidebar, resolveChatModalMainContentView, shouldShowChatModalFooter, shouldUseElevatedMaiaPanel, shouldReselectAgentAfterDelete, shouldClearDragPositionOnLayoutChange, shouldStartFloatingPanelDrag, isActiveFloatingDragPointer, shouldOpenSkillsCatalog, shouldUseDragClampFallback, resolveLayoutDragPositionUpdate, resolvePersistedDragPositionOnEnd, buildUserInitialMessageFromStartChat, shouldResetSidebarErrorOnStartChat, getMaiaHostPanelPresentation } from './ChatAIModal.helpers';
|
|
57
57
|
|
|
58
58
|
/** Metadata de la session abierta (emitida por useChatMessages al cargar una conversación). */
|
|
59
59
|
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
@@ -84,6 +84,9 @@ export var ChatAIModal = function ChatAIModal() {
|
|
|
84
84
|
isMinimized = _useState4[0],
|
|
85
85
|
setIsMinimized = _useState4[1];
|
|
86
86
|
var isMaiaPageRoute = useIsMaiaPageRoute();
|
|
87
|
+
var _getMaiaHostPanelPres = getMaiaHostPanelPresentation(isMinimized, isMaiaPageRoute),
|
|
88
|
+
hidePanelContent = _getMaiaHostPanelPres.hidePanelContent,
|
|
89
|
+
showMinimizedPill = _getMaiaHostPanelPres.showMinimizedPill;
|
|
87
90
|
var initialChatsRefetchDoneRef = useRef(false);
|
|
88
91
|
var setChatViewVisible = useChatsStore(function (state) {
|
|
89
92
|
return state.setChatViewVisible;
|
|
@@ -113,6 +116,18 @@ export var ChatAIModal = function ChatAIModal() {
|
|
|
113
116
|
}
|
|
114
117
|
}, [setChatViewVisible]);
|
|
115
118
|
|
|
119
|
+
// En /maia el chat fullscreen del sidebar reemplaza al panel flotante; no minimizamos
|
|
120
|
+
// para poder restaurar la misma vista al volver a otra sección de COR.
|
|
121
|
+
useEffect(function () {
|
|
122
|
+
if (isMaiaPageRoute) {
|
|
123
|
+
setChatViewVisible(false);
|
|
124
|
+
return;
|
|
125
|
+
}
|
|
126
|
+
if (!isMinimized) {
|
|
127
|
+
setChatViewVisible(true);
|
|
128
|
+
}
|
|
129
|
+
}, [isMaiaPageRoute, isMinimized, setChatViewVisible]);
|
|
130
|
+
|
|
116
131
|
// Persistimos la conversación abierta para poder volver a ella desde el pill después
|
|
117
132
|
// de navegar o refrescar. El takeover desde un host la limpia (va al Home).
|
|
118
133
|
useEffect(function () {
|
|
@@ -672,14 +687,14 @@ export var ChatAIModal = function ChatAIModal() {
|
|
|
672
687
|
setIsStreaming(streaming);
|
|
673
688
|
setIsWriting(writing);
|
|
674
689
|
}, []);
|
|
675
|
-
var handleSendMessage = useCallback(function (message, attachments, faqId, agentSuggestionId, mentions, fuaId, scId) {
|
|
690
|
+
var handleSendMessage = useCallback(function (message, attachments, faqId, agentSuggestionId, mentions, fuaId, scId, contextData) {
|
|
676
691
|
if (sidebarHasError) {
|
|
677
692
|
setSidebarHasError(false);
|
|
678
693
|
}
|
|
679
694
|
if (shouldUseActiveChatSendHandler(computedCurrentOption, options.chat, Boolean(sendMessageFunction))) {
|
|
680
|
-
sendMessageFunction === null || sendMessageFunction === void 0 || sendMessageFunction(message, attachments, faqId, agentSuggestionId, mentions, fuaId, scId);
|
|
695
|
+
sendMessageFunction === null || sendMessageFunction === void 0 || sendMessageFunction(message, attachments, faqId, agentSuggestionId, mentions, fuaId, scId, contextData);
|
|
681
696
|
} else {
|
|
682
|
-
startChat(message, attachments, faqId, agentSuggestionId, mentions, fuaId, scId);
|
|
697
|
+
startChat(message, attachments, faqId, agentSuggestionId, mentions, fuaId, scId, contextData);
|
|
683
698
|
}
|
|
684
699
|
}, [sendMessageFunction, startChat, computedCurrentOption, sidebarHasError]);
|
|
685
700
|
var handleGoHome = useCallback(function () {
|
|
@@ -1507,15 +1522,15 @@ export var ChatAIModal = function ChatAIModal() {
|
|
|
1507
1522
|
layoutMode: layoutMode,
|
|
1508
1523
|
dragPosition: resolvedDragPosition,
|
|
1509
1524
|
elevated: shouldUseElevatedMaiaPanel(section),
|
|
1510
|
-
$minimized:
|
|
1525
|
+
$minimized: hidePanelContent,
|
|
1511
1526
|
children: [/*#__PURE__*/_jsx(SCCAIMMinimizedHide, {
|
|
1512
|
-
$hidden:
|
|
1527
|
+
$hidden: hidePanelContent,
|
|
1513
1528
|
children: /*#__PURE__*/_jsx(FloatingPanelMotion, {
|
|
1514
1529
|
tilt: tiltMotion,
|
|
1515
1530
|
expanded: expanded,
|
|
1516
1531
|
children: contentWrapper
|
|
1517
1532
|
})
|
|
1518
|
-
}),
|
|
1533
|
+
}), showMinimizedPill && /*#__PURE__*/_jsx(MaiaMinimizedPill, {
|
|
1519
1534
|
showNoveltyDot: showMinimizedNoveltyDot,
|
|
1520
1535
|
isStreaming: hasActiveStream,
|
|
1521
1536
|
onRestore: handleRestoreFromMinimized
|
|
@@ -1532,4 +1547,4 @@ export var ChatAIModal = function ChatAIModal() {
|
|
|
1532
1547
|
}), userHasSkillsAccess && /*#__PURE__*/_jsx(AbmSkillGenerateModal, {}), /*#__PURE__*/_jsx(Snackbar, {})]
|
|
1533
1548
|
}), selector);
|
|
1534
1549
|
};
|
|
1535
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1c2VDYWxsYmFjayIsInVzZU1lbW8iLCJ1c2VTdGF0ZSIsInVzZVJlZiIsInVzZUVmZmVjdCIsInVzZUxheW91dEVmZmVjdCIsIlJlYWN0RE9NIiwibW9tZW50IiwidXNlVHJhbnNsYXRpb24iLCJ1c2VVc2VyIiwiY2FuQWNjZXNzVG9Ta2lsbHMiLCJNQUlBRXJyb3IiLCJ1c2VNYWlhVGFza1BhbmVsWkluZGV4IiwiQ2hhdEFJQ29udGVudCIsImJ1aWxkSGFuZGxlcnMiLCJvcHRpb25zIiwiU2lkZWJhciIsInVzZUdldEFnZW50cyIsInVzZUdldFNraWxscyIsInVzZUdsb2JhbENvbnRleHQiLCJDaGF0QUlNb2RhbEhlYWRlciIsIlNuYWNrYmFyIiwiUHJvamVjdFN1bW1hcnlDb250ZW50IiwiQWJtQWdlbnRNb2RhbCIsIkFibVNraWxsTW9kYWwiLCJTS0lMTF9VU0VfQUZURVJfU0FWRV9FVkVOVCIsIkFibVNraWxsR2VuZXJhdGVNb2RhbCIsIlNFQ1RJT05TIiwiU0NDQUlNQ29udGVudCIsIlNDQ0FJTUNvbnRlbnRXcmFwcGVyIiwiU0NDQUlNTWluaW1pemVkSGlkZSIsIlNDQ0FJTVdyYXBwZXIiLCJNYWlhTWluaW1pemVkUGlsbCIsInVzZU1pbmltaXplZFBpbGxOb3ZlbHR5RG90IiwiZ2V0TWFpYUZsb2F0aW5nUGFuZWxXaWR0aFB4IiwicmVzb2x2ZUluaXRpYWxNYWlhQ2hhdExheW91dE1vZGUiLCJzZXRTdG9yZWRNYWlhQ2hhdExheW91dE1vZGUiLCJGbG9hdGluZ1BhbmVsTW90aW9uIiwidXNlRmxvYXRpbmdQYW5lbERyYWdUaWx0IiwiQ2hhdEFpTW9kYWxGb290ZXIiLCJpc01hcmtldHBsYWNlR2xvYmFsQ2xvbmVBZ2VudCIsInVzZUZhcXNTdG9yZSIsImdldENoYXRzU3RvcmVTdGF0ZSIsInVzZUNoYXRzU3RvcmUiLCJyZWFkTGFzdEFjdGl2ZUNoYXRJZCIsIndyaXRlTGFzdEFjdGl2ZUNoYXRJZCIsImNsZWFyTWFpYVBhbmVsU2Vzc2lvbiIsInBhdGNoTWFpYVBhbmVsU2Vzc2lvbiIsInJlYWRNYWlhUGFuZWxTZXNzaW9uIiwid3JpdGVNYWlhUGFuZWxTZXNzaW9uIiwidXNlU2Vzc2lvbnNTdG9yZSIsImZldGNoTWFpYSIsImZldGNoQWdlbnREZXRhaWwiLCJtYXBDT1JMYW5nIiwiRVZFTlRTIiwidXNlRXZlbnQiLCJNQUlBX09QRU5fRlJPTV9IT1NUX0VWRU5UIiwidXNlSXNNYWlhUGFnZVJvdXRlIiwiY2xhbXBGbG9hdGluZ1BhbmVsUG9zaXRpb24iLCJoYXNBbnlBY3RpdmVTZXNzaW9uSW5NZXRhIiwiaGFzQmFubmVyRmFxVGl0bGUiLCJpc0Jhbm5lckZhcVJlYWR5VG9BdXRvU2VuZCIsInJlc29sdmVBaUNoYXRCYWNrRGVzdGluYXRpb24iLCJyZXNvbHZlQ29tcHV0ZWRDdXJyZW50T3B0aW9uIiwicmVzb2x2ZUluaXRpYWxDdXJyZW50T3B0aW9uIiwicmVzb2x2ZUxlZ2FjeUNvbnRleHRTZXNzaW9uIiwicmVzb2x2ZVNpZGViYXJBZ2VudHNOYXZBY3RpdmUiLCJzaG91bGRSZXN0b3JlRXhwYW5kZWRQYW5lbCIsInNob3VsZFNraXBGbG9hdGluZ0RyYWdUYXJnZXQiLCJ2YWxpZGF0ZUFjY2Vzc0J5RmVhdHVyZSIsInJlc29sdmVIb3N0VGFrZW92ZXJFbnRpdHlTdGF0ZSIsImJ1aWxkSG9zdFRha2VvdmVyUGVyc2lzdENvbnRleHQiLCJidWlsZE1haWFQYW5lbFNlc3Npb25QYXRjaCIsImRpc3BhdGNoU2tpbGxNZW50aW9uSW5zZXJ0IiwiZW5zdXJlQWdlbnRzQmVmb3JlU2tpbGxVc2UiLCJyZXNvbHZlRmxvYXRpbmdQYW5lbERyYWdQb3NpdGlvbiIsInJlc29sdmVIb3N0VGFrZW92ZXJBZ2VudElkIiwicmVzb2x2ZU1haWFNb2RhbEkxOG5MYW5nIiwicmVzb2x2ZU1pbmltaXplZFJlc3RvcmVUYXJnZXQiLCJyZXNvbHZlTmV4dERyYWdQb3NpdGlvbiIsInJlc29sdmVVc2VySGFzQWdlbnRNYW5hZ2VtZW50UGVybWlzc2lvbnMiLCJzaG91bGRCYWNrQ2xlYXJQaW5uZWRDb250ZXh0Iiwic2hvdWxkQmFja1N0YXJ0TmV3Q2hhdFByZXNlcnZpbmdDb250ZXh0Iiwic2hvdWxkTWFya09yY2hlc3RyYXRvckNvbnRleHRSZXNldCIsInNob3VsZFN0YXJ0TmV3Q2hhdEZyb21DYXRhbG9nIiwicmVzb2x2ZUhhc1Bpbm5lZENvbnRleHQiLCJyZXNvbHZlT3JjaGVzdHJhdG9ySG9tZU5hdkZsYWdzIiwic2hvdWxkU2hvd09yY2hlc3RyYXRvckJhY2tCdXR0b24iLCJzaG91bGRDbGVhckNsaWVudE9uR29Ib21lRnJvbUNoYXQiLCJzaG91bGRDbGVhclRhc2tPbkdvSG9tZUZyb21DaGF0Iiwic2hvdWxkUmVzZXRBZ2VudFRvRmlyc3RPbkdvSG9tZSIsInNob3VsZENsZWFyT3JjaGVzdHJhdG9yR2xvYmFsQ29udGV4dE9uR29Ib21lIiwic2hvdWxkVXNlQWN0aXZlQ2hhdFNlbmRIYW5kbGVyIiwic2hvdWxkUHJlZmV0Y2hBZ2VudHNGb3JDYXRhbG9nTmV3Q2hhdCIsImNhbk9wZW5NYWlhTWFya2V0cGxhY2UiLCJzaG91bGRNYXJrQWdlbnRBc0xlZ2FjeUNvbnRleHQiLCJidWlsZExlZ2FjeUNvbnRleHRBZ2VudCIsImJ1aWxkTGVnYWN5Q29udGV4dE1pZ3JhdGlvblBhdGNoIiwiZmluZE9yY2hlc3RyYXRvckFnZW50Iiwic2hvdWxkU2V0Q2hhdFZpZXdIaWRkZW5Pbk1vdW50Iiwic2hvdWxkUGVyc2lzdExhc3RBY3RpdmVDaGF0SWQiLCJzaG91bGRTeW5jUGFuZWxTZXNzaW9uT25QYWdlSGlkZSIsInJlc29sdmVDYWNoZWRBZ2VudHNJZkF2YWlsYWJsZSIsInNob3VsZEF0dGVtcHRJbml0aWFsQWdlbnRzRmV0Y2giLCJmaW5kQWdlbnRGb3JDaGF0SXRlbSIsInNob3VsZEFwcGx5Q2xpZW50T25Ib3N0VGFrZW92ZXIiLCJzaG91bGRTZWxlY3RGaXJzdEFnZW50T25Ib3N0VGFrZW92ZXIiLCJzaG91bGRSZXNldENoYXRTdGF0ZU9uR29Ib21lIiwic2hvdWxkQ2xlYXJDb250ZXh0Rm9yQ2F0YWxvZ09yU2tpbGxBZ2VudCIsInJlc29sdmVPcGVuTmV3Q2hhdFdpdGhBZ2VudENvbnRleHQiLCJjYW5Db250aW51ZUxlZ2FjeUNvbnRleHRJbk5ld0NoYXQiLCJyZXNvbHZlU2Vzc2lvblJlc3RvcmVOYXZSb3V0ZSIsInNob3VsZFNraXBBZ2VudHNMb2FkT25TZXNzaW9uUmVzdG9yZSIsInNob3VsZEZldGNoQWdlbnREZXRhaWxPblNlc3Npb25SZXN0b3JlIiwic2hvdWxkUGFzc0FnZW50VG9HZXRBZ2VudHNPblJlc3RvcmUiLCJzaG91bGRTZWxlY3RGZXRjaGVkQWdlbnRBZnRlclJlc3RvcmUiLCJyZXNvbHZlU25hcHNob3RDaGlwc1Byb2plY3QiLCJyZXNvbHZlQ2hhdE1vZGFsU2VjdGlvbkZsYWdzIiwic2hvdWxkUmVuZGVyQ2hhdFNpZGViYXIiLCJyZXNvbHZlQ2hhdE1vZGFsTWFpbkNvbnRlbnRWaWV3Iiwic2hvdWxkU2hvd0NoYXRNb2RhbEZvb3RlciIsInNob3VsZFVzZUVsZXZhdGVkTWFpYVBhbmVsIiwic2hvdWxkUmVzZWxlY3RBZ2VudEFmdGVyRGVsZXRlIiwic2hvdWxkQ2xlYXJEcmFnUG9zaXRpb25PbkxheW91dENoYW5nZSIsInNob3VsZFN0YXJ0RmxvYXRpbmdQYW5lbERyYWciLCJpc0FjdGl2ZUZsb2F0aW5nRHJhZ1BvaW50ZXIiLCJzaG91bGRPcGVuU2tpbGxzQ2F0YWxvZyIsInNob3VsZFVzZURyYWdDbGFtcEZhbGxiYWNrIiwicmVzb2x2ZUxheW91dERyYWdQb3NpdGlvblVwZGF0ZSIsInJlc29sdmVQZXJzaXN0ZWREcmFnUG9zaXRpb25PbkVuZCIsImJ1aWxkVXNlckluaXRpYWxNZXNzYWdlRnJvbVN0YXJ0Q2hhdCIsInNob3VsZFJlc2V0U2lkZWJhckVycm9yT25TdGFydENoYXQiLCJqc3giLCJfanN4IiwianN4cyIsIl9qc3hzIiwiRnJhZ21lbnQiLCJfRnJhZ21lbnQiLCJJRF9NT0RBTF9DSEFUX0FHRU5UIiwiQ2hhdEFJTW9kYWwiLCJfc2F2ZWRTZXNzaW9uT25Nb3VudFIiLCJfc2F2ZWRTZXNzaW9uT25Nb3VudFIyIiwiX3NhdmVkU2Vzc2lvbk9uTW91bnRSNSIsIl9zYXZlZFNlc3Npb25Pbk1vdW50UjYiLCJ1c2VyIiwiX3VzZVRyYW5zbGF0aW9uIiwiYWJtQWdlbnQiLCJpMThuIiwiYW1wbGl0dWRFdmVudCIsInNhdmVkU2Vzc2lvbk9uTW91bnRSZWYiLCJpZCIsInNob3VsZFJlc3RvcmVFeHBhbmRlZCIsImN1cnJlbnQiLCJwZW5kaW5nU2Vzc2lvblJlc3RvcmVSZWYiLCJzZXNzaW9uUmVzdG9yZVN0YXJ0ZWRSZWYiLCJfdXNlU3RhdGUiLCJfdXNlU3RhdGUyIiwiX3NsaWNlZFRvQXJyYXkiLCJpc1Jlc3RvcmluZ1Nlc3Npb24iLCJzZXRJc1Jlc3RvcmluZ1Nlc3Npb24iLCJzaWRlYmFyT3BlblJlZiIsInNpZGViYXJPcGVuIiwiX3VzZVN0YXRlMyIsIl91c2VTdGF0ZTQiLCJpc01pbmltaXplZCIsInNldElzTWluaW1pemVkIiwiaXNNYWlhUGFnZVJvdXRlIiwiaW5pdGlhbENoYXRzUmVmZXRjaERvbmVSZWYiLCJzZXRDaGF0Vmlld1Zpc2libGUiLCJzdGF0ZSIsInVucmVhZENvdW50Iiwic2hvd01pbmltaXplZE5vdmVsdHlEb3QiLCJhY3RpdmVDaGF0SWQiLCJoYXNBY3RpdmVTdHJlYW0iLCJtZXRhIiwiZ29Ub0NoYXRSZWYiLCJnb0hvbWVSZWYiLCJoYW5kbGVNaW5pbWl6ZSIsImFpQ2hhdE1pbmltaXplIiwiaXNFeHBhbmRlZCIsImZvY3VzQ2hhdElucHV0Iiwid2luZG93Iiwic2V0VGltZW91dCIsImRvY3VtZW50IiwiZGlzcGF0Y2hFdmVudCIsIkN1c3RvbUV2ZW50IiwiX3VzZVN0YXRlNSIsIm1lc3NhZ2UiLCJhdHRhY2htZW50cyIsIl91c2VTdGF0ZTYiLCJ1c2VySW5pdGlhbE1lc3NhZ2UiLCJzZXRVc2VySW5pdGlhbE1lc3NhZ2UiLCJfdXNlU3RhdGU3IiwiX3VzZVN0YXRlOCIsImluaXRpYWxDaGF0SWQiLCJzZXRJbml0aWFsQ2hhdElkIiwiX3VzZVN0YXRlOSIsIl91c2VTdGF0ZTAiLCJuZXdDaGF0S2V5Iiwic2V0TmV3Q2hhdEtleSIsIl91c2VTdGF0ZTEiLCJfdXNlU3RhdGUxMCIsInNlc3Npb25NZXRhIiwic2V0U2Vzc2lvbk1ldGEiLCJfdXNlU3RhdGUxMSIsIl91c2VTdGF0ZTEyIiwic2VuZE1lc3NhZ2VGdW5jdGlvbiIsInNldFNlbmRNZXNzYWdlRnVuY3Rpb24iLCJfdXNlU3RhdGUxMyIsIl91c2VTdGF0ZTE0Iiwic3RvcEdlbmVyYXRpb25GdW5jdGlvbiIsInNldFN0b3BHZW5lcmF0aW9uRnVuY3Rpb24iLCJfdXNlU3RhdGUxNSIsIl91c2VTdGF0ZTE2IiwiaXNTdHJlYW1pbmciLCJzZXRJc1N0cmVhbWluZyIsIl91c2VTdGF0ZTE3IiwiX3VzZVN0YXRlMTgiLCJpc1dyaXRpbmciLCJzZXRJc1dyaXRpbmciLCJfdXNlU3RhdGUxOSIsIl91c2VTdGF0ZTIwIiwicmVmZXRjaENoYXRzIiwic2V0UmVmZXRjaENoYXRzIiwiX3VzZVN0YXRlMjEiLCJzYXZlZCIsImFnZW50c05hdkFjdGl2ZSIsImN1cnJlbnRPcHRpb24iLCJfdXNlU3RhdGUyMiIsInNldEN1cnJlbnRPcHRpb24iLCJfdXNlU3RhdGUyMyIsIl91c2VTdGF0ZTI0IiwiaGFzRXJyb3IiLCJzZXRIYXNFcnJvciIsIl91c2VTdGF0ZTI1IiwiX3VzZVN0YXRlMjYiLCJkaWRSZXNldENvbnRleHRJblNlY3Rpb24iLCJzZXREaWRSZXNldENvbnRleHRJblNlY3Rpb24iLCJwcmV2SGFzUGlubmVkQ29udGV4dFJlZiIsImhhbmRsZXJzIiwiX3VzZVN0YXRlMjciLCJfdXNlU3RhdGUyOCIsInNpZGViYXJIYXNFcnJvciIsInNldFNpZGViYXJIYXNFcnJvciIsImxhbmciLCJsYW5ndWFnZSIsImxvY2FsZSIsIl91c2VHbG9iYWxDb250ZXh0Iiwic2VsZWN0QWdlbnQiLCJjbGVhckFnZW50Iiwic2VjdGlvbiIsImFnZW50IiwicHJvamVjdCIsImNsaWVudCIsInRhc2siLCJjaGlwc1Byb2plY3QiLCJ0b2dnbGVXZWJTZWFyY2giLCJpc1dlYlNlYXJjaEFjdGl2ZSIsInNldENoaXBzUHJvamVjdCIsInNldENsaWVudCIsInNldFByb2plY3QiLCJiYW5uZXJFbnRyeUZhcSIsInNldFRhc2siLCJ0b29sdGlwWkluZGV4IiwiX3VzZUdldEFnZW50cyIsImhhbmRsZUdvSG9tZSIsImhvbWUiLCJhZ2VudHMiLCJsb2FkaW5nIiwibG9hZGluZ01vcmUiLCJhZ2VudEVycm9yIiwiZXJyb3IiLCJoYW5kbGVHZXRBZ2VudHMiLCJsb2FkTW9yZUFnZW50cyIsInNlYXJjaEN1c3RvbUFnZW50cyIsInNlYXJjaExvYWRpbmciLCJhZGRBZ2VudCIsInJlbW92ZUFnZW50IiwidXBkYXRlQWdlbnQiLCJ1cGRhdGVBZ2VudEZhdm9yaXRlIiwic2VsZWN0Rmlyc3RBZ2VudCIsInNvcnRBZ2VudHNMaXN0IiwiYWdlbnRzRGF0YVJlZiIsImRhdGEiLCJfdXNlR2V0U2tpbGxzIiwibXlTa2lsbHMiLCJzaGFyZWRTa2lsbHMiLCJsb2FkaW5nU2tpbGxzIiwiaGFuZGxlR2V0U2tpbGxzIiwiYWRkU2tpbGwiLCJ1cGRhdGVTa2lsbEluTGlzdCIsInJlbW92ZVNraWxsIiwidXNlckhhc1Blcm1pc3Npb25zIiwicGVybWlzc2lvbnMiLCJCb29sZWFuIiwiTUFJQV9DSEFUX0FJX0ZFQVRVUkVfQUNDRVNTX01VTFRJX0FHRU5UUyIsInVzZXJIYXNTa2lsbHNBY2Nlc3MiLCJjb21wdXRlZEN1cnJlbnRPcHRpb24iLCJtdWx0aUFnZW50c0FjY2VzcyIsImlzTWFpYWtlckFnZW50U2VsZWN0ZWQiLCJzaWRlYmFyQWdlbnRzTmF2QWN0aXZlIiwiYWdlbnRzRmV0Y2hlZFJlZiIsInNlbGVjdG9yIiwicXVlcnlTZWxlY3RvciIsImNvbmNhdCIsIl91c2VTdGF0ZTI5IiwiX3VzZVN0YXRlMzAiLCJsYXlvdXRNb2RlIiwic2V0TGF5b3V0TW9kZSIsImhhbmRsZUxheW91dE1vZGVDaGFuZ2UiLCJtb2RlIiwiZXhwYW5kZWQiLCJpc0Zsb2F0aW5nIiwiY29udGVudFdyYXBwZXJSZWYiLCJfdXNlU3RhdGUzMSIsIl9zYXZlZFNlc3Npb25Pbk1vdW50UjMiLCJfc2F2ZWRTZXNzaW9uT25Nb3VudFI0IiwiZHJhZ1Bvc2l0aW9uIiwiX3VzZVN0YXRlMzIiLCJzZXREcmFnUG9zaXRpb24iLCJfdXNlRmxvYXRpbmdQYW5lbERyYWciLCJ0aWx0TW90aW9uIiwic3RhcnRQb2ludGVyVHJhY2tpbmciLCJzYW1wbGVQb2ludGVyTW92ZSIsImVuZFBvaW50ZXJUcmFja2luZyIsImRyYWdTdGF0ZVJlZiIsImNsYW1wRHJhZ1Bvc2l0aW9uIiwieCIsInkiLCJjb250ZW50V3JhcHBlciIsIl9nZXRCb3VuZGluZ0NsaWVudFJlYyIsImdldEJvdW5kaW5nQ2xpZW50UmVjdCIsIndpZHRoIiwiaGVpZ2h0IiwiaW5uZXJXaWR0aCIsImlubmVySGVpZ2h0IiwicHJldiIsInBhbmVsV2lkdGgiLCJwYWQiLCJoYW5kbGVEcmFnRW5kIiwiZXZlbnQiLCJfZHJhZ1N0YXRlUmVmJGN1cnJlbnQiLCJwb2ludGVySWQiLCJib2R5Iiwic3R5bGUiLCJ1c2VyU2VsZWN0IiwiY3Vyc29yIiwicmVjdCIsImxlZnQiLCJ0b3AiLCJoYW5kbGVEcmFnTW92ZSIsImRyYWdTdGF0ZSIsImNsaWVudFgiLCJjbGllbnRZIiwibmV4dFBvc2l0aW9uIiwib2Zmc2V0WCIsIm9mZnNldFkiLCJyZXNvbHZlZERyYWdQb3NpdGlvbiIsInZpZXdwb3J0V2lkdGgiLCJjbGFtcCIsImhhbmRsZURyYWdTdGFydCIsImJ1dHRvbiIsInRhcmdldCIsImluaXRpYWxQb3NpdGlvbiIsInBvaW50ZXJPZmZzZXRYIiwicG9pbnRlck9mZnNldFkiLCJjdXJyZW50VGFyZ2V0Iiwic2V0UG9pbnRlckNhcHR1cmUiLCJwcmV2ZW50RGVmYXVsdCIsImFpQ2hhdERyYWdnYWJsZSIsInN0YXJ0Q2hhdCIsImZhcUlkIiwiYWdlbnRTdWdnZXN0aW9uSWQiLCJtZW50aW9ucyIsImZ1YUlkIiwic2NJZCIsImNvbnRleHREYXRhIiwiY2hhdCIsImJhbm5lckZhcUF1dG9TZW50UmVmIiwiYmFubmVyRmFxIiwiZmFxVGl0bGUiLCJhbHJlYWR5U2VudCIsImFnZW50SWQiLCJwcm9qZWN0SWQiLCJjbGllbnRJZCIsInVuZGVmaW5lZCIsImVudGl0eSIsImdvVG9DaGF0Iiwic2Vzc2lvbklkIiwic2Vzc2lvbkV4dGVybmFsSWQiLCJzZXRBY3RpdmVDaGF0SWQiLCJkZXRhaWwiLCJzZWxlY3RlZEFnZW50IiwiaGFuZGxlU2lkZWJhck9wZW5DaGFuZ2UiLCJvcGVuIiwic3luY1BhbmVsU2Vzc2lvbiIsIl9hZ2VudCRpZCIsInBhdGNoIiwiaG9zdENvbnRleHQiLCJlbnN1cmVBZ2VudHNMb2FkZWQiLCJfYXN5bmNUb0dlbmVyYXRvciIsIl9yZWdlbmVyYXRvclJ1bnRpbWUiLCJtYXJrIiwiX2NhbGxlZSIsImNhY2hlZEFnZW50cyIsImxvYWRlZEFnZW50cyIsImxvYWRlZEZyb21GZXRjaCIsIndyYXAiLCJfY29udGV4dCIsIm5leHQiLCJhYnJ1cHQiLCJsZW5ndGgiLCJzZW50Iiwic3RvcCIsInRpbWVyIiwiY2xlYXJUaW1lb3V0Iiwib25QYWdlSGlkZSIsImFkZEV2ZW50TGlzdGVuZXIiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwiaGFuZGxlUmVzdG9yZUZyb21NaW5pbWl6ZWQiLCJfZ2V0Q2hhdHNTdG9yZVN0YXRlIiwiY2hhdHMiLCJsYXN0QWN0aXZlQ2hhdElkIiwiX2dvVG9DaGF0UmVmJGN1cnJlbnQiLCJjYWxsIiwiX2dvSG9tZVJlZiRjdXJyZW50IiwiYWlDaGF0T3BlbiIsIm9wdGlvbiIsInRoZW4iLCJhcHBseUV4cGFuZGVkSG9zdFRha2VvdmVyIiwiZW50aXR5U3RhdGUiLCJnZXRTdGF0ZSIsImNsZWFyRmFxcyIsImNsZWFyR2xvYmFsUGlubmVkQ29udGV4dCIsIm5leHRMYXlvdXQiLCJmYXEiLCJfYWdlbnQkaWQyIiwicmVzb2x2ZWRBZ2VudElkIiwiaGFuZGxlU2VuZE1lc3NhZ2VSZWFkeSIsInNlbmRNZXNzYWdlIiwic3RvcEdlbmVyYXRpb24iLCJzdHJlYW1pbmciLCJ3cml0aW5nIiwiaGFuZGxlU2VuZE1lc3NhZ2UiLCJ0eXBlIiwic3RhcnROZXdDaGF0RnJvbUNhdGFsb2ciLCJfY2FsbGVlMiIsImFnZW50c0xpc3QiLCJmaXJzdEFnZW50IiwiX3QiLCJfY29udGV4dDIiLCJteUFnZW50cyIsImhhbmRsZVN0YXJ0TmV3Q2hhdCIsImhhbmRsZVJlc2V0Q2hhdCIsIl9jYWxsZWUzIiwiX2NvbnRleHQzIiwiaGFuZGxlQmFjayIsInRvIiwiYWlDaGF0QmFjayIsInBpbm5lZCIsInRhc2tJZCIsImNoaXBzUHJvamVjdElkIiwid2FzUGlubmVkIiwib25NZXJnZUNyZWF0ZWRBZ2VudCIsImV2dCIsIl9yZWY0IiwibmV4dEFnZW50IiwibmF2aWdhdGVIb21lIiwib25TeW5jRWRpdGVkQWdlbnQiLCJfcmVmNSIsIm9wZW5DaGF0VmlldyIsIm9wZW5Ib21lIiwib3BlbkZyb21Ib3N0IiwiX3JlZjYiLCJvcGVuTmV3Q2hhdFdpdGhBZ2VudCIsIl9yZWY3IiwiY29udGV4dFBhdGNoIiwic2hvdWxkU2V0VGFzayIsIl9jb250ZXh0UGF0Y2gkdGFzayIsImFwcGx5U2tpbGxVc2VGbG93IiwiX3JlZjgiLCJfY2FsbGVlNCIsInNraWxsIiwidXNlRmlyc3RBZ2VudCIsIl9jb250ZXh0NCIsIl94IiwiX3gyIiwiYXBwbHkiLCJhcmd1bWVudHMiLCJoYW5kbGVVc2VTa2lsbEFmdGVyU2F2ZSIsIl9yZWY5IiwiX3JlZjkkdXNlRmlyc3RBZ2VudCIsIm9uU2Vzc2lvbk1ldGEiLCJfcmVmMCIsImxlZ2FjeUNvbnRleHRTZXNzaW9uIiwiaGFuZGxlQ29udGludWVMZWdhY3lDb250ZXh0SW5OZXdDaGF0IiwiX2J1aWxkTGVnYWN5Q29udGV4dE1pIiwib3JjaGVzdHJhdG9yIiwiYWdlbnRFbnRpdHkiLCJwSWQiLCJwTmFtZSIsInByb2plY3ROYW1lIiwiY0lkIiwiY05hbWUiLCJjbGllbnROYW1lIiwidElkIiwidE5hbWUiLCJ0YXNrTmFtZSIsIm1pZ3JhdGlvblBhdGNoIiwiX3VzZU1lbW8iLCJzaG93TmV3Q2hhdCIsImlzTXlBZ2VudHNTZWN0aW9uIiwiaXNNeVNraWxsc1NlY3Rpb24iLCJpc01haWFrZXJDcmVhdG9ySG9tZSIsImhhc0NoYXRBY2Nlc3MiLCJtYWluQ29udGVudFZpZXciLCJzaG93TW9kYWxGb290ZXIiLCJob21lT3B0aW9uIiwiY2hhdE9wdGlvbiIsImFnZW50c0NvdW50IiwiaGFzQWNjZXNzIiwic2hvd1NpZGViYXIiLCJoYXNQaW5uZWRDb250ZXh0IiwiX3Jlc29sdmVPcmNoZXN0cmF0b3JIIiwiaXNDaGF0VmlldyIsImlzSGVhZGVySG9tZVN0ZXAyIiwiaXNTZWN0aW9uUmVzZXRIb21lU3RlcDIiLCJzaG93QmFja0J1dHRvbiIsImFnZW50VHlwZSIsImhhbmRsZU9wZW5NYXJrZXRwbGFjZSIsIl9jYWxsZWU1IiwiX2NvbnRleHQ1IiwiaGFuZGxlT3BlblNraWxscyIsImhhbmRsZUdvVG9NYWlha2VyIiwiX2NhbGxlZTYiLCJtYWlha2VyQWdlbnQiLCJyZXNwb25zZSIsIl90MiIsIl9jb250ZXh0NiIsImZpbmQiLCJhIiwicGF0aCIsIm1ldGhvZCIsImpzb24iLCJsb2FkQWdlbnRzRm9yU2Vzc2lvblJlc3RvcmUiLCJfcmVmMTEiLCJfY2FsbGVlNyIsInNuYXBzaG90IiwiYWdlbnRUb1NlbGVjdCIsIl90MyIsIl9jb250ZXh0NyIsIl94MyIsImFwcGx5U2Vzc2lvblJlc3RvcmUiLCJfcmVmMTIiLCJfY2FsbGVlOCIsImNoaXBzUHJvamVjdEZyb21TbmFwc2hvdCIsInJlc3RvcmVSb3V0ZSIsIl9zbmFwc2hvdCRhY3RpdmVDaGF0SSIsIl9zbmFwc2hvdCRhY3RpdmVDaGF0STIiLCJfY29udGV4dDgiLCJfeDQiLCJydW5SZXN0b3JlIiwiX3JlZjEzIiwiX2NhbGxlZTkiLCJfY29udGV4dDkiLCJmaW5pc2giLCJoYW5kbGVEZWxldGVBZ2VudEZyb21NeUFnZW50cyIsIm1vZGFsUGFuZWwiLCJjaGlsZHJlbiIsIm9uR29Ub0NoYXQiLCJvbkVycm9yIiwiaGFuZGxlR29Ub0hvbWUiLCJoYW5kbGVTZXRSZWZldGNoQ2hhdHMiLCJvbk9wZW5NYWlha2VyQ3JlYXRvciIsImlzTGVnYWN5Q29udGV4dFNlc3Npb24iLCJpbml0aWFsT3BlbiIsIm9uT3BlbkNoYW5nZSIsImZsb2F0aW5nIiwib25MYXlvdXRNb2RlQ2hhbmdlIiwiZHJhZ2dhYmxlIiwib25EcmFnU3RhcnQiLCJvbkRyYWdNb3ZlIiwib25EcmFnRW5kIiwiaGFzTW9yZSIsImhhc19tb3JlIiwib25BZ2VudFVwZGF0ZSIsImlzTWFpYWtlclNlY3Rpb24iLCJvbkJhY2siLCJfb2JqZWN0U3ByZWFkIiwicmVmcyIsIm9uU2VuZE1lc3NhZ2VSZWFkeSIsImxvYWRpbmdBZ2VudHMiLCJvbkRlbGV0ZUFnZW50Iiwib25GYXZvcml0ZUFnZW50VXBkYXRlIiwiaGFzTW9yZUFnZW50cyIsImxvYWRpbmdNb3JlQWdlbnRzIiwib25Mb2FkTW9yZUFnZW50cyIsIm9uR29Ub01haWFrZXIiLCJvbkRlbGV0ZVNraWxsIiwib25TZWFyY2hBZ2VudHMiLCJzZWFyY2hMb2FkaW5nQWdlbnRzIiwib25SZXN0YXJ0U3VtbWFyeSIsImhhbmRsZVN0b3BHZW5lcmF0aW9uIiwiY2hhdElkIiwib25Db250aW51ZUluTmV3Q2hhdCIsInJlZiIsImNyZWF0ZVBvcnRhbCIsImVsZXZhdGVkIiwiJG1pbmltaXplZCIsIiRoaWRkZW4iLCJ0aWx0Iiwic2hvd05vdmVsdHlEb3QiLCJvblJlc3RvcmUiXSwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50cy9tb2xlY3VsZXMvQ2hhdEFJTW9kYWwvQ2hhdEFJTW9kYWwudHN4Il0sInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIG5vLW5lc3RlZC10ZXJuYXJ5ICovXG4vKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvaW5kZW50ICovXG4vKiBlc2xpbnQtZGlzYWJsZSByZWFjdC9qc3gtbm8tdXNlbGVzcy1mcmFnbWVudCAqL1xuLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSAqL1xuLyogZXNsaW50LWRpc2FibGUgcmVhY3Qvbm8tYXJyYXktaW5kZXgta2V5ICovXG4vKiBlc2xpbnQtZGlzYWJsZSBqc3gtYTExeS9jbGljay1ldmVudHMtaGF2ZS1rZXktZXZlbnRzICovXG4vKiBlc2xpbnQtZGlzYWJsZSBqc3gtYTExeS9uby1zdGF0aWMtZWxlbWVudC1pbnRlcmFjdGlvbnMgKi9cbi8qIGVzbGludC1kaXNhYmxlIHJlYWN0L2Z1bmN0aW9uLWNvbXBvbmVudC1kZWZpbml0aW9uICovXG4vKiBlc2xpbnQtZGlzYWJsZSByZWFjdC9yZXF1aXJlLWRlZmF1bHQtcHJvcHMgKi9cbi8qIGVzbGludC1kaXNhYmxlIG5vLWNvbnNvbGUgKi9cbmltcG9ydCB7XG4gIHVzZUNhbGxiYWNrLFxuICB1c2VNZW1vLFxuICB1c2VTdGF0ZSxcbiAgdXNlUmVmLFxuICB1c2VFZmZlY3QsXG4gIHVzZUxheW91dEVmZmVjdCxcbiAgUG9pbnRlckV2ZW50IGFzIFJlYWN0UG9pbnRlckV2ZW50LFxufSBmcm9tICdyZWFjdCdcbmltcG9ydCBSZWFjdERPTSBmcm9tICdyZWFjdC1kb20nXG5pbXBvcnQgbW9tZW50IGZyb20gJ21vbWVudCdcbmltcG9ydCB7IHVzZVRyYW5zbGF0aW9uIH0gZnJvbSAncmVhY3QtaTE4bmV4dCdcbmltcG9ydCB7IHVzZVVzZXIgfSBmcm9tICcuLi8uLi8uLi9jb250ZXh0L2Nvci11c2VyJ1xuaW1wb3J0IHsgY2FuQWNjZXNzVG9Ta2lsbHMgfSBmcm9tICcuLi8uLi8uLi9jb25zdGFudHMvcGVybWlzc2lvbnMnXG5pbXBvcnQgeyBNQUlBRXJyb3IgfSBmcm9tICcuLi8uLi9hdG9tcy9NQUlBRXJyb3InXG5pbXBvcnQgeyB1c2VNYWlhVGFza1BhbmVsWkluZGV4IH0gZnJvbSAnLi4vLi4vLi4vaG9va3MvdXNlTWFpYVRhc2tQYW5lbFpJbmRleCdcblxuaW1wb3J0IHsgQ2hhdEFJQ29udGVudCB9IGZyb20gJy4uL0NoYXRBSUNvbnRlbnQnXG5pbXBvcnQgeyBidWlsZEhhbmRsZXJzLCBvcHRpb25zIH0gZnJvbSAnLi9jb25zdGFudHMnXG5pbXBvcnQgeyBTaWRlYmFyIH0gZnJvbSAnLi4vU2lkZWJhcidcbmltcG9ydCB7IHVzZUdldEFnZW50cyB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL21haWEvQWdlbnRzL2dldEFnZW50cydcbmltcG9ydCB7IHVzZUdldFNraWxscyB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL21haWEvU2tpbGxzL2dldFNraWxscydcbmltcG9ydCB7IHVzZUdsb2JhbENvbnRleHQsIHR5cGUgU2VjdGlvbiB9IGZyb20gJy4uLy4uLy4uL2NvbnRleHQvZ2xvYmFsLWNvbnRleHQnXG5pbXBvcnQgeyBBdHRhY2htZW50RmlsZSB9IGZyb20gJy4uL0NoYXRGb290ZXIvQ2hhdEZvb3RlcidcbmltcG9ydCB7IENvbnRleHRNZW50aW9uIH0gZnJvbSAnLi4vLi4vLi4vdHlwZXMvY29udGV4dE1lbnRpb24nXG5pbXBvcnQgeyBDaGF0QUlNb2RhbEhlYWRlciB9IGZyb20gJy4vY29tcG9uZW50cy9DaGF0QWlNb2RhbEhlYWRlci9DaGF0QWlNb2RhbEhlYWRlcidcbmltcG9ydCB7IFNuYWNrYmFyIH0gZnJvbSAnLi4vLi4vb3JnYW5pc21zL1NuYWNrQmFyL1NuYWNrYmFyJ1xuaW1wb3J0IHsgUHJvamVjdFN1bW1hcnlDb250ZW50IH0gZnJvbSAnLi4vUHJvamVjdFN1bW1hcnlDb250ZW50J1xuaW1wb3J0IHsgQWJtQWdlbnRNb2RhbCB9IGZyb20gJy4uLy4uL29yZ2FuaXNtcy9BYm1BZ2VudE1vZGFsL0FibUFnZW50TW9kYWwnXG5pbXBvcnQgeyBBYm1Ta2lsbE1vZGFsLCBTS0lMTF9VU0VfQUZURVJfU0FWRV9FVkVOVCB9IGZyb20gJy4uLy4uL29yZ2FuaXNtcy9BYm1Ta2lsbE1vZGFsL0FibVNraWxsTW9kYWwnXG5pbXBvcnQgeyBBYm1Ta2lsbEdlbmVyYXRlTW9kYWwgfSBmcm9tICcuLi8uLi9vcmdhbmlzbXMvQWJtU2tpbGxHZW5lcmF0ZU1vZGFsL0FibVNraWxsR2VuZXJhdGVNb2RhbCdcbmltcG9ydCB7IFNFQ1RJT05TIH0gZnJvbSAnLi4vLi4vLi4vY29uc3RhbnRzL2NvbmZpZydcbmltcG9ydCB7IFNDQ0FJTUNvbnRlbnQsIFNDQ0FJTUNvbnRlbnRXcmFwcGVyLCBTQ0NBSU1NaW5pbWl6ZWRIaWRlLCBTQ0NBSU1XcmFwcGVyIH0gZnJvbSAnLi9DaGF0QUlNb2RhbC5zdHlsZXMnXG5pbXBvcnQgeyBNYWlhTWluaW1pemVkUGlsbCB9IGZyb20gJy4vY29tcG9uZW50cy9NYWlhTWluaW1pemVkUGlsbCdcbmltcG9ydCB7IHVzZU1pbmltaXplZFBpbGxOb3ZlbHR5RG90IH0gZnJvbSAnLi4vLi4vLi4vaG9va3MvdXNlTWluaW1pemVkUGlsbE5vdmVsdHlEb3QnXG5pbXBvcnQge1xuICBnZXRNYWlhRmxvYXRpbmdQYW5lbFdpZHRoUHgsXG4gIE1haWFDaGF0TW9kYWxMYXlvdXRNb2RlLFxuICByZXNvbHZlSW5pdGlhbE1haWFDaGF0TGF5b3V0TW9kZSxcbiAgc2V0U3RvcmVkTWFpYUNoYXRMYXlvdXRNb2RlLFxufSBmcm9tICcuL2xheW91dCdcbmltcG9ydCB7IEZsb2F0aW5nUGFuZWxNb3Rpb24sIHVzZUZsb2F0aW5nUGFuZWxEcmFnVGlsdCB9IGZyb20gJy4vZmxvYXRpbmdQYW5lbE1vdGlvbidcbmltcG9ydCB7IENoYXRBaU1vZGFsRm9vdGVyIH0gZnJvbSAnLi9jb21wb25lbnRzL0NoYXRBaU1vZGFsRm9vdGVyJ1xuaW1wb3J0IHsgaXNNYXJrZXRwbGFjZUdsb2JhbENsb25lQWdlbnQgfSBmcm9tICcuLi8uLi8uLi91dGlscy9hZ2VudERpc3BsYXlOYW1lJ1xuaW1wb3J0IHsgQWdlbnQgfSBmcm9tICcuLi8uLi8uLi90eXBlcy9hZ2VudCdcbmltcG9ydCB7IFNraWxsIH0gZnJvbSAnLi4vLi4vLi4vdHlwZXMvc2tpbGwnXG5pbXBvcnQgeyBQcm9qZWN0IH0gZnJvbSAnLi4vLi4vLi4vdHlwZXMvUHJvamVjdCdcbmltcG9ydCB7IENsaWVudCB9IGZyb20gJy4uLy4uLy4uL3R5cGVzL0NsaWVudCdcbmltcG9ydCB7IFRhc2sgfSBmcm9tICcuLi8uLi8uLi90eXBlcy9UYXNrJ1xuaW1wb3J0IHsgdXNlRmFxc1N0b3JlIH0gZnJvbSAnLi4vLi4vLi4vc3RvcmUvdXNlRmFxc1N0b3JlJ1xuaW1wb3J0IHsgZ2V0Q2hhdHNTdG9yZVN0YXRlLCB1c2VDaGF0c1N0b3JlIH0gZnJvbSAnLi4vLi4vLi4vc3RvcmUvdXNlQ2hhdHNTdG9yZSdcbmltcG9ydCB0eXBlIHsgQ2hhdExpc3RJdGVtIH0gZnJvbSAnLi4vLi4vLi4vc3RvcmUvY2hhdHNTdG9yZS50eXBlcydcbmltcG9ydCB7IHJlYWRMYXN0QWN0aXZlQ2hhdElkLCB3cml0ZUxhc3RBY3RpdmVDaGF0SWQgfSBmcm9tICcuLi8uLi8uLi9zdG9yZS9tYWlhTGFzdENoYXRQZXJzaXN0ZW5jZSdcbmltcG9ydCB7XG4gIGNsZWFyTWFpYVBhbmVsU2Vzc2lvbixcbiAgcGF0Y2hNYWlhUGFuZWxTZXNzaW9uLFxuICByZWFkTWFpYVBhbmVsU2Vzc2lvbixcbiAgdHlwZSBNYWlhUGFuZWxTZXNzaW9uU25hcHNob3QsXG4gIHdyaXRlTWFpYVBhbmVsU2Vzc2lvbixcbn0gZnJvbSAnLi4vLi4vLi4vc3RvcmUvbWFpYVBhbmVsU2Vzc2lvblBlcnNpc3RlbmNlJ1xuaW1wb3J0IHsgdXNlU2Vzc2lvbnNTdG9yZSB9IGZyb20gJy4uLy4uLy4uL3N0b3JlL3Nlc3Npb25zL3VzZVNlc3Npb25zU3RvcmUnXG5pbXBvcnQgeyBmZXRjaE1haWEgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9tYWlhL2NsaWVudCdcbmltcG9ydCB7IGZldGNoQWdlbnREZXRhaWwgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9tYWlhL0FnZW50cy9mZXRjaEFnZW50RGV0YWlsJ1xuaW1wb3J0IHsgbWFwQ09STGFuZyB9IGZyb20gJy4uLy4uLy4uL2xhbmcvdXRpbHMnXG5pbXBvcnQgeyBFVkVOVFMsIHVzZUV2ZW50IH0gZnJvbSAnLi4vLi4vLi4vaG9va3MvdXNlRXZlbnQnXG5pbXBvcnQgeyBNQUlBX09QRU5fRlJPTV9IT1NUX0VWRU5ULCB0eXBlIE1haWFIb3N0T3BlbkRldGFpbCB9IGZyb20gJy4uLy4uLy4uL3V0aWxzL21haWFIb3N0T3BlbidcbmltcG9ydCB7IHVzZUlzTWFpYVBhZ2VSb3V0ZSB9IGZyb20gJy4uLy4uLy4uL2hvb2tzL3VzZUlzTWFpYVBhZ2VSb3V0ZSdcbmltcG9ydCB7XG4gIGNsYW1wRmxvYXRpbmdQYW5lbFBvc2l0aW9uLFxuICBoYXNBbnlBY3RpdmVTZXNzaW9uSW5NZXRhLFxuICBoYXNCYW5uZXJGYXFUaXRsZSxcbiAgaXNCYW5uZXJGYXFSZWFkeVRvQXV0b1NlbmQsXG4gIHJlc29sdmVBaUNoYXRCYWNrRGVzdGluYXRpb24sXG4gIHJlc29sdmVDb21wdXRlZEN1cnJlbnRPcHRpb24sXG4gIHJlc29sdmVJbml0aWFsQ3VycmVudE9wdGlvbixcbiAgcmVzb2x2ZUxlZ2FjeUNvbnRleHRTZXNzaW9uLFxuICByZXNvbHZlU2lkZWJhckFnZW50c05hdkFjdGl2ZSxcbiAgc2hvdWxkUmVzdG9yZUV4cGFuZGVkUGFuZWwsXG4gIHNob3VsZFNraXBGbG9hdGluZ0RyYWdUYXJnZXQsXG4gIHZhbGlkYXRlQWNjZXNzQnlGZWF0dXJlLFxuICByZXNvbHZlSG9zdFRha2VvdmVyRW50aXR5U3RhdGUsXG4gIGJ1aWxkSG9zdFRha2VvdmVyUGVyc2lzdENvbnRleHQsXG4gIGJ1aWxkTWFpYVBhbmVsU2Vzc2lvblBhdGNoLFxuICBkaXNwYXRjaFNraWxsTWVudGlvbkluc2VydCxcbiAgZW5zdXJlQWdlbnRzQmVmb3JlU2tpbGxVc2UsXG4gIHJlc29sdmVGbG9hdGluZ1BhbmVsRHJhZ1Bvc2l0aW9uLFxuICByZXNvbHZlSG9zdFRha2VvdmVyQWdlbnRJZCxcbiAgcmVzb2x2ZU1haWFNb2RhbEkxOG5MYW5nLFxuICByZXNvbHZlTWluaW1pemVkUmVzdG9yZVRhcmdldCxcbiAgcmVzb2x2ZU5leHREcmFnUG9zaXRpb24sXG4gIHJlc29sdmVVc2VySGFzQWdlbnRNYW5hZ2VtZW50UGVybWlzc2lvbnMsXG4gIHNob3VsZEJhY2tDbGVhclBpbm5lZENvbnRleHQsXG4gIHNob3VsZEJhY2tTdGFydE5ld0NoYXRQcmVzZXJ2aW5nQ29udGV4dCxcbiAgc2hvdWxkTWFya09yY2hlc3RyYXRvckNvbnRleHRSZXNldCxcbiAgc2hvdWxkU3RhcnROZXdDaGF0RnJvbUNhdGFsb2csXG4gIHJlc29sdmVIYXNQaW5uZWRDb250ZXh0LFxuICByZXNvbHZlT3JjaGVzdHJhdG9ySG9tZU5hdkZsYWdzLFxuICBzaG91bGRTaG93T3JjaGVzdHJhdG9yQmFja0J1dHRvbixcbiAgc2hvdWxkQ2xlYXJDbGllbnRPbkdvSG9tZUZyb21DaGF0LFxuICBzaG91bGRDbGVhclRhc2tPbkdvSG9tZUZyb21DaGF0LFxuICBzaG91bGRSZXNldEFnZW50VG9GaXJzdE9uR29Ib21lLFxuICBzaG91bGRDbGVhck9yY2hlc3RyYXRvckdsb2JhbENvbnRleHRPbkdvSG9tZSxcbiAgc2hvdWxkVXNlQWN0aXZlQ2hhdFNlbmRIYW5kbGVyLFxuICBzaG91bGRQcmVmZXRjaEFnZW50c0ZvckNhdGFsb2dOZXdDaGF0LFxuICBjYW5PcGVuTWFpYU1hcmtldHBsYWNlLFxuICBzaG91bGRNYXJrQWdlbnRBc0xlZ2FjeUNvbnRleHQsXG4gIGJ1aWxkTGVnYWN5Q29udGV4dEFnZW50LFxuICBidWlsZExlZ2FjeUNvbnRleHRNaWdyYXRpb25QYXRjaCxcbiAgZmluZE9yY2hlc3RyYXRvckFnZW50LFxuICBzaG91bGRTZXRDaGF0Vmlld0hpZGRlbk9uTW91bnQsXG4gIHNob3VsZFBlcnNpc3RMYXN0QWN0aXZlQ2hhdElkLFxuICBzaG91bGRTeW5jUGFuZWxTZXNzaW9uT25QYWdlSGlkZSxcbiAgcmVzb2x2ZUNhY2hlZEFnZW50c0lmQXZhaWxhYmxlLFxuICBzaG91bGRBdHRlbXB0SW5pdGlhbEFnZW50c0ZldGNoLFxuICBmaW5kQWdlbnRGb3JDaGF0SXRlbSxcbiAgc2hvdWxkQXBwbHlDbGllbnRPbkhvc3RUYWtlb3ZlcixcbiAgc2hvdWxkU2VsZWN0Rmlyc3RBZ2VudE9uSG9zdFRha2VvdmVyLFxuICBzaG91bGRSZXNldENoYXRTdGF0ZU9uR29Ib21lLFxuICBzaG91bGRDbGVhckNvbnRleHRGb3JDYXRhbG9nT3JTa2lsbEFnZW50LFxuICByZXNvbHZlT3Blbk5ld0NoYXRXaXRoQWdlbnRDb250ZXh0LFxuICBjYW5Db250aW51ZUxlZ2FjeUNvbnRleHRJbk5ld0NoYXQsXG4gIHJlc29sdmVTZXNzaW9uUmVzdG9yZU5hdlJvdXRlLFxuICBzaG91bGRTa2lwQWdlbnRzTG9hZE9uU2Vzc2lvblJlc3RvcmUsXG4gIHNob3VsZEZldGNoQWdlbnREZXRhaWxPblNlc3Npb25SZXN0b3JlLFxuICBzaG91bGRQYXNzQWdlbnRUb0dldEFnZW50c09uUmVzdG9yZSxcbiAgc2hvdWxkU2VsZWN0RmV0Y2hlZEFnZW50QWZ0ZXJSZXN0b3JlLFxuICByZXNvbHZlU25hcHNob3RDaGlwc1Byb2plY3QsXG4gIHJlc29sdmVDaGF0TW9kYWxTZWN0aW9uRmxhZ3MsXG4gIHNob3VsZFJlbmRlckNoYXRTaWRlYmFyLFxuICByZXNvbHZlQ2hhdE1vZGFsTWFpbkNvbnRlbnRWaWV3LFxuICBzaG91bGRTaG93Q2hhdE1vZGFsRm9vdGVyLFxuICBzaG91bGRVc2VFbGV2YXRlZE1haWFQYW5lbCxcbiAgc2hvdWxkUmVzZWxlY3RBZ2VudEFmdGVyRGVsZXRlLFxuICBzaG91bGRDbGVhckRyYWdQb3NpdGlvbk9uTGF5b3V0Q2hhbmdlLFxuICBzaG91bGRTdGFydEZsb2F0aW5nUGFuZWxEcmFnLFxuICBpc0FjdGl2ZUZsb2F0aW5nRHJhZ1BvaW50ZXIsXG4gIHNob3VsZE9wZW5Ta2lsbHNDYXRhbG9nLFxuICBzaG91bGRVc2VEcmFnQ2xhbXBGYWxsYmFjayxcbiAgcmVzb2x2ZUxheW91dERyYWdQb3NpdGlvblVwZGF0ZSxcbiAgcmVzb2x2ZVBlcnNpc3RlZERyYWdQb3NpdGlvbk9uRW5kLFxuICBidWlsZFVzZXJJbml0aWFsTWVzc2FnZUZyb21TdGFydENoYXQsXG4gIHNob3VsZFJlc2V0U2lkZWJhckVycm9yT25TdGFydENoYXQsXG4gIHR5cGUgTGVnYWN5U2Vzc2lvbk1ldGEsXG59IGZyb20gJy4vQ2hhdEFJTW9kYWwuaGVscGVycydcblxuLyoqIE1ldGFkYXRhIGRlIGxhIHNlc3Npb24gYWJpZXJ0YSAoZW1pdGlkYSBwb3IgdXNlQ2hhdE1lc3NhZ2VzIGFsIGNhcmdhciB1bmEgY29udmVyc2FjacOzbikuICovXG50eXBlIFNlc3Npb25NZXRhID0gTGVnYWN5U2Vzc2lvbk1ldGEgJiB7XG4gIGNoYXRJZDogc3RyaW5nXG4gIHByb2plY3RJZD86IG51bWJlclxuICBjbGllbnRJZD86IG51bWJlclxuICB0YXNrSWQ/OiBudW1iZXJcbn1cblxuZXhwb3J0IGNvbnN0IElEX01PREFMX0NIQVRfQUdFTlQgPSAnbW9kYWxzLXBvcnRhbC1tYWlhLWNoYXQtYWdlbnQnXG5cbmV4cG9ydCBjb25zdCBDaGF0QUlNb2RhbCA9ICgpID0+IHtcbiAgY29uc3QgdXNlciA9IHVzZVVzZXIoKVxuICBjb25zdCB7IGkxOG4gfSA9IHVzZVRyYW5zbGF0aW9uKFtTRUNUSU9OUy5hYm1BZ2VudF0pXG4gIGNvbnN0IGFtcGxpdHVkRXZlbnQgPSB1c2VFdmVudCgpXG5cbiAgY29uc3Qgc2F2ZWRTZXNzaW9uT25Nb3VudFJlZiA9IHVzZVJlZjxNYWlhUGFuZWxTZXNzaW9uU25hcHNob3QgfCBudWxsPihyZWFkTWFpYVBhbmVsU2Vzc2lvbih1c2VyLmlkKSlcbiAgY29uc3Qgc2hvdWxkUmVzdG9yZUV4cGFuZGVkID0gc2hvdWxkUmVzdG9yZUV4cGFuZGVkUGFuZWwoc2F2ZWRTZXNzaW9uT25Nb3VudFJlZi5jdXJyZW50KVxuICBjb25zdCBwZW5kaW5nU2Vzc2lvblJlc3RvcmVSZWYgPSB1c2VSZWY8TWFpYVBhbmVsU2Vzc2lvblNuYXBzaG90IHwgbnVsbD4oXG4gICAgc2hvdWxkUmVzdG9yZUV4cGFuZGVkID8gc2F2ZWRTZXNzaW9uT25Nb3VudFJlZi5jdXJyZW50IDogbnVsbFxuICApXG4gIGNvbnN0IHNlc3Npb25SZXN0b3JlU3RhcnRlZFJlZiA9IHVzZVJlZihmYWxzZSlcbiAgY29uc3QgW2lzUmVzdG9yaW5nU2Vzc2lvbiwgc2V0SXNSZXN0b3JpbmdTZXNzaW9uXSA9IHVzZVN0YXRlKCgpID0+IHBlbmRpbmdTZXNzaW9uUmVzdG9yZVJlZi5jdXJyZW50ICE9IG51bGwpXG4gIGNvbnN0IHNpZGViYXJPcGVuUmVmID0gdXNlUmVmKHNhdmVkU2Vzc2lvbk9uTW91bnRSZWYuY3VycmVudD8uc2lkZWJhck9wZW4gPz8gZmFsc2UpXG5cbiAgLy8gVHJhcyBuYXZlZ2FyIGVuIGVsIGhvc3QgKGZ1bGwgcGFnZSByZWxvYWQpLCByZXN0YXVyYW1vcyBlbCBwYW5lbCBzaSBlc3RhYmEgYWJpZXJ0by5cbiAgY29uc3QgW2lzTWluaW1pemVkLCBzZXRJc01pbmltaXplZF0gPSB1c2VTdGF0ZSgoKSA9PiAhc2hvdWxkUmVzdG9yZUV4cGFuZGVkKVxuICBjb25zdCBpc01haWFQYWdlUm91dGUgPSB1c2VJc01haWFQYWdlUm91dGUoKVxuICBjb25zdCBpbml0aWFsQ2hhdHNSZWZldGNoRG9uZVJlZiA9IHVzZVJlZihmYWxzZSlcbiAgY29uc3Qgc2V0Q2hhdFZpZXdWaXNpYmxlID0gdXNlQ2hhdHNTdG9yZShzdGF0ZSA9PiBzdGF0ZS5zZXRDaGF0Vmlld1Zpc2libGUpXG4gIGNvbnN0IHVucmVhZENvdW50ID0gdXNlQ2hhdHNTdG9yZShzdGF0ZSA9PiBzdGF0ZS51bnJlYWRDb3VudClcbiAgY29uc3Qgc2hvd01pbmltaXplZE5vdmVsdHlEb3QgPSB1c2VNaW5pbWl6ZWRQaWxsTm92ZWx0eURvdChpc01pbmltaXplZCwgdW5yZWFkQ291bnQpXG4gIGNvbnN0IGFjdGl2ZUNoYXRJZCA9IHVzZUNoYXRzU3RvcmUoc3RhdGUgPT4gc3RhdGUuYWN0aXZlQ2hhdElkKVxuICAvLyBMb3MgXCIuLi5cIiBkZWwgcGlsbCBzYWxlbiBkZWwgbW90b3IsIG5vIGRlIGlzU3RyZWFtaW5nL2lzV3JpdGluZzogZXNvcyByZWZsZWphblxuICAvLyBsYSBzZXNpw7NuIGFjdGl2YSB5IHF1ZWRhbiBzdGFsZSBjdWFuZG8gdW5hIHJlc3B1ZXN0YSB0ZXJtaW5hIGVuIGJhY2tncm91bmQuXG4gIGNvbnN0IGhhc0FjdGl2ZVN0cmVhbSA9IHVzZVNlc3Npb25zU3RvcmUoc3RhdGUgPT4gaGFzQW55QWN0aXZlU2Vzc2lvbkluTWV0YShzdGF0ZS5tZXRhKSlcblxuICAvKiogZ29Ub0NoYXQgLyBoYW5kbGVHb0hvbWUgc2UgZGVmaW5lbiBtw6FzIGFiYWpvOyBsb3MgcmVmcyBldml0YW4gZGVwZW5kZXIgZGVsIG9yZGVuIGRlIGRlY2xhcmFjacOzbi4gKi9cbiAgY29uc3QgZ29Ub0NoYXRSZWYgPSB1c2VSZWY8KChjaGF0OiBDaGF0TGlzdEl0ZW0pID0+IHZvaWQpIHwgbnVsbD4obnVsbClcbiAgY29uc3QgZ29Ib21lUmVmID0gdXNlUmVmPCgoKSA9PiB2b2lkKSB8IG51bGw+KG51bGwpXG5cbiAgLy8gTW9udGEgY2VycmFkYSBzYWx2byByZXN0YXVyYWNpw7NuIGRlIHNlc2nDs246IHNpIGVsIHBhbmVsIG5vIGVzdMOhIHZpc2libGUsIGxhcyByZXNwdWVzdGFzXG4gIC8vIG51ZXZhcyBxdWVkYW4gY29tbyBubyBsZcOtZGFzLlxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChzaG91bGRTZXRDaGF0Vmlld0hpZGRlbk9uTW91bnQocGVuZGluZ1Nlc3Npb25SZXN0b3JlUmVmLmN1cnJlbnQgIT0gbnVsbCkpIHtcbiAgICAgIHNldENoYXRWaWV3VmlzaWJsZShmYWxzZSlcbiAgICB9XG4gIH0sIFtzZXRDaGF0Vmlld1Zpc2libGVdKVxuXG4gIC8vIFBlcnNpc3RpbW9zIGxhIGNvbnZlcnNhY2nDs24gYWJpZXJ0YSBwYXJhIHBvZGVyIHZvbHZlciBhIGVsbGEgZGVzZGUgZWwgcGlsbCBkZXNwdcOpc1xuICAvLyBkZSBuYXZlZ2FyIG8gcmVmcmVzY2FyLiBFbCB0YWtlb3ZlciBkZXNkZSB1biBob3N0IGxhIGxpbXBpYSAodmEgYWwgSG9tZSkuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKHNob3VsZFBlcnNpc3RMYXN0QWN0aXZlQ2hhdElkKGFjdGl2ZUNoYXRJZCkpIHtcbiAgICAgIHdyaXRlTGFzdEFjdGl2ZUNoYXRJZCh1c2VyLmlkLCBhY3RpdmVDaGF0SWQpXG4gICAgfVxuICB9LCBbYWN0aXZlQ2hhdElkLCB1c2VyLmlkXSlcblxuICBjb25zdCBoYW5kbGVNaW5pbWl6ZSA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBhbXBsaXR1ZEV2ZW50KEVWRU5UUy5haUNoYXRNaW5pbWl6ZSlcbiAgICBzZXRJc01pbmltaXplZCh0cnVlKVxuICAgIHNldENoYXRWaWV3VmlzaWJsZShmYWxzZSlcbiAgICB3cml0ZU1haWFQYW5lbFNlc3Npb24odXNlci5pZCwgeyBpc0V4cGFuZGVkOiBmYWxzZSB9KVxuICB9LCBbYW1wbGl0dWRFdmVudCwgc2V0Q2hhdFZpZXdWaXNpYmxlLCB1c2VyLmlkXSlcblxuICBjb25zdCBmb2N1c0NoYXRJbnB1dCA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBkb2N1bWVudC5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgnbWFpYS1pbnB1dC1yZWZvY3VzJykpXG4gICAgfSwgMTAwKVxuICB9LCBbXSlcblxuICBjb25zdCBbdXNlckluaXRpYWxNZXNzYWdlLCBzZXRVc2VySW5pdGlhbE1lc3NhZ2VdID0gdXNlU3RhdGU8e1xuICAgIG1lc3NhZ2U6IHN0cmluZ1xuICAgIGF0dGFjaG1lbnRzOiBBdHRhY2htZW50RmlsZVtdXG4gICAgZmFxSWQ/OiBzdHJpbmdcbiAgICBhZ2VudFN1Z2dlc3Rpb25JZD86IHN0cmluZ1xuICAgIG1lbnRpb25zPzogQ29udGV4dE1lbnRpb25bXVxuICAgIGZ1YUlkPzogc3RyaW5nXG4gICAgc2NJZD86IHN0cmluZ1xuICAgIGNvbnRleHREYXRhPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj5cbiAgfT4oe1xuICAgIG1lc3NhZ2U6ICcnLFxuICAgIGF0dGFjaG1lbnRzOiBbXSxcbiAgfSlcbiAgY29uc3QgW2luaXRpYWxDaGF0SWQsIHNldEluaXRpYWxDaGF0SWRdID0gdXNlU3RhdGU8c3RyaW5nIHwgbnVsbD4obnVsbClcbiAgY29uc3QgW25ld0NoYXRLZXksIHNldE5ld0NoYXRLZXldID0gdXNlU3RhdGUoMClcbiAgY29uc3QgW3Nlc3Npb25NZXRhLCBzZXRTZXNzaW9uTWV0YV0gPSB1c2VTdGF0ZTxTZXNzaW9uTWV0YSB8IG51bGw+KG51bGwpXG4gIGNvbnN0IFtzZW5kTWVzc2FnZUZ1bmN0aW9uLCBzZXRTZW5kTWVzc2FnZUZ1bmN0aW9uXSA9IHVzZVN0YXRlPFxuICAgIHwgKChcbiAgICAgICAgbWVzc2FnZTogc3RyaW5nLFxuICAgICAgICBhdHRhY2htZW50cz86IEF0dGFjaG1lbnRGaWxlW10sXG4gICAgICAgIGZhcUlkPzogc3RyaW5nLFxuICAgICAgICBhZ2VudFN1Z2dlc3Rpb25JZD86IHN0cmluZyxcbiAgICAgICAgbWVudGlvbnM/OiBDb250ZXh0TWVudGlvbltdLFxuICAgICAgICBmdWFJZD86IHN0cmluZyxcbiAgICAgICAgc2NJZD86IHN0cmluZ1xuICAgICAgKSA9PiB2b2lkKVxuICAgIHwgbnVsbFxuICA+KG51bGwpXG4gIGNvbnN0IFtzdG9wR2VuZXJhdGlvbkZ1bmN0aW9uLCBzZXRTdG9wR2VuZXJhdGlvbkZ1bmN0aW9uXSA9IHVzZVN0YXRlPCgoKSA9PiB2b2lkKSB8IG51bGw+KG51bGwpXG4gIGNvbnN0IFtpc1N0cmVhbWluZywgc2V0SXNTdHJlYW1pbmddID0gdXNlU3RhdGUoZmFsc2UpXG4gIGNvbnN0IFtpc1dyaXRpbmcsIHNldElzV3JpdGluZ10gPSB1c2VTdGF0ZShmYWxzZSlcblxuICBjb25zdCBbcmVmZXRjaENoYXRzLCBzZXRSZWZldGNoQ2hhdHNdID0gdXNlU3RhdGUoZmFsc2UpXG4gIGNvbnN0IFtjdXJyZW50T3B0aW9uLCBzZXRDdXJyZW50T3B0aW9uXSA9IHVzZVN0YXRlPG9wdGlvbnM+KCgpID0+IHtcbiAgICBjb25zdCBzYXZlZCA9IHNhdmVkU2Vzc2lvbk9uTW91bnRSZWYuY3VycmVudFxuICAgIHJldHVybiByZXNvbHZlSW5pdGlhbEN1cnJlbnRPcHRpb24oc2F2ZWQ/LmFnZW50c05hdkFjdGl2ZSwgc2F2ZWQ/LmN1cnJlbnRPcHRpb24sIHVzZXIpXG4gIH0pXG4gIGNvbnN0IFtoYXNFcnJvciwgc2V0SGFzRXJyb3JdID0gdXNlU3RhdGUoZmFsc2UpXG4gIC8vIEVuIHByb2plY3QvY2xpZW50L3Rhc2s6IGVsIHVzdWFyaW8gcmVpbmljacOzIGVsIGNvbnRleHRvIGRlbCBvcmNoZXN0cmF0b3IgKGxvIGxpbXBpw7MgeSBwYXPDsyBwb3JcbiAgLy8gZWwgc2VsZWN0b3IgZGUgY29udGV4dG9zIHJlY2llbnRlcykuIEhhYmlsaXRhIGVsIGJvdMOzbiBcInZvbHZlclwiIGVuIGVsIGhvbWUgcGFzbyAyIGRlIGVzYXNcbiAgLy8gc2VjY2lvbmVzLiBTZSByZXNldGVhIGFsIGNlcnJhci9yZWFicmlyIGVsIG1vZGFsIChlbCBjb21wb25lbnRlIHNlIGRlc21vbnRhKS5cbiAgY29uc3QgW2RpZFJlc2V0Q29udGV4dEluU2VjdGlvbiwgc2V0RGlkUmVzZXRDb250ZXh0SW5TZWN0aW9uXSA9IHVzZVN0YXRlKGZhbHNlKVxuICBjb25zdCBwcmV2SGFzUGlubmVkQ29udGV4dFJlZiA9IHVzZVJlZihmYWxzZSlcbiAgY29uc3QgaGFuZGxlcnMgPSB1c2VNZW1vKCgpID0+IGJ1aWxkSGFuZGxlcnMoc2V0Q3VycmVudE9wdGlvbiwgc2V0SGFzRXJyb3IpLCBbXSlcbiAgY29uc3QgW3NpZGViYXJIYXNFcnJvciwgc2V0U2lkZWJhckhhc0Vycm9yXSA9IHVzZVN0YXRlKGZhbHNlKVxuICBjb25zdCBsYW5nID0gcmVzb2x2ZU1haWFNb2RhbEkxOG5MYW5nKGkxOG4ubGFuZ3VhZ2UpXG5cbiAgbW9tZW50LmxvY2FsZShsYW5nKVxuXG4gIGNvbnN0IHtcbiAgICBzZWxlY3RBZ2VudCxcbiAgICBjbGVhckFnZW50LFxuICAgIHNlY3Rpb24sXG4gICAgYWdlbnQsXG4gICAgcHJvamVjdCxcbiAgICBjbGllbnQsXG4gICAgdGFzayxcbiAgICBjaGlwc1Byb2plY3QsXG4gICAgdG9nZ2xlV2ViU2VhcmNoLFxuICAgIGlzV2ViU2VhcmNoQWN0aXZlLFxuICAgIHNldENoaXBzUHJvamVjdCxcbiAgICBzZXRDbGllbnQsXG4gICAgc2V0UHJvamVjdCxcbiAgICBiYW5uZXJFbnRyeUZhcSxcbiAgICBzZXRUYXNrLFxuICB9ID0gdXNlR2xvYmFsQ29udGV4dCgpXG5cbiAgLy8gWi1pbmRleCBwYXJhIHRvb2x0aXBzIGVuIHNlY3Rpb24gJ3Rhc2snIChtb2RhbCBmbG90YW50ZSBlbGV2YWRvKVxuICBjb25zdCB0b29sdGlwWkluZGV4ID0gdXNlTWFpYVRhc2tQYW5lbFpJbmRleCgxNTAwLCAnb3ZlcmxheScpXG5cbiAgY29uc3Qge1xuICAgIGFnZW50cyxcbiAgICBsb2FkaW5nLFxuICAgIGxvYWRpbmdNb3JlLFxuICAgIGVycm9yOiBhZ2VudEVycm9yLFxuICAgIGhhbmRsZUdldEFnZW50cyxcbiAgICBsb2FkTW9yZUFnZW50cyxcbiAgICBzZWFyY2hDdXN0b21BZ2VudHMsXG4gICAgc2VhcmNoTG9hZGluZyxcbiAgICBhZGRBZ2VudCxcbiAgICByZW1vdmVBZ2VudCxcbiAgICB1cGRhdGVBZ2VudCxcbiAgICB1cGRhdGVBZ2VudEZhdm9yaXRlLFxuICAgIHNlbGVjdEZpcnN0QWdlbnQsXG4gICAgc29ydEFnZW50c0xpc3QsXG4gIH0gPSB1c2VHZXRBZ2VudHMoeyBzZWxlY3RBZ2VudCwgc2VjdGlvbiwgYWdlbnQsIGhhbmRsZUdvSG9tZTogaGFuZGxlcnMuaG9tZSB9KVxuXG4gIGNvbnN0IGFnZW50c0RhdGFSZWYgPSB1c2VSZWYoYWdlbnRzLmRhdGEpXG4gIGFnZW50c0RhdGFSZWYuY3VycmVudCA9IGFnZW50cy5kYXRhXG5cbiAgY29uc3Qge1xuICAgIG15U2tpbGxzLFxuICAgIHNoYXJlZFNraWxscyxcbiAgICBsb2FkaW5nOiBsb2FkaW5nU2tpbGxzLFxuICAgIGhhbmRsZUdldFNraWxscyxcbiAgICBhZGRTa2lsbCxcbiAgICB1cGRhdGVTa2lsbEluTGlzdCxcbiAgICByZW1vdmVTa2lsbCxcbiAgfSA9IHVzZUdldFNraWxscygpXG5cbiAgY29uc3QgdXNlckhhc1Blcm1pc3Npb25zID0gcmVzb2x2ZVVzZXJIYXNBZ2VudE1hbmFnZW1lbnRQZXJtaXNzaW9ucyhcbiAgICB1c2VyPy5wZXJtaXNzaW9ucyxcbiAgICBCb29sZWFuKHdpbmRvdy5NQUlBX0NIQVRfQUlfRkVBVFVSRV9BQ0NFU1NfTVVMVElfQUdFTlRTKVxuICApXG5cbiAgY29uc3QgdXNlckhhc1NraWxsc0FjY2VzcyA9IGNhbkFjY2Vzc1RvU2tpbGxzKHVzZXIpXG5cbiAgY29uc3QgY29tcHV0ZWRDdXJyZW50T3B0aW9uID0gdXNlTWVtbyhcbiAgICAoKSA9PlxuICAgICAgcmVzb2x2ZUNvbXB1dGVkQ3VycmVudE9wdGlvbih7XG4gICAgICAgIGN1cnJlbnRPcHRpb24sXG4gICAgICAgIGFnZW50LFxuICAgICAgICBwcm9qZWN0LFxuICAgICAgICBjbGllbnQsXG4gICAgICAgIHVzZXIsXG4gICAgICAgIG11bHRpQWdlbnRzQWNjZXNzOiBCb29sZWFuKHdpbmRvdy5NQUlBX0NIQVRfQUlfRkVBVFVSRV9BQ0NFU1NfTVVMVElfQUdFTlRTKSxcbiAgICAgIH0pLFxuICAgIFtjdXJyZW50T3B0aW9uLCBwcm9qZWN0LCBjbGllbnQsIGFnZW50LCB1c2VyXVxuICApXG5cbiAgY29uc3QgaXNNYWlha2VyQWdlbnRTZWxlY3RlZCA9IHVzZU1lbW8oKCkgPT4gaXNNYXJrZXRwbGFjZUdsb2JhbENsb25lQWdlbnQoYWdlbnQpLCBbYWdlbnRdKVxuXG4gIGNvbnN0IHNpZGViYXJBZ2VudHNOYXZBY3RpdmUgPSB1c2VNZW1vKFxuICAgICgpID0+IHJlc29sdmVTaWRlYmFyQWdlbnRzTmF2QWN0aXZlKGNvbXB1dGVkQ3VycmVudE9wdGlvbiwgaXNNYWlha2VyQWdlbnRTZWxlY3RlZCksXG4gICAgW2NvbXB1dGVkQ3VycmVudE9wdGlvbiwgaXNNYWlha2VyQWdlbnRTZWxlY3RlZF1cbiAgKVxuXG4gIC8qIFJlYWN0aXZhciBjb24gbGEgZmlsYSDigJxNaXMgYWdlbnRlc+KAnSBlbiBTaWRlYmFyOiBteUFnZW50c0NvdW50IHByb3BcbiAgY29uc3Qgc2lkZWJhck15QWdlbnRzQ291bnQgPSB1c2VNZW1vKCgpID0+IHtcbiAgICByZXR1cm4gYWdlbnRzLmRhdGEuZmlsdGVyKFxuICAgICAgYSA9PiAhKGEudHlwZSA9PT0gJ29yY2hlc3RyYXRvcicgfHwgKGEudHlwZSA9PT0gJ2Nsb25lJyAmJiBhLmVudGl0eSA9PT0gJ2dsb2JhbCcgJiYgLyhtYWlha2VyfG1hcmtldHBsYWNlKS9pLnRlc3QoYS5uYW1lIHx8ICcnKSkpXG4gICAgKVxuICAgICAgLmxlbmd0aFxuICB9LCBbYWdlbnRzLmRhdGFdKVxuICAqL1xuXG4gIGNvbnN0IGFnZW50c0ZldGNoZWRSZWYgPSB1c2VSZWYoZmFsc2UpXG5cbiAgY29uc3Qgc2VsZWN0b3IgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGAjJHtJRF9NT0RBTF9DSEFUX0FHRU5UfWApXG5cbiAgLy8gVGFzayBwYW5lbCwgcGxhbm5lciB5IGJhbm5lciBkZSBwcm95ZWN0byBhYnJlbiBlbiBmbG90YW50ZSBwb3IgZGVmYXVsdCAobm8gdGFwYXIgZWwgY29udGV4dG8gZGV0csOhcykuXG4gIC8vIEZ1ZXJhIGRlIGVzb3MgY29udGV4dG9zIHNlIHJlc3BldGEgbGEgcHJlZmVyZW5jaWEgZ3VhcmRhZGEgZW4gbG9jYWxTdG9yYWdlLlxuICBjb25zdCBbbGF5b3V0TW9kZSwgc2V0TGF5b3V0TW9kZV0gPSB1c2VTdGF0ZTxNYWlhQ2hhdE1vZGFsTGF5b3V0TW9kZT4oKCkgPT5cbiAgICByZXNvbHZlSW5pdGlhbE1haWFDaGF0TGF5b3V0TW9kZSh7IHNlY3Rpb24sIGJhbm5lckVudHJ5RmFxIH0pXG4gIClcblxuICBjb25zdCBoYW5kbGVMYXlvdXRNb2RlQ2hhbmdlID0gdXNlQ2FsbGJhY2soKG1vZGU6IE1haWFDaGF0TW9kYWxMYXlvdXRNb2RlKSA9PiB7XG4gICAgc2V0U3RvcmVkTWFpYUNoYXRMYXlvdXRNb2RlKG1vZGUpXG4gICAgc2V0TGF5b3V0TW9kZShtb2RlKVxuICB9LCBbXSlcbiAgY29uc3QgZXhwYW5kZWQgPSBsYXlvdXRNb2RlID09PSAnZnVsbHNjcmVlbidcbiAgY29uc3QgaXNGbG9hdGluZyA9IGxheW91dE1vZGUgPT09ICdmbG9hdGluZydcbiAgY29uc3QgY29udGVudFdyYXBwZXJSZWYgPSB1c2VSZWY8SFRNTERpdkVsZW1lbnQ+KG51bGwpXG4gIGNvbnN0IFtkcmFnUG9zaXRpb24sIHNldERyYWdQb3NpdGlvbl0gPSB1c2VTdGF0ZTx7IHg6IG51bWJlcjsgeTogbnVtYmVyIH0gfCBudWxsPihcbiAgICAoKSA9PiBzYXZlZFNlc3Npb25Pbk1vdW50UmVmLmN1cnJlbnQ/LmRyYWdQb3NpdGlvbiA/PyBudWxsXG4gIClcbiAgY29uc3QgeyB0aWx0TW90aW9uLCBzdGFydFBvaW50ZXJUcmFja2luZywgc2FtcGxlUG9pbnRlck1vdmUsIGVuZFBvaW50ZXJUcmFja2luZyB9ID1cbiAgICB1c2VGbG9hdGluZ1BhbmVsRHJhZ1RpbHQoaXNGbG9hdGluZylcbiAgY29uc3QgZHJhZ1N0YXRlUmVmID0gdXNlUmVmPHtcbiAgICBwb2ludGVySWQ6IG51bWJlclxuICAgIG9mZnNldFg6IG51bWJlclxuICAgIG9mZnNldFk6IG51bWJlclxuICB9IHwgbnVsbD4obnVsbClcblxuICBjb25zdCBjbGFtcERyYWdQb3NpdGlvbiA9IHVzZUNhbGxiYWNrKCh4OiBudW1iZXIsIHk6IG51bWJlcikgPT4ge1xuICAgIGNvbnN0IGNvbnRlbnRXcmFwcGVyID0gY29udGVudFdyYXBwZXJSZWYuY3VycmVudFxuICAgIGlmIChzaG91bGRVc2VEcmFnQ2xhbXBGYWxsYmFjayhjb250ZW50V3JhcHBlcikpIHtcbiAgICAgIHJldHVybiB7IHgsIHkgfVxuICAgIH1cblxuICAgIGNvbnN0IHsgd2lkdGgsIGhlaWdodCB9ID0gY29udGVudFdyYXBwZXIhLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpXG4gICAgcmV0dXJuIGNsYW1wRmxvYXRpbmdQYW5lbFBvc2l0aW9uKHgsIHksIHdpZHRoLCBoZWlnaHQsIHdpbmRvdy5pbm5lcldpZHRoLCB3aW5kb3cuaW5uZXJIZWlnaHQpXG4gIH0sIFtdKVxuXG4gIHVzZUxheW91dEVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKHNob3VsZENsZWFyRHJhZ1Bvc2l0aW9uT25MYXlvdXRDaGFuZ2UobGF5b3V0TW9kZSkpIHtcbiAgICAgIHNldERyYWdQb3NpdGlvbihudWxsKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgc2V0RHJhZ1Bvc2l0aW9uKHByZXYgPT5cbiAgICAgIHJlc29sdmVMYXlvdXREcmFnUG9zaXRpb25VcGRhdGUobGF5b3V0TW9kZSwgcHJldiwgY2xhbXBEcmFnUG9zaXRpb24sIHtcbiAgICAgICAgaW5uZXJXaWR0aDogd2luZG93LmlubmVyV2lkdGgsXG4gICAgICAgIHBhbmVsV2lkdGg6IGdldE1haWFGbG9hdGluZ1BhbmVsV2lkdGhQeCgpLFxuICAgICAgICBwYWQ6IDE2LFxuICAgICAgfSkhXG4gICAgKVxuICB9LCBbbGF5b3V0TW9kZSwgY2xhbXBEcmFnUG9zaXRpb25dKVxuXG4gIGNvbnN0IGhhbmRsZURyYWdFbmQgPSB1c2VDYWxsYmFjayhcbiAgICAoZXZlbnQ6IFJlYWN0UG9pbnRlckV2ZW50PEhUTUxEaXZFbGVtZW50PikgPT4ge1xuICAgICAgZW5kUG9pbnRlclRyYWNraW5nKClcbiAgICAgIGlmICghaXNBY3RpdmVGbG9hdGluZ0RyYWdQb2ludGVyKGRyYWdTdGF0ZVJlZi5jdXJyZW50Py5wb2ludGVySWQsIGV2ZW50LnBvaW50ZXJJZCkpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGRyYWdTdGF0ZVJlZi5jdXJyZW50ID0gbnVsbFxuICAgICAgZG9jdW1lbnQuYm9keS5zdHlsZS51c2VyU2VsZWN0ID0gJydcbiAgICAgIGRvY3VtZW50LmJvZHkuc3R5bGUuY3Vyc29yID0gJydcblxuICAgICAgY29uc3QgY29udGVudFdyYXBwZXIgPSBjb250ZW50V3JhcHBlclJlZi5jdXJyZW50XG4gICAgICBpZiAoY29udGVudFdyYXBwZXIgJiYgcmVzb2x2ZVBlcnNpc3RlZERyYWdQb3NpdGlvbk9uRW5kKGxheW91dE1vZGUsIGNvbnRlbnRXcmFwcGVyKSkge1xuICAgICAgICBjb25zdCByZWN0ID0gY29udGVudFdyYXBwZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KClcbiAgICAgICAgcGF0Y2hNYWlhUGFuZWxTZXNzaW9uKHVzZXIuaWQsIHsgZHJhZ1Bvc2l0aW9uOiB7IHg6IHJlY3QubGVmdCwgeTogcmVjdC50b3AgfSB9KVxuICAgICAgfVxuICAgIH0sXG4gICAgW2VuZFBvaW50ZXJUcmFja2luZywgbGF5b3V0TW9kZSwgdXNlci5pZF1cbiAgKVxuXG4gIGNvbnN0IGhhbmRsZURyYWdNb3ZlID0gdXNlQ2FsbGJhY2soXG4gICAgKGV2ZW50OiBSZWFjdFBvaW50ZXJFdmVudDxIVE1MRGl2RWxlbWVudD4pID0+IHtcbiAgICAgIGNvbnN0IGRyYWdTdGF0ZSA9IGRyYWdTdGF0ZVJlZi5jdXJyZW50XG4gICAgICBpZiAoIWRyYWdTdGF0ZSB8fCAhaXNBY3RpdmVGbG9hdGluZ0RyYWdQb2ludGVyKGRyYWdTdGF0ZS5wb2ludGVySWQsIGV2ZW50LnBvaW50ZXJJZCkpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIHNhbXBsZVBvaW50ZXJNb3ZlKGV2ZW50LmNsaWVudFgsIGV2ZW50LmNsaWVudFkpXG5cbiAgICAgIGNvbnN0IG5leHRQb3NpdGlvbiA9IGNsYW1wRHJhZ1Bvc2l0aW9uKGV2ZW50LmNsaWVudFggLSBkcmFnU3RhdGUub2Zmc2V0WCwgZXZlbnQuY2xpZW50WSAtIGRyYWdTdGF0ZS5vZmZzZXRZKVxuXG4gICAgICBzZXREcmFnUG9zaXRpb24ocHJldiA9PiByZXNvbHZlTmV4dERyYWdQb3NpdGlvbihwcmV2LCBuZXh0UG9zaXRpb24pKVxuICAgIH0sXG4gICAgW2NsYW1wRHJhZ1Bvc2l0aW9uLCBzYW1wbGVQb2ludGVyTW92ZV1cbiAgKVxuXG4gIGNvbnN0IHJlc29sdmVkRHJhZ1Bvc2l0aW9uID0gdXNlTWVtbyhcbiAgICAoKSA9PlxuICAgICAgcmVzb2x2ZUZsb2F0aW5nUGFuZWxEcmFnUG9zaXRpb24oe1xuICAgICAgICBsYXlvdXRNb2RlLFxuICAgICAgICBkcmFnUG9zaXRpb24sXG4gICAgICAgIHZpZXdwb3J0V2lkdGg6IHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnID8gd2luZG93LmlubmVyV2lkdGggOiAwLFxuICAgICAgICBwYW5lbFdpZHRoOiBnZXRNYWlhRmxvYXRpbmdQYW5lbFdpZHRoUHgoKSxcbiAgICAgICAgY2xhbXA6IGNsYW1wRHJhZ1Bvc2l0aW9uLFxuICAgICAgfSksXG4gICAgW2xheW91dE1vZGUsIGRyYWdQb3NpdGlvbiwgY2xhbXBEcmFnUG9zaXRpb25dXG4gIClcblxuICBjb25zdCBoYW5kbGVEcmFnU3RhcnQgPSB1c2VDYWxsYmFjayhcbiAgICAoZXZlbnQ6IFJlYWN0UG9pbnRlckV2ZW50PEhUTUxEaXZFbGVtZW50PikgPT4ge1xuICAgICAgaWYgKCFzaG91bGRTdGFydEZsb2F0aW5nUGFuZWxEcmFnKGlzRmxvYXRpbmcsIGV2ZW50LmJ1dHRvbikpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHRhcmdldCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudFxuICAgICAgaWYgKHNob3VsZFNraXBGbG9hdGluZ0RyYWdUYXJnZXQodGFyZ2V0KSkge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgY29uc3QgY29udGVudFdyYXBwZXIgPSBjb250ZW50V3JhcHBlclJlZi5jdXJyZW50XG4gICAgICBpZiAoIWNvbnRlbnRXcmFwcGVyKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBjb25zdCByZWN0ID0gY29udGVudFdyYXBwZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KClcbiAgICAgIGNvbnN0IGluaXRpYWxQb3NpdGlvbiA9IHJlc29sdmVkRHJhZ1Bvc2l0aW9uID8/IGNsYW1wRHJhZ1Bvc2l0aW9uKHJlY3QubGVmdCwgcmVjdC50b3ApXG4gICAgICBjb25zdCBwb2ludGVyT2Zmc2V0WCA9IGV2ZW50LmNsaWVudFggLSBpbml0aWFsUG9zaXRpb24ueFxuICAgICAgY29uc3QgcG9pbnRlck9mZnNldFkgPSBldmVudC5jbGllbnRZIC0gaW5pdGlhbFBvc2l0aW9uLnlcblxuICAgICAgc2V0RHJhZ1Bvc2l0aW9uKGluaXRpYWxQb3NpdGlvbilcbiAgICAgIGRyYWdTdGF0ZVJlZi5jdXJyZW50ID0ge1xuICAgICAgICBwb2ludGVySWQ6IGV2ZW50LnBvaW50ZXJJZCxcbiAgICAgICAgb2Zmc2V0WDogcG9pbnRlck9mZnNldFgsXG4gICAgICAgIG9mZnNldFk6IHBvaW50ZXJPZmZzZXRZLFxuICAgICAgfVxuXG4gICAgICBldmVudC5jdXJyZW50VGFyZ2V0LnNldFBvaW50ZXJDYXB0dXJlKGV2ZW50LnBvaW50ZXJJZClcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KClcblxuICAgICAgZG9jdW1lbnQuYm9keS5zdHlsZS51c2VyU2VsZWN0ID0gJ25vbmUnXG4gICAgICBkb2N1bWVudC5ib2R5LnN0eWxlLmN1cnNvciA9ICdncmFiYmluZydcbiAgICAgIGFtcGxpdHVkRXZlbnQoRVZFTlRTLmFpQ2hhdERyYWdnYWJsZSlcbiAgICAgIHN0YXJ0UG9pbnRlclRyYWNraW5nKGV2ZW50LmNsaWVudFgsIGV2ZW50LmNsaWVudFkpXG4gICAgfSxcbiAgICBbY2xhbXBEcmFnUG9zaXRpb24sIGlzRmxvYXRpbmcsIHJlc29sdmVkRHJhZ1Bvc2l0aW9uLCBzdGFydFBvaW50ZXJUcmFja2luZ11cbiAgKVxuXG4gIGNvbnN0IHN0YXJ0Q2hhdCA9IHVzZUNhbGxiYWNrKFxuICAgIChcbiAgICAgIG1lc3NhZ2U/OiBzdHJpbmcsXG4gICAgICBhdHRhY2htZW50cz86IEF0dGFjaG1lbnRGaWxlW10sXG4gICAgICBmYXFJZD86IHN0cmluZyxcbiAgICAgIGFnZW50U3VnZ2VzdGlvbklkPzogc3RyaW5nLFxuICAgICAgbWVudGlvbnM/OiBDb250ZXh0TWVudGlvbltdLFxuICAgICAgZnVhSWQ/OiBzdHJpbmcsXG4gICAgICBzY0lkPzogc3RyaW5nLFxuICAgICAgY29udGV4dERhdGE/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxuICAgICkgPT4ge1xuICAgICAgaWYgKHNob3VsZFJlc2V0U2lkZWJhckVycm9yT25TdGFydENoYXQoc2lkZWJhckhhc0Vycm9yKSkge1xuICAgICAgICBzZXRTaWRlYmFySGFzRXJyb3IoZmFsc2UpXG4gICAgICB9XG4gICAgICBzZXRJbml0aWFsQ2hhdElkKG51bGwpXG4gICAgICBzZXROZXdDaGF0S2V5KHByZXYgPT4gcHJldiArIDEpXG4gICAgICBzZXRVc2VySW5pdGlhbE1lc3NhZ2UoXG4gICAgICAgIGJ1aWxkVXNlckluaXRpYWxNZXNzYWdlRnJvbVN0YXJ0Q2hhdCh7XG4gICAgICAgICAgbWVzc2FnZSxcbiAgICAgICAgICBhdHRhY2htZW50cyxcbiAgICAgICAgICBmYXFJZCxcbiAgICAgICAgICBhZ2VudFN1Z2dlc3Rpb25JZCxcbiAgICAgICAgICBtZW50aW9ucyxcbiAgICAgICAgICBmdWFJZCxcbiAgICAgICAgICBzY0lkLFxuICAgICAgICAgIGNvbnRleHREYXRhLFxuICAgICAgICB9KVxuICAgICAgKVxuICAgICAgaGFuZGxlcnMuY2hhdCgpXG4gICAgfSxcbiAgICBbaGFuZGxlcnMsIHNpZGViYXJIYXNFcnJvcl1cbiAgKVxuXG4gIGNvbnN0IGJhbm5lckZhcUF1dG9TZW50UmVmID0gdXNlUmVmKGZhbHNlKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgYmFubmVyRmFxID0gYmFubmVyRW50cnlGYXFcbiAgICBpZiAoIWJhbm5lckZhcSB8fCAhaGFzQmFubmVyRmFxVGl0bGUoYmFubmVyRmFxLmZhcVRpdGxlKSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgIWlzQmFubmVyRmFxUmVhZHlUb0F1dG9TZW5kKHtcbiAgICAgICAgZmFxVGl0bGU6IGJhbm5lckZhcS5mYXFUaXRsZSxcbiAgICAgICAgYWxyZWFkeVNlbnQ6IGJhbm5lckZhcUF1dG9TZW50UmVmLmN1cnJlbnQsXG4gICAgICAgIGxvYWRpbmcsXG4gICAgICAgIGFnZW50SWQ6IGFnZW50Py5pZCxcbiAgICAgICAgc2VjdGlvbixcbiAgICAgICAgcHJvamVjdElkOiBwcm9qZWN0Py5pZCxcbiAgICAgICAgY2xpZW50SWQ6IGNsaWVudD8uaWQsXG4gICAgICB9KVxuICAgICkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgYmFubmVyRmFxQXV0b1NlbnRSZWYuY3VycmVudCA9IHRydWVcbiAgICBzdGFydENoYXQoXG4gICAgICBiYW5uZXJGYXEuZmFxVGl0bGUsXG4gICAgICBbXSxcbiAgICAgIGJhbm5lckZhcS5mYXFJZCxcbiAgICAgIHVuZGVmaW5lZCxcbiAgICAgIHVuZGVmaW5lZCxcbiAgICAgIHVuZGVmaW5lZCxcbiAgICAgIHVuZGVmaW5lZCxcbiAgICAgIGJhbm5lckZhcS5jb250ZXh0RGF0YVxuICAgIClcbiAgfSwgW1xuICAgIGJhbm5lckVudHJ5RmFxPy5mYXFJZCxcbiAgICBiYW5uZXJFbnRyeUZhcT8uZmFxVGl0bGUsXG4gICAgYmFubmVyRW50cnlGYXE/LmNvbnRleHREYXRhLFxuICAgIGxvYWRpbmcsXG4gICAgYWdlbnQ/LmlkLFxuICAgIGFnZW50Py5lbnRpdHksXG4gICAgcHJvamVjdD8uaWQsXG4gICAgY2xpZW50Py5pZCxcbiAgICBzZWN0aW9uLFxuICAgIHN0YXJ0Q2hhdCxcbiAgXSlcblxuICBjb25zdCBnb1RvQ2hhdCA9IHVzZUNhbGxiYWNrKFxuICAgIChjaGF0OiBhbnkpID0+IHtcbiAgICAgIGNvbnN0IHNlc3Npb25JZCA9IGNoYXQuc2Vzc2lvbkV4dGVybmFsSWQgYXMgc3RyaW5nXG5cbiAgICAgIGdldENoYXRzU3RvcmVTdGF0ZSgpLnNldEFjdGl2ZUNoYXRJZChzZXNzaW9uSWQpXG4gICAgICBkb2N1bWVudC5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgnc2lkZWJhci1zZWxlY3Qtc2Vzc2lvbicsIHsgZGV0YWlsOiB7IHNlc3Npb25JZCB9IH0pKVxuXG4gICAgICBzZXRVc2VySW5pdGlhbE1lc3NhZ2UoeyBtZXNzYWdlOiAnJywgYXR0YWNobWVudHM6IFtdIH0pXG4gICAgICBzZXRJbml0aWFsQ2hhdElkKHNlc3Npb25JZClcbiAgICAgIGNvbnN0IHNlbGVjdGVkQWdlbnQgPSBmaW5kQWdlbnRGb3JDaGF0SXRlbShhZ2VudHMuZGF0YSwgY2hhdC5hZ2VudElkKVxuICAgICAgaWYgKHNlbGVjdGVkQWdlbnQpIHtcbiAgICAgICAgc2VsZWN0QWdlbnQoc2VsZWN0ZWRBZ2VudClcbiAgICAgIH1cbiAgICAgIC8vIERpc3BhdGNoIGV2ZW50IHRvIGNsZWFyIHRoZSBpbnB1dCB0ZXh0YXJlYVxuICAgICAgZG9jdW1lbnQuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoJ2NoYXQtc2Vzc2lvbi1jaGFuZ2VkJykpXG4gICAgICBoYW5kbGVycy5jaGF0KClcbiAgICB9LFxuICAgIFtoYW5kbGVycywgYWdlbnRzLCBzZWxlY3RBZ2VudF1cbiAgKVxuXG4gIGdvVG9DaGF0UmVmLmN1cnJlbnQgPSBnb1RvQ2hhdFxuXG4gIGNvbnN0IGhhbmRsZVNpZGViYXJPcGVuQ2hhbmdlID0gdXNlQ2FsbGJhY2soXG4gICAgKG9wZW46IGJvb2xlYW4pID0+IHtcbiAgICAgIHNpZGViYXJPcGVuUmVmLmN1cnJlbnQgPSBvcGVuXG4gICAgICBwYXRjaE1haWFQYW5lbFNlc3Npb24odXNlci5pZCwgeyBzaWRlYmFyT3Blbjogb3BlbiB9KVxuICAgIH0sXG4gICAgW3VzZXIuaWRdXG4gIClcblxuICBjb25zdCBzeW5jUGFuZWxTZXNzaW9uID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGNvbnN0IHBhdGNoID0gYnVpbGRNYWlhUGFuZWxTZXNzaW9uUGF0Y2goe1xuICAgICAgaXNNaW5pbWl6ZWQsXG4gICAgICBjdXJyZW50T3B0aW9uLFxuICAgICAgYWdlbnRzTmF2QWN0aXZlOiBzaWRlYmFyQWdlbnRzTmF2QWN0aXZlLFxuICAgICAgYWN0aXZlQ2hhdElkLFxuICAgICAgYWdlbnRJZDogYWdlbnQ/LmlkID8/IG51bGwsXG4gICAgICBzaWRlYmFyT3Blbjogc2lkZWJhck9wZW5SZWYuY3VycmVudCxcbiAgICAgIGxheW91dE1vZGUsXG4gICAgICBkcmFnUG9zaXRpb24sXG4gICAgICBob3N0Q29udGV4dDoge1xuICAgICAgICBzZWN0aW9uLFxuICAgICAgICBwcm9qZWN0LFxuICAgICAgICBjbGllbnQsXG4gICAgICAgIHRhc2ssXG4gICAgICAgIGNoaXBzUHJvamVjdCxcbiAgICAgIH0sXG4gICAgfSlcbiAgICBpZiAoIXBhdGNoKSByZXR1cm5cbiAgICBwYXRjaE1haWFQYW5lbFNlc3Npb24odXNlci5pZCwgcGF0Y2gpXG4gIH0sIFtcbiAgICBhY3RpdmVDaGF0SWQsXG4gICAgYWdlbnQ/LmlkLFxuICAgIGNoaXBzUHJvamVjdCxcbiAgICBjbGllbnQsXG4gICAgY3VycmVudE9wdGlvbixcbiAgICBkcmFnUG9zaXRpb24sXG4gICAgaXNNaW5pbWl6ZWQsXG4gICAgbGF5b3V0TW9kZSxcbiAgICBwcm9qZWN0LFxuICAgIHNlY3Rpb24sXG4gICAgc2lkZWJhckFnZW50c05hdkFjdGl2ZSxcbiAgICB0YXNrLFxuICAgIHVzZXIuaWQsXG4gIF0pXG5cbiAgLyoqIExvcyBhZ2VudGVzIHNlIHBpZGVuIHJlY2nDqW4gYWwgYWJyaXIgZWwgcGFuZWw6IGVuIG1vZG8gcGlsbCBubyBoYWNlIGZhbHRhIG5pbmd1bmEgcmVxdWVzdC4gKi9cbiAgY29uc3QgZW5zdXJlQWdlbnRzTG9hZGVkID0gdXNlQ2FsbGJhY2soYXN5bmMgKCk6IFByb21pc2U8QWdlbnRbXT4gPT4ge1xuICAgIGNvbnN0IGNhY2hlZEFnZW50cyA9IHJlc29sdmVDYWNoZWRBZ2VudHNJZkF2YWlsYWJsZShhZ2VudHNEYXRhUmVmLmN1cnJlbnQpXG4gICAgaWYgKGNhY2hlZEFnZW50cykge1xuICAgICAgcmV0dXJuIGNhY2hlZEFnZW50c1xuICAgIH1cblxuICAgIGlmIChzaG91bGRBdHRlbXB0SW5pdGlhbEFnZW50c0ZldGNoKGFnZW50c0RhdGFSZWYuY3VycmVudC5sZW5ndGgsIGFnZW50c0ZldGNoZWRSZWYuY3VycmVudCkpIHtcbiAgICAgIGFnZW50c0ZldGNoZWRSZWYuY3VycmVudCA9IHRydWVcbiAgICAgIGNvbnN0IGxvYWRlZEFnZW50cyA9IGF3YWl0IGhhbmRsZUdldEFnZW50cygpXG4gICAgICBjb25zdCBsb2FkZWRGcm9tRmV0Y2ggPSByZXNvbHZlQ2FjaGVkQWdlbnRzSWZBdmFpbGFibGUobG9hZGVkQWdlbnRzKVxuICAgICAgaWYgKGxvYWRlZEZyb21GZXRjaCkge1xuICAgICAgICByZXR1cm4gbG9hZGVkRnJvbUZldGNoXG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGFnZW50c0RhdGFSZWYuY3VycmVudFxuICB9LCBbaGFuZGxlR2V0QWdlbnRzXSlcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChpc01pbmltaXplZCB8fCBsb2FkaW5nIHx8IGluaXRpYWxDaGF0c1JlZmV0Y2hEb25lUmVmLmN1cnJlbnQpIHJldHVyblxuICAgIGlmICghYWdlbnRzLmRhdGEubGVuZ3RoKSByZXR1cm5cbiAgICBpbml0aWFsQ2hhdHNSZWZldGNoRG9uZVJlZi5jdXJyZW50ID0gdHJ1ZVxuICAgIHNldFJlZmV0Y2hDaGF0cyh0cnVlKVxuICB9LCBbaXNNaW5pbWl6ZWQsIGxvYWRpbmcsIGFnZW50cy5kYXRhLmxlbmd0aF0pXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoaXNNaW5pbWl6ZWQpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWRcbiAgICB9XG5cbiAgICBjb25zdCB0aW1lciA9IHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHN5bmNQYW5lbFNlc3Npb24oKSwgMTUwKVxuICAgIHJldHVybiAoKSA9PiB3aW5kb3cuY2xlYXJUaW1lb3V0KHRpbWVyKVxuICB9LCBbaXNNaW5pbWl6ZWQsIHN5bmNQYW5lbFNlc3Npb25dKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3Qgb25QYWdlSGlkZSA9ICgpID0+IHtcbiAgICAgIGlmIChzaG91bGRTeW5jUGFuZWxTZXNzaW9uT25QYWdlSGlkZShpc01pbmltaXplZCkpIHtcbiAgICAgICAgc3luY1BhbmVsU2Vzc2lvbigpXG4gICAgICB9XG4gICAgfVxuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdwYWdlaGlkZScsIG9uUGFnZUhpZGUpXG4gICAgcmV0dXJuICgpID0+IHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdwYWdlaGlkZScsIG9uUGFnZUhpZGUpXG4gIH0sIFtpc01pbmltaXplZCwgc3luY1BhbmVsU2Vzc2lvbl0pXG5cbiAgY29uc3QgaGFuZGxlUmVzdG9yZUZyb21NaW5pbWl6ZWQgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgLy8gUHJpb3JpZGFkIGFsIHJlYWJyaXI6IHByaW1lciBjaGF0IHNpbiBsZWVyIOKGkiDDumx0aW1hIGNvbnZlcnNhY2nDs24gYWJpZXJ0YSDihpIgSG9tZS5cbiAgICBjb25zdCB7IGNoYXRzIH0gPSBnZXRDaGF0c1N0b3JlU3RhdGUoKVxuICAgIGNvbnN0IGxhc3RBY3RpdmVDaGF0SWQgPSByZWFkTGFzdEFjdGl2ZUNoYXRJZCh1c2VyLmlkKVxuICAgIGNvbnN0IHRhcmdldCA9IHJlc29sdmVNaW5pbWl6ZWRSZXN0b3JlVGFyZ2V0KGNoYXRzLCBsYXN0QWN0aXZlQ2hhdElkKVxuXG4gICAgLy8gTmF2ZWdhciBhbnRlcyBkZSBleHBhbmRpcjogc2kgZXNwZXJhbW9zIGFnZW50ZXMsIGVsIHBhbmVsIG1vbnRhIGNvbiBsYSBzZXNpw7NuIHZpZWphIHkgZWwgc2lkZWJhciBxdWVkYSBkZXNmYXNhZG8uXG4gICAgaWYgKHRhcmdldCkge1xuICAgICAgZ29Ub0NoYXRSZWYuY3VycmVudD8uKHRhcmdldClcbiAgICB9IGVsc2Uge1xuICAgICAgZ29Ib21lUmVmLmN1cnJlbnQ/LigpXG4gICAgfVxuXG4gICAgc2V0SXNNaW5pbWl6ZWQoZmFsc2UpXG4gICAgc2V0Q2hhdFZpZXdWaXNpYmxlKHRydWUpXG4gICAgLy8gTGlzdCBtYXkgYmUgc3RhbGUgd2hpbGUgbWluaW1pemVkIChoZWFkZXIgc3RheWVkIG1vdW50ZWQgd2l0aCBjYWNoZWQgc3RvcmUpLlxuICAgIHNldFJlZmV0Y2hDaGF0cyh0cnVlKVxuICAgIGFtcGxpdHVkRXZlbnQoRVZFTlRTLmFpQ2hhdE9wZW4sIHsgb3B0aW9uOiAnbWluaW1pemUnIH0pXG5cbiAgICBlbnN1cmVBZ2VudHNMb2FkZWQoKVxuICAgICAgLnRoZW4obG9hZGVkQWdlbnRzID0+IHtcbiAgICAgICAgaWYgKHRhcmdldCkge1xuICAgICAgICAgIGNvbnN0IHNlbGVjdGVkQWdlbnQgPSBmaW5kQWdlbnRGb3JDaGF0SXRlbShsb2FkZWRBZ2VudHMsIHRhcmdldC5hZ2VudElkKVxuICAgICAgICAgIGlmIChzZWxlY3RlZEFnZW50KSB7XG4gICAgICAgICAgICBzZWxlY3RBZ2VudChzZWxlY3RlZEFnZW50KVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBmb2N1c0NoYXRJbnB1dCgpXG4gICAgICB9KVxuICAgICAgLmNhdGNoKCgpID0+IHVuZGVmaW5lZClcbiAgfSwgW2FtcGxpdHVkRXZlbnQsIGVuc3VyZUFnZW50c0xvYWRlZCwgZm9jdXNDaGF0SW5wdXQsIHNlbGVjdEFnZW50LCBzZXRDaGF0Vmlld1Zpc2libGUsIHNldFJlZmV0Y2hDaGF0cywgdXNlci5pZF0pXG5cbiAgLyoqXG4gICAqIFRvbWEgY29udHJvbCBkZXNkZSB1biBob3N0IChoZWFkZXIsIHByb3llY3RvLCBjbGllbnRl4oCmKTogYWJyZSBlbCBwYW5lbCwgZGVzY2FydGEgbGFcbiAgICogY29udmVyc2FjacOzbiBhYmllcnRhIHkgYXBsaWNhIGVsIGNvbnRleHRvIGRlbCBob3N0LiBOTyB2dWVsdmUgYSBsYSDDumx0aW1hIGNvbnZlcnNhY2nDs25cbiAgICog4oCUIGVzbyBzw7NsbyBsbyBoYWNlIGVsIHBpbGwgKGBoYW5kbGVSZXN0b3JlRnJvbU1pbmltaXplZGApLlxuICAgKi9cbiAgY29uc3QgYXBwbHlFeHBhbmRlZEhvc3RUYWtlb3ZlciA9IHVzZUNhbGxiYWNrKFxuICAgIChkZXRhaWw6IE1haWFIb3N0T3BlbkRldGFpbCkgPT4ge1xuICAgICAgY29uc3QgZW50aXR5U3RhdGUgPSByZXNvbHZlSG9zdFRha2VvdmVyRW50aXR5U3RhdGUoZGV0YWlsKVxuXG4gICAgICBjbGVhck1haWFQYW5lbFNlc3Npb24odXNlci5pZClcbiAgICAgIHBlbmRpbmdTZXNzaW9uUmVzdG9yZVJlZi5jdXJyZW50ID0gbnVsbFxuICAgICAgc2V0SXNSZXN0b3JpbmdTZXNzaW9uKGZhbHNlKVxuICAgICAgc2V0SXNNaW5pbWl6ZWQoZmFsc2UpXG4gICAgICBzZXRDaGF0Vmlld1Zpc2libGUodHJ1ZSlcbiAgICAgIHdyaXRlTGFzdEFjdGl2ZUNoYXRJZCh1c2VyLmlkLCBudWxsKVxuXG4gICAgICBzZXRJbml0aWFsQ2hhdElkKG51bGwpXG4gICAgICBzZXROZXdDaGF0S2V5KHByZXYgPT4gcHJldiArIDEpXG4gICAgICBzZXRVc2VySW5pdGlhbE1lc3NhZ2UoeyBtZXNzYWdlOiAnJywgYXR0YWNobWVudHM6IFtdIH0pXG4gICAgICBzZXRDdXJyZW50T3B0aW9uKG9wdGlvbnMuaG9tZSlcbiAgICAgIHNldERpZFJlc2V0Q29udGV4dEluU2VjdGlvbihmYWxzZSlcbiAgICAgIHNldEhhc0Vycm9yKGZhbHNlKVxuICAgICAgc2V0SXNXcml0aW5nKGZhbHNlKVxuICAgICAgdXNlRmFxc1N0b3JlLmdldFN0YXRlKCkuY2xlYXJGYXFzKClcbiAgICAgIGJhbm5lckZhcUF1dG9TZW50UmVmLmN1cnJlbnQgPSBmYWxzZVxuICAgICAgZ2V0Q2hhdHNTdG9yZVN0YXRlKCkuc2V0QWN0aXZlQ2hhdElkKG51bGwpXG4gICAgICBkb2N1bWVudC5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgnY2hhdC1zZXNzaW9uLWNoYW5nZWQnKSlcblxuICAgICAgc2V0UHJvamVjdD8uKGVudGl0eVN0YXRlLnByb2plY3QpXG4gICAgICBpZiAoc2hvdWxkQXBwbHlDbGllbnRPbkhvc3RUYWtlb3ZlcihlbnRpdHlTdGF0ZS5jbGllbnQpKSB7XG4gICAgICAgIHNldENsaWVudD8uKGVudGl0eVN0YXRlLmNsaWVudClcbiAgICAgIH1cbiAgICAgIHNldFRhc2s/LihlbnRpdHlTdGF0ZS50YXNrKVxuXG4gICAgICBpZiAoZW50aXR5U3RhdGUuY2xlYXJHbG9iYWxQaW5uZWRDb250ZXh0KSB7XG4gICAgICAgIHNldENoaXBzUHJvamVjdChudWxsKVxuICAgICAgICBjbGVhckFnZW50KClcbiAgICAgIH1cblxuICAgICAgY29uc3QgbmV4dExheW91dCA9IHJlc29sdmVJbml0aWFsTWFpYUNoYXRMYXlvdXRNb2RlKHtcbiAgICAgICAgc2VjdGlvbjogZGV0YWlsLnNlY3Rpb24gYXMgU2VjdGlvbixcbiAgICAgICAgYmFubmVyRW50cnlGYXE6IGRldGFpbC5mYXEsXG4gICAgICB9KVxuICAgICAgc2V0TGF5b3V0TW9kZShuZXh0TGF5b3V0KVxuICAgICAgc2V0RHJhZ1Bvc2l0aW9uKG51bGwpXG5cbiAgICAgIGNvbnN0IGhvc3RDb250ZXh0ID0gYnVpbGRIb3N0VGFrZW92ZXJQZXJzaXN0Q29udGV4dChkZXRhaWwpXG5cbiAgICAgIGVuc3VyZUFnZW50c0xvYWRlZCgpXG4gICAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgICBjb25zdCByZXNvbHZlZEFnZW50SWQgPSByZXNvbHZlSG9zdFRha2VvdmVyQWdlbnRJZChcbiAgICAgICAgICAgIGVudGl0eVN0YXRlLmNsZWFyR2xvYmFsUGlubmVkQ29udGV4dCxcbiAgICAgICAgICAgIGFnZW50c0RhdGFSZWYuY3VycmVudCxcbiAgICAgICAgICAgIGFnZW50Py5pZCA/PyBudWxsXG4gICAgICAgICAgKVxuICAgICAgICAgIGlmIChzaG91bGRTZWxlY3RGaXJzdEFnZW50T25Ib3N0VGFrZW92ZXIoZW50aXR5U3RhdGUuY2xlYXJHbG9iYWxQaW5uZWRDb250ZXh0LCBhZ2VudHNEYXRhUmVmLmN1cnJlbnRbMF0pKSB7XG4gICAgICAgICAgICBzZWxlY3RBZ2VudChhZ2VudHNEYXRhUmVmLmN1cnJlbnRbMF0pXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcGF0Y2hNYWlhUGFuZWxTZXNzaW9uKHVzZXIuaWQsIHtcbiAgICAgICAgICAgIGlzRXhwYW5kZWQ6IHRydWUsXG4gICAgICAgICAgICBjdXJyZW50T3B0aW9uOiBvcHRpb25zLmhvbWUsXG4gICAgICAgICAgICBhZ2VudHNOYXZBY3RpdmU6IG51bGwsXG4gICAgICAgICAgICBhY3RpdmVDaGF0SWQ6IG51bGwsXG4gICAgICAgICAgICBhZ2VudElkOiByZXNvbHZlZEFnZW50SWQsXG4gICAgICAgICAgICBzaWRlYmFyT3Blbjogc2lkZWJhck9wZW5SZWYuY3VycmVudCxcbiAgICAgICAgICAgIGRyYWdQb3NpdGlvbjogbnVsbCxcbiAgICAgICAgICAgIGhvc3RDb250ZXh0LFxuICAgICAgICAgIH0pXG5cbiAgICAgICAgICBmb2N1c0NoYXRJbnB1dCgpXG4gICAgICAgIH0pXG4gICAgICAgIC5jYXRjaCgoKSA9PiB1bmRlZmluZWQpXG4gICAgfSxcbiAgICBbXG4gICAgICBhZ2VudD8uaWQsXG4gICAgICBjbGVhckFnZW50LFxuICAgICAgZW5zdXJlQWdlbnRzTG9hZGVkLFxuICAgICAgZm9jdXNDaGF0SW5wdXQsXG4gICAgICBzZWxlY3RBZ2VudCxcbiAgICAgIHNldENoYXRWaWV3VmlzaWJsZSxcbiAgICAgIHNldENoaXBzUHJvamVjdCxcbiAgICAgIHNldENsaWVudCxcbiAgICAgIHNldFByb2plY3QsXG4gICAgICBzZXRUYXNrLFxuICAgICAgdXNlci5pZCxcbiAgICBdXG4gIClcblxuICBjb25zdCBoYW5kbGVTZW5kTWVzc2FnZVJlYWR5ID0gdXNlQ2FsbGJhY2soXG4gICAgKFxuICAgICAgc2VuZE1lc3NhZ2U6IChcbiAgICAgICAgbWVzc2FnZTogc3RyaW5nLFxuICAgICAgICBhdHRhY2htZW50cz86IEF0dGFjaG1lbnRGaWxlW10sXG4gICAgICAgIGZhcUlkPzogc3RyaW5nLFxuICAgICAgICBhZ2VudFN1Z2dlc3Rpb25JZD86IHN0cmluZyxcbiAgICAgICAgbWVudGlvbnM/OiBDb250ZXh0TWVudGlvbltdLFxuICAgICAgICBmdWFJZD86IHN0cmluZyxcbiAgICAgICAgc2NJZD86IHN0cmluZ1xuICAgICAgKSA9PiB2b2lkLFxuICAgICAgc3RvcEdlbmVyYXRpb246ICgpID0+IHZvaWQsXG4gICAgICBzdHJlYW1pbmc6IGJvb2xlYW4sXG4gICAgICB3cml0aW5nOiBib29sZWFuXG4gICAgKSA9PiB7XG4gICAgICBzZXRTZW5kTWVzc2FnZUZ1bmN0aW9uKCgpID0+IHNlbmRNZXNzYWdlKVxuICAgICAgc2V0U3RvcEdlbmVyYXRpb25GdW5jdGlvbigoKSA9PiBzdG9wR2VuZXJhdGlvbilcbiAgICAgIHNldElzU3RyZWFtaW5nKHN0cmVhbWluZylcbiAgICAgIHNldElzV3JpdGluZyh3cml0aW5nKVxuICAgIH0sXG4gICAgW11cbiAgKVxuXG4gIGNvbnN0IGhhbmRsZVNlbmRNZXNzYWdlID0gdXNlQ2FsbGJhY2soXG4gICAgKFxuICAgICAgbWVzc2FnZTogc3RyaW5nLFxuICAgICAgYXR0YWNobWVudHM/OiBBdHRhY2htZW50RmlsZVtdLFxuICAgICAgZmFxSWQ/OiBzdHJpbmcsXG4gICAgICBhZ2VudFN1Z2dlc3Rpb25JZD86IHN0cmluZyxcbiAgICAgIG1lbnRpb25zPzogQ29udGV4dE1lbnRpb25bXSxcbiAgICAgIGZ1YUlkPzogc3RyaW5nLFxuICAgICAgc2NJZD86IHN0cmluZ1xuICAgICkgPT4ge1xuICAgICAgaWYgKHNpZGViYXJIYXNFcnJvcikge1xuICAgICAgICBzZXRTaWRlYmFySGFzRXJyb3IoZmFsc2UpXG4gICAgICB9XG4gICAgICBpZiAoc2hvdWxkVXNlQWN0aXZlQ2hhdFNlbmRIYW5kbGVyKGNvbXB1dGVkQ3VycmVudE9wdGlvbiwgb3B0aW9ucy5jaGF0LCBCb29sZWFuKHNlbmRNZXNzYWdlRnVuY3Rpb24pKSkge1xuICAgICAgICBzZW5kTWVzc2FnZUZ1bmN0aW9uPy4obWVzc2FnZSwgYXR0YWNobWVudHMsIGZhcUlkLCBhZ2VudFN1Z2dlc3Rpb25JZCwgbWVudGlvbnMsIGZ1YUlkLCBzY0lkKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3RhcnRDaGF0KG1lc3NhZ2UsIGF0dGFjaG1lbnRzLCBmYXFJZCwgYWdlbnRTdWdnZXN0aW9uSWQsIG1lbnRpb25zLCBmdWFJZCwgc2NJZClcbiAgICAgIH1cbiAgICB9LFxuICAgIFtzZW5kTWVzc2FnZUZ1bmN0aW9uLCBzdGFydENoYXQsIGNvbXB1dGVkQ3VycmVudE9wdGlvbiwgc2lkZWJhckhhc0Vycm9yXVxuICApXG5cbiAgY29uc3QgaGFuZGxlR29Ib21lID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIC8vIFNpIGVzdGFtb3MgZW4gdW5hIGNvbnZlcnNhY2nDs24geSB2YW1vcyBhIGhvbWUsIHJlc2V0ZWFyIGluaXRpYWxDaGF0SWQgeSBpbmNyZW1lbnRhciBuZXdDaGF0S2V5XG4gICAgaWYgKHNob3VsZFJlc2V0Q2hhdFN0YXRlT25Hb0hvbWUoY3VycmVudE9wdGlvbiwgb3B0aW9ucy5jaGF0KSkge1xuICAgICAgLy8gTm8gY29ydGFtb3MgbGEgZ2VuZXJhY2nDs246IGxhIHNlc2nDs24gc2lndWUgcmVzcG9uZGllbmRvIGVuIGJhY2tncm91bmQuXG4gICAgICBzZXRJbml0aWFsQ2hhdElkKG51bGwpXG4gICAgICBzZXROZXdDaGF0S2V5KHByZXYgPT4gcHJldiArIDEpXG4gICAgICBzZXRJc1dyaXRpbmcoZmFsc2UpXG4gICAgICBpZiAoc2hvdWxkQ2xlYXJDbGllbnRPbkdvSG9tZUZyb21DaGF0KGFnZW50Py5lbnRpdHkpKSB7XG4gICAgICAgIHNldENsaWVudD8uKG51bGwpXG4gICAgICB9XG4gICAgICBpZiAoc2hvdWxkQ2xlYXJUYXNrT25Hb0hvbWVGcm9tQ2hhdChzZWN0aW9uKSkge1xuICAgICAgICBzZXRUYXNrPy4obnVsbClcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHNob3VsZFJlc2V0QWdlbnRUb0ZpcnN0T25Hb0hvbWUoYWdlbnQsIGFnZW50cy5kYXRhLmxlbmd0aCkpIHtcbiAgICAgIHNlbGVjdEFnZW50KGFnZW50cy5kYXRhWzBdKVxuICAgIH1cbiAgICBpZiAoc2hvdWxkQ2xlYXJPcmNoZXN0cmF0b3JHbG9iYWxDb250ZXh0T25Hb0hvbWUoc2VjdGlvbiwgYWdlbnQ/LnR5cGUpKSB7XG4gICAgICBzZXRQcm9qZWN0KG51bGwpXG4gICAgICBzZXRDbGllbnQ/LihudWxsKVxuICAgICAgc2V0VGFzaz8uKG51bGwpXG4gICAgfVxuICAgIHNldEN1cnJlbnRPcHRpb24ob3B0aW9ucy5ob21lKVxuICAgIHNldENoaXBzUHJvamVjdChudWxsKVxuICAgIHNldEhhc0Vycm9yKGZhbHNlKVxuICAgIGlzV2ViU2VhcmNoQWN0aXZlICYmIHRvZ2dsZVdlYlNlYXJjaCgpXG4gIH0sIFtcbiAgICBvcHRpb25zLmhvbWUsXG4gICAgb3B0aW9ucy5jaGF0LFxuICAgIGN1cnJlbnRPcHRpb24sXG4gICAgaXNXZWJTZWFyY2hBY3RpdmUsXG4gICAgdG9nZ2xlV2ViU2VhcmNoLFxuICAgIGFnZW50LFxuICAgIGFnZW50cyxcbiAgICBzZWxlY3RBZ2VudCxcbiAgICBzZXRQcm9qZWN0LFxuICAgIHNldENsaWVudCxcbiAgICBzZXRUYXNrLFxuICAgIHN0b3BHZW5lcmF0aW9uRnVuY3Rpb24sXG4gICAgc2VjdGlvbixcbiAgXSlcblxuICBnb0hvbWVSZWYuY3VycmVudCA9IGhhbmRsZUdvSG9tZVxuXG4gIGNvbnN0IHN0YXJ0TmV3Q2hhdEZyb21DYXRhbG9nID0gdXNlQ2FsbGJhY2soYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGFnZW50c0xpc3QgPSBzaG91bGRQcmVmZXRjaEFnZW50c0ZvckNhdGFsb2dOZXdDaGF0KGNvbXB1dGVkQ3VycmVudE9wdGlvbiwgb3B0aW9ucy5teUFnZW50cywgb3B0aW9ucy5teVNraWxscylcbiAgICAgID8gYXdhaXQgZW5zdXJlQWdlbnRzTG9hZGVkKClcbiAgICAgIDogYWdlbnRzLmRhdGFcbiAgICBjb25zdCBmaXJzdEFnZW50ID0gYWdlbnRzTGlzdFswXVxuXG4gICAgaWYgKHNob3VsZENsZWFyQ29udGV4dEZvckNhdGFsb2dPclNraWxsQWdlbnQoZmlyc3RBZ2VudCkpIHtcbiAgICAgIHNldFByb2plY3QobnVsbClcbiAgICAgIHNldENsaWVudD8uKG51bGwpXG4gICAgICBzZXRUYXNrPy4obnVsbClcbiAgICAgIHNlbGVjdEFnZW50KGZpcnN0QWdlbnQpXG4gICAgfVxuICAgIHNldEluaXRpYWxDaGF0SWQobnVsbClcbiAgICBzZXROZXdDaGF0S2V5KHByZXYgPT4gcHJldiArIDEpXG4gICAgc2V0Q3VycmVudE9wdGlvbihvcHRpb25zLmhvbWUpXG4gICAgc2V0Q2hpcHNQcm9qZWN0KG51bGwpXG4gICAgc2V0SGFzRXJyb3IoZmFsc2UpXG4gICAgaWYgKGlzV2ViU2VhcmNoQWN0aXZlKSB0b2dnbGVXZWJTZWFyY2goKVxuICAgIGRvY3VtZW50LmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCdjaGF0LXNlc3Npb24tY2hhbmdlZCcpKVxuICB9LCBbXG4gICAgYWdlbnRzLmRhdGEsXG4gICAgY29tcHV0ZWRDdXJyZW50T3B0aW9uLFxuICAgIGVuc3VyZUFnZW50c0xvYWRlZCxcbiAgICBpc1dlYlNlYXJjaEFjdGl2ZSxcbiAgICBzZWxlY3RBZ2VudCxcbiAgICBzZXRDbGllbnQsXG4gICAgc2V0UHJvamVjdCxcbiAgICBzZXRUYXNrLFxuICAgIHRvZ2dsZVdlYlNlYXJjaCxcbiAgXSlcblxuICBjb25zdCBoYW5kbGVTdGFydE5ld0NoYXQgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgaWYgKHNob3VsZFN0YXJ0TmV3Q2hhdEZyb21DYXRhbG9nKGNvbXB1dGVkQ3VycmVudE9wdGlvbiwgaXNNYWlha2VyQWdlbnRTZWxlY3RlZCkpIHtcbiAgICAgIHN0YXJ0TmV3Q2hhdEZyb21DYXRhbG9nKCkuY2F0Y2goKCkgPT4gdW5kZWZpbmVkKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgaGFuZGxlR29Ib21lKClcbiAgfSwgW2NvbXB1dGVkQ3VycmVudE9wdGlvbiwgaGFuZGxlR29Ib21lLCBpc01haWFrZXJBZ2VudFNlbGVjdGVkLCBzdGFydE5ld0NoYXRGcm9tQ2F0YWxvZ10pXG5cbiAgY29uc3QgaGFuZGxlUmVzZXRDaGF0ID0gdXNlQ2FsbGJhY2soYXN5bmMgKCkgPT4ge1xuICAgIHNldFVzZXJJbml0aWFsTWVzc2FnZSh7IG1lc3NhZ2U6ICcnLCBhdHRhY2htZW50czogW10gfSlcbiAgICBzZXRJbml0aWFsQ2hhdElkKG51bGwpXG4gICAgLy8gRGlzcGF0Y2ggZXZlbnQgdG8gY2xlYXIgdGhlIGlucHV0IHRleHRhcmVhXG4gICAgZG9jdW1lbnQuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoJ2NoYXQtc2Vzc2lvbi1jaGFuZ2VkJykpXG4gICAgaGFuZGxlR29Ib21lKClcbiAgfSwgW2hhbmRsZUdvSG9tZV0pXG5cbiAgLy8gQm90w7NuIFwidm9sdmVyXCIgZGVsIGhlYWRlciAoc29sbyBvcmNoZXN0cmF0b3IpOlxuICAvLyAtIERlc2RlIGVsIGNoYXQgKGhlYWRlciBvIHByb2plY3QvY2xpZW50L3Rhc2spOiBpbmljaWEgdW5hIGNvbnZlcnNhY2nDs24gbnVldmEgY29uc2VydmFuZG8gZWxcbiAgLy8gICBjb250ZXh0byBwaW5lYWRvIHkgdnVlbHZlIGFsIGhvbWUgKHBhc28gMiBjb24gRkFRcy9GVUFzKS5cbiAgLy8gLSBFbiBlbCBob21lIHBhc28gMiAoRkFRcy9GVUFzIGNvbiBjb250ZXh0byk6IGxpbXBpYSBlbCBjb250ZXh0byBwaW5lYWRvIHkgdnVlbHZlIGFsIHBhc28gMVxuICAvLyAgIChzZWxlY3RvciBkZSBjb250ZXh0b3MgcmVjaWVudGVzKS4gRW4gaGVhZGVyIHNpZW1wcmU7IGVuIHByb2plY3QvY2xpZW50L3Rhc2sgc29sbyBzaSBlbFxuICAvLyAgIHVzdWFyaW8gcmVpbmljacOzIGVsIGNvbnRleHRvIChkaWRSZXNldENvbnRleHRJblNlY3Rpb24pLlxuICBjb25zdCBoYW5kbGVCYWNrID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGNvbnN0IHRvID0gcmVzb2x2ZUFpQ2hhdEJhY2tEZXN0aW5hdGlvbihzZWN0aW9uLCBhZ2VudD8udHlwZSwgY29tcHV0ZWRDdXJyZW50T3B0aW9uLCBvcHRpb25zLmhvbWUpXG4gICAgYW1wbGl0dWRFdmVudChFVkVOVFMuYWlDaGF0QmFjaywgeyB0byB9KVxuXG4gICAgLy8gRGVzZGUgZWwgY2hhdCDihpIgbnVldmEgY29udmVyc2FjacOzbiBTSU4gYm9ycmFyIGVsIGNvbnRleHRvIHBpbmVhZG8sIHZvbHZpZW5kbyBhbCBob21lLlxuICAgIGlmIChzaG91bGRCYWNrU3RhcnROZXdDaGF0UHJlc2VydmluZ0NvbnRleHQoY29tcHV0ZWRDdXJyZW50T3B0aW9uLCBvcHRpb25zLmNoYXQpKSB7XG4gICAgICAvLyBObyBjb3J0YW1vcyBsYSBnZW5lcmFjacOzbjogbGEgc2VzacOzbiBzaWd1ZSByZXNwb25kaWVuZG8gZW4gYmFja2dyb3VuZC5cbiAgICAgIHNldElzV3JpdGluZyhmYWxzZSlcbiAgICAgIHNldFVzZXJJbml0aWFsTWVzc2FnZSh7IG1lc3NhZ2U6ICcnLCBhdHRhY2htZW50czogW10gfSlcbiAgICAgIHNldEluaXRpYWxDaGF0SWQobnVsbClcbiAgICAgIHNldE5ld0NoYXRLZXkocHJldiA9PiBwcmV2ICsgMSlcbiAgICAgIHNldEhhc0Vycm9yKGZhbHNlKVxuICAgICAgaXNXZWJTZWFyY2hBY3RpdmUgJiYgdG9nZ2xlV2ViU2VhcmNoKClcbiAgICAgIHNldEN1cnJlbnRPcHRpb24ob3B0aW9ucy5ob21lKVxuICAgICAgZG9jdW1lbnQuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoJ2NoYXQtc2Vzc2lvbi1jaGFuZ2VkJykpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICAvLyBIb21lIHBhc28gMiAoY29udGV4dG8gcGluZWFkbykg4oaSIGxpbXBpYXIgZWwgY29udGV4dG8geSB2b2x2ZXIgYWwgcGFzbyAxIChjb250ZXh0b3MgcmVjaWVudGVzKS5cbiAgICBpZiAoc2hvdWxkQmFja0NsZWFyUGlubmVkQ29udGV4dChjb21wdXRlZEN1cnJlbnRPcHRpb24sIG9wdGlvbnMuaG9tZSwgc2VjdGlvbiwgZGlkUmVzZXRDb250ZXh0SW5TZWN0aW9uKSkge1xuICAgICAgc2V0UHJvamVjdChudWxsKVxuICAgICAgc2V0Q2xpZW50Py4obnVsbClcbiAgICAgIHNldFRhc2s/LihudWxsKVxuICAgICAgc2V0Q2hpcHNQcm9qZWN0KG51bGwpXG4gICAgfVxuICB9LCBbXG4gICAgY29tcHV0ZWRDdXJyZW50T3B0aW9uLFxuICAgIHNlY3Rpb24sXG4gICAgYWdlbnQ/LnR5cGUsXG4gICAgYW1wbGl0dWRFdmVudCxcbiAgICBvcHRpb25zLmhvbWUsXG4gICAgc3RvcEdlbmVyYXRpb25GdW5jdGlvbixcbiAgICBpc1dlYlNlYXJjaEFjdGl2ZSxcbiAgICB0b2dnbGVXZWJTZWFyY2gsXG4gICAgZGlkUmVzZXRDb250ZXh0SW5TZWN0aW9uLFxuICAgIHNldFByb2plY3QsXG4gICAgc2V0Q2xpZW50LFxuICAgIHNldFRhc2ssXG4gICAgc2V0Q2hpcHNQcm9qZWN0LFxuICBdKVxuXG4gIC8vIERldGVjdGEgZWwgcmVpbmljaW8gZGUgY29udGV4dG8gZW4gcHJvamVjdC9jbGllbnQvdGFzazogY29udGV4dG8gcGluZWFkbyDihpIgdmFjw61vIGNvbiBlbFxuICAvLyBvcmNoZXN0cmF0b3IgKHAuIGVqLiBhbCByZXNlbGVjY2lvbmFyIE1BSUEgZW4gZWwgbGlzdGFkbykuIFNvbG8gbGEgdHJhbnNpY2nDs24gY3VlbnRhLCBhc8OtIHVuYVxuICAvLyBhcGVydHVyYSBmcmVzY2EgKGNvbnRleHRvIHBpbmVhZG8gZGVzZGUgbGEgc2VjY2nDs24pIG5vIGxvIGFjdGl2YS5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBwaW5uZWQgPSByZXNvbHZlSGFzUGlubmVkQ29udGV4dCh7XG4gICAgICB0YXNrSWQ6IHRhc2s/LmlkLFxuICAgICAgY2hpcHNQcm9qZWN0SWQ6IGNoaXBzUHJvamVjdD8ucHJvamVjdElkLFxuICAgICAgY2xpZW50SWQ6IGNsaWVudD8uaWQsXG4gICAgICBwcm9qZWN0SWQ6IHByb2plY3Q/LmlkLFxuICAgIH0pXG4gICAgY29uc3Qgd2FzUGlubmVkID0gcHJldkhhc1Bpbm5lZENvbnRleHRSZWYuY3VycmVudFxuICAgIHByZXZIYXNQaW5uZWRDb250ZXh0UmVmLmN1cnJlbnQgPSBwaW5uZWRcbiAgICBpZiAoc2hvdWxkTWFya09yY2hlc3RyYXRvckNvbnRleHRSZXNldChzZWN0aW9uLCBhZ2VudD8udHlwZSwgd2FzUGlubmVkLCBwaW5uZWQpKSB7XG4gICAgICBzZXREaWRSZXNldENvbnRleHRJblNlY3Rpb24odHJ1ZSlcbiAgICB9XG4gIH0sIFt0YXNrPy5pZCwgY2hpcHNQcm9qZWN0Py5wcm9qZWN0SWQsIGNsaWVudD8uaWQsIHByb2plY3Q/LmlkLCBzZWN0aW9uLCBhZ2VudD8udHlwZV0pXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBvbk1lcmdlQ3JlYXRlZEFnZW50ID0gKGV2dDogRXZlbnQpID0+IHtcbiAgICAgIGNvbnN0IHsgYWdlbnQ6IG5leHRBZ2VudCB9ID0gKGV2dCBhcyBDdXN0b21FdmVudDx7IGFnZW50OiBBZ2VudCB9PikuZGV0YWlsIHx8IHt9XG4gICAgICBpZiAobmV4dEFnZW50Py5pZCkge1xuICAgICAgICBhZGRBZ2VudChuZXh0QWdlbnQsIHsgbmF2aWdhdGVIb21lOiBmYWxzZSB9KVxuICAgICAgfVxuICAgIH1cbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtYWlhLW1lcmdlLWNyZWF0ZWQtYWdlbnQtaW50by1saXN0Jywgb25NZXJnZUNyZWF0ZWRBZ2VudClcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbWFpYS1tZXJnZS1jcmVhdGVkLWFnZW50LWludG8tbGlzdCcsIG9uTWVyZ2VDcmVhdGVkQWdlbnQpXG4gICAgfVxuICB9LCBbYWRkQWdlbnRdKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3Qgb25TeW5jRWRpdGVkQWdlbnQgPSAoZXZ0OiBFdmVudCkgPT4ge1xuICAgICAgY29uc3QgeyBhZ2VudDogbmV4dEFnZW50IH0gPSAoZXZ0IGFzIEN1c3RvbUV2ZW50PHsgYWdlbnQ6IEFnZW50IH0+KS5kZXRhaWwgfHwge31cbiAgICAgIGlmICghbmV4dEFnZW50Py5pZCkgcmV0dXJuXG4gICAgICB1cGRhdGVBZ2VudChuZXh0QWdlbnQpXG4gICAgICBpZiAoYWdlbnQ/LmlkID09PSBuZXh0QWdlbnQuaWQpIHtcbiAgICAgICAgc2VsZWN0QWdlbnQobmV4dEFnZW50KVxuICAgICAgfVxuICAgIH1cbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtYWlhLXN5bmMtZWRpdGVkLWFnZW50LWZyb20tY2hhdCcsIG9uU3luY0VkaXRlZEFnZW50KVxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtYWlhLXN5bmMtZWRpdGVkLWFnZW50LWZyb20tY2hhdCcsIG9uU3luY0VkaXRlZEFnZW50KVxuICAgIH1cbiAgfSwgW3VwZGF0ZUFnZW50LCBzZWxlY3RBZ2VudCwgYWdlbnQ/LmlkXSlcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IG9wZW5DaGF0VmlldyA9ICgpID0+IHtcbiAgICAgIHNldEhhc0Vycm9yKGZhbHNlKVxuICAgICAgc2V0SW5pdGlhbENoYXRJZChudWxsKVxuICAgICAgc2V0TmV3Q2hhdEtleShwcmV2ID0+IHByZXYgKyAxKVxuICAgICAgc2V0VXNlckluaXRpYWxNZXNzYWdlKHsgbWVzc2FnZTogJycsIGF0dGFjaG1lbnRzOiBbXSB9KVxuICAgICAgc2V0Q3VycmVudE9wdGlvbihvcHRpb25zLmNoYXQpXG4gICAgICBkb2N1bWVudC5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgnY2hhdC1zZXNzaW9uLWNoYW5nZWQnKSlcbiAgICB9XG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbWFpYS1vcGVuLWNoYXQtdmlldycsIG9wZW5DaGF0VmlldylcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbWFpYS1vcGVuLWNoYXQtdmlldycsIG9wZW5DaGF0VmlldylcbiAgICB9XG4gIH0sIFtdKVxuXG4gIC8qKlxuICAgKiBFbCDDrWNvbm8gZGUgTUFJQSBkZWwgaGVhZGVyIGxsZXZhIHNpZW1wcmUgYWwgSG9tZS4gU2kgTUFJQSB5YSBlc3TDoSBtb250YWRhIHBlcm9cbiAgICogbWluaW1pemFkYSwgZWwgaG9zdCBubyBwdWVkZSByZXNvbHZlcmxvIGNhbWJpYW5kbyBgaXNPcGVuYCAoeWEgZXN0w6EgZW4gdHJ1ZSksXG4gICAqIGFzw60gcXVlIGF2aXNhIHBvciBldmVudG8geSBhY8OhIHJlc3RhdXJhbW9zIHkgdmFtb3MgYWwgSG9tZS5cbiAgICovXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3Qgb3BlbkhvbWUgPSAoKSA9PiB7XG4gICAgICBhcHBseUV4cGFuZGVkSG9zdFRha2VvdmVyKHtcbiAgICAgICAgc2VjdGlvbjogJ2hlYWRlcicsXG4gICAgICAgIGVudGl0eTogeyBwcm9qZWN0SWQ6IG51bGwsIGNsaWVudElkOiBudWxsIH0sXG4gICAgICB9KVxuICAgIH1cbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtYWlhLW9wZW4taG9tZScsIG9wZW5Ib21lKVxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtYWlhLW9wZW4taG9tZScsIG9wZW5Ib21lKVxuICAgIH1cbiAgfSwgW2FwcGx5RXhwYW5kZWRIb3N0VGFrZW92ZXJdKVxuXG4gIC8qKlxuICAgKiBPdHJvIGhvc3QgKHByb3llY3RvLCBjbGllbnRlLCBiYW5uZXIsIGhlYWRlcuKApikgcGlkZSBhYnJpciBNQUlBIG1pZW50cmFzIHlhIGhheSB1bmFcbiAgICogaW5zdGFuY2lhIG1vbnRhZGEuIEV4cGFuZGUgc2kgZXN0YWJhIG1pbmltaXphZG8sIGFwbGljYSBlbCBjb250ZXh0byBkZWwgaG9zdCBudWV2b1xuICAgKiB5IHZhIGFsIGhvbWUg4oCUIHNpbiByZXN0YXVyYXIgbGEgY29udmVyc2FjacOzbiBwcmV2aWEgKGVzbyBsbyBoYWNlIGVsIHBpbGwpLlxuICAgKi9cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBvcGVuRnJvbUhvc3QgPSAoZXZlbnQ6IEV2ZW50KSA9PiB7XG4gICAgICBjb25zdCB7IGRldGFpbCB9ID0gZXZlbnQgYXMgQ3VzdG9tRXZlbnQ8TWFpYUhvc3RPcGVuRGV0YWlsPlxuICAgICAgaWYgKCFkZXRhaWwpIHJldHVyblxuICAgICAgYXBwbHlFeHBhbmRlZEhvc3RUYWtlb3ZlcihkZXRhaWwpXG4gICAgfVxuXG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihNQUlBX09QRU5fRlJPTV9IT1NUX0VWRU5ULCBvcGVuRnJvbUhvc3QpXG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoTUFJQV9PUEVOX0ZST01fSE9TVF9FVkVOVCwgb3BlbkZyb21Ib3N0KVxuICAgIH1cbiAgfSwgW2FwcGx5RXhwYW5kZWRIb3N0VGFrZW92ZXJdKVxuXG4gIC8qKiBNaXNtbyBmbHVqbyBxdWUgQ2hhdEFJTXlBZ2VudHMuaGFuZGxlVXNlQWdlbnQgKyBvbkJhY2sgKGhhbmRsZXJzLmhvbWUpLlxuICAgKiAgRWwgZGV0YWlsIHB1ZWRlIHRyYWVyIG9wY2lvbmFsbWVudGUgYHByb2plY3RgLCBgY2xpZW50YCwgYHRhc2tgIHBhcmEgZmxvd3MgcXVlXG4gICAqICBuZWNlc2l0YW4gcHJlc2VydmFyIGNvbnRleHRvIChlai4gc2VsZWN0b3IgZGUgYWdlbnRlcyBkZXNkZSB1bmEgdGFyZWEpLiBTaSBubyB2aWVuZW4sXG4gICAqICBzZSBtYW50aWVuZSBlbCBjb21wb3J0YW1pZW50byBvcmlnaW5hbCBkZSBsaW1waWFyIHByb2plY3QvY2xpZW50LiAqL1xuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IG9wZW5OZXdDaGF0V2l0aEFnZW50ID0gKGV2ZW50OiBFdmVudCkgPT4ge1xuICAgICAgY29uc3QgeyBkZXRhaWwgfSA9IGV2ZW50IGFzIEN1c3RvbUV2ZW50PHtcbiAgICAgICAgYWdlbnQ6IEFnZW50XG4gICAgICAgIHByb2plY3Q/OiBQcm9qZWN0IHwgbnVsbFxuICAgICAgICBjbGllbnQ/OiBDbGllbnQgfCBudWxsXG4gICAgICAgIHRhc2s/OiBUYXNrIHwgbnVsbFxuICAgICAgfT5cbiAgICAgIGNvbnN0IG5leHRBZ2VudCA9IGRldGFpbD8uYWdlbnRcbiAgICAgIGlmICghbmV4dEFnZW50KSByZXR1cm5cblxuICAgICAgY29uc3QgY29udGV4dFBhdGNoID0gcmVzb2x2ZU9wZW5OZXdDaGF0V2l0aEFnZW50Q29udGV4dChkZXRhaWwgPz8ge30pXG4gICAgICBzZXRQcm9qZWN0KGNvbnRleHRQYXRjaC5wcm9qZWN0KVxuICAgICAgc2V0Q2xpZW50Py4oY29udGV4dFBhdGNoLmNsaWVudClcbiAgICAgIGlmIChjb250ZXh0UGF0Y2guc2hvdWxkU2V0VGFzaykge1xuICAgICAgICBzZXRUYXNrPy4oY29udGV4dFBhdGNoLnRhc2sgPz8gbnVsbClcbiAgICAgIH1cbiAgICAgIHNlbGVjdEFnZW50KG5leHRBZ2VudClcbiAgICAgIHNldEhhc0Vycm9yKGZhbHNlKVxuICAgICAgc2V0Q3VycmVudE9wdGlvbihvcHRpb25zLmhvbWUpXG4gICAgfVxuXG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbWFpYS1vcGVuLW5ldy1jaGF0LXdpdGgtYWdlbnQnLCBvcGVuTmV3Q2hhdFdpdGhBZ2VudClcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbWFpYS1vcGVuLW5ldy1jaGF0LXdpdGgtYWdlbnQnLCBvcGVuTmV3Q2hhdFdpdGhBZ2VudClcbiAgICB9XG4gIH0sIFtzZWxlY3RBZ2VudCwgc2V0Q2xpZW50LCBzZXRQcm9qZWN0LCBzZXRUYXNrXSlcblxuICBjb25zdCBhcHBseVNraWxsVXNlRmxvdyA9IHVzZUNhbGxiYWNrKFxuICAgIGFzeW5jIChza2lsbDogU2tpbGwsIHVzZUZpcnN0QWdlbnQ6IGJvb2xlYW4pID0+IHtcbiAgICAgIGNvbnN0IGZpcnN0QWdlbnQgPSBhd2FpdCBlbnN1cmVBZ2VudHNCZWZvcmVTa2lsbFVzZSh7XG4gICAgICAgIHVzZUZpcnN0QWdlbnQsXG4gICAgICAgIGFnZW50czogYWdlbnRzRGF0YVJlZi5jdXJyZW50LFxuICAgICAgICBlbnN1cmVBZ2VudHNMb2FkZWQsXG4gICAgICB9KVxuXG4gICAgICBpZiAoc2hvdWxkQ2xlYXJDb250ZXh0Rm9yQ2F0YWxvZ09yU2tpbGxBZ2VudChmaXJzdEFnZW50KSkge1xuICAgICAgICBzZXRQcm9qZWN0KG51bGwpXG4gICAgICAgIHNldENsaWVudD8uKG51bGwpXG4gICAgICAgIHNldFRhc2s/LihudWxsKVxuICAgICAgICBzZWxlY3RBZ2VudChmaXJzdEFnZW50KVxuICAgICAgfVxuXG4gICAgICBzZXRIYXNFcnJvcihmYWxzZSlcbiAgICAgIHNldEluaXRpYWxDaGF0SWQobnVsbClcbiAgICAgIHNldE5ld0NoYXRLZXkocHJldiA9PiBwcmV2ICsgMSlcbiAgICAgIHNldFVzZXJJbml0aWFsTWVzc2FnZSh7IG1lc3NhZ2U6ICcnLCBhdHRhY2htZW50czogW10gfSlcbiAgICAgIHNldEN1cnJlbnRPcHRpb24ob3B0aW9ucy5ob21lKVxuICAgICAgZG9jdW1lbnQuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoJ2NoYXQtc2Vzc2lvbi1jaGFuZ2VkJykpXG4gICAgICBkaXNwYXRjaFNraWxsTWVudGlvbkluc2VydChza2lsbClcbiAgICB9LFxuICAgIFtlbnN1cmVBZ2VudHNMb2FkZWQsIHNlbGVjdEFnZW50LCBzZXRDbGllbnQsIHNldFByb2plY3QsIHNldFRhc2tdXG4gIClcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IGhhbmRsZVVzZVNraWxsQWZ0ZXJTYXZlID0gKGV2ZW50OiBFdmVudCkgPT4ge1xuICAgICAgY29uc3QgeyBza2lsbCwgdXNlRmlyc3RBZ2VudCA9IGZhbHNlIH0gPVxuICAgICAgICAoZXZlbnQgYXMgQ3VzdG9tRXZlbnQ8eyBza2lsbDogU2tpbGw7IHVzZUZpcnN0QWdlbnQ/OiBib29sZWFuIH0+KS5kZXRhaWwgfHwge31cbiAgICAgIGlmICghc2tpbGwpIHJldHVyblxuXG4gICAgICBhcHBseVNraWxsVXNlRmxvdyhza2lsbCwgdXNlRmlyc3RBZ2VudCkuY2F0Y2goKCkgPT4gdW5kZWZpbmVkKVxuICAgIH1cblxuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoU0tJTExfVVNFX0FGVEVSX1NBVkVfRVZFTlQsIGhhbmRsZVVzZVNraWxsQWZ0ZXJTYXZlKVxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFNLSUxMX1VTRV9BRlRFUl9TQVZFX0VWRU5ULCBoYW5kbGVVc2VTa2lsbEFmdGVyU2F2ZSlcbiAgICB9XG4gIH0sIFthcHBseVNraWxsVXNlRmxvd10pXG5cbiAgLy8gTWV0YWRhdGEgZGUgbGEgc2Vzc2lvbiBhYmllcnRhIChhZ2VudF90eXBlL2FnZW50X2VudGl0eSArIGNvbnRleHRvKSwgZW1pdGlkYSBwb3IgdXNlQ2hhdE1lc3NhZ2VzLlxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IG9uU2Vzc2lvbk1ldGEgPSAoZXZ0OiBFdmVudCkgPT4ge1xuICAgICAgY29uc3QgeyBkZXRhaWwgfSA9IGV2dCBhcyBDdXN0b21FdmVudDxTZXNzaW9uTWV0YT5cbiAgICAgIGlmIChkZXRhaWwpIHNldFNlc3Npb25NZXRhKGRldGFpbClcbiAgICB9XG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbWFpYS1jaGF0LXNlc3Npb24tbWV0YScsIG9uU2Vzc2lvbk1ldGEpXG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21haWEtY2hhdC1zZXNzaW9uLW1ldGEnLCBvblNlc3Npb25NZXRhKVxuICAgIH1cbiAgfSwgW10pXG5cbiAgLy8gQWwgY2FtYmlhciBkZSBjb252ZXJzYWNpw7NuIGxpbXBpYW1vcyBsYSBtZXRhZGF0YTsgZWwgbG9hZCBkZSBsYSBudWV2YSBzZXNzaW9uIGxhIHZ1ZWx2ZSBhIGVtaXRpci5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBzZXRTZXNzaW9uTWV0YShudWxsKVxuICB9LCBbaW5pdGlhbENoYXRJZF0pXG5cbiAgLy8gQ2FydGVsIFwiY29udGludWFyIGVuIHVuIGNoYXQgbnVldm9cIjogc2UgbXVlc3RyYSBhbCBhYnJpciB1bmEgY29udmVyc2FjacOzbiBkZSB1biBjbG9uZSBsZWdhY3lcbiAgLy8gKGFnZW50X3R5cGUgPT09ICdjbG9uZScgY29uIGVudGl0eSBwcm9qZWN0L3Rhc2svY2xpZW50KS4gRWwgaW5wdXQgc2UgcmVlbXBsYXphIHBvciBlbCBjYXJ0ZWwuXG4gIGNvbnN0IGxlZ2FjeUNvbnRleHRTZXNzaW9uID0gdXNlTWVtbyhcbiAgICAoKSA9PiByZXNvbHZlTGVnYWN5Q29udGV4dFNlc3Npb24oY29tcHV0ZWRDdXJyZW50T3B0aW9uLCBvcHRpb25zLmNoYXQsIHNlc3Npb25NZXRhKSxcbiAgICBbY29tcHV0ZWRDdXJyZW50T3B0aW9uLCBzZXNzaW9uTWV0YV1cbiAgKVxuXG4gIC8vIE1hcmNhIGVsIGFnZW50ZSBkZSBsYSBjb252ZXJzYWNpw7NuIGxlZ2FjeSBwYXJhIHF1ZSBoZWFkZXIsIHNlbGVjdG9yIHkgYXZhdGFyIG11ZXN0cmVuIGVsIGxvZ29cbiAgLy8gTUFJQSB5IGVsIG5vbWJyZSB0YWNoYWRvIChhZ2VudGUgb2Jzb2xldG8pLCBzaW4gZGVwZW5kZXIgZGVsIGB0eXBlYCByZXN1ZWx0byBkZSBsYSBzZXNpw7NuIHZpZWphLlxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChzaG91bGRNYXJrQWdlbnRBc0xlZ2FjeUNvbnRleHQobGVnYWN5Q29udGV4dFNlc3Npb24sIGFnZW50KSkge1xuICAgICAgc2VsZWN0QWdlbnQoYnVpbGRMZWdhY3lDb250ZXh0QWdlbnQoYWdlbnQpKVxuICAgIH1cbiAgfSwgW2xlZ2FjeUNvbnRleHRTZXNzaW9uLCBhZ2VudCwgc2VsZWN0QWdlbnRdKVxuXG4gIC8vIEFicmUgdW4gY2hhdCBudWV2byBjb24gZWwgb3JjaGVzdHJhdG9yIHNldGVhbmRvIGVsIGNvbnRleHRvIGRlbCBjbG9uZSBsZWdhY3kgKG1pc21vIGNyaXRlcmlvXG4gIC8vIHF1ZSBjbGlja2VhciB1biBjb250ZXh0byByZWNpZW50ZSBlbiBlbCBob21lIOKGkiBwYXNvIDIgY29uIEZBUXMvYWNjaW9uZXMgZGUgZXNlIGNvbnRleHRvKS5cbiAgY29uc3QgaGFuZGxlQ29udGludWVMZWdhY3lDb250ZXh0SW5OZXdDaGF0ID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGNvbnN0IG9yY2hlc3RyYXRvciA9IGZpbmRPcmNoZXN0cmF0b3JBZ2VudChhZ2VudHMuZGF0YSlcbiAgICBpZiAoIWNhbkNvbnRpbnVlTGVnYWN5Q29udGV4dEluTmV3Q2hhdChzZXNzaW9uTWV0YSwgb3JjaGVzdHJhdG9yKSB8fCAhc2Vzc2lvbk1ldGEgfHwgIW9yY2hlc3RyYXRvcikge1xuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGNvbnN0IHtcbiAgICAgIGFnZW50RW50aXR5LFxuICAgICAgcHJvamVjdElkOiBwSWQsXG4gICAgICBwcm9qZWN0TmFtZTogcE5hbWUsXG4gICAgICBjbGllbnRJZDogY0lkLFxuICAgICAgY2xpZW50TmFtZTogY05hbWUsXG4gICAgICB0YXNrSWQ6IHRJZCxcbiAgICAgIHRhc2tOYW1lOiB0TmFtZSxcbiAgICB9ID0gc2Vzc2lvbk1ldGFcblxuICAgIGNvbnN0IG1pZ3JhdGlvblBhdGNoID0gYnVpbGRMZWdhY3lDb250ZXh0TWlncmF0aW9uUGF0Y2goe1xuICAgICAgYWdlbnRFbnRpdHksXG4gICAgICBwcm9qZWN0SWQ6IHBJZCxcbiAgICAgIHByb2plY3ROYW1lOiBwTmFtZSxcbiAgICAgIGNsaWVudElkOiBjSWQsXG4gICAgICBjbGllbnROYW1lOiBjTmFtZSxcbiAgICAgIHRhc2tJZDogdElkLFxuICAgICAgdGFza05hbWU6IHROYW1lLFxuICAgIH0pID8/IHsgdGFzazogbnVsbCwgcHJvamVjdDogbnVsbCwgY2xpZW50OiBudWxsLCBjaGlwc1Byb2plY3Q6IG51bGwgfVxuXG4gICAgc2V0SXNXcml0aW5nKGZhbHNlKVxuICAgIHNldFVzZXJJbml0aWFsTWVzc2FnZSh7IG1lc3NhZ2U6ICcnLCBhdHRhY2htZW50czogW10gfSlcbiAgICBzZXRJbml0aWFsQ2hhdElkKG51bGwpXG4gICAgc2V0TmV3Q2hhdEtleShwcmV2ID0+IHByZXYgKyAxKVxuICAgIHNldEhhc0Vycm9yKGZhbHNlKVxuXG4gICAgc2V0VGFzaz8uKG1pZ3JhdGlvblBhdGNoLnRhc2spXG4gICAgc2V0UHJvamVjdChtaWdyYXRpb25QYXRjaC5wcm9qZWN0KVxuICAgIHNldENsaWVudD8uKG1pZ3JhdGlvblBhdGNoLmNsaWVudClcbiAgICBzZXRDaGlwc1Byb2plY3QobWlncmF0aW9uUGF0Y2guY2hpcHNQcm9qZWN0KVxuXG4gICAgc2VsZWN0QWdlbnQob3JjaGVzdHJhdG9yKVxuICAgIHNldFNlc3Npb25NZXRhKG51bGwpXG4gICAgc2V0Q3VycmVudE9wdGlvbihvcHRpb25zLmhvbWUpXG4gICAgZG9jdW1lbnQuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoJ2NoYXQtc2Vzc2lvbi1jaGFuZ2VkJykpXG4gIH0sIFtzZXNzaW9uTWV0YSwgYWdlbnRzLmRhdGEsIHNlbGVjdEFnZW50LCBzZXRDbGllbnQsIHNldFByb2plY3QsIHNldFRhc2ssIHNldENoaXBzUHJvamVjdCwgc3RvcEdlbmVyYXRpb25GdW5jdGlvbl0pXG5cbiAgY29uc3QgeyBzaG93TmV3Q2hhdCwgaXNNeUFnZW50c1NlY3Rpb24sIGlzTXlTa2lsbHNTZWN0aW9uLCBpc01haWFrZXJDcmVhdG9ySG9tZSB9ID0gdXNlTWVtbyhcbiAgICAoKSA9PiByZXNvbHZlQ2hhdE1vZGFsU2VjdGlvbkZsYWdzKGNvbXB1dGVkQ3VycmVudE9wdGlvbiwgaXNNYWlha2VyQWdlbnRTZWxlY3RlZCksXG4gICAgW2NvbXB1dGVkQ3VycmVudE9wdGlvbiwgaXNNYWlha2VyQWdlbnRTZWxlY3RlZF1cbiAgKVxuXG4gIGNvbnN0IGhhc0NoYXRBY2Nlc3MgPSB2YWxpZGF0ZUFjY2Vzc0J5RmVhdHVyZShzZWN0aW9uLCB1c2VyKVxuICBjb25zdCBtYWluQ29udGVudFZpZXcgPSByZXNvbHZlQ2hhdE1vZGFsTWFpbkNvbnRlbnRWaWV3KGhhc0Vycm9yLCBoYXNDaGF0QWNjZXNzKVxuICBjb25zdCBzaG93TW9kYWxGb290ZXIgPSBzaG91bGRTaG93Q2hhdE1vZGFsRm9vdGVyKHtcbiAgICBjb21wdXRlZEN1cnJlbnRPcHRpb24sXG4gICAgaG9tZU9wdGlvbjogb3B0aW9ucy5ob21lLFxuICAgIGNoYXRPcHRpb246IG9wdGlvbnMuY2hhdCxcbiAgICBhZ2VudHNDb3VudDogYWdlbnRzLmRhdGEubGVuZ3RoLFxuICAgIGlzTWFpYWtlckNyZWF0b3JIb21lLFxuICAgIGhhc0Vycm9yLFxuICAgIGxvYWRpbmcsXG4gICAgaGFzQWNjZXNzOiBoYXNDaGF0QWNjZXNzLFxuICB9KVxuICBjb25zdCBzaG93U2lkZWJhciA9IHNob3VsZFJlbmRlckNoYXRTaWRlYmFyKGhhc0NoYXRBY2Nlc3MsIGlzRmxvYXRpbmcsIGlzTWFpYVBhZ2VSb3V0ZSlcblxuICAvLyBCb3TDs24gXCJ2b2x2ZXJcIjogc29sbyBwYXJhIGVsIG9yY2hlc3RyYXRvci5cbiAgLy8gLSBFbiBlbCBjaGF0OiBkaXNwb25pYmxlIGVuIHRvZGFzIGxhcyBzZWNjaW9uZXMgKGhlYWRlciB5IHByb2plY3QvY2xpZW50L3Rhc2spLlxuICAvLyAtIEVuIGVsIGhvbWUgcGFzbyAyIChGQVFzL0ZVQXMgY29uIGNvbnRleHRvIHBpbmVhZG8pOiBlbiBlbCBoZWFkZXIgc2llbXByZTsgZW5cbiAgLy8gICBwcm9qZWN0L2NsaWVudC90YXNrIHNvbG8gc2kgZWwgdXN1YXJpbyByZWluaWNpw7MgZWwgY29udGV4dG8gKHBhc8OzIHBvciBlbCBzZWxlY3RvciBkZVxuICAvLyAgIGNvbnRleHRvcyByZWNpZW50ZXMpLiBFbiBlbCBwYXNvIDEgKHNpbiBjb250ZXh0bykgTk8gc2UgbXVlc3RyYS5cbiAgY29uc3QgaGFzUGlubmVkQ29udGV4dCA9IHJlc29sdmVIYXNQaW5uZWRDb250ZXh0KHtcbiAgICB0YXNrSWQ6IHRhc2s/LmlkLFxuICAgIGNoaXBzUHJvamVjdElkOiBjaGlwc1Byb2plY3Q/LnByb2plY3RJZCxcbiAgICBjbGllbnRJZDogY2xpZW50Py5pZCxcbiAgICBwcm9qZWN0SWQ6IHByb2plY3Q/LmlkLFxuICB9KVxuICBjb25zdCB7IGlzQ2hhdFZpZXcsIGlzSGVhZGVySG9tZVN0ZXAyLCBpc1NlY3Rpb25SZXNldEhvbWVTdGVwMiB9ID0gcmVzb2x2ZU9yY2hlc3RyYXRvckhvbWVOYXZGbGFncyh7XG4gICAgY29tcHV0ZWRDdXJyZW50T3B0aW9uLFxuICAgIGhvbWVPcHRpb246IG9wdGlvbnMuaG9tZSxcbiAgICBjaGF0T3B0aW9uOiBvcHRpb25zLmNoYXQsXG4gICAgaGFzUGlubmVkQ29udGV4dCxcbiAgICBzZWN0aW9uLFxuICAgIGRpZFJlc2V0Q29udGV4dEluU2VjdGlvbixcbiAgfSlcbiAgY29uc3Qgc2hvd0JhY2tCdXR0b24gPSBzaG91bGRTaG93T3JjaGVzdHJhdG9yQmFja0J1dHRvbih7XG4gICAgYWdlbnRUeXBlOiBhZ2VudD8udHlwZSxcbiAgICBoYXNFcnJvcixcbiAgICBsb2FkaW5nLFxuICAgIGlzQ2hhdFZpZXcsXG4gICAgaXNIZWFkZXJIb21lU3RlcDIsXG4gICAgaXNTZWN0aW9uUmVzZXRIb21lU3RlcDIsXG4gIH0pXG4gIGNvbnN0IGhhbmRsZU9wZW5NYXJrZXRwbGFjZSA9IHVzZUNhbGxiYWNrKGFzeW5jICgpID0+IHtcbiAgICBpZiAoIWNhbk9wZW5NYWlhTWFya2V0cGxhY2UoQm9vbGVhbih3aW5kb3cuTUFJQV9DSEFUX0FJX0ZFQVRVUkVfQUNDRVNTX01VTFRJX0FHRU5UUykpKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgYXdhaXQgZW5zdXJlQWdlbnRzTG9hZGVkKClcbiAgICBjbGVhckFnZW50KClcbiAgICBzZXRDdXJyZW50T3B0aW9uKG9wdGlvbnMubXlBZ2VudHMpXG4gICAgcGF0Y2hNYWlhUGFuZWxTZXNzaW9uKHVzZXIuaWQsIHtcbiAgICAgIGFnZW50c05hdkFjdGl2ZTogJ215QWdlbnRzJyxcbiAgICAgIGN1cnJlbnRPcHRpb246IG9wdGlvbnMubXlBZ2VudHMsXG4gICAgICBhY3RpdmVDaGF0SWQ6IG51bGwsXG4gICAgICBhZ2VudElkOiBudWxsLFxuICAgIH0pXG4gIH0sIFtjbGVhckFnZW50LCBlbnN1cmVBZ2VudHNMb2FkZWQsIHVzZXIuaWRdKVxuXG4gIGNvbnN0IGhhbmRsZU9wZW5Ta2lsbHMgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgaWYgKCFzaG91bGRPcGVuU2tpbGxzQ2F0YWxvZyh1c2VySGFzU2tpbGxzQWNjZXNzKSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGNsZWFyQWdlbnQoKVxuICAgIHNldEhhc0Vycm9yKGZhbHNlKVxuICAgIHNldEN1cnJlbnRPcHRpb24ob3B0aW9ucy5teVNraWxscylcbiAgICBoYW5kbGVHZXRTa2lsbHMoKVxuICAgIHBhdGNoTWFpYVBhbmVsU2Vzc2lvbih1c2VyLmlkLCB7XG4gICAgICBhZ2VudHNOYXZBY3RpdmU6ICdteVNraWxscycsXG4gICAgICBjdXJyZW50T3B0aW9uOiBvcHRpb25zLm15U2tpbGxzLFxuICAgIH0pXG4gIH0sIFtjbGVhckFnZW50LCBoYW5kbGVHZXRTa2lsbHMsIHVzZXIuaWQsIHVzZXJIYXNTa2lsbHNBY2Nlc3NdKVxuXG4gIGNvbnN0IGhhbmRsZUdvVG9NYWlha2VyID0gdXNlQ2FsbGJhY2soYXN5bmMgKCkgPT4ge1xuICAgIHNldEhhc0Vycm9yKGZhbHNlKVxuICAgIGxldCBtYWlha2VyQWdlbnQgPSBhZ2VudHMuZGF0YS5maW5kKChhOiBBZ2VudCkgPT4gaXNNYXJrZXRwbGFjZUdsb2JhbENsb25lQWdlbnQoYSkpXG4gICAgaWYgKCFtYWlha2VyQWdlbnQpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2hNYWlhKHtcbiAgICAgICAgICBwYXRoOiBgYWdlbnRzP2FnZW50X3R5cGU9Y2xvbmUmZW50aXR5PWdsb2JhbCZsYW5nPSR7bWFwQ09STGFuZyhpMThuLmxhbmd1YWdlKX1gLFxuICAgICAgICAgIG1ldGhvZDogJ0dFVCcsXG4gICAgICAgIH0pXG4gICAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXNwb25zZS5qc29uKClcbiAgICAgICAgbWFpYWtlckFnZW50ID0gKGRhdGEuZGF0YSB8fCBbXSkuZmluZCgoYTogQWdlbnQpID0+IGlzTWFya2V0cGxhY2VHbG9iYWxDbG9uZUFnZW50KGEpKVxuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgIH1cbiAgICBpZiAoIW1haWFrZXJBZ2VudCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIHNldFByb2plY3QobnVsbClcbiAgICBzZXRDbGllbnQ/LihudWxsKVxuICAgIHNldFRhc2s/LihudWxsKVxuICAgIHNlbGVjdEFnZW50KG1haWFrZXJBZ2VudClcbiAgICBzZXRDdXJyZW50T3B0aW9uKG9wdGlvbnMuaG9tZSlcbiAgICBwYXRjaE1haWFQYW5lbFNlc3Npb24odXNlci5pZCwge1xuICAgICAgYWdlbnRzTmF2QWN0aXZlOiAnbWFpYWtlcicsXG4gICAgICBjdXJyZW50T3B0aW9uOiBvcHRpb25zLmhvbWUsXG4gICAgICBhZ2VudElkOiBtYWlha2VyQWdlbnQuaWQsXG4gICAgICBhY3RpdmVDaGF0SWQ6IG51bGwsXG4gICAgfSlcbiAgfSwgW2FnZW50cy5kYXRhLCBpMThuLmxhbmd1YWdlLCBzZWxlY3RBZ2VudCwgc2V0Q2xpZW50LCBzZXRQcm9qZWN0LCBzZXRUYXNrLCB1c2VyLmlkXSlcblxuICBjb25zdCBsb2FkQWdlbnRzRm9yU2Vzc2lvblJlc3RvcmUgPSB1c2VDYWxsYmFjayhcbiAgICBhc3luYyAoc25hcHNob3Q6IE1haWFQYW5lbFNlc3Npb25TbmFwc2hvdCk6IFByb21pc2U8dm9pZD4gPT4ge1xuICAgICAgaWYgKHNob3VsZFNraXBBZ2VudHNMb2FkT25TZXNzaW9uUmVzdG9yZShzbmFwc2hvdC5hZ2VudHNOYXZBY3RpdmUpKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBsZXQgYWdlbnRUb1NlbGVjdDogQWdlbnQgfCB1bmRlZmluZWRcbiAgICAgIGlmIChzaG91bGRGZXRjaEFnZW50RGV0YWlsT25TZXNzaW9uUmVzdG9yZShzbmFwc2hvdC5hZ2VudElkLCBzbmFwc2hvdC5hZ2VudHNOYXZBY3RpdmUpKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgYWdlbnRUb1NlbGVjdCA9IGF3YWl0IGZldGNoQWdlbnREZXRhaWwoc25hcHNob3QuYWdlbnRJZCBhcyBzdHJpbmcpXG4gICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgIGFnZW50VG9TZWxlY3QgPSB1bmRlZmluZWRcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoIWFnZW50c0ZldGNoZWRSZWYuY3VycmVudCkge1xuICAgICAgICBhZ2VudHNGZXRjaGVkUmVmLmN1cnJlbnQgPSB0cnVlXG4gICAgICAgIGF3YWl0IGhhbmRsZUdldEFnZW50cyhzaG91bGRQYXNzQWdlbnRUb0dldEFnZW50c09uUmVzdG9yZShzbmFwc2hvdC5hZ2VudHNOYXZBY3RpdmUpID8gYWdlbnRUb1NlbGVjdCA6IHVuZGVmaW5lZClcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGlmIChzaG91bGRTZWxlY3RGZXRjaGVkQWdlbnRBZnRlclJlc3RvcmUoYWdlbnRUb1NlbGVjdCwgc25hcHNob3QuYWdlbnRzTmF2QWN0aXZlKSkge1xuICAgICAgICBzZWxlY3RBZ2VudChhZ2VudFRvU2VsZWN0IGFzIEFnZW50KVxuICAgICAgfVxuICAgIH0sXG4gICAgW2hhbmRsZUdldEFnZW50cywgc2VsZWN0QWdlbnRdXG4gIClcblxuICBjb25zdCBhcHBseVNlc3Npb25SZXN0b3JlID0gdXNlQ2FsbGJhY2soXG4gICAgYXN5bmMgKHNuYXBzaG90OiBNYWlhUGFuZWxTZXNzaW9uU25hcHNob3QpID0+IHtcbiAgICAgIHNldElzTWluaW1pemVkKGZhbHNlKVxuICAgICAgc2V0Q2hhdFZpZXdWaXNpYmxlKHRydWUpXG5cbiAgICAgIGNvbnN0IGNoaXBzUHJvamVjdEZyb21TbmFwc2hvdCA9IHJlc29sdmVTbmFwc2hvdENoaXBzUHJvamVjdChzbmFwc2hvdC5ob3N0Q29udGV4dClcbiAgICAgIGlmIChjaGlwc1Byb2plY3RGcm9tU25hcHNob3QpIHtcbiAgICAgICAgc2V0Q2hpcHNQcm9qZWN0KGNoaXBzUHJvamVjdEZyb21TbmFwc2hvdClcbiAgICAgIH1cblxuICAgICAgY29uc3QgcmVzdG9yZVJvdXRlID0gcmVzb2x2ZVNlc3Npb25SZXN0b3JlTmF2Um91dGUoc25hcHNob3QpXG5cbiAgICAgIGlmIChyZXN0b3JlUm91dGUgPT09ICdteUFnZW50cycpIHtcbiAgICAgICAgYXdhaXQgaGFuZGxlT3Blbk1hcmtldHBsYWNlKClcbiAgICAgICAgZm9jdXNDaGF0SW5wdXQoKVxuICAgICAgICBzeW5jUGFuZWxTZXNzaW9uKClcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGlmIChyZXN0b3JlUm91dGUgPT09ICdteVNraWxscycpIHtcbiAgICAgICAgaGFuZGxlT3BlblNraWxscygpXG4gICAgICAgIGZvY3VzQ2hhdElucHV0KClcbiAgICAgICAgc3luY1BhbmVsU2Vzc2lvbigpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBpZiAocmVzdG9yZVJvdXRlID09PSAnbWFpYWtlcicpIHtcbiAgICAgICAgYXdhaXQgaGFuZGxlR29Ub01haWFrZXIoKVxuICAgICAgICBmb2N1c0NoYXRJbnB1dCgpXG4gICAgICAgIHN5bmNQYW5lbFNlc3Npb24oKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgaWYgKHJlc3RvcmVSb3V0ZSA9PT0gJ2NoYXQnKSB7XG4gICAgICAgIHNldFVzZXJJbml0aWFsTWVzc2FnZSh7IG1lc3NhZ2U6ICcnLCBhdHRhY2htZW50czogW10gfSlcbiAgICAgICAgc2V0SW5pdGlhbENoYXRJZChzbmFwc2hvdC5hY3RpdmVDaGF0SWQgPz8gbnVsbClcbiAgICAgICAgZ2V0Q2hhdHNTdG9yZVN0YXRlKCkuc2V0QWN0aXZlQ2hhdElkKHNuYXBzaG90LmFjdGl2ZUNoYXRJZCA/PyBudWxsKVxuICAgICAgICBkb2N1bWVudC5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgnY2hhdC1zZXNzaW9uLWNoYW5nZWQnKSlcbiAgICAgICAgaGFuZGxlcnMuY2hhdCgpXG4gICAgICB9IGVsc2UgaWYgKHJlc3RvcmVSb3V0ZSA9PT0gJ3NhdmVkT3B0aW9uJyAmJiBzbmFwc2hvdC5jdXJyZW50T3B0aW9uKSB7XG4gICAgICAgIHNldEN1cnJlbnRPcHRpb24oc25hcHNob3QuY3VycmVudE9wdGlvbiBhcyBvcHRpb25zKVxuICAgICAgfVxuXG4gICAgICBmb2N1c0NoYXRJbnB1dCgpXG4gICAgICBzeW5jUGFuZWxTZXNzaW9uKClcbiAgICB9LFxuICAgIFtcbiAgICAgIGZvY3VzQ2hhdElucHV0LFxuICAgICAgaGFuZGxlR29Ub01haWFrZXIsXG4gICAgICBoYW5kbGVPcGVuTWFya2V0cGxhY2UsXG4gICAgICBoYW5kbGVPcGVuU2tpbGxzLFxuICAgICAgaGFuZGxlcnMsXG4gICAgICBzZXRDaGF0Vmlld1Zpc2libGUsXG4gICAgICBzZXRDaGlwc1Byb2plY3QsXG4gICAgICBzeW5jUGFuZWxTZXNzaW9uLFxuICAgIF1cbiAgKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3Qgc25hcHNob3QgPSBwZW5kaW5nU2Vzc2lvblJlc3RvcmVSZWYuY3VycmVudFxuICAgIGlmICghc25hcHNob3QgfHwgc2Vzc2lvblJlc3RvcmVTdGFydGVkUmVmLmN1cnJlbnQpIHJldHVyblxuICAgIHNlc3Npb25SZXN0b3JlU3RhcnRlZFJlZi5jdXJyZW50ID0gdHJ1ZVxuXG4gICAgc2V0Q2hhdFZpZXdWaXNpYmxlKHRydWUpXG5cbiAgICBjb25zdCBydW5SZXN0b3JlID0gYXN5bmMgKCkgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgbG9hZEFnZW50c0ZvclNlc3Npb25SZXN0b3JlKHNuYXBzaG90KVxuICAgICAgICBwZW5kaW5nU2Vzc2lvblJlc3RvcmVSZWYuY3VycmVudCA9IG51bGxcbiAgICAgICAgYXdhaXQgYXBwbHlTZXNzaW9uUmVzdG9yZShzbmFwc2hvdClcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIHNldElzUmVzdG9yaW5nU2Vzc2lvbihmYWxzZSlcbiAgICAgICAgc2V0UmVmZXRjaENoYXRzKHRydWUpXG4gICAgICB9XG4gICAgfVxuXG4gICAgcnVuUmVzdG9yZSgpLmNhdGNoKCgpID0+IHVuZGVmaW5lZClcbiAgfSwgW2FwcGx5U2Vzc2lvblJlc3RvcmUsIGxvYWRBZ2VudHNGb3JTZXNzaW9uUmVzdG9yZSwgc2V0Q2hhdFZpZXdWaXNpYmxlXSlcblxuICBjb25zdCBoYW5kbGVEZWxldGVBZ2VudEZyb21NeUFnZW50cyA9IHVzZUNhbGxiYWNrKFxuICAgIChhZ2VudElkOiBzdHJpbmcpID0+IHtcbiAgICAgIHJlbW92ZUFnZW50KGFnZW50SWQpXG4gICAgICBpZiAoc2hvdWxkUmVzZWxlY3RBZ2VudEFmdGVyRGVsZXRlKGFnZW50Py5pZCwgYWdlbnRJZCkpIHtcbiAgICAgICAgc2VsZWN0Rmlyc3RBZ2VudChhZ2VudElkKVxuICAgICAgfVxuICAgIH0sXG4gICAgW2FnZW50Py5pZCwgcmVtb3ZlQWdlbnQsIHNlbGVjdEZpcnN0QWdlbnRdXG4gIClcblxuICBjb25zdCBtb2RhbFBhbmVsID0gKFxuICAgIDw+XG4gICAgICB7c2hvd1NpZGViYXIgPyAoXG4gICAgICAgIDxTaWRlYmFyXG4gICAgICAgICAgb25Hb1RvQ2hhdD17Z29Ub0NoYXR9XG4gICAgICAgICAgb25FcnJvcj17KCkgPT4gc2V0U2lkZWJhckhhc0Vycm9yKHRydWUpfVxuICAgICAgICAgIGhhbmRsZUdvVG9Ib21lPXtoYW5kbGVHb0hvbWV9XG4gICAgICAgICAgaGFuZGxlU3RhcnROZXdDaGF0PXtoYW5kbGVTdGFydE5ld0NoYXR9XG4gICAgICAgICAgaGFuZGxlT3Blbk1hcmtldHBsYWNlPXtoYW5kbGVPcGVuTWFya2V0cGxhY2V9XG4gICAgICAgICAgc2hvd05ld0NoYXQ9e3Nob3dOZXdDaGF0fVxuICAgICAgICAgIHJlZmV0Y2hDaGF0cz17cmVmZXRjaENoYXRzfVxuICAgICAgICAgIGhhbmRsZVNldFJlZmV0Y2hDaGF0cz17c2V0UmVmZXRjaENoYXRzfVxuICAgICAgICAgIGhhc0Vycm9yPXtzaWRlYmFySGFzRXJyb3J9XG4gICAgICAgICAgYWdlbnRzTmF2QWN0aXZlPXtzaWRlYmFyQWdlbnRzTmF2QWN0aXZlfVxuICAgICAgICAgIGhhbmRsZU9wZW5Ta2lsbHM9e2hhbmRsZU9wZW5Ta2lsbHN9XG4gICAgICAgICAgb25PcGVuTWFpYWtlckNyZWF0b3I9e2hhbmRsZUdvVG9NYWlha2VyfVxuICAgICAgICAgIGlzTGVnYWN5Q29udGV4dFNlc3Npb249eyEhbGVnYWN5Q29udGV4dFNlc3Npb259XG4gICAgICAgICAgaW5pdGlhbE9wZW49e3NhdmVkU2Vzc2lvbk9uTW91bnRSZWYuY3VycmVudD8uc2lkZWJhck9wZW4gPz8gZmFsc2V9XG4gICAgICAgICAgb25PcGVuQ2hhbmdlPXtoYW5kbGVTaWRlYmFyT3BlbkNoYW5nZX1cbiAgICAgICAgLz5cbiAgICAgICkgOiBudWxsfVxuICAgICAgPFNDQ0FJTUNvbnRlbnQgZXhwYW5kZWQ9e2V4cGFuZGVkfSBmbG9hdGluZz17aXNGbG9hdGluZ30+XG4gICAgICAgIDxDaGF0QUlNb2RhbEhlYWRlclxuICAgICAgICAgIGxheW91dE1vZGU9e2xheW91dE1vZGV9XG4gICAgICAgICAgb25MYXlvdXRNb2RlQ2hhbmdlPXtoYW5kbGVMYXlvdXRNb2RlQ2hhbmdlfVxuICAgICAgICAgIGV4cGFuZGVkPXtleHBhbmRlZH1cbiAgICAgICAgICBkcmFnZ2FibGU9e2lzRmxvYXRpbmd9XG4gICAgICAgICAgb25EcmFnU3RhcnQ9e2hhbmRsZURyYWdTdGFydH1cbiAgICAgICAgICBvbkRyYWdNb3ZlPXtoYW5kbGVEcmFnTW92ZX1cbiAgICAgICAgICBvbkRyYWdFbmQ9e2hhbmRsZURyYWdFbmR9XG4gICAgICAgICAgaGFuZGxlTWluaW1pemU9e2hhbmRsZU1pbmltaXplfVxuICAgICAgICAgIGFnZW50cz17YWdlbnRzLmRhdGF9XG4gICAgICAgICAgaGFzRXJyb3I9eyEhYWdlbnRFcnJvcn1cbiAgICAgICAgICBsb2FkaW5nPXtsb2FkaW5nfVxuICAgICAgICAgIGxvYWRpbmdNb3JlPXtsb2FkaW5nTW9yZX1cbiAgICAgICAgICBoYXNNb3JlPXthZ2VudHMuaGFzX21vcmV9XG4gICAgICAgICAgaGFuZGxlUmVzZXRDaGF0PXtoYW5kbGVSZXNldENoYXR9XG4gICAgICAgICAgb25BZ2VudFVwZGF0ZT17dXBkYXRlQWdlbnRGYXZvcml0ZX1cbiAgICAgICAgICBsb2FkTW9yZUFnZW50cz17bG9hZE1vcmVBZ2VudHN9XG4gICAgICAgICAgc29ydEFnZW50c0xpc3Q9e3NvcnRBZ2VudHNMaXN0fVxuICAgICAgICAgIGlzTXlBZ2VudHNTZWN0aW9uPXtpc015QWdlbnRzU2VjdGlvbn1cbiAgICAgICAgICBpc015U2tpbGxzU2VjdGlvbj17aXNNeVNraWxsc1NlY3Rpb259XG4gICAgICAgICAgaXNNYWlha2VyU2VjdGlvbj17aXNNYWlha2VyQ3JlYXRvckhvbWV9XG4gICAgICAgICAgc2hvd0JhY2tCdXR0b249e3Nob3dCYWNrQnV0dG9ufVxuICAgICAgICAgIG9uQmFjaz17aGFuZGxlQmFja31cbiAgICAgICAgLz5cbiAgICAgICAge21haW5Db250ZW50VmlldyA9PT0gJ2Vycm9yJyA/IChcbiAgICAgICAgICA8TUFJQUVycm9yIC8+XG4gICAgICAgICkgOiBtYWluQ29udGVudFZpZXcgPT09ICdjaGF0JyA/IChcbiAgICAgICAgICA8Q2hhdEFJQ29udGVudFxuICAgICAgICAgICAgY3VycmVudE9wdGlvbj17Y29tcHV0ZWRDdXJyZW50T3B0aW9ufVxuICAgICAgICAgICAgaGFuZGxlcnM9e3sgLi4uaGFuZGxlcnMsIGNoYXQ6IHN0YXJ0Q2hhdCwgaG9tZTogaGFuZGxlcnMuaG9tZSwgaGFuZGxlR29Ib21lIH19XG4gICAgICAgICAgICBvbkVycm9yPXsoKSA9PiBzZXRIYXNFcnJvcih0cnVlKX1cbiAgICAgICAgICAgIHJlZnM9e3sgdXNlckluaXRpYWxNZXNzYWdlLCBpbml0aWFsQ2hhdElkIH19XG4gICAgICAgICAgICBvblNlbmRNZXNzYWdlUmVhZHk9e2hhbmRsZVNlbmRNZXNzYWdlUmVhZHl9XG4gICAgICAgICAgICBleHBhbmRlZD17ZXhwYW5kZWR9XG4gICAgICAgICAgICBmbG9hdGluZz17aXNGbG9hdGluZ31cbiAgICAgICAgICAgIGFnZW50cz17YWdlbnRzLmRhdGF9XG4gICAgICAgICAgICBsb2FkaW5nQWdlbnRzPXtsb2FkaW5nfVxuICAgICAgICAgICAgb25EZWxldGVBZ2VudD17aGFuZGxlRGVsZXRlQWdlbnRGcm9tTXlBZ2VudHN9XG4gICAgICAgICAgICBvbkZhdm9yaXRlQWdlbnRVcGRhdGU9e3VwZGF0ZUFnZW50RmF2b3JpdGV9XG4gICAgICAgICAgICBoYXNNb3JlQWdlbnRzPXshIWFnZW50cy5oYXNfbW9yZX1cbiAgICAgICAgICAgIGxvYWRpbmdNb3JlQWdlbnRzPXtsb2FkaW5nTW9yZX1cbiAgICAgICAgICAgIG9uTG9hZE1vcmVBZ2VudHM9e2xvYWRNb3JlQWdlbnRzfVxuICAgICAgICAgICAgb25Hb1RvTWFpYWtlcj17aGFuZGxlR29Ub01haWFrZXJ9XG4gICAgICAgICAgICBteVNraWxscz17bXlTa2lsbHN9XG4gICAgICAgICAgICBzaGFyZWRTa2lsbHM9e3NoYXJlZFNraWxsc31cbiAgICAgICAgICAgIGxvYWRpbmdTa2lsbHM9e2xvYWRpbmdTa2lsbHN9XG4gICAgICAgICAgICBvbkRlbGV0ZVNraWxsPXtyZW1vdmVTa2lsbH1cbiAgICAgICAgICAgIG9uU2VhcmNoQWdlbnRzPXtzZWFyY2hDdXN0b21BZ2VudHN9XG4gICAgICAgICAgICBzZWFyY2hMb2FkaW5nQWdlbnRzPXtzZWFyY2hMb2FkaW5nfVxuICAgICAgICAgICAgYWdlbnRFcnJvcj17YWdlbnRFcnJvcn1cbiAgICAgICAgICAgIGlzUmVzdG9yaW5nU2Vzc2lvbj17aXNSZXN0b3JpbmdTZXNzaW9ufVxuICAgICAgICAgIC8+XG4gICAgICAgICkgOiAoXG4gICAgICAgICAgPFByb2plY3RTdW1tYXJ5Q29udGVudCBvblJlc3RhcnRTdW1tYXJ5PXtoYW5kbGVycy5ob21lfSAvPlxuICAgICAgICApfVxuICAgICAgICB7c2hvd01vZGFsRm9vdGVyICYmIChcbiAgICAgICAgICA8Q2hhdEFpTW9kYWxGb290ZXJcbiAgICAgICAgICAgIGFnZW50PXthZ2VudH1cbiAgICAgICAgICAgIGhhbmRsZVNlbmRNZXNzYWdlPXtoYW5kbGVTZW5kTWVzc2FnZX1cbiAgICAgICAgICAgIGhhbmRsZVN0b3BHZW5lcmF0aW9uPXtzdG9wR2VuZXJhdGlvbkZ1bmN0aW9ufVxuICAgICAgICAgICAgaXNTdHJlYW1pbmc9e2lzU3RyZWFtaW5nfVxuICAgICAgICAgICAgaXNXcml0aW5nPXtpc1dyaXRpbmd9XG4gICAgICAgICAgICBjaGF0SWQ9e2luaXRpYWxDaGF0SWR9XG4gICAgICAgICAgICBuZXdDaGF0S2V5PXtuZXdDaGF0S2V5fVxuICAgICAgICAgICAgdG9vbHRpcFpJbmRleD17dG9vbHRpcFpJbmRleH1cbiAgICAgICAgICAgIGxlZ2FjeUNvbnRleHRTZXNzaW9uPXtsZWdhY3lDb250ZXh0U2Vzc2lvbn1cbiAgICAgICAgICAgIG9uQ29udGludWVJbk5ld0NoYXQ9e2hhbmRsZUNvbnRpbnVlTGVnYWN5Q29udGV4dEluTmV3Q2hhdH1cbiAgICAgICAgICAgIGxheW91dE1vZGU9e2xheW91dE1vZGV9XG4gICAgICAgICAgLz5cbiAgICAgICAgKX1cbiAgICAgIDwvU0NDQUlNQ29udGVudD5cbiAgICA8Lz5cbiAgKVxuXG4gIGNvbnN0IGNvbnRlbnRXcmFwcGVyID0gKFxuICAgIDxTQ0NBSU1Db250ZW50V3JhcHBlciBleHBhbmRlZD17ZXhwYW5kZWR9IGZsb2F0aW5nPXtpc0Zsb2F0aW5nfSByZWY9e2NvbnRlbnRXcmFwcGVyUmVmfT5cbiAgICAgIHttb2RhbFBhbmVsfVxuICAgIDwvU0NDQUlNQ29udGVudFdyYXBwZXI+XG4gIClcblxuICByZXR1cm4gKFxuICAgIHNlbGVjdG9yICYmXG4gICAgUmVhY3RET00uY3JlYXRlUG9ydGFsKFxuICAgICAgPFNDQ0FJTVdyYXBwZXJcbiAgICAgICAgZXhwYW5kZWQ9e2V4cGFuZGVkfVxuICAgICAgICBsYXlvdXRNb2RlPXtsYXlvdXRNb2RlfVxuICAgICAgICBkcmFnUG9zaXRpb249e3Jlc29sdmVkRHJhZ1Bvc2l0aW9ufVxuICAgICAgICBlbGV2YXRlZD17c2hvdWxkVXNlRWxldmF0ZWRNYWlhUGFuZWwoc2VjdGlvbil9XG4gICAgICAgICRtaW5pbWl6ZWQ9e2lzTWluaW1pemVkfVxuICAgICAgPlxuICAgICAgICA8U0NDQUlNTWluaW1pemVkSGlkZSAkaGlkZGVuPXtpc01pbmltaXplZH0+XG4gICAgICAgICAgPEZsb2F0aW5nUGFuZWxNb3Rpb24gdGlsdD17dGlsdE1vdGlvbn0gZXhwYW5kZWQ9e2V4cGFuZGVkfT5cbiAgICAgICAgICAgIHtjb250ZW50V3JhcHBlcn1cbiAgICAgICAgICA8L0Zsb2F0aW5nUGFuZWxNb3Rpb24+XG4gICAgICAgIDwvU0NDQUlNTWluaW1pemVkSGlkZT5cbiAgICAgICAge2lzTWluaW1pemVkICYmIChcbiAgICAgICAgICA8TWFpYU1pbmltaXplZFBpbGxcbiAgICAgICAgICAgIHNob3dOb3ZlbHR5RG90PXtzaG93TWluaW1pemVkTm92ZWx0eURvdH1cbiAgICAgICAgICAgIGlzU3RyZWFtaW5nPXtoYXNBY3RpdmVTdHJlYW19XG4gICAgICAgICAgICBvblJlc3RvcmU9e2hhbmRsZVJlc3RvcmVGcm9tTWluaW1pemVkfVxuICAgICAgICAgIC8+XG4gICAgICAgICl9XG4gICAgICAgIHt1c2VySGFzUGVybWlzc2lvbnMgJiYgKFxuICAgICAgICAgIDxBYm1BZ2VudE1vZGFsXG4gICAgICAgICAgICBhZGRBZ2VudD17YWRkQWdlbnR9XG4gICAgICAgICAgICB1cGRhdGVBZ2VudD17dXBkYXRlQWdlbnR9XG4gICAgICAgICAgICByZW1vdmVBZ2VudD17cmVtb3ZlQWdlbnR9XG4gICAgICAgICAgICB1cGRhdGVBZ2VudEZhdm9yaXRlPXt1cGRhdGVBZ2VudEZhdm9yaXRlfVxuICAgICAgICAgICAgc2VsZWN0Rmlyc3RBZ2VudD17c2VsZWN0Rmlyc3RBZ2VudH1cbiAgICAgICAgICAvPlxuICAgICAgICApfVxuICAgICAgICB7dXNlckhhc1NraWxsc0FjY2VzcyAmJiAoXG4gICAgICAgICAgPEFibVNraWxsTW9kYWwgYWRkU2tpbGw9e2FkZFNraWxsfSB1cGRhdGVTa2lsbEluTGlzdD17dXBkYXRlU2tpbGxJbkxpc3R9IHJlbW92ZVNraWxsPXtyZW1vdmVTa2lsbH0gLz5cbiAgICAgICAgKX1cbiAgICAgICAge3VzZXJIYXNTa2lsbHNBY2Nlc3MgJiYgPEFibVNraWxsR2VuZXJhdGVNb2RhbCAvPn1cbiAgICAgICAgPFNuYWNrYmFyIC8+XG4gICAgICA8L1NDQ0FJTVdyYXBwZXI+LFxuICAgICAgc2VsZWN0b3JcbiAgICApXG4gIClcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUNFQSxXQUFXLEVBQ1hDLE9BQU8sRUFDUEMsUUFBUSxFQUNSQyxNQUFNLEVBQ05DLFNBQVMsRUFDVEMsZUFBZSxRQUVWLE9BQU87QUFDZCxPQUFPQyxRQUFRLE1BQU0sV0FBVztBQUNoQyxPQUFPQyxNQUFNLE1BQU0sUUFBUTtBQUMzQixTQUFTQyxjQUFjLFFBQVEsZUFBZTtBQUM5QyxTQUFTQyxPQUFPLFFBQVEsMkJBQTJCO0FBQ25ELFNBQVNDLGlCQUFpQixRQUFRLGdDQUFnQztBQUNsRSxTQUFTQyxTQUFTLFFBQVEsdUJBQXVCO0FBQ2pELFNBQVNDLHNCQUFzQixRQUFRLHVDQUF1QztBQUU5RSxTQUFTQyxhQUFhLFFBQVEsa0JBQWtCO0FBQ2hELFNBQVNDLGFBQWEsRUFBRUMsT0FBTyxRQUFRLGFBQWE7QUFDcEQsU0FBU0MsT0FBTyxRQUFRLFlBQVk7QUFDcEMsU0FBU0MsWUFBWSxRQUFRLHlDQUF5QztBQUN0RSxTQUFTQyxZQUFZLFFBQVEseUNBQXlDO0FBQ3RFLFNBQVNDLGdCQUFnQixRQUFzQixpQ0FBaUM7QUFHaEYsU0FBU0MsaUJBQWlCLFFBQVEsa0RBQWtEO0FBQ3BGLFNBQVNDLFFBQVEsUUFBUSxtQ0FBbUM7QUFDNUQsU0FBU0MscUJBQXFCLFFBQVEsMEJBQTBCO0FBQ2hFLFNBQVNDLGFBQWEsUUFBUSw2Q0FBNkM7QUFDM0UsU0FBU0MsYUFBYSxFQUFFQywwQkFBMEIsUUFBUSw2Q0FBNkM7QUFDdkcsU0FBU0MscUJBQXFCLFFBQVEsNkRBQTZEO0FBQ25HLFNBQVNDLFFBQVEsUUFBUSwyQkFBMkI7QUFDcEQsU0FBU0MsYUFBYSxFQUFFQyxvQkFBb0IsRUFBRUMsbUJBQW1CLEVBQUVDLGFBQWEsUUFBUSxzQkFBc0I7QUFDOUcsU0FBU0MsaUJBQWlCLFFBQVEsZ0NBQWdDO0FBQ2xFLFNBQVNDLDBCQUEwQixRQUFRLDJDQUEyQztBQUN0RixTQUNFQywyQkFBMkIsRUFFM0JDLGdDQUFnQyxFQUNoQ0MsMkJBQTJCLFFBQ3RCLFVBQVU7QUFDakIsU0FBU0MsbUJBQW1CLEVBQUVDLHdCQUF3QixRQUFRLHVCQUF1QjtBQUNyRixTQUFTQyxpQkFBaUIsUUFBUSxnQ0FBZ0M7QUFDbEUsU0FBU0MsNkJBQTZCLFFBQVEsaUNBQWlDO0FBTS9FLFNBQVNDLFlBQVksUUFBUSw2QkFBNkI7QUFDMUQsU0FBU0Msa0JBQWtCLEVBQUVDLGFBQWEsUUFBUSw4QkFBOEI7QUFFaEYsU0FBU0Msb0JBQW9CLEVBQUVDLHFCQUFxQixRQUFRLHdDQUF3QztBQUNwRyxTQUNFQyxxQkFBcUIsRUFDckJDLHFCQUFxQixFQUNyQkMsb0JBQW9CLEVBRXBCQyxxQkFBcUIsUUFDaEIsNENBQTRDO0FBQ25ELFNBQVNDLGdCQUFnQixRQUFRLDBDQUEwQztBQUMzRSxTQUFTQyxTQUFTLFFBQVEsK0JBQStCO0FBQ3pELFNBQVNDLGdCQUFnQixRQUFRLGdEQUFnRDtBQUNqRixTQUFTQyxVQUFVLFFBQVEscUJBQXFCO0FBQ2hELFNBQVNDLE1BQU0sRUFBRUMsUUFBUSxRQUFRLHlCQUF5QjtBQUMxRCxTQUFTQyx5QkFBeUIsUUFBaUMsNkJBQTZCO0FBQ2hHLFNBQVNDLGtCQUFrQixRQUFRLG1DQUFtQztBQUN0RSxTQUNFQywwQkFBMEIsRUFDMUJDLHlCQUF5QixFQUN6QkMsaUJBQWlCLEVBQ2pCQywwQkFBMEIsRUFDMUJDLDRCQUE0QixFQUM1QkMsNEJBQTRCLEVBQzVCQywyQkFBMkIsRUFDM0JDLDJCQUEyQixFQUMzQkMsNkJBQTZCLEVBQzdCQywwQkFBMEIsRUFDMUJDLDRCQUE0QixFQUM1QkMsdUJBQXVCLEVBQ3ZCQyw4QkFBOEIsRUFDOUJDLCtCQUErQixFQUMvQkMsMEJBQTBCLEVBQzFCQywwQkFBMEIsRUFDMUJDLDBCQUEwQixFQUMxQkMsZ0NBQWdDLEVBQ2hDQywwQkFBMEIsRUFDMUJDLHdCQUF3QixFQUN4QkMsNkJBQTZCLEVBQzdCQyx1QkFBdUIsRUFDdkJDLHdDQUF3QyxFQUN4Q0MsNEJBQTRCLEVBQzVCQyx1Q0FBdUMsRUFDdkNDLGtDQUFrQyxFQUNsQ0MsNkJBQTZCLEVBQzdCQyx1QkFBdUIsRUFDdkJDLCtCQUErQixFQUMvQkMsZ0NBQWdDLEVBQ2hDQyxpQ0FBaUMsRUFDakNDLCtCQUErQixFQUMvQkMsK0JBQStCLEVBQy9CQyw0Q0FBNEMsRUFDNUNDLDhCQUE4QixFQUM5QkMscUNBQXFDLEVBQ3JDQyxzQkFBc0IsRUFDdEJDLDhCQUE4QixFQUM5QkMsdUJBQXVCLEVBQ3ZCQyxnQ0FBZ0MsRUFDaENDLHFCQUFxQixFQUNyQkMsOEJBQThCLEVBQzlCQyw2QkFBNkIsRUFDN0JDLGdDQUFnQyxFQUNoQ0MsOEJBQThCLEVBQzlCQywrQkFBK0IsRUFDL0JDLG9CQUFvQixFQUNwQkMsK0JBQStCLEVBQy9CQyxvQ0FBb0MsRUFDcENDLDRCQUE0QixFQUM1QkMsd0NBQXdDLEVBQ3hDQyxrQ0FBa0MsRUFDbENDLGlDQUFpQyxFQUNqQ0MsNkJBQTZCLEVBQzdCQyxvQ0FBb0MsRUFDcENDLHNDQUFzQyxFQUN0Q0MsbUNBQW1DLEVBQ25DQyxvQ0FBb0MsRUFDcENDLDJCQUEyQixFQUMzQkMsNEJBQTRCLEVBQzVCQyx1QkFBdUIsRUFDdkJDLCtCQUErQixFQUMvQkMseUJBQXlCLEVBQ3pCQywwQkFBMEIsRUFDMUJDLDhCQUE4QixFQUM5QkMscUNBQXFDLEVBQ3JDQyw0QkFBNEIsRUFDNUJDLDJCQUEyQixFQUMzQkMsdUJBQXVCLEVBQ3ZCQywwQkFBMEIsRUFDMUJDLCtCQUErQixFQUMvQkMsaUNBQWlDLEVBQ2pDQyxvQ0FBb0MsRUFDcENDLGtDQUFrQyxRQUU3Qix1QkFBdUI7O0FBRTlCO0FBQUEsU0FBQUMsR0FBQSxJQUFBQyxJQUFBLEVBQUFDLElBQUEsSUFBQUMsS0FBQSxFQUFBQyxRQUFBLElBQUFDLFNBQUE7QUFRQSxPQUFPLElBQU1DLG1CQUFtQixHQUFHLCtCQUErQjtBQUVsRSxPQUFPLElBQU1DLFdBQVcsR0FBRyxTQUFkQSxXQUFXQSxDQUFBLEVBQVM7RUFBQSxJQUFBQyxxQkFBQSxFQUFBQyxzQkFBQSxFQUFBQyxzQkFBQSxFQUFBQyxzQkFBQTtFQUMvQixJQUFNQyxJQUFJLEdBQUd2SSxPQUFPLENBQUMsQ0FBQztFQUN0QixJQUFBd0ksZUFBQSxHQUFpQnpJLGNBQWMsQ0FBQyxDQUFDbUIsUUFBUSxDQUFDdUgsUUFBUSxDQUFDLENBQUM7SUFBNUNDLElBQUksR0FBQUYsZUFBQSxDQUFKRSxJQUFJO0VBQ1osSUFBTUMsYUFBYSxHQUFHN0YsUUFBUSxDQUFDLENBQUM7RUFFaEMsSUFBTThGLHNCQUFzQixHQUFHbEosTUFBTSxDQUFrQzZDLG9CQUFvQixDQUFDZ0csSUFBSSxDQUFDTSxFQUFFLENBQUMsQ0FBQztFQUNyRyxJQUFNQyxxQkFBcUIsR0FBR3BGLDBCQUEwQixDQUFDa0Ysc0JBQXNCLENBQUNHLE9BQU8sQ0FBQztFQUN4RixJQUFNQyx3QkFBd0IsR0FBR3RKLE1BQU0sQ0FDckNvSixxQkFBcUIsR0FBR0Ysc0JBQXNCLENBQUNHLE9BQU8sR0FBRyxJQUMzRCxDQUFDO0VBQ0QsSUFBTUUsd0JBQXdCLEdBQUd2SixNQUFNLENBQUMsS0FBSyxDQUFDO0VBQzlDLElBQUF3SixTQUFBLEdBQW9EekosUUFBUSxDQUFDO01BQUEsT0FBTXVKLHdCQUF3QixDQUFDRCxPQUFPLElBQUksSUFBSTtJQUFBLEVBQUM7SUFBQUksVUFBQSxHQUFBQyxjQUFBLENBQUFGLFNBQUE7SUFBckdHLGtCQUFrQixHQUFBRixVQUFBO0lBQUVHLHFCQUFxQixHQUFBSCxVQUFBO0VBQ2hELElBQU1JLGNBQWMsR0FBRzdKLE1BQU0sRUFBQXlJLHFCQUFBLElBQUFDLHNCQUFBLEdBQUNRLHNCQUFzQixDQUFDRyxPQUFPLGNBQUFYLHNCQUFBLHVCQUE5QkEsc0JBQUEsQ0FBZ0NvQixXQUFXLGNBQUFyQixxQkFBQSxjQUFBQSxxQkFBQSxHQUFJLEtBQUssQ0FBQzs7RUFFbkY7RUFDQSxJQUFBc0IsVUFBQSxHQUFzQ2hLLFFBQVEsQ0FBQztNQUFBLE9BQU0sQ0FBQ3FKLHFCQUFxQjtJQUFBLEVBQUM7SUFBQVksVUFBQSxHQUFBTixjQUFBLENBQUFLLFVBQUE7SUFBckVFLFdBQVcsR0FBQUQsVUFBQTtJQUFFRSxjQUFjLEdBQUFGLFVBQUE7RUFDbEMsSUFBTUcsZUFBZSxHQUFHN0csa0JBQWtCLENBQUMsQ0FBQztFQUM1QyxJQUFNOEcsMEJBQTBCLEdBQUdwSyxNQUFNLENBQUMsS0FBSyxDQUFDO0VBQ2hELElBQU1xSyxrQkFBa0IsR0FBRzdILGFBQWEsQ0FBQyxVQUFBOEgsS0FBSztJQUFBLE9BQUlBLEtBQUssQ0FBQ0Qsa0JBQWtCO0VBQUEsRUFBQztFQUMzRSxJQUFNRSxXQUFXLEdBQUcvSCxhQUFhLENBQUMsVUFBQThILEtBQUs7SUFBQSxPQUFJQSxLQUFLLENBQUNDLFdBQVc7RUFBQSxFQUFDO0VBQzdELElBQU1DLHVCQUF1QixHQUFHMUksMEJBQTBCLENBQUNtSSxXQUFXLEVBQUVNLFdBQVcsQ0FBQztFQUNwRixJQUFNRSxZQUFZLEdBQUdqSSxhQUFhLENBQUMsVUFBQThILEtBQUs7SUFBQSxPQUFJQSxLQUFLLENBQUNHLFlBQVk7RUFBQSxFQUFDO0VBQy9EO0VBQ0E7RUFDQSxJQUFNQyxlQUFlLEdBQUczSCxnQkFBZ0IsQ0FBQyxVQUFBdUgsS0FBSztJQUFBLE9BQUk5Ryx5QkFBeUIsQ0FBQzhHLEtBQUssQ0FBQ0ssSUFBSSxDQUFDO0VBQUEsRUFBQzs7RUFFeEY7RUFDQSxJQUFNQyxXQUFXLEdBQUc1SyxNQUFNLENBQXdDLElBQUksQ0FBQztFQUN2RSxJQUFNNkssU0FBUyxHQUFHN0ssTUFBTSxDQUFzQixJQUFJLENBQUM7O0VBRW5EO0VBQ0E7RUFDQUMsU0FBUyxDQUFDLFlBQU07SUFDZCxJQUFJK0YsOEJBQThCLENBQUNzRCx3QkFBd0IsQ0FBQ0QsT0FBTyxJQUFJLElBQUksQ0FBQyxFQUFFO01BQzVFZ0Isa0JBQWtCLENBQUMsS0FBSyxDQUFDO0lBQzNCO0VBQ0YsQ0FBQyxFQUFFLENBQUNBLGtCQUFrQixDQUFDLENBQUM7O0VBRXhCO0VBQ0E7RUFDQXBLLFNBQVMsQ0FBQyxZQUFNO0lBQ2QsSUFBSWdHLDZCQUE2QixDQUFDd0UsWUFBWSxDQUFDLEVBQUU7TUFDL0MvSCxxQkFBcUIsQ0FBQ21HLElBQUksQ0FBQ00sRUFBRSxFQUFFc0IsWUFBWSxDQUFDO0lBQzlDO0VBQ0YsQ0FBQyxFQUFFLENBQUNBLFlBQVksRUFBRTVCLElBQUksQ0FBQ00sRUFBRSxDQUFDLENBQUM7RUFFM0IsSUFBTTJCLGNBQWMsR0FBR2pMLFdBQVcsQ0FBQyxZQUFNO0lBQ3ZDb0osYUFBYSxDQUFDOUYsTUFBTSxDQUFDNEgsY0FBYyxDQUFDO0lBQ3BDYixjQUFjLENBQUMsSUFBSSxDQUFDO0lBQ3BCRyxrQkFBa0IsQ0FBQyxLQUFLLENBQUM7SUFDekJ2SCxxQkFBcUIsQ0FBQytGLElBQUksQ0FBQ00sRUFBRSxFQUFFO01BQUU2QixVQUFVLEVBQUU7SUFBTSxDQUFDLENBQUM7RUFDdkQsQ0FBQyxFQUFFLENBQUMvQixhQUFhLEVBQUVvQixrQkFBa0IsRUFBRXhCLElBQUksQ0FBQ00sRUFBRSxDQUFDLENBQUM7RUFFaEQsSUFBTThCLGNBQWMsR0FBR3BMLFdBQVcsQ0FBQyxZQUFNO0lBQ3ZDcUwsTUFBTSxDQUFDQyxVQUFVLENBQUMsWUFBTTtNQUN0QkMsUUFBUSxDQUFDQyxhQUFhLENBQUMsSUFBSUMsV0FBVyxDQUFDLG9CQUFvQixDQUFDLENBQUM7SUFDL0QsQ0FBQyxFQUFFLEdBQUcsQ0FBQztFQUNULENBQUMsRUFBRSxFQUFFLENBQUM7RUFFTixJQUFBQyxVQUFBLEdBQW9EeEwsUUFBUSxDQVN6RDtNQUNEeUwsT0FBTyxFQUFFLEVBQUU7TUFDWEMsV0FBVyxFQUFFO0lBQ2YsQ0FBQyxDQUFDO0lBQUFDLFVBQUEsR0FBQWhDLGNBQUEsQ0FBQTZCLFVBQUE7SUFaS0ksa0JBQWtCLEdBQUFELFVBQUE7SUFBRUUscUJBQXFCLEdBQUFGLFVBQUE7RUFhaEQsSUFBQUcsVUFBQSxHQUEwQzlMLFFBQVEsQ0FBZ0IsSUFBSSxDQUFDO0lBQUErTCxVQUFBLEdBQUFwQyxjQUFBLENBQUFtQyxVQUFBO0lBQWhFRSxhQUFhLEdBQUFELFVBQUE7SUFBRUUsZ0JBQWdCLEdBQUFGLFVBQUE7RUFDdEMsSUFBQUcsVUFBQSxHQUFvQ2xNLFFBQVEsQ0FBQyxDQUFDLENBQUM7SUFBQW1NLFVBQUEsR0FBQXhDLGNBQUEsQ0FBQXVDLFVBQUE7SUFBeENFLFVBQVUsR0FBQUQsVUFBQTtJQUFFRSxhQUFhLEdBQUFGLFVBQUE7RUFDaEMsSUFBQUcsVUFBQSxHQUFzQ3RNLFFBQVEsQ0FBcUIsSUFBSSxDQUFDO0lBQUF1TSxXQUFBLEdBQUE1QyxjQUFBLENBQUEyQyxVQUFBO0lBQWpFRSxXQUFXLEdBQUFELFdBQUE7SUFBRUUsY0FBYyxHQUFBRixXQUFBO0VBQ2xDLElBQUFHLFdBQUEsR0FBc0QxTSxRQUFRLENBVzVELElBQUksQ0FBQztJQUFBMk0sV0FBQSxHQUFBaEQsY0FBQSxDQUFBK0MsV0FBQTtJQVhBRSxtQkFBbUIsR0FBQUQsV0FBQTtJQUFFRSxzQkFBc0IsR0FBQUYsV0FBQTtFQVlsRCxJQUFBRyxXQUFBLEdBQTREOU0sUUFBUSxDQUFzQixJQUFJLENBQUM7SUFBQStNLFdBQUEsR0FBQXBELGNBQUEsQ0FBQW1ELFdBQUE7SUFBeEZFLHNCQUFzQixHQUFBRCxXQUFBO0lBQUVFLHlCQUF5QixHQUFBRixXQUFBO0VBQ3hELElBQUFHLFdBQUEsR0FBc0NsTixRQUFRLENBQUMsS0FBSyxDQUFDO0lBQUFtTixXQUFBLEdBQUF4RCxjQUFBLENBQUF1RCxXQUFBO0lBQTlDRSxXQUFXLEdBQUFELFdBQUE7SUFBRUUsY0FBYyxHQUFBRixXQUFBO0VBQ2xDLElBQUFHLFdBQUEsR0FBa0N0TixRQUFRLENBQUMsS0FBSyxDQUFDO0lBQUF1TixXQUFBLEdBQUE1RCxjQUFBLENBQUEyRCxXQUFBO0lBQTFDRSxTQUFTLEdBQUFELFdBQUE7SUFBRUUsWUFBWSxHQUFBRixXQUFBO0VBRTlCLElBQUFHLFdBQUEsR0FBd0MxTixRQUFRLENBQUMsS0FBSyxDQUFDO0lBQUEyTixXQUFBLEdBQUFoRSxjQUFBLENBQUErRCxXQUFBO0lBQWhERSxZQUFZLEdBQUFELFdBQUE7SUFBRUUsZUFBZSxHQUFBRixXQUFBO0VBQ3BDLElBQUFHLFdBQUEsR0FBMEM5TixRQUFRLENBQVUsWUFBTTtNQUNoRSxJQUFNK04sS0FBSyxHQUFHNUUsc0JBQXNCLENBQUNHLE9BQU87TUFDNUMsT0FBT3hGLDJCQUEyQixDQUFDaUssS0FBSyxhQUFMQSxLQUFLLHVCQUFMQSxLQUFLLENBQUVDLGVBQWUsRUFBRUQsS0FBSyxhQUFMQSxLQUFLLHVCQUFMQSxLQUFLLENBQUVFLGFBQWEsRUFBRW5GLElBQUksQ0FBQztJQUN4RixDQUFDLENBQUM7SUFBQW9GLFdBQUEsR0FBQXZFLGNBQUEsQ0FBQW1FLFdBQUE7SUFIS0csYUFBYSxHQUFBQyxXQUFBO0lBQUVDLGdCQUFnQixHQUFBRCxXQUFBO0VBSXRDLElBQUFFLFdBQUEsR0FBZ0NwTyxRQUFRLENBQUMsS0FBSyxDQUFDO0lBQUFxTyxXQUFBLEdBQUExRSxjQUFBLENBQUF5RSxXQUFBO0lBQXhDRSxRQUFRLEdBQUFELFdBQUE7SUFBRUUsV0FBVyxHQUFBRixXQUFBO0VBQzVCO0VBQ0E7RUFDQTtFQUNBLElBQUFHLFdBQUEsR0FBZ0V4TyxRQUFRLENBQUMsS0FBSyxDQUFDO0lBQUF5TyxXQUFBLEdBQUE5RSxjQUFBLENBQUE2RSxXQUFBO0lBQXhFRSx3QkFBd0IsR0FBQUQsV0FBQTtJQUFFRSwyQkFBMkIsR0FBQUYsV0FBQTtFQUM1RCxJQUFNRyx1QkFBdUIsR0FBRzNPLE1BQU0sQ0FBQyxLQUFLLENBQUM7RUFDN0MsSUFBTTRPLFFBQVEsR0FBRzlPLE9BQU8sQ0FBQztJQUFBLE9BQU1hLGFBQWEsQ0FBQ3VOLGdCQUFnQixFQUFFSSxXQUFXLENBQUM7RUFBQSxHQUFFLEVBQUUsQ0FBQztFQUNoRixJQUFBTyxXQUFBLEdBQThDOU8sUUFBUSxDQUFDLEtBQUssQ0FBQztJQUFBK08sV0FBQSxHQUFBcEYsY0FBQSxDQUFBbUYsV0FBQTtJQUF0REUsZUFBZSxHQUFBRCxXQUFBO0lBQUVFLGtCQUFrQixHQUFBRixXQUFBO0VBQzFDLElBQU1HLElBQUksR0FBR3ZLLHdCQUF3QixDQUFDc0UsSUFBSSxDQUFDa0csUUFBUSxDQUFDO0VBRXBEOU8sTUFBTSxDQUFDK08sTUFBTSxDQUFDRixJQUFJLENBQUM7RUFFbkIsSUFBQUcsaUJBQUEsR0FnQklwTyxnQkFBZ0IsQ0FBQyxDQUFDO0lBZnBCcU8sV0FBVyxHQUFBRCxpQkFBQSxDQUFYQyxXQUFXO0lBQ1hDLFVBQVUsR0FBQUYsaUJBQUEsQ0FBVkUsVUFBVTtJQUNWQyxPQUFPLEdBQUFILGlCQUFBLENBQVBHLE9BQU87SUFDUEMsS0FBSyxHQUFBSixpQkFBQSxDQUFMSSxLQUFLO0lBQ0xDLE9BQU8sR0FBQUwsaUJBQUEsQ0FBUEssT0FBTztJQUNQQyxNQUFNLEdBQUFOLGlCQUFBLENBQU5NLE1BQU07SUFDTkMsSUFBSSxHQUFBUCxpQkFBQSxDQUFKTyxJQUFJO0lBQ0pDLFlBQVksR0FBQVIsaUJBQUEsQ0FBWlEsWUFBWTtJQUNaQyxlQUFlLEdBQUFULGlCQUFBLENBQWZTLGVBQWU7SUFDZkMsaUJBQWlCLEdBQUFWLGlCQUFBLENBQWpCVSxpQkFBaUI7SUFDakJDLGVBQWUsR0FBQVgsaUJBQUEsQ0FBZlcsZUFBZTtJQUNmQyxTQUFTLEdBQUFaLGlCQUFBLENBQVRZLFNBQVM7SUFDVEMsVUFBVSxHQUFBYixpQkFBQSxDQUFWYSxVQUFVO0lBQ1ZDLGNBQWMsR0FBQWQsaUJBQUEsQ0FBZGMsY0FBYztJQUNkQyxPQUFPLEdBQUFmLGlCQUFBLENBQVBlLE9BQU87O0VBR1Q7RUFDQSxJQUFNQyxhQUFhLEdBQUczUCxzQkFBc0IsQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDO0VBRTdELElBQUE0UCxhQUFBLEdBZUl2UCxZQUFZLENBQUM7TUFBRXVPLFdBQVcsRUFBWEEsV0FBVztNQUFFRSxPQUFPLEVBQVBBLE9BQU87TUFBRUMsS0FBSyxFQUFMQSxLQUFLO01BQUVjLFlBQVksRUFBRTFCLFFBQVEsQ0FBQzJCO0lBQUssQ0FBQyxDQUFDO0lBZDVFQyxNQUFNLEdBQUFILGFBQUEsQ0FBTkcsTUFBTTtJQUNOQyxPQUFPLEdBQUFKLGFBQUEsQ0FBUEksT0FBTztJQUNQQyxXQUFXLEdBQUFMLGFBQUEsQ0FBWEssV0FBVztJQUNKQyxVQUFVLEdBQUFOLGFBQUEsQ0FBakJPLEtBQUs7SUFDTEMsZUFBZSxHQUFBUixhQUFBLENBQWZRLGVBQWU7SUFDZkMsY0FBYyxHQUFBVCxhQUFBLENBQWRTLGNBQWM7SUFDZEMsa0JBQWtCLEdBQUFWLGFBQUEsQ0FBbEJVLGtCQUFrQjtJQUNsQkMsYUFBYSxHQUFBWCxhQUFBLENBQWJXLGFBQWE7SUFDYkMsUUFBUSxHQUFBWixhQUFBLENBQVJZLFFBQVE7SUFDUkMsV0FBVyxHQUFBYixhQUFBLENBQVhhLFdBQVc7SUFDWEMsV0FBVyxHQUFBZCxhQUFBLENBQVhjLFdBQVc7SUFDWEMsbUJBQW1CLEdBQUFmLGFBQUEsQ0FBbkJlLG1CQUFtQjtJQUNuQkMsZ0JBQWdCLEdBQUFoQixhQUFBLENBQWhCZ0IsZ0JBQWdCO0lBQ2hCQyxjQUFjLEdBQUFqQixhQUFBLENBQWRpQixjQUFjO0VBR2hCLElBQU1DLGFBQWEsR0FBR3ZSLE1BQU0sQ0FBQ3dRLE1BQU0sQ0FBQ2dCLElBQUksQ0FBQztFQUN6Q0QsYUFBYSxDQUFDbEksT0FBTyxHQUFHbUgsTUFBTSxDQUFDZ0IsSUFBSTtFQUVuQyxJQUFBQyxhQUFBLEdBUUkxUSxZQUFZLENBQUMsQ0FBQztJQVBoQjJRLFFBQVEsR0FBQUQsYUFBQSxDQUFSQyxRQUFRO0lBQ1JDLFlBQVksR0FBQUYsYUFBQSxDQUFaRSxZQUFZO0lBQ0hDLGFBQWEsR0FBQUgsYUFBQSxDQUF0QmhCLE9BQU87SUFDUG9CLGVBQWUsR0FBQUosYUFBQSxDQUFmSSxlQUFlO0lBQ2ZDLFFBQVEsR0FBQUwsYUFBQSxDQUFSSyxRQUFRO0lBQ1JDLGlCQUFpQixHQUFBTixhQUFBLENBQWpCTSxpQkFBaUI7SUFDakJDLFdBQVcsR0FBQVAsYUFBQSxDQUFYTyxXQUFXO0VBR2IsSUFBTUMsa0JBQWtCLEdBQUdwTix3Q0FBd0MsQ0FDakVnRSxJQUFJLGFBQUpBLElBQUksdUJBQUpBLElBQUksQ0FBRXFKLFdBQVcsRUFDakJDLE9BQU8sQ0FBQ2pILE1BQU0sQ0FBQ2tILHdDQUF3QyxDQUN6RCxDQUFDO0VBRUQsSUFBTUMsbUJBQW1CLEdBQUc5UixpQkFBaUIsQ0FBQ3NJLElBQUksQ0FBQztFQUVuRCxJQUFNeUoscUJBQXFCLEdBQUd4UyxPQUFPLENBQ25DO0lBQUEsT0FDRThELDRCQUE0QixDQUFDO01BQzNCb0ssYUFBYSxFQUFiQSxhQUFhO01BQ2J3QixLQUFLLEVBQUxBLEtBQUs7TUFDTEMsT0FBTyxFQUFQQSxPQUFPO01BQ1BDLE1BQU0sRUFBTkEsTUFBTTtNQUNON0csSUFBSSxFQUFKQSxJQUFJO01BQ0owSixpQkFBaUIsRUFBRUosT0FBTyxDQUFDakgsTUFBTSxDQUFDa0gsd0NBQXdDO0lBQzVFLENBQUMsQ0FBQztFQUFBLEdBQ0osQ0FBQ3BFLGFBQWEsRUFBRXlCLE9BQU8sRUFBRUMsTUFBTSxFQUFFRixLQUFLLEVBQUUzRyxJQUFJLENBQzlDLENBQUM7RUFFRCxJQUFNMkosc0JBQXNCLEdBQUcxUyxPQUFPLENBQUM7SUFBQSxPQUFNdUMsNkJBQTZCLENBQUNtTixLQUFLLENBQUM7RUFBQSxHQUFFLENBQUNBLEtBQUssQ0FBQyxDQUFDO0VBRTNGLElBQU1pRCxzQkFBc0IsR0FBRzNTLE9BQU8sQ0FDcEM7SUFBQSxPQUFNaUUsNkJBQTZCLENBQUN1TyxxQkFBcUIsRUFBRUUsc0JBQXNCLENBQUM7RUFBQSxHQUNsRixDQUFDRixxQkFBcUIsRUFBRUUsc0JBQXNCLENBQ2hELENBQUM7O0VBRUQ7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7RUFFRSxJQUFNRSxnQkFBZ0IsR0FBRzFTLE1BQU0sQ0FBQyxLQUFLLENBQUM7RUFFdEMsSUFBTTJTLFFBQVEsR0FBR3ZILFFBQVEsQ0FBQ3dILGFBQWEsS0FBQUMsTUFBQSxDQUFLdEssbUJBQW1CLENBQUUsQ0FBQzs7RUFFbEU7RUFDQTtFQUNBLElBQUF1SyxXQUFBLEdBQW9DL1MsUUFBUSxDQUEwQjtNQUFBLE9BQ3BFaUMsZ0NBQWdDLENBQUM7UUFBRXVOLE9BQU8sRUFBUEEsT0FBTztRQUFFVyxjQUFjLEVBQWRBO01BQWUsQ0FBQyxDQUFDO0lBQUEsQ0FDL0QsQ0FBQztJQUFBNkMsV0FBQSxHQUFBckosY0FBQSxDQUFBb0osV0FBQTtJQUZNRSxVQUFVLEdBQUFELFdBQUE7SUFBRUUsYUFBYSxHQUFBRixXQUFBO0VBSWhDLElBQU1HLHNCQUFzQixHQUFHclQsV0FBVyxDQUFDLFVBQUNzVCxJQUE2QixFQUFLO0lBQzVFbFIsMkJBQTJCLENBQUNrUixJQUFJLENBQUM7SUFDakNGLGFBQWEsQ0FBQ0UsSUFBSSxDQUFDO0VBQ3JCLENBQUMsRUFBRSxFQUFFLENBQUM7RUFDTixJQUFNQyxRQUFRLEdBQUdKLFVBQVUsS0FBSyxZQUFZO0VBQzVDLElBQU1LLFVBQVUsR0FBR0wsVUFBVSxLQUFLLFVBQVU7RUFDNUMsSUFBTU0saUJBQWlCLEdBQUd0VCxNQUFNLENBQWlCLElBQUksQ0FBQztFQUN0RCxJQUFBdVQsV0FBQSxHQUF3Q3hULFFBQVEsQ0FDOUM7TUFBQSxJQUFBeVQsc0JBQUEsRUFBQUMsc0JBQUE7TUFBQSxRQUFBRCxzQkFBQSxJQUFBQyxzQkFBQSxHQUFNdkssc0JBQXNCLENBQUNHLE9BQU8sY0FBQW9LLHNCQUFBLHVCQUE5QkEsc0JBQUEsQ0FBZ0NDLFlBQVksY0FBQUYsc0JBQUEsY0FBQUEsc0JBQUEsR0FBSSxJQUFJO0lBQUEsQ0FDNUQsQ0FBQztJQUFBRyxXQUFBLEdBQUFqSyxjQUFBLENBQUE2SixXQUFBO0lBRk1HLFlBQVksR0FBQUMsV0FBQTtJQUFFQyxlQUFlLEdBQUFELFdBQUE7RUFHcEMsSUFBQUUscUJBQUEsR0FDRTFSLHdCQUF3QixDQUFDa1IsVUFBVSxDQUFDO0lBRDlCUyxVQUFVLEdBQUFELHFCQUFBLENBQVZDLFVBQVU7SUFBRUMsb0JBQW9CLEdBQUFGLHFCQUFBLENBQXBCRSxvQkFBb0I7SUFBRUMsaUJBQWlCLEdBQUFILHFCQUFBLENBQWpCRyxpQkFBaUI7SUFBRUMsa0JBQWtCLEdBQUFKLHFCQUFBLENBQWxCSSxrQkFBa0I7RUFFL0UsSUFBTUMsWUFBWSxHQUFHbFUsTUFBTSxDQUlqQixJQUFJLENBQUM7RUFFZixJQUFNbVUsaUJBQWlCLEdBQUd0VSxXQUFXLENBQUMsVUFBQ3VVLENBQVMsRUFBRUMsQ0FBUyxFQUFLO0lBQzlELElBQU1DLGNBQWMsR0FBR2hCLGlCQUFpQixDQUFDakssT0FBTztJQUNoRCxJQUFJekIsMEJBQTBCLENBQUMwTSxjQUFjLENBQUMsRUFBRTtNQUM5QyxPQUFPO1FBQUVGLENBQUMsRUFBREEsQ0FBQztRQUFFQyxDQUFDLEVBQURBO01BQUUsQ0FBQztJQUNqQjtJQUVBLElBQUFFLHFCQUFBLEdBQTBCRCxjQUFjLENBQUVFLHFCQUFxQixDQUFDLENBQUM7TUFBekRDLEtBQUssR0FBQUYscUJBQUEsQ0FBTEUsS0FBSztNQUFFQyxNQUFNLEdBQUFILHFCQUFBLENBQU5HLE1BQU07SUFDckIsT0FBT25SLDBCQUEwQixDQUFDNlEsQ0FBQyxFQUFFQyxDQUFDLEVBQUVJLEtBQUssRUFBRUMsTUFBTSxFQUFFeEosTUFBTSxDQUFDeUosVUFBVSxFQUFFekosTUFBTSxDQUFDMEosV0FBVyxDQUFDO0VBQy9GLENBQUMsRUFBRSxFQUFFLENBQUM7RUFFTjFVLGVBQWUsQ0FBQyxZQUFNO0lBQ3BCLElBQUlzSCxxQ0FBcUMsQ0FBQ3dMLFVBQVUsQ0FBQyxFQUFFO01BQ3JEWSxlQUFlLENBQUMsSUFBSSxDQUFDO01BQ3JCO0lBQ0Y7SUFFQUEsZUFBZSxDQUFDLFVBQUFpQixJQUFJO01BQUEsT0FDbEJoTiwrQkFBK0IsQ0FBQ21MLFVBQVUsRUFBRTZCLElBQUksRUFBRVYsaUJBQWlCLEVBQUU7UUFDbkVRLFVBQVUsRUFBRXpKLE1BQU0sQ0FBQ3lKLFVBQVU7UUFDN0JHLFVBQVUsRUFBRS9TLDJCQUEyQixDQUFDLENBQUM7UUFDekNnVCxHQUFHLEVBQUU7TUFDUCxDQUFDLENBQUM7SUFBQSxDQUNKLENBQUM7RUFDSCxDQUFDLEVBQUUsQ0FBQy9CLFVBQVUsRUFBRW1CLGlCQUFpQixDQUFDLENBQUM7RUFFbkMsSUFBTWEsYUFBYSxHQUFHblYsV0FBVyxDQUMvQixVQUFDb1YsS0FBd0MsRUFBSztJQUFBLElBQUFDLHFCQUFBO0lBQzVDakIsa0JBQWtCLENBQUMsQ0FBQztJQUNwQixJQUFJLENBQUN2TSwyQkFBMkIsRUFBQXdOLHFCQUFBLEdBQUNoQixZQUFZLENBQUM3SyxPQUFPLGNBQUE2TCxxQkFBQSx1QkFBcEJBLHFCQUFBLENBQXNCQyxTQUFTLEVBQUVGLEtBQUssQ0FBQ0UsU0FBUyxDQUFDLEVBQUU7TUFDbEY7SUFDRjtJQUVBakIsWUFBWSxDQUFDN0ssT0FBTyxHQUFHLElBQUk7SUFDM0IrQixRQUFRLENBQUNnSyxJQUFJLENBQUNDLEtBQUssQ0FBQ0MsVUFBVSxHQUFHLEVBQUU7SUFDbkNsSyxRQUFRLENBQUNnSyxJQUFJLENBQUNDLEtBQUssQ0FBQ0UsTUFBTSxHQUFHLEVBQUU7SUFFL0IsSUFBTWpCLGNBQWMsR0FBR2hCLGlCQUFpQixDQUFDakssT0FBTztJQUNoRCxJQUFJaUwsY0FBYyxJQUFJeE0saUNBQWlDLENBQUNrTCxVQUFVLEVBQUVzQixjQUFjLENBQUMsRUFBRTtNQUNuRixJQUFNa0IsSUFBSSxHQUFHbEIsY0FBYyxDQUFDRSxxQkFBcUIsQ0FBQyxDQUFDO01BQ25ENVIscUJBQXFCLENBQUNpRyxJQUFJLENBQUNNLEVBQUUsRUFBRTtRQUFFdUssWUFBWSxFQUFFO1VBQUVVLENBQUMsRUFBRW9CLElBQUksQ0FBQ0MsSUFBSTtVQUFFcEIsQ0FBQyxFQUFFbUIsSUFBSSxDQUFDRTtRQUFJO01BQUUsQ0FBQyxDQUFDO0lBQ2pGO0VBQ0YsQ0FBQyxFQUNELENBQUN6QixrQkFBa0IsRUFBRWpCLFVBQVUsRUFBRW5LLElBQUksQ0FBQ00sRUFBRSxDQUMxQyxDQUFDO0VBRUQsSUFBTXdNLGNBQWMsR0FBRzlWLFdBQVcsQ0FDaEMsVUFBQ29WLEtBQXdDLEVBQUs7SUFDNUMsSUFBTVcsU0FBUyxHQUFHMUIsWUFBWSxDQUFDN0ssT0FBTztJQUN0QyxJQUFJLENBQUN1TSxTQUFTLElBQUksQ0FBQ2xPLDJCQUEyQixDQUFDa08sU0FBUyxDQUFDVCxTQUFTLEVBQUVGLEtBQUssQ0FBQ0UsU0FBUyxDQUFDLEVBQUU7TUFDcEY7SUFDRjtJQUVBbkIsaUJBQWlCLENBQUNpQixLQUFLLENBQUNZLE9BQU8sRUFBRVosS0FBSyxDQUFDYSxPQUFPLENBQUM7SUFFL0MsSUFBTUMsWUFBWSxHQUFHNUIsaUJBQWlCLENBQUNjLEtBQUssQ0FBQ1ksT0FBTyxHQUFHRCxTQUFTLENBQUNJLE9BQU8sRUFBRWYsS0FBSyxDQUFDYSxPQUFPLEdBQUdGLFNBQVMsQ0FBQ0ssT0FBTyxDQUFDO0lBRTVHckMsZUFBZSxDQUFDLFVBQUFpQixJQUFJO01BQUEsT0FBSWpRLHVCQUF1QixDQUFDaVEsSUFBSSxFQUFFa0IsWUFBWSxDQUFDO0lBQUEsRUFBQztFQUN0RSxDQUFDLEVBQ0QsQ0FBQzVCLGlCQUFpQixFQUFFSCxpQkFBaUIsQ0FDdkMsQ0FBQztFQUVELElBQU1rQyxvQkFBb0IsR0FBR3BXLE9BQU8sQ0FDbEM7SUFBQSxPQUNFMEUsZ0NBQWdDLENBQUM7TUFDL0J3TyxVQUFVLEVBQVZBLFVBQVU7TUFDVlUsWUFBWSxFQUFaQSxZQUFZO01BQ1p5QyxhQUFhLEVBQUUsT0FBT2pMLE1BQU0sS0FBSyxXQUFXLEdBQUdBLE1BQU0sQ0FBQ3lKLFVBQVUsR0FBRyxDQUFDO01BQ3BFRyxVQUFVLEVBQUUvUywyQkFBMkIsQ0FBQyxDQUFDO01BQ3pDcVUsS0FBSyxFQUFFakM7SUFDVCxDQUFDLENBQUM7RUFBQSxHQUNKLENBQUNuQixVQUFVLEVBQUVVLFlBQVksRUFBRVMsaUJBQWlCLENBQzlDLENBQUM7RUFFRCxJQUFNa0MsZUFBZSxHQUFHeFcsV0FBVyxDQUNqQyxVQUFDb1YsS0FBd0MsRUFBSztJQUM1QyxJQUFJLENBQUN4Tiw0QkFBNEIsQ0FBQzRMLFVBQVUsRUFBRTRCLEtBQUssQ0FBQ3FCLE1BQU0sQ0FBQyxFQUFFO01BQzNEO0lBQ0Y7SUFFQSxJQUFNQyxNQUFNLEdBQUd0QixLQUFLLENBQUNzQixNQUFxQjtJQUMxQyxJQUFJdFMsNEJBQTRCLENBQUNzUyxNQUFNLENBQUMsRUFBRTtNQUN4QztJQUNGO0lBRUEsSUFBTWpDLGNBQWMsR0FBR2hCLGlCQUFpQixDQUFDakssT0FBTztJQUNoRCxJQUFJLENBQUNpTCxjQUFjLEVBQUU7TUFDbkI7SUFDRjtJQUVBLElBQU1rQixJQUFJLEdBQUdsQixjQUFjLENBQUNFLHFCQUFxQixDQUFDLENBQUM7SUFDbkQsSUFBTWdDLGVBQWUsR0FBR04sb0JBQW9CLGFBQXBCQSxvQkFBb0IsY0FBcEJBLG9CQUFvQixHQUFJL0IsaUJBQWlCLENBQUNxQixJQUFJLENBQUNDLElBQUksRUFBRUQsSUFBSSxDQUFDRSxHQUFHLENBQUM7SUFDdEYsSUFBTWUsY0FBYyxHQUFHeEIsS0FBSyxDQUFDWSxPQUFPLEdBQUdXLGVBQWUsQ0FBQ3BDLENBQUM7SUFDeEQsSUFBTXNDLGNBQWMsR0FBR3pCLEtBQUssQ0FBQ2EsT0FBTyxHQUFHVSxlQUFlLENBQUNuQyxDQUFDO0lBRXhEVCxlQUFlLENBQUM0QyxlQUFlLENBQUM7SUFDaEN0QyxZQUFZLENBQUM3SyxPQUFPLEdBQUc7TUFDckI4TCxTQUFTLEVBQUVGLEtBQUssQ0FBQ0UsU0FBUztNQUMxQmEsT0FBTyxFQUFFUyxjQUFjO01BQ3ZCUixPQUFPLEVBQUVTO0lBQ1gsQ0FBQztJQUVEekIsS0FBSyxDQUFDMEIsYUFBYSxDQUFDQyxpQkFBaUIsQ0FBQzNCLEtBQUssQ0FBQ0UsU0FBUyxDQUFDO0lBQ3RERixLQUFLLENBQUM0QixjQUFjLENBQUMsQ0FBQztJQUV0QnpMLFFBQVEsQ0FBQ2dLLElBQUksQ0FBQ0MsS0FBSyxDQUFDQyxVQUFVLEdBQUcsTUFBTTtJQUN2Q2xLLFFBQVEsQ0FBQ2dLLElBQUksQ0FBQ0MsS0FBSyxDQUFDRSxNQUFNLEdBQUcsVUFBVTtJQUN2Q3RNLGFBQWEsQ0FBQzlGLE1BQU0sQ0FBQzJULGVBQWUsQ0FBQztJQUNyQy9DLG9CQUFvQixDQUFDa0IsS0FBSyxDQUFDWSxPQUFPLEVBQUVaLEtBQUssQ0FBQ2EsT0FBTyxDQUFDO0VBQ3BELENBQUMsRUFDRCxDQUFDM0IsaUJBQWlCLEVBQUVkLFVBQVUsRUFBRTZDLG9CQUFvQixFQUFFbkMsb0JBQW9CLENBQzVFLENBQUM7RUFFRCxJQUFNZ0QsU0FBUyxHQUFHbFgsV0FBVyxDQUMzQixVQUNFMkwsT0FBZ0IsRUFDaEJDLFdBQThCLEVBQzlCdUwsS0FBYyxFQUNkQyxpQkFBMEIsRUFDMUJDLFFBQTJCLEVBQzNCQyxLQUFjLEVBQ2RDLElBQWEsRUFDYkMsV0FBcUMsRUFDbEM7SUFDSCxJQUFJclAsa0NBQWtDLENBQUMrRyxlQUFlLENBQUMsRUFBRTtNQUN2REMsa0JBQWtCLENBQUMsS0FBSyxDQUFDO0lBQzNCO0lBQ0FoRCxnQkFBZ0IsQ0FBQyxJQUFJLENBQUM7SUFDdEJJLGFBQWEsQ0FBQyxVQUFBeUksSUFBSTtNQUFBLE9BQUlBLElBQUksR0FBRyxDQUFDO0lBQUEsRUFBQztJQUMvQmpKLHFCQUFxQixDQUNuQjdELG9DQUFvQyxDQUFDO01BQ25DeUQsT0FBTyxFQUFQQSxPQUFPO01BQ1BDLFdBQVcsRUFBWEEsV0FBVztNQUNYdUwsS0FBSyxFQUFMQSxLQUFLO01BQ0xDLGlCQUFpQixFQUFqQkEsaUJBQWlCO01BQ2pCQyxRQUFRLEVBQVJBLFFBQVE7TUFDUkMsS0FBSyxFQUFMQSxLQUFLO01BQ0xDLElBQUksRUFBSkEsSUFBSTtNQUNKQyxXQUFXLEVBQVhBO0lBQ0YsQ0FBQyxDQUNILENBQUM7SUFDRHpJLFFBQVEsQ0FBQzBJLElBQUksQ0FBQyxDQUFDO0VBQ2pCLENBQUMsRUFDRCxDQUFDMUksUUFBUSxFQUFFRyxlQUFlLENBQzVCLENBQUM7RUFFRCxJQUFNd0ksb0JBQW9CLEdBQUd2WCxNQUFNLENBQUMsS0FBSyxDQUFDO0VBRTFDQyxTQUFTLENBQUMsWUFBTTtJQUNkLElBQU11WCxTQUFTLEdBQUd0SCxjQUFjO0lBQ2hDLElBQUksQ0FBQ3NILFNBQVMsSUFBSSxDQUFDL1QsaUJBQWlCLENBQUMrVCxTQUFTLENBQUNDLFFBQVEsQ0FBQyxFQUFFO01BQ3hEO0lBQ0Y7SUFFQSxJQUNFLENBQUMvVCwwQkFBMEIsQ0FBQztNQUMxQitULFFBQVEsRUFBRUQsU0FBUyxDQUFDQyxRQUFRO01BQzVCQyxXQUFXLEVBQUVILG9CQUFvQixDQUFDbE8sT0FBTztNQUN6Q29ILE9BQU8sRUFBUEEsT0FBTztNQUNQa0gsT0FBTyxFQUFFbkksS0FBSyxhQUFMQSxLQUFLLHVCQUFMQSxLQUFLLENBQUVyRyxFQUFFO01BQ2xCb0csT0FBTyxFQUFQQSxPQUFPO01BQ1BxSSxTQUFTLEVBQUVuSSxPQUFPLGFBQVBBLE9BQU8sdUJBQVBBLE9BQU8sQ0FBRXRHLEVBQUU7TUFDdEIwTyxRQUFRLEVBQUVuSSxNQUFNLGFBQU5BLE1BQU0sdUJBQU5BLE1BQU0sQ0FBRXZHO0lBQ3BCLENBQUMsQ0FBQyxFQUNGO01BQ0E7SUFDRjtJQUVBb08sb0JBQW9CLENBQUNsTyxPQUFPLEdBQUcsSUFBSTtJQUNuQzBOLFNBQVMsQ0FDUFMsU0FBUyxDQUFDQyxRQUFRLEVBQ2xCLEVBQUUsRUFDRkQsU0FBUyxDQUFDUixLQUFLLEVBQ2ZjLFNBQVMsRUFDVEEsU0FBUyxFQUNUQSxTQUFTLEVBQ1RBLFNBQVMsRUFDVE4sU0FBUyxDQUFDSCxXQUNaLENBQUM7RUFDSCxDQUFDLEVBQUUsQ0FDRG5ILGNBQWMsYUFBZEEsY0FBYyx1QkFBZEEsY0FBYyxDQUFFOEcsS0FBSyxFQUNyQjlHLGNBQWMsYUFBZEEsY0FBYyx1QkFBZEEsY0FBYyxDQUFFdUgsUUFBUSxFQUN4QnZILGNBQWMsYUFBZEEsY0FBYyx1QkFBZEEsY0FBYyxDQUFFbUgsV0FBVyxFQUMzQjVHLE9BQU8sRUFDUGpCLEtBQUssYUFBTEEsS0FBSyx1QkFBTEEsS0FBSyxDQUFFckcsRUFBRSxFQUNUcUcsS0FBSyxhQUFMQSxLQUFLLHVCQUFMQSxLQUFLLENBQUV1SSxNQUFNLEVBQ2J0SSxPQUFPLGFBQVBBLE9BQU8sdUJBQVBBLE9BQU8sQ0FBRXRHLEVBQUUsRUFDWHVHLE1BQU0sYUFBTkEsTUFBTSx1QkFBTkEsTUFBTSxDQUFFdkcsRUFBRSxFQUNWb0csT0FBTyxFQUNQd0gsU0FBUyxDQUNWLENBQUM7RUFFRixJQUFNaUIsUUFBUSxHQUFHblksV0FBVyxDQUMxQixVQUFDeVgsSUFBUyxFQUFLO0lBQ2IsSUFBTVcsU0FBUyxHQUFHWCxJQUFJLENBQUNZLGlCQUEyQjtJQUVsRDNWLGtCQUFrQixDQUFDLENBQUMsQ0FBQzRWLGVBQWUsQ0FBQ0YsU0FBUyxDQUFDO0lBQy9DN00sUUFBUSxDQUFDQyxhQUFhLENBQUMsSUFBSUMsV0FBVyxDQUFDLHdCQUF3QixFQUFFO01BQUU4TSxNQUFNLEVBQUU7UUFBRUgsU0FBUyxFQUFUQTtNQUFVO0lBQUUsQ0FBQyxDQUFDLENBQUM7SUFFNUZyTSxxQkFBcUIsQ0FBQztNQUFFSixPQUFPLEVBQUUsRUFBRTtNQUFFQyxXQUFXLEVBQUU7SUFBRyxDQUFDLENBQUM7SUFDdkRPLGdCQUFnQixDQUFDaU0sU0FBUyxDQUFDO0lBQzNCLElBQU1JLGFBQWEsR0FBR2hTLG9CQUFvQixDQUFDbUssTUFBTSxDQUFDZ0IsSUFBSSxFQUFFOEYsSUFBSSxDQUFDSyxPQUFPLENBQUM7SUFDckUsSUFBSVUsYUFBYSxFQUFFO01BQ2pCaEosV0FBVyxDQUFDZ0osYUFBYSxDQUFDO0lBQzVCO0lBQ0E7SUFDQWpOLFFBQVEsQ0FBQ0MsYUFBYSxDQUFDLElBQUlDLFdBQVcsQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO0lBQy9Ec0QsUUFBUSxDQUFDMEksSUFBSSxDQUFDLENBQUM7RUFDakIsQ0FBQyxFQUNELENBQUMxSSxRQUFRLEVBQUU0QixNQUFNLEVBQUVuQixXQUFXLENBQ2hDLENBQUM7RUFFRHpFLFdBQVcsQ0FBQ3ZCLE9BQU8sR0FBRzJPLFFBQVE7RUFFOUIsSUFBTU0sdUJBQXVCLEdBQUd6WSxXQUFXLENBQ3pDLFVBQUMwWSxJQUFhLEVBQUs7SUFDakIxTyxjQUFjLENBQUNSLE9BQU8sR0FBR2tQLElBQUk7SUFDN0IzVixxQkFBcUIsQ0FBQ2lHLElBQUksQ0FBQ00sRUFBRSxFQUFFO01BQUVXLFdBQVcsRUFBRXlPO0lBQUssQ0FBQyxDQUFDO0VBQ3ZELENBQUMsRUFDRCxDQUFDMVAsSUFBSSxDQUFDTSxFQUFFLENBQ1YsQ0FBQztFQUVELElBQU1xUCxnQkFBZ0IsR0FBRzNZLFdBQVcsQ0FBQyxZQUFNO0lBQUEsSUFBQTRZLFNBQUE7SUFDekMsSUFBTUMsS0FBSyxHQUFHclUsMEJBQTBCLENBQUM7TUFDdkM0RixXQUFXLEVBQVhBLFdBQVc7TUFDWCtELGFBQWEsRUFBYkEsYUFBYTtNQUNiRCxlQUFlLEVBQUUwRSxzQkFBc0I7TUFDdkNoSSxZQUFZLEVBQVpBLFlBQVk7TUFDWmtOLE9BQU8sR0FBQWMsU0FBQSxHQUFFakosS0FBSyxhQUFMQSxLQUFLLHVCQUFMQSxLQUFLLENBQUVyRyxFQUFFLGNBQUFzUCxTQUFBLGNBQUFBLFNBQUEsR0FBSSxJQUFJO01BQzFCM08sV0FBVyxFQUFFRCxjQUFjLENBQUNSLE9BQU87TUFDbkMySixVQUFVLEVBQVZBLFVBQVU7TUFDVlUsWUFBWSxFQUFaQSxZQUFZO01BQ1ppRixXQUFXLEVBQUU7UUFDWHBKLE9BQU8sRUFBUEEsT0FBTztRQUNQRSxPQUFPLEVBQVBBLE9BQU87UUFDUEMsTUFBTSxFQUFOQSxNQUFNO1FBQ05DLElBQUksRUFBSkEsSUFBSTtRQUNKQyxZQUFZLEVBQVpBO01BQ0Y7SUFDRixDQUFDLENBQUM7SUFDRixJQUFJLENBQUM4SSxLQUFLLEVBQUU7SUFDWjlWLHFCQUFxQixDQUFDaUcsSUFBSSxDQUFDTSxFQUFFLEVBQUV1UCxLQUFLLENBQUM7RUFDdkMsQ0FBQyxFQUFFLENBQ0RqTyxZQUFZLEVBQ1orRSxLQUFLLGFBQUxBLEtBQUssdUJBQUxBLEtBQUssQ0FBRXJHLEVBQUUsRUFDVHlHLFlBQVksRUFDWkYsTUFBTSxFQUNOMUIsYUFBYSxFQUNiMEYsWUFBWSxFQUNaekosV0FBVyxFQUNYK0ksVUFBVSxFQUNWdkQsT0FBTyxFQUNQRixPQUFPLEVBQ1BrRCxzQkFBc0IsRUFDdEI5QyxJQUFJLEVBQ0o5RyxJQUFJLENBQUNNLEVBQUUsQ0FDUixDQUFDOztFQUVGO0VBQ0EsSUFBTXlQLGtCQUFrQixHQUFHL1ksV0FBVyxjQUFBZ1osaUJBQUEsY0FBQUMsbUJBQUEsQ0FBQUMsSUFBQSxDQUFDLFNBQUFDLFFBQUE7SUFBQSxJQUFBQyxZQUFBLEVBQUFDLFlBQUEsRUFBQUMsZUFBQTtJQUFBLE9BQUFMLG1CQUFBLENBQUFNLElBQUEsV0FBQUMsUUFBQTtNQUFBLGtCQUFBQSxRQUFBLENBQUF4RSxJQUFBLEdBQUF3RSxRQUFBLENBQUFDLElBQUE7UUFBQTtVQUMvQkwsWUFBWSxHQUFHOVMsOEJBQThCLENBQUNvTCxhQUFhLENBQUNsSSxPQUFPLENBQUM7VUFBQSxLQUN0RTRQLFlBQVk7WUFBQUksUUFBQSxDQUFBQyxJQUFBO1lBQUE7VUFBQTtVQUFBLE9BQUFELFFBQUEsQ0FBQUUsTUFBQSxXQUNQTixZQUFZO1FBQUE7VUFBQSxLQUdqQjdTLCtCQUErQixDQUFDbUwsYUFBYSxDQUFDbEksT0FBTyxDQUFDbVEsTUFBTSxFQUFFOUcsZ0JBQWdCLENBQUNySixPQUFPLENBQUM7WUFBQWdRLFFBQUEsQ0FBQUMsSUFBQTtZQUFBO1VBQUE7VUFDekY1RyxnQkFBZ0IsQ0FBQ3JKLE9BQU8sR0FBRyxJQUFJO1VBQUFnUSxRQUFBLENBQUFDLElBQUE7VUFBQSxPQUNKekksZUFBZSxDQUFDLENBQUM7UUFBQTtVQUF0Q3FJLFlBQVksR0FBQUcsUUFBQSxDQUFBSSxJQUFBO1VBQ1pOLGVBQWUsR0FBR2hULDhCQUE4QixDQUFDK1MsWUFBWSxDQUFDO1VBQUEsS0FDaEVDLGVBQWU7WUFBQUUsUUFBQSxDQUFBQyxJQUFBO1lBQUE7VUFBQTtVQUFBLE9BQUFELFFBQUEsQ0FBQUUsTUFBQSxXQUNWSixlQUFlO1FBQUE7VUFBQSxPQUFBRSxRQUFBLENBQUFFLE1BQUEsV0FJbkJoSSxhQUFhLENBQUNsSSxPQUFPO1FBQUE7UUFBQTtVQUFBLE9BQUFnUSxRQUFBLENBQUFLLElBQUE7TUFBQTtJQUFBLEdBQUFWLE9BQUE7RUFBQSxDQUM3QixJQUFFLENBQUNuSSxlQUFlLENBQUMsQ0FBQztFQUVyQjVRLFNBQVMsQ0FBQyxZQUFNO0lBQ2QsSUFBSWdLLFdBQVcsSUFBSXdHLE9BQU8sSUFBSXJHLDBCQUEwQixDQUFDZixPQUFPLEVBQUU7SUFDbEUsSUFBSSxDQUFDbUgsTUFBTSxDQUFDZ0IsSUFBSSxDQUFDZ0ksTUFBTSxFQUFFO0lBQ3pCcFAsMEJBQTBCLENBQUNmLE9BQU8sR0FBRyxJQUFJO0lBQ3pDdUUsZUFBZSxDQUFDLElBQUksQ0FBQztFQUN2QixDQUFDLEVBQUUsQ0FBQzNELFdBQVcsRUFBRXdHLE9BQU8sRUFBRUQsTUFBTSxDQUFDZ0IsSUFBSSxDQUFDZ0ksTUFBTSxDQUFDLENBQUM7RUFFOUN2WixTQUFTLENBQUMsWUFBTTtJQUNkLElBQUlnSyxXQUFXLEVBQUU7TUFDZixPQUFPNk4sU0FBUztJQUNsQjtJQUVBLElBQU02QixLQUFLLEdBQUd6TyxNQUFNLENBQUNDLFVBQVUsQ0FBQztNQUFBLE9BQU1xTixnQkFBZ0IsQ0FBQyxDQUFDO0lBQUEsR0FBRSxHQUFHLENBQUM7SUFDOUQsT0FBTztNQUFBLE9BQU10TixNQUFNLENBQUMwTyxZQUFZLENBQUNELEtBQUssQ0FBQztJQUFBO0VBQ3pDLENBQUMsRUFBRSxDQUFDMVAsV0FBVyxFQUFFdU8sZ0JBQWdCLENBQUMsQ0FBQztFQUVuQ3ZZLFNBQVMsQ0FBQyxZQUFNO0lBQ2QsSUFBTTRaLFVBQVUsR0FBRyxTQUFiQSxVQUFVQSxDQUFBLEVBQVM7TUFDdkIsSUFBSTNULGdDQUFnQyxDQUFDK0QsV0FBVyxDQUFDLEVBQUU7UUFDakR1TyxnQkFBZ0IsQ0FBQyxDQUFDO01BQ3BCO0lBQ0YsQ0FBQztJQUNEdE4sTUFBTSxDQUFDNE8sZ0JBQWdCLENBQUMsVUFBVSxFQUFFRCxVQUFVLENBQUM7SUFDL0MsT0FBTztNQUFBLE9BQU0zTyxNQUFNLENBQUM2TyxtQkFBbUIsQ0FBQyxVQUFVLEVBQUVGLFVBQVUsQ0FBQztJQUFBO0VBQ2pFLENBQUMsRUFBRSxDQUFDNVAsV0FBVyxFQUFFdU8sZ0JBQWdCLENBQUMsQ0FBQztFQUVuQyxJQUFNd0IsMEJBQTBCLEdBQUduYSxXQUFXLENBQUMsWUFBTTtJQUNuRDtJQUNBLElBQUFvYSxtQkFBQSxHQUFrQjFYLGtCQUFrQixDQUFDLENBQUM7TUFBOUIyWCxLQUFLLEdBQUFELG1CQUFBLENBQUxDLEtBQUs7SUFDYixJQUFNQyxnQkFBZ0IsR0FBRzFYLG9CQUFvQixDQUFDb0csSUFBSSxDQUFDTSxFQUFFLENBQUM7SUFDdEQsSUFBTW9OLE1BQU0sR0FBRzVSLDZCQUE2QixDQUFDdVYsS0FBSyxFQUFFQyxnQkFBZ0IsQ0FBQzs7SUFFckU7SUFDQSxJQUFJNUQsTUFBTSxFQUFFO01BQUEsSUFBQTZELG9CQUFBO01BQ1YsQ0FBQUEsb0JBQUEsR0FBQXhQLFdBQVcsQ0FBQ3ZCLE9BQU8sY0FBQStRLG9CQUFBLGVBQW5CQSxvQkFBQSxDQUFBQyxJQUFBLENBQUF6UCxXQUFXLEVBQVcyTCxNQUFNLENBQUM7SUFDL0IsQ0FBQyxNQUFNO01BQUEsSUFBQStELGtCQUFBO01BQ0wsQ0FBQUEsa0JBQUEsR0FBQXpQLFNBQVMsQ0FBQ3hCLE9BQU8sY0FBQWlSLGtCQUFBLGVBQWpCQSxrQkFBQSxDQUFBRCxJQUFBLENBQUF4UCxTQUFvQixDQUFDO0lBQ3ZCO0lBRUFYLGNBQWMsQ0FBQyxLQUFLLENBQUM7SUFDckJHLGtCQUFrQixDQUFDLElBQUksQ0FBQztJQUN4QjtJQUNBdUQsZUFBZSxDQUFDLElBQUksQ0FBQztJQUNyQjNFLGFBQWEsQ0FBQzlGLE1BQU0sQ0FBQ29YLFVBQVUsRUFBRTtNQUFFQyxNQUFNLEVBQUU7SUFBVyxDQUFDLENBQUM7SUFFeEQ1QixrQkFBa0IsQ0FBQyxDQUFDLENBQ2pCNkIsSUFBSSxDQUFDLFVBQUF2QixZQUFZLEVBQUk7TUFDcEIsSUFBSTNDLE1BQU0sRUFBRTtRQUNWLElBQU04QixhQUFhLEdBQUdoUyxvQkFBb0IsQ0FBQzZTLFlBQVksRUFBRTNDLE1BQU0sQ0FBQ29CLE9BQU8sQ0FBQztRQUN4RSxJQUFJVSxhQUFhLEVBQUU7VUFDakJoSixXQUFXLENBQUNnSixhQUFhLENBQUM7UUFDNUI7TUFDRjtNQUNBcE4sY0FBYyxDQUFDLENBQUM7SUFDbEIsQ0FBQyxDQUFDLFNBQ0ksQ0FBQztNQUFBLE9BQU02TSxTQUFTO0lBQUEsRUFBQztFQUMzQixDQUFDLEVBQUUsQ0FBQzdPLGFBQWEsRUFBRTJQLGtCQUFrQixFQUFFM04sY0FBYyxFQUFFb0UsV0FBVyxFQUFFaEYsa0JBQWtCLEVBQUV1RCxlQUFlLEVBQUUvRSxJQUFJLENBQUNNLEVBQUUsQ0FBQyxDQUFDOztFQUVsSDtBQUNGO0FBQ0E7QUFDQTtBQUNBO0VBQ0UsSUFBTXVSLHlCQUF5QixHQUFHN2EsV0FBVyxDQUMzQyxVQUFDdVksTUFBMEIsRUFBSztJQUM5QixJQUFNdUMsV0FBVyxHQUFHeFcsOEJBQThCLENBQUNpVSxNQUFNLENBQUM7SUFFMUR6VixxQkFBcUIsQ0FBQ2tHLElBQUksQ0FBQ00sRUFBRSxDQUFDO0lBQzlCRyx3QkFBd0IsQ0FBQ0QsT0FBTyxHQUFHLElBQUk7SUFDdkNPLHFCQUFxQixDQUFDLEtBQUssQ0FBQztJQUM1Qk0sY0FBYyxDQUFDLEtBQUssQ0FBQztJQUNyQkcsa0JBQWtCLENBQUMsSUFBSSxDQUFDO0lBQ3hCM0gscUJBQXFCLENBQUNtRyxJQUFJLENBQUNNLEVBQUUsRUFBRSxJQUFJLENBQUM7SUFFcEM2QyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUM7SUFDdEJJLGFBQWEsQ0FBQyxVQUFBeUksSUFBSTtNQUFBLE9BQUlBLElBQUksR0FBRyxDQUFDO0lBQUEsRUFBQztJQUMvQmpKLHFCQUFxQixDQUFDO01BQUVKLE9BQU8sRUFBRSxFQUFFO01BQUVDLFdBQVcsRUFBRTtJQUFHLENBQUMsQ0FBQztJQUN2RHlDLGdCQUFnQixDQUFDdE4sT0FBTyxDQUFDMlAsSUFBSSxDQUFDO0lBQzlCN0IsMkJBQTJCLENBQUMsS0FBSyxDQUFDO0lBQ2xDSixXQUFXLENBQUMsS0FBSyxDQUFDO0lBQ2xCZCxZQUFZLENBQUMsS0FBSyxDQUFDO0lBQ25CbEwsWUFBWSxDQUFDc1ksUUFBUSxDQUFDLENBQUMsQ0FBQ0MsU0FBUyxDQUFDLENBQUM7SUFDbkN0RCxvQkFBb0IsQ0FBQ2xPLE9BQU8sR0FBRyxLQUFLO0lBQ3BDOUcsa0JBQWtCLENBQUMsQ0FBQyxDQUFDNFYsZUFBZSxDQUFDLElBQUksQ0FBQztJQUMxQy9NLFFBQVEsQ0FBQ0MsYUFBYSxDQUFDLElBQUlDLFdBQVcsQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO0lBRS9EMkUsVUFBVSxhQUFWQSxVQUFVLGVBQVZBLFVBQVUsQ0FBRzBLLFdBQVcsQ0FBQ2xMLE9BQU8sQ0FBQztJQUNqQyxJQUFJbkosK0JBQStCLENBQUNxVSxXQUFXLENBQUNqTCxNQUFNLENBQUMsRUFBRTtNQUN2RE0sU0FBUyxhQUFUQSxTQUFTLGVBQVRBLFNBQVMsQ0FBRzJLLFdBQVcsQ0FBQ2pMLE1BQU0sQ0FBQztJQUNqQztJQUNBUyxPQUFPLGFBQVBBLE9BQU8sZUFBUEEsT0FBTyxDQUFHd0ssV0FBVyxDQUFDaEwsSUFBSSxDQUFDO0lBRTNCLElBQUlnTCxXQUFXLENBQUNHLHdCQUF3QixFQUFFO01BQ3hDL0ssZUFBZSxDQUFDLElBQUksQ0FBQztNQUNyQlQsVUFBVSxDQUFDLENBQUM7SUFDZDtJQUVBLElBQU15TCxVQUFVLEdBQUcvWSxnQ0FBZ0MsQ0FBQztNQUNsRHVOLE9BQU8sRUFBRTZJLE1BQU0sQ0FBQzdJLE9BQWtCO01BQ2xDVyxjQUFjLEVBQUVrSSxNQUFNLENBQUM0QztJQUN6QixDQUFDLENBQUM7SUFDRi9ILGFBQWEsQ0FBQzhILFVBQVUsQ0FBQztJQUN6Qm5ILGVBQWUsQ0FBQyxJQUFJLENBQUM7SUFFckIsSUFBTStFLFdBQVcsR0FBR3ZVLCtCQUErQixDQUFDZ1UsTUFBTSxDQUFDO0lBRTNEUSxrQkFBa0IsQ0FBQyxDQUFDLENBQ2pCNkIsSUFBSSxDQUFDLFlBQU07TUFBQSxJQUFBUSxVQUFBO01BQ1YsSUFBTUMsZUFBZSxHQUFHelcsMEJBQTBCLENBQ2hEa1csV0FBVyxDQUFDRyx3QkFBd0IsRUFDcEN2SixhQUFhLENBQUNsSSxPQUFPLEdBQUE0UixVQUFBLEdBQ3JCekwsS0FBSyxhQUFMQSxLQUFLLHVCQUFMQSxLQUFLLENBQUVyRyxFQUFFLGNBQUE4UixVQUFBLGNBQUFBLFVBQUEsR0FBSSxJQUNmLENBQUM7TUFDRCxJQUFJMVUsb0NBQW9DLENBQUNvVSxXQUFXLENBQUNHLHdCQUF3QixFQUFFdkosYUFBYSxDQUFDbEksT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUU7UUFDeEdnRyxXQUFXLENBQUNrQyxhQUFhLENBQUNsSSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFDdkM7TUFFQXpHLHFCQUFxQixDQUFDaUcsSUFBSSxDQUFDTSxFQUFFLEVBQUU7UUFDN0I2QixVQUFVLEVBQUUsSUFBSTtRQUNoQmdELGFBQWEsRUFBRXBOLE9BQU8sQ0FBQzJQLElBQUk7UUFDM0J4QyxlQUFlLEVBQUUsSUFBSTtRQUNyQnRELFlBQVksRUFBRSxJQUFJO1FBQ2xCa04sT0FBTyxFQUFFdUQsZUFBZTtRQUN4QnBSLFdBQVcsRUFBRUQsY0FBYyxDQUFDUixPQUFPO1FBQ25DcUssWUFBWSxFQUFFLElBQUk7UUFDbEJpRixXQUFXLEVBQVhBO01BQ0YsQ0FBQyxDQUFDO01BRUYxTixjQUFjLENBQUMsQ0FBQztJQUNsQixDQUFDLENBQUMsU0FDSSxDQUFDO01BQUEsT0FBTTZNLFNBQVM7SUFBQSxFQUFDO0VBQzNCLENBQUMsRUFDRCxDQUNFdEksS0FBSyxhQUFMQSxLQUFLLHVCQUFMQSxLQUFLLENBQUVyRyxFQUFFLEVBQ1RtRyxVQUFVLEVBQ1ZzSixrQkFBa0IsRUFDbEIzTixjQUFjLEVBQ2RvRSxXQUFXLEVBQ1hoRixrQkFBa0IsRUFDbEIwRixlQUFlLEVBQ2ZDLFNBQVMsRUFDVEMsVUFBVSxFQUNWRSxPQUFPLEVBQ1B0SCxJQUFJLENBQUNNLEVBQUUsQ0FFWCxDQUFDO0VBRUQsSUFBTWdTLHNCQUFzQixHQUFHdGIsV0FBVyxDQUN4QyxVQUNFdWIsV0FRUyxFQUNUQyxjQUEwQixFQUMxQkMsU0FBa0IsRUFDbEJDLE9BQWdCLEVBQ2I7SUFDSDNPLHNCQUFzQixDQUFDO01BQUEsT0FBTXdPLFdBQVc7SUFBQSxFQUFDO0lBQ3pDcE8seUJBQXlCLENBQUM7TUFBQSxPQUFNcU8sY0FBYztJQUFBLEVBQUM7SUFDL0NqTyxjQUFjLENBQUNrTyxTQUFTLENBQUM7SUFDekI5TixZQUFZLENBQUMrTixPQUFPLENBQUM7RUFDdkIsQ0FBQyxFQUNELEVBQ0YsQ0FBQztFQUVELElBQU1DLGlCQUFpQixHQUFHM2IsV0FBVyxDQUNuQyxVQUNFMkwsT0FBZSxFQUNmQyxXQUE4QixFQUM5QnVMLEtBQWMsRUFDZEMsaUJBQTBCLEVBQzFCQyxRQUEyQixFQUMzQkMsS0FBYyxFQUNkQyxJQUFhLEVBQ1Y7SUFDSCxJQUFJckksZUFBZSxFQUFFO01BQ25CQyxrQkFBa0IsQ0FBQyxLQUFLLENBQUM7SUFDM0I7SUFDQSxJQUFJdkosOEJBQThCLENBQUM2TSxxQkFBcUIsRUFBRTFSLE9BQU8sQ0FBQzBXLElBQUksRUFBRW5GLE9BQU8sQ0FBQ3hGLG1CQUFtQixDQUFDLENBQUMsRUFBRTtNQUNyR0EsbUJBQW1CLGFBQW5CQSxtQkFBbUIsZUFBbkJBLG1CQUFtQixDQUFHbkIsT0FBTyxFQUFFQyxXQUFXLEVBQUV1TCxLQUFLLEVBQUVDLGlCQUFpQixFQUFFQyxRQUFRLEVBQUVDLEtBQUssRUFBRUMsSUFBSSxDQUFDO0lBQzlGLENBQUMsTUFBTTtNQUNMTCxTQUFTLENBQUN2TCxPQUFPLEVBQUVDLFdBQVcsRUFBRXVMLEtBQUssRUFBRUMsaUJBQWlCLEVBQUVDLFFBQVEsRUFBRUMsS0FBSyxFQUFFQyxJQUFJLENBQUM7SUFDbEY7RUFDRixDQUFDLEVBQ0QsQ0FBQ3pLLG1CQUFtQixFQUFFb0ssU0FBUyxFQUFFekUscUJBQXFCLEVBQUV2RCxlQUFlLENBQ3pFLENBQUM7RUFFRCxJQUFNdUIsWUFBWSxHQUFHelEsV0FBVyxDQUFDLFlBQU07SUFDckM7SUFDQSxJQUFJMkcsNEJBQTRCLENBQUN3SCxhQUFhLEVBQUVwTixPQUFPLENBQUMwVyxJQUFJLENBQUMsRUFBRTtNQUM3RDtNQUNBdEwsZ0JBQWdCLENBQUMsSUFBSSxDQUFDO01BQ3RCSSxhQUFhLENBQUMsVUFBQXlJLElBQUk7UUFBQSxPQUFJQSxJQUFJLEdBQUcsQ0FBQztNQUFBLEVBQUM7TUFDL0JySCxZQUFZLENBQUMsS0FBSyxDQUFDO01BQ25CLElBQUluSSxpQ0FBaUMsQ0FBQ21LLEtBQUssYUFBTEEsS0FBSyx1QkFBTEEsS0FBSyxDQUFFdUksTUFBTSxDQUFDLEVBQUU7UUFDcEQvSCxTQUFTLGFBQVRBLFNBQVMsZUFBVEEsU0FBUyxDQUFHLElBQUksQ0FBQztNQUNuQjtNQUNBLElBQUkxSywrQkFBK0IsQ0FBQ2lLLE9BQU8sQ0FBQyxFQUFFO1FBQzVDWSxPQUFPLGFBQVBBLE9BQU8sZUFBUEEsT0FBTyxDQUFHLElBQUksQ0FBQztNQUNqQjtJQUNGO0lBQ0EsSUFBSTVLLCtCQUErQixDQUFDaUssS0FBSyxFQUFFZ0IsTUFBTSxDQUFDZ0IsSUFBSSxDQUFDZ0ksTUFBTSxDQUFDLEVBQUU7TUFDOURuSyxXQUFXLENBQUNtQixNQUFNLENBQUNnQixJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDN0I7SUFDQSxJQUFJaE0sNENBQTRDLENBQUMrSixPQUFPLEVBQUVDLEtBQUssYUFBTEEsS0FBSyx1QkFBTEEsS0FBSyxDQUFFaU0sSUFBSSxDQUFDLEVBQUU7TUFDdEV4TCxVQUFVLENBQUMsSUFBSSxDQUFDO01BQ2hCRCxTQUFTLGFBQVRBLFNBQVMsZUFBVEEsU0FBUyxDQUFHLElBQUksQ0FBQztNQUNqQkcsT0FBTyxhQUFQQSxPQUFPLGVBQVBBLE9BQU8sQ0FBRyxJQUFJLENBQUM7SUFDakI7SUFDQWpDLGdCQUFnQixDQUFDdE4sT0FBTyxDQUFDMlAsSUFBSSxDQUFDO0lBQzlCUixlQUFlLENBQUMsSUFBSSxDQUFDO0lBQ3JCekIsV0FBVyxDQUFDLEtBQUssQ0FBQztJQUNsQndCLGlCQUFpQixJQUFJRCxlQUFlLENBQUMsQ0FBQztFQUN4QyxDQUFDLEVBQUUsQ0FDRGpQLE9BQU8sQ0FBQzJQLElBQUksRUFDWjNQLE9BQU8sQ0FBQzBXLElBQUksRUFDWnRKLGFBQWEsRUFDYjhCLGlCQUFpQixFQUNqQkQsZUFBZSxFQUNmTCxLQUFLLEVBQ0xnQixNQUFNLEVBQ05uQixXQUFXLEVBQ1hZLFVBQVUsRUFDVkQsU0FBUyxFQUNURyxPQUFPLEVBQ1BwRCxzQkFBc0IsRUFDdEJ3QyxPQUFPLENBQ1IsQ0FBQztFQUVGMUUsU0FBUyxDQUFDeEIsT0FBTyxHQUFHaUgsWUFBWTtFQUVoQyxJQUFNb0wsdUJBQXVCLEdBQUc3YixXQUFXLGNBQUFnWixpQkFBQSxjQUFBQyxtQkFBQSxDQUFBQyxJQUFBLENBQUMsU0FBQTRDLFNBQUE7SUFBQSxJQUFBQyxVQUFBLEVBQUFDLFVBQUEsRUFBQUMsRUFBQTtJQUFBLE9BQUFoRCxtQkFBQSxDQUFBTSxJQUFBLFdBQUEyQyxTQUFBO01BQUEsa0JBQUFBLFNBQUEsQ0FBQWxILElBQUEsR0FBQWtILFNBQUEsQ0FBQXpDLElBQUE7UUFBQTtVQUFBLEtBQ3ZCNVQscUNBQXFDLENBQUM0TSxxQkFBcUIsRUFBRTFSLE9BQU8sQ0FBQ29iLFFBQVEsRUFBRXBiLE9BQU8sQ0FBQzhRLFFBQVEsQ0FBQztZQUFBcUssU0FBQSxDQUFBekMsSUFBQTtZQUFBO1VBQUE7VUFBQXlDLFNBQUEsQ0FBQXpDLElBQUE7VUFBQSxPQUN6R1Ysa0JBQWtCLENBQUMsQ0FBQztRQUFBO1VBQUFrRCxFQUFBLEdBQUFDLFNBQUEsQ0FBQXRDLElBQUE7VUFBQXNDLFNBQUEsQ0FBQXpDLElBQUE7VUFBQTtRQUFBO1VBQUF3QyxFQUFBLEdBQzFCdEwsTUFBTSxDQUFDZ0IsSUFBSTtRQUFBO1VBRlRvSyxVQUFVLEdBQUFFLEVBQUE7VUFHVkQsVUFBVSxHQUFHRCxVQUFVLENBQUMsQ0FBQyxDQUFDO1VBRWhDLElBQUluVix3Q0FBd0MsQ0FBQ29WLFVBQVUsQ0FBQyxFQUFFO1lBQ3hENUwsVUFBVSxDQUFDLElBQUksQ0FBQztZQUNoQkQsU0FBUyxhQUFUQSxTQUFTLGVBQVRBLFNBQVMsQ0FBRyxJQUFJLENBQUM7WUFDakJHLE9BQU8sYUFBUEEsT0FBTyxlQUFQQSxPQUFPLENBQUcsSUFBSSxDQUFDO1lBQ2ZkLFdBQVcsQ0FBQ3dNLFVBQVUsQ0FBQztVQUN6QjtVQUNBN1AsZ0JBQWdCLENBQUMsSUFBSSxDQUFDO1VBQ3RCSSxhQUFhLENBQUMsVUFBQXlJLElBQUk7WUFBQSxPQUFJQSxJQUFJLEdBQUcsQ0FBQztVQUFBLEVBQUM7VUFDL0IzRyxnQkFBZ0IsQ0FBQ3ROLE9BQU8sQ0FBQzJQLElBQUksQ0FBQztVQUM5QlIsZUFBZSxDQUFDLElBQUksQ0FBQztVQUNyQnpCLFdBQVcsQ0FBQyxLQUFLLENBQUM7VUFDbEIsSUFBSXdCLGlCQUFpQixFQUFFRCxlQUFlLENBQUMsQ0FBQztVQUN4Q3pFLFFBQVEsQ0FBQ0MsYUFBYSxDQUFDLElBQUlDLFdBQVcsQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO1FBQUE7UUFBQTtVQUFBLE9BQUF5USxTQUFBLENBQUFyQyxJQUFBO01BQUE7SUFBQSxHQUFBaUMsUUFBQTtFQUFBLENBQ2hFLElBQUUsQ0FDRG5MLE1BQU0sQ0FBQ2dCLElBQUksRUFDWGMscUJBQXFCLEVBQ3JCc0csa0JBQWtCLEVBQ2xCOUksaUJBQWlCLEVBQ2pCVCxXQUFXLEVBQ1hXLFNBQVMsRUFDVEMsVUFBVSxFQUNWRSxPQUFPLEVBQ1BOLGVBQWUsQ0FDaEIsQ0FBQztFQUVGLElBQU1vTSxrQkFBa0IsR0FBR3BjLFdBQVcsQ0FBQyxZQUFNO0lBQzNDLElBQUlvRiw2QkFBNkIsQ0FBQ3FOLHFCQUFxQixFQUFFRSxzQkFBc0IsQ0FBQyxFQUFFO01BQ2hGa0osdUJBQXVCLENBQUMsQ0FBQyxTQUFNLENBQUM7UUFBQSxPQUFNNUQsU0FBUztNQUFBLEVBQUM7TUFDaEQ7SUFDRjtJQUVBeEgsWUFBWSxDQUFDLENBQUM7RUFDaEIsQ0FBQyxFQUFFLENBQUNnQyxxQkFBcUIsRUFBRWhDLFlBQVksRUFBRWtDLHNCQUFzQixFQUFFa0osdUJBQXVCLENBQUMsQ0FBQztFQUUxRixJQUFNUSxlQUFlLEdBQUdyYyxXQUFXLGNBQUFnWixpQkFBQSxjQUFBQyxtQkFBQSxDQUFBQyxJQUFBLENBQUMsU0FBQW9ELFNBQUE7SUFBQSxPQUFBckQsbUJBQUEsQ0FBQU0sSUFBQSxXQUFBZ0QsU0FBQTtNQUFBLGtCQUFBQSxTQUFBLENBQUF2SCxJQUFBLEdBQUF1SCxTQUFBLENBQUE5QyxJQUFBO1FBQUE7VUFDbEMxTixxQkFBcUIsQ0FBQztZQUFFSixPQUFPLEVBQUUsRUFBRTtZQUFFQyxXQUFXLEVBQUU7VUFBRyxDQUFDLENBQUM7VUFDdkRPLGdCQUFnQixDQUFDLElBQUksQ0FBQztVQUN0QjtVQUNBWixRQUFRLENBQUNDLGFBQWEsQ0FBQyxJQUFJQyxXQUFXLENBQUMsc0JBQXNCLENBQUMsQ0FBQztVQUMvRGdGLFlBQVksQ0FBQyxDQUFDO1FBQUE7UUFBQTtVQUFBLE9BQUE4TCxTQUFBLENBQUExQyxJQUFBO01BQUE7SUFBQSxHQUFBeUMsUUFBQTtFQUFBLENBQ2YsSUFBRSxDQUFDN0wsWUFBWSxDQUFDLENBQUM7O0VBRWxCO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBLElBQU0rTCxVQUFVLEdBQUd4YyxXQUFXLENBQUMsWUFBTTtJQUNuQyxJQUFNeWMsRUFBRSxHQUFHM1ksNEJBQTRCLENBQUM0TCxPQUFPLEVBQUVDLEtBQUssYUFBTEEsS0FBSyx1QkFBTEEsS0FBSyxDQUFFaU0sSUFBSSxFQUFFbkoscUJBQXFCLEVBQUUxUixPQUFPLENBQUMyUCxJQUFJLENBQUM7SUFDbEd0SCxhQUFhLENBQUM5RixNQUFNLENBQUNvWixVQUFVLEVBQUU7TUFBRUQsRUFBRSxFQUFGQTtJQUFHLENBQUMsQ0FBQzs7SUFFeEM7SUFDQSxJQUFJdlgsdUNBQXVDLENBQUN1TixxQkFBcUIsRUFBRTFSLE9BQU8sQ0FBQzBXLElBQUksQ0FBQyxFQUFFO01BQ2hGO01BQ0E5SixZQUFZLENBQUMsS0FBSyxDQUFDO01BQ25CNUIscUJBQXFCLENBQUM7UUFBRUosT0FBTyxFQUFFLEVBQUU7UUFBRUMsV0FBVyxFQUFFO01BQUcsQ0FBQyxDQUFDO01BQ3ZETyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUM7TUFDdEJJLGFBQWEsQ0FBQyxVQUFBeUksSUFBSTtRQUFBLE9BQUlBLElBQUksR0FBRyxDQUFDO01BQUEsRUFBQztNQUMvQnZHLFdBQVcsQ0FBQyxLQUFLLENBQUM7TUFDbEJ3QixpQkFBaUIsSUFBSUQsZUFBZSxDQUFDLENBQUM7TUFDdEMzQixnQkFBZ0IsQ0FBQ3ROLE9BQU8sQ0FBQzJQLElBQUksQ0FBQztNQUM5Qm5GLFFBQVEsQ0FBQ0MsYUFBYSxDQUFDLElBQUlDLFdBQVcsQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO01BQy9EO0lBQ0Y7O0lBRUE7SUFDQSxJQUFJeEcsNEJBQTRCLENBQUN3TixxQkFBcUIsRUFBRTFSLE9BQU8sQ0FBQzJQLElBQUksRUFBRWhCLE9BQU8sRUFBRWQsd0JBQXdCLENBQUMsRUFBRTtNQUN4R3dCLFVBQVUsQ0FBQyxJQUFJLENBQUM7TUFDaEJELFNBQVMsYUFBVEEsU0FBUyxlQUFUQSxTQUFTLENBQUcsSUFBSSxDQUFDO01BQ2pCRyxPQUFPLGFBQVBBLE9BQU8sZUFBUEEsT0FBTyxDQUFHLElBQUksQ0FBQztNQUNmSixlQUFlLENBQUMsSUFBSSxDQUFDO0lBQ3ZCO0VBQ0YsQ0FBQyxFQUFFLENBQ0R1QyxxQkFBcUIsRUFDckIvQyxPQUFPLEVBQ1BDLEtBQUssYUFBTEEsS0FBSyx1QkFBTEEsS0FBSyxDQUFFaU0sSUFBSSxFQUNYeFMsYUFBYSxFQUNickksT0FBTyxDQUFDMlAsSUFBSSxFQUNaeEQsc0JBQXNCLEVBQ3RCK0MsaUJBQWlCLEVBQ2pCRCxlQUFlLEVBQ2ZwQix3QkFBd0IsRUFDeEJ3QixVQUFVLEVBQ1ZELFNBQVMsRUFDVEcsT0FBTyxFQUNQSixlQUFlLENBQ2hCLENBQUM7O0VBRUY7RUFDQTtFQUNBO0VBQ0E5UCxTQUFTLENBQUMsWUFBTTtJQUNkLElBQU11YyxNQUFNLEdBQUd0WCx1QkFBdUIsQ0FBQztNQUNyQ3VYLE1BQU0sRUFBRTlNLElBQUksYUFBSkEsSUFBSSx1QkFBSkEsSUFBSSxDQUFFeEcsRUFBRTtNQUNoQnVULGNBQWMsRUFBRTlNLFlBQVksYUFBWkEsWUFBWSx1QkFBWkEsWUFBWSxDQUFFZ0ksU0FBUztNQUN2Q0MsUUFBUSxFQUFFbkksTUFBTSxhQUFOQSxNQUFNLHVCQUFOQSxNQUFNLENBQUV2RyxFQUFFO01BQ3BCeU8sU0FBUyxFQUFFbkksT0FBTyxhQUFQQSxPQUFPLHVCQUFQQSxPQUFPLENBQUV0RztJQUN0QixDQUFDLENBQUM7SUFDRixJQUFNd1QsU0FBUyxHQUFHaE8sdUJBQXVCLENBQUN0RixPQUFPO0lBQ2pEc0YsdUJBQXVCLENBQUN0RixPQUFPLEdBQUdtVCxNQUFNO0lBQ3hDLElBQUl4WCxrQ0FBa0MsQ0FBQ3VLLE9BQU8sRUFBRUMsS0FBSyxhQUFMQSxLQUFLLHVCQUFMQSxLQUFLLENBQUVpTSxJQUFJLEVBQUVrQixTQUFTLEVBQUVILE1BQU0sQ0FBQyxFQUFFO01BQy9FOU4sMkJBQTJCLENBQUMsSUFBSSxDQUFDO0lBQ25DO0VBQ0YsQ0FBQyxFQUFFLENBQUNpQixJQUFJLGFBQUpBLElBQUksdUJBQUpBLElBQUksQ0FBRXhHLEVBQUUsRUFBRXlHLFlBQVksYUFBWkEsWUFBWSx1QkFBWkEsWUFBWSxDQUFFZ0ksU0FBUyxFQUFFbEksTUFBTSxhQUFOQSxNQUFNLHVCQUFOQSxNQUFNLENBQUV2RyxFQUFFLEVBQUVzRyxPQUFPLGFBQVBBLE9BQU8sdUJBQVBBLE9BQU8sQ0FBRXRHLEVBQUUsRUFBRW9HLE9BQU8sRUFBRUMsS0FBSyxhQUFMQSxLQUFLLHVCQUFMQSxLQUFLLENBQUVpTSxJQUFJLENBQUMsQ0FBQztFQUV0RnhiLFNBQVMsQ0FBQyxZQUFNO0lBQ2QsSUFBTTJjLG1CQUFtQixHQUFHLFNBQXRCQSxtQkFBbUJBLENBQUlDLEdBQVUsRUFBSztNQUMxQyxJQUFBQyxLQUFBLEdBQThCRCxHQUFHLENBQW1DekUsTUFBTSxJQUFJLENBQUMsQ0FBQztRQUFqRTJFLFNBQVMsR0FBQUQsS0FBQSxDQUFoQnROLEtBQUs7TUFDYixJQUFJdU4sU0FBUyxhQUFUQSxTQUFTLGVBQVRBLFNBQVMsQ0FBRTVULEVBQUUsRUFBRTtRQUNqQjhILFFBQVEsQ0FBQzhMLFNBQVMsRUFBRTtVQUFFQyxZQUFZLEVBQUU7UUFBTSxDQUFDLENBQUM7TUFDOUM7SUFDRixDQUFDO0lBQ0Q1UixRQUFRLENBQUMwTyxnQkFBZ0IsQ0FBQyxvQ0FBb0MsRUFBRThDLG1CQUFtQixDQUFDO0lBQ3BGLE9BQU8sWUFBTTtNQUNYeFIsUUFBUSxDQUFDMk8sbUJBQW1CLENBQUMsb0NBQW9DLEVBQUU2QyxtQkFBbUIsQ0FBQztJQUN6RixDQUFDO0VBQ0gsQ0FBQyxFQUFFLENBQUMzTCxRQUFRLENBQUMsQ0FBQztFQUVkaFIsU0FBUyxDQUFDLFlBQU07SUFDZCxJQUFNZ2QsaUJBQWlCLEdBQUcsU0FBcEJBLGlCQUFpQkEsQ0FBSUosR0FBVSxFQUFLO01BQ3hDLElBQUFLLEtBQUEsR0FBOEJMLEdBQUcsQ0FBbUN6RSxNQUFNLElBQUksQ0FBQyxDQUFDO1FBQWpFMkUsU0FBUyxHQUFBRyxLQUFBLENBQWhCMU4sS0FBSztNQUNiLElBQUksRUFBQ3VOLFNBQVMsYUFBVEEsU0FBUyxlQUFUQSxTQUFTLENBQUU1VCxFQUFFLEdBQUU7TUFDcEJnSSxXQUFXLENBQUM0TCxTQUFTLENBQUM7TUFDdEIsSUFBSSxDQUFBdk4sS0FBSyxhQUFMQSxLQUFLLHVCQUFMQSxLQUFLLENBQUVyRyxFQUFFLE1BQUs0VCxTQUFTLENBQUM1VCxFQUFFLEVBQUU7UUFDOUJrRyxXQUFXLENBQUMwTixTQUFTLENBQUM7TUFDeEI7SUFDRixDQUFDO0lBQ0QzUixRQUFRLENBQUMwTyxnQkFBZ0IsQ0FBQyxrQ0FBa0MsRUFBRW1ELGlCQUFpQixDQUFDO0lBQ2hGLE9BQU8sWUFBTTtNQUNYN1IsUUFBUSxDQUFDMk8sbUJBQW1CLENBQUMsa0NBQWtDLEVBQUVrRCxpQkFBaUIsQ0FBQztJQUNyRixDQUFDO0VBQ0gsQ0FBQyxFQUFFLENBQUM5TCxXQUFXLEVBQUU5QixXQUFXLEVBQUVHLEtBQUssYUFBTEEsS0FBSyx1QkFBTEEsS0FBSyxDQUFFckcsRUFBRSxDQUFDLENBQUM7RUFFekNsSixTQUFTLENBQUMsWUFBTTtJQUNkLElBQU1rZCxZQUFZLEdBQUcsU0FBZkEsWUFBWUEsQ0FBQSxFQUFTO01BQ3pCN08sV0FBVyxDQUFDLEtBQUssQ0FBQztNQUNsQnRDLGdCQUFnQixDQUFDLElBQUksQ0FBQztNQUN0QkksYUFBYSxDQUFDLFVBQUF5SSxJQUFJO1FBQUEsT0FBSUEsSUFBSSxHQUFHLENBQUM7TUFBQSxFQUFDO01BQy9CakoscUJBQXFCLENBQUM7UUFBRUosT0FBTyxFQUFFLEVBQUU7UUFBRUMsV0FBVyxFQUFFO01BQUcsQ0FBQyxDQUFDO01BQ3ZEeUMsZ0JBQWdCLENBQUN0TixPQUFPLENBQUMwVyxJQUFJLENBQUM7TUFDOUJsTSxRQUFRLENBQUNDLGFBQWEsQ0FBQyxJQUFJQyxXQUFXLENBQUMsc0JBQXNCLENBQUMsQ0FBQztJQUNqRSxDQUFDO0lBQ0RGLFFBQVEsQ0FBQzBPLGdCQUFnQixDQUFDLHFCQUFxQixFQUFFcUQsWUFBWSxDQUFDO0lBQzlELE9BQU8sWUFBTTtNQUNYL1IsUUFBUSxDQUFDMk8sbUJBQW1CLENBQUMscUJBQXFCLEVBQUVvRCxZQUFZLENBQUM7SUFDbkUsQ0FBQztFQUNILENBQUMsRUFBRSxFQUFFLENBQUM7O0VBRU47QUFDRjtBQUNBO0FBQ0E7QUFDQTtFQUNFbGQsU0FBUyxDQUFDLFlBQU07SUFDZCxJQUFNbWQsUUFBUSxHQUFHLFNBQVhBLFFBQVFBLENBQUEsRUFBUztNQUNyQjFDLHlCQUF5QixDQUFDO1FBQ3hCbkwsT0FBTyxFQUFFLFFBQVE7UUFDakJ3SSxNQUFNLEVBQUU7VUFBRUgsU0FBUyxFQUFFLElBQUk7VUFBRUMsUUFBUSxFQUFFO1FBQUs7TUFDNUMsQ0FBQyxDQUFDO0lBQ0osQ0FBQztJQUNEek0sUUFBUSxDQUFDME8sZ0JBQWdCLENBQUMsZ0JBQWdCLEVBQUVzRCxRQUFRLENBQUM7SUFDckQsT0FBTyxZQUFNO01BQ1hoUyxRQUFRLENBQUMyTyxtQkFBbUIsQ0FBQyxnQkFBZ0IsRUFBRXFELFFBQVEsQ0FBQztJQUMxRCxDQUFDO0VBQ0gsQ0FBQyxFQUFFLENBQUMxQyx5QkFBeUIsQ0FBQyxDQUFDOztFQUUvQjtBQUNGO0FBQ0E7QUFDQTtBQUNBO0VBQ0V6YSxTQUFTLENBQUMsWUFBTTtJQUNkLElBQU1vZCxZQUFZLEdBQUcsU0FBZkEsWUFBWUEsQ0FBSXBJLEtBQVksRUFBSztNQUNyQyxJQUFBcUksS0FBQSxHQUFtQnJJLEtBQUs7UUFBaEJtRCxNQUFNLEdBQUFrRixLQUFBLENBQU5sRixNQUFNO01BQ2QsSUFBSSxDQUFDQSxNQUFNLEVBQUU7TUFDYnNDLHlCQUF5QixDQUFDdEMsTUFBTSxDQUFDO0lBQ25DLENBQUM7SUFFRGhOLFFBQVEsQ0FBQzBPLGdCQUFnQixDQUFDelcseUJBQXlCLEVBQUVnYSxZQUFZLENBQUM7SUFDbEUsT0FBTyxZQUFNO01BQ1hqUyxRQUFRLENBQUMyTyxtQkFBbUIsQ0FBQzFXLHlCQUF5QixFQUFFZ2EsWUFBWSxDQUFDO0lBQ3ZFLENBQUM7RUFDSCxDQUFDLEVBQUUsQ0FBQzNDLHlCQUF5QixDQUFDLENBQUM7O0VBRS9CO0FBQ0Y7QUFDQTtBQUNBO0VBQ0V6YSxTQUFTLENBQUMsWUFBTTtJQUNkLElBQU1zZCxvQkFBb0IsR0FBRyxTQUF2QkEsb0JBQW9CQSxDQUFJdEksS0FBWSxFQUFLO01BQzdDLElBQUF1SSxLQUFBLEdBQW1CdkksS0FBSztRQUFoQm1ELE1BQU0sR0FBQW9GLEtBQUEsQ0FBTnBGLE1BQU07TUFNZCxJQUFNMkUsU0FBUyxHQUFHM0UsTUFBTSxhQUFOQSxNQUFNLHVCQUFOQSxNQUFNLENBQUU1SSxLQUFLO01BQy9CLElBQUksQ0FBQ3VOLFNBQVMsRUFBRTtNQUVoQixJQUFNVSxZQUFZLEdBQUcvVyxrQ0FBa0MsQ0FBQzBSLE1BQU0sYUFBTkEsTUFBTSxjQUFOQSxNQUFNLEdBQUksQ0FBQyxDQUFDLENBQUM7TUFDckVuSSxVQUFVLENBQUN3TixZQUFZLENBQUNoTyxPQUFPLENBQUM7TUFDaENPLFNBQVMsYUFBVEEsU0FBUyxlQUFUQSxTQUFTLENBQUd5TixZQUFZLENBQUMvTixNQUFNLENBQUM7TUFDaEMsSUFBSStOLFlBQVksQ0FBQ0MsYUFBYSxFQUFFO1FBQUEsSUFBQUMsa0JBQUE7UUFDOUJ4TixPQUFPLGFBQVBBLE9BQU8sZUFBUEEsT0FBTyxFQUFBd04sa0JBQUEsR0FBR0YsWUFBWSxDQUFDOU4sSUFBSSxjQUFBZ08sa0JBQUEsY0FBQUEsa0JBQUEsR0FBSSxJQUFJLENBQUM7TUFDdEM7TUFDQXRPLFdBQVcsQ0FBQzBOLFNBQVMsQ0FBQztNQUN0QnpPLFdBQVcsQ0FBQyxLQUFLLENBQUM7TUFDbEJKLGdCQUFnQixDQUFDdE4sT0FBTyxDQUFDMlAsSUFBSSxDQUFDO0lBQ2hDLENBQUM7SUFFRG5GLFFBQVEsQ0FBQzBPLGdCQUFnQixDQUFDLCtCQUErQixFQUFFeUQsb0JBQW9CLENBQUM7SUFDaEYsT0FBTyxZQUFNO01BQ1huUyxRQUFRLENBQUMyTyxtQkFBbUIsQ0FBQywrQkFBK0IsRUFBRXdELG9CQUFvQixDQUFDO0lBQ3JGLENBQUM7RUFDSCxDQUFDLEVBQUUsQ0FBQ2xPLFdBQVcsRUFBRVcsU0FBUyxFQUFFQyxVQUFVLEVBQUVFLE9BQU8sQ0FBQyxDQUFDO0VBRWpELElBQU15TixpQkFBaUIsR0FBRy9kLFdBQVc7SUFBQSxJQUFBZ2UsS0FBQSxHQUFBaEYsaUJBQUEsY0FBQUMsbUJBQUEsQ0FBQUMsSUFBQSxDQUNuQyxTQUFBK0UsU0FBT0MsS0FBWSxFQUFFQyxhQUFzQjtNQUFBLElBQUFuQyxVQUFBO01BQUEsT0FBQS9DLG1CQUFBLENBQUFNLElBQUEsV0FBQTZFLFNBQUE7UUFBQSxrQkFBQUEsU0FBQSxDQUFBcEosSUFBQSxHQUFBb0osU0FBQSxDQUFBM0UsSUFBQTtVQUFBO1lBQUEyRSxTQUFBLENBQUEzRSxJQUFBO1lBQUEsT0FDaEIvVSwwQkFBMEIsQ0FBQztjQUNsRHlaLGFBQWEsRUFBYkEsYUFBYTtjQUNieE4sTUFBTSxFQUFFZSxhQUFhLENBQUNsSSxPQUFPO2NBQzdCdVAsa0JBQWtCLEVBQWxCQTtZQUNGLENBQUMsQ0FBQztVQUFBO1lBSklpRCxVQUFVLEdBQUFvQyxTQUFBLENBQUF4RSxJQUFBO1lBTWhCLElBQUloVCx3Q0FBd0MsQ0FBQ29WLFVBQVUsQ0FBQyxFQUFFO2NBQ3hENUwsVUFBVSxDQUFDLElBQUksQ0FBQztjQUNoQkQsU0FBUyxhQUFUQSxTQUFTLGVBQVRBLFNBQVMsQ0FBRyxJQUFJLENBQUM7Y0FDakJHLE9BQU8sYUFBUEEsT0FBTyxlQUFQQSxPQUFPLENBQUcsSUFBSSxDQUFDO2NBQ2ZkLFdBQVcsQ0FBQ3dNLFVBQVUsQ0FBQztZQUN6QjtZQUVBdk4sV0FBVyxDQUFDLEtBQUssQ0FBQztZQUNsQnRDLGdCQUFnQixDQUFDLElBQUksQ0FBQztZQUN0QkksYUFBYSxDQUFDLFVBQUF5SSxJQUFJO2NBQUEsT0FBSUEsSUFBSSxHQUFHLENBQUM7WUFBQSxFQUFDO1lBQy9CakoscUJBQXFCLENBQUM7Y0FBRUosT0FBTyxFQUFFLEVBQUU7Y0FBRUMsV0FBVyxFQUFFO1lBQUcsQ0FBQyxDQUFDO1lBQ3ZEeUMsZ0JBQWdCLENBQUN0TixPQUFPLENBQUMyUCxJQUFJLENBQUM7WUFDOUJuRixRQUFRLENBQUNDLGFBQWEsQ0FBQyxJQUFJQyxXQUFXLENBQUMsc0JBQXNCLENBQUMsQ0FBQztZQUMvRGhILDBCQUEwQixDQUFDeVosS0FBSyxDQUFDO1VBQUE7VUFBQTtZQUFBLE9BQUFFLFNBQUEsQ0FBQXZFLElBQUE7UUFBQTtNQUFBLEdBQUFvRSxRQUFBO0lBQUEsQ0FDbEM7SUFBQSxpQkFBQUksRUFBQSxFQUFBQyxHQUFBO01BQUEsT0FBQU4sS0FBQSxDQUFBTyxLQUFBLE9BQUFDLFNBQUE7SUFBQTtFQUFBLEtBQ0QsQ0FBQ3pGLGtCQUFrQixFQUFFdkosV0FBVyxFQUFFVyxTQUFTLEVBQUVDLFVBQVUsRUFBRUUsT0FBTyxDQUNsRSxDQUFDO0VBRURsUSxTQUFTLENBQUMsWUFBTTtJQUNkLElBQU1xZSx1QkFBdUIsR0FBRyxTQUExQkEsdUJBQXVCQSxDQUFJckosS0FBWSxFQUFLO01BQ2hELElBQUFzSixLQUFBLEdBQ0d0SixLQUFLLENBQTREbUQsTUFBTSxJQUFJLENBQUMsQ0FBQztRQUR4RTJGLEtBQUssR0FBQVEsS0FBQSxDQUFMUixLQUFLO1FBQUFTLG1CQUFBLEdBQUFELEtBQUEsQ0FBRVAsYUFBYTtRQUFiQSxhQUFhLEdBQUFRLG1CQUFBLGNBQUcsS0FBSyxHQUFBQSxtQkFBQTtNQUVwQyxJQUFJLENBQUNULEtBQUssRUFBRTtNQUVaSCxpQkFBaUIsQ0FBQ0csS0FBSyxFQUFFQyxhQUFhLENBQUMsU0FBTSxDQUFDO1FBQUEsT0FBTWxHLFNBQVM7TUFBQSxFQUFDO0lBQ2hFLENBQUM7SUFFRDFNLFFBQVEsQ0FBQzBPLGdCQUFnQixDQUFDeFksMEJBQTBCLEVBQUVnZCx1QkFBdUIsQ0FBQztJQUM5RSxPQUFPLFlBQU07TUFDWGxULFFBQVEsQ0FBQzJPLG1CQUFtQixDQUFDelksMEJBQTBCLEVBQUVnZCx1QkFBdUIsQ0FBQztJQUNuRixDQUFDO0VBQ0gsQ0FBQyxFQUFFLENBQUNWLGlCQUFpQixDQUFDLENBQUM7O0VBRXZCO0VBQ0EzZCxTQUFTLENBQUMsWUFBTTtJQUNkLElBQU13ZSxhQUFhLEdBQUcsU0FBaEJBLGFBQWFBLENBQUk1QixHQUFVLEVBQUs7TUFDcEMsSUFBQTZCLEtBQUEsR0FBbUI3QixHQUFHO1FBQWR6RSxNQUFNLEdBQUFzRyxLQUFBLENBQU50RyxNQUFNO01BQ2QsSUFBSUEsTUFBTSxFQUFFNUwsY0FBYyxDQUFDNEwsTUFBTSxDQUFDO0lBQ3BDLENBQUM7SUFDRGhOLFFBQVEsQ0FBQzBPLGdCQUFnQixDQUFDLHdCQUF3QixFQUFFMkUsYUFBYSxDQUFDO0lBQ2xFLE9BQU8sWUFBTTtNQUNYclQsUUFBUSxDQUFDMk8sbUJBQW1CLENBQUMsd0JBQXdCLEVBQUUwRSxhQUFhLENBQUM7SUFDdkUsQ0FBQztFQUNILENBQUMsRUFBRSxFQUFFLENBQUM7O0VBRU47RUFDQXhlLFNBQVMsQ0FBQyxZQUFNO0lBQ2R1TSxjQUFjLENBQUMsSUFBSSxDQUFDO0VBQ3RCLENBQUMsRUFBRSxDQUFDVCxhQUFhLENBQUMsQ0FBQzs7RUFFbkI7RUFDQTtFQUNBLElBQU00UyxvQkFBb0IsR0FBRzdlLE9BQU8sQ0FDbEM7SUFBQSxPQUFNZ0UsMkJBQTJCLENBQUN3TyxxQkFBcUIsRUFBRTFSLE9BQU8sQ0FBQzBXLElBQUksRUFBRS9LLFdBQVcsQ0FBQztFQUFBLEdBQ25GLENBQUMrRixxQkFBcUIsRUFBRS9GLFdBQVcsQ0FDckMsQ0FBQzs7RUFFRDtFQUNBO0VBQ0F0TSxTQUFTLENBQUMsWUFBTTtJQUNkLElBQUkyRiw4QkFBOEIsQ0FBQytZLG9CQUFvQixFQUFFblAsS0FBSyxDQUFDLEVBQUU7TUFDL0RILFdBQVcsQ0FBQ3hKLHVCQUF1QixDQUFDMkosS0FBSyxDQUFDLENBQUM7SUFDN0M7RUFDRixDQUFDLEVBQUUsQ0FBQ21QLG9CQUFvQixFQUFFblAsS0FBSyxFQUFFSCxXQUFXLENBQUMsQ0FBQzs7RUFFOUM7RUFDQTtFQUNBLElBQU11UCxvQ0FBb0MsR0FBRy9lLFdBQVcsQ0FBQyxZQUFNO0lBQUEsSUFBQWdmLHFCQUFBO0lBQzdELElBQU1DLFlBQVksR0FBRy9ZLHFCQUFxQixDQUFDeUssTUFBTSxDQUFDZ0IsSUFBSSxDQUFDO0lBQ3ZELElBQUksQ0FBQzdLLGlDQUFpQyxDQUFDNEYsV0FBVyxFQUFFdVMsWUFBWSxDQUFDLElBQUksQ0FBQ3ZTLFdBQVcsSUFBSSxDQUFDdVMsWUFBWSxFQUFFO01BQ2xHO0lBQ0Y7SUFDQSxJQUNFQyxXQUFXLEdBT1R4UyxXQUFXLENBUGJ3UyxXQUFXO01BQ0FDLEdBQUcsR0FNWnpTLFdBQVcsQ0FOYnFMLFNBQVM7TUFDSXFILEtBQUssR0FLaEIxUyxXQUFXLENBTGIyUyxXQUFXO01BQ0RDLEdBQUcsR0FJWDVTLFdBQVcsQ0FKYnNMLFFBQVE7TUFDSXVILEtBQUssR0FHZjdTLFdBQVcsQ0FIYjhTLFVBQVU7TUFDRkMsR0FBRyxHQUVUL1MsV0FBVyxDQUZia1EsTUFBTTtNQUNJOEMsS0FBSyxHQUNiaFQsV0FBVyxDQURiaVQsUUFBUTtJQUdWLElBQU1DLGNBQWMsSUFBQVoscUJBQUEsR0FBRy9ZLGdDQUFnQyxDQUFDO01BQ3REaVosV0FBVyxFQUFYQSxXQUFXO01BQ1huSCxTQUFTLEVBQUVvSCxHQUFHO01BQ2RFLFdBQVcsRUFBRUQsS0FBSztNQUNsQnBILFFBQVEsRUFBRXNILEdBQUc7TUFDYkUsVUFBVSxFQUFFRCxLQUFLO01BQ2pCM0MsTUFBTSxFQUFFNkMsR0FBRztNQUNYRSxRQUFRLEVBQUVEO0lBQ1osQ0FBQyxDQUFDLGNBQUFWLHFCQUFBLGNBQUFBLHFCQUFBLEdBQUk7TUFBRWxQLElBQUksRUFBRSxJQUFJO01BQUVGLE9BQU8sRUFBRSxJQUFJO01BQUVDLE1BQU0sRUFBRSxJQUFJO01BQUVFLFlBQVksRUFBRTtJQUFLLENBQUM7SUFFckVwQyxZQUFZLENBQUMsS0FBSyxDQUFDO0lBQ25CNUIscUJBQXFCLENBQUM7TUFBRUosT0FBTyxFQUFFLEVBQUU7TUFBRUMsV0FBVyxFQUFFO0lBQUcsQ0FBQyxDQUFDO0lBQ3ZETyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUM7SUFDdEJJLGFBQWEsQ0FBQyxVQUFBeUksSUFBSTtNQUFBLE9BQUlBLElBQUksR0FBRyxDQUFDO0lBQUEsRUFBQztJQUMvQnZHLFdBQVcsQ0FBQyxLQUFLLENBQUM7SUFFbEI2QixPQUFPLGFBQVBBLE9BQU8sZUFBUEEsT0FBTyxDQUFHc1AsY0FBYyxDQUFDOVAsSUFBSSxDQUFDO0lBQzlCTSxVQUFVLENBQUN3UCxjQUFjLENBQUNoUSxPQUFPLENBQUM7SUFDbENPLFNBQVMsYUFBVEEsU0FBUyxlQUFUQSxTQUFTLENBQUd5UCxjQUFjLENBQUMvUCxNQUFNLENBQUM7SUFDbENLLGVBQWUsQ0FBQzBQLGNBQWMsQ0FBQzdQLFlBQVksQ0FBQztJQUU1Q1AsV0FBVyxDQUFDeVAsWUFBWSxDQUFDO0lBQ3pCdFMsY0FBYyxDQUFDLElBQUksQ0FBQztJQUNwQjBCLGdCQUFnQixDQUFDdE4sT0FBTyxDQUFDMlAsSUFBSSxDQUFDO0lBQzlCbkYsUUFBUSxDQUFDQyxhQUFhLENBQUMsSUFBSUMsV0FBVyxDQUFDLHNCQUFzQixDQUFDLENBQUM7RUFDakUsQ0FBQyxFQUFFLENBQUNpQixXQUFXLEVBQUVpRSxNQUFNLENBQUNnQixJQUFJLEVBQUVuQyxXQUFXLEVBQUVXLFNBQVMsRUFBRUMsVUFBVSxFQUFFRSxPQUFPLEVBQUVKLGVBQWUsRUFBRWhELHNCQUFzQixDQUFDLENBQUM7RUFFcEgsSUFBQTJTLFFBQUEsR0FBb0Y1ZixPQUFPLENBQ3pGO01BQUEsT0FBTW9ILDRCQUE0QixDQUFDb0wscUJBQXFCLEVBQUVFLHNCQUFzQixDQUFDO0lBQUEsR0FDakYsQ0FBQ0YscUJBQXFCLEVBQUVFLHNCQUFzQixDQUNoRCxDQUFDO0lBSE9tTixXQUFXLEdBQUFELFFBQUEsQ0FBWEMsV0FBVztJQUFFQyxpQkFBaUIsR0FBQUYsUUFBQSxDQUFqQkUsaUJBQWlCO0lBQUVDLGlCQUFpQixHQUFBSCxRQUFBLENBQWpCRyxpQkFBaUI7SUFBRUMsb0JBQW9CLEdBQUFKLFFBQUEsQ0FBcEJJLG9CQUFvQjtFQUsvRSxJQUFNQyxhQUFhLEdBQUc3Yix1QkFBdUIsQ0FBQ3FMLE9BQU8sRUFBRTFHLElBQUksQ0FBQztFQUM1RCxJQUFNbVgsZUFBZSxHQUFHNVksK0JBQStCLENBQUNpSCxRQUFRLEVBQUUwUixhQUFhLENBQUM7RUFDaEYsSUFBTUUsZUFBZSxHQUFHNVkseUJBQXlCLENBQUM7SUFDaERpTCxxQkFBcUIsRUFBckJBLHFCQUFxQjtJQUNyQjROLFVBQVUsRUFBRXRmLE9BQU8sQ0FBQzJQLElBQUk7SUFDeEI0UCxVQUFVLEVBQUV2ZixPQUFPLENBQUMwVyxJQUFJO0lBQ3hCOEksV0FBVyxFQUFFNVAsTUFBTSxDQUFDZ0IsSUFBSSxDQUFDZ0ksTUFBTTtJQUMvQnNHLG9CQUFvQixFQUFwQkEsb0JBQW9CO0lBQ3BCelIsUUFBUSxFQUFSQSxRQUFRO0lBQ1JvQyxPQUFPLEVBQVBBLE9BQU87SUFDUDRQLFNBQVMsRUFBRU47RUFDYixDQUFDLENBQUM7RUFDRixJQUFNTyxXQUFXLEdBQUduWix1QkFBdUIsQ0FBQzRZLGFBQWEsRUFBRTFNLFVBQVUsRUFBRWxKLGVBQWUsQ0FBQzs7RUFFdkY7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBLElBQU1vVyxnQkFBZ0IsR0FBR3JiLHVCQUF1QixDQUFDO0lBQy9DdVgsTUFBTSxFQUFFOU0sSUFBSSxhQUFKQSxJQUFJLHVCQUFKQSxJQUFJLENBQUV4RyxFQUFFO0lBQ2hCdVQsY0FBYyxFQUFFOU0sWUFBWSxhQUFaQSxZQUFZLHVCQUFaQSxZQUFZLENBQUVnSSxTQUFTO0lBQ3ZDQyxRQUFRLEVBQUVuSSxNQUFNLGFBQU5BLE1BQU0sdUJBQU5BLE1BQU0sQ0FBRXZHLEVBQUU7SUFDcEJ5TyxTQUFTLEVBQUVuSSxPQUFPLGFBQVBBLE9BQU8sdUJBQVBBLE9BQU8sQ0FBRXRHO0VBQ3RCLENBQUMsQ0FBQztFQUNGLElBQUFxWCxxQkFBQSxHQUFtRXJiLCtCQUErQixDQUFDO01BQ2pHbU4scUJBQXFCLEVBQXJCQSxxQkFBcUI7TUFDckI0TixVQUFVLEVBQUV0ZixPQUFPLENBQUMyUCxJQUFJO01BQ3hCNFAsVUFBVSxFQUFFdmYsT0FBTyxDQUFDMFcsSUFBSTtNQUN4QmlKLGdCQUFnQixFQUFoQkEsZ0JBQWdCO01BQ2hCaFIsT0FBTyxFQUFQQSxPQUFPO01BQ1BkLHdCQUF3QixFQUF4QkE7SUFDRixDQUFDLENBQUM7SUFQTWdTLFVBQVUsR0FBQUQscUJBQUEsQ0FBVkMsVUFBVTtJQUFFQyxpQkFBaUIsR0FBQUYscUJBQUEsQ0FBakJFLGlCQUFpQjtJQUFFQyx1QkFBdUIsR0FBQUgscUJBQUEsQ0FBdkJHLHVCQUF1QjtFQVE5RCxJQUFNQyxjQUFjLEdBQUd4YixnQ0FBZ0MsQ0FBQztJQUN0RHliLFNBQVMsRUFBRXJSLEtBQUssYUFBTEEsS0FBSyx1QkFBTEEsS0FBSyxDQUFFaU0sSUFBSTtJQUN0QnBOLFFBQVEsRUFBUkEsUUFBUTtJQUNSb0MsT0FBTyxFQUFQQSxPQUFPO0lBQ1BnUSxVQUFVLEVBQVZBLFVBQVU7SUFDVkMsaUJBQWlCLEVBQWpCQSxpQkFBaUI7SUFDakJDLHVCQUF1QixFQUF2QkE7RUFDRixDQUFDLENBQUM7RUFDRixJQUFNRyxxQkFBcUIsR0FBR2poQixXQUFXLGNBQUFnWixpQkFBQSxjQUFBQyxtQkFBQSxDQUFBQyxJQUFBLENBQUMsU0FBQWdJLFNBQUE7SUFBQSxPQUFBakksbUJBQUEsQ0FBQU0sSUFBQSxXQUFBNEgsU0FBQTtNQUFBLGtCQUFBQSxTQUFBLENBQUFuTSxJQUFBLEdBQUFtTSxTQUFBLENBQUExSCxJQUFBO1FBQUE7VUFBQSxJQUNuQzNULHNCQUFzQixDQUFDd00sT0FBTyxDQUFDakgsTUFBTSxDQUFDa0gsd0NBQXdDLENBQUMsQ0FBQztZQUFBNE8sU0FBQSxDQUFBMUgsSUFBQTtZQUFBO1VBQUE7VUFBQSxPQUFBMEgsU0FBQSxDQUFBekgsTUFBQTtRQUFBO1VBQUF5SCxTQUFBLENBQUExSCxJQUFBO1VBQUEsT0FHL0VWLGtCQUFrQixDQUFDLENBQUM7UUFBQTtVQUMxQnRKLFVBQVUsQ0FBQyxDQUFDO1VBQ1pwQixnQkFBZ0IsQ0FBQ3ROLE9BQU8sQ0FBQ29iLFFBQVEsQ0FBQztVQUNsQ3BaLHFCQUFxQixDQUFDaUcsSUFBSSxDQUFDTSxFQUFFLEVBQUU7WUFDN0I0RSxlQUFlLEVBQUUsVUFBVTtZQUMzQkMsYUFBYSxFQUFFcE4sT0FBTyxDQUFDb2IsUUFBUTtZQUMvQnZSLFlBQVksRUFBRSxJQUFJO1lBQ2xCa04sT0FBTyxFQUFFO1VBQ1gsQ0FBQyxDQUFDO1FBQUE7UUFBQTtVQUFBLE9BQUFxSixTQUFBLENBQUF0SCxJQUFBO01BQUE7SUFBQSxHQUFBcUgsUUFBQTtFQUFBLENBQ0gsSUFBRSxDQUFDelIsVUFBVSxFQUFFc0osa0JBQWtCLEVBQUUvUCxJQUFJLENBQUNNLEVBQUUsQ0FBQyxDQUFDO0VBRTdDLElBQU04WCxnQkFBZ0IsR0FBR3BoQixXQUFXLENBQUMsWUFBTTtJQUN6QyxJQUFJLENBQUM4SCx1QkFBdUIsQ0FBQzBLLG1CQUFtQixDQUFDLEVBQUU7TUFDakQ7SUFDRjtJQUNBL0MsVUFBVSxDQUFDLENBQUM7SUFDWmhCLFdBQVcsQ0FBQyxLQUFLLENBQUM7SUFDbEJKLGdCQUFnQixDQUFDdE4sT0FBTyxDQUFDOFEsUUFBUSxDQUFDO0lBQ2xDRyxlQUFlLENBQUMsQ0FBQztJQUNqQmpQLHFCQUFxQixDQUFDaUcsSUFBSSxDQUFDTSxFQUFFLEVBQUU7TUFDN0I0RSxlQUFlLEVBQUUsVUFBVTtNQUMzQkMsYUFBYSxFQUFFcE4sT0FBTyxDQUFDOFE7SUFDekIsQ0FBQyxDQUFDO0VBQ0osQ0FBQyxFQUFFLENBQUNwQyxVQUFVLEVBQUV1QyxlQUFlLEVBQUVoSixJQUFJLENBQUNNLEVBQUUsRUFBRWtKLG1CQUFtQixDQUFDLENBQUM7RUFFL0QsSUFBTTZPLGlCQUFpQixHQUFHcmhCLFdBQVcsY0FBQWdaLGlCQUFBLGNBQUFDLG1CQUFBLENBQUFDLElBQUEsQ0FBQyxTQUFBb0ksU0FBQTtJQUFBLElBQUFDLFlBQUEsRUFBQUMsUUFBQSxFQUFBN1AsSUFBQSxFQUFBOFAsR0FBQTtJQUFBLE9BQUF4SSxtQkFBQSxDQUFBTSxJQUFBLFdBQUFtSSxTQUFBO01BQUEsa0JBQUFBLFNBQUEsQ0FBQTFNLElBQUEsR0FBQTBNLFNBQUEsQ0FBQWpJLElBQUE7UUFBQTtVQUNwQ2hMLFdBQVcsQ0FBQyxLQUFLLENBQUM7VUFDZDhTLFlBQVksR0FBRzVRLE1BQU0sQ0FBQ2dCLElBQUksQ0FBQ2dRLElBQUksQ0FBQyxVQUFDQyxDQUFRO1lBQUEsT0FBS3BmLDZCQUE2QixDQUFDb2YsQ0FBQyxDQUFDO1VBQUEsRUFBQztVQUFBLElBQzlFTCxZQUFZO1lBQUFHLFNBQUEsQ0FBQWpJLElBQUE7WUFBQTtVQUFBO1VBQUFpSSxTQUFBLENBQUExTSxJQUFBO1VBQUEwTSxTQUFBLENBQUFqSSxJQUFBO1VBQUEsT0FFVXRXLFNBQVMsQ0FBQztZQUMvQjBlLElBQUksZ0RBQUE3TyxNQUFBLENBQWdEM1AsVUFBVSxDQUFDOEYsSUFBSSxDQUFDa0csUUFBUSxDQUFDLENBQUU7WUFDL0V5UyxNQUFNLEVBQUU7VUFDVixDQUFDLENBQUM7UUFBQTtVQUhJTixRQUFRLEdBQUFFLFNBQUEsQ0FBQTlILElBQUE7VUFBQThILFNBQUEsQ0FBQWpJLElBQUE7VUFBQSxPQUlLK0gsUUFBUSxDQUFDTyxJQUFJLENBQUMsQ0FBQztRQUFBO1VBQTVCcFEsSUFBSSxHQUFBK1AsU0FBQSxDQUFBOUgsSUFBQTtVQUNWMkgsWUFBWSxHQUFHLENBQUM1UCxJQUFJLENBQUNBLElBQUksSUFBSSxFQUFFLEVBQUVnUSxJQUFJLENBQUMsVUFBQ0MsQ0FBUTtZQUFBLE9BQUtwZiw2QkFBNkIsQ0FBQ29mLENBQUMsQ0FBQztVQUFBLEVBQUM7VUFBQUYsU0FBQSxDQUFBakksSUFBQTtVQUFBO1FBQUE7VUFBQWlJLFNBQUEsQ0FBQTFNLElBQUE7VUFBQXlNLEdBQUEsR0FBQUMsU0FBQTtVQUFBLE9BQUFBLFNBQUEsQ0FBQWhJLE1BQUE7UUFBQTtVQUFBLElBS3BGNkgsWUFBWTtZQUFBRyxTQUFBLENBQUFqSSxJQUFBO1lBQUE7VUFBQTtVQUFBLE9BQUFpSSxTQUFBLENBQUFoSSxNQUFBO1FBQUE7VUFHakJ0SixVQUFVLENBQUMsSUFBSSxDQUFDO1VBQ2hCRCxTQUFTLGFBQVRBLFNBQVMsZUFBVEEsU0FBUyxDQUFHLElBQUksQ0FBQztVQUNqQkcsT0FBTyxhQUFQQSxPQUFPLGVBQVBBLE9BQU8sQ0FBRyxJQUFJLENBQUM7VUFDZmQsV0FBVyxDQUFDK1IsWUFBWSxDQUFDO1VBQ3pCbFQsZ0JBQWdCLENBQUN0TixPQUFPLENBQUMyUCxJQUFJLENBQUM7VUFDOUIzTixxQkFBcUIsQ0FBQ2lHLElBQUksQ0FBQ00sRUFBRSxFQUFFO1lBQzdCNEUsZUFBZSxFQUFFLFNBQVM7WUFDMUJDLGFBQWEsRUFBRXBOLE9BQU8sQ0FBQzJQLElBQUk7WUFDM0JvSCxPQUFPLEVBQUV5SixZQUFZLENBQUNqWSxFQUFFO1lBQ3hCc0IsWUFBWSxFQUFFO1VBQ2hCLENBQUMsQ0FBQztRQUFBO1FBQUE7VUFBQSxPQUFBOFcsU0FBQSxDQUFBN0gsSUFBQTtNQUFBO0lBQUEsR0FBQXlILFFBQUE7RUFBQSxDQUNILElBQUUsQ0FBQzNRLE1BQU0sQ0FBQ2dCLElBQUksRUFBRXhJLElBQUksQ0FBQ2tHLFFBQVEsRUFBRUcsV0FBVyxFQUFFVyxTQUFTLEVBQUVDLFVBQVUsRUFBRUUsT0FBTyxFQUFFdEgsSUFBSSxDQUFDTSxFQUFFLENBQUMsQ0FBQztFQUV0RixJQUFNMFksMkJBQTJCLEdBQUdoaUIsV0FBVztJQUFBLElBQUFpaUIsTUFBQSxHQUFBakosaUJBQUEsY0FBQUMsbUJBQUEsQ0FBQUMsSUFBQSxDQUM3QyxTQUFBZ0osU0FBT0MsUUFBa0M7TUFBQSxJQUFBQyxhQUFBLEVBQUFDLEdBQUE7TUFBQSxPQUFBcEosbUJBQUEsQ0FBQU0sSUFBQSxXQUFBK0ksU0FBQTtRQUFBLGtCQUFBQSxTQUFBLENBQUF0TixJQUFBLEdBQUFzTixTQUFBLENBQUE3SSxJQUFBO1VBQUE7WUFBQSxLQUNuQ3pTLG9DQUFvQyxDQUFDbWIsUUFBUSxDQUFDalUsZUFBZSxDQUFDO2NBQUFvVSxTQUFBLENBQUE3SSxJQUFBO2NBQUE7WUFBQTtZQUFBLE9BQUE2SSxTQUFBLENBQUE1SSxNQUFBO1VBQUE7WUFBQSxLQUs5RHpTLHNDQUFzQyxDQUFDa2IsUUFBUSxDQUFDckssT0FBTyxFQUFFcUssUUFBUSxDQUFDalUsZUFBZSxDQUFDO2NBQUFvVSxTQUFBLENBQUE3SSxJQUFBO2NBQUE7WUFBQTtZQUFBNkksU0FBQSxDQUFBdE4sSUFBQTtZQUFBc04sU0FBQSxDQUFBN0ksSUFBQTtZQUFBLE9BRTVEclcsZ0JBQWdCLENBQUMrZSxRQUFRLENBQUNySyxPQUFpQixDQUFDO1VBQUE7WUFBbEVzSyxhQUFhLEdBQUFFLFNBQUEsQ0FBQTFJLElBQUE7WUFBQTBJLFNBQUEsQ0FBQTdJLElBQUE7WUFBQTtVQUFBO1lBQUE2SSxTQUFBLENBQUF0TixJQUFBO1lBQUFxTixHQUFBLEdBQUFDLFNBQUE7WUFFYkYsYUFBYSxHQUFHbkssU0FBUztVQUFBO1lBQUEsSUFJeEJwRixnQkFBZ0IsQ0FBQ3JKLE9BQU87Y0FBQThZLFNBQUEsQ0FBQTdJLElBQUE7Y0FBQTtZQUFBO1lBQzNCNUcsZ0JBQWdCLENBQUNySixPQUFPLEdBQUcsSUFBSTtZQUFBOFksU0FBQSxDQUFBN0ksSUFBQTtZQUFBLE9BQ3pCekksZUFBZSxDQUFDOUosbUNBQW1DLENBQUNpYixRQUFRLENBQUNqVSxlQUFlLENBQUMsR0FBR2tVLGFBQWEsR0FBR25LLFNBQVMsQ0FBQztVQUFBO1lBQUEsT0FBQXFLLFNBQUEsQ0FBQTVJLE1BQUE7VUFBQTtZQUlsSCxJQUFJdlMsb0NBQW9DLENBQUNpYixhQUFhLEVBQUVELFFBQVEsQ0FBQ2pVLGVBQWUsQ0FBQyxFQUFFO2NBQ2pGc0IsV0FBVyxDQUFDNFMsYUFBc0IsQ0FBQztZQUNyQztVQUFDO1VBQUE7WUFBQSxPQUFBRSxTQUFBLENBQUF6SSxJQUFBO1FBQUE7TUFBQSxHQUFBcUksUUFBQTtJQUFBLENBQ0Y7SUFBQSxpQkFBQUssR0FBQTtNQUFBLE9BQUFOLE1BQUEsQ0FBQTFELEtBQUEsT0FBQUMsU0FBQTtJQUFBO0VBQUEsS0FDRCxDQUFDeE4sZUFBZSxFQUFFeEIsV0FBVyxDQUMvQixDQUFDO0VBRUQsSUFBTWdULG1CQUFtQixHQUFHeGlCLFdBQVc7SUFBQSxJQUFBeWlCLE1BQUEsR0FBQXpKLGlCQUFBLGNBQUFDLG1CQUFBLENBQUFDLElBQUEsQ0FDckMsU0FBQXdKLFNBQU9QLFFBQWtDO01BQUEsSUFBQVEsd0JBQUEsRUFBQUMsWUFBQSxFQUFBQyxxQkFBQSxFQUFBQyxzQkFBQTtNQUFBLE9BQUE3SixtQkFBQSxDQUFBTSxJQUFBLFdBQUF3SixTQUFBO1FBQUEsa0JBQUFBLFNBQUEsQ0FBQS9OLElBQUEsR0FBQStOLFNBQUEsQ0FBQXRKLElBQUE7VUFBQTtZQUN2Q3BQLGNBQWMsQ0FBQyxLQUFLLENBQUM7WUFDckJHLGtCQUFrQixDQUFDLElBQUksQ0FBQztZQUVsQm1ZLHdCQUF3QixHQUFHdmIsMkJBQTJCLENBQUMrYSxRQUFRLENBQUNySixXQUFXLENBQUM7WUFDbEYsSUFBSTZKLHdCQUF3QixFQUFFO2NBQzVCelMsZUFBZSxDQUFDeVMsd0JBQXdCLENBQUM7WUFDM0M7WUFFTUMsWUFBWSxHQUFHN2IsNkJBQTZCLENBQUNvYixRQUFRLENBQUM7WUFBQSxNQUV4RFMsWUFBWSxLQUFLLFVBQVU7Y0FBQUcsU0FBQSxDQUFBdEosSUFBQTtjQUFBO1lBQUE7WUFBQXNKLFNBQUEsQ0FBQXRKLElBQUE7WUFBQSxPQUN2QndILHFCQUFxQixDQUFDLENBQUM7VUFBQTtZQUM3QjdWLGNBQWMsQ0FBQyxDQUFDO1lBQ2hCdU4sZ0JBQWdCLENBQUMsQ0FBQztZQUFBLE9BQUFvSyxTQUFBLENBQUFySixNQUFBO1VBQUE7WUFBQSxNQUloQmtKLFlBQVksS0FBSyxVQUFVO2NBQUFHLFNBQUEsQ0FBQXRKLElBQUE7Y0FBQTtZQUFBO1lBQzdCMkgsZ0JBQWdCLENBQUMsQ0FBQztZQUNsQmhXLGNBQWMsQ0FBQyxDQUFDO1lBQ2hCdU4sZ0JBQWdCLENBQUMsQ0FBQztZQUFBLE9BQUFvSyxTQUFBLENBQUFySixNQUFBO1VBQUE7WUFBQSxNQUloQmtKLFlBQVksS0FBSyxTQUFTO2NBQUFHLFNBQUEsQ0FBQXRKLElBQUE7Y0FBQTtZQUFBO1lBQUFzSixTQUFBLENBQUF0SixJQUFBO1lBQUEsT0FDdEI0SCxpQkFBaUIsQ0FBQyxDQUFDO1VBQUE7WUFDekJqVyxjQUFjLENBQUMsQ0FBQztZQUNoQnVOLGdCQUFnQixDQUFDLENBQUM7WUFBQSxPQUFBb0ssU0FBQSxDQUFBckosTUFBQTtVQUFBO1lBSXBCLElBQUlrSixZQUFZLEtBQUssTUFBTSxFQUFFO2NBQzNCN1cscUJBQXFCLENBQUM7Z0JBQUVKLE9BQU8sRUFBRSxFQUFFO2dCQUFFQyxXQUFXLEVBQUU7Y0FBRyxDQUFDLENBQUM7Y0FDdkRPLGdCQUFnQixFQUFBMFcscUJBQUEsR0FBQ1YsUUFBUSxDQUFDdlgsWUFBWSxjQUFBaVkscUJBQUEsY0FBQUEscUJBQUEsR0FBSSxJQUFJLENBQUM7Y0FDL0NuZ0Isa0JBQWtCLENBQUMsQ0FBQyxDQUFDNFYsZUFBZSxFQUFBd0ssc0JBQUEsR0FBQ1gsUUFBUSxDQUFDdlgsWUFBWSxjQUFBa1ksc0JBQUEsY0FBQUEsc0JBQUEsR0FBSSxJQUFJLENBQUM7Y0FDbkV2WCxRQUFRLENBQUNDLGFBQWEsQ0FBQyxJQUFJQyxXQUFXLENBQUMsc0JBQXNCLENBQUMsQ0FBQztjQUMvRHNELFFBQVEsQ0FBQzBJLElBQUksQ0FBQyxDQUFDO1lBQ2pCLENBQUMsTUFBTSxJQUFJbUwsWUFBWSxLQUFLLGFBQWEsSUFBSVQsUUFBUSxDQUFDaFUsYUFBYSxFQUFFO2NBQ25FRSxnQkFBZ0IsQ0FBQzhULFFBQVEsQ0FBQ2hVLGFBQXdCLENBQUM7WUFDckQ7WUFFQS9DLGNBQWMsQ0FBQyxDQUFDO1lBQ2hCdU4sZ0JBQWdCLENBQUMsQ0FBQztVQUFBO1VBQUE7WUFBQSxPQUFBb0ssU0FBQSxDQUFBbEosSUFBQTtRQUFBO01BQUEsR0FBQTZJLFFBQUE7SUFBQSxDQUNuQjtJQUFBLGlCQUFBTSxHQUFBO01BQUEsT0FBQVAsTUFBQSxDQUFBbEUsS0FBQSxPQUFBQyxTQUFBO0lBQUE7RUFBQSxLQUNELENBQ0VwVCxjQUFjLEVBQ2RpVyxpQkFBaUIsRUFDakJKLHFCQUFxQixFQUNyQkcsZ0JBQWdCLEVBQ2hCclMsUUFBUSxFQUNSdkUsa0JBQWtCLEVBQ2xCMEYsZUFBZSxFQUNmeUksZ0JBQWdCLENBRXBCLENBQUM7RUFFRHZZLFNBQVMsQ0FBQyxZQUFNO0lBQ2QsSUFBTStoQixRQUFRLEdBQUcxWSx3QkFBd0IsQ0FBQ0QsT0FBTztJQUNqRCxJQUFJLENBQUMyWSxRQUFRLElBQUl6WSx3QkFBd0IsQ0FBQ0YsT0FBTyxFQUFFO0lBQ25ERSx3QkFBd0IsQ0FBQ0YsT0FBTyxHQUFHLElBQUk7SUFFdkNnQixrQkFBa0IsQ0FBQyxJQUFJLENBQUM7SUFFeEIsSUFBTXlZLFVBQVU7TUFBQSxJQUFBQyxNQUFBLEdBQUFsSyxpQkFBQSxjQUFBQyxtQkFBQSxDQUFBQyxJQUFBLENBQUcsU0FBQWlLLFNBQUE7UUFBQSxPQUFBbEssbUJBQUEsQ0FBQU0sSUFBQSxXQUFBNkosU0FBQTtVQUFBLGtCQUFBQSxTQUFBLENBQUFwTyxJQUFBLEdBQUFvTyxTQUFBLENBQUEzSixJQUFBO1lBQUE7Y0FBQTJKLFNBQUEsQ0FBQXBPLElBQUE7Y0FBQW9PLFNBQUEsQ0FBQTNKLElBQUE7Y0FBQSxPQUVUdUksMkJBQTJCLENBQUNHLFFBQVEsQ0FBQztZQUFBO2NBQzNDMVksd0JBQXdCLENBQUNELE9BQU8sR0FBRyxJQUFJO2NBQUE0WixTQUFBLENBQUEzSixJQUFBO2NBQUEsT0FDakMrSSxtQkFBbUIsQ0FBQ0wsUUFBUSxDQUFDO1lBQUE7Y0FBQWlCLFNBQUEsQ0FBQXBPLElBQUE7Y0FFbkNqTCxxQkFBcUIsQ0FBQyxLQUFLLENBQUM7Y0FDNUJnRSxlQUFlLENBQUMsSUFBSSxDQUFDO2NBQUEsT0FBQXFWLFNBQUEsQ0FBQUMsTUFBQTtZQUFBO1lBQUE7Y0FBQSxPQUFBRCxTQUFBLENBQUF2SixJQUFBO1VBQUE7UUFBQSxHQUFBc0osUUFBQTtNQUFBLENBRXhCO01BQUEsZ0JBVEtGLFVBQVVBLENBQUE7UUFBQSxPQUFBQyxNQUFBLENBQUEzRSxLQUFBLE9BQUFDLFNBQUE7TUFBQTtJQUFBLEdBU2Y7SUFFRHlFLFVBQVUsQ0FBQyxDQUFDLFNBQU0sQ0FBQztNQUFBLE9BQU1oTCxTQUFTO0lBQUEsRUFBQztFQUNyQyxDQUFDLEVBQUUsQ0FBQ3VLLG1CQUFtQixFQUFFUiwyQkFBMkIsRUFBRXhYLGtCQUFrQixDQUFDLENBQUM7RUFFMUUsSUFBTThZLDZCQUE2QixHQUFHdGpCLFdBQVcsQ0FDL0MsVUFBQzhYLE9BQWUsRUFBSztJQUNuQnpHLFdBQVcsQ0FBQ3lHLE9BQU8sQ0FBQztJQUNwQixJQUFJcFEsOEJBQThCLENBQUNpSSxLQUFLLGFBQUxBLEtBQUssdUJBQUxBLEtBQUssQ0FBRXJHLEVBQUUsRUFBRXdPLE9BQU8sQ0FBQyxFQUFFO01BQ3REdEcsZ0JBQWdCLENBQUNzRyxPQUFPLENBQUM7SUFDM0I7RUFDRixDQUFDLEVBQ0QsQ0FBQ25JLEtBQUssYUFBTEEsS0FBSyx1QkFBTEEsS0FBSyxDQUFFckcsRUFBRSxFQUFFK0gsV0FBVyxFQUFFRyxnQkFBZ0IsQ0FDM0MsQ0FBQztFQUVELElBQU0rUixVQUFVLGdCQUNkaGIsS0FBQSxDQUFBRSxTQUFBO0lBQUErYSxRQUFBLEdBQ0cvQyxXQUFXLGdCQUNWcFksSUFBQSxDQUFDckgsT0FBTztNQUNOeWlCLFVBQVUsRUFBRXRMLFFBQVM7TUFDckJ1TCxPQUFPLEVBQUUsU0FBVEEsT0FBT0EsQ0FBQTtRQUFBLE9BQVF2VSxrQkFBa0IsQ0FBQyxJQUFJLENBQUM7TUFBQSxDQUFDO01BQ3hDd1UsY0FBYyxFQUFFbFQsWUFBYTtNQUM3QjJMLGtCQUFrQixFQUFFQSxrQkFBbUI7TUFDdkM2RSxxQkFBcUIsRUFBRUEscUJBQXNCO01BQzdDbkIsV0FBVyxFQUFFQSxXQUFZO01BQ3pCaFMsWUFBWSxFQUFFQSxZQUFhO01BQzNCOFYscUJBQXFCLEVBQUU3VixlQUFnQjtNQUN2Q1MsUUFBUSxFQUFFVSxlQUFnQjtNQUMxQmhCLGVBQWUsRUFBRTBFLHNCQUF1QjtNQUN4Q3dPLGdCQUFnQixFQUFFQSxnQkFBaUI7TUFDbkN5QyxvQkFBb0IsRUFBRXhDLGlCQUFrQjtNQUN4Q3lDLHNCQUFzQixFQUFFLENBQUMsQ0FBQ2hGLG9CQUFxQjtNQUMvQ2lGLFdBQVcsR0FBQWpiLHNCQUFBLElBQUFDLHNCQUFBLEdBQUVNLHNCQUFzQixDQUFDRyxPQUFPLGNBQUFULHNCQUFBLHVCQUE5QkEsc0JBQUEsQ0FBZ0NrQixXQUFXLGNBQUFuQixzQkFBQSxjQUFBQSxzQkFBQSxHQUFJLEtBQU07TUFDbEVrYixZQUFZLEVBQUV2TDtJQUF3QixDQUN2QyxDQUFDLEdBQ0EsSUFBSSxlQUNSbFEsS0FBQSxDQUFDM0csYUFBYTtNQUFDMlIsUUFBUSxFQUFFQSxRQUFTO01BQUMwUSxRQUFRLEVBQUV6USxVQUFXO01BQUFnUSxRQUFBLGdCQUN0RG5iLElBQUEsQ0FBQ2pILGlCQUFpQjtRQUNoQitSLFVBQVUsRUFBRUEsVUFBVztRQUN2QitRLGtCQUFrQixFQUFFN1Esc0JBQXVCO1FBQzNDRSxRQUFRLEVBQUVBLFFBQVM7UUFDbkI0USxTQUFTLEVBQUUzUSxVQUFXO1FBQ3RCNFEsV0FBVyxFQUFFNU4sZUFBZ0I7UUFDN0I2TixVQUFVLEVBQUV2TyxjQUFlO1FBQzNCd08sU0FBUyxFQUFFblAsYUFBYztRQUN6QmxLLGNBQWMsRUFBRUEsY0FBZTtRQUMvQjBGLE1BQU0sRUFBRUEsTUFBTSxDQUFDZ0IsSUFBSztRQUNwQm5ELFFBQVEsRUFBRSxDQUFDLENBQUNzQyxVQUFXO1FBQ3ZCRixPQUFPLEVBQUVBLE9BQVE7UUFDakJDLFdBQVcsRUFBRUEsV0FBWTtRQUN6QjBULE9BQU8sRUFBRTVULE1BQU0sQ0FBQzZULFFBQVM7UUFDekJuSSxlQUFlLEVBQUVBLGVBQWdCO1FBQ2pDb0ksYUFBYSxFQUFFbFQsbUJBQW9CO1FBQ25DTixjQUFjLEVBQUVBLGNBQWU7UUFDL0JRLGNBQWMsRUFBRUEsY0FBZTtRQUMvQnNPLGlCQUFpQixFQUFFQSxpQkFBa0I7UUFDckNDLGlCQUFpQixFQUFFQSxpQkFBa0I7UUFDckMwRSxnQkFBZ0IsRUFBRXpFLG9CQUFxQjtRQUN2Q2MsY0FBYyxFQUFFQSxjQUFlO1FBQy9CNEQsTUFBTSxFQUFFbkk7TUFBVyxDQUNwQixDQUFDLEVBQ0QyRCxlQUFlLEtBQUssT0FBTyxnQkFDMUI5WCxJQUFBLENBQUMxSCxTQUFTLElBQUUsQ0FBQyxHQUNYd2YsZUFBZSxLQUFLLE1BQU0sZ0JBQzVCOVgsSUFBQSxDQUFDeEgsYUFBYTtRQUNac04sYUFBYSxFQUFFc0UscUJBQXNCO1FBQ3JDMUQsUUFBUSxFQUFBNlYsYUFBQSxDQUFBQSxhQUFBLEtBQU83VixRQUFRO1VBQUUwSSxJQUFJLEVBQUVQLFNBQVM7VUFBRXhHLElBQUksRUFBRTNCLFFBQVEsQ0FBQzJCLElBQUk7VUFBRUQsWUFBWSxFQUFaQTtRQUFZLEVBQUc7UUFDOUVpVCxPQUFPLEVBQUUsU0FBVEEsT0FBT0EsQ0FBQTtVQUFBLE9BQVFqVixXQUFXLENBQUMsSUFBSSxDQUFDO1FBQUEsQ0FBQztRQUNqQ29XLElBQUksRUFBRTtVQUFFL1ksa0JBQWtCLEVBQWxCQSxrQkFBa0I7VUFBRUksYUFBYSxFQUFiQTtRQUFjLENBQUU7UUFDNUM0WSxrQkFBa0IsRUFBRXhKLHNCQUF1QjtRQUMzQy9ILFFBQVEsRUFBRUEsUUFBUztRQUNuQjBRLFFBQVEsRUFBRXpRLFVBQVc7UUFDckI3QyxNQUFNLEVBQUVBLE1BQU0sQ0FBQ2dCLElBQUs7UUFDcEJvVCxhQUFhLEVBQUVuVSxPQUFRO1FBQ3ZCb1UsYUFBYSxFQUFFMUIsNkJBQThCO1FBQzdDMkIscUJBQXFCLEVBQUUxVCxtQkFBb0I7UUFDM0MyVCxhQUFhLEVBQUUsQ0FBQyxDQUFDdlUsTUFBTSxDQUFDNlQsUUFBUztRQUNqQ1csaUJBQWlCLEVBQUV0VSxXQUFZO1FBQy9CdVUsZ0JBQWdCLEVBQUVuVSxjQUFlO1FBQ2pDb1UsYUFBYSxFQUFFaEUsaUJBQWtCO1FBQ2pDeFAsUUFBUSxFQUFFQSxRQUFTO1FBQ25CQyxZQUFZLEVBQUVBLFlBQWE7UUFDM0JDLGFBQWEsRUFBRUEsYUFBYztRQUM3QnVULGFBQWEsRUFBRW5ULFdBQVk7UUFDM0JvVCxjQUFjLEVBQUVyVSxrQkFBbUI7UUFDbkNzVSxtQkFBbUIsRUFBRXJVLGFBQWM7UUFDbkNMLFVBQVUsRUFBRUEsVUFBVztRQUN2QmhILGtCQUFrQixFQUFFQTtNQUFtQixDQUN4QyxDQUFDLGdCQUVGekIsSUFBQSxDQUFDL0cscUJBQXFCO1FBQUNta0IsZ0JBQWdCLEVBQUUxVyxRQUFRLENBQUMyQjtNQUFLLENBQUUsQ0FDMUQsRUFDQTBQLGVBQWUsaUJBQ2QvWCxJQUFBLENBQUM5RixpQkFBaUI7UUFDaEJvTixLQUFLLEVBQUVBLEtBQU07UUFDYmdNLGlCQUFpQixFQUFFQSxpQkFBa0I7UUFDckMrSixvQkFBb0IsRUFBRXhZLHNCQUF1QjtRQUM3Q0ksV0FBVyxFQUFFQSxXQUFZO1FBQ3pCSSxTQUFTLEVBQUVBLFNBQVU7UUFDckJpWSxNQUFNLEVBQUV6WixhQUFjO1FBQ3RCSSxVQUFVLEVBQUVBLFVBQVc7UUFDdkJpRSxhQUFhLEVBQUVBLGFBQWM7UUFDN0J1TyxvQkFBb0IsRUFBRUEsb0JBQXFCO1FBQzNDOEcsbUJBQW1CLEVBQUU3RyxvQ0FBcUM7UUFDMUQ1TCxVQUFVLEVBQUVBO01BQVcsQ0FDeEIsQ0FDRjtJQUFBLENBQ1ksQ0FBQztFQUFBLENBQ2hCLENBQ0g7RUFFRCxJQUFNc0IsY0FBYyxnQkFDbEJwTSxJQUFBLENBQUN4RyxvQkFBb0I7SUFBQzBSLFFBQVEsRUFBRUEsUUFBUztJQUFDMFEsUUFBUSxFQUFFelEsVUFBVztJQUFDcVMsR0FBRyxFQUFFcFMsaUJBQWtCO0lBQUErUCxRQUFBLEVBQ3BGRDtFQUFVLENBQ1MsQ0FDdkI7RUFFRCxPQUNFelEsUUFBUSxpQkFDUnhTLFFBQVEsQ0FBQ3dsQixZQUFZLGNBQ25CdmQsS0FBQSxDQUFDeEcsYUFBYTtJQUNad1IsUUFBUSxFQUFFQSxRQUFTO0lBQ25CSixVQUFVLEVBQUVBLFVBQVc7SUFDdkJVLFlBQVksRUFBRXdDLG9CQUFxQjtJQUNuQzBQLFFBQVEsRUFBRXRlLDBCQUEwQixDQUFDaUksT0FBTyxDQUFFO0lBQzlDc1csVUFBVSxFQUFFNWIsV0FBWTtJQUFBb1osUUFBQSxnQkFFeEJuYixJQUFBLENBQUN2RyxtQkFBbUI7TUFBQ21rQixPQUFPLEVBQUU3YixXQUFZO01BQUFvWixRQUFBLGVBQ3hDbmIsSUFBQSxDQUFDaEcsbUJBQW1CO1FBQUM2akIsSUFBSSxFQUFFalMsVUFBVztRQUFDVixRQUFRLEVBQUVBLFFBQVM7UUFBQWlRLFFBQUEsRUFDdkQvTztNQUFjLENBQ0k7SUFBQyxDQUNILENBQUMsRUFDckJySyxXQUFXLGlCQUNWL0IsSUFBQSxDQUFDckcsaUJBQWlCO01BQ2hCbWtCLGNBQWMsRUFBRXhiLHVCQUF3QjtNQUN4QzJDLFdBQVcsRUFBRXpDLGVBQWdCO01BQzdCdWIsU0FBUyxFQUFFak07SUFBMkIsQ0FDdkMsQ0FDRixFQUNBL0gsa0JBQWtCLGlCQUNqQi9KLElBQUEsQ0FBQzlHLGFBQWE7TUFDWjZQLFFBQVEsRUFBRUEsUUFBUztNQUNuQkUsV0FBVyxFQUFFQSxXQUFZO01BQ3pCRCxXQUFXLEVBQUVBLFdBQVk7TUFDekJFLG1CQUFtQixFQUFFQSxtQkFBb0I7TUFDekNDLGdCQUFnQixFQUFFQTtJQUFpQixDQUNwQyxDQUNGLEVBQ0FnQixtQkFBbUIsaUJBQ2xCbkssSUFBQSxDQUFDN0csYUFBYTtNQUFDeVEsUUFBUSxFQUFFQSxRQUFTO01BQUNDLGlCQUFpQixFQUFFQSxpQkFBa0I7TUFBQ0MsV0FBVyxFQUFFQTtJQUFZLENBQUUsQ0FDckcsRUFDQUssbUJBQW1CLGlCQUFJbkssSUFBQSxDQUFDM0cscUJBQXFCLElBQUUsQ0FBQyxlQUNqRDJHLElBQUEsQ0FBQ2hILFFBQVEsSUFBRSxDQUFDO0VBQUEsQ0FDQyxDQUFDLEVBQ2hCeVIsUUFDRixDQUFDO0FBRUwsQ0FBQyIsImlnbm9yZUxpc3QiOltdfQ==
|
|
1550
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1c2VDYWxsYmFjayIsInVzZU1lbW8iLCJ1c2VTdGF0ZSIsInVzZVJlZiIsInVzZUVmZmVjdCIsInVzZUxheW91dEVmZmVjdCIsIlJlYWN0RE9NIiwibW9tZW50IiwidXNlVHJhbnNsYXRpb24iLCJ1c2VVc2VyIiwiY2FuQWNjZXNzVG9Ta2lsbHMiLCJNQUlBRXJyb3IiLCJ1c2VNYWlhVGFza1BhbmVsWkluZGV4IiwiQ2hhdEFJQ29udGVudCIsImJ1aWxkSGFuZGxlcnMiLCJvcHRpb25zIiwiU2lkZWJhciIsInVzZUdldEFnZW50cyIsInVzZUdldFNraWxscyIsInVzZUdsb2JhbENvbnRleHQiLCJDaGF0QUlNb2RhbEhlYWRlciIsIlNuYWNrYmFyIiwiUHJvamVjdFN1bW1hcnlDb250ZW50IiwiQWJtQWdlbnRNb2RhbCIsIkFibVNraWxsTW9kYWwiLCJTS0lMTF9VU0VfQUZURVJfU0FWRV9FVkVOVCIsIkFibVNraWxsR2VuZXJhdGVNb2RhbCIsIlNFQ1RJT05TIiwiU0NDQUlNQ29udGVudCIsIlNDQ0FJTUNvbnRlbnRXcmFwcGVyIiwiU0NDQUlNTWluaW1pemVkSGlkZSIsIlNDQ0FJTVdyYXBwZXIiLCJNYWlhTWluaW1pemVkUGlsbCIsInVzZU1pbmltaXplZFBpbGxOb3ZlbHR5RG90IiwiZ2V0TWFpYUZsb2F0aW5nUGFuZWxXaWR0aFB4IiwicmVzb2x2ZUluaXRpYWxNYWlhQ2hhdExheW91dE1vZGUiLCJzZXRTdG9yZWRNYWlhQ2hhdExheW91dE1vZGUiLCJGbG9hdGluZ1BhbmVsTW90aW9uIiwidXNlRmxvYXRpbmdQYW5lbERyYWdUaWx0IiwiQ2hhdEFpTW9kYWxGb290ZXIiLCJpc01hcmtldHBsYWNlR2xvYmFsQ2xvbmVBZ2VudCIsInVzZUZhcXNTdG9yZSIsImdldENoYXRzU3RvcmVTdGF0ZSIsInVzZUNoYXRzU3RvcmUiLCJyZWFkTGFzdEFjdGl2ZUNoYXRJZCIsIndyaXRlTGFzdEFjdGl2ZUNoYXRJZCIsImNsZWFyTWFpYVBhbmVsU2Vzc2lvbiIsInBhdGNoTWFpYVBhbmVsU2Vzc2lvbiIsInJlYWRNYWlhUGFuZWxTZXNzaW9uIiwid3JpdGVNYWlhUGFuZWxTZXNzaW9uIiwidXNlU2Vzc2lvbnNTdG9yZSIsImZldGNoTWFpYSIsImZldGNoQWdlbnREZXRhaWwiLCJtYXBDT1JMYW5nIiwiRVZFTlRTIiwidXNlRXZlbnQiLCJNQUlBX09QRU5fRlJPTV9IT1NUX0VWRU5UIiwidXNlSXNNYWlhUGFnZVJvdXRlIiwiY2xhbXBGbG9hdGluZ1BhbmVsUG9zaXRpb24iLCJoYXNBbnlBY3RpdmVTZXNzaW9uSW5NZXRhIiwiaGFzQmFubmVyRmFxVGl0bGUiLCJpc0Jhbm5lckZhcVJlYWR5VG9BdXRvU2VuZCIsInJlc29sdmVBaUNoYXRCYWNrRGVzdGluYXRpb24iLCJyZXNvbHZlQ29tcHV0ZWRDdXJyZW50T3B0aW9uIiwicmVzb2x2ZUluaXRpYWxDdXJyZW50T3B0aW9uIiwicmVzb2x2ZUxlZ2FjeUNvbnRleHRTZXNzaW9uIiwicmVzb2x2ZVNpZGViYXJBZ2VudHNOYXZBY3RpdmUiLCJzaG91bGRSZXN0b3JlRXhwYW5kZWRQYW5lbCIsInNob3VsZFNraXBGbG9hdGluZ0RyYWdUYXJnZXQiLCJ2YWxpZGF0ZUFjY2Vzc0J5RmVhdHVyZSIsInJlc29sdmVIb3N0VGFrZW92ZXJFbnRpdHlTdGF0ZSIsImJ1aWxkSG9zdFRha2VvdmVyUGVyc2lzdENvbnRleHQiLCJidWlsZE1haWFQYW5lbFNlc3Npb25QYXRjaCIsImRpc3BhdGNoU2tpbGxNZW50aW9uSW5zZXJ0IiwiZW5zdXJlQWdlbnRzQmVmb3JlU2tpbGxVc2UiLCJyZXNvbHZlRmxvYXRpbmdQYW5lbERyYWdQb3NpdGlvbiIsInJlc29sdmVIb3N0VGFrZW92ZXJBZ2VudElkIiwicmVzb2x2ZU1haWFNb2RhbEkxOG5MYW5nIiwicmVzb2x2ZU1pbmltaXplZFJlc3RvcmVUYXJnZXQiLCJyZXNvbHZlTmV4dERyYWdQb3NpdGlvbiIsInJlc29sdmVVc2VySGFzQWdlbnRNYW5hZ2VtZW50UGVybWlzc2lvbnMiLCJzaG91bGRCYWNrQ2xlYXJQaW5uZWRDb250ZXh0Iiwic2hvdWxkQmFja1N0YXJ0TmV3Q2hhdFByZXNlcnZpbmdDb250ZXh0Iiwic2hvdWxkTWFya09yY2hlc3RyYXRvckNvbnRleHRSZXNldCIsInNob3VsZFN0YXJ0TmV3Q2hhdEZyb21DYXRhbG9nIiwicmVzb2x2ZUhhc1Bpbm5lZENvbnRleHQiLCJyZXNvbHZlT3JjaGVzdHJhdG9ySG9tZU5hdkZsYWdzIiwic2hvdWxkU2hvd09yY2hlc3RyYXRvckJhY2tCdXR0b24iLCJzaG91bGRDbGVhckNsaWVudE9uR29Ib21lRnJvbUNoYXQiLCJzaG91bGRDbGVhclRhc2tPbkdvSG9tZUZyb21DaGF0Iiwic2hvdWxkUmVzZXRBZ2VudFRvRmlyc3RPbkdvSG9tZSIsInNob3VsZENsZWFyT3JjaGVzdHJhdG9yR2xvYmFsQ29udGV4dE9uR29Ib21lIiwic2hvdWxkVXNlQWN0aXZlQ2hhdFNlbmRIYW5kbGVyIiwic2hvdWxkUHJlZmV0Y2hBZ2VudHNGb3JDYXRhbG9nTmV3Q2hhdCIsImNhbk9wZW5NYWlhTWFya2V0cGxhY2UiLCJzaG91bGRNYXJrQWdlbnRBc0xlZ2FjeUNvbnRleHQiLCJidWlsZExlZ2FjeUNvbnRleHRBZ2VudCIsImJ1aWxkTGVnYWN5Q29udGV4dE1pZ3JhdGlvblBhdGNoIiwiZmluZE9yY2hlc3RyYXRvckFnZW50Iiwic2hvdWxkU2V0Q2hhdFZpZXdIaWRkZW5Pbk1vdW50Iiwic2hvdWxkUGVyc2lzdExhc3RBY3RpdmVDaGF0SWQiLCJzaG91bGRTeW5jUGFuZWxTZXNzaW9uT25QYWdlSGlkZSIsInJlc29sdmVDYWNoZWRBZ2VudHNJZkF2YWlsYWJsZSIsInNob3VsZEF0dGVtcHRJbml0aWFsQWdlbnRzRmV0Y2giLCJmaW5kQWdlbnRGb3JDaGF0SXRlbSIsInNob3VsZEFwcGx5Q2xpZW50T25Ib3N0VGFrZW92ZXIiLCJzaG91bGRTZWxlY3RGaXJzdEFnZW50T25Ib3N0VGFrZW92ZXIiLCJzaG91bGRSZXNldENoYXRTdGF0ZU9uR29Ib21lIiwic2hvdWxkQ2xlYXJDb250ZXh0Rm9yQ2F0YWxvZ09yU2tpbGxBZ2VudCIsInJlc29sdmVPcGVuTmV3Q2hhdFdpdGhBZ2VudENvbnRleHQiLCJjYW5Db250aW51ZUxlZ2FjeUNvbnRleHRJbk5ld0NoYXQiLCJyZXNvbHZlU2Vzc2lvblJlc3RvcmVOYXZSb3V0ZSIsInNob3VsZFNraXBBZ2VudHNMb2FkT25TZXNzaW9uUmVzdG9yZSIsInNob3VsZEZldGNoQWdlbnREZXRhaWxPblNlc3Npb25SZXN0b3JlIiwic2hvdWxkUGFzc0FnZW50VG9HZXRBZ2VudHNPblJlc3RvcmUiLCJzaG91bGRTZWxlY3RGZXRjaGVkQWdlbnRBZnRlclJlc3RvcmUiLCJyZXNvbHZlU25hcHNob3RDaGlwc1Byb2plY3QiLCJyZXNvbHZlQ2hhdE1vZGFsU2VjdGlvbkZsYWdzIiwic2hvdWxkUmVuZGVyQ2hhdFNpZGViYXIiLCJyZXNvbHZlQ2hhdE1vZGFsTWFpbkNvbnRlbnRWaWV3Iiwic2hvdWxkU2hvd0NoYXRNb2RhbEZvb3RlciIsInNob3VsZFVzZUVsZXZhdGVkTWFpYVBhbmVsIiwic2hvdWxkUmVzZWxlY3RBZ2VudEFmdGVyRGVsZXRlIiwic2hvdWxkQ2xlYXJEcmFnUG9zaXRpb25PbkxheW91dENoYW5nZSIsInNob3VsZFN0YXJ0RmxvYXRpbmdQYW5lbERyYWciLCJpc0FjdGl2ZUZsb2F0aW5nRHJhZ1BvaW50ZXIiLCJzaG91bGRPcGVuU2tpbGxzQ2F0YWxvZyIsInNob3VsZFVzZURyYWdDbGFtcEZhbGxiYWNrIiwicmVzb2x2ZUxheW91dERyYWdQb3NpdGlvblVwZGF0ZSIsInJlc29sdmVQZXJzaXN0ZWREcmFnUG9zaXRpb25PbkVuZCIsImJ1aWxkVXNlckluaXRpYWxNZXNzYWdlRnJvbVN0YXJ0Q2hhdCIsInNob3VsZFJlc2V0U2lkZWJhckVycm9yT25TdGFydENoYXQiLCJnZXRNYWlhSG9zdFBhbmVsUHJlc2VudGF0aW9uIiwianN4IiwiX2pzeCIsImpzeHMiLCJfanN4cyIsIkZyYWdtZW50IiwiX0ZyYWdtZW50IiwiSURfTU9EQUxfQ0hBVF9BR0VOVCIsIkNoYXRBSU1vZGFsIiwiX3NhdmVkU2Vzc2lvbk9uTW91bnRSIiwiX3NhdmVkU2Vzc2lvbk9uTW91bnRSMiIsIl9zYXZlZFNlc3Npb25Pbk1vdW50UjUiLCJfc2F2ZWRTZXNzaW9uT25Nb3VudFI2IiwidXNlciIsIl91c2VUcmFuc2xhdGlvbiIsImFibUFnZW50IiwiaTE4biIsImFtcGxpdHVkRXZlbnQiLCJzYXZlZFNlc3Npb25Pbk1vdW50UmVmIiwiaWQiLCJzaG91bGRSZXN0b3JlRXhwYW5kZWQiLCJjdXJyZW50IiwicGVuZGluZ1Nlc3Npb25SZXN0b3JlUmVmIiwic2Vzc2lvblJlc3RvcmVTdGFydGVkUmVmIiwiX3VzZVN0YXRlIiwiX3VzZVN0YXRlMiIsIl9zbGljZWRUb0FycmF5IiwiaXNSZXN0b3JpbmdTZXNzaW9uIiwic2V0SXNSZXN0b3JpbmdTZXNzaW9uIiwic2lkZWJhck9wZW5SZWYiLCJzaWRlYmFyT3BlbiIsIl91c2VTdGF0ZTMiLCJfdXNlU3RhdGU0IiwiaXNNaW5pbWl6ZWQiLCJzZXRJc01pbmltaXplZCIsImlzTWFpYVBhZ2VSb3V0ZSIsIl9nZXRNYWlhSG9zdFBhbmVsUHJlcyIsImhpZGVQYW5lbENvbnRlbnQiLCJzaG93TWluaW1pemVkUGlsbCIsImluaXRpYWxDaGF0c1JlZmV0Y2hEb25lUmVmIiwic2V0Q2hhdFZpZXdWaXNpYmxlIiwic3RhdGUiLCJ1bnJlYWRDb3VudCIsInNob3dNaW5pbWl6ZWROb3ZlbHR5RG90IiwiYWN0aXZlQ2hhdElkIiwiaGFzQWN0aXZlU3RyZWFtIiwibWV0YSIsImdvVG9DaGF0UmVmIiwiZ29Ib21lUmVmIiwiaGFuZGxlTWluaW1pemUiLCJhaUNoYXRNaW5pbWl6ZSIsImlzRXhwYW5kZWQiLCJmb2N1c0NoYXRJbnB1dCIsIndpbmRvdyIsInNldFRpbWVvdXQiLCJkb2N1bWVudCIsImRpc3BhdGNoRXZlbnQiLCJDdXN0b21FdmVudCIsIl91c2VTdGF0ZTUiLCJtZXNzYWdlIiwiYXR0YWNobWVudHMiLCJfdXNlU3RhdGU2IiwidXNlckluaXRpYWxNZXNzYWdlIiwic2V0VXNlckluaXRpYWxNZXNzYWdlIiwiX3VzZVN0YXRlNyIsIl91c2VTdGF0ZTgiLCJpbml0aWFsQ2hhdElkIiwic2V0SW5pdGlhbENoYXRJZCIsIl91c2VTdGF0ZTkiLCJfdXNlU3RhdGUwIiwibmV3Q2hhdEtleSIsInNldE5ld0NoYXRLZXkiLCJfdXNlU3RhdGUxIiwiX3VzZVN0YXRlMTAiLCJzZXNzaW9uTWV0YSIsInNldFNlc3Npb25NZXRhIiwiX3VzZVN0YXRlMTEiLCJfdXNlU3RhdGUxMiIsInNlbmRNZXNzYWdlRnVuY3Rpb24iLCJzZXRTZW5kTWVzc2FnZUZ1bmN0aW9uIiwiX3VzZVN0YXRlMTMiLCJfdXNlU3RhdGUxNCIsInN0b3BHZW5lcmF0aW9uRnVuY3Rpb24iLCJzZXRTdG9wR2VuZXJhdGlvbkZ1bmN0aW9uIiwiX3VzZVN0YXRlMTUiLCJfdXNlU3RhdGUxNiIsImlzU3RyZWFtaW5nIiwic2V0SXNTdHJlYW1pbmciLCJfdXNlU3RhdGUxNyIsIl91c2VTdGF0ZTE4IiwiaXNXcml0aW5nIiwic2V0SXNXcml0aW5nIiwiX3VzZVN0YXRlMTkiLCJfdXNlU3RhdGUyMCIsInJlZmV0Y2hDaGF0cyIsInNldFJlZmV0Y2hDaGF0cyIsIl91c2VTdGF0ZTIxIiwic2F2ZWQiLCJhZ2VudHNOYXZBY3RpdmUiLCJjdXJyZW50T3B0aW9uIiwiX3VzZVN0YXRlMjIiLCJzZXRDdXJyZW50T3B0aW9uIiwiX3VzZVN0YXRlMjMiLCJfdXNlU3RhdGUyNCIsImhhc0Vycm9yIiwic2V0SGFzRXJyb3IiLCJfdXNlU3RhdGUyNSIsIl91c2VTdGF0ZTI2IiwiZGlkUmVzZXRDb250ZXh0SW5TZWN0aW9uIiwic2V0RGlkUmVzZXRDb250ZXh0SW5TZWN0aW9uIiwicHJldkhhc1Bpbm5lZENvbnRleHRSZWYiLCJoYW5kbGVycyIsIl91c2VTdGF0ZTI3IiwiX3VzZVN0YXRlMjgiLCJzaWRlYmFySGFzRXJyb3IiLCJzZXRTaWRlYmFySGFzRXJyb3IiLCJsYW5nIiwibGFuZ3VhZ2UiLCJsb2NhbGUiLCJfdXNlR2xvYmFsQ29udGV4dCIsInNlbGVjdEFnZW50IiwiY2xlYXJBZ2VudCIsInNlY3Rpb24iLCJhZ2VudCIsInByb2plY3QiLCJjbGllbnQiLCJ0YXNrIiwiY2hpcHNQcm9qZWN0IiwidG9nZ2xlV2ViU2VhcmNoIiwiaXNXZWJTZWFyY2hBY3RpdmUiLCJzZXRDaGlwc1Byb2plY3QiLCJzZXRDbGllbnQiLCJzZXRQcm9qZWN0IiwiYmFubmVyRW50cnlGYXEiLCJzZXRUYXNrIiwidG9vbHRpcFpJbmRleCIsIl91c2VHZXRBZ2VudHMiLCJoYW5kbGVHb0hvbWUiLCJob21lIiwiYWdlbnRzIiwibG9hZGluZyIsImxvYWRpbmdNb3JlIiwiYWdlbnRFcnJvciIsImVycm9yIiwiaGFuZGxlR2V0QWdlbnRzIiwibG9hZE1vcmVBZ2VudHMiLCJzZWFyY2hDdXN0b21BZ2VudHMiLCJzZWFyY2hMb2FkaW5nIiwiYWRkQWdlbnQiLCJyZW1vdmVBZ2VudCIsInVwZGF0ZUFnZW50IiwidXBkYXRlQWdlbnRGYXZvcml0ZSIsInNlbGVjdEZpcnN0QWdlbnQiLCJzb3J0QWdlbnRzTGlzdCIsImFnZW50c0RhdGFSZWYiLCJkYXRhIiwiX3VzZUdldFNraWxscyIsIm15U2tpbGxzIiwic2hhcmVkU2tpbGxzIiwibG9hZGluZ1NraWxscyIsImhhbmRsZUdldFNraWxscyIsImFkZFNraWxsIiwidXBkYXRlU2tpbGxJbkxpc3QiLCJyZW1vdmVTa2lsbCIsInVzZXJIYXNQZXJtaXNzaW9ucyIsInBlcm1pc3Npb25zIiwiQm9vbGVhbiIsIk1BSUFfQ0hBVF9BSV9GRUFUVVJFX0FDQ0VTU19NVUxUSV9BR0VOVFMiLCJ1c2VySGFzU2tpbGxzQWNjZXNzIiwiY29tcHV0ZWRDdXJyZW50T3B0aW9uIiwibXVsdGlBZ2VudHNBY2Nlc3MiLCJpc01haWFrZXJBZ2VudFNlbGVjdGVkIiwic2lkZWJhckFnZW50c05hdkFjdGl2ZSIsImFnZW50c0ZldGNoZWRSZWYiLCJzZWxlY3RvciIsInF1ZXJ5U2VsZWN0b3IiLCJjb25jYXQiLCJfdXNlU3RhdGUyOSIsIl91c2VTdGF0ZTMwIiwibGF5b3V0TW9kZSIsInNldExheW91dE1vZGUiLCJoYW5kbGVMYXlvdXRNb2RlQ2hhbmdlIiwibW9kZSIsImV4cGFuZGVkIiwiaXNGbG9hdGluZyIsImNvbnRlbnRXcmFwcGVyUmVmIiwiX3VzZVN0YXRlMzEiLCJfc2F2ZWRTZXNzaW9uT25Nb3VudFIzIiwiX3NhdmVkU2Vzc2lvbk9uTW91bnRSNCIsImRyYWdQb3NpdGlvbiIsIl91c2VTdGF0ZTMyIiwic2V0RHJhZ1Bvc2l0aW9uIiwiX3VzZUZsb2F0aW5nUGFuZWxEcmFnIiwidGlsdE1vdGlvbiIsInN0YXJ0UG9pbnRlclRyYWNraW5nIiwic2FtcGxlUG9pbnRlck1vdmUiLCJlbmRQb2ludGVyVHJhY2tpbmciLCJkcmFnU3RhdGVSZWYiLCJjbGFtcERyYWdQb3NpdGlvbiIsIngiLCJ5IiwiY29udGVudFdyYXBwZXIiLCJfZ2V0Qm91bmRpbmdDbGllbnRSZWMiLCJnZXRCb3VuZGluZ0NsaWVudFJlY3QiLCJ3aWR0aCIsImhlaWdodCIsImlubmVyV2lkdGgiLCJpbm5lckhlaWdodCIsInByZXYiLCJwYW5lbFdpZHRoIiwicGFkIiwiaGFuZGxlRHJhZ0VuZCIsImV2ZW50IiwiX2RyYWdTdGF0ZVJlZiRjdXJyZW50IiwicG9pbnRlcklkIiwiYm9keSIsInN0eWxlIiwidXNlclNlbGVjdCIsImN1cnNvciIsInJlY3QiLCJsZWZ0IiwidG9wIiwiaGFuZGxlRHJhZ01vdmUiLCJkcmFnU3RhdGUiLCJjbGllbnRYIiwiY2xpZW50WSIsIm5leHRQb3NpdGlvbiIsIm9mZnNldFgiLCJvZmZzZXRZIiwicmVzb2x2ZWREcmFnUG9zaXRpb24iLCJ2aWV3cG9ydFdpZHRoIiwiY2xhbXAiLCJoYW5kbGVEcmFnU3RhcnQiLCJidXR0b24iLCJ0YXJnZXQiLCJpbml0aWFsUG9zaXRpb24iLCJwb2ludGVyT2Zmc2V0WCIsInBvaW50ZXJPZmZzZXRZIiwiY3VycmVudFRhcmdldCIsInNldFBvaW50ZXJDYXB0dXJlIiwicHJldmVudERlZmF1bHQiLCJhaUNoYXREcmFnZ2FibGUiLCJzdGFydENoYXQiLCJmYXFJZCIsImFnZW50U3VnZ2VzdGlvbklkIiwibWVudGlvbnMiLCJmdWFJZCIsInNjSWQiLCJjb250ZXh0RGF0YSIsImNoYXQiLCJiYW5uZXJGYXFBdXRvU2VudFJlZiIsImJhbm5lckZhcSIsImZhcVRpdGxlIiwiYWxyZWFkeVNlbnQiLCJhZ2VudElkIiwicHJvamVjdElkIiwiY2xpZW50SWQiLCJ1bmRlZmluZWQiLCJlbnRpdHkiLCJnb1RvQ2hhdCIsInNlc3Npb25JZCIsInNlc3Npb25FeHRlcm5hbElkIiwic2V0QWN0aXZlQ2hhdElkIiwiZGV0YWlsIiwic2VsZWN0ZWRBZ2VudCIsImhhbmRsZVNpZGViYXJPcGVuQ2hhbmdlIiwib3BlbiIsInN5bmNQYW5lbFNlc3Npb24iLCJfYWdlbnQkaWQiLCJwYXRjaCIsImhvc3RDb250ZXh0IiwiZW5zdXJlQWdlbnRzTG9hZGVkIiwiX2FzeW5jVG9HZW5lcmF0b3IiLCJfcmVnZW5lcmF0b3JSdW50aW1lIiwibWFyayIsIl9jYWxsZWUiLCJjYWNoZWRBZ2VudHMiLCJsb2FkZWRBZ2VudHMiLCJsb2FkZWRGcm9tRmV0Y2giLCJ3cmFwIiwiX2NvbnRleHQiLCJuZXh0IiwiYWJydXB0IiwibGVuZ3RoIiwic2VudCIsInN0b3AiLCJ0aW1lciIsImNsZWFyVGltZW91dCIsIm9uUGFnZUhpZGUiLCJhZGRFdmVudExpc3RlbmVyIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsImhhbmRsZVJlc3RvcmVGcm9tTWluaW1pemVkIiwiX2dldENoYXRzU3RvcmVTdGF0ZSIsImNoYXRzIiwibGFzdEFjdGl2ZUNoYXRJZCIsIl9nb1RvQ2hhdFJlZiRjdXJyZW50IiwiY2FsbCIsIl9nb0hvbWVSZWYkY3VycmVudCIsImFpQ2hhdE9wZW4iLCJvcHRpb24iLCJ0aGVuIiwiYXBwbHlFeHBhbmRlZEhvc3RUYWtlb3ZlciIsImVudGl0eVN0YXRlIiwiZ2V0U3RhdGUiLCJjbGVhckZhcXMiLCJjbGVhckdsb2JhbFBpbm5lZENvbnRleHQiLCJuZXh0TGF5b3V0IiwiZmFxIiwiX2FnZW50JGlkMiIsInJlc29sdmVkQWdlbnRJZCIsImhhbmRsZVNlbmRNZXNzYWdlUmVhZHkiLCJzZW5kTWVzc2FnZSIsInN0b3BHZW5lcmF0aW9uIiwic3RyZWFtaW5nIiwid3JpdGluZyIsImhhbmRsZVNlbmRNZXNzYWdlIiwidHlwZSIsInN0YXJ0TmV3Q2hhdEZyb21DYXRhbG9nIiwiX2NhbGxlZTIiLCJhZ2VudHNMaXN0IiwiZmlyc3RBZ2VudCIsIl90IiwiX2NvbnRleHQyIiwibXlBZ2VudHMiLCJoYW5kbGVTdGFydE5ld0NoYXQiLCJoYW5kbGVSZXNldENoYXQiLCJfY2FsbGVlMyIsIl9jb250ZXh0MyIsImhhbmRsZUJhY2siLCJ0byIsImFpQ2hhdEJhY2siLCJwaW5uZWQiLCJ0YXNrSWQiLCJjaGlwc1Byb2plY3RJZCIsIndhc1Bpbm5lZCIsIm9uTWVyZ2VDcmVhdGVkQWdlbnQiLCJldnQiLCJfcmVmNCIsIm5leHRBZ2VudCIsIm5hdmlnYXRlSG9tZSIsIm9uU3luY0VkaXRlZEFnZW50IiwiX3JlZjUiLCJvcGVuQ2hhdFZpZXciLCJvcGVuSG9tZSIsIm9wZW5Gcm9tSG9zdCIsIl9yZWY2Iiwib3Blbk5ld0NoYXRXaXRoQWdlbnQiLCJfcmVmNyIsImNvbnRleHRQYXRjaCIsInNob3VsZFNldFRhc2siLCJfY29udGV4dFBhdGNoJHRhc2siLCJhcHBseVNraWxsVXNlRmxvdyIsIl9yZWY4IiwiX2NhbGxlZTQiLCJza2lsbCIsInVzZUZpcnN0QWdlbnQiLCJfY29udGV4dDQiLCJfeCIsIl94MiIsImFwcGx5IiwiYXJndW1lbnRzIiwiaGFuZGxlVXNlU2tpbGxBZnRlclNhdmUiLCJfcmVmOSIsIl9yZWY5JHVzZUZpcnN0QWdlbnQiLCJvblNlc3Npb25NZXRhIiwiX3JlZjAiLCJsZWdhY3lDb250ZXh0U2Vzc2lvbiIsImhhbmRsZUNvbnRpbnVlTGVnYWN5Q29udGV4dEluTmV3Q2hhdCIsIl9idWlsZExlZ2FjeUNvbnRleHRNaSIsIm9yY2hlc3RyYXRvciIsImFnZW50RW50aXR5IiwicElkIiwicE5hbWUiLCJwcm9qZWN0TmFtZSIsImNJZCIsImNOYW1lIiwiY2xpZW50TmFtZSIsInRJZCIsInROYW1lIiwidGFza05hbWUiLCJtaWdyYXRpb25QYXRjaCIsIl91c2VNZW1vIiwic2hvd05ld0NoYXQiLCJpc015QWdlbnRzU2VjdGlvbiIsImlzTXlTa2lsbHNTZWN0aW9uIiwiaXNNYWlha2VyQ3JlYXRvckhvbWUiLCJoYXNDaGF0QWNjZXNzIiwibWFpbkNvbnRlbnRWaWV3Iiwic2hvd01vZGFsRm9vdGVyIiwiaG9tZU9wdGlvbiIsImNoYXRPcHRpb24iLCJhZ2VudHNDb3VudCIsImhhc0FjY2VzcyIsInNob3dTaWRlYmFyIiwiaGFzUGlubmVkQ29udGV4dCIsIl9yZXNvbHZlT3JjaGVzdHJhdG9ySCIsImlzQ2hhdFZpZXciLCJpc0hlYWRlckhvbWVTdGVwMiIsImlzU2VjdGlvblJlc2V0SG9tZVN0ZXAyIiwic2hvd0JhY2tCdXR0b24iLCJhZ2VudFR5cGUiLCJoYW5kbGVPcGVuTWFya2V0cGxhY2UiLCJfY2FsbGVlNSIsIl9jb250ZXh0NSIsImhhbmRsZU9wZW5Ta2lsbHMiLCJoYW5kbGVHb1RvTWFpYWtlciIsIl9jYWxsZWU2IiwibWFpYWtlckFnZW50IiwicmVzcG9uc2UiLCJfdDIiLCJfY29udGV4dDYiLCJmaW5kIiwiYSIsInBhdGgiLCJtZXRob2QiLCJqc29uIiwibG9hZEFnZW50c0ZvclNlc3Npb25SZXN0b3JlIiwiX3JlZjExIiwiX2NhbGxlZTciLCJzbmFwc2hvdCIsImFnZW50VG9TZWxlY3QiLCJfdDMiLCJfY29udGV4dDciLCJfeDMiLCJhcHBseVNlc3Npb25SZXN0b3JlIiwiX3JlZjEyIiwiX2NhbGxlZTgiLCJjaGlwc1Byb2plY3RGcm9tU25hcHNob3QiLCJyZXN0b3JlUm91dGUiLCJfc25hcHNob3QkYWN0aXZlQ2hhdEkiLCJfc25hcHNob3QkYWN0aXZlQ2hhdEkyIiwiX2NvbnRleHQ4IiwiX3g0IiwicnVuUmVzdG9yZSIsIl9yZWYxMyIsIl9jYWxsZWU5IiwiX2NvbnRleHQ5IiwiZmluaXNoIiwiaGFuZGxlRGVsZXRlQWdlbnRGcm9tTXlBZ2VudHMiLCJtb2RhbFBhbmVsIiwiY2hpbGRyZW4iLCJvbkdvVG9DaGF0Iiwib25FcnJvciIsImhhbmRsZUdvVG9Ib21lIiwiaGFuZGxlU2V0UmVmZXRjaENoYXRzIiwib25PcGVuTWFpYWtlckNyZWF0b3IiLCJpc0xlZ2FjeUNvbnRleHRTZXNzaW9uIiwiaW5pdGlhbE9wZW4iLCJvbk9wZW5DaGFuZ2UiLCJmbG9hdGluZyIsIm9uTGF5b3V0TW9kZUNoYW5nZSIsImRyYWdnYWJsZSIsIm9uRHJhZ1N0YXJ0Iiwib25EcmFnTW92ZSIsIm9uRHJhZ0VuZCIsImhhc01vcmUiLCJoYXNfbW9yZSIsIm9uQWdlbnRVcGRhdGUiLCJpc01haWFrZXJTZWN0aW9uIiwib25CYWNrIiwiX29iamVjdFNwcmVhZCIsInJlZnMiLCJvblNlbmRNZXNzYWdlUmVhZHkiLCJsb2FkaW5nQWdlbnRzIiwib25EZWxldGVBZ2VudCIsIm9uRmF2b3JpdGVBZ2VudFVwZGF0ZSIsImhhc01vcmVBZ2VudHMiLCJsb2FkaW5nTW9yZUFnZW50cyIsIm9uTG9hZE1vcmVBZ2VudHMiLCJvbkdvVG9NYWlha2VyIiwib25EZWxldGVTa2lsbCIsIm9uU2VhcmNoQWdlbnRzIiwic2VhcmNoTG9hZGluZ0FnZW50cyIsIm9uUmVzdGFydFN1bW1hcnkiLCJoYW5kbGVTdG9wR2VuZXJhdGlvbiIsImNoYXRJZCIsIm9uQ29udGludWVJbk5ld0NoYXQiLCJyZWYiLCJjcmVhdGVQb3J0YWwiLCJlbGV2YXRlZCIsIiRtaW5pbWl6ZWQiLCIkaGlkZGVuIiwidGlsdCIsInNob3dOb3ZlbHR5RG90Iiwib25SZXN0b3JlIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvbW9sZWN1bGVzL0NoYXRBSU1vZGFsL0NoYXRBSU1vZGFsLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBuby1uZXN0ZWQtdGVybmFyeSAqL1xuLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L2luZGVudCAqL1xuLyogZXNsaW50LWRpc2FibGUgcmVhY3QvanN4LW5vLXVzZWxlc3MtZnJhZ21lbnQgKi9cbi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkgKi9cbi8qIGVzbGludC1kaXNhYmxlIHJlYWN0L25vLWFycmF5LWluZGV4LWtleSAqL1xuLyogZXNsaW50LWRpc2FibGUganN4LWExMXkvY2xpY2stZXZlbnRzLWhhdmUta2V5LWV2ZW50cyAqL1xuLyogZXNsaW50LWRpc2FibGUganN4LWExMXkvbm8tc3RhdGljLWVsZW1lbnQtaW50ZXJhY3Rpb25zICovXG4vKiBlc2xpbnQtZGlzYWJsZSByZWFjdC9mdW5jdGlvbi1jb21wb25lbnQtZGVmaW5pdGlvbiAqL1xuLyogZXNsaW50LWRpc2FibGUgcmVhY3QvcmVxdWlyZS1kZWZhdWx0LXByb3BzICovXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1jb25zb2xlICovXG5pbXBvcnQge1xuICB1c2VDYWxsYmFjayxcbiAgdXNlTWVtbyxcbiAgdXNlU3RhdGUsXG4gIHVzZVJlZixcbiAgdXNlRWZmZWN0LFxuICB1c2VMYXlvdXRFZmZlY3QsXG4gIFBvaW50ZXJFdmVudCBhcyBSZWFjdFBvaW50ZXJFdmVudCxcbn0gZnJvbSAncmVhY3QnXG5pbXBvcnQgUmVhY3RET00gZnJvbSAncmVhY3QtZG9tJ1xuaW1wb3J0IG1vbWVudCBmcm9tICdtb21lbnQnXG5pbXBvcnQgeyB1c2VUcmFuc2xhdGlvbiB9IGZyb20gJ3JlYWN0LWkxOG5leHQnXG5pbXBvcnQgeyB1c2VVc2VyIH0gZnJvbSAnLi4vLi4vLi4vY29udGV4dC9jb3ItdXNlcidcbmltcG9ydCB7IGNhbkFjY2Vzc1RvU2tpbGxzIH0gZnJvbSAnLi4vLi4vLi4vY29uc3RhbnRzL3Blcm1pc3Npb25zJ1xuaW1wb3J0IHsgTUFJQUVycm9yIH0gZnJvbSAnLi4vLi4vYXRvbXMvTUFJQUVycm9yJ1xuaW1wb3J0IHsgdXNlTWFpYVRhc2tQYW5lbFpJbmRleCB9IGZyb20gJy4uLy4uLy4uL2hvb2tzL3VzZU1haWFUYXNrUGFuZWxaSW5kZXgnXG5cbmltcG9ydCB7IENoYXRBSUNvbnRlbnQgfSBmcm9tICcuLi9DaGF0QUlDb250ZW50J1xuaW1wb3J0IHsgYnVpbGRIYW5kbGVycywgb3B0aW9ucyB9IGZyb20gJy4vY29uc3RhbnRzJ1xuaW1wb3J0IHsgU2lkZWJhciB9IGZyb20gJy4uL1NpZGViYXInXG5pbXBvcnQgeyB1c2VHZXRBZ2VudHMgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9tYWlhL0FnZW50cy9nZXRBZ2VudHMnXG5pbXBvcnQgeyB1c2VHZXRTa2lsbHMgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9tYWlhL1NraWxscy9nZXRTa2lsbHMnXG5pbXBvcnQgeyB1c2VHbG9iYWxDb250ZXh0LCB0eXBlIFNlY3Rpb24gfSBmcm9tICcuLi8uLi8uLi9jb250ZXh0L2dsb2JhbC1jb250ZXh0J1xuaW1wb3J0IHsgQXR0YWNobWVudEZpbGUgfSBmcm9tICcuLi9DaGF0Rm9vdGVyL0NoYXRGb290ZXInXG5pbXBvcnQgeyBDb250ZXh0TWVudGlvbiB9IGZyb20gJy4uLy4uLy4uL3R5cGVzL2NvbnRleHRNZW50aW9uJ1xuaW1wb3J0IHsgQ2hhdEFJTW9kYWxIZWFkZXIgfSBmcm9tICcuL2NvbXBvbmVudHMvQ2hhdEFpTW9kYWxIZWFkZXIvQ2hhdEFpTW9kYWxIZWFkZXInXG5pbXBvcnQgeyBTbmFja2JhciB9IGZyb20gJy4uLy4uL29yZ2FuaXNtcy9TbmFja0Jhci9TbmFja2JhcidcbmltcG9ydCB7IFByb2plY3RTdW1tYXJ5Q29udGVudCB9IGZyb20gJy4uL1Byb2plY3RTdW1tYXJ5Q29udGVudCdcbmltcG9ydCB7IEFibUFnZW50TW9kYWwgfSBmcm9tICcuLi8uLi9vcmdhbmlzbXMvQWJtQWdlbnRNb2RhbC9BYm1BZ2VudE1vZGFsJ1xuaW1wb3J0IHsgQWJtU2tpbGxNb2RhbCwgU0tJTExfVVNFX0FGVEVSX1NBVkVfRVZFTlQgfSBmcm9tICcuLi8uLi9vcmdhbmlzbXMvQWJtU2tpbGxNb2RhbC9BYm1Ta2lsbE1vZGFsJ1xuaW1wb3J0IHsgQWJtU2tpbGxHZW5lcmF0ZU1vZGFsIH0gZnJvbSAnLi4vLi4vb3JnYW5pc21zL0FibVNraWxsR2VuZXJhdGVNb2RhbC9BYm1Ta2lsbEdlbmVyYXRlTW9kYWwnXG5pbXBvcnQgeyBTRUNUSU9OUyB9IGZyb20gJy4uLy4uLy4uL2NvbnN0YW50cy9jb25maWcnXG5pbXBvcnQgeyBTQ0NBSU1Db250ZW50LCBTQ0NBSU1Db250ZW50V3JhcHBlciwgU0NDQUlNTWluaW1pemVkSGlkZSwgU0NDQUlNV3JhcHBlciB9IGZyb20gJy4vQ2hhdEFJTW9kYWwuc3R5bGVzJ1xuaW1wb3J0IHsgTWFpYU1pbmltaXplZFBpbGwgfSBmcm9tICcuL2NvbXBvbmVudHMvTWFpYU1pbmltaXplZFBpbGwnXG5pbXBvcnQgeyB1c2VNaW5pbWl6ZWRQaWxsTm92ZWx0eURvdCB9IGZyb20gJy4uLy4uLy4uL2hvb2tzL3VzZU1pbmltaXplZFBpbGxOb3ZlbHR5RG90J1xuaW1wb3J0IHtcbiAgZ2V0TWFpYUZsb2F0aW5nUGFuZWxXaWR0aFB4LFxuICBNYWlhQ2hhdE1vZGFsTGF5b3V0TW9kZSxcbiAgcmVzb2x2ZUluaXRpYWxNYWlhQ2hhdExheW91dE1vZGUsXG4gIHNldFN0b3JlZE1haWFDaGF0TGF5b3V0TW9kZSxcbn0gZnJvbSAnLi9sYXlvdXQnXG5pbXBvcnQgeyBGbG9hdGluZ1BhbmVsTW90aW9uLCB1c2VGbG9hdGluZ1BhbmVsRHJhZ1RpbHQgfSBmcm9tICcuL2Zsb2F0aW5nUGFuZWxNb3Rpb24nXG5pbXBvcnQgeyBDaGF0QWlNb2RhbEZvb3RlciB9IGZyb20gJy4vY29tcG9uZW50cy9DaGF0QWlNb2RhbEZvb3RlcidcbmltcG9ydCB7IGlzTWFya2V0cGxhY2VHbG9iYWxDbG9uZUFnZW50IH0gZnJvbSAnLi4vLi4vLi4vdXRpbHMvYWdlbnREaXNwbGF5TmFtZSdcbmltcG9ydCB7IEFnZW50IH0gZnJvbSAnLi4vLi4vLi4vdHlwZXMvYWdlbnQnXG5pbXBvcnQgeyBTa2lsbCB9IGZyb20gJy4uLy4uLy4uL3R5cGVzL3NraWxsJ1xuaW1wb3J0IHsgUHJvamVjdCB9IGZyb20gJy4uLy4uLy4uL3R5cGVzL1Byb2plY3QnXG5pbXBvcnQgeyBDbGllbnQgfSBmcm9tICcuLi8uLi8uLi90eXBlcy9DbGllbnQnXG5pbXBvcnQgeyBUYXNrIH0gZnJvbSAnLi4vLi4vLi4vdHlwZXMvVGFzaydcbmltcG9ydCB7IHVzZUZhcXNTdG9yZSB9IGZyb20gJy4uLy4uLy4uL3N0b3JlL3VzZUZhcXNTdG9yZSdcbmltcG9ydCB7IGdldENoYXRzU3RvcmVTdGF0ZSwgdXNlQ2hhdHNTdG9yZSB9IGZyb20gJy4uLy4uLy4uL3N0b3JlL3VzZUNoYXRzU3RvcmUnXG5pbXBvcnQgdHlwZSB7IENoYXRMaXN0SXRlbSB9IGZyb20gJy4uLy4uLy4uL3N0b3JlL2NoYXRzU3RvcmUudHlwZXMnXG5pbXBvcnQgeyByZWFkTGFzdEFjdGl2ZUNoYXRJZCwgd3JpdGVMYXN0QWN0aXZlQ2hhdElkIH0gZnJvbSAnLi4vLi4vLi4vc3RvcmUvbWFpYUxhc3RDaGF0UGVyc2lzdGVuY2UnXG5pbXBvcnQge1xuICBjbGVhck1haWFQYW5lbFNlc3Npb24sXG4gIHBhdGNoTWFpYVBhbmVsU2Vzc2lvbixcbiAgcmVhZE1haWFQYW5lbFNlc3Npb24sXG4gIHR5cGUgTWFpYVBhbmVsU2Vzc2lvblNuYXBzaG90LFxuICB3cml0ZU1haWFQYW5lbFNlc3Npb24sXG59IGZyb20gJy4uLy4uLy4uL3N0b3JlL21haWFQYW5lbFNlc3Npb25QZXJzaXN0ZW5jZSdcbmltcG9ydCB7IHVzZVNlc3Npb25zU3RvcmUgfSBmcm9tICcuLi8uLi8uLi9zdG9yZS9zZXNzaW9ucy91c2VTZXNzaW9uc1N0b3JlJ1xuaW1wb3J0IHsgZmV0Y2hNYWlhIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvbWFpYS9jbGllbnQnXG5pbXBvcnQgeyBmZXRjaEFnZW50RGV0YWlsIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvbWFpYS9BZ2VudHMvZmV0Y2hBZ2VudERldGFpbCdcbmltcG9ydCB7IG1hcENPUkxhbmcgfSBmcm9tICcuLi8uLi8uLi9sYW5nL3V0aWxzJ1xuaW1wb3J0IHsgRVZFTlRTLCB1c2VFdmVudCB9IGZyb20gJy4uLy4uLy4uL2hvb2tzL3VzZUV2ZW50J1xuaW1wb3J0IHsgTUFJQV9PUEVOX0ZST01fSE9TVF9FVkVOVCwgdHlwZSBNYWlhSG9zdE9wZW5EZXRhaWwgfSBmcm9tICcuLi8uLi8uLi91dGlscy9tYWlhSG9zdE9wZW4nXG5pbXBvcnQgeyB1c2VJc01haWFQYWdlUm91dGUgfSBmcm9tICcuLi8uLi8uLi9ob29rcy91c2VJc01haWFQYWdlUm91dGUnXG5pbXBvcnQge1xuICBjbGFtcEZsb2F0aW5nUGFuZWxQb3NpdGlvbixcbiAgaGFzQW55QWN0aXZlU2Vzc2lvbkluTWV0YSxcbiAgaGFzQmFubmVyRmFxVGl0bGUsXG4gIGlzQmFubmVyRmFxUmVhZHlUb0F1dG9TZW5kLFxuICByZXNvbHZlQWlDaGF0QmFja0Rlc3RpbmF0aW9uLFxuICByZXNvbHZlQ29tcHV0ZWRDdXJyZW50T3B0aW9uLFxuICByZXNvbHZlSW5pdGlhbEN1cnJlbnRPcHRpb24sXG4gIHJlc29sdmVMZWdhY3lDb250ZXh0U2Vzc2lvbixcbiAgcmVzb2x2ZVNpZGViYXJBZ2VudHNOYXZBY3RpdmUsXG4gIHNob3VsZFJlc3RvcmVFeHBhbmRlZFBhbmVsLFxuICBzaG91bGRTa2lwRmxvYXRpbmdEcmFnVGFyZ2V0LFxuICB2YWxpZGF0ZUFjY2Vzc0J5RmVhdHVyZSxcbiAgcmVzb2x2ZUhvc3RUYWtlb3ZlckVudGl0eVN0YXRlLFxuICBidWlsZEhvc3RUYWtlb3ZlclBlcnNpc3RDb250ZXh0LFxuICBidWlsZE1haWFQYW5lbFNlc3Npb25QYXRjaCxcbiAgZGlzcGF0Y2hTa2lsbE1lbnRpb25JbnNlcnQsXG4gIGVuc3VyZUFnZW50c0JlZm9yZVNraWxsVXNlLFxuICByZXNvbHZlRmxvYXRpbmdQYW5lbERyYWdQb3NpdGlvbixcbiAgcmVzb2x2ZUhvc3RUYWtlb3ZlckFnZW50SWQsXG4gIHJlc29sdmVNYWlhTW9kYWxJMThuTGFuZyxcbiAgcmVzb2x2ZU1pbmltaXplZFJlc3RvcmVUYXJnZXQsXG4gIHJlc29sdmVOZXh0RHJhZ1Bvc2l0aW9uLFxuICByZXNvbHZlVXNlckhhc0FnZW50TWFuYWdlbWVudFBlcm1pc3Npb25zLFxuICBzaG91bGRCYWNrQ2xlYXJQaW5uZWRDb250ZXh0LFxuICBzaG91bGRCYWNrU3RhcnROZXdDaGF0UHJlc2VydmluZ0NvbnRleHQsXG4gIHNob3VsZE1hcmtPcmNoZXN0cmF0b3JDb250ZXh0UmVzZXQsXG4gIHNob3VsZFN0YXJ0TmV3Q2hhdEZyb21DYXRhbG9nLFxuICByZXNvbHZlSGFzUGlubmVkQ29udGV4dCxcbiAgcmVzb2x2ZU9yY2hlc3RyYXRvckhvbWVOYXZGbGFncyxcbiAgc2hvdWxkU2hvd09yY2hlc3RyYXRvckJhY2tCdXR0b24sXG4gIHNob3VsZENsZWFyQ2xpZW50T25Hb0hvbWVGcm9tQ2hhdCxcbiAgc2hvdWxkQ2xlYXJUYXNrT25Hb0hvbWVGcm9tQ2hhdCxcbiAgc2hvdWxkUmVzZXRBZ2VudFRvRmlyc3RPbkdvSG9tZSxcbiAgc2hvdWxkQ2xlYXJPcmNoZXN0cmF0b3JHbG9iYWxDb250ZXh0T25Hb0hvbWUsXG4gIHNob3VsZFVzZUFjdGl2ZUNoYXRTZW5kSGFuZGxlcixcbiAgc2hvdWxkUHJlZmV0Y2hBZ2VudHNGb3JDYXRhbG9nTmV3Q2hhdCxcbiAgY2FuT3Blbk1haWFNYXJrZXRwbGFjZSxcbiAgc2hvdWxkTWFya0FnZW50QXNMZWdhY3lDb250ZXh0LFxuICBidWlsZExlZ2FjeUNvbnRleHRBZ2VudCxcbiAgYnVpbGRMZWdhY3lDb250ZXh0TWlncmF0aW9uUGF0Y2gsXG4gIGZpbmRPcmNoZXN0cmF0b3JBZ2VudCxcbiAgc2hvdWxkU2V0Q2hhdFZpZXdIaWRkZW5Pbk1vdW50LFxuICBzaG91bGRQZXJzaXN0TGFzdEFjdGl2ZUNoYXRJZCxcbiAgc2hvdWxkU3luY1BhbmVsU2Vzc2lvbk9uUGFnZUhpZGUsXG4gIHJlc29sdmVDYWNoZWRBZ2VudHNJZkF2YWlsYWJsZSxcbiAgc2hvdWxkQXR0ZW1wdEluaXRpYWxBZ2VudHNGZXRjaCxcbiAgZmluZEFnZW50Rm9yQ2hhdEl0ZW0sXG4gIHNob3VsZEFwcGx5Q2xpZW50T25Ib3N0VGFrZW92ZXIsXG4gIHNob3VsZFNlbGVjdEZpcnN0QWdlbnRPbkhvc3RUYWtlb3ZlcixcbiAgc2hvdWxkUmVzZXRDaGF0U3RhdGVPbkdvSG9tZSxcbiAgc2hvdWxkQ2xlYXJDb250ZXh0Rm9yQ2F0YWxvZ09yU2tpbGxBZ2VudCxcbiAgcmVzb2x2ZU9wZW5OZXdDaGF0V2l0aEFnZW50Q29udGV4dCxcbiAgY2FuQ29udGludWVMZWdhY3lDb250ZXh0SW5OZXdDaGF0LFxuICByZXNvbHZlU2Vzc2lvblJlc3RvcmVOYXZSb3V0ZSxcbiAgc2hvdWxkU2tpcEFnZW50c0xvYWRPblNlc3Npb25SZXN0b3JlLFxuICBzaG91bGRGZXRjaEFnZW50RGV0YWlsT25TZXNzaW9uUmVzdG9yZSxcbiAgc2hvdWxkUGFzc0FnZW50VG9HZXRBZ2VudHNPblJlc3RvcmUsXG4gIHNob3VsZFNlbGVjdEZldGNoZWRBZ2VudEFmdGVyUmVzdG9yZSxcbiAgcmVzb2x2ZVNuYXBzaG90Q2hpcHNQcm9qZWN0LFxuICByZXNvbHZlQ2hhdE1vZGFsU2VjdGlvbkZsYWdzLFxuICBzaG91bGRSZW5kZXJDaGF0U2lkZWJhcixcbiAgcmVzb2x2ZUNoYXRNb2RhbE1haW5Db250ZW50VmlldyxcbiAgc2hvdWxkU2hvd0NoYXRNb2RhbEZvb3RlcixcbiAgc2hvdWxkVXNlRWxldmF0ZWRNYWlhUGFuZWwsXG4gIHNob3VsZFJlc2VsZWN0QWdlbnRBZnRlckRlbGV0ZSxcbiAgc2hvdWxkQ2xlYXJEcmFnUG9zaXRpb25PbkxheW91dENoYW5nZSxcbiAgc2hvdWxkU3RhcnRGbG9hdGluZ1BhbmVsRHJhZyxcbiAgaXNBY3RpdmVGbG9hdGluZ0RyYWdQb2ludGVyLFxuICBzaG91bGRPcGVuU2tpbGxzQ2F0YWxvZyxcbiAgc2hvdWxkVXNlRHJhZ0NsYW1wRmFsbGJhY2ssXG4gIHJlc29sdmVMYXlvdXREcmFnUG9zaXRpb25VcGRhdGUsXG4gIHJlc29sdmVQZXJzaXN0ZWREcmFnUG9zaXRpb25PbkVuZCxcbiAgYnVpbGRVc2VySW5pdGlhbE1lc3NhZ2VGcm9tU3RhcnRDaGF0LFxuICBzaG91bGRSZXNldFNpZGViYXJFcnJvck9uU3RhcnRDaGF0LFxuICBnZXRNYWlhSG9zdFBhbmVsUHJlc2VudGF0aW9uLFxuICB0eXBlIExlZ2FjeVNlc3Npb25NZXRhLFxufSBmcm9tICcuL0NoYXRBSU1vZGFsLmhlbHBlcnMnXG5cbi8qKiBNZXRhZGF0YSBkZSBsYSBzZXNzaW9uIGFiaWVydGEgKGVtaXRpZGEgcG9yIHVzZUNoYXRNZXNzYWdlcyBhbCBjYXJnYXIgdW5hIGNvbnZlcnNhY2nDs24pLiAqL1xudHlwZSBTZXNzaW9uTWV0YSA9IExlZ2FjeVNlc3Npb25NZXRhICYge1xuICBjaGF0SWQ6IHN0cmluZ1xuICBwcm9qZWN0SWQ/OiBudW1iZXJcbiAgY2xpZW50SWQ/OiBudW1iZXJcbiAgdGFza0lkPzogbnVtYmVyXG59XG5cbmV4cG9ydCBjb25zdCBJRF9NT0RBTF9DSEFUX0FHRU5UID0gJ21vZGFscy1wb3J0YWwtbWFpYS1jaGF0LWFnZW50J1xuXG5leHBvcnQgY29uc3QgQ2hhdEFJTW9kYWwgPSAoKSA9PiB7XG4gIGNvbnN0IHVzZXIgPSB1c2VVc2VyKClcbiAgY29uc3QgeyBpMThuIH0gPSB1c2VUcmFuc2xhdGlvbihbU0VDVElPTlMuYWJtQWdlbnRdKVxuICBjb25zdCBhbXBsaXR1ZEV2ZW50ID0gdXNlRXZlbnQoKVxuXG4gIGNvbnN0IHNhdmVkU2Vzc2lvbk9uTW91bnRSZWYgPSB1c2VSZWY8TWFpYVBhbmVsU2Vzc2lvblNuYXBzaG90IHwgbnVsbD4ocmVhZE1haWFQYW5lbFNlc3Npb24odXNlci5pZCkpXG4gIGNvbnN0IHNob3VsZFJlc3RvcmVFeHBhbmRlZCA9IHNob3VsZFJlc3RvcmVFeHBhbmRlZFBhbmVsKHNhdmVkU2Vzc2lvbk9uTW91bnRSZWYuY3VycmVudClcbiAgY29uc3QgcGVuZGluZ1Nlc3Npb25SZXN0b3JlUmVmID0gdXNlUmVmPE1haWFQYW5lbFNlc3Npb25TbmFwc2hvdCB8IG51bGw+KFxuICAgIHNob3VsZFJlc3RvcmVFeHBhbmRlZCA/IHNhdmVkU2Vzc2lvbk9uTW91bnRSZWYuY3VycmVudCA6IG51bGxcbiAgKVxuICBjb25zdCBzZXNzaW9uUmVzdG9yZVN0YXJ0ZWRSZWYgPSB1c2VSZWYoZmFsc2UpXG4gIGNvbnN0IFtpc1Jlc3RvcmluZ1Nlc3Npb24sIHNldElzUmVzdG9yaW5nU2Vzc2lvbl0gPSB1c2VTdGF0ZSgoKSA9PiBwZW5kaW5nU2Vzc2lvblJlc3RvcmVSZWYuY3VycmVudCAhPSBudWxsKVxuICBjb25zdCBzaWRlYmFyT3BlblJlZiA9IHVzZVJlZihzYXZlZFNlc3Npb25Pbk1vdW50UmVmLmN1cnJlbnQ/LnNpZGViYXJPcGVuID8/IGZhbHNlKVxuXG4gIC8vIFRyYXMgbmF2ZWdhciBlbiBlbCBob3N0IChmdWxsIHBhZ2UgcmVsb2FkKSwgcmVzdGF1cmFtb3MgZWwgcGFuZWwgc2kgZXN0YWJhIGFiaWVydG8uXG4gIGNvbnN0IFtpc01pbmltaXplZCwgc2V0SXNNaW5pbWl6ZWRdID0gdXNlU3RhdGUoKCkgPT4gIXNob3VsZFJlc3RvcmVFeHBhbmRlZClcbiAgY29uc3QgaXNNYWlhUGFnZVJvdXRlID0gdXNlSXNNYWlhUGFnZVJvdXRlKClcbiAgY29uc3QgeyBoaWRlUGFuZWxDb250ZW50LCBzaG93TWluaW1pemVkUGlsbCB9ID0gZ2V0TWFpYUhvc3RQYW5lbFByZXNlbnRhdGlvbihpc01pbmltaXplZCwgaXNNYWlhUGFnZVJvdXRlKVxuICBjb25zdCBpbml0aWFsQ2hhdHNSZWZldGNoRG9uZVJlZiA9IHVzZVJlZihmYWxzZSlcbiAgY29uc3Qgc2V0Q2hhdFZpZXdWaXNpYmxlID0gdXNlQ2hhdHNTdG9yZShzdGF0ZSA9PiBzdGF0ZS5zZXRDaGF0Vmlld1Zpc2libGUpXG4gIGNvbnN0IHVucmVhZENvdW50ID0gdXNlQ2hhdHNTdG9yZShzdGF0ZSA9PiBzdGF0ZS51bnJlYWRDb3VudClcbiAgY29uc3Qgc2hvd01pbmltaXplZE5vdmVsdHlEb3QgPSB1c2VNaW5pbWl6ZWRQaWxsTm92ZWx0eURvdChpc01pbmltaXplZCwgdW5yZWFkQ291bnQpXG4gIGNvbnN0IGFjdGl2ZUNoYXRJZCA9IHVzZUNoYXRzU3RvcmUoc3RhdGUgPT4gc3RhdGUuYWN0aXZlQ2hhdElkKVxuICAvLyBMb3MgXCIuLi5cIiBkZWwgcGlsbCBzYWxlbiBkZWwgbW90b3IsIG5vIGRlIGlzU3RyZWFtaW5nL2lzV3JpdGluZzogZXNvcyByZWZsZWphblxuICAvLyBsYSBzZXNpw7NuIGFjdGl2YSB5IHF1ZWRhbiBzdGFsZSBjdWFuZG8gdW5hIHJlc3B1ZXN0YSB0ZXJtaW5hIGVuIGJhY2tncm91bmQuXG4gIGNvbnN0IGhhc0FjdGl2ZVN0cmVhbSA9IHVzZVNlc3Npb25zU3RvcmUoc3RhdGUgPT4gaGFzQW55QWN0aXZlU2Vzc2lvbkluTWV0YShzdGF0ZS5tZXRhKSlcblxuICAvKiogZ29Ub0NoYXQgLyBoYW5kbGVHb0hvbWUgc2UgZGVmaW5lbiBtw6FzIGFiYWpvOyBsb3MgcmVmcyBldml0YW4gZGVwZW5kZXIgZGVsIG9yZGVuIGRlIGRlY2xhcmFjacOzbi4gKi9cbiAgY29uc3QgZ29Ub0NoYXRSZWYgPSB1c2VSZWY8KChjaGF0OiBDaGF0TGlzdEl0ZW0pID0+IHZvaWQpIHwgbnVsbD4obnVsbClcbiAgY29uc3QgZ29Ib21lUmVmID0gdXNlUmVmPCgoKSA9PiB2b2lkKSB8IG51bGw+KG51bGwpXG5cbiAgLy8gTW9udGEgY2VycmFkYSBzYWx2byByZXN0YXVyYWNpw7NuIGRlIHNlc2nDs246IHNpIGVsIHBhbmVsIG5vIGVzdMOhIHZpc2libGUsIGxhcyByZXNwdWVzdGFzXG4gIC8vIG51ZXZhcyBxdWVkYW4gY29tbyBubyBsZcOtZGFzLlxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChzaG91bGRTZXRDaGF0Vmlld0hpZGRlbk9uTW91bnQocGVuZGluZ1Nlc3Npb25SZXN0b3JlUmVmLmN1cnJlbnQgIT0gbnVsbCkpIHtcbiAgICAgIHNldENoYXRWaWV3VmlzaWJsZShmYWxzZSlcbiAgICB9XG4gIH0sIFtzZXRDaGF0Vmlld1Zpc2libGVdKVxuXG4gIC8vIEVuIC9tYWlhIGVsIGNoYXQgZnVsbHNjcmVlbiBkZWwgc2lkZWJhciByZWVtcGxhemEgYWwgcGFuZWwgZmxvdGFudGU7IG5vIG1pbmltaXphbW9zXG4gIC8vIHBhcmEgcG9kZXIgcmVzdGF1cmFyIGxhIG1pc21hIHZpc3RhIGFsIHZvbHZlciBhIG90cmEgc2VjY2nDs24gZGUgQ09SLlxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChpc01haWFQYWdlUm91dGUpIHtcbiAgICAgIHNldENoYXRWaWV3VmlzaWJsZShmYWxzZSlcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBpZiAoIWlzTWluaW1pemVkKSB7XG4gICAgICBzZXRDaGF0Vmlld1Zpc2libGUodHJ1ZSlcbiAgICB9XG4gIH0sIFtpc01haWFQYWdlUm91dGUsIGlzTWluaW1pemVkLCBzZXRDaGF0Vmlld1Zpc2libGVdKVxuXG4gIC8vIFBlcnNpc3RpbW9zIGxhIGNvbnZlcnNhY2nDs24gYWJpZXJ0YSBwYXJhIHBvZGVyIHZvbHZlciBhIGVsbGEgZGVzZGUgZWwgcGlsbCBkZXNwdcOpc1xuICAvLyBkZSBuYXZlZ2FyIG8gcmVmcmVzY2FyLiBFbCB0YWtlb3ZlciBkZXNkZSB1biBob3N0IGxhIGxpbXBpYSAodmEgYWwgSG9tZSkuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKHNob3VsZFBlcnNpc3RMYXN0QWN0aXZlQ2hhdElkKGFjdGl2ZUNoYXRJZCkpIHtcbiAgICAgIHdyaXRlTGFzdEFjdGl2ZUNoYXRJZCh1c2VyLmlkLCBhY3RpdmVDaGF0SWQpXG4gICAgfVxuICB9LCBbYWN0aXZlQ2hhdElkLCB1c2VyLmlkXSlcblxuICBjb25zdCBoYW5kbGVNaW5pbWl6ZSA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBhbXBsaXR1ZEV2ZW50KEVWRU5UUy5haUNoYXRNaW5pbWl6ZSlcbiAgICBzZXRJc01pbmltaXplZCh0cnVlKVxuICAgIHNldENoYXRWaWV3VmlzaWJsZShmYWxzZSlcbiAgICB3cml0ZU1haWFQYW5lbFNlc3Npb24odXNlci5pZCwgeyBpc0V4cGFuZGVkOiBmYWxzZSB9KVxuICB9LCBbYW1wbGl0dWRFdmVudCwgc2V0Q2hhdFZpZXdWaXNpYmxlLCB1c2VyLmlkXSlcblxuICBjb25zdCBmb2N1c0NoYXRJbnB1dCA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBkb2N1bWVudC5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgnbWFpYS1pbnB1dC1yZWZvY3VzJykpXG4gICAgfSwgMTAwKVxuICB9LCBbXSlcblxuICBjb25zdCBbdXNlckluaXRpYWxNZXNzYWdlLCBzZXRVc2VySW5pdGlhbE1lc3NhZ2VdID0gdXNlU3RhdGU8e1xuICAgIG1lc3NhZ2U6IHN0cmluZ1xuICAgIGF0dGFjaG1lbnRzOiBBdHRhY2htZW50RmlsZVtdXG4gICAgZmFxSWQ/OiBzdHJpbmdcbiAgICBhZ2VudFN1Z2dlc3Rpb25JZD86IHN0cmluZ1xuICAgIG1lbnRpb25zPzogQ29udGV4dE1lbnRpb25bXVxuICAgIGZ1YUlkPzogc3RyaW5nXG4gICAgc2NJZD86IHN0cmluZ1xuICAgIGNvbnRleHREYXRhPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj5cbiAgfT4oe1xuICAgIG1lc3NhZ2U6ICcnLFxuICAgIGF0dGFjaG1lbnRzOiBbXSxcbiAgfSlcbiAgY29uc3QgW2luaXRpYWxDaGF0SWQsIHNldEluaXRpYWxDaGF0SWRdID0gdXNlU3RhdGU8c3RyaW5nIHwgbnVsbD4obnVsbClcbiAgY29uc3QgW25ld0NoYXRLZXksIHNldE5ld0NoYXRLZXldID0gdXNlU3RhdGUoMClcbiAgY29uc3QgW3Nlc3Npb25NZXRhLCBzZXRTZXNzaW9uTWV0YV0gPSB1c2VTdGF0ZTxTZXNzaW9uTWV0YSB8IG51bGw+KG51bGwpXG4gIGNvbnN0IFtzZW5kTWVzc2FnZUZ1bmN0aW9uLCBzZXRTZW5kTWVzc2FnZUZ1bmN0aW9uXSA9IHVzZVN0YXRlPFxuICAgIHwgKChcbiAgICAgICAgbWVzc2FnZTogc3RyaW5nLFxuICAgICAgICBhdHRhY2htZW50cz86IEF0dGFjaG1lbnRGaWxlW10sXG4gICAgICAgIGZhcUlkPzogc3RyaW5nLFxuICAgICAgICBhZ2VudFN1Z2dlc3Rpb25JZD86IHN0cmluZyxcbiAgICAgICAgbWVudGlvbnM/OiBDb250ZXh0TWVudGlvbltdLFxuICAgICAgICBmdWFJZD86IHN0cmluZyxcbiAgICAgICAgc2NJZD86IHN0cmluZyxcbiAgICAgICAgY29udGV4dERhdGE/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxuICAgICAgKSA9PiB2b2lkKVxuICAgIHwgbnVsbFxuICA+KG51bGwpXG4gIGNvbnN0IFtzdG9wR2VuZXJhdGlvbkZ1bmN0aW9uLCBzZXRTdG9wR2VuZXJhdGlvbkZ1bmN0aW9uXSA9IHVzZVN0YXRlPCgoKSA9PiB2b2lkKSB8IG51bGw+KG51bGwpXG4gIGNvbnN0IFtpc1N0cmVhbWluZywgc2V0SXNTdHJlYW1pbmddID0gdXNlU3RhdGUoZmFsc2UpXG4gIGNvbnN0IFtpc1dyaXRpbmcsIHNldElzV3JpdGluZ10gPSB1c2VTdGF0ZShmYWxzZSlcblxuICBjb25zdCBbcmVmZXRjaENoYXRzLCBzZXRSZWZldGNoQ2hhdHNdID0gdXNlU3RhdGUoZmFsc2UpXG4gIGNvbnN0IFtjdXJyZW50T3B0aW9uLCBzZXRDdXJyZW50T3B0aW9uXSA9IHVzZVN0YXRlPG9wdGlvbnM+KCgpID0+IHtcbiAgICBjb25zdCBzYXZlZCA9IHNhdmVkU2Vzc2lvbk9uTW91bnRSZWYuY3VycmVudFxuICAgIHJldHVybiByZXNvbHZlSW5pdGlhbEN1cnJlbnRPcHRpb24oc2F2ZWQ/LmFnZW50c05hdkFjdGl2ZSwgc2F2ZWQ/LmN1cnJlbnRPcHRpb24sIHVzZXIpXG4gIH0pXG4gIGNvbnN0IFtoYXNFcnJvciwgc2V0SGFzRXJyb3JdID0gdXNlU3RhdGUoZmFsc2UpXG4gIC8vIEVuIHByb2plY3QvY2xpZW50L3Rhc2s6IGVsIHVzdWFyaW8gcmVpbmljacOzIGVsIGNvbnRleHRvIGRlbCBvcmNoZXN0cmF0b3IgKGxvIGxpbXBpw7MgeSBwYXPDsyBwb3JcbiAgLy8gZWwgc2VsZWN0b3IgZGUgY29udGV4dG9zIHJlY2llbnRlcykuIEhhYmlsaXRhIGVsIGJvdMOzbiBcInZvbHZlclwiIGVuIGVsIGhvbWUgcGFzbyAyIGRlIGVzYXNcbiAgLy8gc2VjY2lvbmVzLiBTZSByZXNldGVhIGFsIGNlcnJhci9yZWFicmlyIGVsIG1vZGFsIChlbCBjb21wb25lbnRlIHNlIGRlc21vbnRhKS5cbiAgY29uc3QgW2RpZFJlc2V0Q29udGV4dEluU2VjdGlvbiwgc2V0RGlkUmVzZXRDb250ZXh0SW5TZWN0aW9uXSA9IHVzZVN0YXRlKGZhbHNlKVxuICBjb25zdCBwcmV2SGFzUGlubmVkQ29udGV4dFJlZiA9IHVzZVJlZihmYWxzZSlcbiAgY29uc3QgaGFuZGxlcnMgPSB1c2VNZW1vKCgpID0+IGJ1aWxkSGFuZGxlcnMoc2V0Q3VycmVudE9wdGlvbiwgc2V0SGFzRXJyb3IpLCBbXSlcbiAgY29uc3QgW3NpZGViYXJIYXNFcnJvciwgc2V0U2lkZWJhckhhc0Vycm9yXSA9IHVzZVN0YXRlKGZhbHNlKVxuICBjb25zdCBsYW5nID0gcmVzb2x2ZU1haWFNb2RhbEkxOG5MYW5nKGkxOG4ubGFuZ3VhZ2UpXG5cbiAgbW9tZW50LmxvY2FsZShsYW5nKVxuXG4gIGNvbnN0IHtcbiAgICBzZWxlY3RBZ2VudCxcbiAgICBjbGVhckFnZW50LFxuICAgIHNlY3Rpb24sXG4gICAgYWdlbnQsXG4gICAgcHJvamVjdCxcbiAgICBjbGllbnQsXG4gICAgdGFzayxcbiAgICBjaGlwc1Byb2plY3QsXG4gICAgdG9nZ2xlV2ViU2VhcmNoLFxuICAgIGlzV2ViU2VhcmNoQWN0aXZlLFxuICAgIHNldENoaXBzUHJvamVjdCxcbiAgICBzZXRDbGllbnQsXG4gICAgc2V0UHJvamVjdCxcbiAgICBiYW5uZXJFbnRyeUZhcSxcbiAgICBzZXRUYXNrLFxuICB9ID0gdXNlR2xvYmFsQ29udGV4dCgpXG5cbiAgLy8gWi1pbmRleCBwYXJhIHRvb2x0aXBzIGVuIHNlY3Rpb24gJ3Rhc2snIChtb2RhbCBmbG90YW50ZSBlbGV2YWRvKVxuICBjb25zdCB0b29sdGlwWkluZGV4ID0gdXNlTWFpYVRhc2tQYW5lbFpJbmRleCgxNTAwLCAnb3ZlcmxheScpXG5cbiAgY29uc3Qge1xuICAgIGFnZW50cyxcbiAgICBsb2FkaW5nLFxuICAgIGxvYWRpbmdNb3JlLFxuICAgIGVycm9yOiBhZ2VudEVycm9yLFxuICAgIGhhbmRsZUdldEFnZW50cyxcbiAgICBsb2FkTW9yZUFnZW50cyxcbiAgICBzZWFyY2hDdXN0b21BZ2VudHMsXG4gICAgc2VhcmNoTG9hZGluZyxcbiAgICBhZGRBZ2VudCxcbiAgICByZW1vdmVBZ2VudCxcbiAgICB1cGRhdGVBZ2VudCxcbiAgICB1cGRhdGVBZ2VudEZhdm9yaXRlLFxuICAgIHNlbGVjdEZpcnN0QWdlbnQsXG4gICAgc29ydEFnZW50c0xpc3QsXG4gIH0gPSB1c2VHZXRBZ2VudHMoeyBzZWxlY3RBZ2VudCwgc2VjdGlvbiwgYWdlbnQsIGhhbmRsZUdvSG9tZTogaGFuZGxlcnMuaG9tZSB9KVxuXG4gIGNvbnN0IGFnZW50c0RhdGFSZWYgPSB1c2VSZWYoYWdlbnRzLmRhdGEpXG4gIGFnZW50c0RhdGFSZWYuY3VycmVudCA9IGFnZW50cy5kYXRhXG5cbiAgY29uc3Qge1xuICAgIG15U2tpbGxzLFxuICAgIHNoYXJlZFNraWxscyxcbiAgICBsb2FkaW5nOiBsb2FkaW5nU2tpbGxzLFxuICAgIGhhbmRsZUdldFNraWxscyxcbiAgICBhZGRTa2lsbCxcbiAgICB1cGRhdGVTa2lsbEluTGlzdCxcbiAgICByZW1vdmVTa2lsbCxcbiAgfSA9IHVzZUdldFNraWxscygpXG5cbiAgY29uc3QgdXNlckhhc1Blcm1pc3Npb25zID0gcmVzb2x2ZVVzZXJIYXNBZ2VudE1hbmFnZW1lbnRQZXJtaXNzaW9ucyhcbiAgICB1c2VyPy5wZXJtaXNzaW9ucyxcbiAgICBCb29sZWFuKHdpbmRvdy5NQUlBX0NIQVRfQUlfRkVBVFVSRV9BQ0NFU1NfTVVMVElfQUdFTlRTKVxuICApXG5cbiAgY29uc3QgdXNlckhhc1NraWxsc0FjY2VzcyA9IGNhbkFjY2Vzc1RvU2tpbGxzKHVzZXIpXG5cbiAgY29uc3QgY29tcHV0ZWRDdXJyZW50T3B0aW9uID0gdXNlTWVtbyhcbiAgICAoKSA9PlxuICAgICAgcmVzb2x2ZUNvbXB1dGVkQ3VycmVudE9wdGlvbih7XG4gICAgICAgIGN1cnJlbnRPcHRpb24sXG4gICAgICAgIGFnZW50LFxuICAgICAgICBwcm9qZWN0LFxuICAgICAgICBjbGllbnQsXG4gICAgICAgIHVzZXIsXG4gICAgICAgIG11bHRpQWdlbnRzQWNjZXNzOiBCb29sZWFuKHdpbmRvdy5NQUlBX0NIQVRfQUlfRkVBVFVSRV9BQ0NFU1NfTVVMVElfQUdFTlRTKSxcbiAgICAgIH0pLFxuICAgIFtjdXJyZW50T3B0aW9uLCBwcm9qZWN0LCBjbGllbnQsIGFnZW50LCB1c2VyXVxuICApXG5cbiAgY29uc3QgaXNNYWlha2VyQWdlbnRTZWxlY3RlZCA9IHVzZU1lbW8oKCkgPT4gaXNNYXJrZXRwbGFjZUdsb2JhbENsb25lQWdlbnQoYWdlbnQpLCBbYWdlbnRdKVxuXG4gIGNvbnN0IHNpZGViYXJBZ2VudHNOYXZBY3RpdmUgPSB1c2VNZW1vKFxuICAgICgpID0+IHJlc29sdmVTaWRlYmFyQWdlbnRzTmF2QWN0aXZlKGNvbXB1dGVkQ3VycmVudE9wdGlvbiwgaXNNYWlha2VyQWdlbnRTZWxlY3RlZCksXG4gICAgW2NvbXB1dGVkQ3VycmVudE9wdGlvbiwgaXNNYWlha2VyQWdlbnRTZWxlY3RlZF1cbiAgKVxuXG4gIC8qIFJlYWN0aXZhciBjb24gbGEgZmlsYSDigJxNaXMgYWdlbnRlc+KAnSBlbiBTaWRlYmFyOiBteUFnZW50c0NvdW50IHByb3BcbiAgY29uc3Qgc2lkZWJhck15QWdlbnRzQ291bnQgPSB1c2VNZW1vKCgpID0+IHtcbiAgICByZXR1cm4gYWdlbnRzLmRhdGEuZmlsdGVyKFxuICAgICAgYSA9PiAhKGEudHlwZSA9PT0gJ29yY2hlc3RyYXRvcicgfHwgKGEudHlwZSA9PT0gJ2Nsb25lJyAmJiBhLmVudGl0eSA9PT0gJ2dsb2JhbCcgJiYgLyhtYWlha2VyfG1hcmtldHBsYWNlKS9pLnRlc3QoYS5uYW1lIHx8ICcnKSkpXG4gICAgKVxuICAgICAgLmxlbmd0aFxuICB9LCBbYWdlbnRzLmRhdGFdKVxuICAqL1xuXG4gIGNvbnN0IGFnZW50c0ZldGNoZWRSZWYgPSB1c2VSZWYoZmFsc2UpXG5cbiAgY29uc3Qgc2VsZWN0b3IgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGAjJHtJRF9NT0RBTF9DSEFUX0FHRU5UfWApXG5cbiAgLy8gVGFzayBwYW5lbCwgcGxhbm5lciB5IGJhbm5lciBkZSBwcm95ZWN0byBhYnJlbiBlbiBmbG90YW50ZSBwb3IgZGVmYXVsdCAobm8gdGFwYXIgZWwgY29udGV4dG8gZGV0csOhcykuXG4gIC8vIEZ1ZXJhIGRlIGVzb3MgY29udGV4dG9zIHNlIHJlc3BldGEgbGEgcHJlZmVyZW5jaWEgZ3VhcmRhZGEgZW4gbG9jYWxTdG9yYWdlLlxuICBjb25zdCBbbGF5b3V0TW9kZSwgc2V0TGF5b3V0TW9kZV0gPSB1c2VTdGF0ZTxNYWlhQ2hhdE1vZGFsTGF5b3V0TW9kZT4oKCkgPT5cbiAgICByZXNvbHZlSW5pdGlhbE1haWFDaGF0TGF5b3V0TW9kZSh7IHNlY3Rpb24sIGJhbm5lckVudHJ5RmFxIH0pXG4gIClcblxuICBjb25zdCBoYW5kbGVMYXlvdXRNb2RlQ2hhbmdlID0gdXNlQ2FsbGJhY2soKG1vZGU6IE1haWFDaGF0TW9kYWxMYXlvdXRNb2RlKSA9PiB7XG4gICAgc2V0U3RvcmVkTWFpYUNoYXRMYXlvdXRNb2RlKG1vZGUpXG4gICAgc2V0TGF5b3V0TW9kZShtb2RlKVxuICB9LCBbXSlcbiAgY29uc3QgZXhwYW5kZWQgPSBsYXlvdXRNb2RlID09PSAnZnVsbHNjcmVlbidcbiAgY29uc3QgaXNGbG9hdGluZyA9IGxheW91dE1vZGUgPT09ICdmbG9hdGluZydcbiAgY29uc3QgY29udGVudFdyYXBwZXJSZWYgPSB1c2VSZWY8SFRNTERpdkVsZW1lbnQ+KG51bGwpXG4gIGNvbnN0IFtkcmFnUG9zaXRpb24sIHNldERyYWdQb3NpdGlvbl0gPSB1c2VTdGF0ZTx7IHg6IG51bWJlcjsgeTogbnVtYmVyIH0gfCBudWxsPihcbiAgICAoKSA9PiBzYXZlZFNlc3Npb25Pbk1vdW50UmVmLmN1cnJlbnQ/LmRyYWdQb3NpdGlvbiA/PyBudWxsXG4gIClcbiAgY29uc3QgeyB0aWx0TW90aW9uLCBzdGFydFBvaW50ZXJUcmFja2luZywgc2FtcGxlUG9pbnRlck1vdmUsIGVuZFBvaW50ZXJUcmFja2luZyB9ID1cbiAgICB1c2VGbG9hdGluZ1BhbmVsRHJhZ1RpbHQoaXNGbG9hdGluZylcbiAgY29uc3QgZHJhZ1N0YXRlUmVmID0gdXNlUmVmPHtcbiAgICBwb2ludGVySWQ6IG51bWJlclxuICAgIG9mZnNldFg6IG51bWJlclxuICAgIG9mZnNldFk6IG51bWJlclxuICB9IHwgbnVsbD4obnVsbClcblxuICBjb25zdCBjbGFtcERyYWdQb3NpdGlvbiA9IHVzZUNhbGxiYWNrKCh4OiBudW1iZXIsIHk6IG51bWJlcikgPT4ge1xuICAgIGNvbnN0IGNvbnRlbnRXcmFwcGVyID0gY29udGVudFdyYXBwZXJSZWYuY3VycmVudFxuICAgIGlmIChzaG91bGRVc2VEcmFnQ2xhbXBGYWxsYmFjayhjb250ZW50V3JhcHBlcikpIHtcbiAgICAgIHJldHVybiB7IHgsIHkgfVxuICAgIH1cblxuICAgIGNvbnN0IHsgd2lkdGgsIGhlaWdodCB9ID0gY29udGVudFdyYXBwZXIhLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpXG4gICAgcmV0dXJuIGNsYW1wRmxvYXRpbmdQYW5lbFBvc2l0aW9uKHgsIHksIHdpZHRoLCBoZWlnaHQsIHdpbmRvdy5pbm5lcldpZHRoLCB3aW5kb3cuaW5uZXJIZWlnaHQpXG4gIH0sIFtdKVxuXG4gIHVzZUxheW91dEVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKHNob3VsZENsZWFyRHJhZ1Bvc2l0aW9uT25MYXlvdXRDaGFuZ2UobGF5b3V0TW9kZSkpIHtcbiAgICAgIHNldERyYWdQb3NpdGlvbihudWxsKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgc2V0RHJhZ1Bvc2l0aW9uKHByZXYgPT5cbiAgICAgIHJlc29sdmVMYXlvdXREcmFnUG9zaXRpb25VcGRhdGUobGF5b3V0TW9kZSwgcHJldiwgY2xhbXBEcmFnUG9zaXRpb24sIHtcbiAgICAgICAgaW5uZXJXaWR0aDogd2luZG93LmlubmVyV2lkdGgsXG4gICAgICAgIHBhbmVsV2lkdGg6IGdldE1haWFGbG9hdGluZ1BhbmVsV2lkdGhQeCgpLFxuICAgICAgICBwYWQ6IDE2LFxuICAgICAgfSkhXG4gICAgKVxuICB9LCBbbGF5b3V0TW9kZSwgY2xhbXBEcmFnUG9zaXRpb25dKVxuXG4gIGNvbnN0IGhhbmRsZURyYWdFbmQgPSB1c2VDYWxsYmFjayhcbiAgICAoZXZlbnQ6IFJlYWN0UG9pbnRlckV2ZW50PEhUTUxEaXZFbGVtZW50PikgPT4ge1xuICAgICAgZW5kUG9pbnRlclRyYWNraW5nKClcbiAgICAgIGlmICghaXNBY3RpdmVGbG9hdGluZ0RyYWdQb2ludGVyKGRyYWdTdGF0ZVJlZi5jdXJyZW50Py5wb2ludGVySWQsIGV2ZW50LnBvaW50ZXJJZCkpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGRyYWdTdGF0ZVJlZi5jdXJyZW50ID0gbnVsbFxuICAgICAgZG9jdW1lbnQuYm9keS5zdHlsZS51c2VyU2VsZWN0ID0gJydcbiAgICAgIGRvY3VtZW50LmJvZHkuc3R5bGUuY3Vyc29yID0gJydcblxuICAgICAgY29uc3QgY29udGVudFdyYXBwZXIgPSBjb250ZW50V3JhcHBlclJlZi5jdXJyZW50XG4gICAgICBpZiAoY29udGVudFdyYXBwZXIgJiYgcmVzb2x2ZVBlcnNpc3RlZERyYWdQb3NpdGlvbk9uRW5kKGxheW91dE1vZGUsIGNvbnRlbnRXcmFwcGVyKSkge1xuICAgICAgICBjb25zdCByZWN0ID0gY29udGVudFdyYXBwZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KClcbiAgICAgICAgcGF0Y2hNYWlhUGFuZWxTZXNzaW9uKHVzZXIuaWQsIHsgZHJhZ1Bvc2l0aW9uOiB7IHg6IHJlY3QubGVmdCwgeTogcmVjdC50b3AgfSB9KVxuICAgICAgfVxuICAgIH0sXG4gICAgW2VuZFBvaW50ZXJUcmFja2luZywgbGF5b3V0TW9kZSwgdXNlci5pZF1cbiAgKVxuXG4gIGNvbnN0IGhhbmRsZURyYWdNb3ZlID0gdXNlQ2FsbGJhY2soXG4gICAgKGV2ZW50OiBSZWFjdFBvaW50ZXJFdmVudDxIVE1MRGl2RWxlbWVudD4pID0+IHtcbiAgICAgIGNvbnN0IGRyYWdTdGF0ZSA9IGRyYWdTdGF0ZVJlZi5jdXJyZW50XG4gICAgICBpZiAoIWRyYWdTdGF0ZSB8fCAhaXNBY3RpdmVGbG9hdGluZ0RyYWdQb2ludGVyKGRyYWdTdGF0ZS5wb2ludGVySWQsIGV2ZW50LnBvaW50ZXJJZCkpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIHNhbXBsZVBvaW50ZXJNb3ZlKGV2ZW50LmNsaWVudFgsIGV2ZW50LmNsaWVudFkpXG5cbiAgICAgIGNvbnN0IG5leHRQb3NpdGlvbiA9IGNsYW1wRHJhZ1Bvc2l0aW9uKGV2ZW50LmNsaWVudFggLSBkcmFnU3RhdGUub2Zmc2V0WCwgZXZlbnQuY2xpZW50WSAtIGRyYWdTdGF0ZS5vZmZzZXRZKVxuXG4gICAgICBzZXREcmFnUG9zaXRpb24ocHJldiA9PiByZXNvbHZlTmV4dERyYWdQb3NpdGlvbihwcmV2LCBuZXh0UG9zaXRpb24pKVxuICAgIH0sXG4gICAgW2NsYW1wRHJhZ1Bvc2l0aW9uLCBzYW1wbGVQb2ludGVyTW92ZV1cbiAgKVxuXG4gIGNvbnN0IHJlc29sdmVkRHJhZ1Bvc2l0aW9uID0gdXNlTWVtbyhcbiAgICAoKSA9PlxuICAgICAgcmVzb2x2ZUZsb2F0aW5nUGFuZWxEcmFnUG9zaXRpb24oe1xuICAgICAgICBsYXlvdXRNb2RlLFxuICAgICAgICBkcmFnUG9zaXRpb24sXG4gICAgICAgIHZpZXdwb3J0V2lkdGg6IHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnID8gd2luZG93LmlubmVyV2lkdGggOiAwLFxuICAgICAgICBwYW5lbFdpZHRoOiBnZXRNYWlhRmxvYXRpbmdQYW5lbFdpZHRoUHgoKSxcbiAgICAgICAgY2xhbXA6IGNsYW1wRHJhZ1Bvc2l0aW9uLFxuICAgICAgfSksXG4gICAgW2xheW91dE1vZGUsIGRyYWdQb3NpdGlvbiwgY2xhbXBEcmFnUG9zaXRpb25dXG4gIClcblxuICBjb25zdCBoYW5kbGVEcmFnU3RhcnQgPSB1c2VDYWxsYmFjayhcbiAgICAoZXZlbnQ6IFJlYWN0UG9pbnRlckV2ZW50PEhUTUxEaXZFbGVtZW50PikgPT4ge1xuICAgICAgaWYgKCFzaG91bGRTdGFydEZsb2F0aW5nUGFuZWxEcmFnKGlzRmxvYXRpbmcsIGV2ZW50LmJ1dHRvbikpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHRhcmdldCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudFxuICAgICAgaWYgKHNob3VsZFNraXBGbG9hdGluZ0RyYWdUYXJnZXQodGFyZ2V0KSkge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgY29uc3QgY29udGVudFdyYXBwZXIgPSBjb250ZW50V3JhcHBlclJlZi5jdXJyZW50XG4gICAgICBpZiAoIWNvbnRlbnRXcmFwcGVyKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBjb25zdCByZWN0ID0gY29udGVudFdyYXBwZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KClcbiAgICAgIGNvbnN0IGluaXRpYWxQb3NpdGlvbiA9IHJlc29sdmVkRHJhZ1Bvc2l0aW9uID8/IGNsYW1wRHJhZ1Bvc2l0aW9uKHJlY3QubGVmdCwgcmVjdC50b3ApXG4gICAgICBjb25zdCBwb2ludGVyT2Zmc2V0WCA9IGV2ZW50LmNsaWVudFggLSBpbml0aWFsUG9zaXRpb24ueFxuICAgICAgY29uc3QgcG9pbnRlck9mZnNldFkgPSBldmVudC5jbGllbnRZIC0gaW5pdGlhbFBvc2l0aW9uLnlcblxuICAgICAgc2V0RHJhZ1Bvc2l0aW9uKGluaXRpYWxQb3NpdGlvbilcbiAgICAgIGRyYWdTdGF0ZVJlZi5jdXJyZW50ID0ge1xuICAgICAgICBwb2ludGVySWQ6IGV2ZW50LnBvaW50ZXJJZCxcbiAgICAgICAgb2Zmc2V0WDogcG9pbnRlck9mZnNldFgsXG4gICAgICAgIG9mZnNldFk6IHBvaW50ZXJPZmZzZXRZLFxuICAgICAgfVxuXG4gICAgICBldmVudC5jdXJyZW50VGFyZ2V0LnNldFBvaW50ZXJDYXB0dXJlKGV2ZW50LnBvaW50ZXJJZClcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KClcblxuICAgICAgZG9jdW1lbnQuYm9keS5zdHlsZS51c2VyU2VsZWN0ID0gJ25vbmUnXG4gICAgICBkb2N1bWVudC5ib2R5LnN0eWxlLmN1cnNvciA9ICdncmFiYmluZydcbiAgICAgIGFtcGxpdHVkRXZlbnQoRVZFTlRTLmFpQ2hhdERyYWdnYWJsZSlcbiAgICAgIHN0YXJ0UG9pbnRlclRyYWNraW5nKGV2ZW50LmNsaWVudFgsIGV2ZW50LmNsaWVudFkpXG4gICAgfSxcbiAgICBbY2xhbXBEcmFnUG9zaXRpb24sIGlzRmxvYXRpbmcsIHJlc29sdmVkRHJhZ1Bvc2l0aW9uLCBzdGFydFBvaW50ZXJUcmFja2luZ11cbiAgKVxuXG4gIGNvbnN0IHN0YXJ0Q2hhdCA9IHVzZUNhbGxiYWNrKFxuICAgIChcbiAgICAgIG1lc3NhZ2U/OiBzdHJpbmcsXG4gICAgICBhdHRhY2htZW50cz86IEF0dGFjaG1lbnRGaWxlW10sXG4gICAgICBmYXFJZD86IHN0cmluZyxcbiAgICAgIGFnZW50U3VnZ2VzdGlvbklkPzogc3RyaW5nLFxuICAgICAgbWVudGlvbnM/OiBDb250ZXh0TWVudGlvbltdLFxuICAgICAgZnVhSWQ/OiBzdHJpbmcsXG4gICAgICBzY0lkPzogc3RyaW5nLFxuICAgICAgY29udGV4dERhdGE/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxuICAgICkgPT4ge1xuICAgICAgaWYgKHNob3VsZFJlc2V0U2lkZWJhckVycm9yT25TdGFydENoYXQoc2lkZWJhckhhc0Vycm9yKSkge1xuICAgICAgICBzZXRTaWRlYmFySGFzRXJyb3IoZmFsc2UpXG4gICAgICB9XG4gICAgICBzZXRJbml0aWFsQ2hhdElkKG51bGwpXG4gICAgICBzZXROZXdDaGF0S2V5KHByZXYgPT4gcHJldiArIDEpXG4gICAgICBzZXRVc2VySW5pdGlhbE1lc3NhZ2UoXG4gICAgICAgIGJ1aWxkVXNlckluaXRpYWxNZXNzYWdlRnJvbVN0YXJ0Q2hhdCh7XG4gICAgICAgICAgbWVzc2FnZSxcbiAgICAgICAgICBhdHRhY2htZW50cyxcbiAgICAgICAgICBmYXFJZCxcbiAgICAgICAgICBhZ2VudFN1Z2dlc3Rpb25JZCxcbiAgICAgICAgICBtZW50aW9ucyxcbiAgICAgICAgICBmdWFJZCxcbiAgICAgICAgICBzY0lkLFxuICAgICAgICAgIGNvbnRleHREYXRhLFxuICAgICAgICB9KVxuICAgICAgKVxuICAgICAgaGFuZGxlcnMuY2hhdCgpXG4gICAgfSxcbiAgICBbaGFuZGxlcnMsIHNpZGViYXJIYXNFcnJvcl1cbiAgKVxuXG4gIGNvbnN0IGJhbm5lckZhcUF1dG9TZW50UmVmID0gdXNlUmVmKGZhbHNlKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgYmFubmVyRmFxID0gYmFubmVyRW50cnlGYXFcbiAgICBpZiAoIWJhbm5lckZhcSB8fCAhaGFzQmFubmVyRmFxVGl0bGUoYmFubmVyRmFxLmZhcVRpdGxlKSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgIWlzQmFubmVyRmFxUmVhZHlUb0F1dG9TZW5kKHtcbiAgICAgICAgZmFxVGl0bGU6IGJhbm5lckZhcS5mYXFUaXRsZSxcbiAgICAgICAgYWxyZWFkeVNlbnQ6IGJhbm5lckZhcUF1dG9TZW50UmVmLmN1cnJlbnQsXG4gICAgICAgIGxvYWRpbmcsXG4gICAgICAgIGFnZW50SWQ6IGFnZW50Py5pZCxcbiAgICAgICAgc2VjdGlvbixcbiAgICAgICAgcHJvamVjdElkOiBwcm9qZWN0Py5pZCxcbiAgICAgICAgY2xpZW50SWQ6IGNsaWVudD8uaWQsXG4gICAgICB9KVxuICAgICkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgYmFubmVyRmFxQXV0b1NlbnRSZWYuY3VycmVudCA9IHRydWVcbiAgICBzdGFydENoYXQoXG4gICAgICBiYW5uZXJGYXEuZmFxVGl0bGUsXG4gICAgICBbXSxcbiAgICAgIGJhbm5lckZhcS5mYXFJZCxcbiAgICAgIHVuZGVmaW5lZCxcbiAgICAgIHVuZGVmaW5lZCxcbiAgICAgIHVuZGVmaW5lZCxcbiAgICAgIHVuZGVmaW5lZCxcbiAgICAgIGJhbm5lckZhcS5jb250ZXh0RGF0YVxuICAgIClcbiAgfSwgW1xuICAgIGJhbm5lckVudHJ5RmFxPy5mYXFJZCxcbiAgICBiYW5uZXJFbnRyeUZhcT8uZmFxVGl0bGUsXG4gICAgYmFubmVyRW50cnlGYXE/LmNvbnRleHREYXRhLFxuICAgIGxvYWRpbmcsXG4gICAgYWdlbnQ/LmlkLFxuICAgIGFnZW50Py5lbnRpdHksXG4gICAgcHJvamVjdD8uaWQsXG4gICAgY2xpZW50Py5pZCxcbiAgICBzZWN0aW9uLFxuICAgIHN0YXJ0Q2hhdCxcbiAgXSlcblxuICBjb25zdCBnb1RvQ2hhdCA9IHVzZUNhbGxiYWNrKFxuICAgIChjaGF0OiBhbnkpID0+IHtcbiAgICAgIGNvbnN0IHNlc3Npb25JZCA9IGNoYXQuc2Vzc2lvbkV4dGVybmFsSWQgYXMgc3RyaW5nXG5cbiAgICAgIGdldENoYXRzU3RvcmVTdGF0ZSgpLnNldEFjdGl2ZUNoYXRJZChzZXNzaW9uSWQpXG4gICAgICBkb2N1bWVudC5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgnc2lkZWJhci1zZWxlY3Qtc2Vzc2lvbicsIHsgZGV0YWlsOiB7IHNlc3Npb25JZCB9IH0pKVxuXG4gICAgICBzZXRVc2VySW5pdGlhbE1lc3NhZ2UoeyBtZXNzYWdlOiAnJywgYXR0YWNobWVudHM6IFtdIH0pXG4gICAgICBzZXRJbml0aWFsQ2hhdElkKHNlc3Npb25JZClcbiAgICAgIGNvbnN0IHNlbGVjdGVkQWdlbnQgPSBmaW5kQWdlbnRGb3JDaGF0SXRlbShhZ2VudHMuZGF0YSwgY2hhdC5hZ2VudElkKVxuICAgICAgaWYgKHNlbGVjdGVkQWdlbnQpIHtcbiAgICAgICAgc2VsZWN0QWdlbnQoc2VsZWN0ZWRBZ2VudClcbiAgICAgIH1cbiAgICAgIC8vIERpc3BhdGNoIGV2ZW50IHRvIGNsZWFyIHRoZSBpbnB1dCB0ZXh0YXJlYVxuICAgICAgZG9jdW1lbnQuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoJ2NoYXQtc2Vzc2lvbi1jaGFuZ2VkJykpXG4gICAgICBoYW5kbGVycy5jaGF0KClcbiAgICB9LFxuICAgIFtoYW5kbGVycywgYWdlbnRzLCBzZWxlY3RBZ2VudF1cbiAgKVxuXG4gIGdvVG9DaGF0UmVmLmN1cnJlbnQgPSBnb1RvQ2hhdFxuXG4gIGNvbnN0IGhhbmRsZVNpZGViYXJPcGVuQ2hhbmdlID0gdXNlQ2FsbGJhY2soXG4gICAgKG9wZW46IGJvb2xlYW4pID0+IHtcbiAgICAgIHNpZGViYXJPcGVuUmVmLmN1cnJlbnQgPSBvcGVuXG4gICAgICBwYXRjaE1haWFQYW5lbFNlc3Npb24odXNlci5pZCwgeyBzaWRlYmFyT3Blbjogb3BlbiB9KVxuICAgIH0sXG4gICAgW3VzZXIuaWRdXG4gIClcblxuICBjb25zdCBzeW5jUGFuZWxTZXNzaW9uID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGNvbnN0IHBhdGNoID0gYnVpbGRNYWlhUGFuZWxTZXNzaW9uUGF0Y2goe1xuICAgICAgaXNNaW5pbWl6ZWQsXG4gICAgICBjdXJyZW50T3B0aW9uLFxuICAgICAgYWdlbnRzTmF2QWN0aXZlOiBzaWRlYmFyQWdlbnRzTmF2QWN0aXZlLFxuICAgICAgYWN0aXZlQ2hhdElkLFxuICAgICAgYWdlbnRJZDogYWdlbnQ/LmlkID8/IG51bGwsXG4gICAgICBzaWRlYmFyT3Blbjogc2lkZWJhck9wZW5SZWYuY3VycmVudCxcbiAgICAgIGxheW91dE1vZGUsXG4gICAgICBkcmFnUG9zaXRpb24sXG4gICAgICBob3N0Q29udGV4dDoge1xuICAgICAgICBzZWN0aW9uLFxuICAgICAgICBwcm9qZWN0LFxuICAgICAgICBjbGllbnQsXG4gICAgICAgIHRhc2ssXG4gICAgICAgIGNoaXBzUHJvamVjdCxcbiAgICAgIH0sXG4gICAgfSlcbiAgICBpZiAoIXBhdGNoKSByZXR1cm5cbiAgICBwYXRjaE1haWFQYW5lbFNlc3Npb24odXNlci5pZCwgcGF0Y2gpXG4gIH0sIFtcbiAgICBhY3RpdmVDaGF0SWQsXG4gICAgYWdlbnQ/LmlkLFxuICAgIGNoaXBzUHJvamVjdCxcbiAgICBjbGllbnQsXG4gICAgY3VycmVudE9wdGlvbixcbiAgICBkcmFnUG9zaXRpb24sXG4gICAgaXNNaW5pbWl6ZWQsXG4gICAgbGF5b3V0TW9kZSxcbiAgICBwcm9qZWN0LFxuICAgIHNlY3Rpb24sXG4gICAgc2lkZWJhckFnZW50c05hdkFjdGl2ZSxcbiAgICB0YXNrLFxuICAgIHVzZXIuaWQsXG4gIF0pXG5cbiAgLyoqIExvcyBhZ2VudGVzIHNlIHBpZGVuIHJlY2nDqW4gYWwgYWJyaXIgZWwgcGFuZWw6IGVuIG1vZG8gcGlsbCBubyBoYWNlIGZhbHRhIG5pbmd1bmEgcmVxdWVzdC4gKi9cbiAgY29uc3QgZW5zdXJlQWdlbnRzTG9hZGVkID0gdXNlQ2FsbGJhY2soYXN5bmMgKCk6IFByb21pc2U8QWdlbnRbXT4gPT4ge1xuICAgIGNvbnN0IGNhY2hlZEFnZW50cyA9IHJlc29sdmVDYWNoZWRBZ2VudHNJZkF2YWlsYWJsZShhZ2VudHNEYXRhUmVmLmN1cnJlbnQpXG4gICAgaWYgKGNhY2hlZEFnZW50cykge1xuICAgICAgcmV0dXJuIGNhY2hlZEFnZW50c1xuICAgIH1cblxuICAgIGlmIChzaG91bGRBdHRlbXB0SW5pdGlhbEFnZW50c0ZldGNoKGFnZW50c0RhdGFSZWYuY3VycmVudC5sZW5ndGgsIGFnZW50c0ZldGNoZWRSZWYuY3VycmVudCkpIHtcbiAgICAgIGFnZW50c0ZldGNoZWRSZWYuY3VycmVudCA9IHRydWVcbiAgICAgIGNvbnN0IGxvYWRlZEFnZW50cyA9IGF3YWl0IGhhbmRsZUdldEFnZW50cygpXG4gICAgICBjb25zdCBsb2FkZWRGcm9tRmV0Y2ggPSByZXNvbHZlQ2FjaGVkQWdlbnRzSWZBdmFpbGFibGUobG9hZGVkQWdlbnRzKVxuICAgICAgaWYgKGxvYWRlZEZyb21GZXRjaCkge1xuICAgICAgICByZXR1cm4gbG9hZGVkRnJvbUZldGNoXG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGFnZW50c0RhdGFSZWYuY3VycmVudFxuICB9LCBbaGFuZGxlR2V0QWdlbnRzXSlcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChpc01pbmltaXplZCB8fCBsb2FkaW5nIHx8IGluaXRpYWxDaGF0c1JlZmV0Y2hEb25lUmVmLmN1cnJlbnQpIHJldHVyblxuICAgIGlmICghYWdlbnRzLmRhdGEubGVuZ3RoKSByZXR1cm5cbiAgICBpbml0aWFsQ2hhdHNSZWZldGNoRG9uZVJlZi5jdXJyZW50ID0gdHJ1ZVxuICAgIHNldFJlZmV0Y2hDaGF0cyh0cnVlKVxuICB9LCBbaXNNaW5pbWl6ZWQsIGxvYWRpbmcsIGFnZW50cy5kYXRhLmxlbmd0aF0pXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoaXNNaW5pbWl6ZWQpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWRcbiAgICB9XG5cbiAgICBjb25zdCB0aW1lciA9IHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHN5bmNQYW5lbFNlc3Npb24oKSwgMTUwKVxuICAgIHJldHVybiAoKSA9PiB3aW5kb3cuY2xlYXJUaW1lb3V0KHRpbWVyKVxuICB9LCBbaXNNaW5pbWl6ZWQsIHN5bmNQYW5lbFNlc3Npb25dKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3Qgb25QYWdlSGlkZSA9ICgpID0+IHtcbiAgICAgIGlmIChzaG91bGRTeW5jUGFuZWxTZXNzaW9uT25QYWdlSGlkZShpc01pbmltaXplZCkpIHtcbiAgICAgICAgc3luY1BhbmVsU2Vzc2lvbigpXG4gICAgICB9XG4gICAgfVxuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdwYWdlaGlkZScsIG9uUGFnZUhpZGUpXG4gICAgcmV0dXJuICgpID0+IHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdwYWdlaGlkZScsIG9uUGFnZUhpZGUpXG4gIH0sIFtpc01pbmltaXplZCwgc3luY1BhbmVsU2Vzc2lvbl0pXG5cbiAgY29uc3QgaGFuZGxlUmVzdG9yZUZyb21NaW5pbWl6ZWQgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgLy8gUHJpb3JpZGFkIGFsIHJlYWJyaXI6IHByaW1lciBjaGF0IHNpbiBsZWVyIOKGkiDDumx0aW1hIGNvbnZlcnNhY2nDs24gYWJpZXJ0YSDihpIgSG9tZS5cbiAgICBjb25zdCB7IGNoYXRzIH0gPSBnZXRDaGF0c1N0b3JlU3RhdGUoKVxuICAgIGNvbnN0IGxhc3RBY3RpdmVDaGF0SWQgPSByZWFkTGFzdEFjdGl2ZUNoYXRJZCh1c2VyLmlkKVxuICAgIGNvbnN0IHRhcmdldCA9IHJlc29sdmVNaW5pbWl6ZWRSZXN0b3JlVGFyZ2V0KGNoYXRzLCBsYXN0QWN0aXZlQ2hhdElkKVxuXG4gICAgLy8gTmF2ZWdhciBhbnRlcyBkZSBleHBhbmRpcjogc2kgZXNwZXJhbW9zIGFnZW50ZXMsIGVsIHBhbmVsIG1vbnRhIGNvbiBsYSBzZXNpw7NuIHZpZWphIHkgZWwgc2lkZWJhciBxdWVkYSBkZXNmYXNhZG8uXG4gICAgaWYgKHRhcmdldCkge1xuICAgICAgZ29Ub0NoYXRSZWYuY3VycmVudD8uKHRhcmdldClcbiAgICB9IGVsc2Uge1xuICAgICAgZ29Ib21lUmVmLmN1cnJlbnQ/LigpXG4gICAgfVxuXG4gICAgc2V0SXNNaW5pbWl6ZWQoZmFsc2UpXG4gICAgc2V0Q2hhdFZpZXdWaXNpYmxlKHRydWUpXG4gICAgLy8gTGlzdCBtYXkgYmUgc3RhbGUgd2hpbGUgbWluaW1pemVkIChoZWFkZXIgc3RheWVkIG1vdW50ZWQgd2l0aCBjYWNoZWQgc3RvcmUpLlxuICAgIHNldFJlZmV0Y2hDaGF0cyh0cnVlKVxuICAgIGFtcGxpdHVkRXZlbnQoRVZFTlRTLmFpQ2hhdE9wZW4sIHsgb3B0aW9uOiAnbWluaW1pemUnIH0pXG5cbiAgICBlbnN1cmVBZ2VudHNMb2FkZWQoKVxuICAgICAgLnRoZW4obG9hZGVkQWdlbnRzID0+IHtcbiAgICAgICAgaWYgKHRhcmdldCkge1xuICAgICAgICAgIGNvbnN0IHNlbGVjdGVkQWdlbnQgPSBmaW5kQWdlbnRGb3JDaGF0SXRlbShsb2FkZWRBZ2VudHMsIHRhcmdldC5hZ2VudElkKVxuICAgICAgICAgIGlmIChzZWxlY3RlZEFnZW50KSB7XG4gICAgICAgICAgICBzZWxlY3RBZ2VudChzZWxlY3RlZEFnZW50KVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBmb2N1c0NoYXRJbnB1dCgpXG4gICAgICB9KVxuICAgICAgLmNhdGNoKCgpID0+IHVuZGVmaW5lZClcbiAgfSwgW2FtcGxpdHVkRXZlbnQsIGVuc3VyZUFnZW50c0xvYWRlZCwgZm9jdXNDaGF0SW5wdXQsIHNlbGVjdEFnZW50LCBzZXRDaGF0Vmlld1Zpc2libGUsIHNldFJlZmV0Y2hDaGF0cywgdXNlci5pZF0pXG5cbiAgLyoqXG4gICAqIFRvbWEgY29udHJvbCBkZXNkZSB1biBob3N0IChoZWFkZXIsIHByb3llY3RvLCBjbGllbnRl4oCmKTogYWJyZSBlbCBwYW5lbCwgZGVzY2FydGEgbGFcbiAgICogY29udmVyc2FjacOzbiBhYmllcnRhIHkgYXBsaWNhIGVsIGNvbnRleHRvIGRlbCBob3N0LiBOTyB2dWVsdmUgYSBsYSDDumx0aW1hIGNvbnZlcnNhY2nDs25cbiAgICog4oCUIGVzbyBzw7NsbyBsbyBoYWNlIGVsIHBpbGwgKGBoYW5kbGVSZXN0b3JlRnJvbU1pbmltaXplZGApLlxuICAgKi9cbiAgY29uc3QgYXBwbHlFeHBhbmRlZEhvc3RUYWtlb3ZlciA9IHVzZUNhbGxiYWNrKFxuICAgIChkZXRhaWw6IE1haWFIb3N0T3BlbkRldGFpbCkgPT4ge1xuICAgICAgY29uc3QgZW50aXR5U3RhdGUgPSByZXNvbHZlSG9zdFRha2VvdmVyRW50aXR5U3RhdGUoZGV0YWlsKVxuXG4gICAgICBjbGVhck1haWFQYW5lbFNlc3Npb24odXNlci5pZClcbiAgICAgIHBlbmRpbmdTZXNzaW9uUmVzdG9yZVJlZi5jdXJyZW50ID0gbnVsbFxuICAgICAgc2V0SXNSZXN0b3JpbmdTZXNzaW9uKGZhbHNlKVxuICAgICAgc2V0SXNNaW5pbWl6ZWQoZmFsc2UpXG4gICAgICBzZXRDaGF0Vmlld1Zpc2libGUodHJ1ZSlcbiAgICAgIHdyaXRlTGFzdEFjdGl2ZUNoYXRJZCh1c2VyLmlkLCBudWxsKVxuXG4gICAgICBzZXRJbml0aWFsQ2hhdElkKG51bGwpXG4gICAgICBzZXROZXdDaGF0S2V5KHByZXYgPT4gcHJldiArIDEpXG4gICAgICBzZXRVc2VySW5pdGlhbE1lc3NhZ2UoeyBtZXNzYWdlOiAnJywgYXR0YWNobWVudHM6IFtdIH0pXG4gICAgICBzZXRDdXJyZW50T3B0aW9uKG9wdGlvbnMuaG9tZSlcbiAgICAgIHNldERpZFJlc2V0Q29udGV4dEluU2VjdGlvbihmYWxzZSlcbiAgICAgIHNldEhhc0Vycm9yKGZhbHNlKVxuICAgICAgc2V0SXNXcml0aW5nKGZhbHNlKVxuICAgICAgdXNlRmFxc1N0b3JlLmdldFN0YXRlKCkuY2xlYXJGYXFzKClcbiAgICAgIGJhbm5lckZhcUF1dG9TZW50UmVmLmN1cnJlbnQgPSBmYWxzZVxuICAgICAgZ2V0Q2hhdHNTdG9yZVN0YXRlKCkuc2V0QWN0aXZlQ2hhdElkKG51bGwpXG4gICAgICBkb2N1bWVudC5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgnY2hhdC1zZXNzaW9uLWNoYW5nZWQnKSlcblxuICAgICAgc2V0UHJvamVjdD8uKGVudGl0eVN0YXRlLnByb2plY3QpXG4gICAgICBpZiAoc2hvdWxkQXBwbHlDbGllbnRPbkhvc3RUYWtlb3ZlcihlbnRpdHlTdGF0ZS5jbGllbnQpKSB7XG4gICAgICAgIHNldENsaWVudD8uKGVudGl0eVN0YXRlLmNsaWVudClcbiAgICAgIH1cbiAgICAgIHNldFRhc2s/LihlbnRpdHlTdGF0ZS50YXNrKVxuXG4gICAgICBpZiAoZW50aXR5U3RhdGUuY2xlYXJHbG9iYWxQaW5uZWRDb250ZXh0KSB7XG4gICAgICAgIHNldENoaXBzUHJvamVjdChudWxsKVxuICAgICAgICBjbGVhckFnZW50KClcbiAgICAgIH1cblxuICAgICAgY29uc3QgbmV4dExheW91dCA9IHJlc29sdmVJbml0aWFsTWFpYUNoYXRMYXlvdXRNb2RlKHtcbiAgICAgICAgc2VjdGlvbjogZGV0YWlsLnNlY3Rpb24gYXMgU2VjdGlvbixcbiAgICAgICAgYmFubmVyRW50cnlGYXE6IGRldGFpbC5mYXEsXG4gICAgICB9KVxuICAgICAgc2V0TGF5b3V0TW9kZShuZXh0TGF5b3V0KVxuICAgICAgc2V0RHJhZ1Bvc2l0aW9uKG51bGwpXG5cbiAgICAgIGNvbnN0IGhvc3RDb250ZXh0ID0gYnVpbGRIb3N0VGFrZW92ZXJQZXJzaXN0Q29udGV4dChkZXRhaWwpXG5cbiAgICAgIGVuc3VyZUFnZW50c0xvYWRlZCgpXG4gICAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgICBjb25zdCByZXNvbHZlZEFnZW50SWQgPSByZXNvbHZlSG9zdFRha2VvdmVyQWdlbnRJZChcbiAgICAgICAgICAgIGVudGl0eVN0YXRlLmNsZWFyR2xvYmFsUGlubmVkQ29udGV4dCxcbiAgICAgICAgICAgIGFnZW50c0RhdGFSZWYuY3VycmVudCxcbiAgICAgICAgICAgIGFnZW50Py5pZCA/PyBudWxsXG4gICAgICAgICAgKVxuICAgICAgICAgIGlmIChzaG91bGRTZWxlY3RGaXJzdEFnZW50T25Ib3N0VGFrZW92ZXIoZW50aXR5U3RhdGUuY2xlYXJHbG9iYWxQaW5uZWRDb250ZXh0LCBhZ2VudHNEYXRhUmVmLmN1cnJlbnRbMF0pKSB7XG4gICAgICAgICAgICBzZWxlY3RBZ2VudChhZ2VudHNEYXRhUmVmLmN1cnJlbnRbMF0pXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcGF0Y2hNYWlhUGFuZWxTZXNzaW9uKHVzZXIuaWQsIHtcbiAgICAgICAgICAgIGlzRXhwYW5kZWQ6IHRydWUsXG4gICAgICAgICAgICBjdXJyZW50T3B0aW9uOiBvcHRpb25zLmhvbWUsXG4gICAgICAgICAgICBhZ2VudHNOYXZBY3RpdmU6IG51bGwsXG4gICAgICAgICAgICBhY3RpdmVDaGF0SWQ6IG51bGwsXG4gICAgICAgICAgICBhZ2VudElkOiByZXNvbHZlZEFnZW50SWQsXG4gICAgICAgICAgICBzaWRlYmFyT3Blbjogc2lkZWJhck9wZW5SZWYuY3VycmVudCxcbiAgICAgICAgICAgIGRyYWdQb3NpdGlvbjogbnVsbCxcbiAgICAgICAgICAgIGhvc3RDb250ZXh0LFxuICAgICAgICAgIH0pXG5cbiAgICAgICAgICBmb2N1c0NoYXRJbnB1dCgpXG4gICAgICAgIH0pXG4gICAgICAgIC5jYXRjaCgoKSA9PiB1bmRlZmluZWQpXG4gICAgfSxcbiAgICBbXG4gICAgICBhZ2VudD8uaWQsXG4gICAgICBjbGVhckFnZW50LFxuICAgICAgZW5zdXJlQWdlbnRzTG9hZGVkLFxuICAgICAgZm9jdXNDaGF0SW5wdXQsXG4gICAgICBzZWxlY3RBZ2VudCxcbiAgICAgIHNldENoYXRWaWV3VmlzaWJsZSxcbiAgICAgIHNldENoaXBzUHJvamVjdCxcbiAgICAgIHNldENsaWVudCxcbiAgICAgIHNldFByb2plY3QsXG4gICAgICBzZXRUYXNrLFxuICAgICAgdXNlci5pZCxcbiAgICBdXG4gIClcblxuICBjb25zdCBoYW5kbGVTZW5kTWVzc2FnZVJlYWR5ID0gdXNlQ2FsbGJhY2soXG4gICAgKFxuICAgICAgc2VuZE1lc3NhZ2U6IChcbiAgICAgICAgbWVzc2FnZTogc3RyaW5nLFxuICAgICAgICBhdHRhY2htZW50cz86IEF0dGFjaG1lbnRGaWxlW10sXG4gICAgICAgIGZhcUlkPzogc3RyaW5nLFxuICAgICAgICBhZ2VudFN1Z2dlc3Rpb25JZD86IHN0cmluZyxcbiAgICAgICAgbWVudGlvbnM/OiBDb250ZXh0TWVudGlvbltdLFxuICAgICAgICBmdWFJZD86IHN0cmluZyxcbiAgICAgICAgc2NJZD86IHN0cmluZyxcbiAgICAgICAgY29udGV4dERhdGE/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxuICAgICAgKSA9PiB2b2lkLFxuICAgICAgc3RvcEdlbmVyYXRpb246ICgpID0+IHZvaWQsXG4gICAgICBzdHJlYW1pbmc6IGJvb2xlYW4sXG4gICAgICB3cml0aW5nOiBib29sZWFuXG4gICAgKSA9PiB7XG4gICAgICBzZXRTZW5kTWVzc2FnZUZ1bmN0aW9uKCgpID0+IHNlbmRNZXNzYWdlKVxuICAgICAgc2V0U3RvcEdlbmVyYXRpb25GdW5jdGlvbigoKSA9PiBzdG9wR2VuZXJhdGlvbilcbiAgICAgIHNldElzU3RyZWFtaW5nKHN0cmVhbWluZylcbiAgICAgIHNldElzV3JpdGluZyh3cml0aW5nKVxuICAgIH0sXG4gICAgW11cbiAgKVxuXG4gIGNvbnN0IGhhbmRsZVNlbmRNZXNzYWdlID0gdXNlQ2FsbGJhY2soXG4gICAgKFxuICAgICAgbWVzc2FnZTogc3RyaW5nLFxuICAgICAgYXR0YWNobWVudHM/OiBBdHRhY2htZW50RmlsZVtdLFxuICAgICAgZmFxSWQ/OiBzdHJpbmcsXG4gICAgICBhZ2VudFN1Z2dlc3Rpb25JZD86IHN0cmluZyxcbiAgICAgIG1lbnRpb25zPzogQ29udGV4dE1lbnRpb25bXSxcbiAgICAgIGZ1YUlkPzogc3RyaW5nLFxuICAgICAgc2NJZD86IHN0cmluZyxcbiAgICAgIGNvbnRleHREYXRhPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj5cbiAgICApID0+IHtcbiAgICAgIGlmIChzaWRlYmFySGFzRXJyb3IpIHtcbiAgICAgICAgc2V0U2lkZWJhckhhc0Vycm9yKGZhbHNlKVxuICAgICAgfVxuICAgICAgaWYgKHNob3VsZFVzZUFjdGl2ZUNoYXRTZW5kSGFuZGxlcihjb21wdXRlZEN1cnJlbnRPcHRpb24sIG9wdGlvbnMuY2hhdCwgQm9vbGVhbihzZW5kTWVzc2FnZUZ1bmN0aW9uKSkpIHtcbiAgICAgICAgc2VuZE1lc3NhZ2VGdW5jdGlvbj8uKG1lc3NhZ2UsIGF0dGFjaG1lbnRzLCBmYXFJZCwgYWdlbnRTdWdnZXN0aW9uSWQsIG1lbnRpb25zLCBmdWFJZCwgc2NJZCwgY29udGV4dERhdGEpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzdGFydENoYXQobWVzc2FnZSwgYXR0YWNobWVudHMsIGZhcUlkLCBhZ2VudFN1Z2dlc3Rpb25JZCwgbWVudGlvbnMsIGZ1YUlkLCBzY0lkLCBjb250ZXh0RGF0YSlcbiAgICAgIH1cbiAgICB9LFxuICAgIFtzZW5kTWVzc2FnZUZ1bmN0aW9uLCBzdGFydENoYXQsIGNvbXB1dGVkQ3VycmVudE9wdGlvbiwgc2lkZWJhckhhc0Vycm9yXVxuICApXG5cbiAgY29uc3QgaGFuZGxlR29Ib21lID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIC8vIFNpIGVzdGFtb3MgZW4gdW5hIGNvbnZlcnNhY2nDs24geSB2YW1vcyBhIGhvbWUsIHJlc2V0ZWFyIGluaXRpYWxDaGF0SWQgeSBpbmNyZW1lbnRhciBuZXdDaGF0S2V5XG4gICAgaWYgKHNob3VsZFJlc2V0Q2hhdFN0YXRlT25Hb0hvbWUoY3VycmVudE9wdGlvbiwgb3B0aW9ucy5jaGF0KSkge1xuICAgICAgLy8gTm8gY29ydGFtb3MgbGEgZ2VuZXJhY2nDs246IGxhIHNlc2nDs24gc2lndWUgcmVzcG9uZGllbmRvIGVuIGJhY2tncm91bmQuXG4gICAgICBzZXRJbml0aWFsQ2hhdElkKG51bGwpXG4gICAgICBzZXROZXdDaGF0S2V5KHByZXYgPT4gcHJldiArIDEpXG4gICAgICBzZXRJc1dyaXRpbmcoZmFsc2UpXG4gICAgICBpZiAoc2hvdWxkQ2xlYXJDbGllbnRPbkdvSG9tZUZyb21DaGF0KGFnZW50Py5lbnRpdHkpKSB7XG4gICAgICAgIHNldENsaWVudD8uKG51bGwpXG4gICAgICB9XG4gICAgICBpZiAoc2hvdWxkQ2xlYXJUYXNrT25Hb0hvbWVGcm9tQ2hhdChzZWN0aW9uKSkge1xuICAgICAgICBzZXRUYXNrPy4obnVsbClcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHNob3VsZFJlc2V0QWdlbnRUb0ZpcnN0T25Hb0hvbWUoYWdlbnQsIGFnZW50cy5kYXRhLmxlbmd0aCkpIHtcbiAgICAgIHNlbGVjdEFnZW50KGFnZW50cy5kYXRhWzBdKVxuICAgIH1cbiAgICBpZiAoc2hvdWxkQ2xlYXJPcmNoZXN0cmF0b3JHbG9iYWxDb250ZXh0T25Hb0hvbWUoc2VjdGlvbiwgYWdlbnQ/LnR5cGUpKSB7XG4gICAgICBzZXRQcm9qZWN0KG51bGwpXG4gICAgICBzZXRDbGllbnQ/LihudWxsKVxuICAgICAgc2V0VGFzaz8uKG51bGwpXG4gICAgfVxuICAgIHNldEN1cnJlbnRPcHRpb24ob3B0aW9ucy5ob21lKVxuICAgIHNldENoaXBzUHJvamVjdChudWxsKVxuICAgIHNldEhhc0Vycm9yKGZhbHNlKVxuICAgIGlzV2ViU2VhcmNoQWN0aXZlICYmIHRvZ2dsZVdlYlNlYXJjaCgpXG4gIH0sIFtcbiAgICBvcHRpb25zLmhvbWUsXG4gICAgb3B0aW9ucy5jaGF0LFxuICAgIGN1cnJlbnRPcHRpb24sXG4gICAgaXNXZWJTZWFyY2hBY3RpdmUsXG4gICAgdG9nZ2xlV2ViU2VhcmNoLFxuICAgIGFnZW50LFxuICAgIGFnZW50cyxcbiAgICBzZWxlY3RBZ2VudCxcbiAgICBzZXRQcm9qZWN0LFxuICAgIHNldENsaWVudCxcbiAgICBzZXRUYXNrLFxuICAgIHN0b3BHZW5lcmF0aW9uRnVuY3Rpb24sXG4gICAgc2VjdGlvbixcbiAgXSlcblxuICBnb0hvbWVSZWYuY3VycmVudCA9IGhhbmRsZUdvSG9tZVxuXG4gIGNvbnN0IHN0YXJ0TmV3Q2hhdEZyb21DYXRhbG9nID0gdXNlQ2FsbGJhY2soYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGFnZW50c0xpc3QgPSBzaG91bGRQcmVmZXRjaEFnZW50c0ZvckNhdGFsb2dOZXdDaGF0KGNvbXB1dGVkQ3VycmVudE9wdGlvbiwgb3B0aW9ucy5teUFnZW50cywgb3B0aW9ucy5teVNraWxscylcbiAgICAgID8gYXdhaXQgZW5zdXJlQWdlbnRzTG9hZGVkKClcbiAgICAgIDogYWdlbnRzLmRhdGFcbiAgICBjb25zdCBmaXJzdEFnZW50ID0gYWdlbnRzTGlzdFswXVxuXG4gICAgaWYgKHNob3VsZENsZWFyQ29udGV4dEZvckNhdGFsb2dPclNraWxsQWdlbnQoZmlyc3RBZ2VudCkpIHtcbiAgICAgIHNldFByb2plY3QobnVsbClcbiAgICAgIHNldENsaWVudD8uKG51bGwpXG4gICAgICBzZXRUYXNrPy4obnVsbClcbiAgICAgIHNlbGVjdEFnZW50KGZpcnN0QWdlbnQpXG4gICAgfVxuICAgIHNldEluaXRpYWxDaGF0SWQobnVsbClcbiAgICBzZXROZXdDaGF0S2V5KHByZXYgPT4gcHJldiArIDEpXG4gICAgc2V0Q3VycmVudE9wdGlvbihvcHRpb25zLmhvbWUpXG4gICAgc2V0Q2hpcHNQcm9qZWN0KG51bGwpXG4gICAgc2V0SGFzRXJyb3IoZmFsc2UpXG4gICAgaWYgKGlzV2ViU2VhcmNoQWN0aXZlKSB0b2dnbGVXZWJTZWFyY2goKVxuICAgIGRvY3VtZW50LmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCdjaGF0LXNlc3Npb24tY2hhbmdlZCcpKVxuICB9LCBbXG4gICAgYWdlbnRzLmRhdGEsXG4gICAgY29tcHV0ZWRDdXJyZW50T3B0aW9uLFxuICAgIGVuc3VyZUFnZW50c0xvYWRlZCxcbiAgICBpc1dlYlNlYXJjaEFjdGl2ZSxcbiAgICBzZWxlY3RBZ2VudCxcbiAgICBzZXRDbGllbnQsXG4gICAgc2V0UHJvamVjdCxcbiAgICBzZXRUYXNrLFxuICAgIHRvZ2dsZVdlYlNlYXJjaCxcbiAgXSlcblxuICBjb25zdCBoYW5kbGVTdGFydE5ld0NoYXQgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgaWYgKHNob3VsZFN0YXJ0TmV3Q2hhdEZyb21DYXRhbG9nKGNvbXB1dGVkQ3VycmVudE9wdGlvbiwgaXNNYWlha2VyQWdlbnRTZWxlY3RlZCkpIHtcbiAgICAgIHN0YXJ0TmV3Q2hhdEZyb21DYXRhbG9nKCkuY2F0Y2goKCkgPT4gdW5kZWZpbmVkKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgaGFuZGxlR29Ib21lKClcbiAgfSwgW2NvbXB1dGVkQ3VycmVudE9wdGlvbiwgaGFuZGxlR29Ib21lLCBpc01haWFrZXJBZ2VudFNlbGVjdGVkLCBzdGFydE5ld0NoYXRGcm9tQ2F0YWxvZ10pXG5cbiAgY29uc3QgaGFuZGxlUmVzZXRDaGF0ID0gdXNlQ2FsbGJhY2soYXN5bmMgKCkgPT4ge1xuICAgIHNldFVzZXJJbml0aWFsTWVzc2FnZSh7IG1lc3NhZ2U6ICcnLCBhdHRhY2htZW50czogW10gfSlcbiAgICBzZXRJbml0aWFsQ2hhdElkKG51bGwpXG4gICAgLy8gRGlzcGF0Y2ggZXZlbnQgdG8gY2xlYXIgdGhlIGlucHV0IHRleHRhcmVhXG4gICAgZG9jdW1lbnQuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoJ2NoYXQtc2Vzc2lvbi1jaGFuZ2VkJykpXG4gICAgaGFuZGxlR29Ib21lKClcbiAgfSwgW2hhbmRsZUdvSG9tZV0pXG5cbiAgLy8gQm90w7NuIFwidm9sdmVyXCIgZGVsIGhlYWRlciAoc29sbyBvcmNoZXN0cmF0b3IpOlxuICAvLyAtIERlc2RlIGVsIGNoYXQgKGhlYWRlciBvIHByb2plY3QvY2xpZW50L3Rhc2spOiBpbmljaWEgdW5hIGNvbnZlcnNhY2nDs24gbnVldmEgY29uc2VydmFuZG8gZWxcbiAgLy8gICBjb250ZXh0byBwaW5lYWRvIHkgdnVlbHZlIGFsIGhvbWUgKHBhc28gMiBjb24gRkFRcy9GVUFzKS5cbiAgLy8gLSBFbiBlbCBob21lIHBhc28gMiAoRkFRcy9GVUFzIGNvbiBjb250ZXh0byk6IGxpbXBpYSBlbCBjb250ZXh0byBwaW5lYWRvIHkgdnVlbHZlIGFsIHBhc28gMVxuICAvLyAgIChzZWxlY3RvciBkZSBjb250ZXh0b3MgcmVjaWVudGVzKS4gRW4gaGVhZGVyIHNpZW1wcmU7IGVuIHByb2plY3QvY2xpZW50L3Rhc2sgc29sbyBzaSBlbFxuICAvLyAgIHVzdWFyaW8gcmVpbmljacOzIGVsIGNvbnRleHRvIChkaWRSZXNldENvbnRleHRJblNlY3Rpb24pLlxuICBjb25zdCBoYW5kbGVCYWNrID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGNvbnN0IHRvID0gcmVzb2x2ZUFpQ2hhdEJhY2tEZXN0aW5hdGlvbihzZWN0aW9uLCBhZ2VudD8udHlwZSwgY29tcHV0ZWRDdXJyZW50T3B0aW9uLCBvcHRpb25zLmhvbWUpXG4gICAgYW1wbGl0dWRFdmVudChFVkVOVFMuYWlDaGF0QmFjaywgeyB0byB9KVxuXG4gICAgLy8gRGVzZGUgZWwgY2hhdCDihpIgbnVldmEgY29udmVyc2FjacOzbiBTSU4gYm9ycmFyIGVsIGNvbnRleHRvIHBpbmVhZG8sIHZvbHZpZW5kbyBhbCBob21lLlxuICAgIGlmIChzaG91bGRCYWNrU3RhcnROZXdDaGF0UHJlc2VydmluZ0NvbnRleHQoY29tcHV0ZWRDdXJyZW50T3B0aW9uLCBvcHRpb25zLmNoYXQpKSB7XG4gICAgICAvLyBObyBjb3J0YW1vcyBsYSBnZW5lcmFjacOzbjogbGEgc2VzacOzbiBzaWd1ZSByZXNwb25kaWVuZG8gZW4gYmFja2dyb3VuZC5cbiAgICAgIHNldElzV3JpdGluZyhmYWxzZSlcbiAgICAgIHNldFVzZXJJbml0aWFsTWVzc2FnZSh7IG1lc3NhZ2U6ICcnLCBhdHRhY2htZW50czogW10gfSlcbiAgICAgIHNldEluaXRpYWxDaGF0SWQobnVsbClcbiAgICAgIHNldE5ld0NoYXRLZXkocHJldiA9PiBwcmV2ICsgMSlcbiAgICAgIHNldEhhc0Vycm9yKGZhbHNlKVxuICAgICAgaXNXZWJTZWFyY2hBY3RpdmUgJiYgdG9nZ2xlV2ViU2VhcmNoKClcbiAgICAgIHNldEN1cnJlbnRPcHRpb24ob3B0aW9ucy5ob21lKVxuICAgICAgZG9jdW1lbnQuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoJ2NoYXQtc2Vzc2lvbi1jaGFuZ2VkJykpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICAvLyBIb21lIHBhc28gMiAoY29udGV4dG8gcGluZWFkbykg4oaSIGxpbXBpYXIgZWwgY29udGV4dG8geSB2b2x2ZXIgYWwgcGFzbyAxIChjb250ZXh0b3MgcmVjaWVudGVzKS5cbiAgICBpZiAoc2hvdWxkQmFja0NsZWFyUGlubmVkQ29udGV4dChjb21wdXRlZEN1cnJlbnRPcHRpb24sIG9wdGlvbnMuaG9tZSwgc2VjdGlvbiwgZGlkUmVzZXRDb250ZXh0SW5TZWN0aW9uKSkge1xuICAgICAgc2V0UHJvamVjdChudWxsKVxuICAgICAgc2V0Q2xpZW50Py4obnVsbClcbiAgICAgIHNldFRhc2s/LihudWxsKVxuICAgICAgc2V0Q2hpcHNQcm9qZWN0KG51bGwpXG4gICAgfVxuICB9LCBbXG4gICAgY29tcHV0ZWRDdXJyZW50T3B0aW9uLFxuICAgIHNlY3Rpb24sXG4gICAgYWdlbnQ/LnR5cGUsXG4gICAgYW1wbGl0dWRFdmVudCxcbiAgICBvcHRpb25zLmhvbWUsXG4gICAgc3RvcEdlbmVyYXRpb25GdW5jdGlvbixcbiAgICBpc1dlYlNlYXJjaEFjdGl2ZSxcbiAgICB0b2dnbGVXZWJTZWFyY2gsXG4gICAgZGlkUmVzZXRDb250ZXh0SW5TZWN0aW9uLFxuICAgIHNldFByb2plY3QsXG4gICAgc2V0Q2xpZW50LFxuICAgIHNldFRhc2ssXG4gICAgc2V0Q2hpcHNQcm9qZWN0LFxuICBdKVxuXG4gIC8vIERldGVjdGEgZWwgcmVpbmljaW8gZGUgY29udGV4dG8gZW4gcHJvamVjdC9jbGllbnQvdGFzazogY29udGV4dG8gcGluZWFkbyDihpIgdmFjw61vIGNvbiBlbFxuICAvLyBvcmNoZXN0cmF0b3IgKHAuIGVqLiBhbCByZXNlbGVjY2lvbmFyIE1BSUEgZW4gZWwgbGlzdGFkbykuIFNvbG8gbGEgdHJhbnNpY2nDs24gY3VlbnRhLCBhc8OtIHVuYVxuICAvLyBhcGVydHVyYSBmcmVzY2EgKGNvbnRleHRvIHBpbmVhZG8gZGVzZGUgbGEgc2VjY2nDs24pIG5vIGxvIGFjdGl2YS5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBwaW5uZWQgPSByZXNvbHZlSGFzUGlubmVkQ29udGV4dCh7XG4gICAgICB0YXNrSWQ6IHRhc2s/LmlkLFxuICAgICAgY2hpcHNQcm9qZWN0SWQ6IGNoaXBzUHJvamVjdD8ucHJvamVjdElkLFxuICAgICAgY2xpZW50SWQ6IGNsaWVudD8uaWQsXG4gICAgICBwcm9qZWN0SWQ6IHByb2plY3Q/LmlkLFxuICAgIH0pXG4gICAgY29uc3Qgd2FzUGlubmVkID0gcHJldkhhc1Bpbm5lZENvbnRleHRSZWYuY3VycmVudFxuICAgIHByZXZIYXNQaW5uZWRDb250ZXh0UmVmLmN1cnJlbnQgPSBwaW5uZWRcbiAgICBpZiAoc2hvdWxkTWFya09yY2hlc3RyYXRvckNvbnRleHRSZXNldChzZWN0aW9uLCBhZ2VudD8udHlwZSwgd2FzUGlubmVkLCBwaW5uZWQpKSB7XG4gICAgICBzZXREaWRSZXNldENvbnRleHRJblNlY3Rpb24odHJ1ZSlcbiAgICB9XG4gIH0sIFt0YXNrPy5pZCwgY2hpcHNQcm9qZWN0Py5wcm9qZWN0SWQsIGNsaWVudD8uaWQsIHByb2plY3Q/LmlkLCBzZWN0aW9uLCBhZ2VudD8udHlwZV0pXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBvbk1lcmdlQ3JlYXRlZEFnZW50ID0gKGV2dDogRXZlbnQpID0+IHtcbiAgICAgIGNvbnN0IHsgYWdlbnQ6IG5leHRBZ2VudCB9ID0gKGV2dCBhcyBDdXN0b21FdmVudDx7IGFnZW50OiBBZ2VudCB9PikuZGV0YWlsIHx8IHt9XG4gICAgICBpZiAobmV4dEFnZW50Py5pZCkge1xuICAgICAgICBhZGRBZ2VudChuZXh0QWdlbnQsIHsgbmF2aWdhdGVIb21lOiBmYWxzZSB9KVxuICAgICAgfVxuICAgIH1cbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtYWlhLW1lcmdlLWNyZWF0ZWQtYWdlbnQtaW50by1saXN0Jywgb25NZXJnZUNyZWF0ZWRBZ2VudClcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbWFpYS1tZXJnZS1jcmVhdGVkLWFnZW50LWludG8tbGlzdCcsIG9uTWVyZ2VDcmVhdGVkQWdlbnQpXG4gICAgfVxuICB9LCBbYWRkQWdlbnRdKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3Qgb25TeW5jRWRpdGVkQWdlbnQgPSAoZXZ0OiBFdmVudCkgPT4ge1xuICAgICAgY29uc3QgeyBhZ2VudDogbmV4dEFnZW50IH0gPSAoZXZ0IGFzIEN1c3RvbUV2ZW50PHsgYWdlbnQ6IEFnZW50IH0+KS5kZXRhaWwgfHwge31cbiAgICAgIGlmICghbmV4dEFnZW50Py5pZCkgcmV0dXJuXG4gICAgICB1cGRhdGVBZ2VudChuZXh0QWdlbnQpXG4gICAgICBpZiAoYWdlbnQ/LmlkID09PSBuZXh0QWdlbnQuaWQpIHtcbiAgICAgICAgc2VsZWN0QWdlbnQobmV4dEFnZW50KVxuICAgICAgfVxuICAgIH1cbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtYWlhLXN5bmMtZWRpdGVkLWFnZW50LWZyb20tY2hhdCcsIG9uU3luY0VkaXRlZEFnZW50KVxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtYWlhLXN5bmMtZWRpdGVkLWFnZW50LWZyb20tY2hhdCcsIG9uU3luY0VkaXRlZEFnZW50KVxuICAgIH1cbiAgfSwgW3VwZGF0ZUFnZW50LCBzZWxlY3RBZ2VudCwgYWdlbnQ/LmlkXSlcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IG9wZW5DaGF0VmlldyA9ICgpID0+IHtcbiAgICAgIHNldEhhc0Vycm9yKGZhbHNlKVxuICAgICAgc2V0SW5pdGlhbENoYXRJZChudWxsKVxuICAgICAgc2V0TmV3Q2hhdEtleShwcmV2ID0+IHByZXYgKyAxKVxuICAgICAgc2V0VXNlckluaXRpYWxNZXNzYWdlKHsgbWVzc2FnZTogJycsIGF0dGFjaG1lbnRzOiBbXSB9KVxuICAgICAgc2V0Q3VycmVudE9wdGlvbihvcHRpb25zLmNoYXQpXG4gICAgICBkb2N1bWVudC5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgnY2hhdC1zZXNzaW9uLWNoYW5nZWQnKSlcbiAgICB9XG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbWFpYS1vcGVuLWNoYXQtdmlldycsIG9wZW5DaGF0VmlldylcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbWFpYS1vcGVuLWNoYXQtdmlldycsIG9wZW5DaGF0VmlldylcbiAgICB9XG4gIH0sIFtdKVxuXG4gIC8qKlxuICAgKiBFbCDDrWNvbm8gZGUgTUFJQSBkZWwgaGVhZGVyIGxsZXZhIHNpZW1wcmUgYWwgSG9tZS4gU2kgTUFJQSB5YSBlc3TDoSBtb250YWRhIHBlcm9cbiAgICogbWluaW1pemFkYSwgZWwgaG9zdCBubyBwdWVkZSByZXNvbHZlcmxvIGNhbWJpYW5kbyBgaXNPcGVuYCAoeWEgZXN0w6EgZW4gdHJ1ZSksXG4gICAqIGFzw60gcXVlIGF2aXNhIHBvciBldmVudG8geSBhY8OhIHJlc3RhdXJhbW9zIHkgdmFtb3MgYWwgSG9tZS5cbiAgICovXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3Qgb3BlbkhvbWUgPSAoKSA9PiB7XG4gICAgICBhcHBseUV4cGFuZGVkSG9zdFRha2VvdmVyKHtcbiAgICAgICAgc2VjdGlvbjogJ2hlYWRlcicsXG4gICAgICAgIGVudGl0eTogeyBwcm9qZWN0SWQ6IG51bGwsIGNsaWVudElkOiBudWxsIH0sXG4gICAgICB9KVxuICAgIH1cbiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtYWlhLW9wZW4taG9tZScsIG9wZW5Ib21lKVxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtYWlhLW9wZW4taG9tZScsIG9wZW5Ib21lKVxuICAgIH1cbiAgfSwgW2FwcGx5RXhwYW5kZWRIb3N0VGFrZW92ZXJdKVxuXG4gIC8qKlxuICAgKiBPdHJvIGhvc3QgKHByb3llY3RvLCBjbGllbnRlLCBiYW5uZXIsIGhlYWRlcuKApikgcGlkZSBhYnJpciBNQUlBIG1pZW50cmFzIHlhIGhheSB1bmFcbiAgICogaW5zdGFuY2lhIG1vbnRhZGEuIEV4cGFuZGUgc2kgZXN0YWJhIG1pbmltaXphZG8sIGFwbGljYSBlbCBjb250ZXh0byBkZWwgaG9zdCBudWV2b1xuICAgKiB5IHZhIGFsIGhvbWUg4oCUIHNpbiByZXN0YXVyYXIgbGEgY29udmVyc2FjacOzbiBwcmV2aWEgKGVzbyBsbyBoYWNlIGVsIHBpbGwpLlxuICAgKi9cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBvcGVuRnJvbUhvc3QgPSAoZXZlbnQ6IEV2ZW50KSA9PiB7XG4gICAgICBjb25zdCB7IGRldGFpbCB9ID0gZXZlbnQgYXMgQ3VzdG9tRXZlbnQ8TWFpYUhvc3RPcGVuRGV0YWlsPlxuICAgICAgaWYgKCFkZXRhaWwpIHJldHVyblxuICAgICAgYXBwbHlFeHBhbmRlZEhvc3RUYWtlb3ZlcihkZXRhaWwpXG4gICAgfVxuXG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihNQUlBX09QRU5fRlJPTV9IT1NUX0VWRU5ULCBvcGVuRnJvbUhvc3QpXG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoTUFJQV9PUEVOX0ZST01fSE9TVF9FVkVOVCwgb3BlbkZyb21Ib3N0KVxuICAgIH1cbiAgfSwgW2FwcGx5RXhwYW5kZWRIb3N0VGFrZW92ZXJdKVxuXG4gIC8qKiBNaXNtbyBmbHVqbyBxdWUgQ2hhdEFJTXlBZ2VudHMuaGFuZGxlVXNlQWdlbnQgKyBvbkJhY2sgKGhhbmRsZXJzLmhvbWUpLlxuICAgKiAgRWwgZGV0YWlsIHB1ZWRlIHRyYWVyIG9wY2lvbmFsbWVudGUgYHByb2plY3RgLCBgY2xpZW50YCwgYHRhc2tgIHBhcmEgZmxvd3MgcXVlXG4gICAqICBuZWNlc2l0YW4gcHJlc2VydmFyIGNvbnRleHRvIChlai4gc2VsZWN0b3IgZGUgYWdlbnRlcyBkZXNkZSB1bmEgdGFyZWEpLiBTaSBubyB2aWVuZW4sXG4gICAqICBzZSBtYW50aWVuZSBlbCBjb21wb3J0YW1pZW50byBvcmlnaW5hbCBkZSBsaW1waWFyIHByb2plY3QvY2xpZW50LiAqL1xuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IG9wZW5OZXdDaGF0V2l0aEFnZW50ID0gKGV2ZW50OiBFdmVudCkgPT4ge1xuICAgICAgY29uc3QgeyBkZXRhaWwgfSA9IGV2ZW50IGFzIEN1c3RvbUV2ZW50PHtcbiAgICAgICAgYWdlbnQ6IEFnZW50XG4gICAgICAgIHByb2plY3Q/OiBQcm9qZWN0IHwgbnVsbFxuICAgICAgICBjbGllbnQ/OiBDbGllbnQgfCBudWxsXG4gICAgICAgIHRhc2s/OiBUYXNrIHwgbnVsbFxuICAgICAgfT5cbiAgICAgIGNvbnN0IG5leHRBZ2VudCA9IGRldGFpbD8uYWdlbnRcbiAgICAgIGlmICghbmV4dEFnZW50KSByZXR1cm5cblxuICAgICAgY29uc3QgY29udGV4dFBhdGNoID0gcmVzb2x2ZU9wZW5OZXdDaGF0V2l0aEFnZW50Q29udGV4dChkZXRhaWwgPz8ge30pXG4gICAgICBzZXRQcm9qZWN0KGNvbnRleHRQYXRjaC5wcm9qZWN0KVxuICAgICAgc2V0Q2xpZW50Py4oY29udGV4dFBhdGNoLmNsaWVudClcbiAgICAgIGlmIChjb250ZXh0UGF0Y2guc2hvdWxkU2V0VGFzaykge1xuICAgICAgICBzZXRUYXNrPy4oY29udGV4dFBhdGNoLnRhc2sgPz8gbnVsbClcbiAgICAgIH1cbiAgICAgIHNlbGVjdEFnZW50KG5leHRBZ2VudClcbiAgICAgIHNldEhhc0Vycm9yKGZhbHNlKVxuICAgICAgc2V0Q3VycmVudE9wdGlvbihvcHRpb25zLmhvbWUpXG4gICAgfVxuXG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbWFpYS1vcGVuLW5ldy1jaGF0LXdpdGgtYWdlbnQnLCBvcGVuTmV3Q2hhdFdpdGhBZ2VudClcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbWFpYS1vcGVuLW5ldy1jaGF0LXdpdGgtYWdlbnQnLCBvcGVuTmV3Q2hhdFdpdGhBZ2VudClcbiAgICB9XG4gIH0sIFtzZWxlY3RBZ2VudCwgc2V0Q2xpZW50LCBzZXRQcm9qZWN0LCBzZXRUYXNrXSlcblxuICBjb25zdCBhcHBseVNraWxsVXNlRmxvdyA9IHVzZUNhbGxiYWNrKFxuICAgIGFzeW5jIChza2lsbDogU2tpbGwsIHVzZUZpcnN0QWdlbnQ6IGJvb2xlYW4pID0+IHtcbiAgICAgIGNvbnN0IGZpcnN0QWdlbnQgPSBhd2FpdCBlbnN1cmVBZ2VudHNCZWZvcmVTa2lsbFVzZSh7XG4gICAgICAgIHVzZUZpcnN0QWdlbnQsXG4gICAgICAgIGFnZW50czogYWdlbnRzRGF0YVJlZi5jdXJyZW50LFxuICAgICAgICBlbnN1cmVBZ2VudHNMb2FkZWQsXG4gICAgICB9KVxuXG4gICAgICBpZiAoc2hvdWxkQ2xlYXJDb250ZXh0Rm9yQ2F0YWxvZ09yU2tpbGxBZ2VudChmaXJzdEFnZW50KSkge1xuICAgICAgICBzZXRQcm9qZWN0KG51bGwpXG4gICAgICAgIHNldENsaWVudD8uKG51bGwpXG4gICAgICAgIHNldFRhc2s/LihudWxsKVxuICAgICAgICBzZWxlY3RBZ2VudChmaXJzdEFnZW50KVxuICAgICAgfVxuXG4gICAgICBzZXRIYXNFcnJvcihmYWxzZSlcbiAgICAgIHNldEluaXRpYWxDaGF0SWQobnVsbClcbiAgICAgIHNldE5ld0NoYXRLZXkocHJldiA9PiBwcmV2ICsgMSlcbiAgICAgIHNldFVzZXJJbml0aWFsTWVzc2FnZSh7IG1lc3NhZ2U6ICcnLCBhdHRhY2htZW50czogW10gfSlcbiAgICAgIHNldEN1cnJlbnRPcHRpb24ob3B0aW9ucy5ob21lKVxuICAgICAgZG9jdW1lbnQuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoJ2NoYXQtc2Vzc2lvbi1jaGFuZ2VkJykpXG4gICAgICBkaXNwYXRjaFNraWxsTWVudGlvbkluc2VydChza2lsbClcbiAgICB9LFxuICAgIFtlbnN1cmVBZ2VudHNMb2FkZWQsIHNlbGVjdEFnZW50LCBzZXRDbGllbnQsIHNldFByb2plY3QsIHNldFRhc2tdXG4gIClcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IGhhbmRsZVVzZVNraWxsQWZ0ZXJTYXZlID0gKGV2ZW50OiBFdmVudCkgPT4ge1xuICAgICAgY29uc3QgeyBza2lsbCwgdXNlRmlyc3RBZ2VudCA9IGZhbHNlIH0gPVxuICAgICAgICAoZXZlbnQgYXMgQ3VzdG9tRXZlbnQ8eyBza2lsbDogU2tpbGw7IHVzZUZpcnN0QWdlbnQ/OiBib29sZWFuIH0+KS5kZXRhaWwgfHwge31cbiAgICAgIGlmICghc2tpbGwpIHJldHVyblxuXG4gICAgICBhcHBseVNraWxsVXNlRmxvdyhza2lsbCwgdXNlRmlyc3RBZ2VudCkuY2F0Y2goKCkgPT4gdW5kZWZpbmVkKVxuICAgIH1cblxuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoU0tJTExfVVNFX0FGVEVSX1NBVkVfRVZFTlQsIGhhbmRsZVVzZVNraWxsQWZ0ZXJTYXZlKVxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFNLSUxMX1VTRV9BRlRFUl9TQVZFX0VWRU5ULCBoYW5kbGVVc2VTa2lsbEFmdGVyU2F2ZSlcbiAgICB9XG4gIH0sIFthcHBseVNraWxsVXNlRmxvd10pXG5cbiAgLy8gTWV0YWRhdGEgZGUgbGEgc2Vzc2lvbiBhYmllcnRhIChhZ2VudF90eXBlL2FnZW50X2VudGl0eSArIGNvbnRleHRvKSwgZW1pdGlkYSBwb3IgdXNlQ2hhdE1lc3NhZ2VzLlxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IG9uU2Vzc2lvbk1ldGEgPSAoZXZ0OiBFdmVudCkgPT4ge1xuICAgICAgY29uc3QgeyBkZXRhaWwgfSA9IGV2dCBhcyBDdXN0b21FdmVudDxTZXNzaW9uTWV0YT5cbiAgICAgIGlmIChkZXRhaWwpIHNldFNlc3Npb25NZXRhKGRldGFpbClcbiAgICB9XG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbWFpYS1jaGF0LXNlc3Npb24tbWV0YScsIG9uU2Vzc2lvbk1ldGEpXG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21haWEtY2hhdC1zZXNzaW9uLW1ldGEnLCBvblNlc3Npb25NZXRhKVxuICAgIH1cbiAgfSwgW10pXG5cbiAgLy8gQWwgY2FtYmlhciBkZSBjb252ZXJzYWNpw7NuIGxpbXBpYW1vcyBsYSBtZXRhZGF0YTsgZWwgbG9hZCBkZSBsYSBudWV2YSBzZXNzaW9uIGxhIHZ1ZWx2ZSBhIGVtaXRpci5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBzZXRTZXNzaW9uTWV0YShudWxsKVxuICB9LCBbaW5pdGlhbENoYXRJZF0pXG5cbiAgLy8gQ2FydGVsIFwiY29udGludWFyIGVuIHVuIGNoYXQgbnVldm9cIjogc2UgbXVlc3RyYSBhbCBhYnJpciB1bmEgY29udmVyc2FjacOzbiBkZSB1biBjbG9uZSBsZWdhY3lcbiAgLy8gKGFnZW50X3R5cGUgPT09ICdjbG9uZScgY29uIGVudGl0eSBwcm9qZWN0L3Rhc2svY2xpZW50KS4gRWwgaW5wdXQgc2UgcmVlbXBsYXphIHBvciBlbCBjYXJ0ZWwuXG4gIGNvbnN0IGxlZ2FjeUNvbnRleHRTZXNzaW9uID0gdXNlTWVtbyhcbiAgICAoKSA9PiByZXNvbHZlTGVnYWN5Q29udGV4dFNlc3Npb24oY29tcHV0ZWRDdXJyZW50T3B0aW9uLCBvcHRpb25zLmNoYXQsIHNlc3Npb25NZXRhKSxcbiAgICBbY29tcHV0ZWRDdXJyZW50T3B0aW9uLCBzZXNzaW9uTWV0YV1cbiAgKVxuXG4gIC8vIE1hcmNhIGVsIGFnZW50ZSBkZSBsYSBjb252ZXJzYWNpw7NuIGxlZ2FjeSBwYXJhIHF1ZSBoZWFkZXIsIHNlbGVjdG9yIHkgYXZhdGFyIG11ZXN0cmVuIGVsIGxvZ29cbiAgLy8gTUFJQSB5IGVsIG5vbWJyZSB0YWNoYWRvIChhZ2VudGUgb2Jzb2xldG8pLCBzaW4gZGVwZW5kZXIgZGVsIGB0eXBlYCByZXN1ZWx0byBkZSBsYSBzZXNpw7NuIHZpZWphLlxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChzaG91bGRNYXJrQWdlbnRBc0xlZ2FjeUNvbnRleHQobGVnYWN5Q29udGV4dFNlc3Npb24sIGFnZW50KSkge1xuICAgICAgc2VsZWN0QWdlbnQoYnVpbGRMZWdhY3lDb250ZXh0QWdlbnQoYWdlbnQpKVxuICAgIH1cbiAgfSwgW2xlZ2FjeUNvbnRleHRTZXNzaW9uLCBhZ2VudCwgc2VsZWN0QWdlbnRdKVxuXG4gIC8vIEFicmUgdW4gY2hhdCBudWV2byBjb24gZWwgb3JjaGVzdHJhdG9yIHNldGVhbmRvIGVsIGNvbnRleHRvIGRlbCBjbG9uZSBsZWdhY3kgKG1pc21vIGNyaXRlcmlvXG4gIC8vIHF1ZSBjbGlja2VhciB1biBjb250ZXh0byByZWNpZW50ZSBlbiBlbCBob21lIOKGkiBwYXNvIDIgY29uIEZBUXMvYWNjaW9uZXMgZGUgZXNlIGNvbnRleHRvKS5cbiAgY29uc3QgaGFuZGxlQ29udGludWVMZWdhY3lDb250ZXh0SW5OZXdDaGF0ID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGNvbnN0IG9yY2hlc3RyYXRvciA9IGZpbmRPcmNoZXN0cmF0b3JBZ2VudChhZ2VudHMuZGF0YSlcbiAgICBpZiAoIWNhbkNvbnRpbnVlTGVnYWN5Q29udGV4dEluTmV3Q2hhdChzZXNzaW9uTWV0YSwgb3JjaGVzdHJhdG9yKSB8fCAhc2Vzc2lvbk1ldGEgfHwgIW9yY2hlc3RyYXRvcikge1xuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGNvbnN0IHtcbiAgICAgIGFnZW50RW50aXR5LFxuICAgICAgcHJvamVjdElkOiBwSWQsXG4gICAgICBwcm9qZWN0TmFtZTogcE5hbWUsXG4gICAgICBjbGllbnRJZDogY0lkLFxuICAgICAgY2xpZW50TmFtZTogY05hbWUsXG4gICAgICB0YXNrSWQ6IHRJZCxcbiAgICAgIHRhc2tOYW1lOiB0TmFtZSxcbiAgICB9ID0gc2Vzc2lvbk1ldGFcblxuICAgIGNvbnN0IG1pZ3JhdGlvblBhdGNoID0gYnVpbGRMZWdhY3lDb250ZXh0TWlncmF0aW9uUGF0Y2goe1xuICAgICAgYWdlbnRFbnRpdHksXG4gICAgICBwcm9qZWN0SWQ6IHBJZCxcbiAgICAgIHByb2plY3ROYW1lOiBwTmFtZSxcbiAgICAgIGNsaWVudElkOiBjSWQsXG4gICAgICBjbGllbnROYW1lOiBjTmFtZSxcbiAgICAgIHRhc2tJZDogdElkLFxuICAgICAgdGFza05hbWU6IHROYW1lLFxuICAgIH0pID8/IHsgdGFzazogbnVsbCwgcHJvamVjdDogbnVsbCwgY2xpZW50OiBudWxsLCBjaGlwc1Byb2plY3Q6IG51bGwgfVxuXG4gICAgc2V0SXNXcml0aW5nKGZhbHNlKVxuICAgIHNldFVzZXJJbml0aWFsTWVzc2FnZSh7IG1lc3NhZ2U6ICcnLCBhdHRhY2htZW50czogW10gfSlcbiAgICBzZXRJbml0aWFsQ2hhdElkKG51bGwpXG4gICAgc2V0TmV3Q2hhdEtleShwcmV2ID0+IHByZXYgKyAxKVxuICAgIHNldEhhc0Vycm9yKGZhbHNlKVxuXG4gICAgc2V0VGFzaz8uKG1pZ3JhdGlvblBhdGNoLnRhc2spXG4gICAgc2V0UHJvamVjdChtaWdyYXRpb25QYXRjaC5wcm9qZWN0KVxuICAgIHNldENsaWVudD8uKG1pZ3JhdGlvblBhdGNoLmNsaWVudClcbiAgICBzZXRDaGlwc1Byb2plY3QobWlncmF0aW9uUGF0Y2guY2hpcHNQcm9qZWN0KVxuXG4gICAgc2VsZWN0QWdlbnQob3JjaGVzdHJhdG9yKVxuICAgIHNldFNlc3Npb25NZXRhKG51bGwpXG4gICAgc2V0Q3VycmVudE9wdGlvbihvcHRpb25zLmhvbWUpXG4gICAgZG9jdW1lbnQuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoJ2NoYXQtc2Vzc2lvbi1jaGFuZ2VkJykpXG4gIH0sIFtzZXNzaW9uTWV0YSwgYWdlbnRzLmRhdGEsIHNlbGVjdEFnZW50LCBzZXRDbGllbnQsIHNldFByb2plY3QsIHNldFRhc2ssIHNldENoaXBzUHJvamVjdCwgc3RvcEdlbmVyYXRpb25GdW5jdGlvbl0pXG5cbiAgY29uc3QgeyBzaG93TmV3Q2hhdCwgaXNNeUFnZW50c1NlY3Rpb24sIGlzTXlTa2lsbHNTZWN0aW9uLCBpc01haWFrZXJDcmVhdG9ySG9tZSB9ID0gdXNlTWVtbyhcbiAgICAoKSA9PiByZXNvbHZlQ2hhdE1vZGFsU2VjdGlvbkZsYWdzKGNvbXB1dGVkQ3VycmVudE9wdGlvbiwgaXNNYWlha2VyQWdlbnRTZWxlY3RlZCksXG4gICAgW2NvbXB1dGVkQ3VycmVudE9wdGlvbiwgaXNNYWlha2VyQWdlbnRTZWxlY3RlZF1cbiAgKVxuXG4gIGNvbnN0IGhhc0NoYXRBY2Nlc3MgPSB2YWxpZGF0ZUFjY2Vzc0J5RmVhdHVyZShzZWN0aW9uLCB1c2VyKVxuICBjb25zdCBtYWluQ29udGVudFZpZXcgPSByZXNvbHZlQ2hhdE1vZGFsTWFpbkNvbnRlbnRWaWV3KGhhc0Vycm9yLCBoYXNDaGF0QWNjZXNzKVxuICBjb25zdCBzaG93TW9kYWxGb290ZXIgPSBzaG91bGRTaG93Q2hhdE1vZGFsRm9vdGVyKHtcbiAgICBjb21wdXRlZEN1cnJlbnRPcHRpb24sXG4gICAgaG9tZU9wdGlvbjogb3B0aW9ucy5ob21lLFxuICAgIGNoYXRPcHRpb246IG9wdGlvbnMuY2hhdCxcbiAgICBhZ2VudHNDb3VudDogYWdlbnRzLmRhdGEubGVuZ3RoLFxuICAgIGlzTWFpYWtlckNyZWF0b3JIb21lLFxuICAgIGhhc0Vycm9yLFxuICAgIGxvYWRpbmcsXG4gICAgaGFzQWNjZXNzOiBoYXNDaGF0QWNjZXNzLFxuICB9KVxuICBjb25zdCBzaG93U2lkZWJhciA9IHNob3VsZFJlbmRlckNoYXRTaWRlYmFyKGhhc0NoYXRBY2Nlc3MsIGlzRmxvYXRpbmcsIGlzTWFpYVBhZ2VSb3V0ZSlcblxuICAvLyBCb3TDs24gXCJ2b2x2ZXJcIjogc29sbyBwYXJhIGVsIG9yY2hlc3RyYXRvci5cbiAgLy8gLSBFbiBlbCBjaGF0OiBkaXNwb25pYmxlIGVuIHRvZGFzIGxhcyBzZWNjaW9uZXMgKGhlYWRlciB5IHByb2plY3QvY2xpZW50L3Rhc2spLlxuICAvLyAtIEVuIGVsIGhvbWUgcGFzbyAyIChGQVFzL0ZVQXMgY29uIGNvbnRleHRvIHBpbmVhZG8pOiBlbiBlbCBoZWFkZXIgc2llbXByZTsgZW5cbiAgLy8gICBwcm9qZWN0L2NsaWVudC90YXNrIHNvbG8gc2kgZWwgdXN1YXJpbyByZWluaWNpw7MgZWwgY29udGV4dG8gKHBhc8OzIHBvciBlbCBzZWxlY3RvciBkZVxuICAvLyAgIGNvbnRleHRvcyByZWNpZW50ZXMpLiBFbiBlbCBwYXNvIDEgKHNpbiBjb250ZXh0bykgTk8gc2UgbXVlc3RyYS5cbiAgY29uc3QgaGFzUGlubmVkQ29udGV4dCA9IHJlc29sdmVIYXNQaW5uZWRDb250ZXh0KHtcbiAgICB0YXNrSWQ6IHRhc2s/LmlkLFxuICAgIGNoaXBzUHJvamVjdElkOiBjaGlwc1Byb2plY3Q/LnByb2plY3RJZCxcbiAgICBjbGllbnRJZDogY2xpZW50Py5pZCxcbiAgICBwcm9qZWN0SWQ6IHByb2plY3Q/LmlkLFxuICB9KVxuICBjb25zdCB7IGlzQ2hhdFZpZXcsIGlzSGVhZGVySG9tZVN0ZXAyLCBpc1NlY3Rpb25SZXNldEhvbWVTdGVwMiB9ID0gcmVzb2x2ZU9yY2hlc3RyYXRvckhvbWVOYXZGbGFncyh7XG4gICAgY29tcHV0ZWRDdXJyZW50T3B0aW9uLFxuICAgIGhvbWVPcHRpb246IG9wdGlvbnMuaG9tZSxcbiAgICBjaGF0T3B0aW9uOiBvcHRpb25zLmNoYXQsXG4gICAgaGFzUGlubmVkQ29udGV4dCxcbiAgICBzZWN0aW9uLFxuICAgIGRpZFJlc2V0Q29udGV4dEluU2VjdGlvbixcbiAgfSlcbiAgY29uc3Qgc2hvd0JhY2tCdXR0b24gPSBzaG91bGRTaG93T3JjaGVzdHJhdG9yQmFja0J1dHRvbih7XG4gICAgYWdlbnRUeXBlOiBhZ2VudD8udHlwZSxcbiAgICBoYXNFcnJvcixcbiAgICBsb2FkaW5nLFxuICAgIGlzQ2hhdFZpZXcsXG4gICAgaXNIZWFkZXJIb21lU3RlcDIsXG4gICAgaXNTZWN0aW9uUmVzZXRIb21lU3RlcDIsXG4gIH0pXG4gIGNvbnN0IGhhbmRsZU9wZW5NYXJrZXRwbGFjZSA9IHVzZUNhbGxiYWNrKGFzeW5jICgpID0+IHtcbiAgICBpZiAoIWNhbk9wZW5NYWlhTWFya2V0cGxhY2UoQm9vbGVhbih3aW5kb3cuTUFJQV9DSEFUX0FJX0ZFQVRVUkVfQUNDRVNTX01VTFRJX0FHRU5UUykpKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgYXdhaXQgZW5zdXJlQWdlbnRzTG9hZGVkKClcbiAgICBjbGVhckFnZW50KClcbiAgICBzZXRDdXJyZW50T3B0aW9uKG9wdGlvbnMubXlBZ2VudHMpXG4gICAgcGF0Y2hNYWlhUGFuZWxTZXNzaW9uKHVzZXIuaWQsIHtcbiAgICAgIGFnZW50c05hdkFjdGl2ZTogJ215QWdlbnRzJyxcbiAgICAgIGN1cnJlbnRPcHRpb246IG9wdGlvbnMubXlBZ2VudHMsXG4gICAgICBhY3RpdmVDaGF0SWQ6IG51bGwsXG4gICAgICBhZ2VudElkOiBudWxsLFxuICAgIH0pXG4gIH0sIFtjbGVhckFnZW50LCBlbnN1cmVBZ2VudHNMb2FkZWQsIHVzZXIuaWRdKVxuXG4gIGNvbnN0IGhhbmRsZU9wZW5Ta2lsbHMgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgaWYgKCFzaG91bGRPcGVuU2tpbGxzQ2F0YWxvZyh1c2VySGFzU2tpbGxzQWNjZXNzKSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGNsZWFyQWdlbnQoKVxuICAgIHNldEhhc0Vycm9yKGZhbHNlKVxuICAgIHNldEN1cnJlbnRPcHRpb24ob3B0aW9ucy5teVNraWxscylcbiAgICBoYW5kbGVHZXRTa2lsbHMoKVxuICAgIHBhdGNoTWFpYVBhbmVsU2Vzc2lvbih1c2VyLmlkLCB7XG4gICAgICBhZ2VudHNOYXZBY3RpdmU6ICdteVNraWxscycsXG4gICAgICBjdXJyZW50T3B0aW9uOiBvcHRpb25zLm15U2tpbGxzLFxuICAgIH0pXG4gIH0sIFtjbGVhckFnZW50LCBoYW5kbGVHZXRTa2lsbHMsIHVzZXIuaWQsIHVzZXJIYXNTa2lsbHNBY2Nlc3NdKVxuXG4gIGNvbnN0IGhhbmRsZUdvVG9NYWlha2VyID0gdXNlQ2FsbGJhY2soYXN5bmMgKCkgPT4ge1xuICAgIHNldEhhc0Vycm9yKGZhbHNlKVxuICAgIGxldCBtYWlha2VyQWdlbnQgPSBhZ2VudHMuZGF0YS5maW5kKChhOiBBZ2VudCkgPT4gaXNNYXJrZXRwbGFjZUdsb2JhbENsb25lQWdlbnQoYSkpXG4gICAgaWYgKCFtYWlha2VyQWdlbnQpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2hNYWlhKHtcbiAgICAgICAgICBwYXRoOiBgYWdlbnRzP2FnZW50X3R5cGU9Y2xvbmUmZW50aXR5PWdsb2JhbCZsYW5nPSR7bWFwQ09STGFuZyhpMThuLmxhbmd1YWdlKX1gLFxuICAgICAgICAgIG1ldGhvZDogJ0dFVCcsXG4gICAgICAgIH0pXG4gICAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXNwb25zZS5qc29uKClcbiAgICAgICAgbWFpYWtlckFnZW50ID0gKGRhdGEuZGF0YSB8fCBbXSkuZmluZCgoYTogQWdlbnQpID0+IGlzTWFya2V0cGxhY2VHbG9iYWxDbG9uZUFnZW50KGEpKVxuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgIH1cbiAgICBpZiAoIW1haWFrZXJBZ2VudCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIHNldFByb2plY3QobnVsbClcbiAgICBzZXRDbGllbnQ/LihudWxsKVxuICAgIHNldFRhc2s/LihudWxsKVxuICAgIHNlbGVjdEFnZW50KG1haWFrZXJBZ2VudClcbiAgICBzZXRDdXJyZW50T3B0aW9uKG9wdGlvbnMuaG9tZSlcbiAgICBwYXRjaE1haWFQYW5lbFNlc3Npb24odXNlci5pZCwge1xuICAgICAgYWdlbnRzTmF2QWN0aXZlOiAnbWFpYWtlcicsXG4gICAgICBjdXJyZW50T3B0aW9uOiBvcHRpb25zLmhvbWUsXG4gICAgICBhZ2VudElkOiBtYWlha2VyQWdlbnQuaWQsXG4gICAgICBhY3RpdmVDaGF0SWQ6IG51bGwsXG4gICAgfSlcbiAgfSwgW2FnZW50cy5kYXRhLCBpMThuLmxhbmd1YWdlLCBzZWxlY3RBZ2VudCwgc2V0Q2xpZW50LCBzZXRQcm9qZWN0LCBzZXRUYXNrLCB1c2VyLmlkXSlcblxuICBjb25zdCBsb2FkQWdlbnRzRm9yU2Vzc2lvblJlc3RvcmUgPSB1c2VDYWxsYmFjayhcbiAgICBhc3luYyAoc25hcHNob3Q6IE1haWFQYW5lbFNlc3Npb25TbmFwc2hvdCk6IFByb21pc2U8dm9pZD4gPT4ge1xuICAgICAgaWYgKHNob3VsZFNraXBBZ2VudHNMb2FkT25TZXNzaW9uUmVzdG9yZShzbmFwc2hvdC5hZ2VudHNOYXZBY3RpdmUpKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBsZXQgYWdlbnRUb1NlbGVjdDogQWdlbnQgfCB1bmRlZmluZWRcbiAgICAgIGlmIChzaG91bGRGZXRjaEFnZW50RGV0YWlsT25TZXNzaW9uUmVzdG9yZShzbmFwc2hvdC5hZ2VudElkLCBzbmFwc2hvdC5hZ2VudHNOYXZBY3RpdmUpKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgYWdlbnRUb1NlbGVjdCA9IGF3YWl0IGZldGNoQWdlbnREZXRhaWwoc25hcHNob3QuYWdlbnRJZCBhcyBzdHJpbmcpXG4gICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgIGFnZW50VG9TZWxlY3QgPSB1bmRlZmluZWRcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoIWFnZW50c0ZldGNoZWRSZWYuY3VycmVudCkge1xuICAgICAgICBhZ2VudHNGZXRjaGVkUmVmLmN1cnJlbnQgPSB0cnVlXG4gICAgICAgIGF3YWl0IGhhbmRsZUdldEFnZW50cyhzaG91bGRQYXNzQWdlbnRUb0dldEFnZW50c09uUmVzdG9yZShzbmFwc2hvdC5hZ2VudHNOYXZBY3RpdmUpID8gYWdlbnRUb1NlbGVjdCA6IHVuZGVmaW5lZClcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGlmIChzaG91bGRTZWxlY3RGZXRjaGVkQWdlbnRBZnRlclJlc3RvcmUoYWdlbnRUb1NlbGVjdCwgc25hcHNob3QuYWdlbnRzTmF2QWN0aXZlKSkge1xuICAgICAgICBzZWxlY3RBZ2VudChhZ2VudFRvU2VsZWN0IGFzIEFnZW50KVxuICAgICAgfVxuICAgIH0sXG4gICAgW2hhbmRsZUdldEFnZW50cywgc2VsZWN0QWdlbnRdXG4gIClcblxuICBjb25zdCBhcHBseVNlc3Npb25SZXN0b3JlID0gdXNlQ2FsbGJhY2soXG4gICAgYXN5bmMgKHNuYXBzaG90OiBNYWlhUGFuZWxTZXNzaW9uU25hcHNob3QpID0+IHtcbiAgICAgIHNldElzTWluaW1pemVkKGZhbHNlKVxuICAgICAgc2V0Q2hhdFZpZXdWaXNpYmxlKHRydWUpXG5cbiAgICAgIGNvbnN0IGNoaXBzUHJvamVjdEZyb21TbmFwc2hvdCA9IHJlc29sdmVTbmFwc2hvdENoaXBzUHJvamVjdChzbmFwc2hvdC5ob3N0Q29udGV4dClcbiAgICAgIGlmIChjaGlwc1Byb2plY3RGcm9tU25hcHNob3QpIHtcbiAgICAgICAgc2V0Q2hpcHNQcm9qZWN0KGNoaXBzUHJvamVjdEZyb21TbmFwc2hvdClcbiAgICAgIH1cblxuICAgICAgY29uc3QgcmVzdG9yZVJvdXRlID0gcmVzb2x2ZVNlc3Npb25SZXN0b3JlTmF2Um91dGUoc25hcHNob3QpXG5cbiAgICAgIGlmIChyZXN0b3JlUm91dGUgPT09ICdteUFnZW50cycpIHtcbiAgICAgICAgYXdhaXQgaGFuZGxlT3Blbk1hcmtldHBsYWNlKClcbiAgICAgICAgZm9jdXNDaGF0SW5wdXQoKVxuICAgICAgICBzeW5jUGFuZWxTZXNzaW9uKClcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGlmIChyZXN0b3JlUm91dGUgPT09ICdteVNraWxscycpIHtcbiAgICAgICAgaGFuZGxlT3BlblNraWxscygpXG4gICAgICAgIGZvY3VzQ2hhdElucHV0KClcbiAgICAgICAgc3luY1BhbmVsU2Vzc2lvbigpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBpZiAocmVzdG9yZVJvdXRlID09PSAnbWFpYWtlcicpIHtcbiAgICAgICAgYXdhaXQgaGFuZGxlR29Ub01haWFrZXIoKVxuICAgICAgICBmb2N1c0NoYXRJbnB1dCgpXG4gICAgICAgIHN5bmNQYW5lbFNlc3Npb24oKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgaWYgKHJlc3RvcmVSb3V0ZSA9PT0gJ2NoYXQnKSB7XG4gICAgICAgIHNldFVzZXJJbml0aWFsTWVzc2FnZSh7IG1lc3NhZ2U6ICcnLCBhdHRhY2htZW50czogW10gfSlcbiAgICAgICAgc2V0SW5pdGlhbENoYXRJZChzbmFwc2hvdC5hY3RpdmVDaGF0SWQgPz8gbnVsbClcbiAgICAgICAgZ2V0Q2hhdHNTdG9yZVN0YXRlKCkuc2V0QWN0aXZlQ2hhdElkKHNuYXBzaG90LmFjdGl2ZUNoYXRJZCA/PyBudWxsKVxuICAgICAgICBkb2N1bWVudC5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgnY2hhdC1zZXNzaW9uLWNoYW5nZWQnKSlcbiAgICAgICAgaGFuZGxlcnMuY2hhdCgpXG4gICAgICB9IGVsc2UgaWYgKHJlc3RvcmVSb3V0ZSA9PT0gJ3NhdmVkT3B0aW9uJyAmJiBzbmFwc2hvdC5jdXJyZW50T3B0aW9uKSB7XG4gICAgICAgIHNldEN1cnJlbnRPcHRpb24oc25hcHNob3QuY3VycmVudE9wdGlvbiBhcyBvcHRpb25zKVxuICAgICAgfVxuXG4gICAgICBmb2N1c0NoYXRJbnB1dCgpXG4gICAgICBzeW5jUGFuZWxTZXNzaW9uKClcbiAgICB9LFxuICAgIFtcbiAgICAgIGZvY3VzQ2hhdElucHV0LFxuICAgICAgaGFuZGxlR29Ub01haWFrZXIsXG4gICAgICBoYW5kbGVPcGVuTWFya2V0cGxhY2UsXG4gICAgICBoYW5kbGVPcGVuU2tpbGxzLFxuICAgICAgaGFuZGxlcnMsXG4gICAgICBzZXRDaGF0Vmlld1Zpc2libGUsXG4gICAgICBzZXRDaGlwc1Byb2plY3QsXG4gICAgICBzeW5jUGFuZWxTZXNzaW9uLFxuICAgIF1cbiAgKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3Qgc25hcHNob3QgPSBwZW5kaW5nU2Vzc2lvblJlc3RvcmVSZWYuY3VycmVudFxuICAgIGlmICghc25hcHNob3QgfHwgc2Vzc2lvblJlc3RvcmVTdGFydGVkUmVmLmN1cnJlbnQpIHJldHVyblxuICAgIHNlc3Npb25SZXN0b3JlU3RhcnRlZFJlZi5jdXJyZW50ID0gdHJ1ZVxuXG4gICAgc2V0Q2hhdFZpZXdWaXNpYmxlKHRydWUpXG5cbiAgICBjb25zdCBydW5SZXN0b3JlID0gYXN5bmMgKCkgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgbG9hZEFnZW50c0ZvclNlc3Npb25SZXN0b3JlKHNuYXBzaG90KVxuICAgICAgICBwZW5kaW5nU2Vzc2lvblJlc3RvcmVSZWYuY3VycmVudCA9IG51bGxcbiAgICAgICAgYXdhaXQgYXBwbHlTZXNzaW9uUmVzdG9yZShzbmFwc2hvdClcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIHNldElzUmVzdG9yaW5nU2Vzc2lvbihmYWxzZSlcbiAgICAgICAgc2V0UmVmZXRjaENoYXRzKHRydWUpXG4gICAgICB9XG4gICAgfVxuXG4gICAgcnVuUmVzdG9yZSgpLmNhdGNoKCgpID0+IHVuZGVmaW5lZClcbiAgfSwgW2FwcGx5U2Vzc2lvblJlc3RvcmUsIGxvYWRBZ2VudHNGb3JTZXNzaW9uUmVzdG9yZSwgc2V0Q2hhdFZpZXdWaXNpYmxlXSlcblxuICBjb25zdCBoYW5kbGVEZWxldGVBZ2VudEZyb21NeUFnZW50cyA9IHVzZUNhbGxiYWNrKFxuICAgIChhZ2VudElkOiBzdHJpbmcpID0+IHtcbiAgICAgIHJlbW92ZUFnZW50KGFnZW50SWQpXG4gICAgICBpZiAoc2hvdWxkUmVzZWxlY3RBZ2VudEFmdGVyRGVsZXRlKGFnZW50Py5pZCwgYWdlbnRJZCkpIHtcbiAgICAgICAgc2VsZWN0Rmlyc3RBZ2VudChhZ2VudElkKVxuICAgICAgfVxuICAgIH0sXG4gICAgW2FnZW50Py5pZCwgcmVtb3ZlQWdlbnQsIHNlbGVjdEZpcnN0QWdlbnRdXG4gIClcblxuICBjb25zdCBtb2RhbFBhbmVsID0gKFxuICAgIDw+XG4gICAgICB7c2hvd1NpZGViYXIgPyAoXG4gICAgICAgIDxTaWRlYmFyXG4gICAgICAgICAgb25Hb1RvQ2hhdD17Z29Ub0NoYXR9XG4gICAgICAgICAgb25FcnJvcj17KCkgPT4gc2V0U2lkZWJhckhhc0Vycm9yKHRydWUpfVxuICAgICAgICAgIGhhbmRsZUdvVG9Ib21lPXtoYW5kbGVHb0hvbWV9XG4gICAgICAgICAgaGFuZGxlU3RhcnROZXdDaGF0PXtoYW5kbGVTdGFydE5ld0NoYXR9XG4gICAgICAgICAgaGFuZGxlT3Blbk1hcmtldHBsYWNlPXtoYW5kbGVPcGVuTWFya2V0cGxhY2V9XG4gICAgICAgICAgc2hvd05ld0NoYXQ9e3Nob3dOZXdDaGF0fVxuICAgICAgICAgIHJlZmV0Y2hDaGF0cz17cmVmZXRjaENoYXRzfVxuICAgICAgICAgIGhhbmRsZVNldFJlZmV0Y2hDaGF0cz17c2V0UmVmZXRjaENoYXRzfVxuICAgICAgICAgIGhhc0Vycm9yPXtzaWRlYmFySGFzRXJyb3J9XG4gICAgICAgICAgYWdlbnRzTmF2QWN0aXZlPXtzaWRlYmFyQWdlbnRzTmF2QWN0aXZlfVxuICAgICAgICAgIGhhbmRsZU9wZW5Ta2lsbHM9e2hhbmRsZU9wZW5Ta2lsbHN9XG4gICAgICAgICAgb25PcGVuTWFpYWtlckNyZWF0b3I9e2hhbmRsZUdvVG9NYWlha2VyfVxuICAgICAgICAgIGlzTGVnYWN5Q29udGV4dFNlc3Npb249eyEhbGVnYWN5Q29udGV4dFNlc3Npb259XG4gICAgICAgICAgaW5pdGlhbE9wZW49e3NhdmVkU2Vzc2lvbk9uTW91bnRSZWYuY3VycmVudD8uc2lkZWJhck9wZW4gPz8gZmFsc2V9XG4gICAgICAgICAgb25PcGVuQ2hhbmdlPXtoYW5kbGVTaWRlYmFyT3BlbkNoYW5nZX1cbiAgICAgICAgLz5cbiAgICAgICkgOiBudWxsfVxuICAgICAgPFNDQ0FJTUNvbnRlbnQgZXhwYW5kZWQ9e2V4cGFuZGVkfSBmbG9hdGluZz17aXNGbG9hdGluZ30+XG4gICAgICAgIDxDaGF0QUlNb2RhbEhlYWRlclxuICAgICAgICAgIGxheW91dE1vZGU9e2xheW91dE1vZGV9XG4gICAgICAgICAgb25MYXlvdXRNb2RlQ2hhbmdlPXtoYW5kbGVMYXlvdXRNb2RlQ2hhbmdlfVxuICAgICAgICAgIGV4cGFuZGVkPXtleHBhbmRlZH1cbiAgICAgICAgICBkcmFnZ2FibGU9e2lzRmxvYXRpbmd9XG4gICAgICAgICAgb25EcmFnU3RhcnQ9e2hhbmRsZURyYWdTdGFydH1cbiAgICAgICAgICBvbkRyYWdNb3ZlPXtoYW5kbGVEcmFnTW92ZX1cbiAgICAgICAgICBvbkRyYWdFbmQ9e2hhbmRsZURyYWdFbmR9XG4gICAgICAgICAgaGFuZGxlTWluaW1pemU9e2hhbmRsZU1pbmltaXplfVxuICAgICAgICAgIGFnZW50cz17YWdlbnRzLmRhdGF9XG4gICAgICAgICAgaGFzRXJyb3I9eyEhYWdlbnRFcnJvcn1cbiAgICAgICAgICBsb2FkaW5nPXtsb2FkaW5nfVxuICAgICAgICAgIGxvYWRpbmdNb3JlPXtsb2FkaW5nTW9yZX1cbiAgICAgICAgICBoYXNNb3JlPXthZ2VudHMuaGFzX21vcmV9XG4gICAgICAgICAgaGFuZGxlUmVzZXRDaGF0PXtoYW5kbGVSZXNldENoYXR9XG4gICAgICAgICAgb25BZ2VudFVwZGF0ZT17dXBkYXRlQWdlbnRGYXZvcml0ZX1cbiAgICAgICAgICBsb2FkTW9yZUFnZW50cz17bG9hZE1vcmVBZ2VudHN9XG4gICAgICAgICAgc29ydEFnZW50c0xpc3Q9e3NvcnRBZ2VudHNMaXN0fVxuICAgICAgICAgIGlzTXlBZ2VudHNTZWN0aW9uPXtpc015QWdlbnRzU2VjdGlvbn1cbiAgICAgICAgICBpc015U2tpbGxzU2VjdGlvbj17aXNNeVNraWxsc1NlY3Rpb259XG4gICAgICAgICAgaXNNYWlha2VyU2VjdGlvbj17aXNNYWlha2VyQ3JlYXRvckhvbWV9XG4gICAgICAgICAgc2hvd0JhY2tCdXR0b249e3Nob3dCYWNrQnV0dG9ufVxuICAgICAgICAgIG9uQmFjaz17aGFuZGxlQmFja31cbiAgICAgICAgLz5cbiAgICAgICAge21haW5Db250ZW50VmlldyA9PT0gJ2Vycm9yJyA/IChcbiAgICAgICAgICA8TUFJQUVycm9yIC8+XG4gICAgICAgICkgOiBtYWluQ29udGVudFZpZXcgPT09ICdjaGF0JyA/IChcbiAgICAgICAgICA8Q2hhdEFJQ29udGVudFxuICAgICAgICAgICAgY3VycmVudE9wdGlvbj17Y29tcHV0ZWRDdXJyZW50T3B0aW9ufVxuICAgICAgICAgICAgaGFuZGxlcnM9e3sgLi4uaGFuZGxlcnMsIGNoYXQ6IHN0YXJ0Q2hhdCwgaG9tZTogaGFuZGxlcnMuaG9tZSwgaGFuZGxlR29Ib21lIH19XG4gICAgICAgICAgICBvbkVycm9yPXsoKSA9PiBzZXRIYXNFcnJvcih0cnVlKX1cbiAgICAgICAgICAgIHJlZnM9e3sgdXNlckluaXRpYWxNZXNzYWdlLCBpbml0aWFsQ2hhdElkIH19XG4gICAgICAgICAgICBvblNlbmRNZXNzYWdlUmVhZHk9e2hhbmRsZVNlbmRNZXNzYWdlUmVhZHl9XG4gICAgICAgICAgICBleHBhbmRlZD17ZXhwYW5kZWR9XG4gICAgICAgICAgICBmbG9hdGluZz17aXNGbG9hdGluZ31cbiAgICAgICAgICAgIGFnZW50cz17YWdlbnRzLmRhdGF9XG4gICAgICAgICAgICBsb2FkaW5nQWdlbnRzPXtsb2FkaW5nfVxuICAgICAgICAgICAgb25EZWxldGVBZ2VudD17aGFuZGxlRGVsZXRlQWdlbnRGcm9tTXlBZ2VudHN9XG4gICAgICAgICAgICBvbkZhdm9yaXRlQWdlbnRVcGRhdGU9e3VwZGF0ZUFnZW50RmF2b3JpdGV9XG4gICAgICAgICAgICBoYXNNb3JlQWdlbnRzPXshIWFnZW50cy5oYXNfbW9yZX1cbiAgICAgICAgICAgIGxvYWRpbmdNb3JlQWdlbnRzPXtsb2FkaW5nTW9yZX1cbiAgICAgICAgICAgIG9uTG9hZE1vcmVBZ2VudHM9e2xvYWRNb3JlQWdlbnRzfVxuICAgICAgICAgICAgb25Hb1RvTWFpYWtlcj17aGFuZGxlR29Ub01haWFrZXJ9XG4gICAgICAgICAgICBteVNraWxscz17bXlTa2lsbHN9XG4gICAgICAgICAgICBzaGFyZWRTa2lsbHM9e3NoYXJlZFNraWxsc31cbiAgICAgICAgICAgIGxvYWRpbmdTa2lsbHM9e2xvYWRpbmdTa2lsbHN9XG4gICAgICAgICAgICBvbkRlbGV0ZVNraWxsPXtyZW1vdmVTa2lsbH1cbiAgICAgICAgICAgIG9uU2VhcmNoQWdlbnRzPXtzZWFyY2hDdXN0b21BZ2VudHN9XG4gICAgICAgICAgICBzZWFyY2hMb2FkaW5nQWdlbnRzPXtzZWFyY2hMb2FkaW5nfVxuICAgICAgICAgICAgYWdlbnRFcnJvcj17YWdlbnRFcnJvcn1cbiAgICAgICAgICAgIGlzUmVzdG9yaW5nU2Vzc2lvbj17aXNSZXN0b3JpbmdTZXNzaW9ufVxuICAgICAgICAgIC8+XG4gICAgICAgICkgOiAoXG4gICAgICAgICAgPFByb2plY3RTdW1tYXJ5Q29udGVudCBvblJlc3RhcnRTdW1tYXJ5PXtoYW5kbGVycy5ob21lfSAvPlxuICAgICAgICApfVxuICAgICAgICB7c2hvd01vZGFsRm9vdGVyICYmIChcbiAgICAgICAgICA8Q2hhdEFpTW9kYWxGb290ZXJcbiAgICAgICAgICAgIGFnZW50PXthZ2VudH1cbiAgICAgICAgICAgIGhhbmRsZVNlbmRNZXNzYWdlPXtoYW5kbGVTZW5kTWVzc2FnZX1cbiAgICAgICAgICAgIGhhbmRsZVN0b3BHZW5lcmF0aW9uPXtzdG9wR2VuZXJhdGlvbkZ1bmN0aW9ufVxuICAgICAgICAgICAgaXNTdHJlYW1pbmc9e2lzU3RyZWFtaW5nfVxuICAgICAgICAgICAgaXNXcml0aW5nPXtpc1dyaXRpbmd9XG4gICAgICAgICAgICBjaGF0SWQ9e2luaXRpYWxDaGF0SWR9XG4gICAgICAgICAgICBuZXdDaGF0S2V5PXtuZXdDaGF0S2V5fVxuICAgICAgICAgICAgdG9vbHRpcFpJbmRleD17dG9vbHRpcFpJbmRleH1cbiAgICAgICAgICAgIGxlZ2FjeUNvbnRleHRTZXNzaW9uPXtsZWdhY3lDb250ZXh0U2Vzc2lvbn1cbiAgICAgICAgICAgIG9uQ29udGludWVJbk5ld0NoYXQ9e2hhbmRsZUNvbnRpbnVlTGVnYWN5Q29udGV4dEluTmV3Q2hhdH1cbiAgICAgICAgICAgIGxheW91dE1vZGU9e2xheW91dE1vZGV9XG4gICAgICAgICAgLz5cbiAgICAgICAgKX1cbiAgICAgIDwvU0NDQUlNQ29udGVudD5cbiAgICA8Lz5cbiAgKVxuXG4gIGNvbnN0IGNvbnRlbnRXcmFwcGVyID0gKFxuICAgIDxTQ0NBSU1Db250ZW50V3JhcHBlciBleHBhbmRlZD17ZXhwYW5kZWR9IGZsb2F0aW5nPXtpc0Zsb2F0aW5nfSByZWY9e2NvbnRlbnRXcmFwcGVyUmVmfT5cbiAgICAgIHttb2RhbFBhbmVsfVxuICAgIDwvU0NDQUlNQ29udGVudFdyYXBwZXI+XG4gIClcblxuICByZXR1cm4gKFxuICAgIHNlbGVjdG9yICYmXG4gICAgUmVhY3RET00uY3JlYXRlUG9ydGFsKFxuICAgICAgPFNDQ0FJTVdyYXBwZXJcbiAgICAgICAgZXhwYW5kZWQ9e2V4cGFuZGVkfVxuICAgICAgICBsYXlvdXRNb2RlPXtsYXlvdXRNb2RlfVxuICAgICAgICBkcmFnUG9zaXRpb249e3Jlc29sdmVkRHJhZ1Bvc2l0aW9ufVxuICAgICAgICBlbGV2YXRlZD17c2hvdWxkVXNlRWxldmF0ZWRNYWlhUGFuZWwoc2VjdGlvbil9XG4gICAgICAgICRtaW5pbWl6ZWQ9e2hpZGVQYW5lbENvbnRlbnR9XG4gICAgICA+XG4gICAgICAgIDxTQ0NBSU1NaW5pbWl6ZWRIaWRlICRoaWRkZW49e2hpZGVQYW5lbENvbnRlbnR9PlxuICAgICAgICAgIDxGbG9hdGluZ1BhbmVsTW90aW9uIHRpbHQ9e3RpbHRNb3Rpb259IGV4cGFuZGVkPXtleHBhbmRlZH0+XG4gICAgICAgICAgICB7Y29udGVudFdyYXBwZXJ9XG4gICAgICAgICAgPC9GbG9hdGluZ1BhbmVsTW90aW9uPlxuICAgICAgICA8L1NDQ0FJTU1pbmltaXplZEhpZGU+XG4gICAgICAgIHtzaG93TWluaW1pemVkUGlsbCAmJiAoXG4gICAgICAgICAgPE1haWFNaW5pbWl6ZWRQaWxsXG4gICAgICAgICAgICBzaG93Tm92ZWx0eURvdD17c2hvd01pbmltaXplZE5vdmVsdHlEb3R9XG4gICAgICAgICAgICBpc1N0cmVhbWluZz17aGFzQWN0aXZlU3RyZWFtfVxuICAgICAgICAgICAgb25SZXN0b3JlPXtoYW5kbGVSZXN0b3JlRnJvbU1pbmltaXplZH1cbiAgICAgICAgICAvPlxuICAgICAgICApfVxuICAgICAgICB7dXNlckhhc1Blcm1pc3Npb25zICYmIChcbiAgICAgICAgICA8QWJtQWdlbnRNb2RhbFxuICAgICAgICAgICAgYWRkQWdlbnQ9e2FkZEFnZW50fVxuICAgICAgICAgICAgdXBkYXRlQWdlbnQ9e3VwZGF0ZUFnZW50fVxuICAgICAgICAgICAgcmVtb3ZlQWdlbnQ9e3JlbW92ZUFnZW50fVxuICAgICAgICAgICAgdXBkYXRlQWdlbnRGYXZvcml0ZT17dXBkYXRlQWdlbnRGYXZvcml0ZX1cbiAgICAgICAgICAgIHNlbGVjdEZpcnN0QWdlbnQ9e3NlbGVjdEZpcnN0QWdlbnR9XG4gICAgICAgICAgLz5cbiAgICAgICAgKX1cbiAgICAgICAge3VzZXJIYXNTa2lsbHNBY2Nlc3MgJiYgKFxuICAgICAgICAgIDxBYm1Ta2lsbE1vZGFsIGFkZFNraWxsPXthZGRTa2lsbH0gdXBkYXRlU2tpbGxJbkxpc3Q9e3VwZGF0ZVNraWxsSW5MaXN0fSByZW1vdmVTa2lsbD17cmVtb3ZlU2tpbGx9IC8+XG4gICAgICAgICl9XG4gICAgICAgIHt1c2VySGFzU2tpbGxzQWNjZXNzICYmIDxBYm1Ta2lsbEdlbmVyYXRlTW9kYWwgLz59XG4gICAgICAgIDxTbmFja2JhciAvPlxuICAgICAgPC9TQ0NBSU1XcmFwcGVyPixcbiAgICAgIHNlbGVjdG9yXG4gICAgKVxuICApXG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FDRUEsV0FBVyxFQUNYQyxPQUFPLEVBQ1BDLFFBQVEsRUFDUkMsTUFBTSxFQUNOQyxTQUFTLEVBQ1RDLGVBQWUsUUFFVixPQUFPO0FBQ2QsT0FBT0MsUUFBUSxNQUFNLFdBQVc7QUFDaEMsT0FBT0MsTUFBTSxNQUFNLFFBQVE7QUFDM0IsU0FBU0MsY0FBYyxRQUFRLGVBQWU7QUFDOUMsU0FBU0MsT0FBTyxRQUFRLDJCQUEyQjtBQUNuRCxTQUFTQyxpQkFBaUIsUUFBUSxnQ0FBZ0M7QUFDbEUsU0FBU0MsU0FBUyxRQUFRLHVCQUF1QjtBQUNqRCxTQUFTQyxzQkFBc0IsUUFBUSx1Q0FBdUM7QUFFOUUsU0FBU0MsYUFBYSxRQUFRLGtCQUFrQjtBQUNoRCxTQUFTQyxhQUFhLEVBQUVDLE9BQU8sUUFBUSxhQUFhO0FBQ3BELFNBQVNDLE9BQU8sUUFBUSxZQUFZO0FBQ3BDLFNBQVNDLFlBQVksUUFBUSx5Q0FBeUM7QUFDdEUsU0FBU0MsWUFBWSxRQUFRLHlDQUF5QztBQUN0RSxTQUFTQyxnQkFBZ0IsUUFBc0IsaUNBQWlDO0FBR2hGLFNBQVNDLGlCQUFpQixRQUFRLGtEQUFrRDtBQUNwRixTQUFTQyxRQUFRLFFBQVEsbUNBQW1DO0FBQzVELFNBQVNDLHFCQUFxQixRQUFRLDBCQUEwQjtBQUNoRSxTQUFTQyxhQUFh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
|