Ë
    Õ±1h©g  ã                  óä  — d dl mZ d dlZd dlZd dlZd dlmZ d dlmZ ddl	m
Z
mZmZmZmZmZ ddlmZ ddlmZmZmZmZmZmZmZmZmZmZ dd	lmZmZ dd
l m!Z! ddlm"Z"m#Z#m$Z$ g d¢Z%eeeef   Z&	  G d„ dejN                  «      Z(e(jR                  Z)e(jT                  Z* G d„ dejN                  «      Z+e+jX                  Z,e+jZ                  Z-e+j\                  Z.e+j^                  Z/dZ0	  G d„ d«      Z1y)é    )ÚannotationsN)Ú	Generator)ÚUnioné   )ÚConnectionClosedÚConnectionClosedErrorÚConnectionClosedOKÚInvalidStateÚPayloadTooBigÚProtocolError)Ú	Extension)
ÚOK_CLOSE_CODESÚ	OP_BINARYÚOP_CLOSEÚOP_CONTÚOP_PINGÚOP_PONGÚOP_TEXTÚCloseÚ	CloseCodeÚFrame)ÚRequestÚResponse)ÚStreamReader)Ú
LoggerLikeÚOriginÚSubprotocol)ÚProtocolÚSideÚStateÚSEND_EOFc                  ó&   — e Zd ZdZ ed«      \  ZZy)r   z6A WebSocket connection is either a server or a client.é   N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__ÚrangeÚSERVERÚCLIENT© ó    úQ/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/websockets/protocol.pyr   r   /   s   „ Ù@á˜1“X�N€F‰Fr,   r   c                  ó*   — e Zd ZdZ ed«      \  ZZZZy)r    z6A WebSocket connection is in one of these four states.é   N)	r$   r%   r&   r'   r(   Ú
CONNECTINGÚOPENÚCLOSINGÚCLOSEDr+   r,   r-   r    r    9   s   „ Ù@á(-¨a«Ñ%€J��g™vr,   r    r,   c                  ó2  — e Zd ZdZedddœ	 	 	 	 	 	 	 	 	 dd„Zedd„«       Zej                  dd„«       Zedd„«       Z	ed d	„«       Z
ed!d
„«       Zd"d„Zd#d„Zd$d„Zd%d$d„Zd%d$d„Zd&d'd„Zd"d„Zd"d„Zd(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   a6  
    Sans-I/O implementation of a WebSocket connection.

    Args:
        side: :attr:`~Side.CLIENT` or :attr:`~Side.SERVER`.
        state: Initial state of the WebSocket connection.
        max_size: Maximum size of incoming messages in bytes;
            :obj:`None` disables the limit.
        logger: Logger for this connection; depending on ``side``,
            defaults to ``logging.getLogger("websockets.client")``
            or ``logging.getLogger("websockets.server")``;
            see the :doc:`logging guide <../../topics/logging>` for details.

    i   N)ÚstateÚmax_sizeÚloggerc               óH  — t        j                  «       | _        	 |€0t        j                  d|j
                  j                  «       › �«      }|| _        	 |j                  t        j                  «      | _
        || _        || _        || _        d | _        d| _        d | _        g | _        d | _        d | _        d | _        d | _        d | _        	 d| _        t1        «       | _        g | _        g | _        | j9                  «       | _        t=        | j:                  «       d | _        y )Nzwebsockets.F) ÚuuidÚuuid4ÚidÚloggingÚ	getLoggerÚnameÚlowerr7   ÚisEnabledForÚDEBUGÚdebugÚsider5   r6   Úcur_sizeÚexpect_continuation_frameÚoriginÚ
