@projectcor/maia-components 2.49.1-1 → 2.50.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.
Files changed (435) hide show
  1. package/README.md +2 -0
  2. package/lib/App.js +19 -44
  3. package/lib/components/atoms/AttachmentCard/AttachmentCardAudio.helpers.js +1 -3
  4. package/lib/components/atoms/AttachmentCard/AttachmentCardImage.js +1 -3
  5. package/lib/components/atoms/AttachmentPreviewModal/AttachmentPreviewModal.js +14 -24
  6. package/lib/components/atoms/AttachmentPreviewModal/ExcelPreview.js +10 -28
  7. package/lib/components/atoms/AttachmentPreviewModal/PptPreview.js +15 -19
  8. package/lib/components/atoms/AttachmentPreviewModal/WordPreview.js +4 -8
  9. package/lib/components/atoms/ClientSelector/ClientSelector.js +13 -15
  10. package/lib/components/atoms/ContextCompactedNotice/ContextCompactedNotice.js +53 -0
  11. package/lib/components/atoms/ContextCompactedNotice/ContextCompactedNotice.styles.js +8 -0
  12. package/lib/components/atoms/ContextCompactedNotice/index.js +2 -0
  13. package/lib/components/atoms/Fade/Fade.js +6 -10
  14. package/lib/components/atoms/FrequentlyUsedActions/FrequentlyUsedActions.js +1 -3
  15. package/lib/components/atoms/FrequentlyUsedActions/FrequentlyUsedActions.styles.js +7 -19
  16. package/lib/components/atoms/MAIAInput/MAIAInput.attachments.helpers.js +2 -3
  17. package/lib/components/atoms/MAIAInput/MAIAInput.helpers.js +2 -3
  18. package/lib/components/atoms/MAIAInput/MAIAInput.js +7 -14
  19. package/lib/components/atoms/MaiaWrapper/MaiaWrapperBase.js +4 -9
  20. package/lib/components/atoms/OptionAccessibility/OptionAccessibility.js +5 -4
  21. package/lib/components/atoms/ReasoningBlock/ReasoningBlock.js +2 -7
  22. package/lib/components/atoms/ReasoningBlock/ReasoningBlock.styles.js +24 -41
  23. package/lib/components/atoms/ReasoningBlock/ReasoningSteps.js +10 -25
  24. package/lib/components/atoms/ReasoningBlock/ReasoningTimeline.js +43 -78
  25. package/lib/components/atoms/ReasoningBlock/groupParallelSteps.js +11 -9
  26. package/lib/components/atoms/ReasoningBlock/reasoningLiveNarration.js +15 -37
  27. package/lib/components/index.js +1 -2
  28. package/lib/components/molecules/AbmSection/AbmAccessibilitySection/AbmAccessibilitySection.js +2 -3
  29. package/lib/components/molecules/AbmSection/AbmKnowledgeSection.helpers.js +4 -6
  30. package/lib/components/molecules/AbmSection/AbmKnowledgeSection.js +16 -25
  31. package/lib/components/molecules/ChatAIContent/ChatAIContent.js +3 -7
  32. package/lib/components/molecules/ChatAIHome/ChatAIHome.js +72 -93
  33. package/lib/components/molecules/ChatAIHome/styles.js +78 -85
  34. package/lib/components/molecules/ChatAIMessages/ChatAIMessages.js +35 -42
  35. package/lib/components/molecules/ChatAIMessages/newStyles.js +35 -32
  36. package/lib/components/molecules/ChatAIModal/ChatAIModal.helpers.js +1 -8
  37. package/lib/components/molecules/ChatAIModal/ChatAIModal.js +8 -25
  38. package/lib/components/molecules/ChatAIModal/ChatAIModal.styles.js +2 -2
  39. package/lib/components/molecules/ChatAIModal/components/ChatAiModalFooter/ChatAiModalFooter.js +153 -15
  40. package/lib/components/molecules/ChatAIModal/components/ChatAiModalFooter/ChatAiModalFooter.styles.js +26 -2
  41. package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.js +367 -63
  42. package/lib/components/molecules/ChatFooter/ChatFooter.js +4 -10
  43. package/lib/components/molecules/ChatFooter/ChatFooterFaqs.js +2 -5
  44. package/lib/components/molecules/Sidebar/Sidebar.js +23 -41
  45. package/lib/components/organisms/AbmAgentModal/AbmAgentModal.js +2 -2
  46. package/lib/components/organisms/ProjectSummary/ProjectSummary.js +7 -11
  47. package/lib/components/organisms/SourcesInformation/SourcesInformationModal.js +1 -4
  48. package/lib/constants/formatExtensions.js +8 -7
  49. package/lib/constants/permissions/index.js +2 -2
  50. package/lib/constants/permissions/utils.js +1 -4
  51. package/lib/dev/DevReasoningTimeline.js +86 -75
  52. package/lib/dev/Providers.js +3 -5
  53. package/lib/hooks/useAgentModel/useUpdateAgent.js +6 -7
  54. package/lib/hooks/useChatManager/useChatManager.helpers.js +20 -9
  55. package/lib/hooks/useChatManager/useChatManager.js +21 -15
  56. package/lib/hooks/useEntitySearch.js +1 -3
  57. package/lib/hooks/useFrequentlyUsedActions.js +22 -60
  58. package/lib/hooks/useKnowledge/downloadKnowledge.js +4 -4
  59. package/lib/hooks/useKnowledge/useKnowledgeOperations.js +15 -16
  60. package/lib/hooks/useProjectSummaryConfig.js +5 -10
  61. package/lib/hooks/useReasoningTrace/reasoningStore.js +39 -8
  62. package/lib/index.js +2 -5
  63. package/lib/lang/br/index.js +7 -26
  64. package/lib/lang/en/index.js +7 -26
  65. package/lib/lang/es/index.js +7 -26
  66. package/lib/lang/fr/index.js +7 -26
  67. package/lib/services/maia/Actions/getFrequentlyUsedActions.js +1 -1
  68. package/lib/services/maia/Agents/connectors.js +1 -3
  69. package/lib/services/utils/mapChatMessages.helpers.js +12 -7
  70. package/lib/store/sessions/sessionStreamManager.js +101 -94
  71. package/lib/store/useChatsStore.js +3 -4
  72. package/lib/styles/cascade.js +3 -29
  73. package/lib/styles/transitions.js +1 -3
  74. package/lib/types/Chat.js +1 -1
  75. package/lib/types/contextCompaction.js +48 -0
  76. package/lib/types/global.d.js +1 -1
  77. package/lib/types/jest-dom.d.js +2 -0
  78. package/lib/types/reasoning.js +1 -1
  79. package/lib/utils/hoursPlannerQuickActionType.js +1 -74
  80. package/lib/utils/imagePreprocessor.js +3 -14
  81. package/lib/utils/navigateContextEntity.js +2 -2
  82. package/lib/utils/openTaskInCorPanel.js +2 -2
  83. package/lib/utils/streamActivityMessages.helpers.js +4 -5
  84. package/lib/utils/streamActivityMessages.js +20 -32
  85. package/package.json +2 -2
  86. package/lib/components/atoms/ActionableButton.spec.js +0 -111
  87. package/lib/components/atoms/AgentActivityIndicator/AgentActivityIndicator.spec.js +0 -52
  88. package/lib/components/atoms/AgentActivityIndicator/AgentActivityIndicator.utils.spec.js +0 -11
  89. package/lib/components/atoms/ApprovalBox/ApprovalBox.helpers.spec.js +0 -63
  90. package/lib/components/atoms/ApprovalBox/ApprovalBox.spec.js +0 -183
  91. package/lib/components/atoms/AttachmentCard/AttachmentCard.spec.js +0 -123
  92. package/lib/components/atoms/AttachmentCard/AttachmentCardAudio.helpers.spec.js +0 -139
  93. package/lib/components/atoms/AttachmentCard/AttachmentCardAudio.spec.js +0 -385
  94. package/lib/components/atoms/AttachmentCard/AttachmentCardImage.spec.js +0 -78
  95. package/lib/components/atoms/AttachmentPreviewModal/AttachmentPreviewModal.helpers.spec.js +0 -94
  96. package/lib/components/atoms/AttachmentPreviewModal/AttachmentPreviewModal.spec.js +0 -396
  97. package/lib/components/atoms/AttachmentPreviewModal/ExcelPreview.spec.js +0 -80
  98. package/lib/components/atoms/AttachmentPreviewModal/PptPreview.helpers.spec.js +0 -526
  99. package/lib/components/atoms/AttachmentPreviewModal/PptPreview.spec.js +0 -169
  100. package/lib/components/atoms/AttachmentPreviewModal/WordPreview.helpers.spec.js +0 -11
  101. package/lib/components/atoms/AttachmentPreviewModal/WordPreview.spec.js +0 -77
  102. package/lib/components/atoms/Backdrop/Backdrop.spec.js +0 -28
  103. package/lib/components/atoms/CardMenu/CardMenu.spec.js +0 -56
  104. package/lib/components/atoms/ChatClientSelector/ChatClientSelector.spec.js +0 -67
  105. package/lib/components/atoms/Checkbox/Checkbox.spec.js +0 -27
  106. package/lib/components/atoms/Chip/Chip.spec.js +0 -82
  107. package/lib/components/atoms/ChipLlm/ChipLlm.spec.js +0 -26
  108. package/lib/components/atoms/ClientSelector/ClientSelector.helpers.spec.js +0 -45
  109. package/lib/components/atoms/ClientSelector/ClientSelector.spec.js +0 -133
  110. package/lib/components/atoms/ContextMentionChip/ContextMentionChip.spec.js +0 -29
  111. package/lib/components/atoms/ContextMentionChip/MentionOverflowLabel.spec.js +0 -46
  112. package/lib/components/atoms/ContextMentionChip/buildChipElement.helpers.spec.js +0 -109
  113. package/lib/components/atoms/ContextMentionChip/buildChipElement.spec.js +0 -81
  114. package/lib/components/atoms/ContextMentionEditor/ContextMentionEditor.helpers.spec.js +0 -92
  115. package/lib/components/atoms/ContextMentionEditor/ContextMentionEditor.spec.js +0 -319
  116. package/lib/components/atoms/ContextMentionItem/ContextMentionItem.spec.js +0 -107
  117. package/lib/components/atoms/ContextMentionPopover/ContextMentionPopover.spec.js +0 -136
  118. package/lib/components/atoms/CopyToClipboard.spec.js +0 -74
  119. package/lib/components/atoms/EditableLabel/EditableLabel.spec.js +0 -76
  120. package/lib/components/atoms/EntitySelector/EntitySelector.spec.js +0 -86
  121. package/lib/components/atoms/Expand/Expand.spec.js +0 -57
  122. package/lib/components/atoms/Fade/Fade.spec.js +0 -66
  123. package/lib/components/atoms/FeedbackButton/FeedbackButton.spec.js +0 -75
  124. package/lib/components/atoms/FrequentlyAskedQuestions/FrequentlyAskedQuestions.spec.js +0 -104
  125. package/lib/components/atoms/FrequentlyUsedActions/FrequentlyUsedActions.spec.js +0 -91
  126. package/lib/components/atoms/HelpButton.spec.js +0 -87
  127. package/lib/components/atoms/ImagePreview/ImagePreview.spec.js +0 -96
  128. package/lib/components/atoms/ListMenuOption/ListMenuOption.spec.js +0 -54
  129. package/lib/components/atoms/LoadingFaqs/LoadingFaqs.spec.js +0 -21
  130. package/lib/components/atoms/LoadingSearchClients/LoadingSearchClients.spec.js +0 -20
  131. package/lib/components/atoms/LoadingSearchProjects/LoadingSearchProjects.spec.js +0 -26
  132. package/lib/components/atoms/LoadingText/LoadingText.spec.js +0 -25
  133. package/lib/components/atoms/MAIAButton/MAIAButton.spec.js +0 -42
  134. package/lib/components/atoms/MAIAError/MAIAError.spec.js +0 -27
  135. package/lib/components/atoms/MAIAInput/MAIAInput.attachments.helpers.spec.js +0 -113
  136. package/lib/components/atoms/MAIAInput/MAIAInput.helpers.spec.js +0 -381
  137. package/lib/components/atoms/MAIAInput/MAIAInput.spec.js +0 -641
  138. package/lib/components/atoms/MAIAInput/MAIAInputEditor.helpers.spec.js +0 -92
  139. package/lib/components/atoms/MAIAInput/MAIAInputEditor.spec.js +0 -193
  140. package/lib/components/atoms/MAIAInput/maiaInputLayout.spec.js +0 -32
  141. package/lib/components/atoms/MaiaStreamdown/MaiaStreamdown.spec.js +0 -64
  142. package/lib/components/atoms/MaiaWrapper/MaiaWrapper.spec.js +0 -43
  143. package/lib/components/atoms/MaiaWrapper/MaiaWrapperBase.spec.js +0 -114
  144. package/lib/components/atoms/MaiaWrapper/ModernMaiaWrapper.spec.js +0 -51
  145. package/lib/components/atoms/ModalClientAccess/ModalClientAccess.spec.js +0 -48
  146. package/lib/components/atoms/ModalProject/ModalProject.spec.js +0 -66
  147. package/lib/components/atoms/NextPageLoader.spec.js +0 -37
  148. package/lib/components/atoms/OnboardingModalButton/OnboardingModal.spec.js +0 -20
  149. package/lib/components/atoms/OnboardingModalButton/OnboardingModalButton.helpers.spec.js +0 -35
  150. package/lib/components/atoms/OnboardingModalButton/OnboardingModalButton.spec.js +0 -47
  151. package/lib/components/atoms/OptionAccessibility/OptionAccessibility.spec.js +0 -146
  152. package/lib/components/atoms/PrimaryButton.spec.js +0 -42
  153. package/lib/components/atoms/ProjectSelector/ProjectSelector.spec.js +0 -69
  154. package/lib/components/atoms/ReasoningBlock/ReasoningBlock.spec.js +0 -69
  155. package/lib/components/atoms/ReasoningBlock/ReasoningSteps.spec.js +0 -59
  156. package/lib/components/atoms/ReasoningBlock/ReasoningTimeline.spec.js +0 -170
  157. package/lib/components/atoms/ReasoningBlock/groupParallelSteps.spec.js +0 -199
  158. package/lib/components/atoms/ReasoningBlock/reasoningLeading.spec.js +0 -70
  159. package/lib/components/atoms/ReasoningBlock/reasoningLiveNarration.spec.js +0 -120
  160. package/lib/components/atoms/ReasoningBlock/reasoningMotion.js +0 -8
  161. package/lib/components/atoms/ReasoningBlock/reasoningTimeline.helpers.spec.js +0 -31
  162. package/lib/components/atoms/ReasoningBlock/useCollapsibleHeight.js +0 -52
  163. package/lib/components/atoms/ReasoningBlock/useCollapsibleHeight.spec.js +0 -90
  164. package/lib/components/atoms/ReasoningBlock/useReasoningMarkerHandoff.js +0 -29
  165. package/lib/components/atoms/ReasoningBlock/useReasoningMarkerHandoff.spec.js +0 -38
  166. package/lib/components/atoms/SessionGeneratingDot/SessionGeneratingDot.spec.js +0 -16
  167. package/lib/components/atoms/SkillsDropdown/SkillsDropdown.spec.js +0 -107
  168. package/lib/components/atoms/SlashCommandChip/SlashCommandChip.spec.js +0 -24
  169. package/lib/components/atoms/SlashCommandDropdown/SlashCommandDropdown.helpers.spec.js +0 -71
  170. package/lib/components/atoms/SlashCommandDropdown/SlashCommandDropdown.spec.js +0 -120
  171. package/lib/components/atoms/Switch/Switch.spec.js +0 -41
  172. package/lib/components/atoms/TextArea/CustomTextArea.spec.js +0 -52
  173. package/lib/components/atoms/TextArea/TextArea.helpers.spec.js +0 -25
  174. package/lib/components/atoms/TextArea/TextArea.spec.js +0 -126
  175. package/lib/components/atoms/ThirdButton.spec.js +0 -29
  176. package/lib/components/atoms/VideoModal/VideoModal.spec.js +0 -68
  177. package/lib/components/atoms/WithAppCfg.spec.js +0 -82
  178. package/lib/components/molecules/AbmSection/AbmAccessibilitySection/AbmAccessibilitySection.helpers.spec.js +0 -53
  179. package/lib/components/molecules/AbmSection/AbmAccessibilitySection/AbmAccessibilitySection.spec.js +0 -742
  180. package/lib/components/molecules/AbmSection/AbmGeneralSection.helpers.spec.js +0 -107
  181. package/lib/components/molecules/AbmSection/AbmGeneralSection.spec.js +0 -256
  182. package/lib/components/molecules/AbmSection/AbmKnowledgeSection.helpers.spec.js +0 -175
  183. package/lib/components/molecules/AbmSection/AbmKnowledgeSection.spec.js +0 -318
  184. package/lib/components/molecules/AbmSection/AbmLoaderFiles.helpers.spec.js +0 -50
  185. package/lib/components/molecules/AbmSection/AbmLoaderFiles.spec.js +0 -94
  186. package/lib/components/molecules/AgentInputBlock/AgentInputBlockMessage.js +0 -83
  187. package/lib/components/molecules/AgentInputBlock/AgentInputBlockMessage.styles.js +0 -30
  188. package/lib/components/molecules/AgentInputBlock/index.js +0 -5
  189. package/lib/components/molecules/AgentInputBlock/resolveAgentInputBlock.js +0 -52
  190. package/lib/components/molecules/AgentInputBlock/resolveAgentInputBlock.spec.js +0 -76
  191. package/lib/components/molecules/AgentInputBlock/resolveLegacyContextSession.js +0 -20
  192. package/lib/components/molecules/AgentInputBlock/resolveLegacyContextSession.spec.js +0 -34
  193. package/lib/components/molecules/AgentInputBlock/useAgentChangeModelAction.js +0 -36
  194. package/lib/components/molecules/ChatAIClientSelector/ChatAIClientSelector.spec.js +0 -66
  195. package/lib/components/molecules/ChatAIContent/ChatAIContent.spec.js +0 -145
  196. package/lib/components/molecules/ChatAIHistory/ChatAIHistory.spec.js +0 -204
  197. package/lib/components/molecules/ChatAIHome/ChatAIHome.helpers.spec.js +0 -622
  198. package/lib/components/molecules/ChatAIHome/ChatAIHome.spec.js +0 -264
  199. package/lib/components/molecules/ChatAIHome/ChatAIHomeMaiaker.spec.js +0 -86
  200. package/lib/components/molecules/ChatAIMessages/ChatAICreateAgentActions.spec.js +0 -104
  201. package/lib/components/molecules/ChatAIMessages/ChatAIMessages.helpers.spec.js +0 -742
  202. package/lib/components/molecules/ChatAIMessages/ChatAIMessages.spec.js +0 -541
  203. package/lib/components/molecules/ChatAIMessages/ChatAISuggestions.spec.js +0 -46
  204. package/lib/components/molecules/ChatAIModal/ChatAIModal.helpers.spec.js +0 -1394
  205. package/lib/components/molecules/ChatAIModal/ChatAIModal.spec.js +0 -1401
  206. package/lib/components/molecules/ChatAIModal/components/ChatAiAgentOptions/ChatAiAgentOptions.helpers.spec.js +0 -33
  207. package/lib/components/molecules/ChatAIModal/components/ChatAiAgentOptions/ChatAiAgentOptions.spec.js +0 -116
  208. package/lib/components/molecules/ChatAIModal/components/ChatAiModalFooter/ChatAiModalFooter.spec.js +0 -134
  209. package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.helpers.spec.js +0 -142
  210. package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.spec.js +0 -241
  211. package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.utils.js +0 -69
  212. package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.utils.spec.js +0 -144
  213. package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeaderAgentDropdown.js +0 -95
  214. package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeaderAgentSelector.js +0 -174
  215. package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeaderLayoutMenu.js +0 -99
  216. package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeaderLayoutMenu.spec.js +0 -65
  217. package/lib/components/molecules/ChatAIModal/components/MaiaMinimizedPill/MaiaMinimizedPill.spec.js +0 -37
  218. package/lib/components/molecules/ChatAIModal/constants.spec.js +0 -16
  219. package/lib/components/molecules/ChatAIModal/floatingPanelMotion/FloatingPanelMotion.spec.js +0 -22
  220. package/lib/components/molecules/ChatAIModal/floatingPanelMotion/useFloatingPanelDragTilt.spec.js +0 -67
  221. package/lib/components/molecules/ChatAIModal/layout.spec.js +0 -72
  222. package/lib/components/molecules/ChatAIMyAgents/ChatAIMyAgents.helpers.spec.js +0 -93
  223. package/lib/components/molecules/ChatAIMyAgents/ChatAIMyAgents.spec.js +0 -297
  224. package/lib/components/molecules/ChatAIMySkills/ChatAIMySkills.helpers.spec.js +0 -62
  225. package/lib/components/molecules/ChatAIMySkills/ChatAIMySkills.spec.js +0 -221
  226. package/lib/components/molecules/ChatAIProjectSelector/ChatAIProjectSelector.spec.js +0 -66
  227. package/lib/components/molecules/ChatFooter/ChatFooter.spec.js +0 -369
  228. package/lib/components/molecules/ChatFooter/ChatFooterCorAccess.spec.js +0 -10
  229. package/lib/components/molecules/ChatFooter/ChatFooterFaqs.helpers.spec.js +0 -104
  230. package/lib/components/molecules/ChatFooter/ChatFooterFaqs.spec.js +0 -139
  231. package/lib/components/molecules/ContextMentionInput/ContextMentionInput.spec.js +0 -84
  232. package/lib/components/molecules/MessageFeedback/MessageFeedback.spec.js +0 -116
  233. package/lib/components/molecules/ProjectSummaryChat/ProjectSummaryChat.spec.js +0 -126
  234. package/lib/components/molecules/ProjectSummaryConfig/ProjectSummaryConfig.spec.js +0 -115
  235. package/lib/components/molecules/ProjectSummaryContent/ProjectSummaryContent.spec.js +0 -79
  236. package/lib/components/molecules/ProjectSummaryModal/ProjectSummaryModal.spec.js +0 -37
  237. package/lib/components/molecules/Sidebar/Sidebar.helpers.spec.js +0 -119
  238. package/lib/components/molecules/Sidebar/Sidebar.spec.js +0 -464
  239. package/lib/components/organisms/AbmAgentModal/AbmAgentModal.helpers.spec.js +0 -1067
  240. package/lib/components/organisms/AbmAgentModal/AbmAgentModal.spec.js +0 -1236
  241. package/lib/components/organisms/AbmSkillGenerateModal/AbmSkillGenerateModal.spec.js +0 -112
  242. package/lib/components/organisms/AbmSkillModal/AbmSkillModal.helpers.spec.js +0 -77
  243. package/lib/components/organisms/AbmSkillModal/AbmSkillModal.spec.js +0 -503
  244. package/lib/components/organisms/ChatAI/ChatAI.spec.js +0 -174
  245. package/lib/components/organisms/ChatAIPage/ChatAIPage.js +0 -525
  246. package/lib/components/organisms/ChatAIPage/ChatAIPage.spec.js +0 -246
  247. package/lib/components/organisms/ChatAIPage/ChatAIPage.styles.js +0 -16
  248. package/lib/components/organisms/ChatAIPage/ChatAIPageHeader.js +0 -253
  249. package/lib/components/organisms/ChatAIPage/ChatAIPageHeader.spec.js +0 -139
  250. package/lib/components/organisms/ChatAIPage/ChatAIPageHeader.styles.js +0 -13
  251. package/lib/components/organisms/ChatAIPage/ChatAIPageHome.js +0 -284
  252. package/lib/components/organisms/ChatAIPage/ChatAIPageHome.spec.js +0 -275
  253. package/lib/components/organisms/ChatAIPage/ChatAIPageHome.styles.js +0 -196
  254. package/lib/components/organisms/ChatAIPage/ChatAIPageHomeActionCardSlot.js +0 -94
  255. package/lib/components/organisms/ChatAIPage/ChatAIPageHomeActionCardSlot.spec.js +0 -69
  256. package/lib/components/organisms/ChatAIPage/ChatAIPageHomeActionCards.skeleton.js +0 -38
  257. package/lib/components/organisms/ChatAIPage/getDaypart.js +0 -9
  258. package/lib/components/organisms/ChatAIPage/getDaypart.spec.js +0 -19
  259. package/lib/components/organisms/ChatAIPage/index.js +0 -3
  260. package/lib/components/organisms/ClientAIButton/ClientAIButton.spec.js +0 -53
  261. package/lib/components/organisms/DeleteAgentModal/DeleteAgentModal.spec.js +0 -59
  262. package/lib/components/organisms/DeleteQuestionModal/DeleteQuestionModal.spec.js +0 -79
  263. package/lib/components/organisms/EditQuestionModal/EditQuestionModal.spec.js +0 -86
  264. package/lib/components/organisms/ModalFileExceeds/ModalFileExceeds.spec.js +0 -49
  265. package/lib/components/organisms/ProjectAIButton/ProjectAIButton.spec.js +0 -67
  266. package/lib/components/organisms/ProjectSummary/ProjectSummary.spec.js +0 -117
  267. package/lib/components/organisms/SnackBar/Snackbar.spec.js +0 -66
  268. package/lib/components/organisms/SourcesInformation/SourceItem.spec.js +0 -19
  269. package/lib/components/organisms/SourcesInformation/SourcesInformationModal.spec.js +0 -52
  270. package/lib/constants/formatExtensions.spec.js +0 -14
  271. package/lib/constants/maiaExternalConnectorsAccess.spec.js +0 -29
  272. package/lib/constants/maiaFeatureAccess.spec.js +0 -30
  273. package/lib/constants/maiaHourAgentAccess.spec.js +0 -30
  274. package/lib/constants/maiaTaskPanelAccess.spec.js +0 -41
  275. package/lib/constants/permissions/clientRoleAccess.spec.js +0 -65
  276. package/lib/constants/permissions/utils.spec.js +0 -128
  277. package/lib/constants/plannerSyncEvents.spec.js +0 -31
  278. package/lib/constants/taskUrls.spec.js +0 -9
  279. package/lib/dev/DevMaiaPage.js +0 -30
  280. package/lib/hooks/frequentlyUsedActionsCache.js +0 -17
  281. package/lib/hooks/frequentlyUsedActionsCache.spec.js +0 -25
  282. package/lib/hooks/useAccessClient/useAccessClient.spec.js +0 -149
  283. package/lib/hooks/useAgentModel/useAgentModel.spec.js +0 -83
  284. package/lib/hooks/useAgentModel/useCreateAgent.helpers.spec.js +0 -268
  285. package/lib/hooks/useAgentModel/useCreateAgent.spec.js +0 -314
  286. package/lib/hooks/useAgentModel/useDeleteAgent.spec.js +0 -183
  287. package/lib/hooks/useAgentModel/useUpdateAgent.spec.js +0 -374
  288. package/lib/hooks/useAgentSuggestions.spec.js +0 -89
  289. package/lib/hooks/useCaretPosition.spec.js +0 -58
  290. package/lib/hooks/useChatManager/useChatManager.helpers.spec.js +0 -2027
  291. package/lib/hooks/useChatManager/useChatManager.spec.js +0 -2409
  292. package/lib/hooks/useChatMessages/useChatMessages.helpers.spec.js +0 -491
  293. package/lib/hooks/useChatMessages/useChatMessages.spec.js +0 -729
  294. package/lib/hooks/useChats/useChats.spec.js +0 -208
  295. package/lib/hooks/useClientSearch.helpers.spec.js +0 -52
  296. package/lib/hooks/useClientSearch.spec.js +0 -86
  297. package/lib/hooks/useContextMentions.helpers.spec.js +0 -267
  298. package/lib/hooks/useContextMentions.spec.js +0 -338
  299. package/lib/hooks/useContextPinPopover.helpers.spec.js +0 -183
  300. package/lib/hooks/useContextPinPopover.spec.js +0 -159
  301. package/lib/hooks/useContinueLegacyContextInNewChat/index.js +0 -2
  302. package/lib/hooks/useContinueLegacyContextInNewChat/useContinueLegacyContextInNewChat.js +0 -93
  303. package/lib/hooks/useDebounce.spec.js +0 -42
  304. package/lib/hooks/useEntitySearch.helpers.spec.js +0 -723
  305. package/lib/hooks/useEntitySearch.spec.js +0 -718
  306. package/lib/hooks/useEvent.spec.js +0 -45
  307. package/lib/hooks/useFrequentlyAskedQuestions.spec.js +0 -222
  308. package/lib/hooks/useFrequentlyUsedActions.spec.js +0 -135
  309. package/lib/hooks/useIsMaiaPageRoute.js +0 -26
  310. package/lib/hooks/useIsMaiaPageRoute.spec.js +0 -26
  311. package/lib/hooks/useKnowledge/deleteKnowledge.spec.js +0 -122
  312. package/lib/hooks/useKnowledge/downloadKnowledge.spec.js +0 -148
  313. package/lib/hooks/useKnowledge/saveKnowledge.spec.js +0 -104
  314. package/lib/hooks/useKnowledge/useKnowledgeOperations.spec.js +0 -178
  315. package/lib/hooks/useMaiaChatSessionMeta/index.js +0 -2
  316. package/lib/hooks/useMaiaChatSessionMeta/useMaiaChatSessionMeta.js +0 -24
  317. package/lib/hooks/useMentionAllowedTypes.spec.js +0 -89
  318. package/lib/hooks/useMentionPopover.helpers.spec.js +0 -100
  319. package/lib/hooks/useMentionPopover.spec.js +0 -392
  320. package/lib/hooks/useMinimizedPillBottomOffset.helpers.spec.js +0 -176
  321. package/lib/hooks/useMinimizedPillBottomOffset.spec.js +0 -89
  322. package/lib/hooks/useMinimizedPillNoveltyDot/useMinimizedPillNoveltyDot.spec.js +0 -67
  323. package/lib/hooks/useModal/useModal.spec.js +0 -73
  324. package/lib/hooks/useOrchestratorStream/useOrchestratorStream.helpers.spec.js +0 -138
  325. package/lib/hooks/useOrchestratorStream/useOrchestratorStream.spec.js +0 -417
  326. package/lib/hooks/useProjectSearch.helpers.spec.js +0 -89
  327. package/lib/hooks/useProjectSearch.spec.js +0 -91
  328. package/lib/hooks/useProjectSummary.spec.js +0 -193
  329. package/lib/hooks/useProjectSummaryConfig.helpers.spec.js +0 -151
  330. package/lib/hooks/useProjectSummaryConfig.spec.js +0 -133
  331. package/lib/hooks/useReasoningTrace/reasoningStore.spec.js +0 -112
  332. package/lib/hooks/useRecentClientsSearch.helpers.spec.js +0 -33
  333. package/lib/hooks/useRecentClientsSearch.spec.js +0 -85
  334. package/lib/hooks/useRecentContexts.spec.js +0 -139
  335. package/lib/hooks/useResize.spec.js +0 -37
  336. package/lib/hooks/useSkillsCatalog.spec.js +0 -88
  337. package/lib/hooks/useSlashCommands.spec.js +0 -139
  338. package/lib/hooks/useSmoothStreamText/useSmoothStreamText.spec.js +0 -101
  339. package/lib/hooks/useSnackBarManager/useSnackBarManager.spec.js +0 -33
  340. package/lib/hooks/useStreamResponse.spec.js +0 -199
  341. package/lib/hooks/useT.spec.js +0 -20
  342. package/lib/hooks/useToggle.spec.js +0 -33
  343. package/lib/hooks/useToggleFavorite/useToggleFavorite.spec.js +0 -171
  344. package/lib/services/appcues.spec.js +0 -37
  345. package/lib/services/maia/Access/updateAccess.spec.js +0 -137
  346. package/lib/services/maia/Actions/getFrequentlyUsedActions.spec.js +0 -56
  347. package/lib/services/maia/Actions/getSlashCommands.spec.js +0 -91
  348. package/lib/services/maia/Agents/connectors.spec.js +0 -496
  349. package/lib/services/maia/Agents/createAgent.spec.js +0 -55
  350. package/lib/services/maia/Agents/deleteAgent.spec.js +0 -57
  351. package/lib/services/maia/Agents/fetchAgentDetail.spec.js +0 -108
  352. package/lib/services/maia/Agents/getAgentById.spec.js +0 -190
  353. package/lib/services/maia/Agents/getAgentModels.spec.js +0 -190
  354. package/lib/services/maia/Agents/getAgentSuggestions.spec.js +0 -89
  355. package/lib/services/maia/Agents/getAgents.helpers.spec.js +0 -325
  356. package/lib/services/maia/Agents/getAgents.spec.js +0 -1135
  357. package/lib/services/maia/Agents/setAgentToolGroups.spec.js +0 -45
  358. package/lib/services/maia/Agents/toggleFavorite.spec.js +0 -59
  359. package/lib/services/maia/Agents/updateAgent.spec.js +0 -48
  360. package/lib/services/maia/Chats/deleteChat.spec.js +0 -31
  361. package/lib/services/maia/Chats/getChatMessages.spec.js +0 -150
  362. package/lib/services/maia/Chats/getChatsByUserId.spec.js +0 -149
  363. package/lib/services/maia/Chats/markSessionAsRead.spec.js +0 -30
  364. package/lib/services/maia/Chats/patchChat.spec.js +0 -41
  365. package/lib/services/maia/Chats/wasHelpfulChat.spec.js +0 -28
  366. package/lib/services/maia/Faqs/getFrequentlyAskedQuestions.spec.js +0 -58
  367. package/lib/services/maia/Knowledge/delete.spec.js +0 -45
  368. package/lib/services/maia/Knowledge/download.spec.js +0 -78
  369. package/lib/services/maia/Knowledge/save.spec.js +0 -58
  370. package/lib/services/maia/Orchestrator/orchestrator.helpers.spec.js +0 -225
  371. package/lib/services/maia/Orchestrator/orchestrator.spec.js +0 -181
  372. package/lib/services/maia/RecentClients/getRecentClients.spec.js +0 -52
  373. package/lib/services/maia/RecentContexts/getRecentContexts.spec.js +0 -103
  374. package/lib/services/maia/RecentProjects/getRecentProjects.spec.js +0 -82
  375. package/lib/services/maia/RecentTasks/getRecentTasks.spec.js +0 -63
  376. package/lib/services/maia/RecentUsers/getRecentUsers.spec.js +0 -82
  377. package/lib/services/maia/Skills/createSkill.spec.js +0 -68
  378. package/lib/services/maia/Skills/deleteSkill.spec.js +0 -42
  379. package/lib/services/maia/Skills/generateSkill.spec.js +0 -48
  380. package/lib/services/maia/Skills/getSkills.spec.js +0 -152
  381. package/lib/services/maia/Skills/updateSkill.spec.js +0 -62
  382. package/lib/services/maia/client.spec.js +0 -56
  383. package/lib/services/utils/fetchCOR.spec.js +0 -211
  384. package/lib/services/utils/getCookie.spec.js +0 -20
  385. package/lib/services/utils/mapChatMessages.helpers.spec.js +0 -336
  386. package/lib/services/utils/mapChatMessages.spec.js +0 -254
  387. package/lib/store/chatsSidebarOptimistic.spec.js +0 -145
  388. package/lib/store/maiaLastChatPersistence.spec.js +0 -22
  389. package/lib/store/maiaPanelSessionPersistence.spec.js +0 -62
  390. package/lib/store/sessions/sessionNotificationSound.spec.js +0 -145
  391. package/lib/store/sessions/sessionNotifications.helpers.spec.js +0 -63
  392. package/lib/store/sessions/sessionNotifications.spec.js +0 -106
  393. package/lib/store/sessions/sessionStreamManager.helpers.spec.js +0 -177
  394. package/lib/store/sessions/sessionStreamManager.spec.js +0 -939
  395. package/lib/store/sessions/sessions.types.spec.js +0 -16
  396. package/lib/store/sessions/useSessionsStore.spec.js +0 -135
  397. package/lib/store/useChatsStore.spec.js +0 -619
  398. package/lib/store/useFaqsStore.spec.js +0 -57
  399. package/lib/utils/actionCategoryMap.spec.js +0 -18
  400. package/lib/utils/agentDisplayName.spec.js +0 -48
  401. package/lib/utils/autoApproveStorage.spec.js +0 -25
  402. package/lib/utils/chatInputFiles.spec.js +0 -39
  403. package/lib/utils/contextMentionIcons.spec.js +0 -41
  404. package/lib/utils/contextMentionLabel.spec.js +0 -13
  405. package/lib/utils/contextMentionTriggers.spec.js +0 -44
  406. package/lib/utils/contextMentionTypeLabel.spec.js +0 -14
  407. package/lib/utils/corConnectorMentionTypes.spec.js +0 -23
  408. package/lib/utils/entityLinkRender.spec.js +0 -72
  409. package/lib/utils/fileDownloadHelper.spec.js +0 -67
  410. package/lib/utils/formatQuickActionMessage.spec.js +0 -27
  411. package/lib/utils/formatUnreadCount.spec.js +0 -12
  412. package/lib/utils/getUnitFileSize.spec.js +0 -18
  413. package/lib/utils/hitlAnalytics.spec.js +0 -136
  414. package/lib/utils/hoursPlannerQuickActionType.spec.js +0 -64
  415. package/lib/utils/imagePreprocessor.helpers.spec.js +0 -28
  416. package/lib/utils/imagePreprocessor.spec.js +0 -112
  417. package/lib/utils/maiaPageRoute.js +0 -24
  418. package/lib/utils/maiaPageRoute.spec.js +0 -23
  419. package/lib/utils/mapBackendLang.spec.js +0 -19
  420. package/lib/utils/navigateContextEntity.spec.js +0 -50
  421. package/lib/utils/normalizeAgentConnectors.spec.js +0 -98
  422. package/lib/utils/openTaskInCorPanel.spec.js +0 -43
  423. package/lib/utils/orchestratorSubagents.spec.js +0 -32
  424. package/lib/utils/reasoningMappers.spec.js +0 -103
  425. package/lib/utils/recentContextsHomeLimit.spec.js +0 -32
  426. package/lib/utils/renderContextMentions.helpers.spec.js +0 -87
  427. package/lib/utils/renderContextMentions.spec.js +0 -268
  428. package/lib/utils/retryCompletion.spec.js +0 -181
  429. package/lib/utils/skillContentSize.spec.js +0 -13
  430. package/lib/utils/slashCommandMarker.spec.js +0 -43
  431. package/lib/utils/sortManagerHoursHomeFuas.spec.js +0 -51
  432. package/lib/utils/sseStreamContent.spec.js +0 -31
  433. package/lib/utils/streamActivityMessages.helpers.spec.js +0 -84
  434. package/lib/utils/streamActivityMessages.spec.js +0 -336
  435. package/lib/utils/validateTrimmedFields.spec.js +0 -26
@@ -38,6 +38,7 @@ import { ReasoningBlock } from '../../atoms/ReasoningBlock/ReasoningBlock';
38
38
  import { shouldStreamNarrationInTimeline } from '../../atoms/ReasoningBlock/reasoningLiveNarration';
39
39
  import { ReasoningTimeline } from '../../atoms/ReasoningBlock/ReasoningTimeline';
40
40
  import { SCTimelineIndicator } from '../../atoms/ReasoningBlock/ReasoningBlock.styles';
41
+ import { ContextCompactedNotice } from '../../atoms/ContextCompactedNotice/ContextCompactedNotice';
41
42
  import { isStreamingPlaceholderMessageId, resolveStreamLoadingDisplay } from '../../../utils/streamActivityMessages';
42
43
  import { resolveRetryTurnId, findUserMessageForRetry } from '../../../utils/retryCompletion';
43
44
  import { useReasoningTrace } from '../../../hooks/useReasoningTrace';
@@ -53,7 +54,7 @@ import { ChatAISuggestions } from './ChatAISuggestions';
53
54
  import { ChatAICreateAgentActions } from './ChatAICreateAgentActions';
54
55
  import { EVENTS, useEvent } from '../../../hooks/useEvent';
55
56
  import { downloadFileFromUrl } from '../../../utils/fileDownloadHelper';
56
- import { canOpenAttachmentPreview, canRetryAssistantMessage, computeDistanceFromBottom, computeRemovableTurnSpace, computeSyncedTurnSpacerHeight, computeTurnScrollDurationMs, computeTurnScrollTargetTop, countUserMessageAttachments, easeOutExpoScrollProgress, extractFeedbackSessionId, findLastQuestionId, hasInitialUserMessageInList, hasMessageLevelStreamIndicator, isActiveStreamingState, isAnswerOrQuestionChatMessageId, isApprovalChatMessage, isAssistantChatMessage, isAudioAttachment, isCurrentUserMessage, isNewChatMessageEvent, isRetrySuggestionSelection, resolveAttachmentDownloadBlobStrategy, resolveAttachmentDownloadFileName, resolveAttachmentDownloadUrl, resolveChatListItemStreamingFlags, resolveDisableFeedbackFromWasHelpful, resolveMessageAttachments, resolveRetryAttachmentsFromUserMessage, shouldAutoScrollOnMessagesChange, shouldHideAssistantSuggestions, shouldHideEmptyStreamingBody, shouldIgnoreSuggestionClick, shouldOpenMessageOption, shouldReleaseTurnSpace, shouldRenderAssistantFeedback, shouldRenderAssistantSuggestions, shouldRenderChangeProjectMessage, shouldRenderCreateAgentActions, shouldRenderMessageTextBody, shouldShowApprovalActions, shouldShowBottomScrollGradient, shouldShowGlobalStreamLoadingIndicator, shouldShowMessageAttachmentsRow, shouldShowScrollToBottom, shouldShowStreamActivityIndicator, shouldShowStreamingMessageBody, shouldShowTopScrollGradient, shouldSkipEmptyChatListMessage, shouldSkipTurnScrollAnimation, shouldRunStreamTurnSyncEffect, shouldUpdateSpacerHeight, buildSmoothStreamTextOptions, computeMeasureTurnLayout, detectJustFinishedLoadingMessages, processChatMessagesScrollFrame, readSmoothStreamWindowFlags, resolveReserveTurnSpacePlan, resolveScrollToBottomTargetTop, resolveContainerAtBottom, resolveCreateAgentActionsAgentId, resolveFeedbackPropsForCancelled, resolveLastUserMessageForAttachments, resolveMessageListItemKey, resolvePendingScrollTopFromSession, resolveReasoningTraceHookId, resolveStreamingMessageHookId, resolveStreamingRawText, resolveStreamingTextHookId, resolveSuggestionAnalyticsAgentType, shouldApplyPendingScrollRestore, shouldClearLastReservedQuestion, shouldClearScrollRestoreWithoutChat, shouldInitializeChat, shouldRenderMentionInlineNodes, shouldRestoreScrollOnExpandedChange, shouldRunSessionCacheScrollToBottom, shouldScheduleTurnSpaceReservation, shouldScrollToBottomAfterLoad, shouldSkipMessagesScrollEffect, shouldUpdateScrollAffordancesOnLoadEnd } from './ChatAIMessages.helpers';
57
+ import { canOpenAttachmentPreview, canRetryAssistantMessage, computeDistanceFromBottom, computeRemovableTurnSpace, computeSyncedTurnSpacerHeight, computeTurnScrollDurationMs, computeTurnScrollTargetTop, countUserMessageAttachments, easeOutExpoScrollProgress, extractFeedbackSessionId, findLastQuestionId, hasInitialUserMessageInList, hasMessageLevelStreamIndicator, isActiveStreamingState, isAnswerOrQuestionChatMessageId, isApprovalChatMessage, isAssistantChatMessage, isAudioAttachment, isCurrentUserMessage, isNewChatMessageEvent, isRetrySuggestionSelection, resolveAttachmentDownloadBlobStrategy, resolveAttachmentDownloadFileName, resolveAttachmentDownloadUrl, resolveChatListItemStreamingFlags, resolveDisableFeedbackFromWasHelpful, resolveMessageAttachments, resolveRetryAttachmentsFromUserMessage, shouldAutoScrollOnMessagesChange, shouldHideAssistantSuggestions, shouldHideEmptyStreamingBody, shouldIgnoreSuggestionClick, shouldOpenMessageOption, shouldReleaseTurnSpace, shouldRenderAssistantFeedback, shouldRenderAssistantSuggestions, shouldRenderChangeProjectMessage, shouldRenderCreateAgentActions, shouldRenderMessageTextBody, shouldShowApprovalActions, shouldShowBottomScrollGradient, shouldShowGlobalStreamLoadingIndicator, shouldShowMessageAttachmentsRow, shouldShowScrollToBottom, shouldShowStreamActivityIndicator, shouldShowStreamingMessageBody, shouldShowTopScrollGradient, shouldSkipEmptyChatListMessage, shouldSkipTurnScrollAnimation, shouldRunStreamTurnSyncEffect, shouldUpdateSpacerHeight, buildSmoothStreamTextOptions, computeMeasureTurnLayout, detectJustFinishedLoadingMessages, processChatMessagesScrollFrame, readSmoothStreamWindowFlags, resolveReserveTurnSpacePlan, resolveScrollToBottomTargetTop, resolveContainerAtBottom, resolveCreateAgentActionsAgentId, resolveFeedbackPropsForCancelled, resolveLastUserMessageForAttachments, resolveMessageListItemKey, resolvePendingScrollTopFromSession, resolveReasoningTraceHookId, resolveScrollOnParentMode, resolveStreamingMessageHookId, resolveStreamingRawText, resolveStreamingTextHookId, resolveSuggestionAnalyticsAgentType, shouldApplyPendingScrollRestore, shouldClearLastReservedQuestion, shouldClearScrollRestoreWithoutChat, shouldInitializeChat, shouldRenderMentionInlineNodes, shouldRestoreScrollOnExpandedChange, shouldRunSessionCacheScrollToBottom, shouldScheduleTurnSpaceReservation, shouldScrollToBottomAfterLoad, shouldSkipMessagesScrollEffect, shouldUpdateScrollAffordancesOnLoadEnd } from './ChatAIMessages.helpers';
57
58
  import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
58
59
  var MessageWrapper = function MessageWrapper(_ref) {
59
60
  var isCurrentUser = _ref.isCurrentUser,
@@ -186,7 +187,7 @@ var StreamingMessageBody = /*#__PURE__*/memo(function (props) {
186
187
  });
187
188
  });
188
189
  var MessageItem = /*#__PURE__*/memo(function (props) {
189
- var _props$reasoning, _props$projectMetadat;
190
+ var _ref4, _props$reasoning, _props$projectMetadat;
190
191
  var id = props.id,
191
192
  user = props.user,
192
193
  message = props.message,
@@ -222,9 +223,13 @@ var MessageItem = /*#__PURE__*/memo(function (props) {
222
223
  var isActiveStreaming = isActiveStreamingState(isStreaming, isStreamingPlaceholder);
223
224
  var hasStreamText = Boolean(streamingText);
224
225
  var reasoningTrace = useReasoningTrace(resolveReasoningTraceHookId(isAssistant, isActiveStreaming, id));
225
- var streamNarrationInTimeline = isAssistant && shouldStreamNarrationInTimeline(reasoningTrace.steps, streamActivity, streamingText, {
226
- messageId: id
227
- });
226
+ // Suscripción propia, sin la condición de streaming de arriba: el aviso de
227
+ // compactación tiene que seguir visible una vez terminado el turno. Si no hay
228
+ // snapshot en vivo (reabrir el chat), cae al `compaction` persistido en el mensaje.
229
+ var _useReasoningTrace = useReasoningTrace(isAssistant ? id : ''),
230
+ liveCompaction = _useReasoningTrace.compaction;
231
+ var compaction = (_ref4 = liveCompaction !== null && liveCompaction !== void 0 ? liveCompaction : props.compaction) !== null && _ref4 !== void 0 ? _ref4 : null;
232
+ var streamNarrationInTimeline = isAssistant && shouldStreamNarrationInTimeline(reasoningTrace.steps, streamActivity, streamingText, id);
228
233
  var showStreamingBody = shouldShowStreamingMessageBody(isActiveStreaming, hasStreamText, streamNarrationInTimeline);
229
234
  var showActivityIndicator = shouldShowStreamActivityIndicator(isAssistant, isActiveStreaming, streamActivity);
230
235
  var messageAttachments = resolveMessageAttachments(attachments, isAssistant, sources);
@@ -238,7 +243,7 @@ var MessageItem = /*#__PURE__*/memo(function (props) {
238
243
  setPreviewAttachment(null);
239
244
  };
240
245
  var handleAttachmentDownload = /*#__PURE__*/function () {
241
- var _ref4 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee(attachment) {
246
+ var _ref5 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee(attachment) {
242
247
  var fileName, fileUrl, blobUrl, downloadStrategy, downloadedFile, link, _t;
243
248
  return _regeneratorRuntime.wrap(function (_context) {
244
249
  while (1) switch (_context.prev = _context.next) {
@@ -293,7 +298,7 @@ var MessageItem = /*#__PURE__*/memo(function (props) {
293
298
  }, _callee, null, [[1, 6]]);
294
299
  }));
295
300
  return function handleAttachmentDownload(_x) {
296
- return _ref4.apply(this, arguments);
301
+ return _ref5.apply(this, arguments);
297
302
  };
298
303
  }();
299
304
  if (shouldRenderChangeProjectMessage(isChangeProject, options)) {
@@ -330,7 +335,9 @@ var MessageItem = /*#__PURE__*/memo(function (props) {
330
335
  }) : /*#__PURE__*/_jsx(ReasoningBlock, {
331
336
  messageId: id,
332
337
  trace: (_props$reasoning = props.reasoning) !== null && _props$reasoning !== void 0 ? _props$reasoning : null
333
- })), shouldShowMessageAttachmentsRow(messageAttachments.length) && /*#__PURE__*/_jsx(SCAttachmentsRow, {
338
+ })), isAssistant && /*#__PURE__*/_jsx(ContextCompactedNotice, {
339
+ compaction: compaction
340
+ }), shouldShowMessageAttachmentsRow(messageAttachments.length) && /*#__PURE__*/_jsx(SCAttachmentsRow, {
334
341
  $isAssistant: isAssistant,
335
342
  children: messageAttachments.map(function (attachment, index) {
336
343
  // Detectar si es un archivo de audio
@@ -402,17 +409,15 @@ var MessageItem = /*#__PURE__*/memo(function (props) {
402
409
  })]
403
410
  });
404
411
  });
405
- var ChatAIMessagesInner = function ChatAIMessagesInner(_ref5) {
406
- var userInitialMessage = _ref5.userInitialMessage,
407
- initialChatId = _ref5.initialChatId,
408
- onError = _ref5.onError,
409
- onSendMessageReady = _ref5.onSendMessageReady,
410
- onScrollToBottom = _ref5.onScrollToBottom,
411
- attachments = _ref5.attachments,
412
- agents = _ref5.agents,
413
- expanded = _ref5.expanded,
414
- _ref5$skipEnterAnimat = _ref5.skipEnterAnimation,
415
- skipEnterAnimation = _ref5$skipEnterAnimat === void 0 ? false : _ref5$skipEnterAnimat;
412
+ var ChatAIMessagesInner = function ChatAIMessagesInner(_ref6) {
413
+ var userInitialMessage = _ref6.userInitialMessage,
414
+ initialChatId = _ref6.initialChatId,
415
+ onError = _ref6.onError,
416
+ onSendMessageReady = _ref6.onSendMessageReady,
417
+ onScrollToBottom = _ref6.onScrollToBottom,
418
+ attachments = _ref6.attachments,
419
+ agents = _ref6.agents,
420
+ expanded = _ref6.expanded;
416
421
  var _useT = useT(),
417
422
  t = _useT.t;
418
423
  var _useGlobalContext = useGlobalContext(),
@@ -604,25 +609,6 @@ var ChatAIMessagesInner = function ChatAIMessagesInner(_ref5) {
604
609
  cancelTurnScroll();
605
610
  releaseTurnSpace();
606
611
  }, [cancelTurnScroll, releaseTurnSpace]);
607
-
608
- /** En fullscreen el wheel en márgenes/overlay cae fuera de SCMessagesScroll; reenviamos al scroller del hilo. */
609
- var handleMessagesOuterWheel = useCallback(function (event) {
610
- handleUserScrollIntent();
611
- var scroller = messagesRef.current;
612
- if (!scroller) return;
613
- var target = event.target;
614
- if (target !== event.currentTarget && (target === scroller || scroller.contains(target))) {
615
- return;
616
- }
617
- var deltaY = event.deltaY;
618
- if (deltaY === 0) return;
619
- var maxScroll = scroller.scrollHeight - scroller.clientHeight;
620
- if (maxScroll <= 0) return;
621
- var nextScrollTop = Math.min(maxScroll, Math.max(0, scroller.scrollTop + deltaY));
622
- if (nextScrollTop === scroller.scrollTop) return;
623
- scroller.scrollTop = nextScrollTop;
624
- event.preventDefault();
625
- }, [handleUserScrollIntent]);
626
612
  var measureTurn = useCallback(function (questionId) {
627
613
  var el = messagesRef.current;
628
614
  var spacerEl = spacerElRef.current;
@@ -947,6 +933,7 @@ var ChatAIMessagesInner = function ChatAIMessagesInner(_ref5) {
947
933
  attachmentsCount: attachmentsCount,
948
934
  t: t
949
935
  });
936
+ var isScrollOnParent = resolveScrollOnParentMode(expanded);
950
937
  useEffect(function () {
951
938
  var _session$scrollSessio, _session$scrollTop;
952
939
  if (shouldClearScrollRestoreWithoutChat(initialChatId)) {
@@ -1066,18 +1053,24 @@ var ChatAIMessagesInner = function ChatAIMessagesInner(_ref5) {
1066
1053
  // Si el usuario mueve el scroll abortamos la animación y soltamos el turno:
1067
1054
  // no le peleamos el control del contenedor.
1068
1055
  _jsxs(SCMessagesOuter, {
1069
- onWheel: handleMessagesOuterWheel,
1056
+ $scrollOnParent: isScrollOnParent,
1057
+ onWheel: handleUserScrollIntent,
1070
1058
  onTouchStart: handleUserScrollIntent,
1071
1059
  children: [/*#__PURE__*/_jsx(SCMessagesGradientTop, {
1072
1060
  $show: showTopGradient,
1073
1061
  "aria-hidden": "true"
1074
- }), /*#__PURE__*/_jsx(SCMessagesScroll, {
1062
+ }), isScrollOnParent ? /*#__PURE__*/_jsx(SCMessagesScroll, {
1075
1063
  ref: messagesRef,
1076
1064
  onScroll: handleScrollToBottom,
1077
1065
  children: /*#__PURE__*/_jsx(SCMessagesInner, {
1078
- $skipEnter: skipEnterAnimation,
1066
+ $scrollOnParent: isScrollOnParent,
1079
1067
  children: messagesContent
1080
1068
  })
1069
+ }) : /*#__PURE__*/_jsx(SCMessagesInner, {
1070
+ ref: messagesRef,
1071
+ onScroll: handleScrollToBottom,
1072
+ $scrollOnParent: false,
1073
+ children: messagesContent
1081
1074
  }), /*#__PURE__*/_jsx(SCMessagesGradientBottom, {
1082
1075
  $show: showBottomGradient,
1083
1076
  "aria-hidden": "true"
@@ -1112,4 +1105,4 @@ var ChatAIMessagesInner = function ChatAIMessagesInner(_ref5) {
1112
1105
  );
1113
1106
  };
1114
1107
  export var ChatAIMessages = /*#__PURE__*/React.memo(ChatAIMessagesInner);
1115
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSZWFjdCIsIm1lbW8iLCJ1c2VDYWxsYmFjayIsInVzZUVmZmVjdCIsInVzZUxheW91dEVmZmVjdCIsInVzZVJlZiIsInVzZVN0YXRlIiwiY3JlYXRlRWxlbWVudCIsIl9jcmVhdGVFbGVtZW50IiwiQXR0YWNobWVudENhcmQiLCJBcHByb3ZhbEJveCIsIkF0dGFjaG1lbnRQcmV2aWV3TW9kYWwiLCJBdHRhY2htZW50Q2FyZEF1ZGlvIiwiTWFpYVN0cmVhbWRvd24iLCJDaGF0SGlzdG9yeVJvbGUiLCJyZW5kZXJUZXh0V2l0aE1lbnRpb25zIiwiaGFzSW5saW5lTWFya2VycyIsImlzTWFpYWtlckFnZW50IiwidXNlVXNlciIsInVzZVQiLCJ1c2VDaGF0TWFuYWdlciIsInVzZVNtb290aFN0cmVhbVRleHQiLCJ1c2VTdHJlYW1pbmdNZXNzYWdlIiwiTG9hZGluZ1RleHQiLCJBZ2VudEFjdGl2aXR5SW5kaWNhdG9yIiwiUmVhc29uaW5nQmxvY2siLCJzaG91bGRTdHJlYW1OYXJyYXRpb25JblRpbWVsaW5lIiwiUmVhc29uaW5nVGltZWxpbmUiLCJTQ1RpbWVsaW5lSW5kaWNhdG9yIiwiaXNTdHJlYW1pbmdQbGFjZWhvbGRlck1lc3NhZ2VJZCIsInJlc29sdmVTdHJlYW1Mb2FkaW5nRGlzcGxheSIsInJlc29sdmVSZXRyeVR1cm5JZCIsImZpbmRVc2VyTWVzc2FnZUZvclJldHJ5IiwidXNlUmVhc29uaW5nVHJhY2UiLCJMb2FkZXIiLCJGYWRlIiwicGF0Y2hNYWlhUGFuZWxTZXNzaW9uIiwicmVhZE1haWFQYW5lbFNlc3Npb24iLCJNZXNzYWdlRnJvbVVzZXIiLCJNZXNzYWdlRnJvbU90aGVyIiwiTWVzc2FnZUNvbnRlbnRGcm9tVXNlciIsIk1lc3NhZ2VDb250ZW50RnJvbU90aGVyIiwiTWVzc2FnZUZlZWRiYWNrIiwiU0NDQUlNZXNzYWdlV3JhcHBlciIsIlNjcm9sbFRvQm90dG9tQnV0dG9uIiwiU0NTY3JvbGxJY29uU3dhcCIsIlNDV3JpdGluZ0RvdHMiLCJTQ01lc3NhZ2VzT3V0ZXIiLCJTQ01lc3NhZ2VzU2Nyb2xsIiwiU0NNZXNzYWdlc0lubmVyIiwiU0NUdXJuU3BhY2VyIiwiU0NPcHRpb25zTGlzdCIsIlNDT3B0aW9uSXRlbSIsIlNDTWVzc2FnZUl0ZW1XcmFwcGVyIiwiU0NNZXNzYWdlSXRlbUlubmVyIiwiU0NBdHRhY2htZW50c1JvdyIsIlNDQXBwcm92YWxBY3Rpb25zQ29sdW1uIiwiU0NMb2FkaW5nTWVzc2FnZXNDb2x1bW4iLCJTQ01lc3NhZ2VzR3JhZGllbnRUb3AiLCJTQ01lc3NhZ2VzR3JhZGllbnRCb3R0b20iLCJ1c2VHbG9iYWxDb250ZXh0IiwiRW50aXR5TGlua0N1c3RvbUxpbmsiLCJnZXRFbnRpdHlMaW5rV3JhcHBlckNsYXNzTmFtZSIsIkNoYXRBSVN1Z2dlc3Rpb25zIiwiQ2hhdEFJQ3JlYXRlQWdlbnRBY3Rpb25zIiwiRVZFTlRTIiwidXNlRXZlbnQiLCJkb3dubG9hZEZpbGVGcm9tVXJsIiwiY2FuT3BlbkF0dGFjaG1lbnRQcmV2aWV3IiwiY2FuUmV0cnlBc3Npc3RhbnRNZXNzYWdlIiwiY29tcHV0ZURpc3RhbmNlRnJvbUJvdHRvbSIsImNvbXB1dGVSZW1vdmFibGVUdXJuU3BhY2UiLCJjb21wdXRlU3luY2VkVHVyblNwYWNlckhlaWdodCIsImNvbXB1dGVUdXJuU2Nyb2xsRHVyYXRpb25NcyIsImNvbXB1dGVUdXJuU2Nyb2xsVGFyZ2V0VG9wIiwiY291bnRVc2VyTWVzc2FnZUF0dGFjaG1lbnRzIiwiZWFzZU91dEV4cG9TY3JvbGxQcm9ncmVzcyIsImV4dHJhY3RGZWVkYmFja1Nlc3Npb25JZCIsImZpbmRMYXN0UXVlc3Rpb25JZCIsImhhc0luaXRpYWxVc2VyTWVzc2FnZUluTGlzdCIsImhhc01lc3NhZ2VMZXZlbFN0cmVhbUluZGljYXRvciIsImlzQWN0aXZlU3RyZWFtaW5nU3RhdGUiLCJpc0Fuc3dlck9yUXVlc3Rpb25DaGF0TWVzc2FnZUlkIiwiaXNBcHByb3ZhbENoYXRNZXNzYWdlIiwiaXNBc3Npc3RhbnRDaGF0TWVzc2FnZSIsImlzQXVkaW9BdHRhY2htZW50IiwiaXNDdXJyZW50VXNlck1lc3NhZ2UiLCJpc05ld0NoYXRNZXNzYWdlRXZlbnQiLCJpc1JldHJ5U3VnZ2VzdGlvblNlbGVjdGlvbiIsInJlc29sdmVBdHRhY2htZW50RG93bmxvYWRCbG9iU3RyYXRlZ3kiLCJyZXNvbHZlQXR0YWNobWVudERvd25sb2FkRmlsZU5hbWUiLCJyZXNvbHZlQXR0YWNobWVudERvd25sb2FkVXJsIiwicmVzb2x2ZUNoYXRMaXN0SXRlbVN0cmVhbWluZ0ZsYWdzIiwicmVzb2x2ZURpc2FibGVGZWVkYmFja0Zyb21XYXNIZWxwZnVsIiwicmVzb2x2ZU1lc3NhZ2VBdHRhY2htZW50cyIsInJlc29sdmVSZXRyeUF0dGFjaG1lbnRzRnJvbVVzZXJNZXNzYWdlIiwic2hvdWxkQXV0b1Njcm9sbE9uTWVzc2FnZXNDaGFuZ2UiLCJzaG91bGRIaWRlQXNzaXN0YW50U3VnZ2VzdGlvbnMiLCJzaG91bGRIaWRlRW1wdHlTdHJlYW1pbmdCb2R5Iiwic2hvdWxkSWdub3JlU3VnZ2VzdGlvbkNsaWNrIiwic2hvdWxkT3Blbk1lc3NhZ2VPcHRpb24iLCJzaG91bGRSZWxlYXNlVHVyblNwYWNlIiwic2hvdWxkUmVuZGVyQXNzaXN0YW50RmVlZGJhY2siLCJzaG91bGRSZW5kZXJBc3Npc3RhbnRTdWdnZXN0aW9ucyIsInNob3VsZFJlbmRlckNoYW5nZVByb2plY3RNZXNzYWdlIiwic2hvdWxkUmVuZGVyQ3JlYXRlQWdlbnRBY3Rpb25zIiwic2hvdWxkUmVuZGVyTWVzc2FnZVRleHRCb2R5Iiwic2hvdWxkU2hvd0FwcHJvdmFsQWN0aW9ucyIsInNob3VsZFNob3dCb3R0b21TY3JvbGxHcmFkaWVudCIsInNob3VsZFNob3dHbG9iYWxTdHJlYW1Mb2FkaW5nSW5kaWNhdG9yIiwic2hvdWxkU2hvd01lc3NhZ2VBdHRhY2htZW50c1JvdyIsInNob3VsZFNob3dTY3JvbGxUb0JvdHRvbSIsInNob3VsZFNob3dTdHJlYW1BY3Rpdml0eUluZGljYXRvciIsInNob3VsZFNob3dTdHJlYW1pbmdNZXNzYWdlQm9keSIsInNob3VsZFNob3dUb3BTY3JvbGxHcmFkaWVudCIsInNob3VsZFNraXBFbXB0eUNoYXRMaXN0TWVzc2FnZSIsInNob3VsZFNraXBUdXJuU2Nyb2xsQW5pbWF0aW9uIiwic2hvdWxkUnVuU3RyZWFtVHVyblN5bmNFZmZlY3QiLCJzaG91bGRVcGRhdGVTcGFjZXJIZWlnaHQiLCJidWlsZFNtb290aFN0cmVhbVRleHRPcHRpb25zIiwiY29tcHV0ZU1lYXN1cmVUdXJuTGF5b3V0IiwiZGV0ZWN0SnVzdEZpbmlzaGVkTG9hZGluZ01lc3NhZ2VzIiwicHJvY2Vzc0NoYXRNZXNzYWdlc1Njcm9sbEZyYW1lIiwicmVhZFNtb290aFN0cmVhbVdpbmRvd0ZsYWdzIiwicmVzb2x2ZVJlc2VydmVUdXJuU3BhY2VQbGFuIiwicmVzb2x2ZVNjcm9sbFRvQm90dG9tVGFyZ2V0VG9wIiwicmVzb2x2ZUNvbnRhaW5lckF0Qm90dG9tIiwicmVzb2x2ZUNyZWF0ZUFnZW50QWN0aW9uc0FnZW50SWQiLCJyZXNvbHZlRmVlZGJhY2tQcm9wc0ZvckNhbmNlbGxlZCIsInJlc29sdmVMYXN0VXNlck1lc3NhZ2VGb3JBdHRhY2htZW50cyIsInJlc29sdmVNZXNzYWdlTGlzdEl0ZW1LZXkiLCJyZXNvbHZlUGVuZGluZ1Njcm9sbFRvcEZyb21TZXNzaW9uIiwicmVzb2x2ZVJlYXNvbmluZ1RyYWNlSG9va0lkIiwicmVzb2x2ZVN0cmVhbWluZ01lc3NhZ2VIb29rSWQiLCJyZXNvbHZlU3RyZWFtaW5nUmF3VGV4dCIsInJlc29sdmVTdHJlYW1pbmdUZXh0SG9va0lkIiwicmVzb2x2ZVN1Z2dlc3Rpb25BbmFseXRpY3NBZ2VudFR5cGUiLCJzaG91bGRBcHBseVBlbmRpbmdTY3JvbGxSZXN0b3JlIiwic2hvdWxkQ2xlYXJMYXN0UmVzZXJ2ZWRRdWVzdGlvbiIsInNob3VsZENsZWFyU2Nyb2xsUmVzdG9yZVdpdGhvdXRDaGF0Iiwic2hvdWxkSW5pdGlhbGl6ZUNoYXQiLCJzaG91bGRSZW5kZXJNZW50aW9uSW5saW5lTm9kZXMiLCJzaG91bGRSZXN0b3JlU2Nyb2xsT25FeHBhbmRlZENoYW5nZSIsInNob3VsZFJ1blNlc3Npb25DYWNoZVNjcm9sbFRvQm90dG9tIiwic2hvdWxkU2NoZWR1bGVUdXJuU3BhY2VSZXNlcnZhdGlvbiIsInNob3VsZFNjcm9sbFRvQm90dG9tQWZ0ZXJMb2FkIiwic2hvdWxkU2tpcE1lc3NhZ2VzU2Nyb2xsRWZmZWN0Iiwic2hvdWxkVXBkYXRlU2Nyb2xsQWZmb3JkYW5jZXNPbkxvYWRFbmQiLCJqc3giLCJfanN4IiwiRnJhZ21lbnQiLCJfRnJhZ21lbnQiLCJqc3hzIiwiX2pzeHMiLCJNZXNzYWdlV3JhcHBlciIsIl9yZWYiLCJpc0N1cnJlbnRVc2VyIiwiY2hpbGRyZW4iLCJwcm9wcyIsIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsIl9leGNsdWRlZCIsIk1lc3NhZ2VDb21wb25lbnQiLCJfb2JqZWN0U3ByZWFkIiwiTWVzc2FnZUNvbnRlbnRXcmFwcGVyIiwiX3JlZjIiLCJfZXhjbHVkZWQyIiwiTWVzc2FnZUNvbnRlbnRDb21wb25lbnQiLCJNZXNzYWdlT3B0aW9ucyIsIl9yZWYzIiwib3B0aW9ucyIsImhhbmRsZVNlbGVjdE9wdGlvbiIsIl91c2VTdGF0ZSIsIl91c2VTdGF0ZTIiLCJfc2xpY2VkVG9BcnJheSIsInNlbGVjdGVkT3B0aW9uIiwic2V0U2VsZWN0ZWRPcHRpb24iLCJoYW5kbGVTZWxlY3QiLCJvcHRpb24iLCJtYXAiLCIkaGFzU2VsZWN0aW9uIiwiJGRpbW1lZCIsImlkIiwib25DbGljayIsIm5hbWUiLCJTdHJlYW1pbmdNZXNzYWdlQm9keSIsIl9wcm9wcyRzdWdnZXN0aW9ucyRsZSIsIl9wcm9wcyRzdWdnZXN0aW9ucyIsInN0cmVhbWluZ1RleHQiLCJpc1N0cmVhbWluZyIsIm1lc3NhZ2VJZCIsInJhd1RleHQiLCJtZXNzYWdlIiwid2luRmxhZ3MiLCJkaXNwbGF5VGV4dCIsImNyZWF0ZUFnZW50QWN0aW9uc0FnZW50SWQiLCJjcmVhdGVBZ2VudEZvbGxvd1VwIiwiaGFzTWVudGlvbnMiLCJtZW50aW9uTm9kZXMiLCJpc0Zyb250ZW5kQ2FuY2VsbGVkIiwiY2xhc3NOYW1lIiwic3R5bGUiLCJkaXNwbGF5IiwidmFyaWFudCIsImNvbXBvbmVudHMiLCJhIiwiaXNBbmltYXRpbmciLCJpc0Fzc2lzdGFudCIsImlzRXJyb3IiLCJhcHByb3ZhbCIsIm9uUmV0cnkiLCJjb250ZW50Iiwic291cmNlcyIsImhhbmRsZUZlZWRiYWNrQ2xpY2siLCJkaXNhYmxlRmVlZGJhY2siLCJzdWdnZXN0aW9uc0xlbmd0aCIsInN1Z2dlc3Rpb25zIiwibGVuZ3RoIiwib25TZWxlY3RTdWdnZXN0aW9uIiwic3VnZ2VzdGlvbiIsImhhbmRsZVN1Z2dlc3Rpb25DbGljayIsImRpc2FibGVkIiwic3VnZ2VzdGlvbnNEaXNhYmxlZCIsImhpZGRlbiIsImlzTGFzdE1lc3NhZ2UiLCJhZ2VudElkIiwiTWVzc2FnZUl0ZW0iLCJfcHJvcHMkcmVhc29uaW5nIiwiX3Byb3BzJHByb2plY3RNZXRhZGF0IiwidXNlciIsImF1dGhVc2VyIiwiaXNDaGFuZ2VQcm9qZWN0IiwiaGFuZGxlRmVlZGJhY2siLCJoYW5kbGVBcHByb3ZhbERlY2lzaW9uIiwiaGFuZGxlUmV0cnkiLCJyb2xlIiwiYXR0YWNobWVudHMiLCJhcHByb3ZhbFN0YXR1cyIsImhhc1NlbGVjdGVkU3VnZ2VzdGlvbiIsInN0cmVhbUFjdGl2aXR5IiwiX3VzZVN0YXRlMyIsIl91c2VTdGF0ZTQiLCJwcmV2aWV3QXR0YWNobWVudCIsInNldFByZXZpZXdBdHRhY2htZW50IiwidG9TdHJpbmciLCJpc1N0cmVhbWluZ1BsYWNlaG9sZGVyIiwiQm9vbGVhbiIsImlzQWN0aXZlU3RyZWFtaW5nIiwiaGFzU3RyZWFtVGV4dCIsInJlYXNvbmluZ1RyYWNlIiwic3RyZWFtTmFycmF0aW9uSW5UaW1lbGluZSIsInN0ZXBzIiwic2hvd1N0cmVhbWluZ0JvZHkiLCJzaG93QWN0aXZpdHlJbmRpY2F0b3IiLCJtZXNzYWdlQXR0YWNobWVudHMiLCJoYW5kbGVBdHRhY2htZW50Q2xpY2siLCJhdHRhY2htZW50IiwiaGFuZGxlQ2xvc2VQcmV2aWV3IiwiaGFuZGxlQXR0YWNobWVudERvd25sb2FkIiwiX3JlZjQiLCJfYXN5bmNUb0dlbmVyYXRvciIsIl9yZWdlbmVyYXRvclJ1bnRpbWUiLCJtYXJrIiwiX2NhbGxlZSIsImZpbGVOYW1lIiwiZmlsZVVybCIsImJsb2JVcmwiLCJkb3dubG9hZFN0cmF0ZWd5IiwiZG93bmxvYWRlZEZpbGUiLCJsaW5rIiwiX3QiLCJ3cmFwIiwiX2NvbnRleHQiLCJwcmV2IiwibmV4dCIsImZpbGUiLCJ0eXBlIiwic2VudCIsIlVSTCIsImNyZWF0ZU9iamVjdFVSTCIsIkZpbGUiLCJhYnJ1cHQiLCJkb2N1bWVudCIsImhyZWYiLCJkb3dubG9hZCIsImJvZHkiLCJhcHBlbmRDaGlsZCIsImNsaWNrIiwic2V0VGltZW91dCIsInJlbW92ZUNoaWxkIiwicmV2b2tlT2JqZWN0VVJMIiwiY29uc29sZSIsImVycm9yIiwic3RvcCIsIl94IiwiYXBwbHkiLCJhcmd1bWVudHMiLCJoYXNGZWVkYmFjayIsIiRpc0Fzc2lzdGFudCIsIm1lc3NhZ2VFeHRyYUNvbnRlbnQiLCJmZWVkYmFjayIsInRyYWNlIiwicmVhc29uaW5nIiwiaW5kZXgiLCJjb25jYXQiLCJwb3NpdGlvbkluZGV4Iiwib25Eb3dubG9hZCIsIm1lc3NhZ2VUZXh0IiwiYXR0YWNobWVudENvdW50IiwiYWN0aXZpdHkiLCJjb21wYWN0IiwiYWN0aW9ucyIsInBlbmRpbmdfYWN0aW9ucyIsInN0YXR1cyIsIm9uQXBwcm92ZSIsInRocmVhZElkcyIsIm1ldGFkYXRhIiwidW5kZWZpbmVkIiwib25SZWplY3QiLCJpc1Byb2plY3REZWxldGVkIiwicHJvamVjdE1ldGFkYXRhIiwiaXNfZGVsZXRlZCIsImlzRXhwYW5kZWQiLCJleHBhbmRlZCIsImhpdGxJbnN0YW5jZUlkIiwib3JpZ2luYWxfdGhyZWFkX2lkIiwid2FybmluZ01lc3NhZ2UiLCJ3YXJuaW5nX21lc3NhZ2UiLCJtYW51YWxBcHByb3ZhbERldGVjdGVkIiwibWFudWFsX2FwcHJvdmFsX2RldGVjdGVkIiwiaXNPcGVuIiwib25DbG9zZSIsIkNoYXRBSU1lc3NhZ2VzSW5uZXIiLCJfcmVmNSIsInVzZXJJbml0aWFsTWVzc2FnZSIsImluaXRpYWxDaGF0SWQiLCJvbkVycm9yIiwib25TZW5kTWVzc2FnZVJlYWR5Iiwib25TY3JvbGxUb0JvdHRvbSIsImFnZW50cyIsIl9yZWY1JHNraXBFbnRlckFuaW1hdCIsInNraXBFbnRlckFuaW1hdGlvbiIsIl91c2VUIiwidCIsIl91c2VHbG9iYWxDb250ZXh0IiwiaXNXZWJTZWFyY2hBY3RpdmUiLCJpc0RlZXBTZWFyY2hBY3RpdmUiLCJhZ2VudCIsImV2ZW50IiwibWVzc2FnZXNSZWYiLCJjaGF0SW5pdGlhbGl6ZWRSZWYiLCJpc0xvYWRpbmdNb3JlUmVmIiwic2Nyb2xsVGhyZXNob2xkUmVmIiwibGFzdFNjcm9sbFRvcFJlZiIsInNob3dTY3JvbGxUb0JvdHRvbVJlZiIsInNob3dUb3BHcmFkaWVudFJlZiIsInNob3dCb3R0b21HcmFkaWVudFJlZiIsInNjcm9sbFJhZlJlZiIsImFuY2hvcmVkVHVybklkUmVmIiwic3BhY2VyRWxSZWYiLCJzcGFjZXJIZWlnaHRSZWYiLCJ0dXJuU2Nyb2xsUmFmUmVmIiwid2FzTG9hZGluZ01lc3NhZ2VzUmVmIiwibGFzdFNjcm9sbGVkU2Vzc2lvblJlZiIsInBlbmRpbmdTY3JvbGxSZXN0b3JlUmVmIiwic2Nyb2xsUGVyc2lzdFRpbWVyUmVmIiwiX3VzZVN0YXRlNSIsIl91c2VTdGF0ZTYiLCJzaG93U2Nyb2xsVG9Cb3R0b20iLCJzZXRTaG93U2Nyb2xsVG9Cb3R0b20iLCJfdXNlU3RhdGU3IiwiX3VzZVN0YXRlOCIsInNob3dUb3BHcmFkaWVudCIsInNldFNob3dUb3BHcmFkaWVudCIsIl91c2VTdGF0ZTkiLCJfdXNlU3RhdGUwIiwic2hvd0JvdHRvbUdyYWRpZW50Iiwic2V0U2hvd0JvdHRvbUdyYWRpZW50IiwiX3VzZVN0YXRlMSIsIl91c2VTdGF0ZTEwIiwic2VsZWN0ZWRTdWdnZXN0aW9uTWVzc2FnZUlkcyIsInNldFNlbGVjdGVkU3VnZ2VzdGlvbk1lc3NhZ2VJZHMiLCJfdXNlQ2hhdE1hbmFnZXIiLCJjaGF0SWQiLCJtZXNzYWdlcyIsImxvYWRpbmdNZXNzYWdlcyIsImlzTG9hZGluZ01vcmVNZXNzYWdlcyIsIndhaXRpbmdSZXNwb25zZSIsImlzV3JpdGluZyIsImxvYWRpbmdNZXNzYWdlIiwiYWN0aXZlTG9hZGluZ3MiLCJzZW5kTWVzc2FnZSIsInJldHJ5TWVzc2FnZSIsImNoYW5nZVByb2plY3QiLCJpbml0aWFsaXplQ2hhdCIsImhhbmRsZVNjcm9sbCIsInN0b3BHZW5lcmF0aW9uIiwidXBkYXRlU2Nyb2xsQWZmb3JkYW5jZXMiLCJlbCIsImN1cnJlbnQiLCJzY3JvbGxUb3AiLCJzY3JvbGxIZWlnaHQiLCJjbGllbnRIZWlnaHQiLCJkaXN0YW5jZUZyb21Cb3R0b20iLCJzaG91bGRTaG93IiwibmV4dFRvcEdyYWRpZW50IiwibmV4dEJvdHRvbUdyYWRpZW50Iiwic2Nyb2xsVG9Cb3R0b21SYWYiLCJvcHRzIiwiX29wdHMkZGVsYXlNcyIsImRlbGF5TXMiLCJydW4iLCJyZXF1ZXN0QW5pbWF0aW9uRnJhbWUiLCJjYW5jZWxUdXJuU2Nyb2xsIiwiY2FuY2VsQW5pbWF0aW9uRnJhbWUiLCJhbmltYXRlU2Nyb2xsVG8iLCJ0b3AiLCJmcm9tIiwiZGlzdGFuY2UiLCJkdXJhdGlvbiIsInN0YXJ0ZWRBdCIsInBlcmZvcm1hbmNlIiwibm93Iiwic3RlcCIsInByb2dyZXNzIiwiTWF0aCIsIm1pbiIsImVhc2VkIiwic2V0U3BhY2VySGVpZ2h0IiwiaGVpZ2h0IiwiY2xlYXJUdXJuU3BhY2UiLCJkcmFpblR1cm5TcGFjZSIsInJlbGVhc2VUdXJuU3BhY2UiLCJoYW5kbGVVc2VyU2Nyb2xsSW50ZW50IiwiaGFuZGxlTWVzc2FnZXNPdXRlcldoZWVsIiwic2Nyb2xsZXIiLCJ0YXJnZXQiLCJjdXJyZW50VGFyZ2V0IiwiY29udGFpbnMiLCJkZWx0YVkiLCJtYXhTY3JvbGwiLCJuZXh0U2Nyb2xsVG9wIiwibWF4IiwicHJldmVudERlZmF1bHQiLCJtZWFzdXJlVHVybiIsInF1ZXN0aW9uSWQiLCJzcGFjZXJFbCIsInF1ZXN0aW9uRWwiLCJxdWVyeVNlbGVjdG9yIiwiY29udGFpbmVyVG9wIiwiZ2V0Qm91bmRpbmdDbGllbnRSZWN0IiwiX2NvbXB1dGVNZWFzdXJlVHVybkxhIiwicXVlc3Rpb25Ub3AiLCJjb250ZW50Qm90dG9tIiwidHVybkhlaWdodCIsInJlc2VydmVUdXJuU3BhY2UiLCJtZWFzdXJlZCIsInRhcmdldFNjcm9sbFRvcCIsInBsYW4iLCJjdXJyZW50U2Nyb2xsVG9wIiwia2luZCIsInNwYWNlckhlaWdodCIsInN5bmNUdXJuU3BhY2UiLCJoYW5kbGVDbGlja1Njcm9sbFRvQm90dG9tIiwiaGFuZGxlU2Nyb2xsVG9Cb3R0b20iLCJlIiwiY29udGFpbmVyIiwic2Nyb2xsRnJhbWUiLCJsYXN0U2Nyb2xsVG9wIiwic2Nyb2xsVGhyZXNob2xkIiwiYW5jaG9yZWRUdXJuSWQiLCJuZXh0U2Nyb2xsVGhyZXNob2xkIiwic2hvdWxkRHJhaW5UdXJuU3BhY2UiLCJzaG91bGRTY2hlZHVsZVNjcm9sbFBlcnNpc3QiLCJ3aW5kb3ciLCJjbGVhclRpbWVvdXQiLCJzY3JvbGxTZXNzaW9uSWQiLCJzaG91bGROb3RpZnlTY3JvbGxUb0JvdHRvbSIsInNlbmRNZXNzYWdlUmVmIiwic3RvcEdlbmVyYXRpb25SZWYiLCJvblNlbmRNZXNzYWdlUmVhZHlSZWYiLCJzZW5kTWVzc2FnZVByb3h5UmVmIiwiZmFxSWQiLCJhZ2VudFN1Z2dlc3Rpb25JZCIsIm1lbnRpb25zIiwiZnVhSWQiLCJzY0lkIiwic3RvcEdlbmVyYXRpb25Qcm94eVJlZiIsIm1lc3NhZ2VzRGF0YVJlZiIsInNlbGVjdGVkU3VnZ2VzdGlvbk1lc3NhZ2VJZHNSZWYiLCJjdXJyZW50TWVzc2FnZXMiLCJpc01hcmtldHBsYWNlR2xvYmFsQWdlbnQiLCJhaUNoYXRTdWdnZXN0ZWRBbnN3ZXIiLCJhZ2VudF90eXBlIiwiX2RlZmluZVByb3BlcnR5IiwidGFyZ2V0TWVzc2FnZSIsImZpbmQiLCJtc2ciLCJsYXN0VXNlck1lc3NhZ2UiLCJmaWx0ZXIiLCJVU0VSIiwiYXQiLCJyYWZJZCIsInRpY2siLCJsYXN0UmVzZXJ2ZWRRdWVzdGlvblJlZiIsImxhc3RNZXNzYWdlSWRSZWYiLCJsYXN0TWVzc2FnZXNMZW5ndGhSZWYiLCJfbWVzc2FnZXMkaWQiLCJfbWVzc2FnZXMiLCJfbGFzdE1lc3NhZ2UkaWQiLCJsYXN0TWVzc2FnZSIsImxhc3RJZCIsInByZXZJZCIsInByZXZMZW4iLCJpc05ld01lc3NhZ2UiLCJzY3JvbGxEZWNpc2lvbiIsImlzQXRCb3R0b20iLCJpc0Fuc3dlck9yUXVlc3Rpb24iLCJpc0FwcHJvdmFsIiwiaGFzSW5pdGlhbE1lc3NhZ2UiLCJtZXNzYWdlc0xlbmd0aCIsInByZXZNZXNzYWdlc0xlbmd0aCIsIl9tZXNzYWdlcyRpZDIiLCJfbWVzc2FnZXMyIiwianVzdEZpbmlzaGVkTG9hZGluZyIsImF0dGFjaG1lbnRzQ291bnQiLCJzdHJlYW1Mb2FkaW5nRGlzcGxheSIsImhhc0F0dGFjaG1lbnRzIiwiX3Nlc3Npb24kc2Nyb2xsU2Vzc2lvIiwiX3Nlc3Npb24kc2Nyb2xsVG9wIiwic2Vzc2lvbiIsInBlbmRpbmdTY3JvbGxUb3AiLCJleHBhbmRlZFJlZiIsInNhdmVkU2Nyb2xsVG9wIiwiZmlsbCIsImhhc01lc3NhZ2VMZXZlbEluZGljYXRvciIsIm1lc3NhZ2VzQ29udGVudCIsInRleHQiLCJfbWVzc2FnZSRhdHRhY2htZW50cyQiLCJfbWVzc2FnZSRhdHRhY2htZW50cyIsIl9tZXNzYWdlJHNvdXJjZXMkbGVuZyIsIl9tZXNzYWdlJHNvdXJjZXMiLCJfbWVzc2FnZSRtZXNzYWdlIiwiX21lc3NhZ2UkcHJvamVjdCIsIl9yZXNvbHZlQ2hhdExpc3RJdGVtUyIsInVzZXJJZCIsInNvdXJjZUNvdW50IiwicHJvamVjdE5hbWUiLCJwcm9qZWN0IiwiaGFzQXBwcm92YWwiLCJtZXNzYWdlRmVlZGJhY2siLCJ3YXNIZWxwZnVsIiwibWVzc2FnZUtleSIsInR1cm5JZCIsInVzZXJNZXNzYWdlRm9yUmV0cnkiLCJjYW5SZXRyeSIsImhhc1VzZXJNZXNzYWdlRm9yUmV0cnkiLCJpc0NhbmNlbGxlZCIsImlzX2NhbmNlbGxlZCIsImtleSIsInJlZiIsIm9uV2hlZWwiLCJvblRvdWNoU3RhcnQiLCIkc2hvdyIsIm9uU2Nyb2xsIiwiJHNraXBFbnRlciIsIiR2aXNpYmxlIiwieG1sbnMiLCJ3aWR0aCIsInN0cm9rZSIsInN0cm9rZUxpbmVjYXAiLCJzdHJva2VMaW5lam9pbiIsInN0cm9rZVdpZHRoIiwiZCIsIkNoYXRBSU1lc3NhZ2VzIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvbW9sZWN1bGVzL0NoYXRBSU1lc3NhZ2VzL0NoYXRBSU1lc3NhZ2VzLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBpbXBvcnQvbm8tZXh0cmFuZW91cy1kZXBlbmRlbmNpZXMgKi9cbi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9pbmRlbnQgKi9cbi8qIGVzbGludC1kaXNhYmxlIHJlYWN0L25vLXVuc3RhYmxlLW5lc3RlZC1jb21wb25lbnRzICovXG4vKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tc2hhZG93ICovXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1uZXN0ZWQtdGVybmFyeSAqL1xuLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSAqL1xuLyogZXNsaW50LWRpc2FibGUgbm8tdW5kZWYgKi9cbi8qIGVzbGludC1kaXNhYmxlIHJlYWN0L2Z1bmN0aW9uLWNvbXBvbmVudC1kZWZpbml0aW9uICovXG4vKiBlc2xpbnQtZGlzYWJsZSByZWFjdC9yZXF1aXJlLWRlZmF1bHQtcHJvcHMgKi9cbi8qIGVzbGludC1kaXNhYmxlIGpzeC1hMTF5L2NsaWNrLWV2ZW50cy1oYXZlLWtleS1ldmVudHMgKi9cbi8qIGVzbGludC1kaXNhYmxlIGpzeC1hMTF5L25vLXN0YXRpYy1lbGVtZW50LWludGVyYWN0aW9ucyAqL1xuaW1wb3J0IFJlYWN0LCB7IEZDLCBtZW1vLCBSZWFjdE5vZGUsIHVzZUNhbGxiYWNrLCB1c2VFZmZlY3QsIHVzZUxheW91dEVmZmVjdCwgdXNlUmVmLCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0J1xuXG5pbXBvcnQgeyBBdHRhY2htZW50Q2FyZCB9IGZyb20gJy4uLy4uL2F0b21zL0F0dGFjaG1lbnRDYXJkL0F0dGFjaG1lbnRDYXJkJ1xuaW1wb3J0IHsgQXBwcm92YWxCb3ggfSBmcm9tICcuLi8uLi9hdG9tcy9BcHByb3ZhbEJveC9BcHByb3ZhbEJveCdcbmltcG9ydCB7IEF0dGFjaG1lbnRQcmV2aWV3TW9kYWwgfSBmcm9tICcuLi8uLi9hdG9tcy9BdHRhY2htZW50UHJldmlld01vZGFsJ1xuaW1wb3J0IHsgQXR0YWNobWVudENhcmRBdWRpbyB9IGZyb20gJy4uLy4uL2F0b21zL0F0dGFjaG1lbnRDYXJkL0F0dGFjaG1lbnRDYXJkQXVkaW8nXG5pbXBvcnQgeyBNYWlhU3RyZWFtZG93biB9IGZyb20gJy4uLy4uL2F0b21zL01haWFTdHJlYW1kb3duJ1xuaW1wb3J0IHR5cGUgeyBNYWlhU3RyZWFtZG93blByb3BzIH0gZnJvbSAnLi4vLi4vYXRvbXMvTWFpYVN0cmVhbWRvd24nXG5pbXBvcnQgeyBNQUlBTWVzc2FnZVByb3BzIH0gZnJvbSAnLi4vLi4vYXRvbXMvTUFJQU1lc3NhZ2UvTUFJQU1lc3NhZ2UuaW50ZXJmYWNlcydcbmltcG9ydCB7IENoYXRNZXNzYWdlLCBDaGF0SGlzdG9yeVJvbGUgfSBmcm9tICcuLi8uLi8uLi90eXBlcy9DaGF0J1xuaW1wb3J0IHsgcmVuZGVyVGV4dFdpdGhNZW50aW9ucywgaGFzSW5saW5lTWFya2VycyB9IGZyb20gJy4uLy4uLy4uL3V0aWxzL3JlbmRlckNvbnRleHRNZW50aW9ucydcblxuaW1wb3J0IHsgaXNNYWlha2VyQWdlbnQgfSBmcm9tICcuLi8uLi8uLi91dGlscy9hZ2VudERpc3BsYXlOYW1lJ1xuaW1wb3J0IHsgQ09SVXNlciwgdXNlVXNlciB9IGZyb20gJy4uLy4uLy4uL2NvbnRleHQvY29yLXVzZXInXG5cbmltcG9ydCB7IHVzZVQgfSBmcm9tICcuLi8uLi8uLi9ob29rcy91c2VUJ1xuaW1wb3J0IHsgdXNlQ2hhdE1hbmFnZXIgfSBmcm9tICcuLi8uLi8uLi9ob29rcy91c2VDaGF0TWFuYWdlci91c2VDaGF0TWFuYWdlcidcbmltcG9ydCB7IHVzZVNtb290aFN0cmVhbVRleHQgfSBmcm9tICcuLi8uLi8uLi9ob29rcy91c2VTbW9vdGhTdHJlYW1UZXh0J1xuaW1wb3J0IHsgdXNlU3RyZWFtaW5nTWVzc2FnZSB9IGZyb20gJy4uLy4uLy4uL2hvb2tzL3VzZVN0cmVhbWluZ01lc3NhZ2UnXG5cbmltcG9ydCB7IExvYWRpbmdUZXh0IH0gZnJvbSAnLi4vLi4vYXRvbXMvTG9hZGluZ1RleHQnXG5pbXBvcnQgeyBBZ2VudEFjdGl2aXR5SW5kaWNhdG9yIH0gZnJvbSAnLi4vLi4vYXRvbXMvQWdlbnRBY3Rpdml0eUluZGljYXRvcidcbmltcG9ydCB7IFJlYXNvbmluZ0Jsb2NrIH0gZnJvbSAnLi4vLi4vYXRvbXMvUmVhc29uaW5nQmxvY2svUmVhc29uaW5nQmxvY2snXG5pbXBvcnQgeyBzaG91bGRTdHJlYW1OYXJyYXRpb25JblRpbWVsaW5lIH0gZnJvbSAnLi4vLi4vYXRvbXMvUmVhc29uaW5nQmxvY2svcmVhc29uaW5nTGl2ZU5hcnJhdGlvbidcbmltcG9ydCB7IFJlYXNvbmluZ1RpbWVsaW5lIH0gZnJvbSAnLi4vLi4vYXRvbXMvUmVhc29uaW5nQmxvY2svUmVhc29uaW5nVGltZWxpbmUnXG5pbXBvcnQgeyBTQ1RpbWVsaW5lSW5kaWNhdG9yIH0gZnJvbSAnLi4vLi4vYXRvbXMvUmVhc29uaW5nQmxvY2svUmVhc29uaW5nQmxvY2suc3R5bGVzJ1xuaW1wb3J0IHR5cGUgeyBTdHJlYW1BY3Rpdml0eSB9IGZyb20gJy4uLy4uLy4uL3R5cGVzL3N0cmVhbUFjdGl2aXR5J1xuaW1wb3J0IHsgaXNTdHJlYW1pbmdQbGFjZWhvbGRlck1lc3NhZ2VJZCwgcmVzb2x2ZVN0cmVhbUxvYWRpbmdEaXNwbGF5IH0gZnJvbSAnLi4vLi4vLi4vdXRpbHMvc3RyZWFtQWN0aXZpdHlNZXNzYWdlcydcbmltcG9ydCB7IHJlc29sdmVSZXRyeVR1cm5JZCwgZmluZFVzZXJNZXNzYWdlRm9yUmV0cnkgfSBmcm9tICcuLi8uLi8uLi91dGlscy9yZXRyeUNvbXBsZXRpb24nXG5pbXBvcnQgeyB1c2VSZWFzb25pbmdUcmFjZSB9IGZyb20gJy4uLy4uLy4uL2hvb2tzL3VzZVJlYXNvbmluZ1RyYWNlJ1xuaW1wb3J0IHsgTG9hZGVyIH0gZnJvbSAnLi4vLi4vYXRvbXMvTG9hZGVyJ1xuaW1wb3J0IHsgRmFkZSB9IGZyb20gJy4uLy4uL2F0b21zL0ZhZGUnXG5pbXBvcnQgeyBwYXRjaE1haWFQYW5lbFNlc3Npb24sIHJlYWRNYWlhUGFuZWxTZXNzaW9uIH0gZnJvbSAnLi4vLi4vLi4vc3RvcmUvbWFpYVBhbmVsU2Vzc2lvblBlcnNpc3RlbmNlJ1xuXG5pbXBvcnQgeyBQcm9qZWN0IH0gZnJvbSAnLi4vLi4vLi4vdHlwZXMvUHJvamVjdCdcblxuaW1wb3J0IHsgTWVzc2FnZUZyb21Vc2VyLCBNZXNzYWdlRnJvbU90aGVyLCBNZXNzYWdlQ29udGVudEZyb21Vc2VyLCBNZXNzYWdlQ29udGVudEZyb21PdGhlciB9IGZyb20gJy4vc3R5bGVzJ1xuaW1wb3J0IHsgTWVzc2FnZUZlZWRiYWNrIH0gZnJvbSAnLi4vTWVzc2FnZUZlZWRiYWNrJ1xuaW1wb3J0IHtcbiAgU0NDQUlNZXNzYWdlV3JhcHBlcixcbiAgU2Nyb2xsVG9Cb3R0b21CdXR0b24sXG4gIFNDU2Nyb2xsSWNvblN3YXAsXG4gIFNDV3JpdGluZ0RvdHMsXG4gIFNDTWVzc2FnZXNPdXRlcixcbiAgU0NNZXNzYWdlc1Njcm9sbCxcbiAgU0NNZXNzYWdlc0lubmVyLFxuICBTQ1R1cm5TcGFjZXIsXG4gIFNDT3B0aW9uc0xpc3QsXG4gIFNDT3B0aW9uSXRlbSxcbiAgU0NNZXNzYWdlSXRlbVdyYXBwZXIsXG4gIFNDTWVzc2FnZUl0ZW1Jbm5lcixcbiAgU0NBdHRhY2htZW50c1JvdyxcbiAgU0NBcHByb3ZhbEFjdGlvbnNDb2x1bW4sXG4gIFNDTG9hZGluZ01lc3NhZ2VzQ29sdW1uLFxuICBTQ01lc3NhZ2VzR3JhZGllbnRUb3AsXG4gIFNDTWVzc2FnZXNHcmFkaWVudEJvdHRvbSxcbn0gZnJvbSAnLi9uZXdTdHlsZXMnXG5pbXBvcnQgeyBGZWVkYmFjayB9IGZyb20gJy4uL01lc3NhZ2VGZWVkYmFjay9NZXNzYWdlRmVlZGJhY2snXG5pbXBvcnQgeyB1c2VHbG9iYWxDb250ZXh0IH0gZnJvbSAnLi4vLi4vLi4vY29udGV4dC9nbG9iYWwtY29udGV4dCdcbmltcG9ydCB7IEFnZW50IH0gZnJvbSAnLi4vLi4vLi4vdHlwZXMvYWdlbnQnXG5pbXBvcnQgeyBBdHRhY2htZW50RmlsZSB9IGZyb20gJy4uL0NoYXRGb290ZXIvQ2hhdEZvb3RlcidcbmltcG9ydCB7IENvbnRleHRNZW50aW9uIH0gZnJvbSAnLi4vLi4vLi4vdHlwZXMvY29udGV4dE1lbnRpb24nXG5pbXBvcnQgeyBFbnRpdHlMaW5rQ3VzdG9tTGluaywgZ2V0RW50aXR5TGlua1dyYXBwZXJDbGFzc05hbWUgfSBmcm9tICcuLi8uLi8uLi91dGlscy9lbnRpdHlMaW5rUmVuZGVyJ1xuaW1wb3J0IHsgQ2hhdEFJU3VnZ2VzdGlvbnMgfSBmcm9tICcuL0NoYXRBSVN1Z2dlc3Rpb25zJ1xuaW1wb3J0IHsgQ2hhdEFJQ3JlYXRlQWdlbnRBY3Rpb25zIH0gZnJvbSAnLi9DaGF0QUlDcmVhdGVBZ2VudEFjdGlvbnMnXG5pbXBvcnQgeyBFVkVOVFMsIHVzZUV2ZW50IH0gZnJvbSAnLi4vLi4vLi4vaG9va3MvdXNlRXZlbnQnXG5pbXBvcnQgeyBkb3dubG9hZEZpbGVGcm9tVXJsIH0gZnJvbSAnLi4vLi4vLi4vdXRpbHMvZmlsZURvd25sb2FkSGVscGVyJ1xuaW1wb3J0IHtcbiAgY2FuT3BlbkF0dGFjaG1lbnRQcmV2aWV3LFxuICBjYW5SZXRyeUFzc2lzdGFudE1lc3NhZ2UsXG4gIGNvbXB1dGVEaXN0YW5jZUZyb21Cb3R0b20sXG4gIGNvbXB1dGVSZW1vdmFibGVUdXJuU3BhY2UsXG4gIGNvbXB1dGVTeW5jZWRUdXJuU3BhY2VySGVpZ2h0LFxuICBjb21wdXRlVHVyblNjcm9sbER1cmF0aW9uTXMsXG4gIGNvbXB1dGVUdXJuU2Nyb2xsVGFyZ2V0VG9wLFxuICBjb3VudFVzZXJNZXNzYWdlQXR0YWNobWVudHMsXG4gIGVhc2VPdXRFeHBvU2Nyb2xsUHJvZ3Jlc3MsXG4gIGV4dHJhY3RGZWVkYmFja1Nlc3Npb25JZCxcbiAgZmluZExhc3RRdWVzdGlvbklkLFxuICBoYXNJbml0aWFsVXNlck1lc3NhZ2VJbkxpc3QsXG4gIGhhc01lc3NhZ2VMZXZlbFN0cmVhbUluZGljYXRvcixcbiAgaXNBY3RpdmVTdHJlYW1pbmdTdGF0ZSxcbiAgaXNBbnN3ZXJPclF1ZXN0aW9uQ2hhdE1lc3NhZ2VJZCxcbiAgaXNBcHByb3ZhbENoYXRNZXNzYWdlLFxuICBpc0Fzc2lzdGFudENoYXRNZXNzYWdlLFxuICBpc0F1ZGlvQXR0YWNobWVudCxcbiAgaXNDdXJyZW50VXNlck1lc3NhZ2UsXG4gIGlzTmV3Q2hhdE1lc3NhZ2VFdmVudCxcbiAgaXNSZXRyeVN1Z2dlc3Rpb25TZWxlY3Rpb24sXG4gIHJlc29sdmVBdHRhY2htZW50RG93bmxvYWRCbG9iU3RyYXRlZ3ksXG4gIHJlc29sdmVBdHRhY2htZW50RG93bmxvYWRGaWxlTmFtZSxcbiAgcmVzb2x2ZUF0dGFjaG1lbnREb3dubG9hZFVybCxcbiAgcmVzb2x2ZUNoYXRMaXN0SXRlbVN0cmVhbWluZ0ZsYWdzLFxuICByZXNvbHZlRGlzYWJsZUZlZWRiYWNrRnJvbVdhc0hlbHBmdWwsXG4gIHJlc29sdmVNZXNzYWdlQXR0YWNobWVudHMsXG4gIHJlc29sdmVSZXRyeUF0dGFjaG1lbnRzRnJvbVVzZXJNZXNzYWdlLFxuICBzaG91bGRBdXRvU2Nyb2xsT25NZXNzYWdlc0NoYW5nZSxcbiAgc2hvdWxkSGlkZUFzc2lzdGFudFN1Z2dlc3Rpb25zLFxuICBzaG91bGRIaWRlRW1wdHlTdHJlYW1pbmdCb2R5LFxuICBzaG91bGRJZ25vcmVTdWdnZXN0aW9uQ2xpY2ssXG4gIHNob3VsZE9wZW5NZXNzYWdlT3B0aW9uLFxuICBzaG91bGRSZWxlYXNlVHVyblNwYWNlLFxuICBzaG91bGRSZW5kZXJBc3Npc3RhbnRGZWVkYmFjayxcbiAgc2hvdWxkUmVuZGVyQXNzaXN0YW50U3VnZ2VzdGlvbnMsXG4gIHNob3VsZFJlbmRlckNoYW5nZVByb2plY3RNZXNzYWdlLFxuICBzaG91bGRSZW5kZXJDcmVhdGVBZ2VudEFjdGlvbnMsXG4gIHNob3VsZFJlbmRlck1lc3NhZ2VUZXh0Qm9keSxcbiAgc2hvdWxkU2hvd0FwcHJvdmFsQWN0aW9ucyxcbiAgc2hvdWxkU2hvd0JvdHRvbVNjcm9sbEdyYWRpZW50LFxuICBzaG91bGRTaG93R2xvYmFsU3RyZWFtTG9hZGluZ0luZGljYXRvcixcbiAgc2hvdWxkU2hvd01lc3NhZ2VBdHRhY2htZW50c1JvdyxcbiAgc2hvdWxkU2hvd1Njcm9sbFRvQm90dG9tLFxuICBzaG91bGRTaG93U3RyZWFtQWN0aXZpdHlJbmRpY2F0b3IsXG4gIHNob3VsZFNob3dTdHJlYW1pbmdNZXNzYWdlQm9keSxcbiAgc2hvdWxkU2hvd1RvcFNjcm9sbEdyYWRpZW50LFxuICBzaG91bGRTa2lwRW1wdHlDaGF0TGlzdE1lc3NhZ2UsXG4gIHNob3VsZFNraXBUdXJuU2Nyb2xsQW5pbWF0aW9uLFxuICBzaG91bGRSdW5TdHJlYW1UdXJuU3luY0VmZmVjdCxcbiAgc2hvdWxkVXBkYXRlU3BhY2VySGVpZ2h0LFxuICBidWlsZFNtb290aFN0cmVhbVRleHRPcHRpb25zLFxuICBjb21wdXRlTWVhc3VyZVR1cm5MYXlvdXQsXG4gIGRldGVjdEp1c3RGaW5pc2hlZExvYWRpbmdNZXNzYWdlcyxcbiAgcHJvY2Vzc0NoYXRNZXNzYWdlc1Njcm9sbEZyYW1lLFxuICByZWFkU21vb3RoU3RyZWFtV2luZG93RmxhZ3MsXG4gIHJlc29sdmVSZXNlcnZlVHVyblNwYWNlUGxhbixcbiAgcmVzb2x2ZVNjcm9sbFRvQm90dG9tVGFyZ2V0VG9wLFxuICByZXNvbHZlQ29udGFpbmVyQXRCb3R0b20sXG4gIHJlc29sdmVDcmVhdGVBZ2VudEFjdGlvbnNBZ2VudElkLFxuICByZXNvbHZlRmVlZGJhY2tQcm9wc0ZvckNhbmNlbGxlZCxcbiAgcmVzb2x2ZUxhc3RVc2VyTWVzc2FnZUZvckF0dGFjaG1lbnRzLFxuICByZXNvbHZlTWVzc2FnZUxpc3RJdGVtS2V5LFxuICByZXNvbHZlUGVuZGluZ1Njcm9sbFRvcEZyb21TZXNzaW9uLFxuICByZXNvbHZlUmVhc29uaW5nVHJhY2VIb29rSWQsXG4gIHJlc29sdmVTdHJlYW1pbmdNZXNzYWdlSG9va0lkLFxuICByZXNvbHZlU3RyZWFtaW5nUmF3VGV4dCxcbiAgcmVzb2x2ZVN0cmVhbWluZ1RleHRIb29rSWQsXG4gIHJlc29sdmVTdWdnZXN0aW9uQW5hbHl0aWNzQWdlbnRUeXBlLFxuICBzaG91bGRBcHBseVBlbmRpbmdTY3JvbGxSZXN0b3JlLFxuICBzaG91bGRDbGVhckxhc3RSZXNlcnZlZFF1ZXN0aW9uLFxuICBzaG91bGRDbGVhclNjcm9sbFJlc3RvcmVXaXRob3V0Q2hhdCxcbiAgc2hvdWxkSW5pdGlhbGl6ZUNoYXQsXG4gIHNob3VsZFJlbmRlck1lbnRpb25JbmxpbmVOb2RlcyxcbiAgc2hvdWxkUmVzdG9yZVNjcm9sbE9uRXhwYW5kZWRDaGFuZ2UsXG4gIHNob3VsZFJ1blNlc3Npb25DYWNoZVNjcm9sbFRvQm90dG9tLFxuICBzaG91bGRTY2hlZHVsZVR1cm5TcGFjZVJlc2VydmF0aW9uLFxuICBzaG91bGRTY3JvbGxUb0JvdHRvbUFmdGVyTG9hZCxcbiAgc2hvdWxkU2tpcE1lc3NhZ2VzU2Nyb2xsRWZmZWN0LFxuICBzaG91bGRVcGRhdGVTY3JvbGxBZmZvcmRhbmNlc09uTG9hZEVuZCxcbn0gZnJvbSAnLi9DaGF0QUlNZXNzYWdlcy5oZWxwZXJzJ1xuXG50eXBlIENoYXRBSU1lc3NhZ2VzUHJvcHMgPSB7XG4gIHVzZXJJbml0aWFsTWVzc2FnZToge1xuICAgIG1lc3NhZ2U6IHN0cmluZ1xuICAgIGF0dGFjaG1lbnRzOiBBdHRhY2htZW50RmlsZVtdXG4gICAgZmFxSWQ/OiBzdHJpbmdcbiAgICBhZ2VudFN1Z2dlc3Rpb25JZD86IHN0cmluZ1xuICAgIG1lbnRpb25zPzogQ29udGV4dE1lbnRpb25bXVxuICAgIGZ1YUlkPzogc3RyaW5nXG4gICAgc2NJZD86IHN0cmluZ1xuICAgIGNvbnRleHREYXRhPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj5cbiAgfVxuICBpbml0aWFsQ2hhdElkOiBzdHJpbmcgfCBudWxsXG4gIG9uRXJyb3I6ICgpID0+IHZvaWRcbiAgb25TZW5kTWVzc2FnZVJlYWR5PzogKFxuICAgIHNlbmRNZXNzYWdlOiAoXG4gICAgICBtZXNzYWdlOiBzdHJpbmcsXG4gICAgICBhdHRhY2htZW50cz86IEF0dGFjaG1lbnRGaWxlW10sXG4gICAgICBmYXFJZD86IHN0cmluZyxcbiAgICAgIGFnZW50U3VnZ2VzdGlvbklkPzogc3RyaW5nLFxuICAgICAgbWVudGlvbnM/OiBDb250ZXh0TWVudGlvbltdLFxuICAgICAgZnVhSWQ/OiBzdHJpbmcsXG4gICAgICBzY0lkPzogc3RyaW5nLFxuICAgICAgY29udGV4dERhdGE/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxuICAgICkgPT4gdm9pZCxcbiAgICBzdG9wR2VuZXJhdGlvbjogKCkgPT4gdm9pZCxcbiAgICBpc1N0cmVhbWluZzogYm9vbGVhbixcbiAgICBpc1dyaXRpbmc6IGJvb2xlYW5cbiAgKSA9PiB2b2lkXG4gIGlzRGlzYWJsZWQ/OiBib29sZWFuXG4gIG9uU2Nyb2xsVG9Cb3R0b20/OiAoKSA9PiB2b2lkXG4gIGF0dGFjaG1lbnRzPzogQXR0YWNobWVudEZpbGVbXVxuICBhZ2VudHM/OiBBZ2VudFtdXG4gIGV4cGFuZGVkPzogYm9vbGVhblxuICBza2lwRW50ZXJBbmltYXRpb24/OiBib29sZWFuXG59XG5cbnR5cGUgTWVzc2FnZUl0ZW1Qcm9wcyA9IENoYXRNZXNzYWdlICYge1xuICBhdXRoVXNlcjogQ09SVXNlclxuICBoYW5kbGVTZWxlY3RPcHRpb246IChvcHRpb246IFByb2plY3QpID0+IHZvaWRcbiAgaGFuZGxlU3VnZ2VzdGlvbkNsaWNrOiAobWVzc2FnZUlkOiBzdHJpbmcsIHN1Z2dlc3Rpb246IHN0cmluZykgPT4gdm9pZFxuICBoYXNTZWxlY3RlZFN1Z2dlc3Rpb24/OiBib29sZWFuXG4gIGhhbmRsZUZlZWRiYWNrOiAoZmVlZGJhY2s6IEZlZWRiYWNrLCBjaGF0TWVzc2FnZUlkOiBzdHJpbmcpID0+IHZvaWRcbiAgaGFuZGxlQXBwcm92YWxEZWNpc2lvbjogKFxuICAgIHRocmVhZElkczogc3RyaW5nW10sXG4gICAgZGVjaXNpb246ICdhcHByb3ZlJyB8ICdyZWplY3QnLFxuICAgIGVkaXRlZEFjdGlvbnM/OiBBcnJheTx7IHRvb2xfbmFtZTogc3RyaW5nOyBhcmdzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB9PixcbiAgICBtZXRhZGF0YT86IHsgdG9vbF9ncm91cF9zbHVnczogc3RyaW5nW10gfVxuICApID0+IHZvaWRcbiAgaGFuZGxlUmV0cnk/OiAoKSA9PiB2b2lkXG4gIGRpc2FibGVGZWVkYmFjaz86IEZlZWRiYWNrIHwgbnVsbFxuICBzb3VyY2VzPzogYW55XG4gIGF0dGFjaG1lbnRzPzogQXR0YWNobWVudEZpbGVbXVxuICBpc1N0cmVhbWluZz86IGJvb2xlYW5cbiAgaXNMYXN0TWVzc2FnZT86IGJvb2xlYW5cbiAgZXhwYW5kZWQ/OiBib29sZWFuXG4gIHN0cmVhbUFjdGl2aXR5PzogU3RyZWFtQWN0aXZpdHkgfCBudWxsXG59XG5cbmludGVyZmFjZSBNZXNzYWdlV3JhcHBlclByb3BzIHtcbiAgaXNDdXJyZW50VXNlcjogYm9vbGVhblxuICBjaGlsZHJlbjogUmVhY3ROb2RlXG4gICdkYXRhLW1lc3NhZ2UtaWQnPzogc3RyaW5nXG4gIGhhc0ZlZWRiYWNrPzogYm9vbGVhblxufVxuXG50eXBlIE1lc3NhZ2VDb250ZW50V3JhcHBlclByb3BzID0gTUFJQU1lc3NhZ2VQcm9wcyAmIHtcbiAgaXNDdXJyZW50VXNlcjogYm9vbGVhblxuICBpc0Vycm9yPzogYm9vbGVhblxuICBpc0NoYW5nZVByb2plY3Q/OiBib29sZWFuXG59XG5cbmNvbnN0IE1lc3NhZ2VXcmFwcGVyOiBGQzxNZXNzYWdlV3JhcHBlclByb3BzPiA9ICh7IGlzQ3VycmVudFVzZXIsIGNoaWxkcmVuLCAuLi5wcm9wcyB9KSA9PiB7XG4gIGNvbnN0IE1lc3NhZ2VDb21wb25lbnQgPSBpc0N1cnJlbnRVc2VyID8gTWVzc2FnZUZyb21Vc2VyIDogTWVzc2FnZUZyb21PdGhlclxuICByZXR1cm4gPE1lc3NhZ2VDb21wb25lbnQgey4uLnByb3BzfT57Y2hpbGRyZW59PC9NZXNzYWdlQ29tcG9uZW50PlxufVxuXG5jb25zdCBNZXNzYWdlQ29udGVudFdyYXBwZXI6IEZDPE1lc3NhZ2VDb250ZW50V3JhcHBlclByb3BzPiA9ICh7IGlzQ3VycmVudFVzZXIsIC4uLnByb3BzIH0pID0+IHtcbiAgY29uc3QgTWVzc2FnZUNvbnRlbnRDb21wb25lbnQgPSBpc0N1cnJlbnRVc2VyID8gTWVzc2FnZUNvbnRlbnRGcm9tVXNlciA6IE1lc3NhZ2VDb250ZW50RnJvbU90aGVyXG4gIHJldHVybiA8TWVzc2FnZUNvbnRlbnRDb21wb25lbnQgey4uLnByb3BzfSAvPlxufVxuXG5mdW5jdGlvbiBNZXNzYWdlT3B0aW9ucyh7XG4gIG9wdGlvbnMsXG4gIGhhbmRsZVNlbGVjdE9wdGlvbixcbn06IHtcbiAgb3B0aW9uczogUHJvamVjdFtdIHwgbnVsbFxuICBoYW5kbGVTZWxlY3RPcHRpb246IChvcHRpb246IFByb2plY3QpID0+IHZvaWRcbn0pIHtcbiAgY29uc3QgW3NlbGVjdGVkT3B0aW9uLCBzZXRTZWxlY3RlZE9wdGlvbl0gPSB1c2VTdGF0ZTxQcm9qZWN0IHwgbnVsbD4obnVsbClcblxuICBjb25zdCBoYW5kbGVTZWxlY3QgPSAob3B0aW9uOiBQcm9qZWN0KSA9PiB7XG4gICAgaWYgKCFzaG91bGRPcGVuTWVzc2FnZU9wdGlvbihzZWxlY3RlZE9wdGlvbikpIHJldHVyblxuICAgIHNldFNlbGVjdGVkT3B0aW9uKG9wdGlvbilcbiAgICBoYW5kbGVTZWxlY3RPcHRpb24ob3B0aW9uKVxuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8U0NPcHRpb25zTGlzdD5cbiAgICAgIHsob3B0aW9ucyB8fCBbXSkubWFwKG9wdGlvbiA9PiAoXG4gICAgICAgIDxTQ09wdGlvbkl0ZW1cbiAgICAgICAgICAkaGFzU2VsZWN0aW9uPXshIXNlbGVjdGVkT3B0aW9ufVxuICAgICAgICAgICRkaW1tZWQ9eyEhc2VsZWN0ZWRPcHRpb24gJiYgc2VsZWN0ZWRPcHRpb24/LmlkICE9PSBvcHRpb24uaWR9XG4gICAgICAgICAgb25DbGljaz17KCkgPT4gaGFuZGxlU2VsZWN0KG9wdGlvbil9XG4gICAgICAgICAga2V5PXtvcHRpb24uaWR9XG4gICAgICAgID5cbiAgICAgICAgICB7b3B0aW9uLm5hbWV9XG4gICAgICAgIDwvU0NPcHRpb25JdGVtPlxuICAgICAgKSl9XG4gICAgPC9TQ09wdGlvbnNMaXN0PlxuICApXG59XG5cbi8qKiBTb2xvIGVzdGUgY29tcG9uZW50ZSByZS1yZW5kZXJpemEgY3VhbmRvIGNhbWJpYSBlbCB0ZXh0byBlbiBzdHJlYW1pbmcgKGxlZSBkZWwgY29udGV4dCkuICovXG5jb25zdCBTdHJlYW1pbmdNZXNzYWdlQm9keSA9IG1lbW8oXG4gIChwcm9wczoge1xuICAgIG1lc3NhZ2U6IHN0cmluZ1xuICAgIGlzU3RyZWFtaW5nOiBib29sZWFuXG4gICAgaXNDdXJyZW50VXNlcjogYm9vbGVhblxuICAgIGlzQXNzaXN0YW50OiBib29sZWFuXG4gICAgaXNGcm9udGVuZENhbmNlbGxlZD86IGJvb2xlYW5cbiAgICBhcHByb3ZhbD86IE1lc3NhZ2VJdGVtUHJvcHNbJ2FwcHJvdmFsJ11cbiAgICBpc0Vycm9yPzogYm9vbGVhblxuICAgIHNvdXJjZXM/OiBNZXNzYWdlSXRlbVByb3BzWydzb3VyY2VzJ11cbiAgICBzdWdnZXN0aW9ucz86IHN0cmluZ1tdIHwgbnVsbFxuICAgIGNyZWF0ZUFnZW50Rm9sbG93VXA/OiB7IGFnZW50SWQ6IHN0cmluZyB9IHwgbnVsbFxuICAgIGhhbmRsZUZlZWRiYWNrQ2xpY2s6IChmOiBGZWVkYmFjaykgPT4gdm9pZFxuICAgIGRpc2FibGVGZWVkYmFjazogRmVlZGJhY2sgfCBudWxsXG4gICAgb25SZXRyeT86ICgpID0+IHZvaWRcbiAgICBoYW5kbGVTdWdnZXN0aW9uQ2xpY2s6IChtZXNzYWdlSWQ6IHN0cmluZywgc3VnZ2VzdGlvbjogc3RyaW5nKSA9PiB2b2lkXG4gICAgc3VnZ2VzdGlvbnNEaXNhYmxlZD86IGJvb2xlYW5cbiAgICBtZXNzYWdlSWQ6IHN0cmluZ1xuICAgIGlzTGFzdE1lc3NhZ2U/OiBib29sZWFuXG4gIH0pID0+IHtcbiAgICAvLyBUZXh0byBkZWwgc3RyZWFtOiBzb2xvIHNlIGxlZSBkZWwgc3RvcmUgY3VhbmRvIGVzdGUgbWVuc2FqZSBlcyBlbFxuICAgIC8vIHF1ZSBlc3TDoSBlbiBzdHJlYW1pbmcuIHVzZVN5bmNFeHRlcm5hbFN0b3JlIGHDrXNsYSBlbCByZS1yZW5kZXIgYVxuICAgIC8vIGVzdGUgY29tcG9uZW50ZSwgc2luIHRvY2FyIGVsIHJlc3RvIGRlbCDDoXJib2wuXG4gICAgY29uc3Qgc3RyZWFtaW5nVGV4dCA9IHVzZVN0cmVhbWluZ01lc3NhZ2UocmVzb2x2ZVN0cmVhbWluZ01lc3NhZ2VIb29rSWQocHJvcHMuaXNTdHJlYW1pbmcsIHByb3BzLm1lc3NhZ2VJZCkpXG4gICAgY29uc3QgcmF3VGV4dCA9IHJlc29sdmVTdHJlYW1pbmdSYXdUZXh0KHByb3BzLmlzU3RyZWFtaW5nLCBzdHJlYW1pbmdUZXh0LCBwcm9wcy5tZXNzYWdlKVxuICAgIC8vIFNtb290aCBzdHJlYW1pbmc6IGRlc2Fjb3BsYSBsYSBjYWRlbmNpYSBkZWwgYmFja2VuZCBkZWwgcmVuZGVyLlxuICAgIC8vIER1cmFudGUgZWwgc3RyZWFtaW5nIGxpYmVyYSBjaGFycyBhIHJpdG1vIGNvbnN0YW50ZSB2w61hIHJBRjsgY3VhbmRvXG4gICAgLy8gdGVybWluYSwgbXVlc3RyYSBlbCB0ZXh0byBmaW5hbCBhbCBpbnN0YW50ZSAoc2luIGFuaW1hY2nDs24gcmVzaWR1YWwpLlxuICAgIC8vIExvcyBkZWZhdWx0cyBkZWwgaG9vayBzZSBhanVzdGFyb24gZW1ww61yaWNhbWVudGUgZW4gc3RhZ2luZzsgYXVuIGFzw61cbiAgICAvLyBzZSBleHBvbmVuIGZsYWdzIGRlIHJ1bnRpbWUgKHdpbmRvdy4qKSBwYXJhIHBvZGVyIHR1bmVhciBzaW4gcmVjb21waWxhclxuICAgIC8vIHNpIGFsZ8O6biBiYWNrZW5kIHByZXNlbnRhIHVuYSBjYWRlbmNpYSBtdXkgZGlzdGludGEgZW4gcHJvZHVjY2nDs24uXG4gICAgLy8gICB3aW5kb3cuc3RyZWFtQWRhcHQgPSBmYWxzZSAgICAgIC8vIGRlc2FjdGl2YSBhZGFwdGFjacOzbiBhbCBiYWNrZW5kXG4gICAgLy8gICB3aW5kb3cuc3RyZWFtQnVmZmVyTXMgPSA2MDAgICAgIC8vIGNvbGNow7NuIG9iamV0aXZvIChtcylcbiAgICAvLyAgIHdpbmRvdy5zdHJlYW1MYWdNcyA9IDQ1MCAgICAgICAgLy8gbGFnIG3DoXhpbW8gYmFzZSAobXMpXG4gICAgLy8gICB3aW5kb3cuc3RyZWFtTWluQnVmZmVyID0gNzAgICAgIC8vIHBpc28gZGVsIGNvbGNow7NuIGVuIGNoYXJzXG4gICAgLy8gICB3aW5kb3cuc3RyZWFtV2FybXVwTXMgPSA0MDAgICAgIC8vIHdhcm11cCBpbmljaWFsIChtcylcbiAgICBjb25zdCB3aW5GbGFncyA9IHJlYWRTbW9vdGhTdHJlYW1XaW5kb3dGbGFncygpXG4gICAgY29uc3QgZGlzcGxheVRleHQgPSB1c2VTbW9vdGhTdHJlYW1UZXh0KHJhd1RleHQsIGJ1aWxkU21vb3RoU3RyZWFtVGV4dE9wdGlvbnMod2luRmxhZ3MsIHByb3BzLmlzU3RyZWFtaW5nKSlcbiAgICBjb25zdCBjcmVhdGVBZ2VudEFjdGlvbnNBZ2VudElkID0gcmVzb2x2ZUNyZWF0ZUFnZW50QWN0aW9uc0FnZW50SWQocHJvcHMuY3JlYXRlQWdlbnRGb2xsb3dVcClcblxuICAgIGlmIChzaG91bGRIaWRlRW1wdHlTdHJlYW1pbmdCb2R5KGRpc3BsYXlUZXh0LCBwcm9wcy5pc1N0cmVhbWluZykpIHJldHVybiBudWxsXG4gICAgY29uc3QgaGFzTWVudGlvbnMgPSBoYXNJbmxpbmVNYXJrZXJzKGRpc3BsYXlUZXh0KVxuICAgIGNvbnN0IG1lbnRpb25Ob2RlcyA9IGhhc01lbnRpb25zID8gcmVuZGVyVGV4dFdpdGhNZW50aW9ucyhkaXNwbGF5VGV4dCkgOiBudWxsXG4gICAgcmV0dXJuIChcbiAgICAgIDw+XG4gICAgICAgIDxTQ0NBSU1lc3NhZ2VXcmFwcGVyXG4gICAgICAgICAgaXNDdXJyZW50VXNlcj17cHJvcHMuaXNDdXJyZW50VXNlcn1cbiAgICAgICAgICBpc0Zyb250ZW5kQ2FuY2VsbGVkPXtwcm9wcy5pc0Zyb250ZW5kQ2FuY2VsbGVkfVxuICAgICAgICAgIGNsYXNzTmFtZT17Z2V0RW50aXR5TGlua1dyYXBwZXJDbGFzc05hbWUoZGlzcGxheVRleHQpfVxuICAgICAgICA+XG4gICAgICAgICAge3Nob3VsZFJlbmRlck1lbnRpb25JbmxpbmVOb2RlcyhoYXNNZW50aW9ucywgbWVudGlvbk5vZGVzKSA/IChcbiAgICAgICAgICAgIC8vIFNpIGhheSBtZW50aW9ucywgcmVuZGVyaXphciBkaXJlY3RhbWVudGUgKHNpbiBtYXJrZG93biBlbiBlbCBtaXNtbyBww6FycmFmbylcbiAgICAgICAgICAgIDxzcGFuIHN0eWxlPXt7IGRpc3BsYXk6ICdpbmxpbmUnIH19PnttZW50aW9uTm9kZXN9PC9zcGFuPlxuICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAvLyBTaW4gbWVudGlvbnMsIHBhc2FyIGEgU3RyZWFtZG93biBwYXJhIG1hcmtkb3duIHN1cHBvcnRcbiAgICAgICAgICAgIDxNYWlhU3RyZWFtZG93blxuICAgICAgICAgICAgICB2YXJpYW50PVwiY2hhdFwiXG4gICAgICAgICAgICAgIGlzQ3VycmVudFVzZXI9e3Byb3BzLmlzQ3VycmVudFVzZXJ9XG4gICAgICAgICAgICAgIGlzRnJvbnRlbmRDYW5jZWxsZWQ9e3Byb3BzLmlzRnJvbnRlbmRDYW5jZWxsZWR9XG4gICAgICAgICAgICAgIGNvbXBvbmVudHM9e3sgYTogRW50aXR5TGlua0N1c3RvbUxpbmsgfSBhcyBNYWlhU3RyZWFtZG93blByb3BzWydjb21wb25lbnRzJ119XG4gICAgICAgICAgICAgIGlzQW5pbWF0aW5nPXshIXByb3BzLmlzU3RyZWFtaW5nfVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7ZGlzcGxheVRleHR9XG4gICAgICAgICAgICA8L01haWFTdHJlYW1kb3duPlxuICAgICAgICAgICl9XG4gICAgICAgIDwvU0NDQUlNZXNzYWdlV3JhcHBlcj5cbiAgICAgICAge3Nob3VsZFJlbmRlckFzc2lzdGFudEZlZWRiYWNrKHtcbiAgICAgICAgICBpc0Fzc2lzdGFudDogcHJvcHMuaXNBc3Npc3RhbnQsXG4gICAgICAgICAgaXNFcnJvcjogcHJvcHMuaXNFcnJvcixcbiAgICAgICAgICBhcHByb3ZhbDogcHJvcHMuYXBwcm92YWwsXG4gICAgICAgICAgaXNTdHJlYW1pbmc6IHByb3BzLmlzU3RyZWFtaW5nLFxuICAgICAgICAgIGlzRnJvbnRlbmRDYW5jZWxsZWQ6IHByb3BzLmlzRnJvbnRlbmRDYW5jZWxsZWQsXG4gICAgICAgICAgb25SZXRyeTogcHJvcHMub25SZXRyeSxcbiAgICAgICAgfSkgJiYgKFxuICAgICAgICAgIDxNZXNzYWdlRmVlZGJhY2tcbiAgICAgICAgICAgIGNvbnRlbnQ9e2Rpc3BsYXlUZXh0fVxuICAgICAgICAgICAgey4uLnJlc29sdmVGZWVkYmFja1Byb3BzRm9yQ2FuY2VsbGVkKHByb3BzLmlzRnJvbnRlbmRDYW5jZWxsZWQsIHByb3BzLnNvdXJjZXMsIHByb3BzLmhhbmRsZUZlZWRiYWNrQ2xpY2spfVxuICAgICAgICAgICAgZGlzYWJsZUZlZWRiYWNrPXtwcm9wcy5kaXNhYmxlRmVlZGJhY2t9XG4gICAgICAgICAgICBvblJldHJ5PXtwcm9wcy5vblJldHJ5fVxuICAgICAgICAgIC8+XG4gICAgICAgICl9XG4gICAgICAgIHtzaG91bGRSZW5kZXJBc3Npc3RhbnRTdWdnZXN0aW9ucyh7XG4gICAgICAgICAgaXNBc3Npc3RhbnQ6IHByb3BzLmlzQXNzaXN0YW50LFxuICAgICAgICAgIGlzRnJvbnRlbmRDYW5jZWxsZWQ6IHByb3BzLmlzRnJvbnRlbmRDYW5jZWxsZWQsXG4gICAgICAgICAgYXBwcm92YWw6IHByb3BzLmFwcHJvdmFsLFxuICAgICAgICAgIGlzRXJyb3I6IHByb3BzLmlzRXJyb3IsXG4gICAgICAgICAgc3VnZ2VzdGlvbnNMZW5ndGg6IHByb3BzLnN1Z2dlc3Rpb25zPy5sZW5ndGggPz8gMCxcbiAgICAgICAgfSkgJiYgKFxuICAgICAgICAgIDxDaGF0QUlTdWdnZXN0aW9uc1xuICAgICAgICAgICAgc3VnZ2VzdGlvbnM9e3Byb3BzLnN1Z2dlc3Rpb25zIHx8IFtdfVxuICAgICAgICAgICAgb25TZWxlY3RTdWdnZXN0aW9uPXtzdWdnZXN0aW9uID0+IHByb3BzLmhhbmRsZVN1Z2dlc3Rpb25DbGljayhwcm9wcy5tZXNzYWdlSWQsIHN1Z2dlc3Rpb24pfVxuICAgICAgICAgICAgZGlzYWJsZWQ9e3Byb3BzLnN1Z2dlc3Rpb25zRGlzYWJsZWR9XG4gICAgICAgICAgICBoaWRkZW49e3Nob3VsZEhpZGVBc3Npc3RhbnRTdWdnZXN0aW9ucyhwcm9wcy5pc1N0cmVhbWluZywgcHJvcHMuaXNMYXN0TWVzc2FnZSwgcHJvcHMuc3VnZ2VzdGlvbnNEaXNhYmxlZCl9XG4gICAgICAgICAgLz5cbiAgICAgICAgKX1cbiAgICAgICAge3Nob3VsZFJlbmRlckNyZWF0ZUFnZW50QWN0aW9ucyh7XG4gICAgICAgICAgaXNBc3Npc3RhbnQ6IHByb3BzLmlzQXNzaXN0YW50LFxuICAgICAgICAgIGlzRXJyb3I6IHByb3BzLmlzRXJyb3IsXG4gICAgICAgICAgaXNGcm9udGVuZENhbmNlbGxlZDogcHJvcHMuaXNGcm9udGVuZENhbmNlbGxlZCxcbiAgICAgICAgICBhcHByb3ZhbDogcHJvcHMuYXBwcm92YWwsXG4gICAgICAgICAgYWdlbnRJZDogY3JlYXRlQWdlbnRBY3Rpb25zQWdlbnRJZCxcbiAgICAgICAgfSkgJiYgKFxuICAgICAgICAgIDxDaGF0QUlDcmVhdGVBZ2VudEFjdGlvbnNcbiAgICAgICAgICAgIGFnZW50SWQ9e2NyZWF0ZUFnZW50QWN0aW9uc0FnZW50SWQhfVxuICAgICAgICAgICAgZGlzYWJsZWQ9e3Byb3BzLnN1Z2dlc3Rpb25zRGlzYWJsZWR9XG4gICAgICAgICAgICBoaWRkZW49e3Nob3VsZEhpZGVBc3Npc3RhbnRTdWdnZXN0aW9ucyhwcm9wcy5pc1N0cmVhbWluZywgcHJvcHMuaXNMYXN0TWVzc2FnZSwgcHJvcHMuc3VnZ2VzdGlvbnNEaXNhYmxlZCl9XG4gICAgICAgICAgLz5cbiAgICAgICAgKX1cbiAgICAgIDwvPlxuICAgIClcbiAgfVxuKVxuXG5jb25zdCBNZXNzYWdlSXRlbSA9IG1lbW8oKHByb3BzOiBNZXNzYWdlSXRlbVByb3BzKSA9PiB7XG4gIGNvbnN0IHtcbiAgICBpZCxcbiAgICB1c2VyLFxuICAgIG1lc3NhZ2UsXG4gICAgaXNTdHJlYW1pbmcsXG4gICAgaXNFcnJvcixcbiAgICBhdXRoVXNlcixcbiAgICBvcHRpb25zLFxuICAgIGlzQ2hhbmdlUHJvamVjdCxcbiAgICBoYW5kbGVTZWxlY3RPcHRpb24sXG4gICAgaGFuZGxlU3VnZ2VzdGlvbkNsaWNrLFxuICAgIGhhbmRsZUZlZWRiYWNrLFxuICAgIGhhbmRsZUFwcHJvdmFsRGVjaXNpb24sXG4gICAgZGlzYWJsZUZlZWRiYWNrLFxuICAgIGhhbmRsZVJldHJ5LFxuICAgIHJvbGUsXG4gICAgc291cmNlcyxcbiAgICBhdHRhY2htZW50cyxcbiAgICBhcHByb3ZhbCxcbiAgICBhcHByb3ZhbFN0YXR1cyxcbiAgICBzdWdnZXN0aW9ucyxcbiAgICBjcmVhdGVBZ2VudEZvbGxvd1VwLFxuICAgIGhhc1NlbGVjdGVkU3VnZ2VzdGlvbixcbiAgICBpc0xhc3RNZXNzYWdlLFxuICAgIHN0cmVhbUFjdGl2aXR5LFxuICB9ID0gcHJvcHNcblxuICBjb25zdCBbcHJldmlld0F0dGFjaG1lbnQsIHNldFByZXZpZXdBdHRhY2htZW50XSA9IHVzZVN0YXRlPEF0dGFjaG1lbnRGaWxlIHwgbnVsbD4obnVsbClcbiAgY29uc3QgaXNDdXJyZW50VXNlciA9IGlzQ3VycmVudFVzZXJNZXNzYWdlKHJvbGUsIHVzZXIuaWQsIGF1dGhVc2VyLmlkLnRvU3RyaW5nKCkpXG4gIGNvbnN0IGlzQXNzaXN0YW50ID0gaXNBc3Npc3RhbnRDaGF0TWVzc2FnZShyb2xlLCB1c2VyLmlkKVxuICBjb25zdCBpc1N0cmVhbWluZ1BsYWNlaG9sZGVyID0gaXNTdHJlYW1pbmdQbGFjZWhvbGRlck1lc3NhZ2VJZChpZClcbiAgY29uc3Qgc3RyZWFtaW5nVGV4dCA9IHVzZVN0cmVhbWluZ01lc3NhZ2UoXG4gICAgcmVzb2x2ZVN0cmVhbWluZ1RleHRIb29rSWQoQm9vbGVhbihpc1N0cmVhbWluZyksIGlzU3RyZWFtaW5nUGxhY2Vob2xkZXIsIGlkKVxuICApXG4gIGNvbnN0IGlzQWN0aXZlU3RyZWFtaW5nID0gaXNBY3RpdmVTdHJlYW1pbmdTdGF0ZShpc1N0cmVhbWluZywgaXNTdHJlYW1pbmdQbGFjZWhvbGRlcilcbiAgY29uc3QgaGFzU3RyZWFtVGV4dCA9IEJvb2xlYW4oc3RyZWFtaW5nVGV4dClcbiAgY29uc3QgcmVhc29uaW5nVHJhY2UgPSB1c2VSZWFzb25pbmdUcmFjZShyZXNvbHZlUmVhc29uaW5nVHJhY2VIb29rSWQoaXNBc3Npc3RhbnQsIGlzQWN0aXZlU3RyZWFtaW5nLCBpZCkpXG4gIGNvbnN0IHN0cmVhbU5hcnJhdGlvbkluVGltZWxpbmUgPVxuICAgIGlzQXNzaXN0YW50ICYmXG4gICAgc2hvdWxkU3RyZWFtTmFycmF0aW9uSW5UaW1lbGluZShyZWFzb25pbmdUcmFjZS5zdGVwcywgc3RyZWFtQWN0aXZpdHksIHN0cmVhbWluZ1RleHQsIHsgbWVzc2FnZUlkOiBpZCB9KVxuICBjb25zdCBzaG93U3RyZWFtaW5nQm9keSA9IHNob3VsZFNob3dTdHJlYW1pbmdNZXNzYWdlQm9keShpc0FjdGl2ZVN0cmVhbWluZywgaGFzU3RyZWFtVGV4dCwgc3RyZWFtTmFycmF0aW9uSW5UaW1lbGluZSlcbiAgY29uc3Qgc2hvd0FjdGl2aXR5SW5kaWNhdG9yID0gc2hvdWxkU2hvd1N0cmVhbUFjdGl2aXR5SW5kaWNhdG9yKGlzQXNzaXN0YW50LCBpc0FjdGl2ZVN0cmVhbWluZywgc3RyZWFtQWN0aXZpdHkpXG5cbiAgY29uc3QgbWVzc2FnZUF0dGFjaG1lbnRzID0gcmVzb2x2ZU1lc3NhZ2VBdHRhY2htZW50cyhhdHRhY2htZW50cywgaXNBc3Npc3RhbnQsIHNvdXJjZXMpXG5cbiAgY29uc3QgaGFuZGxlQXR0YWNobWVudENsaWNrID0gKGF0dGFjaG1lbnQ6IEF0dGFjaG1lbnRGaWxlKSA9PiB7XG4gICAgLy8gUGVybWl0aXIgcHJldmlzdWFsaXphY2nDs24gc2kgdGllbmUgYXJjaGl2byBsb2NhbCBvIFVSTHMgZGVsIGJhY2tlbmRcbiAgICBpZiAoY2FuT3BlbkF0dGFjaG1lbnRQcmV2aWV3KGF0dGFjaG1lbnQpKSB7XG4gICAgICBzZXRQcmV2aWV3QXR0YWNobWVudChhdHRhY2htZW50KVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGhhbmRsZUNsb3NlUHJldmlldyA9ICgpID0+IHtcbiAgICBzZXRQcmV2aWV3QXR0YWNobWVudChudWxsKVxuICB9XG5cbiAgY29uc3QgaGFuZGxlQXR0YWNobWVudERvd25sb2FkID0gYXN5bmMgKGF0dGFjaG1lbnQ6IEF0dGFjaG1lbnRGaWxlKSA9PiB7XG4gICAgY29uc3QgZmlsZU5hbWUgPSByZXNvbHZlQXR0YWNobWVudERvd25sb2FkRmlsZU5hbWUoYXR0YWNobWVudClcbiAgICBjb25zdCBmaWxlVXJsID0gcmVzb2x2ZUF0dGFjaG1lbnREb3dubG9hZFVybChhdHRhY2htZW50KVxuXG4gICAgdHJ5IHtcbiAgICAgIGxldCBibG9iVXJsOiBzdHJpbmcgfCBudWxsID0gbnVsbFxuXG4gICAgICBjb25zdCBkb3dubG9hZFN0cmF0ZWd5ID0gcmVzb2x2ZUF0dGFjaG1lbnREb3dubG9hZEJsb2JTdHJhdGVneShmaWxlVXJsLCBhdHRhY2htZW50LmZpbGUpXG4gICAgICBpZiAoZG93bmxvYWRTdHJhdGVneSA9PT0gJ3JlbW90ZS11cmwnICYmIGZpbGVVcmwpIHtcbiAgICAgICAgY29uc3QgZG93bmxvYWRlZEZpbGUgPSBhd2FpdCBkb3dubG9hZEZpbGVGcm9tVXJsKGZpbGVVcmwsIGZpbGVOYW1lLCBhdHRhY2htZW50LnR5cGUpXG4gICAgICAgIGJsb2JVcmwgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKGRvd25sb2FkZWRGaWxlKVxuICAgICAgfSBlbHNlIGlmIChkb3dubG9hZFN0cmF0ZWd5ID09PSAnbG9jYWwtZmlsZScgJiYgYXR0YWNobWVudC5maWxlIGluc3RhbmNlb2YgRmlsZSkge1xuICAgICAgICBibG9iVXJsID0gVVJMLmNyZWF0ZU9iamVjdFVSTChhdHRhY2htZW50LmZpbGUpXG4gICAgICB9XG5cbiAgICAgIGlmICghYmxvYlVybCkgcmV0dXJuXG5cbiAgICAgIGNvbnN0IGxpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJylcbiAgICAgIGxpbmsuaHJlZiA9IGJsb2JVcmxcbiAgICAgIGxpbmsuZG93bmxvYWQgPSBmaWxlTmFtZVxuICAgICAgbGluay5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnXG4gICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGxpbmspXG4gICAgICBsaW5rLmNsaWNrKClcblxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQobGluaylcbiAgICAgICAgVVJMLnJldm9rZU9iamVjdFVSTChibG9iVXJsKVxuICAgICAgfSwgMTAwKVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdGYWlsZWQgdG8gZG93bmxvYWQgYXR0YWNobWVudCcsIGVycm9yKVxuICAgIH1cbiAgfVxuXG4gIGlmIChzaG91bGRSZW5kZXJDaGFuZ2VQcm9qZWN0TWVzc2FnZShpc0NoYW5nZVByb2plY3QsIG9wdGlvbnMpKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxNZXNzYWdlV3JhcHBlciBrZXk9e2lkfSBpc0N1cnJlbnRVc2VyPXtpc0N1cnJlbnRVc2VyfSBkYXRhLW1lc3NhZ2UtaWQ9e2lkfSBoYXNGZWVkYmFjaz17ZmFsc2V9PlxuICAgICAgICA8U0NNZXNzYWdlSXRlbVdyYXBwZXIgJGlzQXNzaXN0YW50PXtpc0Fzc2lzdGFudH0+XG4gICAgICAgICAgPE1lc3NhZ2VDb250ZW50V3JhcHBlclxuICAgICAgICAgICAgaXNDaGFuZ2VQcm9qZWN0PXtpc0NoYW5nZVByb2plY3R9XG4gICAgICAgICAgICBtZXNzYWdlPXttZXNzYWdlfVxuICAgICAgICAgICAgaXNDdXJyZW50VXNlcj17aXNDdXJyZW50VXNlcn1cbiAgICAgICAgICAgIGlzRXJyb3I9e2lzRXJyb3J9XG4gICAgICAgICAgICBtZXNzYWdlRXh0cmFDb250ZW50PXs8TWVzc2FnZU9wdGlvbnMgb3B0aW9ucz17b3B0aW9ucyBhcyBhbnl9IGhhbmRsZVNlbGVjdE9wdGlvbj17aGFuZGxlU2VsZWN0T3B0aW9ufSAvPn1cbiAgICAgICAgICAvPlxuICAgICAgICA8L1NDTWVzc2FnZUl0ZW1XcmFwcGVyPlxuICAgICAgPC9NZXNzYWdlV3JhcHBlcj5cbiAgICApXG4gIH1cblxuICBjb25zdCBoYW5kbGVGZWVkYmFja0NsaWNrID0gKGZlZWRiYWNrOiBGZWVkYmFjaykgPT4ge1xuICAgIGhhbmRsZUZlZWRiYWNrPy4oZmVlZGJhY2ssIGV4dHJhY3RGZWVkYmFja1Nlc3Npb25JZChpZCkpXG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxTQ01lc3NhZ2VJdGVtV3JhcHBlciAkaXNBc3Npc3RhbnQ9e2lzQXNzaXN0YW50fSBkYXRhLW1lc3NhZ2UtaWQ9e2lkfT5cbiAgICAgIDxTQ01lc3NhZ2VJdGVtSW5uZXI+XG4gICAgICAgIHsvKiBNaXNtbyBzbG90IHBhcmEgbGEgdHJhemEgZW4gdml2byB5IGxhIHlhIHBsZWdhZGE6IG1pZW50cmFzIGVsIHR1cm5vXG4gICAgICAgICAgICBjb3JyZSwgbG9zIHBhc29zIHNlIGFwaWxhbiBhY8OhICh0aW1lbGFwc2UpOyBhbCBjb21wbGV0YXIsIGVsXG4gICAgICAgICAgICBSZWFzb25pbmdCbG9jayBvY3VwYSBlbCBsdWdhciB5IGNvbGFwc2Egc29sby5cbiAgICAgICAgICAgIFZhIEFSUklCQSBkZWwgY3VlcnBvIHBvcnF1ZSBsYSBuYXJyYWNpw7NuIGRlIGNhZGEgdHVybm8gdGVybWluYSBjb21vXG4gICAgICAgICAgICBmaWxhIGRlIGxhIHRyYXphOiBzaSBlc3R1dmllcmEgYWJham8sIGVsIHRleHRvIHZpZWpvIHF1ZWRhcsOtYSBwb3JcbiAgICAgICAgICAgIGRlYmFqbyBkZWwgdGV4dG8gbnVldm8uICovfVxuICAgICAgICB7aXNBc3Npc3RhbnQgJiZcbiAgICAgICAgICAoaXNBY3RpdmVTdHJlYW1pbmcgPyAoXG4gICAgICAgICAgICA8UmVhc29uaW5nVGltZWxpbmUgbWVzc2FnZUlkPXtpZH0gc3RyZWFtQWN0aXZpdHk9e3N0cmVhbUFjdGl2aXR5fSBzdHJlYW1pbmdUZXh0PXtzdHJlYW1pbmdUZXh0fSAvPlxuICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICA8UmVhc29uaW5nQmxvY2sgbWVzc2FnZUlkPXtpZH0gdHJhY2U9e3Byb3BzLnJlYXNvbmluZyA/PyBudWxsfSAvPlxuICAgICAgICAgICkpfVxuICAgICAgICB7c2hvdWxkU2hvd01lc3NhZ2VBdHRhY2htZW50c1JvdyhtZXNzYWdlQXR0YWNobWVudHMubGVuZ3RoKSAmJiAoXG4gICAgICAgICAgPFNDQXR0YWNobWVudHNSb3cgJGlzQXNzaXN0YW50PXtpc0Fzc2lzdGFudH0+XG4gICAgICAgICAgICB7bWVzc2FnZUF0dGFjaG1lbnRzLm1hcCgoYXR0YWNobWVudCwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgLy8gRGV0ZWN0YXIgc2kgZXMgdW4gYXJjaGl2byBkZSBhdWRpb1xuICAgICAgICAgICAgICBpZiAoaXNBdWRpb0F0dGFjaG1lbnQoYXR0YWNobWVudCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gPEF0dGFjaG1lbnRDYXJkQXVkaW8ga2V5PXtgJHthdHRhY2htZW50LmlkfS0ke2F0dGFjaG1lbnQubmFtZX1gfSBhdHRhY2htZW50PXthdHRhY2htZW50fSAvPlxuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICA8QXR0YWNobWVudENhcmRcbiAgICAgICAgICAgICAgICAgIGtleT17YCR7YXR0YWNobWVudC5pZH0tJHthdHRhY2htZW50Lm5hbWV9YH1cbiAgICAgICAgICAgICAgICAgIGF0dGFjaG1lbnQ9e2F0dGFjaG1lbnR9XG4gICAgICAgICAgICAgICAgICBwb3NpdGlvbkluZGV4PXtpbmRleH1cbiAgICAgICAgICAgICAgICAgIG9uRG93bmxvYWQ9eygpID0+IGhhbmRsZUF0dGFjaG1lbnREb3dubG9hZChhdHRhY2htZW50KX1cbiAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IGhhbmRsZUF0dGFjaG1lbnRDbGljayhhdHRhY2htZW50KX1cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9KX1cbiAgICAgICAgICA8L1NDQXR0YWNobWVudHNSb3c+XG4gICAgICAgICl9XG4gICAgICAgIHtzaG91bGRSZW5kZXJNZXNzYWdlVGV4dEJvZHkoe1xuICAgICAgICAgIG1lc3NhZ2VUZXh0OiBtZXNzYWdlLFxuICAgICAgICAgIHNob3dTdHJlYW1pbmdCb2R5LFxuICAgICAgICAgIGlzQXNzaXN0YW50LFxuICAgICAgICAgIGF0dGFjaG1lbnRDb3VudDogbWVzc2FnZUF0dGFjaG1lbnRzLmxlbmd0aCxcbiAgICAgICAgfSkgJiYgKFxuICAgICAgICAgIDxTdHJlYW1pbmdNZXNzYWdlQm9keVxuICAgICAgICAgICAgbWVzc2FnZT17bWVzc2FnZSA/PyAnJ31cbiAgICAgICAgICAgIGlzU3RyZWFtaW5nPXtzaG93U3RyZWFtaW5nQm9keX1cbiAgICAgICAgICAgIGlzQ3VycmVudFVzZXI9e2lzQ3VycmVudFVzZXJ9XG4gICAgICAgICAgICBpc0Fzc2lzdGFudD17aXNBc3Npc3RhbnR9XG4gICAgICAgICAgICBpc0Zyb250ZW5kQ2FuY2VsbGVkPXtwcm9wcy5pc0Zyb250ZW5kQ2FuY2VsbGVkfVxuICAgICAgICAgICAgYXBwcm92YWw9e2FwcHJvdmFsfVxuICAgICAgICAgICAgaXNFcnJvcj17aXNFcnJvcn1cbiAgICAgICAgICAgIHNvdXJjZXM9e3NvdXJjZXN9XG4gICAgICAgICAgICBzdWdnZXN0aW9ucz17c3VnZ2VzdGlvbnN9XG4gICAgICAgICAgICBjcmVhdGVBZ2VudEZvbGxvd1VwPXtjcmVhdGVBZ2VudEZvbGxvd1VwfVxuICAgICAgICAgICAgaGFuZGxlRmVlZGJhY2tDbGljaz17aGFuZGxlRmVlZGJhY2tDbGlja31cbiAgICAgICAgICAgIGRpc2FibGVGZWVkYmFjaz17ZGlzYWJsZUZlZWRiYWNrID8/IG51bGx9XG4gICAgICAgICAgICBvblJldHJ5PXtoYW5kbGVSZXRyeX1cbiAgICAgICAgICAgIGhhbmRsZVN1Z2dlc3Rpb25DbGljaz17aGFuZGxlU3VnZ2VzdGlvbkNsaWNrfVxuICAgICAgICAgICAgc3VnZ2VzdGlvbnNEaXNhYmxlZD17aXNBY3RpdmVTdHJlYW1pbmcgfHwgISFoYXNTZWxlY3RlZFN1Z2dlc3Rpb259XG4gICAgICAgICAgICBtZXNzYWdlSWQ9e2lkfVxuICAgICAgICAgICAgaXNMYXN0TWVzc2FnZT17aXNMYXN0TWVzc2FnZX1cbiAgICAgICAgICAvPlxuICAgICAgICApfVxuICAgICAgICB7LyogU3Bpbm5lciBkZSBhY3RpdmlkYWQ6IHZpc2libGUgdGFtYmnDqW4gZW4gd3JpdGluZyAobmFycmFjacOzbiBlbiB0cmF6YSBvIHJlc3B1ZXN0YSBmaW5hbCkuICovfVxuICAgICAgICB7c2hvd0FjdGl2aXR5SW5kaWNhdG9yICYmIHN0cmVhbUFjdGl2aXR5ID8gKFxuICAgICAgICAgIDxTQ1RpbWVsaW5lSW5kaWNhdG9yPlxuICAgICAgICAgICAgPEFnZW50QWN0aXZpdHlJbmRpY2F0b3IgYWN0aXZpdHk9e3N0cmVhbUFjdGl2aXR5fSBjb21wYWN0IC8+XG4gICAgICAgICAgPC9TQ1RpbWVsaW5lSW5kaWNhdG9yPlxuICAgICAgICApIDogbnVsbH1cbiAgICAgICAge3Nob3VsZFNob3dBcHByb3ZhbEFjdGlvbnMoYXBwcm92YWwpICYmIGFwcHJvdmFsICYmIChcbiAgICAgICAgICA8U0NBcHByb3ZhbEFjdGlvbnNDb2x1bW4+XG4gICAgICAgICAgICA8QXBwcm92YWxCb3hcbiAgICAgICAgICAgICAgYWN0aW9ucz17YXBwcm92YWwucGVuZGluZ19hY3Rpb25zfVxuICAgICAgICAgICAgICBzdGF0dXM9e2FwcHJvdmFsU3RhdHVzfVxuICAgICAgICAgICAgICBvbkFwcHJvdmU9eyh0aHJlYWRJZHMsIG1ldGFkYXRhKSA9PiBoYW5kbGVBcHByb3ZhbERlY2lzaW9uKHRocmVhZElkcywgJ2FwcHJvdmUnLCB1bmRlZmluZWQsIG1ldGFkYXRhKX1cbiAgICAgICAgICAgICAgb25SZWplY3Q9e3RocmVhZElkcyA9PiBoYW5kbGVBcHByb3ZhbERlY2lzaW9uKHRocmVhZElkcywgJ3JlamVjdCcpfVxuICAgICAgICAgICAgICBpc1Byb2plY3REZWxldGVkPXtwcm9wcy5wcm9qZWN0TWV0YWRhdGE/LmlzX2RlbGV0ZWQgPT09IHRydWV9XG4gICAgICAgICAgICAgIGlzRXhwYW5kZWQ9e3Byb3BzLmV4cGFuZGVkfVxuICAgICAgICAgICAgICBoaXRsSW5zdGFuY2VJZD17YXBwcm92YWwub3JpZ2luYWxfdGhyZWFkX2lkfVxuICAgICAgICAgICAgICB3YXJuaW5nTWVzc2FnZT17YXBwcm92YWwud2FybmluZ19tZXNzYWdlfVxuICAgICAgICAgICAgICBtYW51YWxBcHByb3ZhbERldGVjdGVkPXthcHByb3ZhbC5tYW51YWxfYXBwcm92YWxfZGV0ZWN0ZWR9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvU0NBcHByb3ZhbEFjdGlvbnNDb2x1bW4+XG4gICAgICAgICl9XG4gICAgICA8L1NDTWVzc2FnZUl0ZW1Jbm5lcj5cbiAgICAgIDxBdHRhY2htZW50UHJldmlld01vZGFsXG4gICAgICAgIGlzT3Blbj17ISFwcmV2aWV3QXR0YWNobWVudH1cbiAgICAgICAgb25DbG9zZT17aGFuZGxlQ2xvc2VQcmV2aWV3fVxuICAgICAgICBhdHRhY2htZW50PXtwcmV2aWV3QXR0YWNobWVudH1cbiAgICAgIC8+XG4gICAgPC9TQ01lc3NhZ2VJdGVtV3JhcHBlcj5cbiAgKVxufSlcblxuY29uc3QgQ2hhdEFJTWVzc2FnZXNJbm5lciA9ICh7XG4gIHVzZXJJbml0aWFsTWVzc2FnZSxcbiAgaW5pdGlhbENoYXRJZCxcbiAgb25FcnJvcixcbiAgb25TZW5kTWVzc2FnZVJlYWR5LFxuICBvblNjcm9sbFRvQm90dG9tLFxuICBhdHRhY2htZW50cyxcbiAgYWdlbnRzLFxuICBleHBhbmRlZCxcbiAgc2tpcEVudGVyQW5pbWF0aW9uID0gZmFsc2UsXG59OiBDaGF0QUlNZXNzYWdlc1Byb3BzKSA9PiB7XG4gIGNvbnN0IHsgdCB9ID0gdXNlVCgpXG4gIGNvbnN0IHsgaXNXZWJTZWFyY2hBY3RpdmUsIGlzRGVlcFNlYXJjaEFjdGl2ZSwgYWdlbnQgfSA9IHVzZUdsb2JhbENvbnRleHQoKVxuICBjb25zdCBldmVudCA9IHVzZUV2ZW50KClcbiAgY29uc3QgYXV0aFVzZXIgPSB1c2VVc2VyKClcbiAgY29uc3QgbWVzc2FnZXNSZWYgPSB1c2VSZWY8SFRNTERpdkVsZW1lbnQ+KG51bGwpXG4gIGNvbnN0IGNoYXRJbml0aWFsaXplZFJlZiA9IHVzZVJlZihmYWxzZSlcbiAgY29uc3QgaXNMb2FkaW5nTW9yZVJlZiA9IHVzZVJlZihmYWxzZSlcbiAgY29uc3Qgc2Nyb2xsVGhyZXNob2xkUmVmID0gdXNlUmVmKDM5KVxuICBjb25zdCBsYXN0U2Nyb2xsVG9wUmVmID0gdXNlUmVmKDApXG4gIGNvbnN0IHNob3dTY3JvbGxUb0JvdHRvbVJlZiA9IHVzZVJlZihmYWxzZSlcbiAgY29uc3Qgc2hvd1RvcEdyYWRpZW50UmVmID0gdXNlUmVmKGZhbHNlKVxuICBjb25zdCBzaG93Qm90dG9tR3JhZGllbnRSZWYgPSB1c2VSZWYoZmFsc2UpXG4gIGNvbnN0IHNjcm9sbFJhZlJlZiA9IHVzZVJlZjxudW1iZXIgfCBudWxsPihudWxsKVxuICAvKipcbiAgICogVHVybm8gY29uIGVsIHNjcm9sbCBiYWpvIGNvbnRyb2wgZGVsIHVzdWFyaW86IGRlc2RlIHF1ZSBlbnbDrWEgZWwgbWVuc2FqZSB5XG4gICAqIGhhc3RhIGVsIHByw7N4aW1vIGVudsOtbyBubyBtb3ZlbW9zIGVsIHNjcm9sbCBwb3IgbmluZ8O6biBtb3Rpdm8uIEVzXG4gICAqIGluZGVwZW5kaWVudGUgZGUgbGEgYWx0dXJhIGRlbCBzcGFjZXIsIHF1ZSBwdWVkZSBsbGVnYXIgYSAwIHNpbiBkZXNhbmNsYXIuXG4gICAqL1xuICBjb25zdCBhbmNob3JlZFR1cm5JZFJlZiA9IHVzZVJlZjxzdHJpbmcgfCBudWxsPihudWxsKVxuICBjb25zdCBzcGFjZXJFbFJlZiA9IHVzZVJlZjxIVE1MRGl2RWxlbWVudCB8IG51bGw+KG51bGwpXG4gIGNvbnN0IHNwYWNlckhlaWdodFJlZiA9IHVzZVJlZigwKVxuICBjb25zdCB0dXJuU2Nyb2xsUmFmUmVmID0gdXNlUmVmPG51bWJlciB8IG51bGw+KG51bGwpXG4gIGNvbnN0IHdhc0xvYWRpbmdNZXNzYWdlc1JlZiA9IHVzZVJlZihmYWxzZSlcbiAgY29uc3QgbGFzdFNjcm9sbGVkU2Vzc2lvblJlZiA9IHVzZVJlZjxzdHJpbmcgfCBudWxsPihudWxsKVxuICBjb25zdCBwZW5kaW5nU2Nyb2xsUmVzdG9yZVJlZiA9IHVzZVJlZjxudW1iZXIgfCBudWxsPihudWxsKVxuICBjb25zdCBzY3JvbGxQZXJzaXN0VGltZXJSZWYgPSB1c2VSZWY8bnVtYmVyIHwgbnVsbD4obnVsbClcbiAgY29uc3QgW3Nob3dTY3JvbGxUb0JvdHRvbSwgc2V0U2hvd1Njcm9sbFRvQm90dG9tXSA9IHVzZVN0YXRlKGZhbHNlKVxuICBjb25zdCBbc2hvd1RvcEdyYWRpZW50LCBzZXRTaG93VG9wR3JhZGllbnRdID0gdXNlU3RhdGUoZmFsc2UpXG4gIGNvbnN0IFtzaG93Qm90dG9tR3JhZGllbnQsIHNldFNob3dCb3R0b21HcmFkaWVudF0gPSB1c2VTdGF0ZShmYWxzZSlcbiAgY29uc3QgW3NlbGVjdGVkU3VnZ2VzdGlvbk1lc3NhZ2VJZHMsIHNldFNlbGVjdGVkU3VnZ2VzdGlvbk1lc3NhZ2VJZHNdID0gdXNlU3RhdGU8UmVjb3JkPHN0cmluZywgYm9vbGVhbj4+KHt9KVxuXG4gIGNvbnN0IHtcbiAgICBtZXNzYWdlcyxcbiAgICBsb2FkaW5nTWVzc2FnZXMsXG4gICAgaXNMb2FkaW5nTW9yZU1lc3NhZ2VzLFxuICAgIHdhaXRpbmdSZXNwb25zZSxcbiAgICBpc1dyaXRpbmcsXG4gICAgbG9hZGluZ01lc3NhZ2UsXG4gICAgc3RyZWFtQWN0aXZpdHksXG4gICAgYWN0aXZlTG9hZGluZ3MsXG4gICAgc2VuZE1lc3NhZ2UsXG4gICAgcmV0cnlNZXNzYWdlLFxuICAgIGNoYW5nZVByb2plY3QsXG4gICAgaGFuZGxlRmVlZGJhY2ssXG4gICAgaGFuZGxlQXBwcm92YWxEZWNpc2lvbixcbiAgICBpbml0aWFsaXplQ2hhdCxcbiAgICBoYW5kbGVTY3JvbGwsXG4gICAgc3RvcEdlbmVyYXRpb24sXG4gIH0gPSB1c2VDaGF0TWFuYWdlcih7XG4gICAgY2hhdElkOiBpbml0aWFsQ2hhdElkIHx8IHVuZGVmaW5lZCxcbiAgICB1c2VySW5pdGlhbE1lc3NhZ2UsXG4gICAgb25FcnJvcixcbiAgICBhdHRhY2htZW50cyxcbiAgICBhZ2VudHMsXG4gIH0pXG5cbiAgY29uc3QgaGFuZGxlU2VsZWN0T3B0aW9uID0gdXNlQ2FsbGJhY2soXG4gICAgKG9wdGlvbjogUHJvamVjdCkgPT4ge1xuICAgICAgY2hhbmdlUHJvamVjdChvcHRpb24pXG4gICAgfSxcbiAgICBbY2hhbmdlUHJvamVjdF1cbiAgKVxuXG4gIC8qKlxuICAgKiBSZWNhbGN1bGEgZWwgYm90w7NuIFwic2Nyb2xsIHRvIGJvdHRvbVwiIHkgbG9zIGdyYWRpZW50ZXMgZGUgYm9yZGUgYSBwYXJ0aXIgZGVcbiAgICogbGEgcG9zaWNpw7NuIGRlbCBzY3JvbGwuIExvcyByZWZzIGV2aXRhbiBgc2V0U3RhdGVgIGN1YW5kbyBlbCB2YWxvciBubyBjYW1iaWE6XG4gICAqIGVzdG8gY29ycmUgZW4gY2FkYSBmcmFtZSBkZWwgc3RyZWFtLlxuICAgKi9cbiAgY29uc3QgdXBkYXRlU2Nyb2xsQWZmb3JkYW5jZXMgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgY29uc3QgZWwgPSBtZXNzYWdlc1JlZi5jdXJyZW50XG4gICAgaWYgKCFlbCkgcmV0dXJuXG4gICAgY29uc3QgeyBzY3JvbGxUb3AsIHNjcm9sbEhlaWdodCwgY2xpZW50SGVpZ2h0IH0gPSBlbFxuICAgIC8vIEVsIHNwYWNlciBkZWwgdHVybm8gZXMgYWx0byByZXNlcnZhZG8sIG5vIGNvbnRlbmlkbzogc2kgbm8gbG8gZGVzY29udGFtb3NcbiAgICAvLyBsYSBmbGVjaGEgeSBlbCBncmFkaWVudGUgZGUgYWJham8gcXVlZGFuIGVuY2VuZGlkb3MgZHVyYW50ZSB0b2RvIGVsIHR1cm5vLlxuICAgIGNvbnN0IGRpc3RhbmNlRnJvbUJvdHRvbSA9IGNvbXB1dGVEaXN0YW5jZUZyb21Cb3R0b20oc2Nyb2xsSGVpZ2h0LCBzcGFjZXJIZWlnaHRSZWYuY3VycmVudCwgc2Nyb2xsVG9wLCBjbGllbnRIZWlnaHQpXG5cbiAgICBjb25zdCBzaG91bGRTaG93ID0gc2hvdWxkU2hvd1Njcm9sbFRvQm90dG9tKGRpc3RhbmNlRnJvbUJvdHRvbSlcbiAgICBpZiAoc2hvd1Njcm9sbFRvQm90dG9tUmVmLmN1cnJlbnQgIT09IHNob3VsZFNob3cpIHtcbiAgICAgIHNob3dTY3JvbGxUb0JvdHRvbVJlZi5jdXJyZW50ID0gc2hvdWxkU2hvd1xuICAgICAgc2V0U2hvd1Njcm9sbFRvQm90dG9tKHNob3VsZFNob3cpXG4gICAgfVxuXG4gICAgY29uc3QgbmV4dFRvcEdyYWRpZW50ID0gc2hvdWxkU2hvd1RvcFNjcm9sbEdyYWRpZW50KHNjcm9sbFRvcClcbiAgICBpZiAoc2hvd1RvcEdyYWRpZW50UmVmLmN1cnJlbnQgIT09IG5leHRUb3BHcmFkaWVudCkge1xuICAgICAgc2hvd1RvcEdyYWRpZW50UmVmLmN1cnJlbnQgPSBuZXh0VG9wR3JhZGllbnRcbiAgICAgIHNldFNob3dUb3BHcmFkaWVudChuZXh0VG9wR3JhZGllbnQpXG4gICAgfVxuXG4gICAgY29uc3QgbmV4dEJvdHRvbUdyYWRpZW50ID0gc2hvdWxkU2hvd0JvdHRvbVNjcm9sbEdyYWRpZW50KGRpc3RhbmNlRnJvbUJvdHRvbSlcbiAgICBpZiAoc2hvd0JvdHRvbUdyYWRpZW50UmVmLmN1cnJlbnQgIT09IG5leHRCb3R0b21HcmFkaWVudCkge1xuICAgICAgc2hvd0JvdHRvbUdyYWRpZW50UmVmLmN1cnJlbnQgPSBuZXh0Qm90dG9tR3JhZGllbnRcbiAgICAgIHNldFNob3dCb3R0b21HcmFkaWVudChuZXh0Qm90dG9tR3JhZGllbnQpXG4gICAgfVxuICB9LCBbXSlcblxuICAvKipcbiAgICogU2Nyb2xsIGlubWVkaWF0byBhbCBmb25kbyAoZGVudHJvIGRlIHJBRiBwYXJhIGNvb3JkaW5hciBjb24gZWwgcGFpbnQpXG4gICAqIHkgYWN0dWFsaXphIGxhIHZpc2liaWxpZGFkIGRlbCBib3TDs24uIFNvbG8gc2UgdXNhIGFsIGFicmlyL2NhcmdhciB1biBjaGF0XG4gICAqIG8gY3VhbmRvIGVsIHVzdWFyaW8gcGlkZSBpciBhbCBmb25kbzogbnVuY2EgZHVyYW50ZSBlbCBzdHJlYW0uXG4gICAqL1xuICBjb25zdCBzY3JvbGxUb0JvdHRvbVJhZiA9IHVzZUNhbGxiYWNrKFxuICAgIChvcHRzOiB7IGRlbGF5TXM/OiBudW1iZXIgfSA9IHt9KSA9PiB7XG4gICAgICBjb25zdCB7IGRlbGF5TXMgPSAwIH0gPSBvcHRzXG4gICAgICBjb25zdCBydW4gPSAoKSA9PiB7XG4gICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICAgICAgY29uc3QgZWwgPSBtZXNzYWdlc1JlZi5jdXJyZW50XG4gICAgICAgICAgaWYgKCFlbCkgcmV0dXJuXG4gICAgICAgICAgZWwuc2Nyb2xsVG9wID0gZWwuc2Nyb2xsSGVpZ2h0XG4gICAgICAgICAgdXBkYXRlU2Nyb2xsQWZmb3JkYW5jZXMoKVxuICAgICAgICB9KVxuICAgICAgfVxuICAgICAgaWYgKGRlbGF5TXMgPiAwKSBzZXRUaW1lb3V0KHJ1biwgZGVsYXlNcylcbiAgICAgIGVsc2UgcnVuKClcbiAgICB9LFxuICAgIFt1cGRhdGVTY3JvbGxBZmZvcmRhbmNlc11cbiAgKVxuXG4gIGNvbnN0IGNhbmNlbFR1cm5TY3JvbGwgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgaWYgKHR1cm5TY3JvbGxSYWZSZWYuY3VycmVudCA9PT0gbnVsbCkgcmV0dXJuXG4gICAgY2FuY2VsQW5pbWF0aW9uRnJhbWUodHVyblNjcm9sbFJhZlJlZi5jdXJyZW50KVxuICAgIHR1cm5TY3JvbGxSYWZSZWYuY3VycmVudCA9IG51bGxcbiAgfSwgW10pXG5cbiAgLyoqXG4gICAqIFNjcm9sbCBhbmltYWRvIGNvbiBlYXNpbmcgcHJvcGlvOiBgYmVoYXZpb3I6ICdzbW9vdGgnYCBubyBwZXJtaXRlIHJlZ3VsYXIgbGFcbiAgICogZHVyYWNpw7NuIHkgZWwgc2FsdG8gYWwgYW5jbGFyIGVsIHR1cm5vIHF1ZWRhIGRlbWFzaWFkbyBzZWNvLlxuICAgKi9cbiAgY29uc3QgYW5pbWF0ZVNjcm9sbFRvID0gdXNlQ2FsbGJhY2soXG4gICAgKHRvcDogbnVtYmVyKSA9PiB7XG4gICAgICBjYW5jZWxUdXJuU2Nyb2xsKClcbiAgICAgIGNvbnN0IGVsID0gbWVzc2FnZXNSZWYuY3VycmVudFxuICAgICAgaWYgKCFlbCkgcmV0dXJuXG4gICAgICBjb25zdCBmcm9tID0gZWwuc2Nyb2xsVG9wXG4gICAgICBjb25zdCBkaXN0YW5jZSA9IHRvcCAtIGZyb21cbiAgICAgIGlmIChzaG91bGRTa2lwVHVyblNjcm9sbEFuaW1hdGlvbihkaXN0YW5jZSkpIHJldHVyblxuXG4gICAgICBjb25zdCBkdXJhdGlvbiA9IGNvbXB1dGVUdXJuU2Nyb2xsRHVyYXRpb25NcyhkaXN0YW5jZSlcblxuICAgICAgY29uc3Qgc3RhcnRlZEF0ID0gcGVyZm9ybWFuY2Uubm93KClcbiAgICAgIGNvbnN0IHN0ZXAgPSAobm93OiBudW1iZXIpID0+IHtcbiAgICAgICAgY29uc3QgcHJvZ3Jlc3MgPSBNYXRoLm1pbigxLCAobm93IC0gc3RhcnRlZEF0KSAvIGR1cmF0aW9uKVxuICAgICAgICBjb25zdCBlYXNlZCA9IGVhc2VPdXRFeHBvU2Nyb2xsUHJvZ3Jlc3MocHJvZ3Jlc3MpXG4gICAgICAgIGVsLnNjcm9sbFRvcCA9IGZyb20gKyBkaXN0YW5jZSAqIGVhc2VkXG4gICAgICAgIHVwZGF0ZVNjcm9sbEFmZm9yZGFuY2VzKClcbiAgICAgICAgdHVyblNjcm9sbFJhZlJlZi5jdXJyZW50ID0gcHJvZ3Jlc3MgPCAxID8gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHN0ZXApIDogbnVsbFxuICAgICAgfVxuICAgICAgdHVyblNjcm9sbFJhZlJlZi5jdXJyZW50ID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHN0ZXApXG4gICAgfSxcbiAgICBbY2FuY2VsVHVyblNjcm9sbCwgdXBkYXRlU2Nyb2xsQWZmb3JkYW5jZXNdXG4gIClcblxuICB1c2VFZmZlY3QoKCkgPT4gY2FuY2VsVHVyblNjcm9sbCwgW2NhbmNlbFR1cm5TY3JvbGxdKVxuXG4gIGNvbnN0IHNldFNwYWNlckhlaWdodCA9IHVzZUNhbGxiYWNrKChuZXh0OiBudW1iZXIpID0+IHtcbiAgICBpZiAoIXNob3VsZFVwZGF0ZVNwYWNlckhlaWdodChzcGFjZXJIZWlnaHRSZWYuY3VycmVudCwgbmV4dCkpIHJldHVyblxuICAgIHNwYWNlckhlaWdodFJlZi5jdXJyZW50ID0gbmV4dFxuICAgIGlmIChzcGFjZXJFbFJlZi5jdXJyZW50KSB7XG4gICAgICBzcGFjZXJFbFJlZi5jdXJyZW50LnN0eWxlLmhlaWdodCA9IGAke25leHR9cHhgXG4gICAgfVxuICB9LCBbXSlcblxuICBjb25zdCBjbGVhclR1cm5TcGFjZSA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBhbmNob3JlZFR1cm5JZFJlZi5jdXJyZW50ID0gbnVsbFxuICAgIHNldFNwYWNlckhlaWdodCgwKVxuICB9LCBbc2V0U3BhY2VySGVpZ2h0XSlcblxuICAvKipcbiAgICogRGV2dWVsdmUgZWwgYWx0byByZXNlcnZhZG8gcXVlIHNlIHB1ZWRlIHNhY2FyIHNpbiBtb3ZlciBsYSB2aXN0YTogdG9kbyBsb1xuICAgKiBxdWUgcXVlZGUgcG9yIGRlYmFqbyBkZWwgc2Nyb2xsIGFjdHVhbC4gU2kgZWwgdXN1YXJpbyBlc3TDoSBlbiBlbCBmb25kbywgc2VcbiAgICogc2FjYSBlbnRlcm87IHNpIGVzdMOhIGEgbWl0YWQgZGUgY2FtaW5vLCBzZSB2YSBkcmVuYW5kbyBhIG1lZGlkYSBxdWUgYmFqYS5cbiAgICovXG4gIGNvbnN0IGRyYWluVHVyblNwYWNlID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGNvbnN0IGVsID0gbWVzc2FnZXNSZWYuY3VycmVudFxuICAgIGlmICghZWwgfHwgc3BhY2VySGVpZ2h0UmVmLmN1cnJlbnQgPD0gMCkgcmV0dXJuXG4gICAgc2V0U3BhY2VySGVpZ2h0KGNvbXB1dGVSZW1vdmFibGVUdXJuU3BhY2UoZWwuc2Nyb2xsSGVpZ2h0LCBlbC5jbGllbnRIZWlnaHQsIGVsLnNjcm9sbFRvcCwgc3BhY2VySGVpZ2h0UmVmLmN1cnJlbnQpKVxuICB9LCBbc2V0U3BhY2VySGVpZ2h0XSlcblxuICAvKipcbiAgICogRWwgdXN1YXJpbyB0b23DsyBlbCBjb250cm9sIGRlbCBzY3JvbGw6IGVsIHR1cm5vIGRlamEgZGUgZXN0YXIgYW5jbGFkbyB5IGVsXG4gICAqIGVzcGFjaW8gcmVzZXJ2YWRvIGVtcGllemEgYSBkZXZvbHZlcnNlLiBTaW4gYW5jbGEgeSBjb24gc3BhY2VyID4gMCwgZWxcbiAgICogaGFuZGxlciBkZSBzY3JvbGwgc2lndWUgZHJlbmFuZG8gaGFzdGEgcXVlIGxsZWdhIGFsIGZvbmRvIHkgbm8gcXVlZGEgaHVlY28uXG4gICAqL1xuICBjb25zdCByZWxlYXNlVHVyblNwYWNlID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGlmICghc2hvdWxkUmVsZWFzZVR1cm5TcGFjZShhbmNob3JlZFR1cm5JZFJlZi5jdXJyZW50LCBzcGFjZXJIZWlnaHRSZWYuY3VycmVudCkpIHJldHVyblxuICAgIGFuY2hvcmVkVHVybklkUmVmLmN1cnJlbnQgPSBudWxsXG4gICAgZHJhaW5UdXJuU3BhY2UoKVxuICB9LCBbZHJhaW5UdXJuU3BhY2VdKVxuXG4gIGNvbnN0IGhhbmRsZVVzZXJTY3JvbGxJbnRlbnQgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgY2FuY2VsVHVyblNjcm9sbCgpXG4gICAgcmVsZWFzZVR1cm5TcGFjZSgpXG4gIH0sIFtjYW5jZWxUdXJuU2Nyb2xsLCByZWxlYXNlVHVyblNwYWNlXSlcblxuICAvKiogRW4gZnVsbHNjcmVlbiBlbCB3aGVlbCBlbiBtw6FyZ2VuZXMvb3ZlcmxheSBjYWUgZnVlcmEgZGUgU0NNZXNzYWdlc1Njcm9sbDsgcmVlbnZpYW1vcyBhbCBzY3JvbGxlciBkZWwgaGlsby4gKi9cbiAgY29uc3QgaGFuZGxlTWVzc2FnZXNPdXRlcldoZWVsID0gdXNlQ2FsbGJhY2soXG4gICAgKGV2ZW50OiBSZWFjdC5XaGVlbEV2ZW50PEhUTUxEaXZFbGVtZW50PikgPT4ge1xuICAgICAgaGFuZGxlVXNlclNjcm9sbEludGVudCgpXG4gICAgICBjb25zdCBzY3JvbGxlciA9IG1lc3NhZ2VzUmVmLmN1cnJlbnRcbiAgICAgIGlmICghc2Nyb2xsZXIpIHJldHVyblxuXG4gICAgICBjb25zdCB0YXJnZXQgPSBldmVudC50YXJnZXQgYXMgTm9kZVxuICAgICAgaWYgKHRhcmdldCAhPT0gZXZlbnQuY3VycmVudFRhcmdldCAmJiAodGFyZ2V0ID09PSBzY3JvbGxlciB8fCBzY3JvbGxlci5jb250YWlucyh0YXJnZXQpKSkge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgY29uc3QgeyBkZWx0YVkgfSA9IGV2ZW50XG4gICAgICBpZiAoZGVsdGFZID09PSAwKSByZXR1cm5cblxuICAgICAgY29uc3QgbWF4U2Nyb2xsID0gc2Nyb2xsZXIuc2Nyb2xsSGVpZ2h0IC0gc2Nyb2xsZXIuY2xpZW50SGVpZ2h0XG4gICAgICBpZiAobWF4U2Nyb2xsIDw9IDApIHJldHVyblxuXG4gICAgICBjb25zdCBuZXh0U2Nyb2xsVG9wID0gTWF0aC5taW4obWF4U2Nyb2xsLCBNYXRoLm1heCgwLCBzY3JvbGxlci5zY3JvbGxUb3AgKyBkZWx0YVkpKVxuICAgICAgaWYgKG5leHRTY3JvbGxUb3AgPT09IHNjcm9sbGVyLnNjcm9sbFRvcCkgcmV0dXJuXG5cbiAgICAgIHNjcm9sbGVyLnNjcm9sbFRvcCA9IG5leHRTY3JvbGxUb3BcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KClcbiAgICB9LFxuICAgIFtoYW5kbGVVc2VyU2Nyb2xsSW50ZW50XVxuICApXG5cbiAgY29uc3QgbWVhc3VyZVR1cm4gPSB1c2VDYWxsYmFjaygocXVlc3Rpb25JZDogc3RyaW5nKSA9PiB7XG4gICAgY29uc3QgZWwgPSBtZXNzYWdlc1JlZi5jdXJyZW50XG4gICAgY29uc3Qgc3BhY2VyRWwgPSBzcGFjZXJFbFJlZi5jdXJyZW50XG4gICAgaWYgKCFlbCB8fCAhc3BhY2VyRWwpIHJldHVybiBudWxsXG5cbiAgICBjb25zdCBxdWVzdGlvbkVsID0gZWwucXVlcnlTZWxlY3RvcjxIVE1MRWxlbWVudD4oYFtkYXRhLW1lc3NhZ2UtaWQ9XCIke3F1ZXN0aW9uSWR9XCJdYClcbiAgICBpZiAoIXF1ZXN0aW9uRWwpIHJldHVybiBudWxsXG5cbiAgICBjb25zdCBjb250YWluZXJUb3AgPSBlbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3BcbiAgICBjb25zdCB7IHF1ZXN0aW9uVG9wLCB0dXJuSGVpZ2h0IH0gPSBjb21wdXRlTWVhc3VyZVR1cm5MYXlvdXQoe1xuICAgICAgY29udGFpbmVyVG9wLFxuICAgICAgcXVlc3Rpb25Ub3A6IHF1ZXN0aW9uRWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wLFxuICAgICAgY29udGVudEJvdHRvbTogc3BhY2VyRWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wLFxuICAgICAgc2Nyb2xsVG9wOiBlbC5zY3JvbGxUb3AsXG4gICAgfSlcbiAgICByZXR1cm4geyBlbCwgcXVlc3Rpb25Ub3AsIHR1cm5IZWlnaHQgfVxuICB9LCBbXSlcblxuICBjb25zdCByZXNlcnZlVHVyblNwYWNlID0gdXNlQ2FsbGJhY2soXG4gICAgKHF1ZXN0aW9uSWQ6IHN0cmluZykgPT4ge1xuICAgICAgY29uc3QgbWVhc3VyZWQgPSBtZWFzdXJlVHVybihxdWVzdGlvbklkKVxuICAgICAgaWYgKCFtZWFzdXJlZCkgcmV0dXJuXG4gICAgICBjb25zdCB7IGVsLCBxdWVzdGlvblRvcCwgdHVybkhlaWdodCB9ID0gbWVhc3VyZWRcblxuICAgICAgLy8gQW5jbGFtb3Mgc2llbXByZSwgaW5jbHVzbyBjdWFuZG8gbm8gaGFnYSBmYWx0YSByZXNlcnZhcjogZHVyYW50ZSBlbFxuICAgICAgLy8gdHVybm8gZWwgc2Nyb2xsIG5vIHNlIG11ZXZlIHNvbG8gZW4gbmluZ8O6biBjYXNvLlxuICAgICAgYW5jaG9yZWRUdXJuSWRSZWYuY3VycmVudCA9IHF1ZXN0aW9uSWRcblxuICAgICAgY29uc3QgdGFyZ2V0U2Nyb2xsVG9wID0gY29tcHV0ZVR1cm5TY3JvbGxUYXJnZXRUb3AocXVlc3Rpb25Ub3AsIGVsLmNsaWVudEhlaWdodClcbiAgICAgIGNvbnN0IHBsYW4gPSByZXNvbHZlUmVzZXJ2ZVR1cm5TcGFjZVBsYW4oe1xuICAgICAgICBjdXJyZW50U2Nyb2xsVG9wOiBlbC5zY3JvbGxUb3AsXG4gICAgICAgIHRhcmdldFNjcm9sbFRvcCxcbiAgICAgICAgY2xpZW50SGVpZ2h0OiBlbC5jbGllbnRIZWlnaHQsXG4gICAgICAgIHR1cm5IZWlnaHQsXG4gICAgICB9KVxuICAgICAgaWYgKHBsYW4ua2luZCA9PT0gJ3NraXAtcmVzZXJ2YXRpb24nKSB7XG4gICAgICAgIHNldFNwYWNlckhlaWdodCgwKVxuICAgICAgICB1cGRhdGVTY3JvbGxBZmZvcmRhbmNlcygpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBzZXRTcGFjZXJIZWlnaHQocGxhbi5zcGFjZXJIZWlnaHQpXG4gICAgICBhbmltYXRlU2Nyb2xsVG8ocGxhbi50YXJnZXRTY3JvbGxUb3ApXG4gICAgfSxcbiAgICBbbWVhc3VyZVR1cm4sIHNldFNwYWNlckhlaWdodCwgdXBkYXRlU2Nyb2xsQWZmb3JkYW5jZXMsIGFuaW1hdGVTY3JvbGxUb11cbiAgKVxuXG4gIC8qKlxuICAgKiBFbmNvZ2UgZWwgc3BhY2VyIGEgbWVkaWRhIHF1ZSBjcmVjZSBsYSByZXNwdWVzdGE6IGVsIGFsdG8gdG90YWwgZGVsIHNjcm9sbFxuICAgKiBxdWVkYSBjb25zdGFudGUgeSBsYSB2aXN0YSBubyBzZSBtdWV2ZSBzb2xhLiBTb2xvIGFjaGljYSwgbnVuY2EgYWdyYW5kYSxcbiAgICogcGFyYSBubyBpbnllY3RhciBlc3BhY2lvIGVuIHR1cm5vcyBxdWUgYXJyYW5jYXJvbiBzaW4gcmVzZXJ2YS5cbiAgICogRGV2dWVsdmUgc2kgZWwgdHVybm8gc2lndWUgYW5jbGFkbyAoYXVucXVlIGVsIHNwYWNlciB5YSBzZWEgMCkuXG4gICAqL1xuICBjb25zdCBzeW5jVHVyblNwYWNlID0gdXNlQ2FsbGJhY2soKCk6IGJvb2xlYW4gPT4ge1xuICAgIGlmICghYW5jaG9yZWRUdXJuSWRSZWYuY3VycmVudCkgcmV0dXJuIGZhbHNlXG4gICAgaWYgKHNwYWNlckhlaWdodFJlZi5jdXJyZW50ID4gMCkge1xuICAgICAgY29uc3QgbWVhc3VyZWQgPSBtZWFzdXJlVHVybihhbmNob3JlZFR1cm5JZFJlZi5jdXJyZW50KVxuICAgICAgaWYgKG1lYXN1cmVkKSB7XG4gICAgICAgIHNldFNwYWNlckhlaWdodChcbiAgICAgICAgICBjb21wdXRlU3luY2VkVHVyblNwYWNlckhlaWdodChtZWFzdXJlZC5lbC5jbGllbnRIZWlnaHQsIG1lYXN1cmVkLnR1cm5IZWlnaHQsIHNwYWNlckhlaWdodFJlZi5jdXJyZW50KVxuICAgICAgICApXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0cnVlXG4gIH0sIFttZWFzdXJlVHVybiwgc2V0U3BhY2VySGVpZ2h0XSlcblxuICBjb25zdCBoYW5kbGVDbGlja1Njcm9sbFRvQm90dG9tID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGNvbnN0IGVsID0gbWVzc2FnZXNSZWYuY3VycmVudFxuICAgIGlmICghZWwpIHJldHVyblxuICAgIGNsZWFyVHVyblNwYWNlKClcbiAgICAvLyBNaXNtYSBjdXJ2YSB5IGR1cmFjacOzbiBxdWUgZWwgYW5jbGFqZSBkZWwgdHVybm86IGVsIGBzbW9vdGhgIG5hdGl2byBmcmVuYSBzZWNvLlxuICAgIGFuaW1hdGVTY3JvbGxUbyhyZXNvbHZlU2Nyb2xsVG9Cb3R0b21UYXJnZXRUb3AoZWwuc2Nyb2xsSGVpZ2h0LCBlbC5jbGllbnRIZWlnaHQpKVxuICB9LCBbY2xlYXJUdXJuU3BhY2UsIGFuaW1hdGVTY3JvbGxUb10pXG5cbiAgY29uc3QgaGFuZGxlU2Nyb2xsVG9Cb3R0b20gPSB1c2VDYWxsYmFjayhcbiAgICAoZTogUmVhY3QuVUlFdmVudDxIVE1MRGl2RWxlbWVudD4pID0+IHtcbiAgICAgIGNvbnN0IGNvbnRhaW5lciA9IGUuY3VycmVudFRhcmdldFxuXG4gICAgICBpZiAoc2Nyb2xsUmFmUmVmLmN1cnJlbnQgIT09IG51bGwpIHtcbiAgICAgICAgY2FuY2VsQW5pbWF0aW9uRnJhbWUoc2Nyb2xsUmFmUmVmLmN1cnJlbnQpXG4gICAgICB9XG5cbiAgICAgIHNjcm9sbFJhZlJlZi5jdXJyZW50ID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcbiAgICAgICAgc2Nyb2xsUmFmUmVmLmN1cnJlbnQgPSBudWxsXG4gICAgICAgIGNvbnN0IHsgc2Nyb2xsVG9wLCBzY3JvbGxIZWlnaHQsIGNsaWVudEhlaWdodCB9ID0gY29udGFpbmVyXG5cbiAgICAgICAgY29uc3Qgc2Nyb2xsRnJhbWUgPSBwcm9jZXNzQ2hhdE1lc3NhZ2VzU2Nyb2xsRnJhbWUoe1xuICAgICAgICAgIHNjcm9sbFRvcCxcbiAgICAgICAgICBzY3JvbGxIZWlnaHQsXG4gICAgICAgICAgY2xpZW50SGVpZ2h0LFxuICAgICAgICAgIGxhc3RTY3JvbGxUb3A6IGxhc3RTY3JvbGxUb3BSZWYuY3VycmVudCxcbiAgICAgICAgICBzY3JvbGxUaHJlc2hvbGQ6IHNjcm9sbFRocmVzaG9sZFJlZi5jdXJyZW50LFxuICAgICAgICAgIGFuY2hvcmVkVHVybklkOiBhbmNob3JlZFR1cm5JZFJlZi5jdXJyZW50LFxuICAgICAgICAgIGluaXRpYWxDaGF0SWQsXG4gICAgICAgIH0pXG5cbiAgICAgICAgc2Nyb2xsVGhyZXNob2xkUmVmLmN1cnJlbnQgPSBzY3JvbGxGcmFtZS5uZXh0U2Nyb2xsVGhyZXNob2xkXG4gICAgICAgIGxhc3RTY3JvbGxUb3BSZWYuY3VycmVudCA9IHNjcm9sbEZyYW1lLmxhc3RTY3JvbGxUb3BcblxuICAgICAgICBpZiAoc2Nyb2xsRnJhbWUuc2hvdWxkRHJhaW5UdXJuU3BhY2UpIGRyYWluVHVyblNwYWNlKClcblxuICAgICAgICB1cGRhdGVTY3JvbGxBZmZvcmRhbmNlcygpXG5cbiAgICAgICAgaWYgKHNjcm9sbEZyYW1lLnNob3VsZFNjaGVkdWxlU2Nyb2xsUGVyc2lzdCkge1xuICAgICAgICAgIGlmIChzY3JvbGxQZXJzaXN0VGltZXJSZWYuY3VycmVudCAhPSBudWxsKSB7XG4gICAgICAgICAgICB3aW5kb3cuY2xlYXJUaW1lb3V0KHNjcm9sbFBlcnNpc3RUaW1lclJlZi5jdXJyZW50KVxuICAgICAgICAgIH1cbiAgICAgICAgICBzY3JvbGxQZXJzaXN0VGltZXJSZWYuY3VycmVudCA9IHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHBhdGNoTWFpYVBhbmVsU2Vzc2lvbihhdXRoVXNlci5pZCwge1xuICAgICAgICAgICAgICBzY3JvbGxUb3AsXG4gICAgICAgICAgICAgIHNjcm9sbFNlc3Npb25JZDogaW5pdGlhbENoYXRJZCxcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfSwgMTUwKVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHNjcm9sbEZyYW1lLnNob3VsZE5vdGlmeVNjcm9sbFRvQm90dG9tICYmIG9uU2Nyb2xsVG9Cb3R0b20pIHtcbiAgICAgICAgICBvblNjcm9sbFRvQm90dG9tKClcbiAgICAgICAgfVxuXG4gICAgICAgIGhhbmRsZVNjcm9sbChjb250YWluZXIpXG4gICAgICB9KVxuICAgIH0sXG4gICAgW2F1dGhVc2VyLmlkLCBkcmFpblR1cm5TcGFjZSwgaGFuZGxlU2Nyb2xsLCBpbml0aWFsQ2hhdElkLCBvblNjcm9sbFRvQm90dG9tLCB1cGRhdGVTY3JvbGxBZmZvcmRhbmNlc11cbiAgKVxuXG4gIC8vIHJlZnMgdG8gc3RhYmlsaXplIGZ1bmN0aW9ucyBhbmQgYXZvaWQgdW5uZWNlc3NhcnkgcmUtcmVuZGVyc1xuICBjb25zdCBzZW5kTWVzc2FnZVJlZiA9IHVzZVJlZihzZW5kTWVzc2FnZSlcbiAgY29uc3Qgc3RvcEdlbmVyYXRpb25SZWYgPSB1c2VSZWYoc3RvcEdlbmVyYXRpb24pXG4gIGNvbnN0IG9uU2VuZE1lc3NhZ2VSZWFkeVJlZiA9IHVzZVJlZihvblNlbmRNZXNzYWdlUmVhZHkpXG4gIGNvbnN0IHNlbmRNZXNzYWdlUHJveHlSZWYgPSB1c2VSZWYoXG4gICAgKFxuICAgICAgbWVzc2FnZTogc3RyaW5nLFxuICAgICAgYXR0YWNobWVudHM/OiBBdHRhY2htZW50RmlsZVtdLFxuICAgICAgZmFxSWQ/OiBzdHJpbmcsXG4gICAgICBhZ2VudFN1Z2dlc3Rpb25JZD86IHN0cmluZyxcbiAgICAgIG1lbnRpb25zPzogQ29udGV4dE1lbnRpb25bXSxcbiAgICAgIGZ1YUlkPzogc3RyaW5nLFxuICAgICAgc2NJZD86IHN0cmluZ1xuICAgICkgPT4gc2VuZE1lc3NhZ2VSZWYuY3VycmVudChtZXNzYWdlLCBhdHRhY2htZW50cywgZmFxSWQsIGFnZW50U3VnZ2VzdGlvbklkLCBtZW50aW9ucywgZnVhSWQsIHNjSWQpXG4gIClcbiAgY29uc3Qgc3RvcEdlbmVyYXRpb25Qcm94eVJlZiA9IHVzZVJlZigoKSA9PiBzdG9wR2VuZXJhdGlvblJlZi5jdXJyZW50KCkpXG5cbiAgLy8gdXBkYXRlIHJlZnMgd2hlbiBmdW5jdGlvbnMgY2hhbmdlXG4gIHNlbmRNZXNzYWdlUmVmLmN1cnJlbnQgPSBzZW5kTWVzc2FnZVxuICBzdG9wR2VuZXJhdGlvblJlZi5jdXJyZW50ID0gc3RvcEdlbmVyYXRpb25cbiAgb25TZW5kTWVzc2FnZVJlYWR5UmVmLmN1cnJlbnQgPSBvblNlbmRNZXNzYWdlUmVhZHlcblxuICAvKipcbiAgICogYGhhbmRsZVN1Z2dlc3Rpb25DbGlja2Agc2UgcGFzYSBhIFRPRE9TIGxvcyBNZXNzYWdlSXRlbSwgYXPDrSBxdWUgc3UgaWRlbnRpZGFkXG4gICAqIGRlY2lkZSBzaSBlbCBgbWVtb2AgZGUgbGEgbGlzdGEgc29zdGllbmUuIExlZW1vcyBwb3IgcmVmIGxvIHF1ZSBjYW1iaWEgZW4gY2FkYVxuICAgKiB1cGRhdGUgKGBtZXNzYWdlc2AsIGBzZW5kTWVzc2FnZWAsIGxhcyBzdWdlcmVuY2lhcyB5YSBlbGVnaWRhcykgcGFyYSBxdWUgZWxcbiAgICogY2FsbGJhY2sgc2VhIGVzdGFibGU6IHNpIG5vLCBhbCB0ZXJtaW5hciBlbCBzdHJlYW0gc2UgcmVwaW50YSBlbCBjaGF0IGVudGVyb1xuICAgKiB5IGNhZGEgTWFpYVN0cmVhbWRvd24gdnVlbHZlIGEgcGFyc2VhciBzdSBtYXJrZG93bi5cbiAgICovXG4gIGNvbnN0IG1lc3NhZ2VzRGF0YVJlZiA9IHVzZVJlZihtZXNzYWdlcylcbiAgbWVzc2FnZXNEYXRhUmVmLmN1cnJlbnQgPSBtZXNzYWdlc1xuICBjb25zdCBzZWxlY3RlZFN1Z2dlc3Rpb25NZXNzYWdlSWRzUmVmID0gdXNlUmVmKHNlbGVjdGVkU3VnZ2VzdGlvbk1lc3NhZ2VJZHMpXG4gIHNlbGVjdGVkU3VnZ2VzdGlvbk1lc3NhZ2VJZHNSZWYuY3VycmVudCA9IHNlbGVjdGVkU3VnZ2VzdGlvbk1lc3NhZ2VJZHNcblxuICBjb25zdCBoYW5kbGVTdWdnZXN0aW9uQ2xpY2sgPSB1c2VDYWxsYmFjayhcbiAgICAobWVzc2FnZUlkOiBzdHJpbmcsIHN1Z2dlc3Rpb246IHN0cmluZykgPT4ge1xuICAgICAgaWYgKHNob3VsZElnbm9yZVN1Z2dlc3Rpb25DbGljayhzdWdnZXN0aW9uLCBzZWxlY3RlZFN1Z2dlc3Rpb25NZXNzYWdlSWRzUmVmLmN1cnJlbnRbbWVzc2FnZUlkXSkpIHJldHVyblxuICAgICAgY29uc3QgY3VycmVudE1lc3NhZ2VzID0gbWVzc2FnZXNEYXRhUmVmLmN1cnJlbnRcbiAgICAgIGNvbnN0IGlzTWFya2V0cGxhY2VHbG9iYWxBZ2VudCA9IGlzTWFpYWtlckFnZW50KGFnZW50KVxuICAgICAgZXZlbnQoRVZFTlRTLmFpQ2hhdFN1Z2dlc3RlZEFuc3dlciwge1xuICAgICAgICBhZ2VudF90eXBlOiByZXNvbHZlU3VnZ2VzdGlvbkFuYWx5dGljc0FnZW50VHlwZShpc01hcmtldHBsYWNlR2xvYmFsQWdlbnQsIGFnZW50Py50eXBlKSxcbiAgICAgIH0pXG4gICAgICBzZXRTZWxlY3RlZFN1Z2dlc3Rpb25NZXNzYWdlSWRzKHByZXYgPT4gKHsgLi4ucHJldiwgW21lc3NhZ2VJZF06IHRydWUgfSkpXG5cbiAgICAgIGNvbnN0IHRhcmdldE1lc3NhZ2UgPSBjdXJyZW50TWVzc2FnZXMuZmluZChtc2cgPT4gbXNnLmlkID09PSBtZXNzYWdlSWQpXG4gICAgICBpZiAoaXNSZXRyeVN1Z2dlc3Rpb25TZWxlY3Rpb24odGFyZ2V0TWVzc2FnZT8uaXNFcnJvciwgc3VnZ2VzdGlvbiwgdCgnY2hhdC5yZXRyeScpKSkge1xuICAgICAgICBjb25zdCBsYXN0VXNlck1lc3NhZ2UgPSBjdXJyZW50TWVzc2FnZXNcbiAgICAgICAgICAuZmlsdGVyKG1zZyA9PiBtc2cucm9sZSA9PT0gQ2hhdEhpc3RvcnlSb2xlLlVTRVIgfHwgbXNnLnVzZXIuaWQgPT09IGF1dGhVc2VyLmlkLnRvU3RyaW5nKCkpXG4gICAgICAgICAgLmF0KC0xKVxuICAgICAgICBpZiAobGFzdFVzZXJNZXNzYWdlPy5tZXNzYWdlKSB7XG4gICAgICAgICAgc2VuZE1lc3NhZ2VSZWYuY3VycmVudChsYXN0VXNlck1lc3NhZ2UubWVzc2FnZSwgcmVzb2x2ZVJldHJ5QXR0YWNobWVudHNGcm9tVXNlck1lc3NhZ2UobGFzdFVzZXJNZXNzYWdlKSlcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBzZW5kTWVzc2FnZVJlZi5jdXJyZW50KHN1Z2dlc3Rpb24pXG4gICAgfSxcbiAgICBbZXZlbnQsIGFnZW50LCB0LCBhdXRoVXNlci5pZF1cbiAgKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKG9uU2VuZE1lc3NhZ2VSZWFkeVJlZi5jdXJyZW50KSB7XG4gICAgICBvblNlbmRNZXNzYWdlUmVhZHlSZWYuY3VycmVudChcbiAgICAgICAgc2VuZE1lc3NhZ2VQcm94eVJlZi5jdXJyZW50LFxuICAgICAgICBzdG9wR2VuZXJhdGlvblByb3h5UmVmLmN1cnJlbnQsXG4gICAgICAgIHdhaXRpbmdSZXNwb25zZSxcbiAgICAgICAgaXNXcml0aW5nXG4gICAgICApXG4gICAgfVxuICB9LCBbd2FpdGluZ1Jlc3BvbnNlLCBpc1dyaXRpbmddKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaXNMb2FkaW5nTW9yZVJlZi5jdXJyZW50ID0gaXNMb2FkaW5nTW9yZU1lc3NhZ2VzXG4gIH0sIFtpc0xvYWRpbmdNb3JlTWVzc2FnZXNdKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKHNob3VsZEluaXRpYWxpemVDaGF0KGNoYXRJbml0aWFsaXplZFJlZi5jdXJyZW50KSkge1xuICAgICAgY2hhdEluaXRpYWxpemVkUmVmLmN1cnJlbnQgPSB0cnVlXG4gICAgICBpbml0aWFsaXplQ2hhdCgpXG4gICAgfVxuICB9LCBbXSlcblxuICAvLyBNaWVudHJhcyBlbCBzdHJlYW0gY3JlY2U6IGVuY29nZXIgZWwgc3BhY2VyIGRlbCB0dXJubyBhbmNsYWRvIHlcbiAgLy8gYWN0dWFsaXphciBmbGVjaGEvZ3JhZGllbnRlcy4gRWwgc2Nyb2xsIG5vIHNlIG11ZXZlIHNvbG8uXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFzaG91bGRSdW5TdHJlYW1UdXJuU3luY0VmZmVjdCh3YWl0aW5nUmVzcG9uc2UsIGlzV3JpdGluZykpIHJldHVybiB1bmRlZmluZWRcbiAgICBpZiAoIW1lc3NhZ2VzUmVmLmN1cnJlbnQpIHJldHVybiB1bmRlZmluZWRcblxuICAgIGxldCByYWZJZDogbnVtYmVyIHwgbnVsbCA9IG51bGxcblxuICAgIGNvbnN0IHRpY2sgPSAoKSA9PiB7XG4gICAgICBjb25zdCBlbCA9IG1lc3NhZ2VzUmVmLmN1cnJlbnRcbiAgICAgIGlmICghZWwpIHtcbiAgICAgICAgcmFmSWQgPSBudWxsXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgICAgc3luY1R1cm5TcGFjZSgpXG4gICAgICB1cGRhdGVTY3JvbGxBZmZvcmRhbmNlcygpXG4gICAgICByYWZJZCA9IHJlcXVlc3RBbmltYXRpb25GcmFtZSh0aWNrKVxuICAgIH1cblxuICAgIHJhZklkID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHRpY2spXG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGlmIChyYWZJZCAhPSBudWxsKSBjYW5jZWxBbmltYXRpb25GcmFtZShyYWZJZClcbiAgICB9XG4gIH0sIFt3YWl0aW5nUmVzcG9uc2UsIGlzV3JpdGluZywgc3luY1R1cm5TcGFjZSwgdXBkYXRlU2Nyb2xsQWZmb3JkYW5jZXNdKVxuXG4gIGNvbnN0IGxhc3RSZXNlcnZlZFF1ZXN0aW9uUmVmID0gdXNlUmVmPHN0cmluZyB8IG51bGw+KG51bGwpXG5cbiAgLy8gQ2FtYmlvIGRlIGNoYXQ6IGVsIGFuY2xhIHkgZWwgc3BhY2VyIGRlbCB0dXJubyBhbnRlcmlvciBkZWphbiBkZSBhcGxpY2FyLlxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghc2hvdWxkQ2xlYXJMYXN0UmVzZXJ2ZWRRdWVzdGlvbihsb2FkaW5nTWVzc2FnZXMpKSByZXR1cm5cbiAgICBsYXN0UmVzZXJ2ZWRRdWVzdGlvblJlZi5jdXJyZW50ID0gbnVsbFxuICAgIGNsZWFyVHVyblNwYWNlKClcbiAgfSwgW2xvYWRpbmdNZXNzYWdlcywgY2xlYXJUdXJuU3BhY2VdKVxuXG4gIC8vIEFsIGVudmlhciB1biBtZW5zYWplOiBhbmNsYW1vcyBlbCB0dXJubyB5IGhhY2Vtb3MgZWwgw7puaWNvIHNjcm9sbCBkZWwgY2ljbG8uXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgcXVlc3Rpb25JZCA9IGZpbmRMYXN0UXVlc3Rpb25JZChtZXNzYWdlcylcbiAgICBpZiAoXG4gICAgICAhc2hvdWxkU2NoZWR1bGVUdXJuU3BhY2VSZXNlcnZhdGlvbihcbiAgICAgICAgbG9hZGluZ01lc3NhZ2VzLFxuICAgICAgICBpc0xvYWRpbmdNb3JlTWVzc2FnZXMsXG4gICAgICAgIHF1ZXN0aW9uSWQsXG4gICAgICAgIGxhc3RSZXNlcnZlZFF1ZXN0aW9uUmVmLmN1cnJlbnRcbiAgICAgIClcbiAgICApIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmICghcXVlc3Rpb25JZCkgcmV0dXJuXG4gICAgbGFzdFJlc2VydmVkUXVlc3Rpb25SZWYuY3VycmVudCA9IHF1ZXN0aW9uSWRcbiAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4gcmVzZXJ2ZVR1cm5TcGFjZShxdWVzdGlvbklkKSlcbiAgfSwgW21lc3NhZ2VzLCBsb2FkaW5nTWVzc2FnZXMsIGlzTG9hZGluZ01vcmVNZXNzYWdlcywgcmVzZXJ2ZVR1cm5TcGFjZV0pXG5cbiAgLy8gU2Nyb2xsIGN1YW5kbyBjYW1iaWFuIGxvcyBtZW5zYWplczogZGlzdGluZ3VlIFwibnVldm8gbWVuc2FqZVwiIChhZ3JlZ2FkbylcbiAgLy8gZGUgXCJyZWVtcGxhem9cIiAobWlzbW8gaWQvbGVuZ3RoLCBlai4gZmVlZGJhY2sgbyBhcHByb3ZhbFN0YXR1cykuIEVuXG4gIC8vIHJlZW1wbGF6b3Mgc29sbyBzZSByZWNhbGN1bGEgbGEgdmlzaWJpbGlkYWQgZGVsIGJvdMOzbiBzaW4gZm9yemFyIHNjcm9sbC5cbiAgY29uc3QgbGFzdE1lc3NhZ2VJZFJlZiA9IHVzZVJlZjxzdHJpbmcgfCBudWxsPihudWxsKVxuICBjb25zdCBsYXN0TWVzc2FnZXNMZW5ndGhSZWYgPSB1c2VSZWY8bnVtYmVyPigwKVxuXG4gIC8vIEFsIGNhbWJpYXIgZGUgc2VzacOzbiwgcmVzZXRlYXIgZXN0YWRvIGRlIHNjcm9sbCBtYW51YWwgcGFyYSBubyBoZXJlZGFyIGVsIGNoYXQgYW50ZXJpb3IuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgd2FzTG9hZGluZ01lc3NhZ2VzUmVmLmN1cnJlbnQgPSBmYWxzZVxuICAgIGxhc3RTY3JvbGxlZFNlc3Npb25SZWYuY3VycmVudCA9IG51bGxcbiAgICBzY3JvbGxUaHJlc2hvbGRSZWYuY3VycmVudCA9IDM5XG4gICAgbGFzdFNjcm9sbFRvcFJlZi5jdXJyZW50ID0gMFxuICAgIGxhc3RNZXNzYWdlSWRSZWYuY3VycmVudCA9IG51bGxcbiAgICBsYXN0TWVzc2FnZXNMZW5ndGhSZWYuY3VycmVudCA9IDBcbiAgfSwgW2luaXRpYWxDaGF0SWRdKVxuXG4gIC8vIFJlc3RhdXJhY2nDs24gZGVzZGUgY2FjaGUgKHNpbiBMb2FkZXIpOiBiYWphciBhbCBmb25kbyBhbCByZWFicmlyIHNlc2nDs24gdmlzaXRhZGEuXG4gIHVzZUxheW91dEVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKFxuICAgICAgIXNob3VsZFJ1blNlc3Npb25DYWNoZVNjcm9sbFRvQm90dG9tKFxuICAgICAgICBsb2FkaW5nTWVzc2FnZXMsXG4gICAgICAgIGluaXRpYWxDaGF0SWQsXG4gICAgICAgIG1lc3NhZ2VzLmxlbmd0aCxcbiAgICAgICAgbGFzdFNjcm9sbGVkU2Vzc2lvblJlZi5jdXJyZW50XG4gICAgICApXG4gICAgKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgbGFzdFNjcm9sbGVkU2Vzc2lvblJlZi5jdXJyZW50ID0gaW5pdGlhbENoYXRJZFxuXG4gICAgc2Nyb2xsVGhyZXNob2xkUmVmLmN1cnJlbnQgPSAzOVxuICAgIGxhc3RNZXNzYWdlSWRSZWYuY3VycmVudCA9IG1lc3NhZ2VzW21lc3NhZ2VzLmxlbmd0aCAtIDFdPy5pZCA/PyBudWxsXG4gICAgbGFzdE1lc3NhZ2VzTGVuZ3RoUmVmLmN1cnJlbnQgPSBtZXNzYWdlcy5sZW5ndGhcblxuICAgIHNjcm9sbFRvQm90dG9tUmFmKClcbiAgICBzY3JvbGxUb0JvdHRvbVJhZih7IGRlbGF5TXM6IDEwMCB9KVxuICB9LCBbaW5pdGlhbENoYXRJZCwgbG9hZGluZ01lc3NhZ2VzLCBtZXNzYWdlcy5sZW5ndGgsIG1lc3NhZ2VzLCBzY3JvbGxUb0JvdHRvbVJhZl0pXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoXG4gICAgICBzaG91bGRTa2lwTWVzc2FnZXNTY3JvbGxFZmZlY3QoXG4gICAgICAgIEJvb2xlYW4obWVzc2FnZXNSZWYuY3VycmVudCksXG4gICAgICAgIGxvYWRpbmdNZXNzYWdlcyxcbiAgICAgICAgaXNMb2FkaW5nTW9yZU1lc3NhZ2VzLFxuICAgICAgICBpc0xvYWRpbmdNb3JlUmVmLmN1cnJlbnRcbiAgICAgIClcbiAgICApIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IGxhc3RNZXNzYWdlID0gbWVzc2FnZXNbbWVzc2FnZXMubGVuZ3RoIC0gMV1cbiAgICBjb25zdCBsYXN0SWQgPSBsYXN0TWVzc2FnZT8uaWQgPz8gbnVsbFxuICAgIGNvbnN0IHByZXZJZCA9IGxhc3RNZXNzYWdlSWRSZWYuY3VycmVudFxuICAgIGNvbnN0IHByZXZMZW4gPSBsYXN0TWVzc2FnZXNMZW5ndGhSZWYuY3VycmVudFxuICAgIGxhc3RNZXNzYWdlSWRSZWYuY3VycmVudCA9IGxhc3RJZFxuICAgIGxhc3RNZXNzYWdlc0xlbmd0aFJlZi5jdXJyZW50ID0gbWVzc2FnZXMubGVuZ3RoXG5cbiAgICBjb25zdCBpc05ld01lc3NhZ2UgPSBpc05ld0NoYXRNZXNzYWdlRXZlbnQobGFzdElkLCBwcmV2SWQsIG1lc3NhZ2VzLmxlbmd0aCwgcHJldkxlbilcbiAgICBjb25zdCBjb250YWluZXIgPSBtZXNzYWdlc1JlZi5jdXJyZW50XG4gICAgY29uc3Qgc2Nyb2xsRGVjaXNpb24gPSBzaG91bGRBdXRvU2Nyb2xsT25NZXNzYWdlc0NoYW5nZSh7XG4gICAgICBpc05ld01lc3NhZ2UsXG4gICAgICBhbmNob3JlZFR1cm5JZDogYW5jaG9yZWRUdXJuSWRSZWYuY3VycmVudCxcbiAgICAgIHdhaXRpbmdSZXNwb25zZSxcbiAgICAgIGlzV3JpdGluZyxcbiAgICAgIGlzQXRCb3R0b206IHJlc29sdmVDb250YWluZXJBdEJvdHRvbShjb250YWluZXIpLFxuICAgICAgaXNBbnN3ZXJPclF1ZXN0aW9uOiBpc0Fuc3dlck9yUXVlc3Rpb25DaGF0TWVzc2FnZUlkKGxhc3RNZXNzYWdlPy5pZCksXG4gICAgICBpc0FwcHJvdmFsOiBpc0FwcHJvdmFsQ2hhdE1lc3NhZ2UobGFzdE1lc3NhZ2UpLFxuICAgICAgaGFzSW5pdGlhbE1lc3NhZ2U6IGhhc0luaXRpYWxVc2VyTWVzc2FnZUluTGlzdChtZXNzYWdlcyksXG4gICAgICBtZXNzYWdlc0xlbmd0aDogbWVzc2FnZXMubGVuZ3RoLFxuICAgICAgcHJldk1lc3NhZ2VzTGVuZ3RoOiBwcmV2TGVuLFxuICAgIH0pXG5cbiAgICBpZiAoc2Nyb2xsRGVjaXNpb24gPT09ICdhZmZvcmRhbmNlcy1vbmx5Jykge1xuICAgICAgdXBkYXRlU2Nyb2xsQWZmb3JkYW5jZXMoKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgaWYgKHNjcm9sbERlY2lzaW9uID09PSAnc3luYy10dXJuJykge1xuICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHN5bmNUdXJuU3BhY2UpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBzY3JvbGxUb0JvdHRvbVJhZigpXG4gIH0sIFtcbiAgICBtZXNzYWdlcyxcbiAgICBsb2FkaW5nTWVzc2FnZXMsXG4gICAgaXNMb2FkaW5nTW9yZU1lc3NhZ2VzLFxuICAgIHdhaXRpbmdSZXNwb25zZSxcbiAgICBpc1dyaXRpbmcsXG4gICAgc2Nyb2xsVG9Cb3R0b21SYWYsXG4gICAgc3luY1R1cm5TcGFjZSxcbiAgICB1cGRhdGVTY3JvbGxBZmZvcmRhbmNlcyxcbiAgXSlcblxuICAvLyBBbCBhYnJpci9jYXJnYXIgdW5hIGNvbnZlcnNhY2nDs24gZWwgY29udGVuZWRvciBzZSByZW1vbnRhIChMb2FkZXIg4oaSIGxpc3RhKSBjb25cbiAgLy8gc2Nyb2xsVG9wPTAuIEZvcnphbW9zIGlyIGFsIGZvbmRvIGFsIHRlcm1pbmFyIGxvYWRNZXNzYWdlcywgc2luIGFmZWN0YXIgcGFnaW5hY2nDs24gaGFjaWEgYXJyaWJhLlxuICB1c2VMYXlvdXRFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IGp1c3RGaW5pc2hlZExvYWRpbmcgPSBkZXRlY3RKdXN0RmluaXNoZWRMb2FkaW5nTWVzc2FnZXMod2FzTG9hZGluZ01lc3NhZ2VzUmVmLmN1cnJlbnQsIGxvYWRpbmdNZXNzYWdlcylcbiAgICB3YXNMb2FkaW5nTWVzc2FnZXNSZWYuY3VycmVudCA9IGxvYWRpbmdNZXNzYWdlc1xuXG4gICAgaWYgKCFzaG91bGRTY3JvbGxUb0JvdHRvbUFmdGVyTG9hZChqdXN0RmluaXNoZWRMb2FkaW5nLCBtZXNzYWdlcy5sZW5ndGgpKSByZXR1cm5cblxuICAgIHNjcm9sbFRocmVzaG9sZFJlZi5jdXJyZW50ID0gMzlcbiAgICBsYXN0TWVzc2FnZUlkUmVmLmN1cnJlbnQgPSBtZXNzYWdlc1ttZXNzYWdlcy5sZW5ndGggLSAxXT8uaWQgPz8gbnVsbFxuICAgIGxhc3RNZXNzYWdlc0xlbmd0aFJlZi5jdXJyZW50ID0gbWVzc2FnZXMubGVuZ3RoXG5cbiAgICBzY3JvbGxUb0JvdHRvbVJhZigpXG4gICAgc2Nyb2xsVG9Cb3R0b21SYWYoeyBkZWxheU1zOiAxMDAgfSlcbiAgfSwgW2xvYWRpbmdNZXNzYWdlcywgbWVzc2FnZXMubGVuZ3RoLCBzY3JvbGxUb0JvdHRvbVJhZl0pXG5cbiAgLy8gRXN0YWRvIGluaWNpYWwgZGVsIGJvdMOzbiBzY3JvbGwtdG8tYm90dG9tIGFsIHRlcm1pbmFyIGxvYWRpbmdNZXNzYWdlcy5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoc2hvdWxkVXBkYXRlU2Nyb2xsQWZmb3JkYW5jZXNPbkxvYWRFbmQobG9hZGluZ01lc3NhZ2VzKSkge1xuICAgICAgdXBkYXRlU2Nyb2xsQWZmb3JkYW5jZXMoKVxuICAgIH1cbiAgfSwgW2xvYWRpbmdNZXNzYWdlcywgbWVzc2FnZXMubGVuZ3RoLCB1cGRhdGVTY3JvbGxBZmZvcmRhbmNlc10pXG5cbiAgLy8gT2J0ZW5lciBlbCDDumx0aW1vIG1lbnNhamUgZGVsIHVzdWFyaW8gcGFyYSB2ZXJpZmljYXIgc2kgdGllbmUgYXR0YWNobWVudHNcbiAgY29uc3QgbGFzdFVzZXJNZXNzYWdlID0gcmVzb2x2ZUxhc3RVc2VyTWVzc2FnZUZvckF0dGFjaG1lbnRzKG1lc3NhZ2VzLCBhdXRoVXNlci5pZC50b1N0cmluZygpKVxuXG4gIGNvbnN0IGF0dGFjaG1lbnRzQ291bnQgPSBjb3VudFVzZXJNZXNzYWdlQXR0YWNobWVudHMobGFzdFVzZXJNZXNzYWdlKVxuXG4gIGNvbnN0IHN0cmVhbUxvYWRpbmdEaXNwbGF5ID0gcmVzb2x2ZVN0cmVhbUxvYWRpbmdEaXNwbGF5KHtcbiAgICBzdHJlYW1BY3Rpdml0eSxcbiAgICBsb2FkaW5nTWVzc2FnZSxcbiAgICBhY3RpdmVMb2FkaW5nczogYWN0aXZlTG9hZGluZ3MgfHwge30sXG4gICAgd2FpdGluZ1Jlc3BvbnNlLFxuICAgIGlzV2ViU2VhcmNoQWN0aXZlLFxuICAgIGlzRGVlcFNlYXJjaEFjdGl2ZSxcbiAgICBoYXNBdHRhY2htZW50czogQm9vbGVhbihhdHRhY2htZW50c0NvdW50KSxcbiAgICBhdHRhY2htZW50c0NvdW50LFxuICAgIHQsXG4gIH0pXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoc2hvdWxkQ2xlYXJTY3JvbGxSZXN0b3JlV2l0aG91dENoYXQoaW5pdGlhbENoYXRJZCkpIHtcbiAgICAgIHBlbmRpbmdTY3JvbGxSZXN0b3JlUmVmLmN1cnJlbnQgPSBudWxsXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgY29uc3Qgc2Vzc2lvbiA9IHJlYWRNYWlhUGFuZWxTZXNzaW9uKGF1dGhVc2VyLmlkKVxuICAgIHBlbmRpbmdTY3JvbGxSZXN0b3JlUmVmLmN1cnJlbnQgPSByZXNvbHZlUGVuZGluZ1Njcm9sbFRvcEZyb21TZXNzaW9uKFxuICAgICAgc2Vzc2lvblxuICAgICAgICA/IHsgc2Nyb2xsU2Vzc2lvbklkOiBzZXNzaW9uLnNjcm9sbFNlc3Npb25JZCA/PyB1bmRlZmluZWQsIHNjcm9sbFRvcDogc2Vzc2lvbi5zY3JvbGxUb3AgPz8gdW5kZWZpbmVkIH1cbiAgICAgICAgOiBudWxsLFxuICAgICAgaW5pdGlhbENoYXRJZFxuICAgIClcbiAgfSwgW2F1dGhVc2VyLmlkLCBpbml0aWFsQ2hhdElkXSlcblxuICB1c2VMYXlvdXRFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IGNvbnRhaW5lciA9IG1lc3NhZ2VzUmVmLmN1cnJlbnRcbiAgICBjb25zdCBwZW5kaW5nU2Nyb2xsVG9wID0gcGVuZGluZ1Njcm9sbFJlc3RvcmVSZWYuY3VycmVudFxuICAgIGlmIChcbiAgICAgICFjb250YWluZXIgfHxcbiAgICAgICFzaG91bGRBcHBseVBlbmRpbmdTY3JvbGxSZXN0b3JlKGxvYWRpbmdNZXNzYWdlcywgcGVuZGluZ1Njcm9sbFRvcCwgdHJ1ZSkgfHxcbiAgICAgIHBlbmRpbmdTY3JvbGxUb3AgPT0gbnVsbFxuICAgICkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGNvbnRhaW5lci5zY3JvbGxUb3AgPSBwZW5kaW5nU2Nyb2xsVG9wXG4gICAgbGFzdFNjcm9sbFRvcFJlZi5jdXJyZW50ID0gcGVuZGluZ1Njcm9sbFRvcFxuICAgIHBlbmRpbmdTY3JvbGxSZXN0b3JlUmVmLmN1cnJlbnQgPSBudWxsXG4gIH0sIFtsb2FkaW5nTWVzc2FnZXMsIG1lc3NhZ2VzLmxlbmd0aF0pXG5cbiAgLy8gQWwgZXhwYW5kaXIvY29udHJhZXIgZWwgbW9kYWwgZWwgcmVmIHBhc2EgYSBvdHJvIGNvbnRlbmVkb3IgKHNjcm9sbFRvcCBzZSByZXNldGVhIGEgMCkuXG4gIC8vIFJlc3RhdXJhciBsYSBwb3NpY2nDs24gZGUgc2Nyb2xsIGFudGVzIGRlbCBwYWludCBwYXJhIGV2aXRhciBxdWUgbGEgY29udmVyc2FjacOzbiBzYWx0ZSBhcnJpYmEuXG4gIGNvbnN0IGV4cGFuZGVkUmVmID0gdXNlUmVmKGV4cGFuZGVkKVxuICB1c2VMYXlvdXRFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChcbiAgICAgIHNob3VsZFJlc3RvcmVTY3JvbGxPbkV4cGFuZGVkQ2hhbmdlKEJvb2xlYW4oZXhwYW5kZWRSZWYuY3VycmVudCksIEJvb2xlYW4oZXhwYW5kZWQpLCBCb29sZWFuKG1lc3NhZ2VzUmVmLmN1cnJlbnQpKVxuICAgICkge1xuICAgICAgY29uc3Qgc2F2ZWRTY3JvbGxUb3AgPSBsYXN0U2Nyb2xsVG9wUmVmLmN1cnJlbnRcbiAgICAgIG1lc3NhZ2VzUmVmLmN1cnJlbnQhLnNjcm9sbFRvcCA9IHNhdmVkU2Nyb2xsVG9wXG4gICAgfVxuICAgIGV4cGFuZGVkUmVmLmN1cnJlbnQgPSBleHBhbmRlZFxuICB9LCBbZXhwYW5kZWRdKVxuXG4gIGlmIChsb2FkaW5nTWVzc2FnZXMpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPEZhZGUgZmlsbD5cbiAgICAgICAgPExvYWRlciAvPlxuICAgICAgPC9GYWRlPlxuICAgIClcbiAgfVxuXG4gIGNvbnN0IGxhc3RNZXNzYWdlID0gbWVzc2FnZXNbbWVzc2FnZXMubGVuZ3RoIC0gMV1cbiAgY29uc3QgaGFzTWVzc2FnZUxldmVsSW5kaWNhdG9yID0gaGFzTWVzc2FnZUxldmVsU3RyZWFtSW5kaWNhdG9yKGxhc3RNZXNzYWdlPy5pZCwgd2FpdGluZ1Jlc3BvbnNlLCBpc1dyaXRpbmcpXG5cbiAgY29uc3QgbWVzc2FnZXNDb250ZW50ID0gKFxuICAgIDw+XG4gICAgICB7aXNMb2FkaW5nTW9yZU1lc3NhZ2VzICYmIDxMb2FkaW5nVGV4dCB0ZXh0PXt0KCdjaGF0LmxvYWRpbmdNb3JlJyl9IC8+fVxuICAgICAgPD5cbiAgICAgICAge21lc3NhZ2VzLm1hcCgobWVzc2FnZSwgaW5kZXgpID0+IHtcbiAgICAgICAgICBjb25zdCBpc0xhc3RNZXNzYWdlID0gaW5kZXggPT09IG1lc3NhZ2VzLmxlbmd0aCAtIDFcbiAgICAgICAgICBjb25zdCB7IGlzU3RyZWFtaW5nUGxhY2Vob2xkZXIsIGlzU3RyZWFtaW5nIH0gPSByZXNvbHZlQ2hhdExpc3RJdGVtU3RyZWFtaW5nRmxhZ3Moe1xuICAgICAgICAgICAgcm9sZTogbWVzc2FnZS5yb2xlLFxuICAgICAgICAgICAgdXNlcklkOiBtZXNzYWdlLnVzZXIuaWQsXG4gICAgICAgICAgICBtZXNzYWdlSWQ6IG1lc3NhZ2UuaWQsXG4gICAgICAgICAgICBpc0xhc3RNZXNzYWdlLFxuICAgICAgICAgICAgd2FpdGluZ1Jlc3BvbnNlLFxuICAgICAgICAgICAgaXNXcml0aW5nLFxuICAgICAgICAgIH0pXG5cbiAgICAgICAgICAvLyBObyBmaWx0cmFyIGVsIHBsYWNlaG9sZGVyIGRlbCBtZW5zYWplIGVuIHN0cmVhbWluZzogc3UgdGV4dG8gdml2ZVxuICAgICAgICAgIC8vIGVuIGVsIHN0cmVhbWluZ1N0b3JlIHkgYG1lc3NhZ2UubWVzc2FnZWAgZXMgJycgaGFzdGEgZWwgY29tcGxldGUuXG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgc2hvdWxkU2tpcEVtcHR5Q2hhdExpc3RNZXNzYWdlKHtcbiAgICAgICAgICAgICAgaXNTdHJlYW1pbmdQbGFjZWhvbGRlcixcbiAgICAgICAgICAgICAgaXNTdHJlYW1pbmcsXG4gICAgICAgICAgICAgIGF0dGFjaG1lbnRDb3VudDogbWVzc2FnZS5hdHRhY2htZW50cz8ubGVuZ3RoID8/IDAsXG4gICAgICAgICAgICAgIHNvdXJjZUNvdW50OiBtZXNzYWdlLnNvdXJjZXM/Lmxlbmd0aCA/PyAwLFxuICAgICAgICAgICAgICBtZXNzYWdlVGV4dDogbWVzc2FnZS5tZXNzYWdlID8/ICcnLFxuICAgICAgICAgICAgICBwcm9qZWN0TmFtZTogbWVzc2FnZS5wcm9qZWN0Py5uYW1lLFxuICAgICAgICAgICAgICBoYXNBcHByb3ZhbDogQm9vbGVhbihtZXNzYWdlLmFwcHJvdmFsKSxcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbFxuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IG1lc3NhZ2VGZWVkYmFjayA9IHJlc29sdmVEaXNhYmxlRmVlZGJhY2tGcm9tV2FzSGVscGZ1bChtZXNzYWdlPy53YXNIZWxwZnVsKVxuXG4gICAgICAgICAgLy8gS2V5IGVzdGFibGU6IHNvbG8gbWVzc2FnZS5pZCBwYXJhIGV2aXRhciByZW1vdW50IGR1cmFudGUgc3RyZWFtaW5nIChtZXNzYWdlLmRhdGUgcHVlZGUgY2FtYmlhcilcbiAgICAgICAgICBjb25zdCBtZXNzYWdlS2V5ID0gcmVzb2x2ZU1lc3NhZ2VMaXN0SXRlbUtleShtZXNzYWdlLmlkLCBpbmRleClcblxuICAgICAgICAgIGNvbnN0IHR1cm5JZCA9IHJlc29sdmVSZXRyeVR1cm5JZChtZXNzYWdlKVxuICAgICAgICAgIGNvbnN0IHVzZXJNZXNzYWdlRm9yUmV0cnkgPSBmaW5kVXNlck1lc3NhZ2VGb3JSZXRyeShtZXNzYWdlcywgbWVzc2FnZSlcbiAgICAgICAgICBjb25zdCBjYW5SZXRyeSA9IGNhblJldHJ5QXNzaXN0YW50TWVzc2FnZSh7XG4gICAgICAgICAgICBoYXNVc2VyTWVzc2FnZUZvclJldHJ5OiBCb29sZWFuKHVzZXJNZXNzYWdlRm9yUmV0cnkpLFxuICAgICAgICAgICAgaXNTdHJlYW1pbmcsXG4gICAgICAgICAgICBpc0Vycm9yOiBCb29sZWFuKG1lc3NhZ2UuaXNFcnJvciksXG4gICAgICAgICAgICBoYXNBcHByb3ZhbDogQm9vbGVhbihtZXNzYWdlLmFwcHJvdmFsKSxcbiAgICAgICAgICAgIGlzRnJvbnRlbmRDYW5jZWxsZWQ6IG1lc3NhZ2UuaXNGcm9udGVuZENhbmNlbGxlZCxcbiAgICAgICAgICAgIGlzQ2FuY2VsbGVkOiBtZXNzYWdlLmlzX2NhbmNlbGxlZCxcbiAgICAgICAgICAgIHR1cm5JZCxcbiAgICAgICAgICB9KVxuXG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxNZXNzYWdlSXRlbVxuICAgICAgICAgICAgICB7Li4ubWVzc2FnZX1cbiAgICAgICAgICAgICAga2V5PXttZXNzYWdlS2V5fVxuICAgICAgICAgICAgICBhdXRoVXNlcj17YXV0aFVzZXJ9XG4gICAgICAgICAgICAgIGhhbmRsZVNlbGVjdE9wdGlvbj17aGFuZGxlU2VsZWN0T3B0aW9ufVxuICAgICAgICAgICAgICBoYW5kbGVGZWVkYmFjaz17aGFuZGxlRmVlZGJhY2t9XG4gICAgICAgICAgICAgIGhhbmRsZUFwcHJvdmFsRGVjaXNpb249e2hhbmRsZUFwcHJvdmFsRGVjaXNpb259XG4gICAgICAgICAgICAgIGhhbmRsZVN1Z2dlc3Rpb25DbGljaz17aGFuZGxlU3VnZ2VzdGlvbkNsaWNrfVxuICAgICAgICAgICAgICBoYW5kbGVSZXRyeT17Y2FuUmV0cnkgPyAoKSA9PiByZXRyeU1lc3NhZ2UobWVzc2FnZSkgOiB1bmRlZmluZWR9XG4gICAgICAgICAgICAgIGhhc1NlbGVjdGVkU3VnZ2VzdGlvbj17ISFzZWxlY3RlZFN1Z2dlc3Rpb25NZXNzYWdlSWRzW21lc3NhZ2UuaWRdfVxuICAgICAgICAgICAgICBkaXNhYmxlRmVlZGJhY2s9e21lc3NhZ2VGZWVkYmFja31cbiAgICAgICAgICAgICAgaXNTdHJlYW1pbmc9e2lzU3RyZWFtaW5nfVxuICAgICAgICAgICAgICBpc0xhc3RNZXNzYWdlPXtpc0xhc3RNZXNzYWdlfVxuICAgICAgICAgICAgICBleHBhbmRlZD17ZXhwYW5kZWR9XG4gICAgICAgICAgICAgIHN0cmVhbUFjdGl2aXR5PXtpc1N0cmVhbWluZyA/IHN0cmVhbUxvYWRpbmdEaXNwbGF5IDogbnVsbH1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgKVxuICAgICAgICB9KX1cbiAgICAgIDwvPlxuICAgICAge3N0cmVhbUxvYWRpbmdEaXNwbGF5ICYmXG4gICAgICAgIHNob3VsZFNob3dHbG9iYWxTdHJlYW1Mb2FkaW5nSW5kaWNhdG9yKGhhc01lc3NhZ2VMZXZlbEluZGljYXRvciwgc3RyZWFtTG9hZGluZ0Rpc3BsYXkpICYmIChcbiAgICAgICAgICA8U0NMb2FkaW5nTWVzc2FnZXNDb2x1bW4+XG4gICAgICAgICAgICA8QWdlbnRBY3Rpdml0eUluZGljYXRvciBhY3Rpdml0eT17c3RyZWFtTG9hZGluZ0Rpc3BsYXl9IC8+XG4gICAgICAgICAgPC9TQ0xvYWRpbmdNZXNzYWdlc0NvbHVtbj5cbiAgICAgICAgKX1cbiAgICAgIHsvKiBFc3BhY2lvIHF1ZSBsZSBwZXJtaXRlIGEgbGEgcHJlZ3VudGEgc3ViaXIgYWwgdG9wZS4gQWx0dXJhIG1hbmVqYWRhXG4gICAgICAgICAgaW1wZXJhdGl2YW1lbnRlIGRlc2RlIGBzZXRTcGFjZXJIZWlnaHRgOyBhcnJhbmNhIGVuIDAuICovfVxuICAgICAgPFNDVHVyblNwYWNlciByZWY9e3NwYWNlckVsUmVmfSBhcmlhLWhpZGRlbj1cInRydWVcIiAvPlxuICAgIDwvPlxuICApXG5cbiAgcmV0dXJuIChcbiAgICAvLyBTaSBlbCB1c3VhcmlvIG11ZXZlIGVsIHNjcm9sbCBhYm9ydGFtb3MgbGEgYW5pbWFjacOzbiB5IHNvbHRhbW9zIGVsIHR1cm5vOlxuICAgIC8vIG5vIGxlIHBlbGVhbW9zIGVsIGNvbnRyb2wgZGVsIGNvbnRlbmVkb3IuXG4gICAgPFNDTWVzc2FnZXNPdXRlciBvbldoZWVsPXtoYW5kbGVNZXNzYWdlc091dGVyV2hlZWx9IG9uVG91Y2hTdGFydD17aGFuZGxlVXNlclNjcm9sbEludGVudH0+XG4gICAgICA8U0NNZXNzYWdlc0dyYWRpZW50VG9wICRzaG93PXtzaG93VG9wR3JhZGllbnR9IGFyaWEtaGlkZGVuPVwidHJ1ZVwiIC8+XG4gICAgICA8U0NNZXNzYWdlc1Njcm9sbCByZWY9e21lc3NhZ2VzUmVmfSBvblNjcm9sbD17aGFuZGxlU2Nyb2xsVG9Cb3R0b219PlxuICAgICAgICA8U0NNZXNzYWdlc0lubmVyICRza2lwRW50ZXI9e3NraXBFbnRlckFuaW1hdGlvbn0+e21lc3NhZ2VzQ29udGVudH08L1NDTWVzc2FnZXNJbm5lcj5cbiAgICAgIDwvU0NNZXNzYWdlc1Njcm9sbD5cblxuICAgICAgPFNDTWVzc2FnZXNHcmFkaWVudEJvdHRvbSAkc2hvdz17c2hvd0JvdHRvbUdyYWRpZW50fSBhcmlhLWhpZGRlbj1cInRydWVcIiAvPlxuXG4gICAgICB7c2hvd1Njcm9sbFRvQm90dG9tICYmIChcbiAgICAgICAgPFNjcm9sbFRvQm90dG9tQnV0dG9uIHR5cGU9XCJidXR0b25cIiBvbkNsaWNrPXtoYW5kbGVDbGlja1Njcm9sbFRvQm90dG9tfT5cbiAgICAgICAgICA8U0NTY3JvbGxJY29uU3dhcCAkdmlzaWJsZT17aXNXcml0aW5nfSBhcmlhLWhpZGRlbj5cbiAgICAgICAgICAgIDxTQ1dyaXRpbmdEb3RzPlxuICAgICAgICAgICAgICA8c3BhbiAvPlxuICAgICAgICAgICAgICA8c3BhbiAvPlxuICAgICAgICAgICAgICA8c3BhbiAvPlxuICAgICAgICAgICAgPC9TQ1dyaXRpbmdEb3RzPlxuICAgICAgICAgIDwvU0NTY3JvbGxJY29uU3dhcD5cbiAgICAgICAgICA8U0NTY3JvbGxJY29uU3dhcCAkdmlzaWJsZT17IWlzV3JpdGluZ30gYXJpYS1oaWRkZW4+XG4gICAgICAgICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD17MTJ9IGhlaWdodD17MTJ9IGZpbGw9XCJub25lXCI+XG4gICAgICAgICAgICAgIDxwYXRoXG4gICAgICAgICAgICAgICAgc3Ryb2tlPVwiIzIwMjAyMFwiXG4gICAgICAgICAgICAgICAgc3Ryb2tlTGluZWNhcD1cInJvdW5kXCJcbiAgICAgICAgICAgICAgICBzdHJva2VMaW5lam9pbj1cInJvdW5kXCJcbiAgICAgICAgICAgICAgICBzdHJva2VXaWR0aD17MS41fVxuICAgICAgICAgICAgICAgIGQ9XCJNNiAuNzV2MTAuNU0uNzUgNiA2IDExLjI1IDExLjI1IDZcIlxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgPC9TQ1Njcm9sbEljb25Td2FwPlxuICAgICAgICA8L1Njcm9sbFRvQm90dG9tQnV0dG9uPlxuICAgICAgKX1cbiAgICA8L1NDTWVzc2FnZXNPdXRlcj5cbiAgKVxufVxuXG5leHBvcnQgY29uc3QgQ2hhdEFJTWVzc2FnZXMgPSBSZWFjdC5tZW1vKENoYXRBSU1lc3NhZ2VzSW5uZXIpXG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFD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
1108
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSZWFjdCIsIm1lbW8iLCJ1c2VDYWxsYmFjayIsInVzZUVmZmVjdCIsInVzZUxheW91dEVmZmVjdCIsInVzZVJlZiIsInVzZVN0YXRlIiwiY3JlYXRlRWxlbWVudCIsIl9jcmVhdGVFbGVtZW50IiwiQXR0YWNobWVudENhcmQiLCJBcHByb3ZhbEJveCIsIkF0dGFjaG1lbnRQcmV2aWV3TW9kYWwiLCJBdHRhY2htZW50Q2FyZEF1ZGlvIiwiTWFpYVN0cmVhbWRvd24iLCJDaGF0SGlzdG9yeVJvbGUiLCJyZW5kZXJUZXh0V2l0aE1lbnRpb25zIiwiaGFzSW5saW5lTWFya2VycyIsImlzTWFpYWtlckFnZW50IiwidXNlVXNlciIsInVzZVQiLCJ1c2VDaGF0TWFuYWdlciIsInVzZVNtb290aFN0cmVhbVRleHQiLCJ1c2VTdHJlYW1pbmdNZXNzYWdlIiwiTG9hZGluZ1RleHQiLCJBZ2VudEFjdGl2aXR5SW5kaWNhdG9yIiwiUmVhc29uaW5nQmxvY2siLCJzaG91bGRTdHJlYW1OYXJyYXRpb25JblRpbWVsaW5lIiwiUmVhc29uaW5nVGltZWxpbmUiLCJTQ1RpbWVsaW5lSW5kaWNhdG9yIiwiQ29udGV4dENvbXBhY3RlZE5vdGljZSIsImlzU3RyZWFtaW5nUGxhY2Vob2xkZXJNZXNzYWdlSWQiLCJyZXNvbHZlU3RyZWFtTG9hZGluZ0Rpc3BsYXkiLCJyZXNvbHZlUmV0cnlUdXJuSWQiLCJmaW5kVXNlck1lc3NhZ2VGb3JSZXRyeSIsInVzZVJlYXNvbmluZ1RyYWNlIiwiTG9hZGVyIiwiRmFkZSIsInBhdGNoTWFpYVBhbmVsU2Vzc2lvbiIsInJlYWRNYWlhUGFuZWxTZXNzaW9uIiwiTWVzc2FnZUZyb21Vc2VyIiwiTWVzc2FnZUZyb21PdGhlciIsIk1lc3NhZ2VDb250ZW50RnJvbVVzZXIiLCJNZXNzYWdlQ29udGVudEZyb21PdGhlciIsIk1lc3NhZ2VGZWVkYmFjayIsIlNDQ0FJTWVzc2FnZVdyYXBwZXIiLCJTY3JvbGxUb0JvdHRvbUJ1dHRvbiIsIlNDU2Nyb2xsSWNvblN3YXAiLCJTQ1dyaXRpbmdEb3RzIiwiU0NNZXNzYWdlc091dGVyIiwiU0NNZXNzYWdlc1Njcm9sbCIsIlNDTWVzc2FnZXNJbm5lciIsIlNDVHVyblNwYWNlciIsIlNDT3B0aW9uc0xpc3QiLCJTQ09wdGlvbkl0ZW0iLCJTQ01lc3NhZ2VJdGVtV3JhcHBlciIsIlNDTWVzc2FnZUl0ZW1Jbm5lciIsIlNDQXR0YWNobWVudHNSb3ciLCJTQ0FwcHJvdmFsQWN0aW9uc0NvbHVtbiIsIlNDTG9hZGluZ01lc3NhZ2VzQ29sdW1uIiwiU0NNZXNzYWdlc0dyYWRpZW50VG9wIiwiU0NNZXNzYWdlc0dyYWRpZW50Qm90dG9tIiwidXNlR2xvYmFsQ29udGV4dCIsIkVudGl0eUxpbmtDdXN0b21MaW5rIiwiZ2V0RW50aXR5TGlua1dyYXBwZXJDbGFzc05hbWUiLCJDaGF0QUlTdWdnZXN0aW9ucyIsIkNoYXRBSUNyZWF0ZUFnZW50QWN0aW9ucyIsIkVWRU5UUyIsInVzZUV2ZW50IiwiZG93bmxvYWRGaWxlRnJvbVVybCIsImNhbk9wZW5BdHRhY2htZW50UHJldmlldyIsImNhblJldHJ5QXNzaXN0YW50TWVzc2FnZSIsImNvbXB1dGVEaXN0YW5jZUZyb21Cb3R0b20iLCJjb21wdXRlUmVtb3ZhYmxlVHVyblNwYWNlIiwiY29tcHV0ZVN5bmNlZFR1cm5TcGFjZXJIZWlnaHQiLCJjb21wdXRlVHVyblNjcm9sbER1cmF0aW9uTXMiLCJjb21wdXRlVHVyblNjcm9sbFRhcmdldFRvcCIsImNvdW50VXNlck1lc3NhZ2VBdHRhY2htZW50cyIsImVhc2VPdXRFeHBvU2Nyb2xsUHJvZ3Jlc3MiLCJleHRyYWN0RmVlZGJhY2tTZXNzaW9uSWQiLCJmaW5kTGFzdFF1ZXN0aW9uSWQiLCJoYXNJbml0aWFsVXNlck1lc3NhZ2VJbkxpc3QiLCJoYXNNZXNzYWdlTGV2ZWxTdHJlYW1JbmRpY2F0b3IiLCJpc0FjdGl2ZVN0cmVhbWluZ1N0YXRlIiwiaXNBbnN3ZXJPclF1ZXN0aW9uQ2hhdE1lc3NhZ2VJZCIsImlzQXBwcm92YWxDaGF0TWVzc2FnZSIsImlzQXNzaXN0YW50Q2hhdE1lc3NhZ2UiLCJpc0F1ZGlvQXR0YWNobWVudCIsImlzQ3VycmVudFVzZXJNZXNzYWdlIiwiaXNOZXdDaGF0TWVzc2FnZUV2ZW50IiwiaXNSZXRyeVN1Z2dlc3Rpb25TZWxlY3Rpb24iLCJyZXNvbHZlQXR0YWNobWVudERvd25sb2FkQmxvYlN0cmF0ZWd5IiwicmVzb2x2ZUF0dGFjaG1lbnREb3dubG9hZEZpbGVOYW1lIiwicmVzb2x2ZUF0dGFjaG1lbnREb3dubG9hZFVybCIsInJlc29sdmVDaGF0TGlzdEl0ZW1TdHJlYW1pbmdGbGFncyIsInJlc29sdmVEaXNhYmxlRmVlZGJhY2tGcm9tV2FzSGVscGZ1bCIsInJlc29sdmVNZXNzYWdlQXR0YWNobWVudHMiLCJyZXNvbHZlUmV0cnlBdHRhY2htZW50c0Zyb21Vc2VyTWVzc2FnZSIsInNob3VsZEF1dG9TY3JvbGxPbk1lc3NhZ2VzQ2hhbmdlIiwic2hvdWxkSGlkZUFzc2lzdGFudFN1Z2dlc3Rpb25zIiwic2hvdWxkSGlkZUVtcHR5U3RyZWFtaW5nQm9keSIsInNob3VsZElnbm9yZVN1Z2dlc3Rpb25DbGljayIsInNob3VsZE9wZW5NZXNzYWdlT3B0aW9uIiwic2hvdWxkUmVsZWFzZVR1cm5TcGFjZSIsInNob3VsZFJlbmRlckFzc2lzdGFudEZlZWRiYWNrIiwic2hvdWxkUmVuZGVyQXNzaXN0YW50U3VnZ2VzdGlvbnMiLCJzaG91bGRSZW5kZXJDaGFuZ2VQcm9qZWN0TWVzc2FnZSIsInNob3VsZFJlbmRlckNyZWF0ZUFnZW50QWN0aW9ucyIsInNob3VsZFJlbmRlck1lc3NhZ2VUZXh0Qm9keSIsInNob3VsZFNob3dBcHByb3ZhbEFjdGlvbnMiLCJzaG91bGRTaG93Qm90dG9tU2Nyb2xsR3JhZGllbnQiLCJzaG91bGRTaG93R2xvYmFsU3RyZWFtTG9hZGluZ0luZGljYXRvciIsInNob3VsZFNob3dNZXNzYWdlQXR0YWNobWVudHNSb3ciLCJzaG91bGRTaG93U2Nyb2xsVG9Cb3R0b20iLCJzaG91bGRTaG93U3RyZWFtQWN0aXZpdHlJbmRpY2F0b3IiLCJzaG91bGRTaG93U3RyZWFtaW5nTWVzc2FnZUJvZHkiLCJzaG91bGRTaG93VG9wU2Nyb2xsR3JhZGllbnQiLCJzaG91bGRTa2lwRW1wdHlDaGF0TGlzdE1lc3NhZ2UiLCJzaG91bGRTa2lwVHVyblNjcm9sbEFuaW1hdGlvbiIsInNob3VsZFJ1blN0cmVhbVR1cm5TeW5jRWZmZWN0Iiwic2hvdWxkVXBkYXRlU3BhY2VySGVpZ2h0IiwiYnVpbGRTbW9vdGhTdHJlYW1UZXh0T3B0aW9ucyIsImNvbXB1dGVNZWFzdXJlVHVybkxheW91dCIsImRldGVjdEp1c3RGaW5pc2hlZExvYWRpbmdNZXNzYWdlcyIsInByb2Nlc3NDaGF0TWVzc2FnZXNTY3JvbGxGcmFtZSIsInJlYWRTbW9vdGhTdHJlYW1XaW5kb3dGbGFncyIsInJlc29sdmVSZXNlcnZlVHVyblNwYWNlUGxhbiIsInJlc29sdmVTY3JvbGxUb0JvdHRvbVRhcmdldFRvcCIsInJlc29sdmVDb250YWluZXJBdEJvdHRvbSIsInJlc29sdmVDcmVhdGVBZ2VudEFjdGlvbnNBZ2VudElkIiwicmVzb2x2ZUZlZWRiYWNrUHJvcHNGb3JDYW5jZWxsZWQiLCJyZXNvbHZlTGFzdFVzZXJNZXNzYWdlRm9yQXR0YWNobWVudHMiLCJyZXNvbHZlTWVzc2FnZUxpc3RJdGVtS2V5IiwicmVzb2x2ZVBlbmRpbmdTY3JvbGxUb3BGcm9tU2Vzc2lvbiIsInJlc29sdmVSZWFzb25pbmdUcmFjZUhvb2tJZCIsInJlc29sdmVTY3JvbGxPblBhcmVudE1vZGUiLCJyZXNvbHZlU3RyZWFtaW5nTWVzc2FnZUhvb2tJZCIsInJlc29sdmVTdHJlYW1pbmdSYXdUZXh0IiwicmVzb2x2ZVN0cmVhbWluZ1RleHRIb29rSWQiLCJyZXNvbHZlU3VnZ2VzdGlvbkFuYWx5dGljc0FnZW50VHlwZSIsInNob3VsZEFwcGx5UGVuZGluZ1Njcm9sbFJlc3RvcmUiLCJzaG91bGRDbGVhckxhc3RSZXNlcnZlZFF1ZXN0aW9uIiwic2hvdWxkQ2xlYXJTY3JvbGxSZXN0b3JlV2l0aG91dENoYXQiLCJzaG91bGRJbml0aWFsaXplQ2hhdCIsInNob3VsZFJlbmRlck1lbnRpb25JbmxpbmVOb2RlcyIsInNob3VsZFJlc3RvcmVTY3JvbGxPbkV4cGFuZGVkQ2hhbmdlIiwic2hvdWxkUnVuU2Vzc2lvbkNhY2hlU2Nyb2xsVG9Cb3R0b20iLCJzaG91bGRTY2hlZHVsZVR1cm5TcGFjZVJlc2VydmF0aW9uIiwic2hvdWxkU2Nyb2xsVG9Cb3R0b21BZnRlckxvYWQiLCJzaG91bGRTa2lwTWVzc2FnZXNTY3JvbGxFZmZlY3QiLCJzaG91bGRVcGRhdGVTY3JvbGxBZmZvcmRhbmNlc09uTG9hZEVuZCIsImpzeCIsIl9qc3giLCJGcmFnbWVudCIsIl9GcmFnbWVudCIsImpzeHMiLCJfanN4cyIsIk1lc3NhZ2VXcmFwcGVyIiwiX3JlZiIsImlzQ3VycmVudFVzZXIiLCJjaGlsZHJlbiIsInByb3BzIiwiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwiX2V4Y2x1ZGVkIiwiTWVzc2FnZUNvbXBvbmVudCIsIl9vYmplY3RTcHJlYWQiLCJNZXNzYWdlQ29udGVudFdyYXBwZXIiLCJfcmVmMiIsIl9leGNsdWRlZDIiLCJNZXNzYWdlQ29udGVudENvbXBvbmVudCIsIk1lc3NhZ2VPcHRpb25zIiwiX3JlZjMiLCJvcHRpb25zIiwiaGFuZGxlU2VsZWN0T3B0aW9uIiwiX3VzZVN0YXRlIiwiX3VzZVN0YXRlMiIsIl9zbGljZWRUb0FycmF5Iiwic2VsZWN0ZWRPcHRpb24iLCJzZXRTZWxlY3RlZE9wdGlvbiIsImhhbmRsZVNlbGVjdCIsIm9wdGlvbiIsIm1hcCIsIiRoYXNTZWxlY3Rpb24iLCIkZGltbWVkIiwiaWQiLCJvbkNsaWNrIiwibmFtZSIsIlN0cmVhbWluZ01lc3NhZ2VCb2R5IiwiX3Byb3BzJHN1Z2dlc3Rpb25zJGxlIiwiX3Byb3BzJHN1Z2dlc3Rpb25zIiwic3RyZWFtaW5nVGV4dCIsImlzU3RyZWFtaW5nIiwibWVzc2FnZUlkIiwicmF3VGV4dCIsIm1lc3NhZ2UiLCJ3aW5GbGFncyIsImRpc3BsYXlUZXh0IiwiY3JlYXRlQWdlbnRBY3Rpb25zQWdlbnRJZCIsImNyZWF0ZUFnZW50Rm9sbG93VXAiLCJoYXNNZW50aW9ucyIsIm1lbnRpb25Ob2RlcyIsImlzRnJvbnRlbmRDYW5jZWxsZWQiLCJjbGFzc05hbWUiLCJzdHlsZSIsImRpc3BsYXkiLCJ2YXJpYW50IiwiY29tcG9uZW50cyIsImEiLCJpc0FuaW1hdGluZyIsImlzQXNzaXN0YW50IiwiaXNFcnJvciIsImFwcHJvdmFsIiwib25SZXRyeSIsImNvbnRlbnQiLCJzb3VyY2VzIiwiaGFuZGxlRmVlZGJhY2tDbGljayIsImRpc2FibGVGZWVkYmFjayIsInN1Z2dlc3Rpb25zTGVuZ3RoIiwic3VnZ2VzdGlvbnMiLCJsZW5ndGgiLCJvblNlbGVjdFN1Z2dlc3Rpb24iLCJzdWdnZXN0aW9uIiwiaGFuZGxlU3VnZ2VzdGlvbkNsaWNrIiwiZGlzYWJsZWQiLCJzdWdnZXN0aW9uc0Rpc2FibGVkIiwiaGlkZGVuIiwiaXNMYXN0TWVzc2FnZSIsImFnZW50SWQiLCJNZXNzYWdlSXRlbSIsIl9yZWY0IiwiX3Byb3BzJHJlYXNvbmluZyIsIl9wcm9wcyRwcm9qZWN0TWV0YWRhdCIsInVzZXIiLCJhdXRoVXNlciIsImlzQ2hhbmdlUHJvamVjdCIsImhhbmRsZUZlZWRiYWNrIiwiaGFuZGxlQXBwcm92YWxEZWNpc2lvbiIsImhhbmRsZVJldHJ5Iiwicm9sZSIsImF0dGFjaG1lbnRzIiwiYXBwcm92YWxTdGF0dXMiLCJoYXNTZWxlY3RlZFN1Z2dlc3Rpb24iLCJzdHJlYW1BY3Rpdml0eSIsIl91c2VTdGF0ZTMiLCJfdXNlU3RhdGU0IiwicHJldmlld0F0dGFjaG1lbnQiLCJzZXRQcmV2aWV3QXR0YWNobWVudCIsInRvU3RyaW5nIiwiaXNTdHJlYW1pbmdQbGFjZWhvbGRlciIsIkJvb2xlYW4iLCJpc0FjdGl2ZVN0cmVhbWluZyIsImhhc1N0cmVhbVRleHQiLCJyZWFzb25pbmdUcmFjZSIsIl91c2VSZWFzb25pbmdUcmFjZSIsImxpdmVDb21wYWN0aW9uIiwiY29tcGFjdGlvbiIsInN0cmVhbU5hcnJhdGlvbkluVGltZWxpbmUiLCJzdGVwcyIsInNob3dTdHJlYW1pbmdCb2R5Iiwic2hvd0FjdGl2aXR5SW5kaWNhdG9yIiwibWVzc2FnZUF0dGFjaG1lbnRzIiwiaGFuZGxlQXR0YWNobWVudENsaWNrIiwiYXR0YWNobWVudCIsImhhbmRsZUNsb3NlUHJldmlldyIsImhhbmRsZUF0dGFjaG1lbnREb3dubG9hZCIsIl9yZWY1IiwiX2FzeW5jVG9HZW5lcmF0b3IiLCJfcmVnZW5lcmF0b3JSdW50aW1lIiwibWFyayIsIl9jYWxsZWUiLCJmaWxlTmFtZSIsImZpbGVVcmwiLCJibG9iVXJsIiwiZG93bmxvYWRTdHJhdGVneSIsImRvd25sb2FkZWRGaWxlIiwibGluayIsIl90Iiwid3JhcCIsIl9jb250ZXh0IiwicHJldiIsIm5leHQiLCJmaWxlIiwidHlwZSIsInNlbnQiLCJVUkwiLCJjcmVhdGVPYmplY3RVUkwiLCJGaWxlIiwiYWJydXB0IiwiZG9jdW1lbnQiLCJocmVmIiwiZG93bmxvYWQiLCJib2R5IiwiYXBwZW5kQ2hpbGQiLCJjbGljayIsInNldFRpbWVvdXQiLCJyZW1vdmVDaGlsZCIsInJldm9rZU9iamVjdFVSTCIsImNvbnNvbGUiLCJlcnJvciIsInN0b3AiLCJfeCIsImFwcGx5IiwiYXJndW1lbnRzIiwiaGFzRmVlZGJhY2siLCIkaXNBc3Npc3RhbnQiLCJtZXNzYWdlRXh0cmFDb250ZW50IiwiZmVlZGJhY2siLCJ0cmFjZSIsInJlYXNvbmluZyIsImluZGV4IiwiY29uY2F0IiwicG9zaXRpb25JbmRleCIsIm9uRG93bmxvYWQiLCJtZXNzYWdlVGV4dCIsImF0dGFjaG1lbnRDb3VudCIsImFjdGl2aXR5IiwiY29tcGFjdCIsImFjdGlvbnMiLCJwZW5kaW5nX2FjdGlvbnMiLCJzdGF0dXMiLCJvbkFwcHJvdmUiLCJ0aHJlYWRJZHMiLCJtZXRhZGF0YSIsInVuZGVmaW5lZCIsIm9uUmVqZWN0IiwiaXNQcm9qZWN0RGVsZXRlZCIsInByb2plY3RNZXRhZGF0YSIsImlzX2RlbGV0ZWQiLCJpc0V4cGFuZGVkIiwiZXhwYW5kZWQiLCJoaXRsSW5zdGFuY2VJZCIsIm9yaWdpbmFsX3RocmVhZF9pZCIsIndhcm5pbmdNZXNzYWdlIiwid2FybmluZ19tZXNzYWdlIiwibWFudWFsQXBwcm92YWxEZXRlY3RlZCIsIm1hbnVhbF9hcHByb3ZhbF9kZXRlY3RlZCIsImlzT3BlbiIsIm9uQ2xvc2UiLCJDaGF0QUlNZXNzYWdlc0lubmVyIiwiX3JlZjYiLCJ1c2VySW5pdGlhbE1lc3NhZ2UiLCJpbml0aWFsQ2hhdElkIiwib25FcnJvciIsIm9uU2VuZE1lc3NhZ2VSZWFkeSIsIm9uU2Nyb2xsVG9Cb3R0b20iLCJhZ2VudHMiLCJfdXNlVCIsInQiLCJfdXNlR2xvYmFsQ29udGV4dCIsImlzV2ViU2VhcmNoQWN0aXZlIiwiaXNEZWVwU2VhcmNoQWN0aXZlIiwiYWdlbnQiLCJldmVudCIsIm1lc3NhZ2VzUmVmIiwiY2hhdEluaXRpYWxpemVkUmVmIiwiaXNMb2FkaW5nTW9yZVJlZiIsInNjcm9sbFRocmVzaG9sZFJlZiIsImxhc3RTY3JvbGxUb3BSZWYiLCJzaG93U2Nyb2xsVG9Cb3R0b21SZWYiLCJzaG93VG9wR3JhZGllbnRSZWYiLCJzaG93Qm90dG9tR3JhZGllbnRSZWYiLCJzY3JvbGxSYWZSZWYiLCJhbmNob3JlZFR1cm5JZFJlZiIsInNwYWNlckVsUmVmIiwic3BhY2VySGVpZ2h0UmVmIiwidHVyblNjcm9sbFJhZlJlZiIsIndhc0xvYWRpbmdNZXNzYWdlc1JlZiIsImxhc3RTY3JvbGxlZFNlc3Npb25SZWYiLCJwZW5kaW5nU2Nyb2xsUmVzdG9yZVJlZiIsInNjcm9sbFBlcnNpc3RUaW1lclJlZiIsIl91c2VTdGF0ZTUiLCJfdXNlU3RhdGU2Iiwic2hvd1Njcm9sbFRvQm90dG9tIiwic2V0U2hvd1Njcm9sbFRvQm90dG9tIiwiX3VzZVN0YXRlNyIsIl91c2VTdGF0ZTgiLCJzaG93VG9wR3JhZGllbnQiLCJzZXRTaG93VG9wR3JhZGllbnQiLCJfdXNlU3RhdGU5IiwiX3VzZVN0YXRlMCIsInNob3dCb3R0b21HcmFkaWVudCIsInNldFNob3dCb3R0b21HcmFkaWVudCIsIl91c2VTdGF0ZTEiLCJfdXNlU3RhdGUxMCIsInNlbGVjdGVkU3VnZ2VzdGlvbk1lc3NhZ2VJZHMiLCJzZXRTZWxlY3RlZFN1Z2dlc3Rpb25NZXNzYWdlSWRzIiwiX3VzZUNoYXRNYW5hZ2VyIiwiY2hhdElkIiwibWVzc2FnZXMiLCJsb2FkaW5nTWVzc2FnZXMiLCJpc0xvYWRpbmdNb3JlTWVzc2FnZXMiLCJ3YWl0aW5nUmVzcG9uc2UiLCJpc1dyaXRpbmciLCJsb2FkaW5nTWVzc2FnZSIsImFjdGl2ZUxvYWRpbmdzIiwic2VuZE1lc3NhZ2UiLCJyZXRyeU1lc3NhZ2UiLCJjaGFuZ2VQcm9qZWN0IiwiaW5pdGlhbGl6ZUNoYXQiLCJoYW5kbGVTY3JvbGwiLCJzdG9wR2VuZXJhdGlvbiIsInVwZGF0ZVNjcm9sbEFmZm9yZGFuY2VzIiwiZWwiLCJjdXJyZW50Iiwic2Nyb2xsVG9wIiwic2Nyb2xsSGVpZ2h0IiwiY2xpZW50SGVpZ2h0IiwiZGlzdGFuY2VGcm9tQm90dG9tIiwic2hvdWxkU2hvdyIsIm5leHRUb3BHcmFkaWVudCIsIm5leHRCb3R0b21HcmFkaWVudCIsInNjcm9sbFRvQm90dG9tUmFmIiwib3B0cyIsIl9vcHRzJGRlbGF5TXMiLCJkZWxheU1zIiwicnVuIiwicmVxdWVzdEFuaW1hdGlvbkZyYW1lIiwiY2FuY2VsVHVyblNjcm9sbCIsImNhbmNlbEFuaW1hdGlvbkZyYW1lIiwiYW5pbWF0ZVNjcm9sbFRvIiwidG9wIiwiZnJvbSIsImRpc3RhbmNlIiwiZHVyYXRpb24iLCJzdGFydGVkQXQiLCJwZXJmb3JtYW5jZSIsIm5vdyIsInN0ZXAiLCJwcm9ncmVzcyIsIk1hdGgiLCJtaW4iLCJlYXNlZCIsInNldFNwYWNlckhlaWdodCIsImhlaWdodCIsImNsZWFyVHVyblNwYWNlIiwiZHJhaW5UdXJuU3BhY2UiLCJyZWxlYXNlVHVyblNwYWNlIiwiaGFuZGxlVXNlclNjcm9sbEludGVudCIsIm1lYXN1cmVUdXJuIiwicXVlc3Rpb25JZCIsInNwYWNlckVsIiwicXVlc3Rpb25FbCIsInF1ZXJ5U2VsZWN0b3IiLCJjb250YWluZXJUb3AiLCJnZXRCb3VuZGluZ0NsaWVudFJlY3QiLCJfY29tcHV0ZU1lYXN1cmVUdXJuTGEiLCJxdWVzdGlvblRvcCIsImNvbnRlbnRCb3R0b20iLCJ0dXJuSGVpZ2h0IiwicmVzZXJ2ZVR1cm5TcGFjZSIsIm1lYXN1cmVkIiwidGFyZ2V0U2Nyb2xsVG9wIiwicGxhbiIsImN1cnJlbnRTY3JvbGxUb3AiLCJraW5kIiwic3BhY2VySGVpZ2h0Iiwic3luY1R1cm5TcGFjZSIsImhhbmRsZUNsaWNrU2Nyb2xsVG9Cb3R0b20iLCJoYW5kbGVTY3JvbGxUb0JvdHRvbSIsImUiLCJjb250YWluZXIiLCJjdXJyZW50VGFyZ2V0Iiwic2Nyb2xsRnJhbWUiLCJsYXN0U2Nyb2xsVG9wIiwic2Nyb2xsVGhyZXNob2xkIiwiYW5jaG9yZWRUdXJuSWQiLCJuZXh0U2Nyb2xsVGhyZXNob2xkIiwic2hvdWxkRHJhaW5UdXJuU3BhY2UiLCJzaG91bGRTY2hlZHVsZVNjcm9sbFBlcnNpc3QiLCJ3aW5kb3ciLCJjbGVhclRpbWVvdXQiLCJzY3JvbGxTZXNzaW9uSWQiLCJzaG91bGROb3RpZnlTY3JvbGxUb0JvdHRvbSIsInNlbmRNZXNzYWdlUmVmIiwic3RvcEdlbmVyYXRpb25SZWYiLCJvblNlbmRNZXNzYWdlUmVhZHlSZWYiLCJzZW5kTWVzc2FnZVByb3h5UmVmIiwiZmFxSWQiLCJhZ2VudFN1Z2dlc3Rpb25JZCIsIm1lbnRpb25zIiwiZnVhSWQiLCJzY0lkIiwic3RvcEdlbmVyYXRpb25Qcm94eVJlZiIsIm1lc3NhZ2VzRGF0YVJlZiIsInNlbGVjdGVkU3VnZ2VzdGlvbk1lc3NhZ2VJZHNSZWYiLCJjdXJyZW50TWVzc2FnZXMiLCJpc01hcmtldHBsYWNlR2xvYmFsQWdlbnQiLCJhaUNoYXRTdWdnZXN0ZWRBbnN3ZXIiLCJhZ2VudF90eXBlIiwiX2RlZmluZVByb3BlcnR5IiwidGFyZ2V0TWVzc2FnZSIsImZpbmQiLCJtc2ciLCJsYXN0VXNlck1lc3NhZ2UiLCJmaWx0ZXIiLCJVU0VSIiwiYXQiLCJyYWZJZCIsInRpY2siLCJsYXN0UmVzZXJ2ZWRRdWVzdGlvblJlZiIsImxhc3RNZXNzYWdlSWRSZWYiLCJsYXN0TWVzc2FnZXNMZW5ndGhSZWYiLCJfbWVzc2FnZXMkaWQiLCJfbWVzc2FnZXMiLCJfbGFzdE1lc3NhZ2UkaWQiLCJsYXN0TWVzc2FnZSIsImxhc3RJZCIsInByZXZJZCIsInByZXZMZW4iLCJpc05ld01lc3NhZ2UiLCJzY3JvbGxEZWNpc2lvbiIsImlzQXRCb3R0b20iLCJpc0Fuc3dlck9yUXVlc3Rpb24iLCJpc0FwcHJvdmFsIiwiaGFzSW5pdGlhbE1lc3NhZ2UiLCJtZXNzYWdlc0xlbmd0aCIsInByZXZNZXNzYWdlc0xlbmd0aCIsIl9tZXNzYWdlcyRpZDIiLCJfbWVzc2FnZXMyIiwianVzdEZpbmlzaGVkTG9hZGluZyIsImF0dGFjaG1lbnRzQ291bnQiLCJzdHJlYW1Mb2FkaW5nRGlzcGxheSIsImhhc0F0dGFjaG1lbnRzIiwiaXNTY3JvbGxPblBhcmVudCIsIl9zZXNzaW9uJHNjcm9sbFNlc3NpbyIsIl9zZXNzaW9uJHNjcm9sbFRvcCIsInNlc3Npb24iLCJwZW5kaW5nU2Nyb2xsVG9wIiwiZXhwYW5kZWRSZWYiLCJzYXZlZFNjcm9sbFRvcCIsImZpbGwiLCJoYXNNZXNzYWdlTGV2ZWxJbmRpY2F0b3IiLCJtZXNzYWdlc0NvbnRlbnQiLCJ0ZXh0IiwiX21lc3NhZ2UkYXR0YWNobWVudHMkIiwiX21lc3NhZ2UkYXR0YWNobWVudHMiLCJfbWVzc2FnZSRzb3VyY2VzJGxlbmciLCJfbWVzc2FnZSRzb3VyY2VzIiwiX21lc3NhZ2UkbWVzc2FnZSIsIl9tZXNzYWdlJHByb2plY3QiLCJfcmVzb2x2ZUNoYXRMaXN0SXRlbVMiLCJ1c2VySWQiLCJzb3VyY2VDb3VudCIsInByb2plY3ROYW1lIiwicHJvamVjdCIsImhhc0FwcHJvdmFsIiwibWVzc2FnZUZlZWRiYWNrIiwid2FzSGVscGZ1bCIsIm1lc3NhZ2VLZXkiLCJ0dXJuSWQiLCJ1c2VyTWVzc2FnZUZvclJldHJ5IiwiY2FuUmV0cnkiLCJoYXNVc2VyTWVzc2FnZUZvclJldHJ5IiwiaXNDYW5jZWxsZWQiLCJpc19jYW5jZWxsZWQiLCJrZXkiLCJyZWYiLCIkc2Nyb2xsT25QYXJlbnQiLCJvbldoZWVsIiwib25Ub3VjaFN0YXJ0IiwiJHNob3ciLCJvblNjcm9sbCIsIiR2aXNpYmxlIiwieG1sbnMiLCJ3aWR0aCIsInN0cm9rZSIsInN0cm9rZUxpbmVjYXAiLCJzdHJva2VMaW5lam9pbiIsInN0cm9rZVdpZHRoIiwiZCIsIkNoYXRBSU1lc3NhZ2VzIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvbW9sZWN1bGVzL0NoYXRBSU1lc3NhZ2VzL0NoYXRBSU1lc3NhZ2VzLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBpbXBvcnQvbm8tZXh0cmFuZW91cy1kZXBlbmRlbmNpZXMgKi9cbi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9pbmRlbnQgKi9cbi8qIGVzbGludC1kaXNhYmxlIHJlYWN0L25vLXVuc3RhYmxlLW5lc3RlZC1jb21wb25lbnRzICovXG4vKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tc2hhZG93ICovXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1uZXN0ZWQtdGVybmFyeSAqL1xuLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSAqL1xuLyogZXNsaW50LWRpc2FibGUgbm8tdW5kZWYgKi9cbi8qIGVzbGludC1kaXNhYmxlIHJlYWN0L2Z1bmN0aW9uLWNvbXBvbmVudC1kZWZpbml0aW9uICovXG4vKiBlc2xpbnQtZGlzYWJsZSByZWFjdC9yZXF1aXJlLWRlZmF1bHQtcHJvcHMgKi9cbi8qIGVzbGludC1kaXNhYmxlIGpzeC1hMTF5L2NsaWNrLWV2ZW50cy1oYXZlLWtleS1ldmVudHMgKi9cbi8qIGVzbGludC1kaXNhYmxlIGpzeC1hMTF5L25vLXN0YXRpYy1lbGVtZW50LWludGVyYWN0aW9ucyAqL1xuaW1wb3J0IFJlYWN0LCB7IEZDLCBtZW1vLCBSZWFjdE5vZGUsIHVzZUNhbGxiYWNrLCB1c2VFZmZlY3QsIHVzZUxheW91dEVmZmVjdCwgdXNlUmVmLCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0J1xuXG5pbXBvcnQgeyBBdHRhY2htZW50Q2FyZCB9IGZyb20gJy4uLy4uL2F0b21zL0F0dGFjaG1lbnRDYXJkL0F0dGFjaG1lbnRDYXJkJ1xuaW1wb3J0IHsgQXBwcm92YWxCb3ggfSBmcm9tICcuLi8uLi9hdG9tcy9BcHByb3ZhbEJveC9BcHByb3ZhbEJveCdcbmltcG9ydCB7IEF0dGFjaG1lbnRQcmV2aWV3TW9kYWwgfSBmcm9tICcuLi8uLi9hdG9tcy9BdHRhY2htZW50UHJldmlld01vZGFsJ1xuaW1wb3J0IHsgQXR0YWNobWVudENhcmRBdWRpbyB9IGZyb20gJy4uLy4uL2F0b21zL0F0dGFjaG1lbnRDYXJkL0F0dGFjaG1lbnRDYXJkQXVkaW8nXG5pbXBvcnQgeyBNYWlhU3RyZWFtZG93biB9IGZyb20gJy4uLy4uL2F0b21zL01haWFTdHJlYW1kb3duJ1xuaW1wb3J0IHR5cGUgeyBNYWlhU3RyZWFtZG93blByb3BzIH0gZnJvbSAnLi4vLi4vYXRvbXMvTWFpYVN0cmVhbWRvd24nXG5pbXBvcnQgeyBNQUlBTWVzc2FnZVByb3BzIH0gZnJvbSAnLi4vLi4vYXRvbXMvTUFJQU1lc3NhZ2UvTUFJQU1lc3NhZ2UuaW50ZXJmYWNlcydcbmltcG9ydCB7IENoYXRNZXNzYWdlLCBDaGF0SGlzdG9yeVJvbGUgfSBmcm9tICcuLi8uLi8uLi90eXBlcy9DaGF0J1xuaW1wb3J0IHsgcmVuZGVyVGV4dFdpdGhNZW50aW9ucywgaGFzSW5saW5lTWFya2VycyB9IGZyb20gJy4uLy4uLy4uL3V0aWxzL3JlbmRlckNvbnRleHRNZW50aW9ucydcblxuaW1wb3J0IHsgaXNNYWlha2VyQWdlbnQgfSBmcm9tICcuLi8uLi8uLi91dGlscy9hZ2VudERpc3BsYXlOYW1lJ1xuaW1wb3J0IHsgQ09SVXNlciwgdXNlVXNlciB9IGZyb20gJy4uLy4uLy4uL2NvbnRleHQvY29yLXVzZXInXG5cbmltcG9ydCB7IHVzZVQgfSBmcm9tICcuLi8uLi8uLi9ob29rcy91c2VUJ1xuaW1wb3J0IHsgdXNlQ2hhdE1hbmFnZXIgfSBmcm9tICcuLi8uLi8uLi9ob29rcy91c2VDaGF0TWFuYWdlci91c2VDaGF0TWFuYWdlcidcbmltcG9ydCB7IHVzZVNtb290aFN0cmVhbVRleHQgfSBmcm9tICcuLi8uLi8uLi9ob29rcy91c2VTbW9vdGhTdHJlYW1UZXh0J1xuaW1wb3J0IHsgdXNlU3RyZWFtaW5nTWVzc2FnZSB9IGZyb20gJy4uLy4uLy4uL2hvb2tzL3VzZVN0cmVhbWluZ01lc3NhZ2UnXG5cbmltcG9ydCB7IExvYWRpbmdUZXh0IH0gZnJvbSAnLi4vLi4vYXRvbXMvTG9hZGluZ1RleHQnXG5pbXBvcnQgeyBBZ2VudEFjdGl2aXR5SW5kaWNhdG9yIH0gZnJvbSAnLi4vLi4vYXRvbXMvQWdlbnRBY3Rpdml0eUluZGljYXRvcidcbmltcG9ydCB7IFJlYXNvbmluZ0Jsb2NrIH0gZnJvbSAnLi4vLi4vYXRvbXMvUmVhc29uaW5nQmxvY2svUmVhc29uaW5nQmxvY2snXG5pbXBvcnQgeyBzaG91bGRTdHJlYW1OYXJyYXRpb25JblRpbWVsaW5lIH0gZnJvbSAnLi4vLi4vYXRvbXMvUmVhc29uaW5nQmxvY2svcmVhc29uaW5nTGl2ZU5hcnJhdGlvbidcbmltcG9ydCB7IFJlYXNvbmluZ1RpbWVsaW5lIH0gZnJvbSAnLi4vLi4vYXRvbXMvUmVhc29uaW5nQmxvY2svUmVhc29uaW5nVGltZWxpbmUnXG5pbXBvcnQgeyBTQ1RpbWVsaW5lSW5kaWNhdG9yIH0gZnJvbSAnLi4vLi4vYXRvbXMvUmVhc29uaW5nQmxvY2svUmVhc29uaW5nQmxvY2suc3R5bGVzJ1xuaW1wb3J0IHsgQ29udGV4dENvbXBhY3RlZE5vdGljZSB9IGZyb20gJy4uLy4uL2F0b21zL0NvbnRleHRDb21wYWN0ZWROb3RpY2UvQ29udGV4dENvbXBhY3RlZE5vdGljZSdcbmltcG9ydCB0eXBlIHsgU3RyZWFtQWN0aXZpdHkgfSBmcm9tICcuLi8uLi8uLi90eXBlcy9zdHJlYW1BY3Rpdml0eSdcbmltcG9ydCB7IGlzU3RyZWFtaW5nUGxhY2Vob2xkZXJNZXNzYWdlSWQsIHJlc29sdmVTdHJlYW1Mb2FkaW5nRGlzcGxheSB9IGZyb20gJy4uLy4uLy4uL3V0aWxzL3N0cmVhbUFjdGl2aXR5TWVzc2FnZXMnXG5pbXBvcnQgeyByZXNvbHZlUmV0cnlUdXJuSWQsIGZpbmRVc2VyTWVzc2FnZUZvclJldHJ5IH0gZnJvbSAnLi4vLi4vLi4vdXRpbHMvcmV0cnlDb21wbGV0aW9uJ1xuaW1wb3J0IHsgdXNlUmVhc29uaW5nVHJhY2UgfSBmcm9tICcuLi8uLi8uLi9ob29rcy91c2VSZWFzb25pbmdUcmFjZSdcbmltcG9ydCB7IExvYWRlciB9IGZyb20gJy4uLy4uL2F0b21zL0xvYWRlcidcbmltcG9ydCB7IEZhZGUgfSBmcm9tICcuLi8uLi9hdG9tcy9GYWRlJ1xuaW1wb3J0IHsgcGF0Y2hNYWlhUGFuZWxTZXNzaW9uLCByZWFkTWFpYVBhbmVsU2Vzc2lvbiB9IGZyb20gJy4uLy4uLy4uL3N0b3JlL21haWFQYW5lbFNlc3Npb25QZXJzaXN0ZW5jZSdcblxuaW1wb3J0IHsgUHJvamVjdCB9IGZyb20gJy4uLy4uLy4uL3R5cGVzL1Byb2plY3QnXG5cbmltcG9ydCB7IE1lc3NhZ2VGcm9tVXNlciwgTWVzc2FnZUZyb21PdGhlciwgTWVzc2FnZUNvbnRlbnRGcm9tVXNlciwgTWVzc2FnZUNvbnRlbnRGcm9tT3RoZXIgfSBmcm9tICcuL3N0eWxlcydcbmltcG9ydCB7IE1lc3NhZ2VGZWVkYmFjayB9IGZyb20gJy4uL01lc3NhZ2VGZWVkYmFjaydcbmltcG9ydCB7XG4gIFNDQ0FJTWVzc2FnZVdyYXBwZXIsXG4gIFNjcm9sbFRvQm90dG9tQnV0dG9uLFxuICBTQ1Njcm9sbEljb25Td2FwLFxuICBTQ1dyaXRpbmdEb3RzLFxuICBTQ01lc3NhZ2VzT3V0ZXIsXG4gIFNDTWVzc2FnZXNTY3JvbGwsXG4gIFNDTWVzc2FnZXNJbm5lcixcbiAgU0NUdXJuU3BhY2VyLFxuICBTQ09wdGlvbnNMaXN0LFxuICBTQ09wdGlvbkl0ZW0sXG4gIFNDTWVzc2FnZUl0ZW1XcmFwcGVyLFxuICBTQ01lc3NhZ2VJdGVtSW5uZXIsXG4gIFNDQXR0YWNobWVudHNSb3csXG4gIFNDQXBwcm92YWxBY3Rpb25zQ29sdW1uLFxuICBTQ0xvYWRpbmdNZXNzYWdlc0NvbHVtbixcbiAgU0NNZXNzYWdlc0dyYWRpZW50VG9wLFxuICBTQ01lc3NhZ2VzR3JhZGllbnRCb3R0b20sXG59IGZyb20gJy4vbmV3U3R5bGVzJ1xuaW1wb3J0IHsgRmVlZGJhY2sgfSBmcm9tICcuLi9NZXNzYWdlRmVlZGJhY2svTWVzc2FnZUZlZWRiYWNrJ1xuaW1wb3J0IHsgdXNlR2xvYmFsQ29udGV4dCB9IGZyb20gJy4uLy4uLy4uL2NvbnRleHQvZ2xvYmFsLWNvbnRleHQnXG5pbXBvcnQgeyBBZ2VudCB9IGZyb20gJy4uLy4uLy4uL3R5cGVzL2FnZW50J1xuaW1wb3J0IHsgQXR0YWNobWVudEZpbGUgfSBmcm9tICcuLi9DaGF0Rm9vdGVyL0NoYXRGb290ZXInXG5pbXBvcnQgeyBDb250ZXh0TWVudGlvbiB9IGZyb20gJy4uLy4uLy4uL3R5cGVzL2NvbnRleHRNZW50aW9uJ1xuaW1wb3J0IHsgRW50aXR5TGlua0N1c3RvbUxpbmssIGdldEVudGl0eUxpbmtXcmFwcGVyQ2xhc3NOYW1lIH0gZnJvbSAnLi4vLi4vLi4vdXRpbHMvZW50aXR5TGlua1JlbmRlcidcbmltcG9ydCB7IENoYXRBSVN1Z2dlc3Rpb25zIH0gZnJvbSAnLi9DaGF0QUlTdWdnZXN0aW9ucydcbmltcG9ydCB7IENoYXRBSUNyZWF0ZUFnZW50QWN0aW9ucyB9IGZyb20gJy4vQ2hhdEFJQ3JlYXRlQWdlbnRBY3Rpb25zJ1xuaW1wb3J0IHsgRVZFTlRTLCB1c2VFdmVudCB9IGZyb20gJy4uLy4uLy4uL2hvb2tzL3VzZUV2ZW50J1xuaW1wb3J0IHsgZG93bmxvYWRGaWxlRnJvbVVybCB9IGZyb20gJy4uLy4uLy4uL3V0aWxzL2ZpbGVEb3dubG9hZEhlbHBlcidcbmltcG9ydCB7XG4gIGNhbk9wZW5BdHRhY2htZW50UHJldmlldyxcbiAgY2FuUmV0cnlBc3Npc3RhbnRNZXNzYWdlLFxuICBjb21wdXRlRGlzdGFuY2VGcm9tQm90dG9tLFxuICBjb21wdXRlUmVtb3ZhYmxlVHVyblNwYWNlLFxuICBjb21wdXRlU3luY2VkVHVyblNwYWNlckhlaWdodCxcbiAgY29tcHV0ZVR1cm5TY3JvbGxEdXJhdGlvbk1zLFxuICBjb21wdXRlVHVyblNjcm9sbFRhcmdldFRvcCxcbiAgY291bnRVc2VyTWVzc2FnZUF0dGFjaG1lbnRzLFxuICBlYXNlT3V0RXhwb1Njcm9sbFByb2dyZXNzLFxuICBleHRyYWN0RmVlZGJhY2tTZXNzaW9uSWQsXG4gIGZpbmRMYXN0UXVlc3Rpb25JZCxcbiAgaGFzSW5pdGlhbFVzZXJNZXNzYWdlSW5MaXN0LFxuICBoYXNNZXNzYWdlTGV2ZWxTdHJlYW1JbmRpY2F0b3IsXG4gIGlzQWN0aXZlU3RyZWFtaW5nU3RhdGUsXG4gIGlzQW5zd2VyT3JRdWVzdGlvbkNoYXRNZXNzYWdlSWQsXG4gIGlzQXBwcm92YWxDaGF0TWVzc2FnZSxcbiAgaXNBc3Npc3RhbnRDaGF0TWVzc2FnZSxcbiAgaXNBdWRpb0F0dGFjaG1lbnQsXG4gIGlzQ3VycmVudFVzZXJNZXNzYWdlLFxuICBpc05ld0NoYXRNZXNzYWdlRXZlbnQsXG4gIGlzUmV0cnlTdWdnZXN0aW9uU2VsZWN0aW9uLFxuICByZXNvbHZlQXR0YWNobWVudERvd25sb2FkQmxvYlN0cmF0ZWd5LFxuICByZXNvbHZlQXR0YWNobWVudERvd25sb2FkRmlsZU5hbWUsXG4gIHJlc29sdmVBdHRhY2htZW50RG93bmxvYWRVcmwsXG4gIHJlc29sdmVDaGF0TGlzdEl0ZW1TdHJlYW1pbmdGbGFncyxcbiAgcmVzb2x2ZURpc2FibGVGZWVkYmFja0Zyb21XYXNIZWxwZnVsLFxuICByZXNvbHZlTWVzc2FnZUF0dGFjaG1lbnRzLFxuICByZXNvbHZlUmV0cnlBdHRhY2htZW50c0Zyb21Vc2VyTWVzc2FnZSxcbiAgc2hvdWxkQXV0b1Njcm9sbE9uTWVzc2FnZXNDaGFuZ2UsXG4gIHNob3VsZEhpZGVBc3Npc3RhbnRTdWdnZXN0aW9ucyxcbiAgc2hvdWxkSGlkZUVtcHR5U3RyZWFtaW5nQm9keSxcbiAgc2hvdWxkSWdub3JlU3VnZ2VzdGlvbkNsaWNrLFxuICBzaG91bGRPcGVuTWVzc2FnZU9wdGlvbixcbiAgc2hvdWxkUmVsZWFzZVR1cm5TcGFjZSxcbiAgc2hvdWxkUmVuZGVyQXNzaXN0YW50RmVlZGJhY2ssXG4gIHNob3VsZFJlbmRlckFzc2lzdGFudFN1Z2dlc3Rpb25zLFxuICBzaG91bGRSZW5kZXJDaGFuZ2VQcm9qZWN0TWVzc2FnZSxcbiAgc2hvdWxkUmVuZGVyQ3JlYXRlQWdlbnRBY3Rpb25zLFxuICBzaG91bGRSZW5kZXJNZXNzYWdlVGV4dEJvZHksXG4gIHNob3VsZFNob3dBcHByb3ZhbEFjdGlvbnMsXG4gIHNob3VsZFNob3dCb3R0b21TY3JvbGxHcmFkaWVudCxcbiAgc2hvdWxkU2hvd0dsb2JhbFN0cmVhbUxvYWRpbmdJbmRpY2F0b3IsXG4gIHNob3VsZFNob3dNZXNzYWdlQXR0YWNobWVudHNSb3csXG4gIHNob3VsZFNob3dTY3JvbGxUb0JvdHRvbSxcbiAgc2hvdWxkU2hvd1N0cmVhbUFjdGl2aXR5SW5kaWNhdG9yLFxuICBzaG91bGRTaG93U3RyZWFtaW5nTWVzc2FnZUJvZHksXG4gIHNob3VsZFNob3dUb3BTY3JvbGxHcmFkaWVudCxcbiAgc2hvdWxkU2tpcEVtcHR5Q2hhdExpc3RNZXNzYWdlLFxuICBzaG91bGRTa2lwVHVyblNjcm9sbEFuaW1hdGlvbixcbiAgc2hvdWxkUnVuU3RyZWFtVHVyblN5bmNFZmZlY3QsXG4gIHNob3VsZFVwZGF0ZVNwYWNlckhlaWdodCxcbiAgYnVpbGRTbW9vdGhTdHJlYW1UZXh0T3B0aW9ucyxcbiAgY29tcHV0ZU1lYXN1cmVUdXJuTGF5b3V0LFxuICBkZXRlY3RKdXN0RmluaXNoZWRMb2FkaW5nTWVzc2FnZXMsXG4gIHByb2Nlc3NDaGF0TWVzc2FnZXNTY3JvbGxGcmFtZSxcbiAgcmVhZFNtb290aFN0cmVhbVdpbmRvd0ZsYWdzLFxuICByZXNvbHZlUmVzZXJ2ZVR1cm5TcGFjZVBsYW4sXG4gIHJlc29sdmVTY3JvbGxUb0JvdHRvbVRhcmdldFRvcCxcbiAgcmVzb2x2ZUNvbnRhaW5lckF0Qm90dG9tLFxuICByZXNvbHZlQ3JlYXRlQWdlbnRBY3Rpb25zQWdlbnRJZCxcbiAgcmVzb2x2ZUZlZWRiYWNrUHJvcHNGb3JDYW5jZWxsZWQsXG4gIHJlc29sdmVMYXN0VXNlck1lc3NhZ2VGb3JBdHRhY2htZW50cyxcbiAgcmVzb2x2ZU1lc3NhZ2VMaXN0SXRlbUtleSxcbiAgcmVzb2x2ZVBlbmRpbmdTY3JvbGxUb3BGcm9tU2Vzc2lvbixcbiAgcmVzb2x2ZVJlYXNvbmluZ1RyYWNlSG9va0lkLFxuICByZXNvbHZlU2Nyb2xsT25QYXJlbnRNb2RlLFxuICByZXNvbHZlU3RyZWFtaW5nTWVzc2FnZUhvb2tJZCxcbiAgcmVzb2x2ZVN0cmVhbWluZ1Jhd1RleHQsXG4gIHJlc29sdmVTdHJlYW1pbmdUZXh0SG9va0lkLFxuICByZXNvbHZlU3VnZ2VzdGlvbkFuYWx5dGljc0FnZW50VHlwZSxcbiAgc2hvdWxkQXBwbHlQZW5kaW5nU2Nyb2xsUmVzdG9yZSxcbiAgc2hvdWxkQ2xlYXJMYXN0UmVzZXJ2ZWRRdWVzdGlvbixcbiAgc2hvdWxkQ2xlYXJTY3JvbGxSZXN0b3JlV2l0aG91dENoYXQsXG4gIHNob3VsZEluaXRpYWxpemVDaGF0LFxuICBzaG91bGRSZW5kZXJNZW50aW9uSW5saW5lTm9kZXMsXG4gIHNob3VsZFJlc3RvcmVTY3JvbGxPbkV4cGFuZGVkQ2hhbmdlLFxuICBzaG91bGRSdW5TZXNzaW9uQ2FjaGVTY3JvbGxUb0JvdHRvbSxcbiAgc2hvdWxkU2NoZWR1bGVUdXJuU3BhY2VSZXNlcnZhdGlvbixcbiAgc2hvdWxkU2Nyb2xsVG9Cb3R0b21BZnRlckxvYWQsXG4gIHNob3VsZFNraXBNZXNzYWdlc1Njcm9sbEVmZmVjdCxcbiAgc2hvdWxkVXBkYXRlU2Nyb2xsQWZmb3JkYW5jZXNPbkxvYWRFbmQsXG59IGZyb20gJy4vQ2hhdEFJTWVzc2FnZXMuaGVscGVycydcblxudHlwZSBDaGF0QUlNZXNzYWdlc1Byb3BzID0ge1xuICB1c2VySW5pdGlhbE1lc3NhZ2U6IHtcbiAgICBtZXNzYWdlOiBzdHJpbmdcbiAgICBhdHRhY2htZW50czogQXR0YWNobWVudEZpbGVbXVxuICAgIGZhcUlkPzogc3RyaW5nXG4gICAgYWdlbnRTdWdnZXN0aW9uSWQ/OiBzdHJpbmdcbiAgICBtZW50aW9ucz86IENvbnRleHRNZW50aW9uW11cbiAgICBmdWFJZD86IHN0cmluZ1xuICAgIHNjSWQ/OiBzdHJpbmdcbiAgfVxuICBpbml0aWFsQ2hhdElkOiBzdHJpbmcgfCBudWxsXG4gIG9uRXJyb3I6ICgpID0+IHZvaWRcbiAgb25TZW5kTWVzc2FnZVJlYWR5PzogKFxuICAgIHNlbmRNZXNzYWdlOiAoXG4gICAgICBtZXNzYWdlOiBzdHJpbmcsXG4gICAgICBhdHRhY2htZW50cz86IEF0dGFjaG1lbnRGaWxlW10sXG4gICAgICBmYXFJZD86IHN0cmluZyxcbiAgICAgIGFnZW50U3VnZ2VzdGlvbklkPzogc3RyaW5nLFxuICAgICAgbWVudGlvbnM/OiBDb250ZXh0TWVudGlvbltdLFxuICAgICAgZnVhSWQ/OiBzdHJpbmcsXG4gICAgICBzY0lkPzogc3RyaW5nXG4gICAgKSA9PiB2b2lkLFxuICAgIHN0b3BHZW5lcmF0aW9uOiAoKSA9PiB2b2lkLFxuICAgIGlzU3RyZWFtaW5nOiBib29sZWFuLFxuICAgIGlzV3JpdGluZzogYm9vbGVhblxuICApID0+IHZvaWRcbiAgaXNEaXNhYmxlZD86IGJvb2xlYW5cbiAgb25TY3JvbGxUb0JvdHRvbT86ICgpID0+IHZvaWRcbiAgYXR0YWNobWVudHM/OiBBdHRhY2htZW50RmlsZVtdXG4gIGFnZW50cz86IEFnZW50W11cbiAgZXhwYW5kZWQ/OiBib29sZWFuXG59XG5cbnR5cGUgTWVzc2FnZUl0ZW1Qcm9wcyA9IENoYXRNZXNzYWdlICYge1xuICBhdXRoVXNlcjogQ09SVXNlclxuICBoYW5kbGVTZWxlY3RPcHRpb246IChvcHRpb246IFByb2plY3QpID0+IHZvaWRcbiAgaGFuZGxlU3VnZ2VzdGlvbkNsaWNrOiAobWVzc2FnZUlkOiBzdHJpbmcsIHN1Z2dlc3Rpb246IHN0cmluZykgPT4gdm9pZFxuICBoYXNTZWxlY3RlZFN1Z2dlc3Rpb24/OiBib29sZWFuXG4gIGhhbmRsZUZlZWRiYWNrOiAoZmVlZGJhY2s6IEZlZWRiYWNrLCBjaGF0TWVzc2FnZUlkOiBzdHJpbmcpID0+IHZvaWRcbiAgaGFuZGxlQXBwcm92YWxEZWNpc2lvbjogKFxuICAgIHRocmVhZElkczogc3RyaW5nW10sXG4gICAgZGVjaXNpb246ICdhcHByb3ZlJyB8ICdyZWplY3QnLFxuICAgIGVkaXRlZEFjdGlvbnM/OiBBcnJheTx7IHRvb2xfbmFtZTogc3RyaW5nOyBhcmdzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB9PixcbiAgICBtZXRhZGF0YT86IHsgdG9vbF9ncm91cF9zbHVnczogc3RyaW5nW10gfVxuICApID0+IHZvaWRcbiAgaGFuZGxlUmV0cnk/OiAoKSA9PiB2b2lkXG4gIGRpc2FibGVGZWVkYmFjaz86IEZlZWRiYWNrIHwgbnVsbFxuICBzb3VyY2VzPzogYW55XG4gIGF0dGFjaG1lbnRzPzogQXR0YWNobWVudEZpbGVbXVxuICBpc1N0cmVhbWluZz86IGJvb2xlYW5cbiAgaXNMYXN0TWVzc2FnZT86IGJvb2xlYW5cbiAgZXhwYW5kZWQ/OiBib29sZWFuXG4gIHN0cmVhbUFjdGl2aXR5PzogU3RyZWFtQWN0aXZpdHkgfCBudWxsXG59XG5cbmludGVyZmFjZSBNZXNzYWdlV3JhcHBlclByb3BzIHtcbiAgaXNDdXJyZW50VXNlcjogYm9vbGVhblxuICBjaGlsZHJlbjogUmVhY3ROb2RlXG4gICdkYXRhLW1lc3NhZ2UtaWQnPzogc3RyaW5nXG4gIGhhc0ZlZWRiYWNrPzogYm9vbGVhblxufVxuXG50eXBlIE1lc3NhZ2VDb250ZW50V3JhcHBlclByb3BzID0gTUFJQU1lc3NhZ2VQcm9wcyAmIHtcbiAgaXNDdXJyZW50VXNlcjogYm9vbGVhblxuICBpc0Vycm9yPzogYm9vbGVhblxuICBpc0NoYW5nZVByb2plY3Q/OiBib29sZWFuXG59XG5cbmNvbnN0IE1lc3NhZ2VXcmFwcGVyOiBGQzxNZXNzYWdlV3JhcHBlclByb3BzPiA9ICh7IGlzQ3VycmVudFVzZXIsIGNoaWxkcmVuLCAuLi5wcm9wcyB9KSA9PiB7XG4gIGNvbnN0IE1lc3NhZ2VDb21wb25lbnQgPSBpc0N1cnJlbnRVc2VyID8gTWVzc2FnZUZyb21Vc2VyIDogTWVzc2FnZUZyb21PdGhlclxuICByZXR1cm4gPE1lc3NhZ2VDb21wb25lbnQgey4uLnByb3BzfT57Y2hpbGRyZW59PC9NZXNzYWdlQ29tcG9uZW50PlxufVxuXG5jb25zdCBNZXNzYWdlQ29udGVudFdyYXBwZXI6IEZDPE1lc3NhZ2VDb250ZW50V3JhcHBlclByb3BzPiA9ICh7IGlzQ3VycmVudFVzZXIsIC4uLnByb3BzIH0pID0+IHtcbiAgY29uc3QgTWVzc2FnZUNvbnRlbnRDb21wb25lbnQgPSBpc0N1cnJlbnRVc2VyID8gTWVzc2FnZUNvbnRlbnRGcm9tVXNlciA6IE1lc3NhZ2VDb250ZW50RnJvbU90aGVyXG4gIHJldHVybiA8TWVzc2FnZUNvbnRlbnRDb21wb25lbnQgey4uLnByb3BzfSAvPlxufVxuXG5mdW5jdGlvbiBNZXNzYWdlT3B0aW9ucyh7XG4gIG9wdGlvbnMsXG4gIGhhbmRsZVNlbGVjdE9wdGlvbixcbn06IHtcbiAgb3B0aW9uczogUHJvamVjdFtdIHwgbnVsbFxuICBoYW5kbGVTZWxlY3RPcHRpb246IChvcHRpb246IFByb2plY3QpID0+IHZvaWRcbn0pIHtcbiAgY29uc3QgW3NlbGVjdGVkT3B0aW9uLCBzZXRTZWxlY3RlZE9wdGlvbl0gPSB1c2VTdGF0ZTxQcm9qZWN0IHwgbnVsbD4obnVsbClcblxuICBjb25zdCBoYW5kbGVTZWxlY3QgPSAob3B0aW9uOiBQcm9qZWN0KSA9PiB7XG4gICAgaWYgKCFzaG91bGRPcGVuTWVzc2FnZU9wdGlvbihzZWxlY3RlZE9wdGlvbikpIHJldHVyblxuICAgIHNldFNlbGVjdGVkT3B0aW9uKG9wdGlvbilcbiAgICBoYW5kbGVTZWxlY3RPcHRpb24ob3B0aW9uKVxuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8U0NPcHRpb25zTGlzdD5cbiAgICAgIHsob3B0aW9ucyB8fCBbXSkubWFwKG9wdGlvbiA9PiAoXG4gICAgICAgIDxTQ09wdGlvbkl0ZW1cbiAgICAgICAgICAkaGFzU2VsZWN0aW9uPXshIXNlbGVjdGVkT3B0aW9ufVxuICAgICAgICAgICRkaW1tZWQ9eyEhc2VsZWN0ZWRPcHRpb24gJiYgc2VsZWN0ZWRPcHRpb24/LmlkICE9PSBvcHRpb24uaWR9XG4gICAgICAgICAgb25DbGljaz17KCkgPT4gaGFuZGxlU2VsZWN0KG9wdGlvbil9XG4gICAgICAgICAga2V5PXtvcHRpb24uaWR9XG4gICAgICAgID5cbiAgICAgICAgICB7b3B0aW9uLm5hbWV9XG4gICAgICAgIDwvU0NPcHRpb25JdGVtPlxuICAgICAgKSl9XG4gICAgPC9TQ09wdGlvbnNMaXN0PlxuICApXG59XG5cbi8qKiBTb2xvIGVzdGUgY29tcG9uZW50ZSByZS1yZW5kZXJpemEgY3VhbmRvIGNhbWJpYSBlbCB0ZXh0byBlbiBzdHJlYW1pbmcgKGxlZSBkZWwgY29udGV4dCkuICovXG5jb25zdCBTdHJlYW1pbmdNZXNzYWdlQm9keSA9IG1lbW8oXG4gIChwcm9wczoge1xuICAgIG1lc3NhZ2U6IHN0cmluZ1xuICAgIGlzU3RyZWFtaW5nOiBib29sZWFuXG4gICAgaXNDdXJyZW50VXNlcjogYm9vbGVhblxuICAgIGlzQXNzaXN0YW50OiBib29sZWFuXG4gICAgaXNGcm9udGVuZENhbmNlbGxlZD86IGJvb2xlYW5cbiAgICBhcHByb3ZhbD86IE1lc3NhZ2VJdGVtUHJvcHNbJ2FwcHJvdmFsJ11cbiAgICBpc0Vycm9yPzogYm9vbGVhblxuICAgIHNvdXJjZXM/OiBNZXNzYWdlSXRlbVByb3BzWydzb3VyY2VzJ11cbiAgICBzdWdnZXN0aW9ucz86IHN0cmluZ1tdIHwgbnVsbFxuICAgIGNyZWF0ZUFnZW50Rm9sbG93VXA/OiB7IGFnZW50SWQ6IHN0cmluZyB9IHwgbnVsbFxuICAgIGhhbmRsZUZlZWRiYWNrQ2xpY2s6IChmOiBGZWVkYmFjaykgPT4gdm9pZFxuICAgIGRpc2FibGVGZWVkYmFjazogRmVlZGJhY2sgfCBudWxsXG4gICAgb25SZXRyeT86ICgpID0+IHZvaWRcbiAgICBoYW5kbGVTdWdnZXN0aW9uQ2xpY2s6IChtZXNzYWdlSWQ6IHN0cmluZywgc3VnZ2VzdGlvbjogc3RyaW5nKSA9PiB2b2lkXG4gICAgc3VnZ2VzdGlvbnNEaXNhYmxlZD86IGJvb2xlYW5cbiAgICBtZXNzYWdlSWQ6IHN0cmluZ1xuICAgIGlzTGFzdE1lc3NhZ2U/OiBib29sZWFuXG4gIH0pID0+IHtcbiAgICAvLyBUZXh0byBkZWwgc3RyZWFtOiBzb2xvIHNlIGxlZSBkZWwgc3RvcmUgY3VhbmRvIGVzdGUgbWVuc2FqZSBlcyBlbFxuICAgIC8vIHF1ZSBlc3TDoSBlbiBzdHJlYW1pbmcuIHVzZVN5bmNFeHRlcm5hbFN0b3JlIGHDrXNsYSBlbCByZS1yZW5kZXIgYVxuICAgIC8vIGVzdGUgY29tcG9uZW50ZSwgc2luIHRvY2FyIGVsIHJlc3RvIGRlbCDDoXJib2wuXG4gICAgY29uc3Qgc3RyZWFtaW5nVGV4dCA9IHVzZVN0cmVhbWluZ01lc3NhZ2UocmVzb2x2ZVN0cmVhbWluZ01lc3NhZ2VIb29rSWQocHJvcHMuaXNTdHJlYW1pbmcsIHByb3BzLm1lc3NhZ2VJZCkpXG4gICAgY29uc3QgcmF3VGV4dCA9IHJlc29sdmVTdHJlYW1pbmdSYXdUZXh0KHByb3BzLmlzU3RyZWFtaW5nLCBzdHJlYW1pbmdUZXh0LCBwcm9wcy5tZXNzYWdlKVxuICAgIC8vIFNtb290aCBzdHJlYW1pbmc6IGRlc2Fjb3BsYSBsYSBjYWRlbmNpYSBkZWwgYmFja2VuZCBkZWwgcmVuZGVyLlxuICAgIC8vIER1cmFudGUgZWwgc3RyZWFtaW5nIGxpYmVyYSBjaGFycyBhIHJpdG1vIGNvbnN0YW50ZSB2w61hIHJBRjsgY3VhbmRvXG4gICAgLy8gdGVybWluYSwgbXVlc3RyYSBlbCB0ZXh0byBmaW5hbCBhbCBpbnN0YW50ZSAoc2luIGFuaW1hY2nDs24gcmVzaWR1YWwpLlxuICAgIC8vIExvcyBkZWZhdWx0cyBkZWwgaG9vayBzZSBhanVzdGFyb24gZW1ww61yaWNhbWVudGUgZW4gc3RhZ2luZzsgYXVuIGFzw61cbiAgICAvLyBzZSBleHBvbmVuIGZsYWdzIGRlIHJ1bnRpbWUgKHdpbmRvdy4qKSBwYXJhIHBvZGVyIHR1bmVhciBzaW4gcmVjb21waWxhclxuICAgIC8vIHNpIGFsZ8O6biBiYWNrZW5kIHByZXNlbnRhIHVuYSBjYWRlbmNpYSBtdXkgZGlzdGludGEgZW4gcHJvZHVjY2nDs24uXG4gICAgLy8gICB3aW5kb3cuc3RyZWFtQWRhcHQgPSBmYWxzZSAgICAgIC8vIGRlc2FjdGl2YSBhZGFwdGFjacOzbiBhbCBiYWNrZW5kXG4gICAgLy8gICB3aW5kb3cuc3RyZWFtQnVmZmVyTXMgPSA2MDAgICAgIC8vIGNvbGNow7NuIG9iamV0aXZvIChtcylcbiAgICAvLyAgIHdpbmRvdy5zdHJlYW1MYWdNcyA9IDQ1MCAgICAgICAgLy8gbGFnIG3DoXhpbW8gYmFzZSAobXMpXG4gICAgLy8gICB3aW5kb3cuc3RyZWFtTWluQnVmZmVyID0gNzAgICAgIC8vIHBpc28gZGVsIGNvbGNow7NuIGVuIGNoYXJzXG4gICAgLy8gICB3aW5kb3cuc3RyZWFtV2FybXVwTXMgPSA0MDAgICAgIC8vIHdhcm11cCBpbmljaWFsIChtcylcbiAgICBjb25zdCB3aW5GbGFncyA9IHJlYWRTbW9vdGhTdHJlYW1XaW5kb3dGbGFncygpXG4gICAgY29uc3QgZGlzcGxheVRleHQgPSB1c2VTbW9vdGhTdHJlYW1UZXh0KHJhd1RleHQsIGJ1aWxkU21vb3RoU3RyZWFtVGV4dE9wdGlvbnMod2luRmxhZ3MsIHByb3BzLmlzU3RyZWFtaW5nKSlcbiAgICBjb25zdCBjcmVhdGVBZ2VudEFjdGlvbnNBZ2VudElkID0gcmVzb2x2ZUNyZWF0ZUFnZW50QWN0aW9uc0FnZW50SWQocHJvcHMuY3JlYXRlQWdlbnRGb2xsb3dVcClcblxuICAgIGlmIChzaG91bGRIaWRlRW1wdHlTdHJlYW1pbmdCb2R5KGRpc3BsYXlUZXh0LCBwcm9wcy5pc1N0cmVhbWluZykpIHJldHVybiBudWxsXG4gICAgY29uc3QgaGFzTWVudGlvbnMgPSBoYXNJbmxpbmVNYXJrZXJzKGRpc3BsYXlUZXh0KVxuICAgIGNvbnN0IG1lbnRpb25Ob2RlcyA9IGhhc01lbnRpb25zID8gcmVuZGVyVGV4dFdpdGhNZW50aW9ucyhkaXNwbGF5VGV4dCkgOiBudWxsXG4gICAgcmV0dXJuIChcbiAgICAgIDw+XG4gICAgICAgIDxTQ0NBSU1lc3NhZ2VXcmFwcGVyXG4gICAgICAgICAgaXNDdXJyZW50VXNlcj17cHJvcHMuaXNDdXJyZW50VXNlcn1cbiAgICAgICAgICBpc0Zyb250ZW5kQ2FuY2VsbGVkPXtwcm9wcy5pc0Zyb250ZW5kQ2FuY2VsbGVkfVxuICAgICAgICAgIGNsYXNzTmFtZT17Z2V0RW50aXR5TGlua1dyYXBwZXJDbGFzc05hbWUoZGlzcGxheVRleHQpfVxuICAgICAgICA+XG4gICAgICAgICAge3Nob3VsZFJlbmRlck1lbnRpb25JbmxpbmVOb2RlcyhoYXNNZW50aW9ucywgbWVudGlvbk5vZGVzKSA/IChcbiAgICAgICAgICAgIC8vIFNpIGhheSBtZW50aW9ucywgcmVuZGVyaXphciBkaXJlY3RhbWVudGUgKHNpbiBtYXJrZG93biBlbiBlbCBtaXNtbyBww6FycmFmbylcbiAgICAgICAgICAgIDxzcGFuIHN0eWxlPXt7IGRpc3BsYXk6ICdpbmxpbmUnIH19PnttZW50aW9uTm9kZXN9PC9zcGFuPlxuICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAvLyBTaW4gbWVudGlvbnMsIHBhc2FyIGEgU3RyZWFtZG93biBwYXJhIG1hcmtkb3duIHN1cHBvcnRcbiAgICAgICAgICAgIDxNYWlhU3RyZWFtZG93blxuICAgICAgICAgICAgICB2YXJpYW50PVwiY2hhdFwiXG4gICAgICAgICAgICAgIGlzQ3VycmVudFVzZXI9e3Byb3BzLmlzQ3VycmVudFVzZXJ9XG4gICAgICAgICAgICAgIGlzRnJvbnRlbmRDYW5jZWxsZWQ9e3Byb3BzLmlzRnJvbnRlbmRDYW5jZWxsZWR9XG4gICAgICAgICAgICAgIGNvbXBvbmVudHM9e3sgYTogRW50aXR5TGlua0N1c3RvbUxpbmsgfSBhcyBNYWlhU3RyZWFtZG93blByb3BzWydjb21wb25lbnRzJ119XG4gICAgICAgICAgICAgIGlzQW5pbWF0aW5nPXshIXByb3BzLmlzU3RyZWFtaW5nfVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7ZGlzcGxheVRleHR9XG4gICAgICAgICAgICA8L01haWFTdHJlYW1kb3duPlxuICAgICAgICAgICl9XG4gICAgICAgIDwvU0NDQUlNZXNzYWdlV3JhcHBlcj5cbiAgICAgICAge3Nob3VsZFJlbmRlckFzc2lzdGFudEZlZWRiYWNrKHtcbiAgICAgICAgICBpc0Fzc2lzdGFudDogcHJvcHMuaXNBc3Npc3RhbnQsXG4gICAgICAgICAgaXNFcnJvcjogcHJvcHMuaXNFcnJvcixcbiAgICAgICAgICBhcHByb3ZhbDogcHJvcHMuYXBwcm92YWwsXG4gICAgICAgICAgaXNTdHJlYW1pbmc6IHByb3BzLmlzU3RyZWFtaW5nLFxuICAgICAgICAgIGlzRnJvbnRlbmRDYW5jZWxsZWQ6IHByb3BzLmlzRnJvbnRlbmRDYW5jZWxsZWQsXG4gICAgICAgICAgb25SZXRyeTogcHJvcHMub25SZXRyeSxcbiAgICAgICAgfSkgJiYgKFxuICAgICAgICAgIDxNZXNzYWdlRmVlZGJhY2tcbiAgICAgICAgICAgIGNvbnRlbnQ9e2Rpc3BsYXlUZXh0fVxuICAgICAgICAgICAgey4uLnJlc29sdmVGZWVkYmFja1Byb3BzRm9yQ2FuY2VsbGVkKHByb3BzLmlzRnJvbnRlbmRDYW5jZWxsZWQsIHByb3BzLnNvdXJjZXMsIHByb3BzLmhhbmRsZUZlZWRiYWNrQ2xpY2spfVxuICAgICAgICAgICAgZGlzYWJsZUZlZWRiYWNrPXtwcm9wcy5kaXNhYmxlRmVlZGJhY2t9XG4gICAgICAgICAgICBvblJldHJ5PXtwcm9wcy5vblJldHJ5fVxuICAgICAgICAgIC8+XG4gICAgICAgICl9XG4gICAgICAgIHtzaG91bGRSZW5kZXJBc3Npc3RhbnRTdWdnZXN0aW9ucyh7XG4gICAgICAgICAgaXNBc3Npc3RhbnQ6IHByb3BzLmlzQXNzaXN0YW50LFxuICAgICAgICAgIGlzRnJvbnRlbmRDYW5jZWxsZWQ6IHByb3BzLmlzRnJvbnRlbmRDYW5jZWxsZWQsXG4gICAgICAgICAgYXBwcm92YWw6IHByb3BzLmFwcHJvdmFsLFxuICAgICAgICAgIGlzRXJyb3I6IHByb3BzLmlzRXJyb3IsXG4gICAgICAgICAgc3VnZ2VzdGlvbnNMZW5ndGg6IHByb3BzLnN1Z2dlc3Rpb25zPy5sZW5ndGggPz8gMCxcbiAgICAgICAgfSkgJiYgKFxuICAgICAgICAgIDxDaGF0QUlTdWdnZXN0aW9uc1xuICAgICAgICAgICAgc3VnZ2VzdGlvbnM9e3Byb3BzLnN1Z2dlc3Rpb25zIHx8IFtdfVxuICAgICAgICAgICAgb25TZWxlY3RTdWdnZXN0aW9uPXtzdWdnZXN0aW9uID0+IHByb3BzLmhhbmRsZVN1Z2dlc3Rpb25DbGljayhwcm9wcy5tZXNzYWdlSWQsIHN1Z2dlc3Rpb24pfVxuICAgICAgICAgICAgZGlzYWJsZWQ9e3Byb3BzLnN1Z2dlc3Rpb25zRGlzYWJsZWR9XG4gICAgICAgICAgICBoaWRkZW49e3Nob3VsZEhpZGVBc3Npc3RhbnRTdWdnZXN0aW9ucyhwcm9wcy5pc1N0cmVhbWluZywgcHJvcHMuaXNMYXN0TWVzc2FnZSwgcHJvcHMuc3VnZ2VzdGlvbnNEaXNhYmxlZCl9XG4gICAgICAgICAgLz5cbiAgICAgICAgKX1cbiAgICAgICAge3Nob3VsZFJlbmRlckNyZWF0ZUFnZW50QWN0aW9ucyh7XG4gICAgICAgICAgaXNBc3Npc3RhbnQ6IHByb3BzLmlzQXNzaXN0YW50LFxuICAgICAgICAgIGlzRXJyb3I6IHByb3BzLmlzRXJyb3IsXG4gICAgICAgICAgaXNGcm9udGVuZENhbmNlbGxlZDogcHJvcHMuaXNGcm9udGVuZENhbmNlbGxlZCxcbiAgICAgICAgICBhcHByb3ZhbDogcHJvcHMuYXBwcm92YWwsXG4gICAgICAgICAgYWdlbnRJZDogY3JlYXRlQWdlbnRBY3Rpb25zQWdlbnRJZCxcbiAgICAgICAgfSkgJiYgKFxuICAgICAgICAgIDxDaGF0QUlDcmVhdGVBZ2VudEFjdGlvbnNcbiAgICAgICAgICAgIGFnZW50SWQ9e2NyZWF0ZUFnZW50QWN0aW9uc0FnZW50SWQhfVxuICAgICAgICAgICAgZGlzYWJsZWQ9e3Byb3BzLnN1Z2dlc3Rpb25zRGlzYWJsZWR9XG4gICAgICAgICAgICBoaWRkZW49e3Nob3VsZEhpZGVBc3Npc3RhbnRTdWdnZXN0aW9ucyhwcm9wcy5pc1N0cmVhbWluZywgcHJvcHMuaXNMYXN0TWVzc2FnZSwgcHJvcHMuc3VnZ2VzdGlvbnNEaXNhYmxlZCl9XG4gICAgICAgICAgLz5cbiAgICAgICAgKX1cbiAgICAgIDwvPlxuICAgIClcbiAgfVxuKVxuXG5jb25zdCBNZXNzYWdlSXRlbSA9IG1lbW8oKHByb3BzOiBNZXNzYWdlSXRlbVByb3BzKSA9PiB7XG4gIGNvbnN0IHtcbiAgICBpZCxcbiAgICB1c2VyLFxuICAgIG1lc3NhZ2UsXG4gICAgaXNTdHJlYW1pbmcsXG4gICAgaXNFcnJvcixcbiAgICBhdXRoVXNlcixcbiAgICBvcHRpb25zLFxuICAgIGlzQ2hhbmdlUHJvamVjdCxcbiAgICBoYW5kbGVTZWxlY3RPcHRpb24sXG4gICAgaGFuZGxlU3VnZ2VzdGlvbkNsaWNrLFxuICAgIGhhbmRsZUZlZWRiYWNrLFxuICAgIGhhbmRsZUFwcHJvdmFsRGVjaXNpb24sXG4gICAgZGlzYWJsZUZlZWRiYWNrLFxuICAgIGhhbmRsZVJldHJ5LFxuICAgIHJvbGUsXG4gICAgc291cmNlcyxcbiAgICBhdHRhY2htZW50cyxcbiAgICBhcHByb3ZhbCxcbiAgICBhcHByb3ZhbFN0YXR1cyxcbiAgICBzdWdnZXN0aW9ucyxcbiAgICBjcmVhdGVBZ2VudEZvbGxvd1VwLFxuICAgIGhhc1NlbGVjdGVkU3VnZ2VzdGlvbixcbiAgICBpc0xhc3RNZXNzYWdlLFxuICAgIHN0cmVhbUFjdGl2aXR5LFxuICB9ID0gcHJvcHNcblxuICBjb25zdCBbcHJldmlld0F0dGFjaG1lbnQsIHNldFByZXZpZXdBdHRhY2htZW50XSA9IHVzZVN0YXRlPEF0dGFjaG1lbnRGaWxlIHwgbnVsbD4obnVsbClcbiAgY29uc3QgaXNDdXJyZW50VXNlciA9IGlzQ3VycmVudFVzZXJNZXNzYWdlKHJvbGUsIHVzZXIuaWQsIGF1dGhVc2VyLmlkLnRvU3RyaW5nKCkpXG4gIGNvbnN0IGlzQXNzaXN0YW50ID0gaXNBc3Npc3RhbnRDaGF0TWVzc2FnZShyb2xlLCB1c2VyLmlkKVxuICBjb25zdCBpc1N0cmVhbWluZ1BsYWNlaG9sZGVyID0gaXNTdHJlYW1pbmdQbGFjZWhvbGRlck1lc3NhZ2VJZChpZClcbiAgY29uc3Qgc3RyZWFtaW5nVGV4dCA9IHVzZVN0cmVhbWluZ01lc3NhZ2UoXG4gICAgcmVzb2x2ZVN0cmVhbWluZ1RleHRIb29rSWQoQm9vbGVhbihpc1N0cmVhbWluZyksIGlzU3RyZWFtaW5nUGxhY2Vob2xkZXIsIGlkKVxuICApXG4gIGNvbnN0IGlzQWN0aXZlU3RyZWFtaW5nID0gaXNBY3RpdmVTdHJlYW1pbmdTdGF0ZShpc1N0cmVhbWluZywgaXNTdHJlYW1pbmdQbGFjZWhvbGRlcilcbiAgY29uc3QgaGFzU3RyZWFtVGV4dCA9IEJvb2xlYW4oc3RyZWFtaW5nVGV4dClcbiAgY29uc3QgcmVhc29uaW5nVHJhY2UgPSB1c2VSZWFzb25pbmdUcmFjZShyZXNvbHZlUmVhc29uaW5nVHJhY2VIb29rSWQoaXNBc3Npc3RhbnQsIGlzQWN0aXZlU3RyZWFtaW5nLCBpZCkpXG4gIC8vIFN1c2NyaXBjacOzbiBwcm9waWEsIHNpbiBsYSBjb25kaWNpw7NuIGRlIHN0cmVhbWluZyBkZSBhcnJpYmE6IGVsIGF2aXNvIGRlXG4gIC8vIGNvbXBhY3RhY2nDs24gdGllbmUgcXVlIHNlZ3VpciB2aXNpYmxlIHVuYSB2ZXogdGVybWluYWRvIGVsIHR1cm5vLiBTaSBubyBoYXlcbiAgLy8gc25hcHNob3QgZW4gdml2byAocmVhYnJpciBlbCBjaGF0KSwgY2FlIGFsIGBjb21wYWN0aW9uYCBwZXJzaXN0aWRvIGVuIGVsIG1lbnNhamUuXG4gIGNvbnN0IHsgY29tcGFjdGlvbjogbGl2ZUNvbXBhY3Rpb24gfSA9IHVzZVJlYXNvbmluZ1RyYWNlKGlzQXNzaXN0YW50ID8gaWQgOiAnJylcbiAgY29uc3QgY29tcGFjdGlvbiA9IGxpdmVDb21wYWN0aW9uID8/IHByb3BzLmNvbXBhY3Rpb24gPz8gbnVsbFxuICBjb25zdCBzdHJlYW1OYXJyYXRpb25JblRpbWVsaW5lID1cbiAgICBpc0Fzc2lzdGFudCAmJiBzaG91bGRTdHJlYW1OYXJyYXRpb25JblRpbWVsaW5lKHJlYXNvbmluZ1RyYWNlLnN0ZXBzLCBzdHJlYW1BY3Rpdml0eSwgc3RyZWFtaW5nVGV4dCwgaWQpXG4gIGNvbnN0IHNob3dTdHJlYW1pbmdCb2R5ID0gc2hvdWxkU2hvd1N0cmVhbWluZ01lc3NhZ2VCb2R5KGlzQWN0aXZlU3RyZWFtaW5nLCBoYXNTdHJlYW1UZXh0LCBzdHJlYW1OYXJyYXRpb25JblRpbWVsaW5lKVxuICBjb25zdCBzaG93QWN0aXZpdHlJbmRpY2F0b3IgPSBzaG91bGRTaG93U3RyZWFtQWN0aXZpdHlJbmRpY2F0b3IoaXNBc3Npc3RhbnQsIGlzQWN0aXZlU3RyZWFtaW5nLCBzdHJlYW1BY3Rpdml0eSlcblxuICBjb25zdCBtZXNzYWdlQXR0YWNobWVudHMgPSByZXNvbHZlTWVzc2FnZUF0dGFjaG1lbnRzKGF0dGFjaG1lbnRzLCBpc0Fzc2lzdGFudCwgc291cmNlcylcblxuICBjb25zdCBoYW5kbGVBdHRhY2htZW50Q2xpY2sgPSAoYXR0YWNobWVudDogQXR0YWNobWVudEZpbGUpID0+IHtcbiAgICAvLyBQZXJtaXRpciBwcmV2aXN1YWxpemFjacOzbiBzaSB0aWVuZSBhcmNoaXZvIGxvY2FsIG8gVVJMcyBkZWwgYmFja2VuZFxuICAgIGlmIChjYW5PcGVuQXR0YWNobWVudFByZXZpZXcoYXR0YWNobWVudCkpIHtcbiAgICAgIHNldFByZXZpZXdBdHRhY2htZW50KGF0dGFjaG1lbnQpXG4gICAgfVxuICB9XG5cbiAgY29uc3QgaGFuZGxlQ2xvc2VQcmV2aWV3ID0gKCkgPT4ge1xuICAgIHNldFByZXZpZXdBdHRhY2htZW50KG51bGwpXG4gIH1cblxuICBjb25zdCBoYW5kbGVBdHRhY2htZW50RG93bmxvYWQgPSBhc3luYyAoYXR0YWNobWVudDogQXR0YWNobWVudEZpbGUpID0+IHtcbiAgICBjb25zdCBmaWxlTmFtZSA9IHJlc29sdmVBdHRhY2htZW50RG93bmxvYWRGaWxlTmFtZShhdHRhY2htZW50KVxuICAgIGNvbnN0IGZpbGVVcmwgPSByZXNvbHZlQXR0YWNobWVudERvd25sb2FkVXJsKGF0dGFjaG1lbnQpXG5cbiAgICB0cnkge1xuICAgICAgbGV0IGJsb2JVcmw6IHN0cmluZyB8IG51bGwgPSBudWxsXG5cbiAgICAgIGNvbnN0IGRvd25sb2FkU3RyYXRlZ3kgPSByZXNvbHZlQXR0YWNobWVudERvd25sb2FkQmxvYlN0cmF0ZWd5KGZpbGVVcmwsIGF0dGFjaG1lbnQuZmlsZSlcbiAgICAgIGlmIChkb3dubG9hZFN0cmF0ZWd5ID09PSAncmVtb3RlLXVybCcgJiYgZmlsZVVybCkge1xuICAgICAgICBjb25zdCBkb3dubG9hZGVkRmlsZSA9IGF3YWl0IGRvd25sb2FkRmlsZUZyb21VcmwoZmlsZVVybCwgZmlsZU5hbWUsIGF0dGFjaG1lbnQudHlwZSlcbiAgICAgICAgYmxvYlVybCA9IFVSTC5jcmVhdGVPYmplY3RVUkwoZG93bmxvYWRlZEZpbGUpXG4gICAgICB9IGVsc2UgaWYgKGRvd25sb2FkU3RyYXRlZ3kgPT09ICdsb2NhbC1maWxlJyAmJiBhdHRhY2htZW50LmZpbGUgaW5zdGFuY2VvZiBGaWxlKSB7XG4gICAgICAgIGJsb2JVcmwgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKGF0dGFjaG1lbnQuZmlsZSlcbiAgICAgIH1cblxuICAgICAgaWYgKCFibG9iVXJsKSByZXR1cm5cblxuICAgICAgY29uc3QgbGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKVxuICAgICAgbGluay5ocmVmID0gYmxvYlVybFxuICAgICAgbGluay5kb3dubG9hZCA9IGZpbGVOYW1lXG4gICAgICBsaW5rLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSdcbiAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQobGluaylcbiAgICAgIGxpbmsuY2xpY2soKVxuXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChsaW5rKVxuICAgICAgICBVUkwucmV2b2tlT2JqZWN0VVJMKGJsb2JVcmwpXG4gICAgICB9LCAxMDApXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0ZhaWxlZCB0byBkb3dubG9hZCBhdHRhY2htZW50JywgZXJyb3IpXG4gICAgfVxuICB9XG5cbiAgaWYgKHNob3VsZFJlbmRlckNoYW5nZVByb2plY3RNZXNzYWdlKGlzQ2hhbmdlUHJvamVjdCwgb3B0aW9ucykpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPE1lc3NhZ2VXcmFwcGVyIGtleT17aWR9IGlzQ3VycmVudFVzZXI9e2lzQ3VycmVudFVzZXJ9IGRhdGEtbWVzc2FnZS1pZD17aWR9IGhhc0ZlZWRiYWNrPXtmYWxzZX0+XG4gICAgICAgIDxTQ01lc3NhZ2VJdGVtV3JhcHBlciAkaXNBc3Npc3RhbnQ9e2lzQXNzaXN0YW50fT5cbiAgICAgICAgICA8TWVzc2FnZUNvbnRlbnRXcmFwcGVyXG4gICAgICAgICAgICBpc0NoYW5nZVByb2plY3Q9e2lzQ2hhbmdlUHJvamVjdH1cbiAgICAgICAgICAgIG1lc3NhZ2U9e21lc3NhZ2V9XG4gICAgICAgICAgICBpc0N1cnJlbnRVc2VyPXtpc0N1cnJlbnRVc2VyfVxuICAgICAgICAgICAgaXNFcnJvcj17aXNFcnJvcn1cbiAgICAgICAgICAgIG1lc3NhZ2VFeHRyYUNvbnRlbnQ9ezxNZXNzYWdlT3B0aW9ucyBvcHRpb25zPXtvcHRpb25zIGFzIGFueX0gaGFuZGxlU2VsZWN0T3B0aW9uPXtoYW5kbGVTZWxlY3RPcHRpb259IC8+fVxuICAgICAgICAgIC8+XG4gICAgICAgIDwvU0NNZXNzYWdlSXRlbVdyYXBwZXI+XG4gICAgICA8L01lc3NhZ2VXcmFwcGVyPlxuICAgIClcbiAgfVxuXG4gIGNvbnN0IGhhbmRsZUZlZWRiYWNrQ2xpY2sgPSAoZmVlZGJhY2s6IEZlZWRiYWNrKSA9PiB7XG4gICAgaGFuZGxlRmVlZGJhY2s/LihmZWVkYmFjaywgZXh0cmFjdEZlZWRiYWNrU2Vzc2lvbklkKGlkKSlcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPFNDTWVzc2FnZUl0ZW1XcmFwcGVyICRpc0Fzc2lzdGFudD17aXNBc3Npc3RhbnR9IGRhdGEtbWVzc2FnZS1pZD17aWR9PlxuICAgICAgPFNDTWVzc2FnZUl0ZW1Jbm5lcj5cbiAgICAgICAgey8qIE1pc21vIHNsb3QgcGFyYSBsYSB0cmF6YSBlbiB2aXZvIHkgbGEgeWEgcGxlZ2FkYTogbWllbnRyYXMgZWwgdHVybm9cbiAgICAgICAgICAgIGNvcnJlLCBsb3MgcGFzb3Mgc2UgYXBpbGFuIGFjw6EgKHRpbWVsYXBzZSk7IGFsIGNvbXBsZXRhciwgZWxcbiAgICAgICAgICAgIFJlYXNvbmluZ0Jsb2NrIG9jdXBhIGVsIGx1Z2FyIHkgY29sYXBzYSBzb2xvLlxuICAgICAgICAgICAgVmEgQVJSSUJBIGRlbCBjdWVycG8gcG9ycXVlIGxhIG5hcnJhY2nDs24gZGUgY2FkYSB0dXJubyB0ZXJtaW5hIGNvbW9cbiAgICAgICAgICAgIGZpbGEgZGUgbGEgdHJhemE6IHNpIGVzdHV2aWVyYSBhYmFqbywgZWwgdGV4dG8gdmllam8gcXVlZGFyw61hIHBvclxuICAgICAgICAgICAgZGViYWpvIGRlbCB0ZXh0byBudWV2by4gKi99XG4gICAgICAgIHtpc0Fzc2lzdGFudCAmJlxuICAgICAgICAgIChpc0FjdGl2ZVN0cmVhbWluZyA/IChcbiAgICAgICAgICAgIDxSZWFzb25pbmdUaW1lbGluZSBtZXNzYWdlSWQ9e2lkfSBzdHJlYW1BY3Rpdml0eT17c3RyZWFtQWN0aXZpdHl9IHN0cmVhbWluZ1RleHQ9e3N0cmVhbWluZ1RleHR9IC8+XG4gICAgICAgICAgKSA6IChcbiAgICAgICAgICAgIDxSZWFzb25pbmdCbG9jayBtZXNzYWdlSWQ9e2lkfSB0cmFjZT17cHJvcHMucmVhc29uaW5nID8/IG51bGx9IC8+XG4gICAgICAgICAgKSl9XG4gICAgICAgIHsvKiBGdWVyYSBkZWwgUmVhc29uaW5nQmxvY2sgYSBwcm9ww7NzaXRvOiBlc2Ugc2UgcGxpZWdhIHNvbG8gYWwgdGVybWluYXJcbiAgICAgICAgICAgIGVsIHR1cm5vIHkgZXNjb25kZXLDrWEgZWwgYXZpc28ganVzdG8gY3VhbmRvIGVsIHVzdWFyaW8gcG9kcsOtYVxuICAgICAgICAgICAgcHJlZ3VudGFyc2UgcG9yIHF1w6kgTUFJQSB5YSBubyByZWN1ZXJkYSBhbGdvLiAqL31cbiAgICAgICAge2lzQXNzaXN0YW50ICYmIDxDb250ZXh0Q29tcGFjdGVkTm90aWNlIGNvbXBhY3Rpb249e2NvbXBhY3Rpb259IC8+fVxuICAgICAgICB7c2hvdWxkU2hvd01lc3NhZ2VBdHRhY2htZW50c1JvdyhtZXNzYWdlQXR0YWNobWVudHMubGVuZ3RoKSAmJiAoXG4gICAgICAgICAgPFNDQXR0YWNobWVudHNSb3cgJGlzQXNzaXN0YW50PXtpc0Fzc2lzdGFudH0+XG4gICAgICAgICAgICB7bWVzc2FnZUF0dGFjaG1lbnRzLm1hcCgoYXR0YWNobWVudCwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgLy8gRGV0ZWN0YXIgc2kgZXMgdW4gYXJjaGl2byBkZSBhdWRpb1xuICAgICAgICAgICAgICBpZiAoaXNBdWRpb0F0dGFjaG1lbnQoYXR0YWNobWVudCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gPEF0dGFjaG1lbnRDYXJkQXVkaW8ga2V5PXtgJHthdHRhY2htZW50LmlkfS0ke2F0dGFjaG1lbnQubmFtZX1gfSBhdHRhY2htZW50PXthdHRhY2htZW50fSAvPlxuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICA8QXR0YWNobWVudENhcmRcbiAgICAgICAgICAgICAgICAgIGtleT17YCR7YXR0YWNobWVudC5pZH0tJHthdHRhY2htZW50Lm5hbWV9YH1cbiAgICAgICAgICAgICAgICAgIGF0dGFjaG1lbnQ9e2F0dGFjaG1lbnR9XG4gICAgICAgICAgICAgICAgICBwb3NpdGlvbkluZGV4PXtpbmRleH1cbiAgICAgICAgICAgICAgICAgIG9uRG93bmxvYWQ9eygpID0+IGhhbmRsZUF0dGFjaG1lbnREb3dubG9hZChhdHRhY2htZW50KX1cbiAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IGhhbmRsZUF0dGFjaG1lbnRDbGljayhhdHRhY2htZW50KX1cbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9KX1cbiAgICAgICAgICA8L1NDQXR0YWNobWVudHNSb3c+XG4gICAgICAgICl9XG4gICAgICAgIHtzaG91bGRSZW5kZXJNZXNzYWdlVGV4dEJvZHkoe1xuICAgICAgICAgIG1lc3NhZ2VUZXh0OiBtZXNzYWdlLFxuICAgICAgICAgIHNob3dTdHJlYW1pbmdCb2R5LFxuICAgICAgICAgIGlzQXNzaXN0YW50LFxuICAgICAgICAgIGF0dGFjaG1lbnRDb3VudDogbWVzc2FnZUF0dGFjaG1lbnRzLmxlbmd0aCxcbiAgICAgICAgfSkgJiYgKFxuICAgICAgICAgIDxTdHJlYW1pbmdNZXNzYWdlQm9keVxuICAgICAgICAgICAgbWVzc2FnZT17bWVzc2FnZSA/PyAnJ31cbiAgICAgICAgICAgIGlzU3RyZWFtaW5nPXtzaG93U3RyZWFtaW5nQm9keX1cbiAgICAgICAgICAgIGlzQ3VycmVudFVzZXI9e2lzQ3VycmVudFVzZXJ9XG4gICAgICAgICAgICBpc0Fzc2lzdGFudD17aXNBc3Npc3RhbnR9XG4gICAgICAgICAgICBpc0Zyb250ZW5kQ2FuY2VsbGVkPXtwcm9wcy5pc0Zyb250ZW5kQ2FuY2VsbGVkfVxuICAgICAgICAgICAgYXBwcm92YWw9e2FwcHJvdmFsfVxuICAgICAgICAgICAgaXNFcnJvcj17aXNFcnJvcn1cbiAgICAgICAgICAgIHNvdXJjZXM9e3NvdXJjZXN9XG4gICAgICAgICAgICBzdWdnZXN0aW9ucz17c3VnZ2VzdGlvbnN9XG4gICAgICAgICAgICBjcmVhdGVBZ2VudEZvbGxvd1VwPXtjcmVhdGVBZ2VudEZvbGxvd1VwfVxuICAgICAgICAgICAgaGFuZGxlRmVlZGJhY2tDbGljaz17aGFuZGxlRmVlZGJhY2tDbGlja31cbiAgICAgICAgICAgIGRpc2FibGVGZWVkYmFjaz17ZGlzYWJsZUZlZWRiYWNrID8/IG51bGx9XG4gICAgICAgICAgICBvblJldHJ5PXtoYW5kbGVSZXRyeX1cbiAgICAgICAgICAgIGhhbmRsZVN1Z2dlc3Rpb25DbGljaz17aGFuZGxlU3VnZ2VzdGlvbkNsaWNrfVxuICAgICAgICAgICAgc3VnZ2VzdGlvbnNEaXNhYmxlZD17aXNBY3RpdmVTdHJlYW1pbmcgfHwgISFoYXNTZWxlY3RlZFN1Z2dlc3Rpb259XG4gICAgICAgICAgICBtZXNzYWdlSWQ9e2lkfVxuICAgICAgICAgICAgaXNMYXN0TWVzc2FnZT17aXNMYXN0TWVzc2FnZX1cbiAgICAgICAgICAvPlxuICAgICAgICApfVxuICAgICAgICB7LyogU3Bpbm5lciBkZSBhY3RpdmlkYWQ6IHZpc2libGUgdGFtYmnDqW4gZW4gd3JpdGluZyAobmFycmFjacOzbiBlbiB0cmF6YSBvIHJlc3B1ZXN0YSBmaW5hbCkuICovfVxuICAgICAgICB7c2hvd0FjdGl2aXR5SW5kaWNhdG9yICYmIHN0cmVhbUFjdGl2aXR5ID8gKFxuICAgICAgICAgIDxTQ1RpbWVsaW5lSW5kaWNhdG9yPlxuICAgICAgICAgICAgPEFnZW50QWN0aXZpdHlJbmRpY2F0b3IgYWN0aXZpdHk9e3N0cmVhbUFjdGl2aXR5fSBjb21wYWN0IC8+XG4gICAgICAgICAgPC9TQ1RpbWVsaW5lSW5kaWNhdG9yPlxuICAgICAgICApIDogbnVsbH1cbiAgICAgICAge3Nob3VsZFNob3dBcHByb3ZhbEFjdGlvbnMoYXBwcm92YWwpICYmIGFwcHJvdmFsICYmIChcbiAgICAgICAgICA8U0NBcHByb3ZhbEFjdGlvbnNDb2x1bW4+XG4gICAgICAgICAgICA8QXBwcm92YWxCb3hcbiAgICAgICAgICAgICAgYWN0aW9ucz17YXBwcm92YWwucGVuZGluZ19hY3Rpb25zfVxuICAgICAgICAgICAgICBzdGF0dXM9e2FwcHJvdmFsU3RhdHVzfVxuICAgICAgICAgICAgICBvbkFwcHJvdmU9eyh0aHJlYWRJZHMsIG1ldGFkYXRhKSA9PiBoYW5kbGVBcHByb3ZhbERlY2lzaW9uKHRocmVhZElkcywgJ2FwcHJvdmUnLCB1bmRlZmluZWQsIG1ldGFkYXRhKX1cbiAgICAgICAgICAgICAgb25SZWplY3Q9e3RocmVhZElkcyA9PiBoYW5kbGVBcHByb3ZhbERlY2lzaW9uKHRocmVhZElkcywgJ3JlamVjdCcpfVxuICAgICAgICAgICAgICBpc1Byb2plY3REZWxldGVkPXtwcm9wcy5wcm9qZWN0TWV0YWRhdGE/LmlzX2RlbGV0ZWQgPT09IHRydWV9XG4gICAgICAgICAgICAgIGlzRXhwYW5kZWQ9e3Byb3BzLmV4cGFuZGVkfVxuICAgICAgICAgICAgICBoaXRsSW5zdGFuY2VJZD17YXBwcm92YWwub3JpZ2luYWxfdGhyZWFkX2lkfVxuICAgICAgICAgICAgICB3YXJuaW5nTWVzc2FnZT17YXBwcm92YWwud2FybmluZ19tZXNzYWdlfVxuICAgICAgICAgICAgICBtYW51YWxBcHByb3ZhbERldGVjdGVkPXthcHByb3ZhbC5tYW51YWxfYXBwcm92YWxfZGV0ZWN0ZWR9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvU0NBcHByb3ZhbEFjdGlvbnNDb2x1bW4+XG4gICAgICAgICl9XG4gICAgICA8L1NDTWVzc2FnZUl0ZW1Jbm5lcj5cbiAgICAgIDxBdHRhY2htZW50UHJldmlld01vZGFsXG4gICAgICAgIGlzT3Blbj17ISFwcmV2aWV3QXR0YWNobWVudH1cbiAgICAgICAgb25DbG9zZT17aGFuZGxlQ2xvc2VQcmV2aWV3fVxuICAgICAgICBhdHRhY2htZW50PXtwcmV2aWV3QXR0YWNobWVudH1cbiAgICAgIC8+XG4gICAgPC9TQ01lc3NhZ2VJdGVtV3JhcHBlcj5cbiAgKVxufSlcblxuY29uc3QgQ2hhdEFJTWVzc2FnZXNJbm5lciA9ICh7XG4gIHVzZXJJbml0aWFsTWVzc2FnZSxcbiAgaW5pdGlhbENoYXRJZCxcbiAgb25FcnJvcixcbiAgb25TZW5kTWVzc2FnZVJlYWR5LFxuICBvblNjcm9sbFRvQm90dG9tLFxuICBhdHRhY2htZW50cyxcbiAgYWdlbnRzLFxuICBleHBhbmRlZCxcbn06IENoYXRBSU1lc3NhZ2VzUHJvcHMpID0+IHtcbiAgY29uc3QgeyB0IH0gPSB1c2VUKClcbiAgY29uc3QgeyBpc1dlYlNlYXJjaEFjdGl2ZSwgaXNEZWVwU2VhcmNoQWN0aXZlLCBhZ2VudCB9ID0gdXNlR2xvYmFsQ29udGV4dCgpXG4gIGNvbnN0IGV2ZW50ID0gdXNlRXZlbnQoKVxuICBjb25zdCBhdXRoVXNlciA9IHVzZVVzZXIoKVxuICBjb25zdCBtZXNzYWdlc1JlZiA9IHVzZVJlZjxIVE1MRGl2RWxlbWVudD4obnVsbClcbiAgY29uc3QgY2hhdEluaXRpYWxpemVkUmVmID0gdXNlUmVmKGZhbHNlKVxuICBjb25zdCBpc0xvYWRpbmdNb3JlUmVmID0gdXNlUmVmKGZhbHNlKVxuICBjb25zdCBzY3JvbGxUaHJlc2hvbGRSZWYgPSB1c2VSZWYoMzkpXG4gIGNvbnN0IGxhc3RTY3JvbGxUb3BSZWYgPSB1c2VSZWYoMClcbiAgY29uc3Qgc2hvd1Njcm9sbFRvQm90dG9tUmVmID0gdXNlUmVmKGZhbHNlKVxuICBjb25zdCBzaG93VG9wR3JhZGllbnRSZWYgPSB1c2VSZWYoZmFsc2UpXG4gIGNvbnN0IHNob3dCb3R0b21HcmFkaWVudFJlZiA9IHVzZVJlZihmYWxzZSlcbiAgY29uc3Qgc2Nyb2xsUmFmUmVmID0gdXNlUmVmPG51bWJlciB8IG51bGw+KG51bGwpXG4gIC8qKlxuICAgKiBUdXJubyBjb24gZWwgc2Nyb2xsIGJham8gY29udHJvbCBkZWwgdXN1YXJpbzogZGVzZGUgcXVlIGVudsOtYSBlbCBtZW5zYWplIHlcbiAgICogaGFzdGEgZWwgcHLDs3hpbW8gZW52w61vIG5vIG1vdmVtb3MgZWwgc2Nyb2xsIHBvciBuaW5nw7puIG1vdGl2by4gRXNcbiAgICogaW5kZXBlbmRpZW50ZSBkZSBsYSBhbHR1cmEgZGVsIHNwYWNlciwgcXVlIHB1ZWRlIGxsZWdhciBhIDAgc2luIGRlc2FuY2xhci5cbiAgICovXG4gIGNvbnN0IGFuY2hvcmVkVHVybklkUmVmID0gdXNlUmVmPHN0cmluZyB8IG51bGw+KG51bGwpXG4gIGNvbnN0IHNwYWNlckVsUmVmID0gdXNlUmVmPEhUTUxEaXZFbGVtZW50IHwgbnVsbD4obnVsbClcbiAgY29uc3Qgc3BhY2VySGVpZ2h0UmVmID0gdXNlUmVmKDApXG4gIGNvbnN0IHR1cm5TY3JvbGxSYWZSZWYgPSB1c2VSZWY8bnVtYmVyIHwgbnVsbD4obnVsbClcbiAgY29uc3Qgd2FzTG9hZGluZ01lc3NhZ2VzUmVmID0gdXNlUmVmKGZhbHNlKVxuICBjb25zdCBsYXN0U2Nyb2xsZWRTZXNzaW9uUmVmID0gdXNlUmVmPHN0cmluZyB8IG51bGw+KG51bGwpXG4gIGNvbnN0IHBlbmRpbmdTY3JvbGxSZXN0b3JlUmVmID0gdXNlUmVmPG51bWJlciB8IG51bGw+KG51bGwpXG4gIGNvbnN0IHNjcm9sbFBlcnNpc3RUaW1lclJlZiA9IHVzZVJlZjxudW1iZXIgfCBudWxsPihudWxsKVxuICBjb25zdCBbc2hvd1Njcm9sbFRvQm90dG9tLCBzZXRTaG93U2Nyb2xsVG9Cb3R0b21dID0gdXNlU3RhdGUoZmFsc2UpXG4gIGNvbnN0IFtzaG93VG9wR3JhZGllbnQsIHNldFNob3dUb3BHcmFkaWVudF0gPSB1c2VTdGF0ZShmYWxzZSlcbiAgY29uc3QgW3Nob3dCb3R0b21HcmFkaWVudCwgc2V0U2hvd0JvdHRvbUdyYWRpZW50XSA9IHVzZVN0YXRlKGZhbHNlKVxuICBjb25zdCBbc2VsZWN0ZWRTdWdnZXN0aW9uTWVzc2FnZUlkcywgc2V0U2VsZWN0ZWRTdWdnZXN0aW9uTWVzc2FnZUlkc10gPSB1c2VTdGF0ZTxSZWNvcmQ8c3RyaW5nLCBib29sZWFuPj4oe30pXG5cbiAgY29uc3Qge1xuICAgIG1lc3NhZ2VzLFxuICAgIGxvYWRpbmdNZXNzYWdlcyxcbiAgICBpc0xvYWRpbmdNb3JlTWVzc2FnZXMsXG4gICAgd2FpdGluZ1Jlc3BvbnNlLFxuICAgIGlzV3JpdGluZyxcbiAgICBsb2FkaW5nTWVzc2FnZSxcbiAgICBzdHJlYW1BY3Rpdml0eSxcbiAgICBhY3RpdmVMb2FkaW5ncyxcbiAgICBzZW5kTWVzc2FnZSxcbiAgICByZXRyeU1lc3NhZ2UsXG4gICAgY2hhbmdlUHJvamVjdCxcbiAgICBoYW5kbGVGZWVkYmFjayxcbiAgICBoYW5kbGVBcHByb3ZhbERlY2lzaW9uLFxuICAgIGluaXRpYWxpemVDaGF0LFxuICAgIGhhbmRsZVNjcm9sbCxcbiAgICBzdG9wR2VuZXJhdGlvbixcbiAgfSA9IHVzZUNoYXRNYW5hZ2VyKHtcbiAgICBjaGF0SWQ6IGluaXRpYWxDaGF0SWQgfHwgdW5kZWZpbmVkLFxuICAgIHVzZXJJbml0aWFsTWVzc2FnZSxcbiAgICBvbkVycm9yLFxuICAgIGF0dGFjaG1lbnRzLFxuICAgIGFnZW50cyxcbiAgfSlcblxuICBjb25zdCBoYW5kbGVTZWxlY3RPcHRpb24gPSB1c2VDYWxsYmFjayhcbiAgICAob3B0aW9uOiBQcm9qZWN0KSA9PiB7XG4gICAgICBjaGFuZ2VQcm9qZWN0KG9wdGlvbilcbiAgICB9LFxuICAgIFtjaGFuZ2VQcm9qZWN0XVxuICApXG5cbiAgLyoqXG4gICAqIFJlY2FsY3VsYSBlbCBib3TDs24gXCJzY3JvbGwgdG8gYm90dG9tXCIgeSBsb3MgZ3JhZGllbnRlcyBkZSBib3JkZSBhIHBhcnRpciBkZVxuICAgKiBsYSBwb3NpY2nDs24gZGVsIHNjcm9sbC4gTG9zIHJlZnMgZXZpdGFuIGBzZXRTdGF0ZWAgY3VhbmRvIGVsIHZhbG9yIG5vIGNhbWJpYTpcbiAgICogZXN0byBjb3JyZSBlbiBjYWRhIGZyYW1lIGRlbCBzdHJlYW0uXG4gICAqL1xuICBjb25zdCB1cGRhdGVTY3JvbGxBZmZvcmRhbmNlcyA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBjb25zdCBlbCA9IG1lc3NhZ2VzUmVmLmN1cnJlbnRcbiAgICBpZiAoIWVsKSByZXR1cm5cbiAgICBjb25zdCB7IHNjcm9sbFRvcCwgc2Nyb2xsSGVpZ2h0LCBjbGllbnRIZWlnaHQgfSA9IGVsXG4gICAgLy8gRWwgc3BhY2VyIGRlbCB0dXJubyBlcyBhbHRvIHJlc2VydmFkbywgbm8gY29udGVuaWRvOiBzaSBubyBsbyBkZXNjb250YW1vc1xuICAgIC8vIGxhIGZsZWNoYSB5IGVsIGdyYWRpZW50ZSBkZSBhYmFqbyBxdWVkYW4gZW5jZW5kaWRvcyBkdXJhbnRlIHRvZG8gZWwgdHVybm8uXG4gICAgY29uc3QgZGlzdGFuY2VGcm9tQm90dG9tID0gY29tcHV0ZURpc3RhbmNlRnJvbUJvdHRvbShzY3JvbGxIZWlnaHQsIHNwYWNlckhlaWdodFJlZi5jdXJyZW50LCBzY3JvbGxUb3AsIGNsaWVudEhlaWdodClcblxuICAgIGNvbnN0IHNob3VsZFNob3cgPSBzaG91bGRTaG93U2Nyb2xsVG9Cb3R0b20oZGlzdGFuY2VGcm9tQm90dG9tKVxuICAgIGlmIChzaG93U2Nyb2xsVG9Cb3R0b21SZWYuY3VycmVudCAhPT0gc2hvdWxkU2hvdykge1xuICAgICAgc2hvd1Njcm9sbFRvQm90dG9tUmVmLmN1cnJlbnQgPSBzaG91bGRTaG93XG4gICAgICBzZXRTaG93U2Nyb2xsVG9Cb3R0b20oc2hvdWxkU2hvdylcbiAgICB9XG5cbiAgICBjb25zdCBuZXh0VG9wR3JhZGllbnQgPSBzaG91bGRTaG93VG9wU2Nyb2xsR3JhZGllbnQoc2Nyb2xsVG9wKVxuICAgIGlmIChzaG93VG9wR3JhZGllbnRSZWYuY3VycmVudCAhPT0gbmV4dFRvcEdyYWRpZW50KSB7XG4gICAgICBzaG93VG9wR3JhZGllbnRSZWYuY3VycmVudCA9IG5leHRUb3BHcmFkaWVudFxuICAgICAgc2V0U2hvd1RvcEdyYWRpZW50KG5leHRUb3BHcmFkaWVudClcbiAgICB9XG5cbiAgICBjb25zdCBuZXh0Qm90dG9tR3JhZGllbnQgPSBzaG91bGRTaG93Qm90dG9tU2Nyb2xsR3JhZGllbnQoZGlzdGFuY2VGcm9tQm90dG9tKVxuICAgIGlmIChzaG93Qm90dG9tR3JhZGllbnRSZWYuY3VycmVudCAhPT0gbmV4dEJvdHRvbUdyYWRpZW50KSB7XG4gICAgICBzaG93Qm90dG9tR3JhZGllbnRSZWYuY3VycmVudCA9IG5leHRCb3R0b21HcmFkaWVudFxuICAgICAgc2V0U2hvd0JvdHRvbUdyYWRpZW50KG5leHRCb3R0b21HcmFkaWVudClcbiAgICB9XG4gIH0sIFtdKVxuXG4gIC8qKlxuICAgKiBTY3JvbGwgaW5tZWRpYXRvIGFsIGZvbmRvIChkZW50cm8gZGUgckFGIHBhcmEgY29vcmRpbmFyIGNvbiBlbCBwYWludClcbiAgICogeSBhY3R1YWxpemEgbGEgdmlzaWJpbGlkYWQgZGVsIGJvdMOzbi4gU29sbyBzZSB1c2EgYWwgYWJyaXIvY2FyZ2FyIHVuIGNoYXRcbiAgICogbyBjdWFuZG8gZWwgdXN1YXJpbyBwaWRlIGlyIGFsIGZvbmRvOiBudW5jYSBkdXJhbnRlIGVsIHN0cmVhbS5cbiAgICovXG4gIGNvbnN0IHNjcm9sbFRvQm90dG9tUmFmID0gdXNlQ2FsbGJhY2soXG4gICAgKG9wdHM6IHsgZGVsYXlNcz86IG51bWJlciB9ID0ge30pID0+IHtcbiAgICAgIGNvbnN0IHsgZGVsYXlNcyA9IDAgfSA9IG9wdHNcbiAgICAgIGNvbnN0IHJ1biA9ICgpID0+IHtcbiAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcbiAgICAgICAgICBjb25zdCBlbCA9IG1lc3NhZ2VzUmVmLmN1cnJlbnRcbiAgICAgICAgICBpZiAoIWVsKSByZXR1cm5cbiAgICAgICAgICBlbC5zY3JvbGxUb3AgPSBlbC5zY3JvbGxIZWlnaHRcbiAgICAgICAgICB1cGRhdGVTY3JvbGxBZmZvcmRhbmNlcygpXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgICBpZiAoZGVsYXlNcyA+IDApIHNldFRpbWVvdXQocnVuLCBkZWxheU1zKVxuICAgICAgZWxzZSBydW4oKVxuICAgIH0sXG4gICAgW3VwZGF0ZVNjcm9sbEFmZm9yZGFuY2VzXVxuICApXG5cbiAgY29uc3QgY2FuY2VsVHVyblNjcm9sbCA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBpZiAodHVyblNjcm9sbFJhZlJlZi5jdXJyZW50ID09PSBudWxsKSByZXR1cm5cbiAgICBjYW5jZWxBbmltYXRpb25GcmFtZSh0dXJuU2Nyb2xsUmFmUmVmLmN1cnJlbnQpXG4gICAgdHVyblNjcm9sbFJhZlJlZi5jdXJyZW50ID0gbnVsbFxuICB9LCBbXSlcblxuICAvKipcbiAgICogU2Nyb2xsIGFuaW1hZG8gY29uIGVhc2luZyBwcm9waW86IGBiZWhhdmlvcjogJ3Ntb290aCdgIG5vIHBlcm1pdGUgcmVndWxhciBsYVxuICAgKiBkdXJhY2nDs24geSBlbCBzYWx0byBhbCBhbmNsYXIgZWwgdHVybm8gcXVlZGEgZGVtYXNpYWRvIHNlY28uXG4gICAqL1xuICBjb25zdCBhbmltYXRlU2Nyb2xsVG8gPSB1c2VDYWxsYmFjayhcbiAgICAodG9wOiBudW1iZXIpID0+IHtcbiAgICAgIGNhbmNlbFR1cm5TY3JvbGwoKVxuICAgICAgY29uc3QgZWwgPSBtZXNzYWdlc1JlZi5jdXJyZW50XG4gICAgICBpZiAoIWVsKSByZXR1cm5cbiAgICAgIGNvbnN0IGZyb20gPSBlbC5zY3JvbGxUb3BcbiAgICAgIGNvbnN0IGRpc3RhbmNlID0gdG9wIC0gZnJvbVxuICAgICAgaWYgKHNob3VsZFNraXBUdXJuU2Nyb2xsQW5pbWF0aW9uKGRpc3RhbmNlKSkgcmV0dXJuXG5cbiAgICAgIGNvbnN0IGR1cmF0aW9uID0gY29tcHV0ZVR1cm5TY3JvbGxEdXJhdGlvbk1zKGRpc3RhbmNlKVxuXG4gICAgICBjb25zdCBzdGFydGVkQXQgPSBwZXJmb3JtYW5jZS5ub3coKVxuICAgICAgY29uc3Qgc3RlcCA9IChub3c6IG51bWJlcikgPT4ge1xuICAgICAgICBjb25zdCBwcm9ncmVzcyA9IE1hdGgubWluKDEsIChub3cgLSBzdGFydGVkQXQpIC8gZHVyYXRpb24pXG4gICAgICAgIGNvbnN0IGVhc2VkID0gZWFzZU91dEV4cG9TY3JvbGxQcm9ncmVzcyhwcm9ncmVzcylcbiAgICAgICAgZWwuc2Nyb2xsVG9wID0gZnJvbSArIGRpc3RhbmNlICogZWFzZWRcbiAgICAgICAgdXBkYXRlU2Nyb2xsQWZmb3JkYW5jZXMoKVxuICAgICAgICB0dXJuU2Nyb2xsUmFmUmVmLmN1cnJlbnQgPSBwcm9ncmVzcyA8IDEgPyByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoc3RlcCkgOiBudWxsXG4gICAgICB9XG4gICAgICB0dXJuU2Nyb2xsUmFmUmVmLmN1cnJlbnQgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoc3RlcClcbiAgICB9LFxuICAgIFtjYW5jZWxUdXJuU2Nyb2xsLCB1cGRhdGVTY3JvbGxBZmZvcmRhbmNlc11cbiAgKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiBjYW5jZWxUdXJuU2Nyb2xsLCBbY2FuY2VsVHVyblNjcm9sbF0pXG5cbiAgY29uc3Qgc2V0U3BhY2VySGVpZ2h0ID0gdXNlQ2FsbGJhY2soKG5leHQ6IG51bWJlcikgPT4ge1xuICAgIGlmICghc2hvdWxkVXBkYXRlU3BhY2VySGVpZ2h0KHNwYWNlckhlaWdodFJlZi5jdXJyZW50LCBuZXh0KSkgcmV0dXJuXG4gICAgc3BhY2VySGVpZ2h0UmVmLmN1cnJlbnQgPSBuZXh0XG4gICAgaWYgKHNwYWNlckVsUmVmLmN1cnJlbnQpIHtcbiAgICAgIHNwYWNlckVsUmVmLmN1cnJlbnQuc3R5bGUuaGVpZ2h0ID0gYCR7bmV4dH1weGBcbiAgICB9XG4gIH0sIFtdKVxuXG4gIGNvbnN0IGNsZWFyVHVyblNwYWNlID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGFuY2hvcmVkVHVybklkUmVmLmN1cnJlbnQgPSBudWxsXG4gICAgc2V0U3BhY2VySGVpZ2h0KDApXG4gIH0sIFtzZXRTcGFjZXJIZWlnaHRdKVxuXG4gIC8qKlxuICAgKiBEZXZ1ZWx2ZSBlbCBhbHRvIHJlc2VydmFkbyBxdWUgc2UgcHVlZGUgc2FjYXIgc2luIG1vdmVyIGxhIHZpc3RhOiB0b2RvIGxvXG4gICAqIHF1ZSBxdWVkZSBwb3IgZGViYWpvIGRlbCBzY3JvbGwgYWN0dWFsLiBTaSBlbCB1c3VhcmlvIGVzdMOhIGVuIGVsIGZvbmRvLCBzZVxuICAgKiBzYWNhIGVudGVybzsgc2kgZXN0w6EgYSBtaXRhZCBkZSBjYW1pbm8sIHNlIHZhIGRyZW5hbmRvIGEgbWVkaWRhIHF1ZSBiYWphLlxuICAgKi9cbiAgY29uc3QgZHJhaW5UdXJuU3BhY2UgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgY29uc3QgZWwgPSBtZXNzYWdlc1JlZi5jdXJyZW50XG4gICAgaWYgKCFlbCB8fCBzcGFjZXJIZWlnaHRSZWYuY3VycmVudCA8PSAwKSByZXR1cm5cbiAgICBzZXRTcGFjZXJIZWlnaHQoY29tcHV0ZVJlbW92YWJsZVR1cm5TcGFjZShlbC5zY3JvbGxIZWlnaHQsIGVsLmNsaWVudEhlaWdodCwgZWwuc2Nyb2xsVG9wLCBzcGFjZXJIZWlnaHRSZWYuY3VycmVudCkpXG4gIH0sIFtzZXRTcGFjZXJIZWlnaHRdKVxuXG4gIC8qKlxuICAgKiBFbCB1c3VhcmlvIHRvbcOzIGVsIGNvbnRyb2wgZGVsIHNjcm9sbDogZWwgdHVybm8gZGVqYSBkZSBlc3RhciBhbmNsYWRvIHkgZWxcbiAgICogZXNwYWNpbyByZXNlcnZhZG8gZW1waWV6YSBhIGRldm9sdmVyc2UuIFNpbiBhbmNsYSB5IGNvbiBzcGFjZXIgPiAwLCBlbFxuICAgKiBoYW5kbGVyIGRlIHNjcm9sbCBzaWd1ZSBkcmVuYW5kbyBoYXN0YSBxdWUgbGxlZ2EgYWwgZm9uZG8geSBubyBxdWVkYSBodWVjby5cbiAgICovXG4gIGNvbnN0IHJlbGVhc2VUdXJuU3BhY2UgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgaWYgKCFzaG91bGRSZWxlYXNlVHVyblNwYWNlKGFuY2hvcmVkVHVybklkUmVmLmN1cnJlbnQsIHNwYWNlckhlaWdodFJlZi5jdXJyZW50KSkgcmV0dXJuXG4gICAgYW5jaG9yZWRUdXJuSWRSZWYuY3VycmVudCA9IG51bGxcbiAgICBkcmFpblR1cm5TcGFjZSgpXG4gIH0sIFtkcmFpblR1cm5TcGFjZV0pXG5cbiAgY29uc3QgaGFuZGxlVXNlclNjcm9sbEludGVudCA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBjYW5jZWxUdXJuU2Nyb2xsKClcbiAgICByZWxlYXNlVHVyblNwYWNlKClcbiAgfSwgW2NhbmNlbFR1cm5TY3JvbGwsIHJlbGVhc2VUdXJuU3BhY2VdKVxuXG4gIGNvbnN0IG1lYXN1cmVUdXJuID0gdXNlQ2FsbGJhY2soKHF1ZXN0aW9uSWQ6IHN0cmluZykgPT4ge1xuICAgIGNvbnN0IGVsID0gbWVzc2FnZXNSZWYuY3VycmVudFxuICAgIGNvbnN0IHNwYWNlckVsID0gc3BhY2VyRWxSZWYuY3VycmVudFxuICAgIGlmICghZWwgfHwgIXNwYWNlckVsKSByZXR1cm4gbnVsbFxuXG4gICAgY29uc3QgcXVlc3Rpb25FbCA9IGVsLnF1ZXJ5U2VsZWN0b3I8SFRNTEVsZW1lbnQ+KGBbZGF0YS1tZXNzYWdlLWlkPVwiJHtxdWVzdGlvbklkfVwiXWApXG4gICAgaWYgKCFxdWVzdGlvbkVsKSByZXR1cm4gbnVsbFxuXG4gICAgY29uc3QgY29udGFpbmVyVG9wID0gZWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wXG4gICAgY29uc3QgeyBxdWVzdGlvblRvcCwgdHVybkhlaWdodCB9ID0gY29tcHV0ZU1lYXN1cmVUdXJuTGF5b3V0KHtcbiAgICAgIGNvbnRhaW5lclRvcCxcbiAgICAgIHF1ZXN0aW9uVG9wOiBxdWVzdGlvbkVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcCxcbiAgICAgIGNvbnRlbnRCb3R0b206IHNwYWNlckVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcCxcbiAgICAgIHNjcm9sbFRvcDogZWwuc2Nyb2xsVG9wLFxuICAgIH0pXG4gICAgcmV0dXJuIHsgZWwsIHF1ZXN0aW9uVG9wLCB0dXJuSGVpZ2h0IH1cbiAgfSwgW10pXG5cbiAgY29uc3QgcmVzZXJ2ZVR1cm5TcGFjZSA9IHVzZUNhbGxiYWNrKFxuICAgIChxdWVzdGlvbklkOiBzdHJpbmcpID0+IHtcbiAgICAgIGNvbnN0IG1lYXN1cmVkID0gbWVhc3VyZVR1cm4ocXVlc3Rpb25JZClcbiAgICAgIGlmICghbWVhc3VyZWQpIHJldHVyblxuICAgICAgY29uc3QgeyBlbCwgcXVlc3Rpb25Ub3AsIHR1cm5IZWlnaHQgfSA9IG1lYXN1cmVkXG5cbiAgICAgIC8vIEFuY2xhbW9zIHNpZW1wcmUsIGluY2x1c28gY3VhbmRvIG5vIGhhZ2EgZmFsdGEgcmVzZXJ2YXI6IGR1cmFudGUgZWxcbiAgICAgIC8vIHR1cm5vIGVsIHNjcm9sbCBubyBzZSBtdWV2ZSBzb2xvIGVuIG5pbmfDum4gY2Fzby5cbiAgICAgIGFuY2hvcmVkVHVybklkUmVmLmN1cnJlbnQgPSBxdWVzdGlvbklkXG5cbiAgICAgIGNvbnN0IHRhcmdldFNjcm9sbFRvcCA9IGNvbXB1dGVUdXJuU2Nyb2xsVGFyZ2V0VG9wKHF1ZXN0aW9uVG9wLCBlbC5jbGllbnRIZWlnaHQpXG4gICAgICBjb25zdCBwbGFuID0gcmVzb2x2ZVJlc2VydmVUdXJuU3BhY2VQbGFuKHtcbiAgICAgICAgY3VycmVudFNjcm9sbFRvcDogZWwuc2Nyb2xsVG9wLFxuICAgICAgICB0YXJnZXRTY3JvbGxUb3AsXG4gICAgICAgIGNsaWVudEhlaWdodDogZWwuY2xpZW50SGVpZ2h0LFxuICAgICAgICB0dXJuSGVpZ2h0LFxuICAgICAgfSlcbiAgICAgIGlmIChwbGFuLmtpbmQgPT09ICdza2lwLXJlc2VydmF0aW9uJykge1xuICAgICAgICBzZXRTcGFjZXJIZWlnaHQoMClcbiAgICAgICAgdXBkYXRlU2Nyb2xsQWZmb3JkYW5jZXMoKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgc2V0U3BhY2VySGVpZ2h0KHBsYW4uc3BhY2VySGVpZ2h0KVxuICAgICAgYW5pbWF0ZVNjcm9sbFRvKHBsYW4udGFyZ2V0U2Nyb2xsVG9wKVxuICAgIH0sXG4gICAgW21lYXN1cmVUdXJuLCBzZXRTcGFjZXJIZWlnaHQsIHVwZGF0ZVNjcm9sbEFmZm9yZGFuY2VzLCBhbmltYXRlU2Nyb2xsVG9dXG4gIClcblxuICAvKipcbiAgICogRW5jb2dlIGVsIHNwYWNlciBhIG1lZGlkYSBxdWUgY3JlY2UgbGEgcmVzcHVlc3RhOiBlbCBhbHRvIHRvdGFsIGRlbCBzY3JvbGxcbiAgICogcXVlZGEgY29uc3RhbnRlIHkgbGEgdmlzdGEgbm8gc2UgbXVldmUgc29sYS4gU29sbyBhY2hpY2EsIG51bmNhIGFncmFuZGEsXG4gICAqIHBhcmEgbm8gaW55ZWN0YXIgZXNwYWNpbyBlbiB0dXJub3MgcXVlIGFycmFuY2Fyb24gc2luIHJlc2VydmEuXG4gICAqIERldnVlbHZlIHNpIGVsIHR1cm5vIHNpZ3VlIGFuY2xhZG8gKGF1bnF1ZSBlbCBzcGFjZXIgeWEgc2VhIDApLlxuICAgKi9cbiAgY29uc3Qgc3luY1R1cm5TcGFjZSA9IHVzZUNhbGxiYWNrKCgpOiBib29sZWFuID0+IHtcbiAgICBpZiAoIWFuY2hvcmVkVHVybklkUmVmLmN1cnJlbnQpIHJldHVybiBmYWxzZVxuICAgIGlmIChzcGFjZXJIZWlnaHRSZWYuY3VycmVudCA+IDApIHtcbiAgICAgIGNvbnN0IG1lYXN1cmVkID0gbWVhc3VyZVR1cm4oYW5jaG9yZWRUdXJuSWRSZWYuY3VycmVudClcbiAgICAgIGlmIChtZWFzdXJlZCkge1xuICAgICAgICBzZXRTcGFjZXJIZWlnaHQoXG4gICAgICAgICAgY29tcHV0ZVN5bmNlZFR1cm5TcGFjZXJIZWlnaHQobWVhc3VyZWQuZWwuY2xpZW50SGVpZ2h0LCBtZWFzdXJlZC50dXJuSGVpZ2h0LCBzcGFjZXJIZWlnaHRSZWYuY3VycmVudClcbiAgICAgICAgKVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdHJ1ZVxuICB9LCBbbWVhc3VyZVR1cm4sIHNldFNwYWNlckhlaWdodF0pXG5cbiAgY29uc3QgaGFuZGxlQ2xpY2tTY3JvbGxUb0JvdHRvbSA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBjb25zdCBlbCA9IG1lc3NhZ2VzUmVmLmN1cnJlbnRcbiAgICBpZiAoIWVsKSByZXR1cm5cbiAgICBjbGVhclR1cm5TcGFjZSgpXG4gICAgLy8gTWlzbWEgY3VydmEgeSBkdXJhY2nDs24gcXVlIGVsIGFuY2xhamUgZGVsIHR1cm5vOiBlbCBgc21vb3RoYCBuYXRpdm8gZnJlbmEgc2Vjby5cbiAgICBhbmltYXRlU2Nyb2xsVG8ocmVzb2x2ZVNjcm9sbFRvQm90dG9tVGFyZ2V0VG9wKGVsLnNjcm9sbEhlaWdodCwgZWwuY2xpZW50SGVpZ2h0KSlcbiAgfSwgW2NsZWFyVHVyblNwYWNlLCBhbmltYXRlU2Nyb2xsVG9dKVxuXG4gIGNvbnN0IGhhbmRsZVNjcm9sbFRvQm90dG9tID0gdXNlQ2FsbGJhY2soXG4gICAgKGU6IFJlYWN0LlVJRXZlbnQ8SFRNTERpdkVsZW1lbnQ+KSA9PiB7XG4gICAgICBjb25zdCBjb250YWluZXIgPSBlLmN1cnJlbnRUYXJnZXRcblxuICAgICAgaWYgKHNjcm9sbFJhZlJlZi5jdXJyZW50ICE9PSBudWxsKSB7XG4gICAgICAgIGNhbmNlbEFuaW1hdGlvbkZyYW1lKHNjcm9sbFJhZlJlZi5jdXJyZW50KVxuICAgICAgfVxuXG4gICAgICBzY3JvbGxSYWZSZWYuY3VycmVudCA9IHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICAgIHNjcm9sbFJhZlJlZi5jdXJyZW50ID0gbnVsbFxuICAgICAgICBjb25zdCB7IHNjcm9sbFRvcCwgc2Nyb2xsSGVpZ2h0LCBjbGllbnRIZWlnaHQgfSA9IGNvbnRhaW5lclxuXG4gICAgICAgIGNvbnN0IHNjcm9sbEZyYW1lID0gcHJvY2Vzc0NoYXRNZXNzYWdlc1Njcm9sbEZyYW1lKHtcbiAgICAgICAgICBzY3JvbGxUb3AsXG4gICAgICAgICAgc2Nyb2xsSGVpZ2h0LFxuICAgICAgICAgIGNsaWVudEhlaWdodCxcbiAgICAgICAgICBsYXN0U2Nyb2xsVG9wOiBsYXN0U2Nyb2xsVG9wUmVmLmN1cnJlbnQsXG4gICAgICAgICAgc2Nyb2xsVGhyZXNob2xkOiBzY3JvbGxUaHJlc2hvbGRSZWYuY3VycmVudCxcbiAgICAgICAgICBhbmNob3JlZFR1cm5JZDogYW5jaG9yZWRUdXJuSWRSZWYuY3VycmVudCxcbiAgICAgICAgICBpbml0aWFsQ2hhdElkLFxuICAgICAgICB9KVxuXG4gICAgICAgIHNjcm9sbFRocmVzaG9sZFJlZi5jdXJyZW50ID0gc2Nyb2xsRnJhbWUubmV4dFNjcm9sbFRocmVzaG9sZFxuICAgICAgICBsYXN0U2Nyb2xsVG9wUmVmLmN1cnJlbnQgPSBzY3JvbGxGcmFtZS5sYXN0U2Nyb2xsVG9wXG5cbiAgICAgICAgaWYgKHNjcm9sbEZyYW1lLnNob3VsZERyYWluVHVyblNwYWNlKSBkcmFpblR1cm5TcGFjZSgpXG5cbiAgICAgICAgdXBkYXRlU2Nyb2xsQWZmb3JkYW5jZXMoKVxuXG4gICAgICAgIGlmIChzY3JvbGxGcmFtZS5zaG91bGRTY2hlZHVsZVNjcm9sbFBlcnNpc3QpIHtcbiAgICAgICAgICBpZiAoc2Nyb2xsUGVyc2lzdFRpbWVyUmVmLmN1cnJlbnQgIT0gbnVsbCkge1xuICAgICAgICAgICAgd2luZG93LmNsZWFyVGltZW91dChzY3JvbGxQZXJzaXN0VGltZXJSZWYuY3VycmVudClcbiAgICAgICAgICB9XG4gICAgICAgICAgc2Nyb2xsUGVyc2lzdFRpbWVyUmVmLmN1cnJlbnQgPSB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICBwYXRjaE1haWFQYW5lbFNlc3Npb24oYXV0aFVzZXIuaWQsIHtcbiAgICAgICAgICAgICAgc2Nyb2xsVG9wLFxuICAgICAgICAgICAgICBzY3JvbGxTZXNzaW9uSWQ6IGluaXRpYWxDaGF0SWQsXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH0sIDE1MClcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzY3JvbGxGcmFtZS5zaG91bGROb3RpZnlTY3JvbGxUb0JvdHRvbSAmJiBvblNjcm9sbFRvQm90dG9tKSB7XG4gICAgICAgICAgb25TY3JvbGxUb0JvdHRvbSgpXG4gICAgICAgIH1cblxuICAgICAgICBoYW5kbGVTY3JvbGwoY29udGFpbmVyKVxuICAgICAgfSlcbiAgICB9LFxuICAgIFthdXRoVXNlci5pZCwgZHJhaW5UdXJuU3BhY2UsIGhhbmRsZVNjcm9sbCwgaW5pdGlhbENoYXRJZCwgb25TY3JvbGxUb0JvdHRvbSwgdXBkYXRlU2Nyb2xsQWZmb3JkYW5jZXNdXG4gIClcblxuICAvLyByZWZzIHRvIHN0YWJpbGl6ZSBmdW5jdGlvbnMgYW5kIGF2b2lkIHVubmVjZXNzYXJ5IHJlLXJlbmRlcnNcbiAgY29uc3Qgc2VuZE1lc3NhZ2VSZWYgPSB1c2VSZWYoc2VuZE1lc3NhZ2UpXG4gIGNvbnN0IHN0b3BHZW5lcmF0aW9uUmVmID0gdXNlUmVmKHN0b3BHZW5lcmF0aW9uKVxuICBjb25zdCBvblNlbmRNZXNzYWdlUmVhZHlSZWYgPSB1c2VSZWYob25TZW5kTWVzc2FnZVJlYWR5KVxuICBjb25zdCBzZW5kTWVzc2FnZVByb3h5UmVmID0gdXNlUmVmKFxuICAgIChcbiAgICAgIG1lc3NhZ2U6IHN0cmluZyxcbiAgICAgIGF0dGFjaG1lbnRzPzogQXR0YWNobWVudEZpbGVbXSxcbiAgICAgIGZhcUlkPzogc3RyaW5nLFxuICAgICAgYWdlbnRTdWdnZXN0aW9uSWQ/OiBzdHJpbmcsXG4gICAgICBtZW50aW9ucz86IENvbnRleHRNZW50aW9uW10sXG4gICAgICBmdWFJZD86IHN0cmluZyxcbiAgICAgIHNjSWQ/OiBzdHJpbmdcbiAgICApID0+IHNlbmRNZXNzYWdlUmVmLmN1cnJlbnQobWVzc2FnZSwgYXR0YWNobWVudHMsIGZhcUlkLCBhZ2VudFN1Z2dlc3Rpb25JZCwgbWVudGlvbnMsIGZ1YUlkLCBzY0lkKVxuICApXG4gIGNvbnN0IHN0b3BHZW5lcmF0aW9uUHJveHlSZWYgPSB1c2VSZWYoKCkgPT4gc3RvcEdlbmVyYXRpb25SZWYuY3VycmVudCgpKVxuXG4gIC8vIHVwZGF0ZSByZWZzIHdoZW4gZnVuY3Rpb25zIGNoYW5nZVxuICBzZW5kTWVzc2FnZVJlZi5jdXJyZW50ID0gc2VuZE1lc3NhZ2VcbiAgc3RvcEdlbmVyYXRpb25SZWYuY3VycmVudCA9IHN0b3BHZW5lcmF0aW9uXG4gIG9uU2VuZE1lc3NhZ2VSZWFkeVJlZi5jdXJyZW50ID0gb25TZW5kTWVzc2FnZVJlYWR5XG5cbiAgLyoqXG4gICAqIGBoYW5kbGVTdWdnZXN0aW9uQ2xpY2tgIHNlIHBhc2EgYSBUT0RPUyBsb3MgTWVzc2FnZUl0ZW0sIGFzw60gcXVlIHN1IGlkZW50aWRhZFxuICAgKiBkZWNpZGUgc2kgZWwgYG1lbW9gIGRlIGxhIGxpc3RhIHNvc3RpZW5lLiBMZWVtb3MgcG9yIHJlZiBsbyBxdWUgY2FtYmlhIGVuIGNhZGFcbiAgICogdXBkYXRlIChgbWVzc2FnZXNgLCBgc2VuZE1lc3NhZ2VgLCBsYXMgc3VnZXJlbmNpYXMgeWEgZWxlZ2lkYXMpIHBhcmEgcXVlIGVsXG4gICAqIGNhbGxiYWNrIHNlYSBlc3RhYmxlOiBzaSBubywgYWwgdGVybWluYXIgZWwgc3RyZWFtIHNlIHJlcGludGEgZWwgY2hhdCBlbnRlcm9cbiAgICogeSBjYWRhIE1haWFTdHJlYW1kb3duIHZ1ZWx2ZSBhIHBhcnNlYXIgc3UgbWFya2Rvd24uXG4gICAqL1xuICBjb25zdCBtZXNzYWdlc0RhdGFSZWYgPSB1c2VSZWYobWVzc2FnZXMpXG4gIG1lc3NhZ2VzRGF0YVJlZi5jdXJyZW50ID0gbWVzc2FnZXNcbiAgY29uc3Qgc2VsZWN0ZWRTdWdnZXN0aW9uTWVzc2FnZUlkc1JlZiA9IHVzZVJlZihzZWxlY3RlZFN1Z2dlc3Rpb25NZXNzYWdlSWRzKVxuICBzZWxlY3RlZFN1Z2dlc3Rpb25NZXNzYWdlSWRzUmVmLmN1cnJlbnQgPSBzZWxlY3RlZFN1Z2dlc3Rpb25NZXNzYWdlSWRzXG5cbiAgY29uc3QgaGFuZGxlU3VnZ2VzdGlvbkNsaWNrID0gdXNlQ2FsbGJhY2soXG4gICAgKG1lc3NhZ2VJZDogc3RyaW5nLCBzdWdnZXN0aW9uOiBzdHJpbmcpID0+IHtcbiAgICAgIGlmIChzaG91bGRJZ25vcmVTdWdnZXN0aW9uQ2xpY2soc3VnZ2VzdGlvbiwgc2VsZWN0ZWRTdWdnZXN0aW9uTWVzc2FnZUlkc1JlZi5jdXJyZW50W21lc3NhZ2VJZF0pKSByZXR1cm5cbiAgICAgIGNvbnN0IGN1cnJlbnRNZXNzYWdlcyA9IG1lc3NhZ2VzRGF0YVJlZi5jdXJyZW50XG4gICAgICBjb25zdCBpc01hcmtldHBsYWNlR2xvYmFsQWdlbnQgPSBpc01haWFrZXJBZ2VudChhZ2VudClcbiAgICAgIGV2ZW50KEVWRU5UUy5haUNoYXRTdWdnZXN0ZWRBbnN3ZXIsIHtcbiAgICAgICAgYWdlbnRfdHlwZTogcmVzb2x2ZVN1Z2dlc3Rpb25BbmFseXRpY3NBZ2VudFR5cGUoaXNNYXJrZXRwbGFjZUdsb2JhbEFnZW50LCBhZ2VudD8udHlwZSksXG4gICAgICB9KVxuICAgICAgc2V0U2VsZWN0ZWRTdWdnZXN0aW9uTWVzc2FnZUlkcyhwcmV2ID0+ICh7IC4uLnByZXYsIFttZXNzYWdlSWRdOiB0cnVlIH0pKVxuXG4gICAgICBjb25zdCB0YXJnZXRNZXNzYWdlID0gY3VycmVudE1lc3NhZ2VzLmZpbmQobXNnID0+IG1zZy5pZCA9PT0gbWVzc2FnZUlkKVxuICAgICAgaWYgKGlzUmV0cnlTdWdnZXN0aW9uU2VsZWN0aW9uKHRhcmdldE1lc3NhZ2U/LmlzRXJyb3IsIHN1Z2dlc3Rpb24sIHQoJ2NoYXQucmV0cnknKSkpIHtcbiAgICAgICAgY29uc3QgbGFzdFVzZXJNZXNzYWdlID0gY3VycmVudE1lc3NhZ2VzXG4gICAgICAgICAgLmZpbHRlcihtc2cgPT4gbXNnLnJvbGUgPT09IENoYXRIaXN0b3J5Um9sZS5VU0VSIHx8IG1zZy51c2VyLmlkID09PSBhdXRoVXNlci5pZC50b1N0cmluZygpKVxuICAgICAgICAgIC5hdCgtMSlcbiAgICAgICAgaWYgKGxhc3RVc2VyTWVzc2FnZT8ubWVzc2FnZSkge1xuICAgICAgICAgIHNlbmRNZXNzYWdlUmVmLmN1cnJlbnQobGFzdFVzZXJNZXNzYWdlLm1lc3NhZ2UsIHJlc29sdmVSZXRyeUF0dGFjaG1lbnRzRnJvbVVzZXJNZXNzYWdlKGxhc3RVc2VyTWVzc2FnZSkpXG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgc2VuZE1lc3NhZ2VSZWYuY3VycmVudChzdWdnZXN0aW9uKVxuICAgIH0sXG4gICAgW2V2ZW50LCBhZ2VudCwgdCwgYXV0aFVzZXIuaWRdXG4gIClcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChvblNlbmRNZXNzYWdlUmVhZHlSZWYuY3VycmVudCkge1xuICAgICAgb25TZW5kTWVzc2FnZVJlYWR5UmVmLmN1cnJlbnQoXG4gICAgICAgIHNlbmRNZXNzYWdlUHJveHlSZWYuY3VycmVudCxcbiAgICAgICAgc3RvcEdlbmVyYXRpb25Qcm94eVJlZi5jdXJyZW50LFxuICAgICAgICB3YWl0aW5nUmVzcG9uc2UsXG4gICAgICAgIGlzV3JpdGluZ1xuICAgICAgKVxuICAgIH1cbiAgfSwgW3dhaXRpbmdSZXNwb25zZSwgaXNXcml0aW5nXSlcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlzTG9hZGluZ01vcmVSZWYuY3VycmVudCA9IGlzTG9hZGluZ01vcmVNZXNzYWdlc1xuICB9LCBbaXNMb2FkaW5nTW9yZU1lc3NhZ2VzXSlcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChzaG91bGRJbml0aWFsaXplQ2hhdChjaGF0SW5pdGlhbGl6ZWRSZWYuY3VycmVudCkpIHtcbiAgICAgIGNoYXRJbml0aWFsaXplZFJlZi5jdXJyZW50ID0gdHJ1ZVxuICAgICAgaW5pdGlhbGl6ZUNoYXQoKVxuICAgIH1cbiAgfSwgW10pXG5cbiAgLy8gTWllbnRyYXMgZWwgc3RyZWFtIGNyZWNlOiBlbmNvZ2VyIGVsIHNwYWNlciBkZWwgdHVybm8gYW5jbGFkbyB5XG4gIC8vIGFjdHVhbGl6YXIgZmxlY2hhL2dyYWRpZW50ZXMuIEVsIHNjcm9sbCBubyBzZSBtdWV2ZSBzb2xvLlxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghc2hvdWxkUnVuU3RyZWFtVHVyblN5bmNFZmZlY3Qod2FpdGluZ1Jlc3BvbnNlLCBpc1dyaXRpbmcpKSByZXR1cm4gdW5kZWZpbmVkXG4gICAgaWYgKCFtZXNzYWdlc1JlZi5jdXJyZW50KSByZXR1cm4gdW5kZWZpbmVkXG5cbiAgICBsZXQgcmFmSWQ6IG51bWJlciB8IG51bGwgPSBudWxsXG5cbiAgICBjb25zdCB0aWNrID0gKCkgPT4ge1xuICAgICAgY29uc3QgZWwgPSBtZXNzYWdlc1JlZi5jdXJyZW50XG4gICAgICBpZiAoIWVsKSB7XG4gICAgICAgIHJhZklkID0gbnVsbFxuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICAgIHN5bmNUdXJuU3BhY2UoKVxuICAgICAgdXBkYXRlU2Nyb2xsQWZmb3JkYW5jZXMoKVxuICAgICAgcmFmSWQgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUodGljaylcbiAgICB9XG5cbiAgICByYWZJZCA9IHJlcXVlc3RBbmltYXRpb25GcmFtZSh0aWNrKVxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBpZiAocmFmSWQgIT0gbnVsbCkgY2FuY2VsQW5pbWF0aW9uRnJhbWUocmFmSWQpXG4gICAgfVxuICB9LCBbd2FpdGluZ1Jlc3BvbnNlLCBpc1dyaXRpbmcsIHN5bmNUdXJuU3BhY2UsIHVwZGF0ZVNjcm9sbEFmZm9yZGFuY2VzXSlcblxuICBjb25zdCBsYXN0UmVzZXJ2ZWRRdWVzdGlvblJlZiA9IHVzZVJlZjxzdHJpbmcgfCBudWxsPihudWxsKVxuXG4gIC8vIENhbWJpbyBkZSBjaGF0OiBlbCBhbmNsYSB5IGVsIHNwYWNlciBkZWwgdHVybm8gYW50ZXJpb3IgZGVqYW4gZGUgYXBsaWNhci5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoIXNob3VsZENsZWFyTGFzdFJlc2VydmVkUXVlc3Rpb24obG9hZGluZ01lc3NhZ2VzKSkgcmV0dXJuXG4gICAgbGFzdFJlc2VydmVkUXVlc3Rpb25SZWYuY3VycmVudCA9IG51bGxcbiAgICBjbGVhclR1cm5TcGFjZSgpXG4gIH0sIFtsb2FkaW5nTWVzc2FnZXMsIGNsZWFyVHVyblNwYWNlXSlcblxuICAvLyBBbCBlbnZpYXIgdW4gbWVuc2FqZTogYW5jbGFtb3MgZWwgdHVybm8geSBoYWNlbW9zIGVsIMO6bmljbyBzY3JvbGwgZGVsIGNpY2xvLlxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IHF1ZXN0aW9uSWQgPSBmaW5kTGFzdFF1ZXN0aW9uSWQobWVzc2FnZXMpXG4gICAgaWYgKFxuICAgICAgIXNob3VsZFNjaGVkdWxlVHVyblNwYWNlUmVzZXJ2YXRpb24oXG4gICAgICAgIGxvYWRpbmdNZXNzYWdlcyxcbiAgICAgICAgaXNMb2FkaW5nTW9yZU1lc3NhZ2VzLFxuICAgICAgICBxdWVzdGlvbklkLFxuICAgICAgICBsYXN0UmVzZXJ2ZWRRdWVzdGlvblJlZi5jdXJyZW50XG4gICAgICApXG4gICAgKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAoIXF1ZXN0aW9uSWQpIHJldHVyblxuICAgIGxhc3RSZXNlcnZlZFF1ZXN0aW9uUmVmLmN1cnJlbnQgPSBxdWVzdGlvbklkXG4gICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHJlc2VydmVUdXJuU3BhY2UocXVlc3Rpb25JZCkpXG4gIH0sIFttZXNzYWdlcywgbG9hZGluZ01lc3NhZ2VzLCBpc0xvYWRpbmdNb3JlTWVzc2FnZXMsIHJlc2VydmVUdXJuU3BhY2VdKVxuXG4gIC8vIFNjcm9sbCBjdWFuZG8gY2FtYmlhbiBsb3MgbWVuc2FqZXM6IGRpc3Rpbmd1ZSBcIm51ZXZvIG1lbnNhamVcIiAoYWdyZWdhZG8pXG4gIC8vIGRlIFwicmVlbXBsYXpvXCIgKG1pc21vIGlkL2xlbmd0aCwgZWouIGZlZWRiYWNrIG8gYXBwcm92YWxTdGF0dXMpLiBFblxuICAvLyByZWVtcGxhem9zIHNvbG8gc2UgcmVjYWxjdWxhIGxhIHZpc2liaWxpZGFkIGRlbCBib3TDs24gc2luIGZvcnphciBzY3JvbGwuXG4gIGNvbnN0IGxhc3RNZXNzYWdlSWRSZWYgPSB1c2VSZWY8c3RyaW5nIHwgbnVsbD4obnVsbClcbiAgY29uc3QgbGFzdE1lc3NhZ2VzTGVuZ3RoUmVmID0gdXNlUmVmPG51bWJlcj4oMClcblxuICAvLyBBbCBjYW1iaWFyIGRlIHNlc2nDs24sIHJlc2V0ZWFyIGVzdGFkbyBkZSBzY3JvbGwgbWFudWFsIHBhcmEgbm8gaGVyZWRhciBlbCBjaGF0IGFudGVyaW9yLlxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIHdhc0xvYWRpbmdNZXNzYWdlc1JlZi5jdXJyZW50ID0gZmFsc2VcbiAgICBsYXN0U2Nyb2xsZWRTZXNzaW9uUmVmLmN1cnJlbnQgPSBudWxsXG4gICAgc2Nyb2xsVGhyZXNob2xkUmVmLmN1cnJlbnQgPSAzOVxuICAgIGxhc3RTY3JvbGxUb3BSZWYuY3VycmVudCA9IDBcbiAgICBsYXN0TWVzc2FnZUlkUmVmLmN1cnJlbnQgPSBudWxsXG4gICAgbGFzdE1lc3NhZ2VzTGVuZ3RoUmVmLmN1cnJlbnQgPSAwXG4gIH0sIFtpbml0aWFsQ2hhdElkXSlcblxuICAvLyBSZXN0YXVyYWNpw7NuIGRlc2RlIGNhY2hlIChzaW4gTG9hZGVyKTogYmFqYXIgYWwgZm9uZG8gYWwgcmVhYnJpciBzZXNpw7NuIHZpc2l0YWRhLlxuICB1c2VMYXlvdXRFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChcbiAgICAgICFzaG91bGRSdW5TZXNzaW9uQ2FjaGVTY3JvbGxUb0JvdHRvbShcbiAgICAgICAgbG9hZGluZ01lc3NhZ2VzLFxuICAgICAgICBpbml0aWFsQ2hhdElkLFxuICAgICAgICBtZXNzYWdlcy5sZW5ndGgsXG4gICAgICAgIGxhc3RTY3JvbGxlZFNlc3Npb25SZWYuY3VycmVudFxuICAgICAgKVxuICAgICkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGxhc3RTY3JvbGxlZFNlc3Npb25SZWYuY3VycmVudCA9IGluaXRpYWxDaGF0SWRcblxuICAgIHNjcm9sbFRocmVzaG9sZFJlZi5jdXJyZW50ID0gMzlcbiAgICBsYXN0TWVzc2FnZUlkUmVmLmN1cnJlbnQgPSBtZXNzYWdlc1ttZXNzYWdlcy5sZW5ndGggLSAxXT8uaWQgPz8gbnVsbFxuICAgIGxhc3RNZXNzYWdlc0xlbmd0aFJlZi5jdXJyZW50ID0gbWVzc2FnZXMubGVuZ3RoXG5cbiAgICBzY3JvbGxUb0JvdHRvbVJhZigpXG4gICAgc2Nyb2xsVG9Cb3R0b21SYWYoeyBkZWxheU1zOiAxMDAgfSlcbiAgfSwgW2luaXRpYWxDaGF0SWQsIGxvYWRpbmdNZXNzYWdlcywgbWVzc2FnZXMubGVuZ3RoLCBtZXNzYWdlcywgc2Nyb2xsVG9Cb3R0b21SYWZdKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKFxuICAgICAgc2hvdWxkU2tpcE1lc3NhZ2VzU2Nyb2xsRWZmZWN0KFxuICAgICAgICBCb29sZWFuKG1lc3NhZ2VzUmVmLmN1cnJlbnQpLFxuICAgICAgICBsb2FkaW5nTWVzc2FnZXMsXG4gICAgICAgIGlzTG9hZGluZ01vcmVNZXNzYWdlcyxcbiAgICAgICAgaXNMb2FkaW5nTW9yZVJlZi5jdXJyZW50XG4gICAgICApXG4gICAgKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCBsYXN0TWVzc2FnZSA9IG1lc3NhZ2VzW21lc3NhZ2VzLmxlbmd0aCAtIDFdXG4gICAgY29uc3QgbGFzdElkID0gbGFzdE1lc3NhZ2U/LmlkID8/IG51bGxcbiAgICBjb25zdCBwcmV2SWQgPSBsYXN0TWVzc2FnZUlkUmVmLmN1cnJlbnRcbiAgICBjb25zdCBwcmV2TGVuID0gbGFzdE1lc3NhZ2VzTGVuZ3RoUmVmLmN1cnJlbnRcbiAgICBsYXN0TWVzc2FnZUlkUmVmLmN1cnJlbnQgPSBsYXN0SWRcbiAgICBsYXN0TWVzc2FnZXNMZW5ndGhSZWYuY3VycmVudCA9IG1lc3NhZ2VzLmxlbmd0aFxuXG4gICAgY29uc3QgaXNOZXdNZXNzYWdlID0gaXNOZXdDaGF0TWVzc2FnZUV2ZW50KGxhc3RJZCwgcHJldklkLCBtZXNzYWdlcy5sZW5ndGgsIHByZXZMZW4pXG4gICAgY29uc3QgY29udGFpbmVyID0gbWVzc2FnZXNSZWYuY3VycmVudFxuICAgIGNvbnN0IHNjcm9sbERlY2lzaW9uID0gc2hvdWxkQXV0b1Njcm9sbE9uTWVzc2FnZXNDaGFuZ2Uoe1xuICAgICAgaXNOZXdNZXNzYWdlLFxuICAgICAgYW5jaG9yZWRUdXJuSWQ6IGFuY2hvcmVkVHVybklkUmVmLmN1cnJlbnQsXG4gICAgICB3YWl0aW5nUmVzcG9uc2UsXG4gICAgICBpc1dyaXRpbmcsXG4gICAgICBpc0F0Qm90dG9tOiByZXNvbHZlQ29udGFpbmVyQXRCb3R0b20oY29udGFpbmVyKSxcbiAgICAgIGlzQW5zd2VyT3JRdWVzdGlvbjogaXNBbnN3ZXJPclF1ZXN0aW9uQ2hhdE1lc3NhZ2VJZChsYXN0TWVzc2FnZT8uaWQpLFxuICAgICAgaXNBcHByb3ZhbDogaXNBcHByb3ZhbENoYXRNZXNzYWdlKGxhc3RNZXNzYWdlKSxcbiAgICAgIGhhc0luaXRpYWxNZXNzYWdlOiBoYXNJbml0aWFsVXNlck1lc3NhZ2VJbkxpc3QobWVzc2FnZXMpLFxuICAgICAgbWVzc2FnZXNMZW5ndGg6IG1lc3NhZ2VzLmxlbmd0aCxcbiAgICAgIHByZXZNZXNzYWdlc0xlbmd0aDogcHJldkxlbixcbiAgICB9KVxuXG4gICAgaWYgKHNjcm9sbERlY2lzaW9uID09PSAnYWZmb3JkYW5jZXMtb25seScpIHtcbiAgICAgIHVwZGF0ZVNjcm9sbEFmZm9yZGFuY2VzKClcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmIChzY3JvbGxEZWNpc2lvbiA9PT0gJ3N5bmMtdHVybicpIHtcbiAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZShzeW5jVHVyblNwYWNlKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgc2Nyb2xsVG9Cb3R0b21SYWYoKVxuICB9LCBbXG4gICAgbWVzc2FnZXMsXG4gICAgbG9hZGluZ01lc3NhZ2VzLFxuICAgIGlzTG9hZGluZ01vcmVNZXNzYWdlcyxcbiAgICB3YWl0aW5nUmVzcG9uc2UsXG4gICAgaXNXcml0aW5nLFxuICAgIHNjcm9sbFRvQm90dG9tUmFmLFxuICAgIHN5bmNUdXJuU3BhY2UsXG4gICAgdXBkYXRlU2Nyb2xsQWZmb3JkYW5jZXMsXG4gIF0pXG5cbiAgLy8gQWwgYWJyaXIvY2FyZ2FyIHVuYSBjb252ZXJzYWNpw7NuIGVsIGNvbnRlbmVkb3Igc2UgcmVtb250YSAoTG9hZGVyIOKGkiBsaXN0YSkgY29uXG4gIC8vIHNjcm9sbFRvcD0wLiBGb3J6YW1vcyBpciBhbCBmb25kbyBhbCB0ZXJtaW5hciBsb2FkTWVzc2FnZXMsIHNpbiBhZmVjdGFyIHBhZ2luYWNpw7NuIGhhY2lhIGFycmliYS5cbiAgdXNlTGF5b3V0RWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBqdXN0RmluaXNoZWRMb2FkaW5nID0gZGV0ZWN0SnVzdEZpbmlzaGVkTG9hZGluZ01lc3NhZ2VzKHdhc0xvYWRpbmdNZXNzYWdlc1JlZi5jdXJyZW50LCBsb2FkaW5nTWVzc2FnZXMpXG4gICAgd2FzTG9hZGluZ01lc3NhZ2VzUmVmLmN1cnJlbnQgPSBsb2FkaW5nTWVzc2FnZXNcblxuICAgIGlmICghc2hvdWxkU2Nyb2xsVG9Cb3R0b21BZnRlckxvYWQoanVzdEZpbmlzaGVkTG9hZGluZywgbWVzc2FnZXMubGVuZ3RoKSkgcmV0dXJuXG5cbiAgICBzY3JvbGxUaHJlc2hvbGRSZWYuY3VycmVudCA9IDM5XG4gICAgbGFzdE1lc3NhZ2VJZFJlZi5jdXJyZW50ID0gbWVzc2FnZXNbbWVzc2FnZXMubGVuZ3RoIC0gMV0/LmlkID8/IG51bGxcbiAgICBsYXN0TWVzc2FnZXNMZW5ndGhSZWYuY3VycmVudCA9IG1lc3NhZ2VzLmxlbmd0aFxuXG4gICAgc2Nyb2xsVG9Cb3R0b21SYWYoKVxuICAgIHNjcm9sbFRvQm90dG9tUmFmKHsgZGVsYXlNczogMTAwIH0pXG4gIH0sIFtsb2FkaW5nTWVzc2FnZXMsIG1lc3NhZ2VzLmxlbmd0aCwgc2Nyb2xsVG9Cb3R0b21SYWZdKVxuXG4gIC8vIEVzdGFkbyBpbmljaWFsIGRlbCBib3TDs24gc2Nyb2xsLXRvLWJvdHRvbSBhbCB0ZXJtaW5hciBsb2FkaW5nTWVzc2FnZXMuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKHNob3VsZFVwZGF0ZVNjcm9sbEFmZm9yZGFuY2VzT25Mb2FkRW5kKGxvYWRpbmdNZXNzYWdlcykpIHtcbiAgICAgIHVwZGF0ZVNjcm9sbEFmZm9yZGFuY2VzKClcbiAgICB9XG4gIH0sIFtsb2FkaW5nTWVzc2FnZXMsIG1lc3NhZ2VzLmxlbmd0aCwgdXBkYXRlU2Nyb2xsQWZmb3JkYW5jZXNdKVxuXG4gIC8vIE9idGVuZXIgZWwgw7psdGltbyBtZW5zYWplIGRlbCB1c3VhcmlvIHBhcmEgdmVyaWZpY2FyIHNpIHRpZW5lIGF0dGFjaG1lbnRzXG4gIGNvbnN0IGxhc3RVc2VyTWVzc2FnZSA9IHJlc29sdmVMYXN0VXNlck1lc3NhZ2VGb3JBdHRhY2htZW50cyhtZXNzYWdlcywgYXV0aFVzZXIuaWQudG9TdHJpbmcoKSlcblxuICBjb25zdCBhdHRhY2htZW50c0NvdW50ID0gY291bnRVc2VyTWVzc2FnZUF0dGFjaG1lbnRzKGxhc3RVc2VyTWVzc2FnZSlcblxuICBjb25zdCBzdHJlYW1Mb2FkaW5nRGlzcGxheSA9IHJlc29sdmVTdHJlYW1Mb2FkaW5nRGlzcGxheSh7XG4gICAgc3RyZWFtQWN0aXZpdHksXG4gICAgbG9hZGluZ01lc3NhZ2UsXG4gICAgYWN0aXZlTG9hZGluZ3M6IGFjdGl2ZUxvYWRpbmdzIHx8IHt9LFxuICAgIHdhaXRpbmdSZXNwb25zZSxcbiAgICBpc1dlYlNlYXJjaEFjdGl2ZSxcbiAgICBpc0RlZXBTZWFyY2hBY3RpdmUsXG4gICAgaGFzQXR0YWNobWVudHM6IEJvb2xlYW4oYXR0YWNobWVudHNDb3VudCksXG4gICAgYXR0YWNobWVudHNDb3VudCxcbiAgICB0LFxuICB9KVxuXG4gIGNvbnN0IGlzU2Nyb2xsT25QYXJlbnQgPSByZXNvbHZlU2Nyb2xsT25QYXJlbnRNb2RlKGV4cGFuZGVkKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKHNob3VsZENsZWFyU2Nyb2xsUmVzdG9yZVdpdGhvdXRDaGF0KGluaXRpYWxDaGF0SWQpKSB7XG4gICAgICBwZW5kaW5nU2Nyb2xsUmVzdG9yZVJlZi5jdXJyZW50ID0gbnVsbFxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGNvbnN0IHNlc3Npb24gPSByZWFkTWFpYVBhbmVsU2Vzc2lvbihhdXRoVXNlci5pZClcbiAgICBwZW5kaW5nU2Nyb2xsUmVzdG9yZVJlZi5jdXJyZW50ID0gcmVzb2x2ZVBlbmRpbmdTY3JvbGxUb3BGcm9tU2Vzc2lvbihcbiAgICAgIHNlc3Npb25cbiAgICAgICAgPyB7IHNjcm9sbFNlc3Npb25JZDogc2Vzc2lvbi5zY3JvbGxTZXNzaW9uSWQgPz8gdW5kZWZpbmVkLCBzY3JvbGxUb3A6IHNlc3Npb24uc2Nyb2xsVG9wID8/IHVuZGVmaW5lZCB9XG4gICAgICAgIDogbnVsbCxcbiAgICAgIGluaXRpYWxDaGF0SWRcbiAgICApXG4gIH0sIFthdXRoVXNlci5pZCwgaW5pdGlhbENoYXRJZF0pXG5cbiAgdXNlTGF5b3V0RWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBjb250YWluZXIgPSBtZXNzYWdlc1JlZi5jdXJyZW50XG4gICAgY29uc3QgcGVuZGluZ1Njcm9sbFRvcCA9IHBlbmRpbmdTY3JvbGxSZXN0b3JlUmVmLmN1cnJlbnRcbiAgICBpZiAoXG4gICAgICAhY29udGFpbmVyIHx8XG4gICAgICAhc2hvdWxkQXBwbHlQZW5kaW5nU2Nyb2xsUmVzdG9yZShsb2FkaW5nTWVzc2FnZXMsIHBlbmRpbmdTY3JvbGxUb3AsIHRydWUpIHx8XG4gICAgICBwZW5kaW5nU2Nyb2xsVG9wID09IG51bGxcbiAgICApIHtcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBjb250YWluZXIuc2Nyb2xsVG9wID0gcGVuZGluZ1Njcm9sbFRvcFxuICAgIGxhc3RTY3JvbGxUb3BSZWYuY3VycmVudCA9IHBlbmRpbmdTY3JvbGxUb3BcbiAgICBwZW5kaW5nU2Nyb2xsUmVzdG9yZVJlZi5jdXJyZW50ID0gbnVsbFxuICB9LCBbbG9hZGluZ01lc3NhZ2VzLCBtZXNzYWdlcy5sZW5ndGhdKVxuXG4gIC8vIEFsIGV4cGFuZGlyL2NvbnRyYWVyIGVsIG1vZGFsIGVsIHJlZiBwYXNhIGEgb3RybyBjb250ZW5lZG9yIChzY3JvbGxUb3Agc2UgcmVzZXRlYSBhIDApLlxuICAvLyBSZXN0YXVyYXIgbGEgcG9zaWNpw7NuIGRlIHNjcm9sbCBhbnRlcyBkZWwgcGFpbnQgcGFyYSBldml0YXIgcXVlIGxhIGNvbnZlcnNhY2nDs24gc2FsdGUgYXJyaWJhLlxuICBjb25zdCBleHBhbmRlZFJlZiA9IHVzZVJlZihleHBhbmRlZClcbiAgdXNlTGF5b3V0RWZmZWN0KCgpID0+IHtcbiAgICBpZiAoXG4gICAgICBzaG91bGRSZXN0b3JlU2Nyb2xsT25FeHBhbmRlZENoYW5nZShCb29sZWFuKGV4cGFuZGVkUmVmLmN1cnJlbnQpLCBCb29sZWFuKGV4cGFuZGVkKSwgQm9vbGVhbihtZXNzYWdlc1JlZi5jdXJyZW50KSlcbiAgICApIHtcbiAgICAgIGNvbnN0IHNhdmVkU2Nyb2xsVG9wID0gbGFzdFNjcm9sbFRvcFJlZi5jdXJyZW50XG4gICAgICBtZXNzYWdlc1JlZi5jdXJyZW50IS5zY3JvbGxUb3AgPSBzYXZlZFNjcm9sbFRvcFxuICAgIH1cbiAgICBleHBhbmRlZFJlZi5jdXJyZW50ID0gZXhwYW5kZWRcbiAgfSwgW2V4cGFuZGVkXSlcblxuICBpZiAobG9hZGluZ01lc3NhZ2VzKSB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxGYWRlIGZpbGw+XG4gICAgICAgIDxMb2FkZXIgLz5cbiAgICAgIDwvRmFkZT5cbiAgICApXG4gIH1cblxuICBjb25zdCBsYXN0TWVzc2FnZSA9IG1lc3NhZ2VzW21lc3NhZ2VzLmxlbmd0aCAtIDFdXG4gIGNvbnN0IGhhc01lc3NhZ2VMZXZlbEluZGljYXRvciA9IGhhc01lc3NhZ2VMZXZlbFN0cmVhbUluZGljYXRvcihsYXN0TWVzc2FnZT8uaWQsIHdhaXRpbmdSZXNwb25zZSwgaXNXcml0aW5nKVxuXG4gIGNvbnN0IG1lc3NhZ2VzQ29udGVudCA9IChcbiAgICA8PlxuICAgICAge2lzTG9hZGluZ01vcmVNZXNzYWdlcyAmJiA8TG9hZGluZ1RleHQgdGV4dD17dCgnY2hhdC5sb2FkaW5nTW9yZScpfSAvPn1cbiAgICAgIDw+XG4gICAgICAgIHttZXNzYWdlcy5tYXAoKG1lc3NhZ2UsIGluZGV4KSA9PiB7XG4gICAgICAgICAgY29uc3QgaXNMYXN0TWVzc2FnZSA9IGluZGV4ID09PSBtZXNzYWdlcy5sZW5ndGggLSAxXG4gICAgICAgICAgY29uc3QgeyBpc1N0cmVhbWluZ1BsYWNlaG9sZGVyLCBpc1N0cmVhbWluZyB9ID0gcmVzb2x2ZUNoYXRMaXN0SXRlbVN0cmVhbWluZ0ZsYWdzKHtcbiAgICAgICAgICAgIHJvbGU6IG1lc3NhZ2Uucm9sZSxcbiAgICAgICAgICAgIHVzZXJJZDogbWVzc2FnZS51c2VyLmlkLFxuICAgICAgICAgICAgbWVzc2FnZUlkOiBtZXNzYWdlLmlkLFxuICAgICAgICAgICAgaXNMYXN0TWVzc2FnZSxcbiAgICAgICAgICAgIHdhaXRpbmdSZXNwb25zZSxcbiAgICAgICAgICAgIGlzV3JpdGluZyxcbiAgICAgICAgICB9KVxuXG4gICAgICAgICAgLy8gTm8gZmlsdHJhciBlbCBwbGFjZWhvbGRlciBkZWwgbWVuc2FqZSBlbiBzdHJlYW1pbmc6IHN1IHRleHRvIHZpdmVcbiAgICAgICAgICAvLyBlbiBlbCBzdHJlYW1pbmdTdG9yZSB5IGBtZXNzYWdlLm1lc3NhZ2VgIGVzICcnIGhhc3RhIGVsIGNvbXBsZXRlLlxuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIHNob3VsZFNraXBFbXB0eUNoYXRMaXN0TWVzc2FnZSh7XG4gICAgICAgICAgICAgIGlzU3RyZWFtaW5nUGxhY2Vob2xkZXIsXG4gICAgICAgICAgICAgIGlzU3RyZWFtaW5nLFxuICAgICAgICAgICAgICBhdHRhY2htZW50Q291bnQ6IG1lc3NhZ2UuYXR0YWNobWVudHM/Lmxlbmd0aCA/PyAwLFxuICAgICAgICAgICAgICBzb3VyY2VDb3VudDogbWVzc2FnZS5zb3VyY2VzPy5sZW5ndGggPz8gMCxcbiAgICAgICAgICAgICAgbWVzc2FnZVRleHQ6IG1lc3NhZ2UubWVzc2FnZSA/PyAnJyxcbiAgICAgICAgICAgICAgcHJvamVjdE5hbWU6IG1lc3NhZ2UucHJvamVjdD8ubmFtZSxcbiAgICAgICAgICAgICAgaGFzQXBwcm92YWw6IEJvb2xlYW4obWVzc2FnZS5hcHByb3ZhbCksXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGxcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCBtZXNzYWdlRmVlZGJhY2sgPSByZXNvbHZlRGlzYWJsZUZlZWRiYWNrRnJvbVdhc0hlbHBmdWwobWVzc2FnZT8ud2FzSGVscGZ1bClcblxuICAgICAgICAgIC8vIEtleSBlc3RhYmxlOiBzb2xvIG1lc3NhZ2UuaWQgcGFyYSBldml0YXIgcmVtb3VudCBkdXJhbnRlIHN0cmVhbWluZyAobWVzc2FnZS5kYXRlIHB1ZWRlIGNhbWJpYXIpXG4gICAgICAgICAgY29uc3QgbWVzc2FnZUtleSA9IHJlc29sdmVNZXNzYWdlTGlzdEl0ZW1LZXkobWVzc2FnZS5pZCwgaW5kZXgpXG5cbiAgICAgICAgICBjb25zdCB0dXJuSWQgPSByZXNvbHZlUmV0cnlUdXJuSWQobWVzc2FnZSlcbiAgICAgICAgICBjb25zdCB1c2VyTWVzc2FnZUZvclJldHJ5ID0gZmluZFVzZXJNZXNzYWdlRm9yUmV0cnkobWVzc2FnZXMsIG1lc3NhZ2UpXG4gICAgICAgICAgY29uc3QgY2FuUmV0cnkgPSBjYW5SZXRyeUFzc2lzdGFudE1lc3NhZ2Uoe1xuICAgICAgICAgICAgaGFzVXNlck1lc3NhZ2VGb3JSZXRyeTogQm9vbGVhbih1c2VyTWVzc2FnZUZvclJldHJ5KSxcbiAgICAgICAgICAgIGlzU3RyZWFtaW5nLFxuICAgICAgICAgICAgaXNFcnJvcjogQm9vbGVhbihtZXNzYWdlLmlzRXJyb3IpLFxuICAgICAgICAgICAgaGFzQXBwcm92YWw6IEJvb2xlYW4obWVzc2FnZS5hcHByb3ZhbCksXG4gICAgICAgICAgICBpc0Zyb250ZW5kQ2FuY2VsbGVkOiBtZXNzYWdlLmlzRnJvbnRlbmRDYW5jZWxsZWQsXG4gICAgICAgICAgICBpc0NhbmNlbGxlZDogbWVzc2FnZS5pc19jYW5jZWxsZWQsXG4gICAgICAgICAgICB0dXJuSWQsXG4gICAgICAgICAgfSlcblxuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8TWVzc2FnZUl0ZW1cbiAgICAgICAgICAgICAgey4uLm1lc3NhZ2V9XG4gICAgICAgICAgICAgIGtleT17bWVzc2FnZUtleX1cbiAgICAgICAgICAgICAgYXV0aFVzZXI9e2F1dGhVc2VyfVxuICAgICAgICAgICAgICBoYW5kbGVTZWxlY3RPcHRpb249e2hhbmRsZVNlbGVjdE9wdGlvbn1cbiAgICAgICAgICAgICAgaGFuZGxlRmVlZGJhY2s9e2hhbmRsZUZlZWRiYWNrfVxuICAgICAgICAgICAgICBoYW5kbGVBcHByb3ZhbERlY2lzaW9uPXtoYW5kbGVBcHByb3ZhbERlY2lzaW9ufVxuICAgICAgICAgICAgICBoYW5kbGVTdWdnZXN0aW9uQ2xpY2s9e2hhbmRsZVN1Z2dlc3Rpb25DbGlja31cbiAgICAgICAgICAgICAgaGFuZGxlUmV0cnk9e2NhblJldHJ5ID8gKCkgPT4gcmV0cnlNZXNzYWdlKG1lc3NhZ2UpIDogdW5kZWZpbmVkfVxuICAgICAgICAgICAgICBoYXNTZWxlY3RlZFN1Z2dlc3Rpb249eyEhc2VsZWN0ZWRTdWdnZXN0aW9uTWVzc2FnZUlkc1ttZXNzYWdlLmlkXX1cbiAgICAgICAgICAgICAgZGlzYWJsZUZlZWRiYWNrPXttZXNzYWdlRmVlZGJhY2t9XG4gICAgICAgICAgICAgIGlzU3RyZWFtaW5nPXtpc1N0cmVhbWluZ31cbiAgICAgICAgICAgICAgaXNMYXN0TWVzc2FnZT17aXNMYXN0TWVzc2FnZX1cbiAgICAgICAgICAgICAgZXhwYW5kZWQ9e2V4cGFuZGVkfVxuICAgICAgICAgICAgICBzdHJlYW1BY3Rpdml0eT17aXNTdHJlYW1pbmcgPyBzdHJlYW1Mb2FkaW5nRGlzcGxheSA6IG51bGx9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgIClcbiAgICAgICAgfSl9XG4gICAgICA8Lz5cbiAgICAgIHtzdHJlYW1Mb2FkaW5nRGlzcGxheSAmJlxuICAgICAgICBzaG91bGRTaG93R2xvYmFsU3RyZWFtTG9hZGluZ0luZGljYXRvcihoYXNNZXNzYWdlTGV2ZWxJbmRpY2F0b3IsIHN0cmVhbUxvYWRpbmdEaXNwbGF5KSAmJiAoXG4gICAgICAgICAgPFNDTG9hZGluZ01lc3NhZ2VzQ29sdW1uPlxuICAgICAgICAgICAgPEFnZW50QWN0aXZpdHlJbmRpY2F0b3IgYWN0aXZpdHk9e3N0cmVhbUxvYWRpbmdEaXNwbGF5fSAvPlxuICAgICAgICAgIDwvU0NMb2FkaW5nTWVzc2FnZXNDb2x1bW4+XG4gICAgICAgICl9XG4gICAgICB7LyogRXNwYWNpbyBxdWUgbGUgcGVybWl0ZSBhIGxhIHByZWd1bnRhIHN1YmlyIGFsIHRvcGUuIEFsdHVyYSBtYW5lamFkYVxuICAgICAgICAgIGltcGVyYXRpdmFtZW50ZSBkZXNkZSBgc2V0U3BhY2VySGVpZ2h0YDsgYXJyYW5jYSBlbiAwLiAqL31cbiAgICAgIDxTQ1R1cm5TcGFjZXIgcmVmPXtzcGFjZXJFbFJlZn0gYXJpYS1oaWRkZW49XCJ0cnVlXCIgLz5cbiAgICA8Lz5cbiAgKVxuXG4gIHJldHVybiAoXG4gICAgLy8gU2kgZWwgdXN1YXJpbyBtdWV2ZSBlbCBzY3JvbGwgYWJvcnRhbW9zIGxhIGFuaW1hY2nDs24geSBzb2x0YW1vcyBlbCB0dXJubzpcbiAgICAvLyBubyBsZSBwZWxlYW1vcyBlbCBjb250cm9sIGRlbCBjb250ZW5lZG9yLlxuICAgIDxTQ01lc3NhZ2VzT3V0ZXJcbiAgICAgICRzY3JvbGxPblBhcmVudD17aXNTY3JvbGxPblBhcmVudH1cbiAgICAgIG9uV2hlZWw9e2hhbmRsZVVzZXJTY3JvbGxJbnRlbnR9XG4gICAgICBvblRvdWNoU3RhcnQ9e2hhbmRsZVVzZXJTY3JvbGxJbnRlbnR9XG4gICAgPlxuICAgICAgPFNDTWVzc2FnZXNHcmFkaWVudFRvcCAkc2hvdz17c2hvd1RvcEdyYWRpZW50fSBhcmlhLWhpZGRlbj1cInRydWVcIiAvPlxuICAgICAge2lzU2Nyb2xsT25QYXJlbnQgPyAoXG4gICAgICAgIDxTQ01lc3NhZ2VzU2Nyb2xsIHJlZj17bWVzc2FnZXNSZWZ9IG9uU2Nyb2xsPXtoYW5kbGVTY3JvbGxUb0JvdHRvbX0+XG4gICAgICAgICAgPFNDTWVzc2FnZXNJbm5lciAkc2Nyb2xsT25QYXJlbnQ9e2lzU2Nyb2xsT25QYXJlbnR9PnttZXNzYWdlc0NvbnRlbnR9PC9TQ01lc3NhZ2VzSW5uZXI+XG4gICAgICAgIDwvU0NNZXNzYWdlc1Njcm9sbD5cbiAgICAgICkgOiAoXG4gICAgICAgIDxTQ01lc3NhZ2VzSW5uZXIgcmVmPXttZXNzYWdlc1JlZn0gb25TY3JvbGw9e2hhbmRsZVNjcm9sbFRvQm90dG9tfSAkc2Nyb2xsT25QYXJlbnQ9e2ZhbHNlfT5cbiAgICAgICAgICB7bWVzc2FnZXNDb250ZW50fVxuICAgICAgICA8L1NDTWVzc2FnZXNJbm5lcj5cbiAgICAgICl9XG5cbiAgICAgIDxTQ01lc3NhZ2VzR3JhZGllbnRCb3R0b20gJHNob3c9e3Nob3dCb3R0b21HcmFkaWVudH0gYXJpYS1oaWRkZW49XCJ0cnVlXCIgLz5cblxuICAgICAge3Nob3dTY3JvbGxUb0JvdHRvbSAmJiAoXG4gICAgICAgIDxTY3JvbGxUb0JvdHRvbUJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgb25DbGljaz17aGFuZGxlQ2xpY2tTY3JvbGxUb0JvdHRvbX0+XG4gICAgICAgICAgPFNDU2Nyb2xsSWNvblN3YXAgJHZpc2libGU9e2lzV3JpdGluZ30gYXJpYS1oaWRkZW4+XG4gICAgICAgICAgICA8U0NXcml0aW5nRG90cz5cbiAgICAgICAgICAgICAgPHNwYW4gLz5cbiAgICAgICAgICAgICAgPHNwYW4gLz5cbiAgICAgICAgICAgICAgPHNwYW4gLz5cbiAgICAgICAgICAgIDwvU0NXcml0aW5nRG90cz5cbiAgICAgICAgICA8L1NDU2Nyb2xsSWNvblN3YXA+XG4gICAgICAgICAgPFNDU2Nyb2xsSWNvblN3YXAgJHZpc2libGU9eyFpc1dyaXRpbmd9IGFyaWEtaGlkZGVuPlxuICAgICAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9ezEyfSBoZWlnaHQ9ezEyfSBmaWxsPVwibm9uZVwiPlxuICAgICAgICAgICAgICA8cGF0aFxuICAgICAgICAgICAgICAgIHN0cm9rZT1cIiMyMDIwMjBcIlxuICAgICAgICAgICAgICAgIHN0cm9rZUxpbmVjYXA9XCJyb3VuZFwiXG4gICAgICAgICAgICAgICAgc3Ryb2tlTGluZWpvaW49XCJyb3VuZFwiXG4gICAgICAgICAgICAgICAgc3Ryb2tlV2lkdGg9ezEuNX1cbiAgICAgICAgICAgICAgICBkPVwiTTYgLjc1djEwLjVNLjc1IDYgNiAxMS4yNSAxMS4yNSA2XCJcbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgIDwvU0NTY3JvbGxJY29uU3dhcD5cbiAgICAgICAgPC9TY3JvbGxUb0JvdHRvbUJ1dHRvbj5cbiAgICAgICl9XG4gICAgPC9TQ01lc3NhZ2VzT3V0ZXI+XG4gIClcbn1cblxuZXhwb3J0IGNvbnN0IENoYXRBSU1lc3NhZ2VzID0gUmVhY3QubWVtbyhDaGF0QUlNZXNzYWdlc0lubmVyKVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBQTtBQUNBO0FBQ0E7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