fL ddlZddlZddlZddlZddlZddlZddlZddlZddl Z ddl m Z gdZ dZdZdZdZdZd Zeejjd ejjDZd Zd Zejd jZejdjZ ejdZ!ejdZ"hdZ#d=dZ$de%de%fdZ&Gddej'j(Z)dZ*e)fdZ+Gddej,Z-GddZ. ddl/Z/Gdd e.Z0e 1d n #e2$rYnwxYwGd!d"e3Z4Gd#d$e4Z5Gd%d&e4Z6Gd'd(e4Z7Gd)d*e4Z8Gd+d,e4Z9Gd-d.e4Z:Gd/d0e4Z;Gd1d2e;Z<Gd3d4e;Z=Gd5d6e;Z>Gd7d8e4Z?Gd9d:e4Z@Gd;dN)urlsplit) HTTPResponseHTTPConnection HTTPException NotConnectedUnknownProtocolUnknownTransferEncodingUnimplementedFileModeIncompleteRead InvalidURLImproperConnectionStateCannotSendRequestCannotSendHeaderResponseNotReady BadStatusLine LineTooLongRemoteDisconnectederror responsesPiUNKNOWNIdlezRequest-startedz Request-sentci|] }||j S)phrase).0vs 2/opt/alt/python311/lib64/python3.11/http/client.py rls G G GQQ G G Gids[^:\s][^:\r\n]*s\n(?![ \t])|\r(?![ \t\n])z[- ]z[-]>PUTPOSTPATCHdatac  |dS#t$r[}t|j|j|j|j|d||j|jdd|ddd}~wwxYw)Nlatin-1z (z.20z) is not valid Latin-1. Use z9.encode('utf-8') if you want to send it encoded in UTF-8.)encodeUnicodeEncodeErrorencodingobjectstartendtitle)r%nameerrs r_encoder1sF E{{9%%% EEE L J I GZZ\\\\4 #' 12222DDD : ;;AE EEs A=AA88A=enc_namereturncH |d\}}}|r|dz }|S)N%]) partition)r2percent_s r_strip_ipv6_ifacer:s63#--d33HgqD Or ceZdZdZdS) HTTPMessagec: |dz}t|}g}d}|D]Z}|d||krd}n|ddsd}|r||[|S)N:r)lowerlenkeysisspaceappend)selfr/nlsthitlines rgetallmatchingheadersz!HTTPMessage.getallmatchingheaderss zz||c! IIIIKK ! !DBQBx~~4''"1"X%%''  ! 4    r N)__name__ __module__ __qualname__rJrr rr<r<s#r r<c* g} |tdz}t|tkrtd||t|t krt dt z|dvrn|S)NTr? header linezgot more than %d headers  r )readline_MAXLINErArrD _MAXHEADERSr)fpheadersrIs r _read_headersrXs G{{8a<(( t99x  m,, ,t w<<+ % % :[ HII I ( ( (  Nr c t|}d|d}tj||S)Nr iso-8859-1)_class)rXjoindecodeemailparserParserparsestr)rVr[rWhstrings r parse_headersrcs\BGhhw&&|44G <  f  - - 6 6w ? ??r ceZdZd"dZdZdZdZdZfdZfd Z d Z d Z d#d Z d Z dZdZdZd#dZdZdZdZd$dZd$dZd$fd ZdZdZdZd#dZdZdZdZd Zd!Z xZ!S)%rrNc|d|_||_||_dx|_|_t |_t |_t |_ t |_ t |_ t |_ t |_ dS)Nrb)makefilerV debuglevel_methodrWmsg_UNKNOWNversionstatusreasonchunked chunk_leftlength will_close)rEsockrhmethodurls r__init__zHTTPResponse.__init__sl--%%$ #'& tx     " "r ct|jtdzd}t |tkrt d|jdkrtdt||std | dd\}}}n?#t$r2 | dd\}}d}n#t$rd}YnwxYwYnwxYw| d s#| t| t|}|d ks|d krt|n#t$rt|wxYw|||fS) Nr?rZz status linerzreply:z-Remote end closed connection without responsezHTTP/r!i)strrVrSrTrArrhprintreprrsplit ValueError startswith _close_connrint)rErIrlrmrns r _read_statuszHTTPResponse._read_statuss47##HqL11<@@ t99x  m,, , ?Q   (DJJ ' ' ' 2%&122 2 &*jjq&9&9 #GVVV    "&**T1"5"5      !!'** &      %% % &[[F||v||#D))) , & & &%% % &&&sBB-- C)8CC) C# C)"C##C)(C)%*EE*c|jdS |\}}}|tkrn1t|j}|jdkrt d|~U|x|_|_| |_ |dvrd|_ n,| drd|_ nt|t|jx|_|_|jdkr3|jD]\}}t d|d z||jd }|r'|d krd|_d|_nd |_||_d|_|jd }|rF|js? t1||_|jdkrd|_n#t2$r d|_Yn wxYwd|_|t4ks%|t6ksd|cxkrdks n|jdkrd|_|js|js|j d|_dSdSdSdS)NTrzheaders:)zHTTP/1.0zHTTP/0.9 zHTTP/1. header:r>transfer-encodingroFcontent-lengthr!HEAD)rWrCONTINUErXrVrhr{codermstriprnrlrrrcrjitemsgetr@rorp _check_closerrrqrr~ NO_CONTENT NOT_MODIFIEDri) rErlrmrnskipped_headershdrvaltr_encrqs rbeginzHTTPResponse.begin>s < # F &*&7&7&9&9 #GVV!!+DG44O""j/222 #)( DKllnn . . .DLL    * * +DLL!'** *"/"8"88 tx ?Q   L..00 1 1SisC0000!!"566  !fllnn 11DL"DOO DL++-- !!"233  $,  '!&kk ;??"&DK  # # #"  # DK j Fl$:$: 6    C     LF " "DK  #  # K "DOOO # # # #  s+GG&%G&c\|jd}|jdkr|rd|vrdSdS|jdrdS|rd|vrdS|jd}|rd|vrdSdS)N connectionrcloseTFz keep-alivezproxy-connection)rWrrlr@)rEconnpconns rrzHTTPResponse._check_closes| -- <2   4::<<//t5 <  L ) ) 5  LDJJLL005   !344  \U[[]]225tr cJ|j}d|_|dSN)rVr)rErVs rrzHTTPResponse._close_conns! W  r c t|jr|dSdS#|jr|wwxYwr)superrrVrrE __class__s rrzHTTPResponse.closesl # GGMMOOOw #  """"" # #tw #  """" #s AA ct|jr|jdSdSr)rflushrVrs rrzHTTPResponse.flushs;   7  GMMOOOOO  r c dS)NTrrEs rreadablezHTTPResponse.readables !tr c |jduSr)rVrs risclosedzHTTPResponse.iscloseds/w$r c |jdS|jdkr|dS|jr||S||j||jkr|j}|j|}|s|r|n?|j8|xjt|zc_|js||S|j|j}nF ||j}n##t$r|wxYwd|_||S)Nr rr) rVrirro _read_chunkedrqreadrA _safe_readr )rEamtss rrzHTTPResponse.readspM 7?3 <6 ! !      3 < +%%c** * ?{&3+<+<k S!!A ' '  """"( s1vv% {'$$&&&H{"GLLNN 44AA%$$&&&       Hs 9D D4c |jdS|jdkr|dS|jr||S|j4t ||jkrt|d|j}|j|}|s|r|n2|j+|xj|zc_|js||S)Nrr) rVrirro_readinto_chunkedrqrA memoryviewreadinto)rEbrFs rrzHTTPResponse.readintos  7?1 <6 ! !      1 < -))!,, , ; "1vv ##qMM!DK-0 G  Q   #Q #        [ $ KK1 KK; #  """r cF|jtdz}t|tkrt d|d}|dkr |d|} t |dS#t$r|wxYw)Nr?z chunk size;r) rVrSrTrArfindrr~r)rErIis r_read_next_chunk_sizez"HTTPResponse._read_next_chunk_sizesw1 -- t99x  l++ + IIdOO 668D tR==             s 0B B c |jtdz}t|tkrt d|sdS|dvrdST)NTr?z trailer linerP)rVrSrTrArrErIs r_read_and_discard_trailerz&HTTPResponse._read_and_discard_trailer#sd 7##HqL11D4yy8##!.111 ,,, r c|j}|s||d |}n#t$rt dwxYw|dkr*||d}||_|S)Nrxr r)rprrr~r rr)rErps r_get_chunk_leftzHTTPResponse._get_chunk_left1s _  )%""" *!7799  * * *$S))) *Q..000  """! (DOs 7Acg} |}|nr|9||kr3|||||z |_n7||||||z}d|_d|S#t $r(}t d||d}~wwxYw)NTrr )rrDrrpr\r )rErvaluerpexcs rrzHTTPResponse._read_chunkedIs ; $!1133 %?sj'8'8LL!5!5666&03&6DO T__Z88999?:%C"# $88E?? " ; ; ; %11s : ;sBB## C-#CCcd}t|} |}||St||kr$||}||z |_||zS|d|}||}||d}||z }d|_#t $r%t t |d|wxYw)Nr)rrrA_safe_readintorpr bytes)rEr total_bytesmvbrprFtemp_mvbs rrzHTTPResponse._readinto_chunked_s mm : $!1133 %&&s88z))++C00A&01nDO&?*{ {+''11!""gq "# $  : : : q;'7!8!899 9 :sB6B#6B/Cc |j|}t||kr t||t|z |Sr)rVrrAr )rErr%s rrzHTTPResponse._safe_readwsJ w||C   t99s?? s3t99}55 5 r c t|}|j|}||kr(tt |d|||z |Sr)rArVrr r)rErrrFs rrzHTTPResponse._safe_readintosU@!ff G  Q   s77 q!us1u55 5r c |j |jdkrdS|jr||S|j|dks ||jkr|j}|j|}|s|r|n?|j8|xjt|zc_|js||SNrr r)rVriro_read1_chunkedrqread1rrA)rErFresults rrzHTTPResponse.read1s  7?dlf443 < *&&q)) ) ; "AT[ Aq!! #! #        [ $ KK3v;; &KK; #  """ r c|j |jdkrdS|jr||S|j|S)Nrr )rVriro _peek_chunkedpeek)rErFs rrzHTTPResponse.peeksL 7?dlf443 < )%%a(( (w||Ar c|j |jdkrdS|jr!t|S|j|dks ||jkr|j}|j|}|s|r|n?|j8|xjt|zc_|js||Sr)rVrirorrSrqrrA)rElimitrrs rrSzHTTPResponse.readlines 7?dlf443 < +77##E** * ; " UT[5H5HKE!!%(( #% #        [ $ KK3v;; &KK; #  """ r c|}||dkrdSd|cxkr|ksn|}|j|}|xjt |zc_|st d|S)Nrr )rrVrrprAr )rErFrprs rrzHTTPResponse._read1_chunkeds))++  a3Q$$$$*$$$$Aw}}Q 3t99$ & %% % r c |}n#t$rYdSwxYw|dS|j|d|S)Nr )rr rVr)rErFrps rrzHTTPResponse._peek_chunkedsf --//JJ   33   3w||J''  44s  %%c4|jSr)rVfilenors rrzHTTPResponse.filenosw~~r c |jt|j|p|}t|tst |ds|Sd|S)N__iter__z, )rWrget_all isinstancerzhasattrr\)rEr/defaultrWs r getheaderzHTTPResponse.getheadersq  < "$$ $,&&t,,7 gs # # &77J+G+G &N99W%% %r cz |jtt|jSr)rWrlistrrs r getheaderszHTTPResponse.getheaderss54 < "$$ $DL&&(()))r c|Srrrs rrzHTTPResponse.__iter__s r c |jSr)rWrs rinfozHTTPResponse.infos (|r c |jSr)rurs rgeturlzHTTPResponse.geturls xr c |jSr)rmrs rgetcodezHTTPResponse.getcodes {r )rNNr)r)"rKrLrMrvrrrrrrrrrrrrrrrrrrrrSrrrrrrrrr __classcell__rs@rrrs)####<'''BF#F#F#P: #####  &&&&P   D   0;;;;,:::0   &"    5 5 5   &&&&(*** .   r rceZdZdZdZeZeZdZ dZ e dZ e dZ dejddfd Zd!d Zd Zd Zd ZdZdZdZdZdZdZd"dZ d#dZdZdZdZdZ dZ!d$dddZ"difdddZ#dZ$d Z%dS)%rrzHTTP/1.1r?rc8 t|tjSr)rio TextIOBase)streams r _is_textIOzHTTPConnection._is_textIO+s &"-000r c ||tvrdSdSt|drdS t|}|jS#t $rYnwxYwt |trt|SdS)Nrr) upper_METHODS_EXPECTING_BODYrrnbytes TypeErrorrrzrA)bodyrtmvs r_get_content_lengthz"HTTPConnection._get_content_length1s <||~~!888qt 4  4 D!!B9     D  dC  t99 tsA AAN cF||_||_||_d|_g|_d|_t |_d|_d|_ d|_ i|_ | ||\|_ |_||j t j|_dSr)timeoutsource_address blocksizers_buffer_HTTPConnection__response_CS_IDLE_HTTPConnection__stateri _tunnel_host _tunnel_port_tunnel_headers _get_hostporthostport_validate_hostsocketcreate_connection_create_connection)rErr rrrs rrvzHTTPConnection.__init__Qs ,"      !!%!3!3D$!?!?DI DI&&&#)":r c |jrtd|||\|_|_|r ||_dS|jdS)Nz.Can't set up tunnel for established connection)rs RuntimeErrorrrrrclear)rErr rWs r set_tunnelzHTTPConnection.set_tunnelgst  9 QOPP P/3/A/A$/M/M,4,  )#*D  & & ( ( ( ( (r c||d}|d}||krm t||dzd}nF#t$r9||dzddkr|j}nt d||dzdzYnwxYw|d|}n|j}|r"|ddkr|ddkr |dd}||fS) Nr>]r?ryznonnumeric port: '%s'r[r)rfindrr~ default_portr )rErr rjs rrzHTTPConnection._get_hostports < 3A 3A1uuOtAaCDDz??DD!OOOAaCDDzR''#0()@4!:)MNNNO BQBx(  DGsNNtBx3":Dd|sAABBc||_dSr)rh)rElevels rset_debuglevelzHTTPConnection.set_debuglevels r c6d|vr|ddkrd|zdzS|S)N:r[[r6r)rEips r _wrap_ipv6zHTTPConnection._wrap_ipv6s- 2::"Q%7**"9t# # r cd||jd|jfz}|g}|jD]3\}}||d|dd4|d|d|~| |j |j } | \}}}|tjjkr;|t#d |d | |jt*d z} t-| t*krt/d | sn3| dvrn.|jdkr"t3d| |dS#|wxYw)NsCONNECT %s:%d HTTP/1.0 asciiz:  r'rQr rtzTunnel connection failed:  Tr?rOrPrr)r rr(rrrrDsendr\response_classrsrirhttp HTTPStatusOKrOSErrorrrVrSrTrArrhr{r]) rEconnectrWheaderrresponserlrmessagerIs r_tunnelzHTTPConnection._tunnels/ OOD-44W== > >  3)!17799 G GMFE NNf33333::9EE F F F Fw #((7##$$$ &&ty&FF '/'<'<'>'> $WdGt))) S4SS'--//SSTTT 4{++HqL99t99x''%m444000?Q&&)T[[]]333 4 NN     HNN    s (C(G&&G<c tjd||j|j||j|jf|j|j|_ |jtj tj dn-#t$r }|j tjkrYd}~nd}~wwxYw|jr|dSdS)Nzhttp.client.connectr?)sysauditrr r rrrs setsockoptr  IPPROTO_TCP TCP_NODELAYr+errno ENOPROTOOPTrr0rEes rr,zHTTPConnection.connectsA 'ty$)DDD++ Yty !4<1DFF   I !3V5G K K K K   w%+++,++++     LLNNNNN  s0B B1B,,B1c  t|_ |j}|rd|_||j}|rd|_|dSdS#|j}|rd|_|wwxYwr)rrrsrr)rErsr.s rrzHTTPConnection.closes6  !9D    H !"&      ! !H !"&     !s $A'Bc~ |j*|jr|nt|jdkrt dt |t|dr|jdkrt d||}|r|jdkrt d | |j }|snH|r| d}tj d|||j|edStj d|| |j|dS#t$rat!|t"jjr"|D]}|j|YdStd t)|zwxYw) Nrzsend:rzsending a readableencoding file using iso-8859-1r?rZzhttp.client.sendz9data should be a bytes-like object or an iterable, got %r)rs auto_openr,rrhr{r|rrrrr(r2r3sendallrr collectionsabcIterabletype)rEr%r( datablockds rr&zHTTPConnection.sends 9 ~ % "nn$ ?Q   '4:: & & & 4  ""*+++__T**F 8$/A--6777 - IIdn55  ? ) 0 0 > >I ,dI>>> !!),,, - F $dD111 G I  d # # # # # G G G$  899 G))AI%%a(((())) !9;?::!FGGG  Gs5EAF< F<c< |j|dSr)rrD)rErs r_outputzHTTPConnection._outputs%  Ar c#K|jdkrtd||}|r|jdkrtd ||j}|sdS|r|d}|V:)Nrzreading a readabler=TrZ)rhr{rrrr()rErr(rDs r_read_readablezHTTPConnection._read_readable s ?Q   & ' ' '**  4do)) 2 3 3 3  dn55I  ;%,,\:: OOO  r Fc |jdd|j}|jdd=|||t |dr||}nb t ||f}nN#t$rA t|}n-#t$r tdt|zwxYwYnwxYw|D]m}|s|j dkrtd|r7|j dkr,t|dd d |zdz}||n|r$|j dkr|d dSdSdSdS) N)r r rQrzAmessage_body should be a bytes-like object or an iterable, got %rrzZero length chunk ignoredrXr#r"s0 )rextendr\r&rrIrriterrCrhr{ _http_vsnrAr()rE message_bodyencode_chunkedrjchunkschunks r _send_outputzHTTPConnection._send_outputs J'''ll4<(( LO #  #|V,, -,,\::- |,,,+_FF!>>>>!%l!3!3$>>>')H*.|*<*<)=>>>>> ! !**9:::!"dn&:&:"5zz111188AAEI!"E %     ($.B"6"6 ,'''''S $ #N ( ("6"6s*?B CB-,C-*CCCc |jr |jrd|_|jtkr t|_nt |j||||_|pd}|||d|d|j }| | ||j dkr|shd}| drt|\}}}}}|r` |d}n%#t $r|d}YnwxYw|dt%|n|jr|j} |j} n|j} |j} | d} n%#t $r| d} YnwxYw|| } d | vrt%| } | |jkr|d| n0| d} |d| d | |s|d d dSdSdS) N/r%rryr(r"idnaHostr>zAccept-Encodingidentity)rrrr_CS_REQ_STARTEDr_validate_methodri_validate_path _http_vsn_strrG_encode_requestrNrrr(r) putheaderr:rrrr r rr]) rErtru skip_hostskip_accept_encodingrequestnetlocnil netloc_encrr host_encs r putrequestzHTTPConnection.putrequestOs  ? #t7799 #"DO* <8 # #*DLL#DL11 1 f%%% jS C   &T-?-?@ T))'22333 >R  0 K>>&))?19#.Cc3K;%+]]7%;%; -;;;%+]]6%:%: ;NN6+#>t000vx8888#+??7#;#;v(((DD/IJJJ( >0*===== > > Ds$DD<;D<FG?Gc,|dS)Nr")r()rEras rr]zHTTPConnection._encode_requests~~g&&&r c t|}|r(td|d|ddS)Nz)method can't contain control characters.  (found at least ))$_contains_disallowed_method_pchar_researchr~group)rErtmatchs rrZzHTTPConnection._validate_methodsg44;;FCC  ;:::',{{}}:::;; ; ; ;r c t|}|r(td|d|ddSNz&URL can't contain control characters. rirj!_contains_disallowed_url_pchar_rerlr rm)rErurns rr[zHTTPConnection._validate_pathss,188==  DCcCC05 CCCDD D D Dr c t|}|r(td|d|ddSrprq)rErrns rr zHTTPConnection._validate_hostssG188>>  DCdCC05 CCCDD D D Dr c |jtkrtt|dr|d}t |st d|t|}t|D]\}}t|dr|d||<n:t|tr%t|d||<t||rt d||d |}|dz|z}||dS)Nr(r"zInvalid header name r'zInvalid header value s s: )rrYrrr(_is_legal_header_namer~r enumeraterrrz_is_illegal_header_valuer\rG)rEr-valuesr one_valuers rr^zHTTPConnection.putheadersZ  K|]}|VdSr)r@)rks r z/HTTPConnection._send_request..s* < D? C3DD*)NN)NF)FFr)&rKrLrMrNr\rr' HTTP_PORTrr>rh staticmethodrrr _GLOBAL_DEFAULT_TIMEOUTrvrrrr r0r,rr&rGrIrSrfr]rZr[r r^r}rarrrr rrr!s#IM!NLIJ11\1 \>#'0N $;;;;,))))0(    """H    ! ! !&G&G&GP   4(4(4(4(l16(-}}}}~''';;;DDDDDD8 Ge G G G G G)-bG$GGGGG ,=,=,=\=====r rcNeZdZ eZdddejdfddddfd ZfdZxZ S)HTTPSConnectionNr)contextcheck_hostnamerc2tt|||||| ||| ddl} | dt d||_||_|Btj }|j dkr| dg|j d|_ |j tjk} ||j}|r| st!d|s|r$||||j d|_ ||_|||j_dSdS) N)rrzTkey_file, cert_file and check_hostname are deprecated, use a custom context instead.rxrzhttp/1.1TzMcheck_hostname needs a SSL context with either CERT_OPTIONAL or CERT_REQUIRED)rrrvwarningswarnDeprecationWarningkey_file cert_filessl_create_default_https_contextrNset_alpn_protocolspost_handshake_auth verify_mode CERT_NONErr~load_cert_chain_context) rErr rrrrrrrr will_verifyrs rrvzHTTPSConnection.__init__su /4 ( ( 1 1$g2@R''.. |<<<.:26G/!->K%!(!7 Jk J "IJJJ 79 7'' 8<<<.:26G/#DM)/= ,,,*)r c t|jr|j}n|j}|j|j||_dS)N)server_hostname)rr,rrr wrap_socketrs)rErrs rr,zHTTPSConnection.connectsa 6 GGOO     ,"&"3"&) 11$)BQ2SSDIIIr ) rKrLrM HTTPS_PORTrr rrvr,rrs@rrrs2! '+TT#;$(% >59$(D% >% >% >% >% >% >% >N S S S S S S S S Sr rceZdZdS)rNrKrLrMrr rrrs Dr rceZdZdS)rNrrr rrrDr rceZdZdS)r Nrrr rr r rr r ceZdZdZdS)rc$|f|_||_dSr)argsrl)rErls rrvzUnknownProtocol.__init__sH  r NrKrLrMrvrr rrrs#r rceZdZdS)r Nrrr rr r rr r ceZdZdS)r Nrrr rr r rr r c*eZdZddZdZejZdS)r Nc2|f|_||_||_dSr)rpartialexpected)rErrs rrvzIncompleteRead.__init__sH    r cr|j d|jz}nd}d|jjt|j|fzS)Nz, %i more expectedryz%s(%i bytes read%s))rrrKrArr9s r__repr__zIncompleteRead.__repr__sE = $$t}4AAA$(?(+DL(9(91(>> >r r)rKrLrMrvrr+__str__rr rr r s:!!!!>>>nGGGr r ceZdZdS)r Nrrr rr r rr r ceZdZdS)rNrrr rrrrr rceZdZdS)rNrrr rrrrr rceZdZdS)rNrrr rrrrr rceZdZdZdS)rcF|st|}|f|_||_dSr)r|rrIrs rrvzBadStatusLine.__init__s) ::DE  r Nrrr rrrs#r rceZdZdZdS)rcPt|dt|fzdS)Nz&got more than %d bytes when reading %s)rrvrT)rE line_types rrvzLineTooLong.__init__s6t%M(0)'<&= > > > > >r Nrrr rrrs#>>>>>r rceZdZdZdS)rcft|dtj|g|Ri|dS)Nry)rrvConnectionResetError)rEposkws rrvzRemoteDisconnected.__init__s?tR(((%d7S777B77777r Nrrr rrrs#88888r r)r%)D email.parserr^ email.messager7r(rrer r2collections.abcr@ urllib.parser__all__rrrkrrYr|globalsupdater) __members__rxrrTrUcompile fullmatchrurlrwrrrkrr1rr:r/Messager<rXrcBufferedIOBaserrrrrD ImportError Exceptionrrr rr r r r rrrrrrrrrr rrs=DL !!!!!!       #  ,--- H G$/"="D"D"F"F G G G   6# #677A%2:&CDDK%/BJ/@$A$A!(2rz-'@'@$322 E E E E%%-'<$) @ @ @ @iiiii2$iiiVc c c c c c c c J@&JJJ9S9S9S9S9S.9S9S9Sv NN$%%%%}   D @     I        =           m      m        M        ]        m        /        .        .   M>>>>>->>> 88888-}888 s*EEE