a
    ze&                     @   sh  d dl Z d dlZd dlZd dlZd dlZd dlZzd dlZ[dZW n eyX   dZY n0 zd dl	Z	[	dZ
W n ey   dZ
Y n0 zd dlZ[dZW n ey   dZY n0 zd dlmZ W n ey   dZY n0 zd dlmZ W n ey   dZY n0 e jdkZd ZZe jdkr&d dlZner4d dlZer>dnd	Zee d
oXejdaeoheedZdZg dZG dd deZG dd deZG dd deZ G dd deZ!G dd deZ"G dd de#Z$G dd de#Z%dd Z&dd  Z'efd!d"Z(dd#d$Z)d%d& Z*d'd( Z+d)d* Z,dd+d,d-Z-dd+d.d/Z.ee d0r\dd+d1d2Z/nd3d2 Z/dd+d4d5Z0dd+d6d7Z1dd+d8d9Z2d:d; Z3dd<d=Z4dde2ddfd>d?Z5ee j6d@rdAdB Z7dCdD Z8ndEdB Z7dFdD Z8dGdH Z9dIdJ Z:e j;e je j<e j=he j>ko(e j?e j@v o(e je jAv ZBddKdLZCeBeC_DdMdN ZEe2fdOdPZFdQdR ZGdSdT ZHdUdV ZIdWdX ZJddZd[ZKdd\d]ZLd^eKd_gd`fiZMereKdagdbfeMdc< eLg ddfeMde< e
reKdfgdgfeMdh< ereKdigdjfeMdk< dldm ZNddodpZOdqdr ZPddsdtZQdudv ZRdwdx ZSddydzZTd{d| ZUd}d~ ZVdd ZWddddZXdgeXg d`fdgeWg ddfdZYer~ddgeXg dbfeYdc< e
rddgeXg dgfeYdh< erddgeXg djfeYdk< dd ZZdddddZ[ee dre\d e]ddZ^de^j__`de^ja_`de^jb_`dd Zcn$er2e\d e]ddZ^dd ZcdddZddddZedd Zfe jge jhB dfddZidS )    NTF)getpwnam)getgrnamntposixi   i   sendfilelinux
_fcopyfilez%.COM;.EXE;.BAT;.CMD;.VBS;.JS;.WS;.MSC)copyfileobjcopyfilecopymodecopystatcopycopy2copytreemovermtreeErrorSpecialFileError	ExecErrormake_archiveget_archive_formatsregister_archive_formatunregister_archive_formatget_unpack_formatsregister_unpack_formatunregister_unpack_formatunpack_archiveignore_patternschownwhichget_terminal_sizeSameFileErrorc                   @   s   e Zd ZdS )r   N__name__
__module____qualname__ r&   r&   /usr/lib/python3.9/shutil.pyr   E   s   r   c                   @   s   e Zd ZdS )r!   Nr"   r&   r&   r&   r'   r!   H   s   r!   c                   @   s   e Zd ZdS )r   Nr"   r&   r&   r&   r'   r   K   s   r   c                   @   s   e Zd ZdS )r   Nr"   r&   r&   r&   r'   r   O   s   r   c                   @   s   e Zd ZdS )	ReadErrorNr"   r&   r&   r&   r'   r(   R   s   r(   c                   @   s   e Zd ZdS )RegistryErrorNr"   r&   r&   r&   r'   r)   U   s   r)   c                   @   s   e Zd ZdS )_GiveupOnFastCopyNr"   r&   r&   r&   r'   r*   Y   s   r*   c              
   C   s   z|   }|  }W n, ty@ } zt|W Y d }~n
d }~0 0 zt||| W nV ty } z>| j|_|j|_|j	t	j
t	jhv rt|n|d W Y d }~n
d }~0 0 d S N)fileno	Exceptionr*   r   r   OSErrornamefilename	filename2errnoEINVALENOTSUP)fsrcfdstflagsinfdoutfderrr&   r&   r'   _fastcopy_fcopyfile^   s    
r;   c              
   C   sF  z|   }|  }W n, ty@ } zt|W Y d }~n
