§
    »"½jk�  ã                  ó  — d Z ddlm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mZ ddlm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/m0Z0m1Z1 ddl2m3Z3 ddl4m5Z5  ej6        d¦  «        Z7 ej6        dej8        ¦  «        Z9 ej6        d¦  «        Z: ej6        dej8        ¦  «        j;        Z<d =                    ¦   «         Z>g d¢Z?dZ@dejA        › dejB        jC        › dejB        jD        › �ZEd„ ZFd„ ZGd„ ZHd5d„ZId5d„ZJd5d„ZKde#dfd„ZLd„ ZM ej6        d ej8        ¦  «        ZN	 eMd!„ ¦   «         ZO G d"„ d#¦  «        ZP G d$„ d%eP¦  «        ZQ G d&„ d'e%¦  «        ZR ej6        d(¦  «        jS        ZTd)„ ZUd*„ ZVd6d+„ZWd,„ ZX G d-„ d.e¦  «        ZY G d/„ d0ejZ        ¦  «        Z[ej\        j]        fd1„Z^d2„ Z_  eWe@¦  «        e^¦  «        Z^d3„ Z`d4„ ZadS )7z$PyPI and direct package downloading.é    )ÚannotationsN)Ú	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_.+!]+)$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/z Python-urllib/ú.c                ó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     úX/home/spazio/kingdom_calls/venv/lib/python3.11/site-packages/setuptools/package_index.pyÚparse_requirement_argr*   H   sW   € ðÝÔ  Ñ&Ô&Ð&øÝð ð ð ÝØF¸dÐFÐFñ
