+
     Bi                         R t . RGOt^ RIt^ RIt^ RIt^ RIt^ RIt^ RI	t	^ RI
t
^ RIt^ RIt^ RIt^ RIt^ RIt^ RIt^ RIt^ RIt^ RIt^ RIt^ R	IHt R
tRt ! R R]P2                  4      t ! R R]P6                  ]4      t ! R R]4      t ! R R]P6                  ]4      t ! R R]P>                  4      t  ! R R] 4      t!R t"Rs#R t$R t% ! R R]!4      t&R t'] ]RRRRRR3R lt(])R8X  Ed%   ^ RI*t*^ RI+t+]*PX                  ! RR7      t-]-P]                  RRRR 7       ]-P]                  R!R"R#R$R%7       ]-P]                  R&R']P^                  ! 4       R(R)7       ]-P]                  R*R+R,RR-R.7       ]-P]                  R/R0R1R%7       ]-P]                  R2R0R3R%7       ]-P]                  R4R0R5R%7       ]-P]                  R6R]0R7R8R97       ]-Pc                  4       t2]2Pf                  '       g$   ]2Ph                  '       d   ]-Pk                  R:4       Rt6]2Pn                  '       di   ]2Pf                  '       g   ]-Pk                  R;4        ]8! ]2Pn                  R<R=R>7      ;_uu_ 4       t9]9Pu                  4       Pw                  4       t6RRR4       ]2P|                  '       d   ]&t?M]!t? ! R@ RA4      t@ ! RB RC]@]4      tA ! RD RE]@]4      tB]2Pf                  '       d   ]BM]AtC](! ]?]C]2P                  ]2P                  ]2P                  ]2Pf                  ]2Ph                  ]6RF7       R# R#   + '       g   i     L; i  ]< d   t=]-Pk                  R?]= 24        Rt=A=LRt=A=ii ; i)Hz0.6
HTTPServerThreadingHTTPServerHTTPSServerThreadingHTTPSServerBaseHTTPRequestHandlerSimpleHTTPRequestHandlerCGIHTTPRequestHandlerN)
HTTPStatusa  <!DOCTYPE HTML>
<html lang="en">
    <head>
        <meta charset="utf-8">
        <style type="text/css">
            :root {
                color-scheme: light dark;
            }
        </style>
        <title>Error response</title>
    </head>
    <body>
        <h1>Error response</h1>
        <p>Error code: %(code)d</p>
        <p>Message: %(message)s.</p>
        <p>Error code explanation: %(code)s - %(explain)s.</p>
    </body>
</html>
ztext/html;charset=utf-8c                   .   a  ] tR t^t o RtRtR tRtV tR# )r   TFc                    \         P                  P                  V 4       V P                  R ,          w  r\        P
                  ! V4      V n        W n        R# )N   NN)socketserver	TCPServerserver_bindserver_addresssocketgetfqdnserver_nameserver_port)selfhostports   &  "/usr/lib/python3.14/http/server.pyr   HTTPServer.server_bind   s?    **40((,
