Ë
    æÿæiïh  ã                   óˆ  — 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mZmZmZmZmZ ddl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m Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z& ddl'm(Z(m)Z)m*Z* dd	l+m,Z,m-Z- g d
¢Z. G d„ de*e*¬«      Z/ G d„ de*e*¬«      Z0dZ1de
eef   de2fd„Z3de4de
eef   dee5e
ed   ee6   f   f   fd„Z7 G d„ d«      Z8y)é    )
ÚAnyÚCallableÚcastÚDictÚListÚOptionalÚoverloadÚTupleÚTypeÚUnioné   )ÚConnectionClosedÚDataÚEndOfMessageÚEventÚInformationalResponseÚRequestÚResponse)Úget_comma_headerÚhas_expect_100_continueÚset_comma_header)ÚREADERSÚReadersType)ÚReceiveBuffer)
Ú_SWITCH_CONNECTÚ_SWITCH_UPGRADEÚCLIENTÚConnectionStateÚDONEÚERRORÚMIGHT_SWITCH_PROTOCOLÚ	SEND_BODYÚSERVERÚSWITCHED_PROTOCOL)ÚLocalProtocolErrorÚRemoteProtocolErrorÚSentinel)ÚWRITERSÚWritersType)Ú
ConnectionÚ	NEED_DATAÚPAUSEDc                   ó   — e Zd Zy)r+   N©Ú__name__Ú
__module__Ú__qualname__© ó    úd/Volumes/fast/ai/experiments/voice-extract-mac/.venv/lib/python3.12/site-packages/h11/_connection.pyr+   r+   3   ó   „ Ør3   r+   )Ú	metaclassc                   ó   — e Zd Zy)r,   Nr.   r2   r3   r4   r,   r,   7   r5   r3   r,   i @  ÚeventÚreturnc                 ó\   — t        | j                  d«      }d|v ryt        | dd«      dk  ryy)Nó
   connectionó   closeFÚhttp_versionó   1.1T)r   ÚheadersÚgetattr)r8   Ú
connections     r4   Ú_keep_aliverB   T   s4   € Ü! %§-¡-°Ó?€JØ�:ÑØÜˆu�n fÓ-°Ò6ØØr3   Úrequest_methodr2   c                 ó”  — t        |«      t        t        fv sJ ‚t        |«      t        u rB|j                  dv s"| dk(  s| dk(  rd|j                  cxk  rdk  ry ny|j                  dk\  sJ ‚t	        |j
                  d«      }|r	|dgk(  sJ ‚y	t	        |j
                  d
«      }|rdt        |d   «      ffS t        |«      t        u ryy)N)éÌ   i0  ó   HEADó   CONNECTéÈ   é,  )úcontent-length)r   ó   transfer-encodingó   chunked)Úchunkedr2   ó   content-lengthrJ   r   )úhttp/1.0r2   )Útyper   r   Ústatus_coder   r?   Úint)rC   r8   Útransfer_encodingsÚcontent_lengthss       r4   Ú_body_framingrU   ]   sç   € ô �‹;œ7¤HÐ-Ñ-Ð-Ð-ô ˆEƒ{”hÑà×Ñ Ñ+Ø Ò(Ø *Ò,°¸×8IÑ8IÔ1OÈCÒ1Oà+ñ 2Pà+ð × Ñ  CÒ'Ð'Ð'ô *¨%¯-©-Ð9MÓNÐÙØ! j \Ò1Ð1Ð1Øô ' u§}¡}Ð6GÓH€OÙØ ¤3 °qÑ'9Ó#:Ð"<Ð=Ð=ô ˆEƒ{”gÑØ'àr3   c                   ó”  — e Zd ZdZefdee   deddfd„Ze	de
ee   ee   f   fd„«       Ze	dee   fd„«       Ze	dee   fd	„«       Ze	defd
„«       Zd#d„Zdee   ddfd„Zdedeee      fd„Zdee   deddfd„Zdee   dee   deeef   deedef      fd„Z	 d$de
ee   ee   f   dee   ddfd„Ze	deeef   fd„«       Zdeddfd„Z deeee!   ee"   f   fd„Z#deeee!   ee"   f   fd„Z$e%de&ddfd„«       Z'e%dee(e)e*e+e,f   defd„«       Z'e%dedee   fd„«       Z'dedee   fd„Z'dedee-e      fd„Z.d#d „Z/d!e*de*fd"„Z0y)%r*   aB  An object encapsulating the state of an HTTP connection.

    Args:
        our_role: If you're implementing a client, pass :data:`h11.CLIENT`. If
            you're implementing a server, pass :data:`h11.SERVER`.

        max_incomplete_event_size (int):
            The maximum number of bytes we're willing to buffer of an
            incomplete event. In practice this mostly sets a limit on the
            maximum size of the request/response line + headers. If this is
            exceeded, then :meth:`next_event` will raise
            :exc:`RemoteProtocolError`.

    Úour_roleÚmax_incomplete_event_sizer9   Nc                 ó¦  — || _         |t        t        fvrt        d|›�«      ‚|| _        |  |t        u rt        | _        nt        | _        t        «       | _        | j                  | j                  d t        «      | _
        | j                  | j
                  d t        «      | _        t        «       | _        d| _        d | _        d | _        d| _        y )Nzexpected CLIENT or SERVER, not F)Ú_max_incomplete_event_sizer   r#   Ú