ô 
àð	øøøøðøøø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    Q   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éþÿÿÿú#r   )Úurllibr%   ÚurlparseÚunquoteÚsplit)	ÚurlÚpartsÚ_schemeÚserverÚpathÚ_parametersÚ_queryÚfragmentr3   s	            r)   Úegg_info_for_urlrI   i   s±   € ÝŒL×!Ò! #Ñ&Ô&€EØ;@Ñ8€GˆV�T˜;¨°ÝŒ<×Ò §
¢
¨3¡¤°Ô 3Ñ4Ô4€DØÐ"Ò"Ð" t¨zÒ'9Ð'9ÝŒ|×#Ò# D§J¢J¨s¡O¤O°BÔ$7Ñ8Ô8ˆØ
ˆd€{€{ØŸš C¨Ñ+Ô+‰ˆˆhØ�ˆ>Ðr6   c              #  ó  K  — t          | ¦  «        \  }}t          | ||¦  «        E d{V —† |rOt                               |¦  «        }|r5t	          | |                     d¦  «        |t          ¬¦  «        E d{V —† dS dS dS )zEYield egg or source distribution objects that might be found at a URLNr   )Ú
precedence)rI   Údistros_for_locationÚEGG_FRAGMENTÚmatchr!   Úgroupr   )rA   Úmetadatar3   rH   rN   s        r)   r   r   t   sÄ   è è € å% cÑ*Ô*�N€Dˆ(Ý# C¨¨xÑ8Ô8Ð8Ð8Ð8Ð8Ð8Ð8Ð8Øð Ý×"Ò" 8Ñ,Ô,ˆØð 	Ý,Ø�U—[’[ ‘^”^ X½-ðñ ô ð ð ð ð ð ð ð ð ð ðð ð	ð 	r6   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 basenamez.egg.zipNr.   ú.eggÚ-z.whlr   )ÚlocationÚproject_nameÚversionrK   r,   )r0   r   Úfrom_locationr   Úis_compatiblerU   rV   r   r    r!   r
   Ú
EXTENSIONSÚlen)rT   ÚbasenamerP   ÚwheelÚwin_baser4   ÚplatformÚexts           r)   rL   rL   €   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ð €Ir6   c                óx   — t          t          | ¦  «        t          j                             | ¦  «        |¦  «        S )zEYield possible egg or source distribution objects based on a filename)rL   r   ÚosrE   r[   )ÚfilenamerP   s     r)   Údistros_for_filenamerc   £   s3   € åÝ�xÑ Ô ¥"¤'×"2Ò"2°8Ñ"<Ô"<¸hñô ð r6   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!
    rS   c              3  ó@   K  — | ]}t          j        d |¦  «        V — ŒdS )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_versionrK   r^   )r@   ÚanyÚrangerZ   Úisdigitr   Újoin)rT   r[   rP   rk   rK   r^   rB   rh   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”ÑÔØØØðñ ô ð ð ð ð ð r6   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Ð5r6   r   )ru   rv   s   ` r)   Úunique_valuesrw   Ì   s5   ø€ õ ˆ4�[„[ð6ð 6ð 6ð 6ñ „[ð6ð €Nr6   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Ú,Úhomepager:   r   )z<th>Home Pagez<th>Download URLr9   N)Ú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ð Lr6   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	   € ð 	ˆr6   c                ó   — dS )zC
        Check the hash. Return False if validation fails.
        Tr�   ©r’   s    r)   Úis_validzContentChecker.is_validý   s	   € ð ˆtr6   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	   € ð
 	ˆr6   N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r”   r—   r›   r�   r6   r)   rŽ   rŽ   ò   sK   € € € € € ðð ðð ð ðð ð ðð ð ð ð r6   rŽ   c                  ó^   — e Zd Z ej        d¦  «        Zd
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]+)ÚreturnÚNonec                óT   — || _         t          j        |¦  «        | _        || _        d S rr   )Ú	hash_nameÚhashlibÚnewÚhashÚexpected)r’   r¥   r©   s      r)   Ú__init__zHashChecker.__init__  s%   € Ø"ˆŒÝ”K 	Ñ*Ô*ˆŒ	Ø ˆŒˆˆr6   c                óô   — t           j                             |¦  «        d         }|st          ¦   «         S | j                             |¦  «        }|st          ¦   «         S  | di |                     ¦   «         ¤ŽS )z5Construct a (possibly null) ContentChecker from a URLr9   r�   )r=   r%   r>   rŽ   Úpatternr†   Ú	groupdict)ÚclsrA   rH   rN   s       r)   Úfrom_urlzHashChecker.from_url  s{   € õ ”<×(Ò(¨Ñ-Ô-¨bÔ1ˆØð 	$Ý!Ñ#Ô#Ð#Ø”×"Ò" 8Ñ,Ô,ˆØð 	$Ý!Ñ#Ô#Ð#ØˆsÐ'Ð'�U—_’_Ñ&Ô&Ð'Ð'Ð'r6   c                ó:   — | j                              |¦  «         d S rr   )r¨   Úupdater‘   s     r)   r”   zHashChecker.feed!  s   € ØŒ	×Ò˜ÑÔÐÐÐr6   c                óF   — | j                              ¦   «         | j        k    S rr   )r¨   Ú	hexdigestr©   r–   s    r)   r—   zHashChecker.is_valid$  s   € ØŒy×"Ò"Ñ$Ô$¨¬Ò5Ð5r6   c                ó,   — || j         z  } ||¦  «        S rr   )r¥   )r’   r™   rš   Úmsgs       r)   r›   zHashChecker.report'  s   € Ø˜œÑ'ˆØˆx˜‰}Œ}Ðr6   N©r¢   r£   )rœ   r�   rž   rf   Úcompiler¬   rª   Úclassmethodr¯   r”   r—   r›   r�   r6   r)   r¡   r¡     sˆ   € € € € € ØˆbŒjð	#ñô €Gð
!ð !ð !ð !ð
 ð(ð (ñ „[ð(ð ð  ð  ð6ð 6ð 6ðð ð ð ð r6   r¡   c                  ó�  ‡ — e Zd ZdZ	 	 	 	 d;d<ˆ fd„Zˆ fd„Zd=d>d„Zd=d?d„Zd=d@d„ZdAd„Z	dAd„Z
d„ Zd„ ZdAd„ZdBdAd„ZdAd„ZdBˆ fd„	ZdAd„ZdAd„Zd„ ZdAd „Zd!„ Z	 	 	 	 dCdDd&„Z	 dEdFd(„Zd)„ Zd*Zd+„ ZdAd,„ZdBd-„Zed.„ ¦   «         Zed/„ ¦   «         Z d0„ Z!ed1„ ¦   «         Z"d2„ Z#d3„ Z$dAd4„Z%d5„ Z&d6„ Z'ed7„ ¦   «         Z(dAd8„Z)dAd9„Z*dAd:„Z+ˆ xZ,S )Gr   z;A distribution index that scans web pages for download URLsúhttps://pypi.org/simple/©Ú*NTÚ	index_urlr€   Ú
verify_sslÚboolr¢   r£   c                ór  •—  t          ¦   «         j        |i |¤Ž |dd |                     d¦  «         …         z   | _        i | _        i | _        i | _        t          j        d 	                    t          t          |¦  «        ¦  «        ¦  «        j        | _        g | _        t          j        j        | _        d S )Nr8   Ú|)Úsuperrª   r0   r½   Úscanned_urlsÚfetched_urlsÚpackage_pagesrf   r·   ro   r   r   rN   ÚallowsÚto_scanr=   ÚrequestÚurlopenÚopener)r’   r½   ÚhostsÚ	ca_bundler¾   rs   Ú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Ô,ˆŒˆˆr6   c                ó”   •— 	 t          |j        ¦  «         n# t          $ r Y d S w xY wt          ¦   «                              |¦  «        S rr   )r   rV   Ú	ExceptionrÂ   Úadd)r’   ÚdistrÎ   s     €r)   rÑ   zPackageIndex.addA  sS   ø€ ð	Ý˜$œ,Ñ'Ô'Ð'Ð'øÝð 	ð 	ð 	Ø�4�4ð	øøøå‰wŒw�{Š{˜4Ñ Ô Ð s   ƒ ˜
&¥&FÚretrievec           	     ó  — || 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        › �¦  «         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: Úhtmlúcontent-typeÚ zlatin-1ÚcharsetÚignorer   Úcodeé”  )&rÃ   Ú
URL_SCHEMEÚprocess_filenameÚlistr   Úurl_okÚdebugrÄ   r   rÑ   ÚinfoÚopen_urlÚ
isinstancer=   ÚerrorÚ	HTTPErrorrÚ   rµ   rA   ÚheadersÚgetr/   ÚcloseÚreadr€   Ú	get_paramÚdecoder‚   r|   r%   rƒ   r„   rO   Úprocess_urlr1   r½   ÚgetattrÚprocess_index)r’   rA   rÓ   ÚdistsÚtmplÚfr3   r‡   rØ   rN   Ú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ð 	8°Q´V¸s²]°]Ø�IŠIÐ6¨q¬uÐ6Ð6Ñ7Ô7Ð7Ø#'ˆÔ˜!œ%Ñ Ø˜œŸš ~°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                ó   — 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)ra   rE   ÚexistsÚwarnÚisdirÚrealpathÚlistdirrÝ   ro   rc   rà   rÞ   r   rÑ   )r’   Úfnró   rE   Ú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Ñ%Ô%Ñ&Ô&Ð&Ð&Ð&ð	'ð 	'r6   Úfatalc                óN  — t          |¦  «        }|o*|                     d¦  «                             ¦   «         dk    }|s8|                      t          j                             |¦  «        d         ¦  «        rdS d}|rt          ||z  ¦  «        ‚|                      ||¦  «         dS )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Ü   rO   r/   rÆ   r=   r%   r>   r   rö   )r’   rA   rü   ÚsÚis_filerµ   s         r)   rß   zPackageIndex.url_ok�  s§   € Ý�s‰OŒOˆØÐ4˜Ÿš ™
œ
×(Ò(Ñ*Ô*¨fÒ4ˆØð 	�d—k’k¥&¤,×"7Ò"7¸Ñ"<Ô"<¸QÔ"?Ñ@Ô@ð 	Ø�4ðWð 	ð
 ð 	Ý   s¡Ñ+Ô+Ð+à�IŠI�c˜3ÑÔÐØ�5r6   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)ra   rù   r0   )rg   rE   Úentrys      r)   ri   z.PackageIndex.scan_egg_links.<locals>.<genexpr>¡  sm   è è € ð 
ð 
àÝœ DÑ)Ô)ð
ð 
ð Ø�~Š~˜kÑ*Ô*ð	
Ø�5ˆMð
ð 
ð 
ð 
ð 
ð 
ð 
r6   )Úfilterra   rE   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Ñ=Ô=Ñ>Ô>Ð>Ð>Ð>r6   c           
     óü  — t          t          j                             ||¦  «        ¦  «        }t	          t          d t          t          j        | 	                    ¦   «         ¦  «        ¦  «        ¦  «        }t          |¦  «        dk    rd S |\  }}t          t          j                             ||¦  «        ¦  «        D ]?}t          j        j        |g|¢R Ž |_        t          |_        |                      |¦  «         Œ@d S )Nrj   )r   ra   rE   ro   rÞ   r  r   r€   r�   Ú
splitlinesrZ   r   rT   r   rK   rÑ   )r’   rE   r  ÚcontentÚlinesÚegg_pathÚ_setup_pathrÒ   s           r)   r  zPackageIndex.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ð	ð 	r6   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©NNr8   rj   r<   r   r   T)r1   r½   rÞ   r   r=   r%   r?   rZ   r@   r   r   rÅ   Ú
setdefaultr/   r   )r’   rò   ÚNO_MATCH_SENTINELrB   Ú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Ð1r6   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 pager   r×   ú.pyz#egg=rS   c                ó@   —  dj         |                      ddd¦  «        Ž S )Nz<a href="{}#md5={}">{}</a>r   é   rj   )ÚformatrO   )Úms    r)   ú<lambda>z,PackageIndex.process_index.<locals>.<lambda>ã  s"   € Ð9Ð2Ô9¸1¿7º7À1ÀaÈÑ;KÔ;KÐL€ r6   )r‚   r|   r  r=   r%   rƒ   r„   rO   r&   rŒ   rI   r0   Úneed_version_infoÚscan_urlÚPYPI_MD5Úsub)	r’   rA   r‡   rN   r  r  Únew_urlr3   Úfrags	            r)   rî   zPackageIndex.process_indexÉ  sR  € õ —]’] 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ØÐ2 sÐ2Ð2¨SÐ2Ð2Ñ2�G�Gà×*Ò*¨3Ñ/Ô/Ð/Ø�MŠM˜'Ñ"Ô"Ð"Ð"å�|Š|ØLÐLÈdñ
ô 
ð 	
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’   rA   s     r)   r   zPackageIndex.need_version_infoæ  s*   € Ø�Šð àñ	
ô 	
ð 	
ð 	
ð 	
r6   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µ   rs   s      r)   r'  zPackageIndex.scan_allí  sa   € ØŒ> Ô!2Ð2Ð2Øð &Ø�”	˜#Ð% Ð%Ð%Ð%Ð%Ø�IŠIÐNÑOÔOÐOØ�Š�d”nÑ%Ô%Ð%Ð%Ð%r6   c                óÊ  — |                       | j        |j        z   dz   ¦  «         | j                             |j        ¦  «        s%|                       | j        |j        z   dz   ¦  «         | j                             |j        ¦  «        s|                      |¦  «         t          | j                             |j        d¦  «        ¦  «        D ]}|                       |¦  «         Œd S )Nr8   r�   )	r!  r½   Úunsafe_namerÅ   rç   ÚkeyrU   Únot_found_in_indexrÞ   )r’   ÚrequirementrA   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˜#ÑÔÐÐð	ð 	r6   c                óø   •— |                       ¦   «          |                      |¦  «         | |j                 D ]!}||v r|c S |                      d||¦  «         Œ"t	          ¦   «                              ||¦  «        S )Nz%s does not match %s)Úprescanr0  r-  rà   rÂ   Úobtain)r’   r/  Ú	installerrÒ   rÎ   s       €r)   r3  zPackageIndex.obtain  s‚   ø€ Ø�Š‰ŒˆØ×Ò˜;Ñ'Ô'Ð'Ø˜œÔ)ð 	Bð 	BˆDØ�{Ð"Ð"Ø���Ø�JŠJÐ-¨{¸DÑAÔAÐAÐAÝ‰wŒw�~Š~˜k¨9Ñ5Ô5Ð5r6   c                ó2  — |                      | j        d|› �¦  «         |                     ¦   «         sd|                     ¦   «          t	          j        |¦  «         t          |j        j        › dt          j	         
                    |¦  «        › d�¦  «        ‚dS )z-
        checker is a ContentChecker
        zValidating %s checksum for z validation failed for z; possible download problem?N)r›   rà   r—   rè   ra   Úunlinkr   r¨   r2   rE   r[   )r’   Úcheckerrb   Útfps       r)   Ú
check_hashzPackageIndex.check_hash  s£   € ð 	�Š�t”zÐ#KÀÐ#KÐ#KÑLÔLÐLØ×ÒÑ!Ô!ð 	Ø�IŠI‰KŒKˆKÝŒI�hÑÔÐÝ Ø”<Ô$ð -ð -½R¼W×=MÒ=MÈhÑ=WÔ=Wð -ð -ð -ñô ð ð	ð 	r6   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Ü   r1   rÞ   r   r!  Úappend)r’   ÚurlsrA   s      r)   Úadd_find_linkszPackageIndex.add_find_links  s‘   € àð 	)ð 	)ˆCà”Ð$Ý! #‘”ð %à—>’> 'Ñ*Ô*ð %õ �¨Ñ,Ô,Ñ-Ô-ð %ð —’˜cÑ"Ô"Ð"Ð"ð ”×#Ò# CÑ(Ô(Ð(Ð(ð	)ð 	)r6   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)   r2  zPackageIndex.prescan(  s3   € àŒ<ð 	3Ý•�T”] D¤LÑ1Ô1Ñ2Ô2Ð2ØˆŒˆˆr6   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.  sR   € Ø�”Ô ð 	YØœ	Ð#H�#ˆDˆDàœ	Ð#X�#ˆDØˆˆS�+Ô)Ñ*Ô*Ð*Ø�Š‰Œˆˆˆr6   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  rT   N)rã   r   rÜ   Ú_download_urlrI   r0   Ú	gen_setupra   rE   rõ   r*   rí   Úfetch_distribution)r’   r'   ÚtmpdirÚschemeÚfoundr3   rH   s          r)   r:   zPackageIndex.download6  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ÐOr6   Ú
force_scanÚsourceÚ
develop_okúDistribution | Nonec                ó2  ‡ ‡‡‡‡	— ‰                       d|¦  «         t          ¦   «         Š	d}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 %sNÚenvúEnvironment | Nonec                óz  •— |€‰}|| j                  D ]§}|j        t          k    r2‰s0|‰vr+‰                     d|¦  «         ‰                     |¦  «         ŒD|| v o|j        t
          k    p‰ }|rJ‰                     |j        ‰	¦  «        }||_        t          j
                             |j        ¦  «        r|c S Œ¨d S )Nz&Skipping development or system egg: %s)r-  rK   r   rö   rÑ   r   r:   rT   Údownload_locationra   rE   rõ   )
ÚreqrN  rÒ   ÚtestÚlocrK  r’   ÚskippedrJ  rF  s
        €€€€€r)   r…   z-PackageIndex.fetch_distribution.<locals>.findv  sÝ   ø€ Øˆ{Ø�ð ˜CœGœð $ð $�Ø”?¥lÒ2Ð2¸:Ð2Ø 7Ð*Ð*ØŸ	š	ØDØ ñô ð ð  Ÿš DÑ)Ô)Ð)Øà˜s�{ÐU¨¬½;Ò(FÐ(TÈfÈ*�Øð $ØŸ-š-¨¬°vÑ>Ô>�CØ-0�DÔ*Ý”w—~’~ dÔ&<Ñ=Ô=ð $Ø#˜˜˜øà�4r6   z:No local packages or working download links found for %s%sza source distribution of r×   zBest match: %s)rT   rr   )rN  rO  )rá   r~   r2  r0  rÇ   rö   ÚclonerQ  )
r’   r/  rF  rI  rJ  rK  Úlocal_indexrÒ   r…   rU  s
   ` ` ``   @r)   rE  zPackageIndex.fetch_distributionX  sr  øøøøø€ ð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Ô'=�:Ñ>Ô>Ð>r6   ú
str | Nonec                ó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)rE  rT   )r’   r/  rF  rI  rJ  rÒ   s         r)   ÚfetchzPackageIndex.fetchª  s0   € ð ×&Ò& {°F¸JÈÑOÔOˆØÐØ”=Ð Øˆtr6   c                óÂ  — t                                |¦  «        }|r.d„ t          ||                     d¦  «        d ¦  «        D ¦   «         pg }t	          |¦  «        dk    �rZt
          j                             |¦  «        }t
          j                             |¦  «        |k    rvt
          j         	                    ||¦  «        }t
          j         
                    |¦  «        r t
          j                             ||¦  «        st          j        ||¦  «         |}t          t
          j         	                    |d¦  «        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�   )rV   )rg   Úds     r)   ú
<listcomp>z*PackageIndex.gen_setup.<locals>.<listcomp>½  s0   € ð ð ð àØ”9ðØðð ð r6   r   zsetup.pyÚwzutf-8)Úencodingz(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.)rM   rN   r!   rO   rZ   ra   rE   r[   Údirnamero   rõ   ÚsamefileÚshutilÚcopy2ÚopenÚwriterU   rV   Úsplitextr   )	r’   rb   rH   rF  rN   rï   r[   Údstrþ   s	            r)   rD  zPackageIndex.gen_setup¹  sT  € Ý×"Ò" 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Ø—
’
ðMØ"'¨¤(Ô"7ðMð MØEJÈ1ÄXÔEUðMð MÝgiÔgn×gwÒgwð  yAñ  hBô  hBð  CDô  hEðMð Mð Mñô ð ðð ð ñ ô ð ð ð ð ð ð øøøð ð ð ð ð
 ˆOàð 
	Ý ð*ÈHð *ð *à %ð*ð *ñô ð õ !ðGñô ð s   Å	AF.Æ.F2Æ5F2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   r9   zcontent-lengthzContent-LengthÚwbTr   )rá   r¡   r¯   râ   rã   r=   rä   rå   r   rÚ   rµ   Údl_blocksizeÚget_allÚmaxr   ÚintÚ
reporthookre  ré   r”   rf  r9  rè   )r’   rA   rb   Úfpr7  ræ   ÚblocknumÚbsÚsizeÚsizesr8  r“   s               r)   Ú_download_tozPackageIndex._download_toä  s  € Ø�	Š	Ð" CÑ(Ô(Ð(àˆð	Ý!×*Ò*¨3Ñ/Ô/ˆGØ—’˜sÑ#Ô#ˆBÝ˜"�fœlÔ4Ñ5Ô5ð RÝ$Ð%P°sÐ%PÐ%P¸b¼gÐ%PÐ%PÈÌÐ%PÐ%PÑQÔQÐQØ—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 rr   r�   )r’   rA   rb   rs  Úblksizeru  s         r)   rq  zPackageIndex.reporthook  s   € Øˆr6   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(          f$ r:}|r|  
                    ||¦  «         nt          d|› d|› �¦  «        |‚Y d }~d S d }~ww xY w)Nr;  rk  c                ó,   — g | ]}t          |¦  «        ‘ŒS r�   )r€   )rg   Úargs     r)   r^  z)PackageIndex.open_url.<locals>.<listcomp>  s   € Ð7Ð7Ð7¨�C ™HœHÐ7Ð7Ð7r6   zDownload error for rj  z7 returned a bad status line. The server might be down, )r1   Ú
local_openÚopen_with_authrÊ   r&   ÚhttpÚclientÚ
InvalidURLro   rs   rö   r   r=   rä   rå   ÚURLErrorÚreasonÚBadStatusLineÚlineÚHTTPExceptionÚOSError)r’   rA   ÚwarningÚvrµ   s        r)   râ   zPackageIndex.open_url
  sv  € Ø�>Š>˜'Ñ"Ô"ð 	#Ý˜c‘?”?Ð"ð	NÝ! # t¤{Ñ3Ô3Ð3øÝ�DœKÔ2Ð3ð 	<ð 	<ð 	<Ø—(’(Ð7Ð7°´Ð7Ñ7Ô7Ñ8Ô8ˆCØð <Ø—	’	˜' 3Ñ'Ô'Ð'Ð'å$¨ ^ ^¨c ^ ^Ñ4Ô4¸!Ð;ð (Ð'Ð'Ð'Ð'Ð'øøøøõ Œ|Ô%ð 	ð 	ð 	ØˆHˆHˆHˆHˆHˆHøøøøÝŒ|Ô$ð 	Uð 	Uð 	UØð UØ—	’	˜' 1¤8Ñ,Ô,Ð,Ð,å$Ð%L¸3Ð%LÐ%LÀ!Ä(Ð%LÐ%LÑMÔMÐSTÐTð -Ð,Ð,Ð,Ð,Ð,øøøøõ Œ{Ô(ð 	ð 	ð 	Øð Ø—	’	˜' 1¤6Ñ*Ô*Ð*Ð*å$Øð &ð &ØœVð&ð &ñô ð ðð +Ð*Ð*Ð*Ð*Ð*øøøøõ ”Ô)­7Ð3ð 	Nð 	Nð 	NØð NØ—	’	˜' 1Ñ%Ô%Ð%Ð%å$Ð%E¸3Ð%EÐ%EÀ!Ð%EÐ%EÑFÔFÈAÐMð &Ð%Ð%Ð%Ð%Ð%øøøøð	NøøøsL   ¦; »GÁAB.Â.GÃCÃGÃGÃ#9D"Ä"GÄ98E7Å7GÆ/G
Ç
Gc                óX   — d                      d¦  «        }t          j        |d| ¦  «        S )a±  
        Replace unsafe path directives with underscores.

        >>> san = PackageIndex._sanitize
        >>> san('/home/user/.ssh/authorized_keys')
        '_home_user_.ssh_authorized_keys'
        >>> san('..\\foo\\bing')
        '__foo_bing'
        >>> san('D:bar')
        'D_bar'
        >>> san('C:\\bar')
        'C__bar'
        >>> san('foo..bar')
        'foo..bar'
        >>> san('D:../foo')
        'D___foo'
        rÁ   )ú:z[/\\]z6(?:(?<=([/\\]|:))\.\.(?=[/\\]|$))|(?:^\.\.(?=[/\\]|$))Ú_)ro   rf   r#  )r2   r¬   s     r)   Ú	_sanitizezPackageIndex._sanitize*  s2   € ð& —(’(ð 
ñ ô ˆõ Œv�g˜t TÑ*Ô*Ð*r6   c                óÀ   — t          |¦  «        \  }}|                      |pd¦  «        }t          j        dd|¦  «        }t          j                             ||¦  «        S )aK  
        >>> import pathlib
        >>> du = PackageIndex._resolve_download_filename
        >>> root = getfixture('tmp_path')
        >>> url = 'https://files.pythonhosted.org/packages/a9/5a/0db.../setuptools-78.1.0.tar.gz'
        >>> str(pathlib.Path(du(url, root)).relative_to(root))
        'setuptools-78.1.0.tar.gz'
        Ú__downloaded__z\.egg\.zip$rR   )rI   r�  rf   r#  ra   rE   ro   )r®   rA   rF  r2   Ú	_fragments        r)   Ú_resolve_download_filenamez'PackageIndex._resolve_download_filenameG  s`   € õ +¨3Ñ/Ô/‰ˆˆiØ�}Š}Øð ð ñ	
