§
    Á³g¹�  ã                   óô  — d Z ddlZddlZddlZddlZddlZddlZddlZddlZddl	Z	ddl
Z
ddlZddlZddlZddlZddlZddlZddlZddlmZ ddlZddlmZmZmZmZmZmZmZmZm Z m!Z!m"Z"m#Z#m$Z$m%Z% ddl&m'Z' ddl(m)Z) ddl*m+Z+ ddl,m-Z- dd	l.m/Z/  ej0        d
¦  «        Z1 ej0        dej2        ¦  «        Z3 ej0        d¦  «        Z4 ej0        dej2        ¦  «        j5        Z6d 7                    ¦   «         Z8g d¢Z9dZ:dZ;e; <                     dj<        ej=        Ž e¬¦  «        Z>d„ Z?d„ Z@d„ ZAd1d„ZBd1d„ZCd1d„ZDdedfd„ZEd„ ZF ej0        dej2        ¦  «        ZG	 eFd„ ¦   «         ZH G d„ d¦  «        ZI G d „ d!eI¦  «        ZJ G d"„ d#e¦  «        ZK ej0        d$¦  «        jL        ZMd%„ ZNd&„ ZOd2d'„ZPd(„ ZQ G d)„ d*¦  «        ZR G d+„ d,ejS        ¦  «        ZTejU        jV        fd-„ZWd.„ ZX  ePe:¦  «        eW¦  «        ZWd/„ ZYd0„ ZZdS )3z$PyPI and direct package downloading.é    N©Úwraps)ÚCHECKOUT_DISTÚDistributionÚBINARY_DISTÚnormalize_pathÚSOURCE_DISTÚEnvironmentÚfind_distributionsÚ	safe_nameÚsafe_versionÚto_filenameÚRequirementÚDEVELOP_DISTÚEGG_DISTÚparse_version)Úlog)ÚDistutilsError)Ú	translate)ÚWheel©Úunique_everseenz^egg=([-A-Za-z0-9_.+!]+)$zhref\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   — 	 t          j        | ¦  «        S # t          $ r}t          d| ›�¦  «        |‚d }~ww xY w)Nz/Not a URL, existing file, or requirement spec: )r   ÚparseÚ
ValueErrorr   )ÚspecÚes     úV/var/www/html/mpstechhub/venv/lib/python3.11/site-packages/setuptools/package_index.pyÚparse_requirement_argr&   F   sV   € ðÝÔ  Ñ&Ô&Ð&øÝð ð ð ÝˆnØCGÀ4ÐIñ
ô 
àð	øøøøðøøøs   ‚ –
8 3³8c                 ó¤  — |                       ¦   «         }d\  }}}|                     d¦  «        r�|                     d¦  «        r| dd…         }d}n{|                     dd¦  «        r| d	d
…         }| dd…         }d}nN|                     d¦  «        r| dd…         }d}n,|                     dd¦  «        r| d	d
…         }| dd…         }d}|||fS )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%   r   r   O   sÿ   € ð �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                 óŒ  — t           j                             | ¦  «        }|\  }}}}}}t           j                             |                     d¦  «        d         ¦  «        }|dk    r>|dk    r8t           j                             |                     d¦  «        d         ¦  «        }d|v r|                     dd¦  «        \  }}||fS )Nú/éÿÿÿÿzsourceforge.netÚdownloadéþÿÿÿú#é   )Úurllibr!   ÚurlparseÚunquoteÚsplit)	ÚurlÚpartsÚschemeÚserverÚpathÚ
parametersÚqueryÚfragmentr/   s	            r%   Úegg_info_for_urlrF   g   s±   € ÝŒ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Ø�ˆ>Ðr2   c              #   ó  K  — t          | ¦  «        \  }}t          | ||¦  «        D ]}|V — Œ|rNt                               |¦  «        }|r4t	          | |                     d¦  «        |t          ¬¦  «        D ]
}|V — ŒdS dS dS )zEYield egg or source distribution objects that might be found at a URLr9   )Ú
precedenceN)rF   Údistros_for_locationÚEGG_FRAGMENTÚmatchr   Úgroupr   )r>   Úmetadatar/   rE   ÚdistrK   s         r%   r   r   r   s¼   è è € å% cÑ*Ô*�N€Dˆ(Ý$ S¨$°Ñ9Ô9ð ð ˆØˆ
ˆ
ˆ
ˆ
Øð Ý×"Ò" 8Ñ,Ô,ˆØð 	Ý-Ø�U—[’[ ‘^”^ X½-ðñ ô ð ð �ð �
�
�
�
ðð ð	ð 	ðð r2   c                 ó†  — |                      d¦  «        r
|dd…         }|                      d¦  «        rd|v rt          j        | ||¦  «        gS |                      d¦  «        rOd|v rKt          |¦  «        }|                     ¦   «         sg S t          | |j        |j        t          dz   ¬¦  «        gS |                      d	¦  «        r.t          |¦  «        \  }}}|�t          | |||t          |¦  «        S t          D ]B}|                      |¦  «        r+|dt          |¦  «         …         }t          | ||¦  «        c S ŒCg S )
z:Yield egg or source distribution objects based on basenameú.egg.zipNr*   z.eggú-z.whlr9   )ÚlocationÚproject_nameÚversionrH   r(   )r,   r   Úfrom_locationr   Úis_compatiblerS   rT   r   r   r   r   Ú
EXTENSIONSÚlen)rR   ÚbasenamerM   ÚwheelÚwin_baser0   ÚplatformÚexts           r%   rI   rI   €   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ð €Ir2   c                 óx   — t          t          | ¦  «        t          j                             | ¦  «        |¦  «        S )zEYield possible egg or source distribution objects based on a filename)rI   r   ÚosrB   rY   )ÚfilenamerM   s     r%   Údistros_for_filenamera   £   s3   € åÝ�xÑ Ô ¥"¤'×"2Ò"2°8Ñ"<Ô"<¸hñô ð r2   c           
   #   ó¾  K  — |                      d¦  «        }|s#t          d„ |dd…         D ¦   «         ¦  «        rdS t          t          |¦  «        ¦  «        D ]&}||         dd…                              ¦   «         r nŒ't          |¦  «        }t          | |d                     |d|…         ¦  «        d                     ||d…         ¦  «        |||¬¦  «        V — dS )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!
    rQ   c              3   ó@   K  — | ]}t          j        d |¦  «        V — ŒdS )z	py\d\.\d$N)ÚrerK   )Ú.0Úps     r%   ú	<genexpr>z(interpret_distro_name.<locals>.<genexpr>µ   s.   è è € ÐKÐK¸A�bœh |°QÑ7Ô7ÐKÐKÐKÐKÐKÐKr2   é   Nr9   )Ú
