a
    &h~                     @   s.  d dl Z d dlZ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mZmZmZ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 m!Z! ddl"m#Z#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/ ddl0m1Z1 ddl2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9 ddl:m;Z; dZ<erNddl=m>Z> G dd de?Z@G dd de?ZAeeB eeeB eeBeBf f dddZCd(eeBeBf eBeeB dddZDG dd dZEG dd dZFe9eFe5jGdG d d! d!e6ZHG d"d# d#ZIee6eBeBf ZJG d$d% d%e6ZKG d&d' d'ZLdS ))    N)deque)TracebackType)TYPE_CHECKINGAnyAsyncIteratorDequeDictIteratorListMappingOptionalSequenceTupleTypeUnioncast)	parse_qslunquote	urlencode)CIMultiDictCIMultiDictProxyMultiMapping   )ZLibCompressorZLibDecompressor)CONTENT_DISPOSITIONCONTENT_ENCODINGCONTENT_LENGTHCONTENT_TRANSFER_ENCODINGCONTENT_TYPE)CHARTOKENparse_mimetypereify)HeadersParser)JsonPayloadLookupErrorOrderPayloadStringPayloadget_payloadpayload_type)StreamReader)MultipartReaderMultipartWriterBodyPartReaderBadContentDispositionHeaderBadContentDispositionParamparse_content_dispositioncontent_disposition_filename)ClientResponsec                   @   s   e Zd ZdS )r0   N__name__
__module____qualname__ r9   r9   V/var/www/html/swiplay.fr/scambot/venv/lib/python3.9/site-packages/aiohttp/multipart.pyr0   B   s   r0   c                   @   s   e Zd ZdS )r1   Nr5   r9   r9   r9   r:   r1   F   s   r1   )headerreturnc                    s  t tddd t tddd}t td fdd}t tddd	}t tdd
d}dttjtdt t t ddd}| sd i fS | d^}} |st	t
|  d i fS i }|r|d}	d|	vrt	t
|  d i fS |	dd\}
}|
  }
| }|
|v r(t	t
|  d i fS  |
sFt	t|	 qn\||
r||rl||dd }n |st	t|	 qn||
r||r|dd\}}}|pd}nt	t|	 qzt||d}W n& ty   t	t|	 Y qY n0 nd}||r0d}||dd d}nV |r@d}nF|r| d|d  }||r|d ||dd d}d}|rt	t
|  d i fS |||
< q| |fS )N)stringr<   c                 S   s   t | ott| kS N)boolr!   setr=   r9   r9   r:   is_tokenM   s    z+parse_content_disposition.<locals>.is_tokenc                 S   s    | d | d   kodkS   S )Nr   "r9   rA   r9   r9   r:   	is_quotedP   s    z,parse_content_disposition.<locals>.is_quotedc                    s    | o|  ddkS )N'   )countrA   rB   r9   r:   
is_rfc5987S   s    z-parse_content_disposition.<locals>.is_rfc5987c                 S   s
   |  dS )N*)endswithrA   r9   r9   r:   is_extended_paramV   s    z4parse_content_disposition.<locals>.is_extended_paramc                 S   s@   |  dd }|sdS | dr,| |d n
| |d  }| S )NrK   r   FrC   )findrL   isdigit)r=   posZ	substringr9   r9   r:   is_continuous_paramY   s
    "z6parse_content_disposition.<locals>.is_continuous_param )chars)textrS   r<   c                S   s   t d| dd| S )Nz\\([z])z\1)resub)rT   rS   r9   r9   r:   unescape`   s    z+parse_content_disposition.<locals>.unescape;r   =r   rC   rF   rG   utf-8strictTFz\/)strr?   joinmaprU   escaper    splitwarningswarnr0   poplowerstriplstripr1   r   UnicodeDecodeError)r;   rE   rJ   rM   rQ   rW   disptypepartsparamsitemkeyvalueencoding_Zfailed_valuer9   rI   r:   r2   J   sz    &