extensionsÚsubprotocolÚ
close_rcvdÚ
close_sentÚclose_rcvd_then_sentÚhandshake_excÚeof_sentr   ÚreaderÚeventsÚwritesÚparseÚparserÚnextÚ
parser_exc)ÚselfrC   r5   r6   r7   s        r-   Ú__init__zProtocol.__init__Y   s  € ô "ŸZ™Z›\ˆŒØBð ˆ>Ü×&Ñ&¨°T·Y±Y·_±_Ó5FÐ4GÐ'HÓIˆFØ"(ˆŒØ)ð ×(Ñ(¬¯©Ó7ˆŒ
ð ˆŒ	ð ˆŒ
ð !ˆŒð %)ˆŒð */ˆÔ&ð &*ˆŒØ+-ˆŒØ/3ˆÔð )-ˆŒØ(,ˆŒØ15ˆÔ!ð 04ˆÔð	ð ˆŒô #“nˆŒØ#%ˆŒØ#%ˆŒØ—j‘j“lˆŒÜˆT�[‰[ÔØ,0ˆ�r,   c                ó   — | j                   S )a­  
        State of the WebSocket connection.

        Defined in 4.1_, 4.2_, 7.1.3_, and 7.1.4_ of :rfc:`6455`.

        .. _4.1: https://datatracker.ietf.org/doc/html/rfc6455#section-4.1
        .. _4.2: https://datatracker.ietf.org/doc/html/rfc6455#section-4.2
        .. _7.1.3: https://datatracker.ietf.org/doc/html/rfc6455#section-7.1.3
        .. _7.1.4: https://datatracker.ietf.org/doc/html/rfc6455#section-7.1.4

        )Ú_state©rU   s    r-   r5   zProtocol.state�   s   € ð �{‰{Ðr,   c                óv   — | j                   r&| j                  j                  d|j                  «       || _        y )Nz= connection is %s)rB   r7   r>   rX   )rU   r5   s     r-   r5   zProtocol.state¬   s)   € à�:Š:Ø�K‰K×ÑÐ2°E·J±JÔ?Øˆ�r,   c                óŒ   — | j                   t        ury| j                  €t        j                  S | j                  j
                  S )zþ
        WebSocket close code received from the remote endpoint.

        Defined in 7.1.5_ of :rfc:`6455`.

        .. _7.1.5: https://datatracker.ietf.org/doc/html/rfc6455#section-7.1.5

        :obj:`None` if the connection isn't closed yet.

        N)r5   r3   rI   r   ÚABNORMAL_CLOSUREÚcoderY   s    r-   Ú
close_codezProtocol.close_code²   s9   € ð �:‰:œVÑ#ØØ�_‰_Ð$Ü×-Ñ-Ð-à—?‘?×'Ñ'Ð'r,   c                ón   — | j                   t        ury| j                  €y| j                  j                  S )a  
        WebSocket close reason  received from the remote endpoint.

        Defined in 7.1.6_ of :rfc:`6455`.

        .. _7.1.6: https://datatracker.ietf.org/doc/html/rfc6455#section-7.1.6

        :obj:`None` if the connection isn't closed yet.

        NÚ )r5   r3   rI   ÚreasonrY   s    r-   Úclose_reasonzProtocol.close_reasonÅ   s0   € ð �:‰:œVÑ#ØØ�_‰_Ð$Øà—?‘?×)Ñ)Ð)r,   c                ód  — | j                   t        u sJ d«       ‚| j                  �K| j                  �?| j                  j                  t
        v r#| j                  j                  t
        v rt        }nt        } || j                  | j                  | j                  «      }| j                  |_
        |S )aè  
        Exception to raise when trying to interact with a closed connection.

        Don't raise this exception while the connection :attr:`state`
        is :attr:`~websockets.protocol.State.CLOSING`; wait until
        it's :attr:`~websockets.protocol.State.CLOSED`.

        Indeed, the exception includes the close code and reason, which are
        known only once the connection is closed.

        Raises:
            AssertionError: If the connection isn't closed yet.

        zconnection isn't closed yet)r5   r3   rI   rJ   r]   r   r	   r   rK   rT   Ú	__cause__)rU   Úexc_typeÚexcs      r-   Ú	close_exczProtocol.close_excØ   s“   € ð  �z‰zœVÑ#ÐBÐ%BÓBÐ#ð �O‰OÐ'Ø—‘Ð+Ø—‘×$Ñ$¬Ñ6Ø—‘×$Ñ$¬Ñ6ä)‰Hä,ˆHÙ (Ø�O‰OØ�O‰OØ×%Ñ%ó!
ˆð Ÿ™ˆŒØˆ
r,   c                ód   — | j                   j                  |«       t        | j                  «       y)aH  
        Receive data from the network.

        After calling this method:

        - You must call :meth:`data_to_send` and send this data to the network.
        - You should call :meth:`events_received` and process resulting events.

        Raises:
            EOFError: If :meth:`receive_eof` was called earlier.

        N)rN   Ú	feed_datarS   rR   ©rU   Údatas     r-   Úreceive_datazProtocol.receive_dataþ   s"   € ð 	�‰×Ñ˜dÔ#ÜˆT�[‰[Õr,   c                ó�   — | j                   j                  ry| j                   j                  «        t        | j                  «       y)a¡  
        Receive the end of the data stream from the network.

        After calling this method:

        - You must call :meth:`data_to_send` and send this data to the network;
          it will return ``[b""]``, signaling the end of the stream, or ``[]``.
        - You aren't expected to call :meth:`events_received`; it won't return
          any new events.

        :meth:`receive_eof` is idempotent.

        N)rN   ÚeofÚfeed_eofrS   rR   rY   s    r-   Úreceive_eofzProtocol.receive_eof  s.   € ð �;‰;�?Š?ØØ�‰×ÑÔÜˆT�[‰[Õr,   c                ó  — | j                   st        d«      ‚| j                  t        ur0t	        d| j
                  j                  j                  «       › �«      ‚| | _         | j                  t        t        ||«      «       y)aõ  
        Send a `Continuation frame`_.

        .. _Continuation frame:
            https://datatracker.ietf.org/doc/html/rfc6455#section-5.6

        Parameters:
            data: payload containing the same kind of data
                as the initial frame.
            fin: FIN bit; set it to :obj:`True` if this is the last frame
                of a fragmented message and to :obj:`False` otherwise.

        Raises:
            ProtocolError: If a fragmented message isn't in progress.

        úunexpected continuation frameúconnection is N)rE   r   rX   r1   r
   r5   r>   r?   Ú