d }~0 0 ztt|jd}W n tyn   d}Y n0 tj	dk rt
|d}d}zt||||}W n ty( } zr| j|_|j|_|jtjkrdat||jtjkr|d |dkrt|dtjdkrt||W Y d }~qd }~0 0 |dkr8qB||7 }qd S )Ni   i   l        i   @r   F)r,   r-   r*   maxosfstatst_sizer.   sysmaxsizeminr   r/   r0   r1   r2   ENOTSOCK_USE_CP_SENDFILEENOSPClseekSEEK_CUR)r5   r6   r8   r9   r:   	blocksizeoffsetsentr&   r&   r'   _fastcopy_sendfiler   s8    


 
rK   c              	   C   s   | j }|j}tt|j}||}|s*qtq||k rj|d | }|| W d    qr1 s^0    Y  q|| qW d    n1 s0    Y  d S r+   )readintowrite
memoryview	bytearray)r5   r6   lengthfsrc_readinto
fdst_writemvnsmvr&   r&   r'   _copyfileobj_readinto   s    *rV   c                 C   s0   |st }| j}|j}||}|s"q,|| qd S r+   )COPY_BUFSIZEreadrM   )r5   r6   rP   	fsrc_readrR   bufr&   r&   r'   r	      s    r	   c                 C   s   t | tjrHttjdrHztj|  t|W S  tyF   Y dS 0 ttjdrzztj| |W S  tyx   Y dS 0 tj	tj
| tj	tj
|kS )NsamestatFsamefile)
isinstancer=   DirEntryhasattrpathr[   statr.   r\   normcaseabspathsrcdstr&   r&   r'   	_samefile   s    rg   c                 C   s   t | tjr|  S t| S r+   )r]   r=   r^   ra   fnr&   r&   r'   _stat   s    rj   c                 C   s    t | tjr|  S tj| S r+   )r]   r=   r^   
is_symlinkr`   islinkrh   r&   r&   r'   _islink   s    rm   follow_symlinksc          
      C   s^  t d| | t| |r(td| |d}t| |gD ]h\}}zt|}W n ty^   Y q80 t	|j
rt|tjr~|jn|}td| tr8|dkr8|j}q8|st| rtt| | nt| dx}zt|d }tr4z2t||tj |W W  d    W W  d    S  ty0   Y n0 ntrz.t|| |W W  d    W W  d    S  ty|   Y n0 nDtr|dkrt||t|t |W  d    W W  d    S t || W d    n1 s0    Y  W nH t!y8 }	 z.tj"|s"t#d| |	n W Y d }	~	n
d }	~	0 0 W d    n1 sP0    Y  |S )Nzshutil.copyfilez{!r} and {!r} are the same filer   z`%s` is a named piperbwbzDirectory does not exist: )$r@   auditrg   r!   format	enumeraterj   r.   ra   S_ISFIFOst_moder]   r=   r^   r`   r   _WINDOWSr?   rm   symlinkreadlinkopen_HAS_FCOPYFILEr;   r   _COPYFILE_DATAr*   rD   rK   rV   rB   rW   r	   IsADirectoryErrorexistsFileNotFoundError)
re   rf   ro   	file_sizeiri   str5   r6   er&   r&   r'   r
      sP    