r2   filename)rj   namer<   c           
         s   d|  | sd S  | v r |   S || v r0| | S g }t  fdd|  D }t|D ]N\}\}}|dd\}}|dr|d d }|t|kr|| qV qqV|sd S d|}d|v r|dd	\}	}}|	pd
}	t||	dS |S d S )Nz%s*c                 3   s$   | ]\}}|  r||fV  qd S r>   )
startswith).0rl   rm   Zname_sufr9   r:   	<genexpr>   s   z/content_disposition_filename.<locals>.<genexpr>rK   r   rC   rR   rF   rG   rZ   r[   )	sorteditems	enumerater`   rL   r\   appendr]   r   )
rj   rr   ri   Zfnparamsnumrl   rm   ro   tailrn   r9   ru   r:   r3      s4    

r3   c                   @   st   e Zd ZdZddddddZd dd	d
Zed dddZedddZ	e
ed  dddZddddZdS )MultipartResponseWrapperzzWrapper around the MultipartReader.

    It takes care about
    underlying connection and close it when it needs in.
    r4   r-   N)respstreamr<   c                 C   s   || _ || _d S r>   )r~   r   )selfr~   r   r9   r9   r:   __init__   s    z!MultipartResponseWrapper.__init__r<   c                 C   s   | S r>   r9   r   r9   r9   r:   	__aiter__   s    z"MultipartResponseWrapper.__aiter__)r-   r/   c                    s   |   I d H }|d u rt|S r>   nextStopAsyncIterationr   partr9   r9   r:   	__anext__   s    z"MultipartResponseWrapper.__anext__c                 C   s   | j j S )z2Returns True when all response data had been read.)r~   contentat_eofr   r9   r9   r:   r      s    zMultipartResponseWrapper.at_eofc                    s,   | j  I dH }| j  r(|  I dH  |S )z#Emits next multipart reader object.N)r   r   r   releaser   rk   r9   r9   r:   r      s    
zMultipartResponseWrapper.nextc                    s   | j  I dH  dS )z_Release the connection gracefully.

        All remaining content is read to the void.
        N)r~   r   r   r9   r9   r:   r      s    z MultipartResponseWrapper.release)r6   r7   r8   __doc__r   r   r   r   r?   r   r   r   r   r9   r9   r9   r:   r}      s   
	r}   c                   @   s  e Zd ZdZdZededdddZed  dd	d
Z	edddZ
ee dddZddeedddZefeedddZeedddZeedddZedddZddddZddee ed d!d"Zddee eeeef  d d#d$Zddee eeeef  d d%d&Zedd'd(Zeed)d*d+Zeed)d,d-Zeed)d.d/Z eed0d1d2Z!e"ee dd3d4Z#e"ee dd5d6Z$dS )7r/   z&Multipart reader for single body part.i    CIMultiDictProxy[str]N)boundaryheadersr   r<   c                 C   s`   || _ || _|| _d| _| j td }|d ur6t|nd | _d| _t	 | _
d | _d| _i | _d S )NFr   )r   	_boundary_content_at_eofgetr   int_length_read_bytesr   _unread_prev_chunk_content_eof_cache)r   r   r   r   lengthr9   r9   r:   r     s    zBodyPartReader.__init__r   c                 C   s   | S r>   r9   r   r9   r9   r:   r     s    zBodyPartReader.__aiter__c                    s   |   I d H }|d u rt|S r>   r   r   r9   r9   r:   r     s    zBodyPartReader.__anext__c                    s   |   I d H }|sd S |S r>   )readr   r9   r9   r:   r     s    zBodyPartReader.nextFdecode)r   r<   c                   sB   | j r
dS t }| j s0|| | jI dH  q|r>| |S |S )zReads body part data.

        decode: Decodes data following by encoding
                method from Content-Encoding header. If it missed
                data remains untouched
            N)r   	bytearrayextend
read_chunk
chunk_sizer   )r   r   datar9   r9   r:   r      s    
zBodyPartReader.read)sizer<   c                    s   | j r
dS | jr"| |I dH }n| |I dH }|  jt|7  _| j| jkrVd| _ | j r|| j I dH }d|ks|J d|S )zWReads body part content chunk of the specified size.

        size: chunk size
        r   NT   
z3reader did not read all the data or it is malformed)r   r   _read_chunk_from_length_read_chunk_from_streamr   lenr   readline)r   r   chunkZclrfr9   r9   r:   r   0  s    zBodyPartReader.read_chunkc                    s:   | j d usJ dt|| j | j }| j|I d H }|S )Nz(Content-Length required for chunked read)r   minr   r   r   )r   r   r   r   r9   r9   r:   r   F  s    z&BodyPartReader._read_chunk_from_lengthc                    sh  |t | jd ksJ d| jd u }|r<| j|I d H | _| j|I d H }|  jt| j 7  _| jdk sxJ d| jd usJ | j| }d| j }|r||}n ||t	dt | jt | }|dkrXt
 2 t
