+
    kHàj‚  ã                  ó¢   € R t ^ RIHt ^ RIt^ RIt^ RIHtHtHtH	t	 Rt
Rt^t]]]]3,          tR R ltR R	 lt ! R
 R4      t ! R R4      tR# )aÀ  Park unmentioned MSC3245 voice messages until the sender's bare @mention claims them.

Element X sends a mention typed while recording as a SEPARATE ``m.text`` event after the
voice event (which carries an empty ``m.mentions``). Under ``require_mention`` the voice is
parked instead of forgotten; a bare mention from the same sender in the same room within
the window claims it. Unmentioned voices are never downloaded or transcribed while parked.
)ÚannotationsN)ÚDictÚListÚOptionalÚTupleg      ^@g      @c               ó    € V ^8„  d   QhRRRR/# ©é   ÚcontentÚdictÚreturnÚbool© )Úformats   "ÚK/home/ubuntu/.hermes/hermes-agent/plugins/platforms/matrix/voice_mention.pyÚ__annotate__r      s   € ÷ ?ñ ?˜dð ? tñ ?ó    c                ó(   € V P                  R4      RJ# )zTThe single MSC3245 voice-message check (shared with the adapter's media classifier).zorg.matrix.msc3245.voiceN)Úget©r
   s   &r   Úhas_voice_markerr      s   € à�;‰;Ð1Ó2¸$Ð>Ð>r   c               ó    € V ^8„  d   QhRRRR/# r   r   )r   s   "r   r   r       s   € ÷ Mñ M˜Dð M Tñ Mr   c                óP   € V P                  R 4      R8H  ;'       d    \        V 4      # )Úmsgtypezm.audio)r   r   r   s   &r   Úis_voice_eventr       s$   € Ø�;‰;�yÓ! YÑ.×LÐLÔ3CÀGÓ3LÐLr   c                  ó*   € ] tR t^$tRtRtR R ltRtR# )Ú	VoiceGatezMOne voice being gated; ``seq`` orders voices from the same sender by arrival.c               ó    € V ^8„  d   QhRRRR/# )r	   ÚseqÚintr   ÚNoner   )r   s   "r   r   ÚVoiceGate.__annotate__)   s   € ÷ $ñ $˜Cð $ Dñ $r   c                	óF   € Wn         \        P                  ! 4       V n        R # ©N)r   ÚasyncioÚEventÚdone)Úselfr   s   &&r   Ú__init__ÚVoiceGate.__init__)   s   € ØŒÜ—M’M“OˆŽ	r   )r&   r   N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__Ú	__slots__r(   Ú__static_attributes__r   r   r   r   r   $   s   † ÙWà€I÷$ñ $r   r   c                  ó‚   € ] tR t^.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 ltR R ltRtR# )ÚParkedVoicesc               ó   € V ^8„  d   QhRR/# ©r	   r   r    r   )r   s   "r   r   ÚParkedVoices.__annotate__/   s   € ÷ 
ñ 
˜$ñ 
r   c                	ó>   € / V n         / V n        / V n        ^ V n        R# ©é    N)Ú_parkedÚ	_inflightÚ_floorÚ	_next_seq©r'   s   &r   r(   ÚParkedVoices.__init__/   s$   € àTVˆŒð BDˆŒð 35ˆŒØˆŽr   c               ó   € V ^8„  d   QhRR/# r4   r   )r   s   "r   r   r5   ;   s   € ÷ <ñ <˜ñ <r   c                	ól  € \         P                  ! 4       \        ,
          pV P                  P	                  4        UUUu/ uF&  w  r#Y# Uu. uF  qD^ ,          V8¼  g   K  VNK  	  upbK(  	  ppppVP	                  4        UUu/ uF  w  r#V'       g   K  W#bK  	  uppV n        R# u upi u upppi u uppi r7   )ÚtimeÚ	monotonicÚCLAIM_WINDOW_SECONDSr9   Úitems)r'   ÚcutoffÚkÚvÚeÚkepts   &     r   Ú_pruneÚParkedVoices._prune;   s†   € Ü—’Ó!Ô$8Õ8ˆØ@DÇÁ×@RÑ@RÔ@TÕUÑ@T¹¸�˜qÓ3™q˜! a¥D¨F¡N—A�A™qÑ3Ò3Ñ@TˆÒUØ)-¯©¬Ô;©¡ ¼œ˜š©Ò;ˆŽùò 4ùÔUùÛ;s)   ¿B)Á
