@webex/plugin-meetings 3.10.0-webex-services-ready.2 → 3.10.0-webex-services-ready.3
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/dist/breakouts/breakout.js +1 -1
- package/dist/breakouts/index.js +1 -1
- package/dist/hashTree/hashTree.js +3 -3
- package/dist/hashTree/hashTree.js.map +1 -1
- package/dist/interpretation/index.js +1 -1
- package/dist/interpretation/siLanguage.js +1 -1
- package/dist/locus-info/index.js +37 -71
- package/dist/locus-info/index.js.map +1 -1
- package/dist/types/locus-info/index.d.ts +2 -24
- package/dist/webinar/index.js +1 -1
- package/package.json +20 -20
- package/src/hashTree/hashTree.ts +1 -1
- package/src/locus-info/index.ts +33 -55
- package/test/unit/spec/locus-info/index.js +73 -12
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_lodash","require","_loggerProxy","_interopRequireDefault","_eventsScope","_constants","_infoUtils","_fullState","_selfUtils","_hostUtils","_controlsUtils","_embeddedAppsUtils","_mediaSharesUtils","_parser","_metrics","_constants2","_hashTreeParser","_interopRequireWildcard","_types","e","t","_WeakMap","r","n","__esModule","o","i","f","__proto__","default","_typeof","has","get","set","_t2","hasOwnProperty","call","_Object$defineProperty","_Object$getOwnPropertyDescriptor","_createForOfIteratorHelper","_Symbol","_Symbol$iterator","_Array$isArray2","_unsupportedIterableToArray","length","_n","F","s","done","value","TypeError","a","u","next","return","_arrayLikeToArray","toString","slice","constructor","name","_Array$from","test","Array","ownKeys","_Object$keys","_Object$getOwnPropertySymbols","filter","enumerable","push","apply","_objectSpread","arguments","Object","forEach","_defineProperty2","_Object$getOwnPropertyDescriptors","_Object$defineProperties","_callSuper","_getPrototypeOf2","_possibleConstructorReturn2","_isNativeReflectConstruct","_Reflect$construct","Boolean","prototype","valueOf","LocusDtoTopLevelKeys","LocusObjectStateAfterUpdates","unchanged","removed","updated","LocusInfo","exports","_EventsScope","updateMeeting","webex","meetingId","_this","_classCallCheck2","parsedLocus","states","emitChange","compareAndUpdateFlags","locusParser","LocusDeltaParser","hashTreeObjectId2ParticipantId","_map","_inherits2","_createClass2","key","doLocusSync","meeting","isLocusUrlChanged","locus","_this$locusParser$wor","_this2","url","isDelta","meetingDestroyed","workingCopy","syncUrl","locusUrl","LoggerProxy","logger","info","concat","meetingRequest","getLocusDTO","catch","Metrics","sendBehavioralMetric","BEHAVIORAL_METRICS","LOCUS_DELTA_SYNC_FAILED","correlationId","reason","message","errorName","stack","code","statusCode","err","meetings","destroy","MEETING_REMOVED_REASON","LOCUS_DTO_SYNC_FAILED","then","res","isEmpty","body","baseSequence","locusInfo","handleLocusDelta","onFullLocus","LOCUS_SYNC_HANDLING_FAILED","finally","resume","applyLocusDeltaData","action","_LocusDeltaParser$loc","loci","DESYNC","USE_CURRENT","USE_INCOMING","WAIT","LOCUS_URL_CHANGED","onDeltaLocus","_this3","onDeltaAction","parsedLoci","onDeltaEvent","init","undefined","created","scheduledMeeting","participantsUrl","replaces","aclUrl","sequence","membership","identities","participants","updateLocusCache","updateParticipants","updateConversationUrl","conversationUrl","updateControls","controls","self","updateLocusUrl","ControlsUtils","isMainSessionDTO","updateFullState","fullState","updateMeetingInfo","updateEmbeddedApps","embeddedApps","updateSelf","updateHostInfo","host","updateMediaShares","mediaShares","updateLinks","links","createHashTreeParser","_ref","initialLocus","HashTreeParser","webexRequest","request","bind","locusInfoUpdateCallback","updateFromHashTree","debugId","substring","_initialSetup","_asyncToGenerator2","_regenerator","mark","_callee","data","_data$locus","_data$locus$links","_data$locus$links$res","_data$locus$links$res2","_data$hashTreeMessage","_selfObject$data","selfObject","_data$locus2","_data$locus2$self","_t","wrap","_context","prev","trigger","hashTreeMessage","locusStateElements","find","el","isSelf","visibleDataSets","warn","Error","hashTreeParser","dataSets","initializeFromMessage","abrupt","resources","initializeFromGetLociResponse","stop","initialSetup","_x","handleLocusAPIResponse","responseBody","sendClassicVsHashTreeMismatchMetric","handleLocusUpdate","updateLocusFromHashTreeObject","object","type","htMeta","elementId","toLowerCase","ObjectType","version","locusObjectFromData","_values","ObjectTypeToLocusKeyMap","locusDtoKey","mediaShare","_object$data$floor","_object$data$floor2","_object$data$floor2$b","_locus$mediaShares","id","floor","disposition","beneficiary","existingMediaShare","ms","_assign","_locus$mediaShares2","participant","participantObject","participantId","jsSdkMeta","removedParticipantIds","delete","classicVsHashTreeMismatchMetricCounter","LOCUS_CLASSIC_VS_HASH_TREE_MISMATCH","handleHashTreeMessage","eventType","LOCUSEVENT","HASH_TREE_DATA_UPDATED","handleMessage","updateType","_this4","LocusInfoUpdateType","OBJECTS_UPDATED","locusObjectStateAfterUpdates","updatedObjects","_object$data","LOCUS_HASH_TREE_UNSUPPORTED_OPERATION","cloneDeep","_stringify","map","hasData","MEETING_ENDED","meetingCollection","SELF_REMOVED","parse","stateElementsMessage","getTheLocusToUpdate","PARTICIPANT_JOIN","PARTICIPANT_LEFT","CONTROLS_UPDATED","PARTICIPANT_AUDIO_MUTED","PARTICIPANT_AUDIO_UNMUTED","PARTICIPANT_VIDEO_MUTED","PARTICIPANT_VIDEO_UNMUTED","SELF_CHANGED","PARTICIPANT_UPDATED","PARTICIPANT_CONTROLS_UPDATED","PARTICIPANT_ROLES_UPDATED","PARTICIPANT_DECLINED","FLOOR_GRANTED","FLOOR_RELEASED","DIFFERENCE","emitScoped","scope","eventName","args","emit","onFullLocusWithHashTrees","onFullLocusCommon","onFullLocusClassic","isNewFullLocus","error","_this$participants","_this5","_locus$jsSdkMeta","_participant$htMeta","isReplaceMembers","isNeedReplaceMembers","updateLocusInfo","isMeetingActive","handleOneOnOneEvent","_CALL_","_SIP_BRIDGE_","file","function","EVENTS","REMOTE_RESPONSE","remoteDeclined","remoteAnswered","_locus$jsSdkMeta2","mergeParticipants","_locus$self","_locus$self2","state","updateCreated","updateParticipantsUrl","updateReplace","replace","updateAclUrl","updateBasequence","updateSequence","updateMemberShip","updateIdentifiers","compareAndUpdate","getLocusPartner","identity","_USER_","partner","_SPACE_SHARE_","LOCUS","STATE","INACTIVE","internal","newMetrics","submitClientEvent","options","DESTROY_MEETING","CALL_REMOVED_REASON","CALL_INACTIVE","shouldLeave","MEETING_STATE","STATES","LEFT","DECLINED","NOTIFIED","JOINED","PARTNER_LEFT","joinedWith","_LEFT_","IDLE","SELF_LEFT","_MEETING_","TERMINATING","MEETING_INACTIVE_TERMINATING","FULLSTATE_REMOVED","compareSelfAndHost","compareHostAndSelf","_this$parsedLocus$hos","selfIdentity","hostId","moderator","LOCUS_INFO_CAN_ASSIGN_HOST","canAssignHost","isReplace","_this$parsedLocus$con","LOCUS_INFO_UPDATE_PARTICIPANTS","recordingId","record","modifiedBy","selfId","_isArray","_iterator","_step","_participant$person","LOCUSINFO","PARTICIPANT_REASON_CHANGED","displayName","person","primaryDisplayString","isEqual","_ControlsUtils$getCon","getControls","_ControlsUtils$getCon2","updates","hasRecordingChanged","hasRecordingPausedChanged","hasMeetingContainerChanged","hasTranscribeChanged","hasTranscribeSpokenLanguageChanged","hasManualCaptionChanged","hasEntryExitToneChanged","hasBreakoutChanged","hasVideoEnabledChanged","hasMuteOnEntryChanged","hasShareControlChanged","hasDisallowUnmuteChanged","hasReactionsChanged","hasReactionDisplayNamesChanged","hasViewTheParticipantListChanged","hasRaiseHandChanged","hasVideoChanged","hasInterpretationChanged","hasWebcastChanged","hasMeetingFullChanged","hasPracticeSessionEnabledChanged","hasStageViewChanged","hasAnnotationControlChanged","hasRemoteDesktopControlChanged","hasPollingQAControlChanged","hasAutoEndMeetingChanged","current","CONTROLS_MUTE_ON_ENTRY_CHANGED","muteOnEntry","CONTROLS_SHARE_CONTROL_CHANGED","shareControl","CONTROLS_DISALLOW_UNMUTE_CHANGED","disallowUnmute","CONTROLS_REACTIONS_CHANGED","reactions","CONTROLS_VIEW_THE_PARTICIPANTS_LIST_CHANGED","viewTheParticipantList","CONTROLS_RAISE_HAND_CHANGED","raiseHand","CONTROLS_VIDEO_CHANGED","video","paused","RECORDING_STATE","PAUSED","recording","RESUMED","RECORDING","CONTROLS_RECORDING_UPDATED","lastModified","meetingContainerUrl","meetingContainer","CONTROLS_MEETING_CONTAINER_UPDATED","_current$transcribe","transcribe","transcribing","caption","CONTROLS_MEETING_TRANSCRIBE_UPDATED","spokenLanguage","CONTROLS_MEETING_TRANSCRIPTION_SPOKEN_LANGUAGE_UPDATED","enabled","manualCaptionControl","CONTROLS_MEETING_MANUAL_CAPTION_UPDATED","breakout","breakoutMoveId","SelfUtils","getReplacedBreakoutMoveId","device","CONTROLS_MEETING_BREAKOUT_UPDATED","interpretation","CONTROLS_MEETING_INTERPRETATION_UPDATED","entryExitTone","CONTROLS_ENTRY_EXIT_TONE_UPDATED","videoEnabled","unmuteVideoAllowed","SELF_REMOTE_VIDEO_MUTE_STATUS_UPDATED","unmuteAllowed","CONTROLS_WEBCAST_CHANGED","webcastControl","CONTROLS_MEETING_FULL_CHANGED","meetingFull","CONTROLS_PRACTICE_SESSION_STATUS_UPDATED","practiceSession","CONTROLS_STAGE_VIEW_UPDATED","videoLayout","CONTROLS_ANNOTATION_CHANGED","annotationControl","CONTROLS_REMOTE_DESKTOP_CONTROL_CHANGED","rdcControl","CONTROLS_POLLING_QA_CHANGED","pollingQAControl","CONTROLS_AUTO_END_MEETING_WARNING_CHANGED","autoEndMeetingWarning","_this$links","_this$links2","_ref2","services","LINKS_SERVICES","LINKS_RESOURCES","result","FullState","getFullState","meetingStateChangedTo","FULL_STATE_MEETING_STATE_CHANGE","previousState","previous","meetingState","currentState","meetingTypeChangedTo","FULL_STATE_TYPE_UPDATE","parsedHosts","HostUtils","getHosts","isNewHost","LOCUS_INFO_UPDATE_HOST","newHost","oldHost","_this$parsedLocus$sel","roles","getRoles","isJoined","parsedInfo","InfoUtils","getInfos","isLocked","MEETING_LOCKED","isUnlocked","MEETING_UNLOCKED","MEETING_INFO_UPDATED","isInitializing","EmbeddedAppsUtils","areSimilar","parsedEmbeddedApps","EMBEDDED_APPS_UPDATED","forceUpdate","parsedMediaShares","MediaSharesUtils","getMediaShares","LOCUS_INFO_UPDATE_MEDIA_SHARES","parsedSelves","getSelves","element","getSipUrl","sipUri","moderatorChanged","layoutChanged","CONTROLS_MEETING_LAYOUT_UPDATED","layout","breakoutsChanged","SELF_MEETING_BREAKOUTS_CHANGED","breakoutSessions","brbChanged","SELF_MEETING_BRB_CHANGED","brb","interpretationChanged","SELF_MEETING_INTERPRETATION_CHANGED","selfParticipantId","isMediaInactiveOrReleased","DISCONNECT_DUE_TO_INACTIVITY","SELF_MODERATOR_CHANGED","isRolesChanged","_parsedSelves$previou","_parsedSelves$current","SELF_ROLES_CHANGED","oldRoles","newRoles","isVideoMutedByOthersChanged","muted","remoteVideoMuted","localAudioUnmuteRequiredByServer","LOCAL_UNMUTE_REQUIRED","remoteMuted","isMutedByOthersChanged","SELF_REMOTE_MUTE_STATUS_UPDATED","localAudioUnmuteRequestedByServer","LOCAL_UNMUTE_REQUESTED","hasUserEnteredLobby","SELF_UNADMITTED_GUEST","hasUserBeenAdmitted","SELF_ADMITTED_GUEST","isMediaInactive","MEDIA_INACTIVITY","getMediaStatus","mediaSessions","audioStateChange","videoStateChange","shareStateChange","_parsedSelves$current2","_parsedSelves$current3","_parsedSelves$current4","MEDIA_STATUS_CHANGE","audioStatus","currentMediaStatus","audio","videoStatus","shareStatus","share","isUserObserving","SELF_OBSERVING","canNotViewTheParticipantListChanged","SELF_CANNOT_VIEW_PARTICIPANT_LIST_CHANGE","canNotViewTheParticipantList","isSharingBlockedChanged","SELF_IS_SHARING_BLOCKED_CHANGE","isSharingBlocked","LOCUS_INFO_UPDATE_SELF","oldSelf","newSelf","isMainLocus","LOCUS_INFO_UPDATE_URL","updateMainSessionLocusCache","newLocus","switchStatus","getSessionSwitchStatus","isReturnToMain","mainSessionLocusCache","_this$fullState","_this$mainSessionLocu","_this$mainSessionLocu2","isActive","ACTIVE","INITIALIZING","includes","clearMainSessionLocusCache","sourceParticipants","existIndex","findIndex","p","splice","mainLocus","_this6","locusClone","assignWith","objValue","srcValue","EventsScope"],"sources":["index.ts"],"sourcesContent":["import {isEqual, assignWith, cloneDeep, isEmpty} from 'lodash';\n\nimport LoggerProxy from '../common/logs/logger-proxy';\nimport EventsScope from '../common/events/events-scope';\nimport {\n EVENTS,\n LOCUSEVENT,\n _USER_,\n _CALL_,\n _SIP_BRIDGE_,\n MEETING_STATE,\n _MEETING_,\n _SPACE_SHARE_,\n LOCUSINFO,\n LOCUS,\n _LEFT_,\n MEETING_REMOVED_REASON,\n CALL_REMOVED_REASON,\n RECORDING_STATE,\n Enum,\n} from '../constants';\n\nimport InfoUtils from './infoUtils';\nimport FullState from './fullState';\nimport SelfUtils from './selfUtils';\nimport HostUtils from './hostUtils';\nimport ControlsUtils from './controlsUtils';\nimport EmbeddedAppsUtils from './embeddedAppsUtils';\nimport MediaSharesUtils from './mediaSharesUtils';\nimport LocusDeltaParser from './parser';\nimport Metrics from '../metrics';\nimport BEHAVIORAL_METRICS from '../metrics/constants';\nimport HashTreeParser, {\n DataSet,\n HashTreeMessage,\n HashTreeObject,\n isSelf,\n LocusInfoUpdateType,\n} from '../hashTree/hashTreeParser';\nimport {ObjectType, ObjectTypeToLocusKeyMap} from '../hashTree/types';\nimport {Links, LocusDTO, LocusFullState} from './types';\n\nexport type LocusLLMEvent = {\n data: {\n eventType: typeof LOCUSEVENT.HASH_TREE_DATA_UPDATED;\n stateElementsMessage: HashTreeMessage;\n };\n};\n\n// list of top level keys in Locus DTO relevant for Hash Tree DTOs processing\n// it does not contain fields specific to classic Locus DTOs like sequence or baseSequence\nconst LocusDtoTopLevelKeys = [\n 'controls',\n 'fullState',\n 'host',\n 'info',\n 'links',\n 'mediaShares',\n 'meetings',\n 'participants',\n 'replaces',\n 'self',\n 'sequence',\n 'syncUrl',\n 'url',\n 'htMeta', // only exists when hash trees are used\n];\n\nexport type LocusApiResponseBody = {\n dataSets?: DataSet[];\n locus: LocusDTO; // this LocusDTO here might not be the full one (for example it won't have all the participants, but it should have self)\n};\n\nconst LocusObjectStateAfterUpdates = {\n unchanged: 'unchanged',\n removed: 'removed',\n updated: 'updated',\n} as const;\n\ntype LocusObjectStateAfterUpdates = Enum<typeof LocusObjectStateAfterUpdates>;\n\n/**\n * @description LocusInfo extends ChildEmitter to convert locusInfo info a private emitter to parent object\n * @export\n * @private\n * @class LocusInfo\n */\nexport default class LocusInfo extends EventsScope {\n compareAndUpdateFlags: any;\n emitChange: any;\n locusParser: any;\n meetingId: any;\n parsedLocus: any;\n updateMeeting: any;\n webex: any;\n aclUrl: any;\n baseSequence: any;\n created: any;\n identities: any;\n membership: any;\n participants: any;\n participantsUrl: any;\n replaces: any;\n scheduledMeeting: any;\n sequence: any;\n controls: any;\n conversationUrl: any;\n embeddedApps: any;\n fullState: any;\n host: any;\n info: any;\n roles: any;\n mediaShares: any;\n replace: any;\n url: any;\n links?: Links;\n mainSessionLocusCache: any;\n self: any;\n hashTreeParser?: HashTreeParser;\n hashTreeObjectId2ParticipantId: Map<number, string>; // mapping of hash tree object ids to participant ids\n classicVsHashTreeMismatchMetricCounter = 0;\n\n /**\n * Constructor\n * @param {function} updateMeeting callback to update the meeting object from an object\n * @param {object} webex\n * @param {string} meetingId\n * @returns {undefined}\n */\n constructor(updateMeeting, webex, meetingId) {\n super();\n this.parsedLocus = {\n states: [],\n };\n this.webex = webex;\n this.emitChange = false;\n this.compareAndUpdateFlags = {};\n this.meetingId = meetingId;\n this.updateMeeting = updateMeeting;\n this.locusParser = new LocusDeltaParser();\n this.hashTreeObjectId2ParticipantId = new Map();\n }\n\n /**\n * Does a Locus sync. It tries to get the latest delta DTO or if it can't, it falls back to getting the full Locus DTO.\n * WARNING: This function must not be used for hash tree based Locus meetings.\n *\n * @param {Meeting} meeting\n * @param {boolean} isLocusUrlChanged\n * @param {Locus} locus\n * @returns {undefined}\n */\n private doLocusSync(meeting: any, isLocusUrlChanged: boolean, locus: any) {\n let url;\n let isDelta = false;\n let meetingDestroyed = false;\n\n if (isLocusUrlChanged) {\n // for the locus url changed case from breakout to main session, we should always do a full sync, in this case, the url from locus is always on main session,\n // so use the main session locus url to get the full locus(full participants list in the response).\n // for the locus url changed case from main session to breakout, we don't need to care about it here,\n // because it is a USE_INCOMING case, it will not be executed here.\n url = locus.url;\n } else if (this.locusParser.workingCopy?.syncUrl) {\n url = this.locusParser.workingCopy.syncUrl;\n isDelta = true;\n } else {\n url = meeting.locusUrl;\n }\n\n LoggerProxy.logger.info(\n `Locus-info:index#doLocusSync --> doing Locus sync (getting ${\n isDelta ? 'delta' : 'full'\n } DTO)`\n );\n\n // return value ignored on purpose\n meeting.meetingRequest\n .getLocusDTO({url})\n .catch((e) => {\n if (isDelta) {\n LoggerProxy.logger.info(\n 'Locus-info:index#doLocusSync --> delta sync failed, falling back to full sync'\n );\n\n Metrics.sendBehavioralMetric(BEHAVIORAL_METRICS.LOCUS_DELTA_SYNC_FAILED, {\n correlationId: meeting.correlationId,\n url,\n reason: e.message,\n errorName: e.name,\n stack: e.stack,\n code: e.code,\n });\n\n isDelta = false;\n\n // Locus sometimes returns 403, for example if meeting has ended, no point trying the fallback to full sync in that case\n if (e.statusCode !== 403) {\n return meeting.meetingRequest.getLocusDTO({url: meeting.locusUrl}).catch((err) => {\n LoggerProxy.logger.info(\n 'Locus-info:index#doLocusSync --> fallback full sync failed, destroying the meeting'\n );\n this.webex.meetings.destroy(meeting, MEETING_REMOVED_REASON.LOCUS_DTO_SYNC_FAILED);\n meetingDestroyed = true;\n throw err;\n });\n }\n LoggerProxy.logger.info(\n 'Locus-info:index#doLocusSync --> got 403 from Locus, skipping fallback to full sync, destroying the meeting'\n );\n } else {\n LoggerProxy.logger.info(\n 'Locus-info:index#doLocusSync --> fallback full sync failed, destroying the meeting'\n );\n }\n this.webex.meetings.destroy(meeting, MEETING_REMOVED_REASON.LOCUS_DTO_SYNC_FAILED);\n meetingDestroyed = true;\n throw e;\n })\n .then((res) => {\n if (isEmpty(res.body)) {\n if (isDelta) {\n LoggerProxy.logger.info(\n 'Locus-info:index#doLocusSync --> received empty body from syncUrl, so we already have latest Locus DTO'\n );\n } else {\n LoggerProxy.logger.info(\n 'Locus-info:index#doLocusSync --> received empty body from full DTO sync request'\n );\n }\n\n return;\n }\n\n if (isDelta) {\n if (res.body.baseSequence) {\n meeting.locusInfo.handleLocusDelta(res.body, meeting);\n\n return;\n }\n // in some cases Locus might return us full DTO even when we asked for a delta\n LoggerProxy.logger.info(\n 'Locus-info:index#doLocusSync --> got full DTO when we asked for delta'\n );\n }\n meeting.locusInfo.onFullLocus(res.body);\n })\n .catch((e) => {\n LoggerProxy.logger.info(\n `Locus-info:index#doLocusSync --> getLocusDTO succeeded but failed to handle result, locus parser will resume but not all data may be synced (${e.toString()})`\n );\n\n Metrics.sendBehavioralMetric(BEHAVIORAL_METRICS.LOCUS_SYNC_HANDLING_FAILED, {\n correlationId: meeting.correlationId,\n url,\n reason: e.message,\n errorName: e.name,\n stack: e.stack,\n code: e.code,\n });\n })\n .finally(() => {\n if (!meetingDestroyed) {\n // Notify parser to resume processing delta events.\n // Any deltas in the queue that have now been superseded by this sync will simply be ignored\n this.locusParser.resume();\n }\n });\n }\n\n /**\n * Apply locus delta data to meeting\n * @param {string} action Locus delta action\n * @param {Locus} locus\n * @param {Meeting} meeting\n * @returns {undefined}\n */\n applyLocusDeltaData(action: string, locus: any, meeting: any) {\n const {DESYNC, USE_CURRENT, USE_INCOMING, WAIT, LOCUS_URL_CHANGED} = LocusDeltaParser.loci;\n const isLocusUrlChanged = action === LOCUS_URL_CHANGED;\n\n switch (action) {\n case USE_INCOMING:\n meeting.locusInfo.onDeltaLocus(locus);\n break;\n case USE_CURRENT:\n case WAIT:\n // do nothing\n break;\n case DESYNC:\n case LOCUS_URL_CHANGED:\n this.doLocusSync(meeting, isLocusUrlChanged, locus);\n break;\n default:\n LoggerProxy.logger.info(\n `Locus-info:index#applyLocusDeltaData --> Unknown locus delta action: ${action}`\n );\n }\n }\n\n /**\n * Adds locus delta to parser's queue\n * and registers a function handler\n * to recieve parsed actions from queue.\n * @param {Locus} locus\n * @param {Meeting} meeting\n * @returns {undefined}\n */\n handleLocusDelta(locus: any, meeting: any) {\n // register a function to process delta actions\n if (!this.locusParser.onDeltaAction) {\n // delta action, along with associated loci\n // is passed into the function.\n this.locusParser.onDeltaAction = (action, parsedLoci) => {\n this.applyLocusDeltaData(action, parsedLoci, meeting);\n };\n }\n // queue delta event with parser\n this.locusParser.onDeltaEvent(locus);\n }\n\n /**\n * @param {Locus} locus\n * @returns {undefined}\n * @memberof LocusInfo\n */\n init(locus: any = {}) {\n this.created = locus.created || null;\n this.scheduledMeeting = locus.meeting || null;\n this.participantsUrl = locus.participantsUrl || null;\n this.replaces = locus.replaces || null;\n this.aclUrl = locus.aclUrl || null;\n this.baseSequence = locus.baseSequence || null;\n this.sequence = locus.sequence || null;\n this.membership = locus.membership || null;\n this.identities = locus.identities || null;\n this.participants = locus.participants || null;\n\n /**\n * Stores the delta values for a changed participant.\n *\n * @typedef {Object} DeltaParticipant\n * @property {Record<string, boolean>} delta - Contains changed streams.\n * @property {Object} person - Contains person data.\n */\n\n this.updateLocusCache(locus);\n // above section only updates the locusInfo object\n // The below section makes sure it updates the locusInfo as well as updates the meeting object\n this.updateParticipants(locus.participants, []);\n // For 1:1 space meeting the conversation Url does not exist in locus.conversation\n this.updateConversationUrl(locus.conversationUrl, locus.info);\n this.updateControls(locus.controls, locus.self);\n this.updateLocusUrl(locus.url, ControlsUtils.isMainSessionDTO(locus));\n this.updateFullState(locus.fullState);\n this.updateMeetingInfo(locus.info);\n this.updateEmbeddedApps(locus.embeddedApps);\n // self and participants generate sipUrl for 1:1 meeting\n this.updateSelf(locus.self);\n this.updateHostInfo(locus.host);\n this.updateMediaShares(locus.mediaShares);\n this.updateLinks(locus.links);\n }\n\n /**\n * Creates the HashTreeParser instance.\n * @param {Object} initial locus data\n * @returns {void}\n */\n private createHashTreeParser({\n initialLocus,\n }: {\n initialLocus: {\n dataSets: Array<DataSet>;\n locus: any;\n };\n }) {\n return new HashTreeParser({\n initialLocus,\n webexRequest: this.webex.request.bind(this.webex),\n locusInfoUpdateCallback: this.updateFromHashTree.bind(this),\n debugId: `HT-${this.meetingId.substring(0, 4)}`,\n });\n }\n\n /**\n * @param {Object} data - data to initialize locus info with. It may be from a join or GET /loci response or from a Mercury event that triggers a creation of meeting object\n * @returns {undefined}\n * @memberof LocusInfo\n */\n async initialSetup(\n data:\n | {\n trigger: 'join-response';\n locus: LocusDTO;\n dataSets?: DataSet[];\n }\n | {\n trigger: 'locus-message';\n locus?: LocusDTO;\n hashTreeMessage?: HashTreeMessage;\n }\n | {\n trigger: 'get-loci-response';\n locus?: LocusDTO;\n }\n ) {\n switch (data.trigger) {\n case 'locus-message':\n if (data.hashTreeMessage) {\n // we need the SELF object to be in the received message, because it contains visibleDataSets\n // and these are needed to initialize all the hash trees\n const selfObject = data.hashTreeMessage.locusStateElements?.find((el) => isSelf(el));\n\n if (!selfObject?.data?.visibleDataSets) {\n LoggerProxy.logger.warn(\n `Locus-info:index#initialSetup --> cannot initialize HashTreeParser, SELF object with visibleDataSets is missing in the message`\n );\n\n throw new Error('SELF object with visibleDataSets is missing in the message');\n }\n\n LoggerProxy.logger.info(\n 'Locus-info:index#initialSetup --> creating HashTreeParser from message'\n );\n // first create the HashTreeParser, but don't initialize it with any data yet\n // pass just a fake locus that contains only the visibleDataSets\n this.hashTreeParser = this.createHashTreeParser({\n initialLocus: {\n locus: {self: {visibleDataSets: selfObject.data.visibleDataSets}},\n dataSets: [], // empty, because they will be populated in initializeFromMessage() call // dataSets: data.hashTreeMessage.dataSets,\n },\n });\n\n // now handle the message - that should populate all the visible datasets\n await this.hashTreeParser.initializeFromMessage(data.hashTreeMessage);\n } else {\n // \"classic\" Locus case, no hash trees involved\n this.updateLocusCache(data.locus);\n this.onFullLocus(data.locus, undefined);\n }\n break;\n case 'join-response':\n this.updateLocusCache(data.locus);\n this.onFullLocus(data.locus, undefined, data.dataSets);\n break;\n case 'get-loci-response':\n if (data.locus?.links?.resources?.visibleDataSets?.url) {\n LoggerProxy.logger.info(\n 'Locus-info:index#initialSetup --> creating HashTreeParser from get-loci-response'\n );\n // first create the HashTreeParser, but don't initialize it with any data yet\n // pass just a fake locus that contains only the visibleDataSets\n this.hashTreeParser = this.createHashTreeParser({\n initialLocus: {\n locus: {self: {visibleDataSets: data.locus?.self?.visibleDataSets}},\n dataSets: [], // empty, because we don't have them yet\n },\n });\n\n // now initialize all the data\n await this.hashTreeParser.initializeFromGetLociResponse(data.locus);\n } else {\n // \"classic\" Locus case, no hash trees involved\n this.updateLocusCache(data.locus);\n this.onFullLocus(data.locus, undefined);\n }\n }\n // Change it to true after it receives it first locus object\n this.emitChange = true;\n }\n\n /**\n * Handles HTTP response from Locus API call.\n * @param {Meeting} meeting meeting object\n * @param {LocusApiResponseBody} responseBody body of the http response from Locus API call\n * @returns {void}\n */\n handleLocusAPIResponse(meeting, responseBody: LocusApiResponseBody): void {\n if (this.hashTreeParser) {\n if (!responseBody.dataSets) {\n this.sendClassicVsHashTreeMismatchMetric(\n meeting,\n `expected hash tree dataSets in API response but they are missing`\n );\n // continuing as we can still manage without responseBody.dataSets, but this is very suspicious\n }\n LoggerProxy.logger.info(\n 'Locus-info:index#handleLocusAPIResponse --> passing Locus API response to HashTreeParser: ',\n responseBody\n );\n // update the data in our hash trees\n this.hashTreeParser.handleLocusUpdate(responseBody);\n } else {\n if (responseBody.dataSets) {\n this.sendClassicVsHashTreeMismatchMetric(\n meeting,\n `unexpected hash tree dataSets in API response`\n );\n }\n // classic Locus delta\n this.handleLocusDelta(responseBody.locus, meeting);\n }\n }\n\n /**\n *\n * @param {HashTreeObject} object data set object\n * @param {any} locus\n * @returns {void}\n */\n updateLocusFromHashTreeObject(object: HashTreeObject, locus: LocusDTO): LocusDTO {\n const type = object.htMeta.elementId.type.toLowerCase();\n\n switch (type) {\n case ObjectType.locus: {\n if (!object.data) {\n // not doing anything here, as we need Locus to always be there (at least some fields)\n // and that's already taken care of in updateFromHashTree()\n LoggerProxy.logger.info(\n `Locus-info:index#updateLocusFromHashTreeObject --> LOCUS object removed, version=${object.htMeta.elementId.version}`\n );\n\n return locus;\n }\n // replace the main locus\n\n // The Locus object we receive from backend has empty participants array,\n // and may have (although it shouldn't) other fields that are managed by other ObjectTypes\n // like \"fullState\" or \"info\", so we're making sure to delete them here\n const locusObjectFromData = object.data;\n\n Object.values(ObjectTypeToLocusKeyMap).forEach((locusDtoKey) => {\n delete locusObjectFromData[locusDtoKey];\n });\n\n locus = {...locus, ...locusObjectFromData};\n LoggerProxy.logger.info(\n `Locus-info:index#updateLocusFromHashTreeObject --> LOCUS object updated to version=${object.htMeta.elementId.version}`\n );\n break;\n }\n case ObjectType.mediaShare:\n if (object.data) {\n LoggerProxy.logger.info(\n `Locus-info:index#updateLocusFromHashTreeObject --> mediaShare id=${\n object.htMeta.elementId.id\n } name='${object.data.name}' updated ${\n object.data.name === 'content'\n ? `floor=${object.data.floor?.disposition}, ${object.data.floor?.beneficiary?.id}`\n : ''\n } version=${object.htMeta.elementId.version}`\n );\n const existingMediaShare = locus.mediaShares?.find(\n (ms) => ms.htMeta.elementId.id === object.htMeta.elementId.id\n );\n\n if (existingMediaShare) {\n Object.assign(existingMediaShare, object.data);\n } else {\n locus.mediaShares = locus.mediaShares || [];\n locus.mediaShares.push(object.data);\n }\n } else {\n LoggerProxy.logger.info(\n `Locus-info:index#updateLocusFromHashTreeObject --> mediaShare id=${object.htMeta.elementId.id} removed, version=${object.htMeta.elementId.version}`\n );\n locus.mediaShares = locus.mediaShares?.filter(\n (ms) => ms.htMeta.elementId.id !== object.htMeta.elementId.id\n );\n }\n break;\n case ObjectType.participant:\n LoggerProxy.logger.info(\n `Locus-info:index#updateLocusFromHashTreeObject --> participant id=${\n object.htMeta.elementId.id\n } ${object.data ? 'updated' : 'removed'} version=${object.htMeta.elementId.version}`\n );\n if (object.data) {\n if (!locus.participants) {\n locus.participants = [];\n }\n const participantObject = object.data;\n participantObject.htMeta = object.htMeta;\n locus.participants.push(participantObject);\n this.hashTreeObjectId2ParticipantId.set(object.htMeta.elementId.id, participantObject.id);\n } else {\n const participantId = this.hashTreeObjectId2ParticipantId.get(object.htMeta.elementId.id);\n\n if (!locus.jsSdkMeta) {\n locus.jsSdkMeta = {removedParticipantIds: []};\n }\n locus.jsSdkMeta.removedParticipantIds.push(participantId);\n this.hashTreeObjectId2ParticipantId.delete(object.htMeta.elementId.id);\n }\n break;\n case ObjectType.links:\n case ObjectType.info:\n case ObjectType.fullState:\n case ObjectType.self:\n if (!object.data) {\n // self without data is handled inside HashTreeParser and results in LocusInfoUpdateType.MEETING_ENDED, so we should never get here\n // all other types info, fullstate, etc - Locus should never send them without data\n LoggerProxy.logger.warn(\n `Locus-info:index#updateLocusFromHashTreeObject --> received ${type} object without data, this is not expected! version=${object.htMeta.elementId.version}`\n );\n } else {\n LoggerProxy.logger.info(\n `Locus-info:index#updateLocusFromHashTreeObject --> ${type} object updated to version ${object.htMeta.elementId.version}`\n );\n const locusDtoKey = ObjectTypeToLocusKeyMap[type];\n locus[locusDtoKey] = object.data;\n }\n break;\n default:\n LoggerProxy.logger.warn(\n `Locus-info:index#updateLocusFromHashTreeObject --> received unsupported object type ${type}`\n );\n break;\n }\n\n return locus;\n }\n\n /**\n * Sends a metric when we receive something from Locus that uses hash trees while we\n * expect classic deltas or the other way around.\n * @param {Meeting} meeting\n * @param {string} message\n * @returns {void}\n */\n sendClassicVsHashTreeMismatchMetric(meeting: any, message: string) {\n LoggerProxy.logger.warn(\n `Locus-info:index#sendClassicVsHashTreeMismatchMetric --> classic vs hash tree mismatch! ${message}`\n );\n\n // we don't want to flood the metrics system\n if (this.classicVsHashTreeMismatchMetricCounter < 5) {\n Metrics.sendBehavioralMetric(BEHAVIORAL_METRICS.LOCUS_CLASSIC_VS_HASH_TREE_MISMATCH, {\n correlationId: meeting.correlationId,\n message,\n });\n this.classicVsHashTreeMismatchMetricCounter += 1;\n }\n }\n\n /**\n * Handles a hash tree message received from Locus.\n *\n * @param {Meeting} meeting - The meeting object\n * @param {eventType} eventType - The event type\n * @param {HashTreeMessage} message incoming hash tree message\n * @returns {void}\n */\n private handleHashTreeMessage(meeting: any, eventType: LOCUSEVENT, message: HashTreeMessage) {\n if (eventType !== LOCUSEVENT.HASH_TREE_DATA_UPDATED) {\n this.sendClassicVsHashTreeMismatchMetric(\n meeting,\n `got ${eventType}, expected ${LOCUSEVENT.HASH_TREE_DATA_UPDATED}`\n );\n\n return;\n }\n\n this.hashTreeParser.handleMessage(message);\n }\n\n /**\n * Callback registered with HashTreeParser to receive locus info updates.\n * Updates our locus info based on the data parsed by the hash tree parser.\n *\n * @param {LocusInfoUpdateType} updateType - The type of update received.\n * @param {Object} [data] - Additional data for the update, if applicable.\n * @returns {void}\n */\n private updateFromHashTree(\n updateType: LocusInfoUpdateType,\n data?: {updatedObjects: HashTreeObject[]}\n ) {\n switch (updateType) {\n case LocusInfoUpdateType.OBJECTS_UPDATED: {\n // initialize our new locus\n let locus: LocusDTO = {\n participants: [],\n jsSdkMeta: {removedParticipantIds: []},\n };\n\n // first go over all the updates and check what happens with the main locus object\n let locusObjectStateAfterUpdates: LocusObjectStateAfterUpdates =\n LocusObjectStateAfterUpdates.unchanged;\n data.updatedObjects.forEach((object) => {\n if (object.htMeta.elementId.type.toLowerCase() === ObjectType.locus) {\n if (locusObjectStateAfterUpdates === LocusObjectStateAfterUpdates.updated) {\n // this code doesn't supported it right now,\n // cases for \"updated\" followed by \"removed\", or multiple \"updated\" would need more handling\n // but these should never happen\n LoggerProxy.logger.warn(\n `Locus-info:index#updateFromHashTree --> received multiple LOCUS objects in one update, this is unexpected!`\n );\n Metrics.sendBehavioralMetric(\n BEHAVIORAL_METRICS.LOCUS_HASH_TREE_UNSUPPORTED_OPERATION,\n {\n locusUrl: object.data?.url || this.url,\n message: object.data\n ? 'multiple LOCUS object updates'\n : 'LOCUS object update followed by removal',\n }\n );\n }\n if (object.data) {\n locusObjectStateAfterUpdates = LocusObjectStateAfterUpdates.updated;\n } else {\n locusObjectStateAfterUpdates = LocusObjectStateAfterUpdates.removed;\n }\n }\n });\n\n // if Locus object is unchanged or removed, we need to keep using the existing locus\n // because the rest of the locusInfo code expects locus to always be present (with at least some of the fields)\n // if it gets updated, we only need to have the fields that are not part of \"locus\" object (like \"info\" or \"mediaShares\")\n // so that when Locus object gets updated, if the new one is missing some field, that field will\n // be removed from our locusInfo\n if (\n locusObjectStateAfterUpdates === LocusObjectStateAfterUpdates.unchanged ||\n locusObjectStateAfterUpdates === LocusObjectStateAfterUpdates.removed\n ) {\n // copy over all of existing locus except participants\n LocusDtoTopLevelKeys.forEach((key) => {\n if (key !== 'participants') {\n locus[key] = cloneDeep(this[key]);\n }\n });\n } else {\n // initialize only the fields that are not part of main \"Locus\" object\n // (except participants, which need to stay empty - that means \"no participant changes\")\n Object.values(ObjectTypeToLocusKeyMap).forEach((locusDtoKey) => {\n if (locusDtoKey !== 'participants') {\n locus[locusDtoKey] = cloneDeep(this[locusDtoKey]);\n }\n });\n }\n\n LoggerProxy.logger.info(\n `Locus-info:index#updateFromHashTree --> LOCUS object is ${locusObjectStateAfterUpdates}, all updates: ${JSON.stringify(\n data.updatedObjects.map((o) => ({\n type: o.htMeta.elementId.type,\n id: o.htMeta.elementId.id,\n hasData: !!o.data,\n }))\n )}`\n );\n // now apply all the updates from the hash tree onto the locus\n data.updatedObjects.forEach((object) => {\n locus = this.updateLocusFromHashTreeObject(object, locus);\n });\n\n // update our locus info with the new locus\n this.onDeltaLocus(locus);\n\n break;\n }\n\n case LocusInfoUpdateType.MEETING_ENDED: {\n LoggerProxy.logger.info(\n `Locus-info:index#updateFromHashTree --> received signal that meeting ended, destroying meeting ${this.meetingId}`\n );\n const meeting = this.webex.meetings.meetingCollection.get(this.meetingId);\n this.webex.meetings.destroy(meeting, MEETING_REMOVED_REASON.SELF_REMOVED);\n }\n }\n }\n\n /**\n * @param {Meeting} meeting\n * @param {Object} data\n * @returns {undefined}\n * @memberof LocusInfo\n */\n parse(meeting: any, data: any) {\n if (this.hashTreeParser) {\n this.handleHashTreeMessage(\n meeting,\n data.eventType,\n data.stateElementsMessage as HashTreeMessage\n );\n } else {\n // eslint-disable-next-line @typescript-eslint/no-shadow\n const {eventType} = data;\n const locus = this.getTheLocusToUpdate(data.locus);\n LoggerProxy.logger.info(`Locus-info:index#parse --> received locus data: ${eventType}`);\n\n locus.jsSdkMeta = {removedParticipantIds: []};\n\n switch (eventType) {\n case LOCUSEVENT.PARTICIPANT_JOIN:\n case LOCUSEVENT.PARTICIPANT_LEFT:\n case LOCUSEVENT.CONTROLS_UPDATED:\n case LOCUSEVENT.PARTICIPANT_AUDIO_MUTED:\n case LOCUSEVENT.PARTICIPANT_AUDIO_UNMUTED:\n case LOCUSEVENT.PARTICIPANT_VIDEO_MUTED:\n case LOCUSEVENT.PARTICIPANT_VIDEO_UNMUTED:\n case LOCUSEVENT.SELF_CHANGED:\n case LOCUSEVENT.PARTICIPANT_UPDATED:\n case LOCUSEVENT.PARTICIPANT_CONTROLS_UPDATED:\n case LOCUSEVENT.PARTICIPANT_ROLES_UPDATED:\n case LOCUSEVENT.PARTICIPANT_DECLINED:\n case LOCUSEVENT.FLOOR_GRANTED:\n case LOCUSEVENT.FLOOR_RELEASED:\n this.onFullLocus(locus, eventType);\n break;\n case LOCUSEVENT.DIFFERENCE:\n this.handleLocusDelta(locus, meeting);\n break;\n case LOCUSEVENT.HASH_TREE_DATA_UPDATED:\n this.sendClassicVsHashTreeMismatchMetric(\n meeting,\n `got ${eventType}, expected classic events`\n );\n break;\n\n default:\n // Why will there be a event with no eventType ????\n // we may not need this, we can get full locus\n this.handleLocusDelta(locus, meeting);\n }\n }\n }\n\n /**\n * @param {String} scope\n * @param {String} eventName\n * @param {Array} args\n * @returns {undefined}\n * @memberof LocusInfo\n */\n emitScoped(scope?: any, eventName?: string, args?: any) {\n return this.emit(scope, eventName, args);\n }\n\n /**\n * Function for handling full locus when it's using hash trees (so not the \"classic\" one).\n *\n * @param {object} locus locus object\n * @param {string} eventType locus event\n * @param {DataSet[]} dataSets\n * @returns {void}\n */\n private onFullLocusWithHashTrees(locus: any, eventType?: string, dataSets?: Array<DataSet>) {\n if (!this.hashTreeParser) {\n LoggerProxy.logger.info(`Locus-info:index#onFullLocus --> creating hash tree parser`);\n LoggerProxy.logger.info(\n 'Locus-info:index#onFullLocus --> dataSets:',\n dataSets,\n ' and locus:',\n locus\n );\n this.hashTreeParser = this.createHashTreeParser({\n initialLocus: {locus, dataSets},\n });\n this.onFullLocusCommon(locus, eventType);\n } else {\n // in this case the Locus we're getting is not necessarily the full one\n // so treat it like if we just got it in any api response\n\n LoggerProxy.logger.info(\n 'Locus-info:index#onFullLocus --> hash tree parser already exists, handling it like a normal API response'\n );\n this.handleLocusAPIResponse(undefined, {dataSets, locus});\n }\n }\n\n /**\n * Function for handling full locus when it's the \"classic\" one (not hash trees)\n *\n * @param {object} locus locus object\n * @param {string} eventType locus event\n * @returns {void}\n */\n private onFullLocusClassic(locus: any, eventType?: string) {\n if (!this.locusParser.isNewFullLocus(locus)) {\n LoggerProxy.logger.info(\n `Locus-info:index#onFullLocus --> ignoring old full locus DTO, eventType=${eventType}`\n );\n\n return;\n }\n this.onFullLocusCommon(locus, eventType);\n }\n\n /**\n * updates the locus with full locus object\n * @param {object} locus locus object\n * @param {string} eventType locus event\n * @param {DataSet[]} dataSets\n * @returns {object} null\n * @memberof LocusInfo\n */\n onFullLocus(locus: any, eventType?: string, dataSets?: Array<DataSet>) {\n if (!locus) {\n LoggerProxy.logger.error(\n 'Locus-info:index#onFullLocus --> object passed as argument was invalid, continuing.'\n );\n }\n\n if (dataSets) {\n // this is the new hashmap Locus DTO format (only applicable to webinars for now)\n this.onFullLocusWithHashTrees(locus, eventType, dataSets);\n } else {\n this.onFullLocusClassic(locus, eventType);\n }\n }\n\n /**\n * Common part of handling full locus, used by both classic and hash tree based locus handling\n * @param {object} locus locus object\n * @param {string} eventType locus event\n * @returns {void}\n */\n private onFullLocusCommon(locus: any, eventType?: string) {\n this.scheduledMeeting = locus.meeting || null;\n this.participants = locus.participants;\n this.participants?.forEach((participant) => {\n // participant.htMeta is set only for hash tree based locus\n if (participant.htMeta?.elementId.id) {\n this.hashTreeObjectId2ParticipantId.set(participant.htMeta.elementId.id, participant.id);\n }\n });\n const isReplaceMembers = ControlsUtils.isNeedReplaceMembers(this.controls, locus.controls);\n this.updateLocusInfo(locus);\n this.updateParticipants(\n locus.participants,\n locus.jsSdkMeta?.removedParticipantIds,\n isReplaceMembers\n );\n this.isMeetingActive();\n this.handleOneOnOneEvent(eventType);\n this.updateEmbeddedApps(locus.embeddedApps);\n // set current (working copy) for parser\n this.locusParser.workingCopy = locus;\n }\n\n // used for ringing stops on one on one\n /**\n * @param {String} eventType\n * @returns {undefined}\n * @memberof LocusInfo\n */\n // eslint-disable-next-line @typescript-eslint/no-shadow\n handleOneOnOneEvent(eventType: string) {\n if (\n this.parsedLocus.fullState.type === _CALL_ ||\n this.parsedLocus.fullState.type === _SIP_BRIDGE_\n ) {\n // for 1:1 bob calls alice and alice declines, notify the meeting state\n if (eventType === LOCUSEVENT.PARTICIPANT_DECLINED) {\n // trigger the event for stop ringing\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'handleOneonOneEvent',\n },\n EVENTS.REMOTE_RESPONSE,\n {\n remoteDeclined: true,\n remoteAnswered: false,\n }\n );\n }\n // for 1:1 bob calls alice and alice answers, notify the meeting state\n if (eventType === LOCUSEVENT.PARTICIPANT_JOIN) {\n // trigger the event for stop ringing\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'handleOneonOneEvent',\n },\n EVENTS.REMOTE_RESPONSE,\n {\n remoteDeclined: false,\n remoteAnswered: true,\n }\n );\n }\n }\n }\n\n /**\n * @param {Object} locus\n * @returns {undefined}\n * @memberof LocusInfo\n */\n onDeltaLocus(locus: any) {\n const isReplaceMembers = ControlsUtils.isNeedReplaceMembers(this.controls, locus.controls);\n this.mergeParticipants(this.participants, locus.participants);\n this.updateLocusInfo(locus);\n this.updateParticipants(\n locus.participants,\n locus.jsSdkMeta?.removedParticipantIds,\n isReplaceMembers\n );\n this.isMeetingActive();\n }\n\n /**\n * @param {Object} locus\n * @returns {undefined}\n * @memberof LocusInfo\n */\n updateLocusInfo(locus) {\n if (locus.self?.reason === 'MOVED' && locus.self?.state === 'LEFT') {\n // When moved to a breakout session locus sends a message for the previous locus\n // indicating that we have been moved. It isn't helpful to continue parsing this\n // as it gets interpreted as if we have left the call\n return;\n }\n\n this.updateControls(locus.controls, locus.self);\n this.updateConversationUrl(locus.conversationUrl, locus.info);\n this.updateCreated(locus.created);\n this.updateFullState(locus.fullState);\n this.updateHostInfo(locus.host);\n this.updateLocusUrl(locus.url, ControlsUtils.isMainSessionDTO(locus));\n this.updateMeetingInfo(locus.info, locus.self);\n this.updateMediaShares(locus.mediaShares);\n this.updateParticipantsUrl(locus.participantsUrl);\n this.updateReplace(locus.replace);\n this.updateSelf(locus.self);\n this.updateAclUrl(locus.aclUrl);\n this.updateBasequence(locus.baseSequence);\n this.updateSequence(locus.sequence);\n this.updateMemberShip(locus.membership);\n this.updateIdentifiers(locus.identities);\n this.updateEmbeddedApps(locus.embeddedApps);\n this.updateLinks(locus.links);\n this.compareAndUpdate();\n // update which required to compare different objects from locus\n }\n\n /**\n * @param {Array} participants\n * @param {Object} self\n * @returns {Array}\n * @memberof LocusInfo\n */\n getLocusPartner(participants: Array<any>, self: any) {\n if (!participants || participants.length === 0) {\n return null;\n }\n\n return (\n participants.find(\n (participant) =>\n self &&\n participant.identity !== self.identity &&\n (participants.length <= 2 || (participant.type === _USER_ && !participant.removed))\n // @ts-ignore\n ) || this.partner\n );\n }\n\n // TODO: all the leave states need to be checked\n /**\n * @returns {undefined}\n * @memberof LocusInfo\n */\n isMeetingActive() {\n if (\n this.parsedLocus.fullState.type === _CALL_ ||\n this.parsedLocus.fullState.type === _SIP_BRIDGE_ ||\n this.parsedLocus.fullState.type === _SPACE_SHARE_\n ) {\n // @ts-ignore\n const partner = this.getLocusPartner(this.participants, this.self);\n\n this.updateMeeting({partner});\n\n // Check if guest user needs to be checked here\n\n // 1) when bob declines call from bob, (bob='DECLINED')\n // 2) When alice rejects call to bob , (bob='NOTIFIED')\n\n // When we dont add MEDIA for condition 2. The state of bob='IDLE'\n\n if (this.fullState && this.fullState.state === LOCUS.STATE.INACTIVE) {\n // TODO: update the meeting state\n LoggerProxy.logger.warn(\n 'Locus-info:index#isMeetingActive --> Call Ended, locus state is inactive.'\n );\n\n // @ts-ignore\n this.webex.internal.newMetrics.submitClientEvent({\n name: 'client.call.remote-ended',\n options: {\n meetingId: this.meetingId,\n },\n });\n\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'isMeetingActive',\n },\n EVENTS.DESTROY_MEETING,\n {\n reason: CALL_REMOVED_REASON.CALL_INACTIVE,\n shouldLeave: false,\n }\n );\n } else if (\n partner.state === MEETING_STATE.STATES.LEFT &&\n this.parsedLocus.self &&\n (this.parsedLocus.self.state === MEETING_STATE.STATES.DECLINED ||\n this.parsedLocus.self.state === MEETING_STATE.STATES.NOTIFIED ||\n this.parsedLocus.self.state === MEETING_STATE.STATES.JOINED)\n ) {\n // @ts-ignore\n this.webex.internal.newMetrics.submitClientEvent({\n name: 'client.call.remote-ended',\n options: {\n meetingId: this.meetingId,\n },\n });\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'isMeetingActive',\n },\n EVENTS.DESTROY_MEETING,\n {\n reason: CALL_REMOVED_REASON.PARTNER_LEFT,\n shouldLeave:\n this.parsedLocus.self.joinedWith && this.parsedLocus.self.joinedWith.state !== _LEFT_,\n }\n );\n } else if (\n this.parsedLocus.self &&\n this.parsedLocus.self.state === MEETING_STATE.STATES.LEFT &&\n (partner.state === MEETING_STATE.STATES.LEFT ||\n partner.state === MEETING_STATE.STATES.DECLINED ||\n partner.state === MEETING_STATE.STATES.NOTIFIED ||\n partner.state === MEETING_STATE.STATES.IDLE) // Happens when user just joins and adds no Media\n ) {\n // @ts-ignore\n this.webex.internal.newMetrics.submitClientEvent({\n name: 'client.call.remote-ended',\n options: {\n meetingId: this.meetingId,\n },\n });\n\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'isMeetingActive',\n },\n EVENTS.DESTROY_MEETING,\n {\n reason: CALL_REMOVED_REASON.SELF_LEFT,\n shouldLeave: false,\n }\n );\n }\n } else if (this.parsedLocus.fullState.type === _MEETING_) {\n if (\n this.fullState &&\n (this.fullState.state === LOCUS.STATE.INACTIVE ||\n // @ts-ignore\n this.fullState.state === LOCUS.STATE.TERMINATING)\n ) {\n LoggerProxy.logger.warn(\n 'Locus-info:index#isMeetingActive --> Meeting is ending due to inactive or terminating'\n );\n\n // @ts-ignore\n this.webex.internal.newMetrics.submitClientEvent({\n name: 'client.call.remote-ended',\n options: {\n meetingId: this.meetingId,\n },\n });\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'isMeetingActive',\n },\n EVENTS.DESTROY_MEETING,\n {\n reason: MEETING_REMOVED_REASON.MEETING_INACTIVE_TERMINATING,\n shouldLeave: false,\n }\n );\n } else if (this.fullState && this.fullState.removed) {\n // user has been dropped from a meeting\n\n // @ts-ignore\n this.webex.internal.newMetrics.submitClientEvent({\n name: 'client.call.remote-ended',\n options: {\n meetingId: this.meetingId,\n },\n });\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'isMeetingActive',\n },\n EVENTS.DESTROY_MEETING,\n {\n reason: MEETING_REMOVED_REASON.FULLSTATE_REMOVED,\n shouldLeave: false,\n }\n );\n }\n // If you are guest and you are removed from the meeting\n // You wont get any further events\n else if (this.parsedLocus.self && this.parsedLocus.self.removed) {\n // Check if we need to send an event\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'isMeetingActive',\n },\n EVENTS.DESTROY_MEETING,\n {\n reason: MEETING_REMOVED_REASON.SELF_REMOVED,\n shouldLeave: false,\n }\n );\n }\n } else {\n LoggerProxy.logger.warn('Locus-info:index#isMeetingActive --> Meeting Type is unknown.');\n }\n }\n\n /**\n * checks if the host permissions have changed while in the meeting\n * This would be the case if your role as host or moderator has been updated\n * @returns {undefined}\n * @memberof LocusInfo\n */\n compareAndUpdate() {\n // TODO: check with locus team on host and moderator doc\n // use host as a validator if needed\n if (\n this.compareAndUpdateFlags.compareSelfAndHost ||\n this.compareAndUpdateFlags.compareHostAndSelf\n ) {\n this.compareSelfAndHost();\n }\n }\n\n /**\n * compared the self object to check if the user has host permissions\n * @returns {undefined}\n * @memberof LocusInfo\n */\n compareSelfAndHost() {\n // In some cases the host info is not present but the moderator values changes from null to false so it triggers an update\n if (\n this.parsedLocus.self.selfIdentity === this.parsedLocus.host?.hostId &&\n this.parsedLocus.self.moderator\n ) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'compareSelfAndHost',\n },\n EVENTS.LOCUS_INFO_CAN_ASSIGN_HOST,\n {\n canAssignHost: true,\n }\n );\n } else {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'compareSelfAndHost',\n },\n EVENTS.LOCUS_INFO_CAN_ASSIGN_HOST,\n {\n canAssignHost: false,\n }\n );\n }\n }\n\n /**\n * update meeting's members\n * @param {Object} participants new participants object\n * @param {Array} removedParticipantIds list of removed participants\n * @param {Boolean} isReplace is replace the whole members\n * @returns {Array} updatedParticipants\n * @memberof LocusInfo\n */\n updateParticipants(participants: object, removedParticipantIds?: string[], isReplace?: boolean) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateParticipants',\n },\n EVENTS.LOCUS_INFO_UPDATE_PARTICIPANTS,\n {\n participants,\n removedParticipantIds,\n recordingId: this.parsedLocus.controls && this.parsedLocus.controls.record?.modifiedBy,\n selfIdentity: this.parsedLocus.self && this.parsedLocus.self.selfIdentity,\n selfId: this.parsedLocus.self && this.parsedLocus.self.selfId,\n hostId: this.parsedLocus.host && this.parsedLocus.host.hostId,\n isReplace,\n }\n );\n\n if (participants && Array.isArray(participants) && participants.length > 0) {\n for (const participant of participants) {\n if (participant && participant?.reason === 'FAILURE') {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateParticipants',\n },\n LOCUSINFO.EVENTS.PARTICIPANT_REASON_CHANGED,\n {\n displayName: participant?.person?.primaryDisplayString,\n }\n );\n }\n }\n }\n }\n\n /**\n * @param {Object} controls\n * @param {Object} self\n * @returns {undefined}\n * @memberof LocusInfo\n */\n updateControls(controls: object, self: object) {\n if (controls && !isEqual(this.controls, controls)) {\n this.parsedLocus.controls = ControlsUtils.parse(controls);\n const {\n updates: {\n hasRecordingChanged,\n hasRecordingPausedChanged,\n hasMeetingContainerChanged,\n hasTranscribeChanged,\n hasTranscribeSpokenLanguageChanged,\n hasManualCaptionChanged,\n hasEntryExitToneChanged,\n hasBreakoutChanged,\n hasVideoEnabledChanged,\n hasMuteOnEntryChanged,\n hasShareControlChanged,\n hasDisallowUnmuteChanged,\n hasReactionsChanged,\n hasReactionDisplayNamesChanged,\n hasViewTheParticipantListChanged,\n hasRaiseHandChanged,\n hasVideoChanged,\n hasInterpretationChanged,\n hasWebcastChanged,\n hasMeetingFullChanged,\n hasPracticeSessionEnabledChanged,\n hasStageViewChanged,\n hasAnnotationControlChanged,\n hasRemoteDesktopControlChanged,\n hasPollingQAControlChanged,\n hasAutoEndMeetingChanged,\n },\n current,\n } = ControlsUtils.getControls(this.controls, controls);\n\n if (hasMuteOnEntryChanged) {\n this.emitScoped(\n {file: 'locus-info', function: 'updateControls'},\n LOCUSINFO.EVENTS.CONTROLS_MUTE_ON_ENTRY_CHANGED,\n {state: current.muteOnEntry}\n );\n }\n\n if (hasShareControlChanged) {\n this.emitScoped(\n {file: 'locus-info', function: 'updateControls'},\n LOCUSINFO.EVENTS.CONTROLS_SHARE_CONTROL_CHANGED,\n {state: current.shareControl}\n );\n }\n\n if (hasDisallowUnmuteChanged) {\n this.emitScoped(\n {file: 'locus-info', function: 'updateControls'},\n LOCUSINFO.EVENTS.CONTROLS_DISALLOW_UNMUTE_CHANGED,\n {state: current.disallowUnmute}\n );\n }\n\n if (hasReactionsChanged || hasReactionDisplayNamesChanged) {\n this.emitScoped(\n {file: 'locus-info', function: 'updateControls'},\n LOCUSINFO.EVENTS.CONTROLS_REACTIONS_CHANGED,\n {state: current.reactions}\n );\n }\n\n if (hasViewTheParticipantListChanged) {\n this.emitScoped(\n {file: 'locus-info', function: 'updateControls'},\n LOCUSINFO.EVENTS.CONTROLS_VIEW_THE_PARTICIPANTS_LIST_CHANGED,\n {state: current.viewTheParticipantList}\n );\n }\n\n if (hasRaiseHandChanged) {\n this.emitScoped(\n {file: 'locus-info', function: 'updateControls'},\n LOCUSINFO.EVENTS.CONTROLS_RAISE_HAND_CHANGED,\n {state: current.raiseHand}\n );\n }\n\n if (hasVideoChanged) {\n this.emitScoped(\n {file: 'locus-info', function: 'updateControls'},\n LOCUSINFO.EVENTS.CONTROLS_VIDEO_CHANGED,\n {state: current.video}\n );\n }\n\n if (hasRecordingChanged || hasRecordingPausedChanged) {\n let state = null;\n\n if (hasRecordingPausedChanged) {\n if (current.record.paused) {\n state = RECORDING_STATE.PAUSED;\n } else {\n // state will be `IDLE` if the recording is not active, even when there is a `pause` status change.\n state = current.record.recording ? RECORDING_STATE.RESUMED : RECORDING_STATE.IDLE;\n }\n } else if (hasRecordingChanged) {\n state = current.record.recording ? RECORDING_STATE.RECORDING : RECORDING_STATE.IDLE;\n }\n\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateControls',\n },\n LOCUSINFO.EVENTS.CONTROLS_RECORDING_UPDATED,\n {\n state,\n modifiedBy: current.record.modifiedBy,\n lastModified: current.record.lastModified,\n }\n );\n }\n\n if (hasMeetingContainerChanged) {\n const {meetingContainerUrl} = current.meetingContainer;\n\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateControls',\n },\n LOCUSINFO.EVENTS.CONTROLS_MEETING_CONTAINER_UPDATED,\n {\n meetingContainerUrl,\n }\n );\n }\n\n if (hasTranscribeChanged) {\n const {transcribing, caption} = current.transcribe;\n\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateControls',\n },\n LOCUSINFO.EVENTS.CONTROLS_MEETING_TRANSCRIBE_UPDATED,\n {\n transcribing,\n caption,\n }\n );\n }\n\n if (hasTranscribeSpokenLanguageChanged) {\n const {spokenLanguage} = current.transcribe;\n\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateControls',\n },\n LOCUSINFO.EVENTS.CONTROLS_MEETING_TRANSCRIPTION_SPOKEN_LANGUAGE_UPDATED,\n {\n spokenLanguage,\n }\n );\n }\n\n if (hasManualCaptionChanged) {\n const {enabled} = current.manualCaptionControl;\n\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateControls',\n },\n LOCUSINFO.EVENTS.CONTROLS_MEETING_MANUAL_CAPTION_UPDATED,\n {\n enabled,\n }\n );\n }\n\n if (hasBreakoutChanged) {\n const {breakout} = current;\n breakout.breakoutMoveId = SelfUtils.getReplacedBreakoutMoveId(\n self,\n this.webex.internal.device.url\n );\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateControls',\n },\n LOCUSINFO.EVENTS.CONTROLS_MEETING_BREAKOUT_UPDATED,\n {\n breakout,\n }\n );\n }\n\n if (hasInterpretationChanged) {\n const {interpretation} = current;\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateControls',\n },\n LOCUSINFO.EVENTS.CONTROLS_MEETING_INTERPRETATION_UPDATED,\n {\n interpretation,\n }\n );\n }\n\n if (hasEntryExitToneChanged) {\n const {entryExitTone} = current;\n\n this.updateMeeting({entryExitTone});\n\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateControls',\n },\n LOCUSINFO.EVENTS.CONTROLS_ENTRY_EXIT_TONE_UPDATED,\n {\n entryExitTone,\n }\n );\n }\n\n // videoEnabled is handled differently than other controls,\n // to fit with audio mute status logic\n if (hasVideoEnabledChanged) {\n const {videoEnabled} = current;\n\n this.updateMeeting({unmuteVideoAllowed: videoEnabled});\n\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateControls',\n },\n LOCUSINFO.EVENTS.SELF_REMOTE_VIDEO_MUTE_STATUS_UPDATED,\n {\n // muted: not part of locus.controls\n unmuteAllowed: videoEnabled,\n }\n );\n }\n\n if (hasWebcastChanged) {\n this.emitScoped(\n {file: 'locus-info', function: 'updateControls'},\n LOCUSINFO.EVENTS.CONTROLS_WEBCAST_CHANGED,\n {state: current.webcastControl}\n );\n }\n\n if (hasMeetingFullChanged) {\n this.emitScoped(\n {file: 'locus-info', function: 'updateControls'},\n LOCUSINFO.EVENTS.CONTROLS_MEETING_FULL_CHANGED,\n {state: current.meetingFull}\n );\n }\n\n if (hasPracticeSessionEnabledChanged) {\n this.emitScoped(\n {file: 'locus-info', function: 'updateControls'},\n LOCUSINFO.EVENTS.CONTROLS_PRACTICE_SESSION_STATUS_UPDATED,\n {state: current.practiceSession}\n );\n }\n\n if (hasStageViewChanged) {\n this.emitScoped(\n {file: 'locus-info', function: 'updateControls'},\n LOCUSINFO.EVENTS.CONTROLS_STAGE_VIEW_UPDATED,\n {state: current.videoLayout}\n );\n }\n\n if (hasAnnotationControlChanged) {\n this.emitScoped(\n {file: 'locus-info', function: 'updateControls'},\n LOCUSINFO.EVENTS.CONTROLS_ANNOTATION_CHANGED,\n {state: current.annotationControl}\n );\n }\n\n if (hasRemoteDesktopControlChanged) {\n this.emitScoped(\n {file: 'locus-info', function: 'updateControls'},\n LOCUSINFO.EVENTS.CONTROLS_REMOTE_DESKTOP_CONTROL_CHANGED,\n {state: current.rdcControl}\n );\n }\n\n if (hasPollingQAControlChanged) {\n this.emitScoped(\n {file: 'locus-info', function: 'updateControls'},\n LOCUSINFO.EVENTS.CONTROLS_POLLING_QA_CHANGED,\n {state: current.pollingQAControl}\n );\n }\n\n if (hasAutoEndMeetingChanged) {\n this.emitScoped(\n {file: 'locus-info', function: 'updateControls'},\n LOCUSINFO.EVENTS.CONTROLS_AUTO_END_MEETING_WARNING_CHANGED,\n {state: current.autoEndMeetingWarning}\n );\n }\n\n this.controls = controls;\n }\n }\n\n /**\n * @param {String} conversationUrl\n * @param {Object} info\n * @returns {undefined}\n * @memberof LocusInfo\n */\n updateConversationUrl(conversationUrl: string, info: any) {\n if (conversationUrl && !isEqual(this.conversationUrl, conversationUrl)) {\n this.conversationUrl = conversationUrl;\n this.updateMeeting({conversationUrl});\n } else if (\n info &&\n info.conversationUrl &&\n !isEqual(this.conversationUrl, info.conversationUrl)\n ) {\n this.conversationUrl = info.conversationUrl;\n this.updateMeeting({conversationUrl: info.conversationUrl});\n }\n }\n\n /**\n * @param {Object} created\n * @returns {undefined}\n * @memberof LocusInfo\n */\n updateCreated(created: object) {\n if (created && !isEqual(this.created, created)) {\n this.created = created;\n }\n }\n\n /**\n * Updates links and emits appropriate events if services or resources have changed\n * @param {Object} links\n * @returns {undefined}\n * @memberof LocusInfo\n */\n updateLinks(links?: Links) {\n const {services, resources} = links || {};\n\n if (services && !isEqual(this.links?.services, services)) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateLinks',\n },\n LOCUSINFO.EVENTS.LINKS_SERVICES,\n {\n services,\n }\n );\n }\n\n if (resources && !isEqual(this.links?.resources, resources)) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateLinks',\n },\n LOCUSINFO.EVENTS.LINKS_RESOURCES,\n {\n resources,\n }\n );\n }\n\n this.links = links;\n }\n\n /**\n * @param {Object} fullState\n * @returns {undefined}\n * @memberof LocusInfo\n */\n updateFullState(fullState: object) {\n if (fullState && !isEqual(this.fullState, fullState)) {\n const result = FullState.getFullState(this.fullState, fullState);\n\n this.updateMeeting(result.current);\n\n if (result.updates.meetingStateChangedTo) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateFullState',\n },\n LOCUSINFO.EVENTS.FULL_STATE_MEETING_STATE_CHANGE,\n {\n previousState: result.previous && result.previous.meetingState,\n currentState: result.current.meetingState,\n }\n );\n }\n\n if (result.updates.meetingTypeChangedTo) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateFullState',\n },\n LOCUSINFO.EVENTS.FULL_STATE_TYPE_UPDATE,\n {\n type: result.current.type,\n }\n );\n }\n this.parsedLocus.fullState = result.current;\n this.fullState = fullState;\n }\n }\n\n /**\n * handles when the locus.host is updated\n * @param {Object} host the locus.host property\n * @returns {undefined}\n * @memberof LocusInfo\n * emits internal event locus_info_update_host\n */\n updateHostInfo(host: object) {\n if (host && !isEqual(this.host, host)) {\n const parsedHosts = HostUtils.getHosts(this.host, host);\n\n this.updateMeeting(parsedHosts.current);\n this.parsedLocus.host = parsedHosts.current;\n if (parsedHosts.updates.isNewHost) {\n this.compareAndUpdateFlags.compareSelfAndHost = true;\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateHostInfo',\n },\n EVENTS.LOCUS_INFO_UPDATE_HOST,\n {\n newHost: parsedHosts.current,\n oldHost: parsedHosts.previous,\n }\n );\n }\n this.host = host;\n } else {\n this.compareAndUpdateFlags.compareSelfAndHost = false;\n }\n }\n\n /**\n * @param {Object} info\n * @param {Object} self\n * @returns {undefined}\n * @memberof LocusInfo\n */\n updateMeetingInfo(info: object, self?: object) {\n const roles = self ? SelfUtils.getRoles(self) : this.parsedLocus.self?.roles || [];\n if ((info && !isEqual(this.info, info)) || (!isEqual(this.roles, roles) && info)) {\n const isJoined = SelfUtils.isJoined(self || this.parsedLocus.self);\n const parsedInfo = InfoUtils.getInfos(this.parsedLocus.info, info, roles, isJoined);\n\n if (parsedInfo.updates.isLocked) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateMeetingInfo',\n },\n LOCUSINFO.EVENTS.MEETING_LOCKED,\n info\n );\n }\n if (parsedInfo.updates.isUnlocked) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateMeetingInfo',\n },\n LOCUSINFO.EVENTS.MEETING_UNLOCKED,\n info\n );\n }\n\n this.info = info;\n this.parsedLocus.info = parsedInfo.current;\n // Parses the info and adds necessary values\n this.updateMeeting(parsedInfo.current);\n\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateMeetingInfo',\n },\n LOCUSINFO.EVENTS.MEETING_INFO_UPDATED,\n {\n isInitializing: !self, // if self is undefined, then the update is caused by locus init\n }\n );\n }\n this.roles = roles;\n }\n\n /**\n * @param {Object} embeddedApps\n * @returns {undefined}\n * @memberof LocusInfo\n */\n updateEmbeddedApps(embeddedApps: object) {\n // don't do anything if the arrays of apps haven't changed significantly\n if (EmbeddedAppsUtils.areSimilar(this.embeddedApps, embeddedApps)) {\n return;\n }\n\n const parsedEmbeddedApps = EmbeddedAppsUtils.parse(embeddedApps);\n\n this.updateMeeting({embeddedApps: parsedEmbeddedApps});\n\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateEmbeddedApps',\n },\n LOCUSINFO.EVENTS.EMBEDDED_APPS_UPDATED,\n parsedEmbeddedApps\n );\n this.embeddedApps = embeddedApps;\n }\n\n /**\n * handles when the locus.mediaShares is updated\n * @param {Object} mediaShares the locus.mediaShares property\n * @param {boolean} forceUpdate force to update the mediaShares\n * @returns {undefined}\n * @memberof LocusInfo\n * emits internal event locus_info_update_media_shares\n */\n updateMediaShares(mediaShares: object, forceUpdate = false) {\n if (mediaShares && (!isEqual(this.mediaShares, mediaShares) || forceUpdate)) {\n const parsedMediaShares = MediaSharesUtils.getMediaShares(this.mediaShares, mediaShares);\n\n this.updateMeeting(parsedMediaShares.current);\n this.parsedLocus.mediaShares = parsedMediaShares.current;\n this.mediaShares = mediaShares;\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateMediaShares',\n },\n EVENTS.LOCUS_INFO_UPDATE_MEDIA_SHARES,\n {\n current: parsedMediaShares.current,\n previous: parsedMediaShares.previous,\n forceUpdate,\n }\n );\n }\n }\n\n /**\n * @param {String} participantsUrl\n * @returns {undefined}\n * @memberof LocusInfo\n */\n updateParticipantsUrl(participantsUrl: string) {\n if (participantsUrl && !isEqual(this.participantsUrl, participantsUrl)) {\n this.participantsUrl = participantsUrl;\n }\n }\n\n /**\n * @param {Object} replace\n * @returns {undefined}\n * @memberof LocusInfo\n */\n updateReplace(replace: object) {\n if (replace && !isEqual(this.replace, replace)) {\n this.replace = replace;\n }\n }\n\n /**\n * handles when the locus.self is updated\n * @param {Object} self the new locus.self\n * @returns {undefined}\n * @memberof LocusInfo\n * emits internal events self_admitted_guest, self_unadmitted_guest, locus_info_update_self\n */\n updateSelf(self: any) {\n if (self) {\n // @ts-ignore\n const parsedSelves = SelfUtils.getSelves(\n this.parsedLocus.self,\n self,\n this.webex.internal.device.url,\n this.participants // using this.participants instead of locus.participants here, because with delta DTOs locus.participants will only contain a small subset of participants\n );\n\n this.updateMeeting(parsedSelves.current);\n this.parsedLocus.self = parsedSelves.current;\n\n const element = this.parsedLocus.states[this.parsedLocus.states.length - 1];\n\n if (element !== parsedSelves.current.state) {\n this.parsedLocus.states.push(parsedSelves.current.state);\n }\n\n // TODO: check if we need to save the sipUri here as well\n // this.emit(LOCUSINFO.EVENTS.MEETING_UPDATE, SelfUtils.getSipUrl(this.getLocusPartner(participants, self), this.parsedLocus.fullState.type, this.parsedLocus.info.sipUri));\n const result = SelfUtils.getSipUrl(\n this.getLocusPartner(this.participants, self),\n this.parsedLocus.fullState.type,\n this.parsedLocus.info.sipUri\n );\n\n if (result.sipUri) {\n this.updateMeeting(result);\n }\n\n if (parsedSelves.updates.moderatorChanged) {\n this.compareAndUpdateFlags.compareHostAndSelf = true;\n } else {\n this.compareAndUpdateFlags.compareHostAndSelf = false;\n }\n\n if (parsedSelves.updates.layoutChanged) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n LOCUSINFO.EVENTS.CONTROLS_MEETING_LAYOUT_UPDATED,\n {layout: parsedSelves.current.layout}\n );\n }\n\n if (parsedSelves.updates.breakoutsChanged) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n LOCUSINFO.EVENTS.SELF_MEETING_BREAKOUTS_CHANGED,\n {breakoutSessions: parsedSelves.current.breakoutSessions}\n );\n }\n\n if (parsedSelves.updates.brbChanged) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n LOCUSINFO.EVENTS.SELF_MEETING_BRB_CHANGED,\n {\n brb: parsedSelves.current.brb,\n }\n );\n }\n\n if (parsedSelves.updates.interpretationChanged) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n LOCUSINFO.EVENTS.SELF_MEETING_INTERPRETATION_CHANGED,\n {\n interpretation: parsedSelves.current.interpretation,\n selfParticipantId: parsedSelves.current.selfId,\n }\n );\n }\n\n if (parsedSelves.updates.isMediaInactiveOrReleased) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n LOCUSINFO.EVENTS.DISCONNECT_DUE_TO_INACTIVITY,\n {reason: self.reason}\n );\n }\n\n if (parsedSelves.updates.moderatorChanged) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n LOCUSINFO.EVENTS.SELF_MODERATOR_CHANGED,\n self\n );\n }\n\n if (parsedSelves.updates.isRolesChanged) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n LOCUSINFO.EVENTS.SELF_ROLES_CHANGED,\n {oldRoles: parsedSelves.previous?.roles, newRoles: parsedSelves.current?.roles}\n );\n }\n\n if (parsedSelves.updates.isVideoMutedByOthersChanged) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n LOCUSINFO.EVENTS.SELF_REMOTE_VIDEO_MUTE_STATUS_UPDATED,\n {\n muted: parsedSelves.current.remoteVideoMuted,\n // unmuteAllowed: not part of .self\n }\n );\n }\n if (parsedSelves.updates.localAudioUnmuteRequiredByServer) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n LOCUSINFO.EVENTS.LOCAL_UNMUTE_REQUIRED,\n {\n muted: parsedSelves.current.remoteMuted,\n unmuteAllowed: parsedSelves.current.unmuteAllowed,\n }\n );\n }\n if (parsedSelves.updates.isMutedByOthersChanged) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n LOCUSINFO.EVENTS.SELF_REMOTE_MUTE_STATUS_UPDATED,\n {\n muted: parsedSelves.current.remoteMuted,\n unmuteAllowed: parsedSelves.current.unmuteAllowed,\n }\n );\n }\n if (parsedSelves.updates.localAudioUnmuteRequestedByServer) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n LOCUSINFO.EVENTS.LOCAL_UNMUTE_REQUESTED,\n {}\n );\n }\n if (parsedSelves.updates.hasUserEnteredLobby) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n LOCUSINFO.EVENTS.SELF_UNADMITTED_GUEST,\n self\n );\n }\n if (parsedSelves.updates.hasUserBeenAdmitted) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n LOCUSINFO.EVENTS.SELF_ADMITTED_GUEST,\n self\n );\n }\n\n if (parsedSelves.updates.isMediaInactive) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n // @ts-ignore\n LOCUSINFO.EVENTS.MEDIA_INACTIVITY,\n SelfUtils.getMediaStatus(self.mediaSessions)\n );\n }\n\n if (\n parsedSelves.updates.audioStateChange ||\n parsedSelves.updates.videoStateChange ||\n parsedSelves.updates.shareStateChange\n ) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n LOCUSINFO.EVENTS.MEDIA_STATUS_CHANGE,\n {\n audioStatus: parsedSelves.current.currentMediaStatus?.audio,\n videoStatus: parsedSelves.current.currentMediaStatus?.video,\n shareStatus: parsedSelves.current.currentMediaStatus?.share,\n }\n );\n }\n\n if (parsedSelves.updates.isUserObserving) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n LOCUSINFO.EVENTS.SELF_OBSERVING\n );\n }\n\n if (parsedSelves.updates.canNotViewTheParticipantListChanged) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n LOCUSINFO.EVENTS.SELF_CANNOT_VIEW_PARTICIPANT_LIST_CHANGE,\n {canNotViewTheParticipantList: parsedSelves.current.canNotViewTheParticipantList}\n );\n }\n\n if (parsedSelves.updates.isSharingBlockedChanged) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n LOCUSINFO.EVENTS.SELF_IS_SHARING_BLOCKED_CHANGE,\n {isSharingBlocked: parsedSelves.current.isSharingBlocked}\n );\n }\n\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n EVENTS.LOCUS_INFO_UPDATE_SELF,\n {\n oldSelf: parsedSelves.previous,\n newSelf: parsedSelves.current,\n }\n );\n this.parsedLocus.self = parsedSelves.current;\n // @ts-ignore\n this.self = self;\n } else {\n this.compareAndUpdateFlags.compareHostAndSelf = false;\n }\n }\n\n /**\n * handles when the locus.url is updated\n * @param {String} url\n * @param {Boolean} isMainLocus\n * @returns {undefined}\n * emits internal event locus_info_update_url\n */\n updateLocusUrl(url: string, isMainLocus = true) {\n if (url && this.url !== url) {\n this.url = url;\n this.updateMeeting({locusUrl: url});\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateLocusUrl',\n },\n EVENTS.LOCUS_INFO_UPDATE_URL,\n {url, isMainLocus}\n );\n }\n }\n\n /**\n * @param {String} aclUrl\n * @returns {undefined}\n * @memberof LocusInfo\n */\n updateAclUrl(aclUrl: string) {\n if (aclUrl && !isEqual(this.aclUrl, aclUrl)) {\n this.aclUrl = aclUrl;\n }\n }\n\n /**\n * @param {Number} baseSequence\n * @returns {undefined}\n * @memberof LocusInfo\n */\n updateBasequence(baseSequence: number) {\n if (baseSequence && !isEqual(this.baseSequence, baseSequence)) {\n this.baseSequence = baseSequence;\n }\n }\n\n /**\n * @param {Number} sequence\n * @returns {undefined}\n * @memberof LocusInfo\n */\n updateSequence(sequence: number) {\n if (sequence && !isEqual(this.sequence, sequence)) {\n this.sequence = sequence;\n }\n }\n\n /**\n * @param {Object} membership\n * @returns {undefined}\n * @memberof LocusInfo\n */\n updateMemberShip(membership: object) {\n if (membership && !isEqual(this.membership, membership)) {\n this.membership = membership;\n }\n }\n\n /**\n * @param {Array} identities\n * @returns {undefined}\n * @memberof LocusInfo\n */\n updateIdentifiers(identities: Array<any>) {\n if (identities && !isEqual(this.identities, identities)) {\n this.identities = identities;\n }\n }\n\n /**\n * check the locus is main session's one or not, if is main session's, update main session cache\n * @param {Object} locus\n * @returns {undefined}\n * @memberof LocusInfo\n */\n updateLocusCache(locus: any) {\n const isMainSessionDTO = ControlsUtils.isMainSessionDTO(locus);\n if (isMainSessionDTO) {\n this.updateMainSessionLocusCache(locus);\n }\n }\n\n /**\n * if return from breakout to main session, need to use cached main session DTO since locus won't send the full locus (participants)\n * if join breakout from main session, main session is not active for the attendee and remove main session locus cache\n * @param {Object} newLocus\n * @returns {Object}\n * @memberof LocusInfo\n */\n getTheLocusToUpdate(newLocus: any) {\n const switchStatus = ControlsUtils.getSessionSwitchStatus(this, newLocus);\n\n if (switchStatus.isReturnToMain && this.mainSessionLocusCache) {\n return cloneDeep(this.mainSessionLocusCache);\n }\n const isMainSessionDTO =\n this.mainSessionLocusCache && ControlsUtils.isMainSessionDTO(this.mainSessionLocusCache);\n\n if (isMainSessionDTO) {\n const isActive =\n [LOCUS.STATE.ACTIVE, LOCUS.STATE.INITIALIZING, LOCUS.STATE.TERMINATING].includes(\n this.fullState?.state\n ) && !this.mainSessionLocusCache?.self?.removed;\n\n if (!isActive) {\n this.clearMainSessionLocusCache();\n }\n }\n\n return newLocus;\n }\n\n /**\n * merge participants by participant id\n * @param {Array} participants\n * @param {Array} sourceParticipants\n * @returns {Array} merged participants\n * @memberof LocusInfo\n */\n // eslint-disable-next-line class-methods-use-this\n mergeParticipants(participants, sourceParticipants) {\n if (!sourceParticipants || !sourceParticipants.length) return participants;\n if (!participants || !participants.length) {\n return sourceParticipants;\n }\n sourceParticipants.forEach((participant) => {\n const existIndex = participants.findIndex((p) => p.id === participant.id);\n if (existIndex > -1) {\n participants.splice(existIndex, 1, participant);\n } else {\n participants.push(participant);\n }\n });\n\n return participants;\n }\n\n /**\n * need cache main sessions' participants since locus will not send the full list when cohost/host leave breakout\n * @param {Object} mainLocus\n * @returns {undefined}\n * @memberof LocusInfo\n */\n updateMainSessionLocusCache(mainLocus: any) {\n if (!mainLocus) {\n return;\n }\n const locusClone = cloneDeep(mainLocus);\n if (this.mainSessionLocusCache) {\n // shallow merge and do special merge for participants\n assignWith(this.mainSessionLocusCache, locusClone, (objValue, srcValue, key) => {\n if (key === 'participants') {\n return this.mergeParticipants(objValue, srcValue);\n }\n\n return srcValue || objValue;\n });\n } else {\n this.mainSessionLocusCache = locusClone;\n }\n }\n\n /**\n * clear main session cache\n * @returns {undefined}\n * @memberof LocusInfo\n */\n clearMainSessionLocusCache() {\n this.mainSessionLocusCache = null;\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,IAAAA,OAAA,GAAAC,OAAA;AAEA,IAAAC,YAAA,GAAAC,sBAAA,CAAAF,OAAA;AACA,IAAAG,YAAA,GAAAD,sBAAA,CAAAF,OAAA;AACA,IAAAI,UAAA,GAAAJ,OAAA;AAkBA,IAAAK,UAAA,GAAAH,sBAAA,CAAAF,OAAA;AACA,IAAAM,UAAA,GAAAJ,sBAAA,CAAAF,OAAA;AACA,IAAAO,UAAA,GAAAL,sBAAA,CAAAF,OAAA;AACA,IAAAQ,UAAA,GAAAN,sBAAA,CAAAF,OAAA;AACA,IAAAS,cAAA,GAAAP,sBAAA,CAAAF,OAAA;AACA,IAAAU,kBAAA,GAAAR,sBAAA,CAAAF,OAAA;AACA,IAAAW,iBAAA,GAAAT,sBAAA,CAAAF,OAAA;AACA,IAAAY,OAAA,GAAAV,sBAAA,CAAAF,OAAA;AACA,IAAAa,QAAA,GAAAX,sBAAA,CAAAF,OAAA;AACA,IAAAc,WAAA,GAAAZ,sBAAA,CAAAF,OAAA;AACA,IAAAe,eAAA,GAAAC,uBAAA,CAAAhB,OAAA;AAOA,IAAAiB,MAAA,GAAAjB,OAAA;AAAsE,SAAAgB,wBAAAE,CAAA,EAAAC,CAAA,6BAAAC,QAAA,MAAAC,CAAA,OAAAD,QAAA,IAAAE,CAAA,OAAAF,QAAA,YAAAJ,uBAAA,YAAAA,wBAAAE,CAAA,EAAAC,CAAA,SAAAA,CAAA,IAAAD,CAAA,IAAAA,CAAA,CAAAK,UAAA,SAAAL,CAAA,MAAAM,CAAA,EAAAC,CAAA,EAAAC,CAAA,KAAAC,SAAA,QAAAC,OAAA,EAAAV,CAAA,iBAAAA,CAAA,gBAAAW,OAAA,CAAAX,CAAA,0BAAAA,CAAA,SAAAQ,CAAA,MAAAF,CAAA,GAAAL,CAAA,GAAAG,CAAA,GAAAD,CAAA,QAAAG,CAAA,CAAAM,GAAA,CAAAZ,CAAA,UAAAM,CAAA,CAAAO,GAAA,CAAAb,CAAA,GAAAM,CAAA,CAAAQ,GAAA,CAAAd,CAAA,EAAAQ,CAAA,cAAAO,GAAA,IAAAf,CAAA,gBAAAe,GAAA,OAAAC,cAAA,CAAAC,IAAA,CAAAjB,CAAA,EAAAe,GAAA,OAAAR,CAAA,IAAAD,CAAA,GAAAY,sBAAA,KAAAC,gCAAA,CAAAnB,CAAA,EAAAe,GAAA,OAAAR,CAAA,CAAAM,GAAA,IAAAN,CAAA,CAAAO,GAAA,IAAAR,CAAA,CAAAE,CAAA,EAAAO,GAAA,EAAAR,CAAA,IAAAC,CAAA,CAAAO,GAAA,IAAAf,CAAA,CAAAe,GAAA,WAAAP,CAAA,KAAAR,CAAA,EAAAC,CAAA;AAAA,SAAAmB,2BAAAjB,CAAA,EAAAH,CAAA,QAAAC,CAAA,yBAAAoB,OAAA,IAAAlB,CAAA,CAAAmB,gBAAA,KAAAnB,CAAA,qBAAAF,CAAA,QAAAsB,eAAA,CAAApB,CAAA,MAAAF,CAAA,GAAAuB,2BAAA,CAAArB,CAAA,MAAAH,CAAA,IAAAG,CAAA,uBAAAA,CAAA,CAAAsB,MAAA,IAAAxB,CAAA,KAAAE,CAAA,GAAAF,CAAA,OAAAyB,EAAA,MAAAC,CAAA,YAAAA,EAAA,eAAAC,CAAA,EAAAD,CAAA,EAAAvB,CAAA,WAAAA,EAAA,WAAAsB,EAAA,IAAAvB,CAAA,CAAAsB,MAAA,KAAAI,IAAA,WAAAA,IAAA,MAAAC,KAAA,EAAA3B,CAAA,CAAAuB,EAAA,UAAA1B,CAAA,WAAAA,EAAAG,CAAA,UAAAA,CAAA,KAAAK,CAAA,EAAAmB,CAAA,gBAAAI,SAAA,iJAAAzB,CAAA,EAAA0B,CAAA,OAAAC,CAAA,gBAAAL,CAAA,WAAAA,EAAA,IAAA3B,CAAA,GAAAA,CAAA,CAAAgB,IAAA,CAAAd,CAAA,MAAAC,CAAA,WAAAA,EAAA,QAAAD,CAAA,GAAAF,CAAA,CAAAiC,IAAA,WAAAF,CAAA,GAAA7B,CAAA,CAAA0B,IAAA,EAAA1B,CAAA,KAAAH,CAAA,WAAAA,EAAAG,CAAA,IAAA8B,CAAA,OAAA3B,CAAA,GAAAH,CAAA,KAAAK,CAAA,WAAAA,EAAA,UAAAwB,CAAA,YAAA/B,CAAA,CAAAkC,MAAA,IAAAlC,CAAA,CAAAkC,MAAA,oBAAAF,CAAA,QAAA3B,CAAA;AAAA,SAAAkB,4BAAArB,CAAA,EAAA6B,CAAA,QAAA7B,CAAA,2BAAAA,CAAA,SAAAiC,iBAAA,CAAAjC,CAAA,EAAA6B,CAAA,OAAA/B,CAAA,MAAAoC,QAAA,CAAApB,IAAA,CAAAd,CAAA,EAAAmC,KAAA,6BAAArC,CAAA,IAAAE,CAAA,CAAAoC,WAAA,KAAAtC,CAAA,GAAAE,CAAA,CAAAoC,WAAA,CAAAC,IAAA,aAAAvC,CAAA,cAAAA,CAAA,GAAAwC,WAAA,CAAAtC,CAAA,oBAAAF,CAAA,+CAAAyC,IAAA,CAAAzC,CAAA,IAAAmC,iBAAA,CAAAjC,CAAA,EAAA6B,CAAA;AAAA,SAAAI,kBAAAjC,CAAA,EAAA6B,CAAA,aAAAA,CAAA,IAAAA,CAAA,GAAA7B,CAAA,CAAAsB,MAAA,MAAAO,CAAA,GAAA7B,CAAA,CAAAsB,MAAA,YAAAzB,CAAA,MAAAI,CAAA,GAAAuC,KAAA,CAAAX,CAAA,GAAAhC,CAAA,GAAAgC,CAAA,EAAAhC,CAAA,IAAAI,CAAA,CAAAJ,CAAA,IAAAG,CAAA,CAAAH,CAAA,UAAAI,CAAA;AAAA,SAAAwC,QAAA5C,CAAA,EAAAG,CAAA,QAAAF,CAAA,GAAA4C,YAAA,CAAA7C,CAAA,OAAA8C,6BAAA,QAAAxC,CAAA,GAAAwC,6BAAA,CAAA9C,CAAA,GAAAG,CAAA,KAAAG,CAAA,GAAAA,CAAA,CAAAyC,MAAA,WAAA5C,CAAA,WAAAgB,gCAAA,CAAAnB,CAAA,EAAAG,CAAA,EAAA6C,UAAA,OAAA/C,CAAA,CAAAgD,IAAA,CAAAC,KAAA,CAAAjD,CAAA,EAAAK,CAAA,YAAAL,CAAA;AAAA,SAAAkD,cAAAnD,CAAA,aAAAG,CAAA,MAAAA,CAAA,GAAAiD,SAAA,CAAA3B,MAAA,EAAAtB,CAAA,UAAAF,CAAA,WAAAmD,SAAA,CAAAjD,CAAA,IAAAiD,SAAA,CAAAjD,CAAA,QAAAA,CAAA,OAAAyC,OAAA,CAAAS,MAAA,CAAApD,CAAA,OAAAqD,OAAA,WAAAnD,CAAA,QAAAoD,gBAAA,CAAA7C,OAAA,EAAAV,CAAA,EAAAG,CAAA,EAAAF,CAAA,CAAAE,CAAA,SAAAqD,iCAAA,GAAAC,wBAAA,CAAAzD,CAAA,EAAAwD,iCAAA,CAAAvD,CAAA,KAAA2C,OAAA,CAAAS,MAAA,CAAApD,CAAA,GAAAqD,OAAA,WAAAnD,CAAA,IAAAe,sBAAA,CAAAlB,CAAA,EAAAG,CAAA,EAAAgB,gCAAA,CAAAlB,CAAA,EAAAE,CAAA,iBAAAH,CAAA;AAAA,SAAA0D,WAAAzD,CAAA,EAAAK,CAAA,EAAAN,CAAA,WAAAM,CAAA,OAAAqD,gBAAA,CAAAjD,OAAA,EAAAJ,CAAA,OAAAsD,2BAAA,CAAAlD,OAAA,EAAAT,CAAA,EAAA4D,yBAAA,KAAAC,kBAAA,CAAAxD,CAAA,EAAAN,CAAA,YAAA2D,gBAAA,CAAAjD,OAAA,EAAAT,CAAA,EAAAsC,WAAA,IAAAjC,CAAA,CAAA4C,KAAA,CAAAjD,CAAA,EAAAD,CAAA;AAAA,SAAA6D,0BAAA,cAAA5D,CAAA,IAAA8D,OAAA,CAAAC,SAAA,CAAAC,OAAA,CAAAhD,IAAA,CAAA6C,kBAAA,CAAAC,OAAA,iCAAA9D,CAAA,aAAA4D,yBAAA,YAAAA,0BAAA,aAAA5D,CAAA;AAUtE;AACA;AACA,IAAMiE,oBAAoB,GAAG,CAC3B,UAAU,EACV,WAAW,EACX,MAAM,EACN,MAAM,EACN,OAAO,EACP,aAAa,EACb,UAAU,EACV,cAAc,EACd,UAAU,EACV,MAAM,EACN,UAAU,EACV,SAAS,EACT,KAAK,EACL,QAAQ,CAAE;AAAA,CACX;AAOD,IAAMC,4BAA4B,GAAG;EACnCC,SAAS,EAAE,WAAW;EACtBC,OAAO,EAAE,SAAS;EAClBC,OAAO,EAAE;AACX,CAAU;AAIV;AACA;AACA;AACA;AACA;AACA;AALA,IAMqBC,SAAS,GAAAC,OAAA,CAAA9D,OAAA,0BAAA+D,YAAA;EAmC5B;AACF;AACA;AACA;AACA;AACA;AACA;EACE,SAAAF,UAAYG,aAAa,EAAEC,KAAK,EAAEC,SAAS,EAAE;IAAA,IAAAC,KAAA;IAAA,IAAAC,gBAAA,CAAApE,OAAA,QAAA6D,SAAA;IAC3CM,KAAA,GAAAnB,UAAA,OAAAa,SAAA;IAAQ,IAAAhB,gBAAA,CAAA7C,OAAA,EAAAmE,KAAA;IAAA,IAAAtB,gBAAA,CAAA7C,OAAA,EAAAmE,KAAA;IAAA,IAAAtB,gBAAA,CAAA7C,OAAA,EAAAmE,KAAA;IAAA,IAAAtB,gBAAA,CAAA7C,OAAA,EAAAmE,KAAA;IAAA,IAAAtB,gBAAA,CAAA7C,OAAA,EAAAmE,KAAA;IAAA,IAAAtB,gBAAA,CAAA7C,OAAA,EAAAmE,KAAA;IAAA,IAAAtB,gBAAA,CAAA7C,OAAA,EAAAmE,KAAA;IAAA,IAAAtB,gBAAA,CAAA7C,OAAA,EAAAmE,KAAA;IAAA,IAAAtB,gBAAA,CAAA7C,OAAA,EAAAmE,KAAA;IAAA,IAAAtB,gBAAA,CAAA7C,OAAA,EAAAmE,KAAA;IAAA,IAAAtB,gBAAA,CAAA7C,OAAA,EAAAmE,KAAA;IAAA,IAAAtB,gBAAA,CAAA7C,OAAA,EAAAmE,KAAA;IAAA,IAAAtB,gBAAA,CAAA7C,OAAA,EAAAmE,KAAA;IAAA,IAAAtB,gBAAA,CAAA7C,OAAA,EAAAmE,KAAA;IAAA,IAAAtB,gBAAA,CAAA7C,OAAA,EAAAmE,KAAA;IAAA,IAAAtB,gBAAA,CAAA7C,OAAA,EAAAmE,KAAA;IAAA,IAAAtB,gBAAA,CAAA7C,OAAA,EAAAmE,KAAA;IAAA,IAAAtB,gBAAA,CAAA7C,OAAA,EAAAmE,KAAA;IAAA,IAAAtB,gBAAA,CAAA7C,OAAA,EAAAmE,KAAA;IAAA,IAAAtB,gBAAA,CAAA7C,OAAA,EAAAmE,KAAA;IAAA,IAAAtB,gBAAA,CAAA7C,OAAA,EAAAmE,KAAA;IAAA,IAAAtB,gBAAA,CAAA7C,OAAA,EAAAmE,KAAA;IAAA,IAAAtB,gBAAA,CAAA7C,OAAA,EAAAmE,KAAA;IAAA,IAAAtB,gBAAA,CAAA7C,OAAA,EAAAmE,KAAA;IAAA,IAAAtB,gBAAA,CAAA7C,OAAA,EAAAmE,KAAA;IAAA,IAAAtB,gBAAA,CAAA7C,OAAA,EAAAmE,KAAA;IAAA,IAAAtB,gBAAA,CAAA7C,OAAA,EAAAmE,KAAA;IAAA,IAAAtB,gBAAA,CAAA7C,OAAA,EAAAmE,KAAA;IAAA,IAAAtB,gBAAA,CAAA7C,OAAA,EAAAmE,KAAA;IAAA,IAAAtB,gBAAA,CAAA7C,OAAA,EAAAmE,KAAA;IAAA,IAAAtB,gBAAA,CAAA7C,OAAA,EAAAmE,KAAA;IAAA,IAAAtB,gBAAA,CAAA7C,OAAA,EAAAmE,KAAA;IAX2C;IAAA,IAAAtB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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["_lodash","require","_loggerProxy","_interopRequireDefault","_eventsScope","_constants","_infoUtils","_fullState","_selfUtils","_hostUtils","_controlsUtils","_embeddedAppsUtils","_mediaSharesUtils","_parser","_metrics","_constants2","_hashTreeParser","_interopRequireWildcard","_types","e","t","_WeakMap","r","n","__esModule","o","i","f","__proto__","default","_typeof","has","get","set","_t2","hasOwnProperty","call","_Object$defineProperty","_Object$getOwnPropertyDescriptor","_createForOfIteratorHelper","_Symbol","_Symbol$iterator","_Array$isArray2","_unsupportedIterableToArray","length","_n","F","s","done","value","TypeError","a","u","next","return","_arrayLikeToArray","toString","slice","constructor","name","_Array$from","test","Array","ownKeys","_Object$keys","_Object$getOwnPropertySymbols","filter","enumerable","push","apply","_objectSpread","arguments","Object","forEach","_defineProperty2","_Object$getOwnPropertyDescriptors","_Object$defineProperties","_callSuper","_getPrototypeOf2","_possibleConstructorReturn2","_isNativeReflectConstruct","_Reflect$construct","Boolean","prototype","valueOf","LocusDtoTopLevelKeys","LocusObjectStateAfterUpdates","unchanged","removed","updated","LocusInfo","exports","_EventsScope","updateMeeting","webex","meetingId","_this","_classCallCheck2","parsedLocus","states","emitChange","compareAndUpdateFlags","locusParser","LocusDeltaParser","hashTreeObjectId2ParticipantId","_map","_inherits2","_createClass2","key","doLocusSync","meeting","isLocusUrlChanged","locus","_this$locusParser$wor","_this2","url","isDelta","meetingDestroyed","workingCopy","syncUrl","locusUrl","LoggerProxy","logger","info","concat","meetingRequest","getLocusDTO","catch","Metrics","sendBehavioralMetric","BEHAVIORAL_METRICS","LOCUS_DELTA_SYNC_FAILED","correlationId","reason","message","errorName","stack","code","statusCode","err","meetings","destroy","MEETING_REMOVED_REASON","LOCUS_DTO_SYNC_FAILED","then","res","isEmpty","body","baseSequence","locusInfo","handleLocusDelta","onFullLocus","LOCUS_SYNC_HANDLING_FAILED","finally","resume","applyLocusDeltaData","action","_LocusDeltaParser$loc","loci","DESYNC","USE_CURRENT","USE_INCOMING","WAIT","LOCUS_URL_CHANGED","onDeltaLocus","_this3","onDeltaAction","parsedLoci","onDeltaEvent","init","undefined","created","scheduledMeeting","replaces","aclUrl","sequence","participants","updateLocusCache","updateParticipants","updateConversationUrl","conversationUrl","updateControls","controls","self","updateLocusUrl","ControlsUtils","isMainSessionDTO","updateFullState","fullState","updateMeetingInfo","updateEmbeddedApps","embeddedApps","updateSelf","updateHostInfo","host","updateMediaShares","mediaShares","updateLinks","links","createHashTreeParser","_ref","initialLocus","HashTreeParser","webexRequest","request","bind","locusInfoUpdateCallback","updateFromHashTree","debugId","substring","_initialSetup","_asyncToGenerator2","_regenerator","mark","_callee","data","_data$locus","_data$locus$links","_data$locus$links$res","_data$locus$links$res2","_data$hashTreeMessage","_selfObject$data","selfObject","_data$locus2","_data$locus2$self","_t","wrap","_context","prev","trigger","hashTreeMessage","locusStateElements","find","el","isSelf","visibleDataSets","warn","Error","hashTreeParser","dataSets","initializeFromMessage","abrupt","resources","initializeFromGetLociResponse","stop","initialSetup","_x","handleLocusAPIResponse","responseBody","sendClassicVsHashTreeMismatchMetric","handleLocusUpdate","updateLocusFromHashTreeObject","object","_this4","type","htMeta","elementId","toLowerCase","addParticipantObject","obj","id","ObjectType","version","locusObjectFromData","_values","ObjectTypeToLocusKeyMap","locusDtoKey","mediaShare","_object$data$floor","_object$data$floor2","_object$data$floor2$b","_locus$mediaShares","floor","disposition","beneficiary","existingMediaShare","ms","_assign","_locus$mediaShares2","participant","participantId","jsSdkMeta","removedParticipantIds","delete","_locus$info","_object$data$controls","_object$data$controls2","_object$data$controls3","isWebinar","role","roles","SELF_ROLES","ATTENDEE","hasRole","classicVsHashTreeMismatchMetricCounter","LOCUS_CLASSIC_VS_HASH_TREE_MISMATCH","handleHashTreeMessage","eventType","LOCUSEVENT","HASH_TREE_DATA_UPDATED","handleMessage","updateType","_this5","LocusInfoUpdateType","OBJECTS_UPDATED","locusObjectStateAfterUpdates","updatedObjects","_object$data","LOCUS_HASH_TREE_UNSUPPORTED_OPERATION","cloneDeep","_stringify","map","hasData","MEETING_ENDED","meetingCollection","SELF_REMOVED","parse","stateElementsMessage","getTheLocusToUpdate","PARTICIPANT_JOIN","PARTICIPANT_LEFT","CONTROLS_UPDATED","PARTICIPANT_AUDIO_MUTED","PARTICIPANT_AUDIO_UNMUTED","PARTICIPANT_VIDEO_MUTED","PARTICIPANT_VIDEO_UNMUTED","SELF_CHANGED","PARTICIPANT_UPDATED","PARTICIPANT_CONTROLS_UPDATED","PARTICIPANT_ROLES_UPDATED","PARTICIPANT_DECLINED","FLOOR_GRANTED","FLOOR_RELEASED","DIFFERENCE","emitScoped","scope","eventName","args","emit","onFullLocusWithHashTrees","onFullLocusCommon","onFullLocusClassic","isNewFullLocus","error","_this$participants","_this6","_locus$jsSdkMeta","_participant$htMeta","isReplaceMembers","isNeedReplaceMembers","updateLocusInfo","isMeetingActive","handleOneOnOneEvent","_CALL_","_SIP_BRIDGE_","file","function","EVENTS","REMOTE_RESPONSE","remoteDeclined","remoteAnswered","_locus$jsSdkMeta2","mergeParticipants","_locus$self","_locus$self2","state","updateCreated","updateReplaces","updateAclUrl","updateBasequence","updateSequence","compareAndUpdate","getLocusPartner","identity","_USER_","partner","_SPACE_SHARE_","LOCUS","STATE","INACTIVE","internal","newMetrics","submitClientEvent","options","DESTROY_MEETING","CALL_REMOVED_REASON","CALL_INACTIVE","shouldLeave","MEETING_STATE","STATES","LEFT","DECLINED","NOTIFIED","JOINED","PARTNER_LEFT","joinedWith","_LEFT_","IDLE","SELF_LEFT","_MEETING_","TERMINATING","MEETING_INACTIVE_TERMINATING","FULLSTATE_REMOVED","compareSelfAndHost","compareHostAndSelf","_this$parsedLocus$hos","selfIdentity","hostId","moderator","LOCUS_INFO_CAN_ASSIGN_HOST","canAssignHost","isReplace","_this$parsedLocus$con","LOCUS_INFO_UPDATE_PARTICIPANTS","recordingId","record","modifiedBy","selfId","_isArray","_iterator","_step","_participant$person","LOCUSINFO","PARTICIPANT_REASON_CHANGED","displayName","person","primaryDisplayString","isEqual","_ControlsUtils$getCon","getControls","_ControlsUtils$getCon2","updates","hasRecordingChanged","hasRecordingPausedChanged","hasMeetingContainerChanged","hasTranscribeChanged","hasTranscribeSpokenLanguageChanged","hasManualCaptionChanged","hasEntryExitToneChanged","hasBreakoutChanged","hasVideoEnabledChanged","hasMuteOnEntryChanged","hasShareControlChanged","hasDisallowUnmuteChanged","hasReactionsChanged","hasReactionDisplayNamesChanged","hasViewTheParticipantListChanged","hasRaiseHandChanged","hasVideoChanged","hasInterpretationChanged","hasWebcastChanged","hasMeetingFullChanged","hasPracticeSessionEnabledChanged","hasStageViewChanged","hasAnnotationControlChanged","hasRemoteDesktopControlChanged","hasPollingQAControlChanged","hasAutoEndMeetingChanged","current","CONTROLS_MUTE_ON_ENTRY_CHANGED","muteOnEntry","CONTROLS_SHARE_CONTROL_CHANGED","shareControl","CONTROLS_DISALLOW_UNMUTE_CHANGED","disallowUnmute","CONTROLS_REACTIONS_CHANGED","reactions","CONTROLS_VIEW_THE_PARTICIPANTS_LIST_CHANGED","viewTheParticipantList","CONTROLS_RAISE_HAND_CHANGED","raiseHand","CONTROLS_VIDEO_CHANGED","video","paused","RECORDING_STATE","PAUSED","recording","RESUMED","RECORDING","CONTROLS_RECORDING_UPDATED","lastModified","meetingContainerUrl","meetingContainer","CONTROLS_MEETING_CONTAINER_UPDATED","_current$transcribe","transcribe","transcribing","caption","CONTROLS_MEETING_TRANSCRIBE_UPDATED","spokenLanguage","CONTROLS_MEETING_TRANSCRIPTION_SPOKEN_LANGUAGE_UPDATED","enabled","manualCaptionControl","CONTROLS_MEETING_MANUAL_CAPTION_UPDATED","breakout","breakoutMoveId","SelfUtils","getReplacedBreakoutMoveId","device","CONTROLS_MEETING_BREAKOUT_UPDATED","interpretation","CONTROLS_MEETING_INTERPRETATION_UPDATED","entryExitTone","CONTROLS_ENTRY_EXIT_TONE_UPDATED","videoEnabled","unmuteVideoAllowed","SELF_REMOTE_VIDEO_MUTE_STATUS_UPDATED","unmuteAllowed","CONTROLS_WEBCAST_CHANGED","webcastControl","CONTROLS_MEETING_FULL_CHANGED","meetingFull","CONTROLS_PRACTICE_SESSION_STATUS_UPDATED","practiceSession","CONTROLS_STAGE_VIEW_UPDATED","videoLayout","CONTROLS_ANNOTATION_CHANGED","annotationControl","CONTROLS_REMOTE_DESKTOP_CONTROL_CHANGED","rdcControl","CONTROLS_POLLING_QA_CHANGED","pollingQAControl","CONTROLS_AUTO_END_MEETING_WARNING_CHANGED","autoEndMeetingWarning","_this$links","_this$links2","_ref2","services","LINKS_SERVICES","LINKS_RESOURCES","result","FullState","getFullState","meetingStateChangedTo","FULL_STATE_MEETING_STATE_CHANGE","previousState","previous","meetingState","currentState","meetingTypeChangedTo","FULL_STATE_TYPE_UPDATE","parsedHosts","HostUtils","getHosts","isNewHost","LOCUS_INFO_UPDATE_HOST","newHost","oldHost","_this$parsedLocus$sel","getRoles","isJoined","parsedInfo","InfoUtils","getInfos","isLocked","MEETING_LOCKED","isUnlocked","MEETING_UNLOCKED","MEETING_INFO_UPDATED","isInitializing","EmbeddedAppsUtils","areSimilar","parsedEmbeddedApps","EMBEDDED_APPS_UPDATED","forceUpdate","parsedMediaShares","MediaSharesUtils","getMediaShares","LOCUS_INFO_UPDATE_MEDIA_SHARES","parsedSelves","getSelves","element","getSipUrl","sipUri","moderatorChanged","layoutChanged","CONTROLS_MEETING_LAYOUT_UPDATED","layout","breakoutsChanged","SELF_MEETING_BREAKOUTS_CHANGED","breakoutSessions","brbChanged","SELF_MEETING_BRB_CHANGED","brb","interpretationChanged","SELF_MEETING_INTERPRETATION_CHANGED","selfParticipantId","isMediaInactiveOrReleased","DISCONNECT_DUE_TO_INACTIVITY","SELF_MODERATOR_CHANGED","isRolesChanged","_parsedSelves$previou","_parsedSelves$current","SELF_ROLES_CHANGED","oldRoles","newRoles","isVideoMutedByOthersChanged","muted","remoteVideoMuted","localAudioUnmuteRequiredByServer","LOCAL_UNMUTE_REQUIRED","remoteMuted","isMutedByOthersChanged","SELF_REMOTE_MUTE_STATUS_UPDATED","localAudioUnmuteRequestedByServer","LOCAL_UNMUTE_REQUESTED","hasUserEnteredLobby","SELF_UNADMITTED_GUEST","hasUserBeenAdmitted","SELF_ADMITTED_GUEST","isMediaInactive","MEDIA_INACTIVITY","getMediaStatus","mediaSessions","audioStateChange","videoStateChange","shareStateChange","_parsedSelves$current2","_parsedSelves$current3","_parsedSelves$current4","MEDIA_STATUS_CHANGE","audioStatus","currentMediaStatus","audio","videoStatus","shareStatus","share","isUserObserving","SELF_OBSERVING","canNotViewTheParticipantListChanged","SELF_CANNOT_VIEW_PARTICIPANT_LIST_CHANGE","canNotViewTheParticipantList","isSharingBlockedChanged","SELF_IS_SHARING_BLOCKED_CHANGE","isSharingBlocked","LOCUS_INFO_UPDATE_SELF","oldSelf","newSelf","isMainLocus","LOCUS_INFO_UPDATE_URL","updateMainSessionLocusCache","newLocus","switchStatus","getSessionSwitchStatus","isReturnToMain","mainSessionLocusCache","_this$fullState","_this$mainSessionLocu","_this$mainSessionLocu2","isActive","ACTIVE","INITIALIZING","includes","clearMainSessionLocusCache","sourceParticipants","existIndex","findIndex","p","splice","mainLocus","_this7","locusClone","assignWith","objValue","srcValue","EventsScope"],"sources":["index.ts"],"sourcesContent":["import {isEqual, assignWith, cloneDeep, isEmpty} from 'lodash';\n\nimport LoggerProxy from '../common/logs/logger-proxy';\nimport EventsScope from '../common/events/events-scope';\nimport {\n EVENTS,\n LOCUSEVENT,\n _USER_,\n _CALL_,\n _SIP_BRIDGE_,\n MEETING_STATE,\n _MEETING_,\n _SPACE_SHARE_,\n LOCUSINFO,\n LOCUS,\n _LEFT_,\n MEETING_REMOVED_REASON,\n CALL_REMOVED_REASON,\n RECORDING_STATE,\n Enum,\n SELF_ROLES,\n} from '../constants';\n\nimport InfoUtils from './infoUtils';\nimport FullState from './fullState';\nimport SelfUtils from './selfUtils';\nimport HostUtils from './hostUtils';\nimport ControlsUtils from './controlsUtils';\nimport EmbeddedAppsUtils from './embeddedAppsUtils';\nimport MediaSharesUtils from './mediaSharesUtils';\nimport LocusDeltaParser from './parser';\nimport Metrics from '../metrics';\nimport BEHAVIORAL_METRICS from '../metrics/constants';\nimport HashTreeParser, {\n DataSet,\n HashTreeMessage,\n HashTreeObject,\n isSelf,\n LocusInfoUpdateType,\n} from '../hashTree/hashTreeParser';\nimport {ObjectType, ObjectTypeToLocusKeyMap} from '../hashTree/types';\nimport {Links, LocusDTO, LocusFullState} from './types';\n\nexport type LocusLLMEvent = {\n data: {\n eventType: typeof LOCUSEVENT.HASH_TREE_DATA_UPDATED;\n stateElementsMessage: HashTreeMessage;\n };\n};\n\n// list of top level keys in Locus DTO relevant for Hash Tree DTOs processing\n// it does not contain fields specific to classic Locus DTOs like sequence or baseSequence\nconst LocusDtoTopLevelKeys = [\n 'controls',\n 'fullState',\n 'host',\n 'info',\n 'links',\n 'mediaShares',\n 'meetings',\n 'participants',\n 'replaces',\n 'self',\n 'sequence',\n 'syncUrl',\n 'url',\n 'htMeta', // only exists when hash trees are used\n];\n\nexport type LocusApiResponseBody = {\n dataSets?: DataSet[];\n locus: LocusDTO; // this LocusDTO here might not be the full one (for example it won't have all the participants, but it should have self)\n};\n\nconst LocusObjectStateAfterUpdates = {\n unchanged: 'unchanged',\n removed: 'removed',\n updated: 'updated',\n} as const;\n\ntype LocusObjectStateAfterUpdates = Enum<typeof LocusObjectStateAfterUpdates>;\n\n/**\n * @description LocusInfo extends ChildEmitter to convert locusInfo info a private emitter to parent object\n * @export\n * @private\n * @class LocusInfo\n */\nexport default class LocusInfo extends EventsScope {\n compareAndUpdateFlags: any;\n emitChange: any;\n locusParser: any;\n meetingId: any;\n parsedLocus: any;\n updateMeeting: any;\n webex: any;\n aclUrl: any;\n baseSequence: any;\n created: any;\n participants: any;\n replaces: any;\n scheduledMeeting: any;\n sequence: any;\n controls: any;\n conversationUrl: any;\n embeddedApps: any;\n fullState: any;\n host: any;\n info: any;\n roles: any;\n mediaShares: any;\n url: any;\n links?: Links;\n mainSessionLocusCache: any;\n self: any;\n hashTreeParser?: HashTreeParser;\n hashTreeObjectId2ParticipantId: Map<number, string>; // mapping of hash tree object ids to participant ids\n classicVsHashTreeMismatchMetricCounter = 0;\n\n /**\n * Constructor\n * @param {function} updateMeeting callback to update the meeting object from an object\n * @param {object} webex\n * @param {string} meetingId\n * @returns {undefined}\n */\n constructor(updateMeeting, webex, meetingId) {\n super();\n this.parsedLocus = {\n states: [],\n };\n this.webex = webex;\n this.emitChange = false;\n this.compareAndUpdateFlags = {};\n this.meetingId = meetingId;\n this.updateMeeting = updateMeeting;\n this.locusParser = new LocusDeltaParser();\n this.hashTreeObjectId2ParticipantId = new Map();\n }\n\n /**\n * Does a Locus sync. It tries to get the latest delta DTO or if it can't, it falls back to getting the full Locus DTO.\n * WARNING: This function must not be used for hash tree based Locus meetings.\n *\n * @param {Meeting} meeting\n * @param {boolean} isLocusUrlChanged\n * @param {Locus} locus\n * @returns {undefined}\n */\n private doLocusSync(meeting: any, isLocusUrlChanged: boolean, locus: any) {\n let url;\n let isDelta = false;\n let meetingDestroyed = false;\n\n if (isLocusUrlChanged) {\n // for the locus url changed case from breakout to main session, we should always do a full sync, in this case, the url from locus is always on main session,\n // so use the main session locus url to get the full locus(full participants list in the response).\n // for the locus url changed case from main session to breakout, we don't need to care about it here,\n // because it is a USE_INCOMING case, it will not be executed here.\n url = locus.url;\n } else if (this.locusParser.workingCopy?.syncUrl) {\n url = this.locusParser.workingCopy.syncUrl;\n isDelta = true;\n } else {\n url = meeting.locusUrl;\n }\n\n LoggerProxy.logger.info(\n `Locus-info:index#doLocusSync --> doing Locus sync (getting ${\n isDelta ? 'delta' : 'full'\n } DTO)`\n );\n\n // return value ignored on purpose\n meeting.meetingRequest\n .getLocusDTO({url})\n .catch((e) => {\n if (isDelta) {\n LoggerProxy.logger.info(\n 'Locus-info:index#doLocusSync --> delta sync failed, falling back to full sync'\n );\n\n Metrics.sendBehavioralMetric(BEHAVIORAL_METRICS.LOCUS_DELTA_SYNC_FAILED, {\n correlationId: meeting.correlationId,\n url,\n reason: e.message,\n errorName: e.name,\n stack: e.stack,\n code: e.code,\n });\n\n isDelta = false;\n\n // Locus sometimes returns 403, for example if meeting has ended, no point trying the fallback to full sync in that case\n if (e.statusCode !== 403) {\n return meeting.meetingRequest.getLocusDTO({url: meeting.locusUrl}).catch((err) => {\n LoggerProxy.logger.info(\n 'Locus-info:index#doLocusSync --> fallback full sync failed, destroying the meeting'\n );\n this.webex.meetings.destroy(meeting, MEETING_REMOVED_REASON.LOCUS_DTO_SYNC_FAILED);\n meetingDestroyed = true;\n throw err;\n });\n }\n LoggerProxy.logger.info(\n 'Locus-info:index#doLocusSync --> got 403 from Locus, skipping fallback to full sync, destroying the meeting'\n );\n } else {\n LoggerProxy.logger.info(\n 'Locus-info:index#doLocusSync --> fallback full sync failed, destroying the meeting'\n );\n }\n this.webex.meetings.destroy(meeting, MEETING_REMOVED_REASON.LOCUS_DTO_SYNC_FAILED);\n meetingDestroyed = true;\n throw e;\n })\n .then((res) => {\n if (isEmpty(res.body)) {\n if (isDelta) {\n LoggerProxy.logger.info(\n 'Locus-info:index#doLocusSync --> received empty body from syncUrl, so we already have latest Locus DTO'\n );\n } else {\n LoggerProxy.logger.info(\n 'Locus-info:index#doLocusSync --> received empty body from full DTO sync request'\n );\n }\n\n return;\n }\n\n if (isDelta) {\n if (res.body.baseSequence) {\n meeting.locusInfo.handleLocusDelta(res.body, meeting);\n\n return;\n }\n // in some cases Locus might return us full DTO even when we asked for a delta\n LoggerProxy.logger.info(\n 'Locus-info:index#doLocusSync --> got full DTO when we asked for delta'\n );\n }\n meeting.locusInfo.onFullLocus(res.body);\n })\n .catch((e) => {\n LoggerProxy.logger.info(\n `Locus-info:index#doLocusSync --> getLocusDTO succeeded but failed to handle result, locus parser will resume but not all data may be synced (${e.toString()})`\n );\n\n Metrics.sendBehavioralMetric(BEHAVIORAL_METRICS.LOCUS_SYNC_HANDLING_FAILED, {\n correlationId: meeting.correlationId,\n url,\n reason: e.message,\n errorName: e.name,\n stack: e.stack,\n code: e.code,\n });\n })\n .finally(() => {\n if (!meetingDestroyed) {\n // Notify parser to resume processing delta events.\n // Any deltas in the queue that have now been superseded by this sync will simply be ignored\n this.locusParser.resume();\n }\n });\n }\n\n /**\n * Apply locus delta data to meeting\n * @param {string} action Locus delta action\n * @param {Locus} locus\n * @param {Meeting} meeting\n * @returns {undefined}\n */\n applyLocusDeltaData(action: string, locus: any, meeting: any) {\n const {DESYNC, USE_CURRENT, USE_INCOMING, WAIT, LOCUS_URL_CHANGED} = LocusDeltaParser.loci;\n const isLocusUrlChanged = action === LOCUS_URL_CHANGED;\n\n switch (action) {\n case USE_INCOMING:\n meeting.locusInfo.onDeltaLocus(locus);\n break;\n case USE_CURRENT:\n case WAIT:\n // do nothing\n break;\n case DESYNC:\n case LOCUS_URL_CHANGED:\n this.doLocusSync(meeting, isLocusUrlChanged, locus);\n break;\n default:\n LoggerProxy.logger.info(\n `Locus-info:index#applyLocusDeltaData --> Unknown locus delta action: ${action}`\n );\n }\n }\n\n /**\n * Adds locus delta to parser's queue\n * and registers a function handler\n * to recieve parsed actions from queue.\n * @param {Locus} locus\n * @param {Meeting} meeting\n * @returns {undefined}\n */\n handleLocusDelta(locus: any, meeting: any) {\n // register a function to process delta actions\n if (!this.locusParser.onDeltaAction) {\n // delta action, along with associated loci\n // is passed into the function.\n this.locusParser.onDeltaAction = (action, parsedLoci) => {\n this.applyLocusDeltaData(action, parsedLoci, meeting);\n };\n }\n // queue delta event with parser\n this.locusParser.onDeltaEvent(locus);\n }\n\n /**\n * @param {Locus} locus\n * @returns {undefined}\n * @memberof LocusInfo\n */\n init(locus: any = {}) {\n this.created = locus.created || null;\n this.scheduledMeeting = locus.meeting || null;\n this.replaces = locus.replaces || null;\n this.aclUrl = locus.aclUrl || null;\n this.baseSequence = locus.baseSequence || null;\n this.sequence = locus.sequence || null;\n this.participants = locus.participants || null;\n\n /**\n * Stores the delta values for a changed participant.\n *\n * @typedef {Object} DeltaParticipant\n * @property {Record<string, boolean>} delta - Contains changed streams.\n * @property {Object} person - Contains person data.\n */\n\n this.updateLocusCache(locus);\n // above section only updates the locusInfo object\n // The below section makes sure it updates the locusInfo as well as updates the meeting object\n this.updateParticipants(locus.participants, []);\n // For 1:1 space meeting the conversation Url does not exist in locus.conversation\n this.updateConversationUrl(locus.conversationUrl, locus.info);\n this.updateControls(locus.controls, locus.self);\n this.updateLocusUrl(locus.url, ControlsUtils.isMainSessionDTO(locus));\n this.updateFullState(locus.fullState);\n this.updateMeetingInfo(locus.info);\n this.updateEmbeddedApps(locus.embeddedApps);\n // self and participants generate sipUrl for 1:1 meeting\n this.updateSelf(locus.self);\n this.updateHostInfo(locus.host);\n this.updateMediaShares(locus.mediaShares);\n this.updateLinks(locus.links);\n }\n\n /**\n * Creates the HashTreeParser instance.\n * @param {Object} initial locus data\n * @returns {void}\n */\n private createHashTreeParser({\n initialLocus,\n }: {\n initialLocus: {\n dataSets: Array<DataSet>;\n locus: any;\n };\n }) {\n return new HashTreeParser({\n initialLocus,\n webexRequest: this.webex.request.bind(this.webex),\n locusInfoUpdateCallback: this.updateFromHashTree.bind(this),\n debugId: `HT-${this.meetingId.substring(0, 4)}`,\n });\n }\n\n /**\n * @param {Object} data - data to initialize locus info with. It may be from a join or GET /loci response or from a Mercury event that triggers a creation of meeting object\n * @returns {undefined}\n * @memberof LocusInfo\n */\n async initialSetup(\n data:\n | {\n trigger: 'join-response';\n locus: LocusDTO;\n dataSets?: DataSet[];\n }\n | {\n trigger: 'locus-message';\n locus?: LocusDTO;\n hashTreeMessage?: HashTreeMessage;\n }\n | {\n trigger: 'get-loci-response';\n locus?: LocusDTO;\n }\n ) {\n switch (data.trigger) {\n case 'locus-message':\n if (data.hashTreeMessage) {\n // we need the SELF object to be in the received message, because it contains visibleDataSets\n // and these are needed to initialize all the hash trees\n const selfObject = data.hashTreeMessage.locusStateElements?.find((el) => isSelf(el));\n\n if (!selfObject?.data?.visibleDataSets) {\n LoggerProxy.logger.warn(\n `Locus-info:index#initialSetup --> cannot initialize HashTreeParser, SELF object with visibleDataSets is missing in the message`\n );\n\n throw new Error('SELF object with visibleDataSets is missing in the message');\n }\n\n LoggerProxy.logger.info(\n 'Locus-info:index#initialSetup --> creating HashTreeParser from message'\n );\n // first create the HashTreeParser, but don't initialize it with any data yet\n // pass just a fake locus that contains only the visibleDataSets\n this.hashTreeParser = this.createHashTreeParser({\n initialLocus: {\n locus: {self: {visibleDataSets: selfObject.data.visibleDataSets}},\n dataSets: [], // empty, because they will be populated in initializeFromMessage() call // dataSets: data.hashTreeMessage.dataSets,\n },\n });\n\n // now handle the message - that should populate all the visible datasets\n await this.hashTreeParser.initializeFromMessage(data.hashTreeMessage);\n } else {\n // \"classic\" Locus case, no hash trees involved\n this.updateLocusCache(data.locus);\n this.onFullLocus(data.locus, undefined);\n }\n break;\n case 'join-response':\n this.updateLocusCache(data.locus);\n this.onFullLocus(data.locus, undefined, data.dataSets);\n break;\n case 'get-loci-response':\n if (data.locus?.links?.resources?.visibleDataSets?.url) {\n LoggerProxy.logger.info(\n 'Locus-info:index#initialSetup --> creating HashTreeParser from get-loci-response'\n );\n // first create the HashTreeParser, but don't initialize it with any data yet\n // pass just a fake locus that contains only the visibleDataSets\n this.hashTreeParser = this.createHashTreeParser({\n initialLocus: {\n locus: {self: {visibleDataSets: data.locus?.self?.visibleDataSets}},\n dataSets: [], // empty, because we don't have them yet\n },\n });\n\n // now initialize all the data\n await this.hashTreeParser.initializeFromGetLociResponse(data.locus);\n } else {\n // \"classic\" Locus case, no hash trees involved\n this.updateLocusCache(data.locus);\n this.onFullLocus(data.locus, undefined);\n }\n }\n // Change it to true after it receives it first locus object\n this.emitChange = true;\n }\n\n /**\n * Handles HTTP response from Locus API call.\n * @param {Meeting} meeting meeting object\n * @param {LocusApiResponseBody} responseBody body of the http response from Locus API call\n * @returns {void}\n */\n handleLocusAPIResponse(meeting, responseBody: LocusApiResponseBody): void {\n if (this.hashTreeParser) {\n if (!responseBody.dataSets) {\n this.sendClassicVsHashTreeMismatchMetric(\n meeting,\n `expected hash tree dataSets in API response but they are missing`\n );\n // continuing as we can still manage without responseBody.dataSets, but this is very suspicious\n }\n LoggerProxy.logger.info(\n 'Locus-info:index#handleLocusAPIResponse --> passing Locus API response to HashTreeParser: ',\n responseBody\n );\n // update the data in our hash trees\n this.hashTreeParser.handleLocusUpdate(responseBody);\n } else {\n if (responseBody.dataSets) {\n this.sendClassicVsHashTreeMismatchMetric(\n meeting,\n `unexpected hash tree dataSets in API response`\n );\n }\n // classic Locus delta\n this.handleLocusDelta(responseBody.locus, meeting);\n }\n }\n\n /**\n *\n * @param {HashTreeObject} object data set object\n * @param {any} locus\n * @returns {void}\n */\n updateLocusFromHashTreeObject(object: HashTreeObject, locus: LocusDTO): LocusDTO {\n const type = object.htMeta.elementId.type.toLowerCase();\n\n const addParticipantObject = (obj: HashTreeObject) => {\n if (!locus.participants) {\n locus.participants = [];\n }\n locus.participants.push(obj.data);\n this.hashTreeObjectId2ParticipantId.set(obj.htMeta.elementId.id, obj.data.id);\n };\n\n switch (type) {\n case ObjectType.locus: {\n if (!object.data) {\n // not doing anything here, as we need Locus to always be there (at least some fields)\n // and that's already taken care of in updateFromHashTree()\n LoggerProxy.logger.info(\n `Locus-info:index#updateLocusFromHashTreeObject --> LOCUS object removed, version=${object.htMeta.elementId.version}`\n );\n\n return locus;\n }\n // replace the main locus\n\n // The Locus object we receive from backend has empty participants array,\n // and may have (although it shouldn't) other fields that are managed by other ObjectTypes\n // like \"fullState\" or \"info\", so we're making sure to delete them here\n const locusObjectFromData = object.data;\n\n Object.values(ObjectTypeToLocusKeyMap).forEach((locusDtoKey) => {\n delete locusObjectFromData[locusDtoKey];\n });\n\n locus = {...locus, ...locusObjectFromData};\n LoggerProxy.logger.info(\n `Locus-info:index#updateLocusFromHashTreeObject --> LOCUS object updated to version=${object.htMeta.elementId.version}`\n );\n break;\n }\n case ObjectType.mediaShare:\n if (object.data) {\n LoggerProxy.logger.info(\n `Locus-info:index#updateLocusFromHashTreeObject --> mediaShare id=${\n object.htMeta.elementId.id\n } name='${object.data.name}' updated ${\n object.data.name === 'content'\n ? `floor=${object.data.floor?.disposition}, ${object.data.floor?.beneficiary?.id}`\n : ''\n } version=${object.htMeta.elementId.version}`\n );\n const existingMediaShare = locus.mediaShares?.find(\n (ms) => ms.htMeta.elementId.id === object.htMeta.elementId.id\n );\n\n if (existingMediaShare) {\n Object.assign(existingMediaShare, object.data);\n } else {\n locus.mediaShares = locus.mediaShares || [];\n locus.mediaShares.push(object.data);\n }\n } else {\n LoggerProxy.logger.info(\n `Locus-info:index#updateLocusFromHashTreeObject --> mediaShare id=${object.htMeta.elementId.id} removed, version=${object.htMeta.elementId.version}`\n );\n locus.mediaShares = locus.mediaShares?.filter(\n (ms) => ms.htMeta.elementId.id !== object.htMeta.elementId.id\n );\n }\n break;\n case ObjectType.participant:\n LoggerProxy.logger.info(\n `Locus-info:index#updateLocusFromHashTreeObject --> participant id=${\n object.htMeta.elementId.id\n } ${object.data ? 'updated' : 'removed'} version=${object.htMeta.elementId.version}`\n );\n if (object.data) {\n addParticipantObject(object);\n } else {\n const participantId = this.hashTreeObjectId2ParticipantId.get(object.htMeta.elementId.id);\n\n if (!locus.jsSdkMeta) {\n locus.jsSdkMeta = {removedParticipantIds: []};\n }\n locus.jsSdkMeta.removedParticipantIds.push(participantId);\n this.hashTreeObjectId2ParticipantId.delete(object.htMeta.elementId.id);\n }\n break;\n case ObjectType.links:\n case ObjectType.info:\n case ObjectType.fullState:\n case ObjectType.self:\n if (!object.data) {\n // self without data is handled inside HashTreeParser and results in LocusInfoUpdateType.MEETING_ENDED, so we should never get here\n // all other types info, fullstate, etc - Locus should never send them without data\n LoggerProxy.logger.warn(\n `Locus-info:index#updateLocusFromHashTreeObject --> received ${type} object without data, this is not expected! version=${object.htMeta.elementId.version}`\n );\n } else {\n LoggerProxy.logger.info(\n `Locus-info:index#updateLocusFromHashTreeObject --> ${type} object updated to version ${object.htMeta.elementId.version}`\n );\n const locusDtoKey = ObjectTypeToLocusKeyMap[type];\n locus[locusDtoKey] = object.data;\n\n /* Hash tree based webinar attendees don't receive a Participant object for themselves from Locus,\n but a lot of existing code in SDK and web app expects a member object for self to exist,\n so whenever SELF changes for a webinar attendee, we copy it into a participant object.\n We can do it, because SELF has always all the same properties as a participant object.\n */\n if (\n type === ObjectType.self &&\n locus.info?.isWebinar &&\n object.data.controls?.role?.roles?.find(\n (r) => r.type === SELF_ROLES.ATTENDEE && r.hasRole\n )\n ) {\n LoggerProxy.logger.info(\n `Locus-info:index#updateLocusFromHashTreeObject --> webinar attendee: creating participant object from self`\n );\n addParticipantObject(object);\n }\n }\n break;\n default:\n LoggerProxy.logger.warn(\n `Locus-info:index#updateLocusFromHashTreeObject --> received unsupported object type ${type}`\n );\n break;\n }\n\n return locus;\n }\n\n /**\n * Sends a metric when we receive something from Locus that uses hash trees while we\n * expect classic deltas or the other way around.\n * @param {Meeting} meeting\n * @param {string} message\n * @returns {void}\n */\n sendClassicVsHashTreeMismatchMetric(meeting: any, message: string) {\n LoggerProxy.logger.warn(\n `Locus-info:index#sendClassicVsHashTreeMismatchMetric --> classic vs hash tree mismatch! ${message}`\n );\n\n // we don't want to flood the metrics system\n if (this.classicVsHashTreeMismatchMetricCounter < 5) {\n Metrics.sendBehavioralMetric(BEHAVIORAL_METRICS.LOCUS_CLASSIC_VS_HASH_TREE_MISMATCH, {\n correlationId: meeting.correlationId,\n message,\n });\n this.classicVsHashTreeMismatchMetricCounter += 1;\n }\n }\n\n /**\n * Handles a hash tree message received from Locus.\n *\n * @param {Meeting} meeting - The meeting object\n * @param {eventType} eventType - The event type\n * @param {HashTreeMessage} message incoming hash tree message\n * @returns {void}\n */\n private handleHashTreeMessage(meeting: any, eventType: LOCUSEVENT, message: HashTreeMessage) {\n if (eventType !== LOCUSEVENT.HASH_TREE_DATA_UPDATED) {\n this.sendClassicVsHashTreeMismatchMetric(\n meeting,\n `got ${eventType}, expected ${LOCUSEVENT.HASH_TREE_DATA_UPDATED}`\n );\n\n return;\n }\n\n this.hashTreeParser.handleMessage(message);\n }\n\n /**\n * Callback registered with HashTreeParser to receive locus info updates.\n * Updates our locus info based on the data parsed by the hash tree parser.\n *\n * @param {LocusInfoUpdateType} updateType - The type of update received.\n * @param {Object} [data] - Additional data for the update, if applicable.\n * @returns {void}\n */\n private updateFromHashTree(\n updateType: LocusInfoUpdateType,\n data?: {updatedObjects: HashTreeObject[]}\n ) {\n switch (updateType) {\n case LocusInfoUpdateType.OBJECTS_UPDATED: {\n // initialize our new locus\n let locus: LocusDTO = {\n participants: [],\n jsSdkMeta: {removedParticipantIds: []},\n };\n\n // first go over all the updates and check what happens with the main locus object\n let locusObjectStateAfterUpdates: LocusObjectStateAfterUpdates =\n LocusObjectStateAfterUpdates.unchanged;\n data.updatedObjects.forEach((object) => {\n if (object.htMeta.elementId.type.toLowerCase() === ObjectType.locus) {\n if (locusObjectStateAfterUpdates === LocusObjectStateAfterUpdates.updated) {\n // this code doesn't supported it right now,\n // cases for \"updated\" followed by \"removed\", or multiple \"updated\" would need more handling\n // but these should never happen\n LoggerProxy.logger.warn(\n `Locus-info:index#updateFromHashTree --> received multiple LOCUS objects in one update, this is unexpected!`\n );\n Metrics.sendBehavioralMetric(\n BEHAVIORAL_METRICS.LOCUS_HASH_TREE_UNSUPPORTED_OPERATION,\n {\n locusUrl: object.data?.url || this.url,\n message: object.data\n ? 'multiple LOCUS object updates'\n : 'LOCUS object update followed by removal',\n }\n );\n }\n if (object.data) {\n locusObjectStateAfterUpdates = LocusObjectStateAfterUpdates.updated;\n } else {\n locusObjectStateAfterUpdates = LocusObjectStateAfterUpdates.removed;\n }\n }\n });\n\n // if Locus object is unchanged or removed, we need to keep using the existing locus\n // because the rest of the locusInfo code expects locus to always be present (with at least some of the fields)\n // if it gets updated, we only need to have the fields that are not part of \"locus\" object (like \"info\" or \"mediaShares\")\n // so that when Locus object gets updated, if the new one is missing some field, that field will\n // be removed from our locusInfo\n if (\n locusObjectStateAfterUpdates === LocusObjectStateAfterUpdates.unchanged ||\n locusObjectStateAfterUpdates === LocusObjectStateAfterUpdates.removed\n ) {\n // copy over all of existing locus except participants\n LocusDtoTopLevelKeys.forEach((key) => {\n if (key !== 'participants') {\n locus[key] = cloneDeep(this[key]);\n }\n });\n } else {\n // initialize only the fields that are not part of main \"Locus\" object\n // (except participants, which need to stay empty - that means \"no participant changes\")\n Object.values(ObjectTypeToLocusKeyMap).forEach((locusDtoKey) => {\n if (locusDtoKey !== 'participants') {\n locus[locusDtoKey] = cloneDeep(this[locusDtoKey]);\n }\n });\n }\n\n LoggerProxy.logger.info(\n `Locus-info:index#updateFromHashTree --> LOCUS object is ${locusObjectStateAfterUpdates}, all updates: ${JSON.stringify(\n data.updatedObjects.map((o) => ({\n type: o.htMeta.elementId.type,\n id: o.htMeta.elementId.id,\n hasData: !!o.data,\n }))\n )}`\n );\n // now apply all the updates from the hash tree onto the locus\n data.updatedObjects.forEach((object) => {\n locus = this.updateLocusFromHashTreeObject(object, locus);\n });\n\n // update our locus info with the new locus\n this.onDeltaLocus(locus);\n\n break;\n }\n\n case LocusInfoUpdateType.MEETING_ENDED: {\n LoggerProxy.logger.info(\n `Locus-info:index#updateFromHashTree --> received signal that meeting ended, destroying meeting ${this.meetingId}`\n );\n const meeting = this.webex.meetings.meetingCollection.get(this.meetingId);\n this.webex.meetings.destroy(meeting, MEETING_REMOVED_REASON.SELF_REMOVED);\n }\n }\n }\n\n /**\n * @param {Meeting} meeting\n * @param {Object} data\n * @returns {undefined}\n * @memberof LocusInfo\n */\n parse(meeting: any, data: any) {\n if (this.hashTreeParser) {\n this.handleHashTreeMessage(\n meeting,\n data.eventType,\n data.stateElementsMessage as HashTreeMessage\n );\n } else {\n // eslint-disable-next-line @typescript-eslint/no-shadow\n const {eventType} = data;\n const locus = this.getTheLocusToUpdate(data.locus);\n LoggerProxy.logger.info(`Locus-info:index#parse --> received locus data: ${eventType}`);\n\n locus.jsSdkMeta = {removedParticipantIds: []};\n\n switch (eventType) {\n case LOCUSEVENT.PARTICIPANT_JOIN:\n case LOCUSEVENT.PARTICIPANT_LEFT:\n case LOCUSEVENT.CONTROLS_UPDATED:\n case LOCUSEVENT.PARTICIPANT_AUDIO_MUTED:\n case LOCUSEVENT.PARTICIPANT_AUDIO_UNMUTED:\n case LOCUSEVENT.PARTICIPANT_VIDEO_MUTED:\n case LOCUSEVENT.PARTICIPANT_VIDEO_UNMUTED:\n case LOCUSEVENT.SELF_CHANGED:\n case LOCUSEVENT.PARTICIPANT_UPDATED:\n case LOCUSEVENT.PARTICIPANT_CONTROLS_UPDATED:\n case LOCUSEVENT.PARTICIPANT_ROLES_UPDATED:\n case LOCUSEVENT.PARTICIPANT_DECLINED:\n case LOCUSEVENT.FLOOR_GRANTED:\n case LOCUSEVENT.FLOOR_RELEASED:\n this.onFullLocus(locus, eventType);\n break;\n case LOCUSEVENT.DIFFERENCE:\n this.handleLocusDelta(locus, meeting);\n break;\n case LOCUSEVENT.HASH_TREE_DATA_UPDATED:\n this.sendClassicVsHashTreeMismatchMetric(\n meeting,\n `got ${eventType}, expected classic events`\n );\n break;\n\n default:\n // Why will there be a event with no eventType ????\n // we may not need this, we can get full locus\n this.handleLocusDelta(locus, meeting);\n }\n }\n }\n\n /**\n * @param {String} scope\n * @param {String} eventName\n * @param {Array} args\n * @returns {undefined}\n * @memberof LocusInfo\n */\n emitScoped(scope?: any, eventName?: string, args?: any) {\n return this.emit(scope, eventName, args);\n }\n\n /**\n * Function for handling full locus when it's using hash trees (so not the \"classic\" one).\n *\n * @param {object} locus locus object\n * @param {string} eventType locus event\n * @param {DataSet[]} dataSets\n * @returns {void}\n */\n private onFullLocusWithHashTrees(locus: any, eventType?: string, dataSets?: Array<DataSet>) {\n if (!this.hashTreeParser) {\n LoggerProxy.logger.info(`Locus-info:index#onFullLocus --> creating hash tree parser`);\n LoggerProxy.logger.info(\n 'Locus-info:index#onFullLocus --> dataSets:',\n dataSets,\n ' and locus:',\n locus\n );\n this.hashTreeParser = this.createHashTreeParser({\n initialLocus: {locus, dataSets},\n });\n this.onFullLocusCommon(locus, eventType);\n } else {\n // in this case the Locus we're getting is not necessarily the full one\n // so treat it like if we just got it in any api response\n\n LoggerProxy.logger.info(\n 'Locus-info:index#onFullLocus --> hash tree parser already exists, handling it like a normal API response'\n );\n this.handleLocusAPIResponse(undefined, {dataSets, locus});\n }\n }\n\n /**\n * Function for handling full locus when it's the \"classic\" one (not hash trees)\n *\n * @param {object} locus locus object\n * @param {string} eventType locus event\n * @returns {void}\n */\n private onFullLocusClassic(locus: any, eventType?: string) {\n if (!this.locusParser.isNewFullLocus(locus)) {\n LoggerProxy.logger.info(\n `Locus-info:index#onFullLocus --> ignoring old full locus DTO, eventType=${eventType}`\n );\n\n return;\n }\n this.onFullLocusCommon(locus, eventType);\n }\n\n /**\n * updates the locus with full locus object\n * @param {object} locus locus object\n * @param {string} eventType locus event\n * @param {DataSet[]} dataSets\n * @returns {object} null\n * @memberof LocusInfo\n */\n onFullLocus(locus: any, eventType?: string, dataSets?: Array<DataSet>) {\n if (!locus) {\n LoggerProxy.logger.error(\n 'Locus-info:index#onFullLocus --> object passed as argument was invalid, continuing.'\n );\n }\n\n if (dataSets) {\n // this is the new hashmap Locus DTO format (only applicable to webinars for now)\n this.onFullLocusWithHashTrees(locus, eventType, dataSets);\n } else {\n this.onFullLocusClassic(locus, eventType);\n }\n }\n\n /**\n * Common part of handling full locus, used by both classic and hash tree based locus handling\n * @param {object} locus locus object\n * @param {string} eventType locus event\n * @returns {void}\n */\n private onFullLocusCommon(locus: any, eventType?: string) {\n this.scheduledMeeting = locus.meeting || null;\n this.participants = locus.participants;\n this.participants?.forEach((participant) => {\n // participant.htMeta is set only for hash tree based locus\n if (participant.htMeta?.elementId.id) {\n this.hashTreeObjectId2ParticipantId.set(participant.htMeta.elementId.id, participant.id);\n }\n });\n const isReplaceMembers = ControlsUtils.isNeedReplaceMembers(this.controls, locus.controls);\n this.updateLocusInfo(locus);\n this.updateParticipants(\n locus.participants,\n locus.jsSdkMeta?.removedParticipantIds,\n isReplaceMembers\n );\n this.isMeetingActive();\n this.handleOneOnOneEvent(eventType);\n this.updateEmbeddedApps(locus.embeddedApps);\n // set current (working copy) for parser\n this.locusParser.workingCopy = locus;\n }\n\n // used for ringing stops on one on one\n /**\n * @param {String} eventType\n * @returns {undefined}\n * @memberof LocusInfo\n */\n // eslint-disable-next-line @typescript-eslint/no-shadow\n handleOneOnOneEvent(eventType: string) {\n if (\n this.parsedLocus.fullState.type === _CALL_ ||\n this.parsedLocus.fullState.type === _SIP_BRIDGE_\n ) {\n // for 1:1 bob calls alice and alice declines, notify the meeting state\n if (eventType === LOCUSEVENT.PARTICIPANT_DECLINED) {\n // trigger the event for stop ringing\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'handleOneonOneEvent',\n },\n EVENTS.REMOTE_RESPONSE,\n {\n remoteDeclined: true,\n remoteAnswered: false,\n }\n );\n }\n // for 1:1 bob calls alice and alice answers, notify the meeting state\n if (eventType === LOCUSEVENT.PARTICIPANT_JOIN) {\n // trigger the event for stop ringing\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'handleOneonOneEvent',\n },\n EVENTS.REMOTE_RESPONSE,\n {\n remoteDeclined: false,\n remoteAnswered: true,\n }\n );\n }\n }\n }\n\n /**\n * @param {Object} locus\n * @returns {undefined}\n * @memberof LocusInfo\n */\n onDeltaLocus(locus: any) {\n const isReplaceMembers = ControlsUtils.isNeedReplaceMembers(this.controls, locus.controls);\n this.mergeParticipants(this.participants, locus.participants);\n this.updateLocusInfo(locus);\n this.updateParticipants(\n locus.participants,\n locus.jsSdkMeta?.removedParticipantIds,\n isReplaceMembers\n );\n this.isMeetingActive();\n }\n\n /**\n * @param {Object} locus\n * @returns {undefined}\n * @memberof LocusInfo\n */\n updateLocusInfo(locus) {\n if (locus.self?.reason === 'MOVED' && locus.self?.state === 'LEFT') {\n // When moved to a breakout session locus sends a message for the previous locus\n // indicating that we have been moved. It isn't helpful to continue parsing this\n // as it gets interpreted as if we have left the call\n return;\n }\n\n this.updateControls(locus.controls, locus.self);\n this.updateConversationUrl(locus.conversationUrl, locus.info);\n this.updateCreated(locus.created);\n this.updateFullState(locus.fullState);\n this.updateHostInfo(locus.host);\n this.updateLocusUrl(locus.url, ControlsUtils.isMainSessionDTO(locus));\n this.updateMeetingInfo(locus.info, locus.self);\n this.updateMediaShares(locus.mediaShares);\n this.updateReplaces(locus.replaces);\n this.updateSelf(locus.self);\n this.updateAclUrl(locus.aclUrl);\n this.updateBasequence(locus.baseSequence);\n this.updateSequence(locus.sequence);\n this.updateEmbeddedApps(locus.embeddedApps);\n this.updateLinks(locus.links);\n this.compareAndUpdate();\n // update which required to compare different objects from locus\n }\n\n /**\n * @param {Array} participants\n * @param {Object} self\n * @returns {Array}\n * @memberof LocusInfo\n */\n getLocusPartner(participants: Array<any>, self: any) {\n if (!participants || participants.length === 0) {\n return null;\n }\n\n return (\n participants.find(\n (participant) =>\n self &&\n participant.identity !== self.identity &&\n (participants.length <= 2 || (participant.type === _USER_ && !participant.removed))\n // @ts-ignore\n ) || this.partner\n );\n }\n\n // TODO: all the leave states need to be checked\n /**\n * @returns {undefined}\n * @memberof LocusInfo\n */\n isMeetingActive() {\n if (\n this.parsedLocus.fullState.type === _CALL_ ||\n this.parsedLocus.fullState.type === _SIP_BRIDGE_ ||\n this.parsedLocus.fullState.type === _SPACE_SHARE_\n ) {\n // @ts-ignore\n const partner = this.getLocusPartner(this.participants, this.self);\n\n this.updateMeeting({partner});\n\n // Check if guest user needs to be checked here\n\n // 1) when bob declines call from bob, (bob='DECLINED')\n // 2) When alice rejects call to bob , (bob='NOTIFIED')\n\n // When we dont add MEDIA for condition 2. The state of bob='IDLE'\n\n if (this.fullState && this.fullState.state === LOCUS.STATE.INACTIVE) {\n // TODO: update the meeting state\n LoggerProxy.logger.warn(\n 'Locus-info:index#isMeetingActive --> Call Ended, locus state is inactive.'\n );\n\n // @ts-ignore\n this.webex.internal.newMetrics.submitClientEvent({\n name: 'client.call.remote-ended',\n options: {\n meetingId: this.meetingId,\n },\n });\n\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'isMeetingActive',\n },\n EVENTS.DESTROY_MEETING,\n {\n reason: CALL_REMOVED_REASON.CALL_INACTIVE,\n shouldLeave: false,\n }\n );\n } else if (\n partner.state === MEETING_STATE.STATES.LEFT &&\n this.parsedLocus.self &&\n (this.parsedLocus.self.state === MEETING_STATE.STATES.DECLINED ||\n this.parsedLocus.self.state === MEETING_STATE.STATES.NOTIFIED ||\n this.parsedLocus.self.state === MEETING_STATE.STATES.JOINED)\n ) {\n // @ts-ignore\n this.webex.internal.newMetrics.submitClientEvent({\n name: 'client.call.remote-ended',\n options: {\n meetingId: this.meetingId,\n },\n });\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'isMeetingActive',\n },\n EVENTS.DESTROY_MEETING,\n {\n reason: CALL_REMOVED_REASON.PARTNER_LEFT,\n shouldLeave:\n this.parsedLocus.self.joinedWith && this.parsedLocus.self.joinedWith.state !== _LEFT_,\n }\n );\n } else if (\n this.parsedLocus.self &&\n this.parsedLocus.self.state === MEETING_STATE.STATES.LEFT &&\n (partner.state === MEETING_STATE.STATES.LEFT ||\n partner.state === MEETING_STATE.STATES.DECLINED ||\n partner.state === MEETING_STATE.STATES.NOTIFIED ||\n partner.state === MEETING_STATE.STATES.IDLE) // Happens when user just joins and adds no Media\n ) {\n // @ts-ignore\n this.webex.internal.newMetrics.submitClientEvent({\n name: 'client.call.remote-ended',\n options: {\n meetingId: this.meetingId,\n },\n });\n\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'isMeetingActive',\n },\n EVENTS.DESTROY_MEETING,\n {\n reason: CALL_REMOVED_REASON.SELF_LEFT,\n shouldLeave: false,\n }\n );\n }\n } else if (this.parsedLocus.fullState.type === _MEETING_) {\n if (\n this.fullState &&\n (this.fullState.state === LOCUS.STATE.INACTIVE ||\n // @ts-ignore\n this.fullState.state === LOCUS.STATE.TERMINATING)\n ) {\n LoggerProxy.logger.warn(\n 'Locus-info:index#isMeetingActive --> Meeting is ending due to inactive or terminating'\n );\n\n // @ts-ignore\n this.webex.internal.newMetrics.submitClientEvent({\n name: 'client.call.remote-ended',\n options: {\n meetingId: this.meetingId,\n },\n });\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'isMeetingActive',\n },\n EVENTS.DESTROY_MEETING,\n {\n reason: MEETING_REMOVED_REASON.MEETING_INACTIVE_TERMINATING,\n shouldLeave: false,\n }\n );\n } else if (this.fullState && this.fullState.removed) {\n // user has been dropped from a meeting\n\n // @ts-ignore\n this.webex.internal.newMetrics.submitClientEvent({\n name: 'client.call.remote-ended',\n options: {\n meetingId: this.meetingId,\n },\n });\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'isMeetingActive',\n },\n EVENTS.DESTROY_MEETING,\n {\n reason: MEETING_REMOVED_REASON.FULLSTATE_REMOVED,\n shouldLeave: false,\n }\n );\n }\n // If you are guest and you are removed from the meeting\n // You wont get any further events\n else if (this.parsedLocus.self && this.parsedLocus.self.removed) {\n // Check if we need to send an event\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'isMeetingActive',\n },\n EVENTS.DESTROY_MEETING,\n {\n reason: MEETING_REMOVED_REASON.SELF_REMOVED,\n shouldLeave: false,\n }\n );\n }\n } else {\n LoggerProxy.logger.warn('Locus-info:index#isMeetingActive --> Meeting Type is unknown.');\n }\n }\n\n /**\n * checks if the host permissions have changed while in the meeting\n * This would be the case if your role as host or moderator has been updated\n * @returns {undefined}\n * @memberof LocusInfo\n */\n compareAndUpdate() {\n // TODO: check with locus team on host and moderator doc\n // use host as a validator if needed\n if (\n this.compareAndUpdateFlags.compareSelfAndHost ||\n this.compareAndUpdateFlags.compareHostAndSelf\n ) {\n this.compareSelfAndHost();\n }\n }\n\n /**\n * compared the self object to check if the user has host permissions\n * @returns {undefined}\n * @memberof LocusInfo\n */\n compareSelfAndHost() {\n // In some cases the host info is not present but the moderator values changes from null to false so it triggers an update\n if (\n this.parsedLocus.self.selfIdentity === this.parsedLocus.host?.hostId &&\n this.parsedLocus.self.moderator\n ) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'compareSelfAndHost',\n },\n EVENTS.LOCUS_INFO_CAN_ASSIGN_HOST,\n {\n canAssignHost: true,\n }\n );\n } else {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'compareSelfAndHost',\n },\n EVENTS.LOCUS_INFO_CAN_ASSIGN_HOST,\n {\n canAssignHost: false,\n }\n );\n }\n }\n\n /**\n * update meeting's members\n * @param {Object} participants new participants object\n * @param {Array} removedParticipantIds list of removed participants\n * @param {Boolean} isReplace is replace the whole members\n * @returns {Array} updatedParticipants\n * @memberof LocusInfo\n */\n updateParticipants(participants: object, removedParticipantIds?: string[], isReplace?: boolean) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateParticipants',\n },\n EVENTS.LOCUS_INFO_UPDATE_PARTICIPANTS,\n {\n participants,\n removedParticipantIds,\n recordingId: this.parsedLocus.controls && this.parsedLocus.controls.record?.modifiedBy,\n selfIdentity: this.parsedLocus.self && this.parsedLocus.self.selfIdentity,\n selfId: this.parsedLocus.self && this.parsedLocus.self.selfId,\n hostId: this.parsedLocus.host && this.parsedLocus.host.hostId,\n isReplace,\n }\n );\n\n if (participants && Array.isArray(participants) && participants.length > 0) {\n for (const participant of participants) {\n if (participant && participant?.reason === 'FAILURE') {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateParticipants',\n },\n LOCUSINFO.EVENTS.PARTICIPANT_REASON_CHANGED,\n {\n displayName: participant?.person?.primaryDisplayString,\n }\n );\n }\n }\n }\n }\n\n /**\n * @param {Object} controls\n * @param {Object} self\n * @returns {undefined}\n * @memberof LocusInfo\n */\n updateControls(controls: object, self: object) {\n if (controls && !isEqual(this.controls, controls)) {\n this.parsedLocus.controls = ControlsUtils.parse(controls);\n const {\n updates: {\n hasRecordingChanged,\n hasRecordingPausedChanged,\n hasMeetingContainerChanged,\n hasTranscribeChanged,\n hasTranscribeSpokenLanguageChanged,\n hasManualCaptionChanged,\n hasEntryExitToneChanged,\n hasBreakoutChanged,\n hasVideoEnabledChanged,\n hasMuteOnEntryChanged,\n hasShareControlChanged,\n hasDisallowUnmuteChanged,\n hasReactionsChanged,\n hasReactionDisplayNamesChanged,\n hasViewTheParticipantListChanged,\n hasRaiseHandChanged,\n hasVideoChanged,\n hasInterpretationChanged,\n hasWebcastChanged,\n hasMeetingFullChanged,\n hasPracticeSessionEnabledChanged,\n hasStageViewChanged,\n hasAnnotationControlChanged,\n hasRemoteDesktopControlChanged,\n hasPollingQAControlChanged,\n hasAutoEndMeetingChanged,\n },\n current,\n } = ControlsUtils.getControls(this.controls, controls);\n\n if (hasMuteOnEntryChanged) {\n this.emitScoped(\n {file: 'locus-info', function: 'updateControls'},\n LOCUSINFO.EVENTS.CONTROLS_MUTE_ON_ENTRY_CHANGED,\n {state: current.muteOnEntry}\n );\n }\n\n if (hasShareControlChanged) {\n this.emitScoped(\n {file: 'locus-info', function: 'updateControls'},\n LOCUSINFO.EVENTS.CONTROLS_SHARE_CONTROL_CHANGED,\n {state: current.shareControl}\n );\n }\n\n if (hasDisallowUnmuteChanged) {\n this.emitScoped(\n {file: 'locus-info', function: 'updateControls'},\n LOCUSINFO.EVENTS.CONTROLS_DISALLOW_UNMUTE_CHANGED,\n {state: current.disallowUnmute}\n );\n }\n\n if (hasReactionsChanged || hasReactionDisplayNamesChanged) {\n this.emitScoped(\n {file: 'locus-info', function: 'updateControls'},\n LOCUSINFO.EVENTS.CONTROLS_REACTIONS_CHANGED,\n {state: current.reactions}\n );\n }\n\n if (hasViewTheParticipantListChanged) {\n this.emitScoped(\n {file: 'locus-info', function: 'updateControls'},\n LOCUSINFO.EVENTS.CONTROLS_VIEW_THE_PARTICIPANTS_LIST_CHANGED,\n {state: current.viewTheParticipantList}\n );\n }\n\n if (hasRaiseHandChanged) {\n this.emitScoped(\n {file: 'locus-info', function: 'updateControls'},\n LOCUSINFO.EVENTS.CONTROLS_RAISE_HAND_CHANGED,\n {state: current.raiseHand}\n );\n }\n\n if (hasVideoChanged) {\n this.emitScoped(\n {file: 'locus-info', function: 'updateControls'},\n LOCUSINFO.EVENTS.CONTROLS_VIDEO_CHANGED,\n {state: current.video}\n );\n }\n\n if (hasRecordingChanged || hasRecordingPausedChanged) {\n let state = null;\n\n if (hasRecordingPausedChanged) {\n if (current.record.paused) {\n state = RECORDING_STATE.PAUSED;\n } else {\n // state will be `IDLE` if the recording is not active, even when there is a `pause` status change.\n state = current.record.recording ? RECORDING_STATE.RESUMED : RECORDING_STATE.IDLE;\n }\n } else if (hasRecordingChanged) {\n state = current.record.recording ? RECORDING_STATE.RECORDING : RECORDING_STATE.IDLE;\n }\n\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateControls',\n },\n LOCUSINFO.EVENTS.CONTROLS_RECORDING_UPDATED,\n {\n state,\n modifiedBy: current.record.modifiedBy,\n lastModified: current.record.lastModified,\n }\n );\n }\n\n if (hasMeetingContainerChanged) {\n const {meetingContainerUrl} = current.meetingContainer;\n\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateControls',\n },\n LOCUSINFO.EVENTS.CONTROLS_MEETING_CONTAINER_UPDATED,\n {\n meetingContainerUrl,\n }\n );\n }\n\n if (hasTranscribeChanged) {\n const {transcribing, caption} = current.transcribe;\n\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateControls',\n },\n LOCUSINFO.EVENTS.CONTROLS_MEETING_TRANSCRIBE_UPDATED,\n {\n transcribing,\n caption,\n }\n );\n }\n\n if (hasTranscribeSpokenLanguageChanged) {\n const {spokenLanguage} = current.transcribe;\n\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateControls',\n },\n LOCUSINFO.EVENTS.CONTROLS_MEETING_TRANSCRIPTION_SPOKEN_LANGUAGE_UPDATED,\n {\n spokenLanguage,\n }\n );\n }\n\n if (hasManualCaptionChanged) {\n const {enabled} = current.manualCaptionControl;\n\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateControls',\n },\n LOCUSINFO.EVENTS.CONTROLS_MEETING_MANUAL_CAPTION_UPDATED,\n {\n enabled,\n }\n );\n }\n\n if (hasBreakoutChanged) {\n const {breakout} = current;\n breakout.breakoutMoveId = SelfUtils.getReplacedBreakoutMoveId(\n self,\n this.webex.internal.device.url\n );\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateControls',\n },\n LOCUSINFO.EVENTS.CONTROLS_MEETING_BREAKOUT_UPDATED,\n {\n breakout,\n }\n );\n }\n\n if (hasInterpretationChanged) {\n const {interpretation} = current;\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateControls',\n },\n LOCUSINFO.EVENTS.CONTROLS_MEETING_INTERPRETATION_UPDATED,\n {\n interpretation,\n }\n );\n }\n\n if (hasEntryExitToneChanged) {\n const {entryExitTone} = current;\n\n this.updateMeeting({entryExitTone});\n\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateControls',\n },\n LOCUSINFO.EVENTS.CONTROLS_ENTRY_EXIT_TONE_UPDATED,\n {\n entryExitTone,\n }\n );\n }\n\n // videoEnabled is handled differently than other controls,\n // to fit with audio mute status logic\n if (hasVideoEnabledChanged) {\n const {videoEnabled} = current;\n\n this.updateMeeting({unmuteVideoAllowed: videoEnabled});\n\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateControls',\n },\n LOCUSINFO.EVENTS.SELF_REMOTE_VIDEO_MUTE_STATUS_UPDATED,\n {\n // muted: not part of locus.controls\n unmuteAllowed: videoEnabled,\n }\n );\n }\n\n if (hasWebcastChanged) {\n this.emitScoped(\n {file: 'locus-info', function: 'updateControls'},\n LOCUSINFO.EVENTS.CONTROLS_WEBCAST_CHANGED,\n {state: current.webcastControl}\n );\n }\n\n if (hasMeetingFullChanged) {\n this.emitScoped(\n {file: 'locus-info', function: 'updateControls'},\n LOCUSINFO.EVENTS.CONTROLS_MEETING_FULL_CHANGED,\n {state: current.meetingFull}\n );\n }\n\n if (hasPracticeSessionEnabledChanged) {\n this.emitScoped(\n {file: 'locus-info', function: 'updateControls'},\n LOCUSINFO.EVENTS.CONTROLS_PRACTICE_SESSION_STATUS_UPDATED,\n {state: current.practiceSession}\n );\n }\n\n if (hasStageViewChanged) {\n this.emitScoped(\n {file: 'locus-info', function: 'updateControls'},\n LOCUSINFO.EVENTS.CONTROLS_STAGE_VIEW_UPDATED,\n {state: current.videoLayout}\n );\n }\n\n if (hasAnnotationControlChanged) {\n this.emitScoped(\n {file: 'locus-info', function: 'updateControls'},\n LOCUSINFO.EVENTS.CONTROLS_ANNOTATION_CHANGED,\n {state: current.annotationControl}\n );\n }\n\n if (hasRemoteDesktopControlChanged) {\n this.emitScoped(\n {file: 'locus-info', function: 'updateControls'},\n LOCUSINFO.EVENTS.CONTROLS_REMOTE_DESKTOP_CONTROL_CHANGED,\n {state: current.rdcControl}\n );\n }\n\n if (hasPollingQAControlChanged) {\n this.emitScoped(\n {file: 'locus-info', function: 'updateControls'},\n LOCUSINFO.EVENTS.CONTROLS_POLLING_QA_CHANGED,\n {state: current.pollingQAControl}\n );\n }\n\n if (hasAutoEndMeetingChanged) {\n this.emitScoped(\n {file: 'locus-info', function: 'updateControls'},\n LOCUSINFO.EVENTS.CONTROLS_AUTO_END_MEETING_WARNING_CHANGED,\n {state: current.autoEndMeetingWarning}\n );\n }\n\n this.controls = controls;\n }\n }\n\n /**\n * @param {String} conversationUrl\n * @param {Object} info\n * @returns {undefined}\n * @memberof LocusInfo\n */\n updateConversationUrl(conversationUrl: string, info: any) {\n if (conversationUrl && !isEqual(this.conversationUrl, conversationUrl)) {\n this.conversationUrl = conversationUrl;\n this.updateMeeting({conversationUrl});\n } else if (\n info &&\n info.conversationUrl &&\n !isEqual(this.conversationUrl, info.conversationUrl)\n ) {\n this.conversationUrl = info.conversationUrl;\n this.updateMeeting({conversationUrl: info.conversationUrl});\n }\n }\n\n /**\n * @param {Object} created\n * @returns {undefined}\n * @memberof LocusInfo\n */\n updateCreated(created: object) {\n if (created && !isEqual(this.created, created)) {\n this.created = created;\n }\n }\n\n /**\n * Updates links and emits appropriate events if services or resources have changed\n * @param {Object} links\n * @returns {undefined}\n * @memberof LocusInfo\n */\n updateLinks(links?: Links) {\n const {services, resources} = links || {};\n\n if (services && !isEqual(this.links?.services, services)) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateLinks',\n },\n LOCUSINFO.EVENTS.LINKS_SERVICES,\n {\n services,\n }\n );\n }\n\n if (resources && !isEqual(this.links?.resources, resources)) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateLinks',\n },\n LOCUSINFO.EVENTS.LINKS_RESOURCES,\n {\n resources,\n }\n );\n }\n\n this.links = links;\n }\n\n /**\n * @param {Object} fullState\n * @returns {undefined}\n * @memberof LocusInfo\n */\n updateFullState(fullState: object) {\n if (fullState && !isEqual(this.fullState, fullState)) {\n const result = FullState.getFullState(this.fullState, fullState);\n\n this.updateMeeting(result.current);\n\n if (result.updates.meetingStateChangedTo) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateFullState',\n },\n LOCUSINFO.EVENTS.FULL_STATE_MEETING_STATE_CHANGE,\n {\n previousState: result.previous && result.previous.meetingState,\n currentState: result.current.meetingState,\n }\n );\n }\n\n if (result.updates.meetingTypeChangedTo) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateFullState',\n },\n LOCUSINFO.EVENTS.FULL_STATE_TYPE_UPDATE,\n {\n type: result.current.type,\n }\n );\n }\n this.parsedLocus.fullState = result.current;\n this.fullState = fullState;\n }\n }\n\n /**\n * handles when the locus.host is updated\n * @param {Object} host the locus.host property\n * @returns {undefined}\n * @memberof LocusInfo\n * emits internal event locus_info_update_host\n */\n updateHostInfo(host: object) {\n if (host && !isEqual(this.host, host)) {\n const parsedHosts = HostUtils.getHosts(this.host, host);\n\n this.updateMeeting(parsedHosts.current);\n this.parsedLocus.host = parsedHosts.current;\n if (parsedHosts.updates.isNewHost) {\n this.compareAndUpdateFlags.compareSelfAndHost = true;\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateHostInfo',\n },\n EVENTS.LOCUS_INFO_UPDATE_HOST,\n {\n newHost: parsedHosts.current,\n oldHost: parsedHosts.previous,\n }\n );\n }\n this.host = host;\n } else {\n this.compareAndUpdateFlags.compareSelfAndHost = false;\n }\n }\n\n /**\n * @param {Object} info\n * @param {Object} self\n * @returns {undefined}\n * @memberof LocusInfo\n */\n updateMeetingInfo(info: object, self?: object) {\n const roles = self ? SelfUtils.getRoles(self) : this.parsedLocus.self?.roles || [];\n if ((info && !isEqual(this.info, info)) || (!isEqual(this.roles, roles) && info)) {\n const isJoined = SelfUtils.isJoined(self || this.parsedLocus.self);\n const parsedInfo = InfoUtils.getInfos(this.parsedLocus.info, info, roles, isJoined);\n\n if (parsedInfo.updates.isLocked) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateMeetingInfo',\n },\n LOCUSINFO.EVENTS.MEETING_LOCKED,\n info\n );\n }\n if (parsedInfo.updates.isUnlocked) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateMeetingInfo',\n },\n LOCUSINFO.EVENTS.MEETING_UNLOCKED,\n info\n );\n }\n\n this.info = info;\n this.parsedLocus.info = parsedInfo.current;\n // Parses the info and adds necessary values\n this.updateMeeting(parsedInfo.current);\n\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateMeetingInfo',\n },\n LOCUSINFO.EVENTS.MEETING_INFO_UPDATED,\n {\n isInitializing: !self, // if self is undefined, then the update is caused by locus init\n }\n );\n }\n this.roles = roles;\n }\n\n /**\n * @param {Object} embeddedApps\n * @returns {undefined}\n * @memberof LocusInfo\n */\n updateEmbeddedApps(embeddedApps: object) {\n // don't do anything if the arrays of apps haven't changed significantly\n if (EmbeddedAppsUtils.areSimilar(this.embeddedApps, embeddedApps)) {\n return;\n }\n\n const parsedEmbeddedApps = EmbeddedAppsUtils.parse(embeddedApps);\n\n this.updateMeeting({embeddedApps: parsedEmbeddedApps});\n\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateEmbeddedApps',\n },\n LOCUSINFO.EVENTS.EMBEDDED_APPS_UPDATED,\n parsedEmbeddedApps\n );\n this.embeddedApps = embeddedApps;\n }\n\n /**\n * handles when the locus.mediaShares is updated\n * @param {Object} mediaShares the locus.mediaShares property\n * @param {boolean} forceUpdate force to update the mediaShares\n * @returns {undefined}\n * @memberof LocusInfo\n * emits internal event locus_info_update_media_shares\n */\n updateMediaShares(mediaShares: object, forceUpdate = false) {\n if (mediaShares && (!isEqual(this.mediaShares, mediaShares) || forceUpdate)) {\n const parsedMediaShares = MediaSharesUtils.getMediaShares(this.mediaShares, mediaShares);\n\n this.updateMeeting(parsedMediaShares.current);\n this.parsedLocus.mediaShares = parsedMediaShares.current;\n this.mediaShares = mediaShares;\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateMediaShares',\n },\n EVENTS.LOCUS_INFO_UPDATE_MEDIA_SHARES,\n {\n current: parsedMediaShares.current,\n previous: parsedMediaShares.previous,\n forceUpdate,\n }\n );\n }\n }\n\n /**\n * @param {Object} replaces\n * @returns {undefined}\n * @memberof LocusInfo\n */\n updateReplaces(replaces: object) {\n if (replaces && !isEqual(this.replaces, replaces)) {\n this.replaces = replaces;\n }\n }\n\n /**\n * handles when the locus.self is updated\n * @param {Object} self the new locus.self\n * @returns {undefined}\n * @memberof LocusInfo\n * emits internal events self_admitted_guest, self_unadmitted_guest, locus_info_update_self\n */\n updateSelf(self: any) {\n if (self) {\n // @ts-ignore\n const parsedSelves = SelfUtils.getSelves(\n this.parsedLocus.self,\n self,\n this.webex.internal.device.url,\n this.participants // using this.participants instead of locus.participants here, because with delta DTOs locus.participants will only contain a small subset of participants\n );\n\n this.updateMeeting(parsedSelves.current);\n this.parsedLocus.self = parsedSelves.current;\n\n const element = this.parsedLocus.states[this.parsedLocus.states.length - 1];\n\n if (element !== parsedSelves.current.state) {\n this.parsedLocus.states.push(parsedSelves.current.state);\n }\n\n // TODO: check if we need to save the sipUri here as well\n // this.emit(LOCUSINFO.EVENTS.MEETING_UPDATE, SelfUtils.getSipUrl(this.getLocusPartner(participants, self), this.parsedLocus.fullState.type, this.parsedLocus.info.sipUri));\n const result = SelfUtils.getSipUrl(\n this.getLocusPartner(this.participants, self),\n this.parsedLocus.fullState.type,\n this.parsedLocus.info.sipUri\n );\n\n if (result.sipUri) {\n this.updateMeeting(result);\n }\n\n if (parsedSelves.updates.moderatorChanged) {\n this.compareAndUpdateFlags.compareHostAndSelf = true;\n } else {\n this.compareAndUpdateFlags.compareHostAndSelf = false;\n }\n\n if (parsedSelves.updates.layoutChanged) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n LOCUSINFO.EVENTS.CONTROLS_MEETING_LAYOUT_UPDATED,\n {layout: parsedSelves.current.layout}\n );\n }\n\n if (parsedSelves.updates.breakoutsChanged) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n LOCUSINFO.EVENTS.SELF_MEETING_BREAKOUTS_CHANGED,\n {breakoutSessions: parsedSelves.current.breakoutSessions}\n );\n }\n\n if (parsedSelves.updates.brbChanged) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n LOCUSINFO.EVENTS.SELF_MEETING_BRB_CHANGED,\n {\n brb: parsedSelves.current.brb,\n }\n );\n }\n\n if (parsedSelves.updates.interpretationChanged) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n LOCUSINFO.EVENTS.SELF_MEETING_INTERPRETATION_CHANGED,\n {\n interpretation: parsedSelves.current.interpretation,\n selfParticipantId: parsedSelves.current.selfId,\n }\n );\n }\n\n if (parsedSelves.updates.isMediaInactiveOrReleased) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n LOCUSINFO.EVENTS.DISCONNECT_DUE_TO_INACTIVITY,\n {reason: self.reason}\n );\n }\n\n if (parsedSelves.updates.moderatorChanged) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n LOCUSINFO.EVENTS.SELF_MODERATOR_CHANGED,\n self\n );\n }\n\n if (parsedSelves.updates.isRolesChanged) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n LOCUSINFO.EVENTS.SELF_ROLES_CHANGED,\n {oldRoles: parsedSelves.previous?.roles, newRoles: parsedSelves.current?.roles}\n );\n }\n\n if (parsedSelves.updates.isVideoMutedByOthersChanged) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n LOCUSINFO.EVENTS.SELF_REMOTE_VIDEO_MUTE_STATUS_UPDATED,\n {\n muted: parsedSelves.current.remoteVideoMuted,\n // unmuteAllowed: not part of .self\n }\n );\n }\n if (parsedSelves.updates.localAudioUnmuteRequiredByServer) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n LOCUSINFO.EVENTS.LOCAL_UNMUTE_REQUIRED,\n {\n muted: parsedSelves.current.remoteMuted,\n unmuteAllowed: parsedSelves.current.unmuteAllowed,\n }\n );\n }\n if (parsedSelves.updates.isMutedByOthersChanged) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n LOCUSINFO.EVENTS.SELF_REMOTE_MUTE_STATUS_UPDATED,\n {\n muted: parsedSelves.current.remoteMuted,\n unmuteAllowed: parsedSelves.current.unmuteAllowed,\n }\n );\n }\n if (parsedSelves.updates.localAudioUnmuteRequestedByServer) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n LOCUSINFO.EVENTS.LOCAL_UNMUTE_REQUESTED,\n {}\n );\n }\n if (parsedSelves.updates.hasUserEnteredLobby) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n LOCUSINFO.EVENTS.SELF_UNADMITTED_GUEST,\n self\n );\n }\n if (parsedSelves.updates.hasUserBeenAdmitted) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n LOCUSINFO.EVENTS.SELF_ADMITTED_GUEST,\n self\n );\n }\n\n if (parsedSelves.updates.isMediaInactive) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n // @ts-ignore\n LOCUSINFO.EVENTS.MEDIA_INACTIVITY,\n SelfUtils.getMediaStatus(self.mediaSessions)\n );\n }\n\n if (\n parsedSelves.updates.audioStateChange ||\n parsedSelves.updates.videoStateChange ||\n parsedSelves.updates.shareStateChange\n ) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n LOCUSINFO.EVENTS.MEDIA_STATUS_CHANGE,\n {\n audioStatus: parsedSelves.current.currentMediaStatus?.audio,\n videoStatus: parsedSelves.current.currentMediaStatus?.video,\n shareStatus: parsedSelves.current.currentMediaStatus?.share,\n }\n );\n }\n\n if (parsedSelves.updates.isUserObserving) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n LOCUSINFO.EVENTS.SELF_OBSERVING\n );\n }\n\n if (parsedSelves.updates.canNotViewTheParticipantListChanged) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n LOCUSINFO.EVENTS.SELF_CANNOT_VIEW_PARTICIPANT_LIST_CHANGE,\n {canNotViewTheParticipantList: parsedSelves.current.canNotViewTheParticipantList}\n );\n }\n\n if (parsedSelves.updates.isSharingBlockedChanged) {\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n LOCUSINFO.EVENTS.SELF_IS_SHARING_BLOCKED_CHANGE,\n {isSharingBlocked: parsedSelves.current.isSharingBlocked}\n );\n }\n\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateSelf',\n },\n EVENTS.LOCUS_INFO_UPDATE_SELF,\n {\n oldSelf: parsedSelves.previous,\n newSelf: parsedSelves.current,\n }\n );\n this.parsedLocus.self = parsedSelves.current;\n // @ts-ignore\n this.self = self;\n } else {\n this.compareAndUpdateFlags.compareHostAndSelf = false;\n }\n }\n\n /**\n * handles when the locus.url is updated\n * @param {String} url\n * @param {Boolean} isMainLocus\n * @returns {undefined}\n * emits internal event locus_info_update_url\n */\n updateLocusUrl(url: string, isMainLocus = true) {\n if (url && this.url !== url) {\n this.url = url;\n this.updateMeeting({locusUrl: url});\n this.emitScoped(\n {\n file: 'locus-info',\n function: 'updateLocusUrl',\n },\n EVENTS.LOCUS_INFO_UPDATE_URL,\n {url, isMainLocus}\n );\n }\n }\n\n /**\n * @param {String} aclUrl\n * @returns {undefined}\n * @memberof LocusInfo\n */\n updateAclUrl(aclUrl: string) {\n if (aclUrl && !isEqual(this.aclUrl, aclUrl)) {\n this.aclUrl = aclUrl;\n }\n }\n\n /**\n * @param {Number} baseSequence\n * @returns {undefined}\n * @memberof LocusInfo\n */\n updateBasequence(baseSequence: number) {\n if (baseSequence && !isEqual(this.baseSequence, baseSequence)) {\n this.baseSequence = baseSequence;\n }\n }\n\n /**\n * @param {Number} sequence\n * @returns {undefined}\n * @memberof LocusInfo\n */\n updateSequence(sequence: number) {\n if (sequence && !isEqual(this.sequence, sequence)) {\n this.sequence = sequence;\n }\n }\n\n /**\n * check the locus is main session's one or not, if is main session's, update main session cache\n * @param {Object} locus\n * @returns {undefined}\n * @memberof LocusInfo\n */\n updateLocusCache(locus: any) {\n const isMainSessionDTO = ControlsUtils.isMainSessionDTO(locus);\n if (isMainSessionDTO) {\n this.updateMainSessionLocusCache(locus);\n }\n }\n\n /**\n * if return from breakout to main session, need to use cached main session DTO since locus won't send the full locus (participants)\n * if join breakout from main session, main session is not active for the attendee and remove main session locus cache\n * @param {Object} newLocus\n * @returns {Object}\n * @memberof LocusInfo\n */\n getTheLocusToUpdate(newLocus: any) {\n const switchStatus = ControlsUtils.getSessionSwitchStatus(this, newLocus);\n\n if (switchStatus.isReturnToMain && this.mainSessionLocusCache) {\n return cloneDeep(this.mainSessionLocusCache);\n }\n const isMainSessionDTO =\n this.mainSessionLocusCache && ControlsUtils.isMainSessionDTO(this.mainSessionLocusCache);\n\n if (isMainSessionDTO) {\n const isActive =\n [LOCUS.STATE.ACTIVE, LOCUS.STATE.INITIALIZING, LOCUS.STATE.TERMINATING].includes(\n this.fullState?.state\n ) && !this.mainSessionLocusCache?.self?.removed;\n\n if (!isActive) {\n this.clearMainSessionLocusCache();\n }\n }\n\n return newLocus;\n }\n\n /**\n * merge participants by participant id\n * @param {Array} participants\n * @param {Array} sourceParticipants\n * @returns {Array} merged participants\n * @memberof LocusInfo\n */\n // eslint-disable-next-line class-methods-use-this\n mergeParticipants(participants, sourceParticipants) {\n if (!sourceParticipants || !sourceParticipants.length) return participants;\n if (!participants || !participants.length) {\n return sourceParticipants;\n }\n sourceParticipants.forEach((participant) => {\n const existIndex = participants.findIndex((p) => p.id === participant.id);\n if (existIndex > -1) {\n participants.splice(existIndex, 1, participant);\n } else {\n participants.push(participant);\n }\n });\n\n return participants;\n }\n\n /**\n * need cache main sessions' participants since locus will not send the full list when cohost/host leave breakout\n * @param {Object} mainLocus\n * @returns {undefined}\n * @memberof LocusInfo\n */\n updateMainSessionLocusCache(mainLocus: any) {\n if (!mainLocus) {\n return;\n }\n const locusClone = cloneDeep(mainLocus);\n if (this.mainSessionLocusCache) {\n // shallow merge and do special merge for participants\n assignWith(this.mainSessionLocusCache, locusClone, (objValue, srcValue, key) => {\n if (key === 'participants') {\n return this.mergeParticipants(objValue, srcValue);\n }\n\n return srcValue || objValue;\n });\n } else {\n this.mainSessionLocusCache = locusClone;\n }\n }\n\n /**\n * clear main session cache\n * @returns {undefined}\n * @memberof LocusInfo\n */\n clearMainSessionLocusCache() {\n this.mainSessionLocusCache = null;\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,IAAAA,OAAA,GAAAC,OAAA;AAEA,IAAAC,YAAA,GAAAC,sBAAA,CAAAF,OAAA;AACA,IAAAG,YAAA,GAAAD,sBAAA,CAAAF,OAAA;AACA,IAAAI,UAAA,GAAAJ,OAAA;AAmBA,IAAAK,UAAA,GAAAH,sBAAA,CAAAF,OAAA;AACA,IAAAM,UAAA,GAAAJ,sBAAA,CAAAF,OAAA;AACA,IAAAO,UAAA,GAAAL,sBAAA,CAAAF,OAAA;AACA,IAAAQ,UAAA,GAAAN,sBAAA,CAAAF,OAAA;AACA,IAAAS,cAAA,GAAAP,sBAAA,CAAAF,OAAA;AACA,IAAAU,kBAAA,GAAAR,sBAAA,CAAAF,OAAA;AACA,IAAAW,iBAAA,GAAAT,sBAAA,CAAAF,OAAA;AACA,IAAAY,OAAA,GAAAV,sBAAA,CAAAF,OAAA;AACA,IAAAa,QAAA,GAAAX,sBAAA,CAAAF,OAAA;AACA,IAAAc,WAAA,GAAAZ,sBAAA,CAAAF,OAAA;AACA,IAAAe,eAAA,GAAAC,uBAAA,CAAAhB,OAAA;AAOA,IAAAiB,MAAA,GAAAjB,OAAA;AAAsE,SAAAgB,wBAAAE,CAAA,EAAAC,CAAA,6BAAAC,QAAA,MAAAC,CAAA,OAAAD,QAAA,IAAAE,CAAA,OAAAF,QAAA,YAAAJ,uBAAA,YAAAA,wBAAAE,CAAA,EAAAC,CAAA,SAAAA,CAAA,IAAAD,CAAA,IAAAA,CAAA,CAAAK,UAAA,SAAAL,CAAA,MAAAM,CAAA,EAAAC,CAAA,EAAAC,CAAA,KAAAC,SAAA,QAAAC,OAAA,EAAAV,CAAA,iBAAAA,CAAA,gBAAAW,OAAA,CAAAX,CAAA,0BAAAA,CAAA,SAAAQ,CAAA,MAAAF,CAAA,GAAAL,CAAA,GAAAG,CAAA,GAAAD,CAAA,QAAAG,CAAA,CAAAM,GAAA,CAAAZ,CAAA,UAAAM,CAAA,CAAAO,GAAA,CAAAb,CAAA,GAAAM,CAAA,CAAAQ,GAAA,CAAAd,CAAA,EAAAQ,CAAA,cAAAO,GAAA,IAAAf,CAAA,gBAAAe,GAAA,OAAAC,cAAA,CAAAC,IAAA,CAAAjB,CAAA,EAAAe,GAAA,OAAAR,CAAA,IAAAD,CAAA,GAAAY,sBAAA,KAAAC,gCAAA,CAAAnB,CAAA,EAAAe,GAAA,OAAAR,CAAA,CAAAM,GAAA,IAAAN,CAAA,CAAAO,GAAA,IAAAR,CAAA,CAAAE,CAAA,EAAAO,GAAA,EAAAR,CAAA,IAAAC,CAAA,CAAAO,GAAA,IAAAf,CAAA,CAAAe,GAAA,WAAAP,CAAA,KAAAR,CAAA,EAAAC,CAAA;AAAA,SAAAmB,2BAAAjB,CAAA,EAAAH,CAAA,QAAAC,CAAA,yBAAAoB,OAAA,IAAAlB,CAAA,CAAAmB,gBAAA,KAAAnB,CAAA,qBAAAF,CAAA,QAAAsB,eAAA,CAAApB,CAAA,MAAAF,CAAA,GAAAuB,2BAAA,CAAArB,CAAA,MAAAH,CAAA,IAAAG,CAAA,uBAAAA,CAAA,CAAAsB,MAAA,IAAAxB,CAAA,KAAAE,CAAA,GAAAF,CAAA,OAAAyB,EAAA,MAAAC,CAAA,YAAAA,EAAA,eAAAC,CAAA,EAAAD,CAAA,EAAAvB,CAAA,WAAAA,EAAA,WAAAsB,EAAA,IAAAvB,CAAA,CAAAsB,MAAA,KAAAI,IAAA,WAAAA,IAAA,MAAAC,KAAA,EAAA3B,CAAA,CAAAuB,EAAA,UAAA1B,CAAA,WAAAA,EAAAG,CAAA,UAAAA,CAAA,KAAAK,CAAA,EAAAmB,CAAA,gBAAAI,SAAA,iJAAAzB,CAAA,EAAA0B,CAAA,OAAAC,CAAA,gBAAAL,CAAA,WAAAA,EAAA,IAAA3B,CAAA,GAAAA,CAAA,CAAAgB,IAAA,CAAAd,CAAA,MAAAC,CAAA,WAAAA,EAAA,QAAAD,CAAA,GAAAF,CAAA,CAAAiC,IAAA,WAAAF,CAAA,GAAA7B,CAAA,CAAA0B,IAAA,EAAA1B,CAAA,KAAAH,CAAA,WAAAA,EAAAG,CAAA,IAAA8B,CAAA,OAAA3B,CAAA,GAAAH,CAAA,KAAAK,CAAA,WAAAA,EAAA,UAAAwB,CAAA,YAAA/B,CAAA,CAAAkC,MAAA,IAAAlC,CAAA,CAAAkC,MAAA,oBAAAF,CAAA,QAAA3B,CAAA;AAAA,SAAAkB,4BAAArB,CAAA,EAAA6B,CAAA,QAAA7B,CAAA,2BAAAA,CAAA,SAAAiC,iBAAA,CAAAjC,CAAA,EAAA6B,CAAA,OAAA/B,CAAA,MAAAoC,QAAA,CAAApB,IAAA,CAAAd,CAAA,EAAAmC,KAAA,6BAAArC,CAAA,IAAAE,CAAA,CAAAoC,WAAA,KAAAtC,CAAA,GAAAE,CAAA,CAAAoC,WAAA,CAAAC,IAAA,aAAAvC,CAAA,cAAAA,CAAA,GAAAwC,WAAA,CAAAtC,CAAA,oBAAAF,CAAA,+CAAAyC,IAAA,CAAAzC,CAAA,IAAAmC,iBAAA,CAAAjC,CAAA,EAAA6B,CAAA;AAAA,SAAAI,kBAAAjC,CAAA,EAAA6B,CAAA,aAAAA,CAAA,IAAAA,CAAA,GAAA7B,CAAA,CAAAsB,MAAA,MAAAO,CAAA,GAAA7B,CAAA,CAAAsB,MAAA,YAAAzB,CAAA,MAAAI,CAAA,GAAAuC,KAAA,CAAAX,CAAA,GAAAhC,CAAA,GAAAgC,CAAA,EAAAhC,CAAA,IAAAI,CAAA,CAAAJ,CAAA,IAAAG,CAAA,CAAAH,CAAA,UAAAI,CAAA;AAAA,SAAAwC,QAAA5C,CAAA,EAAAG,CAAA,QAAAF,CAAA,GAAA4C,YAAA,CAAA7C,CAAA,OAAA8C,6BAAA,QAAAxC,CAAA,GAAAwC,6BAAA,CAAA9C,CAAA,GAAAG,CAAA,KAAAG,CAAA,GAAAA,CAAA,CAAAyC,MAAA,WAAA5C,CAAA,WAAAgB,gCAAA,CAAAnB,CAAA,EAAAG,CAAA,EAAA6C,UAAA,OAAA/C,CAAA,CAAAgD,IAAA,CAAAC,KAAA,CAAAjD,CAAA,EAAAK,CAAA,YAAAL,CAAA;AAAA,SAAAkD,cAAAnD,CAAA,aAAAG,CAAA,MAAAA,CAAA,GAAAiD,SAAA,CAAA3B,MAAA,EAAAtB,CAAA,UAAAF,CAAA,WAAAmD,SAAA,CAAAjD,CAAA,IAAAiD,SAAA,CAAAjD,CAAA,QAAAA,CAAA,OAAAyC,OAAA,CAAAS,MAAA,CAAApD,CAAA,OAAAqD,OAAA,WAAAnD,CAAA,QAAAoD,gBAAA,CAAA7C,OAAA,EAAAV,CAAA,EAAAG,CAAA,EAAAF,CAAA,CAAAE,CAAA,SAAAqD,iCAAA,GAAAC,wBAAA,CAAAzD,CAAA,EAAAwD,iCAAA,CAAAvD,CAAA,KAAA2C,OAAA,CAAAS,MAAA,CAAApD,CAAA,GAAAqD,OAAA,WAAAnD,CAAA,IAAAe,sBAAA,CAAAlB,CAAA,EAAAG,CAAA,EAAAgB,gCAAA,CAAAlB,CAAA,EAAAE,CAAA,iBAAAH,CAAA;AAAA,SAAA0D,WAAAzD,CAAA,EAAAK,CAAA,EAAAN,CAAA,WAAAM,CAAA,OAAAqD,gBAAA,CAAAjD,OAAA,EAAAJ,CAAA,OAAAsD,2BAAA,CAAAlD,OAAA,EAAAT,CAAA,EAAA4D,yBAAA,KAAAC,kBAAA,CAAAxD,CAAA,EAAAN,CAAA,YAAA2D,gBAAA,CAAAjD,OAAA,EAAAT,CAAA,EAAAsC,WAAA,IAAAjC,CAAA,CAAA4C,KAAA,CAAAjD,CAAA,EAAAD,CAAA;AAAA,SAAA6D,0BAAA,cAAA5D,CAAA,IAAA8D,OAAA,CAAAC,SAAA,CAAAC,OAAA,CAAAhD,IAAA,CAAA6C,kBAAA,CAAAC,OAAA,iCAAA9D,CAAA,aAAA4D,yBAAA,YAAAA,0BAAA,aAAA5D,CAAA;AAUtE;AACA;AACA,IAAMiE,oBAAoB,GAAG,CAC3B,UAAU,EACV,WAAW,EACX,MAAM,EACN,MAAM,EACN,OAAO,EACP,aAAa,EACb,UAAU,EACV,cAAc,EACd,UAAU,EACV,MAAM,EACN,UAAU,EACV,SAAS,EACT,KAAK,EACL,QAAQ,CAAE;AAAA,CACX;AAOD,IAAMC,4BAA4B,GAAG;EACnCC,SAAS,EAAE,WAAW;EACtBC,OAAO,EAAE,SAAS;EAClBC,OAAO,EAAE;AACX,CAAU;AAIV;AACA;AACA;AACA;AACA;AACA;AALA,IAMqBC,SAAS,GAAAC,OAAA,CAAA9D,OAAA,0BAAA+D,YAAA;EA+B5B;AACF;AACA;AACA;AACA;AACA;AACA;EACE,SAAAF,UAAYG,aAAa,EAAEC,KAAK,EAAEC,SAAS,EAAE;IAAA,IAAAC,KAAA;IAAA,IAAAC,gBAAA,CAAApE,OAAA,QAAA6D,SAAA;IAC3CM,KAAA,GAAAnB,UAAA,OAAAa,SAAA;IAAQ,IAAAhB,gBAAA,CAAA7C,OAAA,EAAAmE,KAAA;IAAA,IAAAtB,gBAAA,CAAA7C,OAAA,EAAAmE,KAAA;IAAA,IAAAtB,gBAAA,CAAA7C,OAAA,EAAAmE,KAAA;IAAA,IAAAtB,gBAAA,CAAA7C,OAAA,EAAAmE,KAAA;IAAA,IAAAtB,gBAAA,CAAA7C,OAAA,EAAAmE,KAAA;IAAA,IAAAtB,gBAAA,CAAA7C,OAAA,EAAAmE,KAAA;IAAA,IAAAtB,gBAAA,CAAA7C,OAAA,EAAAmE,KAAA;IAAA,IAAAtB,gBAAA,CAAA7C,OAAA,EAAAmE,KAAA;IAAA,IAAAtB,gBAAA,CAAA7C,OAAA,EAAAmE,KAAA;IAAA,IAAAtB,gBAAA,CAAA7C,OAAA,EAAAmE,KAAA;IAAA,IAAAtB,gBAAA,CAAA7C,OAAA,EAAAmE,KAAA;IAAA,IAAAtB,gBAAA,CAAA7C,OAAA,EAAAmE,KAAA;IAAA,IAAAtB,gBAAA,CAAA7C,OAAA,EAAAmE,KAAA;IAAA,IAAAtB,gBAAA,CAAA7C,OAAA,EAAAmE,KAAA;IAAA,IAAAtB,gBAAA,CAAA7C,OAAA,EAAAmE,KAAA;IAAA,IAAAtB,gBAAA,CAAA7C,OAAA,EAAAmE,KAAA;IAAA,IAAAtB,gBAAA,CAAA7C,OAAA,EAAAmE,KAAA;IAAA,IAAAtB,gBAAA,CAAA7C,OAAA,EAAAmE,KAAA;IAAA,IAAAtB,gBAAA,CAAA7C,OAAA,EAAAmE,KAAA;IAAA,IAAAtB,gBAAA,CAAA7C,OAAA,EAAAmE,KAAA;IAAA,IAAAtB,gBAAA,CAAA7C,OAAA,EAAAmE,KAAA;IAAA,IAAAtB,gBAAA,CAAA7C,OAAA,EAAAmE,KAAA;IAAA,IAAAtB,gBAAA,CAAA7C,OAAA,EAAAmE,KAAA;IAAA,IAAAtB,gBAAA,CAAA7C,OAAA,EAAAmE,KAAA;IAAA,IAAAtB,gBAAA,CAAA7C,OAAA,EAAAmE,KAAA;IAAA,IAAAtB,gBAAA,CAAA7C,OAAA,EAAAmE,KAAA;IAAA,IAAAtB,gBAAA,CAAA7C,OAAA,EAAAmE,KAAA;IAAA,IAAAtB,gBAAA,CAAA7C,OAAA,EAAAmE,KAAA;IAX2C;IAAA,IAAAtB,gBAAA,CAAA7C,OAAA,EAAAmE,KAAA,4CACZ,CAAC;IAWxCA,KAAA,CAAKE,WAAW,GAAG;MACjBC,MAAM,EAAE;IACV,CAAC;IACDH,KAAA,CAAKF,KAAK,GAAGA,KAAK;IAClBE,KAAA,CAAKI,UAAU,GAAG,KAAK;IACvBJ,KAAA,CAAKK,qBAAqB,GAAG,CAAC,CAAC;IAC/BL,KAAA,CAAKD,SAAS,GAAGA,SAAS;IAC1BC,KAAA,CAAKH,aAAa,GAAGA,aAAa;IAClCG,KAAA,CAAKM,WAAW,GAAG,IAAIC,eAAgB,CAAC,CAAC;IACzCP,KAAA,CAAKQ,8BAA8B,GAAG,IAAAC,IAAA,CAAA5E,OAAA,CAAQ,CAAC;IAAC,OAAAmE,KAAA;EAClD;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EARE,IAAAU,UAAA,CAAA7E,OAAA,EAAA6D,SAAA,EAAAE,YAAA;EAAA,WAAAe,aAAA,CAAA9E,OAAA,EAAA6D,SAAA;IAAAkB,GAAA;IAAA3D,KAAA,EASA,SAAQ4D,WAAWA,CAACC,OAAY,EAAEC,iBAA0B,EAAEC,KAAU,EAAE;MAAA,IAAAC,qBAAA;QAAAC,MAAA;MACxE,IAAIC,GAAG;MACP,IAAIC,OAAO,GAAG,KAAK;MACnB,IAAIC,gBAAgB,GAAG,KAAK;MAE5B,IAAIN,iBAAiB,EAAE;QACrB;QACA;QACA;QACA;QACAI,GAAG,GAAGH,KAAK,CAACG,GAAG;MACjB,CAAC,MAAM,KAAAF,qBAAA,GAAI,IAAI,CAACX,WAAW,CAACgB,WAAW,cAAAL,qBAAA,eAA5BA,qBAAA,CAA8BM,OAAO,EAAE;QAChDJ,GAAG,GAAG,IAAI,CAACb,WAAW,CAACgB,WAAW,CAACC,OAAO;QAC1CH,OAAO,GAAG,IAAI;MAChB,CAAC,MAAM;QACLD,GAAG,GAAGL,OAAO,CAACU,QAAQ;MACxB;MAEAC,oBAAW,CAACC,MAAM,CAACC,IAAI,+DAAAC,MAAA,CAEnBR,OAAO,GAAG,OAAO,GAAG,MAAM,UAE9B,CAAC;;MAED;MACAN,OAAO,CAACe,cAAc,CACnBC,WAAW,CAAC;QAACX,GAAG,EAAHA;MAAG,CAAC,CAAC,CAClBY,KAAK,CAAC,UAAC5G,CAAC,EAAK;QACZ,IAAIiG,OAAO,EAAE;UACXK,oBAAW,CAACC,MAAM,CAACC,IAAI,CACrB,+EACF,CAAC;UAEDK,gBAAO,CAACC,oBAAoB,CAACC,mBAAkB,CAACC,uBAAuB,EAAE;YACvEC,aAAa,EAAEtB,OAAO,CAACsB,aAAa;YACpCjB,GAAG,EAAHA,GAAG;YACHkB,MAAM,EAAElH,CAAC,CAACmH,OAAO;YACjBC,SAAS,EAAEpH,CAAC,CAACwC,IAAI;YACjB6E,KAAK,EAAErH,CAAC,CAACqH,KAAK;YACdC,IAAI,EAAEtH,CAAC,CAACsH;UACV,CAAC,CAAC;UAEFrB,OAAO,GAAG,KAAK;;UAEf;UACA,IAAIjG,CAAC,CAACuH,UAAU,KAAK,GAAG,EAAE;YACxB,OAAO5B,OAAO,CAACe,cAAc,CAACC,WAAW,CAAC;cAACX,GAAG,EAAEL,OAAO,CAACU;YAAQ,CAAC,CAAC,CAACO,KAAK,CAAC,UAACY,GAAG,EAAK;cAChFlB,oBAAW,CAACC,MAAM,CAACC,IAAI,CACrB,oFACF,CAAC;cACDT,MAAI,CAACpB,KAAK,CAAC8C,QAAQ,CAACC,OAAO,CAAC/B,OAAO,EAAEgC,iCAAsB,CAACC,qBAAqB,CAAC;cAClF1B,gBAAgB,GAAG,IAAI;cACvB,MAAMsB,GAAG;YACX,CAAC,CAAC;UACJ;UACAlB,oBAAW,CAACC,MAAM,CAACC,IAAI,CACrB,6GACF,CAAC;QACH,CAAC,MAAM;UACLF,oBAAW,CAACC,MAAM,CAACC,IAAI,CACrB,oFACF,CAAC;QACH;QACAT,MAAI,CAACpB,KAAK,CAAC8C,QAAQ,CAACC,OAAO,CAAC/B,OAAO,EAAEgC,iCAAsB,CAACC,qBAAqB,CAAC;QAClF1B,gBAAgB,GAAG,IAAI;QACvB,MAAMlG,CAAC;MACT,CAAC,CAAC,CACD6H,IAAI,CAAC,UAACC,GAAG,EAAK;QACb,IAAI,IAAAC,eAAO,EAACD,GAAG,CAACE,IAAI,CAAC,EAAE;UACrB,IAAI/B,OAAO,EAAE;YACXK,oBAAW,CAACC,MAAM,CAACC,IAAI,CACrB,wGACF,CAAC;UACH,CAAC,MAAM;YACLF,oBAAW,CAACC,MAAM,CAACC,IAAI,CACrB,iFACF,CAAC;UACH;UAEA;QACF;QAEA,IAAIP,OAAO,EAAE;UACX,IAAI6B,GAAG,CAACE,IAAI,CAACC,YAAY,EAAE;YACzBtC,OAAO,CAACuC,SAAS,CAACC,gBAAgB,CAACL,GAAG,CAACE,IAAI,EAAErC,OAAO,CAAC;YAErD;UACF;UACA;UACAW,oBAAW,CAACC,MAAM,CAACC,IAAI,CACrB,uEACF,CAAC;QACH;QACAb,OAAO,CAACuC,SAAS,CAACE,WAAW,CAACN,GAAG,CAACE,IAAI,CAAC;MACzC,CAAC,CAAC,CACDpB,KAAK,CAAC,UAAC5G,CAAC,EAAK;QACZsG,oBAAW,CAACC,MAAM,CAACC,IAAI,iJAAAC,MAAA,CAC2HzG,CAAC,CAACqC,QAAQ,CAAC,CAAC,MAC9J,CAAC;QAEDwE,gBAAO,CAACC,oBAAoB,CAACC,mBAAkB,CAACsB,0BAA0B,EAAE;UAC1EpB,aAAa,EAAEtB,OAAO,CAACsB,aAAa;UACpCjB,GAAG,EAAHA,GAAG;UACHkB,MAAM,EAAElH,CAAC,CAACmH,OAAO;UACjBC,SAAS,EAAEpH,CAAC,CAACwC,IAAI;UACjB6E,KAAK,EAAErH,CAAC,CAACqH,KAAK;UACdC,IAAI,EAAEtH,CAAC,CAACsH;QACV,CAAC,CAAC;MACJ,CAAC,CAAC,CACDgB,OAAO,CAAC,YAAM;QACb,IAAI,CAACpC,gBAAgB,EAAE;UACrB;UACA;UACAH,MAAI,CAACZ,WAAW,CAACoD,MAAM,CAAC,CAAC;QAC3B;MACF,CAAC,CAAC;IACN;;IAEA;AACF;AACA;AACA;AACA;AACA;AACA;EANE;IAAA9C,GAAA;IAAA3D,KAAA,EAOA,SAAA0G,mBAAmBA,CAACC,MAAc,EAAE5C,KAAU,EAAEF,OAAY,EAAE;MAC5D,IAAA+C,qBAAA,GAAqEtD,eAAgB,CAACuD,IAAI;QAAnFC,MAAM,GAAAF,qBAAA,CAANE,MAAM;QAAEC,WAAW,GAAAH,qBAAA,CAAXG,WAAW;QAAEC,YAAY,GAAAJ,qBAAA,CAAZI,YAAY;QAAEC,IAAI,GAAAL,qBAAA,CAAJK,IAAI;QAAEC,iBAAiB,GAAAN,qBAAA,CAAjBM,iBAAiB;MACjE,IAAMpD,iBAAiB,GAAG6C,MAAM,KAAKO,iBAAiB;MAEtD,QAAQP,MAAM;QACZ,KAAKK,YAAY;UACfnD,OAAO,CAACuC,SAAS,CAACe,YAAY,CAACpD,KAAK,CAAC;UACrC;QACF,KAAKgD,WAAW;QAChB,KAAKE,IAAI;UACP;UACA;QACF,KAAKH,MAAM;QACX,KAAKI,iBAAiB;UACpB,IAAI,CAACtD,WAAW,CAACC,OAAO,EAAEC,iBAAiB,EAAEC,KAAK,CAAC;UACnD;QACF;UACES,oBAAW,CAACC,MAAM,CAACC,IAAI,yEAAAC,MAAA,CACmDgC,MAAM,CAChF,CAAC;MACL;IACF;;IAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;EAPE;IAAAhD,GAAA;IAAA3D,KAAA,EAQA,SAAAqG,gBAAgBA,CAACtC,KAAU,EAAEF,OAAY,EAAE;MAAA,IAAAuD,MAAA;MACzC;MACA,IAAI,CAAC,IAAI,CAAC/D,WAAW,CAACgE,aAAa,EAAE;QACnC;QACA;QACA,IAAI,CAAChE,WAAW,CAACgE,aAAa,GAAG,UAACV,MAAM,EAAEW,UAAU,EAAK;UACvDF,MAAI,CAACV,mBAAmB,CAACC,MAAM,EAAEW,UAAU,EAAEzD,OAAO,CAAC;QACvD,CAAC;MACH;MACA;MACA,IAAI,CAACR,WAAW,CAACkE,YAAY,CAACxD,KAAK,CAAC;IACtC;;IAEA;AACF;AACA;AACA;AACA;EAJE;IAAAJ,GAAA;IAAA3D,KAAA,EAKA,SAAAwH,IAAIA,CAAA,EAAkB;MAAA,IAAjBzD,KAAU,GAAAzC,SAAA,CAAA3B,MAAA,QAAA2B,SAAA,QAAAmG,SAAA,GAAAnG,SAAA,MAAG,CAAC,CAAC;MAClB,IAAI,CAACoG,OAAO,GAAG3D,KAAK,CAAC2D,OAAO,IAAI,IAAI;MACpC,IAAI,CAACC,gBAAgB,GAAG5D,KAAK,CAACF,OAAO,IAAI,IAAI;MAC7C,IAAI,CAAC+D,QAAQ,GAAG7D,KAAK,CAAC6D,QAAQ,IAAI,IAAI;MACtC,IAAI,CAACC,MAAM,GAAG9D,KAAK,CAAC8D,MAAM,IAAI,IAAI;MAClC,IAAI,CAAC1B,YAAY,GAAGpC,KAAK,CAACoC,YAAY,IAAI,IAAI;MAC9C,IAAI,CAAC2B,QAAQ,GAAG/D,KAAK,CAAC+D,QAAQ,IAAI,IAAI;MACtC,IAAI,CAACC,YAAY,GAAGhE,KAAK,CAACgE,YAAY,IAAI,IAAI;;MAE9C;AACJ;AACA;AACA;AACA;AACA;AACA;;MAEI,IAAI,CAACC,gBAAgB,CAACjE,KAAK,CAAC;MAC5B;MACA;MACA,IAAI,CAACkE,kBAAkB,CAAClE,KAAK,CAACgE,YAAY,EAAE,EAAE,CAAC;MAC/C;MACA,IAAI,CAACG,qBAAqB,CAACnE,KAAK,CAACoE,eAAe,EAAEpE,KAAK,CAACW,IAAI,CAAC;MAC7D,IAAI,CAAC0D,cAAc,CAACrE,KAAK,CAACsE,QAAQ,EAAEtE,KAAK,CAACuE,IAAI,CAAC;MAC/C,IAAI,CAACC,cAAc,CAACxE,KAAK,CAACG,GAAG,EAAEsE,sBAAa,CAACC,gBAAgB,CAAC1E,KAAK,CAAC,CAAC;MACrE,IAAI,CAAC2E,eAAe,CAAC3E,KAAK,CAAC4E,SAAS,CAAC;MACrC,IAAI,CAACC,iBAAiB,CAAC7E,KAAK,CAACW,IAAI,CAAC;MAClC,IAAI,CAACmE,kBAAkB,CAAC9E,KAAK,CAAC+E,YAAY,CAAC;MAC3C;MACA,IAAI,CAACC,UAAU,CAAChF,KAAK,CAACuE,IAAI,CAAC;MAC3B,IAAI,CAACU,cAAc,CAACjF,KAAK,CAACkF,IAAI,CAAC;MAC/B,IAAI,CAACC,iBAAiB,CAACnF,KAAK,CAACoF,WAAW,CAAC;MACzC,IAAI,CAACC,WAAW,CAACrF,KAAK,CAACsF,KAAK,CAAC;IAC/B;;IAEA;AACF;AACA;AACA;AACA;EAJE;IAAA1F,GAAA;IAAA3D,KAAA,EAKA,SAAQsJ,oBAAoBA,CAAAC,IAAA,EAOzB;MAAA,IANDC,YAAY,GAAAD,IAAA,CAAZC,YAAY;MAOZ,OAAO,IAAIC,uBAAc,CAAC;QACxBD,YAAY,EAAZA,YAAY;QACZE,YAAY,EAAE,IAAI,CAAC7G,KAAK,CAAC8G,OAAO,CAACC,IAAI,CAAC,IAAI,CAAC/G,KAAK,CAAC;QACjDgH,uBAAuB,EAAE,IAAI,CAACC,kBAAkB,CAACF,IAAI,CAAC,IAAI,CAAC;QAC3DG,OAAO,QAAApF,MAAA,CAAQ,IAAI,CAAC7B,SAAS,CAACkH,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC;MAC/C,CAAC,CAAC;IACJ;;IAEA;AACF;AACA;AACA;AACA;EAJE;IAAArG,GAAA;IAAA3D,KAAA;MAAA,IAAAiK,aAAA,OAAAC,kBAAA,CAAAtL,OAAA,eAAAuL,YAAA,CAAAvL,OAAA,CAAAwL,IAAA,CAKA,SAAAC,QACEC,IAcK;QAAA,IAAAC,WAAA,EAAAC,iBAAA,EAAAC,qBAAA,EAAAC,sBAAA;QAAA,IAAAC,qBAAA,EAAAC,gBAAA,EAAAC,UAAA,EAAAC,YAAA,EAAAC,iBAAA,EAAAC,EAAA;QAAA,OAAAb,YAAA,CAAAvL,OAAA,CAAAqM,IAAA,WAAAC,QAAA;UAAA,kBAAAA,QAAA,CAAAC,IAAA,GAAAD,QAAA,CAAA9K,IAAA;YAAA;cAAA4K,EAAA,GAEGV,IAAI,CAACc,OAAO;cAAAF,QAAA,CAAA9K,IAAA,GAAA4K,EAAA,KACb,eAAe,OAAAA,EAAA,KAkCf,eAAe,OAAAA,EAAA,KAIf,mBAAmB;cAAA;YAAA;cAAA,KArClBV,IAAI,CAACe,eAAe;gBAAAH,QAAA,CAAA9K,IAAA;gBAAA;cAAA;cACtB;cACA;cACMyK,UAAU,IAAAF,qBAAA,GAAGL,IAAI,CAACe,eAAe,CAACC,kBAAkB,cAAAX,qBAAA,uBAAvCA,qBAAA,CAAyCY,IAAI,CAAC,UAACC,EAAE;gBAAA,OAAK,IAAAC,sBAAM,EAACD,EAAE,CAAC;cAAA,EAAC;cAAA,IAE/EX,UAAU,aAAVA,UAAU,gBAAAD,gBAAA,GAAVC,UAAU,CAAEP,IAAI,cAAAM,gBAAA,eAAhBA,gBAAA,CAAkBc,eAAe;gBAAAR,QAAA,CAAA9K,IAAA;gBAAA;cAAA;cACpCoE,oBAAW,CAACC,MAAM,CAACkH,IAAI,iIAEvB,CAAC;cAAC,MAEI,IAAIC,KAAK,CAAC,4DAA4D,CAAC;YAAA;cAG/EpH,oBAAW,CAACC,MAAM,CAACC,IAAI,CACrB,wEACF,CAAC;cACD;cACA;cACA,IAAI,CAACmH,cAAc,GAAG,IAAI,CAACvC,oBAAoB,CAAC;gBAC9CE,YAAY,EAAE;kBACZzF,KAAK,EAAE;oBAACuE,IAAI,EAAE;sBAACoD,eAAe,EAAEb,UAAU,CAACP,IAAI,CAACoB;oBAAe;kBAAC,CAAC;kBACjEI,QAAQ,EAAE,EAAE,CAAE;gBAChB;cACF,CAAC,CAAC;;cAEF;cAAAZ,QAAA,CAAA9K,IAAA;cAAA,OACM,IAAI,CAACyL,cAAc,CAACE,qBAAqB,CAACzB,IAAI,CAACe,eAAe,CAAC;YAAA;cAAAH,QAAA,CAAA9K,IAAA;cAAA;YAAA;cAErE;cACA,IAAI,CAAC4H,gBAAgB,CAACsC,IAAI,CAACvG,KAAK,CAAC;cACjC,IAAI,CAACuC,WAAW,CAACgE,IAAI,CAACvG,KAAK,EAAE0D,SAAS,CAAC;YAAC;cAAA,OAAAyD,QAAA,CAAAc,MAAA;YAAA;cAI1C,IAAI,CAAChE,gBAAgB,CAACsC,IAAI,CAACvG,KAAK,CAAC;cACjC,IAAI,CAACuC,WAAW,CAACgE,IAAI,CAACvG,KAAK,EAAE0D,SAAS,EAAE6C,IAAI,CAACwB,QAAQ,CAAC;cAAC,OAAAZ,QAAA,CAAAc,MAAA;YAAA;cAAA,OAAAzB,WAAA,GAGnDD,IAAI,CAACvG,KAAK,cAAAwG,WAAA,gBAAAC,iBAAA,GAAVD,WAAA,CAAYlB,KAAK,cAAAmB,iBAAA,gBAAAC,qBAAA,GAAjBD,iBAAA,CAAmByB,SAAS,cAAAxB,qBAAA,gBAAAC,sBAAA,GAA5BD,qBAAA,CAA8BiB,eAAe,cAAAhB,sBAAA,eAA7CA,sBAAA,CAA+CxG,GAAG;gBAAAgH,QAAA,CAAA9K,IAAA;gBAAA;cAAA;cACpDoE,oBAAW,CAACC,MAAM,CAACC,IAAI,CACrB,kFACF,CAAC;cACD;cACA;cACA,IAAI,CAACmH,cAAc,GAAG,IAAI,CAACvC,oBAAoB,CAAC;gBAC9CE,YAAY,EAAE;kBACZzF,KAAK,EAAE;oBAACuE,IAAI,EAAE;sBAACoD,eAAe,GAAAZ,YAAA,GAAER,IAAI,CAACvG,KAAK,cAAA+G,YAAA,wBAAAC,iBAAA,GAAVD,YAAA,CAAYxC,IAAI,cAAAyC,iBAAA,uBAAhBA,iBAAA,CAAkBW;oBAAe;kBAAC,CAAC;kBACnEI,QAAQ,EAAE,EAAE,CAAE;gBAChB;cACF,CAAC,CAAC;;cAEF;cAAAZ,QAAA,CAAA9K,IAAA;cAAA,OACM,IAAI,CAACyL,cAAc,CAACK,6BAA6B,CAAC5B,IAAI,CAACvG,KAAK,CAAC;YAAA;cAAAmH,QAAA,CAAA9K,IAAA;cAAA;YAAA;cAEnE;cACA,IAAI,CAAC4H,gBAAgB,CAACsC,IAAI,CAACvG,KAAK,CAAC;cACjC,IAAI,CAACuC,WAAW,CAACgE,IAAI,CAACvG,KAAK,EAAE0D,SAAS,CAAC;YAAC;cAG9C;cACA,IAAI,CAACtE,UAAU,GAAG,IAAI;YAAC;YAAA;cAAA,OAAA+H,QAAA,CAAAiB,IAAA;UAAA;QAAA,GAAA9B,OAAA;MAAA,CACxB;MAAA,SAhFK+B,YAAYA,CAAAC,EAAA;QAAA,OAAApC,aAAA,CAAA7I,KAAA,OAAAE,SAAA;MAAA;MAAA,OAAZ8K,YAAY;IAAA;IAkFlB;AACF;AACA;AACA;AACA;AACA;IALE;EAAA;IAAAzI,GAAA;IAAA3D,KAAA,EAMA,SAAAsM,sBAAsBA,CAACzI,OAAO,EAAE0I,YAAkC,EAAQ;MACxE,IAAI,IAAI,CAACV,cAAc,EAAE;QACvB,IAAI,CAACU,YAAY,CAACT,QAAQ,EAAE;UAC1B,IAAI,CAACU,mCAAmC,CACtC3I,OAAO,oEAET,CAAC;UACD;QACF;QACAW,oBAAW,CAACC,MAAM,CAACC,IAAI,CACrB,4FAA4F,EAC5F6H,YACF,CAAC;QACD;QACA,IAAI,CAACV,cAAc,CAACY,iBAAiB,CAACF,YAAY,CAAC;MACrD,CAAC,MAAM;QACL,IAAIA,YAAY,CAACT,QAAQ,EAAE;UACzB,IAAI,CAACU,mCAAmC,CACtC3I,OAAO,iDAET,CAAC;QACH;QACA;QACA,IAAI,CAACwC,gBAAgB,CAACkG,YAAY,CAACxI,KAAK,EAAEF,OAAO,CAAC;MACpD;IACF;;IAEA;AACF;AACA;AACA;AACA;AACA;EALE;IAAAF,GAAA;IAAA3D,KAAA,EAMA,SAAA0M,6BAA6BA,CAACC,MAAsB,EAAE5I,KAAe,EAAY;MAAA,IAAA6I,MAAA;MAC/E,IAAMC,IAAI,GAAGF,MAAM,CAACG,MAAM,CAACC,SAAS,CAACF,IAAI,CAACG,WAAW,CAAC,CAAC;MAEvD,IAAMC,oBAAoB,GAAG,SAAvBA,oBAAoBA,CAAIC,GAAmB,EAAK;QACpD,IAAI,CAACnJ,KAAK,CAACgE,YAAY,EAAE;UACvBhE,KAAK,CAACgE,YAAY,GAAG,EAAE;QACzB;QACAhE,KAAK,CAACgE,YAAY,CAAC5G,IAAI,CAAC+L,GAAG,CAAC5C,IAAI,CAAC;QACjCsC,MAAI,CAACrJ,8BAA8B,CAACvE,GAAG,CAACkO,GAAG,CAACJ,MAAM,CAACC,SAAS,CAACI,EAAE,EAAED,GAAG,CAAC5C,IAAI,CAAC6C,EAAE,CAAC;MAC/E,CAAC;MAED,QAAQN,IAAI;QACV,KAAKO,iBAAU,CAACrJ,KAAK;UAAE;YACrB,IAAI,CAAC4I,MAAM,CAACrC,IAAI,EAAE;cAChB;cACA;cACA9F,oBAAW,CAACC,MAAM,CAACC,IAAI,qFAAAC,MAAA,CAC+DgI,MAAM,CAACG,MAAM,CAACC,SAAS,CAACM,OAAO,CACrH,CAAC;cAED,OAAOtJ,KAAK;YACd;YACA;;YAEA;YACA;YACA;YACA,IAAMuJ,mBAAmB,GAAGX,MAAM,CAACrC,IAAI;YAEvC,IAAAiD,OAAA,CAAA3O,OAAA,EAAc4O,8BAAuB,CAAC,CAAChM,OAAO,CAAC,UAACiM,WAAW,EAAK;cAC9D,OAAOH,mBAAmB,CAACG,WAAW,CAAC;YACzC,CAAC,CAAC;YAEF1J,KAAK,GAAA1C,aAAA,CAAAA,aAAA,KAAO0C,KAAK,GAAKuJ,mBAAmB,CAAC;YAC1C9I,oBAAW,CAACC,MAAM,CAACC,IAAI,uFAAAC,MAAA,CACiEgI,MAAM,CAACG,MAAM,CAACC,SAAS,CAACM,OAAO,CACvH,CAAC;YACD;UACF;QACA,KAAKD,iBAAU,CAACM,UAAU;UACxB,IAAIf,MAAM,CAACrC,IAAI,EAAE;YAAA,IAAAqD,kBAAA,EAAAC,mBAAA,EAAAC,qBAAA,EAAAC,kBAAA;YACftJ,oBAAW,CAACC,MAAM,CAACC,IAAI,qEAAAC,MAAA,CAEnBgI,MAAM,CAACG,MAAM,CAACC,SAAS,CAACI,EAAE,aAAAxI,MAAA,CAClBgI,MAAM,CAACrC,IAAI,CAAC5J,IAAI,gBAAAiE,MAAA,CACxBgI,MAAM,CAACrC,IAAI,CAAC5J,IAAI,KAAK,SAAS,YAAAiE,MAAA,EAAAgJ,kBAAA,GACjBhB,MAAM,CAACrC,IAAI,CAACyD,KAAK,cAAAJ,kBAAA,uBAAjBA,kBAAA,CAAmBK,WAAW,QAAArJ,MAAA,EAAAiJ,mBAAA,GAAKjB,MAAM,CAACrC,IAAI,CAACyD,KAAK,cAAAH,mBAAA,wBAAAC,qBAAA,GAAjBD,mBAAA,CAAmBK,WAAW,cAAAJ,qBAAA,uBAA9BA,qBAAA,CAAgCV,EAAE,IAC9E,EAAE,eAAAxI,MAAA,CACIgI,MAAM,CAACG,MAAM,CAACC,SAAS,CAACM,OAAO,CAC7C,CAAC;YACD,IAAMa,kBAAkB,IAAAJ,kBAAA,GAAG/J,KAAK,CAACoF,WAAW,cAAA2E,kBAAA,uBAAjBA,kBAAA,CAAmBvC,IAAI,CAChD,UAAC4C,EAAE;cAAA,OAAKA,EAAE,CAACrB,MAAM,CAACC,SAAS,CAACI,EAAE,KAAKR,MAAM,CAACG,MAAM,CAACC,SAAS,CAACI,EAAE;YAAA,CAC/D,CAAC;YAED,IAAIe,kBAAkB,EAAE;cACtB,IAAAE,OAAA,CAAAxP,OAAA,EAAcsP,kBAAkB,EAAEvB,MAAM,CAACrC,IAAI,CAAC;YAChD,CAAC,MAAM;cACLvG,KAAK,CAACoF,WAAW,GAAGpF,KAAK,CAACoF,WAAW,IAAI,EAAE;cAC3CpF,KAAK,CAACoF,WAAW,CAAChI,IAAI,CAACwL,MAAM,CAACrC,IAAI,CAAC;YACrC;UACF,CAAC,MAAM;YAAA,IAAA+D,mBAAA;YACL7J,oBAAW,CAACC,MAAM,CAACC,IAAI,qEAAAC,MAAA,CAC+CgI,MAAM,CAACG,MAAM,CAACC,SAAS,CAACI,EAAE,wBAAAxI,MAAA,CAAqBgI,MAAM,CAACG,MAAM,CAACC,SAAS,CAACM,OAAO,CACpJ,CAAC;YACDtJ,KAAK,CAACoF,WAAW,IAAAkF,mBAAA,GAAGtK,KAAK,CAACoF,WAAW,cAAAkF,mBAAA,uBAAjBA,mBAAA,CAAmBpN,MAAM,CAC3C,UAACkN,EAAE;cAAA,OAAKA,EAAE,CAACrB,MAAM,CAACC,SAAS,CAACI,EAAE,KAAKR,MAAM,CAACG,MAAM,CAACC,SAAS,CAACI,EAAE;YAAA,CAC/D,CAAC;UACH;UACA;QACF,KAAKC,iBAAU,CAACkB,WAAW;UACzB9J,oBAAW,CAACC,MAAM,CAACC,IAAI,sEAAAC,MAAA,CAEnBgI,MAAM,CAACG,MAAM,CAACC,SAAS,CAACI,EAAE,OAAAxI,MAAA,CACxBgI,MAAM,CAACrC,IAAI,GAAG,SAAS,GAAG,SAAS,eAAA3F,MAAA,CAAYgI,MAAM,CAACG,MAAM,CAACC,SAAS,CAACM,OAAO,CACpF,CAAC;UACD,IAAIV,MAAM,CAACrC,IAAI,EAAE;YACf2C,oBAAoB,CAACN,MAAM,CAAC;UAC9B,CAAC,MAAM;YACL,IAAM4B,aAAa,GAAG,IAAI,CAAChL,8BAA8B,CAACxE,GAAG,CAAC4N,MAAM,CAACG,MAAM,CAACC,SAAS,CAACI,EAAE,CAAC;YAEzF,IAAI,CAACpJ,KAAK,CAACyK,SAAS,EAAE;cACpBzK,KAAK,CAACyK,SAAS,GAAG;gBAACC,qBAAqB,EAAE;cAAE,CAAC;YAC/C;YACA1K,KAAK,CAACyK,SAAS,CAACC,qBAAqB,CAACtN,IAAI,CAACoN,aAAa,CAAC;YACzD,IAAI,CAAChL,8BAA8B,CAACmL,MAAM,CAAC/B,MAAM,CAACG,MAAM,CAACC,SAAS,CAACI,EAAE,CAAC;UACxE;UACA;QACF,KAAKC,iBAAU,CAAC/D,KAAK;QACrB,KAAK+D,iBAAU,CAAC1I,IAAI;QACpB,KAAK0I,iBAAU,CAACzE,SAAS;QACzB,KAAKyE,iBAAU,CAAC9E,IAAI;UAClB,IAAI,CAACqE,MAAM,CAACrC,IAAI,EAAE;YAChB;YACA;YACA9F,oBAAW,CAACC,MAAM,CAACkH,IAAI,gEAAAhH,MAAA,CAC0CkI,IAAI,0DAAAlI,MAAA,CAAuDgI,MAAM,CAACG,MAAM,CAACC,SAAS,CAACM,OAAO,CAC3J,CAAC;UACH,CAAC,MAAM;YAAA,IAAAsB,WAAA,EAAAC,qBAAA,EAAAC,sBAAA,EAAAC,sBAAA;YACLtK,oBAAW,CAACC,MAAM,CAACC,IAAI,uDAAAC,MAAA,CACiCkI,IAAI,iCAAAlI,MAAA,CAA8BgI,MAAM,CAACG,MAAM,CAACC,SAAS,CAACM,OAAO,CACzH,CAAC;YACD,IAAMI,WAAW,GAAGD,8BAAuB,CAACX,IAAI,CAAC;YACjD9I,KAAK,CAAC0J,WAAW,CAAC,GAAGd,MAAM,CAACrC,IAAI;;YAEhC;AACV;AACA;AACA;AACA;YACU,IACEuC,IAAI,KAAKO,iBAAU,CAAC9E,IAAI,KAAAqG,WAAA,GACxB5K,KAAK,CAACW,IAAI,cAAAiK,WAAA,eAAVA,WAAA,CAAYI,SAAS,KAAAH,qBAAA,GACrBjC,MAAM,CAACrC,IAAI,CAACjC,QAAQ,cAAAuG,qBAAA,gBAAAC,sBAAA,GAApBD,qBAAA,CAAsBI,IAAI,cAAAH,sBAAA,gBAAAC,sBAAA,GAA1BD,sBAAA,CAA4BI,KAAK,cAAAH,sBAAA,eAAjCA,sBAAA,CAAmCvD,IAAI,CACrC,UAAClN,CAAC;cAAA,OAAKA,CAAC,CAACwO,IAAI,KAAKqC,qBAAU,CAACC,QAAQ,IAAI9Q,CAAC,CAAC+Q,OAAO;YAAA,CACpD,CAAC,EACD;cACA5K,oBAAW,CAACC,MAAM,CAACC,IAAI,6GAEvB,CAAC;cACDuI,oBAAoB,CAACN,MAAM,CAAC;YAC9B;UACF;UACA;QACF;UACEnI,oBAAW,CAACC,MAAM,CAACkH,IAAI,wFAAAhH,MAAA,CACkEkI,IAAI,CAC7F,CAAC;UACD;MACJ;MAEA,OAAO9I,KAAK;IACd;;IAEA;AACF;AACA;AACA;AACA;AACA;AACA;EANE;IAAAJ,GAAA;IAAA3D,KAAA,EAOA,SAAAwM,mCAAmCA,CAAC3I,OAAY,EAAEwB,OAAe,EAAE;MACjEb,oBAAW,CAACC,MAAM,CAACkH,IAAI,4FAAAhH,MAAA,CACsEU,OAAO,CACpG,CAAC;;MAED;MACA,IAAI,IAAI,CAACgK,sCAAsC,GAAG,CAAC,EAAE;QACnDtK,gBAAO,CAACC,oBAAoB,CAACC,mBAAkB,CAACqK,mCAAmC,EAAE;UACnFnK,aAAa,EAAEtB,OAAO,CAACsB,aAAa;UACpCE,OAAO,EAAPA;QACF,CAAC,CAAC;QACF,IAAI,CAACgK,sCAAsC,IAAI,CAAC;MAClD;IACF;;IAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;EAPE;IAAA1L,GAAA;IAAA3D,KAAA,EAQA,SAAQuP,qBAAqBA,CAAC1L,OAAY,EAAE2L,SAAqB,EAAEnK,OAAwB,EAAE;MAC3F,IAAImK,SAAS,KAAKC,qBAAU,CAACC,sBAAsB,EAAE;QACnD,IAAI,CAAClD,mCAAmC,CACtC3I,OAAO,SAAAc,MAAA,CACA6K,SAAS,iBAAA7K,MAAA,CAAc8K,qBAAU,CAACC,sBAAsB,CACjE,CAAC;QAED;MACF;MAEA,IAAI,CAAC7D,cAAc,CAAC8D,aAAa,CAACtK,OAAO,CAAC;IAC5C;;IAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;EAPE;IAAA1B,GAAA;IAAA3D,KAAA,EAQA,SAAQ8J,kBAAkBA,CACxB8F,UAA+B,EAC/BtF,IAAyC,EACzC;MAAA,IAAAuF,MAAA;MACA,QAAQD,UAAU;QAChB,KAAKE,mCAAmB,CAACC,eAAe;UAAE;YACxC;YACA,IAAIhM,KAAe,GAAG;cACpBgE,YAAY,EAAE,EAAE;cAChByG,SAAS,EAAE;gBAACC,qBAAqB,EAAE;cAAE;YACvC,CAAC;;YAED;YACA,IAAIuB,4BAA0D,GAC5D3N,4BAA4B,CAACC,SAAS;YACxCgI,IAAI,CAAC2F,cAAc,CAACzO,OAAO,CAAC,UAACmL,MAAM,EAAK;cACtC,IAAIA,MAAM,CAACG,MAAM,CAACC,SAAS,CAACF,IAAI,CAACG,WAAW,CAAC,CAAC,KAAKI,iBAAU,CAACrJ,KAAK,EAAE;gBACnE,IAAIiM,4BAA4B,KAAK3N,4BAA4B,CAACG,OAAO,EAAE;kBAAA,IAAA0N,YAAA;kBACzE;kBACA;kBACA;kBACA1L,oBAAW,CAACC,MAAM,CAACkH,IAAI,6GAEvB,CAAC;kBACD5G,gBAAO,CAACC,oBAAoB,CAC1BC,mBAAkB,CAACkL,qCAAqC,EACxD;oBACE5L,QAAQ,EAAE,EAAA2L,YAAA,GAAAvD,MAAM,CAACrC,IAAI,cAAA4F,YAAA,uBAAXA,YAAA,CAAahM,GAAG,KAAI2L,MAAI,CAAC3L,GAAG;oBACtCmB,OAAO,EAAEsH,MAAM,CAACrC,IAAI,GAChB,+BAA+B,GAC/B;kBACN,CACF,CAAC;gBACH;gBACA,IAAIqC,MAAM,CAACrC,IAAI,EAAE;kBACf0F,4BAA4B,GAAG3N,4BAA4B,CAACG,OAAO;gBACrE,CAAC,MAAM;kBACLwN,4BAA4B,GAAG3N,4BAA4B,CAACE,OAAO;gBACrE;cACF;YACF,CAAC,CAAC;;YAEF;YACA;YACA;YACA;YACA;YACA,IACEyN,4BAA4B,KAAK3N,4BAA4B,CAACC,SAAS,IACvE0N,4BAA4B,KAAK3N,4BAA4B,CAACE,OAAO,EACrE;cACA;cACAH,oBAAoB,CAACZ,OAAO,CAAC,UAACmC,GAAG,EAAK;gBACpC,IAAIA,GAAG,KAAK,cAAc,EAAE;kBAC1BI,KAAK,CAACJ,GAAG,CAAC,GAAG,IAAAyM,iBAAS,EAACP,MAAI,CAAClM,GAAG,CAAC,CAAC;gBACnC;cACF,CAAC,CAAC;YACJ,CAAC,MAAM;cACL;cACA;cACA,IAAA4J,OAAA,CAAA3O,OAAA,EAAc4O,8BAAuB,CAAC,CAAChM,OAAO,CAAC,UAACiM,WAAW,EAAK;gBAC9D,IAAIA,WAAW,KAAK,cAAc,EAAE;kBAClC1J,KAAK,CAAC0J,WAAW,CAAC,GAAG,IAAA2C,iBAAS,EAACP,MAAI,CAACpC,WAAW,CAAC,CAAC;gBACnD;cACF,CAAC,CAAC;YACJ;YAEAjJ,oBAAW,CAACC,MAAM,CAACC,IAAI,4DAAAC,MAAA,CACsCqL,4BAA4B,qBAAArL,MAAA,CAAkB,IAAA0L,UAAA,CAAAzR,OAAA,EACvG0L,IAAI,CAAC2F,cAAc,CAACK,GAAG,CAAC,UAAC9R,CAAC;cAAA,OAAM;gBAC9BqO,IAAI,EAAErO,CAAC,CAACsO,MAAM,CAACC,SAAS,CAACF,IAAI;gBAC7BM,EAAE,EAAE3O,CAAC,CAACsO,MAAM,CAACC,SAAS,CAACI,EAAE;gBACzBoD,OAAO,EAAE,CAAC,CAAC/R,CAAC,CAAC8L;cACf,CAAC;YAAA,CAAC,CACJ,CAAC,CACH,CAAC;YACD;YACAA,IAAI,CAAC2F,cAAc,CAACzO,OAAO,CAAC,UAACmL,MAAM,EAAK;cACtC5I,KAAK,GAAG8L,MAAI,CAACnD,6BAA6B,CAACC,MAAM,EAAE5I,KAAK,CAAC;YAC3D,CAAC,CAAC;;YAEF;YACA,IAAI,CAACoD,YAAY,CAACpD,KAAK,CAAC;YAExB;UACF;QAEA,KAAK+L,mCAAmB,CAACU,aAAa;UAAE;YACtChM,oBAAW,CAACC,MAAM,CAACC,IAAI,mGAAAC,MAAA,CAC6E,IAAI,CAAC7B,SAAS,CAClH,CAAC;YACD,IAAMe,OAAO,GAAG,IAAI,CAAChB,KAAK,CAAC8C,QAAQ,CAAC8K,iBAAiB,CAAC1R,GAAG,CAAC,IAAI,CAAC+D,SAAS,CAAC;YACzE,IAAI,CAACD,KAAK,CAAC8C,QAAQ,CAACC,OAAO,CAAC/B,OAAO,EAAEgC,iCAAsB,CAAC6K,YAAY,CAAC;UAC3E;MACF;IACF;;IAEA;AACF;AACA;AACA;AACA;AACA;EALE;IAAA/M,GAAA;IAAA3D,KAAA,EAMA,SAAA2Q,KAAKA,CAAC9M,OAAY,EAAEyG,IAAS,EAAE;MAC7B,IAAI,IAAI,CAACuB,cAAc,EAAE;QACvB,IAAI,CAAC0D,qBAAqB,CACxB1L,OAAO,EACPyG,IAAI,CAACkF,SAAS,EACdlF,IAAI,CAACsG,oBACP,CAAC;MACH,CAAC,MAAM;QACL;QACA,IAAOpB,SAAS,GAAIlF,IAAI,CAAjBkF,SAAS;QAChB,IAAMzL,KAAK,GAAG,IAAI,CAAC8M,mBAAmB,CAACvG,IAAI,CAACvG,KAAK,CAAC;QAClDS,oBAAW,CAACC,MAAM,CAACC,IAAI,oDAAAC,MAAA,CAAoD6K,SAAS,CAAE,CAAC;QAEvFzL,KAAK,CAACyK,SAAS,GAAG;UAACC,qBAAqB,EAAE;QAAE,CAAC;QAE7C,QAAQe,SAAS;UACf,KAAKC,qBAAU,CAACqB,gBAAgB;UAChC,KAAKrB,qBAAU,CAACsB,gBAAgB;UAChC,KAAKtB,qBAAU,CAACuB,gBAAgB;UAChC,KAAKvB,qBAAU,CAACwB,uBAAuB;UACvC,KAAKxB,qBAAU,CAACyB,yBAAyB;UACzC,KAAKzB,qBAAU,CAAC0B,uBAAuB;UACvC,KAAK1B,qBAAU,CAAC2B,yBAAyB;UACzC,KAAK3B,qBAAU,CAAC4B,YAAY;UAC5B,KAAK5B,qBAAU,CAAC6B,mBAAmB;UACnC,KAAK7B,qBAAU,CAAC8B,4BAA4B;UAC5C,KAAK9B,qBAAU,CAAC+B,yBAAyB;UACzC,KAAK/B,qBAAU,CAACgC,oBAAoB;UACpC,KAAKhC,qBAAU,CAACiC,aAAa;UAC7B,KAAKjC,qBAAU,CAACkC,cAAc;YAC5B,IAAI,CAACrL,WAAW,CAACvC,KAAK,EAAEyL,SAAS,CAAC;YAClC;UACF,KAAKC,qBAAU,CAACmC,UAAU;YACxB,IAAI,CAACvL,gBAAgB,CAACtC,KAAK,EAAEF,OAAO,CAAC;YACrC;UACF,KAAK4L,qBAAU,CAACC,sBAAsB;YACpC,IAAI,CAAClD,mCAAmC,CACtC3I,OAAO,SAAAc,MAAA,CACA6K,SAAS,8BAClB,CAAC;YACD;UAEF;YACE;YACA;YACA,IAAI,CAACnJ,gBAAgB,CAACtC,KAAK,EAAEF,OAAO,CAAC;QACzC;MACF;IACF;;IAEA;AACF;AACA;AACA;AACA;AACA;AACA;EANE;IAAAF,GAAA;IAAA3D,KAAA,EAOA,SAAA6R,UAAUA,CAACC,KAAW,EAAEC,SAAkB,EAAEC,IAAU,EAAE;MACtD,OAAO,IAAI,CAACC,IAAI,CAACH,KAAK,EAAEC,SAAS,EAAEC,IAAI,CAAC;IAC1C;;IAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;EAPE;IAAArO,GAAA;IAAA3D,KAAA,EAQA,SAAQkS,wBAAwBA,CAACnO,KAAU,EAAEyL,SAAkB,EAAE1D,QAAyB,EAAE;MAC1F,IAAI,CAAC,IAAI,CAACD,cAAc,EAAE;QACxBrH,oBAAW,CAACC,MAAM,CAACC,IAAI,6DAA6D,CAAC;QACrFF,oBAAW,CAACC,MAAM,CAACC,IAAI,CACrB,4CAA4C,EAC5CoH,QAAQ,EACR,aAAa,EACb/H,KACF,CAAC;QACD,IAAI,CAAC8H,cAAc,GAAG,IAAI,CAACvC,oBAAoB,CAAC;UAC9CE,YAAY,EAAE;YAACzF,KAAK,EAALA,KAAK;YAAE+H,QAAQ,EAARA;UAAQ;QAChC,CAAC,CAAC;QACF,IAAI,CAACqG,iBAAiB,CAACpO,KAAK,EAAEyL,SAAS,CAAC;MAC1C,CAAC,MAAM;QACL;QACA;;QAEAhL,oBAAW,CAACC,MAAM,CAACC,IAAI,CACrB,0GACF,CAAC;QACD,IAAI,CAAC4H,sBAAsB,CAAC7E,SAAS,EAAE;UAACqE,QAAQ,EAARA,QAAQ;UAAE/H,KAAK,EAALA;QAAK,CAAC,CAAC;MAC3D;IACF;;IAEA;AACF;AACA;AACA;AACA;AACA;AACA;EANE;IAAAJ,GAAA;IAAA3D,KAAA,EAOA,SAAQoS,kBAAkBA,CAACrO,KAAU,EAAEyL,SAAkB,EAAE;MACzD,IAAI,CAAC,IAAI,CAACnM,WAAW,CAACgP,cAAc,CAACtO,KAAK,CAAC,EAAE;QAC3CS,oBAAW,CAACC,MAAM,CAACC,IAAI,4EAAAC,MAAA,CACsD6K,SAAS,CACtF,CAAC;QAED;MACF;MACA,IAAI,CAAC2C,iBAAiB,CAACpO,KAAK,EAAEyL,SAAS,CAAC;IAC1C;;IAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;EAPE;IAAA7L,GAAA;IAAA3D,KAAA,EAQA,SAAAsG,WAAWA,CAACvC,KAAU,EAAEyL,SAAkB,EAAE1D,QAAyB,EAAE;MACrE,IAAI,CAAC/H,KAAK,EAAE;QACVS,oBAAW,CAACC,MAAM,CAAC6N,KAAK,CACtB,qFACF,CAAC;MACH;MAEA,IAAIxG,QAAQ,EAAE;QACZ;QACA,IAAI,CAACoG,wBAAwB,CAACnO,KAAK,EAAEyL,SAAS,EAAE1D,QAAQ,CAAC;MAC3D,CAAC,MAAM;QACL,IAAI,CAACsG,kBAAkB,CAACrO,KAAK,EAAEyL,SAAS,CAAC;MAC3C;IACF;;IAEA;AACF;AACA;AACA;AACA;AACA;EALE;IAAA7L,GAAA;IAAA3D,KAAA,EAMA,SAAQmS,iBAAiBA,CAACpO,KAAU,EAAEyL,SAAkB,EAAE;MAAA,IAAA+C,kBAAA;QAAAC,MAAA;QAAAC,gBAAA;MACxD,IAAI,CAAC9K,gBAAgB,GAAG5D,KAAK,CAACF,OAAO,IAAI,IAAI;MAC7C,IAAI,CAACkE,YAAY,GAAGhE,KAAK,CAACgE,YAAY;MACtC,CAAAwK,kBAAA,OAAI,CAACxK,YAAY,cAAAwK,kBAAA,uBAAjBA,kBAAA,CAAmB/Q,OAAO,CAAC,UAAC8M,WAAW,EAAK;QAAA,IAAAoE,mBAAA;QAC1C;QACA,KAAAA,mBAAA,GAAIpE,WAAW,CAACxB,MAAM,cAAA4F,mBAAA,eAAlBA,mBAAA,CAAoB3F,SAAS,CAACI,EAAE,EAAE;UACpCqF,MAAI,CAACjP,8BAA8B,CAACvE,GAAG,CAACsP,WAAW,CAACxB,MAAM,CAACC,SAAS,CAACI,EAAE,EAAEmB,WAAW,CAACnB,EAAE,CAAC;QAC1F;MACF,CAAC,CAAC;MACF,IAAMwF,gBAAgB,GAAGnK,sBAAa,CAACoK,oBAAoB,CAAC,IAAI,CAACvK,QAAQ,EAAEtE,KAAK,CAACsE,QAAQ,CAAC;MAC1F,IAAI,CAACwK,eAAe,CAAC9O,KAAK,CAAC;MAC3B,IAAI,CAACkE,kBAAkB,CACrBlE,KAAK,CAACgE,YAAY,GAAA0K,gBAAA,GAClB1O,KAAK,CAACyK,SAAS,cAAAiE,gBAAA,uBAAfA,gBAAA,CAAiBhE,qBAAqB,EACtCkE,gBACF,CAAC;MACD,IAAI,CAACG,eAAe,CAAC,CAAC;MACtB,IAAI,CAACC,mBAAmB,CAACvD,SAAS,CAAC;MACnC,IAAI,CAAC3G,kBAAkB,CAAC9E,KAAK,CAAC+E,YAAY,CAAC;MAC3C;MACA,IAAI,CAACzF,WAAW,CAACgB,WAAW,GAAGN,KAAK;IACtC;;IAEA;IACA;AACF;AACA;AACA;AACA;IACE;EAAA;IAAAJ,GAAA;IAAA3D,KAAA,EACA,SAAA+S,mBAAmBA,CAACvD,SAAiB,EAAE;MACrC,IACE,IAAI,CAACvM,WAAW,CAAC0F,SAAS,CAACkE,IAAI,KAAKmG,iBAAM,IAC1C,IAAI,CAAC/P,WAAW,CAAC0F,SAAS,CAACkE,IAAI,KAAKoG,uBAAY,EAChD;QACA;QACA,IAAIzD,SAAS,KAAKC,qBAAU,CAACgC,oBAAoB,EAAE;UACjD;UACA,IAAI,CAACI,UAAU,CACb;YACEqB,IAAI,EAAE,YAAY;YAClBC,QAAQ,EAAE;UACZ,CAAC,EACDC,iBAAM,CAACC,eAAe,EACtB;YACEC,cAAc,EAAE,IAAI;YACpBC,cAAc,EAAE;UAClB,CACF,CAAC;QACH;QACA;QACA,IAAI/D,SAAS,KAAKC,qBAAU,CAACqB,gBAAgB,EAAE;UAC7C;UACA,IAAI,CAACe,UAAU,CACb;YACEqB,IAAI,EAAE,YAAY;YAClBC,QAAQ,EAAE;UACZ,CAAC,EACDC,iBAAM,CAACC,eAAe,EACtB;YACEC,cAAc,EAAE,KAAK;YACrBC,cAAc,EAAE;UAClB,CACF,CAAC;QACH;MACF;IACF;;IAEA;AACF;AACA;AACA;AACA;EAJE;IAAA5P,GAAA;IAAA3D,KAAA,EAKA,SAAAmH,YAAYA,CAACpD,KAAU,EAAE;MAAA,IAAAyP,iBAAA;MACvB,IAAMb,gBAAgB,GAAGnK,sBAAa,CAACoK,oBAAoB,CAAC,IAAI,CAACvK,QAAQ,EAAEtE,KAAK,CAACsE,QAAQ,CAAC;MAC1F,IAAI,CAACoL,iBAAiB,CAAC,IAAI,CAAC1L,YAAY,EAAEhE,KAAK,CAACgE,YAAY,CAAC;MAC7D,IAAI,CAAC8K,eAAe,CAAC9O,KAAK,CAAC;MAC3B,IAAI,CAACkE,kBAAkB,CACrBlE,KAAK,CAACgE,YAAY,GAAAyL,iBAAA,GAClBzP,KAAK,CAACyK,SAAS,cAAAgF,iBAAA,uBAAfA,iBAAA,CAAiB/E,qBAAqB,EACtCkE,gBACF,CAAC;MACD,IAAI,CAACG,eAAe,CAAC,CAAC;IACxB;;IAEA;AACF;AACA;AACA;AACA;EAJE;IAAAnP,GAAA;IAAA3D,KAAA,EAKA,SAAA6S,eAAeA,CAAC9O,KAAK,EAAE;MAAA,IAAA2P,WAAA,EAAAC,YAAA;MACrB,IAAI,EAAAD,WAAA,GAAA3P,KAAK,CAACuE,IAAI,cAAAoL,WAAA,uBAAVA,WAAA,CAAYtO,MAAM,MAAK,OAAO,IAAI,EAAAuO,YAAA,GAAA5P,KAAK,CAACuE,IAAI,cAAAqL,YAAA,uBAAVA,YAAA,CAAYC,KAAK,MAAK,MAAM,EAAE;QAClE;QACA;QACA;QACA;MACF;MAEA,IAAI,CAACxL,cAAc,CAACrE,KAAK,CAACsE,QAAQ,EAAEtE,KAAK,CAACuE,IAAI,CAAC;MAC/C,IAAI,CAACJ,qBAAqB,CAACnE,KAAK,CAACoE,eAAe,EAAEpE,KAAK,CAACW,IAAI,CAAC;MAC7D,IAAI,CAACmP,aAAa,CAAC9P,KAAK,CAAC2D,OAAO,CAAC;MACjC,IAAI,CAACgB,eAAe,CAAC3E,KAAK,CAAC4E,SAAS,CAAC;MACrC,IAAI,CAACK,cAAc,CAACjF,KAAK,CAACkF,IAAI,CAAC;MAC/B,IAAI,CAACV,cAAc,CAACxE,KAAK,CAACG,GAAG,EAAEsE,sBAAa,CAACC,gBAAgB,CAAC1E,KAAK,CAAC,CAAC;MACrE,IAAI,CAAC6E,iBAAiB,CAAC7E,KAAK,CAACW,IAAI,EAAEX,KAAK,CAACuE,IAAI,CAAC;MAC9C,IAAI,CAACY,iBAAiB,CAACnF,KAAK,CAACoF,WAAW,CAAC;MACzC,IAAI,CAAC2K,cAAc,CAAC/P,KAAK,CAAC6D,QAAQ,CAAC;MACnC,IAAI,CAACmB,UAAU,CAAChF,KAAK,CAACuE,IAAI,CAAC;MAC3B,IAAI,CAACyL,YAAY,CAAChQ,KAAK,CAAC8D,MAAM,CAAC;MAC/B,IAAI,CAACmM,gBAAgB,CAACjQ,KAAK,CAACoC,YAAY,CAAC;MACzC,IAAI,CAAC8N,cAAc,CAAClQ,KAAK,CAAC+D,QAAQ,CAAC;MACnC,IAAI,CAACe,kBAAkB,CAAC9E,KAAK,CAAC+E,YAAY,CAAC;MAC3C,IAAI,CAACM,WAAW,CAACrF,KAAK,CAACsF,KAAK,CAAC;MAC7B,IAAI,CAAC6K,gBAAgB,CAAC,CAAC;MACvB;IACF;;IAEA;AACF;AACA;AACA;AACA;AACA;EALE;IAAAvQ,GAAA;IAAA3D,KAAA,EAMA,SAAAmU,eAAeA,CAACpM,YAAwB,EAAEO,IAAS,EAAE;MACnD,IAAI,CAACP,YAAY,IAAIA,YAAY,CAACpI,MAAM,KAAK,CAAC,EAAE;QAC9C,OAAO,IAAI;MACb;MAEA,OACEoI,YAAY,CAACwD,IAAI,CACf,UAAC+C,WAAW;QAAA,OACVhG,IAAI,IACJgG,WAAW,CAAC8F,QAAQ,KAAK9L,IAAI,CAAC8L,QAAQ,KACrCrM,YAAY,CAACpI,MAAM,IAAI,CAAC,IAAK2O,WAAW,CAACzB,IAAI,KAAKwH,iBAAM,IAAI,CAAC/F,WAAW,CAAC/L,OAAQ,CAAC;MAAA;MACrF;MACF,CAAC,IAAI,IAAI,CAAC+R,OAAO;IAErB;;IAEA;IACA;AACF;AACA;AACA;EAHE;IAAA3Q,GAAA;IAAA3D,KAAA,EAIA,SAAA8S,eAAeA,CAAA,EAAG;MAChB,IACE,IAAI,CAAC7P,WAAW,CAAC0F,SAAS,CAACkE,IAAI,KAAKmG,iBAAM,IAC1C,IAAI,CAAC/P,WAAW,CAAC0F,SAAS,CAACkE,IAAI,KAAKoG,uBAAY,IAChD,IAAI,CAAChQ,WAAW,CAAC0F,SAAS,CAACkE,IAAI,KAAK0H,wBAAa,EACjD;QACA;QACA,IAAMD,OAAO,GAAG,IAAI,CAACH,eAAe,CAAC,IAAI,CAACpM,YAAY,EAAE,IAAI,CAACO,IAAI,CAAC;QAElE,IAAI,CAAC1F,aAAa,CAAC;UAAC0R,OAAO,EAAPA;QAAO,CAAC,CAAC;;QAE7B;;QAEA;QACA;;QAEA;;QAEA,IAAI,IAAI,CAAC3L,SAAS,IAAI,IAAI,CAACA,SAAS,CAACiL,KAAK,KAAKY,gBAAK,CAACC,KAAK,CAACC,QAAQ,EAAE;UACnE;UACAlQ,oBAAW,CAACC,MAAM,CAACkH,IAAI,CACrB,2EACF,CAAC;;UAED;UACA,IAAI,CAAC9I,KAAK,CAAC8R,QAAQ,CAACC,UAAU,CAACC,iBAAiB,CAAC;YAC/CnU,IAAI,EAAE,0BAA0B;YAChCoU,OAAO,EAAE;cACPhS,SAAS,EAAE,IAAI,CAACA;YAClB;UACF,CAAC,CAAC;UAEF,IAAI,CAAC+O,UAAU,CACb;YACEqB,IAAI,EAAE,YAAY;YAClBC,QAAQ,EAAE;UACZ,CAAC,EACDC,iBAAM,CAAC2B,eAAe,EACtB;YACE3P,MAAM,EAAE4P,8BAAmB,CAACC,aAAa;YACzCC,WAAW,EAAE;UACf,CACF,CAAC;QACH,CAAC,MAAM,IACLZ,OAAO,CAACV,KAAK,KAAKuB,wBAAa,CAACC,MAAM,CAACC,IAAI,IAC3C,IAAI,CAACpS,WAAW,CAACqF,IAAI,KACpB,IAAI,CAACrF,WAAW,CAACqF,IAAI,CAACsL,KAAK,KAAKuB,wBAAa,CAACC,MAAM,CAACE,QAAQ,IAC5D,IAAI,CAACrS,WAAW,CAACqF,IAAI,CAACsL,KAAK,KAAKuB,wBAAa,CAACC,MAAM,CAACG,QAAQ,IAC7D,IAAI,CAACtS,WAAW,CAACqF,IAAI,CAACsL,KAAK,KAAKuB,wBAAa,CAACC,MAAM,CAACI,MAAM,CAAC,EAC9D;UACA;UACA,IAAI,CAAC3S,KAAK,CAAC8R,QAAQ,CAACC,UAAU,CAACC,iBAAiB,CAAC;YAC/CnU,IAAI,EAAE,0BAA0B;YAChCoU,OAAO,EAAE;cACPhS,SAAS,EAAE,IAAI,CAACA;YAClB;UACF,CAAC,CAAC;UACF,IAAI,CAAC+O,UAAU,CACb;YACEqB,IAAI,EAAE,YAAY;YAClBC,QAAQ,EAAE;UACZ,CAAC,EACDC,iBAAM,CAAC2B,eAAe,EACtB;YACE3P,MAAM,EAAE4P,8BAAmB,CAACS,YAAY;YACxCP,WAAW,EACT,IAAI,CAACjS,WAAW,CAACqF,IAAI,CAACoN,UAAU,IAAI,IAAI,CAACzS,WAAW,CAACqF,IAAI,CAACoN,UAAU,CAAC9B,KAAK,KAAK+B;UACnF,CACF,CAAC;QACH,CAAC,MAAM,IACL,IAAI,CAAC1S,WAAW,CAACqF,IAAI,IACrB,IAAI,CAACrF,WAAW,CAACqF,IAAI,CAACsL,KAAK,KAAKuB,wBAAa,CAACC,MAAM,CAACC,IAAI,KACxDf,OAAO,CAACV,KAAK,KAAKuB,wBAAa,CAACC,MAAM,CAACC,IAAI,IAC1Cf,OAAO,CAACV,KAAK,KAAKuB,wBAAa,CAACC,MAAM,CAACE,QAAQ,IAC/ChB,OAAO,CAACV,KAAK,KAAKuB,wBAAa,CAACC,MAAM,CAACG,QAAQ,IAC/CjB,OAAO,CAACV,KAAK,KAAKuB,wBAAa,CAACC,MAAM,CAACQ,IAAI,CAAC,CAAC;QAAA,EAC/C;UACA;UACA,IAAI,CAAC/S,KAAK,CAAC8R,QAAQ,CAACC,UAAU,CAACC,iBAAiB,CAAC;YAC/CnU,IAAI,EAAE,0BAA0B;YAChCoU,OAAO,EAAE;cACPhS,SAAS,EAAE,IAAI,CAACA;YAClB;UACF,CAAC,CAAC;UAEF,IAAI,CAAC+O,UAAU,CACb;YACEqB,IAAI,EAAE,YAAY;YAClBC,QAAQ,EAAE;UACZ,CAAC,EACDC,iBAAM,CAAC2B,eAAe,EACtB;YACE3P,MAAM,EAAE4P,8BAAmB,CAACa,SAAS;YACrCX,WAAW,EAAE;UACf,CACF,CAAC;QACH;MACF,CAAC,MAAM,IAAI,IAAI,CAACjS,WAAW,CAAC0F,SAAS,CAACkE,IAAI,KAAKiJ,oBAAS,EAAE;QACxD,IACE,IAAI,CAACnN,SAAS,KACb,IAAI,CAACA,SAAS,CAACiL,KAAK,KAAKY,gBAAK,CAACC,KAAK,CAACC,QAAQ;QAC5C;QACA,IAAI,CAAC/L,SAAS,CAACiL,KAAK,KAAKY,gBAAK,CAACC,KAAK,CAACsB,WAAW,CAAC,EACnD;UACAvR,oBAAW,CAACC,MAAM,CAACkH,IAAI,CACrB,uFACF,CAAC;;UAED;UACA,IAAI,CAAC9I,KAAK,CAAC8R,QAAQ,CAACC,UAAU,CAACC,iBAAiB,CAAC;YAC/CnU,IAAI,EAAE,0BAA0B;YAChCoU,OAAO,EAAE;cACPhS,SAAS,EAAE,IAAI,CAACA;YAClB;UACF,CAAC,CAAC;UACF,IAAI,CAAC+O,UAAU,CACb;YACEqB,IAAI,EAAE,YAAY;YAClBC,QAAQ,EAAE;UACZ,CAAC,EACDC,iBAAM,CAAC2B,eAAe,EACtB;YACE3P,MAAM,EAAES,iCAAsB,CAACmQ,4BAA4B;YAC3Dd,WAAW,EAAE;UACf,CACF,CAAC;QACH,CAAC,MAAM,IAAI,IAAI,CAACvM,SAAS,IAAI,IAAI,CAACA,SAAS,CAACpG,OAAO,EAAE;UACnD;;UAEA;UACA,IAAI,CAACM,KAAK,CAAC8R,QAAQ,CAACC,UAAU,CAACC,iBAAiB,CAAC;YAC/CnU,IAAI,EAAE,0BAA0B;YAChCoU,OAAO,EAAE;cACPhS,SAAS,EAAE,IAAI,CAACA;YAClB;UACF,CAAC,CAAC;UACF,IAAI,CAAC+O,UAAU,CACb;YACEqB,IAAI,EAAE,YAAY;YAClBC,QAAQ,EAAE;UACZ,CAAC,EACDC,iBAAM,CAAC2B,eAAe,EACtB;YACE3P,MAAM,EAAES,iCAAsB,CAACoQ,iBAAiB;YAChDf,WAAW,EAAE;UACf,CACF,CAAC;QACH;QACA;QACA;QAAA,KACK,IAAI,IAAI,CAACjS,WAAW,CAACqF,IAAI,IAAI,IAAI,CAACrF,WAAW,CAACqF,IAAI,CAAC/F,OAAO,EAAE;UAC/D;UACA,IAAI,CAACsP,UAAU,CACb;YACEqB,IAAI,EAAE,YAAY;YAClBC,QAAQ,EAAE;UACZ,CAAC,EACDC,iBAAM,CAAC2B,eAAe,EACtB;YACE3P,MAAM,EAAES,iCAAsB,CAAC6K,YAAY;YAC3CwE,WAAW,EAAE;UACf,CACF,CAAC;QACH;MACF,CAAC,MAAM;QACL1Q,oBAAW,CAACC,MAAM,CAACkH,IAAI,CAAC,+DAA+D,CAAC;MAC1F;IACF;;IAEA;AACF;AACA;AACA;AACA;AACA;EALE;IAAAhI,GAAA;IAAA3D,KAAA,EAMA,SAAAkU,gBAAgBA,CAAA,EAAG;MACjB;MACA;MACA,IACE,IAAI,CAAC9Q,qBAAqB,CAAC8S,kBAAkB,IAC7C,IAAI,CAAC9S,qBAAqB,CAAC+S,kBAAkB,EAC7C;QACA,IAAI,CAACD,kBAAkB,CAAC,CAAC;MAC3B;IACF;;IAEA;AACF;AACA;AACA;AACA;EAJE;IAAAvS,GAAA;IAAA3D,KAAA,EAKA,SAAAkW,kBAAkBA,CAAA,EAAG;MAAA,IAAAE,qBAAA;MACnB;MACA,IACE,IAAI,CAACnT,WAAW,CAACqF,IAAI,CAAC+N,YAAY,OAAAD,qBAAA,GAAK,IAAI,CAACnT,WAAW,CAACgG,IAAI,cAAAmN,qBAAA,uBAArBA,qBAAA,CAAuBE,MAAM,KACpE,IAAI,CAACrT,WAAW,CAACqF,IAAI,CAACiO,SAAS,EAC/B;QACA,IAAI,CAAC1E,UAAU,CACb;UACEqB,IAAI,EAAE,YAAY;UAClBC,QAAQ,EAAE;QACZ,CAAC,EACDC,iBAAM,CAACoD,0BAA0B,EACjC;UACEC,aAAa,EAAE;QACjB,CACF,CAAC;MACH,CAAC,MAAM;QACL,IAAI,CAAC5E,UAAU,CACb;UACEqB,IAAI,EAAE,YAAY;UAClBC,QAAQ,EAAE;QACZ,CAAC,EACDC,iBAAM,CAACoD,0BAA0B,EACjC;UACEC,aAAa,EAAE;QACjB,CACF,CAAC;MACH;IACF;;IAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;EAPE;IAAA9S,GAAA;IAAA3D,KAAA,EAQA,SAAAiI,kBAAkBA,CAACF,YAAoB,EAAE0G,qBAAgC,EAAEiI,SAAmB,EAAE;MAAA,IAAAC,qBAAA;MAC9F,IAAI,CAAC9E,UAAU,CACb;QACEqB,IAAI,EAAE,YAAY;QAClBC,QAAQ,EAAE;MACZ,CAAC,EACDC,iBAAM,CAACwD,8BAA8B,EACrC;QACE7O,YAAY,EAAZA,YAAY;QACZ0G,qBAAqB,EAArBA,qBAAqB;QACrBoI,WAAW,EAAE,IAAI,CAAC5T,WAAW,CAACoF,QAAQ,MAAAsO,qBAAA,GAAI,IAAI,CAAC1T,WAAW,CAACoF,QAAQ,CAACyO,MAAM,cAAAH,qBAAA,uBAAhCA,qBAAA,CAAkCI,UAAU;QACtFV,YAAY,EAAE,IAAI,CAACpT,WAAW,CAACqF,IAAI,IAAI,IAAI,CAACrF,WAAW,CAACqF,IAAI,CAAC+N,YAAY;QACzEW,MAAM,EAAE,IAAI,CAAC/T,WAAW,CAACqF,IAAI,IAAI,IAAI,CAACrF,WAAW,CAACqF,IAAI,CAAC0O,MAAM;QAC7DV,MAAM,EAAE,IAAI,CAACrT,WAAW,CAACgG,IAAI,IAAI,IAAI,CAAChG,WAAW,CAACgG,IAAI,CAACqN,MAAM;QAC7DI,SAAS,EAATA;MACF,CACF,CAAC;MAED,IAAI3O,YAAY,IAAI,IAAAkP,QAAA,CAAArY,OAAA,EAAcmJ,YAAY,CAAC,IAAIA,YAAY,CAACpI,MAAM,GAAG,CAAC,EAAE;QAAA,IAAAuX,SAAA,GAAA5X,0BAAA,CAChDyI,YAAY;UAAAoP,KAAA;QAAA;UAAtC,KAAAD,SAAA,CAAApX,CAAA,MAAAqX,KAAA,GAAAD,SAAA,CAAA5Y,CAAA,IAAAyB,IAAA,GAAwC;YAAA,IAA7BuO,WAAW,GAAA6I,KAAA,CAAAnX,KAAA;YACpB,IAAIsO,WAAW,IAAI,CAAAA,WAAW,aAAXA,WAAW,uBAAXA,WAAW,CAAElJ,MAAM,MAAK,SAAS,EAAE;cAAA,IAAAgS,mBAAA;cACpD,IAAI,CAACvF,UAAU,CACb;gBACEqB,IAAI,EAAE,YAAY;gBAClBC,QAAQ,EAAE;cACZ,CAAC,EACDkE,oBAAS,CAACjE,MAAM,CAACkE,0BAA0B,EAC3C;gBACEC,WAAW,EAAEjJ,WAAW,aAAXA,WAAW,wBAAA8I,mBAAA,GAAX9I,WAAW,CAAEkJ,MAAM,cAAAJ,mBAAA,uBAAnBA,mBAAA,CAAqBK;cACpC,CACF,CAAC;YACH;UACF;QAAC,SAAA/R,GAAA;UAAAwR,SAAA,CAAAhZ,CAAA,CAAAwH,GAAA;QAAA;UAAAwR,SAAA,CAAAxY,CAAA;QAAA;MACH;IACF;;IAEA;AACF;AACA;AACA;AACA;AACA;EALE;IAAAiF,GAAA;IAAA3D,KAAA,EAMA,SAAAoI,cAAcA,CAACC,QAAgB,EAAEC,IAAY,EAAE;MAC7C,IAAID,QAAQ,IAAI,CAAC,IAAAqP,eAAO,EAAC,IAAI,CAACrP,QAAQ,EAAEA,QAAQ,CAAC,EAAE;QACjD,IAAI,CAACpF,WAAW,CAACoF,QAAQ,GAAGG,sBAAa,CAACmI,KAAK,CAACtI,QAAQ,CAAC;QACzD,IAAAsP,qBAAA,GA8BInP,sBAAa,CAACoP,WAAW,CAAC,IAAI,CAACvP,QAAQ,EAAEA,QAAQ,CAAC;UAAAwP,sBAAA,GAAAF,qBAAA,CA7BpDG,OAAO;UACLC,mBAAmB,GAAAF,sBAAA,CAAnBE,mBAAmB;UACnBC,yBAAyB,GAAAH,sBAAA,CAAzBG,yBAAyB;UACzBC,0BAA0B,GAAAJ,sBAAA,CAA1BI,0BAA0B;UAC1BC,oBAAoB,GAAAL,sBAAA,CAApBK,oBAAoB;UACpBC,kCAAkC,GAAAN,sBAAA,CAAlCM,kCAAkC;UAClCC,uBAAuB,GAAAP,sBAAA,CAAvBO,uBAAuB;UACvBC,uBAAuB,GAAAR,sBAAA,CAAvBQ,uBAAuB;UACvBC,kBAAkB,GAAAT,sBAAA,CAAlBS,kBAAkB;UAClBC,sBAAsB,GAAAV,sBAAA,CAAtBU,sBAAsB;UACtBC,qBAAqB,GAAAX,sBAAA,CAArBW,qBAAqB;UACrBC,sBAAsB,GAAAZ,sBAAA,CAAtBY,sBAAsB;UACtBC,wBAAwB,GAAAb,sBAAA,CAAxBa,wBAAwB;UACxBC,mBAAmB,GAAAd,sBAAA,CAAnBc,mBAAmB;UACnBC,8BAA8B,GAAAf,sBAAA,CAA9Be,8BAA8B;UAC9BC,gCAAgC,GAAAhB,sBAAA,CAAhCgB,gCAAgC;UAChCC,mBAAmB,GAAAjB,sBAAA,CAAnBiB,mBAAmB;UACnBC,eAAe,GAAAlB,sBAAA,CAAfkB,eAAe;UACfC,wBAAwB,GAAAnB,sBAAA,CAAxBmB,wBAAwB;UACxBC,iBAAiB,GAAApB,sBAAA,CAAjBoB,iBAAiB;UACjBC,qBAAqB,GAAArB,sBAAA,CAArBqB,qBAAqB;UACrBC,gCAAgC,GAAAtB,sBAAA,CAAhCsB,gCAAgC;UAChCC,mBAAmB,GAAAvB,sBAAA,CAAnBuB,mBAAmB;UACnBC,2BAA2B,GAAAxB,sBAAA,CAA3BwB,2BAA2B;UAC3BC,8BAA8B,GAAAzB,sBAAA,CAA9ByB,8BAA8B;UAC9BC,0BAA0B,GAAA1B,sBAAA,CAA1B0B,0BAA0B;UAC1BC,wBAAwB,GAAA3B,sBAAA,CAAxB2B,wBAAwB;UAE1BC,OAAO,GAAA9B,qBAAA,CAAP8B,OAAO;QAGT,IAAIjB,qBAAqB,EAAE;UACzB,IAAI,CAAC3G,UAAU,CACb;YAACqB,IAAI,EAAE,YAAY;YAAEC,QAAQ,EAAE;UAAgB,CAAC,EAChDkE,oBAAS,CAACjE,MAAM,CAACsG,8BAA8B,EAC/C;YAAC9F,KAAK,EAAE6F,OAAO,CAACE;UAAW,CAC7B,CAAC;QACH;QAEA,IAAIlB,sBAAsB,EAAE;UAC1B,IAAI,CAAC5G,UAAU,CACb;YAACqB,IAAI,EAAE,YAAY;YAAEC,QAAQ,EAAE;UAAgB,CAAC,EAChDkE,oBAAS,CAACjE,MAAM,CAACwG,8BAA8B,EAC/C;YAAChG,KAAK,EAAE6F,OAAO,CAACI;UAAY,CAC9B,CAAC;QACH;QAEA,IAAInB,wBAAwB,EAAE;UAC5B,IAAI,CAAC7G,UAAU,CACb;YAACqB,IAAI,EAAE,YAAY;YAAEC,QAAQ,EAAE;UAAgB,CAAC,EAChDkE,oBAAS,CAACjE,MAAM,CAAC0G,gCAAgC,EACjD;YAAClG,KAAK,EAAE6F,OAAO,CAACM;UAAc,CAChC,CAAC;QACH;QAEA,IAAIpB,mBAAmB,IAAIC,8BAA8B,EAAE;UACzD,IAAI,CAAC/G,UAAU,CACb;YAACqB,IAAI,EAAE,YAAY;YAAEC,QAAQ,EAAE;UAAgB,CAAC,EAChDkE,oBAAS,CAACjE,MAAM,CAAC4G,0BAA0B,EAC3C;YAACpG,KAAK,EAAE6F,OAAO,CAACQ;UAAS,CAC3B,CAAC;QACH;QAEA,IAAIpB,gCAAgC,EAAE;UACpC,IAAI,CAAChH,UAAU,CACb;YAACqB,IAAI,EAAE,YAAY;YAAEC,QAAQ,EAAE;UAAgB,CAAC,EAChDkE,oBAAS,CAACjE,MAAM,CAAC8G,2CAA2C,EAC5D;YAACtG,KAAK,EAAE6F,OAAO,CAACU;UAAsB,CACxC,CAAC;QACH;QAEA,IAAIrB,mBAAmB,EAAE;UACvB,IAAI,CAACjH,UAAU,CACb;YAACqB,IAAI,EAAE,YAAY;YAAEC,QAAQ,EAAE;UAAgB,CAAC,EAChDkE,oBAAS,CAACjE,MAAM,CAACgH,2BAA2B,EAC5C;YAACxG,KAAK,EAAE6F,OAAO,CAACY;UAAS,CAC3B,CAAC;QACH;QAEA,IAAItB,eAAe,EAAE;UACnB,IAAI,CAAClH,UAAU,CACb;YAACqB,IAAI,EAAE,YAAY;YAAEC,QAAQ,EAAE;UAAgB,CAAC,EAChDkE,oBAAS,CAACjE,MAAM,CAACkH,sBAAsB,EACvC;YAAC1G,KAAK,EAAE6F,OAAO,CAACc;UAAK,CACvB,CAAC;QACH;QAEA,IAAIxC,mBAAmB,IAAIC,yBAAyB,EAAE;UACpD,IAAIpE,KAAK,GAAG,IAAI;UAEhB,IAAIoE,yBAAyB,EAAE;YAC7B,IAAIyB,OAAO,CAAC3C,MAAM,CAAC0D,MAAM,EAAE;cACzB5G,KAAK,GAAG6G,0BAAe,CAACC,MAAM;YAChC,CAAC,MAAM;cACL;cACA9G,KAAK,GAAG6F,OAAO,CAAC3C,MAAM,CAAC6D,SAAS,GAAGF,0BAAe,CAACG,OAAO,GAAGH,0BAAe,CAAC7E,IAAI;YACnF;UACF,CAAC,MAAM,IAAImC,mBAAmB,EAAE;YAC9BnE,KAAK,GAAG6F,OAAO,CAAC3C,MAAM,CAAC6D,SAAS,GAAGF,0BAAe,CAACI,SAAS,GAAGJ,0BAAe,CAAC7E,IAAI;UACrF;UAEA,IAAI,CAAC/D,UAAU,CACb;YACEqB,IAAI,EAAE,YAAY;YAClBC,QAAQ,EAAE;UACZ,CAAC,EACDkE,oBAAS,CAACjE,MAAM,CAAC0H,0BAA0B,EAC3C;YACElH,KAAK,EAALA,KAAK;YACLmD,UAAU,EAAE0C,OAAO,CAAC3C,MAAM,CAACC,UAAU;YACrCgE,YAAY,EAAEtB,OAAO,CAAC3C,MAAM,CAACiE;UAC/B,CACF,CAAC;QACH;QAEA,IAAI9C,0BAA0B,EAAE;UAC9B,IAAO+C,mBAAmB,GAAIvB,OAAO,CAACwB,gBAAgB,CAA/CD,mBAAmB;UAE1B,IAAI,CAACnJ,UAAU,CACb;YACEqB,IAAI,EAAE,YAAY;YAClBC,QAAQ,EAAE;UACZ,CAAC,EACDkE,oBAAS,CAACjE,MAAM,CAAC8H,kCAAkC,EACnD;YACEF,mBAAmB,EAAnBA;UACF,CACF,CAAC;QACH;QAEA,IAAI9C,oBAAoB,EAAE;UACxB,IAAAiD,mBAAA,GAAgC1B,OAAO,CAAC2B,UAAU;YAA3CC,YAAY,GAAAF,mBAAA,CAAZE,YAAY;YAAEC,OAAO,GAAAH,mBAAA,CAAPG,OAAO;UAE5B,IAAI,CAACzJ,UAAU,CACb;YACEqB,IAAI,EAAE,YAAY;YAClBC,QAAQ,EAAE;UACZ,CAAC,EACDkE,oBAAS,CAACjE,MAAM,CAACmI,mCAAmC,EACpD;YACEF,YAAY,EAAZA,YAAY;YACZC,OAAO,EAAPA;UACF,CACF,CAAC;QACH;QAEA,IAAInD,kCAAkC,EAAE;UACtC,IAAOqD,cAAc,GAAI/B,OAAO,CAAC2B,UAAU,CAApCI,cAAc;UAErB,IAAI,CAAC3J,UAAU,CACb;YACEqB,IAAI,EAAE,YAAY;YAClBC,QAAQ,EAAE;UACZ,CAAC,EACDkE,oBAAS,CAACjE,MAAM,CAACqI,sDAAsD,EACvE;YACED,cAAc,EAAdA;UACF,CACF,CAAC;QACH;QAEA,IAAIpD,uBAAuB,EAAE;UAC3B,IAAOsD,OAAO,GAAIjC,OAAO,CAACkC,oBAAoB,CAAvCD,OAAO;UAEd,IAAI,CAAC7J,UAAU,CACb;YACEqB,IAAI,EAAE,YAAY;YAClBC,QAAQ,EAAE;UACZ,CAAC,EACDkE,oBAAS,CAACjE,MAAM,CAACwI,uCAAuC,EACxD;YACEF,OAAO,EAAPA;UACF,CACF,CAAC;QACH;QAEA,IAAIpD,kBAAkB,EAAE;UACtB,IAAOuD,QAAQ,GAAIpC,OAAO,CAAnBoC,QAAQ;UACfA,QAAQ,CAACC,cAAc,GAAGC,kBAAS,CAACC,yBAAyB,CAC3D1T,IAAI,EACJ,IAAI,CAACzF,KAAK,CAAC8R,QAAQ,CAACsH,MAAM,CAAC/X,GAC7B,CAAC;UACD,IAAI,CAAC2N,UAAU,CACb;YACEqB,IAAI,EAAE,YAAY;YAClBC,QAAQ,EAAE;UACZ,CAAC,EACDkE,oBAAS,CAACjE,MAAM,CAAC8I,iCAAiC,EAClD;YACEL,QAAQ,EAARA;UACF,CACF,CAAC;QACH;QAEA,IAAI7C,wBAAwB,EAAE;UAC5B,IAAOmD,cAAc,GAAI1C,OAAO,CAAzB0C,cAAc;UACrB,IAAI,CAACtK,UAAU,CACb;YACEqB,IAAI,EAAE,YAAY;YAClBC,QAAQ,EAAE;UACZ,CAAC,EACDkE,oBAAS,CAACjE,MAAM,CAACgJ,uCAAuC,EACxD;YACED,cAAc,EAAdA;UACF,CACF,CAAC;QACH;QAEA,IAAI9D,uBAAuB,EAAE;UAC3B,IAAOgE,aAAa,GAAI5C,OAAO,CAAxB4C,aAAa;UAEpB,IAAI,CAACzZ,aAAa,CAAC;YAACyZ,aAAa,EAAbA;UAAa,CAAC,CAAC;UAEnC,IAAI,CAACxK,UAAU,CACb;YACEqB,IAAI,EAAE,YAAY;YAClBC,QAAQ,EAAE;UACZ,CAAC,EACDkE,oBAAS,CAACjE,MAAM,CAACkJ,gCAAgC,EACjD;YACED,aAAa,EAAbA;UACF,CACF,CAAC;QACH;;QAEA;QACA;QACA,IAAI9D,sBAAsB,EAAE;UAC1B,IAAOgE,YAAY,GAAI9C,OAAO,CAAvB8C,YAAY;UAEnB,IAAI,CAAC3Z,aAAa,CAAC;YAAC4Z,kBAAkB,EAAED;UAAY,CAAC,CAAC;UAEtD,IAAI,CAAC1K,UAAU,CACb;YACEqB,IAAI,EAAE,YAAY;YAClBC,QAAQ,EAAE;UACZ,CAAC,EACDkE,oBAAS,CAACjE,MAAM,CAACqJ,qCAAqC,EACtD;YACE;YACAC,aAAa,EAAEH;UACjB,CACF,CAAC;QACH;QAEA,IAAItD,iBAAiB,EAAE;UACrB,IAAI,CAACpH,UAAU,CACb;YAACqB,IAAI,EAAE,YAAY;YAAEC,QAAQ,EAAE;UAAgB,CAAC,EAChDkE,oBAAS,CAACjE,MAAM,CAACuJ,wBAAwB,EACzC;YAAC/I,KAAK,EAAE6F,OAAO,CAACmD;UAAc,CAChC,CAAC;QACH;QAEA,IAAI1D,qBAAqB,EAAE;UACzB,IAAI,CAACrH,UAAU,CACb;YAACqB,IAAI,EAAE,YAAY;YAAEC,QAAQ,EAAE;UAAgB,CAAC,EAChDkE,oBAAS,CAACjE,MAAM,CAACyJ,6BAA6B,EAC9C;YAACjJ,KAAK,EAAE6F,OAAO,CAACqD;UAAW,CAC7B,CAAC;QACH;QAEA,IAAI3D,gCAAgC,EAAE;UACpC,IAAI,CAACtH,UAAU,CACb;YAACqB,IAAI,EAAE,YAAY;YAAEC,QAAQ,EAAE;UAAgB,CAAC,EAChDkE,oBAAS,CAACjE,MAAM,CAAC2J,wCAAwC,EACzD;YAACnJ,KAAK,EAAE6F,OAAO,CAACuD;UAAe,CACjC,CAAC;QACH;QAEA,IAAI5D,mBAAmB,EAAE;UACvB,IAAI,CAACvH,UAAU,CACb;YAACqB,IAAI,EAAE,YAAY;YAAEC,QAAQ,EAAE;UAAgB,CAAC,EAChDkE,oBAAS,CAACjE,MAAM,CAAC6J,2BAA2B,EAC5C;YAACrJ,KAAK,EAAE6F,OAAO,CAACyD;UAAW,CAC7B,CAAC;QACH;QAEA,IAAI7D,2BAA2B,EAAE;UAC/B,IAAI,CAACxH,UAAU,CACb;YAACqB,IAAI,EAAE,YAAY;YAAEC,QAAQ,EAAE;UAAgB,CAAC,EAChDkE,oBAAS,CAACjE,MAAM,CAAC+J,2BAA2B,EAC5C;YAACvJ,KAAK,EAAE6F,OAAO,CAAC2D;UAAiB,CACnC,CAAC;QACH;QAEA,IAAI9D,8BAA8B,EAAE;UAClC,IAAI,CAACzH,UAAU,CACb;YAACqB,IAAI,EAAE,YAAY;YAAEC,QAAQ,EAAE;UAAgB,CAAC,EAChDkE,oBAAS,CAACjE,MAAM,CAACiK,uCAAuC,EACxD;YAACzJ,KAAK,EAAE6F,OAAO,CAAC6D;UAAU,CAC5B,CAAC;QACH;QAEA,IAAI/D,0BAA0B,EAAE;UAC9B,IAAI,CAAC1H,UAAU,CACb;YAACqB,IAAI,EAAE,YAAY;YAAEC,QAAQ,EAAE;UAAgB,CAAC,EAChDkE,oBAAS,CAACjE,MAAM,CAACmK,2BAA2B,EAC5C;YAAC3J,KAAK,EAAE6F,OAAO,CAAC+D;UAAgB,CAClC,CAAC;QACH;QAEA,IAAIhE,wBAAwB,EAAE;UAC5B,IAAI,CAAC3H,UAAU,CACb;YAACqB,IAAI,EAAE,YAAY;YAAEC,QAAQ,EAAE;UAAgB,CAAC,EAChDkE,oBAAS,CAACjE,MAAM,CAACqK,yCAAyC,EAC1D;YAAC7J,KAAK,EAAE6F,OAAO,CAACiE;UAAqB,CACvC,CAAC;QACH;QAEA,IAAI,CAACrV,QAAQ,GAAGA,QAAQ;MAC1B;IACF;;IAEA;AACF;AACA;AACA;AACA;AACA;EALE;IAAA1E,GAAA;IAAA3D,KAAA,EAMA,SAAAkI,qBAAqBA,CAACC,eAAuB,EAAEzD,IAAS,EAAE;MACxD,IAAIyD,eAAe,IAAI,CAAC,IAAAuP,eAAO,EAAC,IAAI,CAACvP,eAAe,EAAEA,eAAe,CAAC,EAAE;QACtE,IAAI,CAACA,eAAe,GAAGA,eAAe;QACtC,IAAI,CAACvF,aAAa,CAAC;UAACuF,eAAe,EAAfA;QAAe,CAAC,CAAC;MACvC,CAAC,MAAM,IACLzD,IAAI,IACJA,IAAI,CAACyD,eAAe,IACpB,CAAC,IAAAuP,eAAO,EAAC,IAAI,CAACvP,eAAe,EAAEzD,IAAI,CAACyD,eAAe,CAAC,EACpD;QACA,IAAI,CAACA,eAAe,GAAGzD,IAAI,CAACyD,eAAe;QAC3C,IAAI,CAACvF,aAAa,CAAC;UAACuF,eAAe,EAAEzD,IAAI,CAACyD;QAAe,CAAC,CAAC;MAC7D;IACF;;IAEA;AACF;AACA;AACA;AACA;EAJE;IAAAxE,GAAA;IAAA3D,KAAA,EAKA,SAAA6T,aAAaA,CAACnM,OAAe,EAAE;MAC7B,IAAIA,OAAO,IAAI,CAAC,IAAAgQ,eAAO,EAAC,IAAI,CAAChQ,OAAO,EAAEA,OAAO,CAAC,EAAE;QAC9C,IAAI,CAACA,OAAO,GAAGA,OAAO;MACxB;IACF;;IAEA;AACF;AACA;AACA;AACA;AACA;EALE;IAAA/D,GAAA;IAAA3D,KAAA,EAMA,SAAAoJ,WAAWA,CAACC,KAAa,EAAE;MAAA,IAAAsU,WAAA,EAAAC,YAAA;MACzB,IAAAC,KAAA,GAA8BxU,KAAK,IAAI,CAAC,CAAC;QAAlCyU,QAAQ,GAAAD,KAAA,CAARC,QAAQ;QAAE7R,SAAS,GAAA4R,KAAA,CAAT5R,SAAS;MAE1B,IAAI6R,QAAQ,IAAI,CAAC,IAAApG,eAAO,GAAAiG,WAAA,GAAC,IAAI,CAACtU,KAAK,cAAAsU,WAAA,uBAAVA,WAAA,CAAYG,QAAQ,EAAEA,QAAQ,CAAC,EAAE;QACxD,IAAI,CAACjM,UAAU,CACb;UACEqB,IAAI,EAAE,YAAY;UAClBC,QAAQ,EAAE;QACZ,CAAC,EACDkE,oBAAS,CAACjE,MAAM,CAAC2K,cAAc,EAC/B;UACED,QAAQ,EAARA;QACF,CACF,CAAC;MACH;MAEA,IAAI7R,SAAS,IAAI,CAAC,IAAAyL,eAAO,GAAAkG,YAAA,GAAC,IAAI,CAACvU,KAAK,cAAAuU,YAAA,uBAAVA,YAAA,CAAY3R,SAAS,EAAEA,SAAS,CAAC,EAAE;QAC3D,IAAI,CAAC4F,UAAU,CACb;UACEqB,IAAI,EAAE,YAAY;UAClBC,QAAQ,EAAE;QACZ,CAAC,EACDkE,oBAAS,CAACjE,MAAM,CAAC4K,eAAe,EAChC;UACE/R,SAAS,EAATA;QACF,CACF,CAAC;MACH;MAEA,IAAI,CAAC5C,KAAK,GAAGA,KAAK;IACpB;;IAEA;AACF;AACA;AACA;AACA;EAJE;IAAA1F,GAAA;IAAA3D,KAAA,EAKA,SAAA0I,eAAeA,CAACC,SAAiB,EAAE;MACjC,IAAIA,SAAS,IAAI,CAAC,IAAA+O,eAAO,EAAC,IAAI,CAAC/O,SAAS,EAAEA,SAAS,CAAC,EAAE;QACpD,IAAMsV,MAAM,GAAGC,kBAAS,CAACC,YAAY,CAAC,IAAI,CAACxV,SAAS,EAAEA,SAAS,CAAC;QAEhE,IAAI,CAAC/F,aAAa,CAACqb,MAAM,CAACxE,OAAO,CAAC;QAElC,IAAIwE,MAAM,CAACnG,OAAO,CAACsG,qBAAqB,EAAE;UACxC,IAAI,CAACvM,UAAU,CACb;YACEqB,IAAI,EAAE,YAAY;YAClBC,QAAQ,EAAE;UACZ,CAAC,EACDkE,oBAAS,CAACjE,MAAM,CAACiL,+BAA+B,EAChD;YACEC,aAAa,EAAEL,MAAM,CAACM,QAAQ,IAAIN,MAAM,CAACM,QAAQ,CAACC,YAAY;YAC9DC,YAAY,EAAER,MAAM,CAACxE,OAAO,CAAC+E;UAC/B,CACF,CAAC;QACH;QAEA,IAAIP,MAAM,CAACnG,OAAO,CAAC4G,oBAAoB,EAAE;UACvC,IAAI,CAAC7M,UAAU,CACb;YACEqB,IAAI,EAAE,YAAY;YAClBC,QAAQ,EAAE;UACZ,CAAC,EACDkE,oBAAS,CAACjE,MAAM,CAACuL,sBAAsB,EACvC;YACE9R,IAAI,EAAEoR,MAAM,CAACxE,OAAO,CAAC5M;UACvB,CACF,CAAC;QACH;QACA,IAAI,CAAC5J,WAAW,CAAC0F,SAAS,GAAGsV,MAAM,CAACxE,OAAO;QAC3C,IAAI,CAAC9Q,SAAS,GAAGA,SAAS;MAC5B;IACF;;IAEA;AACF;AACA;AACA;AACA;AACA;AACA;EANE;IAAAhF,GAAA;IAAA3D,KAAA,EAOA,SAAAgJ,cAAcA,CAACC,IAAY,EAAE;MAC3B,IAAIA,IAAI,IAAI,CAAC,IAAAyO,eAAO,EAAC,IAAI,CAACzO,IAAI,EAAEA,IAAI,CAAC,EAAE;QACrC,IAAM2V,WAAW,GAAGC,kBAAS,CAACC,QAAQ,CAAC,IAAI,CAAC7V,IAAI,EAAEA,IAAI,CAAC;QAEvD,IAAI,CAACrG,aAAa,CAACgc,WAAW,CAACnF,OAAO,CAAC;QACvC,IAAI,CAACxW,WAAW,CAACgG,IAAI,GAAG2V,WAAW,CAACnF,OAAO;QAC3C,IAAImF,WAAW,CAAC9G,OAAO,CAACiH,SAAS,EAAE;UACjC,IAAI,CAAC3b,qBAAqB,CAAC8S,kBAAkB,GAAG,IAAI;UACpD,IAAI,CAACrE,UAAU,CACb;YACEqB,IAAI,EAAE,YAAY;YAClBC,QAAQ,EAAE;UACZ,CAAC,EACDC,iBAAM,CAAC4L,sBAAsB,EAC7B;YACEC,OAAO,EAAEL,WAAW,CAACnF,OAAO;YAC5ByF,OAAO,EAAEN,WAAW,CAACL;UACvB,CACF,CAAC;QACH;QACA,IAAI,CAACtV,IAAI,GAAGA,IAAI;MAClB,CAAC,MAAM;QACL,IAAI,CAAC7F,qBAAqB,CAAC8S,kBAAkB,GAAG,KAAK;MACvD;IACF;;IAEA;AACF;AACA;AACA;AACA;AACA;EALE;IAAAvS,GAAA;IAAA3D,KAAA,EAMA,SAAA4I,iBAAiBA,CAAClE,IAAY,EAAE4D,IAAa,EAAE;MAAA,IAAA6W,qBAAA;MAC7C,IAAMlQ,KAAK,GAAG3G,IAAI,GAAGyT,kBAAS,CAACqD,QAAQ,CAAC9W,IAAI,CAAC,GAAG,EAAA6W,qBAAA,OAAI,CAAClc,WAAW,CAACqF,IAAI,cAAA6W,qBAAA,uBAArBA,qBAAA,CAAuBlQ,KAAK,KAAI,EAAE;MAClF,IAAKvK,IAAI,IAAI,CAAC,IAAAgT,eAAO,EAAC,IAAI,CAAChT,IAAI,EAAEA,IAAI,CAAC,IAAM,CAAC,IAAAgT,eAAO,EAAC,IAAI,CAACzI,KAAK,EAAEA,KAAK,CAAC,IAAIvK,IAAK,EAAE;QAChF,IAAM2a,QAAQ,GAAGtD,kBAAS,CAACsD,QAAQ,CAAC/W,IAAI,IAAI,IAAI,CAACrF,WAAW,CAACqF,IAAI,CAAC;QAClE,IAAMgX,UAAU,GAAGC,kBAAS,CAACC,QAAQ,CAAC,IAAI,CAACvc,WAAW,CAACyB,IAAI,EAAEA,IAAI,EAAEuK,KAAK,EAAEoQ,QAAQ,CAAC;QAEnF,IAAIC,UAAU,CAACxH,OAAO,CAAC2H,QAAQ,EAAE;UAC/B,IAAI,CAAC5N,UAAU,CACb;YACEqB,IAAI,EAAE,YAAY;YAClBC,QAAQ,EAAE;UACZ,CAAC,EACDkE,oBAAS,CAACjE,MAAM,CAACsM,cAAc,EAC/Bhb,IACF,CAAC;QACH;QACA,IAAI4a,UAAU,CAACxH,OAAO,CAAC6H,UAAU,EAAE;UACjC,IAAI,CAAC9N,UAAU,CACb;YACEqB,IAAI,EAAE,YAAY;YAClBC,QAAQ,EAAE;UACZ,CAAC,EACDkE,oBAAS,CAACjE,MAAM,CAACwM,gBAAgB,EACjClb,IACF,CAAC;QACH;QAEA,IAAI,CAACA,IAAI,GAAGA,IAAI;QAChB,IAAI,CAACzB,WAAW,CAACyB,IAAI,GAAG4a,UAAU,CAAC7F,OAAO;QAC1C;QACA,IAAI,CAAC7W,aAAa,CAAC0c,UAAU,CAAC7F,OAAO,CAAC;QAEtC,IAAI,CAAC5H,UAAU,CACb;UACEqB,IAAI,EAAE,YAAY;UAClBC,QAAQ,EAAE;QACZ,CAAC,EACDkE,oBAAS,CAACjE,MAAM,CAACyM,oBAAoB,EACrC;UACEC,cAAc,EAAE,CAACxX,IAAI,CAAE;QACzB,CACF,CAAC;MACH;MACA,IAAI,CAAC2G,KAAK,GAAGA,KAAK;IACpB;;IAEA;AACF;AACA;AACA;AACA;EAJE;IAAAtL,GAAA;IAAA3D,KAAA,EAKA,SAAA6I,kBAAkBA,CAACC,YAAoB,EAAE;MACvC;MACA,IAAIiX,0BAAiB,CAACC,UAAU,CAAC,IAAI,CAAClX,YAAY,EAAEA,YAAY,CAAC,EAAE;QACjE;MACF;MAEA,IAAMmX,kBAAkB,GAAGF,0BAAiB,CAACpP,KAAK,CAAC7H,YAAY,CAAC;MAEhE,IAAI,CAAClG,aAAa,CAAC;QAACkG,YAAY,EAAEmX;MAAkB,CAAC,CAAC;MAEtD,IAAI,CAACpO,UAAU,CACb;QACEqB,IAAI,EAAE,YAAY;QAClBC,QAAQ,EAAE;MACZ,CAAC,EACDkE,oBAAS,CAACjE,MAAM,CAAC8M,qBAAqB,EACtCD,kBACF,CAAC;MACD,IAAI,CAACnX,YAAY,GAAGA,YAAY;IAClC;;IAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;EAPE;IAAAnF,GAAA;IAAA3D,KAAA,EAQA,SAAAkJ,iBAAiBA,CAACC,WAAmB,EAAuB;MAAA,IAArBgX,WAAW,GAAA7e,SAAA,CAAA3B,MAAA,QAAA2B,SAAA,QAAAmG,SAAA,GAAAnG,SAAA,MAAG,KAAK;MACxD,IAAI6H,WAAW,KAAK,CAAC,IAAAuO,eAAO,EAAC,IAAI,CAACvO,WAAW,EAAEA,WAAW,CAAC,IAAIgX,WAAW,CAAC,EAAE;QAC3E,IAAMC,iBAAiB,GAAGC,yBAAgB,CAACC,cAAc,CAAC,IAAI,CAACnX,WAAW,EAAEA,WAAW,CAAC;QAExF,IAAI,CAACvG,aAAa,CAACwd,iBAAiB,CAAC3G,OAAO,CAAC;QAC7C,IAAI,CAACxW,WAAW,CAACkG,WAAW,GAAGiX,iBAAiB,CAAC3G,OAAO;QACxD,IAAI,CAACtQ,WAAW,GAAGA,WAAW;QAC9B,IAAI,CAAC0I,UAAU,CACb;UACEqB,IAAI,EAAE,YAAY;UAClBC,QAAQ,EAAE;QACZ,CAAC,EACDC,iBAAM,CAACmN,8BAA8B,EACrC;UACE9G,OAAO,EAAE2G,iBAAiB,CAAC3G,OAAO;UAClC8E,QAAQ,EAAE6B,iBAAiB,CAAC7B,QAAQ;UACpC4B,WAAW,EAAXA;QACF,CACF,CAAC;MACH;IACF;;IAEA;AACF;AACA;AACA;AACA;EAJE;IAAAxc,GAAA;IAAA3D,KAAA,EAKA,SAAA8T,cAAcA,CAAClM,QAAgB,EAAE;MAC/B,IAAIA,QAAQ,IAAI,CAAC,IAAA8P,eAAO,EAAC,IAAI,CAAC9P,QAAQ,EAAEA,QAAQ,CAAC,EAAE;QACjD,IAAI,CAACA,QAAQ,GAAGA,QAAQ;MAC1B;IACF;;IAEA;AACF;AACA;AACA;AACA;AACA;AACA;EANE;IAAAjE,GAAA;IAAA3D,KAAA,EAOA,SAAA+I,UAAUA,CAACT,IAAS,EAAE;MACpB,IAAIA,IAAI,EAAE;QACR;QACA,IAAMkY,YAAY,GAAGzE,kBAAS,CAAC0E,SAAS,CACtC,IAAI,CAACxd,WAAW,CAACqF,IAAI,EACrBA,IAAI,EACJ,IAAI,CAACzF,KAAK,CAAC8R,QAAQ,CAACsH,MAAM,CAAC/X,GAAG,EAC9B,IAAI,CAAC6D,YAAY,CAAC;QACpB,CAAC;QAED,IAAI,CAACnF,aAAa,CAAC4d,YAAY,CAAC/G,OAAO,CAAC;QACxC,IAAI,CAACxW,WAAW,CAACqF,IAAI,GAAGkY,YAAY,CAAC/G,OAAO;QAE5C,IAAMiH,OAAO,GAAG,IAAI,CAACzd,WAAW,CAACC,MAAM,CAAC,IAAI,CAACD,WAAW,CAACC,MAAM,CAACvD,MAAM,GAAG,CAAC,CAAC;QAE3E,IAAI+gB,OAAO,KAAKF,YAAY,CAAC/G,OAAO,CAAC7F,KAAK,EAAE;UAC1C,IAAI,CAAC3Q,WAAW,CAACC,MAAM,CAAC/B,IAAI,CAACqf,YAAY,CAAC/G,OAAO,CAAC7F,KAAK,CAAC;QAC1D;;QAEA;QACA;QACA,IAAMqK,MAAM,GAAGlC,kBAAS,CAAC4E,SAAS,CAChC,IAAI,CAACxM,eAAe,CAAC,IAAI,CAACpM,YAAY,EAAEO,IAAI,CAAC,EAC7C,IAAI,CAACrF,WAAW,CAAC0F,SAAS,CAACkE,IAAI,EAC/B,IAAI,CAAC5J,WAAW,CAACyB,IAAI,CAACkc,MACxB,CAAC;QAED,IAAI3C,MAAM,CAAC2C,MAAM,EAAE;UACjB,IAAI,CAAChe,aAAa,CAACqb,MAAM,CAAC;QAC5B;QAEA,IAAIuC,YAAY,CAAC1I,OAAO,CAAC+I,gBAAgB,EAAE;UACzC,IAAI,CAACzd,qBAAqB,CAAC+S,kBAAkB,GAAG,IAAI;QACtD,CAAC,MAAM;UACL,IAAI,CAAC/S,qBAAqB,CAAC+S,kBAAkB,GAAG,KAAK;QACvD;QAEA,IAAIqK,YAAY,CAAC1I,OAAO,CAACgJ,aAAa,EAAE;UACtC,IAAI,CAACjP,UAAU,CACb;YACEqB,IAAI,EAAE,YAAY;YAClBC,QAAQ,EAAE;UACZ,CAAC,EACDkE,oBAAS,CAACjE,MAAM,CAAC2N,+BAA+B,EAChD;YAACC,MAAM,EAAER,YAAY,CAAC/G,OAAO,CAACuH;UAAM,CACtC,CAAC;QACH;QAEA,IAAIR,YAAY,CAAC1I,OAAO,CAACmJ,gBAAgB,EAAE;UACzC,IAAI,CAACpP,UAAU,CACb;YACEqB,IAAI,EAAE,YAAY;YAClBC,QAAQ,EAAE;UACZ,CAAC,EACDkE,oBAAS,CAACjE,MAAM,CAAC8N,8BAA8B,EAC/C;YAACC,gBAAgB,EAAEX,YAAY,CAAC/G,OAAO,CAAC0H;UAAgB,CAC1D,CAAC;QACH;QAEA,IAAIX,YAAY,CAAC1I,OAAO,CAACsJ,UAAU,EAAE;UACnC,IAAI,CAACvP,UAAU,CACb;YACEqB,IAAI,EAAE,YAAY;YAClBC,QAAQ,EAAE;UACZ,CAAC,EACDkE,oBAAS,CAACjE,MAAM,CAACiO,wBAAwB,EACzC;YACEC,GAAG,EAAEd,YAAY,CAAC/G,OAAO,CAAC6H;UAC5B,CACF,CAAC;QACH;QAEA,IAAId,YAAY,CAAC1I,OAAO,CAACyJ,qBAAqB,EAAE;UAC9C,IAAI,CAAC1P,UAAU,CACb;YACEqB,IAAI,EAAE,YAAY;YAClBC,QAAQ,EAAE;UACZ,CAAC,EACDkE,oBAAS,CAACjE,MAAM,CAACoO,mCAAmC,EACpD;YACErF,cAAc,EAAEqE,YAAY,CAAC/G,OAAO,CAAC0C,cAAc;YACnDsF,iBAAiB,EAAEjB,YAAY,CAAC/G,OAAO,CAACzC;UAC1C,CACF,CAAC;QACH;QAEA,IAAIwJ,YAAY,CAAC1I,OAAO,CAAC4J,yBAAyB,EAAE;UAClD,IAAI,CAAC7P,UAAU,CACb;YACEqB,IAAI,EAAE,YAAY;YAClBC,QAAQ,EAAE;UACZ,CAAC,EACDkE,oBAAS,CAACjE,MAAM,CAACuO,4BAA4B,EAC7C;YAACvc,MAAM,EAAEkD,IAAI,CAAClD;UAAM,CACtB,CAAC;QACH;QAEA,IAAIob,YAAY,CAAC1I,OAAO,CAAC+I,gBAAgB,EAAE;UACzC,IAAI,CAAChP,UAAU,CACb;YACEqB,IAAI,EAAE,YAAY;YAClBC,QAAQ,EAAE;UACZ,CAAC,EACDkE,oBAAS,CAACjE,MAAM,CAACwO,sBAAsB,EACvCtZ,IACF,CAAC;QACH;QAEA,IAAIkY,YAAY,CAAC1I,OAAO,CAAC+J,cAAc,EAAE;UAAA,IAAAC,qBAAA,EAAAC,qBAAA;UACvC,IAAI,CAAClQ,UAAU,CACb;YACEqB,IAAI,EAAE,YAAY;YAClBC,QAAQ,EAAE;UACZ,CAAC,EACDkE,oBAAS,CAACjE,MAAM,CAAC4O,kBAAkB,EACnC;YAACC,QAAQ,GAAAH,qBAAA,GAAEtB,YAAY,CAACjC,QAAQ,cAAAuD,qBAAA,uBAArBA,qBAAA,CAAuB7S,KAAK;YAAEiT,QAAQ,GAAAH,qBAAA,GAAEvB,YAAY,CAAC/G,OAAO,cAAAsI,qBAAA,uBAApBA,qBAAA,CAAsB9S;UAAK,CAChF,CAAC;QACH;QAEA,IAAIuR,YAAY,CAAC1I,OAAO,CAACqK,2BAA2B,EAAE;UACpD,IAAI,CAACtQ,UAAU,CACb;YACEqB,IAAI,EAAE,YAAY;YAClBC,QAAQ,EAAE;UACZ,CAAC,EACDkE,oBAAS,CAACjE,MAAM,CAACqJ,qCAAqC,EACtD;YACE2F,KAAK,EAAE5B,YAAY,CAAC/G,OAAO,CAAC4I;YAC5B;UACF,CACF,CAAC;QACH;QACA,IAAI7B,YAAY,CAAC1I,OAAO,CAACwK,gCAAgC,EAAE;UACzD,IAAI,CAACzQ,UAAU,CACb;YACEqB,IAAI,EAAE,YAAY;YAClBC,QAAQ,EAAE;UACZ,CAAC,EACDkE,oBAAS,CAACjE,MAAM,CAACmP,qBAAqB,EACtC;YACEH,KAAK,EAAE5B,YAAY,CAAC/G,OAAO,CAAC+I,WAAW;YACvC9F,aAAa,EAAE8D,YAAY,CAAC/G,OAAO,CAACiD;UACtC,CACF,CAAC;QACH;QACA,IAAI8D,YAAY,CAAC1I,OAAO,CAAC2K,sBAAsB,EAAE;UAC/C,IAAI,CAAC5Q,UAAU,CACb;YACEqB,IAAI,EAAE,YAAY;YAClBC,QAAQ,EAAE;UACZ,CAAC,EACDkE,oBAAS,CAACjE,MAAM,CAACsP,+BAA+B,EAChD;YACEN,KAAK,EAAE5B,YAAY,CAAC/G,OAAO,CAAC+I,WAAW;YACvC9F,aAAa,EAAE8D,YAAY,CAAC/G,OAAO,CAACiD;UACtC,CACF,CAAC;QACH;QACA,IAAI8D,YAAY,CAAC1I,OAAO,CAAC6K,iCAAiC,EAAE;UAC1D,IAAI,CAAC9Q,UAAU,CACb;YACEqB,IAAI,EAAE,YAAY;YAClBC,QAAQ,EAAE;UACZ,CAAC,EACDkE,oBAAS,CAACjE,MAAM,CAACwP,sBAAsB,EACvC,CAAC,CACH,CAAC;QACH;QACA,IAAIpC,YAAY,CAAC1I,OAAO,CAAC+K,mBAAmB,EAAE;UAC5C,IAAI,CAAChR,UAAU,CACb;YACEqB,IAAI,EAAE,YAAY;YAClBC,QAAQ,EAAE;UACZ,CAAC,EACDkE,oBAAS,CAACjE,MAAM,CAAC0P,qBAAqB,EACtCxa,IACF,CAAC;QACH;QACA,IAAIkY,YAAY,CAAC1I,OAAO,CAACiL,mBAAmB,EAAE;UAC5C,IAAI,CAAClR,UAAU,CACb;YACEqB,IAAI,EAAE,YAAY;YAClBC,QAAQ,EAAE;UACZ,CAAC,EACDkE,oBAAS,CAACjE,MAAM,CAAC4P,mBAAmB,EACpC1a,IACF,CAAC;QACH;QAEA,IAAIkY,YAAY,CAAC1I,OAAO,CAACmL,eAAe,EAAE;UACxC,IAAI,CAACpR,UAAU,CACb;YACEqB,IAAI,EAAE,YAAY;YAClBC,QAAQ,EAAE;UACZ,CAAC;UACD;UACAkE,oBAAS,CAACjE,MAAM,CAAC8P,gBAAgB,EACjCnH,kBAAS,CAACoH,cAAc,CAAC7a,IAAI,CAAC8a,aAAa,CAC7C,CAAC;QACH;QAEA,IACE5C,YAAY,CAAC1I,OAAO,CAACuL,gBAAgB,IACrC7C,YAAY,CAAC1I,OAAO,CAACwL,gBAAgB,IACrC9C,YAAY,CAAC1I,OAAO,CAACyL,gBAAgB,EACrC;UAAA,IAAAC,sBAAA,EAAAC,sBAAA,EAAAC,sBAAA;UACA,IAAI,CAAC7R,UAAU,CACb;YACEqB,IAAI,EAAE,YAAY;YAClBC,QAAQ,EAAE;UACZ,CAAC,EACDkE,oBAAS,CAACjE,MAAM,CAACuQ,mBAAmB,EACpC;YACEC,WAAW,GAAAJ,sBAAA,GAAEhD,YAAY,CAAC/G,OAAO,CAACoK,kBAAkB,cAAAL,sBAAA,uBAAvCA,sBAAA,CAAyCM,KAAK;YAC3DC,WAAW,GAAAN,sBAAA,GAAEjD,YAAY,CAAC/G,OAAO,CAACoK,kBAAkB,cAAAJ,sBAAA,uBAAvCA,sBAAA,CAAyClJ,KAAK;YAC3DyJ,WAAW,GAAAN,sBAAA,GAAElD,YAAY,CAAC/G,OAAO,CAACoK,kBAAkB,cAAAH,sBAAA,uBAAvCA,sBAAA,CAAyCO;UACxD,CACF,CAAC;QACH;QAEA,IAAIzD,YAAY,CAAC1I,OAAO,CAACoM,eAAe,EAAE;UACxC,IAAI,CAACrS,UAAU,CACb;YACEqB,IAAI,EAAE,YAAY;YAClBC,QAAQ,EAAE;UACZ,CAAC,EACDkE,oBAAS,CAACjE,MAAM,CAAC+Q,cACnB,CAAC;QACH;QAEA,IAAI3D,YAAY,CAAC1I,OAAO,CAACsM,mCAAmC,EAAE;UAC5D,IAAI,CAACvS,UAAU,CACb;YACEqB,IAAI,EAAE,YAAY;YAClBC,QAAQ,EAAE;UACZ,CAAC,EACDkE,oBAAS,CAACjE,MAAM,CAACiR,wCAAwC,EACzD;YAACC,4BAA4B,EAAE9D,YAAY,CAAC/G,OAAO,CAAC6K;UAA4B,CAClF,CAAC;QACH;QAEA,IAAI9D,YAAY,CAAC1I,OAAO,CAACyM,uBAAuB,EAAE;UAChD,IAAI,CAAC1S,UAAU,CACb;YACEqB,IAAI,EAAE,YAAY;YAClBC,QAAQ,EAAE;UACZ,CAAC,EACDkE,oBAAS,CAACjE,MAAM,CAACoR,8BAA8B,EAC/C;YAACC,gBAAgB,EAAEjE,YAAY,CAAC/G,OAAO,CAACgL;UAAgB,CAC1D,CAAC;QACH;QAEA,IAAI,CAAC5S,UAAU,CACb;UACEqB,IAAI,EAAE,YAAY;UAClBC,QAAQ,EAAE;QACZ,CAAC,EACDC,iBAAM,CAACsR,sBAAsB,EAC7B;UACEC,OAAO,EAAEnE,YAAY,CAACjC,QAAQ;UAC9BqG,OAAO,EAAEpE,YAAY,CAAC/G;QACxB,CACF,CAAC;QACD,IAAI,CAACxW,WAAW,CAACqF,IAAI,GAAGkY,YAAY,CAAC/G,OAAO;QAC5C;QACA,IAAI,CAACnR,IAAI,GAAGA,IAAI;MAClB,CAAC,MAAM;QACL,IAAI,CAAClF,qBAAqB,CAAC+S,kBAAkB,GAAG,KAAK;MACvD;IACF;;IAEA;AACF;AACA;AACA;AACA;AACA;AACA;EANE;IAAAxS,GAAA;IAAA3D,KAAA,EAOA,SAAAuI,cAAcA,CAACrE,GAAW,EAAsB;MAAA,IAApB2gB,WAAW,GAAAvjB,SAAA,CAAA3B,MAAA,QAAA2B,SAAA,QAAAmG,SAAA,GAAAnG,SAAA,MAAG,IAAI;MAC5C,IAAI4C,GAAG,IAAI,IAAI,CAACA,GAAG,KAAKA,GAAG,EAAE;QAC3B,IAAI,CAACA,GAAG,GAAGA,GAAG;QACd,IAAI,CAACtB,aAAa,CAAC;UAAC2B,QAAQ,EAAEL;QAAG,CAAC,CAAC;QACnC,IAAI,CAAC2N,UAAU,CACb;UACEqB,IAAI,EAAE,YAAY;UAClBC,QAAQ,EAAE;QACZ,CAAC,EACDC,iBAAM,CAAC0R,qBAAqB,EAC5B;UAAC5gB,GAAG,EAAHA,GAAG;UAAE2gB,WAAW,EAAXA;QAAW,CACnB,CAAC;MACH;IACF;;IAEA;AACF;AACA;AACA;AACA;EAJE;IAAAlhB,GAAA;IAAA3D,KAAA,EAKA,SAAA+T,YAAYA,CAAClM,MAAc,EAAE;MAC3B,IAAIA,MAAM,IAAI,CAAC,IAAA6P,eAAO,EAAC,IAAI,CAAC7P,MAAM,EAAEA,MAAM,CAAC,EAAE;QAC3C,IAAI,CAACA,MAAM,GAAGA,MAAM;MACtB;IACF;;IAEA;AACF;AACA;AACA;AACA;EAJE;IAAAlE,GAAA;IAAA3D,KAAA,EAKA,SAAAgU,gBAAgBA,CAAC7N,YAAoB,EAAE;MACrC,IAAIA,YAAY,IAAI,CAAC,IAAAuR,eAAO,EAAC,IAAI,CAACvR,YAAY,EAAEA,YAAY,CAAC,EAAE;QAC7D,IAAI,CAACA,YAAY,GAAGA,YAAY;MAClC;IACF;;IAEA;AACF;AACA;AACA;AACA;EAJE;IAAAxC,GAAA;IAAA3D,KAAA,EAKA,SAAAiU,cAAcA,CAACnM,QAAgB,EAAE;MAC/B,IAAIA,QAAQ,IAAI,CAAC,IAAA4P,eAAO,EAAC,IAAI,CAAC5P,QAAQ,EAAEA,QAAQ,CAAC,EAAE;QACjD,IAAI,CAACA,QAAQ,GAAGA,QAAQ;MAC1B;IACF;;IAEA;AACF;AACA;AACA;AACA;AACA;EALE;IAAAnE,GAAA;IAAA3D,KAAA,EAMA,SAAAgI,gBAAgBA,CAACjE,KAAU,EAAE;MAC3B,IAAM0E,gBAAgB,GAAGD,sBAAa,CAACC,gBAAgB,CAAC1E,KAAK,CAAC;MAC9D,IAAI0E,gBAAgB,EAAE;QACpB,IAAI,CAACsc,2BAA2B,CAAChhB,KAAK,CAAC;MACzC;IACF;;IAEA;AACF;AACA;AACA;AACA;AACA;AACA;EANE;IAAAJ,GAAA;IAAA3D,KAAA,EAOA,SAAA6Q,mBAAmBA,CAACmU,QAAa,EAAE;MACjC,IAAMC,YAAY,GAAGzc,sBAAa,CAAC0c,sBAAsB,CAAC,IAAI,EAAEF,QAAQ,CAAC;MAEzE,IAAIC,YAAY,CAACE,cAAc,IAAI,IAAI,CAACC,qBAAqB,EAAE;QAC7D,OAAO,IAAAhV,iBAAS,EAAC,IAAI,CAACgV,qBAAqB,CAAC;MAC9C;MACA,IAAM3c,gBAAgB,GACpB,IAAI,CAAC2c,qBAAqB,IAAI5c,sBAAa,CAACC,gBAAgB,CAAC,IAAI,CAAC2c,qBAAqB,CAAC;MAE1F,IAAI3c,gBAAgB,EAAE;QAAA,IAAA4c,eAAA,EAAAC,qBAAA,EAAAC,sBAAA;QACpB,IAAMC,QAAQ,GACZ,CAAChR,gBAAK,CAACC,KAAK,CAACgR,MAAM,EAAEjR,gBAAK,CAACC,KAAK,CAACiR,YAAY,EAAElR,gBAAK,CAACC,KAAK,CAACsB,WAAW,CAAC,CAAC4P,QAAQ,EAAAN,eAAA,GAC9E,IAAI,CAAC1c,SAAS,cAAA0c,eAAA,uBAAdA,eAAA,CAAgBzR,KAClB,CAAC,IAAI,GAAA0R,qBAAA,GAAC,IAAI,CAACF,qBAAqB,cAAAE,qBAAA,gBAAAC,sBAAA,GAA1BD,qBAAA,CAA4Bhd,IAAI,cAAAid,sBAAA,eAAhCA,sBAAA,CAAkChjB,OAAO;QAEjD,IAAI,CAACijB,QAAQ,EAAE;UACb,IAAI,CAACI,0BAA0B,CAAC,CAAC;QACnC;MACF;MAEA,OAAOZ,QAAQ;IACjB;;IAEA;AACF;AACA;AACA;AACA;AACA;AACA;IACE;EAAA;IAAArhB,GAAA;IAAA3D,KAAA,EACA,SAAAyT,iBAAiBA,CAAC1L,YAAY,EAAE8d,kBAAkB,EAAE;MAClD,IAAI,CAACA,kBAAkB,IAAI,CAACA,kBAAkB,CAAClmB,MAAM,EAAE,OAAOoI,YAAY;MAC1E,IAAI,CAACA,YAAY,IAAI,CAACA,YAAY,CAACpI,MAAM,EAAE;QACzC,OAAOkmB,kBAAkB;MAC3B;MACAA,kBAAkB,CAACrkB,OAAO,CAAC,UAAC8M,WAAW,EAAK;QAC1C,IAAMwX,UAAU,GAAG/d,YAAY,CAACge,SAAS,CAAC,UAACC,CAAC;UAAA,OAAKA,CAAC,CAAC7Y,EAAE,KAAKmB,WAAW,CAACnB,EAAE;QAAA,EAAC;QACzE,IAAI2Y,UAAU,GAAG,CAAC,CAAC,EAAE;UACnB/d,YAAY,CAACke,MAAM,CAACH,UAAU,EAAE,CAAC,EAAExX,WAAW,CAAC;QACjD,CAAC,MAAM;UACLvG,YAAY,CAAC5G,IAAI,CAACmN,WAAW,CAAC;QAChC;MACF,CAAC,CAAC;MAEF,OAAOvG,YAAY;IACrB;;IAEA;AACF;AACA;AACA;AACA;AACA;EALE;IAAApE,GAAA;IAAA3D,KAAA,EAMA,SAAA+kB,2BAA2BA,CAACmB,SAAc,EAAE;MAAA,IAAAC,MAAA;MAC1C,IAAI,CAACD,SAAS,EAAE;QACd;MACF;MACA,IAAME,UAAU,GAAG,IAAAhW,iBAAS,EAAC8V,SAAS,CAAC;MACvC,IAAI,IAAI,CAACd,qBAAqB,EAAE;QAC9B;QACA,IAAAiB,kBAAU,EAAC,IAAI,CAACjB,qBAAqB,EAAEgB,UAAU,EAAE,UAACE,QAAQ,EAAEC,QAAQ,EAAE5iB,GAAG,EAAK;UAC9E,IAAIA,GAAG,KAAK,cAAc,EAAE;YAC1B,OAAOwiB,MAAI,CAAC1S,iBAAiB,CAAC6S,QAAQ,EAAEC,QAAQ,CAAC;UACnD;UAEA,OAAOA,QAAQ,IAAID,QAAQ;QAC7B,CAAC,CAAC;MACJ,CAAC,MAAM;QACL,IAAI,CAAClB,qBAAqB,GAAGgB,UAAU;MACzC;IACF;;IAEA;AACF;AACA;AACA;AACA;EAJE;IAAAziB,GAAA;IAAA3D,KAAA,EAKA,SAAA4lB,0BAA0BA,CAAA,EAAG;MAC3B,IAAI,CAACR,qBAAqB,GAAG,IAAI;IACnC;EAAC;AAAA,EAhuEoCoB,oBAAW","ignoreList":[]}
|