Ë
    ”U.jz ã                   ó(  — d dl Z d dlmZ d dlZd dl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m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)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/  e
j`                  e1«      Z2 ejf                  d«      Z4 ejf                  d«      Z5 ejf                  d	«      Z6 ejf                  d
«      Z7 ejf                  d«      Z8 ejf                  d«      Z9 ejf                  d«      Z: ejf                  d«      Z;d„ Z<d„ Z=d„ Z>d„ Z?d„ Z@did„ZAd„ ZBd„ ZCd„ ZDejŠ                  d„ «       ZFejŠ                  d„ «       ZGejŠ                  djd„«       ZH G d„ deI«      ZJd„ ZK G d„ deI«      ZLd „ ZM G d!„ d"eI«      ZN ejf                  d#ejž                  «      ZPd$„ ZQdkd%„ZRdld&„ZSd'„ ZTd(„ ZUd)„ ZVd*„ ZW ejf                  d+ej°                  «      ZY ejf                  d,«      ZZdkd-„Z[ ejf                  d.«      Z\d/„ Z]d0„ Z^d1„ Z_d2Z`d3„ Zad4„ Zb G d5„ d6eI«      Zc G d7„ d8eI«      Zd G d9„ d:eI«      Zed;Zfdmd<„Zgd=„ Zhd>Zi G d?„ d@eI«      Zj ejf                  dA«      Zk ejf                  dB«      Zl ejf                  dC«      ZmdD„ ZdE„ Zner6ddFlmoZpmqZqmrZr  G dG„ dHe$jæ                  «      Zs G dI„ dJep«      Zo G dK„ dLeoe&«      Zt G dM„ dNe%jê                  «      Zuer G dO„ dPe%jì                  «      Zv G dQ„ dRe%jî                  «      ZwdS„ Zx G dT„ dUeI«      Zy G dV„ dWey«      Zz G dX„ dYey«      Z{ G dZ„ d[e'«      Z| G d\„ d]eI«      Z}d^„ Z~ G d_„ d`eI«      Zda„ Z€db„ Z�dc„ Z‚dddedfdgœZƒdh„ Z„y# e$ r dZY �ŒFw xY w# e$ r d dlZY �Œ=w xY w)né    N)Údeque)Úiglobé   )ÚDistlibException)Ústring_typesÚ	text_typeÚshutilÚ	raw_inputÚStringIOÚcache_from_sourceÚurlopenÚurljoinÚhttplibÚ	xmlrpclibÚHTTPHandlerÚBaseConfiguratorÚvalid_identÚ	ContainerÚconfigparserÚURLErrorÚZipFileÚfsdecodeÚunquoteÚurlparsez^([\w\.-]+)\s*z^([\w\.*+-]+)\s*z^(<=?|>=?|={2,3}|[~!]=)\s*z*^((<=?)|(>=?)|={2,3}|[~!]=|in|not\s+in)\s*z^or\b\s*z	^and\b\s*z(\S+)\s*z(([\s\w\.{}()*+#:;,/?!~`@$%^&=|<>\[\]-]+)c                 ó@   ‡‡‡‡— d„ Šˆˆfd„Šˆfd„Šˆfd„Š ‰| «      S )ae  
    Parse a marker string and return a dictionary containing a marker expression.

    The dictionary will contain keys "op", "lhs" and "rhs" for non-terminals in
    the expression grammar, or strings. A string contained in quotes is to be
    interpreted as a literal string, and a string not contained in quotes is a
    variable (such as os_name).
    c                 ó¾  — t         j                  | «      }|r*|j                  «       d   }| |j                  «       d  } || fS | st	        d«      ‚| d   }|dvrt	        d| z  «      ‚dj                  |d«      }| dd  } |g}| r…| d   |k(  rn›| d   |k(  r|j                  |«       | dd  } nZt        j                  | «      }|st	        d| z  «      ‚|j                  |j                  «       d   «       | |j                  «       d  } | rŒ…dj                  |«      }t	        d|z  «      ‚|j                  |«       dj                  |«      }| dd  j                  «       } || fS )	Nr   zunexpected end of inputz'"zinvalid expression: %sÚ r   zerror in string literal: %szunterminated string: %s)
Ú
IDENTIFIERÚmatchÚgroupsÚendÚSyntaxErrorÚreplaceÚappendÚSTRING_CHUNKÚjoinÚlstrip)Ú	remainingÚmÚresultÚqÚoqÚpartsÚss          úZC:\xampp\htdocs\tradingbinance\backend\.venv\Lib\site-packages\pip/_vendor/distlib/util.pyÚ
marker_varz parse_marker.<locals>.marker_var@   st  € ä×Ñ˜YÓ'ˆÙØ—X‘X“Z ‘]ˆFØ! !§%¡%£' (Ð+ˆIð: �yÐ Ð ñ9 ÜÐ7Ó8Ð8à˜!‘ˆAØ˜‰~Ü!Ð":¸YÑ"FÓGÐGØ—‘˜q "Ó%ˆBØ! ! "˜ˆIØ�CˆEÙà˜Q‘< 1Ò$ØØ˜q‘\ RÒ'Ø—L‘L Ô$Ø )¨!¨" ‘Iä$×*Ñ*¨9Ó5�AÙÜ)Ð*GÈ)Ñ*SÓTÐTØ—L‘L §¡£¨A¡Ô/Ø )¨!¯%©%«'¨(Ð 3�Iò ð —G‘G˜E“N�Ü!Ð";¸aÑ"?Ó@Ð@Ø�L‰L˜ŒOØ—W‘W˜U“^ˆFØ! ! "˜×,Ñ,Ó.ˆIØ�yÐ Ð ó    c                 ót  •— | rQ| d   dk(  rI ‰| dd  j                  «       «      \  }} | d   dk7  rt        d| z  «      ‚| dd  j                  «       } || fS  ‰| «      \  }} | rRt        j                  | «      }|sn:|j	                  «       d   }| |j                  «       d  }  ‰| «      \  }} |||dœ}| rŒR|}|| fS )Nr   Ú(r   Ú)úunterminated parenthesis: %s©ÚopÚlhsÚrhs)r'   r"   Ú	MARKER_OPr   r    r!   )r(   r*   r8   r)   r7   r9   Úmarkerr0   s         €€r/   Úmarker_exprz!parse_marker.<locals>.marker_exprd   sæ   ø€ Ù˜ 1™¨Ò,Ù & y°° }×';Ñ';Ó'=Ó >ÑˆF�IØ˜‰|˜sÒ"Ü!Ð"@À9Ñ"LÓMÐMØ! ! "˜×,Ñ,Ó.ˆIð �yÐ Ð ñ (¨	Ó2‰NˆC�ÙÜ—O‘O IÓ.�ÙØØ—X‘X“Z ‘]�Ø% a§e¡e£g hÐ/�	Ù!+¨IÓ!6‘��YØ¨°CÑ8�ò ð ˆFØ�yÐ Ð r1   c                 ó¬   •—  ‰| «      \  }} | rCt         j                  | «      }|s	 || fS | |j                  «       d  }  ‰| «      \  }} d||dœ}| rŒC|| fS )NÚandr6   )ÚANDr   r!   )r(   r8   r)   r9   r<   s       €r/   Ú
marker_andz parse_marker.<locals>.marker_andw   ss   ø€ Ù$ YÓ/‰ˆˆYÙÜ—	‘	˜)Ó$ˆAÙØð �Iˆ~Ðð " !§%¡%£' (Ð+ˆIÙ(¨Ó3‰NˆC�Ø s°3Ñ7ˆCò ð �Iˆ~Ðr1   c                 ó¬   •—  ‰| «      \  }} | rCt         j                  | «      }|s	 || fS | |j                  «       d  }  ‰| «      \  }} d||dœ}| rŒC|| fS )NÚorr6   )ÚORr   r!   )r(   r8   r)   r9   r@   s       €r/   r;   zparse_marker.<locals>.marker‚   ss   ø€ Ù# IÓ.‰ˆˆYÙÜ—‘˜Ó#ˆAÙØð �Iˆ~Ðð " !§%¡%£' (Ð+ˆIÙ'¨	Ó2‰NˆC�Ø c°#Ñ6ˆCò ð �Iˆ~Ðr1   © )Úmarker_stringr;   r@   r<   r0   s    @@@@r/   Úparse_markerrF   6   s%   û€ ò"!õH!ô&	ô	ñ �-Ó Ð r1   c           	      óê  — | j                  «       }|r|j                  d«      ryt        j                  |«      }|st	        d|z  «      ‚|j                  «       d   }||j                  «       d }dx}x}x}}|rÙ|d   dk(  rÑ|j                  dd«      }|dk  rt	        d|z  «      ‚|d| }	||dz   d j                  «       }g }|	r‰t        j                  |	«      }|st	        d	|	z  «      ‚|j                  |j                  «       d   «       |	|j                  «       d }	|	sn,|	d   d
k7  rt	        d|	z  «      ‚|	dd j                  «       }	|	rŒ‰|sd}|�rŒ|d   dk(  rž|dd j                  «       }t        j                  |«      }|st	        d|z  «      ‚|j                  «       d   }t        |«      }
|
j                  r|
j                  st	        d|z  «      ‚||j                  «       d j                  «       }næd„ }|d   dk7  r ||«      \  }}nÏ|j                  dd«      }|dk  rt	        d|z  «      ‚|d| }	||dz   d j                  «       }t        j                  |	«      r ||	«      \  }}nnt        j                  |	«      }|st	        d|	z  «      ‚|j                  «       d   }|	|j                  «       d j                  «       }	|	rt	        d|	z  «      ‚d|fg}|r7|d   dk7  rt	        d|z  «      ‚|dd j                  «       }t!        |«      \  }}|r|d   dk7  rt	        d|z  «      ‚|s|}n'|›ddj#                  |D �cg c]  }d|z  ‘Œ	 c}«      ›�}t%        ||||||¬«      S c c}w )zŠ
    Parse a requirement passed in as a string. Return a Container
    whose attributes contain the various parts of the requirement.
    Ú#Nzname expected: %sr   Ú[Ú]r   zunterminated extra: %szmalformed extra: %sÚ,zcomma expected in extras: %sÚ@zinvalid URI: %szInvalid URL: %sc                 óà  — t         j                  | «      }d}|rÒg }	 |j                  «       d   }| |j                  «       d } t        j                  | «      }|st        d| z  «      ‚|j                  «       d   }|j                  ||f«       | |j                  «       d } | r| d   dk7  rn<| dd j                  «       } | sn&t         j                  | «      }|st        d| z  «      ‚ŒË|sd}|| fS )z|
                Return a list of operator, version tuples if any are
                specified, else None.
                Nr   zinvalid version: %srK   r   úinvalid constraint: %s)Ú
COMPARE_OPr   r    r!   ÚVERSION_IDENTIFIERr"   r$   r'   )Úver_remainingr)   Úversionsr7   Úvs        r/   Úget_versionsz'parse_requirement.<locals>.get_versionsÄ   s  € ô
 ×$Ñ$ ]Ó3�Ø�ÙØ!�HØØŸX™X›Z¨™]˜Ø(5°a·e±e³g°hÐ(?˜Ü.×4Ñ4°]ÓC˜Ù Ü"-Ð.CÀmÑ.SÓ"TÐTØŸH™H›J q™M˜Ø Ÿ™¨¨Q¨Ô0Ø(5°a·e±e³g°hÐ(?˜Ù,°¸aÑ0@ÀCÒ0GØ!Ø(5°a°bÐ(9×(@Ñ(@Ó(B˜ñ  -Ø!Ü&×,Ñ,¨]Ó;˜Ù Ü"-Ð.FÈÑ.VÓ"WÐWð% ñ& $Ø#'˜Ø Ð.Ð.r1   r3   r4   r5   rN   z~=Ú;zinvalid requirement: %szunexpected trailing data: %sÚ ú, z%s %s)ÚnameÚextrasÚconstraintsr;   ÚurlÚrequirement)ÚstripÚ
startswithr   r   r"   r    r!   Úfindr'   r$   Ú	NON_SPACEr   ÚschemeÚnetlocrO   rP   rF   r&   r   )Úreqr(   r)   ÚdistnamerY   Ú	mark_exprrR   ÚuriÚir.   ÚtrT   Ú_rS   ÚrsÚcons                   r/   Úparse_requirementrl   �   s¨  € ð
 —	‘	“€IÙ˜	×,Ñ,¨SÔ1ØÜ×Ñ˜Ó#€AÙÜÐ-°	Ñ9Ó:Ð:Ø�x‰x‹z˜!‰}€HØ˜!Ÿ%™%›'˜(Ð#€IØ*.Ð.€FÐ.ˆYÐ.˜ CÙ�Y˜q‘\ SÒ(Ø�N‰N˜3 Ó"ˆØˆqŠ5ÜÐ6¸ÑBÓCÐCØ�a˜ˆNˆØ˜a !™e˜fÐ%×,Ñ,Ó.ˆ	ØˆÙÜ× Ñ  Ó#ˆAÙÜ!Ð"7¸!Ñ";Ó<Ð<Ø�M‰M˜!Ÿ(™(›* Q™-Ô(Ø�!—%‘%“'�(�ˆAÙØØ�‰t�sŠ{Ü!Ð"@À1Ñ"DÓEÐEØ�!�"�—‘“ˆAò ñ ØˆFÚØ�Q‰<˜3Òà! ! "˜×,Ñ,Ó.ˆIÜ—‘ 	Ó*ˆAÙÜ!Ð"3°iÑ"?Ó@Ð@Ø—(‘(“*˜Q‘-ˆCÜ˜“ˆAð
 —H’H §¢Ü!Ð"3°cÑ"9Ó:Ð:Ø! !§%¡%£' (Ð+×2Ñ2Ó4‰Iò/ð@ ˜‰|˜sÒ"Ù&2°9Ó&=Ñ#�™)à—N‘N 3¨Ó*�Ø�q’5Ü%Ð&DÀyÑ&PÓQÐQØ˜a �N�Ø% a¨!¡e fÐ-×4Ñ4Ó6�	ô ×#Ñ# AÔ&Ù".¨q£/‘K�H™aä*×0Ñ0°Ó3�AÙÜ)Ð*BÀQÑ*FÓGÐGØŸ™›
 1™�AØ˜!Ÿ%™%›'˜(˜×*Ñ*Ó,�AÙÜ)Ð*BÀQÑ*FÓGÐGØ!% q 	˜{�HáØ�Q‰<˜3ÒÜÐ7¸)ÑCÓDÐDØ˜a˜b�M×(Ñ(Ó*ˆ	ä+¨IÓ6Ñˆ	�9á�Y˜q‘\ SÒ(ÜÐ8¸9ÑDÓEÐEáØ‰â  $§)¡)ÁhÓ,OÁh¸s¨W°s«]ÀhÑ,OÔ"PÐQˆÜ˜(¨6¸xÐPYÐ_bÐprÔsÐsùò -Ps   Í
M0c                 ó¼  — d„ }i }|D ]Ñ  \  }}}t         j                  j                  | |«      }t        |«      D ]�  }t         j                  j                  ||«      }	t        |	«      D ]m  }
 || |
