
    bCi:q                        % S SK r S SKrS SKrS SKrS SKrS SKrS SKrS SKrS SKrS SK	J
r
  S SKJr  S SKJrJrJrJrJrJrJrJrJrJrJrJr  S SKJr  S SKrS SKJrJrJrJ r J!r!  S SK"J#r#  SS	K$J%r%  SS
K&J'r'  SSK(J)r)J*r*J+r+J,r,J-r-J.r.J/r/J0r0J1r1J2r2J3r3  SSK4J5r5  SSK6J7r7  SSK8J9r9J:r:  SSK;J<r<J=r=  SSK>J?r?J@r@JArAJBrBJCrC  SSKDJErE  SSKFJGrG  SrH\(       a  SSKIJJrJ  SSKKJLrL  SSKMJNrN  \R                  " SSSS9 " S S5      5       rP\R                  \R                  -   S-   rS\\T   \US'   S\S S3rV\\T   \US'   S R                  S!R                  S" S#\Y" \Z" S$S%5      5      -    5       5      5      r[\\T   \US&'   S'r\\\T   \US('   S)R                  \[\\S*9r]\\T   \US+'   S,R                  \V\]S-9r^\\T   \US.'   \R                  " S/5      r`\\\T      \US0'   \R                  " \^5      ra\\\T      \US1'    " S2 S3\\T\4   \/5      rb " S4 S5\b5      rcg)6    N)SimpleCookie)MappingProxyType)TYPE_CHECKINGAnyDictFinalIteratorMappingMutableMappingOptionalPatternTupleUnioncast)	parse_qsl)CIMultiDictCIMultiDictProxy	MultiDictMultiDictProxyMultiMapping)URL   )hdrs)AbstractStreamWriter)	_SENTINELDEBUGETAG_ANYLIST_QUOTED_ETAG_REChainMapProxyETagHeadersMixinparse_http_datereifysentinelset_exception)RawRequestMessage)HttpVersion)BodyPartReaderMultipartReader)EmptyStreamReaderStreamReader)DEFAULT_JSON_DECODERJSONDecoderLooseHeaders
RawHeadersStrOrURL)HTTPRequestEntityTooLarge)StreamResponse)BaseRequest	FileFieldRequest)Application)RequestHandler)UrlMappingMatchInfoT)auto_attribsfrozenslotsc                   \    \ rS rSr% \\S'   \\S'   \R                  \S'   \\S'   S\S'   Srg	)
r4   L   namefilenamefilecontent_typezCIMultiDictProxy[str]headers N)	__name__
__module____qualname____firstlineno__str__annotations__ioBufferedReader__static_attributes__rC       M/home/james-whalen/.local/lib/python3.13/site-packages/aiohttp/web_request.pyr4   r4   L   s$    
IM


$$rM   r4   z!#$%&'*+.^_`|~-_TCHAR[z]+_TOKENz[{}] c              #   8   #    U  H  n[        U5      v   M     g 7fN)chr).0cs     rN   	<genexpr>rX   [   s     KJSVVJs   )	       !   #      _QDTEXTz
\\[\t !-~]_QUOTED_PAIRz"(?:{quoted_pair}|{qdtext})*")qdtextquoted_pair_QUOTED_STRINGz0({token})=({token}|{quoted_string})(:\d{{1,4}})?)tokenquoted_string_FORWARDED_PAIRz\\([\t !-~])_QUOTED_PAIR_REPLACE_RE_FORWARDED_PAIR_REc                   $   \ rS rSr\R
                  \R                  \R                  \R                  \R                  1r
