§
    ‹Ÿj·“  ã                   ó  — d Z ddlZddlZddlZddl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 ddl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  ej        d¦  «        Z G d„ de¦  «        Z  G d„ d¦  «        Z! G d„ d¦  «        Z" G d„ dej#        ¦  «        Z$ G d„ dej%        ¦  «        Z& G d„ d¦  «        Z' ej        d¦  «        Z( ej        d¦  «        Z)de*de+fd„Z,de*de+fd„Z-dej.        de/fd„Z0dS ) zFClient and server implementations of HTTP/1.x.

.. versionadded:: 4.0
é    N)ÚFutureÚfuture_add_done_callbackÚ"future_set_result_unless_cancelled)Ú
native_strÚutf8)Úgen)Úhttputil)Úiostream)Úgen_logÚapp_log)ÚGzipDecompressor)ÚcastÚOptionalÚTypeÚ	AwaitableÚCallableÚUnionÚTuples   |
c                   ó   — e Zd Zdd„ZdS )Ú_QuietExceptionÚreturnNc                 ó   — d S ©N© ©Úselfs    úd/var/www/finuniver-perm.ru/html/student/venv/lib/python3.11/site-packages/tornado/http1connection.pyÚ__init__z_QuietException.__init__-   ó   € Øˆó    ©r   N)Ú__name__Ú
__module__Ú__qualname__r   r   r    r   r   r   ,   s(   € € € € € ðð ð ð ð ð r    r   c                   ób   — e Zd ZdZdej        ddfd„Zdd„Zddd	ee	         d
e
j        ddfd„ZdS )Ú_ExceptionLoggingContextz°Used with the ``with`` statement when calling delegate methods to
    log any exceptions with the given logger.  Any exceptions caught are
    converted to _QuietException
    Úloggerr   Nc                 ó   — || _         d S r   )r'   )r   r'   s     r   r   z!_ExceptionLoggingContext.__init__7   s   € ØˆŒˆˆr    c                 ó   — d S r   r   r   s    r   Ú	__enter__z"_ExceptionLoggingContext.__enter__:   r   r    ÚtypzOptional[Type[BaseException]]ÚvalueÚtbc                 ó–   — |�F|€J ‚t          |t          j        ¦  «        rd S | j                             d|||f¬¦  «         t
          ‚d S )NúUncaught exception©Úexc_info)Ú
isinstancer	   ÚHTTPInputErrorr'   Úerrorr   )r   r+   r,   r-   s       r   Ú__exit__z!_ExceptionLoggingContext.__exit__=   s^   € ð ÐØ�?�?�?å˜%¥Ô!8Ñ9Ô9ð Ø�tØŒK×ÒÐ2¸cÀ5È"Ð=MÐÑNÔNÐNÝ!Ð!ð Ðr    r!   )r"   r#   r$   Ú__doc__ÚloggingÚLoggerr   r*   r   ÚBaseExceptionÚtypesÚTracebackTyper5   r   r    r   r&   r&   1   s˜   € € € € € ðð ð
˜wœ~ð °$ð ð ð ð ðð ð ð ð"à,ð"ð ˜Ô&ð"ð Ôð	"ð
 
ð"ð "ð "ð "ð "ð "r    r&   c                   ó†   — e Zd ZdZ	 	 	 	 	 	 	 ddedee         dee         dee         dee         d	ee         d
eddfd„ZdS )ÚHTTP1ConnectionParametersz?Parameters for `.HTTP1Connection` and `.HTTP1ServerConnection`.FNÚno_keep_aliveÚ
chunk_sizeÚmax_header_sizeÚheader_timeoutÚmax_body_sizeÚbody_timeoutÚ
decompressr   c                 óp   — || _         |pd| _        |pd| _        || _        || _        || _        || _        dS )a;  
        :arg bool no_keep_alive: If true, always close the connection after
            one request.
        :arg int chunk_size: how much data to read into memory at once
        :arg int max_header_size:  maximum amount of data for HTTP headers
        :arg float header_timeout: how long to wait for all headers (seconds)
        :arg int max_body_size: maximum amount of data for body
        :arg float body_timeout: how long to wait while reading body (seconds)
        :arg bool decompress: if true, decode incoming
            ``Content-Encoding: gzip``
        i   N)r>   r?   r@   rA   rB   rC   rD   )r   r>   r?   r@   rA   rB   rC   rD   s           r   r   z"HTTP1ConnectionParameters.__init__O   sH   € ð* +ˆÔØ$Ð-¨ˆŒØ.Ð7°%ˆÔØ,ˆÔØ*ˆÔØ(ˆÔØ$ˆŒˆˆr    )FNNNNNF)	r"   r#   r$   r6   Úboolr   ÚintÚfloatr   r   r    r   r=   r=   L   s¬   € € € € € ØIÐIð $Ø$(Ø)-Ø*.Ø'+Ø(,Ø ð%ð %àð%ð ˜S”Mð%ð " #œð	%ð
 ! œð%ð   ”}ð%ð ˜u”oð%ð ð%ð 