py_versionrH   r\   )r=   ÚanyÚrangerX   Úisdigitr   Újoin)rR   rY   rM   ri   rH   r\   r?   rf   s           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”ÑÔØØØðñ ô ð ð ð ð ð r2   c                 ó<   ‡ — t          ‰ ¦  «        ˆ fd„¦   «         }|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%   Úwrapperzunique_values.<locals>.wrapperÒ   s    ø€ å˜t˜t TÐ4¨VÐ4Ð4Ñ5Ô5Ð5r2   r   )rs   rt   s   ` r%   Úunique_valuesru   Ì   s5   ø€ õ ˆ4�[„[ð6ð 6ð 6ð 6ñ „[ð6ð €Nr2   z3<([^>]*\srel\s{0,10}=\s{0,10}['"]?([^'" >]+)[^>]*)>c           
   #   óÖ  K  — t                                |¦  «        D ]Ì}|                     ¦   «         \  }}t          t	          t
          j        |                     ¦   «                              d¦  «        ¦  «        ¦  «        }d|v sd|v r_t                               |¦  «        D ]D}t          j                             | t          |                     d¦  «        ¦  «        ¦  «        V — ŒEŒÍdD ]|}|                     |¦  «        }|dk    r_t                               ||¦  «        }|rBt          j                             | t          |                     d¦  «        ¦  «        ¦  «        V — Œ}dS )zEFind rel="homepage" and rel="download" links in `page`, yielding URLsú,Úhomepager6   r9   )z<th>Home Pagez<th>Download URLr5   N)ÚRELÚfinditerÚgroupsÚsetÚmapÚstrÚstripr+   r=   ÚHREFr:   r!   ÚurljoinÚ
htmldecoderL   ÚfindÚsearch)r>   ÚpagerK   Ú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ð Lr2   c                   ó$   — e Zd ZdZd„ Zd„ Zd„ ZdS )ÚContentCheckerzP
    A null content checker that defines the interface for checking content
    c                 ó   — dS )z3
        Feed a block of data to the hash.
        N© ©ÚselfÚblocks     r%   ÚfeedzContentChecker.feed÷   s	   € ð 	ˆr2   c                 ó   — dS )zC
        Check the hash. Return False if validation fails.
        TrŽ   ©r�   s    r%   Úis_validzContentChecker.is_validý   s	   € ð ˆtr2   c                 ó   — dS )zu
        Call reporter with information about the checker (hash name)
        substituted into the template.
        NrŽ   )r�   ÚreporterÚtemplates      r%   ÚreportzContentChecker.report  s	   € ð
 	ˆr2   N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r’   r•   r™   rŽ   r2   r%   rŒ   rŒ   ò   sK   € € € € € ðð ðð ð ðð ð ðð ð ð ð r2   rŒ   c                   ó\   — e Zd Z ej        d¦  «        Zd„ Zed„ ¦   «         Zd„ Z	d„ Z
d„ ZdS )ÚHashCheckerzK(?P<hash_name>sha1|sha224|sha384|sha256|sha512|md5)=(?P<expected>[a-f0-9]+)c                 óT   — || _         t          j        |¦  «        | _        || _        d S rp   )Ú	hash_nameÚhashlibÚnewÚhashÚexpected)r�   r¡   r¥   s      r%   Ú__init__zHashChecker.__init__  s%   € Ø"ˆŒÝ”K 	Ñ*Ô*ˆŒ	Ø ˆŒˆˆr2   c                 óô   — t           j                             |¦  «        d         }|st          ¦   «         S | j                             |¦  «        }|st          ¦   «         S  | di |                     ¦   «         ¤ŽS )z5Construct a (possibly null) ContentChecker from a URLr5   rŽ   )r:   r!   r;   rŒ   Úpatternr„   Ú	groupdict)Úclsr>   rE   rK   s       r%   Úfrom_urlzHashChecker.from_url  s{   € õ ”<×(Ò(¨Ñ-Ô-¨bÔ1ˆØð 	$Ý!Ñ#Ô#Ð#Ø”×"Ò" 8Ñ,Ô,ˆØð 	$Ý!Ñ#Ô#Ð#ØˆsÐ'Ð'�U—_’_Ñ&Ô&Ð'Ð'Ð'r2   c                 ó:   — | j                              |¦  «         d S rp   )r¤   Úupdater�   s     r%   r’   zHashChecker.feed!  s   € ØŒ	×Ò˜ÑÔÐÐÐr2   c                 óF   — | j                              ¦   «         | j        k    S rp   )r¤   Ú	hexdigestr¥   r”   s    r%   r•   zHashChecker.is_valid$  s   € ØŒy×"Ò"Ñ$Ô$¨¬Ò5Ð5r2   c                 ó,   — || j         z  } ||¦  «        S rp   )r¡   )r�   r—   r˜   Úmsgs       r%   r™   zHashChecker.report'  s   € Ø˜œÑ'ˆØˆx˜‰}Œ}Ðr2   N)rš   r›   rœ   rd   Úcompiler¨   r¦   Úclassmethodr«   r’   r•   r™   rŽ   r2   r%   rŸ   rŸ     sƒ   € € € € € ØˆbŒjð	#ñô €Gð
!ð !ð !ð
 ð(ð (ñ „[ð(ð ð  ð  ð6ð 6ð 6ðð ð ð ð r2   rŸ   c                   óB  ‡ — e Zd ZdZ	 	 	 	 d,ˆ fd„	Zˆ fd„Zd-d	„Zd-d
„Zd-d„Zd„ Z	d„ Z
d„ Zd„ Zd„ Zd.d„Zd„ Zd.ˆ fd„	Zd„ Zd„ Zd„ Zd„ Zd„ Z	 	 	 	 d/d„Zd0d„Zd„ ZdZd„ Zd„ Zd.d„Zd „ Zed!„ ¦   «         Zd"„ Z d#„ Z!d$„ Z"d%„ Z#d&„ Z$d'„ Z%ed(„ ¦   «         Z&d)„ Z'd*„ Z(d+„ Z)ˆ xZ*S )1r   z;A distribution index that scans web pages for download URLsúhttps://pypi.org/simple/©Ú*NTc                 ór  •—  t          ¦   «         j        |i |¤Ž |dd |                     d¦  «         …         z   | _        i | _        i | _        i | _        t          j        d 	                    t          t          |¦  «        ¦  «        ¦  «        j        | _        g | _        t          j        j        | _        d S )Nr4   ú|)Úsuperr¦   r,   Ú	index_urlÚscanned_urlsÚfetched_urlsÚpackage_pagesrd   r²   rm   r}   r   rK   ÚallowsÚto_scanr:   ÚrequestÚurlopenÚopener)r�   r»   ÚhostsÚ	ca_bundleÚ
verify_sslrq   ÚkwÚ	__class__s          €r%   r¦   zPackageIndex.__init__/  s¢   ø€ ð 	�‰ŒÔ˜$Ð% "Ð%Ð%Ð%Ø" SÐ)F¨y×/AÒ/AÀ#Ñ/FÔ/FÐ+FÐ)FÔ%GÑGˆŒØˆÔØˆÔØˆÔÝ”j §¢­#­i¸Ñ*?Ô*?Ñ!@Ô!@ÑAÔAÔGˆŒØˆŒÝ”nÔ,ˆŒˆˆr2   c                 ó”   •— 	 t          |j        ¦  «         n# t          $ r Y d S w xY wt          ¦   «                              |¦  «        S rp   )r   rT   Ú	Exceptionrº   Úadd)r�   rN   rÈ   s     €r%   rË   zPackageIndex.addA  sS   ø€ ð	Ý˜$œ,Ñ'Ô'Ð'Ð'øÝð 	ð 	ð 	ØˆFˆFð	øøøå‰wŒw�{Š{˜4Ñ Ô Ð s   ƒ ˜
&¥&Fc           	      ó  — || j         v r|sdS d| j         |<   t          |¦  «        s|                      |¦  «         dS t          t	          |¦  «        ¦  «        }|r-|                      |¦  «        sdS |                      d|¦  «         |s|r	|| j        v r$t          t          | j	        |¦  «        ¦  «         dS |                      |¦  «        sd| j        |<   dS |  
                    d|¦  «         d| j        |<   d}|                      |||z  ¦  «        }|€dS t          |t          j        j        ¦  «        r(|j        dk    r|  
                    d|j        z  ¦  «         d| j        |j        <   d|j                             d	d
¦  «                             ¦   «         vr|                     ¦   «          dS |j        }|                     ¦   «         }t          |t0          ¦  «        sTt          |t          j        j        ¦  «        rd}n|j                             d¦  «        pd}|                     |d¦  «        }|                     ¦   «          t6                               |¦  «        D ]W}	t          j                             |t?          |	                      d¦  «        ¦  «        ¦  «        }
|  !                    |
¦  «         ŒX| "                    | j#        ¦  «        r-tI          |dd¦  «        dk    r|  %                    ||¦  «        }dS dS dS )z<Evaluate a URL as a possible download, and maybe retrieve itNTzFound link: %sz
Reading %sz<Download error on %s: %%s -- Some packages may not be found!i‘  zAuthentication error: %sÚhtmlúcontent-typeÚ zlatin-1ÚcharsetÚignorer9   Úcodeé”  )&r¼   Ú
URL_SCHEMEÚprocess_filenameÚlistr   Úurl_okÚdebugr½   r}   rË   ÚinfoÚopen_urlÚ
isinstancer:   ÚerrorÚ	HTTPErrorrÒ   r±   r>   ÚheadersÚgetr+   ÚcloseÚreadr~   Ú	get_paramÚdecoder€   rz   r!   r�   r‚   rL   Úprocess_urlr-   r»   ÚgetattrÚprocess_index)r�   r>   ÚretrieveÚdistsÚtmplÚfr/   r…   rÐ   rK   Úlinks              r%   rä   zPackageIndex.process_urlJ  só  € à�$Ô#Ð#Ð#¨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Ð.Mr2   c                 ó   — t           j                             |¦  «        s|                      d|¦  «         d S t           j                             |¦  «        rl|sjt           j                             |¦  «        }t          j        |¦  «        D ]6}|                      t           j                             ||¦  «        d¦  «         Œ7t          |¦  «        }|r:|  
                    d|¦  «         t          t          | j        |¦  «        ¦  «         d S d S )NzNot found: %sTz	Found: %s)r_   rB   ÚexistsÚwarnÚisdirÚrealpathÚlistdirrÕ   rm   ra   rØ   rÖ   r}   rË   )r�   ÚfnÚnestedrB   Úitemrè   s         r%   rÕ   zPackageIndex.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Ñ%Ô%Ñ&Ô&Ð&Ð&Ð&ð	'ð 	'r2   c                 óN  — t          |¦  «        }|o*|                     d¦  «                             ¦   «         dk    }|s8|                      t          j                             |¦  «        d         ¦  «        rdS d}|rt          ||z  ¦  «        ‚|                      ||¦  «         d S )Nr9   ÚfileTzN
Note: Bypassing %s (disallowed host; see http://bit.ly/2hrImnY for details).
)	rÔ   rL   r+   r¿   r:   r!   r;   r   rî   )r�   r>   ÚfatalÚsÚis_filer±   s         r%   r×   zPackageIndex.url_ok�  s§   € Ý�s‰OŒOˆØÐ4˜Ÿš ™
œ
×(Ò(Ñ*Ô*¨fÒ4ˆØð 	�d—k’k¥&¤,×"7Ò"7¸Ñ"<Ô"<¸QÔ"?Ñ@Ô@ð 	Ø�4ð4ð 	ð ð 	 Ý   s¡Ñ+Ô+Ð+à�IŠI�c˜3ÑÔÐÐÐr2   c                 óª   — t          t          j        j        |¦  «        }d„ |D ¦   «         }t	          t          j        | j        |¦  «        ¦  «         d S )Nc              3   óv   K  — | ]4}t          j        |¦  «        D ]}|                     d ¦  «        ¯||fV — ŒŒ5dS )z	.egg-linkN)r_   rñ   r,   )re   rB   Úentrys      r%   rg   z.PackageIndex.scan_egg_links.<locals>.<genexpr>Ÿ  sm   è è € ð 
ð 
àÝœ DÑ)Ô)ð
ð 
ð Ø�~Š~˜kÑ*Ô*ð	
Ø�5ˆMð
ð 
ð 
ð 
ð 
ð 
ð 
r2   )Úfilterr_   rB   rï   rÖ   Ú	itertoolsÚstarmapÚscan_egg_link)r�   Úsearch_pathÚdirsÚ	egg_linkss       r%   Úscan_egg_linkszPackageIndex.scan_egg_links�  sY   € Ý•b”g”m [Ñ1Ô1ˆð
ð 
àð
ñ 
ô 
ˆ	õ 	�YÔ˜tÔ1°9Ñ=Ô=Ñ>Ô>Ð>Ð>Ð>r2   c           
      ó  — t          t          j                             ||¦  «        ¦  «        5 }t	          t          d t          t          j        |¦  «        ¦  «        ¦  «        }d d d ¦  «         n# 1 swxY w Y   t          |¦  «        dk    rd S |\  }}t          t          j                             ||¦  «        ¦  «        D ]?}t          j        j        |g|¢R Ž |_        t          |_        |                      |¦  «         Œ@d S )Nrh   )Úopenr_   rB   rm   rÖ   rý   r}   r~   r   rX   r   rR   r	   rH   rË   )r�   rB   rü   Ú	raw_linesÚlinesÚegg_pathÚ
setup_pathrN   s           r%   r   zPackageIndex.scan_egg_link§  s)  € Ý•"”'—,’,˜t UÑ+Ô+Ñ,Ô,ð 	B°	å� ¥c­#¬)°YÑ&?Ô&?Ñ@Ô@ÑAÔAˆEð	Bð 	Bð 	Bñ 	Bô 	Bð 	Bð 	Bð 	Bð 	Bð 	Bð 	Bøøøð 	Bð 	Bð 	Bð 	Bõ ˆ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ð	ð 	s   ®6A0Á0A4Á7A4c           	      ó  — d}|                      | j        ¦  «        s|S t          t          t          j        j        |t          | j        ¦  «        d …                              d¦  «        ¦  «        ¦  «        }t          |¦  «        dk    s
d|d         v r|S t          |d         ¦  «        }t          |d         ¦  «        }d| j                             |                     ¦   «         i ¦  «        |<   t          |¦  «        t          |¦  «        fS )N)NNr4   rh   r8   r9   r   T)r-   r»   rÖ   r}   r:   r!   r<   rX   r=   r   r   r¾   Ú
setdefaultr+   r   )r�   rë   ÚNO_MATCH_SENTINELr?   ÚpkgÚvers         r%   Ú_scanzPackageIndex._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Ð1r2   c                 ó\  — t                                |¦  «        D ]f}	 |                      t          j                             |t          |                     d¦  «        ¦  «        ¦  «        ¦  «         ŒW# t          $ r Y Œcw xY w|                      |¦  «        \  }}|sdS t          ||¦  «        D ]c}t          |¦  «        \  }}|                     d¦  «        r%|s#|r|d|›d|›�z  }n|                      |¦  «         |                      |¦  «         Œdt                               d„ |¦  «        S )z#Process the contents of a PyPI pager9   rÏ   ú.pyz#egg=rQ   c                 ó6   — d|                       ddd¦  «        z  S )Nz<a href="%s#md5=%s">%s</a>r9   é   rh   )rL   )Úms    r%   ú<lambda>z,PackageIndex.process_index.<locals>.<lambda>á  s   € Ð2°Q·W²W¸QÀÀ1Ñ5EÔ5EÑE€ r2   )r€   rz   r  r:   r!   r�   r‚   rL   r"   rŠ   rF   r,   Úneed_version_infoÚscan_urlÚPYPI_MD5Úsub)	r�   r>   r…   rK   r  r  Únew_urlr/   Úfrags	            r%   ræ   zPackageIndex.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   žAA2Á2
A?Á>A?c                 ó2   — |                       d|¦  «         d S )NzPPage at %s links to .py file(s) without version info; an index scan is required.)Úscan_all©r�   r>   s     r%   r  zPackageIndex.need_version_infoä  s*   € Ø�Šð àñ	
ô 	
ð 	
ð 	
ð 	
r2   c                 ó    — | j         | j        vr%|r | j        |g|¢R Ž  |                      d¦  «         |                      | j         ¦  «         d S )Nz6Scanning index of all packages (this may take a while))r»   r½   rî   rÙ   r  ©r�   r±   rq   s      r%   r  zPackageIndex.scan_allë  sa   € ØŒ> Ô!2Ð2Ð2Øð &Ø�”	˜#Ð% Ð%Ð%Ð%Ð%Ø�IŠIÐNÑOÔOÐOØ�Š�d”nÑ%Ô%Ð%Ð%Ð%r2   c                 óÊ  — |                       | j        |j        z   dz   ¦  «         | j                             |j        ¦  «        s%|                       | j        |j        z   dz   ¦  «         | j                             |j        ¦  «        s|                      |¦  «         t          | j                             |j        d¦  «        ¦  «        D ]}|                       |¦  «         Œd S )Nr4   rŽ   )	r  r»   Úunsafe_namer¾   rß   ÚkeyrS   Únot_found_in_indexrÖ   )r�   Úrequirementr>   s      r%   Úfind_packageszPackageIndex.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˜#ÑÔÐÐð	ð 	r2   c                 ó  •— |                       ¦   «          |                      |¦  «         | |j                 D ]!}||v r|c S |                      d||¦  «         Œ"t	          t
          | ¦  «                             ||¦  «        S )Nz%s does not match %s)Úprescanr'  r$  rØ   rº   r   Úobtain)r�   r&  Ú	installerrN   rÈ   s       €r%   r*  zPackageIndex.obtain  sŠ   ø€ Ø�Š‰ŒˆØ×Ò˜;Ñ'Ô'Ð'Ø˜œÔ)ð 	Bð 	BˆDØ�{Ð"Ð"Ø���Ø�JŠJÐ-¨{¸DÑAÔAÐAÐAÝ•\ 4Ñ(Ô(×/Ò/°¸YÑGÔGÐGr2   c                 ó2  — |                      | j        d|z  ¦  «         |                     ¦   «         sd|                     ¦   «          t	          j        |¦  «         t          |j        j        ›dt          j	         
                    |¦  «        ›d�¦  «        ‚dS )z-
        checker is a ContentChecker
        zValidating %%s checksum for %sz validation failed for z; possible download problem?N)r™   rØ   r•   rà   r_   Úunlinkr   r¤   r.   rB   rY   )r�   Úcheckerr`   Útfps       r%   Ú