$
$".8r
   c                C   sp   t d| | |sFt| rFtj|rFttdr@tjtj }}qRd S nt	tj
 }}|| }||t|j d S )Nzshutil.copymodelchmod)r@   rr   rm   r=   r`   rl   r_   lstatr   rj   chmodra   S_IMODErv   )re   rf   ro   	stat_func
chmod_funcr   r&   r&   r'   r   *  s    
r   	listxattrc                C   s   zt j| |d}W n> tyP } z&|jtjtjtjfvr: W Y d }~d S d }~0 0 |D ]l}z&t j| ||d}t j||||d W qV ty } z(|jtj	tjtjtjfvr W Y d }~qVd }~0 0 qVd S Nrn   )
r=   r   r.   r2   r4   ENODATAr3   getxattrsetxattrEPERM)re   rf   ro   namesr   r/   valuer&   r&   r'   
_copyxattr@  s    	r   c                  O   s   d S r+   r&   )argskwargsr&   r&   r'   r   X  s    c          	   
      s`  t d| | d d ddd |p6t| o4tj| }|rJ fdd}n fdd}t| tjrp| j|d}n|d	| |d}t	|j
}|d
||j|jf|d t| ||d z|d|||d W n ty   Y n0 t|dr\z|d||j|d W nX tyZ } z>dD ]*}tt|r|jtt|kr qFq W Y d }~n
d }~0 0 d S )Nzshutil.copystat)nsro   c                 W   s   d S r+   r&   )r   ro   r   r&   r&   r'   _nopi  s    zcopystat.<locals>._nopc                    s   t t|  S r+   )getattrr=   r/   r   r&   r'   lookupp  s    zcopystat.<locals>.lookupc                    s   t t|  }|tjv r|S  S r+   )r   r=   supports_follow_symlinks)r/   ri   r   r&   r'   r   u  s    
rn   ra   utimer   st_flagschflags)
EOPNOTSUPPr4   )r@   rr   rm   r=   r`   rl   r]   r^   ra   r   rv   st_atime_nsst_mtime_nsr   NotImplementedErrorr_   r   r.   r2   r   )	re   rf   ro   followr   r   modewhyr:   r&   r   r'   r   [  s4    
r   c                C   sB   t j|r"t j|t j| }t| ||d t| ||d |S r   )r=   r`   isdirjoinbasenamer
   r   re   rf   ro   r&   r&   r'   r     s
    r   c                C   sB   t j|r"t j|t j| }t| ||d t| ||d |S r   )r=   r`   r   r   r   r
   r   r   r&   r&   r'   r     s
    r   c                     s    fdd}|S )Nc                    s(   g } D ]}| t|| qt|S r+   )extendfnmatchfilterset)r`   r   ignored_namespatternpatternsr&   r'   _ignore_patterns  s    z)ignore_patterns.<locals>._ignore_patternsr&   )r   r   r&   r   r'   r     s    r   c                 C   sD  |d ur$|t |dd | D }nt }t j||d g }	|tu pJ|tu }
| D ]}|j|v rbqPt j||j}t j||j}|
r|n|}z|	 }|rt jdkr|j
dd}|jt
jkrd}|r8t |}|rt || t||| d nBt j|s|rW qP| r,t||||||d n
||| n*| rXt||||||d n
||| W qP ty } z|	|jd  W Y d }~qPd }~0  ty } z |	||t|f W Y d }~qPd }~0 0 qPzt|| W nL ty0 } z2t|d	d d u r|	||t|f W Y d }~n
d }~0 0 |	r@t|	|S )
Nc                 S   s   g | ]
}|j qS r&   r   ).0xr&   r&   r'   
<listcomp>      z_copytree.<locals>.<listcomp>)exist_okr   Frn   )dirs_exist_okr   winerror)r=   fspathr   makedirsr   r   r/   r`   r   rk   ra   st_reparse_tagIO_REPARSE_TAG_MOUNT_POINTry   rx   r   r~   is_dirr   r   r   r   r.   appendstrr   )entriesre   rf   symlinksignorecopy_functionignore_dangling_symlinksr   r   errorsuse_srcentrysrcentrysrcnamedstnamesrcobjrk   r   linktor:   r   r&   r&   r'   	_copytree  s^    





$,*r   c           	   
   C   sX   t d| | t| }t|}W d    n1 s60    Y  t|| ||||||dS )Nzshutil.copytree)r   re   rf   r   r   r   r   r   )r@   rr   r=   scandirlistr   )	re   rf   r   r   r   r   r   itrr   r&   r&   r'   r     s    (&