ð%ð %ð %ð %ð %ð %r    r=   c                   ó†  — e Zd ZdZ	 	 d+dej        dedee         dee	         ddf
d„Z
d	ej        dee         fd
„Zd	ej        defd„Zd,d„Zdeeg df                  ddfd„Zd,d„Zd,d„Zdej        fd„Zdeddfd„Zdeddfd„Z	 d-deej        ej        f         dej        dee         ddfd„Zdedefd„Z deddfd„Z!d,d„Z"d.d„Z#dej        dej        defd „Z$d/d"„Z%d#ede&e'ej        f         fd$„Z(d%edej        d	ej        deed                  fd&„Z)d'ed	ej        ddfd(„Z*d	ej        ddfd)„Z+d	ej        ddfd*„Z,dS )0ÚHTTP1Connectionz…Implements the HTTP/1.x protocol.

    This class can be on its own for clients, or via `HTTP1ServerConnection`
    for servers.
    NÚstreamÚ	is_clientÚparamsÚcontextr   c                 ó¶  — || _         || _        |€t          ¦   «         }|| _        || _        |j        | _        | j        j        �| j        j        n| j        j        | _        | j        j	        | _
        d| _        d| _        t          ¦   «         | _        d| _        |                      ¦   «          d| _        d| _        d| _        d| _        d| _        d| _        dS )a  
        :arg stream: an `.IOStream`
        :arg bool is_client: client or server
        :arg params: a `.HTTP1ConnectionParameters` instance or ``None``
        :arg context: an opaque application-defined object that can be accessed
            as ``connection.context``.
        NF)rL   rK   r=   rM   rN   r>   rB   Úmax_buffer_sizeÚ_max_body_sizerC   Ú_body_timeoutÚ_write_finishedÚ_read_finishedr   Ú_finish_futureÚ_disconnect_on_finishÚ_clear_callbacksÚ_request_start_lineÚ_response_start_lineÚ_request_headersÚ_chunking_outputÚ_expected_content_remainingÚ_pending_write)r   rK   rL   rM   rN   s        r   r   zHTTP1Connection.__init__t   sê   € ð #ˆŒØˆŒØˆ>Ý.Ñ0Ô0ˆFØˆŒØˆŒØ#Ô1ˆÔð
 Œ{Ô(Ð4ð ŒKÔ%Ð%à”Ô,ð 	Ôð
 "œ[Ô5ˆÔð  %ˆÔà#ˆÔõ %™hœhˆÔð &+ˆÔ"Ø×ÒÑÔÐð $(ˆÔ Ø$(ˆÔ!Ø $ˆÔà %ˆÔð ,0ˆÔ(à"ˆÔÐÐr    Údelegatec                 óx   — | j         j        rt          || j         j        ¦  «        }|                      |¦  «        S )az  Read a single HTTP response.

        Typical client-mode usage is to write a request using `write_headers`,
        `write`, and `finish`, and then call ``read_response``.

        :arg delegate: a `.HTTPMessageDelegate`

        Returns a `.Future` that resolves to a bool after the full response has
        been read. The result is true if the stream is still open.
        )rM   rD   Ú_GzipMessageDelegater?   Ú_read_message)r   r^   s     r   Úread_responsezHTTP1Connection.read_response­   s:   € ð Œ;Ô!ð 	NÝ+¨H°d´kÔ6LÑMÔMˆHØ×!Ò! (Ñ+Ô+Ð+r    c              ƒ   ó  K  — d}	 | j                              d| j        j        ¬¦  «        }| j        j        €	|ƒ d {V —†}nÔ	 t          j        | j         j                             ¦   «         | j        j        z   |t          j
        ¬¦  «        ƒ d {V —†}n‚# t
          j        $ rp |                      ¦   «          Y |r@t          t          ¦  «        5  |                     ¦   «          d d d ¦  «         n# 1 swxY w Y   d }|                      ¦   «          dS w xY w|                      |¦  «        \  }}| j        r%t'          j        |¦  «        }|| _        |}d| _        n@t'          j        |¦  «        }	|	| _        || _        |	}|                      |	|¦  «         | _        d}t          t          ¦  «        5  |                     ||¦  «        }
|
�|
ƒ d {V —† d d d ¦  «         n# 1 swxY w Y   | j         €]d}	 |r@t          t          ¦  «        5  |                     ¦   «          d d d ¦  «         n# 1 swxY w Y   d }|                      ¦   «          dS d}| j        r�t9          |t&          j        ¦  «        sJ ‚| j        �| j        j        dk    rd}|j        }|dk    rd}d|cxk    rd	k     r=n nud
|v sd|v rt'          j         d|z  ¦  «        ‚|  !                    |¦  «        ƒ d {V —† n:| "                    d¦  «        dk    r!| j#        s| j          $                    d¦  «         |�s%|  %                    | j        r|j        nd||¦  «        }|�þ| j&        €	|ƒ d {V —† nî	 t          j        | j         j                             ¦   «         | j&        z   |t          j
        ¬¦  «        ƒ d {V —† n¡# t
          j        $ r� tO          j(        d| j)        ¦  «         | j                              ¦   «          Y |r@t          t          ¦  «        5  |                     ¦   «          d d d ¦  «         n# 1 swxY w Y   d }|                      ¦   «          dS w xY wd| _*        | j#        r| j        rBd}t          t          ¦  «        5  | +                    ¦   «          d d d ¦  «         n# 1 swxY w Y   | j,         -                    ¦   «         sL| j         �E| j          .                    ¦   «         s,| j          /                    | j0        ¦  «         | j,        ƒ d {V —† | j        r| j        r|                      ¦   «          | j         €[	 |r@t          t          ¦  «        5  |                     ¦   «          d d d ¦  «         n# 1 swxY w Y   d }|                      ¦   «          dS nË# t&          j         $ r¹}tO          j(        d| j)        |¦  «         | j        s | j          $                    d¦  «        ƒ d {V —† |                      ¦   «          Y d }~|r@t          t          ¦  «        5  |                     ¦   «          d d d ¦  «         n# 1 swxY w Y   d }|                      ¦   «          dS d }~ww xY w	 |r@t          t          ¦  «        5  |                     ¦   «          d d d ¦  «         n# 1 swxY w Y   d }|                      ¦   «          n]# |r@t          t          ¦  «        5  |                     ¦   «          d d d ¦  «         n# 1 swxY w Y   d }|                      ¦   «          w xY wdS )NFs   ?
?
©Ú	max_bytes)Úquiet_exceptionsTÚHEADé0  éd   éÈ   úContent-LengthúTransfer-Encodingz!Response code %d cannot have bodyÚExpectz100-continues   HTTP/1.1 100 (Continue)

r   zTimeout reading body from %sz"Malformed HTTP message from %s: %ss   HTTP/1.1 400 Bad Request

)1rK   Úread_until_regexrM   r@   rA   r   Úwith_timeoutÚio_loopÚtimer
   ÚStreamClosedErrorÚTimeoutErrorÚcloser&   r   Úon_connection_closerW   Ú_parse_headersrL   r	   Úparse_response_start_linerY   rV   Úparse_request_start_linerX   rZ   Ú_can_keep_aliveÚheaders_receivedr2   ÚResponseStartLineÚmethodÚcoder3   ra   ÚgetrS   ÚwriteÚ
_read_bodyrR   r   ÚinforN   rT   ÚfinishrU   ÚdoneÚclosedÚset_close_callbackÚ_on_connection_close)r   r^   Úneed_delegate_closeÚheader_futureÚheader_dataÚstart_line_strÚheadersÚresp_start_lineÚ
start_lineÚreq_start_lineÚheader_recv_futureÚ	skip_bodyr}   Úbody_futureÚes                  r   ra   zHTTP1Connection._read_message¼   si
  è è € Ø#Ððu	$Ø œK×8Ò8Ø¨¬Ô)Dð 9ñ ô ˆMð Œ{Ô)Ð1Ø$1Ð1Ð1Ð1Ð1Ð1Ð1��ð!Ý(+Ô(8ØœÔ+×0Ò0Ñ2Ô2°T´[Ô5OÑOØ%Ý)1Ô)Cð)ñ )ô )ð #ð #ð #ð #ð #ð #�K�Køõ
 Ô'ð !ð !ð !Ø—J’J‘L”L�LØ ðD #ð 3Ý-­gÑ6Ô6ð 3ð 3Ø×0Ò0Ñ2Ô2Ð2ð3ð 3ð 3ñ 3ô 3ð 3ð 3ð 3ð 3ð 3ð 3øøøð 3ð 3ð 3ð 3à ˆMØ×!Ò!Ñ#Ô#Ð#Ð#Ð#ðQ!øøøð '+×&9Ò&9¸+Ñ&FÔ&FÑ#ˆN˜GØŒ~ð Ý"*Ô"DÀ^Ñ"TÔ"T�Ø,;�Ô)à#ð ð .3�Ô*Ð*å!)Ô!BÀ>Ñ!RÔ!R�Ø+9�Ô(Ø(/�Ô%Ø+�
