Why Gemfury? Push, build, and install  RubyGems npm packages Python packages Maven artifacts PHP packages Go Modules Debian packages RPM packages NuGet packages

Repository URL to install this package:

Details    
odigos / etc / odigos-vmagent / instrumentations / python / setuptools / __pycache__ / package_index.cpython-311.pyc
Size: Mime:
§

ãŒbgϘãó
—dZddlZddlZddlZddlZddlZddlZddlZddl	Z	ddl
Z
ddlZddlZddl
Z
ddlZddlZddlZddlZddlmZddlmZddlmZddlmZddlZddlmZmZmZm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z*ddl+m,Z,d	d
l-m.Z.m/Z/ddl0m1Z1ddl2m3Z3e
j4d
¦«Z5e
j4de
j6¦«Z7e
j4d¦«Z8e
j4de
j6¦«j9Z:d ;¦«Z<gd¢Z=dZ>dZ?e? @dj@ejAŽe¬¦«ZBd„ZCd„ZDd„ZEd4d„ZFd4d„ZGd4d„ZHde!dfd„ZId„ZJe
j4de
j6¦«ZK	eJd „¦«ZLGd!„d"¦«ZMGd#„d$eM¦«ZNGd%„d&e#¦«ZOe
j4d'¦«jPZQd(„ZRd)„ZSd5d*„ZTd+„ZUGd,„d-e¦«ZVGd.„d/ejW¦«ZXejYjZfd0„Z[d1„Z\eTe>¦«e[¦«Z[d2„Z]d3„Z^dS)6z$PyPI and direct package downloading.éN)Ú	translate©Úwraps)Ú
NamedTuple©Úunique_everseen)ÚBINARY_DISTÚ
CHECKOUT_DISTÚDEVELOP_DISTÚEGG_DISTÚSOURCE_DISTÚDistributionÚEnvironmentÚRequirementÚfind_distributionsÚnormalize_pathÚ
parse_versionÚ	safe_nameÚsafe_versionÚto_filename)ÚWheelé)Ú_cfg_read_utf8_with_fallbackÚ_read_utf8_with_fallback)Úlog)ÚDistutilsErrorz^egg=([-A-Za-z0-9_.+!]+)$zhref\s*=\s*['"]?([^'"> ]+)zƒ<a href="([^"#]+)">([^<]+)</a>\n\s+\(<a (?:title="MD5 hash"\n\s+)href="[^?]+\?:action=show_md5&amp;digest=([0-9a-f]{32})">md5</a>\)z([-+.a-z0-9]{2,}):z.tar.gz .tar.bz2 .tar .zip .tgz)ÚPackageIndexÚdistros_for_urlÚparse_bdist_wininstÚinterpret_distro_nameéz<setuptools/{setuptools.__version__} Python-urllib/{py_major}z{}.{})Úpy_majorÚ
setuptoolscóv—	tj|¦«S#t$r}td|›¦«|‚d}~wwxYw)Nz/Not a URL, existing file, or requirement spec: )rÚparseÚ
ValueErrorr)ÚspecÚes  ú?/tmp/pip-target-vp8_xwat/lib/python/setuptools/package_index.pyÚparse_requirement_argr*IsV€ðÝÔ  Ñ&Ô&Ð&øÝððð݈nØCGÀ4ÐIñ
ô
àð	øøøøðøøøs‚–
8 3³8có¤—| ¦«}d\}}}| d¦«r| d¦«r
|dd…}d}n{| dd¦«r|d	d
…}|dd…}d}nN| d¦«r
|dd…}d
}n,| dd¦«r|d	d
…}|dd…}d
}|||fS)z=Return (base,pyversion) or (None,None) for possible .exe name)NNNú.exez
.win32.exeNiöÿÿÿÚwin32z	.win32-pyiðÿÿÿiùÿÿÿéüÿÿÿz.win-amd64.exeiòÿÿÿz	win-amd64z
.win-amd64-pyiìÿÿÿ)ÚlowerÚendswithÚ
startswith)Únamer/ÚbaseÚpy_verÚplats     r)rrRsÿ€ð
JŠJ‰LŒL€EØ)Ñ€Dˆ&$à‡~‚~fÑÔð؏>Š>˜,Ñ'Ô'ð
	ؘ˜˜”:ˆD؈DˆDØ
×
Ò
˜k¨3Ñ
/Ô
/ð
	ؘ"˜R˜%”[ˆFؘ˜˜”:ˆD؈DˆDØ
^Š^Ð,Ñ
-Ô
-ð	ؘ˜˜”:ˆD؈DˆDØ
×
Ò
˜o¨sÑ
3Ô
3ð	ؘ"˜R˜%”[ˆFؘ˜˜”:ˆD؈Dؐ˜ÐÐócóŒ—tj |¦«}|\}}}}}}tj | d¦«d¦«}|dkr>|dkr8tj | d¦«d¦«}d|vr| dd¦«\}}||fS)Nú/éÿÿÿÿzsourceforge.netÚdownloadéþÿÿÿú#r)Úurllibr%ÚurlparseÚunquoteÚsplit)	ÚurlÚpartsÚschemeÚserverÚpathÚ
parametersÚqueryÚfragmentr3s	         r)Úegg_info_for_urlrIjs±€ÝŒL×!Ò! #Ñ&Ô&€EØ8=Ñ5€FˆFD˜* e¨XÝŒ<×Ò §
¢
¨3¡¤°Ô 3Ñ4Ô4€DØ
Ð"Ò"Ð" t¨zÒ'9Ð'9ÝŒ|×#Ò# D§J¢J¨s¡O¤O°BÔ$7Ñ8Ô8ˆØ
ˆd€{€{ØŸš C¨Ñ+Ô+‰ˆˆhؐˆ>Ðr6c#óK—t|¦«\}}t|||¦«Ed{V—†|rOt |¦«}|r5t	|| d¦«|t¬¦«Ed{V—†dSdSdS)zEYield egg or source distribution objects that might be found at a URLNr)Ú
precedence)rIÚdistros_for_locationÚEGG_FRAGMENTÚmatchr Úgroupr
)rAÚmetadatar3rHrNs     r)rrusÄèè€å% cÑ*Ô*N€Dˆ(Ý# C¨¨xÑ8Ô8Ð8Ð8Ð8Ð8Ð8Ð8Ð8ØðÝ×"Ò" 8Ñ,Ô,ˆØð	Ý,ؐU—[’[ ‘^”^ X½-ðñôð
ð
ð
ð
ð
ð
ð
ð
ð
ððð	ð	r6có†—| d¦«r
|dd…}| d¦«rd|vrtj|||¦«gS| d¦«rOd|vrKt|¦«}| ¦«sgSt||j|jtdz¬¦«gS| d	¦«r.t|¦«\}}}|t||||t|¦«StD]B}| |¦«r+|dt|¦«…}t|||¦«cSŒCgS)
z:Yield egg or source distribution objects based on basenameú.egg.zipNr.z.eggú-z.whlr)ÚlocationÚproject_nameÚversionrKr,)
r0rÚ
from_locationrÚ
is_compatiblerUrVrrr r	Ú
EXTENSIONSÚlen)rTÚbasenamerPÚwheelÚwin_baser4ÚplatformÚexts        r)rLrLs…€à×Ò˜Ñ$Ô$ð!ؘC˜R˜C”=ˆØ×Ò˜Ñ Ô ðJ S¨H _ _åÔ*¨8°X¸xÑHÔHÐIÐIØ×Ò˜Ñ Ô ð
 S¨H _ _ݐh‘”ˆØ×"Ò"Ñ$Ô$ð	؈IåØ!Ø"Ô/Øœ
å# a™<ð
ñ
ô
ð
ð	
ð×Ò˜Ñ Ô ðÝ%8¸Ñ%BÔ%BÑ"ˆ&˜(ØÐÝ(ؘ( H¨fµkÀ8ñôð
õ
ðGðGˆØ×Ò˜SÑ!Ô!ð	GØ ¥3 s¡8¤8 ) Ô,ˆHÝ(¨°8¸XÑFÔFÐFÐFÐFð	Gð€Ir6cóx—tt|¦«tj |¦«|¦«S)zEYield possible egg or source distribution objects based on a filename)rLrÚosrEr[)ÚfilenamerPs  r)Údistros_for_filenamerc¤s3€åݐxÑ Ô ¥"¤'×"2Ò"2°8Ñ"<Ô"<¸hñôðr6c
#ó¾K—| d¦«}|s#td„|dd…D¦«¦«rdStt|¦«¦«D]&}||dd… ¦«rnŒ't|¦«}t||d |d|…¦«d ||d…¦«|||¬¦«V—dS)zÏGenerate the interpretation of a source distro name

    Note: if `location` is a filesystem filename, you should call
    ``pkg_resources.normalize_path()`` on it before passing it to this
    routine!
    rSc3ó@K—|]}tjd|¦«V—ŒdS)z	py\d\.\d$N)ÚrerN)Ú.0Úps  r)ú	<genexpr>z(interpret_distro_name.<locals>.<genexpr>¶s.èè€ÐKÐK¸Abœh |°QÑ7Ô7ÐKÐKÐKÐKÐKÐKr6éNr)Ú