!>>$/    )r   r   N)	__name__
__module____qualname____firstlineno__allow_reuse_addressallow_reuse_portr   __static_attributes____classdictcell__)__classdict__s   @r   r   r      s        r   c                       ] tR t^tRtRtR# )r   T Nr   r   r   r   daemon_threadsr"   r&   r   r   r   r          Nr   c                   X   a a ] tR t^t oR	RRRRRR/V 3R llltV 3R ltR tRtVtV ;t	# )
r   keyfileNpasswordalpn_protocolsc                  <  ^ RI pYn         Y@n        YPn        Y`n        Tf   R.MTT n        \        S	T `!  TTT4       R#   \         d    \        R4      hi ; i)    Nz3SSL module is missing; HTTPS support is unavailablezhttp/1.1)	sslImportErrorRuntimeErrorcertfiler+   r,   r-   super__init__)
r   r   RequestHandlerClassbind_and_activater3   r+   r,   r-   r0   	__class__s
   &&&&$$$$ r   r5   HTTPSServer.__init__   sq    	?
    +2ZL 	 	,*	,  	?  > ? ?	?s   A   Ac                   < \         SV `  4        V P                  4       pVP                  V P                  R R7      V n        R# )T)server_sideN)r4   server_activate_create_contextwrap_socketr   )r   contextr8   s   & r   r<   HTTPSServer.server_activate   s7    !&&())$++4)Hr   c                   V P                   P                  V P                   P                  P                  4      pVP	                  V P
                  V P                  V P                  4       VP                  V P                  4       V# N)
r0   create_default_contextPurposeCLIENT_AUTHload_cert_chainr3   r+   r,   set_alpn_protocolsr-   )r   r?   s   & r   r=   HTTPSServer._create_context   s]    ((11$((2B2B2N2NOt||T]]K""4#6#67r   )r-   r3   r+   r,   r   r0   T)
r   r   r   r   r5   r<   r=   r"   r#   __classcell__r8   r$   s   @@r   r   r      s7     ,>B,,/3, ,,I r   c                       ] tR t^tRtRtR# )r   Tr&   Nr'   r&   r   r   r   r      r)   r   c            	       x  a ] tR t^t oR]P
                  P                  4       ^ ,          ,           tR],           t	]
t]tRtR tR tR tR tRR	 ltRR
 ltRR ltR tR tR tRR ltR t]P9                  ]P<                  ! ]! ^ 4      ]! ^^4      4       U u/ uF	  q RV R 2bK  	  up 4      t R] ]!! R4      &   R t"R t#RR lt$R t%. ROt&. R Ot'R t(Rt)]*PV                  PX                  t-].P^                  Pa                  4        Uu/ uF  pWPb                  VPd                  3bK  	  upt3Rt4Vt5R# u up i u upi )!r   zPython/z	BaseHTTP/HTTP/0.9c                	   R V n         V P                  ;V n        pRV n        \	        V P
                  R4      pVP                  R4      pW n        VP                  4       p\        V4      ^ 8X  d   R# \        V4      ^8  Edk   VR,          p VP                  R4      '       g   \        hVP                  R^4      ^,          pVP                  R4      p\        V4      ^8w  d   \        h\        ;QJ d    R V 4       F  '       g   K   RM	  RM! R V 4       4      '       d   \        R	4      h\        ;QJ d    R
 V 4       F  '       g   K   RM	  RM! R
 V 4       4      '       d   \        R4      h\        V^ ,          4      \        V^,          4      3pTR8  d   T P$                  R8  d   RT n        TR8  d*   T P                  \         P&                  RT,          4       R# Yn        ^\        V4      u;8:  d   ^8:  g,   M V P                  \         P"                  RV,          4       R# VR,          w  rg\        V4      ^8X  d8   RV n        VR8w  d*   V P                  \         P"                  RV,          4       R# WguV n         V n        V P(                  P                  R4      '       d(   RV P(                  P+                  R4      ,           V n         \,        P.                  P1                  V P2                  V P4                  R7      V n        T P6                  P?                  RR4      p	T	PA                  4       R8X  d	   RT n        M-T	PA                  4       R8X  d   T P$                  R8  d   RT n        T P6                  P?                  RR4      p
T
PA                  4       R8X  d;   T P$                  R8  d*   T P                  R8  d   T PC                  4       '       g   R# R#   \        \        3 d,    T P                  \         P"                  RT,          4        R# i ; i  \,        P.                  P8                   d6   pT P                  \         P:                  R\	        T4      4        R p?R# R p?i\,        P.                  P<                   d6   pT P                  \         P:                  R\	        T4      4        R p?R# R p?ii ; i) NTz
iso-8859-1
FzHTTP//.c              3   J   "   T F  qP                  4       '       * x  K  	  R # 5irB   )isdigit.0	components   & r   	<genexpr>7BaseHTTPRequestHandler.parse_request.<locals>.<genexpr>`  s     O9,,...s   !#znon digit in http versionc              3   >   "   T F  p\        V4      ^
8  x  K  	  R# 5i)
   N)lenrU   s   & r   rX   rY   b  s     KNys9~*Ns   z unreasonable length http versionzBad request version (%r)zHTTP/1.1zInvalid HTTP version (%s)zBad request syntax (%r)r   GETzBad HTTP/0.9 request type (%r)z//)_classzLine too longzToo many headers