Ø15×1EÒ1EØ" Gñ2ô 2ð .�Ô*ð #'ÐÝ)­'Ñ2Ô2ð -ð -Ø%-×%>Ò%>¸zÈ7Ñ%SÔ%SÐ"Ø%Ð1Ø,Ð,Ð,Ð,Ð,Ð,Ð,Ð,ð-ð -ð -ñ -ô -ð -ð -ð -ð -ð -ð -øøøð -ð -ð -ð -ð Œ{Ð"à&+Ð#ØðP #ð 3Ý-­gÑ6Ô6ð 3ð 3Ø×0Ò0Ñ2Ô2Ð2ð3ð 3ð 3ñ 3ô 3ð 3ð 3ð 3ð 3ð 3ð 3øøøð 3ð 3ð 3ð 3à ˆMØ×!Ò!Ñ#Ô#Ð#Ð#Ð#ðW ˆIØŒ~ð JÝ! *­hÔ.HÑIÔIÐIÐIÐIàÔ,Ð8ØÔ0Ô7¸6ÒAÐAà $�IØ!”�Ø˜3’;�;ð !%�IØ˜$Ð$Ð$Ò$Ð$ Ò$Ð$Ð$Ð$Ð$ð (¨7Ð2Ð2Ð6IÈWÐ6TÐ6TÝ&Ô5Ø?À$ÑFñô ð ð
 ×,Ò,¨XÑ6Ô6Ð6Ð6Ð6Ð6Ð6Ð6Ð6øà—;’;˜xÑ(Ô(¨NÒ:Ð:À4ÔCWÐ:Ø”K×%Ò%Ð&HÑIÔIÐIØñ )Ø"ŸošoØ,0¬NÐA�OÔ(Ð(ÀÀ7ÈHñô �ð Ð*ØÔ)Ð1Ø)Ð)Ð)Ð)Ð)Ð)Ð)Ð)Ð)ð	)Ý"%Ô"2Ø $¤Ô 3× 8Ò 8Ñ :Ô :¸TÔ=OÑ OØ +Ý19Ô1Kð#ñ #ô #ð ð ð ð ð ð ð ð øõ
  #Ô/ð )ð )ð )Ý#œLÐ)GÈÌÑVÔVÐVØ œK×-Ò-Ñ/Ô/Ð/Ø#(ð6 #ð 3Ý-­gÑ6Ô6ð 3ð 3Ø×0Ò0Ñ2Ô2Ð2ð3ð 3ð 3ñ 3ô 3ð 3ð 3ð 3ð 3ð 3ð 3øøøð 3ð 3ð 3ð 3à ˆMØ×!Ò!Ñ#Ô#Ð#Ð#Ð#ðE)øøøð #'ˆDÔØÔ'ð &¨4¬>ð &Ø&+Ð#Ý-­gÑ6Ô6ð &ð &Ø—O’OÑ%Ô%Ð%ð&ð &ð &ñ &ô &ð &ð &ð &ð &ð &ð &øøøð &ð &ð &ð &ð Ô'×,Ò,Ñ.Ô.ð*à”KÐ+Øœ×*Ò*Ñ,Ô,ð ,ð ”×.Ò.¨tÔ/HÑIÔIÐIØÔ)Ð)Ð)Ð)Ð)Ð)Ð)Ð)ØŒ~ð  $Ô"<ð Ø—
’
‘”�ØŒ{Ð"Øð #ð 3Ý-­gÑ6Ô6ð 3ð 3Ø×0Ò0Ñ2Ô2Ð2ð3ð 3ð 3ñ 3ô 3ð 3ð 3ð 3ð 3ð 3ð 3øøøð 3ð 3ð 3ð 3à ˆMØ×!Ò!Ñ#Ô#Ð#Ð#Ð#ð #øåÔ&ð 	ð 	ð 	ÝŒLÐ=¸t¼|ÈQÑOÔOÐOØ”>ð MØ”k×'Ò'Ð(KÑLÔLÐLÐLÐLÐLÐLÐLÐLØ�JŠJ‰LŒLˆLØ�5�5�5à"ð 3Ý-­gÑ6Ô6ð 3ð 3Ø×0Ò0Ñ2Ô2Ð2ð3ð 3ð 3ñ 3ô 3ð 3ð 3ð 3ð 3ð 3ð 3øøøð 3ð 3ð 3ð 3à ˆMØ×!Ò!Ñ#Ô#Ð#Ð#Ð#øøøøð	øøøð #ð #ð 3Ý-­gÑ6Ô6ð 3ð 3Ø×0Ò0Ñ2Ô2Ð2ð3ð 3ð 3ñ 3ô 3ð 3ð 3ð 3ð 3ð 3ð 3øøøð 3ð 3ð 3ð 3à ˆMØ×!Ò!Ñ#Ô#Ð#Ð#øð	 #ð 3Ý-­gÑ6Ô6ð 3ð 3Ø×0Ò0Ñ2Ô2Ð2ð3ð 3ð 3ñ 3ô 3ð 3ð 3ð 3ð 3ð 3ð 3øøøð 3ð 3ð 3ð 3à ˆMØ×!Ò!Ñ#Ô#Ð#Ð#øøøØˆts\  †;V ÁAB ÂV Â#DÂ6V ÃC.Ã.C2Ã5C2ÄDÄBV Æ/!GÇV ÇG Ç V Ç#G Ç$V ÈH(È(H,È/H,ÉDV ÍAN$ Î#V Î$AQÏ&V Ï=PÐP"Ð%P"ÑQÑ.V Ñ0RÒV ÒRÒV ÒRÒBV ÕU"Õ"U&Õ)U&ÖZ+ ÖYÖAY	×+Z+ ØX&Ø&X*Ø-X*Ù	YÙZ+ Ù(Z	Ú	ZÚZÚ+\Û[#Û\Û#['Û'\Û*['Û+\c                 óv   — d| _         d| _        d| _        | j        �| j                             d¦  «         dS dS )zªClears the callback attributes.

        This allows the request handler to be garbage collected more
        quickly in CPython by breaking up reference cycles.
        N)Ú_write_callbackÚ_write_futureÚ_close_callbackrK   r…   r   s    r   rW   z HTTP1Connection._clear_callbacks6  sH   € ð  $ˆÔØ!ˆÔØ#ˆÔØŒ;Ð"ØŒK×*Ò*¨4Ñ0Ô0Ð0Ð0Ð0ð #Ð"r    Úcallbackc                 ó   — || _         dS )a$  Sets a callback that will be run when the connection is closed.

        Note that this callback is slightly different from
        `.HTTPMessageDelegate.on_connection_close`: The
        `.HTTPMessageDelegate` method is called when the connection is
        closed while receiving a message. This callback is used when
        there is not an active delegate (for example, on the server
        side this callback is used if the client closes the connection
        after sending its request but before receiving all the
        response.
        N)r–   ©r   r—   s     r   r…   z"HTTP1Connection.set_close_callbackB  s   € ð  (ˆÔÐÐr    c                 óÈ   — | j         �| j         }d | _          |¦   «          | j                             ¦   «         st          | j        d ¦  «         |                      ¦   «          d S r   )r–   rU   rƒ   r   rW   r™   s     r   r†   z$HTTP1Connection._on_connection_closeP  sk   € ð ÔÐ+ØÔ+ˆHØ#'ˆDÔ ØˆH‰JŒJˆJØÔ"×'Ò'Ñ)Ô)ð 	JÝ.¨tÔ/BÀDÑIÔIÐIØ×ÒÑÔÐÐÐr    c                 óÎ   — | j         �| j                              ¦   «          |                      ¦   «          | j                             ¦   «         st          | j        d ¦  «         d S d S r   )rK   rt   rW   rU   rƒ   r   r   s    r   rt   zHTTP1Connection.close\  sm   € ØŒ;Ð"ØŒK×ÒÑÔÐØ×ÒÑÔÐØÔ"×'Ò'Ñ)Ô)ð 	JÝ.¨tÔ/BÀDÑIÔIÐIÐIÐIð	Jð 	Jr    c                 ó¦   — |                       ¦   «          | j        }d| _        | j                             ¦   «         st	          | j        d¦  «         |S )a>  Take control of the underlying stream.

        Returns the underlying `.IOStream` object and stops all further
        HTTP processing.  May only be called during
        `.HTTPMessageDelegate.headers_received`.  Intended for implementing
        protocols like websockets that tunnel over an HTTP handshake.
        N)rW   rK   rU   rƒ   r   )r   rK   s     r   ÚdetachzHTTP1Connection.detachc  sT   € ð 	×ÒÑÔÐØ”ˆØˆŒØÔ"×'Ò'Ñ)Ô)ð 	JÝ.¨tÔ/BÀDÑIÔIÐIØˆr    Útimeoutc                 ó   — || _         dS )ztSets the body timeout for a single request.

        Overrides the value from `.HTTP1ConnectionParameters`.
        N)rR   )r   rž   s     r   Úset_body_timeoutz HTTP1Connection.set_body_timeoutr  s   € ð
 %ˆÔÐÐr    rB   c                 ó   — || _         dS )zwSets the body size limit for a single request.

        Overrides the value from `.HTTP1ConnectionParameters`.
        N)rQ   )r   rB   s     r   Úset_max_body_sizez!HTTP1Connection.set_max_body_sizey  s   € ð
 ,ˆÔÐÐr    r�   r‹   ÚchunkúFuture[None]c                 ó¬  — g }| j         rkt          |t          j        ¦  «        sJ ‚|| _        |                     t          |d         › d|d         › d�¦  «        ¦  «         |j        dv od|v| _        �nt          |t          j	        ¦  «        sJ ‚| j        €J ‚| j
        €J ‚|| _        |                     t          d|d         |d	         fz  ¦  «        ¦  «         | j        j        d
