o
    4˜ŽjE¸  ã                   @   s†  U d dl Z d dl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	 d dl
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 dd	lmZ dd
lmZ ddl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*m+Z+ ddl,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5 ddl6m7Z7m8Z8m9Z9 ddl:m;Z;m<Z< ddl=m>Z> er¯ddl?m@Z@ dZAed ZBeCejDƒZEeeCeF  eGd< e Hd¡ZIeeF eGd< e JdeI› d�¡ZKee	eF  eGd< e JdejL¡ZMee	eF  eGd< e JdejL¡ZNee	eF  eGd< e Jd¡ZOee	eP  eGd< e Jd ¡ZQee	eF  eGd!< eRh d"£ƒZSeeReF  eGd#< G d$d%„ d%eƒZTG d&d'„ d'eƒZUed(eTeUƒZVG d)d*„ d*eƒZWG d+d,„ d,eƒZXG d-d.„ d.eƒZYG d/d0„ d0ƒZZd1eeF d2e[fd3d4„Z\G d5d6„ d6e j]eeV ƒZ^G d7d8„ d8e^eT ƒZ_G d9d:„ d:e^eU ƒZ`G d;d<„ d<ƒZaG d=d>„ d>ƒZbe_Zce`ZdeTZeeUZfze)�sµdd?lgm_Z_m`Z`mTZTmUZU e_Zhe`ZieTZjeUZkW dS W dS  el�yÂ   Y dS w )@é    N)Úsuppress)ÚIntEnum)ÚPattern)ÚTYPE_CHECKINGÚAnyÚClassVarÚFinalÚGenericÚLiteralÚ
NamedTupleÚTypeVar)ÚCIMultiDictÚCIMultiDictProxyÚistr)ÚURLé   )Úhdrs)ÚBaseProtocol)Ú
HAS_BROTLIÚHAS_ZSTDÚBrotliDecompressorÚZLibDecompressorÚZSTDDecompressor)Ú_EXC_SENTINELÚDEBUGÚDEFAULT_CHUNK_SIZEÚEMPTY_BODY_METHODSÚEMPTY_BODY_STATUS_CODESÚNO_EXTENSIONSÚBaseTimerContextÚset_exception)	ÚBadHttpMessageÚBadHttpMethodÚBadStatusLineÚContentEncodingErrorÚContentLengthErrorÚInvalidHeaderÚInvalidURLErrorÚLineTooLongÚTransferEncodingError)ÚHttpVersionÚHttpVersion10ÚHttpVersion11)ÚEMPTY_PAYLOADÚStreamReader)Ú
RawHeaders)ÚResponseHandler)ÚHeadersParserÚ
HttpParserÚHttpRequestParserÚHttpResponseParserÚRawRequestMessageÚRawResponseMessage)ó   
ó   
ÚASCIISETz!#$%&'*+-.^_`|~Ú_TCHAR_SPECIALSz
[0-9A-Za-zz]+ÚTOKENREzHTTP/(\d)\.(\d)ÚVERSREz\d+ÚDIGITSs   [0-9a-fA-F]+Ú	HEXDIGITSz[\x00-\x08\x0a-\x1f\x7f]Ú_FIELD_VALUE_FORBIDDEN_CTL_RE>
   ú
user-agentúcontent-typeúmax-forwardsúcontent-rangeúcontent-lengthúcontent-locationútransfer-encodingÚetagÚhostÚserverÚSINGLETON_HEADERSc                   @   sb   e Zd ZU eed< eed< eed< ded< eed< eed< edB ed	< eed
< eed< eed< dS )r5   ÚmethodÚpathÚversionúCIMultiDictProxy[str]ÚheadersÚraw_headersÚshould_closeNÚcompressionÚupgradeÚchunkedÚurl)	Ú__name__Ú
__module__Ú__qualname__ÚstrÚ__annotations__r*   r/   Úboolr   © r\   r\   úP/var/www/kodo/Anonymous/send/lib/python3.10/site-packages/aiohttp/http_parser.pyr5   o   s   
 r5   c                   @   s^   e Zd ZU eed< eed< eed< ee ed< eed< e	ed< edB ed< e	ed	< e	ed