Connection close
keep-aliveExpectz100-continue)   re   )r   r/   )"commanddefault_request_versionrequest_versionclose_connectionstrraw_requestlinerstriprequestlinesplitr\   
startswith
ValueErroranyint
IndexError
send_errorr	   BAD_REQUESTprotocol_versionHTTP_VERSION_NOT_SUPPORTEDpathlstriphttpclientparse_headersrfileMessageClassheadersLineTooLongREQUEST_HEADER_FIELDS_TOO_LARGEHTTPExceptiongetlowerhandle_expect_100)r   versionrm   wordsbase_version_numberversion_numberrf   rx   errconntypeexpects   &          r   parse_request$BaseHTTPRequestHandler.parse_request<  s    )-)E)EEw $$..=!((0&!!#u:?u:?BiG))'22$$&-mmC&;A&>#!4!:!:3!? ~&!+$$3OO333OOOO$%@AA3KNK333KNKKK$%GHH!$^A%6!7^A=N9O!O 'D,A,AZ,O(-%'99/2EEG #* CJ#!#OO&&)K79 b	u:?$(D!%**4w>@ ")di 99%%dii..s33DI	;;44TZZ<@<M<M 5 ODL  <<##L"5>>w&$(D!nn,.##z1$)D!!!(B/LLNn,%%3$$
2))++G 
+ **.8: 	P {{&& 	OO::C {{(( 	OO::"C
 	sa   A'O% 4O% O% #O% 9O% O% (/O% :P$ %8P! P!$S
*Q33 S
S
*SS
c                d    V P                  \        P                  4       V P                  4        R # rI   )send_response_onlyr	   CONTINUEend_headersr   s   &r   r   (BaseHTTPRequestHandler.handle_expect_100  s'     	
 3 34r   c                    V P                   P                  R 4      V n        \        V P                  4      R8  d7   RV n        RV n        RV n        V P                  \        P                  4       R# V P                  '       g
   RV n
        R# V P                  4       '       g   R# RV P                  ,           p\        W4      '       g4   V P                  \        P                  RV P                  ,          4       R# \        W4      pV! 4        V P                  P!                  4        R#   \"         d%   pT P%                  RT4       RT n
         Rp?R# Rp?ii ; i)i  i   r`   NTdo_zUnsupported method (%r)zRequest timed out: %r)r}   readlinerk   r\   rm   rh   rf   rt   r	   REQUEST_URI_TOO_LONGri   r   hasattrNOT_IMPLEMENTEDgetattrwfileflushTimeoutError	log_error)r   mnamemethodes   &   r   handle_one_request)BaseHTTPRequestHandler.handle_one_request  s   	#'::#6#6u#=D 4''(50#% ')$!
 ? ?@'''(,%%%''DLL(E4''..-<> T)FHJJ 	NN2A6$(D!		s7   A.D* 2D* D* D* %AD* <,D* *E5EEc                |    R V n         V P                  4        V P                   '       g   V P                  4        K$  R# )TN)ri   r   r   s   &r   handleBaseHTTPRequestHandler.handle  s3     $!'''##% (r   Nc                    V P                   V,          w  rEVf   TpVf   TpV P                  RW4       V P                  W4       V P	                  RR4       RpV^8  d   V\
        P                  \
        P                  \
        P                  39  d   V P                  RVR\        P                  ! VRR7      R	\        P                  ! VRR7      /,          pVP                  R
R4      pV P	                  RV P                  4       V P	                  R\        \        V4      4      4       V P!                  4        V P"                  R8w  d(   V'       d   V P$                  P'                  V4       R# R# R#   \         d    R R rT ELpi ; i)z???Nzcode %d, message %sr_   ra   codemessageFquoteexplainzUTF-8replacezContent-TypeContent-LengthHEAD)	responsesKeyErrorr   send_responsesend_headerr	   
NO_CONTENTRESET_CONTENTNOT_MODIFIEDerror_message_formathtmlescapeencodeerror_content_typerj   r\   r   rf   r   write)r   r   r   r   shortmsglongmsgbodycontents   &&&&    r   rt   !BaseHTTPRequestHandler.send_error  sY   $	- $t 4H ?G?G,d<4)w/
 CK..#11#002 2
 004;;we<4;;we<4 G
 >>'95D^T-D-DE-s3t9~><<6!dJJT" '+!=  	- %ug	-s   E6 6FFc                    V P                  V4       V P                  W4       V P                  R V P                  4       4       V P                  RV P	                  4       4       R# )ServerDateN)log_requestr   r   version_stringdate_time_stringr   r   r   s   &&&r   r   $BaseHTTPRequestHandler.send_response  sR     	.4#6#6#89!6!6!89r   c                <   V P                   R 8w  d   Vf.   WP                  9   d   V P                  V,          ^ ,          pMRp\        V R4      '       g   . V n        V P                  P	                  RV P
                  W3,          P                  RR4      4       R# R# )rN   Nr`   _headers_bufferz
%s %d %s
latin-1strict)rh   r   r   r   appendrv   r   r   s   &&&r   r   )BaseHTTPRequestHandler.send_response_only+  s    :->>)"nnT215G G4!233')$  ''**D:*;<BF!8=-. .r   c                f   V P                   R 8w  dM   \        V R4      '       g   . V n        V P                  P                  V: RV: R2P	                  RR4      4       VP                  4       R8X  d?   VP                  4       R8X  d
   RV n        R# VP                  4       R	8X  d
   R
V n        R# R# R# )rN   r   z: rP   r   r   
connectionra   Trb   FN)rh   r   r   r   r   r   ri   )r   keywordvalues   &&&r   r   "BaseHTTPRequestHandler.send_header9  s    :-4!233')$  ''!(%088HMO ==?l*{{}'(,%,.(-% / +r   c                    V P                   R 8w  d.   V P                  P                  R4       V P                  4        R# R# )rN   s   
N)rh   r   r   flush_headersr   s   &r   r   "BaseHTTPRequestHandler.end_headersG  s5    :-  ''0  .r   c                    \        V R 4      '       d>   V P                  P                  RP                  V P                  4      4       . V n        R# R# )r   r   N)r   r   r   joinr   r   s   &r   r   $BaseHTTPRequestHandler.flush_headersM  s>    4*++JJSXXd&:&:;<#%D  ,r   c                    \        V\        4      '       d   VP                  pV P                  R V P                  \        V4      \        V4      4       R# )z
"%s" %s %sN)
isinstancer	   r   log_messagerm   rj   )r   r   sizes   &&&r   r   "BaseHTTPRequestHandler.log_requestR  s@     dJ''::D))3t9c$i	Ar   c                .    V P                   ! V.VO5!   R # rB   )r   )r   formatargss   &&*r   r    BaseHTTPRequestHandler.log_error]  s     	'$'r   z\x02xz\\\c           	         W,          p\         P                  P                  V P                  4       : R V P	                  4       : RVP                  V P                  4      : R24       R# )z - - [z] 
N)sysstderrr   address_stringlog_date_time_string	translate_control_char_table)r   r   r   r   s   &&* r   r   "BaseHTTPRequestHandler.log_messagep  sP    ( -