py_versionrKr^)r@ÚanyÚrangerZÚisdigitrÚjoin)rTr[rPrkrKr^rBrhs        r)r r «s
èè€ð
NŠN˜3ÑÔ€EØð#ÐKÐKÀÀqÀrÀrÄÐKÑKÔKÑKÔKðàˆõ•3u‘:”:Ñ
Ô
ððˆØŒ8BQBŒ<×ÒÑ!Ô!ð	ØˆEð	õ
‰JŒJˆå
ØØØŠr˜r”ÑÔØŠqrr”ÑÔØØØðñôðððððr6có<‡—t‰¦«ˆfd„¦«}|S)zs
    Wrap a function returning an iterable such that the resulting iterable
    only ever yields unique items.
    có.•—t‰|i|¤Ž¦«S©Nr)ÚargsÚkwargsÚfuncs  €r)Úwrapperzunique_values.<locals>.wrapperÓs ø€å˜t˜t TÐ4¨VÐ4Ð4Ñ5Ô5Ð5r6r)rurvs` r)Ú
unique_valuesrwÍs5ø€õˆ4[„[ð6ð6ð6ð6ñ„[ð6ð€Nr6z3<([^>]*\srel\s{0,10}=\s{0,10}['"]?([^'" >]+)[^>]*)>c
#óÖK—t |¦«D]Ì}| ¦«\}}tt	t
j| ¦« d¦«¦«¦«}d|vsd|vr_t |¦«D]D}tj |t| d¦«¦«¦«V—ŒEŒÍdD]|}| |¦«}|dkr_t ||¦«}|rBtj |t| d¦«¦«¦«V—Œ}dS)zEFind rel="homepage" and rel="download" links in `page`, yielding URLsú,Úhomepager:r)z
<th>Home Pagez<th>Download URLr9N)ÚRELÚfinditerÚgroupsÚsetÚmapÚstrÚstripr/r@ÚHREFr=r%ÚurljoinÚ
htmldecoderOÚfindÚsearch)rAÚpagerNÚtagÚrelÚrelsÚposs       r)Úfind_external_linksrŒàsMèè€õ—’˜dÑ#Ô#ðLðLˆØ—<’<‘>”>‰ˆˆSÝ•3•s”y #§)¢)¡+¤+×"3Ò"3°CÑ"8Ô"8Ñ9Ô9Ñ:Ô:ˆØ˜ÐР¨tÐ!3Ð!3ÝŸš sÑ+Ô+ð
Lð
LÝ”l×*Ò*¨3µ
¸5¿;º;Àq¹>¼>Ñ0JÔ0JÑKÔKÐKÐKÐKÐKøà4ðLðLˆØiŠi˜‰nŒnˆØ"Š9ˆ9Ý—K’K  cÑ*Ô*ˆEØð
LÝ”l×*Ò*¨3µ
¸5¿;º;Àq¹>¼>Ñ0JÔ0JÑKÔKÐKÐKÐKøðLðLr6có$—eZdZdZd„Zd„Zd„ZdS)ÚContentCheckerzP
    A null content checker that defines the interface for checking content
    có—dS)z3
        Feed a block of data to the hash.
        N©©ÚselfÚblocks  r)ÚfeedzContentChecker.feedøs	€ð	ˆr6có—dS)zC
        Check the hash. Return False if validation fails.
        Tr©r’s r)Úis_validzContentChecker.is_validþs	€ðˆtr6có—dS)zu
        Call reporter with information about the checker (hash name)
        substituted into the template.
        Nr)r’ÚreporterÚtemplates   r)ÚreportzContentChecker.reports	€ð
	ˆr6N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r”r—r›rr6r)rŽrŽósK€€€€€ðððððððððððððr6rŽcó\—eZdZejd¦«Zd„Zed„¦«Zd„Z	d„Z
d„ZdS)ÚHashCheckerzK(?P<hash_name>sha1|sha224|sha384|sha256|sha512|md5)=(?P<expected>[a-f0-9]+)cóT—||_tj|¦«|_||_dSrr)Ú	hash_nameÚhashlibÚnewÚhashÚexpected)r’r£r§s   r)Ú__init__zHashChecker.__init__s%€Ø"ˆŒÝ”K 	Ñ*Ô*ˆŒ	Ø ˆŒ
ˆ
ˆ
r6cóô—tj |¦«d}|st¦«S|j |¦«}|st¦«S|di| ¦«¤ŽS)z5Construct a (possibly null) ContentChecker from a URLr9r)r=r%r>rŽÚpatternr†Ú	groupdict)ÚclsrArHrNs    r)Úfrom_urlzHashChecker.from_urls{€õ”<×(Ò(¨Ñ-Ô-¨bÔ1ˆØð	$Ý!Ñ#Ô#Ð#Ø”×"Ò" 8Ñ,Ô,ˆØð	$Ý!Ñ#Ô#Ð#؈sÐ'Ð'U—_’_Ñ&Ô&Ð'Ð'Ð'r6có:—|j |¦«dSrr)r¦Úupdater‘s  r)r”zHashChecker.feed"s€ØŒ	×Ò˜ÑÔÐÐÐr6cóF—|j ¦«|jkSrr)r¦Ú	hexdigestr§r–s r)r—zHashChecker.is_valid%s€ØŒy×"Ò"Ñ$Ô$¨¬
Ò5Ð5r6có,—||jz}||¦«Srr)r£)r’r™ršÚmsgs    r)r›zHashChecker.report(s€Ø˜œÑ'ˆØˆx˜‰}Œ}Ðr6N)rœrržrfÚcompilerªr¨Úclassmethodr­r”r—r›rr6r)r¡r¡sƒ€€€€€ØˆbŒjð	#ñô€Gð
!ð!ð!ð
ð(ð(ñ„[ð(ð ð ð ð6ð6ð6ðððððr6r¡cór‡—eZdZdZ				d3dedefˆfd„
Zˆfd	„Zd4defd„Zd4d
efd„Z	d4defd„Z
d„Zd„Zd„Z
d„Zd„Zd5d„Zd„Zd5ˆfd„	Zd„Zd„Zd„Zd„Zd„Z				d6deded efd!„Z	d7dedefd"„Zd#„Zd$Zd%„Zd&„Zd5d'„Zd(„Ze d)„¦«Z!d*„Z"d+„Z#d,„Z$d-„Z%d.„Z&e d/„¦«Z'd0„Z(d1„Z)d2„Z*ˆxZ+S)8rz;A distribution index that scans web pages for download URLsúhttps://pypi.org/simple/©Ú*NTÚ	index_urlÚ
verify_sslcór•—t¦«j|i|¤Ž|dd| d¦«…z|_i|_i|_i|_tjd 	tt|¦«¦«¦«j|_
g|_tjj|_dS)Nr8ú|)Úsuperr¨r0rºÚscanned_urlsÚfetched_urlsÚ
package_pagesrfr´rorrrNÚallowsÚto_scanr=ÚrequestÚurlopenÚopener)r’rºÚhostsÚ	ca_bundler»rsÚkwÚ	__class__s       €r)r¨zPackageIndex.__init__0s¢ø€ð	‰ŒÔ˜$Ð% "Ð%Ð%Ð%Ø" SÐ)F¨y×/AÒ/AÀ#Ñ/FÔ/FÐ+FÐ)FÔ%GÑGˆŒØ"$ˆÔØ"$ˆÔØ#%ˆÔÝ”j §¢­#­i¸Ñ*?Ô*?Ñ!@Ô!@ÑAÔAÔGˆŒØˆŒÝ”nÔ,ˆŒˆˆr6có”•—	t|j¦«n#t$rYdSwxYwt¦« |¦«Srr)rrVÚ	Exceptionr¾Úadd)r’ÚdistrÊs  €r)rÍzPackageIndex.addBsSø€ð	Ý˜$œ,Ñ'Ô'Ð'Ð'øÝð	ð	ð	ؐ44ð	øøøå‰wŒw{Š{˜4Ñ Ô Ð sƒ˜
&¥&FÚretrievec	ó—||jvr|sdSd|j|<t|¦«s| |¦«dStt	|¦«¦«}|r-| |¦«sdS| d|¦«|s|r	||jvr$tt|j	|¦«¦«dS| |¦«sd|j|<dS| 
d|¦«d|j|<d}| |||z¦«}|€dSt|tjj¦«r(|jdkr| 
d|jz¦«d|j|j<d|j d	d
¦« ¦«vr| ¦«dS|j}| ¦«}t|t0¦«sTt|tjj¦«rd}n|j d¦«pd}| |d
¦«}| ¦«t6 |¦«D]W}	tj |t?|	  d¦«¦«¦«}
| !|
¦«ŒX| "|j#¦«r-tI|dd¦«dkr| %||¦«}dSdSdS)z<Evaluate a URL as a possible download, and maybe retrieve itNTzFound link: %sz
Reading %sz<Download error on %s: %%s -- Some packages may not be found!i‘zAuthentication error: %sÚhtmlúcontent-typeÚzlatin-1ÚcharsetÚignorerÚcodeé”)&r¿Ú
URL_SCHEMEÚprocess_filenameÚlistrÚurl_okÚdebugrÀrrÍÚinfoÚopen_urlÚ
isinstancer=ÚerrorÚ	HTTPErrorrÖr³rAÚheadersÚgetr/ÚcloseÚreadr€Ú	get_paramÚdecoder‚r|r%rƒr„rOÚprocess_urlr1rºÚgetattrÚ
process_index)r’rArÏÚdistsÚtmplÚfr3r‡rÔrNÚlinks           r)rèzPackageIndex.process_urlKsó€à$Ô#Ð#Ð#¨HÐ#ØˆFØ!%ˆÔ˜#Ñݘ#‰Œð	2Ø×!Ò! #Ñ&Ô&Ð&ØˆF坨Ñ-Ô-Ñ.Ô.ˆEØð
2Ø—{’{ 3Ñ'Ô'ðؐFØ—
’
Ð+¨SÑ1Ô1Ð1àð	˜ð	 C¨4Ô+<Ð$<Ð$<Ý•T”X˜uÑ%Ô%Ñ&Ô&Ð&ØˆFà{Š{˜3ÑÔð	Ø%)ˆDÔ˜cÑ"ØˆFà	Š	, Ñ$Ô$Ð$Ø!%ˆÔ˜#ÑØMˆØMŠM˜#˜t c™zÑ*Ô*ˆØˆ9ØˆFݐaœÔ/Ñ0Ô0ð	:°Q´V¸s²]°]ØIŠIÐ0°1´5Ñ8Ñ9Ô9Ð9Ø#'ˆÔ˜!œ%Ñ Ø˜œŸš ~°rÑ:Ô:×@Ò@ÑBÔBÐBÐBØ
GŠG‰IŒIˆIØˆFàŒuˆØvŠv‰xŒxˆÝ˜$¥Ñ$Ô$ð	2å˜!Vœ\Ô3Ñ4Ô4ð
Fà#àœ)×-Ò-¨iÑ8Ô8ÐE¸IØ—;’;˜w¨Ñ1Ô1ˆDØ	Š‰	Œ	ˆ	Ý—]’] 4Ñ(Ô(ð	#ð	#ˆEÝ”<×'Ò'¨­j¸¿ºÀQ¹¼Ñ.HÔ.HÑIÔIˆDØ×Ò˜TÑ"Ô"Ð"Ð"؏>Š>˜$œ.Ñ)Ô)ð	1­g°a¸ÀÑ.FÔ.FÈ#Ò.MÐ.MØ×%Ò% c¨4Ñ0Ô0ˆDˆDˆDð	1ð	1Ð.MÐ.Mr6Únestedcó —tj |¦«s| d|¦«dStj |¦«rl|sjtj |¦«}tj|¦«D]6}| tj ||¦«d¦«Œ7t|¦«}|r:| 
d|¦«tt|j
|¦«¦«dSdS)Nz
Not found: %sTz	Found: %s)rarEÚexistsÚwarnÚisdirÚrealpathÚlistdirrÙrorcrÜrÚrrÍ)r’ÚfnrïrEÚitemrës      r)rÙzPackageIndex.process_filename€sü€åŒw~Š~˜bÑ!Ô!ð	ØIŠIo rÑ*Ô*Ð*ØˆFå
Œ7=Š=˜ÑÔð	F Vð	FÝ”7×#Ò# BÑ'Ô'ˆDÝœ
 4Ñ(Ô(ð
Fð
FØ×%Ò%¥b¤g§l¢l°4¸Ñ&>Ô&>ÀÑEÔEÐEÐEå$ RÑ(Ô(ˆØð	'ØJŠJ{ BÑ'Ô'Ð'Ý•T”X˜uÑ%Ô%Ñ&Ô&Ð&Ð&Ð&ð	'ð	'r6ÚfatalcóN—t|¦«}|o*| d¦« ¦«dk}|s8| tj |¦«d¦«rdSd}|rt||z¦«‚| ||¦«dS)NrÚfileTz¡
Note: Bypassing %s (disallowed host; see https://setuptools.pypa.io/en/latest/deprecated/easy_install.html#restricting-downloads-with-allow-hosts for details).
F)	rØrOr/rÂr=r%r>rrò)r’rArøÚsÚis_filer³s      r)rÛzPackageIndex.url_oks§€Ýs‰OŒOˆØÐ4˜Ÿš ™
œ
×(Ò(Ñ*Ô*¨fÒ4ˆØð	d—k’k¥&¤,×"7Ò"7¸Ñ"<Ô"<¸QÔ"?Ñ@Ô@ð	ؐ4ð
Wð	ð
ð	Ý   s¡Ñ+Ô+Ð+àIŠIc˜3ÑÔÐؐ5r6cóª—ttjj|¦«}d„|D¦«}t	tj|j|¦«¦«dS)Nc3óvK—|]4}tj|¦«D]}| d¦«¯||fV—ŒŒ5dS)z	.egg-linkN)rarõr0)rgrEÚentrys   r)riz.PackageIndex.scan_egg_links.<locals>.<genexpr>¢smèè€ð
ð
àÝœ DÑ)Ô)ð
ð
ð؏~Š~˜kÑ*Ô*ð	
Ø
5ˆMð
ð
ð
ð
ð
ð
ð
r6)ÚfilterrarErórÚÚ	itertoolsÚstarmapÚ
scan_egg_link)r’Úsearch_pathÚdirsÚ	egg_linkss    r)Úscan_egg_linkszPackageIndex.scan_egg_links sY€Ý•b”g”m [Ñ1Ô1ˆð
ð
àð
ñ
ô
ˆ	õ	
YÔ
˜tÔ1°9Ñ
=Ô
=Ñ>Ô>Ð>Ð>Ð>r6c
óü—ttj ||¦«¦«}t	tdt
tj| 	¦«¦«¦«¦«}t|¦«dkrdS|\}}ttj ||¦«¦«D]?}tjj|g|¢RŽ|_t|_| |¦«Œ@dS)Nrj)rrarErorÚrrr€rÚ
splitlinesrZrrTr
rKrÍ)r’rErÿÚcontentÚlinesÚegg_pathÚ
setup_pathrÎs        r)rzPackageIndex.scan_egg_linkªsЀÝ*­2¬7¯<ª<¸¸eÑ+DÔ+DÑEÔEˆå•V˜D¥#¥c¤i°×1CÒ1CÑ1EÔ1EÑ"FÔ"FÑGÔGÑHÔHˆåˆu‰:Œ:˜Š?ˆ?àˆFà$ш*å&¥r¤w§|¢|°D¸(Ñ'CÔ'CÑDÔDð	ð	ˆDÝœGœL¨Ð6°Ð6Ð6Ð6ˆDŒMÝ)ˆDŒOØHŠHT‰NŒNˆNˆNð	ð	r6c	ó—d}| |j¦«s|Stttjj|t|j¦«d… d¦«¦«¦«}t|¦«dks
d|dvr|St|d¦«}t|d¦«}d|j | 
¦«i¦«|<t|¦«t|¦«fS)N©NNr8rjr<rrT)r1rºrÚrr=r%r?rZr@rrrÁÚ
setdefaultr/r)r’rîÚNO_MATCH_SENTINELrBÚpkgÚvers      r)Ú_scanzPackageIndex._scanºsé€à&ÐØŠ˜tœ~Ñ.Ô.ð	%Ø$Ð$å•SœÔ-¨tµC¸¼Ñ4GÔ4GÐ4IÐ4IÔ/J×/PÒ/PÐQTÑ/UÔ/UÑVÔVÑWÔWˆÝˆu‰:Œ:˜Š?ˆ?˜c U¨1¤X˜o˜oØ$Ð$õ˜˜aœÑ!Ô!ˆÝ˜5 œ8Ñ$Ô$ˆØ?CˆÔ×%Ò% c§i¢i¡k¤k°2Ñ6Ô6°tÑ<ݘ3ÑÔ¥¨SÑ!1Ô!1Ð1Ð1r6có\—t |¦«D]f}	| tj |t
| d¦«¦«¦«¦«ŒW#t$rYŒcwxYw| |¦«\}}|sdSt||¦«D]c}t|¦«\}}| d¦«r%|s#|r|d|›d|›z
}n| |¦«| 
|¦«Œdt d„|¦«S)z#Process the contents of a PyPI pagerrÓú.pyz#egg=rScó6—d| ddd¦«zS)Nz<a href="%s#md5=%s">%s</a>rérj)rO)Úms r)ú<lambda>z,PackageIndex.process_index.<locals>.<lambda>äs€Ð2°Q·W²W¸QÀÀ1Ñ5EÔ5EÑE€r6)r‚r|rr=r%rƒr„rOr&rŒrIr0Úneed_version_infoÚscan_urlÚPYPI_MD5Úsub)	r’rAr‡rNrrÚnew_urlr3Úfrags	         r)rêzPackageIndex.process_indexÊsN€õ—]’] 4Ñ(Ô(ð	ð	ˆEð
Ø—
’
6œ<×/Ò/°µZÀÇÂÈAÁÄÑ5OÔ5OÑPÔPÑQÔQÐQÐQøÝð
ð
ð
ؐð
øøøð—:’:˜c‘?”?‰ˆˆSØð	ؐ2õ+¨3°Ñ5Ô5ð	#ð	#ˆGå)¨'Ñ2Ô2‰JˆD$؏}Š}˜UÑ#Ô#ð
0¨Dð
0Øð0ؐG¨s¨s¨s°C°CÐ8Ñ8GGà×*Ò*¨3Ñ/Ô/Ð/ØMŠM˜'Ñ"Ô"Ð"Ð"å|Š|ØEÐEÀtñ
ô
ð	
sžAA2Á2
A?Á>A?có2—| d|¦«dS)NzPPage at %s links to .py file(s) without version info; an index scan is required.)Úscan_all©r’rAs  r)rzPackageIndex.need_version_infoçs*€Ø
Š
ð
 àñ	
ô	
ð	
ð	
ð	
r6có —|j|jvr%|r|j|g|¢RŽ| d¦«| |j¦«dS)Nz6Scanning index of all packages (this may take a while))rºrÀròrÝr©r’r³rss   r)r"zPackageIndex.scan_allîsa€ØŒ> Ô!2Ð2Ð2Øð
&ؐ”	˜#Ð% Ð%Ð%Ð%Ð%ØIŠIÐNÑOÔOÐOØ
Š
d”nÑ%Ô%Ð%Ð%Ð%r6cóÊ—| |j|jzdz¦«|j |j¦«s%| |j|jzdz¦«|j |j¦«s| |¦«t|j |jd¦«¦«D]}| |¦«ŒdS)Nr8r)	rrºÚunsafe_namerÁrãÚkeyrUÚnot_found_in_indexrÚ)r’ÚrequirementrAs   r)Ú
find_packageszPackageIndex.find_packagesõsڀØ
Š
d”n {Ô'>Ñ>ÀÑDÑEÔEÐEàÔ!×%Ò% k¤oÑ6Ô6ð	KàMŠM˜$œ.¨;Ô+CÑCÀcÑIÑJÔJÐJàÔ!×%Ò% k¤oÑ6Ô6ð	1à×#Ò# KÑ0Ô0Ð0å˜Ô*×.Ò.¨{¬ÀÑCÔCÑDÔDð	ð	ˆCàMŠM˜#ÑÔÐÐð	ð	r6cóø•—| ¦«| |¦«||jD]!}||vr|cS| d||¦«Œ"t	¦« ||¦«S)Nz%s does not match %s)Úprescanr+r(rÜr¾Úobtain)r’r*Ú	installerrÎrÊs    €r)r.zPackageIndex.obtains‚ø€ØŠ‰ŒˆØ×Ò˜;Ñ'Ô'Ð'ؘœÔ)ð	Bð	BˆDؐ{Ð"Ð"ؐØJŠJÐ-¨{¸DÑAÔAÐAÐA݉wŒw~Š~˜k¨9Ñ5Ô5Ð5r6có2—| |jd|z¦«| ¦«sd| ¦«t	j|¦«t
|jj›dtj	 
|¦«›d¦«‚dS)z-
        checker is a ContentChecker
        zValidating %%s checksum for %sz validation failed for z; possible download problem?N)r›rÜr—räraÚunlinkrr¦r2rEr[)r’ÚcheckerrbÚtfps    r)Ú
check_hashzPackageIndex.check_hash
s›€ð	Št”zÐ#CÀhÑ#NÑOÔOÐOØ×ÒÑ!Ô!ð	ØIŠI‰KŒKˆKÝŒIhÑÔÐÝ ð”<Ô$Ð$Ð$¥b¤g×&6Ò&6°xÑ&@Ô&@Ð&@Ð&@ðBñôð
ð	ð	r6cóþ—|D]y}|j@t|¦«r1| d¦«stt	|¦«¦«r| |¦«Œ_|j |¦«ŒzdS)z;Add `urls` to the list that will be prescanned for searchesNúfile:)rÃrØr1rÚrrÚappend)r’ÚurlsrAs   r)Úadd_find_linkszPackageIndex.add_find_linkss‘€àð	)ð	)ˆCà”Ð$Ý! #‘”ð%à—>’> 'Ñ*Ô*ð%õ¨Ñ,Ô,Ñ-Ô-ð%ð—
’
˜cÑ"Ô"Ð"Ð"ð”×#Ò# CÑ(Ô(Ð(Ð(ð	)ð	)r6cóp—|jr'tt|j|j¦«¦«d|_dS)z7Scan urls scheduled for prescanning (e.g. --find-links)N)rÃrÚrrr–s r)r-zPackageIndex.prescan*s3€àŒ<ð	3Ý•T”] D¤LÑ1Ô1Ñ2Ô2Ð2؈Œˆˆr6có—||jr
|jd}}n	|jd}}|||j¦«| ¦«dS)Nz#Couldn't retrieve index page for %rz3Couldn't find index page for %r (maybe misspelled?))r(rÝròr'r")r’r*Úmethr³s    r)r)zPackageIndex.not_found_in_index0sR€Ø”Ô ð	YØœ	Ð#H#ˆDˆDàœ	Ð#X#ˆDØˆˆS+Ô)Ñ*Ô*Ð*Ø
Š
‰Œˆˆˆr6có¤—t|t¦«s—t|¦«}|rV| ||¦«}t	|¦«\}}| d¦«r| |||¦«}|Stj 	|¦«r|St|¦«}t| ||¦«dd¦«S)aLocate and/or download `spec` to `tmpdir`, returning a local path

        `spec` may be a ``Requirement`` object, or a string containing a URL,
        an existing local filename, or a project/version requirement spec
        (i.e. the string form of a ``Requirement`` object).  If it is the URL
        of a .py file with an unambiguous ``#egg=name-version`` tag (i.e., one
        that escapes ``-`` as ``_`` throughout), a trivial ``setup.py`` is
        automatically created alongside the downloaded file.

        If `spec` is a ``Requirement`` object or a string containing a
        project/version requirement spec, this method returns the location of
        a matching distribution (possibly after downloading it to `tmpdir`).
        If `spec` is a locally existing file or directory name, it is simply
        returned unchanged.  If `spec` is a URL, it is downloaded to a subpath
        of `tmpdir`, and the local filename is returned.  Various errors may be
        raised if a problem occurs during downloading.
        rrTN)
rßrrØÚ
_download_urlrIr0Ú	gen_setuprarErñr*réÚfetch_distribution)r’r'ÚtmpdirrCÚfoundr3rHs       r)r:zPackageIndex.download8sʀõ$˜$¥Ñ,Ô,ð
	3Ý Ñ%Ô%ˆFØð
3à×*Ò*¨4°Ñ8Ô8Ý!1°$Ñ!7Ô!7‘hØ—=’= Ñ'Ô'ðDØ ŸNšN¨5°(¸FÑCÔCEؐÝ”—’ Ñ%Ô%ð
3àå,¨TÑ2Ô2Ýt×.Ò.¨t°VÑ<Ô<¸jÈ$ÑOÔOÐOr6Ú
force_scanÚsourceÚ
develop_okcó0‡‡‡‡‡	—‰ d|¦«t¦«Š	d}d	ˆˆˆ	ˆˆfd„	}|r4‰ ¦«‰ |¦«||¦«}|s||||¦«}|€&‰j‰ ¦«||¦«}|€"|s ‰ |¦«||¦«}|€‰ d‰rdpd|¦«dS‰ d|¦«| |j¬¦«S)
a|Obtain a distribution suitable for fulfilling `requirement`

        `requirement` must be a ``pkg_resources.Requirement`` instance.
        If necessary, or if the `force_scan` flag is set, the requirement is
        searched for in the (online) package index as well as the locally
        installed packages.  If a distribution matching `requirement` is found,
        the returned distribution's ``location`` is the value you would have
        gotten from calling the ``download()`` method with the matching
        distribution's URL or filename.  If no matching distribution is found,
        ``None`` is returned.

        If the `source` flag is set, only source distributions and source
        checkout links will be considered.  Unless the `develop_ok` flag is
        set, development and system eggs (i.e., those using the ``.egg-info``
        format) will be ignored.
        zSearching for %sNcóz•—|€‰}||jD]§}|jtkr2‰s0|‰vr+‰ d|¦«‰ |¦«ŒD||vo|jt
kp‰}|rJ‰ |j‰	¦«}||_tj
 |j¦«r|cSŒ¨dS)Nz&Skipping development or system egg: %s)r(rKrròrÍr
r:rTÚdownload_locationrarErñ)
ÚreqÚenvrÎÚtestÚlocrEr’ÚskippedrDrAs
     €€€€€r)r…z-PackageIndex.fetch_distribution.<locals>.findxsÝø€Øˆ{ؐð˜CœGœð
$ð
$Ø”?¥lÒ2Ð2¸:Ð2Ø 7Ð*Ð*ØŸ	š	ØDØ ñôðð Ÿš DÑ)Ô)Ð)Øà˜s{ÐU¨¬½;Ò(FÐ(TÈfÈ*Øð$ØŸ-š-¨¬
°vÑ>Ô>CØ-0DÔ*Ý”w—~’~ dÔ&<Ñ=Ô=ð$Ø#˜˜˜øà4r6z:No local packages or working download links found for %s%sza source distribution of rÓzBest match: %s)rTrr)rÝr~r-r+rÃròÚclonerH)
r’r*rArCrDrEÚlocal_indexrÎr…rMs
` ` ``   @r)r@zPackageIndex.fetch_distributionZsmøøøøø€ð4	
	Š	Ð$ kÑ2Ô2Ð2Ý‘%”%ˆØˆð	ð	ð	ð	ð	ð	ð	ð	ð	ð	ð0ð	%ØLŠL‰NŒNˆNØ×Ò˜{Ñ+Ô+Ð+ؐ4˜Ñ$Ô$ˆDàð	2˜Ð/ؐ4˜ [Ñ1Ô1ˆDàˆ<ØŒ|Ð'Ø—’‘”Ø4˜Ñ$Ô$ˆDàˆ< 
ˆ<Ø×Ò˜{Ñ+Ô+Ð+ؐ4˜Ñ$Ô$ˆDàˆ<ØIŠIØLØÐ7Ð7Ð=¸2Øñ
ô
ð
ð
4àIŠIÐ&¨Ñ-Ô-Ð-Ø—:’: tÔ'=:Ñ>Ô>Ð>r6cóH—| ||||¦«}||jSdS)a3Obtain a file suitable for fulfilling `requirement`

        DEPRECATED; use the ``fetch_distribution()`` method now instead.  For
        backward compatibility, this routine is identical but returns the
        ``location`` of the downloaded distribution instead of a distribution
        object.
        N)r@rT)r’r*rArCrDrÎs      r)ÚfetchzPackageIndex.fetch¬s0€ð×&Ò& {°F¸JÈÑOÔOˆØÐØ”=Ð ؈tr6có—t |¦«}|r.d„t|| d¦«d¦«D¦«pg}t	|¦«dkrZt
j |¦«}t
j |¦«|krvt
j 	||¦«}t
j 
|¦«r t
j ||¦«stj
||¦«|}tt
j 	|d¦«dd¬¦«5}| d|dj›d	|dj›d
t
j |¦«d›d¦«ddd¦«n#1swxYwY|S|rt'd|›d
|›¦«‚t'd¦«‚)Ncó —g|]}|j¯	|‘ŒSr)rV)rgÚds  r)ú
<listcomp>z*PackageIndex.gen_setup.<locals>.<listcomp>¿s0€ðððàØ”9ðØðððr6rzsetup.pyÚwzutf-8)Úencodingz(from setuptools import setup
setup(name=rz
, version=z, py_modules=[z])
z9Can't unambiguously interpret project/version identifier zI; any dashes in the name or version should be escaped using underscores. zpCan't process plain .py files without an '#egg=name-version' suffix to enable automatic setup script generation.)rMrNr rOrZrarEr[ÚdirnamerorñÚsamefileÚshutilÚcopy2ÚopenÚwriterUrVÚsplitextr)	r’rbrHrArNrër[Údstrús	         r)r?zPackageIndex.gen_setup»s€Ý×"Ò" 8Ñ,Ô,ˆàð
ððå.¨x¸¿ºÀQ¹¼ÈÑNÔNðñôð
ðð	õˆu‰:Œ:˜Š?‰?Ý”w×'Ò'¨Ñ1Ô1ˆHõŒwŠ˜xÑ(Ô(¨FÒ2Ð2Ý”g—l’l 6¨8Ñ4Ô4ÝœŸš sÑ+Ô+ð#µ´×0@Ò0@ÀÈ3Ñ0OÔ0Oð#Ý”L ¨3Ñ/Ô/Ð/Ø"Hå•b”g—l’l 6¨:Ñ6Ô6¸ÀgÐNÑNÔNð	
ÐRVØ—
’

ð˜aœÔ-Ð-Ð-ؘaœÔ(Ð(Ð(Ýœ×(Ò(¨Ñ2Ô2°1Ô5Ð5Ð5ðñôðð	
ð	
ð	
ñ	
ô	
ð	
ð	
ð	
ð	
ð	
ð	
øøøð	
ð	
ð	
ð	
ðˆOà
ð
	Ý .ð&. X X¨u¨uð6ñôð
õ!ðGñôð
sÅ	AF.Æ.F2Æ5F2i có¨—| d|¦«d}	t |¦«}| |¦«}t	|t
jj¦«r"td|›d|j	›d|j
›¦«‚| ¦«}d}|j}d}d|vrP| d¦«}	ttt|	¦«¦«}| |||||¦«t#|d	¦«5}
	| |¦«}|rI| |¦«|
 |¦«|dz
}| |||||¦«nnŒb| |||
¦«ddd¦«n#1swxYwY||r| ¦«SS#|r| ¦«wwxYw)NzDownloading %szCan't download ú: ú rr9zcontent-lengthzContent-LengthÚwbTr)rÝr¡r­rÞrßr=ràrárrÖr³Údl_blocksizeÚget_allÚmaxrÚintÚ
reporthookr\rår”r]r4rä)r’rArbÚfpr2râÚblocknumÚbsÚsizeÚsizesr3r“s            r)Ú_download_tozPackageIndex._download_toës€Ø	Š	Ð" CÑ(Ô(Ð(à
ˆð	Ý!×*Ò*¨3Ñ/Ô/ˆGØ—’˜sÑ#Ô#ˆBݘ"fœlÔ4Ñ5Ô5ð
Ý$nØ25°#°#°r´w°w°wÀÄÀÐGñôðð—g’g‘i”iˆG؈HØÔ"ˆB؈DØ 7Ð*Ð*àŸšÐ(8Ñ9Ô9Ý3s E™?œ?Ñ+Ô+Ø—’  X¨x¸¸TÑBÔBÐBݐh Ñ%Ô%ð

8¨ðØŸGšG B™KœKEØðØŸš UÑ+Ô+Ð+ØŸ	š	 %Ñ(Ô(Ð(Ø  A™
˜ØŸš¨¨X°xÀÀTÑJÔJÐJÐJàðð—’ ¨°3Ñ7Ô7Ð7ð

8ð

8ð

8ñ

8ô

8ð

8ð

8ð

8ð

8ð

8ð

8øøøð

8ð

8ð

8ð

8ðàð
Ø—’‘
”


ð
øˆrð
Ø—’‘
”


ð
øøøs1šC3F8Ä
A;FÆF8ÆFÆF8ÆFÆF8Æ8Gcó—dSrrr)r’rArbrjÚblksizerls      r)rhzPackageIndex.reporthooks€Øˆr6có¤—| d¦«rt|¦«S	t||j¦«S#tt
jjf$r]}d d„|j	D¦«¦«}|r| 
||¦«nt|›d|›¦«|‚Yd}~dSd}~wtj
j$r}|cYd}~Sd}~wtj
j$rD}|r| 
||j¦«ntd|›d|j›¦«|‚Yd}~dSd}~wt
jj$rC}|r| 
||j¦«nt|›d|j›¦«|‚Yd}~dSd}~wt
jjt(f$r:}|r| 
||¦«ntd|›d|›¦«|‚Yd}~dSd}~wwxYw)Nr6rbcó,—g|]}t|¦«‘ŒSr)r€)rgÚargs  r)rUz)PackageIndex.open_url.<locals>.<listcomp>s€Ð7Ð7Ð7¨C ™HœHÐ7Ð7Ð7r6zDownload error for raz7 returned a bad status line. The server might be down, )r1Ú
local_openÚopen_with_authrÆr&ÚhttpÚclientÚ
InvalidURLrorsròrr=ràráÚURLErrorÚreasonÚ
BadStatusLineÚlineÚ
HTTPExceptionÚOSError)r’rAÚwarningÚvr³s     r)rÞzPackageIndex.open_urlsm€Ø>Š>˜'Ñ"Ô"ð	#ݘc‘?”?Ð"ð	TÝ! # t¤{Ñ3Ô3Ð3øÝDœKÔ2Ð3ð	Bð	Bð	BØ—(’(Ð7Ð7°´Ð7Ñ7Ô7Ñ8Ô8ˆCØð
BØ—	’	˜' 3Ñ'Ô'Ð'Ð'å$°°°°S°SÐ%9Ñ:Ô:ÀÐAð(Ð'Ð'Ð'Ð'Ð'øøøøõŒ|Ô%ð	ð	ð	؈HˆHˆHˆHˆHˆHøøøøÝŒ|Ô$ð	ð	ð	Øð
Ø—	’	˜' 1¤8Ñ,Ô,Ð,Ð,å$nØ36°3°3¸¼¸ÐAñôàðð-Ð,Ð,Ð,Ð,Ð,øøøøõ
Œ{Ô(ð	ð	ð	Øð
Ø—	’	˜' 1¤6Ñ*Ô*Ð*Ð*å$à"% # # q¤v vð/ñôððð+Ð*Ð*Ð*Ð*Ð*øøøøõ”Ô)­7Ð3ð	Tð	Tð	TØð
TØ—	’	˜' 1Ñ%Ô%Ð%Ð%å$nÀCÀCÀCÈÈÐ%KÑLÔLÐRSÐSð&Ð%Ð%Ð%Ð%Ð%øøøøð	TøøøsL¦;»GÁAB.Â.GÃCÃGÃGÃ#9D"Ä"GÄ98E7Å7GÆ/G
Ç
Gcój—t|¦«\}}|r3d|vr.| dd¦« dd¦«}d|v°.nd}| d¦«r
|dd…}tj ||¦«}| ||¦«p| ||¦«S)Nz..ú.ú\Ú_Ú__downloaded__rRr.)rIÚreplacer0rarEroÚ
_download_vcsÚ_download_other)r’rArAr2rHrbs      r)r>zPackageIndex._download_url5s½€õ*¨#Ñ.Ô.‰ˆˆhØð	$ؘ$,,Ø—|’| D¨#Ñ.Ô.×6Ò6°t¸SÑAÔAð˜$,,øð$ˆDà=Š=˜Ñ$Ô$ð	ؘ˜˜”9ˆDå”7—<’< ¨Ñ-Ô-ˆà×!Ò! # xÑ0Ô0ÐW°D×4HÒ4HÈÈhÑ4WÔ4WÐWr6có—tj |¦«j}| d¦«\}}}tddgdgt
|¦«zz¦«}tt|h|z¦«d¦«S)a

        >>> rvcs = PackageIndex._resolve_vcs
        >>> rvcs('git+http://foo/bar')
        'git'
        >>> rvcs('hg+https://foo/bar')
        'hg'
        >>> rvcs('git:myhost')
        'git'
        >>> rvcs('hg:myhost')
        >>> rvcs('http://foo/bar')
        ú+ÚsvnÚgitÚhgN)	r=r%ÚurlsplitrCÚ	partitionr~ÚboolÚnextÚiter)rArCÚpreÚsepÚpostÚalloweds      r)Ú_resolve_vcszPackageIndex._resolve_vcsFsv€õ”×&Ò& sÑ+Ô+Ô2ˆØ×)Ò)¨#Ñ.Ô.‰ˆˆS$åu˜en¨ vµ°S±	´	Ñ'9Ñ9Ñ:Ô:ˆÝ•D˜#˜ ™Ñ)Ô)¨4Ñ0Ô0Ð0r6cóÞ—| |¦«}|sdS|dkrtd|›¦«‚| d¦«\}}}| |¦«\}}| d|›d|›d|›¦«tj|dd||g¦«t|d	|d
d|g|d|dd	d
|dg¬¦«}|2| d|›¦«tj||¦«|S)Nr‹z/Invalid config, SVN download is not supported: r<zDoing z clone from z to rNz--quietz-CÚcheckoutz--cwdÚupz-rz-q)rŒrz
Checking out )r—rrÚ_vcs_split_rev_from_urlrÝÚ
subprocessÚ
check_callÚdict)r’rAÚ
spec_filenameÚvcsrbr„ÚrevÚco_commandss        r)r‡zPackageIndex._download_vcsYs6€Ø×Ò Ñ$Ô$ˆØð	ؐ4ؐ%Š<ˆ<Ý ØGÀ#ÐGÐGñôð
ð'×0Ò0°Ñ5Ô5‰ˆ!QØ×/Ò/°Ñ4Ô4‰ˆˆSà	Š	Ð?˜3Ð?Ð?¨CÐ?Ð?°XÐ?Ð?Ñ@Ô@Ð@ÝÔ˜s G¨Y¸¸XÐFÑGÔGÐG娐d˜H j°)¸SÐAؐW˜h¨¨d°D¸#¸tÐDð
ñ
ô
ˆðˆ?ØIŠIÐ+ cÐ+Ð+Ñ,Ô,Ð,ÝÔ! +¨cÔ"2Ñ3Ô3Ð3àˆr6có0—tj |¦«j}|dkrAtj tj |¦«j¦«S| |d¦«| 	||¦«S)NrúT)
r=r%rŽrCrÄÚurl2pathnamer>rErÛÚ_attempt_download)r’rArbrCs    r)rˆzPackageIndex._download_otherrsx€Ý”×&Ò& sÑ+Ô+Ô2ˆØVÒÐÝ”>×.Ò.­v¬|×/DÒ/DÀSÑ/IÔ/IÔ/NÑOÔOÐOàŠC˜ÑÔÐØ×%Ò% c¨8Ñ4Ô4Ð4r6có2—| |d¦«dS)NT)rèr#s  r)rzPackageIndex.scan_urlzs€Ø×Ò˜˜dÑ#Ô#Ð#Ð#Ð#r6có´—| ||¦«}d| dd¦« ¦«vr| |||¦«S|S)NrÑrÒrÓ)rnrãr/Ú_invalid_download_html)r’rArbrâs    r)r¥zPackageIndex._attempt_download}sY€Ø×#Ò# C¨Ñ2Ô2ˆØW—[’[ °Ñ4Ô4×:Ò:Ñ<Ô<Ð<Ð<Ø×.Ò.¨s°G¸XÑFÔFÐFàˆOr6cóN—tj|¦«td|›¦«‚)NzUnexpected HTML page found at )rar1r)r’rArârbs    r)r¨z#PackageIndex._invalid_download_html„s)€Ý
Œ	(ÑÔÐÝÐC¸cÐCÐCÑDÔDÐDr6cóf—tj |¦«}|j dd¦«d}|j d¦«\}}}| d¦«\}}}|r||fn|df\}}	| ||d¬¦« 	¦«}
|
|	fS)	aò
        Given a possible VCS URL, return a clean URL and resolved revision if any.

        >>> vsrfu = PackageIndex._vcs_split_rev_from_url
        >>> vsrfu('git+https://github.com/pypa/setuptools@v69.0.0#egg-info=setuptools')
        ('https://github.com/pypa/setuptools', 'v69.0.0')
        >>> vsrfu('git+https://github.com/pypa/setuptools#egg-info=setuptools')
        ('https://github.com/pypa/setuptools', None)
        >>> vsrfu('http://foo/bar')
        ('http://foo/bar', None)
        rŠrr9r<ú@NrÓ)rCrErH)
r=r%rŽrCr@rErÚ
rpartitionÚ_replaceÚgeturl)rArBÚclean_schemeÚno_fragment_pathr„r“r”r•Ú
clean_pathr¡Úresolveds           r)r›z$PackageIndex._vcs_split_rev_from_urlˆs€õ”×%Ò% cÑ*Ô*ˆà”|×)Ò)¨#¨qÑ1Ô1°"Ô5ˆð"'¤×!5Ò!5°cÑ!:Ô!:ÑИ!˜Qà)×4Ò4°SÑ9Ô9‰ˆˆS$Ø),Ð>˜3 ˜+˜+°4¸°,‰ˆ
Cà—>’>ØØàð	"ñ
ô
÷
Š&‰(Œ(ð	ð˜ˆ}Ðr6có*—tj|g|¢RŽdSrr)rrÜr%s   r)rÜzPackageIndex.debug¨s €ÝŒ	#ИÐÐÐÐÐÐr6có*—tj|g|¢RŽdSrr)rrÝr%s   r)rÝzPackageIndex.info«ó €ÝŒÐtÐÐÐÐÐÐr6có*—tj|g|¢RŽdSrr)rròr%s   r)ròzPackageIndex.warn®rµr6)r·r¸NT)Frr)FFFN)FF),rœrržrŸr€rr¨rÍrèrÙrÛrrrrêrr"r+r.r4r9r-r)r:r@rQr?rdrnrhrÞr>Ústaticmethodr—r‡rˆrr¥r¨r›rÜrÝròÚ
__classcell__©rÊs@r)rr-sMø€€€€€ØEÐEð4ØØØð-ð-àð-ð
ð-ð-ð-ð-ð-ð-ð$!ð!ð!ð!ð!ð31ð31¨ð31ð31ð31ð31ðj'ð'¨4ð'ð'ð'ð'ð ð ððððð ?ð?ð?ðððð 2ð2ð2ð 
ð
ð
ð:
ð
ð
ð&ð&ð&ð&ð
ð
ð
ð6ð6ð6ð6ð6ð6ðððð
)ð
)ð
)ððððððð Pð Pð PðL!ØØ ØðP?ðP?ðð	P?ð
ðP?ðð
P?ðP?ðP?ðP?ðfMRð
ð
Ø/3ð
ØEIð
ð
ð
ð
ð,ð,ð,ð\€Lð"ð"ð"ðH
ð
ð
ð Tð Tð Tð TðDXðXðXð"ð1ð1ñ„\ð1ð$ððð25ð5ð5ð$ð$ð$ððððEðEðEðððñ„\ðð>ððððððððððððr6rz!&(#(\d+|x[\da-fA-F]+)|[\w.:-]+);?cóT—| d¦«}tj|¦«S)Nr)rOrÑÚunescape)rNÚwhats  r)Ú
decode_entityr½·s!€Ø;Š;q‰>Œ>€DÝŒ=˜ÑÔÐr6có,—tt|¦«S)a
    Decode HTML entities in the given text.

    >>> htmldecode(
    ...     'https://../package_name-0.1.2.tar.gz'
    ...     '?tokena=A&amp;tokenb=B">package_name-0.1.2.tar.gz')
    'https://../package_name-0.1.2.tar.gz?tokena=A&tokenb=B">package_name-0.1.2.tar.gz'
    )Ú
entity_subr½)Útexts r)r„r„¼s€õ•m TÑ*Ô*Ð*r6có‡—ˆfd„}|S)Nc󕇗ˆˆfd„}|S)Nc󾕗tj¦«}tj‰¦«	‰|i|¤Žtj|¦«S#tj|¦«wxYwrr)ÚsocketÚgetdefaulttimeoutÚsetdefaulttimeout)rsrtÚold_timeoutruÚtimeouts   €€r)Ú_socket_timeoutz@socket_timeout.<locals>._socket_timeout.<locals>._socket_timeoutÊsdø€Ý Ô2Ñ4Ô4ˆKÝÔ$ WÑ-Ô-Ð-ð
6ؐt˜TÐ, VÐ,Ð,åÔ(¨Ñ5Ô5Ð5Ð5ø•Ô(¨Ñ5Ô5Ð5Ð5øøøsªAÁAr)rurÉrÈs` €r)rÉz'socket_timeout.<locals>._socket_timeoutÉs*øø€ð	6ð	6ð	6ð	6ð	6ð	6ðÐr6r)rÈrÉs` r)Úsocket_timeoutrÊÈs$ø€ð	ð	ð	ð	ð	ðÐr6cóä—tj |¦«}| ¦«}t	j|¦«}| ¦«}| dd¦«S)a9
    Encode auth from a URL suitable for an HTTP header.
    >>> str(_encode_auth('username%3Apassword'))
    'dXNlcm5hbWU6cGFzc3dvcmQ='

    Long auth strings should not cause a newline to be inserted.
    >>> long_auth = 'username:' + 'password'*10
    >>> chr(10) in str(_encode_auth(long_auth))
    False
    ú
