+
     hz c                   sZ   ^ RI t ^ RIHt ^ RIt^ RIt^ RIH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IHtHtHtHtH t H!t!H"t"H#t#H$t$H%t%H&t&H't'H(t(H)t)H*t*H+t+H,t,H-t-H.t.H/t/ ]
P`                  ! ]14      t2]Pf                  ! R4      t4]Pf                  ! R4      t5]Pf                  ! R4      t6]Pf                  ! R	4      t7]Pf                  ! R
4      t8]Pf                  ! R4      t9]Pf                  ! R4      t:]Pf                  ! R4      t;R t<R t=R t>R t?R t@RhR ltAR tBR tCR tD]P                  R 4       tF]P                  R 4       tG]P                  RiR l4       tH ! R R]I4      tJR tK ! R R]I4      tLR tM ! R  R!]I4      tN]Pf                  ! R"]P                  4      tPR# tQRjR$ ltRRkR% ltSR& tTR' tUR( tVR) tW]Pf                  ! R*]P                  4      tY]Pf                  ! R+4      tZRjR, lt[]Pf                  ! R-4      t\R. t]R/ t^R0 t_R1t`R2 taR3 tb ! R4 R5]I4      tc ! R6 R7]I4      td ! R8 R9]I4      teRltfRmR: ltgR; thRnti ! R< R=]I4      tj]Pf                  ! R>4      tk]Pf                  ! R?4      tl]Pf                  ! R@4      tmRA tRB tn]'       d7   ^RCIHotpHqtqHrtr  ! RD RE]$P                  4      ts ! RF RG]p4      to ! RH RI]o]&4      tt ! RJ RK]%P                  4      tu]'       d    ! RL RM]%P                  4      tv ! RN RO]%P                  4      twRP tx ! RQ RR]I4      ty ! RS RT]y4      tz ! RU RV]y4      t{ ! RW RX]'4      t| ! RY RZ]I4      t}R[ t~ ! R\ R]]I4      tR^ tR_ tR` tRaRbRcRdReRf/tRg tR#   ] d    Rt EL]i ; i  ] d	    ^ RIt ELVi ; i)o    N)deque)iglob)DistlibException)string_types	text_typeshutil	raw_inputStringIOcache_from_sourceurlopenurljoinhttplib	xmlrpclibHTTPHandlerBaseConfiguratorvalid_ident	ContainerconfigparserURLErrorZipFilefsdecodeunquoteurlparsez^([\w\.-]+)\s*z^([\w\.*+-]+)\s*z^(<=?|>=?|={2,3}|[~!]=)\s*z*^((<=?)|(>=?)|={2,3}|[~!]=|in|not\s+in)\s*z^or\b\s*z	^and\b\s*z(\S+)\s*z(([\s\w\.{}()*+#:;,/?!~`@$%^&=|<>\[\]-]+)c                sF   aaaa R oVV3R loV3R loV3R loS! V 4      # )aM  
Parse a marker string and return a dictionary containing a marker expression.

The dictionary will contain keys "op", "lhs" and "rhs" for non-terminals in
the expression grammar, or strings. A string contained in quotes is to be
interpreted as a literal string, and a string not contained in quotes is a
variable (such as os_name).
c                 sL   \         P                  V 4      pV'       d-   VP                  4       ^ ,          pWP                  4       R p W 3# V '       g   \	        R4      hV ^ ,          pVR9  d   \	        RV ,          4      hRP                  VR4      pV R,          p V.pV '       d   V ^ ,          V8X  d   MV ^ ,          V8X  d   VP                  V4       V R,          p KA  \        P                  V 4      pV'       g   \	        RV ,          4      hVP                  VP                  4       ^ ,          4       WP                  4       R p K  RP                  V4      p\	        RV,          4      hVP                  V4       RP                  V4      pV R,          P                  4       p W 3# )	r    Nzunexpected end of inputz'"zinvalid expression: %s    NNzerror in string literal: %szunterminated string: %s)

