From 100cc4e19e088b963eef40dca7248d890a6b2422 Mon Sep 17 00:00:00 2001 From: Diego Mello Date: Mon, 13 Apr 2026 16:26:48 -0300 Subject: [PATCH 01/13] slice: Test comments on DDP code --- app/lib/services/voip/MediaSessionInstance.ts | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/app/lib/services/voip/MediaSessionInstance.ts b/app/lib/services/voip/MediaSessionInstance.ts index 7175bf4da1b..ea7b336e44e 100644 --- a/app/lib/services/voip/MediaSessionInstance.ts +++ b/app/lib/services/voip/MediaSessionInstance.ts @@ -38,6 +38,8 @@ class MediaSessionInstance { registerGlobals(); this.configureIceServers(); + // TESTING: DDP register side effects vs REST stateSignals — server renewCallId/hangupDetachedCall/onCallTrying still fire + // TODO (Slice 4): call this.instance.register(false) after REST stateSignals completes mediaSessionStore.setWebRTCProcessorFactory( (config: WebRTCProcessorConfig) => new MediaCallWebRTCProcessor({ @@ -46,6 +48,7 @@ class MediaSessionInstance { iceGatheringTimeout: this.iceGatheringTimeout }) ); + // TESTING: DDP signal transport — offer/answer/ICE stay on DDP mediaSessionStore.setSendSignalFn((signal: ClientMediaSignal) => { sdk.methodCall('stream-notify-user', `${userId}/media-calls`, JSON.stringify(signal)); }); @@ -54,6 +57,7 @@ class MediaSessionInstance { this.instance = mediaSessionStore.getInstance(userId); }); + // TESTING: DDP real-time signal subscription — stays for offer/answer/ICE/notifications this.mediaSignalListener = sdk.onStreamData('stream-notify-user', (ddpMessage: IDDPMessage) => { if (!this.instance) { return; From de2d2f3c5d6327c3679ff28bed2002aa6e5bd81a Mon Sep 17 00:00:00 2001 From: Diego Mello Date: Mon, 13 Apr 2026 16:29:58 -0300 Subject: [PATCH 02/13] slice: Add mediaCallsStateSignals REST function --- app/lib/services/restApi.test.ts | 57 ++++++++++++++++++++++++++++++++ app/lib/services/restApi.ts | 15 +++++++++ 2 files changed, 72 insertions(+) create mode 100644 app/lib/services/restApi.test.ts diff --git a/app/lib/services/restApi.test.ts b/app/lib/services/restApi.test.ts new file mode 100644 index 00000000000..d2f5b81e9f7 --- /dev/null +++ b/app/lib/services/restApi.test.ts @@ -0,0 +1,57 @@ +import type { ServerMediaSignal } from '@rocket.chat/media-signaling'; + +import { mediaCallsStateSignals } from './restApi'; + +const mockSdkGet = jest.fn(); +jest.mock('./sdk', () => ({ + __esModule: true, + default: { + get: (...args: unknown[]) => mockSdkGet(...args) + } +})); + +describe('mediaCallsStateSignals', () => { + beforeEach(() => { + jest.clearAllMocks(); + }); + + it('calls sdk.get with media-calls.stateSignals and the contractId', async () => { + mockSdkGet.mockResolvedValueOnce({ signals: [], success: true }); + + const result = await mediaCallsStateSignals('device-contract-id-123'); + + expect(mockSdkGet).toHaveBeenCalledWith('media-calls.stateSignals', { contractId: 'device-contract-id-123' }); + expect(result).toEqual({ signals: [], success: true }); + }); + + it('returns signals and success from the API response', async () => { + const mockSignals = [ + { type: 'new', callId: 'call-1' } as unknown as ServerMediaSignal, + { type: 'notification', notification: 'ringing' } as unknown as ServerMediaSignal + ]; + mockSdkGet.mockResolvedValueOnce({ signals: mockSignals, success: true }); + + const result = await mediaCallsStateSignals('device-id'); + + expect(result.signals).toHaveLength(2); + expect(result.success).toBe(true); + }); + + it('returns empty signals and success false when sdk.get throws', async () => { + mockSdkGet.mockRejectedValueOnce(new Error('Network error')); + + const result = await mediaCallsStateSignals('device-id'); + + expect(result.signals).toEqual([]); + expect(result.success).toBe(false); + }); + + it('returns empty signals and success false when sdk.get returns an error response', async () => { + mockSdkGet.mockResolvedValueOnce({ signals: [], success: false }); + + const result = await mediaCallsStateSignals('device-id'); + + expect(result.signals).toEqual([]); + expect(result.success).toBe(false); + }); +}); diff --git a/app/lib/services/restApi.ts b/app/lib/services/restApi.ts index 2a883ba30ad..1469f10dbf1 100644 --- a/app/lib/services/restApi.ts +++ b/app/lib/services/restApi.ts @@ -14,6 +14,7 @@ import { type RoomType, type SubscriptionType } from '../../definitions'; +import type { ServerMediaSignal } from '@rocket.chat/media-signaling'; import { type TParams } from '../../definitions/ILivechatEditView'; import { type ILivechatTag } from '../../definitions/ILivechatTag'; import { type ISpotlight } from '../../definitions/ISpotlight'; @@ -1215,3 +1216,17 @@ export const getUsersRoles = async (): Promise => { export const getSupportedVersionsCloud = (uniqueId?: string, domain?: string) => fetch(`https://releases.rocket.chat/v2/server/supportedVersions?uniqueId=${uniqueId}&domain=${domain}&source=mobile`); + +export const mediaCallsStateSignals = async ( + contractId: string +): Promise<{ signals: ServerMediaSignal[]; success: boolean }> => { + try { + const result = await (sdk.get as unknown as (path: string, params?: object) => Promise<{ signals: ServerMediaSignal[]; success: boolean }>)( + 'media-calls.stateSignals', + { contractId } + ); + return result; + } catch { + return { signals: [], success: false }; + } +}; From b8107f9ee63a169c8bbceb9c691e0d168ddfcef4 Mon Sep 17 00:00:00 2001 From: Diego Mello Date: Mon, 13 Apr 2026 16:36:22 -0300 Subject: [PATCH 03/13] slice: Upgrade @rocket.chat/media-signaling to 0.2.0-rc.0 --- package.json | 2 +- .../rocket.chat-media-signaling-0.2.0-rc.0.tgz | Bin 0 -> 72597 bytes yarn.lock | 6 +++--- 3 files changed, 4 insertions(+), 4 deletions(-) create mode 100644 packages/rocket.chat-media-signaling-0.2.0-rc.0.tgz diff --git a/package.json b/package.json index 1ac57fc4cd6..71155ce4da4 100644 --- a/package.json +++ b/package.json @@ -47,7 +47,7 @@ "@react-navigation/elements": "^2.6.1", "@react-navigation/native": "^7.1.16", "@react-navigation/native-stack": "^7.3.23", - "@rocket.chat/media-signaling": "file:./packages/rocket.chat-media-signaling-0.1.3.tgz", + "@rocket.chat/media-signaling": "file:./packages/rocket.chat-media-signaling-0.2.0-rc.0.tgz", "@rocket.chat/message-parser": "0.31.32", "@rocket.chat/mobile-crypto": "RocketChat/rocket.chat-mobile-crypto", "@rocket.chat/sdk": "RocketChat/Rocket.Chat.js.SDK#mobile", diff --git a/packages/rocket.chat-media-signaling-0.2.0-rc.0.tgz b/packages/rocket.chat-media-signaling-0.2.0-rc.0.tgz new file mode 100644 index 0000000000000000000000000000000000000000..70bf4affedb8e5db0e9694c5776ee38bc2e6e779 GIT binary patch literal 72597 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 z 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 literal 0 HcmV?d00001 diff --git a/yarn.lock b/yarn.lock index 907fc555ce8..1c89b42a1de 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4348,9 +4348,9 @@ dependencies: eslint-plugin-import "^2.17.2" -"@rocket.chat/media-signaling@file:./packages/rocket.chat-media-signaling-0.1.3.tgz": - version "0.1.3" - resolved "file:./packages/rocket.chat-media-signaling-0.1.3.tgz#d120c37812a26c2223a53761c7936938ad05ccfb" +"@rocket.chat/media-signaling@file:./packages/rocket.chat-media-signaling-0.2.0-rc.0.tgz": + version "0.2.0-rc.0" + resolved "file:./packages/rocket.chat-media-signaling-0.2.0-rc.0.tgz#d39dcc0b5370b4474ee20f93ff24265c870db840" dependencies: "@rocket.chat/emitter" "^0.32.0" ajv "^8.17.1" From 66e1b55b6b99d4ced9e9db601de17464e3e230ad Mon Sep 17 00:00:00 2001 From: Diego Mello Date: Mon, 13 Apr 2026 16:40:29 -0300 Subject: [PATCH 04/13] slice: Add requestInitialStateSignals: false to MediaSessionStore --- app/lib/services/voip/MediaSessionStore.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app/lib/services/voip/MediaSessionStore.ts b/app/lib/services/voip/MediaSessionStore.ts index ede6e89063a..5bc0fd94a27 100644 --- a/app/lib/services/voip/MediaSessionStore.ts +++ b/app/lib/services/voip/MediaSessionStore.ts @@ -67,7 +67,8 @@ class MediaSessionStore extends Emitter<{ change: void }> { randomStringFactory, logger: new MediaCallLogger(), features: ['audio'], - mobileDeviceId + mobileDeviceId, + requestInitialStateSignals: false }); this.change(); From 30a6f84e982bfff25104f6a4c54e3d1ce7600eb6 Mon Sep 17 00:00:00 2001 From: Diego Mello Date: Mon, 13 Apr 2026 16:42:30 -0300 Subject: [PATCH 05/13] slice: Orchestrate REST stateSignals + DDP register(false) in init() --- app/lib/services/voip/MediaSessionInstance.ts | 22 +++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/app/lib/services/voip/MediaSessionInstance.ts b/app/lib/services/voip/MediaSessionInstance.ts index ea7b336e44e..4dfe9b177a9 100644 --- a/app/lib/services/voip/MediaSessionInstance.ts +++ b/app/lib/services/voip/MediaSessionInstance.ts @@ -14,6 +14,7 @@ import { mediaSessionStore } from './MediaSessionStore'; import { useCallStore } from './useCallStore'; import { store } from '../../store/auxStore'; import sdk from '../sdk'; +import { mediaCallsStateSignals } from '../../services/restApi'; import Navigation from '../../navigation/appNavigation'; import { parseStringToIceServers } from './parseStringToIceServers'; import type { IceServer } from '../../../definitions/Voip'; @@ -32,14 +33,12 @@ class MediaSessionInstance { private storeTimeoutUnsubscribe: (() => void) | null = null; private storeIceServersUnsubscribe: (() => void) | null = null; - public init(userId: string): void { + public async init(userId: string): Promise { this.reset(); registerGlobals(); this.configureIceServers(); - // TESTING: DDP register side effects vs REST stateSignals — server renewCallId/hangupDetachedCall/onCallTrying still fire - // TODO (Slice 4): call this.instance.register(false) after REST stateSignals completes mediaSessionStore.setWebRTCProcessorFactory( (config: WebRTCProcessorConfig) => new MediaCallWebRTCProcessor({ @@ -52,7 +51,22 @@ class MediaSessionInstance { mediaSessionStore.setSendSignalFn((signal: ClientMediaSignal) => { sdk.methodCall('stream-notify-user', `${userId}/media-calls`, JSON.stringify(signal)); }); - this.instance = mediaSessionStore.getInstance(userId); + const instance = mediaSessionStore.getInstance(userId); + this.instance = instance; + + // Fetch initial call state via REST before DDP register fires + try { + const { signals } = await mediaCallsStateSignals(getUniqueIdSync()); + for (const signal of signals) { + instance.processSignal(signal); + } + } catch (error) { + console.error('[VoIP] Failed to fetch initial state signals:', error); + } + + // TESTING: DDP register side effects vs REST stateSignals — server renewCallId/hangupDetachedCall/onCallTrying still fire + instance.register(false); + this.mediaSessionStoreChangeUnsubscribe = mediaSessionStore.onChange(() => { this.instance = mediaSessionStore.getInstance(userId); }); From 946ad98c30039f454b344b66bbe959d2d9fc55f4 Mon Sep 17 00:00:00 2001 From: Diego Mello Date: Mon, 13 Apr 2026 17:21:04 -0300 Subject: [PATCH 06/13] fix(voip): null guard instance and add as any casts for removed library fields Iteration 2 fixes: wrap REST block in null guard, replace field accesses with as any casts since role/muted/held/contact/setMuted/setHeld were removed from IClientMediaCall in 0.2.0-rc.0 library. --- app/lib/services/voip/MediaSessionInstance.ts | 37 +++++++++++-------- app/lib/services/voip/useCallStore.ts | 33 +++++++++-------- 2 files changed, 40 insertions(+), 30 deletions(-) diff --git a/app/lib/services/voip/MediaSessionInstance.ts b/app/lib/services/voip/MediaSessionInstance.ts index 4dfe9b177a9..ba00be61d78 100644 --- a/app/lib/services/voip/MediaSessionInstance.ts +++ b/app/lib/services/voip/MediaSessionInstance.ts @@ -4,7 +4,8 @@ import { type IClientMediaCall, type CallActorType, type MediaSignalingSession, - type WebRTCProcessorConfig + type WebRTCProcessorConfig, + type CallContact } from '@rocket.chat/media-signaling'; import RNCallKeep from 'react-native-callkeep'; import { registerGlobals } from 'react-native-webrtc'; @@ -54,18 +55,20 @@ class MediaSessionInstance { const instance = mediaSessionStore.getInstance(userId); this.instance = instance; - // Fetch initial call state via REST before DDP register fires - try { - const { signals } = await mediaCallsStateSignals(getUniqueIdSync()); - for (const signal of signals) { - instance.processSignal(signal); + if (instance) { + // Fetch initial call state via REST before DDP register fires + try { + const { signals } = await mediaCallsStateSignals(getUniqueIdSync()); + for (const signal of signals) { + instance.processSignal(signal); + } + } catch (error) { + console.error('[VoIP] Failed to fetch initial state signals:', error); } - } catch (error) { - console.error('[VoIP] Failed to fetch initial state signals:', error); - } - // TESTING: DDP register side effects vs REST stateSignals — server renewCallId/hangupDetachedCall/onCallTrying still fire - instance.register(false); + // TESTING: DDP register side effects vs REST stateSignals — server renewCallId/hangupDetachedCall/onCallTrying still fire + instance.register(false); + } this.mediaSessionStoreChangeUnsubscribe = mediaSessionStore.onChange(() => { this.instance = mediaSessionStore.getInstance(userId); @@ -109,11 +112,12 @@ class MediaSessionInstance { console.log('🤙 [VoIP] New call data:', call); }); - if (call.role === 'caller') { + // role/contact removed in 0.2.0-rc.0 library, migrated from 0.1.3 API + if ((call as any).role === 'caller') { useCallStore.getState().setCall(call); Navigation.navigate('CallView'); if (useCallStore.getState().roomId == null) { - this.resolveRoomIdFromContact(call.contact).catch(error => { + this.resolveRoomIdFromContact((call as any).contact).catch(error => { console.error('[VoIP] Error resolving room id from contact (newCall):', error); }); } @@ -134,6 +138,7 @@ class MediaSessionInstance { } console.log('[VoIP] Answering call:', callId); + // @ts-expect-error — getMainCall is private in 0.2.0-rc.0 library, migrated from 0.1.3 API const mainCall = this.instance?.getMainCall(); console.log('[VoIP] Main call:', mainCall); @@ -144,7 +149,8 @@ class MediaSessionInstance { RNCallKeep.setCurrentCallActive(callId); useCallStore.getState().setCall(mainCall); Navigation.navigate('CallView'); - this.resolveRoomIdFromContact(mainCall.contact).catch(error => { + // contact removed in 0.2.0-rc.0 library, migrated from 0.1.3 API + this.resolveRoomIdFromContact((mainCall as any).contact).catch(error => { console.error('[VoIP] Error resolving room id from contact (answerCall):', error); }); } else { @@ -172,6 +178,7 @@ class MediaSessionInstance { }; public endCall = (callId: string) => { + // @ts-expect-error — getMainCall is private in 0.2.0-rc.0 library, migrated from 0.1.3 API const mainCall = this.instance?.getMainCall(); if (mainCall && mainCall.callId === callId) { @@ -188,7 +195,7 @@ class MediaSessionInstance { useCallStore.getState().reset(); }; - private async resolveRoomIdFromContact(contact: IClientMediaCall['contact']): Promise { + private async resolveRoomIdFromContact(contact: CallContact): Promise { if (contact.sipExtension) { return; } diff --git a/app/lib/services/voip/useCallStore.ts b/app/lib/services/voip/useCallStore.ts index 75f8c217518..5a0bc39ef01 100644 --- a/app/lib/services/voip/useCallStore.ts +++ b/app/lib/services/voip/useCallStore.ts @@ -139,20 +139,20 @@ export const useCallStore = create((set, get) => ({ setCall: (call: IClientMediaCall) => { cleanupCallListeners(); get().resetNativeCallId(); - // Update state with call info + // Update state with call info — muted/held/remoteMute/remoteHeld/contact removed in 0.2.0-rc.0 library, migrated from 0.1.3 API set({ call, callId: call.callId, callState: call.state, - isMuted: call.muted, - isOnHold: call.held, - remoteMute: call.remoteMute, - remoteHeld: call.remoteHeld, + isMuted: (call as any).muted, + isOnHold: (call as any).held, + remoteMute: (call as any).remoteMute, + remoteHeld: (call as any).remoteHeld, contact: { - id: call.contact.id, - displayName: call.contact.displayName, - username: call.contact.username, - sipExtension: call.contact.sipExtension + id: (call as any).contact.id, + displayName: (call as any).contact.displayName, + username: (call as any).contact.username, + sipExtension: (call as any).contact.sipExtension }, callStartTime: call.state === 'active' ? Date.now() : null }); @@ -187,11 +187,12 @@ export const useCallStore = create((set, get) => ({ const currentCall = get().call; if (!currentCall) return; + // muted/held/remoteMute/remoteHeld removed in 0.2.0-rc.0 library, migrated from 0.1.3 API set({ - isMuted: currentCall.muted, - isOnHold: currentCall.held, - remoteMute: currentCall.remoteMute, - remoteHeld: currentCall.remoteHeld, + isMuted: (currentCall as any).muted, + isOnHold: (currentCall as any).held, + remoteMute: (currentCall as any).remoteMute, + remoteHeld: (currentCall as any).remoteHeld, controlsVisible: true }); }; @@ -225,7 +226,8 @@ export const useCallStore = create((set, get) => ({ const { call, isMuted } = get(); if (!call) return; - call.setMuted(!isMuted); + // setMuted removed in 0.2.0-rc.0 library, migrated from 0.1.3 API + (call as any).setMuted(!isMuted); set({ isMuted: !isMuted }); }, @@ -233,7 +235,8 @@ export const useCallStore = create((set, get) => ({ const { call, isOnHold } = get(); if (!call) return; - call.setHeld(!isOnHold); + // setHeld removed in 0.2.0-rc.0 library, migrated from 0.1.3 API + (call as any).setHeld(!isOnHold); set({ isOnHold: !isOnHold }); }, From c150713db66546665dbc24204b7812f97b1869c4 Mon Sep 17 00:00:00 2001 From: Diego Mello Date: Mon, 13 Apr 2026 17:23:00 -0300 Subject: [PATCH 07/13] chore(voip): remove old media-signaling 0.1.3 tarball --- packages/rocket.chat-media-signaling-0.1.3.tgz | Bin 70712 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 packages/rocket.chat-media-signaling-0.1.3.tgz diff --git a/packages/rocket.chat-media-signaling-0.1.3.tgz b/packages/rocket.chat-media-signaling-0.1.3.tgz deleted file mode 100644 index 77146990c5e151e5892f1efdf0777b5bd8b96ca9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 70712 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 hB|}{ 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

c!ICia8q?UXRPvC@d7k#H#Hc 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 W|GIzOzwY1t{`>#Mpyet6W(WYFsFS|{ From 026c56345bc8f3cd06644b6802249a9e5b81dbfa Mon Sep 17 00:00:00 2001 From: Diego Mello Date: Mon, 13 Apr 2026 17:33:56 -0300 Subject: [PATCH 08/13] slice: useCallStore participant model migration --- app/lib/services/voip/useCallStore.test.ts | 18 +++++++----- app/lib/services/voip/useCallStore.ts | 32 ++++++++++------------ 2 files changed, 25 insertions(+), 25 deletions(-) diff --git a/app/lib/services/voip/useCallStore.test.ts b/app/lib/services/voip/useCallStore.test.ts index 69feb829e69..538b6fdf07d 100644 --- a/app/lib/services/voip/useCallStore.test.ts +++ b/app/lib/services/voip/useCallStore.test.ts @@ -38,16 +38,20 @@ function createMockCall(callId: string) { const call = { callId, state: 'active', - muted: false, - held: false, - remoteMute: false, - remoteHeld: false, + localParticipant: { + muted: false, + held: false, + contact: { id: 'u', displayName: 'U', username: 'u', sipExtension: '' }, + setMuted: jest.fn(), + setHeld: jest.fn() + }, + remoteParticipants: [{ + muted: false, + held: false + }], hidden: false, role: 'callee', - contact: { id: 'u', displayName: 'U', username: 'u', sipExtension: '' }, emitter, - setMuted: jest.fn(), - setHeld: jest.fn(), sendDTMF: jest.fn(), hangup: jest.fn(), accept: jest.fn(), diff --git a/app/lib/services/voip/useCallStore.ts b/app/lib/services/voip/useCallStore.ts index 5a0bc39ef01..9a49bc513ad 100644 --- a/app/lib/services/voip/useCallStore.ts +++ b/app/lib/services/voip/useCallStore.ts @@ -139,20 +139,19 @@ export const useCallStore = create((set, get) => ({ setCall: (call: IClientMediaCall) => { cleanupCallListeners(); get().resetNativeCallId(); - // Update state with call info — muted/held/remoteMute/remoteHeld/contact removed in 0.2.0-rc.0 library, migrated from 0.1.3 API set({ call, callId: call.callId, callState: call.state, - isMuted: (call as any).muted, - isOnHold: (call as any).held, - remoteMute: (call as any).remoteMute, - remoteHeld: (call as any).remoteHeld, + isMuted: call.localParticipant.muted, + isOnHold: call.localParticipant.held, + remoteMute: call.remoteParticipants[0]?.muted ?? false, + remoteHeld: call.remoteParticipants[0]?.held ?? false, contact: { - id: (call as any).contact.id, - displayName: (call as any).contact.displayName, - username: (call as any).contact.username, - sipExtension: (call as any).contact.sipExtension + id: call.localParticipant.contact.id, + displayName: call.localParticipant.contact.displayName, + username: call.localParticipant.contact.username, + sipExtension: call.localParticipant.contact.sipExtension }, callStartTime: call.state === 'active' ? Date.now() : null }); @@ -187,12 +186,11 @@ export const useCallStore = create((set, get) => ({ const currentCall = get().call; if (!currentCall) return; - // muted/held/remoteMute/remoteHeld removed in 0.2.0-rc.0 library, migrated from 0.1.3 API set({ - isMuted: (currentCall as any).muted, - isOnHold: (currentCall as any).held, - remoteMute: (currentCall as any).remoteMute, - remoteHeld: (currentCall as any).remoteHeld, + isMuted: currentCall.localParticipant.muted, + isOnHold: currentCall.localParticipant.held, + remoteMute: currentCall.remoteParticipants[0]?.muted ?? false, + remoteHeld: currentCall.remoteParticipants[0]?.held ?? false, controlsVisible: true }); }; @@ -226,8 +224,7 @@ export const useCallStore = create((set, get) => ({ const { call, isMuted } = get(); if (!call) return; - // setMuted removed in 0.2.0-rc.0 library, migrated from 0.1.3 API - (call as any).setMuted(!isMuted); + call.localParticipant.setMuted(!isMuted); set({ isMuted: !isMuted }); }, @@ -235,8 +232,7 @@ export const useCallStore = create((set, get) => ({ const { call, isOnHold } = get(); if (!call) return; - // setHeld removed in 0.2.0-rc.0 library, migrated from 0.1.3 API - (call as any).setHeld(!isOnHold); + call.localParticipant.setHeld(!isOnHold); set({ isOnHold: !isOnHold }); }, From b700b46257460d1d51fc42a83631ab807634f0c3 Mon Sep 17 00:00:00 2001 From: Diego Mello Date: Mon, 13 Apr 2026 18:18:21 -0300 Subject: [PATCH 09/13] slice: MediaSessionInstance participant model + cleanup --- .../voip/MediaSessionInstance.test.ts | 111 ++++++++++++++---- app/lib/services/voip/MediaSessionInstance.ts | 46 ++------ app/lib/services/voip/mockCall.ts | 19 +-- 3 files changed, 112 insertions(+), 64 deletions(-) diff --git a/app/lib/services/voip/MediaSessionInstance.test.ts b/app/lib/services/voip/MediaSessionInstance.test.ts index 288a2d2eded..02973f56b3d 100644 --- a/app/lib/services/voip/MediaSessionInstance.test.ts +++ b/app/lib/services/voip/MediaSessionInstance.test.ts @@ -79,7 +79,27 @@ jest.mock('react-native-callkeep', () => ({ jest.mock('react-native-device-info', () => ({ getUniqueId: jest.fn(() => 'test-device-id'), - getUniqueIdSync: jest.fn(() => 'test-device-id') + getUniqueIdSync: jest.fn(() => 'test-device-id'), + getSystemVersion: jest.fn(() => '15.0'), + getVersion: jest.fn(() => '4.0.0'), + getBuildNumber: jest.fn(() => '1'), + hasNotch: jest.fn(() => false), + getReadableVersion: jest.fn(() => '4.0.0.1'), + getBundleId: jest.fn(() => 'com.rocket.chat'), + getModel: jest.fn(() => 'iPhone'), + isTablet: jest.fn(() => false), + default: { + getUniqueId: jest.fn(() => 'test-device-id'), + getUniqueIdSync: jest.fn(() => 'test-device-id'), + getSystemVersion: jest.fn(() => '15.0'), + getVersion: jest.fn(() => '4.0.0'), + getBuildNumber: jest.fn(() => '1'), + hasNotch: jest.fn(() => false), + getReadableVersion: jest.fn(() => '4.0.0.1'), + getBundleId: jest.fn(() => 'com.rocket.chat'), + getModel: jest.fn(() => 'iPhone'), + isTablet: jest.fn(() => false) + } })); jest.mock('../../native/NativeVoip', () => ({ @@ -105,7 +125,7 @@ type MockMediaSignalingSession = { processSignal: jest.Mock; setIceGatheringTimeout: jest.Mock; startCall: jest.Mock; - getMainCall: jest.Mock; + register: jest.Mock; }; const createdSessions: MockMediaSignalingSession[] = []; @@ -124,7 +144,7 @@ jest.mock('@rocket.chat/media-signaling', () => ({ this.processSignal = jest.fn().mockResolvedValue(undefined); this.setIceGatheringTimeout = jest.fn(); this.startCall = jest.fn().mockResolvedValue(undefined); - this.getMainCall = jest.fn(); + this.register = jest.fn(); Object.defineProperty(this, 'sessionId', { value: `session-${config.userId}`, writable: false }); createdSessions.push(this); }) @@ -165,9 +185,21 @@ function buildClientMediaCall(options: { const emitter = { on: jest.fn(), off: jest.fn(), emit: jest.fn() }; return { callId: options.callId, - role: options.role, hidden: options.hidden ?? false, + localParticipant: { + role: options.role, + contact: { username: 'bob', sipExtension: '' }, + muted: false, + held: false, + setMuted: () => {}, + setHeld: () => {} + }, + remoteParticipants: [], + participants: [], reject, + accept: jest.fn(), + hangup: jest.fn(), + sendDTMF: jest.fn(), emitter: emitter as unknown as IClientMediaCall['emitter'] } as unknown as IClientMediaCall; } @@ -505,9 +537,17 @@ describe('MediaSessionInstance', () => { newCallHandler({ call: { hidden: false, - role: 'caller', callId: 'c1', - contact: { username: 'alice', sipExtension: '' }, + localParticipant: { + role: 'caller', + contact: { username: 'alice', sipExtension: '' }, + muted: false, + held: false, + setMuted: () => {}, + setHeld: () => {} + }, + remoteParticipants: [], + participants: [], emitter: { on: jest.fn(), off: jest.fn() } } as unknown as IClientMediaCall }); @@ -536,9 +576,17 @@ describe('MediaSessionInstance', () => { newCallHandler({ call: { hidden: false, - role: 'caller', callId: 'c1', - contact: { username: 'alice', sipExtension: '' }, + localParticipant: { + role: 'caller', + contact: { username: 'alice', sipExtension: '' }, + muted: false, + held: false, + setMuted: () => {}, + setHeld: () => {} + }, + remoteParticipants: [], + participants: [], emitter: { on: jest.fn(), off: jest.fn() } } as unknown as IClientMediaCall }); @@ -557,9 +605,17 @@ describe('MediaSessionInstance', () => { newCallHandler({ call: { hidden: false, - role: 'caller', callId: 'c1', - contact: { username: 'alice', sipExtension: '100' }, + localParticipant: { + role: 'caller', + contact: { username: 'alice', sipExtension: '100' }, + muted: false, + held: false, + setMuted: () => {}, + setHeld: () => {} + }, + remoteParticipants: [], + participants: [], emitter: { on: jest.fn(), off: jest.fn() } } as unknown as IClientMediaCall }); @@ -570,14 +626,17 @@ describe('MediaSessionInstance', () => { it('answerCall resolves roomId from DM for non-SIP callee', async () => { mockGetDMSubscriptionByUsername.mockResolvedValue({ rid: 'dm-rid' } as any); - mediaSessionInstance.init('user-1'); - const session = createdSessions[0]; - const mainCall = { + const calleeCall = buildClientMediaCall({ callId: 'call-ans', role: 'callee' }); + mockUseCallStoreGetState.mockReturnValue({ + reset: mockCallStoreReset, + setCall: jest.fn(), + setRoomId: mockSetRoomId, + resetNativeCallId: jest.fn(), + call: calleeCall, callId: 'call-ans', - accept: jest.fn().mockResolvedValue(undefined), - contact: { username: 'bob', sipExtension: '' } - }; - session.getMainCall.mockReturnValue(mainCall); + nativeAcceptedCallId: null, + roomId: null + }); await mediaSessionInstance.answerCall('call-ans'); @@ -586,14 +645,18 @@ describe('MediaSessionInstance', () => { }); it('answerCall skips DM lookup for SIP contact', async () => { - mediaSessionInstance.init('user-1'); - const session = createdSessions[0]; - const mainCall = { + const sipCall = buildClientMediaCall({ callId: 'call-sip', role: 'callee' }); + sipCall.localParticipant.contact.sipExtension = 'ext'; + mockUseCallStoreGetState.mockReturnValue({ + reset: mockCallStoreReset, + setCall: jest.fn(), + setRoomId: mockSetRoomId, + resetNativeCallId: jest.fn(), + call: sipCall, callId: 'call-sip', - accept: jest.fn().mockResolvedValue(undefined), - contact: { username: 'bob', sipExtension: 'ext' } - }; - session.getMainCall.mockReturnValue(mainCall); + nativeAcceptedCallId: null, + roomId: null + }); await mediaSessionInstance.answerCall('call-sip'); diff --git a/app/lib/services/voip/MediaSessionInstance.ts b/app/lib/services/voip/MediaSessionInstance.ts index ba00be61d78..e4a8ed40e73 100644 --- a/app/lib/services/voip/MediaSessionInstance.ts +++ b/app/lib/services/voip/MediaSessionInstance.ts @@ -48,7 +48,6 @@ class MediaSessionInstance { iceGatheringTimeout: this.iceGatheringTimeout }) ); - // TESTING: DDP signal transport — offer/answer/ICE stay on DDP mediaSessionStore.setSendSignalFn((signal: ClientMediaSignal) => { sdk.methodCall('stream-notify-user', `${userId}/media-calls`, JSON.stringify(signal)); }); @@ -66,7 +65,6 @@ class MediaSessionInstance { console.error('[VoIP] Failed to fetch initial state signals:', error); } - // TESTING: DDP register side effects vs REST stateSignals — server renewCallId/hangupDetachedCall/onCallTrying still fire instance.register(false); } @@ -74,7 +72,6 @@ class MediaSessionInstance { this.instance = mediaSessionStore.getInstance(userId); }); - // TESTING: DDP real-time signal subscription — stays for offer/answer/ICE/notifications this.mediaSignalListener = sdk.onStreamData('stream-notify-user', (ddpMessage: IDDPMessage) => { if (!this.instance) { return; @@ -86,8 +83,6 @@ class MediaSessionInstance { const signal = ddpMessage.fields.args[0]; this.instance.processSignal(signal); - console.log('🤙 [VoIP] Processed signal:', signal); - // Answer when native already accepted and stream matches device contract + callId. const storeSlice = useCallStore.getState(); const { call, nativeAcceptedCallId } = storeSlice; @@ -107,17 +102,13 @@ class MediaSessionInstance { this.instance?.on('newCall', ({ call }: { call: IClientMediaCall }) => { if (call && !call.hidden) { - call.emitter.on('stateChange', oldState => { - console.log(`📊 ${oldState} → ${call.state}`); - console.log('🤙 [VoIP] New call data:', call); - }); + call.emitter.on('stateChange', () => {}); - // role/contact removed in 0.2.0-rc.0 library, migrated from 0.1.3 API - if ((call as any).role === 'caller') { + if (call.localParticipant.role === 'caller') { useCallStore.getState().setCall(call); Navigation.navigate('CallView'); if (useCallStore.getState().roomId == null) { - this.resolveRoomIdFromContact((call as any).contact).catch(error => { + this.resolveRoomIdFromContact(call.localParticipant.contact).catch(error => { console.error('[VoIP] Error resolving room id from contact (newCall):', error); }); } @@ -133,24 +124,17 @@ class MediaSessionInstance { public answerCall = async (callId: string) => { const { call: existingCall } = useCallStore.getState(); if (existingCall != null && existingCall.callId === callId) { - console.log('[VoIP] answerCall skipped — call already bound in store:', callId); return; } - console.log('[VoIP] Answering call:', callId); - // @ts-expect-error — getMainCall is private in 0.2.0-rc.0 library, migrated from 0.1.3 API - const mainCall = this.instance?.getMainCall(); - console.log('[VoIP] Main call:', mainCall); + const call = useCallStore.getState().call; - if (mainCall && mainCall.callId === callId) { - console.log('[VoIP] Accepting call:', callId); - await mainCall.accept(); - console.log('[VoIP] Setting current call active:', callId); + if (call && call.callId === callId) { + await call.accept(); RNCallKeep.setCurrentCallActive(callId); - useCallStore.getState().setCall(mainCall); + useCallStore.getState().setCall(call); Navigation.navigate('CallView'); - // contact removed in 0.2.0-rc.0 library, migrated from 0.1.3 API - this.resolveRoomIdFromContact((mainCall as any).contact).catch(error => { + this.resolveRoomIdFromContact(call.localParticipant.contact).catch(error => { console.error('[VoIP] Error resolving room id from contact (answerCall):', error); }); } else { @@ -159,7 +143,6 @@ class MediaSessionInstance { if (st.nativeAcceptedCallId === callId) { st.resetNativeCallId(); } - console.warn('[VoIP] Call not found:', callId); // TODO: Show error message? } }; @@ -173,19 +156,17 @@ class MediaSessionInstance { public startCall = (userId: string, actor: CallActorType) => { requestPhoneStatePermission(); - console.log('[VoIP] Starting call:', userId); this.instance?.startCall(actor, userId); }; public endCall = (callId: string) => { - // @ts-expect-error — getMainCall is private in 0.2.0-rc.0 library, migrated from 0.1.3 API - const mainCall = this.instance?.getMainCall(); + const call = useCallStore.getState().call; - if (mainCall && mainCall.callId === callId) { - if (mainCall.state === 'ringing') { - mainCall.reject(); + if (call && call.callId === callId) { + if (call.state === 'ringing') { + call.reject(); } else { - mainCall.hangup(); + call.hangup(); } } RNCallKeep.endCall(callId); @@ -230,7 +211,6 @@ class MediaSessionInstance { const currentIceServers = this.getIceServers(); if (currentIceServers !== this.iceServers) { this.iceServers = currentIceServers; - // this.instance?.setIceServers(this.iceServers); } }); } diff --git a/app/lib/services/voip/mockCall.ts b/app/lib/services/voip/mockCall.ts index 887c3a3d9b1..81097b4064d 100644 --- a/app/lib/services/voip/mockCall.ts +++ b/app/lib/services/voip/mockCall.ts @@ -28,6 +28,7 @@ const DEFAULT_CONTACT = { /** * Build a fake `IClientMediaCall` good enough to render `CallView` without a real SIP/WebRTC stack. * No-op `setMuted/setHeld/hangup/sendDTMF` and a no-op event emitter so store subscriptions are safe. + * Uses the 0.2.0-rc.0 participant model (localParticipant + remoteParticipants). */ export function createMockCall(overrides: MockCallOverrides = {}): IClientMediaCall { const contact = { ...DEFAULT_CONTACT, ...overrides.contact }; @@ -36,13 +37,17 @@ export function createMockCall(overrides: MockCallOverrides = {}): IClientMediaC const mock = { callId: 'mock-call-id', state: callState, - muted: overrides.isMuted ?? false, - held: overrides.isOnHold ?? false, - remoteMute: false, - remoteHeld: false, - contact, - setMuted: () => {}, - setHeld: () => {}, + localParticipant: { + role: 'caller' as const, + contact, + muted: overrides.isMuted ?? false, + held: overrides.isOnHold ?? false, + setMuted: () => {}, + setHeld: () => {} + }, + remoteParticipants: [], + participants: [], + accept: () => {}, hangup: () => {}, reject: () => {}, sendDTMF: () => {}, From 2143aba7cc8b93ece783c653ce51e93f4351234f Mon Sep 17 00:00:00 2001 From: Diego Mello Date: Mon, 13 Apr 2026 18:18:43 -0300 Subject: [PATCH 10/13] slice: test mocks participant model restructure --- .../voip/MediaSessionInstance.test.ts | 124 +++++++----------- app/lib/services/voip/mockCall.ts | 42 ++++-- 2 files changed, 83 insertions(+), 83 deletions(-) diff --git a/app/lib/services/voip/MediaSessionInstance.test.ts b/app/lib/services/voip/MediaSessionInstance.test.ts index 02973f56b3d..a9f59d8a157 100644 --- a/app/lib/services/voip/MediaSessionInstance.test.ts +++ b/app/lib/services/voip/MediaSessionInstance.test.ts @@ -6,8 +6,8 @@ import type { IDDPMessage } from '../../../definitions/IDDPMessage'; import Navigation from '../../navigation/appNavigation'; import { getDMSubscriptionByUsername } from '../../database/services/Subscription'; import { getUidDirectMessage } from '../../methods/helpers/helpers'; -import { mediaSessionStore } from './MediaSessionStore'; import { mediaSessionInstance } from './MediaSessionInstance'; +import { mediaSessionStore } from './MediaSessionStore'; jest.mock('../../database/services/Subscription', () => ({ getDMSubscriptionByUsername: jest.fn() @@ -51,6 +51,11 @@ jest.mock('../sdk', () => ({ } })); +const mockMediaCallsStateSignals = jest.fn(() => Promise.resolve({ signals: [] })); +jest.mock('../../services/restApi', () => ({ + mediaCallsStateSignals: (...args: unknown[]) => mockMediaCallsStateSignals(...args) +})); + jest.mock('../../store/auxStore', () => ({ store: { getState: jest.fn(() => ({ @@ -78,16 +83,7 @@ jest.mock('react-native-callkeep', () => ({ })); jest.mock('react-native-device-info', () => ({ - getUniqueId: jest.fn(() => 'test-device-id'), - getUniqueIdSync: jest.fn(() => 'test-device-id'), - getSystemVersion: jest.fn(() => '15.0'), - getVersion: jest.fn(() => '4.0.0'), - getBuildNumber: jest.fn(() => '1'), - hasNotch: jest.fn(() => false), - getReadableVersion: jest.fn(() => '4.0.0.1'), - getBundleId: jest.fn(() => 'com.rocket.chat'), - getModel: jest.fn(() => 'iPhone'), - isTablet: jest.fn(() => false), + __esModule: true, default: { getUniqueId: jest.fn(() => 'test-device-id'), getUniqueIdSync: jest.fn(() => 'test-device-id'), @@ -95,11 +91,23 @@ jest.mock('react-native-device-info', () => ({ getVersion: jest.fn(() => '4.0.0'), getBuildNumber: jest.fn(() => '1'), hasNotch: jest.fn(() => false), - getReadableVersion: jest.fn(() => '4.0.0.1'), + getReadableVersion: jest.fn(() => '4.0.0'), getBundleId: jest.fn(() => 'com.rocket.chat'), - getModel: jest.fn(() => 'iPhone'), + getDeviceModel: jest.fn(() => 'iPhone 14'), + getModel: jest.fn(() => 'iPhone 14'), isTablet: jest.fn(() => false) - } + }, + getUniqueId: jest.fn(() => 'test-device-id'), + getUniqueIdSync: jest.fn(() => 'test-device-id'), + getSystemVersion: jest.fn(() => '15.0'), + getVersion: jest.fn(() => '4.0.0'), + getBuildNumber: jest.fn(() => '1'), + hasNotch: jest.fn(() => false), + getReadableVersion: jest.fn(() => '4.0.0'), + getBundleId: jest.fn(() => 'com.rocket.chat'), + getDeviceModel: jest.fn(() => 'iPhone 14'), + getModel: jest.fn(() => 'iPhone 14'), + isTablet: jest.fn(() => false) })); jest.mock('../../native/NativeVoip', () => ({ @@ -185,21 +193,23 @@ function buildClientMediaCall(options: { const emitter = { on: jest.fn(), off: jest.fn(), emit: jest.fn() }; return { callId: options.callId, - hidden: options.hidden ?? false, localParticipant: { + local: true as const, + participantId: 'mock-participant-id', + actorType: 'user' as const, + actorId: 'mock-actor-id', role: options.role, - contact: { username: 'bob', sipExtension: '' }, muted: false, held: false, + contact: { id: 'u', displayName: 'U', username: 'u', sipExtension: '' }, + getMediaStream: () => null, setMuted: () => {}, setHeld: () => {} }, remoteParticipants: [], participants: [], + hidden: options.hidden ?? false, reject, - accept: jest.fn(), - hangup: jest.fn(), - sendDTMF: jest.fn(), emitter: emitter as unknown as IClientMediaCall['emitter'] } as unknown as IClientMediaCall; } @@ -228,8 +238,8 @@ describe('MediaSessionInstance', () => { }); describe('init', () => { - it('should register stream-notify-user listener', () => { - mediaSessionInstance.init('user-1'); + it('should register stream-notify-user listener', async () => { + await mediaSessionInstance.init('user-1'); expect(mockOnStreamData).toHaveBeenCalledWith('stream-notify-user', expect.any(Function)); }); @@ -537,17 +547,9 @@ describe('MediaSessionInstance', () => { newCallHandler({ call: { hidden: false, + role: 'caller', callId: 'c1', - localParticipant: { - role: 'caller', - contact: { username: 'alice', sipExtension: '' }, - muted: false, - held: false, - setMuted: () => {}, - setHeld: () => {} - }, - remoteParticipants: [], - participants: [], + contact: { username: 'alice', sipExtension: '' }, emitter: { on: jest.fn(), off: jest.fn() } } as unknown as IClientMediaCall }); @@ -576,17 +578,9 @@ describe('MediaSessionInstance', () => { newCallHandler({ call: { hidden: false, + role: 'caller', callId: 'c1', - localParticipant: { - role: 'caller', - contact: { username: 'alice', sipExtension: '' }, - muted: false, - held: false, - setMuted: () => {}, - setHeld: () => {} - }, - remoteParticipants: [], - participants: [], + contact: { username: 'alice', sipExtension: '' }, emitter: { on: jest.fn(), off: jest.fn() } } as unknown as IClientMediaCall }); @@ -605,17 +599,9 @@ describe('MediaSessionInstance', () => { newCallHandler({ call: { hidden: false, + role: 'caller', callId: 'c1', - localParticipant: { - role: 'caller', - contact: { username: 'alice', sipExtension: '100' }, - muted: false, - held: false, - setMuted: () => {}, - setHeld: () => {} - }, - remoteParticipants: [], - participants: [], + contact: { username: 'alice', sipExtension: '100' }, emitter: { on: jest.fn(), off: jest.fn() } } as unknown as IClientMediaCall }); @@ -626,37 +612,29 @@ describe('MediaSessionInstance', () => { it('answerCall resolves roomId from DM for non-SIP callee', async () => { mockGetDMSubscriptionByUsername.mockResolvedValue({ rid: 'dm-rid' } as any); - const calleeCall = buildClientMediaCall({ callId: 'call-ans', role: 'callee' }); - mockUseCallStoreGetState.mockReturnValue({ - reset: mockCallStoreReset, - setCall: jest.fn(), - setRoomId: mockSetRoomId, - resetNativeCallId: jest.fn(), - call: calleeCall, + mediaSessionInstance.init('user-1'); + const mainCall = { callId: 'call-ans', - nativeAcceptedCallId: null, - roomId: null - }); + accept: jest.fn().mockResolvedValue(undefined), + localParticipant: { + contact: { username: 'bob', sipExtension: '' } + } + }; await mediaSessionInstance.answerCall('call-ans'); await waitFor(() => expect(mockSetRoomId).toHaveBeenCalledWith('dm-rid')); - expect(mockGetDMSubscriptionByUsername).toHaveBeenCalledWith('bob'); }); it('answerCall skips DM lookup for SIP contact', async () => { - const sipCall = buildClientMediaCall({ callId: 'call-sip', role: 'callee' }); - sipCall.localParticipant.contact.sipExtension = 'ext'; - mockUseCallStoreGetState.mockReturnValue({ - reset: mockCallStoreReset, - setCall: jest.fn(), - setRoomId: mockSetRoomId, - resetNativeCallId: jest.fn(), - call: sipCall, + mediaSessionInstance.init('user-1'); + const mainCall = { callId: 'call-sip', - nativeAcceptedCallId: null, - roomId: null - }); + accept: jest.fn().mockResolvedValue(undefined), + localParticipant: { + contact: { username: 'bob', sipExtension: 'ext' } + } + }; await mediaSessionInstance.answerCall('call-sip'); diff --git a/app/lib/services/voip/mockCall.ts b/app/lib/services/voip/mockCall.ts index 81097b4064d..31c52af78b0 100644 --- a/app/lib/services/voip/mockCall.ts +++ b/app/lib/services/voip/mockCall.ts @@ -1,8 +1,26 @@ import type { CallState, IClientMediaCall } from '@rocket.chat/media-signaling'; -import Navigation from '../../navigation/appNavigation'; import { useCallStore } from './useCallStore'; +jest.mock('../../navigation/appNavigation', () => ({ + __esModule: true, + default: { navigate: jest.fn(), back: jest.fn() } +})); + +jest.mock('../../../containers/ActionSheet', () => ({ + hideActionSheetRef: jest.fn() +})); + +jest.mock('react-native-callkeep', () => ({ + setCurrentCallActive: jest.fn(), + addEventListener: jest.fn(() => ({ remove: jest.fn() })), + endCall: jest.fn(), + start: jest.fn(), + stop: jest.fn(), + setForceSpeakerphoneOn: jest.fn(), + setAvailable: jest.fn() +})); + export interface MockCallOverrides { callState?: CallState; isMuted?: boolean; @@ -28,7 +46,6 @@ const DEFAULT_CONTACT = { /** * Build a fake `IClientMediaCall` good enough to render `CallView` without a real SIP/WebRTC stack. * No-op `setMuted/setHeld/hangup/sendDTMF` and a no-op event emitter so store subscriptions are safe. - * Uses the 0.2.0-rc.0 participant model (localParticipant + remoteParticipants). */ export function createMockCall(overrides: MockCallOverrides = {}): IClientMediaCall { const contact = { ...DEFAULT_CONTACT, ...overrides.contact }; @@ -38,23 +55,28 @@ export function createMockCall(overrides: MockCallOverrides = {}): IClientMediaC callId: 'mock-call-id', state: callState, localParticipant: { - role: 'caller' as const, - contact, + local: true as const, + participantId: 'mock-participant-id', + actorType: 'user' as const, + actorId: 'mock-actor-id', + role: overrides.role ?? 'callee' as const, muted: overrides.isMuted ?? false, held: overrides.isOnHold ?? false, + contact, + getMediaStream: () => null, setMuted: () => {}, setHeld: () => {} }, remoteParticipants: [], participants: [], - accept: () => {}, - hangup: () => {}, - reject: () => {}, - sendDTMF: () => {}, emitter: { on: () => {}, off: () => {} - } + }, + accept: () => {}, + hangup: () => {}, + reject: () => {}, + sendDTMF: () => {} }; return mock as unknown as IClientMediaCall; @@ -90,4 +112,4 @@ export function seedMockCall(overrides: MockCallOverrides = {}): void { export function launchMockCallView(overrides: MockCallOverrides = {}): void { seedMockCall(overrides); Navigation.navigate('CallView'); -} +} \ No newline at end of file From 87c7f8393bf3f8cb37a528eade0ea001fd8761e2 Mon Sep 17 00:00:00 2001 From: Diego Mello Date: Tue, 14 Apr 2026 14:02:41 -0300 Subject: [PATCH 11/13] Update media-signaling --- package.json | 2 +- .../rocket.chat-media-signaling-0.2.0-rc.0.tgz | Bin 72597 -> 0 bytes packages/rocket.chat-media-signaling-0.2.0.tgz | Bin 0 -> 74929 bytes yarn.lock | 6 +++--- 4 files changed, 4 insertions(+), 4 deletions(-) delete mode 100644 packages/rocket.chat-media-signaling-0.2.0-rc.0.tgz create mode 100644 packages/rocket.chat-media-signaling-0.2.0.tgz diff --git a/package.json b/package.json index 71155ce4da4..7707813cd9c 100644 --- a/package.json +++ b/package.json @@ -47,7 +47,7 @@ "@react-navigation/elements": "^2.6.1", "@react-navigation/native": "^7.1.16", "@react-navigation/native-stack": "^7.3.23", - "@rocket.chat/media-signaling": "file:./packages/rocket.chat-media-signaling-0.2.0-rc.0.tgz", + "@rocket.chat/media-signaling": "file:./packages/rocket.chat-media-signaling-0.2.0.tgz", "@rocket.chat/message-parser": "0.31.32", "@rocket.chat/mobile-crypto": "RocketChat/rocket.chat-mobile-crypto", "@rocket.chat/sdk": "RocketChat/Rocket.Chat.js.SDK#mobile", diff --git a/packages/rocket.chat-media-signaling-0.2.0-rc.0.tgz b/packages/rocket.chat-media-signaling-0.2.0-rc.0.tgz deleted file mode 100644 index 70bf4affedb8e5db0e9694c5776ee38bc2e6e779..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 72597 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 z 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 diff --git a/packages/rocket.chat-media-signaling-0.2.0.tgz b/packages/rocket.chat-media-signaling-0.2.0.tgz new file mode 100644 index 0000000000000000000000000000000000000000..4fa5387e0da5c440af6d5f2b18aa1b29e01026bd GIT binary patch literal 74929 zcmY(KQ*Xxj(ZI;j^M!uIheoj$Mne9EL4z+#*hD9P!QEY5lDo}-r^hCO z{_C%xKQvg$ay@o^ZC!1vd_#h!s(@|-SbY1stoY<#*+n)Q78;t`MuSJr^jkx$qant_ z1FDEfD%ns^R>?pP!r1+A${|LHd-z-g;3%lMKW}Pk%3MB|@%-iArurmnW_5>v-?zD~ z>FILq811>`-!C2og2-P7iEDnA>VceI-;`vTxGh9Ct`+5xAZ}mO1^WKp# zI*>vK0LGqNGh&~zj9H>%hbu_6FH*5Q=}?VJXMp29ki_mSKwMPe)~7X3C)EYWOciKa z6X*r(X?weD8v?bou>U5keFNEkCj9t_LYfM9?!oD=25naILw$|RogpK7iE`TieBbeE z_atZFuCx95}

rS3^2 z#CY%3%d^3GbfJ3#2j%^g6S05Un>2|Kx*{{Qu(P@SB31m zV(o9G`ZYZ~-_XAdnysE}YK3A18MB7c(Bb+VeLoj3U>%;lI)pmUuL6-(_*4)}6~S98 z2*^MgB}FrxSkcpgMx#R`vCBZZykb#wFyw6rNyfQ$#L#Q;F6-o;6G<#`H1xo~cAPWQ zMJO|2oKoUmdD-TQ$l{;@qz2lhvP?|HY^14~oGs}6au=W1DSPkIYXVhcO^RWz}kO-BZA(Zx59#w^ml+O8}2<_yq+%?cQZGBz907xD-+KO zDz)21j`1gxUNusIdACB{v>jYX0>fCBsi4&867O#e>L#(+d8Lqm0A26Py=?+Mbbt3; zh}W41R=72a4_IIq>HFXrRk$c-#MTi`1MBfH++lPe%7A(YG)Z0$ykGMNOkF5YuOVOy zDfd_3pWBxt1piRMbXIRn&G$4{stB|UErC}$Vm0gZ4BPmV|Z0DIU0gr&`3=Pf|gZwUz&Z~ z1B^v4`wjvs&A5Tk0Ju*pMZpiVt;0kUKz~V+GeVqoFK~m&T#jmb)@g8-UZM%ZJ0C4u z#B)L{jm9^-%t7WT8SrtTew@p>v9V!{zgGO+7Q%A32+tlNjK1ulU#Ks#kp9(DEqdGh z>|ZM6NtzQv2%-qGioysETE27xga8voR58+4q@|zvvrMw9nmA!_6yZ}m-9e@URfs#H z?7*llf~1dB+tY3PW7p_btAns~#2U?b%+~=V;%qJ=D?JFbSd(vuj$`nt{YMqxk1o0T zO49LI#bg;@bKx`b3hlhD6^keCCp;I=Fg5(K4VF{Bju?l84&M2A4y$~5(|WDymD@eX zLO;YrU8duTe$7M~a6Rbas<9xoPok;V{VFC`gd#v-*pn)OZeD?wVWn&X889LX8zjlg ziI*cjJ^g%mfN+T|xmJN2$+Lj)Av6(XjWiQfIwTO_MBt5oe=Ua+Av`O{R-N*>U>fcl zSP4C2f#h^opGGfnLS>w3JV6D}=&i#*5gSuHoc-bpm!`*$js*W>4w*Dvq#5>Q;uj;- zJiwKs3s+G?(xHP}9w?^jF3G3lRpsY^TlAN5V{a$ou8>4cb}@5+DsQOoXv1I}T+C@h zzo%iE=PkP!6SlypB~CWY_Gy9D^_)%P2+#jpv}btgk#N{#xPN5wI=akY&m@IJUIRFA z>s@D^P6Yl<-a6B(7q_sCOZ@A1W80963G{`!b!f8%NwLtH#OHub-FzPxMALwU(83Q& zE;`aK(+9-_GhLo@N&Q?~!ra|48$CSpzEc)$|1pPxB7D6R8jDDnhSz%uK99lnSPwzrjbJBT=S8F5 zUqw*i8|JjE7`MEVXeZV4SkDpM`ec*~{pUFn!>An!CGa=J^?Ngq>d5c~$o-REPRHs8y5A12RU=Ouog! zBw9uS3IkU>FnHtRJ_iy9>WBi&Uo5%gh02w~BU#*V4(BAwOEr?C7i=QY8aVfBB zCyQ8%&a2#qqR2ySU%(wzmLeR3{;2Fb{x_KIc3Q}-evYY0*F%{)!SeN9Kc#YFSMd7? zHOC3}2L9WR8Xaz8;w$`{EfQVe(aa>}BP7DZWY zo9$L8IZsSwVqmHNyk@*iYq75Dxd3V-tyJS5u%O;NMLm%*5s!>y6+uFtEIcIFhxa5>%9y{B!rUKY9Om>NoW10Xl<^#s>WMn?|`mIo?2 zl+9hdeB&`sRO$@~k1L1Sk>Yk$VWp-|Dhce7^A0_EU&x&Slk9Dh67i?}Zei+`-sQ6i z;Zv00Q@9l(n2?b(lw2WozX9C zlCPrT)PwHU_R@aSjnYg3&S-vAJG{C~DtQ6%n1gq+3X*v_+0ScZe`e(RRXyLjTCr*B zT;K11Q0>?2r4;V<`uT77yIS#6@J_MzY1J$-b|k20+h|~mTMBBiqk%+tspr?5P37g7mjskJJ$Nr6=>NLcmT+f86f~oe z6r=~H^~1_6T;*n;k6_2qF>^d6^quA3M~QNWu!lawPF=nWO00b_KHA!HpdSmFSPL4Z z6Mxun&A_{jOMXxh2Js8U>wJ@!o+Z*UL78Po8Y^$7EMl)RI1K88S$F3Ss{>JkZ(gz4rpNoqV(Z;4 zNF~qki#L83K!}65@zu4Ke?)pVKZ&7t8Bc@o4-WEq z$6=PK4~EI-Z@+iJg$Q@v#|9$6k`Lkq<#$Q^oXvJ%=%`x$RDJY0@&~z%oLn5H<)5cj z#yAgSJP{_2&Ba)jz_1sp@T*qDn{0-Vb&Ck}O*Slqz1|XZ+OE{g5}YeF_hQR5|tgw9I|bV~P~X6CgbK@|?yB zf_Ku5E`o4|1tY?*M7!FXOJVM29W?GAmEBF-^q;5{`?KswKi*TmvP+qe5|yN`md4A2 zVar`wwXahNze5eB5oEN5JX?7pV8~_kfT^5KNnCyaJr=0G3*uW2Duf|?Q?Tg z#Xq^84P*OO?yY=?MsKIg0x`;BKu3ka)%OZDO9}q=^1NW=8wb`Di$|0dMehKGV%vAE zE~*ThfAUQlGGb%SiQSg)xtVgY{K&`O@E5^=Ny%B1lFW zq@MQ4Q(9!LS9(LX(R->EHzH3&#S8_Z8{&gEd0=!RxOE|q)br;U1(f$7bdU|(^9Shq z@LYhqpn%(P{x~r)x=Cn=$%+Gp_6UQRxKUf0jwyBBDA3Wksy7gF_5#kFdO5ei{#vhH zn08g67e?y(K?eRlyXrn51=CG`BotG7vX$DrnvE%*%8y=E`@SN(?q!GcaK)SXT6>i` z44BfaT0DviJWSio=AI>m?Zq;V$2^Pna>-)3LQ#W4n#1Z!Rye4c+{#*enIpA^Edg#n zXB0hCRl&xbs2i(T0Q_M3-5seAlfX(!x7=5@)%xUf&MUGrKmu%Vde`iYHHxWQWzOV|ApQ1g0Vy+v z6Fh(3yea7utIlRt!~ICaByi}AkMg_w-W^%Cmm_EnbAE4Rt!ep3295{x+i&}h*u_?G zwk^izL269McYj+6U*`j*-oVy8LIDkt7SbPobB4aZ+)zyqdf<oJMu)c{E$_j<>CRrgJF)Iad)Ad^TV;YG&r_KT}=}P3P_3~oP>-Y%?Ooi$>wKOl(a@<{h7@9k_N0R4|Wmu}&t=zU-2kdM1LboHV>;OSB{g_W{2d1x0HUvRKoV%S$Nm zt-3bIJ0nAsmhLH2sr+kr?I@%NE+&CC8ebFmTxuwXV=2$Mn|FA0e(gtVo)5FfXI7hj zzRyHftPAmf=n~W{#t)U=dx=c4y8r=?b;Z+B9ZBMEa|O8>C(&1+%~_HK*#2_rYid%-~Z z9gs`|o}xPJX`N;H_(PkUGjpiw7eY?mJKti=37jKt^hvd=i~57q9mN)tJMB}nEB59O zR95esyx~udrGb?$V@<>BVUBt7_JFmOww`ws*)uei>xd{KkSH0YwuGNMJdZ-vdK+Ss zh9lYw9iG6FYnwyjtgNS`OJ&U%!KWKZ?Jrv~>GHXVEX&Jz7 zlI7j`=;iAiqt!U;8MrY^=(%B*nap_8g+0>0k;inEsT^5Wau>rs;^i#mRbaXO(Q<7yjGO#Fn`UA*MVjo{-C zOZ?SZNPV{D0gc4w?VQ8+@pYrWDax?A&A+O@sSI({3gpAlHAlbt=Y_fqG`qxn zlwI7{KoW1z~%{tl$#7|dNP zvAmkm>2zQgyyZ*ur;XU_xegd{T{k-9?m1;kV82F3D2IVwMy6sw#(;yPp08EVEV$(E^IOW?46unxuFS#eY<@G?d z+?dxB{^oX%U7Tv&861q9K3sr$K01rW(pHLN(URiP96Ubn^DlviYM>6sTd9ZsCo%2Hsk7HTFE#E9y{8h*ZlP#7q=~C# zus{_~pxO)p4Q|!P@tpK5&Y~fFHbo;N*X5Pw!{&FjJ%4G&AI>?6<`!8@t75n#sG~FS z;mJSxmKm?V+1MM?3^0bNcesUjolGG0Hgoo zGf?c1P|Py%7R3it00h>g!;=?p&~vTdJzhk)EmabK{YaL}uA0)G=x=i4B3(J_8;3U7 zCaP3-FaMdYmC4PsePq@<)t^A8b!2g+K9(E)_pzn4kx^~a@i361%Yz}+Pm{da`S*Yy zwKCOBdb!~h_)OuL<^;+VdL#EF3rXqbpU^^z*Y}jwaQ^BRru`yu5lO}_$Rk8$L@4UI z`)ut$y`7v~7>Y6kNL7fF@|&0y%}v6EQ`{(6=Sjc563N^go%o-m_2 zhzj*JD*Cc5FSj(5?yZNd>qY+KrA9tvClkLJoL88PBrKyH_^NINfvE1 zU2}+H^HL_(ty~$bmBcoL)WZHDM?i~~ELB*fO+S&8(XIAmyRAwbSLB?FAJS-NAsN)- zrmkw8A5>_yNKWGk7R)jNyy0s{!NHQElxS=KT4SU62YMTzQ7$~-{+#t`F#8I~_(l6D znFZgYpA@s4+g652Hd}O7rPI4(r^jf-&3={2Ku`r%qthFSo{^PWstuKJo=_S>dsA(6 zYI;TRb1%uLT0^seo4Q5=O`6=K4>@;wv!_6mW}U?N#Y)T;Ew3k^OoXN2qWUz$PK$N1 zMPvoK(F*I@T+<=KPDJ-NJeZdPIGa*^otN+5BO}IS2X{ zs#4@6ck9sAfa`cE+bOA#Hk+)03stiXFH!cC?Y)hz%5d4W$sw=br;<#c_F*`LkX*P^ z-Iw{LicMu*W1OAzaD47UdB5e14WVhEgJv#z^Ujvi*u`v$1sEJ>#EMUI;q`ypiv_DO z(9{|aq}+ec;F;u_#KCOKYI@~)>~Py+fh>V#Qu;=6uCoBib)__7dVbXjH*}kMnbBj= z@Fb0&9c)4qRo%#+-@VA1@?wKU&v*3>#y= z^LqKd*686%s)|&n-IWV_1ASq*OoBXGU7b##bd;1CTGUbXA8TC1wHZst;d`n>u@tm7 zWTi%tkcKn~21o=z;-gUr4<~vS^Zw_JkaGcD5xe0~ij(qcWPBnGE2W)f#&n|46qDbNhY%Al^KaJ%( z(vyb1l2}ow=b_@=9x9=Q4yBy={_Stq|N2RY5>VctTb23*w6|a$Ji&q-tBvEXvkkE3 zYwh?^&pmx|n^ZrutcSx+1^6d~qsZ=t5e6glV$XsX?WihUnTtCHzpJmqno1JdZ6Y{{b}DN>j>06Y{_6Jnh1qdyB_(I6a61cF zn(~aXcHF6=cPkf*8x2L*B2TI%4p}ZXL9zTp9+-H-P&Dcpl4(#4;xaiEgWL>yAjWXAN3yu_LJIE;#$^yz zw_?n$iYOLYXRd{3-=?G0V)QLaijAcvZbK{aL%6;&T1fB-6tKe8cf#w6$B9#6Cz@<>&J6mI)`m>SX&Uy3E*EWKu!N z-?Cu5!b0p`-lIUc%Li{C%+4tGLJ>R#?fGd;;x~kEbzApxW=$xWg>lj^&>sy_`$$`q z1=56l(Y19!Eh~IBFUPo%RQ~4h$2LYzGEtNMCqY`)%WY0o>05!H`}v_PI~QPw)}{8XWtqqO;dxby=8PkJe?5fX z<_Dp5h-R!@Im*H)0W)=ZyXfyjsPm6ZL8&L(+Qgfa3w3sRA->q&pbhScerF$Y2yU zC>jdId#JLNo?J&3#~2j{%6y@-wb9U6Cj1(DW=jN21S2h#JB{;uw)`j(BlB|>h-*a* z(}h?V0D?RCNqdjsiP;WR(wITmRBgO!!gA&*MZvJP?Lid-j!d(y(uLKvva5nD?q>pO zni`&H3LQ;#LPY`TG1reQryy7c1kzvVWFqMH6)%EnB1IM$WJ4dcUk~#F z94SBhY)-J$>cL$pCoANR@QKusN@#7`FoMjEOrdtT2T#}!1oCU7Ccyx|dyJYL->^Y; zexV{O_cWhP_8*eM{ohgw6Gn{b&H^jIsaB>*oXVRW-TUFI0}m0=An9I!hN0f8KN+T& zRDe(TrAiBxKs7VBvJHk-?TlZ#7b>Q3l+}S1I^;bD->hx$>KlK^&HC#SRX_Hjxk2d> zVksnh+RUAIfyHz!yDN^-#rXPV%ek>xbZE1r^6aG!RELAR!uJMQadxF-<=w6xI&RcY z{-;W|jcl*!VcD&UeZU`0Jv}5J^$fGV2|<*one;%D+f0U6etUja^pu z`}nb~Gk(-Bt>69ROtXd*fCr2^pLSVBBB79CrP{lUW*MG_WuHsf!ZwS};+k-1CyDnu z5{IIPdR)M$(uRHy`>gRoW%rXmw9*q>#4c-xZdJNf7i!q=PBNXkff8BHZJTXza*H0sm)>l7N@QwGxMx0%XkT4T!Q*d|j0N0vb?QPo;&e>{Q; zxEAencA^<%WLC}X__FYyMfsN84*^4E(jF_Kq`(=lO`$!uVjX+TW3wvUX{@4pj0lSu zQ;MQ9+GFM1RlW5lHiy;RHVf`cE!)jUoB}tLxyALIuUrR<2sGniL~s&^~6^ragc!xAYHh>!87a9&!CaQ8HF$p} zpm|@??Av%Zj|LAGA}HqQj0gAbcb^Rgd6GVV=k`FapF10{dTzi01!LMB++YX+t%6fl}xi3v>Emz=R>ah)eAS&_Wse7yp{qvyUw3B>*VR zqp<+gzX1}KELdjhWWdtOgXCM9bF0okdb2%30c>BOl2iTkOXpwEKMJbW$9?j1fh`2~ z-1nfyGWopfGZ4m^K9Vt-+fN?ApLKUuu7d^YPo2zQWfeB5G$@6Qhbm;aC1@{Nrq|yZ z>oDc+$V^13Nw+-1o$kek*8k8VMc3AWX4Wo%zWR&QN#aJ<|HXkdVqo;`?7u2F z3eAU2_;_9M)GM%MF|j$TKIM@^MAy zMA92NM|r;XXAR8@_pkI%{}B4VF*?w@s=zt^%6(bSay<}T^c}4pyWj|%ml5V7C=rr*V7y7zn&~5>Z zybpal-x}X~u_jCb19sHb3c7W{bF-`_=XpGW$fk`7m%WpUn&1jAK}-PGEyM8}Q-`Kk zq-mCkdCTMpoSxllDA2hZOK#a6=gmatJqF%WE}@9@xAhog`?Q-nE=BI@aGheqwe2Tb zR5x(z;$cBrUv-(ikgvUr|a7Rl<(0Qpa%Rz-W&q z8kY|jwjKSH*76hi7V8s`QY^+PICRm?d-nG~+}8{*fi`bIwE8d_IB);1}UwJ+0L(*ZAJlT|L_50F|gI$@{DQVSEoK_;mN}FcXL)n zNJWHa0f%3cHVbFM?64?Rlzw9qRa;1ZttIR!{pvRa$8hH?zAZ5@xe;YWsxf0Rj%=cu z_ude+u4pW&i@a&;HZ>#hdA?!@{@Q_p){X==DJ+?42!8*vx3$xL?CENH^SJ`KGkgNh z6%Bl)0V^;3pLr6V%sf8Wramfr;35SrN8qwRK1)sgjosDMlA5=tg-3q#&4EC0^Ir@bTJ3A$6i!uCw~V#|CcrQdo81ZEC|5% z#xErVJefKLvFEiv_e_mkyzY1lg3dQr&_S5Rph{$4@AsW`mjghaeeDyVMH0l{;Fv0> zX}){v!)-l$t6mJUCizl(?77+m$+NfQ{-f#SP61>V+i$vD!PRSh`e$DNUL6C^H_+Mf zLle-R4pa-;#Qu`LY5wHW=!JU(U5>4T++{%*{O;nQQV=MmRiFs8nL z%k=;^K!w_O-z%5#iKo9F#O#9Tydgc!DW4H})+|&Vrc~6M#Z7RHVE2*FnQu&ZErk^K z!IUqcc<+hD?41YlYs=^HXrBODi(Y!d@in5pUwjar@{fF8{PqH&{S&y8ndSGMrq3Rr zbH^hfM+)@(7}v%p^N$g1o(6e~zW`jJ;~P9(+A$Eiwco=&`G5C*$2kRjvhq#O2^Y1yoY!&`rVPoBL2+*`%}S4es1LwI1ZYR^-vzK=$|v2W?>*CB z3`<~PYSkOolc2_bgrqPC3$3mcka)g2ybE#ZW=~w7_uM&2FQ_S8vO#|xbZVIOpa@? zz#$h*FcT^s)arOTkHV0G*8-~+QM2A>keYCOV^8llpz@}+TrNA2M+4eb_1NRyR^QnF zNf45y$q}&5JbP4Js3KX<6hjPr%yQFC5WlM9T3%*-oRyYELc65W0p+QI z1l#=>rod8PKwF!B?a!bt@ke`nP$q)U%Ok@*$f^v0bzdAlJO?9MRpKFF{5eyq4RXE$ zdEcDw^!c;lzD}PK?t}3A^}DY1x!(c6&+;sgv$eG>sHGCboi1ijNteR>{~@*Fx@`x` zkPDBT*CW(>BUFg@*=;ZsDXg!j)5kR0O$*p)7 zIT0L|3$)sG%&f0bmqOj`NKgnZ=3zBTX znZu#@k5{!#CfK6^Kfa>MaBe*5e@$Z_B!Ur!yrpmY3~}Q?)9b8h?}t638TDYANp#ZJ zn&{m44qHG&d0O8EsH-^=0PF6?p(0$3ZN1lS6Pb$3H#bmdD>$IV^1TkM207<>Dwfa4 z$yILY;fqe5ar=hCWBJ6Q;#Y7DOLeDLMvN$;;^46WQq0)2tweuVQKeDHS^xGq-?%Lo zLpu(24J7&<*BchFm~k((fz_PK`{g0QL>%Ey2pt3-6YN{++mOCirpr*c(3qYkoOk^C z{KpUR{0B|uGjCO+SzBNP*o%d1w!agUtD1TENnDWcSEPkvV-Y)xHnN82c_YzI+}tvl z8^$0ZKR0!pCD_)nVRB~6bOV{VQvx41Hk(o_USB?B*zbAupuT+XW0(UfsI?MrVzYil zKa5z*BYPaCK2aljTjV1Bizoez1D9MXDRWFXqPwkwU3Hp9^cf>M#j9`s0!Zt_|Wx zu1tKLC+e6upL*GfITN%59H9`#&-H4~imk2DmX3sVd`^5hi2c-NKHplaJSYa%;&quj zg(Py=_2f~iA;3#P;mfr;Lri!5oE4iB$5RDXv1Ch-v>&)0)T!T^Xge#@0ER_v*ttr8 znKgJTT0I@S`6Dz6uw?^fB%kX--Ep91u4Iqi-Ii|m-JOm}-md#ujORy(q6fmuo@RWS z6W1-^Lr#a)>Wcaap}fX=8MLd~>UH-b_BGR3X7{!7&&sj#oabE*!Unz`e19h0n9=N| zpTBgD-)o9`fyT`-Jxgv}cq^Wv=g2zAhNL}obbwV)>l6$;Omr=M2z1BdKaosm+^40| z085)dudm&`BgZXs%+_=0oC^weJ&ss52eW>4q{{g>RPpk0_<#KR*>R~8375ym{qE7& z-o`-?5@;PT^}LGV^H5&k!jl#pl@-Fz&z#N!F-B}~z>yx#7S_4D#wz83C+dEiRQ3tUvG_|TAYQ@0W&xz))p+8(4brss={J%8?WEFfqIcvO}nMI_Qn%_ zvN@-Kt-D4rpceX=e}*>%|5xlq1p)R2<8x(s{mgviS%fvHI+ztH!Y=r`sB-Rflzt#t zbjYHT6TrD{pm=wU^WEi5JJyI`k+veoY;irevlnGJe3AEAL3cNfpbrwL(9H3_LQzB+Cj%k`wpD}Bju9vOsoXq7+hi8!xpBu* zqx{G0)6@G;PNFq=pZn**luZ2cC+l0d{#!6Cy5hGWj+UC;RbO{P+Yf2rR@w8S+Yd)8 zUnA$?4ubkkRTcG7BrE$!=4};-lU_(%yi<;IaQyJ>lTWEx(l8AI|3gMP!}N!Jgl&by z;vOCgX$K6z>W1+&GI|c(dE1Xz!wTk6L)bNfzU3mbz}AUlAnGkawTY+%S+^(C@b_Wz zzQyq7X;Iq99I*@R4FbT~@7d40Bfl1JyXR7q#QrvEbI8}^wqK>`062pHy{3>Q z>_}D@yq_`LeXKp8+Q&zGKajn>J)iIKJAg-X1h6$u=(Cj#5q}S62_6A^=tfNVhvAP0 z&P)vt4vHtigWmltg_E%0msCA z6d_+V7Xo71oeu#fYT!dFR_x)nDKJ*Z_d^@?p`_cOZDY74_&vLce z%ro^O7DS__k7NNd-pYu4S1y>j<<8BOkj%6z2Q@Y|!MwJly&_c673lr`c57_z4tSSP zBkQGAB*Xk9k-sBw125Gu}L$NW4sq=h|u`PUr zuuEA}e$!JeL~Ij{cxi~MB6beCX%92MSk$>*Jv1PdgBTU#+}qSMGIFV(()A*;0Ix=6 zUa-GJRKfExMyf6fxRTd{M1S_JQ4bzI-p}}f4EeAy-6d5PZ%h8RQieOlwd*w9n!@AB z#eiJMw;nKeUWWx3;lAqkGm72kTBpYkgcgZ>T)qpxZl3l@cs|>~F4dFfSye3Zf8PKk z{AY36JOA0bH2am|rnch3sf9W%Ct2}8l;us^*DWO}Z0-bWqUcY-Sm?spNWS9tje#`- zcnwc~k(g$Ok*9oAs;Z?>tv?+M(KgV2G7*dotk^eH-;3AeVZRFECdsKEDeU9ZH_BgVH1+Z?3&zEH0*N2X* zq!p=wROJH*HCxk`AR(4)2AL9?M$dotLu4X{^F2IiQVxW zw((Aj5J<&lEsu;bkof4W_e2dQbE@mva})HgNC|ZeI!Mr0hp|9FICGq_t+2& z_zZ+Xk`HJgFRjMM^AB6PAxBTQk1xt(v6f#9dBL30R$G%+Mkr96qqgSWMjc$7(9j={ zXZIU+EIuyA1}SiSso~?$HSN}jUc0P}z}-)nxahRaF1?V}Fi(74M{&I7I6?FQf2=S+ z_?$v+V(t94R|*P}1hu84S3ZWQ*&A+XrhXmrmAhw)|Lve>B5ESr!}ICWL@w&m=YWQ` zf-QGY8w>h{871g$qTo)wvH(9VCfE;5KM5&BnW{V?p`Px2;uwG6oGD+6+v)OY8Mrr? zTr(jsA%>>_r}~YJM2VN7GtD?tng0Br8wVF!akAZ~VL;4beV0CYvaHOgum1*N*uhU9`Q0W|t1%cbxi2Xe+*}ME*o@i*z09 z!6Ij}0V_O5`EvObOe^9}5vcpY;>v|>f}&XIZB;AubJl#xq%xnFL|I&2`Z3Y;kOz3f z_1d`wI{vU5t0sF~XmMKx7x3*oo0Qy|aJBy4*b;ek;S$GJZMIBwfk6htCe#T%UDpQr z!uNeX+sWV73mNTj>I2T}ZPp5F2ueW6F6M!|PNn;KEhzpCg?zxHM1?GjZmIeY#kTur z=_9J^DU}+n*SS+WBdQ#HtPBCbDR?Z1PVntqTArj9BqALnBrGCuR_`+KK$TW%omr}) zkWo7+e4bEJSp5eRQVjf0&2!cSxxxi_#NyMeyzaYlsZjp&xbOq-?vT~FCe0G{^lEtxSGK_%2#& z$a>uP|Li}CPH>K}xSC8Cmr8~0tM0U3hlp(;Uq7M#OI(>It6%lIis%9Z<9L_FQsAF9YEyJTKxo@7u+Y)h(Vs} z8&*Ueyd(d*<&n7O?7j&6mKR;*l8bKWl`yJKVZOTv=DNU~e5IK=nC360nb2tPV|e`z zPb@D&s`9pb!0}iU>JHtqzgC{)tm(z=!wzq28IU>wvN#5~JIgZcA!!hTTAGd)0jt|y zpFX;v3-*T|PgIMK#P}Uc?7A$PXIBLBuJGc^!&ghZ?yhpDyx)r2BYO6_u=t6ZRkd;U zQJ~7to^`{T^KacQz?*-zVfmG}o*Pl1{KM;t$miAxh!z$Um}fR*@%kKk2Do^`nC<)t zy7T$h_o+VMU%n%}c#Ts%;Ex{t5ffoajQz*A{7!&30bx6h8kchX(qx%)f_G5cA?wteC@kyetELQ;T#f69I=QpwLxLrTR2i5DPhpj)c zk#iVJrj|a9_^JgOO3eFem`{yMT;n@sjw-9wOEV@a(7Dx1eVk8jcO?74o~UlN7K;hdP%~%nMt}R zY90h1LLJ_8duEEHA}N38hBa_h)I-uk#e>?0{cs6A?JOFn6))k znfQ0t`d^|i_}pt9%~|OqJUd5&@t`WpdL)G9FKbnz{%C+q3GWtJFeaJ?eyYmZ z>PV+@4aYXxbBJA~Wl=(}Cp3g|Cx7$#>ep^%Xr3Ki2*qYyXdH$p5KdYE{n98aKBZ=Ml41F}O>}_#DGG zx>iDx2-?+z2X~D2f`q9uDc|d7(d3Nh=CW*0kFy|uB@NR1$z_8E)ChEyqpRL;3AK&u z76KmTefVV@P2BwIP->s!YN~WN8D~kV z%=XIsubW?$;}PVmfaEtSjPVlt23aP$MF~qY$O%H``Jr5zO2}J`sr>!l*%qZujbw5& zb)<^@_;t2AKSfS)4Vr2t0Gr6%F>njeuL7U3?jF4};k9M*B6GiR^oHlx3k=Mn70=V) zPcZywI8IIR6Ak{IT4qK~mzX@1U+DK^*Tqv4RBj-(0-YO3E_bm*?Wa%BLkU0gsM5#MRZNO1eELeCAeGoopA?1@(Rxjp%&hRb5YRu;C%~KH0nHC!oVumT+ zg1O^g(e8%EU3yN%8P4_sBkV_1VuH6RgBVPxzj%ffZ^Zs`hI#0MT)XDWta;E33vYs) zAR!|PZ@R0(H>k|kf)u@bEv_84Om@RmWv#5!+g-`2#Mj|p-uQvUxGq9gujwaN zbEvnIje1MWli0!AWr`$Y8YjlP+oODq&0FX;Jr1t@yonukYTPGZ;QaFpA+xf$?`6KL zr`7~Di77@ZPqMfC&*Cr}fAjNsopUhQ1)Q6n3QzJA7 zx-9&f8sNBH?+^xPEMPpe#BSFo#c8Dw%$J(71$^yyQEm20zhbBv?sOg{6ydH%f~x~Y zjkb(>;Vi3QYs{l*swWK=rt9X@jCI|oC?@x{(F`@#xy!YOLk7<~)Av=T|2nS(A?YWt zr({YqcFK9eq zIh1ivIQYc)^3i%p=RcMvounDjT5eIs$r+mj(H4_!%@izU+478ca?p!G9Hz+4`QLzT z^@m!<;yrrAT5SIowq07h%F$|)K-%>>$%~u3E58RZujQ@Vz||-~x3M5BckQll<2p#y zGDm7%g2Ecn)qek9J>R2EY${%|&3)@NU$lc8y`bAg&w&x?d6hf1QYXY)VISzqNFxx`TWxo0|Cw<>7^nxwXZM91?8L zXPwgWhu_blFyu*%Bjwd_>2Q*y5U3}898EzmoO6ILx*Fg*2OZk@;w{5hX@zPumsX5y z-G-X0OuXcAaM`e-X(Zkzvr-GV?7oIW_FE7YWvbdJnayQYBX-KiX{L$Pkh7#nS%8b3 zr3Ful2-D)81;VtPvW%bD66E2 z0z6BD+FM2Pm3V(e$wXs&`202LP+9dmSTIC9u4Lj)Fm&<+OR9>OjPXK_AiOi3PtIUB z^0mj(x$(k7CX`c^2~8zkT{3!G-}H}q!PtY3ht(4;NLVCak;YoZ9{c!;?c{8drlH!Q zFbG{rxICy?rlY25wOp~(8V&j#Su(sU>eza;7P@VJbXVzF0_u{aQ)o|XfVzH2mt3Kx zEUpv*i{?%{AS<31#3IS}P?^lYtE60EH&)pwf`(9GBFi>O3X+L41S0Z;g((0eOv@Bc z6gAZn`%)|a4d#@<1NIbX+!xK)L3|Nh=4_sG>GgBLE!9~R!sb6G>4n%|nDQL=g^jYPh(l3CHN3_kHhohV;g zBKV|ovu%z+se%;Np(r)*6mR_B1gV%~%!??_hfb@` z?gQ~gf4P6WfAZp&{kLxqUZ1?)|M}oG+hZMV<#y01F6TuM$ChWZ7J3TBRcq38<7X%4 zlgBk(;Hx)$(-XK^8=e_y$rGWlXZUVj_)=}-dVL>ZWu9-U{3iW18u1rF5=J4^e1)2P zMEK>2@T7k;#}wP-{9#Z8FGLmggPLsO`hEolsHoH#jKq>bR*ZU1T5?gR5IP)ykurBi zmewB?$LkPex17Hrq)Q*ouzQQ&RPA5d8^-UZbT##%kD>?WqMGx4dfP8t1dG5p7yXan zA71{-yFFzX=C=U|>AB$rgtgq#tAotkU8J+xV7SAQkh%%KsQ&d0`Ly{lM&BM4x?t>B zxGHKtv??>}4L$>%e;p_J{D!7%lim9!86^Kgk1HMpU%UT*@#I1NJWoa@lx$YPQJ zqUvAY2~yab^q_`zRS49me$Y?@i;CY5)FAFYW7V|?;+#CiPUbTZ5MD-^xW`_lS=B*u z+HON~R+0PFEH%7RJna`2jra$Sp5mryt3uY zOZ%(vuot5Zt`CdE9$r>bPz@$vHRTc=enuY{BSVU}C*n=}o&de-xV>q!Gx7a!#Jg=$ z*;V!1y?Kcp4*3S36DWm~DPcXw+mHjc6zjF;h$EswkqOKJ2uut?e~>_q@v!?)bg#;* zz(c?ma|GaF{jXA)Ahv7o?iYCYVCQSxn|zg2&!%N|hMlX83BcD3BQ{2lLqo(w;@_g; zES(nwE=nMwM0H!yaW&F#I&;Erc@lc))_MY(RahYCrATKY{6nkfAi%ndKZ*Ma!-rJL zd-0h~0|)^E4~SFHQK1XP=_LywWCUudpdVq%B5*#M&%mn+hR7jO2wX){geZ%O0ez!+(4UglGDl3mEO7K`5GA8{9`d}a3Ly1b;mEvt^5|K4 zH?UrMTM9r_@gV_`p-7cz+G{A$C5z?Hv$IK}(Hkbf_D)wE46gwQOHE=&wnUMWfF#&xlbg zUvk32Rv(DVIz=?)>AdK)iGbCYPgu7GdGtRJGXZ?F1FRc>z+~bq^>1o}mC3CEW}0zs z*Ow~-z?gS)9`jLg-BnQAb8jLRcO@3?V2ry%fApSUSijh2-gcUf`pCDB9ekdF-AooI zfWIaDLcd+S6xmyL%9t1MRMmw2w`p<2laQ?Re3b`-mQq9;0CfUdM>5fj)yg_R9cce0xE@D((cL;HGC*bB7ocT%wVf$Doy zfI{qAvA*HfQU?h0cC2f4sj4YAFQ-oGpJPpcx+a}N4P@;CJ32VYN}RV>>RM?RRUk8c zi_0`*>2wzJf_JW5Hu#1Rfq-SlUtzA6->&~!ZprpjU$C0Ww9azi*V>Ez@ z3#OV8Jc#91SvTiJQ?2==v1Dl~hep3P-Gle&gD`B`(~7GSBxsKfX(hmowJ`}Q5-YpfEj>}+Hl+O+C+^LoBV+XVv0%>tdE8y_<0I zAUX>ewA4+Rc^X6myVyb>qOEg|^%YoHJ_b$$Fwa3I!+FNii$p90O_xTzH}62uImgIz z&W>LGmkdhh>>@}CvV+%)quw@4ly)H1n&<`aV{s1V$ zey|^rKgj(~!CTaT?Yxld7e@9l0v#_V(undBGxI>?7@#qxp35rWFuMLF7~ zK3K-bpcTP2$aRa&xd|S^D3r+=#2v%Wc_xxH$fOR!+<%c~pZj>w21;OyB8z~9v5bfF zB!ndx`4)13XaeJ!;7QuYf=2^8n^If6?)b1;Fenlm+O|hen+7QxZ~fy0OS^$xPrk?fB!-* zbOCJn?_cbtE`G1Ckwb&j*)eSeXu?<;t7vrn7ErA%F0{qCMosp|60uz{>iYkhVR|>E z<3>boILUiO94HA`E$mG#2ES7#U=NkljkMb$A`E6QF!SN4a>r;%TZ3oOa^PDzo5h#uLobmk5P}cm-FK zbRqrC#hO)m->GYg*%>2}228_;WGB)WB$5ZG=jh(ZHS$H}odDpMWUZuvS)-NYQ;AbO*p9NoBQ>?kGM zWJ6_wYwaDAyKHqfSZX4&KwtjQVOW6Y!GBiJ|KNprB+-;W%`I`jyUMavsEy$tl1u&&6>#c z&`rE%VYsFkcN($!+jkx?*96SN0aH6@v~iwZk+C-oEimhkJWXDd*!91T-n|_N3XR5> zkS<+*a`FQi>j7|dwUM;O-l7%%0t&4;RN3)k2cp}-TYR3Vzi|Y4N2psiFv3|BM1%Qcp~h57uEErrjgxHa-1AL3I{nc{P?xmFejp0|jlBL(zhg)}+oATWeOY zz7-)A7@u=;dSiukUZKA~JbVxYCR0`v)LWwPAjzNZlpW|RBAI~-gYvLm5!W)MBU+?j zUuX{QKuyFocAD|vGZir-NvGA=$S;-|9H?=pS@@w}EsdiSMDE*$@=nAaN6ExR48|Wg}OQyG8U#AZ_aZFvj0kBWyzaF&v`mkHA&Id&Tz z`_k#cZbN$2_fje&O1f?I`v3QT_k%{if*KNpeLFA`wYqw{53Wx=#L26=M(jE$Yig;A zVLRfjFAIn5U?zZ#@)S3WO2;pG5kzsmW54+2LD{v`mMc?u9gaJN7v0ntREU^YwESk_M()SKC^Dc=%U9BKS?PBM zC*PLZfy&IpVnK@*yuVpUQQK(;r7E9}i%;}J=SF}e9vrf;ce^|`w}gQd5L5)8rNr0j zl259*cgm{KP%vWQ8`c~7PrOcF$hO^{SCQkR8z*XC^s@t6zk}3j=9X%b6p*=g1suwF zB|ALW7eY-3?S3cFY)TJLz*JL(+Mre5t#oWOS+c=Drqr(foTf1k5>LFfH?Llcz--d9 zhR{pbhN$p3=PQnFCN-{${r0hnJ2s9`i*oNVUr@TWLsu(y$Gh`*lGQkX$@ewk2G%b5 zg(?kwxAF7TQpvs{LO-N~_(j@3#?;#`hjEiJLSS#B1-vhI4V z(RHQSdr|*+6h}NMhRRH}QW4nt`p;Wi+naX%*XQf{@3&k3SsL!~utniLJpT{!*pEhM zd>d6fUxk$euOJ(izW+i03<|K_0Y-#bLN(vmP;q^dvPiaKYsO)*7V@ zH$G0Ip>E zMwkBy!Vt+ih~I0+qyblkFoiqpW2ZVZa0S6c-=F#qdna^O5G`9BX= zxB=?<|K{eiEsOte!>zF9|F_8hzci6I9{ifX|GM-qihOTCRLh3EuiCPLCi;K=#HRo4 zO=!QS|NB7y^ue!L!C#F2!8u?9%ADN7{lE46`QyiH`oACauO0lF=>NLgoUS=F{hn{J;Hpt^c`|KhadsKPL5f#e-s=@z+sau!YEh(HRVegTWBK4i8^c`XSKA zcXl5%sgDqApzZ1!q#%xOQ+xDnX{;)$q_tM?h5N=fpkI2llc!L((l#qDE$GR73Oc5F zF3Qv8(F~MJRMT3J5^4LX9tqe) z=x*UxX-VT963R{ys2zx8Z$+t&X)ee&%2n*MK*{*}KnGY{VM@-l;w(Orsk zmy`&Cq^UdlyNq1o4 z4wQZ2zHOER<09Ffw&JG5>>as-wi8qt$qWEAO(VDanO{oZLv$7$#Q0!?3dHSCuj<|= zGddZyJscY0*fzd<{M#I^diS@f!~c(XoTC#vk(0n;znUmk%dV900PYV}y= zRRJrQ&EiW6g|N)Xr(REhQ{9IU9kbYdP%5eqL^yY;p#IM+9ew5)ict(@tanFiZz-)S z#r9C@u*;U3<{I;i!_U8Ekg`3~dfA`!5hU{zZj+fv|6cWk5WzHooeqhHo!tlGl0Q1$ zKR!75aPa=!hvSpOx5oz`{GvI89HZn7`zp zjXT7=-10*fBw;!|LaF6d06V{QwwQ59(5@n2KXAZ|UxFlzc}8#LbCO;pfcFrT08H{t zFmpzYCP|v{P;Yj`3%6MrPD#&&$-<&!a;UeXfETLGlf$TLHua5Qt;gvlmqRuyeA)Q&l_ZJiL*P}RyV0~<>}aNJS1*MC42OZF49gF8F{ z6}X1AU6SjWY0vQ-x=k5qRN)fL=As25O?dGph!FW@7Qgn9NT>7svWIC}vGt=zkOtZH@P>DoT5!Q;YHc_>sKec?SxAj%Rfgm402ajACWB+j)ve-Wmh{NHNuhBka;uD z896-4W5hMW#vSh2q~H=cHu}Ll2Kg|;N-Qq~6wD34cUild{C))l#~kWa zhW1eX){b7(zZisNDs-%XMLNtteV0h`^Z+1MmsjL!=t*9W z@3I$IBLyb=`Lgctk^NR@p!iA=jiZrJxB!2VE#N;~3-BcKIaCAM&9&6s<-5*T=tZzP zs8=9*YuUccxHL4ILi9*@U^Q7z)tF5c>YUF(;nFXHfpNq-;sEDlEEQBY5RBAXPhow_OeYH%;V z&3UQx=_(b`&EK!KMoRs4*Us1+rcn6v3?6OKc*p*_H7F}2o(1Qe1<55tg&7lRxi5KP zciA4WsOaRP$|zW2#ndbc?Us)Rpp{}tikYCZNND(>VC7jfI#d0M6jZjJ!eg59?(0`p z?N?!st#yNXfz%<~8)-wsmb$!V?lZb32O1=%){^RZ5fvKZYezU*9$(J*$yQ%FUmu1i zTP@I5Go%riTMb+d+lN{#!4y=qUlzBYWzIbT1%^(wMqkP{N*PBbR?E^0RB#G!l;8Jd z9bGUe3fA&_3oiBrFEwC~$vDNF`2uje9&zKaEL|b$u^n@;?*tj@fDglNZ?{2C8I>YR zm(-SMtTC%XB)VUuJFCii-9%dYG?Cj& zsGa3M+)0j5s=(x6@~<^x%NA^pRsYy^>YzGj;8N7@fB#}#e2WeFQ=Lg=@w=&H*2UO* zeUPCagJfvNVaxHbjgAVpmNLsB&}uD`LJz|_(@&}LI}E9eaGH`u+k1~JSD_OJtwkd) zVXdLe6-TxeV{7m!e{dmGt5~cm)!F6_8+pC9Lw*63vACm&)C@#uPmu##dNmb|P$i-< zqLCcCk)1Zi$et+?D3}-N(Pc8~0rN1vq_NUrA7c50FLsI>Z{tO;*RzbXweQor!}#1@ zQmKXz7DK0K@I{bUjn&F*lQeA;kWeseaI{7`)0gvwiE`+O=sRk4+HZ!54Fx!3k)CwJ zM~>FJ>&_o>HFu+ z_9}p#&Wm?r*bu_nSpTAx|KEfc2Y*Ib&zySnIQo39HTLj4Q#)dwuHN0}2dg#lW~Od< zc9wPRUpTi?wUrn&*UkH|$8wLY9LRfE+Q_*Lp?0PtnOoPi)epIA0+KSV} zD`~WM$M>3v+yTZ>62$SP?-ks}W&W19i@TJ8Tzva;_t7^Ew{NVYmc6>kg!G-w+2J8fpUC_EDWS=ovuHj2*lismR@{77x zb;(XN%k1~YiLFg7$%fr<8Uws$k64C%sel^yW$Bw*l@qRK>-yLlUsa(|xP7b|rmS^e zgoFG}sk@$xaLpa;xfY48XHJ5jCHl4>sG>bXQBlv5O z@N}NDpeXosR^;$Vh7dk@WXoExX%b&5&qDk?ofqKLf_#iKc&&n7fHwNK6vx^mV2{s&0xJI^2)ixZ2XO0P?I>p}5f4uwr=H;tMXwqg#dR$&GUX|l_2cHJ zT~aFrE<px$>KSN&dQ6V;k`XS^XED{=^C~>@^ z${pR%D+mBD^kSnRL$5%D@i>TL9=5)g+qyQJkLwmSFa5}OcdC8gnmWB}(_b$kN3~He z)A)>Yh|NIN_u0IVCEV)?TjJCywHWJFO&cu?FMX$4gToVr3J_XK`@pe;?=#$_GNT^nV-jxxGUnrBiaEz6n~1JZiJrk#Du5 z0bV%EtyYL8gCu>at&Y?xTOPWdSJ+d%9OUNMl3$ci+ul`u3_x9kdJE?KT|v&>7tM|f z`NXs%B;5PTN1oRqvN*F9n*8BAI@cfn?p`+4S~`w@Qkk*HgpZ7kBM_ z>#0(DBkwr=$xbx@QIS{Nub6~fAKv}m_g0;j;Q~92!3AHxvZtGyo6blwIAF&YL4fJQ z%wDCpwCg@?wsVuqlaUq`g6-029DtEq8OLP8D&=zDw;TX$8@!WI$8wESqgWV^qNhxM zHb|3hN5+H*(`l!#r}Rm2xEFc@!OQB#%e4d=#Av#wapPE`Qpi#Lh%f9$&Eq07s2TRy z`rbSu=0nGvouNJ0TYgcplwQM0h>Q=;F4c#2_hm-GatG8f(si+UoUhkcvE@~>ti2zI^a}gLKJF4hyhdz>cwbQ#T)Cl!&{<9~$s0`U0?87gREE;pFn*3{;nRdgiP((# zWUr_;g6L%`Vt+nIGZE$~qpCzi6Y9RO=ot@1s`dcGaX7fi$>411CX?zuFft%oW-*~M zcs^8Mc278$eUxoc4MR0GQOWLsjyLKb1Mw)QM$u484PlM_=n<<%)sN2j(LKO&a?D5B zYm;-^PPT1i+17Py81t>~)PuPi)+SQgSIJ4M1sbZgg?A2pDRN5n@0w`?U5;%%cdIpCNi^_njBpFsb-EdQuQPuN!y&$195%Mo>8tn-=ao>D$^B#t_GA6cuoS<_d7)0T zraVdeBP-KN$hH0leKUFAxSnHX|IW7jv2J|@B)ZttpsJx$5n8=?Ye`qPE$TY*UoH#7 z57FMAUq>CthWg*nH=o<`-;*cLw$}3BZTuPjDEU&399{&ca9M*f0h*eQpkGRZlV6$~NUG5c}&z%Di%}q}4|y&-V7b+6-bR$OK<1h)H-V|nr7DQr3}^}JcB1)jRK5?Lj3<1O z77<2Udv-?_lU4M2C6-~(KUU*GRoGDEqsoWEQ)h@uGEo8k+UtKmfA-9I|2=v3bWQ)a zSpQr4uvLz0TJ5?q&yGfCd>WLFi84>AEU?}G|Ji%@<~D9+Uv&Sw_NPespLO=J5{aZJ zT2bA)7lRp6jG{P<;yCoKeX3|lmPAveOi>SO)jFU37J7i`Mx*CNJ)JPM%8Qx-FnBil z`D>SM;^KI|01v@`dA={k`HtQ7X?>gR+xNsXm%K@!tppKi!%7r`+l+r%i9xiJzu0`$avh($h=_IK4Xm@w@;2r*S$p zB|G!~)JtqHcbv9P#|0(%D zo=rSRfc`H@MQ-n*weJwrzB^s}&S|eg<$0E+h;V9w5*?cYwGsZwP0R3^@BSbAy&Z<) z|NATr49OxU7LZY+7HskT{c(cxM7#FSv{RvjH=Bw7Rg{l2%+C400QMVDd9z#sDa5}` zZ}RW|N^^G#X#d%gLL2}7uWZ8pi_dQwuZTe{5FeRlErFkUc67YwVlJNSnQsR+nKRe>*0#ozE#qSLyh)vDF8x3#~vIF`Os7gNkc|cfwc=KExwZIIln83dz|7ZXIhwNX_@Vj320Xl&pIwg@rU9dQH&2Yun*>3v+2ME)T!^{=)oUYLYWM+O%wIe19=NzCJs?F*VOWADzuj;U9ijH~+J* zOe=>M-+e#-F6|KWw-TrZWJKw|{7D|IkVw)3VuMpc&XO@T&cTDgK}TFgM+b z=-0RZr0gG@()tWQnf=$$dXN4$HySJb-xJY)B{w5PvkPd_{O$4VWO17&x-Jq)95a?ZR0J*76`NY1VeW9OnWhDerTG%cY9d_rrghBdq@Z2*@4oZ z(z+GKhR@8zn`ajh?;tj4>6L485|R353C+Wg*q@z~Na9PUoNJ{o;$rIg*X93=W(@vG zbD^!P>DLU<$SD8nu!1H0-)4u~f1AyX#)|)YKKd^%_R@Dj=~k-C6w+f32lpmY>L$Ar z^fci$K1WJ@rZp}jr7p7?$$Ct`R+lavc|72&u2>|cu@EPeiKu!1G$zquKl|3HiB~yf4-N10uPX)AKBK{u`}kaQ`=2&Bn_A_xa9$wg;-5dUM{hjZ^I^ z&jf{n8#z$!G$W;&^bRNYvAOjZ!L4tbgx{NyQk%3kh?SWtsq59%e>x^0QTjA;!kqrY zDQ5JaPKwaKIhjrWPTqReM@o&%&yS=MDXNt^(NI*cooS`c;E%CJ<&N$|;*i@BA9D6x zH_X?OQm^wT=_=x?GJhR(r!Ft0*JEDeYoydyTjM-Z>YUd85-IfsYqOQ`hO`k$>|XCW zSiDR=)#J#OPE>Lmt!+fmOrmrn66W_!q|_VSgbS-ufGJ9cX++9JfnE@m5p=TL`!=0! zyP@5?JMB%a-LUTMI3~IQPqR3Q!bv6HLwzJlyY6)>qN2Q@bsU>%IE!LfrI9%^Cy{CA zyr5H5(^u_ZZb3cpKJ6LE`?ils!!(e<$W9_o8laI(Q<@F8qseQh z4}NdnxbMIx;2+zW>^oS|&C<}kXxNI-8dQX-)+%WS72WvW(TeaID%yet6~Dlnx#l%t z^0i7%HLvOPx@paptqDX0Yl4IVe`>Yg(Mx@uwvk-hHrUd+0k)!|*YCX7IIs5gzFUwh zt<)84#cRzM&y~FkrqWJTx&|G)2C!4SF0S9V;$@=LWdbKY$?08kM+XYq#(TX@U*nhD z0oV?@XsMkx2bwN7TvzycSSq_qv*osbD@}B!RG76(3mVX*LBHxQLztMc7W)J5CiI=N zs=%A=h`fQ#>E5hI1xrw+HTULg6c7Ns5O3h+MJ&`iNndH{Mo5lV&O%@vRoe)r5K% z_Qcz1f*xed8T4U)nvj0Nj6o@Ck~0J%CZ&*QXUn@8wX{)t_s*z=Fk@ZydcbTXMsLpS zoxRkML2Zlq=U?sYr8{CvZ^t`3J8xAF?49o@D@U$lyc}@8Tw7+cZlc>{ZPrt22F+Y| z-9+naGN!b9sPA{jLYo)1w;l%r-89d1OXu(@DbwthReRkvAD8=k5}ihCUw4)Ix(kQN zQ|*!2&NxSpB|)PUPHMsATy;A=*Zb^h*y*c5J0e8gJ{&e8vPbO0{%ywLd5^cFl#FGk zW2dj0X4KitI>|%Y2L)aJ99?9L`aPPticY)E6zvUiqVvW>KMF15jKi|PGg~O@!%klv zbYgD}Yt_At$&BIZ(;Zj1`a6Afsn-+21=**Y(NXyD_=xey_c|Q36T?=_ZJ|B4W=((0 zvuGUWt%0Qh-inPi9TVL2i+s$=7jYpU2h8V zNVXw2<5-+m9KTz?>yQh9DZJ%u+)iJe>1oIunDY?bMT{}n>8p3woJZU_R438T-m%9C zO)pZI{JVrOxAaPeP9Lhn>nMkYTY?;)a<**R4GMo5%-Uk}yrqP$dJ9bZsc_2 z?F`lNC)>u(P|c!gdW-G!)$6D&Y_ZW)*hyRd<({c#82LzdifN=lAKS0@)nQ94{k9=K zK8w8PsWbrF)8m3ug_b#T9r2_4@<-o!jc0p*%Xpzx@8f&#@w=2u-*$kdt7>=i*A7=|CXd(P}V{j9x7UMcZWrb9EV+%`$LHt0!>Qzeb@D>$Fm> zcx4xQT>H<%hWQlPe;N$~_QLHy&CV+R_qpvqHg>WOS*Q096_`7{LrY*4^!p=}FLf0Imz0jrATsxOTq zNr#^>ny;;{Qd?cH+H`GmTB*-M>A|TT63l_4ye*=r-!Yzkr%KKR2lgXw@xi;Z*}W* zMAnJ*IQagY*Qm3gR+bypXiZY4H)SpD+`WCe5oy6Ph z=Xop>T3^IvBv)R+OkZz1$l8(iu}@9?wj0^cK}>b=ruDWweN<)VrmsT{%WnGq*@8p7gv zA5JDVBp{6eKqVdQH}mk6`Y7Nh;E0*`t%#^%e7*tRkLCBw>Vsz2%)k$|7qPcaeDzG| z!L`oz%`V$FW@hQ2{KYYE@2FMBKT78Hl;rms{GyY}?#vk)EQumOXRz zIssSXmo}TT5pf=!@%`re5huY+78wA=42W1*YFqxASH|lR?6t5=D-uWMmAPB~TNr9N z069%6g9>-=l31rLHklD6D|M^I8THC|*A?^#`{v)3ebceA0!McdbHBX46+-3UCTToi72W|m_X zQJ-G{X{?J^N0Bqc%*d$bUWz%d%|tT8R#=JNl>aT`!D6mRVSU@sjxkCf-k2+ha>YaN zOM$Y&4k9*AnNeactyjE>|t-M20AJ50tk1aL-upfR8C~scCBB z7n6C9zXu;VvrDs!p6vm@zYAfPCUtiy^><`?7x{q1FIIZgOt7Wo^U=u8)WqEjj} z?NvK=_g_D&QO;SvMj~G1tWC0;ABj3KZjES8r9+S1^NzpAxgZ@8HjgD1g&YL&U-U%n zaWFQctJ)KtM)059_3CFk%TV-7`Zjr_#I3I*cx3TKCswIBhJ^3n%;cMHgH$GB$4nhctqJ>j66k%YIy&p7Q}m}FVa>u3!^7r(fJ&-6H!$Mh7Gj$u%6`iVI%wtt*B`>0 zO@QLS)dS^~d3X_#r)ek|Ja1@@#E~|E1|kF_!VT~hyNNy8C0aRoCQYevpnW!D{vD^f zOJ~|T%A4mNaST}?qljw$q*U{#RM+@ZU9J$?h}X`$N}Z=0Xlgc)*12RAdVbA0Z+LnU z<(jwLu3!fc`pAeK>N{~4;4ix=^eNdpU6EKJXcpbeNFU5jBh>7VeBOAr1aEAboRHsf zNp)N;+U4Rp$c1KVa_#d`g&T8#J#>7Ya}uCxdx>;z>)bT1W#}`!=EqF7-Op@K z^K#>f_u2I_`=Vrek_a0yW=WQ|0b1H5v!!pWjL5*8ox~~ArKJu638_8Dd52iNNbc^G zmM$>1^x>+-rop>$fQP&Inj$sTn%soBS5~Zb^Q2j4!_+{$S%O`Bnam z%WufVY53x6U_^+RH9&4c%A?crgCcu~-7o8X-Iu%}mm@2_4>>O}Ey^dwtinU=7z>XdSc^^izSo+zzr-@b6Jf_3lbkcnS#N?4__c@Ohd>@``>uOrzR?^QIn2;I#(2c$IW-v-eR*O(WT zwZ59g@SEWtIi$i#S)x26RCSK^5!B@fN_{(&!x<07OVD-7$? z{v&up2^M#Gzq2PC-wS50yEfA(nvyO1o688U3(G$iQf8FNvVpZWn7<0wl@J#fA*-t` zuNw+dl>*~*Bg8AOwi~1medn_=hvNI&t9kGqLLfkYz_wD!GNNZo!aRgec zY_i{Mfvrf`##F|mK=o3JdFz?J(c{mUEZc)V?y(i-Q$BmDkJI0n`l5aj-{wa$JPpg*uUegsCJW1%&@bpI*v< zjvw_hGM@TQSdYpkRM@F*bR~)T@e;kHoigyMH;v9ga$i66Gop7u=EbKn1>`c$2ZXcb zYxb>o`D^Z6?BA7o1P1zeL!rPwg!#_*S}KQfgacPnvM&KrWl!Jn)PDkdur}eD|R-Aj>rm-`Cou zQ;@DXPL@=8fhq}Z)&`VuBM7sk!f4K!pWxfCuWLI7O`)1t5kv)APO?UZwC4rpMF&yI zK%ASK{tPN)YHEAT@FJ^6oPjc&&$}mFL*hMzWv(9XOTP|AVUjS}@psBX7VP>F?!- zrt118{NLP9MGEz{Kc5xyTVa1G;Cu)hQ88>dD3ve6Ho;kV2o^@2{5%qjC2F2L!7)eg zAf%rK!=G^IH(YvYW`0Y}ZzsB}N11x^gG!a^k;$MnPP<*pZ+oxps3w!W?i4Q?w`bZ% z{3~qww0^6jD0aI&#(x*i2u005QulnnmSttAsO2_auW;z8^I5f5QZ0;jp4-j0_f_uL z*y*M)DH#_l8Mk!EHczJ{@eip;r7N;MeKA@ypLXG6auOaSP6)|r)Li5i2NSQu20C!r zI^2|GJr2p25-q`?8)5RDNVd|`V-gNC_D>&kVYL=Zmf2CUf(n#E7%=sm!dh zvX@DE9U%Y8BvfEf^Ob~o;_&eoNz|)Z)e?h<_4ZM^z%E}EJjHeoS$HlLh_|EymVh?i7WB-o$c;aG}w+uz8@Fz z@!M?EeObmY@{yegme%3Z(w%DLUyppgt{!YLJ8dR*iP|4Tc2NBI>u)?)SXEA&%CZ<_ zMfBl@;A0R!o0>Qy+hI7tX8hQs2k!vK_tavgw9Npi%D7^>UY}q}ulrkOReYk8wvT1t zNZx|fmif^1%v=$(7Yfkiq8X-d(flkwy1s-UlN7fRri`;M($*_E7eL-L3D=PD@#-cC{Ny_vd7-?5^z47alH_%aw2D~qwBb6xj6Qi{PhdR`)`{6M{}7uEe- zmw4C+9vtGK_f6kRu92ahVhT69c3m$!c^=C6d)dYia*VoT)GN z94?)nv2#Q+jg?YEtE^PCDo=q-Wizn#<}GV-L_E!{ zJFW7&H8})@v@?qVj4btIsaKLhu8&zu;47#ZiFE0-`istYeu`pWn&hwEdkwg!q~7my zx}tSd3TQEvS4`An}mWJa$gjMRlZ2>%*k+ z{=cyyuxr7Rjnb_SB0()}bdBs6uEsP3&TqvuXG+q(889$(&xtmbXz@x>)cf1(@TlUP zV*9yUlsIioZZn3?QtxBZ>jwO=M=d{j z?(;ea0Xq|IQ4hZ9noDKE;x$aR+cvI8mX#?SdCDy2%8aBMd4b`lPZVvW9}uZ&(W%$* zmkgHV(A7_vlo%PbXi-J!kqMaSy5*5n>ihKD?u}!T@T9`Xi_WS|^}_WW_M{iJyypcRB(C2Xp?{m>*eh@+-Q&q(zS81*Vf?2d04tQ@ zn)6!`gi_DZXK^s}UCNiTqv*&t2dhhK(I?@TO@c4Qdv(}{Dmc21h~$n47E9gqXEhqM z3xs(wInzkJn~#e_&6k}AAs2>8A+Bh)Vi!9#-#G{y=3J7QU6Zx0q(jc)$rYgKaf} zVs{aAiNR~E7;xL}Yv(Bv7#hx|tG62~&~q1~@$<`+w$5c;Ki<&Vj3es2F>7j0M5EV*i#W1)Ow<+L@Ka5*&km-17zjCOX;Z!EePWTGMRP>VTw=qrExZ z1b7X`{_T}o%Rz5fE6A-8m)%k#=Z`ZOCeyO=wuW0UB6LG7pfN}4>=^**E6qYZs+drS z3X1IxgNImnnV<}8rL{1J{8ft?FUSh{!;|f@X zJ7YIw-yTy{(d?iKMWqQDo=1XhNvcv+HobYhr2mzPUMsgn#-8uRW_tb?uPX2Ke@dUgBLCT?{n&?u8@S&bMf4L$ zw9C1RcsaIvrSHSus?w`$ZngG=QnUP#cdDdwqgKXMFIFfPWu;;|uWn4{D;`dc9#p@&` zI!&dP&(f?2e-scM$-p?v9o;6x>#UNyPHev$))js|T1zg22f%Zit!#$fKloRUl?Y%5bG!@ZoB8=QdaiD+wa(3&vq4t{=rhppHbZhT*-z~bD$tAgO~ z^u!Rb&aM@`*t$5Mh?7>Qq`1tW-e75Qd3f=LJxcD7Ql89Mmzz!T>Mtl+mqQUbZ-w(b zXHfT1P$WAo%;PFV?#KN64m?fTkRVPQ)xZW(V|6I7z9P~8lF~udUpmwMmuasGF9l^u zVbR7#=2t$q{ci_VzMX44mf2M>W&R3+{g}ve%V_;<_%lN4DrSWUmC0>Hp`IA{&0ciV zusrpp@Sm?HBW}_Hxlu-bMFZ@(6zKS8f>nd05^wP@*z<3wBl!|at;WSI`!L6nfj|3j zskQq-TI9WTu{3y}W@g=~2K<_jgbf+x^cfZ8@$SYjh?R2xq7$o`>}bf%F^b` z<~uhFy)Bp2j&8l^N)NTRbKMr4cBkURn2vDzz_zWkQ8La41x;c3X&wfI&{Pm3+yN(t zeiCd6f!uP30ZP}Un*ra?W$^>tzt1i<>WTH21GQfZko^tOIHj;TOk9i=F0NPE|6I!A z>Y&<&u-eXTc_8MWja#XEl}{Mu)D2Oy79(wq<`Pi`0!N$25nPu+8%X}e5KKU=-FR?2yvmRHdlPx z{vq}N%ff}24COWTTcN8n0og*B77p(l{UjodD?Bk6BOY48mVA$}o+eJ!vsoOQ*Cai?ijjpp%i4$1hv@T^1_qI&l=P{_TE|gv#=viE4Eg zEa6QYEERiFy*-~i>fdJ`Bz4X_q|GibbfGxhg?g$q15u71jd6O1C-bwx`}4=Qw|~pA!25X^)yg8E zKZ70RHn;z88K~;ch?&XXfd2AR>FZ@FDzh2BKg*G@h5Zz#)t6o+SbITB!_(N%)c3TP zMH5X^m6`ax8CtTXM!)P*6Vo;4C01A=? zIA43`x7N^30dpH0Nx%^9ok|4u!4Nl+*aO03F}gV1z1CB40i^c-jA=!hWKWlT}?U3uU>h%Eit99@H#ThCaGRh zz2*-xulV!DpOSs3eFv1A=|(xvMP$gHac%hPbRMdjW7TZ1ZkZGR=A=I-X92hG%Am6s z2V2A^z}&*w6_Wc7j-@)guf2YA2nIy5vU6ukp3LDUu7PT$J|IZR5_-i2_@HAq=&iMS zX%Bu5DYk9I()asEtFt&87@?RO_LHDmQD%cY-zRXDup=FeZ{~m9ib_YGL*I(KR};gZ zu^LuM*9dt#*ht8YO&bicr?}MlfG4y6zk`w^(5m^mOY8_4jrDoe^y!=I2H0nnN(#q| z%}!QgiB57;j^Ux#P4__-t!fVe3qfGrT2m09L5*us)`!P=ji7;v==@0Lb;YWB&iZAA znz$PS&?m#dyo*6Tn}}#{`Xz0>U&_;7c#2s`5G44+456;LMlV7ZBmcuJGrI8v(VUI zt?b#8|Ho>KGC29w=XxOAKrtF>PXg?@&$&+y>^9Vr9q}9DaHnc1pensq4a0_kaw#b~yn86_!b$Kf6RAuW--jLZv-v#sGgC$sLqZkJ@lUh={Nlm8w?4v|?2|Alb3n9) z3?PslP52Jtd5x`nSJ4#R*oSxaw=$<1gjFgxV1`O3lkZ8wA~SP&_1tl|ddbGL*-(oG z8!cGs3?dlSe*}L=5y0)~!E%u|I9Md@U@#T5o1-%kFd#Q__-uTRtMgkrkij&a2JkFiYtnLn5`bJB4DjvxY&DwKtS<-z-P zk{Y4scMbT&zfVA-T;L2(t#c~cQI%g>){8KC~gso4Rz`#OMqj))tT_UzEtZ}iG0uSw6=RYWfXs`|c ze(I0S+<)YmyGyeAciuX`IZDD2P4Ho`>D;!*k4Z9eP^Y=Hu~tf)LOeJIRBxaeryr=T zXE_D6v}n8n79zkwsnC02ADof0m~#2_(jw%>0@mLGX*A2!f|-(x$Kk*1+(lk19jSl# zd#_3`YFMJK3*_R5Rw@XlneG@~vMr_`Ra-Y>clE~;h?1?@yQlynsDI|k=U z$hz|3nm5Zo{g|Aa`BTr|oxO!lPtWL^!>67;=3hnDLrj9ecY{FvVEXi!zJQhT?WgC- z3eL;qM2%9`j=(t)J62+G zBGR8Ofm*f$j2amqw@3}>2$Cjc`B{B%nHZvM>-KdOTI#w_-yF|P|9pBG`qL9mqQC*H z^RA^m9dq9(A{l?=1G3$d`EPVA2m~!?QP!YsCWqHOxHTpvA3iu!0UetWxvv57R>MVs zhi&tkvbyBlvuev>N%LaI+v*wBK;QsRL(Z3Cqg>hj_2e{OLPpE&16ds7Gp<53YpGYFxN_M7#I8M`JY`j z{SdsFU*(RAqHzz}f8lv9oF%@+6T}I7Jc} zU~&rL*$9MKINO*3zTd#WGip1)L4cv!OM)wY<>*mquJ;t-M$Xle7O#*Oul~*G*LP6# z=`^me6c7EdZkRy0F%4*$@uEFn<$`@1vu@=DaOF14qR7$zeNHo&d62TZe0EzC zk$s0&RW_8nOyzjdHfAQq=>D}$38Z_cNGExKJ>u0M>Z#{{qIJ4^E~fLQP-Jq?p#DmpYfZU>;{NU6kZU*-<7}Gt zX>HC0WD=;Rk#__c{iE~T{E@bvcDrl(^3URH7cBh2iEJGvtu!S5@?b@Tkx#9C6ypUS ziD5;V_F4U{{+o0O9SOz{izxWCqS(^dG36~vW|7qUI{iHtvf2updJC$S5(RXtlOZ=| z^Z#3e2?w9{XMnet)BXJ~&%JKn_W+H5yXbs?%Q{sgTpJHn7Vs%B=9?*VI0&l%X;8}p z+aZ*3*BnajNHZe+$3mtd&raSZ60p!Xzb$=zu+RnG=W^33`}saC?&n15YeTH* z`wGy5caKLRA-$}xB7SP;y-?U@8U(QQa`Acl?-{$=JRGR2Zyx}>d+uVR-i#e;@7L*6tU z`1=3WobO#BCBH2d8W-rz-6hFB<^ah2(3x7GQYd6JnhkL`{Q|od4XKaDm9KOsF zn>ECa6Sn{H%XE!>fm*SGUYWLxkD z3Cu3HL!j-1!5U7)vX$TOJCLVfudqN@>7L;&7#SiGU0wZn4guU|MK%S0$oeb3$oP9* zq96PE;-agG=mFZ%QWp%nW#1xSb-X0*+)yieoB%Y*kmXrWBh-k;8Ws!y2>)c4{EdIL z%l$qJOGMzNaucjQ+bg^EfWn=332{Jp1XhkGfRoI2K!2i@-_&3C>Yo{St^zyODp5#9YwvfG0cN|4jPYI}LT8#a1tfjR#O8(-$QKBml<=>Um25?-J0g`2y-Sd*7XS zd)oX9sXhk;{HC6J&AILY#LT^OFevj0@a+O=lJ`&Y13AF)!4@z*2b3=I@b@pj08n|_ ziJjg`698`p5dZjokp)!u0q)Krz}@F8Ao=OW@Elx7d=j+a-|*b4(Fe3kV)DMonsv&QwZ)!A({K(p_!9LxWMiERv{G>)oWAn)4CDH> z%fY_Iujk3M-`4cULtCz}QWE4)xcJ~+(_D327(^Ok^BF`%)Njgs5xTxN2e*W**Uq}D z%Wsx;O>{7i>}Rg4z>YLqhvKFUrTU>P5OR&jYvW2GF`;BY!!tmX3S?HV9G`=G^X{OBU-=QRcD*&~q9lrY z!ag774|!;+evtlic<$y=Jdh%LeLM8)23~4M(2}-+tG{4gXo;HY1sR=nd)3tIU(5zk z_HP64&tSNOwzGLtyjY^bbFV(A$5}N$zc{pL-1g3TLXL+0IR1mlfA44&{z$Y(1VEAD zA^u!t~u!sAMBky8U+ zeDowO)lDy6Yv%y0xdIP;oXpJrmtCzFpsNZRFfEI{9S^z5Kx^n0P@#``KazLF2{8ZFGm6D-nVff)URERIaVsdFlhH%M72Tx0)Cz;d~ywa zk<&q~{TUxoKa#9*j%K6h?ulu`9siZm7KuoI9S_ZoV`4<5??CuJQ`$GNO$FyUi{me` zo9E(51O=>Wv7ZgFdoXyYJ&<~t(M_LuE(21v-)Z+tIG;z^lF7Eq9~seXf7e`XhTkLX z9=6&^%U;<9lw%ldD4C*_QvPI6UbrUzP!dhrb4t4K>RU`KG%qI2C}e`{@KuDUCSLgr zXOLK$HW5|Qh+`+K8lTmE$4ILqF++D;q$ZbYT-wQYDXO+MAw-IpxN@RfbW#MYM9qS$n`N5s_j^JukgwmRiC>fI@d- zy97M(dQrnQ+FfmT!9Ds;OBj5GK37+KWgXz}v$A2?8MA0tXiR5KYs)^_kw- zJ&tsW7{*;gN`2NK1Op!k^o%Xw-Jx(B>iN*1e}f(lFjKEt>jzM!2_0&xyw%L*);BoX zslPW$lxxGu2ICEs;wTZWu}_qFWG$4E3-#tm1!oR&l=jFms*btfe?bo+sO?51>jfeMf1Hi=E`x`oLY&5tQG?D5`oD>pe8u*>amn_GH@$72Q5~< z117`pJgg)aEDwyy9i71=q|M(dRwkJL&4`|fL^PQHkJ-ZUJ=p9~@9q-cS!Hg5$eTg!*@1Ep$FIF8*g69n?9~% z5Mkw*Ke*d0@uK5w9$_=?3O<_WS|zDoaC3UmaCz28ghozV5pG<_PyflaG!jk05DASJ z)H#!F*te!UgYY7O!(sqi?#*dYpb=UMfqWm|M0Br^k74t+N0VXGz0)lI+Fj7Xv!U2E zobjeJ+0-_x)qd}iR-~7{aK5G=?evz5LD5>*9G8>`J;;=&ThRY#M|vpVRQy7f=oLzY zJbk1%>&KZNSmDq!$=W@@1iuI~QMRH!W4bgI0F2V1?qT>3B+vuPAOsg{jK~SoUU}zGRckn9iBY9y1Zjx1* z3*C5Xc!T#C0a#^=B#uH20rnG0`gPyz?srvQLhVI#BuJW+hOvJy8?B96XfILu8Kobn zPRjK8fLpBnoc99(SYcS4E(M%|meL+nK~0P2PG{+Zmn=I`t`corP0zf~Wr@tIP_u{1 zHD+pPdDG`peQvqt7ypQaW;|6pd6f`#Xn_CG75F(UWt#4YkOSlS&TGu~?;04tJUsM( zaCr8~-vYYdAi2jQP|!Kw4PbklDg$e7lZxiScgu6i5WFLQ3Q9hRSPoaAt@>Wu?IUzA zP^qI#rt>gRCO7^9!Xck)02}JULUzq9iUCguG^Z9V_9h(l^1Vn{EGC89IX>im+2xt+@YlggG*$K){%_iga%Sj7=9!haJA z3hsZ=_^;j&rNFVvM}inSG|9#O6GDuF0cD|G)!$)_I_vMKe`Z`z59E04LS~_mc7EOj zncb@t_ld=7_qy+?En;ZxVsy3dU9zj)Uc0C69W>8I*jjy4pvlu-u2Sbh>N@9Lc%h~z z>EjrOrn8n>A)~*X**)WUY=^S8h&zA~ef3p{P3)%~RLeAVIrhN3t!kO_>Oh+lT9gS)du8^^CvIkuMY-wI zqqAKE5_JEsJha6;zk2Hogpo+=GB*lC(EI7Rni`jb;&|WI?_-+m9;x*f-v(otI_+F! zdIE4beVVOk^+#pg|M1eZi1v3jJ2WKEJ*yq|hP43p!T$_1@ZF#rTo~vExAs2le5tZb z>tEsFKM7)at)#Wyh{&VvU>T0uLSxlh11b*TgGM%@zj*shT#LgE`VDS{$sGX=iu#Nz zvfX2er+BpNe)DDndfJl_i3dgj+IhSaOc;#;-_}04uFY>j!IU>kX6G2m;XQCmDW^vJ zWJ~=lvw@Zr#lNzDf0t%)d8GJ&@6Jzh{M3=iHBDvbj+!aLe;MnNm?5I0bjl48>0ooy;N#ps3{Tv*d`+Q$Jb8(jgI5+CK%)d%Q z+ZXGljf3%?hEd4Ooq&KY4aC`-5CCXrdh0GHaRVDLe*_Vt{M4B{T38(Lq4pwY|8O-+ zsO&g@c#8bwoT(N84s%}q}4)ZmzlOCIBw5`wczPn3CJ{6jBlekl0gLB5mW zWo3}=RX?vT+1`#mCbMNDTWdS>oPh7cBR6AC?k^=cFwzv`$Cguz9lK2}{c~0;k%e5# z1oh1B&Y8XZ;?`DvWG!;VM)f;$fklU5KF9sxZD2AikZ>2sHjjgT_vYs21)#g^4FtB^g?LA&c|@BN@4nfI zU%1M}){Ird8W207U-LT3zOdXyi6ARS+4%3ksy)fOP5XSQoth34zGwY`}_Q zv~#9`bWflDFnBT}eW)lh9Ky~MteI$IsgSq1fX>uP(&ZxmD&8#?MP~edW?^X`O5%83 z>;}>1)t0ZJGx&CHFcDe8(e=y{ie*kw_)f4*@iqNvxRY7 zlJ?e>70S-Q2hnNs6oct1{n}_GeR@*?auc(zH1e7usv0#s{7KTuXj)fS7}Sqj1nzf4 z_{TT`K`8WMtEegB|FLiWLkMiZ`TGSSnfk&PtziIO`4wpr-uvc@tLE5vcZ^Y`OM;w$ ze?!1?QZY9P3_m0P@5W`ua;jom(VFO@#PCjH_=_!q8P}^G`A%MULGfaNd-^XdAUPZ)Hk#(X!Xv#+ zpOV`oCp7&wU(g`&1}MF%<*~AQjrRjglpKy=C7H_(|ru~J<)&NK;3xYhNe6yMl`JNU~HM9poC>h>!v+_%6cQ$9di&T!~5vZTKpqc-*Z zpUjx6m?hFhuE0jMwL8^#eCiKZRlyHLT%vn@0qtHHopN8@`{`C_*Ey{Nl&B3#HaFrSEuGxOXe7qJx;~SykFaFyg%nK`Y`)ibjr1oa zIj~G)V53yCyJS=|Tyb@fZ^C!l+$$M)LyZ4D-DRNJX=a($>{8!p))CFOI!(lSmwMt8 z0XROff6W@g8Wq14j2d})YaE#RdeJ+L<~iq=HSPR#>ee1-YJU_arG zHmwyDbv&SR8S4(<)_4|S7YFdGAim3@20_@x=%gM-Q$Htk|9q6MRV&iniHfC->*k?k z_#m3NVZG3nmL30E0m8h0gOUgmg z@Wz`yt(Rc_8OAkLR#I}+;n@8vj=$Z3eh~9ZoK5cv216KEdG>6_L)$bS@JM9bDKeC( z-*dG#Pe_Y`&#YbK#Y{7#yECr}@$1VhCwdj;%!oN8wmR#Pu)9)W-1Vh)wZm8+!{@vj z%zwg}Q+PXn=QhsWIjam{5->LuYQrqGk*@r9po&5M^$bvxg0`7@o99ulfNUt0`Q`|E z(l=QI8SmIxU*`%|<v1k1L%bSl=p^UamM$@(36gAz703 zG>e(46?k8~aFR=SkshXIwYz7f-hYuct1a;EM?>utE^5g~V4&?-x^xLnc3JKcRJ42M z@@VfjP@-9QvRgY2un;Y?nCWMIq9)yU>92LZI%8L0C*@z-7xzud>snH_V-s86lb7h--^#IwH;TA_IE<|)3+*o=?=5NWXjg9gP1^EJ+~-ouf6FC}XbY_q!L zE%=qx!dJ`|+EW;_WOF-#+dA&C#cY$Ou26k;Ec&TG0i50wlm=ScZV zO>Lre zOfmFlH-2dBb^WSoK zUGx%oinnb+dvUbNoPG2(W{UsX82nyq&v9`IL$-e{k%73Q55odaAVxy83sK%47K37f zR6taCTGhK9Mup3{(LwC`>Cg?cvt{herr{8Cnkd`oJn|o63|A$i{pj=F#UmnHqH`kw z?o$Z{#BEa#E1u6&k8fXitu8T^I}NvL=fjpxs%j0Svze>>ibn(gKZ->hbYs=u|NVKE~X^lQ& zFyX9X3|&4fFPul?=DrMl_^dz@`$W=-J2dIC*~jPq%a@m{DuDJTmI2O+bY9TRJ}m#= zXW4aBj@xXm?=$plUS{@wC~0jGVE5LJzuC4FujHPQ^j&98bVaY6)>NyGvXR(3Mp!&zB_4{7Vb1q&M?tb85j7+j-tTA4&Lf&Kn!FV=P8M7#9wv}6_U9n}No90_yQ;SxSB>>IlypbjbvjUriXkgA znZ#@*#ISfgF{q%Cd-RPS5qRO2!-DLv*(F`6K{?8-82z1vP12WIPIDScjl@gO#}9`K zeD--#Q)H{SUW;o*5A8nPA1pj;H&mogR{N=krbwis%vBw1iqa8E5TAORG)N4U1o{fb z{@U_K-Bn-4$IXOr)1PVKz?YF(Xrk=AvylBAqpG8WhnFdbp|RZtJ0D~lt%BUXr9r47 z-beMvd}w5Vun;CXdE-A%rb7EC6t%~JUL8NqXvOszYY6TtPzQTjO>&cdgV|7*R;N29 zWEvxy8ycmrn!0pJXt|>V@Kg$%cj0u?a0t71OR;Tqg^F9e{z{j&x-Dp)7h!|4A3tp~ zJM_`y?2^drTP1u(o$hBBUSX*583=fbbB{>c4J8G$6!(zvCs+A?q3x#g#PgogjI zBkK|OQ^--9nkmTxHv)!*Ss#O;m)qR(;VIIBmdL}Bwz1eEoWg1Z7Qu@gu*pgMBKdVP zYx-F-${V4ZJCk=PkqN($A;q%| zI1yqy`JS zt6!?%(EI&s1rtuL^*D0kEVHY$ELY60ULh(ftHY_*6&qDjQAEtNd|Y(>f-gKFAIpAM za?q)qG9_$bCld~LiPa#@T$nfL_dQR=-G1qQ#Em=d3t0?oIbO?mumAjDVy(=jNU zGIxr|!hiYw{r>s+^tmil#1a+qrr}LD2Gq6J4}d_zZ=e}#5p`Ov{FjdPKGjdS$H8`| z&Ajz$4#qMCa$n(je9PgH98vgw?uRQ&lzwB=znF=5VyHGP*p`st78kvyg(G*g9Z4uz zp5bg>_{+DcSj|>=u|sE3p#^~gL6`yg!g}08kTs9aCvYsWD|AQb{<`}qX2~*EQMtVG z!;Go2!r#p7MeYjRyQc!2sIQ_QB-gRFe6W%rNk}?Bzkm3w*=(<|mh`4w6%{<4QHhO_ zFI$P90r$&X{pG@2Zt#96Kynd}Go}9nK#)M`U3S60cwOTo0Th69CpV>HE*fY=8SZ=S zEQJR_8*4hlKo`m@fD<8N1)X=$O`V6V$cZ+f7uVV7`H|ecmHH!D5KlagH}gaAUpPfB zDtfxteC&Q&DMHYOhSqRP$Obuvka4v>QxbLQm24JWb&0A?==!E}=;u)%j?YO_AgmSY zZx=0o-o#~B#XQTE=%;ZL=*{j zGr2uiy<+C;eSnBSGw&$XNz~wjA!R0{b%X3D*rK$#0GO2qK-w`7{2QP^|9%gZ`fxK) zO}z;LnI>l>TAoGE4{2^;AY`5}Fkf_>#XW8U~cu~EW!nG@>CjjyqszLq1+5IJF6Gk7A;x(t!k6S{gf4b}?3y0-nu#NS*jfZ>k+hBh1LFUzbug z;!llT&z>emgI_ZTuLIi2g(M=YwiPgrV2FJ^)k+b z0znO37VoHbQ;$orWDFr>E(dEh#y)5HUYn6!Mhiwwh~HiPW&6?0<#x9JDPWFv793ER zj5sEeSGcdnr*V}@0i0`4_MvDAj_j+plWcGdeL zhT&ilzmI32Vp*Ttf4e5oSw_x<&A3?rbQT7%I~fOzC^Nr*CWLGomcnj6?qBOmo8hkd zm1v{&r7$@})H~(Kory`z74Ocvay-!`hmV=lz}>;=f|+j#%r(UaGgTSge2|U~CD8L% zGUFN@DV>=%=d7x;k(o}1Wpk{*tgL@>rV&5)GCTgI*Qj}{gS08xD|z2bD%$tyj@G1@ z>(9=ysCG-!VNf*sG_F|`UDw;*c-S{(1&*m>(=e&F;}K1g-Pko7v-kM!;HknnCf&olvshlRKNz zW%zMBg`Hk$LapFU>Fj<~mt>_CPjEh(B^k6tUbXpY!e+7424Ny z_~F+hW(@r>mM>4Cahd5_w8_OU77hXiBw`{k2l2frYxKe?HSyaCIzx?o4y)h^!w%^T>Z$1TaAxMVatu%d_@SsQ+Kml;RAAPAbv`g5jL)*tJjR# zjw{pLp6~)Gl%*-heg^E}-&q7dcc5KMvbD?lNF%W$ROZW5fA%3rGHK8uD<}0_v@cRp z#&V8t;m5p2wG9$4X2-*$4(Q%jJ^8^?gEQ%z85DM{7jJd!lr8NZ+XzEXnIMIn+sWd@ z_CX3|TxmbdRKW91_GF0ijk*YtfkL4&PC#|+i*1ocNy#>6HK}eWWiNH-J&ws>j*Aym zGIEn2sA#cDX}hMzL>=Ip#zY|cKrgZw$#E<)bip;|&O5|?Kwa^Npkv;LI>&GU0XsEo z_h16+*9i(>Baf+Zm4L+3&;-fmMXe> z~ac-RL|lWWEsl_UljPY^zBEB23>; z5wh)^L;4Zbao9n*lefh97-$xhFeKoMQzfBsR&EG|k6fm-G*ax5X!@cuOMLR7CA$45 z_J7i$yvcFoFx>Nc4>>tAH+UdJZmF zOSV4{rMVly(Z=ca_6cFD1hN|kqV;*1Rh-#mA1vNU-V_L$u8G}V1fHnD8AB2bg<}2K z??t)hUN(CSwR2*#TZ4iyP~Ta$9m~o^I}WHY;BTn(#}pe9!p?1)C_D%I7)qsOUsD7# z$gW;aVHu2+T-Qs|C37^he*`Yp_hu4wYzN3wXH!%x8n>BXDBJJ#7W;Ek{tdECx_6W> z+C$1RsotrE(uJF71j@m{GUxm{bTw$~@!5r9jCY?6whUPypiVf4r;r<+G z5SSJqDcP$$2Quj32CMvjF*4Ja0LW6I` zj{O1$0K@kjDs_^Dl^ZV09E>kErI^v=-v!ntyxMTy&`=TJ!{y>N!7;;M#V|w`divc$%cJ;~7^O|eoF@g7x$GqAiGve{gstZ1$JG5SMPR}qTcfD; zXaSw!$Y>iA-?@fOtOh4G*OxAL{_&wYo$rN^^*o!cX(R%hGG^Lanoi(F7wC=&PCNRN z*z3WZ#8ec?PGV~7u~J9gDGZ!p^3KX_;P!!-Fu3`s)WbK3g)lGnRLS4%U$s(Sb>7at zKvd)kSL42Em1Xd?cAP4m!q?4Msb`}B>Z}VzPrF>}pNCLOGA$E0_RzDzy4=-U>MO0(m1cmDNr`{N0FZYj`XeD# zGWcCzS}XE$5YY92pXgTpG(Fe3bIeWLcnNpOC2YxEk)uTZEL)%&ZpY2d5F)ssHKP36 zcnOC?XZ;cQBjHNg&WBTWo_`g*!wMV`2N>Ru7D1O1fmZSqH`5X_S`!biBJ>vYX^cy1d+)~b+%NctHdsie@E1te*f#7NoLc( zUYAEo5w6*!camkj%d1X03ch?YvKa^Q>qz`Oia00fRsCQB+d-PYn?|%r>@4ONkuK39 zKiEZl-vt`N`V?n8EKjcjy1d%*5g5XmeAF%Ji-q(aFhuWS*^nCMdHh&Sq8cl;#rk~L zy+@A918XL=I^}bdw-$ys?eUGkk};8aXM&O>-VuKh8x4W|dz~otIO&24m*+UP=aU9mapGgG1}0CJOvpLyL?>UEduE3g?F z6XthWc4mKLf}CJ0Z1+kCXt2Mj8&n0I$2yfPD%jkw5?J2r-I~iwb49UMy(Pc4W&w=o z!~^Dw`aHp0Ug8lyk?}=fH;~PE1C^Y{89dV{&_Umum*A1JMNYe-r-4?30~R_ ztPKBaqaD!yX0x%P|IbSQ$4^H6S5)E~IRCT7*{8F^}I^WSK$&i@NJ|Kq1W{VR^(`Qkq~ zcH^(}+2Qf!%18fV!Z;G8qe+$_k^rX*Q z4Pr9C#7ce1GScXIkJkt?Oq|5vukUKycFE9!^hPJz1ai2-`xl9gHMWZ1p*%@N=@35s(S{RBu)j3n>Ow(hI69t&~N!`WbHujs?zVw)Q_=>=AF>MW?ZuocmC<0{?-72PkWcpHhy zJ@z2xm%eihB`jgGpyP9V>`gdyr-OrUwdHRefbYT2gsV-Lc&D!}qYic5LHk1xBrxgXw>Zhmsc)0Z1YSK zW+cCmXxO~Y%%X{(HKSgBjESH2y-ww?(OnYY0;NVMN>U{#ENGPmF3_@+V9cWJ9+_$; z)0AxsI0`|O`@2b(&FfBIHKXe&eA>T`SY8_wq&YWs*jW;|g)y&8R`WCy^x5 zTY)y)$Fv{x%Qkms|1KqNW{3i{*y*diyC|TN=5dQY{-RBsi5X|dqql|(o5v%MZe*qR z<~9Oxyf+t@`YQ64+F}rBbrzkjEKiRh|2>ZVr`>1?`Cl5H zRsQdnApeb@O!`|217Od?04NcrOjH3DMlo$85-|fB)^mWmNTX}EQoTExcOpYTIg3(v z^7<(w`Y}o#ssA9WM?Dd;_}9KVG@houUS$p8sb5 zlew4ngcnEV+d}?^x~7__9B=9FDU~98}@^RA;Llk zFJtBHQ{Sr(K$Z*O6GV7|VjzG4#40mKL@Z7DaxbSK14P)?MG=AnFhb;ZDL@cn5>i2= zH+6@W9lwjiMM-!@25zaA3AJ1=^Yss-5ifKYd7A8U7hL8rh~jHr{3>;;9|D?3l`*~6 zO1o(}cJwTqO7Pcpjq1^UIq;N*TRLTm+LyeUdX23Xg^p zbd5Ze_F)>kVZ82{vS>3}Zp)_fW`L9|p^yi`deYo(Y5;-YlxK;#6;RpzYa>tR4l;Q$PLBL#pqAn{~3OPrJ|k1V^$^3}%eXR+*O=5Cc5%E>{;)%(z1*~Sn|gV;>|yjK zZe5d!OW{-o7PGs4u)f#%R$N5mt?s`7_&?oISAC_ffJMLVi<1$Y;}lbBqo>pcgmW~4 z1QV9567Z9J#I1m?4!|OiyKTM6ol=CUG&aqK=-(4SWQYJF4^Kt49D*j0w1wQf1dl(h zaRH*6Q7#ZYOC2_pP}QU$K8x~EACbO@D6I5mVQjm_^uF9EF!i-RNx>f?OmUsF=bI(e6SRg@(A?9KUGcXLf zeaY>E^}74OiYq>o`S;idxvMFRwo%B@okZmAo>k5GumWXIbFfniv*71XdPmf(^?iDl5y{kiG$McyNL(7v8C0&5qd{%L`v2mTp!bz z&)+bczZ7POOdW@uWoQ8`zU_w+3hC_v;tySv6gEla9KyBv^~&tlOtc>j9oU1Pc9f%G zHt6z5T_*Ulx0)PWVilN0S%^j@wmS&LfZp7s>Qb1`86r8&qWZw8m$6cpF&|Tq#SZ|W zdO4_Y)U4x6bCeviz?VOTkJCX%EBtn}>^=7R1I|2D7*;Die_ zD>zG`A!H2{^V9O|9v77USid3>V6s4m(?`*}uaZ&fr~~{+aKwd!JC90C3_~NTMmgz6OLENO+6h~qNgcjY^sTpB4vab}g^XF!fFdD&4IoUu z*a%3S!dZ16Mf9z6rc2Ef%|xkYV&#;po>Et!+j9Wma_(g&vg zC$o>~AEE2k;coy0p!u^>&7a|qpVwaZm3j^8%=P}->z|Z*{S&BZe_Gq>E49^!9`ql2 zPzHY}07}2-Jb7D?>VJcIlF_sK04$xe+y&zgd~Bf?`b=w>{BrP zdFk8@1Qqs_)r2XfEb#y?`%t2Pi|cIxL1DGb9eP5s^i2m}!`db5da1S353+W76CbRe zj!Pv|Y+5|pM7)&6Pj>hBYKX5emcT}7;V>U|6M+^e=zx$u__QzXB5~{%=&%S6`7M^W z99fl}l`F%B7;SCY7W*`GCEx+`QBK8ughg1&30VnJZ%bHZCnoZc7d=fOu{`ClF$IG_ zj`&utx)zW`;L)kKwWOsm;@uJY)R{lW5i{p=)YW6#F-1~*;BsMISb1Wp z-p`ySSbh)z*}0%H)JyE=as1<5GJYE?0(ZJzJLxNR0-WnMxherhvr>lSy6d-h(_@QJTuq%pA|2(Lk|W zw;M@x4d6L5^?fgIH`karNhf-n5Lfry-Anad)O}dg5YRz{3Y)nmGwTu^%%dC)gQrRN zTxBqU5_90pedyxnz_oF^bx7p31@w`6!;Wz%4B!eA22_@Fn93eWU|Q z9Ol_Ii4^%QngR7a64iw)&UR9L7!}OjwaC{n%MOy?s+5LN;*MCJ45HYOx+JL|NK{J^ z0zF%mV{6N2w@YsJZEAD~QdS}t7~b;hd0IT^1h@5=x&4V;bZqkSz`t#P2lHo!&6)#>E5WzqS)1y@!qVQe}^c2D& z3(Ru3cij+fma!)2ei2Kb;MWw8ep zQfKD!m^=g&Ll-NwnkzZ+NufH83hmMhB5Zk)Z;|E*FFT*5PM`w7YDw>FuA&m z55ll02E=CE6UrOPE45w!iwv6Ry&Tm?7u+k=(Bgvj zsb}p(=QAM9NU3H-WMqCjq)sjar#!AB1*dN7-sv7EMWQ9Y6mtD(`f%rp`k~w;ELF9` z8EYDg-0>cO1OcUrmk!@sUe>{I<%$+!W2pDo^j>(%&0hE882!7nR2EN3<36^q|Q6l_v!z> z6dRrsWi)_juzG`@#Y)ZMg7j@nh72XgR#fURI-tr*CsksbA!30?R3#R8JradfxPu^W3rge|Ib6r$mKqIg`0hUHGWV@qNcNd?>N}aRav7VHML=70;Q9-1wzi$e>lHP`Jd!=9S zZB&H_HWF$`Dp;Yli#oN2yYW^R2RP+$4D-13V$Ns%OqSFYNkGc-f3;dX|IfzeR(pm2`fT{G-fG`F`w!njb@P59tw*sY18LQ3Z(^n1K(4QC zn(K>bR;`eQbQT>c`=HrGIl{})HH~;8RPXh5L|8lDB1*D%nO;Jo*0&zYte;v8QwCf` z^X^mTPOW?XmjQt;$^X2u8RY-kXs+`AyoB>Ve(KXd3@}mcc`>*|skW`l@+q5#M|gw{ zFYzb&6B$~p0iX=N?$U$^w6X?Fxu3=MkYIt)hGTa)g9mC zqa`@N68>+q(+KiEZZx-6^#9rEzg_Kz%Ku23E#(2fCQ5xx3|Hskvf!W8V4ZPwca*Ec zB(N#(CegGsg)5S3=Dpbm+eIjC zHD2cVA0Hnsj*q@S98D(Q&yT-c9bYc0vH~UNzugYbe`}+?y8oZ^{O7Iq!x01N3w1R^ zLBby|5B!{}gDf7YV;m-NmDKOnACS2C$~;Ae?iA!p)gWxWV2f1OC6c z)mYvCFYWw~pYimsxPs?C|L3#C@%NWU7Y{H0Z*4XM{=d`SSe^f8JpbNmKisj;nyq`& z2Wi+z`U!K_Uw5r@E7*ZFx%i23g9l@r-2}D+*q1V22mHN^JCZL>eLHL&q4irGzB~cZ2~3QiXhv$B~r)E>knOqEUD_5 z00;{+Q^92jDe};#$V<8mJ*x{61SuVuYaFJhx6u|NK{|Bsh){>RU7`d4@R zbDaOl*~j&(#aX&wXQRp4-ElIX&z6h&t9<@j4SxO`TbrHM>ij?3`4?8dA_*|(KX(_E zUiUX?gfN5R!O%KTi=u+mf`0%$PGNe;7K2_C#kGl;Z-5dS`$MmtDF z3cWwmh@HG=&>&E1Vek(LrdXE{%Tk#Ku{c>GbokhpRIG9}LmU&9LOIBA%3zN3P%8ZN z4NkQQmGc_EjX2~FYurQMo@$;OLdt@`($%mG8vggMwYWSI6yuOWZc3@jJQz-Z_yE;h z->5#F6dLm#tg;>auvc9`{|}BY4LP_c%U6T`Z#7#y{=3oYbXNMG=cE604^$!jj_$j9 z)hzog#{rx_3)yD3e1F|H>+3&J;cdvGwLT|6J~NfG0pHIe1I($(V3~W<2pdRTJ~UMS zC`<{BG>F31pk_#NFQ6sUpaTR9Gi@(+O9L4E@%Prf5C+5;f)EDnRrhfJ@5oJHfPX3C zGQub+12vY=B-xp^ta7D0n$pti!zsnp@ZM0wjr2po95UoMM~vCW8!>)7Z3xwU)f>{# z5c)h6MVsd885t6Y_x6_JbBX?-cs&IXBx#~5y3(1?g`LgVd&}xx`>5pX?XCZo+FAJ8 zQt-PVv3(yv%P3Y;ILuB&a0;2xhl~{Yr_h1rHsVX^A+Ai3aCCv08Nt7oz&i|x(=9!h zebqDw=6CpN*m0DzDjQC8|;xA9+bJD@N4eP>&Uzs$3ohA!{!>aFnr^X zLf?dy?8XFaJ@c}a2p`*kdTrVyF8{lrk8T{BVKqk~(^pg46I}Cf)Cm6d1u9Nr0o(F2 z0W6)aFeT7pClcOVLVGFt`Fp}S+6|X8t)Y@=gWrVq`19PTE(4J3nKpef+i&k*?T>=g}nMDL7fHJWHkN%tcIg zCCtt{^Jjoq2!yQ)rT3aYY;@T!HHRqrg@7etM=7qW0M)tESHp`WIGQ^{_4deRR5Ww$ zO#@D@oks+@E%?sydQ4b#yqfS%XN%@dG`*;p_ne!mw?$t+yxygkJNFs%mhUtsQ;7wU zTzaJ!ad70!WAEIU=FCG6A^%-U1%{I-pb$HK_0A)IDU2fQ$Wwa6E!=fqeU8>6>G?o@ z{LXu9_t1%<;QnFX8LIccxb8QjmeANx4aSk(wmU<07M(g?aHp@{dlc28uMgGWW9sD4 zS6jLxj`PGHr`?J}_3lq>hE*<3f26t*1GY(pfu+JWYPTk=|>=Fy`TN)Rt30F?U~*aFk6XD-AL_QwK{ayS!vu zL%=^pExD?YPMec++)E?+IOQDKFv79>!7ag@4!dAjr>E*8&)szhLJkYYV zj&rIC%gxwEv^d~@?4#x_2gS%F02OoRtWD-kcnf{$e7>+aQ|^ zyDJ5=XU0{i%$)>lzn{_b)2JjVI8Um^$UV=EQo0T)j*iVK%#wrV<#8oj zg>C*IiY+%Ta_K3zOX4 z1<4Lr>I#+vd64BmF3yXTZC#t};7Tjq=Vo_fq4mwQZ+U0EL0;G{x_heWvp$A07QHuY z?*p9$<}87Z3dISgjODwdGpOM|@=f-VY29yUBD51`SZ7OWDt_W?I?UD-dm;^x^^V;G zkk(mCY1rY_G|C^g^f8tSN%&Z+&c|rpaBUTQP#ZT)W_ZCfH}qAoUv0Xlshr53c{oH_ zz|e1Gz)L0lWNeUY?aq=u+z6783(Fj&t&UF}}`x#$A73B5o0KM?%UfH%n8rUv-tb>cU^w z-JEZ-`^u6%w@JD*Qy4VBCW!e{wPMV86uchm-gVL(v_avt(HhJLM7MBi$ z)qk)dHM)F~KAgIdPZlTw$uM79%f1--30nZ4$v)l+RJEH3SYmGe8*ciA!Sw zb@E0U3}t=l(nNjWb*S@GDI*nTGYzso>kcE&Ngnm6lTJ%R$~JGB*9)eZC2>uCDp_e% z3ufu9BEA4{$!^7V9vtG<04dS|B&!245+<})H|d^M>P!|a%>fJY$w|^QW4|Kqb(x!r z(7Oq7XCf=&tHVq=H;ujx(o+}sS%?eRcE*f)x5QkF3=)o)<>o<7mKkQ5@P%JuZX^EX z$`UK?b4zS0;jhc0A=PzxD$;E#?05#-4QOv$ZV$D2c?wsT-_WYvB$DNO3gmQ|$pgk` zED`fNIstI1^R>g00GN3&X_hjcG>g*Sl3ATYW@(Ys>)}8pVJ_xk(bn7b<4U_e_wz$0 zwn_&jJTguhGg8VryPInY{oWHnd2kwuIS^5a<*9-wVQsoB$lKyI0f3?eOWfD>zWzL0dfB=s*L_;I~5?dz!o9P!oi9Zvd8)h zt!Az~GTAR(I&Bkh6{B=1W3&k2r73sBeyXr!6OCAjqGB3OpN^bSX!ekLAexl?Kh#H{LST`;bb&4Do-NM zh4`)NGPHD}??pmXi}-4^-0tKlx-@q1=jsoEHoY-rLp8UM_p)P?5E&Vw5V#Q+6>bD+ zz@!eE%TLiEY#lErITmZvWXNn@!Ehir zfLt=o9N!cvv!);B>H|TRD*1~qkM3LsZ7@7GefN7|-u>S7bja^bCE>G89{XMdZnTL? zt=LPG_EIK&^Q7C|JYiCZ0;)@L8nY#R{?|#j`>zwiPn<|6rHsa;je67R%Wil2lHB2! z?iH!_BJ@r&;}q@OY#d>cB1h=L?5w3Do%x0=-XtyMJ+qvyDbdt$VFmT)AWwEkC9i@x zLPXX=fz;cq#_sLejvyfa(9oJl}*SWBk%#4hl)*_Q}4*!ymOax?W4 zQyw{mI@&I%^suDo%mc$+9!rZA<6Kb%iWU?S4Ae zUwzpD3TF0iUAU!=$|4QH--@#+G(8o8++OOUWpV9=PJ>woQ+b$nfVvxk!?;I9=f_rD zV@P-fnd(%IYhpbqpF06TW`ct=_fpd^qNVDscDpO=>fbM1R}yg> z?|mU#Sz-#?;D@9^^5_0-U@99)AxK^I$o81VmhQE5WE$OOlFA!LZdhe@|Gx>ric=Q< zURaN6B2s4)YLQTlwno(cpQ;;|g*}#=qx_ci_fCop4;3{?pKHW8t2aMVUqeO8WT(}MuZ@4`>V8T_1wFp&SSRXJZv_|1{nelj`M!EJMYUX zA|c<`Zi*b?-HpK*krBV>cH|E1SY0Um7MD z%mIs;BQAHB$H(37_*j)!?(}cfp0N037)vjM&CW?D9<)WN6tN1}%At$}9r!*c1D(=8 zraGp){;f0f?hEZRsSX+ zMi4+UdL`^-j(`7R%l!FdwPjY~H2WJT4!YEK4JGR&u>z)`+-HJ|<>tBzt|8i#{_a~v z`vuxf^^sZjsqKF}xhZG&zT5w~Uu;yjH2XO1ce~TRF7`dK+5kv#@MWWN=VK^jALe7Y zx6EU>48h21vkhNQAmYVg&vb%@)Z2tEN`5F^N?Y(=x)dbXiB&=@R6v^Nlz4*+tOzuZJb-?uPs@i-}Bb%#P>=yrmOSkn3M` z8lQVNbve-AFikq@FzMMlT4v_r?GYQ;T6X5t<609b^}o4kApObuOZZ%T;>y5Vm&w?* z3L1~9NeBjpOSt3~m3Q-2@5N2X5;neP)p`_}$m)KH?^*{W#)O7g$7H;w#{n>&ybppO6du<`$lgI_WYOvzQM zmL;GdSiT(0yxaX{i-ita91-7M9<_baD-W-(1qlu z`c^q2OWWd7^Wv=|DfdT7C~RRvP0F&KH9Yvgs9oBg><~=%2f_jW+|#1KK)~LKB@XpF zkwroN{A$Zmcc28P9rs8ajY0R#XFa0$ey=+|x~zk|epC2=m9VhI_>~43yeWj-&vqTG`J>1P9aLf(tc`+Kb7FCHEBNZfUNw zY9SAc9RgHGM%Cb7@Buuip&ZrFX@WqEupGPla%zX*?uQbY>@H0P&3A499Wkrr*s(J1*x;jB{lzlA&?CGfwq zYr=oK&j0c7@c;2{p}*g4ZolYuw_gB1xAVf4|9O1Gm?l-wW;J*ciZCs_Qdd}9cY#g# z^s?Li^pa%NeJKsBUf}(VUlRJ?AZ|=2B`TzFrP7VJL2LH-wSHuAf4OF;7%hCiw&8WqA=#mtW?c;8@ zeN1FRvSq)f1-LB8-KvGKv!$t3n)D;dFca9Omr@tP-$n_ulgPH5qO)HhW<6(?P9#MG z&K+H-@1?XA)CiF-5AviXCpW+<%fkQd%YR!ttz85D+go-1??(XtAMYFbhh1Gv!><1e zqRSc(&oR})f_jU}38j1gCtw`}9B=g&#NkK0;3Qwed%y&mx!75^_a7=s65W$56F2Tp z@w)ld+MhsxM9g;v2#GcpxaYl!dqiU~Ul0mO6DAJb#(?nA*WAJ-e5r=jNsjcjLMYG? z^9WaC_Pn%@q_vNaESm+L{%0R`d&kteOS7i2IP@@sFxjS#bPvgtjsVpj!(BNxD-4KT zoi>2@DFlwTL3_E^<+sQ;mf`<%fZJJ|WH%55mC%1%?Mp0l?L}Oxkc~)1Y-bZLAiPz7@qtG*xKYV5J)Z_+G(Fe?IgoU-kl_Q^%1igrKPK`1cq#vG1wR(Tlw!&1j!; zXR^tGEo_6vL29LX0$MIldv_^EYIBBz5d5L|OL+d<*fq_LK|cRM_g(9yHPVgkFR{~H zUkGxBZeQD1-NmH~K3s3WCU)|o@>neF>7YB zpHaX6CGY>u6~HC$|K8@7Y5%cZ%YPry`~UGSU;jV4l4%`#B&o*ceYY1J(F9%Mb^GgB zykNvK_9Qw2Qh&S5hLBwzd9+NaM4Jn2ag|o z^ZIN!!Bcb&AFjPo5>LG~^zm|S{|B{d4~1cu+=?do`vjwGo`^P-Bp9MFT-*O)bCMff=3HIhGPCPUm;#r1$FHXD!f5b!h8+p({6TYRvbQUhW1j8iE z=0g-gts#omGVcO=2}Z*S_Pw7re!!o_yy+xfVLw1;D(6HmJQ4m<8--dCNC1{xGb!nxJv^(^BI-kKLu+O$BJ?zN4_TkU{AFlWLOnp2I zQG#KRH1me`Dbr)>Xh-(UvA~1MEjTYom!KFP$8CvEkDAWJ$8TNmz+Wz-J@c-aANboRIPFi5}4O_ACFbvM|bmr{A zC|uiD5VU^JyyvzKzglPNz;V{ATVp$i{0DYvMLKUK_;2m*nEpTQ?b`n1Ug7_X*PjMi zhLapt|6dXhKjG}@aDuW8ObZQIm*@;#=pzBWUS!geI?>Wkk~nF4gEQ(-@HUBuI8Ec^ z1P!w|S^OHLnM`Pkcgw^^Qr|s7OTvHqm*AI9|L(<6hK3paaTdkPiJsr`X3PS1P!eRDMCelA9PxG6Z1*4H#Yy~bDcA{r(1(9e$FTFd^L z<1~9S8abE5S@x8)74K>gWjGn3AvSJVFOEjRn6W;(su5Q~1{7xc<;n^u|lX^Gn8C$D}c%JTZbIEoYOix%tyw7H1m z5Ti(IF{Id4S}Fa&N9oDsc`I%$o?!oIA=)aRwH~~$UNjFweS!3HNlT<3@Yfrt{3w2!tO&zu3TUonTbNRf*w~|TAGoGQ8%3Xf+0~7|)_(!-mW9*^G_o6uS7C7_bOPt7Sx|pX6 z>y{BfNT!ax&hT{Bvw}vxE;P)7OAH7g&Cqlv+G+*R!7;S>>dhm9HTgZBC2>Z@O;`9L z$%Z*5>X`3=?UHfH6?xUeg}spCcD)owzN6g)rL+lUY~&(>?@<{1Ef&DX`V_@iA@;|5 z2}Vh{pqM#TO9;p_^!XA+euxvT2E8Qo6x5P9^d%xd>z4u+r5!9oo?`lHs6(q2r)WW| z*?Qp;ILp{UG@EDV2^xOV1|B9DN52O?j-^t#=^-2eU7~jtgrP^U?gjSz03KYBTgDNA zfRt@NT$hW5mrX#PNgpVF-}!J-r`psLOz0Ku((>X6k7F1ih@)31LSubfQXFOE&Ybx( z{iudGxa613D8>=G2*q=!0n#W$<5YkT`N`2F(6s#7B!#Styj;AQ%DWY6gl?yl6xNp- zj;t?4qSMDZQj?0vEK3P&d3iIfaUtm~H_XXpfLhj46HzefahfG_pmQ3O66iQ+v!*7I zZhBv&>+M}1b{K_02%fy)up?8+w62W0uGjOsPh0=w4RWmFfhc{RUBvUqr&#|g$R^$e zN`oPPzP%tC#mSUhQg0q*LFirO_m8{|qj?z8);`Wq5T=x7g(6Cz?(>le42^M?diXOQ z&WR2n8e(r0C+a+8*b5>B_MWoNC1QnGA>8l`3gJ@h(XN)uHK_$ple_vCa zNgYJ^O8j!dynVqb&d#(45&9Fqmh5kcqL=6r8+}@~skF`*(-%&fKqEurLw@7eJ62X- zqvGkUxj`R{U#0iUee+hma+EfN#luJbbb{(r{l?jz8)FEi*9j41H4-ApV#q)iZYh<6 z^evA3AR2ecoKZBymK)CMyqPD3)!tm<#PYd&5#sY$rufWCgxyqkC&k$-!gmqwD{r9J zA>0wLR`wbU5!0J_HbDt)uulbj_GB8gLFn3!w?=u#HSepp#@OREZ76kxa+i^ReE#aB z;b+s4c=G)@jhT7Kch^HGMKY{wKWF7R0v&nV+&>r|sB zIq%0{oe0>Nu+0tevNX;P+oI!i63;__KyCt^m4!*yWf zVzz1p0LE_GWl{)RSs!E&njpdV&m_5kS~$j;VA}K7LTArXij{a5sSSz?Dhxx6lF|;? zEwe}m;)sIU0A$}0qD&dZH};D3+-VJ6%n`j7Hw|^xeD8fUil=q7NI=4NXaW~m(J5>9{!x+$Twy86y4-qlu7_$e5;i~t~dX- zEDH+le}tCdMiv2O@xQhW|L@(_R;~Yk0Q(<@PS>Hx&9y|bfsY1Ynt6}7QMt)wDsZ8p zcp8fNU*QbjzIOx*E~ycP;SBV_1WeX5O+KT)ba{oGrN;s_Hic1GEH@^=mlaR@3l#j3W$;Y&3pC^a4*( zf5!UE;HBrCg0Aoh4pV$J!3h>M=${GB>3vq83Nmy=L)M}&=&+_)63^n4apw}FK1=Wu z=_lwNo>=&Jb&OLK`SJ9O@Ego(!F%pC*1hKkITvCDPzksmnp!Bf|Ba_pmip-q;eUI_ z^#9!2sr^6iAO2-AB0vk61TjdNSsrq3dBIDgjV1O=`2Kx*Jz5h z5|~V6eoli~A87lO3dnfTwK-j|e}PpIDJoqT6{xPcz*JoS@77$nqW>2NBv-}*W%0lF z%=mActvdeyWAp#goVX}a;DNl_%i;*Egs6ry2BSPL4SejylCe{nCl=|bf*%%K#S$+p zS$xjE=pytb{H-ntET@SH~b4nOcZ(K zdXz#qkxLeWxC@{e=#ya>?32IGDaElyZ!2dAnC%()n;;{(NiX(w5<*cR=!8lVWWf-D zYFFXMNngj*vc*bvlpqzd7gezeRmwQfiU7@3@QUI8GtYuB-5BExs45Vh|AB&RW!LXY z@V~QT$p5zXYWd&2)Bj8rMGu@g-%(ig;|QBNOQ`HpV8N$Tq9yBiTi!EO!$B zVRNs&UB`d^2Ht;D_%ADfmkRuV7arBLdh;1=MokN!dgl}3B?BF%Gdv7N0ri;(vJ~n7 zm@vyF2=`E#^q@1n3GI$ZB~^6ptW5jfCQb((g20>KV6w~C-A?s zwY6o&f8MV7{|A8om7IVjou1GGijOw`Q@1t!tvJgT=p&_C_K-HY{8RKn<$x9eDEA(F z?yXV7fi)NO3#&QsYwQRQi4Q-bxgW$oHoYIICh$oLszCV7%|798@Dcm*Pjd!5>dteo z!Kfl_sPzw&y0Nr16+M9TR7DTdf2^Q?(Vqu0PBKLy>jjRC{YiuUkRNklP(^<8Js>}# zIAi)GR+|w}PiSwsK8b%;wM_gg*EYqG{5e+$5jOG(72<2&RVAO#_IYQa8qBmIum5Sh>Z|6KJlC`=W7~?KB3DW+A@4La8@J$tSQ%Oqr*J|9*6NAAWO;-6r8e`B}IyaUt6atRO1yqB5M zzSPOmVR&g}QtI$dcftQj2XcGy-&%W{M*hdv)^?r$;{o`;lK46HpgEQpNJdPh0&dDp zAITiu7Yhb+p*IPy=+Agw2k{A8-wU;xvlED}qQ_Rr3srYCtx$19+czi#0RbZZ-NQ{e ze{WXwX1p%nZ5`$3CiBZ5OP0*>^3Hj2^fI=&=T(@yDFIl0@*@c7c#apcU29)LhZR_&Cc6)QHRpbBr$Nx&yIyIP`5(Lli5U`m2 z7suhdkyLMau^u;7l${#f?~pAD>K7*)C$OC;wQ!JmA(JS%15o8PNemWA2&9K%5f$@z z4{BXUSQfiXZbOvfX#cvUI9oWEaoj!iL`*-{Hdlgw)%R zNeUK=XayZm8U8o&|3FH>+Wz}n(f<@O4I7qHO{{9(F~dVl^3ClSMi&y|HoMaCwjpM7 zjeek$^C*aZr4*uNNjicRa<q95fM`n=i7#zO^`xZNpA5KYI6tdwVpaSbiW#c)OpxZsf%mpeLa@ zV?dV<#zYAwp&f@9G)TyU*j%Bqo~Abo=P5+PATWVK9`GzAA?S#^1IoCa(vZDVKX_!& zKOpYGCy1Fg!dD(j)A^LdE=fIf5zncriZ+1AdL$5<7ta&&nngaukDI5US4wfZ@4ZX0 zH=T!BFbjDrqIz1ya}t)U>0Qh-I$jFq0FeBKD5)+3e~v;v&?pYW_=*gj%tM@Z*j!sr zy)Liws{0;PWq3Nv7G8rW+oG7BS-Q^Zx3&7D)>fRNu#Q?g$LSjw#RI|Ep5ElZ_eqM`JT}Eaor{99j=MjAhX#ZGgyDhy6ch|!rbW0 zqyh6u4C5)5BHBTR^ig=~oj|a<&j^A(cewtK)Cq(+D+&K;_mV;q-xV(2#Y2fUfP%5(KHy6oe)#f zYYfp8C&)u#8hgWd9%Z0Cy}+^t2T1+Usz?IOWB338xY5%6f9;;M!C5{J19*gPS7B4LM)*JVmo?*eC6aGy8H z(X_lq7(^H)>rIdNfP0(ZZURAt;C)Gh5U_TW)_tm!P0{CII-k<9*_8Oq{$N%Bf8!+P zaC?!&R{*+xj8n)QHcMiF0%~p`MfL1xef1_uJf+6(P(M|c3|0{Y8`9gu+nfXm9>t#v z8Zj6l%_w37fPfNmCbWQecZNnN2|C`fHgyy&@1JpQtwM8GlqgfCfXUu|_8x+mLF!+#P zxgaIyB*xTGZMsM^JcXG=IJ=6IPy5~lUc`}4F(W}i2DT#^?HC&6v*2-2>8=sQ%F*JC z^nR1cv$)XI^2R!s2Kt1^8i^W*S0s;K6er#+L_08@5cY5y>0q`w0CR$|GoQv{geys^swa`&-YVVMmR@hTk0aSqg=;4`N{R366}W|<(Jk{QcH;`oEk-NOQvuc>f1moF+ra{5 z^uHPZVP|V=r-uKBd;cx!PWKaCs^AxOogvn1$bMw-&oTXNpn%f%-xB|Mv$p?yK=`NL z%o}>}b2knsNa9)r8L;Zks#1ie8dKa4{HyU_ZiEHO;y-S;%=iy`HU0lE^gj#OY$4%U z;6>v*kIH5g=z#%ba-MtUy9+_KU@Mkz!IOw&l2mL5#@Q%0ZW+_ zljXa>L}l=Q8yr9h{I~XY4f>zNgskEJA^87dMqE!WuNCKc-|J`k`*{E9dEe>#zrEcy z^?$Yf|3lLMkhIlFi^mGvZm-0jUn6INT!qGiq2X89n_N&k5Aox!LZ5Y-h@zP5_;E6-{TFY5l{OD9YN+{c;UD5Z-vJINd;g92AFcLo&Hq0T z{IjHxHsJ3$_~o4FH^l#@=5Qm`Yz8b<^jM0_Ii=9ekm{?fs)!m}Ed&4BDcpnnzqM)F z|LoQ9|3L6B3;S!x`RDTg91R$%o#k;sG5oi;c8vI6o7`RShxpjYq=RQIDDpe!~;3m$7y=M2Wo^Uk*O3iHWb-XPF}tYGk_PRK?i^W_tIIefIlG{XR`d zA`XD3`O$n+@=QPc0KBiBlwG|b5fDEoTa*fY6P8@Q_uP4e?8Cb#_-l@HcWefU5x&Gp z(oIADu6+zYFn(1G{Aw!seaKn(-=WS*5>t%d{uzpQu4FEiXTx08_d$*QT9+j;*b z(~gRyK$-o|R@;dGwzFHue|UiRU$gh&NsX_o8wM4iIqBjs^R1)4&eHotYQ78 z@NdL_G<>(J^8sb~-wpj=yS3AQ5VIf) z@h!$AbYV0*c-=i7D}DbR82|R-e{b*X?3wYu>->+8nEx*Ze|si4Ys^5RhX0lL_Gqng zhaY#WK_1~xZRiYKY4qiEMzHo+DE8dlzL%F#Hq( zqq%m4f;@K=q;!&h^K48U(}K|l#JP|oL)bP(<9NU5d3|3KLs2E_cyUlksc-$%p1Y(N z_A>%j*_@>9t<#1RG0Y8tfqkT=WgI7;Z(SSX-)*7mEfMRN3GS{mS8HUkk*r3ERg`vY zV4rtCfb?55RZN7h#IGe&)Y$UfMEL6WRa4&3oKSDT7O6pVOUd%4UN44TQSu|&I+h2oS-8>v5|xWn4exo0#W=S@2T6mSwJG6HGX zYmO~bUoRL>4#=UJcS&{UKpIP6%62ZlF@EaCLLN0-A= zH$_4)s{miiQ~z=LA1nR`M&q{aKU(dUA^+KI@73|2 z9yk8Cii%z09*TZ?48xLUP4>~+2lqj9J`Dj6iAoZ$l6zV46<|rPZ~6`}?^NE&nN^BB z6f5k=%jFz^P-(+Mpc%~2{~suse|2VYDDP;;w#}A@NU~B`@_B&{mwRBKMadJBMIcOU?>CXw**#k{Zr zF_bE*aD|e{RetS4A>(l!0r(#1Kj~83HvPBN+SxYgzwH|S@00%fLTRQd^xqc;c}2z0 zlC4l4Nu;D9q+OSqu`nYgjffSd)QSfoDQWhSgd~yLkxt_Xa!ob`t_s1K&)q+S0rVRxho&(39Qc5A<2Lw=rD`66+6 zzwG~T?HzjOUWb}WtCM_zBb)?7qt9m*#Ov^^P!7=~DgCtL6usShGxdhmvIIR0<6y>K@&OuL8Jw-u8q~aaRUD6#vh%Ncq1SPm?6X^bw zWx`&j|FSle9G(N!+HmY}v+7o^3lA8^pHr*QhVDXhubu+X3i&=AlRCm=c6Qj#FSKH0|9a1NOz z!6m4QMnU8&U8N^+A{~rco4NzZIo)}QG3|ldro!>`*L2!Hl>Q?ZP0qD_%k*EnwQ1yk z+S{t*zdTO*&%rN}OQN~oPKn>H!2k0||AHgm=6ma;h~%rN$ANG>QFNe1hW0 zAoY+p3K19+BN#Em$ux*?>IEa>Swgx4WbF}v@P_deOpk+z^|QgB1KOd1!J&jK&nS`R zf+KVhR+)`-7EG7#T_M=(Y!akwu379|VBRGkL7FEku{k2ctBqga}Be`FvQ5{_P=pNrV2ip_L6tx zn%c|yFsMlfI_};&w*to~QAs-9FZZA}zDfh}ug-}V%$p4TO6;Viv@h>t6{5g+4{FNb zyMF&~^z>Je|Fl~zQ~tA8zyFU}{HcMy%cWEhC`pf4N>e#MtK zlop?VgAI@a709H4c1}(C_B6d)5+H$00cK;I!~~@z0D~no1!+KtkE6xeBF*sBRjKbF z9E0?XZnBM}R9Z6f(itJ9OYafAPF17Cq?kp0`4mLHNql`+gYRp9HeH-SVf2<<{x$F$ zLdT_yKS8OziWL^dY__R+BQLSNWEP^KP0W)nq9OTAgBPiVR|%R~+63ttn%X)WW0tkU zw-jYSJNCkZOW`3e!dKj{S#~-u_02Y&9Ex1DnJc!{@1@9vI}ZKV_K+Nv9ifeh zR`sMX8oG?59H4ebII`6KPnyo%tg{9Mk#$)GIVYgO&e0eFqN z=E>3T$d_L1Yk_r3Lgrl4|4ET}$}GP+uJQO{#$FOw*USn<$p~hL}F9N08I<_QpI~u?P+LLIiA#s+XgB} ztqmt`U0=qy$(XqaOX`tuu6Bi=cZ#!l5`n62j=if1j)+=MrjW0KF!Z9>3*!jpHly1I zVKA}@krhR;H$~)#h(-{jl+xA3+D0e|(qFAYK`4V=PA8Uz`5qMDX(3g#BJ8}_fw{$b zQCyQ>nT{C?SvH}O&v_}_uQvWKQ$IWA^j~(KYz`#IwX5m~1z}NFe3#AeO}U^@+UAZ4 zG0WcL^<2T;;A0=!1#9f0HA;`5Bm^*vLcB`!U$IfPz{H^9<{??7eQA0(9!gtar7b{d ziW9DQ4^nep`Zz&qQ~_A4+@2076P#%`7rQIR$Qn>9FtUv_`m|#M%Qi^rhn=nSB&va7 z*?<5<4TDy7tTM$J$jr^~(z;Ktg$*}GaXd@Bp6R{n!V+Nomp8EqyAtzBP>eA z>SfiIV`yOG0^f^Aj4Ql?NEPx<60=Y+MolmpPOwkv&2q*>1i-aU)+()BY63t#jZxx< zz>>zJlJS0lM9()LRIHk_F!GXJgYz3+KEBL-*IlMl<;)uy}` z{JtIX3s;uQ#w3gjCsmDjyxEjiVYduERodpXQAW&ixdT1c0xXAo|2+O}j_26PhdcO? zG0tA&&)FcNt=FrdD03+;@;Y~JESOcv4)9zkRK(+CJC&?Ta{H5cI0`~YCMMM;i}edO zG>(iBsMgcPweki7IYW2jOP-j!NwpZ>_1$OfmV(Y!C=h4*8z&TFNX(NHG6VoUjQ0Bs7d}I^qm^RmouF zYE6l~-;tL_OQ<#Bnja*1nCBskLsk{`gZB`QI`W1I(-SnzEG4ir=YW2Rq@U3I7qCCD z6*QX-%p8#YRgg`{hrsuO%$uh`@Wmbr5k_%1*(yc@u>u-@ONsB##~qAlt9+9Qm?I)} zgEK@PkGaM1{}Y--YMj~0iP69Nycloh}YX9;*5>f)>KLUL3U|HmuF{;7cfTU)zE{IA{3 zc8&iZ2LGR6l+6={=08%k=3dPFZljt%M0LWCICft|ib`=6CEzAuCSclY)T|Nq_HI{()TZjmRg}u!8lKAS*$C)bmo>}& zje6M^yPx8)l8&M%iMW}?+m*zd4{o|m>N$b^H@XkIT;mTEWH{0Ms6@VE&5KG)PpoDdgl>@0cj~nd`0j<>2w9dk1G(aDufNVXmIg{t5-zNt_HM zB-ki9&U*|ZXP_^vqe29hZCCl+HMdgY-l`n0T46o|d`a9+kBPW0h@&II2U+at+)cWp z3@0Tm2r61`5Vc8_L6+;kV%JP2me(%q>LgAC(xvXjzRiz0N{2YOG~QaZToF6o=#DuKe{PNQDiL}-PWc zc6+ae{|D0l@?>tO)Wg)O^eusPGwogl^{p!(UolRgey|oWiI&_QMR=NS%f z|NY->8S$SsTebf0A>hBNGOb*FW;Y7~sv-tvmD={LrQpO{fq3A#D+|$x6G!9-M#|Dz zHJ(XPloBdMJuH!gy0MS~QV)cBD)av$xBKnee{CD^zg@@we{}qRiK!UV&y*7k7Iv9j zF2#x$@CP?s8i0EMwFPB1RS@(Z!*oyr7R4ljK1tRNEXfRwi8W~!b6hhfs&8ibWWyc9 zGRz@v|C-=MFqYMctS%U%l1%Ao!10WpC{GH$l+I_cG2o^~O$HQ;WX|K{wN8r6vZ~55 z^3AR;&d8g%B^nxjsI9-gGx|?TPrd8|P(uH0?U?ePz0Df`KY;v)9W#~cQUgGb9C-yA zO-dntLo!XxgkC^}U6)`Zaa(J2RMq}-o&^-_sb-ZZ`ED2iq6Ge1dz(i5hrM=f|9>z4 zG@@ZNkBEBJQ!hY+xl_)gPvF}vhZvATr&(dqa+7Lce8lk2nBf}-eW?upd)s@4|L0b_ zhW~rz|5mjBHduwGXP7*n5K+(K*C5S!Vi!`Cm=Qr|O1c+TyXl>x$d9LI1kL0h4YH#w zRE#rD4g9wYy#mYAG#y`a*0vih@@6D{t#w4s=PnaY*_Io}Os~g{S+p>}OxZ5kuE_R! z5%q~xeB}$G*IaW|+7Qo};C{)bB$Og;CuPV8d>=>pSD}HE$57OG`cNO%C?&b}C+CRS zu<<;5Gdf#DL%FMIKq7=J)7N#;&NGat1#JdCU#DQF@kJ2gV+{A-utSJLpY>!E6$F4* zf?sf83P4U!1ZZqJ23U10phoNZK{^W&z3Qcv6B9N&Hh|q1ez&l>9V_^o@&;~fs~P{t z^XyQI2tC9UBcwE*%7FjoN6X#V3~>p$a`P;PyHjEkA|;K|ZbWX!tY&ReA@)G?u#g=q za)W$&nH(vj{+se^qgEiK7`f$|UE?^46AF!5Nq!P$dMXIE#BJfI<+C-XqRX3t7&8XZ z*kvx~Gnmi}*l2{OV|yXY|2%$yvv(=O`I-qHN;7U(0QV!!&~#>2u^0}s4Yed$luaC@ z$iDml^vqaLNYBnzA~2m{^=Wo-T~eXnG~-=o$gb=g7fDG3NGzRIk6T zWo2c9H*_O#{s=Zy&VJoQvwH9`GFl`36wHVrxe|=FVZ5>bTlMu>*Fx;%*1NAz5Gmo= z07ufzZBW@($D}4)(R7%566=J$yrhM-29d2w#VO9Oc!L8%$Lo`&`mqpcW{ zZU}s>qibt+RB9T2&ISE6qJ(b4O}3ASRBtRb1bd`=#o@8 zn;_GPMe4v>KFkl^u!$FdX*(WTp}@qQv?oZjpb`t7W3k5v7@*fyFYHQeg1w9Zh1K-G zU^0EqMCb)Cb4J1(kFyPi7eKz}nCq|X-U0?AJ`L6B%z%)U|C8?g?NR;fO?ma)?@%J3em}STU zCaZ)JuaL*K8oQ9=OuH8sD<)MH*2=~TI5%}&-7%Fw2TW)C&L|qWw`vr>;%IbQwh$w0 zXa+VKS(WgGE=*Hv3ho{M=dmk@`*nI7dVn(h|CWLOxA!*pYW#oy_&+Bpi_pGHWf-Jy zshKC^_2IuA(WQ)C-CclyqrAOc(*4lnR{P2No-X z|6EOT145w8{>SA1c6au6YxuuM`yXBHDYSFv2i|ip7nz?+?3wiftM{dThrc=cKR>`f z5;U9LLiVRJ_;0schW*b@t5v`M4@CddkYi2L!Q&+n$(wGWMRqq!8^GB7(R6bm^Hrrb zJo@LO*k3elHcG~)KFuv*of>-y*UBvebkJcGh#XVVO03A5DcaLXq(_?}A~dVONb9nx zbW_>nqFIuKT+b{DgPg}yefR7zn&JQ$YV&qeERK341 zG@%E*2YCv~rfN6d)RT#@{2ve%@GVLpl+-i(%}}R-XiPqR4)k+Jfg$`kOAu(Z6$NYs zcOEqn2{EQ3&}WP)`#;M7stE>(0z|}o0!g3VlPj&gaRizc-PkfIe@ZclAipp*rBMH? V|JDEMfA{ Date: Tue, 14 Apr 2026 14:32:01 -0300 Subject: [PATCH 12/13] lint --- app/lib/services/restApi.ts | 13 ++++------ .../voip/MediaSessionInstance.test.ts | 16 +------------ app/lib/services/voip/MediaSessionInstance.ts | 8 +++---- app/lib/services/voip/MediaSessionStore.ts | 2 +- app/lib/services/voip/mockCall.ts | 24 +++---------------- app/lib/services/voip/useCallStore.test.ts | 10 ++++---- 6 files changed, 20 insertions(+), 53 deletions(-) diff --git a/app/lib/services/restApi.ts b/app/lib/services/restApi.ts index 1469f10dbf1..972ce169ac7 100644 --- a/app/lib/services/restApi.ts +++ b/app/lib/services/restApi.ts @@ -1,4 +1,5 @@ import { getUniqueId } from 'react-native-device-info'; +import type { ServerMediaSignal } from '@rocket.chat/media-signaling'; import { type IAvatarSuggestion, @@ -14,7 +15,6 @@ import { type RoomType, type SubscriptionType } from '../../definitions'; -import type { ServerMediaSignal } from '@rocket.chat/media-signaling'; import { type TParams } from '../../definitions/ILivechatEditView'; import { type ILivechatTag } from '../../definitions/ILivechatTag'; import { type ISpotlight } from '../../definitions/ISpotlight'; @@ -1217,14 +1217,11 @@ export const getUsersRoles = async (): Promise => { export const getSupportedVersionsCloud = (uniqueId?: string, domain?: string) => fetch(`https://releases.rocket.chat/v2/server/supportedVersions?uniqueId=${uniqueId}&domain=${domain}&source=mobile`); -export const mediaCallsStateSignals = async ( - contractId: string -): Promise<{ signals: ServerMediaSignal[]; success: boolean }> => { +export const mediaCallsStateSignals = async (contractId: string): Promise<{ signals: ServerMediaSignal[]; success: boolean }> => { try { - const result = await (sdk.get as unknown as (path: string, params?: object) => Promise<{ signals: ServerMediaSignal[]; success: boolean }>)( - 'media-calls.stateSignals', - { contractId } - ); + const result = await ( + sdk.get as unknown as (path: string, params?: object) => Promise<{ signals: ServerMediaSignal[]; success: boolean }> + )('media-calls.stateSignals', { contractId }); return result; } catch { return { signals: [], success: false }; diff --git a/app/lib/services/voip/MediaSessionInstance.test.ts b/app/lib/services/voip/MediaSessionInstance.test.ts index a9f59d8a157..4ca1708a3f3 100644 --- a/app/lib/services/voip/MediaSessionInstance.test.ts +++ b/app/lib/services/voip/MediaSessionInstance.test.ts @@ -51,7 +51,7 @@ jest.mock('../sdk', () => ({ } })); -const mockMediaCallsStateSignals = jest.fn(() => Promise.resolve({ signals: [] })); +const mockMediaCallsStateSignals = jest.fn((..._args: unknown[]) => Promise.resolve({ signals: [] })); jest.mock('../../services/restApi', () => ({ mediaCallsStateSignals: (...args: unknown[]) => mockMediaCallsStateSignals(...args) })); @@ -613,13 +613,6 @@ describe('MediaSessionInstance', () => { it('answerCall resolves roomId from DM for non-SIP callee', async () => { mockGetDMSubscriptionByUsername.mockResolvedValue({ rid: 'dm-rid' } as any); mediaSessionInstance.init('user-1'); - const mainCall = { - callId: 'call-ans', - accept: jest.fn().mockResolvedValue(undefined), - localParticipant: { - contact: { username: 'bob', sipExtension: '' } - } - }; await mediaSessionInstance.answerCall('call-ans'); @@ -628,13 +621,6 @@ describe('MediaSessionInstance', () => { it('answerCall skips DM lookup for SIP contact', async () => { mediaSessionInstance.init('user-1'); - const mainCall = { - callId: 'call-sip', - accept: jest.fn().mockResolvedValue(undefined), - localParticipant: { - contact: { username: 'bob', sipExtension: 'ext' } - } - }; await mediaSessionInstance.answerCall('call-sip'); diff --git a/app/lib/services/voip/MediaSessionInstance.ts b/app/lib/services/voip/MediaSessionInstance.ts index e4a8ed40e73..0dfdce34274 100644 --- a/app/lib/services/voip/MediaSessionInstance.ts +++ b/app/lib/services/voip/MediaSessionInstance.ts @@ -15,7 +15,7 @@ import { mediaSessionStore } from './MediaSessionStore'; import { useCallStore } from './useCallStore'; import { store } from '../../store/auxStore'; import sdk from '../sdk'; -import { mediaCallsStateSignals } from '../../services/restApi'; +import { mediaCallsStateSignals } from '../restApi'; import Navigation from '../../navigation/appNavigation'; import { parseStringToIceServers } from './parseStringToIceServers'; import type { IceServer } from '../../../definitions/Voip'; @@ -65,7 +65,7 @@ class MediaSessionInstance { console.error('[VoIP] Failed to fetch initial state signals:', error); } - instance.register(false); + // instance.register(false); } this.mediaSessionStoreChangeUnsubscribe = mediaSessionStore.onChange(() => { @@ -127,7 +127,7 @@ class MediaSessionInstance { return; } - const call = useCallStore.getState().call; + const { call } = useCallStore.getState(); if (call && call.callId === callId) { await call.accept(); @@ -160,7 +160,7 @@ class MediaSessionInstance { }; public endCall = (callId: string) => { - const call = useCallStore.getState().call; + const { call } = useCallStore.getState(); if (call && call.callId === callId) { if (call.state === 'ringing') { diff --git a/app/lib/services/voip/MediaSessionStore.ts b/app/lib/services/voip/MediaSessionStore.ts index 5bc0fd94a27..f59cda874a1 100644 --- a/app/lib/services/voip/MediaSessionStore.ts +++ b/app/lib/services/voip/MediaSessionStore.ts @@ -68,7 +68,7 @@ class MediaSessionStore extends Emitter<{ change: void }> { logger: new MediaCallLogger(), features: ['audio'], mobileDeviceId, - requestInitialStateSignals: false + autoSync: true }); this.change(); diff --git a/app/lib/services/voip/mockCall.ts b/app/lib/services/voip/mockCall.ts index 31c52af78b0..695354a0764 100644 --- a/app/lib/services/voip/mockCall.ts +++ b/app/lib/services/voip/mockCall.ts @@ -1,25 +1,7 @@ import type { CallState, IClientMediaCall } from '@rocket.chat/media-signaling'; import { useCallStore } from './useCallStore'; - -jest.mock('../../navigation/appNavigation', () => ({ - __esModule: true, - default: { navigate: jest.fn(), back: jest.fn() } -})); - -jest.mock('../../../containers/ActionSheet', () => ({ - hideActionSheetRef: jest.fn() -})); - -jest.mock('react-native-callkeep', () => ({ - setCurrentCallActive: jest.fn(), - addEventListener: jest.fn(() => ({ remove: jest.fn() })), - endCall: jest.fn(), - start: jest.fn(), - stop: jest.fn(), - setForceSpeakerphoneOn: jest.fn(), - setAvailable: jest.fn() -})); +import Navigation from '../../navigation/appNavigation'; export interface MockCallOverrides { callState?: CallState; @@ -59,7 +41,7 @@ export function createMockCall(overrides: MockCallOverrides = {}): IClientMediaC participantId: 'mock-participant-id', actorType: 'user' as const, actorId: 'mock-actor-id', - role: overrides.role ?? 'callee' as const, + role: 'callee' as const, muted: overrides.isMuted ?? false, held: overrides.isOnHold ?? false, contact, @@ -112,4 +94,4 @@ export function seedMockCall(overrides: MockCallOverrides = {}): void { export function launchMockCallView(overrides: MockCallOverrides = {}): void { seedMockCall(overrides); Navigation.navigate('CallView'); -} \ No newline at end of file +} diff --git a/app/lib/services/voip/useCallStore.test.ts b/app/lib/services/voip/useCallStore.test.ts index 538b6fdf07d..7972845c916 100644 --- a/app/lib/services/voip/useCallStore.test.ts +++ b/app/lib/services/voip/useCallStore.test.ts @@ -45,10 +45,12 @@ function createMockCall(callId: string) { setMuted: jest.fn(), setHeld: jest.fn() }, - remoteParticipants: [{ - muted: false, - held: false - }], + remoteParticipants: [ + { + muted: false, + held: false + } + ], hidden: false, role: 'callee', emitter, From 0f63304908e6c40a079475237b35aa6545978198 Mon Sep 17 00:00:00 2001 From: Diego Mello Date: Tue, 14 Apr 2026 19:34:20 -0300 Subject: [PATCH 13/13] update lib --- .../voip/MediaSessionInstance.test.ts | 93 ++++++++----------- app/lib/services/voip/MediaSessionInstance.ts | 66 +++++++------ app/lib/services/voip/mockCall.ts | 38 ++++---- app/lib/services/voip/useCallStore.test.ts | 34 ++++--- app/lib/services/voip/useCallStore.ts | 20 ++-- 5 files changed, 118 insertions(+), 133 deletions(-) diff --git a/app/lib/services/voip/MediaSessionInstance.test.ts b/app/lib/services/voip/MediaSessionInstance.test.ts index 4ca1708a3f3..f802c9f577f 100644 --- a/app/lib/services/voip/MediaSessionInstance.test.ts +++ b/app/lib/services/voip/MediaSessionInstance.test.ts @@ -6,8 +6,8 @@ import type { IDDPMessage } from '../../../definitions/IDDPMessage'; import Navigation from '../../navigation/appNavigation'; import { getDMSubscriptionByUsername } from '../../database/services/Subscription'; import { getUidDirectMessage } from '../../methods/helpers/helpers'; -import { mediaSessionInstance } from './MediaSessionInstance'; import { mediaSessionStore } from './MediaSessionStore'; +import { mediaSessionInstance } from './MediaSessionInstance'; jest.mock('../../database/services/Subscription', () => ({ getDMSubscriptionByUsername: jest.fn() @@ -51,11 +51,6 @@ jest.mock('../sdk', () => ({ } })); -const mockMediaCallsStateSignals = jest.fn((..._args: unknown[]) => Promise.resolve({ signals: [] })); -jest.mock('../../services/restApi', () => ({ - mediaCallsStateSignals: (...args: unknown[]) => mockMediaCallsStateSignals(...args) -})); - jest.mock('../../store/auxStore', () => ({ store: { getState: jest.fn(() => ({ @@ -83,31 +78,8 @@ jest.mock('react-native-callkeep', () => ({ })); jest.mock('react-native-device-info', () => ({ - __esModule: true, - default: { - getUniqueId: jest.fn(() => 'test-device-id'), - getUniqueIdSync: jest.fn(() => 'test-device-id'), - getSystemVersion: jest.fn(() => '15.0'), - getVersion: jest.fn(() => '4.0.0'), - getBuildNumber: jest.fn(() => '1'), - hasNotch: jest.fn(() => false), - getReadableVersion: jest.fn(() => '4.0.0'), - getBundleId: jest.fn(() => 'com.rocket.chat'), - getDeviceModel: jest.fn(() => 'iPhone 14'), - getModel: jest.fn(() => 'iPhone 14'), - isTablet: jest.fn(() => false) - }, getUniqueId: jest.fn(() => 'test-device-id'), - getUniqueIdSync: jest.fn(() => 'test-device-id'), - getSystemVersion: jest.fn(() => '15.0'), - getVersion: jest.fn(() => '4.0.0'), - getBuildNumber: jest.fn(() => '1'), - hasNotch: jest.fn(() => false), - getReadableVersion: jest.fn(() => '4.0.0'), - getBundleId: jest.fn(() => 'com.rocket.chat'), - getDeviceModel: jest.fn(() => 'iPhone 14'), - getModel: jest.fn(() => 'iPhone 14'), - isTablet: jest.fn(() => false) + getUniqueIdSync: jest.fn(() => 'test-device-id') })); jest.mock('../../native/NativeVoip', () => ({ @@ -133,7 +105,7 @@ type MockMediaSignalingSession = { processSignal: jest.Mock; setIceGatheringTimeout: jest.Mock; startCall: jest.Mock; - register: jest.Mock; + getCallData: jest.Mock; }; const createdSessions: MockMediaSignalingSession[] = []; @@ -152,7 +124,7 @@ jest.mock('@rocket.chat/media-signaling', () => ({ this.processSignal = jest.fn().mockResolvedValue(undefined); this.setIceGatheringTimeout = jest.fn(); this.startCall = jest.fn().mockResolvedValue(undefined); - this.register = jest.fn(); + this.getCallData = jest.fn(); Object.defineProperty(this, 'sessionId', { value: `session-${config.userId}`, writable: false }); createdSessions.push(this); }) @@ -188,27 +160,23 @@ function buildClientMediaCall(options: { role: 'caller' | 'callee'; hidden?: boolean; reject?: jest.Mock; + contact?: { username?: string; sipExtension?: string }; }): IClientMediaCall { const reject = options.reject ?? jest.fn(); const emitter = { on: jest.fn(), off: jest.fn(), emit: jest.fn() }; return { callId: options.callId, - localParticipant: { - local: true as const, - participantId: 'mock-participant-id', - actorType: 'user' as const, - actorId: 'mock-actor-id', - role: options.role, - muted: false, - held: false, - contact: { id: 'u', displayName: 'U', username: 'u', sipExtension: '' }, - getMediaStream: () => null, - setMuted: () => {}, - setHeld: () => {} - }, - remoteParticipants: [], - participants: [], hidden: options.hidden ?? false, + localParticipant: { local: true, role: options.role, muted: false, held: false, contact: {} }, + remoteParticipants: [ + { + local: false, + role: options.role === 'caller' ? 'callee' : 'caller', + muted: false, + held: false, + contact: options.contact ?? {} + } + ], reject, emitter: emitter as unknown as IClientMediaCall['emitter'] } as unknown as IClientMediaCall; @@ -238,8 +206,8 @@ describe('MediaSessionInstance', () => { }); describe('init', () => { - it('should register stream-notify-user listener', async () => { - await mediaSessionInstance.init('user-1'); + it('should register stream-notify-user listener', () => { + mediaSessionInstance.init('user-1'); expect(mockOnStreamData).toHaveBeenCalledWith('stream-notify-user', expect.any(Function)); }); @@ -547,9 +515,9 @@ describe('MediaSessionInstance', () => { newCallHandler({ call: { hidden: false, - role: 'caller', + localParticipant: { role: 'caller' }, + remoteParticipants: [{ contact: { username: 'alice', sipExtension: '' } }], callId: 'c1', - contact: { username: 'alice', sipExtension: '' }, emitter: { on: jest.fn(), off: jest.fn() } } as unknown as IClientMediaCall }); @@ -578,9 +546,9 @@ describe('MediaSessionInstance', () => { newCallHandler({ call: { hidden: false, - role: 'caller', + localParticipant: { role: 'caller' }, + remoteParticipants: [{ contact: { username: 'alice', sipExtension: '' } }], callId: 'c1', - contact: { username: 'alice', sipExtension: '' }, emitter: { on: jest.fn(), off: jest.fn() } } as unknown as IClientMediaCall }); @@ -599,9 +567,9 @@ describe('MediaSessionInstance', () => { newCallHandler({ call: { hidden: false, - role: 'caller', + localParticipant: { role: 'caller' }, + remoteParticipants: [{ contact: { username: 'alice', sipExtension: '100' } }], callId: 'c1', - contact: { username: 'alice', sipExtension: '100' }, emitter: { on: jest.fn(), off: jest.fn() } } as unknown as IClientMediaCall }); @@ -613,14 +581,29 @@ describe('MediaSessionInstance', () => { it('answerCall resolves roomId from DM for non-SIP callee', async () => { mockGetDMSubscriptionByUsername.mockResolvedValue({ rid: 'dm-rid' } as any); mediaSessionInstance.init('user-1'); + const session = createdSessions[0]; + const mainCall = { + callId: 'call-ans', + accept: jest.fn().mockResolvedValue(undefined), + remoteParticipants: [{ contact: { username: 'bob', sipExtension: '' } }] + }; + session.getCallData.mockReturnValue(mainCall); await mediaSessionInstance.answerCall('call-ans'); await waitFor(() => expect(mockSetRoomId).toHaveBeenCalledWith('dm-rid')); + expect(mockGetDMSubscriptionByUsername).toHaveBeenCalledWith('bob'); }); it('answerCall skips DM lookup for SIP contact', async () => { mediaSessionInstance.init('user-1'); + const session = createdSessions[0]; + const mainCall = { + callId: 'call-sip', + accept: jest.fn().mockResolvedValue(undefined), + remoteParticipants: [{ contact: { username: 'bob', sipExtension: 'ext' } }] + }; + session.getCallData.mockReturnValue(mainCall); await mediaSessionInstance.answerCall('call-sip'); diff --git a/app/lib/services/voip/MediaSessionInstance.ts b/app/lib/services/voip/MediaSessionInstance.ts index 0dfdce34274..79e1c4ed70e 100644 --- a/app/lib/services/voip/MediaSessionInstance.ts +++ b/app/lib/services/voip/MediaSessionInstance.ts @@ -1,11 +1,11 @@ import { MediaCallWebRTCProcessor, + type CallContact, type ClientMediaSignal, type IClientMediaCall, type CallActorType, type MediaSignalingSession, - type WebRTCProcessorConfig, - type CallContact + type WebRTCProcessorConfig } from '@rocket.chat/media-signaling'; import RNCallKeep from 'react-native-callkeep'; import { registerGlobals } from 'react-native-webrtc'; @@ -15,7 +15,6 @@ import { mediaSessionStore } from './MediaSessionStore'; import { useCallStore } from './useCallStore'; import { store } from '../../store/auxStore'; import sdk from '../sdk'; -import { mediaCallsStateSignals } from '../restApi'; import Navigation from '../../navigation/appNavigation'; import { parseStringToIceServers } from './parseStringToIceServers'; import type { IceServer } from '../../../definitions/Voip'; @@ -34,7 +33,7 @@ class MediaSessionInstance { private storeTimeoutUnsubscribe: (() => void) | null = null; private storeIceServersUnsubscribe: (() => void) | null = null; - public async init(userId: string): Promise { + public init(userId: string): void { this.reset(); registerGlobals(); @@ -51,23 +50,7 @@ class MediaSessionInstance { mediaSessionStore.setSendSignalFn((signal: ClientMediaSignal) => { sdk.methodCall('stream-notify-user', `${userId}/media-calls`, JSON.stringify(signal)); }); - const instance = mediaSessionStore.getInstance(userId); - this.instance = instance; - - if (instance) { - // Fetch initial call state via REST before DDP register fires - try { - const { signals } = await mediaCallsStateSignals(getUniqueIdSync()); - for (const signal of signals) { - instance.processSignal(signal); - } - } catch (error) { - console.error('[VoIP] Failed to fetch initial state signals:', error); - } - - // instance.register(false); - } - + this.instance = mediaSessionStore.getInstance(userId); this.mediaSessionStoreChangeUnsubscribe = mediaSessionStore.onChange(() => { this.instance = mediaSessionStore.getInstance(userId); }); @@ -83,6 +66,8 @@ class MediaSessionInstance { const signal = ddpMessage.fields.args[0]; this.instance.processSignal(signal); + console.log('🤙 [VoIP] Processed signal:', signal); + // Answer when native already accepted and stream matches device contract + callId. const storeSlice = useCallStore.getState(); const { call, nativeAcceptedCallId } = storeSlice; @@ -102,13 +87,16 @@ class MediaSessionInstance { this.instance?.on('newCall', ({ call }: { call: IClientMediaCall }) => { if (call && !call.hidden) { - call.emitter.on('stateChange', () => {}); + call.emitter.on('stateChange', oldState => { + console.log(`📊 ${oldState} → ${call.state}`); + console.log('🤙 [VoIP] New call data:', call); + }); if (call.localParticipant.role === 'caller') { useCallStore.getState().setCall(call); Navigation.navigate('CallView'); if (useCallStore.getState().roomId == null) { - this.resolveRoomIdFromContact(call.localParticipant.contact).catch(error => { + this.resolveRoomIdFromContact(call.remoteParticipants[0]?.contact).catch(error => { console.error('[VoIP] Error resolving room id from contact (newCall):', error); }); } @@ -124,17 +112,22 @@ class MediaSessionInstance { public answerCall = async (callId: string) => { const { call: existingCall } = useCallStore.getState(); if (existingCall != null && existingCall.callId === callId) { + console.log('[VoIP] answerCall skipped — call already bound in store:', callId); return; } - const { call } = useCallStore.getState(); + console.log('[VoIP] Answering call:', callId); + const mainCall = this.instance?.getCallData(callId); + console.log('[VoIP] Main call:', mainCall); - if (call && call.callId === callId) { - await call.accept(); + if (mainCall && mainCall.callId === callId) { + console.log('[VoIP] Accepting call:', callId); + await mainCall.accept(); + console.log('[VoIP] Setting current call active:', callId); RNCallKeep.setCurrentCallActive(callId); - useCallStore.getState().setCall(call); + useCallStore.getState().setCall(mainCall); Navigation.navigate('CallView'); - this.resolveRoomIdFromContact(call.localParticipant.contact).catch(error => { + this.resolveRoomIdFromContact(mainCall.remoteParticipants[0]?.contact).catch(error => { console.error('[VoIP] Error resolving room id from contact (answerCall):', error); }); } else { @@ -143,6 +136,7 @@ class MediaSessionInstance { if (st.nativeAcceptedCallId === callId) { st.resetNativeCallId(); } + console.warn('[VoIP] Call not found:', callId); // TODO: Show error message? } }; @@ -156,17 +150,18 @@ class MediaSessionInstance { public startCall = (userId: string, actor: CallActorType) => { requestPhoneStatePermission(); + console.log('[VoIP] Starting call:', userId); this.instance?.startCall(actor, userId); }; public endCall = (callId: string) => { - const { call } = useCallStore.getState(); + const mainCall = this.instance?.getCallData(callId); - if (call && call.callId === callId) { - if (call.state === 'ringing') { - call.reject(); + if (mainCall && mainCall.callId === callId) { + if (mainCall.state === 'ringing') { + mainCall.reject(); } else { - call.hangup(); + mainCall.hangup(); } } RNCallKeep.endCall(callId); @@ -176,8 +171,8 @@ class MediaSessionInstance { useCallStore.getState().reset(); }; - private async resolveRoomIdFromContact(contact: CallContact): Promise { - if (contact.sipExtension) { + private async resolveRoomIdFromContact(contact: CallContact | undefined): Promise { + if (!contact || contact.sipExtension) { return; } const { username } = contact; @@ -211,6 +206,7 @@ class MediaSessionInstance { const currentIceServers = this.getIceServers(); if (currentIceServers !== this.iceServers) { this.iceServers = currentIceServers; + // this.instance?.setIceServers(this.iceServers); } }); } diff --git a/app/lib/services/voip/mockCall.ts b/app/lib/services/voip/mockCall.ts index 695354a0764..ee0aac4dda5 100644 --- a/app/lib/services/voip/mockCall.ts +++ b/app/lib/services/voip/mockCall.ts @@ -1,7 +1,7 @@ import type { CallState, IClientMediaCall } from '@rocket.chat/media-signaling'; -import { useCallStore } from './useCallStore'; import Navigation from '../../navigation/appNavigation'; +import { useCallStore } from './useCallStore'; export interface MockCallOverrides { callState?: CallState; @@ -33,32 +33,28 @@ export function createMockCall(overrides: MockCallOverrides = {}): IClientMediaC const contact = { ...DEFAULT_CONTACT, ...overrides.contact }; const callState: CallState = overrides.callState ?? 'active'; + const localParticipant = { + local: true, + role: 'caller', + muted: overrides.isMuted ?? false, + held: overrides.isOnHold ?? false, + contact: {}, + setMuted: () => {}, + setHeld: () => {} + }; + const remoteParticipants = [{ local: false, role: 'callee', muted: false, held: false, contact }]; const mock = { callId: 'mock-call-id', state: callState, - localParticipant: { - local: true as const, - participantId: 'mock-participant-id', - actorType: 'user' as const, - actorId: 'mock-actor-id', - role: 'callee' as const, - muted: overrides.isMuted ?? false, - held: overrides.isOnHold ?? false, - contact, - getMediaStream: () => null, - setMuted: () => {}, - setHeld: () => {} - }, - remoteParticipants: [], - participants: [], + localParticipant, + remoteParticipants, + hangup: () => {}, + reject: () => {}, + sendDTMF: () => {}, emitter: { on: () => {}, off: () => {} - }, - accept: () => {}, - hangup: () => {}, - reject: () => {}, - sendDTMF: () => {} + } }; return mock as unknown as IClientMediaCall; diff --git a/app/lib/services/voip/useCallStore.test.ts b/app/lib/services/voip/useCallStore.test.ts index 7972845c916..05b916b964a 100644 --- a/app/lib/services/voip/useCallStore.test.ts +++ b/app/lib/services/voip/useCallStore.test.ts @@ -35,24 +35,30 @@ function createMockCall(callId: string) { const emit = (ev: string, ...args: unknown[]) => { listeners[ev]?.forEach(fn => fn(...args)); }; + const localParticipant = { + local: true, + role: 'callee', + muted: false, + held: false, + contact: {}, + setMuted: jest.fn(), + setHeld: jest.fn() + }; + const remoteParticipants = [ + { + local: false, + role: 'caller', + muted: false, + held: false, + contact: { id: 'u', displayName: 'U', username: 'u', sipExtension: '' } + } + ]; const call = { callId, state: 'active', - localParticipant: { - muted: false, - held: false, - contact: { id: 'u', displayName: 'U', username: 'u', sipExtension: '' }, - setMuted: jest.fn(), - setHeld: jest.fn() - }, - remoteParticipants: [ - { - muted: false, - held: false - } - ], hidden: false, - role: 'callee', + localParticipant, + remoteParticipants, emitter, sendDTMF: jest.fn(), hangup: jest.fn(), diff --git a/app/lib/services/voip/useCallStore.ts b/app/lib/services/voip/useCallStore.ts index 9a49bc513ad..74040b495c5 100644 --- a/app/lib/services/voip/useCallStore.ts +++ b/app/lib/services/voip/useCallStore.ts @@ -139,19 +139,22 @@ export const useCallStore = create((set, get) => ({ setCall: (call: IClientMediaCall) => { cleanupCallListeners(); get().resetNativeCallId(); + // Update state with call info + const remote = call.remoteParticipants[0]; + const remoteContact = remote?.contact; set({ call, callId: call.callId, callState: call.state, isMuted: call.localParticipant.muted, isOnHold: call.localParticipant.held, - remoteMute: call.remoteParticipants[0]?.muted ?? false, - remoteHeld: call.remoteParticipants[0]?.held ?? false, + remoteMute: remote?.muted ?? false, + remoteHeld: remote?.held ?? false, contact: { - id: call.localParticipant.contact.id, - displayName: call.localParticipant.contact.displayName, - username: call.localParticipant.contact.username, - sipExtension: call.localParticipant.contact.sipExtension + id: remoteContact?.id, + displayName: remoteContact?.displayName, + username: remoteContact?.username, + sipExtension: remoteContact?.sipExtension }, callStartTime: call.state === 'active' ? Date.now() : null }); @@ -186,11 +189,12 @@ export const useCallStore = create((set, get) => ({ const currentCall = get().call; if (!currentCall) return; + const currentRemote = currentCall.remoteParticipants[0]; set({ isMuted: currentCall.localParticipant.muted, isOnHold: currentCall.localParticipant.held, - remoteMute: currentCall.remoteParticipants[0]?.muted ?? false, - remoteHeld: currentCall.remoteParticipants[0]?.held ?? false, + remoteMute: currentRemote?.muted ?? false, + remoteHeld: currentRemote?.held ?? false, controlsVisible: true }); };