«      }|€|j	                  |d«       Œ! |||
«      }|j                  t         j                  j                  d«      j                  d«      }|dz   |z   ||<   Œo ŒŸ ŒÓ |S )z%Find destinations for resources filesc                 ó
  — | j                  t        j                  j                  d«      } |j                  t        j                  j                  d«      }|j	                  | «      sJ ‚|t        | «      d  j                  d«      S ©NÚ/)r#   ÚosÚpathÚsepr^   Úlenr'   )Úrootrr   s     r/   Úget_rel_pathz)get_resources_dests.<locals>.get_rel_path  s`   € à�|‰|œBŸG™GŸK™K¨Ó-ˆØ�|‰|œBŸG™GŸK™K¨Ó-ˆØ�‰˜tÔ$Ð$Ð$Ø”C˜“I�JÐ×&Ñ& sÓ+Ð+r1   Nrp   )rq   rr   r&   r   Úpopr#   rs   Úrstrip)Úresources_rootÚrulesrv   ÚdestinationsÚbaseÚsuffixÚdestÚprefixÚabs_baseÚabs_globÚabs_pathÚresource_fileÚrel_pathÚrel_dests                 r/   Úget_resources_destsr†     sÎ   € ò,ð €LÛ#Ñˆˆf�dÜ—‘—‘˜n¨dÓ3ˆÜ˜fžˆHÜ—w‘w—|‘| H¨fÓ5ˆHÜ! (žO�Ù ,¨^¸XÓ F�Ø�<Ø ×$Ñ$ ]°DÕ9á+¨H°hÓ?�HØ#Ÿ|™|¬B¯G©G¯K©K¸Ó=×DÑDÀSÓI�HØ2:¸S±.À8Ñ2K�L Ò/ñ ,ñ &ð $ð Ðr1   c                  óŽ   — t        t        d«      rd} | S t        j                  t        t        dt        j                  «      k7  } | S )NÚreal_prefixTÚbase_prefix)ÚhasattrÚsysr   Úgetattr©r*   s    r/   Úin_venvrŽ   &  s:   € ÜŒs�MÔ"àˆð €Mô —‘œw¤s¨M¼3¿:¹:ÓFÑFˆØ€Mr1   c                  ó\   — t         j                  } t        | t        «      st	        | «      } | S ©N)r‹   Ú
executableÚ
isinstancer   r   r�   s    r/   Úget_executabler“   0  s&   € ô �^‰^€FÜ�fœiÔ(Ü˜&Ó!ˆØ€Mr1   c                 ó|   — | }	 t        |«      }| }|s|r|}|r$|d   j                  «       }||v r	 |S |rd||| fz  }Œ:)Nr   z	%c: %s
%s)r
   Úlower)ÚpromptÚallowed_charsÚerror_promptÚdefaultÚpr.   Úcs          r/   Úproceedrœ   B  sa   € Ø€AØ
Ü�a‹LˆØˆÙ‘WØˆAÙØ�!‘—
‘
“ˆAØ�MÑ!Øð €Hñ Ø  A |°VÐ#<Ñ<�ð r1   c                 ór   — t        |t        «      r|j                  «       }i }|D ]  }|| v sŒ| |   ||<   Œ |S r�   )r’   r   Úsplit)ÚdÚkeysr*   Úkeys       r/   Úextract_by_keyr¢   R  sA   € Ü�$œÔ%Ø�z‰z‹|ˆØ€FÛˆØ�!Š8Ø˜C™&ˆF�3ŠKð ð €Mr1   c                 óH  — t         j                  d   dk\  r t        j                  d«      | «      } | j	                  «       }t        |«      } 	 t        j                  | «      }|d   d   d   }|j                  «       D ]8  \  }}|j                  «       D ]   \  }}|›d|›�}t        |«      }	|	€J ‚|	||<   Œ" Œ: |S # t        $ r | j                  dd«       Y nw xY wd„ }
t        j                  «       }	  |
|| «       nR# t        j                  $ r< | j                  «        t!        j"                  |«      }t        |«      }  |
|| «       Y nw xY wi }|j%                  «       D ]=  }i x||<   }|j                  |«      D ]   \  }}|›d|›�}t        |«      }	|	€J ‚|	||<   Œ" Œ? |S )	Nr   é   úutf-8Ú
extensionszpython.exportsÚexportsú = c                 ób   — t        | d«      r| j                  |«       y | j                  |«       y )NÚ	read_file)rŠ   rª   Úreadfp)ÚcpÚstreams     r/   Úread_streamz!read_exports.<locals>.read_streamp  s$   € Ü�2�{Ô#Ø�L‰L˜Õ à�I‰I�fÕr1   )r‹   Úversion_infoÚcodecsÚ	getreaderÚreadr   ÚjsonÚloadÚitemsÚget_export_entryÚ	ExceptionÚseekr   ÚConfigParserÚMissingSectionHeaderErrorÚcloseÚtextwrapÚdedentÚsections)r­   ÚdataÚjdatar*   ÚgroupÚentriesÚkrS   r.   Úentryr®   r¬   r¡   rX   Úvalues                  r/   Úread_exportsrÆ   \  s«  € Ü
×Ñ˜Ñ˜aÒà*”×!Ñ! 'Ó*¨6Ó2ˆà�;‰;‹=€DÜ�d‹^€FðÜ—	‘	˜&Ó!ˆØ�|Ñ$Ð%5Ñ6°yÑAˆØ$Ÿl™lžn‰NˆE�7ØŸ™ž‘��1Ú!"¡AÐ&�Ü(¨Ó+�ØÐ(Ð(Ð(Ø"�˜’
ñ	 (ð -ð ˆøÜò Ø�‰�A�qÖðúòô 
×	"Ñ	"Ó	$€Bð Ù�B˜ÕøÜ×1Ñ1ò  Ø�‰ŒÜ�‰˜tÓ$ˆÜ˜$“ˆÙ�B˜Öð	 úð €FØ�{‰{Ž}ˆØ "Ð"ˆˆs‰�gØŸ8™8 Cž=‰KˆD�%Ú!¡5Ð)ˆAÜ$ QÓ'ˆEØÐ$Ð$Ð$à!ˆG�DŠMñ )ð ð €Ms&   ÁA,B; Â;CÃCÃ4	C> Ã>AEÅEc                 ó(  — t         j                  d   dk\  r t        j                  d«      |«      }t	        j
                  «       }| j                  «       D ]©  \  }}|j                  |«       |j                  «       D ]€  }|j                  €|j                  }n|j                  ›d|j                  ›�}|j                  r!|›ddj                  |j                  «      ›d�}|j                  ||j                  |«       Œ‚ Œ« |j                  |«       y )Nr   r¤   r¥   Ú:z [rW   rJ   )r‹   r¯   r°   Ú	getwriterr   r¹   rµ   Úadd_sectionÚvaluesr}   r   Úflagsr&   ÚsetrX   Úwrite)r§   r­   r¬   rÃ   rS   rÄ   r.   s          r/   Úwrite_exportsrÏ   ‹  sÏ   € Ü
×Ñ˜Ñ˜aÒà*”×!Ñ! 'Ó*¨6Ó2ˆÜ	×	"Ñ	"Ó	$€BØ—‘–‰ˆˆ1à
�‰�qÔØ—X‘X–ZˆEØ�|‰|Ð#Ø—L‘L‘à$Ÿ|›|¨U¯\ª\Ð:�Ø�{Š{Ú!" D§I¡I¨e¯k©kÕ$:Ð;�Ø�F‰F�1�e—j‘j !Õ$ñ  ð  ð ‡H�HˆVÕr1   c               #   óœ   K  — t        j                  «       } 	 | –— t        j                  | «       y # t        j                  | «       w xY w­wr�   )ÚtempfileÚmkdtempr	   Úrmtree)Útds    r/   ÚtempdirrÕ   ž  s6   è ø€ ä	×	Ñ	Ó	€BðØŠä�‰�bÕøŒ�‰�bÕüs   ‚A˜2 œA²A	Á	Ac              #   óÆ   K  — t        j                  «       }	 t        j                  | «       d –— t        j                  |«       y # t        j                  |«       w xY w­wr�   )rq   ÚgetcwdÚchdir)rŸ   Úcwds     r/   rØ   rØ   §  s:   è ø€ ä
�)‰)‹+€CðÜ
�‰�ŒÛä
�‰��øŒ�‰��üó   ‚A!˜A ±A!ÁAÁA!c              #   óÆ   K  — t        j                  «       }	 t        j                  | «       d –— t        j                  |«       y # t        j                  |«       w xY w­wr�   )ÚsocketÚgetdefaulttimeoutÚsetdefaulttimeout)ÚsecondsÚctos     r/   Úsocket_timeoutrá   ±  sF   è ø€ ä
×
"Ñ
"Ó
$€Cð&Ü× Ñ  Ô)Ûä× Ñ  Õ%øŒ× Ñ  Õ%ürÚ   c                   ó   — e Zd Zd„ Zdd„Zy)Úcached_propertyc                 ó   — || _         y r�   )Úfunc)Úselfrå   s     r/   Ú__init__zcached_property.__init__½  s	   € Øˆ�	r1   Nc                 ó†   — |€| S | j                  |«      }t        j                  || j                   j                  |«       |S r�   )rå   ÚobjectÚ__setattr__Ú__name__)ræ   ÚobjÚclsrÅ   s       r/   Ú__get__zcached_property.__get__Â  s:   € Øˆ;ØˆKØ—	‘	˜#“ˆÜ×Ñ˜3 §	¡	× 2Ñ 2°EÔ:àˆr1   r�   )rë   Ú
__module__Ú__qualname__rç   rî   rD   r1   r/   rã   rã   »  s   „ òô
r1   rã   c                 ó’  — t         j                  dk(  r| S | s| S | d   dk(  rt        d| z  «      ‚| d   dk(  rt        d| z  «      ‚| j                  d«      }t         j                  |v r2|j                  t         j                  «       t         j                  |v rŒ2|st         j                  S t        j                  j                  |Ž S )aÐ  Return 'pathname' as a name that will work on the native filesystem.

    The path is split on '/' and put back together again using the current
    directory separator.  Needed because filenames in the setup script are
    always supplied in Unix style, and have to be converted to the local
    convention before we can actually use them in the filesystem.  Raises
    ValueError on non-Unix-ish systems if 'pathname' either starts or
    ends with a slash.
    rp   r   zpath '%s' cannot be absoluteéÿÿÿÿzpath '%s' cannot end with '/')rq   rs   Ú
ValueErrorrž   ÚcurdirÚremoverr   r&   )ÚpathnameÚpathss     r/   Úconvert_pathrø   Ë  s®   € ô 
‡v�v�‚}ØˆÙØˆØ��{�cÒÜÐ7¸(ÑBÓCÐCØ��|�sÒÜÐ8¸8ÑCÓDÐDà�N‰N˜3Ó€EÜ
�)‰)�uÑ
Ø�‰”R—Y‘YÔô �)‰)�uÒ
áÜ�y‰yÐÜ�7‰7�<‰<˜ÐÐr1   c                   ót   — e Zd Zdd„Zd„ Zd„ Zd„ Zdd„Zdd„Zd„ Z	d	„ Z
d
„ Zd„ Zd„ Zdd„Zd„ Zd„ Zd„ Zd„ Zy)ÚFileOperatorc                 óP   — || _         t        «       | _        | j                  «        y r�   )Údry_runrÍ   ÚensuredÚ_init_record)ræ   rü   s     r/   rç   zFileOperator.__init__è  s   € ØˆŒÜ“uˆŒØ×ÑÕr1   c                 óN   — d| _         t        «       | _        t        «       | _        y ©NF)ÚrecordrÍ   Úfiles_writtenÚdirs_created©ræ   s    r/   rþ   zFileOperator._init_recordí  s   € ØˆŒÜ ›UˆÔÜ›EˆÕr1   c                 óT   — | j                   r| j                  j                  |«       y y r�   )r  r  Úadd)ræ   rr   s     r/   Úrecord_as_writtenzFileOperator.record_as_writtenò  s"   € Ø�;Š;Ø×Ñ×"Ñ" 4Õ(ð r1   c                 óT  — t         j                  j                  |«      s+t        dt         j                  j	                  |«      z  «      ‚t         j                  j                  |«      syt        j
                  |«      j                  t        j
                  |«      j                  kD  S )aÎ  Tell if the target is newer than the source.

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

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

        Note that this test is not very accurate: files created in the same
        second will have the same "age".
        zfile '%r' does not existT)rq   rr   Úexistsr   ÚabspathÚstatÚst_mtime)ræ   ÚsourceÚtargets      r/   ÚnewerzFileOperator.newerö  sm   € ô �w‰w�~‰~˜fÔ%Ü"Ð#=ÄÇÁÇÁÐPVÓ@WÑ#WÓXÐXÜ�w‰w�~‰~˜fÔ%Øä�w‰w�v‹×'Ñ'¬"¯'©'°&«/×*BÑ*BÑBÐBr1   c                 óì  — | j                  t        j                  j                  |«      «       t        j                  d||«       | j                  s’d}|rht        j                  j                  |«      rd|z  }nCt        j                  j                  |«      r$t        j                  j                  |«      sd|z  }|rt        |dz   «      ‚t        j                  ||«       | j                  |«       y)z8Copy a file respecting dry-run and force flags.
        zCopying %s to %sNz%s is a symlinkz%s is a non-regular filez which would be overwritten)Ú