IDENTIFIERmatchgroupsendSyntaxErrorreplaceappendSTRING_CHUNKjoinlstrip)	remainingmresultZqZoqpartss   &      =/usr/lib/python3.14/site-packages/pip/_vendor/distlib/util.py
marker_varZ parse_marker.<locals>.marker_var@   s_   Y'XXZ]F!%%'(+I:   9 788!A~!":Y"FGGq"%B!"ICEQ<1$q\R'LL$ )"I$**95A)*G)*STTLLA/ )%%'( 3IGGEN!";a"?@@LLOWWU^F!",,.I      c                 s  < V '       dh   V ^ ,          R8X  dZ   S! V R,          P                  4       4      w  rV ^ ,          R8w  d   \        RV ,          4      hV R,          P                  4       p W3# S! V 4      w  r V '       d\   \        P                  V 4      pV'       g   M=VP	                  4       ^ ,          pWP                  4       R p S! V 4      w  rPRVRVRV/pKc  TpW3# )	r    (r   )unterminated parenthesis: %sNoplhsrhs)r$   r   	MARKER_OPr   r   r   )r%   r'   r2   r&   r1   r3   markerr,   s   &     r+   marker_exprZ!parse_marker.<locals>.marker_exprd   s    1, &y}';';'= >F|s"!"@9"LMM!",,.I    (	2NCOOI.XXZ]%eegh/	!+I!6RUC8F  r-   c                    < S! V 4      w  rV '       dH   \         P                  V 4      pV'       g    W3# WP                  4       R  p S! V 4      w  r0RRRVRV/pKO  W3# )Nr1   Zandr2   r3   )ANDr   r   )r%   r2   r&   r3   r6      &   r+   
marker_andZ parse_marker.<locals>.marker_andw   sh    $Y/		)$A ~ "%%'(+I(3NCsE37C~r-   c                 r7   )Nr1   Zorr2   r3   )ORr   r   )r%   r2   r&   r3   r:   r9   r+   r5   Zparse_marker.<locals>.marker   sh    #I.#A ~ "%%'(+I'	2NCuc5#6C~r-    )Zmarker_stringr5   r:   r6   r,   s   &@@@@r+   parse_markerr=   6   s%    "!H!&		 -  r-   c           	     s   V P                  4       pV'       d   VP                  R4      '       d   R# \        P                  V4      pV'       g   \	        RV,          4      hVP                  4       ^ ,          pWP                  4       R pR;p;p;rgV'       Ed   V^ ,          R8X  Ed   VP                  R^4      pV^ 8  d   \	        RV,          4      hV^V p	W^,           R P                  4       p. pV	'       d   \        P                  V	4      pV'       g   \	        RV	,          4      hVP                  VP                  4       ^ ,          4       WP                  4       R p	V	'       g   M9V	^ ,          R8w  d   \	        R	V	,          4      hV	R
,          P                  4       p	K  V'       g   RpV'       Ed   V^ ,          R8X  d   VR
,          P                  4       p\        P                  V4      pV'       g   \	        RV,          4      hVP                  4       ^ ,          p\        V4      p
V
P                  '       d   V
P                  '       g   \	        RV,          4      hWP                  4       R P                  4       pEMR pV^ ,          R8w  d   V! V4      w  raMVP                  R^4      pV^ 8  d   \	        RV,          4      hV^V p	W^,           R P                  4       p\        P                  V	4      '       d   V! V	4      w  rlM\        P                  V	4      pV'       g   \	        RV	,          4      hVP                  4       ^ ,          pWP                  4       R P                  4       p	V	'       d   \	        RV	,          4      hRV3.pV'       dE   V^ ,          R8w  d   \	        RV,          4      hVR
,          P                  4       p\!        V4      w  rQV'       d!   V^ ,          R8w  d   \	        RV,          4      hV'       g   TpM/V: RRP#                  V Uu. uF  pRV,          NK  	  up4      : 2p\%        W4WeW~R7      # u upi )z~
Parse a requirement passed in as a string. Return a Container
whose attributes contain the various parts of the requirement.
Z#Nzname expected: %s[]zunterminated extra: %szmalformed extra: %s,zcomma expected in extras: %sr   @zinvalid URI: %szInvalid URL: %sc                sX   \         P                  V 4      pRpV'       Ed	   . p VP                  4       ^ ,          pWP                  4       R p \        P                  V 4      pV'       g   \        RV ,          4      hVP                  4       ^ ,          pVP                  W434       WP                  4       R p V '       d   V ^ ,          R8w  d   MQV R,          P                  4       p V '       g   M1\         P                  V 4      pV'       d   K  \        RV ,          4      hV'       g   RpW 3# )zL
Return a list of operator, version tuples if any are
specified, else None.
Nzinvalid version: %sr@   r   invalid constraint: %s)
COMPARE_OPr   r   r   VERSION_IDENTIFIERr   r!   r$   )Zver_remainingr&   versionsr1   vs   &    r+   get_versionsZ'parse_requirement.<locals>.get_versions   s    
 $$]31!HXXZ](5eegh(?.44]C "-.Cm.S"TTHHJqM 0(5eegh(?,a0@C0G!(5b(9(@(@(B  -!&,,]; q"-.F.V"WW##'..r-   r.   r/   r0   rB   z~=;zinvalid requirement: %szunexpected trailing data: %s , z%s %s)nameextrasZconstraintsr5   urlZrequirement)strip
startswithr   r   r   r   r   Zfindr$   r!   	NON_SPACEr   schemenetlocrC   rD   r=   r#   r   )reqr%   r&   ZdistnamerL   Z	mark_exprrE   uriir)   trG   _rF   ZrsZcons   &               r+   parse_requirementrX      s   
 		I	,,S11#A-	9::xxz!}H%%'(#I*..F.Y.yYq\S(NN3"q56BCCaN!ef%,,.	  #A!"7!";<<MM!((*Q-(%%'(Ats{!"@1"DEE"AFyQ<3!",,.I	*A!"3i"?@@((*Q-CA
 HHH!"3c"9::!%%'(+224I/@ |s"&29&=#)NN3*q5%&Dy&PQQaN%!ef-446	 ##A&&".q/KHa*003A)*BQ*FGG
1A%%'(**,A)*BQ*FGG!%q	{HQ<37)CDDbM((*	+I6	Yq\S(89DEE $))h,OhsWs]]h,O"PQ(x_bss -Ps   (Qc                s   R p/ pV F  w  rEp\         P                  P                  W4      p\        V4       F  p\         P                  P                  W4      p	\        V	4       Fv  p
V! W
4      pVf   VP	                  VR4       K#  V! W4      pVP                  \         P                  P                  R4      P                  R4      pVR,           V,           W;&   Kx  	  K  	  K  	  V# )z%Find destinations for resources filesc                 s   V P                  \        P                  P                  R 4      p VP                  \        P                  P                  R 4      pVP	                  V 4      '       g   Q hV\        V 4      R P                  R 4      # )/N)r    ospathseprO   lenr$   )rootr[      &&r+   get_rel_pathZ)get_resources_dests.<locals>.get_rel_path  sc    ||BGGKK-||BGGKK-t$$$$CIJ&&s++r-   NrY   )rZ   r[   r#   r   popr    r\   Zrstrip)Zresources_rootZrulesr`   ZdestinationsbasesuffixdestprefixZabs_baseZabs_globZabs_pathZresource_fileZrel_pathZrel_dests   &&            r+   get_resources_destsrf     s    , L#dn3fHww||H5H!(O ,^ F< $$]D9+H?H#||BGGKK=DDSIH2:S.82KL/ , & $ r-   c                  s    \        \        R 4      '       d   Rp V # \        P                  \        \        R\        P                  4      8g  p V # )Zreal_prefixTZbase_prefix)hasattrsysre   getattrr'       r+   in_venvrl   &  s=    sM"" M wsM3::FFMr-   c                  sh    \         P                  p \        V \        4      '       g   \	        V 4      p V # N)rh   Z
executable
isinstancer   r   rj   rk   r+   get_executablero   0  s)     ^^Ffi((&!Mr-   c                 s    T p \        V4      pT pV'       g   V'       d   TpV'       g   K*  V^ ,          P                  4       pWa9   d    V# V'       g   KT  RWbV 3,          pKa  )Tz	%c: %s
%s)r   lower)ZpromptZallowed_charsZerror_promptdefaultpr)   cs   &&&&   r+   proceedrt   B  s\    A
aLWA1!

A! H | AV#<<r-   c                 s    \        V\        4      '       d   VP                  4       p/ pV F  pW09   g   K  W,          W#&   K  	  V# rm   )rn   r   split)dZkeysr'   key   &&  r+   extract_by_keyry   R  s>    $%%zz|F8&FK  Mr-   c                 s   \         P                  ^ ,          ^8  d   \        P                  ! R4      ! V 4      p V P	                  4       p\        V4      p  \        P                  ! V 4      pVR,          R,          R,          pVP                  4        F<  w  rEVP                  4        F#  w  rgV: RV: 2p\        V4      p	V	f   Q hWV&   K%  	  K>  	  V#   \         d    T P                  ^ ^ 4        Mi ; iR p
\        P                  ! 4       p T
! Y4       MT  \        P                   d=    T P                  4        \         P"                  ! T4      p\        T4      p T
! Y4        Mi ; i/ pTP%                  4        FA  p/ ;Y<&   pTP                  T4       F#  w  rT: RT: 2p\        T4      p	T	f   Q hYT&   K%  	  KC  	  T# )r    utf-8Z
extensionszpython.exportsexports = c                 sr    \        V R 4      '       d   V P                  V4       R# V P                  V4       R# )	read_fileN)rg   r}   Zreadfp)cpstreamr_   r+   read_streamZ!read_exports.<locals>.read_streamp  s'    2{##LL IIfr-   )rh   version_infocodecs	getreaderreadr   jsonloaditemsget_export_entry	ExceptionZseekr   ConfigParserZMissingSectionHeaderErrorclosetextwrapZdedentsections)r   dataZjdatar'   groupZentrieskrF   r)   entryr   r~   rw   rK   values   &              r+   read_exportsr   \  s   
a!!'*62;;=Dd^F		&!|$%56yA$llnNE!"A&(+((("
	 ( -  Aq 
	"	"	$B B11  t$$B	  F{{} ""g88C=KD!5)A$Q'E$$$!DM )  Ms&   A>C C43C4D AE*)E*c                 sV   \         P                  ^ ,          ^8  d   \        P                  ! R4      ! V4      p\        P
                  ! 4       pV P                  4        F  w  r4VP                  V4       VP                  4        F  pVP                  f   VP                  pMVP                  : RVP                  : 2pVP                  '       d$   V: RRP                  VP                  4      : R2pVP                  W5P                  V4       K  	  K  	  VP                  V4       R# )r    rz   N:z [rJ   r?   )rh   r   r   Z	getwriterr   r   r   add_sectionZvaluesrc   re   flagsr#   setrK   write)r{   r   r~   r   rF   r   r)      &&     r+   write_exportsr     s    
a!!'*62		"	"	$B
qXXZE||#LL$||U\\:{{{!"DIIekk$:;FF1jj!$     HHVr-   c               #   s   "   \         P                  ! 4       p  V x  \        P                  ! V 4       R #   \        P                  ! T 4       i ; i5irm   )tempfilemkdtempr   rmtree)Ztdrk   r+   tempdirr     s5     				Bbbs   A5 AAAc              #      "   \         P                  ! 4       p \         P                  ! V 4       R x  \         P                  ! V4       R #   \         P                  ! T4       i ; i5irm   )rZ   getcwdchdir)rv   Zcwd   & r+   r   r     s9     
))+C

   A&A A&A##A&c              #   r   rm   )socketZgetdefaulttimeoutZsetdefaulttimeout)ZsecondsZctor   r+   socket_timeoutr     sE     

"
"
$C&  )  %  %r   c                   s0   a  ] tR tRt o R tRR ltRtV tR# )cached_propertyi  c                s    Wn         R # rm   func)selfr   r_   r+   __init__Zcached_property.__init__  s    	r-   Nc                s    Vf   V # V P                  V4      p\        P                  WP                   P                  V4       V# rm   )r   objectZ__setattr____name__)r   ZobjZclsr      &&& r+   __get__Zcached_property.__get__  s8    ;K		#3		 2 2E:r-   r   rm   )r   
__module____qualname____firstlineno__r   r   __static_attributes____classdictcell____classdict__   @r+   r   r     s     
 r-   r   c                s   \         P                  R8X  d   V # V '       g   V # V ^ ,          R8X  d   \        RV ,          4      hV R,          R8X  d   \        RV ,          4      hV P                  R4      p\         P                  V9   d"   VP                  \         P                  4       K6  V'       g   \         P                  # \         P                  P                  ! V!  # )a  Return 'pathname' as a name that will work on the native filesystem.

The path is split on '/' and put back together again using the current
directory separator.  Needed because filenames in the setup script are
always supplied in Unix style, and have to be converted to the local
convention before we can actually use them in the filesystem.  Raises
ValueError on non-Unix-ish systems if 'pathname' either starts or
ends with a slash.
rY   zpath '%s' cannot be absolutezpath '%s' cannot end with '/')rZ   r\   
ValueErrorru   Zcurdirremover[   r#   )ZpathnameZpathsr   r+   convert_pathr     s     
vv}{c7(BCC|s88CDDNN3E
))u
RYYyy77<<r-   c                   s   a  ] tR tRt o RR ltR tR tR tRR ltRR lt	R	 t
R
 tR tR tR tRR ltR tR tR tR tRtV tR# )FileOperatori  c                sP    Wn         \        4       V n        V P                  4        R # rm   )dry_runr   ensured_init_record)r   r   r_   r+   r   ZFileOperator.__init__  s    ur-   c                sP    R V n         \        4       V n        \        4       V n        R# FN)recordr   files_writtendirs_createdr      &r+   r   ZFileOperator._init_record  s     UEr-   c                sd    V P                   '       d   V P                  P                  V4       R # R # rm   )r   r   add)r   r[   r_   r+   record_as_writtenZFileOperator.record_as_written  s$    ;;;""4( r-   c                sz   \         P                  P                  V4      '       g0   \        R\         P                  P	                  V4      ,          4      h\         P                  P                  V4      '       g   R# \         P
                  ! V4      P                  \         P
                  ! V4      P                  8  # )a  Tell if the target is newer than the source.

Returns true if 'source' exists and is more recently modified than
'target', or if 'source' exists and 'target' doesn't.

Returns false if both exist and 'target' is the same age or younger
than 'source'. Raise PackagingFileError if 'source' does not exist.