ValueErrorrW   Ú
their_roler   Ú_cstateÚ_get_io_objectr(   Ú_writerr   Ú_readerr   Ú_receive_bufferÚ_receive_buffer_closedÚtheir_http_versionÚ_request_methodÚ"client_is_waiting_for_100_continue)ÚselfrW   rX   s      r4   Ú__init__zConnection.__init__§   s¿   € ð
 +DˆÔ'àœF¤FÐ+Ñ+ÜÐ>¸x¸lÐKÓLÐLØ ˆŒÙØ”vÑÜ$ˆD�Oä$ˆDŒOÜ&Ó(ˆŒð ×*Ñ*¨4¯=©=¸$ÄÓHˆŒØ×*Ñ*¨4¯?©?¸DÄ'ÓJˆŒô  -›ˆÔð ',ˆÔ#ð 48ˆÔØ04ˆÔð 38ˆÕ/r3   c                 ó@   — t        | j                  j                  «      S )z‰A dictionary like::

           {CLIENT: <client state>, SERVER: <server state>}

        See :ref:`state-machine` for details.

        )Údictr]   Ústates©rf   s    r4   rj   zConnection.statesÎ   s   € ô �D—L‘L×'Ñ'Ó(Ð(r3   c                 óH   — | j                   j                  | j                     S )zjThe current state of whichever role we are playing. See
        :ref:`state-machine` for details.
        )r]   rj   rW   rk   s    r4   Ú	our_statezConnection.our_stateÙ   s   € ð
 �|‰|×"Ñ" 4§=¡=Ñ1Ð1r3   c                 óH   — | j                   j                  | j                     S )znThe current state of whichever role we are NOT playing. See
        :ref:`state-machine` for details.
        )r]   rj   r\   rk   s    r4   Útheir_statezConnection.their_stateà   s   € ð
 �|‰|×"Ñ" 4§?¡?Ñ3Ð3r3   c                 óB   — | j                   t        u xr | j                  S ©N)r\   r   re   rk   s    r4   Ú!they_are_waiting_for_100_continuez,Connection.they_are_waiting_for_100_continueç   s   € à�‰¤&Ð(ÒT¨T×-TÑ-TÐTr3   c                 óÂ   — t        | j                  j                  «      }| j                  j                  «        d| _        | j
                  rJ ‚| j                  |«       y)a�  Attempt to reset our connection state for a new request/response
        cycle.

        If both client and server are in :data:`DONE` state, then resets them
        both to :data:`IDLE` state in preparation for a new request/response
        cycle on this same connection. Otherwise, raises a
        :exc:`LocalProtocolError`.

        See :ref:`keepalive-and-pipelining`.

        N)ri   r]   rj   Ústart_next_cyclerd   re   Ú_respond_to_state_changes)rf   Ú
