Ë
    ³ŒjÞ+  ã                  óž   — d Z ddlmZ ddlZddlZddlmZ dZdZdZ	dZ
dZdZdZdZd	Zd
ZdZdZ G d„ de«      Z G d„ d«      Z G d„ d«      Zy)aE  Minimal yamux (Yet Another Multiplexer) client for TCP tunneling.

Implements the client side of the yamux protocol as specified at
https://github.com/hashicorp/yamux/blob/master/spec.md

Only the subset needed for tunnel client operation is implemented:
opening streams, sending/receiving data, flow control, and keepalive.
é    )ÚannotationsN)ÚProtocolé   é   é   é   é   é   z>BBHIIi   c                  ó$   — e Zd Zdd„Zdd„Zdd„Zy)Ú_ReadWriteCloserc                 ó   — y ©N© )ÚselfÚns     úb/var/www/html/Fitness-lenito-AI-main/venv/lib/python3.12/site-packages/langsmith/sandbox/_yamux.pyÚreadz_ReadWriteCloser.read,   s   €  Só    c                 ó   — y r   r   ©r   Údatas     r   Úwritez_ReadWriteCloser.write.   s   € ¨r   c                 ó   — y r   r   ©r   s    r   Úclosez_ReadWriteCloser.close0   s   € ˜Sr   N©r   ÚintÚreturnÚbytes©r   r   r   r   ©r   ÚNone)Ú__name__Ú
__module__Ú__qualname__r   r   r   r   r   r   r   r   +   s   „ Û(ã,ä r   r   c                  ób   — e Zd ZdZdd„Zedd„«       Zdd„Zdd„Zdd„Z	dd„Z
dd„Zdd	„Zdd
„Zy)ÚYamuxStreamz¾A single multiplexed stream within a yamux session.

    Streams are created via :meth:`YamuxSession.open_stream` and provide
    blocking read/write/close with per-stream flow control.
    c                óø   — || _         || _        t        «       | _        t	        j
                  «       | _        d| _        d| _        t        | _
        t        | _        t	        j
                  «       | _        d| _        y )NF)Ú_idÚ_sessionÚ	bytearrayÚ	_recv_bufÚ	threadingÚ	ConditionÚ
_recv_condÚ_recv_closedÚ_recv_errorÚ_INITIAL_WINDOW_SIZEÚ_recv_windowÚ_send_windowÚ
_send_condÚ_send_closed)r   Ú	stream_idÚsessions      r   Ú__init__zYamuxStream.__init__?   sa   € ØˆŒØˆŒä"›ˆŒÜ#×-Ñ-Ó/ˆŒØ!ˆÔØ ˆÔÜ0ˆÔä0ˆÔÜ#×-Ñ-Ó/ˆŒØ!ˆÕr   c                ó   — | j                   S r   )r)   r   s    r   r7   zYamuxStream.stream_idM   s   € à�x‰xˆr   c                óø  — d}| j                   5  | j                  sW| j                  sK| j                  s?| j                   j	                  «        | j                  s| j                  s| j                  sŒ?| j                  r| j                  st        d«      ‚| j                  s
	 ddd«       yt        |t        | j                  «      «      }t        | j                  d| «      }| j                  d|…= t        | j                  z
  }|t        dz  k\  r|}| xj                  |z  c_
        ddd«       |dkD  r)	 | j                  j                  | j                  |«       S S # 1 sw Y   Œ9xY w# t        $ r Y S w xY w)z¥Read up to *n* bytes, blocking until data is available.

        Returns ``b""`` on EOF (FIN received).
        Raises :class:`ConnectionResetError` on RST.
        r   zyamux stream reset by peerNr   r   )r/   r,   r0   r1   ÚwaitÚConnectionResetErrorÚminÚlenr   r2   r3   r*   Ú_send_window_updater)   Ú	Exception)r   r   Údelta_to_sendÚsizer   Úconsumeds         r   r   zYamuxStream.readQ   sE  € ð ˆà�_‹_Ø—n’n¨T×->Ò->Àt×GWÒGWØ—‘×$Ñ$Ô&ð —n’n¨T×->Ò->Àt×GWÓGWð ×Ò¨¯ªÜ*Ð+GÓHÐHà—>’>Ø÷ ˆ_ô �qœ#˜dŸn™nÓ-Ó.ˆDÜ˜Ÿ™¨¨Ð.Ó/ˆDØ—‘˜u ˜uÐ%ä+¨d×.?Ñ.?Ñ?ˆHØÔ/°1Ñ4Ò4Ø (�Ø×!Ò! XÑ-Õ!÷# ð& ˜1ÒðØ—‘×1Ñ1°$·(±(¸MÔJð ˆˆtˆ÷3 ˆ_ûô, ò Øàˆðús+   �A#E Á30E Â,A<E Ä6&E, Å E)Å,	E9Å8E9c           	     óŽ  — | j                   rt        d«      ‚d}t        |«      }|t        |«      k  rý| j                  5  | j
                  dk(  rB| j                   s6| j                  j                  «        | j
                  dk(  r| j                   sŒ6| j                   rt        d«      ‚t        t        |«      |z
  | j
                  «      }| xj
                  |z  c_        ddd«       | j                  j                  | j                  t        |||z    «      «       ||z  }|t        |«      k  rŒýt        |«      S # 1 sw Y   Œ]xY w)z7Write *data*, blocking if the send window is exhausted.zyamux stream closed for writingr   N)r6   ÚBrokenPipeErrorÚ