rÓ)r=r%r?ÚencodeÚbase64Ú	b64encoderçr†)ÚauthÚauth_sÚ
auth_bytesÚ
encoded_bytesÚencodeds     r)Ú_encode_authrÕ×s[€õŒ\×
!Ò
! $Ñ
'Ô
'€Fà—’‘”€JÝÔ$ ZÑ0Ô0€Mà×"Ò"Ñ$Ô$€Gà?Š?˜4 Ñ$Ô$Ð$r6có4—eZdZUdZeed<eed<defd„ZdS)Ú
CredentialzŒ
    A username/password pair.

    Displayed separated by `:`.
    >>> str(Credential('username', 'password'))
    'username:password'
    ÚusernameÚpasswordÚreturncó$—|j›d|j›S)Nú:)rØrÙr–s r)Ú__str__zCredential.__str__øs€Ø”-Ð1Ð1 $¤-Ð1Ð1Ð1r6N)rœrržrŸr€Ú__annotations__rÝrr6r)r×r×ìsO€€€€€€ððð€M€MMØ€M€MMð2˜ð2ð2ð2ð2ð2ð2r6r×có@‡—eZdZˆfd„Zed„¦«Zd„Zd„ZˆxZS)Ú
PyPIConfigcó`•—t gd¢d¦«}t¦« |¦«tj tj d¦«d¦«}tj |¦«rt||¦«dSdS)z%
        Load from ~/.pypirc
        )rØrÙÚ
repositoryrÓú~z.pypircN)
ržÚfromkeysr¾r¨rarEroÚ
expanduserrñr)r’ÚdefaultsÚrcrÊs   €r)r¨zPyPIConfig.__init__ýs’ø€õ—=’=Ð!GÐ!GÐ!GÈÑLÔLˆÝ
‰Œ×Ò˜Ñ"Ô"Ð"å
ŒW\Š\"œ'×,Ò,¨SÑ1Ô1°9Ñ
=Ô
=ˆÝ
Œ7>Š>˜"ÑÔð	3Ý(¨¨rÑ2Ô2Ð2Ð2Ð2ð	3ð	3r6c󈇗ˆfd„‰ ¦«D¦«}tt‰j|¦«¦«S)Ncód•—g|],}‰ |d¦« ¦«¯*|‘Œ-S)râ)rãr)rgÚsectionr’s  €r)rUz2PyPIConfig.creds_by_repository.<locals>.<listcomp>
sIø€ð&
ð&
ð&
àØxŠx˜ Ñ.Ô.×4Ò4Ñ6Ô6ð&
Øð&
ð&
ð&
r6)ÚsectionsržrÚ_get_repo_cred)r’Úsections_with_repositoriess` r)Úcreds_by_repositoryzPyPIConfig.creds_by_repositorysRø€ð&
ð&
ð&
ð&
àŸ=š=™?œ?ð&
ñ&
ô&
Ð"õ•C˜Ô+Ð-GÑHÔHÑIÔIÐIr6có—| |d¦« ¦«}|t| |d¦« ¦«| |d¦« ¦«¦«fS)NrârØrÙ)rãrr×)r’rêÚrepos   r)rìzPyPIConfig._get_repo_credst€ØxŠx˜ Ñ.Ô.×4Ò4Ñ6Ô6ˆØ•ZØHŠHW˜jÑ)Ô)×/Ò/Ñ1Ô1ØHŠHW˜jÑ)Ô)×/Ò/Ñ1Ô1ñ
ô
ð
ð	
r6cóv—|j ¦«D]\}}| |¦«r|cSŒdS)zŒ
        If the URL indicated appears to be a repository defined in this
        config, return the credential for that repository.
        N)rîÚitemsr1)r’rArâÚcreds    r)Úfind_credentialzPyPIConfig.find_credentialsN€ð
