botframework-webchat-component 4.18.1 → 4.19.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 (1389) hide show
  1. package/LICENSE +21 -0
  2. package/boot/deprecated/component.js +7 -0
  3. package/boot/deprecated/component.mjs +5 -0
  4. package/boot/deprecated/decorator.js +7 -0
  5. package/boot/deprecated/decorator.mjs +5 -0
  6. package/boot/deprecated/hook.js +7 -0
  7. package/boot/deprecated/hook.mjs +5 -0
  8. package/boot/deprecated/internal.js +7 -0
  9. package/boot/deprecated/internal.mjs +5 -0
  10. package/component.js +3 -0
  11. package/decorator.js +3 -0
  12. package/dist/TextBox-BEU2rUID.d.mts +46 -0
  13. package/dist/TextBox-BEU2rUID.d.ts +46 -0
  14. package/dist/_dtsroll-chunks/BlpMO3PT-empty-object.d.ts +34 -0
  15. package/dist/_dtsroll-chunks/Cha1SOtx-botframework-webchat-styles.react.d.ts +38 -0
  16. package/dist/_dtsroll-chunks/DP9nda2m-botframework-webchat-react-hooks.d.ts +19 -0
  17. package/dist/botframework-webchat-component.component.css +2 -0
  18. package/dist/botframework-webchat-component.component.css.map +1 -0
  19. package/dist/botframework-webchat-component.component.d.mts +9 -0
  20. package/dist/botframework-webchat-component.component.d.ts +9 -0
  21. package/dist/botframework-webchat-component.component.js +2 -0
  22. package/dist/botframework-webchat-component.component.js.map +1 -0
  23. package/dist/botframework-webchat-component.component.mjs +2 -0
  24. package/dist/botframework-webchat-component.component.mjs.map +1 -0
  25. package/dist/botframework-webchat-component.css +2 -0
  26. package/dist/botframework-webchat-component.css.map +1 -0
  27. package/dist/botframework-webchat-component.d.mts +64 -2312
  28. package/dist/botframework-webchat-component.d.ts +90 -0
  29. package/dist/botframework-webchat-component.decorator.css +2 -0
  30. package/dist/botframework-webchat-component.decorator.css.map +1 -0
  31. package/dist/botframework-webchat-component.decorator.d.mts +28 -0
  32. package/dist/botframework-webchat-component.decorator.d.ts +28 -0
  33. package/dist/botframework-webchat-component.decorator.js +2 -0
  34. package/dist/botframework-webchat-component.decorator.js.map +1 -0
  35. package/dist/botframework-webchat-component.decorator.mjs +2 -0
  36. package/dist/botframework-webchat-component.decorator.mjs.map +1 -0
  37. package/dist/botframework-webchat-component.hook.css +2 -0
  38. package/dist/botframework-webchat-component.hook.css.map +1 -0
  39. package/dist/botframework-webchat-component.hook.d.mts +8 -0
  40. package/dist/botframework-webchat-component.hook.d.ts +8 -0
  41. package/dist/botframework-webchat-component.hook.js +2 -0
  42. package/dist/botframework-webchat-component.hook.js.map +1 -0
  43. package/dist/botframework-webchat-component.hook.mjs +2 -0
  44. package/dist/botframework-webchat-component.hook.mjs.map +1 -0
  45. package/dist/botframework-webchat-component.internal.css +2 -0
  46. package/dist/botframework-webchat-component.internal.css.map +1 -0
  47. package/dist/botframework-webchat-component.internal.d.mts +68 -3
  48. package/dist/botframework-webchat-component.internal.d.ts +70 -0
  49. package/dist/botframework-webchat-component.internal.js +2 -0
  50. package/dist/botframework-webchat-component.internal.js.map +1 -0
  51. package/dist/botframework-webchat-component.internal.mjs +1 -2
  52. package/dist/botframework-webchat-component.js +2 -0
  53. package/dist/botframework-webchat-component.js.map +1 -0
  54. package/dist/botframework-webchat-component.mjs +1 -11
  55. package/dist/botframework-webchat-component.mjs.map +1 -1
  56. package/dist/chunk-2R7BJ63Z.js +2 -0
  57. package/dist/chunk-2R7BJ63Z.js.map +1 -0
  58. package/dist/chunk-A4NDFSZM.mjs +77 -0
  59. package/dist/chunk-A4NDFSZM.mjs.map +1 -0
  60. package/dist/chunk-CNTMOACS.mjs +2 -0
  61. package/dist/chunk-CNTMOACS.mjs.map +1 -0
  62. package/dist/chunk-GTOP3WPD.mjs +2 -0
  63. package/dist/chunk-GTOP3WPD.mjs.map +1 -0
  64. package/dist/chunk-H5YR7OLF.js +2 -0
  65. package/dist/chunk-H5YR7OLF.js.map +1 -0
  66. package/dist/chunk-I6DJ35K3.mjs +2 -0
  67. package/dist/chunk-I6DJ35K3.mjs.map +1 -0
  68. package/dist/chunk-I6EXXZUN.js +2 -0
  69. package/dist/chunk-I6EXXZUN.js.map +1 -0
  70. package/dist/chunk-LVVCSDZ4.mjs +2 -0
  71. package/dist/chunk-LVVCSDZ4.mjs.map +1 -0
  72. package/dist/chunk-MOJMHOVH.js +2 -0
  73. package/dist/chunk-MOJMHOVH.js.map +1 -0
  74. package/dist/chunk-TMUNLKZW.js +2 -0
  75. package/dist/chunk-TMUNLKZW.js.map +1 -0
  76. package/dist/chunk-TYPS3H4I.mjs +2 -0
  77. package/dist/chunk-TYPS3H4I.mjs.map +1 -0
  78. package/dist/chunk-U6OWCHTQ.js +2 -0
  79. package/dist/chunk-U6OWCHTQ.js.map +1 -0
  80. package/dist/chunk-UKBRB4EA.mjs +2 -0
  81. package/dist/chunk-UKBRB4EA.mjs.map +1 -0
  82. package/dist/chunk-VDF6GQAL.js +77 -0
  83. package/dist/chunk-VDF6GQAL.js.map +1 -0
  84. package/dist/component-BtSxgJS5.d.mts +539 -0
  85. package/dist/component-Fyy8iCRE.d.ts +539 -0
  86. package/dist/hook-B7KuomGm.d.mts +2259 -0
  87. package/dist/hook-o9AgRedV.d.ts +2259 -0
  88. package/dist/metafile-cjs.json +1 -0
  89. package/dist/metafile-esm.json +1 -1
  90. package/hook.js +3 -0
  91. package/internal.js +1 -1
  92. package/package.json +146 -81
  93. package/src/Activity/AttachmentRow.tsx +56 -0
  94. package/src/Activity/Avatar.tsx +20 -23
  95. package/src/Activity/Bubble.module.css +131 -0
  96. package/src/Activity/Bubble.tsx +45 -70
  97. package/src/Activity/CarouselFilmStrip.js +31 -112
  98. package/src/Activity/CarouselFilmStrip.module.css +155 -0
  99. package/src/Activity/CarouselFilmStripAttachment.js +14 -15
  100. package/src/Activity/CarouselFilmStripAttachment.module.css +38 -0
  101. package/src/Activity/CarouselLayout.js +16 -17
  102. package/src/Activity/CarouselLayout.module.css +30 -0
  103. package/src/Activity/CodeBlockContent.module.css +40 -0
  104. package/src/Activity/CodeBlockContent.tsx +42 -0
  105. package/src/Activity/CollapsibleContent.module.css +43 -0
  106. package/src/Activity/CollapsibleContent.tsx +68 -0
  107. package/src/Activity/SayAlt.module.css +4 -0
  108. package/src/Activity/SayAlt.tsx +25 -0
  109. package/src/Activity/Speak.tsx +84 -42
  110. package/src/Activity/StackedLayout.module.css +233 -0
  111. package/src/Activity/StackedLayout.tsx +265 -198
  112. package/src/Activity/StackedLayoutMain.tsx +36 -0
  113. package/src/Activity/StackedLayoutMessageStatus.tsx +57 -0
  114. package/src/Activity/StackedLayoutRoot.tsx +71 -0
  115. package/src/Activity/StackedLayoutStatus.tsx +36 -0
  116. package/src/Activity/private/MessageStatusLoader.module.css +18 -0
  117. package/src/Activity/private/MessageStatusLoader.tsx +27 -0
  118. package/src/ActivityDebug/RestrictedActivityDebugAPI.ts +15 -0
  119. package/src/ActivityDebug/index.ts +1 -0
  120. package/src/ActivityFeedback/ActivityFeedback.tsx +88 -0
  121. package/src/ActivityFeedback/private/FeedbackForm.module.css +123 -0
  122. package/src/ActivityFeedback/private/FeedbackForm.tsx +83 -0
  123. package/src/ActivityFeedback/private/FeedbackVoteButton.tsx +88 -0
  124. package/src/ActivityFeedback/private/FeedbackVoteButtonBar.tsx +40 -0
  125. package/src/ActivityFeedback/private/ThumbButton.Image.tsx +35 -0
  126. package/src/ActivityFeedback/private/ThumbButton.module.css +91 -0
  127. package/src/ActivityFeedback/private/ThumbButton.tsx +103 -0
  128. package/src/ActivityFeedback/private/canActionResubmit.ts +6 -0
  129. package/src/ActivityFeedback/private/getDisclaimerFromFeedbackLoop.ts +10 -0
  130. package/src/ActivityFeedback/private/getDisclaimerFromReviewAction.ts +12 -0
  131. package/src/ActivityFeedback/private/hasFeedbackLoop.ts +42 -0
  132. package/src/ActivityFeedback/private/isActionRequireReview.ts +10 -0
  133. package/src/ActivityFeedback/providers/ActivityFeedbackComposer.tsx +372 -0
  134. package/src/ActivityFeedback/providers/private/ActivityFeedbackContext.ts +24 -0
  135. package/src/ActivityFeedback/providers/private/FocusPropagation.ts +10 -0
  136. package/src/ActivityFeedback/providers/useActivityFeedbackHooks.ts +6 -0
  137. package/src/ActivityStatus/AbsoluteTime.tsx +37 -0
  138. package/src/ActivityStatus/ActivityStatus.module.css +31 -0
  139. package/src/ActivityStatus/OthersActivityStatus.tsx +52 -53
  140. package/src/ActivityStatus/SelfActivityStatus.tsx +11 -8
  141. package/src/ActivityStatus/SendStatus/SendStatus.tsx +23 -23
  142. package/src/ActivityStatus/StatusSlot.tsx +17 -0
  143. package/src/ActivityStatus/Timestamp.tsx +17 -12
  144. package/src/ActivityStatus/private/Originator.tsx +33 -10
  145. package/src/ActivityStatus/private/RelativeTime.tsx +43 -0
  146. package/src/Assets/TypingAnimation.js +3 -1
  147. package/src/Attachment/AudioContent.tsx +20 -29
  148. package/src/Attachment/FileContent.tsx +46 -46
  149. package/src/Attachment/HTMLVideoContent.tsx +21 -27
  150. package/src/Attachment/ImageAttachment.tsx +58 -0
  151. package/src/Attachment/ImageContent.tsx +13 -27
  152. package/src/Attachment/Text/TextAttachment.tsx +38 -14
  153. package/src/Attachment/Text/TextContent.module.css +45 -0
  154. package/src/Attachment/Text/TextContent.tsx +40 -16
  155. package/src/Attachment/Text/private/ActivityButton.module.css +45 -0
  156. package/src/Attachment/Text/private/ActivityButton.tsx +71 -0
  157. package/src/Attachment/Text/private/ActivityCopyButton.module.css +45 -0
  158. package/src/Attachment/Text/private/ActivityCopyButton.tsx +109 -0
  159. package/src/Attachment/Text/private/ActivityViewCodeButton.tsx +66 -0
  160. package/src/Attachment/Text/private/CitationModal.module.css +9 -0
  161. package/src/Attachment/Text/private/CitationModalContent.tsx +28 -21
  162. package/src/Attachment/Text/private/CodeContent.tsx +44 -0
  163. package/src/Attachment/Text/private/MarkdownTextContent.tsx +223 -126
  164. package/src/Attachment/Text/private/Markdownable.tsx +39 -0
  165. package/src/Attachment/Text/private/MessageSensitivityLabel.tsx +47 -34
  166. package/src/Attachment/Text/private/PlainTextContent.tsx +24 -14
  167. package/src/Attachment/Text/private/ShieldIcon.tsx +52 -34
  168. package/src/Attachment/Text/private/ViewCodeDialog.module.css +59 -0
  169. package/src/Attachment/Text/private/isAIGeneratedActivity.ts +5 -0
  170. package/src/Attachment/VideoAttachment.js +1 -1
  171. package/src/Attachment/VideoContent.tsx +21 -27
  172. package/src/Attachment/VimeoContent.tsx +21 -25
  173. package/src/Attachment/YouTubeContent.tsx +21 -25
  174. package/src/Avatar/ImageAvatar.tsx +48 -0
  175. package/src/Avatar/InitialsAvatar.tsx +55 -0
  176. package/src/BasicConnectivityStatus.js +7 -7
  177. package/src/BasicToast.js +1 -1
  178. package/src/BasicToaster.js +47 -8
  179. package/src/BasicTranscript.tsx +402 -587
  180. package/src/BasicWebChat.tsx +28 -34
  181. package/src/BuiltInDecorator.tsx +17 -0
  182. package/src/ChatHistory/ChatHistoryBox.tsx +27 -0
  183. package/src/ChatHistory/ChatHistoryToolbar.tsx +36 -0
  184. package/src/ChatHistory/private/ScrollToEndButton.tsx +105 -0
  185. package/src/Composer.tsx +226 -128
  186. package/src/ConnectivityStatus/Connecting.tsx +77 -0
  187. package/src/Dictation.js +16 -24
  188. package/src/ErrorBox.tsx +54 -26
  189. package/src/Icon/ComponentIcon.module.css +113 -0
  190. package/src/Icon/ComponentIcon.tsx +59 -0
  191. package/src/Icon/index.ts +1 -0
  192. package/src/LinkDefinition/LinkDefinitionItem.tsx +51 -21
  193. package/src/LinkDefinition/LinkDefinitions.module.css +209 -0
  194. package/src/LinkDefinition/LinkDefinitions.tsx +84 -19
  195. package/src/LinkDefinition/index.ts +6 -4
  196. package/src/LinkDefinition/private/Badge.tsx +12 -1
  197. package/src/LinkDefinition/private/ItemBody.tsx +24 -15
  198. package/src/LinkDefinition/private/OpenInNewWindowIcon.tsx +20 -13
  199. package/src/LinkDefinition/private/extractHostnameWithSubdomain.spec.ts +2 -0
  200. package/src/LinkDefinition/private/extractHostnameWithSubdomain.ts +1 -1
  201. package/src/LiveRegion/LiveRegionActivity.tsx +18 -18
  202. package/src/LiveRegion/private/LiveRegionSuggestedActions.tsx +34 -25
  203. package/src/Middleware/Activity/defaultActivityPolymiddleware.tsx +104 -0
  204. package/src/Middleware/ActivityGrouping/createDefaultActivityGroupingDecoratorMiddleware.tsx +21 -0
  205. package/src/Middleware/ActivityGrouping/ui/LegacyActivityBridgeComposer.tsx +91 -0
  206. package/src/Middleware/ActivityGrouping/ui/PartGrouping/CollapsibleGrouping.module.css +76 -0
  207. package/src/Middleware/ActivityGrouping/ui/PartGrouping/CollapsibleGrouping.tsx +97 -0
  208. package/src/Middleware/ActivityGrouping/ui/PartGrouping/CollapsibleGroupingList.tsx +30 -0
  209. package/src/Middleware/ActivityGrouping/ui/PartGrouping/CollapsibleGroupingTitle.tsx +29 -0
  210. package/src/Middleware/ActivityGrouping/ui/PartGrouping/PartGrouping.tsx +52 -0
  211. package/src/Middleware/ActivityGrouping/ui/PartGrouping/private/PartGroupingActivity.module.css +29 -0
  212. package/src/Middleware/ActivityGrouping/ui/PartGrouping/private/PartGroupingActivity.tsx +258 -0
  213. package/src/Middleware/ActivityGrouping/ui/PartGrouping/private/usePartGroupingLogicalGroup.ts +41 -0
  214. package/src/Middleware/ActivityGrouping/ui/RenderActivity.tsx +37 -0
  215. package/src/Middleware/ActivityGrouping/ui/RenderActivityGrouping.tsx +41 -0
  216. package/src/Middleware/ActivityGrouping/ui/SenderGrouping/SenderGrouping.tsx +49 -0
  217. package/src/Middleware/ActivityGrouping/ui/SenderGrouping/private/SenderGroupingContext.ts +18 -0
  218. package/src/Middleware/ActivityGrouping/ui/SenderGrouping/private/useSenderGroupingContext.ts +6 -0
  219. package/src/Middleware/ActivityGrouping/ui/SenderGrouping/useFirstActivity.ts +6 -0
  220. package/src/Middleware/ActivityGrouping/ui/SenderGrouping/useLastActivity.ts +6 -0
  221. package/src/Middleware/ActivityGrouping/ui/StatusGrouping/StatusGrouping.tsx +49 -0
  222. package/src/Middleware/ActivityGrouping/ui/StatusGrouping/private/StatusGroupingContext.ts +18 -0
  223. package/src/Middleware/ActivityGrouping/ui/StatusGrouping/private/useStatusGroupingContext.ts +6 -0
  224. package/src/Middleware/ActivityGrouping/ui/StatusGrouping/useFirstActivity.ts +6 -0
  225. package/src/Middleware/ActivityGrouping/ui/StatusGrouping/useLastActivity.ts +6 -0
  226. package/src/Middleware/ActivityStatus/createTimestampMiddleware.tsx +2 -2
  227. package/src/Middleware/Avatar/DefaultAvatar.tsx +61 -0
  228. package/src/Middleware/Avatar/createDefaultAvatarPolymiddleware.tsx +22 -0
  229. package/src/Middleware/ScrollToEndButton/ScrollToEndButton.tsx +58 -0
  230. package/src/ReactWebChat.tsx +3 -8
  231. package/src/ScreenReaderText.tsx +27 -34
  232. package/src/SendBox/AttachmentBar/AttachmentBar.module.css +32 -0
  233. package/src/SendBox/AttachmentBar/AttachmentBar.tsx +71 -0
  234. package/src/SendBox/AttachmentBar/AttachmentBarItem.module.css +137 -0
  235. package/src/SendBox/AttachmentBar/AttachmentBarItem.tsx +103 -0
  236. package/src/SendBox/AttachmentBar/ItemDeleteButton.tsx +61 -0
  237. package/src/SendBox/AttachmentBar/ItemPreview.tsx +52 -0
  238. package/src/SendBox/AttachmentBar/Preview/FilePreview.module.css +35 -0
  239. package/src/SendBox/AttachmentBar/Preview/FilePreview.tsx +63 -0
  240. package/src/SendBox/AttachmentBar/Preview/ImagePreview.module.css +5 -0
  241. package/src/SendBox/AttachmentBar/Preview/ImagePreview.tsx +46 -0
  242. package/src/SendBox/AttachmentBar/Preview/sendBoxAttachment.ts +13 -0
  243. package/src/SendBox/AttachmentBar/index.ts +3 -0
  244. package/src/SendBox/AutoResizeTextArea.tsx +28 -64
  245. package/src/SendBox/BasicSendBox.tsx +99 -30
  246. package/src/SendBox/DictationInterims.tsx +32 -21
  247. package/src/SendBox/DropZone.tsx +64 -0
  248. package/src/SendBox/IconButton.tsx +32 -30
  249. package/src/SendBox/MicrophoneButton.tsx +29 -23
  250. package/src/SendBox/SendButton.tsx +26 -21
  251. package/src/SendBox/SuggestedAction.tsx +60 -72
  252. package/src/SendBox/SuggestedActions.tsx +6 -9
  253. package/src/SendBox/TextBox.tsx +57 -39
  254. package/src/SendBoxToolbar/Assets/AttachmentIcon.tsx +6 -23
  255. package/src/SendBoxToolbar/BasicSendBoxToolbar.tsx +4 -2
  256. package/src/SendBoxToolbar/UploadButton.tsx +47 -26
  257. package/src/Styles/CSSCustomPropertiesContainer.tsx +195 -0
  258. package/src/Styles/CustomPropertyNames.ts +66 -6
  259. package/src/Styles/StyleSet/ActivityButton.ts +49 -0
  260. package/src/Styles/StyleSet/ActivityCopyButton.ts +40 -0
  261. package/src/Styles/StyleSet/AudioAttachment.ts +3 -3
  262. package/src/Styles/StyleSet/Avatar.ts +4 -3
  263. package/src/Styles/StyleSet/CarouselFilmStrip.ts +9 -7
  264. package/src/Styles/StyleSet/CarouselFilmStripAttachment.ts +3 -4
  265. package/src/Styles/StyleSet/ChatHistoryBox.ts +22 -0
  266. package/src/Styles/StyleSet/CodeBlock.ts +39 -0
  267. package/src/Styles/StyleSet/CodeBlockCopyButton.ts +71 -0
  268. package/src/Styles/StyleSet/ErrorBox.ts +2 -2
  269. package/src/Styles/StyleSet/FileContent.ts +2 -1
  270. package/src/Styles/StyleSet/ImageAvatar.ts +8 -5
  271. package/src/Styles/StyleSet/InitialsAvatar.ts +4 -5
  272. package/src/Styles/StyleSet/LinkDefinitions.ts +17 -11
  273. package/src/Styles/StyleSet/MicrophoneButton.ts +1 -1
  274. package/src/Styles/StyleSet/ModalDialog.ts +14 -8
  275. package/src/Styles/StyleSet/RenderMarkdown.ts +35 -0
  276. package/src/Styles/StyleSet/ScrollToEndButton.ts +0 -11
  277. package/src/Styles/StyleSet/SendBox.ts +57 -7
  278. package/src/Styles/StyleSet/SendBoxButton.ts +7 -5
  279. package/src/Styles/StyleSet/SendBoxTextBox.ts +6 -1
  280. package/src/Styles/StyleSet/SendStatus.ts +12 -0
  281. package/src/Styles/StyleSet/SpinnerAnimation.ts +3 -1
  282. package/src/Styles/StyleSet/StackedLayout.ts +18 -9
  283. package/src/Styles/StyleSet/SuggestedAction.ts +1 -13
  284. package/src/Styles/StyleSet/TextContent.ts +17 -2
  285. package/src/Styles/StyleSet/ThumbButton.ts +77 -24
  286. package/src/Styles/StyleSet/Tooltip.ts +66 -0
  287. package/src/Styles/StyleSet/TypingAnimation.ts +3 -1
  288. package/src/Styles/StyleSet/ViewCodeDialog.ts +70 -0
  289. package/src/Styles/StyleSet/types/StyleSet.ts +11 -0
  290. package/src/Styles/createStyleSet.ts +14 -14
  291. package/src/TextArea/TextArea.module.css +75 -0
  292. package/src/TextArea/TextArea.tsx +126 -0
  293. package/src/TextArea/index.ts +1 -0
  294. package/src/Tooltip/index.ts +1 -0
  295. package/src/Tooltip/private/Tooltip.tsx +26 -0
  296. package/src/Transcript/ActivityRow.tsx +100 -39
  297. package/src/Transcript/ActivityTree.tsx +35 -0
  298. package/src/Transcript/FocusTrap.tsx +96 -38
  299. package/src/Transcript/LiveRegion/SendFailed.tsx +8 -10
  300. package/src/Transcript/LiveRegionTranscript.tsx +11 -62
  301. package/src/Transcript/TranscriptFocus/TranscriptActivityList.tsx +22 -0
  302. package/src/Transcript/TranscriptFocus/TranscriptFocus.module.css +117 -0
  303. package/src/Transcript/TranscriptFocus/TranscriptFocusArea.tsx +27 -0
  304. package/src/Transcript/TranscriptFocus/TranscriptFocusContent.tsx +34 -0
  305. package/src/Transcript/TranscriptFocus/TranscriptFocusContentActiveDescendant.tsx +26 -0
  306. package/src/Transcript/TranscriptFocus/TranscriptFocusContentBody.tsx +20 -0
  307. package/src/Transcript/TranscriptFocus/TranscriptFocusContentOverlay.tsx +20 -0
  308. package/src/Transcript/TranscriptFocus/TranscriptFocusIndicator.tsx +28 -0
  309. package/src/Transcript/TranscriptFocus/TranscriptFocusTerminator.tsx +42 -0
  310. package/src/Transcript/TranscriptFocus/TranscriptFocusTerminatorBody.tsx +20 -0
  311. package/src/Transcript/TranscriptFocus/TranscriptFocusTerminatorText.tsx +20 -0
  312. package/src/Transcript/TranscriptFocus/index.ts +25 -0
  313. package/src/Transcript/hooks/useRenderActivityProps.ts +88 -0
  314. package/src/Utils/AccessKeySink/Surface.tsx +63 -0
  315. package/src/Utils/AccessibleButton.tsx +64 -49
  316. package/src/Utils/AccessibleInputText.tsx +97 -106
  317. package/src/Utils/AccessibleTextArea.tsx +10 -41
  318. package/src/Utils/FixedWidthImage.tsx +60 -0
  319. package/src/Utils/FocusRedirector.tsx +31 -26
  320. package/src/Utils/InlineMarkdown.js +6 -1
  321. package/src/Utils/JSONLinkedData/__snapshots__/dereferenceBlankNodes.spec.ts.snap +17 -17
  322. package/src/Utils/JSONLinkedData/dereferenceBlankNodes.spec.ts +2 -0
  323. package/src/Utils/JSONLinkedData/dereferenceBlankNodes.ts +1 -1
  324. package/src/Utils/JSONLinkedData/getSafeOwnPropertyNames.ts +2 -2
  325. package/src/Utils/JSONLinkedData/isUnconnectedBlankNode.spec.ts +2 -0
  326. package/src/Utils/LocalizedString.tsx +3 -3
  327. package/src/Utils/addTargetBlankToHyperlinksMarkdown.spec.js +4 -4
  328. package/src/Utils/createIconComponent.tsx +126 -0
  329. package/src/Utils/downscaleImageToDataURL/downscaleImageToDataURLUsingBrowser.ts +2 -0
  330. package/src/Utils/downscaleImageToDataURL/downscaleImageToDataURLUsingWorker.ts +4 -4
  331. package/src/Utils/firstTabbableDescendant.js +0 -1
  332. package/src/Utils/orgSchema/getFirstBaseOfSoftwareSourceCode.ts +15 -0
  333. package/src/Utils/parseDocumentFragmentFromString.ts +9 -0
  334. package/src/Utils/readDataURIToBlob.ts +37 -0
  335. package/src/Utils/serializeDocumentFragmentIntoString.ts +3 -0
  336. package/src/Utils/supportPseudoClass.ts +1 -1
  337. package/src/Utils/tabbableElements.ts +7 -1
  338. package/src/Utils/textFormatToContentType.ts +14 -0
  339. package/src/Utils/updateMarkdownAttrs.spec.js +14 -14
  340. package/src/Utils/walkMarkdownTokens.spec.js +1 -1
  341. package/src/__tests__/addMetaTag.spec.js +8 -0
  342. package/src/__tests__/addMetaTag.spec.mjs +8 -0
  343. package/src/boot/component.ts +45 -0
  344. package/src/boot/decorator.ts +1 -0
  345. package/src/boot/hook.ts +118 -0
  346. package/src/boot/internal.ts +15 -0
  347. package/src/buildInfo.ts +9 -0
  348. package/src/decorator/index.ts +3 -0
  349. package/src/decorator/private/BorderFlair.module.css +566 -0
  350. package/src/decorator/private/BorderFlair.tsx +39 -0
  351. package/src/decorator/private/BorderLoader.module.css +53 -0
  352. package/src/decorator/private/BorderLoader.tsx +24 -0
  353. package/src/decorator/private/WebChatDecorator.tsx +64 -0
  354. package/src/decorator/stylesheet/DecoratorStylesheet.tsx +33 -0
  355. package/src/decorator/stylesheet/createDecoratorStyleElements.ts +8 -0
  356. package/src/env.d.ts +11 -0
  357. package/src/hooks/RenderMarkdown.module.css +102 -0
  358. package/src/hooks/index.ts +4 -0
  359. package/src/hooks/internal/UITracker.js +1 -1
  360. package/src/hooks/internal/WebChatUIContext.ts +19 -1
  361. package/src/hooks/internal/codeHighlighter/index.ts +3 -0
  362. package/src/hooks/internal/codeHighlighter/private/CodeHighlighterComposer.tsx +32 -0
  363. package/src/hooks/internal/codeHighlighter/private/createCodeHighlighterComposer.tsx +32 -0
  364. package/src/hooks/internal/codeHighlighter/private/defaultHighlightCode.tsx +22 -0
  365. package/src/hooks/internal/createWaitUntilable.spec.ts +4 -2
  366. package/src/hooks/internal/createWaitUntilable.ts +1 -1
  367. package/src/hooks/internal/private/createOnEventShim.spec.ts +2 -0
  368. package/src/hooks/internal/styleToEmotionObject/index.ts +1 -0
  369. package/src/hooks/internal/styleToEmotionObject/private/StyleToEmotionObjectComposer.tsx +20 -0
  370. package/src/hooks/internal/styleToEmotionObject/private/createStyleToEmotionObjectComposer.tsx +22 -0
  371. package/src/hooks/internal/useEmotion.ts +37 -0
  372. package/src/hooks/internal/useFeedbackActions.ts +120 -0
  373. package/src/hooks/internal/useForceRenderAtInterval.ts +6 -6
  374. package/src/hooks/internal/useMemoized.spec.jsx +3 -3
  375. package/src/hooks/internal/useMemoized.ts +1 -1
  376. package/src/hooks/internal/useNonce.ts +7 -0
  377. package/src/hooks/internal/useObserveFocusVisible.ts +0 -1
  378. package/src/hooks/internal/useSanitizeHrefCallback.ts +37 -0
  379. package/src/hooks/internal/useStateRef.ts +1 -1
  380. package/src/hooks/sendBoxFocus.ts +6 -2
  381. package/src/hooks/transcriptScrollRelative.ts +6 -3
  382. package/src/hooks/useObserveScrollPosition.ts +3 -0
  383. package/src/hooks/useObserveTranscriptFocus.ts +9 -3
  384. package/src/hooks/useRenderMarkdownAsHTML.ts +32 -29
  385. package/src/hooks/useSendFiles.ts +4 -1
  386. package/src/hooks/useStreamingMarkdownWithDefinitions.ts +193 -0
  387. package/src/index.ts +30 -125
  388. package/src/providers/ActivityLogicalGrouping/ActivityLogicalGroupingComposer.ts +100 -0
  389. package/src/providers/ActivityLogicalGrouping/index.ts +7 -0
  390. package/src/providers/ActivityLogicalGrouping/private/ActivityLogicalGroupingContext.ts +31 -0
  391. package/src/providers/ActivityLogicalGrouping/private/useStateWithOptimisticRef.ts +13 -0
  392. package/src/providers/ActivityLogicalGrouping/useAddLogicalGrouping.ts +5 -0
  393. package/src/providers/ActivityLogicalGrouping/useGetGroupState.ts +5 -0
  394. package/src/providers/ActivityLogicalGrouping/useGetLogicalGroupBoundaries.ts +5 -0
  395. package/src/providers/ActivityLogicalGrouping/useGetLogicalGroupKey.ts +5 -0
  396. package/src/providers/ActivityLogicalGrouping/useRemoveLogicalGrouping.ts +5 -0
  397. package/src/providers/ChatHistoryDOM/ChatHistoryDOMComposer.tsx +18 -0
  398. package/src/providers/ChatHistoryDOM/private/ChatHistoryDOMContext.ts +11 -0
  399. package/src/providers/ChatHistoryDOM/useActivityElementRef.ts +6 -0
  400. package/src/providers/CustomElements/CustomElementsComposer.tsx +58 -0
  401. package/src/providers/CustomElements/customElements/CodeBlock.module.css +35 -0
  402. package/src/providers/CustomElements/customElements/CodeBlock.ts +230 -0
  403. package/src/providers/CustomElements/customElements/CodeBlockCopyButton.module.css +63 -0
  404. package/src/providers/CustomElements/customElements/CodeBlockCopyButton.tsx +108 -0
  405. package/src/providers/CustomElements/customElements/wrapAsCustomElement.ts +85 -0
  406. package/src/providers/CustomElements/private/CustomElementsContext.ts +15 -0
  407. package/src/providers/CustomElements/private/useCustomElementsContext.ts +6 -0
  408. package/src/providers/CustomElements/useCodeBlockCopyButtonTagName.ts +8 -0
  409. package/src/providers/CustomElements/useCodeBlockTagName.ts +19 -0
  410. package/src/providers/GroupedRenderingActivities/GroupedRenderingActivities.ts +10 -0
  411. package/src/providers/GroupedRenderingActivities/GroupedRenderingActivitiesComposer.tsx +87 -0
  412. package/src/providers/GroupedRenderingActivities/private/GroupedRenderingActivitiesContext.ts +14 -0
  413. package/src/providers/GroupedRenderingActivities/private/group.spec.ts +31 -0
  414. package/src/providers/GroupedRenderingActivities/private/group.ts +19 -0
  415. package/src/providers/GroupedRenderingActivities/private/pick.spec.ts +35 -0
  416. package/src/providers/GroupedRenderingActivities/private/pick.ts +20 -0
  417. package/src/providers/GroupedRenderingActivities/useGroupedRenderingActivities.ts +6 -0
  418. package/src/providers/GroupedRenderingActivities/useNumRenderingActivities.ts +5 -0
  419. package/src/providers/HTMLContentTransformCOR/HTMLContentTransformComposer.tsx +41 -0
  420. package/src/providers/HTMLContentTransformCOR/index.ts +8 -0
  421. package/src/providers/HTMLContentTransformCOR/private/HTMLContentTransformContext.ts +34 -0
  422. package/src/providers/HTMLContentTransformCOR/private/useHTMLContentTransformContext.ts +6 -0
  423. package/src/providers/HTMLContentTransformCOR/useTransformHTMLContent.ts +187 -0
  424. package/src/providers/LiveRegionTwin/index.ts +3 -0
  425. package/src/providers/LiveRegionTwin/private/LiveRegionTwinComposer.ts +27 -0
  426. package/src/providers/LiveRegionTwin/private/LiveRegionTwinContainer.tsx +27 -39
  427. package/src/providers/LiveRegionTwin/private/createLiveRegionTwinComposer.tsx +155 -0
  428. package/src/providers/LiveRegionTwin/private/useContext.ts +2 -8
  429. package/src/providers/LiveRegionTwin/useLiveRegion.ts +27 -0
  430. package/src/providers/LiveRegionTwin/useQueueStaticElement.ts +2 -2
  431. package/src/providers/ModalDialog/private/Popover.tsx +5 -15
  432. package/src/providers/ReducedMotion/ReducedMotionComposer.tsx +35 -0
  433. package/src/providers/ReducedMotion/private/Context.ts +22 -0
  434. package/src/providers/ReducedMotion/private/useContext.ts +8 -0
  435. package/src/providers/ReducedMotion/useShouldReduceMotion.ts +5 -0
  436. package/src/providers/RenderingActivities/RenderingActivitiesComposer.tsx +103 -0
  437. package/src/providers/RenderingActivities/private/RenderingActivitiesContext.ts +15 -0
  438. package/src/providers/RenderingActivities/useActivityRendererMap.ts +9 -0
  439. package/src/providers/RenderingActivities/useRenderingActivities.ts +7 -0
  440. package/src/providers/RenderingActivities/useRenderingActivityKeys.ts +5 -0
  441. package/src/providers/RovingTabIndex/RovingTabIndexComposer.tsx +20 -23
  442. package/src/providers/Theme/ThemeProvider.tsx +119 -40
  443. package/src/providers/Theme/private/Context.ts +18 -18
  444. package/src/providers/TranscriptFocus/TranscriptFocusComposer.spec.tsx +611 -0
  445. package/src/providers/TranscriptFocus/TranscriptFocusComposer.tsx +325 -68
  446. package/src/providers/TranscriptFocus/private/Context.ts +4 -0
  447. package/src/providers/TranscriptFocus/useActiveDescendantId.ts +4 -1
  448. package/src/providers/TranscriptFocus/useFocusByGroupKey.ts +11 -0
  449. package/src/providers/TranscriptFocus/useFocusRelativeActivity.ts +1 -1
  450. package/src/providers/TranscriptFocus/useFocusedKey.ts +6 -0
  451. package/src/providers/TranscriptFocus/useGetGroupDescendantIdByActivityKey.ts +5 -0
  452. package/src/providers/createContextAndHook.ts +23 -0
  453. package/src/providers/internal/SendBox/SendBoxComposer.tsx +30 -38
  454. package/src/stylesheet/ComponentStylesheet.tsx +33 -0
  455. package/src/stylesheet/createComponentStyleElements.ts +8 -0
  456. package/src/testIds.ts +18 -0
  457. package/src/tsconfig.json +8 -14
  458. package/src/types/internal/mutableRefObject.ts +40 -0
  459. package/src/types/internal/refObject.ts +40 -0
  460. package/dist/botframework-webchat-component.internal.mjs.LEGAL.txt +0 -0
  461. package/dist/botframework-webchat-component.mjs.LEGAL.txt +0 -0
  462. package/dist/chunk-X37JABN5.mjs +0 -5
  463. package/dist/chunk-X37JABN5.mjs.LEGAL.txt +0 -0
  464. package/dist/chunk-X37JABN5.mjs.map +0 -1
  465. package/lib/Activity/Avatar.d.ts +0 -10
  466. package/lib/Activity/Avatar.d.ts.map +0 -1
  467. package/lib/Activity/Avatar.js +0 -35
  468. package/lib/Activity/Bubble.d.ts +0 -11
  469. package/lib/Activity/Bubble.d.ts.map +0 -1
  470. package/lib/Activity/Bubble.js +0 -137
  471. package/lib/Activity/CarouselFilmStrip.js +0 -264
  472. package/lib/Activity/CarouselFilmStripAttachment.js +0 -93
  473. package/lib/Activity/CarouselLayout.js +0 -133
  474. package/lib/Activity/SayAlt.js +0 -31
  475. package/lib/Activity/Speak.d.ts +0 -8
  476. package/lib/Activity/Speak.d.ts.map +0 -1
  477. package/lib/Activity/Speak.js +0 -99
  478. package/lib/Activity/StackedLayout.d.ts +0 -17
  479. package/lib/Activity/StackedLayout.d.ts.map +0 -1
  480. package/lib/Activity/StackedLayout.js +0 -233
  481. package/lib/ActivityStatus/AbsoluteTime.js +0 -38
  482. package/lib/ActivityStatus/OthersActivityStatus.d.ts +0 -8
  483. package/lib/ActivityStatus/OthersActivityStatus.d.ts.map +0 -1
  484. package/lib/ActivityStatus/OthersActivityStatus.js +0 -105
  485. package/lib/ActivityStatus/SelfActivityStatus.d.ts +0 -8
  486. package/lib/ActivityStatus/SelfActivityStatus.d.ts.map +0 -1
  487. package/lib/ActivityStatus/SelfActivityStatus.js +0 -37
  488. package/lib/ActivityStatus/SendStatus/SendStatus.d.ts +0 -10
  489. package/lib/ActivityStatus/SendStatus/SendStatus.d.ts.map +0 -1
  490. package/lib/ActivityStatus/SendStatus/SendStatus.js +0 -58
  491. package/lib/ActivityStatus/SendStatus/private/SendFailedRetry.js +0 -35
  492. package/lib/ActivityStatus/Slotted.d.ts +0 -7
  493. package/lib/ActivityStatus/Slotted.d.ts.map +0 -1
  494. package/lib/ActivityStatus/Slotted.js +0 -31
  495. package/lib/ActivityStatus/Timestamp.d.ts +0 -7
  496. package/lib/ActivityStatus/Timestamp.d.ts.map +0 -1
  497. package/lib/ActivityStatus/Timestamp.js +0 -36
  498. package/lib/ActivityStatus/private/Feedback/Feedback.d.ts +0 -8
  499. package/lib/ActivityStatus/private/Feedback/Feedback.d.ts.map +0 -1
  500. package/lib/ActivityStatus/private/Feedback/Feedback.js +0 -67
  501. package/lib/ActivityStatus/private/Feedback/private/ThumbButton.Image.d.ts +0 -9
  502. package/lib/ActivityStatus/private/Feedback/private/ThumbButton.Image.d.ts.map +0 -1
  503. package/lib/ActivityStatus/private/Feedback/private/ThumbButton.Image.js +0 -34
  504. package/lib/ActivityStatus/private/Feedback/private/ThumbButton.d.ts +0 -9
  505. package/lib/ActivityStatus/private/Feedback/private/ThumbButton.d.ts.map +0 -1
  506. package/lib/ActivityStatus/private/Feedback/private/ThumbButton.js +0 -57
  507. package/lib/ActivityStatus/private/Feedback/private/VoteButton.d.ts +0 -10
  508. package/lib/ActivityStatus/private/Feedback/private/VoteButton.d.ts.map +0 -1
  509. package/lib/ActivityStatus/private/Feedback/private/VoteButton.js +0 -43
  510. package/lib/ActivityStatus/private/Feedback/private/icons/ThumbDislike16Filled.d.ts +0 -7
  511. package/lib/ActivityStatus/private/Feedback/private/icons/ThumbDislike16Filled.d.ts.map +0 -1
  512. package/lib/ActivityStatus/private/Feedback/private/icons/ThumbDislike16Filled.js +0 -28
  513. package/lib/ActivityStatus/private/Feedback/private/icons/ThumbDislike16Regular.d.ts +0 -7
  514. package/lib/ActivityStatus/private/Feedback/private/icons/ThumbDislike16Regular.d.ts.map +0 -1
  515. package/lib/ActivityStatus/private/Feedback/private/icons/ThumbDislike16Regular.js +0 -28
  516. package/lib/ActivityStatus/private/Feedback/private/icons/ThumbLike16Filled.d.ts +0 -7
  517. package/lib/ActivityStatus/private/Feedback/private/icons/ThumbLike16Filled.d.ts.map +0 -1
  518. package/lib/ActivityStatus/private/Feedback/private/icons/ThumbLike16Filled.js +0 -28
  519. package/lib/ActivityStatus/private/Feedback/private/icons/ThumbLike16Regular.d.ts +0 -7
  520. package/lib/ActivityStatus/private/Feedback/private/icons/ThumbLike16Regular.d.ts.map +0 -1
  521. package/lib/ActivityStatus/private/Feedback/private/icons/ThumbLike16Regular.js +0 -28
  522. package/lib/ActivityStatus/private/Originator.d.ts +0 -8
  523. package/lib/ActivityStatus/private/Originator.d.ts.map +0 -1
  524. package/lib/ActivityStatus/private/Originator.js +0 -29
  525. package/lib/ActivityStatus/private/RelativeTime.js +0 -37
  526. package/lib/Assets/TypingAnimation.js +0 -47
  527. package/lib/Attachment/Assets/DownloadIcon.js +0 -35
  528. package/lib/Attachment/AudioAttachment.js +0 -38
  529. package/lib/Attachment/AudioContent.d.ts +0 -11
  530. package/lib/Attachment/AudioContent.d.ts.map +0 -1
  531. package/lib/Attachment/AudioContent.js +0 -51
  532. package/lib/Attachment/FileAttachment.js +0 -43
  533. package/lib/Attachment/FileContent.d.ts +0 -10
  534. package/lib/Attachment/FileContent.d.ts.map +0 -1
  535. package/lib/Attachment/FileContent.js +0 -120
  536. package/lib/Attachment/HTMLVideoContent.d.ts +0 -11
  537. package/lib/Attachment/HTMLVideoContent.d.ts.map +0 -1
  538. package/lib/Attachment/HTMLVideoContent.js +0 -51
  539. package/lib/Attachment/ImageAttachment.js +0 -41
  540. package/lib/Attachment/ImageContent.d.ts +0 -8
  541. package/lib/Attachment/ImageContent.d.ts.map +0 -1
  542. package/lib/Attachment/ImageContent.js +0 -41
  543. package/lib/Attachment/Text/TextAttachment.d.ts +0 -12
  544. package/lib/Attachment/Text/TextAttachment.d.ts.map +0 -1
  545. package/lib/Attachment/Text/TextAttachment.js +0 -27
  546. package/lib/Attachment/Text/TextContent.d.ts +0 -10
  547. package/lib/Attachment/Text/TextContent.d.ts.map +0 -1
  548. package/lib/Attachment/Text/TextContent.js +0 -34
  549. package/lib/Attachment/Text/private/CitationModalContent.d.ts +0 -8
  550. package/lib/Attachment/Text/private/CitationModalContent.d.ts.map +0 -1
  551. package/lib/Attachment/Text/private/CitationModalContent.js +0 -45
  552. package/lib/Attachment/Text/private/MarkdownTextContent.d.ts +0 -9
  553. package/lib/Attachment/Text/private/MarkdownTextContent.d.ts.map +0 -1
  554. package/lib/Attachment/Text/private/MarkdownTextContent.js +0 -204
  555. package/lib/Attachment/Text/private/MessageSensitivityLabel.d.ts +0 -12
  556. package/lib/Attachment/Text/private/MessageSensitivityLabel.d.ts.map +0 -1
  557. package/lib/Attachment/Text/private/MessageSensitivityLabel.js +0 -38
  558. package/lib/Attachment/Text/private/PlainTextContent.d.ts +0 -7
  559. package/lib/Attachment/Text/private/PlainTextContent.d.ts.map +0 -1
  560. package/lib/Attachment/Text/private/PlainTextContent.js +0 -35
  561. package/lib/Attachment/Text/private/ShieldIcon.d.ts +0 -9
  562. package/lib/Attachment/Text/private/ShieldIcon.d.ts.map +0 -1
  563. package/lib/Attachment/Text/private/ShieldIcon.js +0 -39
  564. package/lib/Attachment/Text/private/isHTMLButtonElement.d.ts +0 -2
  565. package/lib/Attachment/Text/private/isHTMLButtonElement.d.ts.map +0 -1
  566. package/lib/Attachment/Text/private/isHTMLButtonElement.js +0 -10
  567. package/lib/Attachment/VideoAttachment.js +0 -45
  568. package/lib/Attachment/VideoContent.d.ts +0 -11
  569. package/lib/Attachment/VideoContent.d.ts.map +0 -1
  570. package/lib/Attachment/VideoContent.js +0 -103
  571. package/lib/Attachment/VimeoContent.d.ts +0 -10
  572. package/lib/Attachment/VimeoContent.d.ts.map +0 -1
  573. package/lib/Attachment/VimeoContent.js +0 -59
  574. package/lib/Attachment/YouTubeContent.d.ts +0 -10
  575. package/lib/Attachment/YouTubeContent.d.ts.map +0 -1
  576. package/lib/Attachment/YouTubeContent.js +0 -60
  577. package/lib/Attachment/createMiddleware.d.ts +0 -3
  578. package/lib/Attachment/createMiddleware.d.ts.map +0 -1
  579. package/lib/Attachment/createMiddleware.js +0 -64
  580. package/lib/Attachment/private/types/WebChatAttachment.d.ts +0 -9
  581. package/lib/Attachment/private/types/WebChatAttachment.d.ts.map +0 -1
  582. package/lib/Attachment/private/types/WebChatAttachment.js +0 -2
  583. package/lib/Avatar/ImageAvatar.js +0 -59
  584. package/lib/Avatar/InitialsAvatar.js +0 -57
  585. package/lib/BasicConnectivityStatus.js +0 -46
  586. package/lib/BasicToast.js +0 -103
  587. package/lib/BasicToaster.js +0 -176
  588. package/lib/BasicTranscript.d.ts +0 -7
  589. package/lib/BasicTranscript.d.ts.map +0 -1
  590. package/lib/BasicTranscript.js +0 -735
  591. package/lib/BasicTypingIndicator.d.ts +0 -6
  592. package/lib/BasicTypingIndicator.d.ts.map +0 -1
  593. package/lib/BasicTypingIndicator.js +0 -54
  594. package/lib/BasicWebChat.d.ts +0 -9
  595. package/lib/BasicWebChat.d.ts.map +0 -1
  596. package/lib/BasicWebChat.js +0 -90
  597. package/lib/Composer.d.ts +0 -50
  598. package/lib/Composer.d.ts.map +0 -1
  599. package/lib/Composer.js +0 -336
  600. package/lib/ConnectivityStatus/Assets/ErrorNotificationIcon.js +0 -47
  601. package/lib/ConnectivityStatus/Assets/SpinnerAnimation.js +0 -32
  602. package/lib/ConnectivityStatus/Assets/WarningNotificationIcon.js +0 -47
  603. package/lib/ConnectivityStatus/Connected.js +0 -20
  604. package/lib/ConnectivityStatus/Connecting.js +0 -82
  605. package/lib/ConnectivityStatus/FailedToConnect.js +0 -41
  606. package/lib/ConnectivityStatus/JavaScriptError.js +0 -41
  607. package/lib/Dictation.js +0 -158
  608. package/lib/ErrorBox.d.ts +0 -8
  609. package/lib/ErrorBox.d.ts.map +0 -1
  610. package/lib/ErrorBox.js +0 -42
  611. package/lib/LinkDefinition/LinkDefinitionItem.d.ts +0 -12
  612. package/lib/LinkDefinition/LinkDefinitionItem.d.ts.map +0 -1
  613. package/lib/LinkDefinition/LinkDefinitionItem.js +0 -57
  614. package/lib/LinkDefinition/LinkDefinitions.d.ts +0 -12
  615. package/lib/LinkDefinition/LinkDefinitions.d.ts.map +0 -1
  616. package/lib/LinkDefinition/LinkDefinitions.js +0 -69
  617. package/lib/LinkDefinition/index.d.ts +0 -4
  618. package/lib/LinkDefinition/index.d.ts.map +0 -1
  619. package/lib/LinkDefinition/index.js +0 -21
  620. package/lib/LinkDefinition/private/Badge.d.ts +0 -7
  621. package/lib/LinkDefinition/private/Badge.d.ts.map +0 -1
  622. package/lib/LinkDefinition/private/Badge.js +0 -20
  623. package/lib/LinkDefinition/private/Chevron.d.ts +0 -4
  624. package/lib/LinkDefinition/private/Chevron.d.ts.map +0 -1
  625. package/lib/LinkDefinition/private/Chevron.js +0 -27
  626. package/lib/LinkDefinition/private/ItemBody.d.ts +0 -11
  627. package/lib/LinkDefinition/private/ItemBody.d.ts.map +0 -1
  628. package/lib/LinkDefinition/private/ItemBody.js +0 -41
  629. package/lib/LinkDefinition/private/OpenInNewWindowIcon.d.ts +0 -7
  630. package/lib/LinkDefinition/private/OpenInNewWindowIcon.d.ts.map +0 -1
  631. package/lib/LinkDefinition/private/OpenInNewWindowIcon.js +0 -23
  632. package/lib/LinkDefinition/private/extractHostnameWithSubdomain.d.ts +0 -2
  633. package/lib/LinkDefinition/private/extractHostnameWithSubdomain.d.ts.map +0 -1
  634. package/lib/LinkDefinition/private/extractHostnameWithSubdomain.js +0 -24
  635. package/lib/LinkDefinition/private/extractHostnameWithSubdomain.spec.d.ts +0 -2
  636. package/lib/LinkDefinition/private/extractHostnameWithSubdomain.spec.d.ts.map +0 -1
  637. package/lib/LiveRegion/LiveRegionActivity.d.ts +0 -9
  638. package/lib/LiveRegion/LiveRegionActivity.d.ts.map +0 -1
  639. package/lib/LiveRegion/LiveRegionActivity.js +0 -70
  640. package/lib/LiveRegion/private/LiveRegionAttachments.d.ts +0 -11
  641. package/lib/LiveRegion/private/LiveRegionAttachments.d.ts.map +0 -1
  642. package/lib/LiveRegion/private/LiveRegionAttachments.js +0 -53
  643. package/lib/LiveRegion/private/LiveRegionSuggestedActions.d.ts +0 -8
  644. package/lib/LiveRegion/private/LiveRegionSuggestedActions.d.ts.map +0 -1
  645. package/lib/LiveRegion/private/LiveRegionSuggestedActions.js +0 -37
  646. package/lib/Middleware/Activity/createCoreMiddleware.d.ts +0 -3
  647. package/lib/Middleware/Activity/createCoreMiddleware.d.ts.map +0 -1
  648. package/lib/Middleware/Activity/createCoreMiddleware.js +0 -95
  649. package/lib/Middleware/ActivityStatus/createCoreMiddleware.d.ts +0 -3
  650. package/lib/Middleware/ActivityStatus/createCoreMiddleware.d.ts.map +0 -1
  651. package/lib/Middleware/ActivityStatus/createCoreMiddleware.js +0 -13
  652. package/lib/Middleware/ActivityStatus/createSendStatusMiddleware.d.ts +0 -3
  653. package/lib/Middleware/ActivityStatus/createSendStatusMiddleware.d.ts.map +0 -1
  654. package/lib/Middleware/ActivityStatus/createSendStatusMiddleware.js +0 -41
  655. package/lib/Middleware/ActivityStatus/createTimestampMiddleware.d.ts +0 -3
  656. package/lib/Middleware/ActivityStatus/createTimestampMiddleware.d.ts.map +0 -1
  657. package/lib/Middleware/ActivityStatus/createTimestampMiddleware.js +0 -48
  658. package/lib/Middleware/AttachmentForScreenReader/AudioAttachment.js +0 -18
  659. package/lib/Middleware/AttachmentForScreenReader/FileAttachment.js +0 -28
  660. package/lib/Middleware/AttachmentForScreenReader/ImageAttachment.js +0 -18
  661. package/lib/Middleware/AttachmentForScreenReader/TextAttachment.js +0 -28
  662. package/lib/Middleware/AttachmentForScreenReader/VideoAttachment.js +0 -18
  663. package/lib/Middleware/AttachmentForScreenReader/createCoreMiddleware.d.ts +0 -3
  664. package/lib/Middleware/AttachmentForScreenReader/createCoreMiddleware.d.ts.map +0 -1
  665. package/lib/Middleware/AttachmentForScreenReader/createCoreMiddleware.js +0 -61
  666. package/lib/Middleware/Avatar/createCoreMiddleware.d.ts +0 -11
  667. package/lib/Middleware/Avatar/createCoreMiddleware.d.ts.map +0 -1
  668. package/lib/Middleware/Avatar/createCoreMiddleware.js +0 -82
  669. package/lib/Middleware/CardAction/createCoreMiddleware.js +0 -108
  670. package/lib/Middleware/ScrollToEndButton/ScrollToEndButton.js +0 -52
  671. package/lib/Middleware/ScrollToEndButton/createScrollToEndButtonMiddleware.d.ts +0 -3
  672. package/lib/Middleware/ScrollToEndButton/createScrollToEndButtonMiddleware.d.ts.map +0 -1
  673. package/lib/Middleware/ScrollToEndButton/createScrollToEndButtonMiddleware.js +0 -27
  674. package/lib/Middleware/Toast/createCoreMiddleware.d.ts +0 -4
  675. package/lib/Middleware/Toast/createCoreMiddleware.d.ts.map +0 -1
  676. package/lib/Middleware/Toast/createCoreMiddleware.js +0 -27
  677. package/lib/Middleware/TypingIndicator/createCoreMiddleware.d.ts +0 -3
  678. package/lib/Middleware/TypingIndicator/createCoreMiddleware.d.ts.map +0 -1
  679. package/lib/Middleware/TypingIndicator/createCoreMiddleware.js +0 -47
  680. package/lib/ReactWebChat.d.ts +0 -42
  681. package/lib/ReactWebChat.d.ts.map +0 -1
  682. package/lib/ReactWebChat.js +0 -52
  683. package/lib/ScreenReaderText.d.ts +0 -9
  684. package/lib/ScreenReaderText.d.ts.map +0 -1
  685. package/lib/ScreenReaderText.js +0 -58
  686. package/lib/SendBox/Assets/MicrophoneIcon.js +0 -25
  687. package/lib/SendBox/Assets/SendIcon.js +0 -45
  688. package/lib/SendBox/AutoResizeTextArea.d.ts +0 -24
  689. package/lib/SendBox/AutoResizeTextArea.d.ts.map +0 -1
  690. package/lib/SendBox/AutoResizeTextArea.js +0 -113
  691. package/lib/SendBox/BasicSendBox.d.ts +0 -9
  692. package/lib/SendBox/BasicSendBox.d.ts.map +0 -1
  693. package/lib/SendBox/BasicSendBox.js +0 -123
  694. package/lib/SendBox/DictationInterims.d.ts +0 -7
  695. package/lib/SendBox/DictationInterims.d.ts.map +0 -1
  696. package/lib/SendBox/DictationInterims.js +0 -68
  697. package/lib/SendBox/IconButton.d.ts +0 -11
  698. package/lib/SendBox/IconButton.d.ts.map +0 -1
  699. package/lib/SendBox/IconButton.js +0 -73
  700. package/lib/SendBox/MicrophoneButton.d.ts +0 -10
  701. package/lib/SendBox/MicrophoneButton.d.ts.map +0 -1
  702. package/lib/SendBox/MicrophoneButton.js +0 -160
  703. package/lib/SendBox/SendButton.d.ts +0 -7
  704. package/lib/SendBox/SendButton.d.ts.map +0 -1
  705. package/lib/SendBox/SendButton.js +0 -53
  706. package/lib/SendBox/SuggestedAction.d.ts +0 -16
  707. package/lib/SendBox/SuggestedAction.d.ts.map +0 -1
  708. package/lib/SendBox/SuggestedAction.js +0 -166
  709. package/lib/SendBox/SuggestedActions.d.ts +0 -7
  710. package/lib/SendBox/SuggestedActions.d.ts.map +0 -1
  711. package/lib/SendBox/SuggestedActions.js +0 -256
  712. package/lib/SendBox/TextBox.d.ts +0 -24
  713. package/lib/SendBox/TextBox.d.ts.map +0 -1
  714. package/lib/SendBox/TextBox.js +0 -252
  715. package/lib/SendBox/createMiddleware.d.ts +0 -4
  716. package/lib/SendBox/createMiddleware.d.ts.map +0 -1
  717. package/lib/SendBox/createMiddleware.js +0 -38
  718. package/lib/SendBoxToolbar/Assets/AttachmentIcon.d.ts +0 -7
  719. package/lib/SendBoxToolbar/Assets/AttachmentIcon.d.ts.map +0 -1
  720. package/lib/SendBoxToolbar/Assets/AttachmentIcon.js +0 -63
  721. package/lib/SendBoxToolbar/BasicSendBoxToolbar.d.ts +0 -6
  722. package/lib/SendBoxToolbar/BasicSendBoxToolbar.d.ts.map +0 -1
  723. package/lib/SendBoxToolbar/BasicSendBoxToolbar.js +0 -32
  724. package/lib/SendBoxToolbar/UploadButton.d.ts +0 -7
  725. package/lib/SendBoxToolbar/UploadButton.d.ts.map +0 -1
  726. package/lib/SendBoxToolbar/UploadButton.js +0 -156
  727. package/lib/SendBoxToolbar/createMiddleware.d.ts +0 -4
  728. package/lib/SendBoxToolbar/createMiddleware.d.ts.map +0 -1
  729. package/lib/SendBoxToolbar/createMiddleware.js +0 -20
  730. package/lib/Styles/CSSTokens.d.ts +0 -16
  731. package/lib/Styles/CSSTokens.d.ts.map +0 -1
  732. package/lib/Styles/CSSTokens.js +0 -19
  733. package/lib/Styles/CustomPropertyNames.d.ts +0 -13
  734. package/lib/Styles/CustomPropertyNames.d.ts.map +0 -1
  735. package/lib/Styles/CustomPropertyNames.js +0 -24
  736. package/lib/Styles/StyleSet/Activities.d.ts +0 -5
  737. package/lib/Styles/StyleSet/Activities.d.ts.map +0 -1
  738. package/lib/Styles/StyleSet/Activities.js +0 -13
  739. package/lib/Styles/StyleSet/AudioAttachment.d.ts +0 -6
  740. package/lib/Styles/StyleSet/AudioAttachment.d.ts.map +0 -1
  741. package/lib/Styles/StyleSet/AudioAttachment.js +0 -15
  742. package/lib/Styles/StyleSet/AudioContent.d.ts +0 -4
  743. package/lib/Styles/StyleSet/AudioContent.d.ts.map +0 -1
  744. package/lib/Styles/StyleSet/AudioContent.js +0 -12
  745. package/lib/Styles/StyleSet/AutoResizeTextArea.d.ts +0 -37
  746. package/lib/Styles/StyleSet/AutoResizeTextArea.d.ts.map +0 -1
  747. package/lib/Styles/StyleSet/AutoResizeTextArea.js +0 -45
  748. package/lib/Styles/StyleSet/Avatar.d.ts +0 -9
  749. package/lib/Styles/StyleSet/Avatar.d.ts.map +0 -1
  750. package/lib/Styles/StyleSet/Avatar.js +0 -18
  751. package/lib/Styles/StyleSet/BasicTranscript.d.ts +0 -85
  752. package/lib/Styles/StyleSet/BasicTranscript.d.ts.map +0 -1
  753. package/lib/Styles/StyleSet/BasicTranscript.js +0 -110
  754. package/lib/Styles/StyleSet/Bubble.d.ts +0 -5
  755. package/lib/Styles/StyleSet/Bubble.d.ts.map +0 -1
  756. package/lib/Styles/StyleSet/Bubble.js +0 -153
  757. package/lib/Styles/StyleSet/CSSCustomProperties.d.ts +0 -16
  758. package/lib/Styles/StyleSet/CSSCustomProperties.d.ts.map +0 -1
  759. package/lib/Styles/StyleSet/CSSCustomProperties.js +0 -27
  760. package/lib/Styles/StyleSet/CarouselFilmStrip.d.ts +0 -5
  761. package/lib/Styles/StyleSet/CarouselFilmStrip.d.ts.map +0 -1
  762. package/lib/Styles/StyleSet/CarouselFilmStrip.js +0 -90
  763. package/lib/Styles/StyleSet/CarouselFilmStripAttachment.d.ts +0 -3
  764. package/lib/Styles/StyleSet/CarouselFilmStripAttachment.d.ts.map +0 -1
  765. package/lib/Styles/StyleSet/CarouselFilmStripAttachment.js +0 -57
  766. package/lib/Styles/StyleSet/CarouselFlipper.d.ts +0 -27
  767. package/lib/Styles/StyleSet/CarouselFlipper.d.ts.map +0 -1
  768. package/lib/Styles/StyleSet/CarouselFlipper.js +0 -42
  769. package/lib/Styles/StyleSet/CitationModalDialog.d.ts +0 -8
  770. package/lib/Styles/StyleSet/CitationModalDialog.d.ts.map +0 -1
  771. package/lib/Styles/StyleSet/CitationModalDialog.js +0 -16
  772. package/lib/Styles/StyleSet/ConnectivityNotification.d.ts +0 -13
  773. package/lib/Styles/StyleSet/ConnectivityNotification.d.ts.map +0 -1
  774. package/lib/Styles/StyleSet/ConnectivityNotification.js +0 -26
  775. package/lib/Styles/StyleSet/Constants.d.ts +0 -6
  776. package/lib/Styles/StyleSet/Constants.d.ts.map +0 -1
  777. package/lib/Styles/StyleSet/Constants.js +0 -15
  778. package/lib/Styles/StyleSet/DictationInterims.d.ts +0 -13
  779. package/lib/Styles/StyleSet/DictationInterims.d.ts.map +0 -1
  780. package/lib/Styles/StyleSet/DictationInterims.js +0 -22
  781. package/lib/Styles/StyleSet/ErrorBox.d.ts +0 -33
  782. package/lib/Styles/StyleSet/ErrorBox.d.ts.map +0 -1
  783. package/lib/Styles/StyleSet/ErrorBox.js +0 -43
  784. package/lib/Styles/StyleSet/ErrorNotification.d.ts +0 -23
  785. package/lib/Styles/StyleSet/ErrorNotification.d.ts.map +0 -1
  786. package/lib/Styles/StyleSet/ErrorNotification.js +0 -36
  787. package/lib/Styles/StyleSet/FileContent.d.ts +0 -32
  788. package/lib/Styles/StyleSet/FileContent.d.ts.map +0 -1
  789. package/lib/Styles/StyleSet/FileContent.js +0 -43
  790. package/lib/Styles/StyleSet/ImageAvatar.d.ts +0 -7
  791. package/lib/Styles/StyleSet/ImageAvatar.d.ts.map +0 -1
  792. package/lib/Styles/StyleSet/ImageAvatar.js +0 -15
  793. package/lib/Styles/StyleSet/InitialsAvatar.d.ts +0 -19
  794. package/lib/Styles/StyleSet/InitialsAvatar.d.ts.map +0 -1
  795. package/lib/Styles/StyleSet/InitialsAvatar.js +0 -31
  796. package/lib/Styles/StyleSet/KeyboardHelp.d.ts +0 -152
  797. package/lib/Styles/StyleSet/KeyboardHelp.d.ts.map +0 -1
  798. package/lib/Styles/StyleSet/KeyboardHelp.js +0 -168
  799. package/lib/Styles/StyleSet/LinkDefinitions.d.ts +0 -165
  800. package/lib/Styles/StyleSet/LinkDefinitions.d.ts.map +0 -1
  801. package/lib/Styles/StyleSet/LinkDefinitions.js +0 -180
  802. package/lib/Styles/StyleSet/MicrophoneButton.d.ts +0 -13
  803. package/lib/Styles/StyleSet/MicrophoneButton.d.ts.map +0 -1
  804. package/lib/Styles/StyleSet/MicrophoneButton.js +0 -21
  805. package/lib/Styles/StyleSet/ModalDialog.d.ts +0 -94
  806. package/lib/Styles/StyleSet/ModalDialog.d.ts.map +0 -1
  807. package/lib/Styles/StyleSet/ModalDialog.js +0 -98
  808. package/lib/Styles/StyleSet/RenderMarkdown.d.ts +0 -51
  809. package/lib/Styles/StyleSet/RenderMarkdown.d.ts.map +0 -1
  810. package/lib/Styles/StyleSet/RenderMarkdown.js +0 -67
  811. package/lib/Styles/StyleSet/Root.d.ts +0 -8
  812. package/lib/Styles/StyleSet/Root.d.ts.map +0 -1
  813. package/lib/Styles/StyleSet/Root.js +0 -19
  814. package/lib/Styles/StyleSet/ScrollToEndButton.d.ts +0 -36
  815. package/lib/Styles/StyleSet/ScrollToEndButton.d.ts.map +0 -1
  816. package/lib/Styles/StyleSet/ScrollToEndButton.js +0 -55
  817. package/lib/Styles/StyleSet/SendBox.d.ts +0 -24
  818. package/lib/Styles/StyleSet/SendBox.d.ts.map +0 -1
  819. package/lib/Styles/StyleSet/SendBox.js +0 -37
  820. package/lib/Styles/StyleSet/SendBoxButton.d.ts +0 -79
  821. package/lib/Styles/StyleSet/SendBoxButton.d.ts.map +0 -1
  822. package/lib/Styles/StyleSet/SendBoxButton.js +0 -112
  823. package/lib/Styles/StyleSet/SendBoxTextBox.d.ts +0 -41
  824. package/lib/Styles/StyleSet/SendBoxTextBox.d.ts.map +0 -1
  825. package/lib/Styles/StyleSet/SendBoxTextBox.js +0 -57
  826. package/lib/Styles/StyleSet/SendStatus.d.ts +0 -19
  827. package/lib/Styles/StyleSet/SendStatus.d.ts.map +0 -1
  828. package/lib/Styles/StyleSet/SendStatus.js +0 -29
  829. package/lib/Styles/StyleSet/SingleAttachmentActivity.d.ts +0 -11
  830. package/lib/Styles/StyleSet/SingleAttachmentActivity.d.ts.map +0 -1
  831. package/lib/Styles/StyleSet/SingleAttachmentActivity.js +0 -21
  832. package/lib/Styles/StyleSet/SlottedActivityStatus.d.ts +0 -12
  833. package/lib/Styles/StyleSet/SlottedActivityStatus.d.ts.map +0 -1
  834. package/lib/Styles/StyleSet/SlottedActivityStatus.js +0 -22
  835. package/lib/Styles/StyleSet/SpinnerAnimation.d.ts +0 -15
  836. package/lib/Styles/StyleSet/SpinnerAnimation.d.ts.map +0 -1
  837. package/lib/Styles/StyleSet/SpinnerAnimation.js +0 -34
  838. package/lib/Styles/StyleSet/StackedLayout.d.ts +0 -63
  839. package/lib/Styles/StyleSet/StackedLayout.d.ts.map +0 -1
  840. package/lib/Styles/StyleSet/StackedLayout.js +0 -77
  841. package/lib/Styles/StyleSet/SuggestedAction.d.ts +0 -94
  842. package/lib/Styles/StyleSet/SuggestedAction.d.ts.map +0 -1
  843. package/lib/Styles/StyleSet/SuggestedAction.js +0 -152
  844. package/lib/Styles/StyleSet/SuggestedActions.d.ts +0 -139
  845. package/lib/Styles/StyleSet/SuggestedActions.d.ts.map +0 -1
  846. package/lib/Styles/StyleSet/SuggestedActions.js +0 -165
  847. package/lib/Styles/StyleSet/TextContent.d.ts +0 -24
  848. package/lib/Styles/StyleSet/TextContent.d.ts.map +0 -1
  849. package/lib/Styles/StyleSet/TextContent.js +0 -34
  850. package/lib/Styles/StyleSet/ThumbButton.d.ts +0 -32
  851. package/lib/Styles/StyleSet/ThumbButton.d.ts.map +0 -1
  852. package/lib/Styles/StyleSet/ThumbButton.js +0 -44
  853. package/lib/Styles/StyleSet/Toast.d.ts +0 -65
  854. package/lib/Styles/StyleSet/Toast.d.ts.map +0 -1
  855. package/lib/Styles/StyleSet/Toast.js +0 -83
  856. package/lib/Styles/StyleSet/Toaster.d.ts +0 -111
  857. package/lib/Styles/StyleSet/Toaster.d.ts.map +0 -1
  858. package/lib/Styles/StyleSet/Toaster.js +0 -137
  859. package/lib/Styles/StyleSet/TypingAnimation.d.ts +0 -8
  860. package/lib/Styles/StyleSet/TypingAnimation.d.ts.map +0 -1
  861. package/lib/Styles/StyleSet/TypingAnimation.js +0 -26
  862. package/lib/Styles/StyleSet/TypingIndicator.d.ts +0 -11
  863. package/lib/Styles/StyleSet/TypingIndicator.d.ts.map +0 -1
  864. package/lib/Styles/StyleSet/TypingIndicator.js +0 -19
  865. package/lib/Styles/StyleSet/UploadButton.d.ts +0 -14
  866. package/lib/Styles/StyleSet/UploadButton.d.ts.map +0 -1
  867. package/lib/Styles/StyleSet/UploadButton.js +0 -27
  868. package/lib/Styles/StyleSet/VideoAttachment.d.ts +0 -2
  869. package/lib/Styles/StyleSet/VideoAttachment.d.ts.map +0 -1
  870. package/lib/Styles/StyleSet/VideoAttachment.js +0 -10
  871. package/lib/Styles/StyleSet/VideoContent.d.ts +0 -6
  872. package/lib/Styles/StyleSet/VideoContent.d.ts.map +0 -1
  873. package/lib/Styles/StyleSet/VideoContent.js +0 -14
  874. package/lib/Styles/StyleSet/VimeoContent.d.ts +0 -7
  875. package/lib/Styles/StyleSet/VimeoContent.d.ts.map +0 -1
  876. package/lib/Styles/StyleSet/VimeoContent.js +0 -15
  877. package/lib/Styles/StyleSet/WarningNotification.d.ts +0 -22
  878. package/lib/Styles/StyleSet/WarningNotification.d.ts.map +0 -1
  879. package/lib/Styles/StyleSet/WarningNotification.js +0 -37
  880. package/lib/Styles/StyleSet/YouTubeContent.d.ts +0 -7
  881. package/lib/Styles/StyleSet/YouTubeContent.d.ts.map +0 -1
  882. package/lib/Styles/StyleSet/YouTubeContent.js +0 -15
  883. package/lib/Styles/createStyleSet.d.ts +0 -1803
  884. package/lib/Styles/createStyleSet.d.ts.map +0 -1
  885. package/lib/Styles/createStyleSet.js +0 -121
  886. package/lib/Styles/mirrorStyle.js +0 -40
  887. package/lib/Toast/CheckMarkIcon.js +0 -36
  888. package/lib/Toast/CollapseIcon.js +0 -32
  889. package/lib/Toast/DismissIcon.js +0 -32
  890. package/lib/Toast/ExclamationMarkIcon.js +0 -34
  891. package/lib/Toast/ExpandIcon.js +0 -32
  892. package/lib/Toast/NotificationIcon.js +0 -46
  893. package/lib/Toast/createToastMiddleware.d.ts +0 -4
  894. package/lib/Toast/createToastMiddleware.d.ts.map +0 -1
  895. package/lib/Toast/createToastMiddleware.js +0 -26
  896. package/lib/Transcript/ActivityRow.d.ts +0 -9
  897. package/lib/Transcript/ActivityRow.d.ts.map +0 -1
  898. package/lib/Transcript/ActivityRow.js +0 -137
  899. package/lib/Transcript/FocusTrap.d.ts +0 -9
  900. package/lib/Transcript/FocusTrap.d.ts.map +0 -1
  901. package/lib/Transcript/FocusTrap.js +0 -76
  902. package/lib/Transcript/KeyboardHelp.d.ts +0 -4
  903. package/lib/Transcript/KeyboardHelp.d.ts.map +0 -1
  904. package/lib/Transcript/KeyboardHelp.js +0 -562
  905. package/lib/Transcript/LiveRegion/SendFailed.d.ts +0 -14
  906. package/lib/Transcript/LiveRegion/SendFailed.d.ts.map +0 -1
  907. package/lib/Transcript/LiveRegion/SendFailed.js +0 -90
  908. package/lib/Transcript/LiveRegion/isPresentational.d.ts +0 -9
  909. package/lib/Transcript/LiveRegion/isPresentational.d.ts.map +0 -1
  910. package/lib/Transcript/LiveRegion/isPresentational.js +0 -30
  911. package/lib/Transcript/LiveRegionTranscript.d.ts +0 -8
  912. package/lib/Transcript/LiveRegionTranscript.d.ts.map +0 -1
  913. package/lib/Transcript/LiveRegionTranscript.js +0 -178
  914. package/lib/Transcript/types.d.ts +0 -2
  915. package/lib/Transcript/types.d.ts.map +0 -1
  916. package/lib/Transcript/types.js +0 -2
  917. package/lib/Transcript/useActivityAccessibleName.d.ts +0 -11
  918. package/lib/Transcript/useActivityAccessibleName.d.ts.map +0 -1
  919. package/lib/Transcript/useActivityAccessibleName.js +0 -103
  920. package/lib/Transcript/useTypistNames.d.ts +0 -3
  921. package/lib/Transcript/useTypistNames.d.ts.map +0 -1
  922. package/lib/Transcript/useTypistNames.js +0 -50
  923. package/lib/TranscriptActivity.d.ts +0 -17
  924. package/lib/TranscriptActivity.d.ts.map +0 -1
  925. package/lib/TranscriptActivity.js +0 -48
  926. package/lib/Utils/AccessKeySink/Surface.js +0 -74
  927. package/lib/Utils/AccessKeySink/internal/Context.js +0 -11
  928. package/lib/Utils/AccessKeySink/internal/useContext.js +0 -13
  929. package/lib/Utils/AccessKeySink/useFocusAccessKeyEffect.js +0 -34
  930. package/lib/Utils/AccessibleButton.d.ts +0 -11
  931. package/lib/Utils/AccessibleButton.d.ts.map +0 -1
  932. package/lib/Utils/AccessibleButton.js +0 -78
  933. package/lib/Utils/AccessibleInputText.d.ts +0 -22
  934. package/lib/Utils/AccessibleInputText.d.ts.map +0 -1
  935. package/lib/Utils/AccessibleInputText.js +0 -114
  936. package/lib/Utils/AccessibleTextArea.d.ts +0 -20
  937. package/lib/Utils/AccessibleTextArea.d.ts.map +0 -1
  938. package/lib/Utils/AccessibleTextArea.js +0 -105
  939. package/lib/Utils/CroppedImage.js +0 -61
  940. package/lib/Utils/FocusRedirector.d.ts +0 -9
  941. package/lib/Utils/FocusRedirector.d.ts.map +0 -1
  942. package/lib/Utils/FocusRedirector.js +0 -61
  943. package/lib/Utils/InlineMarkdown.js +0 -166
  944. package/lib/Utils/JSONLinkedData/BlankNode.d.ts +0 -15
  945. package/lib/Utils/JSONLinkedData/BlankNode.d.ts.map +0 -1
  946. package/lib/Utils/JSONLinkedData/BlankNode.js +0 -2
  947. package/lib/Utils/JSONLinkedData/__snapshots__/dereferenceBlankNodes.spec.ts.snap +0 -92
  948. package/lib/Utils/JSONLinkedData/dereferenceBlankNodes.d.ts +0 -16
  949. package/lib/Utils/JSONLinkedData/dereferenceBlankNodes.d.ts.map +0 -1
  950. package/lib/Utils/JSONLinkedData/dereferenceBlankNodes.js +0 -96
  951. package/lib/Utils/JSONLinkedData/dereferenceBlankNodes.spec.d.ts +0 -2
  952. package/lib/Utils/JSONLinkedData/dereferenceBlankNodes.spec.d.ts.map +0 -1
  953. package/lib/Utils/JSONLinkedData/getSafeOwnPropertyNames.d.ts +0 -10
  954. package/lib/Utils/JSONLinkedData/getSafeOwnPropertyNames.d.ts.map +0 -1
  955. package/lib/Utils/JSONLinkedData/getSafeOwnPropertyNames.js +0 -22
  956. package/lib/Utils/JSONLinkedData/isBlankNode.d.ts +0 -10
  957. package/lib/Utils/JSONLinkedData/isBlankNode.d.ts.map +0 -1
  958. package/lib/Utils/JSONLinkedData/isBlankNode.js +0 -22
  959. package/lib/Utils/JSONLinkedData/isBlankNode.spec.d.ts +0 -2
  960. package/lib/Utils/JSONLinkedData/isBlankNode.spec.d.ts.map +0 -1
  961. package/lib/Utils/JSONLinkedData/isUnconnectedBlankNode.d.ts +0 -10
  962. package/lib/Utils/JSONLinkedData/isUnconnectedBlankNode.d.ts.map +0 -1
  963. package/lib/Utils/JSONLinkedData/isUnconnectedBlankNode.js +0 -21
  964. package/lib/Utils/JSONLinkedData/isUnconnectedBlankNode.spec.d.ts +0 -2
  965. package/lib/Utils/JSONLinkedData/isUnconnectedBlankNode.spec.d.ts.map +0 -1
  966. package/lib/Utils/JSONLinkedData/visitOnce.d.ts +0 -2
  967. package/lib/Utils/JSONLinkedData/visitOnce.d.ts.map +0 -1
  968. package/lib/Utils/JSONLinkedData/visitOnce.js +0 -17
  969. package/lib/Utils/LocalizedString.d.ts +0 -26
  970. package/lib/Utils/LocalizedString.d.ts.map +0 -1
  971. package/lib/Utils/LocalizedString.js +0 -138
  972. package/lib/Utils/TypeFocusSink/Context.js +0 -14
  973. package/lib/Utils/TypeFocusSink/FocusBox.js +0 -91
  974. package/lib/Utils/TypeFocusSink/getTabIndex.d.ts +0 -2
  975. package/lib/Utils/TypeFocusSink/getTabIndex.d.ts.map +0 -1
  976. package/lib/Utils/TypeFocusSink/getTabIndex.js +0 -27
  977. package/lib/Utils/TypeFocusSink/index.js +0 -18
  978. package/lib/Utils/TypeFocusSink/inputtableKey.d.ts +0 -2
  979. package/lib/Utils/TypeFocusSink/inputtableKey.d.ts.map +0 -1
  980. package/lib/Utils/TypeFocusSink/inputtableKey.js +0 -28
  981. package/lib/Utils/TypeFocusSink/navigableEvent.js +0 -59
  982. package/lib/Utils/activityAltText.d.ts +0 -8
  983. package/lib/Utils/activityAltText.d.ts.map +0 -1
  984. package/lib/Utils/activityAltText.js +0 -79
  985. package/lib/Utils/addTargetBlankToHyperlinksMarkdown.js +0 -34
  986. package/lib/Utils/betterLinks.d.ts +0 -28
  987. package/lib/Utils/betterLinks.d.ts.map +0 -1
  988. package/lib/Utils/betterLinks.js +0 -142
  989. package/lib/Utils/computeSuggestedActionText.d.ts +0 -3
  990. package/lib/Utils/computeSuggestedActionText.d.ts.map +0 -1
  991. package/lib/Utils/computeSuggestedActionText.js +0 -24
  992. package/lib/Utils/createCSSKey.js +0 -16
  993. package/lib/Utils/createCustomEvent.js +0 -34
  994. package/lib/Utils/detectBrowser.js +0 -27
  995. package/lib/Utils/downscaleImageToDataURL/WorkerJob.d.ts +0 -16
  996. package/lib/Utils/downscaleImageToDataURL/WorkerJob.d.ts.map +0 -1
  997. package/lib/Utils/downscaleImageToDataURL/WorkerJob.js +0 -2
  998. package/lib/Utils/downscaleImageToDataURL/downscaleImageToDataURLUsingBrowser.d.ts +0 -2
  999. package/lib/Utils/downscaleImageToDataURL/downscaleImageToDataURLUsingBrowser.d.ts.map +0 -1
  1000. package/lib/Utils/downscaleImageToDataURL/downscaleImageToDataURLUsingBrowser.js +0 -90
  1001. package/lib/Utils/downscaleImageToDataURL/downscaleImageToDataURLUsingWorker.d.ts +0 -4
  1002. package/lib/Utils/downscaleImageToDataURL/downscaleImageToDataURLUsingWorker.d.ts.map +0 -1
  1003. package/lib/Utils/downscaleImageToDataURL/downscaleImageToDataURLUsingWorker.js +0 -198
  1004. package/lib/Utils/downscaleImageToDataURL/downscaleImageToDataURLUsingWorker.worker.js +0 -96
  1005. package/lib/Utils/downscaleImageToDataURL/index.d.ts +0 -2
  1006. package/lib/Utils/downscaleImageToDataURL/index.d.ts.map +0 -1
  1007. package/lib/Utils/downscaleImageToDataURL/index.js +0 -44
  1008. package/lib/Utils/filterMap.js +0 -28
  1009. package/lib/Utils/findAncestor.d.ts +0 -2
  1010. package/lib/Utils/findAncestor.d.ts.map +0 -1
  1011. package/lib/Utils/findAncestor.js +0 -15
  1012. package/lib/Utils/firstTabbableDescendant.js +0 -40
  1013. package/lib/Utils/getActivityUniqueId.d.ts +0 -3
  1014. package/lib/Utils/getActivityUniqueId.d.ts.map +0 -1
  1015. package/lib/Utils/getActivityUniqueId.js +0 -11
  1016. package/lib/Utils/intersectionOf.d.ts +0 -5
  1017. package/lib/Utils/intersectionOf.d.ts.map +0 -1
  1018. package/lib/Utils/intersectionOf.js +0 -27
  1019. package/lib/Utils/isZeroOrPositive.d.ts +0 -5
  1020. package/lib/Utils/isZeroOrPositive.d.ts.map +0 -1
  1021. package/lib/Utils/isZeroOrPositive.js +0 -14
  1022. package/lib/Utils/mapMap.js +0 -27
  1023. package/lib/Utils/parseDocumentFromString.d.ts +0 -2
  1024. package/lib/Utils/parseDocumentFromString.d.ts.map +0 -1
  1025. package/lib/Utils/parseDocumentFromString.js +0 -11
  1026. package/lib/Utils/randomId.js +0 -15
  1027. package/lib/Utils/readDataURIToBlob.js +0 -44
  1028. package/lib/Utils/removeInline.js +0 -18
  1029. package/lib/Utils/scrollIntoViewWithBlockNearest.d.ts +0 -7
  1030. package/lib/Utils/scrollIntoViewWithBlockNearest.d.ts.map +0 -1
  1031. package/lib/Utils/scrollIntoViewWithBlockNearest.js +0 -38
  1032. package/lib/Utils/serializeDocumentIntoString.d.ts +0 -2
  1033. package/lib/Utils/serializeDocumentIntoString.d.ts.map +0 -1
  1034. package/lib/Utils/serializeDocumentIntoString.js +0 -27
  1035. package/lib/Utils/shallowEquals.js +0 -21
  1036. package/lib/Utils/singleToArray.d.ts +0 -2
  1037. package/lib/Utils/singleToArray.d.ts.map +0 -1
  1038. package/lib/Utils/singleToArray.js +0 -10
  1039. package/lib/Utils/supportPseudoClass.d.ts +0 -2
  1040. package/lib/Utils/supportPseudoClass.d.ts.map +0 -1
  1041. package/lib/Utils/supportPseudoClass.js +0 -21
  1042. package/lib/Utils/tabbableElements.d.ts +0 -2
  1043. package/lib/Utils/tabbableElements.d.ts.map +0 -1
  1044. package/lib/Utils/tabbableElements.js +0 -20
  1045. package/lib/Utils/textFormatToContentType.js +0 -17
  1046. package/lib/Utils/updateMarkdownAttrs.js +0 -16
  1047. package/lib/Utils/walkMarkdownTokens.js +0 -19
  1048. package/lib/hooks/index.d.ts +0 -22
  1049. package/lib/hooks/index.d.ts.map +0 -1
  1050. package/lib/hooks/index.js +0 -152
  1051. package/lib/hooks/internal/BypassSpeechSynthesisPonyfill.js +0 -278
  1052. package/lib/hooks/internal/UITracker.js +0 -39
  1053. package/lib/hooks/internal/WebChatUIContext.d.ts +0 -8
  1054. package/lib/hooks/internal/WebChatUIContext.d.ts.map +0 -1
  1055. package/lib/hooks/internal/WebChatUIContext.js +0 -11
  1056. package/lib/hooks/internal/createWaitUntilable.d.ts +0 -5
  1057. package/lib/hooks/internal/createWaitUntilable.d.ts.map +0 -1
  1058. package/lib/hooks/internal/createWaitUntilable.js +0 -50
  1059. package/lib/hooks/internal/createWaitUntilable.spec.d.ts +0 -2
  1060. package/lib/hooks/internal/createWaitUntilable.spec.d.ts.map +0 -1
  1061. package/lib/hooks/internal/private/createOnEventShim.d.ts +0 -5
  1062. package/lib/hooks/internal/private/createOnEventShim.d.ts.map +0 -1
  1063. package/lib/hooks/internal/private/createOnEventShim.js +0 -25
  1064. package/lib/hooks/internal/private/createOnEventShim.spec.d.ts +0 -2
  1065. package/lib/hooks/internal/private/createOnEventShim.spec.d.ts.map +0 -1
  1066. package/lib/hooks/internal/useChanged.d.ts +0 -9
  1067. package/lib/hooks/internal/useChanged.d.ts.map +0 -1
  1068. package/lib/hooks/internal/useChanged.js +0 -21
  1069. package/lib/hooks/internal/useDispatchScrollPosition.js +0 -12
  1070. package/lib/hooks/internal/useDispatchTranscriptFocusByActivityKey.d.ts +0 -2
  1071. package/lib/hooks/internal/useDispatchTranscriptFocusByActivityKey.d.ts.map +0 -1
  1072. package/lib/hooks/internal/useDispatchTranscriptFocusByActivityKey.js +0 -12
  1073. package/lib/hooks/internal/useEnterKeyHint.js +0 -18
  1074. package/lib/hooks/internal/useFocusVisible.d.ts +0 -3
  1075. package/lib/hooks/internal/useFocusVisible.d.ts.map +0 -1
  1076. package/lib/hooks/internal/useFocusVisible.js +0 -37
  1077. package/lib/hooks/internal/useFocusWithin.d.ts +0 -3
  1078. package/lib/hooks/internal/useFocusWithin.d.ts.map +0 -1
  1079. package/lib/hooks/internal/useFocusWithin.js +0 -38
  1080. package/lib/hooks/internal/useForceRender.js +0 -24
  1081. package/lib/hooks/internal/useForceRenderAtInterval.d.ts +0 -3
  1082. package/lib/hooks/internal/useForceRenderAtInterval.d.ts.map +0 -1
  1083. package/lib/hooks/internal/useForceRenderAtInterval.js +0 -57
  1084. package/lib/hooks/internal/useInternalMarkdownIt.js +0 -14
  1085. package/lib/hooks/internal/useInternalRenderMarkdownInline.js +0 -16
  1086. package/lib/hooks/internal/useLocalizeAccessKey.d.ts +0 -2
  1087. package/lib/hooks/internal/useLocalizeAccessKey.d.ts.map +0 -1
  1088. package/lib/hooks/internal/useLocalizeAccessKey.js +0 -38
  1089. package/lib/hooks/internal/useMemoWithPrevious.d.ts +0 -3
  1090. package/lib/hooks/internal/useMemoWithPrevious.d.ts.map +0 -1
  1091. package/lib/hooks/internal/useMemoWithPrevious.js +0 -20
  1092. package/lib/hooks/internal/useMemoized.d.ts +0 -11
  1093. package/lib/hooks/internal/useMemoized.d.ts.map +0 -1
  1094. package/lib/hooks/internal/useMemoized.js +0 -82
  1095. package/lib/hooks/internal/useMemoized.spec.jsx +0 -159
  1096. package/lib/hooks/internal/useNavigatorPlatform.js +0 -31
  1097. package/lib/hooks/internal/useNonce.js +0 -14
  1098. package/lib/hooks/internal/useObserveFocusVisible.d.ts +0 -3
  1099. package/lib/hooks/internal/useObserveFocusVisible.d.ts.map +0 -1
  1100. package/lib/hooks/internal/useObserveFocusVisible.js +0 -201
  1101. package/lib/hooks/internal/usePrevious.d.ts +0 -2
  1102. package/lib/hooks/internal/usePrevious.d.ts.map +0 -1
  1103. package/lib/hooks/internal/usePrevious.js +0 -17
  1104. package/lib/hooks/internal/useRegisterFocusTranscript.js +0 -27
  1105. package/lib/hooks/internal/useRegisterScrollTo.js +0 -27
  1106. package/lib/hooks/internal/useRegisterScrollToEnd.js +0 -25
  1107. package/lib/hooks/internal/useReplaceEmoticon.js +0 -58
  1108. package/lib/hooks/internal/useResumeAudioContext.d.ts +0 -2
  1109. package/lib/hooks/internal/useResumeAudioContext.d.ts.map +0 -1
  1110. package/lib/hooks/internal/useResumeAudioContext.js +0 -23
  1111. package/lib/hooks/internal/useSendBoxFocusRef.js +0 -12
  1112. package/lib/hooks/internal/useSettableDictateAbortable.js +0 -15
  1113. package/lib/hooks/internal/useStateRef.d.ts +0 -3
  1114. package/lib/hooks/internal/useStateRef.d.ts.map +0 -1
  1115. package/lib/hooks/internal/useStateRef.js +0 -30
  1116. package/lib/hooks/internal/useStyleToEmotionObject.js +0 -12
  1117. package/lib/hooks/internal/useSuggestedActionsAccessKey.js +0 -14
  1118. package/lib/hooks/internal/useTimer.d.ts +0 -5
  1119. package/lib/hooks/internal/useTimer.d.ts.map +0 -1
  1120. package/lib/hooks/internal/useTimer.js +0 -46
  1121. package/lib/hooks/internal/useTranscriptActivityElementsRef.js +0 -12
  1122. package/lib/hooks/internal/useTranscriptFocusRef.js +0 -12
  1123. package/lib/hooks/internal/useUniqueId.d.ts +0 -2
  1124. package/lib/hooks/internal/useUniqueId.d.ts.map +0 -1
  1125. package/lib/hooks/internal/useUniqueId.js +0 -19
  1126. package/lib/hooks/internal/useValueRef.d.ts +0 -3
  1127. package/lib/hooks/internal/useValueRef.d.ts.map +0 -1
  1128. package/lib/hooks/internal/useValueRef.js +0 -24
  1129. package/lib/hooks/internal/useWebChatUIContext.js +0 -17
  1130. package/lib/hooks/sendBoxFocus.d.ts +0 -7
  1131. package/lib/hooks/sendBoxFocus.d.ts.map +0 -1
  1132. package/lib/hooks/sendBoxFocus.js +0 -13
  1133. package/lib/hooks/transcriptScrollRelative.d.ts +0 -7
  1134. package/lib/hooks/transcriptScrollRelative.d.ts.map +0 -1
  1135. package/lib/hooks/transcriptScrollRelative.js +0 -13
  1136. package/lib/hooks/useDictateAbortable.d.ts +0 -2
  1137. package/lib/hooks/useDictateAbortable.d.ts.map +0 -1
  1138. package/lib/hooks/useDictateAbortable.js +0 -22
  1139. package/lib/hooks/useFocus.d.ts +0 -2
  1140. package/lib/hooks/useFocus.d.ts.map +0 -1
  1141. package/lib/hooks/useFocus.js +0 -65
  1142. package/lib/hooks/useMakeThumbnail.d.ts +0 -2
  1143. package/lib/hooks/useMakeThumbnail.d.ts.map +0 -1
  1144. package/lib/hooks/useMakeThumbnail.js +0 -74
  1145. package/lib/hooks/useObserveScrollPosition.d.ts +0 -3
  1146. package/lib/hooks/useObserveScrollPosition.d.ts.map +0 -1
  1147. package/lib/hooks/useObserveScrollPosition.js +0 -31
  1148. package/lib/hooks/useObserveTranscriptFocus.d.ts +0 -5
  1149. package/lib/hooks/useObserveTranscriptFocus.d.ts.map +0 -1
  1150. package/lib/hooks/useObserveTranscriptFocus.js +0 -31
  1151. package/lib/hooks/useRenderMarkdownAsHTML.d.ts +0 -5
  1152. package/lib/hooks/useRenderMarkdownAsHTML.d.ts.map +0 -1
  1153. package/lib/hooks/useRenderMarkdownAsHTML.js +0 -62
  1154. package/lib/hooks/useScrollDown.d.ts +0 -4
  1155. package/lib/hooks/useScrollDown.d.ts.map +0 -1
  1156. package/lib/hooks/useScrollDown.js +0 -20
  1157. package/lib/hooks/useScrollTo.d.ts +0 -5
  1158. package/lib/hooks/useScrollTo.d.ts.map +0 -1
  1159. package/lib/hooks/useScrollTo.js +0 -22
  1160. package/lib/hooks/useScrollToEnd.d.ts +0 -2
  1161. package/lib/hooks/useScrollToEnd.d.ts.map +0 -1
  1162. package/lib/hooks/useScrollToEnd.js +0 -21
  1163. package/lib/hooks/useScrollUp.d.ts +0 -4
  1164. package/lib/hooks/useScrollUp.d.ts.map +0 -1
  1165. package/lib/hooks/useScrollUp.js +0 -20
  1166. package/lib/hooks/useSendFiles.d.ts +0 -5
  1167. package/lib/hooks/useSendFiles.d.ts.map +0 -1
  1168. package/lib/hooks/useSendFiles.js +0 -63
  1169. package/lib/hooks/useSendMessage.d.ts +0 -8
  1170. package/lib/hooks/useSendMessage.d.ts.map +0 -1
  1171. package/lib/hooks/useSendMessage.js +0 -102
  1172. package/lib/hooks/useStyleSet.d.ts +0 -3
  1173. package/lib/hooks/useStyleSet.d.ts.map +0 -1
  1174. package/lib/hooks/useStyleSet.js +0 -13
  1175. package/lib/hooks/useWebSpeechPonyfill.d.ts +0 -3
  1176. package/lib/hooks/useWebSpeechPonyfill.d.ts.map +0 -1
  1177. package/lib/hooks/useWebSpeechPonyfill.js +0 -12
  1178. package/lib/index.d.ts +0 -330
  1179. package/lib/index.d.ts.map +0 -1
  1180. package/lib/index.js +0 -164
  1181. package/lib/internal.d.ts +0 -4
  1182. package/lib/internal.d.ts.map +0 -1
  1183. package/lib/internal.js +0 -21
  1184. package/lib/providers/ActivityTree/ActivityTreeComposer.d.ts +0 -7
  1185. package/lib/providers/ActivityTree/ActivityTreeComposer.d.ts.map +0 -1
  1186. package/lib/providers/ActivityTree/ActivityTreeComposer.js +0 -90
  1187. package/lib/providers/ActivityTree/private/Context.d.ts +0 -9
  1188. package/lib/providers/ActivityTree/private/Context.d.ts.map +0 -1
  1189. package/lib/providers/ActivityTree/private/Context.js +0 -10
  1190. package/lib/providers/ActivityTree/private/types.d.ts +0 -10
  1191. package/lib/providers/ActivityTree/private/types.d.ts.map +0 -1
  1192. package/lib/providers/ActivityTree/private/types.js +0 -2
  1193. package/lib/providers/ActivityTree/private/useActivitiesWithRenderer.d.ts +0 -4
  1194. package/lib/providers/ActivityTree/private/useActivitiesWithRenderer.d.ts.map +0 -1
  1195. package/lib/providers/ActivityTree/private/useActivitiesWithRenderer.js +0 -36
  1196. package/lib/providers/ActivityTree/private/useActivityTreeWithRenderer.d.ts +0 -5
  1197. package/lib/providers/ActivityTree/private/useActivityTreeWithRenderer.d.ts.map +0 -1
  1198. package/lib/providers/ActivityTree/private/useActivityTreeWithRenderer.js +0 -147
  1199. package/lib/providers/ActivityTree/private/useContext.d.ts +0 -3
  1200. package/lib/providers/ActivityTree/private/useContext.d.ts.map +0 -1
  1201. package/lib/providers/ActivityTree/private/useContext.js +0 -18
  1202. package/lib/providers/ActivityTree/useActivityTreeWithRenderer.d.ts +0 -8
  1203. package/lib/providers/ActivityTree/useActivityTreeWithRenderer.d.ts.map +0 -1
  1204. package/lib/providers/ActivityTree/useActivityTreeWithRenderer.js +0 -14
  1205. package/lib/providers/LiveRegionTwin/LiveRegionTwinComposer.d.ts +0 -37
  1206. package/lib/providers/LiveRegionTwin/LiveRegionTwinComposer.d.ts.map +0 -1
  1207. package/lib/providers/LiveRegionTwin/LiveRegionTwinComposer.js +0 -145
  1208. package/lib/providers/LiveRegionTwin/private/Context.d.ts +0 -10
  1209. package/lib/providers/LiveRegionTwin/private/Context.d.ts.map +0 -1
  1210. package/lib/providers/LiveRegionTwin/private/Context.js +0 -11
  1211. package/lib/providers/LiveRegionTwin/private/LiveRegionTwinContainer.d.ts +0 -12
  1212. package/lib/providers/LiveRegionTwin/private/LiveRegionTwinContainer.d.ts.map +0 -1
  1213. package/lib/providers/LiveRegionTwin/private/LiveRegionTwinContainer.js +0 -77
  1214. package/lib/providers/LiveRegionTwin/private/types.d.ts +0 -8
  1215. package/lib/providers/LiveRegionTwin/private/types.d.ts.map +0 -1
  1216. package/lib/providers/LiveRegionTwin/private/types.js +0 -2
  1217. package/lib/providers/LiveRegionTwin/private/useContext.d.ts +0 -3
  1218. package/lib/providers/LiveRegionTwin/private/useContext.d.ts.map +0 -1
  1219. package/lib/providers/LiveRegionTwin/private/useContext.js +0 -18
  1220. package/lib/providers/LiveRegionTwin/private/useMarkAllAsRenderedEffect.d.ts +0 -2
  1221. package/lib/providers/LiveRegionTwin/private/useMarkAllAsRenderedEffect.d.ts.map +0 -1
  1222. package/lib/providers/LiveRegionTwin/private/useMarkAllAsRenderedEffect.js +0 -20
  1223. package/lib/providers/LiveRegionTwin/private/useStaticElementEntries.d.ts +0 -3
  1224. package/lib/providers/LiveRegionTwin/private/useStaticElementEntries.d.ts.map +0 -1
  1225. package/lib/providers/LiveRegionTwin/private/useStaticElementEntries.js +0 -12
  1226. package/lib/providers/LiveRegionTwin/useQueueStaticElement.d.ts +0 -8
  1227. package/lib/providers/LiveRegionTwin/useQueueStaticElement.d.ts.map +0 -1
  1228. package/lib/providers/LiveRegionTwin/useQueueStaticElement.js +0 -17
  1229. package/lib/providers/ModalDialog/ModalDialogComposer.d.ts +0 -7
  1230. package/lib/providers/ModalDialog/ModalDialogComposer.d.ts.map +0 -1
  1231. package/lib/providers/ModalDialog/ModalDialogComposer.js +0 -51
  1232. package/lib/providers/ModalDialog/private/Context.d.ts +0 -13
  1233. package/lib/providers/ModalDialog/private/Context.d.ts.map +0 -1
  1234. package/lib/providers/ModalDialog/private/Context.js +0 -24
  1235. package/lib/providers/ModalDialog/private/Popover.d.ts +0 -10
  1236. package/lib/providers/ModalDialog/private/Popover.d.ts.map +0 -1
  1237. package/lib/providers/ModalDialog/private/Popover.js +0 -79
  1238. package/lib/providers/ModalDialog/private/useContext.d.ts +0 -4
  1239. package/lib/providers/ModalDialog/private/useContext.d.ts.map +0 -1
  1240. package/lib/providers/ModalDialog/private/useContext.js +0 -13
  1241. package/lib/providers/ModalDialog/useClose.d.ts +0 -3
  1242. package/lib/providers/ModalDialog/useClose.d.ts.map +0 -1
  1243. package/lib/providers/ModalDialog/useClose.js +0 -12
  1244. package/lib/providers/ModalDialog/useShowModal.d.ts +0 -3
  1245. package/lib/providers/ModalDialog/useShowModal.d.ts.map +0 -1
  1246. package/lib/providers/ModalDialog/useShowModal.js +0 -12
  1247. package/lib/providers/RovingTabIndex/RovingTabIndexComposer.d.ts +0 -8
  1248. package/lib/providers/RovingTabIndex/RovingTabIndexComposer.d.ts.map +0 -1
  1249. package/lib/providers/RovingTabIndex/RovingTabIndexComposer.js +0 -163
  1250. package/lib/providers/RovingTabIndex/private/Context.d.ts +0 -8
  1251. package/lib/providers/RovingTabIndex/private/Context.d.ts.map +0 -1
  1252. package/lib/providers/RovingTabIndex/private/Context.js +0 -17
  1253. package/lib/providers/RovingTabIndex/private/useContext.d.ts +0 -2
  1254. package/lib/providers/RovingTabIndex/private/useContext.d.ts.map +0 -1
  1255. package/lib/providers/RovingTabIndex/private/useContext.js +0 -18
  1256. package/lib/providers/RovingTabIndex/useItemRef.d.ts +0 -3
  1257. package/lib/providers/RovingTabIndex/useItemRef.d.ts.map +0 -1
  1258. package/lib/providers/RovingTabIndex/useItemRef.js +0 -19
  1259. package/lib/providers/Theme/ThemeProvider.d.ts +0 -7
  1260. package/lib/providers/Theme/ThemeProvider.d.ts.map +0 -1
  1261. package/lib/providers/Theme/ThemeProvider.js +0 -103
  1262. package/lib/providers/Theme/private/Context.d.ts +0 -19
  1263. package/lib/providers/Theme/private/Context.d.ts.map +0 -1
  1264. package/lib/providers/Theme/private/Context.js +0 -26
  1265. package/lib/providers/Theme/useTheme.d.ts +0 -2
  1266. package/lib/providers/Theme/useTheme.d.ts.map +0 -1
  1267. package/lib/providers/Theme/useTheme.js +0 -13
  1268. package/lib/providers/TranscriptFocus/TranscriptFocusComposer.d.ts +0 -7
  1269. package/lib/providers/TranscriptFocus/TranscriptFocusComposer.d.ts.map +0 -1
  1270. package/lib/providers/TranscriptFocus/TranscriptFocusComposer.js +0 -153
  1271. package/lib/providers/TranscriptFocus/private/Context.d.ts +0 -12
  1272. package/lib/providers/TranscriptFocus/private/Context.d.ts.map +0 -1
  1273. package/lib/providers/TranscriptFocus/private/Context.js +0 -11
  1274. package/lib/providers/TranscriptFocus/private/useContext.d.ts +0 -2
  1275. package/lib/providers/TranscriptFocus/private/useContext.d.ts.map +0 -1
  1276. package/lib/providers/TranscriptFocus/private/useContext.js +0 -18
  1277. package/lib/providers/TranscriptFocus/useActiveDescendantId.d.ts +0 -2
  1278. package/lib/providers/TranscriptFocus/useActiveDescendantId.d.ts.map +0 -1
  1279. package/lib/providers/TranscriptFocus/useActiveDescendantId.js +0 -12
  1280. package/lib/providers/TranscriptFocus/useFocusByActivityKey.d.ts +0 -8
  1281. package/lib/providers/TranscriptFocus/useFocusByActivityKey.d.ts.map +0 -1
  1282. package/lib/providers/TranscriptFocus/useFocusByActivityKey.js +0 -18
  1283. package/lib/providers/TranscriptFocus/useFocusRelativeActivity.d.ts +0 -2
  1284. package/lib/providers/TranscriptFocus/useFocusRelativeActivity.d.ts.map +0 -1
  1285. package/lib/providers/TranscriptFocus/useFocusRelativeActivity.js +0 -12
  1286. package/lib/providers/TranscriptFocus/useFocusedActivityKey.d.ts +0 -2
  1287. package/lib/providers/TranscriptFocus/useFocusedActivityKey.d.ts.map +0 -1
  1288. package/lib/providers/TranscriptFocus/useFocusedActivityKey.js +0 -12
  1289. package/lib/providers/TranscriptFocus/useFocusedExplicitly.d.ts +0 -2
  1290. package/lib/providers/TranscriptFocus/useFocusedExplicitly.d.ts.map +0 -1
  1291. package/lib/providers/TranscriptFocus/useFocusedExplicitly.js +0 -12
  1292. package/lib/providers/TranscriptFocus/useGetDescendantIdByActivityKey.d.ts +0 -2
  1293. package/lib/providers/TranscriptFocus/useGetDescendantIdByActivityKey.d.ts.map +0 -1
  1294. package/lib/providers/TranscriptFocus/useGetDescendantIdByActivityKey.js +0 -12
  1295. package/lib/providers/internal/SendBox/SendBoxComposer.d.ts +0 -4
  1296. package/lib/providers/internal/SendBox/SendBoxComposer.d.ts.map +0 -1
  1297. package/lib/providers/internal/SendBox/SendBoxComposer.js +0 -161
  1298. package/lib/providers/internal/SendBox/private/Context.d.ts +0 -4
  1299. package/lib/providers/internal/SendBox/private/Context.d.ts.map +0 -1
  1300. package/lib/providers/internal/SendBox/private/Context.js +0 -11
  1301. package/lib/providers/internal/SendBox/private/types.d.ts +0 -8
  1302. package/lib/providers/internal/SendBox/private/types.d.ts.map +0 -1
  1303. package/lib/providers/internal/SendBox/private/types.js +0 -2
  1304. package/lib/providers/internal/SendBox/private/useContext.d.ts +0 -3
  1305. package/lib/providers/internal/SendBox/private/useContext.d.ts.map +0 -1
  1306. package/lib/providers/internal/SendBox/private/useContext.js +0 -17
  1307. package/lib/providers/internal/SendBox/useErrorMessageId.d.ts +0 -12
  1308. package/lib/providers/internal/SendBox/useErrorMessageId.d.ts.map +0 -1
  1309. package/lib/providers/internal/SendBox/useErrorMessageId.js +0 -22
  1310. package/lib/providers/internal/SendBox/useSubmit.d.ts +0 -14
  1311. package/lib/providers/internal/SendBox/useSubmit.d.ts.map +0 -1
  1312. package/lib/providers/internal/SendBox/useSubmit.js +0 -20
  1313. package/lib/tsconfig.json +0 -18
  1314. package/lib/types/ContextOf.d.ts +0 -4
  1315. package/lib/types/ContextOf.d.ts.map +0 -1
  1316. package/lib/types/ContextOf.js +0 -2
  1317. package/lib/types/PropsOf.d.ts +0 -3
  1318. package/lib/types/PropsOf.d.ts.map +0 -1
  1319. package/lib/types/PropsOf.js +0 -2
  1320. package/lib/types/ScrollPosition.d.ts +0 -6
  1321. package/lib/types/ScrollPosition.d.ts.map +0 -1
  1322. package/lib/types/ScrollPosition.js +0 -2
  1323. package/lib/types/internal/FocusTranscriptInit.d.ts +0 -4
  1324. package/lib/types/internal/FocusTranscriptInit.d.ts.map +0 -1
  1325. package/lib/types/internal/FocusTranscriptInit.js +0 -2
  1326. package/lib/types/internal/SendStatus.d.ts +0 -7
  1327. package/lib/types/internal/SendStatus.d.ts.map +0 -1
  1328. package/lib/types/internal/SendStatus.js +0 -19
  1329. package/lib/types/internal/TypeOfArray.d.ts +0 -2
  1330. package/lib/types/internal/TypeOfArray.d.ts.map +0 -1
  1331. package/lib/types/internal/TypeOfArray.js +0 -2
  1332. package/lib/withEmoji/private/UndoEntry.d.ts +0 -9
  1333. package/lib/withEmoji/private/UndoEntry.d.ts.map +0 -1
  1334. package/lib/withEmoji/private/UndoEntry.js +0 -69
  1335. package/lib/withEmoji/private/useUndoStack.d.ts +0 -6
  1336. package/lib/withEmoji/private/useUndoStack.d.ts.map +0 -1
  1337. package/lib/withEmoji/private/useUndoStack.js +0 -64
  1338. package/lib/withEmoji/withEmoji.d.ts +0 -15
  1339. package/lib/withEmoji/withEmoji.d.ts.map +0 -1
  1340. package/lib/withEmoji/withEmoji.js +0 -128
  1341. package/src/Activity/SayAlt.js +0 -26
  1342. package/src/ActivityStatus/AbsoluteTime.js +0 -32
  1343. package/src/ActivityStatus/Slotted.tsx +0 -26
  1344. package/src/ActivityStatus/private/Feedback/Feedback.tsx +0 -60
  1345. package/src/ActivityStatus/private/Feedback/private/ThumbButton.Image.tsx +0 -30
  1346. package/src/ActivityStatus/private/Feedback/private/ThumbButton.tsx +0 -54
  1347. package/src/ActivityStatus/private/Feedback/private/VoteButton.tsx +0 -36
  1348. package/src/ActivityStatus/private/Feedback/private/icons/ThumbDislike16Filled.tsx +0 -16
  1349. package/src/ActivityStatus/private/Feedback/private/icons/ThumbDislike16Regular.tsx +0 -16
  1350. package/src/ActivityStatus/private/Feedback/private/icons/ThumbLike16Filled.tsx +0 -16
  1351. package/src/ActivityStatus/private/Feedback/private/icons/ThumbLike16Regular.tsx +0 -16
  1352. package/src/ActivityStatus/private/RelativeTime.js +0 -31
  1353. package/src/Attachment/Assets/DownloadIcon.js +0 -29
  1354. package/src/Attachment/ImageAttachment.js +0 -37
  1355. package/src/Avatar/ImageAvatar.js +0 -49
  1356. package/src/Avatar/InitialsAvatar.js +0 -50
  1357. package/src/ConnectivityStatus/Connecting.js +0 -72
  1358. package/src/LinkDefinition/private/Chevron.tsx +0 -21
  1359. package/src/Middleware/Activity/createCoreMiddleware.tsx +0 -102
  1360. package/src/Middleware/Avatar/createCoreMiddleware.tsx +0 -76
  1361. package/src/Middleware/ScrollToEndButton/ScrollToEndButton.js +0 -45
  1362. package/src/SendBox/Assets/MicrophoneIcon.js +0 -12
  1363. package/src/SendBox/Assets/SendIcon.js +0 -36
  1364. package/src/Styles/StyleSet/CSSCustomProperties.ts +0 -46
  1365. package/src/Styles/StyleSet/KeyboardHelp.ts +0 -204
  1366. package/src/Styles/StyleSet/SingleAttachmentActivity.ts +0 -18
  1367. package/src/Styles/StyleSet/SlottedActivityStatus.ts +0 -16
  1368. package/src/Transcript/KeyboardHelp.tsx +0 -319
  1369. package/src/TranscriptActivity.tsx +0 -64
  1370. package/src/Utils/AccessKeySink/Surface.js +0 -56
  1371. package/src/Utils/CroppedImage.js +0 -45
  1372. package/src/Utils/parseDocumentFromString.ts +0 -5
  1373. package/src/Utils/readDataURIToBlob.js +0 -31
  1374. package/src/Utils/serializeDocumentIntoString.ts +0 -10
  1375. package/src/Utils/singleToArray.ts +0 -3
  1376. package/src/Utils/textFormatToContentType.js +0 -12
  1377. package/src/hooks/internal/useMemoWithPrevious.ts +0 -16
  1378. package/src/hooks/internal/useNonce.js +0 -7
  1379. package/src/hooks/internal/useStyleToEmotionObject.js +0 -5
  1380. package/src/internal.ts +0 -4
  1381. package/src/providers/ActivityTree/ActivityTreeComposer.tsx +0 -90
  1382. package/src/providers/ActivityTree/private/Context.ts +0 -12
  1383. package/src/providers/ActivityTree/private/types.ts +0 -12
  1384. package/src/providers/ActivityTree/private/useActivitiesWithRenderer.ts +0 -40
  1385. package/src/providers/ActivityTree/private/useActivityTreeWithRenderer.ts +0 -140
  1386. package/src/providers/ActivityTree/private/useContext.ts +0 -15
  1387. package/src/providers/ActivityTree/useActivityTreeWithRenderer.ts +0 -16
  1388. package/src/providers/LiveRegionTwin/LiveRegionTwinComposer.tsx +0 -172
  1389. package/src/providers/LiveRegionTwin/private/Context.ts +0 -15