memoryviewr?   r5   r4   r<   r>   r*   Ú
_send_datar)   r   )r   r   ÚoffsetÚmvÚchunks        r   r   zYamuxStream.writet   s  € à×ÒÜ!Ð"CÓDÐDàˆÜ˜Óˆà”s˜4“yÒ Ø—“Ø×'Ñ'¨1Ò,°T×5FÒ5FØ—O‘O×(Ñ(Ô*ð ×'Ñ'¨1Ò,°T×5FÓ5Fà×$Ò$Ü)Ð*KÓLÐLÜœC ›I¨Ñ.°×0AÑ0AÓB�Ø×!Ò! UÑ*Õ!÷ !ð �M‰M×$Ñ$ T§X¡X¬u°R¸ÀÈ%ÁÐ5PÓ/QÔRØ�e‰OˆFð ”s˜4“yÓ ô �4‹yÐ÷ !�ús   ¿AD;ÂAD;Ä;Ec                ó¤  — | j                   s8d| _         	 | j                  j                  t        t        | j
                  d«       | j                  5  d| _        | j                  j                  «        ddd«       | j                  5  | j                  j                  «        ddd«       y# t        $ r Y Œqw xY w# 1 sw Y   ŒHxY w# 1 sw Y   yxY w)z/Close the stream (sends FIN to the remote end).Tr   N)r6   r*   Ú_send_frameÚ