--/335!++D,D,DEG 	Hr   c                J    V P                   R ,           V P                  ,           # ) )server_versionsys_versionr   s   &r   r   %BaseHTTPRequestHandler.version_string  s    ""S(4+;+;;;r   c                v    Vf   \         P                   ! 4       p\        P                  P                  VRR7      # )NT)usegmt)timeemailutils
formatdate)r   	timestamps   &&r   r   'BaseHTTPRequestHandler.date_time_string  s-    		I{{%%i%==r   c           	         \         P                   ! 4       p\         P                  ! V4      w	  r#rErgrp
R W@P                  V,          W%Wg3,          pV# )z%02d/%3s/%04d %02d:%02d:%02d)r   	localtime	monthname)r   nowyearmonthdayhhmmssxyzss   &           r   r   +BaseHTTPRequestHandler.log_date_time_string  sJ    iik04s0C-SbaA*^^E*Db.> >r   c                (    V P                   ^ ,          # )r/   )client_addressr   s   &r   r   %BaseHTTPRequestHandler.address_string  s     ""1%%r   HTTP/1.0)r   ri   rf   r   rx   rk   rh   rm   )NNrB   )-r  )MonTueWedThuFriSatSun)NJanFebMarAprMayJunJulAugSepOctNovDec)6r   r   r   r   r   r   rn   r   __version__r   DEFAULT_ERROR_MESSAGEr   DEFAULT_ERROR_CONTENT_TYPEr   rg   r   r   r   r   rt   r   r   r   r   r   r   r   rj   	maketrans	itertoolschainranger   ordr   r   r   r   weekdaynamer   r   rv   rz   r{   HTTPMessager~   r	   __members__valuesphrasedescriptionr   r"   r#   )cvr$   s   00@r   r   r      sh    R ckk//1!44K
 !;.N03 )l\$#J&3#j:..!&
	A( --'0uT{E$tDT'UV'U!2aW'UVX%*D	"H4<> DK;I& " ;;**L
 ''..00A 	
HHamm$$0II WHs   D2!D7c                      a a ] tR tRt oR],           tRtRRRRRRR	R
/;ttRR/V 3R llt	R t
R tR tR tR tR tR tRtVtV ;t# )r   i  zSimpleHTTP/z.gzzapplication/gzipz.Zapplication/octet-streamz.bz2zapplication/x-bzip2z.xzzapplication/x-xz	directoryNc                  < Vf   \         P                  ! 4       p\         P                  ! V4      V n        \        SV `  ! V/ VB  R # rB   )osgetcwdfspathr6  r4   r5   )r   r6  r   kwargsr8   s   &$*,r   r5   !SimpleHTTPRequestHandler.__init__  s6    		I9-$)&)r   c                    V P                  4       pV'       d/    V P                  WP                  4       VP                  4        R # R #   TP                  4        i ; irB   )	send_headcopyfiler   ra   r   fs   & r   do_GETSimpleHTTPRequestHandler.do_GET  sA    NNa,		  	s   A	 	Ac                Z    V P                  4       pV'       d   VP                  4        R # R # rB   )r>  ra   r@  s   & r   do_HEAD SimpleHTTPRequestHandler.do_HEAD  s    NNGGI r   c                   V P                  V P                  4      pR p\        P                  P                  V4      '       Ed\   \        P
                  P                  V P                  4      pVP                  P                  R4      '       g   V P                  \        P                  4       V^ ,          V^,          V^,          R,           V^,          V^,          3p\        P
                  P                  V4      pV P                  RV4       V P                  RR4       V P                  4        R # V P                   FK  p\        P                  P                  W4      p\        P                  P!                  V4      '       g   KI  Tp M	  V P#                  V4      # V P%                  V4      pVP                  R4      '       d#   V P'                  \        P(                  R4       R #  \+        VR4      p \        P.                  ! TP1                  4       4      pRT P2                  9   Ed?   RT P2                  9  Ed-    \4        P6                  P9                  T P2                  R,          4      p	T	P:                  f+   T	P=                  \>        P@                  PB                  R	7      p	T	P:                  \>        P@                  PB                  J d   \>        P>                  PE                  TPF                  \>        P@                  PB                  4      p