r   st_file_attributesc                 C   sN   z4| j dd}t |jo2|jt j@ o0|jt jk W S  tyH   Y dS 0 d S NFrn   )ra   S_ISDIRrv   r   FILE_ATTRIBUTE_REPARSE_POINTr   r   r.   )entryr   r&   r&   r'   _rmtree_isdirA  s    
r   c                 C   sJ   z0t | }t|jp.|jtj@ o.|jtjkW S  t	yD   Y dS 0 d S )NF)
r=   r   ra   S_ISLNKrv   r   r   r   r   r.   )r`   r   r&   r&   r'   _rmtree_islinkJ  s    

r   c                 C   s(   z| j ddW S  ty"   Y dS 0 d S r   )r   r.   )r   r&   r&   r'   r   S  s    c                 C   s   t j| S r+   )r=   r`   rl   )r`   r&   r&   r'   r   Y  s    c              	   C   s2  z6t | }t|}W d    n1 s*0    Y  W n( ty^   |t j| t  g }Y n0 |D ]}|j}t|rz| rtdW n* ty   |t jj	|t  Y qdY n0 t
|| qdzt | W qd ty   |t j|t  Y qd0 qdzt |  W n& ty,   |t j| t  Y n0 d S )N%Cannot call rmtree on a symbolic link)r=   r   r   r.   r@   exc_infor`   r   rk   rl   _rmtree_unsafeunlinkrmdir)r`   onerror
scandir_itr   r   fullnamer&   r&   r'   r   ]  s0    *

r   c              
   C   s`  z6t | }t|}W d    n1 s*0    Y  W n> tyt } z&||_|t j|t  W Y d }~d S d }~0 0 |D ]}t j||j	}z|j
dd}W n ty   d}Y nP0 |rz|jdd}	t|	j}W n* ty   |t j|t  Y qzY n0 |rzt j|j	t j| d}
d}W n& tyN   |t j|t  Y n0 zt j|	t |
rt|
|| z"t |
 d}t j|j	| d W n& ty   |t j|t  Y n0 n6ztdW n( ty   |t jj|t  Y n0 W |st |
 n|st |
 0 qzzt j|j	| d W qz tyX   |t j|t  Y qz0 qzd S )NFrn   )dir_fdTr   )r=   r   r   r.   r0   r@   r   r`   r   r/   r   ra   r   rv   r   rz   O_RDONLYr[   r>   _rmtree_safe_fdcloser   rl   r   )topfdr`   r   r   r   r:   r   r   r   orig_stdirfddirfd_closedr&   r&   r'   r   |  s^    *



r   c              	   C   s  t d|  |rdd }n|d u r*dd }trt| trDt| } zt| }W n& tyx   |tj| t 	  Y d S 0 zt
| tj}d}W n& ty   |tj
| t 	  Y d S 0 ztj|t|r"t|| | zt| d}t|  W n& ty   |tj| t 	  Y n0 n6ztdW n( tyV   |tjj| t 	  Y n0 W |s~t| n|s|t| 0 nLzt| rtdW n* ty   |tjj| t 	  Y d S 0 t| |S d S )Nzshutil.rmtreec                  W   s   d S r+   r&   r   r&   r&   r'   r     s    zrmtree.<locals>.onerrorc                   W   s    d S r+   r&   r   r&   r&   r'   r     s    FTr   )r@   rr   _use_fd_functionsr]   bytesr=   fsdecoder   r-   r   rz   r   r`   r[   r>   r   r   r   r.   rl   r   r   )r`   ignore_errorsr   r   fd	fd_closedr&   r&   r'   r     sV    