jdtd | j||d   W d    n1 s0    Y  ||kr:| jd | | _|t | j| }|sXd	| _| j}|| _|S )
NrG   z<Chunk size must be greater or equal than boundary length + 2   zReading after EOFr   r   ignore)categoryT)r   r   r   r   r   r   r   r   rN   maxra   catch_warningsfilterwarningsDeprecationWarningunread_datar   )r   r   Zfirst_chunkr   ZwindowrV   idxresultr9   r9   r:   r   N  s8    


 

4
z&BodyPartReader._read_chunk_from_streamc                    s   | j r
dS | jr| j }n| j I dH }|| jrz|d}| j}| jd }||ksb||krd| _ | j| dS n4| j I dH }|| jr|dd }| j| |S )z Reads body part by line by line.r   Nr      --T)	r   r   popleftr   r   rs   r   rstriprz   )r   linesliner   Zlast_boundary	next_liner9   r9   r:   r   p  s$    

zBodyPartReader.readlinec                    s(   | j r
dS | j s$| | jI dH  q
dS )z0Like read(), but reads all the data to the void.N)r   r   r   r   r9   r9   r:   r     s    zBodyPartReader.release)rn   rn   r<   c                   s,   | j ddI dH }|p | jdd}||S )z;Like read(), but assumes that body part contains text data.Tr   NrZ   default)r   get_charsetr   r   rn   r   r9   r9   r:   rT     s    zBodyPartReader.textc                   sH   | j ddI dH }|sdS |p(| jdd}ttttf t||S )z<Like read(), but assumes that body parts contains JSON data.Tr   NrZ   r   )	r   r   r   r   r\   r   jsonloadsr   r   r9   r9   r:   r     s
    zBodyPartReader.jsonc                   st   | j ddI dH }|sg S |dur(|}n| jdd}z| |}W n tyd   td| Y n0 t|d|dS )zFLike read(), but assumes that body parts contain form urlencoded data.Tr   NrZ   r   z'data cannot be decoded with %s encoding)keep_blank_valuesrn   )r   r   r   r   rg   
ValueErrorr   )r   rn   r   real_encodingZdecoded_datar9   r9   r:   form  s    zBodyPartReader.formc                 C   s   | j S )z<Returns True if the boundary was reached or False otherwise.r   r   r9   r9   r:   r     s    zBodyPartReader.at_eof)r   r<   c                 C   s,   t | jv r| |}t| jv r(| |S |S )zDecodes data.

        Decoding is done according the specified Content-Encoding
        or Content-Transfer-Encoding headers value.
        )r   r   _decode_content_transferr   _decode_content)r   r   r9   r9   r:   r     s
    



zBodyPartReader.decodec                 C   sJ   | j td }|dkr|S |dv r8t|dd|S td| d S )NrR   identity>   deflategzipT)rn   suppress_deflate_headerunknown content encoding: )r   r   r   rd   r   decompress_syncRuntimeErrorr   r   rn   r9   r9   r:   r     s    zBodyPartReader._decode_contentc                 C   sT   | j td }|dkr$t|S |dkr6t|S |dv rB|S td	|d S )NrR   base64quoted-printable)binary8bit7bit%unknown content transfer encoding: {})
r   r   r   rd   r   	b64decodebinasciia2b_qpr   formatr   r9   r9   r:   r     s    

z'BodyPartReader._decode_content_transfer)r   r<   c                 C   s$   | j td}t|}|jd|S )z>Returns charset parameter from Content-Type header or default.rR   charset)r   r   r   r"   
parameters)r   r   ctypemimetyper9   r9   r:   r     s    zBodyPartReader.get_charsetc                 C   s   t | jt\}}t|dS )z|Returns name specified in Content-Disposition header.

        If the header is missing or malformed, returns None.
        rr   r2   r   r   r   r3   r   ro   rj   r9   r9   r:   rr     s    zBodyPartReader.namec                 C   s   t | jt\}}t|dS )zReturns filename specified in Content-Disposition header.

        Returns None if the header is missing or malformed.
        rq   r   r   r9   r9   r:   rq     s    zBodyPartReader.filename)%r6   r7   r8   r   r   bytesr,   r   r   r   r   r   r   r?   r   r   r   r   r   r   r   r\   rT   r   r   r   r
   r   r   r   r   r   r   r   r#   rr   rq   r9   r9   r9   r:   r/      s4   "&&r/   )orderc                       s8   e Zd Zeeedd fddZeddddZ  ZS )BodyPartReaderPayloadN)rm   argskwargsr<   c                    s^   t  j|g|R i | i }|jd ur2|j|d< |jd urF|j|d< |rZ| jdi | d S )Nrr   rq   