< dS )r6   rM   ÚcodeÚreasonrO   rP   rQ   NrR   rS   rT   )
rV   rW   rX   r*   rZ   ÚintrY   r   r/   r[   r\   r\   r\   r]   r6   |   s   
 r6   Ú_MsgTc                   @   s   e Zd ZdZdZdZdS )ÚPayloadStater   r   é   N)rV   rW   rX   ÚPAYLOAD_COMPLETEÚPAYLOAD_NEEDS_INPUTÚPAYLOAD_HAS_PENDING_INPUTr\   r\   r\   r]   rb   ‹   s    rb   c                   @   s   e Zd ZdZdZdZdZdS )Ú
ParseStater   r   rc   é   N)rV   rW   rX   Ú
PARSE_NONEÚPARSE_LENGTHÚPARSE_CHUNKEDÚPARSE_UNTIL_EOFr\   r\   r\   r]   rg   ‘   s
    rg   c                   @   s    e Zd ZdZdZdZdZdZdS )Ú
ChunkStater   r   rc   rh   é   N)rV   rW   rX   ÚPARSE_CHUNKED_SIZEÚPARSE_CHUNKED_CHUNKÚPARSE_CHUNKED_CHUNK_EOFÚPARSE_MAYBE_TRAILERSÚPARSE_TRAILERSr\   r\   r\   r]   rm   ™   s    rm   c                   @   sR   e Zd Z				ddededededd	f
d
d„Zdee dede	f fdd„Z
d	S )r1   éþ  é €  FÚmax_line_sizeÚmax_headersÚmax_field_sizeÚlaxÚreturnNc                 C   s   || _ || _|| _|| _d S ©N)rv   rw   rx   Ú_lax)Úselfrv   rw   rx   ry   r\   r\   r]   Ú__init__¢   s   
zHeadersParser.__init__ÚlinesrN   c                 C   s  t ƒ }g }d}|| }t|ƒ}|�rz
| dd¡\}}W n ty(   t|ƒd ‚w t|ƒdkr3t|ƒ‚|d |d hddh@ rCt|ƒ‚| d¡}| dd	¡}	t |	¡sWt|ƒ‚|d7 }|| }| j	oi|oi|d d
v }
|
r¹t|ƒ}|g}|
r´|t|ƒ7 }|| j
kr•|d d |¡ }t|d d… d | j
ƒ‚| |¡ |d7 }||k r¯|| }|r®|d d
v }
nd}n|
sud |¡}| d¡}| dd	¡}| j	rØd|v sÓd|v sÓd|v r×t|ƒ‚n	t |¡rát|ƒ‚| j	sö|	|v rö|	 ¡ tv rötd|	› d�ƒ‚| |	|¡ | ||f¡ |st|ƒt|ƒfS )Nr   ó   :r   éÿÿÿÿé    é	   s    	úutf-8Úsurrogateescape)r‚   rƒ   s   : ó    éd   ó   ...Ú
úú zDuplicate 'z' header found.)r   ÚlenÚsplitÚ
ValueErrorr&   ÚlstripÚdecoder;   Ú	fullmatchr|   rx   Újoinr(   ÚappendÚstripr?   ÚsearchÚlowerrJ   r!   Úaddr   Útuple)r}   r   rO   rP   Ú	lines_idxÚlineÚ
line_countÚbnameÚbvalueÚnameÚcontinuationÚheader_lengthÚ
bvalue_lstÚheader_lineÚvaluer\   r\   r]   Úparse_headers®   sr   
ÿ


ÿ
€ï