ensure_dirrq   rr   ÚdirnameÚloggerÚinforü   Úislinkr	  Úisfileró   r	   Úcopyfiler  )ræ   ÚinfileÚoutfileÚcheckÚmsgs        r/   Ú	copy_filezFileOperator.copy_file	  s°   € ð 	�‰œŸ™Ÿ™¨Ó0Ô1Ü�‰Ð&¨°Ô8Ø�|Š|ØˆCÙÜ—7‘7—>‘> 'Ô*Ø+¨gÑ5‘CÜ—W‘W—^‘^ GÔ,´R·W±W·^±^ÀGÔ5LØ4°wÑ>�CÙÜ  Ð'DÑ!DÓEÐEÜ�O‰O˜F GÔ,Ø×Ñ˜wÕ'r1   Nc                 óÐ  — t         j                  j                  |«      rJ ‚| j                  t         j                  j	                  |«      «       t
        j                  d||«       | j                  sN|€t        |d«      }nt        j                  |d|¬«      }	 t        j                  ||«       |j                  «        | j                  |«       y # |j                  «        w xY w)NzCopying stream %s to %sÚwbÚw©Úencoding)rq   rr   Úisdirr  r  r  r  rü   Úopenr°   r	   Úcopyfileobjr»   r  )ræ   Úinstreamr  r!  Ú	outstreams        r/   Úcopy_streamzFileOperator.copy_stream  s¨   € Ü—7‘7—=‘= Ô)Ð)Ð)Ø�‰œŸ™Ÿ™¨Ó0Ô1Ü�‰Ð-¨x¸ÔAØ�|Š|ØÐÜ  ¨$Ó/‘	ä"ŸK™K¨°¸xÔH�	ð"Ü×"Ñ" 8¨YÔ7à—‘Ô!Ø×Ñ˜wÕ'øð —‘Õ!ús   ÂC ÃC%c                 óf  — | j                  t        j                  j                  |«      «       | j                  sZt        j                  j                  |«      rt        j                  |«       t        |d«      5 }|j                  |«       d d d «       | j                  |«       y # 1 sw Y   ŒxY w)Nr  )
r  rq   rr   r  rü   r	  rõ   r#  rÎ   r  )ræ   rr   r¿   Úfs       r/   Úwrite_binary_filezFileOperator.write_binary_file)  sp   € Ø�‰œŸ™Ÿ™¨Ó-Ô.Ø�|Š|Ü�w‰w�~‰~˜dÔ#Ü—	‘	˜$”Ü�d˜DÔ! QØ—‘˜”÷ "à×Ñ˜tÕ$÷ "Ð!ús   Á;B'Â'B0c                 óF   — | j                  ||j                  |«      «       y r�   )r*  Úencode)ræ   rr   r¿   r!  s       r/   Úwrite_text_filezFileOperator.write_text_file2  s   € Ø×Ñ˜t T§[¡[°Ó%:Õ;r1   c                 ór  — t         j                  dk(  s&t         j                  dk(  r‘t         j                  dk(  r}|D ]w  }| j                  rt        j                  d|«       Œ&t        j                  |«      j                  |z  |z  }t        j                  d||«       t        j                  ||«       Œy y y y )NÚposixÚjavazchanging mode of %szchanging mode of %s to %o)	rq   rX   Ú_namerü   r  r  r  Úst_modeÚchmod)ræ   ÚbitsÚmaskÚfilesr)  Úmodes         r/   Úset_modezFileOperator.set_mode5  s‹   € Ü�7‰7�gÒ¤"§'¡'¨VÒ"3¼¿¹ÀGÒ8Kó �Ø—<’<Ü—K‘KÐ 5°qÕ9äŸG™G A›J×.Ñ.°Ñ5¸Ñ=�DÜ—K‘KÐ ;¸QÀÔEÜ—H‘H˜Q Õ%ñ ð 9LÐ"3r1   c                 ó(   — | j                  dd|«      S )Nim  iÿ  )r8  )r.   r)  s     r/   Ú<lambda>zFileOperator.<lambda>A  s   €  q§z¡z°%¸ÀÔ'Cr1   c                 óþ  — t         j                  j                  |«      }|| j                  vrÐt         j                  j	                  |«      s°| j                  j                  |«       t         j                  j                  |«      \  }}| j                  |«       t        j                  d|z  «       | j                  st        j                  |«       | j                  r| j                  j                  |«       y y y y )NzCreating %s)rq   rr   r
  rý   r	  r  rž   r  r  r  rü   Úmkdirr  r  )ræ   rr   rŸ   r)  s       r/   r  zFileOperator.ensure_dirC  s¯   € Ü�w‰w�‰˜tÓ$ˆØ�t—|‘|Ñ#¬B¯G©G¯N©N¸4Ô,@Ø�L‰L×Ñ˜TÔ"Ü—7‘7—=‘= Ó&‰DˆAˆqØ�O‰O˜AÔÜ�K‰K˜¨Ñ,Ô-Ø—<’<Ü—‘˜”Ø�{Š{Ø×!Ñ!×%Ñ% dÕ+ð ð -AÐ#r1   c                 óÈ  — t        || «      }t        j                  d||«       | j                  s |s| j	                  ||«      r&|sd }n!|j                  |«      sJ ‚|t        |«      d  }i }|rIt        t        d«      r9t        |t        j                  «      st        j                  j                  }||d<   t        j                  ||dfi |¤Ž | j                  |«       |S )NzByte-compiling %s to %sÚPycInvalidationModeÚinvalidation_modeT)r   r  r  rü   r  r^   rt   rŠ   Ú
py_compiler’   r>  ÚCHECKED_HASHÚcompiler  )	ræ   rr   ÚoptimizeÚforcer   Úhashed_invalidationÚdpathÚdiagpathÚcompile_kwargss	            r/   Úbyte_compilezFileOperator.byte_compileO  sÎ   € Ü! $¨H¨Ó5ˆÜ�‰Ð-¨t°UÔ;Ø�|Š|Ù˜Ÿ
™
 4¨Ô/ÙØ#‘HàŸ?™?¨6Ô2Ð2Ð2Ø#¤C¨£K LÐ1�HØˆNÙ"¤w¬zÐ;PÔ'QÜ!Ð"5´z×7UÑ7UÔVÜ*4×*HÑ*H×*UÑ*UÐ'Ø6I�Ð2Ñ3Ü×Ñ˜t U¨H°dÑM¸nÒMØ×Ñ˜uÔ%Øˆr1   c                 óÆ  — t         j                  j                  |«      �rAt         j                  j                  |«      rŽt         j                  j	                  |«      sot
        j                  d|«       | j                  st        j                  |«       | j                  r+|| j                  v r| j                  j                  |«       y y y t         j                  j	                  |«      rd}nd}t
        j                  d||«       | j                  st        j                  |«       | j                  r+|| j                  v r| j                  j                  |«       y y y y )NzRemoving directory tree at %sÚlinkÚfilezRemoving %s %s)rq   rr   r	  r"  r  r  Údebugrü   r	   rÓ   r  r  rõ   r  )ræ   rr   r.   s      r/   Úensure_removedzFileOperator.ensure_removedb  sý   € Ü�7‰7�>‰>˜$ÕÜ�w‰w�}‰}˜TÔ"¬2¯7©7¯>©>¸$Ô+?Ü—‘Ð<¸dÔCØ—|’|Ü—M‘M $Ô'Ø—;’;Ø˜t×0Ñ0Ñ0Ø×)Ñ)×0Ñ0°Õ6ð 1ð ô —7‘7—>‘> $Ô'Ø‘Aà�AÜ—‘Ð-¨q°$Ô7Ø—|’|Ü—I‘I˜d”OØ—;’;Ø˜t×1Ñ1Ñ1Ø×*Ñ*×1Ñ1°$Õ7ð 2ð ð!  r1   c                 óò   — d}|srt         j                  j                  |«      r't        j                  |t         j                  «      }	 |S t         j                  j                  |«      }||k(  r	 |S |}|sŒr|S r   )rq   rr   r	  ÚaccessÚW_OKr  )ræ   rr   r*   Úparents       r/   Úis_writablezFileOperator.is_writablew  sn   € ØˆÙÜ�w‰w�~‰~˜dÔ#ÜŸ™ 4¬¯©Ó1�Øð
 ˆô	 —W‘W—_‘_ TÓ*ˆFØ˜Š~Øàˆð ˆDò ð ˆr1   c                 ór   — | j                   sJ ‚| j                  | j                  f}| j                  «        |S )zV
        Commit recorded changes, turn off recording, return
        changes.
        )r  r  r  rþ   )ræ   r*   s     r/   ÚcommitzFileOperator.commitƒ  s7   € ð
 �{Š{Ðˆ{Ø×#Ñ# T×%6Ñ%6Ð6ˆØ×ÑÔØˆr1   c                 óî  — | j                   sÙt        | j                  «      D ]7  }t        j                  j                  |«      sŒ#t        j                  |«       Œ9 t        | j                  d¬«      }|D ]n  }t        j                  |«      }|r@|dgk(  sJ ‚t        j                  j                  ||d   «      }t        j                  |«       t        j                  |«       Œp | j                  «        y )NT)ÚreverseÚ__pycache__r   )rü   Úlistr  rq   rr   r	  rõ   Úsortedr  Úlistdirr&   Úrmdirrþ   )ræ   r)  ÚdirsrŸ   ÚflistÚsds         r/   ÚrollbackzFileOperator.rollback�  s³   € Ø�|Š|Ü˜$×,Ñ,Ö-�Ü—7‘7—>‘> !Õ$Ü—I‘I˜a•Lð .ô ˜$×+Ñ+°TÔ:ˆDÛ�ÜŸ
™
 1›�ÙØ  ] OÒ3Ð3Ð3ÜŸ™Ÿ™ a¨¨q©Ó2�BÜ—H‘H˜R”LÜ—‘˜•ð ð 	×ÑÕr1   ©F©Tr�   )FFNF)rë   rï   rð   rç   rþ   r  r  r  r'  r*  r-  r8  Úset_executable_moder  rI  rN  rS  rU  r`  rD   r1   r/   rú   rú   æ  sW   „ óò
"ò
)òCó&(ó"(ò%ò<ò
&ñ DÐò
,óò&8ò*
òór1   rú   c                 óò   — | t         j                  v rt         j                  |    }nt        | «      }|€|}|S |j                  d«      }t	        ||j                  d«      «      }|D ]  }t	        ||«      }Œ |S )NÚ.r   )r‹   ÚmodulesÚ
__import__rž   rŒ   rw   )Úmodule_nameÚdotted_pathÚmodr*   r-   rš   s         r/   Úresolverk     sy   € Ø”c—k‘kÑ!Ü�k‰k˜+Ñ&‰ä˜Ó%ˆØÐØˆð €Mð	 ×!Ñ! #Ó&ˆÜ˜˜eŸi™i¨›lÓ+ˆÛˆAÜ˜V QÓ'‰Fð à€Mr1   c                   óF   — e Zd Zd„ Zed„ «       Zd„ Zd„ Zej                  Z	y)ÚExportEntryc                 ó<   — || _         || _        || _        || _        y r�   ©rX   r   r}   rÌ   )ræ   rX   r   r}   rÌ   s        r/   rç   zExportEntry.__init__±  s   € ØˆŒ	ØˆŒØˆŒØˆ�
r1   c                 óB   — t        | j                  | j                  «      S r�   )rk  r   r}   r  s    r/   rÅ   zExportEntry.value·  s   € ä�t—{‘{ D§K¡KÓ0Ð0r1   c           	      óp   — d| j                   ›d| j                  ›d| j                  ›d| j                  ›d�	S )Nz<ExportEntry r¨   rÈ   rV   Ú>ro  r  s    r/   Ú__repr__zExportEntry.__repr__»  s$   � Ø04·	³	¸4¿;»;ÈÏËÐUY×U_ÓU_Ð`Ð`r1   c                 ó  — t        |t        «      sd}|S | j                  |j                  k(  xrO | j                  |j                  k(  xr4 | j                  |j                  k(  xr | j
                  |j
                  k(  }|S r   )r’   rm  rX   r   r}   rÌ   )ræ   Úotherr*   s      r/   Ú__eq__zExportEntry.__eq__¾  sw   € Ü˜%¤Ô-ØˆFð ˆð —i‘i 5§:¡:Ñ-ò 0°$·+±+ÀÇÁÑ2Mò 0ÐRV×R]ÑR]Ðaf×amÑamÑRmò 0Ø—j‘j E§K¡KÑ/ð àˆr1   N)
rë   rï   rð   rç   rã   rÅ   rs  rv  ré   Ú__hash__rD   r1   r/   rm  rm  ¯  s1   „ òð ñ1ó ð1òaòð �‰�Hr1   rm  z·(?P<name>([^\[]\S*))
                      \s*=\s*(?P<callable>(\w+)([:\.]\w+)*)
                      \s*(\[\s*(?P<flags>[\w-]+(=\w+)?(,\s*\w+(=\w+)?)*)\s*\])?
                      c                 óÞ  — t         j                  | «      }|sd }d| v sd| v rt        d| z  «      ‚|S |j                  «       }|d   }|d   }|j	                  d«      }|dk(  r|d }}n'|dk7  rt        d| z  «      ‚|j                  d«      \  }}|d	   }	|	€d| v sd| v rt        d| z  «      ‚g }	n,|	j                  d
