+
    lHàj�‰  ã                  ó–  € R t ^ RIHt ^ RIt^ RIt^ RIt^ RIt^ RIHt ^ RI	H
t
Ht ^ RIHt ^ RIHt ^ RIHt ^ RIHt ^ R	IHt ^ R
IHt ^ RIHt ^ RIHt ^ RIHtHt ^ RIHtH t H!t!H"t" ^ RI#H$t$H%t% ^ RI&H't' ^ RI(H)t)H*t*H+t+ ^ RI,H-t-H.t.H/t/H0t0 Rt1Rt2Rt3R"t4R#t5R$t6R%t7R R lt8R R lt9R R lt:R R lt; ! R R4      t< ! R  R!4      t=R# )&z@Production coordinator for same-gateway hosted Discussion rooms.)ÚannotationsN)ÚCounter)ÚIteratorÚMapping)Úreplace)ÚPath)Ú
ModuleType)ÚAny)Úhosted_room_discussion)Úhosted_room_driver)Úhosted_room_links)Úhosted_rooms)ÚHostedRoomPolicyCheckpointÚPolicySnapshot)ÚGatewayRoomCatalogÚHostedMemberDispatchÚPROTOCOL_VERSIONÚ!room_grant_needs_dispatch_refresh)ÚHostedRoomBindingÚHostedRoomRuntime©ÚHostedRoomServerRPC)ÚPeerRunsHTTPClientÚPeerRunsHTTPErrorÚdigest_reauthorization_error)ÚHostedRoomPeerClientÚPeerHostedRoomTransportÚPeerMemberRouteÚbuild_member_dispatchç      @g      Ð?g      >@c               ó   € V ^8„  d   QhRR/# )é   ÚreturnÚfloat© )Úformats   "ÚD/home/ubuntu/.hermes/hermes-agent/tui_gateway/hosted_room_service.pyÚ__annotate__r'   (   s   € ÷ bñ b¨5ñ bó    c                 ó¸   €  \        \        P                  ! R R4      4      p V ^ 8”  d   V \
        ,           # R\
        ,           #   \        \        3 d    Rp  L6i ; i)ÚHERMES_AGENT_TIMEOUTÚ1800g        g      œ@)r#   ÚosÚgetenvÚ	TypeErrorÚ
ValueErrorÚ#_HOSTED_ROOM_TERMINAL_GRACE_SECONDS)Úagent_timeouts    r&   Ú!_hosted_room_turn_timeout_secondsr2   (   sX   € ðÜœbŸišiÐ(>ÀÓGÓHˆð +¨QÔ.ˆMÔ>aÕaÐa°FÔ>aÕaÐaøô ”zÐ"ô ØŠðús   ‚ A ÁAÁAc               ó    € V ^8„  d   QhRRRR/# )r!   Úexcr   r"   Úboolr$   )r%   s   "r&   r'   r'   0   s   € ÷ ?ñ ?Ð#4ð ?¸ñ ?r(   c                óN   € V P                   R9   ;'       d    V P                  R9   # )zDReturn whether the peer proves the scoped grant is already unusable.>   é‘  é“  >   Úinvalid_room_grantÚroom_reauthorization_required)Ústatus_codeÚ
error_code)r4   s   &r&   Ú_grant_revoke_is_terminalr=   0   s.   € à�?‰?˜jÑ(÷ ?ð ?¨S¯^©^ð @?ñ .?ð ?r(   c               ó    € V ^8„  d   QhRRRR/# )r!   Úobjr	   ÚnameÚstrr$   )r%   s   "r&   r'   r'   6   s   € ÷ .ñ .ˆsð .˜#ñ .r(   c                óD   € \        WR4      p\        V4      '       d   V# R# )zAOptional callable attribute of a duck-typed peer client, or None.N)ÚgetattrÚcallable)r?   r@   Úvalues   && r&   Ú_hookrF   6   s!   € ä�C˜tÓ$€EÜ˜U—O’Oˆ5Ð-¨Ð-r(   c               ó    € V ^8„  d   QhRRRR/# )r!   ÚroomúMapping[str, Any]r"   útuple[str, int]r$   )r%   s   "r&   r'   r'   <   s   € ÷ Kñ KÐ&ð K¨?ñ Kr(   c                óJ   € \        V R ,          4      \        V R,          4      3# )Úauthority_gateway_idÚauthority_epoch)rA   Úint)rH   s   &r&   Ú
_authorityrO   <   s#   € ÜˆtÐ*Õ+Ó,¬c°$Ð7HÕ2IÓ.JÐJÐJr(   c                  ó&  € ] tR t^@tRtRRRRRR/R R lltR tR	 R
 lt]R R l4       t	R R lt
R R ltR R ltR R ltR R ltR R ltR R ltRR/R R lltR R  ltR! R" ltR# R$ ltR%RR&R/R' R( lltRXR) R* lltR+ R, ltR- R. ltR/ R0 ltR1 R2 ltR3 R4 ltR5 R6 ltRXR7 R8 lltRXR9 R: lltR; R< ltR= R> lt R? R@ lt!RA RB lt"RC RD lt#RE RF lt$RGR/RH RI llt%RJ RK lt&RLRM/RN RO llt'RP RQ lt(RRR/RS RT llt)RXRU RV llt*RWt+R# )YÚHostedRoomServicez?Own the hosted Discussion policy and its transport-free worker.Údb_pathNÚpeer_routesÚpeer_clientsc          
     ó,   € V ^8„  d   QhRRRRRRRRR	R
/# )r!   Úserverr   rR   zPath | str | NonerS   z0Mapping[tuple[str, str], PeerMemberRoute] | NonerT   z)Mapping[Any, HostedRoomPeerClient] | Noner"   ÚNoner$   )r%   s   "r&   r'   ÚHostedRoomService.__annotate__C   sB   € ÷ Fñ FØ ðFØ.?ðFàEðFð @ðFð LPñFr(   c               	ó  € T\        T;'       g    \        P                  ! 4       4      uV n        V n        \        P
                  ! V P                  4       \        P                  ! 4       V n        / V n	        \        V P                  4      V n        V P                  V4      V n        R V n        / V n        / V n        / V n         V P%                  4        \+        T;'       g    / 4      p\+        T;'       g    / 4      P-                  4        FQ  w  rxW€P                   V&   VP/                  WvP/                  VP0                  4      4      p	V	f   KC  W�P"                  V&   KS  	  \3        V P                  V P4                  V P                  V P6                  V P8                  V P:                  V P<                  V P>                  \@        \B        \E        4       R7      V n#        R #   \&         d   p\)        T4      T n         R p?EL+R p?ii ; i)N)rR   ÚroomsÚrpcÚtransport_resolverÚ	turn_lockÚprepare_roomÚpublish_terminalÚpending_actionÚpoll_interval_secondsÚactive_poll_interval_secondsÚturn_timeout_seconds)$r   r   Údefault_db_pathrV   rR   Úprune_disbanded_roomsÚ	threadingÚRLockÚ_policy_lockÚ_pending_actionsr   Úpolicy_checkpointÚ	_make_rpcr[   Ú_link_load_errorÚ_peer_route_statusrS   rT   Ú_load_stored_linksÚ	ExceptionrA   ÚdictÚitemsÚgetÚtarget_install_idr   ÚbindingsÚ_resolve_member_transportÚ
_turn_lockr^   r_   Ú_set_pending_actionÚ"_HOSTED_ROOM_IDLE_FALLBACK_SECONDSÚ _HOSTED_ROOM_ACTIVE_POLL_SECONDSr2   Úruntime)
ÚselfrV   rR   rS   rT   r4   Úsupplied_clientsÚkeyÚrouteÚclients
   &&$$$     r&   Ú__init__ÚHostedRoomService.__init__C   s—  € ð %+¬D°×1ZÐ1Z¼L×<XÒ<XÓ<ZÓ,[Ð!ˆŒ�T”\Ü×*Ò*¨4¯<©<Ô8Ü%ŸOšOÓ-ˆÔØGIˆÔÜ!;¸D¿L¹LÓ!IˆÔØ—>‘> &Ó)ˆŒØ $ˆÔØ>@ˆÔØCEˆÔØ8:ˆÔð	-Ø×#Ñ#Ô%ô   × 2Ð 2°Ó3ÐÜ˜{×0Ð0¨bÓ1×7Ñ7Ö9‰JˆCØ$)×Ñ˜SÑ!Ø%×)Ñ)¨#×/CÑ/CÀE×D[ÑD[Ó/\Ó]ˆFØÔ!Ø)/×!Ñ! #Ó&ñ	 :ô
 )Ø—L‘L¨¯©¸4¿8¹8Ø#×=Ñ=ÈÏÉØ×*Ñ*¸T×=RÑ=RØ×3Ñ3Ü"DÜ)IÜ!BÓ!DôFˆŽøô ô 	-Ü$'¨£HˆD×!Ò!ûð	-ús   ÃG ÇHÇ)G?Ç?Hc                	ó   € \        V4      # ©Nr   )r{   rV   s   &&r&   rk   ÚHostedRoomService._make_rpcd   s   € Ü" 6Ó*Ð*r(   c               ó   € V ^8„  d   QhRR/# ©r!   r"   rW   r$   )r%   s   "r&   r'   rX   g   s   € ÷ 5ñ 5 Dñ 5r(   c                ó,  € \         P                  ! V P                  4      w  r\        V4      pV EF?  pVP                  VP
                  3VP                  re\        VP                  9  d.   VP                  VP                   RVP
                   R24       Ki  \        \        P                  ! 4       VP
                  VP                  VP                  VP                  VP                   P"                  VP$                  VP&                  VP(                  R7	      V P*                  V&   \-        VP.                  RV P                  R7      V P0                  V&   VP2                  V P4                  V&   EKB  	  V'       d   RP7                  V4      V n        R# R# )zIRehydrate persisted peer routes; collect per-link errors into one string.Ú:z:protocol-upgrade-required)	Úhome_install_idÚ	member_idrs   Útarget_profileÚcapability_digestÚexecution_policy_digestÚcancellation_scope_idÚtrace_idÚgrantÚ )Úbase_urlÚapi_keyÚreceipt_db_pathÚ,N)r   Úload_room_links_tolerantrR   ÚlistÚroom_idrŠ   Úcatalogr   Úprotocol_versionsÚappendr   r   Úlocal_authority_gateway_idÚinstallation_idr‹   Úcatalog_digestÚexecution_policyÚpolicy_digestrŽ   r�   r�   rS   r   Ú
