B
    Kkd                 @   sX  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mZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d d	lmZ  d d
l!m"Z"m#Z# d dl$m%Z%m&Z&m'Z'm(Z(m)Z) d dl*m+Z+m,Z,m-Z-m.Z. d dl/m0Z0 er4d dlm1Z2 nd dlm2Z2 e0rd dl3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z:m;Z;m<Z<m=Z=m>Z> d dl?m@Z@ d dlAmBZB d dlCmDZD ddddddddddddd d!d"d#d$d%d&d'd(d)d*d+d,gZEeFeGZHd-ZId.ZJd/ZKd0eIfZLd1ZMeLeJ eM eK ZNeLeM ZOyd dlPZPeOeJ7 ZOW n  eQk
rB   eHRd2 Y nX yd dlSZSeOeK7 ZOW n  eQk
rx   eHRd3 Y nX d4d' ZTd5d! ZUed6d7d8dd:dZVd;d< ZWd=d ZXdd?dZYd@dA ZZdBd Z[dCd Z\dDd Z]dEd Z^dFd Z_ej`fdGdHZadId ZbdJd ZcddLdZddMd ZedNd  ZfdOdP ZgdQdR ZhdSdT ZidUdV ZjdWdX ZkdKe.dKd9d9fdYdZZld[d\ Zmd]d^ Znd_d` Zoddad"Zpdbd# Zqdcd$ Zrdded%Zsdfdg Ztdhdi ZuG djdk dkevZwG dldm dme2Zxejydndo Zzdpd& Z{dqdr Z|G dsdt dtevZ}ddud+Z~dvdw Zdxdy Zddzd{Zd|d} Zd~d Zdd Zdd Zdd, Zdd Zdd ZdS )    )absolute_importN)deque)pkg_resources)retry)PY2)input)parse)unquote)CommandErrorInstallationError)running_under_virtualenvsite_packages	user_sitevirtualenv_no_globalwrite_delete_marker_file)WINDOWSconsole_to_str
expanduserstdlib_pkgs)MYPY_CHECK_RUNNING)BytesIO)StringIO)OptionalTupleIterableListMatchUnionAnyMappingTextAnyStr	Container)Distribution)Link)SpinnerInterfacermtreedisplay_path
backup_dirasksplitextformat_sizeis_installable_diris_svn_pagefile_contentssplit_leading_dirhas_leading_dirnormalize_pathrenamesget_prog
unzip_file
untar_fileunpack_filecall_subprocesscaptured_stdout
ensure_dirARCHIVE_EXTENSIONSSUPPORTED_EXTENSIONSWHEEL_EXTENSIONget_installed_versionremove_auth_from_urlz.whl)z.tar.bz2z.tbz)z.tar.xzz.txzz.tlzz.tar.lzz	.tar.lzmaz.zip)z.tar.gzz.tgzz.tarzbz2 module is not availablezlzma module is not availablec          
   C   sD   yt |  W n0 tk
r> } z|jtjkr. W dd}~X Y nX dS )z os.path.makedirs without EEXIST.N)osmakedirsOSErrorerrnoEEXIST)pathe rF   9/tmp/pip-install-gxxfd9b7/pip/pip/_internal/utils/misc.pyr9   ]   s
    c           
   C   sL   y,t jtjd } | dkr&dtj S | S W n tttfk
rF   Y nX dS )Nr   )z__main__.pyz-cz	%s -m pippip)	r?   rD   basenamesysargv
executableAttributeError	TypeError
IndexError)progrF   rF   rG   r3   g   s    
i  i  )stop_max_delay
wait_fixedFc             C   s   t j| |td d S )N)ignore_errorsonerror)shutilr&   rmtree_errorhandler)dirrS   rF   rF   rG   r&   u   s    c             C   s2   t |jtj@ r,t |tj | | dS  dS )zOn Windows, the files in .svn are read-only, so when rmtree() tries to
    remove them, an exception is thrown.  We catch that here, remove the
    read-only attribute, and hopefully continue without problems.N)r?   statst_modeS_IREADchmodS_IWRITE)funcrD   exc_inforF   rF   rG   rV   |   s
    rV   c             C   st   t jt j| } tjd dkrB| t d} | t	 d} | 