ÿ
ÁAzHeadersParser.parse_headers)rt   ru   rt   F)rV   rW   rX   r`   r[   r~   ÚlistÚbytesr˜   r/   r¤   r\   r\   r\   r]   r1   ¡   s*    ûþýüû
úÿ
þr1   rO   rz   c                 C   s"   |   tjd¡}| ¡ o| ¡ dv S )z)Check if the upgrade header is supported.Ú >   ÚtcpÚ	websocket)Úgetr   ÚUPGRADEÚisasciir–   )rO   Úur\   r\   r]   Ú_is_supported_upgradeý   s   r®   c                   @   sˆ  e Zd ZU dZee ed< 														d6d	edB d
ej	dB de
de
de
de
dedB de
dB dedB dee dB dededede
ddfdd„Zejdee defdd„ƒZejdedefdd„ƒZd7d d!„Zd7d"d#„ZdedB fd$d%„Zd&d'ejejejfd(ed)ed*ed+ed,ed-ede ee ee!f  eef fd.d/„Z"dee de d0e#edB edB eef fd1d2„Z$d3eddfd4d5„Z%dS )8r2   Fry   Né   rt   é€   Tr   ÚprotocolÚloopÚlimitrv   rw   rx   Útimerr^   rK   Úpayload_exceptionÚresponse_with_bodyÚread_until_eofÚauto_decompressÚmax_msg_queue_sizerz   c                 C   s    || _ || _|| _|| _|| _|| _|| _|| _|	| _|
| _|| _	|| _
g | _d| _d| _d| _d | _d | _d| _|| _|| _t|||| jƒ| _|| _d| _d S )Nr†   Fr   )r±   r²   rv   rw   rx   r´   r^   rK   rµ   r¶   r·   Ú_linesÚ_tailÚ	_upgradedÚ_pending_upgradeÚ_payloadÚ_payload_parserÚ_payload_has_more_dataÚ_auto_decompressÚ_limitr1   ry   Ú_headers_parserÚ_max_msg_queue_sizeÚ_msg_in_flight)r}   r±   r²   r³   rv   rw   rx   r´   r^   rK   rµ   r¶   r·   r¸   r¹   r\   r\   r]   r~     s4   
ÿ
zHttpParser.__init__r   c                 C   ó   d S r{   r\   )r}   r   r\   r\   r]   Úparse_message5  ó   zHttpParser.parse_messageÚtec                 C   rÆ   r{   r\   ©r}   rÉ   r\   r\   r]   Ú_is_chunked_te8  rÈ   zHttpParser._is_chunked_tec                 C   s   | j d usJ ‚| j  ¡  d S r{   )r¿   Úpause_reading©r}   r\   r\   r]   rÌ   ;  s   zHttpParser.pause_readingc                 C   s    | j dkr|  j d8  _ dS dS )z;Protocol drained a queued message; free a slot for parsing.r   r   N)rÅ   rÍ   r\   r\   r]   Úmessage_consumed?  s   
ÿzHttpParser.message_consumedc                 C   s’   | j d ur| j  ¡  | j jrd | _ d S | jr| j | j¡ | jrG| jd dkr-| j d¡ ttƒ� |  | j¡W  d   ƒ S 1 sBw   Y  d S )Nr�   z
r†   )	r¿   Úfeed_eofÚdoner»   rº   r“   r   Ú	ExceptionrÇ   rÍ   r\   r\   r]   rÏ   D  s   

ø

 ÿzHttpParser.feed_eofr7   r†   ÚdataÚSEPÚEMPTYÚCONTENT_LENGTHÚMETH_CONNECTÚSEC_WEBSOCKET_KEY1c                    s>  g }| j r| j | d}| _ t|ƒ}d}	| j}
| j}d}|	|k s$| j�rˆ| jd u �rú| j�sú| jr@| j| jkr@||	d … | _ �nH| 	||	¡}||	krT| j
sT|t|ƒ }	q||	k�rÐ|r_tdƒ‚||	|… }|dkrn| d¡}t|ƒ|krt|d d… d |ƒ‚| j
 |¡ | j}t| j
ƒ| jkr”td	ƒ‚|t|ƒ }	| j
d
 |k�rÏ| jt| j
ƒ }z|  | j
¡‰W | j
 ¡  n| j
 ¡  w dtd B f‡ ‡fdd„}|ƒ }|ˆjv rÖt|ƒ‚ˆjoÝtˆjƒ}tˆd| jƒ}tˆddƒ}| jd usòJ ‚|tv pýt|oü|tv ƒ}|�sA|d u�r|dk�sˆj�rAt| j| j |
| j!d�}t"||ˆj|ˆj#| j$| j%| j&| j'| j(| j| j|| j!d�}|j)�s@|| _|| _*ny||k�rtt+ˆt,ƒ�sNJ ‚t| j| j |
| j!d�}d| _t"|ˆjˆj#| j&| j'| j(| j| j|| j!d�
| _nF|�s¯|d u �r¯| j-�r¯t| j| j |
| j!d�}t"||ˆj|ˆj#| j$| j%| j&| j'| j(| j| j|| j!d�}|j)�s®|| _n|�r¸d| _t.}nt.}| ˆ|f¡ | j�rÌ|  jd7  _ˆj/}n±||	d … | _ d| j v �rátdƒ‚t| j ƒ| jk�r÷t| j d d… d | jƒ‚|}nŽ| jd u �r| j�r| j
�r
J ‚n}| j
�rJ ‚| jd u�sJ ‚z| j 0||	d … |¡\}}W n8 t1�y` } z+|}| j2d u�r@|  2t3|ƒ¡}t4| jj5||ƒ t6j7}d}t+|tt8fƒ�rV‚ W Y d }~nd }~ww |t6j9k| _|t6j7u�rnnd}	t|ƒ}d | _| j*�r�d| _d| _*|	|k s$| js$|�r—|	|k �r—||	d … }n|}|| j|fS )Nr†   r   FzData after `Connection: close`r8   ó   r‡   rˆ   zToo many headers receivedr�   rz   c                     s2   ˆj  ˆ ¡} | d u rd S t | ¡stˆ ƒ‚t| ƒS r{   )rO   rª   r=   r‘   r&   r`   )Ú
length_hdr©rÕ   Úmsgr\   r]   Úget_content_length™  s   
z0HttpParser.feed_data.<locals>.get_content_lengthrK   r^   )r´   r²   r³   )ÚlengthrT   rK   rR   r^   r¶   r¸   ry   Úheaders_parserrv   rx   Úmax_trailersr³   T)	rK   rR   r¸   ry   rÞ   rv   rx   rß   r³   r   zBad line ending, expected CRLF):r»   rŒ   r²   rv   rÀ   r¿   r¼   rÄ   rÅ   Úfindrº   r!   Úrstripr(   r“   rx   rw   rÇ   Úclearr`   rO   r&   rS   r®   ÚgetattrrK   r±   r   r[   r   rT   r.   r´   rÂ   ÚHttpPayloadParserrR   r^   r¶   rÁ   ry   rÃ   rÐ   r½   Ú
isinstancer5   r·   r-   rQ   Ú	feed_datarÑ   rµ   rY   r    Úpayloadrb   rd   r)   rf   )r}   rÒ   rÓ   rÔ   rÕ   rÖ   r×   ÚmessagesÚdata_lenÚ	start_posr²   Úmax_line_lengthrQ   Úposrš   rß   rÜ   rÝ   ÚupgradedrK   r^   Ú
empty_bodyrç   Úpayload_parserÚpayload_stateÚunderlying_excÚreraised_excr\   rÚ   r]   ræ   U  sn  
ÿ