old_statess     r4   rt   zConnection.start_next_cycleë   sO   € ô ˜$Ÿ,™,×-Ñ-Ó.ˆ
Ø�‰×%Ñ%Ô'Ø#ˆÔð ×:Ò:Ð:Ð:Ø×&Ñ& zÕ2r3   Úrolec                 óš   — t        | j                  j                  «      }| j                  j                  |«       | j	                  |«       y rq   )ri   r]   rj   Úprocess_errorru   )rf   rw   rv   s      r4   Ú_process_errorzConnection._process_errorÿ   s6   € Ü˜$Ÿ,™,×-Ñ-Ó.ˆ
Ø�‰×"Ñ" 4Ô(Ø×&Ñ& zÕ2r3   r8   c                 óä   — t        |«      t        u r|j                  dk(  rt        S t        |«      t        u r9t
        | j                  j                  v rd|j                  cxk  r
dk  rt
        S  y y )Née   rH   rI   )rP   r   rQ   r   r   r   r]   Úpending_switch_proposals©rf   r8   s     r4   Ú_server_switch_eventzConnection._server_switch_event  sc   € Ü�‹;Ô/Ñ/°E×4EÑ4EÈÒ4LÜ"Ð"Ü�‹;œ(Ñ"ä 4§<¡<×#HÑ#HÑHØ˜5×,Ñ,Ô2¨sÒ2ä&Ð&ð 3ñ r3   c                 óZ  — t        | j                  j                  «      }|t        u rtt	        |«      t
        u rc|j                  dk(  r| j                  j                  t        «       t        |j                  d«      r| j                  j                  t        «       d }|t        u r| j                  |«      }| j                  j                  |t	        |«      |«       t	        |«      t
        u r|j                  | _        || j                   u rOt	        |«      t
        t"        t$        fv r3t'        t(        t
        t"        t$        f   |«      }|j*                  | _        t	        |«      t
        t"        fv r@t/        t'        t(        t
        t"        f   |«      «      s| j                  j1                  «        t	        |«      t
        u rt3        |«      rd| _        t	        |«      t$        t"        fv rd| _        |t        u rt	        |«      t6        t8        fv rd| _        | j;                  ||«       y )NrG   s   upgradeTF)ri   r]   rj   r   rP   r   ÚmethodÚprocess_client_switch_proposalr   r   r?   r   r#   r   Úprocess_eventrd   r\   r   r   r   r   r=   rc   rB   Úprocess_keep_alive_disabledr   re   r   r   ru   )rf   rw   r8   rv   Úserver_switch_events        r4   Ú_process_eventzConnection._process_event  s°  € ô ˜$Ÿ,™,×-Ñ-Ó.ˆ