@@ -1,735 +0,0 @@
1
- "use strict";
2
-
3
- function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
4
- Object.defineProperty(exports, "__esModule", {
5
- value: true
6
- });
7
- exports.default = void 0;
8
- var _botframeworkWebchatApi = require("botframework-webchat-api");
9
- var _reactScrollToBottom = require("react-scroll-to-bottom");
10
- var _classnames = _interopRequireDefault(require("classnames"));
11
- var _propTypes = _interopRequireDefault(require("prop-types"));
12
- var _react = _interopRequireWildcard(require("react"));
13
- var _detectBrowser = require("./Utils/detectBrowser");
14
- var _BasicTypingIndicator = _interopRequireDefault(require("./BasicTypingIndicator"));
15
- var _FocusRedirector = _interopRequireDefault(require("./Utils/FocusRedirector"));
16
- var _inputtableKey = _interopRequireDefault(require("./Utils/TypeFocusSink/inputtableKey"));
17
- var _isZeroOrPositive = _interopRequireDefault(require("./Utils/isZeroOrPositive"));
18
- var _KeyboardHelp = _interopRequireDefault(require("./Transcript/KeyboardHelp"));
19
- var _LiveRegionTranscript = _interopRequireDefault(require("./Transcript/LiveRegionTranscript"));
20
- var _tabbableElements = _interopRequireDefault(require("./Utils/tabbableElements"));
21
- var _TranscriptFocusComposer = _interopRequireDefault(require("./providers/TranscriptFocus/TranscriptFocusComposer"));
22
- var _useActiveDescendantId = _interopRequireDefault(require("./providers/TranscriptFocus/useActiveDescendantId"));
23
- var _useActivityTreeWithRenderer = _interopRequireDefault(require("./providers/ActivityTree/useActivityTreeWithRenderer"));
24
- var _useDispatchScrollPosition = _interopRequireDefault(require("./hooks/internal/useDispatchScrollPosition"));
25
- var _useDispatchTranscriptFocusByActivityKey = _interopRequireDefault(require("./hooks/internal/useDispatchTranscriptFocusByActivityKey"));
26
- var _useFocus = _interopRequireDefault(require("./hooks/useFocus"));
27
- var _useFocusByActivityKey = _interopRequireDefault(require("./providers/TranscriptFocus/useFocusByActivityKey"));
28
- var _useFocusedActivityKey = _interopRequireDefault(require("./providers/TranscriptFocus/useFocusedActivityKey"));
29
- var _useFocusedExplicitly3 = _interopRequireDefault(require("./providers/TranscriptFocus/useFocusedExplicitly"));
30
- var _useFocusRelativeActivity = _interopRequireDefault(require("./providers/TranscriptFocus/useFocusRelativeActivity"));
31
- var _useObserveFocusVisible = _interopRequireDefault(require("./hooks/internal/useObserveFocusVisible"));
32
- var _usePrevious = _interopRequireDefault(require("./hooks/internal/usePrevious"));
33
- var _useRegisterFocusTranscript = _interopRequireDefault(require("./hooks/internal/useRegisterFocusTranscript"));
34
- var _useRegisterScrollTo = _interopRequireDefault(require("./hooks/internal/useRegisterScrollTo"));
35
- var _useRegisterScrollToEnd = _interopRequireDefault(require("./hooks/internal/useRegisterScrollToEnd"));
36
- var _useStyleSet5 = _interopRequireDefault(require("./hooks/useStyleSet"));
37
- var _useStyleToEmotionObject = _interopRequireDefault(require("./hooks/internal/useStyleToEmotionObject"));
38
- var _useUniqueId = _interopRequireDefault(require("./hooks/internal/useUniqueId"));
39
- var _useValueRef = _interopRequireDefault(require("./hooks/internal/useValueRef"));
40
- var _TranscriptActivity = _interopRequireDefault(require("./TranscriptActivity"));
41
- var _useMemoized = _interopRequireDefault(require("./hooks/internal/useMemoized"));
42
- var _transcriptScrollRelative = require("./hooks/transcriptScrollRelative");
43
- function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
44
- function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
45
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
46
- function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e2) { throw _e2; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e3) { didErr = true; err = _e3; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }
47
- function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
48
- function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
49
- function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
50
- function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
51
- function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
52
- function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
53
- function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
54
- function _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
55
- function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; } // TODO: [P2] #4133 Rename to "getTabbableElements".
56
- var useActivityKeys = _botframeworkWebchatApi.hooks.useActivityKeys,
57
- useActivityKeysByRead = _botframeworkWebchatApi.hooks.useActivityKeysByRead,
58
- useCreateAvatarRenderer = _botframeworkWebchatApi.hooks.useCreateAvatarRenderer,
59
- useCreateScrollToEndButtonRenderer = _botframeworkWebchatApi.hooks.useCreateScrollToEndButtonRenderer,
60
- useDirection = _botframeworkWebchatApi.hooks.useDirection,
61
- useGetActivityByKey = _botframeworkWebchatApi.hooks.useGetActivityByKey,
62
- useGetKeyByActivity = _botframeworkWebchatApi.hooks.useGetKeyByActivity,
63
- useGetKeyByActivityId = _botframeworkWebchatApi.hooks.useGetKeyByActivityId,
64
- useLastAcknowledgedActivityKey = _botframeworkWebchatApi.hooks.useLastAcknowledgedActivityKey,
65
- useLocalizer = _botframeworkWebchatApi.hooks.useLocalizer,
66
- useMarkActivityKeyAsRead = _botframeworkWebchatApi.hooks.useMarkActivityKeyAsRead,
67
- useMarkAllAsAcknowledged = _botframeworkWebchatApi.hooks.useMarkAllAsAcknowledged,
68
- useStyleOptions = _botframeworkWebchatApi.hooks.useStyleOptions;
69
- var ROOT_STYLE = {
70
- '&.webchat__basic-transcript': {
71
- display: 'flex',
72
- flexDirection: 'column',
73
- overflow: 'hidden',
74
- // Make sure to set "position: relative" here to form another stacking context for the scroll-to-end button.
75
- // Stacking context help isolating elements that use "z-index" from global pollution.
76
- // https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Positioning/Understanding_z_index/The_stacking_context
77
- position: 'relative',
78
- '& .webchat__basic-transcript__filler': {
79
- flex: 1
80
- },
81
- '& .webchat__basic-transcript__scrollable': {
82
- display: 'flex',
83
- flexDirection: 'column',
84
- overflowX: 'hidden',
85
- WebkitOverflowScrolling: 'touch'
86
- },
87
- '& .webchat__basic-transcript__transcript': {
88
- listStyleType: 'none'
89
- }
90
- }
91
- };
92
- // TODO: [P1] #4133 Add telemetry for computing how many re-render done so far.
93
- var InternalTranscript = /*#__PURE__*/(0, _react.forwardRef)(function (_ref, ref) {
94
- var activityElementMapRef = _ref.activityElementMapRef,
95
- className = _ref.className;
96
- var _useStyleSet = (0, _useStyleSet5.default)(),
97
- _useStyleSet2 = _slicedToArray(_useStyleSet, 1),
98
- basicTranscriptStyleSet = _useStyleSet2[0].basicTranscript;
99
- var _useStyleOptions = useStyleOptions(),
100
- _useStyleOptions2 = _slicedToArray(_useStyleOptions, 1),
101
- _useStyleOptions2$ = _useStyleOptions2[0],
102
- bubbleFromUserNubOffset = _useStyleOptions2$.bubbleFromUserNubOffset,
103
- bubbleNubOffset = _useStyleOptions2$.bubbleNubOffset,
104
- groupTimestamp = _useStyleOptions2$.groupTimestamp,
105
- showAvatarInGroup = _useStyleOptions2$.showAvatarInGroup;
106
- var _useActiveDescendantI = (0, _useActiveDescendantId.default)(),
107
- _useActiveDescendantI2 = _slicedToArray(_useActiveDescendantI, 1),
108
- activeDescendantId = _useActiveDescendantI2[0];
109
- var _useActivityTreeWithR = (0, _useActivityTreeWithRenderer.default)(),
110
- _useActivityTreeWithR2 = _slicedToArray(_useActivityTreeWithR, 1),
111
- activityWithRendererTree = _useActivityTreeWithR2[0];
112
- var _useDirection = useDirection(),
113
- _useDirection2 = _slicedToArray(_useDirection, 1),
114
- direction = _useDirection2[0];
115
- var _useFocusedActivityKe = (0, _useFocusedActivityKey.default)(),
116
- _useFocusedActivityKe2 = _slicedToArray(_useFocusedActivityKe, 1),
117
- focusedActivityKey = _useFocusedActivityKe2[0];
118
- var _useFocusedExplicitly = (0, _useFocusedExplicitly3.default)(),
119
- _useFocusedExplicitly2 = _slicedToArray(_useFocusedExplicitly, 1),
120
- focusedExplicitly = _useFocusedExplicitly2[0];
121
- var createAvatarRenderer = useCreateAvatarRenderer();
122
- var focus = (0, _useFocus.default)();
123
- var focusByActivityKey = (0, _useFocusByActivityKey.default)();
124
- var focusRelativeActivity = (0, _useFocusRelativeActivity.default)();
125
- var getActivityByKey = useGetActivityByKey();
126
- var getKeyByActivity = useGetKeyByActivity();
127
- var getKeyByActivityId = useGetKeyByActivityId();
128
- var localize = useLocalizer();
129
- var rootClassName = (0, _useStyleToEmotionObject.default)()(ROOT_STYLE) + '';
130
- var rootElementRef = (0, _react.useRef)();
131
- var terminatorLabelId = (0, _useUniqueId.default)('webchat__basic-transcript__terminator-label');
132
- var terminatorRef = (0, _react.useRef)();
133
- var focusedActivityKeyRef = (0, _useValueRef.default)(focusedActivityKey);
134
- var hideAllTimestamps = groupTimestamp === false;
135
- var terminatorText = localize('TRANSCRIPT_TERMINATOR_TEXT');
136
- var transcriptAriaLabel = localize('TRANSCRIPT_ARIA_LABEL_ALT');
137
- var callbackRef = (0, _react.useCallback)(function (element) {
138
- if (typeof ref === 'function') {
139
- ref(element);
140
- } else {
141
- ref.current = element;
142
- }
143
- rootElementRef.current = element;
144
- }, [ref, rootElementRef]);
145
- var createAvatarRendererMemoized = (0, _useMemoized.default)(function (activity) {
146
- return createAvatarRenderer({
147
- activity: activity
148
- });
149
- }, [createAvatarRenderer]);
150
-
151
- // Flatten the tree back into an array with information related to rendering.
152
- var renderingElements = (0, _react.useMemo)(function () {
153
- var renderingElements = [];
154
- var topSideBotNub = (0, _isZeroOrPositive.default)(bubbleNubOffset);
155
- var topSideUserNub = (0, _isZeroOrPositive.default)(bubbleFromUserNubOffset);
156
- activityWithRendererTree.forEach(function (entriesWithSameSender) {
157
- var _entriesWithSameSende = _slicedToArray(entriesWithSameSender, 1),
158
- _entriesWithSameSende2 = _slicedToArray(_entriesWithSameSende[0], 1),
159
- firstActivity = _entriesWithSameSende2[0].activity;
160
- var renderAvatar = createAvatarRendererMemoized(firstActivity);
161
- entriesWithSameSender.forEach(function (entriesWithSameSenderAndStatus, indexWithinSenderGroup) {
162
- var firstInSenderGroup = !indexWithinSenderGroup;
163
- var lastInSenderGroup = indexWithinSenderGroup === entriesWithSameSender.length - 1;
164
- entriesWithSameSenderAndStatus.forEach(function (_ref2, indexWithinSenderAndStatusGroup) {
165
- var _activity$from;
166
- var activity = _ref2.activity,
167
- renderActivity = _ref2.renderActivity;
168
- // We only show the timestamp at the end of the sender group. But we always show the "Send failed, retry" prompt.
169
- var firstInSenderAndStatusGroup = !indexWithinSenderAndStatusGroup;
170
- var key = getKeyByActivity(activity);
171
- var lastInSenderAndStatusGroup = indexWithinSenderAndStatusGroup === entriesWithSameSenderAndStatus.length - 1;
172
- var topSideNub = ((_activity$from = activity.from) === null || _activity$from === void 0 ? void 0 : _activity$from.role) === 'user' ? topSideUserNub : topSideBotNub;
173
- var showCallout;
174
-
175
- // Depending on the "showAvatarInGroup" setting, the avatar will render in different positions.
176
- if (showAvatarInGroup === 'sender') {
177
- if (topSideNub) {
178
- showCallout = firstInSenderGroup && firstInSenderAndStatusGroup;
179
- } else {
180
- showCallout = lastInSenderGroup && lastInSenderAndStatusGroup;
181
- }
182
- } else if (showAvatarInGroup === 'status') {
183
- if (topSideNub) {
184
- showCallout = firstInSenderAndStatusGroup;
185
- } else {
186
- showCallout = lastInSenderAndStatusGroup;
187
- }
188
- } else {
189
- showCallout = true;
190
- }
191
- renderingElements.push( /*#__PURE__*/_react.default.createElement(_TranscriptActivity.default, {
192
- activity: activity,
193
- activityElementMapRef: activityElementMapRef
194
- // "hideTimestamp" is a render-time parameter for renderActivityStatus().
195
- // If true, it will hide the timestamp, but it will continue to show the
196
- // retry prompt. And show the screen reader version of the timestamp.
197
- ,
198
- activityKey: key,
199
- hideTimestamp: hideAllTimestamps || indexWithinSenderAndStatusGroup !== entriesWithSameSenderAndStatus.length - 1,
200
- key: key,
201
- renderActivity: renderActivity,
202
- renderAvatar: renderAvatar,
203
- showCallout: showCallout
204
- }));
205
- });
206
- });
207
- });
208
- return renderingElements;
209
- }, [activityElementMapRef, activityWithRendererTree, bubbleFromUserNubOffset, bubbleNubOffset, createAvatarRendererMemoized, getKeyByActivity, hideAllTimestamps, showAvatarInGroup]);
210
- var scrollToBottomScrollTo = (0, _reactScrollToBottom.useScrollTo)();
211
- var scrollToBottomScrollToEnd = (0, _reactScrollToBottom.useScrollToEnd)();
212
- var scrollTo = (0, _react.useCallback)(function (position) {
213
- var _ref3 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},
214
- _ref3$behavior = _ref3.behavior,
215
- behavior = _ref3$behavior === void 0 ? 'auto' : _ref3$behavior;
216
- if (!position) {
217
- throw new Error('botframework-webchat: First argument passed to "useScrollTo" must be a ScrollPosition object.');
218
- }
219
- var activityId = position.activityID,
220
- scrollTop = position.scrollTop;
221
- if (typeof scrollTop !== 'undefined') {
222
- scrollToBottomScrollTo(scrollTop, {
223
- behavior: behavior
224
- });
225
- } else if (typeof activityId !== 'undefined') {
226
- var _activityElementMapRe;
227
- var activityBoundingBoxElement = (_activityElementMapRe = activityElementMapRef.current.get(getKeyByActivityId(activityId))) === null || _activityElementMapRe === void 0 ? void 0 : _activityElementMapRe.querySelector('.webchat__basic-transcript__activity-active-descendant');
228
- var scrollableElement = rootElementRef.current.querySelector('.webchat__basic-transcript__scrollable');
229
- if (scrollableElement && activityBoundingBoxElement) {
230
- // ESLint conflict with TypeScript. The result of getClientRects() is not an Array but DOMRectList, and cannot be destructured.
231
- // eslint-disable-next-line prefer-destructuring
232
- var activityBoundingBoxElementClientRect = activityBoundingBoxElement.getClientRects()[0];
233
-
234
- // ESLint conflict with TypeScript. The result of getClientRects() is not an Array but DOMRectList, and cannot be destructured.
235
- // eslint-disable-next-line prefer-destructuring
236
- var scrollableElementClientRect = scrollableElement.getClientRects()[0];
237
-
238
- // If either the activity or the transcript scrollable is not on DOM, we will not scroll the view.
239
- if (activityBoundingBoxElementClientRect && scrollableElementClientRect) {
240
- var activityHeight = activityBoundingBoxElementClientRect.height,
241
- activityY = activityBoundingBoxElementClientRect.y;
242
- var scrollableHeight = scrollableElementClientRect.height;
243
- var activityOffsetTop = activityY + scrollableElement.scrollTop;
244
- var _scrollTop = Math.min(activityOffsetTop, activityOffsetTop - scrollableHeight + activityHeight);
245
- scrollToBottomScrollTo(_scrollTop, {
246
- behavior: behavior
247
- });
248
- }
249
- }
250
- }
251
- }, [activityElementMapRef, getKeyByActivityId, rootElementRef, scrollToBottomScrollTo]);
252
- var scrollToEnd = (0, _react.useCallback)(function () {
253
- return scrollToBottomScrollToEnd({
254
- behavior: 'smooth'
255
- });
256
- }, [scrollToBottomScrollToEnd]);
257
- var scrollRelative = (0, _react.useCallback)(function (_ref4) {
258
- var direction = _ref4.direction,
259
- displacement = _ref4.displacement;
260
- var rootElement = rootElementRef.current;
261
- if (!rootElement) {
262
- return;
263
- }
264
- var scrollable = rootElement.querySelector('.webchat__basic-transcript__scrollable');
265
- var nextScrollTop;
266
- if (typeof displacement === 'number') {
267
- // eslint-disable-next-line no-magic-numbers
268
- nextScrollTop = scrollable.scrollTop + (direction === 'down' ? 1 : -1) * displacement;
269
- } else {
270
- // eslint-disable-next-line no-magic-numbers
271
- nextScrollTop = scrollable.scrollTop + (direction === 'down' ? 1 : -1) * scrollable.offsetHeight;
272
- }
273
- scrollTo({
274
- scrollTop: Math.max(0, Math.min(scrollable.scrollHeight - scrollable.offsetHeight, nextScrollTop))
275
- }, {
276
- behavior: 'smooth'
277
- });
278
- }, [rootElementRef, scrollTo]);
279
-
280
- // Since there could be multiple instances of <BasicTranscript> inside the <Composer>, when the developer calls `scrollXXX`, we need to call it on all instances.
281
- // We call `useRegisterScrollXXX` to register a callback function, the `useScrollXXX` will multiplex the call into each instance of <BasicTranscript>.
282
- (0, _useRegisterScrollTo.default)(scrollTo);
283
- (0, _useRegisterScrollToEnd.default)(scrollToEnd);
284
- (0, _transcriptScrollRelative.useRegisterScrollRelativeTranscript)(scrollRelative);
285
- var markActivityKeyAsRead = useMarkActivityKeyAsRead();
286
- var dispatchScrollPositionWithActivityId = (0, _useDispatchScrollPosition.default)();
287
-
288
- // TODO: [P2] We should use IntersectionObserver to track what activity is in the scrollable.
289
- // However, IntersectionObserver is not available on IE11, we need to make a limited polyfill in React style.
290
- var handleScrollPosition = (0, _react.useCallback)(function (_ref5) {
291
- var _ref6;
292
- var scrollTop = _ref5.scrollTop;
293
- var rootElement = rootElementRef.current;
294
- if (!rootElement) {
295
- return;
296
- }
297
- var scrollableElement = rootElement.querySelector('.webchat__basic-transcript__scrollable');
298
-
299
- // "getClientRects()" is not returning an array, thus, it is not destructurable.
300
- // eslint-disable-next-line prefer-destructuring
301
- var scrollableElementClientRect = scrollableElement.getClientRects()[0];
302
-
303
- // If the scrollable is not mounted, we cannot measure which activity is in view. Thus, we will not fire any events.
304
- if (!scrollableElementClientRect) {
305
- return;
306
- }
307
- var scrollableClientBottom = scrollableElementClientRect.bottom;
308
-
309
- // Find the activity just above scroll view bottom.
310
- // If the scroll view is already on top, get the first activity.
311
- var activityElements = Array.from(activityElementMapRef.current.entries());
312
- var activityKeyJustAboveScrollBottom = (_ref6 = scrollableElement.scrollTop ? activityElements.reverse()
313
- // Add subpixel tolerance
314
- .find(function (_ref7) {
315
- var _ref8 = _slicedToArray(_ref7, 2),
316
- element = _ref8[1];
317
- // "getClientRects()" is not returning an array, thus, it is not destructurable.
318
- // eslint-disable-next-line prefer-destructuring
319
- var elementClientRect = element.getClientRects()[0];
320
-
321
- // If the activity is not attached to DOM tree, we should not count it as "bottommost visible activity", as it is not visible.
322
- return elementClientRect && elementClientRect.bottom < scrollableClientBottom + 1;
323
- }) : activityElements[0]) === null || _ref6 === void 0 ? void 0 : _ref6[0];
324
-
325
- // When the end-user slowly scrolling the view down, we will mark activity as read when the message fully appear on the screen.
326
- activityKeyJustAboveScrollBottom && markActivityKeyAsRead(activityKeyJustAboveScrollBottom);
327
- if (dispatchScrollPositionWithActivityId) {
328
- var activity = getActivityByKey(activityKeyJustAboveScrollBottom);
329
- dispatchScrollPositionWithActivityId(_objectSpread(_objectSpread({}, activity ? {
330
- activityID: activity.id
331
- } : {}), {}, {
332
- scrollTop: scrollTop
333
- }));
334
- }
335
- }, [activityElementMapRef, dispatchScrollPositionWithActivityId, getActivityByKey, markActivityKeyAsRead, rootElementRef]);
336
- (0, _reactScrollToBottom.useObserveScrollPosition)(handleScrollPosition);
337
- var handleTranscriptKeyDown = (0, _react.useCallback)(function (event) {
338
- var target = event.target;
339
- var fromEndOfTranscriptIndicator = target === terminatorRef.current;
340
- var fromTranscript = target === event.currentTarget;
341
- if (!fromEndOfTranscriptIndicator && !fromTranscript) {
342
- return;
343
- }
344
- var handled = true;
345
- switch (event.key) {
346
- case 'ArrowDown':
347
- focusRelativeActivity(fromEndOfTranscriptIndicator ? 0 : 1);
348
- break;
349
- case 'ArrowUp':
350
- // eslint-disable-next-line no-magic-numbers
351
- focusRelativeActivity(fromEndOfTranscriptIndicator ? 0 : -1);
352
- break;
353
- case 'End':
354
- focusRelativeActivity(Infinity);
355
- break;
356
- case 'Enter':
357
- // This is capturing plain ENTER.
358
- // When screen reader is not running, or screen reader is running outside of scan mode, the ENTER key will be captured here.
359
- if (!fromEndOfTranscriptIndicator) {
360
- var _activityElementMapRe2, _tabbableElements$;
361
- var body = (_activityElementMapRe2 = activityElementMapRef.current.get(focusedActivityKeyRef.current)) === null || _activityElementMapRe2 === void 0 ? void 0 : _activityElementMapRe2.querySelector('.webchat__basic-transcript__activity-body');
362
- (_tabbableElements$ = (0, _tabbableElements.default)(body)[0]) === null || _tabbableElements$ === void 0 ? void 0 : _tabbableElements$.focus();
363
- }
364
- break;
365
- case 'Escape':
366
- focus('sendBoxWithoutKeyboard');
367
- break;
368
- case 'Home':
369
- focusRelativeActivity(-Infinity);
370
- break;
371
- default:
372
- handled = false;
373
- break;
374
- }
375
- if (handled) {
376
- event.preventDefault();
377
-
378
- // If a custom HTML control wants to handle up/down arrow, we will prevent them from listening to this event to prevent bugs due to handling arrow keys twice.
379
- event.stopPropagation();
380
- }
381
- }, [activityElementMapRef, focus, focusedActivityKeyRef, focusRelativeActivity, terminatorRef]);
382
- var handleTranscriptKeyDownCapture = (0, _react.useCallback)(function (event) {
383
- var altKey = event.altKey,
384
- ctrlKey = event.ctrlKey,
385
- key = event.key,
386
- metaKey = event.metaKey,
387
- target = event.target;
388
- if (altKey || ctrlKey && key !== 'v' || metaKey || !(0, _inputtableKey.default)(key) && key !== 'Backspace') {
389
- // Ignore if one of the utility key (except SHIFT) is pressed
390
- // E.g. CTRL-C on a link in one of the message should not jump to chat box
391
- // E.g. "A" or "Backspace" should jump to chat box
392
- return;
393
- }
394
-
395
- // Send keystrokes to send box if we are focusing on the transcript or terminator.
396
- if (target === event.currentTarget || target === terminatorRef.current) {
397
- event.stopPropagation();
398
- focus('sendBox');
399
- }
400
- }, [focus]);
401
- (0, _useRegisterFocusTranscript.default)((0, _react.useCallback)(function () {
402
- return focusByActivityKey(undefined);
403
- }, [focusByActivityKey]));
404
-
405
- // When the focusing activity has changed, dispatch an event to observers of "useObserveTranscriptFocus".
406
- var dispatchTranscriptFocusByActivityKey = (0, _useDispatchTranscriptFocusByActivityKey.default)();
407
-
408
- // Dispatch a "transcript focus" event based on user selection.
409
- // We should not dispatch "transcript focus" when a new activity come. Although the selection change, it is not initiated from the user.
410
- (0, _react.useMemo)(function () {
411
- return dispatchTranscriptFocusByActivityKey(focusedExplicitly ? focusedActivityKey : undefined);
412
- }, [dispatchTranscriptFocusByActivityKey, focusedActivityKey, focusedExplicitly]);
413
-
414
- // When the transcript is being focused on, we should dispatch a "transcriptfocus" event.
415
- var handleFocus = (0, _react.useCallback)(
416
- // We call "focusByActivityKey" with activity key of "true".
417
- // It means, tries to focus on anything.
418
- function (_ref9) {
419
- var currentTarget = _ref9.currentTarget,
420
- target = _ref9.target;
421
- return target === currentTarget && focusByActivityKey(true, false);
422
- }, [focusByActivityKey]);
423
-
424
- // This is required by IE11.
425
- // When the user clicks on and empty space (a.k.a. filler) in an empty transcript, IE11 says the focus is on the <div className="filler">,
426
- // despite the fact there are no "tabIndex" attributes set on the filler.
427
- // We need to artificially send the focus back to the transcript.
428
- var handleFocusFiller = (0, _react.useCallback)(function () {
429
- return focusByActivityKey(undefined);
430
- }, [focusByActivityKey]);
431
-
432
- // When focus into the transcript using TAB/SHIFT-TAB, scroll the focused activity into view.
433
- (0, _useObserveFocusVisible.default)(rootElementRef, (0, _react.useCallback)(function () {
434
- return focusByActivityKey(undefined);
435
- }, [focusByActivityKey]));
436
- return /*#__PURE__*/_react.default.createElement("div", {
437
- // Although Android TalkBack 12.1 does not support `aria-activedescendant`, when used, it become buggy and will narrate content twice.
438
- // We are disabling `aria-activedescendant` for Android. See <ActivityRow> for details.
439
- "aria-activedescendant": _detectBrowser.android ? undefined : activeDescendantId,
440
- "aria-label": transcriptAriaLabel,
441
- className: (0, _classnames.default)('webchat__basic-transcript', basicTranscriptStyleSet + '', rootClassName, (className || '') + ''),
442
- dir: direction,
443
- onFocus: handleFocus,
444
- onKeyDown: handleTranscriptKeyDown,
445
- onKeyDownCapture: handleTranscriptKeyDownCapture,
446
- ref: callbackRef
447
- // "aria-activedescendant" will only works with a number of roles and it must be explicitly set.
448
- // https://www.w3.org/TR/wai-aria/#aria-activedescendant
449
- ,
450
- role: "group"
451
- // For up/down arrow key navigation across activities, this component must be included in the tab sequence.
452
- // Otherwise, "aria-activedescendant" will not be narrated when the user press up/down arrow keys.
453
- // https://www.w3.org/TR/wai-aria-practices-1.1/#kbd_focus_activedescendant
454
- ,
455
- tabIndex: 0
456
- }, /*#__PURE__*/_react.default.createElement(_LiveRegionTranscript.default, {
457
- activityElementMapRef: activityElementMapRef
458
- }), /*#__PURE__*/_react.default.createElement(InternalTranscriptScrollable, {
459
- onFocusFiller: handleFocusFiller,
460
- terminatorRef: terminatorRef
461
- }, renderingElements), !!renderingElements.length && /*#__PURE__*/_react.default.createElement(_react.Fragment, null, /*#__PURE__*/_react.default.createElement(_FocusRedirector.default, {
462
- redirectRef: rootElementRef
463
- }), /*#__PURE__*/_react.default.createElement("div", {
464
- "aria-labelledby": terminatorLabelId,
465
- className: "webchat__basic-transcript__terminator",
466
- ref: terminatorRef,
467
- role: "note",
468
- tabIndex: 0
469
- }, /*#__PURE__*/_react.default.createElement("div", {
470
- className: "webchat__basic-transcript__terminator-body"
471
- }, /*#__PURE__*/_react.default.createElement("div", {
472
- className: "webchat__basic-transcript__terminator-text",
473
- id: terminatorLabelId
474
- }, terminatorText)))), /*#__PURE__*/_react.default.createElement("div", {
475
- className: "webchat__basic-transcript__focus-indicator"
476
- }));
477
- });
478
- InternalTranscript.defaultProps = {
479
- className: ''
480
- };
481
- InternalTranscript.displayName = 'InternalTranscript';
482
- InternalTranscript.propTypes = {
483
- // PropTypes cannot validate precisely with its TypeScript counterpart.
484
- // @ts-ignore
485
- activityElementMapRef: _propTypes.default.shape({
486
- current: _propTypes.default.instanceOf(Map)
487
- }).isRequired,
488
- className: _propTypes.default.string
489
- };
490
- // Separating high-frequency hooks to improve performance.
491
- var InternalTranscriptScrollable = function InternalTranscriptScrollable(_ref10) {
492
- var children = _ref10.children,
493
- onFocusFiller = _ref10.onFocusFiller,
494
- terminatorRef = _ref10.terminatorRef;
495
- var _useStyleSet3 = (0, _useStyleSet5.default)(),
496
- _useStyleSet4 = _slicedToArray(_useStyleSet3, 1),
497
- activitiesStyleSet = _useStyleSet4[0].activities;
498
- var _useAnimatingToEnd = (0, _reactScrollToBottom.useAnimatingToEnd)(),
499
- _useAnimatingToEnd2 = _slicedToArray(_useAnimatingToEnd, 1),
500
- animatingToEnd = _useAnimatingToEnd2[0];
501
- var _useAtEnd = (0, _reactScrollToBottom.useAtEnd)(),
502
- _useAtEnd2 = _slicedToArray(_useAtEnd, 1),
503
- atEnd = _useAtEnd2[0];
504
- var _useActivityKeysByRea = useActivityKeysByRead(),
505
- _useActivityKeysByRea2 = _slicedToArray(_useActivityKeysByRea, 2),
506
- unreadActivityKeys = _useActivityKeysByRea2[1];
507
- var _useSticky = (0, _reactScrollToBottom.useSticky)(),
508
- _useSticky2 = _slicedToArray(_useSticky, 1),
509
- sticky = _useSticky2[0];
510
- var _useStyleOptions3 = useStyleOptions(),
511
- _useStyleOptions4 = _slicedToArray(_useStyleOptions3, 1),
512
- styleOptions = _useStyleOptions4[0];
513
- var focusByActivityKey = (0, _useFocusByActivityKey.default)();
514
- var localize = useLocalizer();
515
- var markActivityKeyAsRead = useMarkActivityKeyAsRead();
516
- var markAllAsAcknowledged = useMarkAllAsAcknowledged();
517
- var scrollToEnd = (0, _reactScrollToBottom.useScrollToEnd)();
518
- var prevSticky = (0, _usePrevious.default)(sticky);
519
- var transcriptRoleDescription = localize('TRANSCRIPT_ARIA_ROLE_ALT');
520
- var stickyChangedToTrue = prevSticky !== sticky && sticky;
521
-
522
- // Acknowledged means either:
523
- // 1. The user sent a message
524
- // - We don't need a condition here. When Web Chat sends the user's message, it will scroll to bottom, and it will trigger condition 2 below.
525
- // 2. The user scroll to the bottom of the transcript, from a non-bottom scroll position
526
- // - If the transcript is already at the bottom, the user needs to scroll up and then go back down
527
- // - What happens if we are relaxing "scrolled from a non-bottom scroll position":
528
- // 1. The condition will become solely "at the bottom of the transcript"
529
- // 2. Auto-scroll will always scroll the transcript to the bottom
530
- // 3. Web Chat will always acknowledge all activities as it is at the bottom
531
- // 4. Acknowledge flag become useless
532
- // 5. Therefore, even the developer set "pause after 3 activities", if activities are coming in at a slow pace (not batched in a single render)
533
- // Web Chat will keep scrolling and not snapped/paused
534
-
535
- // Note: When Web Chat is loaded, there are no activities acknowledged. We need to assume all arriving activities are acknowledged until end-user sends their first activity.
536
- // Activities loaded initially could be from conversation history. Without assuming acknowledgement, Web Chat will not scroll initially (as everything is not acknowledged).
537
- // It would be better if the chat adapter should let Web Chat know if the activity is loaded from history or not.
538
-
539
- // TODO: [P2] #3670 Move the "conversation history acknowledgement" logic mentioned above to polyfill of chat adapters.
540
- // 1. Chat adapter should send "acknowledged" as part of "channelData"
541
- // 2. If "acknowledged" is "undefined", we set it to:
542
- // a. true, if there are no egress activities yet
543
- // b. Otherwise, false
544
-
545
- (0, _react.useMemo)(function () {
546
- return stickyChangedToTrue &&
547
- // TODO: [P2] Both `markActivityKeyAsRead` and `markAllAsAcknowledged` hook are setters of useState.
548
- // This means, in a render loop, we will be calling setter and will cause another re-render.
549
- // This is not trivial but we should think if there is a way to avoid this.
550
- markAllAsAcknowledged();
551
- }, [markAllAsAcknowledged, stickyChangedToTrue]);
552
- var _useActivityTreeWithR3 = (0, _useActivityTreeWithRenderer.default)({
553
- flat: true
554
- }),
555
- _useActivityTreeWithR4 = _slicedToArray(_useActivityTreeWithR3, 1),
556
- flattenedActivityTreeWithRenderer = _useActivityTreeWithR4[0];
557
- var getKeyByActivity = useGetKeyByActivity();
558
- var renderingActivityKeys = (0, _react.useMemo)(function () {
559
- return flattenedActivityTreeWithRenderer.map(function (_ref11) {
560
- var activity = _ref11.activity;
561
- return getKeyByActivity(activity);
562
- });
563
- }, [flattenedActivityTreeWithRenderer, getKeyByActivity]);
564
- var renderingActivityKeysRef = (0, _useValueRef.default)(renderingActivityKeys);
565
-
566
- // To prevent flashy button, we are not waiting for another render loop to update the `[readActivityKeys, unreadActivityKeys]` state.
567
- // Instead, we are building the next one in this `useMemo` call.
568
- var nextUnreadActivityKeys = (0, _react.useMemo)(function () {
569
- // This code need to be careful reviewed as it will cause another render. The code should be converging.
570
- // After we call `markActivityKeyAsRead`, everything will be read and nothing will be unread.
571
- // That means, in next render, `unreadActivityKeys` will be emptied and the `markActivityKeyAsRead` will not get called again.
572
- if (sticky && unreadActivityKeys.length) {
573
- markActivityKeyAsRead(unreadActivityKeys[unreadActivityKeys.length - 1]);
574
- return [];
575
- }
576
- return unreadActivityKeys;
577
- }, [markActivityKeyAsRead, sticky, unreadActivityKeys]);
578
- var nextUnreadActivityKeysRef = (0, _useValueRef.default)(nextUnreadActivityKeys);
579
-
580
- // If we are rendering anything that is unread, we should show the "New messages" button.
581
- // Not everything in the `unreadActivityKeys` are rendered, say, bot typing indicator.
582
- // We should not show the "New messages" button for bot typing indicator as it will confuse the user.
583
- var unread = (0, _react.useMemo)(function () {
584
- return nextUnreadActivityKeys.some(function (key) {
585
- return renderingActivityKeys.includes(key);
586
- });
587
- }, [renderingActivityKeys, nextUnreadActivityKeys]);
588
- var handleScrollToEndButtonClick = (0, _react.useCallback)(function () {
589
- scrollToEnd({
590
- behavior: 'smooth'
591
- });
592
- var renderingActivityKeys = renderingActivityKeysRef.current;
593
-
594
- // After the "New message" button is clicked, focus on the first unread activity which will be rendered.
595
- var firstUnreadRenderingActivityKey = nextUnreadActivityKeysRef.current.find(function (key) {
596
- return renderingActivityKeys.includes(key);
597
- });
598
- if (firstUnreadRenderingActivityKey) {
599
- focusByActivityKey(firstUnreadRenderingActivityKey);
600
- } else {
601
- var _terminatorRef$curren;
602
- // If no unread activity, send the focus to the terminator block.
603
- (_terminatorRef$curren = terminatorRef.current) === null || _terminatorRef$curren === void 0 ? void 0 : _terminatorRef$curren.focus();
604
- }
605
- }, [focusByActivityKey, nextUnreadActivityKeysRef, renderingActivityKeysRef, scrollToEnd, terminatorRef]);
606
- var renderScrollToEndButton = useCreateScrollToEndButtonRenderer()({
607
- atEnd: animatingToEnd || atEnd || sticky,
608
- styleOptions: styleOptions,
609
- unread: unread
610
- });
611
- var hasAnyChild = !!_react.default.Children.count(children);
612
- return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, renderScrollToEndButton && renderScrollToEndButton({
613
- onClick: handleScrollToEndButtonClick
614
- }), hasAnyChild && /*#__PURE__*/_react.default.createElement(_FocusRedirector.default, {
615
- redirectRef: terminatorRef
616
- }), /*#__PURE__*/_react.default.createElement(_reactScrollToBottom.Panel, {
617
- className: "webchat__basic-transcript__scrollable"
618
- }, /*#__PURE__*/_react.default.createElement("div", {
619
- "aria-hidden": true,
620
- className: "webchat__basic-transcript__filler",
621
- onFocus: onFocusFiller
622
- }), hasAnyChild && /*#__PURE__*/_react.default.createElement("section", {
623
- "aria-roledescription": transcriptRoleDescription,
624
- className: (0, _classnames.default)(activitiesStyleSet + '', 'webchat__basic-transcript__transcript'),
625
- role: "feed"
626
- }, children), /*#__PURE__*/_react.default.createElement(_BasicTypingIndicator.default, null)));
627
- };
628
- InternalTranscriptScrollable.propTypes = {
629
- children: _propTypes.default.any.isRequired,
630
- onFocusFiller: _propTypes.default.func.isRequired,
631
- terminatorRef: _propTypes.default.any.isRequired
632
- };
633
- // "scroller" is the auto-scroll limiter, a.k.a. auto scroll snap.
634
- var useScroller = function useScroller(activityElementMapRef) {
635
- var _useActivityKeys = useActivityKeys(),
636
- _useActivityKeys2 = _slicedToArray(_useActivityKeys, 1),
637
- activityKeys = _useActivityKeys2[0];
638
- var _useLastAcknowledgedA = useLastAcknowledgedActivityKey(),
639
- _useLastAcknowledgedA2 = _slicedToArray(_useLastAcknowledgedA, 1),
640
- lastAcknowledgedActivityKey = _useLastAcknowledgedA2[0];
641
- var _useStyleOptions5 = useStyleOptions(),
642
- _useStyleOptions6 = _slicedToArray(_useStyleOptions5, 1),
643
- styleOptions = _useStyleOptions6[0];
644
- var activityKeysRef = (0, _useValueRef.default)(activityKeys);
645
- var lastAcknowledgedActivityKeyRef = (0, _useValueRef.default)(lastAcknowledgedActivityKey);
646
- var styleOptionsRef = (0, _useValueRef.default)(styleOptions);
647
- return (0, _react.useCallback)(function (_ref12) {
648
- var offsetHeight = _ref12.offsetHeight,
649
- scrollTop = _ref12.scrollTop;
650
- var _styleOptionsRef$curr = styleOptionsRef.current,
651
- autoScrollSnapOnActivity = _styleOptionsRef$curr.autoScrollSnapOnActivity,
652
- autoScrollSnapOnActivityOffset = _styleOptionsRef$curr.autoScrollSnapOnActivityOffset,
653
- autoScrollSnapOnPage = _styleOptionsRef$curr.autoScrollSnapOnPage,
654
- autoScrollSnapOnPageOffset = _styleOptionsRef$curr.autoScrollSnapOnPageOffset;
655
- var patchedAutoScrollSnapOnActivity = typeof autoScrollSnapOnActivity === 'number' ? Math.max(0, autoScrollSnapOnActivity) : autoScrollSnapOnActivity ? 1 : 0;
656
- var patchedAutoScrollSnapOnPage = typeof autoScrollSnapOnPage === 'number' ? Math.max(0, Math.min(1, autoScrollSnapOnPage)) : autoScrollSnapOnPage ? 1 : 0;
657
- var patchedAutoScrollSnapOnActivityOffset = typeof autoScrollSnapOnActivityOffset === 'number' ? autoScrollSnapOnActivityOffset : 0;
658
- var patchedAutoScrollSnapOnPageOffset = typeof autoScrollSnapOnPageOffset === 'number' ? autoScrollSnapOnPageOffset : 0;
659
- if (patchedAutoScrollSnapOnActivity || patchedAutoScrollSnapOnPage) {
660
- var activityElementMap = activityElementMapRef.current;
661
- var _activityKeys = activityKeysRef.current;
662
- var _lastAcknowledgedActivityKey = lastAcknowledgedActivityKeyRef.current;
663
- var values = [];
664
- var lastAcknowledgedActivityKeyIndex = _activityKeys.indexOf(_lastAcknowledgedActivityKey);
665
- if (~lastAcknowledgedActivityKeyIndex) {
666
- // The activity that we acknowledged could be not rendered, such as post back activity.
667
- // When calculating scroll snap, we can only base on the first unacknowledged-and-rendering activity.
668
- var renderingActivityKeys = Array.from(activityElementMap.keys());
669
- var firstUnacknowledgedActivityElementIndex = -1;
670
- var _iterator = _createForOfIteratorHelper(_activityKeys.slice(0, lastAcknowledgedActivityKeyIndex + 1).reverse()),
671
- _step;
672
- try {
673
- for (_iterator.s(); !(_step = _iterator.n()).done;) {
674
- var acknowledgedActivityKey = _step.value;
675
- var index = renderingActivityKeys.indexOf(acknowledgedActivityKey);
676
- if (~index) {
677
- if (index !== renderingActivityKeys.length - 1) {
678
- firstUnacknowledgedActivityElementIndex = index + 1;
679
- }
680
- break;
681
- }
682
- }
683
- } catch (err) {
684
- _iterator.e(err);
685
- } finally {
686
- _iterator.f();
687
- }
688
- if (~firstUnacknowledgedActivityElementIndex) {
689
- var activityElements = Array.from(activityElementMap.values());
690
- if (patchedAutoScrollSnapOnActivity) {
691
- // Gets the activity element which we should snap to.
692
- var nthUnacknowledgedActivityElement = activityElements[firstUnacknowledgedActivityElementIndex + patchedAutoScrollSnapOnActivity - 1];
693
- if (nthUnacknowledgedActivityElement) {
694
- var nthUnacknowledgedActivityBoundingBoxElement = nthUnacknowledgedActivityElement === null || nthUnacknowledgedActivityElement === void 0 ? void 0 : nthUnacknowledgedActivityElement.querySelector('.webchat__basic-transcript__activity-active-descendant');
695
- var nthUnacknowledgedActivityOffsetTop = nthUnacknowledgedActivityElement.offsetTop + nthUnacknowledgedActivityBoundingBoxElement.offsetTop;
696
- values.push(nthUnacknowledgedActivityOffsetTop + nthUnacknowledgedActivityBoundingBoxElement.offsetHeight - offsetHeight - scrollTop + patchedAutoScrollSnapOnActivityOffset);
697
- }
698
- }
699
- if (patchedAutoScrollSnapOnPage) {
700
- var firstUnacknowledgedActivityElement = activityElements[+firstUnacknowledgedActivityElementIndex];
701
- var firstUnacknowledgedActivityBoundingBoxElement = firstUnacknowledgedActivityElement.querySelector('.webchat__basic-transcript__activity-active-descendant');
702
- var firstUnacknowledgedActivityOffsetTop = firstUnacknowledgedActivityElement.offsetTop + firstUnacknowledgedActivityBoundingBoxElement.offsetTop;
703
- values.push(firstUnacknowledgedActivityOffsetTop - scrollTop - offsetHeight * (1 - patchedAutoScrollSnapOnPage) + patchedAutoScrollSnapOnPageOffset);
704
- }
705
- }
706
- }
707
- return Math.min.apply(Math, values);
708
- }
709
- return Infinity;
710
- }, [activityElementMapRef, activityKeysRef, lastAcknowledgedActivityKeyRef, styleOptionsRef]);
711
- };
712
- var BasicTranscript = function BasicTranscript(_ref13) {
713
- var className = _ref13.className;
714
- var activityElementMapRef = (0, _react.useRef)(new Map());
715
- var containerRef = (0, _react.useRef)();
716
- var scroller = useScroller(activityElementMapRef);
717
- return /*#__PURE__*/_react.default.createElement(_TranscriptFocusComposer.default, {
718
- containerRef: containerRef
719
- }, /*#__PURE__*/_react.default.createElement(_reactScrollToBottom.Composer, {
720
- scroller: scroller
721
- }, /*#__PURE__*/_react.default.createElement(_KeyboardHelp.default, null), /*#__PURE__*/_react.default.createElement(InternalTranscript, {
722
- activityElementMapRef: activityElementMapRef,
723
- className: className,
724
- ref: containerRef
725
- })));
726
- };
727
- BasicTranscript.defaultProps = {
728
- className: ''
729
- };
730
- BasicTranscript.propTypes = {
731
- className: _propTypes.default.string
732
- };
733
- var _default = /*#__PURE__*/(0, _react.memo)(BasicTranscript);
734
- exports.default = _default;
735
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfYm90ZnJhbWV3b3JrV2ViY2hhdEFwaSIsInJlcXVpcmUiLCJfcmVhY3RTY3JvbGxUb0JvdHRvbSIsIl9jbGFzc25hbWVzIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsIl9wcm9wVHlwZXMiLCJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsIl9kZXRlY3RCcm93c2VyIiwiX0Jhc2ljVHlwaW5nSW5kaWNhdG9yIiwiX0ZvY3VzUmVkaXJlY3RvciIsIl9pbnB1dHRhYmxlS2V5IiwiX2lzWmVyb09yUG9zaXRpdmUiLCJfS2V5Ym9hcmRIZWxwIiwiX0xpdmVSZWdpb25UcmFuc2NyaXB0IiwiX3RhYmJhYmxlRWxlbWVudHMiLCJfVHJhbnNjcmlwdEZvY3VzQ29tcG9zZXIiLCJfdXNlQWN0aXZlRGVzY2VuZGFudElkIiwiX3VzZUFjdGl2aXR5VHJlZVdpdGhSZW5kZXJlciIsIl91c2VEaXNwYXRjaFNjcm9sbFBvc2l0aW9uIiwiX3VzZURpc3BhdGNoVHJhbnNjcmlwdEZvY3VzQnlBY3Rpdml0eUtleSIsIl91c2VGb2N1cyIsIl91c2VGb2N1c0J5QWN0aXZpdHlLZXkiLCJfdXNlRm9jdXNlZEFjdGl2aXR5S2V5IiwiX3VzZUZvY3VzZWRFeHBsaWNpdGx5MyIsIl91c2VGb2N1c1JlbGF0aXZlQWN0aXZpdHkiLCJfdXNlT2JzZXJ2ZUZvY3VzVmlzaWJsZSIsIl91c2VQcmV2aW91cyIsIl91c2VSZWdpc3RlckZvY3VzVHJhbnNjcmlwdCIsIl91c2VSZWdpc3RlclNjcm9sbFRvIiwiX3VzZVJlZ2lzdGVyU2Nyb2xsVG9FbmQiLCJfdXNlU3R5bGVTZXQ1IiwiX3VzZVN0eWxlVG9FbW90aW9uT2JqZWN0IiwiX3VzZVVuaXF1ZUlkIiwiX3VzZVZhbHVlUmVmIiwiX1RyYW5zY3JpcHRBY3Rpdml0eSIsIl91c2VNZW1vaXplZCIsIl90cmFuc2NyaXB0U2Nyb2xsUmVsYXRpdmUiLCJfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUiLCJub2RlSW50ZXJvcCIsIldlYWtNYXAiLCJjYWNoZUJhYmVsSW50ZXJvcCIsImNhY2hlTm9kZUludGVyb3AiLCJvYmoiLCJfX2VzTW9kdWxlIiwiX3R5cGVvZiIsImRlZmF1bHQiLCJjYWNoZSIsImhhcyIsImdldCIsIm5ld09iaiIsImhhc1Byb3BlcnR5RGVzY3JpcHRvciIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwia2V5IiwicHJvdG90eXBlIiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiZGVzYyIsInNldCIsIl9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyIiwibyIsImFsbG93QXJyYXlMaWtlIiwiaXQiLCJTeW1ib2wiLCJpdGVyYXRvciIsIkFycmF5IiwiaXNBcnJheSIsIl91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSIsImxlbmd0aCIsImkiLCJGIiwicyIsIm4iLCJkb25lIiwidmFsdWUiLCJlIiwiX2UyIiwiZiIsIlR5cGVFcnJvciIsIm5vcm1hbENvbXBsZXRpb24iLCJkaWRFcnIiLCJlcnIiLCJzdGVwIiwibmV4dCIsIl9lMyIsInJldHVybiIsIm93bktleXMiLCJvYmplY3QiLCJlbnVtZXJhYmxlT25seSIsImtleXMiLCJnZXRPd25Qcm9wZXJ0eVN5bWJvbHMiLCJzeW1ib2xzIiwiZmlsdGVyIiwic3ltIiwiZW51bWVyYWJsZSIsInB1c2giLCJhcHBseSIsIl9vYmplY3RTcHJlYWQiLCJ0YXJnZXQiLCJhcmd1bWVudHMiLCJzb3VyY2UiLCJmb3JFYWNoIiwiX2RlZmluZVByb3BlcnR5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyIsImRlZmluZVByb3BlcnRpZXMiLCJjb25maWd1cmFibGUiLCJ3cml0YWJsZSIsIl9zbGljZWRUb0FycmF5IiwiYXJyIiwiX2FycmF5V2l0aEhvbGVzIiwiX2l0ZXJhYmxlVG9BcnJheUxpbWl0IiwiX25vbkl0ZXJhYmxlUmVzdCIsIm1pbkxlbiIsIl9hcnJheUxpa2VUb0FycmF5IiwidG9TdHJpbmciLCJzbGljZSIsImNvbnN0cnVjdG9yIiwibmFtZSIsImZyb20iLCJ0ZXN0IiwibGVuIiwiYXJyMiIsIl9pIiwiX2FyciIsIl9uIiwiX2QiLCJfcyIsIl9lIiwidXNlQWN0aXZpdHlLZXlzIiwiaG9va3MiLCJ1c2VBY3Rpdml0eUtleXNCeVJlYWQiLCJ1c2VDcmVhdGVBdmF0YXJSZW5kZXJlciIsInVzZUNyZWF0ZVNjcm9sbFRvRW5kQnV0dG9uUmVuZGVyZXIiLCJ1c2VEaXJlY3Rpb24iLCJ1c2VHZXRBY3Rpdml0eUJ5S2V5IiwidXNlR2V0S2V5QnlBY3Rpdml0eSIsInVzZUdldEtleUJ5QWN0aXZpdHlJZCIsInVzZUxhc3RBY2tub3dsZWRnZWRBY3Rpdml0eUtleSIsInVzZUxvY2FsaXplciIsInVzZU1hcmtBY3Rpdml0eUtleUFzUmVhZCIsInVzZU1hcmtBbGxBc0Fja25vd2xlZGdlZCIsInVzZVN0eWxlT3B0aW9ucyIsIlJPT1RfU1RZTEUiLCJkaXNwbGF5IiwiZmxleERpcmVjdGlvbiIsIm92ZXJmbG93IiwicG9zaXRpb24iLCJmbGV4Iiwib3ZlcmZsb3dYIiwiV2Via2l0T3ZlcmZsb3dTY3JvbGxpbmciLCJsaXN0U3R5bGVUeXBlIiwiSW50ZXJuYWxUcmFuc2NyaXB0IiwiZm9yd2FyZFJlZiIsIl9yZWYiLCJyZWYiLCJhY3Rpdml0eUVsZW1lbnRNYXBSZWYiLCJjbGFzc05hbWUiLCJfdXNlU3R5bGVTZXQiLCJ1c2VTdHlsZVNldCIsIl91c2VTdHlsZVNldDIiLCJiYXNpY1RyYW5zY3JpcHRTdHlsZVNldCIsImJhc2ljVHJhbnNjcmlwdCIsIl91c2VTdHlsZU9wdGlvbnMiLCJfdXNlU3R5bGVPcHRpb25zMiIsIl91c2VTdHlsZU9wdGlvbnMyJCIsImJ1YmJsZUZyb21Vc2VyTnViT2Zmc2V0IiwiYnViYmxlTnViT2Zmc2V0IiwiZ3JvdXBUaW1lc3RhbXAiLCJzaG93QXZhdGFySW5Hcm91cCIsIl91c2VBY3RpdmVEZXNjZW5kYW50SSIsInVzZUFjdGl2ZURlc2NlbmRhbnRJZCIsIl91c2VBY3RpdmVEZXNjZW5kYW50STIiLCJhY3RpdmVEZXNjZW5kYW50SWQiLCJfdXNlQWN0aXZpdHlUcmVlV2l0aFIiLCJ1c2VBY3Rpdml0eVRyZWVXaXRoUmVuZGVyZXIiLCJfdXNlQWN0aXZpdHlUcmVlV2l0aFIyIiwiYWN0aXZpdHlXaXRoUmVuZGVyZXJUcmVlIiwiX3VzZURpcmVjdGlvbiIsIl91c2VEaXJlY3Rpb24yIiwiZGlyZWN0aW9uIiwiX3VzZUZvY3VzZWRBY3Rpdml0eUtlIiwidXNlRm9jdXNlZEFjdGl2aXR5S2V5IiwiX3VzZUZvY3VzZWRBY3Rpdml0eUtlMiIsImZvY3VzZWRBY3Rpdml0eUtleSIsIl91c2VGb2N1c2VkRXhwbGljaXRseSIsInVzZUZvY3VzZWRFeHBsaWNpdGx5IiwiX3VzZUZvY3VzZWRFeHBsaWNpdGx5MiIsImZvY3VzZWRFeHBsaWNpdGx5IiwiY3JlYXRlQXZhdGFyUmVuZGVyZXIiLCJmb2N1cyIsInVzZUZvY3VzIiwiZm9jdXNCeUFjdGl2aXR5S2V5IiwidXNlRm9jdXNCeUFjdGl2aXR5S2V5IiwiZm9jdXNSZWxhdGl2ZUFjdGl2aXR5IiwidXNlRm9jdXNSZWxhdGl2ZUFjdGl2aXR5IiwiZ2V0QWN0aXZpdHlCeUtleSIsImdldEtleUJ5QWN0aXZpdHkiLCJnZXRLZXlCeUFjdGl2aXR5SWQiLCJsb2NhbGl6ZSIsInJvb3RDbGFzc05hbWUiLCJ1c2VTdHlsZVRvRW1vdGlvbk9iamVjdCIsInJvb3RFbGVtZW50UmVmIiwidXNlUmVmIiwidGVybWluYXRvckxhYmVsSWQiLCJ1c2VVbmlxdWVJZCIsInRlcm1pbmF0b3JSZWYiLCJmb2N1c2VkQWN0aXZpdHlLZXlSZWYiLCJ1c2VWYWx1ZVJlZiIsImhpZGVBbGxUaW1lc3RhbXBzIiwidGVybWluYXRvclRleHQiLCJ0cmFuc2NyaXB0QXJpYUxhYmVsIiwiY2FsbGJhY2tSZWYiLCJ1c2VDYWxsYmFjayIsImVsZW1lbnQiLCJjdXJyZW50IiwiY3JlYXRlQXZhdGFyUmVuZGVyZXJNZW1vaXplZCIsInVzZU1lbW9pemVkIiwiYWN0aXZpdHkiLCJyZW5kZXJpbmdFbGVtZW50cyIsInVzZU1lbW8iLCJ0b3BTaWRlQm90TnViIiwiaXNaZXJvT3JQb3NpdGl2ZSIsInRvcFNpZGVVc2VyTnViIiwiZW50cmllc1dpdGhTYW1lU2VuZGVyIiwiX2VudHJpZXNXaXRoU2FtZVNlbmRlIiwiX2VudHJpZXNXaXRoU2FtZVNlbmRlMiIsImZpcnN0QWN0aXZpdHkiLCJyZW5kZXJBdmF0YXIiLCJlbnRyaWVzV2l0aFNhbWVTZW5kZXJBbmRTdGF0dXMiLCJpbmRleFdpdGhpblNlbmRlckdyb3VwIiwiZmlyc3RJblNlbmRlckdyb3VwIiwibGFzdEluU2VuZGVyR3JvdXAiLCJfcmVmMiIsImluZGV4V2l0aGluU2VuZGVyQW5kU3RhdHVzR3JvdXAiLCJfYWN0aXZpdHkkZnJvbSIsInJlbmRlckFjdGl2aXR5IiwiZmlyc3RJblNlbmRlckFuZFN0YXR1c0dyb3VwIiwibGFzdEluU2VuZGVyQW5kU3RhdHVzR3JvdXAiLCJ0b3BTaWRlTnViIiwicm9sZSIsInNob3dDYWxsb3V0IiwiY3JlYXRlRWxlbWVudCIsImFjdGl2aXR5S2V5IiwiaGlkZVRpbWVzdGFtcCIsInNjcm9sbFRvQm90dG9tU2Nyb2xsVG8iLCJ1c2VTY3JvbGxUbyIsInNjcm9sbFRvQm90dG9tU2Nyb2xsVG9FbmQiLCJ1c2VTY3JvbGxUb0VuZCIsInNjcm9sbFRvIiwiX3JlZjMiLCJ1bmRlZmluZWQiLCJfcmVmMyRiZWhhdmlvciIsImJlaGF2aW9yIiwiRXJyb3IiLCJhY3Rpdml0eUlkIiwiYWN0aXZpdHlJRCIsInNjcm9sbFRvcCIsIl9hY3Rpdml0eUVsZW1lbnRNYXBSZSIsImFjdGl2aXR5Qm91bmRpbmdCb3hFbGVtZW50IiwicXVlcnlTZWxlY3RvciIsInNjcm9sbGFibGVFbGVtZW50IiwiYWN0aXZpdHlCb3VuZGluZ0JveEVsZW1lbnRDbGllbnRSZWN0IiwiZ2V0Q2xpZW50UmVjdHMiLCJzY3JvbGxhYmxlRWxlbWVudENsaWVudFJlY3QiLCJhY3Rpdml0eUhlaWdodCIsImhlaWdodCIsImFjdGl2aXR5WSIsInkiLCJzY3JvbGxhYmxlSGVpZ2h0IiwiYWN0aXZpdHlPZmZzZXRUb3AiLCJNYXRoIiwibWluIiwic2Nyb2xsVG9FbmQiLCJzY3JvbGxSZWxhdGl2ZSIsIl9yZWY0IiwiZGlzcGxhY2VtZW50Iiwicm9vdEVsZW1lbnQiLCJzY3JvbGxhYmxlIiwibmV4dFNjcm9sbFRvcCIsIm9mZnNldEhlaWdodCIsIm1heCIsInNjcm9sbEhlaWdodCIsInVzZVJlZ2lzdGVyU2Nyb2xsVG8iLCJ1c2VSZWdpc3RlclNjcm9sbFRvRW5kIiwidXNlUmVnaXN0ZXJTY3JvbGxSZWxhdGl2ZVRyYW5zY3JpcHQiLCJtYXJrQWN0aXZpdHlLZXlBc1JlYWQiLCJkaXNwYXRjaFNjcm9sbFBvc2l0aW9uV2l0aEFjdGl2aXR5SWQiLCJ1c2VEaXNwYXRjaFNjcm9sbFBvc2l0aW9uIiwiaGFuZGxlU2Nyb2xsUG9zaXRpb24iLCJfcmVmNSIsIl9yZWY2Iiwic2Nyb2xsYWJsZUNsaWVudEJvdHRvbSIsImJvdHRvbSIsImFjdGl2aXR5RWxlbWVudHMiLCJlbnRyaWVzIiwiYWN0aXZpdHlLZXlKdXN0QWJvdmVTY3JvbGxCb3R0b20iLCJyZXZlcnNlIiwiZmluZCIsIl9yZWY3IiwiX3JlZjgiLCJlbGVtZW50Q2xpZW50UmVjdCIsImlkIiwidXNlT2JzZXJ2ZVNjcm9sbFBvc2l0aW9uIiwiaGFuZGxlVHJhbnNjcmlwdEtleURvd24iLCJldmVudCIsImZyb21FbmRPZlRyYW5zY3JpcHRJbmRpY2F0b3IiLCJmcm9tVHJhbnNjcmlwdCIsImN1cnJlbnRUYXJnZXQiLCJoYW5kbGVkIiwiSW5maW5pdHkiLCJfYWN0aXZpdHlFbGVtZW50TWFwUmUyIiwiX3RhYmJhYmxlRWxlbWVudHMkIiwiYm9keSIsInRhYmJhYmxlRWxlbWVudHMiLCJwcmV2ZW50RGVmYXVsdCIsInN0b3BQcm9wYWdhdGlvbiIsImhhbmRsZVRyYW5zY3JpcHRLZXlEb3duQ2FwdHVyZSIsImFsdEtleSIsImN0cmxLZXkiLCJtZXRhS2V5IiwiaW5wdXR0YWJsZUtleSIsInVzZVJlZ2lzdGVyRm9jdXNUcmFuc2NyaXB0IiwiZGlzcGF0Y2hUcmFuc2NyaXB0Rm9jdXNCeUFjdGl2aXR5S2V5IiwidXNlRGlzcGF0Y2hUcmFuc2NyaXB0Rm9jdXNCeUFjdGl2aXR5S2V5IiwiaGFuZGxlRm9jdXMiLCJfcmVmOSIsImhhbmRsZUZvY3VzRmlsbGVyIiwidXNlT2JzZXJ2ZUZvY3VzVmlzaWJsZSIsImFuZHJvaWQiLCJjbGFzc05hbWVzIiwiZGlyIiwib25Gb2N1cyIsIm9uS2V5RG93biIsIm9uS2V5RG93bkNhcHR1cmUiLCJ0YWJJbmRleCIsIkludGVybmFsVHJhbnNjcmlwdFNjcm9sbGFibGUiLCJvbkZvY3VzRmlsbGVyIiwiRnJhZ21lbnQiLCJyZWRpcmVjdFJlZiIsImRlZmF1bHRQcm9wcyIsImRpc3BsYXlOYW1lIiwicHJvcFR5cGVzIiwiUHJvcFR5cGVzIiwic2hhcGUiLCJpbnN0YW5jZU9mIiwiTWFwIiwiaXNSZXF1aXJlZCIsInN0cmluZyIsIl9yZWYxMCIsImNoaWxkcmVuIiwiX3VzZVN0eWxlU2V0MyIsIl91c2VTdHlsZVNldDQiLCJhY3Rpdml0aWVzU3R5bGVTZXQiLCJhY3Rpdml0aWVzIiwiX3VzZUFuaW1hdGluZ1RvRW5kIiwidXNlQW5pbWF0aW5nVG9FbmQiLCJfdXNlQW5pbWF0aW5nVG9FbmQyIiwiYW5pbWF0aW5nVG9FbmQiLCJfdXNlQXRFbmQiLCJ1c2VBdEVuZCIsIl91c2VBdEVuZDIiLCJhdEVuZCIsIl91c2VBY3Rpdml0eUtleXNCeVJlYSIsIl91c2VBY3Rpdml0eUtleXNCeVJlYTIiLCJ1bnJlYWRBY3Rpdml0eUtleXMiLCJfdXNlU3RpY2t5IiwidXNlU3RpY2t5IiwiX3VzZVN0aWNreTIiLCJzdGlja3kiLCJfdXNlU3R5bGVPcHRpb25zMyIsIl91c2VTdHlsZU9wdGlvbnM0Iiwic3R5bGVPcHRpb25zIiwibWFya0FsbEFzQWNrbm93bGVkZ2VkIiwicHJldlN0aWNreSIsInVzZVByZXZpb3VzIiwidHJhbnNjcmlwdFJvbGVEZXNjcmlwdGlvbiIsInN0aWNreUNoYW5nZWRUb1RydWUiLCJfdXNlQWN0aXZpdHlUcmVlV2l0aFIzIiwiZmxhdCIsIl91c2VBY3Rpdml0eVRyZWVXaXRoUjQiLCJmbGF0dGVuZWRBY3Rpdml0eVRyZWVXaXRoUmVuZGVyZXIiLCJyZW5kZXJpbmdBY3Rpdml0eUtleXMiLCJtYXAiLCJfcmVmMTEiLCJyZW5kZXJpbmdBY3Rpdml0eUtleXNSZWYiLCJuZXh0VW5yZWFkQWN0aXZpdHlLZXlzIiwibmV4dFVucmVhZEFjdGl2aXR5S2V5c1JlZiIsInVucmVhZCIsInNvbWUiLCJpbmNsdWRlcyIsImhhbmRsZVNjcm9sbFRvRW5kQnV0dG9uQ2xpY2siLCJmaXJzdFVucmVhZFJlbmRlcmluZ0FjdGl2aXR5S2V5IiwiX3Rlcm1pbmF0b3JSZWYkY3VycmVuIiwicmVuZGVyU2Nyb2xsVG9FbmRCdXR0b24iLCJoYXNBbnlDaGlsZCIsIlJlYWN0IiwiQ2hpbGRyZW4iLCJjb3VudCIsIm9uQ2xpY2siLCJQYW5lbCIsImFueSIsImZ1bmMiLCJ1c2VTY3JvbGxlciIsIl91c2VBY3Rpdml0eUtleXMiLCJfdXNlQWN0aXZpdHlLZXlzMiIsImFjdGl2aXR5S2V5cyIsIl91c2VMYXN0QWNrbm93bGVkZ2VkQSIsIl91c2VMYXN0QWNrbm93bGVkZ2VkQTIiLCJsYXN0QWNrbm93bGVkZ2VkQWN0aXZpdHlLZXkiLCJfdXNlU3R5bGVPcHRpb25zNSIsIl91c2VTdHlsZU9wdGlvbnM2IiwiYWN0aXZpdHlLZXlzUmVmIiwibGFzdEFja25vd2xlZGdlZEFjdGl2aXR5S2V5UmVmIiwic3R5bGVPcHRpb25zUmVmIiwiX3JlZjEyIiwiX3N0eWxlT3B0aW9uc1JlZiRjdXJyIiwiYXV0b1Njcm9sbFNuYXBPbkFjdGl2aXR5IiwiYXV0b1Njcm9sbFNuYXBPbkFjdGl2aXR5T2Zmc2V0IiwiYXV0b1Njcm9sbFNuYXBPblBhZ2UiLCJhdXRvU2Nyb2xsU25hcE9uUGFnZU9mZnNldCIsInBhdGNoZWRBdXRvU2Nyb2xsU25hcE9uQWN0aXZpdHkiLCJwYXRjaGVkQXV0b1Njcm9sbFNuYXBPblBhZ2UiLCJwYXRjaGVkQXV0b1Njcm9sbFNuYXBPbkFjdGl2aXR5T2Zmc2V0IiwicGF0Y2hlZEF1dG9TY3JvbGxTbmFwT25QYWdlT2Zmc2V0IiwiYWN0aXZpdHlFbGVtZW50TWFwIiwidmFsdWVzIiwibGFzdEFja25vd2xlZGdlZEFjdGl2aXR5S2V5SW5kZXgiLCJpbmRleE9mIiwiZmlyc3RVbmFja25vd2xlZGdlZEFjdGl2aXR5RWxlbWVudEluZGV4IiwiX2l0ZXJhdG9yIiwiX3N0ZXAiLCJhY2tub3dsZWRnZWRBY3Rpdml0eUtleSIsImluZGV4IiwibnRoVW5hY2tub3dsZWRnZWRBY3Rpdml0eUVsZW1lbnQiLCJudGhVbmFja25vd2xlZGdlZEFjdGl2aXR5Qm91bmRpbmdCb3hFbGVtZW50IiwibnRoVW5hY2tub3dsZWRnZWRBY3Rpdml0eU9mZnNldFRvcCIsIm9mZnNldFRvcCIsImZpcnN0VW5hY2tub3dsZWRnZWRBY3Rpdml0eUVsZW1lbnQiLCJmaXJzdFVuYWNrbm93bGVkZ2VkQWN0aXZpdHlCb3VuZGluZ0JveEVsZW1lbnQiLCJmaXJzdFVuYWNrbm93bGVkZ2VkQWN0aXZpdHlPZmZzZXRUb3AiLCJCYXNpY1RyYW5zY3JpcHQiLCJfcmVmMTMiLCJjb250YWluZXJSZWYiLCJzY3JvbGxlciIsIkNvbXBvc2VyIiwiX2RlZmF1bHQiLCJtZW1vIiwiZXhwb3J0cyJdLCJzb3VyY2VSb290IjoiY29tcG9uZW50Oi8vLyIsInNvdXJjZXMiOlsiLi4vc3JjL0Jhc2ljVHJhbnNjcmlwdC50c3giXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaG9va3MgfSBmcm9tICdib3RmcmFtZXdvcmstd2ViY2hhdC1hcGknO1xuaW1wb3J0IHtcbiAgQ29tcG9zZXIgYXMgUmVhY3RTY3JvbGxUb0JvdHRvbUNvbXBvc2VyLFxuICBQYW5lbCBhcyBSZWFjdFNjcm9sbFRvQm90dG9tUGFuZWwsXG4gIHVzZUFuaW1hdGluZ1RvRW5kLFxuICB1c2VBdEVuZCxcbiAgdXNlT2JzZXJ2ZVNjcm9sbFBvc2l0aW9uLFxuICB1c2VTY3JvbGxUbyxcbiAgdXNlU2Nyb2xsVG9FbmQsXG4gIHVzZVN0aWNreVxufSBmcm9tICdyZWFjdC1zY3JvbGwtdG8tYm90dG9tJztcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmLCBGcmFnbWVudCwgbWVtbywgdXNlQ2FsbGJhY2ssIHVzZU1lbW8sIHVzZVJlZiB9IGZyb20gJ3JlYWN0JztcblxuaW1wb3J0IHR5cGUgeyBBY3Rpdml0eUVsZW1lbnRNYXAgfSBmcm9tICcuL1RyYW5zY3JpcHQvdHlwZXMnO1xuaW1wb3J0IHR5cGUgeyBGQywgS2V5Ym9hcmRFdmVudEhhbmRsZXIsIE11dGFibGVSZWZPYmplY3QsIFJlYWN0Tm9kZSB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB0eXBlIHsgV2ViQ2hhdEFjdGl2aXR5IH0gZnJvbSAnYm90ZnJhbWV3b3JrLXdlYmNoYXQtY29yZSc7XG5cbmltcG9ydCB7IGFuZHJvaWQgfSBmcm9tICcuL1V0aWxzL2RldGVjdEJyb3dzZXInO1xuaW1wb3J0IEJhc2ljVHlwaW5nSW5kaWNhdG9yIGZyb20gJy4vQmFzaWNUeXBpbmdJbmRpY2F0b3InO1xuaW1wb3J0IEZvY3VzUmVkaXJlY3RvciBmcm9tICcuL1V0aWxzL0ZvY3VzUmVkaXJlY3Rvcic7XG5pbXBvcnQgaW5wdXR0YWJsZUtleSBmcm9tICcuL1V0aWxzL1R5cGVGb2N1c1NpbmsvaW5wdXR0YWJsZUtleSc7XG5pbXBvcnQgaXNaZXJvT3JQb3NpdGl2ZSBmcm9tICcuL1V0aWxzL2lzWmVyb09yUG9zaXRpdmUnO1xuaW1wb3J0IEtleWJvYXJkSGVscCBmcm9tICcuL1RyYW5zY3JpcHQvS2V5Ym9hcmRIZWxwJztcbmltcG9ydCBMaXZlUmVnaW9uVHJhbnNjcmlwdCBmcm9tICcuL1RyYW5zY3JpcHQvTGl2ZVJlZ2lvblRyYW5zY3JpcHQnO1xuLy8gVE9ETzogW1AyXSAjNDEzMyBSZW5hbWUgdG8gXCJnZXRUYWJiYWJsZUVsZW1lbnRzXCIuXG5pbXBvcnQgdGFiYmFibGVFbGVtZW50cyBmcm9tICcuL1V0aWxzL3RhYmJhYmxlRWxlbWVudHMnO1xuaW1wb3J0IFRyYW5zY3JpcHRGb2N1c0NvbXBvc2VyIGZyb20gJy4vcHJvdmlkZXJzL1RyYW5zY3JpcHRGb2N1cy9UcmFuc2NyaXB0Rm9jdXNDb21wb3Nlcic7XG5pbXBvcnQgdXNlQWN0aXZlRGVzY2VuZGFudElkIGZyb20gJy4vcHJvdmlkZXJzL1RyYW5zY3JpcHRGb2N1cy91c2VBY3RpdmVEZXNjZW5kYW50SWQnO1xuaW1wb3J0IHVzZUFjdGl2aXR5VHJlZVdpdGhSZW5kZXJlciBmcm9tICcuL3Byb3ZpZGVycy9BY3Rpdml0eVRyZWUvdXNlQWN0aXZpdHlUcmVlV2l0aFJlbmRlcmVyJztcbmltcG9ydCB1c2VEaXNwYXRjaFNjcm9sbFBvc2l0aW9uIGZyb20gJy4vaG9va3MvaW50ZXJuYWwvdXNlRGlzcGF0Y2hTY3JvbGxQb3NpdGlvbic7XG5pbXBvcnQgdXNlRGlzcGF0Y2hUcmFuc2NyaXB0Rm9jdXNCeUFjdGl2aXR5S2V5IGZyb20gJy4vaG9va3MvaW50ZXJuYWwvdXNlRGlzcGF0Y2hUcmFuc2NyaXB0Rm9jdXNCeUFjdGl2aXR5S2V5JztcbmltcG9ydCB1c2VGb2N1cyBmcm9tICcuL2hvb2tzL3VzZUZvY3VzJztcbmltcG9ydCB1c2VGb2N1c0J5QWN0aXZpdHlLZXkgZnJvbSAnLi9wcm92aWRlcnMvVHJhbnNjcmlwdEZvY3VzL3VzZUZvY3VzQnlBY3Rpdml0eUtleSc7XG5pbXBvcnQgdXNlRm9jdXNlZEFjdGl2aXR5S2V5IGZyb20gJy4vcHJvdmlkZXJzL1RyYW5zY3JpcHRGb2N1cy91c2VGb2N1c2VkQWN0aXZpdHlLZXknO1xuaW1wb3J0IHVzZUZvY3VzZWRFeHBsaWNpdGx5IGZyb20gJy4vcHJvdmlkZXJzL1RyYW5zY3JpcHRGb2N1cy91c2VGb2N1c2VkRXhwbGljaXRseSc7XG5pbXBvcnQgdXNlRm9jdXNSZWxhdGl2ZUFjdGl2aXR5IGZyb20gJy4vcHJvdmlkZXJzL1RyYW5zY3JpcHRGb2N1cy91c2VGb2N1c1JlbGF0aXZlQWN0aXZpdHknO1xuaW1wb3J0IHVzZU9ic2VydmVGb2N1c1Zpc2libGUgZnJvbSAnLi9ob29rcy9pbnRlcm5hbC91c2VPYnNlcnZlRm9jdXNWaXNpYmxlJztcbmltcG9ydCB1c2VQcmV2aW91cyBmcm9tICcuL2hvb2tzL2ludGVybmFsL3VzZVByZXZpb3VzJztcbmltcG9ydCB1c2VSZWdpc3RlckZvY3VzVHJhbnNjcmlwdCBmcm9tICcuL2hvb2tzL2ludGVybmFsL3VzZVJlZ2lzdGVyRm9jdXNUcmFuc2NyaXB0JztcbmltcG9ydCB1c2VSZWdpc3RlclNjcm9sbFRvIGZyb20gJy4vaG9va3MvaW50ZXJuYWwvdXNlUmVnaXN0ZXJTY3JvbGxUbyc7XG5pbXBvcnQgdXNlUmVnaXN0ZXJTY3JvbGxUb0VuZCBmcm9tICcuL2hvb2tzL2ludGVybmFsL3VzZVJlZ2lzdGVyU2Nyb2xsVG9FbmQnO1xuaW1wb3J0IHVzZVN0eWxlU2V0IGZyb20gJy4vaG9va3MvdXNlU3R5bGVTZXQnO1xuaW1wb3J0IHVzZVN0eWxlVG9FbW90aW9uT2JqZWN0IGZyb20gJy4vaG9va3MvaW50ZXJuYWwvdXNlU3R5bGVUb0Vtb3Rpb25PYmplY3QnO1xuaW1wb3J0IHVzZVVuaXF1ZUlkIGZyb20gJy4vaG9va3MvaW50ZXJuYWwvdXNlVW5pcXVlSWQnO1xuaW1wb3J0IHVzZVZhbHVlUmVmIGZyb20gJy4vaG9va3MvaW50ZXJuYWwvdXNlVmFsdWVSZWYnO1xuaW1wb3J0IFRyYW5zY3JpcHRBY3Rpdml0eSBmcm9tICcuL1RyYW5zY3JpcHRBY3Rpdml0eSc7XG5pbXBvcnQgdXNlTWVtb2l6ZWQgZnJvbSAnLi9ob29rcy9pbnRlcm5hbC91c2VNZW1vaXplZCc7XG5pbXBvcnQge1xuICB1c2VSZWdpc3RlclNjcm9sbFJlbGF0aXZlVHJhbnNjcmlwdCxcbiAgdHlwZSBUcmFuc2NyaXB0U2Nyb2xsUmVsYXRpdmVPcHRpb25zXG59IGZyb20gJy4vaG9va3MvdHJhbnNjcmlwdFNjcm9sbFJlbGF0aXZlJztcblxuY29uc3Qge1xuICB1c2VBY3Rpdml0eUtleXMsXG4gIHVzZUFjdGl2aXR5S2V5c0J5UmVhZCxcbiAgdXNlQ3JlYXRlQXZhdGFyUmVuZGVyZXIsXG4gIHVzZUNyZWF0ZVNjcm9sbFRvRW5kQnV0dG9uUmVuZGVyZXIsXG4gIHVzZURpcmVjdGlvbixcbiAgdXNlR2V0QWN0aXZpdHlCeUtleSxcbiAgdXNlR2V0S2V5QnlBY3Rpdml0eSxcbiAgdXNlR2V0S2V5QnlBY3Rpdml0eUlkLFxuICB1c2VMYXN0QWNrbm93bGVkZ2VkQWN0aXZpdHlLZXksXG4gIHVzZUxvY2FsaXplcixcbiAgdXNlTWFya0FjdGl2aXR5S2V5QXNSZWFkLFxuICB1c2VNYXJrQWxsQXNBY2tub3dsZWRnZWQsXG4gIHVzZVN0eWxlT3B0aW9uc1xufSA9IGhvb2tzO1xuXG5jb25zdCBST09UX1NUWUxFID0ge1xuICAnJi53ZWJjaGF0X19iYXNpYy10cmFuc2NyaXB0Jzoge1xuICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJyxcbiAgICBvdmVyZmxvdzogJ2hpZGRlbicsXG4gICAgLy8gTWFrZSBzdXJlIHRvIHNldCBcInBvc2l0aW9uOiByZWxhdGl2ZVwiIGhlcmUgdG8gZm9ybSBhbm90aGVyIHN0YWNraW5nIGNvbnRleHQgZm9yIHRoZSBzY3JvbGwtdG8tZW5kIGJ1dHRvbi5cbiAgICAvLyBTdGFja2luZyBjb250ZXh0IGhlbHAgaXNvbGF0aW5nIGVsZW1lbnRzIHRoYXQgdXNlIFwiei1pbmRleFwiIGZyb20gZ2xvYmFsIHBvbGx1dGlvbi5cbiAgICAvLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9DU1MvQ1NTX1Bvc2l0aW9uaW5nL1VuZGVyc3RhbmRpbmdfel9pbmRleC9UaGVfc3RhY2tpbmdfY29udGV4dFxuICAgIHBvc2l0aW9uOiAncmVsYXRpdmUnLFxuXG4gICAgJyYgLndlYmNoYXRfX2Jhc2ljLXRyYW5zY3JpcHRfX2ZpbGxlcic6IHtcbiAgICAgIGZsZXg6IDFcbiAgICB9LFxuXG4gICAgJyYgLndlYmNoYXRfX2Jhc2ljLXRyYW5zY3JpcHRfX3Njcm9sbGFibGUnOiB7XG4gICAgICBkaXNwbGF5OiAnZmxleCcsXG4gICAgICBmbGV4RGlyZWN0aW9uOiAnY29sdW1uJyxcbiAgICAgIG92ZXJmbG93WDogJ2hpZGRlbicsXG4gICAgICBXZWJraXRPdmVyZmxvd1Njcm9sbGluZzogJ3RvdWNoJ1xuICAgIH0sXG5cbiAgICAnJiAud2ViY2hhdF9fYmFzaWMtdHJhbnNjcmlwdF9fdHJhbnNjcmlwdCc6IHtcbiAgICAgIGxpc3RTdHlsZVR5cGU6ICdub25lJ1xuICAgIH1cbiAgfVxufTtcblxudHlwZSBTY3JvbGxCZWhhdmlvciA9ICdhdXRvJyB8ICdzbW9vdGgnO1xudHlwZSBTY3JvbGxUb09wdGlvbnMgPSB7IGJlaGF2aW9yPzogU2Nyb2xsQmVoYXZpb3IgfTtcbnR5cGUgU2Nyb2xsVG9Qb3NpdGlvbiA9IHsgYWN0aXZpdHlJRD86IHN0cmluZzsgc2Nyb2xsVG9wPzogbnVtYmVyIH07XG5cbnR5cGUgSW50ZXJuYWxUcmFuc2NyaXB0UHJvcHMgPSB7XG4gIGFjdGl2aXR5RWxlbWVudE1hcFJlZjogTXV0YWJsZVJlZk9iamVjdDxBY3Rpdml0eUVsZW1lbnRNYXA+O1xuICBjbGFzc05hbWU/OiBzdHJpbmc7XG59O1xuXG4vLyBUT0RPOiBbUDFdICM0MTMzIEFkZCB0ZWxlbWV0cnkgZm9yIGNvbXB1dGluZyBob3cgbWFueSByZS1yZW5kZXIgZG9uZSBzbyBmYXIuXG5jb25zdCBJbnRlcm5hbFRyYW5zY3JpcHQgPSBmb3J3YXJkUmVmPEhUTUxEaXZFbGVtZW50LCBJbnRlcm5hbFRyYW5zY3JpcHRQcm9wcz4oXG4gICh7IGFjdGl2aXR5RWxlbWVudE1hcFJlZiwgY2xhc3NOYW1lIH0sIHJlZikgPT4ge1xuICAgIGNvbnN0IFt7IGJhc2ljVHJhbnNjcmlwdDogYmFzaWNUcmFuc2NyaXB0U3R5bGVTZXQgfV0gPSB1c2VTdHlsZVNldCgpO1xuICAgIGNvbnN0IFt7IGJ1YmJsZUZyb21Vc2VyTnViT2Zmc2V0LCBidWJibGVOdWJPZmZzZXQsIGdyb3VwVGltZXN0YW1wLCBzaG93QXZhdGFySW5Hcm91cCB9XSA9IHVzZVN0eWxlT3B0aW9ucygpO1xuICAgIGNvbnN0IFthY3RpdmVEZXNjZW5kYW50SWRdID0gdXNlQWN0aXZlRGVzY2VuZGFudElkKCk7XG4gICAgY29uc3QgW2FjdGl2aXR5V2l0aFJlbmRlcmVyVHJlZV0gPSB1c2VBY3Rpdml0eVRyZWVXaXRoUmVuZGVyZXIoKTtcbiAgICBjb25zdCBbZGlyZWN0aW9uXSA9IHVzZURpcmVjdGlvbigpO1xuICAgIGNvbnN0IFtmb2N1c2VkQWN0aXZpdHlLZXldID0gdXNlRm9jdXNlZEFjdGl2aXR5S2V5KCk7XG4gICAgY29uc3QgW2ZvY3VzZWRFeHBsaWNpdGx5XSA9IHVzZUZvY3VzZWRFeHBsaWNpdGx5KCk7XG4gICAgY29uc3QgY3JlYXRlQXZhdGFyUmVuZGVyZXIgPSB1c2VDcmVhdGVBdmF0YXJSZW5kZXJlcigpO1xuICAgIGNvbnN0IGZvY3VzID0gdXNlRm9jdXMoKTtcbiAgICBjb25zdCBmb2N1c0J5QWN0aXZpdHlLZXkgPSB1c2VGb2N1c0J5QWN0aXZpdHlLZXkoKTtcbiAgICBjb25zdCBmb2N1c1JlbGF0aXZlQWN0aXZpdHkgPSB1c2VGb2N1c1JlbGF0aXZlQWN0aXZpdHkoKTtcbiAgICBjb25zdCBnZXRBY3Rpdml0eUJ5S2V5ID0gdXNlR2V0QWN0aXZpdHlCeUtleSgpO1xuICAgIGNvbnN0IGdldEtleUJ5QWN0aXZpdHkgPSB1c2VHZXRLZXlCeUFjdGl2aXR5KCk7XG4gICAgY29uc3QgZ2V0S2V5QnlBY3Rpdml0eUlkID0gdXNlR2V0S2V5QnlBY3Rpdml0eUlkKCk7XG4gICAgY29uc3QgbG9jYWxpemUgPSB1c2VMb2NhbGl6ZXIoKTtcbiAgICBjb25zdCByb290Q2xhc3NOYW1lID0gdXNlU3R5bGVUb0Vtb3Rpb25PYmplY3QoKShST09UX1NUWUxFKSArICcnO1xuICAgIGNvbnN0IHJvb3RFbGVtZW50UmVmID0gdXNlUmVmPEhUTUxEaXZFbGVtZW50PigpO1xuICAgIGNvbnN0IHRlcm1pbmF0b3JMYWJlbElkID0gdXNlVW5pcXVlSWQoJ3dlYmNoYXRfX2Jhc2ljLXRyYW5zY3JpcHRfX3Rlcm1pbmF0b3ItbGFiZWwnKTtcbiAgICBjb25zdCB0ZXJtaW5hdG9yUmVmID0gdXNlUmVmPEhUTUxEaXZFbGVtZW50PigpO1xuXG4gICAgY29uc3QgZm9jdXNlZEFjdGl2aXR5S2V5UmVmID0gdXNlVmFsdWVSZWYoZm9jdXNlZEFjdGl2aXR5S2V5KTtcbiAgICBjb25zdCBoaWRlQWxsVGltZXN0YW1wcyA9IGdyb3VwVGltZXN0YW1wID09PSBmYWxzZTtcbiAgICBjb25zdCB0ZXJtaW5hdG9yVGV4dCA9IGxvY2FsaXplKCdUUkFOU0NSSVBUX1RFUk1JTkFUT1JfVEVYVCcpO1xuICAgIGNvbnN0IHRyYW5zY3JpcHRBcmlhTGFiZWwgPSBsb2NhbGl6ZSgnVFJBTlNDUklQVF9BUklBX0xBQkVMX0FMVCcpO1xuXG4gICAgY29uc3QgY2FsbGJhY2tSZWYgPSB1c2VDYWxsYmFjayhcbiAgICAgIChlbGVtZW50OiBIVE1MRGl2RWxlbWVudCkgPT4ge1xuICAgICAgICBpZiAodHlwZW9mIHJlZiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIHJlZihlbGVtZW50KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZWYuY3VycmVudCA9IGVsZW1lbnQ7XG4gICAgICAgIH1cblxuICAgICAgICByb290RWxlbWVudFJlZi5jdXJyZW50ID0gZWxlbWVudDtcbiAgICAgIH0sXG4gICAgICBbcmVmLCByb290RWxlbWVudFJlZl1cbiAgICApO1xuXG4gICAgY29uc3QgY3JlYXRlQXZhdGFyUmVuZGVyZXJNZW1vaXplZCA9IHVzZU1lbW9pemVkKFxuICAgICAgKGFjdGl2aXR5OiBXZWJDaGF0QWN0aXZpdHkpID0+IGNyZWF0ZUF2YXRhclJlbmRlcmVyKHsgYWN0aXZpdHkgfSksXG4gICAgICBbY3JlYXRlQXZhdGFyUmVuZGVyZXJdXG4gICAgKTtcblxuICAgIC8vIEZsYXR0ZW4gdGhlIHRyZWUgYmFjayBpbnRvIGFuIGFycmF5IHdpdGggaW5mb3JtYXRpb24gcmVsYXRlZCB0byByZW5kZXJpbmcuXG4gICAgY29uc3QgcmVuZGVyaW5nRWxlbWVudHMgPSB1c2VNZW1vKCgpID0+IHtcbiAgICAgIGNvbnN0IHJlbmRlcmluZ0VsZW1lbnRzOiBSZWFjdE5vZGVbXSA9IFtdO1xuICAgICAgY29uc3QgdG9wU2lkZUJvdE51YiA9IGlzWmVyb09yUG9zaXRpdmUoYnViYmxlTnViT2Zmc2V0KTtcbiAgICAgIGNvbnN0IHRvcFNpZGVVc2VyTnViID0gaXNaZXJvT3JQb3NpdGl2ZShidWJibGVGcm9tVXNlck51Yk9mZnNldCk7XG5cbiAgICAgIGFjdGl2aXR5V2l0aFJlbmRlcmVyVHJlZS5mb3JFYWNoKGVudHJpZXNXaXRoU2FtZVNlbmRlciA9PiB7XG4gICAgICAgIGNvbnN0IFtbeyBhY3Rpdml0eTogZmlyc3RBY3Rpdml0eSB9XV0gPSBlbnRyaWVzV2l0aFNhbWVTZW5kZXI7XG4gICAgICAgIGNvbnN0IHJlbmRlckF2YXRhciA9IGNyZWF0ZUF2YXRhclJlbmRlcmVyTWVtb2l6ZWQoZmlyc3RBY3Rpdml0eSk7XG5cbiAgICAgICAgZW50cmllc1dpdGhTYW1lU2VuZGVyLmZvckVhY2goKGVudHJpZXNXaXRoU2FtZVNlbmRlckFuZFN0YXR1cywgaW5kZXhXaXRoaW5TZW5kZXJHcm91cCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGZpcnN0SW5TZW5kZXJHcm91cCA9ICFpbmRleFdpdGhpblNlbmRlckdyb3VwO1xuICAgICAgICAgIGNvbnN0IGxhc3RJblNlbmRlckdyb3VwID0gaW5kZXhXaXRoaW5TZW5kZXJHcm91cCA9PT0gZW50cmllc1dpdGhTYW1lU2VuZGVyLmxlbmd0aCAtIDE7XG5cbiAgICAgICAgICBlbnRyaWVzV2l0aFNhbWVTZW5kZXJBbmRTdGF0dXMuZm9yRWFjaCgoeyBhY3Rpdml0eSwgcmVuZGVyQWN0aXZpdHkgfSwgaW5kZXhXaXRoaW5TZW5kZXJBbmRTdGF0dXNHcm91cCkgPT4ge1xuICAgICAgICAgICAgLy8gV2Ugb25seSBzaG93IHRoZSB0aW1lc3RhbXAgYXQgdGhlIGVuZCBvZiB0aGUgc2VuZGVyIGdyb3VwLiBCdXQgd2UgYWx3YXlzIHNob3cgdGhlIFwiU2VuZCBmYWlsZWQsIHJldHJ5XCIgcHJvbXB0LlxuICAgICAgICAgICAgY29uc3QgZmlyc3RJblNlbmRlckFuZFN0YXR1c0dyb3VwID0gIWluZGV4V2l0aGluU2VuZGVyQW5kU3RhdHVzR3JvdXA7XG4gICAgICAgICAgICBjb25zdCBrZXk6IHN0cmluZyA9IGdldEtleUJ5QWN0aXZpdHkoYWN0aXZpdHkpO1xuICAgICAgICAgICAgY29uc3QgbGFzdEluU2VuZGVyQW5kU3RhdHVzR3JvdXAgPVxuICAgICAgICAgICAgICBpbmRleFdpdGhpblNlbmRlckFuZFN0YXR1c0dyb3VwID09PSBlbnRyaWVzV2l0aFNhbWVTZW5kZXJBbmRTdGF0dXMubGVuZ3RoIC0gMTtcbiAgICAgICAgICAgIGNvbnN0IHRvcFNpZGVOdWIgPSBhY3Rpdml0eS5mcm9tPy5yb2xlID09PSAndXNlcicgPyB0b3BTaWRlVXNlck51YiA6IHRvcFNpZGVCb3ROdWI7XG5cbiAgICAgICAgICAgIGxldCBzaG93Q2FsbG91dDogYm9vbGVhbjtcblxuICAgICAgICAgICAgLy8gRGVwZW5kaW5nIG9uIHRoZSBcInNob3dBdmF0YXJJbkdyb3VwXCIgc2V0dGluZywgdGhlIGF2YXRhciB3aWxsIHJlbmRlciBpbiBkaWZmZXJlbnQgcG9zaXRpb25zLlxuICAgICAgICAgICAgaWYgKHNob3dBdmF0YXJJbkdyb3VwID09PSAnc2VuZGVyJykge1xuICAgICAgICAgICAgICBpZiAodG9wU2lkZU51Yikge1xuICAgICAgICAgICAgICAgIHNob3dDYWxsb3V0ID0gZmlyc3RJblNlbmRlckdyb3VwICYmIGZpcnN0SW5TZW5kZXJBbmRTdGF0dXNHcm91cDtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBzaG93Q2FsbG91dCA9IGxhc3RJblNlbmRlckdyb3VwICYmIGxhc3RJblNlbmRlckFuZFN0YXR1c0dyb3VwO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHNob3dBdmF0YXJJbkdyb3VwID09PSAnc3RhdHVzJykge1xuICAgICAgICAgICAgICBpZiAodG9wU2lkZU51Yikge1xuICAgICAgICAgICAgICAgIHNob3dDYWxsb3V0ID0gZmlyc3RJblNlbmRlckFuZFN0YXR1c0dyb3VwO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHNob3dDYWxsb3V0ID0gbGFzdEluU2VuZGVyQW5kU3RhdHVzR3JvdXA7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHNob3dDYWxsb3V0ID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmVuZGVyaW5nRWxlbWVudHMucHVzaChcbiAgICAgICAgICAgICAgPFRyYW5zY3JpcHRBY3Rpdml0eVxuICAgICAgICAgICAgICAgIGFjdGl2aXR5PXthY3Rpdml0eX1cbiAgICAgICAgICAgICAgICBhY3Rpdml0eUVsZW1lbnRNYXBSZWY9e2FjdGl2aXR5RWxlbWVudE1hcFJlZn1cbiAgICAgICAgICAgICAgICAvLyBcImhpZGVUaW1lc3RhbXBcIiBpcyBhIHJlbmRlci10aW1lIHBhcmFtZXRlciBmb3IgcmVuZGVyQWN0aXZpdHlTdGF0dXMoKS5cbiAgICAgICAgICAgICAgICAvLyBJZiB0cnVlLCBpdCB3aWxsIGhpZGUgdGhlIHRpbWVzdGFtcCwgYnV0IGl0IHdpbGwgY29udGludWUgdG8gc2hvdyB0aGVcbiAgICAgICAgICAgICAgICAvLyByZXRyeSBwcm9tcHQuIEFuZCBzaG93IHRoZSBzY3JlZW4gcmVhZGVyIHZlcnNpb24gb2YgdGhlIHRpbWVzdGFtcC5cbiAgICAgICAgICAgICAgICBhY3Rpdml0eUtleT17a2V5fVxuICAgICAgICAgICAgICAgIGhpZGVUaW1lc3RhbXA9e1xuICAgICAgICAgICAgICAgICAgaGlkZUFsbFRpbWVzdGFtcHMgfHwgaW5kZXhXaXRoaW5TZW5kZXJBbmRTdGF0dXNHcm91cCAhPT0gZW50cmllc1dpdGhTYW1lU2VuZGVyQW5kU3RhdHVzLmxlbmd0aCAtIDFcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAga2V5PXtrZXl9XG4gICAgICAgICAgICAgICAgcmVuZGVyQWN0aXZpdHk9e3JlbmRlckFjdGl2aXR5fVxuICAgICAgICAgICAgICAgIHJlbmRlckF2YXRhcj17cmVuZGVyQXZhdGFyfVxuICAgICAgICAgICAgICAgIHNob3dDYWxsb3V0PXtzaG93Q2FsbG91dH1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiByZW5kZXJpbmdFbGVtZW50cztcbiAgICB9LCBbXG4gICAgICBhY3Rpdml0eUVsZW1lbnRNYXBSZWYsXG4gICAgICBhY3Rpdml0eVdpdGhSZW5kZXJlclRyZWUsXG4gICAgICBidWJibGVGcm9tVXNlck51Yk9mZnNldCxcbiAgICAgIGJ1YmJsZU51Yk9mZnNldCxcbiAgICAgIGNyZWF0ZUF2YXRhclJlbmRlcmVyTWVtb2l6ZWQsXG4gICAgICBnZXRLZXlCeUFjdGl2aXR5LFxuICAgICAgaGlkZUFsbFRpbWVzdGFtcHMsXG4gICAgICBzaG93QXZhdGFySW5Hcm91cFxuICAgIF0pO1xuXG4gICAgY29uc3Qgc2Nyb2xsVG9Cb3R0b21TY3JvbGxUbzogKHNjcm9sbFRvcDogbnVtYmVyLCBvcHRpb25zPzogU2Nyb2xsVG9PcHRpb25zKSA9PiB2b2lkID0gdXNlU2Nyb2xsVG8oKTtcbiAgICBjb25zdCBzY3JvbGxUb0JvdHRvbVNjcm9sbFRvRW5kOiAob3B0aW9ucz86IFNjcm9sbFRvT3B0aW9ucykgPT4gdm9pZCA9IHVzZVNjcm9sbFRvRW5kKCk7XG5cbiAgICBjb25zdCBzY3JvbGxUbyA9IHVzZUNhbGxiYWNrKFxuICAgICAgKHBvc2l0aW9uOiBTY3JvbGxUb1Bvc2l0aW9uLCB7IGJlaGF2aW9yID0gJ2F1dG8nIH06IFNjcm9sbFRvT3B0aW9ucyA9IHt9KSA9PiB7XG4gICAgICAgIGlmICghcG9zaXRpb24pIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICAnYm90ZnJhbWV3b3JrLXdlYmNoYXQ6IEZpcnN0IGFyZ3VtZW50IHBhc3NlZCB0byBcInVzZVNjcm9sbFRvXCIgbXVzdCBiZSBhIFNjcm9sbFBvc2l0aW9uIG9iamVjdC4nXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHsgYWN0aXZpdHlJRDogYWN0aXZpdHlJZCwgc2Nyb2xsVG9wIH0gPSBwb3NpdGlvbjtcblxuICAgICAgICBpZiAodHlwZW9mIHNjcm9sbFRvcCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICBzY3JvbGxUb0JvdHRvbVNjcm9sbFRvKHNjcm9sbFRvcCwgeyBiZWhhdmlvciB9KTtcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgYWN0aXZpdHlJZCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICBjb25zdCBhY3Rpdml0eUJvdW5kaW5nQm94RWxlbWVudCA9IGFjdGl2aXR5RWxlbWVudE1hcFJlZi5jdXJyZW50XG4gICAgICAgICAgICAuZ2V0KGdldEtleUJ5QWN0aXZpdHlJZChhY3Rpdml0eUlkKSlcbiAgICAgICAgICAgID8ucXVlcnlTZWxlY3RvcignLndlYmNoYXRfX2Jhc2ljLXRyYW5zY3JpcHRfX2FjdGl2aXR5LWFjdGl2ZS1kZXNjZW5kYW50Jyk7XG5cbiAgICAgICAgICBjb25zdCBzY3JvbGxhYmxlRWxlbWVudCA9IHJvb3RFbGVtZW50UmVmLmN1cnJlbnQucXVlcnlTZWxlY3RvcignLndlYmNoYXRfX2Jhc2ljLXRyYW5zY3JpcHRfX3Njcm9sbGFibGUnKTtcblxuICAgICAgICAgIGlmIChzY3JvbGxhYmxlRWxlbWVudCAmJiBhY3Rpdml0eUJvdW5kaW5nQm94RWxlbWVudCkge1xuICAgICAgICAgICAgLy8gRVNMaW50IGNvbmZsaWN0IHdpdGggVHlwZVNjcmlwdC4gVGhlIHJlc3VsdCBvZiBnZXRDbGllbnRSZWN0cygpIGlzIG5vdCBhbiBBcnJheSBidXQgRE9NUmVjdExpc3QsIGFuZCBjYW5ub3QgYmUgZGVzdHJ1Y3R1cmVkLlxuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHByZWZlci1kZXN0cnVjdHVyaW5nXG4gICAgICAgICAgICBjb25zdCBhY3Rpdml0eUJvdW5kaW5nQm94RWxlbWVudENsaWVudFJlY3QgPSBhY3Rpdml0eUJvdW5kaW5nQm94RWxlbWVudC5nZXRDbGllbnRSZWN0cygpWzBdO1xuXG4gICAgICAgICAgICAvLyBFU0xpbnQgY29uZmxpY3Qgd2l0aCBUeXBlU2NyaXB0LiBUaGUgcmVzdWx0IG9mIGdldENsaWVudFJlY3RzKCkgaXMgbm90IGFuIEFycmF5IGJ1dCBET01SZWN0TGlzdCwgYW5kIGNhbm5vdCBiZSBkZXN0cnVjdHVyZWQuXG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcHJlZmVyLWRlc3RydWN0dXJpbmdcbiAgICAgICAgICAgIGNvbnN0IHNjcm9sbGFibGVFbGVtZW50Q2xpZW50UmVjdCA9IHNjcm9sbGFibGVFbGVtZW50LmdldENsaWVudFJlY3RzKClbMF07XG5cbiAgICAgICAgICAgIC8vIElmIGVpdGhlciB0aGUgYWN0aXZpdHkgb3IgdGhlIHRyYW5zY3JpcHQgc2Nyb2xsYWJsZSBpcyBub3Qgb24gRE9NLCB3ZSB3aWxsIG5vdCBzY3JvbGwgdGhlIHZpZXcuXG4gICAgICAgICAgICBpZiAoYWN0aXZpdHlCb3VuZGluZ0JveEVsZW1lbnRDbGllbnRSZWN0ICYmIHNjcm9sbGFibGVFbGVtZW50Q2xpZW50UmVjdCkge1xuICAgICAgICAgICAgICBjb25zdCB7IGhlaWdodDogYWN0aXZpdHlIZWlnaHQsIHk6IGFjdGl2aXR5WSB9ID0gYWN0aXZpdHlCb3VuZGluZ0JveEVsZW1lbnRDbGllbnRSZWN0O1xuICAgICAgICAgICAgICBjb25zdCB7IGhlaWdodDogc2Nyb2xsYWJsZUhlaWdodCB9ID0gc2Nyb2xsYWJsZUVsZW1lbnRDbGllbnRSZWN0O1xuICAgICAgICAgICAgICBjb25zdCBhY3Rpdml0eU9mZnNldFRvcCA9IGFjdGl2aXR5WSArIHNjcm9sbGFibGVFbGVtZW50LnNjcm9sbFRvcDtcblxuICAgICAgICAgICAgICBjb25zdCBzY3JvbGxUb3AgPSBNYXRoLm1pbihhY3Rpdml0eU9mZnNldFRvcCwgYWN0aXZpdHlPZmZzZXRUb3AgLSBzY3JvbGxhYmxlSGVpZ2h0ICsgYWN0aXZpdHlIZWlnaHQpO1xuXG4gICAgICAgICAgICAgIHNjcm9sbFRvQm90dG9tU2Nyb2xsVG8oc2Nyb2xsVG9wLCB7IGJlaGF2aW9yIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIFthY3Rpdml0eUVsZW1lbnRNYXBSZWYsIGdldEtleUJ5QWN0aXZpdHlJZCwgcm9vdEVsZW1lbnRSZWYsIHNjcm9sbFRvQm90dG9tU2Nyb2xsVG9dXG4gICAgKTtcblxuICAgIGNvbnN0IHNjcm9sbFRvRW5kID0gdXNlQ2FsbGJhY2soXG4gICAgICAoKSA9PiBzY3JvbGxUb0JvdHRvbVNjcm9sbFRvRW5kKHsgYmVoYXZpb3I6ICdzbW9vdGgnIH0pLFxuICAgICAgW3Njcm9sbFRvQm90dG9tU2Nyb2xsVG9FbmRdXG4gICAgKTtcblxuICAgIGNvbnN0IHNjcm9sbFJlbGF0aXZlID0gdXNlQ2FsbGJhY2soXG4gICAgICAoeyBkaXJlY3Rpb24sIGRpc3BsYWNlbWVudCB9OiBUcmFuc2NyaXB0U2Nyb2xsUmVsYXRpdmVPcHRpb25zKSA9PiB7XG4gICAgICAgIGNvbnN0IHsgY3VycmVudDogcm9vdEVsZW1lbnQgfSA9IHJvb3RFbGVtZW50UmVmO1xuXG4gICAgICAgIGlmICghcm9vdEVsZW1lbnQpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBzY3JvbGxhYmxlOiBIVE1MRWxlbWVudCA9IHJvb3RFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJy53ZWJjaGF0X19iYXNpYy10cmFuc2NyaXB0X19zY3JvbGxhYmxlJyk7XG4gICAgICAgIGxldCBuZXh0U2Nyb2xsVG9wOiBudW1iZXI7XG5cbiAgICAgICAgaWYgKHR5cGVvZiBkaXNwbGFjZW1lbnQgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLW1hZ2ljLW51bWJlcnNcbiAgICAgICAgICBuZXh0U2Nyb2xsVG9wID0gc2Nyb2xsYWJsZS5zY3JvbGxUb3AgKyAoZGlyZWN0aW9uID09PSAnZG93bicgPyAxIDogLTEpICogZGlzcGxhY2VtZW50O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1tYWdpYy1udW1iZXJzXG4gICAgICAgICAgbmV4dFNjcm9sbFRvcCA9IHNjcm9sbGFibGUuc2Nyb2xsVG9wICsgKGRpcmVjdGlvbiA9PT0gJ2Rvd24nID8gMSA6IC0xKSAqIHNjcm9sbGFibGUub2Zmc2V0SGVpZ2h0O1xuICAgICAgICB9XG5cbiAgICAgICAgc2Nyb2xsVG8oXG4gICAgICAgICAge1xuICAgICAgICAgICAgc2Nyb2xsVG9wOiBNYXRoLm1heCgwLCBNYXRoLm1pbihzY3JvbGxhYmxlLnNjcm9sbEhlaWdodCAtIHNjcm9sbGFibGUub2Zmc2V0SGVpZ2h0LCBuZXh0U2Nyb2xsVG9wKSlcbiAgICAgICAgICB9LFxuICAgICAgICAgIHsgYmVoYXZpb3I6ICdzbW9vdGgnIH1cbiAgICAgICAgKTtcbiAgICAgIH0sXG4gICAgICBbcm9vdEVsZW1lbnRSZWYsIHNjcm9sbFRvXVxuICAgICk7XG5cbiAgICAvLyBTaW5jZSB0aGVyZSBjb3VsZCBiZSBtdWx0aXBsZSBpbnN0YW5jZXMgb2YgPEJhc2ljVHJhbnNjcmlwdD4gaW5zaWRlIHRoZSA8Q29tcG9zZXI+LCB3aGVuIHRoZSBkZXZlbG9wZXIgY2FsbHMgYHNjcm9sbFhYWGAsIHdlIG5lZWQgdG8gY2FsbCBpdCBvbiBhbGwgaW5zdGFuY2VzLlxuICAgIC8vIFdlIGNhbGwgYHVzZVJlZ2lzdGVyU2Nyb2xsWFhYYCB0byByZWdpc3RlciBhIGNhbGxiYWNrIGZ1bmN0aW9uLCB0aGUgYHVzZVNjcm9sbFhYWGAgd2lsbCBtdWx0aXBsZXggdGhlIGNhbGwgaW50byBlYWNoIGluc3RhbmNlIG9mIDxCYXNpY1RyYW5zY3JpcHQ+LlxuICAgIHVzZVJlZ2lzdGVyU2Nyb2xsVG8oc2Nyb2xsVG8pO1xuICAgIHVzZVJlZ2lzdGVyU2Nyb2xsVG9FbmQoc2Nyb2xsVG9FbmQpO1xuICAgIHVzZVJlZ2lzdGVyU2Nyb2xsUmVsYXRpdmVUcmFuc2NyaXB0KHNjcm9sbFJlbGF0aXZlKTtcblxuICAgIGNvbnN0IG1hcmtBY3Rpdml0eUtleUFzUmVhZCA9IHVzZU1hcmtBY3Rpdml0eUtleUFzUmVhZCgpO1xuXG4gICAgY29uc3QgZGlzcGF0Y2hTY3JvbGxQb3NpdGlvbldpdGhBY3Rpdml0eUlkOiAoc2Nyb2xsUG9zaXRpb246IFNjcm9sbFRvUG9zaXRpb24pID0+IHZvaWQgPVxuICAgICAgdXNlRGlzcGF0Y2hTY3JvbGxQb3NpdGlvbigpO1xuXG4gICAgLy8gVE9ETzogW1AyXSBXZSBzaG91bGQgdXNlIEludGVyc2VjdGlvbk9ic2VydmVyIHRvIHRyYWNrIHdoYXQgYWN0aXZpdHkgaXMgaW4gdGhlIHNjcm9sbGFibGUuXG4gICAgLy8gICAgICAgICAgICBIb3dldmVyLCBJbnRlcnNlY3Rpb25PYnNlcnZlciBpcyBub3QgYXZhaWxhYmxlIG9uIElFMTEsIHdlIG5lZWQgdG8gbWFrZSBhIGxpbWl0ZWQgcG9seWZpbGwgaW4gUmVhY3Qgc3R5bGUuXG4gICAgY29uc3QgaGFuZGxlU2Nyb2xsUG9zaXRpb24gPSB1c2VDYWxsYmFjayhcbiAgICAgICh7IHNjcm9sbFRvcCB9OiB7IHNjcm9sbFRvcDogbnVtYmVyIH0pID0+IHtcbiAgICAgICAgY29uc3QgeyBjdXJyZW50OiByb290RWxlbWVudCB9ID0gcm9vdEVsZW1lbnRSZWY7XG5cbiAgICAgICAgaWYgKCFyb290RWxlbWVudCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHNjcm9sbGFibGVFbGVtZW50ID0gcm9vdEVsZW1lbnQucXVlcnlTZWxlY3RvcignLndlYmNoYXRfX2Jhc2ljLXRyYW5zY3JpcHRfX3Njcm9sbGFibGUnKTtcblxuICAgICAgICAvLyBcImdldENsaWVudFJlY3RzKClcIiBpcyBub3QgcmV0dXJuaW5nIGFuIGFycmF5LCB0aHVzLCBpdCBpcyBub3QgZGVzdHJ1Y3R1cmFibGUuXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBwcmVmZXItZGVzdHJ1Y3R1cmluZ1xuICAgICAgICBjb25zdCBzY3JvbGxhYmxlRWxlbWVudENsaWVudFJlY3QgPSBzY3JvbGxhYmxlRWxlbWVudC5nZXRDbGllbnRSZWN0cygpWzBdO1xuXG4gICAgICAgIC8vIElmIHRoZSBzY3JvbGxhYmxlIGlzIG5vdCBtb3VudGVkLCB3ZSBjYW5ub3QgbWVhc3VyZSB3aGljaCBhY3Rpdml0eSBpcyBpbiB2aWV3LiBUaHVzLCB3ZSB3aWxsIG5vdCBmaXJlIGFueSBldmVudHMuXG4gICAgICAgIGlmICghc2Nyb2xsYWJsZUVsZW1lbnRDbGllbnRSZWN0KSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgeyBib3R0b206IHNjcm9sbGFibGVDbGllbnRCb3R0b20gfSA9IHNjcm9sbGFibGVFbGVtZW50Q2xpZW50UmVjdDtcblxuICAgICAgICAvLyBGaW5kIHRoZSBhY3Rpdml0eSBqdXN0IGFib3ZlIHNjcm9sbCB2aWV3IGJvdHRvbS5cbiAgICAgICAgLy8gSWYgdGhlIHNjcm9sbCB2aWV3IGlzIGFscmVhZHkgb24gdG9wLCBnZXQgdGhlIGZpcnN0IGFjdGl2aXR5LlxuICAgICAgICBjb25zdCBhY3Rpdml0eUVsZW1lbnRzID0gQXJyYXkuZnJvbShhY3Rpdml0eUVsZW1lbnRNYXBSZWYuY3VycmVudC5lbnRyaWVzKCkpO1xuICAgICAgICBjb25zdCBhY3Rpdml0eUtleUp1c3RBYm92ZVNjcm9sbEJvdHRvbTogc3RyaW5nIHwgdW5kZWZpbmVkID0gKFxuICAgICAgICAgIHNjcm9sbGFibGVFbGVtZW50LnNjcm9sbFRvcFxuICAgICAgICAgICAgPyBhY3Rpdml0eUVsZW1lbnRzXG4gICAgICAgICAgICAgICAgLnJldmVyc2UoKVxuICAgICAgICAgICAgICAgIC8vIEFkZCBzdWJwaXhlbCB0b2xlcmFuY2VcbiAgICAgICAgICAgICAgICAuZmluZCgoWywgZWxlbWVudF0pID0+IHtcbiAgICAgICAgICAgICAgICAgIC8vIFwiZ2V0Q2xpZW50UmVjdHMoKVwiIGlzIG5vdCByZXR1cm5pbmcgYW4gYXJyYXksIHRodXMsIGl0IGlzIG5vdCBkZXN0cnVjdHVyYWJsZS5cbiAgICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBwcmVmZXItZGVzdHJ1Y3R1cmluZ1xuICAgICAgICAgICAgICAgICAgY29uc3QgZWxlbWVudENsaWVudFJlY3QgPSBlbGVtZW50LmdldENsaWVudFJlY3RzKClbMF07XG5cbiAgICAgICAgICAgICAgICAgIC8vIElmIHRoZSBhY3Rpdml0eSBpcyBub3QgYXR0YWNoZWQgdG8gRE9NIHRyZWUsIHdlIHNob3VsZCBub3QgY291bnQgaXQgYXMgXCJib3R0b21tb3N0IHZpc2libGUgYWN0aXZpdHlcIiwgYXMgaXQgaXMgbm90IHZpc2libGUuXG4gICAgICAgICAgICAgICAgICByZXR1cm4gZWxlbWVudENsaWVudFJlY3QgJiYgZWxlbWVudENsaWVudFJlY3QuYm90dG9tIDwgc2Nyb2xsYWJsZUNsaWVudEJvdHRvbSArIDE7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIDogYWN0aXZpdHlFbGVtZW50c1swXVxuICAgICAgICApPy5bMF07XG5cbiAgICAgICAgLy8gV2hlbiB0aGUgZW5kLXVzZXIgc2xvd2x5IHNjcm9sbGluZyB0aGUgdmlldyBkb3duLCB3ZSB3aWxsIG1hcmsgYWN0aXZpdHkgYXMgcmVhZCB3aGVuIHRoZSBtZXNzYWdlIGZ1bGx5IGFwcGVhciBvbiB0aGUgc2NyZWVuLlxuICAgICAgICBhY3Rpdml0eUtleUp1c3RBYm92ZVNjcm9sbEJvdHRvbSAmJiBtYXJrQWN0aXZpdHlLZXlBc1JlYWQoYWN0aXZpdHlLZXlKdXN0QWJvdmVTY3JvbGxCb3R0b20pO1xuXG4gICAgICAgIGlmIChkaXNwYXRjaFNjcm9sbFBvc2l0aW9uV2l0aEFjdGl2aXR5SWQpIHtcbiAgICAgICAgICBjb25zdCBhY3Rpdml0eSA9IGdldEFjdGl2aXR5QnlLZXkoYWN0aXZpdHlLZXlKdXN0QWJvdmVTY3JvbGxCb3R0b20pO1xuXG4gICAgICAgICAgZGlzcGF0Y2hTY3JvbGxQb3NpdGlvbldpdGhBY3Rpdml0eUlkKHsgLi4uKGFjdGl2aXR5ID8geyBhY3Rpdml0eUlEOiBhY3Rpdml0eS5pZCB9IDoge30pLCBzY3JvbGxUb3AgfSk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBbXG4gICAgICAgIGFjdGl2aXR5RWxlbWVudE1hcFJlZixcbiAgICAgICAgZGlzcGF0Y2hTY3JvbGxQb3NpdGlvbldpdGhBY3Rpdml0eUlkLFxuICAgICAgICBnZXRBY3Rpdml0eUJ5S2V5LFxuICAgICAgICBtYXJrQWN0aXZpdHlLZXlBc1JlYWQsXG4gICAgICAgIHJvb3RFbGVtZW50UmVmXG4gICAgICBdXG4gICAgKTtcblxuICAgIHVzZU9ic2VydmVTY3JvbGxQb3NpdGlvbihoYW5kbGVTY3JvbGxQb3NpdGlvbik7XG5cbiAgICBjb25zdCBoYW5kbGVUcmFuc2NyaXB0S2V5RG93biA9IHVzZUNhbGxiYWNrPEtleWJvYXJkRXZlbnRIYW5kbGVyPEhUTUxEaXZFbGVtZW50Pj4oXG4gICAgICBldmVudCA9PiB7XG4gICAgICAgIGNvbnN0IHsgdGFyZ2V0IH0gPSBldmVudDtcblxuICAgICAgICBjb25zdCBmcm9tRW5kT2ZUcmFuc2NyaXB0SW5kaWNhdG9yID0gdGFyZ2V0ID09PSB0ZXJtaW5hdG9yUmVmLmN1cnJlbnQ7XG4gICAgICAgIGNvbnN0IGZyb21UcmFuc2NyaXB0ID0gdGFyZ2V0ID09PSBldmVudC5jdXJyZW50VGFyZ2V0O1xuXG4gICAgICAgIGlmICghZnJvbUVuZE9mVHJhbnNjcmlwdEluZGljYXRvciAmJiAhZnJvbVRyYW5zY3JpcHQpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgaGFuZGxlZCA9IHRydWU7XG5cbiAgICAgICAgc3dpdGNoIChldmVudC5rZXkpIHtcbiAgICAgICAgICBjYXNlICdBcnJvd0Rvd24nOlxuICAgICAgICAgICAgZm9jdXNSZWxhdGl2ZUFjdGl2aXR5KGZyb21FbmRPZlRyYW5zY3JpcHRJbmRpY2F0b3IgPyAwIDogMSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgJ0Fycm93VXAnOlxuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLW1hZ2ljLW51bWJlcnNcbiAgICAgICAgICAgIGZvY3VzUmVsYXRpdmVBY3Rpdml0eShmcm9tRW5kT2ZUcmFuc2NyaXB0SW5kaWNhdG9yID8gMCA6IC0xKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSAnRW5kJzpcbiAgICAgICAgICAgIGZvY3VzUmVsYXRpdmVBY3Rpdml0eShJbmZpbml0eSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgJ0VudGVyJzpcbiAgICAgICAgICAgIC8vIFRoaXMgaXMgY2FwdHVyaW5nIHBsYWluIEVOVEVSLlxuICAgICAgICAgICAgLy8gV2hlbiBzY3JlZW4gcmVhZGVyIGlzIG5vdCBydW5uaW5nLCBvciBzY3JlZW4gcmVhZGVyIGlzIHJ1bm5pbmcgb3V0c2lkZSBvZiBzY2FuIG1vZGUsIHRoZSBFTlRFUiBrZXkgd2lsbCBiZSBjYXB0dXJlZCBoZXJlLlxuICAgICAgICAgICAgaWYgKCFmcm9tRW5kT2ZUcmFuc2NyaXB0SW5kaWNhdG9yKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGJvZHk6IEhUTUxFbGVtZW50ID0gYWN0aXZpdHlFbGVtZW50TWFwUmVmLmN1cnJlbnRcbiAgICAgICAgICAgICAgICAuZ2V0KGZvY3VzZWRBY3Rpdml0eUtleVJlZi5jdXJyZW50KVxuICAgICAgICAgICAgICAgID8ucXVlcnlTZWxlY3RvcignLndlYmNoYXRfX2Jhc2ljLXRyYW5zY3JpcHRfX2FjdGl2aXR5LWJvZHknKTtcblxuICAgICAgICAgICAgICB0YWJiYWJsZUVsZW1lbnRzKGJvZHkpWzBdPy5mb2N1cygpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgJ0VzY2FwZSc6XG4gICAgICAgICAgICBmb2N1cygnc2VuZEJveFdpdGhvdXRLZXlib2FyZCcpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlICdIb21lJzpcbiAgICAgICAgICAgIGZvY3VzUmVsYXRpdmVBY3Rpdml0eSgtSW5maW5pdHkpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgaGFuZGxlZCA9IGZhbHNlO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaGFuZGxlZCkge1xuICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAgICAgICAvLyBJZiBhIGN1c3RvbSBIVE1MIGNvbnRyb2wgd2FudHMgdG8gaGFuZGxlIHVwL2Rvd24gYXJyb3csIHdlIHdpbGwgcHJldmVudCB0aGVtIGZyb20gbGlzdGVuaW5nIHRvIHRoaXMgZXZlbnQgdG8gcHJldmVudCBidWdzIGR1ZSB0byBoYW5kbGluZyBhcnJvdyBrZXlzIHR3aWNlLlxuICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgW2FjdGl2aXR5RWxlbWVudE1hcFJlZiwgZm9jdXMsIGZvY3VzZWRBY3Rpdml0eUtleVJlZiwgZm9jdXNSZWxhdGl2ZUFjdGl2aXR5LCB0ZXJtaW5hdG9yUmVmXVxuICAgICk7XG5cbiAgICBjb25zdCBoYW5kbGVUcmFuc2NyaXB0S2V5RG93bkNhcHR1cmUgPSB1c2VDYWxsYmFjazxLZXlib2FyZEV2ZW50SGFuZGxlcjxIVE1MRGl2RWxlbWVudD4+KFxuICAgICAgZXZlbnQgPT4ge1xuICAgICAgICBjb25zdCB7IGFsdEtleSwgY3RybEtleSwga2V5LCBtZXRhS2V5LCB0YXJnZXQgfSA9IGV2ZW50O1xuXG4gICAgICAgIGlmIChhbHRLZXkgfHwgKGN0cmxLZXkgJiYga2V5ICE9PSAndicpIHx8IG1ldGFLZXkgfHwgKCFpbnB1dHRhYmxlS2V5KGtleSkgJiYga2V5ICE9PSAnQmFja3NwYWNlJykpIHtcbiAgICAgICAgICAvLyBJZ25vcmUgaWYgb25lIG9mIHRoZSB1dGlsaXR5IGtleSAoZXhjZXB0IFNISUZUKSBpcyBwcmVzc2VkXG4gICAgICAgICAgLy8gRS5nLiBDVFJMLUMgb24gYSBsaW5rIGluIG9uZSBvZiB0aGUgbWVzc2FnZSBzaG91bGQgbm90IGp1bXAgdG8gY2hhdCBib3hcbiAgICAgICAgICAvLyBFLmcuIFwiQVwiIG9yIFwiQmFja3NwYWNlXCIgc2hvdWxkIGp1bXAgdG8gY2hhdCBib3hcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBTZW5kIGtleXN0cm9rZXMgdG8gc2VuZCBib3ggaWYgd2UgYXJlIGZvY3VzaW5nIG9uIHRoZSB0cmFuc2NyaXB0IG9yIHRlcm1pbmF0b3IuXG4gICAgICAgIGlmICh0YXJnZXQgPT09IGV2ZW50LmN1cnJlbnRUYXJnZXQgfHwgdGFyZ2V0ID09PSB0ZXJtaW5hdG9yUmVmLmN1cnJlbnQpIHtcbiAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblxuICAgICAgICAgIGZvY3VzKCdzZW5kQm94Jyk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBbZm9jdXNdXG4gICAgKTtcblxuICAgIHVzZVJlZ2lzdGVyRm9jdXNUcmFuc2NyaXB0KHVzZUNhbGxiYWNrKCgpID0+IGZvY3VzQnlBY3Rpdml0eUtleSh1bmRlZmluZWQpLCBbZm9jdXNCeUFjdGl2aXR5S2V5XSkpO1xuXG4gICAgLy8gV2hlbiB0aGUgZm9jdXNpbmcgYWN0aXZpdHkgaGFzIGNoYW5nZWQsIGRpc3BhdGNoIGFuIGV2ZW50IHRvIG9ic2VydmVycyBvZiBcInVzZU9ic2VydmVUcmFuc2NyaXB0Rm9jdXNcIi5cbiAgICBjb25zdCBkaXNwYXRjaFRyYW5zY3JpcHRGb2N1c0J5QWN0aXZpdHlLZXkgPSB1c2VEaXNwYXRjaFRyYW5zY3JpcHRGb2N1c0J5QWN0aXZpdHlLZXkoKTtcblxuICAgIC8vIERpc3BhdGNoIGEgXCJ0cmFuc2NyaXB0IGZvY3VzXCIgZXZlbnQgYmFzZWQgb24gdXNlciBzZWxlY3Rpb24uXG4gICAgLy8gV2Ugc2hvdWxkIG5vdCBkaXNwYXRjaCBcInRyYW5zY3JpcHQgZm9jdXNcIiB3aGVuIGEgbmV3IGFjdGl2aXR5IGNvbWUuIEFsdGhvdWdoIHRoZSBzZWxlY3Rpb24gY2hhbmdlLCBpdCBpcyBub3QgaW5pdGlhdGVkIGZyb20gdGhlIHVzZXIuXG4gICAgdXNlTWVtbyhcbiAgICAgICgpID0+IGRpc3BhdGNoVHJhbnNjcmlwdEZvY3VzQnlBY3Rpdml0eUtleShmb2N1c2VkRXhwbGljaXRseSA/IGZvY3VzZWRBY3Rpdml0eUtleSA6IHVuZGVmaW5lZCksXG4gICAgICBbZGlzcGF0Y2hUcmFuc2NyaXB0Rm9jdXNCeUFjdGl2aXR5S2V5LCBmb2N1c2VkQWN0aXZpdHlLZXksIGZvY3VzZWRFeHBsaWNpdGx5XVxuICAgICk7XG5cbiAgICAvLyBXaGVuIHRoZSB0cmFuc2NyaXB0IGlzIGJlaW5nIGZvY3VzZWQgb24sIHdlIHNob3VsZCBkaXNwYXRjaCBhIFwidHJhbnNjcmlwdGZvY3VzXCIgZXZlbnQuXG4gICAgY29uc3QgaGFuZGxlRm9jdXMgPSB1c2VDYWxsYmFjayhcbiAgICAgIC8vIFdlIGNhbGwgXCJmb2N1c0J5QWN0aXZpdHlLZXlcIiB3aXRoIGFjdGl2aXR5IGtleSBvZiBcInRydWVcIi5cbiAgICAgIC8vIEl0IG1lYW5zLCB0cmllcyB0byBmb2N1cyBvbiBhbnl0aGluZy5cbiAgICAgICh7IGN1cnJlbnRUYXJnZXQsIHRhcmdldCB9KSA9PiB0YXJnZXQgPT09IGN1cnJlbnRUYXJnZXQgJiYgZm9jdXNCeUFjdGl2aXR5S2V5KHRydWUsIGZhbHNlKSxcbiAgICAgIFtmb2N1c0J5QWN0aXZpdHlLZXldXG4gICAgKTtcblxuICAgIC8vIFRoaXMgaXMgcmVxdWlyZWQgYnkgSUUxMS5cbiAgICAvLyBXaGVuIHRoZSB1c2VyIGNsaWNrcyBvbiBhbmQgZW1wdHkgc3BhY2UgKGEuay5hLiBmaWxsZXIpIGluIGFuIGVtcHR5IHRyYW5zY3JpcHQsIElFMTEgc2F5cyB0aGUgZm9jdXMgaXMgb24gdGhlIDxkaXYgY2xhc3NOYW1lPVwiZmlsbGVyXCI+LFxuICAgIC8vIGRlc3BpdGUgdGhlIGZhY3QgdGhlcmUgYXJlIG5vIFwidGFiSW5kZXhcIiBhdHRyaWJ1dGVzIHNldCBvbiB0aGUgZmlsbGVyLlxuICAgIC8vIFdlIG5lZWQgdG8gYXJ0aWZpY2lhbGx5IHNlbmQgdGhlIGZvY3VzIGJhY2sgdG8gdGhlIHRyYW5zY3JpcHQuXG4gICAgY29uc3QgaGFuZGxlRm9jdXNGaWxsZXIgPSB1c2VDYWxsYmFjaygoKSA9PiBmb2N1c0J5QWN0aXZpdHlLZXkodW5kZWZpbmVkKSwgW2ZvY3VzQnlBY3Rpdml0eUtleV0pO1xuXG4gICAgLy8gV2hlbiBmb2N1cyBpbnRvIHRoZSB0cmFuc2NyaXB0IHVzaW5nIFRBQi9TSElGVC1UQUIsIHNjcm9sbCB0aGUgZm9jdXNlZCBhY3Rpdml0eSBpbnRvIHZpZXcuXG4gICAgdXNlT2JzZXJ2ZUZvY3VzVmlzaWJsZShcbiAgICAgIHJvb3RFbGVtZW50UmVmLFxuICAgICAgdXNlQ2FsbGJhY2soKCkgPT4gZm9jdXNCeUFjdGl2aXR5S2V5KHVuZGVmaW5lZCksIFtmb2N1c0J5QWN0aXZpdHlLZXldKVxuICAgICk7XG5cbiAgICByZXR1cm4gKFxuICAgICAgPGRpdlxuICAgICAgICAvLyBBbHRob3VnaCBBbmRyb2lkIFRhbGtCYWNrIDEyLjEgZG9lcyBub3Qgc3VwcG9ydCBgYXJpYS1hY3RpdmVkZXNjZW5kYW50YCwgd2hlbiB1c2VkLCBpdCBiZWNvbWUgYnVnZ3kgYW5kIHdpbGwgbmFycmF0ZSBjb250ZW50IHR3aWNlLlxuICAgICAgICAvLyBXZSBhcmUgZGlzYWJsaW5nIGBhcmlhLWFjdGl2ZWRlc2NlbmRhbnRgIGZvciBBbmRyb2lkLiBTZWUgPEFjdGl2aXR5Um93PiBmb3IgZGV0YWlscy5cbiAgICAgICAgYXJpYS1hY3RpdmVkZXNjZW5kYW50PXthbmRyb2lkID8gdW5kZWZpbmVkIDogYWN0aXZlRGVzY2VuZGFudElkfVxuICAgICAgICBhcmlhLWxhYmVsPXt0cmFuc2NyaXB0QXJpYUxhYmVsfVxuICAgICAgICBjbGFzc05hbWU9e2NsYXNzTmFtZXMoXG4gICAgICAgICAgJ3dlYmNoYXRfX2Jhc2ljLXRyYW5zY3JpcHQnLFxuICAgICAgICAgIGJhc2ljVHJhbnNjcmlwdFN0eWxlU2V0ICsgJycsXG4gICAgICAgICAgcm9vdENsYXNzTmFtZSxcbiAgICAgICAgICAoY2xhc3NOYW1lIHx8ICcnKSArICcnXG4gICAgICAgICl9XG4gICAgICAgIGRpcj17ZGlyZWN0aW9ufVxuICAgICAgICBvbkZvY3VzPXtoYW5kbGVGb2N1c31cbiAgICAgICAgb25LZXlEb3duPXtoYW5kbGVUcmFuc2NyaXB0S2V5RG93bn1cbiAgICAgICAgb25LZXlEb3duQ2FwdHVyZT17aGFuZGxlVHJhbnNjcmlwdEtleURvd25DYXB0dXJlfVxuICAgICAgICByZWY9e2NhbGxiYWNrUmVmfVxuICAgICAgICAvLyBcImFyaWEtYWN0aXZlZGVzY2VuZGFudFwiIHdpbGwgb25seSB3b3JrcyB3aXRoIGEgbnVtYmVyIG9mIHJvbGVzIGFuZCBpdCBtdXN0IGJlIGV4cGxpY2l0bHkgc2V0LlxuICAgICAgICAvLyBodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEvI2FyaWEtYWN0aXZlZGVzY2VuZGFudFxuICAgICAgICByb2xlPVwiZ3JvdXBcIlxuICAgICAgICAvLyBGb3IgdXAvZG93biBhcnJvdyBrZXkgbmF2aWdhdGlvbiBhY3Jvc3MgYWN0aXZpdGllcywgdGhpcyBjb21wb25lbnQgbXVzdCBiZSBpbmNsdWRlZCBpbiB0aGUgdGFiIHNlcXVlbmNlLlxuICAgICAgICAvLyBPdGhlcndpc2UsIFwiYXJpYS1hY3RpdmVkZXNjZW5kYW50XCIgd2lsbCBub3QgYmUgbmFycmF0ZWQgd2hlbiB0aGUgdXNlciBwcmVzcyB1cC9kb3duIGFycm93IGtleXMuXG4gICAgICAgIC8vIGh0dHBzOi8vd3d3LnczLm9yZy9UUi93YWktYXJpYS1wcmFjdGljZXMtMS4xLyNrYmRfZm9jdXNfYWN0aXZlZGVzY2VuZGFudFxuICAgICAgICB0YWJJbmRleD17MH1cbiAgICAgID5cbiAgICAgICAgPExpdmVSZWdpb25UcmFuc2NyaXB0IGFjdGl2aXR5RWxlbWVudE1hcFJlZj17YWN0aXZpdHlFbGVtZW50TWFwUmVmfSAvPlxuICAgICAgICB7LyogVE9ETzogW1AyXSBGaXggRVNMaW50IGVycm9yIGBuby11c2UtYmVmb3JlLWRlZmluZWAgKi99XG4gICAgICAgIHsvKiBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVzZS1iZWZvcmUtZGVmaW5lICovfVxuICAgICAgICA8SW50ZXJuYWxUcmFuc2NyaXB0U2Nyb2xsYWJsZSBvbkZvY3VzRmlsbGVyPXtoYW5kbGVGb2N1c0ZpbGxlcn0gdGVybWluYXRvclJlZj17dGVybWluYXRvclJlZn0+XG4gICAgICAgICAge3JlbmRlcmluZ0VsZW1lbnRzfVxuICAgICAgICA8L0ludGVybmFsVHJhbnNjcmlwdFNjcm9sbGFibGU+XG4gICAgICAgIHshIXJlbmRlcmluZ0VsZW1lbnRzLmxlbmd0aCAmJiAoXG4gICAgICAgICAgPEZyYWdtZW50PlxuICAgICAgICAgICAgPEZvY3VzUmVkaXJlY3RvciByZWRpcmVjdFJlZj17cm9vdEVsZW1lbnRSZWZ9IC8+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGFyaWEtbGFiZWxsZWRieT17dGVybWluYXRvckxhYmVsSWR9XG4gICAgICAgICAgICAgIGNsYXNzTmFtZT1cIndlYmNoYXRfX2Jhc2ljLXRyYW5zY3JpcHRfX3Rlcm1pbmF0b3JcIlxuICAgICAgICAgICAgICByZWY9e3Rlcm1pbmF0b3JSZWZ9XG4gICAgICAgICAgICAgIHJvbGU9XCJub3RlXCJcbiAgICAgICAgICAgICAgdGFiSW5kZXg9ezB9XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwid2ViY2hhdF9fYmFzaWMtdHJhbnNjcmlwdF9fdGVybWluYXRvci1ib2R5XCI+XG4gICAgICAgICAgICAgICAgey8qIGBpZGAgaXMgcmVxdWlyZWQgZm9yIGBhcmlhLWxhYmVsbGVkYnlgICovfVxuICAgICAgICAgICAgICAgIHsvKiBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QvZm9yYmlkLWRvbS1wcm9wcyAqL31cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIndlYmNoYXRfX2Jhc2ljLXRyYW5zY3JpcHRfX3Rlcm1pbmF0b3ItdGV4dFwiIGlkPXt0ZXJtaW5hdG9yTGFiZWxJZH0+XG4gICAgICAgICAgICAgICAgICB7dGVybWluYXRvclRleHR9XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9GcmFnbWVudD5cbiAgICAgICAgKX1cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJ3ZWJjaGF0X19iYXNpYy10cmFuc2NyaXB0X19mb2N1cy1pbmRpY2F0b3JcIiAvPlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxuKTtcblxuSW50ZXJuYWxUcmFuc2NyaXB0LmRlZmF1bHRQcm9wcyA9IHtcbiAgY2xhc3NOYW1lOiAnJ1xufTtcblxuSW50ZXJuYWxUcmFuc2NyaXB0LmRpc3BsYXlOYW1lID0gJ0ludGVybmFsVHJhbnNjcmlwdCc7XG5cbkludGVybmFsVHJhbnNjcmlwdC5wcm9wVHlwZXMgPSB7XG4gIC8vIFByb3BUeXBlcyBjYW5ub3QgdmFsaWRhdGUgcHJlY2lzZWx5IHdpdGggaXRzIFR5cGVTY3JpcHQgY291bnRlcnBhcnQuXG4gIC8vIEB0cy1pZ25vcmVcbiAgYWN0aXZpdHlFbGVtZW50TWFwUmVmOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIGN1cnJlbnQ6IFByb3BUeXBlcy5pbnN0YW5jZU9mKE1hcClcbiAgfSkuaXNSZXF1aXJlZCxcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nXG59O1xuXG50eXBlIEludGVybmFsVHJhbnNjcmlwdFNjcm9sbGFibGVQcm9wcyA9IHtcbiAgY2hpbGRyZW4/OiBSZWFjdE5vZGU7XG4gIG9uRm9jdXNGaWxsZXI6ICgpID0+IHZvaWQ7XG4gIHRlcm1pbmF0b3JSZWY6IE11dGFibGVSZWZPYmplY3Q8SFRNTERpdkVsZW1lbnQ+O1xufTtcblxuLy8gU2VwYXJhdGluZyBoaWdoLWZyZXF1ZW5jeSBob29rcyB0byBpbXByb3ZlIHBlcmZvcm1hbmNlLlxuY29uc3QgSW50ZXJuYWxUcmFuc2NyaXB0U2Nyb2xsYWJsZTogRkM8SW50ZXJuYWxUcmFuc2NyaXB0U2Nyb2xsYWJsZVByb3BzPiA9ICh7XG4gIGNoaWxkcmVuLFxuICBvbkZvY3VzRmlsbGVyLFxuICB0ZXJtaW5hdG9yUmVmXG59KSA9PiB7XG4gIGNvbnN0IFt7IGFjdGl2aXRpZXM6IGFjdGl2aXRpZXNTdHlsZVNldCB9XSA9IHVzZVN0eWxlU2V0KCk7XG4gIGNvbnN0IFthbmltYXRpbmdUb0VuZF06IFtib29sZWFuXSA9IHVzZUFuaW1hdGluZ1RvRW5kKCk7XG4gIGNvbnN0IFthdEVuZF06IFtib29sZWFuXSA9IHVzZUF0RW5kKCk7XG4gIGNvbnN0IFssIHVucmVhZEFjdGl2aXR5S2V5c10gPSB1c2VBY3Rpdml0eUtleXNCeVJlYWQoKTtcbiAgY29uc3QgW3N0aWNreV06IFtib29sZWFuXSA9IHVzZVN0aWNreSgpO1xuICBjb25zdCBbc3R5bGVPcHRpb25zXSA9IHVzZVN0eWxlT3B0aW9ucygpO1xuICBjb25zdCBmb2N1c0J5QWN0aXZpdHlLZXkgPSB1c2VGb2N1c0J5QWN0aXZpdHlLZXkoKTtcbiAgY29uc3QgbG9jYWxpemUgPSB1c2VMb2NhbGl6ZXIoKTtcbiAgY29uc3QgbWFya0FjdGl2aXR5S2V5QXNSZWFkID0gdXNlTWFya0FjdGl2aXR5S2V5QXNSZWFkKCk7XG4gIGNvbnN0IG1hcmtBbGxBc0Fja25vd2xlZGdlZCA9IHVzZU1hcmtBbGxBc0Fja25vd2xlZGdlZCgpO1xuICBjb25zdCBzY3JvbGxUb0VuZDogKG9wdGlvbnM/OiBTY3JvbGxUb09wdGlvbnMpID0+IHZvaWQgPSB1c2VTY3JvbGxUb0VuZCgpO1xuXG4gIGNvbnN0IHByZXZTdGlja3kgPSB1c2VQcmV2aW91cyhzdGlja3kpO1xuICBjb25zdCB0cmFuc2NyaXB0Um9sZURlc2NyaXB0aW9uID0gbG9jYWxpemUoJ1RSQU5TQ1JJUFRfQVJJQV9ST0xFX0FMVCcpO1xuXG4gIGNvbnN0IHN0aWNreUNoYW5nZWRUb1RydWUgPSBwcmV2U3RpY2t5ICE9PSBzdGlja3kgJiYgc3RpY2t5O1xuXG4gIC8vIEFja25vd2xlZGdlZCBtZWFucyBlaXRoZXI6XG4gIC8vIDEuIFRoZSB1c2VyIHNlbnQgYSBtZXNzYWdlXG4gIC8vICAgIC0gV2UgZG9uJ3QgbmVlZCBhIGNvbmRpdGlvbiBoZXJlLiBXaGVuIFdlYiBDaGF0IHNlbmRzIHRoZSB1c2VyJ3MgbWVzc2FnZSwgaXQgd2lsbCBzY3JvbGwgdG8gYm90dG9tLCBhbmQgaXQgd2lsbCB0cmlnZ2VyIGNvbmRpdGlvbiAyIGJlbG93LlxuICAvLyAyLiBUaGUgdXNlciBzY3JvbGwgdG8gdGhlIGJvdHRvbSBvZiB0aGUgdHJhbnNjcmlwdCwgZnJvbSBhIG5vbi1ib3R0b20gc2Nyb2xsIHBvc2l0aW9uXG4gIC8vICAgIC0gSWYgdGhlIHRyYW5zY3JpcHQgaXMgYWxyZWFkeSBhdCB0aGUgYm90dG9tLCB0aGUgdXNlciBuZWVkcyB0byBzY3JvbGwgdXAgYW5kIHRoZW4gZ28gYmFjayBkb3duXG4gIC8vICAgIC0gV2hhdCBoYXBwZW5zIGlmIHdlIGFyZSByZWxheGluZyBcInNjcm9sbGVkIGZyb20gYSBub24tYm90dG9tIHNjcm9sbCBwb3NpdGlvblwiOlxuICAvLyAgICAgIDEuIFRoZSBjb25kaXRpb24gd2lsbCBiZWNvbWUgc29sZWx5IFwiYXQgdGhlIGJvdHRvbSBvZiB0aGUgdHJhbnNjcmlwdFwiXG4gIC8vICAgICAgMi4gQXV0by1zY3JvbGwgd2lsbCBhbHdheXMgc2Nyb2xsIHRoZSB0cmFuc2NyaXB0IHRvIHRoZSBib3R0b21cbiAgLy8gICAgICAzLiBXZWIgQ2hhdCB3aWxsIGFsd2F5cyBhY2tub3dsZWRnZSBhbGwgYWN0aXZpdGllcyBhcyBpdCBpcyBhdCB0aGUgYm90dG9tXG4gIC8vICAgICAgNC4gQWNrbm93bGVkZ2UgZmxhZyBiZWNvbWUgdXNlbGVzc1xuICAvLyAgICAgIDUuIFRoZXJlZm9yZSwgZXZlbiB0aGUgZGV2ZWxvcGVyIHNldCBcInBhdXNlIGFmdGVyIDMgYWN0aXZpdGllc1wiLCBpZiBhY3Rpdml0aWVzIGFyZSBjb21pbmcgaW4gYXQgYSBzbG93IHBhY2UgKG5vdCBiYXRjaGVkIGluIGEgc2luZ2xlIHJlbmRlcilcbiAgLy8gICAgICAgICBXZWIgQ2hhdCB3aWxsIGtlZXAgc2Nyb2xsaW5nIGFuZCBub3Qgc25hcHBlZC9wYXVzZWRcblxuICAvLyBOb3RlOiBXaGVuIFdlYiBDaGF0IGlzIGxvYWRlZCwgdGhlcmUgYXJlIG5vIGFjdGl2aXRpZXMgYWNrbm93bGVkZ2VkLiBXZSBuZWVkIHRvIGFzc3VtZSBhbGwgYXJyaXZpbmcgYWN0aXZpdGllcyBhcmUgYWNrbm93bGVkZ2VkIHVudGlsIGVuZC11c2VyIHNlbmRzIHRoZWlyIGZpcnN0IGFjdGl2aXR5LlxuICAvLyAgICAgICBBY3Rpdml0aWVzIGxvYWRlZCBpbml0aWFsbHkgY291bGQgYmUgZnJvbSBjb252ZXJzYXRpb24gaGlzdG9yeS4gV2l0aG91dCBhc3N1bWluZyBhY2tub3dsZWRnZW1lbnQsIFdlYiBDaGF0IHdpbGwgbm90IHNjcm9sbCBpbml0aWFsbHkgKGFzIGV2ZXJ5dGhpbmcgaXMgbm90IGFja25vd2xlZGdlZCkuXG4gIC8vICAgICAgIEl0IHdvdWxkIGJlIGJldHRlciBpZiB0aGUgY2hhdCBhZGFwdGVyIHNob3VsZCBsZXQgV2ViIENoYXQga25vdyBpZiB0aGUgYWN0aXZpdHkgaXMgbG9hZGVkIGZyb20gaGlzdG9yeSBvciBub3QuXG5cbiAgLy8gVE9ETzogW1AyXSAjMzY3MCBNb3ZlIHRoZSBcImNvbnZlcnNhdGlvbiBoaXN0b3J5IGFja25vd2xlZGdlbWVudFwiIGxvZ2ljIG1lbnRpb25lZCBhYm92ZSB0byBwb2x5ZmlsbCBvZiBjaGF0IGFkYXB0ZXJzLlxuICAvLyAgICAgICAxLiBDaGF0IGFkYXB0ZXIgc2hvdWxkIHNlbmQgXCJhY2tub3dsZWRnZWRcIiBhcyBwYXJ0IG9mIFwiY2hhbm5lbERhdGFcIlxuICAvLyAgICAgICAyLiBJZiBcImFja25vd2xlZGdlZFwiIGlzIFwidW5kZWZpbmVkXCIsIHdlIHNldCBpdCB0bzpcbiAgLy8gICAgICAgICAgYS4gdHJ1ZSwgaWYgdGhlcmUgYXJlIG5vIGVncmVzcyBhY3Rpdml0aWVzIHlldFxuICAvLyAgICAgICAgICBiLiBPdGhlcndpc2UsIGZhbHNlXG5cbiAgdXNlTWVtbyhcbiAgICAoKSA9PlxuICAgICAgc3RpY2t5Q2hhbmdlZFRvVHJ1ZSAmJlxuICAgICAgLy8gVE9ETzogW1AyXSBCb3RoIGBtYXJrQWN0aXZpdHlLZXlBc1JlYWRgIGFuZCBgbWFya0FsbEFzQWNrbm93bGVkZ2VkYCBob29rIGFyZSBzZXR0ZXJzIG9mIHVzZVN0YXRlLlxuICAgICAgLy8gICAgICAgVGhpcyBtZWFucywgaW4gYSByZW5kZXIgbG9vcCwgd2Ugd2lsbCBiZSBjYWxsaW5nIHNldHRlciBhbmQgd2lsbCBjYXVzZSBhbm90aGVyIHJlLXJlbmRlci5cbiAgICAgIC8vICAgICAgIFRoaXMgaXMgbm90IHRyaXZpYWwgYnV0IHdlIHNob3VsZCB0aGluayBpZiB0aGVyZSBpcyBhIHdheSB0byBhdm9pZCB0aGlzLlxuICAgICAgbWFya0FsbEFzQWNrbm93bGVkZ2VkKCksXG4gICAgW21hcmtBbGxBc0Fja25vd2xlZGdlZCwgc3RpY2t5Q2hhbmdlZFRvVHJ1ZV1cbiAgKTtcblxuICBjb25zdCBbZmxhdHRlbmVkQWN0aXZpdHlUcmVlV2l0aFJlbmRlcmVyXSA9IHVzZUFjdGl2aXR5VHJlZVdpdGhSZW5kZXJlcih7IGZsYXQ6IHRydWUgfSk7XG4gIGNvbnN0IGdldEtleUJ5QWN0aXZpdHkgPSB1c2VHZXRLZXlCeUFjdGl2aXR5KCk7XG5cbiAgY29uc3QgcmVuZGVyaW5nQWN0aXZpdHlLZXlzOiBzdHJpbmdbXSA9IHVzZU1lbW88c3RyaW5nW10+KFxuICAgICgpID0+IGZsYXR0ZW5lZEFjdGl2aXR5VHJlZVdpdGhSZW5kZXJlci5tYXAoKHsgYWN0aXZpdHkgfSkgPT4gZ2V0S2V5QnlBY3Rpdml0eShhY3Rpdml0eSkpLFxuICAgIFtmbGF0dGVuZWRBY3Rpdml0eVRyZWVXaXRoUmVuZGVyZXIsIGdldEtleUJ5QWN0aXZpdHldXG4gICk7XG5cbiAgY29uc3QgcmVuZGVyaW5nQWN0aXZpdHlLZXlzUmVmID0gdXNlVmFsdWVSZWYocmVuZGVyaW5nQWN0aXZpdHlLZXlzKTtcblxuICAvLyBUbyBwcmV2ZW50IGZsYXNoeSBidXR0b24sIHdlIGFyZSBub3Qgd2FpdGluZyBmb3IgYW5vdGhlciByZW5kZXIgbG9vcCB0byB1cGRhdGUgdGhlIGBbcmVhZEFjdGl2aXR5S2V5cywgdW5yZWFkQWN0aXZpdHlLZXlzXWAgc3RhdGUuXG4gIC8vIEluc3RlYWQsIHdlIGFyZSBidWlsZGluZyB0aGUgbmV4dCBvbmUgaW4gdGhpcyBgdXNlTWVtb2AgY2FsbC5cbiAgY29uc3QgbmV4dFVucmVhZEFjdGl2aXR5S2V5cyA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIC8vIFRoaXMgY29kZSBuZWVkIHRvIGJlIGNhcmVmdWwgcmV2aWV3ZWQgYXMgaXQgd2lsbCBjYXVzZSBhbm90aGVyIHJlbmRlci4gVGhlIGNvZGUgc2hvdWxkIGJlIGNvbnZlcmdpbmcuXG4gICAgLy8gQWZ0ZXIgd2UgY2FsbCBgbWFya0FjdGl2aXR5S2V5QXNSZWFkYCwgZXZlcnl0aGluZyB3aWxsIGJlIHJlYWQgYW5kIG5vdGhpbmcgd2lsbCBiZSB1bnJlYWQuXG4gICAgLy8gVGhhdCBtZWFucywgaW4gbmV4dCByZW5kZXIsIGB1bnJlYWRBY3Rpdml0eUtleXNgIHdpbGwgYmUgZW1wdGllZCBhbmQgdGhlIGBtYXJrQWN0aXZpdHlLZXlBc1JlYWRgIHdpbGwgbm90IGdldCBjYWxsZWQgYWdhaW4uXG4gICAgaWYgKHN0aWNreSAmJiB1bnJlYWRBY3Rpdml0eUtleXMubGVuZ3RoKSB7XG4gICAgICBtYXJrQWN0aXZpdHlLZXlBc1JlYWQodW5yZWFkQWN0aXZpdHlLZXlzW3VucmVhZEFjdGl2aXR5S2V5cy5sZW5ndGggLSAxXSk7XG5cbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICByZXR1cm4gdW5yZWFkQWN0aXZpdHlLZXlzO1xuICB9LCBbbWFya0FjdGl2aXR5S2V5QXNSZWFkLCBzdGlja3ksIHVucmVhZEFjdGl2aXR5S2V5c10pO1xuXG4gIGNvbnN0IG5leHRVbnJlYWRBY3Rpdml0eUtleXNSZWYgPSB1c2VWYWx1ZVJlZihuZXh0VW5yZWFkQWN0aXZpdHlLZXlzKTtcblxuICAvLyBJZiB3ZSBhcmUgcmVuZGVyaW5nIGFueXRoaW5nIHRoYXQgaXMgdW5yZWFkLCB3ZSBzaG91bGQgc2hvdyB0aGUgXCJOZXcgbWVzc2FnZXNcIiBidXR0b24uXG4gIC8vIE5vdCBldmVyeXRoaW5nIGluIHRoZSBgdW5yZWFkQWN0aXZpdHlLZXlzYCBhcmUgcmVuZGVyZWQsIHNheSwgYm90IHR5cGluZyBpbmRpY2F0b3IuXG4gIC8vIFdlIHNob3VsZCBub3Qgc2hvdyB0aGUgXCJOZXcgbWVzc2FnZXNcIiBidXR0b24gZm9yIGJvdCB0eXBpbmcgaW5kaWNhdG9yIGFzIGl0IHdpbGwgY29uZnVzZSB0aGUgdXNlci5cbiAgY29uc3QgdW5yZWFkID0gdXNlTWVtbyhcbiAgICAoKSA9PiBuZXh0VW5yZWFkQWN0aXZpdHlLZXlzLnNvbWUoa2V5ID0+IHJlbmRlcmluZ0FjdGl2aXR5S2V5cy5pbmNsdWRlcyhrZXkpKSxcbiAgICBbcmVuZGVyaW5nQWN0aXZpdHlLZXlzLCBuZXh0VW5yZWFkQWN0aXZpdHlLZXlzXVxuICApO1xuXG4gIGNvbnN0IGhhbmRsZVNjcm9sbFRvRW5kQnV0dG9uQ2xpY2sgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgc2Nyb2xsVG9FbmQoeyBiZWhhdmlvcjogJ3Ntb290aCcgfSk7XG5cbiAgICBjb25zdCB7IGN1cnJlbnQ6IHJlbmRlcmluZ0FjdGl2aXR5S2V5cyB9ID0gcmVuZGVyaW5nQWN0aXZpdHlLZXlzUmVmO1xuXG4gICAgLy8gQWZ0ZXIgdGhlIFwiTmV3IG1lc3NhZ2VcIiBidXR0b24gaXMgY2xpY2tlZCwgZm9jdXMgb24gdGhlIGZpcnN0IHVucmVhZCBhY3Rpdml0eSB3aGljaCB3aWxsIGJlIHJlbmRlcmVkLlxuICAgIGNvbnN0IGZpcnN0VW5yZWFkUmVuZGVyaW5nQWN0aXZpdHlLZXkgPSBuZXh0VW5yZWFkQWN0aXZpdHlLZXlzUmVmLmN1cnJlbnQuZmluZChrZXkgPT5cbiAgICAgIHJlbmRlcmluZ0FjdGl2aXR5S2V5cy5pbmNsdWRlcyhrZXkpXG4gICAgKTtcblxuICAgIGlmIChmaXJzdFVucmVhZFJlbmRlcmluZ0FjdGl2aXR5S2V5KSB7XG4gICAgICBmb2N1c0J5QWN0aXZpdHlLZXkoZmlyc3RVbnJlYWRSZW5kZXJpbmdBY3Rpdml0eUtleSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIElmIG5vIHVucmVhZCBhY3Rpdml0eSwgc2VuZCB0aGUgZm9jdXMgdG8gdGhlIHRlcm1pbmF0b3IgYmxvY2suXG4gICAgICB0ZXJtaW5hdG9yUmVmLmN1cnJlbnQ/LmZvY3VzKCk7XG4gICAgfVxuICB9LCBbZm9jdXNCeUFjdGl2aXR5S2V5LCBuZXh0VW5yZWFkQWN0aXZpdHlLZXlzUmVmLCByZW5kZXJpbmdBY3Rpdml0eUtleXNSZWYsIHNjcm9sbFRvRW5kLCB0ZXJtaW5hdG9yUmVmXSk7XG5cbiAgY29uc3QgcmVuZGVyU2Nyb2xsVG9FbmRCdXR0b24gPSB1c2VDcmVhdGVTY3JvbGxUb0VuZEJ1dHRvblJlbmRlcmVyKCkoe1xuICAgIGF0RW5kOiBhbmltYXRpbmdUb0VuZCB8fCBhdEVuZCB8fCBzdGlja3ksXG4gICAgc3R5bGVPcHRpb25zLFxuICAgIHVucmVhZFxuICB9KTtcblxuICBjb25zdCBoYXNBbnlDaGlsZCA9ICEhUmVhY3QuQ2hpbGRyZW4uY291bnQoY2hpbGRyZW4pO1xuXG4gIHJldHVybiAoXG4gICAgPFJlYWN0LkZyYWdtZW50PlxuICAgICAge3JlbmRlclNjcm9sbFRvRW5kQnV0dG9uICYmIHJlbmRlclNjcm9sbFRvRW5kQnV0dG9uKHsgb25DbGljazogaGFuZGxlU2Nyb2xsVG9FbmRCdXR0b25DbGljayB9KX1cbiAgICAgIHtoYXNBbnlDaGlsZCAmJiA8Rm9jdXNSZWRpcmVjdG9yIHJlZGlyZWN0UmVmPXt0ZXJtaW5hdG9yUmVmfSAvPn1cbiAgICAgIDxSZWFjdFNjcm9sbFRvQm90dG9tUGFuZWwgY2xhc3NOYW1lPVwid2ViY2hhdF9fYmFzaWMtdHJhbnNjcmlwdF9fc2Nyb2xsYWJsZVwiPlxuICAgICAgICA8ZGl2IGFyaWEtaGlkZGVuPXt0cnVlfSBjbGFzc05hbWU9XCJ3ZWJjaGF0X19iYXNpYy10cmFuc2NyaXB0X19maWxsZXJcIiBvbkZvY3VzPXtvbkZvY3VzRmlsbGVyfSAvPlxuICAgICAgICB7aGFzQW55Q2hpbGQgJiYgKFxuICAgICAgICAgIDxzZWN0aW9uXG4gICAgICAgICAgICBhcmlhLXJvbGVkZXNjcmlwdGlvbj17dHJhbnNjcmlwdFJvbGVEZXNjcmlwdGlvbn1cbiAgICAgICAgICAgIGNsYXNzTmFtZT17Y2xhc3NOYW1lcyhhY3Rpdml0aWVzU3R5bGVTZXQgKyAnJywgJ3dlYmNoYXRfX2Jhc2ljLXRyYW5zY3JpcHRfX3RyYW5zY3JpcHQnKX1cbiAgICAgICAgICAgIHJvbGU9XCJmZWVkXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICB7Y2hpbGRyZW59XG4gICAgICAgICAgPC9zZWN0aW9uPlxuICAgICAgICApfVxuICAgICAgICA8QmFzaWNUeXBpbmdJbmRpY2F0b3IgLz5cbiAgICAgIDwvUmVhY3RTY3JvbGxUb0JvdHRvbVBhbmVsPlxuICAgIDwvUmVhY3QuRnJhZ21lbnQ+XG4gICk7XG59O1xuXG5JbnRlcm5hbFRyYW5zY3JpcHRTY3JvbGxhYmxlLnByb3BUeXBlcyA9IHtcbiAgY2hpbGRyZW46IFByb3BUeXBlcy5hbnkuaXNSZXF1aXJlZCxcbiAgb25Gb2N1c0ZpbGxlcjogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgdGVybWluYXRvclJlZjogUHJvcFR5cGVzLmFueS5pc1JlcXVpcmVkXG59O1xuXG50eXBlIFNjcm9sbGVyID0gKHsgb2Zmc2V0SGVpZ2h0LCBzY3JvbGxUb3AgfTogeyBvZmZzZXRIZWlnaHQ6IG51bWJlcjsgc2Nyb2xsVG9wOiBudW1iZXIgfSkgPT4gbnVtYmVyO1xuXG4vLyBcInNjcm9sbGVyXCIgaXMgdGhlIGF1dG8tc2Nyb2xsIGxpbWl0ZXIsIGEuay5hLiBhdXRvIHNjcm9sbCBzbmFwLlxuY29uc3QgdXNlU2Nyb2xsZXIgPSAoYWN0aXZpdHlFbGVtZW50TWFwUmVmOiBNdXRhYmxlUmVmT2JqZWN0PEFjdGl2aXR5RWxlbWVudE1hcD4pOiBTY3JvbGxlciA9PiB7XG4gIGNvbnN0IFthY3Rpdml0eUtleXNdID0gdXNlQWN0aXZpdHlLZXlzKCk7XG4gIGNvbnN0IFtsYXN0QWNrbm93bGVkZ2VkQWN0aXZpdHlLZXldID0gdXNlTGFzdEFja25vd2xlZGdlZEFjdGl2aXR5S2V5KCk7XG4gIGNvbnN0IFtzdHlsZU9wdGlvbnNdID0gdXNlU3R5bGVPcHRpb25zKCk7XG5cbiAgY29uc3QgYWN0aXZpdHlLZXlzUmVmID0gdXNlVmFsdWVSZWYoYWN0aXZpdHlLZXlzKTtcbiAgY29uc3QgbGFzdEFja25vd2xlZGdlZEFjdGl2aXR5S2V5UmVmID0gdXNlVmFsdWVSZWYobGFzdEFja25vd2xlZGdlZEFjdGl2aXR5S2V5KTtcbiAgY29uc3Qgc3R5bGVPcHRpb25zUmVmID0gdXNlVmFsdWVSZWYoc3R5bGVPcHRpb25zKTtcblxuICByZXR1cm4gdXNlQ2FsbGJhY2soXG4gICAgKHsgb2Zmc2V0SGVpZ2h0LCBzY3JvbGxUb3AgfSkgPT4ge1xuICAgICAgY29uc3Qge1xuICAgICAgICBjdXJyZW50OiB7XG4gICAgICAgICAgYXV0b1Njcm9sbFNuYXBPbkFjdGl2aXR5LFxuICAgICAgICAgIGF1dG9TY3JvbGxTbmFwT25BY3Rpdml0eU9mZnNldCxcbiAgICAgICAgICBhdXRvU2Nyb2xsU25hcE9uUGFnZSxcbiAgICAgICAgICBhdXRvU2Nyb2xsU25hcE9uUGFnZU9mZnNldFxuICAgICAgICB9XG4gICAgICB9ID0gc3R5bGVPcHRpb25zUmVmO1xuXG4gICAgICBjb25zdCBwYXRjaGVkQXV0b1Njcm9sbFNuYXBPbkFjdGl2aXR5ID1cbiAgICAgICAgdHlwZW9mIGF1dG9TY3JvbGxTbmFwT25BY3Rpdml0eSA9PT0gJ251bWJlcidcbiAgICAgICAgICA/IE1hdGgubWF4KDAsIGF1dG9TY3JvbGxTbmFwT25BY3Rpdml0eSlcbiAgICAgICAgICA6IGF1dG9TY3JvbGxTbmFwT25BY3Rpdml0eVxuICAgICAgICAgICAgPyAxXG4gICAgICAgICAgICA6IDA7XG4gICAgICBjb25zdCBwYXRjaGVkQXV0b1Njcm9sbFNuYXBPblBhZ2UgPVxuICAgICAgICB0eXBlb2YgYXV0b1Njcm9sbFNuYXBPblBhZ2UgPT09ICdudW1iZXInXG4gICAgICAgICAgPyBNYXRoLm1heCgwLCBNYXRoLm1pbigxLCBhdXRvU2Nyb2xsU25hcE9uUGFnZSkpXG4gICAgICAgICAgOiBhdXRvU2Nyb2xsU25hcE9uUGFnZVxuICAgICAgICAgICAgPyAxXG4gICAgICAgICAgICA6IDA7XG4gICAgICBjb25zdCBwYXRjaGVkQXV0b1Njcm9sbFNuYXBPbkFjdGl2aXR5T2Zmc2V0ID1cbiAgICAgICAgdHlwZW9mIGF1dG9TY3JvbGxTbmFwT25BY3Rpdml0eU9mZnNldCA9PT0gJ251bWJlcicgPyBhdXRvU2Nyb2xsU25hcE9uQWN0aXZpdHlPZmZzZXQgOiAwO1xuICAgICAgY29uc3QgcGF0Y2hlZEF1dG9TY3JvbGxTbmFwT25QYWdlT2Zmc2V0ID1cbiAgICAgICAgdHlwZW9mIGF1dG9TY3JvbGxTbmFwT25QYWdlT2Zmc2V0ID09PSAnbnVtYmVyJyA/IGF1dG9TY3JvbGxTbmFwT25QYWdlT2Zmc2V0IDogMDtcblxuICAgICAgaWYgKHBhdGNoZWRBdXRvU2Nyb2xsU25hcE9uQWN0aXZpdHkgfHwgcGF0Y2hlZEF1dG9TY3JvbGxTbmFwT25QYWdlKSB7XG4gICAgICAgIGNvbnN0IHsgY3VycmVudDogYWN0aXZpdHlFbGVtZW50TWFwIH0gPSBhY3Rpdml0eUVsZW1lbnRNYXBSZWY7XG4gICAgICAgIGNvbnN0IHsgY3VycmVudDogYWN0aXZpdHlLZXlzIH0gPSBhY3Rpdml0eUtleXNSZWY7XG4gICAgICAgIGNvbnN0IHsgY3VycmVudDogbGFzdEFja25vd2xlZGdlZEFjdGl2aXR5S2V5IH0gPSBsYXN0QWNrbm93bGVkZ2VkQWN0aXZpdHlLZXlSZWY7XG4gICAgICAgIGNvbnN0IHZhbHVlczogbnVtYmVyW10gPSBbXTtcblxuICAgICAgICBjb25zdCBsYXN0QWNrbm93bGVkZ2VkQWN0aXZpdHlLZXlJbmRleCA9IGFjdGl2aXR5S2V5cy5pbmRleE9mKGxhc3RBY2tub3dsZWRnZWRBY3Rpdml0eUtleSk7XG5cbiAgICAgICAgaWYgKH5sYXN0QWNrbm93bGVkZ2VkQWN0aXZpdHlLZXlJbmRleCkge1xuICAgICAgICAgIC8vIFRoZSBhY3Rpdml0eSB0aGF0IHdlIGFja25vd2xlZGdlZCBjb3VsZCBiZSBub3QgcmVuZGVyZWQsIHN1Y2ggYXMgcG9zdCBiYWNrIGFjdGl2aXR5LlxuICAgICAgICAgIC8vIFdoZW4gY2FsY3VsYXRpbmcgc2Nyb2xsIHNuYXAsIHdlIGNhbiBvbmx5IGJhc2Ugb24gdGhlIGZpcnN0IHVuYWNrbm93bGVkZ2VkLWFuZC1yZW5kZXJpbmcgYWN0aXZpdHkuXG4gICAgICAgICAgY29uc3QgcmVuZGVyaW5nQWN0aXZpdHlLZXlzID0gQXJyYXkuZnJvbShhY3Rpdml0eUVsZW1lbnRNYXAua2V5cygpKTtcbiAgICAgICAgICBsZXQgZmlyc3RVbmFja25vd2xlZGdlZEFjdGl2aXR5RWxlbWVudEluZGV4ID0gLTE7XG5cbiAgICAgICAgICBmb3IgKGNvbnN0IGFja25vd2xlZGdlZEFjdGl2aXR5S2V5IG9mIGFjdGl2aXR5S2V5cy5zbGljZSgwLCBsYXN0QWNrbm93bGVkZ2VkQWN0aXZpdHlLZXlJbmRleCArIDEpLnJldmVyc2UoKSkge1xuICAgICAgICAgICAgY29uc3QgaW5kZXggPSByZW5kZXJpbmdBY3Rpdml0eUtleXMuaW5kZXhPZihhY2tub3dsZWRnZWRBY3Rpdml0eUtleSk7XG5cbiAgICAgICAgICAgIGlmICh+aW5kZXgpIHtcbiAgICAgICAgICAgICAgaWYgKGluZGV4ICE9PSByZW5kZXJpbmdBY3Rpdml0eUtleXMubGVuZ3RoIC0gMSkge1xuICAgICAgICAgICAgICAgIGZpcnN0VW5hY2tub3dsZWRnZWRBY3Rpdml0eUVsZW1lbnRJbmRleCA9IGluZGV4ICsgMTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICh+Zmlyc3RVbmFja25vd2xlZGdlZEFjdGl2aXR5RWxlbWVudEluZGV4KSB7XG4gICAgICAgICAgICBjb25zdCBhY3Rpdml0eUVsZW1lbnRzID0gQXJyYXkuZnJvbShhY3Rpdml0eUVsZW1lbnRNYXAudmFsdWVzKCkpO1xuXG4gICAgICAgICAgICBpZiAocGF0Y2hlZEF1dG9TY3JvbGxTbmFwT25BY3Rpdml0eSkge1xuICAgICAgICAgICAgICAvLyBHZXRzIHRoZSBhY3Rpdml0eSBlbGVtZW50IHdoaWNoIHdlIHNob3VsZCBzbmFwIHRvLlxuICAgICAgICAgICAgICBjb25zdCBudGhVbmFja25vd2xlZGdlZEFjdGl2aXR5RWxlbWVudCA9XG4gICAgICAgICAgICAgICAgYWN0aXZpdHlFbGVtZW50c1tmaXJzdFVuYWNrbm93bGVkZ2VkQWN0aXZpdHlFbGVtZW50SW5kZXggKyBwYXRjaGVkQXV0b1Njcm9sbFNuYXBPbkFjdGl2aXR5IC0gMV07XG5cbiAgICAgICAgICAgICAgaWYgKG50aFVuYWNrbm93bGVkZ2VkQWN0aXZpdHlFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbnRoVW5hY2tub3dsZWRnZWRBY3Rpdml0eUJvdW5kaW5nQm94RWxlbWVudCA9IG50aFVuYWNrbm93bGVkZ2VkQWN0aXZpdHlFbGVtZW50Py5xdWVyeVNlbGVjdG9yKFxuICAgICAgICAgICAgICAgICAgJy53ZWJjaGF0X19iYXNpYy10cmFuc2NyaXB0X19hY3Rpdml0eS1hY3RpdmUtZGVzY2VuZGFudCdcbiAgICAgICAgICAgICAgICApIGFzIEhUTUxFbGVtZW50O1xuICAgICAgICAgICAgICAgIGNvbnN0IG50aFVuYWNrbm93bGVkZ2VkQWN0aXZpdHlPZmZzZXRUb3AgPVxuICAgICAgICAgICAgICAgICAgbnRoVW5hY2tub3dsZWRnZWRBY3Rpdml0eUVsZW1lbnQub2Zmc2V0VG9wICsgbnRoVW5hY2tub3dsZWRnZWRBY3Rpdml0eUJvdW5kaW5nQm94RWxlbWVudC5vZmZzZXRUb3A7XG5cbiAgICAgICAgICAgICAgICB2YWx1ZXMucHVzaChcbiAgICAgICAgICAgICAgICAgIG50aFVuYWNrbm93bGVkZ2VkQWN0aXZpdHlPZmZzZXRUb3AgK1xuICAgICAgICAgICAgICAgICAgICBudGhVbmFja25vd2xlZGdlZEFjdGl2aXR5Qm91bmRpbmdCb3hFbGVtZW50Lm9mZnNldEhlaWdodCAtXG4gICAgICAgICAgICAgICAgICAgIG9mZnNldEhlaWdodCAtXG4gICAgICAgICAgICAgICAgICAgIHNjcm9sbFRvcCArXG4gICAgICAgICAgICAgICAgICAgIHBhdGNoZWRBdXRvU2Nyb2xsU25hcE9uQWN0aXZpdHlPZmZzZXRcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChwYXRjaGVkQXV0b1Njcm9sbFNuYXBPblBhZ2UpIHtcbiAgICAgICAgICAgICAgY29uc3QgZmlyc3RVbmFja25vd2xlZGdlZEFjdGl2aXR5RWxlbWVudCA9IGFjdGl2aXR5RWxlbWVudHNbK2ZpcnN0VW5hY2tub3dsZWRnZWRBY3Rpdml0eUVsZW1lbnRJbmRleF07XG4gICAgICAgICAgICAgIGNvbnN0IGZpcnN0VW5hY2tub3dsZWRnZWRBY3Rpdml0eUJvdW5kaW5nQm94RWxlbWVudCA9IGZpcnN0VW5hY2tub3dsZWRnZWRBY3Rpdml0eUVsZW1lbnQucXVlcnlTZWxlY3RvcihcbiAgICAgICAgICAgICAgICAnLndlYmNoYXRfX2Jhc2ljLXRyYW5zY3JpcHRfX2FjdGl2aXR5LWFjdGl2ZS1kZXNjZW5kYW50J1xuICAgICAgICAgICAgICApIGFzIEhUTUxFbGVtZW50O1xuICAgICAgICAgICAgICBjb25zdCBmaXJzdFVuYWNrbm93bGVkZ2VkQWN0aXZpdHlPZmZzZXRUb3AgPVxuICAgICAgICAgICAgICAgIGZpcnN0VW5hY2tub3dsZWRnZWRBY3Rpdml0eUVsZW1lbnQub2Zmc2V0VG9wICsgZmlyc3RVbmFja25vd2xlZGdlZEFjdGl2aXR5Qm91bmRpbmdCb3hFbGVtZW50Lm9mZnNldFRvcDtcblxuICAgICAgICAgICAgICB2YWx1ZXMucHVzaChcbiAgICAgICAgICAgICAgICBmaXJzdFVuYWNrbm93bGVkZ2VkQWN0aXZpdHlPZmZzZXRUb3AgLVxuICAgICAgICAgICAgICAgICAgc2Nyb2xsVG9wIC1cbiAgICAgICAgICAgICAgICAgIG9mZnNldEhlaWdodCAqICgxIC0gcGF0Y2hlZEF1dG9TY3JvbGxTbmFwT25QYWdlKSArXG4gICAgICAgICAgICAgICAgICBwYXRjaGVkQXV0b1Njcm9sbFNuYXBPblBhZ2VPZmZzZXRcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gTWF0aC5taW4oLi4udmFsdWVzKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIEluZmluaXR5O1xuICAgIH0sXG4gICAgW2FjdGl2aXR5RWxlbWVudE1hcFJlZiwgYWN0aXZpdHlLZXlzUmVmLCBsYXN0QWNrbm93bGVkZ2VkQWN0aXZpdHlLZXlSZWYsIHN0eWxlT3B0aW9uc1JlZl1cbiAgKTtcbn07XG5cbnR5cGUgQmFzaWNUcmFuc2NyaXB0UHJvcHMgPSB7XG4gIGNsYXNzTmFtZT86IHN0cmluZztcbn07XG5cbmNvbnN0IEJhc2ljVHJhbnNjcmlwdDogRkM8QmFzaWNUcmFuc2NyaXB0UHJvcHM+ID0gKHsgY2xhc3NOYW1lIH0pID0+IHtcbiAgY29uc3QgYWN0aXZpdHlFbGVtZW50TWFwUmVmID0gdXNlUmVmPEFjdGl2aXR5RWxlbWVudE1hcD4obmV3IE1hcCgpKTtcbiAgY29uc3QgY29udGFpbmVyUmVmID0gdXNlUmVmPEhUTUxEaXZFbGVtZW50PigpO1xuXG4gIGNvbnN0IHNjcm9sbGVyID0gdXNlU2Nyb2xsZXIoYWN0aXZpdHlFbGVtZW50TWFwUmVmKTtcblxuICByZXR1cm4gKFxuICAgIDxUcmFuc2NyaXB0Rm9jdXNDb21wb3NlciBjb250YWluZXJSZWY9e2NvbnRhaW5lclJlZn0+XG4gICAgICA8UmVhY3RTY3JvbGxUb0JvdHRvbUNvbXBvc2VyIHNjcm9sbGVyPXtzY3JvbGxlcn0+XG4gICAgICAgIDxLZXlib2FyZEhlbHAgLz5cbiAgICAgICAgPEludGVybmFsVHJhbnNjcmlwdCBhY3Rpdml0eUVsZW1lbnRNYXBSZWY9e2FjdGl2aXR5RWxlbWVudE1hcFJlZn0gY2xhc3NOYW1lPXtjbGFzc05hbWV9IHJlZj17Y29udGFpbmVyUmVmfSAvPlxuICAgICAgPC9SZWFjdFNjcm9sbFRvQm90dG9tQ29tcG9zZXI+XG4gICAgPC9UcmFuc2NyaXB0Rm9jdXNDb21wb3Nlcj5cbiAgKTtcbn07XG5cbkJhc2ljVHJhbnNjcmlwdC5kZWZhdWx0UHJvcHMgPSB7XG4gIGNsYXNzTmFtZTogJydcbn07XG5cbkJhc2ljVHJhbnNjcmlwdC5wcm9wVHlwZXMgPSB7XG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZ1xufTtcblxuZXhwb3J0IGRlZmF1bHQgbWVtbyhCYXNpY1RyYW5zY3JpcHQpO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQUEsSUFBQUEsdUJBQUEsR0FBQUMsT0FBQTtBQUNBLElBQUFDLG9CQUFBLEdBQUFELE9BQUE7QUFVQSxJQUFBRSxXQUFBLEdBQUFDLHNCQUFBLENBQUFILE9BQUE7QUFDQSxJQUFBSSxVQUFBLEdBQUFELHNCQUFBLENBQUFILE9BQUE7QUFDQSxJQUFBSyxNQUFBLEdBQUFDLHVCQUFBLENBQUFOLE9BQUE7QUFNQSxJQUFBTyxjQUFBLEdBQUFQLE9BQUE7QUFDQSxJQUFBUSxxQkFBQSxHQUFBTCxzQkFBQSxDQUFBSCxPQUFBO0FBQ0EsSUFBQVMsZ0JBQUEsR0FBQU4sc0JBQUEsQ0FBQUgsT0FBQTtBQUNBLElBQUFVLGNBQUEsR0FBQVAsc0JBQUEsQ0FBQUgsT0FBQTtBQUNBLElBQUFXLGlCQUFBLEdBQUFSLHNCQUFBLENBQUFILE9BQUE7QUFDQSxJQUFBWSxhQUFBLEdBQUFULHNCQUFBLENBQUFILE9BQUE7QUFDQSxJQUFBYSxxQkFBQSxHQUFBVixzQkFBQSxDQUFBSCxPQUFBO0FBRUEsSUFBQWMsaUJBQUEsR0FBQVgsc0JBQUEsQ0FBQUgsT0FBQTtBQUNBLElBQUFlLHdCQUFBLEdBQUFaLHNCQUFBLENBQUFILE9BQUE7QUFDQSxJQUFBZ0Isc0JBQUEsR0FBQWIsc0JBQUEsQ0FBQUgsT0FBQTtBQUNBLElBQUFpQiw0QkFBQSxHQUFBZCxzQkFBQSxDQUFBSCxPQUFBO0FBQ0EsSUFB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