@projectcor/maia-components 2.42.0 → 2.42.1-0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (192) hide show
  1. package/CHANGELOG.md +847 -0
  2. package/lib/App.js +44 -19
  3. package/lib/components/atoms/ApprovalBox/ApprovalBox.spec.js +135 -0
  4. package/lib/components/atoms/Checkbox/Checkbox.spec.js +27 -0
  5. package/lib/components/atoms/Chip/Chip.spec.js +82 -0
  6. package/lib/components/atoms/ContextMentionChip/ContextMentionChip.spec.js +29 -0
  7. package/lib/components/atoms/Fade/Fade.spec.js +31 -0
  8. package/lib/components/atoms/FrequentlyUsedActions/FrequentlyUsedActions.js +3 -1
  9. package/lib/components/atoms/FrequentlyUsedActions/FrequentlyUsedActions.styles.js +19 -7
  10. package/lib/components/atoms/MAIAButton/MAIAButton.spec.js +42 -0
  11. package/lib/components/atoms/MAIAInput/MAIAInput.spec.js +303 -0
  12. package/lib/components/atoms/ReasoningBlock/ReasoningBlock.js +7 -2
  13. package/lib/components/atoms/ReasoningBlock/ReasoningBlock.spec.js +69 -0
  14. package/lib/components/atoms/ReasoningBlock/ReasoningBlock.styles.js +10 -14
  15. package/lib/components/atoms/ReasoningBlock/ReasoningSteps.js +1 -1
  16. package/lib/components/atoms/ReasoningBlock/ReasoningSteps.spec.js +59 -0
  17. package/lib/components/atoms/ReasoningBlock/ReasoningTimeline.js +57 -37
  18. package/lib/components/atoms/ReasoningBlock/ReasoningTimeline.spec.js +58 -0
  19. package/lib/components/atoms/ReasoningBlock/reasoningLiveNarration.js +18 -12
  20. package/lib/components/atoms/ReasoningBlock/reasoningLiveNarration.spec.js +68 -0
  21. package/lib/components/atoms/ReasoningBlock/useCollapsibleHeight.js +52 -0
  22. package/lib/components/atoms/ReasoningBlock/useCollapsibleHeight.spec.js +90 -0
  23. package/lib/components/atoms/SkillsDropdown/SkillsDropdown.spec.js +107 -0
  24. package/lib/components/atoms/SlashCommandDropdown/SlashCommandDropdown.spec.js +85 -0
  25. package/lib/components/atoms/Switch/Switch.spec.js +41 -0
  26. package/lib/components/index.js +2 -1
  27. package/lib/components/molecules/AbmSection/AbmAccessibilitySection/AbmAccessibilitySection.spec.js +77 -0
  28. package/lib/components/molecules/AgentInputBlock/AgentInputBlockMessage.js +83 -0
  29. package/lib/components/molecules/AgentInputBlock/AgentInputBlockMessage.styles.js +30 -0
  30. package/lib/components/molecules/AgentInputBlock/index.js +5 -0
  31. package/lib/components/molecules/AgentInputBlock/resolveAgentInputBlock.js +52 -0
  32. package/lib/components/molecules/AgentInputBlock/resolveAgentInputBlock.spec.js +76 -0
  33. package/lib/components/molecules/AgentInputBlock/resolveLegacyContextSession.js +20 -0
  34. package/lib/components/molecules/AgentInputBlock/resolveLegacyContextSession.spec.js +34 -0
  35. package/lib/components/molecules/AgentInputBlock/useAgentChangeModelAction.js +36 -0
  36. package/lib/components/molecules/ChatAIContent/ChatAIContent.js +7 -3
  37. package/lib/components/molecules/ChatAIHome/ChatAIHome.js +21 -6
  38. package/lib/components/molecules/ChatAIHome/ChatAIHome.spec.js +246 -0
  39. package/lib/components/molecules/ChatAIMessages/ChatAICreateAgentActions.spec.js +104 -0
  40. package/lib/components/molecules/ChatAIMessages/ChatAIMessages.js +9 -3
  41. package/lib/components/molecules/ChatAIMessages/ChatAIMessages.spec.js +291 -0
  42. package/lib/components/molecules/ChatAIMessages/ChatAISuggestions.spec.js +46 -0
  43. package/lib/components/molecules/ChatAIMessages/newStyles.js +29 -26
  44. package/lib/components/molecules/ChatAIModal/ChatAIModal.helpers.js +8 -1
  45. package/lib/components/molecules/ChatAIModal/ChatAIModal.helpers.spec.js +148 -0
  46. package/lib/components/molecules/ChatAIModal/ChatAIModal.js +25 -8
  47. package/lib/components/molecules/ChatAIModal/components/ChatAiModalFooter/ChatAiModalFooter.js +15 -153
  48. package/lib/components/molecules/ChatAIModal/components/ChatAiModalFooter/ChatAiModalFooter.styles.js +2 -26
  49. package/lib/components/molecules/ChatAIModal/components/ChatAiModalHeader/ChatAiModalHeader.js +65 -61
  50. package/lib/components/molecules/ChatAIModal/components/MaiaMinimizedPill/MaiaMinimizedPill.spec.js +37 -0
  51. package/lib/components/molecules/ChatAIMySkills/ChatAIMySkills.spec.js +128 -0
  52. package/lib/components/molecules/ChatFooter/ChatFooter.js +5 -3
  53. package/lib/components/molecules/ChatFooter/ChatFooter.spec.js +112 -0
  54. package/lib/components/molecules/ContextMentionInput/ContextMentionInput.spec.js +84 -0
  55. package/lib/components/molecules/MessageFeedback/MessageFeedback.spec.js +116 -0
  56. package/lib/components/molecules/Sidebar/Sidebar.js +41 -23
  57. package/lib/components/molecules/Sidebar/Sidebar.spec.js +234 -0
  58. package/lib/components/organisms/AbmAgentModal/AbmAgentModal.js +2 -2
  59. package/lib/components/organisms/AbmAgentModal/AbmAgentModal.spec.js +335 -0
  60. package/lib/components/organisms/AbmSkillModal/AbmSkillModal.spec.js +405 -0
  61. package/lib/components/organisms/ChatAI/ChatAI.spec.js +174 -0
  62. package/lib/components/organisms/ChatAIPage/ChatAIPage.js +525 -0
  63. package/lib/components/organisms/ChatAIPage/ChatAIPage.spec.js +231 -0
  64. package/lib/components/organisms/ChatAIPage/ChatAIPage.styles.js +16 -0
  65. package/lib/components/organisms/ChatAIPage/ChatAIPageHeader.js +253 -0
  66. package/lib/components/organisms/ChatAIPage/ChatAIPageHeader.spec.js +139 -0
  67. package/lib/components/organisms/ChatAIPage/ChatAIPageHeader.styles.js +13 -0
  68. package/lib/components/organisms/ChatAIPage/ChatAIPageHome.js +267 -0
  69. package/lib/components/organisms/ChatAIPage/ChatAIPageHome.spec.js +261 -0
  70. package/lib/components/organisms/ChatAIPage/ChatAIPageHome.styles.js +194 -0
  71. package/lib/components/organisms/ChatAIPage/ChatAIPageHomeActionCardSlot.js +105 -0
  72. package/lib/components/organisms/ChatAIPage/ChatAIPageHomeActionCardSlot.spec.js +73 -0
  73. package/lib/components/organisms/ChatAIPage/ChatAIPageHomeActionCards.skeleton.js +38 -0
  74. package/lib/components/organisms/ChatAIPage/getDaypart.js +9 -0
  75. package/lib/components/organisms/ChatAIPage/getDaypart.spec.js +19 -0
  76. package/lib/components/organisms/ChatAIPage/index.js +3 -0
  77. package/lib/components/organisms/DeleteAgentModal/DeleteAgentModal.spec.js +59 -0
  78. package/lib/components/organisms/DeleteQuestionModal/DeleteQuestionModal.spec.js +79 -0
  79. package/lib/components/organisms/EditQuestionModal/EditQuestionModal.spec.js +86 -0
  80. package/lib/constants/permissions/index.js +2 -2
  81. package/lib/constants/permissions/utils.js +4 -1
  82. package/lib/constants/permissions/utils.spec.js +34 -0
  83. package/lib/dev/DevMaiaPage.js +30 -0
  84. package/lib/dev/DevReasoningTimeline.js +11 -17
  85. package/lib/dev/Providers.js +5 -3
  86. package/lib/hooks/frequentlyUsedActionsCache.js +17 -0
  87. package/lib/hooks/frequentlyUsedActionsCache.spec.js +25 -0
  88. package/lib/hooks/useAgentModel/useCreateAgent.spec.js +95 -0
  89. package/lib/hooks/useAgentModel/useUpdateAgent.spec.js +96 -0
  90. package/lib/hooks/useCaretPosition.spec.js +58 -0
  91. package/lib/hooks/useChatManager/useChatManager.js +7 -7
  92. package/lib/hooks/useChatMessages/useChatMessages.spec.js +279 -0
  93. package/lib/hooks/useContinueLegacyContextInNewChat/index.js +2 -0
  94. package/lib/hooks/useContinueLegacyContextInNewChat/useContinueLegacyContextInNewChat.js +93 -0
  95. package/lib/hooks/useDebounce.spec.js +42 -0
  96. package/lib/hooks/useEvent.spec.js +40 -0
  97. package/lib/hooks/useFrequentlyUsedActions.js +63 -20
  98. package/lib/hooks/useIsMaiaPageRoute.js +26 -0
  99. package/lib/hooks/useIsMaiaPageRoute.spec.js +26 -0
  100. package/lib/hooks/useMaiaChatSessionMeta/index.js +2 -0
  101. package/lib/hooks/useMaiaChatSessionMeta/useMaiaChatSessionMeta.js +24 -0
  102. package/lib/hooks/useMentionAllowedTypes.spec.js +89 -0
  103. package/lib/hooks/useMinimizedPillNoveltyDot/useMinimizedPillNoveltyDot.spec.js +67 -0
  104. package/lib/hooks/useModal/useModal.spec.js +73 -0
  105. package/lib/hooks/useResize.spec.js +37 -0
  106. package/lib/hooks/useSkillsCatalog.spec.js +88 -0
  107. package/lib/hooks/useSnackBarManager/useSnackBarManager.spec.js +33 -0
  108. package/lib/hooks/useT.spec.js +20 -0
  109. package/lib/hooks/useToggle.spec.js +33 -0
  110. package/lib/index.js +5 -2
  111. package/lib/lang/br/index.js +26 -1
  112. package/lib/lang/en/index.js +26 -1
  113. package/lib/lang/es/index.js +26 -1
  114. package/lib/lang/fr/index.js +26 -1
  115. package/lib/services/maia/Access/updateAccess.spec.js +108 -0
  116. package/lib/services/maia/Actions/getFrequentlyUsedActions.js +1 -1
  117. package/lib/services/maia/Actions/getFrequentlyUsedActions.spec.js +56 -0
  118. package/lib/services/maia/Actions/getSlashCommands.spec.js +74 -0
  119. package/lib/services/maia/Agents/createAgent.spec.js +55 -0
  120. package/lib/services/maia/Agents/deleteAgent.spec.js +42 -0
  121. package/lib/services/maia/Agents/fetchAgentDetail.spec.js +108 -0
  122. package/lib/services/maia/Agents/getAgentById.spec.js +55 -0
  123. package/lib/services/maia/Agents/getAgentSuggestions.spec.js +82 -0
  124. package/lib/services/maia/Agents/setAgentToolGroups.spec.js +45 -0
  125. package/lib/services/maia/Agents/toggleFavorite.spec.js +47 -0
  126. package/lib/services/maia/Agents/updateAgent.spec.js +48 -0
  127. package/lib/services/maia/Chats/deleteChat.spec.js +31 -0
  128. package/lib/services/maia/Chats/getChatMessages.spec.js +150 -0
  129. package/lib/services/maia/Chats/getChatsByUserId.spec.js +149 -0
  130. package/lib/services/maia/Chats/markSessionAsRead.spec.js +30 -0
  131. package/lib/services/maia/Chats/patchChat.spec.js +41 -0
  132. package/lib/services/maia/Chats/wasHelpfulChat.spec.js +28 -0
  133. package/lib/services/maia/Faqs/getFrequentlyAskedQuestions.spec.js +58 -0
  134. package/lib/services/maia/Knowledge/delete.spec.js +45 -0
  135. package/lib/services/maia/Knowledge/download.spec.js +78 -0
  136. package/lib/services/maia/Knowledge/save.spec.js +58 -0
  137. package/lib/services/maia/Orchestrator/orchestrator.spec.js +72 -0
  138. package/lib/services/maia/RecentClients/getRecentClients.spec.js +52 -0
  139. package/lib/services/maia/RecentContexts/getRecentContexts.spec.js +83 -0
  140. package/lib/services/maia/RecentProjects/getRecentProjects.spec.js +82 -0
  141. package/lib/services/maia/RecentTasks/getRecentTasks.spec.js +63 -0
  142. package/lib/services/maia/RecentUsers/getRecentUsers.spec.js +82 -0
  143. package/lib/services/maia/Skills/createSkill.spec.js +68 -0
  144. package/lib/services/maia/Skills/deleteSkill.spec.js +42 -0
  145. package/lib/services/maia/Skills/generateSkill.spec.js +48 -0
  146. package/lib/services/maia/Skills/getSkills.spec.js +152 -0
  147. package/lib/services/maia/Skills/updateSkill.spec.js +62 -0
  148. package/lib/services/maia/client.spec.js +56 -0
  149. package/lib/services/utils/fetchCOR.spec.js +211 -0
  150. package/lib/services/utils/getCookie.spec.js +20 -0
  151. package/lib/store/chatsSidebarOptimistic.spec.js +120 -0
  152. package/lib/store/maiaLastChatPersistence.spec.js +22 -0
  153. package/lib/store/maiaPanelSessionPersistence.spec.js +62 -0
  154. package/lib/store/sessions/sessionStreamManager.js +40 -52
  155. package/lib/store/sessions/sessions.types.spec.js +16 -0
  156. package/lib/store/sessions/useSessionsStore.spec.js +135 -0
  157. package/lib/store/useChatsStore.spec.js +619 -0
  158. package/lib/store/useFaqsStore.spec.js +57 -0
  159. package/lib/styles/cascade.js +29 -3
  160. package/lib/styles/transitions.js +3 -1
  161. package/lib/types/global.d.js +1 -1
  162. package/lib/utils/agentDisplayName.spec.js +44 -0
  163. package/lib/utils/autoApproveStorage.spec.js +25 -0
  164. package/lib/utils/chatInputFiles.spec.js +39 -0
  165. package/lib/utils/contextMentionLabel.spec.js +13 -0
  166. package/lib/utils/contextMentionTriggers.spec.js +38 -0
  167. package/lib/utils/contextMentionTypeLabel.spec.js +14 -0
  168. package/lib/utils/corConnectorMentionTypes.spec.js +23 -0
  169. package/lib/utils/fileDownloadHelper.spec.js +67 -0
  170. package/lib/utils/formatQuickActionMessage.spec.js +27 -0
  171. package/lib/utils/formatUnreadCount.spec.js +12 -0
  172. package/lib/utils/getUnitFileSize.spec.js +18 -0
  173. package/lib/utils/hitlAnalytics.spec.js +100 -0
  174. package/lib/utils/hoursPlannerQuickActionType.js +74 -1
  175. package/lib/utils/hoursPlannerQuickActionType.spec.js +64 -0
  176. package/lib/utils/maiaPageRoute.js +24 -0
  177. package/lib/utils/maiaPageRoute.spec.js +23 -0
  178. package/lib/utils/mapBackendLang.spec.js +19 -0
  179. package/lib/utils/navigateContextEntity.spec.js +50 -0
  180. package/lib/utils/normalizeAgentConnectors.spec.js +89 -0
  181. package/lib/utils/orchestratorSubagents.spec.js +32 -0
  182. package/lib/utils/reasoningMappers.spec.js +103 -0
  183. package/lib/utils/retryCompletion.spec.js +99 -0
  184. package/lib/utils/skillContentSize.spec.js +13 -0
  185. package/lib/utils/slashCommandMarker.spec.js +43 -0
  186. package/lib/utils/sortManagerHoursHomeFuas.spec.js +51 -0
  187. package/lib/utils/sseStreamContent.spec.js +31 -0
  188. package/lib/utils/streamActivityMessages.js +32 -19
  189. package/lib/utils/streamActivityMessages.spec.js +131 -0
  190. package/lib/utils/validateTrimmedFields.spec.js +26 -0
  191. package/package.json +1 -1
  192. package/README.md +0 -2
@@ -59,6 +59,8 @@ export var ChatAIModalHeader = function ChatAIModalHeader(_ref) {
59
59
  isMaiakerSection = _ref$isMaiakerSection === void 0 ? false : _ref$isMaiakerSection,
60
60
  _ref$hideAgentSelecto = _ref.hideAgentSelector,
61
61
  hideAgentSelector = _ref$hideAgentSelecto === void 0 ? false : _ref$hideAgentSelecto,
62
+ _ref$hideControls = _ref.hideControls,
63
+ hideControls = _ref$hideControls === void 0 ? false : _ref$hideControls,
62
64
  onAgentSelected = _ref.onAgentSelected,
63
65
  _ref$showBackButton = _ref.showBackButton,
64
66
  showBackButton = _ref$showBackButton === void 0 ? false : _ref$showBackButton,
@@ -385,69 +387,71 @@ export var ChatAIModalHeader = function ChatAIModalHeader(_ref) {
385
387
  children: /*#__PURE__*/_jsx(SCCAIMHCreateAgentButtonText, {
386
388
  children: t('openAgentCreator')
387
389
  })
388
- }), /*#__PURE__*/_jsxs(SCCAIMHLayoutMenuAnchor, {
389
- ref: layoutMenuRef,
390
- "data-no-drag": "true",
391
- children: [/*#__PURE__*/_jsx(IconButton, {
392
- buttonId: "btn-maia-layout-menu",
393
- handleClick: function handleClick() {
394
- if (!layoutMenuOpen) {
395
- amplitudEvent(EVENTS.aiChatOpenViewOptions);
396
- }
397
- setLayoutMenuOpen(function (prev) {
398
- return !prev;
399
- });
400
- },
401
- tooltip: t('layoutMenuTooltip'),
402
- disableTooltip: layoutMenuOpen,
403
- tooltipZIndex: tooltipZIndex,
404
- children: /*#__PURE__*/_jsx(MaiaChatLayoutMenuIcon, {})
405
- }), layoutMenuOpen ? /*#__PURE__*/_jsxs(SCCAIMHLayoutMenuPanel, {
406
- role: "menu",
407
- children: [/*#__PURE__*/_jsxs(SCCAIMHLayoutMenuRow, {
408
- type: "button",
409
- $active: layoutMode === 'sidebar',
410
- onClick: function onClick() {
411
- return handlePickLayout('sidebar');
412
- },
413
- children: [/*#__PURE__*/_jsx(SCCAIMHLayoutMenuRowIcon, {
414
- "aria-hidden": true,
415
- children: /*#__PURE__*/_jsx(MaiaChatLayoutSidebarIcon, {})
416
- }), t('layoutSidebar')]
417
- }), /*#__PURE__*/_jsxs(SCCAIMHLayoutMenuRow, {
418
- type: "button",
419
- $active: layoutMode === 'fullscreen',
420
- onClick: function onClick() {
421
- return handlePickLayout('fullscreen');
422
- },
423
- children: [/*#__PURE__*/_jsx(SCCAIMHLayoutMenuRowIcon, {
424
- "aria-hidden": true,
425
- children: /*#__PURE__*/_jsx(MaiaChatLayoutFullscreenIcon, {})
426
- }), t('layoutFullscreen')]
427
- }), /*#__PURE__*/_jsxs(SCCAIMHLayoutMenuRow, {
428
- type: "button",
429
- $active: layoutMode === 'floating',
430
- onClick: function onClick() {
431
- return handlePickLayout('floating');
390
+ }), !hideControls && /*#__PURE__*/_jsxs(_Fragment, {
391
+ children: [/*#__PURE__*/_jsxs(SCCAIMHLayoutMenuAnchor, {
392
+ ref: layoutMenuRef,
393
+ "data-no-drag": "true",
394
+ children: [/*#__PURE__*/_jsx(IconButton, {
395
+ buttonId: "btn-maia-layout-menu",
396
+ handleClick: function handleClick() {
397
+ if (!layoutMenuOpen) {
398
+ amplitudEvent(EVENTS.aiChatOpenViewOptions);
399
+ }
400
+ setLayoutMenuOpen(function (prev) {
401
+ return !prev;
402
+ });
432
403
  },
433
- children: [/*#__PURE__*/_jsx(SCCAIMHLayoutMenuRowIcon, {
434
- "aria-hidden": true,
435
- children: /*#__PURE__*/_jsx(MaiaChatLayoutFloatingIcon, {})
436
- }), t('layoutFloating')]
437
- })]
438
- }) : null]
439
- }), handleMinimize ? /*#__PURE__*/_jsx(IconButton, {
440
- handleClick: handleMinimize,
441
- tooltip: t('globals.minimize'),
442
- tooltipZIndex: tooltipZIndex,
443
- children: /*#__PURE__*/_jsx(SCCAIMHMinimizeIcon, {
444
- children: /*#__PURE__*/_jsx(Status, {
445
- width: 24,
446
- height: 24
404
+ tooltip: t('layoutMenuTooltip'),
405
+ disableTooltip: layoutMenuOpen,
406
+ tooltipZIndex: tooltipZIndex,
407
+ children: /*#__PURE__*/_jsx(MaiaChatLayoutMenuIcon, {})
408
+ }), layoutMenuOpen ? /*#__PURE__*/_jsxs(SCCAIMHLayoutMenuPanel, {
409
+ role: "menu",
410
+ children: [/*#__PURE__*/_jsxs(SCCAIMHLayoutMenuRow, {
411
+ type: "button",
412
+ $active: layoutMode === 'sidebar',
413
+ onClick: function onClick() {
414
+ return handlePickLayout('sidebar');
415
+ },
416
+ children: [/*#__PURE__*/_jsx(SCCAIMHLayoutMenuRowIcon, {
417
+ "aria-hidden": true,
418
+ children: /*#__PURE__*/_jsx(MaiaChatLayoutSidebarIcon, {})
419
+ }), t('layoutSidebar')]
420
+ }), /*#__PURE__*/_jsxs(SCCAIMHLayoutMenuRow, {
421
+ type: "button",
422
+ $active: layoutMode === 'fullscreen',
423
+ onClick: function onClick() {
424
+ return handlePickLayout('fullscreen');
425
+ },
426
+ children: [/*#__PURE__*/_jsx(SCCAIMHLayoutMenuRowIcon, {
427
+ "aria-hidden": true,
428
+ children: /*#__PURE__*/_jsx(MaiaChatLayoutFullscreenIcon, {})
429
+ }), t('layoutFullscreen')]
430
+ }), /*#__PURE__*/_jsxs(SCCAIMHLayoutMenuRow, {
431
+ type: "button",
432
+ $active: layoutMode === 'floating',
433
+ onClick: function onClick() {
434
+ return handlePickLayout('floating');
435
+ },
436
+ children: [/*#__PURE__*/_jsx(SCCAIMHLayoutMenuRowIcon, {
437
+ "aria-hidden": true,
438
+ children: /*#__PURE__*/_jsx(MaiaChatLayoutFloatingIcon, {})
439
+ }), t('layoutFloating')]
440
+ })]
441
+ }) : null]
442
+ }), handleMinimize ? /*#__PURE__*/_jsx(IconButton, {
443
+ handleClick: handleMinimize,
444
+ tooltip: t('globals.minimize'),
445
+ tooltipZIndex: tooltipZIndex,
446
+ children: /*#__PURE__*/_jsx(SCCAIMHMinimizeIcon, {
447
+ children: /*#__PURE__*/_jsx(Status, {
448
+ width: 24,
449
+ height: 24
450
+ })
447
451
  })
448
- })
449
- }) : null]
452
+ }) : null]
453
+ })]
450
454
  })]