t  t jj rpd| tt  d  } | S )zTGives the display value for a given path, making it relative to cwd
    if possible.r      replace.N)r?   rD   normcaseabspathrJ   version_infodecodegetfilesystemencodingencodegetdefaultencoding
startswithgetcwdseplen)rD   rF   rF   rG   r'      s    .bakc             C   s:   d}|}x(t j| | r0|d7 }|t| }q
W | | S )z\Figure out the name of a directory to back up the given dir to
    (adding .bak, .bak2, etc)   )r?   rD   existsstr)rW   extn	extensionrF   rF   rG   r(      s    c             C   s2   x&t jdd D ]}||kr|S qW t| |S )NPIP_EXISTS_ACTION )r?   environgetsplitr)   )messageoptionsactionrF   rF   rG   ask_path_exists   s    r|   c             C   sZ   xTt jdrtd|  t| }|  }||krNtd|d|f  q|S qW dS )z@Ask the message interactively, with the given possible responsesPIP_NO_INPUTz7No input was expected ($PIP_NO_INPUT set); question: %sz<Your response (%r) was not one of the expected responses: %sz, N)	r?   rv   rw   	Exceptionr   striplowerprintjoin)ry   rz   responserF   rF   rG   r)      s    c             C   sL   | dkrd| d d  S | dkr,d| d  S | dkr@d| d  S d|  S d S )	Ni@B z%.1fMBg     @@i  i'  z%ikBz%.1fkBz%ibytesrF   )bytesrF   rF   rG   r+      s    c             C   sP   t j| sdS t j| d}t j|r.dS t j| d}t j|rLdS dS )zBIs path is a directory containing setup.py or pyproject.toml?
    Fzsetup.pyTzpyproject.toml)r?   rD   isdirr   isfile)rD   setup_pypyproject_tomlrF   rF   rG   r,      s    c             C   s   t d| ot d| t jS )zT
    Returns true if the page appears to be the index page of an svn repository
    z<title>[^<]*Revision \d+:z#Powered by (?:<a[^>]*?>)?Subversion)researchI)htmlrF   rF   rG   r-      s    c          	   C   s$   t | d}| dS Q R X d S )Nrbzutf-8)openreadre   )filenamefprF   rF   rG   r.      s    c             c   s    x|  |}|sP |V  qW dS )z7Yield pieces of data from a file-like object until EOF.N)r   )filesizechunkrF   rF   rG   read_chunks   s
    
r   c             C   sh   |  d d} d| krHd| kr4| d| dk s<d| krH| ddS d| kr\| ddS | dgS d S )N/\rn   ru   )lstripfindrx   )rD   rF   rF   rG   r/      s    $c             C   sD   d}x:| D ]2}t |\}}|s"dS |dkr0|}q
||kr
dS q
W dS )zyReturns true if all the paths have the same leading path name
    (i.e., everything is in one subdirectory in an archive)NFT)r/   )pathscommon_prefixrD   prefixrestrF   rF   rG   r0      s    
Tc             C   s2   t | } |rtj| } ntj| } tj| S )zN
    Convert a path to its canonical, case-normalized, absolute version.

    )r   r?   rD   realpathrc   rb   )rD   resolve_symlinksrF   rF   rG   r1     s
    c             C   s@   t | \}}| dr8|dd | }|dd }||fS )z,Like os.path.splitext, but take off .tar tooz.tarN)	posixpathr*   r   endswith)rD   baserq   rF   rF   rG   r*     s
    c             C   sz   t j|\}}|r.|r.t j|s.t | t| | t j| \}}|rv|rvyt | W n tk
rt   Y nX dS )z7Like os.renames(), but handles renaming across devices.N)	r?   rD   rx   ro   r@   rU   move
removedirsrA   )oldnewheadtailrF   rF   rG   r2   '  s    
c             C   s   t  s
dS t| ttjS )z
    Return True if path is within sys.prefix, if we're running in a virtualenv.

    If we're not in a virtualenv, all paths are considered "local."

    T)r   r1   ri   rJ   r   )rD   rF   rF   rG   is_local9  s    r   c             C   s   t t| S )z
    Return True if given Distribution object is installed locally
    (i.e. within current virtualenv).

    Always True if we're not in a virtualenv.

    )r   dist_location)distrF   rF   rG   dist_is_localF  s    	r   c             C   s   t t| }|t tS )zF
    Return True if given Distribution is installed in user site.
    )r1   r   ri   r   )r   	norm_pathrF   rF   rG   dist_in_usersiteR  s    r   c             C   s   t t| t tS )z[
    Return True if given Distribution is installed in
    sysconfig.get_python_lib().
    )r1   r   ri   r   )r   rF   rF   rG   dist_in_site_packages[  s    
r   c             C   s8   x2t jD ](}tj|| jd }tj|rdS qW dS )zC
    Return True if given Distribution is an editable install.
    z	.egg-linkTF)rJ   rD   r?   r   project_namer   )r   	path_itemegg_linkrF   rF   rG   dist_is_editablef  s
    r   c                sl   | r