Ø”6‰>œd 5›k¬WÑ4Ø�|‰|˜zÒ)Ø—‘×;Ñ;¼OÔLÜ §¡¨zÔ:Ø—‘×;Ñ;¼OÔLØ"ÐØ”6‰>Ø"&×";Ñ";¸EÓ"BÐØ�‰×"Ñ" 4¬¨e«Ð6IÔJô �‹;œ'Ñ!Ø#(§<¡<ˆDÔ à�4—?‘?Ñ"¤t¨E£{ÜÜÜ!ð7
ñ (
ô
 œœw¬Ô2GÐGÑHÈ%ÓPˆEØ&+×&8Ñ&8ˆDÔ#ô �‹;œ7¤HÐ-Ñ-´kÜ””w¤Ð(Ñ)¨5Ó1ô7
ð �L‰L×4Ñ4Ô6ô �‹;œ'Ñ!Ô&=¸eÔ&DØ6:ˆDÔ3Ü�‹;Ô0´(Ð;Ñ;Ø6;ˆDÔ3Ø”6‰>œd 5›k¬d´LÐ-AÑAØ6;ˆDÔ3à×&Ñ& z°5Õ9r3   Úio_dict.c                 ó  — | j                   j                  |   }|t        u rQt        t	        t
        | j                  «      t	        t        t        t        f   |«      «      \  }} |t           |   |Ž S |j                  ||f«      S rq   )r]   rj   r"   rU   r   Úbytesrd   r   r   r   Úget)rf   rw   r8   r‡   ÚstateÚframing_typeÚargss          r4   r^   zConnection._get_io_object@  sƒ   € ð —‘×#Ñ# DÑ)ˆØ”IÑô "/Ü”U˜D×0Ñ0Ó1´4¼¼gÄxÐ>OÑ8PÐRWÓ3Xó"ÑˆL˜$ð 4�7œ9Ñ% lÑ3°TÐ:Ð:ð —;‘;  e˜}Ó-Ð-r3   rv   c                 ó  — | j                   || j                     k7  r&| j                  | j                  |t        «      | _        | j
                  || j                     k7  r'| j                  | j                  |t        «      | _        y y rq   )	rm   rW   r^   r(   r_   ro   r\   r   r`   )rf   rv   r8   s      r4   ru   z$Connection._respond_to_state_changesV  si   € ð �>‰>˜Z¨¯©Ñ6Ò6Ø×.Ñ.¨t¯}©}¸eÄWÓMˆDŒLØ×Ñ˜z¨$¯/©/Ñ:Ò:Ø×.Ñ.¨t¯©ÀÄwÓOˆD�Lð ;r3   c                 óD   — t        | j                  «      | j                  fS )ab  Data that has been received, but not yet processed, represented as
        a tuple with two elements, where the first is a byte-string containing
        the unprocessed data itself, and the second is a bool that is True if
        the receive connection was closed.

        See :ref:`switching-protocols` for discussion of why you'd want this.
        )r‰   ra   rb   rk   s    r4   Útrailing_datazConnection.trailing_dataa  s    € ô �d×*Ñ*Ó+¨T×-HÑ-HÐIÐIr3   Údatac                 óp   — |r-| j                   rt        d«      ‚| xj                  |z  c_        yd| _         y)aØ  Add data to our internal receive buffer.

        This does not actually do any processing on the data, just stores
        it. To trigger processing, you have to call :meth:`next_event`.

        Args:
            data (:term:`bytes-like object`):
                The new data that was just received.

                Special case: If *data* is an empty byte-string like ``b""``,
                then this indicates that the remote side has closed the
                connection (end of file). Normally this is convenient, because
                standard Python APIs like :meth:`file.read` or
                :meth:`socket.recv` use ``b""`` to indicate end-of-file, while
                other failures to read are indicated using other mechanisms
                like raising :exc:`TimeoutError`. When using such an API you
                can just blindly pass through whatever you get from ``read``
                to :meth:`receive_data`, and everything will work.

                But, if you have an API where reading an empty string is a
                valid non-EOF condition, then you need to be aware of this and
                make sure to check for such strings and avoid passing them to
                :meth:`receive_data`.

        Returns:
            Nothing, but after calling this you should call :meth:`next_event`
            to parse the newly received data.

        Raises:
            RuntimeError:
                Raised if you pass an empty *data*, indicating EOF, and then
                pass a non-empty *data*, indicating more data that somehow
                arrived after the EOF.

                (Calling ``receive_data(b"")`` multiple times is fine,
                and equivalent to calling it once.)

        z(received close, then received more data?TN)rb   ÚRuntimeErrorra   )rf   r‘   s     r4   Úreceive_datazConnection.receive_datal  s6   € ñN Ø×*Ò*Ü"Ð#MÓNÐNØ× Ò  DÑ(Ö à*.ˆDÕ'r3   c                 óŠ  — | j                   }|t        u r| j                  rt        S |t        u s|t
        u rt        S | j                  €J ‚| j                  | j                  «      }|€S| j                  sG| j                  r;t        | j                  d«      r| j                  j                  «       }n