B$ÁB$Á$B)ÂB0ÂB0Â$B)c               ó$   € V ^8„  d   QhRRRRRR/# )r	   Úroom_idÚstrÚsenderr   r   r   )r   s   "r   r   r5   @   s&   € ÷ Fñ F˜sð F¨Cð F°Dñ Fr   c                óJ  a€ W3pW0P                   9   d   R# \        P                  ! 4       \        ,
          o\        ;QJ d9    V3R lV P
                  P                  VR4       4       F  '       g   K   R# 	  R# ! V3R lV P
                  P                  VR4       4       4      # )zJCheap pre-check: an unexpired voice is parked or one is still being gated.Tc              3  ó:   <"  € T F  q^ ,          S8¬  x € K  	  R# 5ir7   r   )Ú.0rH   rE   s   & €r   Ú	<genexpr>Ú'ParkedVoices.pending.<locals>.<genexpr>F   s   øé € ÐEÑ+D a�Q•4˜6–>Ó+Dùs   ƒFr   )r:   rA   rB   rC   Úanyr9   r   )r'   rM   rO   ÚkeyrE   s   &&& @r   ÚpendingÚParkedVoices.pending@   su   ø€ àÐˆØ—.‘.Ô ÙÜ—’Ó!Ô$8Õ8ˆß‹sÔE¨4¯<©<×+;Ñ+;¸CÀÔ+DÓE�sŒsÐEŠsÐEˆsÔE¨4¯<©<×+;Ñ+;¸CÀÔ+DÓEÓEÐEr   c               ó   € V ^8„  d   QhRR/# )r	   r   r   r   )r   s   "r   r   r5   H   s   € ÷ ñ �cñ r   c                ó   € V P                   # )zTArrival limit for a bare mention: only voices that began before this may be claimed.)r<   r=   s   &r   ÚmarkÚParkedVoices.markH   s   € à�~‰~Ðr   c               ó$   € V ^8„  d   QhRRRRRR/# )r	   rM   rN   rO   r   r   r   )r   s   "r   r   r5   L   s!   € ÷ ñ ˜Sð ¨#ð °)ñ r   c                óº   € \        V P                  4      pV ;P                  ^,          un        V P                  P                  W3. 4      P	                  V4       V# )z�Mark a parkable voice as being gated. Call before the first await; always pair with
``release`` (idempotent, so it may run early and again in a ``finally``).)r   r<   r:   Ú
setdefaultÚappend)r'   rM   rO   Úgates   &&& r   ÚbeginÚParkedVoices.beginL   sG   € ô ˜Ÿ™Ó(ˆØ�Š˜!Õ�Ø�‰×!Ñ! 7Ð"3°RÓ8×?Ñ?ÀÔEØˆr   c               ó(   € V ^8„  d   QhRRRRRRRR/# )r	   rM   rN   rO   ra   r   r   r    r   )r   s   "r   r   r5   T   s(   € ÷ +ñ +˜sð +¨Cð +°yð +ÀTñ +r   c                	ó"  € VP                   P                  4        W3pV P                  P                  V4      pV'       dO   W59   dG   VP	                  V4       V'       g,   V P                  V V P
                  P                  VR 4       R # R # R # R # r#   )r&   Úsetr:   r   Úremover;   Úpop)r'   rM   rO   ra   rV   Úgatess   &&&&  r   ÚreleaseÚParkedVoices.releaseT   sk   € Ø�	‰	�‰ŒØÐˆØ—‘×"Ñ" 3Ó'ˆß�T”]Ø�L‰L˜ÔßØ—N‘N 3Ð'Ø—‘—‘  TÖ*ñ ñ #‰5r   c               ó$   € V ^8„  d   QhRRRRRR/# )r	   rM   rN   rO   r   r    r   )r   s   "r   r   r5   ^   s!   € ÷ 	ñ 	 Cð 	°ð 	¸ñ 	r   c              ƒ  óš  "  € V P                   P                  W34      pV'       d~   V Uu. uF1  p\        P                  ! VP                  P                  4       4      NK3  	  pp \        P
                  ! V\        R7      G Rj  x€L
  V F  pVP                  4        K  	  R# R# u upi  L&  T F  pTP                  4        K  	  i ; i5i)zSWait (bounded) for every concurrently gated voice from this sender to park or drop.)ÚtimeoutN)r:   r   r$   Úensure_futurer&   ÚwaitÚSETTLE_TIMEOUT_SECONDSÚcancel)r'   rM   rO   ri   ÚgÚwaitsÚws   &&&    r   ÚsettleÚParkedVoices.settle^   s”   é € à—‘×"Ñ" GÐ#4Ó5ˆßÙCHÓIÁ5¸a”W×*Ò*¨1¯6©6¯;©;«=Ö9Á5ˆEÐIðÜ—l’l 5Ô2HÔI×IÐIã�AØ—H‘H–Jó ñ ùÚIáIøã�AØ—H‘H–Jò üs:   ‚)C«7B&Á"CÁ%B- ÂB+ÂB- Â	"CÂ+B- Â-CÃCc               ó4   € V ^8„  d   QhRRRRRRRRRRR	RR