attachmentT)r   T)superr   rr   rq   set_content_disposition)r   rm   r   r   rj   	__class__r9   r:   r     s    



zBodyPartReaderPayload.__init__writerr<   c                    sJ   | j }|jddI d H }|rF|||I d H  |jddI d H }qd S )Ni   )r   )rp   r   writer   )r   r   fieldr   r9   r9   r:   r   	  s
    zBodyPartReaderPayload.write)r6   r7   r8   r/   r   r   r   __classcell__r9   r9   r   r:   r     s   r   c                   @   s.  e Zd ZdZeZdZeZe	e
e
f eddddZed ddd	Zeed ef  dd
dZededddZedddZeed ef  dddZddddZed ef dddZded ef dddZe
dddZedddZddd d!Zddd"d#Zddd$d%Zddd&d'Z dS )(r-   zMultipart body reader.N)r   r   r<   c                 C   s:   || _ d|    | _|| _d | _d| _d| _g | _d S )Nz--FT)	r   _get_boundaryencoder   r   
_last_partr   _at_bofr   )r   r   r   r9   r9   r:   r     s    zMultipartReader.__init__r/   r   c                 C   s   | S r>   r9   r   r9   r9   r:   r   %  s    zMultipartReader.__aiter__c                    s   |   I d H }|d u rt|S r>   r   r   r9   r9   r:   r   *  s    zMultipartReader.__anext__r4   )responser<   c                 C   s   |  || |j|j}|S )zConstructs reader instance from HTTP response.

        :param response: :class:`~aiohttp.client.ClientResponse` instance
        )response_wrapper_clsr   r   )clsr   objr9   r9   r:   from_response2  s    	zMultipartReader.from_responsec                 C   s   | j S )z@Returns True if the final boundary was reached, false otherwise.r   r   r9   r9   r:   r   @  s    zMultipartReader.at_eofc                    sb   | j r
dS |  I dH  | jr4|  I dH  d| _n|  I dH  | j rLdS |  I dH | _| jS )z#Emits the next multipart body part.NF)r   _maybe_release_last_partr   _read_until_first_boundary_read_boundaryfetch_next_partr   r   r9   r9   r:   r   D  s    zMultipartReader.nextc                    s2   | j s.|  I dH }|du rq.| I dH  q dS )z=Reads all the body parts to the void till the final boundary.N)r   r   r   r   r9   r9   r:   r   V  s
    zMultipartReader.releasec                    s   |   I dH }| |S )z"Returns the next body part reader.N)_read_headers_get_part_reader)r   r   r9   r9   r:   r  ^  s    zMultipartReader.fetch_next_partr   )r   r<   c                 C   s\   | td}t|}|jdkrF| jdu r8t| || jS | || jS | | j|| jS dS )zDispatches the response by the `Content-Type` header.

        Returns a suitable reader instance.

        :param dict headers: Response headers
        rR   	multipartN)r   r   r"   typemultipart_reader_clsr   part_reader_clsr   )r   r   r   r   r9   r9   r:   r  e  s    