«      D �
cg c]  }
|
j                  «       ‘Œ }	}
t        ||||	«      }|S c c}
w )NrI   rJ   zInvalid specification '%s'rX   ÚcallablerÈ   r   r   rÌ   rK   )ÚENTRY_REÚsearchr   Ú	groupdictÚcountrž   r]   rm  )Úspecificationr)   r*   rŸ   rX   rr   Úcolonsr   r}   rÌ   r)  s              r/   r¶   r¶   Ð  s1  € Ü�‰˜Ó&€AÙØˆØ�-Ñ 3¨-Ñ#7Ü"ð $*Ø,9ñ$:ó ;ð ;ð. €Mð) �K‰K‹MˆØ�‰yˆØ�‰}ˆØ—‘˜C“ˆØ�QŠ;Ø! 4�F‰Fà˜Š{Ü&ð (.Ø0=ñ(>ó ?ð ?à!ŸZ™Z¨›_‰NˆF�FØ�'‘
ˆØˆ=Ø�mÑ# s¨mÑ';Ü&ð (.Ø0=ñ(>ó ?ð ?à‰Eà(-¯©°CÔ(8Ó9Ñ(8 1�Q—W‘W•YÐ(8ˆEÐ9Ü˜T 6¨6°5Ó9ˆØ€Mùò :s   ÃC*c                 ó¤  — | €d} t         j                  dk(  r2dt         j                  v r t         j                  j	                  d«      }nt         j                  j                  d«      }t         j                  j                  |«      r=t        j                  |t         j                  «      }|s/t        j                  d|«       n	 t        j                  |«       d}|s*t        j                  «       }t        j                  d|«       t         j                  j                  || «      S # t        $ r t        j                  d|d¬	«       d
}Y Œqw xY w)a¦  
    Return the default base location for distlib caches. If the directory does
    not exist, it is created. Use the suffix provided for the base directory,
    and default to '.distlib' if it isn't provided.

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

    The result is just the directory '.distlib' in the parent directory as
    determined above, or with the name specified with ``suffix``.
    z.distlibÚntÚLOCALAPPDATAz$localappdataÚ~z(Directory exists but is not writable: %sTzUnable to create %s)Úexc_infoFz#Default location unusable, using %s)rq   rX   Úenvironrr   Ú
expandvarsÚ
expanduserr"  rP  rQ  r  ÚwarningÚmakedirsÚOSErrorrÑ   rÒ   r&   )r}   r*   Úusables      r/   Úget_cache_baserŒ  ï  sü   € ð €~ØˆÜ	‡w�w�$‚˜>¬R¯Z©ZÑ7Ü—‘×#Ñ# OÓ4‰ô —‘×#Ñ# CÓ(ˆô 
‡w�w‡}�}�VÔÜ—‘˜6¤2§7¡7Ó+ˆÙÜ�N‰NÐEÀvÕNð	Ü�K‰K˜ÔØˆFñ Ü×!Ñ!Ó#ˆÜ�‰Ð<¸fÔEÜ�7‰7�<‰<˜ Ó'Ð'øô ò 	Ü�N‰NÐ0°&À4ˆNÔHØŠFð	ús   ÃD) Ä)#EÅEc                 ó   — t         j                  j                  |rt         j                  j                  | «      n| «      \  }}|r|j	                  dd«      }|j	                  t         j
                  d«      }||z   dz   S )a  
    Convert an absolute path to a directory name for use in a cache.

    The algorithm used is:

    #. On Windows, any ``':'`` in the drive is replaced with ``'---'``.
    #. Any occurrence of ``os.sep`` is replaced with ``'--'``.
    #. ``'.cache'`` is appended.
    rÈ   z---z--z.cache)rq   rr   Ú
splitdriver
  r#   rs   )rr   Úuse_abspathrŸ   rš   s       r/   Úpath_to_cache_dirr�    sc   € ô �7‰7×Ñ±{œbŸg™gŸo™o¨dÔ3ÈÓM�D€A€qÙØ�I‰I�c˜5Ó!ˆØ	�	‰	”"—&‘&˜$Ó€AØˆq‰5�8ÑÐr1   c                 ó2   — | j                  d«      s| dz   S | S ro   )Úendswith)r.   s    r/   Úensure_slashr“  )  s   € Ø�:‰:�cŒ?Ø�3‰wˆØ€Hr1   c                 ó²   — d x}}d| v r1| j                  dd«      \  }} d|vr|}n|j                  dd«      \  }}|rt        |«      }|rt        |«      }||| fS )NrL   r   rÈ   )Úrsplitrž   r   )rb   ÚusernameÚpasswordr   s       r/   Úparse_credentialsr˜  /  sp   € ØÐ€HˆxØ
ˆf�}ØŸ™ s¨AÓ.‰ˆ�Ø�fÑØ‰Hà!'§¡¨c°1Ó!5ÑˆH�hÙÜ˜8Ó$ˆÙÜ˜8Ó$ˆØ�X˜vÐ%Ð%r1   c                  óZ   — t        j                  d«      } t        j                  | «       | S )Né   )rq   Úumaskr�   s    r/   Úget_process_umaskrœ  >  s    € Ü�X‰X�d‹^€FÜ‡H�HˆVÔØ€Mr1   c                 ód   — d}d }t        | «      D ]  \  }}t        |t        «      rŒd} n |€J ‚|S )NTF)Ú	enumerater’   r   )Úseqr*   rg   r.   s       r/   Úis_string_sequencer   D  sA   € Ø€FØ€AÜ˜#–‰ˆˆ1Ü˜!œ\Õ*ØˆFÙð ð ˆ=Ðˆ=Ø€Mr1   z3([a-z0-9_]+([.-][a-z_][a-z0-9_]*)*)-([a-z0-9_.+-]+)z-py(\d\.?\d?)c                 ó  — d}d}t        | «      j                  dd«      } t        j                  | «      }|r$|j	                  d«      }| d|j                  «        } |rft        | «      t        |«      dz   kD  rLt        j                  t        j                  |«      dz   | «      }|r|j                  «       }| d| | |dz   d |f}|€:t        j                  | «      }|r#|j	                  d«      |j	                  d«      |f}|S )zw
    Extract name, version, python version from a filename (no extension)

    Return name, version, pyver or None
    NrV   Ú-r   z\br¤   )r   r#   ÚPYTHON_VERSIONr{  rÁ   Ústartrt   Úrer   Úescaper!   ÚPROJECT_NAME_AND_VERSION)ÚfilenameÚproject_namer*   Úpyverr)   Úns         r/   Úsplit_filenamer¬  T  sñ   € ð €FØ€EÜ�xÓ ×(Ñ(¨¨cÓ2€HÜ×Ñ˜hÓ'€AÙØ—‘˜“
ˆØ˜J˜QŸW™W›YÐ'ˆÙœ˜H›¬¨LÓ(9¸AÑ(=Ò=Ü�H‰H”R—Y‘Y˜|Ó,¨uÑ4°hÓ?ˆÙØ—‘“ˆAØ˜b˜q�\ 8¨A°©E¨FÐ#3°UÐ:ˆFØ€~Ü$×*Ñ*¨8Ó4ˆÙØ—W‘W˜Q“Z §¡¨£¨UÐ2ˆFØ€Mr1   z-(?P<name>[\w .-]+)\s*\(\s*(?P<ver>[^\s)]+)\)$c                 ó¸   — t         j                  | «      }|st        d| z  «      ‚|j                  «       }|d   j	                  «       j                  «       |d   fS )zÇ
    A utility method used to get name and version from a string.

    From e.g. a Provides-Dist value.

    :param p: A value in a form 'foo (1.0)'
    :return: The name and version as a tuple.
    z$Ill-formed name/version string: '%s'rX   Úver)ÚNAME_VERSION_REr   r   r|  r]   r•   )rš   r)   rŸ   s      r/   Úparse_name_and_versionr°  r  sV   € ô 	×Ñ˜aÓ €AÙÜÐGÈ!ÑKÓLÐLØ	�‰‹€AØˆV‰9�?‰?Ó×"Ñ"Ó$ a¨¡hÐ.Ð.r1   c                 ó²  — t        «       }t        | xs g «      } t        |xs g «      }d| v r| j                  d«       ||z  }| D ]�  }|dk(  r|j                  |«       Œ|j                  d«      r8|dd  }||vrt        j                  d|z  «       ||v sŒQ|j                  |«       Œc||vrt        j                  d|z  «       |j                  |«       Œ‘ |S )NÚ*r¢  r   zundeclared extra: %s)rÍ   rõ   r  r^   r  rˆ  )Ú	requestedÚ	availabler*   ÚrÚunwanteds        r/   Ú
get_extrasr·  ‚  sÒ   € Ü‹U€FÜ�I’O Ó$€IÜ�I’O Ó$€IØ
ˆiÑØ×Ñ˜ÔØ�)ÑˆÛˆØ�Š8Ø�J‰J�q�MØ�\‰\˜#ÔØ˜˜�uˆHØ˜yÑ(Ü—‘Ð5¸Ñ@ÔAØ˜6Ò!Ø—‘˜hÕ'à˜	Ñ!Ü—‘Ð5¸Ñ9Ô:Ø�J‰J�q�Mð ð €Mr1   c                 ót  — i }	 t        | «      }|j                  «       }|j                  d«      }|j                  d«      st        j                  d|«       |S  t        j                  d«      |«      }t        j                  |«      }	 |S # t        $ r"}t        j                  d| |«       Y d }~|S d }~ww xY w)NzContent-Typezapplication/jsonz(Unexpected response for JSON request: %sr¥   z&Failed to get external data for %s: %s)r   r  Úgetr^   r  rM  r°   r±   r³   r´   r·   Ú	exception)r[   r*   ÚrespÚheadersÚctÚreaderÚes          r/   Ú_get_external_datarÀ  ž  s³   € Ø€FðKô �s‹|ˆØ—)‘)“+ˆØ�[‰[˜Ó(ˆØ�}‰}Ð/Ô0Ü�L‰LÐCÀRÔHð €Mð /”V×%Ñ% gÓ.¨tÓ4ˆFô —Y‘Y˜vÓ&‰Fð €Møô ò KÜ×ÑÐAÀ3È×JÐJØ€MûðKús   „AB Á0B Â	B7ÂB2Â2B7z'https://www.red-dove.com/pypi/projects/c                 ón   — | d   j                  «       ›d| ›d�}t        t        |«      }t        |«      }|S )Nr   rp   z/project.json©Úupperr   Ú_external_data_base_urlrÀ  )rX   r[   r*   s      r/   Úget_project_datarÅ  ¶  s2   € Ø"& q¡'§-¡-¥/²4Ð
8€CÜ
Ô)¨3Ó
/€CÜ Ó$€FØ€Mr1   c                 óp   — | d   j                  «       ›d| ›d|›d�}t        t        |«      }t        |«      S )Nr   rp   z	/package-z.jsonrÂ  )rX   Úversionr[   s      r/   Úget_package_datarÈ  ½  s0   € Ø%)¨!¡W§]¡]¥_²dºGÐ
D€CÜ
Ô)¨3Ó
/€CÜ˜cÓ"Ð"r1   c                   ó$   — e Zd ZdZd„ Zdd„Zd„ Zy)ÚCachezæ
    A class implementing a cache for resources that need to live in the file system
    e.g. shared libraries. This class was moved from resources to here because it
    could be used by other modules, e.g. the wheel module.
    c                 ód  — t         j                  j                  |«      st        j                  |«       t        j                  |«      j
                  dz  dk7  rt        j                  d|«       t         j                  j                  t         j                  j                  |«      «      | _
        y)zu
        Initialise an instance.

        :param base: The base directory where the cache should be located.
        é?   r   zDirectory '%s' is not privateN)rq   rr   r"  r‰  r  r2  r  rˆ  r
  Únormpathr|   )ræ   r|   s     r/   rç   zCache.__init__Ê  sm   € ô �w‰w�}‰}˜TÔ"Ü�K‰K˜ÔÜ�G‰G�D‹M×!Ñ! DÑ(¨QÒ.Ü�N‰NÐ<¸dÔCÜ—G‘G—O‘O¤B§G¡G×$4Ñ$4°TÓ$:Ó;ˆ�	r1   c                 ó   — t        ||¬«      S )zN
        Converts a resource prefix to a directory name in the cache.
        )r�  )r�  )ræ   r   r�  s      r/   Úprefix_to_dirzCache.prefix_to_dirØ  s   € ô ! °[ÔAÐAr1   c                 óø  — g }t        j                  | j                  «      D ]µ  }t         j                  j	                  | j                  |«      }	 t         j                  j                  |«      st         j                  j                  |«      rt        j                  |«       n4t         j                  j                  |«      rt        j                  |«       Œ· |S # t        $ r |j                  |«       Y ŒÖw xY w)z"
        Clear the cache.
        )rq   r[  r|   rr   r&   r  r  rõ   r"  r	   rÓ   r·   r$   )ræ   Únot_removedÚfns      r/   ÚclearzCache.clearÞ  s«   € ð ˆÜ—*‘*˜TŸY™YÖ'ˆBÜ—‘—‘˜dŸi™i¨Ó,ˆBð'Ü—7‘7—>‘> "Ô%¬¯©¯©¸Ô);Ü—I‘I˜b•MÜ—W‘W—]‘] 2Ô&Ü—M‘M "Ô%øð (ð Ðøô ò 'Ø×"Ñ" 2Ö&ð'ús   ÁBCÃC9Ã8C9Nrb  )rë   rï   rð   Ú__doc__rç   rÏ  rÓ  rD   r1   r/   rÊ  rÊ  Ã  s   „ ñò<óBór1   rÊ  c                   ó0   — e Zd ZdZd„ Zdd„Zd„ Zd„ Zd„ Zy)	Ú