ÿüò€
ü
öüò€€ÿýÿý€óÿ �ž dzHttpParser.feed_datarN   c                 C   sÜ   | j  |¡\}}d}d}d}d}| tjd¡}|r9dd„ |D ƒ}	d|	v r'd}nd|	v r-d}d	|	v r9| tj¡r9d}| tjd
¡}
|
 ¡ rL|
 	¡ dv rL|
}| tj
¡}|durf|  |¡r]d}tj|v rftdƒ‚||||||fS )z­Parses RFC 5322 headers from a stream.

        Line continuations are supported. Returns list of header name
        and value pairs. Header name is in upper case.
        NFr\   c                 S   s:   h | ]}d d„ |  d¡D ƒD ]}|r| ¡ r| ¡ ’qqS )c                 s   s   � | ]}|  d ¡V  qdS )ú 	N)r”   )Ú.0Úpartr\   r\   r]   Ú	<genexpr>k  s   € z5HttpParser.parse_headers.<locals>.<setcomp>.<genexpr>ú,)r�   r¬   r–   )rô   Ú
conn_valueÚtokenr\   r\   r]   Ú	<setcomp>h  s    ýüüÿz+HttpParser.parse_headers.<locals>.<setcomp>ÚcloseTz
keep-aliverS   r§   >   ÚbrÚgzipÚzstdÚdeflatez6Transfer-Encoding can't be present with Content-Length)rÃ   r¤   Úgetallr   Ú
CONNECTIONrª   r«   ÚCONTENT_ENCODINGr¬   r–   ÚTRANSFER_ENCODINGrË   rÕ   r!   )r}   r   rO   rP   Ú
close_connÚencodingrS   rT   Úconn_valuesÚconn_tokensÚencrÉ   r\   r\   r]   r¤   T  s8   
þ