ô 
ˆõ Œv�n f¨dÑ3Ô3ˆåŒw�|Š|˜F DÑ)Ô)Ð)r6   c                ó†   — |                       ||¦  «        }|                      ||¦  «        p|                      ||¦  «        S )z2
        Determine the download filename.
        )r‘  Ú_download_vcsÚ_download_other)r’   rA   rF  rb   s       r)   rC  zPackageIndex._download_url^  sD   € ð ×2Ò2°3¸Ñ?Ô?ˆØ×!Ò! # xÑ0Ô0ÐW°D×4HÒ4HÈÈhÑ4WÔ4WÐWr6   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%   ÚurlsplitrG  Ú	partitionr~   r¿   ÚnextÚiter)rA   rG  ÚpreÚsepÚ_postÚalloweds         r)   Ú_resolve_vcszPackageIndex._resolve_vcse  sv   € õ ”×&Ò& sÑ+Ô+Ô2ˆØ ×*Ò*¨3Ñ/Ô/‰ˆˆS�%å�u˜e�n¨ vµ°S±	´	Ñ'9Ñ9Ñ:Ô:ˆÝ•D˜#˜ ™Ñ)Ô)¨4Ñ0Ô0Ð0r6   c                óÞ  — |                       |¦  «        }|sd S |dk    rt          d|› �¦  «        ‚|                     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—  z/Invalid config, SVN download is not supported: r<   zDoing z clone from z to rV  z--quietz-CÚcheckoutz--cwdÚupz-rz-q)r˜  r™  zChecking out )r¢  r   r›  Ú_vcs_split_rev_from_urlrá   Ú