_TYPE_DATAÚ	_FLAG_FINr)   rA   r/   r0   Ú
notify_allr5   r   s    r   r   zYamuxStream.closeŠ   sž   € à× Ò Ø $ˆDÔðØ—‘×)Ñ)¬*´iÀÇÁÈ1ÔMð �_‹_Ø $ˆDÔØ�O‰O×&Ñ&Ô(÷ ð �_‹_Ø�O‰O×&Ñ&Ô(÷ ˆ_øô ò Ùðú÷ ˆ_ú÷ ˆ_ús)   •0B+ Á"B:ÂCÂ+	B7Â6B7Â:CÃCc                óì   — | j                   5  | j                  j                  |«       | xj                  t	        |«      z  c_        | j                   j                  «        d d d «       y # 1 sw Y   y xY wr   )r/   r,   Úextendr3   r?   rP   r   s     r   Ú_receive_datazYamuxStream._receive_data›   sJ   € Ø�_‹_Ø�N‰N×!Ñ! $Ô'Ø×Ò¤ T£Ñ*ÕØ�O‰O×&Ñ&Ô(÷ �_‰_ús   �AA*Á*A3c                óˆ   — | j                   5  d| _        | j                   j                  «        d d d «       y # 1 sw Y   y xY w©NT)r/   r0   rP   r   s    r   Ú_receive_finzYamuxStream._receive_fin¡   s+   € Ø�_‹_Ø $ˆDÔØ�O‰O×&Ñ&Ô(÷ �_‰_ús	   �"8¸Ac                ó  — | j                   5  d| _        | j                   j                  «        d d d «       | j                  5  d| _        | j                  j                  «        d d d «       y # 1 sw Y   Œ@xY w# 1 sw Y   y xY wrU   )r/   r1   rP   r5   r6   r   s    r   Ú_receive_rstzYamuxStream._receive_rst¦   s^   € Ø�_‹_Ø#ˆDÔØ�O‰O×&Ñ&Ô(÷ ð �_‹_Ø $ˆDÔØ�O‰O×&Ñ&Ô(÷ ˆ_÷ ˆ_ú÷ ˆ_ús   �"A.Á"A:Á.A7Á:Bc                ó¤   — | j                   5  | xj                  |z  c_        | j                   j                  «        d d d «       y # 1 sw Y   y xY wr   )r5   r4   rP   )r   Údeltas     r   Ú_update_send_windowzYamuxStream._update_send_window®   s4   € Ø�_‹_Ø×Ò Ñ&ÕØ�O‰O×&Ñ&Ô(÷ �_‰_ús   �0AÁAN)r7   r   r8   ÚYamuxSessionr   r"   )r   r   r   r    r!   )r   r   r   r"   )rZ   r   r   r"   )r#   r$   r%   Ú__doc__r9   Úpropertyr7   r   r   r   rS   rV   rX   r[   r   r   r   r'   r'   8   sD   „ ñó"ð òó ðó!óFó,)ó")ó)ó
)ô)r   r'   c                  óŽ   — e Zd ZdZdd„Zedd„«       Zdd„Zdd„Z	 	 	 	 	 	 	 	 	 	 dd„Z	dd„Z
dd„Zdd	„Zdd
„Zdd„Zdd„Zdd„Zy)r\   a·  Client-side yamux session over a byte-stream connection.

    The connection must implement ``read(n) -> bytes``, ``write(data) -> int``,
    and ``close() -> None``.  Typically this is a :class:`_WSAdapter` wrapping
    a WebSocket.

    Usage::

        session = YamuxSession(conn)
        stream = session.open_stream()
        stream.write(b"hello")
        data = stream.read(1024)
        stream.close()
        session.close()
    c                óÖ  — || _         i | _        d| _        t        j                  «       | _        t        j                  «       | _        d| _        t        j                  «       | _	        t        j                  | j                  dd¬«      | _        | j                  j                  «        t        j                  | j                  dd¬«      | _        | j                  j                  «        y )Nr   FTzyamux-reader)ÚtargetÚdaemonÚnamezyamux-keepalive)Ú_connÚ_streamsÚ_next_stream_idr-   ÚLockÚ_lockÚ_write_lockÚ_closedÚEventÚ_shutdown_eventÚThreadÚ