ÿzHttpParser.parse_headersÚvalc                 C   s
   || _ dS )zZSet connection upgraded (to websocket) mode.

        :param bool val: new state.
        N)r¼   )r}   r	  r\   r\   r]   Úset_upgradedŠ  s   
zHttpParser.set_upgraded)NNr¯   rt   r°   rt   NNNNTFTr   ©rz   N)&rV   rW   rX   ry   r   r[   rZ   r   ÚasyncioÚAbstractEventLoopr`   r   rY   ÚtypeÚBaseExceptionr~   ÚabcÚabstractmethodr¥   r¦   ra   rÇ   rË   rÌ   rÎ   rÏ   r   rÕ   rÖ   r×   Ú_SEPr   r˜   r.   ræ   r/   r¤   r
  r\   r\   r\   r]   r2     s¨   
 ñþýüûúùø	÷
ö
õôóòñ
ð.

ùþýüûúù
ø  ÿÿ
þ6r2   c                   @   s8   e Zd ZdZdee defdd„Zdede	fdd„Z
d	S )
r3   z¥Read request status line.

    Exception .http_exceptions.BadStatusLine
    could be raised in case of any errors in status line.
    Returns RawRequestMessage.
    r   rz   c                 C   s   |d   dd¡}z|jddd�\}}}W n ty    t|ƒd ‚w t |¡s*t|ƒ‚| ¡ }t |¡}|d u r;t|ƒ‚t	t
| d¡ƒt
| d¡ƒƒ}|dkrVtj|d	d
�}nD| d¡ru| d¡\}	}
}|	 d¡\}	}}tj|	||d	d�}n%|dkr„|dkr„t|d	d�}nt|d	d�}|jdkršt|jdd�  d¡ƒ‚|  |dd … ¡\}}}}}}|tkr¶tj|vr¶tdƒ‚|d u rÃ|tkrÁd	}nd}t||||||||||ƒ
S )Nr   r„   r…   ú rc   ©Úmaxsplitr   ÚCONNECTT)Ú	authorityÚencodedú/ú#ú?)rL   Úquery_stringÚfragmentr  Ú*ÚOPTIONS)r  r§   )ÚerrorsÚlatin1z!Missing 'Host' header in request.F)r�   r�   rŽ   r"   r;   r‘   Úupperr<   r#   r*   r`   Úgroupr   ÚbuildÚ
startswithÚ	partitionÚschemer'   Úencoder¤   r,   r   ÚHOSTr!   r+   r5   )r}   r   rš   rK   rL   rM   ÚmatchÚ	version_orU   Ú	path_partÚ_hash_separatorÚurl_fragmentÚ_question_mark_separatorÚqs_partrO   rP   rû   rR   rS   rT   r\   r\   r]   rÇ   š  sr   
ÿ


ü
ÿùözHttpRequestParser.parse_messagerÉ   c                 C   s8   |j ddd�d  d¡}| ¡ r| ¡ dkrdS tdƒ‚)	Nr÷   r   r  r�   ró   rT   Tz'Request has invalid `Transfer-Encoding`)Úrsplitr”   r¬   r–   r!   rÊ   r\   r\   r]   rË   î  s   z HttpRequestParser._is_chunked_teN)rV   rW   rX   Ú__doc__r¥   r¦   r5   rÇ   rY   r[   rË   r\   r\   r\   r]   r3   ’  s    Tr3   c                       sŒ   e Zd ZU dZded< e Z	ddededB de	de	d	e
ee
eef  eef f
‡ fd
d„Zdee d	efdd„Zded	efdd„Z‡  ZS )r4   z”Read response status line and headers.

    BadStatusLine could be raised in case of any errors in status line.
    Returns RawResponseMessage.
    r0   r±   NrÒ   rÓ   ÚargsÚkwargsrz   c                    s0   |d u r