!%Ô 8× >Ò >Ñ @Ô @ð	ð	ÑˆJ˜Ø~Š~˜jÑ)Ô)ð
ؐð
àˆtr6)	rœrržr¨Úpropertyrîrìrôr¸r¹s@r)ràràüstø€€€€€ð	3ð	3ð	3ð	3ð	3ððJðJñ„XðJð
ð
ð
ðððððððr6ràcóÊ—tj |¦«}|\}}}}}}| d¦«rtj d¦«‚|dvrt|¦«\}	}
nd\}	}
|	sMt¦« 	|¦«}|r*t|¦«}	|j|f}tj
dg|¢RŽ|	rodt|	¦«z}	||
||||f}
tj |
¦«}tj |¦«}| d|	¦«ntj |¦«}| dt&¦«||¦«}|	rctj |j¦«\}}}}}}||kr2||
kr,||||||f}
tj |
¦«|_|S)	z4Open a urllib2 request, handling HTTP authenticationrÜznonnumeric port: '')rvÚhttpsrz*Authenticating as %s for %s (from .pypirc)zBasic Ú
Authorizationz
User-Agent)r=r%r>r0rvrwrxÚ
_splituserràrôr€rØrrÝrÕÚ
urlunparserÄÚRequestÚ
add_headerÚ
user_agentrA)rArÆÚparsedrCÚnetlocrEÚparamsrGr rÐÚaddressrórÝrBrrÄriÚs2Úh2Úpath2Úparam2Úquery2Úfrag2s                       r)ruru$sí€õŒ\×
"Ò
" 3Ñ
'Ô
'€FØ06Ñ-€FˆFD˜& %¨ð‡‚sÑÔð<ÝŒk×$Ò$Ð%:Ñ;Ô;Ð;à
Ð"Ð"Ð"Ý" 6Ñ*Ô*‰
ˆˆgˆgà$‰
ˆˆgàðJ݉|Œ|×+Ò+¨CÑ0Ô0ˆØð	Jݐt‘9”9ˆDØ”= #Ð%ˆDÝŒHÐAÐIÀDÐIÐIÐIÐIàð.؝, tÑ,Ô,Ñ,ˆØ˜  v¨u°dÐ:ˆÝ”,×)Ò)¨%Ñ0Ô0ˆÝ”.×(Ò(¨Ñ1Ô1ˆØ×Ò˜?¨DÑ1Ô1Ð1Ð1å”.×(Ò(¨Ñ-Ô-ˆà×Ґ|¥ZÑ0Ô0Ð0Ø	ˆ‰Œ€Bàð4õ06¬|×/DÒ/DÀRÄVÑ/LÔ/LÑ,ˆˆBv˜v uØ
Š<ˆ<˜B 'šM˜Mؘ  v¨v°uÐ<ˆEÝ”\×,Ò,¨UÑ3Ô3ˆBŒFà
€Ir6cóD—| d¦«\}}}|r|nd|fS)zNsplituser('user[:passwd]@host[:port]')
    --> 'user[:passwd]', 'host[:port]'.r«N)r¬)ÚhostÚuserÚdelims   r)rùrùSs0€ðŸš¨Ñ,Ô,Ñ€Dˆ%ØÐ#ˆDˆD˜t dÐ*Ð*r6có—|Srrr)rAs r)Ú