T
P=                  ^ R
7      p
Y8:  dB   T P                  \        PH                  4       T P                  4        TPK                  4        R # T P                  \        PT                  4       T P                  RT4       T P                  R\W        T^,          4      4       T P                  RT PY                  TPF                  4      4       T P                  4        T#   \,         d%    T P'                  \        P(                  R4        R # i ; i  \L        \N        \P        \R        3 d     Li ; i   TPK                  4        h ; i)NrQ   Locationr   0zFile not foundrbzIf-Modified-SincezIf-None-Match)tzinfo)microsecondContent-typezLast-Modified)rQ   z%2fz%2F)-translate_pathrx   r8  isdirurllibparseurlsplitendswithr   r	   MOVED_PERMANENTLY
urlunsplitr   r   index_pagesr   isfilelist_directory
guess_typert   	NOT_FOUNDopenOSErrorfstatfilenor   r   r   parsedate_to_datetimerK  r   datetimetimezoneutcfromtimestampst_mtimer   ra   	TypeErrorrs   OverflowErrorrp   OKrj   r   )r   rx   rA  parts	new_partsnew_urlindexctypefsims
last_modifs   &          r   r>  "SimpleHTTPRequestHandler.send_head  sK    ""499-77==LL))$))4E::&&':;;"":#?#?@"1XuQxqC"1XuQx1	 ,,11)<  W5  !137  "))T177>>%(( D	 * **400% ==OOJ002BC	T4 A
'	!((*%B#t||3't||;(++;;%89;C zz) "kk1B1B1F1FkGzzX%6%6%:%::%-%6%6%D%DKK):):)>)>&@
 &0%7%7A%7%F
%, ..z/F/FG ,,.GGI#'z}}-^U3-s2a5z:_%%bkk24HQ  	OOJ002BC	 ":}jI 8	GGIsK   *O; 7AQ  0P- 0C9Q +BQ ;+P*)P*-QQ 
QQ Q!c                    \         P                  ! V4      pTP                  R R7       . pT P                  pTP                  R^4      ^ ,          pTP                  R^4      ^ ,          p \        P                  P                  TRR7      p\        P                  ! TRR	7      p\        P                   ! 4       pR
T 2pTP#                  R4       TP#                  R4       TP#                  R4       TP#                  RT R24       TP#                  R4       TP#                  RT R24       TP#                  RT R24       TP#                  R4       T F  p\         P                  P%                  Y4      pT;r\         P                  P'                  T4      '       d   TR,           p	TR,           p
\         P                  P)                  T4      '       d
   TR,           p	TP#                  R\        P                  P+                  T
RR7      : R\        P                  ! T	RR	7      : R24       K  	  TP#                  R4       RP%                  T4      P-                  TR4      p\.        P0                  ! 4       pTP3                  T4       TP5                  ^ 4       T P7                  \        P8                  4       T P;                  RRT,          4       T P;                  R\=        \?        T4      4      4       T PA                  4        T#   \         d%    T P                  \        P
                  R 4        R# i ; i  \         d$    \        P                  P                  T4      p ELi ; i) zNo permission to list directoryNc                 "    V P                  4       # rB   )r   )as   &r   <lambda>9SimpleHTTPRequestHandler.list_directory.<locals>.<lambda>I  s
    	r   )key#?surrogatepasserrorsFr   zDirectory listing for z<!DOCTYPE HTML>z<html lang="en">z<head>z<meta charset="z">zD<style type="text/css">
:root {
color-scheme: light dark;
}
</style>z<title>z</title>
</head>z<body>
<h1>z</h1>z	<hr>
<ul>rQ   @z<li><a href="z	</a></li>z</ul>
<hr>
</body>
</html>
r   surrogateescaperM  ztext/html; charset=%sr   )!r8  listdirr\  rt   r	   rZ  sortrx   rn   rP  rQ  unquoteUnicodeDecodeErrorr   r   r   getfilesystemencodingr   r   rO  islinkr   r   ioBytesIOr   seekr   rg  r   rj   r\   r   )r   rx   listrdisplaypathenctitlenamefullnamedisplaynamelinknameencodedrA  s   &&           r   rX  'SimpleHTTPRequestHandler.list_directory:  s   	::d#D 			)	*ii!''Q/2!''Q/2	< ,,..{6E / GK kk+U;'')(6	"#	#$		?3%r*+	[\	75'!234	<we,-	Dww||D/H%))Kww}}X&&"Sj#:ww~~h''"SjHH||))(1@ * B{{;e<> ?  	
23))A,%%c+<=JJL		q	:==))@3)FG)3s7|+<=c  	OO$$13 		 " 	< ,,..{;K	<s#   L	 ,!L; 	+L87L8;*M)(M)c                   VP                  R ^4      ^ ,          pVP                  R^4      ^ ,          p \        P                  P                  VRR7      pVP                  R4      p\        P                  ! V4      pVP                  R4      p\        RV4      pV P                  pV Fn  p\        P                  P                  V4      '       g&   V\        P                  \        P                  39   d   KO  \        P                  P                  W4      pKp  	  V'       d
   VR,          pV#   \         d$    \        P                  P                  T4      p ELi ; i)rw  rx  ry  rz  rQ   N)rn   rP  rQ  r  r  rS  	posixpathnormpathfilterr6  r8  rx   dirnamecurdirpardirr   )r   rx   trailing_slashr   words   &&   r   rN  'SimpleHTTPRequestHandler.translate_pathw  s    zz#q!!$zz#q!!$	.<<''_'ED s+!!$'

3tU#~~Dwwt$$BII0F(F77<<+D	 
 CKD " 	.<<''-D	.s   !D, ,*EEc                2    \         P                  ! W4       R # rB   )shutilcopyfileobj)r   source
outputfiles   &&&r   r?  !SimpleHTTPRequestHandler.copyfile  s     	6.r   c                &   \         P                  ! V4      w  r#W0P                  9   d   V P                  V,          # VP                  4       pW0P                  9   d   V P                  V,          # \        P
                  ! V4      w  rEV'       d   V# R # )r5  )r  splitextextensions_mapr   	mimetypesguess_file_type)r   rx   baseextguess_s   &&    r   rY  #SimpleHTTPRequestHandler.guess_type  sx     &&t,	%%%&&s++iik%%%&&s++,,T2L)r   r6  )z
