ó
    §ZÇhïh  ã                   ó€  • S SK JrJrJrJrJrJrJrJrJ	r	J
r
  SSKJrJrJrJrJrJrJr  SSKJrJrJr  SSKJrJr  SSKJr  SSKJrJrJrJ r J!r!J"r"J#r#J$r$J%r%J&r&  SSK'J(r(J)r)J*r*  SS	K+J,r,J-r-  / S
Qr. " S S\*\*S9r/ " S S\*\*S9r0Sr1S\
\\4   S\24S jr3S\4S\
\\4   S\\5\
\S   \\6   4   4   4S jr7 " S S5      r8g)é    )
Ú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                   ó   • \ rS rSrSrg)r+   é3   © N©Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__static_attributes__r/   ó    ÚL/home/mande/repo/quber/.venv/lib/python3.13/site-packages/h11/_connection.pyr+   r+   3   ó   † Úr6   r+   )Ú	metaclassc                   ó   • \ rS rSrSrg)r,   é7   r/   Nr0   r/   r6   r7   r,   r,   7   r8   r6   r,   i @  ÚeventÚreturnc                 ób   • [        U R                  S5      nSU;   a  g[        U SS5      S:  a  gg)Nó
   connectionó   closeFÚhttp_versionó   1.1T)r   ÚheadersÚgetattr)r<   Ú