target_urlrT   Ústatusrm   Újoinrl   )r{   Ústored_linksÚload_errorsÚerrorsÚstoredr}   r™   s   &      r&   rn   Ú$HostedRoomService._load_stored_linksg   s>  € ä$5×$NÒ$NÈtÏ|É|Ó$\Ñ!ˆÜ�kÓ"ˆÜ"ˆFØ"ŸN™N¨F×,<Ñ,<Ð=¸v¿~¹~�Ü w×'@Ñ'@Ô@Ø—‘ §¡Ð 0°°&×2BÑ2BÐ1CÐC]Ð^Ô_ÙÜ$3Ü ,× GÒ GÓ IØ ×*Ñ*¸g×>UÑ>UØ%×4Ñ4È×H^ÑH^Ø(/×(@Ñ(@×(NÑ(NØ&,×&BÑ&BÈVÏ_É_Ø—l‘lô%$ˆD×Ñ˜SÑ!ô &8Ø×*Ñ*°BÈÏÉô&VˆD×Ñ˜cÑ"à+1¯=©=ˆD×#Ñ# CÔ(ñ #÷ Ø$'§H¡H¨VÓ$4ˆDÖ!ñ r(   c               ó   € V ^8„  d   QhRR/# )r!   r"   r   r$   )r%   s   "r&   r'   rX   ~   s   € ÷ #ñ #�dñ #r(   c                	ó.   € V P                   P                  # rƒ   )rR   Úparent©r{   s   &r&   ÚrootÚHostedRoomService.root}   s   € à�|‰|×"Ñ"Ð"r(   c               ó   € V ^8„  d   QhRR/# )r!   r"   útuple[str, ...]r$   )r%   s   "r&   r'   rX   �   s   € ÷ 'ñ ' ñ 'r(   c                	óè   aa€ ^ RI HoHo R0V P                  R,          r!VP	                  4       '       d+   VP                  VV3R lVP                  4        4       4       \        \        V4      4      # )é    )Únamed_profile_has_identityÚnamed_profile_is_deletedÚdefaultÚprofilesc              3  óò   <"  € T Fl  pVP                  4       '       g   K  VP                  P                  R 4      '       d   K>  S! V4      '       g   KN  S! V4      '       d   K^  VP                  x € Kn  	  R# 5i)Ú.N)Úis_dirr@   Ú
startswith)Ú.0Úpathr³   r´   s   & €€r&   Ú	<genexpr>Ú3HostedRoomService.local_profiles.<locals>.<genexpr>‰   sZ   øé € ð ]Ù&<˜dØ—;‘;—=ô Ø)-¯©×)=Ñ)=¸c×)Bô á.¨t×4ô á=UÐVZ×=[ô �—	–	Ó&<ùs   ƒA7 A7ÁA7ÁA7Á#A7)	Úhermes_constantsr³   r´   r­   r¹   ÚupdateÚiterdirÚtupleÚsorted)r{   r¶   Úprofiles_dirr³   r´   s   &  @@r&   Úlocal_profilesÚ HostedRoomService.local_profiles�   s`   ù€ ßYà"+ ¨d¯i©i¸*Õ.D�,Ø×Ñ× Ò ð �O‰Oõ ]Ø&2×&:Ñ&:Ô&<ó]ô ]ô ”V˜HÓ%Ó&Ð&r(   c               ó    € V ^8„  d   QhRRRR/# )r!   rH   rI   r"   r°   r$   )r%   s   "r&   r'   rX   �   s   € ÷ %ñ %Ð"3ð %¸ñ %r(   c                ó"   € V P                  4       # )z­Profiles a SAVED room's roster is checked against. New groups use ``local_profiles``;
a subclass may keep a seated member valid after it stops being eligible for new groups.©rÅ   ©r{   rH   s   &&r&   Úroom_profilesÚHostedRoomService.room_profiles�   s   € ð ×"Ñ"Ó$Ð$r(   c               ó   € V ^8„  d   QhRR/# )r!   r"   ztuple[HostedRoomBinding, ...]r$   )r%   s   "r&   r'   rX   ”   s   € ÷ Fñ FÐ7ñ Fr(   c                	ó
  a€ \         P                  ! 4       o\        ;QJ d5    . V3R  l\         P                  ! V P                  4       4       F  NK  	  5# ! V3R  l\         P                  ! V P                  4       4       4      # )c              3  ó¢   <"  € T FD  p\        VR ,          4      S8X  g   K  \        \        VR,          4      .\        V4      O5!  x € KF  	  R# 5i)rL   r˜   N)rA   r   rO   )r»   rH   Úlocal_gateway_ids   & €r&   r½   Ú-HostedRoomService.bindings.<locals>.<genexpr>–   sL   øé € ð Fá=�Ü�4Ð.Õ/Ó0Ð4DÑDô GÔœc $ y¥/Ó2ÐF´ZÀÓ5E×FÐFÛ=ùs
   ƒA¡.A)r   rœ   rÂ   Ú
list_roomsrR   )r{   rÐ   s   &@r&   rt   ÚHostedRoomService.bindings”   si   ø€ Ü'×BÒBÓDÐßŒuô Fä$×/Ò/°·±Ô=óF�uð 	Fˆuô Fä$×/Ò/°·±Ô=óFó Fð 	Fr(   c               ó    € V ^8„  d   QhRRRR/# )r!   r˜   rA   r"   údict[str, Any]r$   )r%   s   "r&   r'   rX   ›   s   € ÷ Fñ F˜Sð F ^ñ Fr(   c                	óF   € \         P                  ! V P                  VR 7      # )©r˜   )r   Ú
room_staterR   )r{   r˜   s   &&r&   Ú_roomÚHostedRoomService._room›   s   € Ü×&Ò& t§|¡|¸WÔEÐEr(   c               ó    € V ^8„  d   QhRRRR/# )r!   r˜   rA   r"   rJ   r$   )r%   s   "r&   r'   rX   ž   s   € ÷ !ñ !¨ð !°ñ !r(   c                ó    € \        V P                  V4      4      w  r#V\        P                  ! 4       8w  d   \        P                  ! R4      hW#3# )zJ(gateway_id, epoch) of a room this gateway owns; conflict error otherwise.z.This Group Chat is managed by another gateway.)rO   rÙ   r   rœ   ÚAuthorityConflictError)r{   r˜   Ú
gateway_idÚepochs   &&  r&   Ú_owned_authorityÚ"HostedRoomService._owned_authorityž   sJ   € ä& t§z¡z°'Ó':Ó;Ñˆ
Øœ×@Ò@ÓBÔBÜ×5Ò5Ø@óBð BàÐ Ð r(   c               ó    € V ^8„  d   QhRRRR/# )r!   ÚprofilerA   r"   z'contextlib.AbstractContextManager[Path]r$   )r%   s   "r&   r'   rX   ¦   s   € ÷ 5ñ 5 #ð 5Ð*Qñ 5r(   c                	ó4   € ^ RI Hp V! V P                  V4      # )r²   )Úacquire_turn_lock)Útools.bot_relayrå   r­   )r{   rã   rå   s   && r&   rv   ÚHostedRoomService._turn_lock¦   s   € Ý5Ù  §¡¨GÓ4Ð4r(   c               ó   € V ^8„  d   QhRR/# r†   r$   )r%   s   "r&   r'   rX   ª   s   € ÷ ñ �tñ r(   c                	ó:   € V P                   P                  4        R # rƒ   )rz   Ústartr¬   s   &r&   rê   ÚHostedRoomService.startª   s   € Ø�‰×ÑÖr(   Útimeoutr   c               ó    € V ^8„  d   QhRRRR/# )r!   rì   r#   r"   r5   r$   )r%   s   "r&   r'   rX   ­   s   € ÷ 2ñ 2˜uð 2¨tñ 2r(   c               	ó:   € V P                   P                  VR 7      # ))rì   )rz   Ústop)r{   rì   s   &$r&   rï   ÚHostedRoomService.stop­   s   € Ø�|‰|× Ñ ¨Ð Ó1Ð1r(   c               ó   € V ^8„  d   QhRR/# r†   r$   )r%   s   "r&   r'   rX   °   s   € ÷ ñ ˜ñ r(   c                	ó:   € V P                   P                  4        R # rƒ   )rz   Úwakeupr¬   s   &r&   ró   ÚHostedRoomService.wakeup°   s   € Ø�‰×ÑÖr(   c               ó    € V ^8„  d   QhRRRR/# )r!   r˜   rA   r"   zIterator[Mapping[str, Any]]r$   )r%   s   "r&   r'   rX   ³   s   € ÷ Wñ W 3ð WÐ5Pñ Wr(   c              #  	óx   "  € V F-  p\         P                  ! V P                  WR 7       Rj  x€L
  K/  	  R#  L
5i))r˜   r¢   N)ÚdriverÚ
list_tasksrR   )r{   r˜   Ústatusesr¢   s   &&& r&   Ú_list_tasksÚHostedRoomService._list_tasks³   s,   é € ÛˆFÜ×(Ò(¨¯©¸wÔV×VÒVó ÙVùs   ‚+:­8®:c               ó    € V ^8„  d   QhRRRR/# )r!   Úlinkr	   r"   rW   r$   )r%   s   "r&   r'   rX   ·   s   € ÷ cñ c ð c¨ñ cr(   c                óp   € \         P                  ! V P                  \         P                  ! R/ VB 4       R# )z>Persist one stored link (``make_stored_link`` keyword fields).Nr$   )r   Úsave_room_linkrR   Úmake_stored_link)r{   rý   s   &,r&   Ú
_save_linkÚHostedRoomService._save_link·   s&   € ä×(Ò(¨¯©Ô7H×7YÒ7YÑ7aÐ\`Ñ7aÖbr(   r¡   r™   c               ó4   € V ^8„  d   QhRRRRRRRRRR	R
RRR/# )r!   r˜   rA   rŠ   r~   r   r   r   r¡   ú
str | Noner™   úGatewayRoomCatalog | Noner"   rW   r$   )r%   s   "r&   r'   rX   »   sH   € ÷ ñ ØðØ*-ðØ6Eðà$ðà2<ðð +ðð 7;ñr(   c               ó.  € \        VR4      pVe   V! V P                  4       VeÂ   VP                  '       g!   \        W6P                  P
                  R7      pVP                  VP                  8w  g&   VP                  VP                  P
                  8w  d   \        R4      hVeA   V P                  WVVP                  VP                  VVP                  VP                  R7       V P                  W3W44       V P                  P!                  4        R# )zDRegister one verified route and optionally persist its scoped grant.Úbind_receipt_storeN)r�   z,peer route does not match its target catalog©r˜   rŠ   r¡   r‹   r�   r™   rŽ   r�   )rF   rR   r�   r   rŸ   r    rŒ   rž   r/   r  r‹   r�   rŽ   r�   Ú_publish_routerz   ró   )r{   r˜   rŠ   r~   r   r¡   r™   Ú
bind_stores   &$$$$$$ r&   Úregister_peer_routeÚ%HostedRoomService.register_peer_route»   sñ   € ô
 ˜6Ð#7Ó8ˆ
ØÒ!Ù�t—|‘|Ô$ØÒØ×0×0Ð0ÜØ×3KÑ3K×3YÑ3Yô[�ð ×'Ñ'¨7×+AÑ+AÔAØ×0Ñ0°G×4LÑ4L×4ZÑ4ZÔZÜ Ð!OÓPÐPØÒ%Ø—‘Ø#ÀZØ#(×#7Ñ#7¸u¿{¹{ÐT[Ø*/×*EÑ*EÐPU×P^ÑP^ð  ô `ð 	×Ñ˜WÐ0°%Ô@Ø�‰×ÑÖr(   c               ó$   € V ^8„  d   QhRRRRRR/# )r!   r}   ztuple[str, str]r~   r   r"   rW   r$   )r%   s   "r&   r'   rX   Õ   s"   € ÷ 0ñ 0 /ð 0¸/ð 0Ð[_ñ 0r(   c                óÊ   € V P                   ;_uu_ 4        VRuV P                  V&   V P                  V&   Ve   W0P                  V&   RRR4       R#   + '       g   i     R# ; i)zJMake a persisted route live as ``ready`` (and bind its client when given).ÚreadyN)rh   rS   rm   rT   )r{   r}   r~   r   s   &&&&r&   r	  Ú HostedRoomService._publish_routeÕ   sS   € à××ÓØBGÈÐ?ˆD×Ñ˜SÑ! 4×#:Ñ#:¸3Ñ#?ØÒ!Ø)/×!Ñ! #Ñ&÷ ××Òús   •2AÁA"	c               ó    € V ^8„  d   QhRRRR/# )r!   r˜   rA   r"   rN   r$   )r%   s   "r&   r'   rX   Ü   s   € ÷ ñ ¨#ð °#ñ r(   c                ó0  € V P                   ;_uu_ 4        V P                  P                  4        UUu. uF  w  r#V^ ,          V8X  g   K  W#3NK  	  pppRRR4       X FM  w  r#\        V P                  P                  V4      R4      pVf   \        R4      h V! VP                  R7       KO  	  \        P                  ! V P                  VR7       V P                   ;_uu_ 4        V FA  w  r'V P                  V P                  V P                  3 F  pVP                  VR4       K  	  KC  	  RRR4       \        V4      # u uppi   + '       g   i     Lú; i  \         d   p\        T4      '       g   h  Rp?EK  Rp?ii ; i  + '       g   i     L`; i)z�Revoke and forget every scoped peer route for one room; an unreachable target
leaves the room intact for retry rather than a false disband with a live grant.NÚrevoke_grantz(peer room grant cannot be revoked safely)r�   r×   )rh   rS   rq   rF   rT   rr   ÚRuntimeErrorr�   r   r=   r   Údelete_room_link_recordsrR   rm   ÚpopÚlen)	r{   r˜   r}   r~   ÚroutesÚrevoker4   Ú_routeÚtables	   &&       r&   Úrevoke_room_routesÚ$HostedRoomService.revoke_room_routesÜ   sG  € ð ××ÓØ59×5EÑ5E×5KÑ5KÔ5MÔcÑ5M¡z sÐQTÐUVÕQWÐ[bÑQb”l�s“lÑ5MˆFÑc÷ ã ‰JˆCÜ˜4×,Ñ,×0Ñ0°Ó5°~ÓFˆFØŠ~Ü"Ð#MÓNÐNðÙ˜UŸ[™[×)ñ !ô 	×-Ò-¨d¯l©lÀGÕLØ××ÓÛ%‘�Ø"×.Ñ.°×0GÑ0GÈ×IZÑIZÓ[�EØ—I‘I˜c 4Ö(ó \ñ  &÷ ô �6‹{Ðùó d÷ ×ûô %ô Ü0°×5Ò5Øö 6ûðú÷ ×úsG   •E³E 
Á
E 
ÁEÂEÃ%AFÅ EÅE	ÅFÅ$E=Å=FÆF	c               ó    € V ^8„  d   QhRRRR/# )r!   Úbindingr   ÚtaskrI   r$   )r%   s   "r&   r'   rX   ñ   s    € ÷  cñ  cÐ1Bð  cÐJ[ñ  cr(   c                	óÆ  a a€ VP                  R / 4      p\        VP                  R4      ;'       g    VP                  R4      ;'       g    R4      pVP                  V3oS P                  P                  S4      pVf:   S P	                  VP                  V4      '       d   \        R4      hS P                  # S P                  P                  S4      pVf   \        R4      hVP                  R4      p\        VP                  R4      ;'       g    ^ 4      p\        VR	4      p	V	e<   \        V\        P                  4      '       d   V^ 8”  d   V	! VP                  VR
7       R VV 3R llp
\        Wj! R4      V
! R4      V
! R4      RVV 3R llR7      pS P                  WW[4       \!        YT\        VP                  R4      ;'       g    ^ 4      \#        VRR4      VR7      # )ÚpayloadÚtarget_member_idr‹   r‘   Núpeer room route is unavailablezpeer room client is unavailableÚidentityÚexecution_generationÚbind_observation)Útask_idr&  c               ó   € V ^8„  d   QhRR/# )r!   r¢   rA   r$   )r%   s   "r&   r'   ÚAHostedRoomService._resolve_member_transport.<locals>.__annotate__  s   € ÷ 	@ñ 	@˜sñ 	@r(   c                ó   <a € VVV 3R  l# )c                 ó.   <€ SP                   ! . S OSN5!  # rƒ   )Ú_set_route_status)r}   r{   r¢   s   €€€r&   Ú<lambda>ÚQHostedRoomService._resolve_member_transport.<locals>.set_status.<locals>.<lambda>  s   ø€ ˜4×1Ò1Ð?°3Ð?¸Ô?r(   r$   )r¢   r}   r{   s   f€€r&   Ú
set_statusÚ?HostedRoomService._resolve_member_transport.<locals>.set_status  s	   ù€ Þ?Ð?r(   r  Úneeds_reauthorizationÚunavailablec                ó2   <€ SP                   ! . SOV NVN5!  # rƒ   )Ú_rotate_route_grant)r�   r™   r}   r{   s   &&€€r&   r.  Ú=HostedRoomService._resolve_member_transport.<locals>.<lambda>  s(   ø€ °T×5MÒ5Mð 6&Øð6&Øð6&Ø$ô6&r(   )Úon_readyÚon_reauthorizationÚon_unavailableÚon_refreshedÚsource_event_seqr(  )r  r~   r   r;  r(  r&  rƒ   )rr   rA   r˜   rS   Ú_member_is_peerr  r[   rT   rN   rF   Ú
isinstancer÷   ÚTaskIdentityr(  Ú_RouteStatusPeerClientÚ_recover_peer_admissionr   rC   )r{   r  r   r"  rŠ   r~   r   r%  r&  r'  r0  Útracked_clientr}   s   f&&         @r&   ru   Ú+HostedRoomService._resolve_member_transportñ   s­  ù€ Ø—(‘(˜9 bÓ)ˆÜ˜Ÿ™Ð$6Ó7×^Ð^¸7¿;¹;ÐGWÓ;X×^Ð^Ð\^Ó_ˆ	Ø�‰ 	Ð*ˆØ× Ñ ×$Ñ$ SÓ)ˆØŠ=Ø×#Ñ# G§O¡O°Y×?Ò?Ü"Ð#CÓDÐDØ—8‘8ˆOØ×"Ñ"×&Ñ& sÓ+ˆØŠ>ÜÐ@ÓAÐAØ—8‘8˜JÓ'ˆÜ" 4§8¡8Ð,BÓ#C×#HÐ#HÀqÓIÐÜ  Ð);Ó<ÐàÒ(¬Z¸Ä&×BUÑBU×-VÒ-VØ$ qÔ(Ù X×%5Ñ%5ÐL`Õa÷	@ñ 	@ä/Ø˜Z¨Ó0Ù)Ð*AÓBÙ% mÓ4÷&ô	'ˆð 	×$Ñ$ W°EÔJÜ&Ø°Ü  §¡Ð-?Ó!@×!EÐ!EÀAÓFÜ˜H i°Ó6ÐMaôcð 	cr(   c          
     ó,   € V ^8„  d   QhRRRRRRRRR	R
/# )r!   r  r   r   rI   r~   r   r   r	   r"   rW   r$   )r%   s   "r&   r'   rX     s;   € ÷ Cñ CØ(ðCØ0AðCØJYðCàðCàñCr(   c                óð  € \        VR4      pVP                  R4      VP                  R4      rv\        VP                  R4      ;'       g    ^ 4      pVeT   \        V\        P
                  4      '       d4   \        V\        4      '       d   V^8  g   VP                  R4      R9  d   R# VP                  R4      p	\        VP                  R4      ;'       g    ^ 4      p
\        V	\        4      '       d   V
^8  g   VP                  '       g   \        R	4      h\        WVP                  VP                  VP                  VW©VP                  R
7	      pV! VP                  4       VP                  R7       R# )zARediscover an admitted peer run without advancing its generation.Úrecover_dispatchr%  r"  r&  Nr¢   Úpromptr;  z8peer room admission identity is unavailable for recovery)	r  r~   r˜   r(  r‹   r&  r;  rF  r�   )Údispatchr�   >   ÚrunningÚstoppingÚindeterminate)rF   rr   rN   r=  r÷   r>  r   rA   r�   r  r   r˜   r(  r‹   Ú
as_mappingr�   )r{   r  r   r~   r   Úrecoverr%  r"  r&  rF  r;  rG  s   &&&&&       r&   r@  Ú)HostedRoomService._recover_peer_admission  s(  € ô ˜Ð 2Ó3ˆØ ŸH™H ZÓ0°$·(±(¸9Ó2E�'Ü" 4§8¡8Ð,BÓ#C×#HÐ#HÀqÓIÐàŠO¤:¨h¼×8KÑ8K×#LÒ#LÜ˜g¤w×/Ò/Ð3GÈ!Ô3KØ�x‰x˜Ó!Ð)QÔQÙØ—‘˜XÓ&ˆÜ˜wŸ{™{Ð+=Ó>×CÐCÀ!ÓDÐÜ˜&¤#×&Ò&Ð*:¸QÔ*>ÀeÇnÇnÀnÜÐYÓZÐZÜ(Ø°(×2BÑ2BÈH×L\ÑL\Ø ×/Ñ/ÐFZØ-ÀuÇ~Á~ôWˆñ 	˜×,Ñ,Ó.°e·k±k×Br(   c               ó$   € V ^8„  d   QhRRRRRR/# )r!   r˜   rA   rŠ   r"   r5   r$   )r%   s   "r&   r'   rX   )  s!   € ÷ ñ  sð °sð ¸tñ r(   c                	óš  € V P                  V4      P                  R 4      ;'       g    .  Fœ  p\        V\        4      '       g   K  \	        VP                  R4      ;'       g    VP                  R4      ;'       g    R4      V8X  g   K_  VP                  R4      p\        V\        4      ;'       d    VP                  R4      R8H  u # 	  R# )ÚmembersrŠ   rã   r‘   ÚtargetÚkindÚpeerF)rÙ   rr   r=  r   rA   )r{   r˜   rŠ   ÚmrQ  s   &&&  r&   r<  Ú!HostedRoomService._member_is_peer)  s£   € Ø—‘˜GÓ$×(Ñ(¨Ó3×9Ð9°rÒ9ˆAÜ˜!œW×%Ô%¬#Ø—E‘E˜+Ó&×@Ð@¨!¯%©%°	Ó*:×@Ð@¸bó+BØENö+OàŸ™˜x›�Ü! &¬'Ó2×SÐS°v·z±zÀ&Ó7IÈVÑ7SÒSñ	 :ñ
 r(   c               ó(   € V ^8„  d   QhRRRRRRRR/# )r!   r˜   rA   rŠ   r¢   r"   rW   r$   )r%   s   "r&   r'   rX   1  s.   € ÷ Oñ O¨ð O¸ð OÀcð OÈdñ Or(   c                	ó"  € V P                   ;_uu_ 4        V P                  P                  W34      V8X  d    R R R 4       R # W0P                  W3&   R R R 4       \        P                  ! V P
                  WVR7       R #   + '       g   i     L5; i)N)r˜   rŠ   r¢   )rh   rm   rr   r   Úmark_room_link_statusrR   )r{   r˜   rŠ   r¢   s   &&&&r&   r-  Ú#HostedRoomService._set_route_status1  ss   € Ø××ÓØ×&Ñ&×*Ñ*¨GÐ+?Ó@ÀFÔJØ÷ Ñð =C×#Ñ# WÐ$8Ñ9÷ ô 	×/Ò/Ø�L‰L 'Àv÷	O÷	 ×ús   •#A>ÁA>Á>B	c               ó(   € V ^8„  d   QhRRRRRRRR/# )r!   r˜   rA   rŠ   ÚactionúMapping[str, Any] | Noner"   rW   r$   )r%   s   "r&   r'   rX   9  s2   € ÷ añ aØðaØ'*ðaØ4LðaØQUñar(   c                	óØ   € V P                   ;_uu_ 4        Vf   V P                  P                  W3R 4       M/ VCRV/CV P                  W3&   R R R 4       R #   + '       g   i     R # ; i)NrŠ   )rh   ri   r  )r{   r˜   rŠ   r[  s   &&&&r&   rw   Ú%HostedRoomService._set_pending_action9  s[   € à××ÓØŠ~Ø×%Ñ%×)Ñ)¨7Ð*>ÀÕEà>`ÀÐ>`ÈÐV_Ñ>`�×%Ñ% wÐ&:Ñ;÷	 ××Òús   •9AÁA)	c          
     ó,   € V ^8„  d   QhRRRRRRRRRR/# )	r!   r˜   rA   rŠ   r�   r™   r  r"   rW   r$   )r%   s   "r&   r'   rX   A  s;   € ÷ Iñ IØðIØ'*ðIØ36ðIØAZðIà	ñIr(   c                ó’  a€ W3oV P                   P                  S4      pVf   \        R4      h\        V3R l\        P
                  ! V P                  4       4       R4      pVf   \        R4      h/ pVeß   VP                  VP                  8w  gƒ   VP                  P                  VP                  8w  g^   \        VP                  9  gI   RVP                  9  g8   VP                  '       d&   VP                  P                  VP                   8w  d   V P#                  WR4       \        R4      hRVP$                  R	VP                  P                  /pT P'                  YVP(                  VP                  Y4;'       g    VP*                  VP,                  VP.                  R
7       V P1                  S\3        V3RV/VB 4       R# )zBPersist a target-refreshed scoped grant before publishing it live.Nr$  c              3  óf   <"  € T F&  pVP                   VP                  3S8X  g   K"  Vx € K(  	  R # 5irƒ   )r˜   rŠ   )r»   Úlr}   s   & €r&   r½   Ú8HostedRoomService._rotate_route_grant.<locals>.<genexpr>I  s/   øé € ð 0ÙF�!Ø—	‘	˜1Ÿ;™;Ð'¨3Ñ.÷ ŠAÓFùs   ƒ1§
1z4peer room route cannot be renewed before persistenceÚdirectr2  z?peer room execution policy changed; reauthorization is requiredrŒ   r�   r  r�   )rS   rr   r  Únextr   Úload_room_linksrR   r�   rs   rŸ   r‹   r   rš   Ú
link_modesÚtextr    r�   r-  rž   r  r¡   r™   rŽ   r�   r	  r   )	r{   r˜   rŠ   r�   r™   r~   r§   Údigestsr}   s	   &&&&&   @r&   r5  Ú%HostedRoomService._rotate_route_grantA  s™  ø€ ð Ð"ˆØ× Ñ ×$Ñ$ SÓ)ˆØŠ=ÜÐ?Ó@Ð@Üô 0Ü(×8Ò8¸¿¹ÔFó0à15ó7ˆð Š>ÜÐUÓVÐVØˆØÒà×'Ñ'¨5×+BÑ+BÔBØ×+Ñ+×:Ñ:¸e×>RÑ>RÔRÜ#¨7×+DÑ+DÔDØ 7×#5Ñ#5Ô5¸W¿\¿\¸\Ø×+Ñ+×9Ñ9¸U×=ZÑ=ZÔZØ×&Ñ& wÐ;RÔSÜ"ØUóWð Wð $ W×%;Ñ%;Ø)¨7×+CÑ+C×+QÑ+QðSˆGð 	�‰Ø¸V×=NÑ=NØ!×0Ñ0¸×G`ÐG`ÐRX×R`ÑR`Ø"(×">Ñ">ÈÏÉð 	ô 	Zð 	×Ñ˜C¤¨Ñ!G°eÐ!G¸wÑ!GÖHr(   c               ó    € V ^8„  d   QhRRRR/# )r!   r˜   r  r"   zlist[dict[str, str]]r$   )r%   s   "r&   r'   rX   b  s   € ÷ Mñ M zð MÐ=Qñ Mr(   c           
     	ó0  € V P                   ;_uu_ 4        \        V P                  P                  4       4      pR R R 4       X UUu. uF/  w  r4Ve   V^ ,          V8X  g   K  RV^ ,          RV^,          RV/NK1  	  upp#   + '       g   i     LN; iu uppi )Nr˜   rŠ   r¢   )rh   rÃ   rm   rq   )r{   r˜   Úrowsr}   r¢   s   &&   r&   Ú_route_statusesÚ!HostedRoomService._route_statusesb  sˆ   € Ø××ÓÜ˜$×1Ñ1×7Ñ7Ó9Ó:ˆD÷ ñ  $ôMá#‘� w¢¸#¸a½&ÀGÑ:Kô GˆY˜˜A� ¨S°­V°X¸vÓFÙ#òMð 	M÷ ×üóMs   •$A?ÁBÁ!BÁ?B	c               ó    € V ^8„  d   QhRRRR/# )r!   r˜   rA   r"   zlist[dict[str, Any]]r$   )r%   s   "r&   r'   rX   i  s   € ÷ !ñ !˜sð !Ð';ñ !r(   c                	ó�  € . p^ p \         P                  ! V P                  W\         P                  R7      pVP	                  R4      p\        V\        4      '       d   VP                  R V 4       4       \        VP	                  R4      ;'       g    T4      pVP	                  R4      '       g   V# Wc8:  d   \        R4      hTpKÃ  )r²   )r˜   Ú	since_seqÚlimitÚeventsc              3  óV   "  € T F  p\        V\        4      '       g   K  Vx € K!  	  R # 5irƒ   )r=  rp   )r»   Úrows   & r&   r½   Ú,HostedRoomService._events.<locals>.<genexpr>q  s   é € ÐK©T c´ZÀÄT×5JŸcšc«Tùs   ‚)Ÿ
)ÚcursorÚhas_morez)hosted room replay cursor did not advance)
r   Úread_eventsrR   ÚMAX_LOG_LIMITrr   r=  r—   ÚextendrN   r  )r{   r˜   rt  rx  Úpagerm  Únext_cursors   &&     r&   Ú_eventsÚHostedRoomService._eventsi  s¤   € Ø')ˆØˆØÜ×+Ò+Ø—‘ gÄ|×GaÑGaôcˆDà—8‘8˜HÓ%ˆDÜ˜$¤×%Ò%Ø—‘ÑK©TÓKÔKÜ˜dŸh™h xÓ0×:Ð:°FÓ;ˆKØ—8‘8˜J×'Ò'Ø�ØÔ$Ü"Ð#NÓOÐOØ ŠFr(   c               ó    € V ^8„  d   QhRRRR/# )r!   rH   rI   r"   r   r$   )r%   s   "r&   r'   rX   y  s   € ÷ Nñ NÐ%6ð N¸>ñ Nr(   c                	ó|   € V P                   P                  \        VR ,          4      \        VR,          4      R7      # )r˜   Ú
latest_seq)r˜   rƒ  )rj   ÚsnapshotrA   rN   rÊ   s   &&r&   Ú_policy_snapshotÚ"HostedRoomService._policy_snapshoty  s:   € Ø×%Ñ%×.Ñ.Ü˜˜Y�Ó(´S¸¸lÕ9KÓ5Lð /ó Nð 	Nr(   c               ó    € V ^8„  d   QhRRRR/# )r!   rH   rI   r"   r5   r$   )r%   s   "r&   r'   rX   }  s   € ÷ ñ Ð,=ð À$ñ r(   c                	óÞ  a€ R \        VR,          4      V P                  V4      rCp\        VR,          4      pV P                  V\        4       EF  pVR,          \        VR,          4      r‡V P
                  P                  W6R,          P                  VVR7      '       d   KU  V P
                  P                  V\        VR,          R,          4      VR,          P                  R	4      VR,          P                  R
7      p	\        P                  ! WWdR7      p
RVR,          P                  P                  R4       2o\        ;QJ d    V3R lV	 4       F  '       g   K   RM	  R M! V3R lV	 4       4      '       dO   V	 Uu. uFB  q»R,          R8w  g1   \        VR,          4      \        VR,          R,          4      8:  g   K@  VNKD  	  p	p\        P                  ! YY§VP                  R4      VR8X  d   TMRVR7      pVP                   FS  p\         P"                  ! V P$                  3/ VP'                  V4      BRV/B p\)        V\        VR,          4      4      pKU  	  RpEK  	  V# u upi )Fr˜   rƒ  r¢   r&  r%  )r˜   r(  r¢   r&  r"  r;  Úinput_context©r˜   r;  r‰  r(  rÉ   z	dmessage:zdtask:c              3  ór   <"  € T F,  qP                  R 4      S8H  ;'       d    VR,          R8H  x € K.  	  R# 5i)Úevent_idrR  zmessage.memberN)rr   )r»   ÚeventÚ
message_ids   & €r&   r½   Ú<HostedRoomService._publish_terminal_tasks.<locals>.<genexpr>Œ  s5   øé € ÐvÑjuÐaf—9‘9˜ZÓ(¨JÑ6×\Ð\¸5À½=ÐL\Ñ;\Ô\Ójuùs   ƒ7¢7TrR  zmessage.userÚseqÚresultÚdeferredN)r¢   r‘  r&  rÅ   Úexpected_latest_seq)rA   rË   rN   rú   Ú_TERMINAL_STATUSESrj   Úpublication_existsr(  Úevents_for_taskrr   Ú
discussionÚreconstruct_task_planÚremoveprefixÚanyÚplan_publicationrt  r   Úappend_eventrR   Úappend_kwargsÚmax)r{   rH   Úchangedr˜   rÅ   rx  r   r¢   r&  Útask_eventsÚplanr�  ÚpublicationÚappendedrŽ  s   &&            @r&   Ú_publish_terminal_tasksÚ)HostedRoomService._publish_terminal_tasks}  s1  ø€ Ø+0´#°d¸9µoÓ2FÈ×HZÑHZÐ[_ÓH`˜.ˆÜ�T˜,Õ'Ó(ˆØ×$Ñ$ WÔ.@×AˆDØ+/°­>¼3¸tÐDZÕ?[Ó;\Ð(Ø×%Ñ%×8Ñ8Ø¨jÕ)9×)AÑ)AÈ&Ø%9ð 9÷ ;ò ;ñ Ø×0Ñ0×@Ñ@Ø´#°d¸9µoÐFXÕ6YÓ2ZØ" 9�o×1Ñ1°/ÓBÈDÐQ[ÕL\×LdÑLdð Aó fˆKô ×3Ò3Ø 4ôHˆDà$ T¨*Õ%5×%=Ñ%=×%JÑ%JÈ8Ó%TÐ$UÐVˆJß‹sÔvÑjuÓv�s�sŠsÔvÑjuÓv×vÒvá2=ó a±+¨ÀvÅÐR`ÔA`Ü"% e¨E¥lÓ"3´s¸4À	½?ÐK]Õ;^Ó7_Ñ"_÷  %˜u±+�ð aä$×5Ò5Ø 4¸t¿x¹xÈÓ?QØ=CÀzÔ=QÑ%9ÐW[Ø-ô/ˆKð %×+Ô+�Ü'×4Ò4Ø—L‘Lñ^Ø$)×$7Ñ$7¸Ó$@ñ^ØV\ò^�ä˜V¤S¨°%­Ó%9Ó:’ñ ,ð ‹Gñ1 Bð2 ˆùòas   Æ=I*ÇI*c               ó$   € V ^8„  d   QhRRRRRR/# )r!   rH   rI   Údecisionzdiscussion.DiscussionDecisionr"   rW   r$   )r%   s   "r&   r'   rX   ›  s)   € ÷ Dñ DØ%ðDØ1NðDØSWñDr(   c                	óJ  € VP                   f   R # \        V4      w  r4\        P                  ! V P                  \        VR,          4      RVP                    RVP                   2RRRRV/RVP                  R	VP                  R
VP                  RVP                   /W4R7       R # )Nr˜   z
dactivity:rˆ   zroom.activityrR  ÚgatewayÚidr¢   Úreason_codeÚ	thread_idÚdiscussion_event_id)r˜   rŒ  rR  Úactorr"  rL   rM   )	r­  rO   r   rœ  rR   rA   Úreasonr¢   r¬  )r{   rH   r§  rÞ   rß   s   &&&  r&   Ú_append_room_statusÚ%HostedRoomService._append_room_status›  s›   € à×'Ñ'Ò/ÙÜ& tÓ,Ñˆ
Ü×!Ò!Ø�L‰L¤# d¨9¥oÓ"6Ø! (×">Ñ">Ð!?¸qÀÇÁÐ@QÐRØ ¨°¸DÀ*Ð(Mà˜(Ÿ/™/¨=¸(¿/¹/Ø˜X×/Ñ/Ø% x×'CÑ'CðEð ",÷	Dr(   c               ó    € V ^8„  d   QhRRRR/# )r!   r  r   r"   rW   r$   )r%   s   "r&   r'   rX   ª  s   € ÷ -9ñ -9Ð$5ð -9¸$ñ -9r(   c           
     	ó2  € V P                   ;_uu_ 4        V P                  VP                  4      pV P                  V4      p V P	                  V4      pT'       d-   T P                  TP                  4      pT P                  T4      pT P                  P                  TP                  R7       \        P                  ! T P                  TP                  T P                  P                  R7       \        \        T P!                  TP                  \"        4      4      R 4      e    R R R 4       R # \$        P&                  ! T\)        TP*                  4      T P-                  T4      TP.                  RR7      pTP0                  R8X  Ed.   TP2                  Ee   \        P4                  ! T P                  TP2                  P6                  4      p\9        TP2                  P:                  4      pTP=                  RR 4       Te�   RTR,          9   d�   T P                  P?                  TP                  TR,          R,          TR,          R,          TR	,          P@                  R
7      p\$        PB                  ! Y(Y`P-                  T4      R7       Tp	M«TeN   TR,          T8X  d@   \$        PB                  ! T\)        TP*                  4      TT P-                  T4      R7       Tp	MZ\        PD                  ! T P                  TP2                  P6                  TP2                  P:                  \F        PF                  R7      p	T P                  T P                  TP                  4      4      PH                  p
TPJ                  e9   TPJ                  T
8  d(   T P                  PM                  T	R	,          RT
 2R7       M"TP0                  R9   d   T PO                  Y%4       R R R 4       R #   \
        P                   d     R R R 4       R # i ; i  + '       g   i     R # ; i)Nr×   )r˜   ÚclockT)rÅ   Úinitial_watermarksÚfreeze_input_contextr   r‰  r"  r;  r%  rŠ  rÉ   )r"  r´  zstop-fence:©Ú	cancel_id>   ÚboundedÚsettled)(rh   rÙ   r˜   r…  r¤  r   ÚEventCursorConflictErrorrj   Úcompact_completedr÷   Úprune_published_terminal_tasksrR   rz   r´  re  Úiterrú   Ú_LIVE_STATUSESr—  Úplan_next_taskr—   rt  rË   Ú
watermarksr¢   r   Úget_task_for_turnr%  rp   r"  r  r–  r(  r˜  Ú
admit_taskÚtimeÚstopped_through_seqr;  Úcancelr°  )r{   r  rH   r„  rŸ  r§  ÚexistingÚlegacy_payloadÚprior_eventsÚadmittedÚfences   &&         r&   r^   ÚHostedRoomService.prepare_roomª  s*  € Ø××ÓØ—:‘:˜gŸo™oÓ.ˆDØ×,Ñ,¨TÓ2ˆHðØ×6Ñ6°tÓ<�÷ Ø—z‘z '§/¡/Ó2�Ø×0Ñ0°Ó6�Ø×"Ñ"×4Ñ4¸W¿_¹_Ð4ÔMÜ×1Ò1Ø—‘ g§o¡o¸T¿\¹\×=OÑ=OõQä”D˜×)Ñ)¨'¯/©/¼>ÓJÓKÈTÓRÒ^Ø÷ Ñô  "×0Ò0Ø”d˜8Ÿ?™?Ó+¸D×<NÑ<NÈtÓ<TØ#+×#6Ñ#6ÈTôSˆHð �‰ &Õ(¨X¯]©]Ó-FÜ!×3Ò3°D·L±LÀ(Ç-Á-×BXÑBXÓY�Ü!% h§m¡m×&;Ñ&;Ó!<�Ø×"Ñ" ?°DÔ9ØÒ'¨O¸xÈ	Õ?RÔ,Rð $(×#9Ñ#9×#IÑ#IØ '§¡À(È9ÕBUÐVhÕBiØ&.¨yÕ&9¸/Õ&JÐT\Ð]gÕTh×TpÑTpð $Jó $r�Lô ×4Ò4°TÈ×btÑbtÐuyÓbzÕ{Ø'‘HØÒ)¨h°yÕ.AÀ^Ô.SÜ×4Ò4°T¼4ÀÇÁÓ;PÐRZØDH×DVÑDVÐW[ÓD\õ^à'‘Hä%×0Ò0ØŸ™ h§m¡m×&<Ñ&<ÀhÇmÁm×F[ÑF[Ôcg×clÑclô n�Hð ×-Ñ-¨d¯j©j¸¿¹Ó.IÓJ×^Ñ^�Ø×,Ñ,Ò8¸X×=VÑ=VÐY^Ô=^Ø—L‘L×'Ñ'¨°Õ(<È+ÐV[ÐU\ÐH]Ð'Ô^øØ—‘Ð$:Ô:Ø×(Ñ(¨Ô8÷Y Ñøô
  ×8Ñ8ô à÷ Ñð
ú÷ ×Ðús=   •-PÁO!ÁPÁC	PÄ/J(PÏ!PÏ6PÐPÐPÐP	c               ó$   € V ^8„  d   QhRRRRRR/# )r!   r  r   Ú_taskrI   r"   rW   r$   )r%   s   "r&   r'   rX   Ù  s$   € ÷ ñ Ð(9ð ÐBSð ÐX\ñ r(   c                	ó\   € V P                  V4       V P                  P                  4        R # rƒ   )r^   rz   ró   )r{   r  rÎ  s   &&&r&   r_   Ú"HostedRoomService.publish_terminalÙ  s    € Ø×Ñ˜'Ô"Ø�‰×ÑÖr(   Úadmitc          
     ó,   € V ^8„  d   QhRRRRRRRRRR/# )	r!   r˜   rA   r@   rP  r	   rÑ  r"   rÕ   r$   )r%   s   "r&   r'   rX   Ý  s0   € ÷ ñ  cð °ð ¸sð È3ð ÐZhñ r(   c               	óè  € \         P                  ! W0P                  4       R 7      p\        P                  ! V P
                  YV Uu. uFj  pRVP                  RVP                  RVP                  R\        VP                  ;'       g    / 4      /VP                  '       d   RVP                  /M/ CNKl  	  up\        P                  ! 4       VR7      pV P                  P                  4        V# u upi )rÉ   rŠ   rã   ÚhandlerQ  Údisplay_name)r˜   r@   rP  rL   rÑ  )r—  Úvalidate_rosterrÅ   r   Úcreate_roomrR   rŠ   rã   rÔ  rp   rQ  rÕ  rœ   rz   ró   )r{   r˜   r@   rP  rÑ  Ú
normalizedÚmemberrH   s   &$$$$   r&   r×  ÚHostedRoomService.create_roomÝ  sÝ   € Ü×/Ò/°×H[ÑH[ÓH]Ô^ˆ
Ü×'Ò'Ø�L‰L 'ñ )ó*ñ
 )�Fð   ×!1Ñ!1°9¸f¿n¹nØ˜fŸm™m¨X´t¸F¿M¹M×<OÐ<OÈRÓ7Pð^ð AG×@S×@SÐ@S˜¨×(;Ñ(;Ñ<ÐY[ó^ñ )ñ*ô ".×!HÒ!HÓ!JÐRWôYˆð 	�‰×ÑÔØˆùò*s   ÁAC/ÂC/Â!C/c               ó(   € V ^8„  d   QhRRRRRRRR/# )r!   r˜   rA   rŒ  r"  r	   r"   rÕ   r$   )r%   s   "r&   r'   rX   ë  s(   € ÷ ñ ˜sð ¨cð ¸Cð ÀNñ r(   c          	     	óP  a€ \         P                  ! V4      pV P                  S4      w  rV^ RIHp V! V SW$WVR7      p\        V3R lV P                  4        4       R4      p	V	f   \        P                  ! R4      hV P                  V	4       V P                  P                  4        V# )r²   )Úappend_user_event)r˜   rŒ  r"  rÞ   rß   c              3  óL   <"  € T F  qP                   S8X  g   K  Vx € K  	  R # 5irƒ   r×   )r»   Úbr˜   s   & €r&   r½   Ú)HostedRoomService.send.<locals>.<genexpr>ò  s   øé € ÐK¡?˜a·i±iÀ7Ñ6JŸš£?ùs   ƒ$š
$Nzhosted room not found)r—  Úvalidate_user_payloadrà   Ú"gateway.session_hosted_attachmentsrÝ  re  rt   r   ÚRoomNotFoundErrorr^   rz   ró   )
r{   r˜   rŒ  r"  rØ  rÞ   rß   rÝ  r�  r  s
   &d$$      r&   ÚsendÚHostedRoomService.sendë  s‘   ø€ Ü×5Ò5°gÓ>ˆ
Ø ×1Ñ1°'Ó:Ñˆ
ÝHÙ!Ø˜'¨HØ!ô0ˆô ÔK 4§=¡=¤?ÓKÈTÓRˆØŠ?Ü×0Ò0Ð1HÓIÐIØ×Ñ˜'Ô"Ø�‰×ÑÔØˆr(   Úrequire_acknowledgedFc               ó(   € V ^8„  d   QhRRRRRRRR/# )r!   r˜   rA   r¸  ræ  r5   r"   rN   r$   )r%   s   "r&   r'   rX   ù  s,   € ÷ ñ ØðØ*-ðØEIðØVYñr(   c               	ó.  € V P                  V4      w  rE\        P                  ! V P                  WVVR 7       ^ pV P                  ;_uu_ 4        V P                  V\        4       Uu/ uF*  pVR,          P                  VR,          P                  3VbK,  	  ppVP                  4        FŠ  pVP                  R4      R8H  ;'       d%    \        VP                  R4      ;'       g    R4      p	V P                  P                  VR,          T	;'       g    TR7      p
V
R,          R8X  g   K�  V^,          pKŒ  	  RRR4       V'       d   V'       d   \        R4      hV P                  P                  4        \!        X4      # u upi   + '       g   i     LU; i)	)r˜   r¸  Úexpected_gateway_idÚexpected_epochr%  r¢   rI  r¸  r‘   r·  Nz@room work is still stopping; retry deletion after Stop completes)rà   r   Úrequest_room_stoprR   rh   rú   Ú_STOPPABLE_STATUSESr˜   r(  Úvaluesrr   rA   rz   rÆ  r  ró   r  )r{   r˜   r¸  ræ  rÞ   rß   Úpendingr   ÚtasksÚown_cancel_idr‘  s   &&$$       r&   Ú	stop_roomÚHostedRoomService.stop_roomù  s\  € à ×1Ñ1°'Ó:Ñˆ
Ü×&Ò&Ø�L‰L 'ÐT^Ø õ	"ð ˆØ××Óð !×,Ñ,¨WÔ6IÔJóLáJ�Dð �jÕ!×)Ñ)¨4°
Õ+;×+CÑ+CÐDÀdÒJÙJð ð Lð Ÿ™ž�à—H‘H˜XÓ&¨*Ñ4×YÐY¼¸T¿X¹XÀkÓ=R×=XÐ=XÐVXÓ9Yð àŸ™×,Ñ,¨T°*Õ-=È×IcÐIcÐZcÐ,Ód�Ø˜(Õ# zÖ1Ø˜q•L’Gñ '÷	 ÷  §GÜÐaÓbÐbØ�‰×ÑÔÜ�5‹zÐùòL÷ ×ús6   ÁFÁ'0E?Â/FÃFÃ%,FÄFÄ*FÅ?FÆF	c               ó$   € V ^8„  d   QhRRRRRR/# )r!   r˜   rA   r(  r"   rÕ   r$   )r%   s   "r&   r'   rX     s&   € ÷ Bñ B sð B¸ð BÀñ Br(   c               óÔ   a€ V P                  V\        4      p\        V3R lV 4       R4      pVf   \        P                  ! R4      hV P
                  P                  VR,          4      # )zERetry one uncertain or deferred task only after explicit user action.c              3  óZ   <"  € T F   qR ,          P                   S8X  g   K  Vx € K"  	  R# 5i)r%  N)r(  )r»   Úcr(  s   & €r&   r½   Ú4HostedRoomService.retry_room_task.<locals>.<genexpr>  s"   øé € ÐO¡
˜1°
­m×.CÑ.CÀwÑ.N—Q’Q£
ùs   ƒ+¡
+Nz&no retryable room task matches task_idr%  )rú   Ú_RETRYABLE_STATUSESre  r÷   ÚInvalidTaskTransitionErrorrz   Úretry_indeterminate)r{   r˜   r(  Ú
candidatesr   s   &&d  r&   Úretry_room_taskÚ!HostedRoomService.retry_room_task  sZ   ø€ à×%Ñ% gÔ/BÓCˆ
ÜÔO¡
ÓOÐQUÓVˆØŠ<Ü×3Ò3Ð4\Ó]Ð]Ø�|‰|×/Ñ/°°ZÕ0@ÓAÐAr(   Ú
request_idc               ó4   € V ^8„  d   QhRRRRRRRRRRRR	R
R/# )r!   r˜   rA   rŠ   r(  r&  rN   Úchoicerþ  r  r"   rI   r$   )r%   s   "r&   r'   rX     sD   € ÷ $ñ $Øð$Ø*-ð$Ø8;ð$ØSVð$àð$à!+ð$à7Hñ$r(   c               óò  aaa€ W3pV P                   P                  V4      V P                  P                  V4      r˜V P                  ;_uu_ 4        V P                  P                  V4      p
RRR4       \        T;'       g    R4      oR VVV3R llpS'       d   V! X
4      '       g   \        R4      hVR9  d   \        R4      h\        V	R4      pVe   Ve   V! SSSWXP                  R7      pMU\        V
P                  R	4      ;'       g    R4      pV'       g   \        R
4      hV P                  P                  VSVR7      pVf   \        R4      hV P                  ;_uu_ 4        V! V P                  P                  V4      4      '       d   V P                  P                  VR4       RRR4       V P                  P                  4        V#   + '       g   i     ELo; i  + '       g   i     L@; i)zCResolve one exact local or peer approval and wake room observation.Nr‘   c               ó    € V ^8„  d   QhRRRR/# )r!   rî  r\  r"   r5   r$   )r%   s   "r&   r'   Ú9HostedRoomService.approve_room_task.<locals>.__annotate__!  s   € ÷ 	Hñ 	HÐ5ð 	H¸$ñ 	Hr(   c                óØ   <€ V R J;'       d_    \        V P                  R4      ;'       g    R4      V P                  R4      \        V P                  R4      ;'       g    ^ 4      3SSS38H  # )Nrþ  r‘   r(  r&  )rA   rr   rN   )rî  r&  Úrequested_approval_idr(  s   &€€€r&   ÚmatchesÚ4HostedRoomService.approve_room_task.<locals>.matches!  ss   ø€ Ø $Ð&÷ Hð HÜ�G—K‘K Ó-×3Ð3°Ó4°g·k±kÀ)Ó6LÜ�G—K‘KÐ 6Ó7×<Ð<¸1Ó=ð,ð (¨Ð2FÐGñ,Hð Hr(   z"room approval is no longer pendingz)room approval choice must be once or denyÚapprove_receipt)r(  r&  rþ  r   r�   Ú
session_idz+local room approval identity is unavailable)r	  rþ  r   z#room approval target is unavailable>   ÚdenyÚonce)rS   rr   rT   rh   ri   rA   r  rF   r�   r[   Úapprover  rz   ró   )r{   r˜   rŠ   r(  r&  r   rþ  r}   r~   r   r[  r  r  r‘  r	  r  s   &&$dd$$        @r&   Úapprove_room_taskÚ#HostedRoomService.approve_room_task  s«  ú€ ð Ð"ˆØ×(Ñ(×,Ñ,¨SÓ1°4×3DÑ3D×3HÑ3HÈÓ3MˆvØ××ÓØ×*Ñ*×.Ñ.¨sÓ3ˆF÷ ä # J×$4Ð$4°"Ó 5Ð÷	Hò 	H÷
 %©G°F¯OªOÜÐCÓDÐDØÐ)Ô)ÜÐJÓKÐKÜ˜Ð 1Ó2ˆØÒ Ò!4ÙØÐ6JØ0¸Ç{Á{ôT‰Fô ˜VŸZ™Z¨Ó5×;Ð;¸Ó<ˆJßÜ"Ð#PÓQÐQØ—X‘X×%Ñ%Ø%Ð2GÐPVð &ó XˆFàŠ>ÜÐDÓEÐEØ××ÓÙ�t×,Ñ,×0Ñ0°Ó5×6Ò6Ø×%Ñ%×)Ñ)¨#¨tÔ4÷ ð 	�‰×ÑÔØˆ÷= ×Ðú÷4 ×ús   ÁGÅ*AG&ÇG#	Ç&G6	c               ó    € V ^8„  d   QhRRRR/# )r!   r˜   r  r"   rÕ   r$   )r%   s   "r&   r'   rX   =  s   € ÷ :ñ :˜jð :°Nñ :r(   c                	ó>  a€ / V P                   P                  4       CR V P                  S4      /CpV P                  '       d   V P                  VR&   Sf   V# \        P
                  ! V P                  SR7      p\        R V 4       4      pV Uu. uF-  qUR,          \        9   g   K  RRRVR	,          P                  /NK/  	  ppV P                  ;_uu_ 4        VP                  V3R
 lV P                  P                  4        4       4       RRR4       V Uu. uFc  qUR,          \        9   g   K  R\        VR,          P!                  R4      ;'       g    VR,          R,          4      R\        VR,          4      /NKe  	  ppRVR,          R\#        V4      RSVR,          9   ;'       g4    \#        VP!                  R4      ;'       g    VP!                  R4      4      R\%        V4      RVRVR V P                  S4      /# u upi   + '       g   i     EL; iu upi )rS   Úlink_load_errorNr×   c              3  óF   "  € T F  p\        VR ,          4      x € K  	  R# 5i)r¢   N)rA   )r»   r   s   & r&   r½   Ú+HostedRoomService.status.<locals>.<genexpr>D  s   é € Ð?¹°œ˜T (�^×,Ð,»ùs   ‚!r¢   rR  Úretryr(  r%  c              3  óV   <"  € T F  w  w  rpVS8X  g   K  \        V4      x € K   	  R # 5irƒ   )rp   )r»   Úaction_room_idÚ
_member_idr[  r˜   s   &   €r&   r½   r  I  s4   øé € ð #Oá0ñ "FÑ!= .¸vØ4BÀgÑ4Mô ”�V—�Û0ùs   ƒ)–)rŠ   r"  r#  r‹   rH  ÚworkingÚblockedÚblocked_roomsrJ  rI  ÚcountsÚpending_actionsÚmember_activity)rz   r¢   rn  rl   r÷   rø   rR   r   rø  r(  rh   r|  ri   rq   r¿  rA   rr   r5   rp   )r{   r˜   rz   rï  r  r   r  r  s   &f      r&   r¢   ÚHostedRoomService.status=  s  ø€ ØY�T—\‘\×(Ñ(Ó*ÐY¨M¸4×;OÑ;OÐPWÓ;XÑYˆØ× × Ð Ø)-×)>Ñ)>ˆGÐ%Ñ&ØŠ?ØˆNÜ×!Ò! $§,¡,¸Ô@ˆÜÑ?¹Ó?Ó?ˆñ óHá� h¥Ô3FÑ!Fô CˆV�W˜i¨¨jÕ)9×)AÑ)AÓBÙð 	ð Hð ××ÓØ×"Ñ"ô #Oà×(Ñ(×.Ñ.Ô0ó#Oô O÷ ñ óCñ � h¥´>Ñ!Aô,ˆ[œ#˜d 9�o×1Ñ1Ð2DÓE×jÐjÈÈiÍÐYiÕIjÓkØ”s˜4 �>Ó*ó,áð 	ð Cð
 �w˜yÕ)¨9´d¸?Ó6KØ�w '¨/Õ":Ñ:÷ Kð KÜ�F—J‘J˜Ó/×IÐI°6·:±:¸jÓ3IÓJØ”d˜6“lÐ$5°Ø˜Ø˜4×/Ñ/°Ó8ð:ð 	:ùòH÷ ×Ðüò
Cs*   ÂHÂ(HÃ4HÄHÄ1$HÅ,HÈH	)rl   rm   ri   rh   rR   rT   rS   rj   r[   rz   rV   rƒ   ),Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__r€   rk   rn   Úpropertyr­   rÅ   rË   rt   rÙ   rà   rv   rê   rï   ró   rú   r  r  r	  r  ru   r@  r<  r-  rw   r5  rn  r  r…  r¤  r°  r^   r_   r×  rä  rñ  rü  r  r¢   Ú__static_attributes__r$   r(   r&   rQ   rQ   @   s5  † ÙIðFØBFðFàHLðFð CG÷FòB+õ5ð, ô#ó ð#õ'õ%õ
FõFõ!õ5õð2 s÷ 2õõWõcðà?Cðð .2÷÷40õõ* cõDCõ,õOõa÷I÷BMõ!õ Nõõ<Dõ-9õ^ðÐQU÷ õðØLQ÷õ,Bð$à.2÷$÷L:ó :r(   rQ   c                  ó8   € ] tR tRtRtR R ltR R ltR tRtR	# )
r?  iZ  zAClassify scoped-auth failures without exposing route credentials.c               ó   € V ^8„  d   QhRR/# r†   r$   )r%   s   "r&   r'   Ú#_RouteStatusPeerClient.__annotate__]  s   € ÷ \ñ \ØX\ñ\r(   c               	óL   € WVuV n         V n        V n        W4uV n        V n        R # rƒ   )Ú_clientÚ	_on_readyÚ_on_refreshedÚ_on_reauthorizationÚ_on_unavailable)r{   r   r7  r8  r9  r:  s   &&$$$$r&   r€   Ú_RouteStatusPeerClient.__init__]  s'   € à;AÈ\Ð8ˆŒ�d”n dÔ&8Ø9KÐ6ˆÔ  $Ö"6r(   c               ó    € V ^8„  d   QhRRRR/# )r!   Úkwargsrp   r"   r$   )r%   s   "r&   r'   r(  b  s   € ÷ #0ñ #0 Tð #0¨dñ #0r(   c                ó  € VR,          p\        V4      '       g   V# \        P                  ! VR,          4      p\        V P                  R4      pVf   V#  V! W#P
                  VP                  R7      p\        TP                  R4      ;'       g    R	4      pT'       g   \        R
4      hRpTP                  R4      e]   \        P                  ! TP                  R4      4      p\        YƒP
                  TP                  R7      p	T	e   T P                  4        T	hT P                  Yx4       / TCRT/C#   \         dD   p\        TRR4      '       g   \        T^ R7      '       d   T P                  4        h Tu Rp?# Rp?ii ; i)a6  Rotate an expiring grant before dispatch; return the kwargs to send. Refresh
failures escalate to reauthorization only when the peer says so or the grant is
past its hard expiry; otherwise the original grant is tried as-is. A refreshed
catalog whose digests drift from the dispatch is a policy change: refused.r�   rG  Úrefresh_grantN)r�   rŒ   r�   r2  F)Úleeway_secondsr‘   z%peer returned no refreshed room grantr™   )rŒ   r�   )r   r   Úfrom_mappingrF   r*  rŒ   r�   ro   rC   r-  rA   rr   r  r   r   r,  )
r{   r1  r�   ÚcheckedÚrefreshÚ	refreshedr4   ÚreplacementÚrefreshed_catalogÚdrifts
   &&        r&   Ú_refresh_grantÚ%_RouteStatusPeerClient._refresh_grantb  sb  € ð
 �w•ˆÜ0°×7Ò7ØˆMÜ&×3Ò3°F¸:Õ4FÓGˆÜ˜Ÿ™ oÓ6ˆØŠ?ØˆMð		ÙØ×/HÑ/HØ(/×(GÑ(GôIˆIô ˜)Ÿ-™-¨Ó0×6Ð6°BÓ7ˆßÜÐFÓGÐGØ ÐØ�=‰=˜Ó#Ò/Ü 2× ?Ò ?À	ÇÁÈiÓ@XÓ YÐÜ0Ø!×5NÑ5NØ(/×(GÑ(GôIˆEð Ò Ø×(Ñ(Ô*Ø�Ø×Ñ˜;Ô:Ø/�&Ð/˜' ;Ñ/Ð/øô' ô 	Ü�sÐ3°U×;Ò;Ü1°%È×JÓJØ×(Ñ(Ô*ØØ�Mûð	ús   ÁD6 Ä6FÅ8E?Å9FÅ?Fc                	ón   a aa€ \        S P                  S4      o\        S4      '       g   S# VV V3R  lpV# )c                 ó<  <€ SR9   d   RV9   d   SP                  V4      p S! V / VB pSR8w  d   SP                  4        T#   \         dN   p\        TRR4      '       d   SP                  4        h \        TRR4      '       d   SP	                  4        h Rp?ii ; i)rG  r�   r2  FÚnot_admittedNÚprepare>   rG  rE  )r<  ro   rC   r-  r.  r+  )Úargsr1  r‘  r4   r@   r{   rE   s   *,  €€€r&   ÚtrackedÚ3_RouteStatusPeerClient.__getattr__.<locals>.trackedŒ  s£   ø€ ØÐ7Ô7¸GÀvÔ<MØ×,Ñ,¨VÓ4�ðÙ Ð/¨Ñ/�ð �yÔ Ø—‘Ô ØˆMøô ô Ü˜3Ð 7¸×?Ò?Ø×,Ñ,Ô.ð ô ˜S .°%×8Ò8Ø×(Ñ(Ô*Øûðús   ¢A ÁBÁABÂB)rC   r*  rD   )r{   r@   rC  rE   s   ff @r&   Ú__getattr__Ú"_RouteStatusPeerClient.__getattr__‡  s-   ú€ Ü˜Ÿ™ dÓ+ˆÜ˜�ŠØˆL÷	ð ˆr(   )r*  r+  r-  r,  r.  N)	r  r   r!  r"  r#  r€   r<  rE  r%  r$   r(   r&   r?  r?  Z  s   † ÙKõ\õ
#0öJr(   r?  )r’  rº  ÚfailedÚ	cancelled)ÚqueuedrH  rI  )rI  rH  rJ  r’  rI  )rJ  r’  )>r#  Ú
__future__r   Ú
contextlibr,   rf   rÄ  Úcollectionsr   Úcollections.abcr   r   Údataclassesr   Úpathlibr   Útypesr   Útypingr	   r©  r
   r—  r   r÷   r   r   Ú%gateway.hosted_room_policy_checkpointr   r   Úgateway.hosted_room_peerr   r   r   r   Útui_gateway.hosted_room_driverr   r   Ú"tui_gateway.hosted_room_server_rpcr   Ú!tui_gateway.hosted_room_peer_httpr   r   r   Ú&tui_gateway.hosted_room_peer_transportr   r   r   r   rx   ry   r0   r”  r¿  rì  rø  r2   r=   rF   rO   rQ   r?  r$   r(   r&   Ú<module>rX     s¼   ðÙ Få "ã Û 	Û Û Ý ß -Ý Ý Ý Ý å 8Ý 0Ý %Ý  ß \÷có cç OÝ B÷Iñ I÷[ó [ð &)Ð "Ø#'Ð  Ø&*Ð #àCÐ Ø2€ØTÐ Ø3Ð õbõ?õ.õK÷W:ñ W:÷t@ó @r(   