k    o2| j        j        dk    o"|j        dvo|j        dk     p
|j        dk    od|v| _        | j        j        d
k    r| j        rd|d<   | j        j        dk    r6| j
                             dd¦  «                             ¦   «         dk    rd|d<   | j        rd|d<   | j         s;| j        j        dk    s#t#          t          j	        |¦  «        j        dk    rd| _        n&d|v rt'          |d         ¦  «        | _        nd| _        d„ |                     ¦   «         D ¦   «         }|                     d„ |D ¦   «         ¦  «         |D ].}t,                               |¦  «        rt1          d|z  ¦  «        ‚Œ/d}| j                             ¦   «         rPt7          ¦   «         x}| _        |                     t=          j        ¦   «         ¦  «         |                      ¦   «          n€t7          ¦   «         x}| _        d !                    |¦  «        dz   }|r||  "                    |¦  «        z  }| j         #                    |¦  «        | _$        tK          | j$        | j&        ¦  «         |S )z+Implements `.HTTPConnection.write_headers`.r   ú é   z	 HTTP/1.1)ÚPOSTÚPUTÚPATCHrk   NzHTTP/1.1 %d %sé   úHTTP/1.1rg   )éÌ   rh   ri   rj   rt   Ú
ConnectionzHTTP/1.0Ú ú
keep-alivez
Keep-AliveÚchunkedrl   rh   c              3   ó`   K  — | ])\  }}t          |¦  «        d z   t          |¦  «        z   V — Œ*dS )z: N)r   )Ú.0ÚnÚvs      r   ú	<genexpr>z0HTTP1Connection.write_headers.<locals>.<genexpr>Â  sM   è è € ð 
ð 
Ù59°Q¸�J�q‰MŒM˜DÑ ¥:¨a¡=¤=Ñ0ð
ð 
ð 
ð 
ð 
ð 
r    c              3   ó@   K  — | ]}|                      d ¦  «        V — ŒdS )Úlatin1N)Úencode)r³   Úlines     r   r¶   z0HTTP1Connection.write_headers.<locals>.<genexpr>Å  s.   è è € ÐDÐD¨t�T—[’[ Ñ*Ô*ÐDÐDÐDÐDÐDÐDr    z+Illegal characters (CR or LF) in header: %ró   
s   

)'rL   r2   r	   ÚRequestStartLinerX   Úappendr   r|   r[   r{   rZ   rY   Úversionr}   rV   r~   Úlowerr   r\   Ú	parse_intÚget_allÚextendÚCR_OR_LF_REÚsearchÚ
ValueErrorrK   r„   r   r•   Úset_exceptionr
   rr   Ú	exceptionÚjoinÚ_format_chunkr   r]   r   Ú_on_write_complete)	r   r�   r‹   r£   ÚlinesÚheader_linesrº   ÚfutureÚdatas	            r   Úwrite_headerszHTTP1Connection.write_headers€  s¾  € ð ˆØŒ>ð +	5Ý˜j­(Ô*CÑDÔDÐDÐDÐDØ'1ˆDÔ$Ø�LŠL� ¨A¤ÐIÐI°¸A´ÐIÐIÐIÑJÔJÑKÔKÐKð
 Ô!Ð%=Ð=ð 4Ø$¨GÐ3ð Ô!Ñ!õ
 ˜j­(Ô*DÑEÔEÐEÐEÐEØÔ+Ð7Ð7Ð7ØÔ(Ð4Ð4Ð4Ø(2ˆDÔ%Ø�LŠL�Ð.°*¸Q´-ÀÈAÄÐ1OÑOÑPÔPÑQÔQÐQð
 Ô(Ô0°JÒ>ð 	4àÔ,Ô3°vÒ=ð	4ð ”O¨:Ð5ð	4ð  ”_ sÒ*ÐD¨j¬oÀÒ.Dð	4ð %¨GÐ3ð Ô!ð" Ô(Ô0°JÒ>Ð>ØÔ.ð ?ð )0�˜Ñ%ð Ô(Ô0°JÒ>Ð>ØÔ)×-Ò-¨l¸BÑ?Ô?×EÒEÑGÔGÈ<ÒWÐWà(4�˜Ñ%ØÔ ð 	5Ø+4ˆGÐ'Ñ(ØŒ~ð 	4ØÔ$Ô+¨vÒ5Ð5Ý•HÔ.°
Ñ;Ô;Ô@ÀCÒGÐGà/0ˆDÔ,Ð,Ø Ð(Ð(Ý/8¸ÐAQÔ9RÑ/SÔ/SˆDÔ,Ð,à/3ˆDÔ,ð
ð 
Ø=D¿_º_Ñ=NÔ=Nð
ñ 
ô 
ˆð 	�ŠÐDÐD°|ÐDÑDÔDÑDÔDÐDØð 	Wð 	WˆDÝ×!Ò! $Ñ'Ô'ð WÝ Ð!NÐQUÑ!UÑVÔVÐVðWàˆØŒ;×ÒÑÔð 
	SÝ*0©(¬(Ð2ˆF�TÔ'Ø× Ò ¥Ô!;Ñ!=Ô!=Ñ>Ô>Ð>Ø×ÒÑÔÐÐå*0©(¬(Ð2ˆF�TÔ'Ø—<’< Ñ&Ô&¨Ñ4ˆDØð 2Ø˜×*Ò*¨5Ñ1Ô1Ñ1�Ø"&¤+×"3Ò"3°DÑ"9Ô"9ˆDÔÝ$ TÔ%8¸$Ô:QÑRÔRÐRØˆr    c                 ó   — | j         �U| xj         t          |¦  «        z  c_         | j         dk     r-| j                             ¦   «          t	          j        d¦  «        ‚| j        r*|r(t          dt          |¦  «        z  ¦  «        dz   |z   dz   S |S )Nr   z,Tried to write more data than Content-Lengthz%xr»   )r\   ÚlenrK   rt   r	   ÚHTTPOutputErrorr[   r   )r   r£   s     r   rÉ   zHTTP1Connection._format_chunk×  s¢   € ØÔ+Ð7ØÐ,Ô,µ°E±
´
Ñ:Ð,Ô,ØÔ/°!Ò3Ð3à”×!Ò!Ñ#Ô#Ð#ÝÔ.ØBñô ð ð Ô ð 	 Uð 	õ ˜�s 5™zœzÑ)Ñ*Ô*¨WÑ4°uÑ<¸wÑFÐFàˆLr    c                 ó²  — d}| j                              ¦   «         rZt          ¦   «         x}| _        | j                             t          j        ¦   «         ¦  «         | j                             ¦   «          nat          ¦   «         x}| _        | j                              |  	                    |¦  «        ¦  «        | _
        t          | j
        | j        ¦  «         |S )zÒImplements `.HTTPConnection.write`.

        For backwards compatibility it is allowed but deprecated to
        skip `write_headers` and instead call `write()` with a
        pre-encoded header block.
        N)rK   r„   r   r•   rÆ   r
   rr   rÇ   r   rÉ   r]   r   rÊ   )r   r£   rÍ   s      r   r   zHTTP1Connection.writeç  s»   € ð ˆØŒ;×ÒÑÔð 	SÝ*0©(¬(Ð2ˆF�TÔ'ØÔ×,Ò,­XÔ-GÑ-IÔ-IÑJÔJÐJØÔ×(Ò(Ñ*Ô*Ð*Ð*å*0©(¬(Ð2ˆF�TÔ'Ø"&¤+×"3Ò"3°D×4FÒ4FÀuÑ4MÔ4MÑ"NÔ"NˆDÔÝ$ TÔ%8¸$Ô:QÑRÔRÐRØˆr    c                 óP  — | j         �Y| j         dk    rN| j                             ¦   «         s5| j                             ¦   «          t	          j        d| j         z  ¦  «        ‚| j        rW| j                             ¦   «         s>| j                             d¦  «        | _        | j         	                    | j
        ¦  «         d| _        | j        sd| _        | j                             d¦  «         | j        €|                      d¦  «         dS t!          | j        | j        ¦  «         dS )z$Implements `.HTTPConnection.finish`.Nr   z0Tried to write %d bytes less than Content-Lengths   0

T)r\   rK   r„   rt   r	   rÒ   r[   r   r]   Úadd_done_callbackrÊ   rS   rT   rV   Úset_nodelayÚ_finish_requestr   r   s    r   r‚   zHTTP1Connection.finishù  s5  € ð Ô,Ð8ØÔ0°AÒ5Ð5Ø”K×&Ò&Ñ(Ô(ð 6ð ŒK×ÒÑÔÐÝÔ*ØBØÔ2ñ3ñô ð ð Ô ð 	OØ”;×%Ò%Ñ'Ô'ð OØ&*¤k×&7Ò&7¸Ñ&EÔ&E�Ô#ØÔ#×5Ò5°dÔ6MÑNÔNÐNØ#ˆÔð Ô"ð 	.Ø)-ˆDÔ&ð 	Œ×Ò Ñ%Ô%Ð%ØÔÐ&Ø× Ò  Ñ&Ô&Ð&Ð&Ð&å$ TÔ%8¸$Ô:NÑOÔOÐOÐOÐOr    rÍ   c                 óD  — |                      ¦   «         }|�.t          |t          j        ¦  «        s|                     ¦   «          | j        �-| j        }d | _        | j        j                             |¦  «         | j	        � | j	        }d | _	        t          |d ¦  «         d S d S r   )rÇ   r2   r
   rr   Úresultr”   rK   rp   Úadd_callbackr•   r   )r   rÍ   Úexcr—   s       r   rÊ   z"HTTP1Connection._on_write_complete  sŸ   € Ø×ÒÑ Ô ˆØˆ?¥:¨cµ8Ô3MÑ#NÔ#Nˆ?Ø�MŠM‰OŒOˆOØÔÐ+ØÔ+ˆHØ#'ˆDÔ ØŒKÔ×,Ò,¨XÑ6Ô6Ð6ØÔÐ)ØÔ'ˆFØ!%ˆDÔÝ.¨v°tÑ<Ô<Ð<Ð<Ð<ð *Ð)r    c                 óò   — | j         j        rdS |                     d¦  «        }|�|                     ¦   «         }|j        dk    r|dk    S d|v s"t          |¦  «        st          |dd ¦  «        dv r|dk    S dS )	NFr®   r¬   rt   rk   r|   )rg   ÚGETr°   )rM   r>   r~   r¿   r¾   Úis_transfer_encoding_chunkedÚgetattr)r   r�   r‹   Úconnection_headers       r   ry   zHTTP1Connection._can_keep_alive&  s�   € ð Œ;Ô$ð 	Ø�5Ø#ŸKšK¨Ñ5Ô5ÐØÐ(Ø 1× 7Ò 7Ñ 9Ô 9ÐØÔ Ò+Ð+Ø$¨Ò/Ð/à Ð'Ð'Ý+¨GÑ4Ô4ð (å�z 8¨TÑ2Ô2°oÐEÐEð %¨Ò4Ð4Øˆur    úOptional[Future[None]]c                 ó
  — |                       ¦   «          | j        s| j        r|                      ¦   «          d S | j                             d¦  «         | j                             ¦   «         st          | j        d ¦  «         d S d S )NF)	rW   rL   rV   rt   rK   rÖ   rU   rƒ   r   )r   rÍ   s     r   r×   zHTTP1Connection._finish_request:  s�   € Ø×ÒÑÔÐØŒ~ð 	 $Ô"<ð 	Ø�JŠJ‰LŒLˆLØˆFð 	Œ×Ò Ñ&Ô&Ð&ØÔ"×'Ò'Ñ)Ô)ð 	JÝ.¨tÔ/BÀDÑIÔIÐIÐIÐIð	Jð 	Jr    rÎ   c                 ó&  — t          |                     d¦  «        ¦  «                             d¦  «        }|                     d¦  «        }|d |…                              d¦  «        }t
          j                             ||d …         ¦  «        }||fS )Nr¸   z
ú
ú)r   ÚdecodeÚlstripÚfindÚrstripr	   ÚHTTPHeadersÚparse)r   rÎ   Údata_strÚeolr�   r‹   s         r   rv   zHTTP1Connection._parse_headersE  s€   € õ
 ˜dŸkšk¨(Ñ3Ô3Ñ4Ô4×;Ò;¸FÑCÔCˆà�mŠm˜DÑ!Ô!ˆØ˜d˜s˜d”^×*Ò*¨4Ñ0Ô0ˆ
ÝÔ&×,Ò,¨X°c°d°d¬^Ñ<Ô<ˆØ˜7Ð"Ð"r    r}   c                 óÌ  ‡— d|v rÝd|d         v r^t          j        d|d         ¦  «        Št          ˆfd„‰D ¦   «         ¦  «        rt          j        d|d         z  ¦  «        ‚‰d         |d<   	 t          |d         ¦  «        }n+# t          $ r t          j        d|d         z  ¦  «        ‚w xY wt          t          |¦  «        | j	        k    rt          j        d¦  «        ‚nd }t          |¦  «        }|d	k    r|s|d
vrt          j        d|z  ¦  «        ‚d}|r|                      |¦  «        S |�|                      ||¦  «        S | j        r|                      |¦  «        S d S )Nrk   ú,z,\s*c              3   ó0   •K  — | ]}|‰d          k    V — ŒdS )r   Nr   )r³   ÚiÚpiecess     €r   r¶   z-HTTP1Connection._read_body.<locals>.<genexpr>]  s+   øè è € Ð6Ð6¨!�q˜F 1œI’~Ð6Ð6Ð6Ð6Ð6Ð6r    z$Multiple unequal Content-Lengths: %rr   z*Only integer Content-Length is allowed: %szContent-Length too longr­   )Nr   z*Response with code %d should not have body)ÚreÚsplitÚanyr	   r3   rÀ   rÅ   r   rG   rQ   rÞ   Ú_read_chunked_bodyÚ_read_fixed_bodyrL   Ú_read_body_until_close)r   r}   r‹   r^   Úcontent_lengthÚ
is_chunkedrò   s         @r   r€   zHTTP1Connection._read_bodyQ  sÒ  ø€ ð ˜wÐ&Ð&Ø�gÐ.Ô/Ð/Ð/õ œ '¨7Ð3CÔ+DÑEÔE�ÝÐ6Ð6Ð6Ð6¨vÐ6Ñ6Ô6Ñ6Ô6ð Ý"Ô1Ø>Ø!Ð"2Ô3ñ4ñô ð ð -3°1¬I�Ð(Ñ)ðÝ09¸'ÐBRÔ:SÑ0TÔ0T��øÝð ð ð åÔ-Ø@ØÐ.Ô/ñ0ñô ð ðøøøõ •C˜Ñ(Ô(¨4Ô+>Ò>Ð>ÝÔ-Ð.GÑHÔHÐHð ?ð "ˆNå1°'Ñ:Ô:ˆ
à�3Š;ˆ;ð ð ˜^°9Ð<Ð<ÝÔ-Ø@À4ÑGñô ð ð ˆNàð 	5Ø×*Ò*¨8Ñ4Ô4Ð4ØÐ%Ø×(Ò(¨¸ÑBÔBÐBØŒ>ð 	9Ø×.Ò.¨xÑ8Ô8Ð8Øˆts   Á/B Â(B-rù   c              ƒ   óp  K  — |dk    r­| j                              t          | j        j        |¦  «        d¬¦  «        ƒ d {V —†}|t          |¦  «        z  }| j        r| j        rKt          t          ¦  «        5  | 
                    |¦  «        }|�|ƒ d {V —† d d d ¦  «         n# 1 swxY w Y   |dk    °«d S d S )Nr   T©Úpartial)rK   Ú
read_bytesÚminrM   r?   rÑ   rS   rL   r&   r   Údata_received)r   rù   r^   ÚbodyÚrets        r   r÷   z HTTP1Connection._read_fixed_body†  s,  è è € ð ˜qÒ Ð Øœ×/Ò/Ý�D”KÔ*¨NÑ;Ô;ÀTð 0ñ ô ð ð ð ð ð ð ˆDð �c $™iœiÑ'ˆNØÔ'ð "¨4¬>ð "Ý-­gÑ6Ô6ð "ð "Ø"×0Ò0°Ñ6Ô6�CØ�Ø!˜	˜	˜	˜	˜	˜	˜	ð"ð "ð "ñ "ô "ð "ð "ð "ð "ð "ð "øøøð "ð "ð "ð "ð ˜qÒ Ð Ð Ð Ð Ð s   Á7 B#Â#B'Â*B'c              ƒ   óV  K  — d}	 | j                              dd¬¦  «        ƒ d {V —†}	 t          t          |d d…         ¦  «        ¦  «        }n"# t          $ r t          j        d¦  «        ‚w xY w|dk    r<| j                              d¦  «        ƒ d {V —†}|dk    rt          j        d	¦  «        ‚d S ||z  }|| j        k    rt          j        d
¦  «        ‚|}|r§| j                              t          || j
        j        ¦  «        d¬¦  «        ƒ d {V —†}|t          |¦  «        z  }| j        r| j        rKt          t           ¦  «        5  |                     |¦  «        }|�|ƒ d {V —† d d d ¦  «         n# 1 swxY w Y   |°§| j                              d¦  «        ƒ d {V —†}|dk    sJ ‚�Œ¥)Nr   Tr»   é@   rd   éþÿÿÿzinvalid chunk sizer«   z%improperly terminated chunked requestzchunked body too largerü   )rK   Ú
read_untilÚparse_hex_intr   rÅ   r	   r3   rþ   rQ   rÿ   rM   r?   rÑ   rS   rL   r&   r   r   )	r   r^   Ú
total_sizeÚchunk_len_strÚ	chunk_lenÚcrlfÚbytes_to_readr£   r  s	            r   rö   z"HTTP1Connection._read_chunked_body”  sg  è è € àˆ
ð	#Ø"&¤+×"8Ò"8¸ÈBÐ"8Ñ"OÔ"OÐOÐOÐOÐOÐOÐOˆMðDÝ)­*°]À3ÀBÀ3Ô5GÑ*HÔ*HÑIÔI�	�	øÝð Dð Dð DÝÔ-Ð.BÑCÔCÐCðDøøøà˜AŠ~ˆ~Ø!œ[×3Ò3°AÑ6Ô6Ð6Ð6Ð6Ð6Ð6Ð6�Ø˜7’?�?Ý"Ô1Ø?ñô ð ð �Ø˜)Ñ#ˆJØ˜DÔ/Ò/Ð/ÝÔ-Ð.FÑGÔGÐGØ%ˆMØð 	&Ø"œk×4Ò4Ý˜ t¤{Ô'=Ñ>Ô>Èð 5ñ ô ð ð ð ð ð ð �ð ¥ U¡¤Ñ+�ØÔ+ð &¨t¬~ð &Ý1µ'Ñ:Ô:ð &ð &Ø&×4Ò4°UÑ;Ô;˜Ø˜?Ø"%˜I˜I˜I˜I˜I˜I˜Ið&ð &ð &ñ &ô &ð &ð &ð &ð &ð &ð &øøøð &ð &ð &ð &ð  ð 	&ð œ×/Ò/°Ñ2Ô2Ð2Ð2Ð2Ð2Ð2Ð2ˆDØ˜7’?�?�?�?ñ;	#s   ©$A ÁA-Å E4Å4E8Å;E8c              ƒ   ó   K  — | j                              ¦   «         ƒ d {V —†}| j        r| j        rNt	          t
          ¦  «        5  |                     |¦  «        }|�|ƒ d {V —† d d d ¦  «         d S # 1 swxY w Y   d S d S r   )rK   Úread_until_closerS   rL   r&   r   r   )r   r^   r  r  s       r   rø   z&HTTP1Connection._read_body_until_close¶  sæ   è è € ð ”[×1Ò1Ñ3Ô3Ð3Ð3Ð3Ð3Ð3Ð3ˆØÔ#ð 	 t¤~ð 	Ý)­'Ñ2Ô2ð ð Ø×,Ò,¨TÑ2Ô2�Ø�?Ø�I�I�I�I�I�I�Iðð ð ñ ô ð ð ð ð ð ð ð øøøð ð ð ð ð ð ð	ð 	s   Á A1Á1A5Á8A5©NNr!   r   )rÍ   r¤   r   N)rÍ   rá   r   N)-r"   r#   r$   r6   r
   ÚIOStreamrF   r   r=   Úobjectr   r	   ÚHTTPMessageDelegater   rb   ra   rW   r   r…   r†   rt   r�   rH   r    rG   r¢   r   r¼   r{   rê   ÚbytesrÏ   rÉ   r   r‚   rÊ   ry   r×   r   Ústrrv   r€   r÷   rö   rø   r   r    r   rJ   rJ   m   s¼  € € € € € ðð ð 7;Ø$(ð7#ð 7#àÔ!ð7#ð ð7#ð Ð2Ô3ð	7#ð
 ˜&Ô!ð7#ð 
ð7#ð 7#ð 7#ð 7#ðr, hÔ&Bð ,ÀyÐQUÄð ,ð ,ð ,ð ,ðx¨HÔ,Hð xÈTð xð xð xð xðt
1ð 
1ð 
1ð 
1ð(¨8°H¸RÀ¸XÔ4FÔ+Gð (ÈDð (ð (ð (ð (ð
 ð 
 ð 
 ð 
 ðJð Jð Jð Jð˜Ô)ð ð ð ð ð%¨ð %°$ð %ð %ð %ð %ð,¨sð ,°tð ,ð ,ð ,ð ,ð "&ð	Uð Uà˜(Ô3°XÔ5OÐOÔPðUð Ô%ðUð ˜Œð	Uð
 
ðUð Uð Uð Uðn 5ð ¨Uð ð ð ð ð ˜5ð  ^ð ð ð ð ð$Pð Pð Pð Pð@=ð =ð =ð =ðØ"Ô3ðØ>FÔ>Rðà	ðð ð ð ð(	Jð 	Jð 	Jð 	Jð
# 5ð 
#¨U°3¸Ô8LÐ3LÔ-Mð 
#ð 
#ð 
#ð 
#ð3àð3ð Ô%ð3ð Ô.ð	3ð
 
�)˜D”/Ô	"ð3ð 3ð 3ð 3ðj"Ø!ð"Ø-5Ô-Ið"à	ð"ð "ð "ð "ð #°Ô1Mð  #ÐRVð  #ð  #ð  #ð  #ðDØ Ô4ðà	ðð ð ð ð ð r    rJ   c                   óª   — e Zd ZdZdej        deddfd„Zdeej	        ej
        f         dej        deed                  fd	„Zd
eddfd„Zdd„Zdd„ZdS )r`   zDWraps an `HTTPMessageDelegate` to decode ``Content-Encoding: gzip``.r^   r?   r   Nc                 ó0   — || _         || _        d | _        d S r   )Ú	_delegateÚ_chunk_sizeÚ_decompressor)r   r^   r?   s      r   r   z_GzipMessageDelegate.__init__Ä  s   € Ø!ˆŒØ%ˆÔØ!ˆÔÐÐr    r�   r‹   c                 óô   — |                      dd¦  «                             ¦   «         dk    r2t          ¦   «         | _        |                     d|d         ¦  «         |d= | j                             ||¦  «        S )NzContent-Encodingr¯   ÚgzipzX-Consumed-Content-Encoding)r~   r¿   r   r  Úaddr  rz   )r   r�   r‹   s      r   rz   z%_GzipMessageDelegate.headers_receivedÉ  sv   € ð
 �;Š;Ð)¨2Ñ.Ô.×4Ò4Ñ6Ô6¸&Ò@Ð@Ý!1Ñ!3Ô!3ˆDÔð �KŠKÐ5°wÐ?QÔ7RÑSÔSÐSØÐ*Ð+ØŒ~×.Ò.¨z¸7ÑCÔCÐCr    r£   c              ƒ   óL  K  — | j         rt|}|rn| j                              || j        ¦  «        }|r$| j                             |¦  «        }|�|ƒ d {V —† | j         j        }|r|st          j        d¦  «        ‚|°ld S d S | j                             |¦  «        }|�
|ƒ d {V —† d S d S )Nz8encountered unconsumed gzip data without making progress)r  rD   r  r  r   Úunconsumed_tailr	   r3   )r   r£   Úcompressed_dataÚdecompressedr  s        r   r   z"_GzipMessageDelegate.data_received×  sû   è è € ØÔð 	Ø#ˆOØ!ð Ø#Ô1×<Ò<Ø# TÔ%5ñ ô  �ð  ð "Øœ.×6Ò6°|ÑDÔD�CØ�Ø!˜	˜	˜	˜	˜	˜	˜	Ø"&Ô"4Ô"D�Ø"ð ¨<ð Ý"Ô1ØRñô ð ð "ð ð ð ð ð ð ”.×.Ò.¨uÑ5Ô5ˆCØˆØ�	�	�	�	�	�	�	�	�	ð ˆr    c                 ó–   — | j         �*| j                              ¦   «         }|rt          d¦  «        ‚| j                             ¦   «         S )Nz:decompressor.flush returned data; possible truncated input)r  ÚflushrÅ   r  r‚   )r   Útails     r   r‚   z_GzipMessageDelegate.finishì  sT   € ØÔÐ)ØÔ%×+Ò+Ñ-Ô-ˆDØð 	õ !ØPñô ð ð Œ~×$Ò$Ñ&Ô&Ð&r    c                 ó4   — | j                              ¦   «         S r   )r  ru   r   s    r   ru   z(_GzipMessageDelegate.on_connection_closeû  s   € ØŒ~×1Ò1Ñ3Ô3Ð3r    r!   )r"   r#   r$   r6   r	   r  rG   r   r   r¼   r{   rê   r   r   rz   r  r   r‚   ru   r   r    r   r`   r`   Á  sä   € € € € € ØNÐNð" Ô!=ð "È3ð "ÐSWð "ð "ð "ð "ð
Dà˜(Ô3°XÔ5OÐOÔPðDð Ô%ðDð 
�)˜D”/Ô	"ð	Dð Dð Dð Dð¨ð °4ð ð ð ð ð*'ð 'ð 'ð 'ð4ð 4ð 4ð 4ð 4ð 4r    r`   c            	       óŽ   — e Zd ZdZ	 	 ddej        dee         dee         ddfd„Z	dd„Z
d	ej        ddfd
„Zd	ej        ddfd„ZdS )ÚHTTP1ServerConnectionzAn HTTP/1.x server.NrK   rM   rN   r   c                 ó^   — || _         |€t          ¦   «         }|| _        || _        d| _        dS )zÝ
        :arg stream: an `.IOStream`
        :arg params: a `.HTTP1ConnectionParameters` or None
        :arg context: an opaque application-defined object that is accessible
            as ``connection.context``
        N)rK   r=   rM   rN   Ú_serving_future)r   rK   rM   rN   s       r   r   zHTTP1ServerConnection.__init__  s7   € ð ˆŒØˆ>Ý.Ñ0Ô0ˆFØˆŒØˆŒØ#ˆÔÐÐr    c              ƒ   óŒ   K  — | j                              ¦   «          | j        €J ‚	 | j        ƒ d{V —† dS # t          $ r Y dS w xY w)zmCloses the connection.

        Returns a `.Future` that resolves after the serving loop has exited.
        N)rK   rt   r(  Ú	Exceptionr   s    r   rt   zHTTP1ServerConnection.close  su   è è € ð
 	Œ×ÒÑÔÐð Ô#Ð/Ð/Ð/ð	ØÔ&Ð&Ð&Ð&Ð&Ð&Ð&Ð&Ð&Ð&øÝð 	ð 	ð 	ØˆDˆDð	øøøs   ¦5 µ
AÁAr^   c                 óÜ   — t          |t          j        ¦  «        sJ ‚t          j        |                      |¦  «        ¦  «        }|| _        | j        j         	                    |d„ ¦  «         dS )znStarts serving requests on this connection.

        :arg delegate: a `.HTTPServerConnectionDelegate`
        c                 ó*   — |                       ¦   «         S r   )rÙ   )Úfs    r   ú<lambda>z5HTTP1ServerConnection.start_serving.<locals>.<lambda>,  s   € °a·h²h±j´j€ r    N)