_read_loopÚ_reader_threadÚstartÚ_keepalive_loopÚ_keepalive_thread)r   Úconns     r   r9   zYamuxSession.__init__Ê   s²   € ØˆŒ
Ø02ˆŒØ ˆÔÜ—^‘^Ó%ˆŒ
Ü$Ÿ>™>Ó+ˆÔØˆŒÜ(Ÿ™Ó0ˆÔä'×.Ñ.Ø—?‘?¨4°nô
ˆÔð 	×Ñ×!Ñ!Ô#ä!*×!1Ñ!1Ø×'Ñ'°Ð;Lô"
ˆÔð 	×Ñ×$Ñ$Õ&r   c                ó   — | j                   S r   )rj   r   s    r   Ú	is_closedzYamuxSession.is_closedÝ   s   € à�|‰|Ðr   c                ó&  — | j                   5  | j                  rt        d«      ‚| j                  }| xj                  dz  c_        t	        || «      }|| j
                  |<   ddd«       | j                  t        t        d«       S # 1 sw Y   Œ'xY w)zgOpen a new multiplexed stream.

        Raises :class:`RuntimeError` if the session is closed.
        zyamux session is closedr   Nr   )	rh   rj   ÚRuntimeErrorrf   r'   re   rM   Ú_TYPE_WINDOW_UPDATEÚ	_FLAG_SYN)r   r7   Ústreams      r   Úopen_streamzYamuxSession.open_streamá   s}   € ð
 �Z‹ZØ�|Š|Ü"Ð#<Ó=Ð=Ø×,Ñ,ˆIØ× Ò  AÑ%Õ Ü  ¨DÓ1ˆFØ'-ˆD�M‰M˜)Ñ$÷ ð 	×ÑÔ,¬i¸ÀAÔFØˆ÷ ˆZús   �ABÂBc                ó¦  — | j                   ryd| _         | j                  j                  «        	 | j                  t        ddd«       | j                  5  | j                  j                  «       D ]  }|j                  «        Œ 	 ddd«       	 | j                  j                  «        y# t
        $ r Y Œlw xY w# 1 sw Y   Œ4xY w# t
        $ r Y yw xY w)z"Close the session and all streams.NTr   )rj   rl   ÚsetrM   Ú_TYPE_GO_AWAYrA   rh   re   ÚvaluesrX   rd   r   )r   rz   s     r   r   zYamuxSession.closeñ   s³   € à�<Š<ØØˆŒØ×Ñ× Ñ Ô"ð	Ø×Ñœ]¨A¨q°!Ô4ð �Z‹ZØŸ-™-×.Ñ.Ö0�Ø×#Ñ#Õ%ñ 1÷ ð	Ø�J‰J×ÑÕøô ò 	Ùð	ú÷ ˆZûô ò 	Ùð	ús/   °B) Á0B8ÂC Â)	B5Â4B5Â8CÃ	CÃCc                óÀ   — t        j                  t        t        ||||«      }| j                  5  | j
                  j                  |«       d d d «       y # 1 sw Y   y xY wr   )ÚstructÚpackÚ_HEADER_FMTÚ_VERSIONri   rd   r   )r   Úmsg_typeÚflagsr7   ÚlengthÚhdrs         r   rM   zYamuxSession._send_frame  sC   € ô �k‰kœ+¤x°¸5À)ÈVÓTˆØ×ÓØ�J‰J×Ñ˜SÔ!÷ ×Ñús   ¯AÁAc           
     óà   — t        j                  t        t        t        d|t        |«      «      }| j                  5  | j                  j                  ||z   «       d d d «       y # 1 sw Y   y xY w©Nr   )	r�   r‚   rƒ   r„   rN   r?   ri   rd   r   )r   r7   r   rˆ   s       r   rH   zYamuxSession._send_data  sI   € Ü�k‰kœ+¤x´¸QÀ	Ì3ÈtË9ÓUˆØ×ÓØ�J‰J×Ñ˜S 4™ZÔ(÷ ×Ñús   ¼A$Á$A-c                ó4   — | j                  t        d||«       y rŠ   )rM   rx   )r   r7   rZ   s      r   r@   z YamuxSession._send_window_update  s   € Ø×ÑÔ,¨a°¸EÕBr   c                óÀ  — 	 | j                   s¿| j                  j                  t        «      }t	        |«      t        k  rn�t        j                  t        |«      \  }}}}}|t        k(  r| j                  |||«       nC|t        k(  r| j                  |||«       n&|t        k(  r| j                  ||«       n