t ndd |r dd  ndd  |r6dd ndd |rHtnd	d
  fddtjD S )a  
    Return a list of installed Distribution objects.

    If ``local_only`` is True (default), only return installations
    local to the current virtualenv, if in a virtualenv.

    ``skip`` argument is an iterable of lower-case project names to
    ignore; defaults to stdlib_pkgs

    If ``include_editables`` is False, don't report editables.

    If ``editables_only`` is True , only report editables.

    If ``user_only`` is True , only report installations in the user
    site directory.

    c             S   s   dS )NTrF   )drF   rF   rG   
local_test  s    z/get_installed_distributions.<locals>.local_testc             S   s   dS )NTrF   )r   rF   rF   rG   editable_test  s    z2get_installed_distributions.<locals>.editable_testc             S   s
   t |  S )N)r   )r   rF   rF   rG   r     s    c             S   s   t | S )N)r   )r   rF   rF   rG   editables_only_test  s    z8get_installed_distributions.<locals>.editables_only_testc             S   s   dS )NTrF   )r   rF   rF   rG   r     s    c             S   s   dS )NTrF   )r   rF   rF   rG   	user_test  s    z.get_installed_distributions.<locals>.user_testc                s:   g | ]2}|r|j kr |r|r|r|qS rF   )key).0r   )r   r   r   skipr   rF   rG   
<listcomp>  s    
z/get_installed_distributions.<locals>.<listcomp>)r   r   r   working_set)
local_onlyr   include_editableseditables_only	user_onlyrF   )r   r   r   r   r   rG   get_installed_distributionsr  s    

r   c             C   s   g }t  r6t r|t qN|t trN|t ntrD|t |t x0|D ](}tj|| jd }tj	|rT|S qTW dS )a  
    Return the path for the .egg-link file if it exists, otherwise, None.

    There's 3 scenarios:
    1) not in a virtualenv
       try to find in site.USER_SITE, then site_packages
    2) in a no-global virtualenv
       try to find in site_packages
    3) in a yes-global virtualenv
       try to find in site_packages, then site.USER_SITE
       (don't look in global location)

    For #1 and #3, there could be odd cases, where there's an egg-link in 2
    locations.

    This method will just return the first one found.
    z	.egg-linkN)
r   r   appendr   r   r?   rD   r   r   r   )r   sitessiteegglinkrF   rF   rG   egg_link_path  s    



r   c             C   s   t | }|r|S | jS )z
    Get the site-packages location of this distribution. Generally
    this is dist.location, except in the case of develop-installed
    packages, where dist.location is the source code location, and we
    want to know where the egg-link file is.

    )r   location)r   r   rF   rF   rG   r     s    	r   c              C   s   t d} t |  | S )zBGet the current umask which involves having to set it temporarily.r   )r?   umask)maskrF   rF   rG   current_umask  s    

r   c             C   s*  t | t| d}ztj|dd}t| o2|}x| D ]}|j}|}|r\t|d }t	j
||}t	j
|}	|ds|drt | q>t |	 ||}
z&t|d}t|
| W dQ R X W d|
  |jd	? }|rt|r|d
@ rt	|dt  d
B  X q>W W d|  X dS )a  
    Unzip the file (with path `filename`) to the destination `location`.  All
    files are written based on system defaults and umask (i.e. permissions are
    not preserved), except that regular file members with any execute
    permissions (user, group, or world) have "chmod +x" applied after being
    written. Note that for windows, any execute changes using os.chmod are
    no-ops per the python docs.
    r   T)