r2   r	   ÚHTTPServerConnectionDelegater   Úconvert_yieldedÚ_server_request_loopr(  rK   rp   Ú
add_future)r   r^   Úfuts      r   Ústart_servingz#HTTP1ServerConnection.start_serving#  sh   € õ
 ˜(¥HÔ$IÑJÔJÐJÐJÐJÝÔ! $×";Ò";¸HÑ"EÔ"EÑFÔFˆØ"ˆÔàŒÔ×&Ò& sÐ,@Ð,@ÑAÔAÐAÐAÐAr    c              ƒ   óÖ  K  — 	 	 t          | j        d| j        | j        ¦  «        }|                     | |¦  «        }	 |                     |¦  «        ƒ d {V —†}nÂ# t          j        t          j        t          j
        f$ r Y |                     | ¦  «         d S t          $ r- |                     ¦   «          Y |                     | ¦  «         d S t          $ rC t          j        dd¬¦  «         |                     ¦   «          Y |                     | ¦  «         d S w xY w|s	 |                     | ¦  «         d S t          j        d¦  «        ƒ d {V —† �ŒL# |                     | ¦  «         w xY w)NTFr/   r0   r   )rJ   rK   rM   rN   Ústart_requestrb   r
   rr   ÚUnsatisfiableReadErrorÚasyncioÚCancelledErrorÚon_closer   rt   r*  r   r4   Úsleep)r   r^   ÚconnÚrequest_delegater  s        r   r1  z*HTTP1ServerConnection._server_request_loop.  sÁ  è è € ð	$ð'Ý& t¤{°E¸4¼;ÈÌÑUÔU�Ø#+×#9Ò#9¸$ÀÑ#EÔ#EÐ ðØ $× 2Ò 2Ð3CÑ DÔ DÐDÐDÐDÐDÐDÐD�C�CøåÔ.ÝÔ3ÝÔ*ðð ð ð ð
 ð ×Ò˜dÑ#Ô#Ð#Ð#Ð#õ 'ð ð ð à—J’J‘L”L�LØð ×Ò˜dÑ#Ô#Ð#Ð#Ð#õ !ð ð ð Ý”MÐ"6ÀÐFÑFÔFÐFØ—J’J‘L”L�LØð
 ×Ò˜dÑ#Ô#Ð#Ð#Ð#ðøøøð ð Øð ×Ò˜dÑ#Ô#Ð#Ð#Ð#õ ”m AÑ&Ô&Ð&Ð&Ð&Ð&Ð&Ð&Ð&ñ+'øð. ×Ò˜dÑ#Ô#Ð#Ð#øøøsL   „8E ½A ÁE Á&DÁ?E ÂDÂ4E Ã3DÃ?E ÄDÄE Ä5E ÅE(r  r!   )r"   r#   r$   r6   r
   r  r   r=   r  r   rt   r	   r/  r4  r1  r   r    r   r&  r&  ÿ  sÖ   € € € € € ØÐð
 7;Ø$(ð	$ð $àÔ!ð$ð Ð2Ô3ð$ð ˜&Ô!ð	$ð
 
ð$ð $ð $ð $ð&ð ð ð ð	B hÔ&Kð 	BÐPTð 	Bð 	Bð 	Bð 	Bð$Ø Ô=ð$à	ð$ð $ð $ð $ð $ð $r    r&  z[0-9]+z[0-9a-fA-F]+Úsr   c                 óx   — t                                | ¦  «        €t          d| z  ¦  «        ‚t          | ¦  «        S )z+Parse a non-negative integer from a string.Nznot an integer: %r)ÚDIGITSÚ	fullmatchrÅ   rG   ©r>  s    r   rÀ   rÀ   P  s5   € å×Ò˜ÑÔÐ"ÝÐ-°Ñ1Ñ2Ô2Ð2Ýˆq‰6Œ6€Mr    c                 óz   — t                                | ¦  «        €t          d| z  ¦  «        ‚t          | d¦  «        S )z7Parse a non-negative hexadecimal integer from a string.Nznot a hexadecimal integer: %ré   )Ú	HEXDIGITSrA  rÅ   rG   rB  s    r   r  r  W  s8   € å×Ò˜1ÑÔÐ%ÝÐ8¸1Ñ<Ñ=Ô=Ð=Ýˆq�"‰:Œ:Ðr    r‹   c                 ó¸   — d| vrdS d| v rt          j        d¦  «        ‚| d                              ¦   «         dk    rdS t          j        d| d         z  ¦  «        ‚)z�Returns true if the headers specify Transfer-Encoding: chunked.

    Raise httputil.HTTPInputError if any other transfer encoding is used.
    rl   Frk   z6Message with both Transfer-Encoding and Content-Lengthr±   Tz Unsupported Transfer-Encoding %s)r	   r3   r¿   )r‹   s    r   rÞ   rÞ   ^  s‚   € ð  'Ð)Ð)ØˆuØ˜7Ð"Ð"õ Ô%ØDñ