t        «       }|€t        }|S )NÚread_eof)ro   r   ra   r,   r!   r$   r`   rb   Úhasattrr–   r   r+   )rf   r‹   r8   s      r4   Ú_extract_next_receive_eventz&Connection._extract_next_receive_eventš  s®   € ð × Ñ ˆð
 ”D‰=˜T×1Ò1ÜˆMØÔ)Ñ)¨UÔ6GÑ-GÜˆMØ�|‰|Ð'Ð'Ð'Ø—‘˜T×1Ñ1Ó2ˆØˆ=Ø×'Ò'¨D×,GÒ,Gô
 ˜4Ÿ<™<¨Ô4Ø ŸL™L×1Ñ1Ó3‘Eä,Ó.�EØˆ=ÜˆEØˆr3   c                 ó  — | j                   t        u rt        d«      ‚	 | j                  «       }|t        t
        fvr*| j                  | j                  t        t        |«      «       |t        u rFt        | j                  «      | j                  kD  rt        dd¬«      ‚| j                  rt        d«      ‚|S # t        $ rG}| j                  | j                  «       t!        |t"        «      r|j%                  «        n‚ Y d}~yd}~ww xY w)aF  Parse the next event out of our receive buffer, update our internal
        state, and return it.

        This is a mutating operation -- think of it like calling :func:`next`
        on an iterator.

        Returns:
            : One of three things:

            1) An event object -- see :ref:`events`.

            2) The special constant :data:`NEED_DATA`, which indicates that
               you need to read more data from your socket and pass it to
               :meth:`receive_data` before this method will be able to return
               any more events.

            3) The special constant :data:`PAUSED`, which indicates that we
               are not in a state where we can process incoming data (usually
               because the peer has finished their part of the current
               request/response cycle, and you have not yet called
               :meth:`start_next_cycle`). See :ref:`flow-control` for details.

        Raises:
            RemoteProtocolError:
                The peer has misbehaved. You should close the connection
                (possibly after sending some kind of 4xx response).

        Once this method returns :class:`ConnectionClosed` once, then all
        subsequent calls will also return :class:`ConnectionClosed`.

        If this method raises any exception besides :exc:`RemoteProtocolError`
        then that's a bug -- if it happens please file a bug report!

        If this method raises any exception then it also sets
        :attr:`Connection.their_state` to :data:`ERROR` -- see
        :ref:`error-handling` for discussion.

        z+Can't receive data when peer state is ERRORzReceive buffer too longi¯  )Úerror_status_hintz#peer unexpectedly closed connectionN)ro   r    r&   r˜   r+   r,   r†   r\   r   r   Úlenra   rZ   rb   ÚBaseExceptionrz   Ú
isinstancer%   Ú!_reraise_as_remote_protocol_error)rf   r8   Úexcs      r4   Ú
next_eventzConnection.next_event¶  sî   € ðP ×ÑœuÑ$Ü%Ð&SÓTÐTð	Ø×4Ñ4Ó6ˆEØœY¬Ð/Ñ/Ø×#Ñ# D§O¡O´T¼%ÀÓ5GÔHØœ	Ñ!Ü�t×+Ñ+Ó,¨t×/NÑ/NÒNô .Ø1ÀSôð ð ×.Ò.ô .Ð.SÓTÐTØˆLøÜò 	Ø×Ñ §¡Ô0Ü˜#Ô1Ô2Ø×5Ñ5Õ7àô 8ûð	ús   ŸBB7 Â7	DÃ =DÄDc                  ó   — y rq   r2   r~   s     r4   ÚsendzConnection.send÷  ó   € àr3   c                  ó   — y rq   r2   r~   s     r4   r¢   zConnection.sendû  s   € ð 	r3   c                  ó   — y rq   r2   r~   s     r4   r¢   zConnection.send  r£   r3   c                 óL   — | j                  |«      }|€ydj                  |«      S )a³  Convert a high-level event into bytes that can be sent to the peer,
        while updating our internal state machine.

        Args:
            event: The :ref:`event <events>` to send.

        Returns:
            If ``type(event) is ConnectionClosed``, then returns
            ``None``. Otherwise, returns a :term:`bytes-like object`.

        Raises:
            LocalProtocolError:
                Sending this event at this time would violate our
                understanding of the HTTP/1.1 protocol.

        If this method raises any exception then it also sets
        :attr:`Connection.our_state` to :data:`ERROR` -- see
        :ref:`error-handling` for discussion.

        Nr3   )Úsend_with_data_passthroughÚjoin)rf   r8   Ú	data_lists      r4   r¢   zConnection.send  s,   € ð* ×3Ñ3°EÓ:ˆ	ØÐØà—8‘8˜IÓ&Ð&r3   c                 ón  — | j                   t        u rt        d«      ‚	 t        |«      t        u r| j                  |«      }| j                  }| j                  | j                  |«       t        |«      t        u ry|€J ‚g } |||j                  «       |S #  | j                  | j                  «       ‚ xY w)ah  Identical to :meth:`send`, except that in situations where
        :meth:`send` returns a single :term:`bytes-like object`, this instead
        returns a list of them -- and when sending a :class:`Data` event, this
        list is guaranteed to contain the exact object you passed in as
        :attr:`Data.data`. See :ref:`sendfile` for discussion.

        z'Can't send data when our state is ERRORN)rm   r    r%   rP   r   Ú&_clean_up_response_headers_for_sendingr_   r†   rW   r   Úappendrz   )rf   r8   Úwriterr©   s       r4   r§   z%Connection.send_with_data_passthrough   s±   € ð �>‰>œUÑ"Ü$Ð%NÓOÐOð	Ü�E‹{œhÑ&Ø×CÑCÀEÓJ�ð —\‘\ˆFØ×Ñ §¡¨uÔ5Ü�E‹{Ô.Ñ.Øð Ð)Ð)Ð)Ø)+�	Ù�u˜i×.Ñ.Ô/Ø Ð øð	Ø×Ñ §¡Ô.Øús   ŸAB Á;B ÂB4c                 ó:   — | j                  | j                  «       y)záNotify the state machine that we failed to send the data it gave
        us.

        This causes :attr:`Connection.our_state` to immediately become
        :data:`ERROR` -- see :ref:`error-handling` for discussion.

        N)rz   rW   rk   s    r4   Úsend_failedzConnection.send_failedA  s   € ð 	×Ñ˜DŸM™MÕ*r3   Úresponsec                 óz  — t        |«      t        u sJ ‚|j                  }d}t        t        | j
                  «      }|dk(  rd}t        ||«      \  }}|dv rUt        |dg «      }| j                  �| j                  dk  rt        |dg «      }| j
                  dk7  rd}nt        |dd	g«      }| j                  j                  r|rMt        t        |d
«      «      }|j                  d«       |j                  d«       t        |d
t        |«      «      }t        ||j                   |j"                  |j$                  ¬«      S )NFrF   s   GET)rM   rO   rN   r>   rK   TrL   r;   s
   keep-aliver<   )r?   rQ   r=   Úreason)rP   r   r?   r   r‰   rd   rU   r   rc   r]   Ú
keep_aliveÚsetr   ÚdiscardÚaddÚsortedrQ   r=   r²   )rf   r°   r?   Ú
need_closeÚmethod_for_choosing_headersrŒ   Ú_rA   s           r4   r«   z1Connection._clean_up_response_headers_for_sendingZ  s9  € Ü�H‹~¤Ñ)Ð)Ð)à×"Ñ"ˆØˆ
ô '+¬5°$×2FÑ2FÓ&GÐ#Ø&¨'Ò1Ø*0Ð'Ü'Ð(CÀXÓN‰ˆ�aØÐ2Ñ2ô ' wÐ0AÀ2ÓFˆGØ×&Ñ&Ð.°$×2IÑ2IÈFÒ2Rô
 +¨7Ð4HÈ"ÓM�ð
 ×'Ñ'¨7Ò2Ø!%‘Jä*¨7Ð4HÈ:È,ÓW�à�|‰|×&Ò&©*äÔ-¨g°}ÓEÓFˆJØ×Ñ˜}Ô-Ø�N‰N˜8Ô$Ü& w°¼vÀjÓ?QÓRˆGäØØ ×,Ñ,Ø!×.Ñ.Ø—?‘?ô	
ð 	
r3   )r9   Nrq   )1r/   r0   r1   Ú__doc__Ú!DEFAULT_MAX_INCOMPLETE_EVENT_SIZEr   r'   rR   rg   Úpropertyr   rj   rm   ro   Úboolrr   rt   rz   r   r   r   r†   r   r   r)   r   r   r^   ru   r
   r‰   r�   r”   r+   r,   r˜   r    r	   r   r¢   r   r   r   r   r   r   r§   r¯   r«   r2   r3   r4   r*   r*   —   så  „ ñð$ *Kñ%8à�x‘.ð%8ð $'ð%8ð 
ó	%8ðN ð)˜˜T (™^¨T°(©^Ð;Ñ<ò )ó ð)ð ð2˜4 ™>ò 2ó ð2ð ð4˜T (™^ò 4ó ð4ð ðU°4ò Uó ðUó3ð(3 4¨¡>ð 3°dó 3ð
	¨%ð 	°H¸TÀ(¹^Ñ4Ló 	ð.: 4¨¡>ð .:¸%ð .:ÀDó .:ð`.à�8‰nð.ð ˜‰ð.ð �{ KÐ/Ñ0ð	.ð
 
�(˜3 ˜8Ñ$Ñ	%ó.ð2 "&ñ	Pà˜˜h™¨¨h©Ð7Ñ8ð	Pð ˜‰ð	Pð 
ó		Pð ðJ˜u U¨D [Ñ1ò Jó ðJð,/ ð ,/¨4ó ,/ð\à	ˆu�d˜9‘o t¨F¡|Ð3Ñ	4óð8?˜E %¨¨i©¸$¸v¹,Ð"FÑGó ?ðB ðÐ*ð ¨tò ó ðð ðØ˜7Ð$9¸8ÀTÈ<ÐWÑXðà	òó ðð
 ð˜%ð  H¨U¡Oò ó ðð'˜%ð ' H¨U¡Oó 'ð6°ð ¸(À4ÈÁ;Ñ:Oó óB+ð29
¸xð 9
ÈHô 9
r3   r*   N)9Útypingr   r   r   r   r   r   r	   r
   r   r   Ú_eventsr   r   r   r   r   r   r   Ú_headersr   r   r   Ú_readersr   r   Ú_receivebufferr   Ú_stater   r   r   r   r   r    r!   r"   r#   r$   Ú_utilr%   r&   r'   Ú_writersr(   r)   Ú__all__r+   r,   r¼   r¾   rB   r‰   ÚstrrR   rU   r*   r2   r3   r4   Ú<module>rÉ      sè   ð÷÷ ÷ ÷÷ ñ ÷ RÑ Qß *Ý )÷÷ ÷ ÷ñ ÷
 +ò 0€ô	� Hõ 	ô	ˆX õ 	ð %.Ð !ð�u˜W hÐ.Ñ/ð °Dó ð0 Øð0 Ø"'¨°Ð(9Ñ":ð0 à
ˆ3��e˜B‘i  s¡Ð+Ñ,Ð,Ñ-ó0 ÷t|
ò |
r3   