EventMixinz1
    A very simple publish/subscribe system.
    c                 ó   — i | _         y r�   )Ú_subscribersr  s    r/   rç   zEventMixin.__init__ô  s
   € ØˆÕr1   c                 ó˜   — | j                   }||vrt        |g«      ||<   y||   }|r|j                  |«       y|j                  |«       y)a`  
        Add a subscriber for an event.

        :param event: The name of an event.
        :param subscriber: The subscriber to be added (and called when the
                           event is published).
        :param append: Whether to append or prepend the subscriber to an
                       existing subscriber list for the event.
        N)rØ  r   r$   Ú
appendleft)ræ   ÚeventÚ
subscriberr$   ÚsubsÚsqs         r/   r  zEventMixin.add÷  sK   € ð × Ñ ˆØ˜ÑÜ  Ó-ˆD�ŠKà�e‘ˆBÙØ—	‘	˜*Õ%à—‘˜jÕ)r1   c                 óh   — | j                   }||vrt        d|z  «      ‚||   j                  |«       y)z™
        Remove a subscriber for an event.

        :param event: The name of an event.
        :param subscriber: The subscriber to be removed.
        zNo subscribers: %rN)rØ  ró   rõ   )ræ   rÛ  rÜ  rÝ  s       r/   rõ   zEventMixin.remove  s:   € ð × Ñ ˆØ˜ÑÜÐ1°EÑ9Ó:Ð:ØˆU‰×Ñ˜:Õ&r1   c                 óL   — t        | j                  j                  |d«      «      S )z�
        Return an iterator for the subscribers for an event.
        :param event: The event to return subscribers for.
        rD   )ÚiterrØ  r¹  )ræ   rÛ  s     r/   Úget_subscriberszEventMixin.get_subscribers  s"   € ô
 �D×%Ñ%×)Ñ)¨%°Ó4Ó5Ð5r1   c                 óð   — g }| j                  |«      D ]   }	  ||g|¢­i |¤Ž}|j	                  |«       Œ" t        j                  d||||«       |S # t        $ r t        j                  d«       d}Y ŒPw xY w)a^  
        Publish a event and return a list of values returned by its
        subscribers.

        :param event: The event to publish.
        :param args: The positional arguments to pass to the event's
                     subscribers.
        :param kwargs: The keyword arguments to pass to the event's
                       subscribers.
        z"Exception during event publicationNz/publish %s: args = %s, kwargs = %s, result = %s)râ  r·   r  rº  r$   rM  )ræ   rÛ  ÚargsÚkwargsr*   rÜ  rÅ   s          r/   ÚpublishzEventMixin.publish  sˆ   € ð ˆØ×.Ñ.¨uÖ5ˆJðÙ" 5Ð:¨4Ò:°6Ñ:�ð �M‰M˜%Õ ð 6ô 	�‰ÐFÈÈtÐU[Ð]cÔdØˆøô ò Ü× Ñ Ð!EÔFØ’ðús   ˜AÁ A5Á4A5Nrb  )	rë   rï   rð   rÔ  rç   r  rõ   râ  ræ  rD   r1   r/   rÖ  rÖ  ï  s    „ ñòó*ò(
'ò6ór1   rÖ  c                   óX   — e Zd Zd„ Zd„ Zdd„Zd„ Zd„ Zd„ Zd„ Z	e
d„ «       Ze
d	„ «       Zy
)Ú	Sequencerc                 ó>   — i | _         i | _        t        «       | _        y r�   )Ú_predsÚ_succsrÍ   Ú_nodesr  s    r/   rç   zSequencer.__init__:  s   € ØˆŒØˆŒÜ“eˆ�r1   c                 ó:   — | j                   j                  |«       y r�   )rì  r  )ræ   Únodes     r/   Úadd_nodezSequencer.add_node?  s   € Ø�‰�‰˜Õr1   c                 ó8  — || j                   v r| j                   j                  |«       |rït        | j                  j	                  |d«      «      D ]  }| j                  ||«       Œ t        | j
                  j	                  |d«      «      D ]  }| j                  ||«       Œ t        | j                  j                  «       «      D ]  \  }}|rŒ	| j                  |= Œ t        | j
                  j                  «       «      D ]  \  }}|rŒ	| j
                  |= Œ y y )NrD   )rì  rõ   rÍ   rê  r¹  rë  rY  rµ   )ræ   rî  Úedgesrš   r.   rÃ   rS   s          r/   Úremove_nodezSequencer.remove_nodeB  sà   € Ø�4—;‘;ÑØ�K‰K×Ñ˜tÔ$ÙÜ˜Ÿ™Ÿ™¨¨rÓ2Ö3�Ø—‘˜A˜tÕ$ð 4ä˜Ÿ™Ÿ™¨¨rÓ2Ö3�Ø—‘˜D !Õ$ð 4ô ˜TŸ[™[×.Ñ.Ó0Ö1‘��1ÚØŸ™ A™ð 2ô ˜TŸ[™[×.Ñ.Ó0Ö1‘��1ÚØŸ™ A™ñ 2ð r1   c                 óÞ   — ||k7  sJ ‚| j                   j                  |t        «       «      j                  |«       | j                  j                  |t        «       «      j                  |«       y r�   )rê  Ú
setdefaultrÍ   r  rë  )ræ   ÚpredÚsuccs      r/   r  zSequencer.addR  sP   € Ø�tŠ|Ðˆ|Ø�‰×Ñ˜t¤S£UÓ+×/Ñ/°Ô5Ø�‰×Ñ˜t¤S£UÓ+×/Ñ/°Õ5r1   c                 ó  — ||k7  sJ ‚	 | j                   |   }| j                  |   }	 |j	                  |«       |j	                  |«       y # t        $ r t        d|z  «      ‚w xY w# t        $ r t        |›d|›�«      ‚w xY w)Nz%r not a successor of anythingz not a successor of )rê  rë  ÚKeyErrorró   rõ   )ræ   rõ  rö  ÚpredsÚsuccss        r/   rõ   zSequencer.removeW  s”   € Ø�tŠ|Ðˆ|ð	FØ—K‘K Ñ%ˆEØ—K‘K Ñ%ˆEð	HØ�L‰L˜ÔØ�L‰L˜Õøô	 ò 	FÜÐ=ÀÑDÓEÐEð	Fûô
 ò 	HÜº4ÁÐFÓGÐGð	Hús   ‰A ¨"A& ÁA#Á&B c                 ó^   — || j                   v xs || j                  v xs || j                  v S r�   )rê  rë  rì  )ræ   Ústeps     r/   Úis_stepzSequencer.is_stepd  s-   € Ø˜Ÿ™Ð#ÒQ t¨t¯{©{Ð':ÒQ¸dÀdÇkÁkÐ>QÐRr1   c                 ó¶  — | j                  |«      st        d|z  «      ‚g }g }t        «       }|j                  |«       |r�|j	                  d«      }||v r(||k7  rr|j                  |«       |j                  |«       nO|j                  |«       |j                  |«       | j                  j                  |d«      }|j                  |«       |rŒ�t        |«      S )NzUnknown: %rr   rD   )rý  ró   rÍ   r$   rw   rõ   r  rê  r¹  ÚextendÚreversed)ræ   Úfinalr*   ÚtodoÚseenrü  rù  s          r/   Ú	get_stepszSequencer.get_stepsg  s¼   € Ø�|‰|˜EÔ"Ü˜]¨UÑ2Ó3Ð3ØˆØˆÜ‹uˆØ�‰�EÔÙØ—8‘8˜A“;ˆDØ�t‰|ð ˜5’=Ø—M‘M $Ô'Ø—M‘M $Õ'à—‘˜”Ø—‘˜dÔ#ØŸ™Ÿ™¨¨bÓ1�Ø—‘˜EÔ"ò ô  ˜ÓÐr1   c                 ó€   ‡‡‡‡‡‡‡— dgŠg Ši Ši Šg Š| j                   Šˆˆˆˆˆˆˆfd„Š‰D ]  }|‰vsŒ ‰|«       Œ ‰S )Nr   c                 ó¼  •— ‰d   ‰| <   ‰d   ‰| <   ‰dxx   dz  cc<   ‰
j                  | «       	 ‰|    }|D ]>  }|‰vr ‰|«       t        ‰|    ‰|   «      ‰| <   Œ%|‰
v sŒ*t        ‰|    ‰|   «      ‰| <   Œ@ ‰|    ‰|    k(  rHg }	 ‰
j                  «       }|j                  |«       || k(  rnŒ(t	        |«      }‰	j                  |«       y y # t        $ r g }Y Œ¤w xY w©Nr   r   )r$   r·   Úminrw   Útuple)rî  Ú
successorsÚ	successorÚconnected_componentÚ	componentÚgraphÚindexÚindex_counterÚlowlinksr*   ÚstackÚstrongconnects        €€€€€€€r/   r  z3Sequencer.strong_connections.<locals>.strongconnect‹  s  ø€ à'¨Ñ*ˆE�$‰KØ*¨1Ñ-ˆH�T‰NØ˜!Ó Ñ!ÓØ�L‰L˜Ôð Ø" 4™[�
ó (�	Ø HÑ,á! )Ô,Ü%(¨°$©¸À)Ñ9LÓ%M�H˜T’NØ %Ò'ô &)¨°$©¸¸yÑ9IÓ%J�H˜T’Nð (ð ˜‰~  t¡Ò,Ø&(Ð#àØ %§	¡	£�IØ'×.Ñ.¨yÔ9Ø  DÒ(Øð	 ô
 "Ð"5Ó6�	à—‘˜iÕ(ð -øô ò  Ø’
ð ús   ±C ÃCÃC)rë  )	ræ   rî  r  r  r  r  r*   r  r  s	     @@@@@@@r/   Ústrong_connectionszSequencer.strong_connections€  sW   þ€ ð ˜ˆØˆØˆØˆØˆà—‘ˆ÷!	)ò !	)óF ˆDØ˜8Ò#Ù˜dÕ#ð ð ˆr1   c           	      ó  — dg}| j                   D ]0  }| j                   |   }|D ]  }|j                  d|›d|›d�«       Œ Œ2 | j                  D ]  }|j                  d|z  «       Œ |j                  d«       dj                  |«      S )Nzdigraph G {z  z -> rU   z  %s;Ú}Ú
)rê  r$   rì  r&   )ræ   r*   rö  rù  rõ  rî  s         r/   ÚdotzSequencer.dot´  s{   € à�ˆØ—K”KˆDØ—K‘K Ñ%ˆEÛ�Ø—’ªt²TÐ:Õ;ñ ð  ð —K”KˆDØ�M‰M˜' D™.Õ)ð  à�‰�cÔØ�y‰y˜Ó Ð r1   Nra  )rë   rï   rð   rç   rï  rò  r  rõ   rý  r  Úpropertyr  r  rD   r1   r/   rè  rè  8  sP   „ òò
ó'ò 6ò
HòSò ð2 ñ1ó ð1ðf ñ	!ó ñ	!r1   rè  )ú.tar.gzú.tar.bz2ú.tarú.zipú.tgzú.tbzú.whlc                 óp  ‡‡— ˆˆfd„}t         j                  j                  ‰«      Št        ‰«      Šd }|€d| j	                  d«      rd}nP| j	                  d«      rd}d}n:| j	                  d«      rd}d	}n$| j	                  d
«      rd}d}nt        d| z  «      ‚	 |dk(  r.t        | d«      }|rW|j                  «       }|D ]
  } ||«       Œ n7t        j                  | «      }|r|j                  «       }|D ]
  } ||«       Œ |dk7  rft        j                  d   dk  rP|j                  «       D ]=  }	t        |	j                  t         «      rŒ|	j                  j#                  d«      |	_        Œ? d„ }
|
|_        |j'                  ‰«       |r|j)                  «        y y # |r|j)                  «        w w xY w)Nc                 ó,  •— t        | t        «      s| j                  d«      } t        j                  j                  t        j                  j                  ‰| «      «      }|j                  ‰«      r|‰   t        j                  k7  rt        d|z  «      ‚y )Nr¥   zpath outside destination: %r)
r’   r   Údecoderq   rr   r
  r&   r^   rs   ró   )rr   rš   Údest_dirÚplens     €€r/   Ú
check_pathzunarchive.<locals>.check_pathÊ  sm   ø€ Ü˜$¤	Ô*Ø—;‘;˜wÓ'ˆDÜ�G‰G�O‰OœBŸG™GŸL™L¨°4Ó8Ó9ˆØ�|‰|˜HÔ%¨¨4©´B·F±FÒ):ÜÐ;¸aÑ?Ó@Ð@ð *;r1   )r  r   Úzip)r  r  Útgzzr:gz)r  r  Útbzzr:bz2r  Útarrµ  zUnknown format for %rr   r¤   r¥   c                 óŽ   — 	 t        j                  | |«      S # t         j                  $ r}t        t	        |«      «      ‚d}~ww xY w)z9Run tarfile.tar_filter, but raise the expected ValueErrorN)ÚtarfileÚ
tar_filterÚFilterErrorró   Ústr)Úmemberrr   Úexcs      r/   Úextraction_filterz$unarchive.<locals>.extraction_filterû  s?   € ð+Ü×)Ñ)¨&°$Ó7Ð7øÜ×&Ñ&ò +Ü ¤ S£Ó*Ð*ûð+ús   ‚ ˜A«?¿A)rq   rr   r
  rt   r’  ró   r   Únamelistr,  r#  Úgetnamesr‹   r¯   Ú
getmembersr’   rX   r   r#  r2  Ú
extractallr»   )Úarchive_filenamer$  Úformatr  r&  Úarchiver7  ÚnamesrX   Útarinfor2  r%  s    `         @r/   Ú	unarchiver<  È  s¦  ù€ õAô �w‰w�‰˜xÓ(€HÜˆx‹=€DØ€GØ€~Ø×$Ñ$Ð%5Ô6Ø‰FØ×&Ñ&Ð':Ô;ØˆFØ‰DØ×&Ñ&Ð';Ô<ØˆFØ‰DØ×&Ñ& vÔ.ØˆFØ‰DäÐ4Ð7GÑGÓHÐHð'Ø�UŠ?ÜÐ.°Ó4ˆGÙØ×(Ñ(Ó*�Û!�DÙ˜tÕ$ñ "ô —l‘lÐ#3°TÓ:ˆGÙØ×(Ñ(Ó*�Û!�DÙ˜tÕ$ð "à�UŠ?œs×/Ñ/°Ñ2°QÒ6ð
 #×-Ñ-Ö/�Ü! '§,¡,´	Õ:Ø#*§<¡<×#6Ñ#6°wÓ#?�G•Lð 0ò	+ð %6ˆÔ!à×Ñ˜8Ô$ñ Ø�M‰M�Oð ø‰7Ø�M‰M�Oð ús   ÂB2F  Å=F  Æ F5c                 ó‚  — t        j                  «       }t        | «      }t        |d«      5 }t	        j
                  | «      D ]d  \  }}}|D ]Y  }t        j                  j                  ||«      }||d }	t        j                  j                  |	|«      }