r   c                 C   s0   t | } t jjt jjpd }t j| |S )N )r=   r   r`   sepaltsepr   rstrip)r`   r   r&   r&   r'   	_basename  s    
r   c              	   C   sR  t d| | |}tj|rbt| |r8t| | d S tj|t| }tj	|rbt
d| zt| | W n tyL   tj| rt| }t|| t|  ntj| r4t| |rt
d| |f t| s
t| tjst| rt jdkrtd| | f t| ||dd t|  n|| | t|  Y n0 |S )Nzshutil.movez$Destination path '%s' already existsz.Cannot move a directory '%s' into itself '%s'.darwinzKCannot move the non-empty directory '%s': Lacking write permission to '%s'.T)r   r   )r@   rr   r=   r`   r   rg   renamer   r   r~   r   r.   rl   ry   rx   r   
_destinsrc_is_immutableaccessW_OKlistdirplatformPermissionErrorr   r   )re   rf   r   real_dstr   r&   r&   r'   r     sL    





r   c                 C   sV   t j| } t j|}| t jjs2| t jj7 } |t jjsL|t jj7 }|| S r+   )r=   r`   rc   endswithr   
startswithrd   r&   r&   r'   r   Q  s    r   c                 C   s(   t | }tjtjg}t|do&|j|v S )Nr   )rj   ra   UF_IMMUTABLESF_IMMUTABLEr_   r   )re   r   immutable_statesr&   r&   r'   r   Z  s    r   c                 C   sL   t d u s| d u rd S zt | }W n ty6   d }Y n0 |d urH|d S d S N   )r   KeyErrorr/   resultr&   r&   r'   _get_gid_  s    
r	  c                 C   sL   t d u s| d u rd S zt | }W n ty6   d }Y n0 |d urH|d S d S r  )r   r  r  r&   r&   r'   _get_uidk  s    
r
  gzipc                    s(  |d u rd}nDt r |dkr d}n2tr2|dkr2d}n trD|dkrDd}ntd|dd l}	|rfd	| nd}
| d
 |
 }tj|}|rtj	|s|d ur|
d| |st| |d ur|
d tt  fdd}|s$|	|d| }z|j||d W |  n
|  0 |S )Nr   r  gzbzip2bz2xzzCbad value for 'compress', or compression format not supported : {0}r   ..tarcreating %szCreating tar archivec                    s,    d ur | _ | _d ur(| _| _| S r+   )gidgnameuiduname)tarinfor  groupownerr  r&   r'   _set_uid_gid  s    z#_make_tarball.<locals>._set_uid_gidzw|%sr   )_ZLIB_SUPPORTED_BZ2_SUPPORTED_LZMA_SUPPORTED
ValueErrorrs   tarfiler=   r`   dirnamer~   infor   r
  r	  rz   addr   )	base_namebase_dircompressverbosedry_runr  r  loggertar_compressionr!  compress_extarchive_namearchive_dirr  tarr&   r  r'   _make_tarballw  s>    

	r0  c              	   C   s  dd l }| d }tj| }|rNtj|sN|d ur@|d| |sNt| |d urd|d|| |s|j|d|jd}tj	|}	|	tj
kr||	|	 |d ur|d|	 t|D ]\}
}}t|D ]:}tj	tj|
|}	||	|	 |d ur|d|	 q|D ]L}tj	tj|
|}	tj|	r||	|	 |d ur|d|	 qqW d    n1 sv0    Y  |S )Nr   .zipr  z#creating '%s' and adding '%s' to itw)compressionzadding '%s')zipfiler=   r`   r"  r~   r#  r   ZipFileZIP_DEFLATEDnormpathcurdirrM   walksortedr   isfile)r%  r&  r(  r)  r*  r4  zip_filenamer.  zfr`   dirpathdirnames	filenamesr/   r&   r&   r'   _make_zipfile  sF    


2rA  r/  )r'  Nzuncompressed tar file)r'  r  zgzip'ed tar-filegztarzZIP filezip)r'  r  zbzip2'ed tar-filebztar)r'  r  zxz'ed tar-filexztarc                  C   s   dd t  D } |   | S )Nc                 S   s   g | ]\}}||d  fqS )r  r&   )r   r/   registryr&   r&   r'   r     r   z'get_archive_formats.<locals>.<listcomp>)_ARCHIVE_FORMATSitemssortformatsr&   r&   r'   r     s
    r   r   c                 C   st   |d u rg }t |s td| t|ttfs6td|D ]&}t|ttfrXt|dkr:tdq:|||ft| < d S )NzThe %s object is not callablez!extra_args needs to be a sequencer  z+extra_args elements are : (arg_name, value))callable	TypeErrorr]   tupler   lenrG  )r/   function