index.htmlz	index.htm)r   r   r   r   r$  r   rV  r  _encodings_map_defaultr5   rB  rE  r>  rX  rN  r?  rY  r"   r#   rJ   rK   s   @@r   r   r     st      #[0N-K!(%!	/ N+* *Vp;z</ * *r   c                 :   V P                  R 4      w  rp\        P                  P                  V 4      p V P	                  R4      p. pVRR  F@  pVR8X  d   VP                  4        K  V'       g   K&  VR8w  g   K/  VP                  V4       KB  	  V'       d=   VP                  4       pV'       d$   VR8X  d   VP                  4        RpMVR8X  d   RpMRpV'       d   R P                  Wb34      pRRP                  V4      ,           V3pRP                  V4      pV# )rx  rQ   Nz..rR   r`   rd   )	partitionrP  rQ  r  rn   popr   r   )	rx   r  query
path_parts
head_partspart	tail_part	splitpathcollapsed_paths	   &        r   _url_collapse_pathr    s     ^^C(NDU<<%D CJJ3B4<NNTdckt%	  
 NN$	D  	c!		HHi/0	sxx
++Y7IXXi(Nr   c                     \         '       d   \         #  ^ RIp  T P                  R4      ^,          s \         #   \         d    Ru # i ; i  \         d0    ^\        R T P                  4        4       4      ,           s  \         # i ; i)r/   Nnobodyc              3   2   "   T F  q^,          x  K  	  R# 5i)r   Nr&   )rV   r  s   & r   rX   nobody_uid.<locals>.<genexpr>  s     6~!1~s   rd   )r  pwdr1   getpwnamr   maxgetpwall)r  s    r   
nobody_uidr    s{     v7h'* M  	  7S6s||~666M7s    7 A
 AA
2BBc                 L    \         P                  ! V \         P                  4      # rB   )r8  accessX_OK)rx   s   &r   
executabler    s    99T277##r   c                   t   a a ] tR tRt oV 3R lt]! ]R4      t^ tR t	R t
R tRR.tR	 tR
 tR tRtVtV ;t# )r   i  c                V   < ^ RI pVP                  RRR7       \        SV `  ! V/ VB  R# )r/   Nz!http.server.CGIHTTPRequestHandler)remove)      )warnings_deprecatedr4   r5   )r   r   r;  r  r8   s   &*, r   r5   CGIHTTPRequestHandler.__init__  s1    @$+ 	 	-$)&)r   forkc                    V P                  4       '       d   V P                  4        R# V P                  \        P                  R 4       R# )zCan only POST to CGI scriptsN)is_cgirun_cgirt   r	   r   r   s   &r   do_POSTCGIHTTPRequestHandler.do_POST  s0     ;;==LLNOO**.0r   c                x    V P                  4       '       d   V P                  4       # \        P                  V 4      # rB   )r  r  r   r>  r   s   &r   r>  CGIHTTPRequestHandler.send_head-  s*    ;;==<<>!+55d;;r   c                    \        V P                  4      pVP                  R ^4      pV^ 8  d0   VRV V P                  9   g   VP                  R V^,           4      pK6  V^ 8  d   VRV W^,           R rCW43V n        R# R# )rQ   NTF)r  rx   findcgi_directoriescgi_info)r   r  dir_sepheadtails   &    r   r  CGIHTTPRequestHandler.is_cgi4  s     ,DII6 %%c1-k.'":d>R>R"R$))#wqy9GQ;'1>!)*3M$ JDMr   z/cgi-binz/htbinc                    \        V4      # rB   )r  )r   rx   s   &&r   is_executable#CGIHTTPRequestHandler.is_executableP  s    $r   c                j    \         P                  P                  V4      w  r#VP                  4       R9   # ).py)r  z.pyw)r8  rx   r  r   )r   rx   r  r  s   &&  r   	is_pythonCGIHTTPRequestHandler.is_pythonT  s)    WW%%d+
zz|..r   c                   V P                   w  rVR ,           V,           pVP                  R \        V4      ^,           4      pV^ 8  dn   VRV pW4^,           R pV P                  V4      p\        P
                  P                  V4      '       d'   YVr!VP                  R \        V4      ^,           4      pKs   VP                  R4      w  r(p	VP                  R 4      pV^ 8  d
   VRV W$R r*MTRr*VR ,           V
,           pV P                  V4      p\        P
                  P                  V4      '       g*   V P                  \        P                  RV,          4       R# \        P
                  P                  V4      '       g*   V P                  \        P                  RV,          4       R# V P                  V4      pV P                  '       g	   V'       gA   V P!                  V4      '       g*   V P                  \        P                  RV,          4       R# \"        P$                  ! \        P&                  4      pV P)                  4       VR&   V P*                  P,                  VR&   R	VR
&   V P.                  VR&   \1        V P*                  P2                  4      VR&   V P4                  VR&   \6        P8                  P;                  V4      pWR&   V P                  V4      VR&   WR&   WR&   V P<                  ^ ,          VR&   V P>                  PA                  R4      pV'       d   VPC                  4       p\        V4      ^8X  d   ^ RI"p^ RI#pV^ ,          VR&   V^ ,          PI                  4       R8X  dg    V^,          PK                  R4      pVPM                  V4      PO                  R4      pVPC                  R4      p\        V4      ^8X  d   V^ ,          VR&   V P>                  PA                  R4      f   V P>                  PU                  4       VR&   MV P>                  R,          VR&   V P>                  PA                  R4      pV'       d   VVR&   V P>                  PA                  R4      pV'       d   VVR&   V P>                  PW                  RR44      pR PY                  V4      VR!&   V P>                  PA                  R"4      pV'       d   VVR#&   \[        RV P>                  PW                  R$. 4      4      pR%PY                  V4      pV'       d   VVR&&   R5 F  pVP]                  VR4       K  	  V P_                  \        P`                  R'4       V Pc                  4        V	Pe                  R(R)4      pV P                  '       Ed   V
.pR*V9  d   VPg                  V4       \i        4       pV Pj                  Pm                  4        \        Pn                  ! 4       pV^ 8w  d   \        Pp                  ! V^ 4      w  pp\r        Pr                  ! V Pt                  .. . ^ 4      ^ ,          '       d%   V Pt                  Pw                  ^4      '       d   KT   \        Px                  ! V4      pV'       d   V P{                  R+V 24       R#   \        P|                  ! V4       \        P                  ! V Pt                  P                  4       ^ 4       \        P                  ! V Pj                  P                  4       ^4       \        P                  ! VVV4       R# ^ RIFp V.p!V P                  V4      '       dP   \        P                  p"V"PI                  4       P                  R,4      '       d   V"RR6 V"R7R ,           p"V"R-.V!,           p!R*V	9  d   V!Pg                  V	4       V P                  R.V P                  V!4      4        \        V4      p#V P                  V!V P                  V P                  V P                  VR/7      p$V P4                  PI                  4       R08X  d$   V#^ 8  d   V Pt                  Pw                  V#4      p%MRp%\r        Pr                  ! V Pt                  P                  .. . ^ 4      ^ ,          '       d/   V Pt                  P                  P                  ^4      '       d   Kh   V$P                  V%4      w  p&p'V Pj                  P                  V&4       V''       d   V P{                  R1V'4       V$P                  P                  4        V$P                  P                  4        V$P                  p(V('       d   V P{                  R2V(4       R# V P                  R34       R#   TPP                  \R        3 d     ELi ; i  \~         d     ELi ; i   T P*                  P                  T P                  T P<                  4       \        P                  ! ^4        R# ; i  \        \        3 d    ^ p# EL-i ; i)8rQ   Nrx  r`   zNo such CGI script (%r)z#CGI script is not a plain file (%r)z!CGI script is not executable (%r)SERVER_SOFTWARESERVER_NAMEzCGI/1.1GATEWAY_INTERFACESERVER_PROTOCOLSERVER_PORTREQUEST_METHOD	PATH_INFOPATH_TRANSLATEDSCRIPT_NAMEQUERY_STRINGREMOTE_ADDRauthorization	AUTH_TYPEbasicascii:REMOTE_USERzcontent-typeCONTENT_TYPEzcontent-lengthCONTENT_LENGTHrefererHTTP_REFERERaccept,HTTP_ACCEPTz
user-agentHTTP_USER_AGENTcookiez, HTTP_COOKIEzScript output follows+r   =zCGI script exit code zw.exez-uzcommand: %s)stdinstdoutr   envpostz%szCGI script exit status %#xzCGI script exited OKr&   )r  REMOTE_HOSTr  r  r   r  )Yr  r  r\   rN  r8  rx   rO  r  existsrt   r	   rZ  rW  	FORBIDDENr  	have_forkr  copydeepcopyenvironr   serverr   rv   rj   r   rf   rP  rQ  r  r  r   r   rn   base64binasciir   r   decodebytesdecodeErrorUnicodeErrorget_content_typeget_allr   r  
setdefaultr   rg  r   r   r   r  r   r   r  waitpidselectr}   readwaitstatus_to_exitcoder   setuidr\  dup2r^  execvehandle_errorrequest_exit
subprocessr   r  rS  r   list2cmdlinerr   re  rp   PopenPIPE_sockrecvcommunicater   r   ra   r  
returncode))r   dirrestrx   inextdirnextrest	scriptdirr  r  script
scriptname
scriptfileispyr  uqrestr  r  r  lengthr  r  uaco
cookie_strkdecoded_queryr   r  pidstsexitcoder$  cmdlineinterpnbytespdatar  r   statuss)   &                                        r   r  CGIHTTPRequestHandler.run_cgiY  s   MM	Sy4IIc3s8A:&1f2AhGaCDzH++G4Iww}}Y''#TIIc3s8A:. , IIcN68T"XDD3Y'
((4
ww~~j))OO$$)J68 ww~~j))OO$$5
BD ~~j)>>>%%j11((7*DF  mmBJJ'!%!4!4!6![[44M#, !%!6!6 !8!89M $%%d+!K!%!4!4V!<'M#N!003M((9)//1M=!Q&'#0#3K  #))+w6	B(5a(8(?(?(H(.(:(:=(I(.w &
 )6(;(;C(@}-21>q1AC.<<N+3"&,,"?"?"AC"&,,~">C!!"23$*C !,,""9-")C%%h3 XXf-M\\l+%'C!"D$,,..x<=YYr]
!+CDANN1b!D 	:==*ABc3/>>>8D-'M*\FJJ'')Cax::c1-SmmTZZL"b!<Q??::??1--44S9NN%:8*#EF
IIf% 

))+Q/

))+Q/		*dC0 !lG~~j))<<>**733#CR[6"#;6F!4.72%u%]J,C,CG,LMV   '1(2(2'*	 ! #A ||!!#v-&1*zzv.--!1!1 2BA>qAAzz'',,Q//]]40NFFJJV$tV,HHNNHHNN\\F;VD  !78_ %NNL9 z  
((t7J7JK" z* sP   38e e< A6f :g e98e9<ff 
ff Agg32g3)r  )r   r   r   r   r5   r   r8  r  rbufsizer  r>  r  r  r  r  r  r"   r#   rJ   rK   s   @@r   r   r     sP     * F#I H0<4 "8,O /
x9 x9r   c                      \         P                  ! V R \         P                  R\         P                  / p\	        \        V4      4      w  r#rEpW&3# )typeflags)r   getaddrinfoSOCK_STREAM
AI_PASSIVEnextiter)addressinfosfamilyrI  proto	canonnamesockaddrs   *      r   _get_best_familyrV    sS    	 E
 04DK/@,F%Hr   r  i@  c                    \        WC4      w  Vn        pW n        V'       d   V! WVWgR 7      p	MV! W4      p	T	;_uu_ 4       p