check_hashzPackageIndex.check_hash
  s›   € ð 	�Š�t”zÐ#CÀhÑ#NÑOÔOÐOØ×ÒÑ!Ô!ð 	Ø�IŠI‰KŒKˆKÝŒI�hÑÔÐÝ ð ”<Ô$Ð$Ð$¥b¤g×&6Ò&6°xÑ&@Ô&@Ð&@Ð&@ðBñô ð ð	ð 	r2   c                 óþ   — |D ]y}| j         �@t          |¦  «        r1|                     d¦  «        st          t	          |¦  «        ¦  «        r|                      |¦  «         Œ_| j                              |¦  «         ŒzdS )z;Add `urls` to the list that will be prescanned for searchesNúfile:)rÀ   rÔ   r-   rÖ   r   r  Úappend)r�   Úurlsr>   s      r%   Úadd_find_linkszPackageIndex.add_find_links  s‘   € àð 	)ð 	)ˆCà”Ð$Ý! #‘”ð %à—>’> 'Ñ*Ô*ð %õ �¨Ñ,Ô,Ñ-Ô-ð %ð —’˜cÑ"Ô"Ð"Ð"ð ”×#Ò# CÑ(Ô(Ð(Ð(ð	)ð 	)r2   c                 óp   — | j         r't          t          | j        | j         ¦  «        ¦  «         d| _         dS )z7Scan urls scheduled for prescanning (e.g. --find-links)N)rÀ   rÖ   r}   r  r”   s    r%   r)  zPackageIndex.prescan'  s3   € àŒ<ð 	3Ý•�T”] D¤LÑ1Ô1Ñ2Ô2Ð2ØˆŒˆˆr2   c                 ó�   — | |j                  r