send_framer   r   ©rU   rk   Úfins      r-   Úsend_continuationzProtocol.send_continuation#  sh   € ð" ×-Ò-ÜÐ ?Ó@Ð@Ø�;‰;œdÑ"Ü °·
±
·±×0EÑ0EÓ0GÐ/HÐIÓJÐJØ-0¨ˆÔ&Ø�‰œœg t¨SÓ1Õ2r,   c                ó  — | j                   rt        d«      ‚| j                  t        ur0t	        d| j
                  j                  j                  «       › �«      ‚| | _         | j                  t        t        ||«      «       y)a£  
        Send a `Text frame`_.

        .. _Text frame:
            https://datatracker.ietf.org/doc/html/rfc6455#section-5.6

        Parameters:
            data: payload containing text encoded with UTF-8.
            fin: FIN bit; set it to :obj:`False` if this is the first frame of
                a fragmented message.

        Raises:
            ProtocolError: If a fragmented message is in progress.

        úexpected a continuation framers   N)rE   r   rX   r1   r
   r5   r>   r?   rt   r   r   ru   s      r-   Ú	send_textzProtocol.send_text;  sh   € ð  ×)Ò)ÜÐ ?Ó@Ð@Ø�;‰;œdÑ"Ü °·
±
·±×0EÑ0EÓ0GÐ/HÐIÓJÐJØ-0¨ˆÔ&Ø�‰œœg t¨SÓ1Õ2r,   c                ó  — | j                   rt        d«      ‚| j                  t        ur0t	        d| j
                  j                  j                  «       › �«      ‚| | _         | j                  t        t        ||«      «       y)a¥  
        Send a `Binary frame`_.

        .. _Binary frame:
            https://datatracker.ietf.org/doc/html/rfc6455#section-5.6

        Parameters:
            data: payload containing arbitrary binary data.
            fin: FIN bit; set it to :obj:`False` if this is the first frame of
                a fragmented message.

        Raises:
            ProtocolError: If a fragmented message is in progress.

        ry   rs   N)rE   r   rX   r1   r
   r5   r>   r?   rt   r   r   ru   s      r-   Úsend_binaryzProtocol.send_binaryR  sh   € ð  ×)Ò)ÜÐ ?Ó@Ð@Ø�;‰;œdÑ"Ü °·