t rdnd}tƒ j||g|¢R i |¤ŽS )Nr7   r8   )r   Úsuperræ   )r}   rÒ   rÓ   r3  r4  ©Ú	__class__r\   r]   ræ     s   zHttpResponseParser.feed_datar   c              
   C   sb  |d   dd¡}z
|jdd�\}}W n ty   t|ƒd ‚w z
|jdd�\}}W n ty8   | ¡ }d}Y nw t |¡}|d u rFt|ƒ‚tt| 	d¡ƒt| 	d¡ƒƒ}t
|ƒdks`t |¡sdt|ƒ‚t|ƒ}|  |dd … ¡\}	}
}}}}|d u r£|tkr‚d	}n!d
|  krŒdk s‘n |dv r”d}ntj|	v sžtj|	v r¡d}nd	}t||| ¡ |	|
||||ƒ	S )Nr   r„   r…   r   r  r§   rc   rh   Tr‡   éÈ   >   é0  éÌ   F)r�   r�   rŽ   r#   r”   r<   r‘   r*   r`   r#  rŒ   r=   r¤   r+   r   rÕ   r  r6   )r}   r   rš   rM   Ústatusr_   r*  r+  Ústatus_irO   rP   rû   rR   rS   rT   r\   r\   r]   rÇ     s\   
ÿþ

ù÷z HttpResponseParser.parse_messagerÉ   c                 C   s    |j ddd�d  d¡ ¡ dkS )Nr÷   r   r  r�   ró   rT   )r1  r”   r–   rÊ   r\   r\   r]   rË   H  s    z!HttpResponseParser._is_chunked_ter{   )rV   rW   rX   r2  rZ   r   ry   r¦   r  r   r˜   r¥   r6   r.   r[   ræ   rÇ   rY   rË   Ú__classcell__r\   r\   r6  r]   r4   ÷  s$   
 ýþýüûú:r4   c                    @   sº   e Zd Z								d#dddedœdededB d	ed
edB dedB dedB dededededededededdfdd„Z	d$dd„Z
d$dd„Z	d%deded edeeef fd!d"„ZdS )&rä   NFTrt   r°   )rv   rx   rß   r³   rç   rÝ   rT   rR   r^   rK   r¶   r¸   ry   rÞ   rv   rx   rß   r³   rz   c
                C   sî   d| _ d| _tj| _tj| _d| _d| _	|| _
|	| _|
| _|| _|| _|| _d| _g | _d| _d| _|rA|rA| j
rAt|||d�}n|}|sQtj| _| ¡  d| _n!|rXtj| _n|d urrtj| _|| _ || _| j dkrr| ¡  d| _|| _d S )Nr   Fr†   )Úmax_decompress_sizeT)Ú_lengthÚ_pausedrg   rl   Ú_typerm   ro   Ú_chunkÚ_chunk_sizeÚ_chunk_tailrÁ   r|   rÃ   Ú_max_line_sizeÚ_max_field_sizeÚ_max_trailersÚ_more_data_availableÚ_trailer_linesrÐ   Ú_eof_pendingÚDeflateBufferri   rÏ   rk   rj   Ú_length_expectedrç   )r}   rç   rÝ   rT   rR   r^   rK   r¶   r¸   ry   rÞ   rv   rx   rß   r³   Úreal_payloadr\   r\   r]   r~   N  sF   ÿ


zHttpPayloadParser.__init__c                 C   s
   d| _ d S )NT)r@  rÍ   r\   r\   r]   rÌ   ‹  s   
zHttpPayloadParser.pause_readingc                 C   s    | j tjkr,d| _| jr| jrd| _d S | j dd¡| _| js| j ¡  d| _	d| _d S | j tj
krD| j| j }td|› d| j› d�ƒ‚| j tjkrNtdƒ‚d S )	NTFr†   r   z;Not enough data to satisfy content length header (received z of z bytes).z2Not enough data to satisfy transfer length header.)rA  rg   rl   rJ  rH  r@  rç   ræ   rÏ   rÐ   rj   rL  r?  r%   rk   r)   )r}   Úreceivedr\   r\   r]   rÏ   Ž  s2   ü