| j        d}}n	| j        d}} |||j        ¦  «         |                      ¦   «          d S )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%  zPackageIndex.not_found_in_index-  sX   € Ø�”Ô ð 	Øœ	Ð#H�#ˆDˆDð ”	ØEð ˆDð 	ˆˆS�+Ô)Ñ*Ô*Ð*Ø�Š‰Œˆˆˆr2   c                 ó¤  — t          |t          ¦  «        s—t          |¦  «        }|rV|                      ||¦  «        }t	          |¦  «        \  }}|                     d¦  «        r|                      |||¦  «        }|S t          j         	                    |¦  «        r|S t          |¦  «        }t          |                      ||¦  «        dd¦  «        S )a  Locate 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.
        r  rR   N)rÛ   r   rÔ   Ú_download_urlrF   r,   Ú	gen_setupr_   rB   rí   r&   rå   Úfetch_distribution)r�   r#   Útmpdirr@   Úfoundr/   rE   s          r%   r6   zPackageIndex.download8  sÊ   € õ$ ˜$¥Ñ,Ô,ð 	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ÐOr2   c                 ó  ‡ ‡‡‡‡	— ‰                       d|¦  «         i Š	d}d	ˆˆ ˆ	ˆˆfd„	}|r4‰                      ¦   «          ‰                      |¦  «          ||¦  «        }|s|� |||¦  «        }|€&‰ j        �‰                      ¦   «           ||¦  «        }|€"|s ‰                      |¦  «          ||¦  «        }|€‰                      d‰rdpd|¦  «         dS ‰                       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.
        zSearching for %sNc                 óZ  •— |€‰}|| j                  D ]—}|j        t          k    r"‰s |‰vr‰                     d|¦  «         d‰|<   Œ4|| v o|j        t          k    p‰ }|rJ‰                     |j        ‰	¦  «        }||_        t          j	         
                    |j        ¦  «        r|c S Œ˜d S )Nz&Skipping development or system egg: %sr9   )r$  rH   r   rî   r	   r6   rR   Údownload_locationr_   rB   rí   )