±
·±×0EÑ0EÓ0GÐ/HÐIÓJÐJØ-0¨ˆÔ&Ø�‰œœi¨¨sÓ3Õ4r,   c                óœ  — | j                   t        ur0t        d| j                  j                  j                  «       › �«      ‚|€-|dk7  rt        d«      ‚t        t        j                  d«      }d}nt        ||«      }|j                  «       }| j                  t        t        |«      «       | j                  �J ‚|| _        t         | _        y)a_  
        Send a `Close frame`_.

        .. _Close frame:
            https://datatracker.ietf.org/doc/html/rfc6455#section-5.5.1

        Parameters:
            code: close code.
            reason: close reason.

        Raises:
            ProtocolError: If the code isn't valid or if a reason is provided
                without a code.

        rs   Nr`   z#cannot send a reason without a coder,   )rX   r1   r
   r5   r>   r?   r   r   r   ÚNO_STATUS_RCVDÚ	serializert   r   r   rI   rJ   r2   ©rU   r]   ra   Úcloserk   s        r-   Ú
send_closezProtocol.send_closei  s®   € ð$ �;‰;œdÑ"Ü °·
±
·±×0EÑ0EÓ0GÐ/HÐIÓJÐJØˆ<Ø˜Š|Ü#Ð$IÓJÐJÜœ)×2Ñ2°BÓ7ˆEØ‰Dä˜$ Ó'ˆEØ—?‘?Ó$ˆDà�‰œœh¨Ó-Ô.ð �‰Ð&Ð&Ð&ØˆŒÜˆ�
r,   c                óê   — | j                   t        urB| j                   t        ur0t        d| j                  j
                  j                  «       › �«      ‚| j                  t        t        |«      «       y)zÚ
        Send a `Ping frame`_.

        .. _Ping frame:
            https://datatracker.ietf.org/doc/html/rfc6455#section-5.5.2

        Parameters:
            data: payload containing arbitrary binary data.

        rs   N)
rX   r1   r2   r
   r5   r>   r?   rt   r   r   rj   s     r-   Ú	send_pingzProtocol.send_ping�  óR   € ð �;‰;œdÑ" t§{¡{¼'Ñ'AÜ °·
±
·±×0EÑ0EÓ0GÐ/HÐIÓJÐJØ�‰œœg tÓ,Õ-r,   c                óê   — | j                   t        urB| j                   t        ur0t        d| j                  j
                  j                  «       › �«      ‚| j                  t        t        |«      «       y)zÚ
        Send a `Pong frame`_.

        .. _Pong frame:
            https://datatracker.ietf.org/doc/html/rfc6455#section-5.5.3

        Parameters:
            data: payload containing arbitrary binary data.

        rs   N)
rX   r1   r2   r
   r5   r>   r?   rt   r   r   rj   s     r-   Ú	send_pongzProtocol.send_pong�  r…   r,   c                ó¾  — | j                   t        u rs|t        j                  k7  r`t	        ||«      }|j                  «       }| j                  t        t        |«      «       || _	        | j                  �d| _        t        | _         | j                  t        u r| j                  s| j!                  «        | j#                  «       | _        t'        | j$                  «       y)a?  
        `Fail the WebSocket connection`_.

        .. _Fail the WebSocket connection:
            https://datatracker.ietf.org/doc/html/rfc6455#section-7.1.7

        Parameters:
            code: close code
            reason: close reason

        Raises:
            ProtocolError: If the code isn't valid.
        NT)r5   r1   r   r\   r   r   rt   r   r   rJ   rI   rK   r2   rC   r)   rM   Úsend_eofÚdiscardrR   rS   r€   s        r-   ÚfailzProtocol.fail­  s£   € ð& �:‰:œÑØ”y×1Ñ1Ò1Ü˜d FÓ+�Ø—‘Ó(�Ø—‘¤¤h°Ó 5Ô6Ø"'�”ð
 —?‘?Ð.Ø04�DÔ-Ü$�”
ð �9‰9œÑ t§}¢}Ø�M‰MŒOð —l‘l“nˆŒÜˆT�[‰[Õr,   c                ó.   — | j                   g c}| _         |S )a*  
        Fetch events generated from data received from the network.

        Call this method immediately after any of the ``receive_*()`` methods.

        Process resulting events, likely by passing them to the application.

        Returns:
            Events read from the connection.
        )rO   )rU   rO   s     r-   Úevents_receivedzProtocol.events_receivedÞ  s   € ð #Ÿk™k¨2Ðˆ�”Øˆr,   c                ó.   — | j                   g c}| _         |S )aÉ  
        Obtain data to send to the network.

        Call this method immediately after any of the ``receive_*()``,
        ``send_*()``, or :meth:`fail` methods.

        Write resulting data to the connection.

        The empty bytestring :data:`~websockets.protocol.SEND_EOF` signals
        the end of the data stream. When you receive it, half-close the TCP
        connection.

        Returns:
            Data to write to the connection.

        )rP   )rU   rP   s     r-   Údata_to_sendzProtocol.data_to_sendî  s   € ð" #Ÿk™k¨2Ðˆ�”Øˆr,   c                ó´   — | j                   t        u ry| j                   t        u ry| j                   t        u ry| j                   t        u sJ ‚| j
                  S )a©  
        Tell if the TCP connection is expected to close soon.

        Call this method immediately after any of the ``receive_*()``,
        ``send_close()``, or :meth:`fail` methods.

        If it returns :obj:`True`, schedule closing the TCP connection after a
        short timeout if the other side hasn't already closed it.

        Returns:
            Whether the TCP connection is expected to close soon.

        FT)r5   r1   r2   r3   r0   rM   rY   s    r-   Úclose_expectedzProtocol.close_expected  sN   € ðD �:‰:œÑØØ�:‰:œÑ ØØ�:‰:œÑØØ�z‰zœZÑ'Ð'Ð'Ø�}‰}Ðr,   c              #  óˆ  K  — 	 	 | j                   j                  «       E d{  –—† r2| j                  r| j                  j                  d«       t	        d«      ‚| j
                  €d}n2| j                  €| j
                  }n| j
                  | j                  z
  }t        j                  | j                   j                  | j                  t        u || j                  ¬«      E d{  –—† }| j                  r| j                  j                  d|«       | j                  |«       �Œ7 �Œ7 ŒB# t        $ r;}| j                  t         j"                  t%        |«      «       || _        Y d}~�nKd}~wt        $ r;}| j                  t         j(                  t%        |«      «       || _        Y d}~�n	d}~wt*        $ rJ}| j                  t         j,                  |j.                  › d|j0                  › �«       || _        Y d}~n¸d}~wt2        $ rU}|j5                  | j                  «       | j                  t         j6                  t%        |«      «       || _        Y d}~n\d}~wt8        $ rM}| j                  j;                  dd¬	«       | j                  t         j<                  «       || _        Y d}~nd}~ww xY wd–— t?        d