ÿÿÿÿÿzHttpPayloadParser.feed_eofr7   ó   ;ÚchunkrÓ   Ú	CHUNK_EXTc                 C   sÐ  | j tjkr_| jr| j| }d| _| j}t|t|ƒ dƒ| _| j |d|… |¡| _	| j	rJ| j
r?d| _
||d… | _tjdfS | j dd¡| _	| j	s-| jdkr]| j ¡  tj||d… fS �n„| j tjk�r¢| jr–| jtjkrŽ| j}| jtjkr{| j}t| jƒ|krŽt| jdd… d |ƒ‚| j| }d| _|sœ| j	�r¡| jtjk�rb| |¡}|dk�rI|| jkr¾t|dd… d | jƒ‚| |d|¡}|dkré|d|… }d|||…  }	v rètd|	›�ƒ}
t| j|
ƒ |
‚n|d|… }| jrö| ¡ }t t|¡�st|d|…   d	d
¡ƒ}
t| j|
ƒ |
‚t!t"|ƒdƒ}||t|ƒ d… }|dk�r<tj| _| j�r;| #d¡�r;|dd… }n&tj| _|| _$| j %¡  nd|v �rZtdƒ}
t| j|
ƒ |
‚|| _tj&dfS | jtjk�r±| j
�rxd| _
|| _tjdfS | j$}t|t|ƒ dƒ| _$| j |d|… |¡| _	||d… }| j	�rœq–| j$�r¨d| _
tj&dfS tj'| _| j (¡  | jtj'k�r| j�rÈ| #d¡�rÈ|dd… }|dt|ƒ… |k�rà|t|ƒd… }tj| _n(t|ƒt|ƒk�sô||dt|ƒ… k�r tdƒ}
t| j|
ƒ |
‚|| _tj&dfS | jtjk�rœ| |¡}|dk �r2d|v �r*tdƒ}
t| j|
ƒ |
‚|| _tj&dfS |d|… }||t|ƒ d… }|dk�rL| )d¡}t|ƒ| jk�r`t|dd… d | jƒ‚| j* +|¡ t| j*ƒ| j,k�rst-dƒ‚| j*d dk�rœz| j. /| j*¡\}}W | j* 0¡  n| j* 0¡  w | j ¡  tj|fS |sœ| j	sœnA| j tj1k�rã| j |t|ƒ¡| _	| j	�rÏ| j
�rÃd| _
tjdfS | j dd¡| _	| j	�s·| j2�rã| j ¡  d| _3d| _2tjdfS tj&dfS )aÇ  Receive a chunk of data to process.

        Return:
            PayloadState - The current state of payload processing.
                           This function may be called with empty bytes after returning
                           PAYLOAD_HAS_PENDING_INPUT to continue processing after a pause.
            bytes - If payload is complete, this is the unconsumed bytes intended for the
                    next message/payload, b"" otherwise.
        r†   r   NFr‡   rˆ   r8   z"Unexpected LF in chunk-extension: Úasciir…   é   rØ   r   z)Bad chunk-size line ending, expected CRLFz3Chunk size mismatch: expected CRLF after chunk dataz&Bad trailer line ending, expected CRLFzToo many trailers receivedr�   T)4rA  rg   rj   rD  r?  ÚmaxrŒ   rç   ræ   rH  r@  rb   rf   rÏ   rd   rk   rB  rm   rp   rE  rs   rF  r(   ro   rà   r)   r    r|   r”   Úrer‘   r>   r�   r`   r¦   r%  rC  Úbegin_http_chunk_receivingre   rq   Úend_http_chunk_receivingrá   rI  r“   rG  r!   rÃ   r¤   râ   rl   rJ  rÐ   )r}   rP  rÓ   rQ  Úrequiredrë   rì   ÚiÚsize_bÚextÚexcÚsizerš   ÚtrailersÚraw_trailersr\   r\   r]   ræ   ¤  s2  
ÿ
û

þÿ



ÿûÿ
€
ÿ

ÿ