|j                  ||
«       Œ[ Œf 	 ddd«       |S # 1 sw Y   |S xY w)z*zip a directory tree into a BytesIO objectr  N)	ÚioÚBytesIOrt   r   rq   Úwalkrr   r&   rÎ   )Ú	directoryr*   ÚdlenÚzfru   r]  r6  rX   ÚfullÚrelr~   s              r/   Úzip_dirrF    s    € ä�Z‰Z‹\€FÜˆy‹>€DÜ	�˜Ô	 Ü!#§¡¨Ö!3ÑˆD�$˜Û�Ü—w‘w—|‘| D¨$Ó/�Ø˜4˜5�k�Ü—w‘w—|‘| C¨Ó.�Ø—‘˜˜tÕ$ñ	 ñ "4÷ 
ð €M÷ 
ð €Mús   ¬A=B4Â4B>)r   ÚKÚMÚGÚTÚPc                   óv   — e Zd ZdZdd„Zd„ Zd„ Zd„ Zd„ Ze	d„ «       Z
e	d„ «       Zd	„ Ze	d
„ «       Ze	d„ «       Zy)ÚProgressÚUNKNOWNc                 ój   — |�||k\  sJ ‚|x| _         | _        || _        d | _        d| _        d| _        y )Nr   F)r  ÚcurÚmaxÚstartedÚelapsedÚdone)ræ   ÚminvalÚmaxvals      r/   rç   zProgress.__init__$  s>   € Øˆ~ ¨6Ò!1Ð1Ð1Ø$Ð$ˆŒ�4”8ØˆŒØˆŒØˆŒØˆ�	r1   c                 óæ   — | j                   |k  sJ ‚| j                  �|| j                  k  sJ ‚|| _        t        j                  «       }| j                  €|| _        y || j                  z
  | _        y r�   )r  rQ  rP  ÚtimerR  rS  )ræ   ÚcurvalÚnows      r/   ÚupdatezProgress.update,  sb   € Ø�x‰x˜6Ò!Ð!Ð!Ø�x‰xÐ 6¨T¯X©XÒ#5Ð5Ð5ØˆŒÜ�i‰i‹kˆØ�<‰<ÐØˆD�Là §¡Ñ-ˆD�Lr1   c                 óN   — |dk\  sJ ‚| j                  | j                  |z   «       y )Nr   )r[  rP  )ræ   Úincrs     r/   Ú	incrementzProgress.increment6  s"   € Ø�qŠyÐˆyØ�‰�D—H‘H˜t‘OÕ$r1   c                 ó<   — | j                  | j                  «       | S r�   )r[  r  r  s    r/   r¤  zProgress.start:  s   € Ø�‰�D—H‘HÔØˆr1   c                 ó`   — | j                   �| j                  | j                   «       d| _        y ©NT)rQ  r[  rT  r  s    r/   ÚstopzProgress.stop>  s#   € Ø�8‰8ÐØ�K‰K˜Ÿ™Ô!Øˆ�	r1   c                 óJ   — | j                   €| j                  S | j                   S r�   )rQ  Úunknownr  s    r/   ÚmaximumzProgress.maximumC  s   € à#Ÿx™xÐ/ˆt�|‰|Ð=°T·X±XÐ=r1   c                 ó¼   — | j                   rd}|S | j                  €d}|S d| j                  | j                  z
  z  | j                  | j                  z
  z  }d|z  }|S )Nz100 %z ?? %g      Y@z%3d %%)rT  rQ  rP  r  )ræ   r*   rS   s      r/   Ú
percentagezProgress.percentageG  sf   € à�9Š9ØˆFð ˆð �X‰XÐØˆFð ˆð ˜Ÿ™ D§H¡HÑ,Ñ-°·±¸D¿H¹HÑ1DÑEˆAØ ‘\ˆFØˆr1   c                 ó´   — |dk  r| j                   �| j                  | j                  k(  rd}|S t        j                  dt        j
                  |«      «      }|S )Nr   z??:??:??z%H:%M:%S)rQ  rP  r  rX  ÚstrftimeÚgmtime)ræ   Údurationr*   s      r/   Úformat_durationzProgress.format_durationR  sM   € Ø˜ŠM˜tŸx™xÐ/°4·8±8¸t¿x¹xÒ3GØˆFð
 ˆô —]‘] :¬t¯{©{¸8Ó/DÓEˆFØˆr1   c                 ó|  — | j                   rd}| j                  }nŒd}| j                  €d}n{| j                  dk(  s| j                  | j                  k(  rd}nPt        | j                  | j                  z
  «      }|| j                  | j                  z
  z  }|dz
  | j                  z  }|›d| j                  |«      ›�S )NÚDonezETA rò   r   r   z: )rT  rS  rQ  rP  r  Úfloatrl  )ræ   r   rh   s      r/   ÚETAzProgress.ETA[  s¥   € à�9Š9ØˆFØ—‘‰Að ˆFØ�x‰xÐØ‘Ø—‘ Ò" t§x¡x°4·8±8Ò';Ø‘ô ˜$Ÿ(™( T§X¡XÑ-Ó.�Ø�T—X‘X §¡Ñ(Ñ(�Ø˜‘U˜dŸl™lÑ*�Ú! 4×#7Ñ#7¸Ô#:Ð;Ð;r1   c                 ó®   — | j                   dk(  rd}n&| j                  | j                  z
  | j                   z  }t        D ]  }|dk  r n|dz  }Œ d|fz  S )Nr   g        iè  g     @�@z%d %sB/s)rS  rP  r  ÚUNITS)ræ   r*   Úunits      r/   ÚspeedzProgress.speedn  s]   € à�<‰<˜1ÒØ‰Fà—h‘h §¡Ñ)¨T¯\©\Ñ9ˆFßˆDØ˜Š}ÙØ�fÑ‰Fð ð ˜V T˜NÑ*Ð*r1   N)r   éd   )rë   rï   rð   rd  rç   r[  r^  r¤  rb  r  re  rg  rl  rp  rt  rD   r1   r/   rM  rM  !  su   „ Ø€Góò.ò%òòð
 ñ>ó ð>ð ñó ðòð ñ<ó ð<ð$ ñ	+ó ñ	+r1   rM  z\{([^}]*)\}z[^/\\,{]\*\*|\*\*[^/\\,}]z^[^{]*\}|\{[^}]*$c                 ó¬   — t         j                  | «      rd}t        || z  «      ‚t        j                  | «      rd}t        || z  «      ‚t	        | «      S )zAExtended globbing function that supports ** and {opt1,opt2,opt3}.z7invalid glob %r: recursive glob "**" must be used alonez2invalid glob %r: mismatching set marker '{' or '}')Ú_CHECK_RECURSIVE_GLOBr{  ró   Ú_CHECK_MISMATCH_SETÚ_iglob)Ú	path_globr  s     r/   r   r   „  sQ   € ä×#Ñ# IÔ.ØKˆÜ˜˜y™Ó)Ð)Ü×!Ñ! )Ô,ØFˆÜ˜˜y™Ó)Ð)Ü�)ÓÐr1   c              #   ó   K  — t         j                  | d«      }t        |«      dkD  rXt        |«      dk(  sJ |«       ‚|\  }}}|j                  d«      D ](  }t        dj	                  |||f«      «      D ]  }|–— Œ Œ* y d| vrt        | «      D ]  }|–— Œ y | j                  dd«      \  }}|dk(  rd}|dk(  rd}n"|j                  d«      }|j                  d	«      }t        j                  |«      D ]W  \  }}}	t        j                  j                  |«      }t        t        j                  j	                  ||«      «      D ]  }
|
–— Œ ŒY y ­w)
Nr   r¤   rK   r   z**re  r²  rp   Ú\)Ú	RICH_GLOBrž   rt   ry  r&   Ú	std_iglobr'   rq   r@  rr   rÍ  )rz  Úrich_path_globr   rÍ   r}   Úitemrr   ÚradicalÚdirr6  rÒ  s              r/   ry  ry  �  s8  è ø€ Ü—_‘_ Y°Ó2€NÜ
ˆ>Ó˜QÒÜ�>Ó" aÒ'Ð7¨Ó7Ð'Ø,Ñˆ��VØ—I‘I˜c–NˆDÜ˜rŸw™w¨°°fÐ'=Ó>Ö?�Ø“
ñ @ñ #ð �yÑ Ü! )Ö,�Ø“
ñ -ð (Ÿo™o¨d°AÓ6‰OˆF�GØ˜Š|Ø�Ø˜"Š}Ø‘ð "Ÿ.™.¨Ó-�Ø!Ÿ.™.¨Ó.�Ü$&§G¡G¨F¦OÑ ��c˜5Ü—w‘w×'Ñ'¨Ó-�Ü ¤§¡§¡¨d°GÓ!<Ö=�BØ“Hñ >ñ %4ùs   ‚EE)ÚHTTPSHandlerÚmatch_hostnameÚCertificateErrorc                   ó   — e Zd ZdZdZd„ Zy)ÚHTTPSConnectionNTc                 ó,  — t        j                  | j                  | j                  f| j                  «      }t        | dd«      r|| _        | j                  «        t        j                  t        j                  «      }t        t        d«      r#|xj                  t        j                  z  c_        t        | dd «      r&|j                  | j                  | j                   «       i }| j"                  rQt        j$                  |_        |j)                  | j"                  ¬«       t        t        dd«      r| j                  |d<    |j*                  |fi |¤Ž| _        | j"                  r]| j,                  rP	 t/        | j                  j1                  «       | j                  «       t2        j5                  d| j                  «       y y y # t6        $ rE | j                  j9                  t         j:                  «       | j                  j=                  «        ‚ w xY w)	NÚ_tunnel_hostFÚOP_NO_SSLv2Ú	cert_file)ÚcafileÚHAS_SNIÚserver_hostnamezHost verified: %s)rÜ   Úcreate_connectionÚhostÚportÚtimeoutrŒ   ÚsockÚ_tunnelÚsslÚ
SSLContextÚPROTOCOL_SSLv23rŠ   ÚoptionsrŠ  Úload_cert_chainr‹  Úkey_fileÚca_certsÚCERT_REQUIREDÚverify_modeÚload_verify_locationsÚwrap_socketÚcheck_domainr„  Úgetpeercertr  rM  r…  ÚshutdownÚ	SHUT_RDWRr»   )ræ   r“  Úcontextrå  s       r/   ÚconnectzHTTPSConnection.connect·  s{  € Ü×+Ñ+¨T¯Y©Y¸¿	¹	Ð,BÀDÇLÁLÓQˆDÜ�t˜^¨UÔ3Ø �”	Ø—‘”ä—n‘n¤S×%8Ñ%8Ó9ˆGÜ”s˜MÔ*Ø—’¤3§?¡?Ñ2•Ü�t˜[¨$Ô/Ø×'Ñ'¨¯©¸¿¹ÔFØˆFØ�}Š}Ü&)×&7Ñ&7�Ô#Ø×-Ñ-°T·]±]Ð-ÔCÜœ3 	¨5Ô1Ø04·	±	�FÐ,Ñ-à+˜×+Ñ+¨DÑ;°FÑ;ˆDŒIØ�}Š} ×!2Ò!2ðÜ" 4§9¡9×#8Ñ#8Ó#:¸D¿I¹IÔFÜ—L‘LÐ!4°d·i±iÕ@ð "3ˆ}øô (ò Ø—I‘I×&Ñ&¤v×'7Ñ'7Ô8Ø—I‘I—O‘OÔ%Øðús   Å4AG ÇAH)rë   rï   rð   r›  r   r¥  rD   r1   r/   r‡  r‡  ²  s   „ ØˆØˆó	r1   r‡  c                   ó    — e Zd Zdd„Zd„ Zd„ Zy)rƒ  c                 óJ   — t        j                  | «       || _        || _        y r�   )ÚBaseHTTPSHandlerrç   r›  r   )ræ   r›  r   s      r/   rç   zHTTPSHandler.__init__Õ  s   € Ü×%Ñ% dÔ+Ø$ˆDŒMØ ,ˆDÕr1   c                 óx   — t        |i |¤Ž}| j                  r"| j                  |_        | j                  |_        |S )a  
            This is called to create a connection instance. Normally you'd
            pass a connection class to do_open, but it doesn't actually check for
            a class, and just expects a callable. As long as we behave just as a
            constructor would have, we should be OK. If it ever changes so that
            we *must* pass a class, we'll create an UnsafeHTTPSConnection class
            which just sets check_domain to False in the class definition, and
            choose which one to pass to do_open.
            )r‡  r›  r   )ræ   rä  rå  r*   s       r/   Ú_conn_makerzHTTPSHandler._conn_makerÚ  s8   € ô % dÐ5¨fÑ5ˆFØ�}Š}Ø"&§-¡-�”Ø&*×&7Ñ&7�Ô#ØˆMr1   c                 ó¾   — 	 | j                  | j                  |«      S # t        $ r5}dt        |j                  «      v rt        d|j                  z  «      ‚‚ d }~ww xY w)Nzcertificate verify failedz*Unable to verify server certificate for %s)Údo_openrª  r   r/  Úreasonr…  r�  )ræ   rc   r¿  s      r/   Ú