ÚreqÚenvrN   ÚtestÚlocÚ
develop_okr�   ÚskippedÚsourcer=  s
        €€€€€r%   rƒ   z-PackageIndex.fetch_distribution.<locals>.findx  sÙ   ø€ Øˆ{Ø�ð ˜CœGœð $ð $�à”?¥lÒ2Ð2¸:Ð2Ø 7Ð*Ð*ØŸ	š	ØDØ ñô ð ð )*˜ ™Øà˜s�{ÐU¨¬½;Ò(FÐ(TÈfÈ*�Øð $ØŸ-š-¨¬°vÑ>Ô>�CØ-0�DÔ*Ý”w—~’~ dÔ&<Ñ=Ô=ð $Ø#˜˜˜øð!$ð $r2   z:No local packages or working download links found for %s%sza source distribution of rÏ   zBest match: %s)rR   rp   )rÙ   r)  r'  rÀ   rî   ÚclonerA  )
r�   r&  r=  Ú
force_scanrH  rF  Úlocal_indexrN   rƒ   rG  s
   ` ` ``   @r%   r<  zPackageIndex.fetch_distributionZ  sn  øøøøø€ ð4 	�	Š	Ð$ kÑ2Ô2Ð2ØˆØˆð	$ð 	$ð 	$ð 	$ð 	$ð 	$ð 	$ð 	$ð 	$ð 	$ð. ð 	%Ø�LŠL‰NŒNˆNØ×Ò˜{Ñ+Ô+Ð+Ø�4˜Ñ$Ô$ˆDàð 	2˜Ð/Ø�4˜ [Ñ1Ô1ˆDàˆ<ØŒ|Ð'Ø—’‘”�Ø�4˜Ñ$Ô$ˆDàˆ< 
ˆ<Ø×Ò˜{Ñ+Ô+Ð+Ø�4˜Ñ$Ô$ˆDàˆ<Ø�IŠIØLØÐ7Ð7Ð=¸2Øñô ð ð ð ð �IŠIÐ&¨Ñ-Ô-Ð-Ø—:’: tÔ'=�:Ñ>Ô>Ð>r2   c                 óH   — |                       ||||¦  «        }|�|j        S dS )a3  Obtain 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<  rR   )r�   r&  r=  rJ  rH  rN   s         r%   ÚfetchzPackageIndex.fetchª  s0   € ð ×&Ò& {°F¸JÈÑOÔOˆØÐØ”=Ð Øˆtr2   c                 ó¾  — t                                |¦  «        }|r.d„ t          ||                     d¦  «        d ¦  «        D ¦   «         pg }t	          |¦  «        dk    �rXt
          j                             |¦  «        }t
          j                             |¦  «        |k    rvt
          j         	                    ||¦  «        }t
          j         
                    |¦  «        r t
          j                             ||¦  «        st          j        ||¦  «         |}t          t
          j         	                    |d¦  «        d¦  «        5 }|                     d|d         j        ›d|d         j        ›dt
          j                             |¦  «        d         ›d	�¦  «         d d d ¦  «         n# 1 swxY w Y   |S |rt'          d
|›d|›�¦  «        ‚t'          d¦  «        ‚)Nc                 ó    — g | ]}|j         ¯	|‘ŒS rŽ   )rT   )re   Úds     r%   ú
<listcomp>z*PackageIndex.gen_setup.<locals>.<listcomp>»  s0   € ð ð ð àØ”9ðØðð ð r2   r9   zsetup.pyÚwz(from setuptools import setup
setup(name=r   z
, 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.)rJ   rK   r   rL   rX   r_   rB   rY   Údirnamerm   rí   ÚsamefileÚshutilÚcopy2r  ÚwriterS   rT   Úsplitextr   )	r�   r`   rE   r=  rK   rè   rY   Údströ   s	            r%   r;  zPackageIndex.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¸Ñ<Ô<ð 	ÀØ—
’
�
ð ˜aœÔ-Ð-Ð-Ø˜aœÔ(Ð(Ð(Ýœ×(Ò(¨Ñ2Ô2°1Ô5Ð5Ð5ðñô ð ð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð ˆOàð 
	Ý �.ð &. X X¨u¨uð6ñô ð õ !ðGñô ð s   ÅAF,Æ,F0Æ3F0i    c                 ó¨  — |                       d|¦  «         d }	 t                               |¦  «        }|                      |¦  «        }t	          |t
          j        j        ¦  «        r"t          d|›d|j	        ›d|j
        ›�¦  «        ‚|                      ¦   «         }d}| j        }d}d|v rP|                     d¦  «        }	t          t          t          |	¦  «        ¦  «        }|                      |||||¦  «         t#          |d	¦  «        5 }
	 |                     |¦  «        }|rI|                     |¦  «         |
                     |¦  «         |dz  }|                      |||||¦  «         nnŒb|                      |||
¦  «         d d d ¦  «         n# 1 swxY w Y   ||r|                     ¦   «          S S # |r|                     ¦   «          w w xY w)NzDownloading %szCan't download ú: ú r   r5   zcontent-lengthzContent-LengthÚwbTr9   )rÙ   rŸ   r«   rÚ   rÛ   r:   rÜ   rÝ   r   rÒ   r±   Údl_blocksizeÚget_allÚmaxr}   ÚintÚ
reporthookr  rá   r’   rW  r0  rà   )r�   r>   r`   Úfpr.  rÞ   ÚblocknumÚbsÚsizeÚsizesr/  r‘   s               r%   Ú_download_tozPackageIndex._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 Æ8Gc                 ó   — d S rp   rŽ   )r�   r>   r`   rd  Úblksizerf  s         r%   rb  zPackageIndex.reporthook  s   € Øˆr2   c                 ó®  — |                      d¦  «        rt          |¦  «        S 	 t          || j        ¦  «        S # t          t
          j        j        f$ r]}d                     d„ |j	        D ¦   «         ¦  «        }|r|  
                    ||¦  «         nt          |›d|›�¦  «        |‚Y d }~d S d }~wt          j        j        $ r}|cY d }~S d }~wt          j        j        $ rD}|r|  
                    ||j        ¦  «         nt          d|›d|j        ›�¦  «        |‚Y d }~d S d }~wt
          j        j        $ rC}|r|  
                    ||j        ¦  «         nt          |›d|j        ›�¦  «        |‚Y d }~d S d }~wt
          j        j        t(          j        f$ r:}|r|  
                    ||¦  «         nt          d|›d|›�¦  «        |‚Y d }~d S d }~ww xY w)Nr2  r\  c                 ó,   — g | ]}t          |¦  «        ‘ŒS rŽ   )r~   )re   Úargs     r%   rQ  z)PackageIndex.open_url.<locals>.<listcomp>  s   € Ð7Ð7Ð7¨�C ™HœHÐ7Ð7Ð7r2   zDownload error for r[  z7 returned a bad status line. The server might be down, )r-   Ú
local_openÚopen_with_authrÃ   r"   ÚhttpÚclientÚ
InvalidURLrm   rq   rî   r   r:   rÜ   rÝ   ÚURLErrorÚreasonÚBadStatusLineÚlineÚHTTPExceptionÚsocket)r�   r>   ÚwarningÚvr±   s        r%   rÚ   zPackageIndex.open_url  so  € Ø�>Š>˜'Ñ"Ô"ð 	#Ý˜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ð/ñô ð ðð +Ð*Ð*Ð*Ð*Ð*øøøøõ ”Ô)­6¬<Ð8ð 	Tð 	Tð 	TØð TØ—	’	˜' 1Ñ%Ô%Ð%Ð%å$�nÀCÀCÀCÈÈÐ%KÑLÔLÐRSÐSð &Ð%Ð%Ð%Ð%Ð%øøøøð	TøøøsL   ¦; »GÁAB.Â.GÃCÃGÃGÃ#9D"Ä"GÄ98E7Å7#GÆ/GÇGc                 ój  — t          |¦  «        \  }}|r3d|v r.|                     dd¦  «                             dd¦  «        }d|v °.nd}|                     d¦  «        r
|d d…         }t          j                             ||¦  «        }|                      ||¦  «        p|                      ||¦  «        S )Nz..ú.ú\Ú_Ú__downloaded__rP   r*   )rF   Úreplacer,   r_   rB   rm   Ú_download_vcsÚ_download_other)r�   r>   r=  r.   rE   r`   s         r%   r:  zPackageIndex._download_url1  s½   € õ *¨#Ñ.Ô.‰ˆˆhØð 	$Ø˜$�,�,Ø—|’| D¨#Ñ.Ô.×6Ò6°t¸SÑAÔA�ð ˜$�,�,øð $ˆDà�=Š=˜Ñ$Ô$ð 	Ø˜˜˜”9ˆDå”7—<’< ¨Ñ-Ô-ˆà×!Ò! # xÑ0Ô0ÐW°D×4HÒ4HÈÈhÑ4WÔ4WÐWr2   c                 ó  — t           j                             | ¦  «        j        }|                     d¦  «        \  }}}t          ddgdgt          |¦  «        z  z   ¦  «        }t          t          |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!   Úurlsplitr@   Ú	partitionr|   ÚboolÚnextÚiter)r>   r@   ÚpreÚsepÚpostÚalloweds         r%   Ú_resolve_vcszPackageIndex._resolve_vcsB  sv   € õ ”×&Ò& sÑ+Ô+Ô2ˆØ×)Ò)¨#Ñ.Ô.‰ˆˆS�$å�u˜e�n¨ vµ°S±	´	Ñ'9Ñ9Ñ:Ô:ˆÝ•D˜#˜ ™Ñ)Ô)¨4Ñ0Ô0Ð0r2   c                 óæ  — |                       |¦  «        }|sd S |dk    r|                      ||¦  «        S |                     d¦  «        \  }}}|                      |¦  «        \  }}|                      d|› d|› d|› �¦  «         t          j        |dd||g¦  «         t          |d|d	d|g|d
|ddd|dg¬¦  «        }|�2|                      d|› �¦  «         t          j        ||         ¦  «         |S )Nr…  r8   zDoing z clone from ú to rI  z--quietz-CÚcheckoutz--cwdÚupz-rú-q)r†  r‡  zChecking out )r‘  Ú_download_svnr‰  Ú_vcs_split_rev_from_urlrÙ   Ú
subprocessÚ
check_callÚdict)r�   r>   Úspec_filenameÚvcsr`   r~  ÚrevÚco_commandss           r%   r�  zPackageIndex._download_vcsV  s-  € Ø×Ò Ñ$Ô$ˆØð 	ØˆFØ�%Š<ˆ<Ø×%Ò% c¨=Ñ9Ô9Ð9à&×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àˆr2   c                 ó0  — t           j                             |¦  «        j        }|dk    rAt           j                             t           j                             |¦  «        j        ¦  «        S |                      |d¦  «         |  	                    ||¦  «        S )Nrö   T)
r:   r!   rˆ  r@   rÁ   Úurl2pathnamer;   rB   r×   Ú_attempt_download)r�   r>   r`   r@   s       r%   r‚  zPackageIndex._download_otherm  sx   € Ý”×&Ò& sÑ+Ô+Ô2ˆØ�VÒÐÝ”>×.Ò.­v¬|×/DÒ/DÀSÑ/IÔ/IÔ/NÑOÔOÐOà�Š�C˜ÑÔÐØ×%Ò% c¨8Ñ4Ô4Ð4r2   c                 ó2   — |                       |d¦  «         d S )NT)rä   r  s     r%   r  zPackageIndex.scan_urlu  s   € Ø×Ò˜˜dÑ#Ô#Ð#Ð#Ð#r2   c                 ó´   — |                       ||¦  «        }d|                     dd¦  «                             ¦   «         v r|                      |||¦  «        S |S )NrÍ   rÎ   rÏ   )rh  rß   r+   Ú_download_html)r�   r>   r`   rÞ   s       r%   r¢  zPackageIndex._attempt_downloadx  sY   € Ø×#Ò# C¨Ñ2Ô2ˆØ�W—[’[ °Ñ4Ô4×:Ò:Ñ<Ô<Ð<Ð<Ø×&Ò& s¨G°XÑ>Ô>Ð>àˆOr2   c                 ót  — t          |¦  «        }|D ]m}|                     ¦   «         rWt          j        d|¦  «        r@|                     ¦   «          t          j        |¦  «         |                      ||¦  «        c S  nŒn|                     ¦   «          t          j        |¦  «         t          d|z   ¦  «        ‚)Nz <title>([^- ]+ - )?Revision \d+:zUnexpected HTML page found at )	r  r   rd   r„   rà   r_   r-  r—  r   )r�   r>   rÞ   r`   rö   rv  s         r%   r¥  zPackageIndex._download_html  s·   € Ý�H‰~Œ~ˆØð 	ð 	ˆDØ�zŠz‰|Œ|ð å”9Ð@À$ÑGÔGð =à—J’J‘L”L�LÝ”I˜hÑ'Ô'Ð'Ø×-Ò-¨c°8Ñ<Ô<Ð<Ð<Ð<Ø�ðð 	�
Š
‰ŒˆÝ
Œ	�(ÑÔÐÝÐ=ÀÑCÑDÔDÐDr2   c                 óÚ  — t          j        dt          ¦  «         |                     dd¦  «        d         }d}|                     ¦   «                              d¦  «        rÖd|v rÒt          j                             |¦  «        \  }}}}}}	|sª|                     d¦  «        r•d	|d
d …         v r‰|d
d …                              d	d¦  «        \  }}t          |¦  «        \  }
}|
rTd|
v r"|
                     dd¦  «        \  }}d|›d|›�}nd|