Note that this test is not very accurate: files created in the same
second will have the same "age".
zfile '%r' does not existT)rZ   r[   existsr   abspathstatZst_mtime)r   Zsourcetarget   &&&r+   newerZFileOperator.newer  ss     ww~~f%%"#=PV@W#WXXww~~f%%wwv''"''&/*B*BBBr-   c                sL   V P                  \        P                  P                  V4      4       \        P                  RW4       V P                  '       g   RpV'       d   \        P                  P                  V4      '       d   RV,          pMS\        P                  P                  V4      '       d/   \        P                  P                  V4      '       g
   RV,          pV'       d   \        VR,           4      h\        P                  ! W4       V P                  V4       R# )z8Copy a file respecting dry-run and force flags.
        zCopying %s to %sNz%s is a symlinkz%s is a non-regular filez which would be overwritten)
ensure_dirrZ   r[   dirnameloggerinfor   islinkr   isfiler   r   Zcopyfiler   )r   Zinfileoutfilecheckmsg   &&&& r+   	copy_fileZFileOperator.copy_file	  s     	01&8|||C77>>'**+g5CWW^^G,,RWW^^G5L5L4w>C 'D!DEEOOF,w'r-   Nc                s   \         P                  P                  V4      '       d   Q hV P                  \         P                  P	                  V4      4       \
        P                  R W4       V P                  '       gR   Vf   \        VR4      pM\        P                  ! VRVR7      p \        P                  ! W4       VP                  4        V P                  V4       R#   TP                  4        i ; i)zCopying stream %s to %sNwbwencoding)rZ   r[   isdirr   r   r   r   r   openr   r   Zcopyfileobjr   r   )r   Zinstreamr   r   Z	outstreamr   r+   copy_streamZFileOperator.copy_stream  s    77==))))01-xA||| $/	"KKxH	"""87!w' !s   )C" "C4c                s   V P                  \        P                  P                  V4      4       V P                  '       gj   \        P                  P                  V4      '       d   \        P                  ! V4       \        VR 4      ;_uu_ 4       pVP                  V4       RRR4       V P                  V4       R#   + '       g   i     L#; i)r   N)
r   rZ   r[   r   r   r   r   r   r   r   )r   r[   r   fr   r+   write_binary_fileZFileOperator.write_binary_file)  sx    -.|||ww~~d##		$dD!!Q "t$ "!s   B==C	c                sF    V P                  WP                  V4      4       R # rm   )r   encode)r   r[   r   r   s   &&&&r+   write_text_fileZFileOperator.write_text_file2  s    t[[%:;r-   c                s   \         P                  R 8X  g+   \         P                  R8X  d   \         P                  R 8X  d   V F  pV P                  '       d   \        P                  RV4       K-  \         P                  ! V4      P                  V,          V,          p\        P                  RWE4       \         P                  ! WE4       K  	  R# R# R# )posixZjavazchanging mode of %szchanging mode of %s to %oN)	rZ   rK   Z_namer   r   r   r   st_modeZchmod)r   ZbitsZmaskfilesr   mode   &&&&  r+   set_modeZFileOperator.set_mode5  s    77g"''V"3G8K <<<KK 5q9GGAJ..5=DKK ;QEHHQ%  9L"3r-   c                s(    V P                  R RV4      # )im  i  )r   )r)   r   r_   r+   Z<lambda>ZFileOperator.<lambda>A  s    qzz%'Cr-   c                s6   \         P                  P                  V4      pWP                  9  d   \         P                  P	                  V4      '       g   V P                  P                  V4       \         P                  P                  V4      w  r#V P                  V4       \        P                  R V,          4       V P                  '       g   \         P                  ! V4       V P                  '       d   V P                  P                  V4       R# R# R# R# )zCreating %sN)rZ   r[   r   r   r   r   ru   r   r   r   r   Zmkdirr   r   )r   r[   rv   r   rx   r+   r   ZFileOperator.ensure_dirC  s    wwt$||#BGGNN4,@,@LLT"77==&DAOOAKK,-<<<{{{!!%%d+  -A#r-   c                s(   \        W'       * 4      p\        P                  R W4       V P                  '       g   V'       g   V P	                  W4      '       d3   V'       g   RpM'VP                  V4      '       g   Q hV\        V4      R p/ pV'       dU   \        \        R4      '       d?   \        V\        P                  4      '       g   \        P                  P                  pWXR&   \        P                  ! WXR3/ VB  V P                  V4       V# )zByte-compiling %s to %sNPycInvalidationModeZinvalidation_modeT)r	   r   r   r   r   rO   r]   rg   
py_compilern   r   ZCHECKED_HASHcompiler   )	r   r[   ZoptimizeZforcere   Zhashed_invalidationZdpathZdiagpathZcompile_kwargss	   &&&&&&   r+   byte_compileZFileOperator.byte_compileO  s    !$5-t;|||

4//#H??62222#CKL1HN"wz;P'Q'Q!"5z7U7UVV*4*H*H*U*U'6I23tHdMnMu%r-   c                s>   \         P                  P                  V4      '       Edw   \         P                  P                  V4      '       d   \         P                  P	                  V4      '       g   \
        P                  R V4       V P                  '       g   \        P                  ! V4       V P                  '       d0   WP                  9   d   V P                  P                  V4       R# R# R# \         P                  P	                  V4      '       d   RpMRp\
        P                  RW!4       V P                  '       g   \         P                  ! V4       V P                  '       d0   WP                  9   d   V P                  P                  V4       R# R# R# R# )zRemoving directory tree at %sZlinkZfilezRemoving %s %sN)rZ   r[   r   r   r   r   debugr   r   r   r   r   r   r   )r   r[   r)      && r+   ensure_removedZFileOperator.ensure_removedb  s   77>>$ww}}T""277>>$+?+?<dC|||MM$';;;000))006 1  77>>$''AA-q7|||IIdO;;;111**11$7 2 !  r-   c                s   R pV'       gz   \         P                  P                  V4      '       d)   \         P                  ! V\         P                  4      p V# \         P                  P                  V4      pW18X  d    V# TpK  V# F)rZ   r[   r   accessW_OKr   )r   r[   r'   Zparentrx   r+   is_writableZFileOperator.is_writablew  sh    ww~~d##41
 	 WW__T*F~ Dr-   c                s~    V P                   '       g   Q hV P                  V P                  3pV P                  4        V# )z>
Commit recorded changes, turn off recording, return
changes.
)r   r   r   r   )r   r'   r   r+   commitZFileOperator.commit  s9    
 {{{{##T%6%66r-   c                s0   V P                   '       g   \        V P                  4       F@  p\        P                  P                  V4      '       g   K*  \        P                  ! V4       KB  	  \        V P                  R R7      pV F}  p\        P                  ! V4      pV'       dG   VR.8X  g   Q h\        P                  P                  W4^ ,          4      p\        P                  ! V4       \        P                  ! V4       K  	  V P                  4        R# )T)ZreverseZ__pycache__N)r   listr   rZ   r[   r   r   Zsortedr   listdirr#   Zrmdirr   )r   r   dirsrv   ZflistZsd   &     r+   rollbackZFileOperator.rollback  s    |||$,,-77>>!$$IIaL . $++T:D

1 ]O333aq2BHHRL  	r-   )r   r   r   r   r   r   Trm   )FFNF)r   r   r   r   r   r   r   r   r   r   r   r   r   Zset_executable_moder   r   r   r   r   r   r   r   r   r   r+   r   r     s_     
"
)C&("(%<
& D
,&8*
 r-   r   c                 s   V \         P                  9   d   \         P                  V ,          pM\        V 4      pVf   TpV# VP                  R4      p\	        W$P                  ^ 4      4      pV F  p\	        W54      pK  	  V# )N.)rh   ZmodulesZ
__import__ru   ri   ra   )Zmodule_nameZdotted_pathZmodr'   r(   rr      &&    r+   resolver     su    ckk!kk+&% M	 !!#&iil+AV'F Mr-   c                   sZ   a  ] tR tRt o R t]R 4       tR tR t]	P                  t
RtV tR# )ExportEntryi  c                s6    Wn         W n        W0n        W@n        R # rm   rK   re   rc   r   )r   rK   re   rc   r   s   &&&&&r+   r   ZExportEntry.__init__  s    	
r-   c                sB    \        V P                  V P                  4      # rm   )r   re   rc   r   r   r+   r   ZExportEntry.value  s    t{{DKK00r-   c           	     sx    R V P                   : RV P                  : RV P                  : RV P                  : R2	# )z<ExportEntry r|   r   rI   Z>r   r   r   r+   __repr__ZExportEntry.__repr__  s$    04		4;;UYU_U_``r-   c                s2   \        V\        4      '       g   R pV# V P                  VP                  8H  ;'       d\    V P                  VP                  8H  ;'       d;    V P                  VP                  8H  ;'       d    V P
                  VP
                  8H  pV# r   )rn   r   rK   re   rc   r   )r   Zotherr'   r   r+   __eq__ZExportEntry.__eq__  s    %--F  ii5::- 0 0$++2M 0 0RVR]R]afamamRm 0 0jjEKK/ r-   )r   rK   re   rc   N)r   r   r   r   r   r   r   r   r  r   Z__hash__r   r   r   r   r+   r   r     s4      1 1a Hr-   r   z(?P<name>([^\[]\S*))
                      \s*=\s*(?P<callable>(\w+)([:\.]\w+)*)
                      \s*(\[\s*(?P<flags>[\w-]+(=\w+)?(,\s*\w+(=\w+)?)*)\s*\])?
                      c                 s:   \         P                  V 4      pV'       g&   R pRV 9   g   RV 9   d   \        RV ,          4      h V# VP                  4       pVR,          pVR,          pVP	                  R4      pV^ 8X  d   TR rM,V^8w  d   \        RV ,          4      hVP                  R4      w  rxVR,          p	V	f$   RV 9   g   RV 9   d   \        RV ,          4      h. p	M-V	P                  R4       U
u. uF  qP                  4       NK  	  p	p
\        WGW4      pV# u up
i )	Nr>   r?   zInvalid specification '%s'rK   callabler   r   r@   )ENTRY_REsearchr   	groupdictZcountru   rN   r   )Zspecificationr&   r'   rv   rK   r[   Zcolonsre   rc   r   r      &          r+   r   r     s,   &A-3-#7" $*,9$: ; ; $80 M) KKMy}CQ;!4F{& (.0=(> ? ?!ZZ_NF'
=m#sm';& (.0=(> ? ?E(-C(89(81WWY(8E9T69M :s   0Dc                s   V f   Rp \         P                  R8X  d6   R\         P                  9   d!   \         P                  P	                  R4      pM\         P                  P                  R4      p\         P                  P                  V4      '       dE   \         P                  ! V\         P                  4      pV'       g   \        P                  RV4       M \         P                  ! V4       RpV'       g,   \        P                  ! 4       p\        P                  RV4       \         P                  P                  W4      #   \         d    \        P                  RTRR	7       R
p Lyi ; i)az  
Return the default base location for distlib caches. If the directory does
not exist, it is created. Use the suffix provided for the base directory,
and default to '.distlib' if it isn't provided.

On Windows, if LOCALAPPDATA is defined in the environment, then it is
assumed to be a directory, and will be the parent directory of the result.
On POSIX, and on Windows if LOCALAPPDATA is not defined, the user's home
directory - using os.expanduser('~') - will be the parent directory of
the result.

The result is just the directory '.distlib' in the parent directory as
determined above, or with the name specified with ``suffix``.
z.distlibntZLOCALAPPDATAz$localappdata~z(Directory exists but is not writable: %sTzUnable to create %s)exc_infoFz#Default location unusable, using %s)rZ   rK   environr[   Z
expandvars
expanduserr   r   r   r   warningmakedirsZOSErrorr   r   r#   )rc   r'   Zusable   &  r+   get_cache_baser    s     ~	ww$>RZZ7##O4 ##C( 
ww}}V6277+NNEvN	KKF !!#<fE77<<''  	NN0&4NHF	s   E %E,+E,c                s$   \         P                  P                  V'       d    \         P                  P                  V 4      MT 4      w  r#V'       d   VP	                  RR4      pVP	                  \         P
                  R4      pW#,           R,           # )z
Convert an absolute path to a directory name for use in a cache.

The algorithm used is:

#. On Windows, any ``':'`` in the drive is replaced with ``'---'``.
#. Any occurrence of ``os.sep`` is replaced with ``'--'``.
#. ``'.cache'`` is appended.
r   z---z--z.cache)rZ   r[   Z
splitdriver   r    r\   )r[   use_abspathrv   rr   rx   r+   path_to_cache_dirr    s_     77{bggood3MDAIIc5!			"&&$A58r-   c                 sF    V P                  R 4      '       g
   V R ,           # V # )rY   )endswith)r)   r   r+   ensure_slashr  )  s    ::c??3wHr-   c                 s    R ;rRV 9   d3   V P                  R^4      w  r0RV9  d   TpMVP                  R^4      w  rV'       d   \        V4      pV'       d   \        V4      pWV 3# )NrA   r   )Zrsplitru   r   )rR   usernamepasswordre      &   r+   parse_credentialsr  /  sh    H
f}sA.fH!'c1!5H8$8$v%%r-   c                  s^    \         P                  ! ^4      p \         P                  ! V 4       V # )i   )rZ   Zumaskrj   rk   r+   get_process_umaskr  >  s     XXd^FHHVMr-   c                 sv    R pRp\        V 4       F  w  r#\        V\        4      '       d   K  Rp M	  Vf   Q hV# )TNF)	enumeratern   r   )Zseqr'   rU   r)   r  r+   is_string_sequencer  D  sB    FA#!\**F  ==Mr-   z3([a-z0-9_]+([.-][a-z_][a-z0-9_]*)*)-([a-z0-9_.+-]+)z-py(\d\.?\d?)c                sT   RpRp\        V 4      P                  RR4      p \        P                  V 4      pV'       d%   VP	                  ^4      pV RVP                  4        p V'       d|   \        V 4      \        V4      ^,           8  d\   \        P                  ! \        P                  ! V4      R,           V 4      pV'       d"   VP                  4       pV RV W^,           R V3pVfA   \        P                  V 4      pV'       d$   VP	                  ^4      VP	                  ^4      V3pV# )zk
Extract name, version, python version from a filename (no extension)

Return name, version, pyver or None
NrI   -z\b)r   r    PYTHON_VERSIONr  r   startr]   rer   Zescaper   PROJECT_NAME_AND_VERSION)filenameZproject_namer'   Zpyverr&   nr   r+   split_filenamer"  T  s     FEx ((c2Hh'A
JQWWY'HL(9A(==HHRYY|,u4h?Abq\8EF#3U:F~$**84WWQZU2FMr-   z-(?P<name>[\w .-]+)\s*\(\s*(?P<ver>[^\s)]+)\)$c                s    \         P                  V 4      pV'       g   \        RV ,          4      hVP                  4       pVR,          P	                  4       P                  4       VR,          3# )z
A utility method used to get name and version from a string.

From e.g. a Provides-Dist value.

:param p: A value in a form 'foo (1.0)'
:return: The name and version as a tuple.
z$Ill-formed name/version string: '%s'rK   Zver)NAME_VERSION_REr   r   r  rN   rp   )rr   r&   rv   r  r+   parse_name_and_versionr$  r  sV     	a AG!KLL	AV9??""$ah..r-   c                 s   \        4       p\        T ;'       g    . 4      p \        T;'       g    . 4      pR V 9   d   V P                  R 4       W!,          pV  F  pVR8X  d   VP                  V4       K  VP                  R4      '       dG   VR,          pWA9  d   \        P                  RV,          4       WB9   d   VP                  V4       Kx  Kz  W19  d   \        P                  RV,          4       VP                  V4       K  	  V# )*r  r   zundeclared extra: %s)r   r   r   rO   r   r  )Z	requestedZ	availabler'   rZunwanted   &&   r+   
get_extrasr(    s    UFIOO$IIOO$I
i8JJqM\\#uH(5@A!h' " !59:JJqM  Mr-   c                 s   / p \        V 4      pVP                  4       pVP                  R 4      pVP                  R4      '       g   \        P                  RV4       V# \        P                  ! R4      ! V4      p\        P                  ! V4      p V#   \         d"   p\        P                  RY4        Rp?T# Rp?ii ; i)zContent-Typezapplication/jsonz(Unexpected response for JSON request: %srz   z&Failed to get external data for %s: %sN)r
   r   getrO   r   r   r   r   r   r   r   	exception)rM   r'   ZrespZheadersZctreaderer*   r+   _get_external_datar-    s    FK s|))+[[(}}/00LLCRH M %%g.t4F YYv&F M  KA3JJMKs   AB 2B C B;;C z'https://www.red-dove.com/pypi/projects/c                 sz    V ^ ,          P                  4       : RV : R2p\        \        V4      p\        V4      pV# )r    rY   z/project.jsonZupperr   _external_data_base_urlr-  )rK   rM   r'   r  r+   get_project_datar0    s2    "&q'--/4
8C
)3
/C$FMr-   c                 s~    V ^ ,          P                  4       : RV : RV: R2p\        \        V4      p\        V4      # )r    rY   z	/package-z.jsonr.  )rK   versionrM   r   r+   get_package_datar2    s0    %)!W]]_dG
DC
)3
/Cc""r-   c                   s:   a  ] tR tRt o RtR tRR ltR tRtV t	R# )	Cachei  z
A class implementing a cache for resources that need to live in the file system
e.g. shared libraries. This class was moved from resources to here because it
could be used by other modules, e.g. the wheel module.
c                s   \         P                  P                  V4      '       g   \         P                  ! V4       \         P                  ! V4      P
                  ^?,          ^ 8w  d   \        P                  RV4       \         P                  P                  \         P                  P                  V4      4      V n
        R# )z]
Initialise an instance.

:param base: The base directory where the cache should be located.
zDirectory '%s' is not privateN)rZ   r[   r   r  r   r   r   r  r   normpathrb   )r   rb   r_   r+   r   ZCache.__init__  sp     ww}}T""KKGGDM!!D(Q.NN<dCGGOOBGG$4$4T$:;	r-   c                s    \        WR7      # )z>
Converts a resource prefix to a directory name in the cache.
)r  )r  )r   re   r  r   r+   prefix_to_dirZCache.prefix_to_dir  s     !AAr-   c                s2   . p\         P                  ! V P                  4       F  p\         P                  P	                  V P                  V4      p \         P                  P                  V4      '       g&   \         P                  P                  V4      '       d   \         P                  ! V4       K  \         P                  P                  V4      '       d   \        P                  ! V4       K  K  	  V#   \         d    TP                  T4        K  i ; i)z
Clear the cache.
)rZ   r   rb   r[   r#   r   r   r   r   r   r   r   r!   )r   Znot_removedfnr  r+   clearZCache.clear  s     **TYY'Bdii,B'77>>"%%););IIbMWW]]2&&MM"% ' (   '""2&'s%   A	C6C63$C6C66DDrb   Nr   )
r   r   r   r   __doc__r   r5  r7  r   r   r   r   r+   r3  r3    s     <B r-   r3  c                   sF   a  ] tR tRt o RtR tR
R ltR tR tR t	Rt
V tR	# )
EventMixini  z)
A very simple publish/subscribe system.
c                s    / V n         R # rm   _subscribersr   r   r+   r   ZEventMixin.__init__  s
    r-   c                s    V P                   pW9  d   \        V.4      WA&   R# WA,          pV'       d   VP                  V4       R# VP                  V4       R# )a(  
Add a subscriber for an event.

:param event: The name of an event.
:param subscriber: The subscriber to be added (and called when the
                   event is published).
:param append: Whether to append or prepend the subscriber to an
               existing subscriber list for the event.
N)r<  r   r!   Z
appendleft)r   event
subscriberr!   subsZsqr   r+   r   ZEventMixin.add  sE       -DKB		*%j)r-   c                s|    V P                   pW9  d   \        RV,          4      hW1,          P                  V4       R# )zy
Remove a subscriber for an event.

:param event: The name of an event.
:param subscriber: The subscriber to be removed.
zNo subscribers: %rN)r<  r   r   )r   r=  r>  r?  r   r+   r   ZEventMixin.remove  s6       1E9:::&r-   c                sL    \        V P                  P                  VR4      4      # )zi
Return an iterator for the subscribers for an event.
:param event: The event to return subscribers for.
r<   )Ziterr<  r)  )r   r=  r_   r+   get_subscribersZEventMixin.get_subscribers  s"    
 D%%))%455r-   c                s    . pV P                  V4       F!  p V! V.VO5/ VB pVP	                  V4       K#  	  \        P                  RWW44       V#   \         d    \        P                  R4       Rp LRi ; i)a  
Publish a event and return a list of values returned by its
subscribers.

:param event: The event to publish.
:param args: The positional arguments to pass to the event's
             subscribers.
:param kwargs: The keyword arguments to pass to the event's
               subscribers.
z"Exception during event publicationNz/publish %s: args = %s, kwargs = %s, result = %s)r@  r   r   r*  r!   r   )r   r=  argskwargsr'   r>  r   s   &&*,   r+   publishZEventMixin.publish  s     ..u5J"5:4:6: MM%  6 	FU[d    !EFs   A"A76A7r;  Nr   )r   r   r   r   r9  r   r   r   r@  rC  r   r   r   r   r+   r:  r:    s(     *(
'6 r-   r:  c                   sn   a  ] tR tRt o R tR tRR ltR tR tR t	R t
]R	 4       t]R
 4       tRtV tR# )	Sequenceri8  c                s@    / V n         / V n        \        4       V n        R # rm   )_preds_succsr   _nodesr   r   r+   r   ZSequencer.__init__:  s    er-   c                s<    V P                   P                  V4       R # rm   )rG  r   )r   noder_   r+   add_nodeZSequencer.add_node?  s    r-   c                sr   WP                   9   d   V P                   P                  V4       V'       Ed   \        V P                  P	                  VR4      4       F  pV P                  W14       K  	  \        V P
                  P	                  VR4      4       F  pV P                  W4       K  	  \        V P                  P                  4       4       F  w  rVV'       d   K  V P                  V K  	  \        V P
                  P                  4       4       F  w  rVV'       d   K  V P
                  V K  	  R # R # )Nr<   )rG  r   r   rE  r)  rF  r   r   )r   rH  Zedgesrr   r)   r   rF   s   &&&    r+   remove_nodeZSequencer.remove_nodeB  s    ;;KKt$5r23A$ 4r23D$ 4 T[[..01qA 2 T[[..01qA 2 r-   c                s    W8w  g   Q hV P                   P                  V\        4       4      P                  V4       V P                  P                  V\        4       4      P                  V4       R # rm   )rE  Z
setdefaultr   r   rF  )r   predsuccr   r+   r   ZSequencer.addR  sN    ||tSU+//5tSU+//5r-   c                s.   W8w  g   Q h V P                   V,          pV P                  V,          p TP	                  T4       TP	                  T4       R#   \         d    \        R T,          4      hi ; i  \         d    \        T: RT: 24      hi ; i)z%r not a successor of anythingz not a successor of N)rE  rF  ZKeyErrorr   r   )r   rK  rL  predsZsuccss   &&&  r+   r   ZSequencer.removeW  s    ||	FKK%EKK%E	HLLLL	  	F=DEE	F
  	H4FGG	Hs   &A "A6 A36Bc                sv    WP                   9   ;'       g%    WP                  9   ;'       g    WP                  9   # rm   )rE  rF  rG  )r   stepr_   r+   is_stepZSequencer.is_stepd  s-    #QQt{{':QQdkk>QRr-   c                s   V P                  V4      '       g   \        R V,          4      h. p. p\        4       pVP                  V4       V'       d   VP	                  ^ 4      pWT9   d-   WQ8w  d%   VP                  V4       VP                  V4       KI  KK  VP                  V4       VP                  V4       V P                  P                  VR4      pVP                  V4       K  \        V4      # )zUnknown: %rr<   )rO  r   r   r!   ra   r   r   rE  r)  ZextendZreversed)r   Zfinalr'   ZtodoZseenrN  rM  r   r+   	get_stepsZSequencer.get_stepsg  s    ||E""]U233uE88A;D| =MM$'MM$' ! d#b1E"r-   c                s   aaaaaaa ^ .o. o/ o/ o. oV P                   oVVVVVVV3R loS F  pVS9  g   K  S! V4       K  	  S# )r    c                 s8  < S^ ,          SV &   S^ ,          SV &   S^ ;;,          ^,          uu&   S
P                  V 4        SV ,          pV FW  pVS9  d(   S! V4       \        SV ,          SV,          4      SV &   K1  VS
9   g   K:  \        SV ,          SV,          4      SV &   KY  	  SV ,          SV ,          8X  dL   . p S
P                  4       pVP                  V4       W 8X  g   K*   \	        T4      pS	P                  T4       R# R#   \         d    . p Li ; ir    N)r!   r   minra   tuple)rH  Z
successorsZ	successorZconnected_componentZ	componentgraphindexindex_counterlowlinksr'   stackstrongconnects   &    r+   rY  Z3Sequencer.strong_connections.<locals>.strongconnect  s   '*E$K*1-HTN!!LL "4[
 (	H,!),%($)9L%MHTN%' &)$y9I%JHTN ( ~t,&(# %		I'..y9 (!"56	i( -   
 s   	D	 	DD)rF  )	r   rH  rT  rU  rV  rW  r'   rX  rY  s	   & @@@@@@@r+   strong_connectionsZSequencer.strong_connections  sW     !	) !	)F D8#d#  r-   c           	     s4   R .pV P                    F9  pV P                   V,          pV F  pVP                  RV: RV: R24       K  	  K;  	  V P                   F  pVP                  RV,          4       K  	  VP                  R4       RP                  V4      # )zdigraph G {z  z -> rH   z  %s;Z}
)rE  r!   rG  r#   )r   r'   rL  rM  rK  rH  r   r+   dotZSequencer.dot  s{    KKDKK%EtT:;    KKDMM'D.)  cyy  r-   )rG  rE  rF  Nr   )r   r   r   r   r   rI  rJ  r   r   rO  rP  propertyrZ  r\  r   r   r   r   r+   rD  rD  8  sS     
' 6
HS 2 1 1f 	! 	!r-   rD  c                 s  aa VV3R  lp\         P                  P                  S4      o\        S4      oRpVf   V P	                  R4      '       d   RpMfV P	                  R4      '       d   RpRpMJV P	                  R4      '       d   RpRpM.V P	                  R4      '       d   RpR	pM\        R
V ,          4      h VR8X  d7   \        V R	4      pV'       d"   VP                  4       pV F  pV! V4       K  	  M@\        P                  ! V X4      pV'       d"   VP                  4       pV F  pV! V4       K  	  VR8w  dv   \        P                  ^ ,          ^8  dZ   VP                  4        FE  p	\        V	P                  \         4      '       d   K%  V	P                  P#                  R4      V	n        KG  	  R p
Wn        VP'                  S4       V'       d   VP)                  4        R# R#   T'       d   TP)                  4        i i ; i)c                 sZ  < \        V \        4      '       g   V P                  R 4      p \        P                  P                  \        P                  P                  SV 4      4      pVP                  S4      '       d   VS,          \        P                  8w  d   \        RV,          4      hR# )rz   zpath outside destination: %rN)
rn   r   decoderZ   r[   r   r#   rO   r\   r   )r[   rr   dest_dirplens   & r+   
check_pathZunarchive.<locals>.check_path  ss    $	**;;w'DGGOOBGGLL489||H%%4BFF):;a?@@ *;r-   NZzipZtgzzr:gzZtbzzr:bz2.tarZtarr&  zUnknown format for %rrz   c                s     \         P                  ! W4      #   \         P                   d   p\        \	        T4      4      hRp?ii ; i)z9Run tarfile.tar_filter, but raise the expected ValueErrorN)tarfileZ
tar_filterZFilterErrorr   str)Zmemberr[   Zexcr   r+   extraction_filterZ$unarchive.<locals>.extraction_filter  s=    +))&77&& + S**+s    AAA).zip.whl).tar.gz.tgz).tar.bz2.tbz)rZ   r[   r   r]   r  r   r   Znamelistrc  r   Zgetnamesrh   r   Z
getmembersrn   rK   r   r^  re  Z
extractallr   )Zarchive_filenamer_  Zformatr   ra  Zarchiver   ZnamesrK   Ztarinfore  r`  s   &f&&       @r+   	unarchiverl    s   A wwx(Hx=DG~$$%566F&&':;;FD&&';<<FD&&v..FD47GGHH'U?.4G((*!Dt$ " ll#3T:G((*!Dt$ "U?s//2Q6
 #--/!',,	::#*<<#6#6w#?GL 0	+ %6!8$ MMO 7MMO s   ;AG* A4G* >G* *Hc                s   \         P                  ! 4       p\        V 4      p\        VR4      ;_uu_ 4       p\        P
                  ! V 4       Fb  w  rEpV FV  p\        P                  P                  WG4      pWBR p	\        P                  P                  W4      p
VP                  W4       KX  	  Kd  	  RRR4       V#   + '       g   i     T# ; i)z*zip a directory tree into a BytesIO objectr   N)	ioZBytesIOr]   r   rZ   walkr[   r#   r   )Z	directoryr'   ZdlenZzfr^   r   r   rK   ZfullZrelrd   r  r+   zip_dirro    s    ZZ\Fy>D			!#!3Dww||D/5kww||C.$	  "4 
 M 
	 Ms   A=B<<C	c                   s   a  ] tR tRt o RtRR ltR tR tR tR t	]
R 4       t]
R	 4       tR
 t]
R 4       t]
R 4       tRtV tR# )Progressi!  ZUNKNOWNc                sp    Ve	   W!8  g   Q hV;V n         V n        W n        R V n        ^ V n        RV n        R # )NF)rR  curmaxstartedelapseddone)r   ZminvalZmaxvalr   r+   r   ZProgress.__init__$  s:    ~!111$$48	r-   c                s    V P                   V8:  g   Q hV P                  e   WP                  8:  g   Q hWn        \        P                  ! 4       pV P                  f	   W n        R # W P                  ,
          V n        R # rm   )rR  rr  rq  timers  rt  )r   ZcurvalZnowr   r+   updateZProgress.update,  sZ    xx6!!!xx6XX#555iik<<L-DLr-   c                s\    V^ 8  g   Q hV P                  V P                  V,           4       R# rQ  )rw  rq  )r   Zincrr_   r+   	incrementZProgress.increment6  s"    qyyDHHtO$r-   c                s<    V P                  V P                  4       V # rm   )rw  rR  r   r   r+   r  ZProgress.start:  s    DHHr-   c                sf    V P                   e   V P                  V P                   4       RV n        R # NT)rr  rw  ru  r   r   r+   stopZProgress.stop>  s#    88KK!	r-   c                sN    V P                   f   V P                  # V P                   # rm   )rr  unknownr   r   r+   maximumZProgress.maximumC  s    #xx/t||=TXX=r-   c                s    V P                   '       d   R pV# V P                  f   RpV# RV P                  V P                  ,
          ,          V P                  V P                  ,
          ,          pRV,          pV# )z100 %z ?? %g      Y@z%3d %%)ru  rr  rq  rR  )r   r'   rF   r  r+   
percentageZProgress.percentageG  sh    999F  XXF  DHH,-DHH1DEA\Fr-   c                s    V^ 8:  d   V P                   e   V P                  V P                  8X  d   RpV# \        P                  ! R\        P
                  ! V4      4      pV# )r    z??:??:??z%H:%M:%S)rr  rq  rR  rv  ZstrftimeZgmtime)r   Zdurationr'   r   r+   format_durationZProgress.format_durationR  sM    Mtxx/488txx3GF
  ]]:t{{8/DEFr-   c                s   V P                   '       d   R pV P                  pMRpV P                  f   RpMV P                  ^ 8X  g   V P                  V P                  8X  d   ^ pMc\        V P                  V P                  ,
          4      pW P                  V P                  ,
          ,          pV^,
          V P                  ,          pV: RV P                  V4      : 2# )ZDonezETA z: r   )ru  rt  rr  rq  rR  Zfloatr~  )r   re   rV   r  r+   ETAZProgress.ETA[  s    999FA Fxx"txx488'; $((TXX-.XX((Udll*!4#7#7#:;;r-   c                s    V P                   ^ 8X  d   RpM.V P                  V P                  ,
          V P                   ,          p\         F  pVR8  d    MVR,          pK  	  RVX3,          # )r    g        i  g     @@z%d %sB/s)rt  rq  rR  UNITS)r   r'   Zunitr  r+   speedZProgress.speedn  s]    <<1Fhh)T\\9FD}fF  VTN**r-   )rq  ru  rt  rr  rR  rs  N)r    id   )r   r   r   r   r{  r   rw  rx  r  rz  r]  r|  r}  r~  r  r  r   r   r   r   r+   rp  rp  !  sx     G.%
 > >   < <$ 	+ 	+r-   rp  z\{([^}]*)\}z[^/\\,{]\*\*|\*\*[^/\\,}]z^[^{]*\}|\{[^}]*$c                s    \         P                  V 4      '       d   Rp\        W,          4      h\        P                  V 4      '       d   Rp\        W,          4      h\	        V 4      # )zAExtended globbing function that supports ** and {opt1,opt2,opt3}.z7invalid glob %r: recursive glob "**" must be used alonez2invalid glob %r: mismatching set marker '{' or '}')_CHECK_RECURSIVE_GLOBr  r   _CHECK_MISMATCH_SET_iglob)	path_globr   r   r+   r   r     sS    ##I..K))!!),,F)))r-   c              #   s  "   \         P                  V ^4      p\        V4      ^8  d^   \        V4      ^8X  g   Q V4       hVw  r#pVP                  R4       F*  p\        RP	                  W%V34      4       F  pVx  K	  	  K,  	  R# RV 9  d   \        V 4       F  pVx  K	  	  R# V P                  R^4      w  r'VR8X  d   RpVR8X  d   RpM"VP                  R4      pVP                  R4      p\        P                  ! V4       FX  w  rhp	\        P                  P                  V4      p\        \        P                  P	                  Wg4      4       F  p
V
x  K	  	  KZ  	  R# 5i)	r   r@   r   z**r   r%  rY   Z\N)	RICH_GLOBru   r]   r  r#   	std_iglobr$   rZ   rn  r[   r4  )r  Zrich_path_globre   r   rc   itemr[   ZradicalZdirr   r6  r  r+   r  r    s-    __Y2N
>Q>"a'77',VIIcNDrwwf'=>?
 @ # y !),
 - (oodA6OF|"} "..-!...$&GGFO 5ww''- d!<=BH > %4s   E E")HTTPSHandlermatch_hostnameCertificateErrorc                   s.   a  ] tR tRt o RtRtR tRtV tR# )HTTPSConnectioni  NTc                s   \         P                  ! V P                  V P                  3V P                  4      p\        V R R4      '       d   Wn        V P                  4        \        P                  ! \        P                  4      p\        \        R4      '       d(   V;P                  \        P                  ,          un        \        V RR4      '       d'   VP                  V P                  V P                   4       / pV P"                  '       dX   \        P$                  Vn        VP)                  V P"                  R7       \        \        RR4      '       d   V P                  VR&   VP*                  ! V3/ VB V n        V P"                  '       df   V P,                  '       dR    \/        V P                  P1                  4       V P                  4       \2        P5                  RV P                  4       R# R# R#   \6         dF    T P                  P9                  \         P:                  4       T P                  P=                  4        h i ; i)	Z_tunnel_hostFOP_NO_SSLv2	cert_fileN)ZcafileZHAS_SNIZserver_hostnamezHost verified: %s)r   Zcreate_connectionhostZporttimeoutri   sockZ_tunnelsslZ
SSLContextZPROTOCOL_SSLv23rg   Zoptionsr  Zload_cert_chainr  Zkey_fileca_certsZCERT_REQUIREDZverify_modeZload_verify_locationsZwrap_socketcheck_domainr  Zgetpeercertr   r   r  ZshutdownZ	SHUT_RDWRr   )r   r  contextrB  r  r+   connectZHTTPSConnection.connect  s   ++TYY		,BDLLQDt^U33 	nnS%8%89GsM**3??2t[$//''FF}}}&)&7&7#--T]]-C3	51104		F,-++D;F;DI}}}!2!2!2"499#8#8#:DIIFLL!4dii@ "3} ( II&&v'7'78IIOO%s   #AG7 7AI)r  )	r   r   r   r   r  r  r  r   r   r   r   r+   r  r    s     	 	r-   r  c                   s6   a  ] tR tRt o RR ltR tR tRtV tR# )r  i  c                sJ    \         P                  ! V 4       Wn        W n        R # rm   )BaseHTTPSHandlerr   r  r  )r   r  r  r   r+   r   ZHTTPSHandler.__init__  s    %%d+$M ,r-   c                s    \        V/ VB pV P                  '       d#   V P                  Vn        V P                  Vn        V# )a  
This is called to create a connection instance. Normally you'd
pass a connection class to do_open, but it doesn't actually check for
a class, and just expects a callable. As long as we behave just as a
constructor would have, we should be OK. If it ever changes so that
we *must* pass a class, we'll create an UnsafeHTTPSConnection class
which just sets check_domain to False in the class definition, and
choose which one to pass to do_open.
)r  r  r  )r   rA  rB  r'   s   &*, r+   _conn_makerZHTTPSHandler._conn_maker  s:     %d5f5F}}}"&--&*&7&7#Mr-   c                s     V P                  V P                  V4      #   \         d=   pR \        TP                  4      9   d   \        RTP                  ,          4      hh Rp?ii ; i)zcertificate verify failedz*Unable to verify server certificate for %sN)Zdo_openr  r   rd  Zreasonr  r  )r   rS   r,  r   r+   
https_openZHTTPSHandler.https_open  sc    ||D$4$4c:: .#ahh-?* ,469hh,? @ @ s    A%7A  A%)r  r  Nr   )	r   r   r   r   r   r  r  r   r   r   r   r+   r  r    s     	-
	 	 	r-   r  c                   &   a  ] tR tRt o R tRtV tR# )HTTPSOnlyHandleri  c                s&    \        R V,          4      h)zAUnexpected HTTP request on what should be a secure connection: %s)r   )r   rS   r_   r+   	http_openZHTTPSOnlyHandler.http_open  s     ,.12 3 3r-   r<   N)r   r   r   r   r  r   r   r   r   r+   r  r    s     	3 	3r-   r  c                   0   a  ] tR tRt o RR ltR tRtV tR# )	Transporti  c                P    Wn         \        P                  P                  W4       R # rm   )r  r   r  r   r   r  use_datetimer   r+   r   ZTransport.__init__	  s    $$T8r-   c                s    V P                  V4      w  r#pV P                  '       d   WP                  ^ ,          8w  d$   W0n        V\        P                  ! V4      3V n        V P                  ^,          # r    )get_host_info_connection_extra_headersr   ZHTTPConnection)r   r  hehZx509r'  r+   make_connectionZTransport.make_connection  sa    ((.t4+;+;A+>#>"$#W%;%;A%>>D""r-   r  r  r  Nr  r   r   r   r   r   r  r   r   r   r   r+   r  r    s     9# #r-   r  c                   r  )SafeTransporti  c                r  rm   )r  r   r  r   r  r   r+   r   ZSafeTransport.__init__  s    "L##,,T@r-   c                s   V P                  V4      w  r#pV'       g   / pV P                  VR &   V P                  '       d   WP                  ^ ,          8w  d&   W0n        V\        P
                  ! VR3/ VB 3V n        V P                  ^,          # )r  N)r  r  r  r  r   r  )r   r  r  r  rB  r'  r+   r  ZSafeTransport.make_connection  s~     ..t4MA6 $F9###t/?/?/B'B&(##')@)@D)SF)S#S ##A&&r-   r  Nr  r  r   r   r+   r  r    s     	A	' 	'r-   r  c                   r  )ServerProxyi(  c                s   VP                  R R4      ;V n        pVeM   \        V4      ^ ,          pVP                  R^ 4      pVR8X  d   \        pM\
        pV! W5R7      ;VR&   pWpn        \        P                  P                  ! W3/ VB  R# )r  Nr  Zhttps)r  	transport)
ra   r  r   r)  r  r  r  r   r  r   )r   rT   rB  r  rQ   r  ZtclsrV   s   &&,     r+   r   ZServerProxy.__init__*  s    !'It!<<w c]1%F!::na8L $ &*7&NNF;!N&&t;F;r-   )r  r  N)r   r   r   r   r   r   r   r   r   r+   r  r  (  s     < <r-   r  c                 sz    \         P                  ^ ,          ^8  d   VR,          pM
RVR&   RVR&   \        W3/ VB # )r    Zbr   Znewlinerz   r   )rh   r   r   )r6  r   rB     &&,r+   	_csv_openr  A  sD    
Qy %z#F##r-   c                   s`   a  ] tR tRt o R]! R4      R]! R4      R]! R4      /tR tR	 tR
tV t	R# )CSVBaseiL  Z	delimiterr@   Z	quotecharZ"Zlineterminatorr[  c                    V # rm   r<   r   r   r+   	__enter__ZCSVBase.__enter__S      r-   c                s:    V P                   P                  4        R # rm   )r   r   )r   r	  s   &*r+   __exit__ZCSVBase.__exit__V  s    r-   r<   N)
r   r   r   r   rd  defaultsr  r  r   r   r   r   r+   r  r  L  s6     SXSX#d)H r-   r  c                   s6   a  ] tR tRt o R tR tR t]tRtV t	R# )	CSVReaderiZ  c                s4   R V9   dI   VR ,          p\         P                  ^ ,          ^8  d   \        P                  ! R4      ! V4      pW n        M\        VR,          R4      V n        \        P                  ! V P                  3/ V P                  B V n        R# )r   rz   r[   r&  N)	rh   r   r   r   r   r  csvr+  r  )r   rB  r   s   &, r+   r   ZCSVReader.__init__\  sp    vH%F"a'))'26: K#F6NC8DKjj>>r-   c                r  rm   r<   r   r   r+   __iter__ZCSVReader.__iter__g  r  r-   c                s    \        V P                  4      p\        P                  ^ ,          ^8  d@   \	        V4       F0  w  r#\        V\        4      '       d   K  VP                  R4      W&   K2  	  V# )r    rz   )nextr+  rh   r   r  rn   r   r^  )r   r'   rU   r  r  r+   r  ZCSVReader.nextj  sX    dkk"A"$V,!$	22 $G 4FI - r-   )r+  r   N)
r   r   r   r   r   r  r  Z__next__r   r   r   r   r+   r  r  Z  s     	? Hr-   r  c                   s,   a  ] tR tRt o R tR tRtV tR# )	CSVWriteriu  c                s    \        VR 4      V n        \        P                  ! V P                  3/ V P                  B V n        R# )r   N)r  r   r  writerr  )r   r6  rB  r  r+   r   ZCSVWriter.__init__w  s-    C(jj>>r-   c                s    \         P                  ^ ,          ^8  dF   . pV F;  p\        V\        4      '       d   VP	                  R4      pVP                  V4       K=  	  TpV P                  P                  V4       R# )r    rz   N)rh   r   rn   r   r   r!   r  writerow)r   Zrowr&  r  rx   r+   r  ZCSVWriter.writerow{  sc    A"AdI..;;w/D  CS!r-   )r   r  N)r   r   r   r   r   r  r   r   r   r   r+   r  r  u  s     ?" "r-   r  c                   sv   a a ] tR tRt o]! ]P                  4      tR]R&   R	V 3R lltR tR t	R t
RtVtV ;t# )
Configuratori  inc_convertZincc                sv   < \         \        V `  V4       T;'       g    \        P                  ! 4       V n        R # rm   )Zsuperr  r   rZ   r   rb   )r   configrb   	__class__s   &&&r+   r   ZConfigurator.__init__  s'    lD*62''BIIK	r-   c                s  a a VV 3R  loVP                  R4      p\        V4      '       g   S P                  V4      pVP                  RR4      pVP                  RR4      pV'       d"   \        V Uu. uF  pS! V4      NK  	  up4      pV Uu. uF&  p\	        V4      '       g   K  VS! W,          4      3NK(  	  pp\        V4      pV! V/ VB p	V'       d,   VP                  4        F  w  r\        WS! V4      4       K  	  V	# u upi u upi )c                 sZ  < \        V \        \        34      '       d*   \        V 4      ! V  Uu. uF  pS! V4      NK  	  up4      pV# \        V \        4      '       d9   R V 9   d   SP                  V 4      pV# / pV  F  pS! W,          4      W#&   K  	   V# SP                  V 4      pV# u upi ())rn   r   rS  Ztypedictconfigure_customconvert)orU   r'   r   r  r   s   &   r+   r  Z.Configurator.configure_custom.<locals>.convert  s    !dE]++aa!8a'!*a!89 M At$$19!2215F M  F$+ADM	  M aM "9s   B(r  r   Nz[]r<   )ra   r  r   rS  r   r  r   Zsetattr)r   r  rs   ZpropsrA  r  r   r   rB  r'   r!  rF   r  s   f&          @r+   r  ZConfigurator.configure_custom  s    	 JJt{{QA

3%zz$#d3d'!*d34D28K&QKN(!WVY'(&KeD#F#71:. & 4Ks   2DD	&D	c                s    V P                   V,          p\        V\        4      '       d(   R V9   d!   V P                  V4      ;V P                   V&   pV# r  )r  rn   r  r  )r   rw   r'   r   r+   __getitem__ZConfigurator.__getitem__  sF    S!fd##(,(=(=f(EEDKKvr-   c                sL   \         P                  P                  V4      '       g+   \         P                  P                  V P                  V4      p\
        P                  ! VRRR7      ;_uu_ 4       p\        P                  ! V4      pRRR4       V#   + '       g   i     X# ; i)z*Default converter for the inc:// protocol.r&  rz   r   N)	rZ   r[   Zisabsr#   rb   r   r   r   r   )r   r   r   r'   rx   r+   r  ZConfigurator.inc_convert  sg    ww}}U##GGLLE2E[[g66!YYq\F 7 76s   1BB#	r8  rm   )r   r   r   r   r  r   Zvalue_convertersr   r  r  r  r   r   Z__classcell__)r  r   s   @@r+   r  r    s<     ,==>+U(@ r-   r  c                   s:   a  ] tR tRt o RtRR ltR tR tRtV t	R# )	SubprocessMixini  z;
Mixin for running subprocesses and capturing their output
Nc                s    Wn         W n        R # rm   )verboseprogress)r   r  r  r   r+   r   ZSubprocessMixin.__init__  s     r-   c                s   V P                   pV P                  p VP                  4       pV'       g   MVe   V! WR4       K(  V'       g!   \        P                  P                  R4       M.\        P                  P                  VP                  R4      4       \        P                  P                  4        K  VP                  4        R# )z
Read lines from a subprocess' output stream and either pass to a progress
callable (if specified) or write progress information to sys.stderr.
Nr   rz   )	r  r  Zreadlinerh   stderrr   r^  Zflushr   )r   r   r  r  r  r)      &&&   r+   r+  ZSubprocessMixin.reader  s    
 ==,,!A#$JJ$$S)JJ$$QXXg%67

  "r-   c                sr   \         P                  ! V3R \         P                  R\         P                  /VB p\        P                  ! V P
                  VP                  R 3R7      pVP                  4        \        P                  ! V P
                  VP                  R3R7      pVP                  4        VP                  4        VP                  4        VP                  4        V P                  e   V P                  RR4       V# V P                  '       d    \        P                  P                  R4       V# )stdoutr  )r   rA  zdone.Zmainzdone.
)
subprocessZPopenZPIPE	threadingZThreadr+  r  r  r  Zwaitr#   r  r  rh   r   )r   ZcmdrB  rr   Zt1Zt2s   &&,   r+   run_commandZSubprocessMixin.run_command  s    S[[[TZ[T[[(7KL

T[[(7KL

	
	
	==$MM'6*  \\\JJY'r-   )r  r  r   )
r   r   r   r   r9  r   r+  r  r   r   r   r   r+   r  r    s     !* r-   r  c                sN    \         P                  ! RRV 4      P                  4       # )z,Normalize a python package name a la PEP 503z[-_.]+r  )r  Zsubrp   )rK   r   r+   normalize_namer    s      66(C&,,..r-   c                   s>   a  ] tR tRt o RtRtR	R ltR tR tRt	V t
R# )

PyPIRCFilei  zhttps://upload.pypi.org/legacy/pypiNc                s    Vf>   \         P                  P                  \         P                  P                  R4      R4      pWn        W n        R # )Nr  z.pypirc)rZ   r[   r#   r  r   rM   )r   r6  rM   r   r+   r   ZPyPIRCFile.__init__  s4    :bgg005yABr-   c           
     s   / p\         P                  P                  V P                  4      '       Ed   V P                  ;'       g    V P
                  p\        P                  ! 4       pVP                  V P                  4       VP                  4       pR V9   Ed1   VP                  R R4      pVP                  R4       Uu. uF)  qfP                  4       R8w  g   K  VP                  4       NK+  	  ppV. 8X  d   RV9   d   R.pV# V F  pRV/pVP                  VR4      VR&   RV P
                  3RV P                  3R3 F5  w  rVP                  Wh4      '       d   VP                  Wh4      W&   K1  WV&   K7  	  VR8X  d$   W P
                  R39   d   V P
                  VR&   K  VR,          V8w  g   K  VR,          V8w  g   K  / pK  	   V# R
V9   dp   R
pVP                  VR4      '       d   VP                  VR4      pMV P
                  pRVP                  VR4      R	VP                  VR	4      RVRVRV P                  /pV# u upi )	distutilszindex-serversr[  r   r  serverr  
repositoryZrealmr  zserver-login)r  N)rZ   r[   r   r   rM   DEFAULT_REPOSITORYr   RawConfigParserr   r   r)  ru   rN   DEFAULT_REALMZ
has_option)
r   r'   r  r  r   Zindex_serversr  Z_serversrw   rq   s
   &         r+   r   ZPyPIRCFile.read  s,   77>>$--((<<T%<%<J!113FKK&(Hh& &

; H9F9L9LT9Rk9RvVbVbVdhjVjNFLLN9Rkr>)$*8F C #+"*F!3-3ZZ
-Kz* /;D<S<S-TW^`d`r`rVs-?-ALC%00==.4jj.E.5s-A #f,@W@WY_?`1`373J3JF<0$X.*<AUYcAc%'F% #+B   8+'$$V\::!'FL!AJ!%!8!8J

6: >

6: > *fT// O ls    IIc                s   \         P                  ! 4       pV P                  pVP                  V4       VP	                  R 4      '       g   VP                  R 4       VP                  R RV4       VP                  R RV4       \        VR4      ;_uu_ 4       pVP                  V4       RRR4       R#   + '       g   i     R# ; i)r  r  r  r   N)	r   r  r   r   Zhas_sectionr   r   r   r   )r   r  r  r  r6  r   r  r+   rw  ZPyPIRCFile.updateB  s    --/]]B!!&))v&

6:x0

6:x0"c]]aLLO ]]]s   B11C	)r   rM   NN)r   r   r   r   r  r  r   r   rw  r   r   r   r   r+   r  r    s%     :M3j
 
r-   r  c                sJ    \        V P                  R7      P                  4       # )z?
Read the PyPI access configuration as supported by distutils.
)rM   )r  rM   r   rU  r   r+   _load_pypircr  O  s     %))$))++r-   c                 sb    \        4       P                  V P                  V P                  4       R # rm   )r  rw  r  r  r  r   r+   _store_pypircr  V  s    L7r-   c                 st   \         P                  R8X  d   R\        P                  P	                  4       9   d   R# R\        P                  P	                  4       9   d   R# R\        P                  P	                  4       9   d   R# \        P
                  # R\         P                  9   d   \         P                  R,          # \         P                  R	8w  g   \        \         R
4      '       g   \        P
                  # \         P                  ! 4       w  rr#pV P	                  4       P                  RR4      p VP                  RR4      P                  RR4      pV R,          R8X  d
   V : RV: 2# V R,          R8X  df   V^ ,          R8  dW   Rp R\        V^ ,          4      ^,
          VR,          3,          pRRRR/pVRV\        P                  ,          ,          ,          pMV R,          R8X  d   ^ RIHp V! 4       # V R,          R 8X  dR   R p \        P                  ! R!\        P                   4      pVP#                  V4      pV'       d   VP%                  4       pM=V R,          R"8X  d0   ^ R#Ip	 ^ R$IHp
 V	P/                  V
P1                  4       WV4      w  rpV : RV: RV: 2#   \,         d    ^ R#Ip
 LBi ; i)%a  Return a string that identifies the current platform.  This is used mainly to
distinguish platform-specific build directories and platform-specific built
distributions.  Typically includes the OS name and version and the
architecture (as supplied by 'os.uname()'), although the exact information
included depends on the OS; eg. on Linux, the kernel version isn't
particularly important.

Examples of returned values:
   linux-i586
   linux-alpha (?)
   solaris-2.6-sun4u

Windows will return one of:
   win-amd64 (64bit Windows on AMD64 (aka x86_64, Intel64, EM64T, etc)
   win32 (all others - specifically, sys.platform is returned)

For other non-POSIX platforms, currently just returns 'sys.platform'.

r  Zamd64	win-amd64z(arm)	win-arm32z(arm64)z	win-arm64Z_PYTHON_HOST_PLATFORMr   unamerY   r   rI   rW   r  :Ni   NZlinuxZsunosZ5Zsolarisz%d.%s:i   NNiZ32bitl    Z64bitz.%s:Ni   NZaix)aix_platform:Ni   NZcygwinz[\d.]+ZdarwinN)	sysconfig)rZ   rK   rh   r1  rp   Zplatformr
  rg   r  r    ZintZmaxsizeZ_aix_supportr  r  r   ZASCIIr   r   _osx_supportr  r  ImportErrorZget_platform_osxZget_config_vars)Zosnamer  Zreleaser1  ZmachineZbitnessr  Zrel_rer&   r  r  s              r+   get_host_platformr  `  s%   ( 
ww$ckk''))ckk''))))++|| "**,zz122	ww'W!5!5 || 13
-V7W \\^##C,Fooc3'//S9GbzW !'**	w	1:FWQZ1!4gbk BBG "7,?IGuws{{333G	u	-~	x	Irxx0LL!ggiG	x		+ $0#@#@AZAZA\^dov#w '22	  		s   .J% %J76J7Zx86Zwin32Zx64r  Zarmr  c                  s    \         P                  R 8w  d   \        4       # \         P                  P	                  R4      p V \
        9  d   \        4       # \
        V ,          # )r  ZVSCMD_ARG_TGT_ARCH)rZ   rK   r  r
  r)  _TARGET_TO_PLAT)Zcross_compilation_targetrk   r+   get_platformr    sG    	ww$ ""!zz~~.BC6 ""344r-   r  )i   rm   r   )rh  rj  rb  rf  ri  rk  rg  ry  )r   ZKZMZGZTZP)r   Zcollectionsr   Z
contextlibr  Zglobr   r  rm  r   ZloggingrZ   r   r  r   r  r  r  rh   rc  r   r   r  Zdummy_threadingrv  r   r   Zcompatr   r   r   r   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   Z	getLoggerr   r   r   r   rD   rC   r4   r;   r8   rP   r"   r=   rX   rf   rl   ro   rt   ry   r   r   Zcontextmanagerr   r   r   r   r   r   r   r   r   ZVERBOSEr  r   r  r  r  r  r  r  ZIr  r  r"  r#  r$  r(  r-  r/  r0  r2  r3  r:  rD  ZARCHIVE_EXTENSIONSrl  ro  r  rp  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+   <module>r     s  
    
 # 	   	  	   
   (  2 2 2 2 2 2 
		8	$ ZZ)*
ZZ 34 ZZ56
JJDE	ZZjjJJ{#	zzEFW!tytx4$ ,^&     & &f   6w6 wt& 4 :: ::	'>&(R"& :: '89;? ,-4 ** 9 :/ 8* D #)F )XC CRF! F!Z U AH$ 	&W+v W+| JJ~&	

#?@ jj!56 8 \\'11 B' T3< 3#	## # '	// '"<)'' <2$f  6" ",5# 5p+f +\/"J JZ,8P3h 
7	;	;5O=  
C  ('(s#   N N 	NNN*)N*