subprocessÚ
check_callÚdict)r’   rA   Úspec_filenameÚvcsrb   rŒ  ÚrevÚco_commandss           r)   r“  zPackageIndex._download_vcsx  s6  € Ø×Ò Ñ$Ô$ˆØð 	Ø�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àˆr6   c                ó0  — t           j                             |¦  «        j        }|dk    rAt           j                             t           j                             |¦  «        j        ¦  «        S |                      |d¦  «         |  	                    ||¦  «        S )Nrþ   T)
r=   r%   rš  rG  rÈ   Úurl2pathnamer>   rE   rß   Ú_attempt_download)r’   rA   rb   rG  s       r)   r”  zPackageIndex._download_other‘  sx   € Ý”×&Ò& sÑ+Ô+Ô2ˆØ�VÒÐÝ”>×.Ò.­v¬|×/DÒ/DÀSÑ/IÔ/IÔ/NÑOÔOÐOà�Š�C˜ÑÔÐØ×%Ò% c¨8Ñ4Ô4Ð4r6   c                ó2   — |                       |d¦  «         d S )NT)rì   r(  s     r)   r!  zPackageIndex.scan_url™  s   € Ø×Ò˜˜dÑ#Ô#Ð#Ð#Ð#r6   c                ó´   — |                       ||¦  «        }d|                     dd¦  «                             ¦   «         v r|                      |||¦  «        S |S )NrÕ   rÖ   r×   )rw  rç   r/   Ú_invalid_download_html)r’   rA   rb   ræ   s       r)   r°  zPackageIndex._attempt_downloadœ  sY   € Ø×#Ò# C¨Ñ2Ô2ˆØ�W—[’[ °Ñ4Ô4×:Ò:Ñ<Ô<Ð<Ð<Ø×.Ò.¨s°G¸XÑFÔFÐFàˆOr6   c                óN   — t          j        |¦  «         t          d|› �¦  «        ‚)NzUnexpected HTML page found at )ra   r6  r   )r’   rA   ræ   rb   s       r)   r³  z#PackageIndex._invalid_download_html£  s)   € Ý
Œ	�(ÑÔÐÝÐC¸cÐCÐCÑDÔDÐDr6   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–  r   r9   r<   ú@Nr×   )rG  rE   rH   )
r=   r%   rš  rG  r@   rE   r›  Ú
rpartitionÚ_replaceÚgeturl)rA   rB   Úclean_schemeÚno_fragment_pathrŒ  rž  rŸ  ÚpostÚ
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à—>’>ØØàð	 "ñ 
ô 
÷
 Š&‰(Œ(ð 	ð ˜ˆ}Ðr6   c                ó*   — t          j        |g|¢R Ž  d S rr   )r   rà   r*  s      r)   rà   zPackageIndex.debugÇ  s    € ÝŒ	�#Ð˜ÐÐÐÐÐÐr6   c                ó*   — t          j        |g|¢R Ž  d S rr   )r   rá   r*  s      r)   rá   zPackageIndex.infoÊ  ó    € ÝŒ�Ð�tÐÐÐÐÐÐr6   c                ó*   — t          j        |g|¢R Ž  d S rr   )r   rö   r*  s      r)   rö   zPackageIndex.warnÍ  rÁ  r6   )rº   r»   NT)r½   r€   r¾   r¿   r¢   r£   )F)rÓ   r¿   r¢   r£   )ró   r¿   r¢   r£   )rü   r¿   r¢   r¿   r¶   rr   )FFFN)rI  r¿   rJ  r¿   rK  r¿   r¢   rL  )FF)rI  r¿   rJ  r¿   r¢   rX  )-rœ   r�   rž   rŸ   rª   rÑ   rì   rÝ   rß   r  r  r  rî   r   r'  r0  r3  r9  r>  r2  r.  r:   rE  rZ  rD  rm  rw  rq  râ   Ústaticmethodr�  r¸   r‘  rC  r¢  r“  r”  r!  r°  r³  r¦  rà   rá   rö   Ú__classcell__©rÎ   s   @r)   r   r   ,  sl  ø€ € € € € ØEÐEð 4ØØØð-ð -ð -ð -ð -ð -ð -ð$!ð !ð !ð !ð !ð31ð 31ð 31ð 31ð 31ðj'ð 'ð 'ð 'ð 'ð ð ð ð ð ð ?ð ?ð ?ð ?ðð ð ð ð 2ð 2ð 2ð 