https_openzHTTPSHandler.https_openê  sc   € ðØ—|‘| D×$4Ñ$4°cÓ:Ð:øÜò Ø.´#°a·h±h³-Ñ?Ü*ð ,4Ø69·h±hñ,?ó @ð @ð ûðús   ‚ ž	A§0AÁANrb  )rë   rï   rð   rç   rª  r®  rD   r1   r/   rƒ  rƒ  Ó  s   „ ó	-ò
	ó 	r1   rƒ  c                   ó   — e Zd Zd„ Zy)ÚHTTPSOnlyHandlerc                 ó   — t        d|z  «      ‚)NzAUnexpected HTTP request on what should be a secure connection: %s)r   )ræ   rc   s     r/   Ú	http_openzHTTPSOnlyHandler.http_openÿ  s   € Üð ,Ø.1ñ2ó 3ð 3r1   N)rë   rï   rð   r²  rD   r1   r/   r°  r°  ý  s   „ ó	3r1   r°  c                   ó   — e Zd Zdd„Zd„ Zy)Ú	Transportc                 óR   — || _         t        j                  j                  | |«       y r�   )r’  r   r´  rç   ©ræ   r’  Úuse_datetimes      r/   rç   zTransport.__init__	  s   € ØˆŒÜ×Ñ×$Ñ$ T¨<Õ8r1   c                 óÌ   — | j                  |«      \  }}}| j                  r|| j                  d   k7  r#|| _        |t        j                  |«      f| _        | j                  d   S r  )Úget_host_infoÚ_connectionÚ_extra_headersr   ÚHTTPConnection)ræ   r�  ÚhÚehÚx509s        r/   Úmake_connectionzTransport.make_connection  sd   € Ø×(Ñ(¨Ó.‰ˆˆ2ˆtØ×Ò 4¨4×+;Ñ+;¸AÑ+>Ò#>Ø"$ˆDÔØ#¤W×%;Ñ%;¸AÓ%>Ð>ˆDÔØ×Ñ Ñ"Ð"r1   N©r   ©rë   rï   rð   rç   rÀ  rD   r1   r/   r´  r´    s   „ ó9ó#r1   r´  c                   ó   — e Zd Zdd„Zd„ Zy)ÚSafeTransportc                 óR   — || _         t        j                  j                  | |«       y r�   )r’  r   rÄ  rç   r¶  s      r/   rç   zSafeTransport.__init__  s   € Ø"ˆDŒLÜ×#Ñ#×,Ñ,¨T°<Õ@r1   c                 óö   — | j                  |«      \  }}}|si }| j                  |d<   | j                  r|| j                  d   k7  r%|| _        |t	        j
                  |d fi |¤Žf| _        | j                  d   S )Nr’  r   r   )r¹  r’  rº  r»  r   r‡  )ræ   r�  r½  r¾  rå  s        r/   rÀ  zSafeTransport.make_connection  s�   € Ø ×.Ñ.¨tÓ4‰MˆAˆr�6ÙØ�Ø $§¡ˆF�9ÑØ×#Ò# t¨t×/?Ñ/?ÀÑ/BÒ'BØ&(�Ô#Ø#'¬×)@Ñ)@ÀÀDÑ)SÈFÑ)SÐ#S�Ô Ø×#Ñ# AÑ&Ð&r1   NrÁ  rÂ  rD   r1   r/   rÄ  rÄ    s   „ ó	Aó	'r1   rÄ  c                   ó   — e Zd Zd„ Zy)ÚServerProxyc                 ó  — |j                  dd «      x| _        }|�Ht        |«      d   }|j                  dd«      }|dk(  rt        }nt
        } |||¬«      x|d<   }|| _        t        j                  j                  | |fi |¤Ž y )Nr’  r   r·  Úhttps)r·  Ú	transport)
rw   r’  r   r¹  rÄ  r´  rË  r   rÈ  rç   )ræ   rf   rå  r’  ra   r·  Útclsrh   s           r/   rç   zServerProxy.__init__*  s‰   € Ø!'§¡¨I°tÓ!<Ð<ˆŒ�wð Ðä˜c“] 1Ñ%ˆFØ!Ÿ:™: n°aÓ8ˆLØ˜Ò Ü$‘ä �Ù&*¨7ÀÔ&NÐNˆF�;Ñ !ØˆDŒNÜ×Ñ×&Ñ& t¨SÑ;°FÓ;r1   N)rë   rï   rð   rç   rD   r1   r/   rÈ  rÈ  (  s   „ ó<r1   rÈ  c                 óh   — t         j                  d   dk  r|dz  }n
d|d<   d|d<   t        | |fi |¤ŽS )Nr   r¤   Úbr   Únewliner¥   r!  )r‹   r¯   r#  )rÒ  r7  rå  s      r/   Ú	_csv_openrÐ  A  sF   € Ü
×Ñ˜Ñ˜QÒØ�‰‰àˆˆyÑð %ˆˆzÑÜ��DÑ#˜FÑ#Ð#r1   c                   óH   — e Zd Z ed«       ed«       ed«      dœZd„ Zd„ Zy)ÚCSVBaserK   Ú"r  )Ú	delimiterÚ	quotecharÚlineterminatorc                 ó   — | S r�   rD   r  s    r/   Ú	__enter__zCSVBase.__enter__S  ó   € Øˆr1   c                 ó8   — | j                   j                  «        y r�   )r­   r»   )ræ   r„  s     r/   Ú__exit__zCSVBase.__exit__V  s   € Ø�‰×ÑÕr1   N)rë   rï   rð   r/  ÚdefaultsrØ  rÛ  rD   r1   r/   rÒ  rÒ  L  s(   „ á˜“XÙ˜“XÙ˜d›)ñ€Hòór1   rÒ  c                   ó"   — e Zd Zd„ Zd„ Zd„ ZeZy)Ú	CSVReaderc                 ó  — d|v r>|d   }t         j                  d   dk\  r t        j                  d«      |«      }|| _        nt        |d   d«      | _        t        j                  | j                  fi | j                  ¤Ž| _        y )Nr­   r   r¤   r¥   rr   rµ  )	r‹   r¯   r°   r±   r­   rÐ  Úcsvr¾  rÜ  )ræ   rå  r­   s      r/   rç   zCSVReader.__init__\  st   € Ø�vÑØ˜HÑ%ˆFÜ×Ñ Ñ" aÒ'à2œ×)Ñ)¨'Ó2°6Ó:�Ø ˆD�Kä# F¨6¡N°CÓ8ˆDŒKÜ—j‘j §¡Ñ>°·±Ñ>ˆ�r1   c                 ó   — | S r�   rD   r  s    r/   Ú__iter__zCSVReader.__iter__g  rÙ  r1   c                 óÌ   — t        | j                  «      }t        j                  d   dk  r8t	        |«      D ]*  \  }}t        |t        «      rŒ|j                  d«      ||<   Œ, |S ©Nr   r¤   r¥   )Únextr¾  r‹   r¯   rž  r’   r   r#  )ræ   r*   rg   r€  s       r/   rå  zCSVReader.nextj  sY   € Ü�d—k‘kÓ"ˆÜ×Ñ˜AÑ Ò"Ü$ VÖ,‘��4Ü! $¬	Õ2Ø $§¡¨GÓ 4�F˜1’Ið -ð ˆr1   N)rë   rï   rð   rç   râ  rå  Ú__next__rD   r1   r/   rÞ  rÞ  Z  s   „ ò	?òòð �Hr1   rÞ  c                   ó   — e Zd Zd„ Zd„ Zy)Ú	CSVWriterc                 ó„   — t        |d«      | _        t        j                  | j                  fi | j                  ¤Ž| _        y )Nr  )rÐ  r­   rà  ÚwriterrÜ  )ræ   rÒ  rå  s      r/   rç   zCSVWriter.__init__w  s-   € Ü  CÓ(ˆŒÜ—j‘j §¡Ñ>°·±Ñ>ˆ�r1   c                 óà   — t         j                  d   dk  r=g }|D ]4  }t        |t        «      r|j	                  d«      }|j                  |«       Œ6 |}| j                  j                  |«       y rä  )r‹   r¯   r’   r   r,  r$   rê  Úwriterow)ræ   Úrowrµ  r€  s       r/   rì  zCSVWriter.writerow{  s`   € Ü×Ñ˜AÑ Ò"ØˆAÛ�Ü˜d¤IÔ.ØŸ;™; wÓ/�DØ—‘˜•ð ð ˆCØ�‰×Ñ˜SÕ!r1   N)rë   rï   rð   rç   rì  rD   r1   r/   rè  rè  u  s   „ ò?ó"r1   rè  c                   ó`   ‡ — e Zd Z eej
                  «      Zded<   dˆ fd„	Zd„ Zd„ Zd„ Z	ˆ xZ
S )ÚConfiguratorÚinc_convertÚincc                 óf   •— t         t        | �  |«       |xs t        j                  «       | _        y r�   )Úsuperrï  rç   rq   r×   r|   )ræ   Úconfigr|   Ú	__class__s      €r/   rç   zConfigurator.__init__�  s$   ø€ ÜŒl˜DÑ*¨6Ô2ØÒ'œBŸI™I›Kˆ�	r1   c                 óÚ  ‡ ‡— ˆˆ fd„Š|j                  d«      }t        |«      s‰ j                  |«      }|j                  dd «      }|j                  dd«      }|rt        |D �cg c]
  } ‰|«      ‘Œ c}«      }|D �cg c]  }t	        |«      sŒ| ‰||   «      f‘Œ }}t        |«      } ||i |¤Ž}	|r+|j                  «       D ]  \  }
}t        |	|
 ‰|«      «       Œ |	S c c}w c c}w )Nc                 ó.  •— t        | t        t        f«      r' t        | «      | D �cg c]
  } ‰|«      ‘Œ c}«      }|S t        | t        «      r0d| v r‰j                  | «      }|S i }| D ]  } ‰| |   «      ||<   Œ |S ‰j                  | «      }|S c c}w ©Nú())r’   rY  r	  ÚtypeÚdictÚconfigure_customÚconvert)Úorg   r*   rÃ   rý  ræ   s       €€r/   rý  z.Configurator.configure_custom.<locals>.convert–  s§   ø€ Ü˜!œd¤E˜]Ô+Ø œ˜a›±aÓ!8±a°¡'¨!¥*°aÑ!8Ó9�ð ˆMô ˜AœtÔ$Ø˜1‘9Ø!×2Ñ2°1Ó5�Fð ˆMð  �FÛ˜Ù$+¨A¨a©D£M˜˜qš	ð ð ˆMð Ÿ™ a›�ØˆMùò "9s   §Brù  re  z[]rD   )rw   ry  rk  r	  r   rû  rµ   Úsetattr)ræ   rô  r›   Úpropsrä  rþ  rÃ   rµ   rå  r*   r«  rS   rý  s   `           @r/   rü  zConfigurator.configure_custom”  sà   ù€ õ	ð �J‰J�tÓˆÜ˜Œ{Ø—‘˜Q“ˆAØ—
‘
˜3 Ó%ˆà�z‰z˜$ Ó#ˆÙÜ©dÓ3©d¨™' !�*¨dÑ3Ó4ˆDÙ28ÓK±&¨Q¼KÈ½N�!‘W˜V A™YÓ'Ò(°&ˆÐKÜ�e“ˆÙ�DÐ#˜FÑ#ˆÙØŸ™ž‘��1Ü˜ ¡7¨1£:Õ.ð &àˆùò 4ùÚKs   Á%C#Á?C(ÂC(c                 óŒ   — | j                   |   }t        |t        «      r$d|v r | j                  |«      x| j                   |<   }|S rø  )rô  r’   rû  rü  )ræ   r¡   r*   s      r/   Ú__getitem__zConfigurator.__getitem__´  sC   € Ø—‘˜SÑ!ˆÜ�fœdÔ#¨°©Ø(,×(=Ñ(=¸fÓ(EÐEˆD�K‰K˜Ñ˜vØˆr1   c                 ó  — t         j                  j                  |«      s*t         j                  j                  | j                  |«      }t        j                  |dd¬«      5 }t        j                  |«      }ddd«       |S # 1 sw Y   S xY w)z*Default converter for the inc:// protocol.rµ  r¥   r   N)	rq   rr   Úisabsr&   r|   r°   r#  r³   r´   )ræ   rÅ   r)  r*   s       r/   rð  zConfigurator.inc_convertº  s^   € ä�w‰w�}‰}˜UÔ#Ü—G‘G—L‘L §¡¨EÓ2ˆEÜ�[‰[˜ ¨gÕ6¸!Ü—Y‘Y˜q“\ˆF÷ 7àˆ÷ 7àˆús   Á"BÂBr�   )rë   rï   rð   rû  r   Úvalue_convertersrç   rü  r  rð  Ú__classcell__)rõ  s   @r/   rï  rï  ‹  s5   ø„ áÐ,×=Ñ=Ó>ÐØ+Ð�UÑõ(òò@ör1   rï  c                   ó$   — e Zd ZdZdd„Zd„ Zd„ Zy)ÚSubprocessMixinzC
    Mixin for running subprocesses and capturing their output
    Nc                 ó    — || _         || _        y r�   )ÚverboseÚprogress)ræ   r
  r  s      r/   rç   zSubprocessMixin.__init__È  s   € ØˆŒØ ˆ�r1   c                 ór  — | j                   }| j                  }	 |j                  «       }|sn{|�
 |||«       nn|s t        j                  j                  d«       n.t        j                  j                  |j                  d«      «       t        j                  j                  «        ŒŽ|j                  «        y)z¨
        Read lines from a subprocess' output stream and either pass to a progress
        callable (if specified) or write progress information to sys.stderr.
        Nre  r¥   )	r  r
  Úreadliner‹   ÚstderrrÎ   r#  Úflushr»   )ræ   r­   r¤  r  r
  r.   s         r/   r¾  zSubprocessMixin.readerÌ  s‹   € ð
 —=‘=ˆØ—,‘,ˆØØ—‘Ó!ˆAÙØØÐ#Ù˜˜GÕ$áÜ—J‘J×$Ñ$ SÕ)ä—J‘J×$Ñ$ Q§X¡X¨gÓ%6Ô7Ü—