connections     r7   Ú_keep_aliverF   T   s4   € Ü! %§-¡-°Ó?€JØ�:ÓØÜˆu�n fÓ-°Ó6ØØr6   Úrequest_methodr/   c                 óÂ  • [        U5      [        [        4;   d   e[        U5      [        L aJ  UR                  S;   d'  U S:X  d!  U S:X  a  SUR                  s=::  a  S:  a   g  OgUR                  S:¼  d   e[	        UR
                  S5      nU(       a
  US/:X  d   eg	[	        UR
                  S
5      nU(       a  S[        US   5      44$ [        U5      [        L a  gg)N)éÌ   i0  ó   HEADó   CONNECTéÈ   é,  )úcontent-length)r   ó   transfer-encodingó   chunked)Úchunkedr/   ó   content-lengthrN   r   )úhttp/1.0r/   )Útyper   r   Ústatus_coder   rC   Úint)rG   r<   Útransfer_encodingsÚcontent_lengthss       r7   Ú_body_framingrY   ]   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ÒØ'àr6   c                   óÌ  • \ rS rSrSr\4S\\   S\SS4S jjr	\
S\\\   \\   4   4S j5       r\
S\\   4S	 j5       r\
S\\   4S
 j5       r\
S\4S j5       rS%S jrS\\   SS4S jrS\S\\\      4S jrS\\   S\SS4S jrS\\   S\\   S\\\4   S\\S\4      4S jr S&S\\\   \\   4   S\\   SS4S jjr\
S\\\4   4S j5       r S\SS4S jr!S\\\\"   \\#   4   4S jr$S\\\\"   \\#   4   4S jr%\&S\'SS4S j5       r(\&S\\)\*\+\,\-4   S\4S j5       r(\&S\S\\   4S j5       r(S\S\\   4S jr(S\S\\.\      4S  jr/S%S! jr0S"\+S\+4S# jr1S$r2g)'r*   é—   a  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_sizer=   Nc                 óª  • X l         U[        [        4;  a  [        SU< 35      eXl        U   U[        L a  [        U l        O[        U l        [        5       U l        U R                  U R                  S [        5      U l
        U R                  U R
                  S [        5      U l        [        5       U l        SU l        S U l        S U l        SU l        g )Nzexpected CLIENT or SERVER, not F)Ú_max_incomplete_event_sizer   r#   Ú
ValueErrorr\   Ú
their_roler   Ú_cstateÚ_get_io_objectr(   Ú_writerr   Ú_readerr   Ú_receive_bufferÚ_receive_buffer_closedÚtheir_http_versionÚ_request_methodÚ"client_is_waiting_for_100_continue)Úselfr\   r]   s      r7   Ú__init__ÚConnection.__init__§   s»   € ð
 +DÔ'àœF¤FÐ+Ó+ÜÐ>¸x¹lÐKÓLÐLØ ŒÙØ”vÒÜ$ˆD�Oä$ˆDŒOÜ&Ó(ˆŒð ×*Ñ*¨4¯=©=¸$ÄÓHˆŒØ×*Ñ*¨4¯?©?¸DÄ'ÓJˆŒô  -›ˆÔð ',ˆÔ#ð 48ˆÔØ04ˆÔð 38ˆÕ/r6   c                 ó@   • [        U R                  R                  5      $ )zqA dictionary like::

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

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

)Údictrb   Ústates©rk   s    r7   rp   ÚConnection.statesÎ   s   € ô �D—L‘L×'Ñ'Ó(Ð(r6   c                 óH   • U R                   R                  U R                     $ )zZThe current state of whichever role we are playing. See
:ref:`state-machine` for details.
)rb   rp   r\   rq   s    r7   Ú	our_stateÚConnection.our_stateÙ   s   € ð
 �|‰|×"Ñ" 4§=¡=Ñ1Ð1r6   c                 óH   • U R                   R                  U R                     $ )z^The current state of whichever role we are NOT playing. See
:ref:`state-machine` for details.
)rb   rp   ra   rq   s    r7   Útheir_stateÚConnection.their_stateà   s   € ð
 �|‰|×"Ñ" 4§?¡?Ñ3Ð3r6   c                 óL   • U R                   [        L =(       a    U R                  $ ©N)ra   r   rj   rq   s    r7   Ú!they_are_waiting_for_100_continueÚ,Connection.they_are_waiting_for_100_continueç   s   € à�‰¤&Ð(×T¨T×-TÑ-TÐTr6   c                 óÌ   • [        U R                  R                  5      nU R                  R                  5         SU l        U R
                  (       a   eU R                  U5        g)aI  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)ro   rb   rp   Ústart_next_cycleri   rj   Ú_respond_to_state_changes)rk   Ú
old_statess     r7   r~   ÚConnection.start_next_cycleë   sO   € ô ˜$Ÿ,™,×-Ñ-Ó.ˆ
Ø�‰×%Ñ%Ô'Ø#ˆÔð ×:×:Ð:Ð:Ø×&Ñ& zÕ2r6   Úrolec                 óš   • [        U R                  R                  5      nU R                  R                  U5        U R	                  U5        g rz   )ro   rb   rp   Úprocess_errorr   )rk   r‚   r€   s      r7   Ú_process_errorÚConnection._process_errorÿ   s6   € Ü˜$Ÿ,™,×-Ñ-Ó.ˆ
Ø�‰×"Ñ" 4Ô(Ø×&Ñ& zÕ2r6   r<   c                 óô   • [        U5      [        L a  UR                  S:X  a  [        $ [        U5      [        L a>  [
        U R                  R                  ;   a   SUR                  s=::  a  S:  a	   [
        $   g g )Née   rL   rM   )rT   r   rU   r   r   r   rb   Úpending_switch_proposals©rk   r<   s     r7   Ú_server_switch_eventÚConnection._server_switch_event  sc   € Ü�‹;Ô/Ò/°E×4EÑ4EÈÓ4LÜ"Ð"Ü�‹;œ(Ò"ä 4§<¡<×#HÑ#HÓHØ˜5×,Ñ,Õ2¨sÔ2ä&Ð&ð 3ñ r6   c                 ó”  • [        U R                  R                  5      nU[        L a{  [	        U5      [
        L ai  UR                  S:X  a  U R                  R                  [        5        [        UR                  S5      (       a  U R                  R                  [        5        S nU[        L a  U R                  U5      nU R                  R                  U[	        U5      U5        [	        U5      [
        L a  UR                  U l        XR                   L aQ  [	        U5      [
        ["        [$        4;   a3  ['        [(        [
        ["        [$        4   U5      nUR*                  U l        [	        U5      [
        ["        4;   aE  [/        ['        [(        [
        ["        4   U5      5      (       d  U R                  R1                  5         [	        U5      [
        L a  [3        U5      (       a  SU l        [	        U5      [$        ["        4;   a  SU l        U[        L a   [	        U5      [6        [8        4;   a  SU l        U R;                  X25        g )NrK   s   upgradeTF)ro   rb   rp   r   rT   r   ÚmethodÚprocess_client_switch_proposalr   r   rC   r   r#   r‹   Úprocess_eventri   ra   r   r   r   r   rA   rh   rF   Úprocess_keep_alive_disabledr   rj   r   r   r   )rk   r‚   r<   r€   Úserver_switch_events        r7   Ú_process_eventÚConnection._process_event  s·  € ô ˜$Ÿ,™,×-Ñ-Ó.ˆ
Ø”6Š>œd 5›k¬WÒ4Ø�|‰|˜zÓ)Ø—‘×;Ñ;¼OÔLÜ §¡¨z×:Ñ:Ø—‘×;Ñ;¼OÔLØ"ÐØ”6Š>Ø"&×";Ñ";¸EÓ"BÐØ�‰×"Ñ" 4¬¨e«Ð6IÔJô �‹;œ'Ò!Ø#(§<¡<ˆDÔ à—?‘?Ò"¤t¨E£{ÜÜÜ!ð7
ó (
ô
 œœw¬Ô2GÐGÑHÈ%ÓPˆEØ&+×&8Ñ&8ˆDÔ#ô �‹;œ7¤HÐ-Ó-´kÜ””w¤Ð(Ñ)¨5Ó1÷7
ñ 7
ð �L‰L×4Ñ4Ô6ô �‹;œ'Ò!Ô&=¸e×&DÑ&DØ6:ˆDÔ3Ü�‹;Ô0´(Ð;Ó;Ø6;ˆDÔ3Ø”6Š>œd 5›k¬d´LÐ-AÓAØ6;ˆDÔ3à×&Ñ& zÕ9r6   Úio_dict.c                 ó
  • U R                   R                  U   nU[        L aP  [        [	        [
        U R                  5      [	        [        [        [        4   U5      5      u  pVU[           U   " U6 $ UR                  X45      $ rz   )rb   rp   r"   rY   r   Úbytesri   r   r   r   Úget)rk   r‚   r<   r•   ÚstateÚframing_typeÚargss          r7   rc   ÚConnection._get_io_object@  s}   € ð —‘×#Ñ# DÑ)ˆØ”IÒô "/Ü”U˜D×0Ñ0Ó1´4¼¼gÄxÐ>OÑ8PÐRWÓ3Xó"ÑˆLð œ9Ñ% lÒ3°TÐ:Ð:ð —;‘; ˜}Ó-Ð-r6   r€   c                 ó  • U R                   XR                     :w  a&  U R                  U R                  U[        5      U l        U R
                  XR                     :w  a'  U R                  U R                  U[        5      U l        g g rz   )	rt   r\   rc   r(   rd   rw   ra   r   re   )rk   r€   r<   s      r7   r   Ú$Connection._respond_to_state_changesV  se   € ð �>‰>˜Z¯©Ñ6Ó6Ø×.Ñ.¨t¯}©}¸eÄWÓMˆDŒLØ×Ñ˜z¯/©/Ñ:Ó:Ø×.Ñ.¨t¯©ÀÄwÓOˆD�Lð ;r6   c                 óD   • [        U R                  5      U R                  4$ )a:  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—   rf   rg   rq   s    r7   Útrailing_dataÚConnection.trailing_dataa  s    € ô �d×*Ñ*Ó+¨T×-HÑ-HÐIÐIr6   Údatac                 ó„   • U(       a2  U R                   (       a  [        S5      eU =R                  U-  sl        gSU l         g)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)rg   ÚRuntimeErrorrf   )rk   r¢   s     r7   Úreceive_dataÚConnection.receive_datal  s6   € öN Ø×*×*Ü"Ð#MÓNÐNØ× Ò  DÑ(Ö à*.ˆDÕ'r6   c                 ó¾  • U R                   nU[        L a  U R                  (       a  [        $ U[        L d	  U[
        L a  [        $ U R                  c   eU R                  U R                  5      nUcb  U R                  (       dQ  U R                  (       a@  [        U R                  S5      (       a  U R                  R                  5       nO
[        5       nUc  [        nU$ )NÚread_eof)rw   r   rf   r,   r!   r$   re   rg   Úhasattrr¨   r   r+   )rk   r™   r<   s      r7   Ú_extract_next_receive_eventÚ&Connection._extract_next_receive_eventš  s±   € ð × Ñ ˆð
 ”DŠ=˜T×1×1ÜˆMØÔ)Ò)¨UÔ6GÒ-GÜˆMØ�|‰|Ñ'Ð'Ð'Ø—‘˜T×1Ñ1Ó2ˆØ‰=Ø×'×'¨D×,G×,Gô
 ˜4Ÿ<™<¨×4Ñ4Ø ŸL™L×1Ñ1Ó3‘Eä,Ó.�EØ‰=ÜˆEØˆr6   c                 ó,  • U R                   [        L a  [        S5      e U R                  5       nU[        [
        4;  a*  U R                  U R                  [        [        U5      5        U[        L aI  [        U R                  5      U R                  :”  a
  [        SSS9eU R                  (       a  [        S5      eU$ ! [         aK  nU R                  U R                  5        [!        U["        5      (       a  UR%                  5          SnAge SnAff = f)an  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)rw   r    r&   rª   r+   r,   r“   ra   r   r   Úlenrf   r_   rg   ÚBaseExceptionr…   Ú
isinstancer%   Ú!_reraise_as_remote_protocol_error)rk   r<   Úexcs      r7   Ú
next_eventÚ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Ñ2Ø×5Ñ5×7Ñ7àûð	ús    BB> Â>
DÃA DÄDÄDc                 ó   • g rz   r/   rŠ   s     r7   ÚsendÚConnection.send÷  ó   € àr6   c                 ó   • g rz   r/   rŠ   s     r7   r¶   r·   û  s   € ð 	r6   c                 ó   • g rz   r/   rŠ   s     r7   r¶   r·     r¸   r6   c                 óN   • U R                  U5      nUc  gSR                  U5      $ )aC  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.

Nr6   )Úsend_with_data_passthroughÚjoin)rk   r<   Ú	data_lists      r7   r¶   r·     s,   € ð* ×3Ñ3°EÓ:ˆ	ØÑØà—8‘8˜IÓ&Ð&r6   c                 ót  • U R                   [        L a  [        S5      e [        U5      [        L a  U R                  U5      nU R                  nU R                  U R                  U5        [        U5      [        L a  gUc   e/ nU" XR                  5        U$ !   U R                  U R                  5        e = f)a@  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)rt   r    r%   rT   r   Ú&_clean_up_response_headers_for_sendingrd   r“   r\   r   Úappendr…   )rk   r<   Úwriterr¾   s       r7   r¼   Ú%Connection.send_with_data_passthrough   s¯   € ð �>‰>œUÒ"Ü$Ð%NÓOÐOð	Ü�E‹{œhÒ&Ø×CÑCÀEÓJ�ð —\‘\ˆFØ×Ñ §¡¨uÔ5Ü�E‹{Ô.Ò.Øð Ñ)Ð)Ð)Ø)+�	Ù�u×.Ñ.Ô/Ø Ð øð	Ø×Ñ §¡Ô.Øús    AB Á>B ÂB7c                 ó:   • U R                  U R                  5        g)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)r…   r\   rq   s    r7   Úsend_failedÚConnection.send_failedA  s   € ð 	×Ñ˜DŸM™MÕ*r6   Úresponsec                 ó’  • [        U5      [        L d   eUR                  nSn[        [        U R
                  5      nUS:X  a  Sn[        XA5      u  pVUS;   aX  [        US/ 5      nU R                  b  U R                  S:  a   [        US/ 5      nU R
                  S:w  a  SnO[        USS	/5      nU R                  R                  (       a  U(       aM  [        [        US
5      5      nUR                  S5        UR                  S5        [        US
[        U5      5      n[        UUR                   UR"                  UR$                  S9$ )NFrJ   s   GET)rQ   rS   rR   rB   rO   TrP   r?   s
   keep-aliver@   )rC   rU   rA   Úreason)rT   r   rC   r   r—   ri   rY   r   rh   rb   Ú
keep_aliveÚsetr   ÚdiscardÚaddÚsortedrU   rA   rÉ   )rk   rÇ   rC   Ú
need_closeÚmethod_for_choosing_headersrš   Ú_rE   s           r7   rÀ   Ú1Connection._clean_up_response_headers_for_sendingZ  s6  € Ü�H‹~¤Ò)Ð)Ð)à×"Ñ"ˆØˆ
ô '+¬5°$×2FÑ2FÓ&GÐ#Ø&¨'Ó1Ø*0Ð'Ü'Ð(CÓN‰ˆØÐ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äØØ ×,Ñ,Ø!×.Ñ.Ø—?‘?ñ	
ð 	
r6   )rb   r_   re   rf   rg   ri   rd   rj   r\   rh   ra   )r=   Nrz   )3r1   r2   r3   r4   Ú__doc__Ú!DEFAULT_MAX_INCOMPLETE_EVENT_SIZEr   r'   rV   rl   Úpropertyr   rp   rt   rw   Úboolr{   r~   r…   r   r   r‹   r“   r   r   r)   r   r   rc   r   r
   r—   r    r¥   r+   r,   rª   r³   r	   r   r¶   r   r   r   r   r   r   r¼   rÅ   rÀ   r5   r/   r6   r7   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
r6   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Ö   rF   r—   ÚstrrV   rY   r*   r/   r6   r7   Ú<module>rá      sè   ð÷÷ ÷ ÷÷ ñ ÷ RÑ Qß *Ý )÷÷ ÷ ÷ñ ÷
 +ò 0€ô	� Hò 	ô	ˆX ò 	ð %.Ð !ð�u˜W hÐ.Ñ/ð °Dô ð0 Øð0 Ø"'¨°Ð(9Ñ":ð0 à
ˆ3��e˜B‘i  s¡Ð+Ñ,Ð,Ñ-ô0 ÷t|
ò |
r6   