ð 
ð 
ð:
ð 
ð 
ð 
ð&ð &ð &ð &ð &ðð ð ð ð6ð 6ð 6ð 6ð 6ð 6ðð ð ð ð)ð )ð )ð )ðð ð ðð ð ð ð Pð  Pð  PðL !ØØ ØðP?ð P?ð P?ð P?ð P?ðf MRðð ð ð ð ð'ð 'ð 'ðR €Lð ð  ð  ðDð ð ð ðNð Nð Nð Nð@ ð+ð +ñ „\ð+ð8 ð*ð *ñ „[ð*ð,Xð Xð Xð ð1ð 1ñ „\ð1ð$ð ð ð25ð 5ð 5ð$ð $ð $ð $ðð ð ðEð Eð Eð ðð ñ „\ðð>ð ð ð ðð ð ð ðð ð ð ð ð ð ð r6   r   z!&(#(\d+|x[\da-fA-F]+)|[\w.:-]+);?c                óT   — |                       d¦  «        }t          j        |¦  «        S )Nr   )rO   rÕ   Úunescape)rN   Úwhats     r)   Údecode_entityrÉ  Ö  s!   € Ø�;Š;�q‰>Œ>€DÝŒ=˜ÑÔÐr6   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Ñ*Ô*Ð*r6   c                ó   ‡ — ˆ fd„}|S )Nc                ó   •‡ — ˆ ˆfd„}|S )Nc                 ó¾   •— t          j        ¦   «         }t          j        ‰¦  «         	  ‰| i |¤Žt          j        |¦  «         S # t          j        |¦  «         w xY wrr   )ÚsocketÚgetdefaulttimeoutÚsetdefaulttimeout)rs   rt   Ú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 ÁAr�   )ru   rÕ  rÔ  s   ` €r)   rÕ  z'socket_timeout.<locals>._socket_timeoutè  s*   øø€ ð	6ð 	6ð 	6ð 	6ð 	6ð 	6ð Ðr6   r�   )rÔ  rÕ  s   ` r)   Úsocket_timeoutrÖ  ç  s$   ø€ ð	ð 	ð 	ð 	ð 	ð Ðr6   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ë   Úreplace)ÚauthÚauth_sÚ
auth_bytesÚencoded_bytesÚencodeds        r)   Ú_encode_authrâ  ö  s[   € õ Œ\×!Ò! $Ñ'Ô'€Fà—’‘”€JÝÔ$ ZÑ0Ô0€Mà×"Ò"Ñ$Ô$€Gà�?Š?˜4 Ñ$Ô$Ð$r6   c                  ó0   — e Zd ZU dZded<   ded<   dd„ZdS )	Ú
CredentialzŒ
    A username/password pair.

    Displayed separated by `:`.
    >>> str(Credential('username', 'password'))
    'username:password'
    r€   ÚusernameÚpasswordr¢   c                ó$   — | j         › d| j        › �S )Nr‹  )rå  ræ  r–   s    r)   Ú__str__zCredential.__str__  s   € Ø”-Ð1Ð1 $¤-Ð1Ð1Ð1r6   N)r¢   r€   )rœ   r�   rž   rŸ   Ú__annotations__rè  r�   r6   r)   rä  rä    sH   € € € € € € ðð ð €M€M�MØ€M€M�Mð2ð 2ð 2ð 2ð 2ð 2r6   rä  c                  ó@   ‡ — e Zd Zˆ fd„Zed„ ¦   «         Zd„ Zd„ Zˆ xZS )Ú
PyPIConfigc                ó`  •— t                                g d¢d¦  «        }t          ¦   «                              |¦  «         t          j                             t          j                             d¦  «        d¦  «        }t          j                             |¦  «        rt          | |¦  «         dS dS )z%
        Load from ~/.pypirc
        )rå  ræ  Ú