(ÿ



ÿ



ÿ

 �
ÿ€ 
ü


zHttpPayloadParser.feed_data)NFNNNTTFr  )r7   rO  )rV   rW   rX   r   r.   r`   r[   rY   r1   r~   rÌ   rÏ   r¦   r  r˜   rb   ræ   r\   r\   r\   r]   rä   M  sr    öðþýüûúùø	÷
öôóòñð
ï
=
ÿÿÿÿ
þrä   c                	   @   sŠ   e Zd ZU dZeed< efdededB de	ddfdd	„Z
efd
ededdfdd„Zdede	defdd„Zddd„Zddd„Zddd„ZdS )rK  zDDeflateStream decompress stream and feed data into specified stream.ÚdecompressorÚoutr  Nr>  rz   c                 C   sv   || _ d| _| j|_|| _d| _|  |dkr!tstdƒ‚tƒ | _n|dkr0t	s+tdƒ‚t
ƒ | _nt|d�| _|| _d S )Nr   Frü   zECan not decode content-encoding: brotli (br). Please install `Brotli`rþ   zRCan not decode content-encoding: zstandard (zstd). Please install `backports.zstd`)r  )ra  r]  Útotal_compressed_bytesr  Ú_started_decodingr   r$   r   r`  r   r   r   Ú_max_decompress_size)r}   ra  r  r>  r\   r\   r]   r~   n  s(   ÿ
ÿ

zDeflateBuffer.__init__r\  Ú	exc_causec                 C   s   t | j||ƒ d S r{   )r    ra  )r}   r\  re  r\   r\   r]   r    Ž  s   zDeflateBuffer.set_exceptionrP  r]  c                 C   sÄ   |  j |7  _ | j | j_| js)|r)| jdkr&|d d@ dkr&t| jdd�| _d| _| jj}|tj	kr4dnt
| j|ƒ}z
| jj||d�}W n tyR   td| j ƒ‚w |r^| j |t|ƒ¡ | jjS )	Nrÿ   r   é   é   T)r  Úsuppress_deflate_header)Ú
max_lengthz#Can not decode content-encoding: %s)r]  ra  rb  rc  r  r   r`  Ú
_low_waterÚsysÚmaxsizerT  rd  Údecompress_syncrÑ   r$   ræ   rŒ   Údata_available)r}   rP  r]  Ú	low_waterri  r\   r\   r]   ræ   •  s*   

ÿÿÿÿzDeflateBuffer.feed_datac                 C   sD   | j  ¡ }|r	J ‚| jdkr| jdkr| j jstdƒ‚| j ¡  d S )Nr   rÿ   )r`  Úflushr]  r  Úeofr$   ra  rÏ   )r}   rP  r\   r\   r]   rÏ   ·  s   

zDeflateBuffer.feed_eofc                 C   ó   | j  ¡  d S r{   )ra  rV  rÍ   r\   r\   r]   rV  Ä  ó   z(DeflateBuffer.begin_http_chunk_receivingc                 C   rr  r{   )ra  rW  rÍ   r\   r\   r]   rW  Ç  rs  z&DeflateBuffer.end_http_chunk_receivingr  )rV   rW   rX   r2  r   rZ   r   r.   rY   r`   r~   r   r  r    r¦   r[   ræ   rÏ   rV  rW  r\   r\   r\   r]   rK  i  s2   
 üþýü
û#ýþý
ü
"
rK  )r3   r4   r5   r6   )mr  r  rU  Ústringrk  Ú
contextlibr   Úenumr   r   Útypingr   r   r   r   r	   r
   r   r   Ú	multidictr   r   r   Úyarlr   r§   r   Úbase_protocolr   Úcompression_utilsr   r   r   r   r   Úhelpersr   r   r   r   r   r   r   r    Úhttp_exceptionsr!   r"   r#   r$   r%   r&   r'   r(   r)   Úhttp_writerr*   r+   r,   Ústreamsr-   r.   Útypedefsr/   Úclient_protor0   Ú__all__r  ÚsetÚ	printabler9   rY   rZ   Úescaper:   Úcompiler;   ÚASCIIr<   r=   r>   r¦   r?   Ú	frozensetrJ   r5   r6   ra   rb   rg   rm   r1   r[   r®   ÚABCr2   r3   r4   rä   rK  ÚHttpRequestParserPyÚHttpResponseParserPyÚRawRequestMessagePyÚRawResponseMessagePyÚ_http_parserÚHttpRequestParserCÚHttpResponseParserCÚRawRequestMessageCÚRawResponseMessageCÚImportErrorr\   r\   r\   r]   Ú<module>   sˆ   
 ((,
		"ÿ	ÿ\   eV  b
õÿ