z MultipartReader._get_part_readerc                 C   sb   t | jt }|jdks J dd|jvr<td| jt  |jd }t|dkr^td| |S )Nr  z!multipart/* content type expectedr   z$boundary missed for Content-Type: %sF   z&boundary %r is too long (70 chars max))r"   r   r   r  r   r   r   )r   r   r   r9   r9   r:   r   y  s    

zMultipartReader._get_boundaryc                    s    | j r| j  S | j I d H S r>   )r   rc   r   r   r   r9   r9   r:   	_readline  s    
zMultipartReader._readlinec                    sX   |   I d H }|dkr$td| j | }|| jkr:d S || jd kr d| _d S q d S )Nr   z#Could not find starting boundary %rr   T)r
  r   r   r   r   r   r   r9   r9   r:   r     s    
z*MultipartReader._read_until_first_boundaryc                    s   |   I d H  }|| jkrnv|| jd kr~d| _|   I d H }|   I d H }|d d dkrl| j| q| j||g ntd|d| jd S )Nr   TrG   zInvalid boundary z, expected )r
  r   r   r   r   rz   r   r   )r   r   epiloguer   r9   r9   r:   r    s    
zMultipartReader._read_boundaryc                    sH   dg}| j  I d H }| }|| |sq0qt }||\}}|S )Nr   )r   r   re   rz   r$   parse_headers)r   linesr   parserr   raw_headersr9   r9   r:   r    s    
zMultipartReader._read_headersc                    s>   | j dur:| j  s$| j  I dH  | j| j j d| _ dS )z8Ensures that the last read body part is read completely.N)r   r   r   r   r   r   r9   r9   r:   r     s
    

z(MultipartReader._maybe_release_last_part)!r6   r7   r8   r   r}   r   r  r/   r  r   r\   r,   r   r   r   r   r   r   classmethodr   r?   r   r   r   r  r  r   r   r
  r   r  r  r   r9   r9   r9   r:   r-     s8   

	
r-   c                       sr  e Zd ZdZd)eee dd fddZd ddd	Zeee	  ee	 ee
 dd
ddZee dddZedddZedddZedZedZeedddZeedddZd*eeee  edddZeedddZd+eeee  eddd Zd,e e!e"eef  e#eef f eee  edd!d"Z$eee dd#d$Z%d-eedd&d'd(Z&  Z'S ).r.   zMultipart body writer.mixedN)subtyper   r<   c                    sp   |d ur|nt  j}z|d| _W n tyB   tdd Y n0 d| d| j }t j	d |d g | _
d S )Nasciiz(boundary should contain ASCII only charsz
multipart/z; boundary=)content_type)uuidZuuid4hexr   r   UnicodeEncodeErrorr   _boundary_valuer   r   _parts)r   r  r   r   r   r9   r:   r     s    zMultipartWriter.__init__r   c                 C   s   | S r>   r9   r   r9   r9   r:   	__enter__  s    zMultipartWriter.__enter__)exc_typeexc_valexc_tbr<   c                 C   s   d S r>   r9   )r   r  r  r  r9   r9   r:   __exit__  s    zMultipartWriter.__exit__c                 C   s
   t | jS r>   )iterr  r   r9   r9   r:   __iter__  s    zMultipartWriter.__iter__c                 C   s
   t | jS r>   )r   r  r   r9   r9   r:   __len__  s    zMultipartWriter.__len__c                 C   s   dS )NTr9   r   r9   r9   r:   __bool__  s    zMultipartWriter.__bool__s   \A[!#$%&'*+\-.^_`|~\w]+\Zs   [\x00-\x08\x0A-\x1F\x7F]c                 C   s^   | j }t| j|r|dS t| j|r4td|dd}|dd}d|d d S )zzWrap boundary parameter value in quotes, if necessary.

        Reads self.boundary and returns a unicode string.
        r  z*boundary value contains invalid characters   \s   \\   "s   \"rD   )	r   rU   match_valid_tchar_regexr   search_invalid_qdtext_char_regexr   replace)r   rm   Zquoted_value_contentr9   r9   r:   r    s    
zMultipartWriter._boundary_valuec                 C   s   | j dS )Nr  )r   r   r   r9   r9   r:   r     s    zMultipartWriter.boundary)r   r   r<   c                 C   sl   |d u rt  }t|tr.|j| | |S zt||d}W n ty\   td| Y n0 | |S d S )Nr   zCannot create payload from %r)	r   
isinstancer(   r   updateappend_payloadr*   r&   	TypeError)r   r   r   payloadr9   r9   r:   rz     s    

zMultipartWriter.append)r0  r<   c                 C   s   |j td }|r,|dvr,td| |dkr8d}|j td }|dvr`td||dkrld}|j}|dur|s|st||j t	< | j
|||f |S )	z)Adds a new body part to multipart writer.rR   )r   r   r   r   r   N)rR   r   r   r   r   r   )r   r   r   rd   r   r   r   r   r\   r   r  rz   )r   r0  rn   te_encodingr   r9   r9   r:   r.  )  s.    zMultipartWriter.append_payloadc                 C   s    |du rt  }| t||dS )zHelper to append JSON part.Nr+  )r   r.  r%   )r   r   r   r9   r9   r:   append_jsonI  s    zMultipartWriter.append_jsonc                 C   sV   t |ttfsJ |du r t }t |tr6t| }t|dd}| t||ddS )z&Helper to append form urlencoded part.NT)doseqz!application/x-www-form-urlencoded)r   r  )	r,  r   r   r   listrx   r   r.  r)   )r   r   r   r   r9   r9   r:   append_formR  s    
zMultipartWriter.append_formc                 C   sv   d}| j D ]P\}}}|s&|s&|jdu r, dS |tdt| j d |j t|j d 7 }q
|dt| j d 7 }|S )zSize of the payload.r   NrG      )r  r   r   r   r   _binary_headers)r   totalr   rn   r1  r9   r9   r:   r   g  s&    	zMultipartWriter.sizeT)r   close_boundaryr<   c                    s   | j D ]\}}}|d| j d I dH  ||jI dH  |sD|rt|}|rZ|| |rh|| ||I dH  | I dH  n||I dH  |dI dH  q|r|d| j d I dH  dS )zWrite body.r   r   Ns   --
)r  r   r   r7  MultipartPayloadWriterenable_compressionenable_encoding	write_eof)r   r   r9  r   rn   r1  wr9   r9   r:   r   {  s    

zMultipartWriter.write)r  N)N)N)N)T)(r6   r7   r8   r   r\   r   r   r  r   BaseExceptionr   r  r	   _Partr!  r   r"  r?   r#  rU   compiler'  r)  propertyr  r   r   r   r(   rz   r.  r2  r   r   r   r   r5  r   r   r   r9   r9   r   r:   r.     sB   


!  
r.   c                   @   sd   e Zd ZeddddZeddddZdejfee	dd	d
dZ
ddddZeddddZdS )r:  Nr   c                 C   s   || _ d | _d | _d | _d S r>   )_writer	_encoding	_compress_encoding_buffer)r   r   r9   r9   r:   r     s    zMultipartPayloadWriter.__init__r   c                 C   s*   |dkr|| _ t | _n|dkr&d| _ d S )Nr   r   )rD  r   rF  )r   rn   r9   r9   r:   r<    s
    
z&MultipartPayloadWriter.enable_encodingr   )rn   strategyr<   c                 C   s   t |d|d| _d S )NT)rn   r   rG  )r   rE  )r   rn   rG  r9   r9   r:   r;    s
    z)MultipartPayloadWriter.enable_compressionr   c                    s\   | j d ur.| j  }|r.d | _ | |I d H  | jdkrX| jrX| jt| jI d H  d S )Nr   )rE  flushr   rD  rF  rC  r   	b64encoder  r9   r9   r:   r=    s    


z MultipartPayloadWriter.write_eof)r   r<   c                    s   | j d ur(|r(| j |I d H }|s(d S | jdkr| j}|d usDJ || |rtt|d\}}|d |d  ||d d   }| _|rt|}| j	
|I d H  n6| jdkr| j	
t|I d H  n| j	
|I d H  d S )Nr   r   r   )rE  compressrD  rF  r   divmodr   r   rI  rC  r   r   b2a_qp)r   r   bufZdivmodZ	enc_chunkZb64chunkr9   r9   r:   r     s$    


$

zMultipartPayloadWriter.write)r6   r7   r8   r   r   r\   r<  zlibZ_DEFAULT_STRATEGYr   r;  r=  r   r   r9   r9   r9   r:   r:    s   	r:  )rq   )Mr   r   r   rU   r  ra   rO  collectionsr   typesr   typingr   r   r   r   r   r	   r
   r   r   r   r   r   r   r   urllib.parser   r   r   	multidictr   r   r   compression_utilsr   r   hdrsr   r   r   r   r   helpersr    r!   r"   r#   httpr$   r0  r%   r&   r'   r(   r)   r*   r+   streamsr,   __all__client_reqrepr4   RuntimeWarningr0   r1   r\   r2   r3   r}   r/   	try_firstr   r-   r@  r.   r:  r9   r9   r9   r:   <module>   sT   @$	d !/    8 H