z   }|}||||||	f}t          j         
                    |¦  «        }|                      d|› d|› �¦  «         t          j        dd|d||g¦  «         |S )Nz"SVN download support is deprecatedr8   r9   r   rÏ   zsvn:ú@z//r4   rh   ú:z --username=z --password=zDoing subversion checkout from r“  r…  r”  r–  )Úwarningsrî   ÚUserWarningr=   r+   r-   r:   r!   r;   Ú
_splituserÚ
urlunparserÙ   r™  rš  )r�   r>   r`   Úcredsr@   ÚnetlocrB   rf   Úqrê   ÚauthÚhostÚuserÚpwr?   s                  r%   r—  zPackageIndex._download_svnŽ  s�  € ÝŒÐ:½KÑHÔHÐHØ�iŠi˜˜QÑÔ Ô"ˆØˆØ�9Š9‰;Œ;×!Ò! &Ñ)Ô)ð 	9¨c°S¨j¨jÝ,2¬L×,AÒ,AÀ#Ñ,FÔ,FÑ)ˆF�F˜D ! Q¨Øð 9˜dŸošo¨dÑ3Ô3ð 9¸¸tÀAÀBÀB¼x¸¸Ø# A B BœxŸ~š~¨c°1Ñ5Ô5‘�˜Ý'¨Ñ/Ô/‘
��dØð 9Ø˜d�{�{Ø#'§:¢:¨c°1Ñ#5Ô#5™˜˜b˜bØBFÀ$À$ÈÈÐ K˜˜à .°Ñ 5˜Ø!�FØ" F¨C°°A°qÐ8�EÝ œ,×1Ò1°%Ñ8Ô8�CØ�	Š	ÐG°CÐGÐG¸XÐGÐGÑHÔHÐHÝÔ˜u j°%¸¸sÀHÐMÑNÔNÐNØˆr2   c                 óf  — t           j                             | ¦  «        }|j                             dd¦  «        d         }|j                             d¦  «        \  }}}|                     d¦  «        \  }}}|r||fn|df\  }}	|                     ||d¬¦  «         	                    ¦   «         }
|
|	fS )	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„  r9   r5   r8   r¨  NrÏ   )r@   rB   rE   )
r:   r!   rˆ  r@   r=   rB   r‰  Ú
rpartitionÚ_replaceÚgeturl)r>   r?   Ú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à—>’>ØØàð	 "ñ 
ô 
÷
 Š&‰(Œ(ð 	ð ˜ˆ}Ðr2   c                 ó*   — t          j        |g|¢R Ž  d S rp   )r   rØ   r!  s      r%   rØ   zPackageIndex.debugÃ  s    € ÝŒ	�#Ð˜ÐÐÐÐÐÐr2   c                 ó*   — t          j        |g|¢R Ž  d S rp   )r   rÙ   r!  s      r%   rÙ   zPackageIndex.infoÆ  ó    € ÝŒ�Ð�tÐÐÐÐÐÐr2   c                 ó*   — t          j        |g|¢R Ž  d S rp   )r   rî   r!  s      r%   rî   zPackageIndex.warnÉ  r¿  r2   )rµ   r¶   NT)Frp   )FFFN)FF)+rš   r›   rœ   r�   r¦   rË   rä   rÕ   r×   r  r   r  ræ   r  r  r'  r*  r0  r5  r)  r%  r6   r<  rM  r;  r^  rh  rb  rÚ   r:  Ústaticmethodr‘  r�  r‚  r  r¢  r¥  r—  r˜  rØ   rÙ   rî   Ú__classcell__©rÈ   s   @r%   r   r   ,  sä  ø€ € € € € ØEÐEð -ØØØð-ð -ð -ð -ð -ð -ð$!ð !ð !ð !ð !ð31ð 31ð 31ð 31ðj'ð 'ð 'ð 'ð  ð  ð  ð  ð?ð ?ð ?ðð ð ð 2ð 2ð 2ð 
ð 
ð 
ð:
ð 
ð 
ð&ð &ð &ð &ðð ð ðHð Hð Hð Hð Hð Hðð ð ð)ð )ð )ðð ð ð	ð 	ð 	ð Pð  Pð  PðL ØØØðN?ð N?ð N?ð N?ð`ð ð ð ð,ð ,ð ,ð\ €Lð"ð "ð "ðHð ð ð Tð  Tð  Tð  TðDXð Xð Xð" ð1ð 1ñ „\ð1ð&ð ð ð.5ð 5ð 5ð$ð $ð $ðð ð ðEð Eð Eðð ð ð, ðð ñ „\ðð<ð ð ðð ð ðð ð ð ð ð ð r2   r   z!&(#(\d+|x[\da-fA-F]+)|[\w.:-]+);?c                 óT   — |                       d¦  «        }t          j        |¦  «        S )Nr   )rL   rÍ   Úunescape)rK   Úwhats     r%   Údecode_entityrÇ  Ò  s!   € Ø�;Š;�q‰>Œ>€DÝŒ=˜ÑÔÐr2   c                 ó,   — t          t          | ¦  «        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Ñ*Ô*Ð*r2   c                 ó   ‡ — ˆ fd„}|S )Nc                 ó   •‡ — ˆ ˆfd„}|S )Nc                  ó¾   •— t          j        ¦   «         }t          j        ‰¦  «         	  ‰| i |¤Žt          j        |¦  «         S # t          j        |¦  «         w xY wrp   )rx  ÚgetdefaulttimeoutÚsetdefaulttimeout)rq   rr   Úold_timeoutrs   Ú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 ÁArŽ   )rs   rÒ  rÑ  s   ` €r%   rÒ  z'socket_timeout.<locals>._socket_timeoutä  s*   øø€ ð	6ð 	6ð 	6ð 	6ð 	6ð 	6ð Ðr2   rŽ   )rÑ  rÒ  s   ` r%   Úsocket_timeoutrÓ  ã  s$   ø€ ð	ð 	ð 	ð 	ð 	ð Ðr2   c                 óä   — t           j                             | ¦  «        }|                     ¦   «         }t	          j        |¦  «        }|                     ¦   «         }|                     dd¦  «        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€  )r±  Úauth_sÚ
auth_bytesÚencoded_bytesÚencodeds        r%   Ú_encode_authrÝ  ò  s[   € õ Œ\×!Ò! $Ñ'Ô'€Fà—’‘”€JÝÔ$ ZÑ0Ô0€Mà×"Ò"Ñ$Ô$€Gà�?Š?˜4 Ñ$Ô$Ð$r2   c                   ó$   — e Zd ZdZd„ Zd„ Zd„ ZdS )Ú
Credentialz:
    A username/password pair. Use like a namedtuple.
    c                 ó"   — || _         || _        d S rp   ©ÚusernameÚpassword)r�   râ  rã  s      r%   r¦   zCredential.__init__  s   € Ø ˆŒØ ˆŒˆˆr2   c              #   ó.   K  — | j         V — | j        V — d S rp   rá  r”   s    r%   Ú__iter__zCredential.__iter__  s(   è è € ØŒmÐÐÐØŒmÐÐÐÐÐr2   c                 ó&   — dt          | ¦  «        z  S )Nz%(username)s:%(password)s)Úvarsr”   s    r%   Ú__str__zCredential.__str__  s   € Ø*­T°$©Z¬ZÑ7Ð7r2   N)rš   r›   rœ   r�   r¦   rå  rè  rŽ   r2   r%   rß  rß    sK   € € € € € ðð ð!ð !ð !ðð ð ð8ð 8ð 8ð 8ð 8r2   rß  c                   ó@   ‡ — e Zd Zˆ fd„Zed„ ¦   «         Zd„ Zd„ Zˆ xZS )Ú
PyPIConfigc                 ój  •— t                                g d¢d¦  «        }t          ¦   «                              |¦  «         t          j                             t          j                             d¦  «        d¦  «        }t          j                             |¦  «        r|  	                    |¦  «         dS dS )z%
        Load from ~/.pypirc
        )râ  rã  Ú