«      ‚­w)a-  
        Parse incoming data into frames.

        :meth:`receive_data` and :meth:`receive_eof` run this generator
        coroutine until it needs more data or reaches EOF.

        :meth:`parse` never raises an exception. Instead, it sets the
        :attr:`parser_exc` and yields control.

        TNú< EOFzunexpected end of stream)Úmaskr6   rG   z< %sz at position zparser failed)Úexc_infoz"parse() shouldn't step after error) rN   Úat_eofrB   r7   ÚEOFErrorr6   rD   r   rQ   Ú
read_exactrC   r)   rG   Ú
recv_framer   r‹   r   ÚPROTOCOL_ERRORÚstrrT   r\   ÚUnicodeDecodeErrorÚINVALID_DATAra   Ústartr   Úset_current_sizeÚMESSAGE_TOO_BIGÚ	ExceptionÚerrorÚINTERNAL_ERRORÚAssertionError)rU   r6   Úframerf   s       r-   rQ   zProtocol.parse/  s  è ø€ ð6	"ØØ#Ÿ{™{×1Ñ1Ó3×3Ð3Ø—z’zØŸ™×)Ñ)¨'Ô2ô
 #Ð#=Ó>Ð>à—=‘=Ð(Ø#‘HØ—]‘]Ð*Ø#Ÿ}™}‘Hà#Ÿ}™}¨t¯}©}Ñ<�Hô
 $)§;¡;Ø—K‘K×*Ñ*ØŸ™¤fÐ,Ø%Ø#Ÿ™ô	$÷ �ð —:’:Ø—K‘K×%Ñ% f¨eÔ4à—‘ Ô&ñ= Ø3ùð&ùô ò 	"Ø�I‰I”i×.Ñ.´°C³Ô9Ø!ˆD�OŠOûäò 	"Ø�I‰I”i×0Ñ0´#°c³(Ô;Ø!ˆD�OŠOûä!ò 	"Ø�I‰I”i×,Ñ,°·±°¸MÈ#Ï)É)ÈÐ.UÔVØ!ˆD�O‰Oûäò 	"Ø× Ñ  §¡Ô/Ø�I‰I”i×/Ñ/´°S³Ô:Ø!ˆD�O‰Oûäò 	"Ø�K‰K×Ñ˜o¸ÐÔ=à�I‰I”i×.Ñ.Ô/Ø!ˆD�O‰Oûð		"úó 	ÜÐAÓBÐBùs‘   ‚K„D) ¢D$£CD) Ã$D'Ã%A D) Ä'D) Ä)	J0Ä20E(Å"KÅ(J0Å40F*Æ$KÆ*J0Æ6A G;Ç6KÇ;J0ÈAIÉKÉJ0É#AJ+Ê&KÊ+J0Ê0Kc              #  ó$  K  — | j                   t        u xs | j                  t        u | j                  k(  sJ ‚| j
                  j                  «       E d{  –—† s=| j
                  j                  «        | j
                  j                  «       E d{  –—† sŒ=| j                  r| j                  j                  d«       | j                   t        u r"| j                  t        ur| j                  «        t        | _        d–— t        d«      ‚7 Œ¶7 Œ|­w)zí
        Discard incoming data.

        This coroutine replaces :meth:`parse`:

        - after receiving a close frame, during a normal closure (1.4);
        - after sending a close frame, during an abnormal closure (7.1.7).

        Nr“   z"discard() shouldn't step after EOF)rC   r)   r5   r0   rM   rN   r–   rŠ   rB   r7   r*   r‰   r3   r¤   rY   s    r-   rŠ   zProtocol.discardw  sË   è ø€ ð —	‘	œVÐ#Ò? t§z¡z´ZÐ'?ÀTÇ]Á]ÒSÐSÐSØ"Ÿk™k×0Ñ0Ó2×2Ð2Ø�K‰K×ÑÔ!ð #Ÿk™k×0Ñ0Ó2×2Ñ2à�:Š:Ø�K‰K×Ñ˜gÔ&ð �9‰9œÑ 4§:¡:´ZÑ#?Ø�M‰MŒOÜˆŒ
ãô ÐAÓBÐBð 3øÐ2ús+   ‚ADÁDÁ;DÂDÂDÂA6DÄDc                óê  — |j                   t        u s|j                   t        u r@| j                  �t	        d«      ‚|j
                  �st        |j                  «      | _        �nô|j                   t        u rV| j                  €t	        d«      ‚|j
                  r	d| _        �n¶| xj                  t        |j                  «      z  c_        �nŒ|j                   t        u r-t        t        |j                  «      }| j                  |«       �nM|j                   t        u r�n9|j                   t        u �rt        j                  |j                  «      | _        | j"                  t$        u r| j&                  €J ‚d| _        | j                  �t	        d«      ‚| j"                  t*        u rL| j                  t        t        |j                  «      «       | j                   | _        d| _        t$        | _        | j,                  t.        u r| j1                  «        | j3                  «       | _        t7        | j4                  «       nt9        d|j                   d›�«      ‚| j:                  j=                  |«       y)	z-
        Process an incoming frame.

        Nry   rr   Fzincomplete fragmented messageTzunexpected opcode: Ú02x)Úopcoder   r   rD   r   rv   Úlenrk   r   r   r   r   rt   r   r   rQ   rI   r5   r2   rJ   rK   r1   rC   r)   r‰   rŠ   rR   rS   r¤   rO   Úappend)rU   r¥   Ú
