ó •�abc@sãddlZddlmZddlZddlZddlmZddlZddl Z ddl Z ddl Z ddl Z ddl Z ddlZddlZyddlZWnek rÍdZnXddlZddlZddlZddlZddlZyddlZWnek r9ddlZnXddlZddlmZddlmZmZmZm 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/m0Z0e j1e2ƒZ3dZ4e j5e4ƒZ6dZ7d e7d Z8e7d Z9d Z:d e:de9de4d e:de9dZ;dZ<de;de<de;dZ=e8d e4e8dZ>de>dZ?de7de?de=dZ@e j5e@ƒZAde:de9d ZBe j5eBƒZCd„ZDd „ZEd!„ZFd"„ZGddd#„ZHd$„ZId%„ZJd&„ZKejLd'„ƒZMejLd(„ƒZNejLd)d*„ƒZOd+ePfd,„ƒYZQd-„ZRd.ePfd/„ƒYZSd0„ZTd1ePfd2„ƒYZUe j5d3e jVƒZWd4„ZXdd5„ZYd6„ZZd7„Z[d8„Z\d9„Z]d:„Z^e j5d;e j_ƒZ`e j5d<ƒZadd=„Zbe j5d>ƒZcd?„Zdd@„ZedA„ZfdBZgdC„ZhdD„ZidEePfdF„ƒYZjdGePfdH„ƒYZkdIePfdJ„ƒYZld€ZmdendR„ZodS„Zpd�ZqdZePfd[„ƒYZre j5d\ƒZse j5d]ƒZte j5d^ƒZud_„Zd`„Zver´ddalmwZxmyZymzZzdbe%j{fdc„ƒYZ{ddexfde„ƒYZwdfewe(fdg„ƒYZ|nej}dh Z~e~d‚kr dje%jfdk„ƒYZer dle%j€fdm„ƒYZ€q ndne&j�fdo„ƒYZ�erFdpe&j‚fdq„ƒYZ‚ndre&jƒfds„ƒYZƒdt„Z„duePfdv„ƒYZ…dwe…fdx„ƒYZ†dye…fdz„ƒYZ‡d{e)fd|„ƒYZˆd}ePfd~„ƒYZ‰d„ZŠdS(ƒiÿÿÿÿN(tdeque(tiglobi(tDistlibException(t string_typest text_typetshutilt raw_inputtStringIOtcache_from_sourceturlopenturljointhttplibt xmlrpclibt splittypet HTTPHandlertBaseConfiguratort valid_identt Containert configparsertURLErrortZipFiletfsdecodetunquotes\s*,\s*s (\w|[.-])+s(\*|:(\*|\w+):|t)s\*?s([<>=!~]=)|[<>]t(s)?\s*(s)(s)\s*(s))*s(from\s+(?P.*))s \(\s*(?Pt|s)\s*\)|(?Ps\s*)s)*s \[\s*(?Ps)?\s*\]s(?Ps \s*)?(\s*s)?$s(?Ps )\s*(?Pc Cskd„}d}tj|ƒ}|rg|jƒ}|d}|dpK|d}|dsad}nd}|djƒ}|s–d}d}|d} n{|ddkr³d |}ntj|ƒ} g| D]}||ƒ^qÉ}d |d jg|D]} d | ^qôƒf} |d s$d} ntj |d ƒ} t d|d|d| d| d|d|ƒ}n|S(NcSs|jƒ}|d|dfS(Ntoptvn(t groupdict(tmtd((s</usr/lib/python2.7/site-packages/pip/_vendor/distlib/util.pytget_constraintYs tdntc1tc2tdireftis<>!=s~=s%s (%s)s, s%s %stextnamet constraintstextrast requirementtsourceturl( tNonetREQUIREMENT_REtmatchRtstriptRELOP_IDENT_REtfinditertjointCOMMA_REtsplitR( tsRtresultRRR&tconsR+tconstrtrstiteratortconR(((s</usr/lib/python2.7/site-packages/pip/_vendor/distlib/util.pytparse_requirementWs4       0  cCsõd„}i}xß|D]×\}}}tjj||ƒ}x°t|ƒD]¢}tjj||ƒ} x„t| ƒD]v} ||| ƒ} |dkr£|j| dƒqo||| ƒ} |jtjjdƒjdƒ} | d| || RAtrstrip(tresources_roottrulesREt destinationsRDtsuffixtdesttprefixtabs_basetabs_globtabs_patht resource_filetrel_pathtrel_dest((s</usr/lib/python2.7/site-packages/pip/_vendor/distlib/util.pytget_resources_dests|s  !cCs:ttdƒrt}ntjttdtjƒk}|S(Nt real_prefixt base_prefix(thasattrtsystTrueRMtgetattr(R6((s</usr/lib/python2.7/site-packages/pip/_vendor/distlib/util.pytin_venv—s cCs7tjjtjƒ}t|tƒs3t|ƒ}n|S(N(R?R@tnormcaseRXt executablet isinstanceRR(R6((s</usr/lib/python2.7/site-packages/pip/_vendor/distlib/util.pytget_executable¡s cCs„|}xwtrt|ƒ}|}| r7|r7|}n|r |djƒ}||kr]Pn|r|d|||f}q|q q W|S(Nis %c: %s %s(RYRtlower(tpromptt allowed_charst error_prompttdefaulttpR5tc((s</usr/lib/python2.7/site-packages/pip/_vendor/distlib/util.pytproceed±s     cCsVt|tƒr|jƒ}ni}x+|D]#}||kr+||||®R$cCs¶tjj|ƒ}||jkr²tjj|ƒ r²|jj|ƒtjj|ƒ\}}|j|ƒtj d|ƒ|j s“tj |ƒn|j r²|j j|ƒq²ndS(Ns Creating %s(R?R@R¼R³R»R¹R4RÁRÃRÄR²tmkdirR¶R¸(R¢R@RRÕ((s</usr/lib/python2.7/site-packages/pip/_vendor/distlib/util.pyRÁ°s"   cCs�t|| ƒ}tjd||ƒ|js|sD|j||ƒrf|sSd}qf|t|ƒ}ntj|||t ƒn|j |ƒ|S(NsByte-compiling %s to %s( RRÃRÄR²RÀR,RBt py_compiletcompileRYRº(R¢R@toptimizetforceRMtdpathtdiagpath((s</usr/lib/python2.7/site-packages/pip/_vendor/distlib/util.pyt byte_compile¼s   cCstjj|ƒrtjj|ƒr‘tjj|ƒ r‘tjd|ƒ|js`tj |ƒn|j r ||j krŽ|j j |ƒqŽq qtjj|ƒr¬d}nd}tjd||ƒ|jsÞtj |ƒn|j r||j kr |j j |ƒq qndS(NsRemoving directory tree at %stlinktfilesRemoving %s %s(R?R@R»tisdirRÅRÃtdebugR²RR”R¶R¸R­R·(R¢R@R5((s</usr/lib/python2.7/site-packages/pip/_vendor/distlib/util.pytensure_removedÊs"%     cCsjt}x]|setjj|ƒr:tj|tjƒ}Pntjj|ƒ}||kr\Pn|}q W|S(N(RµR?R@R»taccesstW_OKRÂ(R¢R@R6tparent((s</usr/lib/python2.7/site-packages/pip/_vendor/distlib/util.pyt is_writableßs   cCs |j|jf}|jƒ|S(sV Commit recorded changes, turn off recording, return changes. (R·R¸R´(R¢R6((s</usr/lib/python2.7/site-packages/pip/_vendor/distlib/util.pytcommitës cCsÇ|js¹x9t|jƒD](}tjj|ƒrtj|ƒqqWt|jdt ƒ}x\|D]Q}tj |ƒ}|r¥tjj ||dƒ}tj |ƒntj |ƒqaWn|j ƒdS(Ntreversei(R²tlistR·R?R@R»R­tsortedR¸RYtlistdirR2trmdirR´(R¢RÕtdirsRtflisttsd((s</usr/lib/python2.7/site-packages/pip/_vendor/distlib/util.pytrollbackõs  N(R¦RªRµR£R´RºRÀRYRÌR,RÔRÖRØRâtset_executable_modeRÁRëRðRôRõRþ(((s</usr/lib/python2.7/site-packages/pip/_vendor/distlib/util.pyR±Qs             cCs‹|tjkrtj|}n t|ƒ}|dkr@|}nG|jdƒ}t||jdƒƒ}x|D]}t||ƒ}qnW|S(Nt.i(RXtmodulest __import__R,R4RZRF(t module_namet dotted_pathtmodR6tpartsRe((s</usr/lib/python2.7/site-packages/pip/_vendor/distlib/util.pytresolves    t ExportEntrycBs;eZd„Zed„ƒZd„Zd„ZejZRS(cCs(||_||_||_||_dS(N(R&RMRKRŽ(R¢R&RMRKRŽ((s</usr/lib/python2.7/site-packages/pip/_vendor/distlib/util.pyR£s   cCst|j|jƒS(N(RRMRK(R¢((s</usr/lib/python2.7/site-packages/pip/_vendor/distlib/util.pyR‰scCs d|j|j|j|jfS(Ns(R&RMRKRŽ(R¢((s</usr/lib/python2.7/site-packages/pip/_vendor/distlib/util.pyt__repr__!scCsdt|tƒst}nH|j|jko]|j|jko]|j|jko]|j|jk}|S(N(R^RRµR&RMRKRŽ(R¢totherR6((s</usr/lib/python2.7/site-packages/pip/_vendor/distlib/util.pyt__eq__%s ( R¦RªR£R R‰R R R¤t__hash__(((s</usr/lib/python2.7/site-packages/pip/_vendor/distlib/util.pyRs    sµ(?P(\w|[-.+])+) \s*=\s*(?P(\w+)([:\.]\w+)*) \s*(\[\s*(?P\w+(=\w+)?(,\s*\w+(=\w+)?)*)\s*\])? c CsStj|ƒ}|sId}d|ks3d|krOtd|ƒ‚qOn|jƒ}|d}|d}|jdƒ}|dkr”|d}}n4|dkr³td|ƒ‚n|jdƒ\}}|d } | dkrd|ksöd|kr td|ƒ‚ng} n(g| jd ƒD]} | jƒ^q"} t|||| ƒ}|S( Nt[t]sInvalid specification '%s'R&tcallablet:iiRŽt,( tENTRY_REtsearchR,RRtcountR4R/R( t specificationRR6RR&R@tcolonsRMRKRŽRÕ((s</usr/lib/python2.7/site-packages/pip/_vendor/distlib/util.pyRy7s2          (cCs|d krd}ntjdkrHdtjkrHtjjdƒ}ntjjdƒ}tjj|ƒr�tj|tj ƒ}|sät j d|ƒqänGytj |ƒt }Wn-tk rãt j d|dt ƒt}nX|s tjƒ}t j d |ƒntjj||ƒS( s¦ 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``. s.distlibtntt LOCALAPPDATAs $localappdatat~s(Directory exists but is not writable: %ssUnable to create %stexc_infos#Default location unusable, using %sN(R,R?R&tenvironR@t expandvarst expanduserRîRñRòRÃtwarningtmakedirsRYtOSErrorRµR’R“R2(RKR6tusable((s</usr/lib/python2.7/site-packages/pip/_vendor/distlib/util.pytget_cache_baseVs&       cCs`tjjtjj|ƒƒ\}}|r?|jddƒ}n|jtjdƒ}||dS(s 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. Rs---s--s.cache(R?R@t splitdriveR¼R>RA(R@RRe((s</usr/lib/python2.7/site-packages/pip/_vendor/distlib/util.pytpath_to_cache_dirs $cCs|jdƒs|dS|S(NR=(tendswith(R5((s</usr/lib/python2.7/site-packages/pip/_vendor/distlib/util.pyt ensure_slash�scCskd}}d|kr^|jddƒ\}}d|krC|}q^|jddƒ\}}n|||fS(Nt@iR(R,R4(tnetloctusernametpasswordRM((s</usr/lib/python2.7/site-packages/pip/_vendor/distlib/util.pytparse_credentials–s    cCs tjdƒ}tj|ƒ|S(Ni(R?tumask(R6((s</usr/lib/python2.7/site-packages/pip/_vendor/distlib/util.pytget_process_umask¡s cCsFt}d}x3t|ƒD]%\}}t|tƒst}PqqW|S(N(RYR,t enumerateR^RRµ(tseqR6tiR5((s</usr/lib/python2.7/site-packages/pip/_vendor/distlib/util.pytis_string_sequence¦ss3([a-z0-9_]+([.-][a-z_][a-z0-9_]*)*)-([a-z0-9_.+-]+)s -py(\d\.?\d?)cCsd}d}t|ƒjddƒ}tj|ƒ}|r[|jdƒ}||jƒ }n|rÏt|ƒt|ƒdkrÏtj tj |ƒd|ƒ}|rÏ|j ƒ}|| ||d|f}qÏn|dkrt j |ƒ}|r|jdƒ|jdƒ|f}qn|S(sw Extract name, version, python version from a filename (no extension) Return name, version, pyver or None t t-is\biN( R,RR>tPYTHON_VERSIONRR„tstartRBtreR.tescapetendtPROJECT_NAME_AND_VERSION(tfilenamet project_nameR6tpyverRtn((s</usr/lib/python2.7/site-packages/pip/_vendor/distlib/util.pytsplit_filenameµs"" ! 's-(?P[\w .-]+)\s*\(\s*(?P[^\s)]+)\)$cCsRtj|ƒ}|s(td|ƒ‚n|jƒ}|djƒjƒ|dfS(sÇ 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. s$Ill-formed name/version string: '%s'R&tver(tNAME_VERSION_RER.RRR/R`(ReRR((s</usr/lib/python2.7/site-packages/pip/_vendor/distlib/util.pytparse_name_and_versionÑs  cCs tƒ}t|pgƒ}t|p'gƒ}d|krS|jdƒ||O}nx¯|D]§}|dkr||j|ƒqZ|jdƒrÔ|d}||krµtjd|ƒn||kr|j|ƒqqZ||krôtjd|ƒn|j|ƒqZW|S(Nt*R3isundeclared extra: %s(R�R­R¹t startswithRÃR(t requestedt availableR6trtunwanted((s</usr/lib/python2.7/site-packages/pip/_vendor/distlib/util.pyt get_extrasàs&          cCs¤i}yqt|ƒ}|jƒ}|jdƒ}|jdƒsRtjd|ƒn$tjdƒ|ƒ}tj |ƒ}Wn&t k rŸ}tj d||ƒnX|S(Ns Content-Typesapplication/jsons(Unexpected response for JSON request: %ssutf-8s&Failed to get external data for %s: %s( R RÄtgetRCRÃRïRsRtRvRwRzt exception(R+R6tresptheaderstcttreaderte((s</usr/lib/python2.7/site-packages/pip/_vendor/distlib/util.pyt_get_external_dataùs  s'https://www.red-dove.com/pypi/projects/cCs9d|djƒ|f}tt|ƒ}t|ƒ}|S(Ns%s/%s/project.jsoni(tupperR t_external_data_base_urlRP(R&R+R6((s</usr/lib/python2.7/site-packages/pip/_vendor/distlib/util.pytget_project_datas cCs6d|djƒ||f}tt|ƒ}t|ƒS(Ns%s/%s/package-%s.jsoni(RQR RRRP(R&tversionR+((s</usr/lib/python2.7/site-packages/pip/_vendor/distlib/util.pytget_package_datastCachecBs)eZdZd„Zd„Zd„ZRS(sæ 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. cCsvtjj|ƒs"tj|ƒntj|ƒjd@dkrQtjd|ƒntjjtjj |ƒƒ|_ dS(su Initialise an instance. :param base: The base directory where the cache should be located. i?isDirectory '%s' is not privateN( R?R@RîRR½RÜRÃRR¼tnormpathRD(R¢RD((s</usr/lib/python2.7/site-packages/pip/_vendor/distlib/util.pyR£"s cCs t|ƒS(sN Converts a resource prefix to a directory name in the cache. (R$(R¢RM((s</usr/lib/python2.7/site-packages/pip/_vendor/distlib/util.pyt prefix_to_dir0scCsºg}x­tj|jƒD]™}tjj|j|ƒ}yZtjj|ƒs^tjj|ƒrntj|ƒn"tjj|ƒr�t j |ƒnWqt k r±|j |ƒqXqW|S(s" Clear the cache. ( R?RùRDR@R2RÅRÆR­RîRR”Rztappend(R¢t not_removedtfn((s</usr/lib/python2.7/site-packages/pip/_vendor/distlib/util.pytclear6s$ (R¦Rªt__doc__R£RXR\(((s</usr/lib/python2.7/site-packages/pip/_vendor/distlib/util.pyRVs  t EventMixincBs>eZdZd„Zed„Zd„Zd„Zd„ZRS(s1 A very simple publish/subscribe system. cCs i|_dS(N(t _subscribers(R¢((s</usr/lib/python2.7/site-packages/pip/_vendor/distlib/util.pyR£KscCs\|j}||kr+t|gƒ|| %s;s %s;t}s (RkRYRmR2(R¢R6RtRvRsRn((s</usr/lib/python2.7/site-packages/pip/_vendor/distlib/util.pytdot s    ( R¦RªR£RoRµRqR¹R­RyRtpropertyRŒRŽ(((s</usr/lib/python2.7/site-packages/pip/_vendor/distlib/util.pyRj�s      3s.tar.gzs.tar.bz2s.tars.zips.tgzs.tbzs.whlc s懇fd†}tjjˆƒ‰tˆƒ‰d}|dkrÇ|jdƒrZd}qÇ|jdƒrxd}d}qÇ|jdƒr–d }d }qÇ|jd ƒr´d}d}qÇtd|ƒ‚nz|dkrt|dƒ}|rZ|jƒ}x|D]}||ƒqþWqZnBt j ||ƒ}|rZ|j ƒ}x|D]}||ƒqCWn|dkr½t j ddkr½xA|jƒD]0} t| jtƒs†| jjdƒ| _q†q†Wn|jˆƒWd|rá|jƒnXdS(Ncs|t|tƒs!|jdƒ}ntjjtjjˆ|ƒƒ}|jˆƒ se|ˆtjkrxt d|ƒ‚ndS(Nsutf-8spath outside destination: %r( R^RtdecodeR?R@R¼R2RCRAR«(R@Re(tdest_dirtplen(s</usr/lib/python2.7/site-packages/pip/_vendor/distlib/util.pyt check_paths !#s.zips.whltzips.tar.gzs.tgzttgzsr:gzs.tar.bz2s.tbzttbzsr:bz2s.tarttarRFsUnknown format for %riisutf-8(s.zips.whl(s.tar.gzs.tgz(s.tar.bz2s.tbz(R?R@R¼RBR,R%R«RtnamelistttarfileRÐtgetnamesRXRrt getmembersR^R&RR�t extractallR~( tarchive_filenameR‘tformatRÊR“tarchiveRátnamesR&ttarinfo((R‘R’s</usr/lib/python2.7/site-packages/pip/_vendor/distlib/util.pyt unarchivesH           c Cs¬tjƒ}t|ƒ}t|dƒ�}xutj|ƒD]d\}}}xR|D]J}tjj||ƒ}||} tjj| |ƒ} |j|| ƒqPWq:WWdQX|S(s*zip a directory tree into a BytesIO objectRÎN( tiotBytesIORBRR?twalkR@R2R�( t directoryR6tdlentzftrootRûRàR&tfulltrelRL((s</usr/lib/python2.7/site-packages/pip/_vendor/distlib/util.pytzip_dirSs    R$tKtMtGtTtPtProgresscBs†eZdZddd„Zd„Zd„Zd„Zd„Zed„ƒZ ed „ƒZ d „Z ed „ƒZ ed „ƒZ RS( tUNKNOWNiidcCs8||_|_||_d|_d|_t|_dS(Ni(R€tcurtmaxR,tstartedtelapsedRµtdone(R¢tminvaltmaxval((s</usr/lib/python2.7/site-packages/pip/_vendor/distlib/util.pyR£js    cCsD||_tjƒ}|jdkr0||_n||j|_dS(N(R´ttimeR¶R,R·(R¢tcurvaltnow((s</usr/lib/python2.7/site-packages/pip/_vendor/distlib/util.pytupdaters    cCs|j|j|ƒdS(N(R¾R´(R¢tincr((s</usr/lib/python2.7/site-packages/pip/_vendor/distlib/util.pyt increment|scCs|j|jƒ|S(N(R¾R€(R¢((s</usr/lib/python2.7/site-packages/pip/_vendor/distlib/util.pyR5€scCs/|jdk r"|j|jƒnt|_dS(N(RµR,R¾RYR¸(R¢((s</usr/lib/python2.7/site-packages/pip/_vendor/distlib/util.pytstop„scCs|jdkr|jS|jS(N(RµR,tunknown(R¢((s</usr/lib/python2.7/site-packages/pip/_vendor/distlib/util.pytmaximum‰scCsZ|jrd}nD|jdkr*d}n,d|j|j|j|j}d|}|S(Ns100 %s ?? %gY@s%3d %%(R¸RµR,R´R€(R¢R6R‡((s</usr/lib/python2.7/site-packages/pip/_vendor/distlib/util.pyt percentage�s   " cCsU|dkr|jdks-|j|jkr6d}ntjdtj|ƒƒ}|S(Nis??:??:??s%H:%M:%S(RµR,R´R€R»tstrftimetgmtime(R¢tdurationR6((s</usr/lib/python2.7/site-packages/pip/_vendor/distlib/util.pytformat_duration˜s- cCsµ|jrd}|j}nƒd}|jdkr9d}ne|jdksZ|j|jkrcd}n;t|j|jƒ}||j|j:}|d|j}d||j|ƒfS(NtDonesETA iÿÿÿÿiis%s: %s(R¸R·RµR,R´R€tfloatRÈ(R¢RMtt((s</usr/lib/python2.7/site-packages/pip/_vendor/distlib/util.pytETA¡s   ! cCsh|jdkrd}n|j|j|j}x(tD] }|dkrLPn|d:}q6Wd||fS(Nigièg@�@s%d %sB/s(R·R´R€tUNITS(R¢R6tunit((s</usr/lib/python2.7/site-packages/pip/_vendor/distlib/util.pytspeed´s   (R¦RªRÂR£R¾RÀR5RÁR�RÃRÄRÈRÌRÏ(((s</usr/lib/python2.7/site-packages/pip/_vendor/distlib/util.pyR²gs    s \{([^}]*)\}s[^/\\,{]\*\*|\*\*[^/\\,}]s^[^{]*\}|\{[^}]*$cCsZtj|ƒr(d}t||ƒ‚ntj|ƒrPd}t||ƒ‚nt|ƒS(sAExtended globbing function that supports ** and {opt1,opt2,opt3}.s7invalid glob %r: recursive glob "**" must be used alones2invalid glob %r: mismatching set marker '{' or '}'(t_CHECK_RECURSIVE_GLOBRR«t_CHECK_MISMATCH_SETt_iglob(t path_globRË((s</usr/lib/python2.7/site-packages/pip/_vendor/distlib/util.pyRÉsc csmtj|dƒ}t|ƒdkr~|\}}}x3|jdƒD]4}x+tdj|||fƒƒD] }|VqhWqCWnëd|kr©xÜt|ƒD] }|Vq—WnÀ|jddƒ\}}|dkrÖd}n|dkrëd}n|jdƒ}|jdƒ}x]tj|ƒD]L\}}} tj j |ƒ}x(ttj j||ƒƒD] } | VqVWqWdS( NiRR$s**RRBR=s\( t RICH_GLOBR4RBRÒR2t std_iglobRCR?R¥R@RW( RÓtrich_path_globRMR�RKtitemR@tradicaltdirRàR[((s</usr/lib/python2.7/site-packages/pip/_vendor/distlib/util.pyRÒÔs(%      "(t HTTPSHandlertmatch_hostnametCertificateErrortHTTPSConnectioncBseZdZeZd„ZRS(c CsÝtj|j|jf|jƒ}t|dtƒrI||_|jƒnt t dƒs¯|j rmt j }n t j }t j||j|jd|dt jd|j ƒ|_n®t jt jƒ}|jt jO_|jrõ|j|j|jƒni}|j rHt j |_|jd|j ƒtt dtƒrH|j|d!           N(R¦RªR,RâRYRøRý(((s</usr/lib/python2.7/site-packages/pip/_vendor/distlib/util.pyRÝøsRÚcBs&eZed„Zd„Zd„ZRS(cCs#tj|ƒ||_||_dS(N(tBaseHTTPSHandlerR£RâRø(R¢RâRø((s</usr/lib/python2.7/site-packages/pip/_vendor/distlib/util.pyR£#s  cOs7t||Ž}|jr3|j|_|j|_n|S(s 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¢RgRhR6((s</usr/lib/python2.7/site-packages/pip/_vendor/distlib/util.pyt _conn_maker(s   cCs_y|j|j|ƒSWnAtk rZ}dt|jƒkrTtd|jƒ‚q[‚nXdS(Nscertificate verify faileds*Unable to verify server certificate for %s(tdo_openRÿRtstrtreasonRÜRç(R¢treqRO((s</usr/lib/python2.7/site-packages/pip/_vendor/distlib/util.pyt https_open8s(R¦RªRYR£RÿR(((s</usr/lib/python2.7/site-packages/pip/_vendor/distlib/util.pyRÚ"s  tHTTPSOnlyHandlercBseZd„ZRS(cCstd|ƒ‚dS(NsAUnexpected HTTP request on what should be a secure connection: %s(R(R¢R((s</usr/lib/python2.7/site-packages/pip/_vendor/distlib/util.pyt http_openLs(R¦RªR(((s</usr/lib/python2.7/site-packages/pip/_vendor/distlib/util.pyRKsiitHTTPcBseZddd„ZRS(R$cKs5|dkrd}n|j|j|||�ƒdS(Ni(R,t_setupt_connection_class(R¢RçRèRh((s</usr/lib/python2.7/site-packages/pip/_vendor/distlib/util.pyR£Xs  N(R¦RªR,R£(((s</usr/lib/python2.7/site-packages/pip/_vendor/distlib/util.pyRWstHTTPScBseZddd„ZRS(R$cKs5|dkrd}n|j|j|||�ƒdS(Ni(R,RR (R¢RçRèRh((s</usr/lib/python2.7/site-packages/pip/_vendor/distlib/util.pyR£`s  N(R¦RªR,R£(((s</usr/lib/python2.7/site-packages/pip/_vendor/distlib/util.pyR _st TransportcBseZdd„Zd„ZRS(icCs ||_tjj||ƒdS(N(RéR R R£(R¢Rét use_datetime((s</usr/lib/python2.7/site-packages/pip/_vendor/distlib/util.pyR£gs cCsŽ|j|ƒ\}}}tdkr<t|d|jƒ}nN|j sY||jdkr}||_|tj|ƒf|_n|jd}|S(NiiRéii(ii(t get_host_infot _ver_infoRRét _connectiont_extra_headersR tHTTPConnection(R¢Rçthtehtx509R6((s</usr/lib/python2.7/site-packages/pip/_vendor/distlib/util.pytmake_connectionks   (R¦RªR£R(((s</usr/lib/python2.7/site-packages/pip/_vendor/distlib/util.pyR fs t SafeTransportcBseZdd„Zd„ZRS(icCs ||_tjj||ƒdS(N(RéR RR£(R¢RéR ((s</usr/lib/python2.7/site-packages/pip/_vendor/distlib/util.pyR£xs cCs­|j|ƒ\}}}|s'i}n|j|dR3(((s</usr/lib/python2.7/site-packages/pip/_vendor/distlib/util.pyR2ãs     tSubprocessMixincBs)eZedd„Zd„Zd„ZRS(cCs||_||_dS(N(tverbosetprogress(R¢RBRC((s</usr/lib/python2.7/site-packages/pip/_vendor/distlib/util.pyR£s cCsž|j}|j}x{tr�|jƒ}|s1Pn|dk rM|||ƒq|sftjjdƒntjj|jdƒƒtjj ƒqW|j ƒdS(s¨ Read lines from a subprocess' output stream and either pass to a progress callable (if specified) or write progress information to sys.stderr. Rsutf-8N( RCRBRYtreadlineR,RXtstderrR�R�tflushR~(R¢RpRüRCRBR5((s</usr/lib/python2.7/site-packages/pip/_vendor/distlib/util.pyRN"s     cKsàtj|dtjdtj|�}tjd|jd|jdfƒ}|jƒtjd|jd|jdfƒ}|jƒ|j ƒ|j ƒ|j ƒ|j dk rÀ|j ddƒn|j rÜtjjdƒn|S(NtstdoutRER¿Rgsdone.tmainsdone. (t subprocesstPopentPIPEt threadingtThreadRNRGR5REtwaitR2RCR,RBRXR�(R¢tcmdRhRett1tt2((s</usr/lib/python2.7/site-packages/pip/_vendor/distlib/util.pyt run_command7s$ $     N(R¦RªRµR,R£RNRR(((s</usr/lib/python2.7/site-packages/pip/_vendor/distlib/util.pyRAs cCstjdd|ƒjƒS(s,Normalize a python package name a la PEP 503s[-_.]+R3(R6tsubR`(R&((s</usr/lib/python2.7/site-packages/pip/_vendor/distlib/util.pytnormalize_nameHs(s.tar.gzs.tar.bz2s.tars.zips.tgzs.tbzs.whl(R$R­R®R¯R°R±(ii(‹Rst collectionsRt contextlibR*tglobRRÕR£RvtloggingR?RåR6RRšRìt ImportErrorR,RIRXR™R’RRLtdummy_threadingR»R$RtcompatRRRRRR R R R R RRRRRRRRRt getLoggerR¦RÃtCOMMARæR3tIDENTt EXTRA_IDENTtVERSPECtRELOPtBARE_CONSTRAINTSt DIRECT_REFt CONSTRAINTSt EXTRA_LISTtEXTRASt REQUIREMENTR-t RELOP_IDENTR0R<RTR[R_RgRjRŠR‘tcontextmanagerR–R˜RŸR¤R R°R±RRtVERBOSERRyR"R$R&R+R-R1tIR9R4R>R@RARHRPRRRSRURVR^RjtARCHIVE_EXTENSIONSRYR¢R¬RÍR²RÔRÐRÑRÒRÚRþRÛRÜRÝRRrRRR R RRR R!R)R.R2RART(((s</usr/lib/python2.7/site-packages/pip/_vendor/distlib/util.pytsè                    ‚  . %   /    ¶   )           ,H‹6 ] *)   :+