repositoryr×   ú~z.pypircN)
r©  ÚfromkeysrÂ   rª   ra   rE   ro   Ú
expanduserrõ   r   )r’   ÚdefaultsÚrcrÎ   s      €r)   rª   zPyPIConfig.__init__  s’   ø€ õ —=’=Ð!GÐ!GÐ!GÈÑLÔLˆÝ‰Œ×Ò˜Ñ"Ô"Ð"åŒW�\Š\�"œ'×,Ò,¨SÑ1Ô1°9Ñ=Ô=ˆÝŒ7�>Š>˜"ÑÔð 	3Ý(¨¨rÑ2Ô2Ð2Ð2Ð2ð	3ð 	3r6   c                óˆ   ‡ — ˆ fd„‰                       ¦   «         D ¦   «         }t          t          ‰ j        |¦  «        ¦  «        S )Nc                ód   •— g | ],}‰                      |d ¦  «                             ¦   «         ¯*|‘Œ-S )rí  )rç   r�   )rg   Úsectionr’   s     €r)   r^  z2PyPIConfig.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_repositoryzPyPIConfig.creds_by_repository'  sR   ø€ ð&
ð &
ð &
ð &
àŸ=š=™?œ?ð&
ñ &
ô &
Ð"õ •C˜Ô+Ð-GÑHÔHÑIÔIÐIr6   c                ó  — |                       |d¦  «                             ¦   «         }|t          |                       |d¦  «                             ¦   «         |                       |d¦  «                             ¦   «         ¦  «        fS )Nrí  rå  ræ  )rç   r�   rä  )r’   rõ  Úrepos      r)   r÷  zPyPIConfig._get_repo_cred1  st   € Ø�xŠx˜ Ñ.Ô.×4Ò4Ñ6Ô6ˆØ•ZØ�HŠH�W˜jÑ)Ô)×/Ò/Ñ1Ô1Ø�HŠH�W˜jÑ)Ô)×/Ò/Ñ1Ô1ñ
ô 
ð 
ð 	
r6   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ù  Úitemsr1   )r’   rA   rí  Úcreds       r)   Úfind_credentialzPyPIConfig.find_credential8  sN   € ð
 !%Ô 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ð