fix_sf_urlr
^s€Ø€Jr6có—tj |¦«\}}}}}}tj |¦«}t
j |¦«rtj |¦«S| 	d¦«rît
j 
|¦«rÏg}tj|¦«D]†}	t
j ||	¦«}
|	dkrt|
¦«}nzt
j 
|
¦«r|	dz
}	| d |	¬¦«¦«Œ‡d}| |d |¦«¬¦«}d\}
}nd	\}
}}d
di}t!j|¦«}tj ||
|||¦«S)z7Read a local path, with special support for directoriesr8z
index.htmlz<a href="{name}">{name}</a>)r2zB<html><head><title>{url}</title></head><body>{files}</body></html>rÌ)rAÚfiles)éÈÚOK)r×zPath not foundz	Not foundrÒz	text/html)r=r%r>rÄr¤rarEÚisfilerÅr0rórõrorr7ÚformatÚioÚStringIOràrá)rArCrDrEÚparamrGr rbrríÚfilepathÚbodyrìÚstatusÚmessagerâÚbody_streams                 r)rtrtbs€å/5¬|×/DÒ/DÀSÑ/IÔ/IÑ,€FˆFD˜% ¨ÝŒ~×*Ò*¨4Ñ0Ô0€HÝ	„w‡~‚~hÑÔðCÝŒ~×%Ò% cÑ*Ô*Ð*Ø	
ŠsÑ	Ô	ðC¥¤§
¢
¨hÑ 7Ô 7ðC؈ݔ˜HÑ%Ô%ð
	@ð
	@ˆAÝ”w—|’| H¨aÑ0Ô0ˆHؐLÒ Ð Ý/°Ñ9Ô9ØÝ”—’˜xÑ(Ô(ð
ؐS‘ØLŠLÐ6×=Ò=À1Ð=ÑEÔEÑFÔFÐFÐFàWˆDØ—;’; 3¨d¯iªi¸Ñ.>Ô.>;Ñ?Ô?ˆDØ#‰ˆà Bш˜à˜{Ð+€GÝ”+˜dÑ#Ô#€KÝŒ<×!Ò! # v¨w¸ÀÑMÔMÐMr6rr)r!)_rŸrÎÚconfigparserr¤rÑÚhttp.clientrvrrrarfrZrÄrœÚsysÚurllib.errorr=Úurllib.parseÚurllib.requestÚfnmatchrÚ	functoolsrÚtypingrÚmore_itertoolsrr#Ú
pkg_resourcesr	r
rrr
rrrrrrrrrÚsetuptools.wheelrÚ
unicode_utilsrrÚ	distutilsrÚdistutils.errorsrr´rMÚIr‚rrNrØr@rYÚ__all__Ú_SOCKET_TIMEOUTÚ_tmplrÚversion_inforýr*rrIrrLrcr rwr{rŒrŽr¡rrr¿r½r„rÊrÕr×ÚRawConfigParserràrÄrÅrurùr
rtrr6r)ú<module>r1s&ðØ*Ð*à
€
€
€
ØÐÐÐØ€€€Ø€€€ØÐÐÐØ	€	€	€	ØÐÐÐØ	€	€	€	Ø	€	€	€	Ø
€
€
€
Ø
€
€
€
ØÐÐÐØ
€
€
€
ØÐÐÐØÐÐÐØÐÐÐØÐÐÐÐÐØÐÐÐÐÐØÐÐÐÐÐà*Ð*Ð*Ð*Ð*Ð*àÐÐÐððððððððððððððððððððððððððððððððð #Ð"Ð"Ð"Ð"Ð"àQÐQÐQÐQÐQÐQÐQÐQàÐÐÐÐÐØ+Ð+Ð+Ð+Ð+Ð+àˆrŒzÐ6Ñ7Ô7€Ø€r„zÐ3°R´TÑ:Ô:€Øˆ2Œ:ðJñô€ðˆRŒZÐ,¨b¬dÑ
3Ô
3Ô
9€
Ø
.×
4Ò
4Ñ
6Ô
6€
ððð€ð€àF€Ø
\Š\Ø
ˆWŒ^˜SÔ-Ð
.¸:ðñô€
ð
ðððððð0ððð	ð	ð	ð	ð ð ð ð ðFðððð.2¸kÐTXðððððD
ð
ð
ð€b„jÐKÈRÌTÑRÔR€ðð
ðLðLñ„ðLð$ððððñôðð2ðððð.ñôððBB
ðB
ðB
ðB
ðB
;ñB
ôB
ðB
ðNˆRŒZÐ<Ñ
=Ô
=Ô
A€
ðððð
	+ð	+ð	+ððððð%ð%ð%ð*
2ð
2ð
2ð
2ð
2ñ
2ô
2ð
2ð %ð%ð%ð%ð%Ô-ñ%ô%ð%ðP &œ~Ô5ð+ð+ð+ð+ð^+ð+ð+ð1 Ñ0Ô0°Ñ@Ô@€ððððNðNðNðNðNr6