|t        k(  rn| j                   sŒ¿| j                   sgd| _         | j                   j#                  «        | j$                  5  | j&                  j)                  «       D ]  }|j+                  «        Œ 	 d d d «       y y # t        $ r Y Œw xY w# 1 sw Y   y xY w# | j                   ssd| _         | j                   j#                  «        | j$                  5  | j&                  j)                  «       D ]  }|j+                  «        Œ 	 d d d «       w # 1 sw Y   w xY ww xY wrU   )rj   rd   r   Ú_HEADER_SIZEr?   r�   Úunpackrƒ   rN   Ú_handle_datarx   Ú_handle_window_updateÚ
_TYPE_PINGÚ_handle_pingr~   rA   rl   r}   rh   re   r   rX   )r   Ú	hdr_bytesÚ_verr…   r†   r7   r‡   rz   s           r   rn   zYamuxSession._read_loop  s€  € ð	.Ø—l’lØ ŸJ™JŸO™O¬LÓ9�	Ü�y“>¤LÒ0Øä;A¿=¹=Ü ó<Ñ8��h  y°&ð œzÒ)Ø×%Ñ% e¨Y¸Õ?ØÔ!4Ò4Ø×.Ñ.¨u°iÀÕHØ¤Ò+Ø×%Ñ% e¨VÕ4Ø¤Ò.Øð! —l“lð( —<’<Ø#�”Ø×$Ñ$×(Ñ(Ô*Ø—Z“ZØ"&§-¡-×"6Ñ"6Ö"8˜Ø×+Ñ+Õ-ñ #9÷  �Zð  øô ò 	Ùð	ú÷  �Zûð —<’<Ø#�”Ø×$Ñ$×(Ñ(Ô*Ø—Z“ZØ"&§-¡-×"6Ñ"6Ö"8˜Ø×+Ñ+Õ-ñ #9÷  —Z‘Zúð  úsH   ‚C
E Ä0EÅ	EÅ
E ÅEÅE ÅEÅ:GÆ0GÇ	GÇGÇGc                óR  — |dkD  r| j                   j                  |«      nd}| j                  5  | j                  j	                  |«      }d d d «       €y |r|j                  |«       |t        z  r|j                  «        |t        z  r|j                  «        y y # 1 sw Y   ŒSxY w)Nr   r   )
rd   r   rh   re   ÚgetrS   rO   rV   Ú	_FLAG_RSTrX   )r   r†   r7   r‡   Úpayloadrz   s         r   r�   zYamuxSession._handle_data6  sŠ   € Ø-3°aªZ�$—*‘*—/‘/ &Ô)¸Sˆà�Z‹ZØ—]‘]×&Ñ& yÓ1ˆF÷ àˆ>ØáØ× Ñ  Ô)Ø”9ÒØ×ÑÔ!Ø”9ÒØ×ÑÕ!ð ÷ ˆZús   ¯BÂB&c                ó  — | j                   5  | j                  j                  |«      }d d d «       €y |dkD  r|j                  |«       |t        z  r|j                  «        |t        z  r|j                  «        y y # 1 sw Y   ŒVxY wrŠ   )rh   re   r–   r[   rO   rV   r—   rX   )r   r†   r7   r‡   rz   s        r   r�   z"YamuxSession._handle_window_updateE  st   € Ø�Z‹ZØ—]‘]×&Ñ& yÓ1ˆF÷ àˆ>Øà�AŠ:Ø×&Ñ& vÔ.Ø”9ÒØ×ÑÔ!Ø”9ÒØ×ÑÕ!ð ÷ ˆZús   �A>Á>Bc                óp   — |t         z  r	 | j                  t        t        d|«       y y # t        $ r Y y w xY wrŠ   )ry   rM   r‘   Ú	_FLAG_ACKrA   )r   r†   Úopaques      r   r’   zYamuxSession._handle_pingR  s<   € Ø”9ÒðØ× Ñ ¤¬Y¸¸6ÕBð øô ò Ùðús   ‹) ©	5´5c                óÚ   — d}| j                   j                  d«      s?|dz  }	 | j                  t        t        d|«       | j                   j                  d«      sŒ>y y # t
        $ r Y y w xY w)Nr   é   r   )rl   r<   rM   r‘   ry   rA   )r   Úping_ids     r   rq   zYamuxSession._keepalive_loop[  sg   € ØˆØ×&Ñ&×+Ñ+¨BÔ/Ø�q‰LˆGðØ× Ñ ¤¬Y¸¸7ÔCð ×&Ñ&×+Ñ+¨B×/øô ò Ùðús   ¤A Á	A*Á)A*N)rs   r   r   r"   )r   Úbool)r   r'   r!   )
r…   r   r†   r   r7   r   r‡   r   r   r"   )r7   r   r   r   r   r"   )r7   r   rZ   r   r   r"   )r†   r   r7   r   r‡   r   r   r"   )r†   r   rœ   r   r   r"   )r#   r$   r%   r]   r9   r^   ru   r{   r   rM   rH   r@   rn   r�   r�   r’   rq   r   r   r   r\   r\   ¹   s{   „ ñó 'ð& òó ðóó ð."Øð"Ø$'ð"Ø47ð"ØADð"à	ó"ó)ó
Có
.ó:"ó"óôr   r\   )r]   Ú
__future__r   r�   r-   Útypingr   r„   rN   rx   r‘   r~   ry   r›   rO   r—   r�   rƒ   r2   r   r'   r\   r   r   r   Ú<module>r£      s}   ðñõ #ã Û Ý ð €à€
ØÐ Ø€
Ø€à€	Ø€	Ø€	Ø€	à€Ø€à!Ð ô!�xô !÷y)ñ y)÷Biò ir   