DIRECTORY Basics USING [Card16FromH], SunPMap USING [ipProtocolUDP], SunPMapLocal USING [SetLocal, UnsetLocal], SunRPC, ThPartySunRPC, ThPartySunRPCServer, ThrushSunRPC; ThPartySunRPCServerStub: CEDAR PROGRAM IMPORTS Basics, SunPMapLocal, SunRPC, ThPartySunRPCServer ~ { OPEN ThPartySunRPC, ThPartySunRPCServer; Handle: TYPE ~ SunRPC.Handle; LookupServiceInterfaceCaller: PROC [h: Handle, beginReturn: SunRPCBeginReturnProc] ~ { shhh: CARD32; credentials: ThrushSunRPC.Credentials; serviceParty: CARD32; type: ROPE; nb: ROPE; interfaceSpec: ThrushSunRPC.InterfaceSpec; { shhh _ SunRPC.GetCard32[h]; }; { credentials.partyID _ SunRPC.GetCard32[h]; credentials.smartsID _ SunRPC.GetCard32[h]; credentials.convID _ SunRPC.GetCard32[h]; credentials.state _ VAL[CARDINAL[SunRPC.GetCard32[h]]]; credentials.stateID _ SunRPC.GetCard32[h]; }; { serviceParty _ SunRPC.GetCard32[h]; }; { type _ SunRPC.GetRope[h]; }; [nb, interfaceSpec] _ LookupServiceInterface[h, shhh, credentials, serviceParty, type]; beginReturn[h]; { SunRPC.PutRope[h, nb]; }; { SunRPC.PutRope[h, interfaceSpec.interfaceName.type]; SunRPC.PutRope[h, interfaceSpec.interfaceName.instance]; SunRPC.PutCard32[h, interfaceSpec.interfaceName.version.first]; SunRPC.PutCard32[h, interfaceSpec.interfaceName.version.last]; SunRPC.PutCard32[h, interfaceSpec.hostHint.net.net]; SunRPC.PutCard32[h, interfaceSpec.hostHint.host.host]; SunRPC.PutCard32[h, interfaceSpec.hostHint.socket.a]; SunRPC.PutCard32[h, interfaceSpec.hostHint.socket.b]; SunRPC.PutCard32[h, interfaceSpec.hostHint.socket.c]; SunRPC.PutCard32[h, interfaceSpec.hostHint.socket.d]; SunRPC.PutCard32[h, interfaceSpec.serviceID]; SunRPC.PutCard32[h, interfaceSpec.interfaceID]; }; }; RegisterCaller: PROC [h: Handle, beginReturn: SunRPCBeginReturnProc] ~ { shh: CARD32; rName: ROPE; type: ROPE; clonePartyID: CARD32; interface: ThrushSunRPC.InterfaceName; properties: SmartsProperties; nb: ROPE; credentials: ThrushSunRPC.Credentials; { shh _ SunRPC.GetCard32[h]; }; { rName _ SunRPC.GetRope[h]; }; { type _ SunRPC.GetRope[h]; }; { clonePartyID _ SunRPC.GetCard32[h]; }; { interface.type _ SunRPC.GetRope[h]; interface.instance _ SunRPC.GetRope[h]; interface.version.first _ SunRPC.GetCard32[h]; interface.version.last _ SunRPC.GetCard32[h]; }; { properties.role _ SunRPC.GetRope[h]; properties.netAddress.net.net _ SunRPC.GetCard32[h]; properties.netAddress.host.host _ SunRPC.GetCard32[h]; properties.netAddress.socket.a _ SunRPC.GetCard32[h]; properties.netAddress.socket.b _ SunRPC.GetCard32[h]; properties.netAddress.socket.c _ SunRPC.GetCard32[h]; properties.netAddress.socket.d _ SunRPC.GetCard32[h]; }; [nb, credentials] _ Register[h, shh, rName, type, clonePartyID, interface, properties]; beginReturn[h]; { SunRPC.PutRope[h, nb]; }; { SunRPC.PutCard32[h, credentials.partyID]; SunRPC.PutCard32[h, credentials.smartsID]; SunRPC.PutCard32[h, credentials.convID]; SunRPC.PutCard32[h, ORD[credentials.state]]; SunRPC.PutCard32[h, credentials.stateID]; }; }; DisableCaller: PROC [h: Handle, beginReturn: SunRPCBeginReturnProc] ~ { shh: CARD32; smartsID: CARD32; nb: ROPE; { shh _ SunRPC.GetCard32[h]; }; { smartsID _ SunRPC.GetCard32[h]; }; [nb] _ Disable[h, shh, smartsID]; beginReturn[h]; { SunRPC.PutRope[h, nb]; }; }; DescribePartyCaller: PROC [h: Handle, beginReturn: SunRPCBeginReturnProc] ~ { partyID: CARD32; nameReq: ROPE; nb: ROPE; description: ROPE; type: ROPE; partner: CARD32; visitee: CARD32; visitors: VisitorList; { partyID _ SunRPC.GetCard32[h]; }; { nameReq _ SunRPC.GetRope[h]; }; [nb, description, type, partner, visitee, visitors] _ DescribeParty[h, partyID, nameReq]; beginReturn[h]; { SunRPC.PutRope[h, nb]; }; { SunRPC.PutRope[h, description]; }; { SunRPC.PutRope[h, type]; }; { SunRPC.PutCard32[h, partner]; }; { SunRPC.PutCard32[h, visitee]; }; { MProc25[h, visitors]; }; }; VisitCaller: PROC [h: Handle, beginReturn: SunRPCBeginReturnProc] ~ { shh: CARD32; hostPartyID: CARD32; guestPartyID: CARD32; guestPassword: ThrushSunRPC.Password; nb: ROPE; { shh _ SunRPC.GetCard32[h]; }; { hostPartyID _ SunRPC.GetCard32[h]; }; { guestPartyID _ SunRPC.GetCard32[h]; }; { FOR i26: CARDINAL IN [0..2) DO guestPassword[i26] _ SunRPC.GetCard32[h]; ENDLOOP; }; [nb] _ Visit[h, shh, hostPartyID, guestPartyID, guestPassword]; beginReturn[h]; { SunRPC.PutRope[h, nb]; }; }; GetNumbersForRNameCaller: PROC [h: Handle, beginReturn: SunRPCBeginReturnProc] ~ { shh: CARD32; rName: ROPE; fullRName: ROPE; number: ROPE; homeNumber: ROPE; { shh _ SunRPC.GetCard32[h]; }; { rName _ SunRPC.GetRope[h]; }; [fullRName, number, homeNumber] _ GetNumbersForRName[h, shh, rName]; beginReturn[h]; { SunRPC.PutRope[h, fullRName]; }; { SunRPC.PutRope[h, number]; }; { SunRPC.PutRope[h, homeNumber]; }; }; UnregisterKeyCaller: PROC [h: Handle, beginReturn: SunRPCBeginReturnProc] ~ { shh: CARD32; credentials: ThrushSunRPC.Credentials; key: ThrushSunRPC.Key; nb: ROPE; { shh _ SunRPC.GetCard32[h]; }; { credentials.partyID _ SunRPC.GetCard32[h]; credentials.smartsID _ SunRPC.GetCard32[h]; credentials.convID _ SunRPC.GetCard32[h]; credentials.state _ VAL[CARDINAL[SunRPC.GetCard32[h]]]; credentials.stateID _ SunRPC.GetCard32[h]; }; { FOR i27: CARDINAL IN [0..2) DO key[i27] _ SunRPC.GetCard32[h]; ENDLOOP; }; [nb] _ UnregisterKey[h, shh, credentials, key]; beginReturn[h]; { SunRPC.PutRope[h, nb]; }; }; CheckInCaller: PROC [h: Handle, beginReturn: SunRPCBeginReturnProc] ~ { shh: CARD32; credentials: ThrushSunRPC.Credentials; nb: ROPE; { shh _ SunRPC.GetCard32[h]; }; { credentials.partyID _ SunRPC.GetCard32[h]; credentials.smartsID _ SunRPC.GetCard32[h]; credentials.convID _ SunRPC.GetCard32[h]; credentials.state _ VAL[CARDINAL[SunRPC.GetCard32[h]]]; credentials.stateID _ SunRPC.GetCard32[h]; }; [nb] _ CheckIn[h, shh, credentials]; beginReturn[h]; { SunRPC.PutRope[h, nb]; }; }; CreateConversationCaller: PROC [h: Handle, beginReturn: SunRPCBeginReturnProc] ~ { shhh: CARD32; credentials: ThrushSunRPC.Credentials; state: ThrushSunRPC.StateInConv; reason: ROPE; comment: ROPE; convAttributes: Entry; partyAttributes: Entry; checkConflict: BOOLEAN; nb: ROPE; convEvent: ThrushSunRPC.ConvEvent; { shhh _ SunRPC.GetCard32[h]; }; { credentials.partyID _ SunRPC.GetCard32[h]; credentials.smartsID _ SunRPC.GetCard32[h]; credentials.convID _ SunRPC.GetCard32[h]; credentials.state _ VAL[CARDINAL[SunRPC.GetCard32[h]]]; credentials.stateID _ SunRPC.GetCard32[h]; }; { state _ VAL[CARDINAL[SunRPC.GetCard32[h]]]; }; { reason _ SunRPC.GetRope[h]; }; { comment _ SunRPC.GetRope[h]; }; { convAttributes _ UProc28[h]; }; { partyAttributes _ UProc28[h]; }; { checkConflict _ SunRPCGetBool[h]; }; [nb, convEvent] _ CreateConversation[h, shhh, credentials, state, reason, comment, convAttributes, partyAttributes, checkConflict]; beginReturn[h]; { SunRPC.PutRope[h, nb]; }; { SunRPC.PutCard32[h, convEvent.self.partyID]; SunRPC.PutCard32[h, convEvent.self.smartsID]; SunRPC.PutCard32[h, convEvent.self.convID]; SunRPC.PutCard32[h, ORD[convEvent.self.state]]; SunRPC.PutCard32[h, convEvent.self.stateID]; SunRPC.PutCard32[h, convEvent.other.partyID]; SunRPC.PutCard32[h, convEvent.other.smartsID]; SunRPC.PutCard32[h, convEvent.other.convID]; SunRPC.PutCard32[h, ORD[convEvent.other.state]]; SunRPC.PutCard32[h, convEvent.other.stateID]; SunRPC.PutCard32[h, convEvent.time]; SunRPC.PutRope[h, convEvent.reason]; SunRPC.PutRope[h, convEvent.comment]; }; }; UnvisitSelfCaller: PROC [h: Handle, beginReturn: SunRPCBeginReturnProc] ~ { shh: CARD32; guestPartyID: CARD32; nb: ROPE; { shh _ SunRPC.GetCard32[h]; }; { guestPartyID _ SunRPC.GetCard32[h]; }; [nb] _ UnvisitSelf[h, shh, guestPartyID]; beginReturn[h]; { SunRPC.PutRope[h, nb]; }; }; GetConversationInfoCaller: PROC [h: Handle, beginReturn: SunRPCBeginReturnProc] ~ { shh: CARD32; convID: CARD32; nb: ROPE; cInfo: ConversationInfo; { shh _ SunRPC.GetCard32[h]; }; { convID _ SunRPC.GetCard32[h]; }; [nb, cInfo] _ GetConversationInfo[h, shh, convID]; beginReturn[h]; { SunRPC.PutRope[h, nb]; }; { SunRPC.PutCard32[h, cInfo.convID]; SunRPC.PutCard32[h, cInfo.numParties]; SunRPC.PutCard32[h, cInfo.numActive]; SunRPC.PutCard32[h, cInfo.numIdle]; SunRPC.PutCard32[h, cInfo.originator]; SunRPC.PutCard32[h, cInfo.conferenceHost.net.net]; SunRPC.PutCard32[h, cInfo.conferenceHost.host.host]; SunRPC.PutCard32[h, cInfo.conferenceHost.socket.a]; SunRPC.PutCard32[h, cInfo.conferenceHost.socket.b]; SunRPC.PutCard32[h, cInfo.conferenceHost.socket.c]; SunRPC.PutCard32[h, cInfo.conferenceHost.socket.d]; SunRPC.PutCard32[h, ORD[cInfo.convType]]; SunRPCPutBool[h, cInfo.bilateralConv]; SunRPC.PutCard32[h, cInfo.startTime]; MProc29[h, cInfo.convAttributes]; SunRPC.PutCard32[h, cInfo.moderator]; SunRPC.PutCard32[h, cInfo.commentator]; }; }; GetKeyTableCaller: PROC [h: Handle, beginReturn: SunRPCBeginReturnProc] ~ { shh: CARD32; credentials: ThrushSunRPC.Credentials; nb: ROPE; keyTable: ThrushSunRPC.KeyTable; { shh _ SunRPC.GetCard32[h]; }; { credentials.partyID _ SunRPC.GetCard32[h]; credentials.smartsID _ SunRPC.GetCard32[h]; credentials.convID _ SunRPC.GetCard32[h]; credentials.state _ VAL[CARDINAL[SunRPC.GetCard32[h]]]; credentials.stateID _ SunRPC.GetCard32[h]; }; [nb, keyTable] _ GetKeyTable[h, shh, credentials]; beginReturn[h]; { SunRPC.PutRope[h, nb]; }; { MProc30[h, keyTable.s]; }; }; GetPartyFromFeepNumCaller: PROC [h: Handle, beginReturn: SunRPCBeginReturnProc] ~ { shh: CARD32; partyID: CARD32; feepNum: ROPE; nb: ROPE; newPartyID: CARD32; { shh _ SunRPC.GetCard32[h]; }; { partyID _ SunRPC.GetCard32[h]; }; { feepNum _ SunRPC.GetRope[h]; }; [nb, newPartyID] _ GetPartyFromFeepNum[h, shh, partyID, feepNum]; beginReturn[h]; { SunRPC.PutRope[h, nb]; }; { SunRPC.PutCard32[h, newPartyID]; }; }; ReportActionCaller: PROC [h: Handle, beginReturn: SunRPCBeginReturnProc] ~ { shhh: CARD32; report: ThrushSunRPC.ActionReport; reportToAll: BOOLEAN; selfOnCompletion: BOOLEAN; nb: ROPE; numReportsIssued: CARD16; { shhh _ SunRPC.GetCard32[h]; }; { report.self.partyID _ SunRPC.GetCard32[h]; report.self.smartsID _ SunRPC.GetCard32[h]; report.self.convID _ SunRPC.GetCard32[h]; report.self.state _ VAL[CARDINAL[SunRPC.GetCard32[h]]]; report.self.stateID _ SunRPC.GetCard32[h]; report.other.partyID _ SunRPC.GetCard32[h]; report.other.smartsID _ SunRPC.GetCard32[h]; report.other.convID _ SunRPC.GetCard32[h]; report.other.state _ VAL[CARDINAL[SunRPC.GetCard32[h]]]; report.other.stateID _ SunRPC.GetCard32[h]; report.requestingParty _ SunRPC.GetCard32[h]; report.actionID _ SunRPC.GetCard32[h]; report.actionClass _ SunRPC.GetRope[h]; report.actionType _ SunRPC.GetRope[h]; report.actionInfo _ SunRPC.GetRope[h]; }; { reportToAll _ SunRPCGetBool[h]; }; { selfOnCompletion _ SunRPCGetBool[h]; }; [nb, numReportsIssued] _ ReportAction[h, shhh, report, reportToAll, selfOnCompletion]; beginReturn[h]; { SunRPC.PutRope[h, nb]; }; { SunRPC.PutCard32[h, numReportsIssued]; }; }; GetPartyCaller: PROC [h: Handle, beginReturn: SunRPCBeginReturnProc] ~ { shh: CARD32; partyID: CARD32; rName: ROPE; type: ROPE; nb: ROPE; newPartyID: CARD32; { shh _ SunRPC.GetCard32[h]; }; { partyID _ SunRPC.GetCard32[h]; }; { rName _ SunRPC.GetRope[h]; }; { type _ SunRPC.GetRope[h]; }; [nb, newPartyID] _ GetParty[h, shh, partyID, rName, type]; beginReturn[h]; { SunRPC.PutRope[h, nb]; }; { SunRPC.PutCard32[h, newPartyID]; }; }; GetPartyInfoCaller: PROC [h: Handle, beginReturn: SunRPCBeginReturnProc] ~ { shh: CARD32; credentials: ThrushSunRPC.Credentials; nameReq: ROPE; allParties: BOOLEAN; nb: ROPE; pInfo: PartyInfo; { shh _ SunRPC.GetCard32[h]; }; { credentials.partyID _ SunRPC.GetCard32[h]; credentials.smartsID _ SunRPC.GetCard32[h]; credentials.convID _ SunRPC.GetCard32[h]; credentials.state _ VAL[CARDINAL[SunRPC.GetCard32[h]]]; credentials.stateID _ SunRPC.GetCard32[h]; }; { nameReq _ SunRPC.GetRope[h]; }; { allParties _ SunRPCGetBool[h]; }; [nb, pInfo] _ GetPartyInfo[h, shh, credentials, nameReq, allParties]; beginReturn[h]; { SunRPC.PutRope[h, nb]; }; { SunRPC.PutCard32[h, pInfo.numParties]; SunRPC.PutCard32[h, pInfo.conversationInfo.convID]; SunRPC.PutCard32[h, pInfo.conversationInfo.numParties]; SunRPC.PutCard32[h, pInfo.conversationInfo.numActive]; SunRPC.PutCard32[h, pInfo.conversationInfo.numIdle]; SunRPC.PutCard32[h, pInfo.conversationInfo.originator]; SunRPC.PutCard32[h, pInfo.conversationInfo.conferenceHost.net.net]; SunRPC.PutCard32[h, pInfo.conversationInfo.conferenceHost.host.host]; SunRPC.PutCard32[h, pInfo.conversationInfo.conferenceHost.socket.a]; SunRPC.PutCard32[h, pInfo.conversationInfo.conferenceHost.socket.b]; SunRPC.PutCard32[h, pInfo.conversationInfo.conferenceHost.socket.c]; SunRPC.PutCard32[h, pInfo.conversationInfo.conferenceHost.socket.d]; SunRPC.PutCard32[h, ORD[pInfo.conversationInfo.convType]]; SunRPCPutBool[h, pInfo.conversationInfo.bilateralConv]; SunRPC.PutCard32[h, pInfo.conversationInfo.startTime]; MProc29[h, pInfo.conversationInfo.convAttributes]; SunRPC.PutCard32[h, pInfo.conversationInfo.moderator]; SunRPC.PutCard32[h, pInfo.conversationInfo.commentator]; SunRPC.PutCard32[h, pInfo.ixSelf]; SunRPC.PutCard32[h, pInfo.ixOther]; SunRPC.PutCard32[h, pInfo.ixModerator]; SunRPC.PutCard32[h, pInfo.ixCommentator]; SunRPC.PutCard32[h, pInfo.ixCommSock]; SunRPC.PutCard32[h, pInfo.ixOriginator]; MProc31[h, pInfo.parties]; }; }; AdvanceCaller: PROC [h: Handle, beginReturn: SunRPCBeginReturnProc] ~ { shhh: CARD32; credentials: ThrushSunRPC.Credentials; state: ThrushSunRPC.StateInConv; reportToAll: BOOLEAN; reason: ROPE; comment: ROPE; convAttributes: Entry; partyAttributes: Entry; bilateral: BOOLEAN; checkConflict: BOOLEAN; nb: ROPE; convEvent: ThrushSunRPC.ConvEvent; { shhh _ SunRPC.GetCard32[h]; }; { credentials.partyID _ SunRPC.GetCard32[h]; credentials.smartsID _ SunRPC.GetCard32[h]; credentials.convID _ SunRPC.GetCard32[h]; credentials.state _ VAL[CARDINAL[SunRPC.GetCard32[h]]]; credentials.stateID _ SunRPC.GetCard32[h]; }; { state _ VAL[CARDINAL[SunRPC.GetCard32[h]]]; }; { reportToAll _ SunRPCGetBool[h]; }; { reason _ SunRPC.GetRope[h]; }; { comment _ SunRPC.GetRope[h]; }; { convAttributes _ UProc28[h]; }; { partyAttributes _ UProc28[h]; }; { bilateral _ SunRPCGetBool[h]; }; { checkConflict _ SunRPCGetBool[h]; }; [nb, convEvent] _ Advance[h, shhh, credentials, state, reportToAll, reason, comment, convAttributes, partyAttributes, bilateral, checkConflict]; beginReturn[h]; { SunRPC.PutRope[h, nb]; }; { SunRPC.PutCard32[h, convEvent.self.partyID]; SunRPC.PutCard32[h, convEvent.self.smartsID]; SunRPC.PutCard32[h, convEvent.self.convID]; SunRPC.PutCard32[h, ORD[convEvent.self.state]]; SunRPC.PutCard32[h, convEvent.self.stateID]; SunRPC.PutCard32[h, convEvent.other.partyID]; SunRPC.PutCard32[h, convEvent.other.smartsID]; SunRPC.PutCard32[h, convEvent.other.convID]; SunRPC.PutCard32[h, ORD[convEvent.other.state]]; SunRPC.PutCard32[h, convEvent.other.stateID]; SunRPC.PutCard32[h, convEvent.time]; SunRPC.PutRope[h, convEvent.reason]; SunRPC.PutRope[h, convEvent.comment]; }; }; AlertCaller: PROC [h: Handle, beginReturn: SunRPCBeginReturnProc] ~ { shhh: CARD32; credentials: ThrushSunRPC.Credentials; calledPartyID: CARD32; comment: ROPE; convAttributes: Entry; partyAttributes: Entry; nb: ROPE; { shhh _ SunRPC.GetCard32[h]; }; { credentials.partyID _ SunRPC.GetCard32[h]; credentials.smartsID _ SunRPC.GetCard32[h]; credentials.convID _ SunRPC.GetCard32[h]; credentials.state _ VAL[CARDINAL[SunRPC.GetCard32[h]]]; credentials.stateID _ SunRPC.GetCard32[h]; }; { calledPartyID _ SunRPC.GetCard32[h]; }; { comment _ SunRPC.GetRope[h]; }; { convAttributes _ UProc28[h]; }; { partyAttributes _ UProc28[h]; }; [nb] _ Alert[h, shhh, credentials, calledPartyID, comment, convAttributes, partyAttributes]; beginReturn[h]; { SunRPC.PutRope[h, nb]; }; }; UnvisitCaller: PROC [h: Handle, beginReturn: SunRPCBeginReturnProc] ~ { shh: CARD32; hostPartyID: CARD32; guestPartyID: CARD32; guestPassword: ThrushSunRPC.Password; nb: ROPE; { shh _ SunRPC.GetCard32[h]; }; { hostPartyID _ SunRPC.GetCard32[h]; }; { guestPartyID _ SunRPC.GetCard32[h]; }; { FOR i32: CARDINAL IN [0..2) DO guestPassword[i32] _ SunRPC.GetCard32[h]; ENDLOOP; }; [nb] _ Unvisit[h, shh, hostPartyID, guestPartyID, guestPassword]; beginReturn[h]; { SunRPC.PutRope[h, nb]; }; }; EnableCaller: PROC [h: Handle, beginReturn: SunRPCBeginReturnProc] ~ { shh: CARD32; smartsID: CARD32; nb: ROPE; { shh _ SunRPC.GetCard32[h]; }; { smartsID _ SunRPC.GetCard32[h]; }; [nb] _ Enable[h, shh, smartsID]; beginReturn[h]; { SunRPC.PutRope[h, nb]; }; }; GetCurrentPartyCaller: PROC [h: Handle, beginReturn: SunRPCBeginReturnProc] ~ { shh: CARD32; smartsID: CARD32; nb: ROPE; partyID: CARD32; { shh _ SunRPC.GetCard32[h]; }; { smartsID _ SunRPC.GetCard32[h]; }; [nb, partyID] _ GetCurrentParty[h, shh, smartsID]; beginReturn[h]; { SunRPC.PutRope[h, nb]; }; { SunRPC.PutCard32[h, partyID]; }; }; ReleasePartyCaller: PROC [h: Handle, beginReturn: SunRPCBeginReturnProc] ~ { shh: CARD32; partyID: CARD32; targetPartyID: CARD32; nb: ROPE; { shh _ SunRPC.GetCard32[h]; }; { partyID _ SunRPC.GetCard32[h]; }; { targetPartyID _ SunRPC.GetCard32[h]; }; [nb] _ ReleaseParty[h, shh, partyID, targetPartyID]; beginReturn[h]; { SunRPC.PutRope[h, nb]; }; }; GetPartyFromNumberCaller: PROC [h: Handle, beginReturn: SunRPCBeginReturnProc] ~ { shh: CARD32; partyID: CARD32; phoneNumber: ROPE; description: ROPE; nb: ROPE; newPartyID: CARD32; { shh _ SunRPC.GetCard32[h]; }; { partyID _ SunRPC.GetCard32[h]; }; { phoneNumber _ SunRPC.GetRope[h]; }; { description _ SunRPC.GetRope[h]; }; [nb, newPartyID] _ GetPartyFromNumber[h, shh, partyID, phoneNumber, description]; beginReturn[h]; { SunRPC.PutRope[h, nb]; }; { SunRPC.PutCard32[h, newPartyID]; }; }; EnumerateNamedConversationsCaller: PROC [h: Handle, beginReturn: SunRPCBeginReturnProc] ~ { shhh: CARD32; partyID: CARD32; nb: ROPE; candidates: CandidateList; { shhh _ SunRPC.GetCard32[h]; }; { partyID _ SunRPC.GetCard32[h]; }; [nb, candidates] _ EnumerateNamedConversations[h, shhh, partyID]; beginReturn[h]; { SunRPC.PutRope[h, nb]; }; { MProc33[h, candidates]; }; }; RegisterConversationCaller: PROC [h: Handle, beginReturn: SunRPCBeginReturnProc] ~ { shhh: CARD32; credentials: ThrushSunRPC.Credentials; name: ROPE; convType: ConvType; convAttributes: Entry; accessList: AccessList; nb: ROPE; { shhh _ SunRPC.GetCard32[h]; }; { credentials.partyID _ SunRPC.GetCard32[h]; credentials.smartsID _ SunRPC.GetCard32[h]; credentials.convID _ SunRPC.GetCard32[h]; credentials.state _ VAL[CARDINAL[SunRPC.GetCard32[h]]]; credentials.stateID _ SunRPC.GetCard32[h]; }; { name _ SunRPC.GetRope[h]; }; { convType _ VAL[CARDINAL[SunRPC.GetCard32[h]]]; }; { convAttributes _ UProc28[h]; }; { accessList _ UProc34[h]; }; [nb] _ RegisterConversation[h, shhh, credentials, name, convType, convAttributes, accessList]; beginReturn[h]; { SunRPC.PutRope[h, nb]; }; }; AddAttributesCaller: PROC [h: Handle, beginReturn: SunRPCBeginReturnProc] ~ { credentials: ThrushSunRPC.Credentials; convAttributes: Entry; partyAttributes: Entry; nb: ROPE; { credentials.partyID _ SunRPC.GetCard32[h]; credentials.smartsID _ SunRPC.GetCard32[h]; credentials.convID _ SunRPC.GetCard32[h]; credentials.state _ VAL[CARDINAL[SunRPC.GetCard32[h]]]; credentials.stateID _ SunRPC.GetCard32[h]; }; { convAttributes _ UProc28[h]; }; { partyAttributes _ UProc28[h]; }; [nb] _ AddAttributes[h, credentials, convAttributes, partyAttributes]; beginReturn[h]; { SunRPC.PutRope[h, nb]; }; }; RegisterServiceInterfaceCaller: PROC [h: Handle, beginReturn: SunRPCBeginReturnProc] ~ { shhh: CARD32; credentials: ThrushSunRPC.Credentials; interfaceSpecPattern: ThrushSunRPC.InterfaceSpec; nb: ROPE; interfaceSpec: ThrushSunRPC.InterfaceSpec; { shhh _ SunRPC.GetCard32[h]; }; { credentials.partyID _ SunRPC.GetCard32[h]; credentials.smartsID _ SunRPC.GetCard32[h]; credentials.convID _ SunRPC.GetCard32[h]; credentials.state _ VAL[CARDINAL[SunRPC.GetCard32[h]]]; credentials.stateID _ SunRPC.GetCard32[h]; }; { interfaceSpecPattern.interfaceName.type _ SunRPC.GetRope[h]; interfaceSpecPattern.interfaceName.instance _ SunRPC.GetRope[h]; interfaceSpecPattern.interfaceName.version.first _ SunRPC.GetCard32[h]; interfaceSpecPattern.interfaceName.version.last _ SunRPC.GetCard32[h]; interfaceSpecPattern.hostHint.net.net _ SunRPC.GetCard32[h]; interfaceSpecPattern.hostHint.host.host _ SunRPC.GetCard32[h]; interfaceSpecPattern.hostHint.socket.a _ SunRPC.GetCard32[h]; interfaceSpecPattern.hostHint.socket.b _ SunRPC.GetCard32[h]; interfaceSpecPattern.hostHint.socket.c _ SunRPC.GetCard32[h]; interfaceSpecPattern.hostHint.socket.d _ SunRPC.GetCard32[h]; interfaceSpecPattern.serviceID _ SunRPC.GetCard32[h]; interfaceSpecPattern.interfaceID _ SunRPC.GetCard32[h]; }; [nb, interfaceSpec] _ RegisterServiceInterface[h, shhh, credentials, interfaceSpecPattern]; beginReturn[h]; { SunRPC.PutRope[h, nb]; }; { SunRPC.PutRope[h, interfaceSpec.interfaceName.type]; SunRPC.PutRope[h, interfaceSpec.interfaceName.instance]; SunRPC.PutCard32[h, interfaceSpec.interfaceName.version.first]; SunRPC.PutCard32[h, interfaceSpec.interfaceName.version.last]; SunRPC.PutCard32[h, interfaceSpec.hostHint.net.net]; SunRPC.PutCard32[h, interfaceSpec.hostHint.host.host]; SunRPC.PutCard32[h, interfaceSpec.hostHint.socket.a]; SunRPC.PutCard32[h, interfaceSpec.hostHint.socket.b]; SunRPC.PutCard32[h, interfaceSpec.hostHint.socket.c]; SunRPC.PutCard32[h, interfaceSpec.hostHint.socket.d]; SunRPC.PutCard32[h, interfaceSpec.serviceID]; SunRPC.PutCard32[h, interfaceSpec.interfaceID]; }; }; GetConversationFromNameCaller: PROC [h: Handle, beginReturn: SunRPCBeginReturnProc] ~ { shhh: CARD32; partyID: CARD32; name: ROPE; nb: ROPE; cInfo: ConversationInfo; { shhh _ SunRPC.GetCard32[h]; }; { partyID _ SunRPC.GetCard32[h]; }; { name _ SunRPC.GetRope[h]; }; [nb, cInfo] _ GetConversationFromName[h, shhh, partyID, name]; beginReturn[h]; { SunRPC.PutRope[h, nb]; }; { SunRPC.PutCard32[h, cInfo.convID]; SunRPC.PutCard32[h, cInfo.numParties]; SunRPC.PutCard32[h, cInfo.numActive]; SunRPC.PutCard32[h, cInfo.numIdle]; SunRPC.PutCard32[h, cInfo.originator]; SunRPC.PutCard32[h, cInfo.conferenceHost.net.net]; SunRPC.PutCard32[h, cInfo.conferenceHost.host.host]; SunRPC.PutCard32[h, cInfo.conferenceHost.socket.a]; SunRPC.PutCard32[h, cInfo.conferenceHost.socket.b]; SunRPC.PutCard32[h, cInfo.conferenceHost.socket.c]; SunRPC.PutCard32[h, cInfo.conferenceHost.socket.d]; SunRPC.PutCard32[h, ORD[cInfo.convType]]; SunRPCPutBool[h, cInfo.bilateralConv]; SunRPC.PutCard32[h, cInfo.startTime]; MProc29[h, cInfo.convAttributes]; SunRPC.PutCard32[h, cInfo.moderator]; SunRPC.PutCard32[h, cInfo.commentator]; }; }; RegisterKeyCaller: PROC [h: Handle, beginReturn: SunRPCBeginReturnProc] ~ { shh: CARD32; credentials: ThrushSunRPC.Credentials; key: ThrushSunRPC.Key; reportNewKeys: BOOLEAN; nb: ROPE; keyIndex: CARD16; { shh _ SunRPC.GetCard32[h]; }; { credentials.partyID _ SunRPC.GetCard32[h]; credentials.smartsID _ SunRPC.GetCard32[h]; credentials.convID _ SunRPC.GetCard32[h]; credentials.state _ VAL[CARDINAL[SunRPC.GetCard32[h]]]; credentials.stateID _ SunRPC.GetCard32[h]; }; { FOR i35: CARDINAL IN [0..2) DO key[i35] _ SunRPC.GetCard32[h]; ENDLOOP; }; { reportNewKeys _ SunRPCGetBool[h]; }; [nb, keyIndex] _ RegisterKey[h, shh, credentials, key, reportNewKeys]; beginReturn[h]; { SunRPC.PutRope[h, nb]; }; { SunRPC.PutCard32[h, keyIndex]; }; }; DeregisterCaller: PROC [h: Handle, beginReturn: SunRPCBeginReturnProc] ~ { shh: CARD32; smartsID: CARD32; nb: ROPE; { shh _ SunRPC.GetCard32[h]; }; { smartsID _ SunRPC.GetCard32[h]; }; [nb] _ Deregister[h, shh, smartsID]; beginReturn[h]; { SunRPC.PutRope[h, nb]; }; }; SunRPCBeginReturnProc: TYPE ~ PROC [h: Handle]; Server: SunRPC.ServerProc ~ { ENABLE { }; beginReturn: SunRPCBeginReturnProc ~ { SunRPC.StartReply[h]; }; doReply _ TRUE; replyTimeToLive _ 2; SELECT proc FROM 12 => LookupServiceInterfaceCaller[h, beginReturn]; 22 => RegisterCaller[h, beginReturn]; 26 => DisableCaller[h, beginReturn]; 9 => DescribePartyCaller[h, beginReturn]; 27 => VisitCaller[h, beginReturn]; 21 => GetNumbersForRNameCaller[h, beginReturn]; 15 => UnregisterKeyCaller[h, beginReturn]; 23 => CheckInCaller[h, beginReturn]; 0 => CreateConversationCaller[h, beginReturn]; 29 => UnvisitSelfCaller[h, beginReturn]; 4 => GetConversationInfoCaller[h, beginReturn]; 14 => GetKeyTableCaller[h, beginReturn]; 18 => GetPartyFromFeepNumCaller[h, beginReturn]; 3 => ReportActionCaller[h, beginReturn]; 16 => GetPartyCaller[h, beginReturn]; 8 => GetPartyInfoCaller[h, beginReturn]; 2 => AdvanceCaller[h, beginReturn]; 1 => AlertCaller[h, beginReturn]; 28 => UnvisitCaller[h, beginReturn]; 25 => EnableCaller[h, beginReturn]; 19 => GetCurrentPartyCaller[h, beginReturn]; 20 => ReleasePartyCaller[h, beginReturn]; 17 => GetPartyFromNumberCaller[h, beginReturn]; 7 => EnumerateNamedConversationsCaller[h, beginReturn]; 5 => RegisterConversationCaller[h, beginReturn]; 10 => AddAttributesCaller[h, beginReturn]; 11 => RegisterServiceInterfaceCaller[h, beginReturn]; 6 => GetConversationFromNameCaller[h, beginReturn]; 13 => RegisterKeyCaller[h, beginReturn]; 24 => DeregisterCaller[h, beginReturn]; ENDCASE => ERROR SunRPC.Error[$wrongProc]; }; SunRPCGetBool: PROC [h: SunRPC.Handle] RETURNS [BOOL] ~ INLINE { RETURN [SunRPC.GetCard32[h] # 0] }; SunRPCPutBool: PROC [h: SunRPC.Handle, bool: BOOL] ~ INLINE { SunRPC.PutCard32[h, IF bool THEN 1 ELSE 0] }; MProc25: PROC [h: Handle, val: VisitorList] ~ { SunRPC.PutCard32[h, val.length]; FOR i36: CARDINAL IN [0..val.length) DO SunRPC.PutCard32[h, val.body[i36]]; ENDLOOP; }; MProc30: PROC [h: Handle, val: ThrushSunRPC.Keys] ~ { SunRPC.PutCard32[h, val.length]; FOR i37: CARDINAL IN [0..val.length) DO FOR i38: CARDINAL IN [0..2) DO SunRPC.PutCard32[h, val.body[i37][i38]]; ENDLOOP; ENDLOOP; }; UProc28: PROC [h: Handle] RETURNS [res: Entry] ~ { { length40: CARDINAL ~ SunRPC.GetCard32[h]; res _ NEW[EntryObject[length40]]; FOR i39: CARDINAL IN [0..length40) DO res.body[i39].type _ SunRPC.GetRope[h]; res.body[i39].value _ SunRPC.GetRope[h]; ENDLOOP; }; }; MProc31: PROC [h: Handle, val: PartyList] ~ { SunRPC.PutCard32[h, val.length]; FOR i41: CARDINAL IN [0..val.length) DO SunRPC.PutCard32[h, val.body[i41].partyID]; SunRPC.PutRope[h, val.body[i41].name]; SunRPC.PutCard32[h, val.body[i41].intendedPartyID]; SunRPC.PutRope[h, val.body[i41].intendedName]; SunRPC.PutRope[h, val.body[i41].type]; SunRPC.PutCard32[h, ORD[val.body[i41].state]]; SunRPC.PutCard32[h, val.body[i41].numConvs]; SunRPCPutBool[h, val.body[i41].enabled]; SunRPCPutBool[h, val.body[i41].voicePath]; SunRPCPutBool[h, val.body[i41].partyActive]; SunRPCPutBool[h, val.body[i41].partyEngaged]; SunRPC.PutCard32[h, val.body[i41].socket.net.net]; SunRPC.PutCard32[h, val.body[i41].socket.host.host]; SunRPC.PutCard32[h, val.body[i41].socket.socket.a]; SunRPC.PutCard32[h, val.body[i41].socket.socket.b]; SunRPC.PutCard32[h, val.body[i41].socket.socket.c]; SunRPC.PutCard32[h, val.body[i41].socket.socket.d]; MProc29[h, val.body[i41].partyAttributes]; ENDLOOP; }; UProc34: PROC [h: Handle] RETURNS [res: AccessList] ~ { { length43: CARDINAL ~ SunRPC.GetCard32[h]; res _ NEW[AccessListObject[length43]]; FOR i42: CARDINAL IN [0..length43) DO res.body[i42] _ SunRPC.GetRope[h]; ENDLOOP; }; }; MProc33: PROC [h: Handle, val: CandidateList] ~ { SunRPC.PutCard32[h, val.length]; FOR i44: CARDINAL IN [0..val.length) DO SunRPC.PutCard32[h, val.body[i44].convID]; SunRPC.PutCard32[h, val.body[i44].numParties]; SunRPC.PutCard32[h, val.body[i44].numActive]; SunRPC.PutCard32[h, val.body[i44].numIdle]; SunRPC.PutCard32[h, val.body[i44].originator]; SunRPC.PutCard32[h, val.body[i44].conferenceHost.net.net]; SunRPC.PutCard32[h, val.body[i44].conferenceHost.host.host]; SunRPC.PutCard32[h, val.body[i44].conferenceHost.socket.a]; SunRPC.PutCard32[h, val.body[i44].conferenceHost.socket.b]; SunRPC.PutCard32[h, val.body[i44].conferenceHost.socket.c]; SunRPC.PutCard32[h, val.body[i44].conferenceHost.socket.d]; SunRPC.PutCard32[h, ORD[val.body[i44].convType]]; SunRPCPutBool[h, val.body[i44].bilateralConv]; SunRPC.PutCard32[h, val.body[i44].startTime]; MProc29[h, val.body[i44].convAttributes]; SunRPC.PutCard32[h, val.body[i44].moderator]; SunRPC.PutCard32[h, val.body[i44].commentator]; ENDLOOP; }; MProc29: PROC [h: Handle, val: Entry] ~ { SunRPC.PutCard32[h, val.length]; FOR i45: CARDINAL IN [0..val.length) DO SunRPC.PutRope[h, val.body[i45].type]; SunRPC.PutRope[h, val.body[i45].value]; ENDLOOP; }; sunPgm: CARD _ 390909; -- decimal program number sunPgmVersion: CARD _ 1; theServer: SunRPC.Server; [] _ SunPMapLocal.UnsetLocal[program~sunPgm, version~sunPgmVersion]; -- in case server already running theServer _ SunRPC.CreateServer[pgm~sunPgm, serverProc~Server, version~sunPgmVersion]; [] _ SunPMapLocal.SetLocal[program~sunPgm, version~sunPgmVersion, protocol~SunPMap.ipProtocolUDP, port~Basics.Card16FromH[SunRPC.GetServerPort[theServer]]]; }... ^ ThPartySunRPCServerStub.mesa Copyright Σ 1989, 1990 by Xerox Corporation. All rights reserved. Adapted from ThPartyP909V1ServerImpl.Mesa Generated by PolleZ.pa at September 30, 1989 4:53:16 pm PDT using Sirocco [2.0] of February 10, 1989 6:26:26 pm PST Polle Zellweger (PTZ) May 23, 1990 6:57:42 pm PDT Types [h: Handle, c: Conversation, proc: CARD, clientData: REF] RETURNS [doReply: BOOL, replyTimeToLive: CARDINAL] ThPartySunRPCServer.Error => { -- (1 ) SunRPC.StartReply[h]; SunRPC.PutRope[h, ec]; SunRPC.PutRope[h, explanation]; GOTO Finished; }; SunRPC.PutRope[h, NIL]; -- no error SunRPC.PutRope[h, NIL]; -- no explanation No errors in ThParty interface. EXITS Finished => { NULL }; Unmarshal / Marshal Procs -- Initialize server Polle Zellweger (PTZ) May 8, 1990 9:09:52 pm PDT Mistake in original Thrush.cr = hand edits. Key definition: 3 elements to 2. changes to: UnregisterKeyCaller, RegisterKeyCaller, MProc30 Polle Zellweger (PTZ) May 23, 1990 6:53:02 pm PDT Change Get/PutCard16 to Get/PutCard32, because the former are not aligned on the wire. Change VAL[CARD32] to VAL[CARDINAL[CARD32]]. Κΐ•NewlineDelimiter ™šœ™JšœB™BJšœ)™)Jšœ;™;Jšœ7™7J™1—Icode˜šΟk ˜ Kšœœ˜Kšœœ˜Kšœ œ˜*Jšœ˜Jšœ˜Jšœ˜Jšœ ˜ —K˜šΠlnœœ˜&Kšœ6˜=Kšœ$˜(—K˜™K˜Kšœœ˜K˜—šΟnœœ4˜VKšœœ˜ K˜&Kšœœ˜Kšœœ˜ Kšœœ˜ K˜*K˜˜Kšœ˜K˜—˜Kšœ*˜*Kšœ+˜+Kšœ)˜)Kšœœœ˜7Kšœ*˜*K˜—˜Kšœ#˜#K˜—˜Kšœ˜K˜—K˜K˜WK˜K˜K˜˜Kšœ˜K˜—˜Kšœ4˜4Kšœ8˜8Kšœ?˜?Kšœ>˜>Kšœ4˜4Kšœ6˜6Kšœ5˜5Kšœ5˜5Kšœ5˜5Kšœ5˜5Kšœ-˜-Kšœ/˜/K˜—K˜K˜—šŸœœ4˜HKšœœ˜ Kšœœ˜ Kšœœ˜ Kšœœ˜K˜&K˜Kšœœ˜ K˜&K˜˜Kšœ˜K˜—˜Kšœ˜K˜—˜Kšœ˜K˜—˜Kšœ#˜#K˜—˜Kšœ#˜#Kšœ'˜'Kšœ.˜.Kšœ-˜-K˜—˜Kšœ$˜$Kšœ4˜4Kšœ6˜6Kšœ5˜5Kšœ5˜5Kšœ5˜5Kšœ5˜5K˜—K˜K˜WK˜K˜K˜˜Kšœ˜K˜—˜Kšœ)˜)Kšœ*˜*Kšœ(˜(Kšœœ˜,Kšœ)˜)K˜—K˜K˜—šŸ œœ4˜GKšœœ˜ Kšœ œ˜Kšœœ˜ K˜˜Kšœ˜K˜—˜Kšœ˜K˜—K˜K˜!K˜K˜K˜˜Kšœ˜K˜—K˜K˜—šŸœœ4˜MKšœ œ˜Kšœ œ˜Kšœœ˜ Kšœ œ˜Kšœœ˜ Kšœ œ˜Kšœ œ˜K˜K˜˜Kšœ˜K˜—˜Kšœ˜K˜—K˜K˜YK˜K˜K˜˜Kšœ˜K˜—˜Kšœ˜K˜—˜Kšœ˜K˜—˜Kšœ˜K˜—˜Kšœ˜K˜—˜K˜K˜—K˜K˜—šŸ œœ4˜EKšœœ˜ Kšœ œ˜Kšœœ˜K˜%Kšœœ˜ K˜˜Kšœ˜K˜—˜Kšœ"˜"K˜—˜Kšœ#˜#K˜—˜šœœœ˜Kšœ)˜)Kšœ˜—K˜—K˜K˜?K˜K˜K˜˜Kšœ˜K˜—K˜K˜—šŸœœ4˜RKšœœ˜ Kšœœ˜ Kšœ œ˜Kšœœ˜ Kšœ œ˜K˜˜Kšœ˜K˜—˜Kšœ˜K˜—K˜K˜DK˜K˜K˜˜Kšœ˜K˜—˜Kšœ˜K˜—˜Kšœ˜K˜—K˜K˜—šŸœœ4˜MKšœœ˜ K˜&K˜Kšœœ˜ K˜˜Kšœ˜K˜—˜Kšœ*˜*Kšœ+˜+Kšœ)˜)Kšœœœ˜7Kšœ*˜*K˜—˜šœœœ˜Kšœ˜Kšœ˜—K˜—K˜K˜/K˜K˜K˜˜Kšœ˜K˜—K˜K˜—šŸ œœ4˜GKšœœ˜ K˜&Kšœœ˜ K˜˜Kšœ˜K˜—˜Kšœ*˜*Kšœ+˜+Kšœ)˜)Kšœœœ˜7Kšœ*˜*K˜—K˜K˜$K˜K˜K˜˜Kšœ˜K˜—K˜K˜—šŸœœ4˜RKšœœ˜ K˜&K˜ Kšœœ˜ Kšœ œ˜K˜K˜Kšœœ˜Kšœœ˜ K˜"K˜˜Kšœ˜K˜—˜Kšœ*˜*Kšœ+˜+Kšœ)˜)Kšœœœ˜7Kšœ*˜*K˜—˜Kšœœœ˜+K˜—˜Kšœ˜K˜—˜Kšœ˜K˜—˜K˜K˜—˜K˜K˜—˜Kšœ!˜!K˜—K˜K˜ƒK˜K˜K˜˜Kšœ˜K˜—˜Kšœ,˜,Kšœ-˜-Kšœ+˜+Kšœœ˜/Kšœ,˜,Kšœ-˜-Kšœ.˜.Kšœ,˜,Kšœœ˜0Kšœ-˜-Kšœ$˜$Kšœ$˜$Kšœ%˜%K˜—K˜K˜—šŸœœ4˜KKšœœ˜ Kšœœ˜Kšœœ˜ K˜˜Kšœ˜K˜—˜Kšœ#˜#K˜—K˜K˜)K˜K˜K˜˜Kšœ˜K˜—K˜K˜—šŸœœ4˜SKšœœ˜ Kšœœ˜Kšœœ˜ K˜K˜˜Kšœ˜K˜—˜Kšœ˜K˜—K˜K˜2K˜K˜K˜˜Kšœ˜K˜—˜Kšœ"˜"Kšœ&˜&Kšœ%˜%Kšœ#˜#Kšœ&˜&Kšœ2˜2Kšœ4˜4Kšœ3˜3Kšœ3˜3Kšœ3˜3Kšœ3˜3Kšœœ˜)Kšœ&˜&Kšœ%˜%K˜!Kšœ%˜%Kšœ'˜'K˜—K˜K˜—šŸœœ4˜KKšœœ˜ K˜&Kšœœ˜ K˜ K˜˜Kšœ˜K˜—˜Kšœ*˜*Kšœ+˜+Kšœ)˜)Kšœœœ˜7Kšœ*˜*K˜—K˜K˜2K˜K˜K˜˜Kšœ˜K˜—˜K˜K˜—K˜K˜—šŸœœ4˜SKšœœ˜ Kšœ œ˜Kšœ œ˜Kšœœ˜ Kšœ œ˜K˜˜Kšœ˜K˜—˜Kšœ˜K˜—˜Kšœ˜K˜—K˜K˜AK˜K˜K˜˜Kšœ˜K˜—˜Kšœ ˜ K˜—K˜K˜—šŸœœ4˜LKšœœ˜ K˜"Kšœ œ˜Kšœœ˜Kšœœ˜ Kšœœ˜K˜˜Kšœ˜K˜—˜Kšœ*˜*Kšœ+˜+Kšœ)˜)Kšœœœ˜7Kšœ*˜*Kšœ+˜+Kšœ,˜,Kšœ*˜*Kšœœœ˜8Kšœ+˜+Kšœ-˜-Kšœ&˜&Kšœ'˜'Kšœ&˜&Kšœ&˜&K˜—˜Kšœ˜K˜—˜Kšœ$˜$K˜—K˜K˜VK˜K˜K˜˜Kšœ˜K˜—˜Kšœ&˜&K˜—K˜K˜—šŸœœ4˜HKšœœ˜ Kšœ œ˜Kšœœ˜ Kšœœ˜ Kšœœ˜ Kšœ œ˜K˜˜Kšœ˜K˜—˜Kšœ˜K˜—˜Kšœ˜K˜—˜Kšœ˜K˜—K˜K˜:K˜K˜K˜˜Kšœ˜K˜—˜Kšœ ˜ K˜—K˜K˜—šŸœœ4˜LKšœœ˜ K˜&Kšœ œ˜Kšœ œ˜Kšœœ˜ K˜K˜˜Kšœ˜K˜—˜Kšœ*˜*Kšœ+˜+Kšœ)˜)Kšœœœ˜7Kšœ*˜*K˜—˜Kšœ˜K˜—˜Kšœ˜K˜—K˜K˜EK˜K˜K˜˜Kšœ˜K˜—˜Kšœ&˜&Kšœ3˜3Kšœ7˜7Kšœ6˜6Kšœ4˜4Kšœ7˜7KšœC˜CKšœE˜EKšœD˜DKšœD˜DKšœD˜DKšœD˜DKšœœ#˜:Kšœ7˜7Kšœ6˜6K˜2Kšœ6˜6Kšœ8˜8Kšœ"˜"Kšœ#˜#Kšœ'˜'Kšœ)˜)Kšœ&˜&Kšœ(˜(K˜K˜—K˜K˜—šŸ œœ4˜GKšœœ˜ K˜&K˜ Kšœ œ˜Kšœœ˜ Kšœ œ˜K˜K˜Kšœ œ˜Kšœœ˜Kšœœ˜ K˜"K˜˜Kšœ˜K˜—˜Kšœ*˜*Kšœ+˜+Kšœ)˜)Kšœœœ˜7Kšœ*˜*K˜—˜Kšœœœ˜+K˜—˜Kšœ˜K˜—˜Kšœ˜K˜—˜Kšœ˜K˜—˜K˜K˜—˜K˜K˜—˜Kšœ˜K˜—˜Kšœ!˜!K˜—K˜K˜K˜K˜K˜˜Kšœ˜K˜—˜Kšœ,˜,Kšœ-˜-Kšœ+˜+Kšœœ˜/Kšœ,˜,Kšœ-˜-Kšœ.˜.Kšœ,˜,Kšœœ˜0Kšœ-˜-Kšœ$˜$Kšœ$˜$Kšœ%˜%K˜—K˜K˜—šŸ œœ4˜EKšœœ˜ K˜&Kšœœ˜Kšœ œ˜K˜K˜Kšœœ˜ K˜˜Kšœ˜K˜—˜Kšœ*˜*Kšœ+˜+Kšœ)˜)Kšœœœ˜7Kšœ*˜*K˜—˜Kšœ$˜$K˜—˜Kšœ˜K˜—˜K˜K˜—˜K˜K˜—K˜K˜\K˜K˜K˜˜Kšœ˜K˜—K˜K˜—šŸ œœ4˜GKšœœ˜ Kšœ œ˜Kšœœ˜K˜%Kšœœ˜ K˜˜Kšœ˜K˜—˜Kšœ"˜"K˜—˜Kšœ#˜#K˜—˜šœœœ˜Kšœ)˜)Kšœ˜—K˜—K˜K˜AK˜K˜K˜˜Kšœ˜K˜—K˜K˜—šŸ œœ4˜FKšœœ˜ Kšœ œ˜Kšœœ˜ K˜˜Kšœ˜K˜—˜Kšœ˜K˜—K˜K˜ K˜K˜K˜˜Kšœ˜K˜—K˜K˜—šŸœœ4˜OKšœœ˜ Kšœ œ˜Kšœœ˜ Kšœ œ˜K˜˜Kšœ˜K˜—˜Kšœ˜K˜—K˜K˜2K˜K˜K˜˜Kšœ˜K˜—˜Kšœ˜K˜—K˜K˜—šŸœœ4˜LKšœœ˜ Kšœ œ˜Kšœœ˜Kšœœ˜ K˜˜Kšœ˜K˜—˜Kšœ˜K˜—˜Kšœ$˜$K˜—K˜K˜4K˜K˜K˜˜Kšœ˜K˜—K˜K˜—šŸœœ4˜RKšœœ˜ Kšœ œ˜Kšœ œ˜Kšœ œ˜Kšœœ˜ Kšœ œ˜K˜˜Kšœ˜K˜—˜Kšœ˜K˜—˜Kšœ ˜ K˜—˜Kšœ ˜ K˜—K˜K˜QK˜K˜K˜˜Kšœ˜K˜—˜Kšœ ˜ K˜—K˜K˜—šŸ!œœ4˜[Kšœœ˜ Kšœ œ˜Kšœœ˜ K˜K˜˜Kšœ˜K˜—˜Kšœ˜K˜—K˜K˜AK˜K˜K˜˜Kšœ˜K˜—˜K˜K˜—K˜K˜—šŸœœ4˜TKšœœ˜ K˜&Kšœœ˜ K˜K˜K˜Kšœœ˜ K˜˜Kšœ˜K˜—˜Kšœ*˜*Kšœ+˜+Kšœ)˜)Kšœœœ˜7Kšœ*˜*K˜—˜Kšœ˜K˜—˜Kšœ œœ˜.K˜—˜K˜K˜—˜K˜K˜—K˜K˜^K˜K˜K˜˜Kšœ˜K˜—K˜K˜—šŸœœ4˜MK˜&K˜K˜Kšœœ˜ K˜˜Kšœ*˜*Kšœ+˜+Kšœ)˜)Kšœœœ˜7Kšœ*˜*K˜—˜K˜K˜—˜K˜K˜—K˜K˜FK˜K˜K˜˜Kšœ˜K˜—K˜K˜—šŸœœ4˜XKšœœ˜ K˜&K˜1Kšœœ˜ K˜*K˜˜Kšœ˜K˜—˜Kšœ*˜*Kšœ+˜+Kšœ)˜)Kšœœœ˜7Kšœ*˜*K˜—˜Kšœ<˜˜>Kšœ=˜=Kšœ=˜=Kšœ=˜=Kšœ=˜=Kšœ5˜5Kšœ7˜7K˜—K˜K˜[K˜K˜K˜˜Kšœ˜K˜—˜Kšœ4˜4Kšœ8˜8Kšœ?˜?Kšœ>˜>Kšœ4˜4Kšœ6˜6Kšœ5˜5Kšœ5˜5Kšœ5˜5Kšœ5˜5Kšœ-˜-Kšœ/˜/K˜—K˜K˜—šŸœœ4˜WKšœœ˜ Kšœ œ˜Kšœœ˜ Kšœœ˜ K˜K˜˜Kšœ˜K˜—˜Kšœ˜K˜—˜Kšœ˜K˜—K˜K˜>K˜K˜K˜˜Kšœ˜K˜—˜Kšœ"˜"Kšœ&˜&Kšœ%˜%Kšœ#˜#Kšœ&˜&Kšœ2˜2Kšœ4˜4Kšœ3˜3Kšœ3˜3Kšœ3˜3Kšœ3˜3Kšœœ˜)Kšœ&˜&Kšœ%˜%K˜!Kšœ%˜%Kšœ'˜'K˜—K˜K˜—šŸœœ4˜KKšœœ˜ K˜&K˜Kšœœ˜Kšœœ˜ Kšœ œ˜K˜˜Kšœ˜K˜—˜Kšœ*˜*Kšœ+˜+Kšœ)˜)Kšœœœ˜7Kšœ*˜*K˜—˜šœœœ˜Kšœ˜Kšœ˜—K˜—˜Kšœ!˜!K˜—K˜K˜FK˜K˜K˜˜Kšœ˜K˜—˜Kšœ˜K˜—K˜K˜—šŸœœ4˜JKšœœ˜ Kšœ œ˜Kšœœ˜ K˜˜Kšœ˜K˜—˜Kšœ˜K˜—K˜K˜$K˜K˜K˜˜Kšœ˜K˜—K˜K˜—Jšœœœ ˜/J˜šŸœ˜JšΟcœ  Q™lK˜šœ˜šœ ™&Jšœ™Kšœ™Kšœ™Kšœ ™Kšœ™—K˜—K˜šœ&˜&Jšœ˜Kšœœ  ™$šœœ ™*K™—K˜—K˜Kšœ œ˜Kšœ˜K˜šœ˜K˜4K˜&K˜%K˜*K˜#K˜0K˜+K˜%K˜/K˜)K˜0K˜)K˜1K˜)K˜&K˜)K˜$K˜"K˜%K˜$K˜-K˜*K˜0K˜8K˜1K˜+K˜6K˜4K˜)K˜(Kšœœ˜*—K˜š™Kšœœ™—K˜—K˜šœ™K˜š Ÿ œœœœœ˜@Kšœ˜#—šŸ œœœœ˜=Kšœœœœ˜-K˜—šŸœœ"˜/Kšœ ˜ šœœœ˜'Kšœ#˜#Kšœ˜—K˜—K˜šŸœœ(˜5Kšœ ˜ šœœœ˜'šœœœ˜Kšœ(˜(Kšœ˜—Kšœ˜—K˜—K˜šŸœœ œ˜2˜Kšœ œ˜)Kšœœ˜"šœœœ˜%Kšœ'˜'Kšœ(˜(Kšœ˜—K˜—K˜—K˜šŸœœ ˜-Kšœ ˜ šœœœ˜'Kšœ+˜+Kšœ&˜&Kšœ3˜3Kšœ.˜.Kšœ&˜&Kšœœ˜.Kšœ,˜,Kšœ(˜(Kšœ*˜*Kšœ,˜,Kšœ-˜-Kšœ2˜2Kšœ4˜4Kšœ3˜3Kšœ3˜3Kšœ3˜3Kšœ3˜3K˜*Kšœ˜—K˜—K˜šŸœœ œ˜7˜Kšœ œ˜)Kšœœ˜'šœœœ˜%Kšœ"˜"Kšœ˜—K˜—K˜—K˜šŸœœ$˜1Kšœ ˜ šœœœ˜'Kšœ*˜*Kšœ.˜.Kšœ-˜-Kšœ+˜+Kšœ.˜.Kšœ:˜:Kšœ<˜