pong_frames      r-   r™   zProtocol.recv_frame•  sÅ  € ð
 �<‰<œ7Ñ" e§l¡l´iÑ&?Ø�}‰}Ð(Ü#Ð$CÓDÐDØ—9“9Ü # E§J¡J£�–à�\‰\œWÑ$Ø�}‰}Ð$Ü#Ð$CÓDÐDØ�yŠyØ $�–à—’¤ U§Z¡Z£Ñ0—à�\‰\œWÑ$ô œw¨¯
©
Ó3ˆJØ�O‰O˜JÖ'à�\‰\œWÑ$ñ à�\‰\œXÒ%ô $Ÿk™k¨%¯*©*Ó5ˆDŒOØ�z‰zœWÑ$Ø—‘Ð2Ð2Ð2Ø,1�Ô)à�}‰}Ð(Ü#Ð$CÓDÐDð �z‰zœTÑ!ð
 —‘¤¤h°·
±
Ó ;Ô<Ø"&§/¡/�”Ø,0�Ô)Ü$�”
ð �y‰yœFÑ"Ø—‘”ð Ÿ,™,›.ˆDŒKÜ�—‘Õô !Ð#6°u·|±|ÀCÐ6HÐ!IÓJÐJà�‰×Ñ˜5Õ!r,   c                óà   — | j                   r| j                  j                  d|«       | j                  j                  |j	                  | j
                  t        u | j                  ¬«      «       y )Nz> %s)r”   rG   )rB   r7   rP   r«   r   rC   r*   rG   )rU   r¥   s     r-   rt   zProtocol.send_frameç  sS   € Ø�:Š:Ø�K‰K×Ñ˜f eÔ,Ø�‰×ÑØ�O‰OØ—Y‘Y¤&Ð(ØŸ?™?ð ó õ	
r,   c                óº   — | j                   rJ ‚d| _         | j                  r| j                  j                  d«       | j                  j	                  t
        «       y )NTz> EOF)rM   rB   r7   rP   r«   r!   rY   s    r-   r‰   zProtocol.send_eofñ  sA   € Ø—=’=Ð Ð ØˆŒØ�:Š:Ø�K‰K×Ñ˜gÔ&Ø�‰×Ñœ8Õ$r,   )