451
455
  });
452
456
  };
453
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1c2VFZmZlY3QiLCJ1c2VSZWYiLCJ1c2VTdGF0ZSIsInVzZUNhbGxiYWNrIiwidXNlTWVtbyIsIlRvb2x0aXAiLCJTdGF0dXMiLCJDaGV2cm9uRG93biIsIkNoZXZyb25MZWZ0IiwiUGx1cyIsInVzZVRyYW5zbGF0aW9uIiwiU0VDVElPTlMiLCJ1c2VHbG9iYWxDb250ZXh0IiwidXNlUmVzaXplTGlzdGVuZXIiLCJJY29uQnV0dG9uIiwiTUFJQUljb24iLCJNYWlhQ2hhdExheW91dE1lbnVJY29uIiwiTWFpYUNoYXRMYXlvdXRTaWRlYmFySWNvbiIsIk1haWFDaGF0TGF5b3V0RnVsbHNjcmVlbkljb24iLCJNYWlhQ2hhdExheW91dEZsb2F0aW5nSWNvbiIsIkNoYXRBSUFnZW50T3B0aW9uIiwiU0NDQUlNSE1vZGFsIiwiU0NDQUlNSFNlbGVjdGVkQWdlbnQiLCJTQ0NBSU1IU2VsZWN0ZWRBZ2VudFRleHQiLCJTQ0NBSU1IV3JhcHBlciIsIlNDQ0FJTUhXcmFwcGVyQnV0dG9uIiwiU0NDQUlNSFdyYXBwZXJJY29uIiwiU0NDQUlNSFdyYXBwZXJNb2RhbCIsIlNDQ0FJTUhXcmFwcGVyTW9kYWxDb250ZW50IiwiU0NDQUlNSFdyYXBwZXJNb2RhbENvbnRlbnRUaXRsZSIsIlNDQ0FJTUhBZGRBZ2VudCIsIlNDQ0FJTUhDcmVhdGVBZ2VudEJ1dHRvbiIsIlNDQ0FJTUhDcmVhdGVBZ2VudEJ1dHRvblRleHQiLCJTQ0NBSU1IRGl2aWRlciIsIlNDQ0FJTUhBZ2VudHNMaXN0IiwiU0NDQUlNSExvYWRlcldyYXBwZXIiLCJTQ0NBSU1IUGx1c0ljb25XcmFwcGVyIiwiU0NDQUlNSExheW91dE1lbnVBbmNob3IiLCJTQ0NBSU1ITGF5b3V0TWVudVBhbmVsIiwiU0NDQUlNSExheW91dE1lbnVSb3ciLCJTQ0NBSU1ITGF5b3V0TWVudVJvd0ljb24iLCJTQ0NBSU1IQmFja0J1dHRvbiIsIlNDQ0FJTUhNaW5pbWl6ZUljb24iLCJFVkVOVFMiLCJ1c2VFdmVudCIsInVzZVVzZXIiLCJpc01haWFDbG9uZUFnZW50c1JvbGVCbG9ja2VkIiwiTG9hZGVyIiwidXNlTWFpYVRhc2tQYW5lbFpJbmRleCIsImpzeCIsIl9qc3giLCJqc3hzIiwiX2pzeHMiLCJGcmFnbWVudCIsIl9GcmFnbWVudCIsIkNoYXRBSU1vZGFsSGVhZGVyIiwiX3JlZiIsIl91c2VyJHBlcm1pc3Npb25zIiwiX2xvY2FsQWdlbnRzJG5hbWUiLCJsYXlvdXRNb2RlIiwib25MYXlvdXRNb2RlQ2hhbmdlIiwiX3JlZiRkcmFnZ2FibGUiLCJkcmFnZ2FibGUiLCJvbkRyYWdTdGFydCIsIm9uRHJhZ01vdmUiLCJvbkRyYWdFbmQiLCJoYW5kbGVNaW5pbWl6ZSIsIl9yZWYkYWdlbnRzIiwiYWdlbnRzIiwiX3JlZiRoYXNFcnJvciIsImhhc0Vycm9yIiwiX3JlZiRsb2FkaW5nIiwibG9hZGluZyIsIl9yZWYkbG9hZGluZ01vcmUiLCJsb2FkaW5nTW9yZSIsIl9yZWYkaGFzTW9yZSIsImhhc01vcmUiLCJoYW5kbGVSZXNldENoYXQiLCJvbkFnZW50VXBkYXRlIiwibG9hZE1vcmVBZ2VudHMiLCJzb3J0QWdlbnRzTGlzdCIsIl9yZWYkaXNNeUFnZW50c1NlY3RpbyIsImlzTXlBZ2VudHNTZWN0aW9uIiwiX3JlZiRpc015U2tpbGxzU2VjdGlvIiwiaXNNeVNraWxsc1NlY3Rpb24iLCJfcmVmJGlzTWFpYWtlclNlY3Rpb24iLCJpc01haWFrZXJTZWN0aW9uIiwiX3JlZiRoaWRlQWdlbnRTZWxlY3RvIiwiaGlkZUFnZW50U2VsZWN0b3IiLCJvbkFnZW50U2VsZWN0ZWQiLCJfcmVmJHNob3dCYWNrQnV0dG9uIiwic2hvd0JhY2tCdXR0b24iLCJfcmVmJG9uQmFjayIsIm9uQmFjayIsIl91c2VUcmFuc2xhdGlvbiIsImFibUFnZW50IiwiY2hhdEFJIiwidCIsInVzZXIiLCJhbXBsaXR1ZEV2ZW50IiwiX3VzZUdsb2JhbENvbnRleHQiLCJzZWxlY3RlZEFnZW50IiwiYWdlbnQiLCJzZWxlY3RBZ2VudCIsInNldFByb2plY3QiLCJzZXRDbGllbnQiLCJzZXRUYXNrIiwic2VjdGlvbiIsInRvb2x0aXBaSW5kZXgiLCJfdXNlU3RhdGUiLCJfdXNlU3RhdGUyIiwiX3NsaWNlZFRvQXJyYXkiLCJpc0V4cGFuZGVkIiwic2V0SXNFeHBhbmRlZCIsInRleHRSZWZBZ2VudCIsImRyb3Bkb3duUmVmIiwibGF5b3V0TWVudVJlZiIsIl91c2VTdGF0ZTMiLCJfdXNlU3RhdGU0IiwibGF5b3V0TWVudU9wZW4iLCJzZXRMYXlvdXRNZW51T3BlbiIsIl91c2VSZXNpemVMaXN0ZW5lciIsIm5hbWUiLCJzaG93VG9vbHRpcEFnZW50Iiwic2hvd1Rvb2x0aXAiLCJhZ2VudHNSZWYiLCJpc01haWFBZ2VudCIsImFnZW50SXRlbSIsInR5cGUiLCJhZ2VudHNGb3JTZWxlY3RvciIsImZpbHRlciIsImVudGl0eSIsInVzZXJQZXJtaXNzaW9ucyIsInBlcm1pc3Npb25zIiwiYWlfYWdlbnRzIiwiY2FuQ3JlYXRlQWdlbnQiLCJjcmVhdGUiLCJ3aW5kb3ciLCJNQUlBX0NIQVRfQUlfRkVBVFVSRV9BQ0NFU1NfTVVMVElfQUdFTlRTIiwic2hvd0hlYWRlckNyZWF0ZUFnZW50QnV0dG9uIiwiaGFuZGxlT3BlbkNyZWF0ZUFnZW50TW9kYWwiLCJvcGVuTW9kYWwiLCJvcHRpb24iLCJkb2N1bWVudCIsImRpc3BhdGNoRXZlbnQiLCJDdXN0b21FdmVudCIsImRldGFpbCIsImFnZW50VmFsdWVzIiwidmFsdWVzIiwiaXNFZGl0aW5nIiwiaXNPcGVuIiwidW5kZWZpbmVkIiwiaGFuZGxlU2Nyb2xsIiwiY3VycmVudCIsIl9hZ2VudHNSZWYkY3VycmVudCIsInNjcm9sbFRvcCIsInNjcm9sbEhlaWdodCIsImNsaWVudEhlaWdodCIsImRpc3RhbmNlRnJvbUJvdHRvbSIsInRpbWVvdXRJZCIsInNldFRpbWVvdXQiLCJzY3JvbGxFbGVtZW50IiwiYWRkRXZlbnRMaXN0ZW5lciIsImNsZWFyVGltZW91dCIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJsb2NhbEFnZW50cyIsIl9yZWYyIiwiaXNfZGVsZXRlZCIsImhhc19ub3RfcGVybWlzc2lvbnMiLCJoYXNfbm90X2FjY2VzcyIsImlzX2Zyb21fY29udmVyc2F0aW9uIiwiaXNfbGVnYWN5X2NvbnRleHQiLCJmcm9tTGlzdCIsImZpbmQiLCJpZCIsInNlbGVjdG9ySWNvbiIsImVtb2ppIiwic2VjdGlvblNlbGVjdG9yTGFiZWwiLCJucyIsInNlbGVjdG9yTGFiZWwiLCJoYW5kbGVTZWxlY3RBZ2VudCIsImFpQ2hhdEFnZW50U2VsZWN0IiwiYWdlbnRfdHlwZSIsIm5lZWRzRW50aXR5IiwiaGFuZGxlRXhwYW5kTW9kYWwiLCJhaUNoYXRPcGVuQWdlbnRTZWxlY3QiLCJwcmV2IiwiaGFuZGxlQ2xpY2tPdXRzaWRlIiwiZXZlbnQiLCJ0YXJnZXQiLCJjb250YWlucyIsImhhbmRsZVBpY2tMYXlvdXQiLCJtb2RlIiwicHJvamVjdFJlc3VtZUV4cGFuZCIsImV4cGFuZGVkIiwiYWlDaGF0U2VsZWN0Vmlld09wdGlvbnMiLCJjbG9uZUFnZW50c1JvbGVCbG9ja2VkIiwicmVuZGVyTW9kYWwiLCJyZWYiLCJvbkNsaWNrIiwibGVuZ3RoIiwiY2hpbGRyZW4iLCJfb2JqZWN0U3ByZWFkIiwidGl0bGUiLCJzdHlsZSIsImRpc3BsYXkiLCJhbGlnbkl0ZW1zIiwiZ2FwIiwicGxhY2VtZW50IiwiekluZGV4IiwiaXNBZ2VudERlbGV0ZWQiLCJ3aWR0aCIsImhlaWdodCIsImNvbG9yIiwiTUFJQV9DSEFUX0FJX0ZFQVRVUkVfQUNDRVNTIiwibWFpYUFnZW50cyIsIm1hcCIsIm1haWFBZ2VudCIsImluZGV4IiwiaXNTZWxlY3RlZCIsImlzTWFpYSIsIm9uRmF2b3JpdGVUb2dnbGUiLCJjb25jYXQiLCJzb21lIiwiY29tcGFueSIsImFnZW50c0NvdW50Iiwic2l6ZSIsInNob3VsZFJlbmRlclNlbGVjdG9yIiwiJGhhc0Vycm9yIiwiJGxvYWRpbmciLCIkaGFzQWdlbnRzIiwib25Qb2ludGVyRG93biIsIm9uUG9pbnRlck1vdmUiLCJvblBvaW50ZXJVcCIsIm9uUG9pbnRlckNhbmNlbCIsIm9uTG9zdFBvaW50ZXJDYXB0dXJlIiwiY3Vyc29yIiwidG91Y2hBY3Rpb24iLCJidXR0b25JZCIsImhhbmRsZUNsaWNrIiwiYWlDaGF0T3BlblZpZXdPcHRpb25zIiwidG9vbHRpcCIsImRpc2FibGVUb29sdGlwIiwicm9sZSIsIiRhY3RpdmUiXSwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50cy9tb2xlY3VsZXMvQ2hhdEFJTW9kYWwvY29tcG9uZW50cy9DaGF0QWlNb2RhbEhlYWRlci9DaGF0QWlNb2RhbEhlYWRlci50c3giXSwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L2luZGVudCAqL1xuLyogZXNsaW50LWRpc2FibGUgbm8tbmVzdGVkLXRlcm5hcnkgKi9cbmltcG9ydCB7IHVzZUVmZmVjdCwgdXNlUmVmLCB1c2VTdGF0ZSwgdXNlQ2FsbGJhY2ssIHVzZU1lbW8sIFBvaW50ZXJFdmVudCBhcyBSZWFjdFBvaW50ZXJFdmVudCB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgVG9vbHRpcCB9IGZyb20gJ0Bwcm9qZWN0Y29yL3Rvb2x0aXB2Mi9saWIvY29tcG9uZW50cy9Ub29sdGlwJ1xuaW1wb3J0IHsgU3RhdHVzIH0gZnJvbSAnQHByb2plY3Rjb3IvaWNvbnMvbGliL2NvbXBvbmVudHMvU3RhdHVzJ1xuaW1wb3J0IHsgQ2hldnJvbkRvd24gfSBmcm9tICdAcHJvamVjdGNvci9pY29ucy9saWIvY29tcG9uZW50cy9DaGV2cm9uRG93bidcbmltcG9ydCB7IENoZXZyb25MZWZ0IH0gZnJvbSAnQHByb2plY3Rjb3IvaWNvbnMvbGliL2NvbXBvbmVudHMvQ2hldnJvbkxlZnQnXG5pbXBvcnQgeyBQbHVzIH0gZnJvbSAnQHByb2plY3Rjb3IvaWNvbnMvbGliL2NvbXBvbmVudHMvUGx1cydcbmltcG9ydCB7IHVzZVRyYW5zbGF0aW9uIH0gZnJvbSAncmVhY3QtaTE4bmV4dCdcbmltcG9ydCB7IFNFQ1RJT05TIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vY29uc3RhbnRzL2NvbmZpZydcbmltcG9ydCB7IHVzZUdsb2JhbENvbnRleHQgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi9jb250ZXh0L2dsb2JhbC1jb250ZXh0J1xuaW1wb3J0IHsgdXNlUmVzaXplTGlzdGVuZXIgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi9ob29rcy91c2VSZXNpemUnXG5pbXBvcnQgeyBJY29uQnV0dG9uIH0gZnJvbSAnLi4vLi4vLi4vLi4vYXRvbXMvSWNvbkJ1dHRvbidcbmltcG9ydCB7IE1BSUFJY29uLCBNYWlhQ2hhdExheW91dE1lbnVJY29uIH0gZnJvbSAnLi4vLi4vLi4vLi4vYXRvbXMvaWNvbnMnXG5pbXBvcnQgeyBNYWlhQ2hhdExheW91dFNpZGViYXJJY29uIH0gZnJvbSAnLi4vLi4vLi4vLi4vYXRvbXMvaWNvbnMvTWFpYUNoYXRMYXlvdXRTaWRlYmFySWNvbidcbmltcG9ydCB7IE1haWFDaGF0TGF5b3V0RnVsbHNjcmVlbkljb24gfSBmcm9tICcuLi8uLi8uLi8uLi9hdG9tcy9pY29ucy9NYWlhQ2hhdExheW91dEZ1bGxzY3JlZW5JY29uJ1xuaW1wb3J0IHsgTWFpYUNoYXRMYXlvdXRGbG9hdGluZ0ljb24gfSBmcm9tICcuLi8uLi8uLi8uLi9hdG9tcy9pY29ucy9NYWlhQ2hhdExheW91dEZsb2F0aW5nSWNvbidcbmltcG9ydCB7IENoYXRBSUFnZW50T3B0aW9uIH0gZnJvbSAnLi4vQ2hhdEFpQWdlbnRPcHRpb25zL0NoYXRBaUFnZW50T3B0aW9ucydcbmltcG9ydCB7XG4gIFNDQ0FJTUhNb2RhbCxcbiAgU0NDQUlNSFNlbGVjdGVkQWdlbnQsXG4gIFNDQ0FJTUhTZWxlY3RlZEFnZW50VGV4dCxcbiAgU0NDQUlNSFdyYXBwZXIsXG4gIFNDQ0FJTUhXcmFwcGVyQnV0dG9uLFxuICBTQ0NBSU1IV3JhcHBlckljb24sXG4gIFNDQ0FJTUhXcmFwcGVyTW9kYWwsXG4gIFNDQ0FJTUhXcmFwcGVyTW9kYWxDb250ZW50LFxuICBTQ0NBSU1IV3JhcHBlck1vZGFsQ29udGVudFRpdGxlLFxuICBTQ0NBSU1IQWRkQWdlbnQsXG4gIFNDQ0FJTUhDcmVhdGVBZ2VudEJ1dHRvbixcbiAgU0NDQUlNSENyZWF0ZUFnZW50QnV0dG9uVGV4dCxcbiAgU0NDQUlNSERpdmlkZXIsXG4gIFNDQ0FJTUhBZ2VudHNMaXN0LFxuICBTQ0NBSU1ITG9hZGVyV3JhcHBlcixcbiAgU0NDQUlNSFBsdXNJY29uV3JhcHBlcixcbiAgU0NDQUlNSExheW91dE1lbnVBbmNob3IsXG4gIFNDQ0FJTUhMYXlvdXRNZW51UGFuZWwsXG4gIFNDQ0FJTUhMYXlvdXRNZW51Um93LFxuICBTQ0NBSU1ITGF5b3V0TWVudVJvd0ljb24sXG4gIFNDQ0FJTUhCYWNrQnV0dG9uLFxuICBTQ0NBSU1ITWluaW1pemVJY29uLFxufSBmcm9tICcuL0NoYXRBaU1vZGFsSGVhZGVyLnN0eWxlcydcbmltcG9ydCB0eXBlIHsgTWFpYUNoYXRNb2RhbExheW91dE1vZGUgfSBmcm9tICcuLi8uLi9sYXlvdXQnXG5pbXBvcnQgeyBFVkVOVFMsIHVzZUV2ZW50IH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vaG9va3MvdXNlRXZlbnQnXG5pbXBvcnQgeyB1c2VVc2VyIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vY29udGV4dC9jb3ItdXNlcidcbmltcG9ydCB7IGlzTWFpYUNsb25lQWdlbnRzUm9sZUJsb2NrZWQgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi9jb25zdGFudHMvbWFpYVRhc2tQYW5lbEFjY2VzcydcbmltcG9ydCB7IEFnZW50IH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vdHlwZXMvYWdlbnQnXG5pbXBvcnQgeyBMb2FkZXIgfSBmcm9tICcuLi8uLi8uLi8uLi9hdG9tcy9Mb2FkZXInXG5pbXBvcnQgeyB1c2VNYWlhVGFza1BhbmVsWkluZGV4IH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vaG9va3MvdXNlTWFpYVRhc2tQYW5lbFpJbmRleCdcblxuZXhwb3J0IGNvbnN0IENoYXRBSU1vZGFsSGVhZGVyID0gKHtcbiAgbGF5b3V0TW9kZSxcbiAgb25MYXlvdXRNb2RlQ2hhbmdlLFxuICBkcmFnZ2FibGUgPSBmYWxzZSxcbiAgb25EcmFnU3RhcnQsXG4gIG9uRHJhZ01vdmUsXG4gIG9uRHJhZ0VuZCxcbiAgaGFuZGxlTWluaW1pemUsXG4gIGFnZW50cyA9IFtdLFxuICBoYXNFcnJvciA9IGZhbHNlLFxuICBsb2FkaW5nID0gZmFsc2UsXG4gIGxvYWRpbmdNb3JlID0gZmFsc2UsXG4gIGhhc01vcmUgPSBmYWxzZSxcbiAgaGFuZGxlUmVzZXRDaGF0LFxuICBvbkFnZW50VXBkYXRlLFxuICBsb2FkTW9yZUFnZW50cyxcbiAgc29ydEFnZW50c0xpc3QsXG4gIGlzTXlBZ2VudHNTZWN0aW9uID0gZmFsc2UsXG4gIGlzTXlTa2lsbHNTZWN0aW9uID0gZmFsc2UsXG4gIGlzTWFpYWtlclNlY3Rpb24gPSBmYWxzZSxcbiAgaGlkZUFnZW50U2VsZWN0b3IgPSBmYWxzZSxcbiAgb25BZ2VudFNlbGVjdGVkLFxuICBzaG93QmFja0J1dHRvbiA9IGZhbHNlLFxuICBvbkJhY2sgPSAoKSA9PiBudWxsLFxufToge1xuICBsYXlvdXRNb2RlOiBNYWlhQ2hhdE1vZGFsTGF5b3V0TW9kZVxuICBvbkxheW91dE1vZGVDaGFuZ2U6IChtb2RlOiBNYWlhQ2hhdE1vZGFsTGF5b3V0TW9kZSkgPT4gdm9pZFxuICBleHBhbmRlZDogYm9vbGVhblxuICBkcmFnZ2FibGU/OiBib29sZWFuXG4gIG9uRHJhZ1N0YXJ0PzogKGV2ZW50OiBSZWFjdFBvaW50ZXJFdmVudDxIVE1MRGl2RWxlbWVudD4pID0+IHZvaWRcbiAgb25EcmFnTW92ZT86IChldmVudDogUmVhY3RQb2ludGVyRXZlbnQ8SFRNTERpdkVsZW1lbnQ+KSA9PiB2b2lkXG4gIG9uRHJhZ0VuZD86IChldmVudDogUmVhY3RQb2ludGVyRXZlbnQ8SFRNTERpdkVsZW1lbnQ+KSA9PiB2b2lkXG4gIGhhbmRsZU1pbmltaXplPzogKCkgPT4gdm9pZFxuICBhZ2VudHM6IEFnZW50W11cbiAgaGFzRXJyb3I6IGJvb2xlYW5cbiAgbG9hZGluZzogYm9vbGVhblxuICBsb2FkaW5nTW9yZT86IGJvb2xlYW5cbiAgaGFzTW9yZT86IGJvb2xlYW5cbiAgaGFuZGxlUmVzZXRDaGF0OiAoKSA9PiB2b2lkXG4gIG9uQWdlbnRVcGRhdGU/OiAodXBkYXRlZEFnZW50OiBBZ2VudCkgPT4gdm9pZFxuICBsb2FkTW9yZUFnZW50cz86ICgpID0+IHZvaWRcbiAgc29ydEFnZW50c0xpc3Q/OiAoKSA9PiB2b2lkXG4gIC8qKiBTZWNjacOzbiBcIk1pcyBhZ2VudGVzXCI6IHNpIG5vIGhheSBhZ2VudGUgc2V0ZWFkbywgZWwgc2VsZWN0b3IgbXVlc3RyYSBlbCBpY29ubyBkZSBNQUlBIHkgZWwgbm9tYnJlIGRlIGxhIHNlY2Npw7NuICovXG4gIGlzTXlBZ2VudHNTZWN0aW9uPzogYm9vbGVhblxuICAvKiogU2VjY2nDs24gXCJTa2lsbHNcIjogbWlzbW8gY29tcG9ydGFtaWVudG8gZGUgc2VsZWN0b3IgcXVlIE1pcyBhZ2VudGVzLCBjb24gZWwgbm9tYnJlIGRlIGxhIHNlY2Npw7NuICovXG4gIGlzTXlTa2lsbHNTZWN0aW9uPzogYm9vbGVhblxuICAvKiogT2N1bHRhIGVsIGNoaXAgZGUgbW9kZWxvIExMTSAocC4gZWouIGVuIE1pcyBhZ2VudGVzIC8gTWlzIHNraWxscykgKi9cbiAgaGlkZUFnZW50U2VsZWN0b3I/OiBib29sZWFuXG4gIC8qKiBTZWNjacOzbiBcIkNyZWFkb3IgZGUgYWdlbnRlc1wiIChNYWlha2VyKTogaGFiaWxpdGEgZWwgYm90w7NuIFwiQ3JlYXIgYWdlbnRlXCIgZGVsIGhlYWRlciAqL1xuICBpc01haWFrZXJTZWN0aW9uPzogYm9vbGVhblxuICAvKipcbiAgICogU2UgaW52b2NhIGRlc3B1w6lzIGRlbCByZXNldCBjdWFuZG8gZWwgYWdlbnRlIHNlbGVjY2lvbmFkbyBOTyByZXF1aWVyZSBzZWxlY2Npw7NuXG4gICAqIGRlIGVudGl0eSAoY3VzdG9tIG8gY2xvbmUrZ2xvYmFsKS4gUGVybWl0ZSByZXNvbHZlciBgR0VUIC92Mi9zZXNzaW9ucy9hZ2VudC97aWR9YFxuICAgKiB5IG5hdmVnYXIgYSB1bmEgY29udmVyc2FjacOzbiBleGlzdGVudGUgc2kgbGEgaGF5LlxuICAgKi9cbiAgb25BZ2VudFNlbGVjdGVkPzogKGFnZW50OiBBZ2VudCkgPT4gdm9pZCB8IFByb21pc2U8dW5rbm93bj5cbiAgc2hvd0JhY2tCdXR0b24/OiBib29sZWFuXG4gIG9uQmFjaz86ICgpID0+IHZvaWRcbn0pID0+IHtcbiAgY29uc3QgeyB0IH0gPSB1c2VUcmFuc2xhdGlvbihbU0VDVElPTlMuYWJtQWdlbnQsIFNFQ1RJT05TLmNoYXRBSV0pXG4gIGNvbnN0IHVzZXIgPSB1c2VVc2VyKClcbiAgY29uc3QgYW1wbGl0dWRFdmVudCA9IHVzZUV2ZW50KClcbiAgY29uc3QgeyBhZ2VudDogc2VsZWN0ZWRBZ2VudCwgc2VsZWN0QWdlbnQsIHNldFByb2plY3QsIHNldENsaWVudCwgc2V0VGFzaywgc2VjdGlvbiB9ID0gdXNlR2xvYmFsQ29udGV4dCgpXG4gIC8vIEVuIHNlY3Rpb24gJ3Rhc2snIGVsIG1vZGFsIGRlIE1haWEgc2UgZWxldmEgcG9yIGVuY2ltYSBkZWwgdGFzayBwYW5lbCAoei1pbmRleCA5ODAwMDAxKS5cbiAgLy8gTG9zIHRvb2x0aXBzIHNlIG1vbnRhbiBlbiBwb3J0YWwgY29uIHotaW5kZXggMTUwMCBwb3IgZGVmZWN0bywgYXPDrSBxdWUgcXVlZGFyw61hbiBkZXRyw6FzLlxuICAvLyBTdWJpbW9zIHN1IHotaW5kZXggc8OzbG8gZW4gZXN0ZSBjYXNvIHBhcmEgcXVlIHNlIHZlYW4gcG9yIGVuY2ltYSBkZWwgbW9kYWwuXG4gIGNvbnN0IHRvb2x0aXBaSW5kZXggPSB1c2VNYWlhVGFza1BhbmVsWkluZGV4KDE1MDAsICdvdmVybGF5JylcbiAgY29uc3QgW2lzRXhwYW5kZWQsIHNldElzRXhwYW5kZWRdID0gdXNlU3RhdGUoZmFsc2UpXG4gIGNvbnN0IHRleHRSZWZBZ2VudCA9IHVzZVJlZjxIVE1MU3BhbkVsZW1lbnQ+KG51bGwpXG4gIGNvbnN0IGRyb3Bkb3duUmVmID0gdXNlUmVmPEhUTUxEaXZFbGVtZW50PihudWxsKVxuICBjb25zdCBsYXlvdXRNZW51UmVmID0gdXNlUmVmPEhUTUxEaXZFbGVtZW50PihudWxsKVxuICBjb25zdCBbbGF5b3V0TWVudU9wZW4sIHNldExheW91dE1lbnVPcGVuXSA9IHVzZVN0YXRlKGZhbHNlKVxuICBjb25zdCB7IHNob3dUb29sdGlwOiBzaG93VG9vbHRpcEFnZW50IH0gPSB1c2VSZXNpemVMaXN0ZW5lcih0ZXh0UmVmQWdlbnQsIFtzZWxlY3RlZEFnZW50Py5uYW1lXSlcbiAgY29uc3QgYWdlbnRzUmVmID0gdXNlUmVmPEhUTUxEaXZFbGVtZW50PihudWxsKVxuXG4gIGNvbnN0IGlzTWFpYUFnZW50ID0gdXNlQ2FsbGJhY2soKGFnZW50SXRlbTogQWdlbnQpID0+IGFnZW50SXRlbS50eXBlID09PSAnb3JjaGVzdHJhdG9yJywgW10pXG4gIGNvbnN0IGFnZW50c0ZvclNlbGVjdG9yID0gdXNlTWVtbyhcbiAgICAoKSA9PiBhZ2VudHMuZmlsdGVyKGFnZW50SXRlbSA9PiBpc01haWFBZ2VudChhZ2VudEl0ZW0pIHx8IGFnZW50SXRlbS5lbnRpdHkgIT09ICdnbG9iYWwnKSxcbiAgICBbYWdlbnRzLCBpc01haWFBZ2VudF1cbiAgKVxuXG4gIGNvbnN0IHVzZXJQZXJtaXNzaW9ucyA9IHVzZXI/LnBlcm1pc3Npb25zPy5haV9hZ2VudHNcbiAgY29uc3QgY2FuQ3JlYXRlQWdlbnQgPSAhIXVzZXJQZXJtaXNzaW9ucz8uY3JlYXRlICYmICEhd2luZG93Lk1BSUFfQ0hBVF9BSV9GRUFUVVJFX0FDQ0VTU19NVUxUSV9BR0VOVFNcbiAgY29uc3Qgc2hvd0hlYWRlckNyZWF0ZUFnZW50QnV0dG9uID0gY2FuQ3JlYXRlQWdlbnQgJiYgKGlzTXlBZ2VudHNTZWN0aW9uIHx8IGlzTWFpYWtlclNlY3Rpb24pXG5cbiAgY29uc3QgaGFuZGxlT3BlbkNyZWF0ZUFnZW50TW9kYWwgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgYW1wbGl0dWRFdmVudChFVkVOVFMub3Blbk1vZGFsLCB7IG9wdGlvbjogJ2NyZWF0ZV9hZ2VudCcgfSlcbiAgICBkb2N1bWVudC5kaXNwYXRjaEV2ZW50KFxuICAgICAgbmV3IEN1c3RvbUV2ZW50KCdhYm0tYWdlbnQtbW9kYWwtc2V0LXZhbHVlcycsIHtcbiAgICAgICAgZGV0YWlsOiB7XG4gICAgICAgICAgYWdlbnRWYWx1ZXM6IHtcbiAgICAgICAgICAgIHZhbHVlczoge1xuICAgICAgICAgICAgICBpc0VkaXRpbmc6IGZhbHNlLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGlzT3BlbjogdHJ1ZSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfSlcbiAgICApXG4gIH0sIFthbXBsaXR1ZEV2ZW50XSlcblxuICAvLyBNYW5lamFyIHNjcm9sbCBpbmZpbml0byBwYXJhIGNhcmdhciBtw6FzIGFnZW50c1xuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIC8vIFNvbG8gY3VhbmRvIGVsIGRyb3Bkb3duIGVzdMOpIGFiaWVydG9cbiAgICBpZiAoIWlzRXhwYW5kZWQpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWRcbiAgICB9XG5cbiAgICBjb25zdCBoYW5kbGVTY3JvbGwgPSAoKSA9PiB7XG4gICAgICBpZiAoIWFnZW50c1JlZi5jdXJyZW50IHx8ICFsb2FkTW9yZUFnZW50cyB8fCAhaGFzTW9yZSB8fCBsb2FkaW5nTW9yZSkge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgY29uc3QgeyBzY3JvbGxUb3AsIHNjcm9sbEhlaWdodCwgY2xpZW50SGVpZ2h0IH0gPSBhZ2VudHNSZWYuY3VycmVudFxuICAgICAgY29uc3QgZGlzdGFuY2VGcm9tQm90dG9tID0gc2Nyb2xsSGVpZ2h0IC0gc2Nyb2xsVG9wIC0gY2xpZW50SGVpZ2h0XG5cbiAgICAgIC8vIENhcmdhciBtw6FzICg1MHB4IGFudGVzKVxuICAgICAgaWYgKGRpc3RhbmNlRnJvbUJvdHRvbSA8IDUwKSB7XG4gICAgICAgIGxvYWRNb3JlQWdlbnRzKClcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBkZWxheSBwYXJhIGFzZWd1cmFyIHF1ZSBlbCBET00gZXN0w6kgcmVuZGVyaXphZG9cbiAgICBjb25zdCB0aW1lb3V0SWQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGNvbnN0IHNjcm9sbEVsZW1lbnQgPSBhZ2VudHNSZWYuY3VycmVudFxuICAgICAgaWYgKHNjcm9sbEVsZW1lbnQpIHtcbiAgICAgICAgc2Nyb2xsRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdzY3JvbGwnLCBoYW5kbGVTY3JvbGwpXG4gICAgICB9XG4gICAgfSwgMTAwKVxuXG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0SWQpXG4gICAgICBjb25zdCBzY3JvbGxFbGVtZW50ID0gYWdlbnRzUmVmLmN1cnJlbnRcbiAgICAgIGlmIChzY3JvbGxFbGVtZW50KSB7XG4gICAgICAgIHNjcm9sbEVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgaGFuZGxlU2Nyb2xsKVxuICAgICAgfVxuICAgIH1cbiAgfSwgW2lzRXhwYW5kZWQsIGxvYWRNb3JlQWdlbnRzLCBoYXNNb3JlLCBsb2FkaW5nTW9yZV0pXG5cbiAgY29uc3QgbG9jYWxBZ2VudHMgPSB1c2VNZW1vKCgpID0+IHtcbiAgICBpZiAoXG4gICAgICBzZWxlY3RlZEFnZW50Py5pc19kZWxldGVkIHx8XG4gICAgICBzZWxlY3RlZEFnZW50Py5oYXNfbm90X3Blcm1pc3Npb25zIHx8XG4gICAgICBzZWxlY3RlZEFnZW50Py5oYXNfbm90X2FjY2VzcyB8fFxuICAgICAgc2VsZWN0ZWRBZ2VudD8uaXNfZnJvbV9jb252ZXJzYXRpb24gfHxcbiAgICAgIHNlbGVjdGVkQWdlbnQ/LmlzX2xlZ2FjeV9jb250ZXh0XG4gICAgKSB7XG4gICAgICByZXR1cm4gc2VsZWN0ZWRBZ2VudFxuICAgIH1cbiAgICBjb25zdCBmcm9tTGlzdCA9IGFnZW50cy5maW5kKFxuICAgICAgYWdlbnQgPT5cbiAgICAgICAgIWFnZW50LmlzX2RlbGV0ZWQgJiYgIWFnZW50Lmhhc19ub3RfcGVybWlzc2lvbnMgJiYgIWFnZW50Lmhhc19ub3RfYWNjZXNzICYmIGFnZW50LmlkID09PSBzZWxlY3RlZEFnZW50Py5pZFxuICAgIClcbiAgICAvLyBBZ2VudGUgaGlkcmF0YWRvIHBvciBHRVQgKHAuIGVqLiBudWV2byBjaGF0IHRyYXMgY3JlYXRlX2FnZW50KSBwdWVkZSBubyBlc3RhciBhw7puIGVuIGxhIGxpc3RhIHBhZ2luYWRhXG4gICAgcmV0dXJuIGZyb21MaXN0ID8/IHNlbGVjdGVkQWdlbnQgPz8gbnVsbFxuICB9LCBbYWdlbnRzLCBzZWxlY3RlZEFnZW50XSlcblxuICAvLyBFbiAnTWlzIGFnZW50ZXMnIC8gJ1NraWxscycgc2luIGFnZW50ZSBzZXRlYWRvLCBlbCBzZWxlY3RvciBtdWVzdHJhIGVsIGljb25vIGRlIE1BSUEgeSBlbCBub21icmUgZGUgbGEgc2VjY2nDs25cbiAgLy8gZW4gbHVnYXIgZGVsIGFnZW50ZSwgcGFyYSBxdWUgZWwgdXN1YXJpbyBwdWVkYSBhYnJpciBlbCBkcm9wZG93biB5IGVsZWdpciB1bm8uXG4gIGNvbnN0IHNlbGVjdG9ySWNvbiA9XG4gICAgbG9jYWxBZ2VudHM/LnR5cGUgPT09ICdjdXN0b20nICYmICFsb2NhbEFnZW50cz8uaXNfbGVnYWN5X2NvbnRleHQgPyBsb2NhbEFnZW50cz8uZW1vamkgOiA8TUFJQUljb24gLz5cbiAgY29uc3Qgc2VjdGlvblNlbGVjdG9yTGFiZWwgPSBpc015QWdlbnRzU2VjdGlvblxuICAgID8gdCgnbWFya2V0cGxhY2UubXlBZ2VudHNUaXRsZScsIHsgbnM6IFNFQ1RJT05TLmNoYXRBSSB9KVxuICAgIDogaXNNeVNraWxsc1NlY3Rpb25cbiAgICAgID8gdCgnY29udmVyc2F0aW9ucy5teVNraWxsc05hdicsIHsgbnM6IFNFQ1RJT05TLmNoYXRBSSB9KVxuICAgICAgOiAnJ1xuICBjb25zdCBzZWxlY3RvckxhYmVsID0gbG9jYWxBZ2VudHM/Lm5hbWUgPz8gc2VjdGlvblNlbGVjdG9yTGFiZWxcblxuICBjb25zdCBoYW5kbGVTZWxlY3RBZ2VudCA9IHVzZUNhbGxiYWNrKFxuICAgIChhZ2VudDogQWdlbnQpID0+IHtcbiAgICAgIHNlbGVjdEFnZW50KGFnZW50KVxuICAgICAgYW1wbGl0dWRFdmVudChFVkVOVFMuYWlDaGF0QWdlbnRTZWxlY3QsIHtcbiAgICAgICAgYWdlbnRfdHlwZTogYWdlbnQ/LnR5cGUsXG4gICAgICB9KVxuICAgICAgc2V0SXNFeHBhbmRlZChmYWxzZSlcbiAgICAgIHNldFByb2plY3QobnVsbClcbiAgICAgIHNldENsaWVudD8uKG51bGwpXG4gICAgICBzZXRUYXNrKG51bGwpXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgaGFuZGxlUmVzZXRDaGF0KClcbiAgICAgICAgLy8gU2kgZWwgYWdlbnRlIG5vIGRlcGVuZGUgZGUgdW5hIGVudGl0eSAoY3VzdG9tIG8gY2xvbmUrZ2xvYmFsKSB5YSBwb2RlbW9zXG4gICAgICAgIC8vIHJlc29sdmVyIHNpIGV4aXN0ZSB1bmEgc2VzacOzbiBwcmV2aWEgeSwgZW4gZXNlIGNhc28sIG5hdmVnYXIgYSBlbGxhLlxuICAgICAgICAvLyBQYXJhIGNsb25lK3Byb2plY3R8Y2xpZW50LCBsYSByZXNvbHVjacOzbiBvY3VycmUgZW4gbG9zIHNlbGVjdG9ycyBkZSBlbnRpdHkuXG4gICAgICAgIGNvbnN0IG5lZWRzRW50aXR5ID0gYWdlbnQ/LnR5cGUgPT09ICdjbG9uZScgJiYgKGFnZW50Py5lbnRpdHkgPT09ICdwcm9qZWN0JyB8fCBhZ2VudD8uZW50aXR5ID09PSAnY2xpZW50JylcbiAgICAgICAgaWYgKCFuZWVkc0VudGl0eSkge1xuICAgICAgICAgIG9uQWdlbnRTZWxlY3RlZD8uKGFnZW50KVxuICAgICAgICB9XG4gICAgICB9LCAxMDApXG4gICAgfSxcbiAgICBbc2VsZWN0QWdlbnQsIGFtcGxpdHVkRXZlbnQsIGhhbmRsZVJlc2V0Q2hhdCwgc2V0UHJvamVjdCwgc2V0Q2xpZW50LCBzZXRUYXNrLCBvbkFnZW50U2VsZWN0ZWRdXG4gIClcblxuICBjb25zdCBoYW5kbGVFeHBhbmRNb2RhbCA9ICgpID0+IHtcbiAgICBpZiAoIWlzRXhwYW5kZWQpIHtcbiAgICAgIGFtcGxpdHVkRXZlbnQoRVZFTlRTLmFpQ2hhdE9wZW5BZ2VudFNlbGVjdClcbiAgICAgIC8vIEN1YW5kbyBzZSBhYnJlIGVsIHNlbGVjdG9yLCBvcmRlbmFyIGxvcyBhZ2VudGVzXG4gICAgICBpZiAoc29ydEFnZW50c0xpc3QpIHtcbiAgICAgICAgc29ydEFnZW50c0xpc3QoKVxuICAgICAgfVxuICAgIH1cbiAgICBzZXRJc0V4cGFuZGVkKHByZXYgPT4gIXByZXYpXG4gIH1cblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghaXNFeHBhbmRlZCAmJiAhbGF5b3V0TWVudU9wZW4pIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWRcbiAgICB9XG5cbiAgICBjb25zdCBoYW5kbGVDbGlja091dHNpZGUgPSAoZXZlbnQ6IE1vdXNlRXZlbnQpID0+IHtcbiAgICAgIGNvbnN0IHRhcmdldCA9IGV2ZW50LnRhcmdldCBhcyBOb2RlXG4gICAgICBpZiAoaXNFeHBhbmRlZCAmJiBkcm9wZG93blJlZi5jdXJyZW50ICYmICFkcm9wZG93blJlZi5jdXJyZW50LmNvbnRhaW5zKHRhcmdldCkpIHtcbiAgICAgICAgc2V0SXNFeHBhbmRlZChmYWxzZSlcbiAgICAgIH1cbiAgICAgIGlmIChsYXlvdXRNZW51T3BlbiAmJiBsYXlvdXRNZW51UmVmLmN1cnJlbnQgJiYgIWxheW91dE1lbnVSZWYuY3VycmVudC5jb250YWlucyh0YXJnZXQpKSB7XG4gICAgICAgIHNldExheW91dE1lbnVPcGVuKGZhbHNlKVxuICAgICAgfVxuICAgIH1cblxuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsIGhhbmRsZUNsaWNrT3V0c2lkZSlcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duJywgaGFuZGxlQ2xpY2tPdXRzaWRlKVxuICAgIH1cbiAgfSwgW2lzRXhwYW5kZWQsIGxheW91dE1lbnVPcGVuXSlcblxuICBjb25zdCBoYW5kbGVQaWNrTGF5b3V0ID0gdXNlQ2FsbGJhY2soXG4gICAgKG1vZGU6IE1haWFDaGF0TW9kYWxMYXlvdXRNb2RlKSA9PiB7XG4gICAgICBhbXBsaXR1ZEV2ZW50KEVWRU5UUy5wcm9qZWN0UmVzdW1lRXhwYW5kLCB7XG4gICAgICAgIGV4cGFuZGVkOiBtb2RlID09PSAnZnVsbHNjcmVlbicsXG4gICAgICB9KVxuICAgICAgYW1wbGl0dWRFdmVudChFVkVOVFMuYWlDaGF0U2VsZWN0Vmlld09wdGlvbnMsIHsgb3B0aW9uOiBtb2RlIH0pXG4gICAgICBvbkxheW91dE1vZGVDaGFuZ2UobW9kZSlcbiAgICAgIHNldExheW91dE1lbnVPcGVuKGZhbHNlKVxuICAgIH0sXG4gICAgW2FtcGxpdHVkRXZlbnQsIG9uTGF5b3V0TW9kZUNoYW5nZV1cbiAgKVxuXG4gIGNvbnN0IGNsb25lQWdlbnRzUm9sZUJsb2NrZWQgPSBpc01haWFDbG9uZUFnZW50c1JvbGVCbG9ja2VkKHVzZXIsIHNlY3Rpb24pXG5cbiAgY29uc3QgcmVuZGVyTW9kYWwgPSAoKSA9PiB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxTQ0NBSU1IV3JhcHBlclxuICAgICAgICByZWY9e2Ryb3Bkb3duUmVmfVxuICAgICAgICBkYXRhLW5vLWRyYWc9XCJ0cnVlXCJcbiAgICAgICAgb25DbGljaz17YWdlbnRzLmxlbmd0aCA/IGhhbmRsZUV4cGFuZE1vZGFsIDogdW5kZWZpbmVkfVxuICAgICAgICBpZD1cImNoYXQtYWktbW9kYWwtaGVhZGVyLXdyYXBwZXJcIlxuICAgICAgPlxuICAgICAgICA8U0NDQUlNSFNlbGVjdGVkQWdlbnQ+XG4gICAgICAgICAgPFRvb2x0aXBcbiAgICAgICAgICAgIHRpdGxlPXtcbiAgICAgICAgICAgICAgc2hvd1Rvb2x0aXBBZ2VudCA/IChcbiAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT17eyBkaXNwbGF5OiAnZmxleCcsIGFsaWduSXRlbXM6ICdjZW50ZXInLCBnYXA6ICc0cHgnIH19PlxuICAgICAgICAgICAgICAgICAge2xvY2FsQWdlbnRzPy50eXBlID09PSAnY3VzdG9tJyAmJiAhbG9jYWxBZ2VudHM/LmlzX2xlZ2FjeV9jb250ZXh0ID8gKFxuICAgICAgICAgICAgICAgICAgICBsb2NhbEFnZW50cz8uZW1vamlcbiAgICAgICAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgICAgICAgIDxNQUlBSWNvbiAvPlxuICAgICAgICAgICAgICAgICAgKX17JyAnfVxuICAgICAgICAgICAgICAgICAge2xvY2FsQWdlbnRzPy5uYW1lfVxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgICAnJ1xuICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBwbGFjZW1lbnQ9e2lzRXhwYW5kZWQgPyAnbGVmdCcgOiAndG9wJ31cbiAgICAgICAgICAgIHsuLi4odG9vbHRpcFpJbmRleCAhPSBudWxsID8geyB6SW5kZXg6IHRvb2x0aXBaSW5kZXggfSA6IHt9KX1cbiAgICAgICAgICA+XG4gICAgICAgICAgICA8U0NDQUlNSFNlbGVjdGVkQWdlbnRUZXh0XG4gICAgICAgICAgICAgIHJlZj17dGV4dFJlZkFnZW50fVxuICAgICAgICAgICAgICBpc0FnZW50RGVsZXRlZD17XG4gICAgICAgICAgICAgICAgISFzZWxlY3RlZEFnZW50Py5pc19kZWxldGVkIHx8XG4gICAgICAgICAgICAgICAgISFzZWxlY3RlZEFnZW50Py5oYXNfbm90X3Blcm1pc3Npb25zIHx8XG4gICAgICAgICAgICAgICAgISFzZWxlY3RlZEFnZW50Py5oYXNfbm90X2FjY2VzcyB8fFxuICAgICAgICAgICAgICAgICEhc2VsZWN0ZWRBZ2VudD8uaXNfbGVnYWN5X2NvbnRleHRcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8c3BhbiBzdHlsZT17eyBkaXNwbGF5OiAnZmxleCcsIGFsaWduSXRlbXM6ICdjZW50ZXInLCBnYXA6ICc0cHgnIH19PlxuICAgICAgICAgICAgICAgIHtzZWxlY3Rvckljb259IHtzZWxlY3RvckxhYmVsfVxuICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICA8L1NDQ0FJTUhTZWxlY3RlZEFnZW50VGV4dD5cbiAgICAgICAgICA8L1Rvb2x0aXA+XG4gICAgICAgIDwvU0NDQUlNSFNlbGVjdGVkQWdlbnQ+XG4gICAgICAgIDxTQ0NBSU1IV3JhcHBlckljb24+XG4gICAgICAgICAgPENoZXZyb25Eb3duIHdpZHRoPXsxNH0gaGVpZ2h0PXsxNH0gY29sb3I9XCIjMjAyMDFGXCIgLz5cbiAgICAgICAgPC9TQ0NBSU1IV3JhcHBlckljb24+XG4gICAgICAgIHtpc0V4cGFuZGVkICYmIChcbiAgICAgICAgICA8U0NDQUlNSFdyYXBwZXJNb2RhbD5cbiAgICAgICAgICAgIDxTQ0NBSU1IV3JhcHBlck1vZGFsQ29udGVudD5cbiAgICAgICAgICAgICAge3dpbmRvdy5NQUlBX0NIQVRfQUlfRkVBVFVSRV9BQ0NFU1MgJiYgIWNsb25lQWdlbnRzUm9sZUJsb2NrZWQgJiYgKFxuICAgICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgICB7KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbWFpYUFnZW50cyA9IGFnZW50c0ZvclNlbGVjdG9yLmZpbHRlcihpc01haWFBZ2VudClcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFtYWlhQWdlbnRzLmxlbmd0aCkgcmV0dXJuIG51bGxcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICAgICAgICAge21haWFBZ2VudHMubWFwKChtYWlhQWdlbnQsIGluZGV4KSA9PiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxDaGF0QUlBZ2VudE9wdGlvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleT17YGFnZW50LSR7bWFpYUFnZW50LmlkfWB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWdlbnQ9e21haWFBZ2VudH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleD17aW5kZXh9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlU2VsZWN0QWdlbnQ9e2hhbmRsZVNlbGVjdEFnZW50fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzU2VsZWN0ZWQ9e3NlbGVjdGVkQWdlbnQ/LmlkID09PSBtYWlhQWdlbnQuaWR9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNNYWlhXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb25GYXZvcml0ZVRvZ2dsZT17b25BZ2VudFVwZGF0ZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICkpfVxuICAgICAgICAgICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICB9KSgpfVxuICAgICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICB7YWdlbnRzRm9yU2VsZWN0b3Iuc29tZShhZ2VudCA9PiBhZ2VudC50eXBlID09PSAnY3VzdG9tJykgJiZcbiAgICAgICAgICAgICAgICB3aW5kb3cuTUFJQV9DSEFUX0FJX0ZFQVRVUkVfQUNDRVNTX01VTFRJX0FHRU5UUyAmJiAoXG4gICAgICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICAgICA8U0NDQUlNSFdyYXBwZXJNb2RhbENvbnRlbnRUaXRsZT5cbiAgICAgICAgICAgICAgICAgICAgICB7dCgnYWdlbnRzJyl9IGJ5IHt1c2VyLmNvbXBhbnl9XG4gICAgICAgICAgICAgICAgICAgIDwvU0NDQUlNSFdyYXBwZXJNb2RhbENvbnRlbnRUaXRsZT5cbiAgICAgICAgICAgICAgICAgICAgPFNDQ0FJTUhEaXZpZGVyIC8+XG4gICAgICAgICAgICAgICAgICA8Lz5cbiAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICA8U0NDQUlNSEFnZW50c0xpc3QgaGFzTW9yZT17aGFzTW9yZX0gYWdlbnRzQ291bnQ9e2FnZW50c0ZvclNlbGVjdG9yLmxlbmd0aH0gcmVmPXthZ2VudHNSZWZ9PlxuICAgICAgICAgICAgICAgIHthZ2VudHNGb3JTZWxlY3Rvcj8ubWFwKChhZ2VudCwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgYWdlbnQ/LmlzX2RlbGV0ZWQgfHxcbiAgICAgICAgICAgICAgICAgICAgYWdlbnQ/Lmhhc19ub3RfcGVybWlzc2lvbnMgfHxcbiAgICAgICAgICAgICAgICAgICAgYWdlbnQ/Lmhhc19ub3RfYWNjZXNzIHx8XG4gICAgICAgICAgICAgICAgICAgIGFnZW50Py50eXBlID09PSAnY2xvbmUnIHx8XG4gICAgICAgICAgICAgICAgICAgIGlzTWFpYUFnZW50KGFnZW50KSB8fFxuICAgICAgICAgICAgICAgICAgICAoYWdlbnQ/LnR5cGUgPT09ICdjdXN0b20nICYmICF3aW5kb3cuTUFJQV9DSEFUX0FJX0ZFQVRVUkVfQUNDRVNTX01VTFRJX0FHRU5UUylcbiAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxcbiAgICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgIDxDaGF0QUlBZ2VudE9wdGlvblxuICAgICAgICAgICAgICAgICAgICAgIGtleT17YGFnZW50LSR7YWdlbnQuaWR9YH1cbiAgICAgICAgICAgICAgICAgICAgICBhZ2VudD17YWdlbnR9XG4gICAgICAgICAgICAgICAgICAgICAgaW5kZXg9e2luZGV4fVxuICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZVNlbGVjdEFnZW50PXtoYW5kbGVTZWxlY3RBZ2VudH1cbiAgICAgICAgICAgICAgICAgICAgICBpc1NlbGVjdGVkPXtzZWxlY3RlZEFnZW50Py5pZCA9PT0gYWdlbnQuaWR9XG4gICAgICAgICAgICAgICAgICAgICAgb25GYXZvcml0ZVRvZ2dsZT17b25BZ2VudFVwZGF0ZX1cbiAgICAgICAgICAgICAgICAgICAgICBzZXRJc0V4cGFuZGVkPXtzZXRJc0V4cGFuZGVkfVxuICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIH0pfVxuICAgICAgICAgICAgICAgIHtsb2FkaW5nTW9yZSAmJiAoXG4gICAgICAgICAgICAgICAgICA8U0NDQUlNSExvYWRlcldyYXBwZXI+XG4gICAgICAgICAgICAgICAgICAgIDxMb2FkZXIgc2l6ZT1cInNtYWxsXCIgLz5cbiAgICAgICAgICAgICAgICAgIDwvU0NDQUlNSExvYWRlcldyYXBwZXI+XG4gICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgPC9TQ0NBSU1IQWdlbnRzTGlzdD5cbiAgICAgICAgICAgICAge3VzZXJQZXJtaXNzaW9ucz8uY3JlYXRlICYmXG4gICAgICAgICAgICAgICAgd2luZG93Lk1BSUFfQ0hBVF9BSV9GRUFUVVJFX0FDQ0VTU19NVUxUSV9BR0VOVFMgJiZcbiAgICAgICAgICAgICAgICAhaXNNeUFnZW50c1NlY3Rpb24gJiZcbiAgICAgICAgICAgICAgICAhaXNNeVNraWxsc1NlY3Rpb24gJiZcbiAgICAgICAgICAgICAgICAhaXNNYWlha2VyU2VjdGlvbiAmJiAoXG4gICAgICAgICAgICAgICAgICA8U0NDQUlNSEFkZEFnZW50XG4gICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICBzZXRJc0V4cGFuZGVkKGZhbHNlKVxuICAgICAgICAgICAgICAgICAgICAgIGFtcGxpdHVkRXZlbnQoRVZFTlRTLm9wZW5Nb2RhbCwgeyBvcHRpb246ICdjcmVhdGVfYWdlbnQnIH0pXG4gICAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuZGlzcGF0Y2hFdmVudChcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBDdXN0b21FdmVudCgnYWJtLWFnZW50LW1vZGFsLXNldC12YWx1ZXMnLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGRldGFpbDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFnZW50VmFsdWVzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNFZGl0aW5nOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc09wZW46IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8U0NDQUlNSFBsdXNJY29uV3JhcHBlcj5cbiAgICAgICAgICAgICAgICAgICAgICA8UGx1cyBjb2xvcj1cIndoaXRlXCIgd2lkdGg9ezE4fSBoZWlnaHQ9ezE4fSAvPlxuICAgICAgICAgICAgICAgICAgICA8L1NDQ0FJTUhQbHVzSWNvbldyYXBwZXI+XG4gICAgICAgICAgICAgICAgICAgIHt0KCdjcmVhdGVBZ2VudCcpfVxuICAgICAgICAgICAgICAgICAgPC9TQ0NBSU1IQWRkQWdlbnQ+XG4gICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIDwvU0NDQUlNSFdyYXBwZXJNb2RhbENvbnRlbnQ+XG4gICAgICAgICAgPC9TQ0NBSU1IV3JhcHBlck1vZGFsPlxuICAgICAgICApfVxuICAgICAgPC9TQ0NBSU1IV3JhcHBlcj5cbiAgICApXG4gIH1cblxuICBjb25zdCBzaG91bGRSZW5kZXJTZWxlY3RvciA9XG4gICAgIWhhc0Vycm9yICYmXG4gICAgIWxvYWRpbmcgJiZcbiAgICAhaGlkZUFnZW50U2VsZWN0b3IgJiZcbiAgICAoISFzZWxlY3RlZEFnZW50IHx8IGlzTXlBZ2VudHNTZWN0aW9uIHx8IGlzTXlTa2lsbHNTZWN0aW9uKSAmJlxuICAgICghIXdpbmRvdy5NQUlBX0NIQVRfQUlfRkVBVFVSRV9BQ0NFU1NfTVVMVElfQUdFTlRTIHx8ICEhd2luZG93Lk1BSUFfQ0hBVF9BSV9GRUFUVVJFX0FDQ0VTUylcblxuICByZXR1cm4gKFxuICAgIDxTQ0NBSU1ITW9kYWxcbiAgICAgICRoYXNFcnJvcj17aGFzRXJyb3J9XG4gICAgICAkbG9hZGluZz17bG9hZGluZ31cbiAgICAgICRoYXNBZ2VudHM9eyEhYWdlbnRzLmxlbmd0aH1cbiAgICAgIG9uUG9pbnRlckRvd249e2RyYWdnYWJsZSA/IG9uRHJhZ1N0YXJ0IDogdW5kZWZpbmVkfVxuICAgICAgb25Qb2ludGVyTW92ZT17ZHJhZ2dhYmxlID8gb25EcmFnTW92ZSA6IHVuZGVmaW5lZH1cbiAgICAgIG9uUG9pbnRlclVwPXtkcmFnZ2FibGUgPyBvbkRyYWdFbmQgOiB1bmRlZmluZWR9XG4gICAgICBvblBvaW50ZXJDYW5jZWw9e2RyYWdnYWJsZSA/IG9uRHJhZ0VuZCA6IHVuZGVmaW5lZH1cbiAgICAgIG9uTG9zdFBvaW50ZXJDYXB0dXJlPXtkcmFnZ2FibGUgPyBvbkRyYWdFbmQgOiB1bmRlZmluZWR9XG4gICAgICBzdHlsZT17eyBjdXJzb3I6IGRyYWdnYWJsZSA/ICdncmFiJyA6IHVuZGVmaW5lZCwgdG91Y2hBY3Rpb246IGRyYWdnYWJsZSA/ICdtYW5pcHVsYXRpb24nIDogdW5kZWZpbmVkIH19XG4gICAgPlxuICAgICAge3Nob3VsZFJlbmRlclNlbGVjdG9yID8gcmVuZGVyTW9kYWwoKSA6IDxkaXYgLz59XG4gICAgICA8U0NDQUlNSFdyYXBwZXJCdXR0b24gZGF0YS1uby1kcmFnPVwidHJ1ZVwiPlxuICAgICAgICB7c2hvd0JhY2tCdXR0b24gJiYgKFxuICAgICAgICAgIDxTQ0NBSU1IQmFja0J1dHRvblxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XG4gICAgICAgICAgICAgIG9uQmFjaygpXG4gICAgICAgICAgICB9fVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxDaGV2cm9uTGVmdCB3aWR0aD17MTR9IGhlaWdodD17MTR9IGNvbG9yPVwiIzM0MzQzM1wiIC8+XG4gICAgICAgICAgICB7dCgnYmFjaycpfVxuICAgICAgICAgIDwvU0NDQUlNSEJhY2tCdXR0b24+XG4gICAgICAgICl9XG4gICAgICAgIHtzaG93SGVhZGVyQ3JlYXRlQWdlbnRCdXR0b24gJiYgKFxuICAgICAgICAgIDxTQ0NBSU1IQ3JlYXRlQWdlbnRCdXR0b24gdHlwZT1cImJ1dHRvblwiIG9uQ2xpY2s9e2hhbmRsZU9wZW5DcmVhdGVBZ2VudE1vZGFsfT5cbiAgICAgICAgICAgIDxTQ0NBSU1IQ3JlYXRlQWdlbnRCdXR0b25UZXh0Pnt0KCdvcGVuQWdlbnRDcmVhdG9yJyl9PC9TQ0NBSU1IQ3JlYXRlQWdlbnRCdXR0b25UZXh0PlxuICAgICAgICAgIDwvU0NDQUlNSENyZWF0ZUFnZW50QnV0dG9uPlxuICAgICAgICApfVxuICAgICAgICA8U0NDQUlNSExheW91dE1lbnVBbmNob3IgcmVmPXtsYXlvdXRNZW51UmVmfSBkYXRhLW5vLWRyYWc9XCJ0cnVlXCI+XG4gICAgICAgICAgPEljb25CdXR0b25cbiAgICAgICAgICAgIGJ1dHRvbklkPVwiYnRuLW1haWEtbGF5b3V0LW1lbnVcIlxuICAgICAgICAgICAgaGFuZGxlQ2xpY2s9eygpID0+IHtcbiAgICAgICAgICAgICAgaWYgKCFsYXlvdXRNZW51T3Blbikge1xuICAgICAgICAgICAgICAgIGFtcGxpdHVkRXZlbnQoRVZFTlRTLmFpQ2hhdE9wZW5WaWV3T3B0aW9ucylcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBzZXRMYXlvdXRNZW51T3BlbihwcmV2ID0+ICFwcmV2KVxuICAgICAgICAgICAgfX1cbiAgICAgICAgICAgIHRvb2x0aXA9e3QoJ2xheW91dE1lbnVUb29sdGlwJyl9XG4gICAgICAgICAgICBkaXNhYmxlVG9vbHRpcD17bGF5b3V0TWVudU9wZW59XG4gICAgICAgICAgICB0b29sdGlwWkluZGV4PXt0b29sdGlwWkluZGV4fVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxNYWlhQ2hhdExheW91dE1lbnVJY29uIC8+XG4gICAgICAgICAgPC9JY29uQnV0dG9uPlxuICAgICAgICAgIHtsYXlvdXRNZW51T3BlbiA/IChcbiAgICAgICAgICAgIDxTQ0NBSU1ITGF5b3V0TWVudVBhbmVsIHJvbGU9XCJtZW51XCI+XG4gICAgICAgICAgICAgIDxTQ0NBSU1ITGF5b3V0TWVudVJvd1xuICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICRhY3RpdmU9e2xheW91dE1vZGUgPT09ICdzaWRlYmFyJ31cbiAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBoYW5kbGVQaWNrTGF5b3V0KCdzaWRlYmFyJyl9XG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8U0NDQUlNSExheW91dE1lbnVSb3dJY29uIGFyaWEtaGlkZGVuPlxuICAgICAgICAgICAgICAgICAgPE1haWFDaGF0TGF5b3V0U2lkZWJhckljb24gLz5cbiAgICAgICAgICAgICAgICA8L1NDQ0FJTUhMYXlvdXRNZW51Um93SWNvbj5cbiAgICAgICAgICAgICAgICB7dCgnbGF5b3V0U2lkZWJhcicpfVxuICAgICAgICAgICAgICA8L1NDQ0FJTUhMYXlvdXRNZW51Um93PlxuICAgICAgICAgICAgICA8U0NDQUlNSExheW91dE1lbnVSb3dcbiAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAkYWN0aXZlPXtsYXlvdXRNb2RlID09PSAnZnVsbHNjcmVlbid9XG4gICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gaGFuZGxlUGlja0xheW91dCgnZnVsbHNjcmVlbicpfVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPFNDQ0FJTUhMYXlvdXRNZW51Um93SWNvbiBhcmlhLWhpZGRlbj5cbiAgICAgICAgICAgICAgICAgIDxNYWlhQ2hhdExheW91dEZ1bGxzY3JlZW5JY29uIC8+XG4gICAgICAgICAgICAgICAgPC9TQ0NBSU1ITGF5b3V0TWVudVJvd0ljb24+XG4gICAgICAgICAgICAgICAge3QoJ2xheW91dEZ1bGxzY3JlZW4nKX1cbiAgICAgICAgICAgICAgPC9TQ0NBSU1ITGF5b3V0TWVudVJvdz5cbiAgICAgICAgICAgICAgPFNDQ0FJTUhMYXlvdXRNZW51Um93XG4gICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgJGFjdGl2ZT17bGF5b3V0TW9kZSA9PT0gJ2Zsb2F0aW5nJ31cbiAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBoYW5kbGVQaWNrTGF5b3V0KCdmbG9hdGluZycpfVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPFNDQ0FJTUhMYXlvdXRNZW51Um93SWNvbiBhcmlhLWhpZGRlbj5cbiAgICAgICAgICAgICAgICAgIDxNYWlhQ2hhdExheW91dEZsb2F0aW5nSWNvbiAvPlxuICAgICAgICAgICAgICAgIDwvU0NDQUlNSExheW91dE1lbnVSb3dJY29uPlxuICAgICAgICAgICAgICAgIHt0KCdsYXlvdXRGbG9hdGluZycpfVxuICAgICAgICAgICAgICA8L1NDQ0FJTUhMYXlvdXRNZW51Um93PlxuICAgICAgICAgICAgPC9TQ0NBSU1ITGF5b3V0TWVudVBhbmVsPlxuICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICA8L1NDQ0FJTUhMYXlvdXRNZW51QW5jaG9yPlxuICAgICAgICB7aGFuZGxlTWluaW1pemUgPyAoXG4gICAgICAgICAgPEljb25CdXR0b24gaGFuZGxlQ2xpY2s9e2hhbmRsZU1pbmltaXplfSB0b29sdGlwPXt0KCdnbG9iYWxzLm1pbmltaXplJyl9IHRvb2x0aXBaSW5kZXg9e3Rvb2x0aXBaSW5kZXh9PlxuICAgICAgICAgICAgPFNDQ0FJTUhNaW5pbWl6ZUljb24+XG4gICAgICAgICAgICAgIDxTdGF0dXMgd2lkdGg9ezI0fSBoZWlnaHQ9ezI0fSAvPlxuICAgICAgICAgICAgPC9TQ0NBSU1ITWluaW1pemVJY29uPlxuICAgICAgICAgIDwvSWNvbkJ1dHRvbj5cbiAgICAgICAgKSA6IG51bGx9XG4gICAgICA8L1NDQ0FJTUhXcmFwcGVyQnV0dG9uPlxuICAgIDwvU0NDQUlNSE1vZGFsPlxuICApXG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7QUFBQTtBQUNBO0FBQ0EsU0FBU0EsU0FBUyxFQUFFQyxNQUFNLEVBQUVDLFFBQVEsRUFBRUMsV0FBVyxFQUFFQyxPQUFPLFFBQTJDLE9BQU87QUFDNUcsU0FBU0MsT0FBTyxRQUFRLDhDQUE4QztBQUN0RSxTQUFTQyxNQUFNLFFBQVEseUNBQXlDO0FBQ2hFLFNBQVNDLFdBQVcsUUFBUSw4Q0FBOEM7QUFDMUUsU0FBU0MsV0FBVyxRQUFRLDhDQUE4QztBQUMxRSxTQUFTQyxJQUFJLFFBQVEsdUNBQXVDO0FBQzVELFNBQVNDLGNBQWMsUUFBUSxlQUFlO0FBQzlDLFNBQVNDLFFBQVEsUUFBUSxpQ0FBaUM7QUFDMUQsU0FBU0MsZ0JBQWdCLFFBQVEsdUNBQXVDO0FBQ3hFLFNBQVNDLGlCQUFpQixRQUFRLGdDQUFnQztBQUNsRSxTQUFTQyxVQUFVLFFBQVEsOEJBQThCO0FBQ3pELFNBQVNDLFFBQVEsRUFBRUMsc0JBQXNCLFFBQVEseUJBQXlCO0FBQzFF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
457
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ1c2VFZmZlY3QiLCJ1c2VSZWYiLCJ1c2VTdGF0ZSIsInVzZUNhbGxiYWNrIiwidXNlTWVtbyIsIlRvb2x0aXAiLCJTdGF0dXMiLCJDaGV2cm9uRG93biIsIkNoZXZyb25MZWZ0IiwiUGx1cyIsInVzZVRyYW5zbGF0aW9uIiwiU0VDVElPTlMiLCJ1c2VHbG9iYWxDb250ZXh0IiwidXNlUmVzaXplTGlzdGVuZXIiLCJJY29uQnV0dG9uIiwiTUFJQUljb24iLCJNYWlhQ2hhdExheW91dE1lbnVJY29uIiwiTWFpYUNoYXRMYXlvdXRTaWRlYmFySWNvbiIsIk1haWFDaGF0TGF5b3V0RnVsbHNjcmVlbkljb24iLCJNYWlhQ2hhdExheW91dEZsb2F0aW5nSWNvbiIsIkNoYXRBSUFnZW50T3B0aW9uIiwiU0NDQUlNSE1vZGFsIiwiU0NDQUlNSFNlbGVjdGVkQWdlbnQiLCJTQ0NBSU1IU2VsZWN0ZWRBZ2VudFRleHQiLCJTQ0NBSU1IV3JhcHBlciIsIlNDQ0FJTUhXcmFwcGVyQnV0dG9uIiwiU0NDQUlNSFdyYXBwZXJJY29uIiwiU0NDQUlNSFdyYXBwZXJNb2RhbCIsIlNDQ0FJTUhXcmFwcGVyTW9kYWxDb250ZW50IiwiU0NDQUlNSFdyYXBwZXJNb2RhbENvbnRlbnRUaXRsZSIsIlNDQ0FJTUhBZGRBZ2VudCIsIlNDQ0FJTUhDcmVhdGVBZ2VudEJ1dHRvbiIsIlNDQ0FJTUhDcmVhdGVBZ2VudEJ1dHRvblRleHQiLCJTQ0NBSU1IRGl2aWRlciIsIlNDQ0FJTUhBZ2VudHNMaXN0IiwiU0NDQUlNSExvYWRlcldyYXBwZXIiLCJTQ0NBSU1IUGx1c0ljb25XcmFwcGVyIiwiU0NDQUlNSExheW91dE1lbnVBbmNob3IiLCJTQ0NBSU1ITGF5b3V0TWVudVBhbmVsIiwiU0NDQUlNSExheW91dE1lbnVSb3ciLCJTQ0NBSU1ITGF5b3V0TWVudVJvd0ljb24iLCJTQ0NBSU1IQmFja0J1dHRvbiIsIlNDQ0FJTUhNaW5pbWl6ZUljb24iLCJFVkVOVFMiLCJ1c2VFdmVudCIsInVzZVVzZXIiLCJpc01haWFDbG9uZUFnZW50c1JvbGVCbG9ja2VkIiwiTG9hZGVyIiwidXNlTWFpYVRhc2tQYW5lbFpJbmRleCIsImpzeCIsIl9qc3giLCJqc3hzIiwiX2pzeHMiLCJGcmFnbWVudCIsIl9GcmFnbWVudCIsIkNoYXRBSU1vZGFsSGVhZGVyIiwiX3JlZiIsIl91c2VyJHBlcm1pc3Npb25zIiwiX2xvY2FsQWdlbnRzJG5hbWUiLCJsYXlvdXRNb2RlIiwib25MYXlvdXRNb2RlQ2hhbmdlIiwiX3JlZiRkcmFnZ2FibGUiLCJkcmFnZ2FibGUiLCJvbkRyYWdTdGFydCIsIm9uRHJhZ01vdmUiLCJvbkRyYWdFbmQiLCJoYW5kbGVNaW5pbWl6ZSIsIl9yZWYkYWdlbnRzIiwiYWdlbnRzIiwiX3JlZiRoYXNFcnJvciIsImhhc0Vycm9yIiwiX3JlZiRsb2FkaW5nIiwibG9hZGluZyIsIl9yZWYkbG9hZGluZ01vcmUiLCJsb2FkaW5nTW9yZSIsIl9yZWYkaGFzTW9yZSIsImhhc01vcmUiLCJoYW5kbGVSZXNldENoYXQiLCJvbkFnZW50VXBkYXRlIiwibG9hZE1vcmVBZ2VudHMiLCJzb3J0QWdlbnRzTGlzdCIsIl9yZWYkaXNNeUFnZW50c1NlY3RpbyIsImlzTXlBZ2VudHNTZWN0aW9uIiwiX3JlZiRpc015U2tpbGxzU2VjdGlvIiwiaXNNeVNraWxsc1NlY3Rpb24iLCJfcmVmJGlzTWFpYWtlclNlY3Rpb24iLCJpc01haWFrZXJTZWN0aW9uIiwiX3JlZiRoaWRlQWdlbnRTZWxlY3RvIiwiaGlkZUFnZW50U2VsZWN0b3IiLCJfcmVmJGhpZGVDb250cm9scyIsImhpZGVDb250cm9scyIsIm9uQWdlbnRTZWxlY3RlZCIsIl9yZWYkc2hvd0JhY2tCdXR0b24iLCJzaG93QmFja0J1dHRvbiIsIl9yZWYkb25CYWNrIiwib25CYWNrIiwiX3VzZVRyYW5zbGF0aW9uIiwiYWJtQWdlbnQiLCJjaGF0QUkiLCJ0IiwidXNlciIsImFtcGxpdHVkRXZlbnQiLCJfdXNlR2xvYmFsQ29udGV4dCIsInNlbGVjdGVkQWdlbnQiLCJhZ2VudCIsInNlbGVjdEFnZW50Iiwic2V0UHJvamVjdCIsInNldENsaWVudCIsInNldFRhc2siLCJzZWN0aW9uIiwidG9vbHRpcFpJbmRleCIsIl91c2VTdGF0ZSIsIl91c2VTdGF0ZTIiLCJfc2xpY2VkVG9BcnJheSIsImlzRXhwYW5kZWQiLCJzZXRJc0V4cGFuZGVkIiwidGV4dFJlZkFnZW50IiwiZHJvcGRvd25SZWYiLCJsYXlvdXRNZW51UmVmIiwiX3VzZVN0YXRlMyIsIl91c2VTdGF0ZTQiLCJsYXlvdXRNZW51T3BlbiIsInNldExheW91dE1lbnVPcGVuIiwiX3VzZVJlc2l6ZUxpc3RlbmVyIiwibmFtZSIsInNob3dUb29sdGlwQWdlbnQiLCJzaG93VG9vbHRpcCIsImFnZW50c1JlZiIsImlzTWFpYUFnZW50IiwiYWdlbnRJdGVtIiwidHlwZSIsImFnZW50c0ZvclNlbGVjdG9yIiwiZmlsdGVyIiwiZW50aXR5IiwidXNlclBlcm1pc3Npb25zIiwicGVybWlzc2lvbnMiLCJhaV9hZ2VudHMiLCJjYW5DcmVhdGVBZ2VudCIsImNyZWF0ZSIsIndpbmRvdyIsIk1BSUFfQ0hBVF9BSV9GRUFUVVJFX0FDQ0VTU19NVUxUSV9BR0VOVFMiLCJzaG93SGVhZGVyQ3JlYXRlQWdlbnRCdXR0b24iLCJoYW5kbGVPcGVuQ3JlYXRlQWdlbnRNb2RhbCIsIm9wZW5Nb2RhbCIsIm9wdGlvbiIsImRvY3VtZW50IiwiZGlzcGF0Y2hFdmVudCIsIkN1c3RvbUV2ZW50IiwiZGV0YWlsIiwiYWdlbnRWYWx1ZXMiLCJ2YWx1ZXMiLCJpc0VkaXRpbmciLCJpc09wZW4iLCJ1bmRlZmluZWQiLCJoYW5kbGVTY3JvbGwiLCJjdXJyZW50IiwiX2FnZW50c1JlZiRjdXJyZW50Iiwic2Nyb2xsVG9wIiwic2Nyb2xsSGVpZ2h0IiwiY2xpZW50SGVpZ2h0IiwiZGlzdGFuY2VGcm9tQm90dG9tIiwidGltZW91dElkIiwic2V0VGltZW91dCIsInNjcm9sbEVsZW1lbnQiLCJhZGRFdmVudExpc3RlbmVyIiwiY2xlYXJUaW1lb3V0IiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsImxvY2FsQWdlbnRzIiwiX3JlZjIiLCJpc19kZWxldGVkIiwiaGFzX25vdF9wZXJtaXNzaW9ucyIsImhhc19ub3RfYWNjZXNzIiwiaXNfZnJvbV9jb252ZXJzYXRpb24iLCJpc19sZWdhY3lfY29udGV4dCIsImZyb21MaXN0IiwiZmluZCIsImlkIiwic2VsZWN0b3JJY29uIiwiZW1vamkiLCJzZWN0aW9uU2VsZWN0b3JMYWJlbCIsIm5zIiwic2VsZWN0b3JMYWJlbCIsImhhbmRsZVNlbGVjdEFnZW50IiwiYWlDaGF0QWdlbnRTZWxlY3QiLCJhZ2VudF90eXBlIiwibmVlZHNFbnRpdHkiLCJoYW5kbGVFeHBhbmRNb2RhbCIsImFpQ2hhdE9wZW5BZ2VudFNlbGVjdCIsInByZXYiLCJoYW5kbGVDbGlja091dHNpZGUiLCJldmVudCIsInRhcmdldCIsImNvbnRhaW5zIiwiaGFuZGxlUGlja0xheW91dCIsIm1vZGUiLCJwcm9qZWN0UmVzdW1lRXhwYW5kIiwiZXhwYW5kZWQiLCJhaUNoYXRTZWxlY3RWaWV3T3B0aW9ucyIsImNsb25lQWdlbnRzUm9sZUJsb2NrZWQiLCJyZW5kZXJNb2RhbCIsInJlZiIsIm9uQ2xpY2siLCJsZW5ndGgiLCJjaGlsZHJlbiIsIl9vYmplY3RTcHJlYWQiLCJ0aXRsZSIsInN0eWxlIiwiZGlzcGxheSIsImFsaWduSXRlbXMiLCJnYXAiLCJwbGFjZW1lbnQiLCJ6SW5kZXgiLCJpc0FnZW50RGVsZXRlZCIsIndpZHRoIiwiaGVpZ2h0IiwiY29sb3IiLCJNQUlBX0NIQVRfQUlfRkVBVFVSRV9BQ0NFU1MiLCJtYWlhQWdlbnRzIiwibWFwIiwibWFpYUFnZW50IiwiaW5kZXgiLCJpc1NlbGVjdGVkIiwiaXNNYWlhIiwib25GYXZvcml0ZVRvZ2dsZSIsImNvbmNhdCIsInNvbWUiLCJjb21wYW55IiwiYWdlbnRzQ291bnQiLCJzaXplIiwic2hvdWxkUmVuZGVyU2VsZWN0b3IiLCIkaGFzRXJyb3IiLCIkbG9hZGluZyIsIiRoYXNBZ2VudHMiLCJvblBvaW50ZXJEb3duIiwib25Qb2ludGVyTW92ZSIsIm9uUG9pbnRlclVwIiwib25Qb2ludGVyQ2FuY2VsIiwib25Mb3N0UG9pbnRlckNhcHR1cmUiLCJjdXJzb3IiLCJ0b3VjaEFjdGlvbiIsImJ1dHRvbklkIiwiaGFuZGxlQ2xpY2siLCJhaUNoYXRPcGVuVmlld09wdGlvbnMiLCJ0b29sdGlwIiwiZGlzYWJsZVRvb2x0aXAiLCJyb2xlIiwiJGFjdGl2ZSJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL21vbGVjdWxlcy9DaGF0QUlNb2RhbC9jb21wb25lbnRzL0NoYXRBaU1vZGFsSGVhZGVyL0NoYXRBaU1vZGFsSGVhZGVyLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvaW5kZW50ICovXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1uZXN0ZWQtdGVybmFyeSAqL1xuaW1wb3J0IHsgdXNlRWZmZWN0LCB1c2VSZWYsIHVzZVN0YXRlLCB1c2VDYWxsYmFjaywgdXNlTWVtbywgUG9pbnRlckV2ZW50IGFzIFJlYWN0UG9pbnRlckV2ZW50IH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBUb29sdGlwIH0gZnJvbSAnQHByb2plY3Rjb3IvdG9vbHRpcHYyL2xpYi9jb21wb25lbnRzL1Rvb2x0aXAnXG5pbXBvcnQgeyBTdGF0dXMgfSBmcm9tICdAcHJvamVjdGNvci9pY29ucy9saWIvY29tcG9uZW50cy9TdGF0dXMnXG5pbXBvcnQgeyBDaGV2cm9uRG93biB9IGZyb20gJ0Bwcm9qZWN0Y29yL2ljb25zL2xpYi9jb21wb25lbnRzL0NoZXZyb25Eb3duJ1xuaW1wb3J0IHsgQ2hldnJvbkxlZnQgfSBmcm9tICdAcHJvamVjdGNvci9pY29ucy9saWIvY29tcG9uZW50cy9DaGV2cm9uTGVmdCdcbmltcG9ydCB7IFBsdXMgfSBmcm9tICdAcHJvamVjdGNvci9pY29ucy9saWIvY29tcG9uZW50cy9QbHVzJ1xuaW1wb3J0IHsgdXNlVHJhbnNsYXRpb24gfSBmcm9tICdyZWFjdC1pMThuZXh0J1xuaW1wb3J0IHsgU0VDVElPTlMgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi9jb25zdGFudHMvY29uZmlnJ1xuaW1wb3J0IHsgdXNlR2xvYmFsQ29udGV4dCB9IGZyb20gJy4uLy4uLy4uLy4uLy4uL2NvbnRleHQvZ2xvYmFsLWNvbnRleHQnXG5pbXBvcnQgeyB1c2VSZXNpemVMaXN0ZW5lciB9IGZyb20gJy4uLy4uLy4uLy4uLy4uL2hvb2tzL3VzZVJlc2l6ZSdcbmltcG9ydCB7IEljb25CdXR0b24gfSBmcm9tICcuLi8uLi8uLi8uLi9hdG9tcy9JY29uQnV0dG9uJ1xuaW1wb3J0IHsgTUFJQUljb24sIE1haWFDaGF0TGF5b3V0TWVudUljb24gfSBmcm9tICcuLi8uLi8uLi8uLi9hdG9tcy9pY29ucydcbmltcG9ydCB7IE1haWFDaGF0TGF5b3V0U2lkZWJhckljb24gfSBmcm9tICcuLi8uLi8uLi8uLi9hdG9tcy9pY29ucy9NYWlhQ2hhdExheW91dFNpZGViYXJJY29uJ1xuaW1wb3J0IHsgTWFpYUNoYXRMYXlvdXRGdWxsc2NyZWVuSWNvbiB9IGZyb20gJy4uLy4uLy4uLy4uL2F0b21zL2ljb25zL01haWFDaGF0TGF5b3V0RnVsbHNjcmVlbkljb24nXG5pbXBvcnQgeyBNYWlhQ2hhdExheW91dEZsb2F0aW5nSWNvbiB9IGZyb20gJy4uLy4uLy4uLy4uL2F0b21zL2ljb25zL01haWFDaGF0TGF5b3V0RmxvYXRpbmdJY29uJ1xuaW1wb3J0IHsgQ2hhdEFJQWdlbnRPcHRpb24gfSBmcm9tICcuLi9DaGF0QWlBZ2VudE9wdGlvbnMvQ2hhdEFpQWdlbnRPcHRpb25zJ1xuaW1wb3J0IHtcbiAgU0NDQUlNSE1vZGFsLFxuICBTQ0NBSU1IU2VsZWN0ZWRBZ2VudCxcbiAgU0NDQUlNSFNlbGVjdGVkQWdlbnRUZXh0LFxuICBTQ0NBSU1IV3JhcHBlcixcbiAgU0NDQUlNSFdyYXBwZXJCdXR0b24sXG4gIFNDQ0FJTUhXcmFwcGVySWNvbixcbiAgU0NDQUlNSFdyYXBwZXJNb2RhbCxcbiAgU0NDQUlNSFdyYXBwZXJNb2RhbENvbnRlbnQsXG4gIFNDQ0FJTUhXcmFwcGVyTW9kYWxDb250ZW50VGl0bGUsXG4gIFNDQ0FJTUhBZGRBZ2VudCxcbiAgU0NDQUlNSENyZWF0ZUFnZW50QnV0dG9uLFxuICBTQ0NBSU1IQ3JlYXRlQWdlbnRCdXR0b25UZXh0LFxuICBTQ0NBSU1IRGl2aWRlcixcbiAgU0NDQUlNSEFnZW50c0xpc3QsXG4gIFNDQ0FJTUhMb2FkZXJXcmFwcGVyLFxuICBTQ0NBSU1IUGx1c0ljb25XcmFwcGVyLFxuICBTQ0NBSU1ITGF5b3V0TWVudUFuY2hvcixcbiAgU0NDQUlNSExheW91dE1lbnVQYW5lbCxcbiAgU0NDQUlNSExheW91dE1lbnVSb3csXG4gIFNDQ0FJTUhMYXlvdXRNZW51Um93SWNvbixcbiAgU0NDQUlNSEJhY2tCdXR0b24sXG4gIFNDQ0FJTUhNaW5pbWl6ZUljb24sXG59IGZyb20gJy4vQ2hhdEFpTW9kYWxIZWFkZXIuc3R5bGVzJ1xuaW1wb3J0IHR5cGUgeyBNYWlhQ2hhdE1vZGFsTGF5b3V0TW9kZSB9IGZyb20gJy4uLy4uL2xheW91dCdcbmltcG9ydCB7IEVWRU5UUywgdXNlRXZlbnQgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi9ob29rcy91c2VFdmVudCdcbmltcG9ydCB7IHVzZVVzZXIgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi9jb250ZXh0L2Nvci11c2VyJ1xuaW1wb3J0IHsgaXNNYWlhQ2xvbmVBZ2VudHNSb2xlQmxvY2tlZCB9IGZyb20gJy4uLy4uLy4uLy4uLy4uL2NvbnN0YW50cy9tYWlhVGFza1BhbmVsQWNjZXNzJ1xuaW1wb3J0IHsgQWdlbnQgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi90eXBlcy9hZ2VudCdcbmltcG9ydCB7IExvYWRlciB9IGZyb20gJy4uLy4uLy4uLy4uL2F0b21zL0xvYWRlcidcbmltcG9ydCB7IHVzZU1haWFUYXNrUGFuZWxaSW5kZXggfSBmcm9tICcuLi8uLi8uLi8uLi8uLi9ob29rcy91c2VNYWlhVGFza1BhbmVsWkluZGV4J1xuXG5leHBvcnQgY29uc3QgQ2hhdEFJTW9kYWxIZWFkZXIgPSAoe1xuICBsYXlvdXRNb2RlLFxuICBvbkxheW91dE1vZGVDaGFuZ2UsXG4gIGRyYWdnYWJsZSA9IGZhbHNlLFxuICBvbkRyYWdTdGFydCxcbiAgb25EcmFnTW92ZSxcbiAgb25EcmFnRW5kLFxuICBoYW5kbGVNaW5pbWl6ZSxcbiAgYWdlbnRzID0gW10sXG4gIGhhc0Vycm9yID0gZmFsc2UsXG4gIGxvYWRpbmcgPSBmYWxzZSxcbiAgbG9hZGluZ01vcmUgPSBmYWxzZSxcbiAgaGFzTW9yZSA9IGZhbHNlLFxuICBoYW5kbGVSZXNldENoYXQsXG4gIG9uQWdlbnRVcGRhdGUsXG4gIGxvYWRNb3JlQWdlbnRzLFxuICBzb3J0QWdlbnRzTGlzdCxcbiAgaXNNeUFnZW50c1NlY3Rpb24gPSBmYWxzZSxcbiAgaXNNeVNraWxsc1NlY3Rpb24gPSBmYWxzZSxcbiAgaXNNYWlha2VyU2VjdGlvbiA9IGZhbHNlLFxuICBoaWRlQWdlbnRTZWxlY3RvciA9IGZhbHNlLFxuICBoaWRlQ29udHJvbHMgPSBmYWxzZSxcbiAgb25BZ2VudFNlbGVjdGVkLFxuICBzaG93QmFja0J1dHRvbiA9IGZhbHNlLFxuICBvbkJhY2sgPSAoKSA9PiBudWxsLFxufToge1xuICBsYXlvdXRNb2RlOiBNYWlhQ2hhdE1vZGFsTGF5b3V0TW9kZVxuICBvbkxheW91dE1vZGVDaGFuZ2U6IChtb2RlOiBNYWlhQ2hhdE1vZGFsTGF5b3V0TW9kZSkgPT4gdm9pZFxuICBleHBhbmRlZDogYm9vbGVhblxuICBkcmFnZ2FibGU/OiBib29sZWFuXG4gIG9uRHJhZ1N0YXJ0PzogKGV2ZW50OiBSZWFjdFBvaW50ZXJFdmVudDxIVE1MRGl2RWxlbWVudD4pID0+IHZvaWRcbiAgb25EcmFnTW92ZT86IChldmVudDogUmVhY3RQb2ludGVyRXZlbnQ8SFRNTERpdkVsZW1lbnQ+KSA9PiB2b2lkXG4gIG9uRHJhZ0VuZD86IChldmVudDogUmVhY3RQb2ludGVyRXZlbnQ8SFRNTERpdkVsZW1lbnQ+KSA9PiB2b2lkXG4gIGhhbmRsZU1pbmltaXplPzogKCkgPT4gdm9pZFxuICBhZ2VudHM6IEFnZW50W11cbiAgaGFzRXJyb3I6IGJvb2xlYW5cbiAgbG9hZGluZzogYm9vbGVhblxuICBsb2FkaW5nTW9yZT86IGJvb2xlYW5cbiAgaGFzTW9yZT86IGJvb2xlYW5cbiAgaGFuZGxlUmVzZXRDaGF0OiAoKSA9PiB2b2lkXG4gIG9uQWdlbnRVcGRhdGU/OiAodXBkYXRlZEFnZW50OiBBZ2VudCkgPT4gdm9pZFxuICBsb2FkTW9yZUFnZW50cz86ICgpID0+IHZvaWRcbiAgc29ydEFnZW50c0xpc3Q/OiAoKSA9PiB2b2lkXG4gIC8qKiBTZWNjacOzbiBcIk1pcyBhZ2VudGVzXCI6IHNpIG5vIGhheSBhZ2VudGUgc2V0ZWFkbywgZWwgc2VsZWN0b3IgbXVlc3RyYSBlbCBpY29ubyBkZSBNQUlBIHkgZWwgbm9tYnJlIGRlIGxhIHNlY2Npw7NuICovXG4gIGlzTXlBZ2VudHNTZWN0aW9uPzogYm9vbGVhblxuICAvKiogU2VjY2nDs24gXCJTa2lsbHNcIjogbWlzbW8gY29tcG9ydGFtaWVudG8gZGUgc2VsZWN0b3IgcXVlIE1pcyBhZ2VudGVzLCBjb24gZWwgbm9tYnJlIGRlIGxhIHNlY2Npw7NuICovXG4gIGlzTXlTa2lsbHNTZWN0aW9uPzogYm9vbGVhblxuICAvKiogT2N1bHRhIGVsIGNoaXAgZGUgbW9kZWxvIExMTSAocC4gZWouIGVuIE1pcyBhZ2VudGVzIC8gTWlzIHNraWxscykgKi9cbiAgaGlkZUFnZW50U2VsZWN0b3I/OiBib29sZWFuXG4gIC8qKiBPY3VsdGEgbG9zIGJvdG9uZXMgZGUgbGF5b3V0IHkgY2llcnJlIChtb2RvIHDDoWdpbmEgY29tcGxldGEpICovXG4gIGhpZGVDb250cm9scz86IGJvb2xlYW5cbiAgLyoqIFNlY2Npw7NuIFwiQ3JlYWRvciBkZSBhZ2VudGVzXCIgKE1haWFrZXIpOiBoYWJpbGl0YSBlbCBib3TDs24gXCJDcmVhciBhZ2VudGVcIiBkZWwgaGVhZGVyICovXG4gIGlzTWFpYWtlclNlY3Rpb24/OiBib29sZWFuXG4gIC8qKlxuICAgKiBTZSBpbnZvY2EgZGVzcHXDqXMgZGVsIHJlc2V0IGN1YW5kbyBlbCBhZ2VudGUgc2VsZWNjaW9uYWRvIE5PIHJlcXVpZXJlIHNlbGVjY2nDs25cbiAgICogZGUgZW50aXR5IChjdXN0b20gbyBjbG9uZStnbG9iYWwpLiBQZXJtaXRlIHJlc29sdmVyIGBHRVQgL3YyL3Nlc3Npb25zL2FnZW50L3tpZH1gXG4gICAqIHkgbmF2ZWdhciBhIHVuYSBjb252ZXJzYWNpw7NuIGV4aXN0ZW50ZSBzaSBsYSBoYXkuXG4gICAqL1xuICBvbkFnZW50U2VsZWN0ZWQ/OiAoYWdlbnQ6IEFnZW50KSA9PiB2b2lkIHwgUHJvbWlzZTx1bmtub3duPlxuICBzaG93QmFja0J1dHRvbj86IGJvb2xlYW5cbiAgb25CYWNrPzogKCkgPT4gdm9pZFxufSkgPT4ge1xuICBjb25zdCB7IHQgfSA9IHVzZVRyYW5zbGF0aW9uKFtTRUNUSU9OUy5hYm1BZ2VudCwgU0VDVElPTlMuY2hhdEFJXSlcbiAgY29uc3QgdXNlciA9IHVzZVVzZXIoKVxuICBjb25zdCBhbXBsaXR1ZEV2ZW50ID0gdXNlRXZlbnQoKVxuICBjb25zdCB7IGFnZW50OiBzZWxlY3RlZEFnZW50LCBzZWxlY3RBZ2VudCwgc2V0UHJvamVjdCwgc2V0Q2xpZW50LCBzZXRUYXNrLCBzZWN0aW9uIH0gPSB1c2VHbG9iYWxDb250ZXh0KClcbiAgLy8gRW4gc2VjdGlvbiAndGFzaycgZWwgbW9kYWwgZGUgTWFpYSBzZSBlbGV2YSBwb3IgZW5jaW1hIGRlbCB0YXNrIHBhbmVsICh6LWluZGV4IDk4MDAwMDEpLlxuICAvLyBMb3MgdG9vbHRpcHMgc2UgbW9udGFuIGVuIHBvcnRhbCBjb24gei1pbmRleCAxNTAwIHBvciBkZWZlY3RvLCBhc8OtIHF1ZSBxdWVkYXLDrWFuIGRldHLDoXMuXG4gIC8vIFN1Ymltb3Mgc3Ugei1pbmRleCBzw7NsbyBlbiBlc3RlIGNhc28gcGFyYSBxdWUgc2UgdmVhbiBwb3IgZW5jaW1hIGRlbCBtb2RhbC5cbiAgY29uc3QgdG9vbHRpcFpJbmRleCA9IHVzZU1haWFUYXNrUGFuZWxaSW5kZXgoMTUwMCwgJ292ZXJsYXknKVxuICBjb25zdCBbaXNFeHBhbmRlZCwgc2V0SXNFeHBhbmRlZF0gPSB1c2VTdGF0ZShmYWxzZSlcbiAgY29uc3QgdGV4dFJlZkFnZW50ID0gdXNlUmVmPEhUTUxTcGFuRWxlbWVudD4obnVsbClcbiAgY29uc3QgZHJvcGRvd25SZWYgPSB1c2VSZWY8SFRNTERpdkVsZW1lbnQ+KG51bGwpXG4gIGNvbnN0IGxheW91dE1lbnVSZWYgPSB1c2VSZWY8SFRNTERpdkVsZW1lbnQ+KG51bGwpXG4gIGNvbnN0IFtsYXlvdXRNZW51T3Blbiwgc2V0TGF5b3V0TWVudU9wZW5dID0gdXNlU3RhdGUoZmFsc2UpXG4gIGNvbnN0IHsgc2hvd1Rvb2x0aXA6IHNob3dUb29sdGlwQWdlbnQgfSA9IHVzZVJlc2l6ZUxpc3RlbmVyKHRleHRSZWZBZ2VudCwgW3NlbGVjdGVkQWdlbnQ/Lm5hbWVdKVxuICBjb25zdCBhZ2VudHNSZWYgPSB1c2VSZWY8SFRNTERpdkVsZW1lbnQ+KG51bGwpXG5cbiAgY29uc3QgaXNNYWlhQWdlbnQgPSB1c2VDYWxsYmFjaygoYWdlbnRJdGVtOiBBZ2VudCkgPT4gYWdlbnRJdGVtLnR5cGUgPT09ICdvcmNoZXN0cmF0b3InLCBbXSlcbiAgY29uc3QgYWdlbnRzRm9yU2VsZWN0b3IgPSB1c2VNZW1vKFxuICAgICgpID0+IGFnZW50cy5maWx0ZXIoYWdlbnRJdGVtID0+IGlzTWFpYUFnZW50KGFnZW50SXRlbSkgfHwgYWdlbnRJdGVtLmVudGl0eSAhPT0gJ2dsb2JhbCcpLFxuICAgIFthZ2VudHMsIGlzTWFpYUFnZW50XVxuICApXG5cbiAgY29uc3QgdXNlclBlcm1pc3Npb25zID0gdXNlcj8ucGVybWlzc2lvbnM/LmFpX2FnZW50c1xuICBjb25zdCBjYW5DcmVhdGVBZ2VudCA9ICEhdXNlclBlcm1pc3Npb25zPy5jcmVhdGUgJiYgISF3aW5kb3cuTUFJQV9DSEFUX0FJX0ZFQVRVUkVfQUNDRVNTX01VTFRJX0FHRU5UU1xuICBjb25zdCBzaG93SGVhZGVyQ3JlYXRlQWdlbnRCdXR0b24gPSBjYW5DcmVhdGVBZ2VudCAmJiAoaXNNeUFnZW50c1NlY3Rpb24gfHwgaXNNYWlha2VyU2VjdGlvbilcblxuICBjb25zdCBoYW5kbGVPcGVuQ3JlYXRlQWdlbnRNb2RhbCA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBhbXBsaXR1ZEV2ZW50KEVWRU5UUy5vcGVuTW9kYWwsIHsgb3B0aW9uOiAnY3JlYXRlX2FnZW50JyB9KVxuICAgIGRvY3VtZW50LmRpc3BhdGNoRXZlbnQoXG4gICAgICBuZXcgQ3VzdG9tRXZlbnQoJ2FibS1hZ2VudC1tb2RhbC1zZXQtdmFsdWVzJywge1xuICAgICAgICBkZXRhaWw6IHtcbiAgICAgICAgICBhZ2VudFZhbHVlczoge1xuICAgICAgICAgICAgdmFsdWVzOiB7XG4gICAgICAgICAgICAgIGlzRWRpdGluZzogZmFsc2UsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaXNPcGVuOiB0cnVlLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9KVxuICAgIClcbiAgfSwgW2FtcGxpdHVkRXZlbnRdKVxuXG4gIC8vIE1hbmVqYXIgc2Nyb2xsIGluZmluaXRvIHBhcmEgY2FyZ2FyIG3DoXMgYWdlbnRzXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgLy8gU29sbyBjdWFuZG8gZWwgZHJvcGRvd24gZXN0w6kgYWJpZXJ0b1xuICAgIGlmICghaXNFeHBhbmRlZCkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZFxuICAgIH1cblxuICAgIGNvbnN0IGhhbmRsZVNjcm9sbCA9ICgpID0+IHtcbiAgICAgIGlmICghYWdlbnRzUmVmLmN1cnJlbnQgfHwgIWxvYWRNb3JlQWdlbnRzIHx8ICFoYXNNb3JlIHx8IGxvYWRpbmdNb3JlKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBjb25zdCB7IHNjcm9sbFRvcCwgc2Nyb2xsSGVpZ2h0LCBjbGllbnRIZWlnaHQgfSA9IGFnZW50c1JlZi5jdXJyZW50XG4gICAgICBjb25zdCBkaXN0YW5jZUZyb21Cb3R0b20gPSBzY3JvbGxIZWlnaHQgLSBzY3JvbGxUb3AgLSBjbGllbnRIZWlnaHRcblxuICAgICAgLy8gQ2FyZ2FyIG3DoXMgKDUwcHggYW50ZXMpXG4gICAgICBpZiAoZGlzdGFuY2VGcm9tQm90dG9tIDwgNTApIHtcbiAgICAgICAgbG9hZE1vcmVBZ2VudHMoKVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIGRlbGF5IHBhcmEgYXNlZ3VyYXIgcXVlIGVsIERPTSBlc3TDqSByZW5kZXJpemFkb1xuICAgIGNvbnN0IHRpbWVvdXRJZCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgY29uc3Qgc2Nyb2xsRWxlbWVudCA9IGFnZW50c1JlZi5jdXJyZW50XG4gICAgICBpZiAoc2Nyb2xsRWxlbWVudCkge1xuICAgICAgICBzY3JvbGxFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIGhhbmRsZVNjcm9sbClcbiAgICAgIH1cbiAgICB9LCAxMDApXG5cbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXRJZClcbiAgICAgIGNvbnN0IHNjcm9sbEVsZW1lbnQgPSBhZ2VudHNSZWYuY3VycmVudFxuICAgICAgaWYgKHNjcm9sbEVsZW1lbnQpIHtcbiAgICAgICAgc2Nyb2xsRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdzY3JvbGwnLCBoYW5kbGVTY3JvbGwpXG4gICAgICB9XG4gICAgfVxuICB9LCBbaXNFeHBhbmRlZCwgbG9hZE1vcmVBZ2VudHMsIGhhc01vcmUsIGxvYWRpbmdNb3JlXSlcblxuICBjb25zdCBsb2NhbEFnZW50cyA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGlmIChcbiAgICAgIHNlbGVjdGVkQWdlbnQ/LmlzX2RlbGV0ZWQgfHxcbiAgICAgIHNlbGVjdGVkQWdlbnQ/Lmhhc19ub3RfcGVybWlzc2lvbnMgfHxcbiAgICAgIHNlbGVjdGVkQWdlbnQ/Lmhhc19ub3RfYWNjZXNzIHx8XG4gICAgICBzZWxlY3RlZEFnZW50Py5pc19mcm9tX2NvbnZlcnNhdGlvbiB8fFxuICAgICAgc2VsZWN0ZWRBZ2VudD8uaXNfbGVnYWN5X2NvbnRleHRcbiAgICApIHtcbiAgICAgIHJldHVybiBzZWxlY3RlZEFnZW50XG4gICAgfVxuICAgIGNvbnN0IGZyb21MaXN0ID0gYWdlbnRzLmZpbmQoXG4gICAgICBhZ2VudCA9PlxuICAgICAgICAhYWdlbnQuaXNfZGVsZXRlZCAmJiAhYWdlbnQuaGFzX25vdF9wZXJtaXNzaW9ucyAmJiAhYWdlbnQuaGFzX25vdF9hY2Nlc3MgJiYgYWdlbnQuaWQgPT09IHNlbGVjdGVkQWdlbnQ/LmlkXG4gICAgKVxuICAgIC8vIEFnZW50ZSBoaWRyYXRhZG8gcG9yIEdFVCAocC4gZWouIG51ZXZvIGNoYXQgdHJhcyBjcmVhdGVfYWdlbnQpIHB1ZWRlIG5vIGVzdGFyIGHDum4gZW4gbGEgbGlzdGEgcGFnaW5hZGFcbiAgICByZXR1cm4gZnJvbUxpc3QgPz8gc2VsZWN0ZWRBZ2VudCA/PyBudWxsXG4gIH0sIFthZ2VudHMsIHNlbGVjdGVkQWdlbnRdKVxuXG4gIC8vIEVuICdNaXMgYWdlbnRlcycgLyAnU2tpbGxzJyBzaW4gYWdlbnRlIHNldGVhZG8sIGVsIHNlbGVjdG9yIG11ZXN0cmEgZWwgaWNvbm8gZGUgTUFJQSB5IGVsIG5vbWJyZSBkZSBsYSBzZWNjacOzblxuICAvLyBlbiBsdWdhciBkZWwgYWdlbnRlLCBwYXJhIHF1ZSBlbCB1c3VhcmlvIHB1ZWRhIGFicmlyIGVsIGRyb3Bkb3duIHkgZWxlZ2lyIHVuby5cbiAgY29uc3Qgc2VsZWN0b3JJY29uID1cbiAgICBsb2NhbEFnZW50cz8udHlwZSA9PT0gJ2N1c3RvbScgJiYgIWxvY2FsQWdlbnRzPy5pc19sZWdhY3lfY29udGV4dCA/IGxvY2FsQWdlbnRzPy5lbW9qaSA6IDxNQUlBSWNvbiAvPlxuICBjb25zdCBzZWN0aW9uU2VsZWN0b3JMYWJlbCA9IGlzTXlBZ2VudHNTZWN0aW9uXG4gICAgPyB0KCdtYXJrZXRwbGFjZS5teUFnZW50c1RpdGxlJywgeyBuczogU0VDVElPTlMuY2hhdEFJIH0pXG4gICAgOiBpc015U2tpbGxzU2VjdGlvblxuICAgICAgPyB0KCdjb252ZXJzYXRpb25zLm15U2tpbGxzTmF2JywgeyBuczogU0VDVElPTlMuY2hhdEFJIH0pXG4gICAgICA6ICcnXG4gIGNvbnN0IHNlbGVjdG9yTGFiZWwgPSBsb2NhbEFnZW50cz8ubmFtZSA/PyBzZWN0aW9uU2VsZWN0b3JMYWJlbFxuXG4gIGNvbnN0IGhhbmRsZVNlbGVjdEFnZW50ID0gdXNlQ2FsbGJhY2soXG4gICAgKGFnZW50OiBBZ2VudCkgPT4ge1xuICAgICAgc2VsZWN0QWdlbnQoYWdlbnQpXG4gICAgICBhbXBsaXR1ZEV2ZW50KEVWRU5UUy5haUNoYXRBZ2VudFNlbGVjdCwge1xuICAgICAgICBhZ2VudF90eXBlOiBhZ2VudD8udHlwZSxcbiAgICAgIH0pXG4gICAgICBzZXRJc0V4cGFuZGVkKGZhbHNlKVxuICAgICAgc2V0UHJvamVjdChudWxsKVxuICAgICAgc2V0Q2xpZW50Py4obnVsbClcbiAgICAgIHNldFRhc2sobnVsbClcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBoYW5kbGVSZXNldENoYXQoKVxuICAgICAgICAvLyBTaSBlbCBhZ2VudGUgbm8gZGVwZW5kZSBkZSB1bmEgZW50aXR5IChjdXN0b20gbyBjbG9uZStnbG9iYWwpIHlhIHBvZGVtb3NcbiAgICAgICAgLy8gcmVzb2x2ZXIgc2kgZXhpc3RlIHVuYSBzZXNpw7NuIHByZXZpYSB5LCBlbiBlc2UgY2FzbywgbmF2ZWdhciBhIGVsbGEuXG4gICAgICAgIC8vIFBhcmEgY2xvbmUrcHJvamVjdHxjbGllbnQsIGxhIHJlc29sdWNpw7NuIG9jdXJyZSBlbiBsb3Mgc2VsZWN0b3JzIGRlIGVudGl0eS5cbiAgICAgICAgY29uc3QgbmVlZHNFbnRpdHkgPSBhZ2VudD8udHlwZSA9PT0gJ2Nsb25lJyAmJiAoYWdlbnQ/LmVudGl0eSA9PT0gJ3Byb2plY3QnIHx8IGFnZW50Py5lbnRpdHkgPT09ICdjbGllbnQnKVxuICAgICAgICBpZiAoIW5lZWRzRW50aXR5KSB7XG4gICAgICAgICAgb25BZ2VudFNlbGVjdGVkPy4oYWdlbnQpXG4gICAgICAgIH1cbiAgICAgIH0sIDEwMClcbiAgICB9LFxuICAgIFtzZWxlY3RBZ2VudCwgYW1wbGl0dWRFdmVudCwgaGFuZGxlUmVzZXRDaGF0LCBzZXRQcm9qZWN0LCBzZXRDbGllbnQsIHNldFRhc2ssIG9uQWdlbnRTZWxlY3RlZF1cbiAgKVxuXG4gIGNvbnN0IGhhbmRsZUV4cGFuZE1vZGFsID0gKCkgPT4ge1xuICAgIGlmICghaXNFeHBhbmRlZCkge1xuICAgICAgYW1wbGl0dWRFdmVudChFVkVOVFMuYWlDaGF0T3BlbkFnZW50U2VsZWN0KVxuICAgICAgLy8gQ3VhbmRvIHNlIGFicmUgZWwgc2VsZWN0b3IsIG9yZGVuYXIgbG9zIGFnZW50ZXNcbiAgICAgIGlmIChzb3J0QWdlbnRzTGlzdCkge1xuICAgICAgICBzb3J0QWdlbnRzTGlzdCgpXG4gICAgICB9XG4gICAgfVxuICAgIHNldElzRXhwYW5kZWQocHJldiA9PiAhcHJldilcbiAgfVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFpc0V4cGFuZGVkICYmICFsYXlvdXRNZW51T3Blbikge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZFxuICAgIH1cblxuICAgIGNvbnN0IGhhbmRsZUNsaWNrT3V0c2lkZSA9IChldmVudDogTW91c2VFdmVudCkgPT4ge1xuICAgICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0IGFzIE5vZGVcbiAgICAgIGlmIChpc0V4cGFuZGVkICYmIGRyb3Bkb3duUmVmLmN1cnJlbnQgJiYgIWRyb3Bkb3duUmVmLmN1cnJlbnQuY29udGFpbnModGFyZ2V0KSkge1xuICAgICAgICBzZXRJc0V4cGFuZGVkKGZhbHNlKVxuICAgICAgfVxuICAgICAgaWYgKGxheW91dE1lbnVPcGVuICYmIGxheW91dE1lbnVSZWYuY3VycmVudCAmJiAhbGF5b3V0TWVudVJlZi5jdXJyZW50LmNvbnRhaW5zKHRhcmdldCkpIHtcbiAgICAgICAgc2V0TGF5b3V0TWVudU9wZW4oZmFsc2UpXG4gICAgICB9XG4gICAgfVxuXG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duJywgaGFuZGxlQ2xpY2tPdXRzaWRlKVxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCBoYW5kbGVDbGlja091dHNpZGUpXG4gICAgfVxuICB9LCBbaXNFeHBhbmRlZCwgbGF5b3V0TWVudU9wZW5dKVxuXG4gIGNvbnN0IGhhbmRsZVBpY2tMYXlvdXQgPSB1c2VDYWxsYmFjayhcbiAgICAobW9kZTogTWFpYUNoYXRNb2RhbExheW91dE1vZGUpID0+IHtcbiAgICAgIGFtcGxpdHVkRXZlbnQoRVZFTlRTLnByb2plY3RSZXN1bWVFeHBhbmQsIHtcbiAgICAgICAgZXhwYW5kZWQ6IG1vZGUgPT09ICdmdWxsc2NyZWVuJyxcbiAgICAgIH0pXG4gICAgICBhbXBsaXR1ZEV2ZW50KEVWRU5UUy5haUNoYXRTZWxlY3RWaWV3T3B0aW9ucywgeyBvcHRpb246IG1vZGUgfSlcbiAgICAgIG9uTGF5b3V0TW9kZUNoYW5nZShtb2RlKVxuICAgICAgc2V0TGF5b3V0TWVudU9wZW4oZmFsc2UpXG4gICAgfSxcbiAgICBbYW1wbGl0dWRFdmVudCwgb25MYXlvdXRNb2RlQ2hhbmdlXVxuICApXG5cbiAgY29uc3QgY2xvbmVBZ2VudHNSb2xlQmxvY2tlZCA9IGlzTWFpYUNsb25lQWdlbnRzUm9sZUJsb2NrZWQodXNlciwgc2VjdGlvbilcblxuICBjb25zdCByZW5kZXJNb2RhbCA9ICgpID0+IHtcbiAgICByZXR1cm4gKFxuICAgICAgPFNDQ0FJTUhXcmFwcGVyXG4gICAgICAgIHJlZj17ZHJvcGRvd25SZWZ9XG4gICAgICAgIGRhdGEtbm8tZHJhZz1cInRydWVcIlxuICAgICAgICBvbkNsaWNrPXthZ2VudHMubGVuZ3RoID8gaGFuZGxlRXhwYW5kTW9kYWwgOiB1bmRlZmluZWR9XG4gICAgICAgIGlkPVwiY2hhdC1haS1tb2RhbC1oZWFkZXItd3JhcHBlclwiXG4gICAgICA+XG4gICAgICAgIDxTQ0NBSU1IU2VsZWN0ZWRBZ2VudD5cbiAgICAgICAgICA8VG9vbHRpcFxuICAgICAgICAgICAgdGl0bGU9e1xuICAgICAgICAgICAgICBzaG93VG9vbHRpcEFnZW50ID8gKFxuICAgICAgICAgICAgICAgIDxzcGFuIHN0eWxlPXt7IGRpc3BsYXk6ICdmbGV4JywgYWxpZ25JdGVtczogJ2NlbnRlcicsIGdhcDogJzRweCcgfX0+XG4gICAgICAgICAgICAgICAgICB7bG9jYWxBZ2VudHM/LnR5cGUgPT09ICdjdXN0b20nICYmICFsb2NhbEFnZW50cz8uaXNfbGVnYWN5X2NvbnRleHQgPyAoXG4gICAgICAgICAgICAgICAgICAgIGxvY2FsQWdlbnRzPy5lbW9qaVxuICAgICAgICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgICAgICAgPE1BSUFJY29uIC8+XG4gICAgICAgICAgICAgICAgICApfXsnICd9XG4gICAgICAgICAgICAgICAgICB7bG9jYWxBZ2VudHM/Lm5hbWV9XG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICAgICcnXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHBsYWNlbWVudD17aXNFeHBhbmRlZCA/ICdsZWZ0JyA6ICd0b3AnfVxuICAgICAgICAgICAgey4uLih0b29sdGlwWkluZGV4ICE9IG51bGwgPyB7IHpJbmRleDogdG9vbHRpcFpJbmRleCB9IDoge30pfVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxTQ0NBSU1IU2VsZWN0ZWRBZ2VudFRleHRcbiAgICAgICAgICAgICAgcmVmPXt0ZXh0UmVmQWdlbnR9XG4gICAgICAgICAgICAgIGlzQWdlbnREZWxldGVkPXtcbiAgICAgICAgICAgICAgICAhIXNlbGVjdGVkQWdlbnQ/LmlzX2RlbGV0ZWQgfHxcbiAgICAgICAgICAgICAgICAhIXNlbGVjdGVkQWdlbnQ/Lmhhc19ub3RfcGVybWlzc2lvbnMgfHxcbiAgICAgICAgICAgICAgICAhIXNlbGVjdGVkQWdlbnQ/Lmhhc19ub3RfYWNjZXNzIHx8XG4gICAgICAgICAgICAgICAgISFzZWxlY3RlZEFnZW50Py5pc19sZWdhY3lfY29udGV4dFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxzcGFuIHN0eWxlPXt7IGRpc3BsYXk6ICdmbGV4JywgYWxpZ25JdGVtczogJ2NlbnRlcicsIGdhcDogJzRweCcgfX0+XG4gICAgICAgICAgICAgICAge3NlbGVjdG9ySWNvbn0ge3NlbGVjdG9yTGFiZWx9XG4gICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIDwvU0NDQUlNSFNlbGVjdGVkQWdlbnRUZXh0PlxuICAgICAgICAgIDwvVG9vbHRpcD5cbiAgICAgICAgPC9TQ0NBSU1IU2VsZWN0ZWRBZ2VudD5cbiAgICAgICAgPFNDQ0FJTUhXcmFwcGVySWNvbj5cbiAgICAgICAgICA8Q2hldnJvbkRvd24gd2lkdGg9ezE0fSBoZWlnaHQ9ezE0fSBjb2xvcj1cIiMyMDIwMUZcIiAvPlxuICAgICAgICA8L1NDQ0FJTUhXcmFwcGVySWNvbj5cbiAgICAgICAge2lzRXhwYW5kZWQgJiYgKFxuICAgICAgICAgIDxTQ0NBSU1IV3JhcHBlck1vZGFsPlxuICAgICAgICAgICAgPFNDQ0FJTUhXcmFwcGVyTW9kYWxDb250ZW50PlxuICAgICAgICAgICAgICB7d2luZG93Lk1BSUFfQ0hBVF9BSV9GRUFUVVJFX0FDQ0VTUyAmJiAhY2xvbmVBZ2VudHNSb2xlQmxvY2tlZCAmJiAoXG4gICAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICAgIHsoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBtYWlhQWdlbnRzID0gYWdlbnRzRm9yU2VsZWN0b3IuZmlsdGVyKGlzTWFpYUFnZW50KVxuICAgICAgICAgICAgICAgICAgICBpZiAoIW1haWFBZ2VudHMubGVuZ3RoKSByZXR1cm4gbnVsbFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgICAgICAgICB7bWFpYUFnZW50cy5tYXAoKG1haWFBZ2VudCwgaW5kZXgpID0+IChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPENoYXRBSUFnZW50T3B0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5PXtgYWdlbnQtJHttYWlhQWdlbnQuaWR9YH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZ2VudD17bWFpYUFnZW50fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4PXtpbmRleH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVTZWxlY3RBZ2VudD17aGFuZGxlU2VsZWN0QWdlbnR9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNTZWxlY3RlZD17c2VsZWN0ZWRBZ2VudD8uaWQgPT09IG1haWFBZ2VudC5pZH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc01haWFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkZhdm9yaXRlVG9nZ2xlPXtvbkFnZW50VXBkYXRlfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgKSl9XG4gICAgICAgICAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgIH0pKCl9XG4gICAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgIHthZ2VudHNGb3JTZWxlY3Rvci5zb21lKGFnZW50ID0+IGFnZW50LnR5cGUgPT09ICdjdXN0b20nKSAmJlxuICAgICAgICAgICAgICAgIHdpbmRvdy5NQUlBX0NIQVRfQUlfRkVBVFVSRV9BQ0NFU1NfTVVMVElfQUdFTlRTICYmIChcbiAgICAgICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgICAgIDxTQ0NBSU1IV3JhcHBlck1vZGFsQ29udGVudFRpdGxlPlxuICAgICAgICAgICAgICAgICAgICAgIHt0KCdhZ2VudHMnKX0gYnkge3VzZXIuY29tcGFueX1cbiAgICAgICAgICAgICAgICAgICAgPC9TQ0NBSU1IV3JhcHBlck1vZGFsQ29udGVudFRpdGxlPlxuICAgICAgICAgICAgICAgICAgICA8U0NDQUlNSERpdmlkZXIgLz5cbiAgICAgICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgIDxTQ0NBSU1IQWdlbnRzTGlzdCBoYXNNb3JlPXtoYXNNb3JlfSBhZ2VudHNDb3VudD17YWdlbnRzRm9yU2VsZWN0b3IubGVuZ3RofSByZWY9e2FnZW50c1JlZn0+XG4gICAgICAgICAgICAgICAge2FnZW50c0ZvclNlbGVjdG9yPy5tYXAoKGFnZW50LCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICBhZ2VudD8uaXNfZGVsZXRlZCB8fFxuICAgICAgICAgICAgICAgICAgICBhZ2VudD8uaGFzX25vdF9wZXJtaXNzaW9ucyB8fFxuICAgICAgICAgICAgICAgICAgICBhZ2VudD8uaGFzX25vdF9hY2Nlc3MgfHxcbiAgICAgICAgICAgICAgICAgICAgYWdlbnQ/LnR5cGUgPT09ICdjbG9uZScgfHxcbiAgICAgICAgICAgICAgICAgICAgaXNNYWlhQWdlbnQoYWdlbnQpIHx8XG4gICAgICAgICAgICAgICAgICAgIChhZ2VudD8udHlwZSA9PT0gJ2N1c3RvbScgJiYgIXdpbmRvdy5NQUlBX0NIQVRfQUlfRkVBVFVSRV9BQ0NFU1NfTVVMVElfQUdFTlRTKVxuICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbFxuICAgICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgPENoYXRBSUFnZW50T3B0aW9uXG4gICAgICAgICAgICAgICAgICAgICAga2V5PXtgYWdlbnQtJHthZ2VudC5pZH1gfVxuICAgICAgICAgICAgICAgICAgICAgIGFnZW50PXthZ2VudH1cbiAgICAgICAgICAgICAgICAgICAgICBpbmRleD17aW5kZXh9XG4gICAgICAgICAgICAgICAgICAgICAgaGFuZGxlU2VsZWN0QWdlbnQ9e2hhbmRsZVNlbGVjdEFnZW50fVxuICAgICAgICAgICAgICAgICAgICAgIGlzU2VsZWN0ZWQ9e3NlbGVjdGVkQWdlbnQ/LmlkID09PSBhZ2VudC5pZH1cbiAgICAgICAgICAgICAgICAgICAgICBvbkZhdm9yaXRlVG9nZ2xlPXtvbkFnZW50VXBkYXRlfVxuICAgICAgICAgICAgICAgICAgICAgIHNldElzRXhwYW5kZWQ9e3NldElzRXhwYW5kZWR9XG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICAgICAge2xvYWRpbmdNb3JlICYmIChcbiAgICAgICAgICAgICAgICAgIDxTQ0NBSU1ITG9hZGVyV3JhcHBlcj5cbiAgICAgICAgICAgICAgICAgICAgPExvYWRlciBzaXplPVwic21hbGxcIiAvPlxuICAgICAgICAgICAgICAgICAgPC9TQ0NBSU1ITG9hZGVyV3JhcHBlcj5cbiAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICA8L1NDQ0FJTUhBZ2VudHNMaXN0PlxuICAgICAgICAgICAgICB7dXNlclBlcm1pc3Npb25zPy5jcmVhdGUgJiZcbiAgICAgICAgICAgICAgICB3aW5kb3cuTUFJQV9DSEFUX0FJX0ZFQVRVUkVfQUNDRVNTX01VTFRJX0FHRU5UUyAmJlxuICAgICAgICAgICAgICAgICFpc015QWdlbnRzU2VjdGlvbiAmJlxuICAgICAgICAgICAgICAgICFpc015U2tpbGxzU2VjdGlvbiAmJlxuICAgICAgICAgICAgICAgICFpc01haWFrZXJTZWN0aW9uICYmIChcbiAgICAgICAgICAgICAgICAgIDxTQ0NBSU1IQWRkQWdlbnRcbiAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgIHNldElzRXhwYW5kZWQoZmFsc2UpXG4gICAgICAgICAgICAgICAgICAgICAgYW1wbGl0dWRFdmVudChFVkVOVFMub3Blbk1vZGFsLCB7IG9wdGlvbjogJ2NyZWF0ZV9hZ2VudCcgfSlcbiAgICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5kaXNwYXRjaEV2ZW50KFxuICAgICAgICAgICAgICAgICAgICAgICAgbmV3IEN1c3RvbUV2ZW50KCdhYm0tYWdlbnQtbW9kYWwtc2V0LXZhbHVlcycsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZGV0YWlsOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWdlbnRWYWx1ZXM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc0VkaXRpbmc6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzT3BlbjogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxTQ0NBSU1IUGx1c0ljb25XcmFwcGVyPlxuICAgICAgICAgICAgICAgICAgICAgIDxQbHVzIGNvbG9yPVwid2hpdGVcIiB3aWR0aD17MTh9IGhlaWdodD17MTh9IC8+XG4gICAgICAgICAgICAgICAgICAgIDwvU0NDQUlNSFBsdXNJY29uV3JhcHBlcj5cbiAgICAgICAgICAgICAgICAgICAge3QoJ2NyZWF0ZUFnZW50Jyl9XG4gICAgICAgICAgICAgICAgICA8L1NDQ0FJTUhBZGRBZ2VudD5cbiAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgPC9TQ0NBSU1IV3JhcHBlck1vZGFsQ29udGVudD5cbiAgICAgICAgICA8L1NDQ0FJTUhXcmFwcGVyTW9kYWw+XG4gICAgICAgICl9XG4gICAgICA8L1NDQ0FJTUhXcmFwcGVyPlxuICAgIClcbiAgfVxuXG4gIGNvbnN0IHNob3VsZFJlbmRlclNlbGVjdG9yID1cbiAgICAhaGFzRXJyb3IgJiZcbiAgICAhbG9hZGluZyAmJlxuICAgICFoaWRlQWdlbnRTZWxlY3RvciAmJlxuICAgICghIXNlbGVjdGVkQWdlbnQgfHwgaXNNeUFnZW50c1NlY3Rpb24gfHwgaXNNeVNraWxsc1NlY3Rpb24pICYmXG4gICAgKCEhd2luZG93Lk1BSUFfQ0hBVF9BSV9GRUFUVVJFX0FDQ0VTU19NVUxUSV9BR0VOVFMgfHwgISF3aW5kb3cuTUFJQV9DSEFUX0FJX0ZFQVRVUkVfQUNDRVNTKVxuXG4gIHJldHVybiAoXG4gICAgPFNDQ0FJTUhNb2RhbFxuICAgICAgJGhhc0Vycm9yPXtoYXNFcnJvcn1cbiAgICAgICRsb2FkaW5nPXtsb2FkaW5nfVxuICAgICAgJGhhc0FnZW50cz17ISFhZ2VudHMubGVuZ3RofVxuICAgICAgb25Qb2ludGVyRG93bj17ZHJhZ2dhYmxlID8gb25EcmFnU3RhcnQgOiB1bmRlZmluZWR9XG4gICAgICBvblBvaW50ZXJNb3ZlPXtkcmFnZ2FibGUgPyBvbkRyYWdNb3ZlIDogdW5kZWZpbmVkfVxuICAgICAgb25Qb2ludGVyVXA9e2RyYWdnYWJsZSA/IG9uRHJhZ0VuZCA6IHVuZGVmaW5lZH1cbiAgICAgIG9uUG9pbnRlckNhbmNlbD17ZHJhZ2dhYmxlID8gb25EcmFnRW5kIDogdW5kZWZpbmVkfVxuICAgICAgb25Mb3N0UG9pbnRlckNhcHR1cmU9e2RyYWdnYWJsZSA/IG9uRHJhZ0VuZCA6IHVuZGVmaW5lZH1cbiAgICAgIHN0eWxlPXt7IGN1cnNvcjogZHJhZ2dhYmxlID8gJ2dyYWInIDogdW5kZWZpbmVkLCB0b3VjaEFjdGlvbjogZHJhZ2dhYmxlID8gJ21hbmlwdWxhdGlvbicgOiB1bmRlZmluZWQgfX1cbiAgICA+XG4gICAgICB7c2hvdWxkUmVuZGVyU2VsZWN0b3IgPyByZW5kZXJNb2RhbCgpIDogPGRpdiAvPn1cbiAgICAgIDxTQ0NBSU1IV3JhcHBlckJ1dHRvbiBkYXRhLW5vLWRyYWc9XCJ0cnVlXCI+XG4gICAgICAgIHtzaG93QmFja0J1dHRvbiAmJiAoXG4gICAgICAgICAgPFNDQ0FJTUhCYWNrQnV0dG9uXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcbiAgICAgICAgICAgICAgb25CYWNrKClcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgPlxuICAgICAgICAgICAgPENoZXZyb25MZWZ0IHdpZHRoPXsxNH0gaGVpZ2h0PXsxNH0gY29sb3I9XCIjMzQzNDMzXCIgLz5cbiAgICAgICAgICAgIHt0KCdiYWNrJyl9XG4gICAgICAgICAgPC9TQ0NBSU1IQmFja0J1dHRvbj5cbiAgICAgICAgKX1cbiAgICAgICAge3Nob3dIZWFkZXJDcmVhdGVBZ2VudEJ1dHRvbiAmJiAoXG4gICAgICAgICAgPFNDQ0FJTUhDcmVhdGVBZ2VudEJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgb25DbGljaz17aGFuZGxlT3BlbkNyZWF0ZUFnZW50TW9kYWx9PlxuICAgICAgICAgICAgPFNDQ0FJTUhDcmVhdGVBZ2VudEJ1dHRvblRleHQ+e3QoJ29wZW5BZ2VudENyZWF0b3InKX08L1NDQ0FJTUhDcmVhdGVBZ2VudEJ1dHRvblRleHQ+XG4gICAgICAgICAgPC9TQ0NBSU1IQ3JlYXRlQWdlbnRCdXR0b24+XG4gICAgICAgICl9XG4gICAgICAgIHshaGlkZUNvbnRyb2xzICYmIChcbiAgICAgICAgICA8PlxuICAgICAgICAgICAgPFNDQ0FJTUhMYXlvdXRNZW51QW5jaG9yIHJlZj17bGF5b3V0TWVudVJlZn0gZGF0YS1uby1kcmFnPVwidHJ1ZVwiPlxuICAgICAgICAgICAgICA8SWNvbkJ1dHRvblxuICAgICAgICAgICAgICAgIGJ1dHRvbklkPVwiYnRuLW1haWEtbGF5b3V0LW1lbnVcIlxuICAgICAgICAgICAgICAgIGhhbmRsZUNsaWNrPXsoKSA9PiB7XG4gICAgICAgICAgICAgICAgICBpZiAoIWxheW91dE1lbnVPcGVuKSB7XG4gICAgICAgICAgICAgICAgICAgIGFtcGxpdHVkRXZlbnQoRVZFTlRTLmFpQ2hhdE9wZW5WaWV3T3B0aW9ucylcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIHNldExheW91dE1lbnVPcGVuKHByZXYgPT4gIXByZXYpXG4gICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICB0b29sdGlwPXt0KCdsYXlvdXRNZW51VG9vbHRpcCcpfVxuICAgICAgICAgICAgICAgIGRpc2FibGVUb29sdGlwPXtsYXlvdXRNZW51T3Blbn1cbiAgICAgICAgICAgICAgICB0b29sdGlwWkluZGV4PXt0b29sdGlwWkluZGV4fVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPE1haWFDaGF0TGF5b3V0TWVudUljb24gLz5cbiAgICAgICAgICAgICAgPC9JY29uQnV0dG9uPlxuICAgICAgICAgICAgICB7bGF5b3V0TWVudU9wZW4gPyAoXG4gICAgICAgICAgICAgICAgPFNDQ0FJTUhMYXlvdXRNZW51UGFuZWwgcm9sZT1cIm1lbnVcIj5cbiAgICAgICAgICAgICAgICAgIDxTQ0NBSU1ITGF5b3V0TWVudVJvd1xuICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgJGFjdGl2ZT17bGF5b3V0TW9kZSA9PT0gJ3NpZGViYXInfVxuICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBoYW5kbGVQaWNrTGF5b3V0KCdzaWRlYmFyJyl9XG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxTQ0NBSU1ITGF5b3V0TWVudVJvd0ljb24gYXJpYS1oaWRkZW4+XG4gICAgICAgICAgICAgICAgICAgICAgPE1haWFDaGF0TGF5b3V0U2lkZWJhckljb24gLz5cbiAgICAgICAgICAgICAgICAgICAgPC9TQ0NBSU1ITGF5b3V0TWVudVJvd0ljb24+XG4gICAgICAgICAgICAgICAgICAgIHt0KCdsYXlvdXRTaWRlYmFyJyl9XG4gICAgICAgICAgICAgICAgICA8L1NDQ0FJTUhMYXlvdXRNZW51Um93PlxuICAgICAgICAgICAgICAgICAgPFNDQ0FJTUhMYXlvdXRNZW51Um93XG4gICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAkYWN0aXZlPXtsYXlvdXRNb2RlID09PSAnZnVsbHNjcmVlbid9XG4gICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IGhhbmRsZVBpY2tMYXlvdXQoJ2Z1bGxzY3JlZW4nKX1cbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPFNDQ0FJTUhMYXlvdXRNZW51Um93SWNvbiBhcmlhLWhpZGRlbj5cbiAgICAgICAgICAgICAgICAgICAgICA8TWFpYUNoYXRMYXlvdXRGdWxsc2NyZWVuSWNvbiAvPlxuICAgICAgICAgICAgICAgICAgICA8L1NDQ0FJTUhMYXlvdXRNZW51Um93SWNvbj5cbiAgICAgICAgICAgICAgICAgICAge3QoJ2xheW91dEZ1bGxzY3JlZW4nKX1cbiAgICAgICAgICAgICAgICAgIDwvU0NDQUlNSExheW91dE1lbnVSb3c+XG4gICAgICAgICAgICAgICAgICA8U0NDQUlNSExheW91dE1lbnVSb3dcbiAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgICRhY3RpdmU9e2xheW91dE1vZGUgPT09ICdmbG9hdGluZyd9XG4gICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IGhhbmRsZVBpY2tMYXlvdXQoJ2Zsb2F0aW5nJyl9XG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDxTQ0NBSU1ITGF5b3V0TWVudVJvd0ljb24gYXJpYS1oaWRkZW4+XG4gICAgICAgICAgICAgICAgICAgICAgPE1haWFDaGF0TGF5b3V0RmxvYXRpbmdJY29uIC8+XG4gICAgICAgICAgICAgICAgICAgIDwvU0NDQUlNSExheW91dE1lbnVSb3dJY29uPlxuICAgICAgICAgICAgICAgICAgICB7dCgnbGF5b3V0RmxvYXRpbmcnKX1cbiAgICAgICAgICAgICAgICAgIDwvU0NDQUlNSExheW91dE1lbnVSb3c+XG4gICAgICAgICAgICAgICAgPC9TQ0NBSU1ITGF5b3V0TWVudVBhbmVsPlxuICAgICAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgICAgIDwvU0NDQUlNSExheW91dE1lbnVBbmNob3I+XG4gICAgICAgICAgICB7aGFuZGxlTWluaW1pemUgPyAoXG4gICAgICAgICAgICAgIDxJY29uQnV0dG9uIGhhbmRsZUNsaWNrPXtoYW5kbGVNaW5pbWl6ZX0gdG9vbHRpcD17dCgnZ2xvYmFscy5taW5pbWl6ZScpfSB0b29sdGlwWkluZGV4PXt0b29sdGlwWkluZGV4fT5cbiAgICAgICAgICAgICAgICA8U0NDQUlNSE1pbmltaXplSWNvbj5cbiAgICAgICAgICAgICAgICAgIDxTdGF0dXMgd2lkdGg9ezI0fSBoZWlnaHQ9ezI0fSAvPlxuICAgICAgICAgICAgICAgIDwvU0NDQUlNSE1pbmltaXplSWNvbj5cbiAgICAgICAgICAgICAgPC9JY29uQnV0dG9uPlxuICAgICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgICAgPC8+XG4gICAgICAgICl9XG4gICAgICA8L1NDQ0FJTUhXcmFwcGVyQnV0dG9uPlxuICAgIDwvU0NDQUlN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
@@ -0,0 +1,37 @@
1
+ import { renderWithProviders, screen } from '../../../../../test/test-utils';
2
+ import { MaiaMinimizedPill } from './MaiaMinimizedPill';
3
+ import { jsx as _jsx } from "react/jsx-runtime";
4
+ jest.mock('../../../../../hooks/useMinimizedPillBottomOffset', function () {
5
+ return {
6
+ useMinimizedPillBottomOffset: function useMinimizedPillBottomOffset() {
7
+ return 16;
8
+ }
9
+ };
10
+ });
11
+ describe('MaiaMinimizedPill', function () {
12
+ it('shows a novelty dot without a numeric badge', function () {
13
+ renderWithProviders(/*#__PURE__*/_jsx(MaiaMinimizedPill, {
14
+ showNoveltyDot: true,
15
+ isStreaming: false,
16
+ onRestore: jest.fn()
17
+ }));
18
+ var button = screen.getByRole('button', {
19
+ name: 'conversations.minimizedOpen'
20
+ });
21
+ expect(button.querySelector('[aria-hidden="true"]')).toBeInTheDocument();
22
+ expect(button).not.toHaveTextContent('9');
23
+ });
24
+ it('calls onRestore when clicked', function () {
25
+ var onRestore = jest.fn();
26
+ renderWithProviders(/*#__PURE__*/_jsx(MaiaMinimizedPill, {
27
+ showNoveltyDot: false,
28
+ isStreaming: false,
29
+ onRestore: onRestore
30
+ }));
31
+ screen.getByRole('button', {
32
+ name: 'conversations.minimizedOpen'
33
+ }).click();
34
+ expect(onRestore).toHaveBeenCalled();
35
+ });
36
+ });
37
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJyZW5kZXJXaXRoUHJvdmlkZXJzIiwic2NyZWVuIiwiTWFpYU1pbmltaXplZFBpbGwiLCJqc3giLCJfanN4IiwiamVzdCIsIm1vY2siLCJ1c2VNaW5pbWl6ZWRQaWxsQm90dG9tT2Zmc2V0IiwiZGVzY3JpYmUiLCJpdCIsInNob3dOb3ZlbHR5RG90IiwiaXNTdHJlYW1pbmciLCJvblJlc3RvcmUiLCJmbiIsImJ1dHRvbiIsImdldEJ5Um9sZSIsIm5hbWUiLCJleHBlY3QiLCJxdWVyeVNlbGVjdG9yIiwidG9CZUluVGhlRG9jdW1lbnQiLCJub3QiLCJ0b0hhdmVUZXh0Q29udGVudCIsImNsaWNrIiwidG9IYXZlQmVlbkNhbGxlZCJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL21vbGVjdWxlcy9DaGF0QUlNb2RhbC9jb21wb25lbnRzL01haWFNaW5pbWl6ZWRQaWxsL01haWFNaW5pbWl6ZWRQaWxsLnNwZWMudHN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHJlbmRlcldpdGhQcm92aWRlcnMsIHNjcmVlbiB9IGZyb20gJy4uLy4uLy4uLy4uLy4uL3Rlc3QvdGVzdC11dGlscydcbmltcG9ydCB7IE1haWFNaW5pbWl6ZWRQaWxsIH0gZnJvbSAnLi9NYWlhTWluaW1pemVkUGlsbCdcblxuamVzdC5tb2NrKCcuLi8uLi8uLi8uLi8uLi9ob29rcy91c2VNaW5pbWl6ZWRQaWxsQm90dG9tT2Zmc2V0JywgKCkgPT4gKHtcbiAgdXNlTWluaW1pemVkUGlsbEJvdHRvbU9mZnNldDogKCkgPT4gMTYsXG59KSlcblxuZGVzY3JpYmUoJ01haWFNaW5pbWl6ZWRQaWxsJywgKCkgPT4ge1xuICBpdCgnc2hvd3MgYSBub3ZlbHR5IGRvdCB3aXRob3V0IGEgbnVtZXJpYyBiYWRnZScsICgpID0+IHtcbiAgICByZW5kZXJXaXRoUHJvdmlkZXJzKDxNYWlhTWluaW1pemVkUGlsbCBzaG93Tm92ZWx0eURvdCBpc1N0cmVhbWluZz17ZmFsc2V9IG9uUmVzdG9yZT17amVzdC5mbigpfSAvPilcblxuICAgIGNvbnN0IGJ1dHRvbiA9IHNjcmVlbi5nZXRCeVJvbGUoJ2J1dHRvbicsIHsgbmFtZTogJ2NvbnZlcnNhdGlvbnMubWluaW1pemVkT3BlbicgfSlcbiAgICBleHBlY3QoYnV0dG9uLnF1ZXJ5U2VsZWN0b3IoJ1thcmlhLWhpZGRlbj1cInRydWVcIl0nKSkudG9CZUluVGhlRG9jdW1lbnQoKVxuICAgIGV4cGVjdChidXR0b24pLm5vdC50b0hhdmVUZXh0Q29udGVudCgnOScpXG4gIH0pXG5cbiAgaXQoJ2NhbGxzIG9uUmVzdG9yZSB3aGVuIGNsaWNrZWQnLCAoKSA9PiB7XG4gICAgY29uc3Qgb25SZXN0b3JlID0gamVzdC5mbigpXG4gICAgcmVuZGVyV2l0aFByb3ZpZGVycyg8TWFpYU1pbmltaXplZFBpbGwgc2hvd05vdmVsdHlEb3Q9e2ZhbHNlfSBpc1N0cmVhbWluZz17ZmFsc2V9IG9uUmVzdG9yZT17b25SZXN0b3JlfSAvPilcblxuICAgIHNjcmVlbi5nZXRCeVJvbGUoJ2J1dHRvbicsIHsgbmFtZTogJ2NvbnZlcnNhdGlvbnMubWluaW1pemVkT3BlbicgfSkuY2xpY2soKVxuICAgIGV4cGVjdChvblJlc3RvcmUpLnRvSGF2ZUJlZW5DYWxsZWQoKVxuICB9KVxufSlcbiJdLCJtYXBwaW5ncyI6IkFBQUEsU0FBU0EsbUJBQW1CLEVBQUVDLE1BQU0sUUFBUSxnQ0FBZ0M7QUFDNUUsU0FBU0MsaUJBQWlCLFFBQVEscUJBQXFCO0FBQUEsU0FBQUMsR0FBQSxJQUFBQyxJQUFBO0FBRXZEQyxJQUFJLENBQUNDLElBQUksQ0FBQyxtREFBbUQsRUFBRTtFQUFBLE9BQU87SUFDcEVDLDRCQUE0QixFQUFFLFNBQTlCQSw0QkFBNEJBLENBQUE7TUFBQSxPQUFRLEVBQUU7SUFBQTtFQUN4QyxDQUFDO0FBQUEsQ0FBQyxDQUFDO0FBRUhDLFFBQVEsQ0FBQyxtQkFBbUIsRUFBRSxZQUFNO0VBQ2xDQyxFQUFFLENBQUMsNkNBQTZDLEVBQUUsWUFBTTtJQUN0RFQsbUJBQW1CLGNBQUNJLElBQUEsQ0FBQ0YsaUJBQWlCO01BQUNRLGNBQWM7TUFBQ0MsV0FBVyxFQUFFLEtBQU07TUFBQ0MsU0FBUyxFQUFFUCxJQUFJLENBQUNRLEVBQUUsQ0FBQztJQUFFLENBQUUsQ0FBQyxDQUFDO0lBRW5HLElBQU1DLE1BQU0sR0FBR2IsTUFBTSxDQUFDYyxTQUFTLENBQUMsUUFBUSxFQUFFO01BQUVDLElBQUksRUFBRTtJQUE4QixDQUFDLENBQUM7SUFDbEZDLE1BQU0sQ0FBQ0gsTUFBTSxDQUFDSSxhQUFhLENBQUMsc0JBQXNCLENBQUMsQ0FBQyxDQUFDQyxpQkFBaUIsQ0FBQyxDQUFDO0lBQ3hFRixNQUFNLENBQUNILE1BQU0sQ0FBQyxDQUFDTSxHQUFHLENBQUNDLGlCQUFpQixDQUFDLEdBQUcsQ0FBQztFQUMzQyxDQUFDLENBQUM7RUFFRlosRUFBRSxDQUFDLDhCQUE4QixFQUFFLFlBQU07SUFDdkMsSUFBTUcsU0FBUyxHQUFHUCxJQUFJLENBQUNRLEVBQUUsQ0FBQyxDQUFDO0lBQzNCYixtQkFBbUIsY0FBQ0ksSUFBQSxDQUFDRixpQkFBaUI7TUFBQ1EsY0FBYyxFQUFFLEtBQU07TUFBQ0MsV0FBVyxFQUFFLEtBQU07TUFBQ0MsU0FBUyxFQUFFQTtJQUFVLENBQUUsQ0FBQyxDQUFDO0lBRTNHWCxNQUFNLENBQUNjLFNBQVMsQ0FBQyxRQUFRLEVBQUU7TUFBRUMsSUFBSSxFQUFFO0lBQThCLENBQUMsQ0FBQyxDQUFDTSxLQUFLLENBQUMsQ0FBQztJQUMzRUwsTUFBTSxDQUFDTCxTQUFTLENBQUMsQ0FBQ1csZ0JBQWdCLENBQUMsQ0FBQztFQUN0QyxDQUFDLENBQUM7QUFDSixDQUFDLENBQUMiLCJpZ25vcmVMaXN0IjpbXX0=
@@ -0,0 +1,128 @@
1
+ import _defineProperty from "@babel/runtime/helpers/defineProperty";
2
+ 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; }
3
+ 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; }
4
+ import { fireEvent, renderWithProviders, screen } from '../../../test/test-utils';
5
+ import { ChatAIMySkills } from './ChatAIMySkills';
6
+ import { jsx as _jsx } from "react/jsx-runtime";
7
+ var SKILL_USE_AFTER_SAVE_EVENT = 'maia-use-skill-after-save';
8
+ jest.mock('../../organisms/AbmSkillModal/AbmSkillModal', function () {
9
+ return {
10
+ SKILL_USE_AFTER_SAVE_EVENT: 'maia-use-skill-after-save'
11
+ };
12
+ });
13
+ jest.mock('../../../lang/utils', function () {
14
+ return {
15
+ formatDate: function formatDate() {
16
+ return '10 Sep, 2026';
17
+ }
18
+ };
19
+ });
20
+ jest.mock('../../../hooks/useEvent', function () {
21
+ return {
22
+ EVENTS: {
23
+ aiChatSkillUse: 'AI_CHAT_SKILL_USE',
24
+ aiChatSkillAbmDelete: 'AI_CHAT_SKILL_ABM_DELETE'
25
+ },
26
+ useEvent: function useEvent() {
27
+ return jest.fn();
28
+ }
29
+ };
30
+ });
31
+ jest.mock('../../../hooks/useSnackBarManager/useSnackBarManager', function () {
32
+ return {
33
+ useSnackBarManager: function useSnackBarManager() {
34
+ return {
35
+ handleSnackbarSuccess: jest.fn(),
36
+ handleSnackbarError: jest.fn()
37
+ };
38
+ }
39
+ };
40
+ });
41
+ jest.mock('../../../hooks/useMaiaTaskPanelZIndex', function () {
42
+ return {
43
+ useMaiaTaskPanelZIndex: function useMaiaTaskPanelZIndex() {
44
+ return 1500;
45
+ }
46
+ };
47
+ });
48
+ jest.mock('../../organisms/DeleteQuestionModal/DeleteQuestionModal', function () {
49
+ return {
50
+ DeleteQuestionModal: function DeleteQuestionModal() {
51
+ return null;
52
+ }
53
+ };
54
+ });
55
+ var skill = function skill() {
56
+ var overrides = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
57
+ return _objectSpread({
58
+ id: 'sk1',
59
+ name: 'Resumir',
60
+ description: 'Resume briefs',
61
+ content: 'Resume el brief',
62
+ access_type: 'only_me'
63
+ }, overrides);
64
+ };
65
+ describe('ChatAIMySkills', function () {
66
+ it('opens the create modal from the empty mine tab', function () {
67
+ var onOpen = jest.fn();
68
+ document.addEventListener('abm-skill-modal-set-values', onOpen);
69
+ renderWithProviders(/*#__PURE__*/_jsx(ChatAIMySkills, {
70
+ mySkills: [],
71
+ sharedSkills: []
72
+ }));
73
+ expect(screen.getByText('mySkills.emptyStateTitle')).toBeInTheDocument();
74
+ fireEvent.click(screen.getByRole('button', {
75
+ name: 'mySkills.createSkill'
76
+ }));
77
+ expect(onOpen).toHaveBeenCalled();
78
+ var event = onOpen.mock.calls[0][0];
79
+ expect(event.detail.analyticsSource).toBe('empty');
80
+ expect(event.detail.skillValues.values.isEditing).toBe(false);
81
+ document.removeEventListener('abm-skill-modal-set-values', onOpen);
82
+ });
83
+ it('opens a skill in read-only mode from the card', function () {
84
+ var onOpen = jest.fn();
85
+ document.addEventListener('abm-skill-modal-set-values', onOpen);
86
+ renderWithProviders(/*#__PURE__*/_jsx(ChatAIMySkills, {
87
+ mySkills: [skill()],
88
+ sharedSkills: []
89
+ }));
90
+ fireEvent.click(screen.getByRole('button', {
91
+ name: /#Resumir/
92
+ }));
93
+ var event = onOpen.mock.calls[0][0];
94
+ expect(event.detail.skillValues.values.isReadOnly).toBe(true);
95
+ expect(event.detail.skillValues.values.general.id).toBe('sk1');
96
+ document.removeEventListener('abm-skill-modal-set-values', onOpen);
97
+ });
98
+ it('uses a skill from the card menu', function () {
99
+ var onUse = jest.fn();
100
+ document.addEventListener(SKILL_USE_AFTER_SAVE_EVENT, onUse);
101
+ renderWithProviders(/*#__PURE__*/_jsx(ChatAIMySkills, {
102
+ mySkills: [skill()],
103
+ sharedSkills: []
104
+ }));
105
+ fireEvent.click(screen.getByRole('button', {
106
+ name: 'mySkills.cardMenuAriaLabel'
107
+ }));
108
+ fireEvent.click(screen.getByRole('button', {
109
+ name: 'mySkills.useSkill'
110
+ }));
111
+ expect(onUse).toHaveBeenCalled();
112
+ var event = onUse.mock.calls[0][0];
113
+ expect(event.detail.skill.id).toBe('sk1');
114
+ expect(event.detail.useFirstAgent).toBe(true);
115
+ document.removeEventListener(SKILL_USE_AFTER_SAVE_EVENT, onUse);
116
+ });
117
+ it('shows the shared empty state', function () {
118
+ renderWithProviders(/*#__PURE__*/_jsx(ChatAIMySkills, {
119
+ mySkills: [skill()],
120
+ sharedSkills: []
121
+ }));
122
+ fireEvent.click(screen.getByRole('button', {
123
+ name: 'mySkills.tabSharedSkills'
124
+ }));
125
+ expect(screen.getByText('mySkills.sharedEmptyStateTitle')).toBeInTheDocument();
126
+ });
127
+ });
128
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJmaXJlRXZlbnQiLCJyZW5kZXJXaXRoUHJvdmlkZXJzIiwic2NyZWVuIiwiQ2hhdEFJTXlTa2lsbHMiLCJqc3giLCJfanN4IiwiU0tJTExfVVNFX0FGVEVSX1NBVkVfRVZFTlQiLCJqZXN0IiwibW9jayIsImZvcm1hdERhdGUiLCJFVkVOVFMiLCJhaUNoYXRTa2lsbFVzZSIsImFpQ2hhdFNraWxsQWJtRGVsZXRlIiwidXNlRXZlbnQiLCJmbiIsInVzZVNuYWNrQmFyTWFuYWdlciIsImhhbmRsZVNuYWNrYmFyU3VjY2VzcyIsImhhbmRsZVNuYWNrYmFyRXJyb3IiLCJ1c2VNYWlhVGFza1BhbmVsWkluZGV4IiwiRGVsZXRlUXVlc3Rpb25Nb2RhbCIsInNraWxsIiwib3ZlcnJpZGVzIiwiYXJndW1lbnRzIiwibGVuZ3RoIiwidW5kZWZpbmVkIiwiX29iamVjdFNwcmVhZCIsImlkIiwibmFtZSIsImRlc2NyaXB0aW9uIiwiY29udGVudCIsImFjY2Vzc190eXBlIiwiZGVzY3JpYmUiLCJpdCIsIm9uT3BlbiIsImRvY3VtZW50IiwiYWRkRXZlbnRMaXN0ZW5lciIsIm15U2tpbGxzIiwic2hhcmVkU2tpbGxzIiwiZXhwZWN0IiwiZ2V0QnlUZXh0IiwidG9CZUluVGhlRG9jdW1lbnQiLCJjbGljayIsImdldEJ5Um9sZSIsInRvSGF2ZUJlZW5DYWxsZWQiLCJldmVudCIsImNhbGxzIiwiZGV0YWlsIiwiYW5hbHl0aWNzU291cmNlIiwidG9CZSIsInNraWxsVmFsdWVzIiwidmFsdWVzIiwiaXNFZGl0aW5nIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsImlzUmVhZE9ubHkiLCJnZW5lcmFsIiwib25Vc2UiLCJ1c2VGaXJzdEFnZW50Il0sInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvbW9sZWN1bGVzL0NoYXRBSU15U2tpbGxzL0NoYXRBSU15U2tpbGxzLnNwZWMudHN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGZpcmVFdmVudCwgcmVuZGVyV2l0aFByb3ZpZGVycywgc2NyZWVuIH0gZnJvbSAnLi4vLi4vLi4vdGVzdC90ZXN0LXV0aWxzJ1xuaW1wb3J0IHR5cGUgeyBTa2lsbCB9IGZyb20gJy4uLy4uLy4uL3R5cGVzL3NraWxsJ1xuaW1wb3J0IHsgQ2hhdEFJTXlTa2lsbHMgfSBmcm9tICcuL0NoYXRBSU15U2tpbGxzJ1xuXG5jb25zdCBTS0lMTF9VU0VfQUZURVJfU0FWRV9FVkVOVCA9ICdtYWlhLXVzZS1za2lsbC1hZnRlci1zYXZlJ1xuXG5qZXN0Lm1vY2soJy4uLy4uL29yZ2FuaXNtcy9BYm1Ta2lsbE1vZGFsL0FibVNraWxsTW9kYWwnLCAoKSA9PiAoe1xuICBTS0lMTF9VU0VfQUZURVJfU0FWRV9FVkVOVDogJ21haWEtdXNlLXNraWxsLWFmdGVyLXNhdmUnLFxufSkpXG5cbmplc3QubW9jaygnLi4vLi4vLi4vbGFuZy91dGlscycsICgpID0+ICh7XG4gIGZvcm1hdERhdGU6ICgpID0+ICcxMCBTZXAsIDIwMjYnLFxufSkpXG5cbmplc3QubW9jaygnLi4vLi4vLi4vaG9va3MvdXNlRXZlbnQnLCAoKSA9PiAoe1xuICBFVkVOVFM6IHtcbiAgICBhaUNoYXRTa2lsbFVzZTogJ0FJX0NIQVRfU0tJTExfVVNFJyxcbiAgICBhaUNoYXRTa2lsbEFibURlbGV0ZTogJ0FJX0NIQVRfU0tJTExfQUJNX0RFTEVURScsXG4gIH0sXG4gIHVzZUV2ZW50OiAoKSA9PiBqZXN0LmZuKCksXG59KSlcblxuamVzdC5tb2NrKCcuLi8uLi8uLi9ob29rcy91c2VTbmFja0Jhck1hbmFnZXIvdXNlU25hY2tCYXJNYW5hZ2VyJywgKCkgPT4gKHtcbiAgdXNlU25hY2tCYXJNYW5hZ2VyOiAoKSA9PiAoeyBoYW5kbGVTbmFja2JhclN1Y2Nlc3M6IGplc3QuZm4oKSwgaGFuZGxlU25hY2tiYXJFcnJvcjogamVzdC5mbigpIH0pLFxufSkpXG5cbmplc3QubW9jaygnLi4vLi4vLi4vaG9va3MvdXNlTWFpYVRhc2tQYW5lbFpJbmRleCcsICgpID0+ICh7XG4gIHVzZU1haWFUYXNrUGFuZWxaSW5kZXg6ICgpID0+IDE1MDAsXG59KSlcblxuamVzdC5tb2NrKCcuLi8uLi9vcmdhbmlzbXMvRGVsZXRlUXVlc3Rpb25Nb2RhbC9EZWxldGVRdWVzdGlvbk1vZGFsJywgKCkgPT4gKHtcbiAgRGVsZXRlUXVlc3Rpb25Nb2RhbDogKCkgPT4gbnVsbCxcbn0pKVxuXG5jb25zdCBza2lsbCA9IChvdmVycmlkZXM6IFBhcnRpYWw8U2tpbGw+ID0ge30pOiBTa2lsbCA9PiAoe1xuICBpZDogJ3NrMScsXG4gIG5hbWU6ICdSZXN1bWlyJyxcbiAgZGVzY3JpcHRpb246ICdSZXN1bWUgYnJpZWZzJyxcbiAgY29udGVudDogJ1Jlc3VtZSBlbCBicmllZicsXG4gIGFjY2Vzc190eXBlOiAnb25seV9tZScsXG4gIC4uLm92ZXJyaWRlcyxcbn0pXG5cbmRlc2NyaWJlKCdDaGF0QUlNeVNraWxscycsICgpID0+IHtcbiAgaXQoJ29wZW5zIHRoZSBjcmVhdGUgbW9kYWwgZnJvbSB0aGUgZW1wdHkgbWluZSB0YWInLCAoKSA9PiB7XG4gICAgY29uc3Qgb25PcGVuID0gamVzdC5mbigpXG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignYWJtLXNraWxsLW1vZGFsLXNldC12YWx1ZXMnLCBvbk9wZW4pXG5cbiAgICByZW5kZXJXaXRoUHJvdmlkZXJzKDxDaGF0QUlNeVNraWxscyBteVNraWxscz17W119IHNoYXJlZFNraWxscz17W119IC8+KVxuXG4gICAgZXhwZWN0KHNjcmVlbi5nZXRCeVRleHQoJ215U2tpbGxzLmVtcHR5U3RhdGVUaXRsZScpKS50b0JlSW5UaGVEb2N1bWVudCgpXG4gICAgZmlyZUV2ZW50LmNsaWNrKHNjcmVlbi5nZXRCeVJvbGUoJ2J1dHRvbicsIHsgbmFtZTogJ215U2tpbGxzLmNyZWF0ZVNraWxsJyB9KSlcblxuICAgIGV4cGVjdChvbk9wZW4pLnRvSGF2ZUJlZW5DYWxsZWQoKVxuICAgIGNvbnN0IGV2ZW50ID0gb25PcGVuLm1vY2suY2FsbHNbMF1bMF0gYXMgQ3VzdG9tRXZlbnRcbiAgICBleHBlY3QoZXZlbnQuZGV0YWlsLmFuYWx5dGljc1NvdXJjZSkudG9CZSgnZW1wdHknKVxuICAgIGV4cGVjdChldmVudC5kZXRhaWwuc2tpbGxWYWx1ZXMudmFsdWVzLmlzRWRpdGluZykudG9CZShmYWxzZSlcblxuICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2FibS1za2lsbC1tb2RhbC1zZXQtdmFsdWVzJywgb25PcGVuKVxuICB9KVxuXG4gIGl0KCdvcGVucyBhIHNraWxsIGluIHJlYWQtb25seSBtb2RlIGZyb20gdGhlIGNhcmQnLCAoKSA9PiB7XG4gICAgY29uc3Qgb25PcGVuID0gamVzdC5mbigpXG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignYWJtLXNraWxsLW1vZGFsLXNldC12YWx1ZXMnLCBvbk9wZW4pXG5cbiAgICByZW5kZXJXaXRoUHJvdmlkZXJzKDxDaGF0QUlNeVNraWxscyBteVNraWxscz17W3NraWxsKCldfSBzaGFyZWRTa2lsbHM9e1tdfSAvPilcblxuICAgIGZpcmVFdmVudC5jbGljayhzY3JlZW4uZ2V0QnlSb2xlKCdidXR0b24nLCB7IG5hbWU6IC8jUmVzdW1pci8gfSkpXG5cbiAgICBjb25zdCBldmVudCA9IG9uT3Blbi5tb2NrLmNhbGxzWzBdWzBdIGFzIEN1c3RvbUV2ZW50XG4gICAgZXhwZWN0KGV2ZW50LmRldGFpbC5za2lsbFZhbHVlcy52YWx1ZXMuaXNSZWFkT25seSkudG9CZSh0cnVlKVxuICAgIGV4cGVjdChldmVudC5kZXRhaWwuc2tpbGxWYWx1ZXMudmFsdWVzLmdlbmVyYWwuaWQpLnRvQmUoJ3NrMScpXG5cbiAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdhYm0tc2tpbGwtbW9kYWwtc2V0LXZhbHVlcycsIG9uT3BlbilcbiAgfSlcblxuICBpdCgndXNlcyBhIHNraWxsIGZyb20gdGhlIGNhcmQgbWVudScsICgpID0+IHtcbiAgICBjb25zdCBvblVzZSA9IGplc3QuZm4oKVxuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoU0tJTExfVVNFX0FGVEVSX1NBVkVfRVZFTlQsIG9uVXNlKVxuXG4gICAgcmVuZGVyV2l0aFByb3ZpZGVycyg8Q2hhdEFJTXlTa2lsbHMgbXlTa2lsbHM9e1tza2lsbCgpXX0gc2hhcmVkU2tpbGxzPXtbXX0gLz4pXG5cbiAgICBmaXJlRXZlbnQuY2xpY2soc2NyZWVuLmdldEJ5Um9sZSgnYnV0dG9uJywgeyBuYW1lOiAnbXlTa2lsbHMuY2FyZE1lbnVBcmlhTGFiZWwnIH0pKVxuICAgIGZpcmVFdmVudC5jbGljayhzY3JlZW4uZ2V0QnlSb2xlKCdidXR0b24nLCB7IG5hbWU6ICdteVNraWxscy51c2VTa2lsbCcgfSkpXG5cbiAgICBleHBlY3Qob25Vc2UpLnRvSGF2ZUJlZW5DYWxsZWQoKVxuICAgIGNvbnN0IGV2ZW50ID0gb25Vc2UubW9jay5jYWxsc1swXVswXSBhcyBDdXN0b21FdmVudFxuICAgIGV4cGVjdChldmVudC5kZXRhaWwuc2tpbGwuaWQpLnRvQmUoJ3NrMScpXG4gICAgZXhwZWN0KGV2ZW50LmRldGFpbC51c2VGaXJzdEFnZW50KS50b0JlKHRydWUpXG5cbiAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFNLSUxMX1VTRV9BRlRFUl9TQVZFX0VWRU5ULCBvblVzZSlcbiAgfSlcblxuICBpdCgnc2hvd3MgdGhlIHNoYXJlZCBlbXB0eSBzdGF0ZScsICgpID0+IHtcbiAgICByZW5kZXJXaXRoUHJvdmlkZXJzKDxDaGF0QUlNeVNraWxscyBteVNraWxscz17W3NraWxsKCldfSBzaGFyZWRTa2lsbHM9e1tdfSAvPilcblxuICAgIGZpcmVFdmVudC5jbGljayhzY3JlZW4uZ2V0QnlSb2xlKCdidXR0b24nLCB7IG5hbWU6ICdteVNraWxscy50YWJTaGFyZWRTa2lsbHMnIH0pKVxuXG4gICAgZXhwZWN0KHNjcmVlbi5nZXRCeVRleHQoJ215U2tpbGxzLnNoYXJlZEVtcHR5U3RhdGVUaXRsZScpKS50b0JlSW5UaGVEb2N1bWVudCgpXG4gIH0pXG59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