repositoryrÏ   ú~z.pypircN)
r›  Úfromkeysrº   r¦   r_   rB   rm   Ú
expanduserrí   rá   )r�   ÚdefaultsÚrcrÈ   s      €r%   r¦   zPyPIConfig.__init__  s�   ø€ õ —=’=Ð!GÐ!GÐ!GÈÑLÔLˆÝ‰Œ×Ò˜Ñ"Ô"Ð"åŒW�\Š\�"œ'×,Ò,¨SÑ1Ô1°9Ñ=Ô=ˆÝŒ7�>Š>˜"ÑÔð 	Ø�IŠI�b‰MŒMˆMˆMˆMð	ð 	r2   c                 óˆ   ‡ — ˆ fd„‰                       ¦   «         D ¦   «         }t          t          ‰ j        |¦  «        ¦  «        S )Nc                 ód   •— g | ],}‰                      |d ¦  «                             ¦   «         ¯*|‘Œ-S )rì  )rß   r   )re   Úsectionr�   s     €r%   rQ  z2PyPIConfig.creds_by_repository.<locals>.<listcomp>&  sI   ø€ ð &
ð &
ð &
àØ�xŠx˜ Ñ.Ô.×4Ò4Ñ6Ô6ð&
Øð&
ð &
ð &
r2   )Úsectionsr›  r}   Ú_get_repo_cred)r�   Úsections_with_repositoriess   ` r%   Úcreds_by_repositoryzPyPIConfig.creds_by_repository$  sR   ø€ ð&
ð &
ð &
ð &
àŸ=š=™?œ?ð&
ñ &
ô &
Ð"õ •C˜Ô+Ð-GÑHÔHÑIÔIÐIr2   c                 ó  — |                       |d¦  «                             ¦   «         }|t          |                       |d¦  «                             ¦   «         |                       |d¦  «                             ¦   «         ¦  «        fS )Nrì  râ  rã  )rß   r   rß  )r�   rô  Úrepos      r%   rö  zPyPIConfig._get_repo_cred.  st   € Ø�xŠx˜ Ñ.Ô.×4Ò4Ñ6Ô6ˆØ•ZØ�HŠH�W˜jÑ)Ô)×/Ò/Ñ1Ô1Ø�HŠH�W˜jÑ)Ô)×/Ò/Ñ1Ô1ñ
ô 
ð 
ð 	
r2   c                 óv   — | j                              ¦   «         D ]\  }}|                     |¦  «        r|c S ŒdS )zŒ
        If the URL indicated appears to be a repository defined in this
        config, return the credential for that repository.
        N)rø  Úitemsr-   )r�   r>   rì  Úcreds       r%   Úfind_credentialzPyPIConfig.find_credential5  sS   € ð
 !%Ô 8× >Ò >Ñ @Ô @ð 	ð 	ÑˆJ˜Ø�~Š~˜jÑ)Ô)ð Ø���ðð	ð 	r2   )	rš   r›   rœ   r¦   Úpropertyrø  rö  rþ  rÂ  rÃ  s   @r%   rê  rê    st   ø€ € € € € ð	ð 	ð 	ð 	ð 	ð ðJð Jñ „XðJð
ð 
ð 
ðð ð ð ð ð ð r2   rê  c                 óÄ  — t           j                             | ¦  «        }|\  }}}}}}|                     d¦  «        rt          j                             d¦  «        ‚|dv rt          |¦  «        \  }	}
nd}	|	sMt          ¦   «          	                    | ¦  «        }|r*t          |¦  «        }	|j        | f}t          j        dg|¢R Ž  |	rodt          |	¦  «        z   }	||
||||f}t           j                             |¦  «        }t           j                             |¦  «        }|                     d|	¦  «         nt           j                             | ¦  «        }|                     dt&          ¦  «          ||¦  «        }|	rct           j                             |j        ¦  «        \  }}}}}}||k    r2||
k    r,||||||f}t           j                             |¦  «        |_        |S )	z4Open a urllib2 request, handling HTTP authenticationr©  znonnumeric port: '')rp  ÚhttpsNz*Authenticating as %s for %s (from .pypirc)zBasic ÚAuthorizationz
User-Agent)r:   r!   r;   r,   rp  rq  rr  r¬  rê  rþ  r~   râ  r   rÙ   rÝ  r­  rÁ   ÚRequestÚ
add_headerÚ
user_agentr>   )r>   rÃ   Úparsedr@   r¯  rB   ÚparamsrD   r  r±  Úaddressrý  rÙ   r?   r  rÁ   rc  Ús2Úh2Úpath2Úparam2Úquery2Úfrag2s                          r%   ro  ro  ?  sé  € õ Œ\×"Ò" 3Ñ'Ô'€FØ06Ñ-€FˆF�D˜& %¨ð ‡‚�sÑÔð <ÝŒk×$Ò$Ð%:Ñ;Ô;Ð;àÐ"Ð"Ð"Ý" 6Ñ*Ô*‰ˆˆ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à€Ir2   c                 óD   — |                       d¦  «        \  }}} |r|nd| fS )zNsplituser('user[:passwd]@host[:port]')
    --> 'user[:passwd]', 'host[:port]'.r¨  N)r¶  )r²  r³  Údelims      r%   r¬  r¬  n  s0   € ð Ÿš¨Ñ,Ô,Ñ€Dˆ%�ØÐ#ˆDˆD˜t dÐ*Ð*r2   c                 ó   — | S rp   rŽ   )r>   s    r%   Ú
fix_sf_urlr  y  s   € Ø€Jr2   c                 óì  — t           j                             | ¦  «        \  }}}}}}t           j                             |¦  «        }t
          j                             |¦  «        rt           j                             | ¦  «        S | 	                    d¦  «        �rt
          j         
                    |¦  «        rüg }t          j        |¦  «        D ]³}	t
          j                             ||	¦  «        }
|	dk    r>t          |
d¦  «        5 }|                     ¦   «         }ddd¦  «         n# 1 swxY w Y    nzt
          j         
                    |
¦  «        r|	dz  }	|                     d                     |	¬¦  «        ¦  «         Œ´d}|                     | d                     |¦  «        ¬	¦  «        }d
\  }}nd\  }}}ddi}t#          j        |¦  «        }t           j                             | ||||¦  «        S )z7Read a local path, with special support for directoriesr4   z
index.htmlÚrNz<a href="{name}">{name}</a>)r.   zB<html><head><title>{url}</title></head><body>{files}</body></html>rÕ  )r>   Úfiles)éÈ   ÚOK)rÓ   zPath not foundz	Not foundrÎ   z	text/html)r:   r!   r;   rÁ   r¡  r_   rB   ÚisfilerÂ   r,   rï   rñ   rm   r  rá   r3  ÚformatÚioÚStringIOrÜ   rÝ   )r>   r@   rA   rB   ÚparamrD   r  r`   r  rê   Úfilepathrc  Úbodyré   ÚstatusÚmessagerÞ   Úbody_streams                     r%   rn  rn  }  s  € å/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Ò Ð Ý˜( CÑ(Ô(ð %¨BØŸ7š7™9œ9�Dð%ð %ð %ñ %ô %ð %ð %ð %ð %ð %ð %øøøð %ð %ð %ð %à�Ý”—’˜xÑ(Ô(ð Ø�S‘�Ø�LŠLÐ6×=Ò=À1Ð=ÑEÔEÑFÔFÐFÐFð Xð ð —;’; 3¨d¯iªi¸Ñ.>Ô.>�;Ñ?Ô?ˆDØ#‰ˆ��à BÑˆ�˜à˜{Ð+€GÝ”+˜dÑ#Ô#€KÝŒ<×!Ò! # v¨w¸ÀÑMÔMÐMs   ÄD(Ä(D,	Ä/D,	rp   )r   )[r�   Úsysr™  r_   rd   r  rU  rx  r×  r¢   rþ   rª  ÚconfigparserrÍ   Úhttp.clientrp  Úurllib.parser:   Úurllib.requestÚurllib.errorÚ	functoolsr   r   Úpkg_resourcesr   r   r   r   r	   r
   r   r   r   r   r   r   r   r   Ú	distutilsr   Údistutils.errorsr   Úfnmatchr   Úsetuptools.wheelr   Ú setuptools.extern.more_itertoolsr   r²   rJ   ÚIr€   r  rK   rÔ   r=   rW   Ú__all__Ú_SOCKET_TIMEOUTÚ_tmplr  Úversion_infor  r&   r   rF   r   rI   ra   r   ru   ry   rŠ   rŒ   rŸ   r   r  rÉ  rÇ  r‚   rÓ  rÝ  rß  ÚRawConfigParserrê  rÁ   rÂ   ro  r¬  r  rn  rŽ   r2   r%   ú<module>r5     s  ðØ *Ð *à 
€
€
€
Ø Ð Ð Ð Ø 	€	€	€	Ø 	€	€	€	Ø 	€	€	€	Ø €€€Ø €€€Ø €€€Ø €€€Ø Ð Ð Ð Ø €€€Ø Ð Ð Ð Ø €€€Ø Ð Ð Ð Ø Ð Ð Ð Ø Ð Ð Ð Ø Ð Ð Ð Ø Ð Ð Ð Ð Ð à Ð Ð Ð ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð  Ð Ð Ð Ð Ð Ø +Ð +Ð +Ð +Ð +Ð +Ø Ð Ð Ð Ð Ð Ø "Ð "Ð "Ð "Ð "Ð "Ø <Ð <Ð <Ð <Ð <Ð <ð ˆ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ð ð ð ð �.ñ ô ð ðB^
ð ^
ð ^
ð ^
ð ^
�;ñ ^
ô ^
ð ^
ðF ˆRŒZÐ<Ñ=Ô=ÔA€
ðð ð ð
	+ð 	+ð 	+ðð ð ð ð%ð %ð %ð*8ð 8ð 8ð 8ð 8ñ 8ô 8ð 8ð"$ð $ð $ð $ð $�Ô-ñ $ô $ð $ðN  &œ~Ô5ð +ð +ð +ð +ð^+ð +ð +ð 1�� Ñ0Ô0°Ñ@Ô@€ðð ð ðNð Nð Nð Nð Nr2   