ð 
ð 
ðð ð ð ð ð ð r6   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: '')r  Úhttpsr  z*Authenticating as %s for %s (from .pypirc)zBasic ÚAuthorizationz
User-Agent)r=   r%   r>   r0   r  r€  r�  Ú
_splituserrë  rÿ  r€   rå  r   rá   râ  Ú
urlunparserÈ   ÚRequestÚ
add_headerÚ
user_agentrA   )rA   rÊ   ÚparsedrG  ÚnetlocrE   ÚparamsÚqueryr%  rÝ  Úaddressrþ  rá   rB   r$  rÈ   rr  Ús2Úh2Úpath2Úparam2Úquery2Úfrag2s                          r)   r~  r~  C  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à€Ir6   c                óD   — |                       d¦  «        \  }}} |r|nd| fS )zNsplituser('user[:passwd]@host[:port]')
    --> 'user[:passwd]', 'host[:port]'.r¶  N)r·  )ÚhostÚuserÚdelims      r)   r  r  s  s0   € ð Ÿš¨Ñ,Ô,Ñ€Dˆ%�ØÐ#ˆDˆD˜t dÐ*Ð*r6   c                ó   — | S rr   r�   )rA   s    r)   Ú
fix_sf_urlr  ~  s   € Ø€Jr6   c                óv  — t           j                             | ¦  «        \  }}}}}}t           j                             |¦  «        }t
          j                             |¦  «        rt           j                             | ¦  «        S | 	                    d¦  «        rát
          j         
                    |¦  «        rÂg }t          j        |¦  «        D ]y}	t
          j                             ||	¦  «        }
