@projectcor/maia-components 2.44.5-0 → 2.45.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 (428) hide show
  1. package/README.md +2 -0
  2. package/lib/App.js +19 -44
  3. package/lib/components/atoms/AttachmentCard/AttachmentCardAudio.js +51 -5
  4. package/lib/components/atoms/AttachmentPreviewModal/AttachmentPreviewModal.js +76 -18
  5. package/lib/components/atoms/AttachmentPreviewModal/PptPreview.js +31 -3
  6. package/lib/components/atoms/AttachmentPreviewModal/WordPreview.js +4 -2
  7. package/lib/components/atoms/ContextMentionChip/buildChipElement.js +255 -15
  8. package/lib/components/atoms/ContextMentionEditor/ContextMentionEditor.js +34 -5
  9. package/lib/components/atoms/FrequentlyUsedActions/FrequentlyUsedActions.js +1 -3
  10. package/lib/components/atoms/FrequentlyUsedActions/FrequentlyUsedActions.styles.js +7 -19
  11. package/lib/components/atoms/MAIAInput/MAIAInput.js +10 -4
  12. package/lib/components/atoms/MAIAInput/MAIAInputEditor.js +60 -8
  13. package/lib/components/atoms/OnboardingModalButton/OnboardingModalButton.js +15 -3
  14. package/lib/components/atoms/ReasoningBlock/ReasoningBlock.js +2 -7
  15. package/lib/components/atoms/ReasoningBlock/ReasoningBlock.styles.js +16 -21
  16. package/lib/components/atoms/ReasoningBlock/ReasoningSteps.js +5 -7
  17. package/lib/components/atoms/ReasoningBlock/ReasoningTimeline.js +52 -72
  18. package/lib/components/atoms/ReasoningBlock/reasoningLeading.js +1 -6
  19. package/lib/components/atoms/ReasoningBlock/reasoningLiveNarration.js +15 -36
  20. package/lib/components/index.js +1 -2
  21. package/lib/components/molecules/AbmSection/AbmAccessibilitySection/AbmAccessibilitySection.js +29 -5
  22. package/lib/components/molecules/AbmSection/AbmGeneralSection.js +40 -6
  23. package/lib/components/molecules/AbmSection/AbmKnowledgeSection.js +90 -18
  24. package/lib/components/molecules/AbmSection/AbmLoaderFiles.js +15 -5
  25. package/lib/components/molecules/ChatAIContent/ChatAIContent.js +3 -7
  26. package/lib/components/molecules/ChatAIHome/ChatAIHome.js +6 -21
  27. package/lib/components/molecules/ChatAIMessages/ChatAIMessages.js +47 -19
  28. package/lib/components/molecules/ChatAIMessages/newStyles.js +26 -29
  29. package/lib/components/molecules/ChatAIModal/ChatAIModal.helpers.js +4 -147
  30. package/lib/components/molecules/ChatAIModal/ChatAIModal.js +108 -64
  31. package/lib/components/molecules/ChatAIModal/components/ChatAiAgentOptions/ChatAiAgentOptions.js +2 -3
  32. package/lib/components/molecules/ChatAIModal/components/ChatAiModalFooter/ChatAiModalFooter.js +153 -15
  33. package/lib/components/molecules/ChatAIModal/components/ChatAiModalFooter/ChatAiModalFooter.styles.js +26 -2
  34. package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.js +86 -76
  35. package/lib/components/molecules/ChatFooter/ChatFooter.js +3 -5
  36. package/lib/components/molecules/ChatFooter/ChatFooterFaqs.js +44 -9
  37. package/lib/components/molecules/Sidebar/Sidebar.js +23 -41
  38. package/lib/components/organisms/AbmAgentModal/AbmAgentModal.js +171 -56
  39. package/lib/constants/permissions/index.js +2 -2
  40. package/lib/constants/permissions/utils.js +1 -4
  41. package/lib/dev/DevReasoningTimeline.js +37 -68
  42. package/lib/dev/Providers.js +3 -5
  43. package/lib/hooks/useChatManager/useChatManager.js +351 -76
  44. package/lib/hooks/useChatMessages/useChatMessages.js +82 -12
  45. package/lib/hooks/useClientSearch.js +32 -4
  46. package/lib/hooks/useContextMentions.js +163 -2
  47. package/lib/hooks/useContextPinPopover.js +75 -16
  48. package/lib/hooks/useEntitySearch.js +391 -38
  49. package/lib/hooks/useFrequentlyUsedActions.js +22 -60
  50. package/lib/hooks/useMentionPopover.js +35 -9
  51. package/lib/hooks/useMinimizedPillBottomOffset.js +45 -15
  52. package/lib/hooks/useProjectSearch.js +58 -4
  53. package/lib/hooks/useProjectSummaryConfig.js +52 -14
  54. package/lib/hooks/useRecentClientsSearch.js +32 -4
  55. package/lib/index.js +2 -5
  56. package/lib/lang/approvalBoxToolActions.js +492 -0
  57. package/lib/lang/br/index.js +23 -59
  58. package/lib/lang/en/index.js +23 -59
  59. package/lib/lang/es/index.js +23 -59
  60. package/lib/lang/fr/index.js +23 -59
  61. package/lib/services/maia/Actions/getFrequentlyUsedActions.js +1 -1
  62. package/lib/services/maia/Agents/getAgents.js +242 -78
  63. package/lib/services/maia/Orchestrator/orchestrator.js +121 -38
  64. package/lib/store/sessions/sessionNotifications.js +41 -35
  65. package/lib/store/sessions/sessionStreamManager.js +52 -40
  66. package/lib/styles/cascade.js +3 -29
  67. package/lib/styles/transitions.js +1 -3
  68. package/lib/types/agentModal.js +1 -1
  69. package/lib/types/global.d.js +1 -1
  70. package/lib/utils/hoursPlannerQuickActionType.js +1 -74
  71. package/lib/utils/imagePreprocessor.js +37 -12
  72. package/lib/utils/streamActivityMessages.js +60 -32
  73. package/package.json +1 -1
  74. package/lib/components/atoms/ActionableButton.spec.js +0 -111
  75. package/lib/components/atoms/AgentActivityIndicator/AgentActivityIndicator.spec.js +0 -52
  76. package/lib/components/atoms/AgentActivityIndicator/AgentActivityIndicator.utils.spec.js +0 -11
  77. package/lib/components/atoms/ApprovalBox/ApprovalBox.spec.js +0 -135
  78. package/lib/components/atoms/AttachmentCard/AttachmentCard.spec.js +0 -123
  79. package/lib/components/atoms/AttachmentCard/AttachmentCardAudio.helpers.js +0 -65
  80. package/lib/components/atoms/AttachmentCard/AttachmentCardAudio.helpers.spec.js +0 -66
  81. package/lib/components/atoms/AttachmentCard/AttachmentCardAudio.spec.js +0 -211
  82. package/lib/components/atoms/AttachmentCard/AttachmentCardImage.spec.js +0 -78
  83. package/lib/components/atoms/AttachmentPreviewModal/AttachmentPreviewModal.helpers.js +0 -55
  84. package/lib/components/atoms/AttachmentPreviewModal/AttachmentPreviewModal.helpers.spec.js +0 -41
  85. package/lib/components/atoms/AttachmentPreviewModal/AttachmentPreviewModal.spec.js +0 -253
  86. package/lib/components/atoms/AttachmentPreviewModal/ExcelPreview.spec.js +0 -80
  87. package/lib/components/atoms/AttachmentPreviewModal/PptPreview.helpers.js +0 -31
  88. package/lib/components/atoms/AttachmentPreviewModal/PptPreview.helpers.spec.js +0 -33
  89. package/lib/components/atoms/AttachmentPreviewModal/PptPreview.spec.js +0 -25
  90. package/lib/components/atoms/AttachmentPreviewModal/WordPreview.helpers.js +0 -4
  91. package/lib/components/atoms/AttachmentPreviewModal/WordPreview.helpers.spec.js +0 -11
  92. package/lib/components/atoms/AttachmentPreviewModal/WordPreview.spec.js +0 -77
  93. package/lib/components/atoms/Backdrop/Backdrop.spec.js +0 -28
  94. package/lib/components/atoms/CardMenu/CardMenu.spec.js +0 -56
  95. package/lib/components/atoms/ChatClientSelector/ChatClientSelector.spec.js +0 -67
  96. package/lib/components/atoms/Checkbox/Checkbox.spec.js +0 -27
  97. package/lib/components/atoms/Chip/Chip.spec.js +0 -82
  98. package/lib/components/atoms/ChipLlm/ChipLlm.spec.js +0 -26
  99. package/lib/components/atoms/ClientSelector/ClientSelector.spec.js +0 -88
  100. package/lib/components/atoms/ContextMentionChip/ContextMentionChip.spec.js +0 -29
  101. package/lib/components/atoms/ContextMentionChip/MentionOverflowLabel.spec.js +0 -46
  102. package/lib/components/atoms/ContextMentionChip/buildChipElement.helpers.js +0 -227
  103. package/lib/components/atoms/ContextMentionChip/buildChipElement.helpers.spec.js +0 -77
  104. package/lib/components/atoms/ContextMentionChip/buildChipElement.spec.js +0 -81
  105. package/lib/components/atoms/ContextMentionEditor/ContextMentionEditor.helpers.js +0 -31
  106. package/lib/components/atoms/ContextMentionEditor/ContextMentionEditor.helpers.spec.js +0 -48
  107. package/lib/components/atoms/ContextMentionEditor/ContextMentionEditor.spec.js +0 -231
  108. package/lib/components/atoms/ContextMentionItem/ContextMentionItem.spec.js +0 -107
  109. package/lib/components/atoms/ContextMentionPopover/ContextMentionPopover.spec.js +0 -136
  110. package/lib/components/atoms/CopyToClipboard.spec.js +0 -74
  111. package/lib/components/atoms/EditableLabel/EditableLabel.spec.js +0 -76
  112. package/lib/components/atoms/EntitySelector/EntitySelector.spec.js +0 -86
  113. package/lib/components/atoms/Expand/Expand.spec.js +0 -57
  114. package/lib/components/atoms/Fade/Fade.spec.js +0 -31
  115. package/lib/components/atoms/FeedbackButton/FeedbackButton.spec.js +0 -75
  116. package/lib/components/atoms/FrequentlyAskedQuestions/FrequentlyAskedQuestions.spec.js +0 -104
  117. package/lib/components/atoms/FrequentlyUsedActions/FrequentlyUsedActions.spec.js +0 -91
  118. package/lib/components/atoms/HelpButton.spec.js +0 -87
  119. package/lib/components/atoms/ImagePreview/ImagePreview.spec.js +0 -96
  120. package/lib/components/atoms/ListMenuOption/ListMenuOption.spec.js +0 -54
  121. package/lib/components/atoms/LoadingFaqs/LoadingFaqs.spec.js +0 -21
  122. package/lib/components/atoms/LoadingSearchClients/LoadingSearchClients.spec.js +0 -20
  123. package/lib/components/atoms/LoadingSearchProjects/LoadingSearchProjects.spec.js +0 -26
  124. package/lib/components/atoms/LoadingText/LoadingText.spec.js +0 -25
  125. package/lib/components/atoms/MAIAButton/MAIAButton.spec.js +0 -42
  126. package/lib/components/atoms/MAIAError/MAIAError.spec.js +0 -27
  127. package/lib/components/atoms/MAIAInput/MAIAInput.helpers.js +0 -12
  128. package/lib/components/atoms/MAIAInput/MAIAInput.helpers.spec.js +0 -26
  129. package/lib/components/atoms/MAIAInput/MAIAInput.spec.js +0 -430
  130. package/lib/components/atoms/MAIAInput/MAIAInputEditor.helpers.js +0 -50
  131. package/lib/components/atoms/MAIAInput/MAIAInputEditor.helpers.spec.js +0 -20
  132. package/lib/components/atoms/MAIAInput/MAIAInputEditor.spec.js +0 -53
  133. package/lib/components/atoms/MAIAInput/maiaInputLayout.spec.js +0 -22
  134. package/lib/components/atoms/MaiaStreamdown/MaiaStreamdown.spec.js +0 -64
  135. package/lib/components/atoms/MaiaWrapper/MaiaWrapper.spec.js +0 -43
  136. package/lib/components/atoms/MaiaWrapper/MaiaWrapperBase.spec.js +0 -114
  137. package/lib/components/atoms/MaiaWrapper/ModernMaiaWrapper.spec.js +0 -51
  138. package/lib/components/atoms/ModalClientAccess/ModalClientAccess.spec.js +0 -48
  139. package/lib/components/atoms/ModalProject/ModalProject.spec.js +0 -66
  140. package/lib/components/atoms/NextPageLoader.spec.js +0 -37
  141. package/lib/components/atoms/OnboardingModalButton/OnboardingModal.spec.js +0 -20
  142. package/lib/components/atoms/OnboardingModalButton/OnboardingModalButton.helpers.js +0 -17
  143. package/lib/components/atoms/OnboardingModalButton/OnboardingModalButton.helpers.spec.js +0 -35
  144. package/lib/components/atoms/OnboardingModalButton/OnboardingModalButton.spec.js +0 -47
  145. package/lib/components/atoms/OptionAccessibility/OptionAccessibility.spec.js +0 -86
  146. package/lib/components/atoms/PrimaryButton.spec.js +0 -42
  147. package/lib/components/atoms/ProjectSelector/ProjectSelector.spec.js +0 -69
  148. package/lib/components/atoms/ReasoningBlock/ReasoningBlock.spec.js +0 -69
  149. package/lib/components/atoms/ReasoningBlock/ReasoningSteps.spec.js +0 -59
  150. package/lib/components/atoms/ReasoningBlock/ReasoningTimeline.spec.js +0 -132
  151. package/lib/components/atoms/ReasoningBlock/groupParallelSteps.spec.js +0 -162
  152. package/lib/components/atoms/ReasoningBlock/reasoningLeading.spec.js +0 -70
  153. package/lib/components/atoms/ReasoningBlock/reasoningLiveNarration.spec.js +0 -120
  154. package/lib/components/atoms/ReasoningBlock/reasoningMotion.js +0 -4
  155. package/lib/components/atoms/ReasoningBlock/reasoningTimeline.helpers.js +0 -10
  156. package/lib/components/atoms/ReasoningBlock/reasoningTimeline.helpers.spec.js +0 -31
  157. package/lib/components/atoms/ReasoningBlock/useCollapsibleHeight.js +0 -52
  158. package/lib/components/atoms/ReasoningBlock/useCollapsibleHeight.spec.js +0 -90
  159. package/lib/components/atoms/SessionGeneratingDot/SessionGeneratingDot.spec.js +0 -16
  160. package/lib/components/atoms/SkillsDropdown/SkillsDropdown.spec.js +0 -107
  161. package/lib/components/atoms/SlashCommandChip/SlashCommandChip.spec.js +0 -24
  162. package/lib/components/atoms/SlashCommandDropdown/SlashCommandDropdown.spec.js +0 -85
  163. package/lib/components/atoms/Switch/Switch.spec.js +0 -41
  164. package/lib/components/atoms/TextArea/CustomTextArea.spec.js +0 -52
  165. package/lib/components/atoms/TextArea/TextArea.spec.js +0 -68
  166. package/lib/components/atoms/ThirdButton.spec.js +0 -29
  167. package/lib/components/atoms/VideoModal/VideoModal.spec.js +0 -68
  168. package/lib/components/atoms/WithAppCfg.spec.js +0 -60
  169. package/lib/components/molecules/AbmSection/AbmAccessibilitySection/AbmAccessibilitySection.helpers.js +0 -37
  170. package/lib/components/molecules/AbmSection/AbmAccessibilitySection/AbmAccessibilitySection.helpers.spec.js +0 -53
  171. package/lib/components/molecules/AbmSection/AbmAccessibilitySection/AbmAccessibilitySection.spec.js +0 -371
  172. package/lib/components/molecules/AbmSection/AbmGeneralSection.helpers.js +0 -39
  173. package/lib/components/molecules/AbmSection/AbmGeneralSection.helpers.spec.js +0 -57
  174. package/lib/components/molecules/AbmSection/AbmGeneralSection.spec.js +0 -227
  175. package/lib/components/molecules/AbmSection/AbmKnowledgeSection.helpers.js +0 -86
  176. package/lib/components/molecules/AbmSection/AbmKnowledgeSection.helpers.spec.js +0 -108
  177. package/lib/components/molecules/AbmSection/AbmKnowledgeSection.spec.js +0 -254
  178. package/lib/components/molecules/AbmSection/AbmLoaderFiles.helpers.js +0 -17
  179. package/lib/components/molecules/AbmSection/AbmLoaderFiles.helpers.spec.js +0 -50
  180. package/lib/components/molecules/AbmSection/AbmLoaderFiles.spec.js +0 -94
  181. package/lib/components/molecules/AgentInputBlock/AgentInputBlockMessage.js +0 -83
  182. package/lib/components/molecules/AgentInputBlock/AgentInputBlockMessage.styles.js +0 -30
  183. package/lib/components/molecules/AgentInputBlock/index.js +0 -5
  184. package/lib/components/molecules/AgentInputBlock/resolveAgentInputBlock.js +0 -52
  185. package/lib/components/molecules/AgentInputBlock/resolveAgentInputBlock.spec.js +0 -76
  186. package/lib/components/molecules/AgentInputBlock/resolveLegacyContextSession.js +0 -20
  187. package/lib/components/molecules/AgentInputBlock/resolveLegacyContextSession.spec.js +0 -34
  188. package/lib/components/molecules/AgentInputBlock/useAgentChangeModelAction.js +0 -36
  189. package/lib/components/molecules/ChatAIClientSelector/ChatAIClientSelector.spec.js +0 -66
  190. package/lib/components/molecules/ChatAIContent/ChatAIContent.spec.js +0 -145
  191. package/lib/components/molecules/ChatAIHistory/ChatAIHistory.spec.js +0 -204
  192. package/lib/components/molecules/ChatAIHome/ChatAIHome.spec.js +0 -246
  193. package/lib/components/molecules/ChatAIHome/ChatAIHomeMaiaker.spec.js +0 -86
  194. package/lib/components/molecules/ChatAIMessages/ChatAICreateAgentActions.spec.js +0 -104
  195. package/lib/components/molecules/ChatAIMessages/ChatAIMessages.helpers.js +0 -54
  196. package/lib/components/molecules/ChatAIMessages/ChatAIMessages.helpers.spec.js +0 -77
  197. package/lib/components/molecules/ChatAIMessages/ChatAIMessages.spec.js +0 -410
  198. package/lib/components/molecules/ChatAIMessages/ChatAISuggestions.spec.js +0 -46
  199. package/lib/components/molecules/ChatAIModal/ChatAIModal.helpers.spec.js +0 -471
  200. package/lib/components/molecules/ChatAIModal/ChatAIModal.spec.js +0 -659
  201. package/lib/components/molecules/ChatAIModal/components/ChatAiAgentOptions/ChatAiAgentOptions.helpers.js +0 -5
  202. package/lib/components/molecules/ChatAIModal/components/ChatAiAgentOptions/ChatAiAgentOptions.helpers.spec.js +0 -33
  203. package/lib/components/molecules/ChatAIModal/components/ChatAiAgentOptions/ChatAiAgentOptions.spec.js +0 -116
  204. package/lib/components/molecules/ChatAIModal/components/ChatAiModalFooter/ChatAiModalFooter.spec.js +0 -134
  205. package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.helpers.js +0 -30
  206. package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.helpers.spec.js +0 -95
  207. package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.spec.js +0 -241
  208. package/lib/components/molecules/ChatAIModal/components/MaiaMinimizedPill/MaiaMinimizedPill.spec.js +0 -37
  209. package/lib/components/molecules/ChatAIModal/constants.spec.js +0 -16
  210. package/lib/components/molecules/ChatAIModal/floatingPanelMotion/FloatingPanelMotion.spec.js +0 -22
  211. package/lib/components/molecules/ChatAIModal/floatingPanelMotion/useFloatingPanelDragTilt.spec.js +0 -67
  212. package/lib/components/molecules/ChatAIModal/layout.spec.js +0 -72
  213. package/lib/components/molecules/ChatAIMyAgents/ChatAIMyAgents.spec.js +0 -172
  214. package/lib/components/molecules/ChatAIMySkills/ChatAIMySkills.spec.js +0 -128
  215. package/lib/components/molecules/ChatAIProjectSelector/ChatAIProjectSelector.spec.js +0 -66
  216. package/lib/components/molecules/ChatFooter/ChatFooter.spec.js +0 -355
  217. package/lib/components/molecules/ChatFooter/ChatFooterCorAccess.spec.js +0 -10
  218. package/lib/components/molecules/ChatFooter/ChatFooterFaqs.helpers.js +0 -48
  219. package/lib/components/molecules/ChatFooter/ChatFooterFaqs.helpers.spec.js +0 -82
  220. package/lib/components/molecules/ChatFooter/ChatFooterFaqs.spec.js +0 -139
  221. package/lib/components/molecules/ContextMentionInput/ContextMentionInput.spec.js +0 -84
  222. package/lib/components/molecules/MessageFeedback/MessageFeedback.spec.js +0 -116
  223. package/lib/components/molecules/ProjectSummaryChat/ProjectSummaryChat.spec.js +0 -126
  224. package/lib/components/molecules/ProjectSummaryConfig/ProjectSummaryConfig.spec.js +0 -115
  225. package/lib/components/molecules/ProjectSummaryContent/ProjectSummaryContent.spec.js +0 -79
  226. package/lib/components/molecules/ProjectSummaryModal/ProjectSummaryModal.spec.js +0 -37
  227. package/lib/components/molecules/Sidebar/Sidebar.spec.js +0 -453
  228. package/lib/components/organisms/AbmAgentModal/AbmAgentModal.helpers.js +0 -198
  229. package/lib/components/organisms/AbmAgentModal/AbmAgentModal.helpers.spec.js +0 -385
  230. package/lib/components/organisms/AbmAgentModal/AbmAgentModal.spec.js +0 -1125
  231. package/lib/components/organisms/AbmSkillGenerateModal/AbmSkillGenerateModal.spec.js +0 -112
  232. package/lib/components/organisms/AbmSkillModal/AbmSkillModal.spec.js +0 -405
  233. package/lib/components/organisms/ChatAI/ChatAI.spec.js +0 -174
  234. package/lib/components/organisms/ChatAIPage/ChatAIPage.js +0 -525
  235. package/lib/components/organisms/ChatAIPage/ChatAIPage.spec.js +0 -231
  236. package/lib/components/organisms/ChatAIPage/ChatAIPage.styles.js +0 -16
  237. package/lib/components/organisms/ChatAIPage/ChatAIPageHeader.js +0 -253
  238. package/lib/components/organisms/ChatAIPage/ChatAIPageHeader.spec.js +0 -139
  239. package/lib/components/organisms/ChatAIPage/ChatAIPageHeader.styles.js +0 -13
  240. package/lib/components/organisms/ChatAIPage/ChatAIPageHome.js +0 -267
  241. package/lib/components/organisms/ChatAIPage/ChatAIPageHome.spec.js +0 -261
  242. package/lib/components/organisms/ChatAIPage/ChatAIPageHome.styles.js +0 -194
  243. package/lib/components/organisms/ChatAIPage/ChatAIPageHomeActionCardSlot.js +0 -105
  244. package/lib/components/organisms/ChatAIPage/ChatAIPageHomeActionCardSlot.spec.js +0 -73
  245. package/lib/components/organisms/ChatAIPage/ChatAIPageHomeActionCards.skeleton.js +0 -38
  246. package/lib/components/organisms/ChatAIPage/getDaypart.js +0 -9
  247. package/lib/components/organisms/ChatAIPage/getDaypart.spec.js +0 -19
  248. package/lib/components/organisms/ChatAIPage/index.js +0 -3
  249. package/lib/components/organisms/ClientAIButton/ClientAIButton.spec.js +0 -53
  250. package/lib/components/organisms/DeleteAgentModal/DeleteAgentModal.spec.js +0 -59
  251. package/lib/components/organisms/DeleteQuestionModal/DeleteQuestionModal.spec.js +0 -79
  252. package/lib/components/organisms/EditQuestionModal/EditQuestionModal.spec.js +0 -86
  253. package/lib/components/organisms/ModalFileExceeds/ModalFileExceeds.spec.js +0 -49
  254. package/lib/components/organisms/ProjectAIButton/ProjectAIButton.spec.js +0 -67
  255. package/lib/components/organisms/ProjectSummary/ProjectSummary.spec.js +0 -117
  256. package/lib/components/organisms/SnackBar/Snackbar.spec.js +0 -66
  257. package/lib/components/organisms/SourcesInformation/SourceItem.spec.js +0 -19
  258. package/lib/components/organisms/SourcesInformation/SourcesInformationModal.spec.js +0 -52
  259. package/lib/constants/maiaExternalConnectorsAccess.spec.js +0 -29
  260. package/lib/constants/permissions/utils.spec.js +0 -128
  261. package/lib/dev/DevMaiaPage.js +0 -30
  262. package/lib/hooks/frequentlyUsedActionsCache.js +0 -17
  263. package/lib/hooks/frequentlyUsedActionsCache.spec.js +0 -25
  264. package/lib/hooks/useAccessClient/useAccessClient.spec.js +0 -149
  265. package/lib/hooks/useAgentModel/useAgentModel.spec.js +0 -83
  266. package/lib/hooks/useAgentModel/useCreateAgent.spec.js +0 -231
  267. package/lib/hooks/useAgentModel/useDeleteAgent.spec.js +0 -183
  268. package/lib/hooks/useAgentModel/useUpdateAgent.spec.js +0 -313
  269. package/lib/hooks/useAgentSuggestions.spec.js +0 -89
  270. package/lib/hooks/useCaretPosition.spec.js +0 -58
  271. package/lib/hooks/useChatManager/useChatManager.helpers.js +0 -353
  272. package/lib/hooks/useChatManager/useChatManager.helpers.spec.js +0 -506
  273. package/lib/hooks/useChatManager/useChatManager.spec.js +0 -1261
  274. package/lib/hooks/useChatMessages/useChatMessages.helpers.js +0 -109
  275. package/lib/hooks/useChatMessages/useChatMessages.helpers.spec.js +0 -176
  276. package/lib/hooks/useChatMessages/useChatMessages.spec.js +0 -379
  277. package/lib/hooks/useChats/useChats.spec.js +0 -208
  278. package/lib/hooks/useClientSearch.helpers.js +0 -36
  279. package/lib/hooks/useClientSearch.helpers.spec.js +0 -52
  280. package/lib/hooks/useClientSearch.spec.js +0 -86
  281. package/lib/hooks/useContextMentions.helpers.js +0 -152
  282. package/lib/hooks/useContextMentions.helpers.spec.js +0 -143
  283. package/lib/hooks/useContextMentions.spec.js +0 -239
  284. package/lib/hooks/useContextMentions.types.js +0 -2
  285. package/lib/hooks/useContextPinPopover.helpers.js +0 -95
  286. package/lib/hooks/useContextPinPopover.helpers.spec.js +0 -115
  287. package/lib/hooks/useContextPinPopover.spec.js +0 -159
  288. package/lib/hooks/useContinueLegacyContextInNewChat/index.js +0 -2
  289. package/lib/hooks/useContinueLegacyContextInNewChat/useContinueLegacyContextInNewChat.js +0 -93
  290. package/lib/hooks/useDebounce.spec.js +0 -42
  291. package/lib/hooks/useEntitySearch.helpers.js +0 -359
  292. package/lib/hooks/useEntitySearch.helpers.spec.js +0 -321
  293. package/lib/hooks/useEntitySearch.spec.js +0 -443
  294. package/lib/hooks/useEvent.spec.js +0 -45
  295. package/lib/hooks/useFrequentlyAskedQuestions.spec.js +0 -222
  296. package/lib/hooks/useFrequentlyUsedActions.spec.js +0 -135
  297. package/lib/hooks/useIsMaiaPageRoute.js +0 -26
  298. package/lib/hooks/useIsMaiaPageRoute.spec.js +0 -26
  299. package/lib/hooks/useKnowledge/deleteKnowledge.spec.js +0 -122
  300. package/lib/hooks/useKnowledge/downloadKnowledge.spec.js +0 -148
  301. package/lib/hooks/useKnowledge/saveKnowledge.spec.js +0 -104
  302. package/lib/hooks/useKnowledge/useKnowledgeOperations.spec.js +0 -178
  303. package/lib/hooks/useMaiaChatSessionMeta/index.js +0 -2
  304. package/lib/hooks/useMaiaChatSessionMeta/useMaiaChatSessionMeta.js +0 -24
  305. package/lib/hooks/useMentionAllowedTypes.spec.js +0 -89
  306. package/lib/hooks/useMentionPopover.helpers.js +0 -41
  307. package/lib/hooks/useMentionPopover.helpers.spec.js +0 -71
  308. package/lib/hooks/useMentionPopover.spec.js +0 -215
  309. package/lib/hooks/useMinimizedPillBottomOffset.helpers.js +0 -47
  310. package/lib/hooks/useMinimizedPillBottomOffset.helpers.spec.js +0 -132
  311. package/lib/hooks/useMinimizedPillBottomOffset.spec.js +0 -89
  312. package/lib/hooks/useMinimizedPillNoveltyDot/useMinimizedPillNoveltyDot.spec.js +0 -67
  313. package/lib/hooks/useModal/useModal.spec.js +0 -73
  314. package/lib/hooks/useOrchestratorStream/useOrchestratorStream.spec.js +0 -192
  315. package/lib/hooks/useProjectSearch.helpers.js +0 -61
  316. package/lib/hooks/useProjectSearch.helpers.spec.js +0 -70
  317. package/lib/hooks/useProjectSearch.spec.js +0 -91
  318. package/lib/hooks/useProjectSummary.spec.js +0 -193
  319. package/lib/hooks/useProjectSummaryConfig.helpers.js +0 -62
  320. package/lib/hooks/useProjectSummaryConfig.helpers.spec.js +0 -92
  321. package/lib/hooks/useProjectSummaryConfig.spec.js +0 -133
  322. package/lib/hooks/useReasoningTrace/reasoningStore.spec.js +0 -112
  323. package/lib/hooks/useRecentClientsSearch.helpers.js +0 -33
  324. package/lib/hooks/useRecentClientsSearch.helpers.spec.js +0 -33
  325. package/lib/hooks/useRecentClientsSearch.spec.js +0 -85
  326. package/lib/hooks/useRecentContexts.spec.js +0 -139
  327. package/lib/hooks/useResize.spec.js +0 -37
  328. package/lib/hooks/useSkillsCatalog.spec.js +0 -88
  329. package/lib/hooks/useSlashCommands.spec.js +0 -139
  330. package/lib/hooks/useSmoothStreamText/useSmoothStreamText.spec.js +0 -101
  331. package/lib/hooks/useSnackBarManager/useSnackBarManager.spec.js +0 -33
  332. package/lib/hooks/useStreamResponse.spec.js +0 -199
  333. package/lib/hooks/useT.spec.js +0 -20
  334. package/lib/hooks/useToggle.spec.js +0 -33
  335. package/lib/hooks/useToggleFavorite/useToggleFavorite.spec.js +0 -171
  336. package/lib/services/maia/Access/updateAccess.spec.js +0 -137
  337. package/lib/services/maia/Actions/getFrequentlyUsedActions.spec.js +0 -56
  338. package/lib/services/maia/Actions/getSlashCommands.spec.js +0 -91
  339. package/lib/services/maia/Agents/connectors.spec.js +0 -359
  340. package/lib/services/maia/Agents/createAgent.spec.js +0 -55
  341. package/lib/services/maia/Agents/deleteAgent.spec.js +0 -57
  342. package/lib/services/maia/Agents/fetchAgentDetail.spec.js +0 -108
  343. package/lib/services/maia/Agents/getAgentById.spec.js +0 -190
  344. package/lib/services/maia/Agents/getAgentModels.spec.js +0 -190
  345. package/lib/services/maia/Agents/getAgentSuggestions.spec.js +0 -89
  346. package/lib/services/maia/Agents/getAgents.helpers.js +0 -181
  347. package/lib/services/maia/Agents/getAgents.helpers.spec.js +0 -211
  348. package/lib/services/maia/Agents/getAgents.spec.js +0 -697
  349. package/lib/services/maia/Agents/setAgentToolGroups.spec.js +0 -45
  350. package/lib/services/maia/Agents/toggleFavorite.spec.js +0 -59
  351. package/lib/services/maia/Agents/updateAgent.spec.js +0 -48
  352. package/lib/services/maia/Chats/deleteChat.spec.js +0 -31
  353. package/lib/services/maia/Chats/getChatMessages.spec.js +0 -150
  354. package/lib/services/maia/Chats/getChatsByUserId.spec.js +0 -149
  355. package/lib/services/maia/Chats/markSessionAsRead.spec.js +0 -30
  356. package/lib/services/maia/Chats/patchChat.spec.js +0 -41
  357. package/lib/services/maia/Chats/wasHelpfulChat.spec.js +0 -28
  358. package/lib/services/maia/Faqs/getFrequentlyAskedQuestions.spec.js +0 -58
  359. package/lib/services/maia/Knowledge/delete.spec.js +0 -45
  360. package/lib/services/maia/Knowledge/download.spec.js +0 -78
  361. package/lib/services/maia/Knowledge/save.spec.js +0 -58
  362. package/lib/services/maia/Orchestrator/orchestrator.helpers.js +0 -130
  363. package/lib/services/maia/Orchestrator/orchestrator.helpers.spec.js +0 -153
  364. package/lib/services/maia/Orchestrator/orchestrator.spec.js +0 -181
  365. package/lib/services/maia/RecentClients/getRecentClients.spec.js +0 -52
  366. package/lib/services/maia/RecentContexts/getRecentContexts.spec.js +0 -103
  367. package/lib/services/maia/RecentProjects/getRecentProjects.spec.js +0 -82
  368. package/lib/services/maia/RecentTasks/getRecentTasks.spec.js +0 -63
  369. package/lib/services/maia/RecentUsers/getRecentUsers.spec.js +0 -82
  370. package/lib/services/maia/Skills/createSkill.spec.js +0 -68
  371. package/lib/services/maia/Skills/deleteSkill.spec.js +0 -42
  372. package/lib/services/maia/Skills/generateSkill.spec.js +0 -48
  373. package/lib/services/maia/Skills/getSkills.spec.js +0 -152
  374. package/lib/services/maia/Skills/updateSkill.spec.js +0 -62
  375. package/lib/services/maia/client.spec.js +0 -56
  376. package/lib/services/utils/fetchCOR.spec.js +0 -211
  377. package/lib/services/utils/getCookie.spec.js +0 -20
  378. package/lib/services/utils/mapChatMessages.spec.js +0 -254
  379. package/lib/store/chatsSidebarOptimistic.spec.js +0 -112
  380. package/lib/store/maiaLastChatPersistence.spec.js +0 -22
  381. package/lib/store/maiaPanelSessionPersistence.spec.js +0 -62
  382. package/lib/store/sessions/sessionNotificationSound.spec.js +0 -145
  383. package/lib/store/sessions/sessionNotifications.helpers.js +0 -45
  384. package/lib/store/sessions/sessionNotifications.helpers.spec.js +0 -63
  385. package/lib/store/sessions/sessionNotifications.spec.js +0 -106
  386. package/lib/store/sessions/sessionStreamManager.spec.js +0 -503
  387. package/lib/store/sessions/sessions.types.spec.js +0 -16
  388. package/lib/store/sessions/useSessionsStore.spec.js +0 -135
  389. package/lib/store/useChatsStore.spec.js +0 -619
  390. package/lib/store/useFaqsStore.spec.js +0 -57
  391. package/lib/test/mockSseStream.js +0 -121
  392. package/lib/test/streamdownCodeMock.js +0 -6
  393. package/lib/test/streamdownMock.js +0 -12
  394. package/lib/utils/actionCategoryMap.spec.js +0 -18
  395. package/lib/utils/agentDisplayName.spec.js +0 -44
  396. package/lib/utils/autoApproveStorage.spec.js +0 -25
  397. package/lib/utils/chatInputFiles.spec.js +0 -39
  398. package/lib/utils/contextMentionIcons.spec.js +0 -41
  399. package/lib/utils/contextMentionLabel.spec.js +0 -13
  400. package/lib/utils/contextMentionTriggers.spec.js +0 -38
  401. package/lib/utils/contextMentionTypeLabel.spec.js +0 -14
  402. package/lib/utils/corConnectorMentionTypes.spec.js +0 -23
  403. package/lib/utils/entityLinkRender.spec.js +0 -72
  404. package/lib/utils/fileDownloadHelper.spec.js +0 -67
  405. package/lib/utils/formatQuickActionMessage.spec.js +0 -27
  406. package/lib/utils/formatUnreadCount.spec.js +0 -12
  407. package/lib/utils/getUnitFileSize.spec.js +0 -18
  408. package/lib/utils/hitlAnalytics.spec.js +0 -100
  409. package/lib/utils/hoursPlannerQuickActionType.spec.js +0 -64
  410. package/lib/utils/imagePreprocessor.helpers.js +0 -28
  411. package/lib/utils/imagePreprocessor.helpers.spec.js +0 -28
  412. package/lib/utils/imagePreprocessor.spec.js +0 -112
  413. package/lib/utils/maiaPageRoute.js +0 -24
  414. package/lib/utils/maiaPageRoute.spec.js +0 -23
  415. package/lib/utils/mapBackendLang.spec.js +0 -19
  416. package/lib/utils/navigateContextEntity.spec.js +0 -50
  417. package/lib/utils/normalizeAgentConnectors.spec.js +0 -107
  418. package/lib/utils/orchestratorSubagents.spec.js +0 -32
  419. package/lib/utils/reasoningMappers.spec.js +0 -103
  420. package/lib/utils/recentContextsHomeLimit.spec.js +0 -32
  421. package/lib/utils/renderContextMentions.spec.js +0 -158
  422. package/lib/utils/retryCompletion.spec.js +0 -99
  423. package/lib/utils/skillContentSize.spec.js +0 -13
  424. package/lib/utils/slashCommandMarker.spec.js +0 -43
  425. package/lib/utils/sortManagerHoursHomeFuas.spec.js +0 -51
  426. package/lib/utils/sseStreamContent.spec.js +0 -31
  427. package/lib/utils/streamActivityMessages.spec.js +0 -227
  428. package/lib/utils/validateTrimmedFields.spec.js +0 -26
@@ -1,7 +1,8 @@
1
1
  import _toConsumableArray from "@babel/runtime/helpers/toConsumableArray";
2
2
  import _asyncToGenerator from "@babel/runtime/helpers/asyncToGenerator";
3
- import _defineProperty from "@babel/runtime/helpers/defineProperty";
4
3
  import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
4
+ import _typeof from "@babel/runtime/helpers/typeof";
5
+ import _defineProperty from "@babel/runtime/helpers/defineProperty";
5
6
  import _regeneratorRuntime from "@babel/runtime/regenerator";
6
7
  function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
7
8
  function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
@@ -15,7 +16,6 @@ import { v4 as uuidv4 } from 'uuid';
15
16
  import { useChatMessages } from '../useChatMessages';
16
17
  import { useOrchestratorStream } from '../useOrchestratorStream';
17
18
  import { useT } from '../useT';
18
- import { extractTaskIdsFromPendingActionsArgs, findMessageWithApprovalByThreadIds, resolveApprovalDecisionStatus, resolveContinueStreamDecision, mapAuthUserToChatMessageUser, normalizeAssistantAttachments, normalizeSendMessageArgs, reasoningTraceFor, replaceTaskUrlsWithTabSegment, resolveApprovedPendingActionFlags, resolveClientPayload, resolveCreateAgentFollowUp, resolveEditAgentFollowUp, resolveProjectDashboardSync, resolveProjectToRequest, resolveStreamErrorPresentation, resolveTaskIdsForDashboard, shouldSyncTaskDashboard, shouldBlockConcurrentStreamStart, shouldRefetchOpenTaskPanel, canSendChatMessage, isTaskDeleteToolName, isTaskEditToolName } from './useChatManager.helpers';
19
19
  import { useUser } from '../../context/cor-user';
20
20
  import { useGlobalContext } from '../../context/global-context';
21
21
  import { EVENTS, useEvent } from '../useEvent';
@@ -41,23 +41,260 @@ import { isStreamingPlaceholderMessageId, streamingPlaceholderMessageId } from '
41
41
  import { findUserMessageForRetry, messagesWithoutRetriedTurn, resolveRetryTurnId } from '../../utils/retryCompletion';
42
42
  import { getChatsStoreState, useChatsStore } from '../../store/useChatsStore';
43
43
  import { reasoningStore } from '../useReasoningTrace';
44
- import { mapReasoningTrace } from '../../utils/reasoningMappers';
44
+ import { buildReasoningTrace, mapReasoningTrace } from '../../utils/reasoningMappers';
45
+ /** Trace acumulado en vivo para `messageId`, o null si el store apunta a otro mensaje. */
46
+ var reasoningTraceFor = function reasoningTraceFor(messageId) {
47
+ var snapshot = reasoningStore.getSnapshot(messageId);
48
+ if (!snapshot.steps.length) return null;
49
+ return buildReasoningTrace(snapshot.steps, snapshot.summary);
50
+ };
51
+ var normalizeSendMessageArgs = function normalizeSendMessageArgs(attachmentsOrOptions) {
52
+ var _options$attachments;
53
+ if (Array.isArray(attachmentsOrOptions)) {
54
+ return {
55
+ attachments: attachmentsOrOptions,
56
+ options: {}
57
+ };
58
+ }
59
+ var options = attachmentsOrOptions !== null && attachmentsOrOptions !== void 0 ? attachmentsOrOptions : {};
60
+ return {
61
+ attachments: (_options$attachments = options.attachments) !== null && _options$attachments !== void 0 ? _options$attachments : [],
62
+ options: options
63
+ };
64
+ };
65
+
66
+ /** chipsProject es la fuente de verdad del pin visible; si no hay pin, restaurar desde historial. */
67
+ var resolveProjectToRequest = function resolveProjectToRequest(chipsProject, lastMessageProjectId) {
68
+ var chipsProjectId = chipsProject !== null && chipsProject !== void 0 && chipsProject.projectId ? Number(chipsProject.projectId) : null;
69
+ if (chipsProjectId != null && Number.isFinite(chipsProjectId)) {
70
+ return chipsProjectId;
71
+ }
72
+ if (lastMessageProjectId != null) {
73
+ var parsed = Number(lastMessageProjectId);
74
+ return Number.isFinite(parsed) ? parsed : null;
75
+ }
76
+ return null;
77
+ };
78
+ var resolveClientPayload = function resolveClientPayload(ctxClient, ctxProject) {
79
+ var _ctxProject$client;
80
+ if (ctxClient !== null && ctxClient !== void 0 && ctxClient.id) {
81
+ return _objectSpread({
82
+ clientId: ctxClient.id
83
+ }, ctxClient.name ? {
84
+ clientName: ctxClient.name
85
+ } : {});
86
+ }
87
+ if ((ctxProject === null || ctxProject === void 0 ? void 0 : ctxProject.clientId) != null) {
88
+ return {
89
+ clientId: Number(ctxProject.clientId)
90
+ };
91
+ }
92
+ if (ctxProject !== null && ctxProject !== void 0 && (_ctxProject$client = ctxProject.client) !== null && _ctxProject$client !== void 0 && _ctxProject$client.id) {
93
+ return _objectSpread({
94
+ clientId: ctxProject.client.id
95
+ }, ctxProject.client.name ? {
96
+ clientName: ctxProject.client.name
97
+ } : {});
98
+ }
99
+ return {};
100
+ };
101
+ var normalizeAssistantAttachments = function normalizeAssistantAttachments(rawAttachments) {
102
+ if (!Array.isArray(rawAttachments)) {
103
+ return [];
104
+ }
105
+ return rawAttachments.filter(function (attachment) {
106
+ return !!attachment && _typeof(attachment) === 'object';
107
+ }).map(function (attachment, index) {
108
+ var name = typeof attachment.name === 'string' && attachment.name.trim() ? attachment.name.trim() : "file-".concat(index + 1);
109
+ var type = typeof attachment.type === 'string' && attachment.type.trim() ? attachment.type.trim() : 'pdf';
110
+ var mimeType = typeof attachment.mime_type === 'string' ? attachment.mime_type : '';
111
+ var fullFileName = name.includes('.') ? name : "".concat(name, ".").concat(type);
112
+ var numericSize = typeof attachment.size === 'number' ? attachment.size : Number.isFinite(Number(attachment.size)) ? Number(attachment.size) : 0;
113
+ return {
114
+ file: new File([], fullFileName, {
115
+ type: mimeType
116
+ }),
117
+ id: typeof attachment.id === 'string' && attachment.id.trim() ? attachment.id : "assistant-file-".concat(index, "-").concat(fullFileName),
118
+ name: name,
119
+ size: numericSize,
120
+ type: type,
121
+ url_original: typeof attachment.url_original === 'string' ? attachment.url_original : undefined,
122
+ url_thumbnail: typeof attachment.url_thumbnail === 'string' ? attachment.url_thumbnail : undefined,
123
+ url_file: typeof attachment.url_file === 'string' ? attachment.url_file : undefined,
124
+ role: attachment.role === 'assistant' ? 'assistant' : 'user'
125
+ };
126
+ });
127
+ };
128
+
129
+ /** Extrae task_ids de los tool_args de pending_actions, cubriendo las formas comunes:
130
+ * - `{ task_id }` o `{ id }`
131
+ * - `{ task_ids: [] }`
132
+ * - `{ tasks: [{ task_id|id }, ...] }`
133
+ * Útil para tools de edit/assign/delete cuando la respuesta del LLM no incluye URLs /tasks/.../detail. */
134
+ function extractTaskIdsFromPendingActionsArgs(pendingActions) {
135
+ var ids = [];
136
+ var pushId = function pushId(raw) {
137
+ if (raw == null) return;
138
+ var n = parseInt(String(raw), 10);
139
+ if (!Number.isNaN(n)) ids.push(n);
140
+ };
141
+ pendingActions.forEach(function (action) {
142
+ var _rec$task_id;
143
+ if (!action || _typeof(action) !== 'object') return;
144
+ var args = action.tool_args;
145
+ if (!(args && _typeof(args) === 'object' && !Array.isArray(args))) return;
146
+ var rec = args;
147
+ pushId((_rec$task_id = rec.task_id) !== null && _rec$task_id !== void 0 ? _rec$task_id : rec.id);
148
+ if (Array.isArray(rec.task_ids)) {
149
+ rec.task_ids.forEach(pushId);
150
+ }
151
+ if (Array.isArray(rec.tasks)) {
152
+ rec.tasks.forEach(function (t) {
153
+ if (t && _typeof(t) === 'object' && !Array.isArray(t)) {
154
+ var _trec$task_id;
155
+ var trec = t;
156
+ pushId((_trec$task_id = trec.task_id) !== null && _trec$task_id !== void 0 ? _trec$task_id : trec.id);
157
+ }
158
+ });
159
+ }
160
+ });
161
+ return ids;
162
+ }
163
+
164
+ /** task_id / task_ids en pending_actions de delete_* (la respuesta puede no incluir URLs /tasks/…/detail). */
165
+ function extractTaskIdsFromDeletePendingActions(pendingActions) {
166
+ var ids = [];
167
+ pendingActions.forEach(function (action) {
168
+ if (!action || _typeof(action) !== 'object') return;
169
+ var args = action.tool_args;
170
+ if (!(args && _typeof(args) === 'object' && !Array.isArray(args))) return;
171
+ var rec = args;
172
+ if (action.tool_name === 'delete_task') {
173
+ var _rec$task_id2;
174
+ var raw = (_rec$task_id2 = rec.task_id) !== null && _rec$task_id2 !== void 0 ? _rec$task_id2 : rec.id;
175
+ if (raw != null) {
176
+ var n = parseInt(String(raw), 10);
177
+ if (!Number.isNaN(n)) ids.push(n);
178
+ }
179
+ }
180
+ if (action.tool_name === 'delete_tasks_batch') {
181
+ var list = rec.task_ids;
182
+ if (Array.isArray(list)) {
183
+ list.forEach(function (tid) {
184
+ var n = parseInt(String(tid), 10);
185
+ if (!Number.isNaN(n)) ids.push(n);
186
+ });
187
+ }
188
+ }
189
+ });
190
+ return ids;
191
+ }
192
+ function extractAgentIdFromEditAgentPendingActions(pendingActions) {
193
+ var _rec$agent_id;
194
+ var editAction = pendingActions.find(function (a) {
195
+ return (a.tool_name || '').toLowerCase() === 'edit_agent';
196
+ });
197
+ if (!editAction || !editAction.tool_args || _typeof(editAction.tool_args) !== 'object' || Array.isArray(editAction.tool_args)) {
198
+ return null;
199
+ }
200
+ var rec = editAction.tool_args;
201
+ var raw = (_rec$agent_id = rec.agent_id) !== null && _rec$agent_id !== void 0 ? _rec$agent_id : rec.agentId;
202
+ return raw != null ? String(raw) : null;
203
+ }
204
+ function extractAgentIdFromPendingActionsByToolName(pendingActions, toolName) {
205
+ var _ref, _rec$agent_id2;
206
+ var action = pendingActions.find(function (a) {
207
+ return (a.tool_name || '').toLowerCase() === toolName.toLowerCase();
208
+ });
209
+ if (!action || !action.tool_args || _typeof(action.tool_args) !== 'object' || Array.isArray(action.tool_args)) {
210
+ return null;
211
+ }
212
+ var rec = action.tool_args;
213
+ var raw = (_ref = (_rec$agent_id2 = rec.agent_id) !== null && _rec$agent_id2 !== void 0 ? _rec$agent_id2 : rec.agentId) !== null && _ref !== void 0 ? _ref : rec.id;
214
+ return raw != null ? String(raw) : null;
215
+ }
216
+
217
+ /** Último recurso si no hay links ni tool_args parseables (p. ej. "ID **7597106**"). */
218
+ function extractTaskIdsFromAssistantDeletionText(text) {
219
+ var labeled = text.match(/\bID\s*\*\*(\d+)\*\*/i);
220
+ if (labeled) {
221
+ var n = parseInt(labeled[1], 10);
222
+ return Number.isNaN(n) ? [] : [n];
223
+ }
224
+ var bold = text.match(/\*\*(\d{5,})\*\*/);
225
+ if (bold) {
226
+ var _n = parseInt(bold[1], 10);
227
+ return Number.isNaN(_n) ? [] : [_n];
228
+ }
229
+ return [];
230
+ }
45
231
  var useStableCallbacks = function useStableCallbacks(authUser) {
46
- var currentUser = useRef(mapAuthUserToChatMessageUser(authUser));
47
- var nextUser = mapAuthUserToChatMessageUser(authUser);
48
- if (currentUser.current.id !== nextUser.id || currentUser.current.name !== nextUser.name || currentUser.current.avatar !== nextUser.avatar) {
49
- currentUser.current = nextUser;
232
+ var currentUser = useRef({
233
+ id: authUser.id.toString(),
234
+ name: authUser.firstName,
235
+ avatar: authUser.picture
236
+ });
237
+ if (currentUser.current.id !== authUser.id.toString() || currentUser.current.name !== authUser.firstName || currentUser.current.avatar !== authUser.picture) {
238
+ currentUser.current = {
239
+ id: authUser.id.toString(),
240
+ name: authUser.firstName,
241
+ avatar: authUser.picture
242
+ };
50
243
  }
51
244
  return {
52
245
  currentUser: currentUser.current
53
246
  };
54
247
  };
55
- export var useChatManager = function useChatManager(_ref) {
56
- var initialChatId = _ref.chatId,
57
- userInitialMessage = _ref.userInitialMessage,
58
- onError = _ref.onError,
59
- _ref$agents = _ref.agents,
60
- agents = _ref$agents === void 0 ? [] : _ref$agents;
248
+ var findMessageWithApprovalByThreadIds = function findMessageWithApprovalByThreadIds(threadIds, activeMessages) {
249
+ var fromActiveView = activeMessages.find(function (message) {
250
+ var _message$approval;
251
+ return (_message$approval = message.approval) === null || _message$approval === void 0 || (_message$approval = _message$approval.pending_actions) === null || _message$approval === void 0 ? void 0 : _message$approval.some(function (action) {
252
+ return threadIds.includes(action.thread_id);
253
+ });
254
+ });
255
+ if (fromActiveView !== null && fromActiveView !== void 0 && fromActiveView.approval) {
256
+ return {
257
+ message: fromActiveView,
258
+ sessionId: fromActiveView.approval.session_id || activeView.get() || ''
259
+ };
260
+ }
261
+ var _useSessionsStore$get = useSessionsStore.getState(),
262
+ messages = _useSessionsStore$get.messages;
263
+ var sessionEntry = Object.entries(messages).find(function (_ref2) {
264
+ var _ref3 = _slicedToArray(_ref2, 2),
265
+ sessionMessages = _ref3[1];
266
+ return sessionMessages.some(function (message) {
267
+ var _message$approval2;
268
+ return (_message$approval2 = message.approval) === null || _message$approval2 === void 0 || (_message$approval2 = _message$approval2.pending_actions) === null || _message$approval2 === void 0 ? void 0 : _message$approval2.some(function (action) {
269
+ return threadIds.includes(action.thread_id);
270
+ });
271
+ });
272
+ });
273
+ if (sessionEntry) {
274
+ var _sessionEntry = _slicedToArray(sessionEntry, 2),
275
+ sessionId = _sessionEntry[0],
276
+ sessionMessages = _sessionEntry[1];
277
+ var found = sessionMessages.find(function (message) {
278
+ var _message$approval3;
279
+ return (_message$approval3 = message.approval) === null || _message$approval3 === void 0 || (_message$approval3 = _message$approval3.pending_actions) === null || _message$approval3 === void 0 ? void 0 : _message$approval3.some(function (action) {
280
+ return threadIds.includes(action.thread_id);
281
+ });
282
+ });
283
+ if (found !== null && found !== void 0 && found.approval) {
284
+ return {
285
+ message: found,
286
+ sessionId: found.approval.session_id || sessionId
287
+ };
288
+ }
289
+ }
290
+ return null;
291
+ };
292
+ export var useChatManager = function useChatManager(_ref4) {
293
+ var initialChatId = _ref4.chatId,
294
+ userInitialMessage = _ref4.userInitialMessage,
295
+ onError = _ref4.onError,
296
+ _ref4$agents = _ref4.agents,
297
+ agents = _ref4$agents === void 0 ? [] : _ref4$agents;
61
298
  var _useT = useT(),
62
299
  t = _useT.t;
63
300
  var authUser = useUser();
@@ -295,6 +532,7 @@ export var useChatManager = function useChatManager(_ref) {
295
532
  setActiveChatId(initialChatId || null);
296
533
  }, [initialChatId, setActiveChatId]);
297
534
  var handleStreamError = useCallback(function (ctx, errorMessage, errorRawMessage) {
535
+ var _errorRawMessage$matc, _errorRawMessage$matc2;
298
536
  var sessionId = ctx.sessionId,
299
537
  messageId = ctx.messageId,
300
538
  placeholderId = ctx.placeholderId;
@@ -327,19 +565,16 @@ export var useChatManager = function useChatManager(_ref) {
327
565
  activeStreamChatIdRef.current = null;
328
566
  isProcessingRef.current = false;
329
567
  }
330
- var _resolveStreamErrorPr = resolveStreamErrorPresentation(errorMessage, errorRawMessage),
331
- isAccessDenied = _resolveStreamErrorPr.isAccessDenied,
332
- isPromptTooLong = _resolveStreamErrorPr.isPromptTooLong,
333
- tokensUsed = _resolveStreamErrorPr.tokensUsed,
334
- showRetry = _resolveStreamErrorPr.showRetry;
568
+ var isAccessDenied = errorMessage === "Access denied: You don't have permission to access this agent";
569
+ var isPromptTooLong = errorMessage === 'invalid_request_error' && (errorRawMessage === null || errorRawMessage === void 0 ? void 0 : errorRawMessage.includes('prompt is too long'));
335
570
  var message = isAccessDenied ? t('chat.errorAccessDenied') : isPromptTooLong ? t('chat.errorPromptTooLong', {
336
- used: tokensUsed
571
+ used: (_errorRawMessage$matc = errorRawMessage === null || errorRawMessage === void 0 || (_errorRawMessage$matc2 = errorRawMessage.match(/(\d+) tokens/)) === null || _errorRawMessage$matc2 === void 0 ? void 0 : _errorRawMessage$matc2[1]) !== null && _errorRawMessage$matc !== void 0 ? _errorRawMessage$matc : ''
337
572
  }) : t('chat.error');
338
573
  commitToSession(sessionId, _objectSpread(_objectSpread({
339
574
  id: "answer-".concat(messageId),
340
575
  message: message,
341
576
  isError: true
342
- }, showRetry ? {
577
+ }, !isAccessDenied && !isPromptTooLong ? {
343
578
  suggestions: [t('chat.retry')]
344
579
  } : {}), {}, {
345
580
  date: new Date(),
@@ -385,9 +620,9 @@ export var useChatManager = function useChatManager(_ref) {
385
620
  sessionStreamingText.setText(sessionId, placeholderId, content);
386
621
  }, [commitToSession]);
387
622
  var handleStreamFinish = useCallback(/*#__PURE__*/function () {
388
- var _ref2 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee(ctx, content, sources, memorySessionId, rawAttachments, suggestions, completedAgentId, _resolvedContext, reasoning) {
389
- var _reasoningTraceFor, _previousMessage$appr, _window$taskPanel, _manualApproval$toolA;
390
- var sessionId, placeholderId, isActive, tempMessageId, attachments, finalMessageId, finalTrace, taskUrlRegex, matches, contentToAdd, previousMessage, hasApprovalInPreviousMessage, pendingActions, _resolveApprovedPendi, wasTaskCreation, wasTaskEdit, wasTaskDelete, wasCreateAgentApproved, wasConfigureAgentAccessApproved, wasEditAgentApproved, createAgentFollowUp, manualApprovalForAnalytics, wasManualCreateAgentApproved, editAgentFollowUp, taskIdsForDashboard, shouldSyncDashboard, taskIds, tab, tabSegment, lastProjectMessage, contextProjectIdRaw, contextProjectId, _resolveProjectDashbo, isOnProjectRoute, _window$newProjectDas, _window$newProjectDas2, _window$newProjectDas3, _window$newProjectDas4, _window$newProjectDas5, _window$newProjectDas6, openTaskPanelId, manualApproval, manualWasTaskEdit, manualWasTaskDelete, hoursToolsFromApproval, wasHoursChargeApproved, manualHoursTool, wasHoursChargeManualApproved, tools, manualPseudoAction, affectedTaskIds, _window$taskPanel2, _window$taskPanel2$re, _getChatsStoreState, isChatViewVisible, markChatAsRead, customEvent;
623
+ var _ref5 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee(ctx, content, sources, memorySessionId, rawAttachments, suggestions, completedAgentId, _resolvedContext, reasoning) {
624
+ var _reasoningTraceFor, _previousMessage$appr, _window$taskPanel, _createAgentFollowUp, _editAgentFollowUp;
625
+ var sessionId, placeholderId, isActive, tempMessageId, attachments, finalMessageId, finalTrace, taskUrlRegex, matches, contentToAdd, previousMessage, hasApprovalInPreviousMessage, TASK_CREATION_TOOLS, TASK_EDIT_TOOLS, TASK_DELETE_TOOLS, pendingActions, wasTaskCreation, wasTaskEdit, wasTaskDelete, wasCreateAgentApproved, wasConfigureAgentAccessApproved, createAgentFollowUp, configuredAgentId, manualApprovalForAnalytics, wasManualCreateAgentApproved, wasEditAgentApproved, editAgentFollowUp, fromStream, fromArgs, resolvedAgentId, taskIdsFromUrls, taskIdsFromDeleteApproval, taskIdsFromDeletionText, taskIdsForDashboard, shouldSyncDashboard, taskIds, tab, tabSegment, lastProjectMessage, contextProjectIdRaw, contextProjectId, pathMatch, routeProjectId, isOnProjectRoute, _window$newProjectDas, _window$newProjectDas2, _window$newProjectDas3, _window$newProjectDas4, _window$newProjectDas5, _window$newProjectDas6, openTaskPanelId, manualApproval, manualWasTaskEdit, manualWasTaskDelete, hoursToolsFromApproval, wasHoursChargeApproved, manualHoursTool, wasHoursChargeManualApproved, tools, _manualApproval$toolA, manualPseudoAction, affectedTaskIds, _window$taskPanel2, _window$taskPanel2$re, _getChatsStoreState, isChatViewVisible, markChatAsRead, customEvent;
391
626
  return _regeneratorRuntime.wrap(function (_context) {
392
627
  while (1) switch (_context.prev = _context.next) {
393
628
  case 0:
@@ -446,12 +681,35 @@ export var useChatManager = function useChatManager(_ref) {
446
681
  return m.id !== tempMessageId;
447
682
  }).at(-1);
448
683
  hasApprovalInPreviousMessage = (previousMessage === null || previousMessage === void 0 ? void 0 : previousMessage.approval) != null;
684
+ TASK_CREATION_TOOLS = ['create_task', 'create_tasks_batch', 'clone_task'];
685
+ TASK_EDIT_TOOLS = ['edit_task', 'edit_tasks_batch', 'task_assign', 'task_unassign', 'update_task_type', 'update_estimated_hours', 'assign_task_label'];
686
+ TASK_DELETE_TOOLS = ['delete_task', 'delete_tasks_batch'];
449
687
  pendingActions = (previousMessage === null || previousMessage === void 0 || (_previousMessage$appr = previousMessage.approval) === null || _previousMessage$appr === void 0 ? void 0 : _previousMessage$appr.pending_actions) || [];
450
- _resolveApprovedPendi = resolveApprovedPendingActionFlags(hasApprovalInPreviousMessage, previousMessage === null || previousMessage === void 0 ? void 0 : previousMessage.approvalStatus, pendingActions), wasTaskCreation = _resolveApprovedPendi.wasTaskCreation, wasTaskEdit = _resolveApprovedPendi.wasTaskEdit, wasTaskDelete = _resolveApprovedPendi.wasTaskDelete, wasCreateAgentApproved = _resolveApprovedPendi.wasCreateAgentApproved, wasConfigureAgentAccessApproved = _resolveApprovedPendi.wasConfigureAgentAccessApproved, wasEditAgentApproved = _resolveApprovedPendi.wasEditAgentApproved;
451
- createAgentFollowUp = resolveCreateAgentFollowUp({
452
- wasCreateAgentApproved: wasCreateAgentApproved,
453
- wasConfigureAgentAccessApproved: wasConfigureAgentAccessApproved
454
- }, Boolean(window.MAIA_CHAT_AI_FEATURE_ACCESS_MULTI_AGENTS), completedAgentId, pendingActions);
688
+ wasTaskCreation = hasApprovalInPreviousMessage && pendingActions.some(function (action) {
689
+ return TASK_CREATION_TOOLS.includes(action.tool_name);
690
+ });
691
+ wasTaskEdit = hasApprovalInPreviousMessage && pendingActions.some(function (action) {
692
+ return TASK_EDIT_TOOLS.includes(action.tool_name);
693
+ });
694
+ wasTaskDelete = hasApprovalInPreviousMessage && pendingActions.some(function (action) {
695
+ return TASK_DELETE_TOOLS.includes(action.tool_name);
696
+ });
697
+ wasCreateAgentApproved = hasApprovalInPreviousMessage && (previousMessage === null || previousMessage === void 0 ? void 0 : previousMessage.approvalStatus) === 'approved' && pendingActions.some(function (action) {
698
+ return action.tool_name === 'create_agent';
699
+ });
700
+ wasConfigureAgentAccessApproved = hasApprovalInPreviousMessage && (previousMessage === null || previousMessage === void 0 ? void 0 : previousMessage.approvalStatus) === 'approved' && pendingActions.some(function (action) {
701
+ return (action.tool_name || '').toLowerCase() === 'configure_agent_access';
702
+ });
703
+ if (wasCreateAgentApproved && window.MAIA_CHAT_AI_FEATURE_ACCESS_MULTI_AGENTS && completedAgentId !== null && completedAgentId !== void 0 && completedAgentId.trim()) {
704
+ createAgentFollowUp = {
705
+ agentId: completedAgentId.trim()
706
+ };
707
+ } else if (wasConfigureAgentAccessApproved && window.MAIA_CHAT_AI_FEATURE_ACCESS_MULTI_AGENTS && (completedAgentId !== null && completedAgentId !== void 0 && completedAgentId.trim() || extractAgentIdFromPendingActionsByToolName(pendingActions, 'configure_agent_access'))) {
708
+ configuredAgentId = (completedAgentId === null || completedAgentId === void 0 ? void 0 : completedAgentId.trim()) || extractAgentIdFromPendingActionsByToolName(pendingActions, 'configure_agent_access');
709
+ createAgentFollowUp = {
710
+ agentId: configuredAgentId
711
+ };
712
+ }
455
713
  if (wasCreateAgentApproved) {
456
714
  event(EVENTS.aiChatHitlOption, _objectSpread({
457
715
  agent_type: getHitlAnalyticsAgentType(agent),
@@ -475,9 +733,26 @@ export var useChatManager = function useChatManager(_ref) {
475
733
  created_agent_id: completedAgentId.trim()
476
734
  } : {}));
477
735
  }
478
- editAgentFollowUp = resolveEditAgentFollowUp(wasEditAgentApproved, completedAgentId, pendingActions);
479
- taskIdsForDashboard = resolveTaskIdsForDashboard(content, taskUrlRegex, pendingActions, wasTaskDelete);
480
- shouldSyncDashboard = shouldSyncTaskDashboard(hasApprovalInPreviousMessage, wasTaskCreation, wasTaskEdit, wasTaskDelete, taskIdsForDashboard);
736
+ wasEditAgentApproved = hasApprovalInPreviousMessage && (previousMessage === null || previousMessage === void 0 ? void 0 : previousMessage.approvalStatus) === 'approved' && pendingActions.some(function (action) {
737
+ return (action.tool_name || '').toLowerCase() === 'edit_agent';
738
+ });
739
+ if (wasEditAgentApproved) {
740
+ fromStream = completedAgentId === null || completedAgentId === void 0 ? void 0 : completedAgentId.trim();
741
+ fromArgs = extractAgentIdFromEditAgentPendingActions(pendingActions);
742
+ resolvedAgentId = fromStream || fromArgs;
743
+ if (resolvedAgentId) {
744
+ editAgentFollowUp = {
745
+ agentId: resolvedAgentId
746
+ };
747
+ }
748
+ }
749
+ taskIdsFromUrls = matches.map(function (match) {
750
+ return parseInt(match[1], 10);
751
+ });
752
+ taskIdsFromDeleteApproval = extractTaskIdsFromDeletePendingActions(pendingActions);
753
+ taskIdsFromDeletionText = wasTaskDelete && taskIdsFromUrls.length === 0 && taskIdsFromDeleteApproval.length === 0 ? extractTaskIdsFromAssistantDeletionText(content) : [];
754
+ taskIdsForDashboard = taskIdsFromUrls.length > 0 ? taskIdsFromUrls : taskIdsFromDeleteApproval.length > 0 ? taskIdsFromDeleteApproval : taskIdsFromDeletionText;
755
+ shouldSyncDashboard = hasApprovalInPreviousMessage && (wasTaskCreation || wasTaskEdit || wasTaskDelete) && taskIdsForDashboard.length > 0;
481
756
  if (!shouldSyncDashboard) {
482
757
  _context.next = 4;
483
758
  break;
@@ -492,14 +767,18 @@ export var useChatManager = function useChatManager(_ref) {
492
767
  case 2:
493
768
  tab = _context.sent;
494
769
  tabSegment = tab ? "/".concat(tab) : '/detail';
495
- contentToAdd = replaceTaskUrlsWithTabSegment(content, taskUrlRegex, tabSegment);
770
+ contentToAdd = content.replace(taskUrlRegex, function (url) {
771
+ return url.replace(/\/(detail|message|messages|files|history|hours)(?=$|\?)/, tabSegment);
772
+ });
496
773
  case 3:
497
774
  lastProjectMessage = messagesRef.current.filter(function (msg) {
498
775
  return msg.projectId;
499
776
  }).at(-1);
500
777
  contextProjectIdRaw = (project === null || project === void 0 ? void 0 : project.id) || (lastProjectMessage === null || lastProjectMessage === void 0 ? void 0 : lastProjectMessage.projectId);
501
778
  contextProjectId = contextProjectIdRaw ? parseInt(String(contextProjectIdRaw), 10) : null;
502
- _resolveProjectDashbo = resolveProjectDashboardSync(contextProjectId, window.location.pathname), isOnProjectRoute = _resolveProjectDashbo.isOnProjectRoute;
779
+ pathMatch = window.location.pathname.match(/^\/projects\/(\d+)\//);
780
+ routeProjectId = pathMatch ? parseInt(pathMatch[1], 10) : null;
781
+ isOnProjectRoute = contextProjectId && routeProjectId && contextProjectId === routeProjectId;
503
782
  if (isOnProjectRoute) {
504
783
  if (wasTaskCreation) {
505
784
  (_window$newProjectDas = window.newProjectDashboard) === null || _window$newProjectDas === void 0 || (_window$newProjectDas2 = _window$newProjectDas.addExistingTaskToDashboard) === null || _window$newProjectDas2 === void 0 || _window$newProjectDas2.call(_window$newProjectDas, taskIds);
@@ -517,8 +796,8 @@ export var useChatManager = function useChatManager(_ref) {
517
796
  openTaskPanelId = (_window$taskPanel = window.taskPanel) === null || _window$taskPanel === void 0 ? void 0 : _window$taskPanel.taskId;
518
797
  manualApproval = lastManualApprovalRef.current;
519
798
  lastManualApprovalRef.current = null; // consumir una sola vez
520
- manualWasTaskEdit = isTaskEditToolName(manualApproval === null || manualApproval === void 0 ? void 0 : manualApproval.toolName);
521
- manualWasTaskDelete = isTaskDeleteToolName(manualApproval === null || manualApproval === void 0 ? void 0 : manualApproval.toolName); // Sync Planner: avisar carga de horas confirmada (create_hour / create_hours).
799
+ manualWasTaskEdit = !!manualApproval && TASK_EDIT_TOOLS.includes(manualApproval.toolName);
800
+ manualWasTaskDelete = !!manualApproval && TASK_DELETE_TOOLS.includes(manualApproval.toolName); // Sync Planner: avisar carga de horas confirmada (create_hour / create_hours).
522
801
  hoursToolsFromApproval = pendingActions.map(function (action) {
523
802
  return action.tool_name;
524
803
  }).filter(function (toolName) {
@@ -535,19 +814,15 @@ export var useChatManager = function useChatManager(_ref) {
535
814
  sessionId: memorySessionId
536
815
  });
537
816
  }
538
- manualPseudoAction = manualApproval ? {
539
- tool_name: manualApproval.toolName,
540
- tool_args: (_manualApproval$toolA = manualApproval.toolArgs) !== null && _manualApproval$toolA !== void 0 ? _manualApproval$toolA : {}
541
- } : null;
542
- affectedTaskIds = [].concat(_toConsumableArray(extractTaskIdsFromPendingActionsArgs(pendingActions)), _toConsumableArray(taskIdsForDashboard), _toConsumableArray(manualPseudoAction ? extractTaskIdsFromPendingActionsArgs([manualPseudoAction]) : [])).map(String);
543
- if (shouldRefetchOpenTaskPanel(openTaskPanelId, {
544
- wasTaskEdit: wasTaskEdit,
545
- wasTaskDelete: wasTaskDelete
546
- }, {
547
- manualWasTaskEdit: manualWasTaskEdit,
548
- manualWasTaskDelete: manualWasTaskDelete
549
- }, affectedTaskIds)) {
550
- (_window$taskPanel2 = window.taskPanel) === null || _window$taskPanel2 === void 0 || (_window$taskPanel2$re = _window$taskPanel2.refetchTask) === null || _window$taskPanel2$re === void 0 || _window$taskPanel2$re.call(_window$taskPanel2);
817
+ if (openTaskPanelId && (wasTaskEdit || wasTaskDelete || manualWasTaskEdit || manualWasTaskDelete)) {
818
+ manualPseudoAction = manualApproval ? {
819
+ tool_name: manualApproval.toolName,
820
+ tool_args: (_manualApproval$toolA = manualApproval.toolArgs) !== null && _manualApproval$toolA !== void 0 ? _manualApproval$toolA : {}
821
+ } : null;
822
+ affectedTaskIds = [].concat(_toConsumableArray(extractTaskIdsFromPendingActionsArgs(pendingActions)), _toConsumableArray(taskIdsFromUrls), _toConsumableArray(taskIdsFromDeleteApproval), _toConsumableArray(manualPseudoAction ? extractTaskIdsFromPendingActionsArgs([manualPseudoAction]) : [])).map(String);
823
+ if (affectedTaskIds.includes(String(openTaskPanelId))) {
824
+ (_window$taskPanel2 = window.taskPanel) === null || _window$taskPanel2 === void 0 || (_window$taskPanel2$re = _window$taskPanel2.refetchTask) === null || _window$taskPanel2$re === void 0 || _window$taskPanel2$re.call(_window$taskPanel2);
825
+ }
551
826
  }
552
827
 
553
828
  // Swap placeholder → mensaje final. Va en `flushSync` porque el motor ya
@@ -582,7 +857,7 @@ export var useChatManager = function useChatManager(_ref) {
582
857
  }));
583
858
  });
584
859
  clearSessionTail(sessionId);
585
- if (createAgentFollowUp !== null && createAgentFollowUp !== void 0 && createAgentFollowUp.agentId) {
860
+ if ((_createAgentFollowUp = createAgentFollowUp) !== null && _createAgentFollowUp !== void 0 && _createAgentFollowUp.agentId) {
586
861
  fetchAgentDetail(createAgentFollowUp.agentId).then(function (chatAgent) {
587
862
  document.dispatchEvent(new CustomEvent('maia-merge-created-agent-into-list', {
588
863
  detail: {
@@ -593,7 +868,7 @@ export var useChatManager = function useChatManager(_ref) {
593
868
  console.error('[useChatManager] No se pudo añadir el agente recién creado al listado', err);
594
869
  });
595
870
  }
596
- if (editAgentFollowUp !== null && editAgentFollowUp !== void 0 && editAgentFollowUp.agentId) {
871
+ if ((_editAgentFollowUp = editAgentFollowUp) !== null && _editAgentFollowUp !== void 0 && _editAgentFollowUp.agentId) {
597
872
  fetchAgentDetail(editAgentFollowUp.agentId).then(function (chatAgent) {
598
873
  document.dispatchEvent(new CustomEvent('maia-sync-edited-agent-from-chat', {
599
874
  detail: {
@@ -628,7 +903,7 @@ export var useChatManager = function useChatManager(_ref) {
628
903
  }, _callee);
629
904
  }));
630
905
  return function (_x, _x2, _x3, _x4, _x5, _x6, _x7, _x8, _x9) {
631
- return _ref2.apply(this, arguments);
906
+ return _ref5.apply(this, arguments);
632
907
  };
633
908
  }(), [commitToSession, dropFromSession, clearSessionTail, project, getTabTaskDefault, event, agent]);
634
909
 
@@ -709,13 +984,13 @@ export var useChatManager = function useChatManager(_ref) {
709
984
  // Preaprobado: por detección manual o por auto-approve. En ambos casos el
710
985
  // stream continúa y no hay que pintar la caja de aprobación.
711
986
  if (approval.manual_approval_detected || approval.auto_approved || approval.approval_status === 'approved') {
712
- var _approval$pending_act2, _ref3, _tool_name, _tool_args;
987
+ var _approval$pending_act2, _ref6, _tool_name, _tool_args;
713
988
  trackManualHitlEvents(event, {
714
989
  impression: EVENTS.aiChatHitl,
715
990
  option: EVENTS.aiChatHitlOption
716
991
  }, agent, approval, trackedManualHitlKeysRef.current, approval.manual_approval_detected ? 'manual' : 'auto');
717
992
  var firstAction = (_approval$pending_act2 = approval.pending_actions) === null || _approval$pending_act2 === void 0 ? void 0 : _approval$pending_act2[0];
718
- var toolName = (_ref3 = (_tool_name = approval.tool_name) !== null && _tool_name !== void 0 ? _tool_name : firstAction === null || firstAction === void 0 ? void 0 : firstAction.tool_name) !== null && _ref3 !== void 0 ? _ref3 : '';
993
+ var toolName = (_ref6 = (_tool_name = approval.tool_name) !== null && _tool_name !== void 0 ? _tool_name : firstAction === null || firstAction === void 0 ? void 0 : firstAction.tool_name) !== null && _ref6 !== void 0 ? _ref6 : '';
719
994
  var toolArgs = ((_tool_args = approval.tool_args) !== null && _tool_args !== void 0 ? _tool_args : firstAction === null || firstAction === void 0 ? void 0 : firstAction.tool_args) || null;
720
995
  if (toolName && isActive) {
721
996
  lastManualApprovalRef.current = {
@@ -777,13 +1052,13 @@ export var useChatManager = function useChatManager(_ref) {
777
1052
  };
778
1053
  var currentProject = project;
779
1054
  var sendMessage = useCallback(/*#__PURE__*/function () {
780
- var _ref4 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee2(message, attachmentsOrOptions, faqId, agentSuggestionId, mentions, fuaId, scId, contextData) {
1055
+ var _ref7 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee2(message, attachmentsOrOptions, faqId, agentSuggestionId, mentions, fuaId, scId) {
781
1056
  var _messagesRef$current;
782
1057
  var willStartNewStream, _normalizeSendMessage, attachments, options, effectiveMentions, contextMessage, payloadFuaId, payloadScId, payloadContextData, displayMessage, newMessageId, lastMessageWithProject, currentAgentFromMessages, sessionId, _contextRef$current, ctxChipsProject, ctxProject, ctxClient, ctxTask, streamingPlaceholderId, finalMessage, _options$projectChang, _contextRef$current$p, history, lastMessageProjectId, projectToRequest, projects, payloadFaqId, payloadAgentSuggestionId, payloadData;
783
1058
  return _regeneratorRuntime.wrap(function (_context2) {
784
1059
  while (1) switch (_context2.prev = _context2.next) {
785
1060
  case 0:
786
- if (canSendChatMessage(isProcessingRef.current, waitingResponse, loadingMessages)) {
1061
+ if (!(isProcessingRef.current || waitingResponse || loadingMessages)) {
787
1062
  _context2.next = 1;
788
1063
  break;
789
1064
  }
@@ -792,7 +1067,7 @@ export var useChatManager = function useChatManager(_ref) {
792
1067
  // Tope de concurrencia: si esta sesión no está generando y ya hay
793
1068
  // MAX_CONCURRENT_STREAMS activas, avisamos y no arrancamos otra.
794
1069
  willStartNewStream = !sessionStreamManager.isActive(currentChatId.current);
795
- if (!shouldBlockConcurrentStreamStart(willStartNewStream, sessionStreamManager.getActiveCount(), MAX_CONCURRENT_STREAMS)) {
1070
+ if (!(willStartNewStream && sessionStreamManager.getActiveCount() >= MAX_CONCURRENT_STREAMS)) {
796
1071
  _context2.next = 2;
797
1072
  break;
798
1073
  }
@@ -811,7 +1086,7 @@ export var useChatManager = function useChatManager(_ref) {
811
1086
  contextMessage = buildContextMessage(effectiveMentions);
812
1087
  payloadFuaId = fuaId !== null && fuaId !== void 0 ? fuaId : options.fuaId;
813
1088
  payloadScId = scId !== null && scId !== void 0 ? scId : options.scId;
814
- payloadContextData = contextData !== null && contextData !== void 0 ? contextData : options.contextData;
1089
+ payloadContextData = options.contextData;
815
1090
  displayMessage = formatQuickActionMessageForDisplay(message, {
816
1091
  fuaId: payloadFuaId,
817
1092
  scId: payloadScId
@@ -939,8 +1214,8 @@ export var useChatManager = function useChatManager(_ref) {
939
1214
  }
940
1215
  }, _callee2);
941
1216
  }));
942
- return function (_x0, _x1, _x10, _x11, _x12, _x13, _x14, _x15) {
943
- return _ref4.apply(this, arguments);
1217
+ return function (_x0, _x1, _x10, _x11, _x12, _x13, _x14) {
1218
+ return _ref7.apply(this, arguments);
944
1219
  };
945
1220
  }(), [addMessage, commitToSession, event, askMaia, project, client, task, chipsProject, authUser, agent, t, waitingResponse, loadingMessages, isWebSearchActive, isDeepSearchActive]);
946
1221
  var changeProject = useCallback(function (option) {
@@ -983,7 +1258,7 @@ export var useChatManager = function useChatManager(_ref) {
983
1258
  }
984
1259
  }, [project, setProject, askMaia, authUser, isWebSearchActive, agent]);
985
1260
  var retryMessage = useCallback(/*#__PURE__*/function () {
986
- var _ref5 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee4(message) {
1261
+ var _ref8 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee4(message) {
987
1262
  var _userMessage$message, _userMessage$attachme, _userMessage$sources, _message$memorySessio, _truncated$at;
988
1263
  var sessionId, previousMessages, userMessage, turnId, useOrchestratorFallback, truncated, newMessageId, streamingPlaceholderId, placeholder, nextMessages, _contextRef$current2, ctxChipsProject, ctxProject, ctxClient, ctxTask, lastMessageWithProject, projectToRequest, currentAgentFromMessages, attachments, replayViaOrchestrator, result;
989
1264
  return _regeneratorRuntime.wrap(function (_context4) {
@@ -1071,7 +1346,7 @@ export var useChatManager = function useChatManager(_ref) {
1071
1346
  currentAgentFromMessages = ((_truncated$at = truncated.at(-1)) === null || _truncated$at === void 0 ? void 0 : _truncated$at.agentId) || message.agentId;
1072
1347
  attachments = Array.isArray(userMessage.attachments) ? userMessage.attachments : Array.isArray(userMessage.sources) ? userMessage.sources : [];
1073
1348
  replayViaOrchestrator = /*#__PURE__*/function () {
1074
- var _ref6 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee3() {
1349
+ var _ref9 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee3() {
1075
1350
  var history, projects, result, _t;
1076
1351
  return _regeneratorRuntime.wrap(function (_context3) {
1077
1352
  while (1) switch (_context3.prev = _context3.next) {
@@ -1158,7 +1433,7 @@ export var useChatManager = function useChatManager(_ref) {
1158
1433
  }, _callee3);
1159
1434
  }));
1160
1435
  return function replayViaOrchestrator() {
1161
- return _ref6.apply(this, arguments);
1436
+ return _ref9.apply(this, arguments);
1162
1437
  };
1163
1438
  }();
1164
1439
  if (!(useOrchestratorFallback || !turnId)) {
@@ -1227,12 +1502,12 @@ export var useChatManager = function useChatManager(_ref) {
1227
1502
  }
1228
1503
  }, _callee4);
1229
1504
  }));
1230
- return function (_x16) {
1231
- return _ref5.apply(this, arguments);
1505
+ return function (_x15) {
1506
+ return _ref8.apply(this, arguments);
1232
1507
  };
1233
1508
  }(), [waitingResponse, loadingMessages, replaceMessages, retryCompletion, askMaia, fetchProjects, authUser, agent, t, setActiveChatId]);
1234
1509
  var handleFeedback = useCallback(/*#__PURE__*/function () {
1235
- var _ref7 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee5(feedbackProp, chatMessageId) {
1510
+ var _ref0 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee5(feedbackProp, chatMessageId) {
1236
1511
  var response;
1237
1512
  return _regeneratorRuntime.wrap(function (_context5) {
1238
1513
  while (1) switch (_context5.prev = _context5.next) {
@@ -1257,12 +1532,12 @@ export var useChatManager = function useChatManager(_ref) {
1257
1532
  }
1258
1533
  }, _callee5);
1259
1534
  }));
1260
- return function (_x17, _x18) {
1261
- return _ref7.apply(this, arguments);
1535
+ return function (_x16, _x17) {
1536
+ return _ref0.apply(this, arguments);
1262
1537
  };
1263
1538
  }(), []);
1264
1539
  var handleApprovalDecision = useCallback(/*#__PURE__*/function () {
1265
- var _ref8 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee6(threadIds, decision, editedActions, metadata) {
1540
+ var _ref1 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee6(threadIds, decision, editedActions, metadata) {
1266
1541
  var found, messageWithApproval, foundSessionId, approval, sessionId, messageId, newStatus, hitlContext, isActiveSession, streamMessageId, hitlCtx, releaseActiveProcessing, result;
1267
1542
  return _regeneratorRuntime.wrap(function (_context6) {
1268
1543
  while (1) switch (_context6.prev = _context6.next) {
@@ -1274,7 +1549,7 @@ export var useChatManager = function useChatManager(_ref) {
1274
1549
  console.error('No thread_ids provided for approval decision');
1275
1550
  return _context6.abrupt("return");
1276
1551
  case 1:
1277
- found = findMessageWithApprovalByThreadIds(threadIds, messagesRef.current, useSessionsStore.getState().messages, activeView.get());
1552
+ found = findMessageWithApprovalByThreadIds(threadIds, messagesRef.current);
1278
1553
  if (found !== null && found !== void 0 && found.message.approval) {
1279
1554
  _context6.next = 2;
1280
1555
  break;
@@ -1318,7 +1593,7 @@ export var useChatManager = function useChatManager(_ref) {
1318
1593
  return _context6.abrupt("return");
1319
1594
  case 6:
1320
1595
  messageId = messageWithApproval.id;
1321
- newStatus = resolveApprovalDecisionStatus(decision);
1596
+ newStatus = decision === 'approve' ? 'approved' : 'rejected';
1322
1597
  hitlContext = {
1323
1598
  messageId: messageId,
1324
1599
  messageText: messageWithApproval.message,
@@ -1355,7 +1630,7 @@ export var useChatManager = function useChatManager(_ref) {
1355
1630
  continueRequest: {
1356
1631
  threadIds: threadIds,
1357
1632
  sessionId: approval.session_id,
1358
- decision: resolveContinueStreamDecision(decision, editedActions),
1633
+ decision: editedActions ? 'edit' : decision,
1359
1634
  editedActions: editedActions,
1360
1635
  agentId: (agent === null || agent === void 0 ? void 0 : agent.id) || '',
1361
1636
  lang: authUser.lang,
@@ -1404,12 +1679,12 @@ export var useChatManager = function useChatManager(_ref) {
1404
1679
  }
1405
1680
  }, _callee6);
1406
1681
  }));
1407
- return function (_x19, _x20, _x21, _x22) {
1408
- return _ref8.apply(this, arguments);
1682
+ return function (_x18, _x19, _x20, _x21) {
1683
+ return _ref1.apply(this, arguments);
1409
1684
  };
1410
1685
  }(), [authUser, agent, commitToSession, handleStreamError, handleStreamUpdate, handleStreamFinish, handleApprovalRequired, t]);
1411
1686
  var initializeChat = useCallback(/*#__PURE__*/_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee7() {
1412
- var _userInitialMessage$m, _userInitialMessage$a, _ref0, _resolveProjectToRequ, hasInitialMessage, hasInitialAttachments, hasInitialFaq, hasInitialFua, hasInitialSc, history, _contextRef$current3, ctxChipsProject, ctxProject, ctxClient, ctxTask, projectToRequest, initialDisplayMessage;
1687
+ var _userInitialMessage$m, _userInitialMessage$a, _ref11, _resolveProjectToRequ, hasInitialMessage, hasInitialAttachments, hasInitialFaq, hasInitialFua, hasInitialSc, history, _contextRef$current3, ctxChipsProject, ctxProject, ctxClient, ctxTask, projectToRequest, initialDisplayMessage;
1413
1688
  return _regeneratorRuntime.wrap(function (_context7) {
1414
1689
  while (1) switch (_context7.prev = _context7.next) {
1415
1690
  case 0:
@@ -1448,7 +1723,7 @@ export var useChatManager = function useChatManager(_ref) {
1448
1723
  };
1449
1724
  });
1450
1725
  _contextRef$current3 = contextRef.current, ctxChipsProject = _contextRef$current3.chipsProject, ctxProject = _contextRef$current3.project, ctxClient = _contextRef$current3.client, ctxTask = _contextRef$current3.task;
1451
- projectToRequest = (_ref0 = (_resolveProjectToRequ = resolveProjectToRequest(ctxChipsProject, null)) !== null && _resolveProjectToRequ !== void 0 ? _resolveProjectToRequ : ctxProject === null || ctxProject === void 0 ? void 0 : ctxProject.id) !== null && _ref0 !== void 0 ? _ref0 : null;
1726
+ projectToRequest = (_ref11 = (_resolveProjectToRequ = resolveProjectToRequest(ctxChipsProject, null)) !== null && _resolveProjectToRequ !== void 0 ? _resolveProjectToRequ : ctxProject === null || ctxProject === void 0 ? void 0 : ctxProject.id) !== null && _ref11 !== void 0 ? _ref11 : null;
1452
1727
  initialDisplayMessage = formatQuickActionMessageForDisplay(userInitialMessage.message, {
1453
1728
  fuaId: userInitialMessage.fuaId,
1454
1729
  scId: userInitialMessage.scId
@@ -1554,4 +1829,4 @@ export var useChatManager = function useChatManager(_ref) {
1554
1829
  isDisabled: waitingResponse || loadingMessages
1555
1830
  };
1556
1831
  };
1557
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1c2VDYWxsYmFjayIsInVzZVJlZiIsInVzZUVmZmVjdCIsInVzZVN0YXRlIiwiZmx1c2hTeW5jIiwidjQiLCJ1dWlkdjQiLCJ1c2VDaGF0TWVzc2FnZXMiLCJ1c2VPcmNoZXN0cmF0b3JTdHJlYW0iLCJ1c2VUIiwiZXh0cmFjdFRhc2tJZHNGcm9tUGVuZGluZ0FjdGlvbnNBcmdzIiwiZmluZE1lc3NhZ2VXaXRoQXBwcm92YWxCeVRocmVhZElkcyIsInJlc29sdmVBcHByb3ZhbERlY2lzaW9uU3RhdHVzIiwicmVzb2x2ZUNvbnRpbnVlU3RyZWFtRGVjaXNpb24iLCJtYXBBdXRoVXNlclRvQ2hhdE1lc3NhZ2VVc2VyIiwibm9ybWFsaXplQXNzaXN0YW50QXR0YWNobWVudHMiLCJub3JtYWxpemVTZW5kTWVzc2FnZUFyZ3MiLCJyZWFzb25pbmdUcmFjZUZvciIsInJlcGxhY2VUYXNrVXJsc1dpdGhUYWJTZWdtZW50IiwicmVzb2x2ZUFwcHJvdmVkUGVuZGluZ0FjdGlvbkZsYWdzIiwicmVzb2x2ZUNsaWVudFBheWxvYWQiLCJyZXNvbHZlQ3JlYXRlQWdlbnRGb2xsb3dVcCIsInJlc29sdmVFZGl0QWdlbnRGb2xsb3dVcCIsInJlc29sdmVQcm9qZWN0RGFzaGJvYXJkU3luYyIsInJlc29sdmVQcm9qZWN0VG9SZXF1ZXN0IiwicmVzb2x2ZVN0cmVhbUVycm9yUHJlc2VudGF0aW9uIiwicmVzb2x2ZVRhc2tJZHNGb3JEYXNoYm9hcmQiLCJzaG91bGRTeW5jVGFza0Rhc2hib2FyZCIsInNob3VsZEJsb2NrQ29uY3VycmVudFN0cmVhbVN0YXJ0Iiwic2hvdWxkUmVmZXRjaE9wZW5UYXNrUGFuZWwiLCJjYW5TZW5kQ2hhdE1lc3NhZ2UiLCJpc1Rhc2tEZWxldGVUb29sTmFtZSIsImlzVGFza0VkaXRUb29sTmFtZSIsInVzZVVzZXIiLCJ1c2VHbG9iYWxDb250ZXh0IiwiRVZFTlRTIiwidXNlRXZlbnQiLCJtYWlhIiwiRmVlZGJhY2siLCJDaGF0SGlzdG9yeVJvbGUiLCJidWlsZENvbnRleHRNZXNzYWdlIiwiZm9ybWF0UXVpY2tBY3Rpb25NZXNzYWdlRm9yRGlzcGxheSIsInVzZVByb2plY3RzIiwidXNlVGFiVGFza0RlZmF1bHQiLCJUQVNLX1VSTF9SRUdFWF9QQVRURVJOIiwiZGlzcGF0Y2hNYWlhSG91cnNDaGFyZ2VkIiwiaXNIb3Vyc0NoYXJnZVRvb2wiLCJmZXRjaEFnZW50RGV0YWlsIiwiYnVpbGRIaXRsQWN0aW9uVHlwZUxpc3QiLCJnZXRIaXRsQW5hbHl0aWNzQWdlbnRUeXBlIiwibm9ybWFsaXplSGl0bFRvb2xOYW1lIiwidHJhY2tNYW51YWxIaXRsRXZlbnRzIiwic2Vzc2lvblN0cmVhbWluZ1RleHQiLCJ1c2VTZXNzaW9uc1N0b3JlIiwidXNlU2Vzc2lvbk1ldGEiLCJzZXNzaW9uU3RyZWFtTWFuYWdlciIsIk1BWF9DT05DVVJSRU5UX1NUUkVBTVMiLCJhY3RpdmVWaWV3Iiwibm90aWZ5U2Vzc2lvbkZpbmlzaGVkSW5CYWNrZ3JvdW5kIiwiYnVpbGRTaWRlYmFyU2Vzc2lvblRpdGxlIiwiZW5zdXJlU2Vzc2lvbkluU2lkZWJhciIsImlzU3RyZWFtaW5nUGxhY2Vob2xkZXJNZXNzYWdlSWQiLCJzdHJlYW1pbmdQbGFjZWhvbGRlck1lc3NhZ2VJZCIsImZpbmRVc2VyTWVzc2FnZUZvclJldHJ5IiwibWVzc2FnZXNXaXRob3V0UmV0cmllZFR1cm4iLCJyZXNvbHZlUmV0cnlUdXJuSWQiLCJnZXRDaGF0c1N0b3JlU3RhdGUiLCJ1c2VDaGF0c1N0b3JlIiwicmVhc29uaW5nU3RvcmUiLCJtYXBSZWFzb25pbmdUcmFjZSIsInVzZVN0YWJsZUNhbGxiYWNrcyIsImF1dGhVc2VyIiwiY3VycmVudFVzZXIiLCJuZXh0VXNlciIsImN1cnJlbnQiLCJpZCIsIm5hbWUiLCJhdmF0YXIiLCJ1c2VDaGF0TWFuYWdlciIsIl9yZWYiLCJpbml0aWFsQ2hhdElkIiwiY2hhdElkIiwidXNlckluaXRpYWxNZXNzYWdlIiwib25FcnJvciIsIl9yZWYkYWdlbnRzIiwiYWdlbnRzIiwiX3VzZVQiLCJ0IiwiX3VzZUdsb2JhbENvbnRleHQiLCJwcm9qZWN0Iiwic2V0UHJvamVjdCIsImNsaWVudCIsInNldENsaWVudCIsInRhc2siLCJzZXRUYXNrIiwiYWdlbnQiLCJpc1dlYlNlYXJjaEFjdGl2ZSIsImlzRGVlcFNlYXJjaEFjdGl2ZSIsImlzQXV0b0FwcHJvdmVBY3RpdmUiLCJjaGlwc1Byb2plY3QiLCJzZXRDaGlwc1Byb2plY3QiLCJldmVudCIsIl91c2VQcm9qZWN0cyIsImZldGNoUHJvamVjdHMiLCJfdXNlU3RhYmxlQ2FsbGJhY2tzIiwiX3VzZVRhYlRhc2tEZWZhdWx0IiwiZ2V0VGFiVGFza0RlZmF1bHQiLCJjdXJyZW50TWVzc2FnZUlkIiwiY3VycmVudFVzZXJRdWVzdGlvbiIsImN1cnJlbnRDaGF0SWQiLCJzZXRBY3RpdmVDaGF0SWQiLCJzdGF0ZSIsInJlcG9ydGVkRXZlbnQiLCJtZXNzYWdlc1JlZiIsImxhc3RNYW51YWxBcHByb3ZhbFJlZiIsInRyYWNrZWRNYW51YWxIaXRsS2V5c1JlZiIsIlNldCIsImhpdGxFeGVjdXRpb25Db250ZXh0UmVmIiwicmV0cnlTbmFwc2hvdFJlZiIsImlzUHJvY2Vzc2luZ1JlZiIsImZpcnN0VGltZVJlZiIsInN0cmVhbWluZ1BsYWNlaG9sZGVySWRSZWYiLCJhY3RpdmVTdHJlYW1DaGF0SWRSZWYiLCJjbGVhclN0cmVhbVVpUmVmIiwidW5kZWZpbmVkIiwiX3VzZVN0YXRlIiwiX3VzZVN0YXRlMiIsIl9zbGljZWRUb0FycmF5IiwiYWN0aXZlTG9hZGluZ3MiLCJzZXRBY3RpdmVMb2FkaW5ncyIsIl91c2VTdGF0ZTMiLCJfdXNlU3RhdGU0IiwiYWN0aXZlU2Vzc2lvbklkIiwic2V0QWN0aXZlU2Vzc2lvbklkIiwiaXNNb3VudGVkUmVmIiwibGFzdEhhbmRsZWRUZXJtaW5hbFJlZiIsImlzV2ViU2VhcmNoQWN0aXZlUmVmIiwiaXNEZWVwU2VhcmNoQWN0aXZlUmVmIiwiaXNBdXRvQXBwcm92ZUFjdGl2ZVJlZiIsImNvbnRleHRSZWYiLCJfdXNlQ2hhdE1lc3NhZ2VzIiwibG9hZGluZ01lc3NhZ2VzIiwibWVzc2FnZXMiLCJpc0xvYWRpbmdNb3JlTWVzc2FnZXMiLCJsb2FkTWVzc2FnZXMiLCJhZGRNZXNzYWdlIiwicmVtb3ZlTWVzc2FnZSIsInJlcGxhY2VNZXNzYWdlcyIsImhhbmRsZVNjcm9sbCIsImNvbW1pdFRvU2Vzc2lvbiIsInNlc3Npb25JZCIsIm1lc3NhZ2UiLCJnZXRTdGF0ZSIsImlzIiwiZHJvcEZyb21TZXNzaW9uIiwibWVzc2FnZUlkIiwiY2xlYXJTZXNzaW9uVGFpbCIsInNldE1lc3NhZ2VzIiwic2V0IiwiYWN0aXZlU2Vzc2lvbk1ldGEiLCJfYWN0aXZlU2Vzc2lvbk1ldGEkZmkiLCJzdGF0dXMiLCJpc1Rlcm1pbmFsIiwia2V5IiwiY29uY2F0IiwiZmluaXNoZWRBdCIsInRhaWwiLCJnZXRNZXNzYWdlcyIsImhhc1N0YWxlUGxhY2Vob2xkZXIiLCJzb21lIiwibXNnIiwiZm9yY2UiLCJjdXN0b21FdmVudCIsIkN1c3RvbUV2ZW50IiwiZGV0YWlsIiwiZG9jdW1lbnQiLCJkaXNwYXRjaEV2ZW50IiwicHJldmlvdXNJbml0aWFsQ2hhdElkUmVmIiwicHJldmlvdXNJbml0aWFsQ2hhdElkIiwiaXNBY3RpdmUiLCJoYW5kbGVTdHJlYW1FcnJvciIsImN0eCIsImVycm9yTWVzc2FnZSIsImVycm9yUmF3TWVzc2FnZSIsInBsYWNlaG9sZGVySWQiLCJjbGVhciIsInJldHJ5U25hcHNob3QiLCJzaG93Iiwic2V2ZXJpdHkiLCJfcmVzb2x2ZVN0cmVhbUVycm9yUHIiLCJpc0FjY2Vzc0RlbmllZCIsImlzUHJvbXB0VG9vTG9uZyIsInRva2Vuc1VzZWQiLCJzaG93UmV0cnkiLCJ1c2VkIiwiX29iamVjdFNwcmVhZCIsImlzRXJyb3IiLCJzdWdnZXN0aW9ucyIsImRhdGUiLCJEYXRlIiwidXNlciIsInJvbGUiLCJBU1NJU1RBTlQiLCJtYXJrQ2hhdEFzVW5yZWFkIiwiaGFuZGxlU3RyZWFtVXBkYXRlIiwiY29udGVudCIsInBsYWNlaG9sZGVyRXhpc3RzIiwic3RhcnQiLCJzZXRUZXh0IiwiaGFuZGxlU3RyZWFtRmluaXNoIiwiX3JlZjIiLCJfYXN5bmNUb0dlbmVyYXRvciIsIl9yZWdlbmVyYXRvclJ1bnRpbWUiLCJtYXJrIiwiX2NhbGxlZSIsInNvdXJjZXMiLCJtZW1vcnlTZXNzaW9uSWQiLCJyYXdBdHRhY2htZW50cyIsImNvbXBsZXRlZEFnZW50SWQiLCJfcmVzb2x2ZWRDb250ZXh0IiwicmVhc29uaW5nIiwiX3JlYXNvbmluZ1RyYWNlRm9yIiwiX3ByZXZpb3VzTWVzc2FnZSRhcHByIiwiX3dpbmRvdyR0YXNrUGFuZWwiLCJfbWFudWFsQXBwcm92YWwkdG9vbEEiLCJ0ZW1wTWVzc2FnZUlkIiwiYXR0YWNobWVudHMiLCJmaW5hbE1lc3NhZ2VJZCIsImZpbmFsVHJhY2UiLCJ0YXNrVXJsUmVnZXgiLCJtYXRjaGVzIiwiY29udGVudFRvQWRkIiwicHJldmlvdXNNZXNzYWdlIiwiaGFzQXBwcm92YWxJblByZXZpb3VzTWVzc2FnZSIsInBlbmRpbmdBY3Rpb25zIiwiX3Jlc29sdmVBcHByb3ZlZFBlbmRpIiwid2FzVGFza0NyZWF0aW9uIiwid2FzVGFza0VkaXQiLCJ3YXNUYXNrRGVsZXRlIiwid2FzQ3JlYXRlQWdlbnRBcHByb3ZlZCIsIndhc0NvbmZpZ3VyZUFnZW50QWNjZXNzQXBwcm92ZWQiLCJ3YXNFZGl0QWdlbnRBcHByb3ZlZCIsImNyZWF0ZUFnZW50Rm9sbG93VXAiLCJtYW51YWxBcHByb3ZhbEZvckFuYWx5dGljcyIsIndhc01hbnVhbENyZWF0ZUFnZW50QXBwcm92ZWQiLCJlZGl0QWdlbnRGb2xsb3dVcCIsInRhc2tJZHNGb3JEYXNoYm9hcmQiLCJzaG91bGRTeW5jRGFzaGJvYXJkIiwidGFza0lkcyIsInRhYiIsInRhYlNlZ21lbnQiLCJsYXN0UHJvamVjdE1lc3NhZ2UiLCJjb250ZXh0UHJvamVjdElkUmF3IiwiY29udGV4dFByb2plY3RJZCIsIl9yZXNvbHZlUHJvamVjdERhc2hibyIsImlzT25Qcm9qZWN0Um91dGUiLCJfd2luZG93JG5ld1Byb2plY3REYXMiLCJfd2luZG93JG5ld1Byb2plY3REYXMyIiwiX3dpbmRvdyRuZXdQcm9qZWN0RGFzMyIsIl93aW5kb3ckbmV3UHJvamVjdERhczQiLCJfd2luZG93JG5ld1Byb2plY3REYXM1IiwiX3dpbmRvdyRuZXdQcm9qZWN0RGFzNiIsIm9wZW5UYXNrUGFuZWxJZCIsIm1hbnVhbEFwcHJvdmFsIiwibWFudWFsV2FzVGFza0VkaXQiLCJtYW51YWxXYXNUYXNrRGVsZXRlIiwiaG91cnNUb29sc0Zyb21BcHByb3ZhbCIsIndhc0hvdXJzQ2hhcmdlQXBwcm92ZWQiLCJtYW51YWxIb3Vyc1Rvb2wiLCJ3YXNIb3Vyc0NoYXJnZU1hbnVhbEFwcHJvdmVkIiwidG9vbHMiLCJtYW51YWxQc2V1ZG9BY3Rpb24iLCJhZmZlY3RlZFRhc2tJZHMiLCJfd2luZG93JHRhc2tQYW5lbDIiLCJfd2luZG93JHRhc2tQYW5lbDIkcmUiLCJfZ2V0Q2hhdHNTdG9yZVN0YXRlIiwiaXNDaGF0Vmlld1Zpc2libGUiLCJtYXJrQ2hhdEFzUmVhZCIsIndyYXAiLCJfY29udGV4dCIsInByZXYiLCJuZXh0IiwicmVuYW1lIiwibGVuZ3RoIiwiYWJydXB0IiwiUmVnRXhwIiwiX3RvQ29uc3VtYWJsZUFycmF5IiwibWF0Y2hBbGwiLCJmaWx0ZXIiLCJtIiwiYXQiLCJhcHByb3ZhbCIsInBlbmRpbmdfYWN0aW9ucyIsImFwcHJvdmFsU3RhdHVzIiwiQm9vbGVhbiIsIndpbmRvdyIsIk1BSUFfQ0hBVF9BSV9GRUFUVVJFX0FDQ0VTU19NVUxUSV9BR0VOVFMiLCJhaUNoYXRIaXRsT3B0aW9uIiwiYWdlbnRfdHlwZSIsImFjdGlvbl90eXBlIiwiZGVjaXNpb24iLCJvcHRpb24iLCJ0cmltIiwiY3JlYXRlZF9hZ2VudF9pZCIsInRvb2xOYW1lIiwicmVzb2x1dGlvbl9zb3VyY2UiLCJzZW50IiwicHJvamVjdElkIiwicGFyc2VJbnQiLCJTdHJpbmciLCJsb2NhdGlvbiIsInBhdGhuYW1lIiwibmV3UHJvamVjdERhc2hib2FyZCIsImFkZEV4aXN0aW5nVGFza1RvRGFzaGJvYXJkIiwiY2FsbCIsImVkaXRFeGlzdGluZ1Rhc2tJbkRhc2hib2FyZCIsImRlbGV0ZUV4aXN0aW5nVGFza0Zyb21EYXNoYm9hcmQiLCJ0YXNrUGFuZWwiLCJ0YXNrSWQiLCJtYXAiLCJhY3Rpb24iLCJ0b29sX25hbWUiLCJzb3VyY2UiLCJ0b29sX2FyZ3MiLCJ0b29sQXJncyIsInJlZmV0Y2hUYXNrIiwiYWdlbnRJZCIsInRoZW4iLCJjaGF0QWdlbnQiLCJlcnIiLCJjb25zb2xlIiwiZXJyb3IiLCJzdG9wIiwiX3giLCJfeDIiLCJfeDMiLCJfeDQiLCJfeDUiLCJfeDYiLCJfeDciLCJfeDgiLCJfeDkiLCJhcHBseSIsImFyZ3VtZW50cyIsImhhbmRsZVN0cmVhbVN0b3AiLCJwYXJ0aWFsVGV4dCIsInN0b3BwZWRUcmFjZSIsInN0ZXBzIiwiZmluaXNoIiwicmVtb3ZlIiwiaXNGcm9udGVuZENhbmNlbGxlZCIsImhhbmRsZUFwcHJvdmFsUmVxdWlyZWQiLCJhY2N1bXVsYXRlZENvbnRlbnQiLCJfYXBwcm92YWwkcGVuZGluZ19hY3QiLCJfbWFwUmVhc29uaW5nVHJhY2UiLCJoaXRsQ29udGV4dCIsIm9yaWdpbmFsX3RocmVhZF9pZCIsIm1lc3NhZ2VUZXh0IiwidGhyZWFkSWRzIiwidGhyZWFkX2lkIiwibWFudWFsX2FwcHJvdmFsX2RldGVjdGVkIiwiYXV0b19hcHByb3ZlZCIsImFwcHJvdmFsX3N0YXR1cyIsIl9hcHByb3ZhbCRwZW5kaW5nX2FjdDIiLCJfcmVmMyIsIl90b29sX25hbWUiLCJfdG9vbF9hcmdzIiwiaW1wcmVzc2lvbiIsImFpQ2hhdEhpdGwiLCJmaXJzdEFjdGlvbiIsImFwcHJvdmFsTWVzc2FnZUlkIiwiYXBwcm92YWxUcmFjZSIsIl91c2VPcmNoZXN0cmF0b3JTdHJlYSIsIm9uU3RyZWFtVXBkYXRlIiwib25GaW5pc2hTdHJlYW0iLCJvblN0b3AiLCJvbkFwcHJvdmFsUmVxdWlyZWQiLCJhc2tNYWlhIiwicmV0cnlDb21wbGV0aW9uIiwid2FpdGluZ1Jlc3BvbnNlIiwiaXNMb2FkaW5nIiwiaXNXcml0aW5nIiwibG9hZGluZ01lc3NhZ2UiLCJzdHJlYW1BY3Rpdml0eSIsInVwZGF0ZVN0cmVhbUFjdGl2aXR5Iiwic3RvcFN0cmVhbWluZyIsImN1cnJlbnRQcm9qZWN0Iiwic2VuZE1lc3NhZ2UiLCJfcmVmNCIsIl9jYWxsZWUyIiwiYXR0YWNobWVudHNPck9wdGlvbnMiLCJmYXFJZCIsImFnZW50U3VnZ2VzdGlvbklkIiwibWVudGlvbnMiLCJmdWFJZCIsInNjSWQiLCJjb250ZXh0RGF0YSIsIl9tZXNzYWdlc1JlZiRjdXJyZW50Iiwid2lsbFN0YXJ0TmV3U3RyZWFtIiwiX25vcm1hbGl6ZVNlbmRNZXNzYWdlIiwib3B0aW9ucyIsImVmZmVjdGl2ZU1lbnRpb25zIiwiY29udGV4dE1lc3NhZ2UiLCJwYXlsb2FkRnVhSWQiLCJwYXlsb2FkU2NJZCIsInBheWxvYWRDb250ZXh0RGF0YSIsImRpc3BsYXlNZXNzYWdlIiwibmV3TWVzc2FnZUlkIiwibGFzdE1lc3NhZ2VXaXRoUHJvamVjdCIsImN1cnJlbnRBZ2VudEZyb21NZXNzYWdlcyIsIl9jb250ZXh0UmVmJGN1cnJlbnQiLCJjdHhDaGlwc1Byb2plY3QiLCJjdHhQcm9qZWN0IiwiY3R4Q2xpZW50IiwiY3R4VGFzayIsInN0cmVhbWluZ1BsYWNlaG9sZGVySWQiLCJmaW5hbE1lc3NhZ2UiLCJfb3B0aW9ucyRwcm9qZWN0Q2hhbmciLCJfY29udGV4dFJlZiRjdXJyZW50JHAiLCJoaXN0b3J5IiwibGFzdE1lc3NhZ2VQcm9qZWN0SWQiLCJwcm9qZWN0VG9SZXF1ZXN0IiwicHJvamVjdHMiLCJwYXlsb2FkRmFxSWQiLCJwYXlsb2FkQWdlbnRTdWdnZXN0aW9uSWQiLCJwYXlsb2FkRGF0YSIsIl9jb250ZXh0MiIsImdldEFjdGl2ZUNvdW50IiwicG1BaVR5cGVkVGV4dCIsInRpdGxlIiwiVVNFUiIsInByb2plY3RDaGFuZ2VkIiwiaW5jb21lVHlwZSIsImhpc3RvcnlNZXNzYWdlIiwidG9TdHJpbmciLCJsYW5nIiwidXNlcklkIiwiZmlyc3ROYW1lIiwibGFzdE5hbWUiLCJjb21wYW55SWQiLCJjb21wYW55X2lkIiwiYWdlbnROYW1lIiwiZmVlSWQiLCJOdW1iZXIiLCJwcm9qZWN0TmFtZSIsInRhc2tOYW1lIiwiZW50aXR5IiwiYWdlbnRFbnRpdHkiLCJ0eXBlIiwiYWdlbnRUeXBlIiwiZW1vamkiLCJhZ2VudEVtb2ppIiwiX3gwIiwiX3gxIiwiX3gxMCIsIl94MTEiLCJfeDEyIiwiX3gxMyIsIl94MTQiLCJfeDE1IiwiY2hhbmdlUHJvamVjdCIsImNsaWVudElkIiwicmV0cnlNZXNzYWdlIiwiX3JlZjUiLCJfY2FsbGVlNCIsIl91c2VyTWVzc2FnZSRtZXNzYWdlIiwiX3VzZXJNZXNzYWdlJGF0dGFjaG1lIiwiX3VzZXJNZXNzYWdlJHNvdXJjZXMiLCJfbWVzc2FnZSRtZW1vcnlTZXNzaW8iLCJfdHJ1bmNhdGVkJGF0IiwicHJldmlvdXNNZXNzYWdlcyIsInVzZXJNZXNzYWdlIiwidHVybklkIiwidXNlT3JjaGVzdHJhdG9yRmFsbGJhY2siLCJ0cnVuY2F0ZWQiLCJwbGFjZWhvbGRlciIsIm5leHRNZXNzYWdlcyIsIl9jb250ZXh0UmVmJGN1cnJlbnQyIiwicmVwbGF5VmlhT3JjaGVzdHJhdG9yIiwicmVzdWx0IiwiX2NvbnRleHQ0IiwiaXRlbSIsIkFycmF5IiwiaXNBcnJheSIsIl9yZWY2IiwiX2NhbGxlZTMiLCJfdCIsIl9jb250ZXh0MyIsInN0YXJ0ZWQiLCJyZWFzb24iLCJfeDE2IiwiaGFuZGxlRmVlZGJhY2siLCJfcmVmNyIsIl9jYWxsZWU1IiwiZmVlZGJhY2tQcm9wIiwiY2hhdE1lc3NhZ2VJZCIsInJlc3BvbnNlIiwiX2NvbnRleHQ1IiwiQ2hhdHMiLCJ3YXNIZWxwZnVsQ2hhdCIsIlRIVU1CU19VUCIsIndhc0hlbHBmdWwiLCJfeDE3IiwiX3gxOCIsImhhbmRsZUFwcHJvdmFsRGVjaXNpb24iLCJfcmVmOCIsIl9jYWxsZWU2IiwiZWRpdGVkQWN0aW9ucyIsIm1ldGFkYXRhIiwiZm91bmQiLCJtZXNzYWdlV2l0aEFwcHJvdmFsIiwiZm91bmRTZXNzaW9uSWQiLCJuZXdTdGF0dXMiLCJpc0FjdGl2ZVNlc3Npb24iLCJzdHJlYW1NZXNzYWdlSWQiLCJoaXRsQ3R4IiwicmVsZWFzZUFjdGl2ZVByb2Nlc3NpbmciLCJfY29udGV4dDYiLCJnZXQiLCJzZXNzaW9uX2lkIiwic3RhcnRDb250aW51ZVN0cmVhbSIsImNvbnRpbnVlUmVxdWVzdCIsImhpdGxFeGVjdXRpb25Db250ZXh0IiwiY2FsbGJhY2tzIiwiZmluaXNoUGF5bG9hZCIsInJlc29sdmVkQ29udGV4dCIsImFwcHJvdmFsUGF5bG9hZCIsIl94MTkiLCJfeDIwIiwiX3gyMSIsIl94MjIiLCJpbml0aWFsaXplQ2hhdCIsIl9jYWxsZWU3IiwiX3VzZXJJbml0aWFsTWVzc2FnZSRtIiwiX3VzZXJJbml0aWFsTWVzc2FnZSRhIiwiX3JlZjAiLCJfcmVzb2x2ZVByb2plY3RUb1JlcXUiLCJoYXNJbml0aWFsTWVzc2FnZSIsImhhc0luaXRpYWxBdHRhY2htZW50cyIsImhhc0luaXRpYWxGYXEiLCJoYXNJbml0aWFsRnVhIiwiaGFzSW5pdGlhbFNjIiwiX2NvbnRleHRSZWYkY3VycmVudDMiLCJpbml0aWFsRGlzcGxheU1lc3NhZ2UiLCJfY29udGV4dDciLCJyZXNldENoYXQiLCJwcmV2aW91c1Nlc3Npb25JZCIsInN0b3BHZW5lcmF0aW9uIiwiaXNEaXNhYmxlZCJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9ob29rcy91c2VDaGF0TWFuYWdlci91c2VDaGF0TWFuYWdlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSByYWRpeCAqL1xuLyogZXNsaW50LWRpc2FibGUgbm8tbmVzdGVkLXRlcm5hcnkgKi9cbi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1ub24tbnVsbC1hc3NlcnRlZC1vcHRpb25hbC1jaGFpbiAqL1xuLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSAqL1xuaW1wb3J0IHsgdXNlQ2FsbGJhY2ssIHVzZVJlZiwgdXNlRWZmZWN0LCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgZmx1c2hTeW5jIH0gZnJvbSAncmVhY3QtZG9tJ1xuaW1wb3J0IHsgdjQgYXMgdXVpZHY0IH0gZnJvbSAndXVpZCdcbmltcG9ydCB7IHVzZUNoYXRNZXNzYWdlcyB9IGZyb20gJy4uL3VzZUNoYXRNZXNzYWdlcydcbmltcG9ydCB7IHVzZU9yY2hlc3RyYXRvclN0cmVhbSB9IGZyb20gJy4uL3VzZU9yY2hlc3RyYXRvclN0cmVhbSdcbmltcG9ydCB7IHVzZVQgfSBmcm9tICcuLi91c2VUJ1xuaW1wb3J0IHsgQXR0YWNobWVudEZpbGUgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL21vbGVjdWxlcy9DaGF0Rm9vdGVyL0NoYXRGb290ZXInXG5pbXBvcnQge1xuICBleHRyYWN0VGFza0lkc0Zyb21QZW5kaW5nQWN0aW9uc0FyZ3MsXG4gIGZpbmRNZXNzYWdlV2l0aEFwcHJvdmFsQnlUaHJlYWRJZHMsXG4gIHJlc29sdmVBcHByb3ZhbERlY2lzaW9uU3RhdHVzLFxuICByZXNvbHZlQ29udGludWVTdHJlYW1EZWNpc2lvbixcbiAgbWFwQXV0aFVzZXJUb0NoYXRNZXNzYWdlVXNlcixcbiAgbm9ybWFsaXplQXNzaXN0YW50QXR0YWNobWVudHMsXG4gIG5vcm1hbGl6ZVNlbmRNZXNzYWdlQXJncyxcbiAgcmVhc29uaW5nVHJhY2VGb3IsXG4gIHJlcGxhY2VUYXNrVXJsc1dpdGhUYWJTZWdtZW50LFxuICByZXNvbHZlQXBwcm92ZWRQZW5kaW5nQWN0aW9uRmxhZ3MsXG4gIHJlc29sdmVDbGllbnRQYXlsb2FkLFxuICByZXNvbHZlQ3JlYXRlQWdlbnRGb2xsb3dVcCxcbiAgcmVzb2x2ZUVkaXRBZ2VudEZvbGxvd1VwLFxuICByZXNvbHZlUHJvamVjdERhc2hib2FyZFN5bmMsXG4gIHJlc29sdmVQcm9qZWN0VG9SZXF1ZXN0LFxuICByZXNvbHZlU3RyZWFtRXJyb3JQcmVzZW50YXRpb24sXG4gIHJlc29sdmVUYXNrSWRzRm9yRGFzaGJvYXJkLFxuICBzaG91bGRTeW5jVGFza0Rhc2hib2FyZCxcbiAgc2hvdWxkQmxvY2tDb25jdXJyZW50U3RyZWFtU3RhcnQsXG4gIHNob3VsZFJlZmV0Y2hPcGVuVGFza1BhbmVsLFxuICBjYW5TZW5kQ2hhdE1lc3NhZ2UsXG4gIGlzVGFza0RlbGV0ZVRvb2xOYW1lLFxuICBpc1Rhc2tFZGl0VG9vbE5hbWUsXG59IGZyb20gJy4vdXNlQ2hhdE1hbmFnZXIuaGVscGVycydcbmltcG9ydCB7IFNlbmRNZXNzYWdlT3B0aW9ucywgVXNlQ2hhdE1hbmFnZXJQcm9wcyB9IGZyb20gJy4vdXNlQ2hhdE1hbmFnZXIuaW50ZXJmYWNlJ1xuaW1wb3J0IHsgdXNlVXNlciwgQ09SVXNlciB9IGZyb20gJy4uLy4uL2NvbnRleHQvY29yLXVzZXInXG5pbXBvcnQgeyB1c2VHbG9iYWxDb250ZXh0IH0gZnJvbSAnLi4vLi4vY29udGV4dC9nbG9iYWwtY29udGV4dCdcbmltcG9ydCB7IEVWRU5UUywgdXNlRXZlbnQgfSBmcm9tICcuLi91c2VFdmVudCdcbmltcG9ydCBtYWlhIGZyb20gJy4uLy4uL3NlcnZpY2VzL21haWEnXG5pbXBvcnQgeyBGZWVkYmFjayB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvbW9sZWN1bGVzL01lc3NhZ2VGZWVkYmFjay9NZXNzYWdlRmVlZGJhY2snXG5pbXBvcnQgeyBDaGF0TWVzc2FnZSwgQ2hhdE1lc3NhZ2VVc2VyLCBDaGF0SGlzdG9yeVJvbGUsIEFwcHJvdmFsUmVxdWVzdCwgUGVuZGluZ0FjdGlvbiB9IGZyb20gJy4uLy4uL3R5cGVzL0NoYXQnXG5pbXBvcnQgeyBDb250ZXh0TWVudGlvbiwgQ29udGV4dE1lc3NhZ2UsIGJ1aWxkQ29udGV4dE1lc3NhZ2UgfSBmcm9tICcuLi8uLi90eXBlcy9jb250ZXh0TWVudGlvbidcbmltcG9ydCB7IGZvcm1hdFF1aWNrQWN0aW9uTWVzc2FnZUZvckRpc3BsYXkgfSBmcm9tICcuLi8uLi91dGlscy9mb3JtYXRRdWlja0FjdGlvbk1lc3NhZ2UnXG5cbmltcG9ydCB7IFByb2plY3QgfSBmcm9tICcuLi8uLi90eXBlcy9Qcm9qZWN0J1xuaW1wb3J0IHsgdXNlUHJvamVjdHMgfSBmcm9tICcuLi91c2VQcm9qZWN0cydcbmltcG9ydCB7IHVzZVRhYlRhc2tEZWZhdWx0IH0gZnJvbSAnLi4vdXNlVGFiVGFza0RlZmF1bHQnXG5pbXBvcnQgeyBUQVNLX1VSTF9SRUdFWF9QQVRURVJOIH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzL3Rhc2tVcmxzJ1xuaW1wb3J0IHsgZGlzcGF0Y2hNYWlhSG91cnNDaGFyZ2VkLCBpc0hvdXJzQ2hhcmdlVG9vbCB9IGZyb20gJy4uLy4uL2NvbnN0YW50cy9wbGFubmVyU3luY0V2ZW50cydcbmltcG9ydCB7IGZldGNoQWdlbnREZXRhaWwgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9tYWlhL0FnZW50cy9mZXRjaEFnZW50RGV0YWlsJ1xuaW1wb3J0IHtcbiAgYnVpbGRIaXRsQWN0aW9uVHlwZUxpc3QsXG4gIGdldEhpdGxBbmFseXRpY3NBZ2VudFR5cGUsXG4gIG5vcm1hbGl6ZUhpdGxUb29sTmFtZSxcbiAgdHJhY2tNYW51YWxIaXRsRXZlbnRzLFxufSBmcm9tICcuLi8uLi91dGlscy9oaXRsQW5hbHl0aWNzJ1xuaW1wb3J0IHsgdHlwZSBIaXRsRXhlY3V0aW9uQ29udGV4dCB9IGZyb20gJy4uLy4uL3V0aWxzL3N0cmVhbUFjdGl2aXR5TWVzc2FnZXMnXG5pbXBvcnQgeyBzZXNzaW9uU3RyZWFtaW5nVGV4dCB9IGZyb20gJy4uLy4uL3N0b3JlL3Nlc3Npb25zL3Nlc3Npb25TdHJlYW1pbmdUZXh0J1xuaW1wb3J0IHsgdXNlU2Vzc2lvbnNTdG9yZSB9IGZyb20gJy4uLy4uL3N0b3JlL3Nlc3Npb25zL3VzZVNlc3Npb25zU3RvcmUnXG5pbXBvcnQgeyB1c2VTZXNzaW9uTWV0YSB9IGZyb20gJy4uLy4uL3N0b3JlL3Nlc3Npb25zL3VzZVNlc3Npb25NZXRhJ1xuaW1wb3J0IHsgc2Vzc2lvblN0cmVhbU1hbmFnZXIsIE1BWF9DT05DVVJSRU5UX1NUUkVBTVMgfSBmcm9tICcuLi8uLi9zdG9yZS9zZXNzaW9ucy9zZXNzaW9uU3RyZWFtTWFuYWdlcidcbmltcG9ydCB7IGFjdGl2ZVZpZXcgfSBmcm9tICcuLi8uLi9zdG9yZS9zZXNzaW9ucy9hY3RpdmVWaWV3J1xuaW1wb3J0IHsgbm90aWZ5U2Vzc2lvbkZpbmlzaGVkSW5CYWNrZ3JvdW5kIH0gZnJvbSAnLi4vLi4vc3RvcmUvc2Vzc2lvbnMvc2Vzc2lvbk5vdGlmaWNhdGlvbnMnXG5pbXBvcnQgeyBidWlsZFNpZGViYXJTZXNzaW9uVGl0bGUsIGVuc3VyZVNlc3Npb25JblNpZGViYXIgfSBmcm9tICcuLi8uLi9zdG9yZS9jaGF0c1NpZGViYXJPcHRpbWlzdGljJ1xuaW1wb3J0IHsgaXNTdHJlYW1pbmdQbGFjZWhvbGRlck1lc3NhZ2VJZCwgc3RyZWFtaW5nUGxhY2Vob2xkZXJNZXNzYWdlSWQgfSBmcm9tICcuLi8uLi91dGlscy9zdHJlYW1BY3Rpdml0eU1lc3NhZ2VzJ1xuaW1wb3J0IHsgZmluZFVzZXJNZXNzYWdlRm9yUmV0cnksIG1lc3NhZ2VzV2l0aG91dFJldHJpZWRUdXJuLCByZXNvbHZlUmV0cnlUdXJuSWQgfSBmcm9tICcuLi8uLi91dGlscy9yZXRyeUNvbXBsZXRpb24nXG5pbXBvcnQgdHlwZSB7IFN0cmVhbUNvbnRleHQgfSBmcm9tICcuLi91c2VPcmNoZXN0cmF0b3JTdHJlYW0vdXNlT3JjaGVzdHJhdG9yU3RyZWFtLmludGVyZmFjZSdcbmltcG9ydCB7IGdldENoYXRzU3RvcmVTdGF0ZSwgdXNlQ2hhdHNTdG9yZSB9IGZyb20gJy4uLy4uL3N0b3JlL3VzZUNoYXRzU3RvcmUnXG5pbXBvcnQgeyByZWFzb25pbmdTdG9yZSB9IGZyb20gJy4uL3VzZVJlYXNvbmluZ1RyYWNlJ1xuaW1wb3J0IHsgbWFwUmVhc29uaW5nVHJhY2UgfSBmcm9tICcuLi8uLi91dGlscy9yZWFzb25pbmdNYXBwZXJzJ1xuaW1wb3J0IHR5cGUgeyBSZWFzb25pbmdUcmFjZVBheWxvYWQgfSBmcm9tICcuLi8uLi90eXBlcy9yZWFzb25pbmcnXG5cbmNvbnN0IHVzZVN0YWJsZUNhbGxiYWNrcyA9IChhdXRoVXNlcjogQ09SVXNlcikgPT4ge1xuICBjb25zdCBjdXJyZW50VXNlciA9IHVzZVJlZjxDaGF0TWVzc2FnZVVzZXI+KG1hcEF1dGhVc2VyVG9DaGF0TWVzc2FnZVVzZXIoYXV0aFVzZXIpKVxuXG4gIGNvbnN0IG5leHRVc2VyID0gbWFwQXV0aFVzZXJUb0NoYXRNZXNzYWdlVXNlcihhdXRoVXNlcilcbiAgaWYgKFxuICAgIGN1cnJlbnRVc2VyLmN1cnJlbnQuaWQgIT09IG5leHRVc2VyLmlkIHx8XG4gICAgY3VycmVudFVzZXIuY3VycmVudC5uYW1lICE9PSBuZXh0VXNlci5uYW1lIHx8XG4gICAgY3VycmVudFVzZXIuY3VycmVudC5hdmF0YXIgIT09IG5leHRVc2VyLmF2YXRhclxuICApIHtcbiAgICBjdXJyZW50VXNlci5jdXJyZW50ID0gbmV4dFVzZXJcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgY3VycmVudFVzZXI6IGN1cnJlbnRVc2VyLmN1cnJlbnQsXG4gIH1cbn1cblxuZXhwb3J0IGNvbnN0IHVzZUNoYXRNYW5hZ2VyID0gKHtcbiAgY2hhdElkOiBpbml0aWFsQ2hhdElkLFxuICB1c2VySW5pdGlhbE1lc3NhZ2UsXG4gIG9uRXJyb3IsXG4gIGFnZW50cyA9IFtdLFxufTogVXNlQ2hhdE1hbmFnZXJQcm9wcykgPT4ge1xuICBjb25zdCB7IHQgfSA9IHVzZVQoKVxuICBjb25zdCBhdXRoVXNlciA9IHVzZVVzZXIoKVxuICBjb25zdCB7XG4gICAgcHJvamVjdCxcbiAgICBzZXRQcm9qZWN0LFxuICAgIGNsaWVudCxcbiAgICBzZXRDbGllbnQsXG4gICAgdGFzayxcbiAgICBzZXRUYXNrLFxuICAgIGFnZW50LFxuICAgIGlzV2ViU2VhcmNoQWN0aXZlLFxuICAgIGlzRGVlcFNlYXJjaEFjdGl2ZSxcbiAgICBpc0F1dG9BcHByb3ZlQWN0aXZlLFxuICAgIGNoaXBzUHJvamVjdCxcbiAgICBzZXRDaGlwc1Byb2plY3QsXG4gIH0gPSB1c2VHbG9iYWxDb250ZXh0KClcbiAgY29uc3QgZXZlbnQgPSB1c2VFdmVudCgpXG4gIGNvbnN0IHsgZmV0Y2hQcm9qZWN0cyB9ID0gdXNlUHJvamVjdHMoKVxuICBjb25zdCB7IGN1cnJlbnRVc2VyIH0gPSB1c2VTdGFibGVDYWxsYmFja3MoYXV0aFVzZXIpXG4gIGNvbnN0IHsgZ2V0VGFiVGFza0RlZmF1bHQgfSA9IHVzZVRhYlRhc2tEZWZhdWx0KClcblxuICBjb25zdCBjdXJyZW50TWVzc2FnZUlkID0gdXNlUmVmKHV1aWR2NCgpKVxuICBjb25zdCBjdXJyZW50VXNlclF1ZXN0aW9uID0gdXNlUmVmPHN0cmluZyB8IG51bGw+KG51bGwpXG4gIGNvbnN0IGN1cnJlbnRDaGF0SWQgPSB1c2VSZWYoaW5pdGlhbENoYXRJZCB8fCB1dWlkdjQoKSlcbiAgY29uc3Qgc2V0QWN0aXZlQ2hhdElkID0gdXNlQ2hhdHNTdG9yZShzdGF0ZSA9PiBzdGF0ZS5zZXRBY3RpdmVDaGF0SWQpXG4gIGNvbnN0IHJlcG9ydGVkRXZlbnQgPSB1c2VSZWYoZmFsc2UpXG4gIGNvbnN0IG1lc3NhZ2VzUmVmID0gdXNlUmVmPENoYXRNZXNzYWdlW10+KFtdKVxuICAvKipcbiAgICogR3VhcmRhIGluZm8gZGVsIMO6bHRpbW8gYXBwcm92YWwgbWFudWFsIChjdWFuZG8gZWwgdXN1YXJpbyB0aXBlYSBcInNpXCIvXCJub1wiIGVuIGx1Z2FyXG4gICAqIGRlIGNsaWNrZWFyIGVsIGJvdMOzbikuIEVuIG1hbnVhbCBhcHByb3ZhbCwgYGhhbmRsZUFwcHJvdmFsUmVxdWlyZWRgIHJldG9ybmEgZWFybHlcbiAgICogc2luIGFncmVnYXIgdW4gbWVuc2FqZSBjb24gYGFwcHJvdmFsYCwgYXPDrSBxdWUgbGEgbMOzZ2ljYSBkZSByZWZldGNoIGVuIGBvblN0cmVhbUZpbmlzaGBcbiAgICogbm8gbG8gZGV0ZWN0YSB2w61hIGBwcmV2aW91c01lc3NhZ2UuYXBwcm92YWxgLiBMbyBndWFyZGFtb3MgYWPDoSBwYXJhIGNvbnN1bWlybG8gZGVzcHXDqXMuXG4gICAqL1xuICBjb25zdCBsYXN0TWFudWFsQXBwcm92YWxSZWYgPSB1c2VSZWY8e1xuICAgIHRvb2xOYW1lOiBzdHJpbmdcbiAgICB0b29sQXJnczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCBudWxsXG4gIH0gfCBudWxsPihudWxsKVxuICAvKiogRXZpdGEgZHVwbGljYXIgQUlfQ0hBVF9ISVRMIC8gQUlfQ0hBVF9ISVRMX09QVElPTiBlbiBwcmVhcHJvYmFjaW9uZXMgKG1hbnVhbCBvIGF1dG8pIHBvciBsb3RlLiAqL1xuICBjb25zdCB0cmFja2VkTWFudWFsSGl0bEtleXNSZWYgPSB1c2VSZWY8U2V0PHN0cmluZz4+KG5ldyBTZXQoKSlcbiAgLyoqIENvbnRleHRvIGRlbCBtZW5zYWplIGRlIGFwcm9iYWNpw7NuIHByZXZpbyBhbCBlamVjdXRhciBjb250aW51ZS10aHJlYWQuICovXG4gIGNvbnN0IGhpdGxFeGVjdXRpb25Db250ZXh0UmVmID0gdXNlUmVmPEhpdGxFeGVjdXRpb25Db250ZXh0IHwgbnVsbD4obnVsbClcbiAgLyoqIE1lbnNhamVzIGEgcmVzdGF1cmFyIHNpIGByZXRyeV9jb21wbGV0aW9uYCBmYWxsYSBhbnRlcyBkZSBwZXJzaXN0aXIgZWwgcmVlbXBsYXpvLiAqL1xuICBjb25zdCByZXRyeVNuYXBzaG90UmVmID0gdXNlUmVmPENoYXRNZXNzYWdlW10gfCBudWxsPihudWxsKVxuICBjb25zdCBpc1Byb2Nlc3NpbmdSZWYgPSB1c2VSZWYoZmFsc2UpXG4gIGNvbnN0IGZpcnN0VGltZVJlZiA9IHVzZVJlZihmYWxzZSlcbiAgLyoqIElkIGRlbCBwbGFjZWhvbGRlciBkZWwgbWVuc2FqZSBlbiBzdHJlYW1pbmcgYWN0aXZvIChzaSBoYXkpLiAqL1xuICBjb25zdCBzdHJlYW1pbmdQbGFjZWhvbGRlcklkUmVmID0gdXNlUmVmPHN0cmluZyB8IG51bGw+KG51bGwpXG4gIC8qKlxuICAgKiBDaGF0IGFsIHF1ZSBwZXJ0ZW5lY2UgZWwgc3RyZWFtIGFjdHVhbG1lbnRlIGFjdGl2by4gU2kgY2FtYmlhIGVsIGNoYXRcbiAgICogbWllbnRyYXMgdW4gc3RyZWFtIGVzdMOhIGVuIHZ1ZWxvLCBkZXNjYXJ0YW1vcyBsb3MgdG9rZW5zIHJlc2lkdWFsZXNcbiAgICogcXVlIHB1ZWRhbiBsbGVnYXIgYW50ZXMgZGUgcXVlIGVsIGFib3J0IHNlIGNvbXBsZXRlLlxuICAgKi9cbiAgY29uc3QgYWN0aXZlU3RyZWFtQ2hhdElkUmVmID0gdXNlUmVmPHN0cmluZyB8IG51bGw+KG51bGwpXG4gIGNvbnN0IGNsZWFyU3RyZWFtVWlSZWYgPSB1c2VSZWY8KCkgPT4gdm9pZD4oKCkgPT4gdW5kZWZpbmVkKVxuICBjb25zdCBbYWN0aXZlTG9hZGluZ3MsIHNldEFjdGl2ZUxvYWRpbmdzXSA9IHVzZVN0YXRlPFJlY29yZDxzdHJpbmcsIHN0cmluZz4+KHt9KVxuICAvKipcbiAgICogU2VzacOzbiBhY3R1YWxtZW50ZSB2aXNpYmxlLiBTZSBtYW50aWVuZSBlbiBzdGF0ZSAobm8gc29sbyBlbiByZWYpIHBhcmEgcXVlXG4gICAqIGVsIG1vdG9yIGRlIHN0cmVhbWluZyBwdWVkYSBsZWVyIHJlYWN0aXZhbWVudGUgbG9zIGZsYWdzIGRlIEVTVEEgc2VzacOzblxuICAgKiBkZXNkZSBlbCBzdG9yZSwgbWllbnRyYXMgb3RyYXMgc2lndWVuIGdlbmVyYW5kbyBlbiBiYWNrZ3JvdW5kLlxuICAgKi9cbiAgY29uc3QgW2FjdGl2ZVNlc3Npb25JZCwgc2V0QWN0aXZlU2Vzc2lvbklkXSA9IHVzZVN0YXRlPHN0cmluZz4oY3VycmVudENoYXRJZC5jdXJyZW50KVxuICAvKiogVHJ1ZSBtaWVudHJhcyBlc3RhIGluc3RhbmNpYSBlc3TDqSBtb250YWRhIChldml0YSBzZXRTdGF0ZSB0cmFzIGRlc21vbnRhcikuICovXG4gIGNvbnN0IGlzTW91bnRlZFJlZiA9IHVzZVJlZih0cnVlKVxuICAvKiogRXZpdGEgcmVjb25jaWxpYXIgZG9zIHZlY2VzIGVsIG1pc21vIGVzdGFkbyB0ZXJtaW5hbCBkZSB1bmEgc2VzacOzbi4gKi9cbiAgY29uc3QgbGFzdEhhbmRsZWRUZXJtaW5hbFJlZiA9IHVzZVJlZjxzdHJpbmcgfCBudWxsPihudWxsKVxuXG4gIGNvbnN0IGlzV2ViU2VhcmNoQWN0aXZlUmVmID0gdXNlUmVmKGlzV2ViU2VhcmNoQWN0aXZlKVxuICBjb25zdCBpc0RlZXBTZWFyY2hBY3RpdmVSZWYgPSB1c2VSZWYoaXNEZWVwU2VhcmNoQWN0aXZlKVxuICBjb25zdCBpc0F1dG9BcHByb3ZlQWN0aXZlUmVmID0gdXNlUmVmKGlzQXV0b0FwcHJvdmVBY3RpdmUpXG4gIC8qKiBFdml0YSBjbG9zdXJlcyBvYnNvbGV0YXMgY3VhbmRvIGVsIGZvb3RlciBjb25zZXJ2YSBzZW5kTWVzc2FnZSBlbnRyZSByZW5kZXJzLiAqL1xuICBjb25zdCBjb250ZXh0UmVmID0gdXNlUmVmKHsgY2hpcHNQcm9qZWN0LCBwcm9qZWN0LCBjbGllbnQsIHRhc2sgfSlcbiAgY29udGV4dFJlZi5jdXJyZW50ID0geyBjaGlwc1Byb2plY3QsIHByb2plY3QsIGNsaWVudCwgdGFzayB9XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpc1dlYlNlYXJjaEFjdGl2ZVJlZi5jdXJyZW50ID0gaXNXZWJTZWFyY2hBY3RpdmVcbiAgICBpc0RlZXBTZWFyY2hBY3RpdmVSZWYuY3VycmVudCA9IGlzRGVlcFNlYXJjaEFjdGl2ZVxuICAgIGlzQXV0b0FwcHJvdmVBY3RpdmVSZWYuY3VycmVudCA9IGlzQXV0b0FwcHJvdmVBY3RpdmVcbiAgfSwgW2lzV2ViU2VhcmNoQWN0aXZlLCBpc0RlZXBTZWFyY2hBY3RpdmUsIGlzQXV0b0FwcHJvdmVBY3RpdmVdKVxuXG4gIGNvbnN0IHtcbiAgICBsb2FkaW5nTWVzc2FnZXMsXG4gICAgbWVzc2FnZXMsXG4gICAgaXNMb2FkaW5nTW9yZU1lc3NhZ2VzLFxuICAgIGxvYWRNZXNzYWdlcyxcbiAgICBhZGRNZXNzYWdlLFxuICAgIHJlbW92ZU1lc3NhZ2UsXG4gICAgcmVwbGFjZU1lc3NhZ2VzLFxuICAgIGhhbmRsZVNjcm9sbCxcbiAgfSA9IHVzZUNoYXRNZXNzYWdlcyh7XG4gICAgY2hhdElkOiBpbml0aWFsQ2hhdElkIHx8IGN1cnJlbnRDaGF0SWQuY3VycmVudCxcbiAgICBjdXJyZW50VXNlcixcbiAgICB1c2VySW5pdGlhbE1lc3NhZ2UsXG4gICAgb25FcnJvcixcbiAgICBhZ2VudHMsXG4gIH0pXG5cbiAgbWVzc2FnZXNSZWYuY3VycmVudCA9IG1lc3NhZ2VzXG5cbiAgLyoqXG4gICAqIEVzY3JpYmUgdW4gbWVuc2FqZSBlbiBlbCBzdG9yZSBwb3Itc2VzacOzbiB5LCBzaSBsYSBzZXNpw7NuIGVzIGxhIGFjdGl2YSxcbiAgICogdGFtYmnDqW4gZW4gbGEgdmlzdGEgbG9jYWwuIFBlcm1pdGUgcXVlIHNlc2lvbmVzIGVuIGJhY2tncm91bmQgYWN1bXVsZW4gc3VcbiAgICogcmVzdWx0YWRvIHNpbiBwaXNhciBlbCBjaGF0IHF1ZSBlbCB1c3VhcmlvIGVzdMOhIG1pcmFuZG8uXG4gICAqL1xuICBjb25zdCBjb21taXRUb1Nlc3Npb24gPSB1c2VDYWxsYmFjayhcbiAgICAoc2Vzc2lvbklkOiBzdHJpbmcsIG1lc3NhZ2U6IENoYXRNZXNzYWdlKSA9PiB7XG4gICAgICB1c2VTZXNzaW9uc1N0b3JlLmdldFN0YXRlKCkuYWRkTWVzc2FnZShzZXNzaW9uSWQsIG1lc3NhZ2UpXG4gICAgICBpZiAoaXNNb3VudGVkUmVmLmN1cnJlbnQgJiYgYWN0aXZlVmlldy5pcyhzZXNzaW9uSWQpKSB7XG4gICAgICAgIGFkZE1lc3NhZ2UobWVzc2FnZSlcbiAgICAgIH1cbiAgICB9LFxuICAgIFthZGRNZXNzYWdlXVxuICApXG5cbiAgY29uc3QgZHJvcEZyb21TZXNzaW9uID0gdXNlQ2FsbGJhY2soXG4gICAgKHNlc3Npb25JZDogc3RyaW5nLCBtZXNzYWdlSWQ6IHN0cmluZykgPT4ge1xuICAgICAgdXNlU2Vzc2lvbnNTdG9yZS5nZXRTdGF0ZSgpLnJlbW92ZU1lc3NhZ2Uoc2Vzc2lvbklkLCBtZXNzYWdlSWQpXG4gICAgICBpZiAoaXNNb3VudGVkUmVmLmN1cnJlbnQgJiYgYWN0aXZlVmlldy5pcyhzZXNzaW9uSWQpKSB7XG4gICAgICAgIHJlbW92ZU1lc3NhZ2UobWVzc2FnZUlkKVxuICAgICAgfVxuICAgIH0sXG4gICAgW3JlbW92ZU1lc3NhZ2VdXG4gIClcblxuICAvKiogTGltcGlhIGVsIHRhaWwgZW4gdnVlbG8gZGUgdW5hIHNlc2nDs24gKHRyYXMgdGVybWluYXI7IGVsIGJhY2tlbmQgcGFzYSBhIHNlciBmdWVudGUpLiAqL1xuICBjb25zdCBjbGVhclNlc3Npb25UYWlsID0gdXNlQ2FsbGJhY2soKHNlc3Npb25JZDogc3RyaW5nKSA9PiB7XG4gICAgdXNlU2Vzc2lvbnNTdG9yZS5nZXRTdGF0ZSgpLnNldE1lc3NhZ2VzKHNlc3Npb25JZCwgW10pXG4gIH0sIFtdKVxuXG4gIC8vIFJlZ2lzdHJhciBsYSBzZXNpw7NuIHZpc2libGUgZW4gZWwgdHJhY2tlciBnbG9iYWwgcGFyYSBxdWUgbG9zIGNhbGxiYWNrcyBkZWxcbiAgLy8gbW90b3IgKHF1ZSBwdWVkZW4gcGVydGVuZWNlciBhIHVuYSBpbnN0YW5jaWEgeWEgZGVzbW9udGFkYSkgc2VwYW4gY3XDoWwgZXMgbGFcbiAgLy8gc2VzacOzbiBhY3RpdmEgYWN0dWFsLlxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGFjdGl2ZVZpZXcuc2V0KGFjdGl2ZVNlc3Npb25JZClcbiAgfSwgW2FjdGl2ZVNlc3Npb25JZF0pXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpc01vdW50ZWRSZWYuY3VycmVudCA9IHRydWVcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgaXNNb3VudGVkUmVmLmN1cnJlbnQgPSBmYWxzZVxuICAgICAgaWYgKGFjdGl2ZVZpZXcuaXMoY3VycmVudENoYXRJZC5jdXJyZW50KSkge1xuICAgICAgICBhY3RpdmVWaWV3LnNldChudWxsKVxuICAgICAgfVxuICAgIH1cbiAgfSwgW10pXG5cbiAgLy8gUmVjb25jaWxpYWNpw7NuOiBzaSBsYSBzZXNpw7NuIGFjdGl2YSB0ZXJtaW5hIChjb21wbGV0ZS9lcnJvcikgcGVybyBlbCBzdG9yZVxuICAvLyBwb3Itc2VzacOzbiB0b2RhdsOtYSB0aWVuZSB1biBwbGFjZWhvbGRlciBkZSBzdHJlYW1pbmcsIHJlZnJlc2NhbW9zIGRlc2RlXG4gIC8vIGVsIGJhY2tlbmQuIFVzYW1vcyBlbCBzdG9yZSAobm8gbWVzc2FnZXNSZWYpOiBoYW5kbGVTdHJlYW1GaW5pc2ggbGltcGlhIGVsXG4gIC8vIHBsYWNlaG9sZGVyIGFow60gZGUgZm9ybWEgc8OtbmNyb25hOyBtZXNzYWdlc1JlZiBwdWVkZSBxdWVkYXIgc3RhbGUgdW4gcmVuZGVyXG4gIC8vIHBvcnF1ZSBzZXRTdGF0dXMgKFp1c3RhbmQpIHkgcmVtb3ZlTWVzc2FnZSAoUmVhY3QpIG5vIGJhdGNoYW4ganVudG9zLlxuICAvLyBgY2FuY2VsbGVkYCBxdWVkYSBhZnVlcmE6IGVsIHN0b3AgeWEgcmVjb25jaWxpYSBsb2NhbCAocGFyY2lhbCArIGJ1cmJ1amEgZGVcbiAgLy8gY2FuY2VsYWRvKSB5IHJlY2FyZ2FyIGFjw6EgbW9zdHJhYmEgbGEgcGFudGFsbGEgZGUgY2FyZ2EgZGVsIGNoYXQgZW50ZXJvLlxuICBjb25zdCBhY3RpdmVTZXNzaW9uTWV0YSA9IHVzZVNlc3Npb25NZXRhKGFjdGl2ZVNlc3Npb25JZClcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBzdGF0dXMgPSBhY3RpdmVTZXNzaW9uTWV0YT8uc3RhdHVzXG4gICAgaWYgKCFzdGF0dXMpIHJldHVyblxuICAgIGNvbnN0IGlzVGVybWluYWwgPSBzdGF0dXMgPT09ICdjb21wbGV0ZScgfHwgc3RhdHVzID09PSAnZXJyb3InXG4gICAgaWYgKCFpc1Rlcm1pbmFsKSByZXR1cm5cbiAgICBjb25zdCBrZXkgPSBgJHthY3RpdmVTZXNzaW9uSWR9OiR7c3RhdHVzfToke2FjdGl2ZVNlc3Npb25NZXRhPy5maW5pc2hlZEF0ID8/ICcnfWBcbiAgICBpZiAobGFzdEhhbmRsZWRUZXJtaW5hbFJlZi5jdXJyZW50ID09PSBrZXkpIHJldHVyblxuICAgIGxhc3RIYW5kbGVkVGVybWluYWxSZWYuY3VycmVudCA9IGtleVxuXG4gICAgY29uc3QgdGFpbCA9IHVzZVNlc3Npb25zU3RvcmUuZ2V0U3RhdGUoKS5nZXRNZXNzYWdlcyhhY3RpdmVTZXNzaW9uSWQpXG4gICAgY29uc3QgaGFzU3RhbGVQbGFjZWhvbGRlciA9IHRhaWwuc29tZShtc2cgPT4gaXNTdHJlYW1pbmdQbGFjZWhvbGRlck1lc3NhZ2VJZChtc2cuaWQpKVxuICAgIGlmIChoYXNTdGFsZVBsYWNlaG9sZGVyKSB7XG4gICAgICBsb2FkTWVzc2FnZXMoeyBmb3JjZTogdHJ1ZSB9KVxuICAgIH1cbiAgfSwgW2FjdGl2ZVNlc3Npb25NZXRhPy5zdGF0dXMsIGFjdGl2ZVNlc3Npb25NZXRhPy5maW5pc2hlZEF0LCBhY3RpdmVTZXNzaW9uSWQsIGxvYWRNZXNzYWdlc10pXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBjdXN0b21FdmVudCA9IG5ldyBDdXN0b21FdmVudCgnY2hhdC1sb2FkaW5nLW1lc3NhZ2VzLWNoYW5nZWQnLCB7XG4gICAgICBkZXRhaWw6IHsgbG9hZGluZ01lc3NhZ2VzIH0sXG4gICAgfSlcbiAgICBkb2N1bWVudC5kaXNwYXRjaEV2ZW50KGN1c3RvbUV2ZW50KVxuICB9LCBbbG9hZGluZ01lc3NhZ2VzXSlcblxuICBjb25zdCBwcmV2aW91c0luaXRpYWxDaGF0SWRSZWYgPSB1c2VSZWY8c3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZD4oaW5pdGlhbENoYXRJZClcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IHByZXZpb3VzSW5pdGlhbENoYXRJZCA9IHByZXZpb3VzSW5pdGlhbENoYXRJZFJlZi5jdXJyZW50XG4gICAgcHJldmlvdXNJbml0aWFsQ2hhdElkUmVmLmN1cnJlbnQgPSBpbml0aWFsQ2hhdElkXG5cbiAgICAvLyBDaGF0IG51ZXZvIC8gaG9tZTogaW5pdGlhbENoYXRJZCBwYXNhIGEgbnVsbCwgYXPDrSBxdWUgbGEgcmFtYSBkZSBhYmFqbyBub1xuICAgIC8vIGFwbGljYS4gSGF5IHF1ZSByb3RhciBhIHVuYSBzZXNpw7NuIG51ZXZhIGlndWFsOiBzaSBzZWd1aW1vcyBhcHVudGFuZG8gYSBsYVxuICAgIC8vIGFudGVyaW9yLCBgYWN0aXZlVmlld2AgbGEgc2lndWUgbWFyY2FuZG8gY29tbyBhY3RpdmEgeSBjdWFuZG8gdGVybWluYSBubyBzZVxuICAgIC8vIG5vdGlmaWNhICh5IHN1IHJlc3B1ZXN0YSBzZSBjb21taXRlYSBzb2JyZSBsYSB2aXN0YSBudWV2YSkuIEVsIMOhcmJvbCBub1xuICAgIC8vIHJlbW9udGEgZW4gZXN0ZSBmbHVqbyAobm8gaGF5IGBrZXlgKSB5IG5hZGllIGNvbnN1bWUgYHJlc2V0Q2hhdGAuXG4gICAgaWYgKCFpbml0aWFsQ2hhdElkICYmIHByZXZpb3VzSW5pdGlhbENoYXRJZCkge1xuICAgICAgY3VycmVudENoYXRJZC5jdXJyZW50ID0gdXVpZHY0KClcbiAgICAgIHNldEFjdGl2ZVNlc3Npb25JZChjdXJyZW50Q2hhdElkLmN1cnJlbnQpXG4gICAgICBjdXJyZW50TWVzc2FnZUlkLmN1cnJlbnQgPSB1dWlkdjQoKVxuICAgICAgY3VycmVudFVzZXJRdWVzdGlvbi5jdXJyZW50ID0gbnVsbFxuICAgICAgcmVwb3J0ZWRFdmVudC5jdXJyZW50ID0gZmFsc2VcbiAgICAgIGlzUHJvY2Vzc2luZ1JlZi5jdXJyZW50ID0gZmFsc2VcbiAgICAgIHN0cmVhbWluZ1BsYWNlaG9sZGVySWRSZWYuY3VycmVudCA9IG51bGxcbiAgICAgIGFjdGl2ZVN0cmVhbUNoYXRJZFJlZi5jdXJyZW50ID0gbnVsbFxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgaWYgKGluaXRpYWxDaGF0SWQgJiYgaW5pdGlhbENoYXRJZCAhPT0gY3VycmVudENoYXRJZC5jdXJyZW50KSB7XG4gICAgICAvLyBOTyBhYm9ydGFtb3MgZWwgc3RyZWFtIGFudGVyaW9yOiBwdWVkZSBzZWd1aXIgZ2VuZXJhbmRvIGVuIGJhY2tncm91bmQuXG4gICAgICAvLyBTb2xvIGNhbWJpYW1vcyBkZSBzZXNpw7NuIGFjdGl2YTsgZWwgbW90b3IgcnV0ZWEgY2FkYSBzdHJlYW0gcG9yIHN1XG4gICAgICAvLyBzZXNzaW9uSWQsIGFzw60gcXVlIGxvcyB0b2tlbnMgZGUgbGEgc2VzacOzbiBwcmV2aWEgc2lndWVuIGFwbGljw6FuZG9zZSBhXG4gICAgICAvLyBFU0Egc2VzacOzbiAoc3RvcmUpLCBubyBhIGxhIG51ZXZhLlxuXG4gICAgICAvLyBMaW1waWFyIGNvbnRleHRvIGdsb2JhbCBhbCBjYW1iaWFyIGRlIGNvbnZlcnNhY2nDs25cbiAgICAgIHNldFByb2plY3QobnVsbClcbiAgICAgIHNldENsaWVudD8uKG51bGwpXG4gICAgICBzZXRDaGlwc1Byb2plY3QobnVsbClcbiAgICAgIHNldFRhc2sobnVsbClcblxuICAgICAgY3VycmVudENoYXRJZC5jdXJyZW50ID0gaW5pdGlhbENoYXRJZFxuICAgICAgc2V0QWN0aXZlU2Vzc2lvbklkKGluaXRpYWxDaGF0SWQpXG4gICAgICBjdXJyZW50TWVzc2FnZUlkLmN1cnJlbnQgPSB1dWlkdjQoKVxuICAgICAgY3VycmVudFVzZXJRdWVzdGlvbi5jdXJyZW50ID0gbnVsbFxuICAgICAgcmVwb3J0ZWRFdmVudC5jdXJyZW50ID0gZmFsc2VcbiAgICAgIC8vIGlzUHJvY2Vzc2luZ1JlZiByZWZsZWphIHNpIGxhIHNlc2nDs24gQUNUSVZBIGVzdMOhIG9jdXBhZGEuIFNpIGxhIHNlc2nDs25cbiAgICAgIC8vIGEgbGEgcXVlIGVudHJhbW9zIHNpZ3VlIGdlbmVyYW5kbyBlbiBiYWNrZ3JvdW5kLCBxdWVkYSBibG9xdWVhZGE7IHNpIG5vLFxuICAgICAgLy8gc2UgaGFiaWxpdGEgZWwgZW52w61vIGF1bnF1ZSBvdHJhcyBzZXNpb25lcyBzaWdhbiBnZW5lcmFuZG8uXG4gICAgICBpc1Byb2Nlc3NpbmdSZWYuY3VycmVudCA9IHNlc3Npb25TdHJlYW1NYW5hZ2VyLmlzQWN0aXZlKGluaXRpYWxDaGF0SWQpXG4gICAgICBzdHJlYW1pbmdQbGFjZWhvbGRlcklkUmVmLmN1cnJlbnQgPSBudWxsXG4gICAgICBhY3RpdmVTdHJlYW1DaGF0SWRSZWYuY3VycmVudCA9IG51bGxcblxuICAgICAgLy8gbG9hZE1lc3NhZ2VzIGxvIGRpc3BhcmEgdXNlQ2hhdE1lc3NhZ2VzIGFsIGNhbWJpYXIgY2hhdElkIChjb24gY2FjaGUgZW4gbWVtb3JpYSkuXG4gICAgfVxuICB9LCBbaW5pdGlhbENoYXRJZCwgcHJvamVjdCwgc2V0UHJvamVjdCwgc2V0Q2xpZW50LCBzZXRDaGlwc1Byb2plY3QsIHNldFRhc2tdKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgc2V0QWN0aXZlQ2hhdElkKGluaXRpYWxDaGF0SWQgfHwgbnVsbClcbiAgfSwgW2luaXRpYWxDaGF0SWQsIHNldEFjdGl2ZUNoYXRJZF0pXG5cbiAgY29uc3QgaGFuZGxlU3RyZWFtRXJyb3IgPSB1c2VDYWxsYmFjayhcbiAgICAoY3R4OiBTdHJlYW1Db250ZXh0LCBlcnJvck1lc3NhZ2U/OiBzdHJpbmcsIGVycm9yUmF3TWVzc2FnZT86IHN0cmluZykgPT4ge1xuICAgICAgY29uc3QgeyBzZXNzaW9uSWQsIG1lc3NhZ2VJZCwgcGxhY2Vob2xkZXJJZCB9ID0gY3R4XG4gICAgICBjb25zdCBpc0FjdGl2ZSA9IGFjdGl2ZVZpZXcuaXMoc2Vzc2lvbklkKVxuXG4gICAgICBzZXNzaW9uU3RyZWFtaW5nVGV4dC5jbGVhcihzZXNzaW9uSWQpXG4gICAgICBkcm9wRnJvbVNlc3Npb24oc2Vzc2lvbklkLCBwbGFjZWhvbGRlcklkKVxuXG4gICAgICBjb25zdCByZXRyeVNuYXBzaG90ID0gcmV0cnlTbmFwc2hvdFJlZi5jdXJyZW50XG4gICAgICBpZiAocmV0cnlTbmFwc2hvdCkge1xuICAgICAgICByZXRyeVNuYXBzaG90UmVmLmN1cnJlbnQgPSBudWxsXG4gICAgICAgIG1lc3NhZ2VzUmVmLmN1cnJlbnQgPSByZXRyeVNuYXBzaG90XG4gICAgICAgIHJlcGxhY2VNZXNzYWdlcyhyZXRyeVNuYXBzaG90KVxuICAgICAgICBpZiAoaXNBY3RpdmUpIHtcbiAgICAgICAgICBjbGVhclN0cmVhbVVpUmVmLmN1cnJlbnQoKVxuICAgICAgICAgIHN0cmVhbWluZ1BsYWNlaG9sZGVySWRSZWYuY3VycmVudCA9IG51bGxcbiAgICAgICAgICBhY3RpdmVTdHJlYW1DaGF0SWRSZWYuY3VycmVudCA9IG51bGxcbiAgICAgICAgICBpc1Byb2Nlc3NpbmdSZWYuY3VycmVudCA9IGZhbHNlXG4gICAgICAgIH1cbiAgICAgICAgZG9jdW1lbnQuZGlzcGF0Y2hFdmVudChcbiAgICAgICAgICBuZXcgQ3VzdG9tRXZlbnQoJ3NuYWNrYmFyLWV2ZW50Jywge1xuICAgICAgICAgICAgZGV0YWlsOiB7IHNob3c6IHRydWUsIHNldmVyaXR5OiAnZXJyb3InLCBtZXNzYWdlOiB0KCdjaGF0LmVycm9yJykgfSxcbiAgICAgICAgICB9KVxuICAgICAgICApXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBpZiAoaXNBY3RpdmUpIHtcbiAgICAgICAgY2xlYXJTdHJlYW1VaVJlZi5jdXJyZW50KClcbiAgICAgICAgc3RyZWFtaW5nUGxhY2Vob2xkZXJJZFJlZi5jdXJyZW50ID0gbnVsbFxuICAgICAgICBhY3RpdmVTdHJlYW1DaGF0SWRSZWYuY3VycmVudCA9IG51bGxcbiAgICAgICAgaXNQcm9jZXNzaW5nUmVmLmN1cnJlbnQgPSBmYWxzZVxuICAgICAgfVxuXG4gICAgICBjb25zdCB7IGlzQWNjZXNzRGVuaWVkLCBpc1Byb21wdFRvb0xvbmcsIHRva2Vuc1VzZWQsIHNob3dSZXRyeSB9ID0gcmVzb2x2ZVN0cmVhbUVycm9yUHJlc2VudGF0aW9uKFxuICAgICAgICBlcnJvck1lc3NhZ2UsXG4gICAgICAgIGVycm9yUmF3TWVzc2FnZVxuICAgICAgKVxuICAgICAgY29uc3QgbWVzc2FnZSA9IGlzQWNjZXNzRGVuaWVkXG4gICAgICAgID8gdCgnY2hhdC5lcnJvckFjY2Vzc0RlbmllZCcpXG4gICAgICAgIDogaXNQcm9tcHRUb29Mb25nXG4gICAgICAgICAgPyB0KCdjaGF0LmVycm9yUHJvbXB0VG9vTG9uZycsIHsgdXNlZDogdG9rZW5zVXNlZCB9KVxuICAgICAgICAgIDogdCgnY2hhdC5lcnJvcicpXG5cbiAgICAgIGNvbW1pdFRvU2Vzc2lvbihzZXNzaW9uSWQsIHtcbiAgICAgICAgaWQ6IGBhbnN3ZXItJHttZXNzYWdlSWR9YCxcbiAgICAgICAgbWVzc2FnZSxcbiAgICAgICAgaXNFcnJvcjogdHJ1ZSxcbiAgICAgICAgLy8gQ2hpcCBcIlJlaW50ZW50YXJcIiBzb2xvIGVuIGVsIGVycm9yIGdlbsOpcmljbyAocC4gZWouIDUwMCk7IG5vIGFwbGljYSBhIGFjY2VzcyBkZW5pZWQgbmkgcHJvbXB0IHRvbyBsb25nLlxuICAgICAgICAuLi4oc2hvd1JldHJ5ID8geyBzdWdnZXN0aW9uczogW3QoJ2NoYXQucmV0cnknKV0gfSA6IHt9KSxcbiAgICAgICAgZGF0ZTogbmV3IERhdGUoKSxcbiAgICAgICAgdXNlcjogeyBpZDogJ2Fzc2lzdGFudCcsIG5hbWU6ICdBc3Npc3RhbnQnIH0sXG4gICAgICAgIHJvbGU6IENoYXRIaXN0b3J5Um9sZS5BU1NJU1RBTlQsXG4gICAgICB9KVxuICAgICAgY2xlYXJTZXNzaW9uVGFpbChzZXNzaW9uSWQpXG5cbiAgICAgIGlmICghaXNBY3RpdmUpIHtcbiAgICAgICAgZ2V0Q2hhdHNTdG9yZVN0YXRlKCkubWFya0NoYXRBc1VucmVhZChzZXNzaW9uSWQpXG4gICAgICAgIG5vdGlmeVNlc3Npb25GaW5pc2hlZEluQmFja2dyb3VuZChzZXNzaW9uSWQsICdlcnJvcicpXG4gICAgICB9XG4gICAgfSxcbiAgICBbY29tbWl0VG9TZXNzaW9uLCBkcm9wRnJvbVNlc3Npb24sIGNsZWFyU2Vzc2lvblRhaWwsIHJlcGxhY2VNZXNzYWdlcywgdF1cbiAgKVxuXG4gIGNvbnN0IGhhbmRsZVN0cmVhbVVwZGF0ZSA9IHVzZUNhbGxiYWNrKFxuICAgIChjdHg6IFN0cmVhbUNvbnRleHQsIGNvbnRlbnQ6IHN0cmluZykgPT4ge1xuICAgICAgY29uc3QgeyBzZXNzaW9uSWQsIHBsYWNlaG9sZGVySWQgfSA9IGN0eFxuXG4gICAgICAvLyBBc2VndXJhbW9zIGVsIHBsYWNlaG9sZGVyIHVuYSDDum5pY2EgdmV6IHBvciBzdHJlYW0sIHRhbnRvIGVuIGVsIHN0b3JlXG4gICAgICAvLyBkZSBsYSBzZXNpw7NuIGNvbW8gZW4gbGEgdmlzdGEgc2kgZXMgbGEgYWN0aXZhLiBFbCB0ZXh0byBlbiB2aXZvIHZpYWphXG4gICAgICAvLyBwb3Igc2Vzc2lvblN0cmVhbWluZ1RleHQgKGV4dGVybm8pLCBzaW4gcmUtcmVuZGVyIGRlbCDDoXJib2wgY29tcGxldG8uXG4gICAgICBjb25zdCBwbGFjZWhvbGRlckV4aXN0cyA9IHVzZVNlc3Npb25zU3RvcmVcbiAgICAgICAgLmdldFN0YXRlKClcbiAgICAgICAgLmdldE1lc3NhZ2VzKHNlc3Npb25JZClcbiAgICAgICAgLnNvbWUobXNnID0+IG1zZy5pZCA9PT0gcGxhY2Vob2xkZXJJZClcblxuICAgICAgaWYgKCFwbGFjZWhvbGRlckV4aXN0cykge1xuICAgICAgICBzZXNzaW9uU3RyZWFtaW5nVGV4dC5zdGFydChzZXNzaW9uSWQsIHBsYWNlaG9sZGVySWQpXG4gICAgICAgIGNvbW1pdFRvU2Vzc2lvbihzZXNzaW9uSWQsIHtcbiAgICAgICAgICBpZDogcGxhY2Vob2xkZXJJZCxcbiAgICAgICAgICBtZXNzYWdlOiAnJyxcbiAgICAgICAgICBkYXRlOiBuZXcgRGF0ZSgpLFxuICAgICAgICAgIHVzZXI6IHsgaWQ6ICdhc3Npc3RhbnQnLCBuYW1lOiAnQXNzaXN0YW50JyB9LFxuICAgICAgICAgIHJvbGU6IENoYXRIaXN0b3J5Um9sZS5BU1NJU1RBTlQsXG4gICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIGlmIChhY3RpdmVWaWV3LmlzKHNlc3Npb25JZCkpIHtcbiAgICAgICAgc3RyZWFtaW5nUGxhY2Vob2xkZXJJZFJlZi5jdXJyZW50ID0gcGxhY2Vob2xkZXJJZFxuICAgICAgICBhY3RpdmVTdHJlYW1DaGF0SWRSZWYuY3VycmVudCA9IHNlc3Npb25JZFxuICAgICAgfVxuXG4gICAgICBzZXNzaW9uU3RyZWFtaW5nVGV4dC5zZXRUZXh0KHNlc3Npb25JZCwgcGxhY2Vob2xkZXJJZCwgY29udGVudClcbiAgICB9LFxuICAgIFtjb21taXRUb1Nlc3Npb25dXG4gIClcblxuICBjb25zdCBoYW5kbGVTdHJlYW1GaW5pc2ggPSB1c2VDYWxsYmFjayhcbiAgICBhc3luYyAoXG4gICAgICBjdHg6IFN0cmVhbUNvbnRleHQsXG4gICAgICBjb250ZW50OiBzdHJpbmcsXG4gICAgICBzb3VyY2VzOiBhbnksXG4gICAgICBtZW1vcnlTZXNzaW9uSWQ6IHN0cmluZyxcbiAgICAgIHJhd0F0dGFjaG1lbnRzPzogYW55W10gfCBudWxsLFxuICAgICAgc3VnZ2VzdGlvbnM/OiBzdHJpbmdbXSB8IG51bGwsXG4gICAgICBjb21wbGV0ZWRBZ2VudElkPzogc3RyaW5nIHwgbnVsbCxcbiAgICAgIC8qKiBQb3NpY2lvbmFsOiBtYXN0ZXIgbm8gbG8gY29uc3VtZSwgcGVybyBgcmVhc29uaW5nYCB2aWVuZSBkZXNwdcOpcy4gKi9cbiAgICAgIF9yZXNvbHZlZENvbnRleHQ/OiBhbnksXG4gICAgICByZWFzb25pbmc/OiBSZWFzb25pbmdUcmFjZVBheWxvYWQgfCBudWxsXG4gICAgKSA9PiB7XG4gICAgICBjb25zdCB7IHNlc3Npb25JZCwgcGxhY2Vob2xkZXJJZCB9ID0gY3R4XG4gICAgICBjb25zdCBpc0FjdGl2ZSA9IGFjdGl2ZVZpZXcuaXMoc2Vzc2lvbklkKVxuICAgICAgcmV0cnlTbmFwc2hvdFJlZi5jdXJyZW50ID0gbnVsbFxuXG4gICAgICBjb25zdCB0ZW1wTWVzc2FnZUlkID0gcGxhY2Vob2xkZXJJZFxuICAgICAgLy8gRWwgcGxhY2Vob2xkZXIgc2FsZSBkZWwgc3RvcmUgcG9yLXNlc2nDs24geWE6IGVsIGVmZWN0byBkZSByZWNvbmNpbGlhY2nDs25cbiAgICAgIC8vIGxvIHVzYSBwYXJhIGRldGVjdGFyIHJlc3B1ZXN0YXMgaHXDqXJmYW5hcyB5IGRlIGFjw6EgYWwgY29tbWl0IHB1ZWRlIGhhYmVyXG4gICAgICAvLyB1biBhd2FpdC4gTGEgdmlzdGEgbG9jYWwgbG8gc3VlbHRhIG3DoXMgYWJham8sIGp1bnRvIGFsIGNvbW1pdC5cbiAgICAgIHVzZVNlc3Npb25zU3RvcmUuZ2V0U3RhdGUoKS5yZW1vdmVNZXNzYWdlKHNlc3Npb25JZCwgdGVtcE1lc3NhZ2VJZClcbiAgICAgIGNvbnN0IGF0dGFjaG1lbnRzID0gbm9ybWFsaXplQXNzaXN0YW50QXR0YWNobWVudHMocmF3QXR0YWNobWVudHMpXG5cbiAgICAgIC8vIEVsIHRyYWNlIGFjdW11bGFkbyBlbiB2aXZvIGVzdMOhIGtleWVkIHBvciBlbCBwbGFjZWhvbGRlcjsgbG8gbW92ZW1vcyBhbFxuICAgICAgLy8gaWQgZGVmaW5pdGl2byBwYXJhIHF1ZSBlbCBibG9xdWUgZGUgcmF6b25hbWllbnRvIHNvYnJldml2YSBhbCBzd2FwLlxuICAgICAgY29uc3QgZmluYWxNZXNzYWdlSWQgPSBgYW5zd2VyLSR7bWVtb3J5U2Vzc2lvbklkfWBcbiAgICAgIC8vIFByZWZlcmlyIGVsIHNuYXBzaG90IGVuIHZpdm8gKG5hcnJhY2nDs24gYW5jbGFkYSBhbCBpbmljaW8pIHNvYnJlIGVsXG4gICAgICAvLyBgY29tcGxldGVgIGRlbCBiYWNrLCBxdWUgc3VlbGUgbWFuZGFyIGVzYSBuYXJyYWNpw7NuIGFsIGZpbmFsLlxuICAgICAgY29uc3QgZmluYWxUcmFjZSA9IHJlYXNvbmluZ1RyYWNlRm9yKHRlbXBNZXNzYWdlSWQpID8/IG1hcFJlYXNvbmluZ1RyYWNlKHJlYXNvbmluZylcbiAgICAgIHJlYXNvbmluZ1N0b3JlLnJlbmFtZSh0ZW1wTWVzc2FnZUlkLCBmaW5hbE1lc3NhZ2VJZClcblxuICAgICAgLy8gU2VzacOzbiBlbiBiYWNrZ3JvdW5kOiBjZXJyYW1vcyBsZWFuLiBFbCBiYWNrZW5kIHlhIHBlcnNpc3Rpw7MgbGFcbiAgICAgIC8vIHJlc3B1ZXN0YSwgYXPDrSBxdWUgYWwgdm9sdmVyIGEgbGEgc2VzacOzbiBzZSBjYXJnYSBkZXNkZSBhaMOtLiBBdmlzYW1vc1xuICAgICAgLy8gcXVlIHRlcm1pbsOzICh1bnJlYWQgKyBldmVudG8gcGFyYSB0b2FzdC9zb25pZG8pLlxuICAgICAgaWYgKCFpc0FjdGl2ZSkge1xuICAgICAgICBjb21taXRUb1Nlc3Npb24oc2Vzc2lvbklkLCB7XG4gICAgICAgICAgaWQ6IGZpbmFsTWVzc2FnZUlkLFxuICAgICAgICAgIG1lc3NhZ2U6IGNvbnRlbnQsXG4gICAgICAgICAgZGF0ZTogbmV3IERhdGUoKSxcbiAgICAgICAgICB1c2VyOiB7IGlkOiAnYXNzaXN0YW50JywgbmFtZTogJ0Fzc2lzdGFudCcgfSxcbiAgICAgICAgICByb2xlOiBDaGF0SGlzdG9yeVJvbGUuQVNTSVNUQU5ULFxuICAgICAgICAgIHNvdXJjZXMsXG4gICAgICAgICAgLi4uKGF0dGFjaG1lbnRzLmxlbmd0aCA+IDAgPyB7IGF0dGFjaG1lbnRzIH0gOiB7fSksXG4gICAgICAgICAgbWVtb3J5U2Vzc2lvbklkLFxuICAgICAgICAgIHN1Z2dlc3Rpb25zOiBzdWdnZXN0aW9ucyB8fCBbXSxcbiAgICAgICAgICByZWFzb25pbmc6IGZpbmFsVHJhY2UsXG4gICAgICAgIH0pXG4gICAgICAgIGNsZWFyU2Vzc2lvblRhaWwoc2Vzc2lvbklkKVxuICAgICAgICBnZXRDaGF0c1N0b3JlU3RhdGUoKS5tYXJrQ2hhdEFzVW5yZWFkKHNlc3Npb25JZClcbiAgICAgICAgbm90aWZ5U2Vzc2lvbkZpbmlzaGVkSW5CYWNrZ3JvdW5kKHNlc3Npb25JZCwgJ2NvbXBsZXRlJylcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIHN0cmVhbWluZ1BsYWNlaG9sZGVySWRSZWYuY3VycmVudCA9IG51bGxcbiAgICAgIGFjdGl2ZVN0cmVhbUNoYXRJZFJlZi5jdXJyZW50ID0gbnVsbFxuICAgICAgaGl0bEV4ZWN1dGlvbkNvbnRleHRSZWYuY3VycmVudCA9IG51bGxcblxuICAgICAgLy8gRGV0ZWN0YXIgdG9kYXMgbGFzIFVSTHMgZGUgdGFyZWFzICguLi4vdGFza3MvMTIzL2RldGFpbHxtZXNzYWdlfG1lc3NhZ2VzfGZpbGVzfGhpc3Rvcnl8aG91cnMpXG4gICAgICBjb25zdCB0YXNrVXJsUmVnZXggPSBuZXcgUmVnRXhwKFRBU0tfVVJMX1JFR0VYX1BBVFRFUk4sICdnJylcbiAgICAgIGNvbnN0IG1hdGNoZXMgPSBbLi4uY29udGVudC5tYXRjaEFsbCh0YXNrVXJsUmVnZXgpXVxuXG4gICAgICBsZXQgY29udGVudFRvQWRkID0gY29udGVudFxuICAgICAgY29uc3QgcHJldmlvdXNNZXNzYWdlID0gbWVzc2FnZXNSZWYuY3VycmVudC5maWx0ZXIobSA9PiBtLmlkICE9PSB0ZW1wTWVzc2FnZUlkKS5hdCgtMSlcbiAgICAgIGNvbnN0IGhhc0FwcHJvdmFsSW5QcmV2aW91c01lc3NhZ2UgPSBwcmV2aW91c01lc3NhZ2U/LmFwcHJvdmFsICE9IG51bGxcbiAgICAgIGNvbnN0IHBlbmRpbmdBY3Rpb25zID0gcHJldmlvdXNNZXNzYWdlPy5hcHByb3ZhbD8ucGVuZGluZ19hY3Rpb25zIHx8IFtdXG4gICAgICBjb25zdCB7XG4gICAgICAgIHdhc1Rhc2tDcmVhdGlvbixcbiAgICAgICAgd2FzVGFza0VkaXQsXG4gICAgICAgIHdhc1Rhc2tEZWxldGUsXG4gICAgICAgIHdhc0NyZWF0ZUFnZW50QXBwcm92ZWQsXG4gICAgICAgIHdhc0NvbmZpZ3VyZUFnZW50QWNjZXNzQXBwcm92ZWQsXG4gICAgICAgIHdhc0VkaXRBZ2VudEFwcHJvdmVkLFxuICAgICAgfSA9IHJlc29sdmVBcHByb3ZlZFBlbmRpbmdBY3Rpb25GbGFncyhcbiAgICAgICAgaGFzQXBwcm92YWxJblByZXZpb3VzTWVzc2FnZSxcbiAgICAgICAgcHJldmlvdXNNZXNzYWdlPy5hcHByb3ZhbFN0YXR1cyxcbiAgICAgICAgcGVuZGluZ0FjdGlvbnNcbiAgICAgIClcbiAgICAgIGNvbnN0IGNyZWF0ZUFnZW50Rm9sbG93VXAgPSByZXNvbHZlQ3JlYXRlQWdlbnRGb2xsb3dVcChcbiAgICAgICAgeyB3YXNDcmVhdGVBZ2VudEFwcHJvdmVkLCB3YXNDb25maWd1cmVBZ2VudEFjY2Vzc0FwcHJvdmVkIH0sXG4gICAgICAgIEJvb2xlYW4od2luZG93Lk1BSUFfQ0hBVF9BSV9GRUFUVVJFX0FDQ0VTU19NVUxUSV9BR0VOVFMpLFxuICAgICAgICBjb21wbGV0ZWRBZ2VudElkLFxuICAgICAgICBwZW5kaW5nQWN0aW9uc1xuICAgICAgKVxuXG4gICAgICBpZiAod2FzQ3JlYXRlQWdlbnRBcHByb3ZlZCkge1xuICAgICAgICBldmVudChFVkVOVFMuYWlDaGF0SGl0bE9wdGlvbiwge1xuICAgICAgICAgIGFnZW50X3R5cGU6IGdldEhpdGxBbmFseXRpY3NBZ2VudFR5cGUoYWdlbnQpLFxuICAgICAgICAgIGFjdGlvbl90eXBlOiBidWlsZEhpdGxBY3Rpb25UeXBlTGlzdChwZW5kaW5nQWN0aW9ucyksXG4gICAgICAgICAgZGVjaXNpb246ICdhY2NlcHQnLFxuICAgICAgICAgIG9wdGlvbjogJ2NyZWF0ZV9hZ2VudCcsXG4gICAgICAgICAgLi4uKGNvbXBsZXRlZEFnZW50SWQ/LnRyaW0oKSA/IHsgY3JlYXRlZF9hZ2VudF9pZDogY29tcGxldGVkQWdlbnRJZC50cmltKCkgfSA6IHt9KSxcbiAgICAgICAgfSlcbiAgICAgIH1cblxuICAgICAgY29uc3QgbWFudWFsQXBwcm92YWxGb3JBbmFseXRpY3MgPSBsYXN0TWFudWFsQXBwcm92YWxSZWYuY3VycmVudFxuICAgICAgY29uc3Qgd2FzTWFudWFsQ3JlYXRlQWdlbnRBcHByb3ZlZCA9XG4gICAgICAgIG1hbnVhbEFwcHJvdmFsRm9yQW5hbHl0aWNzICYmIG5vcm1hbGl6ZUhpdGxUb29sTmFtZShtYW51YWxBcHByb3ZhbEZvckFuYWx5dGljcy50b29sTmFtZSkgPT09ICdjcmVhdGVfYWdlbnQnXG5cbiAgICAgIGlmICh3YXNNYW51YWxDcmVhdGVBZ2VudEFwcHJvdmVkKSB7XG4gICAgICAgIGV2ZW50KEVWRU5UUy5haUNoYXRIaXRsT3B0aW9uLCB7XG4gICAgICAgICAgYWdlbnRfdHlwZTogZ2V0SGl0bEFuYWx5dGljc0FnZW50VHlwZShhZ2VudCksXG4gICAgICAgICAgYWN0aW9uX3R5cGU6ICdjcmVhdGVfYWdlbnQnLFxuICAgICAgICAgIGRlY2lzaW9uOiAnYWNjZXB0JyxcbiAgICAgICAgICByZXNvbHV0aW9uX3NvdXJjZTogJ21hbnVhbCcsXG4gICAgICAgICAgb3B0aW9uOiAnY3JlYXRlX2FnZW50JyxcbiAgICAgICAgICAuLi4oY29tcGxldGVkQWdlbnRJZD8udHJpbSgpID8geyBjcmVhdGVkX2FnZW50X2lkOiBjb21wbGV0ZWRBZ2VudElkLnRyaW0oKSB9IDoge30pLFxuICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICBjb25zdCBlZGl0QWdlbnRGb2xsb3dVcCA9IHJlc29sdmVFZGl0QWdlbnRGb2xsb3dVcCh3YXNFZGl0QWdlbnRBcHByb3ZlZCwgY29tcGxldGVkQWdlbnRJZCwgcGVuZGluZ0FjdGlvbnMpXG4gICAgICBjb25zdCB0YXNrSWRzRm9yRGFzaGJvYXJkID0gcmVzb2x2ZVRhc2tJZHNGb3JEYXNoYm9hcmQoY29udGVudCwgdGFza1VybFJlZ2V4LCBwZW5kaW5nQWN0aW9ucywgd2FzVGFza0RlbGV0ZSlcblxuICAgICAgY29uc3Qgc2hvdWxkU3luY0Rhc2hib2FyZCA9IHNob3VsZFN5bmNUYXNrRGFzaGJvYXJkKFxuICAgICAgICBoYXNBcHByb3ZhbEluUHJldmlvdXNNZXNzYWdlLFxuICAgICAgICB3YXNUYXNrQ3JlYXRpb24sXG4gICAgICAgIHdhc1Rhc2tFZGl0LFxuICAgICAgICB3YXNUYXNrRGVsZXRlLFxuICAgICAgICB0YXNrSWRzRm9yRGFzaGJvYXJkXG4gICAgICApXG5cbiAgICAgIGlmIChzaG91bGRTeW5jRGFzaGJvYXJkKSB7XG4gICAgICAgIGNvbnN0IHRhc2tJZHMgPSB0YXNrSWRzRm9yRGFzaGJvYXJkXG4gICAgICAgIGlmIChtYXRjaGVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBjb25zdCB0YWIgPSBhd2FpdCBnZXRUYWJUYXNrRGVmYXVsdCh0YXNrSWRzWzBdKVxuICAgICAgICAgIGNvbnN0IHRhYlNlZ21lbnQgPSB0YWIgPyBgLyR7dGFifWAgOiAnL2RldGFpbCdcbiAgICAgICAgICBjb250ZW50VG9BZGQgPSByZXBsYWNlVGFza1VybHNXaXRoVGFiU2VnbWVudChjb250ZW50LCB0YXNrVXJsUmVnZXgsIHRhYlNlZ21lbnQpXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBsYXN0UHJvamVjdE1lc3NhZ2UgPSBtZXNzYWdlc1JlZi5jdXJyZW50LmZpbHRlcihtc2cgPT4gbXNnLnByb2plY3RJZCkuYXQoLTEpXG4gICAgICAgIGNvbnN0IGNvbnRleHRQcm9qZWN0SWRSYXcgPSBwcm9qZWN0Py5pZCB8fCBsYXN0UHJvamVjdE1lc3NhZ2U/LnByb2plY3RJZFxuICAgICAgICBjb25zdCBjb250ZXh0UHJvamVjdElkID0gY29udGV4dFByb2plY3RJZFJhdyA/IHBhcnNlSW50KFN0cmluZyhjb250ZXh0UHJvamVjdElkUmF3KSwgMTApIDogbnVsbFxuICAgICAgICBjb25zdCB7IGlzT25Qcm9qZWN0Um91dGUgfSA9IHJlc29sdmVQcm9qZWN0RGFzaGJvYXJkU3luYyhjb250ZXh0UHJvamVjdElkLCB3aW5kb3cubG9jYXRpb24ucGF0aG5hbWUpXG5cbiAgICAgICAgaWYgKGlzT25Qcm9qZWN0Um91dGUpIHtcbiAgICAgICAgICBpZiAod2FzVGFza0NyZWF0aW9uKSB7XG4gICAgICAgICAgICB3aW5kb3cubmV3UHJvamVjdERhc2hib2FyZD8uYWRkRXhpc3RpbmdUYXNrVG9EYXNoYm9hcmQ/Lih0YXNrSWRzKVxuICAgICAgICAgIH0gZWxzZSBpZiAod2FzVGFza0VkaXQpIHtcbiAgICAgICAgICAgIHdpbmRvdy5uZXdQcm9qZWN0RGFzaGJvYXJkPy5lZGl0RXhpc3RpbmdUYXNrSW5EYXNoYm9hcmQ/Lih0YXNrSWRzKVxuICAgICAgICAgIH0gZWxzZSBpZiAod2FzVGFza0RlbGV0ZSkge1xuICAgICAgICAgICAgd2luZG93Lm5ld1Byb2plY3REYXNoYm9hcmQ/LmRlbGV0ZUV4aXN0aW5nVGFza0Zyb21EYXNoYm9hcmQ/Lih0YXNrSWRzKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBSZWZldGNoIGRlbCB0YXNrIHBhbmVsIHNpIGVzdMOhIGFiaWVydG8geSBsYSB0b29sIGFwcm9iYWRhIGVkaXTDsy9ib3Jyw7MgZXNhIHRhcmVhLlxuICAgICAgLy8gQ3VicmUgbG9zIGRvcyBmbHVqb3MgZGUgYXBwcm92YWw6XG4gICAgICAvLyAgIDEpIEFwcHJvdmFsIHBvciBib3TDs24g4oaSIGBwcmV2aW91c01lc3NhZ2UuYXBwcm92YWwucGVuZGluZ19hY3Rpb25zYCAodsOtYSBoYXNBcHByb3ZhbEluUHJldmlvdXNNZXNzYWdlKVxuICAgICAgLy8gICAyKSBNYW51YWwgYXBwcm92YWwgKHVzdWFyaW8gdGlwZWEgXCJzaVwiL1wibm9cIikg4oaSIGBsYXN0TWFudWFsQXBwcm92YWxSZWYuY3VycmVudGBcbiAgICAgIGNvbnN0IG9wZW5UYXNrUGFuZWxJZCA9IHdpbmRvdy50YXNrUGFuZWw/LnRhc2tJZFxuICAgICAgY29uc3QgbWFudWFsQXBwcm92YWwgPSBsYXN0TWFudWFsQXBwcm92YWxSZWYuY3VycmVudFxuICAgICAgbGFzdE1hbnVhbEFwcHJvdmFsUmVmLmN1cnJlbnQgPSBudWxsIC8vIGNvbnN1bWlyIHVuYSBzb2xhIHZlelxuICAgICAgY29uc3QgbWFudWFsV2FzVGFza0VkaXQgPSBpc1Rhc2tFZGl0VG9vbE5hbWUobWFudWFsQXBwcm92YWw/LnRvb2xOYW1lKVxuICAgICAgY29uc3QgbWFudWFsV2FzVGFza0RlbGV0ZSA9IGlzVGFza0RlbGV0ZVRvb2xOYW1lKG1hbnVhbEFwcHJvdmFsPy50b29sTmFtZSlcblxuICAgICAgLy8gU3luYyBQbGFubmVyOiBhdmlzYXIgY2FyZ2EgZGUgaG9yYXMgY29uZmlybWFkYSAoY3JlYXRlX2hvdXIgLyBjcmVhdGVfaG91cnMpLlxuICAgICAgY29uc3QgaG91cnNUb29sc0Zyb21BcHByb3ZhbCA9IHBlbmRpbmdBY3Rpb25zXG4gICAgICAgIC5tYXAoKGFjdGlvbjogUGVuZGluZ0FjdGlvbikgPT4gYWN0aW9uLnRvb2xfbmFtZSlcbiAgICAgICAgLmZpbHRlcigodG9vbE5hbWUpOiB0b29sTmFtZSBpcyBzdHJpbmcgPT4gaXNIb3Vyc0NoYXJnZVRvb2wodG9vbE5hbWUpKVxuICAgICAgY29uc3Qgd2FzSG91cnNDaGFyZ2VBcHByb3ZlZCA9XG4gICAgICAgIGhhc0FwcHJvdmFsSW5QcmV2aW91c01lc3NhZ2UgJiZcbiAgICAgICAgcHJldmlvdXNNZXNzYWdlPy5hcHByb3ZhbFN0YXR1cyA9PT0gJ2FwcHJvdmVkJyAmJlxuICAgICAgICBob3Vyc1Rvb2xzRnJvbUFwcHJvdmFsLmxlbmd0aCA+IDBcbiAgICAgIGNvbnN0IG1hbnVhbEhvdXJzVG9vbCA9IG1hbnVhbEFwcHJvdmFsPy50b29sTmFtZVxuICAgICAgY29uc3Qgd2FzSG91cnNDaGFyZ2VNYW51YWxBcHByb3ZlZCA9IGlzSG91cnNDaGFyZ2VUb29sKG1hbnVhbEhvdXJzVG9vbClcblxuICAgICAgaWYgKHdhc0hvdXJzQ2hhcmdlQXBwcm92ZWQgfHwgd2FzSG91cnNDaGFyZ2VNYW51YWxBcHByb3ZlZCkge1xuICAgICAgICBjb25zdCB0b29scyA9IHdhc0hvdXJzQ2hhcmdlQXBwcm92ZWQgPyBob3Vyc1Rvb2xzRnJvbUFwcHJvdmFsIDogbWFudWFsSG91cnNUb29sID8gW21hbnVhbEhvdXJzVG9vbF0gOiBbXVxuICAgICAgICBkaXNwYXRjaE1haWFIb3Vyc0NoYXJnZWQoe1xuICAgICAgICAgIHNvdXJjZTogJ21haWEnLFxuICAgICAgICAgIHRvb2xzLFxuICAgICAgICAgIHNlc3Npb25JZDogbWVtb3J5U2Vzc2lvbklkLFxuICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICBjb25zdCBtYW51YWxQc2V1ZG9BY3Rpb246IFBlbmRpbmdBY3Rpb24gfCBudWxsID0gbWFudWFsQXBwcm92YWxcbiAgICAgICAgPyAoeyB0b29sX25hbWU6IG1hbnVhbEFwcHJvdmFsLnRvb2xOYW1lLCB0b29sX2FyZ3M6IG1hbnVhbEFwcHJvdmFsLnRvb2xBcmdzID8/IHt9IH0gYXMgUGVuZGluZ0FjdGlvbilcbiAgICAgICAgOiBudWxsXG4gICAgICBjb25zdCBhZmZlY3RlZFRhc2tJZHMgPSBbXG4gICAgICAgIC4uLmV4dHJhY3RUYXNrSWRzRnJvbVBlbmRpbmdBY3Rpb25zQXJncyhwZW5kaW5nQWN0aW9ucyksXG4gICAgICAgIC4uLnRhc2tJZHNGb3JEYXNoYm9hcmQsXG4gICAgICAgIC4uLihtYW51YWxQc2V1ZG9BY3Rpb24gPyBleHRyYWN0VGFza0lkc0Zyb21QZW5kaW5nQWN0aW9uc0FyZ3MoW21hbnVhbFBzZXVkb0FjdGlvbl0pIDogW10pLFxuICAgICAgXS5tYXAoU3RyaW5nKVxuXG4gICAgICBpZiAoXG4gICAgICAgIHNob3VsZFJlZmV0Y2hPcGVuVGFza1BhbmVsKFxuICAgICAgICAgIG9wZW5UYXNrUGFuZWxJZCxcbiAgICAgICAgICB7IHdhc1Rhc2tFZGl0LCB3YXNUYXNrRGVsZXRlIH0sXG4gICAgICAgICAgeyBtYW51YWxXYXNUYXNrRWRpdCwgbWFudWFsV2FzVGFza0RlbGV0ZSB9LFxuICAgICAgICAgIGFmZmVjdGVkVGFza0lkc1xuICAgICAgICApXG4gICAgICApIHtcbiAgICAgICAgd2luZG93LnRhc2tQYW5lbD8ucmVmZXRjaFRhc2s/LigpXG4gICAgICB9XG5cbiAgICAgIC8vIFN3YXAgcGxhY2Vob2xkZXIg4oaSIG1lbnNhamUgZmluYWwuIFZhIGVuIGBmbHVzaFN5bmNgIHBvcnF1ZSBlbCBtb3RvciB5YVxuICAgICAgLy8gZGVqw7MgZW5jb2xhZGFzIGxhcyBlc2NyaXR1cmFzIGRlIGZpbiBkZSBzdHJlYW0gKGlzV3JpdGluZywgYWN0aXZpdHksXG4gICAgICAvLyBzdGF0dXMpLCB5IGVzYXMgdmlhamFuIGVuIFN5bmNMYW5lIHBvciBzZXIgZGUgdW4gc3RvcmUgZXh0ZXJubyBtaWVudHJhc1xuICAgICAgLy8gcXVlIGVzdG9zIHNldFN0YXRlIHZpYWphbiBlbiBEZWZhdWx0TGFuZS4gU2luIGZvcnphcmxvLCBSZWFjdCBwaW50YVxuICAgICAgLy8gcHJpbWVybyBlbCBwbGFjZWhvbGRlciB5YSBzaW4gaW5kaWNhZG9yIGRlIGFjdGl2aWRhZCAodHVybm8gNDFweCBtw6FzXG4gICAgICAvLyBiYWpvKSB5IHJlY2nDqW4gfjI1bXMgZGVzcHXDqXMgZWwgbWVuc2FqZSBkZWZpbml0aXZvOiBlc2Ugc2FsdG8gZGUgaWRhIHlcbiAgICAgIC8vIHZ1ZWx0YSBlcmEgZWwgZmxpY2tlciBkZSBmaW4gZGUgc3RyZWFtLiBDb24gZWwgZmx1c2gsIHRvZG8gZWwgZmluIGRlXG4gICAgICAvLyBzdHJlYW0gZW50cmEgZW4gdW4gw7puaWNvIGNvbW1pdC5cbiAgICAgIGZsdXNoU3luYygoKSA9PiB7XG4gICAgICAgIGRyb3BGcm9tU2Vzc2lvbihzZXNzaW9uSWQsIHRlbXBNZXNzYWdlSWQpXG4gICAgICAgIGNvbW1pdFRvU2Vzc2lvbihzZXNzaW9uSWQsIHtcbiAgICAgICAgICBpZDogZmluYWxNZXNzYWdlSWQsXG4gICAgICAgICAgbWVzc2FnZTogY29udGVudFRvQWRkLFxuICAgICAgICAgIGRhdGU6IG5ldyBEYXRlKCksXG4gICAgICAgICAgdXNlcjogeyBpZDogJ2Fzc2lzdGFudCcsIG5hbWU6ICdBc3Npc3RhbnQnIH0sXG4gICAgICAgICAgcm9sZTogQ2hhdEhpc3RvcnlSb2xlLkFTU0lTVEFOVCxcbiAgICAgICAgICBzb3VyY2VzLFxuICAgICAgICAgIC4uLihhdHRhY2htZW50cy5sZW5ndGggPiAwID8geyBhdHRhY2htZW50cyB9IDoge30pLFxuICAgICAgICAgIG1lbW9yeVNlc3Npb25JZCxcbiAgICAgICAgICBzdWdnZXN0aW9uczogc3VnZ2VzdGlvbnMgfHwgW10sXG4gICAgICAgICAgLi4uKGNyZWF0ZUFnZW50Rm9sbG93VXAgPyB7IGNyZWF0ZUFnZW50Rm9sbG93VXAgfSA6IHt9KSxcbiAgICAgICAgICByZWFzb25pbmc6IGZpbmFsVHJhY2UsXG4gICAgICAgIH0pXG4gICAgICB9KVxuICAgICAgY2xlYXJTZXNzaW9uVGFpbChzZXNzaW9uSWQpXG5cbiAgICAgIGlmIChjcmVhdGVBZ2VudEZvbGxvd1VwPy5hZ2VudElkKSB7XG4gICAgICAgIGZldGNoQWdlbnREZXRhaWwoY3JlYXRlQWdlbnRGb2xsb3dVcC5hZ2VudElkKVxuICAgICAgICAgIC50aGVuKGNoYXRBZ2VudCA9PiB7XG4gICAgICAgICAgICBkb2N1bWVudC5kaXNwYXRjaEV2ZW50KFxuICAgICAgICAgICAgICBuZXcgQ3VzdG9tRXZlbnQoJ21haWEtbWVyZ2UtY3JlYXRlZC1hZ2VudC1pbnRvLWxpc3QnLCB7XG4gICAgICAgICAgICAgICAgZGV0YWlsOiB7IGFnZW50OiBjaGF0QWdlbnQgfSxcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICB9KVxuICAgICAgICAgIC5jYXRjaChlcnIgPT4ge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcignW3VzZUNoYXRNYW5hZ2VyXSBObyBzZSBwdWRvIGHDsWFkaXIgZWwgYWdlbnRlIHJlY2nDqW4gY3JlYWRvIGFsIGxpc3RhZG8nLCBlcnIpXG4gICAgICAgICAgfSlcbiAgICAgIH1cblxuICAgICAgaWYgKGVkaXRBZ2VudEZvbGxvd1VwPy5hZ2VudElkKSB7XG4gICAgICAgIGZldGNoQWdlbnREZXRhaWwoZWRpdEFnZW50Rm9sbG93VXAuYWdlbnRJZClcbiAgICAgICAgICAudGhlbihjaGF0QWdlbnQgPT4ge1xuICAgICAgICAgICAgZG9jdW1lbnQuZGlzcGF0Y2hFdmVudChcbiAgICAgICAgICAgICAgbmV3IEN1c3RvbUV2ZW50KCdtYWlhLXN5bmMtZWRpdGVkLWFnZW50LWZyb20tY2hhdCcsIHtcbiAgICAgICAgICAgICAgICBkZXRhaWw6IHsgYWdlbnQ6IGNoYXRBZ2VudCB9LFxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKVxuICAgICAgICAgIH0pXG4gICAgICAgICAgLmNhdGNoKGVyciA9PiB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdbdXNlQ2hhdE1hbmFnZXJdIE5vIHNlIHB1ZG8gcmVmcmVzY2FyIGVsIGFnZW50ZSBlZGl0YWRvJywgZXJyKVxuICAgICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIGlzUHJvY2Vzc2luZ1JlZi5jdXJyZW50ID0gZmFsc2VcbiAgICAgIHJldHJ5U25hcHNob3RSZWYuY3VycmVudCA9IG51bGxcblxuICAgICAgY29uc3QgeyBpc0NoYXRWaWV3VmlzaWJsZSwgbWFya0NoYXRBc1JlYWQgfSA9IGdldENoYXRzU3RvcmVTdGF0ZSgpXG4gICAgICBpZiAoaXNBY3RpdmUgJiYgaXNDaGF0Vmlld1Zpc2libGUpIHtcbiAgICAgICAgYXdhaXQgbWFya0NoYXRBc1JlYWQoc2Vzc2lvbklkLCB7IGZvcmNlOiB0cnVlIH0pXG4gICAgICB9XG5cbiAgICAgIGlmIChmaXJzdFRpbWVSZWYuY3VycmVudCkge1xuICAgICAgICBjb25zdCBjdXN0b21FdmVudCA9IG5ldyBDdXN0b21FdmVudCgncmVmZXRjaC1zZXNzaW9uJylcbiAgICAgICAgZG9jdW1lbnQuZGlzcGF0Y2hFdmVudChjdXN0b21FdmVudClcbiAgICAgICAgZmlyc3RUaW1lUmVmLmN1cnJlbnQgPSBmYWxzZVxuICAgICAgfVxuICAgIH0sXG4gICAgW2NvbW1pdFRvU2Vzc2lvbiwgZHJvcEZyb21TZXNzaW9uLCBjbGVhclNlc3Npb25UYWlsLCBwcm9qZWN0LCBnZXRUYWJUYXNrRGVmYXVsdCwgZXZlbnQsIGFnZW50XVxuICApXG5cbiAgLy8gYHBhcnRpYWxUZXh0YCBsbyByZXNjYXRhIGBzdG9wU3RyZWFtYCBhbnRlcyBkZSBsaW1waWFyIGVsIHN0b3JlIGV4dGVybm86IGVsIHRleHRvIGVuIHZpdm9cbiAgLy8gbm8gdml2ZSBlbiBgbWVzc2FnZXNgLCBhc8OtIHF1ZSBzaW4gZXN0byBsYSByZXNwdWVzdGEgYSBtZWRpYXMgZGVzYXBhcmVjZSBkZSBwYW50YWxsYSBhdW5xdWVcbiAgLy8gZWwgYmFja2VuZCBzw60gbGEgaGF5YSBwZXJzaXN0aWRvLlxuICBjb25zdCBoYW5kbGVTdHJlYW1TdG9wID0gdXNlQ2FsbGJhY2soXG4gICAgKHBhcnRpYWxUZXh0OiBzdHJpbmcpID0+IHtcbiAgICAgIC8vIEVsIHN0b3Agc2llbXByZSBhcGxpY2EgYSBsYSBzZXNpw7NuIGFjdGl2YSAoYm90w7NuIGRlbCBpbnB1dCB2aXNpYmxlKS5cbiAgICAgIGNvbnN0IHNlc3Npb25JZCA9IGN1cnJlbnRDaGF0SWQuY3VycmVudFxuICAgICAgY2xlYXJTdHJlYW1VaVJlZi5jdXJyZW50KClcbiAgICAgIGNvbnN0IHRlbXBNZXNzYWdlSWQgPSBzdHJlYW1pbmdQbGFjZWhvbGRlck1lc3NhZ2VJZChjdXJyZW50TWVzc2FnZUlkLmN1cnJlbnQpXG4gICAgICBjb25zdCBmaW5hbE1lc3NhZ2VJZCA9IGBhbnN3ZXItJHtjdXJyZW50TWVzc2FnZUlkLmN1cnJlbnR9YFxuICAgICAgY29uc3Qgc3RvcHBlZFRyYWNlID0gcmVhc29uaW5nVHJhY2VGb3IodGVtcE1lc3NhZ2VJZClcblxuICAgICAgc2Vzc2lvblN0cmVhbWluZ1RleHQuY2xlYXIoc2Vzc2lvbklkKVxuICAgICAgc3RyZWFtaW5nUGxhY2Vob2xkZXJJZFJlZi5jdXJyZW50ID0gbnVsbFxuICAgICAgYWN0aXZlU3RyZWFtQ2hhdElkUmVmLmN1cnJlbnQgPSBudWxsXG4gICAgICBkcm9wRnJvbVNlc3Npb24oc2Vzc2lvbklkLCB0ZW1wTWVzc2FnZUlkKVxuXG4gICAgICBpZiAoc3RvcHBlZFRyYWNlPy5zdGVwcy5sZW5ndGgpIHtcbiAgICAgICAgcmVhc29uaW5nU3RvcmUuZmluaXNoKHRlbXBNZXNzYWdlSWQsIG51bGwpXG4gICAgICAgIHJlYXNvbmluZ1N0b3JlLnJlbmFtZSh0ZW1wTWVzc2FnZUlkLCBmaW5hbE1lc3NhZ2VJZClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlYXNvbmluZ1N0b3JlLnJlbW92ZSh0ZW1wTWVzc2FnZUlkKVxuICAgICAgfVxuXG4gICAgICBpZiAocGFydGlhbFRleHQpIHtcbiAgICAgICAgY29tbWl0VG9TZXNzaW9uKHNlc3Npb25JZCwge1xuICAgICAgICAgIGlkOiBmaW5hbE1lc3NhZ2VJZCxcbiAgICAgICAgICBtZXNzYWdlOiBwYXJ0aWFsVGV4dCxcbiAgICAgICAgICBkYXRlOiBuZXcgRGF0ZSgpLFxuICAgICAgICAgIHVzZXI6IHsgaWQ6ICdhc3Npc3RhbnQnLCBuYW1lOiAnQXNzaXN0YW50JyB9LFxuICAgICAgICAgIHJvbGU6IENoYXRIaXN0b3J5Um9sZS5BU1NJU1RBTlQsXG4gICAgICAgICAgLi4uKHN0b3BwZWRUcmFjZSA/IHsgcmVhc29uaW5nOiBzdG9wcGVkVHJhY2UgfSA6IHt9KSxcbiAgICAgICAgfSlcbiAgICAgIH1cblxuICAgICAgY29tbWl0VG9TZXNzaW9uKHNlc3Npb25JZCwge1xuICAgICAgICBpZDogYCR7ZmluYWxNZXNzYWdlSWR9LWNhbmNlbGxlZGAsXG4gICAgICAgIG1lc3NhZ2U6IHQoJ2NoYXQuY2FuY2VsbGVkJyksXG4gICAgICAgIGRhdGU6IG5ldyBEYXRlKCksXG4gICAgICAgIHVzZXI6IHsgaWQ6ICdhc3Npc3RhbnQnLCBuYW1lOiAnQXNzaXN0YW50JyB9LFxuICAgICAgICByb2xlOiBDaGF0SGlzdG9yeVJvbGUuQVNTSVNUQU5ULFxuICAgICAgICBpc0Zyb250ZW5kQ2FuY2VsbGVkOiB0cnVlLFxuICAgICAgfSlcbiAgICAgIGNsZWFyU2Vzc2lvblRhaWwoc2Vzc2lvbklkKVxuICAgICAgaXNQcm9jZXNzaW5nUmVmLmN1cnJlbnQgPSBmYWxzZVxuICAgICAgcmV0cnlTbmFwc2hvdFJlZi5jdXJyZW50ID0gbnVsbFxuICAgIH0sXG4gICAgW2NvbW1pdFRvU2Vzc2lvbiwgZHJvcEZyb21TZXNzaW9uLCBjbGVhclNlc3Npb25UYWlsLCB0XVxuICApXG5cbiAgY29uc3QgaGFuZGxlQXBwcm92YWxSZXF1aXJlZCA9IHVzZUNhbGxiYWNrKFxuICAgIChjdHg6IFN0cmVhbUNvbnRleHQsIGFwcHJvdmFsOiBBcHByb3ZhbFJlcXVlc3QsIGFjY3VtdWxhdGVkQ29udGVudDogc3RyaW5nKSA9PiB7XG4gICAgICBjb25zdCB7IHNlc3Npb25JZCwgcGxhY2Vob2xkZXJJZCB9ID0gY3R4XG4gICAgICBjb25zdCBpc0FjdGl2ZSA9IGFjdGl2ZVZpZXcuaXMoc2Vzc2lvbklkKVxuXG4gICAgICBzZXNzaW9uU3RyZWFtaW5nVGV4dC5jbGVhcihzZXNzaW9uSWQpXG4gICAgICBkcm9wRnJvbVNlc3Npb24oc2Vzc2lvbklkLCBwbGFjZWhvbGRlcklkKVxuXG4gICAgICByZXRyeVNuYXBzaG90UmVmLmN1cnJlbnQgPSBudWxsXG5cbiAgICAgIGlmIChpc0FjdGl2ZSkge1xuICAgICAgICBzdHJlYW1pbmdQbGFjZWhvbGRlcklkUmVmLmN1cnJlbnQgPSBudWxsXG4gICAgICAgIGFjdGl2ZVN0cmVhbUNoYXRJZFJlZi5jdXJyZW50ID0gbnVsbFxuICAgICAgfVxuXG4gICAgICBjb25zdCBoaXRsQ29udGV4dDogSGl0bEV4ZWN1dGlvbkNvbnRleHQgPSB7XG4gICAgICAgIG1lc3NhZ2VJZDogYGFwcHJvdmFsLSR7YXBwcm92YWwub3JpZ2luYWxfdGhyZWFkX2lkfWAsXG4gICAgICAgIG1lc3NhZ2VUZXh0OiBhY2N1bXVsYXRlZENvbnRlbnQgfHwgJycsXG4gICAgICAgIGFwcHJvdmFsLFxuICAgICAgICBwZW5kaW5nQWN0aW9uczogYXBwcm92YWwucGVuZGluZ19hY3Rpb25zLFxuICAgICAgICB0aHJlYWRJZHM6IGFwcHJvdmFsLnBlbmRpbmdfYWN0aW9ucz8ubWFwKGFjdGlvbiA9PiBhY3Rpb24udGhyZWFkX2lkKSxcbiAgICAgIH1cbiAgICAgIGlmIChpc0FjdGl2ZSkge1xuICAgICAgICBoaXRsRXhlY3V0aW9uQ29udGV4dFJlZi5jdXJyZW50ID0gaGl0bENvbnRleHRcbiAgICAgIH1cblxuICAgICAgLy8gUHJlYXByb2JhZG86IHBvciBkZXRlY2Npw7NuIG1hbnVhbCBvIHBvciBhdXRvLWFwcHJvdmUuIEVuIGFtYm9zIGNhc29zIGVsXG4gICAgICAvLyBzdHJlYW0gY29udGluw7phIHkgbm8gaGF5IHF1ZSBwaW50YXIgbGEgY2FqYSBkZSBhcHJvYmFjacOzbi5cbiAgICAgIGlmIChhcHByb3ZhbC5tYW51YWxfYXBwcm92YWxfZGV0ZWN0ZWQgfHwgYXBwcm92YWwuYXV0b19hcHByb3ZlZCB8fCBhcHByb3ZhbC5hcHByb3ZhbF9zdGF0dXMgPT09ICdhcHByb3ZlZCcpIHtcbiAgICAgICAgdHJhY2tNYW51YWxIaXRsRXZlbnRzKFxuICAgICAgICAgIGV2ZW50LFxuICAgICAgICAgIHsgaW1wcmVzc2lvbjogRVZFTlRTLmFpQ2hhdEhpdGwsIG9wdGlvbjogRVZFTlRTLmFpQ2hhdEhpdGxPcHRpb24gfSxcbiAgICAgICAgICBhZ2VudCxcbiAgICAgICAgICBhcHByb3ZhbCxcbiAgICAgICAgICB0cmFja2VkTWFudWFsSGl0bEtleXNSZWYuY3VycmVudCxcbiAgICAgICAgICBhcHByb3ZhbC5tYW51YWxfYXBwcm92YWxfZGV0ZWN0ZWQgPyAnbWFudWFsJyA6ICdhdXRvJ1xuICAgICAgICApXG5cbiAgICAgICAgY29uc3QgZmlyc3RBY3Rpb24gPSBhcHByb3ZhbC5wZW5kaW5nX2FjdGlvbnM/LlswXVxuICAgICAgICBjb25zdCB0b29sTmFtZSA9IChhcHByb3ZhbCBhcyB7IHRvb2xfbmFtZT86IHN0cmluZyB9KS50b29sX25hbWUgPz8gZmlyc3RBY3Rpb24/LnRvb2xfbmFtZSA/PyAnJ1xuICAgICAgICBjb25zdCB0b29sQXJncyA9XG4gICAgICAgICAgKChhcHByb3ZhbCBhcyB7IHRvb2xfYXJncz86IFJlY29yZDxzdHJpbmcsIHVua25vd24+IH0pLnRvb2xfYXJncyA/P1xuICAgICAgICAgICAgKGZpcnN0QWN0aW9uPy50b29sX2FyZ3MgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCB1bmRlZmluZWQpKSB8fFxuICAgICAgICAgIG51bGxcbiAgICAgICAgaWYgKHRvb2xOYW1lICYmIGlzQWN0aXZlKSB7XG4gICAgICAgICAgbGFzdE1hbnVhbEFwcHJvdmFsUmVmLmN1cnJlbnQgPSB7IHRvb2xOYW1lLCB0b29sQXJncyB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzQWN0aXZlKSB7XG4gICAgICAgICAgaXNQcm9jZXNzaW5nUmVmLmN1cnJlbnQgPSBmYWxzZVxuICAgICAgICB9XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICAvLyBBZGQgYSBtZXNzYWdlIHdpdGggdGhlIGFwcHJvdmFsIHJlcXVlc3RcbiAgICAgIGNvbnN0IGFwcHJvdmFsTWVzc2FnZUlkID0gYGFwcHJvdmFsLSR7YXBwcm92YWwub3JpZ2luYWxfdGhyZWFkX2lkfWBcbiAgICAgIHJlYXNvbmluZ1N0b3JlLnJlbmFtZShwbGFjZWhvbGRlcklkLCBhcHByb3ZhbE1lc3NhZ2VJZClcbiAgICAgIGNvbnN0IGFwcHJvdmFsVHJhY2UgPSBtYXBSZWFzb25pbmdUcmFjZShhcHByb3ZhbC5yZWFzb25pbmcpID8/IHJlYXNvbmluZ1RyYWNlRm9yKGFwcHJvdmFsTWVzc2FnZUlkKVxuICAgICAgY29tbWl0VG9TZXNzaW9uKHNlc3Npb25JZCwge1xuICAgICAgICBpZDogYXBwcm92YWxNZXNzYWdlSWQsXG4gICAgICAgIG1lc3NhZ2U6IGFjY3VtdWxhdGVkQ29udGVudCB8fCAnJyxcbiAgICAgICAgZGF0ZTogbmV3IERhdGUoKSxcbiAgICAgICAgdXNlcjogeyBpZDogJ2Fzc2lzdGFudCcsIG5hbWU6ICdBc3Npc3RhbnQnIH0sXG4gICAgICAgIHJvbGU6IENoYXRIaXN0b3J5Um9sZS5BU1NJU1RBTlQsXG4gICAgICAgIGFwcHJvdmFsLFxuICAgICAgICBhcHByb3ZhbFN0YXR1czogJ3BlbmRpbmcnLFxuICAgICAgICByZWFzb25pbmc6IGFwcHJvdmFsVHJhY2UsXG4gICAgICB9KVxuICAgICAgaWYgKGlzQWN0aXZlKSB7XG4gICAgICAgIGlzUHJvY2Vzc2luZ1JlZi5jdXJyZW50ID0gZmFsc2VcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGdldENoYXRzU3RvcmVTdGF0ZSgpLm1hcmtDaGF0QXNVbnJlYWQoc2Vzc2lvbklkKVxuICAgICAgICBub3RpZnlTZXNzaW9uRmluaXNoZWRJbkJhY2tncm91bmQoc2Vzc2lvbklkLCAnYXBwcm92YWxfcmVxdWlyZWQnKVxuICAgICAgfVxuICAgIH0sXG4gICAgW2FnZW50LCBjb21taXRUb1Nlc3Npb24sIGRyb3BGcm9tU2Vzc2lvbiwgZXZlbnRdXG4gIClcblxuICBjb25zdCB7XG4gICAgYXNrTWFpYSxcbiAgICByZXRyeUNvbXBsZXRpb24sXG4gICAgaXNMb2FkaW5nOiB3YWl0aW5nUmVzcG9uc2UsXG4gICAgaXNXcml0aW5nLFxuICAgIGxvYWRpbmdNZXNzYWdlLFxuICAgIHN0cmVhbUFjdGl2aXR5LFxuICAgIHVwZGF0ZVN0cmVhbUFjdGl2aXR5LFxuICAgIHN0b3BTdHJlYW1pbmcsXG4gIH0gPSB1c2VPcmNoZXN0cmF0b3JTdHJlYW0oe1xuICAgIGFjdGl2ZVNlc3Npb25JZCxcbiAgICBvbkVycm9yOiBoYW5kbGVTdHJlYW1FcnJvcixcbiAgICBvblN0cmVhbVVwZGF0ZTogaGFuZGxlU3RyZWFtVXBkYXRlLFxuICAgIG9uRmluaXNoU3RyZWFtOiBoYW5kbGVTdHJlYW1GaW5pc2gsXG4gICAgb25TdG9wOiBoYW5kbGVTdHJlYW1TdG9wLFxuICAgIG9uQXBwcm92YWxSZXF1aXJlZDogaGFuZGxlQXBwcm92YWxSZXF1aXJlZCxcbiAgICBoaXRsRXhlY3V0aW9uQ29udGV4dFJlZixcbiAgfSlcblxuICBjbGVhclN0cmVhbVVpUmVmLmN1cnJlbnQgPSAoKSA9PiB7XG4gICAgdXBkYXRlU3RyZWFtQWN0aXZpdHkobnVsbClcbiAgICBzZXRBY3RpdmVMb2FkaW5ncyh7fSlcbiAgICBoaXRsRXhlY3V0aW9uQ29udGV4dFJlZi5jdXJyZW50ID0gbnVsbFxuICB9XG5cbiAgY29uc3QgY3VycmVudFByb2plY3QgPSBwcm9qZWN0XG5cbiAgY29uc3Qgc2VuZE1lc3NhZ2UgPSB1c2VDYWxsYmFjayhcbiAgICBhc3luYyAoXG4gICAgICBtZXNzYWdlOiBzdHJpbmcsXG4gICAgICBhdHRhY2htZW50c09yT3B0aW9ucz86IEF0dGFjaG1lbnRGaWxlW10gfCBTZW5kTWVzc2FnZU9wdGlvbnMsXG4gICAgICBmYXFJZD86IHN0cmluZyxcbiAgICAgIGFnZW50U3VnZ2VzdGlvbklkPzogc3RyaW5nLFxuICAgICAgbWVudGlvbnM/OiBDb250ZXh0TWVudGlvbltdLFxuICAgICAgZnVhSWQ/OiBzdHJpbmcsXG4gICAgICBzY0lkPzogc3RyaW5nLFxuICAgICAgY29udGV4dERhdGE/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxuICAgICkgPT4ge1xuICAgICAgaWYgKCFjYW5TZW5kQ2hhdE1lc3NhZ2UoaXNQcm9jZXNzaW5nUmVmLmN1cnJlbnQsIHdhaXRpbmdSZXNwb25zZSwgbG9hZGluZ01lc3NhZ2VzKSkge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgLy8gVG9wZSBkZSBjb25jdXJyZW5jaWE6IHNpIGVzdGEgc2VzacOzbiBubyBlc3TDoSBnZW5lcmFuZG8geSB5YSBoYXlcbiAgICAgIC8vIE1BWF9DT05DVVJSRU5UX1NUUkVBTVMgYWN0aXZhcywgYXZpc2Ftb3MgeSBubyBhcnJhbmNhbW9zIG90cmEuXG4gICAgICBjb25zdCB3aWxsU3RhcnROZXdTdHJlYW0gPSAhc2Vzc2lvblN0cmVhbU1hbmFnZXIuaXNBY3RpdmUoY3VycmVudENoYXRJZC5jdXJyZW50KVxuICAgICAgaWYgKFxuICAgICAgICBzaG91bGRCbG9ja0NvbmN1cnJlbnRTdHJlYW1TdGFydChcbiAgICAgICAgICB3aWxsU3RhcnROZXdTdHJlYW0sXG4gICAgICAgICAgc2Vzc2lvblN0cmVhbU1hbmFnZXIuZ2V0QWN0aXZlQ291bnQoKSxcbiAgICAgICAgICBNQVhfQ09OQ1VSUkVOVF9TVFJFQU1TXG4gICAgICAgIClcbiAgICAgICkge1xuICAgICAgICBkb2N1bWVudC5kaXNwYXRjaEV2ZW50KFxuICAgICAgICAgIG5ldyBDdXN0b21FdmVudCgnc25hY2tiYXItZXZlbnQnLCB7XG4gICAgICAgICAgICBkZXRhaWw6IHsgc2hvdzogdHJ1ZSwgc2V2ZXJpdHk6ICdpbmZvJywgbWVzc2FnZTogdCgnY2hhdC50b29NYW55QWN0aXZlU2Vzc2lvbnMnKSB9LFxuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHsgYXR0YWNobWVudHMsIG9wdGlvbnMgfSA9IG5vcm1hbGl6ZVNlbmRNZXNzYWdlQXJncyhhdHRhY2htZW50c09yT3B0aW9ucylcbiAgICAgIC8vIExhcyBtZW50aW9ucyBwdWVkZW4gdmVuaXIgdsOtYSA1dG8gcGFyw6FtZXRybyAoY2FsbCBwb3NpdGlvbmFsIGRlc2RlIGVsIGZvb3RlcilcbiAgICAgIC8vIG8gdsOtYSBTZW5kTWVzc2FnZU9wdGlvbnMgKGNhbGwgcHJvZ3JhbcOhdGljbykuIEVsIHBhcsOhbWV0cm8gZXhwbMOtY2l0byBnYW5hLlxuICAgICAgY29uc3QgZWZmZWN0aXZlTWVudGlvbnMgPSBtZW50aW9ucyA/PyBvcHRpb25zLm1lbnRpb25zXG4gICAgICBjb25zdCBjb250ZXh0TWVzc2FnZTogQ29udGV4dE1lc3NhZ2UgfCB1bmRlZmluZWQgPSBidWlsZENvbnRleHRNZXNzYWdlKGVmZmVjdGl2ZU1lbnRpb25zKVxuICAgICAgY29uc3QgcGF5bG9hZEZ1YUlkID0gZnVhSWQgPz8gb3B0aW9ucy5mdWFJZFxuICAgICAgY29uc3QgcGF5bG9hZFNjSWQgPSBzY0lkID8/IG9wdGlvbnMuc2NJZFxuICAgICAgY29uc3QgcGF5bG9hZENvbnRleHREYXRhID0gY29udGV4dERhdGEgPz8gb3B0aW9ucy5jb250ZXh0RGF0YVxuICAgICAgY29uc3QgZGlzcGxheU1lc3NhZ2UgPSBmb3JtYXRRdWlja0FjdGlvbk1lc3NhZ2VGb3JEaXNwbGF5KG1lc3NhZ2UsIHtcbiAgICAgICAgZnVhSWQ6IHBheWxvYWRGdWFJZCxcbiAgICAgICAgc2NJZDogcGF5bG9hZFNjSWQsXG4gICAgICB9KVxuXG4gICAgICBpc1Byb2Nlc3NpbmdSZWYuY3VycmVudCA9IHRydWVcbiAgICAgIHNldEFjdGl2ZUNoYXRJZChjdXJyZW50Q2hhdElkLmN1cnJlbnQpXG4gICAgICBjb25zdCBuZXdNZXNzYWdlSWQgPSB1dWlkdjQoKVxuICAgICAgY3VycmVudE1lc3NhZ2VJZC5jdXJyZW50ID0gbmV3TWVzc2FnZUlkXG4gICAgICBjdXJyZW50VXNlclF1ZXN0aW9uLmN1cnJlbnQgPSBtZXNzYWdlXG5cbiAgICAgIGlmICghcmVwb3J0ZWRFdmVudC5jdXJyZW50KSB7XG4gICAgICAgIGV2ZW50KEVWRU5UUy5wbUFpVHlwZWRUZXh0KVxuICAgICAgICByZXBvcnRlZEV2ZW50LmN1cnJlbnQgPSB0cnVlXG4gICAgICB9XG5cbiAgICAgIC8vIFZlcmlmaWNhciBzaSBlbCBjb250ZXh0byBnbG9iYWwgZXN0w6EgZGVzYWN0dWFsaXphZG9cbiAgICAgIGNvbnN0IGxhc3RNZXNzYWdlV2l0aFByb2plY3QgPSBtZXNzYWdlc1JlZi5jdXJyZW50LmZpbHRlcihtc2cgPT4gbXNnLnByb2plY3RJZCkuYXQoLTEpXG5cbiAgICAgIGNvbnN0IGN1cnJlbnRBZ2VudEZyb21NZXNzYWdlcyA9IG1lc3NhZ2VzUmVmLmN1cnJlbnQ/LlttZXNzYWdlc1JlZi5jdXJyZW50Lmxlbmd0aCAtIDFdPy5hZ2VudElkXG5cbiAgICAgIGNvbnN0IHNlc3Npb25JZCA9IGN1cnJlbnRDaGF0SWQuY3VycmVudFxuICAgICAgY29uc3Qge1xuICAgICAgICBjaGlwc1Byb2plY3Q6IGN0eENoaXBzUHJvamVjdCxcbiAgICAgICAgcHJvamVjdDogY3R4UHJvamVjdCxcbiAgICAgICAgY2xpZW50OiBjdHhDbGllbnQsXG4gICAgICAgIHRhc2s6IGN0eFRhc2ssXG4gICAgICB9ID0gY29udGV4dFJlZi5jdXJyZW50XG5cbiAgICAgIGVuc3VyZVNlc3Npb25JblNpZGViYXIoe1xuICAgICAgICBzZXNzaW9uSWQsXG4gICAgICAgIHRpdGxlOiBidWlsZFNpZGViYXJTZXNzaW9uVGl0bGUoZGlzcGxheU1lc3NhZ2UpLFxuICAgICAgICBhZ2VudCxcbiAgICAgICAgYWdlbnRJZDogY3VycmVudEFnZW50RnJvbU1lc3NhZ2VzIHx8IGFnZW50Py5pZCxcbiAgICAgICAgcHJvamVjdDogY3R4UHJvamVjdCxcbiAgICAgICAgY2xpZW50OiBjdHhDbGllbnQsXG4gICAgICAgIGF0dGFjaG1lbnRzLFxuICAgICAgfSlcblxuICAgICAgLy8gTm8gYWdyZWdhciBwcm9qZWN0SWQgYWwgbWVuc2FqZSBkZWwgdXN1YXJpbyAtIHNlIGRldGVybWluYXLDoSBkZXNwdcOpc1xuICAgICAgY29tbWl0VG9TZXNzaW9uKHNlc3Npb25JZCwge1xuICAgICAgICBpZDogYHF1ZXN0aW9uLSR7Y3VycmVudE1lc3NhZ2VJZC5jdXJyZW50fWAsXG4gICAgICAgIG1lc3NhZ2U6IGRpc3BsYXlNZXNzYWdlLFxuICAgICAgICBkYXRlOiBuZXcgRGF0ZSgpLFxuICAgICAgICB1c2VyOiBjdXJyZW50VXNlcixcbiAgICAgICAgcm9sZTogQ2hhdEhpc3RvcnlSb2xlLlVTRVIsXG4gICAgICAgIHNvdXJjZXM6IGF0dGFjaG1lbnRzLFxuICAgICAgICAuLi4oY29udGV4dE1lc3NhZ2UgPyB7IGNvbnRleHRNZXNzYWdlIH0gOiB7fSksXG4gICAgICB9KVxuXG4gICAgICBjdXJyZW50TWVzc2FnZUlkLmN1cnJlbnQgPSB1dWlkdjQoKVxuXG4gICAgICBjb25zdCBzdHJlYW1pbmdQbGFjZWhvbGRlcklkID0gc3RyZWFtaW5nUGxhY2Vob2xkZXJNZXNzYWdlSWQoY3VycmVudE1lc3NhZ2VJZC5jdXJyZW50KVxuICAgICAgc3RyZWFtaW5nUGxhY2Vob2xkZXJJZFJlZi5jdXJyZW50ID0gc3RyZWFtaW5nUGxhY2Vob2xkZXJJZFxuICAgICAgYWN0aXZlU3RyZWFtQ2hhdElkUmVmLmN1cnJlbnQgPSBzZXNzaW9uSWRcbiAgICAgIHNlc3Npb25TdHJlYW1pbmdUZXh0LnN0YXJ0KHNlc3Npb25JZCwgc3RyZWFtaW5nUGxhY2Vob2xkZXJJZClcbiAgICAgIGNvbW1pdFRvU2Vzc2lvbihzZXNzaW9uSWQsIHtcbiAgICAgICAgaWQ6IHN0cmVhbWluZ1BsYWNlaG9sZGVySWQsXG4gICAgICAgIG1lc3NhZ2U6ICcnLFxuICAgICAgICBkYXRlOiBuZXcgRGF0ZSgpLFxuICAgICAgICB1c2VyOiB7IGlkOiAnYXNzaXN0YW50JywgbmFtZTogYWdlbnQ/Lm5hbWUgfHwgJ0Fzc2lzdGFudCcgfSxcbiAgICAgICAgcm9sZTogQ2hhdEhpc3RvcnlSb2xlLkFTU0lTVEFOVCxcbiAgICAgIH0pXG5cbiAgICAgIGxldCBmaW5hbE1lc3NhZ2UgPSBtZXNzYWdlXG5cbiAgICAgIGlmIChtZXNzYWdlID09PSB0KCdxYS5pdGVtcy5yZW50YWJpbGlkYWRfcHJveWVjdG8nKSkge1xuICAgICAgICBmaW5hbE1lc3NhZ2UgPSBgRkFROiAke3QoJ3FhLml0ZW1zLnJlbnRhYmlsaWRhZF9wcm95ZWN0bycpfSAtIFRpcG8gZGUgcmVudGFiaWxpZGFkOiAke1xuICAgICAgICAgIG9wdGlvbnMucHJvamVjdENoYW5nZWQ/LmluY29tZVR5cGUgfHwgY29udGV4dFJlZi5jdXJyZW50LnByb2plY3Q/LmluY29tZVR5cGVcbiAgICAgICAgfWBcbiAgICAgIH1cblxuICAgICAgY29uc3QgaGlzdG9yeSA9IG1lc3NhZ2VzUmVmLmN1cnJlbnQubWFwKGhpc3RvcnlNZXNzYWdlID0+ICh7XG4gICAgICAgIGNvbnRlbnQ6IGhpc3RvcnlNZXNzYWdlLm1lc3NhZ2UsXG4gICAgICAgIHJvbGU6IGhpc3RvcnlNZXNzYWdlLnVzZXIuaWQgPT09IGF1dGhVc2VyLmlkLnRvU3RyaW5nKCkgPyBDaGF0SGlzdG9yeVJvbGUuVVNFUiA6IENoYXRIaXN0b3J5Um9sZS5BU1NJU1RBTlQsXG4gICAgICB9KSlcblxuICAgICAgY29uc3QgbGFzdE1lc3NhZ2VQcm9qZWN0SWQgPSBsYXN0TWVzc2FnZVdpdGhQcm9qZWN0Py5wcm9qZWN0SWRcbiAgICAgIGNvbnN0IHByb2plY3RUb1JlcXVlc3QgPSByZXNvbHZlUHJvamVjdFRvUmVxdWVzdChjdHhDaGlwc1Byb2plY3QsIGxhc3RNZXNzYWdlUHJvamVjdElkKVxuXG4gICAgICBjb25zdCBwcm9qZWN0cyA9IGF3YWl0IGZldGNoUHJvamVjdHMoW3Byb2plY3RUb1JlcXVlc3RdKVxuXG4gICAgICBjb25zdCBwYXlsb2FkRmFxSWQgPSBmYXFJZCA/PyBvcHRpb25zLmZhcUlkXG4gICAgICBjb25zdCBwYXlsb2FkQWdlbnRTdWdnZXN0aW9uSWQgPSBhZ2VudFN1Z2dlc3Rpb25JZCA/PyBvcHRpb25zLmFnZW50U3VnZ2VzdGlvbklkXG5cbiAgICAgIGNvbnN0IHBheWxvYWREYXRhID0ge1xuICAgICAgICBtZXNzYWdlOiBmaW5hbE1lc3NhZ2UsXG4gICAgICAgIGhpc3RvcnksXG4gICAgICAgIHByb2plY3RJZDogcHJvamVjdFRvUmVxdWVzdCxcbiAgICAgICAgbGFuZzogYXV0aFVzZXIubGFuZyxcbiAgICAgICAgdXNlcklkOiBhdXRoVXNlci5pZC50b1N0cmluZygpLFxuICAgICAgICBmaXJzdE5hbWU6IGF1dGhVc2VyLmZpcnN0TmFtZSxcbiAgICAgICAgbGFzdE5hbWU6IGF1dGhVc2VyLmxhc3ROYW1lLFxuICAgICAgICBjb21wYW55SWQ6IGF1dGhVc2VyLmNvbXBhbnlfaWQudG9TdHJpbmcoKSxcbiAgICAgICAgY2hhdElkOiBjdXJyZW50Q2hhdElkLmN1cnJlbnQsXG4gICAgICAgIG1lc3NhZ2VJZDogY3VycmVudE1lc3NhZ2VJZC5jdXJyZW50LFxuICAgICAgICBhZ2VudE5hbWU6IGFnZW50Py5uYW1lIHx8ICcnLFxuICAgICAgICBhZ2VudElkOiBjdXJyZW50QWdlbnRGcm9tTWVzc2FnZXMgfHwgYWdlbnQ/LmlkISxcbiAgICAgICAgaXNXZWJTZWFyY2hBY3RpdmU6IGlzV2ViU2VhcmNoQWN0aXZlUmVmLmN1cnJlbnQsXG4gICAgICAgIGlzRGVlcFNlYXJjaEFjdGl2ZTogaXNEZWVwU2VhcmNoQWN0aXZlUmVmLmN1cnJlbnQsXG4gICAgICAgIGlzQXV0b0FwcHJvdmVBY3RpdmU6IGlzQXV0b0FwcHJvdmVBY3RpdmVSZWYuY3VycmVudCxcbiAgICAgICAgLi4uKGN0eFByb2plY3Q/LmZlZUlkICE9IG51bGwgPyB7IGZlZUlkOiBOdW1iZXIoY3R4UHJvamVjdC5mZWVJZCkgfSA6IHt9KSxcbiAgICAgICAgLi4ucmVzb2x2ZUNsaWVudFBheWxvYWQoY3R4Q2xpZW50LCBjdHhQcm9qZWN0KSxcbiAgICAgICAgLi4uKHByb2plY3RzPy5sZW5ndGggPyB7IHByb2plY3ROYW1lOiBwcm9qZWN0c1swXS5uYW1lIH0gOiB7fSksXG4gICAgICAgIC4uLihjdHhUYXNrPy5pZCAhPSBudWxsXG4gICAgICAgICAgPyB7IHRhc2tJZDogTnVtYmVyKGN0eFRhc2suaWQpLCAuLi4oY3R4VGFzay5uYW1lID8geyB0YXNrTmFtZTogY3R4VGFzay5uYW1lIH0gOiB7fSkgfVxuICAgICAgICAgIDoge30pLFxuICAgICAgICAuLi4oYXR0YWNobWVudHMubGVuZ3RoID4gMCA/IHsgYXR0YWNobWVudHMgfSA6IHt9KSxcbiAgICAgICAgLi4uKHBheWxvYWRGYXFJZCA/IHsgZmFxSWQ6IHBheWxvYWRGYXFJZCB9IDoge30pLFxuICAgICAgICAuLi4ocGF5bG9hZEFnZW50U3VnZ2VzdGlvbklkID8geyBhZ2VudFN1Z2dlc3Rpb25JZDogcGF5bG9hZEFnZW50U3VnZ2VzdGlvbklkIH0gOiB7fSksXG4gICAgICAgIC4uLihwYXlsb2FkRnVhSWQgPyB7IGZ1YUlkOiBwYXlsb2FkRnVhSWQgfSA6IHt9KSxcbiAgICAgICAgLi4uKHBheWxvYWRTY0lkID8geyBzY0lkOiBwYXlsb2FkU2NJZCB9IDoge30pLFxuICAgICAgICAuLi4oYWdlbnQ/LmVudGl0eSAhPSBudWxsID8geyBhZ2VudEVudGl0eTogYWdlbnQuZW50aXR5IH0gOiB7fSksXG4gICAgICAgIC4uLihhZ2VudD8udHlwZSAhPSBudWxsID8geyBhZ2VudFR5cGU6IGFnZW50LnR5cGUgfSA6IHt9KSxcbiAgICAgICAgLi4uKGFnZW50Py5lbW9qaSAhPSBudWxsID8geyBhZ2VudEVtb2ppOiBhZ2VudC5lbW9qaSB9IDoge30pLFxuICAgICAgICAuLi4oY29udGV4dE1lc3NhZ2UgPyB7IGNvbnRleHRNZXNzYWdlIH0gOiB7fSksXG4gICAgICAgIC4uLihwYXlsb2FkQ29udGV4dERhdGEgPyB7IGNvbnRleHREYXRhOiBwYXlsb2FkQ29udGV4dERhdGEgfSA6IHt9KSxcbiAgICAgIH1cblxuICAgICAgYXNrTWFpYShwYXlsb2FkRGF0YSlcbiAgICB9LFxuICAgIFtcbiAgICAgIGFkZE1lc3NhZ2UsXG4gICAgICBjb21taXRUb1Nlc3Npb24sXG4gICAgICBldmVudCxcbiAgICAgIGFza01haWEsXG4gICAgICBwcm9qZWN0LFxuICAgICAgY2xpZW50LFxuICAgICAgdGFzayxcbiAgICAgIGNoaXBzUHJvamVjdCxcbiAgICAgIGF1dGhVc2VyLFxuICAgICAgYWdlbnQsXG4gICAgICB0LFxuICAgICAgd2FpdGluZ1Jlc3BvbnNlLFxuICAgICAgbG9hZGluZ01lc3NhZ2VzLFxuICAgICAgaXNXZWJTZWFyY2hBY3RpdmUsXG4gICAgICBpc0RlZXBTZWFyY2hBY3RpdmUsXG4gICAgXVxuICApXG5cbiAgY29uc3QgY2hhbmdlUHJvamVjdCA9IHVzZUNhbGxiYWNrKFxuICAgIChvcHRpb246IFByb2plY3QpID0+IHtcbiAgICAgIGlmICghY3VycmVudFVzZXJRdWVzdGlvbi5jdXJyZW50KSByZXR1cm5cblxuICAgICAgaWYgKG9wdGlvbi5pZCAhPT0gcHJvamVjdD8uaWQpIHtcbiAgICAgICAgc2V0UHJvamVjdChvcHRpb24pXG4gICAgICB9XG5cbiAgICAgIGlmIChwcm9qZWN0ICYmIGN1cnJlbnRVc2VyUXVlc3Rpb24uY3VycmVudCkge1xuICAgICAgICBjb25zdCBoaXN0b3J5ID0gbWVzc2FnZXNSZWYuY3VycmVudC5tYXAoaGlzdG9yeU1lc3NhZ2UgPT4gKHtcbiAgICAgICAgICBjb250ZW50OiBoaXN0b3J5TWVzc2FnZS5tZXNzYWdlLFxuICAgICAgICAgIHJvbGU6IGhpc3RvcnlNZXNzYWdlLnVzZXIuaWQgPT09IGF1dGhVc2VyLmlkLnRvU3RyaW5nKCkgPyBDaGF0SGlzdG9yeVJvbGUuVVNFUiA6IENoYXRIaXN0b3J5Um9sZS5BU1NJU1RBTlQsXG4gICAgICAgIH0pKVxuXG4gICAgICAgIGFza01haWEoe1xuICAgICAgICAgIG1lc3NhZ2U6IGN1cnJlbnRVc2VyUXVlc3Rpb24uY3VycmVudCxcbiAgICAgICAgICBoaXN0b3J5LFxuICAgICAgICAgIHByb2plY3RJZDogb3B0aW9uLmlkLFxuICAgICAgICAgIGxhbmc6IGF1dGhVc2VyLmxhbmcsXG4gICAgICAgICAgdXNlcklkOiBhdXRoVXNlci5pZC50b1N0cmluZygpLFxuICAgICAgICAgIGZpcnN0TmFtZTogYXV0aFVzZXIuZmlyc3ROYW1lLFxuICAgICAgICAgIGxhc3ROYW1lOiBhdXRoVXNlci5sYXN0TmFtZSxcbiAgICAgICAgICBjb21wYW55SWQ6IGF1dGhVc2VyLmNvbXBhbnlfaWQudG9TdHJpbmcoKSxcbiAgICAgICAgICBjaGF0SWQ6IGN1cnJlbnRDaGF0SWQuY3VycmVudCxcbiAgICAgICAgICBtZXNzYWdlSWQ6IGN1cnJlbnRNZXNzYWdlSWQuY3VycmVudCxcbiAgICAgICAgICBhZ2VudE5hbWU6IGFnZW50Py5uYW1lIHx8ICcnLFxuICAgICAgICAgIGFnZW50SWQ6IGFnZW50Py5pZCB8fCAnJyxcbiAgICAgICAgICBpc1dlYlNlYXJjaEFjdGl2ZTogaXNXZWJTZWFyY2hBY3RpdmVSZWYuY3VycmVudCxcbiAgICAgICAgICBpc0RlZXBTZWFyY2hBY3RpdmU6IGlzRGVlcFNlYXJjaEFjdGl2ZVJlZi5jdXJyZW50LFxuICAgICAgICAgIGlzQXV0b0FwcHJvdmVBY3RpdmU6IGlzQXV0b0FwcHJvdmVBY3RpdmVSZWYuY3VycmVudCxcbiAgICAgICAgICAuLi4ob3B0aW9uPy5mZWVJZCAhPSBudWxsID8geyBmZWVJZDogTnVtYmVyKG9wdGlvbi5mZWVJZCkgfSA6IHt9KSxcbiAgICAgICAgICAuLi4ob3B0aW9uPy5jbGllbnRJZCAhPSBudWxsID8geyBjbGllbnRJZDogTnVtYmVyKG9wdGlvbi5jbGllbnRJZCkgfSA6IHt9KSxcbiAgICAgICAgICAuLi4oYWdlbnQ/LmVudGl0eSAhPSBudWxsID8geyBhZ2VudEVudGl0eTogYWdlbnQuZW50aXR5IH0gOiB7fSksXG4gICAgICAgICAgLi4uKGFnZW50Py50eXBlICE9IG51bGwgPyB7IGFnZW50VHlwZTogYWdlbnQudHlwZSB9IDoge30pLFxuICAgICAgICB9KVxuICAgICAgfVxuICAgIH0sXG4gICAgW3Byb2plY3QsIHNldFByb2plY3QsIGFza01haWEsIGF1dGhVc2VyLCBpc1dlYlNlYXJjaEFjdGl2ZSwgYWdlbnRdXG4gIClcblxuICBjb25zdCByZXRyeU1lc3NhZ2UgPSB1c2VDYWxsYmFjayhcbiAgICBhc3luYyAobWVzc2FnZTogQ2hhdE1lc3NhZ2UpID0+IHtcbiAgICAgIGlmIChpc1Byb2Nlc3NpbmdSZWYuY3VycmVudCB8fCB3YWl0aW5nUmVzcG9uc2UgfHwgbG9hZGluZ01lc3NhZ2VzKSByZXR1cm5cblxuICAgICAgY29uc3Qgc2Vzc2lvbklkID0gY3VycmVudENoYXRJZC5jdXJyZW50XG4gICAgICBpZiAoc2Vzc2lvblN0cmVhbU1hbmFnZXIuaXNBY3RpdmUoc2Vzc2lvbklkKSkgcmV0dXJuXG4gICAgICBpZiAoc2Vzc2lvblN0cmVhbU1hbmFnZXIuZ2V0QWN0aXZlQ291bnQoKSA+PSBNQVhfQ09OQ1VSUkVOVF9TVFJFQU1TKSB7XG4gICAgICAgIGRvY3VtZW50LmRpc3BhdGNoRXZlbnQoXG4gICAgICAgICAgbmV3IEN1c3RvbUV2ZW50KCdzbmFja2Jhci1ldmVudCcsIHtcbiAgICAgICAgICAgIGRldGFpbDogeyBzaG93OiB0cnVlLCBzZXZlcml0eTogJ2luZm8nLCBtZXNzYWdlOiB0KCdjaGF0LnRvb01hbnlBY3RpdmVTZXNzaW9ucycpIH0sXG4gICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgY29uc3QgcHJldmlvdXNNZXNzYWdlcyA9IG1lc3NhZ2VzUmVmLmN1cnJlbnRcbiAgICAgIGlmICghcHJldmlvdXNNZXNzYWdlcy5zb21lKGl0ZW0gPT4gaXRlbS5pZCA9PT0gbWVzc2FnZS5pZCkpIHJldHVyblxuXG4gICAgICBjb25zdCB1c2VyTWVzc2FnZSA9IGZpbmRVc2VyTWVzc2FnZUZvclJldHJ5KHByZXZpb3VzTWVzc2FnZXMsIG1lc3NhZ2UpXG4gICAgICBpZiAoIXVzZXJNZXNzYWdlPy5tZXNzYWdlPy50cmltKCkgJiYgIXVzZXJNZXNzYWdlPy5hdHRhY2htZW50cz8ubGVuZ3RoICYmICF1c2VyTWVzc2FnZT8uc291cmNlcz8ubGVuZ3RoKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBjb25zdCB0dXJuSWQgPSByZXNvbHZlUmV0cnlUdXJuSWQobWVzc2FnZSlcbiAgICAgIGNvbnN0IHVzZU9yY2hlc3RyYXRvckZhbGxiYWNrID0gbWVzc2FnZS5pc0Zyb250ZW5kQ2FuY2VsbGVkICYmICFtZXNzYWdlLm1lbW9yeVNlc3Npb25JZD8udHJpbSgpXG4gICAgICBpZiAoIXR1cm5JZCAmJiAhdXNlT3JjaGVzdHJhdG9yRmFsbGJhY2spIHJldHVyblxuXG4gICAgICBjb25zdCB0cnVuY2F0ZWQgPSBtZXNzYWdlc1dpdGhvdXRSZXRyaWVkVHVybihwcmV2aW91c01lc3NhZ2VzLCBtZXNzYWdlKVxuXG4gICAgICBpc1Byb2Nlc3NpbmdSZWYuY3VycmVudCA9IHRydWVcbiAgICAgIHJldHJ5U25hcHNob3RSZWYuY3VycmVudCA9IHByZXZpb3VzTWVzc2FnZXNcbiAgICAgIHNldEFjdGl2ZUNoYXRJZChzZXNzaW9uSWQpXG5cbiAgICAgIGNvbnN0IG5ld01lc3NhZ2VJZCA9IHV1aWR2NCgpXG4gICAgICBjdXJyZW50TWVzc2FnZUlkLmN1cnJlbnQgPSBuZXdNZXNzYWdlSWRcbiAgICAgIGN1cnJlbnRVc2VyUXVlc3Rpb24uY3VycmVudCA9IHVzZXJNZXNzYWdlLm1lc3NhZ2VcbiAgICAgIGNvbnN0IHN0cmVhbWluZ1BsYWNlaG9sZGVySWQgPSBgYW5zd2VyLSR7bmV3TWVzc2FnZUlkfS1zdHJlYW1pbmdgXG4gICAgICBzdHJlYW1pbmdQbGFjZWhvbGRlcklkUmVmLmN1cnJlbnQgPSBzdHJlYW1pbmdQbGFjZWhvbGRlcklkXG4gICAgICBhY3RpdmVTdHJlYW1DaGF0SWRSZWYuY3VycmVudCA9IHNlc3Npb25JZFxuXG4gICAgICBjb25zdCBwbGFjZWhvbGRlcjogQ2hhdE1lc3NhZ2UgPSB7XG4gICAgICAgIGlkOiBzdHJlYW1pbmdQbGFjZWhvbGRlcklkLFxuICAgICAgICBtZXNzYWdlOiAnJyxcbiAgICAgICAgZGF0ZTogbmV3IERhdGUoKSxcbiAgICAgICAgdXNlcjogeyBpZDogJ2Fzc2lzdGFudCcsIG5hbWU6IGFnZW50Py5uYW1lIHx8ICdBc3Npc3RhbnQnIH0sXG4gICAgICAgIHJvbGU6IENoYXRIaXN0b3J5Um9sZS5BU1NJU1RBTlQsXG4gICAgICB9XG4gICAgICBjb25zdCBuZXh0TWVzc2FnZXMgPSBbLi4udHJ1bmNhdGVkLCBwbGFjZWhvbGRlcl1cbiAgICAgIG1lc3NhZ2VzUmVmLmN1cnJlbnQgPSBuZXh0TWVzc2FnZXNcbiAgICAgIHJlcGxhY2VNZXNzYWdlcyhuZXh0TWVzc2FnZXMpXG4gICAgICBzZXNzaW9uU3RyZWFtaW5nVGV4dC5zdGFydChzZXNzaW9uSWQsIHN0cmVhbWluZ1BsYWNlaG9sZGVySWQpXG5cbiAgICAgIGNvbnN0IHtcbiAgICAgICAgY2hpcHNQcm9qZWN0OiBjdHhDaGlwc1Byb2plY3QsXG4gICAgICAgIHByb2plY3Q6IGN0eFByb2plY3QsXG4gICAgICAgIGNsaWVudDogY3R4Q2xpZW50LFxuICAgICAgICB0YXNrOiBjdHhUYXNrLFxuICAgICAgfSA9IGNvbnRleHRSZWYuY3VycmVudFxuICAgICAgY29uc3QgbGFzdE1lc3NhZ2VXaXRoUHJvamVjdCA9IHRydW5jYXRlZC5maWx0ZXIobXNnID0+IG1zZy5wcm9qZWN0SWQpLmF0KC0xKVxuICAgICAgY29uc3QgcHJvamVjdFRvUmVxdWVzdCA9IHJlc29sdmVQcm9qZWN0VG9SZXF1ZXN0KGN0eENoaXBzUHJvamVjdCwgbGFzdE1lc3NhZ2VXaXRoUHJvamVjdD8ucHJvamVjdElkKVxuICAgICAgY29uc3QgY3VycmVudEFnZW50RnJvbU1lc3NhZ2VzID0gdHJ1bmNhdGVkLmF0KC0xKT8uYWdlbnRJZCB8fCBtZXNzYWdlLmFnZW50SWRcbiAgICAgIGNvbnN0IGF0dGFjaG1lbnRzID0gQXJyYXkuaXNBcnJheSh1c2VyTWVzc2FnZS5hdHRhY2htZW50cylcbiAgICAgICAgPyB1c2VyTWVzc2FnZS5hdHRhY2htZW50c1xuICAgICAgICA6IEFycmF5LmlzQXJyYXkodXNlck1lc3NhZ2Uuc291cmNlcylcbiAgICAgICAgICA/IHVzZXJNZXNzYWdlLnNvdXJjZXNcbiAgICAgICAgICA6IFtdXG5cbiAgICAgIGNvbnN0IHJlcGxheVZpYU9yY2hlc3RyYXRvciA9IGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3QgaGlzdG9yeSA9IHRydW5jYXRlZC5tYXAoaGlzdG9yeU1lc3NhZ2UgPT4gKHtcbiAgICAgICAgICBjb250ZW50OiBoaXN0b3J5TWVzc2FnZS5tZXNzYWdlLFxuICAgICAgICAgIHJvbGU6IGhpc3RvcnlNZXNzYWdlLnVzZXIuaWQgPT09IGF1dGhVc2VyLmlkLnRvU3RyaW5nKCkgPyBDaGF0SGlzdG9yeVJvbGUuVVNFUiA6IENoYXRIaXN0b3J5Um9sZS5BU1NJU1RBTlQsXG4gICAgICAgIH0pKVxuICAgICAgICBjb25zdCBwcm9qZWN0cyA9IHByb2plY3RUb1JlcXVlc3QgPyBhd2FpdCBmZXRjaFByb2plY3RzKFtwcm9qZWN0VG9SZXF1ZXN0XSkgOiBudWxsXG5cbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgYXNrTWFpYSh7XG4gICAgICAgICAgbWVzc2FnZTogdXNlck1lc3NhZ2UubWVzc2FnZSxcbiAgICAgICAgICBoaXN0b3J5LFxuICAgICAgICAgIHByb2plY3RJZDogcHJvamVjdFRvUmVxdWVzdCxcbiAgICAgICAgICBsYW5nOiBhdXRoVXNlci5sYW5nLFxuICAgICAgICAgIHVzZXJJZDogYXV0aFVzZXIuaWQudG9TdHJpbmcoKSxcbiAgICAgICAgICBmaXJzdE5hbWU6IGF1dGhVc2VyLmZpcnN0TmFtZSxcbiAgICAgICAgICBsYXN0TmFtZTogYXV0aFVzZXIubGFzdE5hbWUsXG4gICAgICAgICAgY29tcGFueUlkOiBhdXRoVXNlci5jb21wYW55X2lkLnRvU3RyaW5nKCksXG4gICAgICAgICAgY2hhdElkOiBzZXNzaW9uSWQsXG4gICAgICAgICAgbWVzc2FnZUlkOiBuZXdNZXNzYWdlSWQsXG4gICAgICAgICAgYWdlbnROYW1lOiBhZ2VudD8ubmFtZSB8fCAnJyxcbiAgICAgICAgICBhZ2VudElkOiBTdHJpbmcoY3VycmVudEFnZW50RnJvbU1lc3NhZ2VzIHx8IGFnZW50Py5pZCB8fCAnJyksXG4gICAgICAgICAgaXNXZWJTZWFyY2hBY3RpdmU6IGlzV2ViU2VhcmNoQWN0aXZlUmVmLmN1cnJlbnQsXG4gICAgICAgICAgaXNEZWVwU2VhcmNoQWN0aXZlOiBpc0RlZXBTZWFyY2hBY3RpdmVSZWYuY3VycmVudCxcbiAgICAgICAgICAuLi4oY3R4UHJvamVjdD8uZmVlSWQgIT0gbnVsbCA/IHsgZmVlSWQ6IE51bWJlcihjdHhQcm9qZWN0LmZlZUlkKSB9IDoge30pLFxuICAgICAgICAgIC4uLnJlc29sdmVDbGllbnRQYXlsb2FkKGN0eENsaWVudCwgY3R4UHJvamVjdCksXG4gICAgICAgICAgLi4uKHByb2plY3RzPy5sZW5ndGggPyB7IHByb2plY3ROYW1lOiBwcm9qZWN0c1swXS5uYW1lIH0gOiB7fSksXG4gICAgICAgICAgLi4uKGN0eFRhc2s/LmlkICE9IG51bGxcbiAgICAgICAgICAgID8geyB0YXNrSWQ6IE51bWJlcihjdHhUYXNrLmlkKSwgLi4uKGN0eFRhc2submFtZSA/IHsgdGFza05hbWU6IGN0eFRhc2submFtZSB9IDoge30pIH1cbiAgICAgICAgICAgIDoge30pLFxuICAgICAgICAgIC4uLihhdHRhY2htZW50cy5sZW5ndGggPiAwID8geyBhdHRhY2htZW50cyB9IDoge30pLFxuICAgICAgICAgIC4uLihhZ2VudD8uZW50aXR5ICE9IG51bGwgPyB7IGFnZW50RW50aXR5OiBhZ2VudC5lbnRpdHkgfSA6IHt9KSxcbiAgICAgICAgICAuLi4oYWdlbnQ/LnR5cGUgIT0gbnVsbCA/IHsgYWdlbnRUeXBlOiBhZ2VudC50eXBlIH0gOiB7fSksXG4gICAgICAgICAgLi4uKGFnZW50Py5lbW9qaSAhPSBudWxsID8geyBhZ2VudEVtb2ppOiBhZ2VudC5lbW9qaSB9IDoge30pLFxuICAgICAgICAgIC4uLih1c2VyTWVzc2FnZS5jb250ZXh0TWVzc2FnZSA/IHsgY29udGV4dE1lc3NhZ2U6IHVzZXJNZXNzYWdlLmNvbnRleHRNZXNzYWdlIH0gOiB7fSksXG4gICAgICAgIH0pXG5cbiAgICAgICAgaWYgKCFyZXN1bHQuc3RhcnRlZCkge1xuICAgICAgICAgIHJldHJ5U25hcHNob3RSZWYuY3VycmVudCA9IG51bGxcbiAgICAgICAgICBtZXNzYWdlc1JlZi5jdXJyZW50ID0gcHJldmlvdXNNZXNzYWdlc1xuICAgICAgICAgIHJlcGxhY2VNZXNzYWdlcyhwcmV2aW91c01lc3NhZ2VzKVxuICAgICAgICAgIHNlc3Npb25TdHJlYW1pbmdUZXh0LmNsZWFyKHNlc3Npb25JZClcbiAgICAgICAgICBzdHJlYW1pbmdQbGFjZWhvbGRlcklkUmVmLmN1cnJlbnQgPSBudWxsXG4gICAgICAgICAgYWN0aXZlU3RyZWFtQ2hhdElkUmVmLmN1cnJlbnQgPSBudWxsXG4gICAgICAgICAgaXNQcm9jZXNzaW5nUmVmLmN1cnJlbnQgPSBmYWxzZVxuICAgICAgICAgIGlmIChyZXN1bHQucmVhc29uID09PSAnbGltaXQnKSB7XG4gICAgICAgICAgICBkb2N1bWVudC5kaXNwYXRjaEV2ZW50KFxuICAgICAgICAgICAgICBuZXcgQ3VzdG9tRXZlbnQoJ3NuYWNrYmFyLWV2ZW50Jywge1xuICAgICAgICAgICAgICAgIGRldGFpbDogeyBzaG93OiB0cnVlLCBzZXZlcml0eTogJ2luZm8nLCBtZXNzYWdlOiB0KCdjaGF0LnRvb01hbnlBY3RpdmVTZXNzaW9ucycpIH0sXG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICh1c2VPcmNoZXN0cmF0b3JGYWxsYmFjayB8fCAhdHVybklkKSB7XG4gICAgICAgIGF3YWl0IHJlcGxheVZpYU9yY2hlc3RyYXRvcigpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCByZXRyeUNvbXBsZXRpb24oe1xuICAgICAgICBjaGF0SWQ6IHNlc3Npb25JZCxcbiAgICAgICAgbWVzc2FnZUlkOiBuZXdNZXNzYWdlSWQsXG4gICAgICAgIG1lbW9yeVNlc3Npb25JZDogdHVybklkLFxuICAgICAgICBsYW5nOiBhdXRoVXNlci5sYW5nLFxuICAgICAgICBhZ2VudElkOiBTdHJpbmcoY3VycmVudEFnZW50RnJvbU1lc3NhZ2VzIHx8IGFnZW50Py5pZCB8fCAnJyksXG4gICAgICAgIGFnZW50TmFtZTogYWdlbnQ/Lm5hbWUgfHwgJycsXG4gICAgICAgIC4uLihhZ2VudD8udHlwZSAhPSBudWxsID8geyBhZ2VudFR5cGU6IGFnZW50LnR5cGUgfSA6IHt9KSxcbiAgICAgICAgaXNXZWJTZWFyY2hBY3RpdmU6IGlzV2ViU2VhcmNoQWN0aXZlUmVmLmN1cnJlbnQsXG4gICAgICAgIGlzRGVlcFNlYXJjaEFjdGl2ZTogaXNEZWVwU2VhcmNoQWN0aXZlUmVmLmN1cnJlbnQsXG4gICAgICAgIC4uLihwcm9qZWN0VG9SZXF1ZXN0ID8geyBwcm9qZWN0SWQ6IHByb2plY3RUb1JlcXVlc3QgfSA6IHt9KSxcbiAgICAgICAgLi4ucmVzb2x2ZUNsaWVudFBheWxvYWQoY3R4Q2xpZW50LCBjdHhQcm9qZWN0KSxcbiAgICAgICAgLi4uKGN0eFRhc2s/LmlkICE9IG51bGwgPyB7IHRhc2tJZDogTnVtYmVyKGN0eFRhc2suaWQpIH0gOiB7fSksXG4gICAgICB9KVxuXG4gICAgICBpZiAocmVzdWx0LnN0YXJ0ZWQpIHJldHVyblxuXG4gICAgICBpZiAocmVzdWx0LnJlYXNvbiA9PT0gJ3R1cm5fbm90X2ZvdW5kJykge1xuICAgICAgICBhd2FpdCByZXBsYXlWaWFPcmNoZXN0cmF0b3IoKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgcmV0cnlTbmFwc2hvdFJlZi5jdXJyZW50ID0gbnVsbFxuICAgICAgbWVzc2FnZXNSZWYuY3VycmVudCA9IHByZXZpb3VzTWVzc2FnZXNcbiAgICAgIHJlcGxhY2VNZXNzYWdlcyhwcmV2aW91c01lc3NhZ2VzKVxuICAgICAgc2Vzc2lvblN0cmVhbWluZ1RleHQuY2xlYXIoc2Vzc2lvbklkKVxuICAgICAgc3RyZWFtaW5nUGxhY2Vob2xkZXJJZFJlZi5jdXJyZW50ID0gbnVsbFxuICAgICAgYWN0aXZlU3RyZWFtQ2hhdElkUmVmLmN1cnJlbnQgPSBudWxsXG4gICAgICBpc1Byb2Nlc3NpbmdSZWYuY3VycmVudCA9IGZhbHNlXG4gICAgICBpZiAocmVzdWx0LnJlYXNvbiA9PT0gJ2xpbWl0Jykge1xuICAgICAgICBkb2N1bWVudC5kaXNwYXRjaEV2ZW50KFxuICAgICAgICAgIG5ldyBDdXN0b21FdmVudCgnc25hY2tiYXItZXZlbnQnLCB7XG4gICAgICAgICAgICBkZXRhaWw6IHsgc2hvdzogdHJ1ZSwgc2V2ZXJpdHk6ICdpbmZvJywgbWVzc2FnZTogdCgnY2hhdC50b29NYW55QWN0aXZlU2Vzc2lvbnMnKSB9LFxuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgIH1cbiAgICB9LFxuICAgIFtcbiAgICAgIHdhaXRpbmdSZXNwb25zZSxcbiAgICAgIGxvYWRpbmdNZXNzYWdlcyxcbiAgICAgIHJlcGxhY2VNZXNzYWdlcyxcbiAgICAgIHJldHJ5Q29tcGxldGlvbixcbiAgICAgIGFza01haWEsXG4gICAgICBmZXRjaFByb2plY3RzLFxuICAgICAgYXV0aFVzZXIsXG4gICAgICBhZ2VudCxcbiAgICAgIHQsXG4gICAgICBzZXRBY3RpdmVDaGF0SWQsXG4gICAgXVxuICApXG5cbiAgY29uc3QgaGFuZGxlRmVlZGJhY2sgPSB1c2VDYWxsYmFjayhhc3luYyAoZmVlZGJhY2tQcm9wOiBGZWVkYmFjaywgY2hhdE1lc3NhZ2VJZDogc3RyaW5nKSA9PiB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBtYWlhLkNoYXRzLndhc0hlbHBmdWxDaGF0KGNoYXRNZXNzYWdlSWQsIGZlZWRiYWNrUHJvcCA9PT0gRmVlZGJhY2suVEhVTUJTX1VQKVxuICAgIGlmIChyZXNwb25zZSkge1xuICAgICAgbWVzc2FnZXNSZWYuY3VycmVudCA9IG1lc3NhZ2VzUmVmLmN1cnJlbnQubWFwKG1lc3NhZ2UgPT4ge1xuICAgICAgICBpZiAobWVzc2FnZS5pZCA9PT0gY2hhdE1lc3NhZ2VJZCAmJiBtZXNzYWdlLnJvbGUgPT09ICdhc3Npc3RhbnQnKSB7XG4gICAgICAgICAgcmV0dXJuIHsgLi4ubWVzc2FnZSwgd2FzSGVscGZ1bDogZmVlZGJhY2tQcm9wID09PSBGZWVkYmFjay5USFVNQlNfVVAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtZXNzYWdlXG4gICAgICB9KVxuICAgIH1cbiAgfSwgW10pXG5cbiAgY29uc3QgaGFuZGxlQXBwcm92YWxEZWNpc2lvbiA9IHVzZUNhbGxiYWNrKFxuICAgIGFzeW5jIChcbiAgICAgIHRocmVhZElkczogc3RyaW5nW10sXG4gICAgICBkZWNpc2lvbjogJ2FwcHJvdmUnIHwgJ3JlamVjdCcsXG4gICAgICBlZGl0ZWRBY3Rpb25zPzogQXJyYXk8eyB0b29sX25hbWU6IHN0cmluZzsgYXJnczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfT4sXG4gICAgICBtZXRhZGF0YT86IHsgdG9vbF9ncm91cF9zbHVnczogc3RyaW5nW10gfVxuICAgICkgPT4ge1xuICAgICAgaWYgKCF0aHJlYWRJZHM/Lmxlbmd0aCkge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdObyB0aHJlYWRfaWRzIHByb3ZpZGVkIGZvciBhcHByb3ZhbCBkZWNpc2lvbicpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBjb25zdCBmb3VuZCA9IGZpbmRNZXNzYWdlV2l0aEFwcHJvdmFsQnlUaHJlYWRJZHMoXG4gICAgICAgIHRocmVhZElkcyxcbiAgICAgICAgbWVzc2FnZXNSZWYuY3VycmVudCxcbiAgICAgICAgdXNlU2Vzc2lvbnNTdG9yZS5nZXRTdGF0ZSgpLm1lc3NhZ2VzLFxuICAgICAgICBhY3RpdmVWaWV3LmdldCgpXG4gICAgICApXG4gICAgICBpZiAoIWZvdW5kPy5tZXNzYWdlLmFwcHJvdmFsKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ05vIHNlIGVuY29udHLDsyBtZW5zYWplIGNvbiBhcHByb3ZhbCBwYXJhIHRocmVhZF9pZHM6JywgdGhyZWFkSWRzKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgY29uc3QgeyBtZXNzYWdlOiBtZXNzYWdlV2l0aEFwcHJvdmFsLCBzZXNzaW9uSWQ6IGZvdW5kU2Vzc2lvbklkIH0gPSBmb3VuZFxuICAgICAgY29uc3QgeyBhcHByb3ZhbCB9ID0gbWVzc2FnZVdpdGhBcHByb3ZhbFxuICAgICAgaWYgKCFhcHByb3ZhbCkge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgY29uc3Qgc2Vzc2lvbklkID0gYXBwcm92YWwuc2Vzc2lvbl9pZCB8fCBmb3VuZFNlc3Npb25JZFxuICAgICAgaWYgKCFzZXNzaW9uSWQpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignTm8gc2Vzc2lvbl9pZCBkaXNwb25pYmxlIHBhcmEgYXBwcm92YWw6JywgdGhyZWFkSWRzKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgaWYgKHNlc3Npb25TdHJlYW1NYW5hZ2VyLmlzQWN0aXZlKHNlc3Npb25JZCkpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGlmIChzZXNzaW9uU3RyZWFtTWFuYWdlci5nZXRBY3RpdmVDb3VudCgpID49IE1BWF9DT05DVVJSRU5UX1NUUkVBTVMpIHtcbiAgICAgICAgZG9jdW1lbnQuZGlzcGF0Y2hFdmVudChcbiAgICAgICAgICBuZXcgQ3VzdG9tRXZlbnQoJ3NuYWNrYmFyLWV2ZW50Jywge1xuICAgICAgICAgICAgZGV0YWlsOiB7IHNob3c6IHRydWUsIHNldmVyaXR5OiAnaW5mbycsIG1lc3NhZ2U6IHQoJ2NoYXQudG9vTWFueUFjdGl2ZVNlc3Npb25zJykgfSxcbiAgICAgICAgICB9KVxuICAgICAgICApXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBjb25zdCBtZXNzYWdlSWQgPSBtZXNzYWdlV2l0aEFwcHJvdmFsLmlkXG4gICAgICBjb25zdCBuZXdTdGF0dXMgPSByZXNvbHZlQXBwcm92YWxEZWNpc2lvblN0YXR1cyhkZWNpc2lvbilcbiAgICAgIGNvbnN0IGhpdGxDb250ZXh0OiBIaXRsRXhlY3V0aW9uQ29udGV4dCA9IHtcbiAgICAgICAgbWVzc2FnZUlkLFxuICAgICAgICBtZXNzYWdlVGV4dDogbWVzc2FnZVdpdGhBcHByb3ZhbC5tZXNzYWdlLFxuICAgICAgICBhcHByb3ZhbCxcbiAgICAgICAgcGVuZGluZ0FjdGlvbnM6IGFwcHJvdmFsLnBlbmRpbmdfYWN0aW9ucyxcbiAgICAgICAgdGhyZWFkSWRzLFxuICAgICAgfVxuXG4gICAgICBjb25zdCBpc0FjdGl2ZVNlc3Npb24gPSBhY3RpdmVWaWV3LmlzKHNlc3Npb25JZClcbiAgICAgIGlmIChpc0FjdGl2ZVNlc3Npb24pIHtcbiAgICAgICAgaGl0bEV4ZWN1dGlvbkNvbnRleHRSZWYuY3VycmVudCA9IGhpdGxDb250ZXh0XG4gICAgICAgIGlzUHJvY2Vzc2luZ1JlZi5jdXJyZW50ID0gdHJ1ZVxuICAgICAgfVxuXG4gICAgICBjb21taXRUb1Nlc3Npb24oc2Vzc2lvbklkLCB7IC4uLm1lc3NhZ2VXaXRoQXBwcm92YWwsIGFwcHJvdmFsU3RhdHVzOiBuZXdTdGF0dXMgfSlcblxuICAgICAgY29uc3Qgc3RyZWFtTWVzc2FnZUlkID0gdXVpZHY0KClcbiAgICAgIGlmIChpc0FjdGl2ZVNlc3Npb24pIHtcbiAgICAgICAgY3VycmVudE1lc3NhZ2VJZC5jdXJyZW50ID0gc3RyZWFtTWVzc2FnZUlkXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGhpdGxDdHg6IFN0cmVhbUNvbnRleHQgPSB7XG4gICAgICAgIHNlc3Npb25JZCxcbiAgICAgICAgbWVzc2FnZUlkOiBzdHJlYW1NZXNzYWdlSWQsXG4gICAgICAgIHBsYWNlaG9sZGVySWQ6IHN0cmVhbWluZ1BsYWNlaG9sZGVyTWVzc2FnZUlkKHN0cmVhbU1lc3NhZ2VJZCksXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHJlbGVhc2VBY3RpdmVQcm9jZXNzaW5nID0gKCkgPT4ge1xuICAgICAgICBpZiAoIWlzQWN0aXZlU2Vzc2lvbikgcmV0dXJuXG4gICAgICAgIGlzUHJvY2Vzc2luZ1JlZi5jdXJyZW50ID0gZmFsc2VcbiAgICAgICAgaGl0bEV4ZWN1dGlvbkNvbnRleHRSZWYuY3VycmVudCA9IG51bGxcbiAgICAgIH1cblxuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgc2Vzc2lvblN0cmVhbU1hbmFnZXIuc3RhcnRDb250aW51ZVN0cmVhbSh7XG4gICAgICAgIHNlc3Npb25JZCxcbiAgICAgICAgcGxhY2Vob2xkZXJJZDogaGl0bEN0eC5wbGFjZWhvbGRlcklkLFxuICAgICAgICBjb250aW51ZVJlcXVlc3Q6IHtcbiAgICAgICAgICB0aHJlYWRJZHMsXG4gICAgICAgICAgc2Vzc2lvbklkOiBhcHByb3ZhbC5zZXNzaW9uX2lkLFxuICAgICAgICAgIGRlY2lzaW9uOiByZXNvbHZlQ29udGludWVTdHJlYW1EZWNpc2lvbihkZWNpc2lvbiwgZWRpdGVkQWN0aW9ucyksXG4gICAgICAgICAgZWRpdGVkQWN0aW9ucyxcbiAgICAgICAgICBhZ2VudElkOiBhZ2VudD8uaWQgfHwgJycsXG4gICAgICAgICAgbGFuZzogYXV0aFVzZXIubGFuZyxcbiAgICAgICAgICBpc0F1dG9BcHByb3ZlQWN0aXZlOiBpc0F1dG9BcHByb3ZlQWN0aXZlUmVmLmN1cnJlbnQsXG4gICAgICAgICAgbWV0YWRhdGEsXG4gICAgICAgIH0sXG4gICAgICAgIHQsXG4gICAgICAgIGhpdGxFeGVjdXRpb25Db250ZXh0OiBoaXRsQ29udGV4dCxcbiAgICAgICAgYWdlbnRJZDogYWdlbnQ/LmlkLFxuICAgICAgICBhZ2VudE5hbWU6IGFnZW50Py5uYW1lLFxuICAgICAgICBjYWxsYmFja3M6IHtcbiAgICAgICAgICBvblN0cmVhbVVwZGF0ZTogY29udGVudCA9PiBoYW5kbGVTdHJlYW1VcGRhdGUoaGl0bEN0eCwgY29udGVudCksXG4gICAgICAgICAgb25GaW5pc2hTdHJlYW06IGZpbmlzaFBheWxvYWQgPT4ge1xuICAgICAgICAgICAgcmVsZWFzZUFjdGl2ZVByb2Nlc3NpbmcoKVxuICAgICAgICAgICAgaGFuZGxlU3RyZWFtRmluaXNoKFxuICAgICAgICAgICAgICBoaXRsQ3R4LFxuICAgICAgICAgICAgICBmaW5pc2hQYXlsb2FkLmNvbnRlbnQsXG4gICAgICAgICAgICAgIGZpbmlzaFBheWxvYWQuc291cmNlcyxcbiAgICAgICAgICAgICAgZmluaXNoUGF5bG9hZC5tZW1vcnlTZXNzaW9uSWQsXG4gICAgICAgICAgICAgIGZpbmlzaFBheWxvYWQuYXR0YWNobWVudHMsXG4gICAgICAgICAgICAgIGZpbmlzaFBheWxvYWQuc3VnZ2VzdGlvbnMsXG4gICAgICAgICAgICAgIGZpbmlzaFBheWxvYWQuY29tcGxldGVkQWdlbnRJZCxcbiAgICAgICAgICAgICAgZmluaXNoUGF5bG9hZC5yZXNvbHZlZENvbnRleHQsXG4gICAgICAgICAgICAgIGZpbmlzaFBheWxvYWQucmVhc29uaW5nXG4gICAgICAgICAgICApXG4gICAgICAgICAgfSxcbiAgICAgICAgICBvbkVycm9yOiAoKSA9PiB7XG4gICAgICAgICAgICByZWxlYXNlQWN0aXZlUHJvY2Vzc2luZygpXG4gICAgICAgICAgICBoYW5kbGVTdHJlYW1FcnJvcihoaXRsQ3R4KVxuICAgICAgICAgIH0sXG4gICAgICAgICAgb25BcHByb3ZhbFJlcXVpcmVkOiAoYXBwcm92YWxQYXlsb2FkLCBhY2N1bXVsYXRlZENvbnRlbnQpID0+IHtcbiAgICAgICAgICAgIHJlbGVhc2VBY3RpdmVQcm9jZXNzaW5nKClcbiAgICAgICAgICAgIGhhbmRsZUFwcHJvdmFsUmVxdWlyZWQoaGl0bEN0eCwgYXBwcm92YWxQYXlsb2FkLCBhY2N1bXVsYXRlZENvbnRlbnQpXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH0pXG5cbiAgICAgIGlmICghcmVzdWx0LnN0YXJ0ZWQpIHtcbiAgICAgICAgcmVsZWFzZUFjdGl2ZVByb2Nlc3NpbmcoKVxuICAgICAgICBpZiAocmVzdWx0LnJlYXNvbiA9PT0gJ2xpbWl0Jykge1xuICAgICAgICAgIGRvY3VtZW50LmRpc3BhdGNoRXZlbnQoXG4gICAgICAgICAgICBuZXcgQ3VzdG9tRXZlbnQoJ3NuYWNrYmFyLWV2ZW50Jywge1xuICAgICAgICAgICAgICBkZXRhaWw6IHsgc2hvdzogdHJ1ZSwgc2V2ZXJpdHk6ICdpbmZvJywgbWVzc2FnZTogdCgnY2hhdC50b29NYW55QWN0aXZlU2Vzc2lvbnMnKSB9LFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICApXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIFtcbiAgICAgIGF1dGhVc2VyLFxuICAgICAgYWdlbnQsXG4gICAgICBjb21taXRUb1Nlc3Npb24sXG4gICAgICBoYW5kbGVTdHJlYW1FcnJvcixcbiAgICAgIGhhbmRsZVN0cmVhbVVwZGF0ZSxcbiAgICAgIGhhbmRsZVN0cmVhbUZpbmlzaCxcbiAgICAgIGhhbmRsZUFwcHJvdmFsUmVxdWlyZWQsXG4gICAgICB0LFxuICAgIF1cbiAgKVxuXG4gIGNvbnN0IGluaXRpYWxpemVDaGF0ID0gdXNlQ2FsbGJhY2soYXN5bmMgKCkgPT4ge1xuICAgIGlmICghZmlyc3RUaW1lUmVmLmN1cnJlbnQpIHtcbiAgICAgIGZpcnN0VGltZVJlZi5jdXJyZW50ID0gdHJ1ZVxuICAgIH1cbiAgICBpZiAoaW5pdGlhbENoYXRJZCkge1xuICAgICAgYXdhaXQgbG9hZE1lc3NhZ2VzKClcbiAgICB9IGVsc2UgaWYgKHVzZXJJbml0aWFsTWVzc2FnZSkge1xuICAgICAgY29uc3QgaGFzSW5pdGlhbE1lc3NhZ2UgPSBCb29sZWFuKHVzZXJJbml0aWFsTWVzc2FnZS5tZXNzYWdlPy50cmltKCkpXG4gICAgICBjb25zdCBoYXNJbml0aWFsQXR0YWNobWVudHMgPSBCb29sZWFuKHVzZXJJbml0aWFsTWVzc2FnZS5hdHRhY2htZW50cz8ubGVuZ3RoKVxuICAgICAgY29uc3QgaGFzSW5pdGlhbEZhcSA9IEJvb2xlYW4odXNlckluaXRpYWxNZXNzYWdlLmZhcUlkKVxuICAgICAgY29uc3QgaGFzSW5pdGlhbEZ1YSA9IEJvb2xlYW4odXNlckluaXRpYWxNZXNzYWdlLmZ1YUlkKVxuICAgICAgY29uc3QgaGFzSW5pdGlhbFNjID0gQm9vbGVhbih1c2VySW5pdGlhbE1lc3NhZ2Uuc2NJZClcblxuICAgICAgaWYgKCFoYXNJbml0aWFsTWVzc2FnZSAmJiAhaGFzSW5pdGlhbEF0dGFjaG1lbnRzICYmICFoYXNJbml0aWFsRmFxICYmICFoYXNJbml0aWFsRnVhICYmICFoYXNJbml0aWFsU2MpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGhpc3RvcnkgPSBtZXNzYWdlc1JlZi5jdXJyZW50Lm1hcChoaXN0b3J5TWVzc2FnZSA9PiAoe1xuICAgICAgICBjb250ZW50OiBoaXN0b3J5TWVzc2FnZS5tZXNzYWdlLFxuICAgICAgICByb2xlOiBoaXN0b3J5TWVzc2FnZS51c2VyLmlkID09PSBhdXRoVXNlci5pZC50b1N0cmluZygpID8gQ2hhdEhpc3RvcnlSb2xlLlVTRVIgOiBDaGF0SGlzdG9yeVJvbGUuQVNTSVNUQU5ULFxuICAgICAgfSkpXG5cbiAgICAgIGNvbnN0IHtcbiAgICAgICAgY2hpcHNQcm9qZWN0OiBjdHhDaGlwc1Byb2plY3QsXG4gICAgICAgIHByb2plY3Q6IGN0eFByb2plY3QsXG4gICAgICAgIGNsaWVudDogY3R4Q2xpZW50LFxuICAgICAgICB0YXNrOiBjdHhUYXNrLFxuICAgICAgfSA9IGNvbnRleHRSZWYuY3VycmVudFxuICAgICAgY29uc3QgcHJvamVjdFRvUmVxdWVzdCA9IHJlc29sdmVQcm9qZWN0VG9SZXF1ZXN0KGN0eENoaXBzUHJvamVjdCwgbnVsbCkgPz8gY3R4UHJvamVjdD8uaWQgPz8gbnVsbFxuXG4gICAgICBjb25zdCBpbml0aWFsRGlzcGxheU1lc3NhZ2UgPSBmb3JtYXRRdWlja0FjdGlvbk1lc3NhZ2VGb3JEaXNwbGF5KHVzZXJJbml0aWFsTWVzc2FnZS5tZXNzYWdlLCB7XG4gICAgICAgIGZ1YUlkOiB1c2VySW5pdGlhbE1lc3NhZ2UuZnVhSWQsXG4gICAgICAgIHNjSWQ6IHVzZXJJbml0aWFsTWVzc2FnZS5zY0lkLFxuICAgICAgfSlcblxuICAgICAgZW5zdXJlU2Vzc2lvbkluU2lkZWJhcih7XG4gICAgICAgIHNlc3Npb25JZDogY3VycmVudENoYXRJZC5jdXJyZW50LFxuICAgICAgICB0aXRsZTogYnVpbGRTaWRlYmFyU2Vzc2lvblRpdGxlKGluaXRpYWxEaXNwbGF5TWVzc2FnZSksXG4gICAgICAgIGFnZW50LFxuICAgICAgICBhZ2VudElkOiBhZ2VudD8uaWQsXG4gICAgICAgIHByb2plY3Q6IGN0eFByb2plY3QsXG4gICAgICAgIGNsaWVudDogY3R4Q2xpZW50LFxuICAgICAgICBhdHRhY2htZW50czogdXNlckluaXRpYWxNZXNzYWdlLmF0dGFjaG1lbnRzLFxuICAgICAgfSlcblxuICAgICAgYXNrTWFpYSh7XG4gICAgICAgIG1lc3NhZ2U6IHVzZXJJbml0aWFsTWVzc2FnZS5tZXNzYWdlLFxuICAgICAgICBoaXN0b3J5LFxuICAgICAgICBwcm9qZWN0SWQ6IHByb2plY3RUb1JlcXVlc3QsXG4gICAgICAgIGxhbmc6IGF1dGhVc2VyLmxhbmcsXG4gICAgICAgIHVzZXJJZDogYXV0aFVzZXIuaWQudG9TdHJpbmcoKSxcbiAgICAgICAgZmlyc3ROYW1lOiBhdXRoVXNlci5maXJzdE5hbWUsXG4gICAgICAgIGxhc3ROYW1lOiBhdXRoVXNlci5sYXN0TmFtZSxcbiAgICAgICAgY29tcGFueUlkOiBhdXRoVXNlci5jb21wYW55X2lkLnRvU3RyaW5nKCksXG4gICAgICAgIGNoYXRJZDogY3VycmVudENoYXRJZC5jdXJyZW50LFxuICAgICAgICBtZXNzYWdlSWQ6IGN1cnJlbnRNZXNzYWdlSWQuY3VycmVudCxcbiAgICAgICAgYWdlbnROYW1lOiBhZ2VudD8ubmFtZSEsXG4gICAgICAgIGFnZW50SWQ6IGFnZW50Py5pZCEsXG4gICAgICAgIGlzV2ViU2VhcmNoQWN0aXZlOiBpc1dlYlNlYXJjaEFjdGl2ZVJlZi5jdXJyZW50LFxuICAgICAgICBpc0RlZXBTZWFyY2hBY3RpdmU6IGlzRGVlcFNlYXJjaEFjdGl2ZVJlZi5jdXJyZW50LFxuICAgICAgICBpc0F1dG9BcHByb3ZlQWN0aXZlOiBpc0F1dG9BcHByb3ZlQWN0aXZlUmVmLmN1cnJlbnQsXG4gICAgICAgIC4uLihjdHhQcm9qZWN0Py5mZWVJZCAhPSBudWxsID8geyBmZWVJZDogTnVtYmVyKGN0eFByb2plY3QuZmVlSWQpIH0gOiB7fSksXG4gICAgICAgIC4uLnJlc29sdmVDbGllbnRQYXlsb2FkKGN0eENsaWVudCwgY3R4UHJvamVjdCksXG4gICAgICAgIC4uLihjdHhQcm9qZWN0Py5uYW1lID8geyBwcm9qZWN0TmFtZTogY3R4UHJvamVjdC5uYW1lIH0gOiB7fSksXG4gICAgICAgIC4uLihjdHhUYXNrPy5pZCAhPSBudWxsXG4gICAgICAgICAgPyB7IHRhc2tJZDogTnVtYmVyKGN0eFRhc2suaWQpLCAuLi4oY3R4VGFzay5uYW1lID8geyB0YXNrTmFtZTogY3R4VGFzay5uYW1lIH0gOiB7fSkgfVxuICAgICAgICAgIDoge30pLFxuICAgICAgICAuLi4odXNlckluaXRpYWxNZXNzYWdlLmF0dGFjaG1lbnRzID8geyBhdHRhY2htZW50czogdXNlckluaXRpYWxNZXNzYWdlLmF0dGFjaG1lbnRzIH0gOiB7fSksXG4gICAgICAgIC4uLih1c2VySW5pdGlhbE1lc3NhZ2UuZmFxSWQgPyB7IGZhcUlkOiB1c2VySW5pdGlhbE1lc3NhZ2UuZmFxSWQgfSA6IHt9KSxcbiAgICAgICAgLi4uKHVzZXJJbml0aWFsTWVzc2FnZS5hZ2VudFN1Z2dlc3Rpb25JZCA/IHsgYWdlbnRTdWdnZXN0aW9uSWQ6IHVzZXJJbml0aWFsTWVzc2FnZS5hZ2VudFN1Z2dlc3Rpb25JZCB9IDoge30pLFxuICAgICAgICAuLi4odXNlckluaXRpYWxNZXNzYWdlLmZ1YUlkID8geyBmdWFJZDogdXNlckluaXRpYWxNZXNzYWdlLmZ1YUlkIH0gOiB7fSksXG4gICAgICAgIC4uLih1c2VySW5pdGlhbE1lc3NhZ2Uuc2NJZCA/IHsgc2NJZDogdXNlckluaXRpYWxNZXNzYWdlLnNjSWQgfSA6IHt9KSxcbiAgICAgICAgLi4uKGFnZW50Py5lbnRpdHkgIT0gbnVsbCA/IHsgYWdlbnRFbnRpdHk6IGFnZW50LmVudGl0eSB9IDoge30pLFxuICAgICAgICAuLi4oYWdlbnQ/LnR5cGUgIT0gbnVsbCA/IHsgYWdlbnRUeXBlOiBhZ2VudC50eXBlIH0gOiB7fSksXG4gICAgICAgIC4uLihhZ2VudD8uZW1vamkgIT0gbnVsbCA/IHsgYWdlbnRFbW9qaTogYWdlbnQuZW1vamkgfSA6IHt9KSxcbiAgICAgICAgLi4uKGJ1aWxkQ29udGV4dE1lc3NhZ2UodXNlckluaXRpYWxNZXNzYWdlLm1lbnRpb25zKVxuICAgICAgICAgID8geyBjb250ZXh0TWVzc2FnZTogYnVpbGRDb250ZXh0TWVzc2FnZSh1c2VySW5pdGlhbE1lc3NhZ2UubWVudGlvbnMpIH1cbiAgICAgICAgICA6IHt9KSxcbiAgICAgICAgLi4uKHVzZXJJbml0aWFsTWVzc2FnZS5jb250ZXh0RGF0YSA/IHsgY29udGV4dERhdGE6IHVzZXJJbml0aWFsTWVzc2FnZS5jb250ZXh0RGF0YSB9IDoge30pLFxuICAgICAgfSlcbiAgICB9XG4gIH0sIFtcbiAgICBpbml0aWFsQ2hhdElkLFxuICAgIHVzZXJJbml0aWFsTWVzc2FnZSxcbiAgICBwcm9qZWN0LFxuICAgIGNsaWVudCxcbiAgICB0YXNrLFxuICAgIGF1dGhVc2VyLFxuICAgIGFnZW50LFxuICAgIGFza01haWEsXG4gICAgaXNXZWJTZWFyY2hBY3RpdmUsXG4gICAgaXNEZWVwU2VhcmNoQWN0aXZlLFxuICBdKVxuXG4gIGNvbnN0IHJlc2V0Q2hhdCA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBjb25zdCBwcmV2aW91c1Nlc3Npb25JZCA9IGN1cnJlbnRDaGF0SWQuY3VycmVudFxuICAgIHNlc3Npb25TdHJlYW1pbmdUZXh0LmNsZWFyKHByZXZpb3VzU2Vzc2lvbklkKVxuICAgIHJlYXNvbmluZ1N0b3JlLmNsZWFyKClcbiAgICBjdXJyZW50TWVzc2FnZUlkLmN1cnJlbnQgPSB1dWlkdjQoKVxuICAgIGN1cnJlbnRVc2VyUXVlc3Rpb24uY3VycmVudCA9IG51bGxcbiAgICBjdXJyZW50Q2hhdElkLmN1cnJlbnQgPSB1dWlkdjQoKVxuICAgIHNldEFjdGl2ZVNlc3Npb25JZChjdXJyZW50Q2hhdElkLmN1cnJlbnQpXG4gICAgcmVwb3J0ZWRFdmVudC5jdXJyZW50ID0gZmFsc2VcbiAgICBzdHJlYW1pbmdQbGFjZWhvbGRlcklkUmVmLmN1cnJlbnQgPSBudWxsXG4gICAgYWN0aXZlU3RyZWFtQ2hhdElkUmVmLmN1cnJlbnQgPSBudWxsXG4gICAgc2V0QWN0aXZlQ2hhdElkKG51bGwpXG4gIH0sIFtzZXRBY3RpdmVDaGF0SWRdKVxuXG4gIGNvbnN0IHN0b3BHZW5lcmF0aW9uID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIHN0b3BTdHJlYW1pbmcoKVxuICAgIGlzUHJvY2Vzc2luZ1JlZi5jdXJyZW50ID0gZmFsc2VcbiAgfSwgW3N0b3BTdHJlYW1pbmddKVxuXG4gIHJldHVybiB7XG4gICAgbWVzc2FnZXMsXG4gICAgbG9hZGluZ01lc3NhZ2VzLFxuICAgIGlzTG9hZGluZ01vcmVNZXNzYWdlcyxcbiAgICB3YWl0aW5nUmVzcG9uc2UsXG4gICAgaXNXcml0aW5nLFxuICAgIGxvYWRpbmdNZXNzYWdlLFxuICAgIHN0cmVhbUFjdGl2aXR5LFxuICAgIGFjdGl2ZUxvYWRpbmdzLFxuICAgIGN1cnJlbnRQcm9qZWN0LFxuICAgIGN1cnJlbnRDaGF0SWQ6IGN1cnJlbnRDaGF0SWQuY3VycmVudCxcbiAgICBjdXJyZW50TWVzc2FnZUlkOiBjdXJyZW50TWVzc2FnZUlkLmN1cnJlbnQsXG5cbiAgICBzZW5kTWVzc2FnZSxcbiAgICByZXRyeU1lc3NhZ2UsXG4gICAgY2hhbmdlUHJvamVjdCxcbiAgICBoYW5kbGVGZWVkYmFjayxcbiAgICBoYW5kbGVBcHByb3ZhbERlY2lzaW9uLFxuICAgIGhhbmRsZVNjcm9sbCxcbiAgICBpbml0aWFsaXplQ2hhdCxcbiAgICByZXNldENoYXQsXG4gICAgc3RvcEdlbmVyYXRpb24sXG5cbiAgICBpc0Rpc2FibGVkOiB3YWl0aW5nUmVzcG9uc2UgfHwgbG9hZGluZ01lc3NhZ2VzLFxuICB9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVNBLFdBQVcsRUFBRUMsTUFBTSxFQUFFQyxTQUFTLEVBQUVDLFFBQVEsUUFBUSxPQUFPO0FBQ2hFLFNBQVNDLFNBQVMsUUFBUSxXQUFXO0FBQ3JDLFNBQVND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
1832
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1c2VDYWxsYmFjayIsInVzZVJlZiIsInVzZUVmZmVjdCIsInVzZVN0YXRlIiwiZmx1c2hTeW5jIiwidjQiLCJ1dWlkdjQiLCJ1c2VDaGF0TWVzc2FnZXMiLCJ1c2VPcmNoZXN0cmF0b3JTdHJlYW0iLCJ1c2VUIiwidXNlVXNlciIsInVzZUdsb2JhbENvbnRleHQiLCJFVkVOVFMiLCJ1c2VFdmVudCIsIm1haWEiLCJGZWVkYmFjayIsIkNoYXRIaXN0b3J5Um9sZSIsImJ1aWxkQ29udGV4dE1lc3NhZ2UiLCJmb3JtYXRRdWlja0FjdGlvbk1lc3NhZ2VGb3JEaXNwbGF5IiwidXNlUHJvamVjdHMiLCJ1c2VUYWJUYXNrRGVmYXVsdCIsIlRBU0tfVVJMX1JFR0VYX1BBVFRFUk4iLCJkaXNwYXRjaE1haWFIb3Vyc0NoYXJnZWQiLCJpc0hvdXJzQ2hhcmdlVG9vbCIsImZldGNoQWdlbnREZXRhaWwiLCJidWlsZEhpdGxBY3Rpb25UeXBlTGlzdCIsImdldEhpdGxBbmFseXRpY3NBZ2VudFR5cGUiLCJub3JtYWxpemVIaXRsVG9vbE5hbWUiLCJ0cmFja01hbnVhbEhpdGxFdmVudHMiLCJzZXNzaW9uU3RyZWFtaW5nVGV4dCIsInVzZVNlc3Npb25zU3RvcmUiLCJ1c2VTZXNzaW9uTWV0YSIsInNlc3Npb25TdHJlYW1NYW5hZ2VyIiwiTUFYX0NPTkNVUlJFTlRfU1RSRUFNUyIsImFjdGl2ZVZpZXciLCJub3RpZnlTZXNzaW9uRmluaXNoZWRJbkJhY2tncm91bmQiLCJidWlsZFNpZGViYXJTZXNzaW9uVGl0bGUiLCJlbnN1cmVTZXNzaW9uSW5TaWRlYmFyIiwiaXNTdHJlYW1pbmdQbGFjZWhvbGRlck1lc3NhZ2VJZCIsInN0cmVhbWluZ1BsYWNlaG9sZGVyTWVzc2FnZUlkIiwiZmluZFVzZXJNZXNzYWdlRm9yUmV0cnkiLCJtZXNzYWdlc1dpdGhvdXRSZXRyaWVkVHVybiIsInJlc29sdmVSZXRyeVR1cm5JZCIsImdldENoYXRzU3RvcmVTdGF0ZSIsInVzZUNoYXRzU3RvcmUiLCJyZWFzb25pbmdTdG9yZSIsImJ1aWxkUmVhc29uaW5nVHJhY2UiLCJtYXBSZWFzb25pbmdUcmFjZSIsInJlYXNvbmluZ1RyYWNlRm9yIiwibWVzc2FnZUlkIiwic25hcHNob3QiLCJnZXRTbmFwc2hvdCIsInN0ZXBzIiwibGVuZ3RoIiwic3VtbWFyeSIsIm5vcm1hbGl6ZVNlbmRNZXNzYWdlQXJncyIsImF0dGFjaG1lbnRzT3JPcHRpb25zIiwiX29wdGlvbnMkYXR0YWNobWVudHMiLCJBcnJheSIsImlzQXJyYXkiLCJhdHRhY2htZW50cyIsIm9wdGlvbnMiLCJyZXNvbHZlUHJvamVjdFRvUmVxdWVzdCIsImNoaXBzUHJvamVjdCIsImxhc3RNZXNzYWdlUHJvamVjdElkIiwiY2hpcHNQcm9qZWN0SWQiLCJwcm9qZWN0SWQiLCJOdW1iZXIiLCJpc0Zpbml0ZSIsInBhcnNlZCIsInJlc29sdmVDbGllbnRQYXlsb2FkIiwiY3R4Q2xpZW50IiwiY3R4UHJvamVjdCIsIl9jdHhQcm9qZWN0JGNsaWVudCIsImlkIiwiX29iamVjdFNwcmVhZCIsImNsaWVudElkIiwibmFtZSIsImNsaWVudE5hbWUiLCJjbGllbnQiLCJub3JtYWxpemVBc3Npc3RhbnRBdHRhY2htZW50cyIsInJhd0F0dGFjaG1lbnRzIiwiZmlsdGVyIiwiYXR0YWNobWVudCIsIl90eXBlb2YiLCJtYXAiLCJpbmRleCIsInRyaW0iLCJjb25jYXQiLCJ0eXBlIiwibWltZVR5cGUiLCJtaW1lX3R5cGUiLCJmdWxsRmlsZU5hbWUiLCJpbmNsdWRlcyIsIm51bWVyaWNTaXplIiwic2l6ZSIsImZpbGUiLCJGaWxlIiwidXJsX29yaWdpbmFsIiwidW5kZWZpbmVkIiwidXJsX3RodW1ibmFpbCIsInVybF9maWxlIiwicm9sZSIsImV4dHJhY3RUYXNrSWRzRnJvbVBlbmRpbmdBY3Rpb25zQXJncyIsInBlbmRpbmdBY3Rpb25zIiwiaWRzIiwicHVzaElkIiwicmF3IiwibiIsInBhcnNlSW50IiwiU3RyaW5nIiwiaXNOYU4iLCJwdXNoIiwiZm9yRWFjaCIsImFjdGlvbiIsIl9yZWMkdGFza19pZCIsImFyZ3MiLCJ0b29sX2FyZ3MiLCJyZWMiLCJ0YXNrX2lkIiwidGFza19pZHMiLCJ0YXNrcyIsInQiLCJfdHJlYyR0YXNrX2lkIiwidHJlYyIsImV4dHJhY3RUYXNrSWRzRnJvbURlbGV0ZVBlbmRpbmdBY3Rpb25zIiwidG9vbF9uYW1lIiwiX3JlYyR0YXNrX2lkMiIsImxpc3QiLCJ0aWQiLCJleHRyYWN0QWdlbnRJZEZyb21FZGl0QWdlbnRQZW5kaW5nQWN0aW9ucyIsIl9yZWMkYWdlbnRfaWQiLCJlZGl0QWN0aW9uIiwiZmluZCIsImEiLCJ0b0xvd2VyQ2FzZSIsImFnZW50X2lkIiwiYWdlbnRJZCIsImV4dHJhY3RBZ2VudElkRnJvbVBlbmRpbmdBY3Rpb25zQnlUb29sTmFtZSIsInRvb2xOYW1lIiwiX3JlZiIsIl9yZWMkYWdlbnRfaWQyIiwiZXh0cmFjdFRhc2tJZHNGcm9tQXNzaXN0YW50RGVsZXRpb25UZXh0IiwidGV4dCIsImxhYmVsZWQiLCJtYXRjaCIsImJvbGQiLCJ1c2VTdGFibGVDYWxsYmFja3MiLCJhdXRoVXNlciIsImN1cnJlbnRVc2VyIiwidG9TdHJpbmciLCJmaXJzdE5hbWUiLCJhdmF0YXIiLCJwaWN0dXJlIiwiY3VycmVudCIsImZpbmRNZXNzYWdlV2l0aEFwcHJvdmFsQnlUaHJlYWRJZHMiLCJ0aHJlYWRJZHMiLCJhY3RpdmVNZXNzYWdlcyIsImZyb21BY3RpdmVWaWV3IiwibWVzc2FnZSIsIl9tZXNzYWdlJGFwcHJvdmFsIiwiYXBwcm92YWwiLCJwZW5kaW5nX2FjdGlvbnMiLCJzb21lIiwidGhyZWFkX2lkIiwic2Vzc2lvbklkIiwic2Vzc2lvbl9pZCIsImdldCIsIl91c2VTZXNzaW9uc1N0b3JlJGdldCIsImdldFN0YXRlIiwibWVzc2FnZXMiLCJzZXNzaW9uRW50cnkiLCJPYmplY3QiLCJlbnRyaWVzIiwiX3JlZjIiLCJfcmVmMyIsIl9zbGljZWRUb0FycmF5Iiwic2Vzc2lvbk1lc3NhZ2VzIiwiX21lc3NhZ2UkYXBwcm92YWwyIiwiX3Nlc3Npb25FbnRyeSIsImZvdW5kIiwiX21lc3NhZ2UkYXBwcm92YWwzIiwidXNlQ2hhdE1hbmFnZXIiLCJfcmVmNCIsImluaXRpYWxDaGF0SWQiLCJjaGF0SWQiLCJ1c2VySW5pdGlhbE1lc3NhZ2UiLCJvbkVycm9yIiwiX3JlZjQkYWdlbnRzIiwiYWdlbnRzIiwiX3VzZVQiLCJfdXNlR2xvYmFsQ29udGV4dCIsInByb2plY3QiLCJzZXRQcm9qZWN0Iiwic2V0Q2xpZW50IiwidGFzayIsInNldFRhc2siLCJhZ2VudCIsImlzV2ViU2VhcmNoQWN0aXZlIiwiaXNEZWVwU2VhcmNoQWN0aXZlIiwiaXNBdXRvQXBwcm92ZUFjdGl2ZSIsInNldENoaXBzUHJvamVjdCIsImV2ZW50IiwiX3VzZVByb2plY3RzIiwiZmV0Y2hQcm9qZWN0cyIsIl91c2VTdGFibGVDYWxsYmFja3MiLCJfdXNlVGFiVGFza0RlZmF1bHQiLCJnZXRUYWJUYXNrRGVmYXVsdCIsImN1cnJlbnRNZXNzYWdlSWQiLCJjdXJyZW50VXNlclF1ZXN0aW9uIiwiY3VycmVudENoYXRJZCIsInNldEFjdGl2ZUNoYXRJZCIsInN0YXRlIiwicmVwb3J0ZWRFdmVudCIsIm1lc3NhZ2VzUmVmIiwibGFzdE1hbnVhbEFwcHJvdmFsUmVmIiwidHJhY2tlZE1hbnVhbEhpdGxLZXlzUmVmIiwiU2V0IiwiaGl0bEV4ZWN1dGlvbkNvbnRleHRSZWYiLCJyZXRyeVNuYXBzaG90UmVmIiwiaXNQcm9jZXNzaW5nUmVmIiwiZmlyc3RUaW1lUmVmIiwic3RyZWFtaW5nUGxhY2Vob2xkZXJJZFJlZiIsImFjdGl2ZVN0cmVhbUNoYXRJZFJlZiIsImNsZWFyU3RyZWFtVWlSZWYiLCJfdXNlU3RhdGUiLCJfdXNlU3RhdGUyIiwiYWN0aXZlTG9hZGluZ3MiLCJzZXRBY3RpdmVMb2FkaW5ncyIsIl91c2VTdGF0ZTMiLCJfdXNlU3RhdGU0IiwiYWN0aXZlU2Vzc2lvbklkIiwic2V0QWN0aXZlU2Vzc2lvbklkIiwiaXNNb3VudGVkUmVmIiwibGFzdEhhbmRsZWRUZXJtaW5hbFJlZiIsImlzV2ViU2VhcmNoQWN0aXZlUmVmIiwiaXNEZWVwU2VhcmNoQWN0aXZlUmVmIiwiaXNBdXRvQXBwcm92ZUFjdGl2ZVJlZiIsImNvbnRleHRSZWYiLCJfdXNlQ2hhdE1lc3NhZ2VzIiwibG9hZGluZ01lc3NhZ2VzIiwiaXNMb2FkaW5nTW9yZU1lc3NhZ2VzIiwibG9hZE1lc3NhZ2VzIiwiYWRkTWVzc2FnZSIsInJlbW92ZU1lc3NhZ2UiLCJyZXBsYWNlTWVzc2FnZXMiLCJoYW5kbGVTY3JvbGwiLCJjb21taXRUb1Nlc3Npb24iLCJpcyIsImRyb3BGcm9tU2Vzc2lvbiIsImNsZWFyU2Vzc2lvblRhaWwiLCJzZXRNZXNzYWdlcyIsInNldCIsImFjdGl2ZVNlc3Npb25NZXRhIiwiX2FjdGl2ZVNlc3Npb25NZXRhJGZpIiwic3RhdHVzIiwiaXNUZXJtaW5hbCIsImtleSIsImZpbmlzaGVkQXQiLCJ0YWlsIiwiZ2V0TWVzc2FnZXMiLCJoYXNTdGFsZVBsYWNlaG9sZGVyIiwibXNnIiwiZm9yY2UiLCJjdXN0b21FdmVudCIsIkN1c3RvbUV2ZW50IiwiZGV0YWlsIiwiZG9jdW1lbnQiLCJkaXNwYXRjaEV2ZW50IiwicHJldmlvdXNJbml0aWFsQ2hhdElkUmVmIiwicHJldmlvdXNJbml0aWFsQ2hhdElkIiwiaXNBY3RpdmUiLCJoYW5kbGVTdHJlYW1FcnJvciIsImN0eCIsImVycm9yTWVzc2FnZSIsImVycm9yUmF3TWVzc2FnZSIsIl9lcnJvclJhd01lc3NhZ2UkbWF0YyIsIl9lcnJvclJhd01lc3NhZ2UkbWF0YzIiLCJwbGFjZWhvbGRlcklkIiwiY2xlYXIiLCJyZXRyeVNuYXBzaG90Iiwic2hvdyIsInNldmVyaXR5IiwiaXNBY2Nlc3NEZW5pZWQiLCJpc1Byb21wdFRvb0xvbmciLCJ1c2VkIiwiaXNFcnJvciIsInN1Z2dlc3Rpb25zIiwiZGF0ZSIsIkRhdGUiLCJ1c2VyIiwiQVNTSVNUQU5UIiwibWFya0NoYXRBc1VucmVhZCIsImhhbmRsZVN0cmVhbVVwZGF0ZSIsImNvbnRlbnQiLCJwbGFjZWhvbGRlckV4aXN0cyIsInN0YXJ0Iiwic2V0VGV4dCIsImhhbmRsZVN0cmVhbUZpbmlzaCIsIl9yZWY1IiwiX2FzeW5jVG9HZW5lcmF0b3IiLCJfcmVnZW5lcmF0b3JSdW50aW1lIiwibWFyayIsIl9jYWxsZWUiLCJzb3VyY2VzIiwibWVtb3J5U2Vzc2lvbklkIiwiY29tcGxldGVkQWdlbnRJZCIsIl9yZXNvbHZlZENvbnRleHQiLCJyZWFzb25pbmciLCJfcmVhc29uaW5nVHJhY2VGb3IiLCJfcHJldmlvdXNNZXNzYWdlJGFwcHIiLCJfd2luZG93JHRhc2tQYW5lbCIsIl9jcmVhdGVBZ2VudEZvbGxvd1VwIiwiX2VkaXRBZ2VudEZvbGxvd1VwIiwidGVtcE1lc3NhZ2VJZCIsImZpbmFsTWVzc2FnZUlkIiwiZmluYWxUcmFjZSIsInRhc2tVcmxSZWdleCIsIm1hdGNoZXMiLCJjb250ZW50VG9BZGQiLCJwcmV2aW91c01lc3NhZ2UiLCJoYXNBcHByb3ZhbEluUHJldmlvdXNNZXNzYWdlIiwiVEFTS19DUkVBVElPTl9UT09MUyIsIlRBU0tfRURJVF9UT09MUyIsIlRBU0tfREVMRVRFX1RPT0xTIiwid2FzVGFza0NyZWF0aW9uIiwid2FzVGFza0VkaXQiLCJ3YXNUYXNrRGVsZXRlIiwid2FzQ3JlYXRlQWdlbnRBcHByb3ZlZCIsIndhc0NvbmZpZ3VyZUFnZW50QWNjZXNzQXBwcm92ZWQiLCJjcmVhdGVBZ2VudEZvbGxvd1VwIiwiY29uZmlndXJlZEFnZW50SWQiLCJtYW51YWxBcHByb3ZhbEZvckFuYWx5dGljcyIsIndhc01hbnVhbENyZWF0ZUFnZW50QXBwcm92ZWQiLCJ3YXNFZGl0QWdlbnRBcHByb3ZlZCIsImVkaXRBZ2VudEZvbGxvd1VwIiwiZnJvbVN0cmVhbSIsImZyb21BcmdzIiwicmVzb2x2ZWRBZ2VudElkIiwidGFza0lkc0Zyb21VcmxzIiwidGFza0lkc0Zyb21EZWxldGVBcHByb3ZhbCIsInRhc2tJZHNGcm9tRGVsZXRpb25UZXh0IiwidGFza0lkc0ZvckRhc2hib2FyZCIsInNob3VsZFN5bmNEYXNoYm9hcmQiLCJ0YXNrSWRzIiwidGFiIiwidGFiU2VnbWVudCIsImxhc3RQcm9qZWN0TWVzc2FnZSIsImNvbnRleHRQcm9qZWN0SWRSYXciLCJjb250ZXh0UHJvamVjdElkIiwicGF0aE1hdGNoIiwicm91dGVQcm9qZWN0SWQiLCJpc09uUHJvamVjdFJvdXRlIiwiX3dpbmRvdyRuZXdQcm9qZWN0RGFzIiwiX3dpbmRvdyRuZXdQcm9qZWN0RGFzMiIsIl93aW5kb3ckbmV3UHJvamVjdERhczMiLCJfd2luZG93JG5ld1Byb2plY3REYXM0IiwiX3dpbmRvdyRuZXdQcm9qZWN0RGFzNSIsIl93aW5kb3ckbmV3UHJvamVjdERhczYiLCJvcGVuVGFza1BhbmVsSWQiLCJtYW51YWxBcHByb3ZhbCIsIm1hbnVhbFdhc1Rhc2tFZGl0IiwibWFudWFsV2FzVGFza0RlbGV0ZSIsImhvdXJzVG9vbHNGcm9tQXBwcm92YWwiLCJ3YXNIb3Vyc0NoYXJnZUFwcHJvdmVkIiwibWFudWFsSG91cnNUb29sIiwid2FzSG91cnNDaGFyZ2VNYW51YWxBcHByb3ZlZCIsInRvb2xzIiwiX21hbnVhbEFwcHJvdmFsJHRvb2xBIiwibWFudWFsUHNldWRvQWN0aW9uIiwiYWZmZWN0ZWRUYXNrSWRzIiwiX3dpbmRvdyR0YXNrUGFuZWwyIiwiX3dpbmRvdyR0YXNrUGFuZWwyJHJlIiwiX2dldENoYXRzU3RvcmVTdGF0ZSIsImlzQ2hhdFZpZXdWaXNpYmxlIiwibWFya0NoYXRBc1JlYWQiLCJ3cmFwIiwiX2NvbnRleHQiLCJwcmV2IiwibmV4dCIsInJlbmFtZSIsImFicnVwdCIsIlJlZ0V4cCIsIl90b0NvbnN1bWFibGVBcnJheSIsIm1hdGNoQWxsIiwibSIsImF0IiwiYXBwcm92YWxTdGF0dXMiLCJ3aW5kb3ciLCJNQUlBX0NIQVRfQUlfRkVBVFVSRV9BQ0NFU1NfTVVMVElfQUdFTlRTIiwiYWlDaGF0SGl0bE9wdGlvbiIsImFnZW50X3R5cGUiLCJhY3Rpb25fdHlwZSIsImRlY2lzaW9uIiwib3B0aW9uIiwiY3JlYXRlZF9hZ2VudF9pZCIsInJlc29sdXRpb25fc291cmNlIiwic2VudCIsInJlcGxhY2UiLCJ1cmwiLCJsb2NhdGlvbiIsInBhdGhuYW1lIiwibmV3UHJvamVjdERhc2hib2FyZCIsImFkZEV4aXN0aW5nVGFza1RvRGFzaGJvYXJkIiwiY2FsbCIsImVkaXRFeGlzdGluZ1Rhc2tJbkRhc2hib2FyZCIsImRlbGV0ZUV4aXN0aW5nVGFza0Zyb21EYXNoYm9hcmQiLCJ0YXNrUGFuZWwiLCJ0YXNrSWQiLCJzb3VyY2UiLCJ0b29sQXJncyIsInJlZmV0Y2hUYXNrIiwidGhlbiIsImNoYXRBZ2VudCIsImVyciIsImNvbnNvbGUiLCJlcnJvciIsInN0b3AiLCJfeCIsIl94MiIsIl94MyIsIl94NCIsIl94NSIsIl94NiIsIl94NyIsIl94OCIsIl94OSIsImFwcGx5IiwiYXJndW1lbnRzIiwiaGFuZGxlU3RyZWFtU3RvcCIsInBhcnRpYWxUZXh0Iiwic3RvcHBlZFRyYWNlIiwiZmluaXNoIiwicmVtb3ZlIiwiaXNGcm9udGVuZENhbmNlbGxlZCIsImhhbmRsZUFwcHJvdmFsUmVxdWlyZWQiLCJhY2N1bXVsYXRlZENvbnRlbnQiLCJfYXBwcm92YWwkcGVuZGluZ19hY3QiLCJfbWFwUmVhc29uaW5nVHJhY2UiLCJoaXRsQ29udGV4dCIsIm9yaWdpbmFsX3RocmVhZF9pZCIsIm1lc3NhZ2VUZXh0IiwibWFudWFsX2FwcHJvdmFsX2RldGVjdGVkIiwiYXV0b19hcHByb3ZlZCIsImFwcHJvdmFsX3N0YXR1cyIsIl9hcHByb3ZhbCRwZW5kaW5nX2FjdDIiLCJfcmVmNiIsIl90b29sX25hbWUiLCJfdG9vbF9hcmdzIiwiaW1wcmVzc2lvbiIsImFpQ2hhdEhpdGwiLCJmaXJzdEFjdGlvbiIsImFwcHJvdmFsTWVzc2FnZUlkIiwiYXBwcm92YWxUcmFjZSIsIl91c2VPcmNoZXN0cmF0b3JTdHJlYSIsIm9uU3RyZWFtVXBkYXRlIiwib25GaW5pc2hTdHJlYW0iLCJvblN0b3AiLCJvbkFwcHJvdmFsUmVxdWlyZWQiLCJhc2tNYWlhIiwicmV0cnlDb21wbGV0aW9uIiwid2FpdGluZ1Jlc3BvbnNlIiwiaXNMb2FkaW5nIiwiaXNXcml0aW5nIiwibG9hZGluZ01lc3NhZ2UiLCJzdHJlYW1BY3Rpdml0eSIsInVwZGF0ZVN0cmVhbUFjdGl2aXR5Iiwic3RvcFN0cmVhbWluZyIsImN1cnJlbnRQcm9qZWN0Iiwic2VuZE1lc3NhZ2UiLCJfcmVmNyIsIl9jYWxsZWUyIiwiZmFxSWQiLCJhZ2VudFN1Z2dlc3Rpb25JZCIsIm1lbnRpb25zIiwiZnVhSWQiLCJzY0lkIiwiX21lc3NhZ2VzUmVmJGN1cnJlbnQiLCJ3aWxsU3RhcnROZXdTdHJlYW0iLCJfbm9ybWFsaXplU2VuZE1lc3NhZ2UiLCJlZmZlY3RpdmVNZW50aW9ucyIsImNvbnRleHRNZXNzYWdlIiwicGF5bG9hZEZ1YUlkIiwicGF5bG9hZFNjSWQiLCJwYXlsb2FkQ29udGV4dERhdGEiLCJkaXNwbGF5TWVzc2FnZSIsIm5ld01lc3NhZ2VJZCIsImxhc3RNZXNzYWdlV2l0aFByb2plY3QiLCJjdXJyZW50QWdlbnRGcm9tTWVzc2FnZXMiLCJfY29udGV4dFJlZiRjdXJyZW50IiwiY3R4Q2hpcHNQcm9qZWN0IiwiY3R4VGFzayIsInN0cmVhbWluZ1BsYWNlaG9sZGVySWQiLCJmaW5hbE1lc3NhZ2UiLCJfb3B0aW9ucyRwcm9qZWN0Q2hhbmciLCJfY29udGV4dFJlZiRjdXJyZW50JHAiLCJoaXN0b3J5IiwicHJvamVjdFRvUmVxdWVzdCIsInByb2plY3RzIiwicGF5bG9hZEZhcUlkIiwicGF5bG9hZEFnZW50U3VnZ2VzdGlvbklkIiwicGF5bG9hZERhdGEiLCJfY29udGV4dDIiLCJnZXRBY3RpdmVDb3VudCIsImNvbnRleHREYXRhIiwicG1BaVR5cGVkVGV4dCIsInRpdGxlIiwiVVNFUiIsInByb2plY3RDaGFuZ2VkIiwiaW5jb21lVHlwZSIsImhpc3RvcnlNZXNzYWdlIiwibGFuZyIsInVzZXJJZCIsImxhc3ROYW1lIiwiY29tcGFueUlkIiwiY29tcGFueV9pZCIsImFnZW50TmFtZSIsImZlZUlkIiwicHJvamVjdE5hbWUiLCJ0YXNrTmFtZSIsImVudGl0eSIsImFnZW50RW50aXR5IiwiYWdlbnRUeXBlIiwiZW1vamkiLCJhZ2VudEVtb2ppIiwiX3gwIiwiX3gxIiwiX3gxMCIsIl94MTEiLCJfeDEyIiwiX3gxMyIsIl94MTQiLCJjaGFuZ2VQcm9qZWN0IiwicmV0cnlNZXNzYWdlIiwiX3JlZjgiLCJfY2FsbGVlNCIsIl91c2VyTWVzc2FnZSRtZXNzYWdlIiwiX3VzZXJNZXNzYWdlJGF0dGFjaG1lIiwiX3VzZXJNZXNzYWdlJHNvdXJjZXMiLCJfbWVzc2FnZSRtZW1vcnlTZXNzaW8iLCJfdHJ1bmNhdGVkJGF0IiwicHJldmlvdXNNZXNzYWdlcyIsInVzZXJNZXNzYWdlIiwidHVybklkIiwidXNlT3JjaGVzdHJhdG9yRmFsbGJhY2siLCJ0cnVuY2F0ZWQiLCJwbGFjZWhvbGRlciIsIm5leHRNZXNzYWdlcyIsIl9jb250ZXh0UmVmJGN1cnJlbnQyIiwicmVwbGF5VmlhT3JjaGVzdHJhdG9yIiwicmVzdWx0IiwiX2NvbnRleHQ0IiwiaXRlbSIsIl9yZWY5IiwiX2NhbGxlZTMiLCJfdCIsIl9jb250ZXh0MyIsInN0YXJ0ZWQiLCJyZWFzb24iLCJfeDE1IiwiaGFuZGxlRmVlZGJhY2siLCJfcmVmMCIsIl9jYWxsZWU1IiwiZmVlZGJhY2tQcm9wIiwiY2hhdE1lc3NhZ2VJZCIsInJlc3BvbnNlIiwiX2NvbnRleHQ1IiwiQ2hhdHMiLCJ3YXNIZWxwZnVsQ2hhdCIsIlRIVU1CU19VUCIsIndhc0hlbHBmdWwiLCJfeDE2IiwiX3gxNyIsImhhbmRsZUFwcHJvdmFsRGVjaXNpb24iLCJfcmVmMSIsIl9jYWxsZWU2IiwiZWRpdGVkQWN0aW9ucyIsIm1ldGFkYXRhIiwibWVzc2FnZVdpdGhBcHByb3ZhbCIsImZvdW5kU2Vzc2lvbklkIiwibmV3U3RhdHVzIiwiaXNBY3RpdmVTZXNzaW9uIiwic3RyZWFtTWVzc2FnZUlkIiwiaGl0bEN0eCIsInJlbGVhc2VBY3RpdmVQcm9jZXNzaW5nIiwiX2NvbnRleHQ2Iiwic3RhcnRDb250aW51ZVN0cmVhbSIsImNvbnRpbnVlUmVxdWVzdCIsImhpdGxFeGVjdXRpb25Db250ZXh0IiwiY2FsbGJhY2tzIiwiZmluaXNoUGF5bG9hZCIsInJlc29sdmVkQ29udGV4dCIsImFwcHJvdmFsUGF5bG9hZCIsIl94MTgiLCJfeDE5IiwiX3gyMCIsIl94MjEiLCJpbml0aWFsaXplQ2hhdCIsIl9jYWxsZWU3IiwiX3VzZXJJbml0aWFsTWVzc2FnZSRtIiwiX3VzZXJJbml0aWFsTWVzc2FnZSRhIiwiX3JlZjExIiwiX3Jlc29sdmVQcm9qZWN0VG9SZXF1IiwiaGFzSW5pdGlhbE1lc3NhZ2UiLCJoYXNJbml0aWFsQXR0YWNobWVudHMiLCJoYXNJbml0aWFsRmFxIiwiaGFzSW5pdGlhbEZ1YSIsImhhc0luaXRpYWxTYyIsIl9jb250ZXh0UmVmJGN1cnJlbnQzIiwiaW5pdGlhbERpc3BsYXlNZXNzYWdlIiwiX2NvbnRleHQ3IiwiQm9vbGVhbiIsInJlc2V0Q2hhdCIsInByZXZpb3VzU2Vzc2lvbklkIiwic3RvcEdlbmVyYXRpb24iLCJpc0Rpc2FibGVkIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2hvb2tzL3VzZUNoYXRNYW5hZ2VyL3VzZUNoYXRNYW5hZ2VyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIHJhZGl4ICovXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1uZXN0ZWQtdGVybmFyeSAqL1xuLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLW5vbi1udWxsLWFzc2VydGVkLW9wdGlvbmFsLWNoYWluICovXG4vKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55ICovXG5pbXBvcnQgeyB1c2VDYWxsYmFjaywgdXNlUmVmLCB1c2VFZmZlY3QsIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBmbHVzaFN5bmMgfSBmcm9tICdyZWFjdC1kb20nXG5pbXBvcnQgeyB2NCBhcyB1dWlkdjQgfSBmcm9tICd1dWlkJ1xuaW1wb3J0IHsgdXNlQ2hhdE1lc3NhZ2VzIH0gZnJvbSAnLi4vdXNlQ2hhdE1lc3NhZ2VzJ1xuaW1wb3J0IHsgdXNlT3JjaGVzdHJhdG9yU3RyZWFtIH0gZnJvbSAnLi4vdXNlT3JjaGVzdHJhdG9yU3RyZWFtJ1xuaW1wb3J0IHsgdXNlVCB9IGZyb20gJy4uL3VzZVQnXG5pbXBvcnQgeyBBdHRhY2htZW50RmlsZSB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvbW9sZWN1bGVzL0NoYXRGb290ZXIvQ2hhdEZvb3RlcidcbmltcG9ydCB7IFNlbmRNZXNzYWdlT3B0aW9ucywgVXNlQ2hhdE1hbmFnZXJQcm9wcyB9IGZyb20gJy4vdXNlQ2hhdE1hbmFnZXIuaW50ZXJmYWNlJ1xuaW1wb3J0IHsgdXNlVXNlciwgQ09SVXNlciB9IGZyb20gJy4uLy4uL2NvbnRleHQvY29yLXVzZXInXG5pbXBvcnQgeyB1c2VHbG9iYWxDb250ZXh0IH0gZnJvbSAnLi4vLi4vY29udGV4dC9nbG9iYWwtY29udGV4dCdcbmltcG9ydCB7IEVWRU5UUywgdXNlRXZlbnQgfSBmcm9tICcuLi91c2VFdmVudCdcbmltcG9ydCBtYWlhIGZyb20gJy4uLy4uL3NlcnZpY2VzL21haWEnXG5pbXBvcnQgeyBGZWVkYmFjayB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvbW9sZWN1bGVzL01lc3NhZ2VGZWVkYmFjay9NZXNzYWdlRmVlZGJhY2snXG5pbXBvcnQgeyBDaGF0TWVzc2FnZSwgQ2hhdE1lc3NhZ2VVc2VyLCBDaGF0SGlzdG9yeVJvbGUsIEFwcHJvdmFsUmVxdWVzdCwgUGVuZGluZ0FjdGlvbiB9IGZyb20gJy4uLy4uL3R5cGVzL0NoYXQnXG5pbXBvcnQgeyBDb250ZXh0TWVudGlvbiwgQ29udGV4dE1lc3NhZ2UsIGJ1aWxkQ29udGV4dE1lc3NhZ2UgfSBmcm9tICcuLi8uLi90eXBlcy9jb250ZXh0TWVudGlvbidcbmltcG9ydCB7IGZvcm1hdFF1aWNrQWN0aW9uTWVzc2FnZUZvckRpc3BsYXkgfSBmcm9tICcuLi8uLi91dGlscy9mb3JtYXRRdWlja0FjdGlvbk1lc3NhZ2UnXG5cbmltcG9ydCB7IFByb2plY3QgfSBmcm9tICcuLi8uLi90eXBlcy9Qcm9qZWN0J1xuaW1wb3J0IHsgdXNlUHJvamVjdHMgfSBmcm9tICcuLi91c2VQcm9qZWN0cydcbmltcG9ydCB7IHVzZVRhYlRhc2tEZWZhdWx0IH0gZnJvbSAnLi4vdXNlVGFiVGFza0RlZmF1bHQnXG5pbXBvcnQgeyBUQVNLX1VSTF9SRUdFWF9QQVRURVJOIH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzL3Rhc2tVcmxzJ1xuaW1wb3J0IHsgZGlzcGF0Y2hNYWlhSG91cnNDaGFyZ2VkLCBpc0hvdXJzQ2hhcmdlVG9vbCB9IGZyb20gJy4uLy4uL2NvbnN0YW50cy9wbGFubmVyU3luY0V2ZW50cydcbmltcG9ydCB7IGZldGNoQWdlbnREZXRhaWwgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9tYWlhL0FnZW50cy9mZXRjaEFnZW50RGV0YWlsJ1xuaW1wb3J0IHtcbiAgYnVpbGRIaXRsQWN0aW9uVHlwZUxpc3QsXG4gIGdldEhpdGxBbmFseXRpY3NBZ2VudFR5cGUsXG4gIG5vcm1hbGl6ZUhpdGxUb29sTmFtZSxcbiAgdHJhY2tNYW51YWxIaXRsRXZlbnRzLFxufSBmcm9tICcuLi8uLi91dGlscy9oaXRsQW5hbHl0aWNzJ1xuaW1wb3J0IHsgdHlwZSBIaXRsRXhlY3V0aW9uQ29udGV4dCB9IGZyb20gJy4uLy4uL3V0aWxzL3N0cmVhbUFjdGl2aXR5TWVzc2FnZXMnXG5pbXBvcnQgeyBzZXNzaW9uU3RyZWFtaW5nVGV4dCB9IGZyb20gJy4uLy4uL3N0b3JlL3Nlc3Npb25zL3Nlc3Npb25TdHJlYW1pbmdUZXh0J1xuaW1wb3J0IHsgdXNlU2Vzc2lvbnNTdG9yZSB9IGZyb20gJy4uLy4uL3N0b3JlL3Nlc3Npb25zL3VzZVNlc3Npb25zU3RvcmUnXG5pbXBvcnQgeyB1c2VTZXNzaW9uTWV0YSB9IGZyb20gJy4uLy4uL3N0b3JlL3Nlc3Npb25zL3VzZVNlc3Npb25NZXRhJ1xuaW1wb3J0IHsgc2Vzc2lvblN0cmVhbU1hbmFnZXIsIE1BWF9DT05DVVJSRU5UX1NUUkVBTVMgfSBmcm9tICcuLi8uLi9zdG9yZS9zZXNzaW9ucy9zZXNzaW9uU3RyZWFtTWFuYWdlcidcbmltcG9ydCB7IGFjdGl2ZVZpZXcgfSBmcm9tICcuLi8uLi9zdG9yZS9zZXNzaW9ucy9hY3RpdmVWaWV3J1xuaW1wb3J0IHsgbm90aWZ5U2Vzc2lvbkZpbmlzaGVkSW5CYWNrZ3JvdW5kIH0gZnJvbSAnLi4vLi4vc3RvcmUvc2Vzc2lvbnMvc2Vzc2lvbk5vdGlmaWNhdGlvbnMnXG5pbXBvcnQgeyBidWlsZFNpZGViYXJTZXNzaW9uVGl0bGUsIGVuc3VyZVNlc3Npb25JblNpZGViYXIgfSBmcm9tICcuLi8uLi9zdG9yZS9jaGF0c1NpZGViYXJPcHRpbWlzdGljJ1xuaW1wb3J0IHsgaXNTdHJlYW1pbmdQbGFjZWhvbGRlck1lc3NhZ2VJZCwgc3RyZWFtaW5nUGxhY2Vob2xkZXJNZXNzYWdlSWQgfSBmcm9tICcuLi8uLi91dGlscy9zdHJlYW1BY3Rpdml0eU1lc3NhZ2VzJ1xuaW1wb3J0IHsgZmluZFVzZXJNZXNzYWdlRm9yUmV0cnksIG1lc3NhZ2VzV2l0aG91dFJldHJpZWRUdXJuLCByZXNvbHZlUmV0cnlUdXJuSWQgfSBmcm9tICcuLi8uLi91dGlscy9yZXRyeUNvbXBsZXRpb24nXG5pbXBvcnQgdHlwZSB7IFN0cmVhbUNvbnRleHQgfSBmcm9tICcuLi91c2VPcmNoZXN0cmF0b3JTdHJlYW0vdXNlT3JjaGVzdHJhdG9yU3RyZWFtLmludGVyZmFjZSdcbmltcG9ydCB7IGdldENoYXRzU3RvcmVTdGF0ZSwgdXNlQ2hhdHNTdG9yZSB9IGZyb20gJy4uLy4uL3N0b3JlL3VzZUNoYXRzU3RvcmUnXG5pbXBvcnQgeyByZWFzb25pbmdTdG9yZSB9IGZyb20gJy4uL3VzZVJlYXNvbmluZ1RyYWNlJ1xuaW1wb3J0IHsgYnVpbGRSZWFzb25pbmdUcmFjZSwgbWFwUmVhc29uaW5nVHJhY2UgfSBmcm9tICcuLi8uLi91dGlscy9yZWFzb25pbmdNYXBwZXJzJ1xuaW1wb3J0IHR5cGUgeyBSZWFzb25pbmdUcmFjZSwgUmVhc29uaW5nVHJhY2VQYXlsb2FkIH0gZnJvbSAnLi4vLi4vdHlwZXMvcmVhc29uaW5nJ1xuXG50eXBlIEF0dGFjaG1lbnRzT3JPcHRpb25zID0gQXR0YWNobWVudEZpbGVbXSB8IFNlbmRNZXNzYWdlT3B0aW9uc1xuXG4vKiogVHJhY2UgYWN1bXVsYWRvIGVuIHZpdm8gcGFyYSBgbWVzc2FnZUlkYCwgbyBudWxsIHNpIGVsIHN0b3JlIGFwdW50YSBhIG90cm8gbWVuc2FqZS4gKi9cbmNvbnN0IHJlYXNvbmluZ1RyYWNlRm9yID0gKG1lc3NhZ2VJZDogc3RyaW5nKTogUmVhc29uaW5nVHJhY2UgfCBudWxsID0+IHtcbiAgY29uc3Qgc25hcHNob3QgPSByZWFzb25pbmdTdG9yZS5nZXRTbmFwc2hvdChtZXNzYWdlSWQpXG4gIGlmICghc25hcHNob3Quc3RlcHMubGVuZ3RoKSByZXR1cm4gbnVsbFxuICByZXR1cm4gYnVpbGRSZWFzb25pbmdUcmFjZShzbmFwc2hvdC5zdGVwcywgc25hcHNob3Quc3VtbWFyeSlcbn1cblxuY29uc3Qgbm9ybWFsaXplU2VuZE1lc3NhZ2VBcmdzID0gKGF0dGFjaG1lbnRzT3JPcHRpb25zPzogQXR0YWNobWVudHNPck9wdGlvbnMpID0+IHtcbiAgaWYgKEFycmF5LmlzQXJyYXkoYXR0YWNobWVudHNPck9wdGlvbnMpKSB7XG4gICAgcmV0dXJuIHsgYXR0YWNobWVudHM6IGF0dGFjaG1lbnRzT3JPcHRpb25zLCBvcHRpb25zOiB7fSBhcyBTZW5kTWVzc2FnZU9wdGlvbnMgfVxuICB9XG5cbiAgY29uc3Qgb3B0aW9uczogU2VuZE1lc3NhZ2VPcHRpb25zID0gYXR0YWNobWVudHNPck9wdGlvbnMgPz8ge31cbiAgcmV0dXJuIHsgYXR0YWNobWVudHM6IG9wdGlvbnMuYXR0YWNobWVudHMgPz8gW10sIG9wdGlvbnMgfVxufVxuXG4vKiogY2hpcHNQcm9qZWN0IGVzIGxhIGZ1ZW50ZSBkZSB2ZXJkYWQgZGVsIHBpbiB2aXNpYmxlOyBzaSBubyBoYXkgcGluLCByZXN0YXVyYXIgZGVzZGUgaGlzdG9yaWFsLiAqL1xuY29uc3QgcmVzb2x2ZVByb2plY3RUb1JlcXVlc3QgPSAoXG4gIGNoaXBzUHJvamVjdDogeyBwcm9qZWN0SWQ/OiBzdHJpbmcgfSB8IG51bGwgfCB1bmRlZmluZWQsXG4gIGxhc3RNZXNzYWdlUHJvamVjdElkOiBudW1iZXIgfCBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkXG4pOiBudW1iZXIgfCBudWxsID0+IHtcbiAgY29uc3QgY2hpcHNQcm9qZWN0SWQgPSBjaGlwc1Byb2plY3Q/LnByb2plY3RJZCA/IE51bWJlcihjaGlwc1Byb2plY3QucHJvamVjdElkKSA6IG51bGxcbiAgaWYgKGNoaXBzUHJvamVjdElkICE9IG51bGwgJiYgTnVtYmVyLmlzRmluaXRlKGNoaXBzUHJvamVjdElkKSkge1xuICAgIHJldHVybiBjaGlwc1Byb2plY3RJZFxuICB9XG4gIGlmIChsYXN0TWVzc2FnZVByb2plY3RJZCAhPSBudWxsKSB7XG4gICAgY29uc3QgcGFyc2VkID0gTnVtYmVyKGxhc3RNZXNzYWdlUHJvamVjdElkKVxuICAgIHJldHVybiBOdW1iZXIuaXNGaW5pdGUocGFyc2VkKSA/IHBhcnNlZCA6IG51bGxcbiAgfVxuICByZXR1cm4gbnVsbFxufVxuXG5jb25zdCByZXNvbHZlQ2xpZW50UGF5bG9hZCA9IChcbiAgY3R4Q2xpZW50OiB7IGlkPzogbnVtYmVyOyBuYW1lPzogc3RyaW5nIH0gfCBudWxsIHwgdW5kZWZpbmVkLFxuICBjdHhQcm9qZWN0OiBQcm9qZWN0IHwgbnVsbCB8IHVuZGVmaW5lZFxuKTogeyBjbGllbnRJZD86IG51bWJlcjsgY2xpZW50TmFtZT86IHN0cmluZyB9ID0+IHtcbiAgaWYgKGN0eENsaWVudD8uaWQpIHtcbiAgICByZXR1cm4geyBjbGllbnRJZDogY3R4Q2xpZW50LmlkLCAuLi4oY3R4Q2xpZW50Lm5hbWUgPyB7IGNsaWVudE5hbWU6IGN0eENsaWVudC5uYW1lIH0gOiB7fSkgfVxuICB9XG4gIGlmIChjdHhQcm9qZWN0Py5jbGllbnRJZCAhPSBudWxsKSB7XG4gICAgcmV0dXJuIHsgY2xpZW50SWQ6IE51bWJlcihjdHhQcm9qZWN0LmNsaWVudElkKSB9XG4gIH1cbiAgaWYgKGN0eFByb2plY3Q/LmNsaWVudD8uaWQpIHtcbiAgICByZXR1cm4ge1xuICAgICAgY2xpZW50SWQ6IGN0eFByb2plY3QuY2xpZW50LmlkLFxuICAgICAgLi4uKGN0eFByb2plY3QuY2xpZW50Lm5hbWUgPyB7IGNsaWVudE5hbWU6IGN0eFByb2plY3QuY2xpZW50Lm5hbWUgfSA6IHt9KSxcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHt9XG59XG5cbmNvbnN0IG5vcm1hbGl6ZUFzc2lzdGFudEF0dGFjaG1lbnRzID0gKHJhd0F0dGFjaG1lbnRzOiB1bmtub3duKTogQXR0YWNobWVudEZpbGVbXSA9PiB7XG4gIGlmICghQXJyYXkuaXNBcnJheShyYXdBdHRhY2htZW50cykpIHtcbiAgICByZXR1cm4gW11cbiAgfVxuXG4gIHJldHVybiByYXdBdHRhY2htZW50c1xuICAgIC5maWx0ZXIoKGF0dGFjaG1lbnQpOiBhdHRhY2htZW50IGlzIFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0+ICEhYXR0YWNobWVudCAmJiB0eXBlb2YgYXR0YWNobWVudCA9PT0gJ29iamVjdCcpXG4gICAgLm1hcCgoYXR0YWNobWVudCwgaW5kZXgpID0+IHtcbiAgICAgIGNvbnN0IG5hbWUgPVxuICAgICAgICB0eXBlb2YgYXR0YWNobWVudC5uYW1lID09PSAnc3RyaW5nJyAmJiBhdHRhY2htZW50Lm5hbWUudHJpbSgpID8gYXR0YWNobWVudC5uYW1lLnRyaW0oKSA6IGBmaWxlLSR7aW5kZXggKyAxfWBcbiAgICAgIGNvbnN0IHR5cGUgPSB0eXBlb2YgYXR0YWNobWVudC50eXBlID09PSAnc3RyaW5nJyAmJiBhdHRhY2htZW50LnR5cGUudHJpbSgpID8gYXR0YWNobWVudC50eXBlLnRyaW0oKSA6ICdwZGYnXG4gICAgICBjb25zdCBtaW1lVHlwZSA9IHR5cGVvZiBhdHRhY2htZW50Lm1pbWVfdHlwZSA9PT0gJ3N0cmluZycgPyBhdHRhY2htZW50Lm1pbWVfdHlwZSA6ICcnXG4gICAgICBjb25zdCBmdWxsRmlsZU5hbWUgPSBuYW1lLmluY2x1ZGVzKCcuJykgPyBuYW1lIDogYCR7bmFtZX0uJHt0eXBlfWBcbiAgICAgIGNvbnN0IG51bWVyaWNTaXplID1cbiAgICAgICAgdHlwZW9mIGF0dGFjaG1lbnQuc2l6ZSA9PT0gJ251bWJlcidcbiAgICAgICAgICA/IGF0dGFjaG1lbnQuc2l6ZVxuICAgICAgICAgIDogTnVtYmVyLmlzRmluaXRlKE51bWJlcihhdHRhY2htZW50LnNpemUpKVxuICAgICAgICAgICAgPyBOdW1iZXIoYXR0YWNobWVudC5zaXplKVxuICAgICAgICAgICAgOiAwXG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGZpbGU6IG5ldyBGaWxlKFtdLCBmdWxsRmlsZU5hbWUsIHsgdHlwZTogbWltZVR5cGUgfSksXG4gICAgICAgIGlkOlxuICAgICAgICAgIHR5cGVvZiBhdHRhY2htZW50LmlkID09PSAnc3RyaW5nJyAmJiBhdHRhY2htZW50LmlkLnRyaW0oKVxuICAgICAgICAgICAgPyBhdHRhY2htZW50LmlkXG4gICAgICAgICAgICA6IGBhc3Npc3RhbnQtZmlsZS0ke2luZGV4fS0ke2Z1bGxGaWxlTmFtZX1gLFxuICAgICAgICBuYW1lLFxuICAgICAgICBzaXplOiBudW1lcmljU2l6ZSxcbiAgICAgICAgdHlwZSxcbiAgICAgICAgdXJsX29yaWdpbmFsOiB0eXBlb2YgYXR0YWNobWVudC51cmxfb3JpZ2luYWwgPT09ICdzdHJpbmcnID8gYXR0YWNobWVudC51cmxfb3JpZ2luYWwgOiB1bmRlZmluZWQsXG4gICAgICAgIHVybF90aHVtYm5haWw6IHR5cGVvZiBhdHRhY2htZW50LnVybF90aHVtYm5haWwgPT09ICdzdHJpbmcnID8gYXR0YWNobWVudC51cmxfdGh1bWJuYWlsIDogdW5kZWZpbmVkLFxuICAgICAgICB1cmxfZmlsZTogdHlwZW9mIGF0dGFjaG1lbnQudXJsX2ZpbGUgPT09ICdzdHJpbmcnID8gYXR0YWNobWVudC51cmxfZmlsZSA6IHVuZGVmaW5lZCxcbiAgICAgICAgcm9sZTogYXR0YWNobWVudC5yb2xlID09PSAnYXNzaXN0YW50JyA/ICdhc3Npc3RhbnQnIDogJ3VzZXInLFxuICAgICAgfVxuICAgIH0pXG59XG5cbi8qKiBFeHRyYWUgdGFza19pZHMgZGUgbG9zIHRvb2xfYXJncyBkZSBwZW5kaW5nX2FjdGlvbnMsIGN1YnJpZW5kbyBsYXMgZm9ybWFzIGNvbXVuZXM6XG4gKiAgLSBgeyB0YXNrX2lkIH1gIG8gYHsgaWQgfWBcbiAqICAtIGB7IHRhc2tfaWRzOiBbXSB9YFxuICogIC0gYHsgdGFza3M6IFt7IHRhc2tfaWR8aWQgfSwgLi4uXSB9YFxuICogIMOadGlsIHBhcmEgdG9vbHMgZGUgZWRpdC9hc3NpZ24vZGVsZXRlIGN1YW5kbyBsYSByZXNwdWVzdGEgZGVsIExMTSBubyBpbmNsdXllIFVSTHMgL3Rhc2tzLy4uLi9kZXRhaWwuICovXG5mdW5jdGlvbiBleHRyYWN0VGFza0lkc0Zyb21QZW5kaW5nQWN0aW9uc0FyZ3MocGVuZGluZ0FjdGlvbnM6IFBlbmRpbmdBY3Rpb25bXSk6IG51bWJlcltdIHtcbiAgY29uc3QgaWRzOiBudW1iZXJbXSA9IFtdXG4gIGNvbnN0IHB1c2hJZCA9IChyYXc6IHVua25vd24pID0+IHtcbiAgICBpZiAocmF3ID09IG51bGwpIHJldHVyblxuICAgIGNvbnN0IG4gPSBwYXJzZUludChTdHJpbmcocmF3KSwgMTApXG4gICAgaWYgKCFOdW1iZXIuaXNOYU4obikpIGlkcy5wdXNoKG4pXG4gIH1cbiAgcGVuZGluZ0FjdGlvbnMuZm9yRWFjaChhY3Rpb24gPT4ge1xuICAgIGlmICghYWN0aW9uIHx8IHR5cGVvZiBhY3Rpb24gIT09ICdvYmplY3QnKSByZXR1cm5cbiAgICBjb25zdCBhcmdzID0gYWN0aW9uLnRvb2xfYXJnc1xuICAgIGlmICghKGFyZ3MgJiYgdHlwZW9mIGFyZ3MgPT09ICdvYmplY3QnICYmICFBcnJheS5pc0FycmF5KGFyZ3MpKSkgcmV0dXJuXG4gICAgY29uc3QgcmVjID0gYXJncyBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxuICAgIHB1c2hJZChyZWMudGFza19pZCA/PyByZWMuaWQpXG4gICAgaWYgKEFycmF5LmlzQXJyYXkocmVjLnRhc2tfaWRzKSkge1xuICAgICAgcmVjLnRhc2tfaWRzLmZvckVhY2gocHVzaElkKVxuICAgIH1cbiAgICBpZiAoQXJyYXkuaXNBcnJheShyZWMudGFza3MpKSB7XG4gICAgICByZWMudGFza3MuZm9yRWFjaCh0ID0+IHtcbiAgICAgICAgaWYgKHQgJiYgdHlwZW9mIHQgPT09ICdvYmplY3QnICYmICFBcnJheS5pc0FycmF5KHQpKSB7XG4gICAgICAgICAgY29uc3QgdHJlYyA9IHQgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj5cbiAgICAgICAgICBwdXNoSWQodHJlYy50YXNrX2lkID8/IHRyZWMuaWQpXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfVxuICB9KVxuICByZXR1cm4gaWRzXG59XG5cbi8qKiB0YXNrX2lkIC8gdGFza19pZHMgZW4gcGVuZGluZ19hY3Rpb25zIGRlIGRlbGV0ZV8qIChsYSByZXNwdWVzdGEgcHVlZGUgbm8gaW5jbHVpciBVUkxzIC90YXNrcy/igKYvZGV0YWlsKS4gKi9cbmZ1bmN0aW9uIGV4dHJhY3RUYXNrSWRzRnJvbURlbGV0ZVBlbmRpbmdBY3Rpb25zKHBlbmRpbmdBY3Rpb25zOiBQZW5kaW5nQWN0aW9uW10pOiBudW1iZXJbXSB7XG4gIGNvbnN0IGlkczogbnVtYmVyW10gPSBbXVxuICBwZW5kaW5nQWN0aW9ucy5mb3JFYWNoKGFjdGlvbiA9PiB7XG4gICAgaWYgKCFhY3Rpb24gfHwgdHlwZW9mIGFjdGlvbiAhPT0gJ29iamVjdCcpIHJldHVyblxuICAgIGNvbnN0IGFyZ3MgPSBhY3Rpb24udG9vbF9hcmdzXG4gICAgaWYgKCEoYXJncyAmJiB0eXBlb2YgYXJncyA9PT0gJ29iamVjdCcgJiYgIUFycmF5LmlzQXJyYXkoYXJncykpKSByZXR1cm5cbiAgICBjb25zdCByZWMgPSBhcmdzIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+XG4gICAgaWYgKGFjdGlvbi50b29sX25hbWUgPT09ICdkZWxldGVfdGFzaycpIHtcbiAgICAgIGNvbnN0IHJhdyA9IHJlYy50YXNrX2lkID8/IHJlYy5pZFxuICAgICAgaWYgKHJhdyAhPSBudWxsKSB7XG4gICAgICAgIGNvbnN0IG4gPSBwYXJzZUludChTdHJpbmcocmF3KSwgMTApXG4gICAgICAgIGlmICghTnVtYmVyLmlzTmFOKG4pKSBpZHMucHVzaChuKVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAoYWN0aW9uLnRvb2xfbmFtZSA9PT0gJ2RlbGV0ZV90YXNrc19iYXRjaCcpIHtcbiAgICAgIGNvbnN0IGxpc3QgPSByZWMudGFza19pZHNcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KGxpc3QpKSB7XG4gICAgICAgIGxpc3QuZm9yRWFjaCh0aWQgPT4ge1xuICAgICAgICAgIGNvbnN0IG4gPSBwYXJzZUludChTdHJpbmcodGlkKSwgMTApXG4gICAgICAgICAgaWYgKCFOdW1iZXIuaXNOYU4obikpIGlkcy5wdXNoKG4pXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfVxuICB9KVxuICByZXR1cm4gaWRzXG59XG5cbmZ1bmN0aW9uIGV4dHJhY3RBZ2VudElkRnJvbUVkaXRBZ2VudFBlbmRpbmdBY3Rpb25zKHBlbmRpbmdBY3Rpb25zOiBQZW5kaW5nQWN0aW9uW10pOiBzdHJpbmcgfCBudWxsIHtcbiAgY29uc3QgZWRpdEFjdGlvbiA9IHBlbmRpbmdBY3Rpb25zLmZpbmQoYSA9PiAoYS50b29sX25hbWUgfHwgJycpLnRvTG93ZXJDYXNlKCkgPT09ICdlZGl0X2FnZW50JylcbiAgaWYgKFxuICAgICFlZGl0QWN0aW9uIHx8XG4gICAgIWVkaXRBY3Rpb24udG9vbF9hcmdzIHx8XG4gICAgdHlwZW9mIGVkaXRBY3Rpb24udG9vbF9hcmdzICE9PSAnb2JqZWN0JyB8fFxuICAgIEFycmF5LmlzQXJyYXkoZWRpdEFjdGlvbi50b29sX2FyZ3MpXG4gICkge1xuICAgIHJldHVybiBudWxsXG4gIH1cbiAgY29uc3QgcmVjID0gZWRpdEFjdGlvbi50b29sX2FyZ3MgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj5cbiAgY29uc3QgcmF3ID0gcmVjLmFnZW50X2lkID8/IHJlYy5hZ2VudElkXG4gIHJldHVybiByYXcgIT0gbnVsbCA/IFN0cmluZyhyYXcpIDogbnVsbFxufVxuXG5mdW5jdGlvbiBleHRyYWN0QWdlbnRJZEZyb21QZW5kaW5nQWN0aW9uc0J5VG9vbE5hbWUocGVuZGluZ0FjdGlvbnM6IFBlbmRpbmdBY3Rpb25bXSwgdG9vbE5hbWU6IHN0cmluZyk6IHN0cmluZyB8IG51bGwge1xuICBjb25zdCBhY3Rpb24gPSBwZW5kaW5nQWN0aW9ucy5maW5kKGEgPT4gKGEudG9vbF9uYW1lIHx8ICcnKS50b0xvd2VyQ2FzZSgpID09PSB0b29sTmFtZS50b0xvd2VyQ2FzZSgpKVxuICBpZiAoIWFjdGlvbiB8fCAhYWN0aW9uLnRvb2xfYXJncyB8fCB0eXBlb2YgYWN0aW9uLnRvb2xfYXJncyAhPT0gJ29iamVjdCcgfHwgQXJyYXkuaXNBcnJheShhY3Rpb24udG9vbF9hcmdzKSkge1xuICAgIHJldHVybiBudWxsXG4gIH1cbiAgY29uc3QgcmVjID0gYWN0aW9uLnRvb2xfYXJncyBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxuICBjb25zdCByYXcgPSByZWMuYWdlbnRfaWQgPz8gcmVjLmFnZW50SWQgPz8gcmVjLmlkXG4gIHJldHVybiByYXcgIT0gbnVsbCA/IFN0cmluZyhyYXcpIDogbnVsbFxufVxuXG4vKiogw5psdGltbyByZWN1cnNvIHNpIG5vIGhheSBsaW5rcyBuaSB0b29sX2FyZ3MgcGFyc2VhYmxlcyAocC4gZWouIFwiSUQgKio3NTk3MTA2KipcIikuICovXG5mdW5jdGlvbiBleHRyYWN0VGFza0lkc0Zyb21Bc3Npc3RhbnREZWxldGlvblRleHQodGV4dDogc3RyaW5nKTogbnVtYmVyW10ge1xuICBjb25zdCBsYWJlbGVkID0gdGV4dC5tYXRjaCgvXFxiSURcXHMqXFwqXFwqKFxcZCspXFwqXFwqL2kpXG4gIGlmIChsYWJlbGVkKSB7XG4gICAgY29uc3QgbiA9IHBhcnNlSW50KGxhYmVsZWRbMV0sIDEwKVxuICAgIHJldHVybiBOdW1iZXIuaXNOYU4obikgPyBbXSA6IFtuXVxuICB9XG4gIGNvbnN0IGJvbGQgPSB0ZXh0Lm1hdGNoKC9cXCpcXCooXFxkezUsfSlcXCpcXCovKVxuICBpZiAoYm9sZCkge1xuICAgIGNvbnN0IG4gPSBwYXJzZUludChib2xkWzFdLCAxMClcbiAgICByZXR1cm4gTnVtYmVyLmlzTmFOKG4pID8gW10gOiBbbl1cbiAgfVxuICByZXR1cm4gW11cbn1cblxuY29uc3QgdXNlU3RhYmxlQ2FsbGJhY2tzID0gKGF1dGhVc2VyOiBDT1JVc2VyKSA9PiB7XG4gIGNvbnN0IGN1cnJlbnRVc2VyID0gdXNlUmVmPENoYXRNZXNzYWdlVXNlcj4oe1xuICAgIGlkOiBhdXRoVXNlci5pZC50b1N0cmluZygpLFxuICAgIG5hbWU6IGF1dGhVc2VyLmZpcnN0TmFtZSxcbiAgICBhdmF0YXI6IGF1dGhVc2VyLnBpY3R1cmUsXG4gIH0pXG5cbiAgaWYgKFxuICAgIGN1cnJlbnRVc2VyLmN1cnJlbnQuaWQgIT09IGF1dGhVc2VyLmlkLnRvU3RyaW5nKCkgfHxcbiAgICBjdXJyZW50VXNlci5jdXJyZW50Lm5hbWUgIT09IGF1dGhVc2VyLmZpcnN0TmFtZSB8fFxuICAgIGN1cnJlbnRVc2VyLmN1cnJlbnQuYXZhdGFyICE9PSBhdXRoVXNlci5waWN0dXJlXG4gICkge1xuICAgIGN1cnJlbnRVc2VyLmN1cnJlbnQgPSB7XG4gICAgICBpZDogYXV0aFVzZXIuaWQudG9TdHJpbmcoKSxcbiAgICAgIG5hbWU6IGF1dGhVc2VyLmZpcnN0TmFtZSxcbiAgICAgIGF2YXRhcjogYXV0aFVzZXIucGljdHVyZSxcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBjdXJyZW50VXNlcjogY3VycmVudFVzZXIuY3VycmVudCxcbiAgfVxufVxuXG5jb25zdCBmaW5kTWVzc2FnZVdpdGhBcHByb3ZhbEJ5VGhyZWFkSWRzID0gKFxuICB0aHJlYWRJZHM6IHN0cmluZ1tdLFxuICBhY3RpdmVNZXNzYWdlczogQ2hhdE1lc3NhZ2VbXVxuKTogeyBtZXNzYWdlOiBDaGF0TWVzc2FnZTsgc2Vzc2lvbklkOiBzdHJpbmcgfSB8IG51bGwgPT4ge1xuICBjb25zdCBmcm9tQWN0aXZlVmlldyA9IGFjdGl2ZU1lc3NhZ2VzLmZpbmQobWVzc2FnZSA9PlxuICAgIG1lc3NhZ2UuYXBwcm92YWw/LnBlbmRpbmdfYWN0aW9ucz8uc29tZShhY3Rpb24gPT4gdGhyZWFkSWRzLmluY2x1ZGVzKGFjdGlvbi50aHJlYWRfaWQpKVxuICApXG4gIGlmIChmcm9tQWN0aXZlVmlldz8uYXBwcm92YWwpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbWVzc2FnZTogZnJvbUFjdGl2ZVZpZXcsXG4gICAgICBzZXNzaW9uSWQ6IGZyb21BY3RpdmVWaWV3LmFwcHJvdmFsLnNlc3Npb25faWQgfHwgYWN0aXZlVmlldy5nZXQoKSB8fCAnJyxcbiAgICB9XG4gIH1cblxuICBjb25zdCB7IG1lc3NhZ2VzIH0gPSB1c2VTZXNzaW9uc1N0b3JlLmdldFN0YXRlKClcbiAgY29uc3Qgc2Vzc2lvbkVudHJ5ID0gT2JqZWN0LmVudHJpZXMobWVzc2FnZXMpLmZpbmQoKFssIHNlc3Npb25NZXNzYWdlc10pID0+XG4gICAgc2Vzc2lvbk1lc3NhZ2VzLnNvbWUobWVzc2FnZSA9PlxuICAgICAgbWVzc2FnZS5hcHByb3ZhbD8ucGVuZGluZ19hY3Rpb25zPy5zb21lKGFjdGlvbiA9PiB0aHJlYWRJZHMuaW5jbHVkZXMoYWN0aW9uLnRocmVhZF9pZCkpXG4gICAgKVxuICApXG4gIGlmIChzZXNzaW9uRW50cnkpIHtcbiAgICBjb25zdCBbc2Vzc2lvbklkLCBzZXNzaW9uTWVzc2FnZXNdID0gc2Vzc2lvbkVudHJ5XG4gICAgY29uc3QgZm91bmQgPSBzZXNzaW9uTWVzc2FnZXMuZmluZChtZXNzYWdlID0+XG4gICAgICBtZXNzYWdlLmFwcHJvdmFsPy5wZW5kaW5nX2FjdGlvbnM/LnNvbWUoYWN0aW9uID0+IHRocmVhZElkcy5pbmNsdWRlcyhhY3Rpb24udGhyZWFkX2lkKSlcbiAgICApXG4gICAgaWYgKGZvdW5kPy5hcHByb3ZhbCkge1xuICAgICAgcmV0dXJuIHsgbWVzc2FnZTogZm91bmQsIHNlc3Npb25JZDogZm91bmQuYXBwcm92YWwuc2Vzc2lvbl9pZCB8fCBzZXNzaW9uSWQgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBudWxsXG59XG5cbmV4cG9ydCBjb25zdCB1c2VDaGF0TWFuYWdlciA9ICh7XG4gIGNoYXRJZDogaW5pdGlhbENoYXRJZCxcbiAgdXNlckluaXRpYWxNZXNzYWdlLFxuICBvbkVycm9yLFxuICBhZ2VudHMgPSBbXSxcbn06IFVzZUNoYXRNYW5hZ2VyUHJvcHMpID0+IHtcbiAgY29uc3QgeyB0IH0gPSB1c2VUKClcbiAgY29uc3QgYXV0aFVzZXIgPSB1c2VVc2VyKClcbiAgY29uc3Qge1xuICAgIHByb2plY3QsXG4gICAgc2V0UHJvamVjdCxcbiAgICBjbGllbnQsXG4gICAgc2V0Q2xpZW50LFxuICAgIHRhc2ssXG4gICAgc2V0VGFzayxcbiAgICBhZ2VudCxcbiAgICBpc1dlYlNlYXJjaEFjdGl2ZSxcbiAgICBpc0RlZXBTZWFyY2hBY3RpdmUsXG4gICAgaXNBdXRvQXBwcm92ZUFjdGl2ZSxcbiAgICBjaGlwc1Byb2plY3QsXG4gICAgc2V0Q2hpcHNQcm9qZWN0LFxuICB9ID0gdXNlR2xvYmFsQ29udGV4dCgpXG4gIGNvbnN0IGV2ZW50ID0gdXNlRXZlbnQoKVxuICBjb25zdCB7IGZldGNoUHJvamVjdHMgfSA9IHVzZVByb2plY3RzKClcbiAgY29uc3QgeyBjdXJyZW50VXNlciB9ID0gdXNlU3RhYmxlQ2FsbGJhY2tzKGF1dGhVc2VyKVxuICBjb25zdCB7IGdldFRhYlRhc2tEZWZhdWx0IH0gPSB1c2VUYWJUYXNrRGVmYXVsdCgpXG5cbiAgY29uc3QgY3VycmVudE1lc3NhZ2VJZCA9IHVzZVJlZih1dWlkdjQoKSlcbiAgY29uc3QgY3VycmVudFVzZXJRdWVzdGlvbiA9IHVzZVJlZjxzdHJpbmcgfCBudWxsPihudWxsKVxuICBjb25zdCBjdXJyZW50Q2hhdElkID0gdXNlUmVmKGluaXRpYWxDaGF0SWQgfHwgdXVpZHY0KCkpXG4gIGNvbnN0IHNldEFjdGl2ZUNoYXRJZCA9IHVzZUNoYXRzU3RvcmUoc3RhdGUgPT4gc3RhdGUuc2V0QWN0aXZlQ2hhdElkKVxuICBjb25zdCByZXBvcnRlZEV2ZW50ID0gdXNlUmVmKGZhbHNlKVxuICBjb25zdCBtZXNzYWdlc1JlZiA9IHVzZVJlZjxDaGF0TWVzc2FnZVtdPihbXSlcbiAgLyoqXG4gICAqIEd1YXJkYSBpbmZvIGRlbCDDumx0aW1vIGFwcHJvdmFsIG1hbnVhbCAoY3VhbmRvIGVsIHVzdWFyaW8gdGlwZWEgXCJzaVwiL1wibm9cIiBlbiBsdWdhclxuICAgKiBkZSBjbGlja2VhciBlbCBib3TDs24pLiBFbiBtYW51YWwgYXBwcm92YWwsIGBoYW5kbGVBcHByb3ZhbFJlcXVpcmVkYCByZXRvcm5hIGVhcmx5XG4gICAqIHNpbiBhZ3JlZ2FyIHVuIG1lbnNhamUgY29uIGBhcHByb3ZhbGAsIGFzw60gcXVlIGxhIGzDs2dpY2EgZGUgcmVmZXRjaCBlbiBgb25TdHJlYW1GaW5pc2hgXG4gICAqIG5vIGxvIGRldGVjdGEgdsOtYSBgcHJldmlvdXNNZXNzYWdlLmFwcHJvdmFsYC4gTG8gZ3VhcmRhbW9zIGFjw6EgcGFyYSBjb25zdW1pcmxvIGRlc3B1w6lzLlxuICAgKi9cbiAgY29uc3QgbGFzdE1hbnVhbEFwcHJvdmFsUmVmID0gdXNlUmVmPHtcbiAgICB0b29sTmFtZTogc3RyaW5nXG4gICAgdG9vbEFyZ3M6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgbnVsbFxuICB9IHwgbnVsbD4obnVsbClcbiAgLyoqIEV2aXRhIGR1cGxpY2FyIEFJX0NIQVRfSElUTCAvIEFJX0NIQVRfSElUTF9PUFRJT04gZW4gcHJlYXByb2JhY2lvbmVzIChtYW51YWwgbyBhdXRvKSBwb3IgbG90ZS4gKi9cbiAgY29uc3QgdHJhY2tlZE1hbnVhbEhpdGxLZXlzUmVmID0gdXNlUmVmPFNldDxzdHJpbmc+PihuZXcgU2V0KCkpXG4gIC8qKiBDb250ZXh0byBkZWwgbWVuc2FqZSBkZSBhcHJvYmFjacOzbiBwcmV2aW8gYWwgZWplY3V0YXIgY29udGludWUtdGhyZWFkLiAqL1xuICBjb25zdCBoaXRsRXhlY3V0aW9uQ29udGV4dFJlZiA9IHVzZVJlZjxIaXRsRXhlY3V0aW9uQ29udGV4dCB8IG51bGw+KG51bGwpXG4gIC8qKiBNZW5zYWplcyBhIHJlc3RhdXJhciBzaSBgcmV0cnlfY29tcGxldGlvbmAgZmFsbGEgYW50ZXMgZGUgcGVyc2lzdGlyIGVsIHJlZW1wbGF6by4gKi9cbiAgY29uc3QgcmV0cnlTbmFwc2hvdFJlZiA9IHVzZVJlZjxDaGF0TWVzc2FnZVtdIHwgbnVsbD4obnVsbClcbiAgY29uc3QgaXNQcm9jZXNzaW5nUmVmID0gdXNlUmVmKGZhbHNlKVxuICBjb25zdCBmaXJzdFRpbWVSZWYgPSB1c2VSZWYoZmFsc2UpXG4gIC8qKiBJZCBkZWwgcGxhY2Vob2xkZXIgZGVsIG1lbnNhamUgZW4gc3RyZWFtaW5nIGFjdGl2byAoc2kgaGF5KS4gKi9cbiAgY29uc3Qgc3RyZWFtaW5nUGxhY2Vob2xkZXJJZFJlZiA9IHVzZVJlZjxzdHJpbmcgfCBudWxsPihudWxsKVxuICAvKipcbiAgICogQ2hhdCBhbCBxdWUgcGVydGVuZWNlIGVsIHN0cmVhbSBhY3R1YWxtZW50ZSBhY3Rpdm8uIFNpIGNhbWJpYSBlbCBjaGF0XG4gICAqIG1pZW50cmFzIHVuIHN0cmVhbSBlc3TDoSBlbiB2dWVsbywgZGVzY2FydGFtb3MgbG9zIHRva2VucyByZXNpZHVhbGVzXG4gICAqIHF1ZSBwdWVkYW4gbGxlZ2FyIGFudGVzIGRlIHF1ZSBlbCBhYm9ydCBzZSBjb21wbGV0ZS5cbiAgICovXG4gIGNvbnN0IGFjdGl2ZVN0cmVhbUNoYXRJZFJlZiA9IHVzZVJlZjxzdHJpbmcgfCBudWxsPihudWxsKVxuICBjb25zdCBjbGVhclN0cmVhbVVpUmVmID0gdXNlUmVmPCgpID0+IHZvaWQ+KCgpID0+IHVuZGVmaW5lZClcbiAgY29uc3QgW2FjdGl2ZUxvYWRpbmdzLCBzZXRBY3RpdmVMb2FkaW5nc10gPSB1c2VTdGF0ZTxSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+Pih7fSlcbiAgLyoqXG4gICAqIFNlc2nDs24gYWN0dWFsbWVudGUgdmlzaWJsZS4gU2UgbWFudGllbmUgZW4gc3RhdGUgKG5vIHNvbG8gZW4gcmVmKSBwYXJhIHF1ZVxuICAgKiBlbCBtb3RvciBkZSBzdHJlYW1pbmcgcHVlZGEgbGVlciByZWFjdGl2YW1lbnRlIGxvcyBmbGFncyBkZSBFU1RBIHNlc2nDs25cbiAgICogZGVzZGUgZWwgc3RvcmUsIG1pZW50cmFzIG90cmFzIHNpZ3VlbiBnZW5lcmFuZG8gZW4gYmFja2dyb3VuZC5cbiAgICovXG4gIGNvbnN0IFthY3RpdmVTZXNzaW9uSWQsIHNldEFjdGl2ZVNlc3Npb25JZF0gPSB1c2VTdGF0ZTxzdHJpbmc+KGN1cnJlbnRDaGF0SWQuY3VycmVudClcbiAgLyoqIFRydWUgbWllbnRyYXMgZXN0YSBpbnN0YW5jaWEgZXN0w6kgbW9udGFkYSAoZXZpdGEgc2V0U3RhdGUgdHJhcyBkZXNtb250YXIpLiAqL1xuICBjb25zdCBpc01vdW50ZWRSZWYgPSB1c2VSZWYodHJ1ZSlcbiAgLyoqIEV2aXRhIHJlY29uY2lsaWFyIGRvcyB2ZWNlcyBlbCBtaXNtbyBlc3RhZG8gdGVybWluYWwgZGUgdW5hIHNlc2nDs24uICovXG4gIGNvbnN0IGxhc3RIYW5kbGVkVGVybWluYWxSZWYgPSB1c2VSZWY8c3RyaW5nIHwgbnVsbD4obnVsbClcblxuICBjb25zdCBpc1dlYlNlYXJjaEFjdGl2ZVJlZiA9IHVzZVJlZihpc1dlYlNlYXJjaEFjdGl2ZSlcbiAgY29uc3QgaXNEZWVwU2VhcmNoQWN0aXZlUmVmID0gdXNlUmVmKGlzRGVlcFNlYXJjaEFjdGl2ZSlcbiAgY29uc3QgaXNBdXRvQXBwcm92ZUFjdGl2ZVJlZiA9IHVzZVJlZihpc0F1dG9BcHByb3ZlQWN0aXZlKVxuICAvKiogRXZpdGEgY2xvc3VyZXMgb2Jzb2xldGFzIGN1YW5kbyBlbCBmb290ZXIgY29uc2VydmEgc2VuZE1lc3NhZ2UgZW50cmUgcmVuZGVycy4gKi9cbiAgY29uc3QgY29udGV4dFJlZiA9IHVzZVJlZih7IGNoaXBzUHJvamVjdCwgcHJvamVjdCwgY2xpZW50LCB0YXNrIH0pXG4gIGNvbnRleHRSZWYuY3VycmVudCA9IHsgY2hpcHNQcm9qZWN0LCBwcm9qZWN0LCBjbGllbnQsIHRhc2sgfVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaXNXZWJTZWFyY2hBY3RpdmVSZWYuY3VycmVudCA9IGlzV2ViU2VhcmNoQWN0aXZlXG4gICAgaXNEZWVwU2VhcmNoQWN0aXZlUmVmLmN1cnJlbnQgPSBpc0RlZXBTZWFyY2hBY3RpdmVcbiAgICBpc0F1dG9BcHByb3ZlQWN0aXZlUmVmLmN1cnJlbnQgPSBpc0F1dG9BcHByb3ZlQWN0aXZlXG4gIH0sIFtpc1dlYlNlYXJjaEFjdGl2ZSwgaXNEZWVwU2VhcmNoQWN0aXZlLCBpc0F1dG9BcHByb3ZlQWN0aXZlXSlcblxuICBjb25zdCB7XG4gICAgbG9hZGluZ01lc3NhZ2VzLFxuICAgIG1lc3NhZ2VzLFxuICAgIGlzTG9hZGluZ01vcmVNZXNzYWdlcyxcbiAgICBsb2FkTWVzc2FnZXMsXG4gICAgYWRkTWVzc2FnZSxcbiAgICByZW1vdmVNZXNzYWdlLFxuICAgIHJlcGxhY2VNZXNzYWdlcyxcbiAgICBoYW5kbGVTY3JvbGwsXG4gIH0gPSB1c2VDaGF0TWVzc2FnZXMoe1xuICAgIGNoYXRJZDogaW5pdGlhbENoYXRJZCB8fCBjdXJyZW50Q2hhdElkLmN1cnJlbnQsXG4gICAgY3VycmVudFVzZXIsXG4gICAgdXNlckluaXRpYWxNZXNzYWdlLFxuICAgIG9uRXJyb3IsXG4gICAgYWdlbnRzLFxuICB9KVxuXG4gIG1lc3NhZ2VzUmVmLmN1cnJlbnQgPSBtZXNzYWdlc1xuXG4gIC8qKlxuICAgKiBFc2NyaWJlIHVuIG1lbnNhamUgZW4gZWwgc3RvcmUgcG9yLXNlc2nDs24geSwgc2kgbGEgc2VzacOzbiBlcyBsYSBhY3RpdmEsXG4gICAqIHRhbWJpw6luIGVuIGxhIHZpc3RhIGxvY2FsLiBQZXJtaXRlIHF1ZSBzZXNpb25lcyBlbiBiYWNrZ3JvdW5kIGFjdW11bGVuIHN1XG4gICAqIHJlc3VsdGFkbyBzaW4gcGlzYXIgZWwgY2hhdCBxdWUgZWwgdXN1YXJpbyBlc3TDoSBtaXJhbmRvLlxuICAgKi9cbiAgY29uc3QgY29tbWl0VG9TZXNzaW9uID0gdXNlQ2FsbGJhY2soXG4gICAgKHNlc3Npb25JZDogc3RyaW5nLCBtZXNzYWdlOiBDaGF0TWVzc2FnZSkgPT4ge1xuICAgICAgdXNlU2Vzc2lvbnNTdG9yZS5nZXRTdGF0ZSgpLmFkZE1lc3NhZ2Uoc2Vzc2lvbklkLCBtZXNzYWdlKVxuICAgICAgaWYgKGlzTW91bnRlZFJlZi5jdXJyZW50ICYmIGFjdGl2ZVZpZXcuaXMoc2Vzc2lvbklkKSkge1xuICAgICAgICBhZGRNZXNzYWdlKG1lc3NhZ2UpXG4gICAgICB9XG4gICAgfSxcbiAgICBbYWRkTWVzc2FnZV1cbiAgKVxuXG4gIGNvbnN0IGRyb3BGcm9tU2Vzc2lvbiA9IHVzZUNhbGxiYWNrKFxuICAgIChzZXNzaW9uSWQ6IHN0cmluZywgbWVzc2FnZUlkOiBzdHJpbmcpID0+IHtcbiAgICAgIHVzZVNlc3Npb25zU3RvcmUuZ2V0U3RhdGUoKS5yZW1vdmVNZXNzYWdlKHNlc3Npb25JZCwgbWVzc2FnZUlkKVxuICAgICAgaWYgKGlzTW91bnRlZFJlZi5jdXJyZW50ICYmIGFjdGl2ZVZpZXcuaXMoc2Vzc2lvbklkKSkge1xuICAgICAgICByZW1vdmVNZXNzYWdlKG1lc3NhZ2VJZClcbiAgICAgIH1cbiAgICB9LFxuICAgIFtyZW1vdmVNZXNzYWdlXVxuICApXG5cbiAgLyoqIExpbXBpYSBlbCB0YWlsIGVuIHZ1ZWxvIGRlIHVuYSBzZXNpw7NuICh0cmFzIHRlcm1pbmFyOyBlbCBiYWNrZW5kIHBhc2EgYSBzZXIgZnVlbnRlKS4gKi9cbiAgY29uc3QgY2xlYXJTZXNzaW9uVGFpbCA9IHVzZUNhbGxiYWNrKChzZXNzaW9uSWQ6IHN0cmluZykgPT4ge1xuICAgIHVzZVNlc3Npb25zU3RvcmUuZ2V0U3RhdGUoKS5zZXRNZXNzYWdlcyhzZXNzaW9uSWQsIFtdKVxuICB9LCBbXSlcblxuICAvLyBSZWdpc3RyYXIgbGEgc2VzacOzbiB2aXNpYmxlIGVuIGVsIHRyYWNrZXIgZ2xvYmFsIHBhcmEgcXVlIGxvcyBjYWxsYmFja3MgZGVsXG4gIC8vIG1vdG9yIChxdWUgcHVlZGVuIHBlcnRlbmVjZXIgYSB1bmEgaW5zdGFuY2lhIHlhIGRlc21vbnRhZGEpIHNlcGFuIGN1w6FsIGVzIGxhXG4gIC8vIHNlc2nDs24gYWN0aXZhIGFjdHVhbC5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBhY3RpdmVWaWV3LnNldChhY3RpdmVTZXNzaW9uSWQpXG4gIH0sIFthY3RpdmVTZXNzaW9uSWRdKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaXNNb3VudGVkUmVmLmN1cnJlbnQgPSB0cnVlXG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGlzTW91bnRlZFJlZi5jdXJyZW50ID0gZmFsc2VcbiAgICAgIGlmIChhY3RpdmVWaWV3LmlzKGN1cnJlbnRDaGF0SWQuY3VycmVudCkpIHtcbiAgICAgICAgYWN0aXZlVmlldy5zZXQobnVsbClcbiAgICAgIH1cbiAgICB9XG4gIH0sIFtdKVxuXG4gIC8vIFJlY29uY2lsaWFjacOzbjogc2kgbGEgc2VzacOzbiBhY3RpdmEgdGVybWluYSAoY29tcGxldGUvZXJyb3IpIHBlcm8gZWwgc3RvcmVcbiAgLy8gcG9yLXNlc2nDs24gdG9kYXbDrWEgdGllbmUgdW4gcGxhY2Vob2xkZXIgZGUgc3RyZWFtaW5nLCByZWZyZXNjYW1vcyBkZXNkZVxuICAvLyBlbCBiYWNrZW5kLiBVc2Ftb3MgZWwgc3RvcmUgKG5vIG1lc3NhZ2VzUmVmKTogaGFuZGxlU3RyZWFtRmluaXNoIGxpbXBpYSBlbFxuICAvLyBwbGFjZWhvbGRlciBhaMOtIGRlIGZvcm1hIHPDrW5jcm9uYTsgbWVzc2FnZXNSZWYgcHVlZGUgcXVlZGFyIHN0YWxlIHVuIHJlbmRlclxuICAvLyBwb3JxdWUgc2V0U3RhdHVzIChadXN0YW5kKSB5IHJlbW92ZU1lc3NhZ2UgKFJlYWN0KSBubyBiYXRjaGFuIGp1bnRvcy5cbiAgLy8gYGNhbmNlbGxlZGAgcXVlZGEgYWZ1ZXJhOiBlbCBzdG9wIHlhIHJlY29uY2lsaWEgbG9jYWwgKHBhcmNpYWwgKyBidXJidWphIGRlXG4gIC8vIGNhbmNlbGFkbykgeSByZWNhcmdhciBhY8OhIG1vc3RyYWJhIGxhIHBhbnRhbGxhIGRlIGNhcmdhIGRlbCBjaGF0IGVudGVyby5cbiAgY29uc3QgYWN0aXZlU2Vzc2lvbk1ldGEgPSB1c2VTZXNzaW9uTWV0YShhY3RpdmVTZXNzaW9uSWQpXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3Qgc3RhdHVzID0gYWN0aXZlU2Vzc2lvbk1ldGE/LnN0YXR1c1xuICAgIGlmICghc3RhdHVzKSByZXR1cm5cbiAgICBjb25zdCBpc1Rlcm1pbmFsID0gc3RhdHVzID09PSAnY29tcGxldGUnIHx8IHN0YXR1cyA9PT0gJ2Vycm9yJ1xuICAgIGlmICghaXNUZXJtaW5hbCkgcmV0dXJuXG4gICAgY29uc3Qga2V5ID0gYCR7YWN0aXZlU2Vzc2lvbklkfToke3N0YXR1c306JHthY3RpdmVTZXNzaW9uTWV0YT8uZmluaXNoZWRBdCA/PyAnJ31gXG4gICAgaWYgKGxhc3RIYW5kbGVkVGVybWluYWxSZWYuY3VycmVudCA9PT0ga2V5KSByZXR1cm5cbiAgICBsYXN0SGFuZGxlZFRlcm1pbmFsUmVmLmN1cnJlbnQgPSBrZXlcblxuICAgIGNvbnN0IHRhaWwgPSB1c2VTZXNzaW9uc1N0b3JlLmdldFN0YXRlKCkuZ2V0TWVzc2FnZXMoYWN0aXZlU2Vzc2lvbklkKVxuICAgIGNvbnN0IGhhc1N0YWxlUGxhY2Vob2xkZXIgPSB0YWlsLnNvbWUobXNnID0+IGlzU3RyZWFtaW5nUGxhY2Vob2xkZXJNZXNzYWdlSWQobXNnLmlkKSlcbiAgICBpZiAoaGFzU3RhbGVQbGFjZWhvbGRlcikge1xuICAgICAgbG9hZE1lc3NhZ2VzKHsgZm9yY2U6IHRydWUgfSlcbiAgICB9XG4gIH0sIFthY3RpdmVTZXNzaW9uTWV0YT8uc3RhdHVzLCBhY3RpdmVTZXNzaW9uTWV0YT8uZmluaXNoZWRBdCwgYWN0aXZlU2Vzc2lvbklkLCBsb2FkTWVzc2FnZXNdKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgY3VzdG9tRXZlbnQgPSBuZXcgQ3VzdG9tRXZlbnQoJ2NoYXQtbG9hZGluZy1tZXNzYWdlcy1jaGFuZ2VkJywge1xuICAgICAgZGV0YWlsOiB7IGxvYWRpbmdNZXNzYWdlcyB9LFxuICAgIH0pXG4gICAgZG9jdW1lbnQuZGlzcGF0Y2hFdmVudChjdXN0b21FdmVudClcbiAgfSwgW2xvYWRpbmdNZXNzYWdlc10pXG5cbiAgY29uc3QgcHJldmlvdXNJbml0aWFsQ2hhdElkUmVmID0gdXNlUmVmPHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQ+KGluaXRpYWxDaGF0SWQpXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBwcmV2aW91c0luaXRpYWxDaGF0SWQgPSBwcmV2aW91c0luaXRpYWxDaGF0SWRSZWYuY3VycmVudFxuICAgIHByZXZpb3VzSW5pdGlhbENoYXRJZFJlZi5jdXJyZW50ID0gaW5pdGlhbENoYXRJZFxuXG4gICAgLy8gQ2hhdCBudWV2byAvIGhvbWU6IGluaXRpYWxDaGF0SWQgcGFzYSBhIG51bGwsIGFzw60gcXVlIGxhIHJhbWEgZGUgYWJham8gbm9cbiAgICAvLyBhcGxpY2EuIEhheSBxdWUgcm90YXIgYSB1bmEgc2VzacOzbiBudWV2YSBpZ3VhbDogc2kgc2VndWltb3MgYXB1bnRhbmRvIGEgbGFcbiAgICAvLyBhbnRlcmlvciwgYGFjdGl2ZVZpZXdgIGxhIHNpZ3VlIG1hcmNhbmRvIGNvbW8gYWN0aXZhIHkgY3VhbmRvIHRlcm1pbmEgbm8gc2VcbiAgICAvLyBub3RpZmljYSAoeSBzdSByZXNwdWVzdGEgc2UgY29tbWl0ZWEgc29icmUgbGEgdmlzdGEgbnVldmEpLiBFbCDDoXJib2wgbm9cbiAgICAvLyByZW1vbnRhIGVuIGVzdGUgZmx1am8gKG5vIGhheSBga2V5YCkgeSBuYWRpZSBjb25zdW1lIGByZXNldENoYXRgLlxuICAgIGlmICghaW5pdGlhbENoYXRJZCAmJiBwcmV2aW91c0luaXRpYWxDaGF0SWQpIHtcbiAgICAgIGN1cnJlbnRDaGF0SWQuY3VycmVudCA9IHV1aWR2NCgpXG4gICAgICBzZXRBY3RpdmVTZXNzaW9uSWQoY3VycmVudENoYXRJZC5jdXJyZW50KVxuICAgICAgY3VycmVudE1lc3NhZ2VJZC5jdXJyZW50ID0gdXVpZHY0KClcbiAgICAgIGN1cnJlbnRVc2VyUXVlc3Rpb24uY3VycmVudCA9IG51bGxcbiAgICAgIHJlcG9ydGVkRXZlbnQuY3VycmVudCA9IGZhbHNlXG4gICAgICBpc1Byb2Nlc3NpbmdSZWYuY3VycmVudCA9IGZhbHNlXG4gICAgICBzdHJlYW1pbmdQbGFjZWhvbGRlcklkUmVmLmN1cnJlbnQgPSBudWxsXG4gICAgICBhY3RpdmVTdHJlYW1DaGF0SWRSZWYuY3VycmVudCA9IG51bGxcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmIChpbml0aWFsQ2hhdElkICYmIGluaXRpYWxDaGF0SWQgIT09IGN1cnJlbnRDaGF0SWQuY3VycmVudCkge1xuICAgICAgLy8gTk8gYWJvcnRhbW9zIGVsIHN0cmVhbSBhbnRlcmlvcjogcHVlZGUgc2VndWlyIGdlbmVyYW5kbyBlbiBiYWNrZ3JvdW5kLlxuICAgICAgLy8gU29sbyBjYW1iaWFtb3MgZGUgc2VzacOzbiBhY3RpdmE7IGVsIG1vdG9yIHJ1dGVhIGNhZGEgc3RyZWFtIHBvciBzdVxuICAgICAgLy8gc2Vzc2lvbklkLCBhc8OtIHF1ZSBsb3MgdG9rZW5zIGRlIGxhIHNlc2nDs24gcHJldmlhIHNpZ3VlbiBhcGxpY8OhbmRvc2UgYVxuICAgICAgLy8gRVNBIHNlc2nDs24gKHN0b3JlKSwgbm8gYSBsYSBudWV2YS5cblxuICAgICAgLy8gTGltcGlhciBjb250ZXh0byBnbG9iYWwgYWwgY2FtYmlhciBkZSBjb252ZXJzYWNpw7NuXG4gICAgICBzZXRQcm9qZWN0KG51bGwpXG4gICAgICBzZXRDbGllbnQ/LihudWxsKVxuICAgICAgc2V0Q2hpcHNQcm9qZWN0KG51bGwpXG4gICAgICBzZXRUYXNrKG51bGwpXG5cbiAgICAgIGN1cnJlbnRDaGF0SWQuY3VycmVudCA9IGluaXRpYWxDaGF0SWRcbiAgICAgIHNldEFjdGl2ZVNlc3Npb25JZChpbml0aWFsQ2hhdElkKVxuICAgICAgY3VycmVudE1lc3NhZ2VJZC5jdXJyZW50ID0gdXVpZHY0KClcbiAgICAgIGN1cnJlbnRVc2VyUXVlc3Rpb24uY3VycmVudCA9IG51bGxcbiAgICAgIHJlcG9ydGVkRXZlbnQuY3VycmVudCA9IGZhbHNlXG4gICAgICAvLyBpc1Byb2Nlc3NpbmdSZWYgcmVmbGVqYSBzaSBsYSBzZXNpw7NuIEFDVElWQSBlc3TDoSBvY3VwYWRhLiBTaSBsYSBzZXNpw7NuXG4gICAgICAvLyBhIGxhIHF1ZSBlbnRyYW1vcyBzaWd1ZSBnZW5lcmFuZG8gZW4gYmFja2dyb3VuZCwgcXVlZGEgYmxvcXVlYWRhOyBzaSBubyxcbiAgICAgIC8vIHNlIGhhYmlsaXRhIGVsIGVudsOtbyBhdW5xdWUgb3RyYXMgc2VzaW9uZXMgc2lnYW4gZ2VuZXJhbmRvLlxuICAgICAgaXNQcm9jZXNzaW5nUmVmLmN1cnJlbnQgPSBzZXNzaW9uU3RyZWFtTWFuYWdlci5pc0FjdGl2ZShpbml0aWFsQ2hhdElkKVxuICAgICAgc3RyZWFtaW5nUGxhY2Vob2xkZXJJZFJlZi5jdXJyZW50ID0gbnVsbFxuICAgICAgYWN0aXZlU3RyZWFtQ2hhdElkUmVmLmN1cnJlbnQgPSBudWxsXG5cbiAgICAgIC8vIGxvYWRNZXNzYWdlcyBsbyBkaXNwYXJhIHVzZUNoYXRNZXNzYWdlcyBhbCBjYW1iaWFyIGNoYXRJZCAoY29uIGNhY2hlIGVuIG1lbW9yaWEpLlxuICAgIH1cbiAgfSwgW2luaXRpYWxDaGF0SWQsIHByb2plY3QsIHNldFByb2plY3QsIHNldENsaWVudCwgc2V0Q2hpcHNQcm9qZWN0LCBzZXRUYXNrXSlcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIHNldEFjdGl2ZUNoYXRJZChpbml0aWFsQ2hhdElkIHx8IG51bGwpXG4gIH0sIFtpbml0aWFsQ2hhdElkLCBzZXRBY3RpdmVDaGF0SWRdKVxuXG4gIGNvbnN0IGhhbmRsZVN0cmVhbUVycm9yID0gdXNlQ2FsbGJhY2soXG4gICAgKGN0eDogU3RyZWFtQ29udGV4dCwgZXJyb3JNZXNzYWdlPzogc3RyaW5nLCBlcnJvclJhd01lc3NhZ2U/OiBzdHJpbmcpID0+IHtcbiAgICAgIGNvbnN0IHsgc2Vzc2lvbklkLCBtZXNzYWdlSWQsIHBsYWNlaG9sZGVySWQgfSA9IGN0eFxuICAgICAgY29uc3QgaXNBY3RpdmUgPSBhY3RpdmVWaWV3LmlzKHNlc3Npb25JZClcblxuICAgICAgc2Vzc2lvblN0cmVhbWluZ1RleHQuY2xlYXIoc2Vzc2lvbklkKVxuICAgICAgZHJvcEZyb21TZXNzaW9uKHNlc3Npb25JZCwgcGxhY2Vob2xkZXJJZClcblxuICAgICAgY29uc3QgcmV0cnlTbmFwc2hvdCA9IHJldHJ5U25hcHNob3RSZWYuY3VycmVudFxuICAgICAgaWYgKHJldHJ5U25hcHNob3QpIHtcbiAgICAgICAgcmV0cnlTbmFwc2hvdFJlZi5jdXJyZW50ID0gbnVsbFxuICAgICAgICBtZXNzYWdlc1JlZi5jdXJyZW50ID0gcmV0cnlTbmFwc2hvdFxuICAgICAgICByZXBsYWNlTWVzc2FnZXMocmV0cnlTbmFwc2hvdClcbiAgICAgICAgaWYgKGlzQWN0aXZlKSB7XG4gICAgICAgICAgY2xlYXJTdHJlYW1VaVJlZi5jdXJyZW50KClcbiAgICAgICAgICBzdHJlYW1pbmdQbGFjZWhvbGRlcklkUmVmLmN1cnJlbnQgPSBudWxsXG4gICAgICAgICAgYWN0aXZlU3RyZWFtQ2hhdElkUmVmLmN1cnJlbnQgPSBudWxsXG4gICAgICAgICAgaXNQcm9jZXNzaW5nUmVmLmN1cnJlbnQgPSBmYWxzZVxuICAgICAgICB9XG4gICAgICAgIGRvY3VtZW50LmRpc3BhdGNoRXZlbnQoXG4gICAgICAgICAgbmV3IEN1c3RvbUV2ZW50KCdzbmFja2Jhci1ldmVudCcsIHtcbiAgICAgICAgICAgIGRldGFpbDogeyBzaG93OiB0cnVlLCBzZXZlcml0eTogJ2Vycm9yJywgbWVzc2FnZTogdCgnY2hhdC5lcnJvcicpIH0sXG4gICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgaWYgKGlzQWN0aXZlKSB7XG4gICAgICAgIGNsZWFyU3RyZWFtVWlSZWYuY3VycmVudCgpXG4gICAgICAgIHN0cmVhbWluZ1BsYWNlaG9sZGVySWRSZWYuY3VycmVudCA9IG51bGxcbiAgICAgICAgYWN0aXZlU3RyZWFtQ2hhdElkUmVmLmN1cnJlbnQgPSBudWxsXG4gICAgICAgIGlzUHJvY2Vzc2luZ1JlZi5jdXJyZW50ID0gZmFsc2VcbiAgICAgIH1cblxuICAgICAgY29uc3QgaXNBY2Nlc3NEZW5pZWQgPSBlcnJvck1lc3NhZ2UgPT09IFwiQWNjZXNzIGRlbmllZDogWW91IGRvbid0IGhhdmUgcGVybWlzc2lvbiB0byBhY2Nlc3MgdGhpcyBhZ2VudFwiXG4gICAgICBjb25zdCBpc1Byb21wdFRvb0xvbmcgPVxuICAgICAgICBlcnJvck1lc3NhZ2UgPT09ICdpbnZhbGlkX3JlcXVlc3RfZXJyb3InICYmIGVycm9yUmF3TWVzc2FnZT8uaW5jbHVkZXMoJ3Byb21wdCBpcyB0b28gbG9uZycpXG4gICAgICBjb25zdCBtZXNzYWdlID0gaXNBY2Nlc3NEZW5pZWRcbiAgICAgICAgPyB0KCdjaGF0LmVycm9yQWNjZXNzRGVuaWVkJylcbiAgICAgICAgOiBpc1Byb21wdFRvb0xvbmdcbiAgICAgICAgICA/IHQoJ2NoYXQuZXJyb3JQcm9tcHRUb29Mb25nJywgeyB1c2VkOiBlcnJvclJhd01lc3NhZ2U/Lm1hdGNoKC8oXFxkKykgdG9rZW5zLyk/LlsxXSA/PyAnJyB9KVxuICAgICAgICAgIDogdCgnY2hhdC5lcnJvcicpXG5cbiAgICAgIGNvbW1pdFRvU2Vzc2lvbihzZXNzaW9uSWQsIHtcbiAgICAgICAgaWQ6IGBhbnN3ZXItJHttZXNzYWdlSWR9YCxcbiAgICAgICAgbWVzc2FnZSxcbiAgICAgICAgaXNFcnJvcjogdHJ1ZSxcbiAgICAgICAgLy8gQ2hpcCBcIlJlaW50ZW50YXJcIiBzb2xvIGVuIGVsIGVycm9yIGdlbsOpcmljbyAocC4gZWouIDUwMCk7IG5vIGFwbGljYSBhIGFjY2VzcyBkZW5pZWQgbmkgcHJvbXB0IHRvbyBsb25nLlxuICAgICAgICAuLi4oIWlzQWNjZXNzRGVuaWVkICYmICFpc1Byb21wdFRvb0xvbmcgPyB7IHN1Z2dlc3Rpb25zOiBbdCgnY2hhdC5yZXRyeScpXSB9IDoge30pLFxuICAgICAgICBkYXRlOiBuZXcgRGF0ZSgpLFxuICAgICAgICB1c2VyOiB7IGlkOiAnYXNzaXN0YW50JywgbmFtZTogJ0Fzc2lzdGFudCcgfSxcbiAgICAgICAgcm9sZTogQ2hhdEhpc3RvcnlSb2xlLkFTU0lTVEFOVCxcbiAgICAgIH0pXG4gICAgICBjbGVhclNlc3Npb25UYWlsKHNlc3Npb25JZClcblxuICAgICAgaWYgKCFpc0FjdGl2ZSkge1xuICAgICAgICBnZXRDaGF0c1N0b3JlU3RhdGUoKS5tYXJrQ2hhdEFzVW5yZWFkKHNlc3Npb25JZClcbiAgICAgICAgbm90aWZ5U2Vzc2lvbkZpbmlzaGVkSW5CYWNrZ3JvdW5kKHNlc3Npb25JZCwgJ2Vycm9yJylcbiAgICAgIH1cbiAgICB9LFxuICAgIFtjb21taXRUb1Nlc3Npb24sIGRyb3BGcm9tU2Vzc2lvbiwgY2xlYXJTZXNzaW9uVGFpbCwgcmVwbGFjZU1lc3NhZ2VzLCB0XVxuICApXG5cbiAgY29uc3QgaGFuZGxlU3RyZWFtVXBkYXRlID0gdXNlQ2FsbGJhY2soXG4gICAgKGN0eDogU3RyZWFtQ29udGV4dCwgY29udGVudDogc3RyaW5nKSA9PiB7XG4gICAgICBjb25zdCB7IHNlc3Npb25JZCwgcGxhY2Vob2xkZXJJZCB9ID0gY3R4XG5cbiAgICAgIC8vIEFzZWd1cmFtb3MgZWwgcGxhY2Vob2xkZXIgdW5hIMO6bmljYSB2ZXogcG9yIHN0cmVhbSwgdGFudG8gZW4gZWwgc3RvcmVcbiAgICAgIC8vIGRlIGxhIHNlc2nDs24gY29tbyBlbiBsYSB2aXN0YSBzaSBlcyBsYSBhY3RpdmEuIEVsIHRleHRvIGVuIHZpdm8gdmlhamFcbiAgICAgIC8vIHBvciBzZXNzaW9uU3RyZWFtaW5nVGV4dCAoZXh0ZXJubyksIHNpbiByZS1yZW5kZXIgZGVsIMOhcmJvbCBjb21wbGV0by5cbiAgICAgIGNvbnN0IHBsYWNlaG9sZGVyRXhpc3RzID0gdXNlU2Vzc2lvbnNTdG9yZVxuICAgICAgICAuZ2V0U3RhdGUoKVxuICAgICAgICAuZ2V0TWVzc2FnZXMoc2Vzc2lvbklkKVxuICAgICAgICAuc29tZShtc2cgPT4gbXNnLmlkID09PSBwbGFjZWhvbGRlcklkKVxuXG4gICAgICBpZiAoIXBsYWNlaG9sZGVyRXhpc3RzKSB7XG4gICAgICAgIHNlc3Npb25TdHJlYW1pbmdUZXh0LnN0YXJ0KHNlc3Npb25JZCwgcGxhY2Vob2xkZXJJZClcbiAgICAgICAgY29tbWl0VG9TZXNzaW9uKHNlc3Npb25JZCwge1xuICAgICAgICAgIGlkOiBwbGFjZWhvbGRlcklkLFxuICAgICAgICAgIG1lc3NhZ2U6ICcnLFxuICAgICAgICAgIGRhdGU6IG5ldyBEYXRlKCksXG4gICAgICAgICAgdXNlcjogeyBpZDogJ2Fzc2lzdGFudCcsIG5hbWU6ICdBc3Npc3RhbnQnIH0sXG4gICAgICAgICAgcm9sZTogQ2hhdEhpc3RvcnlSb2xlLkFTU0lTVEFOVCxcbiAgICAgICAgfSlcbiAgICAgIH1cblxuICAgICAgaWYgKGFjdGl2ZVZpZXcuaXMoc2Vzc2lvbklkKSkge1xuICAgICAgICBzdHJlYW1pbmdQbGFjZWhvbGRlcklkUmVmLmN1cnJlbnQgPSBwbGFjZWhvbGRlcklkXG4gICAgICAgIGFjdGl2ZVN0cmVhbUNoYXRJZFJlZi5jdXJyZW50ID0gc2Vzc2lvbklkXG4gICAgICB9XG5cbiAgICAgIHNlc3Npb25TdHJlYW1pbmdUZXh0LnNldFRleHQoc2Vzc2lvbklkLCBwbGFjZWhvbGRlcklkLCBjb250ZW50KVxuICAgIH0sXG4gICAgW2NvbW1pdFRvU2Vzc2lvbl1cbiAgKVxuXG4gIGNvbnN0IGhhbmRsZVN0cmVhbUZpbmlzaCA9IHVzZUNhbGxiYWNrKFxuICAgIGFzeW5jIChcbiAgICAgIGN0eDogU3RyZWFtQ29udGV4dCxcbiAgICAgIGNvbnRlbnQ6IHN0cmluZyxcbiAgICAgIHNvdXJjZXM6IGFueSxcbiAgICAgIG1lbW9yeVNlc3Npb25JZDogc3RyaW5nLFxuICAgICAgcmF3QXR0YWNobWVudHM/OiBhbnlbXSB8IG51bGwsXG4gICAgICBzdWdnZXN0aW9ucz86IHN0cmluZ1tdIHwgbnVsbCxcbiAgICAgIGNvbXBsZXRlZEFnZW50SWQ/OiBzdHJpbmcgfCBudWxsLFxuICAgICAgLyoqIFBvc2ljaW9uYWw6IG1hc3RlciBubyBsbyBjb25zdW1lLCBwZXJvIGByZWFzb25pbmdgIHZpZW5lIGRlc3B1w6lzLiAqL1xuICAgICAgX3Jlc29sdmVkQ29udGV4dD86IGFueSxcbiAgICAgIHJlYXNvbmluZz86IFJlYXNvbmluZ1RyYWNlUGF5bG9hZCB8IG51bGxcbiAgICApID0+IHtcbiAgICAgIGNvbnN0IHsgc2Vzc2lvbklkLCBwbGFjZWhvbGRlcklkIH0gPSBjdHhcbiAgICAgIGNvbnN0IGlzQWN0aXZlID0gYWN0aXZlVmlldy5pcyhzZXNzaW9uSWQpXG4gICAgICByZXRyeVNuYXBzaG90UmVmLmN1cnJlbnQgPSBudWxsXG5cbiAgICAgIGNvbnN0IHRlbXBNZXNzYWdlSWQgPSBwbGFjZWhvbGRlcklkXG4gICAgICAvLyBFbCBwbGFjZWhvbGRlciBzYWxlIGRlbCBzdG9yZSBwb3Itc2VzacOzbiB5YTogZWwgZWZlY3RvIGRlIHJlY29uY2lsaWFjacOzblxuICAgICAgLy8gbG8gdXNhIHBhcmEgZGV0ZWN0YXIgcmVzcHVlc3RhcyBodcOpcmZhbmFzIHkgZGUgYWPDoSBhbCBjb21taXQgcHVlZGUgaGFiZXJcbiAgICAgIC8vIHVuIGF3YWl0LiBMYSB2aXN0YSBsb2NhbCBsbyBzdWVsdGEgbcOhcyBhYmFqbywganVudG8gYWwgY29tbWl0LlxuICAgICAgdXNlU2Vzc2lvbnNTdG9yZS5nZXRTdGF0ZSgpLnJlbW92ZU1lc3NhZ2Uoc2Vzc2lvbklkLCB0ZW1wTWVzc2FnZUlkKVxuICAgICAgY29uc3QgYXR0YWNobWVudHMgPSBub3JtYWxpemVBc3Npc3RhbnRBdHRhY2htZW50cyhyYXdBdHRhY2htZW50cylcblxuICAgICAgLy8gRWwgdHJhY2UgYWN1bXVsYWRvIGVuIHZpdm8gZXN0w6Ega2V5ZWQgcG9yIGVsIHBsYWNlaG9sZGVyOyBsbyBtb3ZlbW9zIGFsXG4gICAgICAvLyBpZCBkZWZpbml0aXZvIHBhcmEgcXVlIGVsIGJsb3F1ZSBkZSByYXpvbmFtaWVudG8gc29icmV2aXZhIGFsIHN3YXAuXG4gICAgICBjb25zdCBmaW5hbE1lc3NhZ2VJZCA9IGBhbnN3ZXItJHttZW1vcnlTZXNzaW9uSWR9YFxuICAgICAgLy8gUHJlZmVyaXIgZWwgc25hcHNob3QgZW4gdml2byAobmFycmFjacOzbiBhbmNsYWRhIGFsIGluaWNpbykgc29icmUgZWxcbiAgICAgIC8vIGBjb21wbGV0ZWAgZGVsIGJhY2ssIHF1ZSBzdWVsZSBtYW5kYXIgZXNhIG5hcnJhY2nDs24gYWwgZmluYWwuXG4gICAgICBjb25zdCBmaW5hbFRyYWNlID0gcmVhc29uaW5nVHJhY2VGb3IodGVtcE1lc3NhZ2VJZCkgPz8gbWFwUmVhc29uaW5nVHJhY2UocmVhc29uaW5nKVxuICAgICAgcmVhc29uaW5nU3RvcmUucmVuYW1lKHRlbXBNZXNzYWdlSWQsIGZpbmFsTWVzc2FnZUlkKVxuXG4gICAgICAvLyBTZXNpw7NuIGVuIGJhY2tncm91bmQ6IGNlcnJhbW9zIGxlYW4uIEVsIGJhY2tlbmQgeWEgcGVyc2lzdGnDsyBsYVxuICAgICAgLy8gcmVzcHVlc3RhLCBhc8OtIHF1ZSBhbCB2b2x2ZXIgYSBsYSBzZXNpw7NuIHNlIGNhcmdhIGRlc2RlIGFow60uIEF2aXNhbW9zXG4gICAgICAvLyBxdWUgdGVybWluw7MgKHVucmVhZCArIGV2ZW50byBwYXJhIHRvYXN0L3NvbmlkbykuXG4gICAgICBpZiAoIWlzQWN0aXZlKSB7XG4gICAgICAgIGNvbW1pdFRvU2Vzc2lvbihzZXNzaW9uSWQsIHtcbiAgICAgICAgICBpZDogZmluYWxNZXNzYWdlSWQsXG4gICAgICAgICAgbWVzc2FnZTogY29udGVudCxcbiAgICAgICAgICBkYXRlOiBuZXcgRGF0ZSgpLFxuICAgICAgICAgIHVzZXI6IHsgaWQ6ICdhc3Npc3RhbnQnLCBuYW1lOiAnQXNzaXN0YW50JyB9LFxuICAgICAgICAgIHJvbGU6IENoYXRIaXN0b3J5Um9sZS5BU1NJU1RBTlQsXG4gICAgICAgICAgc291cmNlcyxcbiAgICAgICAgICAuLi4oYXR0YWNobWVudHMubGVuZ3RoID4gMCA/IHsgYXR0YWNobWVudHMgfSA6IHt9KSxcbiAgICAgICAgICBtZW1vcnlTZXNzaW9uSWQsXG4gICAgICAgICAgc3VnZ2VzdGlvbnM6IHN1Z2dlc3Rpb25zIHx8IFtdLFxuICAgICAgICAgIHJlYXNvbmluZzogZmluYWxUcmFjZSxcbiAgICAgICAgfSlcbiAgICAgICAgY2xlYXJTZXNzaW9uVGFpbChzZXNzaW9uSWQpXG4gICAgICAgIGdldENoYXRzU3RvcmVTdGF0ZSgpLm1hcmtDaGF0QXNVbnJlYWQoc2Vzc2lvbklkKVxuICAgICAgICBub3RpZnlTZXNzaW9uRmluaXNoZWRJbkJhY2tncm91bmQoc2Vzc2lvbklkLCAnY29tcGxldGUnKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgc3RyZWFtaW5nUGxhY2Vob2xkZXJJZFJlZi5jdXJyZW50ID0gbnVsbFxuICAgICAgYWN0aXZlU3RyZWFtQ2hhdElkUmVmLmN1cnJlbnQgPSBudWxsXG4gICAgICBoaXRsRXhlY3V0aW9uQ29udGV4dFJlZi5jdXJyZW50ID0gbnVsbFxuXG4gICAgICAvLyBEZXRlY3RhciB0b2RhcyBsYXMgVVJMcyBkZSB0YXJlYXMgKC4uLi90YXNrcy8xMjMvZGV0YWlsfG1lc3NhZ2V8bWVzc2FnZXN8ZmlsZXN8aGlzdG9yeXxob3VycylcbiAgICAgIGNvbnN0IHRhc2tVcmxSZWdleCA9IG5ldyBSZWdFeHAoVEFTS19VUkxfUkVHRVhfUEFUVEVSTiwgJ2cnKVxuICAgICAgY29uc3QgbWF0Y2hlcyA9IFsuLi5jb250ZW50Lm1hdGNoQWxsKHRhc2tVcmxSZWdleCldXG5cbiAgICAgIGxldCBjb250ZW50VG9BZGQgPSBjb250ZW50XG4gICAgICBjb25zdCBwcmV2aW91c01lc3NhZ2UgPSBtZXNzYWdlc1JlZi5jdXJyZW50LmZpbHRlcihtID0+IG0uaWQgIT09IHRlbXBNZXNzYWdlSWQpLmF0KC0xKVxuICAgICAgY29uc3QgaGFzQXBwcm92YWxJblByZXZpb3VzTWVzc2FnZSA9IHByZXZpb3VzTWVzc2FnZT8uYXBwcm92YWwgIT0gbnVsbFxuICAgICAgY29uc3QgVEFTS19DUkVBVElPTl9UT09MUyA9IFsnY3JlYXRlX3Rhc2snLCAnY3JlYXRlX3Rhc2tzX2JhdGNoJywgJ2Nsb25lX3Rhc2snXVxuICAgICAgY29uc3QgVEFTS19FRElUX1RPT0xTID0gW1xuICAgICAgICAnZWRpdF90YXNrJyxcbiAgICAgICAgJ2VkaXRfdGFza3NfYmF0Y2gnLFxuICAgICAgICAndGFza19hc3NpZ24nLFxuICAgICAgICAndGFza191bmFzc2lnbicsXG4gICAgICAgICd1cGRhdGVfdGFza190eXBlJyxcbiAgICAgICAgJ3VwZGF0ZV9lc3RpbWF0ZWRfaG91cnMnLFxuICAgICAgICAnYXNzaWduX3Rhc2tfbGFiZWwnLFxuICAgICAgXVxuICAgICAgY29uc3QgVEFTS19ERUxFVEVfVE9PTFMgPSBbJ2RlbGV0ZV90YXNrJywgJ2RlbGV0ZV90YXNrc19iYXRjaCddXG4gICAgICBjb25zdCBwZW5kaW5nQWN0aW9ucyA9IHByZXZpb3VzTWVzc2FnZT8uYXBwcm92YWw/LnBlbmRpbmdfYWN0aW9ucyB8fCBbXVxuICAgICAgY29uc3Qgd2FzVGFza0NyZWF0aW9uID1cbiAgICAgICAgaGFzQXBwcm92YWxJblByZXZpb3VzTWVzc2FnZSAmJlxuICAgICAgICBwZW5kaW5nQWN0aW9ucy5zb21lKChhY3Rpb246IGFueSkgPT4gVEFTS19DUkVBVElPTl9UT09MUy5pbmNsdWRlcyhhY3Rpb24udG9vbF9uYW1lKSlcbiAgICAgIGNvbnN0IHdhc1Rhc2tFZGl0ID1cbiAgICAgICAgaGFzQXBwcm92YWxJblByZXZpb3VzTWVzc2FnZSAmJiBwZW5kaW5nQWN0aW9ucy5zb21lKChhY3Rpb246IGFueSkgPT4gVEFTS19FRElUX1RPT0xTLmluY2x1ZGVzKGFjdGlvbi50b29sX25hbWUpKVxuICAgICAgY29uc3Qgd2FzVGFza0RlbGV0ZSA9XG4gICAgICAgIGhhc0FwcHJvdmFsSW5QcmV2aW91c01lc3NhZ2UgJiZcbiAgICAgICAgcGVuZGluZ0FjdGlvbnMuc29tZSgoYWN0aW9uOiBhbnkpID0+IFRBU0tfREVMRVRFX1RPT0xTLmluY2x1ZGVzKGFjdGlvbi50b29sX25hbWUpKVxuICAgICAgY29uc3Qgd2FzQ3JlYXRlQWdlbnRBcHByb3ZlZCA9XG4gICAgICAgIGhhc0FwcHJvdmFsSW5QcmV2aW91c01lc3NhZ2UgJiZcbiAgICAgICAgcHJldmlvdXNNZXNzYWdlPy5hcHByb3ZhbFN0YXR1cyA9PT0gJ2FwcHJvdmVkJyAmJlxuICAgICAgICBwZW5kaW5nQWN0aW9ucy5zb21lKChhY3Rpb246IGFueSkgPT4gYWN0aW9uLnRvb2xfbmFtZSA9PT0gJ2NyZWF0ZV9hZ2VudCcpXG4gICAgICBjb25zdCB3YXNDb25maWd1cmVBZ2VudEFjY2Vzc0FwcHJvdmVkID1cbiAgICAgICAgaGFzQXBwcm92YWxJblByZXZpb3VzTWVzc2FnZSAmJlxuICAgICAgICBwcmV2aW91c01lc3NhZ2U/LmFwcHJvdmFsU3RhdHVzID09PSAnYXBwcm92ZWQnICYmXG4gICAgICAgIHBlbmRpbmdBY3Rpb25zLnNvbWUoKGFjdGlvbjogYW55KSA9PiAoYWN0aW9uLnRvb2xfbmFtZSB8fCAnJykudG9Mb3dlckNhc2UoKSA9PT0gJ2NvbmZpZ3VyZV9hZ2VudF9hY2Nlc3MnKVxuICAgICAgbGV0IGNyZWF0ZUFnZW50Rm9sbG93VXA6IHsgYWdlbnRJZDogc3RyaW5nIH0gfCB1bmRlZmluZWRcbiAgICAgIGlmICh3YXNDcmVhdGVBZ2VudEFwcHJvdmVkICYmIHdpbmRvdy5NQUlBX0NIQVRfQUlfRkVBVFVSRV9BQ0NFU1NfTVVMVElfQUdFTlRTICYmIGNvbXBsZXRlZEFnZW50SWQ/LnRyaW0oKSkge1xuICAgICAgICBjcmVhdGVBZ2VudEZvbGxvd1VwID0geyBhZ2VudElkOiBjb21wbGV0ZWRBZ2VudElkLnRyaW0oKSB9XG4gICAgICB9IGVsc2UgaWYgKFxuICAgICAgICB3YXNDb25maWd1cmVBZ2VudEFjY2Vzc0FwcHJvdmVkICYmXG4gICAgICAgIHdpbmRvdy5NQUlBX0NIQVRfQUlfRkVBVFVSRV9BQ0NFU1NfTVVMVElfQUdFTlRTICYmXG4gICAgICAgIChjb21wbGV0ZWRBZ2VudElkPy50cmltKCkgfHxcbiAgICAgICAgICBleHRyYWN0QWdlbnRJZEZyb21QZW5kaW5nQWN0aW9uc0J5VG9vbE5hbWUocGVuZGluZ0FjdGlvbnMsICdjb25maWd1cmVfYWdlbnRfYWNjZXNzJykpXG4gICAgICApIHtcbiAgICAgICAgY29uc3QgY29uZmlndXJlZEFnZW50SWQgPVxuICAgICAgICAgIGNvbXBsZXRlZEFnZW50SWQ/LnRyaW0oKSB8fFxuICAgICAgICAgIGV4dHJhY3RBZ2VudElkRnJvbVBlbmRpbmdBY3Rpb25zQnlUb29sTmFtZShwZW5kaW5nQWN0aW9ucywgJ2NvbmZpZ3VyZV9hZ2VudF9hY2Nlc3MnKVxuICAgICAgICBjcmVhdGVBZ2VudEZvbGxvd1VwID0ge1xuICAgICAgICAgIGFnZW50SWQ6IGNvbmZpZ3VyZWRBZ2VudElkIGFzIHN0cmluZyxcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAod2FzQ3JlYXRlQWdlbnRBcHByb3ZlZCkge1xuICAgICAgICBldmVudChFVkVOVFMuYWlDaGF0SGl0bE9wdGlvbiwge1xuICAgICAgICAgIGFnZW50X3R5cGU6IGdldEhpdGxBbmFseXRpY3NBZ2VudFR5cGUoYWdlbnQpLFxuICAgICAgICAgIGFjdGlvbl90eXBlOiBidWlsZEhpdGxBY3Rpb25UeXBlTGlzdChwZW5kaW5nQWN0aW9ucyksXG4gICAgICAgICAgZGVjaXNpb246ICdhY2NlcHQnLFxuICAgICAgICAgIG9wdGlvbjogJ2NyZWF0ZV9hZ2VudCcsXG4gICAgICAgICAgLi4uKGNvbXBsZXRlZEFnZW50SWQ/LnRyaW0oKSA/IHsgY3JlYXRlZF9hZ2VudF9pZDogY29tcGxldGVkQWdlbnRJZC50cmltKCkgfSA6IHt9KSxcbiAgICAgICAgfSlcbiAgICAgIH1cblxuICAgICAgY29uc3QgbWFudWFsQXBwcm92YWxGb3JBbmFseXRpY3MgPSBsYXN0TWFudWFsQXBwcm92YWxSZWYuY3VycmVudFxuICAgICAgY29uc3Qgd2FzTWFudWFsQ3JlYXRlQWdlbnRBcHByb3ZlZCA9XG4gICAgICAgIG1hbnVhbEFwcHJvdmFsRm9yQW5hbHl0aWNzICYmIG5vcm1hbGl6ZUhpdGxUb29sTmFtZShtYW51YWxBcHByb3ZhbEZvckFuYWx5dGljcy50b29sTmFtZSkgPT09ICdjcmVhdGVfYWdlbnQnXG5cbiAgICAgIGlmICh3YXNNYW51YWxDcmVhdGVBZ2VudEFwcHJvdmVkKSB7XG4gICAgICAgIGV2ZW50KEVWRU5UUy5haUNoYXRIaXRsT3B0aW9uLCB7XG4gICAgICAgICAgYWdlbnRfdHlwZTogZ2V0SGl0bEFuYWx5dGljc0FnZW50VHlwZShhZ2VudCksXG4gICAgICAgICAgYWN0aW9uX3R5cGU6ICdjcmVhdGVfYWdlbnQnLFxuICAgICAgICAgIGRlY2lzaW9uOiAnYWNjZXB0JyxcbiAgICAgICAgICByZXNvbHV0aW9uX3NvdXJjZTogJ21hbnVhbCcsXG4gICAgICAgICAgb3B0aW9uOiAnY3JlYXRlX2FnZW50JyxcbiAgICAgICAgICAuLi4oY29tcGxldGVkQWdlbnRJZD8udHJpbSgpID8geyBjcmVhdGVkX2FnZW50X2lkOiBjb21wbGV0ZWRBZ2VudElkLnRyaW0oKSB9IDoge30pLFxuICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICBjb25zdCB3YXNFZGl0QWdlbnRBcHByb3ZlZCA9XG4gICAgICAgIGhhc0FwcHJvdmFsSW5QcmV2aW91c01lc3NhZ2UgJiZcbiAgICAgICAgcHJldmlvdXNNZXNzYWdlPy5hcHByb3ZhbFN0YXR1cyA9PT0gJ2FwcHJvdmVkJyAmJlxuICAgICAgICBwZW5kaW5nQWN0aW9ucy5zb21lKChhY3Rpb246IGFueSkgPT4gKGFjdGlvbi50b29sX25hbWUgfHwgJycpLnRvTG93ZXJDYXNlKCkgPT09ICdlZGl0X2FnZW50JylcblxuICAgICAgbGV0IGVkaXRBZ2VudEZvbGxvd1VwOiB7IGFnZW50SWQ6IHN0cmluZyB9IHwgdW5kZWZpbmVkXG4gICAgICBpZiAod2FzRWRpdEFnZW50QXBwcm92ZWQpIHtcbiAgICAgICAgY29uc3QgZnJvbVN0cmVhbSA9IGNvbXBsZXRlZEFnZW50SWQ/LnRyaW0oKVxuICAgICAgICBjb25zdCBmcm9tQXJncyA9IGV4dHJhY3RBZ2VudElkRnJvbUVkaXRBZ2VudFBlbmRpbmdBY3Rpb25zKHBlbmRpbmdBY3Rpb25zKVxuICAgICAgICBjb25zdCByZXNvbHZlZEFnZW50SWQgPSBmcm9tU3RyZWFtIHx8IGZyb21BcmdzXG4gICAgICAgIGlmIChyZXNvbHZlZEFnZW50SWQpIHtcbiAgICAgICAgICBlZGl0QWdlbnRGb2xsb3dVcCA9IHsgYWdlbnRJZDogcmVzb2x2ZWRBZ2VudElkIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjb25zdCB0YXNrSWRzRnJvbVVybHMgPSBtYXRjaGVzLm1hcChtYXRjaCA9PiBwYXJzZUludChtYXRjaFsxXSwgMTApKVxuICAgICAgY29uc3QgdGFza0lkc0Zyb21EZWxldGVBcHByb3ZhbCA9IGV4dHJhY3RUYXNrSWRzRnJvbURlbGV0ZVBlbmRpbmdBY3Rpb25zKHBlbmRpbmdBY3Rpb25zKVxuICAgICAgY29uc3QgdGFza0lkc0Zyb21EZWxldGlvblRleHQgPVxuICAgICAgICB3YXNUYXNrRGVsZXRlICYmIHRhc2tJZHNGcm9tVXJscy5sZW5ndGggPT09IDAgJiYgdGFza0lkc0Zyb21EZWxldGVBcHByb3ZhbC5sZW5ndGggPT09IDBcbiAgICAgICAgICA/IGV4dHJhY3RUYXNrSWRzRnJvbUFzc2lzdGFudERlbGV0aW9uVGV4dChjb250ZW50KVxuICAgICAgICAgIDogW11cbiAgICAgIGNvbnN0IHRhc2tJZHNGb3JEYXNoYm9hcmQgPVxuICAgICAgICB0YXNrSWRzRnJvbVVybHMubGVuZ3RoID4gMFxuICAgICAgICAgID8gdGFza0lkc0Zyb21VcmxzXG4gICAgICAgICAgOiB0YXNrSWRzRnJvbURlbGV0ZUFwcHJvdmFsLmxlbmd0aCA+IDBcbiAgICAgICAgICAgID8gdGFza0lkc0Zyb21EZWxldGVBcHByb3ZhbFxuICAgICAgICAgICAgOiB0YXNrSWRzRnJvbURlbGV0aW9uVGV4dFxuXG4gICAgICBjb25zdCBzaG91bGRTeW5jRGFzaGJvYXJkID1cbiAgICAgICAgaGFzQXBwcm92YWxJblByZXZpb3VzTWVzc2FnZSAmJlxuICAgICAgICAod2FzVGFza0NyZWF0aW9uIHx8IHdhc1Rhc2tFZGl0IHx8IHdhc1Rhc2tEZWxldGUpICYmXG4gICAgICAgIHRhc2tJZHNGb3JEYXNoYm9hcmQubGVuZ3RoID4gMFxuXG4gICAgICBpZiAoc2hvdWxkU3luY0Rhc2hib2FyZCkge1xuICAgICAgICBjb25zdCB0YXNrSWRzID0gdGFza0lkc0ZvckRhc2hib2FyZFxuICAgICAgICBpZiAobWF0Y2hlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgY29uc3QgdGFiID0gYXdhaXQgZ2V0VGFiVGFza0RlZmF1bHQodGFza0lkc1swXSlcbiAgICAgICAgICBjb25zdCB0YWJTZWdtZW50ID0gdGFiID8gYC8ke3RhYn1gIDogJy9kZXRhaWwnXG4gICAgICAgICAgY29udGVudFRvQWRkID0gY29udGVudC5yZXBsYWNlKHRhc2tVcmxSZWdleCwgdXJsID0+XG4gICAgICAgICAgICB1cmwucmVwbGFjZSgvXFwvKGRldGFpbHxtZXNzYWdlfG1lc3NhZ2VzfGZpbGVzfGhpc3Rvcnl8aG91cnMpKD89JHxcXD8pLywgdGFiU2VnbWVudClcbiAgICAgICAgICApXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBsYXN0UHJvamVjdE1lc3NhZ2UgPSBtZXNzYWdlc1JlZi5jdXJyZW50LmZpbHRlcihtc2cgPT4gbXNnLnByb2plY3RJZCkuYXQoLTEpXG4gICAgICAgIGNvbnN0IGNvbnRleHRQcm9qZWN0SWRSYXcgPSBwcm9qZWN0Py5pZCB8fCBsYXN0UHJvamVjdE1lc3NhZ2U/LnByb2plY3RJZFxuICAgICAgICBjb25zdCBjb250ZXh0UHJvamVjdElkID0gY29udGV4dFByb2plY3RJZFJhdyA/IHBhcnNlSW50KFN0cmluZyhjb250ZXh0UHJvamVjdElkUmF3KSwgMTApIDogbnVsbFxuICAgICAgICBjb25zdCBwYXRoTWF0Y2ggPSB3aW5kb3cubG9jYXRpb24ucGF0aG5hbWUubWF0Y2goL15cXC9wcm9qZWN0c1xcLyhcXGQrKVxcLy8pXG4gICAgICAgIGNvbnN0IHJvdXRlUHJvamVjdElkID0gcGF0aE1hdGNoID8gcGFyc2VJbnQocGF0aE1hdGNoWzFdLCAxMCkgOiBudWxsXG4gICAgICAgIGNvbnN0IGlzT25Qcm9qZWN0Um91dGUgPSBjb250ZXh0UHJvamVjdElkICYmIHJvdXRlUHJvamVjdElkICYmIGNvbnRleHRQcm9qZWN0SWQgPT09IHJvdXRlUHJvamVjdElkXG5cbiAgICAgICAgaWYgKGlzT25Qcm9qZWN0Um91dGUpIHtcbiAgICAgICAgICBpZiAod2FzVGFza0NyZWF0aW9uKSB7XG4gICAgICAgICAgICB3aW5kb3cubmV3UHJvamVjdERhc2hib2FyZD8uYWRkRXhpc3RpbmdUYXNrVG9EYXNoYm9hcmQ/Lih0YXNrSWRzKVxuICAgICAgICAgIH0gZWxzZSBpZiAod2FzVGFza0VkaXQpIHtcbiAgICAgICAgICAgIHdpbmRvdy5uZXdQcm9qZWN0RGFzaGJvYXJkPy5lZGl0RXhpc3RpbmdUYXNrSW5EYXNoYm9hcmQ/Lih0YXNrSWRzKVxuICAgICAgICAgIH0gZWxzZSBpZiAod2FzVGFza0RlbGV0ZSkge1xuICAgICAgICAgICAgd2luZG93Lm5ld1Byb2plY3REYXNoYm9hcmQ/LmRlbGV0ZUV4aXN0aW5nVGFza0Zyb21EYXNoYm9hcmQ/Lih0YXNrSWRzKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBSZWZldGNoIGRlbCB0YXNrIHBhbmVsIHNpIGVzdMOhIGFiaWVydG8geSBsYSB0b29sIGFwcm9iYWRhIGVkaXTDsy9ib3Jyw7MgZXNhIHRhcmVhLlxuICAgICAgLy8gQ3VicmUgbG9zIGRvcyBmbHVqb3MgZGUgYXBwcm92YWw6XG4gICAgICAvLyAgIDEpIEFwcHJvdmFsIHBvciBib3TDs24g4oaSIGBwcmV2aW91c01lc3NhZ2UuYXBwcm92YWwucGVuZGluZ19hY3Rpb25zYCAodsOtYSBoYXNBcHByb3ZhbEluUHJldmlvdXNNZXNzYWdlKVxuICAgICAgLy8gICAyKSBNYW51YWwgYXBwcm92YWwgKHVzdWFyaW8gdGlwZWEgXCJzaVwiL1wibm9cIikg4oaSIGBsYXN0TWFudWFsQXBwcm92YWxSZWYuY3VycmVudGBcbiAgICAgIGNvbnN0IG9wZW5UYXNrUGFuZWxJZCA9IHdpbmRvdy50YXNrUGFuZWw/LnRhc2tJZFxuICAgICAgY29uc3QgbWFudWFsQXBwcm92YWwgPSBsYXN0TWFudWFsQXBwcm92YWxSZWYuY3VycmVudFxuICAgICAgbGFzdE1hbnVhbEFwcHJvdmFsUmVmLmN1cnJlbnQgPSBudWxsIC8vIGNvbnN1bWlyIHVuYSBzb2xhIHZlelxuICAgICAgY29uc3QgbWFudWFsV2FzVGFza0VkaXQgPSAhIW1hbnVhbEFwcHJvdmFsICYmIFRBU0tfRURJVF9UT09MUy5pbmNsdWRlcyhtYW51YWxBcHByb3ZhbC50b29sTmFtZSlcbiAgICAgIGNvbnN0IG1hbnVhbFdhc1Rhc2tEZWxldGUgPSAhIW1hbnVhbEFwcHJvdmFsICYmIFRBU0tfREVMRVRFX1RPT0xTLmluY2x1ZGVzKG1hbnVhbEFwcHJvdmFsLnRvb2xOYW1lKVxuXG4gICAgICAvLyBTeW5jIFBsYW5uZXI6IGF2aXNhciBjYXJnYSBkZSBob3JhcyBjb25maXJtYWRhIChjcmVhdGVfaG91ciAvIGNyZWF0ZV9ob3VycykuXG4gICAgICBjb25zdCBob3Vyc1Rvb2xzRnJvbUFwcHJvdmFsID0gcGVuZGluZ0FjdGlvbnNcbiAgICAgICAgLm1hcCgoYWN0aW9uOiBQZW5kaW5nQWN0aW9uKSA9PiBhY3Rpb24udG9vbF9uYW1lKVxuICAgICAgICAuZmlsdGVyKCh0b29sTmFtZSk6IHRvb2xOYW1lIGlzIHN0cmluZyA9PiBpc0hvdXJzQ2hhcmdlVG9vbCh0b29sTmFtZSkpXG4gICAgICBjb25zdCB3YXNIb3Vyc0NoYXJnZUFwcHJvdmVkID1cbiAgICAgICAgaGFzQXBwcm92YWxJblByZXZpb3VzTWVzc2FnZSAmJlxuICAgICAgICBwcmV2aW91c01lc3NhZ2U/LmFwcHJvdmFsU3RhdHVzID09PSAnYXBwcm92ZWQnICYmXG4gICAgICAgIGhvdXJzVG9vbHNGcm9tQXBwcm92YWwubGVuZ3RoID4gMFxuICAgICAgY29uc3QgbWFudWFsSG91cnNUb29sID0gbWFudWFsQXBwcm92YWw/LnRvb2xOYW1lXG4gICAgICBjb25zdCB3YXNIb3Vyc0NoYXJnZU1hbnVhbEFwcHJvdmVkID0gaXNIb3Vyc0NoYXJnZVRvb2wobWFudWFsSG91cnNUb29sKVxuXG4gICAgICBpZiAod2FzSG91cnNDaGFyZ2VBcHByb3ZlZCB8fCB3YXNIb3Vyc0NoYXJnZU1hbnVhbEFwcHJvdmVkKSB7XG4gICAgICAgIGNvbnN0IHRvb2xzID0gd2FzSG91cnNDaGFyZ2VBcHByb3ZlZCA/IGhvdXJzVG9vbHNGcm9tQXBwcm92YWwgOiBtYW51YWxIb3Vyc1Rvb2wgPyBbbWFudWFsSG91cnNUb29sXSA6IFtdXG4gICAgICAgIGRpc3BhdGNoTWFpYUhvdXJzQ2hhcmdlZCh7XG4gICAgICAgICAgc291cmNlOiAnbWFpYScsXG4gICAgICAgICAgdG9vbHMsXG4gICAgICAgICAgc2Vzc2lvbklkOiBtZW1vcnlTZXNzaW9uSWQsXG4gICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIGlmIChvcGVuVGFza1BhbmVsSWQgJiYgKHdhc1Rhc2tFZGl0IHx8IHdhc1Rhc2tEZWxldGUgfHwgbWFudWFsV2FzVGFza0VkaXQgfHwgbWFudWFsV2FzVGFza0RlbGV0ZSkpIHtcbiAgICAgICAgY29uc3QgbWFudWFsUHNldWRvQWN0aW9uOiBQZW5kaW5nQWN0aW9uIHwgbnVsbCA9IG1hbnVhbEFwcHJvdmFsXG4gICAgICAgICAgPyAoeyB0b29sX25hbWU6IG1hbnVhbEFwcHJvdmFsLnRvb2xOYW1lLCB0b29sX2FyZ3M6IG1hbnVhbEFwcHJvdmFsLnRvb2xBcmdzID8/IHt9IH0gYXMgUGVuZGluZ0FjdGlvbilcbiAgICAgICAgICA6IG51bGxcbiAgICAgICAgY29uc3QgYWZmZWN0ZWRUYXNrSWRzID0gW1xuICAgICAgICAgIC4uLmV4dHJhY3RUYXNrSWRzRnJvbVBlbmRpbmdBY3Rpb25zQXJncyhwZW5kaW5nQWN0aW9ucyksXG4gICAgICAgICAgLi4udGFza0lkc0Zyb21VcmxzLFxuICAgICAgICAgIC4uLnRhc2tJZHNGcm9tRGVsZXRlQXBwcm92YWwsXG4gICAgICAgICAgLi4uKG1hbnVhbFBzZXVkb0FjdGlvbiA/IGV4dHJhY3RUYXNrSWRzRnJvbVBlbmRpbmdBY3Rpb25zQXJncyhbbWFudWFsUHNldWRvQWN0aW9uXSkgOiBbXSksXG4gICAgICAgIF0ubWFwKFN0cmluZylcbiAgICAgICAgaWYgKGFmZmVjdGVkVGFza0lkcy5pbmNsdWRlcyhTdHJpbmcob3BlblRhc2tQYW5lbElkKSkpIHtcbiAgICAgICAgICB3aW5kb3cudGFza1BhbmVsPy5yZWZldGNoVGFzaz8uKClcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBTd2FwIHBsYWNlaG9sZGVyIOKGkiBtZW5zYWplIGZpbmFsLiBWYSBlbiBgZmx1c2hTeW5jYCBwb3JxdWUgZWwgbW90b3IgeWFcbiAgICAgIC8vIGRlasOzIGVuY29sYWRhcyBsYXMgZXNjcml0dXJhcyBkZSBmaW4gZGUgc3RyZWFtIChpc1dyaXRpbmcsIGFjdGl2aXR5LFxuICAgICAgLy8gc3RhdHVzKSwgeSBlc2FzIHZpYWphbiBlbiBTeW5jTGFuZSBwb3Igc2VyIGRlIHVuIHN0b3JlIGV4dGVybm8gbWllbnRyYXNcbiAgICAgIC8vIHF1ZSBlc3RvcyBzZXRTdGF0ZSB2aWFqYW4gZW4gRGVmYXVsdExhbmUuIFNpbiBmb3J6YXJsbywgUmVhY3QgcGludGFcbiAgICAgIC8vIHByaW1lcm8gZWwgcGxhY2Vob2xkZXIgeWEgc2luIGluZGljYWRvciBkZSBhY3RpdmlkYWQgKHR1cm5vIDQxcHggbcOhc1xuICAgICAgLy8gYmFqbykgeSByZWNpw6luIH4yNW1zIGRlc3B1w6lzIGVsIG1lbnNhamUgZGVmaW5pdGl2bzogZXNlIHNhbHRvIGRlIGlkYSB5XG4gICAgICAvLyB2dWVsdGEgZXJhIGVsIGZsaWNrZXIgZGUgZmluIGRlIHN0cmVhbS4gQ29uIGVsIGZsdXNoLCB0b2RvIGVsIGZpbiBkZVxuICAgICAgLy8gc3RyZWFtIGVudHJhIGVuIHVuIMO6bmljbyBjb21taXQuXG4gICAgICBmbHVzaFN5bmMoKCkgPT4ge1xuICAgICAgICBkcm9wRnJvbVNlc3Npb24oc2Vzc2lvbklkLCB0ZW1wTWVzc2FnZUlkKVxuICAgICAgICBjb21taXRUb1Nlc3Npb24oc2Vzc2lvbklkLCB7XG4gICAgICAgICAgaWQ6IGZpbmFsTWVzc2FnZUlkLFxuICAgICAgICAgIG1lc3NhZ2U6IGNvbnRlbnRUb0FkZCxcbiAgICAgICAgICBkYXRlOiBuZXcgRGF0ZSgpLFxuICAgICAgICAgIHVzZXI6IHsgaWQ6ICdhc3Npc3RhbnQnLCBuYW1lOiAnQXNzaXN0YW50JyB9LFxuICAgICAgICAgIHJvbGU6IENoYXRIaXN0b3J5Um9sZS5BU1NJU1RBTlQsXG4gICAgICAgICAgc291cmNlcyxcbiAgICAgICAgICAuLi4oYXR0YWNobWVudHMubGVuZ3RoID4gMCA/IHsgYXR0YWNobWVudHMgfSA6IHt9KSxcbiAgICAgICAgICBtZW1vcnlTZXNzaW9uSWQsXG4gICAgICAgICAgc3VnZ2VzdGlvbnM6IHN1Z2dlc3Rpb25zIHx8IFtdLFxuICAgICAgICAgIC4uLihjcmVhdGVBZ2VudEZvbGxvd1VwID8geyBjcmVhdGVBZ2VudEZvbGxvd1VwIH0gOiB7fSksXG4gICAgICAgICAgcmVhc29uaW5nOiBmaW5hbFRyYWNlLFxuICAgICAgICB9KVxuICAgICAgfSlcbiAgICAgIGNsZWFyU2Vzc2lvblRhaWwoc2Vzc2lvbklkKVxuXG4gICAgICBpZiAoY3JlYXRlQWdlbnRGb2xsb3dVcD8uYWdlbnRJZCkge1xuICAgICAgICBmZXRjaEFnZW50RGV0YWlsKGNyZWF0ZUFnZW50Rm9sbG93VXAuYWdlbnRJZClcbiAgICAgICAgICAudGhlbihjaGF0QWdlbnQgPT4ge1xuICAgICAgICAgICAgZG9jdW1lbnQuZGlzcGF0Y2hFdmVudChcbiAgICAgICAgICAgICAgbmV3IEN1c3RvbUV2ZW50KCdtYWlhLW1lcmdlLWNyZWF0ZWQtYWdlbnQtaW50by1saXN0Jywge1xuICAgICAgICAgICAgICAgIGRldGFpbDogeyBhZ2VudDogY2hhdEFnZW50IH0sXG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApXG4gICAgICAgICAgfSlcbiAgICAgICAgICAuY2F0Y2goZXJyID0+IHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1t1c2VDaGF0TWFuYWdlcl0gTm8gc2UgcHVkbyBhw7FhZGlyIGVsIGFnZW50ZSByZWNpw6luIGNyZWFkbyBhbCBsaXN0YWRvJywgZXJyKVxuICAgICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIGlmIChlZGl0QWdlbnRGb2xsb3dVcD8uYWdlbnRJZCkge1xuICAgICAgICBmZXRjaEFnZW50RGV0YWlsKGVkaXRBZ2VudEZvbGxvd1VwLmFnZW50SWQpXG4gICAgICAgICAgLnRoZW4oY2hhdEFnZW50ID0+IHtcbiAgICAgICAgICAgIGRvY3VtZW50LmRpc3BhdGNoRXZlbnQoXG4gICAgICAgICAgICAgIG5ldyBDdXN0b21FdmVudCgnbWFpYS1zeW5jLWVkaXRlZC1hZ2VudC1mcm9tLWNoYXQnLCB7XG4gICAgICAgICAgICAgICAgZGV0YWlsOiB7IGFnZW50OiBjaGF0QWdlbnQgfSxcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICB9KVxuICAgICAgICAgIC5jYXRjaChlcnIgPT4ge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcignW3VzZUNoYXRNYW5hZ2VyXSBObyBzZSBwdWRvIHJlZnJlc2NhciBlbCBhZ2VudGUgZWRpdGFkbycsIGVycilcbiAgICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICBpc1Byb2Nlc3NpbmdSZWYuY3VycmVudCA9IGZhbHNlXG4gICAgICByZXRyeVNuYXBzaG90UmVmLmN1cnJlbnQgPSBudWxsXG5cbiAgICAgIGNvbnN0IHsgaXNDaGF0Vmlld1Zpc2libGUsIG1hcmtDaGF0QXNSZWFkIH0gPSBnZXRDaGF0c1N0b3JlU3RhdGUoKVxuICAgICAgaWYgKGlzQWN0aXZlICYmIGlzQ2hhdFZpZXdWaXNpYmxlKSB7XG4gICAgICAgIGF3YWl0IG1hcmtDaGF0QXNSZWFkKHNlc3Npb25JZCwgeyBmb3JjZTogdHJ1ZSB9KVxuICAgICAgfVxuXG4gICAgICBpZiAoZmlyc3RUaW1lUmVmLmN1cnJlbnQpIHtcbiAgICAgICAgY29uc3QgY3VzdG9tRXZlbnQgPSBuZXcgQ3VzdG9tRXZlbnQoJ3JlZmV0Y2gtc2Vzc2lvbicpXG4gICAgICAgIGRvY3VtZW50LmRpc3BhdGNoRXZlbnQoY3VzdG9tRXZlbnQpXG4gICAgICAgIGZpcnN0VGltZVJlZi5jdXJyZW50ID0gZmFsc2VcbiAgICAgIH1cbiAgICB9LFxuICAgIFtjb21taXRUb1Nlc3Npb24sIGRyb3BGcm9tU2Vzc2lvbiwgY2xlYXJTZXNzaW9uVGFpbCwgcHJvamVjdCwgZ2V0VGFiVGFza0RlZmF1bHQsIGV2ZW50LCBhZ2VudF1cbiAgKVxuXG4gIC8vIGBwYXJ0aWFsVGV4dGAgbG8gcmVzY2F0YSBgc3RvcFN0cmVhbWAgYW50ZXMgZGUgbGltcGlhciBlbCBzdG9yZSBleHRlcm5vOiBlbCB0ZXh0byBlbiB2aXZvXG4gIC8vIG5vIHZpdmUgZW4gYG1lc3NhZ2VzYCwgYXPDrSBxdWUgc2luIGVzdG8gbGEgcmVzcHVlc3RhIGEgbWVkaWFzIGRlc2FwYXJlY2UgZGUgcGFudGFsbGEgYXVucXVlXG4gIC8vIGVsIGJhY2tlbmQgc8OtIGxhIGhheWEgcGVyc2lzdGlkby5cbiAgY29uc3QgaGFuZGxlU3RyZWFtU3RvcCA9IHVzZUNhbGxiYWNrKFxuICAgIChwYXJ0aWFsVGV4dDogc3RyaW5nKSA9PiB7XG4gICAgICAvLyBFbCBzdG9wIHNpZW1wcmUgYXBsaWNhIGEgbGEgc2VzacOzbiBhY3RpdmEgKGJvdMOzbiBkZWwgaW5wdXQgdmlzaWJsZSkuXG4gICAgICBjb25zdCBzZXNzaW9uSWQgPSBjdXJyZW50Q2hhdElkLmN1cnJlbnRcbiAgICAgIGNsZWFyU3RyZWFtVWlSZWYuY3VycmVudCgpXG4gICAgICBjb25zdCB0ZW1wTWVzc2FnZUlkID0gc3RyZWFtaW5nUGxhY2Vob2xkZXJNZXNzYWdlSWQoY3VycmVudE1lc3NhZ2VJZC5jdXJyZW50KVxuICAgICAgY29uc3QgZmluYWxNZXNzYWdlSWQgPSBgYW5zd2VyLSR7Y3VycmVudE1lc3NhZ2VJZC5jdXJyZW50fWBcbiAgICAgIGNvbnN0IHN0b3BwZWRUcmFjZSA9IHJlYXNvbmluZ1RyYWNlRm9yKHRlbXBNZXNzYWdlSWQpXG5cbiAgICAgIHNlc3Npb25TdHJlYW1pbmdUZXh0LmNsZWFyKHNlc3Npb25JZClcbiAgICAgIHN0cmVhbWluZ1BsYWNlaG9sZGVySWRSZWYuY3VycmVudCA9IG51bGxcbiAgICAgIGFjdGl2ZVN0cmVhbUNoYXRJZFJlZi5jdXJyZW50ID0gbnVsbFxuICAgICAgZHJvcEZyb21TZXNzaW9uKHNlc3Npb25JZCwgdGVtcE1lc3NhZ2VJZClcblxuICAgICAgaWYgKHN0b3BwZWRUcmFjZT8uc3RlcHMubGVuZ3RoKSB7XG4gICAgICAgIHJlYXNvbmluZ1N0b3JlLmZpbmlzaCh0ZW1wTWVzc2FnZUlkLCBudWxsKVxuICAgICAgICByZWFzb25pbmdTdG9yZS5yZW5hbWUodGVtcE1lc3NhZ2VJZCwgZmluYWxNZXNzYWdlSWQpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZWFzb25pbmdTdG9yZS5yZW1vdmUodGVtcE1lc3NhZ2VJZClcbiAgICAgIH1cblxuICAgICAgaWYgKHBhcnRpYWxUZXh0KSB7XG4gICAgICAgIGNvbW1pdFRvU2Vzc2lvbihzZXNzaW9uSWQsIHtcbiAgICAgICAgICBpZDogZmluYWxNZXNzYWdlSWQsXG4gICAgICAgICAgbWVzc2FnZTogcGFydGlhbFRleHQsXG4gICAgICAgICAgZGF0ZTogbmV3IERhdGUoKSxcbiAgICAgICAgICB1c2VyOiB7IGlkOiAnYXNzaXN0YW50JywgbmFtZTogJ0Fzc2lzdGFudCcgfSxcbiAgICAgICAgICByb2xlOiBDaGF0SGlzdG9yeVJvbGUuQVNTSVNUQU5ULFxuICAgICAgICAgIC4uLihzdG9wcGVkVHJhY2UgPyB7IHJlYXNvbmluZzogc3RvcHBlZFRyYWNlIH0gOiB7fSksXG4gICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIGNvbW1pdFRvU2Vzc2lvbihzZXNzaW9uSWQsIHtcbiAgICAgICAgaWQ6IGAke2ZpbmFsTWVzc2FnZUlkfS1jYW5jZWxsZWRgLFxuICAgICAgICBtZXNzYWdlOiB0KCdjaGF0LmNhbmNlbGxlZCcpLFxuICAgICAgICBkYXRlOiBuZXcgRGF0ZSgpLFxuICAgICAgICB1c2VyOiB7IGlkOiAnYXNzaXN0YW50JywgbmFtZTogJ0Fzc2lzdGFudCcgfSxcbiAgICAgICAgcm9sZTogQ2hhdEhpc3RvcnlSb2xlLkFTU0lTVEFOVCxcbiAgICAgICAgaXNGcm9udGVuZENhbmNlbGxlZDogdHJ1ZSxcbiAgICAgIH0pXG4gICAgICBjbGVhclNlc3Npb25UYWlsKHNlc3Npb25JZClcbiAgICAgIGlzUHJvY2Vzc2luZ1JlZi5jdXJyZW50ID0gZmFsc2VcbiAgICAgIHJldHJ5U25hcHNob3RSZWYuY3VycmVudCA9IG51bGxcbiAgICB9LFxuICAgIFtjb21taXRUb1Nlc3Npb24sIGRyb3BGcm9tU2Vzc2lvbiwgY2xlYXJTZXNzaW9uVGFpbCwgdF1cbiAgKVxuXG4gIGNvbnN0IGhhbmRsZUFwcHJvdmFsUmVxdWlyZWQgPSB1c2VDYWxsYmFjayhcbiAgICAoY3R4OiBTdHJlYW1Db250ZXh0LCBhcHByb3ZhbDogQXBwcm92YWxSZXF1ZXN0LCBhY2N1bXVsYXRlZENvbnRlbnQ6IHN0cmluZykgPT4ge1xuICAgICAgY29uc3QgeyBzZXNzaW9uSWQsIHBsYWNlaG9sZGVySWQgfSA9IGN0eFxuICAgICAgY29uc3QgaXNBY3RpdmUgPSBhY3RpdmVWaWV3LmlzKHNlc3Npb25JZClcblxuICAgICAgc2Vzc2lvblN0cmVhbWluZ1RleHQuY2xlYXIoc2Vzc2lvbklkKVxuICAgICAgZHJvcEZyb21TZXNzaW9uKHNlc3Npb25JZCwgcGxhY2Vob2xkZXJJZClcblxuICAgICAgcmV0cnlTbmFwc2hvdFJlZi5jdXJyZW50ID0gbnVsbFxuXG4gICAgICBpZiAoaXNBY3RpdmUpIHtcbiAgICAgICAgc3RyZWFtaW5nUGxhY2Vob2xkZXJJZFJlZi5jdXJyZW50ID0gbnVsbFxuICAgICAgICBhY3RpdmVTdHJlYW1DaGF0SWRSZWYuY3VycmVudCA9IG51bGxcbiAgICAgIH1cblxuICAgICAgY29uc3QgaGl0bENvbnRleHQ6IEhpdGxFeGVjdXRpb25Db250ZXh0ID0ge1xuICAgICAgICBtZXNzYWdlSWQ6IGBhcHByb3ZhbC0ke2FwcHJvdmFsLm9yaWdpbmFsX3RocmVhZF9pZH1gLFxuICAgICAgICBtZXNzYWdlVGV4dDogYWNjdW11bGF0ZWRDb250ZW50IHx8ICcnLFxuICAgICAgICBhcHByb3ZhbCxcbiAgICAgICAgcGVuZGluZ0FjdGlvbnM6IGFwcHJvdmFsLnBlbmRpbmdfYWN0aW9ucyxcbiAgICAgICAgdGhyZWFkSWRzOiBhcHByb3ZhbC5wZW5kaW5nX2FjdGlvbnM/Lm1hcChhY3Rpb24gPT4gYWN0aW9uLnRocmVhZF9pZCksXG4gICAgICB9XG4gICAgICBpZiAoaXNBY3RpdmUpIHtcbiAgICAgICAgaGl0bEV4ZWN1dGlvbkNvbnRleHRSZWYuY3VycmVudCA9IGhpdGxDb250ZXh0XG4gICAgICB9XG5cbiAgICAgIC8vIFByZWFwcm9iYWRvOiBwb3IgZGV0ZWNjacOzbiBtYW51YWwgbyBwb3IgYXV0by1hcHByb3ZlLiBFbiBhbWJvcyBjYXNvcyBlbFxuICAgICAgLy8gc3RyZWFtIGNvbnRpbsO6YSB5IG5vIGhheSBxdWUgcGludGFyIGxhIGNhamEgZGUgYXByb2JhY2nDs24uXG4gICAgICBpZiAoYXBwcm92YWwubWFudWFsX2FwcHJvdmFsX2RldGVjdGVkIHx8IGFwcHJvdmFsLmF1dG9fYXBwcm92ZWQgfHwgYXBwcm92YWwuYXBwcm92YWxfc3RhdHVzID09PSAnYXBwcm92ZWQnKSB7XG4gICAgICAgIHRyYWNrTWFudWFsSGl0bEV2ZW50cyhcbiAgICAgICAgICBldmVudCxcbiAgICAgICAgICB7IGltcHJlc3Npb246IEVWRU5UUy5haUNoYXRIaXRsLCBvcHRpb246IEVWRU5UUy5haUNoYXRIaXRsT3B0aW9uIH0sXG4gICAgICAgICAgYWdlbnQsXG4gICAgICAgICAgYXBwcm92YWwsXG4gICAgICAgICAgdHJhY2tlZE1hbnVhbEhpdGxLZXlzUmVmLmN1cnJlbnQsXG4gICAgICAgICAgYXBwcm92YWwubWFudWFsX2FwcHJvdmFsX2RldGVjdGVkID8gJ21hbnVhbCcgOiAnYXV0bydcbiAgICAgICAgKVxuXG4gICAgICAgIGNvbnN0IGZpcnN0QWN0aW9uID0gYXBwcm92YWwucGVuZGluZ19hY3Rpb25zPy5bMF1cbiAgICAgICAgY29uc3QgdG9vbE5hbWUgPSAoYXBwcm92YWwgYXMgeyB0b29sX25hbWU/OiBzdHJpbmcgfSkudG9vbF9uYW1lID8/IGZpcnN0QWN0aW9uPy50b29sX25hbWUgPz8gJydcbiAgICAgICAgY29uc3QgdG9vbEFyZ3MgPVxuICAgICAgICAgICgoYXBwcm92YWwgYXMgeyB0b29sX2FyZ3M/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB9KS50b29sX2FyZ3MgPz9cbiAgICAgICAgICAgIChmaXJzdEFjdGlvbj8udG9vbF9hcmdzIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgdW5kZWZpbmVkKSkgfHxcbiAgICAgICAgICBudWxsXG4gICAgICAgIGlmICh0b29sTmFtZSAmJiBpc0FjdGl2ZSkge1xuICAgICAgICAgIGxhc3RNYW51YWxBcHByb3ZhbFJlZi5jdXJyZW50ID0geyB0b29sTmFtZSwgdG9vbEFyZ3MgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChpc0FjdGl2ZSkge1xuICAgICAgICAgIGlzUHJvY2Vzc2luZ1JlZi5jdXJyZW50ID0gZmFsc2VcbiAgICAgICAgfVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgLy8gQWRkIGEgbWVzc2FnZSB3aXRoIHRoZSBhcHByb3ZhbCByZXF1ZXN0XG4gICAgICBjb25zdCBhcHByb3ZhbE1lc3NhZ2VJZCA9IGBhcHByb3ZhbC0ke2FwcHJvdmFsLm9yaWdpbmFsX3RocmVhZF9pZH1gXG4gICAgICByZWFzb25pbmdTdG9yZS5yZW5hbWUocGxhY2Vob2xkZXJJZCwgYXBwcm92YWxNZXNzYWdlSWQpXG4gICAgICBjb25zdCBhcHByb3ZhbFRyYWNlID0gbWFwUmVhc29uaW5nVHJhY2UoYXBwcm92YWwucmVhc29uaW5nKSA/PyByZWFzb25pbmdUcmFjZUZvcihhcHByb3ZhbE1lc3NhZ2VJZClcbiAgICAgIGNvbW1pdFRvU2Vzc2lvbihzZXNzaW9uSWQsIHtcbiAgICAgICAgaWQ6IGFwcHJvdmFsTWVzc2FnZUlkLFxuICAgICAgICBtZXNzYWdlOiBhY2N1bXVsYXRlZENvbnRlbnQgfHwgJycsXG4gICAgICAgIGRhdGU6IG5ldyBEYXRlKCksXG4gICAgICAgIHVzZXI6IHsgaWQ6ICdhc3Npc3RhbnQnLCBuYW1lOiAnQXNzaXN0YW50JyB9LFxuICAgICAgICByb2xlOiBDaGF0SGlzdG9yeVJvbGUuQVNTSVNUQU5ULFxuICAgICAgICBhcHByb3ZhbCxcbiAgICAgICAgYXBwcm92YWxTdGF0dXM6ICdwZW5kaW5nJyxcbiAgICAgICAgcmVhc29uaW5nOiBhcHByb3ZhbFRyYWNlLFxuICAgICAgfSlcbiAgICAgIGlmIChpc0FjdGl2ZSkge1xuICAgICAgICBpc1Byb2Nlc3NpbmdSZWYuY3VycmVudCA9IGZhbHNlXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBnZXRDaGF0c1N0b3JlU3RhdGUoKS5tYXJrQ2hhdEFzVW5yZWFkKHNlc3Npb25JZClcbiAgICAgICAgbm90aWZ5U2Vzc2lvbkZpbmlzaGVkSW5CYWNrZ3JvdW5kKHNlc3Npb25JZCwgJ2FwcHJvdmFsX3JlcXVpcmVkJylcbiAgICAgIH1cbiAgICB9LFxuICAgIFthZ2VudCwgY29tbWl0VG9TZXNzaW9uLCBkcm9wRnJvbVNlc3Npb24sIGV2ZW50XVxuICApXG5cbiAgY29uc3Qge1xuICAgIGFza01haWEsXG4gICAgcmV0cnlDb21wbGV0aW9uLFxuICAgIGlzTG9hZGluZzogd2FpdGluZ1Jlc3BvbnNlLFxuICAgIGlzV3JpdGluZyxcbiAgICBsb2FkaW5nTWVzc2FnZSxcbiAgICBzdHJlYW1BY3Rpdml0eSxcbiAgICB1cGRhdGVTdHJlYW1BY3Rpdml0eSxcbiAgICBzdG9wU3RyZWFtaW5nLFxuICB9ID0gdXNlT3JjaGVzdHJhdG9yU3RyZWFtKHtcbiAgICBhY3RpdmVTZXNzaW9uSWQsXG4gICAgb25FcnJvcjogaGFuZGxlU3RyZWFtRXJyb3IsXG4gICAgb25TdHJlYW1VcGRhdGU6IGhhbmRsZVN0cmVhbVVwZGF0ZSxcbiAgICBvbkZpbmlzaFN0cmVhbTogaGFuZGxlU3RyZWFtRmluaXNoLFxuICAgIG9uU3RvcDogaGFuZGxlU3RyZWFtU3RvcCxcbiAgICBvbkFwcHJvdmFsUmVxdWlyZWQ6IGhhbmRsZUFwcHJvdmFsUmVxdWlyZWQsXG4gICAgaGl0bEV4ZWN1dGlvbkNvbnRleHRSZWYsXG4gIH0pXG5cbiAgY2xlYXJTdHJlYW1VaVJlZi5jdXJyZW50ID0gKCkgPT4ge1xuICAgIHVwZGF0ZVN0cmVhbUFjdGl2aXR5KG51bGwpXG4gICAgc2V0QWN0aXZlTG9hZGluZ3Moe30pXG4gICAgaGl0bEV4ZWN1dGlvbkNvbnRleHRSZWYuY3VycmVudCA9IG51bGxcbiAgfVxuXG4gIGNvbnN0IGN1cnJlbnRQcm9qZWN0ID0gcHJvamVjdFxuXG4gIGNvbnN0IHNlbmRNZXNzYWdlID0gdXNlQ2FsbGJhY2soXG4gICAgYXN5bmMgKFxuICAgICAgbWVzc2FnZTogc3RyaW5nLFxuICAgICAgYXR0YWNobWVudHNPck9wdGlvbnM/OiBBdHRhY2htZW50RmlsZVtdIHwgU2VuZE1lc3NhZ2VPcHRpb25zLFxuICAgICAgZmFxSWQ/OiBzdHJpbmcsXG4gICAgICBhZ2VudFN1Z2dlc3Rpb25JZD86IHN0cmluZyxcbiAgICAgIG1lbnRpb25zPzogQ29udGV4dE1lbnRpb25bXSxcbiAgICAgIGZ1YUlkPzogc3RyaW5nLFxuICAgICAgc2NJZD86IHN0cmluZ1xuICAgICkgPT4ge1xuICAgICAgaWYgKGlzUHJvY2Vzc2luZ1JlZi5jdXJyZW50IHx8IHdhaXRpbmdSZXNwb25zZSB8fCBsb2FkaW5nTWVzc2FnZXMpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIC8vIFRvcGUgZGUgY29uY3VycmVuY2lhOiBzaSBlc3RhIHNlc2nDs24gbm8gZXN0w6EgZ2VuZXJhbmRvIHkgeWEgaGF5XG4gICAgICAvLyBNQVhfQ09OQ1VSUkVOVF9TVFJFQU1TIGFjdGl2YXMsIGF2aXNhbW9zIHkgbm8gYXJyYW5jYW1vcyBvdHJhLlxuICAgICAgY29uc3Qgd2lsbFN0YXJ0TmV3U3RyZWFtID0gIXNlc3Npb25TdHJlYW1NYW5hZ2VyLmlzQWN0aXZlKGN1cnJlbnRDaGF0SWQuY3VycmVudClcbiAgICAgIGlmICh3aWxsU3RhcnROZXdTdHJlYW0gJiYgc2Vzc2lvblN0cmVhbU1hbmFnZXIuZ2V0QWN0aXZlQ291bnQoKSA+PSBNQVhfQ09OQ1VSUkVOVF9TVFJFQU1TKSB7XG4gICAgICAgIGRvY3VtZW50LmRpc3BhdGNoRXZlbnQoXG4gICAgICAgICAgbmV3IEN1c3RvbUV2ZW50KCdzbmFja2Jhci1ldmVudCcsIHtcbiAgICAgICAgICAgIGRldGFpbDogeyBzaG93OiB0cnVlLCBzZXZlcml0eTogJ2luZm8nLCBtZXNzYWdlOiB0KCdjaGF0LnRvb01hbnlBY3RpdmVTZXNzaW9ucycpIH0sXG4gICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgY29uc3QgeyBhdHRhY2htZW50cywgb3B0aW9ucyB9ID0gbm9ybWFsaXplU2VuZE1lc3NhZ2VBcmdzKGF0dGFjaG1lbnRzT3JPcHRpb25zKVxuICAgICAgLy8gTGFzIG1lbnRpb25zIHB1ZWRlbiB2ZW5pciB2w61hIDV0byBwYXLDoW1ldHJvIChjYWxsIHBvc2l0aW9uYWwgZGVzZGUgZWwgZm9vdGVyKVxuICAgICAgLy8gbyB2w61hIFNlbmRNZXNzYWdlT3B0aW9ucyAoY2FsbCBwcm9ncmFtw6F0aWNvKS4gRWwgcGFyw6FtZXRybyBleHBsw61jaXRvIGdhbmEuXG4gICAgICBjb25zdCBlZmZlY3RpdmVNZW50aW9ucyA9IG1lbnRpb25zID8/IG9wdGlvbnMubWVudGlvbnNcbiAgICAgIGNvbnN0IGNvbnRleHRNZXNzYWdlOiBDb250ZXh0TWVzc2FnZSB8IHVuZGVmaW5lZCA9IGJ1aWxkQ29udGV4dE1lc3NhZ2UoZWZmZWN0aXZlTWVudGlvbnMpXG4gICAgICBjb25zdCBwYXlsb2FkRnVhSWQgPSBmdWFJZCA/PyBvcHRpb25zLmZ1YUlkXG4gICAgICBjb25zdCBwYXlsb2FkU2NJZCA9IHNjSWQgPz8gb3B0aW9ucy5zY0lkXG4gICAgICBjb25zdCBwYXlsb2FkQ29udGV4dERhdGEgPSBvcHRpb25zLmNvbnRleHREYXRhXG4gICAgICBjb25zdCBkaXNwbGF5TWVzc2FnZSA9IGZvcm1hdFF1aWNrQWN0aW9uTWVzc2FnZUZvckRpc3BsYXkobWVzc2FnZSwge1xuICAgICAgICBmdWFJZDogcGF5bG9hZEZ1YUlkLFxuICAgICAgICBzY0lkOiBwYXlsb2FkU2NJZCxcbiAgICAgIH0pXG5cbiAgICAgIGlzUHJvY2Vzc2luZ1JlZi5jdXJyZW50ID0gdHJ1ZVxuICAgICAgc2V0QWN0aXZlQ2hhdElkKGN1cnJlbnRDaGF0SWQuY3VycmVudClcbiAgICAgIGNvbnN0IG5ld01lc3NhZ2VJZCA9IHV1aWR2NCgpXG4gICAgICBjdXJyZW50TWVzc2FnZUlkLmN1cnJlbnQgPSBuZXdNZXNzYWdlSWRcbiAgICAgIGN1cnJlbnRVc2VyUXVlc3Rpb24uY3VycmVudCA9IG1lc3NhZ2VcblxuICAgICAgaWYgKCFyZXBvcnRlZEV2ZW50LmN1cnJlbnQpIHtcbiAgICAgICAgZXZlbnQoRVZFTlRTLnBtQWlUeXBlZFRleHQpXG4gICAgICAgIHJlcG9ydGVkRXZlbnQuY3VycmVudCA9IHRydWVcbiAgICAgIH1cblxuICAgICAgLy8gVmVyaWZpY2FyIHNpIGVsIGNvbnRleHRvIGdsb2JhbCBlc3TDoSBkZXNhY3R1YWxpemFkb1xuICAgICAgY29uc3QgbGFzdE1lc3NhZ2VXaXRoUHJvamVjdCA9IG1lc3NhZ2VzUmVmLmN1cnJlbnQuZmlsdGVyKG1zZyA9PiBtc2cucHJvamVjdElkKS5hdCgtMSlcblxuICAgICAgY29uc3QgY3VycmVudEFnZW50RnJvbU1lc3NhZ2VzID0gbWVzc2FnZXNSZWYuY3VycmVudD8uW21lc3NhZ2VzUmVmLmN1cnJlbnQubGVuZ3RoIC0gMV0/LmFnZW50SWRcblxuICAgICAgY29uc3Qgc2Vzc2lvbklkID0gY3VycmVudENoYXRJZC5jdXJyZW50XG4gICAgICBjb25zdCB7XG4gICAgICAgIGNoaXBzUHJvamVjdDogY3R4Q2hpcHNQcm9qZWN0LFxuICAgICAgICBwcm9qZWN0OiBjdHhQcm9qZWN0LFxuICAgICAgICBjbGllbnQ6IGN0eENsaWVudCxcbiAgICAgICAgdGFzazogY3R4VGFzayxcbiAgICAgIH0gPSBjb250ZXh0UmVmLmN1cnJlbnRcblxuICAgICAgZW5zdXJlU2Vzc2lvbkluU2lkZWJhcih7XG4gICAgICAgIHNlc3Npb25JZCxcbiAgICAgICAgdGl0bGU6IGJ1aWxkU2lkZWJhclNlc3Npb25UaXRsZShkaXNwbGF5TWVzc2FnZSksXG4gICAgICAgIGFnZW50LFxuICAgICAgICBhZ2VudElkOiBjdXJyZW50QWdlbnRGcm9tTWVzc2FnZXMgfHwgYWdlbnQ/LmlkLFxuICAgICAgICBwcm9qZWN0OiBjdHhQcm9qZWN0LFxuICAgICAgICBjbGllbnQ6IGN0eENsaWVudCxcbiAgICAgICAgYXR0YWNobWVudHMsXG4gICAgICB9KVxuXG4gICAgICAvLyBObyBhZ3JlZ2FyIHByb2plY3RJZCBhbCBtZW5zYWplIGRlbCB1c3VhcmlvIC0gc2UgZGV0ZXJtaW5hcsOhIGRlc3B1w6lzXG4gICAgICBjb21taXRUb1Nlc3Npb24oc2Vzc2lvbklkLCB7XG4gICAgICAgIGlkOiBgcXVlc3Rpb24tJHtjdXJyZW50TWVzc2FnZUlkLmN1cnJlbnR9YCxcbiAgICAgICAgbWVzc2FnZTogZGlzcGxheU1lc3NhZ2UsXG4gICAgICAgIGRhdGU6IG5ldyBEYXRlKCksXG4gICAgICAgIHVzZXI6IGN1cnJlbnRVc2VyLFxuICAgICAgICByb2xlOiBDaGF0SGlzdG9yeVJvbGUuVVNFUixcbiAgICAgICAgc291cmNlczogYXR0YWNobWVudHMsXG4gICAgICAgIC4uLihjb250ZXh0TWVzc2FnZSA/IHsgY29udGV4dE1lc3NhZ2UgfSA6IHt9KSxcbiAgICAgIH0pXG5cbiAgICAgIGN1cnJlbnRNZXNzYWdlSWQuY3VycmVudCA9IHV1aWR2NCgpXG5cbiAgICAgIGNvbnN0IHN0cmVhbWluZ1BsYWNlaG9sZGVySWQgPSBzdHJlYW1pbmdQbGFjZWhvbGRlck1lc3NhZ2VJZChjdXJyZW50TWVzc2FnZUlkLmN1cnJlbnQpXG4gICAgICBzdHJlYW1pbmdQbGFjZWhvbGRlcklkUmVmLmN1cnJlbnQgPSBzdHJlYW1pbmdQbGFjZWhvbGRlcklkXG4gICAgICBhY3RpdmVTdHJlYW1DaGF0SWRSZWYuY3VycmVudCA9IHNlc3Npb25JZFxuICAgICAgc2Vzc2lvblN0cmVhbWluZ1RleHQuc3RhcnQoc2Vzc2lvbklkLCBzdHJlYW1pbmdQbGFjZWhvbGRlcklkKVxuICAgICAgY29tbWl0VG9TZXNzaW9uKHNlc3Npb25JZCwge1xuICAgICAgICBpZDogc3RyZWFtaW5nUGxhY2Vob2xkZXJJZCxcbiAgICAgICAgbWVzc2FnZTogJycsXG4gICAgICAgIGRhdGU6IG5ldyBEYXRlKCksXG4gICAgICAgIHVzZXI6IHsgaWQ6ICdhc3Npc3RhbnQnLCBuYW1lOiBhZ2VudD8ubmFtZSB8fCAnQXNzaXN0YW50JyB9LFxuICAgICAgICByb2xlOiBDaGF0SGlzdG9yeVJvbGUuQVNTSVNUQU5ULFxuICAgICAgfSlcblxuICAgICAgbGV0IGZpbmFsTWVzc2FnZSA9IG1lc3NhZ2VcblxuICAgICAgaWYgKG1lc3NhZ2UgPT09IHQoJ3FhLml0ZW1zLnJlbnRhYmlsaWRhZF9wcm95ZWN0bycpKSB7XG4gICAgICAgIGZpbmFsTWVzc2FnZSA9IGBGQVE6ICR7dCgncWEuaXRlbXMucmVudGFiaWxpZGFkX3Byb3llY3RvJyl9IC0gVGlwbyBkZSByZW50YWJpbGlkYWQ6ICR7XG4gICAgICAgICAgb3B0aW9ucy5wcm9qZWN0Q2hhbmdlZD8uaW5jb21lVHlwZSB8fCBjb250ZXh0UmVmLmN1cnJlbnQucHJvamVjdD8uaW5jb21lVHlwZVxuICAgICAgICB9YFxuICAgICAgfVxuXG4gICAgICBjb25zdCBoaXN0b3J5ID0gbWVzc2FnZXNSZWYuY3VycmVudC5tYXAoaGlzdG9yeU1lc3NhZ2UgPT4gKHtcbiAgICAgICAgY29udGVudDogaGlzdG9yeU1lc3NhZ2UubWVzc2FnZSxcbiAgICAgICAgcm9sZTogaGlzdG9yeU1lc3NhZ2UudXNlci5pZCA9PT0gYXV0aFVzZXIuaWQudG9TdHJpbmcoKSA/IENoYXRIaXN0b3J5Um9sZS5VU0VSIDogQ2hhdEhpc3RvcnlSb2xlLkFTU0lTVEFOVCxcbiAgICAgIH0pKVxuXG4gICAgICBjb25zdCBsYXN0TWVzc2FnZVByb2plY3RJZCA9IGxhc3RNZXNzYWdlV2l0aFByb2plY3Q/LnByb2plY3RJZFxuICAgICAgY29uc3QgcHJvamVjdFRvUmVxdWVzdCA9IHJlc29sdmVQcm9qZWN0VG9SZXF1ZXN0KGN0eENoaXBzUHJvamVjdCwgbGFzdE1lc3NhZ2VQcm9qZWN0SWQpXG5cbiAgICAgIGNvbnN0IHByb2plY3RzID0gYXdhaXQgZmV0Y2hQcm9qZWN0cyhbcHJvamVjdFRvUmVxdWVzdF0pXG5cbiAgICAgIGNvbnN0IHBheWxvYWRGYXFJZCA9IGZhcUlkID8/IG9wdGlvbnMuZmFxSWRcbiAgICAgIGNvbnN0IHBheWxvYWRBZ2VudFN1Z2dlc3Rpb25JZCA9IGFnZW50U3VnZ2VzdGlvbklkID8/IG9wdGlvbnMuYWdlbnRTdWdnZXN0aW9uSWRcblxuICAgICAgY29uc3QgcGF5bG9hZERhdGEgPSB7XG4gICAgICAgIG1lc3NhZ2U6IGZpbmFsTWVzc2FnZSxcbiAgICAgICAgaGlzdG9yeSxcbiAgICAgICAgcHJvamVjdElkOiBwcm9qZWN0VG9SZXF1ZXN0LFxuICAgICAgICBsYW5nOiBhdXRoVXNlci5sYW5nLFxuICAgICAgICB1c2VySWQ6IGF1dGhVc2VyLmlkLnRvU3RyaW5nKCksXG4gICAgICAgIGZpcnN0TmFtZTogYXV0aFVzZXIuZmlyc3ROYW1lLFxuICAgICAgICBsYXN0TmFtZTogYXV0aFVzZXIubGFzdE5hbWUsXG4gICAgICAgIGNvbXBhbnlJZDogYXV0aFVzZXIuY29tcGFueV9pZC50b1N0cmluZygpLFxuICAgICAgICBjaGF0SWQ6IGN1cnJlbnRDaGF0SWQuY3VycmVudCxcbiAgICAgICAgbWVzc2FnZUlkOiBjdXJyZW50TWVzc2FnZUlkLmN1cnJlbnQsXG4gICAgICAgIGFnZW50TmFtZTogYWdlbnQ/Lm5hbWUgfHwgJycsXG4gICAgICAgIGFnZW50SWQ6IGN1cnJlbnRBZ2VudEZyb21NZXNzYWdlcyB8fCBhZ2VudD8uaWQhLFxuICAgICAgICBpc1dlYlNlYXJjaEFjdGl2ZTogaXNXZWJTZWFyY2hBY3RpdmVSZWYuY3VycmVudCxcbiAgICAgICAgaXNEZWVwU2VhcmNoQWN0aXZlOiBpc0RlZXBTZWFyY2hBY3RpdmVSZWYuY3VycmVudCxcbiAgICAgICAgaXNBdXRvQXBwcm92ZUFjdGl2ZTogaXNBdXRvQXBwcm92ZUFjdGl2ZVJlZi5jdXJyZW50LFxuICAgICAgICAuLi4oY3R4UHJvamVjdD8uZmVlSWQgIT0gbnVsbCA/IHsgZmVlSWQ6IE51bWJlcihjdHhQcm9qZWN0LmZlZUlkKSB9IDoge30pLFxuICAgICAgICAuLi5yZXNvbHZlQ2xpZW50UGF5bG9hZChjdHhDbGllbnQsIGN0eFByb2plY3QpLFxuICAgICAgICAuLi4ocHJvamVjdHM/Lmxlbmd0aCA/IHsgcHJvamVjdE5hbWU6IHByb2plY3RzWzBdLm5hbWUgfSA6IHt9KSxcbiAgICAgICAgLi4uKGN0eFRhc2s/LmlkICE9IG51bGxcbiAgICAgICAgICA/IHsgdGFza0lkOiBOdW1iZXIoY3R4VGFzay5pZCksIC4uLihjdHhUYXNrLm5hbWUgPyB7IHRhc2tOYW1lOiBjdHhUYXNrLm5hbWUgfSA6IHt9KSB9XG4gICAgICAgICAgOiB7fSksXG4gICAgICAgIC4uLihhdHRhY2htZW50cy5sZW5ndGggPiAwID8geyBhdHRhY2htZW50cyB9IDoge30pLFxuICAgICAgICAuLi4ocGF5bG9hZEZhcUlkID8geyBmYXFJZDogcGF5bG9hZEZhcUlkIH0gOiB7fSksXG4gICAgICAgIC4uLihwYXlsb2FkQWdlbnRTdWdnZXN0aW9uSWQgPyB7IGFnZW50U3VnZ2VzdGlvbklkOiBwYXlsb2FkQWdlbnRTdWdnZXN0aW9uSWQgfSA6IHt9KSxcbiAgICAgICAgLi4uKHBheWxvYWRGdWFJZCA/IHsgZnVhSWQ6IHBheWxvYWRGdWFJZCB9IDoge30pLFxuICAgICAgICAuLi4ocGF5bG9hZFNjSWQgPyB7IHNjSWQ6IHBheWxvYWRTY0lkIH0gOiB7fSksXG4gICAgICAgIC4uLihhZ2VudD8uZW50aXR5ICE9IG51bGwgPyB7IGFnZW50RW50aXR5OiBhZ2VudC5lbnRpdHkgfSA6IHt9KSxcbiAgICAgICAgLi4uKGFnZW50Py50eXBlICE9IG51bGwgPyB7IGFnZW50VHlwZTogYWdlbnQudHlwZSB9IDoge30pLFxuICAgICAgICAuLi4oYWdlbnQ/LmVtb2ppICE9IG51bGwgPyB7IGFnZW50RW1vamk6IGFnZW50LmVtb2ppIH0gOiB7fSksXG4gICAgICAgIC4uLihjb250ZXh0TWVzc2FnZSA/IHsgY29udGV4dE1lc3NhZ2UgfSA6IHt9KSxcbiAgICAgICAgLi4uKHBheWxvYWRDb250ZXh0RGF0YSA/IHsgY29udGV4dERhdGE6IHBheWxvYWRDb250ZXh0RGF0YSB9IDoge30pLFxuICAgICAgfVxuXG4gICAgICBhc2tNYWlhKHBheWxvYWREYXRhKVxuICAgIH0sXG4gICAgW1xuICAgICAgYWRkTWVzc2FnZSxcbiAgICAgIGNvbW1pdFRvU2Vzc2lvbixcbiAgICAgIGV2ZW50LFxuICAgICAgYXNrTWFpYSxcbiAgICAgIHByb2plY3QsXG4gICAgICBjbGllbnQsXG4gICAgICB0YXNrLFxuICAgICAgY2hpcHNQcm9qZWN0LFxuICAgICAgYXV0aFVzZXIsXG4gICAgICBhZ2VudCxcbiAgICAgIHQsXG4gICAgICB3YWl0aW5nUmVzcG9uc2UsXG4gICAgICBsb2FkaW5nTWVzc2FnZXMsXG4gICAgICBpc1dlYlNlYXJjaEFjdGl2ZSxcbiAgICAgIGlzRGVlcFNlYXJjaEFjdGl2ZSxcbiAgICBdXG4gIClcblxuICBjb25zdCBjaGFuZ2VQcm9qZWN0ID0gdXNlQ2FsbGJhY2soXG4gICAgKG9wdGlvbjogUHJvamVjdCkgPT4ge1xuICAgICAgaWYgKCFjdXJyZW50VXNlclF1ZXN0aW9uLmN1cnJlbnQpIHJldHVyblxuXG4gICAgICBpZiAob3B0aW9uLmlkICE9PSBwcm9qZWN0Py5pZCkge1xuICAgICAgICBzZXRQcm9qZWN0KG9wdGlvbilcbiAgICAgIH1cblxuICAgICAgaWYgKHByb2plY3QgJiYgY3VycmVudFVzZXJRdWVzdGlvbi5jdXJyZW50KSB7XG4gICAgICAgIGNvbnN0IGhpc3RvcnkgPSBtZXNzYWdlc1JlZi5jdXJyZW50Lm1hcChoaXN0b3J5TWVzc2FnZSA9PiAoe1xuICAgICAgICAgIGNvbnRlbnQ6IGhpc3RvcnlNZXNzYWdlLm1lc3NhZ2UsXG4gICAgICAgICAgcm9sZTogaGlzdG9yeU1lc3NhZ2UudXNlci5pZCA9PT0gYXV0aFVzZXIuaWQudG9TdHJpbmcoKSA/IENoYXRIaXN0b3J5Um9sZS5VU0VSIDogQ2hhdEhpc3RvcnlSb2xlLkFTU0lTVEFOVCxcbiAgICAgICAgfSkpXG5cbiAgICAgICAgYXNrTWFpYSh7XG4gICAgICAgICAgbWVzc2FnZTogY3VycmVudFVzZXJRdWVzdGlvbi5jdXJyZW50LFxuICAgICAgICAgIGhpc3RvcnksXG4gICAgICAgICAgcHJvamVjdElkOiBvcHRpb24uaWQsXG4gICAgICAgICAgbGFuZzogYXV0aFVzZXIubGFuZyxcbiAgICAgICAgICB1c2VySWQ6IGF1dGhVc2VyLmlkLnRvU3RyaW5nKCksXG4gICAgICAgICAgZmlyc3ROYW1lOiBhdXRoVXNlci5maXJzdE5hbWUsXG4gICAgICAgICAgbGFzdE5hbWU6IGF1dGhVc2VyLmxhc3ROYW1lLFxuICAgICAgICAgIGNvbXBhbnlJZDogYXV0aFVzZXIuY29tcGFueV9pZC50b1N0cmluZygpLFxuICAgICAgICAgIGNoYXRJZDogY3VycmVudENoYXRJZC5jdXJyZW50LFxuICAgICAgICAgIG1lc3NhZ2VJZDogY3VycmVudE1lc3NhZ2VJZC5jdXJyZW50LFxuICAgICAgICAgIGFnZW50TmFtZTogYWdlbnQ/Lm5hbWUgfHwgJycsXG4gICAgICAgICAgYWdlbnRJZDogYWdlbnQ/LmlkIHx8ICcnLFxuICAgICAgICAgIGlzV2ViU2VhcmNoQWN0aXZlOiBpc1dlYlNlYXJjaEFjdGl2ZVJlZi5jdXJyZW50LFxuICAgICAgICAgIGlzRGVlcFNlYXJjaEFjdGl2ZTogaXNEZWVwU2VhcmNoQWN0aXZlUmVmLmN1cnJlbnQsXG4gICAgICAgICAgaXNBdXRvQXBwcm92ZUFjdGl2ZTogaXNBdXRvQXBwcm92ZUFjdGl2ZVJlZi5jdXJyZW50LFxuICAgICAgICAgIC4uLihvcHRpb24/LmZlZUlkICE9IG51bGwgPyB7IGZlZUlkOiBOdW1iZXIob3B0aW9uLmZlZUlkKSB9IDoge30pLFxuICAgICAgICAgIC4uLihvcHRpb24/LmNsaWVudElkICE9IG51bGwgPyB7IGNsaWVudElkOiBOdW1iZXIob3B0aW9uLmNsaWVudElkKSB9IDoge30pLFxuICAgICAgICAgIC4uLihhZ2VudD8uZW50aXR5ICE9IG51bGwgPyB7IGFnZW50RW50aXR5OiBhZ2VudC5lbnRpdHkgfSA6IHt9KSxcbiAgICAgICAgICAuLi4oYWdlbnQ/LnR5cGUgIT0gbnVsbCA/IHsgYWdlbnRUeXBlOiBhZ2VudC50eXBlIH0gOiB7fSksXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfSxcbiAgICBbcHJvamVjdCwgc2V0UHJvamVjdCwgYXNrTWFpYSwgYXV0aFVzZXIsIGlzV2ViU2VhcmNoQWN0aXZlLCBhZ2VudF1cbiAgKVxuXG4gIGNvbnN0IHJldHJ5TWVzc2FnZSA9IHVzZUNhbGxiYWNrKFxuICAgIGFzeW5jIChtZXNzYWdlOiBDaGF0TWVzc2FnZSkgPT4ge1xuICAgICAgaWYgKGlzUHJvY2Vzc2luZ1JlZi5jdXJyZW50IHx8IHdhaXRpbmdSZXNwb25zZSB8fCBsb2FkaW5nTWVzc2FnZXMpIHJldHVyblxuXG4gICAgICBjb25zdCBzZXNzaW9uSWQgPSBjdXJyZW50Q2hhdElkLmN1cnJlbnRcbiAgICAgIGlmIChzZXNzaW9uU3RyZWFtTWFuYWdlci5pc0FjdGl2ZShzZXNzaW9uSWQpKSByZXR1cm5cbiAgICAgIGlmIChzZXNzaW9uU3RyZWFtTWFuYWdlci5nZXRBY3RpdmVDb3VudCgpID49IE1BWF9DT05DVVJSRU5UX1NUUkVBTVMpIHtcbiAgICAgICAgZG9jdW1lbnQuZGlzcGF0Y2hFdmVudChcbiAgICAgICAgICBuZXcgQ3VzdG9tRXZlbnQoJ3NuYWNrYmFyLWV2ZW50Jywge1xuICAgICAgICAgICAgZGV0YWlsOiB7IHNob3c6IHRydWUsIHNldmVyaXR5OiAnaW5mbycsIG1lc3NhZ2U6IHQoJ2NoYXQudG9vTWFueUFjdGl2ZVNlc3Npb25zJykgfSxcbiAgICAgICAgICB9KVxuICAgICAgICApXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBjb25zdCBwcmV2aW91c01lc3NhZ2VzID0gbWVzc2FnZXNSZWYuY3VycmVudFxuICAgICAgaWYgKCFwcmV2aW91c01lc3NhZ2VzLnNvbWUoaXRlbSA9PiBpdGVtLmlkID09PSBtZXNzYWdlLmlkKSkgcmV0dXJuXG5cbiAgICAgIGNvbnN0IHVzZXJNZXNzYWdlID0gZmluZFVzZXJNZXNzYWdlRm9yUmV0cnkocHJldmlvdXNNZXNzYWdlcywgbWVzc2FnZSlcbiAgICAgIGlmICghdXNlck1lc3NhZ2U/Lm1lc3NhZ2U/LnRyaW0oKSAmJiAhdXNlck1lc3NhZ2U/LmF0dGFjaG1lbnRzPy5sZW5ndGggJiYgIXVzZXJNZXNzYWdlPy5zb3VyY2VzPy5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHR1cm5JZCA9IHJlc29sdmVSZXRyeVR1cm5JZChtZXNzYWdlKVxuICAgICAgY29uc3QgdXNlT3JjaGVzdHJhdG9yRmFsbGJhY2sgPSBtZXNzYWdlLmlzRnJvbnRlbmRDYW5jZWxsZWQgJiYgIW1lc3NhZ2UubWVtb3J5U2Vzc2lvbklkPy50cmltKClcbiAgICAgIGlmICghdHVybklkICYmICF1c2VPcmNoZXN0cmF0b3JGYWxsYmFjaykgcmV0dXJuXG5cbiAgICAgIGNvbnN0IHRydW5jYXRlZCA9IG1lc3NhZ2VzV2l0aG91dFJldHJpZWRUdXJuKHByZXZpb3VzTWVzc2FnZXMsIG1lc3NhZ2UpXG5cbiAgICAgIGlzUHJvY2Vzc2luZ1JlZi5jdXJyZW50ID0gdHJ1ZVxuICAgICAgcmV0cnlTbmFwc2hvdFJlZi5jdXJyZW50ID0gcHJldmlvdXNNZXNzYWdlc1xuICAgICAgc2V0QWN0aXZlQ2hhdElkKHNlc3Npb25JZClcblxuICAgICAgY29uc3QgbmV3TWVzc2FnZUlkID0gdXVpZHY0KClcbiAgICAgIGN1cnJlbnRNZXNzYWdlSWQuY3VycmVudCA9IG5ld01lc3NhZ2VJZFxuICAgICAgY3VycmVudFVzZXJRdWVzdGlvbi5jdXJyZW50ID0gdXNlck1lc3NhZ2UubWVzc2FnZVxuICAgICAgY29uc3Qgc3RyZWFtaW5nUGxhY2Vob2xkZXJJZCA9IGBhbnN3ZXItJHtuZXdNZXNzYWdlSWR9LXN0cmVhbWluZ2BcbiAgICAgIHN0cmVhbWluZ1BsYWNlaG9sZGVySWRSZWYuY3VycmVudCA9IHN0cmVhbWluZ1BsYWNlaG9sZGVySWRcbiAgICAgIGFjdGl2ZVN0cmVhbUNoYXRJZFJlZi5jdXJyZW50ID0gc2Vzc2lvbklkXG5cbiAgICAgIGNvbnN0IHBsYWNlaG9sZGVyOiBDaGF0TWVzc2FnZSA9IHtcbiAgICAgICAgaWQ6IHN0cmVhbWluZ1BsYWNlaG9sZGVySWQsXG4gICAgICAgIG1lc3NhZ2U6ICcnLFxuICAgICAgICBkYXRlOiBuZXcgRGF0ZSgpLFxuICAgICAgICB1c2VyOiB7IGlkOiAnYXNzaXN0YW50JywgbmFtZTogYWdlbnQ/Lm5hbWUgfHwgJ0Fzc2lzdGFudCcgfSxcbiAgICAgICAgcm9sZTogQ2hhdEhpc3RvcnlSb2xlLkFTU0lTVEFOVCxcbiAgICAgIH1cbiAgICAgIGNvbnN0IG5leHRNZXNzYWdlcyA9IFsuLi50cnVuY2F0ZWQsIHBsYWNlaG9sZGVyXVxuICAgICAgbWVzc2FnZXNSZWYuY3VycmVudCA9IG5leHRNZXNzYWdlc1xuICAgICAgcmVwbGFjZU1lc3NhZ2VzKG5leHRNZXNzYWdlcylcbiAgICAgIHNlc3Npb25TdHJlYW1pbmdUZXh0LnN0YXJ0KHNlc3Npb25JZCwgc3RyZWFtaW5nUGxhY2Vob2xkZXJJZClcblxuICAgICAgY29uc3Qge1xuICAgICAgICBjaGlwc1Byb2plY3Q6IGN0eENoaXBzUHJvamVjdCxcbiAgICAgICAgcHJvamVjdDogY3R4UHJvamVjdCxcbiAgICAgICAgY2xpZW50OiBjdHhDbGllbnQsXG4gICAgICAgIHRhc2s6IGN0eFRhc2ssXG4gICAgICB9ID0gY29udGV4dFJlZi5jdXJyZW50XG4gICAgICBjb25zdCBsYXN0TWVzc2FnZVdpdGhQcm9qZWN0ID0gdHJ1bmNhdGVkLmZpbHRlcihtc2cgPT4gbXNnLnByb2plY3RJZCkuYXQoLTEpXG4gICAgICBjb25zdCBwcm9qZWN0VG9SZXF1ZXN0ID0gcmVzb2x2ZVByb2plY3RUb1JlcXVlc3QoY3R4Q2hpcHNQcm9qZWN0LCBsYXN0TWVzc2FnZVdpdGhQcm9qZWN0Py5wcm9qZWN0SWQpXG4gICAgICBjb25zdCBjdXJyZW50QWdlbnRGcm9tTWVzc2FnZXMgPSB0cnVuY2F0ZWQuYXQoLTEpPy5hZ2VudElkIHx8IG1lc3NhZ2UuYWdlbnRJZFxuICAgICAgY29uc3QgYXR0YWNobWVudHMgPSBBcnJheS5pc0FycmF5KHVzZXJNZXNzYWdlLmF0dGFjaG1lbnRzKVxuICAgICAgICA/IHVzZXJNZXNzYWdlLmF0dGFjaG1lbnRzXG4gICAgICAgIDogQXJyYXkuaXNBcnJheSh1c2VyTWVzc2FnZS5zb3VyY2VzKVxuICAgICAgICAgID8gdXNlck1lc3NhZ2Uuc291cmNlc1xuICAgICAgICAgIDogW11cblxuICAgICAgY29uc3QgcmVwbGF5VmlhT3JjaGVzdHJhdG9yID0gYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCBoaXN0b3J5ID0gdHJ1bmNhdGVkLm1hcChoaXN0b3J5TWVzc2FnZSA9PiAoe1xuICAgICAgICAgIGNvbnRlbnQ6IGhpc3RvcnlNZXNzYWdlLm1lc3NhZ2UsXG4gICAgICAgICAgcm9sZTogaGlzdG9yeU1lc3NhZ2UudXNlci5pZCA9PT0gYXV0aFVzZXIuaWQudG9TdHJpbmcoKSA/IENoYXRIaXN0b3J5Um9sZS5VU0VSIDogQ2hhdEhpc3RvcnlSb2xlLkFTU0lTVEFOVCxcbiAgICAgICAgfSkpXG4gICAgICAgIGNvbnN0IHByb2plY3RzID0gcHJvamVjdFRvUmVxdWVzdCA/IGF3YWl0IGZldGNoUHJvamVjdHMoW3Byb2plY3RUb1JlcXVlc3RdKSA6IG51bGxcblxuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBhc2tNYWlhKHtcbiAgICAgICAgICBtZXNzYWdlOiB1c2VyTWVzc2FnZS5tZXNzYWdlLFxuICAgICAgICAgIGhpc3RvcnksXG4gICAgICAgICAgcHJvamVjdElkOiBwcm9qZWN0VG9SZXF1ZXN0LFxuICAgICAgICAgIGxhbmc6IGF1dGhVc2VyLmxhbmcsXG4gICAgICAgICAgdXNlcklkOiBhdXRoVXNlci5pZC50b1N0cmluZygpLFxuICAgICAgICAgIGZpcnN0TmFtZTogYXV0aFVzZXIuZmlyc3ROYW1lLFxuICAgICAgICAgIGxhc3ROYW1lOiBhdXRoVXNlci5sYXN0TmFtZSxcbiAgICAgICAgICBjb21wYW55SWQ6IGF1dGhVc2VyLmNvbXBhbnlfaWQudG9TdHJpbmcoKSxcbiAgICAgICAgICBjaGF0SWQ6IHNlc3Npb25JZCxcbiAgICAgICAgICBtZXNzYWdlSWQ6IG5ld01lc3NhZ2VJZCxcbiAgICAgICAgICBhZ2VudE5hbWU6IGFnZW50Py5uYW1lIHx8ICcnLFxuICAgICAgICAgIGFnZW50SWQ6IFN0cmluZyhjdXJyZW50QWdlbnRGcm9tTWVzc2FnZXMgfHwgYWdlbnQ/LmlkIHx8ICcnKSxcbiAgICAgICAgICBpc1dlYlNlYXJjaEFjdGl2ZTogaXNXZWJTZWFyY2hBY3RpdmVSZWYuY3VycmVudCxcbiAgICAgICAgICBpc0RlZXBTZWFyY2hBY3RpdmU6IGlzRGVlcFNlYXJjaEFjdGl2ZVJlZi5jdXJyZW50LFxuICAgICAgICAgIC4uLihjdHhQcm9qZWN0Py5mZWVJZCAhPSBudWxsID8geyBmZWVJZDogTnVtYmVyKGN0eFByb2plY3QuZmVlSWQpIH0gOiB7fSksXG4gICAgICAgICAgLi4ucmVzb2x2ZUNsaWVudFBheWxvYWQoY3R4Q2xpZW50LCBjdHhQcm9qZWN0KSxcbiAgICAgICAgICAuLi4ocHJvamVjdHM/Lmxlbmd0aCA/IHsgcHJvamVjdE5hbWU6IHByb2plY3RzWzBdLm5hbWUgfSA6IHt9KSxcbiAgICAgICAgICAuLi4oY3R4VGFzaz8uaWQgIT0gbnVsbFxuICAgICAgICAgICAgPyB7IHRhc2tJZDogTnVtYmVyKGN0eFRhc2suaWQpLCAuLi4oY3R4VGFzay5uYW1lID8geyB0YXNrTmFtZTogY3R4VGFzay5uYW1lIH0gOiB7fSkgfVxuICAgICAgICAgICAgOiB7fSksXG4gICAgICAgICAgLi4uKGF0dGFjaG1lbnRzLmxlbmd0aCA+IDAgPyB7IGF0dGFjaG1lbnRzIH0gOiB7fSksXG4gICAgICAgICAgLi4uKGFnZW50Py5lbnRpdHkgIT0gbnVsbCA/IHsgYWdlbnRFbnRpdHk6IGFnZW50LmVudGl0eSB9IDoge30pLFxuICAgICAgICAgIC4uLihhZ2VudD8udHlwZSAhPSBudWxsID8geyBhZ2VudFR5cGU6IGFnZW50LnR5cGUgfSA6IHt9KSxcbiAgICAgICAgICAuLi4oYWdlbnQ/LmVtb2ppICE9IG51bGwgPyB7IGFnZW50RW1vamk6IGFnZW50LmVtb2ppIH0gOiB7fSksXG4gICAgICAgICAgLi4uKHVzZXJNZXNzYWdlLmNvbnRleHRNZXNzYWdlID8geyBjb250ZXh0TWVzc2FnZTogdXNlck1lc3NhZ2UuY29udGV4dE1lc3NhZ2UgfSA6IHt9KSxcbiAgICAgICAgfSlcblxuICAgICAgICBpZiAoIXJlc3VsdC5zdGFydGVkKSB7XG4gICAgICAgICAgcmV0cnlTbmFwc2hvdFJlZi5jdXJyZW50ID0gbnVsbFxuICAgICAgICAgIG1lc3NhZ2VzUmVmLmN1cnJlbnQgPSBwcmV2aW91c01lc3NhZ2VzXG4gICAgICAgICAgcmVwbGFjZU1lc3NhZ2VzKHByZXZpb3VzTWVzc2FnZXMpXG4gICAgICAgICAgc2Vzc2lvblN0cmVhbWluZ1RleHQuY2xlYXIoc2Vzc2lvbklkKVxuICAgICAgICAgIHN0cmVhbWluZ1BsYWNlaG9sZGVySWRSZWYuY3VycmVudCA9IG51bGxcbiAgICAgICAgICBhY3RpdmVTdHJlYW1DaGF0SWRSZWYuY3VycmVudCA9IG51bGxcbiAgICAgICAgICBpc1Byb2Nlc3NpbmdSZWYuY3VycmVudCA9IGZhbHNlXG4gICAgICAgICAgaWYgKHJlc3VsdC5yZWFzb24gPT09ICdsaW1pdCcpIHtcbiAgICAgICAgICAgIGRvY3VtZW50LmRpc3BhdGNoRXZlbnQoXG4gICAgICAgICAgICAgIG5ldyBDdXN0b21FdmVudCgnc25hY2tiYXItZXZlbnQnLCB7XG4gICAgICAgICAgICAgICAgZGV0YWlsOiB7IHNob3c6IHRydWUsIHNldmVyaXR5OiAnaW5mbycsIG1lc3NhZ2U6IHQoJ2NoYXQudG9vTWFueUFjdGl2ZVNlc3Npb25zJykgfSxcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHVzZU9yY2hlc3RyYXRvckZhbGxiYWNrIHx8ICF0dXJuSWQpIHtcbiAgICAgICAgYXdhaXQgcmVwbGF5VmlhT3JjaGVzdHJhdG9yKClcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHJldHJ5Q29tcGxldGlvbih7XG4gICAgICAgIGNoYXRJZDogc2Vzc2lvbklkLFxuICAgICAgICBtZXNzYWdlSWQ6IG5ld01lc3NhZ2VJZCxcbiAgICAgICAgbWVtb3J5U2Vzc2lvbklkOiB0dXJuSWQsXG4gICAgICAgIGxhbmc6IGF1dGhVc2VyLmxhbmcsXG4gICAgICAgIGFnZW50SWQ6IFN0cmluZyhjdXJyZW50QWdlbnRGcm9tTWVzc2FnZXMgfHwgYWdlbnQ/LmlkIHx8ICcnKSxcbiAgICAgICAgYWdlbnROYW1lOiBhZ2VudD8ubmFtZSB8fCAnJyxcbiAgICAgICAgLi4uKGFnZW50Py50eXBlICE9IG51bGwgPyB7IGFnZW50VHlwZTogYWdlbnQudHlwZSB9IDoge30pLFxuICAgICAgICBpc1dlYlNlYXJjaEFjdGl2ZTogaXNXZWJTZWFyY2hBY3RpdmVSZWYuY3VycmVudCxcbiAgICAgICAgaXNEZWVwU2VhcmNoQWN0aXZlOiBpc0RlZXBTZWFyY2hBY3RpdmVSZWYuY3VycmVudCxcbiAgICAgICAgLi4uKHByb2plY3RUb1JlcXVlc3QgPyB7IHByb2plY3RJZDogcHJvamVjdFRvUmVxdWVzdCB9IDoge30pLFxuICAgICAgICAuLi5yZXNvbHZlQ2xpZW50UGF5bG9hZChjdHhDbGllbnQsIGN0eFByb2plY3QpLFxuICAgICAgICAuLi4oY3R4VGFzaz8uaWQgIT0gbnVsbCA/IHsgdGFza0lkOiBOdW1iZXIoY3R4VGFzay5pZCkgfSA6IHt9KSxcbiAgICAgIH0pXG5cbiAgICAgIGlmIChyZXN1bHQuc3RhcnRlZCkgcmV0dXJuXG5cbiAgICAgIGlmIChyZXN1bHQucmVhc29uID09PSAndHVybl9ub3RfZm91bmQnKSB7XG4gICAgICAgIGF3YWl0IHJlcGxheVZpYU9yY2hlc3RyYXRvcigpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICByZXRyeVNuYXBzaG90UmVmLmN1cnJlbnQgPSBudWxsXG4gICAgICBtZXNzYWdlc1JlZi5jdXJyZW50ID0gcHJldmlvdXNNZXNzYWdlc1xuICAgICAgcmVwbGFjZU1lc3NhZ2VzKHByZXZpb3VzTWVzc2FnZXMpXG4gICAgICBzZXNzaW9uU3RyZWFtaW5nVGV4dC5jbGVhcihzZXNzaW9uSWQpXG4gICAgICBzdHJlYW1pbmdQbGFjZWhvbGRlcklkUmVmLmN1cnJlbnQgPSBudWxsXG4gICAgICBhY3RpdmVTdHJlYW1DaGF0SWRSZWYuY3VycmVudCA9IG51bGxcbiAgICAgIGlzUHJvY2Vzc2luZ1JlZi5jdXJyZW50ID0gZmFsc2VcbiAgICAgIGlmIChyZXN1bHQucmVhc29uID09PSAnbGltaXQnKSB7XG4gICAgICAgIGRvY3VtZW50LmRpc3BhdGNoRXZlbnQoXG4gICAgICAgICAgbmV3IEN1c3RvbUV2ZW50KCdzbmFja2Jhci1ldmVudCcsIHtcbiAgICAgICAgICAgIGRldGFpbDogeyBzaG93OiB0cnVlLCBzZXZlcml0eTogJ2luZm8nLCBtZXNzYWdlOiB0KCdjaGF0LnRvb01hbnlBY3RpdmVTZXNzaW9ucycpIH0sXG4gICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgICAgfVxuICAgIH0sXG4gICAgW1xuICAgICAgd2FpdGluZ1Jlc3BvbnNlLFxuICAgICAgbG9hZGluZ01lc3NhZ2VzLFxuICAgICAgcmVwbGFjZU1lc3NhZ2VzLFxuICAgICAgcmV0cnlDb21wbGV0aW9uLFxuICAgICAgYXNrTWFpYSxcbiAgICAgIGZldGNoUHJvamVjdHMsXG4gICAgICBhdXRoVXNlcixcbiAgICAgIGFnZW50LFxuICAgICAgdCxcbiAgICAgIHNldEFjdGl2ZUNoYXRJZCxcbiAgICBdXG4gIClcblxuICBjb25zdCBoYW5kbGVGZWVkYmFjayA9IHVzZUNhbGxiYWNrKGFzeW5jIChmZWVkYmFja1Byb3A6IEZlZWRiYWNrLCBjaGF0TWVzc2FnZUlkOiBzdHJpbmcpID0+IHtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IG1haWEuQ2hhdHMud2FzSGVscGZ1bENoYXQoY2hhdE1lc3NhZ2VJZCwgZmVlZGJhY2tQcm9wID09PSBGZWVkYmFjay5USFVNQlNfVVApXG4gICAgaWYgKHJlc3BvbnNlKSB7XG4gICAgICBtZXNzYWdlc1JlZi5jdXJyZW50ID0gbWVzc2FnZXNSZWYuY3VycmVudC5tYXAobWVzc2FnZSA9PiB7XG4gICAgICAgIGlmIChtZXNzYWdlLmlkID09PSBjaGF0TWVzc2FnZUlkICYmIG1lc3NhZ2Uucm9sZSA9PT0gJ2Fzc2lzdGFudCcpIHtcbiAgICAgICAgICByZXR1cm4geyAuLi5tZXNzYWdlLCB3YXNIZWxwZnVsOiBmZWVkYmFja1Byb3AgPT09IEZlZWRiYWNrLlRIVU1CU19VUCB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG1lc3NhZ2VcbiAgICAgIH0pXG4gICAgfVxuICB9LCBbXSlcblxuICBjb25zdCBoYW5kbGVBcHByb3ZhbERlY2lzaW9uID0gdXNlQ2FsbGJhY2soXG4gICAgYXN5bmMgKFxuICAgICAgdGhyZWFkSWRzOiBzdHJpbmdbXSxcbiAgICAgIGRlY2lzaW9uOiAnYXBwcm92ZScgfCAncmVqZWN0JyxcbiAgICAgIGVkaXRlZEFjdGlvbnM/OiBBcnJheTx7IHRvb2xfbmFtZTogc3RyaW5nOyBhcmdzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB9PixcbiAgICAgIG1ldGFkYXRhPzogeyB0b29sX2dyb3VwX3NsdWdzOiBzdHJpbmdbXSB9XG4gICAgKSA9PiB7XG4gICAgICBpZiAoIXRocmVhZElkcz8ubGVuZ3RoKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ05vIHRocmVhZF9pZHMgcHJvdmlkZWQgZm9yIGFwcHJvdmFsIGRlY2lzaW9uJylcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGZvdW5kID0gZmluZE1lc3NhZ2VXaXRoQXBwcm92YWxCeVRocmVhZElkcyh0aHJlYWRJZHMsIG1lc3NhZ2VzUmVmLmN1cnJlbnQpXG4gICAgICBpZiAoIWZvdW5kPy5tZXNzYWdlLmFwcHJvdmFsKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ05vIHNlIGVuY29udHLDsyBtZW5zYWplIGNvbiBhcHByb3ZhbCBwYXJhIHRocmVhZF9pZHM6JywgdGhyZWFkSWRzKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgY29uc3QgeyBtZXNzYWdlOiBtZXNzYWdlV2l0aEFwcHJvdmFsLCBzZXNzaW9uSWQ6IGZvdW5kU2Vzc2lvbklkIH0gPSBmb3VuZFxuICAgICAgY29uc3QgeyBhcHByb3ZhbCB9ID0gbWVzc2FnZVdpdGhBcHByb3ZhbFxuICAgICAgaWYgKCFhcHByb3ZhbCkge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgY29uc3Qgc2Vzc2lvbklkID0gYXBwcm92YWwuc2Vzc2lvbl9pZCB8fCBmb3VuZFNlc3Npb25JZFxuICAgICAgaWYgKCFzZXNzaW9uSWQpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignTm8gc2Vzc2lvbl9pZCBkaXNwb25pYmxlIHBhcmEgYXBwcm92YWw6JywgdGhyZWFkSWRzKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgaWYgKHNlc3Npb25TdHJlYW1NYW5hZ2VyLmlzQWN0aXZlKHNlc3Npb25JZCkpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGlmIChzZXNzaW9uU3RyZWFtTWFuYWdlci5nZXRBY3RpdmVDb3VudCgpID49IE1BWF9DT05DVVJSRU5UX1NUUkVBTVMpIHtcbiAgICAgICAgZG9jdW1lbnQuZGlzcGF0Y2hFdmVudChcbiAgICAgICAgICBuZXcgQ3VzdG9tRXZlbnQoJ3NuYWNrYmFyLWV2ZW50Jywge1xuICAgICAgICAgICAgZGV0YWlsOiB7IHNob3c6IHRydWUsIHNldmVyaXR5OiAnaW5mbycsIG1lc3NhZ2U6IHQoJ2NoYXQudG9vTWFueUFjdGl2ZVNlc3Npb25zJykgfSxcbiAgICAgICAgICB9KVxuICAgICAgICApXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBjb25zdCBtZXNzYWdlSWQgPSBtZXNzYWdlV2l0aEFwcHJvdmFsLmlkXG4gICAgICBjb25zdCBuZXdTdGF0dXMgPSBkZWNpc2lvbiA9PT0gJ2FwcHJvdmUnID8gJ2FwcHJvdmVkJyA6ICdyZWplY3RlZCdcbiAgICAgIGNvbnN0IGhpdGxDb250ZXh0OiBIaXRsRXhlY3V0aW9uQ29udGV4dCA9IHtcbiAgICAgICAgbWVzc2FnZUlkLFxuICAgICAgICBtZXNzYWdlVGV4dDogbWVzc2FnZVdpdGhBcHByb3ZhbC5tZXNzYWdlLFxuICAgICAgICBhcHByb3ZhbCxcbiAgICAgICAgcGVuZGluZ0FjdGlvbnM6IGFwcHJvdmFsLnBlbmRpbmdfYWN0aW9ucyxcbiAgICAgICAgdGhyZWFkSWRzLFxuICAgICAgfVxuXG4gICAgICBjb25zdCBpc0FjdGl2ZVNlc3Npb24gPSBhY3RpdmVWaWV3LmlzKHNlc3Npb25JZClcbiAgICAgIGlmIChpc0FjdGl2ZVNlc3Npb24pIHtcbiAgICAgICAgaGl0bEV4ZWN1dGlvbkNvbnRleHRSZWYuY3VycmVudCA9IGhpdGxDb250ZXh0XG4gICAgICAgIGlzUHJvY2Vzc2luZ1JlZi5jdXJyZW50ID0gdHJ1ZVxuICAgICAgfVxuXG4gICAgICBjb21taXRUb1Nlc3Npb24oc2Vzc2lvbklkLCB7IC4uLm1lc3NhZ2VXaXRoQXBwcm92YWwsIGFwcHJvdmFsU3RhdHVzOiBuZXdTdGF0dXMgfSlcblxuICAgICAgY29uc3Qgc3RyZWFtTWVzc2FnZUlkID0gdXVpZHY0KClcbiAgICAgIGlmIChpc0FjdGl2ZVNlc3Npb24pIHtcbiAgICAgICAgY3VycmVudE1lc3NhZ2VJZC5jdXJyZW50ID0gc3RyZWFtTWVzc2FnZUlkXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGhpdGxDdHg6IFN0cmVhbUNvbnRleHQgPSB7XG4gICAgICAgIHNlc3Npb25JZCxcbiAgICAgICAgbWVzc2FnZUlkOiBzdHJlYW1NZXNzYWdlSWQsXG4gICAgICAgIHBsYWNlaG9sZGVySWQ6IHN0cmVhbWluZ1BsYWNlaG9sZGVyTWVzc2FnZUlkKHN0cmVhbU1lc3NhZ2VJZCksXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHJlbGVhc2VBY3RpdmVQcm9jZXNzaW5nID0gKCkgPT4ge1xuICAgICAgICBpZiAoIWlzQWN0aXZlU2Vzc2lvbikgcmV0dXJuXG4gICAgICAgIGlzUHJvY2Vzc2luZ1JlZi5jdXJyZW50ID0gZmFsc2VcbiAgICAgICAgaGl0bEV4ZWN1dGlvbkNvbnRleHRSZWYuY3VycmVudCA9IG51bGxcbiAgICAgIH1cblxuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgc2Vzc2lvblN0cmVhbU1hbmFnZXIuc3RhcnRDb250aW51ZVN0cmVhbSh7XG4gICAgICAgIHNlc3Npb25JZCxcbiAgICAgICAgcGxhY2Vob2xkZXJJZDogaGl0bEN0eC5wbGFjZWhvbGRlcklkLFxuICAgICAgICBjb250aW51ZVJlcXVlc3Q6IHtcbiAgICAgICAgICB0aHJlYWRJZHMsXG4gICAgICAgICAgc2Vzc2lvbklkOiBhcHByb3ZhbC5zZXNzaW9uX2lkLFxuICAgICAgICAgIGRlY2lzaW9uOiBlZGl0ZWRBY3Rpb25zID8gJ2VkaXQnIDogZGVjaXNpb24sXG4gICAgICAgICAgZWRpdGVkQWN0aW9ucyxcbiAgICAgICAgICBhZ2VudElkOiBhZ2VudD8uaWQgfHwgJycsXG4gICAgICAgICAgbGFuZzogYXV0aFVzZXIubGFuZyxcbiAgICAgICAgICBpc0F1dG9BcHByb3ZlQWN0aXZlOiBpc0F1dG9BcHByb3ZlQWN0aXZlUmVmLmN1cnJlbnQsXG4gICAgICAgICAgbWV0YWRhdGEsXG4gICAgICAgIH0sXG4gICAgICAgIHQsXG4gICAgICAgIGhpdGxFeGVjdXRpb25Db250ZXh0OiBoaXRsQ29udGV4dCxcbiAgICAgICAgYWdlbnRJZDogYWdlbnQ/LmlkLFxuICAgICAgICBhZ2VudE5hbWU6IGFnZW50Py5uYW1lLFxuICAgICAgICBjYWxsYmFja3M6IHtcbiAgICAgICAgICBvblN0cmVhbVVwZGF0ZTogY29udGVudCA9PiBoYW5kbGVTdHJlYW1VcGRhdGUoaGl0bEN0eCwgY29udGVudCksXG4gICAgICAgICAgb25GaW5pc2hTdHJlYW06IGZpbmlzaFBheWxvYWQgPT4ge1xuICAgICAgICAgICAgcmVsZWFzZUFjdGl2ZVByb2Nlc3NpbmcoKVxuICAgICAgICAgICAgaGFuZGxlU3RyZWFtRmluaXNoKFxuICAgICAgICAgICAgICBoaXRsQ3R4LFxuICAgICAgICAgICAgICBmaW5pc2hQYXlsb2FkLmNvbnRlbnQsXG4gICAgICAgICAgICAgIGZpbmlzaFBheWxvYWQuc291cmNlcyxcbiAgICAgICAgICAgICAgZmluaXNoUGF5bG9hZC5tZW1vcnlTZXNzaW9uSWQsXG4gICAgICAgICAgICAgIGZpbmlzaFBheWxvYWQuYXR0YWNobWVudHMsXG4gICAgICAgICAgICAgIGZpbmlzaFBheWxvYWQuc3VnZ2VzdGlvbnMsXG4gICAgICAgICAgICAgIGZpbmlzaFBheWxvYWQuY29tcGxldGVkQWdlbnRJZCxcbiAgICAgICAgICAgICAgZmluaXNoUGF5bG9hZC5yZXNvbHZlZENvbnRleHQsXG4gICAgICAgICAgICAgIGZpbmlzaFBheWxvYWQucmVhc29uaW5nXG4gICAgICAgICAgICApXG4gICAgICAgICAgfSxcbiAgICAgICAgICBvbkVycm9yOiAoKSA9PiB7XG4gICAgICAgICAgICByZWxlYXNlQWN0aXZlUHJvY2Vzc2luZygpXG4gICAgICAgICAgICBoYW5kbGVTdHJlYW1FcnJvcihoaXRsQ3R4KVxuICAgICAgICAgIH0sXG4gICAgICAgICAgb25BcHByb3ZhbFJlcXVpcmVkOiAoYXBwcm92YWxQYXlsb2FkLCBhY2N1bXVsYXRlZENvbnRlbnQpID0+IHtcbiAgICAgICAgICAgIHJlbGVhc2VBY3RpdmVQcm9jZXNzaW5nKClcbiAgICAgICAgICAgIGhhbmRsZUFwcHJvdmFsUmVxdWlyZWQoaGl0bEN0eCwgYXBwcm92YWxQYXlsb2FkLCBhY2N1bXVsYXRlZENvbnRlbnQpXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH0pXG5cbiAgICAgIGlmICghcmVzdWx0LnN0YXJ0ZWQpIHtcbiAgICAgICAgcmVsZWFzZUFjdGl2ZVByb2Nlc3NpbmcoKVxuICAgICAgICBpZiAocmVzdWx0LnJlYXNvbiA9PT0gJ2xpbWl0Jykge1xuICAgICAgICAgIGRvY3VtZW50LmRpc3BhdGNoRXZlbnQoXG4gICAgICAgICAgICBuZXcgQ3VzdG9tRXZlbnQoJ3NuYWNrYmFyLWV2ZW50Jywge1xuICAgICAgICAgICAgICBkZXRhaWw6IHsgc2hvdzogdHJ1ZSwgc2V2ZXJpdHk6ICdpbmZvJywgbWVzc2FnZTogdCgnY2hhdC50b29NYW55QWN0aXZlU2Vzc2lvbnMnKSB9LFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICApXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIFtcbiAgICAgIGF1dGhVc2VyLFxuICAgICAgYWdlbnQsXG4gICAgICBjb21taXRUb1Nlc3Npb24sXG4gICAgICBoYW5kbGVTdHJlYW1FcnJvcixcbiAgICAgIGhhbmRsZVN0cmVhbVVwZGF0ZSxcbiAgICAgIGhhbmRsZVN0cmVhbUZpbmlzaCxcbiAgICAgIGhhbmRsZUFwcHJvdmFsUmVxdWlyZWQsXG4gICAgICB0LFxuICAgIF1cbiAgKVxuXG4gIGNvbnN0IGluaXRpYWxpemVDaGF0ID0gdXNlQ2FsbGJhY2soYXN5bmMgKCkgPT4ge1xuICAgIGlmICghZmlyc3RUaW1lUmVmLmN1cnJlbnQpIHtcbiAgICAgIGZpcnN0VGltZVJlZi5jdXJyZW50ID0gdHJ1ZVxuICAgIH1cbiAgICBpZiAoaW5pdGlhbENoYXRJZCkge1xuICAgICAgYXdhaXQgbG9hZE1lc3NhZ2VzKClcbiAgICB9IGVsc2UgaWYgKHVzZXJJbml0aWFsTWVzc2FnZSkge1xuICAgICAgY29uc3QgaGFzSW5pdGlhbE1lc3NhZ2UgPSBCb29sZWFuKHVzZXJJbml0aWFsTWVzc2FnZS5tZXNzYWdlPy50cmltKCkpXG4gICAgICBjb25zdCBoYXNJbml0aWFsQXR0YWNobWVudHMgPSBCb29sZWFuKHVzZXJJbml0aWFsTWVzc2FnZS5hdHRhY2htZW50cz8ubGVuZ3RoKVxuICAgICAgY29uc3QgaGFzSW5pdGlhbEZhcSA9IEJvb2xlYW4odXNlckluaXRpYWxNZXNzYWdlLmZhcUlkKVxuICAgICAgY29uc3QgaGFzSW5pdGlhbEZ1YSA9IEJvb2xlYW4odXNlckluaXRpYWxNZXNzYWdlLmZ1YUlkKVxuICAgICAgY29uc3QgaGFzSW5pdGlhbFNjID0gQm9vbGVhbih1c2VySW5pdGlhbE1lc3NhZ2Uuc2NJZClcblxuICAgICAgaWYgKCFoYXNJbml0aWFsTWVzc2FnZSAmJiAhaGFzSW5pdGlhbEF0dGFjaG1lbnRzICYmICFoYXNJbml0aWFsRmFxICYmICFoYXNJbml0aWFsRnVhICYmICFoYXNJbml0aWFsU2MpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGhpc3RvcnkgPSBtZXNzYWdlc1JlZi5jdXJyZW50Lm1hcChoaXN0b3J5TWVzc2FnZSA9PiAoe1xuICAgICAgICBjb250ZW50OiBoaXN0b3J5TWVzc2FnZS5tZXNzYWdlLFxuICAgICAgICByb2xlOiBoaXN0b3J5TWVzc2FnZS51c2VyLmlkID09PSBhdXRoVXNlci5pZC50b1N0cmluZygpID8gQ2hhdEhpc3RvcnlSb2xlLlVTRVIgOiBDaGF0SGlzdG9yeVJvbGUuQVNTSVNUQU5ULFxuICAgICAgfSkpXG5cbiAgICAgIGNvbnN0IHtcbiAgICAgICAgY2hpcHNQcm9qZWN0OiBjdHhDaGlwc1Byb2plY3QsXG4gICAgICAgIHByb2plY3Q6IGN0eFByb2plY3QsXG4gICAgICAgIGNsaWVudDogY3R4Q2xpZW50LFxuICAgICAgICB0YXNrOiBjdHhUYXNrLFxuICAgICAgfSA9IGNvbnRleHRSZWYuY3VycmVudFxuICAgICAgY29uc3QgcHJvamVjdFRvUmVxdWVzdCA9IHJlc29sdmVQcm9qZWN0VG9SZXF1ZXN0KGN0eENoaXBzUHJvamVjdCwgbnVsbCkgPz8gY3R4UHJvamVjdD8uaWQgPz8gbnVsbFxuXG4gICAgICBjb25zdCBpbml0aWFsRGlzcGxheU1lc3NhZ2UgPSBmb3JtYXRRdWlja0FjdGlvbk1lc3NhZ2VGb3JEaXNwbGF5KHVzZXJJbml0aWFsTWVzc2FnZS5tZXNzYWdlLCB7XG4gICAgICAgIGZ1YUlkOiB1c2VySW5pdGlhbE1lc3NhZ2UuZnVhSWQsXG4gICAgICAgIHNjSWQ6IHVzZXJJbml0aWFsTWVzc2FnZS5zY0lkLFxuICAgICAgfSlcblxuICAgICAgZW5zdXJlU2Vzc2lvbkluU2lkZWJhcih7XG4gICAgICAgIHNlc3Npb25JZDogY3VycmVudENoYXRJZC5jdXJyZW50LFxuICAgICAgICB0aXRsZTogYnVpbGRTaWRlYmFyU2Vzc2lvblRpdGxlKGluaXRpYWxEaXNwbGF5TWVzc2FnZSksXG4gICAgICAgIGFnZW50LFxuICAgICAgICBhZ2VudElkOiBhZ2VudD8uaWQsXG4gICAgICAgIHByb2plY3Q6IGN0eFByb2plY3QsXG4gICAgICAgIGNsaWVudDogY3R4Q2xpZW50LFxuICAgICAgICBhdHRhY2htZW50czogdXNlckluaXRpYWxNZXNzYWdlLmF0dGFjaG1lbnRzLFxuICAgICAgfSlcblxuICAgICAgYXNrTWFpYSh7XG4gICAgICAgIG1lc3NhZ2U6IHVzZXJJbml0aWFsTWVzc2FnZS5tZXNzYWdlLFxuICAgICAgICBoaXN0b3J5LFxuICAgICAgICBwcm9qZWN0SWQ6IHByb2plY3RUb1JlcXVlc3QsXG4gICAgICAgIGxhbmc6IGF1dGhVc2VyLmxhbmcsXG4gICAgICAgIHVzZXJJZDogYXV0aFVzZXIuaWQudG9TdHJpbmcoKSxcbiAgICAgICAgZmlyc3ROYW1lOiBhdXRoVXNlci5maXJzdE5hbWUsXG4gICAgICAgIGxhc3ROYW1lOiBhdXRoVXNlci5sYXN0TmFtZSxcbiAgICAgICAgY29tcGFueUlkOiBhdXRoVXNlci5jb21wYW55X2lkLnRvU3RyaW5nKCksXG4gICAgICAgIGNoYXRJZDogY3VycmVudENoYXRJZC5jdXJyZW50LFxuICAgICAgICBtZXNzYWdlSWQ6IGN1cnJlbnRNZXNzYWdlSWQuY3VycmVudCxcbiAgICAgICAgYWdlbnROYW1lOiBhZ2VudD8ubmFtZSEsXG4gICAgICAgIGFnZW50SWQ6IGFnZW50Py5pZCEsXG4gICAgICAgIGlzV2ViU2VhcmNoQWN0aXZlOiBpc1dlYlNlYXJjaEFjdGl2ZVJlZi5jdXJyZW50LFxuICAgICAgICBpc0RlZXBTZWFyY2hBY3RpdmU6IGlzRGVlcFNlYXJjaEFjdGl2ZVJlZi5jdXJyZW50LFxuICAgICAgICBpc0F1dG9BcHByb3ZlQWN0aXZlOiBpc0F1dG9BcHByb3ZlQWN0aXZlUmVmLmN1cnJlbnQsXG4gICAgICAgIC4uLihjdHhQcm9qZWN0Py5mZWVJZCAhPSBudWxsID8geyBmZWVJZDogTnVtYmVyKGN0eFByb2plY3QuZmVlSWQpIH0gOiB7fSksXG4gICAgICAgIC4uLnJlc29sdmVDbGllbnRQYXlsb2FkKGN0eENsaWVudCwgY3R4UHJvamVjdCksXG4gICAgICAgIC4uLihjdHhQcm9qZWN0Py5uYW1lID8geyBwcm9qZWN0TmFtZTogY3R4UHJvamVjdC5uYW1lIH0gOiB7fSksXG4gICAgICAgIC4uLihjdHhUYXNrPy5pZCAhPSBudWxsXG4gICAgICAgICAgPyB7IHRhc2tJZDogTnVtYmVyKGN0eFRhc2suaWQpLCAuLi4oY3R4VGFzay5uYW1lID8geyB0YXNrTmFtZTogY3R4VGFzay5uYW1lIH0gOiB7fSkgfVxuICAgICAgICAgIDoge30pLFxuICAgICAgICAuLi4odXNlckluaXRpYWxNZXNzYWdlLmF0dGFjaG1lbnRzID8geyBhdHRhY2htZW50czogdXNlckluaXRpYWxNZXNzYWdlLmF0dGFjaG1lbnRzIH0gOiB7fSksXG4gICAgICAgIC4uLih1c2VySW5pdGlhbE1lc3NhZ2UuZmFxSWQgPyB7IGZhcUlkOiB1c2VySW5pdGlhbE1lc3NhZ2UuZmFxSWQgfSA6IHt9KSxcbiAgICAgICAgLi4uKHVzZXJJbml0aWFsTWVzc2FnZS5hZ2VudFN1Z2dlc3Rpb25JZCA/IHsgYWdlbnRTdWdnZXN0aW9uSWQ6IHVzZXJJbml0aWFsTWVzc2FnZS5hZ2VudFN1Z2dlc3Rpb25JZCB9IDoge30pLFxuICAgICAgICAuLi4odXNlckluaXRpYWxNZXNzYWdlLmZ1YUlkID8geyBmdWFJZDogdXNlckluaXRpYWxNZXNzYWdlLmZ1YUlkIH0gOiB7fSksXG4gICAgICAgIC4uLih1c2VySW5pdGlhbE1lc3NhZ2Uuc2NJZCA/IHsgc2NJZDogdXNlckluaXRpYWxNZXNzYWdlLnNjSWQgfSA6IHt9KSxcbiAgICAgICAgLi4uKGFnZW50Py5lbnRpdHkgIT0gbnVsbCA/IHsgYWdlbnRFbnRpdHk6IGFnZW50LmVudGl0eSB9IDoge30pLFxuICAgICAgICAuLi4oYWdlbnQ/LnR5cGUgIT0gbnVsbCA/IHsgYWdlbnRUeXBlOiBhZ2VudC50eXBlIH0gOiB7fSksXG4gICAgICAgIC4uLihhZ2VudD8uZW1vamkgIT0gbnVsbCA/IHsgYWdlbnRFbW9qaTogYWdlbnQuZW1vamkgfSA6IHt9KSxcbiAgICAgICAgLi4uKGJ1aWxkQ29udGV4dE1lc3NhZ2UodXNlckluaXRpYWxNZXNzYWdlLm1lbnRpb25zKVxuICAgICAgICAgID8geyBjb250ZXh0TWVzc2FnZTogYnVpbGRDb250ZXh0TWVzc2FnZSh1c2VySW5pdGlhbE1lc3NhZ2UubWVudGlvbnMpIH1cbiAgICAgICAgICA6IHt9KSxcbiAgICAgICAgLi4uKHVzZXJJbml0aWFsTWVzc2FnZS5jb250ZXh0RGF0YSA/IHsgY29udGV4dERhdGE6IHVzZXJJbml0aWFsTWVzc2FnZS5jb250ZXh0RGF0YSB9IDoge30pLFxuICAgICAgfSlcbiAgICB9XG4gIH0sIFtcbiAgICBpbml0aWFsQ2hhdElkLFxuICAgIHVzZXJJbml0aWFsTWVzc2FnZSxcbiAgICBwcm9qZWN0LFxuICAgIGNsaWVudCxcbiAgICB0YXNrLFxuICAgIGF1dGhVc2VyLFxuICAgIGFnZW50LFxuICAgIGFza01haWEsXG4gICAgaXNXZWJTZWFyY2hBY3RpdmUsXG4gICAgaXNEZWVwU2VhcmNoQWN0aXZlLFxuICBdKVxuXG4gIGNvbnN0IHJlc2V0Q2hhdCA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBjb25zdCBwcmV2aW91c1Nlc3Npb25JZCA9IGN1cnJlbnRDaGF0SWQuY3VycmVudFxuICAgIHNlc3Npb25TdHJlYW1pbmdUZXh0LmNsZWFyKHByZXZpb3VzU2Vzc2lvbklkKVxuICAgIHJlYXNvbmluZ1N0b3JlLmNsZWFyKClcbiAgICBjdXJyZW50TWVzc2FnZUlkLmN1cnJlbnQgPSB1dWlkdjQoKVxuICAgIGN1cnJlbnRVc2VyUXVlc3Rpb24uY3VycmVudCA9IG51bGxcbiAgICBjdXJyZW50Q2hhdElkLmN1cnJlbnQgPSB1dWlkdjQoKVxuICAgIHNldEFjdGl2ZVNlc3Npb25JZChjdXJyZW50Q2hhdElkLmN1cnJlbnQpXG4gICAgcmVwb3J0ZWRFdmVudC5jdXJyZW50ID0gZmFsc2VcbiAgICBzdHJlYW1pbmdQbGFjZWhvbGRlcklkUmVmLmN1cnJlbnQgPSBudWxsXG4gICAgYWN0aXZlU3RyZWFtQ2hhdElkUmVmLmN1cnJlbnQgPSBudWxsXG4gICAgc2V0QWN0aXZlQ2hhdElkKG51bGwpXG4gIH0sIFtzZXRBY3RpdmVDaGF0SWRdKVxuXG4gIGNvbnN0IHN0b3BHZW5lcmF0aW9uID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIHN0b3BTdHJlYW1pbmcoKVxuICAgIGlzUHJvY2Vzc2luZ1JlZi5jdXJyZW50ID0gZmFsc2VcbiAgfSwgW3N0b3BTdHJlYW1pbmddKVxuXG4gIHJldHVybiB7XG4gICAgbWVzc2FnZXMsXG4gICAgbG9hZGluZ01lc3NhZ2VzLFxuICAgIGlzTG9hZGluZ01vcmVNZXNzYWdlcyxcbiAgICB3YWl0aW5nUmVzcG9uc2UsXG4gICAgaXNXcml0aW5nLFxuICAgIGxvYWRpbmdNZXNzYWdlLFxuICAgIHN0cmVhbUFjdGl2aXR5LFxuICAgIGFjdGl2ZUxvYWRpbmdzLFxuICAgIGN1cnJlbnRQcm9qZWN0LFxuICAgIGN1cnJlbnRDaGF0SWQ6IGN1cnJlbnRDaGF0SWQuY3VycmVudCxcbiAgICBjdXJyZW50TWVzc2FnZUlkOiBjdXJyZW50TWVzc2FnZUlkLmN1cnJlbnQsXG5cbiAgICBzZW5kTWVzc2FnZSxcbiAgICByZXRyeU1lc3NhZ2UsXG4gICAgY2hhbmdlUHJvamVjdCxcbiAgICBoYW5kbGVGZWVkYmFjayxcbiAgICBoYW5kbGVBcHByb3ZhbERlY2lzaW9uLFxuICAgIGhhbmRsZVNjcm9sbCxcbiAgICBpbml0aWFsaXplQ2hhdCxcbiAgICByZXNldENoYXQsXG4gICAgc3RvcEdlbmVyYXRpb24sXG5cbiAgICBpc0Rpc2FibGVkOiB3YWl0aW5nUmVzcG9uc2UgfHwgbG9hZGluZ01lc3NhZ2VzLFxuICB9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTQSxXQUFXLEVBQUVDLE1BQU0sRUFBRUMsU0FBUyxFQUFFQyxRQUFRLFFBQVEsT0FBTztBQUNoRSxTQUFTQyxTQUFTLFFBQVEsV0FBVztBQUNyQyxTQUFTQyxFQUFFLElBQUlDLE1BQU0sUUFBUSxNQUFNO0FBQ25DLFNBQVNDLGVBQWUsUUFBUSxvQkFBb0I7QUFDcEQsU0FBU0MscUJBQXFCLFFBQVEsMEJBQTBCO0FBQ2hFLFNBQVNDLElBQUksUUFBUSxTQUFTO0FBRzlCLFNBQVNDLE9BQU8sUUFBaUIsd0JBQXdCO0FBQ3pELFNBQVNDLGdCQUFnQixRQUFRLDhCQUE4QjtBQUMvRCxTQUFTQyxNQUFNLEVBQUVDLFFBQVEsUUFBUSxhQUFhO0FBQzlDLE9BQU9DLElBQUksTUFBTSxxQkFBcUI7QUFDdEMsU0FBU0MsUUFBUSxRQUFRLDREQUE0RDtBQUNyRixTQUF1Q0MsZUFBZSxRQUF3QyxrQkFBa0I7QUFDaEgsU0FBeUNDLG1CQUFtQixRQUFRLDRCQUE0QjtBQUNoRyxTQUFTQyxrQ0FBa0MsUUFBUSxzQ0FBc0M7QUFHekYsU0FBU0MsV0FBVyxRQUFRLGdCQUFnQjtBQUM1QyxTQUFTQyxpQkFBaUIsUUFBUSxzQkFBc0I7QUFDeEQsU0FBU0Msc0JBQXNCLFFBQVEsMEJBQTBCO0FBQ2pFLFNBQVNDLHdCQUF3QixFQUFFQyxpQkFBaUIsUUFBUSxtQ0FBbUM7QUFDL0YsU0FBU0MsZ0JBQWdCLFFBQVEsNkNBQTZDO0FBQzlFLFNBQ0VDLHVCQUF1QixFQUN2QkMseUJBQXlCLEVBQ3pCQyxxQkFBcUIsRUFDckJDLHFCQUFxQixRQUNoQiwyQkFBMkI7QUFFbEMsU0FBU0Msb0JBQW9CLFFBQVEsMkNBQTJDO0FBQ2hGLFNBQVNDLGdCQUFnQixRQUFRLHVDQUF1QztBQUN4RSxTQUFTQyxjQUFjLFFBQVEscUNBQXFDO0FBQ3BFLFNBQVNDLG9CQUFvQixFQUFFQyxzQkFBc0IsUUFBUSwyQ0FBMkM7QUFDeEcsU0FBU0MsVUFBVSxRQUFRLGlDQUFpQztBQUM1RCxTQUFTQyxpQ0FBaUMsUUFBUSwyQ0FBMkM7QUFDN0YsU0FBU0Msd0JBQXdCLEVBQUVDLHNCQUFzQixRQUFRLG9DQUFvQztBQUNyRyxTQUFTQywrQkFBK0IsRUFBRUMsNkJBQTZCLFFBQVEsb0NBQW9DO0FBQ25ILFNBQVNDLHVCQUF1QixFQUFFQywwQkFBMEIsRUFBRUMsa0JBQWtCLFFBQVEsNkJBQTZCO0FBRXJILFNBQVNDLGtCQUFrQixFQUFFQyxhQUFhLFFBQVEsMkJBQTJCO0FBQzdFLFNBQVNDLGNBQWMsUUFBUSxzQkFBc0I7QUFDckQsU0FBU0MsbUJBQW1CLEVBQUVDLGlCQUFpQixRQUFRLDhCQUE4QjtBQUtyRjtBQUNBLElBQU1DLGlCQUFpQixHQUFHLFNBQXBCQSxpQkFBaUJBLENBQUlDLFNBQWlCLEVBQTRCO0VBQ3RFLElBQU1DLFFBQVEsR0FBR0wsY0FBYyxDQUFDTSxXQUFXLENBQUNGLFNBQVMsQ0FBQztFQUN0RCxJQUFJLENBQUNDLFFBQVEsQ0FBQ0UsS0FBSyxDQUFDQyxNQUFNLEVBQUUsT0FBTyxJQUFJO0VBQ3ZDLE9BQU9QLG1CQUFtQixDQUFDSSxRQUFRLENBQUNFLEtBQUssRUFBRUYsUUFBUSxDQUFDSSxPQUFPLENBQUM7QUFDOUQsQ0FBQztBQUVELElBQU1DLHdCQUF3QixHQUFHLFNBQTNCQSx3QkFBd0JBLENBQUlDLG9CQUEyQyxFQUFLO0VBQUEsSUFBQUMsb0JBQUE7RUFDaEYsSUFBSUMsS0FBSyxDQUFDQyxPQUFPLENBQUNILG9CQUFvQixDQUFDLEVBQUU7SUFDdkMsT0FBTztNQUFFSSxXQUFXLEVBQUVKLG9CQUFvQjtNQUFFSyxPQUFPLEVBQUUsQ0FBQztJQUF3QixDQUFDO0VBQ2pGO0VBRUEsSUFBTUEsT0FBMkIsR0FBR0wsb0JBQW9CLGFBQXBCQSxvQkFBb0IsY0FBcEJBLG9CQUFvQixHQUFJLENBQUMsQ0FBQztFQUM5RCxPQUFPO0lBQUVJLFdBQVcsR0FBQUgsb0JBQUEsR0FBRUksT0FBTyxDQUFDRCxXQUFXLGNBQUFILG9CQUFBLGNBQUFBLG9CQUFBLEdBQUksRUFBRTtJQUFFSSxPQUFPLEVBQVBBO0VBQVEsQ0FBQztBQUM1RCxDQUFDOztBQUVEO0FBQ0EsSUFBTUMsdUJBQXVCLEdBQUcsU0FBMUJBLHVCQUF1QkEsQ0FDM0JDLFlBQXVELEVBQ3ZEQyxvQkFBd0QsRUFDdEM7RUFDbEIsSUFBTUMsY0FBYyxHQUFHRixZQUFZLGFBQVpBLFlBQVksZUFBWkEsWUFBWSxDQUFFRyxTQUFTLEdBQUdDLE1BQU0sQ0FBQ0osWUFBWSxDQUFDRyxTQUFTLENBQUMsR0FBRyxJQUFJO0VBQ3RGLElBQUlELGNBQWMsSUFBSSxJQUFJLElBQUlFLE1BQU0sQ0FBQ0MsUUFBUSxDQUFDSCxjQUFjLENBQUMsRUFBRTtJQUM3RCxPQUFPQSxjQUFjO0VBQ3ZCO0VBQ0EsSUFBSUQsb0JBQW9CLElBQUksSUFBSSxFQUFFO0lBQ2hDLElBQU1LLE1BQU0sR0FBR0YsTUFBTSxDQUFDSCxvQkFBb0IsQ0FBQztJQUMzQyxPQUFPRyxNQUFNLENBQUNDLFFBQVEsQ0FBQ0MsTUFBTSxDQUFDLEdBQUdBLE1BQU0sR0FBRyxJQUFJO0VBQ2hEO0VBQ0EsT0FBTyxJQUFJO0FBQ2IsQ0FBQztBQUVELElBQU1DLG9CQUFvQixHQUFHLFNBQXZCQSxvQkFBb0JBLENBQ3hCQyxTQUE0RCxFQUM1REMsVUFBc0MsRUFDUztFQUFBLElBQUFDLGtCQUFBO0VBQy9DLElBQUlGLFNBQVMsYUFBVEEsU0FBUyxlQUFUQSxTQUFTLENBQUVHLEVBQUUsRUFBRTtJQUNqQixPQUFBQyxhQUFBO01BQVNDLFFBQVEsRUFBRUwsU0FBUyxDQUFDRztJQUFFLEdBQU1ILFNBQVMsQ0FBQ00sSUFBSSxHQUFHO01BQUVDLFVBQVUsRUFBRVAsU0FBUyxDQUFDTTtJQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDM0Y7RUFDQSxJQUFJLENBQUFMLFVBQVUsYUFBVkEsVUFBVSx1QkFBVkEsVUFBVSxDQUFFSSxRQUFRLEtBQUksSUFBSSxFQUFFO0lBQ2hDLE9BQU87TUFBRUEsUUFBUSxFQUFFVCxNQUFNLENBQUNLLFVBQVUsQ0FBQ0ksUUFBUTtJQUFFLENBQUM7RUFDbEQ7RUFDQSxJQUFJSixVQUFVLGFBQVZBLFVBQVUsZ0JBQUFDLGtCQUFBLEdBQVZELFVBQVUsQ0FBRU8sTUFBTSxjQUFBTixrQkFBQSxlQUFsQkEsa0JBQUEsQ0FBb0JDLEVBQUUsRUFBRTtJQUMxQixPQUFBQyxhQUFBO01BQ0VDLFFBQVEsRUFBRUosVUFBVSxDQUFDTyxNQUFNLENBQUNMO0lBQUUsR0FDMUJGLFVBQVUsQ0FBQ08sTUFBTSxDQUFDRixJQUFJLEdBQUc7TUFBRUMsVUFBVSxFQUFFTixVQUFVLENBQUNPLE1BQU0sQ0FBQ0Y7SUFBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBRTVFO0VBQ0EsT0FBTyxDQUFDLENBQUM7QUFDWCxDQUFDO0FBRUQsSUFBTUcsNkJBQTZCLEdBQUcsU0FBaENBLDZCQUE2QkEsQ0FBSUMsY0FBdUIsRUFBdUI7RUFDbkYsSUFBSSxDQUFDdkIsS0FBSyxDQUFDQyxPQUFPLENBQUNzQixjQUFjLENBQUMsRUFBRTtJQUNsQyxPQUFPLEVBQUU7RUFDWDtFQUVBLE9BQU9BLGNBQWMsQ0FDbEJDLE1BQU0sQ0FBQyxVQUFDQyxVQUFVO0lBQUEsT0FBNEMsQ0FBQyxDQUFDQSxVQUFVLElBQUlDLE9BQUEsQ0FBT0QsVUFBVSxNQUFLLFFBQVE7RUFBQSxFQUFDLENBQzdHRSxHQUFHLENBQUMsVUFBQ0YsVUFBVSxFQUFFRyxLQUFLLEVBQUs7SUFDMUIsSUFBTVQsSUFBSSxHQUNSLE9BQU9NLFVBQVUsQ0FBQ04sSUFBSSxLQUFLLFFBQVEsSUFBSU0sVUFBVSxDQUFDTixJQUFJLENBQUNVLElBQUksQ0FBQyxDQUFDLEdBQUdKLFVBQVUsQ0FBQ04sSUFBSSxDQUFDVSxJQUFJLENBQUMsQ0FBQyxXQUFBQyxNQUFBLENBQVdGLEtBQUssR0FBRyxDQUFDLENBQUU7SUFDOUcsSUFBTUcsSUFBSSxHQUFHLE9BQU9OLFVBQVUsQ0FBQ00sSUFBSSxLQUFLLFFBQVEsSUFBSU4sVUFBVSxDQUFDTSxJQUFJLENBQUNGLElBQUksQ0FBQyxDQUFDLEdBQUdKLFVBQVUsQ0FBQ00sSUFBSSxDQUFDRixJQUFJLENBQUMsQ0FBQyxHQUFHLEtBQUs7SUFDM0csSUFBTUcsUUFBUSxHQUFHLE9BQU9QLFVBQVUsQ0FBQ1EsU0FBUyxLQUFLLFFBQVEsR0FBR1IsVUFBVSxDQUFDUSxTQUFTLEdBQUcsRUFBRTtJQUNyRixJQUFNQyxZQUFZLEdBQUdmLElBQUksQ0FBQ2dCLFFBQVEsQ0FBQyxHQUFHLENBQUMsR0FBR2hCLElBQUksTUFBQVcsTUFBQSxDQUFNWCxJQUFJLE9BQUFXLE1BQUEsQ0FBSUMsSUFBSSxDQUFFO0lBQ2xFLElBQU1LLFdBQVcsR0FDZixPQUFPWCxVQUFVLENBQUNZLElBQUksS0FBSyxRQUFRLEdBQy9CWixVQUFVLENBQUNZLElBQUksR0FDZjVCLE1BQU0sQ0FBQ0MsUUFBUSxDQUFDRCxNQUFNLENBQUNnQixVQUFVLENBQUNZLElBQUksQ0FBQyxDQUFDLEdBQ3RDNUIsTUFBTSxDQUFDZ0IsVUFBVSxDQUFDWSxJQUFJLENBQUMsR0FDdkIsQ0FBQztJQUVULE9BQU87TUFDTEMsSUFBSSxFQUFFLElBQUlDLElBQUksQ0FBQyxFQUFFLEVBQUVMLFlBQVksRUFBRTtRQUFFSCxJQUFJLEVBQUVDO01BQVMsQ0FBQyxDQUFDO01BQ3BEaEIsRUFBRSxFQUNBLE9BQU9TLFVBQVUsQ0FBQ1QsRUFBRSxLQUFLLFFBQVEsSUFBSVMsVUFBVSxDQUFDVCxFQUFFLENBQUNhLElBQUksQ0FBQyxDQUFDLEdBQ3JESixVQUFVLENBQUNULEVBQUUscUJBQUFjLE1BQUEsQ0FDS0YsS0FBSyxPQUFBRSxNQUFBLENBQUlJLFlBQVksQ0FBRTtNQUMvQ2YsSUFBSSxFQUFKQSxJQUFJO01BQ0prQixJQUFJLEVBQUVELFdBQVc7TUFDakJMLElBQUksRUFBSkEsSUFBSTtNQUNKUyxZQUFZLEVBQUUsT0FBT2YsVUFBVSxDQUFDZSxZQUFZLEtBQUssUUFBUSxHQUFHZixVQUFVLENBQUNlLFlBQVksR0FBR0MsU0FBUztNQUMvRkMsYUFBYSxFQUFFLE9BQU9qQixVQUFVLENBQUNpQixhQUFhLEtBQUssUUFBUSxHQUFHakIsVUFBVSxDQUFDaUIsYUFBYSxHQUFHRCxTQUFTO01BQ2xHRSxRQUFRLEVBQUUsT0FBT2xCLFVBQVUsQ0FBQ2tCLFFBQVEsS0FBSyxRQUFRLEdBQUdsQixVQUFVLENBQUNrQixRQUFRLEdBQUdGLFNBQVM7TUFDbkZHLElBQUksRUFBRW5CLFVBQVUsQ0FBQ21CLElBQUksS0FBSyxXQUFXLEdBQUcsV0FBVyxHQUFHO0lBQ3hELENBQUM7RUFDSCxDQUFDLENBQUM7QUFDTixDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTQyxvQ0FBb0NBLENBQUNDLGNBQStCLEVBQVk7RUFDdkYsSUFBTUMsR0FBYSxHQUFHLEVBQUU7RUFDeEIsSUFBTUMsTUFBTSxHQUFHLFNBQVRBLE1BQU1BLENBQUlDLEdBQVksRUFBSztJQUMvQixJQUFJQSxHQUFHLElBQUksSUFBSSxFQUFFO0lBQ2pCLElBQU1DLENBQUMsR0FBR0MsUUFBUSxDQUFDQyxNQUFNLENBQUNILEdBQUcsQ0FBQyxFQUFFLEVBQUUsQ0FBQztJQUNuQyxJQUFJLENBQUN4QyxNQUFNLENBQUM0QyxLQUFLLENBQUNILENBQUMsQ0FBQyxFQUFFSCxHQUFHLENBQUNPLElBQUksQ0FBQ0osQ0FBQyxDQUFDO0VBQ25DLENBQUM7RUFDREosY0FBYyxDQUFDUyxPQUFPLENBQUMsVUFBQUMsTUFBTSxFQUFJO0lBQUEsSUFBQUMsWUFBQTtJQUMvQixJQUFJLENBQUNELE1BQU0sSUFBSTlCLE9BQUEsQ0FBTzhCLE1BQU0sTUFBSyxRQUFRLEVBQUU7SUFDM0MsSUFBTUUsSUFBSSxHQUFHRixNQUFNLENBQUNHLFNBQVM7SUFDN0IsSUFBSSxFQUFFRCxJQUFJLElBQUloQyxPQUFBLENBQU9nQyxJQUFJLE1BQUssUUFBUSxJQUFJLENBQUMxRCxLQUFLLENBQUNDLE9BQU8sQ0FBQ3lELElBQUksQ0FBQyxDQUFDLEVBQUU7SUFDakUsSUFBTUUsR0FBRyxHQUFHRixJQUErQjtJQUMzQ1YsTUFBTSxFQUFBUyxZQUFBLEdBQUNHLEdBQUcsQ0FBQ0MsT0FBTyxjQUFBSixZQUFBLGNBQUFBLFlBQUEsR0FBSUcsR0FBRyxDQUFDNUMsRUFBRSxDQUFDO0lBQzdCLElBQUloQixLQUFLLENBQUNDLE9BQU8sQ0FBQzJELEdBQUcsQ0FBQ0UsUUFBUSxDQUFDLEVBQUU7TUFDL0JGLEdBQUcsQ0FBQ0UsUUFBUSxDQUFDUCxPQUFPLENBQUNQLE1BQU0sQ0FBQztJQUM5QjtJQUNBLElBQUloRCxLQUFLLENBQUNDLE9BQU8sQ0FBQzJELEdBQUcsQ0FBQ0csS0FBSyxDQUFDLEVBQUU7TUFDNUJILEdBQUcsQ0FBQ0csS0FBSyxDQUFDUixPQUFPLENBQUMsVUFBQVMsQ0FBQyxFQUFJO1FBQ3JCLElBQUlBLENBQUMsSUFBSXRDLE9BQUEsQ0FBT3NDLENBQUMsTUFBSyxRQUFRLElBQUksQ0FBQ2hFLEtBQUssQ0FBQ0MsT0FBTyxDQUFDK0QsQ0FBQyxDQUFDLEVBQUU7VUFBQSxJQUFBQyxhQUFBO1VBQ25ELElBQU1DLElBQUksR0FBR0YsQ0FBNEI7VUFDekNoQixNQUFNLEVBQUFpQixhQUFBLEdBQUNDLElBQUksQ0FBQ0wsT0FBTyxjQUFBSSxhQUFBLGNBQUFBLGFBQUEsR0FBSUMsSUFBSSxDQUFDbEQsRUFBRSxDQUFDO1FBQ2pDO01BQ0YsQ0FBQyxDQUFDO0lBQ0o7RUFDRixDQUFDLENBQUM7RUFDRixPQUFPK0IsR0FBRztBQUNaOztBQUVBO0FBQ0EsU0FBU29CLHNDQUFzQ0EsQ0FBQ3JCLGNBQStCLEVBQVk7RUFDekYsSUFBTUMsR0FBYSxHQUFHLEVBQUU7RUFDeEJELGNBQWMsQ0FBQ1MsT0FBTyxDQUFDLFVBQUFDLE1BQU0sRUFBSTtJQUMvQixJQUFJLENBQUNBLE1BQU0sSUFBSTlCLE9BQUEsQ0FBTzhCLE1BQU0sTUFBSyxRQUFRLEVBQUU7SUFDM0MsSUFBTUUsSUFBSSxHQUFHRixNQUFNLENBQUNHLFNBQVM7SUFDN0IsSUFBSSxFQUFFRCxJQUFJLElBQUloQyxPQUFBLENBQU9nQyxJQUFJLE1BQUssUUFBUSxJQUFJLENBQUMxRCxLQUFLLENBQUNDLE9BQU8sQ0FBQ3lELElBQUksQ0FBQyxDQUFDLEVBQUU7SUFDakUsSUFBTUUsR0FBRyxHQUFHRixJQUErQjtJQUMzQyxJQUFJRixNQUFNLENBQUNZLFNBQVMsS0FBSyxhQUFhLEVBQUU7TUFBQSxJQUFBQyxhQUFBO01BQ3RDLElBQU1wQixHQUFHLElBQUFvQixhQUFBLEdBQUdULEdBQUcsQ0FBQ0MsT0FBTyxjQUFBUSxhQUFBLGNBQUFBLGFBQUEsR0FBSVQsR0FBRyxDQUFDNUMsRUFBRTtNQUNqQyxJQUFJaUMsR0FBRyxJQUFJLElBQUksRUFBRTtRQUNmLElBQU1DLENBQUMsR0FBR0MsUUFBUSxDQUFDQyxNQUFNLENBQUNILEdBQUcsQ0FBQyxFQUFFLEVBQUUsQ0FBQztRQUNuQyxJQUFJLENBQUN4QyxNQUFNLENBQUM0QyxLQUFLLENBQUNILENBQUMsQ0FBQyxFQUFFSCxHQUFHLENBQUNPLElBQUksQ0FBQ0osQ0FBQyxDQUFDO01BQ25DO0lBQ0Y7SUFDQSxJQUFJTSxNQUFNLENBQUNZLFNBQVMsS0FBSyxvQkFBb0IsRUFBRTtNQUM3QyxJQUFNRSxJQUFJLEdBQUdWLEdBQUcsQ0FBQ0UsUUFBUTtNQUN6QixJQUFJOUQsS0FBSyxDQUFDQyxPQUFPLENBQUNxRSxJQUFJLENBQUMsRUFBRTtRQUN2QkEsSUFBSSxDQUFDZixPQUFPLENBQUMsVUFBQWdCLEdBQUcsRUFBSTtVQUNsQixJQUFNckIsQ0FBQyxHQUFHQyxRQUFRLENBQUNDLE1BQU0sQ0FBQ21CLEdBQUcsQ0FBQyxFQUFFLEVBQUUsQ0FBQztVQUNuQyxJQUFJLENBQUM5RCxNQUFNLENBQUM0QyxLQUFLLENBQUNILENBQUMsQ0FBQyxFQUFFSCxHQUFHLENBQUNPLElBQUksQ0FBQ0osQ0FBQyxDQUFDO1FBQ25DLENBQUMsQ0FBQztNQUNKO0lBQ0Y7RUFDRixDQUFDLENBQUM7RUFDRixPQUFPSCxHQUFHO0FBQ1o7QUFFQSxTQUFTeUIseUNBQXlDQSxDQUFDMUIsY0FBK0IsRUFBaUI7RUFBQSxJQUFBMkIsYUFBQTtFQUNqRyxJQUFNQyxVQUFVLEdBQUc1QixjQUFjLENBQUM2QixJQUFJLENBQUMsVUFBQUMsQ0FBQztJQUFBLE9BQUksQ0FBQ0EsQ0FBQyxDQUFDUixTQUFTLElBQUksRUFBRSxFQUFFUyxXQUFXLENBQUMsQ0FBQyxLQUFLLFlBQVk7RUFBQSxFQUFDO0VBQy9GLElBQ0UsQ0FBQ0gsVUFBVSxJQUNYLENBQUNBLFVBQVUsQ0FBQ2YsU0FBUyxJQUNyQmpDLE9BQUEsQ0FBT2dELFVBQVUsQ0FBQ2YsU0FBUyxNQUFLLFFBQVEsSUFDeEMzRCxLQUFLLENBQUNDLE9BQU8sQ0FBQ3lFLFVBQVUsQ0FBQ2YsU0FBUyxDQUFDLEVBQ25DO0lBQ0EsT0FBTyxJQUFJO0VBQ2I7RUFDQSxJQUFNQyxHQUFHLEdBQUdjLFVBQVUsQ0FBQ2YsU0FBb0M7RUFDM0QsSUFBTVYsR0FBRyxJQUFBd0IsYUFBQSxHQUFHYixHQUFHLENBQUNrQixRQUFRLGNBQUFMLGFBQUEsY0FBQUEsYUFBQSxHQUFJYixHQUFHLENBQUNtQixPQUFPO0VBQ3ZDLE9BQU85QixHQUFHLElBQUksSUFBSSxHQUFHRyxNQUFNLENBQUNILEdBQUcsQ0FBQyxHQUFHLElBQUk7QUFDekM7QUFFQSxTQUFTK0IsMENBQTBDQSxDQUFDbEMsY0FBK0IsRUFBRW1DLFFBQWdCLEVBQWlCO0VBQUEsSUFBQUMsSUFBQSxFQUFBQyxjQUFBO0VBQ3BILElBQU0zQixNQUFNLEdBQUdWLGNBQWMsQ0FBQzZCLElBQUksQ0FBQyxVQUFBQyxDQUFDO0lBQUEsT0FBSSxDQUFDQSxDQUFDLENBQUNSLFNBQVMsSUFBSSxFQUFFLEVBQUVTLFdBQVcsQ0FBQyxDQUFDLEtBQUtJLFFBQVEsQ0FBQ0osV0FBVyxDQUFDLENBQUM7RUFBQSxFQUFDO0VBQ3JHLElBQUksQ0FBQ3JCLE1BQU0sSUFBSSxDQUFDQSxNQUFNLENBQUNHLFNBQVMsSUFBSWpDLE9BQUEsQ0FBTzhCLE1BQU0sQ0FBQ0csU0FBUyxNQUFLLFFBQVEsSUFBSTNELEtBQUssQ0FBQ0MsT0FBTyxDQUFDdUQsTUFBTSxDQUFDRyxTQUFTLENBQUMsRUFBRTtJQUMzRyxPQUFPLElBQUk7RUFDYjtFQUNBLElBQU1DLEdBQUcsR0FBR0osTUFBTSxDQUFDRyxTQUFvQztFQUN2RCxJQUFNVixHQUFHLElBQUFpQyxJQUFBLElBQUFDLGNBQUEsR0FBR3ZCLEdBQUcsQ0FBQ2tCLFFBQVEsY0FBQUssY0FBQSxjQUFBQSxjQUFBLEdBQUl2QixHQUFHLENBQUNtQixPQUFPLGNBQUFHLElBQUEsY0FBQUEsSUFBQSxHQUFJdEIsR0FBRyxDQUFDNUMsRUFBRTtFQUNqRCxPQUFPaUMsR0FBRyxJQUFJLElBQUksR0FBR0csTUFBTSxDQUFDSCxHQUFHLENBQUMsR0FBRyxJQUFJO0FBQ3pDOztBQUVBO0FBQ0EsU0FBU21DLHVDQUF1Q0EsQ0FBQ0MsSUFBWSxFQUFZO0VBQ3ZFLElBQU1DLE9BQU8sR0FBR0QsSUFBSSxDQUFDRSxLQUFLLENBQUMsdUJBQXVCLENBQUM7RUFDbkQsSUFBSUQsT0FBTyxFQUFFO0lBQ1gsSUFBTXBDLENBQUMsR0FBR0MsUUFBUSxDQUFDbUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztJQUNsQyxPQUFPN0UsTUFBTSxDQUFDNEMsS0FBSyxDQUFDSCxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQ0EsQ0FBQyxDQUFDO0VBQ25DO0VBQ0EsSUFBTXNDLElBQUksR0FBR0gsSUFBSSxDQUFDRSxLQUFLLENBQUMsa0JBQWtCLENBQUM7RUFDM0MsSUFBSUMsSUFBSSxFQUFFO0lBQ1IsSUFBTXRDLEVBQUMsR0FBR0MsUUFBUSxDQUFDcUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztJQUMvQixPQUFPL0UsTUFBTSxDQUFDNEMsS0FBSyxDQUFDSCxFQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQ0EsRUFBQyxDQUFDO0VBQ25DO0VBQ0EsT0FBTyxFQUFFO0FBQ1g7QUFFQSxJQUFNdUMsa0JBQWtCLEdBQUcsU0FBckJBLGtCQUFrQkEsQ0FBSUMsUUFBaUIsRUFBSztFQUNoRCxJQUFNQyxXQUFXLEdBQUdwSixNQUFNLENBQWtCO0lBQzFDeUUsRUFBRSxFQUFFMEUsUUFBUSxDQUFDMUUsRUFBRSxDQUFDNEUsUUFBUSxDQUFDLENBQUM7SUFDMUJ6RSxJQUFJLEVBQUV1RSxRQUFRLENBQUNHLFNBQVM7SUFDeEJDLE1BQU0sRUFBRUosUUFBUSxDQUFDSztFQUNuQixDQUFDLENBQUM7RUFFRixJQUNFSixXQUFXLENBQUNLLE9BQU8sQ0FBQ2hGLEVBQUUsS0FBSzBFLFFBQVEsQ0FBQzFFLEVBQUUsQ0FBQzRFLFFBQVEsQ0FBQyxDQUFDLElBQ2pERCxXQUFXLENBQUNLLE9BQU8sQ0FBQzdFLElBQUksS0FBS3VFLFFBQVEsQ0FBQ0csU0FBUyxJQUMvQ0YsV0FBVyxDQUFDSyxPQUFPLENBQUNGLE1BQU0sS0FBS0osUUFBUSxDQUFDSyxPQUFPLEVBQy9DO0lBQ0FKLFdBQVcsQ0FBQ0ssT0FBTyxHQUFHO01BQ3BCaEYsRUFBRSxFQUFFMEUsUUFBUSxDQUFDMUUsRUFBRSxDQUFDNEUsUUFBUSxDQUFDLENBQUM7TUFDMUJ6RSxJQUFJLEVBQUV1RSxRQUFRLENBQUNHLFNBQVM7TUFDeEJDLE1BQU0sRUFBRUosUUFBUSxDQUFDSztJQUNuQixDQUFDO0VBQ0g7RUFDQSxPQUFPO0lBQ0xKLFdBQVcsRUFBRUEsV0FBVyxDQUFDSztFQUMzQixDQUFDO0FBQ0gsQ0FBQztBQUVELElBQU1DLGtDQUFrQyxHQUFHLFNBQXJDQSxrQ0FBa0NBLENBQ3RDQyxTQUFtQixFQUNuQkMsY0FBNkIsRUFDMEI7RUFDdkQsSUFBTUMsY0FBYyxHQUFHRCxjQUFjLENBQUN4QixJQUFJLENBQUMsVUFBQTBCLE9BQU87SUFBQSxJQUFBQyxpQkFBQTtJQUFBLFFBQUFBLGlCQUFBLEdBQ2hERCxPQUFPLENBQUNFLFFBQVEsY0FBQUQsaUJBQUEsZ0JBQUFBLGlCQUFBLEdBQWhCQSxpQkFBQSxDQUFrQkUsZUFBZSxjQUFBRixpQkFBQSx1QkFBakNBLGlCQUFBLENBQW1DRyxJQUFJLENBQUMsVUFBQWpELE1BQU07TUFBQSxPQUFJMEMsU0FBUyxDQUFDL0QsUUFBUSxDQUFDcUIsTUFBTSxDQUFDa0QsU0FBUyxDQUFDO0lBQUEsRUFBQztFQUFBLENBQ3pGLENBQUM7RUFDRCxJQUFJTixjQUFjLGFBQWRBLGNBQWMsZUFBZEEsY0FBYyxDQUFFRyxRQUFRLEVBQUU7SUFDNUIsT0FBTztNQUNMRixPQUFPLEVBQUVELGNBQWM7TUFDdkJPLFNBQVMsRUFBRVAsY0FBYyxDQUFDRyxRQUFRLENBQUNLLFVBQVUsSUFBSXBJLFVBQVUsQ0FBQ3FJLEdBQUcsQ0FBQyxDQUFDLElBQUk7SUFDdkUsQ0FBQztFQUNIO0VBRUEsSUFBQUMscUJBQUEsR0FBcUIxSSxnQkFBZ0IsQ0FBQzJJLFFBQVEsQ0FBQyxDQUFDO0lBQXhDQyxRQUFRLEdBQUFGLHFCQUFBLENBQVJFLFFBQVE7RUFDaEIsSUFBTUMsWUFBWSxHQUFHQyxNQUFNLENBQUNDLE9BQU8sQ0FBQ0gsUUFBUSxDQUFDLENBQUNyQyxJQUFJLENBQUMsVUFBQXlDLEtBQUE7SUFBQSxJQUFBQyxLQUFBLEdBQUFDLGNBQUEsQ0FBQUYsS0FBQTtNQUFJRyxlQUFlLEdBQUFGLEtBQUE7SUFBQSxPQUNwRUUsZUFBZSxDQUFDZCxJQUFJLENBQUMsVUFBQUosT0FBTztNQUFBLElBQUFtQixrQkFBQTtNQUFBLFFBQUFBLGtCQUFBLEdBQzFCbkIsT0FBTyxDQUFDRSxRQUFRLGNBQUFpQixrQkFBQSxnQkFBQUEsa0JBQUEsR0FBaEJBLGtCQUFBLENBQWtCaEIsZUFBZSxjQUFBZ0Isa0JBQUEsdUJBQWpDQSxrQkFBQSxDQUFtQ2YsSUFBSSxDQUFDLFVBQUFqRCxNQUFNO1FBQUEsT0FBSTBDLFNBQVMsQ0FBQy9ELFFBQVEsQ0FBQ3FCLE1BQU0sQ0FBQ2tELFNBQVMsQ0FBQztNQUFBLEVBQUM7SUFBQSxDQUN6RixDQUFDO0VBQUEsQ0FDSCxDQUFDO0VBQ0QsSUFBSU8sWUFBWSxFQUFFO0lBQ2hCLElBQUFRLGFBQUEsR0FBQUgsY0FBQSxDQUFxQ0wsWUFBWTtNQUExQ04sU0FBUyxHQUFBYyxhQUFBO01BQUVGLGVBQWUsR0FBQUUsYUFBQTtJQUNqQyxJQUFNQyxLQUFLLEdBQUdILGVBQWUsQ0FBQzVDLElBQUksQ0FBQyxVQUFBMEIsT0FBTztNQUFBLElBQUFzQixrQkFBQTtNQUFBLFFBQUFBLGtCQUFBLEdBQ3hDdEIsT0FBTyxDQUFDRSxRQUFRLGNBQUFvQixrQkFBQSxnQkFBQUEsa0JBQUEsR0FBaEJBLGtCQUFBLENBQWtCbkIsZUFBZSxjQUFBbUIsa0JBQUEsdUJBQWpDQSxrQkFBQSxDQUFtQ2xCLElBQUksQ0FBQyxVQUFBakQsTUFBTTtRQUFBLE9BQUkwQyxTQUFTLENBQUMvRCxRQUFRLENBQUNxQixNQUFNLENBQUNrRCxTQUFTLENBQUM7TUFBQSxFQUFDO0lBQUEsQ0FDekYsQ0FBQztJQUNELElBQUlnQixLQUFLLGFBQUxBLEtBQUssZUFBTEEsS0FBSyxDQUFFbkIsUUFBUSxFQUFFO01BQ25CLE9BQU87UUFBRUYsT0FBTyxFQUFFcUIsS0FBSztRQUFFZixTQUFTLEVBQUVlLEtBQUssQ0FBQ25CLFFBQVEsQ0FBQ0ssVUFBVSxJQUFJRDtNQUFVLENBQUM7SUFDOUU7RUFDRjtFQUVBLE9BQU8sSUFBSTtBQUNiLENBQUM7QUFFRCxPQUFPLElBQU1pQixjQUFjLEdBQUcsU0FBakJBLGNBQWNBLENBQUFDLEtBQUEsRUFLQTtFQUFBLElBSmpCQyxhQUFhLEdBQUFELEtBQUEsQ0FBckJFLE1BQU07SUFDTkMsa0JBQWtCLEdBQUFILEtBQUEsQ0FBbEJHLGtCQUFrQjtJQUNsQkMsT0FBTyxHQUFBSixLQUFBLENBQVBJLE9BQU87SUFBQUMsWUFBQSxHQUFBTCxLQUFBLENBQ1BNLE1BQU07SUFBTkEsTUFBTSxHQUFBRCxZQUFBLGNBQUcsRUFBRSxHQUFBQSxZQUFBO0VBRVgsSUFBQUUsS0FBQSxHQUFjckwsSUFBSSxDQUFDLENBQUM7SUFBWmlILENBQUMsR0FBQW9FLEtBQUEsQ0FBRHBFLENBQUM7RUFDVCxJQUFNMEIsUUFBUSxHQUFHMUksT0FBTyxDQUFDLENBQUM7RUFDMUIsSUFBQXFMLGlCQUFBLEdBYUlwTCxnQkFBZ0IsQ0FBQyxDQUFDO0lBWnBCcUwsT0FBTyxHQUFBRCxpQkFBQSxDQUFQQyxPQUFPO0lBQ1BDLFVBQVUsR0FBQUYsaUJBQUEsQ0FBVkUsVUFBVTtJQUNWbEgsTUFBTSxHQUFBZ0gsaUJBQUEsQ0FBTmhILE1BQU07SUFDTm1ILFNBQVMsR0FBQUgsaUJBQUEsQ0FBVEcsU0FBUztJQUNUQyxJQUFJLEdBQUFKLGlCQUFBLENBQUpJLElBQUk7SUFDSkMsT0FBTyxHQUFBTCxpQkFBQSxDQUFQSyxPQUFPO0lBQ1BDLEtBQUssR0FBQU4saUJBQUEsQ0FBTE0sS0FBSztJQUNMQyxpQkFBaUIsR0FBQVAsaUJBQUEsQ0FBakJPLGlCQUFpQjtJQUNqQkMsa0JBQWtCLEdBQUFSLGlCQUFBLENBQWxCUSxrQkFBa0I7SUFDbEJDLG1CQUFtQixHQUFBVCxpQkFBQSxDQUFuQlMsbUJBQW1CO0lBQ25CekksWUFBWSxHQUFBZ0ksaUJBQUEsQ0FBWmhJLFlBQVk7SUFDWjBJLGVBQWUsR0FBQVYsaUJBQUEsQ0FBZlUsZUFBZTtFQUVqQixJQUFNQyxLQUFLLEdBQUc3TCxRQUFRLENBQUMsQ0FBQztFQUN4QixJQUFBOEwsWUFBQSxHQUEwQnhMLFdBQVcsQ0FBQyxDQUFDO0lBQS9CeUwsYUFBYSxHQUFBRCxZQUFBLENBQWJDLGFBQWE7RUFDckIsSUFBQUMsbUJBQUEsR0FBd0IxRCxrQkFBa0IsQ0FBQ0MsUUFBUSxDQUFDO0lBQTVDQyxXQUFXLEdBQUF3RCxtQkFBQSxDQUFYeEQsV0FBVztFQUNuQixJQUFBeUQsa0JBQUEsR0FBOEIxTCxpQkFBaUIsQ0FBQyxDQUFDO0lBQXpDMkwsaUJBQWlCLEdBQUFELGtCQUFBLENBQWpCQyxpQkFBaUI7RUFFekIsSUFBTUMsZ0JBQWdCLEdBQUcvTSxNQUFNLENBQUNLLE1BQU0sQ0FBQyxDQUFDLENBQUM7RUFDekMsSUFBTTJNLG1CQUFtQixHQUFHaE4sTUFBTSxDQUFnQixJQUFJLENBQUM7RUFDdkQsSUFBTWlOLGFBQWEsR0FBR2pOLE1BQU0sQ0FBQ3VMLGFBQWEsSUFBSWxMLE1BQU0sQ0FBQyxDQUFDLENBQUM7RUFDdkQsSUFBTTZNLGVBQWUsR0FBR3ZLLGFBQWEsQ0FBQyxVQUFBd0ssS0FBSztJQUFBLE9BQUlBLEtBQUssQ0FBQ0QsZUFBZTtFQUFBLEVBQUM7RUFDckUsSUFBTUUsYUFBYSxHQUFHcE4sTUFBTSxDQUFDLEtBQUssQ0FBQztFQUNuQyxJQUFNcU4sV0FBVyxHQUFHck4sTUFBTSxDQUFnQixFQUFFLENBQUM7RUFDN0M7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBQ0UsSUFBTXNOLHFCQUFxQixHQUFHdE4sTUFBTSxDQUcxQixJQUFJLENBQUM7RUFDZjtFQUNBLElBQU11Tix3QkFBd0IsR0FBR3ZOLE1BQU0sQ0FBYyxJQUFJd04sR0FBRyxDQUFDLENBQUMsQ0FBQztFQUMvRDtFQUNBLElBQU1DLHVCQUF1QixHQUFHek4sTUFBTSxDQUE4QixJQUFJLENBQUM7RUFDekU7RUFDQSxJQUFNME4sZ0JBQWdCLEdBQUcxTixNQUFNLENBQXVCLElBQUksQ0FBQztFQUMzRCxJQUFNMk4sZUFBZSxHQUFHM04sTUFBTSxDQUFDLEtBQUssQ0FBQztFQUNyQyxJQUFNNE4sWUFBWSxHQUFHNU4sTUFBTSxDQUFDLEtBQUssQ0FBQztFQUNsQztFQUNBLElBQU02Tix5QkFBeUIsR0FBRzdOLE1BQU0sQ0FBZ0IsSUFBSSxDQUFDO0VBQzdEO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7RUFDRSxJQUFNOE4scUJBQXFCLEdBQUc5TixNQUFNLENBQWdCLElBQUksQ0FBQztFQUN6RCxJQUFNK04sZ0JBQWdCLEdBQUcvTixNQUFNLENBQWE7SUFBQSxPQUFNa0csU0FBUztFQUFBLEVBQUM7RUFDNUQsSUFBQThILFNBQUEsR0FBNEM5TixRQUFRLENBQXlCLENBQUMsQ0FBQyxDQUFDO0lBQUErTixVQUFBLEdBQUFsRCxjQUFBLENBQUFpRCxTQUFBO0lBQXpFRSxjQUFjLEdBQUFELFVBQUE7SUFBRUUsaUJBQWlCLEdBQUFGLFVBQUE7RUFDeEM7QUFDRjtBQUNBO0FBQ0E7QUFDQTtFQUNFLElBQUFHLFVBQUEsR0FBOENsTyxRQUFRLENBQVMrTSxhQUFhLENBQUN4RCxPQUFPLENBQUM7SUFBQTRFLFVBQUEsR0FBQXRELGNBQUEsQ0FBQXFELFVBQUE7SUFBOUVFLGVBQWUsR0FBQUQsVUFBQTtJQUFFRSxrQkFBa0IsR0FBQUYsVUFBQTtFQUMxQztFQUNBLElBQU1HLFlBQVksR0FBR3hPLE1BQU0sQ0FBQyxJQUFJLENBQUM7RUFDakM7RUFDQSxJQUFNeU8sc0JBQXNCLEdBQUd6TyxNQUFNLENBQWdCLElBQUksQ0FBQztFQUUxRCxJQUFNME8sb0JBQW9CLEdBQUcxTyxNQUFNLENBQUNxTSxpQkFBaUIsQ0FBQztFQUN0RCxJQUFNc0MscUJBQXFCLEdBQUczTyxNQUFNLENBQUNzTSxrQkFBa0IsQ0FBQztFQUN4RCxJQUFNc0Msc0JBQXNCLEdBQUc1TyxNQUFNLENBQUN1TSxtQkFBbUIsQ0FBQztFQUMxRDtFQUNBLElBQU1zQyxVQUFVLEdBQUc3TyxNQUFNLENBQUM7SUFBRThELFlBQVksRUFBWkEsWUFBWTtJQUFFaUksT0FBTyxFQUFQQSxPQUFPO0lBQUVqSCxNQUFNLEVBQU5BLE1BQU07SUFBRW9ILElBQUksRUFBSkE7RUFBSyxDQUFDLENBQUM7RUFDbEUyQyxVQUFVLENBQUNwRixPQUFPLEdBQUc7SUFBRTNGLFlBQVksRUFBWkEsWUFBWTtJQUFFaUksT0FBTyxFQUFQQSxPQUFPO0lBQUVqSCxNQUFNLEVBQU5BLE1BQU07SUFBRW9ILElBQUksRUFBSkE7RUFBSyxDQUFDO0VBRTVEak0sU0FBUyxDQUFDLFlBQU07SUFDZHlPLG9CQUFvQixDQUFDakYsT0FBTyxHQUFHNEMsaUJBQWlCO0lBQ2hEc0MscUJBQXFCLENBQUNsRixPQUFPLEdBQUc2QyxrQkFBa0I7SUFDbERzQyxzQkFBc0IsQ0FBQ25GLE9BQU8sR0FBRzhDLG1CQUFtQjtFQUN0RCxDQUFDLEVBQUUsQ0FBQ0YsaUJBQWlCLEVBQUVDLGtCQUFrQixFQUFFQyxtQkFBbUIsQ0FBQyxDQUFDO0VBRWhFLElBQUF1QyxnQkFBQSxHQVNJeE8sZUFBZSxDQUFDO01BQ2xCa0wsTUFBTSxFQUFFRCxhQUFhLElBQUkwQixhQUFhLENBQUN4RCxPQUFPO01BQzlDTCxXQUFXLEVBQVhBLFdBQVc7TUFDWHFDLGtCQUFrQixFQUFsQkEsa0JBQWtCO01BQ2xCQyxPQUFPLEVBQVBBLE9BQU87TUFDUEUsTUFBTSxFQUFOQTtJQUNGLENBQUMsQ0FBQztJQWRBbUQsZUFBZSxHQUFBRCxnQkFBQSxDQUFmQyxlQUFlO0lBQ2Z0RSxRQUFRLEdBQUFxRSxnQkFBQSxDQUFSckUsUUFBUTtJQUNSdUUscUJBQXFCLEdBQUFGLGdCQUFBLENBQXJCRSxxQkFBcUI7SUFDckJDLFlBQVksR0FBQUgsZ0JBQUEsQ0FBWkcsWUFBWTtJQUNaQyxVQUFVLEdBQUFKLGdCQUFBLENBQVZJLFVBQVU7SUFDVkMsYUFBYSxHQUFBTCxnQkFBQSxDQUFiSyxhQUFhO0lBQ2JDLGVBQWUsR0FBQU4sZ0JBQUEsQ0FBZk0sZUFBZTtJQUNmQyxZQUFZLEdBQUFQLGdCQUFBLENBQVpPLFlBQVk7RUFTZGhDLFdBQVcsQ0FBQzVELE9BQU8sR0FBR2dCLFFBQVE7O0VBRTlCO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7RUFDRSxJQUFNNkUsZUFBZSxHQUFHdlAsV0FBVyxDQUNqQyxVQUFDcUssU0FBaUIsRUFBRU4sT0FBb0IsRUFBSztJQUMzQ2pJLGdCQUFnQixDQUFDMkksUUFBUSxDQUFDLENBQUMsQ0FBQzBFLFVBQVUsQ0FBQzlFLFNBQVMsRUFBRU4sT0FBTyxDQUFDO0lBQzFELElBQUkwRSxZQUFZLENBQUMvRSxPQUFPLElBQUl4SCxVQUFVLENBQUNzTixFQUFFLENBQUNuRixTQUFTLENBQUMsRUFBRTtNQUNwRDhFLFVBQVUsQ0FBQ3BGLE9BQU8sQ0FBQztJQUNyQjtFQUNGLENBQUMsRUFDRCxDQUFDb0YsVUFBVSxDQUNiLENBQUM7RUFFRCxJQUFNTSxlQUFlLEdBQUd6UCxXQUFXLENBQ2pDLFVBQUNxSyxTQUFpQixFQUFFcEgsU0FBaUIsRUFBSztJQUN4Q25CLGdCQUFnQixDQUFDMkksUUFBUSxDQUFDLENBQUMsQ0FBQzJFLGFBQWEsQ0FBQy9FLFNBQVMsRUFBRXBILFNBQVMsQ0FBQztJQUMvRCxJQUFJd0wsWUFBWSxDQUFDL0UsT0FBTyxJQUFJeEgsVUFBVSxDQUFDc04sRUFBRSxDQUFDbkYsU0FBUyxDQUFDLEVBQUU7TUFDcEQrRSxhQUFhLENBQUNuTSxTQUFTLENBQUM7SUFDMUI7RUFDRixDQUFDLEVBQ0QsQ0FBQ21NLGFBQWEsQ0FDaEIsQ0FBQzs7RUFFRDtFQUNBLElBQU1NLGdCQUFnQixHQUFHMVAsV0FBVyxDQUFDLFVBQUNxSyxTQUFpQixFQUFLO0lBQzFEdkksZ0JBQWdCLENBQUMySSxRQUFRLENBQUMsQ0FBQyxDQUFDa0YsV0FBVyxDQUFDdEYsU0FBUyxFQUFFLEVBQUUsQ0FBQztFQUN4RCxDQUFDLEVBQUUsRUFBRSxDQUFDOztFQUVOO0VBQ0E7RUFDQTtFQUNBbkssU0FBUyxDQUFDLFlBQU07SUFDZGdDLFVBQVUsQ0FBQzBOLEdBQUcsQ0FBQ3JCLGVBQWUsQ0FBQztFQUNqQyxDQUFDLEVBQUUsQ0FBQ0EsZUFBZSxDQUFDLENBQUM7RUFFckJyTyxTQUFTLENBQUMsWUFBTTtJQUNkdU8sWUFBWSxDQUFDL0UsT0FBTyxHQUFHLElBQUk7SUFDM0IsT0FBTyxZQUFNO01BQ1grRSxZQUFZLENBQUMvRSxPQUFPLEdBQUcsS0FBSztNQUM1QixJQUFJeEgsVUFBVSxDQUFDc04sRUFBRSxDQUFDdEMsYUFBYSxDQUFDeEQsT0FBTyxDQUFDLEVBQUU7UUFDeEN4SCxVQUFVLENBQUMwTixHQUFHLENBQUMsSUFBSSxDQUFDO01BQ3RCO0lBQ0YsQ0FBQztFQUNILENBQUMsRUFBRSxFQUFFLENBQUM7O0VBRU47RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQSxJQUFNQyxpQkFBaUIsR0FBRzlOLGNBQWMsQ0FBQ3dNLGVBQWUsQ0FBQztFQUN6RHJPLFNBQVMsQ0FBQyxZQUFNO0lBQUEsSUFBQTRQLHFCQUFBO0lBQ2QsSUFBTUMsTUFBTSxHQUFHRixpQkFBaUIsYUFBakJBLGlCQUFpQix1QkFBakJBLGlCQUFpQixDQUFFRSxNQUFNO0lBQ3hDLElBQUksQ0FBQ0EsTUFBTSxFQUFFO0lBQ2IsSUFBTUMsVUFBVSxHQUFHRCxNQUFNLEtBQUssVUFBVSxJQUFJQSxNQUFNLEtBQUssT0FBTztJQUM5RCxJQUFJLENBQUNDLFVBQVUsRUFBRTtJQUNqQixJQUFNQyxHQUFHLE1BQUF6SyxNQUFBLENBQU0rSSxlQUFlLE9BQUEvSSxNQUFBLENBQUl1SyxNQUFNLE9BQUF2SyxNQUFBLEVBQUFzSyxxQkFBQSxHQUFJRCxpQkFBaUIsYUFBakJBLGlCQUFpQix1QkFBakJBLGlCQUFpQixDQUFFSyxVQUFVLGNBQUFKLHFCQUFBLGNBQUFBLHFCQUFBLEdBQUksRUFBRSxDQUFFO0lBQ2pGLElBQUlwQixzQkFBc0IsQ0FBQ2hGLE9BQU8sS0FBS3VHLEdBQUcsRUFBRTtJQUM1Q3ZCLHNCQUFzQixDQUFDaEYsT0FBTyxHQUFHdUcsR0FBRztJQUVwQyxJQUFNRSxJQUFJLEdBQUdyTyxnQkFBZ0IsQ0FBQzJJLFFBQVEsQ0FBQyxDQUFDLENBQUMyRixXQUFXLENBQUM3QixlQUFlLENBQUM7SUFDckUsSUFBTThCLG1CQUFtQixHQUFHRixJQUFJLENBQUNoRyxJQUFJLENBQUMsVUFBQW1HLEdBQUc7TUFBQSxPQUFJaE8sK0JBQStCLENBQUNnTyxHQUFHLENBQUM1TCxFQUFFLENBQUM7SUFBQSxFQUFDO0lBQ3JGLElBQUkyTCxtQkFBbUIsRUFBRTtNQUN2Qm5CLFlBQVksQ0FBQztRQUFFcUIsS0FBSyxFQUFFO01BQUssQ0FBQyxDQUFDO0lBQy9CO0VBQ0YsQ0FBQyxFQUFFLENBQUNWLGlCQUFpQixhQUFqQkEsaUJBQWlCLHVCQUFqQkEsaUJBQWlCLENBQUVFLE1BQU0sRUFBRUYsaUJBQWlCLGFBQWpCQSxpQkFBaUIsdUJBQWpCQSxpQkFBaUIsQ0FBRUssVUFBVSxFQUFFM0IsZUFBZSxFQUFFVyxZQUFZLENBQUMsQ0FBQztFQUU3RmhQLFNBQVMsQ0FBQyxZQUFNO0lBQ2QsSUFBTXNRLFdBQVcsR0FBRyxJQUFJQyxXQUFXLENBQUMsK0JBQStCLEVBQUU7TUFDbkVDLE1BQU0sRUFBRTtRQUFFMUIsZUFBZSxFQUFmQTtNQUFnQjtJQUM1QixDQUFDLENBQUM7SUFDRjJCLFFBQVEsQ0FBQ0MsYUFBYSxDQUFDSixXQUFXLENBQUM7RUFDckMsQ0FBQyxFQUFFLENBQUN4QixlQUFlLENBQUMsQ0FBQztFQUVyQixJQUFNNkIsd0JBQXdCLEdBQUc1USxNQUFNLENBQTRCdUwsYUFBYSxDQUFDO0VBRWpGdEwsU0FBUyxDQUFDLFlBQU07SUFDZCxJQUFNNFEscUJBQXFCLEdBQUdELHdCQUF3QixDQUFDbkgsT0FBTztJQUM5RG1ILHdCQUF3QixDQUFDbkgsT0FBTyxHQUFHOEIsYUFBYTs7SUFFaEQ7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBLElBQUksQ0FBQ0EsYUFBYSxJQUFJc0YscUJBQXFCLEVBQUU7TUFDM0M1RCxhQUFhLENBQUN4RCxPQUFPLEdBQUdwSixNQUFNLENBQUMsQ0FBQztNQUNoQ2tPLGtCQUFrQixDQUFDdEIsYUFBYSxDQUFDeEQsT0FBTyxDQUFDO01BQ3pDc0QsZ0JBQWdCLENBQUN0RCxPQUFPLEdBQUdwSixNQUFNLENBQUMsQ0FBQztNQUNuQzJNLG1CQUFtQixDQUFDdkQsT0FBTyxHQUFHLElBQUk7TUFDbEMyRCxhQUFhLENBQUMzRCxPQUFPLEdBQUcsS0FBSztNQUM3QmtFLGVBQWUsQ0FBQ2xFLE9BQU8sR0FBRyxLQUFLO01BQy9Cb0UseUJBQXlCLENBQUNwRSxPQUFPLEdBQUcsSUFBSTtNQUN4Q3FFLHFCQUFxQixDQUFDckUsT0FBTyxHQUFHLElBQUk7TUFDcEM7SUFDRjtJQUVBLElBQUk4QixhQUFhLElBQUlBLGFBQWEsS0FBSzBCLGFBQWEsQ0FBQ3hELE9BQU8sRUFBRTtNQUM1RDtNQUNBO01BQ0E7TUFDQTs7TUFFQTtNQUNBdUMsVUFBVSxDQUFDLElBQUksQ0FBQztNQUNoQkMsU0FBUyxhQUFUQSxTQUFTLGVBQVRBLFNBQVMsQ0FBRyxJQUFJLENBQUM7TUFDakJPLGVBQWUsQ0FBQyxJQUFJLENBQUM7TUFDckJMLE9BQU8sQ0FBQyxJQUFJLENBQUM7TUFFYmMsYUFBYSxDQUFDeEQsT0FBTyxHQUFHOEIsYUFBYTtNQUNyQ2dELGtCQUFrQixDQUFDaEQsYUFBYSxDQUFDO01BQ2pDd0IsZ0JBQWdCLENBQUN0RCxPQUFPLEdBQUdwSixNQUFNLENBQUMsQ0FBQztNQUNuQzJNLG1CQUFtQixDQUFDdkQsT0FBTyxHQUFHLElBQUk7TUFDbEMyRCxhQUFhLENBQUMzRCxPQUFPLEdBQUcsS0FBSztNQUM3QjtNQUNBO01BQ0E7TUFDQWtFLGVBQWUsQ0FBQ2xFLE9BQU8sR0FBRzFILG9CQUFvQixDQUFDK08sUUFBUSxDQUFDdkYsYUFBYSxDQUFDO01BQ3RFc0MseUJBQXlCLENBQUNwRSxPQUFPLEdBQUcsSUFBSTtNQUN4Q3FFLHFCQUFxQixDQUFDckUsT0FBTyxHQUFHLElBQUk7O01BRXBDO0lBQ0Y7RUFDRixDQUFDLEVBQUUsQ0FBQzhCLGFBQWEsRUFBRVEsT0FBTyxFQUFFQyxVQUFVLEVBQUVDLFNBQVMsRUFBRU8sZUFBZSxFQUFFTCxPQUFPLENBQUMsQ0FBQztFQUU3RWxNLFNBQVMsQ0FBQyxZQUFNO0lBQ2RpTixlQUFlLENBQUMzQixhQUFhLElBQUksSUFBSSxDQUFDO0VBQ3hDLENBQUMsRUFBRSxDQUFDQSxhQUFhLEVBQUUyQixlQUFlLENBQUMsQ0FBQztFQUVwQyxJQUFNNkQsaUJBQWlCLEdBQUdoUixXQUFXLENBQ25DLFVBQUNpUixHQUFrQixFQUFFQyxZQUFxQixFQUFFQyxlQUF3QixFQUFLO0lBQUEsSUFBQUMscUJBQUEsRUFBQUMsc0JBQUE7SUFDdkUsSUFBUWhILFNBQVMsR0FBK0I0RyxHQUFHLENBQTNDNUcsU0FBUztNQUFFcEgsU0FBUyxHQUFvQmdPLEdBQUcsQ0FBaENoTyxTQUFTO01BQUVxTyxhQUFhLEdBQUtMLEdBQUcsQ0FBckJLLGFBQWE7SUFDM0MsSUFBTVAsUUFBUSxHQUFHN08sVUFBVSxDQUFDc04sRUFBRSxDQUFDbkYsU0FBUyxDQUFDO0lBRXpDeEksb0JBQW9CLENBQUMwUCxLQUFLLENBQUNsSCxTQUFTLENBQUM7SUFDckNvRixlQUFlLENBQUNwRixTQUFTLEVBQUVpSCxhQUFhLENBQUM7SUFFekMsSUFBTUUsYUFBYSxHQUFHN0QsZ0JBQWdCLENBQUNqRSxPQUFPO0lBQzlDLElBQUk4SCxhQUFhLEVBQUU7TUFDakI3RCxnQkFBZ0IsQ0FBQ2pFLE9BQU8sR0FBRyxJQUFJO01BQy9CNEQsV0FBVyxDQUFDNUQsT0FBTyxHQUFHOEgsYUFBYTtNQUNuQ25DLGVBQWUsQ0FBQ21DLGFBQWEsQ0FBQztNQUM5QixJQUFJVCxRQUFRLEVBQUU7UUFDWi9DLGdCQUFnQixDQUFDdEUsT0FBTyxDQUFDLENBQUM7UUFDMUJvRSx5QkFBeUIsQ0FBQ3BFLE9BQU8sR0FBRyxJQUFJO1FBQ3hDcUUscUJBQXFCLENBQUNyRSxPQUFPLEdBQUcsSUFBSTtRQUNwQ2tFLGVBQWUsQ0FBQ2xFLE9BQU8sR0FBRyxLQUFLO01BQ2pDO01BQ0FpSCxRQUFRLENBQUNDLGFBQWEsQ0FDcEIsSUFBSUgsV0FBVyxDQUFDLGdCQUFnQixFQUFFO1FBQ2hDQyxNQUFNLEVBQUU7VUFBRWUsSUFBSSxFQUFFLElBQUk7VUFBRUMsUUFBUSxFQUFFLE9BQU87VUFBRTNILE9BQU8sRUFBRXJDLENBQUMsQ0FBQyxZQUFZO1FBQUU7TUFDcEUsQ0FBQyxDQUNILENBQUM7TUFDRDtJQUNGO0lBRUEsSUFBSXFKLFFBQVEsRUFBRTtNQUNaL0MsZ0JBQWdCLENBQUN0RSxPQUFPLENBQUMsQ0FBQztNQUMxQm9FLHlCQUF5QixDQUFDcEUsT0FBTyxHQUFHLElBQUk7TUFDeENxRSxxQkFBcUIsQ0FBQ3JFLE9BQU8sR0FBRyxJQUFJO01BQ3BDa0UsZUFBZSxDQUFDbEUsT0FBTyxHQUFHLEtBQUs7SUFDakM7SUFFQSxJQUFNaUksY0FBYyxHQUFHVCxZQUFZLEtBQUssK0RBQStEO0lBQ3ZHLElBQU1VLGVBQWUsR0FDbkJWLFlBQVksS0FBSyx1QkFBdUIsS0FBSUMsZUFBZSxhQUFmQSxlQUFlLHVCQUFmQSxlQUFlLENBQUV0TCxRQUFRLENBQUMsb0JBQW9CLENBQUM7SUFDN0YsSUFBTWtFLE9BQU8sR0FBRzRILGNBQWMsR0FDMUJqSyxDQUFDLENBQUMsd0JBQXdCLENBQUMsR0FDM0JrSyxlQUFlLEdBQ2JsSyxDQUFDLENBQUMseUJBQXlCLEVBQUU7TUFBRW1LLElBQUksR0FBQVQscUJBQUEsR0FBRUQsZUFBZSxhQUFmQSxlQUFlLGdCQUFBRSxzQkFBQSxHQUFmRixlQUFlLENBQUVsSSxLQUFLLENBQUMsY0FBYyxDQUFDLGNBQUFvSSxzQkFBQSx1QkFBdENBLHNCQUFBLENBQXlDLENBQUMsQ0FBQyxjQUFBRCxxQkFBQSxjQUFBQSxxQkFBQSxHQUFJO0lBQUcsQ0FBQyxDQUFDLEdBQ3pGMUosQ0FBQyxDQUFDLFlBQVksQ0FBQztJQUVyQjZILGVBQWUsQ0FBQ2xGLFNBQVMsRUFBQTFGLGFBQUEsQ0FBQUEsYUFBQTtNQUN2QkQsRUFBRSxZQUFBYyxNQUFBLENBQVl2QyxTQUFTLENBQUU7TUFDekI4RyxPQUFPLEVBQVBBLE9BQU87TUFDUCtILE9BQU8sRUFBRTtJQUFJLEdBRVQsQ0FBQ0gsY0FBYyxJQUFJLENBQUNDLGVBQWUsR0FBRztNQUFFRyxXQUFXLEVBQUUsQ0FBQ3JLLENBQUMsQ0FBQyxZQUFZLENBQUM7SUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO01BQ2pGc0ssSUFBSSxFQUFFLElBQUlDLElBQUksQ0FBQyxDQUFDO01BQ2hCQyxJQUFJLEVBQUU7UUFBRXhOLEVBQUUsRUFBRSxXQUFXO1FBQUVHLElBQUksRUFBRTtNQUFZLENBQUM7TUFDNUN5QixJQUFJLEVBQUV0RixlQUFlLENBQUNtUjtJQUFTLEVBQ2hDLENBQUM7SUFDRnpDLGdCQUFnQixDQUFDckYsU0FBUyxDQUFDO0lBRTNCLElBQUksQ0FBQzBHLFFBQVEsRUFBRTtNQUNicE8sa0JBQWtCLENBQUMsQ0FBQyxDQUFDeVAsZ0JBQWdCLENBQUMvSCxTQUFTLENBQUM7TUFDaERsSSxpQ0FBaUMsQ0FBQ2tJLFNBQVMsRUFBRSxPQUFPLENBQUM7SUFDdkQ7RUFDRixDQUFDLEVBQ0QsQ0FBQ2tGLGVBQWUsRUFBRUUsZUFBZSxFQUFFQyxnQkFBZ0IsRUFBRUwsZUFBZSxFQUFFM0gsQ0FBQyxDQUN6RSxDQUFDO0VBRUQsSUFBTTJLLGtCQUFrQixHQUFHclMsV0FBVyxDQUNwQyxVQUFDaVIsR0FBa0IsRUFBRXFCLE9BQWUsRUFBSztJQUN2QyxJQUFRakksU0FBUyxHQUFvQjRHLEdBQUcsQ0FBaEM1RyxTQUFTO01BQUVpSCxhQUFhLEdBQUtMLEdBQUcsQ0FBckJLLGFBQWE7O0lBRWhDO0lBQ0E7SUFDQTtJQUNBLElBQU1pQixpQkFBaUIsR0FBR3pRLGdCQUFnQixDQUN2QzJJLFFBQVEsQ0FBQyxDQUFDLENBQ1YyRixXQUFXLENBQUMvRixTQUFTLENBQUMsQ0FDdEJGLElBQUksQ0FBQyxVQUFBbUcsR0FBRztNQUFBLE9BQUlBLEdBQUcsQ0FBQzVMLEVBQUUsS0FBSzRNLGFBQWE7SUFBQSxFQUFDO0lBRXhDLElBQUksQ0FBQ2lCLGlCQUFpQixFQUFFO01BQ3RCMVEsb0JBQW9CLENBQUMyUSxLQUFLLENBQUNuSSxTQUFTLEVBQUVpSCxhQUFhLENBQUM7TUFDcEQvQixlQUFlLENBQUNsRixTQUFTLEVBQUU7UUFDekIzRixFQUFFLEVBQUU0TSxhQUFhO1FBQ2pCdkgsT0FBTyxFQUFFLEVBQUU7UUFDWGlJLElBQUksRUFBRSxJQUFJQyxJQUFJLENBQUMsQ0FBQztRQUNoQkMsSUFBSSxFQUFFO1VBQUV4TixFQUFFLEVBQUUsV0FBVztVQUFFRyxJQUFJLEVBQUU7UUFBWSxDQUFDO1FBQzVDeUIsSUFBSSxFQUFFdEYsZUFBZSxDQUFDbVI7TUFDeEIsQ0FBQyxDQUFDO0lBQ0o7SUFFQSxJQUFJalEsVUFBVSxDQUFDc04sRUFBRSxDQUFDbkYsU0FBUyxDQUFDLEVBQUU7TUFDNUJ5RCx5QkFBeUIsQ0FBQ3BFLE9BQU8sR0FBRzRILGFBQWE7TUFDakR2RCxxQkFBcUIsQ0FBQ3JFLE9BQU8sR0FBR1csU0FBUztJQUMzQztJQUVBeEksb0JBQW9CLENBQUM0USxPQUFPLENBQUNwSSxTQUFTLEVBQUVpSCxhQUFhLEVBQUVnQixPQUFPLENBQUM7RUFDakUsQ0FBQyxFQUNELENBQUMvQyxlQUFlLENBQ2xCLENBQUM7RUFFRCxJQUFNbUQsa0JBQWtCLEdBQUcxUyxXQUFXO0lBQUEsSUFBQTJTLEtBQUEsR0FBQUMsaUJBQUEsY0FBQUMsbUJBQUEsQ0FBQUMsSUFBQSxDQUNwQyxTQUFBQyxRQUNFOUIsR0FBa0IsRUFDbEJxQixPQUFlLEVBQ2ZVLE9BQVksRUFDWkMsZUFBdUIsRUFDdkJoTyxjQUE2QixFQUM3QjhNLFdBQTZCLEVBQzdCbUIsZ0JBQWdDLEVBRWhDQyxnQkFBc0IsRUFDdEJDLFNBQXdDO01BQUEsSUFBQUMsa0JBQUEsRUFBQUMscUJBQUEsRUFBQUMsaUJBQUEsRUFBQUMsb0JBQUEsRUFBQUMsa0JBQUE7TUFBQSxJQUFBcEosU0FBQSxFQUFBaUgsYUFBQSxFQUFBUCxRQUFBLEVBQUEyQyxhQUFBLEVBQUE5UCxXQUFBLEVBQUErUCxjQUFBLEVBQUFDLFVBQUEsRUFBQUMsWUFBQSxFQUFBQyxPQUFBLEVBQUFDLFlBQUEsRUFBQUMsZUFBQSxFQUFBQyw0QkFBQSxFQUFBQyxtQkFBQSxFQUFBQyxlQUFBLEVBQUFDLGlCQUFBLEVBQUE1TixjQUFBLEVBQUE2TixlQUFBLEVBQUFDLFdBQUEsRUFBQUMsYUFBQSxFQUFBQyxzQkFBQSxFQUFBQywrQkFBQSxFQUFBQyxtQkFBQSxFQUFBQyxpQkFBQSxFQUFBQywwQkFBQSxFQUFBQyw0QkFBQSxFQUFBQyxvQkFBQSxFQUFBQyxpQkFBQSxFQUFBQyxVQUFBLEVBQUFDLFFBQUEsRUFBQUMsZUFBQSxFQUFBQyxlQUFBLEVBQUFDLHlCQUFBLEVBQUFDLHVCQUFBLEVBQUFDLG1CQUFBLEVBQUFDLG1CQUFBLEVBQUFDLE9BQUEsRUFBQUMsR0FBQSxFQUFBQyxVQUFBLEVBQUFDLGtCQUFBLEVBQUFDLG1CQUFBLEVBQUFDLGdCQUFBLEVBQUFDLFNBQUEsRUFBQUMsY0FBQSxFQUFBQyxnQkFBQSxFQUFBQyxxQkFBQSxFQUFBQyxzQkFBQSxFQUFBQyxzQkFBQSxFQUFBQyxzQkFBQSxFQUFBQyxzQkFBQSxFQUFBQyxzQkFBQSxFQUFBQyxlQUFBLEVBQUFDLGNBQUEsRUFBQUMsaUJBQUEsRUFBQUMsbUJBQUEsRUFBQUMsc0JBQUEsRUFBQUMsc0JBQUEsRUFBQUMsZUFBQSxFQUFBQyw0QkFBQSxFQUFBQyxLQUFBLEVBQUFDLHFCQUFBLEVBQUFDLGtCQUFBLEVBQUFDLGVBQUEsRUFBQUMsa0JBQUEsRUFBQUMscUJBQUEsRUFBQUMsbUJBQUEsRUFBQUMsaUJBQUEsRUFBQUMsY0FBQSxFQUFBL0csV0FBQTtNQUFBLE9BQUFxQyxtQkFBQSxDQUFBMkUsSUFBQSxXQUFBQyxRQUFBO1FBQUEsa0JBQUFBLFFBQUEsQ0FBQUMsSUFBQSxHQUFBRCxRQUFBLENBQUFFLElBQUE7VUFBQTtZQUVoQ3ROLFNBQVMsR0FBb0I0RyxHQUFHLENBQWhDNUcsU0FBUyxFQUFFaUgsYUFBYSxHQUFLTCxHQUFHLENBQXJCSyxhQUFhO1lBQzFCUCxRQUFRLEdBQUc3TyxVQUFVLENBQUNzTixFQUFFLENBQUNuRixTQUFTLENBQUM7WUFDekNzRCxnQkFBZ0IsQ0FBQ2pFLE9BQU8sR0FBRyxJQUFJO1lBRXpCZ0ssYUFBYSxHQUFHcEMsYUFBYSxFQUNuQztZQUNBO1lBQ0E7WUFDQXhQLGdCQUFnQixDQUFDMkksUUFBUSxDQUFDLENBQUMsQ0FBQzJFLGFBQWEsQ0FBQy9FLFNBQVMsRUFBRXFKLGFBQWEsQ0FBQztZQUM3RDlQLFdBQVcsR0FBR29CLDZCQUE2QixDQUFDQyxjQUFjLENBQUMsRUFFakU7WUFDQTtZQUNNME8sY0FBYyxhQUFBbk8sTUFBQSxDQUFheU4sZUFBZSxHQUNoRDtZQUNBO1lBQ01XLFVBQVUsSUFBQVAsa0JBQUEsR0FBR3JRLGlCQUFpQixDQUFDMFEsYUFBYSxDQUFDLGNBQUFMLGtCQUFBLGNBQUFBLGtCQUFBLEdBQUl0USxpQkFBaUIsQ0FBQ3FRLFNBQVMsQ0FBQztZQUNuRnZRLGNBQWMsQ0FBQytVLE1BQU0sQ0FBQ2xFLGFBQWEsRUFBRUMsY0FBYyxDQUFDOztZQUVwRDtZQUNBO1lBQ0E7WUFBQSxJQUNLNUMsUUFBUTtjQUFBMEcsUUFBQSxDQUFBRSxJQUFBO2NBQUE7WUFBQTtZQUNYcEksZUFBZSxDQUFDbEYsU0FBUyxFQUFBMUYsYUFBQSxDQUFBQSxhQUFBO2NBQ3ZCRCxFQUFFLEVBQUVpUCxjQUFjO2NBQ2xCNUosT0FBTyxFQUFFdUksT0FBTztjQUNoQk4sSUFBSSxFQUFFLElBQUlDLElBQUksQ0FBQyxDQUFDO2NBQ2hCQyxJQUFJLEVBQUU7Z0JBQUV4TixFQUFFLEVBQUUsV0FBVztnQkFBRUcsSUFBSSxFQUFFO2NBQVksQ0FBQztjQUM1Q3lCLElBQUksRUFBRXRGLGVBQWUsQ0FBQ21SLFNBQVM7Y0FDL0JhLE9BQU8sRUFBUEE7WUFBTyxHQUNIcFAsV0FBVyxDQUFDUCxNQUFNLEdBQUcsQ0FBQyxHQUFHO2NBQUVPLFdBQVcsRUFBWEE7WUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2NBQ2pEcVAsZUFBZSxFQUFmQSxlQUFlO2NBQ2ZsQixXQUFXLEVBQUVBLFdBQVcsSUFBSSxFQUFFO2NBQzlCcUIsU0FBUyxFQUFFUTtZQUFVLEVBQ3RCLENBQUM7WUFDRmxFLGdCQUFnQixDQUFDckYsU0FBUyxDQUFDO1lBQzNCMUgsa0JBQWtCLENBQUMsQ0FBQyxDQUFDeVAsZ0JBQWdCLENBQUMvSCxTQUFTLENBQUM7WUFDaERsSSxpQ0FBaUMsQ0FBQ2tJLFNBQVMsRUFBRSxVQUFVLENBQUM7WUFBQSxPQUFBb04sUUFBQSxDQUFBSSxNQUFBO1VBQUE7WUFJMUQvSix5QkFBeUIsQ0FBQ3BFLE9BQU8sR0FBRyxJQUFJO1lBQ3hDcUUscUJBQXFCLENBQUNyRSxPQUFPLEdBQUcsSUFBSTtZQUNwQ2dFLHVCQUF1QixDQUFDaEUsT0FBTyxHQUFHLElBQUk7O1lBRXRDO1lBQ01tSyxZQUFZLEdBQUcsSUFBSWlFLE1BQU0sQ0FBQ3pXLHNCQUFzQixFQUFFLEdBQUcsQ0FBQztZQUN0RHlTLE9BQU8sR0FBQWlFLGtCQUFBLENBQU96RixPQUFPLENBQUMwRixRQUFRLENBQUNuRSxZQUFZLENBQUM7WUFFOUNFLFlBQVksR0FBR3pCLE9BQU87WUFDcEIwQixlQUFlLEdBQUcxRyxXQUFXLENBQUM1RCxPQUFPLENBQUN4RSxNQUFNLENBQUMsVUFBQStTLENBQUM7Y0FBQSxPQUFJQSxDQUFDLENBQUN2VCxFQUFFLEtBQUtnUCxhQUFhO1lBQUEsRUFBQyxDQUFDd0UsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ2hGakUsNEJBQTRCLEdBQUcsQ0FBQUQsZUFBZSxhQUFmQSxlQUFlLHVCQUFmQSxlQUFlLENBQUUvSixRQUFRLEtBQUksSUFBSTtZQUNoRWlLLG1CQUFtQixHQUFHLENBQUMsYUFBYSxFQUFFLG9CQUFvQixFQUFFLFlBQVksQ0FBQztZQUN6RUMsZUFBZSxHQUFHLENBQ3RCLFdBQVcsRUFDWCxrQkFBa0IsRUFDbEIsYUFBYSxFQUNiLGVBQWUsRUFDZixrQkFBa0IsRUFDbEIsd0JBQXdCLEVBQ3hCLG1CQUFtQixDQUNwQjtZQUNLQyxpQkFBaUIsR0FBRyxDQUFDLGFBQWEsRUFBRSxvQkFBb0IsQ0FBQztZQUN6RDVOLGNBQWMsR0FBRyxDQUFBd04sZUFBZSxhQUFmQSxlQUFlLGdCQUFBVixxQkFBQSxHQUFmVSxlQUFlLENBQUUvSixRQUFRLGNBQUFxSixxQkFBQSx1QkFBekJBLHFCQUFBLENBQTJCcEosZUFBZSxLQUFJLEVBQUU7WUFDakVtSyxlQUFlLEdBQ25CSiw0QkFBNEIsSUFDNUJ6TixjQUFjLENBQUMyRCxJQUFJLENBQUMsVUFBQ2pELE1BQVc7Y0FBQSxPQUFLZ04sbUJBQW1CLENBQUNyTyxRQUFRLENBQUNxQixNQUFNLENBQUNZLFNBQVMsQ0FBQztZQUFBLEVBQUM7WUFDaEZ3TSxXQUFXLEdBQ2ZMLDRCQUE0QixJQUFJek4sY0FBYyxDQUFDMkQsSUFBSSxDQUFDLFVBQUNqRCxNQUFXO2NBQUEsT0FBS2lOLGVBQWUsQ0FBQ3RPLFFBQVEsQ0FBQ3FCLE1BQU0sQ0FBQ1ksU0FBUyxDQUFDO1lBQUEsRUFBQztZQUM1R3lNLGFBQWEsR0FDakJOLDRCQUE0QixJQUM1QnpOLGNBQWMsQ0FBQzJELElBQUksQ0FBQyxVQUFDakQsTUFBVztjQUFBLE9BQUtrTixpQkFBaUIsQ0FBQ3ZPLFFBQVEsQ0FBQ3FCLE1BQU0sQ0FBQ1ksU0FBUyxDQUFDO1lBQUEsRUFBQztZQUM5RTBNLHNCQUFzQixHQUMxQlAsNEJBQTRCLElBQzVCLENBQUFELGVBQWUsYUFBZkEsZUFBZSx1QkFBZkEsZUFBZSxDQUFFbUUsY0FBYyxNQUFLLFVBQVUsSUFDOUMzUixjQUFjLENBQUMyRCxJQUFJLENBQUMsVUFBQ2pELE1BQVc7Y0FBQSxPQUFLQSxNQUFNLENBQUNZLFNBQVMsS0FBSyxjQUFjO1lBQUEsRUFBQztZQUNyRTJNLCtCQUErQixHQUNuQ1IsNEJBQTRCLElBQzVCLENBQUFELGVBQWUsYUFBZkEsZUFBZSx1QkFBZkEsZUFBZSxDQUFFbUUsY0FBYyxNQUFLLFVBQVUsSUFDOUMzUixjQUFjLENBQUMyRCxJQUFJLENBQUMsVUFBQ2pELE1BQVc7Y0FBQSxPQUFLLENBQUNBLE1BQU0sQ0FBQ1ksU0FBUyxJQUFJLEVBQUUsRUFBRVMsV0FBVyxDQUFDLENBQUMsS0FBSyx3QkFBd0I7WUFBQSxFQUFDO1lBRTNHLElBQUlpTSxzQkFBc0IsSUFBSTRELE1BQU0sQ0FBQ0Msd0NBQXdDLElBQUluRixnQkFBZ0IsYUFBaEJBLGdCQUFnQixlQUFoQkEsZ0JBQWdCLENBQUUzTixJQUFJLENBQUMsQ0FBQyxFQUFFO2NBQ3pHbVAsbUJBQW1CLEdBQUc7Z0JBQUVqTSxPQUFPLEVBQUV5SyxnQkFBZ0IsQ0FBQzNOLElBQUksQ0FBQztjQUFFLENBQUM7WUFDNUQsQ0FBQyxNQUFNLElBQ0xrUCwrQkFBK0IsSUFDL0IyRCxNQUFNLENBQUNDLHdDQUF3QyxLQUM5Q25GLGdCQUFnQixhQUFoQkEsZ0JBQWdCLGVBQWhCQSxnQkFBZ0IsQ0FBRTNOLElBQUksQ0FBQyxDQUFDLElBQ3ZCbUQsMENBQTBDLENBQUNsQyxjQUFjLEVBQUUsd0JBQXdCLENBQUMsQ0FBQyxFQUN2RjtjQUNNbU8saUJBQWlCLEdBQ3JCLENBQUF6QixnQkFBZ0IsYUFBaEJBLGdCQUFnQix1QkFBaEJBLGdCQUFnQixDQUFFM04sSUFBSSxDQUFDLENBQUMsS0FDeEJtRCwwQ0FBMEMsQ0FBQ2xDLGNBQWMsRUFBRSx3QkFBd0IsQ0FBQztjQUN0RmtPLG1CQUFtQixHQUFHO2dCQUNwQmpNLE9BQU8sRUFBRWtNO2NBQ1gsQ0FBQztZQUNIO1lBRUEsSUFBSUgsc0JBQXNCLEVBQUU7Y0FDMUI5SCxLQUFLLENBQUM5TCxNQUFNLENBQUMwWCxnQkFBZ0IsRUFBQTNULGFBQUE7Z0JBQzNCNFQsVUFBVSxFQUFFN1cseUJBQXlCLENBQUMySyxLQUFLLENBQUM7Z0JBQzVDbU0sV0FBVyxFQUFFL1csdUJBQXVCLENBQUMrRSxjQUFjLENBQUM7Z0JBQ3BEaVMsUUFBUSxFQUFFLFFBQVE7Z0JBQ2xCQyxNQUFNLEVBQUU7Y0FBYyxHQUNsQnhGLGdCQUFnQixhQUFoQkEsZ0JBQWdCLGVBQWhCQSxnQkFBZ0IsQ0FBRTNOLElBQUksQ0FBQyxDQUFDLEdBQUc7Z0JBQUVvVCxnQkFBZ0IsRUFBRXpGLGdCQUFnQixDQUFDM04sSUFBSSxDQUFDO2NBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUNsRixDQUFDO1lBQ0o7WUFFTXFQLDBCQUEwQixHQUFHckgscUJBQXFCLENBQUM3RCxPQUFPO1lBQzFEbUwsNEJBQTRCLEdBQ2hDRCwwQkFBMEIsSUFBSWpULHFCQUFxQixDQUFDaVQsMEJBQTBCLENBQUNqTSxRQUFRLENBQUMsS0FBSyxjQUFjO1lBRTdHLElBQUlrTSw0QkFBNEIsRUFBRTtjQUNoQ25JLEtBQUssQ0FBQzlMLE1BQU0sQ0FBQzBYLGdCQUFnQixFQUFBM1QsYUFBQTtnQkFDM0I0VCxVQUFVLEVBQUU3Vyx5QkFBeUIsQ0FBQzJLLEtBQUssQ0FBQztnQkFDNUNtTSxXQUFXLEVBQUUsY0FBYztnQkFDM0JDLFFBQVEsRUFBRSxRQUFRO2dCQUNsQkcsaUJBQWlCLEVBQUUsUUFBUTtnQkFDM0JGLE1BQU0sRUFBRTtjQUFjLEdBQ2xCeEYsZ0JBQWdCLGFBQWhCQSxnQkFBZ0IsZUFBaEJBLGdCQUFnQixDQUFFM04sSUFBSSxDQUFDLENBQUMsR0FBRztnQkFBRW9ULGdCQUFnQixFQUFFekYsZ0JBQWdCLENBQUMzTixJQUFJLENBQUM7Y0FBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQ2xGLENBQUM7WUFDSjtZQUVNdVAsb0JBQW9CLEdBQ3hCYiw0QkFBNEIsSUFDNUIsQ0FBQUQsZUFBZSxhQUFmQSxlQUFlLHVCQUFmQSxlQUFlLENBQUVtRSxjQUFjLE1BQUssVUFBVSxJQUM5QzNSLGNBQWMsQ0FBQzJELElBQUksQ0FBQyxVQUFDakQsTUFBVztjQUFBLE9BQUssQ0FBQ0EsTUFBTSxDQUFDWSxTQUFTLElBQUksRUFBRSxFQUFFUyxXQUFXLENBQUMsQ0FBQyxLQUFLLFlBQVk7WUFBQSxFQUFDO1lBRy9GLElBQUl1TSxvQkFBb0IsRUFBRTtjQUNsQkUsVUFBVSxHQUFHOUIsZ0JBQWdCLGFBQWhCQSxnQkFBZ0IsdUJBQWhCQSxnQkFBZ0IsQ0FBRTNOLElBQUksQ0FBQyxDQUFDO2NBQ3JDMFAsUUFBUSxHQUFHL00seUNBQXlDLENBQUMxQixjQUFjLENBQUM7Y0FDcEUwTyxlQUFlLEdBQUdGLFVBQVUsSUFBSUMsUUFBUTtjQUM5QyxJQUFJQyxlQUFlLEVBQUU7Z0JBQ25CSCxpQkFBaUIsR0FBRztrQkFBRXRNLE9BQU8sRUFBRXlNO2dCQUFnQixDQUFDO2NBQ2xEO1lBQ0Y7WUFFTUMsZUFBZSxHQUFHckIsT0FBTyxDQUFDek8sR0FBRyxDQUFDLFVBQUE0RCxLQUFLO2NBQUEsT0FBSXBDLFFBQVEsQ0FBQ29DLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7WUFBQSxFQUFDO1lBQzlEbU0seUJBQXlCLEdBQUd2TixzQ0FBc0MsQ0FBQ3JCLGNBQWMsQ0FBQztZQUNsRjZPLHVCQUF1QixHQUMzQmQsYUFBYSxJQUFJWSxlQUFlLENBQUM5UixNQUFNLEtBQUssQ0FBQyxJQUFJK1IseUJBQXlCLENBQUMvUixNQUFNLEtBQUssQ0FBQyxHQUNuRnlGLHVDQUF1QyxDQUFDd0osT0FBTyxDQUFDLEdBQ2hELEVBQUU7WUFDRmdELG1CQUFtQixHQUN2QkgsZUFBZSxDQUFDOVIsTUFBTSxHQUFHLENBQUMsR0FDdEI4UixlQUFlLEdBQ2ZDLHlCQUF5QixDQUFDL1IsTUFBTSxHQUFHLENBQUMsR0FDbEMrUix5QkFBeUIsR0FDekJDLHVCQUF1QjtZQUV6QkUsbUJBQW1CLEdBQ3ZCdEIsNEJBQTRCLEtBQzNCSSxlQUFlLElBQUlDLFdBQVcsSUFBSUMsYUFBYSxDQUFDLElBQ2pEZSxtQkFBbUIsQ0FBQ2pTLE1BQU0sR0FBRyxDQUFDO1lBQUEsS0FFNUJrUyxtQkFBbUI7Y0FBQWtDLFFBQUEsQ0FBQUUsSUFBQTtjQUFBO1lBQUE7WUFDZm5DLE9BQU8sR0FBR0YsbUJBQW1CO1lBQUEsTUFDL0J4QixPQUFPLENBQUN6USxNQUFNLEdBQUcsQ0FBQztjQUFBb1UsUUFBQSxDQUFBRSxJQUFBO2NBQUE7WUFBQTtZQUFBRixRQUFBLENBQUFFLElBQUE7WUFBQSxPQUNGNUssaUJBQWlCLENBQUN5SSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7VUFBQTtZQUF6Q0MsR0FBRyxHQUFBZ0MsUUFBQSxDQUFBb0IsSUFBQTtZQUNIbkQsVUFBVSxHQUFHRCxHQUFHLE9BQUFqUSxNQUFBLENBQU9pUSxHQUFHLElBQUssU0FBUztZQUM5QzFCLFlBQVksR0FBR3pCLE9BQU8sQ0FBQ3dHLE9BQU8sQ0FBQ2pGLFlBQVksRUFBRSxVQUFBa0YsR0FBRztjQUFBLE9BQzlDQSxHQUFHLENBQUNELE9BQU8sQ0FBQyx5REFBeUQsRUFBRXBELFVBQVUsQ0FBQztZQUFBLENBQ3BGLENBQUM7VUFBQTtZQUdHQyxrQkFBa0IsR0FBR3JJLFdBQVcsQ0FBQzVELE9BQU8sQ0FBQ3hFLE1BQU0sQ0FBQyxVQUFBb0wsR0FBRztjQUFBLE9BQUlBLEdBQUcsQ0FBQ3BNLFNBQVM7WUFBQSxFQUFDLENBQUNnVSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDNUV0QyxtQkFBbUIsR0FBRyxDQUFBNUosT0FBTyxhQUFQQSxPQUFPLHVCQUFQQSxPQUFPLENBQUV0SCxFQUFFLE1BQUlpUixrQkFBa0IsYUFBbEJBLGtCQUFrQix1QkFBbEJBLGtCQUFrQixDQUFFelIsU0FBUztZQUNsRTJSLGdCQUFnQixHQUFHRCxtQkFBbUIsR0FBRy9PLFFBQVEsQ0FBQ0MsTUFBTSxDQUFDOE8sbUJBQW1CLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBRyxJQUFJO1lBQ3pGRSxTQUFTLEdBQUdzQyxNQUFNLENBQUNZLFFBQVEsQ0FBQ0MsUUFBUSxDQUFDaFEsS0FBSyxDQUFDLHNCQUFzQixDQUFDO1lBQ2xFOE0sY0FBYyxHQUFHRCxTQUFTLEdBQUdqUCxRQUFRLENBQUNpUCxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcsSUFBSTtZQUM5REUsZ0JBQWdCLEdBQUdILGdCQUFnQixJQUFJRSxjQUFjLElBQUlGLGdCQUFnQixLQUFLRSxjQUFjO1lBRWxHLElBQUlDLGdCQUFnQixFQUFFO2NBQ3BCLElBQUkzQixlQUFlLEVBQUU7Z0JBQ25CLENBQUE0QixxQkFBQSxHQUFBbUMsTUFBTSxDQUFDYyxtQkFBbUIsY0FBQWpELHFCQUFBLGdCQUFBQyxzQkFBQSxHQUExQkQscUJBQUEsQ0FBNEJrRCwwQkFBMEIsY0FBQWpELHNCQUFBLGVBQXREQSxzQkFBQSxDQUFBa0QsSUFBQSxDQUFBbkQscUJBQUEsRUFBeURULE9BQU8sQ0FBQztjQUNuRSxDQUFDLE1BQU0sSUFBSWxCLFdBQVcsRUFBRTtnQkFDdEIsQ0FBQTZCLHNCQUFBLEdBQUFpQyxNQUFNLENBQUNjLG1CQUFtQixjQUFBL0Msc0JBQUEsZ0JBQUFDLHNCQUFBLEdBQTFCRCxzQkFBQSxDQUE0QmtELDJCQUEyQixjQUFBakQsc0JBQUEsZUFBdkRBLHNCQUFBLENBQUFnRCxJQUFBLENBQUFqRCxzQkFBQSxFQUEwRFgsT0FBTyxDQUFDO2NBQ3BFLENBQUMsTUFBTSxJQUFJakIsYUFBYSxFQUFFO2dCQUN4QixDQUFBOEIsc0JBQUEsR0FBQStCLE1BQU0sQ0FBQ2MsbUJBQW1CLGNBQUE3QyxzQkFBQSxnQkFBQUMsc0JBQUEsR0FBMUJELHNCQUFBLENBQTRCaUQsK0JBQStCLGNBQUFoRCxzQkFBQSxlQUEzREEsc0JBQUEsQ0FBQThDLElBQUEsQ0FBQS9DLHNCQUFBLEVBQThEYixPQUFPLENBQUM7Y0FDeEU7WUFDRjtVQUFDO1lBR0g7WUFDQTtZQUNBO1lBQ0E7WUFDTWUsZUFBZSxJQUFBaEQsaUJBQUEsR0FBRzZFLE1BQU0sQ0FBQ21CLFNBQVMsY0FBQWhHLGlCQUFBLHVCQUFoQkEsaUJBQUEsQ0FBa0JpRyxNQUFNO1lBQzFDaEQsY0FBYyxHQUFHakoscUJBQXFCLENBQUM3RCxPQUFPO1lBQ3BENkQscUJBQXFCLENBQUM3RCxPQUFPLEdBQUcsSUFBSSxFQUFDO1lBQy9CK00saUJBQWlCLEdBQUcsQ0FBQyxDQUFDRCxjQUFjLElBQUlyQyxlQUFlLENBQUN0TyxRQUFRLENBQUMyUSxjQUFjLENBQUM3TixRQUFRLENBQUM7WUFDekYrTixtQkFBbUIsR0FBRyxDQUFDLENBQUNGLGNBQWMsSUFBSXBDLGlCQUFpQixDQUFDdk8sUUFBUSxDQUFDMlEsY0FBYyxDQUFDN04sUUFBUSxDQUFDLEVBRW5HO1lBQ01nTyxzQkFBc0IsR0FBR25RLGNBQWMsQ0FDMUNuQixHQUFHLENBQUMsVUFBQzZCLE1BQXFCO2NBQUEsT0FBS0EsTUFBTSxDQUFDWSxTQUFTO1lBQUEsRUFBQyxDQUNoRDVDLE1BQU0sQ0FBQyxVQUFDeUQsUUFBUTtjQUFBLE9BQXlCcEgsaUJBQWlCLENBQUNvSCxRQUFRLENBQUM7WUFBQSxFQUFDO1lBQ2xFaU8sc0JBQXNCLEdBQzFCM0MsNEJBQTRCLElBQzVCLENBQUFELGVBQWUsYUFBZkEsZUFBZSx1QkFBZkEsZUFBZSxDQUFFbUUsY0FBYyxNQUFLLFVBQVUsSUFDOUN4QixzQkFBc0IsQ0FBQ3RULE1BQU0sR0FBRyxDQUFDO1lBQzdCd1QsZUFBZSxHQUFHTCxjQUFjLGFBQWRBLGNBQWMsdUJBQWRBLGNBQWMsQ0FBRTdOLFFBQVE7WUFDMUNtTyw0QkFBNEIsR0FBR3ZWLGlCQUFpQixDQUFDc1YsZUFBZSxDQUFDO1lBRXZFLElBQUlELHNCQUFzQixJQUFJRSw0QkFBNEIsRUFBRTtjQUNwREMsS0FBSyxHQUFHSCxzQkFBc0IsR0FBR0Qsc0JBQXNCLEdBQUdFLGVBQWUsR0FBRyxDQUFDQSxlQUFlLENBQUMsR0FBRyxFQUFFO2NBQ3hHdlYsd0JBQXdCLENBQUM7Z0JBQ3ZCbVksTUFBTSxFQUFFLE1BQU07Z0JBQ2QxQyxLQUFLLEVBQUxBLEtBQUs7Z0JBQ0wxTSxTQUFTLEVBQUU0STtjQUNiLENBQUMsQ0FBQztZQUNKO1lBRUEsSUFBSXNELGVBQWUsS0FBS2pDLFdBQVcsSUFBSUMsYUFBYSxJQUFJa0MsaUJBQWlCLElBQUlDLG1CQUFtQixDQUFDLEVBQUU7Y0FDM0ZPLGtCQUF3QyxHQUFHVCxjQUFjLEdBQzFEO2dCQUFFMU8sU0FBUyxFQUFFME8sY0FBYyxDQUFDN04sUUFBUTtnQkFBRXRCLFNBQVMsR0FBQTJQLHFCQUFBLEdBQUVSLGNBQWMsQ0FBQ2tELFFBQVEsY0FBQTFDLHFCQUFBLGNBQUFBLHFCQUFBLEdBQUksQ0FBQztjQUFFLENBQUMsR0FDakYsSUFBSTtjQUNGRSxlQUFlLEdBQUcsR0FBQTFSLE1BQUEsQ0FBQXVTLGtCQUFBLENBQ25CeFIsb0NBQW9DLENBQUNDLGNBQWMsQ0FBQyxHQUFBdVIsa0JBQUEsQ0FDcEQ1QyxlQUFlLEdBQUE0QyxrQkFBQSxDQUNmM0MseUJBQXlCLEdBQUEyQyxrQkFBQSxDQUN4QmQsa0JBQWtCLEdBQUcxUSxvQ0FBb0MsQ0FBQyxDQUFDMFEsa0JBQWtCLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FDeEY1UixHQUFHLENBQUN5QixNQUFNLENBQUM7Y0FDYixJQUFJb1EsZUFBZSxDQUFDclIsUUFBUSxDQUFDaUIsTUFBTSxDQUFDeVAsZUFBZSxDQUFDLENBQUMsRUFBRTtnQkFDckQsQ0FBQVksa0JBQUEsR0FBQWlCLE1BQU0sQ0FBQ21CLFNBQVMsY0FBQXBDLGtCQUFBLGdCQUFBQyxxQkFBQSxHQUFoQkQsa0JBQUEsQ0FBa0J3QyxXQUFXLGNBQUF2QyxxQkFBQSxlQUE3QkEscUJBQUEsQ0FBQWdDLElBQUEsQ0FBQWpDLGtCQUFnQyxDQUFDO2NBQ25DO1lBQ0Y7O1lBRUE7WUFDQTtZQUNBO1lBQ0E7WUFDQTtZQUNBO1lBQ0E7WUFDQTtZQUNBL1csU0FBUyxDQUFDLFlBQU07Y0FDZHFQLGVBQWUsQ0FBQ3BGLFNBQVMsRUFBRXFKLGFBQWEsQ0FBQztjQUN6Q25FLGVBQWUsQ0FBQ2xGLFNBQVMsRUFBQTFGLGFBQUEsQ0FBQUEsYUFBQSxDQUFBQSxhQUFBO2dCQUN2QkQsRUFBRSxFQUFFaVAsY0FBYztnQkFDbEI1SixPQUFPLEVBQUVnSyxZQUFZO2dCQUNyQi9CLElBQUksRUFBRSxJQUFJQyxJQUFJLENBQUMsQ0FBQztnQkFDaEJDLElBQUksRUFBRTtrQkFBRXhOLEVBQUUsRUFBRSxXQUFXO2tCQUFFRyxJQUFJLEVBQUU7Z0JBQVksQ0FBQztnQkFDNUN5QixJQUFJLEVBQUV0RixlQUFlLENBQUNtUixTQUFTO2dCQUMvQmEsT0FBTyxFQUFQQTtjQUFPLEdBQ0hwUCxXQUFXLENBQUNQLE1BQU0sR0FBRyxDQUFDLEdBQUc7Z0JBQUVPLFdBQVcsRUFBWEE7Y0FBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUNqRHFQLGVBQWUsRUFBZkEsZUFBZTtnQkFDZmxCLFdBQVcsRUFBRUEsV0FBVyxJQUFJO2NBQUUsR0FDMUIyQyxtQkFBbUIsR0FBRztnQkFBRUEsbUJBQW1CLEVBQW5CQTtjQUFvQixDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUN0RHRCLFNBQVMsRUFBRVE7Y0FBVSxFQUN0QixDQUFDO1lBQ0osQ0FBQyxDQUFDO1lBQ0ZsRSxnQkFBZ0IsQ0FBQ3JGLFNBQVMsQ0FBQztZQUUzQixLQUFBbUosb0JBQUEsR0FBSWtCLG1CQUFtQixjQUFBbEIsb0JBQUEsZUFBbkJBLG9CQUFBLENBQXFCL0ssT0FBTyxFQUFFO2NBQ2hDakgsZ0JBQWdCLENBQUNrVCxtQkFBbUIsQ0FBQ2pNLE9BQU8sQ0FBQyxDQUMxQ21SLElBQUksQ0FBQyxVQUFBQyxTQUFTLEVBQUk7Z0JBQ2pCbEosUUFBUSxDQUFDQyxhQUFhLENBQ3BCLElBQUlILFdBQVcsQ0FBQyxvQ0FBb0MsRUFBRTtrQkFDcERDLE1BQU0sRUFBRTtvQkFBRXJFLEtBQUssRUFBRXdOO2tCQUFVO2dCQUM3QixDQUFDLENBQ0gsQ0FBQztjQUNILENBQUMsQ0FBQyxTQUNJLENBQUMsVUFBQUMsR0FBRyxFQUFJO2dCQUNaQyxPQUFPLENBQUNDLEtBQUssQ0FBQyx1RUFBdUUsRUFBRUYsR0FBRyxDQUFDO2NBQzdGLENBQUMsQ0FBQztZQUNOO1lBRUEsS0FBQXJHLGtCQUFBLEdBQUlzQixpQkFBaUIsY0FBQXRCLGtCQUFBLGVBQWpCQSxrQkFBQSxDQUFtQmhMLE9BQU8sRUFBRTtjQUM5QmpILGdCQUFnQixDQUFDdVQsaUJBQWlCLENBQUN0TSxPQUFPLENBQUMsQ0FDeENtUixJQUFJLENBQUMsVUFBQUMsU0FBUyxFQUFJO2dCQUNqQmxKLFFBQVEsQ0FBQ0MsYUFBYSxDQUNwQixJQUFJSCxXQUFXLENBQUMsa0NBQWtDLEVBQUU7a0JBQ2xEQyxNQUFNLEVBQUU7b0JBQUVyRSxLQUFLLEVBQUV3TjtrQkFBVTtnQkFDN0IsQ0FBQyxDQUNILENBQUM7Y0FDSCxDQUFDLENBQUMsU0FDSSxDQUFDLFVBQUFDLEdBQUcsRUFBSTtnQkFDWkMsT0FBTyxDQUFDQyxLQUFLLENBQUMseURBQXlELEVBQUVGLEdBQUcsQ0FBQztjQUMvRSxDQUFDLENBQUM7WUFDTjtZQUVBbE0sZUFBZSxDQUFDbEUsT0FBTyxHQUFHLEtBQUs7WUFDL0JpRSxnQkFBZ0IsQ0FBQ2pFLE9BQU8sR0FBRyxJQUFJO1lBQUEyTixtQkFBQSxHQUVlMVUsa0JBQWtCLENBQUMsQ0FBQyxFQUExRDJVLGlCQUFpQixHQUFBRCxtQkFBQSxDQUFqQkMsaUJBQWlCLEVBQUVDLGNBQWMsR0FBQUYsbUJBQUEsQ0FBZEUsY0FBYztZQUFBLE1BQ3JDeEcsUUFBUSxJQUFJdUcsaUJBQWlCO2NBQUFHLFFBQUEsQ0FBQUUsSUFBQTtjQUFBO1lBQUE7WUFBQUYsUUFBQSxDQUFBRSxJQUFBO1lBQUEsT0FDekJKLGNBQWMsQ0FBQ2xOLFNBQVMsRUFBRTtjQUFFa0csS0FBSyxFQUFFO1lBQUssQ0FBQyxDQUFDO1VBQUE7WUFHbEQsSUFBSTFDLFlBQVksQ0FBQ25FLE9BQU8sRUFBRTtjQUNsQjhHLFdBQVcsR0FBRyxJQUFJQyxXQUFXLENBQUMsaUJBQWlCLENBQUM7Y0FDdERFLFFBQVEsQ0FBQ0MsYUFBYSxDQUFDSixXQUFXLENBQUM7Y0FDbkMzQyxZQUFZLENBQUNuRSxPQUFPLEdBQUcsS0FBSztZQUM5QjtVQUFDO1VBQUE7WUFBQSxPQUFBK04sUUFBQSxDQUFBd0MsSUFBQTtRQUFBO01BQUEsR0FBQWxILE9BQUE7SUFBQSxDQUNGO0lBQUEsaUJBQUFtSCxFQUFBLEVBQUFDLEdBQUEsRUFBQUMsR0FBQSxFQUFBQyxHQUFBLEVBQUFDLEdBQUEsRUFBQUMsR0FBQSxFQUFBQyxHQUFBLEVBQUFDLEdBQUEsRUFBQUMsR0FBQTtNQUFBLE9BQUEvSCxLQUFBLENBQUFnSSxLQUFBLE9BQUFDLFNBQUE7SUFBQTtFQUFBLEtBQ0QsQ0FBQ3JMLGVBQWUsRUFBRUUsZUFBZSxFQUFFQyxnQkFBZ0IsRUFBRTFELE9BQU8sRUFBRWUsaUJBQWlCLEVBQUVMLEtBQUssRUFBRUwsS0FBSyxDQUMvRixDQUFDOztFQUVEO0VBQ0E7RUFDQTtFQUNBLElBQU13TyxnQkFBZ0IsR0FBRzdhLFdBQVcsQ0FDbEMsVUFBQzhhLFdBQW1CLEVBQUs7SUFDdkI7SUFDQSxJQUFNelEsU0FBUyxHQUFHNkMsYUFBYSxDQUFDeEQsT0FBTztJQUN2Q3NFLGdCQUFnQixDQUFDdEUsT0FBTyxDQUFDLENBQUM7SUFDMUIsSUFBTWdLLGFBQWEsR0FBR25SLDZCQUE2QixDQUFDeUssZ0JBQWdCLENBQUN0RCxPQUFPLENBQUM7SUFDN0UsSUFBTWlLLGNBQWMsYUFBQW5PLE1BQUEsQ0FBYXdILGdCQUFnQixDQUFDdEQsT0FBTyxDQUFFO0lBQzNELElBQU1xUixZQUFZLEdBQUcvWCxpQkFBaUIsQ0FBQzBRLGFBQWEsQ0FBQztJQUVyRDdSLG9CQUFvQixDQUFDMFAsS0FBSyxDQUFDbEgsU0FBUyxDQUFDO0lBQ3JDeUQseUJBQXlCLENBQUNwRSxPQUFPLEdBQUcsSUFBSTtJQUN4Q3FFLHFCQUFxQixDQUFDckUsT0FBTyxHQUFHLElBQUk7SUFDcEMrRixlQUFlLENBQUNwRixTQUFTLEVBQUVxSixhQUFhLENBQUM7SUFFekMsSUFBSXFILFlBQVksYUFBWkEsWUFBWSxlQUFaQSxZQUFZLENBQUUzWCxLQUFLLENBQUNDLE1BQU0sRUFBRTtNQUM5QlIsY0FBYyxDQUFDbVksTUFBTSxDQUFDdEgsYUFBYSxFQUFFLElBQUksQ0FBQztNQUMxQzdRLGNBQWMsQ0FBQytVLE1BQU0sQ0FBQ2xFLGFBQWEsRUFBRUMsY0FBYyxDQUFDO0lBQ3RELENBQUMsTUFBTTtNQUNMOVEsY0FBYyxDQUFDb1ksTUFBTSxDQUFDdkgsYUFBYSxDQUFDO0lBQ3RDO0lBRUEsSUFBSW9ILFdBQVcsRUFBRTtNQUNmdkwsZUFBZSxDQUFDbEYsU0FBUyxFQUFBMUYsYUFBQTtRQUN2QkQsRUFBRSxFQUFFaVAsY0FBYztRQUNsQjVKLE9BQU8sRUFBRStRLFdBQVc7UUFDcEI5SSxJQUFJLEVBQUUsSUFBSUMsSUFBSSxDQUFDLENBQUM7UUFDaEJDLElBQUksRUFBRTtVQUFFeE4sRUFBRSxFQUFFLFdBQVc7VUFBRUcsSUFBSSxFQUFFO1FBQVksQ0FBQztRQUM1Q3lCLElBQUksRUFBRXRGLGVBQWUsQ0FBQ21SO01BQVMsR0FDM0I0SSxZQUFZLEdBQUc7UUFBRTNILFNBQVMsRUFBRTJIO01BQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUNwRCxDQUFDO0lBQ0o7SUFFQXhMLGVBQWUsQ0FBQ2xGLFNBQVMsRUFBRTtNQUN6QjNGLEVBQUUsS0FBQWMsTUFBQSxDQUFLbU8sY0FBYyxlQUFZO01BQ2pDNUosT0FBTyxFQUFFckMsQ0FBQyxDQUFDLGdCQUFnQixDQUFDO01BQzVCc0ssSUFBSSxFQUFFLElBQUlDLElBQUksQ0FBQyxDQUFDO01BQ2hCQyxJQUFJLEVBQUU7UUFBRXhOLEVBQUUsRUFBRSxXQUFXO1FBQUVHLElBQUksRUFBRTtNQUFZLENBQUM7TUFDNUN5QixJQUFJLEVBQUV0RixlQUFlLENBQUNtUixTQUFTO01BQy9CK0ksbUJBQW1CLEVBQUU7SUFDdkIsQ0FBQyxDQUFDO0lBQ0Z4TCxnQkFBZ0IsQ0FBQ3JGLFNBQVMsQ0FBQztJQUMzQnVELGVBQWUsQ0FBQ2xFLE9BQU8sR0FBRyxLQUFLO0lBQy9CaUUsZ0JBQWdCLENBQUNqRSxPQUFPLEdBQUcsSUFBSTtFQUNqQyxDQUFDLEVBQ0QsQ0FBQzZGLGVBQWUsRUFBRUUsZUFBZSxFQUFFQyxnQkFBZ0IsRUFBRWhJLENBQUMsQ0FDeEQsQ0FBQztFQUVELElBQU15VCxzQkFBc0IsR0FBR25iLFdBQVcsQ0FDeEMsVUFBQ2lSLEdBQWtCLEVBQUVoSCxRQUF5QixFQUFFbVIsa0JBQTBCLEVBQUs7SUFBQSxJQUFBQyxxQkFBQSxFQUFBQyxrQkFBQTtJQUM3RSxJQUFRalIsU0FBUyxHQUFvQjRHLEdBQUcsQ0FBaEM1RyxTQUFTO01BQUVpSCxhQUFhLEdBQUtMLEdBQUcsQ0FBckJLLGFBQWE7SUFDaEMsSUFBTVAsUUFBUSxHQUFHN08sVUFBVSxDQUFDc04sRUFBRSxDQUFDbkYsU0FBUyxDQUFDO0lBRXpDeEksb0JBQW9CLENBQUMwUCxLQUFLLENBQUNsSCxTQUFTLENBQUM7SUFDckNvRixlQUFlLENBQUNwRixTQUFTLEVBQUVpSCxhQUFhLENBQUM7SUFFekMzRCxnQkFBZ0IsQ0FBQ2pFLE9BQU8sR0FBRyxJQUFJO0lBRS9CLElBQUlxSCxRQUFRLEVBQUU7TUFDWmpELHlCQUF5QixDQUFDcEUsT0FBTyxHQUFHLElBQUk7TUFDeENxRSxxQkFBcUIsQ0FBQ3JFLE9BQU8sR0FBRyxJQUFJO0lBQ3RDO0lBRUEsSUFBTTZSLFdBQWlDLEdBQUc7TUFDeEN0WSxTQUFTLGNBQUF1QyxNQUFBLENBQWN5RSxRQUFRLENBQUN1UixrQkFBa0IsQ0FBRTtNQUNwREMsV0FBVyxFQUFFTCxrQkFBa0IsSUFBSSxFQUFFO01BQ3JDblIsUUFBUSxFQUFSQSxRQUFRO01BQ1J6RCxjQUFjLEVBQUV5RCxRQUFRLENBQUNDLGVBQWU7TUFDeENOLFNBQVMsR0FBQXlSLHFCQUFBLEdBQUVwUixRQUFRLENBQUNDLGVBQWUsY0FBQW1SLHFCQUFBLHVCQUF4QkEscUJBQUEsQ0FBMEJoVyxHQUFHLENBQUMsVUFBQTZCLE1BQU07UUFBQSxPQUFJQSxNQUFNLENBQUNrRCxTQUFTO01BQUE7SUFDckUsQ0FBQztJQUNELElBQUkyRyxRQUFRLEVBQUU7TUFDWnJELHVCQUF1QixDQUFDaEUsT0FBTyxHQUFHNlIsV0FBVztJQUMvQzs7SUFFQTtJQUNBO0lBQ0EsSUFBSXRSLFFBQVEsQ0FBQ3lSLHdCQUF3QixJQUFJelIsUUFBUSxDQUFDMFIsYUFBYSxJQUFJMVIsUUFBUSxDQUFDMlIsZUFBZSxLQUFLLFVBQVUsRUFBRTtNQUFBLElBQUFDLHNCQUFBLEVBQUFDLEtBQUEsRUFBQUMsVUFBQSxFQUFBQyxVQUFBO01BQzFHcGEscUJBQXFCLENBQ25COEssS0FBSyxFQUNMO1FBQUV1UCxVQUFVLEVBQUVyYixNQUFNLENBQUNzYixVQUFVO1FBQUV4RCxNQUFNLEVBQUU5WCxNQUFNLENBQUMwWDtNQUFpQixDQUFDLEVBQ2xFak0sS0FBSyxFQUNMcEMsUUFBUSxFQUNSdUQsd0JBQXdCLENBQUM5RCxPQUFPLEVBQ2hDTyxRQUFRLENBQUN5Uix3QkFBd0IsR0FBRyxRQUFRLEdBQUcsTUFDakQsQ0FBQztNQUVELElBQU1TLFdBQVcsSUFBQU4sc0JBQUEsR0FBRzVSLFFBQVEsQ0FBQ0MsZUFBZSxjQUFBMlIsc0JBQUEsdUJBQXhCQSxzQkFBQSxDQUEyQixDQUFDLENBQUM7TUFDakQsSUFBTWxULFFBQVEsSUFBQW1ULEtBQUEsSUFBQUMsVUFBQSxHQUFJOVIsUUFBUSxDQUE0Qm5DLFNBQVMsY0FBQWlVLFVBQUEsY0FBQUEsVUFBQSxHQUFJSSxXQUFXLGFBQVhBLFdBQVcsdUJBQVhBLFdBQVcsQ0FBRXJVLFNBQVMsY0FBQWdVLEtBQUEsY0FBQUEsS0FBQSxHQUFJLEVBQUU7TUFDL0YsSUFBTXBDLFFBQVEsR0FDWixFQUFBc0MsVUFBQSxHQUFFL1IsUUFBUSxDQUE2QzVDLFNBQVMsY0FBQTJVLFVBQUEsY0FBQUEsVUFBQSxHQUM3REcsV0FBVyxhQUFYQSxXQUFXLHVCQUFYQSxXQUFXLENBQUU5VSxTQUFTLEtBQ3pCLElBQUk7TUFDTixJQUFJc0IsUUFBUSxJQUFJb0ksUUFBUSxFQUFFO1FBQ3hCeEQscUJBQXFCLENBQUM3RCxPQUFPLEdBQUc7VUFBRWYsUUFBUSxFQUFSQSxRQUFRO1VBQUUrUSxRQUFRLEVBQVJBO1FBQVMsQ0FBQztNQUN4RDtNQUNBLElBQUkzSSxRQUFRLEVBQUU7UUFDWm5ELGVBQWUsQ0FBQ2xFLE9BQU8sR0FBRyxLQUFLO01BQ2pDO01BQ0E7SUFDRjs7SUFFQTtJQUNBLElBQU0wUyxpQkFBaUIsZUFBQTVXLE1BQUEsQ0FBZXlFLFFBQVEsQ0FBQ3VSLGtCQUFrQixDQUFFO0lBQ25FM1ksY0FBYyxDQUFDK1UsTUFBTSxDQUFDdEcsYUFBYSxFQUFFOEssaUJBQWlCLENBQUM7SUFDdkQsSUFBTUMsYUFBYSxJQUFBZixrQkFBQSxHQUFHdlksaUJBQWlCLENBQUNrSCxRQUFRLENBQUNtSixTQUFTLENBQUMsY0FBQWtJLGtCQUFBLGNBQUFBLGtCQUFBLEdBQUl0WSxpQkFBaUIsQ0FBQ29aLGlCQUFpQixDQUFDO0lBQ25HN00sZUFBZSxDQUFDbEYsU0FBUyxFQUFFO01BQ3pCM0YsRUFBRSxFQUFFMFgsaUJBQWlCO01BQ3JCclMsT0FBTyxFQUFFcVIsa0JBQWtCLElBQUksRUFBRTtNQUNqQ3BKLElBQUksRUFBRSxJQUFJQyxJQUFJLENBQUMsQ0FBQztNQUNoQkMsSUFBSSxFQUFFO1FBQUV4TixFQUFFLEVBQUUsV0FBVztRQUFFRyxJQUFJLEVBQUU7TUFBWSxDQUFDO01BQzVDeUIsSUFBSSxFQUFFdEYsZUFBZSxDQUFDbVIsU0FBUztNQUMvQmxJLFFBQVEsRUFBUkEsUUFBUTtNQUNSa08sY0FBYyxFQUFFLFNBQVM7TUFDekIvRSxTQUFTLEVBQUVpSjtJQUNiLENBQUMsQ0FBQztJQUNGLElBQUl0TCxRQUFRLEVBQUU7TUFDWm5ELGVBQWUsQ0FBQ2xFLE9BQU8sR0FBRyxLQUFLO0lBQ2pDLENBQUMsTUFBTTtNQUNML0csa0JBQWtCLENBQUMsQ0FBQyxDQUFDeVAsZ0JBQWdCLENBQUMvSCxTQUFTLENBQUM7TUFDaERsSSxpQ0FBaUMsQ0FBQ2tJLFNBQVMsRUFBRSxtQkFBbUIsQ0FBQztJQUNuRTtFQUNGLENBQUMsRUFDRCxDQUFDZ0MsS0FBSyxFQUFFa0QsZUFBZSxFQUFFRSxlQUFlLEVBQUUvQyxLQUFLLENBQ2pELENBQUM7RUFFRCxJQUFBNFAscUJBQUEsR0FTSTliLHFCQUFxQixDQUFDO01BQ3hCK04sZUFBZSxFQUFmQSxlQUFlO01BQ2Y1QyxPQUFPLEVBQUVxRixpQkFBaUI7TUFDMUJ1TCxjQUFjLEVBQUVsSyxrQkFBa0I7TUFDbENtSyxjQUFjLEVBQUU5SixrQkFBa0I7TUFDbEMrSixNQUFNLEVBQUU1QixnQkFBZ0I7TUFDeEI2QixrQkFBa0IsRUFBRXZCLHNCQUFzQjtNQUMxQ3pOLHVCQUF1QixFQUF2QkE7SUFDRixDQUFDLENBQUM7SUFoQkFpUCxPQUFPLEdBQUFMLHFCQUFBLENBQVBLLE9BQU87SUFDUEMsZUFBZSxHQUFBTixxQkFBQSxDQUFmTSxlQUFlO0lBQ0pDLGVBQWUsR0FBQVAscUJBQUEsQ0FBMUJRLFNBQVM7SUFDVEMsU0FBUyxHQUFBVCxxQkFBQSxDQUFUUyxTQUFTO0lBQ1RDLGNBQWMsR0FBQVYscUJBQUEsQ0FBZFUsY0FBYztJQUNkQyxjQUFjLEdBQUFYLHFCQUFBLENBQWRXLGNBQWM7SUFDZEMsb0JBQW9CLEdBQUFaLHFCQUFBLENBQXBCWSxvQkFBb0I7SUFDcEJDLGFBQWEsR0FBQWIscUJBQUEsQ0FBYmEsYUFBYTtFQVdmblAsZ0JBQWdCLENBQUN0RSxPQUFPLEdBQUcsWUFBTTtJQUMvQndULG9CQUFvQixDQUFDLElBQUksQ0FBQztJQUMxQjlPLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3JCVix1QkFBdUIsQ0FBQ2hFLE9BQU8sR0FBRyxJQUFJO0VBQ3hDLENBQUM7RUFFRCxJQUFNMFQsY0FBYyxHQUFHcFIsT0FBTztFQUU5QixJQUFNcVIsV0FBVyxHQUFHcmQsV0FBVztJQUFBLElBQUFzZCxLQUFBLEdBQUExSyxpQkFBQSxjQUFBQyxtQkFBQSxDQUFBQyxJQUFBLENBQzdCLFNBQUF5SyxTQUNFeFQsT0FBZSxFQUNmdkcsb0JBQTRELEVBQzVEZ2EsS0FBYyxFQUNkQyxpQkFBMEIsRUFDMUJDLFFBQTJCLEVBQzNCQyxLQUFjLEVBQ2RDLElBQWE7TUFBQSxJQUFBQyxvQkFBQTtNQUFBLElBQUFDLGtCQUFBLEVBQUFDLHFCQUFBLEVBQUFuYSxXQUFBLEVBQUFDLE9BQUEsRUFBQW1hLGlCQUFBLEVBQUFDLGNBQUEsRUFBQUMsWUFBQSxFQUFBQyxXQUFBLEVBQUFDLGtCQUFBLEVBQUFDLGNBQUEsRUFBQUMsWUFBQSxFQUFBQyxzQkFBQSxFQUFBQyx3QkFBQSxFQUFBblUsU0FBQSxFQUFBb1UsbUJBQUEsRUFBQUMsZUFBQSxFQUFBbGEsVUFBQSxFQUFBRCxTQUFBLEVBQUFvYSxPQUFBLEVBQUFDLHNCQUFBLEVBQUFDLFlBQUEsRUFBQUMscUJBQUEsRUFBQUMscUJBQUEsRUFBQUMsT0FBQSxFQUFBaGIsb0JBQUEsRUFBQWliLGdCQUFBLEVBQUFDLFFBQUEsRUFBQUMsWUFBQSxFQUFBQyx3QkFBQSxFQUFBQyxXQUFBO01BQUEsT0FBQXhNLG1CQUFBLENBQUEyRSxJQUFBLFdBQUE4SCxTQUFBO1FBQUEsa0JBQUFBLFNBQUEsQ0FBQTVILElBQUEsR0FBQTRILFNBQUEsQ0FBQTNILElBQUE7VUFBQTtZQUFBLE1BRVQvSixlQUFlLENBQUNsRSxPQUFPLElBQUltVCxlQUFlLElBQUk3TixlQUFlO2NBQUFzUSxTQUFBLENBQUEzSCxJQUFBO2NBQUE7WUFBQTtZQUFBLE9BQUEySCxTQUFBLENBQUF6SCxNQUFBO1VBQUE7WUFJakU7WUFDQTtZQUNNaUcsa0JBQWtCLEdBQUcsQ0FBQzliLG9CQUFvQixDQUFDK08sUUFBUSxDQUFDN0QsYUFBYSxDQUFDeEQsT0FBTyxDQUFDO1lBQUEsTUFDNUVvVSxrQkFBa0IsSUFBSTliLG9CQUFvQixDQUFDdWQsY0FBYyxDQUFDLENBQUMsSUFBSXRkLHNCQUFzQjtjQUFBcWQsU0FBQSxDQUFBM0gsSUFBQTtjQUFBO1lBQUE7WUFDdkZoSCxRQUFRLENBQUNDLGFBQWEsQ0FDcEIsSUFBSUgsV0FBVyxDQUFDLGdCQUFnQixFQUFFO2NBQ2hDQyxNQUFNLEVBQUU7Z0JBQUVlLElBQUksRUFBRSxJQUFJO2dCQUFFQyxRQUFRLEVBQUUsTUFBTTtnQkFBRTNILE9BQU8sRUFBRXJDLENBQUMsQ0FBQyw0QkFBNEI7Y0FBRTtZQUNuRixDQUFDLENBQ0gsQ0FBQztZQUFBLE9BQUE0WCxTQUFBLENBQUF6SCxNQUFBO1VBQUE7WUFBQWtHLHFCQUFBLEdBSThCeGEsd0JBQXdCLENBQUNDLG9CQUFvQixDQUFDLEVBQXZFSSxXQUFXLEdBQUFtYSxxQkFBQSxDQUFYbmEsV0FBVyxFQUFFQyxPQUFPLEdBQUFrYSxxQkFBQSxDQUFQbGEsT0FBTyxFQUM1QjtZQUNBO1lBQ01tYSxpQkFBaUIsR0FBR04sUUFBUSxhQUFSQSxRQUFRLGNBQVJBLFFBQVEsR0FBSTdaLE9BQU8sQ0FBQzZaLFFBQVE7WUFDaERPLGNBQTBDLEdBQUdoZCxtQkFBbUIsQ0FBQytjLGlCQUFpQixDQUFDO1lBQ25GRSxZQUFZLEdBQUdQLEtBQUssYUFBTEEsS0FBSyxjQUFMQSxLQUFLLEdBQUk5WixPQUFPLENBQUM4WixLQUFLO1lBQ3JDUSxXQUFXLEdBQUdQLElBQUksYUFBSkEsSUFBSSxjQUFKQSxJQUFJLEdBQUkvWixPQUFPLENBQUMrWixJQUFJO1lBQ2xDUSxrQkFBa0IsR0FBR3ZhLE9BQU8sQ0FBQzJiLFdBQVc7WUFDeENuQixjQUFjLEdBQUduZCxrQ0FBa0MsQ0FBQzZJLE9BQU8sRUFBRTtjQUNqRTRULEtBQUssRUFBRU8sWUFBWTtjQUNuQk4sSUFBSSxFQUFFTztZQUNSLENBQUMsQ0FBQztZQUVGdlEsZUFBZSxDQUFDbEUsT0FBTyxHQUFHLElBQUk7WUFDOUJ5RCxlQUFlLENBQUNELGFBQWEsQ0FBQ3hELE9BQU8sQ0FBQztZQUNoQzRVLFlBQVksR0FBR2hlLE1BQU0sQ0FBQyxDQUFDO1lBQzdCME0sZ0JBQWdCLENBQUN0RCxPQUFPLEdBQUc0VSxZQUFZO1lBQ3ZDclIsbUJBQW1CLENBQUN2RCxPQUFPLEdBQUdLLE9BQU87WUFFckMsSUFBSSxDQUFDc0QsYUFBYSxDQUFDM0QsT0FBTyxFQUFFO2NBQzFCZ0QsS0FBSyxDQUFDOUwsTUFBTSxDQUFDNmUsYUFBYSxDQUFDO2NBQzNCcFMsYUFBYSxDQUFDM0QsT0FBTyxHQUFHLElBQUk7WUFDOUI7O1lBRUE7WUFDTTZVLHNCQUFzQixHQUFHalIsV0FBVyxDQUFDNUQsT0FBTyxDQUFDeEUsTUFBTSxDQUFDLFVBQUFvTCxHQUFHO2NBQUEsT0FBSUEsR0FBRyxDQUFDcE0sU0FBUztZQUFBLEVBQUMsQ0FBQ2dVLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUVoRnNHLHdCQUF3QixJQUFBWCxvQkFBQSxHQUFHdlEsV0FBVyxDQUFDNUQsT0FBTyxjQUFBbVUsb0JBQUEsZ0JBQUFBLG9CQUFBLEdBQW5CQSxvQkFBQSxDQUFzQnZRLFdBQVcsQ0FBQzVELE9BQU8sQ0FBQ3JHLE1BQU0sR0FBRyxDQUFDLENBQUMsY0FBQXdhLG9CQUFBLHVCQUFyREEsb0JBQUEsQ0FBdURwVixPQUFPO1lBRXpGNEIsU0FBUyxHQUFHNkMsYUFBYSxDQUFDeEQsT0FBTztZQUFBK1UsbUJBQUEsR0FNbkMzUCxVQUFVLENBQUNwRixPQUFPLEVBSk5nVixlQUFlLEdBQUFELG1CQUFBLENBQTdCMWEsWUFBWSxFQUNIUyxVQUFVLEdBQUFpYSxtQkFBQSxDQUFuQnpTLE9BQU8sRUFDQ3pILFNBQVMsR0FBQWthLG1CQUFBLENBQWpCMVosTUFBTSxFQUNBNFosT0FBTyxHQUFBRixtQkFBQSxDQUFidFMsSUFBSTtZQUdOOUosc0JBQXNCLENBQUM7Y0FDckJnSSxTQUFTLEVBQVRBLFNBQVM7Y0FDVHFWLEtBQUssRUFBRXRkLHdCQUF3QixDQUFDaWMsY0FBYyxDQUFDO2NBQy9DaFMsS0FBSyxFQUFMQSxLQUFLO2NBQ0w1RCxPQUFPLEVBQUUrVix3QkFBd0IsS0FBSW5TLEtBQUssYUFBTEEsS0FBSyx1QkFBTEEsS0FBSyxDQUFFM0gsRUFBRTtjQUM5Q3NILE9BQU8sRUFBRXhILFVBQVU7Y0FDbkJPLE1BQU0sRUFBRVIsU0FBUztjQUNqQlgsV0FBVyxFQUFYQTtZQUNGLENBQUMsQ0FBQzs7WUFFRjtZQUNBMkwsZUFBZSxDQUFDbEYsU0FBUyxFQUFBMUYsYUFBQTtjQUN2QkQsRUFBRSxjQUFBYyxNQUFBLENBQWN3SCxnQkFBZ0IsQ0FBQ3RELE9BQU8sQ0FBRTtjQUMxQ0ssT0FBTyxFQUFFc1UsY0FBYztjQUN2QnJNLElBQUksRUFBRSxJQUFJQyxJQUFJLENBQUMsQ0FBQztjQUNoQkMsSUFBSSxFQUFFN0ksV0FBVztjQUNqQi9DLElBQUksRUFBRXRGLGVBQWUsQ0FBQzJlLElBQUk7Y0FDMUIzTSxPQUFPLEVBQUVwUDtZQUFXLEdBQ2hCcWEsY0FBYyxHQUFHO2NBQUVBLGNBQWMsRUFBZEE7WUFBZSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQzdDLENBQUM7WUFFRmpSLGdCQUFnQixDQUFDdEQsT0FBTyxHQUFHcEosTUFBTSxDQUFDLENBQUM7WUFFN0JzZSxzQkFBc0IsR0FBR3JjLDZCQUE2QixDQUFDeUssZ0JBQWdCLENBQUN0RCxPQUFPLENBQUM7WUFDdEZvRSx5QkFBeUIsQ0FBQ3BFLE9BQU8sR0FBR2tWLHNCQUFzQjtZQUMxRDdRLHFCQUFxQixDQUFDckUsT0FBTyxHQUFHVyxTQUFTO1lBQ3pDeEksb0JBQW9CLENBQUMyUSxLQUFLLENBQUNuSSxTQUFTLEVBQUV1VSxzQkFBc0IsQ0FBQztZQUM3RHJQLGVBQWUsQ0FBQ2xGLFNBQVMsRUFBRTtjQUN6QjNGLEVBQUUsRUFBRWthLHNCQUFzQjtjQUMxQjdVLE9BQU8sRUFBRSxFQUFFO2NBQ1hpSSxJQUFJLEVBQUUsSUFBSUMsSUFBSSxDQUFDLENBQUM7Y0FDaEJDLElBQUksRUFBRTtnQkFBRXhOLEVBQUUsRUFBRSxXQUFXO2dCQUFFRyxJQUFJLEVBQUUsQ0FBQXdILEtBQUssYUFBTEEsS0FBSyx1QkFBTEEsS0FBSyxDQUFFeEgsSUFBSSxLQUFJO2NBQVksQ0FBQztjQUMzRHlCLElBQUksRUFBRXRGLGVBQWUsQ0FBQ21SO1lBQ3hCLENBQUMsQ0FBQztZQUVFME0sWUFBWSxHQUFHOVUsT0FBTztZQUUxQixJQUFJQSxPQUFPLEtBQUtyQyxDQUFDLENBQUMsZ0NBQWdDLENBQUMsRUFBRTtjQUNuRG1YLFlBQVksV0FBQXJaLE1BQUEsQ0FBV2tDLENBQUMsQ0FBQyxnQ0FBZ0MsQ0FBQywrQkFBQWxDLE1BQUEsQ0FDeEQsRUFBQXNaLHFCQUFBLEdBQUFqYixPQUFPLENBQUMrYixjQUFjLGNBQUFkLHFCQUFBLHVCQUF0QkEscUJBQUEsQ0FBd0JlLFVBQVUsT0FBQWQscUJBQUEsR0FBSWpRLFVBQVUsQ0FBQ3BGLE9BQU8sQ0FBQ3NDLE9BQU8sY0FBQStTLHFCQUFBLHVCQUExQkEscUJBQUEsQ0FBNEJjLFVBQVUsRUFDNUU7WUFDSjtZQUVNYixPQUFPLEdBQUcxUixXQUFXLENBQUM1RCxPQUFPLENBQUNyRSxHQUFHLENBQUMsVUFBQXlhLGNBQWM7Y0FBQSxPQUFLO2dCQUN6RHhOLE9BQU8sRUFBRXdOLGNBQWMsQ0FBQy9WLE9BQU87Z0JBQy9CekQsSUFBSSxFQUFFd1osY0FBYyxDQUFDNU4sSUFBSSxDQUFDeE4sRUFBRSxLQUFLMEUsUUFBUSxDQUFDMUUsRUFBRSxDQUFDNEUsUUFBUSxDQUFDLENBQUMsR0FBR3RJLGVBQWUsQ0FBQzJlLElBQUksR0FBRzNlLGVBQWUsQ0FBQ21SO2NBQ25HLENBQUM7WUFBQSxDQUFDLENBQUM7WUFFR25PLG9CQUFvQixHQUFHdWEsc0JBQXNCLGFBQXRCQSxzQkFBc0IsdUJBQXRCQSxzQkFBc0IsQ0FBRXJhLFNBQVM7WUFDeEQrYSxnQkFBZ0IsR0FBR25iLHVCQUF1QixDQUFDNGEsZUFBZSxFQUFFMWEsb0JBQW9CLENBQUM7WUFBQXNiLFNBQUEsQ0FBQTNILElBQUE7WUFBQSxPQUVoRS9LLGFBQWEsQ0FBQyxDQUFDcVMsZ0JBQWdCLENBQUMsQ0FBQztVQUFBO1lBQWxEQyxRQUFRLEdBQUFJLFNBQUEsQ0FBQXpHLElBQUE7WUFFUnNHLFlBQVksR0FBRzNCLEtBQUssYUFBTEEsS0FBSyxjQUFMQSxLQUFLLEdBQUkzWixPQUFPLENBQUMyWixLQUFLO1lBQ3JDNEIsd0JBQXdCLEdBQUczQixpQkFBaUIsYUFBakJBLGlCQUFpQixjQUFqQkEsaUJBQWlCLEdBQUk1WixPQUFPLENBQUM0WixpQkFBaUI7WUFFekU0QixXQUFXLEdBQUExYSxhQUFBLENBQUFBLGFBQUEsQ0FBQUEsYUFBQSxDQUFBQSxhQUFBLENBQUFBLGFBQUEsQ0FBQUEsYUFBQSxDQUFBQSxhQUFBLENBQUFBLGFBQUEsQ0FBQUEsYUFBQSxDQUFBQSxhQUFBLENBQUFBLGFBQUEsQ0FBQUEsYUFBQSxDQUFBQSxhQUFBLENBQUFBLGFBQUE7Y0FDZm9GLE9BQU8sRUFBRThVLFlBQVk7Y0FDckJHLE9BQU8sRUFBUEEsT0FBTztjQUNQOWEsU0FBUyxFQUFFK2EsZ0JBQWdCO2NBQzNCYyxJQUFJLEVBQUUzVyxRQUFRLENBQUMyVyxJQUFJO2NBQ25CQyxNQUFNLEVBQUU1VyxRQUFRLENBQUMxRSxFQUFFLENBQUM0RSxRQUFRLENBQUMsQ0FBQztjQUM5QkMsU0FBUyxFQUFFSCxRQUFRLENBQUNHLFNBQVM7Y0FDN0IwVyxRQUFRLEVBQUU3VyxRQUFRLENBQUM2VyxRQUFRO2NBQzNCQyxTQUFTLEVBQUU5VyxRQUFRLENBQUMrVyxVQUFVLENBQUM3VyxRQUFRLENBQUMsQ0FBQztjQUN6Q21DLE1BQU0sRUFBRXlCLGFBQWEsQ0FBQ3hELE9BQU87Y0FDN0J6RyxTQUFTLEVBQUUrSixnQkFBZ0IsQ0FBQ3RELE9BQU87Y0FDbkMwVyxTQUFTLEVBQUUsQ0FBQS9ULEtBQUssYUFBTEEsS0FBSyx1QkFBTEEsS0FBSyxDQUFFeEgsSUFBSSxLQUFJLEVBQUU7Y0FDNUI0RCxPQUFPLEVBQUUrVix3QkFBd0IsS0FBSW5TLEtBQUssYUFBTEEsS0FBSyx1QkFBTEEsS0FBSyxDQUFFM0gsRUFBRSxDQUFDO2NBQy9DNEgsaUJBQWlCLEVBQUVxQyxvQkFBb0IsQ0FBQ2pGLE9BQU87Y0FDL0M2QyxrQkFBa0IsRUFBRXFDLHFCQUFxQixDQUFDbEYsT0FBTztjQUNqRDhDLG1CQUFtQixFQUFFcUMsc0JBQXNCLENBQUNuRjtZQUFPLEdBQy9DLENBQUFsRixVQUFVLGFBQVZBLFVBQVUsdUJBQVZBLFVBQVUsQ0FBRTZiLEtBQUssS0FBSSxJQUFJLEdBQUc7Y0FBRUEsS0FBSyxFQUFFbGMsTUFBTSxDQUFDSyxVQUFVLENBQUM2YixLQUFLO1lBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUNyRS9iLG9CQUFvQixDQUFDQyxTQUFTLEVBQUVDLFVBQVUsQ0FBQyxHQUMxQzBhLFFBQVEsYUFBUkEsUUFBUSxlQUFSQSxRQUFRLENBQUU3YixNQUFNLEdBQUc7Y0FBRWlkLFdBQVcsRUFBRXBCLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQ3JhO1lBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUN6RCxDQUFBOFosT0FBTyxhQUFQQSxPQUFPLHVCQUFQQSxPQUFPLENBQUVqYSxFQUFFLEtBQUksSUFBSSxHQUFBQyxhQUFBO2NBQ2pCNlUsTUFBTSxFQUFFclYsTUFBTSxDQUFDd2EsT0FBTyxDQUFDamEsRUFBRTtZQUFDLEdBQU1pYSxPQUFPLENBQUM5WixJQUFJLEdBQUc7Y0FBRTBiLFFBQVEsRUFBRTVCLE9BQU8sQ0FBQzlaO1lBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUNoRixDQUFDLENBQUMsR0FDRmpCLFdBQVcsQ0FBQ1AsTUFBTSxHQUFHLENBQUMsR0FBRztjQUFFTyxXQUFXLEVBQVhBO1lBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUM3Q3ViLFlBQVksR0FBRztjQUFFM0IsS0FBSyxFQUFFMkI7WUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQzNDQyx3QkFBd0IsR0FBRztjQUFFM0IsaUJBQWlCLEVBQUUyQjtZQUF5QixDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQy9FbEIsWUFBWSxHQUFHO2NBQUVQLEtBQUssRUFBRU87WUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQzNDQyxXQUFXLEdBQUc7Y0FBRVAsSUFBSSxFQUFFTztZQUFZLENBQUMsR0FBRyxDQUFDLENBQUMsR0FDeEMsQ0FBQTlSLEtBQUssYUFBTEEsS0FBSyx1QkFBTEEsS0FBSyxDQUFFbVUsTUFBTSxLQUFJLElBQUksR0FBRztjQUFFQyxXQUFXLEVBQUVwVSxLQUFLLENBQUNtVTtZQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsR0FDMUQsQ0FBQW5VLEtBQUssYUFBTEEsS0FBSyx1QkFBTEEsS0FBSyxDQUFFNUcsSUFBSSxLQUFJLElBQUksR0FBRztjQUFFaWIsU0FBUyxFQUFFclUsS0FBSyxDQUFDNUc7WUFBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQ3BELENBQUE0RyxLQUFLLGFBQUxBLEtBQUssdUJBQUxBLEtBQUssQ0FBRXNVLEtBQUssS0FBSSxJQUFJLEdBQUc7Y0FBRUMsVUFBVSxFQUFFdlUsS0FBSyxDQUFDc1U7WUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQ3ZEMUMsY0FBYyxHQUFHO2NBQUVBLGNBQWMsRUFBZEE7WUFBZSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQ3hDRyxrQkFBa0IsR0FBRztjQUFFb0IsV0FBVyxFQUFFcEI7WUFBbUIsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUduRXpCLE9BQU8sQ0FBQzBDLFdBQVcsQ0FBQztVQUFBO1VBQUE7WUFBQSxPQUFBQyxTQUFBLENBQUFyRixJQUFBO1FBQUE7TUFBQSxHQUFBc0QsUUFBQTtJQUFBLENBQ3JCO0lBQUEsaUJBQUFzRCxHQUFBLEVBQUFDLEdBQUEsRUFBQUMsSUFBQSxFQUFBQyxJQUFBLEVBQUFDLElBQUEsRUFBQUMsSUFBQSxFQUFBQyxJQUFBO01BQUEsT0FBQTdELEtBQUEsQ0FBQTNDLEtBQUEsT0FBQUMsU0FBQTtJQUFBO0VBQUEsS0FDRCxDQUNFekwsVUFBVSxFQUNWSSxlQUFlLEVBQ2Y3QyxLQUFLLEVBQ0xpUSxPQUFPLEVBQ1AzUSxPQUFPLEVBQ1BqSCxNQUFNLEVBQ05vSCxJQUFJLEVBQ0pwSSxZQUFZLEVBQ1pxRixRQUFRLEVBQ1JpRCxLQUFLLEVBQ0wzRSxDQUFDLEVBQ0RtVixlQUFlLEVBQ2Y3TixlQUFlLEVBQ2YxQyxpQkFBaUIsRUFDakJDLGtCQUFrQixDQUV0QixDQUFDO0VBRUQsSUFBTTZVLGFBQWEsR0FBR3BoQixXQUFXLENBQy9CLFVBQUMwWSxNQUFlLEVBQUs7SUFDbkIsSUFBSSxDQUFDekwsbUJBQW1CLENBQUN2RCxPQUFPLEVBQUU7SUFFbEMsSUFBSWdQLE1BQU0sQ0FBQ2hVLEVBQUUsTUFBS3NILE9BQU8sYUFBUEEsT0FBTyx1QkFBUEEsT0FBTyxDQUFFdEgsRUFBRSxHQUFFO01BQzdCdUgsVUFBVSxDQUFDeU0sTUFBTSxDQUFDO0lBQ3BCO0lBRUEsSUFBSTFNLE9BQU8sSUFBSWlCLG1CQUFtQixDQUFDdkQsT0FBTyxFQUFFO01BQzFDLElBQU1zVixPQUFPLEdBQUcxUixXQUFXLENBQUM1RCxPQUFPLENBQUNyRSxHQUFHLENBQUMsVUFBQXlhLGNBQWM7UUFBQSxPQUFLO1VBQ3pEeE4sT0FBTyxFQUFFd04sY0FBYyxDQUFDL1YsT0FBTztVQUMvQnpELElBQUksRUFBRXdaLGNBQWMsQ0FBQzVOLElBQUksQ0FBQ3hOLEVBQUUsS0FBSzBFLFFBQVEsQ0FBQzFFLEVBQUUsQ0FBQzRFLFFBQVEsQ0FBQyxDQUFDLEdBQUd0SSxlQUFlLENBQUMyZSxJQUFJLEdBQUczZSxlQUFlLENBQUNtUjtRQUNuRyxDQUFDO01BQUEsQ0FBQyxDQUFDO01BRUh3SyxPQUFPLENBQUFoWSxhQUFBLENBQUFBLGFBQUEsQ0FBQUEsYUFBQSxDQUFBQSxhQUFBO1FBQ0xvRixPQUFPLEVBQUVrRCxtQkFBbUIsQ0FBQ3ZELE9BQU87UUFDcENzVixPQUFPLEVBQVBBLE9BQU87UUFDUDlhLFNBQVMsRUFBRXdVLE1BQU0sQ0FBQ2hVLEVBQUU7UUFDcEJxYixJQUFJLEVBQUUzVyxRQUFRLENBQUMyVyxJQUFJO1FBQ25CQyxNQUFNLEVBQUU1VyxRQUFRLENBQUMxRSxFQUFFLENBQUM0RSxRQUFRLENBQUMsQ0FBQztRQUM5QkMsU0FBUyxFQUFFSCxRQUFRLENBQUNHLFNBQVM7UUFDN0IwVyxRQUFRLEVBQUU3VyxRQUFRLENBQUM2VyxRQUFRO1FBQzNCQyxTQUFTLEVBQUU5VyxRQUFRLENBQUMrVyxVQUFVLENBQUM3VyxRQUFRLENBQUMsQ0FBQztRQUN6Q21DLE1BQU0sRUFBRXlCLGFBQWEsQ0FBQ3hELE9BQU87UUFDN0J6RyxTQUFTLEVBQUUrSixnQkFBZ0IsQ0FBQ3RELE9BQU87UUFDbkMwVyxTQUFTLEVBQUUsQ0FBQS9ULEtBQUssYUFBTEEsS0FBSyx1QkFBTEEsS0FBSyxDQUFFeEgsSUFBSSxLQUFJLEVBQUU7UUFDNUI0RCxPQUFPLEVBQUUsQ0FBQTRELEtBQUssYUFBTEEsS0FBSyx1QkFBTEEsS0FBSyxDQUFFM0gsRUFBRSxLQUFJLEVBQUU7UUFDeEI0SCxpQkFBaUIsRUFBRXFDLG9CQUFvQixDQUFDakYsT0FBTztRQUMvQzZDLGtCQUFrQixFQUFFcUMscUJBQXFCLENBQUNsRixPQUFPO1FBQ2pEOEMsbUJBQW1CLEVBQUVxQyxzQkFBc0IsQ0FBQ25GO01BQU8sR0FDL0MsQ0FBQWdQLE1BQU0sYUFBTkEsTUFBTSx1QkFBTkEsTUFBTSxDQUFFMkgsS0FBSyxLQUFJLElBQUksR0FBRztRQUFFQSxLQUFLLEVBQUVsYyxNQUFNLENBQUN1VSxNQUFNLENBQUMySCxLQUFLO01BQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUM1RCxDQUFBM0gsTUFBTSxhQUFOQSxNQUFNLHVCQUFOQSxNQUFNLENBQUU5VCxRQUFRLEtBQUksSUFBSSxHQUFHO1FBQUVBLFFBQVEsRUFBRVQsTUFBTSxDQUFDdVUsTUFBTSxDQUFDOVQsUUFBUTtNQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsR0FDckUsQ0FBQXlILEtBQUssYUFBTEEsS0FBSyx1QkFBTEEsS0FBSyxDQUFFbVUsTUFBTSxLQUFJLElBQUksR0FBRztRQUFFQyxXQUFXLEVBQUVwVSxLQUFLLENBQUNtVTtNQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsR0FDMUQsQ0FBQW5VLEtBQUssYUFBTEEsS0FBSyx1QkFBTEEsS0FBSyxDQUFFNUcsSUFBSSxLQUFJLElBQUksR0FBRztRQUFFaWIsU0FBUyxFQUFFclUsS0FBSyxDQUFDNUc7TUFBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQ3pELENBQUM7SUFDSjtFQUNGLENBQUMsRUFDRCxDQUFDdUcsT0FBTyxFQUFFQyxVQUFVLEVBQUUwUSxPQUFPLEVBQUV2VCxRQUFRLEVBQUVrRCxpQkFBaUIsRUFBRUQsS0FBSyxDQUNuRSxDQUFDO0VBRUQsSUFBTWdWLFlBQVksR0FBR3JoQixXQUFXO0lBQUEsSUFBQXNoQixLQUFBLEdBQUExTyxpQkFBQSxjQUFBQyxtQkFBQSxDQUFBQyxJQUFBLENBQzlCLFNBQUF5TyxTQUFPeFgsT0FBb0I7TUFBQSxJQUFBeVgsb0JBQUEsRUFBQUMscUJBQUEsRUFBQUMsb0JBQUEsRUFBQUMscUJBQUEsRUFBQUMsYUFBQTtNQUFBLElBQUF2WCxTQUFBLEVBQUF3WCxnQkFBQSxFQUFBQyxXQUFBLEVBQUFDLE1BQUEsRUFBQUMsdUJBQUEsRUFBQUMsU0FBQSxFQUFBM0QsWUFBQSxFQUFBTSxzQkFBQSxFQUFBc0QsV0FBQSxFQUFBQyxZQUFBLEVBQUFDLG9CQUFBLEVBQUExRCxlQUFBLEVBQUFsYSxVQUFBLEVBQUFELFNBQUEsRUFBQW9hLE9BQUEsRUFBQUosc0JBQUEsRUFBQVUsZ0JBQUEsRUFBQVQsd0JBQUEsRUFBQTVhLFdBQUEsRUFBQXllLHFCQUFBLEVBQUFDLE1BQUE7TUFBQSxPQUFBelAsbUJBQUEsQ0FBQTJFLElBQUEsV0FBQStLLFNBQUE7UUFBQSxrQkFBQUEsU0FBQSxDQUFBN0ssSUFBQSxHQUFBNkssU0FBQSxDQUFBNUssSUFBQTtVQUFBO1lBQUEsTUFDckIvSixlQUFlLENBQUNsRSxPQUFPLElBQUltVCxlQUFlLElBQUk3TixlQUFlO2NBQUF1VCxTQUFBLENBQUE1SyxJQUFBO2NBQUE7WUFBQTtZQUFBLE9BQUE0SyxTQUFBLENBQUExSyxNQUFBO1VBQUE7WUFFM0R4TixTQUFTLEdBQUc2QyxhQUFhLENBQUN4RCxPQUFPO1lBQUEsS0FDbkMxSCxvQkFBb0IsQ0FBQytPLFFBQVEsQ0FBQzFHLFNBQVMsQ0FBQztjQUFBa1ksU0FBQSxDQUFBNUssSUFBQTtjQUFBO1lBQUE7WUFBQSxPQUFBNEssU0FBQSxDQUFBMUssTUFBQTtVQUFBO1lBQUEsTUFDeEM3VixvQkFBb0IsQ0FBQ3VkLGNBQWMsQ0FBQyxDQUFDLElBQUl0ZCxzQkFBc0I7Y0FBQXNnQixTQUFBLENBQUE1SyxJQUFBO2NBQUE7WUFBQTtZQUNqRWhILFFBQVEsQ0FBQ0MsYUFBYSxDQUNwQixJQUFJSCxXQUFXLENBQUMsZ0JBQWdCLEVBQUU7Y0FDaENDLE1BQU0sRUFBRTtnQkFBRWUsSUFBSSxFQUFFLElBQUk7Z0JBQUVDLFFBQVEsRUFBRSxNQUFNO2dCQUFFM0gsT0FBTyxFQUFFckMsQ0FBQyxDQUFDLDRCQUE0QjtjQUFFO1lBQ25GLENBQUMsQ0FDSCxDQUFDO1lBQUEsT0FBQTZhLFNBQUEsQ0FBQTFLLE1BQUE7VUFBQTtZQUlHZ0ssZ0JBQWdCLEdBQUd2VSxXQUFXLENBQUM1RCxPQUFPO1lBQUEsSUFDdkNtWSxnQkFBZ0IsQ0FBQzFYLElBQUksQ0FBQyxVQUFBcVksSUFBSTtjQUFBLE9BQUlBLElBQUksQ0FBQzlkLEVBQUUsS0FBS3FGLE9BQU8sQ0FBQ3JGLEVBQUU7WUFBQSxFQUFDO2NBQUE2ZCxTQUFBLENBQUE1SyxJQUFBO2NBQUE7WUFBQTtZQUFBLE9BQUE0SyxTQUFBLENBQUExSyxNQUFBO1VBQUE7WUFFcERpSyxXQUFXLEdBQUd0Zix1QkFBdUIsQ0FBQ3FmLGdCQUFnQixFQUFFOVgsT0FBTyxDQUFDO1lBQUEsTUFDbEUsRUFBQytYLFdBQVcsYUFBWEEsV0FBVyxnQkFBQU4sb0JBQUEsR0FBWE0sV0FBVyxDQUFFL1gsT0FBTyxjQUFBeVgsb0JBQUEsZUFBcEJBLG9CQUFBLENBQXNCamMsSUFBSSxDQUFDLENBQUMsS0FBSSxFQUFDdWMsV0FBVyxhQUFYQSxXQUFXLGdCQUFBTCxxQkFBQSxHQUFYSyxXQUFXLENBQUVsZSxXQUFXLGNBQUE2ZCxxQkFBQSxlQUF4QkEscUJBQUEsQ0FBMEJwZSxNQUFNLEtBQUksRUFBQ3llLFdBQVcsYUFBWEEsV0FBVyxnQkFBQUosb0JBQUEsR0FBWEksV0FBVyxDQUFFOU8sT0FBTyxjQUFBME8sb0JBQUEsZUFBcEJBLG9CQUFBLENBQXNCcmUsTUFBTTtjQUFBa2YsU0FBQSxDQUFBNUssSUFBQTtjQUFBO1lBQUE7WUFBQSxPQUFBNEssU0FBQSxDQUFBMUssTUFBQTtVQUFBO1lBSWpHa0ssTUFBTSxHQUFHcmYsa0JBQWtCLENBQUNxSCxPQUFPLENBQUM7WUFDcENpWSx1QkFBdUIsR0FBR2pZLE9BQU8sQ0FBQ21SLG1CQUFtQixJQUFJLEdBQUF5RyxxQkFBQSxHQUFDNVgsT0FBTyxDQUFDa0osZUFBZSxjQUFBME8scUJBQUEsZUFBdkJBLHFCQUFBLENBQXlCcGMsSUFBSSxDQUFDLENBQUM7WUFBQSxNQUMzRixDQUFDd2MsTUFBTSxJQUFJLENBQUNDLHVCQUF1QjtjQUFBTyxTQUFBLENBQUE1SyxJQUFBO2NBQUE7WUFBQTtZQUFBLE9BQUE0SyxTQUFBLENBQUExSyxNQUFBO1VBQUE7WUFFakNvSyxTQUFTLEdBQUd4ZiwwQkFBMEIsQ0FBQ29mLGdCQUFnQixFQUFFOVgsT0FBTyxDQUFDO1lBRXZFNkQsZUFBZSxDQUFDbEUsT0FBTyxHQUFHLElBQUk7WUFDOUJpRSxnQkFBZ0IsQ0FBQ2pFLE9BQU8sR0FBR21ZLGdCQUFnQjtZQUMzQzFVLGVBQWUsQ0FBQzlDLFNBQVMsQ0FBQztZQUVwQmlVLFlBQVksR0FBR2hlLE1BQU0sQ0FBQyxDQUFDO1lBQzdCME0sZ0JBQWdCLENBQUN0RCxPQUFPLEdBQUc0VSxZQUFZO1lBQ3ZDclIsbUJBQW1CLENBQUN2RCxPQUFPLEdBQUdvWSxXQUFXLENBQUMvWCxPQUFPO1lBQzNDNlUsc0JBQXNCLGFBQUFwWixNQUFBLENBQWE4WSxZQUFZO1lBQ3JEeFEseUJBQXlCLENBQUNwRSxPQUFPLEdBQUdrVixzQkFBc0I7WUFDMUQ3USxxQkFBcUIsQ0FBQ3JFLE9BQU8sR0FBR1csU0FBUztZQUVuQzZYLFdBQXdCLEdBQUc7Y0FDL0J4ZCxFQUFFLEVBQUVrYSxzQkFBc0I7Y0FDMUI3VSxPQUFPLEVBQUUsRUFBRTtjQUNYaUksSUFBSSxFQUFFLElBQUlDLElBQUksQ0FBQyxDQUFDO2NBQ2hCQyxJQUFJLEVBQUU7Z0JBQUV4TixFQUFFLEVBQUUsV0FBVztnQkFBRUcsSUFBSSxFQUFFLENBQUF3SCxLQUFLLGFBQUxBLEtBQUssdUJBQUxBLEtBQUssQ0FBRXhILElBQUksS0FBSTtjQUFZLENBQUM7Y0FDM0R5QixJQUFJLEVBQUV0RixlQUFlLENBQUNtUjtZQUN4QixDQUFDO1lBQ0tnUSxZQUFZLE1BQUEzYyxNQUFBLENBQUF1UyxrQkFBQSxDQUFPa0ssU0FBUyxJQUFFQyxXQUFXO1lBQy9DNVUsV0FBVyxDQUFDNUQsT0FBTyxHQUFHeVksWUFBWTtZQUNsQzlTLGVBQWUsQ0FBQzhTLFlBQVksQ0FBQztZQUM3QnRnQixvQkFBb0IsQ0FBQzJRLEtBQUssQ0FBQ25JLFNBQVMsRUFBRXVVLHNCQUFzQixDQUFDO1lBQUF3RCxvQkFBQSxHQU96RHRULFVBQVUsQ0FBQ3BGLE9BQU8sRUFKTmdWLGVBQWUsR0FBQTBELG9CQUFBLENBQTdCcmUsWUFBWSxFQUNIUyxVQUFVLEdBQUE0ZCxvQkFBQSxDQUFuQnBXLE9BQU8sRUFDQ3pILFNBQVMsR0FBQTZkLG9CQUFBLENBQWpCcmQsTUFBTSxFQUNBNFosT0FBTyxHQUFBeUQsb0JBQUEsQ0FBYmpXLElBQUk7WUFFQW9TLHNCQUFzQixHQUFHMEQsU0FBUyxDQUFDL2MsTUFBTSxDQUFDLFVBQUFvTCxHQUFHO2NBQUEsT0FBSUEsR0FBRyxDQUFDcE0sU0FBUztZQUFBLEVBQUMsQ0FBQ2dVLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN0RStHLGdCQUFnQixHQUFHbmIsdUJBQXVCLENBQUM0YSxlQUFlLEVBQUVILHNCQUFzQixhQUF0QkEsc0JBQXNCLHVCQUF0QkEsc0JBQXNCLENBQUVyYSxTQUFTLENBQUM7WUFDOUZzYSx3QkFBd0IsR0FBRyxFQUFBb0QsYUFBQSxHQUFBSyxTQUFTLENBQUMvSixFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsY0FBQTBKLGFBQUEsdUJBQWhCQSxhQUFBLENBQWtCblosT0FBTyxLQUFJc0IsT0FBTyxDQUFDdEIsT0FBTztZQUN2RTdFLFdBQVcsR0FBR0YsS0FBSyxDQUFDQyxPQUFPLENBQUNtZSxXQUFXLENBQUNsZSxXQUFXLENBQUMsR0FDdERrZSxXQUFXLENBQUNsZSxXQUFXLEdBQ3ZCRixLQUFLLENBQUNDLE9BQU8sQ0FBQ21lLFdBQVcsQ0FBQzlPLE9BQU8sQ0FBQyxHQUNoQzhPLFdBQVcsQ0FBQzlPLE9BQU8sR0FDbkIsRUFBRTtZQUVGcVAscUJBQXFCO2NBQUEsSUFBQUksS0FBQSxHQUFBN1AsaUJBQUEsY0FBQUMsbUJBQUEsQ0FBQUMsSUFBQSxDQUFHLFNBQUE0UCxTQUFBO2dCQUFBLElBQUExRCxPQUFBLEVBQUFFLFFBQUEsRUFBQW9ELE1BQUEsRUFBQUssRUFBQTtnQkFBQSxPQUFBOVAsbUJBQUEsQ0FBQTJFLElBQUEsV0FBQW9MLFNBQUE7a0JBQUEsa0JBQUFBLFNBQUEsQ0FBQWxMLElBQUEsR0FBQWtMLFNBQUEsQ0FBQWpMLElBQUE7b0JBQUE7c0JBQ3RCcUgsT0FBTyxHQUFHaUQsU0FBUyxDQUFDNWMsR0FBRyxDQUFDLFVBQUF5YSxjQUFjO3dCQUFBLE9BQUs7MEJBQy9DeE4sT0FBTyxFQUFFd04sY0FBYyxDQUFDL1YsT0FBTzswQkFDL0J6RCxJQUFJLEVBQUV3WixjQUFjLENBQUM1TixJQUFJLENBQUN4TixFQUFFLEtBQUswRSxRQUFRLENBQUMxRSxFQUFFLENBQUM0RSxRQUFRLENBQUMsQ0FBQyxHQUFHdEksZUFBZSxDQUFDMmUsSUFBSSxHQUFHM2UsZUFBZSxDQUFDbVI7d0JBQ25HLENBQUM7c0JBQUEsQ0FBQyxDQUFDO3NCQUFBLEtBQ2M4TSxnQkFBZ0I7d0JBQUEyRCxTQUFBLENBQUFqTCxJQUFBO3dCQUFBO3NCQUFBO3NCQUFBaUwsU0FBQSxDQUFBakwsSUFBQTtzQkFBQSxPQUFTL0ssYUFBYSxDQUFDLENBQUNxUyxnQkFBZ0IsQ0FBQyxDQUFDO29CQUFBO3NCQUFBMEQsRUFBQSxHQUFBQyxTQUFBLENBQUEvSixJQUFBO3NCQUFBK0osU0FBQSxDQUFBakwsSUFBQTtzQkFBQTtvQkFBQTtzQkFBQWdMLEVBQUEsR0FBRyxJQUFJO29CQUFBO3NCQUE1RXpELFFBQVEsR0FBQXlELEVBQUE7c0JBQUFDLFNBQUEsQ0FBQWpMLElBQUE7c0JBQUEsT0FFT2dGLE9BQU8sQ0FBQWhZLGFBQUEsQ0FBQUEsYUFBQSxDQUFBQSxhQUFBLENBQUFBLGFBQUEsQ0FBQUEsYUFBQSxDQUFBQSxhQUFBLENBQUFBLGFBQUEsQ0FBQUEsYUFBQSxDQUFBQSxhQUFBO3dCQUMxQm9GLE9BQU8sRUFBRStYLFdBQVcsQ0FBQy9YLE9BQU87d0JBQzVCaVYsT0FBTyxFQUFQQSxPQUFPO3dCQUNQOWEsU0FBUyxFQUFFK2EsZ0JBQWdCO3dCQUMzQmMsSUFBSSxFQUFFM1csUUFBUSxDQUFDMlcsSUFBSTt3QkFDbkJDLE1BQU0sRUFBRTVXLFFBQVEsQ0FBQzFFLEVBQUUsQ0FBQzRFLFFBQVEsQ0FBQyxDQUFDO3dCQUM5QkMsU0FBUyxFQUFFSCxRQUFRLENBQUNHLFNBQVM7d0JBQzdCMFcsUUFBUSxFQUFFN1csUUFBUSxDQUFDNlcsUUFBUTt3QkFDM0JDLFNBQVMsRUFBRTlXLFFBQVEsQ0FBQytXLFVBQVUsQ0FBQzdXLFFBQVEsQ0FBQyxDQUFDO3dCQUN6Q21DLE1BQU0sRUFBRXBCLFNBQVM7d0JBQ2pCcEgsU0FBUyxFQUFFcWIsWUFBWTt3QkFDdkI4QixTQUFTLEVBQUUsQ0FBQS9ULEtBQUssYUFBTEEsS0FBSyx1QkFBTEEsS0FBSyxDQUFFeEgsSUFBSSxLQUFJLEVBQUU7d0JBQzVCNEQsT0FBTyxFQUFFM0IsTUFBTSxDQUFDMFgsd0JBQXdCLEtBQUluUyxLQUFLLGFBQUxBLEtBQUssdUJBQUxBLEtBQUssQ0FBRTNILEVBQUUsS0FBSSxFQUFFLENBQUM7d0JBQzVENEgsaUJBQWlCLEVBQUVxQyxvQkFBb0IsQ0FBQ2pGLE9BQU87d0JBQy9DNkMsa0JBQWtCLEVBQUVxQyxxQkFBcUIsQ0FBQ2xGO3NCQUFPLEdBQzdDLENBQUFsRixVQUFVLGFBQVZBLFVBQVUsdUJBQVZBLFVBQVUsQ0FBRTZiLEtBQUssS0FBSSxJQUFJLEdBQUc7d0JBQUVBLEtBQUssRUFBRWxjLE1BQU0sQ0FBQ0ssVUFBVSxDQUFDNmIsS0FBSztzQkFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQ3JFL2Isb0JBQW9CLENBQUNDLFNBQVMsRUFBRUMsVUFBVSxDQUFDLEdBQzFDMGEsUUFBUSxhQUFSQSxRQUFRLGVBQVJBLFFBQVEsQ0FBRTdiLE1BQU0sR0FBRzt3QkFBRWlkLFdBQVcsRUFBRXBCLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQ3JhO3NCQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsR0FDekQsQ0FBQThaLE9BQU8sYUFBUEEsT0FBTyx1QkFBUEEsT0FBTyxDQUFFamEsRUFBRSxLQUFJLElBQUksR0FBQUMsYUFBQTt3QkFDakI2VSxNQUFNLEVBQUVyVixNQUFNLENBQUN3YSxPQUFPLENBQUNqYSxFQUFFO3NCQUFDLEdBQU1pYSxPQUFPLENBQUM5WixJQUFJLEdBQUc7d0JBQUUwYixRQUFRLEVBQUU1QixPQUFPLENBQUM5WjtzQkFBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQ2hGLENBQUMsQ0FBQyxHQUNGakIsV0FBVyxDQUFDUCxNQUFNLEdBQUcsQ0FBQyxHQUFHO3dCQUFFTyxXQUFXLEVBQVhBO3NCQUFZLENBQUMsR0FBRyxDQUFDLENBQUMsR0FDN0MsQ0FBQXlJLEtBQUssYUFBTEEsS0FBSyx1QkFBTEEsS0FBSyxDQUFFbVUsTUFBTSxLQUFJLElBQUksR0FBRzt3QkFBRUMsV0FBVyxFQUFFcFUsS0FBSyxDQUFDbVU7c0JBQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUMxRCxDQUFBblUsS0FBSyxhQUFMQSxLQUFLLHVCQUFMQSxLQUFLLENBQUU1RyxJQUFJLEtBQUksSUFBSSxHQUFHO3dCQUFFaWIsU0FBUyxFQUFFclUsS0FBSyxDQUFDNUc7c0JBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUNwRCxDQUFBNEcsS0FBSyxhQUFMQSxLQUFLLHVCQUFMQSxLQUFLLENBQUVzVSxLQUFLLEtBQUksSUFBSSxHQUFHO3dCQUFFQyxVQUFVLEVBQUV2VSxLQUFLLENBQUNzVTtzQkFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQ3ZEbUIsV0FBVyxDQUFDN0QsY0FBYyxHQUFHO3dCQUFFQSxjQUFjLEVBQUU2RCxXQUFXLENBQUM3RDtzQkFBZSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQ3JGLENBQUM7b0JBQUE7c0JBMUJJcUUsTUFBTSxHQUFBTSxTQUFBLENBQUEvSixJQUFBO3NCQTRCWixJQUFJLENBQUN5SixNQUFNLENBQUNPLE9BQU8sRUFBRTt3QkFDbkJsVixnQkFBZ0IsQ0FBQ2pFLE9BQU8sR0FBRyxJQUFJO3dCQUMvQjRELFdBQVcsQ0FBQzVELE9BQU8sR0FBR21ZLGdCQUFnQjt3QkFDdEN4UyxlQUFlLENBQUN3UyxnQkFBZ0IsQ0FBQzt3QkFDakNoZ0Isb0JBQW9CLENBQUMwUCxLQUFLLENBQUNsSCxTQUFTLENBQUM7d0JBQ3JDeUQseUJBQXlCLENBQUNwRSxPQUFPLEdBQUcsSUFBSTt3QkFDeENxRSxxQkFBcUIsQ0FBQ3JFLE9BQU8sR0FBRyxJQUFJO3dCQUNwQ2tFLGVBQWUsQ0FBQ2xFLE9BQU8sR0FBRyxLQUFLO3dCQUMvQixJQUFJNFksTUFBTSxDQUFDUSxNQUFNLEtBQUssT0FBTyxFQUFFOzBCQUM3Qm5TLFFBQVEsQ0FBQ0MsYUFBYSxDQUNwQixJQUFJSCxXQUFXLENBQUMsZ0JBQWdCLEVBQUU7NEJBQ2hDQyxNQUFNLEVBQUU7OEJBQUVlLElBQUksRUFBRSxJQUFJOzhCQUFFQyxRQUFRLEVBQUUsTUFBTTs4QkFBRTNILE9BQU8sRUFBRXJDLENBQUMsQ0FBQyw0QkFBNEI7NEJBQUU7MEJBQ25GLENBQUMsQ0FDSCxDQUFDO3dCQUNIO3NCQUNGO29CQUFDO29CQUFBO3NCQUFBLE9BQUFrYixTQUFBLENBQUEzSSxJQUFBO2tCQUFBO2dCQUFBLEdBQUF5SSxRQUFBO2NBQUEsQ0FDRjtjQUFBLGdCQW5ES0wscUJBQXFCQSxDQUFBO2dCQUFBLE9BQUFJLEtBQUEsQ0FBQTlILEtBQUEsT0FBQUMsU0FBQTtjQUFBO1lBQUE7WUFBQSxNQXFEdkJvSCx1QkFBdUIsSUFBSSxDQUFDRCxNQUFNO2NBQUFRLFNBQUEsQ0FBQTVLLElBQUE7Y0FBQTtZQUFBO1lBQUE0SyxTQUFBLENBQUE1SyxJQUFBO1lBQUEsT0FDOUIwSyxxQkFBcUIsQ0FBQyxDQUFDO1VBQUE7WUFBQSxPQUFBRSxTQUFBLENBQUExSyxNQUFBO1VBQUE7WUFBQTBLLFNBQUEsQ0FBQTVLLElBQUE7WUFBQSxPQUlWaUYsZUFBZSxDQUFBalksYUFBQSxDQUFBQSxhQUFBLENBQUFBLGFBQUEsQ0FBQUEsYUFBQTtjQUNsQzhHLE1BQU0sRUFBRXBCLFNBQVM7Y0FDakJwSCxTQUFTLEVBQUVxYixZQUFZO2NBQ3ZCckwsZUFBZSxFQUFFOE8sTUFBTTtjQUN2QmhDLElBQUksRUFBRTNXLFFBQVEsQ0FBQzJXLElBQUk7Y0FDbkJ0WCxPQUFPLEVBQUUzQixNQUFNLENBQUMwWCx3QkFBd0IsS0FBSW5TLEtBQUssYUFBTEEsS0FBSyx1QkFBTEEsS0FBSyxDQUFFM0gsRUFBRSxLQUFJLEVBQUUsQ0FBQztjQUM1RDBiLFNBQVMsRUFBRSxDQUFBL1QsS0FBSyxhQUFMQSxLQUFLLHVCQUFMQSxLQUFLLENBQUV4SCxJQUFJLEtBQUk7WUFBRSxHQUN4QixDQUFBd0gsS0FBSyxhQUFMQSxLQUFLLHVCQUFMQSxLQUFLLENBQUU1RyxJQUFJLEtBQUksSUFBSSxHQUFHO2NBQUVpYixTQUFTLEVBQUVyVSxLQUFLLENBQUM1RztZQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7Y0FDeEQ2RyxpQkFBaUIsRUFBRXFDLG9CQUFvQixDQUFDakYsT0FBTztjQUMvQzZDLGtCQUFrQixFQUFFcUMscUJBQXFCLENBQUNsRjtZQUFPLEdBQzdDdVYsZ0JBQWdCLEdBQUc7Y0FBRS9hLFNBQVMsRUFBRSthO1lBQWlCLENBQUMsR0FBRyxDQUFDLENBQUMsR0FDeEQzYSxvQkFBb0IsQ0FBQ0MsU0FBUyxFQUFFQyxVQUFVLENBQUMsR0FDMUMsQ0FBQW1hLE9BQU8sYUFBUEEsT0FBTyx1QkFBUEEsT0FBTyxDQUFFamEsRUFBRSxLQUFJLElBQUksR0FBRztjQUFFOFUsTUFBTSxFQUFFclYsTUFBTSxDQUFDd2EsT0FBTyxDQUFDamEsRUFBRTtZQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FDOUQsQ0FBQztVQUFBO1lBYkk0ZCxNQUFNLEdBQUFDLFNBQUEsQ0FBQTFKLElBQUE7WUFBQSxLQWVSeUosTUFBTSxDQUFDTyxPQUFPO2NBQUFOLFNBQUEsQ0FBQTVLLElBQUE7Y0FBQTtZQUFBO1lBQUEsT0FBQTRLLFNBQUEsQ0FBQTFLLE1BQUE7VUFBQTtZQUFBLE1BRWR5SyxNQUFNLENBQUNRLE1BQU0sS0FBSyxnQkFBZ0I7Y0FBQVAsU0FBQSxDQUFBNUssSUFBQTtjQUFBO1lBQUE7WUFBQTRLLFNBQUEsQ0FBQTVLLElBQUE7WUFBQSxPQUM5QjBLLHFCQUFxQixDQUFDLENBQUM7VUFBQTtZQUFBLE9BQUFFLFNBQUEsQ0FBQTFLLE1BQUE7VUFBQTtZQUkvQmxLLGdCQUFnQixDQUFDakUsT0FBTyxHQUFHLElBQUk7WUFDL0I0RCxXQUFXLENBQUM1RCxPQUFPLEdBQUdtWSxnQkFBZ0I7WUFDdEN4UyxlQUFlLENBQUN3UyxnQkFBZ0IsQ0FBQztZQUNqQ2hnQixvQkFBb0IsQ0FBQzBQLEtBQUssQ0FBQ2xILFNBQVMsQ0FBQztZQUNyQ3lELHlCQUF5QixDQUFDcEUsT0FBTyxHQUFHLElBQUk7WUFDeENxRSxxQkFBcUIsQ0FBQ3JFLE9BQU8sR0FBRyxJQUFJO1lBQ3BDa0UsZUFBZSxDQUFDbEUsT0FBTyxHQUFHLEtBQUs7WUFDL0IsSUFBSTRZLE1BQU0sQ0FBQ1EsTUFBTSxLQUFLLE9BQU8sRUFBRTtjQUM3Qm5TLFFBQVEsQ0FBQ0MsYUFBYSxDQUNwQixJQUFJSCxXQUFXLENBQUMsZ0JBQWdCLEVBQUU7Z0JBQ2hDQyxNQUFNLEVBQUU7a0JBQUVlLElBQUksRUFBRSxJQUFJO2tCQUFFQyxRQUFRLEVBQUUsTUFBTTtrQkFBRTNILE9BQU8sRUFBRXJDLENBQUMsQ0FBQyw0QkFBNEI7Z0JBQUU7Y0FDbkYsQ0FBQyxDQUNILENBQUM7WUFDSDtVQUFDO1VBQUE7WUFBQSxPQUFBNmEsU0FBQSxDQUFBdEksSUFBQTtRQUFBO01BQUEsR0FBQXNILFFBQUE7SUFBQSxDQUNGO0lBQUEsaUJBQUF3QixJQUFBO01BQUEsT0FBQXpCLEtBQUEsQ0FBQTNHLEtBQUEsT0FBQUMsU0FBQTtJQUFBO0VBQUEsS0FDRCxDQUNFaUMsZUFBZSxFQUNmN04sZUFBZSxFQUNmSyxlQUFlLEVBQ2Z1TixlQUFlLEVBQ2ZELE9BQU8sRUFDUC9QLGFBQWEsRUFDYnhELFFBQVEsRUFDUmlELEtBQUssRUFDTDNFLENBQUMsRUFDRHlGLGVBQWUsQ0FFbkIsQ0FBQztFQUVELElBQU02VixjQUFjLEdBQUdoakIsV0FBVztJQUFBLElBQUFpakIsS0FBQSxHQUFBclEsaUJBQUEsY0FBQUMsbUJBQUEsQ0FBQUMsSUFBQSxDQUFDLFNBQUFvUSxTQUFPQyxZQUFzQixFQUFFQyxhQUFxQjtNQUFBLElBQUFDLFFBQUE7TUFBQSxPQUFBeFEsbUJBQUEsQ0FBQTJFLElBQUEsV0FBQThMLFNBQUE7UUFBQSxrQkFBQUEsU0FBQSxDQUFBNUwsSUFBQSxHQUFBNEwsU0FBQSxDQUFBM0wsSUFBQTtVQUFBO1lBQUEyTCxTQUFBLENBQUEzTCxJQUFBO1lBQUEsT0FDOUQ3VyxJQUFJLENBQUN5aUIsS0FBSyxDQUFDQyxjQUFjLENBQUNKLGFBQWEsRUFBRUQsWUFBWSxLQUFLcGlCLFFBQVEsQ0FBQzBpQixTQUFTLENBQUM7VUFBQTtZQUE5RkosUUFBUSxHQUFBQyxTQUFBLENBQUF6SyxJQUFBO1lBQ2QsSUFBSXdLLFFBQVEsRUFBRTtjQUNaL1YsV0FBVyxDQUFDNUQsT0FBTyxHQUFHNEQsV0FBVyxDQUFDNUQsT0FBTyxDQUFDckUsR0FBRyxDQUFDLFVBQUEwRSxPQUFPLEVBQUk7Z0JBQ3ZELElBQUlBLE9BQU8sQ0FBQ3JGLEVBQUUsS0FBSzBlLGFBQWEsSUFBSXJaLE9BQU8sQ0FBQ3pELElBQUksS0FBSyxXQUFXLEVBQUU7a0JBQ2hFLE9BQUEzQixhQUFBLENBQUFBLGFBQUEsS0FBWW9GLE9BQU87b0JBQUUyWixVQUFVLEVBQUVQLFlBQVksS0FBS3BpQixRQUFRLENBQUMwaUI7a0JBQVM7Z0JBQ3RFO2dCQUNBLE9BQU8xWixPQUFPO2NBQ2hCLENBQUMsQ0FBQztZQUNKO1VBQUM7VUFBQTtZQUFBLE9BQUF1WixTQUFBLENBQUFySixJQUFBO1FBQUE7TUFBQSxHQUFBaUosUUFBQTtJQUFBLENBQ0Y7SUFBQSxpQkFBQVMsSUFBQSxFQUFBQyxJQUFBO01BQUEsT0FBQVgsS0FBQSxDQUFBdEksS0FBQSxPQUFBQyxTQUFBO0lBQUE7RUFBQSxLQUFFLEVBQUUsQ0FBQztFQUVOLElBQU1pSixzQkFBc0IsR0FBRzdqQixXQUFXO0lBQUEsSUFBQThqQixLQUFBLEdBQUFsUixpQkFBQSxjQUFBQyxtQkFBQSxDQUFBQyxJQUFBLENBQ3hDLFNBQUFpUixTQUNFbmEsU0FBbUIsRUFDbkI2TyxRQUE4QixFQUM5QnVMLGFBQTJFLEVBQzNFQyxRQUF5QztNQUFBLElBQUE3WSxLQUFBLEVBQUE4WSxtQkFBQSxFQUFBQyxjQUFBLEVBQUFsYSxRQUFBLEVBQUFJLFNBQUEsRUFBQXBILFNBQUEsRUFBQW1oQixTQUFBLEVBQUE3SSxXQUFBLEVBQUE4SSxlQUFBLEVBQUFDLGVBQUEsRUFBQUMsT0FBQSxFQUFBQyx1QkFBQSxFQUFBbEMsTUFBQTtNQUFBLE9BQUF6UCxtQkFBQSxDQUFBMkUsSUFBQSxXQUFBaU4sU0FBQTtRQUFBLGtCQUFBQSxTQUFBLENBQUEvTSxJQUFBLEdBQUErTSxTQUFBLENBQUE5TSxJQUFBO1VBQUE7WUFBQSxJQUVwQy9OLFNBQVMsYUFBVEEsU0FBUyxlQUFUQSxTQUFTLENBQUV2RyxNQUFNO2NBQUFvaEIsU0FBQSxDQUFBOU0sSUFBQTtjQUFBO1lBQUE7WUFDcEJvQyxPQUFPLENBQUNDLEtBQUssQ0FBQyw4Q0FBOEMsQ0FBQztZQUFBLE9BQUF5SyxTQUFBLENBQUE1TSxNQUFBO1VBQUE7WUFJekR6TSxLQUFLLEdBQUd6QixrQ0FBa0MsQ0FBQ0MsU0FBUyxFQUFFMEQsV0FBVyxDQUFDNUQsT0FBTyxDQUFDO1lBQUEsSUFDM0UwQixLQUFLLGFBQUxBLEtBQUssZUFBTEEsS0FBSyxDQUFFckIsT0FBTyxDQUFDRSxRQUFRO2NBQUF3YSxTQUFBLENBQUE5TSxJQUFBO2NBQUE7WUFBQTtZQUMxQm9DLE9BQU8sQ0FBQ0MsS0FBSyxDQUFDLHNEQUFzRCxFQUFFcFEsU0FBUyxDQUFDO1lBQUEsT0FBQTZhLFNBQUEsQ0FBQTVNLE1BQUE7VUFBQTtZQUlqRXFNLG1CQUFtQixHQUFnQzlZLEtBQUssQ0FBakVyQixPQUFPLEVBQWtDb2EsY0FBYyxHQUFLL1ksS0FBSyxDQUFuQ2YsU0FBUztZQUN2Q0osUUFBUSxHQUFLaWEsbUJBQW1CLENBQWhDamEsUUFBUTtZQUFBLElBQ1hBLFFBQVE7Y0FBQXdhLFNBQUEsQ0FBQTlNLElBQUE7Y0FBQTtZQUFBO1lBQUEsT0FBQThNLFNBQUEsQ0FBQTVNLE1BQUE7VUFBQTtZQUlQeE4sU0FBUyxHQUFHSixRQUFRLENBQUNLLFVBQVUsSUFBSTZaLGNBQWM7WUFBQSxJQUNsRDlaLFNBQVM7Y0FBQW9hLFNBQUEsQ0FBQTlNLElBQUE7Y0FBQTtZQUFBO1lBQ1pvQyxPQUFPLENBQUNDLEtBQUssQ0FBQyx5Q0FBeUMsRUFBRXBRLFNBQVMsQ0FBQztZQUFBLE9BQUE2YSxTQUFBLENBQUE1TSxNQUFBO1VBQUE7WUFBQSxLQUlqRTdWLG9CQUFvQixDQUFDK08sUUFBUSxDQUFDMUcsU0FBUyxDQUFDO2NBQUFvYSxTQUFBLENBQUE5TSxJQUFBO2NBQUE7WUFBQTtZQUFBLE9BQUE4TSxTQUFBLENBQUE1TSxNQUFBO1VBQUE7WUFBQSxNQUl4QzdWLG9CQUFvQixDQUFDdWQsY0FBYyxDQUFDLENBQUMsSUFBSXRkLHNCQUFzQjtjQUFBd2lCLFNBQUEsQ0FBQTlNLElBQUE7Y0FBQTtZQUFBO1lBQ2pFaEgsUUFBUSxDQUFDQyxhQUFhLENBQ3BCLElBQUlILFdBQVcsQ0FBQyxnQkFBZ0IsRUFBRTtjQUNoQ0MsTUFBTSxFQUFFO2dCQUFFZSxJQUFJLEVBQUUsSUFBSTtnQkFBRUMsUUFBUSxFQUFFLE1BQU07Z0JBQUUzSCxPQUFPLEVBQUVyQyxDQUFDLENBQUMsNEJBQTRCO2NBQUU7WUFDbkYsQ0FBQyxDQUNILENBQUM7WUFBQSxPQUFBK2MsU0FBQSxDQUFBNU0sTUFBQTtVQUFBO1lBSUc1VSxTQUFTLEdBQUdpaEIsbUJBQW1CLENBQUN4ZixFQUFFO1lBQ2xDMGYsU0FBUyxHQUFHM0wsUUFBUSxLQUFLLFNBQVMsR0FBRyxVQUFVLEdBQUcsVUFBVTtZQUM1RDhDLFdBQWlDLEdBQUc7Y0FDeEN0WSxTQUFTLEVBQVRBLFNBQVM7Y0FDVHdZLFdBQVcsRUFBRXlJLG1CQUFtQixDQUFDbmEsT0FBTztjQUN4Q0UsUUFBUSxFQUFSQSxRQUFRO2NBQ1J6RCxjQUFjLEVBQUV5RCxRQUFRLENBQUNDLGVBQWU7Y0FDeENOLFNBQVMsRUFBVEE7WUFDRixDQUFDO1lBRUt5YSxlQUFlLEdBQUduaUIsVUFBVSxDQUFDc04sRUFBRSxDQUFDbkYsU0FBUyxDQUFDO1lBQ2hELElBQUlnYSxlQUFlLEVBQUU7Y0FDbkIzVyx1QkFBdUIsQ0FBQ2hFLE9BQU8sR0FBRzZSLFdBQVc7Y0FDN0MzTixlQUFlLENBQUNsRSxPQUFPLEdBQUcsSUFBSTtZQUNoQztZQUVBNkYsZUFBZSxDQUFDbEYsU0FBUyxFQUFBMUYsYUFBQSxDQUFBQSxhQUFBLEtBQU91ZixtQkFBbUI7Y0FBRS9MLGNBQWMsRUFBRWlNO1lBQVMsRUFBRSxDQUFDO1lBRTNFRSxlQUFlLEdBQUdoa0IsTUFBTSxDQUFDLENBQUM7WUFDaEMsSUFBSStqQixlQUFlLEVBQUU7Y0FDbkJyWCxnQkFBZ0IsQ0FBQ3RELE9BQU8sR0FBRzRhLGVBQWU7WUFDNUM7WUFFTUMsT0FBc0IsR0FBRztjQUM3QmxhLFNBQVMsRUFBVEEsU0FBUztjQUNUcEgsU0FBUyxFQUFFcWhCLGVBQWU7Y0FDMUJoVCxhQUFhLEVBQUUvTyw2QkFBNkIsQ0FBQytoQixlQUFlO1lBQzlELENBQUM7WUFFS0UsdUJBQXVCLEdBQUcsU0FBMUJBLHVCQUF1QkEsQ0FBQSxFQUFTO2NBQ3BDLElBQUksQ0FBQ0gsZUFBZSxFQUFFO2NBQ3RCelcsZUFBZSxDQUFDbEUsT0FBTyxHQUFHLEtBQUs7Y0FDL0JnRSx1QkFBdUIsQ0FBQ2hFLE9BQU8sR0FBRyxJQUFJO1lBQ3hDLENBQUM7WUFBQSthLFNBQUEsQ0FBQTlNLElBQUE7WUFBQSxPQUVvQjNWLG9CQUFvQixDQUFDMGlCLG1CQUFtQixDQUFDO2NBQzVEcmEsU0FBUyxFQUFUQSxTQUFTO2NBQ1RpSCxhQUFhLEVBQUVpVCxPQUFPLENBQUNqVCxhQUFhO2NBQ3BDcVQsZUFBZSxFQUFFO2dCQUNmL2EsU0FBUyxFQUFUQSxTQUFTO2dCQUNUUyxTQUFTLEVBQUVKLFFBQVEsQ0FBQ0ssVUFBVTtnQkFDOUJtTyxRQUFRLEVBQUV1TCxhQUFhLEdBQUcsTUFBTSxHQUFHdkwsUUFBUTtnQkFDM0N1TCxhQUFhLEVBQWJBLGFBQWE7Z0JBQ2J2YixPQUFPLEVBQUUsQ0FBQTRELEtBQUssYUFBTEEsS0FBSyx1QkFBTEEsS0FBSyxDQUFFM0gsRUFBRSxLQUFJLEVBQUU7Z0JBQ3hCcWIsSUFBSSxFQUFFM1csUUFBUSxDQUFDMlcsSUFBSTtnQkFDbkJ2VCxtQkFBbUIsRUFBRXFDLHNCQUFzQixDQUFDbkYsT0FBTztnQkFDbkR1YSxRQUFRLEVBQVJBO2NBQ0YsQ0FBQztjQUNEdmMsQ0FBQyxFQUFEQSxDQUFDO2NBQ0RrZCxvQkFBb0IsRUFBRXJKLFdBQVc7Y0FDakM5UyxPQUFPLEVBQUU0RCxLQUFLLGFBQUxBLEtBQUssdUJBQUxBLEtBQUssQ0FBRTNILEVBQUU7Y0FDbEIwYixTQUFTLEVBQUUvVCxLQUFLLGFBQUxBLEtBQUssdUJBQUxBLEtBQUssQ0FBRXhILElBQUk7Y0FDdEJnZ0IsU0FBUyxFQUFFO2dCQUNUdEksY0FBYyxFQUFFLFNBQWhCQSxjQUFjQSxDQUFFakssT0FBTztrQkFBQSxPQUFJRCxrQkFBa0IsQ0FBQ2tTLE9BQU8sRUFBRWpTLE9BQU8sQ0FBQztnQkFBQTtnQkFDL0RrSyxjQUFjLEVBQUUsU0FBaEJBLGNBQWNBLENBQUVzSSxhQUFhLEVBQUk7a0JBQy9CTix1QkFBdUIsQ0FBQyxDQUFDO2tCQUN6QjlSLGtCQUFrQixDQUNoQjZSLE9BQU8sRUFDUE8sYUFBYSxDQUFDeFMsT0FBTyxFQUNyQndTLGFBQWEsQ0FBQzlSLE9BQU8sRUFDckI4UixhQUFhLENBQUM3UixlQUFlLEVBQzdCNlIsYUFBYSxDQUFDbGhCLFdBQVcsRUFDekJraEIsYUFBYSxDQUFDL1MsV0FBVyxFQUN6QitTLGFBQWEsQ0FBQzVSLGdCQUFnQixFQUM5QjRSLGFBQWEsQ0FBQ0MsZUFBZSxFQUM3QkQsYUFBYSxDQUFDMVIsU0FDaEIsQ0FBQztnQkFDSCxDQUFDO2dCQUNEekgsT0FBTyxFQUFFLFNBQVRBLE9BQU9BLENBQUEsRUFBUTtrQkFDYjZZLHVCQUF1QixDQUFDLENBQUM7a0JBQ3pCeFQsaUJBQWlCLENBQUN1VCxPQUFPLENBQUM7Z0JBQzVCLENBQUM7Z0JBQ0Q3SCxrQkFBa0IsRUFBRSxTQUFwQkEsa0JBQWtCQSxDQUFHc0ksZUFBZSxFQUFFNUosa0JBQWtCLEVBQUs7a0JBQzNEb0osdUJBQXVCLENBQUMsQ0FBQztrQkFDekJySixzQkFBc0IsQ0FBQ29KLE9BQU8sRUFBRVMsZUFBZSxFQUFFNUosa0JBQWtCLENBQUM7Z0JBQ3RFO2NBQ0Y7WUFDRixDQUFDLENBQUM7VUFBQTtZQTFDSWtILE1BQU0sR0FBQW1DLFNBQUEsQ0FBQTVMLElBQUE7WUE0Q1osSUFBSSxDQUFDeUosTUFBTSxDQUFDTyxPQUFPLEVBQUU7Y0FDbkIyQix1QkFBdUIsQ0FBQyxDQUFDO2NBQ3pCLElBQUlsQyxNQUFNLENBQUNRLE1BQU0sS0FBSyxPQUFPLEVBQUU7Z0JBQzdCblMsUUFBUSxDQUFDQyxhQUFhLENBQ3BCLElBQUlILFdBQVcsQ0FBQyxnQkFBZ0IsRUFBRTtrQkFDaENDLE1BQU0sRUFBRTtvQkFBRWUsSUFBSSxFQUFFLElBQUk7b0JBQUVDLFFBQVEsRUFBRSxNQUFNO29CQUFFM0gsT0FBTyxFQUFFckMsQ0FBQyxDQUFDLDRCQUE0QjtrQkFBRTtnQkFDbkYsQ0FBQyxDQUNILENBQUM7Y0FDSDtZQUNGO1VBQUM7VUFBQTtZQUFBLE9BQUErYyxTQUFBLENBQUF4SyxJQUFBO1FBQUE7TUFBQSxHQUFBOEosUUFBQTtJQUFBLENBQ0Y7SUFBQSxpQkFBQWtCLElBQUEsRUFBQUMsSUFBQSxFQUFBQyxJQUFBLEVBQUFDLElBQUE7TUFBQSxPQUFBdEIsS0FBQSxDQUFBbkosS0FBQSxPQUFBQyxTQUFBO0lBQUE7RUFBQSxLQUNELENBQ0V4UixRQUFRLEVBQ1JpRCxLQUFLLEVBQ0xrRCxlQUFlLEVBQ2Z5QixpQkFBaUIsRUFDakJxQixrQkFBa0IsRUFDbEJLLGtCQUFrQixFQUNsQnlJLHNCQUFzQixFQUN0QnpULENBQUMsQ0FFTCxDQUFDO0VBRUQsSUFBTTJkLGNBQWMsR0FBR3JsQixXQUFXLGNBQUE0UyxpQkFBQSxjQUFBQyxtQkFBQSxDQUFBQyxJQUFBLENBQUMsU0FBQXdTLFNBQUE7SUFBQSxJQUFBQyxxQkFBQSxFQUFBQyxxQkFBQSxFQUFBQyxNQUFBLEVBQUFDLHFCQUFBLEVBQUFDLGlCQUFBLEVBQUFDLHFCQUFBLEVBQUFDLGFBQUEsRUFBQUMsYUFBQSxFQUFBQyxZQUFBLEVBQUEvRyxPQUFBLEVBQUFnSCxvQkFBQSxFQUFBdEgsZUFBQSxFQUFBbGEsVUFBQSxFQUFBRCxTQUFBLEVBQUFvYSxPQUFBLEVBQUFNLGdCQUFBLEVBQUFnSCxxQkFBQTtJQUFBLE9BQUFwVCxtQkFBQSxDQUFBMkUsSUFBQSxXQUFBME8sU0FBQTtNQUFBLGtCQUFBQSxTQUFBLENBQUF4TyxJQUFBLEdBQUF3TyxTQUFBLENBQUF2TyxJQUFBO1FBQUE7VUFDakMsSUFBSSxDQUFDOUosWUFBWSxDQUFDbkUsT0FBTyxFQUFFO1lBQ3pCbUUsWUFBWSxDQUFDbkUsT0FBTyxHQUFHLElBQUk7VUFDN0I7VUFBQyxLQUNHOEIsYUFBYTtZQUFBMGEsU0FBQSxDQUFBdk8sSUFBQTtZQUFBO1VBQUE7VUFBQXVPLFNBQUEsQ0FBQXZPLElBQUE7VUFBQSxPQUNUekksWUFBWSxDQUFDLENBQUM7UUFBQTtVQUFBZ1gsU0FBQSxDQUFBdk8sSUFBQTtVQUFBO1FBQUE7VUFBQSxLQUNYak0sa0JBQWtCO1lBQUF3YSxTQUFBLENBQUF2TyxJQUFBO1lBQUE7VUFBQTtVQUNyQmdPLGlCQUFpQixHQUFHUSxPQUFPLEVBQUFaLHFCQUFBLEdBQUM3WixrQkFBa0IsQ0FBQzNCLE9BQU8sY0FBQXdiLHFCQUFBLHVCQUExQkEscUJBQUEsQ0FBNEJoZ0IsSUFBSSxDQUFDLENBQUMsQ0FBQztVQUMvRHFnQixxQkFBcUIsR0FBR08sT0FBTyxFQUFBWCxxQkFBQSxHQUFDOVosa0JBQWtCLENBQUM5SCxXQUFXLGNBQUE0aEIscUJBQUEsdUJBQTlCQSxxQkFBQSxDQUFnQ25pQixNQUFNLENBQUM7VUFDdkV3aUIsYUFBYSxHQUFHTSxPQUFPLENBQUN6YSxrQkFBa0IsQ0FBQzhSLEtBQUssQ0FBQztVQUNqRHNJLGFBQWEsR0FBR0ssT0FBTyxDQUFDemEsa0JBQWtCLENBQUNpUyxLQUFLLENBQUM7VUFDakRvSSxZQUFZLEdBQUdJLE9BQU8sQ0FBQ3phLGtCQUFrQixDQUFDa1MsSUFBSSxDQUFDO1VBQUEsTUFFakQsQ0FBQytILGlCQUFpQixJQUFJLENBQUNDLHFCQUFxQixJQUFJLENBQUNDLGFBQWEsSUFBSSxDQUFDQyxhQUFhLElBQUksQ0FBQ0MsWUFBWTtZQUFBRyxTQUFBLENBQUF2TyxJQUFBO1lBQUE7VUFBQTtVQUFBLE9BQUF1TyxTQUFBLENBQUFyTyxNQUFBO1FBQUE7VUFJL0ZtSCxPQUFPLEdBQUcxUixXQUFXLENBQUM1RCxPQUFPLENBQUNyRSxHQUFHLENBQUMsVUFBQXlhLGNBQWM7WUFBQSxPQUFLO2NBQ3pEeE4sT0FBTyxFQUFFd04sY0FBYyxDQUFDL1YsT0FBTztjQUMvQnpELElBQUksRUFBRXdaLGNBQWMsQ0FBQzVOLElBQUksQ0FBQ3hOLEVBQUUsS0FBSzBFLFFBQVEsQ0FBQzFFLEVBQUUsQ0FBQzRFLFFBQVEsQ0FBQyxDQUFDLEdBQUd0SSxlQUFlLENBQUMyZSxJQUFJLEdBQUczZSxlQUFlLENBQUNtUjtZQUNuRyxDQUFDO1VBQUEsQ0FBQyxDQUFDO1VBQUE2VCxvQkFBQSxHQU9DbFgsVUFBVSxDQUFDcEYsT0FBTyxFQUpOZ1YsZUFBZSxHQUFBc0gsb0JBQUEsQ0FBN0JqaUIsWUFBWSxFQUNIUyxVQUFVLEdBQUF3aEIsb0JBQUEsQ0FBbkJoYSxPQUFPLEVBQ0N6SCxTQUFTLEdBQUF5aEIsb0JBQUEsQ0FBakJqaEIsTUFBTSxFQUNBNFosT0FBTyxHQUFBcUgsb0JBQUEsQ0FBYjdaLElBQUk7VUFFQThTLGdCQUFnQixJQUFBd0csTUFBQSxJQUFBQyxxQkFBQSxHQUFHNWhCLHVCQUF1QixDQUFDNGEsZUFBZSxFQUFFLElBQUksQ0FBQyxjQUFBZ0gscUJBQUEsY0FBQUEscUJBQUEsR0FBSWxoQixVQUFVLGFBQVZBLFVBQVUsdUJBQVZBLFVBQVUsQ0FBRUUsRUFBRSxjQUFBK2dCLE1BQUEsY0FBQUEsTUFBQSxHQUFJLElBQUk7VUFFM0ZRLHFCQUFxQixHQUFHL2tCLGtDQUFrQyxDQUFDd0ssa0JBQWtCLENBQUMzQixPQUFPLEVBQUU7WUFDM0Y0VCxLQUFLLEVBQUVqUyxrQkFBa0IsQ0FBQ2lTLEtBQUs7WUFDL0JDLElBQUksRUFBRWxTLGtCQUFrQixDQUFDa1M7VUFDM0IsQ0FBQyxDQUFDO1VBRUZ2YixzQkFBc0IsQ0FBQztZQUNyQmdJLFNBQVMsRUFBRTZDLGFBQWEsQ0FBQ3hELE9BQU87WUFDaENnVyxLQUFLLEVBQUV0ZCx3QkFBd0IsQ0FBQzZqQixxQkFBcUIsQ0FBQztZQUN0RDVaLEtBQUssRUFBTEEsS0FBSztZQUNMNUQsT0FBTyxFQUFFNEQsS0FBSyxhQUFMQSxLQUFLLHVCQUFMQSxLQUFLLENBQUUzSCxFQUFFO1lBQ2xCc0gsT0FBTyxFQUFFeEgsVUFBVTtZQUNuQk8sTUFBTSxFQUFFUixTQUFTO1lBQ2pCWCxXQUFXLEVBQUU4SCxrQkFBa0IsQ0FBQzlIO1VBQ2xDLENBQUMsQ0FBQztVQUVGK1ksT0FBTyxDQUFBaFksYUFBQSxDQUFBQSxhQUFBLENBQUFBLGFBQUEsQ0FBQUEsYUFBQSxDQUFBQSxhQUFBLENBQUFBLGFBQUEsQ0FBQUEsYUFBQSxDQUFBQSxhQUFBLENBQUFBLGFBQUEsQ0FBQUEsYUFBQSxDQUFBQSxhQUFBLENBQUFBLGFBQUEsQ0FBQUEsYUFBQSxDQUFBQSxhQUFBO1lBQ0xvRixPQUFPLEVBQUUyQixrQkFBa0IsQ0FBQzNCLE9BQU87WUFDbkNpVixPQUFPLEVBQVBBLE9BQU87WUFDUDlhLFNBQVMsRUFBRSthLGdCQUFnQjtZQUMzQmMsSUFBSSxFQUFFM1csUUFBUSxDQUFDMlcsSUFBSTtZQUNuQkMsTUFBTSxFQUFFNVcsUUFBUSxDQUFDMUUsRUFBRSxDQUFDNEUsUUFBUSxDQUFDLENBQUM7WUFDOUJDLFNBQVMsRUFBRUgsUUFBUSxDQUFDRyxTQUFTO1lBQzdCMFcsUUFBUSxFQUFFN1csUUFBUSxDQUFDNlcsUUFBUTtZQUMzQkMsU0FBUyxFQUFFOVcsUUFBUSxDQUFDK1csVUFBVSxDQUFDN1csUUFBUSxDQUFDLENBQUM7WUFDekNtQyxNQUFNLEVBQUV5QixhQUFhLENBQUN4RCxPQUFPO1lBQzdCekcsU0FBUyxFQUFFK0osZ0JBQWdCLENBQUN0RCxPQUFPO1lBQ25DMFcsU0FBUyxFQUFFL1QsS0FBSyxhQUFMQSxLQUFLLHVCQUFMQSxLQUFLLENBQUV4SCxJQUFLO1lBQ3ZCNEQsT0FBTyxFQUFFNEQsS0FBSyxhQUFMQSxLQUFLLHVCQUFMQSxLQUFLLENBQUUzSCxFQUFHO1lBQ25CNEgsaUJBQWlCLEVBQUVxQyxvQkFBb0IsQ0FBQ2pGLE9BQU87WUFDL0M2QyxrQkFBa0IsRUFBRXFDLHFCQUFxQixDQUFDbEYsT0FBTztZQUNqRDhDLG1CQUFtQixFQUFFcUMsc0JBQXNCLENBQUNuRjtVQUFPLEdBQy9DLENBQUFsRixVQUFVLGFBQVZBLFVBQVUsdUJBQVZBLFVBQVUsQ0FBRTZiLEtBQUssS0FBSSxJQUFJLEdBQUc7WUFBRUEsS0FBSyxFQUFFbGMsTUFBTSxDQUFDSyxVQUFVLENBQUM2YixLQUFLO1VBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUNyRS9iLG9CQUFvQixDQUFDQyxTQUFTLEVBQUVDLFVBQVUsQ0FBQyxHQUMxQ0EsVUFBVSxhQUFWQSxVQUFVLGVBQVZBLFVBQVUsQ0FBRUssSUFBSSxHQUFHO1lBQUV5YixXQUFXLEVBQUU5YixVQUFVLENBQUNLO1VBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUN4RCxDQUFBOFosT0FBTyxhQUFQQSxPQUFPLHVCQUFQQSxPQUFPLENBQUVqYSxFQUFFLEtBQUksSUFBSSxHQUFBQyxhQUFBO1lBQ2pCNlUsTUFBTSxFQUFFclYsTUFBTSxDQUFDd2EsT0FBTyxDQUFDamEsRUFBRTtVQUFDLEdBQU1pYSxPQUFPLENBQUM5WixJQUFJLEdBQUc7WUFBRTBiLFFBQVEsRUFBRTVCLE9BQU8sQ0FBQzlaO1VBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUNoRixDQUFDLENBQUMsR0FDRjZHLGtCQUFrQixDQUFDOUgsV0FBVyxHQUFHO1lBQUVBLFdBQVcsRUFBRThILGtCQUFrQixDQUFDOUg7VUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQ3JGOEgsa0JBQWtCLENBQUM4UixLQUFLLEdBQUc7WUFBRUEsS0FBSyxFQUFFOVIsa0JBQWtCLENBQUM4UjtVQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsR0FDbkU5UixrQkFBa0IsQ0FBQytSLGlCQUFpQixHQUFHO1lBQUVBLGlCQUFpQixFQUFFL1Isa0JBQWtCLENBQUMrUjtVQUFrQixDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQ3ZHL1Isa0JBQWtCLENBQUNpUyxLQUFLLEdBQUc7WUFBRUEsS0FBSyxFQUFFalMsa0JBQWtCLENBQUNpUztVQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsR0FDbkVqUyxrQkFBa0IsQ0FBQ2tTLElBQUksR0FBRztZQUFFQSxJQUFJLEVBQUVsUyxrQkFBa0IsQ0FBQ2tTO1VBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUNoRSxDQUFBdlIsS0FBSyxhQUFMQSxLQUFLLHVCQUFMQSxLQUFLLENBQUVtVSxNQUFNLEtBQUksSUFBSSxHQUFHO1lBQUVDLFdBQVcsRUFBRXBVLEtBQUssQ0FBQ21VO1VBQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUMxRCxDQUFBblUsS0FBSyxhQUFMQSxLQUFLLHVCQUFMQSxLQUFLLENBQUU1RyxJQUFJLEtBQUksSUFBSSxHQUFHO1lBQUVpYixTQUFTLEVBQUVyVSxLQUFLLENBQUM1RztVQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsR0FDcEQsQ0FBQTRHLEtBQUssYUFBTEEsS0FBSyx1QkFBTEEsS0FBSyxDQUFFc1UsS0FBSyxLQUFJLElBQUksR0FBRztZQUFFQyxVQUFVLEVBQUV2VSxLQUFLLENBQUNzVTtVQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsR0FDdkQxZixtQkFBbUIsQ0FBQ3lLLGtCQUFrQixDQUFDZ1MsUUFBUSxDQUFDLEdBQ2hEO1lBQUVPLGNBQWMsRUFBRWhkLG1CQUFtQixDQUFDeUssa0JBQWtCLENBQUNnUyxRQUFRO1VBQUUsQ0FBQyxHQUNwRSxDQUFDLENBQUMsR0FDRmhTLGtCQUFrQixDQUFDOFQsV0FBVyxHQUFHO1lBQUVBLFdBQVcsRUFBRTlULGtCQUFrQixDQUFDOFQ7VUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQzFGLENBQUM7UUFBQTtRQUFBO1VBQUEsT0FBQTBHLFNBQUEsQ0FBQWpNLElBQUE7TUFBQTtJQUFBLEdBQUFxTCxRQUFBO0VBQUEsQ0FFTCxJQUFFLENBQ0Q5WixhQUFhLEVBQ2JFLGtCQUFrQixFQUNsQk0sT0FBTyxFQUNQakgsTUFBTSxFQUNOb0gsSUFBSSxFQUNKL0MsUUFBUSxFQUNSaUQsS0FBSyxFQUNMc1EsT0FBTyxFQUNQclEsaUJBQWlCLEVBQ2pCQyxrQkFBa0IsQ0FDbkIsQ0FBQztFQUVGLElBQU02WixTQUFTLEdBQUdwbUIsV0FBVyxDQUFDLFlBQU07SUFDbEMsSUFBTXFtQixpQkFBaUIsR0FBR25aLGFBQWEsQ0FBQ3hELE9BQU87SUFDL0M3SCxvQkFBb0IsQ0FBQzBQLEtBQUssQ0FBQzhVLGlCQUFpQixDQUFDO0lBQzdDeGpCLGNBQWMsQ0FBQzBPLEtBQUssQ0FBQyxDQUFDO0lBQ3RCdkUsZ0JBQWdCLENBQUN0RCxPQUFPLEdBQUdwSixNQUFNLENBQUMsQ0FBQztJQUNuQzJNLG1CQUFtQixDQUFDdkQsT0FBTyxHQUFHLElBQUk7SUFDbEN3RCxhQUFhLENBQUN4RCxPQUFPLEdBQUdwSixNQUFNLENBQUMsQ0FBQztJQUNoQ2tPLGtCQUFrQixDQUFDdEIsYUFBYSxDQUFDeEQsT0FBTyxDQUFDO0lBQ3pDMkQsYUFBYSxDQUFDM0QsT0FBTyxHQUFHLEtBQUs7SUFDN0JvRSx5QkFBeUIsQ0FBQ3BFLE9BQU8sR0FBRyxJQUFJO0lBQ3hDcUUscUJBQXFCLENBQUNyRSxPQUFPLEdBQUcsSUFBSTtJQUNwQ3lELGVBQWUsQ0FBQyxJQUFJLENBQUM7RUFDdkIsQ0FBQyxFQUFFLENBQUNBLGVBQWUsQ0FBQyxDQUFDO0VBRXJCLElBQU1tWixjQUFjLEdBQUd0bUIsV0FBVyxDQUFDLFlBQU07SUFDdkNtZCxhQUFhLENBQUMsQ0FBQztJQUNmdlAsZUFBZSxDQUFDbEUsT0FBTyxHQUFHLEtBQUs7RUFDakMsQ0FBQyxFQUFFLENBQUN5VCxhQUFhLENBQUMsQ0FBQztFQUVuQixPQUFPO0lBQ0x6UyxRQUFRLEVBQVJBLFFBQVE7SUFDUnNFLGVBQWUsRUFBZkEsZUFBZTtJQUNmQyxxQkFBcUIsRUFBckJBLHFCQUFxQjtJQUNyQjROLGVBQWUsRUFBZkEsZUFBZTtJQUNmRSxTQUFTLEVBQVRBLFNBQVM7SUFDVEMsY0FBYyxFQUFkQSxjQUFjO0lBQ2RDLGNBQWMsRUFBZEEsY0FBYztJQUNkOU8sY0FBYyxFQUFkQSxjQUFjO0lBQ2RpUCxjQUFjLEVBQWRBLGNBQWM7SUFDZGxRLGFBQWEsRUFBRUEsYUFBYSxDQUFDeEQsT0FBTztJQUNwQ3NELGdCQUFnQixFQUFFQSxnQkFBZ0IsQ0FBQ3RELE9BQU87SUFFMUMyVCxXQUFXLEVBQVhBLFdBQVc7SUFDWGdFLFlBQVksRUFBWkEsWUFBWTtJQUNaRCxhQUFhLEVBQWJBLGFBQWE7SUFDYjRCLGNBQWMsRUFBZEEsY0FBYztJQUNkYSxzQkFBc0IsRUFBdEJBLHNCQUFzQjtJQUN0QnZVLFlBQVksRUFBWkEsWUFBWTtJQUNaK1YsY0FBYyxFQUFkQSxjQUFjO0lBQ2RlLFNBQVMsRUFBVEEsU0FBUztJQUNURSxjQUFjLEVBQWRBLGNBQWM7SUFFZEMsVUFBVSxFQUFFMUosZUFBZSxJQUFJN047RUFDakMsQ0FBQztBQUNILENBQUMiLCJpZ25vcmVMaXN0IjpbXX0=