ô 
ð 	
ð Ð"Ô#×)Ò)Ñ+Ô+¨yÒ8Ð8Øˆtõ Ô
!Ø*¨WÐ5HÔ-IÑIñô ð r    )1r6   r8  r7   ró   r:   Útornado.concurrentr   r   r   Útornado.escaper   r   Útornador   r	   r
   Útornado.logr   r   Útornado.utilr   Útypingr   r   r   r   r   r   r   ÚcompilerÃ   r*  r   r&   r=   ÚHTTPConnectionrJ   r  r`   r&  r@  rE  r  rG   rÀ   r  rê   rF   rÞ   r   r    r   ú<module>rO     sÒ  ðð ð ð
 €€€Ø €€€Ø 	€	€	€	Ø €€€ðð ð ð ð ð ð ð ð ð ð
 ,Ð +Ð +Ð +Ð +Ð +Ð +Ð +Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø (Ð (Ð (Ð (Ð (Ð (Ð (Ð (Ø )Ð )Ð )Ð )Ð )Ð )ð KÐ JÐ JÐ JÐ JÐ JÐ JÐ JÐ JÐ JÐ JÐ JÐ JÐ JÐ JÐ JÐ JÐ JàˆbŒj˜Ñ"Ô"€ðð ð ð ð �iñ ô ð ð
"ð "ð "ð "ð "ñ "ô "ð "ð6%ð %ð %ð %ð %ñ %ô %ð %ðBQ	ð Q	ð Q	ð Q	ð Q	�hÔ-ñ Q	ô Q	ð Q	ðh;4ð ;4ð ;4ð ;4ð ;4˜8Ô7ñ ;4ô ;4ð ;4ð|J$ð J$ð J$ð J$ð J$ñ J$ô J$ð J$ðZ 
ˆŒ�IÑ	Ô	€ØˆBŒJ�Ñ'Ô'€	ð�ð ˜ð ð ð ð ð�Sð ˜Sð ð ð ð ð¨(Ô*>ð À4ð ð ð ð ð ð r    