extra_argsdescriptionelementr&   r&   r'   r     s    	
r   c                 C   s
   t | = d S r+   )rG  r   r&   r&   r'   r     s    r   c	              
   C   sB  t d| ||| t }	|d urP|d ur6|d| tj| } |sPt| |d u r^tj}||d}
zt	| }W n  t
y   td| d Y n0 |d }|d D ]\}}||
|< q|dkr||
d< ||
d	< z@|| |fi |
}W |d ur>|d ur|d
|	 t|	 n,|d ur<|d ur2|d
|	 t|	 0 |S )Nzshutil.make_archivezchanging into '%s')r)  r*  zunknown archive format '%s'r      rC  r  r  zchanging back to '%s')r@   rr   r=   getcwddebugr`   rc   chdirr8  rG  r  r   )r%  rs   root_dirr&  r(  r)  r  r  r*  save_cwdr   format_infofuncargvalr0   r&   r&   r'   r     s@    






r   c                  C   s   dd t  D } |   | S )Nc                 S   s"   g | ]\}}||d  |d fqS )r      r&   )r   r/   r#  r&   r&   r'   r   U  r   z&get_unpack_formats.<locals>.<listcomp>)_UNPACK_FORMATSrH  rI  rJ  r&   r&   r'   r   O  s
    r   c           	      C   sj   i }t  D ]\}}|d D ]}|||< qq| D ]$}||v r0d}t|||| f q0t|sftdd S )Nr   z!%s is already registered for "%s"z*The registered function must be a callable)r_  rH  r)   rL  rM  )	
extensionsrP  rQ  existing_extensionsr/   r#  ext	extensionmsgr&   r&   r'   _check_unpack_optionsZ  s    
re  c                 C   s,   |d u rg }t ||| ||||ft| < d S r+   )re  r_  )r/   r`  rP  rQ  rR  r&   r&   r'   r   l  s    r   c                 C   s
   t | = d S r+   )r_  r   r&   r&   r'   r     s    r   c                 C   s&   t j| }t j|s"t | d S r+   )r=   r`   r"  r   r   )r`   r"  r&   r&   r'   _ensure_directory  s    rf  c           	   
   C   s   dd l }|| std|  || }z| D ]}|j}|ds2d|v rPq2tjj	|g|