allowZip64rn   r   r   wbN   I   i  )r9   r   zipfileZipFiler0   namelistinfolistr   r/   r?   rD   r   dirnamer   rU   copyfileobjcloseexternal_attrrX   S_ISREGr[   r   )r   r   flattenzipfpzipleadinginfonamefnrW   r   destfpmoderF   rF   rG   r4     s0    




 c             C   s  t | |  ds$|  dr*d}nL|  tr>d}n8|  trRd}n$|  drfd}ntd|  d	}t| |}znt	d
d |
 D }xP|
 D ]B}|j}|rt|d }tj||}| rt | q| r:y||| W n8 tk
r6 } ztd| |j| wW dd}~X Y nX qy||}	W n< ttfk
r } ztd| |j| wW dd}~X Y nX t tj| t|d}
t|	|
 W dQ R X |	  ||| |jd@ rt|dt  dB  qW W d|  X dS )a  
    Untar the file (with path `filename`) to the destination `location`.
    All files are written based on system defaults and umask (i.e. permissions
    are not preserved), except that regular file members with any execute
    permissions (user, group, or world) have "chmod +x" applied after being
    written.  Note that for windows, any execute changes using os.chmod are
    no-ops per the python docs.
    z.gzz.tgzzr:gzzr:bz2zr:xzz.tarrz-Cannot determine compression type for file %szr:*c             S   s   g | ]
}|j qS rF   )r   )r   memberrF   rF   rG   r   3  s    zuntar_file.<locals>.<listcomp>rn   z/In the tar file %s the member %s is invalid: %sNr   r   i  )r9   r   r   BZ2_EXTENSIONSXZ_EXTENSIONSloggerwarningtarfiler   r0   
getmembersr   r/   r?   rD   r   r   issym_extract_memberr~   extractfileKeyErrorrM   r   rU   r   r   utimer   r[   r   )r   r   r   tarr   r   r   rD   excr   r   rF   rF   rG   r5     s\    



c             C   s   t j| } |dks,|  ts,t| rDt| || d d n|dkslt	
| sl|  tt t rxt| | nX|r|drtt| rddlm} |d|j | ntd	| || td
| d S )Nzapplication/zipz.whl)r   zapplication/x-gzipz	text/htmlr   )
Subversionzsvn+zZCannot unpack file %s (downloaded from %s, content-type: %s); cannot detect archive formatz%Cannot determine archive format of %s)r?   rD   r   r   r   ZIP_EXTENSIONSr   
is_zipfiler4   r   
is_tarfileTAR_EXTENSIONSr   r   r5   ri   r-   r.   pip._internal.vcs.subversionr   urlunpackr   criticalr   )r   r   content_typelinkr   rF   rF   rG   r6   d  s,    


raisec	          
   C   s  |dkrg }|dkrg }|r"d}	nt j}	|dkrg }
xF| D ]>}d|ks^d|ks^d|ks^d|krnd|dd }|
| q:W d|
}td| tj	 }|r|
| x|D ]}||d qW y(t j| t jt j|	||d	}|j  W n4 tk
r  } ztd
||  W dd}~X Y nX g }|	dk	rx`t|j }|sHP | }||d  t tjkrzt| n|dk	r2|  q2W z|  W d|jr|j  X |dk	r|jr|d n
|d |jr|j|kr|dkrFt tjkr0|s0td| td|d  td||j|f n:|dkrdtd||j| n|dkrpnt dt!| |sd|S dS )a  
    Args:
      extra_ok_returncodes: an iterable of integer return codes that are
        acceptable, in addition to 0. Defaults to None, which means [].
      unset_environ: an iterable of environment variable names to unset
        prior to calling subprocess.Popen().
    N 
"'z"%s"z\"zRunning command %s)stderrstdinstdoutcwdenvz#Error %s while executing command %serrordoner   z Complete output from command %s:ru   z)
----------------------------------------z,Command "%s" failed with error code %s in %swarnz$Command "%s" had error code %s in %signorezInvalid value: on_returncode=%s)"
subprocessPIPEr`   r   r   r   debugr?   rv   copyupdatepopPopenSTDOUTr  r   r~   r   r   r  readlinerstripgetEffectiveLevelstd_loggingDEBUGspinwait
returncodefinishr   r   r   
ValueErrorrepr)cmdshow_stdoutr  on_returncodeextra_ok_returncodescommand_descextra_environunset_environspinnerr  	cmd_partspartr  r   procr   
all_outputlinerF   rF   rG   r7     s    
 