R/# )r	   rM   rN   rO   ra   r   Úevent_idr
   r   Ú
relates_tor   r    r   )r   s   "r   r   r5   i   s@   € ÷ 	-ñ 	-˜Cð 	-¨ð 	-°Ið 	-Èð 	-ÐW[ð 	-Øð	-Ø"&ñ	-r   c                	ó^  € W3pVP                   V P                  P                  VR4      8:  d   R# V P                  4        V P                  P                  V. 4      pVP                  \        P                  ! 4       VP                   WEV334       VP                  R R7       VR\        ) 1 R# )é   Nc                ó   € V ^,          # )r|   r   )rH   s   &r   Ú<lambda>Ú#ParkedVoices.park.<locals>.<lambda>q   s   €  1 Q¦4r   )rV   éÿÿÿÿ)r   r;   r   rJ   r9   r_   r`   rA   rB   ÚsortÚMAX_PARKED_PER_SENDER)	r'   rM   rO   ra   ry   r
   rz   rV   Úentriess	   &&&&&&&  r   ÚparkÚParkedVoices.parki   sŠ   € àÐˆØ�8‰8�t—{‘{—‘ s¨BÓ/Ô/ÙØ�‰ŒØ—,‘,×)Ñ)¨#¨rÓ2ˆØ�‰œŸšÓ(¨$¯(©(°XÈ
Ð4SÐTÔUØ�‰™ˆÔ(ØÐ+Ô+Ð+Ð+Ò,r   c               ó(   € V ^8„  d   QhRRRRRRRR/# )r	   rM   rN   rO   Úbeforer   r   zOptional[ParkedVoice]r   )r   s   "r   r   r5   t   s)   € ÷ ñ ˜Sð ¨#ð °sð Ð?Tñ r   c                ó¦  a€ V P                  4        W3pV P                  P                  V. 4      p\        V3R l\	        V4       4       RR7      pVf   R# WV,          pVRV^,           1 V'       g   V P                  V W@P
                  9   d;   \        V P                  P                  VR4      V^,          4      V P                  V&   V^,          # )zýPop the sender's newest parked voice for this room that began before ``before``
(``mark()`` taken when the bare mention arrived); older ones are dropped, later voices
stay for their own mention. The caller re-dispatches it with ``mention_claimed=True``.c              3  óL   <"  € T F  w  rV^,          S8  g   K  Vx € K  	  R# 5i)r|   Nr   )rR   ÚirH   r‡   s   &  €r   rS   Ú%ParkedVoices.claim.<locals>.<genexpr>{   s!   øé € ÐEÑ!3™˜°q¸µt¸f±}—1’1Ó!3ùs   ƒ$š
$N)Údefaultr€   )rJ   r9   r   ÚmaxÚ	enumerater:   r;   )r'   rM   rO   r‡   rV   rƒ   ÚidxÚclaimeds   &&&f    r   ÚclaimÚParkedVoices.claimt   s­   ø€ ð 	�‰ŒØÐˆØ—,‘,×"Ñ" 3¨Ó+ˆÜÔE¤¨7Ô!3ÓEÈtÔTˆØŠ;ÙØ•,ˆØ�H�S˜1•W�HÐßØ—‘˜SÐ!Ø—.‘.Ô Ü" 4§;¡;§?¡?°3¸Ó#;¸WÀQ½ZÓHˆD�K‰K˜ÑØ�q�zÐr   )r;   r:   r<   r9   N)r*   r+   r,   r-   r(   rJ   rW   r[   rb   rj   rv   r„   r‘   r0   r   r   r   r2   r2   .   s5   † õ
õ<õ
Fõõõ+õ	õ	-÷ñ r   r2   )r.   Ú
__future__r   r$   rA   Útypingr   r   r   r   rC   rq   r‚   ÚtuplerN   r   ÚParkedVoicer   r   r   r2   r   r   r   Ú<module>r—      sb   ðñõ #ã Û ß .Ó .àÐ àÐ ð Ð ð �C˜˜t�OÕ$€õ?õ
M÷$ñ $÷Vó Vr   