\R                  \" / SQ5      -  rSSSSSS.S\S\SS	S
\SSS\R$                  S\S\\\\4      S\\   S\\   S\\   SS4S jjr\\\\\\\S.S\\\4   S\\\4   S\\\4   S\\\4   S\\\4   S\\\4   S\\\4   SS 4S jjr\S]S j5       r \S^S j5       r!\S\\RD                     4S j5       r#\S\4S j5       r$\S\4S j5       r%\&S\4S j5       r'\&S\(4S  j5       r)\&S\R$                  4S! j5       r*S"\S\4S# jr+S"\S$\SS4S% jr,S"\SS4S& jr-S\4S' jr.S\/\   4S( jr0\&S\14S) j5       r2\&S\3\4\\4   S*4   4S+ j5       r5\&S\4S, j5       r6\&S\4S- j5       r7\&S\84S. j5       r9\&S\4S/ j5       r:\&S\\   4S0 j5       r;\&S\(4S1 j5       r<\&S\4S2 j5       r=\&S\4S3 j5       r>\&S\4S4 j5       r?\&S_S5 j5       r@\&S\4S6 j5       rA\&S_S7 j5       rB\&S\C4S8 j5       rD\&S\\ER                     4S9 j5       rF\&S\\ER                     4S: j5       rG\HS;\S\/\I   4S< j5       rJ\KS=\\   S\\3\IS*4      4S> j5       rL\&S\\3\IS*4      4S? j5       rM\&S\\3\IS*4      4S@ j5       rN\&S\\ER                     4SA j5       rO\&S\14SB j5       rP\&S\4\\4   4SC j5       rQ\&S\R4SD j5       rS\&S\4SE j5       rT\S\14SF j5       rU\S\14SG j5       rV\&S\14SH j5       rWS`SI jrXS\Y4SJ jrZS\4SK jr[\\SL.SM\]S\4SN jjr^S\_4SO jr`SaSP jraSbSQ\SR\S\4SS jjrbS\4ST jrcSU\dS\14SV jreS\14SW jrfSX\gSS4SY jrhSZ\iSS4S[ jrjS\rkg)cr3   v   )_message	_protocol_payload_writer_payload_headers_method_version_rel_url_post_read_bytes_state_cache_task_client_max_size_loop_transport_sslcontext_transport_peernamei   N)client_max_sizestateschemehostremotemessagepayloadprotocolr7   payload_writertaskasyncio.Task[None]loopr{   r|   r}   r~   r   returnc                   Uc  0 nXl         X0l        X@l        X l        UR                  U l        UR                  U l        UR                  U l	        0 U l
        UR                  nUR                  5       (       aV  XR                  S'   UR                  U R                  S'   UR                  U R                  S'   UR                  5       U l        OUR                  U l        S U l        S U l        Xl        XPl        Xpl        X`l        U R                  R.                  nUc   eUR1                  S5      U l        UR1                  S5      U l        U	b  XR                  S'   U
b  XR                  S'   Ub  XR                  S'   g g )Nurlr~   r}   
sslcontextpeernamer   )rj   rk   rl   rm   rB   rn   methodro   versionrp   ru   r   is_absoluter~   r}   relativerq   rr   rs   rt   rv   rw   rx   	transportget_extra_infory   rz   )selfr   r   r   r   r   r   r{   r|   r}   r~   r   r   r   s                 rN   __init__BaseRequest.__init__   sK    =E!-~~&(kk?? "%KK"%((DKK$'JJDKK!LLNDM#KKDMMQ
,0
 /
NN,,	$$$%.%=%=l%K"#,#;#;J#G $*KK!"&KK$*KK! rM   r   rel_urlrB   r}   r~   r   r{   r   r   rB   c                   U R                   (       a  [        S5      e0 nU[        La  XS'   U[        La  [        U5      n	XS'   [	        U	5      US'   U[        La:  [        [        U5      5      US'   [        S UR                  5        5       5      US'   U R                  R                  " S0 UD6n
0 nU[        La  XKS'   U[        La  X[S	'   U[        La  XkS
'   U[        L a  U R                  nU R                  " U
U R                  U R                  U R                  U R                   U R"                  4UU R$                  R'                  5       S.UD6$ )zClone itself with replacement some attributes.

Creates and returns a new instance of Request object. If no parameters
are given, an exact copy is returned. If a parameter is not passed, it
will reuse the one from the current request object.
z.Cannot clone request after reading its contentr   r   pathrB   c              3   j   #    U  H)  u  pUR                  S 5      UR                  S 5      4v   M+     g7f)utf-8N)encode)rV   kvs      rN   rX   $BaseRequest.clone.<locals>.<genexpr>   s,      'CR41'"AHHW$56?s   13raw_headersr}   r~   r   )r{   r|   rC   )rs   RuntimeErrorr$   r   rH   r   r   tupleitemsrj   _replacerw   	__class__rm   rk   rl   rv   rx   rt   copy)r   r   r   rB   r}   r~   r   r{   dctnew_urlr   kwargss               rN   cloneBaseRequest.clone   sL   " RSS !"M("w<G Jg,CK("-k'.BCC	N!& 'CJ==?' "C --((/3/!%8x!6N!%8h&"33O~~MMNN  JJJJ

 ,++""$

 

 
	
rM   c                     U R                   $ rT   )rv   r   s    rN   r   BaseRequest.task	  s    zzrM   c                     U R                   $ rT   )rk   r   s    rN   r   BaseRequest.protocol  s    ~~rM   c                 J    U R                   c  g U R                   R                  $ rT   )rk   r   r   s    rN   r   BaseRequest.transport  s    >>!~~'''rM   c                     U R                   $ rT   )rl   r   s    rN   writerBaseRequest.writer  s    ###rM   c                     U R                   $ rT   )rw   r   s    rN   r{   BaseRequest.client_max_size  s    $$$rM   c                 N    [         R                  " S[        SS9  U R                  $ )NzRequest.message is deprecated   
stacklevel)warningswarnDeprecationWarningrj   r   s    rN   r   BaseRequest.message  s    57IVWX}}rM   c                     U R                   $ rT   )rq   r   s    rN   r   BaseRequest.rel_url$  s    }}rM   c                 N    [         R                  " S[        SS9  U R                  $ )Nz#request.loop property is deprecated   r   )r   r   r   rx   r   s    rN   r   BaseRequest.loop(  s#    13ERS	
 zzrM   keyc                      U R                   U   $ rT   rt   r   r   s     rN   __getitem__BaseRequest.__getitem__1  s    {{3rM   valuec                      X R                   U'   g rT   r   )r   r   r   s      rN   __setitem__BaseRequest.__setitem__4  s     CrM   c                     U R                   U	 g rT   r   r   s     rN   __delitem__BaseRequest.__delitem__7  s    KKrM   c                 ,    [        U R                  5      $ rT   )lenrt   r   s    rN   __len__BaseRequest.__len__:  s    4;;rM   c                 ,    [        U R                  5      $ rT   )iterrt   r   s    rN   __iter__BaseRequest.__iter__=  s    DKK  rM   c                      U R                   S:H  $ )z5A bool indicating if the request is handled with SSL.https)r}   r   s    rN   secureBaseRequest.secureB  s     {{g%%rM   .c                 f   / nU R                   R                  R                  [        R                  S5       GHl  n[        U5      nSnSn0 nUR                  [        R                  " U5      5        SUs=::  a  U:  d  MI  O  MM  [        R                  X$5      nUb  U(       a  UR                  SU5      nOUR                  5       u  pn
U	S   S:X  a  [        R                  SU	SS 5      n	U
(       a  X-  n	XUR                  5       '   U[        UR!                  S5      5      -  nS	nOgX$   S:X  a/  Sn0 nUR                  [        R                  " U5      5        US-  nO0X$   S
:X  a  SnUS-  nO X$   S;   a  US-  nOUR                  SU5      nSUs=::  a  U:  a  GM  GMk    GMo     [#        U5      $ )a(  A tuple containing all parsed Forwarded header(s).

Makes an effort to parse Forwarded headers as specified by RFC 7239:

- It adds one (immutable) dictionary per Forwarded 'field-value', ie
  per proxy. The element corresponds to the data in the Forwarded
  field-value added by the first proxy encountered by the client. Each
  subsequent item corresponds to those added by later proxies.
- It checks that every value has valid syntax in general as specified
  in section 4: either a 'token' or a 'quoted-string'.
- It un-escapes found escape sequences.
- It does NOT validate 'by' and 'for' contents as specified in section
  6.
- It does NOT validate 'host' contents (Host ABNF).
- It does NOT validate 'proto' contents for valid URI scheme names.

Returns a tuple containing one or more immutable dicts
rC   r   F,"z\1r   T;z 	)rj   rB   getallr   	FORWARDEDr   appendtypesr   rg   matchfindgroupsrf   sublowergroupr   )r   elemsfield_valuelengthposneed_separatorelemr   r>   r   ports              rN   	forwardedBaseRequest.forwardedG  s   ( ==0077KK%FC"N#%DLL//56s#V##*00B$%)..sC8,1LLN)T 8s?$;$?$?uQr{$SE!ME-2TZZ\*s5;;q>22)- %,%*NDLL!7!7!=>1HC %,%*N1HC %. 1HC &**34C? s#V## LL U|rM   c                 (    U R                   (       a  gg)zA string representing the scheme of the request.

Hostname is resolved in this order:

- overridden value by .clone(scheme=new_scheme) call.
- type of connection to peer: HTTPS if socket is SSL, HTTP otherwise.

'http' or 'https'.
r   http)ry   r   s    rN   r}   BaseRequest.scheme  s     %%rM   c                     U R                   $ )ziRead only property for getting HTTP method.

The value is upper-cased str like 'GET', 'POST', 'PUT' etc.
)ro   r   s    rN   r   BaseRequest.method  s     ||rM   c                     U R                   $ )zhRead only property for getting HTTP version of request.

Returns aiohttp.protocol.HttpVersion instance.
)rp   r   s    rN   r   BaseRequest.version  s     }}rM   c                     U R                   R                  R                  [        R                  5      nUb  U$ [
        R                  " 5       $ )zHostname of the request.

Hostname is resolved in this order:

- overridden value by .clone(host=new_host) call.
- HOST HTTP header
- socket.getfqdn() value
)rj   rB   getr   HOSTsocketgetfqdn)r   r~   s     rN   r~   BaseRequest.host  s:     }}$$((3K~~rM   c                     U R                   c  g[        U R                   [        [        45      (       a  [	        U R                   S   5      $ [	        U R                   5      $ )zRemote IP of client initiated HTTP request.

The IP is resolved in this order:

- overridden value by .clone(remote=new_remote) call.
- peername of opened socket
Nr   )rz   
isinstancelistr   rH   r   s    rN   r   BaseRequest.remote  sQ     ##+d..u>>t//2334++,,rM   c                     [         R                  " U R                  U R                  S9nUR	                  U R
                  5      $ )N)r}   r~   )r   buildr}   r~   joinrq   )r   r   s     rN   r   BaseRequest.url  s-    iit{{;xx&&rM   c                 .    U R                   R                  $ )zOThe URL including *PATH INFO* without the host or scheme.

E.g., ``/app/blog``
)rq   r   r   s    rN   r   BaseRequest.path  s     }}!!!rM   c                 ,    [        U R                  5      $ )zHThe URL including PATH_INFO and the query string.

E.g, /app/blog?id=10
)rH   rq   r   s    rN   path_qsBaseRequest.path_qs  s     4==!!rM   c                 .    U R                   R                  $ )zThe URL including raw *PATH INFO* without the host or scheme.

Warning, the path is unquoted and may contains non valid URL characters

E.g., ``/my%2Fpath%7Cwith%21some%25strange%24characters``
)rj   r   r   s    rN   raw_pathBaseRequest.raw_path  s     }}!!!rM   c                 @    [        U R                  R                  5      $ )z7A multidict with all the variables in the query string.)r   rq   queryr   s    rN   r  BaseRequest.query  s     dmm1122rM   c                 .    U R                   R                  $ )z*The query string in the URL.

E.g., id=10
)rq   query_stringr   s    rN   r  BaseRequest.query_string  s     }})))rM   c                     U R                   $ )z4A case-insensitive multidict proxy with all headers.)rn   r   s    rN   rB   BaseRequest.headers       }}rM   c                 .    U R                   R                  $ )z$A sequence of pairs for all headers.)rj   r   r   s    rN   r   BaseRequest.raw_headers  s     }}(((rM   c                 f    [        U R                  R                  [        R                  5      5      $ )ziThe value of If-Modified-Since HTTP header, or None.

This header is represented as a `datetime` object.
)r"   rB   r   r   IF_MODIFIED_SINCEr   s    rN   if_modified_sinceBaseRequest.if_modified_since  s$     t||//0F0FGHHrM   c                 f    [        U R                  R                  [        R                  5      5      $ )zkThe value of If-Unmodified-Since HTTP header, or None.

This header is represented as a `datetime` object.
)r"   rB   r   r   IF_UNMODIFIED_SINCEr   s    rN   if_unmodified_sinceBaseRequest.if_unmodified_since   s$     t||//0H0HIJJrM   etag_headerc              #      #    U [         :X  a  [        S[         S9v   g[        R                  " U 5       H7  nUR	                  SSS5      u  p#nU(       a    g[        [        U5      US9v   M9     g7f)z'Extract `ETag` objects from raw header.F)is_weakr   r   r      N)r   r    r   finditerr   bool)r%  r   r'  r   garbages        rN   _etag_valuesBaseRequest._etag_values  sp      (" 
 -55kB*/++aA*>'  M  Cs   A.A0header_valuec                 F    U(       d  g [        U R                  U5      5      $ rT   )r   r,  )clsr.  s     rN   _if_match_or_none_impl"BaseRequest._if_match_or_none_impl  s      S%%l344rM   c                 r    U R                  U R                  R                  [        R                  5      5      $ )zhThe value of If-Match HTTP header, or None.

This header is represented as a `tuple` of `ETag` objects.
)r1  rB   r   r   IF_MATCHr   s    rN   if_matchBaseRequest.if_match&  s(     **4<<+;+;DMM+JKKrM   c                 r    U R                  U R                  R                  [        R                  5      5      $ )zmThe value of If-None-Match HTTP header, or None.

This header is represented as a `tuple` of `ETag` objects.
)r1  rB   r   r   IF_NONE_MATCHr   s    rN   if_none_matchBaseRequest.if_none_match.  s*     **4<<+;+;D<N<N+OPPrM   c                 f    [        U R                  R                  [        R                  5      5      $ )z`The value of If-Range HTTP header, or None.

This header is represented as a `datetime` object.
)r"   rB   r   r   IF_RANGEr   s    rN   if_rangeBaseRequest.if_range6  s"     t||//>??rM   c                 8    U R                   R                  (       + $ )zIs keepalive enabled by client?)rj   should_closer   s    rN   
keep_aliveBaseRequest.keep_alive>  s     ==----rM   c                     U R                   R                  [        R                  S5      n[	        U5      n[        UR                  5        VVs0 s H  u  p4X4R                  _M     snn5      $ s  snnf )z=Return request cookies.

A read-only dictionary-like object.
rR   )rB   r   r   COOKIEr   r   r   r   )r   rawparsedr   vals        rN   cookiesBaseRequest.cookiesC  sS     llt{{B/c" OHCii OPP Os   A.
c                    U R                   R                  [        R                  5      nSu  p#Ub   Sn[        R
                  " XA5      S   u  p#U(       a  [        U5      OSnU(       a  [        U5      OSnUc  Ub  U* nSnUb  Ub  US-  nX#:  a  [        S5      eX#s=L a  c  O  O[        S5      e[        X#S5      $ ! [         a    [        S5      ef = f)	z=The content of Range HTTP header.

Return a slice instance.

)NNNz^bytes=(\d*)-(\d*)$r   zrange not in acceptable formatr   zstart cannot be after endz"No start or end of range specified)
rn   r   r   RANGErefindall
IndexError
ValueErrorintslice)r   rngstartendpatterns        rN   
http_rangeBaseRequest.http_rangeM  s     mm

+
?C0ZZ5a8
 "#c(tC"'CJTE} S_q<$%@AA## !EFFU##+  C !ABBCs   B? ?Cc                     U R                   $ )zReturn raw payload stream.)rm   r   s    rN   contentBaseRequest.contentq  r  rM   c                 t    [         R                  " S[        SS9  U R                  R	                  5       (       + $ )@Return True if request's HTTP BODY can be read, False otherwise.z$Deprecated, use .can_read_body #2005r   r   )r   r   r   rm   at_eofr   s    rN   has_bodyBaseRequest.has_bodyv  s1     	24FST	
 =='')))rM   c                 @    U R                   R                  5       (       + $ )r\  )rm   r]  r   s    rN   can_read_bodyBaseRequest.can_read_body~  s     =='')))rM   c                 8    [        U R                  5      [        L$ )z6Return True if request has HTTP BODY, False otherwise.)typerm   r*   r   s    rN   body_existsBaseRequest.body_exists  s     DMM"*;;;rM   c                    #    U R                   R                  5       (       dD  U R                   R                  5       I Sh  vN   U R                   R                  5       (       d  MC  gg N'7f)z;Release request.

Eat unread part of HTTP BODY if present.
N)rm   r]  readanyr   s    rN   releaseBaseRequest.release  sH     
 --&&((--''))) --&&(()s   =A)A' #A)%A)c                 n  #    U R                   c  [        5       n U R                  R                  5       I Sh  vN nUR	                  U5        U R
                  (       a.  [        U5      nX0R
                  :  a  [        U R
                  US9eU(       d  OM|  [        U5      U l         U R                   $  Nz7f)zORead request body if present.

Returns bytes object with full request content.
Nmax_sizeactual_size)	rs   	bytearrayrm   rh  extendrw   r   r1   bytes)r   bodychunk	body_sizes       rN   readBaseRequest.read  s     
 #;D"mm3355E"(( #D	I $9$997%)%:%:	     %T{D 6s   6B5B3A;B5c                    #    U R                  5       I Sh  vN nU R                  =(       d    SnUR                  U5      $  N*7f)z1Return BODY as text using encoding from .charset.Nr   )ru  charsetdecode)r   
bytes_bodyencodings      rN   textBaseRequest.text  s7     99;&
<<*7  ** 's   AA+A)loadsr~  c                N   #    U R                  5       I Sh  vN nU" U5      $  N7f)zReturn BODY as JSON.N)r|  )r   r~  rr  s      rN   jsonBaseRequest.json  s"     YY[ T{ !s   %#%c                 J   #    [        U R                  U R                  5      $ 7f)z3Return async iterator to process BODY as multipart.)r)   rn   rm   r   s    rN   	multipartBaseRequest.multipart  s     t}}dmm<<s   !#c                   #    U R                   b  U R                   $ U R                  U R                  ;  a$  [        [	        5       5      U l         U R                   $ U R
                  nUS;  a$  [        [	        5       5      U l         U R                   $ [	        5       nUS:X  Ga  U R                  5       I Sh  vN nU R                  nUR                  5       I Sh  vN nUGb  SnUR                  R                  [        R                  5      n[        U[        5      (       Gak  UR                  c   eUR                   (       Ga  U R"                  R%                  S[&        R(                  5      I Sh  vN nUR+                  SS9I Sh  vN n	U	(       a  UR-                  U	5      n	U R"                  R%                  SUR.                  U	5      I Sh  vN   U[1        U	5      -  nSUs=:  a  U:  a:  O  O7U R"                  R%                  SUR2                  5      I Sh  vN   [5        XFS9eUR+                  SS9I Sh  vN n	U	(       a  M  U R"                  R%                  SUR6                  S5      I Sh  vN   Uc  Sn[9        UR                  UR                   [;        [<        R>                  U5      UUR                  5      n
URA                  UR                  U
5        OURC                  S	S
9I Sh  vN nUb  URE                  S5      (       a;  URG                  SS9nURA                  UR                  UR-                  U5      5        OURA                  UR                  U5        U[1        U5      -  nSUs=:  a  U:  a  O  O[5        XFS9eO[I        S5      eUR                  5       I Sh  vN nUb  GM  OkU RC                  5       I Sh  vN nU(       aL  U RJ                  =(       d    SnURM                  [O        URQ                  5       R-                  U5      S	US95        [        U5      U l         U R                   $  GN GNi GN GN GN| GN3 GN GN GNf N N7f)zReturn POST parameters.N)rR   z!application/x-www-form-urlencodedmultipart/form-datar  r   i   )sizerl  zapplication/octet-streamT)ry  ztext/r   )defaultz8To decode nested multipart you need to use custom reader)keep_blank_valuesr{  ))rr   ro   POST_METHODSr   r   rA   r  rw   nextrB   r   r   CONTENT_TYPEr  r(   r>   r?   rx   run_in_executortempfileTemporaryFile
read_chunkry  writer   closer1   seekr4   r   rJ   rK   addru  
startswithget_charsetrO  rx  rp  r   rstrip)r   rA   outr  rm  fieldr  field_cttmprs  ffr   rx  datas                 rN   postBaseRequest.post  s    ::!::<<t000'	4DJ::((  
 

 (	4DJ::7@{00"nn..I,,H#..**E# ==,,T->->?e^44 ::111 ~~~$(JJ$>$> ("8"8%  ',&6&6E&6&B B#$)LL$7E"&**"<"<T399e"TTT CJ.D 82d2&*jj&@&@syy&Q Q Q&?-5'" !" +0*:*:*:*F$FE $e #jj88sxxKKK#+'AH&!JJ!NN !2!2C8$!MM 

B/ ',jjj&= =#+x/B/B7/K/K&+&7&7&7&HGGGEJJW0EFGGEJJ6E
*x.$.";)1#  /
 %U  (nn..u #x $D,,1'

,,W5*.!( $C(
zzY / + !C U !R %GK !>  /$s   B2Q4P>5#QQBQ0Q1QQAQQ
AQQQ:Q;Q*Q2Q3A=Q0Q1B:Q+Q,Q6Q
QA4QQQQ
QQQQQQQr>   r  c                 h    U R                   nUc  U$ UR                  nUc  U$ UR                  X5      $ )z"Extra info from protocol transport)rk   r   r   )r   r>   r  r   r   s        rN   r   BaseRequest.get_extra_info  s=    >>N&&	N''66rM   c                     U R                   R                  SS5      R                  S5      nSR                  U R                  R
                  U R                  U5      $ )Nasciibackslashreplacez<{} {} {} >)r   r   ry  formatr   rD   ro   )r   ascii_encodable_paths     rN   __repr__BaseRequest.__repr__"  sS    #yy//9KLSS 
 ##NN##T\\3G
 	
rM   otherc                 0    [        U 5      [        U5      :H  $ rT   )id)r   r  s     rN   __eq__BaseRequest.__eq__*  s    $x2e9$$rM   c                     g)NTrC   r   s    rN   __bool__BaseRequest.__bool__-  s    rM   responsec                    #    g 7frT   rC   )r   r  s     rN   _prepare_hookBaseRequest._prepare_hook0  s     s   excc                 0    [        U R                  U5        g rT   )r%   rm   )r   r  s     rN   _cancelBaseRequest._cancel3  s    dmmS)rM   )ru   rw   rn   rx   rj   ro   rm   rl   rr   rk   rs   rq   rt   rv   rz   ry   rp   )r   r   )r   r7   )r   zMultiMapping[str])r   N)r   z,MultiDictProxy[Union[str, bytes, FileField]]rT   )lrD   rE   rF   rG   r   
METH_PATCH	METH_POSTMETH_PUT
METH_TRACEMETH_DELETEr  r!   ATTRS	frozensetr&   r+   r   asyncioAbstractEventLooprP  r   r   rH   r   r   r$   r   r   r0   r.   r   propertyr   r   	Transportr   r   r{   r#   r   r   r   r   r   r   r   r   r	   r   r*  r   r   r
   r   r}   r   r'   r   r~   r   r   r   r  r  r  r  rB   r/   r   datetimer  r#  staticmethodr    r,  classmethodr1  r5  r9  r=  rA  rH  rQ  rV  rY  r^  ra  re  ri  rq  ru  r|  r,   r-   r  r)   r  r  r   r  objectr  r  r2   r  BaseExceptionr  rL   rC   rM   rN   r3   r3   v   s-    	L 	
" E>  '*. $" $7+"7+ 7+ #	7+
 -7+ #7+ ''7+ 7+ S#X'7+ 7+ sm7+ 7+ 
7+x )1.62:(0&.(0198
 c9n%8
 x*+	8

 |Y./8
 c9n%8
 CN#8
 c9n%8
 sI~.8
 
8
t     (8G$5$56 ( (
 $, $ $ % % % *      g//   s  s  !s !3 !4 !s t    !(3- !
 & & & :5c!2C!78 : :x           c     - - - 'S ' ' "c " " " " " "# " " 3 3 *c * *   )Z ) ) I8H,=,=#> I I KXh.?.?%@ K K # (4.  ( 5#C=5	%c	"	#5 5 L(5s#34 L L QxdCi(89 Q Q @(8#4#45 @ @ .D . . Qc* Q Q !$E !$ !$F    *$ * * *t * * <T < <* E  *+C + 2F ; # 
= =`D
73 
7 
7 
7
# 
%F %t %$ N t *= *T *rM   r3   c                   j  ^  \ rS rSr\R
                  \" S/5      -  rS\S\SS4U 4S jjr\	(       a  S\
S	\SS4U 4S
 jjr\\\\\\\S.S\\
\4   S\\\4   S\\\4   S\\
\4   S\\
\4   S\\
\4   S\\\4   SS 4U 4S jjjr\SS j5       r\SS j5       r\S\4S j5       rS\SS4S jrSrU =r$ )r5   i7  _match_infoargsr   r   Nc                 4   > [         TU ]  " U0 UD6  S U l        g rT   )superr   r  )r   r  r   r   s      rN   r   Request.__init__;  s    $)&) ;?rM   r>   rG  c                    > XR                   ;  a>  [        R                  " SR                  U R                  R
                  U5      [        SS9  [        TU ]!  X5        g )Nz-Setting custom {}.{} attribute is discouragedr   r   )	r  r   r   r  r   rD   r   r  __setattr__)r   r>   rG  r   s      rN   r  Request.__setattr__F  sI    ::%%%+VDNN,C,CT%J& 	 G*rM   r   r   r   rB   r}   r~   r   r{   c          
      p   > [         T
U ]  UUUUUUUS9n[        [        U5      n	U R                  U	l        U	$ )Nr   )r  r   r   r5   r  )r   r   r   rB   r}   r~   r   r{   retnew_retr   s             rN   r   Request.cloneP  sN     gm+  
 w$"..rM   c                 (    U R                   nUc   eU$ )zResult of route resolving.r  r   
match_infos     rN   r  Request.match_infoh  s!     %%
%%%rM   c                 <    U R                   nUc   eUR                  $ )zApplication instance.)r  current_appr  s     rN   appRequest.appo  s'     %%
%%%%%%rM   c                     U R                   nUc   eUR                  nU R                  nUR                  U5      n[	        [        US US-    5      5      n[        U5      $ )Nr   )r  appsr  indexr  reversedr   )r   r  lstr  idxsublists         rN   config_dictRequest.config_dictv  s\    %%
%%%oohhiinxIcAg/0W%%rM   r  c                    #    U R                   nUc  g UR                   H&  nUR                  R                  X5      I S h  vN   M(     g  N	7frT   )r  _appson_response_preparesend)r   r  r  r  s       rN   r  Request._prepare_hook  sF     %%
##C))..t>>> $>s   >A A

Ar  )r   r8   )r   r6   )rD   rE   rF   rG   r3   r  r  r   r   r   rH   r  r$   r   r   r0   r.   rP  r   r#   r  r  r  r   r  r2   r  rL   __classcell__)r   s   @rN   r5   r5   7  s`   	=/ ::E?c ?S ?T ? 	+C 	+c 	+d 	+ )1.62:(0&.(019 c9n% x*+	
 |Y./ c9n% CN# c9n% sI~. 
 0   & & &] & &?N ?t ? ?rM   r5   )dr  r  rJ   rL  r   stringr  r   r   http.cookiesr   r   typingr   r   r   r   r	   r
   r   r   r   r   r   r   urllib.parser   attr	multidictr   r   r   r   r   yarlr   rR   r   abcr   helpersr   r   r   r   r   r    r!   r"   r#   r$   r%   http_parserr&   http_writerr'   r  r(   r)   streamsr*   r+   typedefsr,   r-   r.   r/   r0   web_exceptionsr1   web_responser2   __all__web_appr6   web_protocolr7   web_urldispatcherr8   sr4   digitsascii_lettersrO   rH   rI   rQ   r  r  r   ranger^   r_   rb   re   compilerf   rg   r3   r5   rC   rM   rN   <module>r     s     	 	      % "    #     %    + $ 6 4  6 (
1 $,6 T$d3% % 4% ]]V%9%99<NNc
 N &_c
 $nnHHK/%dD8I2JJKKs  )eCj (=DD E c
  8>>
 ?    02zz//J ws|, J +-**_*E E'#,' E~
*.c*L ~
*BN?k N?rM   