c          	   C   sv   t | d}| }W dQ R X dtddg}x4|D ],}y||}W n tk
r\   w4Y nX P q4W t|trrt|S )aR  Return the contents of *filename*.

    Try to decode the file contents with utf-8, the preferred system encoding
    (e.g., cp1252 on some Windows machines), and latin1, in that order.
    Decoding a byte string with latin1 will never raise an error. In the worst
    case, the returned string will contain some garbage characters.

    r   Nzutf-8Flatin1)	r   r   localegetpreferredencodingre   UnicodeDecodeError
isinstancer   AssertionError)r   r   data	encodingsencrF   rF   rG   read_text_file	  s    

r4  c             C   s   t |  t|  d S )N)r?   r@   r   )	build_dirrF   rF   rG   _make_build_dir#  s    
r6  c               @   s(   e Zd ZdZdd Zdd Zdd ZdS )	FakeFilezQWrap a list of lines in an object with readline() to make
    ConfigParser happy.c             C   s   dd |D | _ d S )Nc             s   s   | ]
}|V  qd S )NrF   )r   lrF   rF   rG   	<genexpr>,  s    z$FakeFile.__init__.<locals>.<genexpr>)_gen)selflinesrF   rF   rG   __init__+  s    zFakeFile.__init__c             C   sD   y*y
t | jS  tk
r&   | j  S X W n tk
r>   dS X d S )Nru   )nextr:  	NameErrorStopIteration)r;  rF   rF   rG   r  .  s    
zFakeFile.readlinec             C   s   | j S )N)r:  )r;  rF   rF   rG   __iter__7  s    zFakeFile.__iter__N)__name__
__module____qualname____doc__r=  r  rA  rF   rF   rF   rG   r7  (  s   	r7  c               @   s$   e Zd Zedd Zedd ZdS )StreamWrapperc             C   s   || _ |  S )N)orig_stream)clsrG  rF   rF   rG   from_stream=  s    zStreamWrapper.from_streamc             C   s   | j jS )N)rG  encoding)r;  rF   rF   rG   rJ  C  s    zStreamWrapper.encodingN)rB  rC  rD  classmethodrI  propertyrJ  rF   rF   rF   rG   rF  ;  s   rF  c          
   c   s@   t t| }tt| t| zt t| V  W dtt| | X dS )zReturn a context manager used by captured_stdout/stdin/stderr
    that temporarily replaces the sys stream *stream_name* with a StringIO.

    Taken from Lib/support/__init__.py in the CPython repo.
    N)getattrrJ   setattrrF  rI  )stream_nameorig_stdoutrF   rF   rG   captured_outputH  s
    
rQ  c               C   s   t dS )zCapture the output of sys.stdout:

       with captured_stdout() as stdout:
           print('hello')
       self.assertEqual(stdout.getvalue(), 'hello
')

    Taken from Lib/support/__init__.py in the CPython repo.
    r  )rQ  rF   rF   rF   rG   r8   W  s    	c               C   s   t dS )z 
    See captured_stdout().
    r  )rQ  rF   rF   rF   rG   captured_stderrc  s    rR  c               @   s    e Zd ZdZdd Zdd ZdS )cached_propertyzA property that is only computed once per instance and then replaces
       itself with an ordinary attribute. Deleting the attribute resets the
       property.

       Source: https://github.com/bottlepy/bottle/blob/0.11.5/bottle.py#L175
    c             C   s   t |d| _|| _d S )NrE  )rM  rE  r]   )r;  r]   rF   rF   rG   r=  r  s    zcached_property.__init__c             C   s(   |d kr| S |  | }|j| j j< |S )N)r]   __dict__rB  )r;  objrH  valuerF   rF   rG   __get__v  s    zcached_property.__get__N)rB  rC  rD  rE  r=  rW  rF   rF   rF   rG   rS  j  s   rS  c             C   s4   t j| }|dkrt  }||}|r0|jS dS )zCGet the installed version of dist_name avoiding pkg_resources cacheN)r   Requirementr   
WorkingSetr   version)	dist_namer   reqr   rF   rF   rG   r=   ~  s
    