|	dk    rt          |
¦  «        } nmt
          j         
                    |
¦  «        r|	dz  }	|                     d|	› d|	› d�¦  «         Œzd}|                     | d                     |¦  «        ¬¦  «        }d	\  }}nd
\  }}}ddi}t!          j        |¦  «        }t           j                             | ||||¦  «        S )z7Read a local path, with special support for directoriesr8   z
index.htmlz	<a href="z">z</a>zB<html><head><title>{url}</title></head><body>{files}</body></html>rØ  )rA   Úfiles)éÈ   ÚOK)rÛ   zPath not foundz	Not foundrÖ   z	text/html)r=   r%   r>   rÈ   r¯  ra   rE   ÚisfilerÉ   r0   r÷   rù   ro   r   r<  r  ÚioÚStringIOrä   rå   )rA   rC   Ú_serverrE   Ú_paramrG   Ú_fragrb   r  rñ   ÚfilepathÚbodyrð   ÚstatusÚmessageræ   Úbody_streams                    r)   r}  r}  ‚  sŸ  € å4:´L×4IÒ4IÈ#Ñ4NÔ4NÑ1€GˆW�d˜F F¨EÝŒ~×*Ò*¨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Ð1 QÐ1Ð1¨!Ð1Ð1Ð1Ñ2Ô2Ð2Ð2àWˆDØ—;’; 3¨d¯iªi¸Ñ.>Ô.>�;Ñ?Ô?ˆDØ#‰ˆ��à BÑˆ�˜à˜{Ð+€GÝ”+˜dÑ#Ô#€KÝŒ<×!Ò! # v¨w¸ÀÑMÔMÐMr6   rr   )r"   )brŸ   Ú
__future__r   rÚ  Úconfigparserr¦   rÕ   Úhttp.clientr  r  r  ra   rf   rc  rÐ  r§  ÚsysÚurllib.errorr=   Úurllib.parseÚurllib.requestÚfnmatchr   Ú	functoolsr   Útypingr   Úmore_itertoolsr	   Ú
setuptoolsÚpkg_resourcesr
   r   r   r   r   r   r   r   r   r   r   r   r   r   Úsetuptools.wheelr   Úunicode_utilsr   r   Ú	distutilsr   Údistutils.errorsr   r·   rM   ÚIr‚   r"  rN   rÜ   r@   rY   Ú__all__Ú_SOCKET_TIMEOUTÚ__version__Úversion_infoÚmajorÚminorr  r*   r    rI   r   rL   rc   r!   rw   r{   rŒ   rŽ   r¡   r   r#  rË  rÉ  r„   rÖ  râ  rä  ÚRawConfigParserrë  rÈ   rÉ   r~  r  r  r}  r�   r6   r)   ú<module>rB     s7  ðØ *Ð *à "Ð "Ð "Ð "Ð "Ð "à €€€Ø Ð Ð Ð Ø €€€Ø €€€Ø Ð Ð Ð Ø 	€	€	€	Ø Ð Ð Ð Ø 	€	€	€	Ø 	€	€	€	Ø €€€Ø €€€Ø Ð Ð Ð Ø 
€
€
€
Ø Ð Ð Ð Ø Ð Ð Ð Ø Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð à *Ð *Ð *Ð *Ð *Ð *à Ð Ð Ð ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð  #Ð "Ð "Ð "Ð "Ð "à 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€
ðð ð €ð €às˜:Ô1ÐsÐsÀ#ÔBRÔBXÐsÐsÐ[^Ô[kÔ[qÐsÐs€
ðð ð ðð ð ð0ð ð ð	ð 	ð 	ð 	ð ð  ð  ð  ðFð ð ð ð .2¸kÐTXðð ð ð ðD
ð 
ð 
ð €b„jÐKÈRÌTÑRÔR€ðð
 ðLð Lñ „ðLð$ð ð ð ð ñ ô ð ð2ð ð ð ð �.ñ ô ð ðBb
ð 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ð Nr6   