dR  }|spq2t| |ds2||dD}t|d}t|| W d    n1 s0    Y  W d    q21 s0    Y  q2W |  n
|  0 d S )Nr   z%s is not a zip file/z..rrq   )r4  
is_zipfiler(   r5  infolistr0   r   r=   r`   r   splitrf  r   rz   r	   r   )	r0   extract_dirr4  rC  r#  r/   
targetpathsourcetargetr&   r&   r'   _unpack_zipfile  s(    


Jrp  r  c                C   sb   dd l }z|| }W n  |jy6   td|  Y n0 z|j||d W |  n
|  0 d S )Nr   z/%s is not a compressed or uncompressed tar filer  )r!  rz   TarErrorr(   
extractallr   )r0   rl  r   r!  tarobjr&   r&   r'   _unpack_tarfile  s    
rt  r  r1  )r/  rC  z.tar.gzz.tgzz.tar.bz2z.tbz2z.tar.xzz.txzc                 C   s:   t  D ],\}}|d D ]}| |r|    S qqd S )Nr   )r_  rH  r   )r0   r/   r#  rc  r&   r&   r'   _find_unpack_format  s
    
ru  c                C   s   t d| || |d u r t }t|}t| } |d u rBi }nd|i}|d urzt| }W n" ty   td|d Y n0 |d }|| |fi t	|d | nPt
| }|d u rtd| t| d }t	t| d |B }|| |fi | d S )Nzshutil.unpack_archiver   zUnknown unpack format '{0}'rT  r  zUnknown archive format '{0}')r@   rr   r=   rU  r   r_  r  r   rs   dictru  r(   )r0   rl  rs   r   filter_kwargsrZ  r[  r   r&   r&   r'   r     s*    

 r   statvfs
disk_usageusageztotal used freezTotal space in byteszUsed space in byteszFree space in bytesc                 C   s@   t | }|j|j }|j|j }|j|j |j }t|||S r+   )r=   rx  f_bavailf_frsizef_blocksf_bfree_ntuple_diskusage)r`   r   freetotalusedr&   r&   r'   ry  	  s
    
c                 C   s"   t | \}}|| }t|||S r+   )r   Z_getdiskusager  )r`   r  r  r  r&   r&   r'   ry    s    c                 C   s   t d| || |d u r(|d u r(td|}|}|d u r>d}n(t|trft|}|d u rftd||d u rtd}n(t|tst	|}|d u rtd|t
| || d S )Nzshutil.chownzuser and/or group must be setzno such user: {!r}zno such group: {!r})r@   rr   r   r]   r   r
  LookupErrorrs   intr	  r=   r   )r`   userr  _user_groupr&   r&   r'   r   %  s$    

r   P      c              
   C   s   zt tjd }W n ttfy,   d}Y n0 zt tjd }W n ttfyZ   d}Y n0 |dksl|dkrzttj }W n" t	tt
fy   t| }Y n0 |dkr|j}|dkr|j}t||fS )NCOLUMNSr   LINES)r  r=   environr  r   r    r@   
__stdout__r,   AttributeErrorr.   terminal_sizecolumnslines)fallbackr  r  sizer&   r&   r'   r    E  s$    

r    c                 C   s&   t j| o$t | |o$t j|  S r+   )r=   r`   r~   r   r   )ri   r   r&   r&   r'   _access_checkv  s    r  c              	      s  t j rt |r S d S t t}|d u rrt jdd }|d u rrzt d}W n t	t
fyp   t j}Y n0 |szd S |rt |}|t t j}nt |}|t j}tjdkrRt j}|rt |}||vr|d| t dpt}dd |t jD }|rdd |D }t fd	d
|D r> g}n fdd|D }n g}t }|D ]X}	t j|	}
|
|vrb||
 |D ],}t j|	|}t||r|    S qqbd S )NPATHCS_PATHwin32r   PATHEXTc                 S   s   g | ]}|r|qS r&   r&   r   rb  r&   r&   r'   r     r   zwhich.<locals>.<listcomp>c                 S   s   g | ]}t |qS r&   )r=   fsencoder  r&   r&   r'   r     r   c                 3   s    | ]}   |  V  qd S r+   )lowerr   r  cmdr&   r'   	<genexpr>  r   zwhich.<locals>.<genexpr>c                    s   g | ]} | qS r&   r&   r  r  r&   r'   r     r   )r=   r`   r"  r  r]   r   r  getconfstrr  r   defpathr  rk  pathsepr   r@   r   r8  insertgetenv_WIN_DEFAULT_PATHEXTanyr   rb   r$  r   )r  r   r`   	use_bytesr8  pathext_sourcepathextfilesseendirnormdirthefiler/   r&   r  r'   r   {  sV    






r   )r   )F)FN)r  r   r   NNN)r   r   N)Nr   )NNr   r   NNN)Nr   )NN)NN)r  )jr=   r@   ra   r   collectionsr2   zlibr  ImportErrorr  r  lzmar  pwdr   grpr   r/   rw   r   r   rW   r_   r   r   rD   r{   r  __all__r.   r   r!   r   r   r(   r-   r)   r*   r;   rK   rV   r	   rg   rj   rm   r
   r   r   r   r   r   r   r   r   stat_resultr   r   r   r   rz   r   r   supports_dir_fdr   supports_fdr   r   r   avoids_symlink_attacksr   r   r   r   r	  r
  r0  rA  rG  r   r   r   r   r   re  r   r   rf  rp  rt  r_  ru  r   r   
namedtupler  r  __doc__r  r  ry  r   r    r  F_OKX_OKr   r&   r&   r&   r'   <module>   s<  







@
@B 
A
0	
	8


BB	  
A
-

  
8  



1



 
1