c             C   s   t | dd dS )zConsume an iterable at C speed.r   )maxlenN)r   )iteratorrF   rF   rG   consume  s    r_  c              O   s@   t t| tt| f|}dd | D }||d< tdd|S )Nc             S   s   i | ]\}}||qS rF   rF   )r   r   rV  rF   rF   rG   
<dictcomp>  s    zenum.<locals>.<dictcomp>reverse_mappingEnumrF   )dictr   rangerl   itemstype)
sequentialnamedenumsreverserF   rF   rG   enum  s    rk  c             C   s.   t |}d| ||}|r*|d|7 }|S )z
    Return the URL for a VCS requirement.

    Args:
      repo_url: the remote VCS url, with any needed VCS prefix (e.g. "git+").
      project_name: the (unescaped) project name.
    z{}@{}#egg={}z&subdirectory={})r   to_filenameformat)repo_urlrevr   subdiregg_project_namer\  rF   rF   rG   make_vcs_requirement_url  s
    
rr  c             C   sX   d| kr| dfS |  dd\}} d|kr6|dd}n|df}tdd |D }| |fS )zp
    Parse out and remove the auth information from a netloc.

    Returns: (netloc, (username, password)).
    @)NNrn   :Nc             s   s"   | ]}|d krd nt |V  qd S )N)urllib_unquote)r   xrF   rF   rG   r9    s    z)split_auth_from_netloc.<locals>.<genexpr>)rsplitrx   tuple)netlocauth	user_passrF   rF   rG   split_auth_from_netloc  s    r|  c             C   sB   t | \} \}}|dkr| S |dkr(dnd}djt||| dS )z
    Replace the password in a netloc with "****", if it exists.

    For example, "user:pass@example.com" returns "user:****@example.com".
    Nru   z:****z{user}{password}@{netloc})userpasswordry  )r|  rm  urllib_parsequote)ry  r}  r~  rF   rF   rG   redact_netloc  s    r  c             C   s8   t | }||j}|j||j|j|jf}t |}|S )N)r  urlsplitry  schemerD   queryfragment
urlunsplit)r   transform_netlocpurlry  
url_piecessurlrF   rF   rG   _transform_url  s
    


r  c             C   s   t | d S )Nr   )r|  )ry  rF   rF   rG   _get_netloc  s    r  c             C   s
   t | tS )N)r  r  )r   rF   rF   rG   r>     s    c             C   s
   t | tS )z.Replace the password in a given url with ****.)r  r  )r   rF   rF   rG   redact_password_from_url  s    r  c             C   sz   dd tjd dj tjdd  g}| oBtoBtjtjd |k}|rvtjddgtjd	d  }t	d
 d
|dS )zProtection of pip.exe from modification on Windows

    On Windows, any operation modifying pip should be run as:
        python -m pip ...
    zpip.exez	pip{}.exer   zpip{}.{}.exeNr_   z-mrH   rn   z3To modify pip, please run the following command:
{}r   )rm  rJ   rd   r   r?   rD   rI   rK   rL   r
   r   )modifying_pip	pip_namesshould_show_use_python_msgnew_commandrF   rF   rG   (protect_pip_from_modification_on_windows  s    
r  )F)rm   )T)T)TNr   NNNNN)N)N)
__future__r   
contextlibrB   ior,  loggingr  r?   r   r   rU   rX   r  rJ   r   r   collectionsr   pip._vendorr   pip._vendor.retryingr   pip._vendor.sixr   Zpip._vendor.six.movesr   pip._vendor.six.moves.urllibr   r  "pip._vendor.six.moves.urllib.parser	   ru  pip._internal.exceptionsr
   r   pip._internal.locationsr   r   r   r   r   pip._internal.utils.compatr   r   r   r   pip._internal.utils.typingr   r   r   typingr   r   r   r   r   r   r   r   r    r!   r"   Zpip._vendor.pkg_resourcesr#   pip._internal.models.linkr$   pip._internal.utils.uir%   __all__	getLoggerrB  r   r<   r   r   r   r   r:   r;   bz2ImportErrorr  lzmar9   r3   r&   rV   r'   r(   r|   r)   r+   r,   r-   r.   DEFAULT_BUFFER_SIZEr   r/   r0   r1   r*   r2   r   r   r   r   r   r   r   r   r   r4   r5   r6   r7   r4  r6  objectr7  rF  contextmanagerrQ  r8   rR  rS  r=   r_  rk  rr  r|  r  r  r  r>   r  r  rF   rF   rF   rG   <module>   s   4



		

	7'
.L)       
u