‘
× Ñ Ô"ð ð 	�‰�r1   c                 óZ  — t        j                  |ft         j                  t         j                  dœ|¤Ž}t        j                  | j
                  |j                  df¬«      }|j                  «        t        j                  | j
                  |j                  df¬«      }|j                  «        |j                  «        |j                  «        |j                  «        | j                  �| j                  dd«       |S | j                  rt        j                  j                  d«       |S )N)Ústdoutr  r  )r  rä  r  zdone.Úmainzdone.
)Ú
subprocessÚPopenÚPIPEÚ	threadingÚThreadr¾  r  r¤  r  Úwaitr&   r  r
  r‹   rÎ   )ræ   Úcmdrå  rš   Út1Út2s         r/   Úrun_commandzSubprocessMixin.run_commandá  sÑ   € Ü×Ñ˜SÐ[¬¯©ÄÇÁÑ[ÐTZÑ[ˆÜ×Ñ T§[¡[¸¿¹À(Ð7KÔLˆØ
�‰Œ
Ü×Ñ T§[¡[¸¿¹À(Ð7KÔLˆØ
�‰Œ
Ø	�‰ŒØ
�‰Œ	Ø
�‰Œ	Ø�=‰=Ð$Ø�M‰M˜' 6Ô*ð ˆð �\Š\Ü�J‰J×Ñ˜YÔ'Øˆr1   )FN)rë   rï   rð   rÔ  rç   r¾  r  rD   r1   r/   r  r  Ã  s   „ ñó!òó*r1   r  c                 óL   — t        j                  dd| «      j                  «       S )z,Normalize a python package name a la PEP 503z[-_.]+r¢  )r¥  Úsubr•   )rX   s    r/   Únormalize_namer  ñ  s    € ô �6‰6�(˜C Ó&×,Ñ,Ó.Ð.r1   c                   ó(   — e Zd ZdZdZdd„Zd„ Zd„ Zy)Ú
PyPIRCFilezhttps://upload.pypi.org/legacy/ÚpypiNc                 óž   — |€=t         j                  j                  t         j                  j                  d«      d«      }|| _        || _        y )Nrƒ  z.pypirc)rq   rr   r&   r‡  r¨  r[   )ræ   rÒ  r[   s      r/   rç   zPyPIRCFile.__init__  s8   € Øˆ:Ü—‘—‘œbŸg™g×0Ñ0°Ó5°yÓAˆBØˆŒØˆ�r1   c                 ó  — i }t         j                  j                  | j                  «      �rÔ| j                  xs | j
                  }t        j                  «       }|j                  | j                  «       |j                  «       }d|v �r|j                  dd«      }|j                  d«      D �cg c]&  }|j                  «       dk7  sŒ|j                  «       ‘Œ( }}|g k(  r	d|v r°dg}|S |D ]¦  }d|i}|j                  |d«      |d<   d| j
                  fd	| j                  fd
fD ]2  \  }}	|j                  ||«      r|j                  ||«      ||<   Œ.|	||<   Œ4 |dk(  r || j
                  dfv r| j
                  |d<   Œ“|d   |k7  sŒœ|d   |k7  sŒ¥i }Œ¨ |S d|v red}|j                  |d«      r|j                  |d«      }n| j
                  }|j                  |d«      |j                  |d«      ||| j                  dœ}|S c c}w )NÚ	distutilszindex-serversr  r   r"  Úserverr–  Ú
repositoryÚrealm)r—  Nzserver-loginr—  )r–  r—  r'  r&  r(  )rq   rr   r	  r¨  r[   ÚDEFAULT_REPOSITORYr   ÚRawConfigParserr²   r¾   r¹  rž   r]   ÚDEFAULT_REALMÚ
has_option)
ræ   r*   r'  rô  r¾   Úindex_serversr&  Ú_serversr¡   r™   s
             r/   r²   zPyPIRCFile.read  s#  € Øˆä�7‰7�>‰>˜$Ÿ-™-Õ(ØŸ™Ò< T×%<Ñ%<ˆJä!×1Ñ1Ó3ˆFØ�K‰K˜Ÿ™Ô&Ø—‘Ó(ˆHØ˜hÒ&à &§
¡
¨;¸Ó H�Ø9F×9LÑ9LÈTÔ9RÓkÑ9R¨vÐV\×VbÑVbÓVdÐhjÓVj˜FŸL™L�NÐ9R�ÐkØ˜r’>à Ñ)Ø$* 8˜ðF ˆóC #+˜Ø"*¨FÐ!3˜Ø-3¯Z©Z¸À
Ó-K˜˜zÑ*ð /;¸D×<SÑ<SÐ-TÐW^Ð`d×`rÑ`rÐVsØ-?ó-A™L˜C à%×0Ñ0°¸Ô=Ø.4¯j©j¸ÀÓ.E  s¢à.5  s¢ð-Að # fÒ,°À×@WÑ@WÐY_Ð?`Ñ1`Ø37×3JÑ3J˜F <Ò0Ø$ XÑ.°*Ó<ÀÈÑAUÐYcÓAcØ%'™Fð% #+ðB ˆð   8Ñ+à'�Ø×$Ñ$ V¨\Ô:Ø!'§¡¨F°LÓ!A‘Jà!%×!8Ñ!8�Jà &§
¡
¨6°:Ó >Ø &§
¡
¨6°:Ó >Ø",Ø$Ø!×/Ñ/ñ�ð ˆùòO ls   Â0HÃ	Hc                 óZ  — t        j                  «       }| j                  }|j                  |«       |j	                  d«      s|j                  d«       |j                  dd|«       |j                  dd|«       t        |d«      5 }|j                  |«       d d d «       y # 1 sw Y   y xY w)Nr"  r–  r—  r  )	r   r*  r¨  r²   Úhas_sectionrÊ   rÍ   r#  rÎ   )ræ   r–  r—  rô  rÒ  r)  s         r/   r[  zPyPIRCFile.updateB  s€   € ä×-Ñ-Ó/ˆØ�]‰]ˆØ�‰�BŒØ×!Ñ! &Ô)Ø×Ñ˜vÔ&Ø�
‰
�6˜: xÔ0Ø�
‰
�6˜: xÔ0Ü�"�cŒ]˜aØ�L‰L˜ŒO÷ �]‰]ús   ÂB!Â!B*©NN)rë   rï   rð   r)  r+  rç   r²   r[  rD   r1   r/   r!  r!    s   „ à:ÐØ€Móò3ój
r1   r!  c                 óJ   — t        | j                  ¬«      j                  «       S )zG
    Read the PyPI access configuration as supported by distutils.
    )r[   )r!  r[   r²   ©r  s    r/   Ú_load_pypircr4  O  s   € ô ˜%Ÿ)™)Ô$×)Ñ)Ó+Ð+r1   c                 ó`   — t        «       j                  | j                  | j                  «       y r�   )r!  r[  r–  r—  r3  s    r/   Ú_store_pypircr6  V  s   € ÜƒL×Ñ˜Ÿ™¨¯©Õ7r1   c                  ó¢  — t         j                  dk(  rsdt        j                  j	                  «       v rydt        j                  j	                  «       v rydt        j                  j	                  «       v ryt        j
                  S dt         j                  v rt         j                  d   S t         j                  d	k7  st        t         d
«      st        j
                  S t        j                  «       \  } }}}}| j	                  «       j                  dd«      } |j                  dd«      j                  dd«      }| dd dk(  r| ›d|›�S | dd dk(  rB|d   dk\  rÚd} dt        |d   «      dz
  |dd fz  }dddœ}|d|t        j                     z  z  }n | dd dk(  rddlm}  |«       S | dd  d!k(  rJd!} t        j                  d"t        j                   «      }|j#                  |«      }|rJ|j%                  «       }n9| dd  d#k(  r1ddl}		 dd$lm}
 |	j/                  |
j1                  «       | ||«      \  } }}| ›d|›d|›�S # t,        $ r ddl}
Y Œ?w xY w)%aú  Return a string that identifies the current platform.  This is used mainly to
    distinguish platform-specific build directories and platform-specific built
    distributions.  Typically includes the OS name and version and the
    architecture (as supplied by 'os.uname()'), although the exact information
    included depends on the OS; eg. on Linux, the kernel version isn't
    particularly important.

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

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

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

    r�  Úamd64ú	win-amd64z(arm)ú	win-arm32z(arm64)z	win-arm64Ú_PYTHON_HOST_PLATFORMr/  Úunamerp   r   rV   ri   r¢  Né   ÚlinuxÚsunosr   Ú5Úsolarisz%d.%sr¤   é   Ú32bitÚ64bit)iÿÿÿl   ÿÿÿÿ z.%sÚaix)Úaix_platformé   Úcygwinz[\d.]+Údarwin)Ú	sysconfig)rq   rX   r‹   rÇ  r•   Úplatformr…  rŠ   r<  r#   ÚintÚmaxsizeÚ_aix_supportrF  r¥  rB  ÚASCIIr   rÁ   Ú_osx_supportr%  rJ  ÚImportErrorÚget_platform_osxÚget_config_vars)Úosnamer�  ÚreleaserÇ  ÚmachineÚbitnessrF  Úrel_rer)   rP  rJ  s              r/   Úget_host_platformrY  `  s0  € ô( 
‡w�w�$‚Ø”c—k‘k×'Ñ'Ó)Ñ)ØØ”c—k‘k×'Ñ'Ó)Ñ)ØØœŸ™×)Ñ)Ó+Ñ+ØÜ�|‰|Ðð ¤"§*¡*Ñ,Ü�z‰zÐ1Ñ2Ð2ä	‡w�w�'Ò¤¬¨WÔ!5ô �|‰|Ðô 13·±³
Ñ-€VˆT�7˜G Wð �\‰\‹^×#Ñ# C¨Ó,€FØ�o‰o˜c 3Ó'×/Ñ/°°SÓ9€Gàˆbˆq€z�WÒò !¡'Ð*Ð*à	��ˆ�wÒ	Ø�1‰:˜ÒØˆFØ¤ W¨Q¡Z£°1Ñ!4°g¸a¸b°kÐ BÑBˆGð $+ÀÑIˆGØ�u˜w¤s§{¡{Ñ3Ñ3Ñ3‰Gà	��ˆ�uÒ	Ý-Ù‹~ÐØ	��ˆ�xÒ	ØˆÜ—‘˜I¤r§x¡xÓ0ˆØ�L‰L˜Ó!ˆÙØ—g‘g“i‰GØ	��ˆ�xÒ	Ûð	Ý+ð $0×#@Ñ#@À×AZÑAZÓA\Ð^dÐfmÐovÓ#wÑ ˆ�˜â¢©'Ð2Ð2øô	 ò 	Ýð	ús   ÈH> È>IÉIÚwin32r9  r:  )Úx86Úx64Úarmc                  ó°   — t         j                  dk7  r
t        «       S t         j                  j	                  d«      } | t
        vr
t        «       S t
        |    S )Nr�  ÚVSCMD_ARG_TGT_ARCH)rq   rX   rY  r…  r¹  Ú_TARGET_TO_PLAT)Úcross_compilation_targets    r/   Úget_platformrb  º  sG   € Ü	‡w�w�$‚Ü Ó"Ð"Ü!Ÿz™zŸ~™~Ð.BÓCÐØ¤Ñ6Ü Ó"Ð"ÜÐ3Ñ4Ð4r1   r1  )é   r�   rb  ra  )…r°   Úcollectionsr   Ú
contextlibrà  Úglobr   r~  r>  r³   Úloggingrq   r@  r¥  rÜ   r•  rQ  r  r‹   r,  rÑ   r¼   r  Údummy_threadingrX  r   r   Úcompatr   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   Ú	getLoggerrë   r  rB  r   rP   rO   r:   rC   r?   r`   r%   rF   rl   r†   rŽ   r“   rœ   r¢   rÆ   rÏ   ÚcontextmanagerrÕ   rØ   rá   ré   rã   rø   rú   rk  rm  ÚVERBOSErz  r¶   rŒ  r�  r“  r˜  rœ  r   ÚIr§  r£  r¬  r¯  r°  r·  rÀ  rÄ  rÅ  rÈ  rÊ  rÖ  rè  ÚARCHIVE_EXTENSIONSr<  rF  rr  rM  r}  rw  rx  ry  rƒ  r¨  r„  r…  r‡  r°  r´  rÄ  rÈ  rÐ  rÒ  rÞ  rè  rï  r  r  r!  r4  r6  rY  r`  rb  rD   r1   r/   Ú<module>ro     s'  ðó
 Ý Û Û 
Ý #Û 	Û Û Û 	Û Û 	Û ðÛó Û 
Û Û Û ð(Ûó å ÷2÷ 2÷ 2÷ 2÷ 2ó 2ð 
ˆ×	Ñ	˜8Ó	$€ð ˆR�Z‰ZÐ)Ó*€
Ø�R—Z‘ZÐ 3Ó4Ð ØˆR�Z‰ZÐ5Ó6€
ØˆB�J‰JÐDÓE€	Ø€R‡Z�Z�Ó€Ø€b‡j�j�Ó€ØˆB�J‰J�{Ó#€	Øˆr�z‰zÐEÓF€òW!òtytòxò4òó$ò ò,ò^ð& ×Ññó ðð ×Ññó ðð ×Ñò&ó ð&ô�fô ò  ô6w�6ô wòtô�&ô ð4 ˆ2�:‰:ðð Ÿ:™:ó	'€òó>&(óRò"ò&òòð &˜2Ÿ:™:ð '8Ø9;¿¹ó?Ð à�—‘Ð,Ó-€óð4 �"—*‘*ð 9ó :€ò/ò ò8ð* DÐ òò#ô)ˆFô )ôXC�ô CôRF!�ô F!ðZ UÐ óAòHð$ 	&€ôW+ˆvô W+ð| ˆB�J‰J�~Ó&€	Ø"˜Ÿ
™
Ð#?Ó@Ð Ø �b—j‘jÐ!5Ó6Ð òòñ8 ß\Ñ\ô˜'×1Ñ1ô ôBÐ'ô ôT3˜<¨ô 3ô#�	×#Ñ#ô #ñ ô'˜	×/Ñ/ô 'ô"<�)×'Ñ'ô <ò2$ôˆfô ô�ô ô6"�ô "ô,5Ð#ô 5ôp+�fô +ò\/ô"J�ô JòZ,ò8òP3ðh ØØñ€ó5øðO= ò Ø
ƒCðûð ò (Þ'ð(ús#   ¶M6 ÁN Í6NÎ NÎ	NÎN