gc@s_dZddlZddlZddlZddlZddlZddlZddlZddlm Z m Z m Z m Z m Z mZmZmZmZmZmZmZmZddlmZddlmZddlmZddlmZmZmZm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z*ddlm+Z+dd l,m-Z-dd l.m/Z/dd l.m0Z0dd l1m2Z2ej3d Z4ej3dej5Z6ej3dZ7ej3dej5j8Z9dj:Z;ddddgZ<dZ=dZ>dZ?e@dZAe@dZBe@dZCe@e e@dZDe@dZEdZFej3dej5ZGeFd ZHd!ejId" ed#d$jIfZJd%eKfd&YZLd'eLfd(YZMdefd)YZNej3d*jOZPd+ZQd,ZRd-ZSdd.ZTd/ZUejVd0ZWeTe=eWZWd1ZXd2ZYdS(3s#PyPI and direct package downloadingiN( t CHECKOUT_DISTt Distributiont BINARY_DISTtnormalize_patht SOURCE_DISTtrequiret Environmenttfind_distributionst safe_namet safe_versiont to_filenamet Requirementt DEVELOP_DIST(t ssl_support(tlog(tDistutilsError(turllib2thttplibtStringIOt HTTPErrorturlparset urlunparsetunquotet splitusert url2pathnametname2codepointtunichrturljointurlsplitt urlunsplit(t filterfalse(t translate(thashlib(twraps(tget_all_headerss^egg=([-A-Za-z0-9_.]+)$shref\s*=\s*['"]?([^'"> ]+)s([^<]+) \s+\(md5\)s([-+.a-z0-9]{2,}):s.tar.gz .tar.bz2 .tar .zip .tgzt PackageIndextdistros_for_urltparse_bdist_wininsttinterpret_distro_nameicCs|j}d\}}}|jdr|jdrL|d }d}q|jddr~|dd!}|d }d}q|jd r|d }d }q|jd d r|dd!}|d }d }qn|||fS(s=Return (base,pyversion) or (None,None) for possible .exe names.exes .win32.exeitwin32s .win32-pyiiis.win-amd64.exeis win-amd64s .win-amd64-pyiN(NNN(tlowertNonetendswitht startswith(tnameR(tbasetpy_vertplat((s</usr/lib/python2.7/site-packages/setuptools/package_index.pyR%-s$           cCst|\}}}}}}t|jdd}|dkrk|dkrkt|jdd}nd|kr|jdd\}}n||fS(Nt/issourceforge.nettdownloadit#i(RRtsplit(turltschemetservertpatht parameterstquerytfragmentR-((s</usr/lib/python2.7/site-packages/setuptools/package_index.pytegg_info_for_urlEs ccst|\}}xt|||D] }|Vq%W|rtj|}|rx1t||jd|dtD] }|VqqWqndS(sEYield egg or source distribution objects that might be found at a URLit precedenceN(R;tdistros_for_locationt EGG_FRAGMENTtmatchR&tgroupR(R4tmetadataR-R:tdistR?((s</usr/lib/python2.7/site-packages/setuptools/package_index.pyR$Ms "cCs|jdr|d }n|jdrMd|krMtj|||gS|jdrt|\}}}|dk rt||||t|Snx>tD]6}|j|r|t| }t|||SqWgS(s:Yield egg or source distribution objects based on basenames.egg.zipis.eggt-s.exeN( R*Rt from_locationR%R)R&Rt EXTENSIONStlen(tlocationtbasenameRAtwin_baseR.tplatformtext((s</usr/lib/python2.7/site-packages/setuptools/package_index.pyR=Ys   cCs"tt|tjj||S(sEYield possible egg or source distribution objects based on a filename(R=RtosR7RH(tfilenameRA((s</usr/lib/python2.7/site-packages/setuptools/package_index.pytdistros_for_filenamensc cs|jd}|s^xFt|dD]1\}}t|dkr&|jdr&dSq&Wnxatdt|dD]F}t||dj|| dj||d|d|d |VqxWdS( sGenerate alternative interpretations 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! RCiispy2.Nit py_versionR<RJ(R3t enumerateRFR+trangeRtjoin( RGRHRAROR<RJtpartstitp((s</usr/lib/python2.7/site-packages/setuptools/package_index.pyR&us!  ) ccst}|j}|dkrMxgt|j|D]}|||Vq1Wn;x8|D]0}||}||krT|||VqTqTWdS(sHList unique elements, preserving order. Remember all elements ever seen.N(tsettaddR)Rt __contains__(titerabletkeytseentseen_addtelementtk((s</usr/lib/python2.7/site-packages/setuptools/package_index.pytunique_everseens         cstfd}|S(ss Wrap a function returning an iterable such that the resulting iterable only ever yields unique items. cst||S(N(R_(targstkwargs(tfunc(s</usr/lib/python2.7/site-packages/setuptools/package_index.pytwrappers(R!(RbRc((Rbs</usr/lib/python2.7/site-packages/setuptools/package_index.pyt unique_valuesss(<([^>]*\srel\s*=\s*['"]?([^'">]+)[^>]*)>ccsxtj|D]}|j\}}tttj|jjd}d|ksgd|krx7t j|D]#}t |t |j dVqwWqqWxdd D]\}|j |}|dkrt j||}|rt |t |j dVqqqWdS( sEFind rel="homepage" and rel="download" links in `page`, yielding URLst,thomepageR1is Home PagesDownload URLiN(s Home PagesDownload URL(tRELtfinditertgroupsRVtmaptstrtstripR(R3tHREFRt htmldecodeR@tfindtsearch(R4tpageR?ttagtreltrelstpos((s</usr/lib/python2.7/site-packages/setuptools/package_index.pytfind_external_linkss'(  sPython-urllib/%s setuptools/%sit setuptoolsitContentCheckercBs)eZdZdZdZdZRS(sP A null content checker that defines the interface for checking content cCsdS(s3 Feed a block of data to the hash. N((tselftblock((s</usr/lib/python2.7/site-packages/setuptools/package_index.pytfeedscCstS(sC Check the hash. Return False if validation fails. (tTrue(Ry((s</usr/lib/python2.7/site-packages/setuptools/package_index.pytis_validscCsdS(su Call reporter with information about the checker (hash name) substituted into the template. N((Rytreporterttemplate((s</usr/lib/python2.7/site-packages/setuptools/package_index.pytreports(t__name__t __module__t__doc__R{R}R(((s</usr/lib/python2.7/site-packages/setuptools/package_index.pyRxs  t HashCheckercBsJeZejdZdZedZdZdZ dZ RS(sK(?Psha1|sha224|sha384|sha256|sha512|md5)=(?P[a-f0-9]+)cCsO||_|dkr0tj|dt|_ntj||_||_dS(Ntmd5tusedforsecurity(t hash_nameR tnewtFalsethashtexpected(RyRR((s</usr/lib/python2.7/site-packages/setuptools/package_index.pyt__init__s   cCsLt|d}|stS|jj|}|s<tS||jS(s5Construct a (possibly null) ContentChecker from a URLi(RRxtpatternRpt groupdict(tclsR4R:R?((s</usr/lib/python2.7/site-packages/setuptools/package_index.pytfrom_urlscCs|jj|dS(N(Rtupdate(RyRz((s</usr/lib/python2.7/site-packages/setuptools/package_index.pyR{scCs|jj|jkS(N(Rt hexdigestR(Ry((s</usr/lib/python2.7/site-packages/setuptools/package_index.pyR}scCs||j}||S(N(R(RyR~Rtmsg((s</usr/lib/python2.7/site-packages/setuptools/package_index.pyRs ( RRtretcompileRRt classmethodRR{R}R(((s</usr/lib/python2.7/site-packages/setuptools/package_index.pyRs    cBseZdZdd&d'edZedZedZedZ dZ dZ d Z d Z d'd Zd Zd'd ZdZdZdZdZdZeeed'dZeedZdZdZdZdZd'dZdZedZdZ dZ!dZ"dZ#d Z$d!Z%ed"Z&d#Z'd$Z(d%Z)RS((s;A distribution index that scans web pages for download URLsshttps://pypi.python.org/simplet*cOstj||||d|jd |_i|_i|_i|_tjdj t t |j |_ g|_|rtjr|stjrtj||_n tj|_dS(NR0t|(RRR*t index_urlt scanned_urlst fetched_urlst package_pagesRRRRRjRR?tallowstto_scanR t is_availabletfind_ca_bundlet opener_fortopenerRturlopen(RyRthostst ca_bundlet verify_sslR`tkw((s</usr/lib/python2.7/site-packages/setuptools/package_index.pyR s   ' !c CsU||jkr| rdSt|j|%siii(R@(tm((s</usr/lib/python2.7/site-packages/setuptools/package_index.pytsRN( RmRhRRnR@t ValueErrorRvR;R*tneed_version_infotscan_urltPYPI_MD5tsub( RyR4RqRR?RRtnew_urlR-tfrag((Rys</usr/lib/python2.7/site-packages/setuptools/package_index.pyRts$&  cCs|jd|dS(NsPPage at %s links to .py file(s) without version info; an index scan is required.(tscan_all(RyR4((s</usr/lib/python2.7/site-packages/setuptools/package_index.pyRscGsO|j|jkr;|r+|j||n|jdn|j|jdS(Ns6Scanning index of all packages (this may take a while)(RRRRR(RyRR`((s</usr/lib/python2.7/site-packages/setuptools/package_index.pyRs  cCs|j|j|jd|jj|jsN|j|j|jdn|jj|jss|j|nx3t|jj|jdD]}|j|qWdS(NR0(( RRt unsafe_nameRRRZt project_nametnot_found_in_indexR(Ryt requirementR4((s</usr/lib/python2.7/site-packages/setuptools/package_index.pyt find_packagess%cCsk|j|j|x8||jD])}||kr;|S|jd||q%Wtt|j||S(Ns%s does not match %s(tprescanRRZRtsuperR#tobtain(RyRt installerRB((s</usr/lib/python2.7/site-packages/setuptools/package_index.pyRs   cCsi|j|jd||jse|jtj|td|jjtj j |fndS(s- checker is a ContentChecker sValidating %%s checksum for %ss7%s validation failed for %s; possible download problem?N( RRR}RRLtunlinkRRR,R7RH(RytcheckerRMttfp((s</usr/lib/python2.7/site-packages/setuptools/package_index.pyt check_hashs     cCsrxk|D]c}|jdksJt| sJ|jdsJtt|rZ|j|q|jj|qWdS(s;Add `urls` to the list that will be prescanned for searchessfile:N(RR)RR+RR$Rtappend(RyturlsR4((s</usr/lib/python2.7/site-packages/setuptools/package_index.pytadd_find_linkss  cCs2|jr%tt|j|jnd|_dS(s7Scan urls scheduled for prescanning (e.g. --find-links)N(RRRjRR)(Ry((s</usr/lib/python2.7/site-packages/setuptools/package_index.pyRs cCsN||jr |jd}}n|jd}}|||j|jdS(Ns#Couldn't retrieve index page for %rs3Couldn't find index page for %r (maybe misspelled?)(RZRRRR(RyRtmethR((s</usr/lib/python2.7/site-packages/setuptools/package_index.pyRs   cCst|tst|}|rp|j||}t|\}}|jdrl|j|||}n|Stjj |r|Sytj |}Wqt k rt d|fqXnt |j||ddS(sLocate 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. s.pys1Not a URL, existing file, or requirement spec: %rRGN(RR Rt _download_urlR;R*t gen_setupRLR7RtparseRRRtfetch_distributionR)(RytspecttmpdirR5tfoundR-R:((s</usr/lib/python2.7/site-packages/setuptools/package_index.pyR1s"  c sKjd|id}dfd}|rcjj|||}n|dk r|p|||}n|dkrjdk rj||}n|dkr| rj|||}n|dkrjdr dpd|n/jd||jdj|j|SdS( s|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. sSearching for %scs|dkr}nx||jD]q}|jtkrn rn|kr#jd|d|R?R&R@R)tversionRFRLR7RHtdirnameRRtsetuptools.command.easy_installRtshutiltcopy2RtwriteRtsplitextRR( RyRMR:RR?tdRRHtdstRR((s</usr/lib/python2.7/site-packages/setuptools/package_index.pyRis44  i c Cs|jd|d \}}}zItj|}|j|}t|trqtd||j|j fn|j}d}|j } d} d|krt |d} t t t| } |j|||| | nt|d}x`trO|j| } | rK|j| |j| |d7}|j|||| | qPqW|j||||SWd|r~|jn|r|jnXdS( NsDownloading %ssCan't download %s: %s %siiscontent-lengthsContent-Lengthtwbi(NNN(RR)RRRRRRRRt dl_blocksizeR"tmaxRjtintt reporthookRR|RR{R RR( RyR4RMtfpRRRRtblocknumtbstsizetsizesRz((s</usr/lib/python2.7/site-packages/setuptools/package_index.pyt _download_tos>        cCsdS(N((RyR4RMRtblksizeR((s</usr/lib/python2.7/site-packages/setuptools/package_index.pyRscCs|jdrt|Syt||jSWnttjfk rtjd}dj g|j D]}t |^qf}|r|j ||qt d||fn'tjk rtjd}|Stjk r/tjd}|r|j ||jqt d||jfntjk rtjd}|rk|j ||jqt d||jfnStjk rtjd}|r|j ||qt d||fnXdS(Nsfile:it s%s %ssDownload error for %s: %ss;%s returned a bad status line. The server might be down, %s(R+t local_opentopen_with_authRRRt InvalidURLtsystexc_infoRRR`RkRRRRtURLErrortreasont BadStatusLinetlinet HTTPException(RyR4twarningtvtargR((s</usr/lib/python2.7/site-packages/setuptools/package_index.pyRs@ +cCst|\}}|rLx7d|krH|jddjdd}qWnd}|jdrn|d }ntjj||}|j||p|j||S(Ns..t.s\t_t__downloaded__s.egg.zipi(R;treplaceR*RLR7RRt _download_vcst_download_other(RyR4RR,R:RM((s</usr/lib/python2.7/site-packages/setuptools/package_index.pyRs% cCsdt|j}|jd\}}}tddgdgt|}tt|h|@dS(s  >>> 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') t+tsvntgitthgN(RR5t partitionRVtbooltnexttiterR)(R4R5tpretseptposttallowed((s</usr/lib/python2.7/site-packages/setuptools/package_index.pyt _resolve_vcss #c Cs|j|}|sdS|dkr5|j||S|jd\}}}|j|\}}|jdtj|dd||gtd|d|dd|gd |d |d dd |d g}|dk r|jdtj||n|S(NR/R2s*Doing {vcs} clone from {url} to {filename}Rs--quietR0s-CtcheckoutR1s--cwdtups-rs-qsChecking out {rev}( R:t _download_svnR2t_vcs_split_rev_from_urlRt subprocesst check_calltdictR)(RyR4t spec_filenametvcsRMR)trevt co_commands((s</usr/lib/python2.7/site-packages/setuptools/package_index.pyR,s   !  cCsTt|j}|dkr4tjjt|jS|j|t|j ||S(NR( RR5turllibtrequestRRR7RR|t_attempt_download(RyR4RMR5((s</usr/lib/python2.7/site-packages/setuptools/package_index.pyR-s  cCs|j|tdS(N(RR|(RyR4((s</usr/lib/python2.7/site-packages/setuptools/package_index.pyR&scCsK|j||}d|jddjkrC|j|||S|SdS(NRs content-typeR(RRR(t_download_html(RyR4RMR((s</usr/lib/python2.7/site-packages/setuptools/package_index.pyRH)scCst|}xW|D]O}|jrtjd|r^|jtj||j||SPqqW|jtj|td|dS(Ns ([^- ]+ - )?Revision \d+:s���Unexpected HTML page found at ( ���R���Rl���R���Rp���R���RL���R���R=��R���(���Ry���R4���R���RM���R���R#��(����(����s<���/usr/lib/python2.7/site-packages/setuptools/package_index.pyRI��0��s����       c������ ���C���sh��|�j��d�d��d�}�g��}�|�j���j�d��r'd�|�k�r't�|��\�}�}�}�}�}�} �|� r'|�j�d��r'd�|�d�k�r'|�d�j��d�d��\�}�}�t�|��\�} �} �| �r$d �| �k�r�| �j��d �d��\�} �} �d �| �d �| �g�}�n �d �| �g�}�| �}�t�|�|�|�|�|�| �f��}�q$q'n��|��j�d �|�|��d �d�d�g�|�|�|�g�}�t�j�|��|�S(���NR2���i���i����s���svn:t���@s���//R0���i���t���:s ���--usernames ���--passwords'���Doing subversion checkout from %s to %sR/��R;��s���-q( ���R3���R(���R+���R���R���R���R���R?��R@��(���Ry���R4���RM���t���credsR5���t���netlocR7���RU���t���qR���t���autht���hostt���usert���passwordR/��(����(����s<���/usr/lib/python2.7/site-packages/setuptools/package_index.pyR=��?��s$����!&  ' c��� ������C���s���t��|���}�|�j�j�d�d��d�}�|�j�j�d��\�}�}�}�|�j�d��\�}�}�}�|�rj�|�|�f�n �|�d �f�\�}�} �|�j�d�|�d�|�d�d ��j���} �| �| �f�S( ���s�� 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.��i���iR2���RJ��R5���R7���R:���R���N( ���R���R5���R3���R7���R2��t ���rpartitionR)���t���_replacet���geturl( ���R4���RS���t ���clean_schemet���no_fragment_pathR)��R6��R7��R8��t ���clean_pathRD��t���resolved(����(����s<���/usr/lib/python2.7/site-packages/setuptools/package_index.pyR>��V��s���� $ c���������G���s���t��j�|�|��d��S(���N(���R���R���(���Ry���R���R`���(����(����s<���/usr/lib/python2.7/site-packages/setuptools/package_index.pyR���v��s����c���������G���s���t��j�|�|��d��S(���N(���R���R���(���Ry���R���R`���(����(����s<���/usr/lib/python2.7/site-packages/setuptools/package_index.pyR���y��s����c���������G���s���t��j�|�|��d��S(���N(���R���R���(���Ry���R���R`���(����(����s<���/usr/lib/python2.7/site-packages/setuptools/package_index.pyR���|��s����(���R���N(*���R���R���R���R)���R|���R���R���R���R���R���R���R���R���R���R���R���R���R���R���R���R���R1���R���R��R���R��R��R��R���R���t ���staticmethodR:��R,��R-��R���RH��RI��R=��R>��R���R���R���(����(����(����s<���/usr/lib/python2.7/site-packages/setuptools/package_index.pyR#�����sL��� 0   *       )A * $  (         s!���&(#(\d+|x[\da-fA-F]+)|[\w.:-]+);?c���������C���s3���t��|��t��s�|��S|��d�k�r)�t�|���St�|���S(���Ni���(���R���R��R���t���chr(���t���c(����(����s<���/usr/lib/python2.7/site-packages/setuptools/package_index.pyt���uchr��s ���� � c���������C���s{���|��j��d��}�|�j�d��r4�t�|�d�d��}�n=�|�j�d��rV�t�|�d��}�n�t�j�|�|��j��d���}�t�|��S(���Ni���s���#xi���i���R2���i����(���R@���R+���R��R���R���R]��(���R?���t���what(����(����s<���/usr/lib/python2.7/site-packages/setuptools/package_index.pyt ���decode_entity��s����c���������C���s ���t��t�|���S(���s'���Decode HTML entities in the given text.(���t ���entity_subR_��(���t���text(����(����s<���/usr/lib/python2.7/site-packages/setuptools/package_index.pyRn�����s����c������������s�����f�d���}�|�S(���Nc������������s������f�d���}�|�S(���Nc�������������s?���t��j���}�t��j���z���|��|���SWd��t��j�|��Xd��S(���N(���t���sockett���getdefaulttimeoutt���setdefaulttimeout(���R`���Ra���t ���old_timeout(���Rb���t���timeout(����s<���/usr/lib/python2.7/site-packages/setuptools/package_index.pyt���_socket_timeout��s ����  (����(���Rb���Rg��(���Rf��(���Rb���s<���/usr/lib/python2.7/site-packages/setuptools/package_index.pyRg����s����(����(���Rf��Rg��(����(���Rf��s<���/usr/lib/python2.7/site-packages/setuptools/package_index.pyt���socket_timeout��s���� c���������C���s=���t��|���}�|�j���}�t�j�|��}�|�j���}�|�j���S(���s��� A function compatible with Python 2.3-3.3 that will encode auth from a URL suitable for an HTTP header. >>> _encode_auth('username%3Apassword') u'dXNlcm5hbWU6cGFzc3dvcmQ=' (���R���t���encodet���base64t ���encodestringR���t���rstrip(���RO��t���auth_st ���auth_bytest ���encoded_bytest���encoded(����(����s<���/usr/lib/python2.7/site-packages/setuptools/package_index.pyt ���_encode_auth��s ����   c���������C���sQ��t��|���\�}�}�}�}�}�}�|�j�d��r?�t�j�d���n��|�d�k�r`�t�|��\�}�} �n�d �}�|�r�d�t�|��}�t�|�| �|�|�|�|�f��} �t�j �| ��} �| �j �d�|��n�t�j �|���} �| �j �d�t ��|�| ��} �|�rMt��| �j ��\�} �}�}�}�}�}�| �|�k�rM|�| �k�rMt�| �|�|�|�|�|�f��| �_ �qMn��| �S( ���s4���Open a urllib2 request, handling HTTP authenticationRK��s���nonnumeric port: ''t���httpt���httpss���Basic t ���Authorizations ���User-Agent(���Rr��Rs��N( ���R���R*���R���R��R���R)���Rq��R���R���t���Requestt ���add_headert ���user_agentR4���(���R4���R���R5���RM��R7���t���paramsR9���R���RO��RP��R���RG��R��t���s2t���h2t���path2t���param2t���query2t���frag2(����(����s<���/usr/lib/python2.7/site-packages/setuptools/package_index.pyR����s&����  !'c���������C���s���|��S(���N(����(���R4���(����(����s<���/usr/lib/python2.7/site-packages/setuptools/package_index.pyt ���fix_sf_url��s����c���������C���so��t��|���\�}�}�}�}�}�}�t�|��}�t�j�j�|��rI�t�j�|���S|�j�d��r=t�j�j�|��r=g��}�x�t�j �|��D]�} �| �d�k�r�t �t�j�j �|�| ��d��} �| �j ���} �| �j ���Pn.�t�j�j�t�j�j �|�| ���r�| �d�7} �n��|�j�d�| �| �f��q�Wd�|��d�d�j �|��} �d�\�} �} �n�d�\�} �} �} �t�|��| �| �i�d �d�6t�| ���S(���s7���Read a local path, with special support for directoriesR0���s ���index.htmlt���rbs���<a href=%r>%s</a>s���<html><head><title>%ss%ss itOKisPath not founds Not founds text/htmls content-type(iR(isPath not founds Not found(RRRLR7tisfileRRR*RRRRRRRRRR(R4R5R6R7tparamR9RRMtfilesRRtbodytstatustmessage((s</usr/lib/python2.7/site-packages/setuptools/package_index.pyRs*  !   !  (ZRRR?RLRRRbRjt pkg_resourcesRRRRRRRRRR R R R RwR t distutilsRtdistutils.errorsRtsetuptools.compatRRRRRRRRRRRRRRRtfnmatchRtsetuptools.py24compatR R!tsetuptools.py27compatR"RR>tIRmRR?RR3REt__all__t_SOCKET_TIMEOUTR%R;R)R$R=RNR&R_RdRgRvRRwtobjectRxRR#RR`R]R_RnRhRqRRRR(((s</usr/lib/python2.7/site-packages/setuptools/package_index.pytsl       X^         "  !${   $