botframework-webchat-component 4.18.2 → 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.
- package/LICENSE +21 -0
- package/boot/deprecated/component.js +7 -0
- package/boot/deprecated/component.mjs +5 -0
- package/boot/deprecated/decorator.js +7 -0
- package/boot/deprecated/decorator.mjs +5 -0
- package/boot/deprecated/hook.js +7 -0
- package/boot/deprecated/hook.mjs +5 -0
- package/boot/deprecated/internal.js +7 -0
- package/boot/deprecated/internal.mjs +5 -0
- package/component.js +3 -0
- package/decorator.js +3 -0
- package/dist/TextBox-BEU2rUID.d.mts +46 -0
- package/dist/TextBox-BEU2rUID.d.ts +46 -0
- package/dist/_dtsroll-chunks/BlpMO3PT-empty-object.d.ts +34 -0
- package/dist/_dtsroll-chunks/Cha1SOtx-botframework-webchat-styles.react.d.ts +38 -0
- package/dist/_dtsroll-chunks/DP9nda2m-botframework-webchat-react-hooks.d.ts +19 -0
- package/dist/botframework-webchat-component.component.css +2 -0
- package/dist/botframework-webchat-component.component.css.map +1 -0
- package/dist/botframework-webchat-component.component.d.mts +9 -0
- package/dist/botframework-webchat-component.component.d.ts +9 -0
- package/dist/botframework-webchat-component.component.js +2 -0
- package/dist/botframework-webchat-component.component.js.map +1 -0
- package/dist/botframework-webchat-component.component.mjs +2 -0
- package/dist/botframework-webchat-component.component.mjs.map +1 -0
- package/dist/botframework-webchat-component.css +2 -0
- package/dist/botframework-webchat-component.css.map +1 -0
- package/dist/botframework-webchat-component.d.mts +64 -2312
- package/dist/botframework-webchat-component.d.ts +90 -0
- package/dist/botframework-webchat-component.decorator.css +2 -0
- package/dist/botframework-webchat-component.decorator.css.map +1 -0
- package/dist/botframework-webchat-component.decorator.d.mts +28 -0
- package/dist/botframework-webchat-component.decorator.d.ts +28 -0
- package/dist/botframework-webchat-component.decorator.js +2 -0
- package/dist/botframework-webchat-component.decorator.js.map +1 -0
- package/dist/botframework-webchat-component.decorator.mjs +2 -0
- package/dist/botframework-webchat-component.decorator.mjs.map +1 -0
- package/dist/botframework-webchat-component.hook.css +2 -0
- package/dist/botframework-webchat-component.hook.css.map +1 -0
- package/dist/botframework-webchat-component.hook.d.mts +8 -0
- package/dist/botframework-webchat-component.hook.d.ts +8 -0
- package/dist/botframework-webchat-component.hook.js +2 -0
- package/dist/botframework-webchat-component.hook.js.map +1 -0
- package/dist/botframework-webchat-component.hook.mjs +2 -0
- package/dist/botframework-webchat-component.hook.mjs.map +1 -0
- package/dist/botframework-webchat-component.internal.css +2 -0
- package/dist/botframework-webchat-component.internal.css.map +1 -0
- package/dist/botframework-webchat-component.internal.d.mts +68 -3
- package/dist/botframework-webchat-component.internal.d.ts +70 -0
- package/dist/botframework-webchat-component.internal.js +2 -0
- package/dist/botframework-webchat-component.internal.js.map +1 -0
- package/dist/botframework-webchat-component.internal.mjs +1 -2
- package/dist/botframework-webchat-component.js +2 -0
- package/dist/botframework-webchat-component.js.map +1 -0
- package/dist/botframework-webchat-component.mjs +1 -11
- package/dist/botframework-webchat-component.mjs.map +1 -1
- package/dist/chunk-2R7BJ63Z.js +2 -0
- package/dist/chunk-2R7BJ63Z.js.map +1 -0
- package/dist/chunk-A4NDFSZM.mjs +77 -0
- package/dist/chunk-A4NDFSZM.mjs.map +1 -0
- package/dist/chunk-CNTMOACS.mjs +2 -0
- package/dist/chunk-CNTMOACS.mjs.map +1 -0
- package/dist/chunk-GTOP3WPD.mjs +2 -0
- package/dist/chunk-GTOP3WPD.mjs.map +1 -0
- package/dist/chunk-H5YR7OLF.js +2 -0
- package/dist/chunk-H5YR7OLF.js.map +1 -0
- package/dist/chunk-I6DJ35K3.mjs +2 -0
- package/dist/chunk-I6DJ35K3.mjs.map +1 -0
- package/dist/chunk-I6EXXZUN.js +2 -0
- package/dist/chunk-I6EXXZUN.js.map +1 -0
- package/dist/chunk-LVVCSDZ4.mjs +2 -0
- package/dist/chunk-LVVCSDZ4.mjs.map +1 -0
- package/dist/chunk-MOJMHOVH.js +2 -0
- package/dist/chunk-MOJMHOVH.js.map +1 -0
- package/dist/chunk-TMUNLKZW.js +2 -0
- package/dist/chunk-TMUNLKZW.js.map +1 -0
- package/dist/chunk-TYPS3H4I.mjs +2 -0
- package/dist/chunk-TYPS3H4I.mjs.map +1 -0
- package/dist/chunk-U6OWCHTQ.js +2 -0
- package/dist/chunk-U6OWCHTQ.js.map +1 -0
- package/dist/chunk-UKBRB4EA.mjs +2 -0
- package/dist/chunk-UKBRB4EA.mjs.map +1 -0
- package/dist/chunk-VDF6GQAL.js +77 -0
- package/dist/chunk-VDF6GQAL.js.map +1 -0
- package/dist/component-BtSxgJS5.d.mts +539 -0
- package/dist/component-Fyy8iCRE.d.ts +539 -0
- package/dist/hook-B7KuomGm.d.mts +2259 -0
- package/dist/hook-o9AgRedV.d.ts +2259 -0
- package/dist/metafile-cjs.json +1 -0
- package/dist/metafile-esm.json +1 -1
- package/hook.js +3 -0
- package/internal.js +1 -1
- package/package.json +146 -81
- package/src/Activity/AttachmentRow.tsx +56 -0
- package/src/Activity/Avatar.tsx +20 -23
- package/src/Activity/Bubble.module.css +131 -0
- package/src/Activity/Bubble.tsx +45 -70
- package/src/Activity/CarouselFilmStrip.js +31 -112
- package/src/Activity/CarouselFilmStrip.module.css +155 -0
- package/src/Activity/CarouselFilmStripAttachment.js +14 -15
- package/src/Activity/CarouselFilmStripAttachment.module.css +38 -0
- package/src/Activity/CarouselLayout.js +16 -17
- package/src/Activity/CarouselLayout.module.css +30 -0
- package/src/Activity/CodeBlockContent.module.css +40 -0
- package/src/Activity/CodeBlockContent.tsx +42 -0
- package/src/Activity/CollapsibleContent.module.css +43 -0
- package/src/Activity/CollapsibleContent.tsx +68 -0
- package/src/Activity/SayAlt.module.css +4 -0
- package/src/Activity/SayAlt.tsx +25 -0
- package/src/Activity/Speak.tsx +84 -42
- package/src/Activity/StackedLayout.module.css +233 -0
- package/src/Activity/StackedLayout.tsx +265 -198
- package/src/Activity/StackedLayoutMain.tsx +36 -0
- package/src/Activity/StackedLayoutMessageStatus.tsx +57 -0
- package/src/Activity/StackedLayoutRoot.tsx +71 -0
- package/src/Activity/StackedLayoutStatus.tsx +36 -0
- package/src/Activity/private/MessageStatusLoader.module.css +18 -0
- package/src/Activity/private/MessageStatusLoader.tsx +27 -0
- package/src/ActivityDebug/RestrictedActivityDebugAPI.ts +15 -0
- package/src/ActivityDebug/index.ts +1 -0
- package/src/ActivityFeedback/ActivityFeedback.tsx +88 -0
- package/src/ActivityFeedback/private/FeedbackForm.module.css +123 -0
- package/src/ActivityFeedback/private/FeedbackForm.tsx +83 -0
- package/src/ActivityFeedback/private/FeedbackVoteButton.tsx +88 -0
- package/src/ActivityFeedback/private/FeedbackVoteButtonBar.tsx +40 -0
- package/src/ActivityFeedback/private/ThumbButton.Image.tsx +35 -0
- package/src/ActivityFeedback/private/ThumbButton.module.css +91 -0
- package/src/ActivityFeedback/private/ThumbButton.tsx +103 -0
- package/src/ActivityFeedback/private/canActionResubmit.ts +6 -0
- package/src/ActivityFeedback/private/getDisclaimerFromFeedbackLoop.ts +10 -0
- package/src/ActivityFeedback/private/getDisclaimerFromReviewAction.ts +12 -0
- package/src/ActivityFeedback/private/hasFeedbackLoop.ts +42 -0
- package/src/ActivityFeedback/private/isActionRequireReview.ts +10 -0
- package/src/ActivityFeedback/providers/ActivityFeedbackComposer.tsx +372 -0
- package/src/ActivityFeedback/providers/private/ActivityFeedbackContext.ts +24 -0
- package/src/ActivityFeedback/providers/private/FocusPropagation.ts +10 -0
- package/src/ActivityFeedback/providers/useActivityFeedbackHooks.ts +6 -0
- package/src/ActivityStatus/AbsoluteTime.tsx +37 -0
- package/src/ActivityStatus/ActivityStatus.module.css +31 -0
- package/src/ActivityStatus/OthersActivityStatus.tsx +52 -53
- package/src/ActivityStatus/SelfActivityStatus.tsx +11 -8
- package/src/ActivityStatus/SendStatus/SendStatus.tsx +23 -23
- package/src/ActivityStatus/StatusSlot.tsx +17 -0
- package/src/ActivityStatus/Timestamp.tsx +17 -12
- package/src/ActivityStatus/private/Originator.tsx +33 -10
- package/src/ActivityStatus/private/RelativeTime.tsx +43 -0
- package/src/Assets/TypingAnimation.js +3 -1
- package/src/Attachment/AudioContent.tsx +20 -29
- package/src/Attachment/FileContent.tsx +46 -46
- package/src/Attachment/HTMLVideoContent.tsx +21 -27
- package/src/Attachment/ImageAttachment.tsx +58 -0
- package/src/Attachment/ImageContent.tsx +13 -27
- package/src/Attachment/Text/TextAttachment.tsx +38 -14
- package/src/Attachment/Text/TextContent.module.css +45 -0
- package/src/Attachment/Text/TextContent.tsx +40 -16
- package/src/Attachment/Text/private/ActivityButton.module.css +45 -0
- package/src/Attachment/Text/private/ActivityButton.tsx +71 -0
- package/src/Attachment/Text/private/ActivityCopyButton.module.css +45 -0
- package/src/Attachment/Text/private/ActivityCopyButton.tsx +109 -0
- package/src/Attachment/Text/private/ActivityViewCodeButton.tsx +66 -0
- package/src/Attachment/Text/private/CitationModal.module.css +9 -0
- package/src/Attachment/Text/private/CitationModalContent.tsx +28 -21
- package/src/Attachment/Text/private/CodeContent.tsx +44 -0
- package/src/Attachment/Text/private/MarkdownTextContent.tsx +223 -126
- package/src/Attachment/Text/private/Markdownable.tsx +39 -0
- package/src/Attachment/Text/private/MessageSensitivityLabel.tsx +47 -34
- package/src/Attachment/Text/private/PlainTextContent.tsx +24 -14
- package/src/Attachment/Text/private/ShieldIcon.tsx +52 -34
- package/src/Attachment/Text/private/ViewCodeDialog.module.css +59 -0
- package/src/Attachment/Text/private/isAIGeneratedActivity.ts +5 -0
- package/src/Attachment/VideoAttachment.js +1 -1
- package/src/Attachment/VideoContent.tsx +21 -27
- package/src/Attachment/VimeoContent.tsx +21 -25
- package/src/Attachment/YouTubeContent.tsx +21 -25
- package/src/Avatar/ImageAvatar.tsx +48 -0
- package/src/Avatar/InitialsAvatar.tsx +55 -0
- package/src/BasicConnectivityStatus.js +7 -7
- package/src/BasicToast.js +1 -1
- package/src/BasicToaster.js +47 -8
- package/src/BasicTranscript.tsx +402 -587
- package/src/BasicWebChat.tsx +28 -34
- package/src/BuiltInDecorator.tsx +17 -0
- package/src/ChatHistory/ChatHistoryBox.tsx +27 -0
- package/src/ChatHistory/ChatHistoryToolbar.tsx +36 -0
- package/src/ChatHistory/private/ScrollToEndButton.tsx +105 -0
- package/src/Composer.tsx +226 -128
- package/src/ConnectivityStatus/Connecting.tsx +77 -0
- package/src/Dictation.js +16 -24
- package/src/ErrorBox.tsx +54 -26
- package/src/Icon/ComponentIcon.module.css +113 -0
- package/src/Icon/ComponentIcon.tsx +59 -0
- package/src/Icon/index.ts +1 -0
- package/src/LinkDefinition/LinkDefinitionItem.tsx +51 -21
- package/src/LinkDefinition/LinkDefinitions.module.css +209 -0
- package/src/LinkDefinition/LinkDefinitions.tsx +84 -19
- package/src/LinkDefinition/index.ts +6 -4
- package/src/LinkDefinition/private/Badge.tsx +12 -1
- package/src/LinkDefinition/private/ItemBody.tsx +24 -15
- package/src/LinkDefinition/private/OpenInNewWindowIcon.tsx +20 -13
- package/src/LinkDefinition/private/extractHostnameWithSubdomain.spec.ts +2 -0
- package/src/LinkDefinition/private/extractHostnameWithSubdomain.ts +1 -1
- package/src/LiveRegion/LiveRegionActivity.tsx +18 -18
- package/src/LiveRegion/private/LiveRegionSuggestedActions.tsx +34 -25
- package/src/Middleware/Activity/defaultActivityPolymiddleware.tsx +104 -0
- package/src/Middleware/ActivityGrouping/createDefaultActivityGroupingDecoratorMiddleware.tsx +21 -0
- package/src/Middleware/ActivityGrouping/ui/LegacyActivityBridgeComposer.tsx +91 -0
- package/src/Middleware/ActivityGrouping/ui/PartGrouping/CollapsibleGrouping.module.css +76 -0
- package/src/Middleware/ActivityGrouping/ui/PartGrouping/CollapsibleGrouping.tsx +97 -0
- package/src/Middleware/ActivityGrouping/ui/PartGrouping/CollapsibleGroupingList.tsx +30 -0
- package/src/Middleware/ActivityGrouping/ui/PartGrouping/CollapsibleGroupingTitle.tsx +29 -0
- package/src/Middleware/ActivityGrouping/ui/PartGrouping/PartGrouping.tsx +52 -0
- package/src/Middleware/ActivityGrouping/ui/PartGrouping/private/PartGroupingActivity.module.css +29 -0
- package/src/Middleware/ActivityGrouping/ui/PartGrouping/private/PartGroupingActivity.tsx +258 -0
- package/src/Middleware/ActivityGrouping/ui/PartGrouping/private/usePartGroupingLogicalGroup.ts +41 -0
- package/src/Middleware/ActivityGrouping/ui/RenderActivity.tsx +37 -0
- package/src/Middleware/ActivityGrouping/ui/RenderActivityGrouping.tsx +41 -0
- package/src/Middleware/ActivityGrouping/ui/SenderGrouping/SenderGrouping.tsx +49 -0
- package/src/Middleware/ActivityGrouping/ui/SenderGrouping/private/SenderGroupingContext.ts +18 -0
- package/src/Middleware/ActivityGrouping/ui/SenderGrouping/private/useSenderGroupingContext.ts +6 -0
- package/src/Middleware/ActivityGrouping/ui/SenderGrouping/useFirstActivity.ts +6 -0
- package/src/Middleware/ActivityGrouping/ui/SenderGrouping/useLastActivity.ts +6 -0
- package/src/Middleware/ActivityGrouping/ui/StatusGrouping/StatusGrouping.tsx +49 -0
- package/src/Middleware/ActivityGrouping/ui/StatusGrouping/private/StatusGroupingContext.ts +18 -0
- package/src/Middleware/ActivityGrouping/ui/StatusGrouping/private/useStatusGroupingContext.ts +6 -0
- package/src/Middleware/ActivityGrouping/ui/StatusGrouping/useFirstActivity.ts +6 -0
- package/src/Middleware/ActivityGrouping/ui/StatusGrouping/useLastActivity.ts +6 -0
- package/src/Middleware/ActivityStatus/createTimestampMiddleware.tsx +2 -2
- package/src/Middleware/Avatar/DefaultAvatar.tsx +61 -0
- package/src/Middleware/Avatar/createDefaultAvatarPolymiddleware.tsx +22 -0
- package/src/Middleware/ScrollToEndButton/ScrollToEndButton.tsx +58 -0
- package/src/ReactWebChat.tsx +3 -8
- package/src/ScreenReaderText.tsx +27 -34
- package/src/SendBox/AttachmentBar/AttachmentBar.module.css +32 -0
- package/src/SendBox/AttachmentBar/AttachmentBar.tsx +71 -0
- package/src/SendBox/AttachmentBar/AttachmentBarItem.module.css +137 -0
- package/src/SendBox/AttachmentBar/AttachmentBarItem.tsx +103 -0
- package/src/SendBox/AttachmentBar/ItemDeleteButton.tsx +61 -0
- package/src/SendBox/AttachmentBar/ItemPreview.tsx +52 -0
- package/src/SendBox/AttachmentBar/Preview/FilePreview.module.css +35 -0
- package/src/SendBox/AttachmentBar/Preview/FilePreview.tsx +63 -0
- package/src/SendBox/AttachmentBar/Preview/ImagePreview.module.css +5 -0
- package/src/SendBox/AttachmentBar/Preview/ImagePreview.tsx +46 -0
- package/src/SendBox/AttachmentBar/Preview/sendBoxAttachment.ts +13 -0
- package/src/SendBox/AttachmentBar/index.ts +3 -0
- package/src/SendBox/AutoResizeTextArea.tsx +28 -64
- package/src/SendBox/BasicSendBox.tsx +99 -30
- package/src/SendBox/DictationInterims.tsx +32 -21
- package/src/SendBox/DropZone.tsx +64 -0
- package/src/SendBox/IconButton.tsx +32 -30
- package/src/SendBox/MicrophoneButton.tsx +29 -23
- package/src/SendBox/SendButton.tsx +26 -21
- package/src/SendBox/SuggestedAction.tsx +60 -72
- package/src/SendBox/SuggestedActions.tsx +6 -9
- package/src/SendBox/TextBox.tsx +57 -39
- package/src/SendBoxToolbar/Assets/AttachmentIcon.tsx +6 -23
- package/src/SendBoxToolbar/BasicSendBoxToolbar.tsx +4 -2
- package/src/SendBoxToolbar/UploadButton.tsx +47 -26
- package/src/Styles/CSSCustomPropertiesContainer.tsx +195 -0
- package/src/Styles/CustomPropertyNames.ts +66 -6
- package/src/Styles/StyleSet/ActivityButton.ts +49 -0
- package/src/Styles/StyleSet/ActivityCopyButton.ts +40 -0
- package/src/Styles/StyleSet/AudioAttachment.ts +3 -3
- package/src/Styles/StyleSet/Avatar.ts +4 -3
- package/src/Styles/StyleSet/CarouselFilmStrip.ts +9 -7
- package/src/Styles/StyleSet/CarouselFilmStripAttachment.ts +3 -4
- package/src/Styles/StyleSet/ChatHistoryBox.ts +22 -0
- package/src/Styles/StyleSet/CodeBlock.ts +39 -0
- package/src/Styles/StyleSet/CodeBlockCopyButton.ts +71 -0
- package/src/Styles/StyleSet/ErrorBox.ts +2 -2
- package/src/Styles/StyleSet/FileContent.ts +2 -1
- package/src/Styles/StyleSet/ImageAvatar.ts +8 -5
- package/src/Styles/StyleSet/InitialsAvatar.ts +4 -5
- package/src/Styles/StyleSet/LinkDefinitions.ts +17 -11
- package/src/Styles/StyleSet/MicrophoneButton.ts +1 -1
- package/src/Styles/StyleSet/ModalDialog.ts +14 -8
- package/src/Styles/StyleSet/RenderMarkdown.ts +35 -0
- package/src/Styles/StyleSet/ScrollToEndButton.ts +0 -11
- package/src/Styles/StyleSet/SendBox.ts +57 -7
- package/src/Styles/StyleSet/SendBoxButton.ts +7 -5
- package/src/Styles/StyleSet/SendBoxTextBox.ts +6 -1
- package/src/Styles/StyleSet/SendStatus.ts +12 -0
- package/src/Styles/StyleSet/SpinnerAnimation.ts +3 -1
- package/src/Styles/StyleSet/StackedLayout.ts +18 -9
- package/src/Styles/StyleSet/SuggestedAction.ts +1 -13
- package/src/Styles/StyleSet/TextContent.ts +17 -2
- package/src/Styles/StyleSet/ThumbButton.ts +77 -24
- package/src/Styles/StyleSet/Tooltip.ts +66 -0
- package/src/Styles/StyleSet/TypingAnimation.ts +3 -1
- package/src/Styles/StyleSet/ViewCodeDialog.ts +70 -0
- package/src/Styles/StyleSet/types/StyleSet.ts +11 -0
- package/src/Styles/createStyleSet.ts +14 -14
- package/src/TextArea/TextArea.module.css +75 -0
- package/src/TextArea/TextArea.tsx +126 -0
- package/src/TextArea/index.ts +1 -0
- package/src/Tooltip/index.ts +1 -0
- package/src/Tooltip/private/Tooltip.tsx +26 -0
- package/src/Transcript/ActivityRow.tsx +100 -39
- package/src/Transcript/ActivityTree.tsx +35 -0
- package/src/Transcript/FocusTrap.tsx +96 -38
- package/src/Transcript/LiveRegion/SendFailed.tsx +8 -10
- package/src/Transcript/LiveRegionTranscript.tsx +11 -62
- package/src/Transcript/TranscriptFocus/TranscriptActivityList.tsx +22 -0
- package/src/Transcript/TranscriptFocus/TranscriptFocus.module.css +117 -0
- package/src/Transcript/TranscriptFocus/TranscriptFocusArea.tsx +27 -0
- package/src/Transcript/TranscriptFocus/TranscriptFocusContent.tsx +34 -0
- package/src/Transcript/TranscriptFocus/TranscriptFocusContentActiveDescendant.tsx +26 -0
- package/src/Transcript/TranscriptFocus/TranscriptFocusContentBody.tsx +20 -0
- package/src/Transcript/TranscriptFocus/TranscriptFocusContentOverlay.tsx +20 -0
- package/src/Transcript/TranscriptFocus/TranscriptFocusIndicator.tsx +28 -0
- package/src/Transcript/TranscriptFocus/TranscriptFocusTerminator.tsx +42 -0
- package/src/Transcript/TranscriptFocus/TranscriptFocusTerminatorBody.tsx +20 -0
- package/src/Transcript/TranscriptFocus/TranscriptFocusTerminatorText.tsx +20 -0
- package/src/Transcript/TranscriptFocus/index.ts +25 -0
- package/src/Transcript/hooks/useRenderActivityProps.ts +88 -0
- package/src/Utils/AccessKeySink/Surface.tsx +63 -0
- package/src/Utils/AccessibleButton.tsx +64 -49
- package/src/Utils/AccessibleInputText.tsx +97 -106
- package/src/Utils/AccessibleTextArea.tsx +10 -41
- package/src/Utils/FixedWidthImage.tsx +60 -0
- package/src/Utils/FocusRedirector.tsx +31 -26
- package/src/Utils/InlineMarkdown.js +6 -1
- package/src/Utils/JSONLinkedData/__snapshots__/dereferenceBlankNodes.spec.ts.snap +17 -17
- package/src/Utils/JSONLinkedData/dereferenceBlankNodes.spec.ts +2 -0
- package/src/Utils/JSONLinkedData/dereferenceBlankNodes.ts +1 -1
- package/src/Utils/JSONLinkedData/getSafeOwnPropertyNames.ts +2 -2
- package/src/Utils/JSONLinkedData/isUnconnectedBlankNode.spec.ts +2 -0
- package/src/Utils/LocalizedString.tsx +3 -3
- package/src/Utils/addTargetBlankToHyperlinksMarkdown.spec.js +4 -4
- package/src/Utils/createIconComponent.tsx +126 -0
- package/src/Utils/downscaleImageToDataURL/downscaleImageToDataURLUsingBrowser.ts +2 -0
- package/src/Utils/downscaleImageToDataURL/downscaleImageToDataURLUsingWorker.ts +4 -4
- package/src/Utils/firstTabbableDescendant.js +0 -1
- package/src/Utils/orgSchema/getFirstBaseOfSoftwareSourceCode.ts +15 -0
- package/src/Utils/parseDocumentFragmentFromString.ts +9 -0
- package/src/Utils/readDataURIToBlob.ts +37 -0
- package/src/Utils/serializeDocumentFragmentIntoString.ts +3 -0
- package/src/Utils/supportPseudoClass.ts +1 -1
- package/src/Utils/tabbableElements.ts +7 -1
- package/src/Utils/textFormatToContentType.ts +14 -0
- package/src/Utils/updateMarkdownAttrs.spec.js +14 -14
- package/src/Utils/walkMarkdownTokens.spec.js +1 -1
- package/src/__tests__/addMetaTag.spec.js +8 -0
- package/src/__tests__/addMetaTag.spec.mjs +8 -0
- package/src/boot/component.ts +45 -0
- package/src/boot/decorator.ts +1 -0
- package/src/boot/hook.ts +118 -0
- package/src/boot/internal.ts +15 -0
- package/src/buildInfo.ts +9 -0
- package/src/decorator/index.ts +3 -0
- package/src/decorator/private/BorderFlair.module.css +566 -0
- package/src/decorator/private/BorderFlair.tsx +39 -0
- package/src/decorator/private/BorderLoader.module.css +53 -0
- package/src/decorator/private/BorderLoader.tsx +24 -0
- package/src/decorator/private/WebChatDecorator.tsx +64 -0
- package/src/decorator/stylesheet/DecoratorStylesheet.tsx +33 -0
- package/src/decorator/stylesheet/createDecoratorStyleElements.ts +8 -0
- package/src/env.d.ts +11 -0
- package/src/hooks/RenderMarkdown.module.css +102 -0
- package/src/hooks/index.ts +4 -0
- package/src/hooks/internal/UITracker.js +1 -1
- package/src/hooks/internal/WebChatUIContext.ts +19 -1
- package/src/hooks/internal/codeHighlighter/index.ts +3 -0
- package/src/hooks/internal/codeHighlighter/private/CodeHighlighterComposer.tsx +32 -0
- package/src/hooks/internal/codeHighlighter/private/createCodeHighlighterComposer.tsx +32 -0
- package/src/hooks/internal/codeHighlighter/private/defaultHighlightCode.tsx +22 -0
- package/src/hooks/internal/createWaitUntilable.spec.ts +4 -2
- package/src/hooks/internal/createWaitUntilable.ts +1 -1
- package/src/hooks/internal/private/createOnEventShim.spec.ts +2 -0
- package/src/hooks/internal/styleToEmotionObject/index.ts +1 -0
- package/src/hooks/internal/styleToEmotionObject/private/StyleToEmotionObjectComposer.tsx +20 -0
- package/src/hooks/internal/styleToEmotionObject/private/createStyleToEmotionObjectComposer.tsx +22 -0
- package/src/hooks/internal/useEmotion.ts +37 -0
- package/src/hooks/internal/useFeedbackActions.ts +120 -0
- package/src/hooks/internal/useForceRenderAtInterval.ts +6 -6
- package/src/hooks/internal/useMemoized.spec.jsx +3 -3
- package/src/hooks/internal/useMemoized.ts +1 -1
- package/src/hooks/internal/useNonce.ts +7 -0
- package/src/hooks/internal/useObserveFocusVisible.ts +0 -1
- package/src/hooks/internal/useSanitizeHrefCallback.ts +37 -0
- package/src/hooks/internal/useStateRef.ts +1 -1
- package/src/hooks/sendBoxFocus.ts +6 -2
- package/src/hooks/transcriptScrollRelative.ts +6 -3
- package/src/hooks/useObserveScrollPosition.ts +3 -0
- package/src/hooks/useObserveTranscriptFocus.ts +9 -3
- package/src/hooks/useRenderMarkdownAsHTML.ts +32 -29
- package/src/hooks/useSendFiles.ts +4 -1
- package/src/hooks/useStreamingMarkdownWithDefinitions.ts +193 -0
- package/src/index.ts +30 -125
- package/src/providers/ActivityLogicalGrouping/ActivityLogicalGroupingComposer.ts +100 -0
- package/src/providers/ActivityLogicalGrouping/index.ts +7 -0
- package/src/providers/ActivityLogicalGrouping/private/ActivityLogicalGroupingContext.ts +31 -0
- package/src/providers/ActivityLogicalGrouping/private/useStateWithOptimisticRef.ts +13 -0
- package/src/providers/ActivityLogicalGrouping/useAddLogicalGrouping.ts +5 -0
- package/src/providers/ActivityLogicalGrouping/useGetGroupState.ts +5 -0
- package/src/providers/ActivityLogicalGrouping/useGetLogicalGroupBoundaries.ts +5 -0
- package/src/providers/ActivityLogicalGrouping/useGetLogicalGroupKey.ts +5 -0
- package/src/providers/ActivityLogicalGrouping/useRemoveLogicalGrouping.ts +5 -0
- package/src/providers/ChatHistoryDOM/ChatHistoryDOMComposer.tsx +18 -0
- package/src/providers/ChatHistoryDOM/private/ChatHistoryDOMContext.ts +11 -0
- package/src/providers/ChatHistoryDOM/useActivityElementRef.ts +6 -0
- package/src/providers/CustomElements/CustomElementsComposer.tsx +58 -0
- package/src/providers/CustomElements/customElements/CodeBlock.module.css +35 -0
- package/src/providers/CustomElements/customElements/CodeBlock.ts +230 -0
- package/src/providers/CustomElements/customElements/CodeBlockCopyButton.module.css +63 -0
- package/src/providers/CustomElements/customElements/CodeBlockCopyButton.tsx +108 -0
- package/src/providers/CustomElements/customElements/wrapAsCustomElement.ts +85 -0
- package/src/providers/CustomElements/private/CustomElementsContext.ts +15 -0
- package/src/providers/CustomElements/private/useCustomElementsContext.ts +6 -0
- package/src/providers/CustomElements/useCodeBlockCopyButtonTagName.ts +8 -0
- package/src/providers/CustomElements/useCodeBlockTagName.ts +19 -0
- package/src/providers/GroupedRenderingActivities/GroupedRenderingActivities.ts +10 -0
- package/src/providers/GroupedRenderingActivities/GroupedRenderingActivitiesComposer.tsx +87 -0
- package/src/providers/GroupedRenderingActivities/private/GroupedRenderingActivitiesContext.ts +14 -0
- package/src/providers/GroupedRenderingActivities/private/group.spec.ts +31 -0
- package/src/providers/GroupedRenderingActivities/private/group.ts +19 -0
- package/src/providers/GroupedRenderingActivities/private/pick.spec.ts +35 -0
- package/src/providers/GroupedRenderingActivities/private/pick.ts +20 -0
- package/src/providers/GroupedRenderingActivities/useGroupedRenderingActivities.ts +6 -0
- package/src/providers/GroupedRenderingActivities/useNumRenderingActivities.ts +5 -0
- package/src/providers/HTMLContentTransformCOR/HTMLContentTransformComposer.tsx +41 -0
- package/src/providers/HTMLContentTransformCOR/index.ts +8 -0
- package/src/providers/HTMLContentTransformCOR/private/HTMLContentTransformContext.ts +34 -0
- package/src/providers/HTMLContentTransformCOR/private/useHTMLContentTransformContext.ts +6 -0
- package/src/providers/HTMLContentTransformCOR/useTransformHTMLContent.ts +187 -0
- package/src/providers/LiveRegionTwin/index.ts +3 -0
- package/src/providers/LiveRegionTwin/private/LiveRegionTwinComposer.ts +27 -0
- package/src/providers/LiveRegionTwin/private/LiveRegionTwinContainer.tsx +27 -39
- package/src/providers/LiveRegionTwin/private/createLiveRegionTwinComposer.tsx +155 -0
- package/src/providers/LiveRegionTwin/private/useContext.ts +2 -8
- package/src/providers/LiveRegionTwin/useLiveRegion.ts +27 -0
- package/src/providers/LiveRegionTwin/useQueueStaticElement.ts +2 -2
- package/src/providers/ModalDialog/private/Popover.tsx +5 -15
- package/src/providers/ReducedMotion/ReducedMotionComposer.tsx +35 -0
- package/src/providers/ReducedMotion/private/Context.ts +22 -0
- package/src/providers/ReducedMotion/private/useContext.ts +8 -0
- package/src/providers/ReducedMotion/useShouldReduceMotion.ts +5 -0
- package/src/providers/RenderingActivities/RenderingActivitiesComposer.tsx +103 -0
- package/src/providers/RenderingActivities/private/RenderingActivitiesContext.ts +15 -0
- package/src/providers/RenderingActivities/useActivityRendererMap.ts +9 -0
- package/src/providers/RenderingActivities/useRenderingActivities.ts +7 -0
- package/src/providers/RenderingActivities/useRenderingActivityKeys.ts +5 -0
- package/src/providers/RovingTabIndex/RovingTabIndexComposer.tsx +20 -23
- package/src/providers/Theme/ThemeProvider.tsx +119 -40
- package/src/providers/Theme/private/Context.ts +18 -18
- package/src/providers/TranscriptFocus/TranscriptFocusComposer.spec.tsx +611 -0
- package/src/providers/TranscriptFocus/TranscriptFocusComposer.tsx +325 -68
- package/src/providers/TranscriptFocus/private/Context.ts +4 -0
- package/src/providers/TranscriptFocus/useActiveDescendantId.ts +4 -1
- package/src/providers/TranscriptFocus/useFocusByGroupKey.ts +11 -0
- package/src/providers/TranscriptFocus/useFocusRelativeActivity.ts +1 -1
- package/src/providers/TranscriptFocus/useFocusedKey.ts +6 -0
- package/src/providers/TranscriptFocus/useGetGroupDescendantIdByActivityKey.ts +5 -0
- package/src/providers/createContextAndHook.ts +23 -0
- package/src/providers/internal/SendBox/SendBoxComposer.tsx +30 -38
- package/src/stylesheet/ComponentStylesheet.tsx +33 -0
- package/src/stylesheet/createComponentStyleElements.ts +8 -0
- package/src/testIds.ts +18 -0
- package/src/tsconfig.json +8 -14
- package/src/types/internal/mutableRefObject.ts +40 -0
- package/src/types/internal/refObject.ts +40 -0
- package/dist/botframework-webchat-component.internal.mjs.LEGAL.txt +0 -0
- package/dist/botframework-webchat-component.mjs.LEGAL.txt +0 -0
- package/dist/chunk-X37JABN5.mjs +0 -5
- package/dist/chunk-X37JABN5.mjs.LEGAL.txt +0 -0
- package/dist/chunk-X37JABN5.mjs.map +0 -1
- package/lib/Activity/Avatar.d.ts +0 -10
- package/lib/Activity/Avatar.d.ts.map +0 -1
- package/lib/Activity/Avatar.js +0 -35
- package/lib/Activity/Bubble.d.ts +0 -11
- package/lib/Activity/Bubble.d.ts.map +0 -1
- package/lib/Activity/Bubble.js +0 -137
- package/lib/Activity/CarouselFilmStrip.js +0 -264
- package/lib/Activity/CarouselFilmStripAttachment.js +0 -93
- package/lib/Activity/CarouselLayout.js +0 -133
- package/lib/Activity/SayAlt.js +0 -31
- package/lib/Activity/Speak.d.ts +0 -8
- package/lib/Activity/Speak.d.ts.map +0 -1
- package/lib/Activity/Speak.js +0 -99
- package/lib/Activity/StackedLayout.d.ts +0 -17
- package/lib/Activity/StackedLayout.d.ts.map +0 -1
- package/lib/Activity/StackedLayout.js +0 -233
- package/lib/ActivityStatus/AbsoluteTime.js +0 -38
- package/lib/ActivityStatus/OthersActivityStatus.d.ts +0 -8
- package/lib/ActivityStatus/OthersActivityStatus.d.ts.map +0 -1
- package/lib/ActivityStatus/OthersActivityStatus.js +0 -105
- package/lib/ActivityStatus/SelfActivityStatus.d.ts +0 -8
- package/lib/ActivityStatus/SelfActivityStatus.d.ts.map +0 -1
- package/lib/ActivityStatus/SelfActivityStatus.js +0 -37
- package/lib/ActivityStatus/SendStatus/SendStatus.d.ts +0 -10
- package/lib/ActivityStatus/SendStatus/SendStatus.d.ts.map +0 -1
- package/lib/ActivityStatus/SendStatus/SendStatus.js +0 -58
- package/lib/ActivityStatus/SendStatus/private/SendFailedRetry.js +0 -35
- package/lib/ActivityStatus/Slotted.d.ts +0 -7
- package/lib/ActivityStatus/Slotted.d.ts.map +0 -1
- package/lib/ActivityStatus/Slotted.js +0 -31
- package/lib/ActivityStatus/Timestamp.d.ts +0 -7
- package/lib/ActivityStatus/Timestamp.d.ts.map +0 -1
- package/lib/ActivityStatus/Timestamp.js +0 -36
- package/lib/ActivityStatus/private/Feedback/Feedback.d.ts +0 -8
- package/lib/ActivityStatus/private/Feedback/Feedback.d.ts.map +0 -1
- package/lib/ActivityStatus/private/Feedback/Feedback.js +0 -67
- package/lib/ActivityStatus/private/Feedback/private/ThumbButton.Image.d.ts +0 -9
- package/lib/ActivityStatus/private/Feedback/private/ThumbButton.Image.d.ts.map +0 -1
- package/lib/ActivityStatus/private/Feedback/private/ThumbButton.Image.js +0 -34
- package/lib/ActivityStatus/private/Feedback/private/ThumbButton.d.ts +0 -9
- package/lib/ActivityStatus/private/Feedback/private/ThumbButton.d.ts.map +0 -1
- package/lib/ActivityStatus/private/Feedback/private/ThumbButton.js +0 -57
- package/lib/ActivityStatus/private/Feedback/private/VoteButton.d.ts +0 -10
- package/lib/ActivityStatus/private/Feedback/private/VoteButton.d.ts.map +0 -1
- package/lib/ActivityStatus/private/Feedback/private/VoteButton.js +0 -43
- package/lib/ActivityStatus/private/Feedback/private/icons/ThumbDislike16Filled.d.ts +0 -7
- package/lib/ActivityStatus/private/Feedback/private/icons/ThumbDislike16Filled.d.ts.map +0 -1
- package/lib/ActivityStatus/private/Feedback/private/icons/ThumbDislike16Filled.js +0 -28
- package/lib/ActivityStatus/private/Feedback/private/icons/ThumbDislike16Regular.d.ts +0 -7
- package/lib/ActivityStatus/private/Feedback/private/icons/ThumbDislike16Regular.d.ts.map +0 -1
- package/lib/ActivityStatus/private/Feedback/private/icons/ThumbDislike16Regular.js +0 -28
- package/lib/ActivityStatus/private/Feedback/private/icons/ThumbLike16Filled.d.ts +0 -7
- package/lib/ActivityStatus/private/Feedback/private/icons/ThumbLike16Filled.d.ts.map +0 -1
- package/lib/ActivityStatus/private/Feedback/private/icons/ThumbLike16Filled.js +0 -28
- package/lib/ActivityStatus/private/Feedback/private/icons/ThumbLike16Regular.d.ts +0 -7
- package/lib/ActivityStatus/private/Feedback/private/icons/ThumbLike16Regular.d.ts.map +0 -1
- package/lib/ActivityStatus/private/Feedback/private/icons/ThumbLike16Regular.js +0 -28
- package/lib/ActivityStatus/private/Originator.d.ts +0 -8
- package/lib/ActivityStatus/private/Originator.d.ts.map +0 -1
- package/lib/ActivityStatus/private/Originator.js +0 -29
- package/lib/ActivityStatus/private/RelativeTime.js +0 -37
- package/lib/Assets/TypingAnimation.js +0 -47
- package/lib/Attachment/Assets/DownloadIcon.js +0 -35
- package/lib/Attachment/AudioAttachment.js +0 -38
- package/lib/Attachment/AudioContent.d.ts +0 -11
- package/lib/Attachment/AudioContent.d.ts.map +0 -1
- package/lib/Attachment/AudioContent.js +0 -51
- package/lib/Attachment/FileAttachment.js +0 -43
- package/lib/Attachment/FileContent.d.ts +0 -10
- package/lib/Attachment/FileContent.d.ts.map +0 -1
- package/lib/Attachment/FileContent.js +0 -120
- package/lib/Attachment/HTMLVideoContent.d.ts +0 -11
- package/lib/Attachment/HTMLVideoContent.d.ts.map +0 -1
- package/lib/Attachment/HTMLVideoContent.js +0 -51
- package/lib/Attachment/ImageAttachment.js +0 -41
- package/lib/Attachment/ImageContent.d.ts +0 -8
- package/lib/Attachment/ImageContent.d.ts.map +0 -1
- package/lib/Attachment/ImageContent.js +0 -41
- package/lib/Attachment/Text/TextAttachment.d.ts +0 -12
- package/lib/Attachment/Text/TextAttachment.d.ts.map +0 -1
- package/lib/Attachment/Text/TextAttachment.js +0 -27
- package/lib/Attachment/Text/TextContent.d.ts +0 -10
- package/lib/Attachment/Text/TextContent.d.ts.map +0 -1
- package/lib/Attachment/Text/TextContent.js +0 -34
- package/lib/Attachment/Text/private/CitationModalContent.d.ts +0 -8
- package/lib/Attachment/Text/private/CitationModalContent.d.ts.map +0 -1
- package/lib/Attachment/Text/private/CitationModalContent.js +0 -45
- package/lib/Attachment/Text/private/MarkdownTextContent.d.ts +0 -9
- package/lib/Attachment/Text/private/MarkdownTextContent.d.ts.map +0 -1
- package/lib/Attachment/Text/private/MarkdownTextContent.js +0 -204
- package/lib/Attachment/Text/private/MessageSensitivityLabel.d.ts +0 -12
- package/lib/Attachment/Text/private/MessageSensitivityLabel.d.ts.map +0 -1
- package/lib/Attachment/Text/private/MessageSensitivityLabel.js +0 -38
- package/lib/Attachment/Text/private/PlainTextContent.d.ts +0 -7
- package/lib/Attachment/Text/private/PlainTextContent.d.ts.map +0 -1
- package/lib/Attachment/Text/private/PlainTextContent.js +0 -35
- package/lib/Attachment/Text/private/ShieldIcon.d.ts +0 -9
- package/lib/Attachment/Text/private/ShieldIcon.d.ts.map +0 -1
- package/lib/Attachment/Text/private/ShieldIcon.js +0 -39
- package/lib/Attachment/Text/private/isHTMLButtonElement.d.ts +0 -2
- package/lib/Attachment/Text/private/isHTMLButtonElement.d.ts.map +0 -1
- package/lib/Attachment/Text/private/isHTMLButtonElement.js +0 -10
- package/lib/Attachment/VideoAttachment.js +0 -45
- package/lib/Attachment/VideoContent.d.ts +0 -11
- package/lib/Attachment/VideoContent.d.ts.map +0 -1
- package/lib/Attachment/VideoContent.js +0 -103
- package/lib/Attachment/VimeoContent.d.ts +0 -10
- package/lib/Attachment/VimeoContent.d.ts.map +0 -1
- package/lib/Attachment/VimeoContent.js +0 -59
- package/lib/Attachment/YouTubeContent.d.ts +0 -10
- package/lib/Attachment/YouTubeContent.d.ts.map +0 -1
- package/lib/Attachment/YouTubeContent.js +0 -60
- package/lib/Attachment/createMiddleware.d.ts +0 -3
- package/lib/Attachment/createMiddleware.d.ts.map +0 -1
- package/lib/Attachment/createMiddleware.js +0 -64
- package/lib/Attachment/private/types/WebChatAttachment.d.ts +0 -9
- package/lib/Attachment/private/types/WebChatAttachment.d.ts.map +0 -1
- package/lib/Attachment/private/types/WebChatAttachment.js +0 -2
- package/lib/Avatar/ImageAvatar.js +0 -59
- package/lib/Avatar/InitialsAvatar.js +0 -57
- package/lib/BasicConnectivityStatus.js +0 -46
- package/lib/BasicToast.js +0 -103
- package/lib/BasicToaster.js +0 -176
- package/lib/BasicTranscript.d.ts +0 -7
- package/lib/BasicTranscript.d.ts.map +0 -1
- package/lib/BasicTranscript.js +0 -735
- package/lib/BasicTypingIndicator.d.ts +0 -6
- package/lib/BasicTypingIndicator.d.ts.map +0 -1
- package/lib/BasicTypingIndicator.js +0 -54
- package/lib/BasicWebChat.d.ts +0 -9
- package/lib/BasicWebChat.d.ts.map +0 -1
- package/lib/BasicWebChat.js +0 -90
- package/lib/Composer.d.ts +0 -50
- package/lib/Composer.d.ts.map +0 -1
- package/lib/Composer.js +0 -336
- package/lib/ConnectivityStatus/Assets/ErrorNotificationIcon.js +0 -47
- package/lib/ConnectivityStatus/Assets/SpinnerAnimation.js +0 -32
- package/lib/ConnectivityStatus/Assets/WarningNotificationIcon.js +0 -47
- package/lib/ConnectivityStatus/Connected.js +0 -20
- package/lib/ConnectivityStatus/Connecting.js +0 -82
- package/lib/ConnectivityStatus/FailedToConnect.js +0 -41
- package/lib/ConnectivityStatus/JavaScriptError.js +0 -41
- package/lib/Dictation.js +0 -158
- package/lib/ErrorBox.d.ts +0 -8
- package/lib/ErrorBox.d.ts.map +0 -1
- package/lib/ErrorBox.js +0 -42
- package/lib/LinkDefinition/LinkDefinitionItem.d.ts +0 -12
- package/lib/LinkDefinition/LinkDefinitionItem.d.ts.map +0 -1
- package/lib/LinkDefinition/LinkDefinitionItem.js +0 -57
- package/lib/LinkDefinition/LinkDefinitions.d.ts +0 -12
- package/lib/LinkDefinition/LinkDefinitions.d.ts.map +0 -1
- package/lib/LinkDefinition/LinkDefinitions.js +0 -69
- package/lib/LinkDefinition/index.d.ts +0 -4
- package/lib/LinkDefinition/index.d.ts.map +0 -1
- package/lib/LinkDefinition/index.js +0 -21
- package/lib/LinkDefinition/private/Badge.d.ts +0 -7
- package/lib/LinkDefinition/private/Badge.d.ts.map +0 -1
- package/lib/LinkDefinition/private/Badge.js +0 -20
- package/lib/LinkDefinition/private/Chevron.d.ts +0 -4
- package/lib/LinkDefinition/private/Chevron.d.ts.map +0 -1
- package/lib/LinkDefinition/private/Chevron.js +0 -27
- package/lib/LinkDefinition/private/ItemBody.d.ts +0 -11
- package/lib/LinkDefinition/private/ItemBody.d.ts.map +0 -1
- package/lib/LinkDefinition/private/ItemBody.js +0 -41
- package/lib/LinkDefinition/private/OpenInNewWindowIcon.d.ts +0 -7
- package/lib/LinkDefinition/private/OpenInNewWindowIcon.d.ts.map +0 -1
- package/lib/LinkDefinition/private/OpenInNewWindowIcon.js +0 -23
- package/lib/LinkDefinition/private/extractHostnameWithSubdomain.d.ts +0 -2
- package/lib/LinkDefinition/private/extractHostnameWithSubdomain.d.ts.map +0 -1
- package/lib/LinkDefinition/private/extractHostnameWithSubdomain.js +0 -24
- package/lib/LinkDefinition/private/extractHostnameWithSubdomain.spec.d.ts +0 -2
- package/lib/LinkDefinition/private/extractHostnameWithSubdomain.spec.d.ts.map +0 -1
- package/lib/LiveRegion/LiveRegionActivity.d.ts +0 -9
- package/lib/LiveRegion/LiveRegionActivity.d.ts.map +0 -1
- package/lib/LiveRegion/LiveRegionActivity.js +0 -70
- package/lib/LiveRegion/private/LiveRegionAttachments.d.ts +0 -11
- package/lib/LiveRegion/private/LiveRegionAttachments.d.ts.map +0 -1
- package/lib/LiveRegion/private/LiveRegionAttachments.js +0 -53
- package/lib/LiveRegion/private/LiveRegionSuggestedActions.d.ts +0 -8
- package/lib/LiveRegion/private/LiveRegionSuggestedActions.d.ts.map +0 -1
- package/lib/LiveRegion/private/LiveRegionSuggestedActions.js +0 -37
- package/lib/Middleware/Activity/createCoreMiddleware.d.ts +0 -3
- package/lib/Middleware/Activity/createCoreMiddleware.d.ts.map +0 -1
- package/lib/Middleware/Activity/createCoreMiddleware.js +0 -95
- package/lib/Middleware/ActivityStatus/createCoreMiddleware.d.ts +0 -3
- package/lib/Middleware/ActivityStatus/createCoreMiddleware.d.ts.map +0 -1
- package/lib/Middleware/ActivityStatus/createCoreMiddleware.js +0 -13
- package/lib/Middleware/ActivityStatus/createSendStatusMiddleware.d.ts +0 -3
- package/lib/Middleware/ActivityStatus/createSendStatusMiddleware.d.ts.map +0 -1
- package/lib/Middleware/ActivityStatus/createSendStatusMiddleware.js +0 -41
- package/lib/Middleware/ActivityStatus/createTimestampMiddleware.d.ts +0 -3
- package/lib/Middleware/ActivityStatus/createTimestampMiddleware.d.ts.map +0 -1
- package/lib/Middleware/ActivityStatus/createTimestampMiddleware.js +0 -48
- package/lib/Middleware/AttachmentForScreenReader/AudioAttachment.js +0 -18
- package/lib/Middleware/AttachmentForScreenReader/FileAttachment.js +0 -28
- package/lib/Middleware/AttachmentForScreenReader/ImageAttachment.js +0 -18
- package/lib/Middleware/AttachmentForScreenReader/TextAttachment.js +0 -28
- package/lib/Middleware/AttachmentForScreenReader/VideoAttachment.js +0 -18
- package/lib/Middleware/AttachmentForScreenReader/createCoreMiddleware.d.ts +0 -3
- package/lib/Middleware/AttachmentForScreenReader/createCoreMiddleware.d.ts.map +0 -1
- package/lib/Middleware/AttachmentForScreenReader/createCoreMiddleware.js +0 -61
- package/lib/Middleware/Avatar/createCoreMiddleware.d.ts +0 -11
- package/lib/Middleware/Avatar/createCoreMiddleware.d.ts.map +0 -1
- package/lib/Middleware/Avatar/createCoreMiddleware.js +0 -82
- package/lib/Middleware/CardAction/createCoreMiddleware.js +0 -108
- package/lib/Middleware/ScrollToEndButton/ScrollToEndButton.js +0 -52
- package/lib/Middleware/ScrollToEndButton/createScrollToEndButtonMiddleware.d.ts +0 -3
- package/lib/Middleware/ScrollToEndButton/createScrollToEndButtonMiddleware.d.ts.map +0 -1
- package/lib/Middleware/ScrollToEndButton/createScrollToEndButtonMiddleware.js +0 -27
- package/lib/Middleware/Toast/createCoreMiddleware.d.ts +0 -4
- package/lib/Middleware/Toast/createCoreMiddleware.d.ts.map +0 -1
- package/lib/Middleware/Toast/createCoreMiddleware.js +0 -27
- package/lib/Middleware/TypingIndicator/createCoreMiddleware.d.ts +0 -3
- package/lib/Middleware/TypingIndicator/createCoreMiddleware.d.ts.map +0 -1
- package/lib/Middleware/TypingIndicator/createCoreMiddleware.js +0 -47
- package/lib/ReactWebChat.d.ts +0 -42
- package/lib/ReactWebChat.d.ts.map +0 -1
- package/lib/ReactWebChat.js +0 -52
- package/lib/ScreenReaderText.d.ts +0 -9
- package/lib/ScreenReaderText.d.ts.map +0 -1
- package/lib/ScreenReaderText.js +0 -58
- package/lib/SendBox/Assets/MicrophoneIcon.js +0 -25
- package/lib/SendBox/Assets/SendIcon.js +0 -45
- package/lib/SendBox/AutoResizeTextArea.d.ts +0 -24
- package/lib/SendBox/AutoResizeTextArea.d.ts.map +0 -1
- package/lib/SendBox/AutoResizeTextArea.js +0 -113
- package/lib/SendBox/BasicSendBox.d.ts +0 -9
- package/lib/SendBox/BasicSendBox.d.ts.map +0 -1
- package/lib/SendBox/BasicSendBox.js +0 -123
- package/lib/SendBox/DictationInterims.d.ts +0 -7
- package/lib/SendBox/DictationInterims.d.ts.map +0 -1
- package/lib/SendBox/DictationInterims.js +0 -68
- package/lib/SendBox/IconButton.d.ts +0 -11
- package/lib/SendBox/IconButton.d.ts.map +0 -1
- package/lib/SendBox/IconButton.js +0 -73
- package/lib/SendBox/MicrophoneButton.d.ts +0 -10
- package/lib/SendBox/MicrophoneButton.d.ts.map +0 -1
- package/lib/SendBox/MicrophoneButton.js +0 -160
- package/lib/SendBox/SendButton.d.ts +0 -7
- package/lib/SendBox/SendButton.d.ts.map +0 -1
- package/lib/SendBox/SendButton.js +0 -53
- package/lib/SendBox/SuggestedAction.d.ts +0 -16
- package/lib/SendBox/SuggestedAction.d.ts.map +0 -1
- package/lib/SendBox/SuggestedAction.js +0 -166
- package/lib/SendBox/SuggestedActions.d.ts +0 -7
- package/lib/SendBox/SuggestedActions.d.ts.map +0 -1
- package/lib/SendBox/SuggestedActions.js +0 -256
- package/lib/SendBox/TextBox.d.ts +0 -24
- package/lib/SendBox/TextBox.d.ts.map +0 -1
- package/lib/SendBox/TextBox.js +0 -252
- package/lib/SendBox/createMiddleware.d.ts +0 -4
- package/lib/SendBox/createMiddleware.d.ts.map +0 -1
- package/lib/SendBox/createMiddleware.js +0 -38
- package/lib/SendBoxToolbar/Assets/AttachmentIcon.d.ts +0 -7
- package/lib/SendBoxToolbar/Assets/AttachmentIcon.d.ts.map +0 -1
- package/lib/SendBoxToolbar/Assets/AttachmentIcon.js +0 -63
- package/lib/SendBoxToolbar/BasicSendBoxToolbar.d.ts +0 -6
- package/lib/SendBoxToolbar/BasicSendBoxToolbar.d.ts.map +0 -1
- package/lib/SendBoxToolbar/BasicSendBoxToolbar.js +0 -32
- package/lib/SendBoxToolbar/UploadButton.d.ts +0 -7
- package/lib/SendBoxToolbar/UploadButton.d.ts.map +0 -1
- package/lib/SendBoxToolbar/UploadButton.js +0 -156
- package/lib/SendBoxToolbar/createMiddleware.d.ts +0 -4
- package/lib/SendBoxToolbar/createMiddleware.d.ts.map +0 -1
- package/lib/SendBoxToolbar/createMiddleware.js +0 -20
- package/lib/Styles/CSSTokens.d.ts +0 -16
- package/lib/Styles/CSSTokens.d.ts.map +0 -1
- package/lib/Styles/CSSTokens.js +0 -19
- package/lib/Styles/CustomPropertyNames.d.ts +0 -13
- package/lib/Styles/CustomPropertyNames.d.ts.map +0 -1
- package/lib/Styles/CustomPropertyNames.js +0 -24
- package/lib/Styles/StyleSet/Activities.d.ts +0 -5
- package/lib/Styles/StyleSet/Activities.d.ts.map +0 -1
- package/lib/Styles/StyleSet/Activities.js +0 -13
- package/lib/Styles/StyleSet/AudioAttachment.d.ts +0 -6
- package/lib/Styles/StyleSet/AudioAttachment.d.ts.map +0 -1
- package/lib/Styles/StyleSet/AudioAttachment.js +0 -15
- package/lib/Styles/StyleSet/AudioContent.d.ts +0 -4
- package/lib/Styles/StyleSet/AudioContent.d.ts.map +0 -1
- package/lib/Styles/StyleSet/AudioContent.js +0 -12
- package/lib/Styles/StyleSet/AutoResizeTextArea.d.ts +0 -37
- package/lib/Styles/StyleSet/AutoResizeTextArea.d.ts.map +0 -1
- package/lib/Styles/StyleSet/AutoResizeTextArea.js +0 -45
- package/lib/Styles/StyleSet/Avatar.d.ts +0 -9
- package/lib/Styles/StyleSet/Avatar.d.ts.map +0 -1
- package/lib/Styles/StyleSet/Avatar.js +0 -18
- package/lib/Styles/StyleSet/BasicTranscript.d.ts +0 -85
- package/lib/Styles/StyleSet/BasicTranscript.d.ts.map +0 -1
- package/lib/Styles/StyleSet/BasicTranscript.js +0 -110
- package/lib/Styles/StyleSet/Bubble.d.ts +0 -5
- package/lib/Styles/StyleSet/Bubble.d.ts.map +0 -1
- package/lib/Styles/StyleSet/Bubble.js +0 -153
- package/lib/Styles/StyleSet/CSSCustomProperties.d.ts +0 -16
- package/lib/Styles/StyleSet/CSSCustomProperties.d.ts.map +0 -1
- package/lib/Styles/StyleSet/CSSCustomProperties.js +0 -27
- package/lib/Styles/StyleSet/CarouselFilmStrip.d.ts +0 -5
- package/lib/Styles/StyleSet/CarouselFilmStrip.d.ts.map +0 -1
- package/lib/Styles/StyleSet/CarouselFilmStrip.js +0 -90
- package/lib/Styles/StyleSet/CarouselFilmStripAttachment.d.ts +0 -3
- package/lib/Styles/StyleSet/CarouselFilmStripAttachment.d.ts.map +0 -1
- package/lib/Styles/StyleSet/CarouselFilmStripAttachment.js +0 -57
- package/lib/Styles/StyleSet/CarouselFlipper.d.ts +0 -27
- package/lib/Styles/StyleSet/CarouselFlipper.d.ts.map +0 -1
- package/lib/Styles/StyleSet/CarouselFlipper.js +0 -42
- package/lib/Styles/StyleSet/CitationModalDialog.d.ts +0 -8
- package/lib/Styles/StyleSet/CitationModalDialog.d.ts.map +0 -1
- package/lib/Styles/StyleSet/CitationModalDialog.js +0 -16
- package/lib/Styles/StyleSet/ConnectivityNotification.d.ts +0 -13
- package/lib/Styles/StyleSet/ConnectivityNotification.d.ts.map +0 -1
- package/lib/Styles/StyleSet/ConnectivityNotification.js +0 -26
- package/lib/Styles/StyleSet/Constants.d.ts +0 -6
- package/lib/Styles/StyleSet/Constants.d.ts.map +0 -1
- package/lib/Styles/StyleSet/Constants.js +0 -15
- package/lib/Styles/StyleSet/DictationInterims.d.ts +0 -13
- package/lib/Styles/StyleSet/DictationInterims.d.ts.map +0 -1
- package/lib/Styles/StyleSet/DictationInterims.js +0 -22
- package/lib/Styles/StyleSet/ErrorBox.d.ts +0 -33
- package/lib/Styles/StyleSet/ErrorBox.d.ts.map +0 -1
- package/lib/Styles/StyleSet/ErrorBox.js +0 -43
- package/lib/Styles/StyleSet/ErrorNotification.d.ts +0 -23
- package/lib/Styles/StyleSet/ErrorNotification.d.ts.map +0 -1
- package/lib/Styles/StyleSet/ErrorNotification.js +0 -36
- package/lib/Styles/StyleSet/FileContent.d.ts +0 -32
- package/lib/Styles/StyleSet/FileContent.d.ts.map +0 -1
- package/lib/Styles/StyleSet/FileContent.js +0 -43
- package/lib/Styles/StyleSet/ImageAvatar.d.ts +0 -7
- package/lib/Styles/StyleSet/ImageAvatar.d.ts.map +0 -1
- package/lib/Styles/StyleSet/ImageAvatar.js +0 -15
- package/lib/Styles/StyleSet/InitialsAvatar.d.ts +0 -19
- package/lib/Styles/StyleSet/InitialsAvatar.d.ts.map +0 -1
- package/lib/Styles/StyleSet/InitialsAvatar.js +0 -31
- package/lib/Styles/StyleSet/KeyboardHelp.d.ts +0 -152
- package/lib/Styles/StyleSet/KeyboardHelp.d.ts.map +0 -1
- package/lib/Styles/StyleSet/KeyboardHelp.js +0 -168
- package/lib/Styles/StyleSet/LinkDefinitions.d.ts +0 -165
- package/lib/Styles/StyleSet/LinkDefinitions.d.ts.map +0 -1
- package/lib/Styles/StyleSet/LinkDefinitions.js +0 -180
- package/lib/Styles/StyleSet/MicrophoneButton.d.ts +0 -13
- package/lib/Styles/StyleSet/MicrophoneButton.d.ts.map +0 -1
- package/lib/Styles/StyleSet/MicrophoneButton.js +0 -21
- package/lib/Styles/StyleSet/ModalDialog.d.ts +0 -94
- package/lib/Styles/StyleSet/ModalDialog.d.ts.map +0 -1
- package/lib/Styles/StyleSet/ModalDialog.js +0 -98
- package/lib/Styles/StyleSet/RenderMarkdown.d.ts +0 -51
- package/lib/Styles/StyleSet/RenderMarkdown.d.ts.map +0 -1
- package/lib/Styles/StyleSet/RenderMarkdown.js +0 -67
- package/lib/Styles/StyleSet/Root.d.ts +0 -8
- package/lib/Styles/StyleSet/Root.d.ts.map +0 -1
- package/lib/Styles/StyleSet/Root.js +0 -19
- package/lib/Styles/StyleSet/ScrollToEndButton.d.ts +0 -36
- package/lib/Styles/StyleSet/ScrollToEndButton.d.ts.map +0 -1
- package/lib/Styles/StyleSet/ScrollToEndButton.js +0 -55
- package/lib/Styles/StyleSet/SendBox.d.ts +0 -24
- package/lib/Styles/StyleSet/SendBox.d.ts.map +0 -1
- package/lib/Styles/StyleSet/SendBox.js +0 -37
- package/lib/Styles/StyleSet/SendBoxButton.d.ts +0 -79
- package/lib/Styles/StyleSet/SendBoxButton.d.ts.map +0 -1
- package/lib/Styles/StyleSet/SendBoxButton.js +0 -112
- package/lib/Styles/StyleSet/SendBoxTextBox.d.ts +0 -41
- package/lib/Styles/StyleSet/SendBoxTextBox.d.ts.map +0 -1
- package/lib/Styles/StyleSet/SendBoxTextBox.js +0 -57
- package/lib/Styles/StyleSet/SendStatus.d.ts +0 -19
- package/lib/Styles/StyleSet/SendStatus.d.ts.map +0 -1
- package/lib/Styles/StyleSet/SendStatus.js +0 -29
- package/lib/Styles/StyleSet/SingleAttachmentActivity.d.ts +0 -11
- package/lib/Styles/StyleSet/SingleAttachmentActivity.d.ts.map +0 -1
- package/lib/Styles/StyleSet/SingleAttachmentActivity.js +0 -21
- package/lib/Styles/StyleSet/SlottedActivityStatus.d.ts +0 -12
- package/lib/Styles/StyleSet/SlottedActivityStatus.d.ts.map +0 -1
- package/lib/Styles/StyleSet/SlottedActivityStatus.js +0 -22
- package/lib/Styles/StyleSet/SpinnerAnimation.d.ts +0 -15
- package/lib/Styles/StyleSet/SpinnerAnimation.d.ts.map +0 -1
- package/lib/Styles/StyleSet/SpinnerAnimation.js +0 -34
- package/lib/Styles/StyleSet/StackedLayout.d.ts +0 -63
- package/lib/Styles/StyleSet/StackedLayout.d.ts.map +0 -1
- package/lib/Styles/StyleSet/StackedLayout.js +0 -77
- package/lib/Styles/StyleSet/SuggestedAction.d.ts +0 -94
- package/lib/Styles/StyleSet/SuggestedAction.d.ts.map +0 -1
- package/lib/Styles/StyleSet/SuggestedAction.js +0 -152
- package/lib/Styles/StyleSet/SuggestedActions.d.ts +0 -139
- package/lib/Styles/StyleSet/SuggestedActions.d.ts.map +0 -1
- package/lib/Styles/StyleSet/SuggestedActions.js +0 -165
- package/lib/Styles/StyleSet/TextContent.d.ts +0 -24
- package/lib/Styles/StyleSet/TextContent.d.ts.map +0 -1
- package/lib/Styles/StyleSet/TextContent.js +0 -34
- package/lib/Styles/StyleSet/ThumbButton.d.ts +0 -32
- package/lib/Styles/StyleSet/ThumbButton.d.ts.map +0 -1
- package/lib/Styles/StyleSet/ThumbButton.js +0 -44
- package/lib/Styles/StyleSet/Toast.d.ts +0 -65
- package/lib/Styles/StyleSet/Toast.d.ts.map +0 -1
- package/lib/Styles/StyleSet/Toast.js +0 -83
- package/lib/Styles/StyleSet/Toaster.d.ts +0 -111
- package/lib/Styles/StyleSet/Toaster.d.ts.map +0 -1
- package/lib/Styles/StyleSet/Toaster.js +0 -137
- package/lib/Styles/StyleSet/TypingAnimation.d.ts +0 -8
- package/lib/Styles/StyleSet/TypingAnimation.d.ts.map +0 -1
- package/lib/Styles/StyleSet/TypingAnimation.js +0 -26
- package/lib/Styles/StyleSet/TypingIndicator.d.ts +0 -11
- package/lib/Styles/StyleSet/TypingIndicator.d.ts.map +0 -1
- package/lib/Styles/StyleSet/TypingIndicator.js +0 -19
- package/lib/Styles/StyleSet/UploadButton.d.ts +0 -14
- package/lib/Styles/StyleSet/UploadButton.d.ts.map +0 -1
- package/lib/Styles/StyleSet/UploadButton.js +0 -27
- package/lib/Styles/StyleSet/VideoAttachment.d.ts +0 -2
- package/lib/Styles/StyleSet/VideoAttachment.d.ts.map +0 -1
- package/lib/Styles/StyleSet/VideoAttachment.js +0 -10
- package/lib/Styles/StyleSet/VideoContent.d.ts +0 -6
- package/lib/Styles/StyleSet/VideoContent.d.ts.map +0 -1
- package/lib/Styles/StyleSet/VideoContent.js +0 -14
- package/lib/Styles/StyleSet/VimeoContent.d.ts +0 -7
- package/lib/Styles/StyleSet/VimeoContent.d.ts.map +0 -1
- package/lib/Styles/StyleSet/VimeoContent.js +0 -15
- package/lib/Styles/StyleSet/WarningNotification.d.ts +0 -22
- package/lib/Styles/StyleSet/WarningNotification.d.ts.map +0 -1
- package/lib/Styles/StyleSet/WarningNotification.js +0 -37
- package/lib/Styles/StyleSet/YouTubeContent.d.ts +0 -7
- package/lib/Styles/StyleSet/YouTubeContent.d.ts.map +0 -1
- package/lib/Styles/StyleSet/YouTubeContent.js +0 -15
- package/lib/Styles/createStyleSet.d.ts +0 -1803
- package/lib/Styles/createStyleSet.d.ts.map +0 -1
- package/lib/Styles/createStyleSet.js +0 -121
- package/lib/Styles/mirrorStyle.js +0 -40
- package/lib/Toast/CheckMarkIcon.js +0 -36
- package/lib/Toast/CollapseIcon.js +0 -32
- package/lib/Toast/DismissIcon.js +0 -32
- package/lib/Toast/ExclamationMarkIcon.js +0 -34
- package/lib/Toast/ExpandIcon.js +0 -32
- package/lib/Toast/NotificationIcon.js +0 -46
- package/lib/Toast/createToastMiddleware.d.ts +0 -4
- package/lib/Toast/createToastMiddleware.d.ts.map +0 -1
- package/lib/Toast/createToastMiddleware.js +0 -26
- package/lib/Transcript/ActivityRow.d.ts +0 -9
- package/lib/Transcript/ActivityRow.d.ts.map +0 -1
- package/lib/Transcript/ActivityRow.js +0 -137
- package/lib/Transcript/FocusTrap.d.ts +0 -9
- package/lib/Transcript/FocusTrap.d.ts.map +0 -1
- package/lib/Transcript/FocusTrap.js +0 -76
- package/lib/Transcript/KeyboardHelp.d.ts +0 -4
- package/lib/Transcript/KeyboardHelp.d.ts.map +0 -1
- package/lib/Transcript/KeyboardHelp.js +0 -562
- package/lib/Transcript/LiveRegion/SendFailed.d.ts +0 -14
- package/lib/Transcript/LiveRegion/SendFailed.d.ts.map +0 -1
- package/lib/Transcript/LiveRegion/SendFailed.js +0 -90
- package/lib/Transcript/LiveRegion/isPresentational.d.ts +0 -9
- package/lib/Transcript/LiveRegion/isPresentational.d.ts.map +0 -1
- package/lib/Transcript/LiveRegion/isPresentational.js +0 -30
- package/lib/Transcript/LiveRegionTranscript.d.ts +0 -8
- package/lib/Transcript/LiveRegionTranscript.d.ts.map +0 -1
- package/lib/Transcript/LiveRegionTranscript.js +0 -178
- package/lib/Transcript/types.d.ts +0 -2
- package/lib/Transcript/types.d.ts.map +0 -1
- package/lib/Transcript/types.js +0 -2
- package/lib/Transcript/useActivityAccessibleName.d.ts +0 -11
- package/lib/Transcript/useActivityAccessibleName.d.ts.map +0 -1
- package/lib/Transcript/useActivityAccessibleName.js +0 -103
- package/lib/Transcript/useTypistNames.d.ts +0 -3
- package/lib/Transcript/useTypistNames.d.ts.map +0 -1
- package/lib/Transcript/useTypistNames.js +0 -50
- package/lib/TranscriptActivity.d.ts +0 -17
- package/lib/TranscriptActivity.d.ts.map +0 -1
- package/lib/TranscriptActivity.js +0 -48
- package/lib/Utils/AccessKeySink/Surface.js +0 -74
- package/lib/Utils/AccessKeySink/internal/Context.js +0 -11
- package/lib/Utils/AccessKeySink/internal/useContext.js +0 -13
- package/lib/Utils/AccessKeySink/useFocusAccessKeyEffect.js +0 -34
- package/lib/Utils/AccessibleButton.d.ts +0 -11
- package/lib/Utils/AccessibleButton.d.ts.map +0 -1
- package/lib/Utils/AccessibleButton.js +0 -78
- package/lib/Utils/AccessibleInputText.d.ts +0 -22
- package/lib/Utils/AccessibleInputText.d.ts.map +0 -1
- package/lib/Utils/AccessibleInputText.js +0 -114
- package/lib/Utils/AccessibleTextArea.d.ts +0 -20
- package/lib/Utils/AccessibleTextArea.d.ts.map +0 -1
- package/lib/Utils/AccessibleTextArea.js +0 -105
- package/lib/Utils/CroppedImage.js +0 -61
- package/lib/Utils/FocusRedirector.d.ts +0 -9
- package/lib/Utils/FocusRedirector.d.ts.map +0 -1
- package/lib/Utils/FocusRedirector.js +0 -61
- package/lib/Utils/InlineMarkdown.js +0 -166
- package/lib/Utils/JSONLinkedData/BlankNode.d.ts +0 -15
- package/lib/Utils/JSONLinkedData/BlankNode.d.ts.map +0 -1
- package/lib/Utils/JSONLinkedData/BlankNode.js +0 -2
- package/lib/Utils/JSONLinkedData/__snapshots__/dereferenceBlankNodes.spec.ts.snap +0 -92
- package/lib/Utils/JSONLinkedData/dereferenceBlankNodes.d.ts +0 -16
- package/lib/Utils/JSONLinkedData/dereferenceBlankNodes.d.ts.map +0 -1
- package/lib/Utils/JSONLinkedData/dereferenceBlankNodes.js +0 -96
- package/lib/Utils/JSONLinkedData/dereferenceBlankNodes.spec.d.ts +0 -2
- package/lib/Utils/JSONLinkedData/dereferenceBlankNodes.spec.d.ts.map +0 -1
- package/lib/Utils/JSONLinkedData/getSafeOwnPropertyNames.d.ts +0 -10
- package/lib/Utils/JSONLinkedData/getSafeOwnPropertyNames.d.ts.map +0 -1
- package/lib/Utils/JSONLinkedData/getSafeOwnPropertyNames.js +0 -22
- package/lib/Utils/JSONLinkedData/isBlankNode.d.ts +0 -10
- package/lib/Utils/JSONLinkedData/isBlankNode.d.ts.map +0 -1
- package/lib/Utils/JSONLinkedData/isBlankNode.js +0 -22
- package/lib/Utils/JSONLinkedData/isBlankNode.spec.d.ts +0 -2
- package/lib/Utils/JSONLinkedData/isBlankNode.spec.d.ts.map +0 -1
- package/lib/Utils/JSONLinkedData/isUnconnectedBlankNode.d.ts +0 -10
- package/lib/Utils/JSONLinkedData/isUnconnectedBlankNode.d.ts.map +0 -1
- package/lib/Utils/JSONLinkedData/isUnconnectedBlankNode.js +0 -21
- package/lib/Utils/JSONLinkedData/isUnconnectedBlankNode.spec.d.ts +0 -2
- package/lib/Utils/JSONLinkedData/isUnconnectedBlankNode.spec.d.ts.map +0 -1
- package/lib/Utils/JSONLinkedData/visitOnce.d.ts +0 -2
- package/lib/Utils/JSONLinkedData/visitOnce.d.ts.map +0 -1
- package/lib/Utils/JSONLinkedData/visitOnce.js +0 -17
- package/lib/Utils/LocalizedString.d.ts +0 -26
- package/lib/Utils/LocalizedString.d.ts.map +0 -1
- package/lib/Utils/LocalizedString.js +0 -138
- package/lib/Utils/TypeFocusSink/Context.js +0 -14
- package/lib/Utils/TypeFocusSink/FocusBox.js +0 -91
- package/lib/Utils/TypeFocusSink/getTabIndex.d.ts +0 -2
- package/lib/Utils/TypeFocusSink/getTabIndex.d.ts.map +0 -1
- package/lib/Utils/TypeFocusSink/getTabIndex.js +0 -27
- package/lib/Utils/TypeFocusSink/index.js +0 -18
- package/lib/Utils/TypeFocusSink/inputtableKey.d.ts +0 -2
- package/lib/Utils/TypeFocusSink/inputtableKey.d.ts.map +0 -1
- package/lib/Utils/TypeFocusSink/inputtableKey.js +0 -28
- package/lib/Utils/TypeFocusSink/navigableEvent.js +0 -59
- package/lib/Utils/activityAltText.d.ts +0 -8
- package/lib/Utils/activityAltText.d.ts.map +0 -1
- package/lib/Utils/activityAltText.js +0 -79
- package/lib/Utils/addTargetBlankToHyperlinksMarkdown.js +0 -34
- package/lib/Utils/betterLinks.d.ts +0 -28
- package/lib/Utils/betterLinks.d.ts.map +0 -1
- package/lib/Utils/betterLinks.js +0 -142
- package/lib/Utils/computeSuggestedActionText.d.ts +0 -3
- package/lib/Utils/computeSuggestedActionText.d.ts.map +0 -1
- package/lib/Utils/computeSuggestedActionText.js +0 -24
- package/lib/Utils/createCSSKey.js +0 -16
- package/lib/Utils/createCustomEvent.js +0 -34
- package/lib/Utils/detectBrowser.js +0 -27
- package/lib/Utils/downscaleImageToDataURL/WorkerJob.d.ts +0 -16
- package/lib/Utils/downscaleImageToDataURL/WorkerJob.d.ts.map +0 -1
- package/lib/Utils/downscaleImageToDataURL/WorkerJob.js +0 -2
- package/lib/Utils/downscaleImageToDataURL/downscaleImageToDataURLUsingBrowser.d.ts +0 -2
- package/lib/Utils/downscaleImageToDataURL/downscaleImageToDataURLUsingBrowser.d.ts.map +0 -1
- package/lib/Utils/downscaleImageToDataURL/downscaleImageToDataURLUsingBrowser.js +0 -90
- package/lib/Utils/downscaleImageToDataURL/downscaleImageToDataURLUsingWorker.d.ts +0 -4
- package/lib/Utils/downscaleImageToDataURL/downscaleImageToDataURLUsingWorker.d.ts.map +0 -1
- package/lib/Utils/downscaleImageToDataURL/downscaleImageToDataURLUsingWorker.js +0 -198
- package/lib/Utils/downscaleImageToDataURL/downscaleImageToDataURLUsingWorker.worker.js +0 -96
- package/lib/Utils/downscaleImageToDataURL/index.d.ts +0 -2
- package/lib/Utils/downscaleImageToDataURL/index.d.ts.map +0 -1
- package/lib/Utils/downscaleImageToDataURL/index.js +0 -44
- package/lib/Utils/filterMap.js +0 -28
- package/lib/Utils/findAncestor.d.ts +0 -2
- package/lib/Utils/findAncestor.d.ts.map +0 -1
- package/lib/Utils/findAncestor.js +0 -15
- package/lib/Utils/firstTabbableDescendant.js +0 -40
- package/lib/Utils/getActivityUniqueId.d.ts +0 -3
- package/lib/Utils/getActivityUniqueId.d.ts.map +0 -1
- package/lib/Utils/getActivityUniqueId.js +0 -11
- package/lib/Utils/intersectionOf.d.ts +0 -5
- package/lib/Utils/intersectionOf.d.ts.map +0 -1
- package/lib/Utils/intersectionOf.js +0 -27
- package/lib/Utils/isZeroOrPositive.d.ts +0 -5
- package/lib/Utils/isZeroOrPositive.d.ts.map +0 -1
- package/lib/Utils/isZeroOrPositive.js +0 -14
- package/lib/Utils/mapMap.js +0 -27
- package/lib/Utils/parseDocumentFromString.d.ts +0 -2
- package/lib/Utils/parseDocumentFromString.d.ts.map +0 -1
- package/lib/Utils/parseDocumentFromString.js +0 -11
- package/lib/Utils/randomId.js +0 -15
- package/lib/Utils/readDataURIToBlob.js +0 -44
- package/lib/Utils/removeInline.js +0 -18
- package/lib/Utils/scrollIntoViewWithBlockNearest.d.ts +0 -7
- package/lib/Utils/scrollIntoViewWithBlockNearest.d.ts.map +0 -1
- package/lib/Utils/scrollIntoViewWithBlockNearest.js +0 -38
- package/lib/Utils/serializeDocumentIntoString.d.ts +0 -2
- package/lib/Utils/serializeDocumentIntoString.d.ts.map +0 -1
- package/lib/Utils/serializeDocumentIntoString.js +0 -27
- package/lib/Utils/shallowEquals.js +0 -21
- package/lib/Utils/singleToArray.d.ts +0 -2
- package/lib/Utils/singleToArray.d.ts.map +0 -1
- package/lib/Utils/singleToArray.js +0 -10
- package/lib/Utils/supportPseudoClass.d.ts +0 -2
- package/lib/Utils/supportPseudoClass.d.ts.map +0 -1
- package/lib/Utils/supportPseudoClass.js +0 -21
- package/lib/Utils/tabbableElements.d.ts +0 -2
- package/lib/Utils/tabbableElements.d.ts.map +0 -1
- package/lib/Utils/tabbableElements.js +0 -20
- package/lib/Utils/textFormatToContentType.js +0 -17
- package/lib/Utils/updateMarkdownAttrs.js +0 -16
- package/lib/Utils/walkMarkdownTokens.js +0 -19
- package/lib/hooks/index.d.ts +0 -22
- package/lib/hooks/index.d.ts.map +0 -1
- package/lib/hooks/index.js +0 -152
- package/lib/hooks/internal/BypassSpeechSynthesisPonyfill.js +0 -278
- package/lib/hooks/internal/UITracker.js +0 -39
- package/lib/hooks/internal/WebChatUIContext.d.ts +0 -8
- package/lib/hooks/internal/WebChatUIContext.d.ts.map +0 -1
- package/lib/hooks/internal/WebChatUIContext.js +0 -11
- package/lib/hooks/internal/createWaitUntilable.d.ts +0 -5
- package/lib/hooks/internal/createWaitUntilable.d.ts.map +0 -1
- package/lib/hooks/internal/createWaitUntilable.js +0 -50
- package/lib/hooks/internal/createWaitUntilable.spec.d.ts +0 -2
- package/lib/hooks/internal/createWaitUntilable.spec.d.ts.map +0 -1
- package/lib/hooks/internal/private/createOnEventShim.d.ts +0 -5
- package/lib/hooks/internal/private/createOnEventShim.d.ts.map +0 -1
- package/lib/hooks/internal/private/createOnEventShim.js +0 -25
- package/lib/hooks/internal/private/createOnEventShim.spec.d.ts +0 -2
- package/lib/hooks/internal/private/createOnEventShim.spec.d.ts.map +0 -1
- package/lib/hooks/internal/useChanged.d.ts +0 -9
- package/lib/hooks/internal/useChanged.d.ts.map +0 -1
- package/lib/hooks/internal/useChanged.js +0 -21
- package/lib/hooks/internal/useDispatchScrollPosition.js +0 -12
- package/lib/hooks/internal/useDispatchTranscriptFocusByActivityKey.d.ts +0 -2
- package/lib/hooks/internal/useDispatchTranscriptFocusByActivityKey.d.ts.map +0 -1
- package/lib/hooks/internal/useDispatchTranscriptFocusByActivityKey.js +0 -12
- package/lib/hooks/internal/useEnterKeyHint.js +0 -18
- package/lib/hooks/internal/useFocusVisible.d.ts +0 -3
- package/lib/hooks/internal/useFocusVisible.d.ts.map +0 -1
- package/lib/hooks/internal/useFocusVisible.js +0 -37
- package/lib/hooks/internal/useFocusWithin.d.ts +0 -3
- package/lib/hooks/internal/useFocusWithin.d.ts.map +0 -1
- package/lib/hooks/internal/useFocusWithin.js +0 -38
- package/lib/hooks/internal/useForceRender.js +0 -24
- package/lib/hooks/internal/useForceRenderAtInterval.d.ts +0 -3
- package/lib/hooks/internal/useForceRenderAtInterval.d.ts.map +0 -1
- package/lib/hooks/internal/useForceRenderAtInterval.js +0 -57
- package/lib/hooks/internal/useInternalMarkdownIt.js +0 -14
- package/lib/hooks/internal/useInternalRenderMarkdownInline.js +0 -16
- package/lib/hooks/internal/useLocalizeAccessKey.d.ts +0 -2
- package/lib/hooks/internal/useLocalizeAccessKey.d.ts.map +0 -1
- package/lib/hooks/internal/useLocalizeAccessKey.js +0 -38
- package/lib/hooks/internal/useMemoWithPrevious.d.ts +0 -3
- package/lib/hooks/internal/useMemoWithPrevious.d.ts.map +0 -1
- package/lib/hooks/internal/useMemoWithPrevious.js +0 -20
- package/lib/hooks/internal/useMemoized.d.ts +0 -11
- package/lib/hooks/internal/useMemoized.d.ts.map +0 -1
- package/lib/hooks/internal/useMemoized.js +0 -82
- package/lib/hooks/internal/useMemoized.spec.jsx +0 -159
- package/lib/hooks/internal/useNavigatorPlatform.js +0 -31
- package/lib/hooks/internal/useNonce.js +0 -14
- package/lib/hooks/internal/useObserveFocusVisible.d.ts +0 -3
- package/lib/hooks/internal/useObserveFocusVisible.d.ts.map +0 -1
- package/lib/hooks/internal/useObserveFocusVisible.js +0 -201
- package/lib/hooks/internal/usePrevious.d.ts +0 -2
- package/lib/hooks/internal/usePrevious.d.ts.map +0 -1
- package/lib/hooks/internal/usePrevious.js +0 -17
- package/lib/hooks/internal/useRegisterFocusTranscript.js +0 -27
- package/lib/hooks/internal/useRegisterScrollTo.js +0 -27
- package/lib/hooks/internal/useRegisterScrollToEnd.js +0 -25
- package/lib/hooks/internal/useReplaceEmoticon.js +0 -58
- package/lib/hooks/internal/useResumeAudioContext.d.ts +0 -2
- package/lib/hooks/internal/useResumeAudioContext.d.ts.map +0 -1
- package/lib/hooks/internal/useResumeAudioContext.js +0 -23
- package/lib/hooks/internal/useSendBoxFocusRef.js +0 -12
- package/lib/hooks/internal/useSettableDictateAbortable.js +0 -15
- package/lib/hooks/internal/useStateRef.d.ts +0 -3
- package/lib/hooks/internal/useStateRef.d.ts.map +0 -1
- package/lib/hooks/internal/useStateRef.js +0 -30
- package/lib/hooks/internal/useStyleToEmotionObject.js +0 -12
- package/lib/hooks/internal/useSuggestedActionsAccessKey.js +0 -14
- package/lib/hooks/internal/useTimer.d.ts +0 -5
- package/lib/hooks/internal/useTimer.d.ts.map +0 -1
- package/lib/hooks/internal/useTimer.js +0 -46
- package/lib/hooks/internal/useTranscriptActivityElementsRef.js +0 -12
- package/lib/hooks/internal/useTranscriptFocusRef.js +0 -12
- package/lib/hooks/internal/useUniqueId.d.ts +0 -2
- package/lib/hooks/internal/useUniqueId.d.ts.map +0 -1
- package/lib/hooks/internal/useUniqueId.js +0 -19
- package/lib/hooks/internal/useValueRef.d.ts +0 -3
- package/lib/hooks/internal/useValueRef.d.ts.map +0 -1
- package/lib/hooks/internal/useValueRef.js +0 -24
- package/lib/hooks/internal/useWebChatUIContext.js +0 -17
- package/lib/hooks/sendBoxFocus.d.ts +0 -7
- package/lib/hooks/sendBoxFocus.d.ts.map +0 -1
- package/lib/hooks/sendBoxFocus.js +0 -13
- package/lib/hooks/transcriptScrollRelative.d.ts +0 -7
- package/lib/hooks/transcriptScrollRelative.d.ts.map +0 -1
- package/lib/hooks/transcriptScrollRelative.js +0 -13
- package/lib/hooks/useDictateAbortable.d.ts +0 -2
- package/lib/hooks/useDictateAbortable.d.ts.map +0 -1
- package/lib/hooks/useDictateAbortable.js +0 -22
- package/lib/hooks/useFocus.d.ts +0 -2
- package/lib/hooks/useFocus.d.ts.map +0 -1
- package/lib/hooks/useFocus.js +0 -65
- package/lib/hooks/useMakeThumbnail.d.ts +0 -2
- package/lib/hooks/useMakeThumbnail.d.ts.map +0 -1
- package/lib/hooks/useMakeThumbnail.js +0 -74
- package/lib/hooks/useObserveScrollPosition.d.ts +0 -3
- package/lib/hooks/useObserveScrollPosition.d.ts.map +0 -1
- package/lib/hooks/useObserveScrollPosition.js +0 -31
- package/lib/hooks/useObserveTranscriptFocus.d.ts +0 -5
- package/lib/hooks/useObserveTranscriptFocus.d.ts.map +0 -1
- package/lib/hooks/useObserveTranscriptFocus.js +0 -31
- package/lib/hooks/useRenderMarkdownAsHTML.d.ts +0 -5
- package/lib/hooks/useRenderMarkdownAsHTML.d.ts.map +0 -1
- package/lib/hooks/useRenderMarkdownAsHTML.js +0 -62
- package/lib/hooks/useScrollDown.d.ts +0 -4
- package/lib/hooks/useScrollDown.d.ts.map +0 -1
- package/lib/hooks/useScrollDown.js +0 -20
- package/lib/hooks/useScrollTo.d.ts +0 -5
- package/lib/hooks/useScrollTo.d.ts.map +0 -1
- package/lib/hooks/useScrollTo.js +0 -22
- package/lib/hooks/useScrollToEnd.d.ts +0 -2
- package/lib/hooks/useScrollToEnd.d.ts.map +0 -1
- package/lib/hooks/useScrollToEnd.js +0 -21
- package/lib/hooks/useScrollUp.d.ts +0 -4
- package/lib/hooks/useScrollUp.d.ts.map +0 -1
- package/lib/hooks/useScrollUp.js +0 -20
- package/lib/hooks/useSendFiles.d.ts +0 -5
- package/lib/hooks/useSendFiles.d.ts.map +0 -1
- package/lib/hooks/useSendFiles.js +0 -63
- package/lib/hooks/useSendMessage.d.ts +0 -8
- package/lib/hooks/useSendMessage.d.ts.map +0 -1
- package/lib/hooks/useSendMessage.js +0 -102
- package/lib/hooks/useStyleSet.d.ts +0 -3
- package/lib/hooks/useStyleSet.d.ts.map +0 -1
- package/lib/hooks/useStyleSet.js +0 -13
- package/lib/hooks/useWebSpeechPonyfill.d.ts +0 -3
- package/lib/hooks/useWebSpeechPonyfill.d.ts.map +0 -1
- package/lib/hooks/useWebSpeechPonyfill.js +0 -12
- package/lib/index.d.ts +0 -330
- package/lib/index.d.ts.map +0 -1
- package/lib/index.js +0 -164
- package/lib/internal.d.ts +0 -4
- package/lib/internal.d.ts.map +0 -1
- package/lib/internal.js +0 -21
- package/lib/providers/ActivityTree/ActivityTreeComposer.d.ts +0 -7
- package/lib/providers/ActivityTree/ActivityTreeComposer.d.ts.map +0 -1
- package/lib/providers/ActivityTree/ActivityTreeComposer.js +0 -90
- package/lib/providers/ActivityTree/private/Context.d.ts +0 -9
- package/lib/providers/ActivityTree/private/Context.d.ts.map +0 -1
- package/lib/providers/ActivityTree/private/Context.js +0 -10
- package/lib/providers/ActivityTree/private/types.d.ts +0 -10
- package/lib/providers/ActivityTree/private/types.d.ts.map +0 -1
- package/lib/providers/ActivityTree/private/types.js +0 -2
- package/lib/providers/ActivityTree/private/useActivitiesWithRenderer.d.ts +0 -4
- package/lib/providers/ActivityTree/private/useActivitiesWithRenderer.d.ts.map +0 -1
- package/lib/providers/ActivityTree/private/useActivitiesWithRenderer.js +0 -36
- package/lib/providers/ActivityTree/private/useActivityTreeWithRenderer.d.ts +0 -5
- package/lib/providers/ActivityTree/private/useActivityTreeWithRenderer.d.ts.map +0 -1
- package/lib/providers/ActivityTree/private/useActivityTreeWithRenderer.js +0 -147
- package/lib/providers/ActivityTree/private/useContext.d.ts +0 -3
- package/lib/providers/ActivityTree/private/useContext.d.ts.map +0 -1
- package/lib/providers/ActivityTree/private/useContext.js +0 -18
- package/lib/providers/ActivityTree/useActivityTreeWithRenderer.d.ts +0 -8
- package/lib/providers/ActivityTree/useActivityTreeWithRenderer.d.ts.map +0 -1
- package/lib/providers/ActivityTree/useActivityTreeWithRenderer.js +0 -14
- package/lib/providers/LiveRegionTwin/LiveRegionTwinComposer.d.ts +0 -37
- package/lib/providers/LiveRegionTwin/LiveRegionTwinComposer.d.ts.map +0 -1
- package/lib/providers/LiveRegionTwin/LiveRegionTwinComposer.js +0 -145
- package/lib/providers/LiveRegionTwin/private/Context.d.ts +0 -10
- package/lib/providers/LiveRegionTwin/private/Context.d.ts.map +0 -1
- package/lib/providers/LiveRegionTwin/private/Context.js +0 -11
- package/lib/providers/LiveRegionTwin/private/LiveRegionTwinContainer.d.ts +0 -12
- package/lib/providers/LiveRegionTwin/private/LiveRegionTwinContainer.d.ts.map +0 -1
- package/lib/providers/LiveRegionTwin/private/LiveRegionTwinContainer.js +0 -77
- package/lib/providers/LiveRegionTwin/private/types.d.ts +0 -8
- package/lib/providers/LiveRegionTwin/private/types.d.ts.map +0 -1
- package/lib/providers/LiveRegionTwin/private/types.js +0 -2
- package/lib/providers/LiveRegionTwin/private/useContext.d.ts +0 -3
- package/lib/providers/LiveRegionTwin/private/useContext.d.ts.map +0 -1
- package/lib/providers/LiveRegionTwin/private/useContext.js +0 -18
- package/lib/providers/LiveRegionTwin/private/useMarkAllAsRenderedEffect.d.ts +0 -2
- package/lib/providers/LiveRegionTwin/private/useMarkAllAsRenderedEffect.d.ts.map +0 -1
- package/lib/providers/LiveRegionTwin/private/useMarkAllAsRenderedEffect.js +0 -20
- package/lib/providers/LiveRegionTwin/private/useStaticElementEntries.d.ts +0 -3
- package/lib/providers/LiveRegionTwin/private/useStaticElementEntries.d.ts.map +0 -1
- package/lib/providers/LiveRegionTwin/private/useStaticElementEntries.js +0 -12
- package/lib/providers/LiveRegionTwin/useQueueStaticElement.d.ts +0 -8
- package/lib/providers/LiveRegionTwin/useQueueStaticElement.d.ts.map +0 -1
- package/lib/providers/LiveRegionTwin/useQueueStaticElement.js +0 -17
- package/lib/providers/ModalDialog/ModalDialogComposer.d.ts +0 -7
- package/lib/providers/ModalDialog/ModalDialogComposer.d.ts.map +0 -1
- package/lib/providers/ModalDialog/ModalDialogComposer.js +0 -51
- package/lib/providers/ModalDialog/private/Context.d.ts +0 -13
- package/lib/providers/ModalDialog/private/Context.d.ts.map +0 -1
- package/lib/providers/ModalDialog/private/Context.js +0 -24
- package/lib/providers/ModalDialog/private/Popover.d.ts +0 -10
- package/lib/providers/ModalDialog/private/Popover.d.ts.map +0 -1
- package/lib/providers/ModalDialog/private/Popover.js +0 -79
- package/lib/providers/ModalDialog/private/useContext.d.ts +0 -4
- package/lib/providers/ModalDialog/private/useContext.d.ts.map +0 -1
- package/lib/providers/ModalDialog/private/useContext.js +0 -13
- package/lib/providers/ModalDialog/useClose.d.ts +0 -3
- package/lib/providers/ModalDialog/useClose.d.ts.map +0 -1
- package/lib/providers/ModalDialog/useClose.js +0 -12
- package/lib/providers/ModalDialog/useShowModal.d.ts +0 -3
- package/lib/providers/ModalDialog/useShowModal.d.ts.map +0 -1
- package/lib/providers/ModalDialog/useShowModal.js +0 -12
- package/lib/providers/RovingTabIndex/RovingTabIndexComposer.d.ts +0 -8
- package/lib/providers/RovingTabIndex/RovingTabIndexComposer.d.ts.map +0 -1
- package/lib/providers/RovingTabIndex/RovingTabIndexComposer.js +0 -163
- package/lib/providers/RovingTabIndex/private/Context.d.ts +0 -8
- package/lib/providers/RovingTabIndex/private/Context.d.ts.map +0 -1
- package/lib/providers/RovingTabIndex/private/Context.js +0 -17
- package/lib/providers/RovingTabIndex/private/useContext.d.ts +0 -2
- package/lib/providers/RovingTabIndex/private/useContext.d.ts.map +0 -1
- package/lib/providers/RovingTabIndex/private/useContext.js +0 -18
- package/lib/providers/RovingTabIndex/useItemRef.d.ts +0 -3
- package/lib/providers/RovingTabIndex/useItemRef.d.ts.map +0 -1
- package/lib/providers/RovingTabIndex/useItemRef.js +0 -19
- package/lib/providers/Theme/ThemeProvider.d.ts +0 -7
- package/lib/providers/Theme/ThemeProvider.d.ts.map +0 -1
- package/lib/providers/Theme/ThemeProvider.js +0 -103
- package/lib/providers/Theme/private/Context.d.ts +0 -19
- package/lib/providers/Theme/private/Context.d.ts.map +0 -1
- package/lib/providers/Theme/private/Context.js +0 -26
- package/lib/providers/Theme/useTheme.d.ts +0 -2
- package/lib/providers/Theme/useTheme.d.ts.map +0 -1
- package/lib/providers/Theme/useTheme.js +0 -13
- package/lib/providers/TranscriptFocus/TranscriptFocusComposer.d.ts +0 -7
- package/lib/providers/TranscriptFocus/TranscriptFocusComposer.d.ts.map +0 -1
- package/lib/providers/TranscriptFocus/TranscriptFocusComposer.js +0 -153
- package/lib/providers/TranscriptFocus/private/Context.d.ts +0 -12
- package/lib/providers/TranscriptFocus/private/Context.d.ts.map +0 -1
- package/lib/providers/TranscriptFocus/private/Context.js +0 -11
- package/lib/providers/TranscriptFocus/private/useContext.d.ts +0 -2
- package/lib/providers/TranscriptFocus/private/useContext.d.ts.map +0 -1
- package/lib/providers/TranscriptFocus/private/useContext.js +0 -18
- package/lib/providers/TranscriptFocus/useActiveDescendantId.d.ts +0 -2
- package/lib/providers/TranscriptFocus/useActiveDescendantId.d.ts.map +0 -1
- package/lib/providers/TranscriptFocus/useActiveDescendantId.js +0 -12
- package/lib/providers/TranscriptFocus/useFocusByActivityKey.d.ts +0 -8
- package/lib/providers/TranscriptFocus/useFocusByActivityKey.d.ts.map +0 -1
- package/lib/providers/TranscriptFocus/useFocusByActivityKey.js +0 -18
- package/lib/providers/TranscriptFocus/useFocusRelativeActivity.d.ts +0 -2
- package/lib/providers/TranscriptFocus/useFocusRelativeActivity.d.ts.map +0 -1
- package/lib/providers/TranscriptFocus/useFocusRelativeActivity.js +0 -12
- package/lib/providers/TranscriptFocus/useFocusedActivityKey.d.ts +0 -2
- package/lib/providers/TranscriptFocus/useFocusedActivityKey.d.ts.map +0 -1
- package/lib/providers/TranscriptFocus/useFocusedActivityKey.js +0 -12
- package/lib/providers/TranscriptFocus/useFocusedExplicitly.d.ts +0 -2
- package/lib/providers/TranscriptFocus/useFocusedExplicitly.d.ts.map +0 -1
- package/lib/providers/TranscriptFocus/useFocusedExplicitly.js +0 -12
- package/lib/providers/TranscriptFocus/useGetDescendantIdByActivityKey.d.ts +0 -2
- package/lib/providers/TranscriptFocus/useGetDescendantIdByActivityKey.d.ts.map +0 -1
- package/lib/providers/TranscriptFocus/useGetDescendantIdByActivityKey.js +0 -12
- package/lib/providers/internal/SendBox/SendBoxComposer.d.ts +0 -4
- package/lib/providers/internal/SendBox/SendBoxComposer.d.ts.map +0 -1
- package/lib/providers/internal/SendBox/SendBoxComposer.js +0 -161
- package/lib/providers/internal/SendBox/private/Context.d.ts +0 -4
- package/lib/providers/internal/SendBox/private/Context.d.ts.map +0 -1
- package/lib/providers/internal/SendBox/private/Context.js +0 -11
- package/lib/providers/internal/SendBox/private/types.d.ts +0 -8
- package/lib/providers/internal/SendBox/private/types.d.ts.map +0 -1
- package/lib/providers/internal/SendBox/private/types.js +0 -2
- package/lib/providers/internal/SendBox/private/useContext.d.ts +0 -3
- package/lib/providers/internal/SendBox/private/useContext.d.ts.map +0 -1
- package/lib/providers/internal/SendBox/private/useContext.js +0 -17
- package/lib/providers/internal/SendBox/useErrorMessageId.d.ts +0 -12
- package/lib/providers/internal/SendBox/useErrorMessageId.d.ts.map +0 -1
- package/lib/providers/internal/SendBox/useErrorMessageId.js +0 -22
- package/lib/providers/internal/SendBox/useSubmit.d.ts +0 -14
- package/lib/providers/internal/SendBox/useSubmit.d.ts.map +0 -1
- package/lib/providers/internal/SendBox/useSubmit.js +0 -20
- package/lib/tsconfig.json +0 -18
- package/lib/types/ContextOf.d.ts +0 -4
- package/lib/types/ContextOf.d.ts.map +0 -1
- package/lib/types/ContextOf.js +0 -2
- package/lib/types/PropsOf.d.ts +0 -3
- package/lib/types/PropsOf.d.ts.map +0 -1
- package/lib/types/PropsOf.js +0 -2
- package/lib/types/ScrollPosition.d.ts +0 -6
- package/lib/types/ScrollPosition.d.ts.map +0 -1
- package/lib/types/ScrollPosition.js +0 -2
- package/lib/types/internal/FocusTranscriptInit.d.ts +0 -4
- package/lib/types/internal/FocusTranscriptInit.d.ts.map +0 -1
- package/lib/types/internal/FocusTranscriptInit.js +0 -2
- package/lib/types/internal/SendStatus.d.ts +0 -7
- package/lib/types/internal/SendStatus.d.ts.map +0 -1
- package/lib/types/internal/SendStatus.js +0 -19
- package/lib/types/internal/TypeOfArray.d.ts +0 -2
- package/lib/types/internal/TypeOfArray.d.ts.map +0 -1
- package/lib/types/internal/TypeOfArray.js +0 -2
- package/lib/withEmoji/private/UndoEntry.d.ts +0 -9
- package/lib/withEmoji/private/UndoEntry.d.ts.map +0 -1
- package/lib/withEmoji/private/UndoEntry.js +0 -69
- package/lib/withEmoji/private/useUndoStack.d.ts +0 -6
- package/lib/withEmoji/private/useUndoStack.d.ts.map +0 -1
- package/lib/withEmoji/private/useUndoStack.js +0 -64
- package/lib/withEmoji/withEmoji.d.ts +0 -15
- package/lib/withEmoji/withEmoji.d.ts.map +0 -1
- package/lib/withEmoji/withEmoji.js +0 -128
- package/src/Activity/SayAlt.js +0 -26
- package/src/ActivityStatus/AbsoluteTime.js +0 -32
- package/src/ActivityStatus/Slotted.tsx +0 -26
- package/src/ActivityStatus/private/Feedback/Feedback.tsx +0 -60
- package/src/ActivityStatus/private/Feedback/private/ThumbButton.Image.tsx +0 -30
- package/src/ActivityStatus/private/Feedback/private/ThumbButton.tsx +0 -54
- package/src/ActivityStatus/private/Feedback/private/VoteButton.tsx +0 -36
- package/src/ActivityStatus/private/Feedback/private/icons/ThumbDislike16Filled.tsx +0 -16
- package/src/ActivityStatus/private/Feedback/private/icons/ThumbDislike16Regular.tsx +0 -16
- package/src/ActivityStatus/private/Feedback/private/icons/ThumbLike16Filled.tsx +0 -16
- package/src/ActivityStatus/private/Feedback/private/icons/ThumbLike16Regular.tsx +0 -16
- package/src/ActivityStatus/private/RelativeTime.js +0 -31
- package/src/Attachment/Assets/DownloadIcon.js +0 -29
- package/src/Attachment/ImageAttachment.js +0 -37
- package/src/Avatar/ImageAvatar.js +0 -49
- package/src/Avatar/InitialsAvatar.js +0 -50
- package/src/ConnectivityStatus/Connecting.js +0 -72
- package/src/LinkDefinition/private/Chevron.tsx +0 -21
- package/src/Middleware/Activity/createCoreMiddleware.tsx +0 -102
- package/src/Middleware/Avatar/createCoreMiddleware.tsx +0 -76
- package/src/Middleware/ScrollToEndButton/ScrollToEndButton.js +0 -45
- package/src/SendBox/Assets/MicrophoneIcon.js +0 -12
- package/src/SendBox/Assets/SendIcon.js +0 -36
- package/src/Styles/StyleSet/CSSCustomProperties.ts +0 -46
- package/src/Styles/StyleSet/KeyboardHelp.ts +0 -204
- package/src/Styles/StyleSet/SingleAttachmentActivity.ts +0 -18
- package/src/Styles/StyleSet/SlottedActivityStatus.ts +0 -16
- package/src/Transcript/KeyboardHelp.tsx +0 -319
- package/src/TranscriptActivity.tsx +0 -64
- package/src/Utils/AccessKeySink/Surface.js +0 -56
- package/src/Utils/CroppedImage.js +0 -45
- package/src/Utils/parseDocumentFromString.ts +0 -5
- package/src/Utils/readDataURIToBlob.js +0 -31
- package/src/Utils/serializeDocumentIntoString.ts +0 -10
- package/src/Utils/singleToArray.ts +0 -3
- package/src/Utils/textFormatToContentType.js +0 -12
- package/src/hooks/internal/useMemoWithPrevious.ts +0 -16
- package/src/hooks/internal/useNonce.js +0 -7
- package/src/hooks/internal/useStyleToEmotionObject.js +0 -5
- package/src/internal.ts +0 -4
- package/src/providers/ActivityTree/ActivityTreeComposer.tsx +0 -90
- package/src/providers/ActivityTree/private/Context.ts +0 -12
- package/src/providers/ActivityTree/private/types.ts +0 -12
- package/src/providers/ActivityTree/private/useActivitiesWithRenderer.ts +0 -40
- package/src/providers/ActivityTree/private/useActivityTreeWithRenderer.ts +0 -140
- package/src/providers/ActivityTree/private/useContext.ts +0 -15
- package/src/providers/ActivityTree/useActivityTreeWithRenderer.ts +0 -16
- package/src/providers/LiveRegionTwin/LiveRegionTwinComposer.tsx +0 -172
- package/src/providers/LiveRegionTwin/private/Context.ts +0 -15
package/lib/BasicTranscript.js
DELETED
|
@@ -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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
|