V
P                  P	                  4       R,          w  rRV9   d   RV R2MTpV'       d   RMRp\        RV RV R	V R
VP                  4        RV RV R24        V
P                  4        RRR4       R#   \         d%    \        R4       \        P                  ! ^ 4        L8i ; i  + '       g   i     R# ; i))r3   r+   r,   r   r  []HTTPSHTTPzServing z on z port z (z://z/) ...z&
Keyboard interrupt received, exiting.N)rV  address_familyrv   r   getsocknameprintr   serve_foreverKeyboardInterruptr   exit)HandlerClassServerClassprotocolr   bindtls_certtls_keytls_passwordaddrr  httpdr   url_hosts   &&&&&&&&     r   testrl    s    (8'C$K$,!T(%,E T0	5\\--/3
"%+QtfA;4&7FxjTF& 7 !XJavV=	
	! 
 ! 	;<HHQK	 
s0    :C8;0C8,C,C52C84C55C88D		__main__T)colorz--cgi
store_truezrun as CGI server)actionhelpz-bz--bindADDRESSz.bind to this address (default: all interfaces))metavarrq  z-dz--directoryz1serve this directory (default: current directory))defaultrq  z-pz
--protocolVERSIONz3conform to this HTTP version (default: %(default)s))rs  rt  rq  z
--tls-certPATHz&path to the TLS certificate chain filez	--tls-keyzpath to the TLS key filez--tls-password-filez)path to the password file for the TLS keyr   rx  z(bind to this port (default: %(default)s))rt  rI  nargsrq  z'--tls-key requires --tls-cert to be setz1--tls-password-file requires --tls-cert to be setr  zutf-8)encodingz"Failed to read TLS password file: c                   8   a a ] tR tRt oV 3R ltR tRtVtV ;t# )DualStackServerMixinin  c                  < \         P                  ! \        4      ;_uu_ 4        V P                  P	                  \        P
                  \        P                  ^ 4       RRR4       \        SV `!  4       #   + '       g   i     L; i)r/   N)	
contextlibsuppress	Exceptionr   
setsockoptIPPROTO_IPV6IPV6_V6ONLYr4   r   )r   r8   s   &r   r    DualStackServerMixin.server_bindp  sX    $$Y//&&''););Q@ 0 7&(( 0/s   :A44B	c                J    V P                  WV \        P                  R 7       R# )r  N)r6   r   r6  )r   r"  r  s   &&&r   finish_request#DualStackServerMixin.finish_requestw  s     $$Wd/3~~ % ?r   r&   )	r   r   r   r   r   r  r"   r#   rJ   rK   s   @@r   rz  rz  n  s     	)	? 	?r   rz  c                       ] tR tRtRtR# )HTTPDualStackServeri{  r&   Nr   r   r   r   r"   r&   r   r   r  r  {      r   r  c                       ] tR tRtRtR# )HTTPSDualStackServeri}  r&   Nr  r&   r   r   r  r  }  r  r   r  )rb  rc  r   re  rd  rf  rg  rh  )r   r   r   r   r   r   r   )Gr$  __all__r  r`  email.utilsr   r   http.clientrz   r  r(  r  r8  r  r  r  r   r   r   r   urllib.parserP  r	   r%  r&  r   r   ThreadingMixInr   r   r   StreamRequestHandlerr   r   r  r  r  r  r   rV  rl  r   argparser|  ArgumentParserparseradd_argumentr9  rr   
parse_argsr   rf  rg  errortls_key_passwordtls_password_filer[  rA  r  stripr\  r   cgihandler_classrz  r  r  rc  r   re  rd  r&   r   r   <module>r     so  f       	   	      
    * 7 
 '' 
 ,55z "* "J<66 q\>> qhE*5 E*T,` 
 $
I94 I9X -(4d4@ z$$40F
0  2
h	9  : mRYY[<  = lI *6  7 fE  G
V7  9
-vH  J
3c6  7 D===T\\\>?}}}LLLM	Cd,,cGDD#$668>>#3  E
 xxx-0? ?24G 35I  +/---&=PK"YYYY%	I J ED 	CLL=aSABB	Cs6   <L( L8L( L%	 L( %L( (M/MM