@cometchat/chat-uikit-angular 4.3.36 → 5.0.0-beta.2
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/README.md +41 -14
- package/fesm2022/cometchat-chat-uikit-angular.mjs +107859 -0
- package/fesm2022/cometchat-chat-uikit-angular.mjs.map +1 -0
- package/package.json +14 -21
- package/screenshots/sample_app_overview.png +0 -0
- package/src/lib/assets/Collaborative-Whiteboard-Preview-Light.png +0 -0
- package/src/lib/assets/Collaborative-document-Preview-light.png +0 -0
- package/src/lib/assets/Collaborative_Document_Dark.png +0 -0
- package/src/lib/assets/Collaborative_Document_Light.png +0 -0
- package/src/lib/assets/Collaborative_Whiteboard_Dark.png +0 -0
- package/src/lib/assets/Collaborative_Whiteboard_Light.png +0 -0
- package/src/lib/assets/Copy.svg +5 -0
- package/src/lib/assets/Info.svg +8 -0
- package/src/lib/assets/Profile.png +0 -0
- package/src/lib/assets/Send.svg +3 -0
- package/src/lib/assets/Spinner-Gradient-1.svg +12 -0
- package/src/lib/assets/account_circle.svg +8 -0
- package/src/lib/assets/activity.svg +10 -0
- package/src/lib/assets/add.svg +8 -0
- package/src/lib/assets/add_a_photo.svg +8 -0
- package/src/lib/assets/add_box.svg +8 -0
- package/src/lib/assets/add_call.svg +8 -0
- package/src/lib/assets/add_circle.svg +3 -0
- package/src/lib/assets/add_circle_fill.svg +3 -0
- package/src/lib/assets/add_comment.svg +8 -0
- package/src/lib/assets/add_reaction.svg +8 -0
- package/src/lib/assets/add_reaction_icon.svg +5 -0
- package/src/lib/assets/ai_conversation_summary.svg +3 -0
- package/src/lib/assets/ai_fill.svg +4 -0
- package/src/lib/assets/ai_suggest_reply.svg +3 -0
- package/src/lib/assets/alternate_email.svg +8 -0
- package/src/lib/assets/animals_nature.svg +10 -0
- package/src/lib/assets/archive.svg +8 -0
- package/src/lib/assets/arrow_back.svg +8 -0
- package/src/lib/assets/arrow_forward.svg +8 -0
- package/src/lib/assets/attach_file.svg +8 -0
- package/src/lib/assets/audio_call_button.svg +5 -0
- package/src/lib/assets/audio_filter_icon.svg +3 -0
- package/src/lib/assets/bar_chart.svg +3 -0
- package/src/lib/assets/bedtime.svg +8 -0
- package/src/lib/assets/block.svg +8 -0
- package/src/lib/assets/bold-format.svg +3 -0
- package/src/lib/assets/bookmark.svg +8 -0
- package/src/lib/assets/bookmark_add.svg +8 -0
- package/src/lib/assets/bullet-list-format.svg +3 -0
- package/src/lib/assets/calendar_add_on.svg +8 -0
- package/src/lib/assets/calendar_today.svg +8 -0
- package/src/lib/assets/call-log-audio.svg +3 -0
- package/src/lib/assets/call-log_video.svg +3 -0
- package/src/lib/assets/call-logs_empty_state.svg +8 -0
- package/src/lib/assets/call-logs_empty_state_dark.svg +8 -0
- package/src/lib/assets/call.svg +8 -0
- package/src/lib/assets/call_end.svg +8 -0
- package/src/lib/assets/call_end_no_fill.svg +3 -0
- package/src/lib/assets/call_log.svg +8 -0
- package/src/lib/assets/call_made.svg +8 -0
- package/src/lib/assets/call_missed.svg +8 -0
- package/src/lib/assets/call_missed_outgoing.svg +8 -0
- package/src/lib/assets/call_received.svg +8 -0
- package/src/lib/assets/cancel.svg +8 -0
- package/src/lib/assets/cancel_fill.svg +8 -0
- package/src/lib/assets/change_circle.svg +3 -0
- package/src/lib/assets/change_scope.png +0 -0
- package/src/lib/assets/chat-history.svg +3 -0
- package/src/lib/assets/chat.svg +8 -0
- package/src/lib/assets/chat_bot.svg +3 -0
- package/src/lib/assets/chats_filter_icon.svg +1 -0
- package/src/lib/assets/check.svg +8 -0
- package/src/lib/assets/check_circle.svg +3 -0
- package/src/lib/assets/checkbox_tick.svg +5 -0
- package/src/lib/assets/chevron_left.svg +8 -0
- package/src/lib/assets/chevron_right.svg +8 -0
- package/src/lib/assets/circle.svg +3 -0
- package/src/lib/assets/close.svg +8 -0
- package/src/lib/assets/code-block-format.svg +3 -0
- package/src/lib/assets/code-format.svg +3 -0
- package/src/lib/assets/collaborative_document_fill.svg +4 -0
- package/src/lib/assets/collaborative_whiteboard.svg +4 -0
- package/src/lib/assets/collaborative_whiteboard_fill.svg +4 -0
- package/src/lib/assets/collabrative_document.svg +4 -0
- package/src/lib/assets/content_copy.svg +8 -0
- package/src/lib/assets/conversation_summary.svg +4 -0
- package/src/lib/assets/conversations_audio-message.svg +8 -0
- package/src/lib/assets/conversations_card-message.svg +8 -0
- package/src/lib/assets/conversations_collaborative-document-message.svg +4 -0
- package/src/lib/assets/conversations_collaborative-whiteboard-message.svg +5 -0
- package/src/lib/assets/conversations_delete.svg +8 -0
- package/src/lib/assets/conversations_delivered.svg +3 -0
- package/src/lib/assets/conversations_dropdown.svg +3 -0
- package/src/lib/assets/conversations_empty_state.svg +20 -0
- package/src/lib/assets/conversations_empty_state_dark.svg +20 -0
- package/src/lib/assets/conversations_error.svg +16 -0
- package/src/lib/assets/conversations_file-message.svg +8 -0
- package/src/lib/assets/conversations_form-message.svg +3 -0
- package/src/lib/assets/conversations_image-message.svg +8 -0
- package/src/lib/assets/conversations_incoming-video-call.svg +8 -0
- package/src/lib/assets/conversations_incoming-voice-call.svg +3 -0
- package/src/lib/assets/conversations_link.svg +8 -0
- package/src/lib/assets/conversations_missed-video-call.svg +8 -0
- package/src/lib/assets/conversations_missed-voice-call.svg +3 -0
- package/src/lib/assets/conversations_outgoing-video-call.svg +8 -0
- package/src/lib/assets/conversations_outgoing-voice-call.svg +4 -0
- package/src/lib/assets/conversations_poll-message.svg +3 -0
- package/src/lib/assets/conversations_read.svg +3 -0
- package/src/lib/assets/conversations_schedular-message.svg +8 -0
- package/src/lib/assets/conversations_sent.svg +3 -0
- package/src/lib/assets/conversations_sticker-message.svg +4 -0
- package/src/lib/assets/conversations_thread.svg +8 -0
- package/src/lib/assets/conversations_video-message.svg +8 -0
- package/{assets/wait.svg → src/lib/assets/conversations_wait.svg} +0 -0
- package/src/lib/assets/copy-text.svg +3 -0
- package/src/lib/assets/crop.svg +8 -0
- package/src/lib/assets/delete.svg +8 -0
- package/src/lib/assets/delete_icon.svg +4 -0
- package/src/lib/assets/deliveredIcon.svg +5 -0
- package/src/lib/assets/description.svg +8 -0
- package/src/lib/assets/document_icon.svg +10 -0
- package/src/lib/assets/done_all.svg +8 -0
- package/src/lib/assets/download.svg +8 -0
- package/src/lib/assets/dropdown-arrow.svg +3 -0
- package/src/lib/assets/edit.svg +8 -0
- package/src/lib/assets/edit_calendar.svg +8 -0
- package/src/lib/assets/edit_icon.svg +5 -0
- package/src/lib/assets/edit_square.svg +3 -0
- package/src/lib/assets/error.svg +9 -0
- package/src/lib/assets/error_icon.svg +3 -0
- package/src/lib/assets/error_info.svg +3 -0
- package/src/lib/assets/event.svg +8 -0
- package/src/lib/assets/favorite.svg +8 -0
- package/src/lib/assets/file_filter_icon.svg +4 -0
- package/src/lib/assets/file_type_jpg.png +0 -0
- package/src/lib/assets/file_type_link.png +0 -0
- package/src/lib/assets/file_type_mov.png +0 -0
- package/src/lib/assets/file_type_mp3.png +0 -0
- package/src/lib/assets/file_type_pdf.png +0 -0
- package/src/lib/assets/file_type_ppt.png +0 -0
- package/src/lib/assets/file_type_txt.png +0 -0
- package/src/lib/assets/file_type_unsupported.png +0 -0
- package/src/lib/assets/file_type_word.png +0 -0
- package/src/lib/assets/file_type_xlsx.png +0 -0
- package/src/lib/assets/file_type_zip.png +0 -0
- package/src/lib/assets/filter_list.svg +8 -0
- package/src/lib/assets/filter_list_off.svg +8 -0
- package/src/lib/assets/flags.svg +5 -0
- package/src/lib/assets/flip_camera_ios.svg +8 -0
- package/src/lib/assets/food_drink.svg +10 -0
- package/src/lib/assets/forward.svg +8 -0
- package/src/lib/assets/gif.svg +3 -0
- package/src/lib/assets/graphic_eq.svg +3 -0
- package/src/lib/assets/group_filter_icon.svg +3 -0
- package/src/lib/assets/groups_empty_state.svg +8 -0
- package/src/lib/assets/groups_empty_state_dark.svg +8 -0
- package/src/lib/assets/help.svg +8 -0
- package/src/lib/assets/history.svg +8 -0
- package/src/lib/assets/image_placeholder.png +0 -0
- package/src/lib/assets/incoming_video.svg +8 -0
- package/src/lib/assets/incoming_video_no_fill.svg +4 -0
- package/src/lib/assets/info_icon.svg +3 -0
- package/src/lib/assets/info_icon_fill.svg +5 -0
- package/src/lib/assets/italic-format.svg +3 -0
- package/src/lib/assets/keep.svg +8 -0
- package/src/lib/assets/keep_off.svg +8 -0
- package/src/lib/assets/keyboard.svg +8 -0
- package/src/lib/assets/keyboard_arrow_down.svg +8 -0
- package/src/lib/assets/keyboard_arrow_up.svg +8 -0
- package/src/lib/assets/language.svg +8 -0
- package/src/lib/assets/link.svg +8 -0
- package/src/lib/assets/link_filter_icon.svg +3 -0
- package/src/lib/assets/link_icon_2x.svg +3 -0
- package/src/lib/assets/list_error_state_icon.svg +20 -0
- package/src/lib/assets/list_error_state_icon_dark.svg +27 -0
- package/src/lib/assets/loading.svg +5 -0
- package/src/lib/assets/loading_animation.svg +5 -0
- package/src/lib/assets/loading_icon.svg +3 -0
- package/src/lib/assets/location_on.svg +8 -0
- package/src/lib/assets/lock.svg +8 -0
- package/src/lib/assets/lock_open.svg +8 -0
- package/src/lib/assets/logout.svg +3 -0
- package/src/lib/assets/mail.svg +8 -0
- package/src/lib/assets/message_blocked.svg +8 -0
- package/src/lib/assets/message_delete.svg +8 -0
- package/src/lib/assets/messages_filter_icon.svg +1 -0
- package/src/lib/assets/mic.svg +3 -0
- package/src/lib/assets/mic_fill.svg +8 -0
- package/src/lib/assets/mic_off.svg +8 -0
- package/src/lib/assets/missedCallIcon.svg +10 -0
- package/src/lib/assets/missed_video_call.svg +8 -0
- package/src/lib/assets/missed_video_call_no_fill.svg +3 -0
- package/src/lib/assets/mood.svg +3 -0
- package/src/lib/assets/mood_fill.svg +8 -0
- package/src/lib/assets/more_icon.svg +5 -0
- package/src/lib/assets/more_vert.svg +8 -0
- package/src/lib/assets/near_me.svg +3 -0
- package/src/lib/assets/new-chat.svg +3 -0
- package/src/lib/assets/no-messages.svg +8 -0
- package/src/lib/assets/no_photography.svg +8 -0
- package/src/lib/assets/notifications.svg +8 -0
- package/src/lib/assets/notifications_off.svg +8 -0
- package/src/lib/assets/number-list-format.svg +3 -0
- package/src/lib/assets/objects.svg +10 -0
- package/src/lib/assets/outgoing_video.svg +8 -0
- package/src/lib/assets/outgoing_video_no_fill.svg +4 -0
- package/src/lib/assets/pause.svg +8 -0
- package/src/lib/assets/person.svg +8 -0
- package/src/lib/assets/person_add.svg +8 -0
- package/src/lib/assets/phone_in_talk.svg +8 -0
- package/src/lib/assets/phone_incoming.svg +3 -0
- package/src/lib/assets/phone_incoming_no_fill.svg +3 -0
- package/src/lib/assets/phone_missed.svg +8 -0
- package/src/lib/assets/phone_missed_no_fill.svg +3 -0
- package/src/lib/assets/phone_outgoing.svg +4 -0
- package/src/lib/assets/phone_outgoing_no_fill.svg +4 -0
- package/src/lib/assets/photo.svg +8 -0
- package/src/lib/assets/photo_camera.svg +8 -0
- package/src/lib/assets/photo_filter_icon.svg +3 -0
- package/src/lib/assets/placeholder.png +0 -0
- package/src/lib/assets/play_arrow.svg +8 -0
- package/src/lib/assets/play_circle.svg +8 -0
- package/src/lib/assets/poll.svg +5 -0
- package/src/lib/assets/quote-format.svg +3 -0
- package/src/lib/assets/readIcon.svg +5 -0
- package/src/lib/assets/rearrange.svg +3 -0
- package/src/lib/assets/recording_icon.svg +10 -0
- package/src/lib/assets/recording_resume.svg +10 -0
- package/src/lib/assets/refresh.svg +8 -0
- package/src/lib/assets/reply.svg +8 -0
- package/src/lib/assets/reply_all.svg +8 -0
- package/src/lib/assets/reply_in_thread.svg +10 -0
- package/src/lib/assets/retry.svg +3 -0
- package/src/lib/assets/right-arrow.svg +3 -0
- package/src/lib/assets/sample-audio.wav +0 -0
- package/src/lib/assets/sample-video-thumbnail.svg +7 -0
- package/src/lib/assets/sample-video.mp4 +0 -0
- package/src/lib/assets/schedule.svg +8 -0
- package/src/lib/assets/screen_share.svg +8 -0
- package/src/lib/assets/search.svg +8 -0
- package/src/lib/assets/search_message_icon.svg +8 -0
- package/src/lib/assets/send-message.svg +3 -0
- package/src/lib/assets/send_fill.svg +8 -0
- package/src/lib/assets/settings.svg +8 -0
- package/src/lib/assets/share.svg +8 -0
- package/src/lib/assets/shield.svg +3 -0
- package/src/lib/assets/smileys_people.svg +10 -0
- package/src/lib/assets/star.svg +8 -0
- package/src/lib/assets/status_delivered.svg +5 -0
- package/src/lib/assets/status_error.svg +16 -0
- package/src/lib/assets/status_read.svg +3 -0
- package/src/lib/assets/status_sending.svg +5 -0
- package/src/lib/assets/status_sent.svg +5 -0
- package/src/lib/assets/sticker.svg +3 -0
- package/src/lib/assets/sticker_fill.svg +4 -0
- package/src/lib/assets/stop-message.svg +3 -0
- package/src/lib/assets/stop.svg +8 -0
- package/src/lib/assets/stop_circle.svg +8 -0
- package/src/lib/assets/stop_screen_share.svg +8 -0
- package/src/lib/assets/strike-out-format.svg +3 -0
- package/src/lib/assets/subdirectory_arrow_left.svg +8 -0
- package/src/lib/assets/subdirectory_arrow_right.svg +8 -0
- package/src/lib/assets/sunny.svg +8 -0
- package/src/lib/assets/symbols.svg +13 -0
- package/src/lib/assets/thumb_down.svg +8 -0
- package/src/lib/assets/thumb_up.svg +8 -0
- package/src/lib/assets/toast_check_circle.svg +3 -0
- package/src/lib/assets/toast_error.svg +3 -0
- package/src/lib/assets/toast_info.svg +3 -0
- package/src/lib/assets/toast_warning.svg +3 -0
- package/src/lib/assets/toolbar-toggle.svg +3 -0
- package/src/lib/assets/tooltip-side.svg +5 -0
- package/src/lib/assets/tooltip.svg +5 -0
- package/src/lib/assets/translate.svg +3 -0
- package/src/lib/assets/travel_places.svg +10 -0
- package/src/lib/assets/ulr-format.svg +3 -0
- package/src/lib/assets/underline-format.svg +3 -0
- package/src/lib/assets/unread_filter_icon.svg +7 -0
- package/src/lib/assets/upload.svg +3 -0
- package/src/lib/assets/user_empty.svg +8 -0
- package/src/lib/assets/user_empty_dark.svg +8 -0
- package/src/lib/assets/video_call.svg +8 -0
- package/src/lib/assets/video_call_button.svg +5 -0
- package/src/lib/assets/video_filter_icon.svg +3 -0
- package/src/lib/assets/videocam.svg +8 -0
- package/src/lib/assets/videocam_off.svg +8 -0
- package/src/lib/assets/visibility_off.svg +3 -0
- package/src/lib/assets/volume_down.svg +8 -0
- package/src/lib/assets/volume_mute.svg +8 -0
- package/src/lib/assets/volume_off.svg +8 -0
- package/src/lib/assets/volume_up.svg +8 -0
- package/src/lib/assets/warning.svg +8 -0
- package/src/lib/assets/warning_neutral.svg +3 -0
- package/src/lib/assets/wifi.svg +8 -0
- package/src/lib/assets/zoom_in_map.svg +8 -0
- package/src/lib/assets/zoom_out_map.svg +8 -0
- package/styles/accessibility.css +148 -0
- package/styles/css-variables.css +547 -0
- package/styles/fonts/Roboto/LICENSE.txt +202 -0
- package/styles/fonts/Roboto/Roboto-Black.ttf +0 -0
- package/styles/fonts/Roboto/Roboto-BlackItalic.ttf +0 -0
- package/styles/fonts/Roboto/Roboto-Bold.ttf +0 -0
- package/styles/fonts/Roboto/Roboto-BoldItalic.ttf +0 -0
- package/styles/fonts/Roboto/Roboto-Italic.ttf +0 -0
- package/styles/fonts/Roboto/Roboto-Light.ttf +0 -0
- package/styles/fonts/Roboto/Roboto-LightItalic.ttf +0 -0
- package/styles/fonts/Roboto/Roboto-Medium.ttf +0 -0
- package/styles/fonts/Roboto/Roboto-MediumItalic.ttf +0 -0
- package/styles/fonts/Roboto/Roboto-Regular.ttf +0 -0
- package/styles/fonts/Roboto/Roboto-Thin.ttf +0 -0
- package/styles/fonts/Roboto/Roboto-ThinItalic.ttf +0 -0
- package/styles/mention-styles.css +190 -0
- package/styles/rich-text-styles.css +310 -0
- package/types/cometchat-chat-uikit-angular.d.ts +34636 -0
- package/AI/AIAssistBot/AIAssistBot.d.ts +0 -7
- package/AI/AIAssistBot/AIAssistBotDecorator.d.ts +0 -11
- package/AI/AIConversationStarter/AIConversationStarter.d.ts +0 -7
- package/AI/AIConversationStarter/AIConversationStarterDecorator.d.ts +0 -9
- package/AI/AIConversationSummary/AIConversationSummary.d.ts +0 -7
- package/AI/AIConversationSummary/AIConversationSummaryDecorator.d.ts +0 -10
- package/AI/AISmartReplies/AISmartReplies.d.ts +0 -7
- package/AI/AISmartReplies/AISmartRepliesDecorator.d.ts +0 -9
- package/Calls/CallingExtension.d.ts +0 -6
- package/Calls/CallingExtensionDecorator.d.ts +0 -16
- package/Calls/CometChatCallButtons/cometchat-call-buttons/cometchat-call-buttons.component.d.ts +0 -79
- package/Calls/CometChatCallButtons/cometchat-call-buttons.module.d.ts +0 -11
- package/Calls/CometChatCallLogDetails/cometchat-call-log-details/cometchat-call-log-details.component.d.ts +0 -136
- package/Calls/CometChatCallLogDetails/cometchat-call-log-details.module.d.ts +0 -14
- package/Calls/CometChatCallLogHistory/cometchat-call-log-history/cometchat-call-log-history.component.d.ts +0 -112
- package/Calls/CometChatCallLogHistory/cometchat-call-log-history.module.d.ts +0 -10
- package/Calls/CometChatCallLogParticipants/cometchat-call-log-participants/cometchat-call-log-participants.component.d.ts +0 -77
- package/Calls/CometChatCallLogParticipants/cometchat-call-log-participants.module.d.ts +0 -10
- package/Calls/CometChatCallLogRecordings/cometchat-call-log-recordings/cometchat-call-log-recordings.component.d.ts +0 -91
- package/Calls/CometChatCallLogRecordings/cometchat-call-log-recordings.module.d.ts +0 -10
- package/Calls/CometChatCallLogs/cometchat-call-logs/cometchat-call-logs.component.d.ts +0 -134
- package/Calls/CometChatCallLogs/cometchat-call-logs.module.d.ts +0 -12
- package/Calls/CometChatCallLogsWithDetails/cometchat-call-logs-with-details/cometchat-call-logs-with-details.component.d.ts +0 -54
- package/Calls/CometChatCallLogsWithDetails/cometchat-call-logs-with-details.module.d.ts +0 -12
- package/Calls/CometChatIncomingCall/cometchat-incoming-call/cometchat-incoming-call.component.d.ts +0 -81
- package/Calls/CometChatIncomingCall/cometchat-incoming-call.module.d.ts +0 -11
- package/Calls/CometChatOngoingCall/cometchat-ongoing-call/cometchat-ongoing-call.component.d.ts +0 -38
- package/Calls/CometChatOngoingCall/cometchat-ongoing-call.module.d.ts +0 -9
- package/Calls/CometChatOutgoingCall/cometchat-outgoing-call/cometchat-outgoing-call.component.d.ts +0 -57
- package/Calls/CometChatOutgoingCall/cometchat-outgoing-call.module.d.ts +0 -10
- package/CometChatAddMembers/cometchat-add-members/cometchat-add-members.component.d.ts +0 -117
- package/CometChatAddMembers/cometchat-add-members.module.d.ts +0 -12
- package/CometChatBannedMembers/cometchat-banned-members/cometchat-banned-members.component.d.ts +0 -152
- package/CometChatBannedMembers/cometchat-banned-members.module.d.ts +0 -13
- package/CometChatContacts/cometchat-contacts/cometchat-contacts.component.d.ts +0 -66
- package/CometChatContacts/cometchat-contacts.module.d.ts +0 -12
- package/CometChatConversations/cometchat-conversations/cometchat-conversations.component.d.ts +0 -387
- package/CometChatConversations/cometchat-conversations.module.d.ts +0 -10
- package/CometChatConversationsWithMessages/cometchat-conversations-with-messages/cometchat-conversations-with-messages.component.d.ts +0 -98
- package/CometChatConversationsWithMessages/cometchat-conversations-with-messages.module.d.ts +0 -11
- package/CometChatDetails/cometchat-details/cometchat-details.component.d.ts +0 -164
- package/CometChatDetails/cometchat-details.module.d.ts +0 -12
- package/CometChatGroupMembers/cometchat-group-members/cometchat-group-members.component.d.ts +0 -162
- package/CometChatGroupMembers/cometchat-group-members.module.d.ts +0 -13
- package/CometChatGroups/cometchat-groups/cometchat-groups.component.d.ts +0 -150
- package/CometChatGroups/cometchat-groups.module.d.ts +0 -10
- package/CometChatGroupsWithMessages/cometchat-groups-with-messages/cometchat-groups-with-messages.component.d.ts +0 -103
- package/CometChatGroupsWithMessages/cometchat-groups-with-messages.module.d.ts +0 -11
- package/CometChatList/cometchat-list.component.d.ts +0 -91
- package/CometChatList/cometchat-list.module.d.ts +0 -10
- package/CometChatMessageBubble/cometchat-message-bubble/cometchat-message-bubble.component.d.ts +0 -63
- package/CometChatMessageBubble/cometchat-message-bubble.module.d.ts +0 -8
- package/CometChatMessageComposer/cometchat-message-composer/cometchat-message-composer.component.d.ts +0 -326
- package/CometChatMessageComposer/cometchat-message-composer.module.d.ts +0 -11
- package/CometChatMessageHeader/cometchat-message-header/cometchat-message-header.component.d.ts +0 -99
- package/CometChatMessageHeader/cometchat-message-header.module.d.ts +0 -9
- package/CometChatMessageInformation/cometchat-message-information/cometchat-message-information.component.d.ts +0 -99
- package/CometChatMessageInformation/cometchat-message-information.module.d.ts +0 -10
- package/CometChatMessageList/cometchat-message-list/cometchat-message-list.component.d.ts +0 -819
- package/CometChatMessageList/cometchat-message-list.module.d.ts +0 -13
- package/CometChatMessages/cometchat-messages/cometchat-messages.component.d.ts +0 -149
- package/CometChatMessages/cometchat-messages.module.d.ts +0 -16
- package/CometChatTheme.service.d.ts +0 -7
- package/CometChatThreadedMessages/cometchat-threaded-messages/cometchat-threaded-messages.component.d.ts +0 -85
- package/CometChatThreadedMessages/cometchat-threaded-messages.module.d.ts +0 -12
- package/CometChatTransferOwnership/cometchat-transfer-ownership/cometchat-transfer-ownership.component.d.ts +0 -88
- package/CometChatTransferOwnership/cometchat-transfer-ownership.module.d.ts +0 -10
- package/CometChatUserMemberWrapper/cometchat-user-member-wrapper.component.d.ts +0 -41
- package/CometChatUserMemberWrapper/cometchat-user-member-wrapper.module.d.ts +0 -11
- package/CometChatUsers/cometchat-users/cometchat-users.component.d.ts +0 -194
- package/CometChatUsers/cometchat-users.module.d.ts +0 -11
- package/CometChatUsersWithMessages/cometchat-users-with-messages/cometchat-users-with-messages.component.d.ts +0 -72
- package/CometChatUsersWithMessages/cometchat-users-with-messages.module.d.ts +0 -10
- package/Extensions/CollaborativeDocument/CollaborativeDocumentExtension.d.ts +0 -5
- package/Extensions/CollaborativeDocument/CollaborativeDocumentExtensionDecorator.d.ts +0 -14
- package/Extensions/CollaborativeWhiteboard/CollaborativeWhiteboardExtension.d.ts +0 -5
- package/Extensions/CollaborativeWhiteboard/CollaborativeWhiteboardExtensionDecorator.d.ts +0 -14
- package/Extensions/ImageModeration/ImageModerationExtension.d.ts +0 -5
- package/Extensions/ImageModeration/ImageModerationExtensionDecorator.d.ts +0 -6
- package/Extensions/LinkPreviewExtension/LinkPreviewExtension.d.ts +0 -5
- package/Extensions/LinkPreviewExtension/LinkPreviewExtensionDecorator.d.ts +0 -6
- package/Extensions/MessageTranslation/MessageTranslationExtension.d.ts +0 -5
- package/Extensions/MessageTranslation/MessageTranslationExtensionDecorator.d.ts +0 -9
- package/Extensions/PollsExtension/PollsExtension.d.ts +0 -5
- package/Extensions/PollsExtension/PollsExtensionDecorator.d.ts +0 -14
- package/Extensions/SmartReplies/SmartRepliesExtension.d.ts +0 -5
- package/Extensions/SmartReplies/SmartRepliesExtensionDecorator.d.ts +0 -16
- package/Extensions/Stickers/StickersExtension.d.ts +0 -5
- package/Extensions/Stickers/StickersExtensionDecorator.d.ts +0 -28
- package/Extensions/TextModerator/TextModeratorExtension.d.ts +0 -6
- package/Extensions/TextModerator/TextModeratorExtensionDecorator.d.ts +0 -8
- package/Extensions/ThumbnailGeneration/ThumbnailGenerationExtension.d.ts +0 -5
- package/Extensions/ThumbnailGeneration/ThumbnailGenerationExtensionDecorator.d.ts +0 -6
- package/Screenshots/overview_cometchat_screens.png +0 -0
- package/Shared/CometChatUIkit/CometChatUIKit.d.ts +0 -49
- package/Shared/Framework/AIExtensionDataSource.d.ts +0 -5
- package/Shared/Framework/ChatConfigurator.d.ts +0 -8
- package/Shared/Framework/DataSource.d.ts +0 -40
- package/Shared/Framework/DataSourceDecorator.d.ts +0 -43
- package/Shared/Framework/ExtensionDataSource.d.ts +0 -3
- package/Shared/Utils/CallDetailUtils.d.ts +0 -8
- package/Shared/Utils/CallLogUtils.d.ts +0 -8
- package/Shared/Utils/ComeChatException.d.ts +0 -1
- package/Shared/Utils/MessageUtils.d.ts +0 -151
- package/Shared/Utils/UtilityFunctions.d.ts +0 -6
- package/Shared/Views/AIAssistBotMessageList/aiassist-bot-message-list/aiassist-bot-message-list.component.d.ts +0 -71
- package/Shared/Views/AIAssistBotMessageList/aiassist-bot-message-list.module.d.ts +0 -11
- package/Shared/Views/CometChatTabs/cometchat-tabs/cometchat-tabs.component.d.ts +0 -82
- package/Shared/Views/CometChatTabs/cometchat-tabs.module.d.ts +0 -8
- package/assets/.gitkeep +0 -0
- package/assets/Audio-Call.svg +0 -11
- package/assets/Audio-Call2x.svg +0 -11
- package/assets/Copy.svg +0 -17
- package/assets/Grid-layout.svg +0 -1
- package/assets/Heart.svg +0 -11
- package/assets/Imagemoderation.svg +0 -14
- package/assets/Info.svg +0 -13
- package/assets/InfoIcon.svg +0 -13
- package/assets/InfoSimpleIcon.svg +0 -4
- package/assets/Locked.svg +0 -10
- package/assets/More@2x.svg +0 -9
- package/assets/Plus.svg +0 -13
- package/assets/Private.svg +0 -10
- package/assets/Reactionsicon.svg +0 -9
- package/assets/Reply@2x.svg +0 -9
- package/assets/Send.svg +0 -12
- package/assets/Spinner.svg +0 -15
- package/assets/Stickers.svg +0 -16
- package/assets/Stipop.svg +0 -9
- package/assets/Video-call.svg +0 -12
- package/assets/Video-call2x.svg +0 -12
- package/assets/activity.svg +0 -22
- package/assets/addreaction.svg +0 -9
- package/assets/ai-bot.svg +0 -24
- package/assets/ai-empty.svg +0 -22
- package/assets/ai-error.svg +0 -21
- package/assets/animals.svg +0 -15
- package/assets/attachment-file.svg +0 -14
- package/assets/audio-file.svg +0 -12
- package/assets/back.png +0 -0
- package/assets/backbutton.svg +0 -12
- package/assets/call.svg +0 -1
- package/assets/chats.svg +0 -1
- package/assets/checkmark.svg +0 -11
- package/assets/close.svg +0 -12
- package/assets/close2x.svg +0 -12
- package/assets/collaborativedocument.svg +0 -13
- package/assets/collaborativewhiteboard.svg +0 -12
- package/assets/create-button.svg +0 -12
- package/assets/declaration.d.ts +0 -3
- package/assets/delete.svg +0 -7
- package/assets/deleteicon.svg +0 -15
- package/assets/down-arrow.svg +0 -1
- package/assets/download.svg +0 -13
- package/assets/editicon.svg +0 -14
- package/assets/emoji.svg +0 -2693
- package/assets/empty-slot.svg +0 -14
- package/assets/file-upload.svg +0 -2693
- package/assets/flags.svg +0 -12
- package/assets/food.svg +0 -26
- package/assets/greaterThanIcon.svg +0 -3
- package/assets/group.svg +0 -40
- package/assets/heart-reaction.png +0 -0
- package/assets/heart.png +0 -0
- package/assets/image.svg +0 -2693
- package/assets/incomingAudioCallIconUrl.svg +0 -5
- package/assets/incomingVideoCallIconUrl.svg +0 -6
- package/assets/incomingcall.wav +0 -0
- package/assets/increase-size.svg +0 -6
- package/assets/location.svg +0 -2693
- package/assets/message-delivered.png +0 -0
- package/assets/message-delivered.svg +0 -5
- package/assets/message-read.png +0 -0
- package/assets/message-read.svg +0 -5
- package/assets/message-sent.png +0 -0
- package/assets/message-sent.svg +0 -3
- package/assets/mic.svg +0 -11
- package/assets/missedAudioCallIconUrl.svg +0 -5
- package/assets/missedVideoCallIconUrl.svg +0 -6
- package/assets/moreicon.svg +0 -9
- package/assets/new-chat.svg +0 -13
- package/assets/new-message-icon.svg +0 -1
- package/assets/objects.svg +0 -13
- package/assets/open-thread.svg +0 -11
- package/assets/outgoingAudioCallIconUrl.svg +0 -5
- package/assets/outgoingVideoCallIconUrl.svg +0 -6
- package/assets/password-protected-group.svg +0 -3
- package/assets/pause-icon.svg +0 -14
- package/assets/photolibrary.svg +0 -11
- package/assets/placeholder.png +0 -0
- package/assets/play-icon.svg +0 -18
- package/assets/plus-rotated.svg +0 -13
- package/assets/polls.svg +0 -14
- package/assets/privacy.svg +0 -4
- package/assets/private-group.svg +0 -9
- package/assets/public.svg +0 -3
- package/assets/record-icon.svg +0 -8
- package/assets/reduce-size.svg +0 -6
- package/assets/right-arrow.svg +0 -6
- package/assets/search.png +0 -0
- package/assets/search.svg +0 -4
- package/assets/side-arrow.svg +0 -1
- package/assets/smileys.svg +0 -16
- package/assets/start-chat.svg +0 -1
- package/assets/start-conversation.svg +0 -46
- package/assets/stop.svg +0 -1
- package/assets/symbols.svg +0 -16
- package/assets/thread-arrow.svg +0 -1
- package/assets/thread-icon.svg +0 -38
- package/assets/threadIndicatorIcon.svg +0 -11
- package/assets/threadicon.svg +0 -14
- package/assets/translation.svg +0 -16
- package/assets/travel.svg +0 -18
- package/assets/unsafe-content.svg +0 -23
- package/assets/user.svg +0 -31
- package/assets/video-upload.svg +0 -2693
- package/assets/video.svg +0 -12
- package/assets/wait.png +0 -0
- package/assets/warning-small.png +0 -0
- package/assets/warning-small.svg +0 -5
- package/cometchat-chat-uikit-angular.d.ts +0 -5
- package/esm2020/AI/AIAssistBot/AIAssistBot.mjs +0 -21
- package/esm2020/AI/AIAssistBot/AIAssistBotDecorator.mjs +0 -68
- package/esm2020/AI/AIConversationStarter/AIConversationStarter.mjs +0 -21
- package/esm2020/AI/AIConversationStarter/AIConversationStarterDecorator.mjs +0 -31
- package/esm2020/AI/AIConversationSummary/AIConversationSummary.mjs +0 -21
- package/esm2020/AI/AIConversationSummary/AIConversationSummaryDecorator.mjs +0 -32
- package/esm2020/AI/AISmartReplies/AISmartReplies.mjs +0 -21
- package/esm2020/AI/AISmartReplies/AISmartRepliesDecorator.mjs +0 -31
- package/esm2020/Calls/CallingExtension.mjs +0 -14
- package/esm2020/Calls/CallingExtensionDecorator.mjs +0 -127
- package/esm2020/Calls/CometChatCallButtons/cometchat-call-buttons/cometchat-call-buttons.component.mjs +0 -409
- package/esm2020/Calls/CometChatCallButtons/cometchat-call-buttons.module.mjs +0 -32
- package/esm2020/Calls/CometChatCallLogDetails/cometchat-call-log-details/cometchat-call-log-details.component.mjs +0 -373
- package/esm2020/Calls/CometChatCallLogDetails/cometchat-call-log-details.module.mjs +0 -47
- package/esm2020/Calls/CometChatCallLogHistory/cometchat-call-log-history/cometchat-call-log-history.component.mjs +0 -352
- package/esm2020/Calls/CometChatCallLogHistory/cometchat-call-log-history.module.mjs +0 -21
- package/esm2020/Calls/CometChatCallLogParticipants/cometchat-call-log-participants/cometchat-call-log-participants.component.mjs +0 -189
- package/esm2020/Calls/CometChatCallLogParticipants/cometchat-call-log-participants.module.mjs +0 -21
- package/esm2020/Calls/CometChatCallLogRecordings/cometchat-call-log-recordings/cometchat-call-log-recordings.component.mjs +0 -246
- package/esm2020/Calls/CometChatCallLogRecordings/cometchat-call-log-recordings.module.mjs +0 -21
- package/esm2020/Calls/CometChatCallLogs/cometchat-call-logs/cometchat-call-logs.component.mjs +0 -592
- package/esm2020/Calls/CometChatCallLogs/cometchat-call-logs.module.mjs +0 -36
- package/esm2020/Calls/CometChatCallLogsWithDetails/cometchat-call-logs-with-details/cometchat-call-logs-with-details.component.mjs +0 -198
- package/esm2020/Calls/CometChatCallLogsWithDetails/cometchat-call-logs-with-details.module.mjs +0 -39
- package/esm2020/Calls/CometChatIncomingCall/cometchat-incoming-call/cometchat-incoming-call.component.mjs +0 -464
- package/esm2020/Calls/CometChatIncomingCall/cometchat-incoming-call.module.mjs +0 -32
- package/esm2020/Calls/CometChatOngoingCall/cometchat-ongoing-call/cometchat-ongoing-call.component.mjs +0 -176
- package/esm2020/Calls/CometChatOngoingCall/cometchat-ongoing-call.module.mjs +0 -27
- package/esm2020/Calls/CometChatOutgoingCall/cometchat-outgoing-call/cometchat-outgoing-call.component.mjs +0 -188
- package/esm2020/Calls/CometChatOutgoingCall/cometchat-outgoing-call.module.mjs +0 -28
- package/esm2020/CometChatAddMembers/cometchat-add-members/cometchat-add-members.component.mjs +0 -374
- package/esm2020/CometChatAddMembers/cometchat-add-members.module.mjs +0 -23
- package/esm2020/CometChatBannedMembers/cometchat-banned-members/cometchat-banned-members.component.mjs +0 -530
- package/esm2020/CometChatBannedMembers/cometchat-banned-members.module.mjs +0 -24
- package/esm2020/CometChatContacts/cometchat-contacts/cometchat-contacts.component.mjs +0 -274
- package/esm2020/CometChatContacts/cometchat-contacts.module.mjs +0 -23
- package/esm2020/CometChatConversations/cometchat-conversations/cometchat-conversations.component.mjs +0 -1837
- package/esm2020/CometChatConversations/cometchat-conversations.module.mjs +0 -28
- package/esm2020/CometChatConversationsWithMessages/cometchat-conversations-with-messages/cometchat-conversations-with-messages.component.mjs +0 -413
- package/esm2020/CometChatConversationsWithMessages/cometchat-conversations-with-messages.module.mjs +0 -35
- package/esm2020/CometChatDetails/cometchat-details/cometchat-details.component.mjs +0 -789
- package/esm2020/CometChatDetails/cometchat-details.module.mjs +0 -27
- package/esm2020/CometChatGroupMembers/cometchat-group-members/cometchat-group-members.component.mjs +0 -807
- package/esm2020/CometChatGroupMembers/cometchat-group-members.module.mjs +0 -24
- package/esm2020/CometChatGroups/cometchat-groups/cometchat-groups.component.mjs +0 -681
- package/esm2020/CometChatGroups/cometchat-groups.module.mjs +0 -28
- package/esm2020/CometChatGroupsWithMessages/cometchat-groups-with-messages/cometchat-groups-with-messages.component.mjs +0 -499
- package/esm2020/CometChatGroupsWithMessages/cometchat-groups-with-messages.module.mjs +0 -35
- package/esm2020/CometChatList/cometchat-list.component.mjs +0 -225
- package/esm2020/CometChatList/cometchat-list.module.mjs +0 -28
- package/esm2020/CometChatMessageBubble/cometchat-message-bubble/cometchat-message-bubble.component.mjs +0 -166
- package/esm2020/CometChatMessageBubble/cometchat-message-bubble.module.mjs +0 -23
- package/esm2020/CometChatMessageComposer/cometchat-message-composer/cometchat-message-composer.component.mjs +0 -1976
- package/esm2020/CometChatMessageComposer/cometchat-message-composer.module.mjs +0 -22
- package/esm2020/CometChatMessageHeader/cometchat-message-header/cometchat-message-header.component.mjs +0 -467
- package/esm2020/CometChatMessageHeader/cometchat-message-header.module.mjs +0 -26
- package/esm2020/CometChatMessageInformation/cometchat-message-information/cometchat-message-information.component.mjs +0 -308
- package/esm2020/CometChatMessageInformation/cometchat-message-information.module.mjs +0 -28
- package/esm2020/CometChatMessageList/cometchat-message-list/cometchat-message-list.component.mjs +0 -4360
- package/esm2020/CometChatMessageList/cometchat-message-list.module.mjs +0 -42
- package/esm2020/CometChatMessages/cometchat-messages/cometchat-messages.component.mjs +0 -449
- package/esm2020/CometChatMessages/cometchat-messages.module.mjs +0 -52
- package/esm2020/CometChatTheme.service.mjs +0 -17
- package/esm2020/CometChatThreadedMessages/cometchat-threaded-messages/cometchat-threaded-messages.component.mjs +0 -372
- package/esm2020/CometChatThreadedMessages/cometchat-threaded-messages.module.mjs +0 -36
- package/esm2020/CometChatTransferOwnership/cometchat-transfer-ownership/cometchat-transfer-ownership.component.mjs +0 -336
- package/esm2020/CometChatTransferOwnership/cometchat-transfer-ownership.module.mjs +0 -21
- package/esm2020/CometChatUserMemberWrapper/cometchat-user-member-wrapper.component.mjs +0 -75
- package/esm2020/CometChatUserMemberWrapper/cometchat-user-member-wrapper.module.mjs +0 -21
- package/esm2020/CometChatUsers/cometchat-users/cometchat-users.component.mjs +0 -788
- package/esm2020/CometChatUsers/cometchat-users.module.mjs +0 -32
- package/esm2020/CometChatUsersWithMessages/cometchat-users-with-messages/cometchat-users-with-messages.component.mjs +0 -205
- package/esm2020/CometChatUsersWithMessages/cometchat-users-with-messages.module.mjs +0 -31
- package/esm2020/Extensions/CollaborativeDocument/CollaborativeDocumentExtension.mjs +0 -12
- package/esm2020/Extensions/CollaborativeDocument/CollaborativeDocumentExtensionDecorator.mjs +0 -93
- package/esm2020/Extensions/CollaborativeWhiteboard/CollaborativeWhiteboardExtension.mjs +0 -12
- package/esm2020/Extensions/CollaborativeWhiteboard/CollaborativeWhiteboardExtensionDecorator.mjs +0 -94
- package/esm2020/Extensions/ImageModeration/ImageModerationExtension.mjs +0 -12
- package/esm2020/Extensions/ImageModeration/ImageModerationExtensionDecorator.mjs +0 -10
- package/esm2020/Extensions/LinkPreviewExtension/LinkPreviewExtension.mjs +0 -12
- package/esm2020/Extensions/LinkPreviewExtension/LinkPreviewExtensionDecorator.mjs +0 -10
- package/esm2020/Extensions/MessageTranslation/MessageTranslationExtension.mjs +0 -12
- package/esm2020/Extensions/MessageTranslation/MessageTranslationExtensionDecorator.mjs +0 -31
- package/esm2020/Extensions/PollsExtension/PollsExtension.mjs +0 -12
- package/esm2020/Extensions/PollsExtension/PollsExtensionDecorator.mjs +0 -77
- package/esm2020/Extensions/SmartReplies/SmartRepliesExtension.mjs +0 -12
- package/esm2020/Extensions/SmartReplies/SmartRepliesExtensionDecorator.mjs +0 -115
- package/esm2020/Extensions/Stickers/StickersExtension.mjs +0 -12
- package/esm2020/Extensions/Stickers/StickersExtensionDecorator.mjs +0 -125
- package/esm2020/Extensions/TextModerator/TextModeratorExtension.mjs +0 -22
- package/esm2020/Extensions/TextModerator/TextModeratorExtensionDecorator.mjs +0 -87
- package/esm2020/Extensions/ThumbnailGeneration/ThumbnailGenerationExtension.mjs +0 -12
- package/esm2020/Extensions/ThumbnailGeneration/ThumbnailGenerationExtensionDecorator.mjs +0 -10
- package/esm2020/Shared/CometChatUIkit/CometChatUIKit.mjs +0 -495
- package/esm2020/Shared/Framework/AIExtensionDataSource.mjs +0 -3
- package/esm2020/Shared/Framework/ChatConfigurator.mjs +0 -23
- package/esm2020/Shared/Framework/DataSource.mjs +0 -3
- package/esm2020/Shared/Framework/DataSourceDecorator.mjs +0 -113
- package/esm2020/Shared/Framework/ExtensionDataSource.mjs +0 -4
- package/esm2020/Shared/Utils/CallDetailUtils.mjs +0 -72
- package/esm2020/Shared/Utils/CallLogUtils.mjs +0 -122
- package/esm2020/Shared/Utils/ComeChatException.mjs +0 -10
- package/esm2020/Shared/Utils/MessageUtils.mjs +0 -682
- package/esm2020/Shared/Utils/UtilityFunctions.mjs +0 -36
- package/esm2020/Shared/Views/AIAssistBotMessageList/aiassist-bot-message-list/aiassist-bot-message-list.component.mjs +0 -290
- package/esm2020/Shared/Views/AIAssistBotMessageList/aiassist-bot-message-list.module.mjs +0 -22
- package/esm2020/Shared/Views/CometChatTabs/cometchat-tabs/cometchat-tabs.component.mjs +0 -124
- package/esm2020/Shared/Views/CometChatTabs/cometchat-tabs.module.mjs +0 -23
- package/esm2020/cometchat-chat-uikit-angular.mjs +0 -5
- package/esm2020/public-api.mjs +0 -115
- package/examples/sample-app/README.md +0 -50
- package/fesm2015/cometchat-chat-uikit-angular.mjs +0 -22649
- package/fesm2015/cometchat-chat-uikit-angular.mjs.map +0 -1
- package/fesm2020/cometchat-chat-uikit-angular.mjs +0 -22538
- package/fesm2020/cometchat-chat-uikit-angular.mjs.map +0 -1
- package/public-api.d.ts +0 -106
- /package/{assets/message-privately.svg → src/lib/assets/send_message_privately.svg} +0 -0
|
@@ -1,682 +0,0 @@
|
|
|
1
|
-
import { CometChatMessageOption, MessageBubbleAlignment, CometChatMessageTemplate, CometChatMessageComposerAction, localize, CometChatUIKitConstants, fontHelper, MentionsTargetElement, } from "@cometchat/uikit-resources";
|
|
2
|
-
import { CometChatMentionsFormatter, CometChatUIKitLoginListener, CometChatUrlsFormatter, ConversationUtils, UserMentionStyle, } from "@cometchat/uikit-shared";
|
|
3
|
-
import { CometChat } from "@cometchat/chat-sdk-javascript";
|
|
4
|
-
import { ChatConfigurator } from "../Framework/ChatConfigurator";
|
|
5
|
-
export class MessageUtils {
|
|
6
|
-
/**
|
|
7
|
-
* Creates an option to edit message.
|
|
8
|
-
* @param {CometChatTheme} theme - The theme object.
|
|
9
|
-
* @return {CometChatMessageOption} - Returns a new message option.
|
|
10
|
-
*/
|
|
11
|
-
getEditOption(theme) {
|
|
12
|
-
return new CometChatMessageOption({
|
|
13
|
-
id: CometChatUIKitConstants.MessageOption.editMessage,
|
|
14
|
-
title: localize("EDIT"),
|
|
15
|
-
iconURL: "assets/editicon.svg",
|
|
16
|
-
onClick: null,
|
|
17
|
-
iconTint: theme.palette.getAccent600(),
|
|
18
|
-
backgroundColor: "transparent",
|
|
19
|
-
titleFont: fontHelper(theme.typography.subtitle1),
|
|
20
|
-
titleColor: theme.palette.getAccent600(),
|
|
21
|
-
});
|
|
22
|
-
}
|
|
23
|
-
/**
|
|
24
|
-
* Creates an option to react to a message.
|
|
25
|
-
* @param {CometChatTheme} theme - The theme object.
|
|
26
|
-
* @return {CometChatMessageOption} - Returns a new message option.
|
|
27
|
-
*/
|
|
28
|
-
getReactionOption(theme) {
|
|
29
|
-
return new CometChatMessageOption({
|
|
30
|
-
id: CometChatUIKitConstants.MessageOption.reactToMessage,
|
|
31
|
-
title: localize("REACT"),
|
|
32
|
-
iconURL: "assets/addreaction.svg",
|
|
33
|
-
onClick: undefined,
|
|
34
|
-
iconTint: theme.palette.getAccent600(),
|
|
35
|
-
backgroundColor: "transparent",
|
|
36
|
-
titleFont: fontHelper(theme.typography.subtitle1),
|
|
37
|
-
titleColor: theme.palette.getAccent600(),
|
|
38
|
-
});
|
|
39
|
-
}
|
|
40
|
-
/**
|
|
41
|
-
* Creates an option to get info about a message.
|
|
42
|
-
* @param {CometChatTheme} theme - The theme object.
|
|
43
|
-
* @return {CometChatMessageOption} - Returns a new message option.
|
|
44
|
-
*/
|
|
45
|
-
getMessageInfoOption(theme) {
|
|
46
|
-
return new CometChatMessageOption({
|
|
47
|
-
id: CometChatUIKitConstants.MessageOption.messageInformation,
|
|
48
|
-
title: localize("INFO"),
|
|
49
|
-
iconURL: "assets/Info.svg",
|
|
50
|
-
onClick: null,
|
|
51
|
-
iconTint: theme.palette.getAccent600(),
|
|
52
|
-
backgroundColor: "transparent",
|
|
53
|
-
titleFont: fontHelper(theme.typography.subtitle1),
|
|
54
|
-
titleColor: theme.palette.getAccent600(),
|
|
55
|
-
});
|
|
56
|
-
}
|
|
57
|
-
/**
|
|
58
|
-
* Creates an option to send a private message.
|
|
59
|
-
* @param {CometChatTheme} theme - The theme object.
|
|
60
|
-
* @return {CometChatMessageOption} - Returns a new message option.
|
|
61
|
-
*/
|
|
62
|
-
getMessagePrivatelyOption(theme) {
|
|
63
|
-
return new CometChatMessageOption({
|
|
64
|
-
id: CometChatUIKitConstants.MessageOption.sendMessagePrivately,
|
|
65
|
-
title: localize("MESSAGE_PRIVATELY"),
|
|
66
|
-
iconURL: "assets/message-privately.svg",
|
|
67
|
-
onClick: null,
|
|
68
|
-
iconTint: theme.palette.getAccent600(),
|
|
69
|
-
backgroundColor: "transparent",
|
|
70
|
-
titleFont: fontHelper(theme.typography.subtitle1),
|
|
71
|
-
titleColor: theme.palette.getAccent600(),
|
|
72
|
-
});
|
|
73
|
-
}
|
|
74
|
-
/**
|
|
75
|
-
* Creates an option to delete a message.
|
|
76
|
-
* @param {CometChatTheme} theme - The theme object.
|
|
77
|
-
* @return {CometChatMessageOption} - Returns a new message option.
|
|
78
|
-
*/
|
|
79
|
-
getDeleteOption(theme) {
|
|
80
|
-
return new CometChatMessageOption({
|
|
81
|
-
id: CometChatUIKitConstants.MessageOption.deleteMessage,
|
|
82
|
-
title: localize("DELETE"),
|
|
83
|
-
iconURL: "assets/deleteicon.svg",
|
|
84
|
-
onClick: null,
|
|
85
|
-
iconTint: theme.palette.getAccent600(),
|
|
86
|
-
backgroundColor: "transparent",
|
|
87
|
-
titleFont: fontHelper(theme.typography.subtitle1),
|
|
88
|
-
titleColor: theme.palette.getAccent600(),
|
|
89
|
-
});
|
|
90
|
-
}
|
|
91
|
-
/**
|
|
92
|
-
* Creates an option to reply to a message in a thread.
|
|
93
|
-
* @param {CometChatTheme} theme - The theme object.
|
|
94
|
-
* @return {CometChatMessageOption} - Returns a new message option.
|
|
95
|
-
*/
|
|
96
|
-
getReplyInThreadOption(theme) {
|
|
97
|
-
return new CometChatMessageOption({
|
|
98
|
-
id: CometChatUIKitConstants.MessageOption.replyInThread,
|
|
99
|
-
title: localize("REPLY"),
|
|
100
|
-
iconURL: "assets/threadicon.svg",
|
|
101
|
-
onClick: null,
|
|
102
|
-
iconTint: theme.palette.getAccent600(),
|
|
103
|
-
backgroundColor: "transparent",
|
|
104
|
-
titleFont: fontHelper(theme.typography.subtitle1),
|
|
105
|
-
titleColor: theme.palette.getAccent600(),
|
|
106
|
-
});
|
|
107
|
-
}
|
|
108
|
-
/**
|
|
109
|
-
* Creates an option to copy a message.
|
|
110
|
-
* @param {CometChatTheme} theme - The theme object.
|
|
111
|
-
* @return {CometChatMessageOption} - Returns a new message option.
|
|
112
|
-
*/
|
|
113
|
-
getCopyOption(theme) {
|
|
114
|
-
return new CometChatMessageOption({
|
|
115
|
-
id: CometChatUIKitConstants.MessageOption.copyMessage,
|
|
116
|
-
title: localize("COPY"),
|
|
117
|
-
iconURL: "assets/Copy.svg",
|
|
118
|
-
onClick: null,
|
|
119
|
-
iconTint: theme.palette.getAccent600(),
|
|
120
|
-
backgroundColor: "transparent",
|
|
121
|
-
titleFont: fontHelper(theme.typography.subtitle1),
|
|
122
|
-
titleColor: theme.palette.getAccent600(),
|
|
123
|
-
});
|
|
124
|
-
}
|
|
125
|
-
/**
|
|
126
|
-
* Checks if a message is sent by current logged in user.
|
|
127
|
-
* @param {CometChat.User} loggedInUser - The current logged in user.
|
|
128
|
-
* @param {CometChat.BaseMessage} message - The message to check.
|
|
129
|
-
* @return {boolean} - Returns true if message is sent by current logged in user, otherwise false.
|
|
130
|
-
*/
|
|
131
|
-
isSentByMe(loggedInUser, message) {
|
|
132
|
-
return loggedInUser.getUid() === message.getSender().getUid();
|
|
133
|
-
}
|
|
134
|
-
/**
|
|
135
|
-
* Fetches options for text messages.
|
|
136
|
-
* @param {CometChat.User} loggedInUser - The current logged in user.
|
|
137
|
-
* @param {CometChat.BaseMessage} messageObject - The message object.
|
|
138
|
-
* @param {CometChatTheme} theme - The theme object.
|
|
139
|
-
* @param {CometChat.Group} group - The group object.
|
|
140
|
-
* @return {Array<CometChatMessageOption>} - Returns an array of message options.
|
|
141
|
-
*/
|
|
142
|
-
getTextMessageOptions(loggedInUser, messageObject, theme, group) {
|
|
143
|
-
let isSentByMe = this.isSentByMe(loggedInUser, messageObject);
|
|
144
|
-
let isParticipant = false;
|
|
145
|
-
if (group?.getScope() == CometChatUIKitConstants.groupMemberScope.participant) {
|
|
146
|
-
isParticipant = true;
|
|
147
|
-
}
|
|
148
|
-
let messageOptionList = [];
|
|
149
|
-
messageOptionList.push(this.getReactionOption(theme));
|
|
150
|
-
if (!messageObject.getParentMessageId()) {
|
|
151
|
-
messageOptionList.push(this.getReplyInThreadOption(theme));
|
|
152
|
-
}
|
|
153
|
-
messageOptionList.push(this.getCopyOption(theme));
|
|
154
|
-
if (isSentByMe || (!isParticipant && group)) {
|
|
155
|
-
messageOptionList.push(this.getEditOption(theme));
|
|
156
|
-
}
|
|
157
|
-
if (isSentByMe) {
|
|
158
|
-
messageOptionList.push(this.getMessageInfoOption(theme));
|
|
159
|
-
}
|
|
160
|
-
if (isSentByMe || (!isParticipant && group))
|
|
161
|
-
messageOptionList.push(this.getDeleteOption(theme));
|
|
162
|
-
if (group && !isSentByMe) {
|
|
163
|
-
messageOptionList.push(this.getMessagePrivatelyOption(theme));
|
|
164
|
-
}
|
|
165
|
-
return messageOptionList;
|
|
166
|
-
}
|
|
167
|
-
/**
|
|
168
|
-
* Fetches options for image messages.
|
|
169
|
-
* @param {CometChat.User} loggedInUser - The current logged in user.
|
|
170
|
-
* @param {CometChat.BaseMessage} messageObject - The message object.
|
|
171
|
-
* @param {CometChatTheme} theme - The theme object.
|
|
172
|
-
* @param {CometChat.Group} group - The group object.
|
|
173
|
-
* @return {Array<CometChatMessageOption>} - Returns an array of message options.
|
|
174
|
-
*/
|
|
175
|
-
getImageMessageOptions(loggedInUser, messageObject, theme, group) {
|
|
176
|
-
let messageOptionList = [];
|
|
177
|
-
messageOptionList = ChatConfigurator.getDataSource().getCommonOptions(loggedInUser, messageObject, theme, group);
|
|
178
|
-
return messageOptionList;
|
|
179
|
-
}
|
|
180
|
-
/**
|
|
181
|
-
* Fetches options for video messages.
|
|
182
|
-
* @param {CometChat.User} loggedInUser - The current logged in user.
|
|
183
|
-
* @param {CometChat.BaseMessage} messageObject - The message object.
|
|
184
|
-
* @param {CometChatTheme} theme - The theme object.
|
|
185
|
-
* @param {CometChat.Group} group - (Optional) The group object.
|
|
186
|
-
* @return {Array<CometChatMessageOption>} - Returns an array of message options.
|
|
187
|
-
*/
|
|
188
|
-
getVideoMessageOptions(loggedInUser, messageObject, theme, group) {
|
|
189
|
-
let messageOptionList = [];
|
|
190
|
-
messageOptionList = ChatConfigurator.getDataSource().getCommonOptions(loggedInUser, messageObject, theme, group);
|
|
191
|
-
return messageOptionList;
|
|
192
|
-
}
|
|
193
|
-
/**
|
|
194
|
-
* Fetches options for audio messages.
|
|
195
|
-
* @param {CometChat.User} loggedInUser - The current logged in user.
|
|
196
|
-
* @param {CometChat.BaseMessage} messageObject - The message object.
|
|
197
|
-
* @param {CometChatTheme} theme - The theme object.
|
|
198
|
-
* @param {CometChat.Group} group - (Optional) The group object.
|
|
199
|
-
* @return {Array<CometChatMessageOption>} - Returns an array of message options.
|
|
200
|
-
*/
|
|
201
|
-
getAudioMessageOptions(loggedInUser, messageObject, theme, group) {
|
|
202
|
-
let messageOptionList = [];
|
|
203
|
-
messageOptionList = ChatConfigurator.getDataSource().getCommonOptions(loggedInUser, messageObject, theme, group);
|
|
204
|
-
return messageOptionList;
|
|
205
|
-
}
|
|
206
|
-
/**
|
|
207
|
-
* Fetches options for file messages.
|
|
208
|
-
* @param {CometChat.User} loggedInUser - The current logged in user.
|
|
209
|
-
* @param {CometChat.BaseMessage} messageObject - The message object.
|
|
210
|
-
* @param {CometChatTheme} theme - The theme object.
|
|
211
|
-
* @param {CometChat.Group} group - (Optional) The group object.
|
|
212
|
-
* @return {Array<CometChatMessageOption>} - Returns an array of message options.
|
|
213
|
-
*/
|
|
214
|
-
getFileMessageOptions(loggedInUser, messageObject, theme, group) {
|
|
215
|
-
let messageOptionList = [];
|
|
216
|
-
messageOptionList = ChatConfigurator.getDataSource().getCommonOptions(loggedInUser, messageObject, theme, group);
|
|
217
|
-
return messageOptionList;
|
|
218
|
-
}
|
|
219
|
-
getBottomView(_messageObject, _alignment) {
|
|
220
|
-
return null;
|
|
221
|
-
}
|
|
222
|
-
getSchedulerMessageTemplate() {
|
|
223
|
-
return new CometChatMessageTemplate({
|
|
224
|
-
type: CometChatUIKitConstants.MessageTypes.scheduler,
|
|
225
|
-
category: CometChatUIKitConstants.MessageCategory.interactive,
|
|
226
|
-
options: ChatConfigurator.getDataSource().getMessageOptions,
|
|
227
|
-
});
|
|
228
|
-
}
|
|
229
|
-
getTextMessageTemplate() {
|
|
230
|
-
return new CometChatMessageTemplate({
|
|
231
|
-
type: CometChatUIKitConstants.MessageTypes.text,
|
|
232
|
-
category: CometChatUIKitConstants.MessageCategory.message,
|
|
233
|
-
options: ChatConfigurator.getDataSource().getMessageOptions,
|
|
234
|
-
});
|
|
235
|
-
}
|
|
236
|
-
getAudioMessageTemplate() {
|
|
237
|
-
return new CometChatMessageTemplate({
|
|
238
|
-
type: CometChatUIKitConstants.MessageTypes.audio,
|
|
239
|
-
category: CometChatUIKitConstants.MessageCategory.message,
|
|
240
|
-
options: ChatConfigurator.getDataSource().getMessageOptions,
|
|
241
|
-
});
|
|
242
|
-
}
|
|
243
|
-
getVideoMessageTemplate() {
|
|
244
|
-
return new CometChatMessageTemplate({
|
|
245
|
-
type: CometChatUIKitConstants.MessageTypes.video,
|
|
246
|
-
category: CometChatUIKitConstants.MessageCategory.message,
|
|
247
|
-
options: ChatConfigurator.getDataSource().getMessageOptions,
|
|
248
|
-
});
|
|
249
|
-
}
|
|
250
|
-
getImageMessageTemplate() {
|
|
251
|
-
return new CometChatMessageTemplate({
|
|
252
|
-
type: CometChatUIKitConstants.MessageTypes.image,
|
|
253
|
-
category: CometChatUIKitConstants.MessageCategory.message,
|
|
254
|
-
options: ChatConfigurator.getDataSource().getMessageOptions,
|
|
255
|
-
});
|
|
256
|
-
}
|
|
257
|
-
getGroupActionTemplate() {
|
|
258
|
-
return new CometChatMessageTemplate({
|
|
259
|
-
type: CometChatUIKitConstants.MessageTypes.groupMember,
|
|
260
|
-
category: CometChatUIKitConstants.MessageCategory.action,
|
|
261
|
-
});
|
|
262
|
-
}
|
|
263
|
-
getFileMessageTemplate() {
|
|
264
|
-
return new CometChatMessageTemplate({
|
|
265
|
-
type: CometChatUIKitConstants.MessageTypes.file,
|
|
266
|
-
category: CometChatUIKitConstants.MessageCategory.message,
|
|
267
|
-
options: ChatConfigurator.getDataSource().getMessageOptions,
|
|
268
|
-
});
|
|
269
|
-
}
|
|
270
|
-
getFormMessageTemplate() {
|
|
271
|
-
return new CometChatMessageTemplate({
|
|
272
|
-
type: CometChatUIKitConstants.MessageTypes.form,
|
|
273
|
-
category: CometChatUIKitConstants.MessageCategory.interactive,
|
|
274
|
-
options: ChatConfigurator.getDataSource().getMessageOptions,
|
|
275
|
-
});
|
|
276
|
-
}
|
|
277
|
-
getCardMessageTemplate() {
|
|
278
|
-
return new CometChatMessageTemplate({
|
|
279
|
-
type: CometChatUIKitConstants.MessageTypes.card,
|
|
280
|
-
category: CometChatUIKitConstants.MessageCategory.interactive,
|
|
281
|
-
options: ChatConfigurator.getDataSource().getMessageOptions,
|
|
282
|
-
});
|
|
283
|
-
}
|
|
284
|
-
/**
|
|
285
|
-
* Function to check if a user's status should be visible
|
|
286
|
-
* @param {CometChat.User | CometChat.GroupMember} user - The user whose status visibility is to be checked.
|
|
287
|
-
* @return {boolean} - Returns `true` if the user's status should be hidden (blocked or offline), `false` otherwise.
|
|
288
|
-
*/
|
|
289
|
-
getUserStatusVisibility(user) {
|
|
290
|
-
let userBlockedFlag = false;
|
|
291
|
-
if (user) {
|
|
292
|
-
if (user.getBlockedByMe() || user.getHasBlockedMe() || user.getStatus() === CometChatUIKitConstants.userStatusType.offline) {
|
|
293
|
-
userBlockedFlag = true;
|
|
294
|
-
}
|
|
295
|
-
}
|
|
296
|
-
return userBlockedFlag;
|
|
297
|
-
}
|
|
298
|
-
getAllMessageTemplates() {
|
|
299
|
-
return [
|
|
300
|
-
ChatConfigurator.getDataSource().getTextMessageTemplate(),
|
|
301
|
-
ChatConfigurator.getDataSource().getImageMessageTemplate(),
|
|
302
|
-
ChatConfigurator.getDataSource().getVideoMessageTemplate(),
|
|
303
|
-
ChatConfigurator.getDataSource().getAudioMessageTemplate(),
|
|
304
|
-
ChatConfigurator.getDataSource().getFileMessageTemplate(),
|
|
305
|
-
ChatConfigurator.getDataSource().getGroupActionTemplate(),
|
|
306
|
-
ChatConfigurator.getDataSource().getFormMessageTemplate(),
|
|
307
|
-
ChatConfigurator.getDataSource().getCardMessageTemplate(),
|
|
308
|
-
ChatConfigurator.getDataSource().getSchedulerMessageTemplate(),
|
|
309
|
-
];
|
|
310
|
-
}
|
|
311
|
-
getMessageTemplate(messageType, messageCategory) {
|
|
312
|
-
let _template = null;
|
|
313
|
-
if (messageCategory != CometChatUIKitConstants.MessageCategory.call) {
|
|
314
|
-
switch (messageType) {
|
|
315
|
-
case CometChatUIKitConstants.MessageTypes.text:
|
|
316
|
-
_template = ChatConfigurator.getDataSource().getTextMessageTemplate();
|
|
317
|
-
break;
|
|
318
|
-
case CometChatUIKitConstants.MessageTypes.image:
|
|
319
|
-
_template =
|
|
320
|
-
ChatConfigurator.getDataSource().getImageMessageTemplate();
|
|
321
|
-
break;
|
|
322
|
-
case CometChatUIKitConstants.MessageTypes.video:
|
|
323
|
-
_template =
|
|
324
|
-
ChatConfigurator.getDataSource().getVideoMessageTemplate();
|
|
325
|
-
break;
|
|
326
|
-
case CometChatUIKitConstants.MessageTypes.groupMember:
|
|
327
|
-
_template = ChatConfigurator.getDataSource().getGroupActionTemplate();
|
|
328
|
-
break;
|
|
329
|
-
case CometChatUIKitConstants.MessageTypes.file:
|
|
330
|
-
_template = ChatConfigurator.getDataSource().getFileMessageTemplate();
|
|
331
|
-
break;
|
|
332
|
-
case CometChatUIKitConstants.MessageTypes.audio:
|
|
333
|
-
_template =
|
|
334
|
-
ChatConfigurator.getDataSource().getAudioMessageTemplate();
|
|
335
|
-
break;
|
|
336
|
-
case CometChatUIKitConstants.MessageTypes.form:
|
|
337
|
-
_template = ChatConfigurator.getDataSource().getFormMessageTemplate();
|
|
338
|
-
break;
|
|
339
|
-
case CometChatUIKitConstants.MessageTypes.card:
|
|
340
|
-
_template = ChatConfigurator.getDataSource().getCardMessageTemplate();
|
|
341
|
-
break;
|
|
342
|
-
case CometChatUIKitConstants.MessageTypes.scheduler:
|
|
343
|
-
_template =
|
|
344
|
-
ChatConfigurator.getDataSource().getSchedulerMessageTemplate();
|
|
345
|
-
break;
|
|
346
|
-
}
|
|
347
|
-
}
|
|
348
|
-
return _template;
|
|
349
|
-
}
|
|
350
|
-
getMessageOptions(loggedInUser, messageObject, theme, group) {
|
|
351
|
-
let _optionList = [];
|
|
352
|
-
if (messageObject.getCategory() ==
|
|
353
|
-
CometChatUIKitConstants.MessageCategory.message) {
|
|
354
|
-
switch (messageObject.getType()) {
|
|
355
|
-
case CometChatUIKitConstants.MessageTypes.text:
|
|
356
|
-
_optionList = ChatConfigurator.getDataSource().getTextMessageOptions(loggedInUser, messageObject, theme, group);
|
|
357
|
-
break;
|
|
358
|
-
case CometChatUIKitConstants.MessageTypes.image:
|
|
359
|
-
_optionList = ChatConfigurator.getDataSource().getImageMessageOptions(loggedInUser, messageObject, theme, group);
|
|
360
|
-
break;
|
|
361
|
-
case CometChatUIKitConstants.MessageTypes.video:
|
|
362
|
-
_optionList = ChatConfigurator.getDataSource().getVideoMessageOptions(loggedInUser, messageObject, theme, group);
|
|
363
|
-
break;
|
|
364
|
-
case CometChatUIKitConstants.MessageTypes.groupMember:
|
|
365
|
-
_optionList = [];
|
|
366
|
-
break;
|
|
367
|
-
case CometChatUIKitConstants.MessageTypes.file:
|
|
368
|
-
_optionList = ChatConfigurator.getDataSource().getFileMessageOptions(loggedInUser, messageObject, theme, group);
|
|
369
|
-
break;
|
|
370
|
-
case CometChatUIKitConstants.MessageTypes.audio:
|
|
371
|
-
_optionList = ChatConfigurator.getDataSource().getAudioMessageOptions(loggedInUser, messageObject, theme, group);
|
|
372
|
-
break;
|
|
373
|
-
}
|
|
374
|
-
}
|
|
375
|
-
else if (messageObject.getCategory() ==
|
|
376
|
-
CometChatUIKitConstants.MessageCategory.custom ||
|
|
377
|
-
messageObject.getCategory() ==
|
|
378
|
-
CometChatUIKitConstants.MessageCategory.interactive) {
|
|
379
|
-
_optionList = ChatConfigurator.getDataSource().getCommonOptions(loggedInUser, messageObject, theme, group);
|
|
380
|
-
}
|
|
381
|
-
return _optionList;
|
|
382
|
-
}
|
|
383
|
-
getCommonOptions(loggedInUser, messageObject, theme, group) {
|
|
384
|
-
let isSentByMe = this.isSentByMe(loggedInUser, messageObject);
|
|
385
|
-
let isParticipant = false;
|
|
386
|
-
if (group?.getScope() == CometChatUIKitConstants.groupMemberScope.participant)
|
|
387
|
-
isParticipant = true;
|
|
388
|
-
let messageOptionList = [];
|
|
389
|
-
messageOptionList.push(this.getReactionOption(theme));
|
|
390
|
-
if (!messageObject?.getParentMessageId()) {
|
|
391
|
-
messageOptionList.push(this.getReplyInThreadOption(theme));
|
|
392
|
-
}
|
|
393
|
-
if (isSentByMe) {
|
|
394
|
-
messageOptionList.push(this.getMessageInfoOption(theme));
|
|
395
|
-
}
|
|
396
|
-
if (isSentByMe || (!isParticipant && group))
|
|
397
|
-
messageOptionList.push(this.getDeleteOption(theme));
|
|
398
|
-
if (group && !isSentByMe) {
|
|
399
|
-
messageOptionList.push(this.getMessagePrivatelyOption(theme));
|
|
400
|
-
}
|
|
401
|
-
return messageOptionList;
|
|
402
|
-
}
|
|
403
|
-
getAllMessageTypes() {
|
|
404
|
-
return [
|
|
405
|
-
CometChatUIKitConstants.MessageTypes.text,
|
|
406
|
-
CometChatUIKitConstants.MessageTypes.image,
|
|
407
|
-
CometChatUIKitConstants.MessageTypes.audio,
|
|
408
|
-
CometChatUIKitConstants.MessageTypes.video,
|
|
409
|
-
CometChatUIKitConstants.MessageTypes.file,
|
|
410
|
-
CometChatUIKitConstants.MessageTypes.groupMember,
|
|
411
|
-
CometChatUIKitConstants.MessageTypes.form,
|
|
412
|
-
CometChatUIKitConstants.MessageTypes.card,
|
|
413
|
-
CometChatUIKitConstants.MessageTypes.scheduler,
|
|
414
|
-
];
|
|
415
|
-
}
|
|
416
|
-
addList() {
|
|
417
|
-
return "<Message Utils>";
|
|
418
|
-
}
|
|
419
|
-
getAllMessageCategories() {
|
|
420
|
-
return [
|
|
421
|
-
CometChatUIKitConstants.MessageCategory.message,
|
|
422
|
-
CometChatUIKitConstants.MessageCategory.action,
|
|
423
|
-
CometChatUIKitConstants.MessageCategory.interactive,
|
|
424
|
-
];
|
|
425
|
-
}
|
|
426
|
-
getAuxiliaryOptions(id, user, group) {
|
|
427
|
-
return null;
|
|
428
|
-
}
|
|
429
|
-
getId() {
|
|
430
|
-
return "messageUtils";
|
|
431
|
-
}
|
|
432
|
-
getActionMessage(message) {
|
|
433
|
-
try {
|
|
434
|
-
if (message instanceof CometChat.Action) {
|
|
435
|
-
const action = message.getAction();
|
|
436
|
-
const actionBy = message.getActionBy();
|
|
437
|
-
const actionOn = message.getActionOn();
|
|
438
|
-
const byString = actionBy.getName();
|
|
439
|
-
const forString = action === CometChatUIKitConstants.groupMemberAction.JOINED ||
|
|
440
|
-
action === CometChatUIKitConstants.groupMemberAction.LEFT
|
|
441
|
-
? ""
|
|
442
|
-
: actionOn.getName();
|
|
443
|
-
switch (action) {
|
|
444
|
-
case CometChatUIKitConstants.groupMemberAction.ADDED:
|
|
445
|
-
return `${byString} ${localize("ADDED")} ${forString}`;
|
|
446
|
-
case CometChatUIKitConstants.groupMemberAction.JOINED:
|
|
447
|
-
return `${byString} ${localize("JOINED")}`;
|
|
448
|
-
case CometChatUIKitConstants.groupMemberAction.LEFT:
|
|
449
|
-
return `${byString} ${localize("LEFT")}`;
|
|
450
|
-
case CometChatUIKitConstants.groupMemberAction.KICKED:
|
|
451
|
-
return `${byString} ${localize("KICKED")} ${forString}`;
|
|
452
|
-
case CometChatUIKitConstants.groupMemberAction.BANNED:
|
|
453
|
-
return `${byString} ${localize("BANNED")} ${forString}`;
|
|
454
|
-
case CometChatUIKitConstants.groupMemberAction.UNBANNED:
|
|
455
|
-
return `${byString} ${localize("UNBANNED")} ${forString}`;
|
|
456
|
-
case CometChatUIKitConstants.groupMemberAction.SCOPE_CHANGE:
|
|
457
|
-
return `${byString} ${localize("MADE")} ${forString} ${message.getNewScope()}`;
|
|
458
|
-
default:
|
|
459
|
-
return "";
|
|
460
|
-
}
|
|
461
|
-
}
|
|
462
|
-
else {
|
|
463
|
-
return "";
|
|
464
|
-
}
|
|
465
|
-
}
|
|
466
|
-
catch (e) {
|
|
467
|
-
return "";
|
|
468
|
-
}
|
|
469
|
-
}
|
|
470
|
-
imageAttachmentOption(theme) {
|
|
471
|
-
return new CometChatMessageComposerAction({
|
|
472
|
-
id: CometChatUIKitConstants.MessageTypes.image,
|
|
473
|
-
title: localize("ATTACH_IMAGE"),
|
|
474
|
-
iconURL: "assets/photolibrary.svg",
|
|
475
|
-
onClick: null,
|
|
476
|
-
iconTint: theme.palette.getAccent700(),
|
|
477
|
-
titleFont: fontHelper(theme.typography.subtitle1),
|
|
478
|
-
titleColor: theme.palette.getAccent700(),
|
|
479
|
-
borderRadius: "8px",
|
|
480
|
-
background: theme.palette.getAccent100(),
|
|
481
|
-
});
|
|
482
|
-
}
|
|
483
|
-
videoAttachmentOption(theme) {
|
|
484
|
-
return new CometChatMessageComposerAction({
|
|
485
|
-
id: CometChatUIKitConstants.MessageTypes.video,
|
|
486
|
-
title: localize("ATTACH_VIDEO"),
|
|
487
|
-
iconURL: "assets/video.svg",
|
|
488
|
-
onClick: null,
|
|
489
|
-
iconTint: theme.palette.getAccent700(),
|
|
490
|
-
titleFont: fontHelper(theme.typography.subtitle1),
|
|
491
|
-
titleColor: theme.palette.getAccent700(),
|
|
492
|
-
borderRadius: "8px",
|
|
493
|
-
background: theme.palette.getAccent100(),
|
|
494
|
-
});
|
|
495
|
-
}
|
|
496
|
-
audioAttachmentOption(theme) {
|
|
497
|
-
return new CometChatMessageComposerAction({
|
|
498
|
-
id: CometChatUIKitConstants.MessageTypes.audio,
|
|
499
|
-
title: localize("ATTACH_AUDIO"),
|
|
500
|
-
iconURL: "assets/audio-file.svg",
|
|
501
|
-
onClick: null,
|
|
502
|
-
iconTint: theme.palette.getAccent700(),
|
|
503
|
-
titleFont: fontHelper(theme.typography.subtitle1),
|
|
504
|
-
titleColor: theme.palette.getAccent700(),
|
|
505
|
-
borderRadius: "8px",
|
|
506
|
-
background: theme.palette.getAccent100(),
|
|
507
|
-
});
|
|
508
|
-
}
|
|
509
|
-
fileAttachmentOption(theme) {
|
|
510
|
-
return new CometChatMessageComposerAction({
|
|
511
|
-
id: CometChatUIKitConstants.MessageTypes.file,
|
|
512
|
-
title: localize("ATTACH_FILE"),
|
|
513
|
-
iconURL: "assets/attachment-file.svg",
|
|
514
|
-
onClick: null,
|
|
515
|
-
iconTint: theme.palette.getAccent700(),
|
|
516
|
-
titleFont: fontHelper(theme.typography.subtitle1),
|
|
517
|
-
titleColor: theme.palette.getAccent700(),
|
|
518
|
-
borderRadius: "8px",
|
|
519
|
-
background: theme.palette.getAccent100(),
|
|
520
|
-
});
|
|
521
|
-
}
|
|
522
|
-
getAttachmentOptions(theme, user, group, id) {
|
|
523
|
-
let actions = [
|
|
524
|
-
this.imageAttachmentOption(theme),
|
|
525
|
-
this.videoAttachmentOption(theme),
|
|
526
|
-
this.audioAttachmentOption(theme),
|
|
527
|
-
this.fileAttachmentOption(theme),
|
|
528
|
-
];
|
|
529
|
-
return actions;
|
|
530
|
-
}
|
|
531
|
-
getLastConversationMessage(conversation, loggedInUser, additionalConfigurations) {
|
|
532
|
-
let config = {
|
|
533
|
-
...additionalConfigurations,
|
|
534
|
-
textFormatters: additionalConfigurations?.textFormatters &&
|
|
535
|
-
additionalConfigurations?.textFormatters.length
|
|
536
|
-
? [...additionalConfigurations.textFormatters]
|
|
537
|
-
: [this.getMentionsTextFormatter({ theme: additionalConfigurations.theme, disableMentions: additionalConfigurations.disableMentions })],
|
|
538
|
-
};
|
|
539
|
-
let message = ConversationUtils.getLastConversationMessage(conversation, loggedInUser, config);
|
|
540
|
-
let messageObject = conversation?.getLastMessage();
|
|
541
|
-
if (messageObject) {
|
|
542
|
-
let textFormatters = config.textFormatters;
|
|
543
|
-
if (config && !config.disableMentions) {
|
|
544
|
-
let mentionsTextFormatter;
|
|
545
|
-
for (let i = 0; i < textFormatters.length; i++) {
|
|
546
|
-
if (textFormatters[i] instanceof CometChatMentionsFormatter) {
|
|
547
|
-
mentionsTextFormatter = textFormatters[i];
|
|
548
|
-
mentionsTextFormatter.setMessage(messageObject);
|
|
549
|
-
if (messageObject.getMentionedUsers().length) {
|
|
550
|
-
mentionsTextFormatter.setCometChatUserGroupMembers(messageObject.getMentionedUsers());
|
|
551
|
-
}
|
|
552
|
-
mentionsTextFormatter.setLoggedInUser(CometChatUIKitLoginListener.getLoggedInUser());
|
|
553
|
-
}
|
|
554
|
-
if (mentionsTextFormatter) {
|
|
555
|
-
break;
|
|
556
|
-
}
|
|
557
|
-
}
|
|
558
|
-
if (!mentionsTextFormatter) {
|
|
559
|
-
mentionsTextFormatter =
|
|
560
|
-
ChatConfigurator.getDataSource().getMentionsTextFormatter({
|
|
561
|
-
messageObject,
|
|
562
|
-
...config,
|
|
563
|
-
alignment: null,
|
|
564
|
-
theme: additionalConfigurations.theme,
|
|
565
|
-
});
|
|
566
|
-
textFormatters.push(mentionsTextFormatter);
|
|
567
|
-
}
|
|
568
|
-
}
|
|
569
|
-
if (messageObject &&
|
|
570
|
-
messageObject instanceof CometChat.TextMessage) {
|
|
571
|
-
for (let i = 0; i < textFormatters.length; i++) {
|
|
572
|
-
message = textFormatters[i].getFormattedText(message, { mentionsTargetElement: MentionsTargetElement.conversation });
|
|
573
|
-
}
|
|
574
|
-
}
|
|
575
|
-
}
|
|
576
|
-
return message;
|
|
577
|
-
}
|
|
578
|
-
/**
|
|
579
|
-
* Adds styled @ for every mention in the text by matching uid
|
|
580
|
-
*
|
|
581
|
-
* @param {CometChat.TextMessage} message
|
|
582
|
-
* @param {string} subtitle
|
|
583
|
-
* @returns {void}
|
|
584
|
-
*/
|
|
585
|
-
getMentionsFormattedText(message, subtitle, mentionsFormatterParams) {
|
|
586
|
-
const regex = /<@uid:(.*?)>/g;
|
|
587
|
-
let messageText = message.getText();
|
|
588
|
-
let messageTextTmp = subtitle;
|
|
589
|
-
let match = regex.exec(messageText);
|
|
590
|
-
let cometChatUsers = [];
|
|
591
|
-
let mentionedUsers = message.getMentionedUsers();
|
|
592
|
-
while (match !== null) {
|
|
593
|
-
let user;
|
|
594
|
-
for (let i = 0; i < mentionedUsers.length; i++) {
|
|
595
|
-
if (match[1] == mentionedUsers[i].getUid()) {
|
|
596
|
-
user = mentionedUsers[i];
|
|
597
|
-
}
|
|
598
|
-
}
|
|
599
|
-
if (user) {
|
|
600
|
-
cometChatUsers.push(user);
|
|
601
|
-
}
|
|
602
|
-
match = regex.exec(messageText);
|
|
603
|
-
}
|
|
604
|
-
let mentionsFormatter = this.getMentionsTextFormatter(mentionsFormatterParams);
|
|
605
|
-
mentionsFormatter.setClasses(["cc-mentions"]);
|
|
606
|
-
mentionsFormatter.setCometChatUserGroupMembers(cometChatUsers);
|
|
607
|
-
messageTextTmp = mentionsFormatter.getFormattedText(messageTextTmp, mentionsFormatterParams);
|
|
608
|
-
return messageTextTmp;
|
|
609
|
-
}
|
|
610
|
-
getAIOptions(theme, id) {
|
|
611
|
-
return [];
|
|
612
|
-
}
|
|
613
|
-
getAllTextFormatters(formatterParams) {
|
|
614
|
-
let formatters = [];
|
|
615
|
-
const mentionsFormatter = formatterParams.disableMentions ? null : ChatConfigurator.getDataSource().getMentionsTextFormatter(formatterParams);
|
|
616
|
-
const urlTextFormatter = ChatConfigurator.getDataSource().getUrlTextFormatter(formatterParams);
|
|
617
|
-
if (mentionsFormatter) {
|
|
618
|
-
formatters.push(mentionsFormatter);
|
|
619
|
-
}
|
|
620
|
-
if (urlTextFormatter) {
|
|
621
|
-
formatters.push(urlTextFormatter);
|
|
622
|
-
}
|
|
623
|
-
return formatters;
|
|
624
|
-
}
|
|
625
|
-
getMentionsTextFormatter(params) {
|
|
626
|
-
let mentionsTextFormatter = new CometChatMentionsFormatter();
|
|
627
|
-
if (params && params.theme) {
|
|
628
|
-
mentionsTextFormatter.setComposerMentionStyle(new UserMentionStyle({
|
|
629
|
-
loggedInUserTextFont: fontHelper(params.theme.typography.text2),
|
|
630
|
-
loggedInUserTextColor: params.theme.palette.getPrimary(),
|
|
631
|
-
loggedInUserTextBackground: "",
|
|
632
|
-
mentionTextFont: fontHelper(params.theme.typography.text2),
|
|
633
|
-
mentionTextColor: params.theme.palette.getPrimary(),
|
|
634
|
-
mentionTextBackground: "",
|
|
635
|
-
}));
|
|
636
|
-
mentionsTextFormatter.setConversationMentionStyle(new UserMentionStyle({
|
|
637
|
-
loggedInUserTextFont: fontHelper(params.theme.typography.text3),
|
|
638
|
-
loggedInUserTextColor: params.theme.palette.getPrimary(),
|
|
639
|
-
loggedInUserTextBackground: "",
|
|
640
|
-
mentionTextFont: fontHelper(params.theme.typography.text3),
|
|
641
|
-
mentionTextColor: params.theme.palette.getPrimary(),
|
|
642
|
-
mentionTextBackground: "",
|
|
643
|
-
}));
|
|
644
|
-
mentionsTextFormatter.setRightBubbleMentionStyle(new UserMentionStyle({
|
|
645
|
-
loggedInUserTextFont: fontHelper(params.theme.typography.text3),
|
|
646
|
-
loggedInUserTextColor: params.theme.palette.getTertiary(),
|
|
647
|
-
loggedInUserTextBackground: "",
|
|
648
|
-
mentionTextFont: fontHelper(params.theme.typography.text3),
|
|
649
|
-
mentionTextColor: params.theme.palette.getTertiary(),
|
|
650
|
-
mentionTextBackground: "",
|
|
651
|
-
}));
|
|
652
|
-
mentionsTextFormatter.setLeftBubbleMentionStyle(new UserMentionStyle({
|
|
653
|
-
loggedInUserTextFont: fontHelper(params.theme.typography.text3),
|
|
654
|
-
loggedInUserTextColor: params.theme.palette.getPrimary(),
|
|
655
|
-
loggedInUserTextBackground: "",
|
|
656
|
-
mentionTextFont: fontHelper(params.theme.typography.text3),
|
|
657
|
-
mentionTextColor: params.theme.palette.getPrimary(),
|
|
658
|
-
mentionTextBackground: "",
|
|
659
|
-
}));
|
|
660
|
-
}
|
|
661
|
-
return mentionsTextFormatter;
|
|
662
|
-
}
|
|
663
|
-
getUrlTextFormatter(params = {}) {
|
|
664
|
-
let urlTextFormatter = new CometChatUrlsFormatter([
|
|
665
|
-
/(https?:\/\/[^\s]+)/g,
|
|
666
|
-
]);
|
|
667
|
-
if (params.alignment == MessageBubbleAlignment.left) {
|
|
668
|
-
urlTextFormatter.setStyle({
|
|
669
|
-
formattedTextColor: params.theme.palette.getPrimary(),
|
|
670
|
-
formattedTextFont: fontHelper(params.theme.typography.text3),
|
|
671
|
-
});
|
|
672
|
-
}
|
|
673
|
-
else {
|
|
674
|
-
urlTextFormatter.setStyle({
|
|
675
|
-
formattedTextColor: params.theme.palette.getTertiary(),
|
|
676
|
-
formattedTextFont: fontHelper(params.theme.typography.text3),
|
|
677
|
-
});
|
|
678
|
-
}
|
|
679
|
-
return urlTextFormatter;
|
|
680
|
-
}
|
|
681
|
-
}
|
|
682
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWVzc2FnZVV0aWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2hhdC11aWtpdC1hbmd1bGFyL3NyYy9TaGFyZWQvVXRpbHMvTWVzc2FnZVV0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxzQkFBc0IsRUFDdEIsc0JBQXNCLEVBQ3RCLHdCQUF3QixFQUN4Qiw4QkFBOEIsRUFFOUIsUUFBUSxFQUNSLHVCQUF1QixFQUN2QixVQUFVLEVBRVYscUJBQXFCLEdBQ3RCLE1BQU0sNEJBQTRCLENBQUM7QUFDcEMsT0FBTyxFQUNMLDBCQUEwQixFQUUxQiwyQkFBMkIsRUFDM0Isc0JBQXNCLEVBQ3RCLGlCQUFpQixFQUNqQixnQkFBZ0IsR0FDakIsTUFBTSx5QkFBeUIsQ0FBQztBQUNqQyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFFM0QsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFFakUsTUFBTSxPQUFPLFlBQVk7SUFDdkI7Ozs7S0FJQztJQUVELGFBQWEsQ0FBQyxLQUFxQjtRQUNqQyxPQUFPLElBQUksc0JBQXNCLENBQUM7WUFDaEMsRUFBRSxFQUFFLHVCQUF1QixDQUFDLGFBQWEsQ0FBQyxXQUFXO1lBQ3JELEtBQUssRUFBRSxRQUFRLENBQUMsTUFBTSxDQUFDO1lBQ3ZCLE9BQU8sRUFBRSxxQkFBcUI7WUFDOUIsT0FBTyxFQUFFLElBQUk7WUFDYixRQUFRLEVBQUUsS0FBSyxDQUFDLE9BQU8sQ0FBQyxZQUFZLEVBQUU7WUFDdEMsZUFBZSxFQUFFLGFBQWE7WUFDOUIsU0FBUyxFQUFFLFVBQVUsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQztZQUNqRCxVQUFVLEVBQUUsS0FBSyxDQUFDLE9BQU8sQ0FBQyxZQUFZLEVBQUU7U0FDekMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUNEOzs7O0tBSUM7SUFF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SUFFRCxtQkFBbUIsQ0FBQyxTQUFjLEVBQUU7UUFDbEMsSUFBSSxnQkFBZ0IsR0FBRyxJQUFJLHNCQUFzQixDQUFDO1lBQ2hELHNCQUFzQjtTQUN2QixDQUFDLENBQUM7UUFDSCxJQUFJLE1BQU0sQ0FBQyxTQUFTLElBQUksc0JBQXNCLENBQUMsSUFBSSxFQUFFO1lBQ25ELGdCQUFnQixDQUFDLFFBQVEsQ0FBQztnQkFDeEIsa0JBQWtCLEVBQUUsTUFBTSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFO2dCQUNyRCxpQkFBaUIsRUFBRSxVQUFVLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDO2FBQzdELENBQUMsQ0FBQztTQUNKO2FBQU07WUFDTCxnQkFBZ0IsQ0FBQyxRQUFRLENBQUM7Z0JBQ3hCLGtCQUFrQixFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRTtnQkFDdEQsaUJBQWlCLEVBQUUsVUFBVSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQzthQUM3RCxDQUFDLENBQUM7U0FDSjtRQUNELE9BQU8sZ0JBQWdCLENBQUM7SUFDMUIsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tZXRDaGF0TWVzc2FnZU9wdGlvbixcbiAgTWVzc2FnZUJ1YmJsZUFsaWdubWVudCxcbiAgQ29tZXRDaGF0TWVzc2FnZVRlbXBsYXRlLFxuICBDb21ldENoYXRNZXNzYWdlQ29tcG9zZXJBY3Rpb24sXG4gIENvbWV0Q2hhdFRoZW1lLFxuICBsb2NhbGl6ZSxcbiAgQ29tZXRDaGF0VUlLaXRDb25zdGFudHMsXG4gIGZvbnRIZWxwZXIsXG4gIENvbWV0Q2hhdEFjdGlvbnNWaWV3LFxuICBNZW50aW9uc1RhcmdldEVsZW1lbnQsXG59IGZyb20gXCJAY29tZXRjaGF0L3Vpa2l0LXJlc291cmNlc1wiO1xuaW1wb3J0IHtcbiAgQ29tZXRDaGF0TWVudGlvbnNGb3JtYXR0ZXIsXG4gIENvbWV0Q2hhdFRleHRGb3JtYXR0ZXIsXG4gIENvbWV0Q2hhdFVJS2l0TG9naW5MaXN0ZW5lcixcbiAgQ29tZXRDaGF0VXJsc0Zvcm1hdHRlcixcbiAgQ29udmVyc2F0aW9uVXRpbHMsXG4gIFVzZXJNZW50aW9uU3R5bGUsXG59IGZyb20gXCJAY29tZXRjaGF0L3Vpa2l0LXNoYXJlZFwiO1xuaW1wb3J0IHsgQ29tZXRDaGF0IH0gZnJvbSBcIkBjb21ldGNoYXQvY2hhdC1zZGstamF2YXNjcmlwdFwiO1xuaW1wb3J0IHsgRGF0YVNvdXJjZSB9IGZyb20gXCIuLi9GcmFtZXdvcmsvRGF0YVNvdXJjZVwiO1xuaW1wb3J0IHsgQ2hhdENvbmZpZ3VyYXRvciB9IGZyb20gXCIuLi9GcmFtZXdvcmsvQ2hhdENvbmZpZ3VyYXRvclwiO1xuaW1wb3J0IHsgQ29tZXRDaGF0VUlLaXQgfSBmcm9tIFwiLi4vQ29tZXRDaGF0VUlraXQvQ29tZXRDaGF0VUlLaXRcIjtcbmV4cG9ydCBjbGFzcyBNZXNzYWdlVXRpbHMgaW1wbGVtZW50cyBEYXRhU291cmNlIHtcbiAgLyoqXG4gKiBDcmVhdGVzIGFuIG9wdGlvbiB0byBlZGl0IG1lc3NhZ2UuXG4gKiBAcGFyYW0ge0NvbWV0Q2hhdFRoZW1lfSB0aGVtZSAtIFRoZSB0aGVtZSBvYmplY3QuXG4gKiBAcmV0dXJuIHtDb21ldENoYXRNZXNzYWdlT3B0aW9ufSAtIFJldHVybnMgYSBuZXcgbWVzc2FnZSBvcHRpb24uXG4gKi9cblxuICBnZXRFZGl0T3B0aW9uKHRoZW1lOiBDb21ldENoYXRUaGVtZSk6IENvbWV0Q2hhdE1lc3NhZ2VPcHRpb24ge1xuICAgIHJldHVybiBuZXcgQ29tZXRDaGF0TWVzc2FnZU9wdGlvbih7XG4gICAgICBpZDogQ29tZXRDaGF0VUlLaXRDb25zdGFudHMuTWVzc2FnZU9wdGlvbi5lZGl0TWVzc2FnZSxcbiAgICAgIHRpdGxlOiBsb2NhbGl6ZShcIkVESVRcIiksXG4gICAgICBpY29uVVJMOiBcImFzc2V0cy9lZGl0aWNvbi5zdmdcIixcbiAgICAgIG9uQ2xpY2s6IG51bGwsXG4gICAgICBpY29uVGludDogdGhlbWUucGFsZXR0ZS5nZXRBY2NlbnQ2MDAoKSxcbiAgICAgIGJhY2tncm91bmRDb2xvcjogXCJ0cmFuc3BhcmVudFwiLFxuICAgICAgdGl0bGVGb250OiBmb250SGVscGVyKHRoZW1lLnR5cG9ncmFwaHkuc3VidGl0bGUxKSxcbiAgICAgIHRpdGxlQ29sb3I6IHRoZW1lLnBhbGV0dGUuZ2V0QWNjZW50NjAwKCksXG4gICAgfSk7XG4gIH1cbiAgLyoqXG4gKiBDcmVhdGVzIGFuIG9wdGlvbiB0byByZWFjdCB0byBhIG1lc3NhZ2UuXG4gKiBAcGFyYW0ge0NvbWV0Q2hhdFRoZW1lfSB0aGVtZSAtIFRoZSB0aGVtZSBvYmplY3QuXG4gKiBAcmV0dXJuIHtDb21ldENoYXRNZXNzYWdlT3B0aW9ufSAtIFJldHVybnMgYSBuZXcgbWVzc2FnZSBvcHRpb24uXG4gKi9cblxuICBnZXRSZWFjdGlvbk9wdGlvbih0aGVtZTogQ29tZXRDaGF0VGhlbWUpOiBDb21ldENoYXRNZXNzYWdlT3B0aW9uIHtcbiAgICByZXR1cm4gbmV3IENvbWV0Q2hhdE1lc3NhZ2VPcHRpb24oe1xuICAgICAgaWQ6IENvbWV0Q2hhdFVJS2l0Q29uc3RhbnRzLk1lc3NhZ2VPcHRpb24ucmVhY3RUb01lc3NhZ2UsXG4gICAgICB0aXRsZTogbG9jYWxpemUoXCJSRUFDVFwiKSxcbiAgICAgIGljb25VUkw6IFwiYXNzZXRzL2FkZHJlYWN0aW9uLnN2Z1wiLFxuICAgICAgb25DbGljazogdW5kZWZpbmVkLFxuICAgICAgaWNvblRpbnQ6IHRoZW1lLnBhbGV0dGUuZ2V0QWNjZW50NjAwKCksXG4gICAgICBiYWNrZ3JvdW5kQ29sb3I6IFwidHJhbnNwYXJlbnRcIixcbiAgICAgIHRpdGxlRm9udDogZm9udEhlbHBlcih0aGVtZS50eXBvZ3JhcGh5LnN1YnRpdGxlMSksXG4gICAgICB0aXRsZUNvbG9yOiB0aGVtZS5wYWxldHRlLmdldEFjY2VudDYwMCgpLFxuICAgIH0pO1xuICB9XG4gIC8qKlxuICogQ3JlYXRlcyBhbiBvcHRpb24gdG8gZ2V0IGluZm8gYWJvdXQgYSBtZXNzYWdlLlxuICogQHBhcmFtIHtDb21ldENoYXRUaGVtZX0gdGhlbWUgLSBUaGUgdGhlbWUgb2JqZWN0LlxuICogQHJldHVybiB7Q29tZXRDaGF0TWVzc2FnZU9wdGlvbn0gLSBSZXR1cm5zIGEgbmV3IG1lc3NhZ2Ugb3B0aW9uLlxuICovXG5cbiAgZ2V0TWVzc2FnZUluZm9PcHRpb24odGhlbWU6IENvbWV0Q2hhdFRoZW1lKTogQ29tZXRDaGF0TWVzc2FnZU9wdGlvbiB7XG4gICAgcmV0dXJuIG5ldyBDb21ldENoYXRNZXNzYWdlT3B0aW9uKHtcbiAgICAgIGlkOiBDb21ldENoYXRVSUtpdENvbnN0YW50cy5NZXNzYWdlT3B0aW9uLm1lc3NhZ2VJbmZvcm1hdGlvbixcbiAgICAgIHRpdGxlOiBsb2NhbGl6ZShcIklORk9cIiksXG4gICAgICBpY29uVVJMOiBcImFzc2V0cy9JbmZvLnN2Z1wiLFxuICAgICAgb25DbGljazogbnVsbCxcbiAgICAgIGljb25UaW50OiB0aGVtZS5wYWxldHRlLmdldEFjY2VudDYwMCgpLFxuICAgICAgYmFja2dyb3VuZENvbG9yOiBcInRyYW5zcGFyZW50XCIsXG4gICAgICB0aXRsZUZvbnQ6IGZvbnRIZWxwZXIodGhlbWUudHlwb2dyYXBoeS5zdWJ0aXRsZTEpLFxuICAgICAgdGl0bGVDb2xvcjogdGhlbWUucGFsZXR0ZS5nZXRBY2NlbnQ2MDAoKSxcbiAgICB9KTtcbiAgfVxuICAvKipcbiAgKiBDcmVhdGVzIGFuIG9wdGlvbiB0byBzZW5kIGEgcHJpdmF0ZSBtZXNzYWdlLlxuICAqIEBwYXJhbSB7Q29tZXRDaGF0VGhlbWV9IHRoZW1lIC0gVGhlIHRoZW1lIG9iamVjdC5cbiAgKiBAcmV0dXJuIHtDb21ldENoYXRNZXNzYWdlT3B0aW9ufSAtIFJldHVybnMgYSBuZXcgbWVzc2FnZSBvcHRpb24uXG4gICovXG4gIGdldE1lc3NhZ2VQcml2YXRlbHlPcHRpb24odGhlbWU6IENvbWV0Q2hhdFRoZW1lKTogQ29tZXRDaGF0TWVzc2FnZU9wdGlvbiB7XG4gICAgcmV0dXJuIG5ldyBDb21ldENoYXRNZXNzYWdlT3B0aW9uKHtcbiAgICAgIGlkOiBDb21ldENoYXRVSUtpdENvbnN0YW50cy5NZXNzYWdlT3B0aW9uLnNlbmRNZXNzYWdlUHJpdmF0ZWx5LFxuICAgICAgdGl0bGU6IGxvY2FsaXplKFwiTUVTU0FHRV9QUklWQVRFTFlcIiksXG4gICAgICBpY29uVVJMOiBcImFzc2V0cy9tZXNzYWdlLXByaXZhdGVseS5zdmdcIixcbiAgICAgIG9uQ2xpY2s6IG51bGwsXG4gICAgICBpY29uVGludDogdGhlbWUucGFsZXR0ZS5nZXRBY2NlbnQ2MDAoKSxcbiAgICAgIGJhY2tncm91bmRDb2xvcjogXCJ0cmFuc3BhcmVudFwiLFxuICAgICAgdGl0bGVGb250OiBmb250SGVscGVyKHRoZW1lLnR5cG9ncmFwaHkuc3VidGl0bGUxKSxcbiAgICAgIHRpdGxlQ29sb3I6IHRoZW1lLnBhbGV0dGUuZ2V0QWNjZW50NjAwKCksXG4gICAgfSk7XG4gIH1cbiAgLyoqXG4gKiBDcmVhdGVzIGFuIG9wdGlvbiB0byBkZWxldGUgYSBtZXNzYWdlLlxuICogQHBhcmFtIHtDb21ldENoYXRUaGVtZX0gdGhlbWUgLSBUaGUgdGhlbWUgb2JqZWN0LlxuICogQHJldHVybiB7Q29tZXRDaGF0TWVzc2FnZU9wdGlvbn0gLSBSZXR1cm5zIGEgbmV3IG1lc3NhZ2Ugb3B0aW9uLlxuICovXG5cbiAgZ2V0RGVsZXRlT3B0aW9uKHRoZW1lOiBDb21ldENoYXRUaGVtZSk6IENvbWV0Q2hhdE1lc3NhZ2VPcHRpb24ge1xuICAgIHJldHVybiBuZXcgQ29tZXRDaGF0TWVzc2FnZU9wdGlvbih7XG4gICAgICBpZDogQ29tZXRDaGF0VUlLaXRDb25zdGFudHMuTWVzc2FnZU9wdGlvbi5kZWxldGVNZXNzYWdlLFxuICAgICAgdGl0bGU6IGxvY2FsaXplKFwiREVMRVRFXCIpLFxuICAgICAgaWNvblVSTDogXCJhc3NldHMvZGVsZXRlaWNvbi5zdmdcIixcbiAgICAgIG9uQ2xpY2s6IG51bGwsXG4gICAgICBpY29uVGludDogdGhlbWUucGFsZXR0ZS5nZXRBY2NlbnQ2MDAoKSxcbiAgICAgIGJhY2tncm91bmRDb2xvcjogXCJ0cmFuc3BhcmVudFwiLFxuICAgICAgdGl0bGVGb250OiBmb250SGVscGVyKHRoZW1lLnR5cG9ncmFwaHkuc3VidGl0bGUxKSxcbiAgICAgIHRpdGxlQ29sb3I6IHRoZW1lLnBhbGV0dGUuZ2V0QWNjZW50NjAwKCksXG4gICAgfSk7XG4gIH1cbiAgLyoqXG4gKiBDcmVhdGVzIGFuIG9wdGlvbiB0byByZXBseSB0byBhIG1lc3NhZ2UgaW4gYSB0aHJlYWQuXG4gKiBAcGFyYW0ge0NvbWV0Q2hhdFRoZW1lfSB0aGVtZSAtIFRoZSB0aGVtZSBvYmplY3QuXG4gKiBAcmV0dXJuIHtDb21ldENoYXRNZXNzYWdlT3B0aW9ufSAtIFJldHVybnMgYSBuZXcgbWVzc2FnZSBvcHRpb24uXG4gKi9cblxuICBnZXRSZXBseUluVGhyZWFkT3B0aW9uKHRoZW1lOiBDb21ldENoYXRUaGVtZSk6IENvbWV0Q2hhdE1lc3NhZ2VPcHRpb24ge1xuICAgIHJldHVybiBuZXcgQ29tZXRDaGF0TWVzc2FnZU9wdGlvbih7XG4gICAgICBpZDogQ29tZXRDaGF0VUlLaXRDb25zdGFudHMuTWVzc2FnZU9wdGlvbi5yZXBseUluVGhyZWFkLFxuICAgICAgdGl0bGU6IGxvY2FsaXplKFwiUkVQTFlcIiksXG4gICAgICBpY29uVVJMOiBcImFzc2V0cy90aHJlYWRpY29uLnN2Z1wiLFxuICAgICAgb25DbGljazogbnVsbCxcbiAgICAgIGljb25UaW50OiB0aGVtZS5wYWxldHRlLmdldEFjY2VudDYwMCgpLFxuICAgICAgYmFja2dyb3VuZENvbG9yOiBcInRyYW5zcGFyZW50XCIsXG4gICAgICB0aXRsZUZvbnQ6IGZvbnRIZWxwZXIodGhlbWUudHlwb2dyYXBoeS5zdWJ0aXRsZTEpLFxuICAgICAgdGl0bGVDb2xvcjogdGhlbWUucGFsZXR0ZS5nZXRBY2NlbnQ2MDAoKSxcbiAgICB9KTtcbiAgfVxuICAvKipcbiAqIENyZWF0ZXMgYW4gb3B0aW9uIHRvIGNvcHkgYSBtZXNzYWdlLlxuICogQHBhcmFtIHtDb21ldENoYXRUaGVtZX0gdGhlbWUgLSBUaGUgdGhlbWUgb2JqZWN0LlxuICogQHJldHVybiB7Q29tZXRDaGF0TWVzc2FnZU9wdGlvbn0gLSBSZXR1cm5zIGEgbmV3IG1lc3NhZ2Ugb3B0aW9uLlxuICovXG4gIGdldENvcHlPcHRpb24odGhlbWU6IENvbWV0Q2hhdFRoZW1lKTogQ29tZXRDaGF0TWVzc2FnZU9wdGlvbiB7XG4gICAgcmV0dXJuIG5ldyBDb21ldENoYXRNZXNzYWdlT3B0aW9uKHtcbiAgICAgIGlkOiBDb21ldENoYXRVSUtpdENvbnN0YW50cy5NZXNzYWdlT3B0aW9uLmNvcHlNZXNzYWdlLFxuICAgICAgdGl0bGU6IGxvY2FsaXplKFwiQ09QWVwiKSxcbiAgICAgIGljb25VUkw6IFwiYXNzZXRzL0NvcHkuc3ZnXCIsXG4gICAgICBvbkNsaWNrOiBudWxsLFxuICAgICAgaWNvblRpbnQ6IHRoZW1lLnBhbGV0dGUuZ2V0QWNjZW50NjAwKCksXG4gICAgICBiYWNrZ3JvdW5kQ29sb3I6IFwidHJhbnNwYXJlbnRcIixcbiAgICAgIHRpdGxlRm9udDogZm9udEhlbHBlcih0aGVtZS50eXBvZ3JhcGh5LnN1YnRpdGxlMSksXG4gICAgICB0aXRsZUNvbG9yOiB0aGVtZS5wYWxldHRlLmdldEFjY2VudDYwMCgpLFxuICAgIH0pO1xuICB9XG4gIC8qKlxuICogQ2hlY2tzIGlmIGEgbWVzc2FnZSBpcyBzZW50IGJ5IGN1cnJlbnQgbG9nZ2VkIGluIHVzZXIuXG4gKiBAcGFyYW0ge0NvbWV0Q2hhdC5Vc2VyfSBsb2dnZWRJblVzZXIgLSBUaGUgY3VycmVudCBsb2dnZWQgaW4gdXNlci5cbiAqIEBwYXJhbSB7Q29tZXRDaGF0LkJhc2VNZXNzYWdlfSBtZXNzYWdlIC0gVGhlIG1lc3NhZ2UgdG8gY2hlY2suXG4gKiBAcmV0dXJuIHtib29sZWFufSAtIFJldHVybnMgdHJ1ZSBpZiBtZXNzYWdlIGlzIHNlbnQgYnkgY3VycmVudCBsb2dnZWQgaW4gdXNlciwgb3RoZXJ3aXNlIGZhbHNlLlxuICovXG5cbiAgaXNTZW50QnlNZShcbiAgICBsb2dnZWRJblVzZXI6IENvbWV0Q2hhdC5Vc2VyLFxuICAgIG1lc3NhZ2U6IENvbWV0Q2hhdC5CYXNlTWVzc2FnZVxuICApOiBib29sZWFuIHtcbiAgICByZXR1cm4gbG9nZ2VkSW5Vc2VyLmdldFVpZCgpID09PSBtZXNzYWdlLmdldFNlbmRlcigpLmdldFVpZCgpO1xuICB9XG4gIC8qKlxuICogRmV0Y2hlcyBvcHRpb25zIGZvciB0ZXh0IG1lc3NhZ2VzLlxuICogQHBhcmFtIHtDb21ldENoYXQuVXNlcn0gbG9nZ2VkSW5Vc2VyIC0gVGhlIGN1cnJlbnQgbG9nZ2VkIGluIHVzZXIuXG4gKiBAcGFyYW0ge0NvbWV0Q2hhdC5CYXNlTWVzc2FnZX0gbWVzc2FnZU9iamVjdCAtIFRoZSBtZXNzYWdlIG9iamVjdC5cbiAqIEBwYXJhbSB7Q29tZXRDaGF0VGhlbWV9IHRoZW1lIC0gVGhlIHRoZW1lIG9iamVjdC5cbiAqIEBwYXJhbSB7Q29tZXRDaGF0Lkdyb3VwfSBncm91cCAtIFRoZSBncm91cCBvYmplY3QuXG4gKiBAcmV0dXJuIHtBcnJheTxDb21ldENoYXRNZXNzYWdlT3B0aW9uPn0gLSBSZXR1cm5zIGFuIGFycmF5IG9mIG1lc3NhZ2Ugb3B0aW9ucy5cbiAqL1xuXG4gIGdldFRleHRNZXNzYWdlT3B0aW9ucyhcbiAgICBsb2dnZWRJblVzZXI6IENvbWV0Q2hhdC5Vc2VyLFxuICAgIG1lc3NhZ2VPYmplY3Q6IENvbWV0Q2hhdC5CYXNlTWVzc2FnZSxcbiAgICB0aGVtZTogQ29tZXRDaGF0VGhlbWUsXG4gICAgZ3JvdXA/OiBDb21ldENoYXQuR3JvdXBcbiAgKTogQXJyYXk8Q29tZXRDaGF0TWVzc2FnZU9wdGlvbj4ge1xuICAgIGxldCBpc1NlbnRCeU1lOiBib29sZWFuID0gdGhpcy5pc1NlbnRCeU1lKGxvZ2dlZEluVXNlciwgbWVzc2FnZU9iamVjdCk7XG4gICAgbGV0IGlzUGFydGljaXBhbnQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBpZiAoXG4gICAgICBncm91cD8uZ2V0U2NvcGUoKSA9PSBDb21ldENoYXRVSUtpdENvbnN0YW50cy5ncm91cE1lbWJlclNjb3BlLnBhcnRpY2lwYW50XG4gICAgKSB7XG4gICAgICBpc1BhcnRpY2lwYW50ID0gdHJ1ZTtcbiAgICB9XG4gICAgbGV0IG1lc3NhZ2VPcHRpb25MaXN0OiBBcnJheTxDb21ldENoYXRNZXNzYWdlT3B0aW9uPiA9IFtdO1xuICAgIG1lc3NhZ2VPcHRpb25MaXN0LnB1c2godGhpcy5nZXRSZWFjdGlvbk9wdGlvbih0aGVtZSkpO1xuICAgIGlmICghbWVzc2FnZU9iamVjdC5nZXRQYXJlbnRNZXNzYWdlSWQoKSkge1xuICAgICAgbWVzc2FnZU9wdGlvbkxpc3QucHVzaCh0aGlzLmdldFJlcGx5SW5UaHJlYWRPcHRpb24odGhlbWUpKTtcbiAgICB9XG4gICAgbWVzc2FnZU9wdGlvbkxpc3QucHVzaCh0aGlzLmdldENvcHlPcHRpb24odGhlbWUpKTtcbiAgICBpZiAoaXNTZW50QnlNZSB8fCAoIWlzUGFydGljaXBhbnQgJiYgZ3JvdXApKSB7XG4gICAgICBtZXNzYWdlT3B0aW9uTGlzdC5wdXNoKHRoaXMuZ2V0RWRpdE9wdGlvbih0aGVtZSkpO1xuICAgIH1cbiAgICBpZiAoaXNTZW50QnlNZSkge1xuICAgICAgbWVzc2FnZU9wdGlvbkxpc3QucHVzaCh0aGlzLmdldE1lc3NhZ2VJbmZvT3B0aW9uKHRoZW1lKSk7XG4gICAgfVxuICAgIGlmIChpc1NlbnRCeU1lIHx8ICghaXNQYXJ0aWNpcGFudCAmJiBncm91cCkpXG4gICAgICBtZXNzYWdlT3B0aW9uTGlzdC5wdXNoKHRoaXMuZ2V0RGVsZXRlT3B0aW9uKHRoZW1lKSk7XG4gICAgaWYgKGdyb3VwICYmICFpc1NlbnRCeU1lKSB7XG4gICAgICBtZXNzYWdlT3B0aW9uTGlzdC5wdXNoKHRoaXMuZ2V0TWVzc2FnZVByaXZhdGVseU9wdGlvbih0aGVtZSkpO1xuICAgIH1cbiAgICByZXR1cm4gbWVzc2FnZU9wdGlvbkxpc3Q7XG4gIH1cbiAgLyoqXG4gKiBGZXRjaGVzIG9wdGlvbnMgZm9yIGltYWdlIG1lc3NhZ2VzLlxuICogQHBhcmFtIHtDb21ldENoYXQuVXNlcn0gbG9nZ2VkSW5Vc2VyIC0gVGhlIGN1cnJlbnQgbG9nZ2VkIGluIHVzZXIuXG4gKiBAcGFyYW0ge0NvbWV0Q2hhdC5CYXNlTWVzc2FnZX0gbWVzc2FnZU9iamVjdCAtIFRoZSBtZXNzYWdlIG9iamVjdC5cbiAqIEBwYXJhbSB7Q29tZXRDaGF0VGhlbWV9IHRoZW1lIC0gVGhlIHRoZW1lIG9iamVjdC5cbiAqIEBwYXJhbSB7Q29tZXRDaGF0Lkdyb3VwfSBncm91cCAtIFRoZSBncm91cCBvYmplY3QuXG4gKiBAcmV0dXJuIHtBcnJheTxDb21ldENoYXRNZXNzYWdlT3B0aW9uPn0gLSBSZXR1cm5zIGFuIGFycmF5IG9mIG1lc3NhZ2Ugb3B0aW9ucy5cbiAqL1xuICBnZXRJbWFnZU1lc3NhZ2VPcHRpb25zKFxuICAgIGxvZ2dlZEluVXNlcjogQ29tZXRDaGF0LlVzZXIsXG4gICAgbWVzc2FnZU9iamVjdDogQ29tZXRDaGF0LkJhc2VNZXNzYWdlLFxuICAgIHRoZW1lOiBDb21ldENoYXRUaGVtZSxcbiAgICBncm91cD86IENvbWV0Q2hhdC5Hcm91cFxuICApOiBBcnJheTxDb21ldENoYXRNZXNzYWdlT3B0aW9uPiB7XG4gICAgbGV0IG1lc3NhZ2VPcHRpb25MaXN0OiBDb21ldENoYXRNZXNzYWdlT3B0aW9uW10gPSBbXTtcbiAgICBtZXNzYWdlT3B0aW9uTGlzdCA9IENoYXRDb25maWd1cmF0b3IuZ2V0RGF0YVNvdXJjZSgpLmdldENvbW1vbk9wdGlvbnMoXG4gICAgICBsb2dnZWRJblVzZXIsXG4gICAgICBtZXNzYWdlT2JqZWN0LFxuICAgICAgdGhlbWUsXG4gICAgICBncm91cFxuICAgICk7XG4gICAgcmV0dXJuIG1lc3NhZ2VPcHRpb25MaXN0O1xuICB9XG4gIC8qKlxuICogRmV0Y2hlcyBvcHRpb25zIGZvciB2aWRlbyBtZXNzYWdlcy5cbiAqIEBwYXJhbSB7Q29tZXRDaGF0LlVzZXJ9IGxvZ2dlZEluVXNlciAtIFRoZSBjdXJyZW50IGxvZ2dlZCBpbiB1c2VyLlxuICogQHBhcmFtIHtDb21ldENoYXQuQmFzZU1lc3NhZ2V9IG1lc3NhZ2VPYmplY3QgLSBUaGUgbWVzc2FnZSBvYmplY3QuXG4gKiBAcGFyYW0ge0NvbWV0Q2hhdFRoZW1lfSB0aGVtZSAtIFRoZSB0aGVtZSBvYmplY3QuXG4gKiBAcGFyYW0ge0NvbWV0Q2hhdC5Hcm91cH0gZ3JvdXAgLSAoT3B0aW9uYWwpIFRoZSBncm91cCBvYmplY3QuXG4gKiBAcmV0dXJuIHtBcnJheTxDb21ldENoYXRNZXNzYWdlT3B0aW9uPn0gLSBSZXR1cm5zIGFuIGFycmF5IG9mIG1lc3NhZ2Ugb3B0aW9ucy5cbiAqL1xuICBnZXRWaWRlb01lc3NhZ2VPcHRpb25zKFxuICAgIGxvZ2dlZEluVXNlcjogQ29tZXRDaGF0LlVzZXIsXG4gICAgbWVzc2FnZU9iamVjdDogQ29tZXRDaGF0LkJhc2VNZXNzYWdlLFxuICAgIHRoZW1lOiBDb21ldENoYXRUaGVtZSxcbiAgICBncm91cD86IENvbWV0Q2hhdC5Hcm91cFxuICApOiBBcnJheTxDb21ldENoYXRNZXNzYWdlT3B0aW9uPiB7XG4gICAgbGV0IG1lc3NhZ2VPcHRpb25MaXN0OiBDb21ldENoYXRNZXNzYWdlT3B0aW9uW10gPSBbXTtcbiAgICBtZXNzYWdlT3B0aW9uTGlzdCA9IENoYXRDb25maWd1cmF0b3IuZ2V0RGF0YVNvdXJjZSgpLmdldENvbW1vbk9wdGlvbnMoXG4gICAgICBsb2dnZWRJblVzZXIsXG4gICAgICBtZXNzYWdlT2JqZWN0LFxuICAgICAgdGhlbWUsXG4gICAgICBncm91cFxuICAgICk7XG4gICAgcmV0dXJuIG1lc3NhZ2VPcHRpb25MaXN0O1xuICB9XG4gIC8qKlxuICogRmV0Y2hlcyBvcHRpb25zIGZvciBhdWRpbyBtZXNzYWdlcy5cbiAqIEBwYXJhbSB7Q29tZXRDaGF0LlVzZXJ9IGxvZ2dlZEluVXNlciAtIFRoZSBjdXJyZW50IGxvZ2dlZCBpbiB1c2VyLlxuICogQHBhcmFtIHtDb21ldENoYXQuQmFzZU1lc3NhZ2V9IG1lc3NhZ2VPYmplY3QgLSBUaGUgbWVzc2FnZSBvYmplY3QuXG4gKiBAcGFyYW0ge0NvbWV0Q2hhdFRoZW1lfSB0aGVtZSAtIFRoZSB0aGVtZSBvYmplY3QuXG4gKiBAcGFyYW0ge0NvbWV0Q2hhdC5Hcm91cH0gZ3JvdXAgLSAoT3B0aW9uYWwpIFRoZSBncm91cCBvYmplY3QuXG4gKiBAcmV0dXJuIHtBcnJheTxDb21ldENoYXRNZXNzYWdlT3B0aW9uPn0gLSBSZXR1cm5zIGFuIGFycmF5IG9mIG1lc3NhZ2Ugb3B0aW9ucy5cbiAqL1xuICBnZXRBdWRpb01lc3NhZ2VPcHRpb25zKFxuICAgIGxvZ2dlZEluVXNlcjogQ29tZXRDaGF0LlVzZXIsXG4gICAgbWVzc2FnZU9iamVjdDogQ29tZXRDaGF0LkJhc2VNZXNzYWdlLFxuICAgIHRoZW1lOiBDb21ldENoYXRUaGVtZSxcbiAgICBncm91cD86IENvbWV0Q2hhdC5Hcm91cFxuICApOiBBcnJheTxDb21ldENoYXRNZXNzYWdlT3B0aW9uPiB7XG4gICAgbGV0IG1lc3NhZ2VPcHRpb25MaXN0OiBDb21ldENoYXRNZXNzYWdlT3B0aW9uW10gPSBbXTtcbiAgICBtZXNzYWdlT3B0aW9uTGlzdCA9IENoYXRDb25maWd1cmF0b3IuZ2V0RGF0YVNvdXJjZSgpLmdldENvbW1vbk9wdGlvbnMoXG4gICAgICBsb2dnZWRJblVzZXIsXG4gICAgICBtZXNzYWdlT2JqZWN0LFxuICAgICAgdGhlbWUsXG4gICAgICBncm91cFxuICAgICk7XG4gICAgcmV0dXJuIG1lc3NhZ2VPcHRpb25MaXN0O1xuICB9XG4gIC8qKlxuICogRmV0Y2hlcyBvcHRpb25zIGZvciBmaWxlIG1lc3NhZ2VzLlxuICogQHBhcmFtIHtDb21ldENoYXQuVXNlcn0gbG9nZ2VkSW5Vc2VyIC0gVGhlIGN1cnJlbnQgbG9nZ2VkIGluIHVzZXIuXG4gKiBAcGFyYW0ge0NvbWV0Q2hhdC5CYXNlTWVzc2FnZX0gbWVzc2FnZU9iamVjdCAtIFRoZSBtZXNzYWdlIG9iamVjdC5cbiAqIEBwYXJhbSB7Q29tZXRDaGF0VGhlbWV9IHRoZW1lIC0gVGhlIHRoZW1lIG9iamVjdC5cbiAqIEBwYXJhbSB7Q29tZXRDaGF0Lkdyb3VwfSBncm91cCAtIChPcHRpb25hbCkgVGhlIGdyb3VwIG9iamVjdC5cbiAqIEByZXR1cm4ge0FycmF5PENvbWV0Q2hhdE1lc3NhZ2VPcHRpb24+fSAtIFJldHVybnMgYW4gYXJyYXkgb2YgbWVzc2FnZSBvcHRpb25zLlxuICovXG4gIGdldEZpbGVNZXNzYWdlT3B0aW9ucyhcbiAgICBsb2dnZWRJblVzZXI6IENvbWV0Q2hhdC5Vc2VyLFxuICAgIG1lc3NhZ2VPYmplY3Q6IENvbWV0Q2hhdC5CYXNlTWVzc2FnZSxcbiAgICB0aGVtZTogQ29tZXRDaGF0VGhlbWUsXG4gICAgZ3JvdXA/OiBDb21ldENoYXQuR3JvdXBcbiAgKTogQXJyYXk8Q29tZXRDaGF0TWVzc2FnZU9wdGlvbj4ge1xuICAgIGxldCBtZXNzYWdlT3B0aW9uTGlzdDogQ29tZXRDaGF0TWVzc2FnZU9wdGlvbltdID0gW107XG4gICAgbWVzc2FnZU9wdGlvbkxpc3QgPSBDaGF0Q29uZmlndXJhdG9yLmdldERhdGFTb3VyY2UoKS5nZXRDb21tb25PcHRpb25zKFxuICAgICAgbG9nZ2VkSW5Vc2VyLFxuICAgICAgbWVzc2FnZU9iamVjdCxcbiAgICAgIHRoZW1lLFxuICAgICAgZ3JvdXBcbiAgICApO1xuICAgIHJldHVybiBtZXNzYWdlT3B0aW9uTGlzdDtcbiAgfVxuICBnZXRCb3R0b21WaWV3KFxuICAgIF9tZXNzYWdlT2JqZWN0OiBDb21ldENoYXQuQmFzZU1lc3NhZ2UsXG4gICAgX2FsaWdubWVudDogTWVzc2FnZUJ1YmJsZUFsaWdubWVudFxuICApIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBnZXRTY2hlZHVsZXJNZXNzYWdlVGVtcGxhdGUoKTogQ29tZXRDaGF0TWVzc2FnZVRlbXBsYXRlIHtcbiAgICByZXR1cm4gbmV3IENvbWV0Q2hhdE1lc3NhZ2VUZW1wbGF0ZSh7XG4gICAgICB0eXBlOiBDb21ldENoYXRVSUtpdENvbnN0YW50cy5NZXNzYWdlVHlwZXMuc2NoZWR1bGVyLFxuICAgICAgY2F0ZWdvcnk6IENvbWV0Q2hhdFVJS2l0Q29uc3RhbnRzLk1lc3NhZ2VDYXRlZ29yeS5pbnRlcmFjdGl2ZSxcbiAgICAgIG9wdGlvbnM6IENoYXRDb25maWd1cmF0b3IuZ2V0RGF0YVNvdXJjZSgpLmdldE1lc3NhZ2VPcHRpb25zLFxuICAgIH0pO1xuICB9XG4gIGdldFRleHRNZXNzYWdlVGVtcGxhdGUoKTogQ29tZXRDaGF0TWVzc2FnZVRlbXBsYXRlIHtcbiAgICByZXR1cm4gbmV3IENvbWV0Q2hhdE1lc3NhZ2VUZW1wbGF0ZSh7XG4gICAgICB0eXBlOiBDb21ldENoYXRVSUtpdENvbnN0YW50cy5NZXNzYWdlVHlwZXMudGV4dCxcbiAgICAgIGNhdGVnb3J5OiBDb21ldENoYXRVSUtpdENvbnN0YW50cy5NZXNzYWdlQ2F0ZWdvcnkubWVzc2FnZSxcbiAgICAgIG9wdGlvbnM6IENoYXRDb25maWd1cmF0b3IuZ2V0RGF0YVNvdXJjZSgpLmdldE1lc3NhZ2VPcHRpb25zLFxuICAgIH0pO1xuICB9XG4gIGdldEF1ZGlvTWVzc2FnZVRlbXBsYXRlKCk6IENvbWV0Q2hhdE1lc3NhZ2VUZW1wbGF0ZSB7XG4gICAgcmV0dXJuIG5ldyBDb21ldENoYXRNZXNzYWdlVGVtcGxhdGUoe1xuICAgICAgdHlwZTogQ29tZXRDaGF0VUlLaXRDb25zdGFudHMuTWVzc2FnZVR5cGVzLmF1ZGlvLFxuICAgICAgY2F0ZWdvcnk6IENvbWV0Q2hhdFVJS2l0Q29uc3RhbnRzLk1lc3NhZ2VDYXRlZ29yeS5tZXNzYWdlLFxuICAgICAgb3B0aW9uczogQ2hhdENvbmZpZ3VyYXRvci5nZXREYXRhU291cmNlKCkuZ2V0TWVzc2FnZU9wdGlvbnMsXG4gICAgfSk7XG4gIH1cbiAgZ2V0VmlkZW9NZXNzYWdlVGVtcGxhdGUoKTogQ29tZXRDaGF0TWVzc2FnZVRlbXBsYXRlIHtcbiAgICByZXR1cm4gbmV3IENvbWV0Q2hhdE1lc3NhZ2VUZW1wbGF0ZSh7XG4gICAgICB0eXBlOiBDb21ldENoYXRVSUtpdENvbnN0YW50cy5NZXNzYWdlVHlwZXMudmlkZW8sXG4gICAgICBjYXRlZ29yeTogQ29tZXRDaGF0VUlLaXRDb25zdGFudHMuTWVzc2FnZUNhdGVnb3J5Lm1lc3NhZ2UsXG4gICAgICBvcHRpb25zOiBDaGF0Q29uZmlndXJhdG9yLmdldERhdGFTb3VyY2UoKS5nZXRNZXNzYWdlT3B0aW9ucyxcbiAgICB9KTtcbiAgfVxuICBnZXRJbWFnZU1lc3NhZ2VUZW1wbGF0ZSgpOiBDb21ldENoYXRNZXNzYWdlVGVtcGxhdGUge1xuICAgIHJldHVybiBuZXcgQ29tZXRDaGF0TWVzc2FnZVRlbXBsYXRlKHtcbiAgICAgIHR5cGU6IENvbWV0Q2hhdFVJS2l0Q29uc3RhbnRzLk1lc3NhZ2VUeXBlcy5pbWFnZSxcbiAgICAgIGNhdGVnb3J5OiBDb21ldENoYXRVSUtpdENvbnN0YW50cy5NZXNzYWdlQ2F0ZWdvcnkubWVzc2FnZSxcbiAgICAgIG9wdGlvbnM6IENoYXRDb25maWd1cmF0b3IuZ2V0RGF0YVNvdXJjZSgpLmdldE1lc3NhZ2VPcHRpb25zLFxuICAgIH0pO1xuICB9XG4gIGdldEdyb3VwQWN0aW9uVGVtcGxhdGUoKTogQ29tZXRDaGF0TWVzc2FnZVRlbXBsYXRlIHtcbiAgICByZXR1cm4gbmV3IENvbWV0Q2hhdE1lc3NhZ2VUZW1wbGF0ZSh7XG4gICAgICB0eXBlOiBDb21ldENoYXRVSUtpdENvbnN0YW50cy5NZXNzYWdlVHlwZXMuZ3JvdXBNZW1iZXIsXG4gICAgICBjYXRlZ29yeTogQ29tZXRDaGF0VUlLaXRDb25zdGFudHMuTWVzc2FnZUNhdGVnb3J5LmFjdGlvbixcbiAgICB9KTtcbiAgfVxuICBnZXRGaWxlTWVzc2FnZVRlbXBsYXRlKCk6IENvbWV0Q2hhdE1lc3NhZ2VUZW1wbGF0ZSB7XG4gICAgcmV0dXJuIG5ldyBDb21ldENoYXRNZXNzYWdlVGVtcGxhdGUoe1xuICAgICAgdHlwZTogQ29tZXRDaGF0VUlLaXRDb25zdGFudHMuTWVzc2FnZVR5cGVzLmZpbGUsXG4gICAgICBjYXRlZ29yeTogQ29tZXRDaGF0VUlLaXRDb25zdGFudHMuTWVzc2FnZUNhdGVnb3J5Lm1lc3NhZ2UsXG4gICAgICBvcHRpb25zOiBDaGF0Q29uZmlndXJhdG9yLmdldERhdGFTb3VyY2UoKS5nZXRNZXNzYWdlT3B0aW9ucyxcbiAgICB9KTtcbiAgfVxuICBnZXRGb3JtTWVzc2FnZVRlbXBsYXRlKCk6IENvbWV0Q2hhdE1lc3NhZ2VUZW1wbGF0ZSB7XG4gICAgcmV0dXJuIG5ldyBDb21ldENoYXRNZXNzYWdlVGVtcGxhdGUoe1xuICAgICAgdHlwZTogQ29tZXRDaGF0VUlLaXRDb25zdGFudHMuTWVzc2FnZVR5cGVzLmZvcm0sXG4gICAgICBjYXRlZ29yeTogQ29tZXRDaGF0VUlLaXRDb25zdGFudHMuTWVzc2FnZUNhdGVnb3J5LmludGVyYWN0aXZlLFxuICAgICAgb3B0aW9uczogQ2hhdENvbmZpZ3VyYXRvci5nZXREYXRhU291cmNlKCkuZ2V0TWVzc2FnZU9wdGlvbnMsXG4gICAgfSk7XG4gIH1cblxuICBnZXRDYXJkTWVzc2FnZVRlbXBsYXRlKCk6IENvbWV0Q2hhdE1lc3NhZ2VUZW1wbGF0ZSB7XG4gICAgcmV0dXJuIG5ldyBDb21ldENoYXRNZXNzYWdlVGVtcGxhdGUoe1xuICAgICAgdHlwZTogQ29tZXRDaGF0VUlLaXRDb25zdGFudHMuTWVzc2FnZVR5cGVzLmNhcmQsXG4gICAgICBjYXRlZ29yeTogQ29tZXRDaGF0VUlLaXRDb25zdGFudHMuTWVzc2FnZUNhdGVnb3J5LmludGVyYWN0aXZlLFxuICAgICAgb3B0aW9uczogQ2hhdENvbmZpZ3VyYXRvci5nZXREYXRhU291cmNlKCkuZ2V0TWVzc2FnZU9wdGlvbnMsXG4gICAgfSk7XG4gIH1cbiAgLyoqXG4gKiBGdW5jdGlvbiB0byBjaGVjayBpZiBhIHVzZXIncyBzdGF0dXMgc2hvdWxkIGJlIHZpc2libGVcbiAqIEBwYXJhbSB7Q29tZXRDaGF0LlVzZXIgfCBDb21ldENoYXQuR3JvdXBNZW1iZXJ9IHVzZXIgLSBUaGUgdXNlciB3aG9zZSBzdGF0dXMgdmlzaWJpbGl0eSBpcyB0byBiZSBjaGVja2VkLlxuICogQHJldHVybiB7Ym9vbGVhbn0gLSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgdXNlcidzIHN0YXR1cyBzaG91bGQgYmUgaGlkZGVuIChibG9ja2VkIG9yIG9mZmxpbmUpLCBgZmFsc2VgIG90aGVyd2lzZS5cbiAqL1xuICBnZXRVc2VyU3RhdHVzVmlzaWJpbGl0eShcbiAgICB1c2VyPzogQ29tZXRDaGF0LlVzZXIgfCBDb21ldENoYXQuR3JvdXBNZW1iZXJcbiAgKSB7XG4gICAgbGV0IHVzZXJCbG9ja2VkRmxhZyA9IGZhbHNlO1xuICAgIGlmICh1c2VyKSB7XG4gICAgICBpZiAodXNlci5nZXRCbG9ja2VkQnlNZSgpIHx8IHVzZXIuZ2V0SGFzQmxvY2tlZE1lKCkgfHwgdXNlci5nZXRTdGF0dXMoKSA9PT0gQ29tZXRDaGF0VUlLaXRDb25zdGFudHMudXNlclN0YXR1c1R5cGUub2ZmbGluZSkge1xuICAgICAgICB1c2VyQmxvY2tlZEZsYWcgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdXNlckJsb2NrZWRGbGFnO1xuICB9XG4gIGdldEFsbE1lc3NhZ2VUZW1wbGF0ZXMoKTogQXJyYXk8Q29tZXRDaGF0TWVzc2FnZVRlbXBsYXRlPiB7XG4gICAgcmV0dXJuIFtcbiAgICAgIENoYXRDb25maWd1cmF0b3IuZ2V0RGF0YVNvdXJjZSgpLmdldFRleHRNZXNzYWdlVGVtcGxhdGUoKSxcbiAgICAgIENoYXRDb25maWd1cmF0b3IuZ2V0RGF0YVNvdXJjZSgpLmdldEltYWdlTWVzc2FnZVRlbXBsYXRlKCksXG4gICAgICBDaGF0Q29uZmlndXJhdG9yLmdldERhdGFTb3VyY2UoKS5nZXRWaWRlb01lc3NhZ2VUZW1wbGF0ZSgpLFxuICAgICAgQ2hhdENvbmZpZ3VyYXRvci5nZXREYXRhU291cmNlKCkuZ2V0QXVkaW9NZXNzYWdlVGVtcGxhdGUoKSxcbiAgICAgIENoYXRDb25maWd1cmF0b3IuZ2V0RGF0YVNvdXJjZSgpLmdldEZpbGVNZXNzYWdlVGVtcGxhdGUoKSxcbiAgICAgIENoYXRDb25maWd1cmF0b3IuZ2V0RGF0YVNvdXJjZSgpLmdldEdyb3VwQWN0aW9uVGVtcGxhdGUoKSxcbiAgICAgIENoYXRDb25maWd1cmF0b3IuZ2V0RGF0YVNvdXJjZSgpLmdldEZvcm1NZXNzYWdlVGVtcGxhdGUoKSxcbiAgICAgIENoYXRDb25maWd1cmF0b3IuZ2V0RGF0YVNvdXJjZSgpLmdldENhcmRNZXNzYWdlVGVtcGxhdGUoKSxcbiAgICAgIENoYXRDb25maWd1cmF0b3IuZ2V0RGF0YVNvdXJjZSgpLmdldFNjaGVkdWxlck1lc3NhZ2VUZW1wbGF0ZSgpLFxuICAgIF07XG4gIH1cbiAgZ2V0TWVzc2FnZVRlbXBsYXRlKFxuICAgIG1lc3NhZ2VUeXBlOiBzdHJpbmcsXG4gICAgbWVzc2FnZUNhdGVnb3J5OiBzdHJpbmdcbiAgKTogQ29tZXRDaGF0TWVzc2FnZVRlbXBsYXRlIHwgbnVsbCB7XG4gICAgbGV0IF90ZW1wbGF0ZTogQ29tZXRDaGF0TWVzc2FnZVRlbXBsYXRlIHwgbnVsbCA9IG51bGw7XG4gICAgaWYgKG1lc3NhZ2VDYXRlZ29yeSAhPSBDb21ldENoYXRVSUtpdENvbnN0YW50cy5NZXNzYWdlQ2F0ZWdvcnkuY2FsbCkge1xuICAgICAgc3dpdGNoIChtZXNzYWdlVHlwZSkge1xuICAgICAgICBjYXNlIENvbWV0Q2hhdFVJS2l0Q29uc3RhbnRzLk1lc3NhZ2VUeXBlcy50ZXh0OlxuICAgICAgICAgIF90ZW1wbGF0ZSA9IENoYXRDb25maWd1cmF0b3IuZ2V0RGF0YVNvdXJjZSgpLmdldFRleHRNZXNzYWdlVGVtcGxhdGUoKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBDb21ldENoYXRVSUtpdENvbnN0YW50cy5NZXNzYWdlVHlwZXMuaW1hZ2U6XG4gICAgICAgICAgX3RlbXBsYXRlID1cbiAgICAgICAgICAgIENoYXRDb25maWd1cmF0b3IuZ2V0RGF0YVNvdXJjZSgpLmdldEltYWdlTWVzc2FnZVRlbXBsYXRlKCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgQ29tZXRDaGF0VUlLaXRDb25zdGFudHMuTWVzc2FnZVR5cGVzLnZpZGVvOlxuICAgICAgICAgIF90ZW1wbGF0ZSA9XG4gICAgICAgICAgICBDaGF0Q29uZmlndXJhdG9yLmdldERhdGFTb3VyY2UoKS5nZXRWaWRlb01lc3NhZ2VUZW1wbGF0ZSgpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIENvbWV0Q2hhdFVJS2l0Q29uc3RhbnRzLk1lc3NhZ2VUeXBlcy5ncm91cE1lbWJlcjpcbiAgICAgICAgICBfdGVtcGxhdGUgPSBDaGF0Q29uZmlndXJhdG9yLmdldERhdGFTb3VyY2UoKS5nZXRHcm91cEFjdGlvblRlbXBsYXRlKCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgQ29tZXRDaGF0VUlLaXRDb25zdGFudHMuTWVzc2FnZVR5cGVzLmZpbGU6XG4gICAgICAgICAgX3RlbXBsYXRlID0gQ2hhdENvbmZpZ3VyYXRvci5nZXREYXRhU291cmNlKCkuZ2V0RmlsZU1lc3NhZ2VUZW1wbGF0ZSgpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIENvbWV0Q2hhdFVJS2l0Q29uc3RhbnRzLk1lc3NhZ2VUeXBlcy5hdWRpbzpcbiAgICAgICAgICBfdGVtcGxhdGUgPVxuICAgICAgICAgICAgQ2hhdENvbmZpZ3VyYXRvci5nZXREYXRhU291cmNlKCkuZ2V0QXVkaW9NZXNzYWdlVGVtcGxhdGUoKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBDb21ldENoYXRVSUtpdENvbnN0YW50cy5NZXNzYWdlVHlwZXMuZm9ybTpcbiAgICAgICAgICBfdGVtcGxhdGUgPSBDaGF0Q29uZmlndXJhdG9yLmdldERhdGFTb3VyY2UoKS5nZXRGb3JtTWVzc2FnZVRlbXBsYXRlKCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgQ29tZXRDaGF0VUlLaXRDb25zdGFudHMuTWVzc2FnZVR5cGVzLmNhcmQ6XG4gICAgICAgICAgX3RlbXBsYXRlID0gQ2hhdENvbmZpZ3VyYXRvci5nZXREYXRhU291cmNlKCkuZ2V0Q2FyZE1lc3NhZ2VUZW1wbGF0ZSgpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIENvbWV0Q2hhdFVJS2l0Q29uc3RhbnRzLk1lc3NhZ2VUeXBlcy5zY2hlZHVsZXI6XG4gICAgICAgICAgX3RlbXBsYXRlID1cbiAgICAgICAgICAgIENoYXRDb25maWd1cmF0b3IuZ2V0RGF0YVNvdXJjZSgpLmdldFNjaGVkdWxlck1lc3NhZ2VUZW1wbGF0ZSgpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gX3RlbXBsYXRlO1xuICB9XG4gIGdldE1lc3NhZ2VPcHRpb25zKFxuICAgIGxvZ2dlZEluVXNlcjogQ29tZXRDaGF0LlVzZXIsXG4gICAgbWVzc2FnZU9iamVjdDogQ29tZXRDaGF0LkJhc2VNZXNzYWdlLFxuICAgIHRoZW1lOiBDb21ldENoYXRUaGVtZSxcbiAgICBncm91cD86IENvbWV0Q2hhdC5Hcm91cFxuICApOiBBcnJheTxDb21ldENoYXRNZXNzYWdlT3B0aW9uPiB7XG4gICAgbGV0IF9vcHRpb25MaXN0OiBBcnJheTxDb21ldENoYXRNZXNzYWdlT3B0aW9uPiA9IFtdO1xuICAgIGlmIChcbiAgICAgIG1lc3NhZ2VPYmplY3QuZ2V0Q2F0ZWdvcnkoKSA9PVxuICAgICAgQ29tZXRDaGF0VUlLaXRDb25zdGFudHMuTWVzc2FnZUNhdGVnb3J5Lm1lc3NhZ2VcbiAgICApIHtcbiAgICAgIHN3aXRjaCAobWVzc2FnZU9iamVjdC5nZXRUeXBlKCkpIHtcbiAgICAgICAgY2FzZSBDb21ldENoYXRVSUtpdENvbnN0YW50cy5NZXNzYWdlVHlwZXMudGV4dDpcbiAgICAgICAgICBfb3B0aW9uTGlzdCA9IENoYXRDb25maWd1cmF0b3IuZ2V0RGF0YVNvdXJjZSgpLmdldFRleHRNZXNzYWdlT3B0aW9ucyhcbiAgICAgICAgICAgIGxvZ2dlZEluVXNlcixcbiAgICAgICAgICAgIG1lc3NhZ2VPYmplY3QsXG4gICAgICAgICAgICB0aGVtZSxcbiAgICAgICAgICAgIGdyb3VwXG4gICAgICAgICAgKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBDb21ldENoYXRVSUtpdENvbnN0YW50cy5NZXNzYWdlVHlwZXMuaW1hZ2U6XG4gICAgICAgICAgX29wdGlvbkxpc3QgPSBDaGF0Q29uZmlndXJhdG9yLmdldERhdGFTb3VyY2UoKS5nZXRJbWFnZU1lc3NhZ2VPcHRpb25zKFxuICAgICAgICAgICAgbG9nZ2VkSW5Vc2VyLFxuICAgICAgICAgICAgbWVzc2FnZU9iamVjdCxcbiAgICAgICAgICAgIHRoZW1lLFxuICAgICAgICAgICAgZ3JvdXBcbiAgICAgICAgICApO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIENvbWV0Q2hhdFVJS2l0Q29uc3RhbnRzLk1lc3NhZ2VUeXBlcy52aWRlbzpcbiAgICAgICAgICBfb3B0aW9uTGlzdCA9IENoYXRDb25maWd1cmF0b3IuZ2V0RGF0YVNvdXJjZSgpLmdldFZpZGVvTWVzc2FnZU9wdGlvbnMoXG4gICAgICAgICAgICBsb2dnZWRJblVzZXIsXG4gICAgICAgICAgICBtZXNzYWdlT2JqZWN0LFxuICAgICAgICAgICAgdGhlbWUsXG4gICAgICAgICAgICBncm91cFxuICAgICAgICAgICk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgQ29tZXRDaGF0VUlLaXRDb25zdGFudHMuTWVzc2FnZVR5cGVzLmdyb3VwTWVtYmVyOlxuICAgICAgICAgIF9vcHRpb25MaXN0ID0gW107XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgQ29tZXRDaGF0VUlLaXRDb25zdGFudHMuTWVzc2FnZVR5cGVzLmZpbGU6XG4gICAgICAgICAgX29wdGlvbkxpc3QgPSBDaGF0Q29uZmlndXJhdG9yLmdldERhdGFTb3VyY2UoKS5nZXRGaWxlTWVzc2FnZU9wdGlvbnMoXG4gICAgICAgICAgICBsb2dnZWRJblVzZXIsXG4gICAgICAgICAgICBtZXNzYWdlT2JqZWN0LFxuICAgICAgICAgICAgdGhlbWUsXG4gICAgICAgICAgICBncm91cFxuICAgICAgICAgICk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgQ29tZXRDaGF0VUlLaXRDb25zdGFudHMuTWVzc2FnZVR5cGVzLmF1ZGlvOlxuICAgICAgICAgIF9vcHRpb25MaXN0ID0gQ2hhdENvbmZpZ3VyYXRvci5nZXREYXRhU291cmNlKCkuZ2V0QXVkaW9NZXNzYWdlT3B0aW9ucyhcbiAgICAgICAgICAgIGxvZ2dlZEluVXNlcixcbiAgICAgICAgICAgIG1lc3NhZ2VPYmplY3QsXG4gICAgICAgICAgICB0aGVtZSxcbiAgICAgICAgICAgIGdyb3VwXG4gICAgICAgICAgKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKFxuICAgICAgbWVzc2FnZU9iamVjdC5nZXRDYXRlZ29yeSgpID09XG4gICAgICBDb21ldENoYXRVSUtpdENvbnN0YW50cy5NZXNzYWdlQ2F0ZWdvcnkuY3VzdG9tIHx8XG4gICAgICBtZXNzYWdlT2JqZWN0LmdldENhdGVnb3J5KCkgPT1cbiAgICAgIENvbWV0Q2hhdFVJS2l0Q29uc3RhbnRzLk1lc3NhZ2VDYXRlZ29yeS5pbnRlcmFjdGl2ZVxuICAgICkge1xuICAgICAgX29wdGlvbkxpc3QgPSBDaGF0Q29uZmlndXJhdG9yLmdldERhdGFTb3VyY2UoKS5nZXRDb21tb25PcHRpb25zKFxuICAgICAgICBsb2dnZWRJblVzZXIsXG4gICAgICAgIG1lc3NhZ2VPYmplY3QsXG4gICAgICAgIHRoZW1lLFxuICAgICAgICBncm91cFxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIF9vcHRpb25MaXN0O1xuICB9XG4gIGdldENvbW1vbk9wdGlvbnMoXG4gICAgbG9nZ2VkSW5Vc2VyOiBDb21ldENoYXQuVXNlcixcbiAgICBtZXNzYWdlT2JqZWN0OiBDb21ldENoYXQuQmFzZU1lc3NhZ2UsXG4gICAgdGhlbWU6IENvbWV0Q2hhdFRoZW1lLFxuICAgIGdyb3VwPzogQ29tZXRDaGF0Lkdyb3VwXG4gICk6IEFycmF5PENvbWV0Q2hhdE1lc3NhZ2VPcHRpb24+IHtcbiAgICBsZXQgaXNTZW50QnlNZTogYm9vbGVhbiA9IHRoaXMuaXNTZW50QnlNZShsb2dnZWRJblVzZXIsIG1lc3NhZ2VPYmplY3QpO1xuICAgIGxldCBpc1BhcnRpY2lwYW50OiBib29sZWFuID0gZmFsc2U7XG4gICAgaWYgKGdyb3VwPy5nZXRTY29wZSgpID09IENvbWV0Q2hhdFVJS2l0Q29uc3RhbnRzLmdyb3VwTWVtYmVyU2NvcGUucGFydGljaXBhbnQpXG4gICAgICBpc1BhcnRpY2lwYW50ID0gdHJ1ZTtcbiAgICBsZXQgbWVzc2FnZU9wdGlvbkxpc3Q6IEFycmF5PENvbWV0Q2hhdE1lc3NhZ2VPcHRpb24+ID0gW107XG4gICAgbWVzc2FnZU9wdGlvbkxpc3QucHVzaCh0aGlzLmdldFJlYWN0aW9uT3B0aW9uKHRoZW1lKSk7XG4gICAgaWYgKCFtZXNzYWdlT2JqZWN0Py5nZXRQYXJlbnRNZXNzYWdlSWQoKSkge1xuICAgICAgbWVzc2FnZU9wdGlvbkxpc3QucHVzaCh0aGlzLmdldFJlcGx5SW5UaHJlYWRPcHRpb24odGhlbWUpKTtcbiAgICB9XG4gICAgaWYgKGlzU2VudEJ5TWUpIHtcbiAgICAgIG1lc3NhZ2VPcHRpb25MaXN0LnB1c2godGhpcy5nZXRNZXNzYWdlSW5mb09wdGlvbih0aGVtZSkpO1xuICAgIH1cbiAgICBpZiAoaXNTZW50QnlNZSB8fCAoIWlzUGFydGljaXBhbnQgJiYgZ3JvdXApKVxuICAgICAgbWVzc2FnZU9wdGlvbkxpc3QucHVzaCh0aGlzLmdldERlbGV0ZU9wdGlvbih0aGVtZSkpO1xuICAgIGlmIChncm91cCAmJiAhaXNTZW50QnlNZSkge1xuICAgICAgbWVzc2FnZU9wdGlvbkxpc3QucHVzaCh0aGlzLmdldE1lc3NhZ2VQcml2YXRlbHlPcHRpb24odGhlbWUpKTtcbiAgICB9XG4gICAgcmV0dXJuIG1lc3NhZ2VPcHRpb25MaXN0O1xuICB9XG4gIGdldEFsbE1lc3NhZ2VUeXBlcygpOiBBcnJheTxzdHJpbmc+IHtcbiAgICByZXR1cm4gW1xuICAgICAgQ29tZXRDaGF0VUlLaXRDb25zdGFudHMuTWVzc2FnZVR5cGVzLnRleHQsXG4gICAgICBDb21ldENoYXRVSUtpdENvbnN0YW50cy5NZXNzYWdlVHlwZXMuaW1hZ2UsXG4gICAgICBDb21ldENoYXRVSUtpdENvbnN0YW50cy5NZXNzYWdlVHlwZXMuYXVkaW8sXG4gICAgICBDb21ldENoYXRVSUtpdENvbnN0YW50cy5NZXNzYWdlVHlwZXMudmlkZW8sXG4gICAgICBDb21ldENoYXRVSUtpdENvbnN0YW50cy5NZXNzYWdlVHlwZXMuZmlsZSxcbiAgICAgIENvbWV0Q2hhdFVJS2l0Q29uc3RhbnRzLk1lc3NhZ2VUeXBlcy5ncm91cE1lbWJlcixcbiAgICAgIENvbWV0Q2hhdFVJS2l0Q29uc3RhbnRzLk1lc3NhZ2VUeXBlcy5mb3JtLFxuICAgICAgQ29tZXRDaGF0VUlLaXRDb25zdGFudHMuTWVzc2FnZVR5cGVzLmNhcmQsXG4gICAgICBDb21ldENoYXRVSUtpdENvbnN0YW50cy5NZXNzYWdlVHlwZXMuc2NoZWR1bGVyLFxuICAgIF07XG4gIH1cbiAgYWRkTGlzdCgpOiBzdHJpbmcge1xuICAgIHJldHVybiBcIjxNZXNzYWdlIFV0aWxzPlwiO1xuICB9XG4gIGdldEFsbE1lc3NhZ2VDYXRlZ29yaWVzKCk6IEFycmF5PHN0cmluZz4ge1xuICAgIHJldHVybiBbXG4gICAgICBDb21ldENoYXRVSUtpdENvbnN0YW50cy5NZXNzYWdlQ2F0ZWdvcnkubWVzc2FnZSxcbiAgICAgIENvbWV0Q2hhdFVJS2l0Q29uc3RhbnRzLk1lc3NhZ2VDYXRlZ29yeS5hY3Rpb24sXG4gICAgICBDb21ldENoYXRVSUtpdENvbnN0YW50cy5NZXNzYWdlQ2F0ZWdvcnkuaW50ZXJhY3RpdmUsXG4gICAgXTtcbiAgfVxuICBnZXRBdXhpbGlhcnlPcHRpb25zKFxuICAgIGlkOiBDb21wb3NlcklkLFxuICAgIHVzZXI/OiBDb21ldENoYXQuVXNlcixcbiAgICBncm91cD86IENvbWV0Q2hhdC5Hcm91cFxuICApOiBhbnkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIGdldElkKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFwibWVzc2FnZVV0aWxzXCI7XG4gIH1cbiAgZ2V0QWN0aW9uTWVzc2FnZShtZXNzYWdlOiBDb21ldENoYXQuQWN0aW9uKTogc3RyaW5nIHtcbiAgICB0cnkge1xuICAgICAgaWYgKG1lc3NhZ2UgaW5zdGFuY2VvZiBDb21ldENoYXQuQWN0aW9uKSB7XG4gICAgICAgIGNvbnN0IGFjdGlvbiA9IG1lc3NhZ2UuZ2V0QWN0aW9uKCk7XG4gICAgICAgIGNvbnN0IGFjdGlvbkJ5ID0gbWVzc2FnZS5nZXRBY3Rpb25CeSgpO1xuICAgICAgICBjb25zdCBhY3Rpb25PbiA9IG1lc3NhZ2UuZ2V0QWN0aW9uT24oKTtcblxuICAgICAgICBjb25zdCBieVN0cmluZyA9IChhY3Rpb25CeSBhcyBDb21ldENoYXQuVXNlcikuZ2V0TmFtZSgpO1xuICAgICAgICBjb25zdCBmb3JTdHJpbmcgPVxuICAgICAgICAgIGFjdGlvbiA9PT0gQ29tZXRDaGF0VUlLaXRDb25zdGFudHMuZ3JvdXBNZW1iZXJBY3Rpb24uSk9JTkVEIHx8XG4gICAgICAgICAgICBhY3Rpb24gPT09IENvbWV0Q2hhdFVJS2l0Q29uc3RhbnRzLmdyb3VwTWVtYmVyQWN0aW9uLkxFRlRcbiAgICAgICAgICAgID8gXCJcIlxuICAgICAgICAgICAgOiAoYWN0aW9uT24gYXMgQ29tZXRDaGF0LlVzZXIpLmdldE5hbWUoKTtcblxuICAgICAgICBzd2l0Y2ggKGFjdGlvbikge1xuICAgICAgICAgIGNhc2UgQ29tZXRDaGF0VUlLaXRDb25zdGFudHMuZ3JvdXBNZW1iZXJBY3Rpb24uQURERUQ6XG4gICAgICAgICAgICByZXR1cm4gYCR7YnlTdHJpbmd9ICR7bG9jYWxpemUoXCJBRERFRFwiKX0gJHtmb3JTdHJpbmd9YDtcbiAgICAgICAgICBjYXNlIENvbWV0Q2hhdFVJS2l0Q29uc3RhbnRzLmdyb3VwTWVtYmVyQWN0aW9uLkpPSU5FRDpcbiAgICAgICAgICAgIHJldHVybiBgJHtieVN0cmluZ30gJHtsb2NhbGl6ZShcIkpPSU5FRFwiKX1gO1xuICAgICAgICAgIGNhc2UgQ29tZXRDaGF0VUlLaXRDb25zdGFudHMuZ3JvdXBNZW1iZXJBY3Rpb24uTEVGVDpcbiAgICAgICAgICAgIHJldHVybiBgJHtieVN0cmluZ30gJHtsb2NhbGl6ZShcIkxFRlRcIil9YDtcbiAgICAgICAgICBjYXNlIENvbWV0Q2hhdFVJS2l0Q29uc3RhbnRzLmdyb3VwTWVtYmVyQWN0aW9uLktJQ0tFRDpcbiAgICAgICAgICAgIHJldHVybiBgJHtieVN0cmluZ30gJHtsb2NhbGl6ZShcIktJQ0tFRFwiKX0gJHtmb3JTdHJpbmd9YDtcbiAgICAgICAgICBjYXNlIENvbWV0Q2hhdFVJS2l0Q29uc3RhbnRzLmdyb3VwTWVtYmVyQWN0aW9uLkJBTk5FRDpcbiAgICAgICAgICAgIHJldHVybiBgJHtieVN0cmluZ30gJHtsb2NhbGl6ZShcIkJBTk5FRFwiKX0gJHtmb3JTdHJpbmd9YDtcbiAgICAgICAgICBjYXNlIENvbWV0Q2hhdFVJS2l0Q29uc3RhbnRzLmdyb3VwTWVtYmVyQWN0aW9uLlVOQkFOTkVEOlxuICAgICAgICAgICAgcmV0dXJuIGAke2J5U3RyaW5nfSAke2xvY2FsaXplKFwiVU5CQU5ORURcIil9ICR7Zm9yU3RyaW5nfWA7XG4gICAgICAgICAgY2FzZSBDb21ldENoYXRVSUtpdENvbnN0YW50cy5ncm91cE1lbWJlckFjdGlvbi5TQ09QRV9DSEFOR0U6XG4gICAgICAgICAgICByZXR1cm4gYCR7YnlTdHJpbmd9ICR7bG9jYWxpemUoXG4gICAgICAgICAgICAgIFwiTUFERVwiXG4gICAgICAgICAgICApfSAke2ZvclN0cmluZ30gJHttZXNzYWdlLmdldE5ld1Njb3BlKCl9YDtcbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgcmV0dXJuIFwiXCI7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBcIlwiO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiBcIlwiO1xuICAgIH1cbiAgfVxuXG4gIGltYWdlQXR0YWNobWVudE9wdGlvbih0aGVtZTogQ29tZXRDaGF0VGhlbWUpOiBDb21ldENoYXRNZXNzYWdlQ29tcG9zZXJBY3Rpb24ge1xuICAgIHJldHVybiBuZXcgQ29tZXRDaGF0TWVzc2FnZUNvbXBvc2VyQWN0aW9uKHtcbiAgICAgIGlkOiBDb21ldENoYXRVSUtpdENvbnN0YW50cy5NZXNzYWdlVHlwZXMuaW1hZ2UsXG4gICAgICB0aXRsZTogbG9jYWxpemUoXCJBVFRBQ0hfSU1BR0VcIiksXG4gICAgICBpY29uVVJMOiBcImFzc2V0cy9waG90b2xpYnJhcnkuc3ZnXCIsXG4gICAgICBvbkNsaWNrOiBudWxsLFxuICAgICAgaWNvblRpbnQ6IHRoZW1lLnBhbGV0dGUuZ2V0QWNjZW50NzAwKCksXG4gICAgICB0aXRsZUZvbnQ6IGZvbnRIZWxwZXIodGhlbWUudHlwb2dyYXBoeS5zdWJ0aXRsZTEpLFxuICAgICAgdGl0bGVDb2xvcjogdGhlbWUucGFsZXR0ZS5nZXRBY2NlbnQ3MDAoKSxcbiAgICAgIGJvcmRlclJhZGl1czogXCI4cHhcIixcbiAgICAgIGJhY2tncm91bmQ6IHRoZW1lLnBhbGV0dGUuZ2V0QWNjZW50MTAwKCksXG4gICAgfSk7XG4gIH1cbiAgdmlkZW9BdHRhY2htZW50T3B0aW9uKHRoZW1lOiBDb21ldENoYXRUaGVtZSk6IENvbWV0Q2hhdE1lc3NhZ2VDb21wb3NlckFjdGlvbiB7XG4gICAgcmV0dXJuIG5ldyBDb21ldENoYXRNZXNzYWdlQ29tcG9zZXJBY3Rpb24oe1xuICAgICAgaWQ6IENvbWV0Q2hhdFVJS2l0Q29uc3RhbnRzLk1lc3NhZ2VUeXBlcy52aWRlbyxcbiAgICAgIHRpdGxlOiBsb2NhbGl6ZShcIkFUVEFDSF9WSURFT1wiKSxcbiAgICAgIGljb25VUkw6IFwiYXNzZXRzL3ZpZGVvLnN2Z1wiLFxuICAgICAgb25DbGljazogbnVsbCxcbiAgICAgIGljb25UaW50OiB0aGVtZS5wYWxldHRlLmdldEFjY2VudDcwMCgpLFxuICAgICAgdGl0bGVGb250OiBmb250SGVscGVyKHRoZW1lLnR5cG9ncmFwaHkuc3VidGl0bGUxKSxcbiAgICAgIHRpdGxlQ29sb3I6IHRoZW1lLnBhbGV0dGUuZ2V0QWNjZW50NzAwKCksXG4gICAgICBib3JkZXJSYWRpdXM6IFwiOHB4XCIsXG4gICAgICBiYWNrZ3JvdW5kOiB0aGVtZS5wYWxldHRlLmdldEFjY2VudDEwMCgpLFxuICAgIH0pO1xuICB9XG4gIGF1ZGlvQXR0YWNobWVudE9wdGlvbih0aGVtZTogQ29tZXRDaGF0VGhlbWUpOiBDb21ldENoYXRNZXNzYWdlQ29tcG9zZXJBY3Rpb24ge1xuICAgIHJldHVybiBuZXcgQ29tZXRDaGF0TWVzc2FnZUNvbXBvc2VyQWN0aW9uKHtcbiAgICAgIGlkOiBDb21ldENoYXRVSUtpdENvbnN0YW50cy5NZXNzYWdlVHlwZXMuYXVkaW8sXG4gICAgICB0aXRsZTogbG9jYWxpemUoXCJBVFRBQ0hfQVVESU9cIiksXG4gICAgICBpY29uVVJMOiBcImFzc2V0cy9hdWRpby1maWxlLnN2Z1wiLFxuICAgICAgb25DbGljazogbnVsbCxcbiAgICAgIGljb25UaW50OiB0aGVtZS5wYWxldHRlLmdldEFjY2VudDcwMCgpLFxuICAgICAgdGl0bGVGb250OiBmb250SGVscGVyKHRoZW1lLnR5cG9ncmFwaHkuc3VidGl0bGUxKSxcbiAgICAgIHRpdGxlQ29sb3I6IHRoZW1lLnBhbGV0dGUuZ2V0QWNjZW50NzAwKCksXG4gICAgICBib3JkZXJSYWRpdXM6IFwiOHB4XCIsXG4gICAgICBiYWNrZ3JvdW5kOiB0aGVtZS5wYWxldHRlLmdldEFjY2VudDEwMCgpLFxuICAgIH0pO1xuICB9XG4gIGZpbGVBdHRhY2htZW50T3B0aW9uKHRoZW1lOiBDb21ldENoYXRUaGVtZSk6IENvbWV0Q2hhdE1lc3NhZ2VDb21wb3NlckFjdGlvbiB7XG4gICAgcmV0dXJuIG5ldyBDb21ldENoYXRNZXNzYWdlQ29tcG9zZXJBY3Rpb24oe1xuICAgICAgaWQ6IENvbWV0Q2hhdFVJS2l0Q29uc3RhbnRzLk1lc3NhZ2VUeXBlcy5maWxlLFxuICAgICAgdGl0bGU6IGxvY2FsaXplKFwiQVRUQUNIX0ZJTEVcIiksXG4gICAgICBpY29uVVJMOiBcImFzc2V0cy9hdHRhY2htZW50LWZpbGUuc3ZnXCIsXG4gICAgICBvbkNsaWNrOiBudWxsLFxuICAgICAgaWNvblRpbnQ6IHRoZW1lLnBhbGV0dGUuZ2V0QWNjZW50NzAwKCksXG4gICAgICB0aXRsZUZvbnQ6IGZvbnRIZWxwZXIodGhlbWUudHlwb2dyYXBoeS5zdWJ0aXRsZTEpLFxuICAgICAgdGl0bGVDb2xvcjogdGhlbWUucGFsZXR0ZS5nZXRBY2NlbnQ3MDAoKSxcbiAgICAgIGJvcmRlclJhZGl1czogXCI4cHhcIixcbiAgICAgIGJhY2tncm91bmQ6IHRoZW1lLnBhbGV0dGUuZ2V0QWNjZW50MTAwKCksXG4gICAgfSk7XG4gIH1cbiAgZ2V0QXR0YWNobWVudE9wdGlvbnMoXG4gICAgdGhlbWU6IENvbWV0Q2hhdFRoZW1lLFxuICAgIHVzZXI/OiBDb21ldENoYXQuVXNlcixcbiAgICBncm91cD86IENvbWV0Q2hhdC5Hcm91cCxcbiAgICBpZD86IENvbXBvc2VySWRcbiAgKTogQ29tZXRDaGF0TWVzc2FnZUNvbXBvc2VyQWN0aW9uW10ge1xuICAgIGxldCBhY3Rpb25zOiBBcnJheTxDb21ldENoYXRNZXNzYWdlQ29tcG9zZXJBY3Rpb24+ID0gW1xuICAgICAgdGhpcy5pbWFnZUF0dGFjaG1lbnRPcHRpb24odGhlbWUpLFxuICAgICAgdGhpcy52aWRlb0F0dGFjaG1lbnRPcHRpb24odGhlbWUpLFxuICAgICAgdGhpcy5hdWRpb0F0dGFjaG1lbnRPcHRpb24odGhlbWUpLFxuICAgICAgdGhpcy5maWxlQXR0YWNobWVudE9wdGlvbih0aGVtZSksXG4gICAgXTtcbiAgICByZXR1cm4gYWN0aW9ucztcbiAgfVxuXG4gIGdldExhc3RDb252ZXJzYXRpb25NZXNzYWdlKFxuICAgIGNvbnZlcnNhdGlvbjogQ29tZXRDaGF0LkNvbnZlcnNhdGlvbixcbiAgICBsb2dnZWRJblVzZXI6IENvbWV0Q2hhdC5Vc2VyLFxuICAgIGFkZGl0aW9uYWxDb25maWd1cmF0aW9uczogYW55XG4gICk6IHN0cmluZyB7XG4gICAgbGV0IGNvbmZpZyA9IHtcbiAgICAgIC4uLmFkZGl0aW9uYWxDb25maWd1cmF0aW9ucyxcbiAgICAgIHRleHRGb3JtYXR0ZXJzOlxuICAgICAgICBhZGRpdGlvbmFsQ29uZmlndXJhdGlvbnM/LnRleHRGb3JtYXR0ZXJzICYmXG4gICAgICAgICAgYWRkaXRpb25hbENvbmZpZ3VyYXRpb25zPy50ZXh0Rm9ybWF0dGVycy5sZW5ndGhcbiAgICAgICAgICA/IFsuLi5hZGRpdGlvbmFsQ29uZmlndXJhdGlvbnMudGV4dEZvcm1hdHRlcnNdXG4gICAgICAgICAgOiBbdGhpcy5nZXRNZW50aW9uc1RleHRGb3JtYXR0ZXIoeyB0aGVtZTogYWRkaXRpb25hbENvbmZpZ3VyYXRpb25zLnRoZW1lLCBkaXNhYmxlTWVudGlvbnM6IGFkZGl0aW9uYWxDb25maWd1cmF0aW9ucy5kaXNhYmxlTWVudGlvbnMgfSldLFxuICAgIH07XG4gICAgbGV0IG1lc3NhZ2UgPSBDb252ZXJzYXRpb25VdGlscy5nZXRMYXN0Q29udmVyc2F0aW9uTWVzc2FnZShcbiAgICAgIGNvbnZlcnNhdGlvbixcbiAgICAgIGxvZ2dlZEluVXNlcixcbiAgICAgIGNvbmZpZ1xuICAgICk7XG4gICAgbGV0IG1lc3NhZ2VPYmplY3QgPSBjb252ZXJzYXRpb24/LmdldExhc3RNZXNzYWdlKCk7XG4gICAgaWYgKG1lc3NhZ2VPYmplY3QpIHtcbiAgICAgIGxldCB0ZXh0Rm9ybWF0dGVyczogQXJyYXk8Q29tZXRDaGF0VGV4dEZvcm1hdHRlcj4gPSBjb25maWcudGV4dEZvcm1hdHRlcnM7XG4gICAgICBpZiAoY29uZmlnICYmICFjb25maWcuZGlzYWJsZU1lbnRpb25zKSB7XG4gICAgICAgIGxldCBtZW50aW9uc1RleHRGb3JtYXR0ZXIhOiBDb21ldENoYXRNZW50aW9uc0Zvcm1hdHRlcjtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0ZXh0Rm9ybWF0dGVycy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGlmICh0ZXh0Rm9ybWF0dGVyc1tpXSBpbnN0YW5jZW9mIENvbWV0Q2hhdE1lbnRpb25zRm9ybWF0dGVyKSB7XG4gICAgICAgICAgICBtZW50aW9uc1RleHRGb3JtYXR0ZXIgPSB0ZXh0Rm9ybWF0dGVyc1tcbiAgICAgICAgICAgICAgaVxuICAgICAgICAgICAgXSBhcyBDb21ldENoYXRNZW50aW9uc0Zvcm1hdHRlcjtcbiAgICAgICAgICAgIG1lbnRpb25zVGV4dEZvcm1hdHRlci5zZXRNZXNzYWdlKG1lc3NhZ2VPYmplY3QpO1xuICAgICAgICAgICAgaWYgKG1lc3NhZ2VPYmplY3QuZ2V0TWVudGlvbmVkVXNlcnMoKS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgbWVudGlvbnNUZXh0Rm9ybWF0dGVyLnNldENvbWV0Q2hhdFVzZXJHcm91cE1lbWJlcnMoXG4gICAgICAgICAgICAgICAgbWVzc2FnZU9iamVjdC5nZXRNZW50aW9uZWRVc2VycygpXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBtZW50aW9uc1RleHRGb3JtYXR0ZXIuc2V0TG9nZ2VkSW5Vc2VyKFxuICAgICAgICAgICAgICBDb21ldENoYXRVSUtpdExvZ2luTGlzdGVuZXIuZ2V0TG9nZ2VkSW5Vc2VyKCkhXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAobWVudGlvbnNUZXh0Rm9ybWF0dGVyKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFtZW50aW9uc1RleHRGb3JtYXR0ZXIpIHtcbiAgICAgICAgICBtZW50aW9uc1RleHRGb3JtYXR0ZXIgPVxuICAgICAgICAgICAgQ2hhdENvbmZpZ3VyYXRvci5nZXREYXRhU291cmNlKCkuZ2V0TWVudGlvbnNUZXh0Rm9ybWF0dGVyKHtcbiAgICAgICAgICAgICAgbWVzc2FnZU9iamVjdCxcbiAgICAgICAgICAgICAgLi4uY29uZmlnLFxuICAgICAgICAgICAgICBhbGlnbm1lbnQ6IG51bGwsXG4gICAgICAgICAgICAgIHRoZW1lOiBhZGRpdGlvbmFsQ29uZmlndXJhdGlvbnMudGhlbWUsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB0ZXh0Rm9ybWF0dGVycy5wdXNoKG1lbnRpb25zVGV4dEZvcm1hdHRlcik7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKFxuICAgICAgICBtZXNzYWdlT2JqZWN0ICYmXG4gICAgICAgIG1lc3NhZ2VPYmplY3QgaW5zdGFuY2VvZiBDb21ldENoYXQuVGV4dE1lc3NhZ2VcbiAgICAgICkge1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRleHRGb3JtYXR0ZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgbWVzc2FnZSA9IHRleHRGb3JtYXR0ZXJzW2ldLmdldEZvcm1hdHRlZFRleHQobWVzc2FnZSwgeyBtZW50aW9uc1RhcmdldEVsZW1lbnQ6IE1lbnRpb25zVGFyZ2V0RWxlbWVudC5jb252ZXJzYXRpb24gfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG1lc3NhZ2U7XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBzdHlsZWQgQCBmb3IgZXZlcnkgbWVudGlvbiBpbiB0aGUgdGV4dCBieSBtYXRjaGluZyB1aWRcbiAgICpcbiAgICogQHBhcmFtIHtDb21ldENoYXQuVGV4dE1lc3NhZ2V9IG1lc3NhZ2VcbiAgICogQHBhcmFtIHtzdHJpbmd9IHN1YnRpdGxlXG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKi9cbiAgZ2V0TWVudGlvbnNGb3JtYXR0ZWRUZXh0KFxuICAgIG1lc3NhZ2U6IENvbWV0Q2hhdC5UZXh0TWVzc2FnZSxcbiAgICBzdWJ0aXRsZTogc3RyaW5nLFxuICAgIG1lbnRpb25zRm9ybWF0dGVyUGFyYW1zOiB7XG4gICAgICBtZW50aW9uc1RhcmdldEVsZW1lbnQ6IE1lbnRpb25zVGFyZ2V0RWxlbWVudDtcbiAgICAgIHRoZW1lOiBDb21ldENoYXRUaGVtZTtcbiAgICB9XG4gICkge1xuICAgIGNvbnN0IHJlZ2V4ID0gLzxAdWlkOiguKj8pPi9nO1xuICAgIGxldCBtZXNzYWdlVGV4dCA9IG1lc3NhZ2UuZ2V0VGV4dCgpO1xuICAgIGxldCBtZXNzYWdlVGV4dFRtcDogc3RyaW5nID0gc3VidGl0bGU7XG4gICAgbGV0IG1hdGNoID0gcmVnZXguZXhlYyhtZXNzYWdlVGV4dCk7XG4gICAgbGV0IGNvbWV0Q2hhdFVzZXJzOiBBcnJheTxDb21ldENoYXQuVXNlciB8IENvbWV0Q2hhdC5Hcm91cE1lbWJlcj4gPSBbXTtcbiAgICBsZXQgbWVudGlvbmVkVXNlcnMgPSBtZXNzYWdlLmdldE1lbnRpb25lZFVzZXJzKCk7XG4gICAgd2hpbGUgKG1hdGNoICE9PSBudWxsKSB7XG4gICAgICBsZXQgdXNlcjtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbWVudGlvbmVkVXNlcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKG1hdGNoWzFdID09IG1lbnRpb25lZFVzZXJzW2ldLmdldFVpZCgpKSB7XG4gICAgICAgICAgdXNlciA9IG1lbnRpb25lZFVzZXJzW2ldO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAodXNlcikge1xuICAgICAgICBjb21ldENoYXRVc2Vycy5wdXNoKHVzZXIpO1xuICAgICAgfVxuICAgICAgbWF0Y2ggPSByZWdleC5leGVjKG1lc3NhZ2VUZXh0KTtcbiAgICB9XG4gICAgbGV0IG1lbnRpb25zRm9ybWF0dGVyID0gdGhpcy5nZXRNZW50aW9uc1RleHRGb3JtYXR0ZXIoXG4gICAgICBtZW50aW9uc0Zvcm1hdHRlclBhcmFtc1xuICAgICk7XG4gICAgbWVudGlvbnNGb3JtYXR0ZXIuc2V0Q2xhc3NlcyhbXCJjYy1tZW50aW9uc1wiXSk7XG4gICAgbWVudGlvbnNGb3JtYXR0ZXIuc2V0Q29tZXRDaGF0VXNlckdyb3VwTWVtYmVycyhjb21ldENoYXRVc2Vycyk7XG4gICAgbWVzc2FnZVRleHRUbXAgPSBtZW50aW9uc0Zvcm1hdHRlci5nZXRGb3JtYXR0ZWRUZXh0KFxuICAgICAgbWVzc2FnZVRleHRUbXAsXG4gICAgICBtZW50aW9uc0Zvcm1hdHRlclBhcmFtc1xuICAgICkgYXMgc3RyaW5nO1xuICAgIHJldHVybiBtZXNzYWdlVGV4dFRtcDtcbiAgfVxuXG4gIGdldEFJT3B0aW9ucyhcbiAgICB0aGVtZTogQ29tZXRDaGF0VGhlbWUsXG4gICAgaWQ/OiBNYXA8U3RyaW5nLCBhbnk+XG4gICk6IEFycmF5PENvbWV0Q2hhdE1lc3NhZ2VDb21wb3NlckFjdGlvbiB8IENvbWV0Q2hhdEFjdGlvbnNWaWV3PiB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgZ2V0QWxsVGV4dEZvcm1hdHRlcnMoZm9ybWF0dGVyUGFyYW1zOiBhbnkpOiBDb21ldENoYXRUZXh0Rm9ybWF0dGVyW10ge1xuICAgIGxldCBmb3JtYXR0ZXJzID0gW107XG4gICAgY29uc3QgbWVudGlvbnNGb3JtYXR0ZXIgPSBmb3JtYXR0ZXJQYXJhbXMuZGlzYWJsZU1lbnRpb25zID8gbnVsbCA6IENoYXRDb25maWd1cmF0b3IuZ2V0RGF0YVNvdXJjZSgpLmdldE1lbnRpb25zVGV4dEZvcm1hdHRlcihcbiAgICAgIGZvcm1hdHRlclBhcmFtc1xuICAgICk7XG4gICAgY29uc3QgdXJsVGV4dEZvcm1hdHRlciA9IENoYXRDb25maWd1cmF0b3IuZ2V0RGF0YVNvdXJjZSgpLmdldFVybFRleHRGb3JtYXR0ZXIoZm9ybWF0dGVyUGFyYW1zKTtcbiAgICBpZiAobWVudGlvbnNGb3JtYXR0ZXIpIHtcbiAgICAgIGZvcm1hdHRlcnMucHVzaChtZW50aW9uc0Zvcm1hdHRlcik7XG4gICAgfVxuICAgIGlmICh1cmxUZXh0Rm9ybWF0dGVyKSB7XG4gICAgICBmb3JtYXR0ZXJzLnB1c2godXJsVGV4dEZvcm1hdHRlcik7XG4gICAgfVxuICAgIHJldHVybiBmb3JtYXR0ZXJzO1xuICB9XG5cbiAgZ2V0TWVudGlvbnNUZXh0Rm9ybWF0dGVyKHBhcmFtczogYW55KTogQ29tZXRDaGF0TWVudGlvbnNGb3JtYXR0ZXIge1xuICAgIGxldCBtZW50aW9uc1RleHRGb3JtYXR0ZXIgPSBuZXcgQ29tZXRDaGF0TWVudGlvbnNGb3JtYXR0ZXIoKTtcbiAgICBpZiAocGFyYW1zICYmIHBhcmFtcy50aGVtZSkge1xuICAgICAgbWVudGlvbnNUZXh0Rm9ybWF0dGVyLnNldENvbXBvc2VyTWVudGlvblN0eWxlKFxuICAgICAgICBuZXcgVXNlck1lbnRpb25TdHlsZSh7XG4gICAgICAgICAgbG9nZ2VkSW5Vc2VyVGV4dEZvbnQ6IGZvbnRIZWxwZXIocGFyYW1zLnRoZW1lLnR5cG9ncmFwaHkudGV4dDIpLFxuICAgICAgICAgIGxvZ2dlZEluVXNlclRleHRDb2xvcjogcGFyYW1zLnRoZW1lLnBhbGV0dGUuZ2V0UHJpbWFyeSgpLFxuICAgICAgICAgIGxvZ2dlZEluVXNlclRleHRCYWNrZ3JvdW5kOiBcIlwiLFxuICAgICAgICAgIG1lbnRpb25UZXh0Rm9udDogZm9udEhlbHBlcihwYXJhbXMudGhlbWUudHlwb2dyYXBoeS50ZXh0MiksXG4gICAgICAgICAgbWVudGlvblRleHRDb2xvcjogcGFyYW1zLnRoZW1lLnBhbGV0dGUuZ2V0UHJpbWFyeSgpLFxuICAgICAgICAgIG1lbnRpb25UZXh0QmFja2dyb3VuZDogXCJcIixcbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgICBtZW50aW9uc1RleHRGb3JtYXR0ZXIuc2V0Q29udmVyc2F0aW9uTWVudGlvblN0eWxlKFxuICAgICAgICBuZXcgVXNlck1lbnRpb25TdHlsZSh7XG4gICAgICAgICAgbG9nZ2VkSW5Vc2VyVGV4dEZvbnQ6IGZvbnRIZWxwZXIocGFyYW1zLnRoZW1lLnR5cG9ncmFwaHkudGV4dDMpLFxuICAgICAgICAgIGxvZ2dlZEluVXNlclRleHRDb2xvcjogcGFyYW1zLnRoZW1lLnBhbGV0dGUuZ2V0UHJpbWFyeSgpLFxuICAgICAgICAgIGxvZ2dlZEluVXNlclRleHRCYWNrZ3JvdW5kOiBcIlwiLFxuICAgICAgICAgIG1lbnRpb25UZXh0Rm9udDogZm9udEhlbHBlcihwYXJhbXMudGhlbWUudHlwb2dyYXBoeS50ZXh0MyksXG4gICAgICAgICAgbWVudGlvblRleHRDb2xvcjogcGFyYW1zLnRoZW1lLnBhbGV0dGUuZ2V0UHJpbWFyeSgpLFxuICAgICAgICAgIG1lbnRpb25UZXh0QmFja2dyb3VuZDogXCJcIixcbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgICBtZW50aW9uc1RleHRGb3JtYXR0ZXIuc2V0UmlnaHRCdWJibGVNZW50aW9uU3R5bGUoXG4gICAgICAgIG5ldyBVc2VyTWVudGlvblN0eWxlKHtcbiAgICAgICAgICBsb2dnZWRJblVzZXJUZXh0Rm9udDogZm9udEhlbHBlcihwYXJhbXMudGhlbWUudHlwb2dyYXBoeS50ZXh0MyksXG4gICAgICAgICAgbG9nZ2VkSW5Vc2VyVGV4dENvbG9yOiBwYXJhbXMudGhlbWUucGFsZXR0ZS5nZXRUZXJ0aWFyeSgpLFxuICAgICAgICAgIGxvZ2dlZEluVXNlclRleHRCYWNrZ3JvdW5kOiBcIlwiLFxuICAgICAgICAgIG1lbnRpb25UZXh0Rm9udDogZm9udEhlbHBlcihwYXJhbXMudGhlbWUudHlwb2dyYXBoeS50ZXh0MyksXG4gICAgICAgICAgbWVudGlvblRleHRDb2xvcjogcGFyYW1zLnRoZW1lLnBhbGV0dGUuZ2V0VGVydGlhcnkoKSxcbiAgICAgICAgICBtZW50aW9uVGV4dEJhY2tncm91bmQ6IFwiXCIsXG4gICAgICAgIH0pXG4gICAgICApO1xuICAgICAgbWVudGlvbnNUZXh0Rm9ybWF0dGVyLnNldExlZnRCdWJibGVNZW50aW9uU3R5bGUoXG4gICAgICAgIG5ldyBVc2VyTWVudGlvblN0eWxlKHtcbiAgICAgICAgICBsb2dnZWRJblVzZXJUZXh0Rm9udDogZm9udEhlbHBlcihwYXJhbXMudGhlbWUudHlwb2dyYXBoeS50ZXh0MyksXG4gICAgICAgICAgbG9nZ2VkSW5Vc2VyVGV4dENvbG9yOiBwYXJhbXMudGhlbWUucGFsZXR0ZS5nZXRQcmltYXJ5KCksXG4gICAgICAgICAgbG9nZ2VkSW5Vc2VyVGV4dEJhY2tncm91bmQ6IFwiXCIsXG4gICAgICAgICAgbWVudGlvblRleHRGb250OiBmb250SGVscGVyKHBhcmFtcy50aGVtZS50eXBvZ3JhcGh5LnRleHQzKSxcbiAgICAgICAgICBtZW50aW9uVGV4dENvbG9yOiBwYXJhbXMudGhlbWUucGFsZXR0ZS5nZXRQcmltYXJ5KCksXG4gICAgICAgICAgbWVudGlvblRleHRCYWNrZ3JvdW5kOiBcIlwiLFxuICAgICAgICB9KVxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIG1lbnRpb25zVGV4dEZvcm1hdHRlcjtcbiAgfVxuXG4gIGdldFVybFRleHRGb3JtYXR0ZXIocGFyYW1zOiBhbnkgPSB7fSk6IENvbWV0Q2hhdFVybHNGb3JtYXR0ZXIge1xuICAgIGxldCB1cmxUZXh0Rm9ybWF0dGVyID0gbmV3IENvbWV0Q2hhdFVybHNGb3JtYXR0ZXIoW1xuICAgICAgLyhodHRwcz86XFwvXFwvW15cXHNdKykvZyxcbiAgICBdKTtcbiAgICBpZiAocGFyYW1zLmFsaWdubWVudCA9PSBNZXNzYWdlQnViYmxlQWxpZ25tZW50LmxlZnQpIHtcbiAgICAgIHVybFRleHRGb3JtYXR0ZXIuc2V0U3R5bGUoe1xuICAgICAgICBmb3JtYXR0ZWRUZXh0Q29sb3I6IHBhcmFtcy50aGVtZS5wYWxldHRlLmdldFByaW1hcnkoKSxcbiAgICAgICAgZm9ybWF0dGVkVGV4dEZvbnQ6IGZvbnRIZWxwZXIocGFyYW1zLnRoZW1lLnR5cG9ncmFwaHkudGV4dDMpLFxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHVybFRleHRGb3JtYXR0ZXIuc2V0U3R5bGUoe1xuICAgICAgICBmb3JtYXR0ZWRUZXh0Q29sb3I6IHBhcmFtcy50aGVtZS5wYWxldHRlLmdldFRlcnRpYXJ5KCksXG4gICAgICAgIGZvcm1hdHRlZFRleHRGb250OiBmb250SGVscGVyKHBhcmFtcy50aGVtZS50eXBvZ3JhcGh5LnRleHQzKSxcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gdXJsVGV4dEZvcm1hdHRlcjtcbiAgfVxufVxuZXhwb3J0IHR5cGUgQ29tcG9zZXJJZCA9IHtcbiAgcGFyZW50TWVzc2FnZUlkOiBudW1iZXIgfCBudWxsO1xuICB1c2VyOiBzdHJpbmcgfCBudWxsO1xuICBncm91cDogc3RyaW5nIHwgbnVsbDtcbn07XG4iXX0=
|