rC   r   r5   r    r6   ú
int | Noner7   zLoggerLike | NoneÚreturnÚNone)r°   r    )r5   r    r°   r±   )r°   r¯   )r°   z
str | None)r°   r   )rk   Úbytesr°   r±   )r°   r±   )rk   r²   rv   Úboolr°   r±   )T)Nr`   )r]   r¯   ra   r›   r°   r±   )r`   )r]   Úintra   r›   r°   r±   )r°   zlist[Event])r°   zlist[bytes])r°   r³   )r°   zGenerator[None])r¥   r   r°   r±   )r$   r%   r&   r'   r1   rV   Úpropertyr5   Úsetterr^   rb   rg   rl   rp   rw   rz   r|   r‚   r„   r‡   r‹   r�   r�   r‘   rQ   rŠ   r™   rt   r‰   r+   r,   r-   r   r   I   s  „ ñð& Ø$Ø$(ñB1àðB1ð ð	B1ð
 ðB1ð "ðB1ð 
óB1ðH òó ðð ‡\�\òó ðð
 ò(ó ð(ð$ ò*ó ð*ð$ ò!ó ð!óJó ó*3ô03ô.5ô."óH.ó .ô -óbó ó()óZFCóPCó<N"ód
ô%r,   r   )2Ú
__future__r   Úenumr<   r9   Úcollections.abcr   Útypingr   Ú
exceptionsr   r   r	   r
   r   r   rG   r   Úframesr   r   r   r   r   r   r   r   r   r   Úhttp11r   r   Ústreamsr   r   r   r   Ú__all__ÚEventÚIntEnumr   r)   r*   r    r0   r1   r2   r3   r!   r   r+   r,   r-   ú<module>rÂ      sÒ   ðÝ "ã Û Û Ý %Ý ÷÷ õ "÷÷ ÷ ÷ &Ý !ß 3Ñ 3ò€ð 	ˆg�x Ð&Ñ'€Ø ?ôˆ4�<‰<ô ð 
�‰€Ø	�‰€ô1ˆD�L‰Lô 1ð ×Ñ€
Ø‡z�z€Ø
�-‰-€Ø	�‰€ð €Ø E÷m
%ò m
%r,   