
    d                     2   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 d dlmZ d dlmZmZmZmZmZmZmZ d dlmZ g dZdZd	Zd
Z eeeefZ!eee fZ"d Z#d Z$ G d de%          Z& G d de&          Z' G d de&          Z( e'            Z) e(            Z*d Z+ e,ed          r  ej-                    e+          Z+ G d d          Z. G d d          Z/ G d de.          Z0 G d de.          Z1 G d de.          Z2 G d d e
          Z3 G d! d"e%          Z4ej5        6                    e4            G d# d$e4          Z7 G d% d&e4          Z8 G d' d(e4          Z9 G d) d*e9e7          Z: G d+ d,e9e8          Z;dS )-    N)Sequence)ENOENTENOTDIREBADFELOOP)
attrgetter)S_ISDIRS_ISLNKS_ISREGS_ISSOCKS_ISBLKS_ISCHRS_ISFIFO)quote_from_bytes)PurePathPurePosixPathPureWindowsPathPath	PosixPathWindowsPath   {   i  c                 b    t          | dd           t          v pt          | dd           t          v S )Nerrnowinerror)getattr_IGNORED_ERRNOS_IGNORED_WINERRORS)	exceptions      /croot/python-split_1694437901252/_h_env_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_plac/lib/python3.11/pathlib.py_ignore_errorr!   &   s7    Iw--@ GIz4004FFH    c                     d| v pd| v pd| v S )N*?[ )pats    r    _is_wildcard_patternr)   +   s      #:11scz1r"   c                   $    e Zd ZdZd Zd Zd ZdS )_FlavourzPA flavour implements a particular (platform-specific) set of path
    semantics.c                 (    | j         j        | _        d S N)sepjoinselfs    r    __init__z_Flavour.__init__5   s    HM			r"   c                    g }| j         }| j        }dx}}t          |          }|D ]}|s|r|                    ||          }|                     |          \  }}}	||	v rUt          |	                    |                    D ]1}
|
r-|
dk    r'|                    t          j        |
                     2n/|	r-|	dk    r'|                    t          j        |	                     |s|rC|s?|D ]<}|s|r|                    ||          }|                     |          d         }|r n= n|s|r|                    ||z              |	                                 |||fS )N .r   )
r.   altsepreversedreplace	splitrootsplitappendsysinternreverse)r1   partsparsedr.   r6   drvrootitpartrelxs              r    parse_partsz_Flavour.parse_parts8   s   hde__ 	 	D  1||FC00!^^D11NCsczz!#))C..11 5 5A 5Q#XXcjmm4445  33#::MM#*S//222 d  " !# " "# %$! =#'<<#<#<D"nnT2215 "!E"  	&$ 	&MM#*%%%D&  r"   c                     |r|s|r||||z   g|dd         z   fS nM|rC||k    s,|                      |          |                      |          k    r||||dd         z   fS n||||z   fS |||fS )z
        Join the two paths represented by the respective
        (drive, root, parts) tuples.  Return a new (drive, root, parts) tuple.
           N)casefold)r1   rA   rB   r?   drv2root2parts2s          r    join_parsed_partsz_Flavour.join_parsed_parts^   s    
  		- >C >EC%K=6!"":#=== 	-s{{dmmD11T]]35G5GGGD%&*"444 H
 efn,,UF""r"   N)__name__
__module____qualname____doc__r2   rG   rN   r'   r"   r    r+   r+   1   sL         " " "$! $! $!L# # # # #r"   r+   c                       e Zd ZdZdZdZeZej	        dk    Z
 ed          ZdZh dd d	D             z  d
 d	D             z  ZefdZd Zd Zd ZefdZd Zd ZdS )_WindowsFlavour\/Tnt4abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZz\\?\>   CONIN$CONOUT$AUXCONNULPRNc                     h | ]}d |z  S )zCOM%sr'   .0cs     r    	<setcomp>z_WindowsFlavour.<setcomp>       6661666r"   u   123456789¹²³c                     h | ]}d |z  S )zLPT%sr'   r`   s     r    rc   z_WindowsFlavour.<setcomp>   rd   r"   c                    |dd         }|dd         }||k    r3||k    r-|                      |          \  }}|dd         }|dd         }nd}|dd         }||k    r||k    r||k    r|                    |d          }|dk    rl|                    ||dz             }||dz   k    rJ|dk    rt          |          }|r||d|         z   |||dz   d          fS |d |         |||dz   d          fS dx}	}
|dk    r|| j        v r|d d         }	|dd          }|}||k    r|}
|                    |          }||	z   |
|fS )Nr   rI      r4      :)_split_extended_pathfindlendrive_letterslstrip)r1   rD   r.   firstsecondprefixthirdindexindex2rA   rB   s              r    r9   z_WindowsFlavour.splitroot   s   QqS	accMMesll  44T::LFD1IE!A#YFFFQqS	cMMesllu||
 IIc1%%E{{3	22 UQY&&||!$T C%QvX6T&())_LL#GVG}c4q		?BBdS==Ud&888rr(C8DEC<<D;;s##D|T4''r"   c                 *    |                                 S r-   lowerr1   ss     r    rJ   z_WindowsFlavour.casefold   s    wwyyr"   c                     d |D             S )Nc                 6    g | ]}|                                 S r'   rw   )ra   ps     r    
<listcomp>z2_WindowsFlavour.casefold_parts.<locals>.<listcomp>   s     )))a		)))r"   r'   r1   r?   s     r    casefold_partsz_WindowsFlavour.casefold_parts   s    ))5))))r"   c                 n    t          j        t          j        |          t           j                  j        S r-   )recompilefnmatch	translate
IGNORECASE	fullmatchr1   patterns     r    compile_patternz_WindowsFlavour.compile_pattern   s$    z'+G44bmDDNNr"   c                     d}|                     |          rC|d d         }|dd          }|                     d          r||d d         z  }d|dd          z   }||fS )Nr4      zUNC\rh   rU   )
startswith)r1   rz   
ext_prefixrr   s       r    rk   z$_WindowsFlavour._split_extended_path   su    <<
## 	!rrUF!""A||G$$ !!BQB%1QRR5Lqyr"   c                    |sdS |d                              d          rdS |d                             d          d                             d          d                             d          }|                                | j        v S )NFr   z\\ri   r5   rj    )r   	partitionrstripupperreserved_names)r1   r?   names      r    is_reservedz_WindowsFlavour.is_reserved   s    
  	58v&& 	5Ry""3''*44S99!<CCCHHzz||t222r"   c                 j   |j         }t          |          dk    rc|d         dk    rW|                                dd                              d          }d|dt	          |                    d                    S dt	          |                                                    d                    z   S )Nrg   rI   rj   rV   zfile:///zutf-8zfile:)driverm   as_posixro   urlquote_from_bytesencode)r1   pathr   rests       r    make_uriz_WindowsFlavour.make_uri   s    
u::??uQx3==??122&--c22DD*4;;w+?+?@@@B B 01G1G1P1PQQQQr"   N)rO   rP   rQ   r.   r6   has_drvntpathpathmodosr   is_supportedsetrn   ext_namespace_prefixr   r9   rJ   r   r   rk   r   r   r'   r"   r    rT   rT   p   s        CFGGGtOLCNOOM$ 	:99665666	7665666	7 * #& %( %( %( %(N  * * *O O O 2F    3 3 3
R 
R 
R 
R 
Rr"   rT   c                   \    e Zd ZdZdZdZeZej	        dk    Z
efdZd Zd Zd Zd	 Zd
 ZdS )_PosixFlavourrV   r4   FrW   c                     |rQ|d         |k    rE|                     |          }t          |          t          |          z
  dk    rd|dz  |fS d||fS dd|fS )Nr   rg   r4   )ro   rm   )r1   rD   r.   stripped_parts       r    r9   z_PosixFlavour.splitroot   sq     	 DGsNN KK,,M 4yy3}---2237M113--r4<r"   c                     |S r-   r'   ry   s     r    rJ   z_PosixFlavour.casefold   s    r"   c                     |S r-   r'   r   s     r    r   z_PosixFlavour.casefold_parts  s    r"   c                 X    t          j        t          j        |                    j        S r-   )r   r   r   r   r   r   s     r    r   z_PosixFlavour.compile_pattern  s     z'+G4455??r"   c                     dS )NFr'   r   s     r    r   z_PosixFlavour.is_reserved  s    ur"   c                 D    t          |          }dt          |          z   S )Nzfile://)bytesr   )r1   r   bpaths      r    r   z_PosixFlavour.make_uri
  s#     d.u5555r"   N)rO   rP   rQ   r.   r6   r   	posixpathr   r   r   r   r9   rJ   r   r   r   r   r'   r"   r    r   r      s        
CFGGGtOL"%            @ @ @  6 6 6 6 6r"   r   c                     | d         }| dd          }|st                      S |dk    rt          }n1d|v rt          d          t          |          rt          }nt
          } ||||          S )Nr   rI   **z:Invalid pattern: '**' can only be an entire path component)_TerminatingSelector_RecursiveWildcardSelector
ValueErrorr)   _WildcardSelector_PreciseSelector)pattern_partsflavourr(   child_partsclss        r    _make_selectorr     s    

C#K &#%%%
d{{(	UVVV	c	"	" 3sK)))r"   	lru_cachec                       e Zd ZdZd Zd ZdS )	_SelectorzYA selector matches a specific glob pattern part against the children
    of a given path.c                     || _         |rt          ||          | _        d| _        d S t	                      | _        d| _        d S )NTF)r   r   	successordironlyr   )r1   r   r   s      r    r2   z_Selector.__init__0  sF    & 	!+KAADNDLLL133DN DLLLr"   c                     t          |          }|j        }|j        }|j        } ||          st	          g           S |                     ||||          S )zuIterate over all child paths of `parent_path` matched by this
        selector.  This can contain parent_path itself.)typeis_direxists_scandiriter_select_from)r1   parent_pathpath_clsr   r   scandirs         r    select_fromz_Selector.select_from9  s^     $$#vk"" 	88O  ffgFFFr"   N)rO   rP   rQ   rR   r2   r   r'   r"   r    r   r   ,  sA         ! ! !	G 	G 	G 	G 	Gr"   r   c                       e Zd Zd ZdS )r   c              #      K   |V  d S r-   r'   )r1   r   r   r   r   s        r    r   z!_TerminatingSelector._select_fromG  s      r"   N)rO   rP   rQ   r   r'   r"   r    r   r   E  s#            r"   r   c                       e Zd Zd Zd ZdS )r   c                 L    || _         t                              | ||           d S r-   )r   r   r2   )r1   r   r   r   s       r    r2   z_PreciseSelector.__init__M  s'    	4g66666r"   c              #      K   	 |                     | j                  } | j        r|n||          r$| j                            ||||          D ]}|V  d S d S # t
          $ r Y d S w xY wr-   )_make_child_relpathr   r   r   r   PermissionError)r1   r   r   r   r   r   r}   s          r    r   z_PreciseSelector._select_fromQ  s      	2249==D2$,2FD99 44T667SS  AGGGG   	 	 	FF	s   AA 
A('A(NrO   rP   rQ   r2   r   r'   r"   r    r   r   K  s2        7 7 7    r"   r   c                       e Zd Zd Zd ZdS )r   c                 r    |                     |          | _        t                              | ||           d S r-   )r   matchr   r2   r1   r(   r   r   s       r    r2   z_WildcardSelector.__init__]  s5    ,,S11
4g66666r"   c              #     K   	  ||          5 }t          |          }d d d            n# 1 swxY w Y   |D ]}| j        r>	 |                                sn'# t          $ r}t	          |          s Y d }~?d }~ww xY w|j        }	|                     |	          r9|                    |	          }
| j        	                    |
|||          D ]}|V  d S # t          $ r Y d S w xY wr-   )listr   r   OSErrorr!   r   r   r   r   r   r   )r1   r   r   r   r   
scandir_itentriesentryer   r   r}   s               r    r   z_WildcardSelector._select_froma  s~     	%% +z**+ + + + + + + + + + + + + + +     < 
!	!  %||~~ %$%" ! ! !,Q// "! ! z::d##  &::4@@D!^88vvwWW    !   "  	 	 	FF	sW   C +C /C /C AC 
A<"A72C 7A<<AC 
C%$C%Nr   r'   r"   r    r   r   [  s2        7 7 7    r"   r   c                        e Zd Zd Zd Zd ZdS )r   c                 >    t                               | ||           d S r-   )r   r2   r   s       r    r2   z#_RecursiveWildcardSelector.__init__|  s     4g66666r"   c              #     K   |V  	  ||          5 }t          |          }d d d            n# 1 swxY w Y   |D ]}}d}	 |                    d          }n'# t          $ r}t          |          s Y d }~nd }~ww xY w|r8|                    |j                  }	|                     |	||          D ]}
|
V  ~d S # t          $ r Y d S w xY w)NFfollow_symlinks)r   r   r   r!   r   r   _iterate_directoriesr   )r1   r   r   r   r   r   r   entry_is_dirr   r   r}   s              r    r   z/_RecursiveWildcardSelector._iterate_directories  sy     	%% +z**+ + + + + + + + + + + + + + +  
  
 $#(<<<#F#FLL   (++         &::5:FFD!66tVWMM    
  
   	 	 	FF	sV   B< /B< 3B< 3	B< AB< 
A<"A72B< 7A<<>B< <
C
	C
c              #   P  K   	 t                      }	 | j        j        }|                     |||          D ]0} |||||          D ]}||vr|V  |                    |            1	 |                                 d S # |                                 w xY w# t          $ r Y d S w xY wr-   )r   r   r   r   addclearr   )	r1   r   r   r   r   yieldedsuccessor_selectstarting_pointr}   s	            r    r   z'_RecursiveWildcardSelector._select_from  s      	eeG #'>#> &*&?&?VU\&]&] + +N--nffgVV + +G++"#GGG#KKNNN++  	 	 	FF	s)   B AA> (B >BB 
B%$B%N)rO   rP   rQ   r2   r   r   r'   r"   r    r   r   z  sA        7 7 7  &    r"   r   c                   .    e Zd ZdZdZd Zd Zd Zd ZdS )_PathParentszvThis object provides sequence-like access to the logical ancestors
    of a path.  Don't try to construct it yourself.)_pathcls_drv_root_partsc                 v    t          |          | _        |j        | _        |j        | _        |j        | _        d S r-   )r   r   r   r   r   )r1   r   s     r    r2   z_PathParents.__init__  s.    T

I	Z
kr"   c                 t    | j         s| j        rt          | j                  dz
  S t          | j                  S NrI   )r   r   rm   r   r0   s    r    __len__z_PathParents.__len__  s:    9 	$
 	$t{##a''t{###r"   c           
          t          |t                    rBt           fdt          |                    t                                D                       S |t                     k    s|t                      k     rt          |          |dk     r|t                     z  } j                             j	         j
         j        d | dz
                     S )Nc              3   (   K   | ]}|         V  d S r-   r'   )ra   ir1   s     r    	<genexpr>z+_PathParents.__getitem__.<locals>.<genexpr>  s'      IIQaIIIIIIr"   r   rI   )
isinstanceslicetuplerangeindicesrm   
IndexErrorr   _from_parsed_partsr   r   r   )r1   idxs   ` r    __getitem__z_PathParents.__getitem__  s    c5!! 	JIIII%SYY1G1G*HIIIIII#d))sc$iiZ//S//!773t99C}//	4:04IcTAXI0FH H 	Hr"   c                 @    d                     | j        j                  S )Nz<{}.parents>)formatr   rO   r0   s    r    __repr__z_PathParents.__repr__  s    $$T]%;<<<r"   N)	rO   rP   rQ   rR   	__slots__r2   r   r  r  r'   r"   r    r   r     sb        7 77I" " "$ $ $	H 	H 	H= = = = =r"   r   c                   (   e Zd ZdZdZd Zd Zed             Zed             Z	ed             Z
ed             Zd	 Zd
 Zd Zd Zd Zd Zd Zed             Zd Zd Zd Zd Zd Zd Z e ed          d          Z e ed          d          Zed             Zed             Zed             Z ed             Z!ed              Z"d! Z#d" Z$d# Z%d$ Z&d% Z'ed&             Z(d' Z)d( Z*d) Z+ed*             Z,ed+             Z-d, Z.d- Z/d. Z0d/S )0r   a|  Base class for manipulating paths without I/O.

    PurePath represents a filesystem path and offers operations which
    don't imply any actual filesystem I/O.  Depending on your system,
    instantiating a PurePath will return either a PurePosixPath or a
    PureWindowsPath object.  You can also instantiate either of these classes
    directly, regardless of your system.
    )r   r   r   _str_hash_pparts_cached_cpartsc                 z    | t           u rt          j        dk    rt          nt          } |                     |          S )zConstruct a PurePath from one or several strings and or existing
        PurePath objects.  The strings and path objects are combined so as
        to yield a canonicalized path, which is incorporated into the
        new PurePath object.
        rW   )r   r   r   r   r   _from_parts)r   argss     r    __new__zPurePath.__new__  s2     (??%'W__//-Ct$$$r"   c                 8    | j         t          | j                  fS r-   )	__class__r   r   r0   s    r    
__reduce__zPurePath.__reduce__  s     dk 2 233r"   c                 X   g }|D ]}t          |t                    r||j        z  }"t          j        |          }t          |t
                    r#|                    t          |                     nt          dt          |          z            | j	        
                    |          S )NzNargument should be a str object or an os.PathLike object returning str, not %r)r   r   r   r   fspathstrr;   	TypeErrorr   _flavourrG   )r   r  r?   as       r    _parse_argszPurePath._parse_args  s      	# 	#A!X&& #!IaLLa%% #LLQ((((#7q''"# # # |''...r"   c                     t                               |           }|                    |          \  }}}||_        ||_        ||_        |S r-   )objectr  r  r   r   r   )r   r  r1   rA   rB   r?   s         r    r  zPurePath._from_parts  sI     ~~c""++D11T5	
r"   c                 d    t                               |           }||_        ||_        ||_        |S r-   )r  r  r   r   r   )r   rA   rB   r?   r1   s        r    r  zPurePath._from_parsed_parts  s-    ~~c""	
r"   c                     |s|r(||z   | j                             |dd                    z   S | j                             |          S r   )r  r/   )r   rA   rB   r?   s       r    _format_parsed_partszPurePath._format_parsed_parts  sN     	,$ 	,: 1 1%) < <<<<$$U+++r"   c                     |                      |          \  }}}| j                            | j        | j        | j        |||          \  }}}|                     |||          S r-   )r  r  rN   r   r   r   r  )r1   r  rA   rB   r?   s        r    _make_childzPurePath._make_child  sg    ++D11T5=::Itz4;T5B BT5&&sD%888r"   c                     	 | j         S # t          $ r7 |                     | j        | j        | j                  pd| _         | j         cY S w xY w)z[Return the string representation of the path, suitable for
        passing to system calls.r5   )r  AttributeErrorr!  r   r   r   r0   s    r    __str__zPurePath.__str__  sh    	9 	 	 	11$)TZ26+? ? FBE I9	s   	 >A
	A
c                      t          |           S r-   )r  r0   s    r    
__fspath__zPurePath.__fspath__"  s    4yyr"   c                 `    | j         }t          |                               |j        d          S )zNReturn the string representation of the path with forward (/)
        slashes.rV   )r  r  r8   r.   r1   fs     r    r   zPurePath.as_posix%  s)     M4yy  ,,,r"   c                 *    t          j        |           S )zaReturn the bytes representation of the path.  This is only
        recommended to use under Unix.)r   fsencoder0   s    r    	__bytes__zPurePath.__bytes__+  s     {4   r"   c                 f    d                     | j        j        |                                           S )Nz{}({!r}))r  r  rO   r   r0   s    r    r  zPurePath.__repr__0  s%      !8$--//JJJr"   c                 |    |                                  st          d          | j                            |           S )z Return the path as a 'file' URI.z.relative path can't be expressed as a file URI)is_absoluter   r  r   r0   s    r    as_urizPurePath.as_uri3  s<    !! 	OMNNN}%%d+++r"   c                     	 | j         S # t          $ r. | j                            | j                  | _         | j         cY S w xY wr-   )r  r%  r  r   r   r0   s    r    _cpartszPurePath._cparts9  sT    	'&& 	' 	' 	'"&-">">t{"K"KD&&&&	's   	 5A Ac                 v    t          |t                    st          S | j        |j        k    o| j        |j        u S r-   )r   r   NotImplementedr4  r  r1   others     r    __eq__zPurePath.__eq__B  s7    %** 	"!!|u},P%.1PPr"   c                     	 | j         S # t          $ r0 t          t          | j                            | _         | j         cY S w xY wr-   )r  r%  hashr   r4  r0   s    r    __hash__zPurePath.__hash__G  sQ    	: 	 	 	eDL1122DJ:	s   	 7AAc                 v    t          |t                    r| j        |j        urt          S | j        |j        k     S r-   r   r   r  r6  r4  r7  s     r    __lt__zPurePath.__lt__N  7    %** 	"dm5>.Q.Q!!|em++r"   c                 v    t          |t                    r| j        |j        urt          S | j        |j        k    S r-   r>  r7  s     r    __le__zPurePath.__le__S  7    %** 	"dm5>.Q.Q!!|u},,r"   c                 v    t          |t                    r| j        |j        urt          S | j        |j        k    S r-   r>  r7  s     r    __gt__zPurePath.__gt__X  r@  r"   c                 v    t          |t                    r| j        |j        urt          S | j        |j        k    S r-   r>  r7  s     r    __ge__zPurePath.__ge__]  rC  r"   r   z.The drive prefix (letter or UNC path), if any.)docr   zThe root of the path, if any.c                 $    | j         | j        z   }|S )z/The concatenation of the drive and root, or ''.)r   r   )r1   anchors     r    rJ  zPurePath.anchorh  s     TZ'r"   c                 j    | j         }t          |          | j        s| j        rdndk    rdS |d         S )z!The final path component, if any.rI   r   r4   ri   )r   rm   r   r   r   s     r    r   zPurePath.namen  s=     u::	?TZ?!!a@@2Ryr"   c                     | j         }|                    d          }d|cxk     rt          |          dz
  k     rn n
||d         S dS )z{
        The final component's last suffix, if any.

        This includes the leading period. For example: '.txt'
        r5   r   rI   Nr4   r   rfindrm   r1   r   r   s      r    suffixzPurePath.suffixv  sX     yJJsOOq    3t99q=     8O2r"   c                     | j         }|                    d          rg S |                    d          }d |                    d          dd         D             S )z
        A list of the final component's suffixes, if any.

        These include the leading periods. For example: ['.tar', '.gz']
        r5   c                     g | ]}d |z   S )r5   r'   )ra   rP  s     r    r~   z%PurePath.suffixes.<locals>.<listcomp>  s    ???f???r"   rI   N)r   endswithro   r:   r1   r   s     r    suffixeszPurePath.suffixes  s\     y== 	I{{3??4::c??122+>????r"   c                     | j         }|                    d          }d|cxk     rt          |          dz
  k     rn n
|d|         S |S )z0The final path component, minus its last suffix.r5   r   rI   NrM  rO  s      r    stemzPurePath.stem  sX     yJJsOOq    3t99q=     8OKr"   c                 l   | j         st          | d          | j                            |f          \  }}}|r7|d         | j        j        | j        j        fv s|s|st          |          dk    rt          d|z            |                     | j        | j	        | j
        dd         |gz             S )z-Return a new path with the file name changed. has an empty nameri   rI   zInvalid name %rN)r   r   r  rG   r.   r6   rm   r  r   r   r   )r1   r   rA   rB   r?   s        r    	with_namezPurePath.with_name  s    y 	?ttt=>>>=44dW==T5 	9RT]%68L$MMM N N!%jjAoo.$7888&&ty$*'+{3B3'74&'@B B 	Br"   c                 <    |                      || j        z             S )z(Return a new path with the stem changed.)rZ  rP  )r1   rW  s     r    	with_stemzPurePath.with_stem  s    ~~dT[0111r"   c                    | j         }|j        |v s|j        r|j        |v rt          d|          |r|                    d          r|dk    rt          d|z            | j        }|st          | d          | j        }|s||z   }n|dt          |                    |z   }|                     | j	        | j
        | j        dd         |gz             S )zReturn a new path with the file suffix changed.  If the path
        has no suffix, add given suffix.  If the given suffix is an empty
        string, remove the suffix from the path.
        zInvalid suffix r5   zInvalid suffix %rrY  Nri   )r  r.   r6   r   r   r   rP  rm   r  r   r   r   )r1   rP  r+  r   
old_suffixs        r    with_suffixzPurePath.with_suffix  s
   
 M5F??ah?18v+=+=*FF<=== 	=&++C00 	=FcMM0F;<<<y 	?ttt=>>>[
 	4&=DD)#j//))*V3D&&ty$*'+{3B3'74&'@B B 	Br"   c                 R   |st          d          | j        }| j        }| j        }|r||g|dd         z   }n|}|                     |          \  }}}|r||g|dd         z   }	n|}	t          |	          }
| j        j        }|
dk    r|s|run  ||d|
                    ||	          k    rT|                     |||          }t          d
                    t          |           t          |                              |                     d|
dk    r|nd||
d                   S )zReturn the relative path to another path identified by the passed
        arguments.  If the operation is not possible (because this is not
        a subpath of the other path), raise ValueError.
        zneed at least one argumentrI   Nr   zU{!r} is not in the subpath of {!r} OR one path is relative and the other is absolute.r4   )r  r   r   r   r  rm   r  r   r!  r   r  r  r  )r1   r8  r?   rA   rB   	abs_partsto_drvto_rootto_partsto_abs_partsncf	formatteds                r    relative_tozPurePath.relative_to  sf     	:8999iz 	deABBi/III$($4$4U$;$;! 	$"G,x|;LL#L])FFDFCF9RaR=(9(9RR=M=M(M(M11&'8LLI J$fSYYI??A A A &&r16644r'0}6 6 	6r"   c                 >    	  | j         |  dS # t          $ r Y dS w xY w)zFReturn True if the path is relative to another path or False.
        TF)ri  r   r7  s     r    is_relative_tozPurePath.is_relative_to  s>    	De$$4 	 	 	55	s   
 
c                 r    	 | j         S # t          $ r# t          | j                  | _         | j         cY S w xY w)zZAn object providing sequence-like access to the
        components in the filesystem path.)r  r%  r   r   r0   s    r    r?   zPurePath.parts  sI    	 < 	  	  	  --DL<	 s   	 *66c                 ,    |                      |          S )zCombine this path with one or several arguments, and return a
        new path representing either a subpath (if all arguments are relative
        paths) or a totally different path (if one of the arguments is
        anchored).
        )r#  )r1   r  s     r    joinpathzPurePath.joinpath  s     %%%r"   c                 ^    	 |                      |f          S # t          $ r
 t          cY S w xY wr-   )r#  r  r6  r1   keys     r    __truediv__zPurePath.__truediv__  sD    	"##SF+++ 	" 	" 	"!!!!	"s    ,,c                 n    	 |                      |g| j        z             S # t          $ r
 t          cY S w xY wr-   )r  r   r  r6  rp  s     r    __rtruediv__zPurePath.__rtruediv__  sK    	"##SEDK$7888 	" 	" 	"!!!!	"s     44c                     | j         }| j        }| j        }t          |          dk    r|s|r| S |                     |||dd                   S )zThe logical parent of the path.rI   Nri   )r   r   r   rm   r  )r1   rA   rB   r?   s       r    parentzPurePath.parent	  sU     izu::???t?K&&sD%*===r"   c                      t          |           S )z*A sequence of this path's logical parents.)r   r0   s    r    parentszPurePath.parents  s     D!!!r"   c                 V    | j         sdS | j        j         pt          | j                  S )zSTrue if the path is absolute (has both a root and, if applicable,
        a drive).F)r   r  r   boolr   r0   s    r    r1  zPurePath.is_absolute  s.     z 	5=((;DOO;r"   c                 @    | j                             | j                  S )zaReturn True if the path contains one of the special names reserved
        by the system, if any.)r  r   r   r0   s    r    r   zPurePath.is_reserved  s     }((555r"   c                 8   | j         j        } ||          }| j                             |f          \  }}}|st          d          |r| || j                  k    rdS |r| || j                  k    rdS | j        }|s|r-t          |          t          |          k    rdS |dd         }n"t          |          t          |          k    rdS t          t          |          t          |                    D ]\  }}t          j        ||          s dS dS )zE
        Return True if this path matches the given pattern.
        zempty patternFrI   NT)r  rJ   rG   r   r   r   r4  rm   zipr7   r   fnmatchcase)	r1   path_patternrg  rA   rB   	pat_partsr?   rD   r(   s	            r    r   zPurePath.match$  sA    ]#r,''#}88,IIT9 	._--- 	3""TY--''5 	DBBtzNN**5 	$ 	9~~U++u!!""II^^c%jj((5Xe__hy.A.ABB 	 	ID#&tS11 uutr"   N)1rO   rP   rQ   rR   r	  r  r  classmethodr  r  r  r!  r#  r&  r(  r   r.  r  r2  propertyr4  r9  r<  r?  rB  rE  rG  r   r   rB   rJ  r   rP  rU  rW  rZ  r\  r_  ri  rk  r?   rn  rr  rt  rv  rx  r1  r   r   r'   r"   r    r   r     sk        I
% % %4 4 4
 / / [/&   [   [ , , [,9 9 9    - - -! ! !
K K K, , , ' ' X'Q Q Q
  , , ,
- - -
, , ,
- - -
 HZZ''MO O OE 8JJw'';= = =D   X
   X   X 
@ 
@ X
@   X	B 	B 	B2 2 2B B B*6 6 6B   	  	  X	 & & &" " "" " " > > X> " " X"< < <6 6 6
    r"   r   c                       e Zd ZdZeZdZdS )r   zPurePath subclass for non-Windows systems.

    On a POSIX system, instantiating a PurePath should return this object.
    However, you can also instantiate it directly on any system.
    r'   N)rO   rP   rQ   rR   _posix_flavourr  r	  r'   r"   r    r   r   B  s$         
 HIIIr"   r   c                       e Zd ZdZeZdZdS )r   zPurePath subclass for Windows systems.

    On a Windows system, instantiating a PurePath should return this object.
    However, you can also instantiate it directly on any system.
    r'   N)rO   rP   rQ   rR   _windows_flavourr  r	  r'   r"   r    r   r   L  s$         
  HIIIr"   r   c                   ^   e Zd ZdZdZd Zd Zd Zd Ze	d             Z
e	d             Zd	 Zd
 Zd Zd Zd Zd Zd7dZdddZd Zd Z	 	 d8dZd Zd9dZd Zd:dZd Zd;d Zd<d"Zddd#Zd$ Zd7d%Z d& Z!d' Z"d( Z#d) Z$d7d*Z%d+ Z&d, Z'd- Z(d. Z)d/ Z*d0 Z+d1 Z,d2 Z-d3 Z.d4 Z/d5 Z0d6 Z1dS )=r   a  PurePath subclass that can make system calls.

    Path represents a filesystem path but unlike PurePath, also offers
    methods to do system calls on path objects. Depending on your system,
    instantiating a Path will return either a PosixPath or a WindowsPath
    object. You can also instantiate a PosixPath or WindowsPath directly,
    but cannot instantiate a WindowsPath on a POSIX system or vice versa.
    r'   c                     | t           u rt          j        dk    rt          nt          } |                     |          }|j        j        st          d| j	        d          |S )NrW   zcannot instantiate z on your system)
r   r   r   r   r   r  r  r   NotImplementedErrorrO   )r   r  kwargsr1   s       r    r  zPath.__new__d  sd    $;;!#D++iCt$$}) 	9%%),'8 9 9 9r"   c                 Z    | j         |gz   }|                     | j        | j        |          S r-   )r   r  r   r   )r1   rD   r?   s      r    r   zPath._make_child_relpathm  s.     tf$&&ty$*eDDDr"   c                 >    t          j        dt          d           | S )Nz}pathlib.Path.__enter__() is deprecated and scheduled for removal in Python 3.13; Path objects as a context manager is a no-oprg   
stacklevel)warningswarnDeprecationWarningr0   s    r    	__enter__zPath.__enter__s  s0     	 + )Q	8 	8 	8 	8 r"   c                     d S r-   r'   )r1   tvtbs       r    __exit__zPath.__exit__  s    r"   c                 :     | t          j                              S )zjReturn a new path pointing to the current working directory
        (as returned by os.getcwd()).
        )r   getcwdr   s    r    cwdzPath.cwd  s    
 s29;;r"   c                 <     | d                                           S )zrReturn a new path pointing to the user's home directory (as
        returned by os.path.expanduser('~')).
        ~)
expanduserr  s    r    homez	Path.home  s    
 s3xx""$$$r"   c                    |                                  }	 |                                 }n7# t          $ r* |                     |                                           }Y nw xY wt          j                            ||          S )zoReturn whether other_path is the same or not as this file
        (as returned by os.path.samefile()).
        )statr%  r  r   r   samestat)r1   
other_pathstother_sts       r    samefilezPath.samefile  s{     YY[[	9!((HH 	9 	9 	9~~j116688HHH	9wH---s   + 1AAc              #   f   K   t          j        |           D ]}|                     |          V  dS )zyIterate over the files in this directory.  Does not yield any
        result for the special paths '.' and '..'.
        N)r   listdirr   rT  s     r    iterdirzPath.iterdir  sH       Jt$$ 	1 	1D**4000000	1 	1r"   c                 *    t          j        |           S r-   )r   r   r0   s    r    r   zPath._scandir  s     z$r"   c              #     K   t          j        d| |           |s"t          d                    |                    | j                            |f          \  }}}|s|rt          d          |d         | j        j        | j        j        fv r|	                    d           t          t          |          | j                  }|                    |           D ]}|V  dS )zIterate over this subtree and yield all existing files (of any
        kind, including directories) matching the given relative pattern.
        zpathlib.Path.globzUnacceptable pattern: {!r}%Non-relative patterns are unsupportedri   r4   N)r<   auditr   r  r  rG   r  r.   r6   r;   r   r   r   r1   r   rA   rB   r   selectorr}   s          r    globz	Path.glob  s       		%tW555 	K9@@IIJJJ#'=#<#<gZ#H#H T= 	O$ 	O%&MNNN2;4=,dm.BCCC  $$$!%"6"6FF%%d++ 	 	AGGGG	 	r"   c              #     K   t          j        d| |           | j                            |f          \  }}}|s|rt	          d          |r5|d         | j        j        | j        j        fv r|                    d           t          dt          |          z   | j                  }|
                    |           D ]}|V  dS )zRecursively yield all existing files (of any kind, including
        directories) matching the given relative pattern, anywhere in
        this subtree.
        zpathlib.Path.rglobr  ri   r4   )r   N)r<   r  r  rG   r  r.   r6   r;   r   r   r   r  s          r    rglobz
Path.rglob  s      
 		&g666#'=#<#<gZ#H#H T= 	O$ 	O%&MNNN 	%wr{t}'8$-:N&OOO  $$$!'E-,@,@"@$-PP%%d++ 	 	AGGGG	 	r"   c                     |                                  r| S |                     |                                 g| j        z             S )zReturn an absolute version of this path by prepending the current
        working directory. No normalization or symlink resolution is performed.

        Use resolve() to get the canonical path to a file.
        )r1  r  r  r   r0   s    r    absolutezPath.absolute  sB      	Kt{ :;;;r"   Fc                 .   d }	 t           j                            | |          }n# t          $ r} ||            d}~ww xY w|                     |f          }|s8	 |                                 n"# t          $ r} ||           Y d}~nd}~ww xY w|S )zl
        Make the path absolute, resolving all symlinks on the way and also
        normalizing it.
        c                     t          | dd          }| j        t          k    s|t          k    rt	          d| j        z            d S )Nr   r   zSymlink loop from %r)r   r   r   _WINERROR_CANT_RESOLVE_FILENAMERuntimeErrorfilename)r   r   s     r    check_eloopz!Path.resolve.<locals>.check_eloop  sJ    q*a00Hw%8/N#N#N"#9AJ#FGGG $O#Nr"   )strictN)r   r   realpathr   r  r  )r1   r  r  rz   r   r}   s         r    resolvezPath.resolve  s    	H 	H 	H
	  f 55AA 	 	 	KNNN	 aT""  	   As*   !' 
A=AA3 3
B=BBTr   c                .    t          j        | |          S )zh
        Return the result of the stat() system call on this path, like
        os.stat() does.
        r   )r   r  )r1   r   s     r    r  z	Path.stat  s    
 wt_====r"   c                     	 ddl }|                    |                                 j                  j        S # t
          $ r t          d          w xY w)z:
        Return the login name of the file owner.
        r   Nz*Path.owner() is unsupported on this system)pwdgetpwuidr  st_uidpw_nameImportErrorr  )r1   r  s     r    ownerz
Path.owner  s_    	TJJJ<<		 233;; 	T 	T 	T%&RSSS	T	   47 Ac                     	 ddl }|                    |                                 j                  j        S # t
          $ r t          d          w xY w)z8
        Return the group name of the file gid.
        r   Nz*Path.group() is unsupported on this system)grpgetgrgidr  st_gidgr_namer  r  )r1   r  s     r    groupz
Path.group  s_    
	TJJJ<<		 233;; 	T 	T 	T%&RSSS	Tr  rri   Nc                 d    d|vrt          j        |          }t          j        | |||||          S )z|
        Open the file pointed by this path and return a file object, as
        the built-in open() function does.
        b)iotext_encodingopen)r1   mode	bufferingencodingerrorsnewlines         r    r  z	Path.open  s7     d??'11HwtT9hHHHr"   c                     |                      d          5 }|                                cddd           S # 1 swxY w Y   dS )zK
        Open the file in bytes mode, read it, and close the file.
        rbr  N)r  readr*  s     r    
read_byteszPath.read_bytes  s     YYDY!! 	Q6688	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   8<<c                     t          j        |          }|                     d||          5 }|                                cddd           S # 1 swxY w Y   dS )zJ
        Open the file in text mode, read it, and close the file.
        r  )r  r  r  N)r  r  r  r  )r1   r  r  r+  s       r    	read_textzPath.read_text  s     #H--YYC(6YBB 	a6688	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   AAAc                     t          |          }|                     d          5 }|                    |          cddd           S # 1 swxY w Y   dS )zO
        Open the file in bytes mode, write to it, and close the file.
        wbr  N)
memoryviewr  write)r1   dataviewr+  s       r    write_byteszPath.write_bytes%  s    
 $YYDY!! 	!Q774==	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	!s   AAAc                    t          |t                    st          d|j        j        z            t          j        |          }|                     d|||          5 }|                    |          cddd           S # 1 swxY w Y   dS )zN
        Open the file in text mode, write to it, and close the file.
        zdata must be str, not %sw)r  r  r  r  N)	r   r  r  r  rO   r  r  r  r  )r1   r  r  r  r  r+  s         r    
write_textzPath.write_text.  s     $$$ 	56 N34 5 5 5#H--YYC(67YSS 	!WX774==	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	!s   BBBc                     t          t          d          st          d          |                     t          j        |           f          S )zD
        Return the path to which the symbolic link points.
        readlinkz*os.readlink() not available on this system)hasattrr   r  r  r  r0   s    r    r  zPath.readlink9  sG     r:&& 	T%&RSSST!2!2 4555r"     c                    |r(	 t          j        | d           dS # t          $ r Y nw xY wt           j        t           j        z  }|s|t           j        z  }t          j        | ||          }t          j        |           dS )zS
        Create this file with the given access mode, if it doesn't exist.
        N)r   utimer   O_CREATO_WRONLYO_EXCLr  close)r1   r  exist_okflagsfds        r    touchz
Path.touchA  s    
  
	t$$$
 	    
 
R[( 	RYEWT5$''
s    
((  c                    	 t          j        | |           dS # t          $ rF |r| j        | k    r | j                            dd           |                     |d|           Y dS t          $ r |r|                                 s Y dS w xY w)z<
        Create a new directory at this given path.
        T)rx  r  FN)r   mkdirFileNotFoundErrorrv  r   r   )r1   r  rx  r  s       r    r  z
Path.mkdirW  s    	HT4       	? 	? 	? dkT11KdT:::JJtUXJ>>>>>> 	 	 	  4;;==   	s    AB( BBc                4    t          j        | ||           dS )zF
        Change the permissions of the path, like os.chmod().
        r   N)r   chmod)r1   r  r   s      r    r  z
Path.chmodh  s!     	t_======r"   c                 4    |                      |d           dS )z
        Like chmod(), except if the path points to a symlink, the symlink's
        permissions are changed, rather than its target's.
        Fr   N)r  )r1   r  s     r    lchmodzPath.lchmodn  s     
 	

4
/////r"   c                 X    	 t          j        |            dS # t          $ r |s Y dS w xY w)zd
        Remove this file or link.
        If the path is a directory, use rmdir() instead.
        N)r   unlinkr  )r1   
missing_oks     r    r   zPath.unlinku  sM    
	IdOOOOO  	 	 	   	s    ))c                 .    t          j        |            dS )zF
        Remove this directory.  The directory must be empty.
        N)r   rmdirr0   s    r    r  z
Path.rmdir  s     	r"   c                 .    |                      d          S )z
        Like stat(), except if the path points to a symlink, the symlink's
        status information is returned, rather than its target's.
        Fr   )r  r0   s    r    lstatz
Path.lstat  s    
 yyy///r"   c                 V    t          j        | |           |                     |          S )a2  
        Rename this path to the target path.

        The target path may be absolute or relative. Relative paths are
        interpreted relative to the current working directory, *not* the
        directory of the Path object.

        Returns the new Path instance pointing to the target path.
        )r   renamer  r1   targets     r    r  zPath.rename  s(     		$~~f%%%r"   c                 V    t          j        | |           |                     |          S )aS  
        Rename this path to the target path, overwriting if that path exists.

        The target path may be absolute or relative. Relative paths are
        interpreted relative to the current working directory, *not* the
        directory of the Path object.

        Returns the new Path instance pointing to the target path.
        )r   r8   r  r  s     r    r8   zPath.replace  s(     	
4   ~~f%%%r"   c                 z    t          t          d          st          d          t          j        || |           dS )z
        Make this path a symlink pointing to the target path.
        Note the order of arguments (link, target) is the reverse of os.symlink.
        symlinkz)os.symlink() not available on this systemN)r  r   r  r  )r1   r	  target_is_directorys      r    
symlink_tozPath.symlink_to  sA    
 r9%% 	S%&QRRR

64!455555r"   c                 x    t          t          d          st          d          t          j        ||            dS )z
        Make this path a hard link pointing to the same file as *target*.

        Note the order of arguments (self, target) is the reverse of os.link's.
        linkz&os.link() not available on this systemN)r  r   r  r  r  s     r    hardlink_tozPath.hardlink_to  s>     r6"" 	P%&NOOO
r"   c                     t          j        dt          d           |                     |                              |            dS )a  
        Make the target path a hard link pointing to this path.

        Note this function does not make this path a hard link to *target*,
        despite the implication of the function and argument names. The order
        of arguments (target, link) is the reverse of Path.symlink_to, but
        matches that of os.link.

        Deprecated since Python 3.10 and scheduled for removal in Python 3.12.
        Use `hardlink_to()` instead.
        zypathlib.Path.link_to() is deprecated and is scheduled for removal in Python 3.12. Use pathlib.Path.hardlink_to() instead.rg   r  N)r  r  r  r  r  r  s     r    link_tozPath.link_to  sR     	 @ )Q	8 	8 	8 	8 	v**400000r"   c                     	 |                                   n4# t          $ r}t          |          s Y d}~dS d}~wt          $ r Y dS w xY wdS )z+
        Whether this path exists.
        NFT)r  r   r!   r   r1   r   s     r    r   zPath.exists  su    	IIKKKK 	 	 	 ## 55555 	 	 	55	 ts    
A7AAc                     	 t          |                                 j                  S # t          $ r}t	          |          s Y d}~dS d}~wt
          $ r Y dS w xY w)z3
        Whether this path is a directory.
        NF)r	   r  st_moder   r!   r   r  s     r    r   zPath.is_dir  z    
	499;;./// 	 	 	 ##  55555 	 	 	55	   %( 
AAAAc                     	 t          |                                 j                  S # t          $ r}t	          |          s Y d}~dS d}~wt
          $ r Y dS w xY w)zq
        Whether this path is a regular file (also True for symlinks pointing
        to regular files).
        NF)r   r  r  r   r!   r   r  s     r    is_filezPath.is_file  sz    

	499;;./// 	 	 	 ##  55555 	 	 	55	r  c                 t   |                                  r|                                 sdS 	 | j                                        j        }n# t
          $ r Y dS w xY w|                                 j        }||k    rdS |                                 j        }| j                                        j        }||k    S )z;
        Check if this path is a POSIX mount point
        FT)r   r   rv  r  st_devr   st_ino)r1   
parent_devdevino
parent_inos        r    is_mountzPath.is_mount  s    
 {{}} 	DKKMM 	5	))++2JJ 	 	 	55	 iikk *4iikk [%%''.
j  s   A 
AAc                     	 t          |                                 j                  S # t          $ r}t	          |          s Y d}~dS d}~wt
          $ r Y dS w xY w)z7
        Whether this path is a symbolic link.
        NF)r
   r  r  r   r!   r   r  s     r    
is_symlinkzPath.is_symlink  sx    		4::<</000 	 	 	 ## 55555 	 	 	55	r  c                     	 t          |                                 j                  S # t          $ r}t	          |          s Y d}~dS d}~wt
          $ r Y dS w xY w)z6
        Whether this path is a block device.
        NF)r   r  r  r   r!   r   r  s     r    is_block_devicezPath.is_block_device!  r  r  c                     	 t          |                                 j                  S # t          $ r}t	          |          s Y d}~dS d}~wt
          $ r Y dS w xY w)z:
        Whether this path is a character device.
        NF)r   r  r  r   r!   r   r  s     r    is_char_devicezPath.is_char_device1  r  r  c                     	 t          |                                 j                  S # t          $ r}t	          |          s Y d}~dS d}~wt
          $ r Y dS w xY w)z.
        Whether this path is a FIFO.
        NF)r   r  r  r   r!   r   r  s     r    is_fifozPath.is_fifoA  z    
	DIIKK/000 	 	 	 ##  55555 	 	 	55	r  c                     	 t          |                                 j                  S # t          $ r}t	          |          s Y d}~dS d}~wt
          $ r Y dS w xY w)z0
        Whether this path is a socket.
        NF)r   r  r  r   r!   r   r  s     r    	is_socketzPath.is_socketQ  r,  r  c                 <   | j         s| j        s| j        r| j        d         dd         dk    rmt          j                            | j        d                   }|dd         dk    rt          d          |                     |g| j        dd         z             S | S )zl Return a new path with expanded ~ and ~user constructs
        (as returned by os.path.expanduser)
        r   NrI   r  z#Could not determine home directory.)r   r   r   r   r   r  r  r  )r1   homedirs     r    r  zPath.expandusera  s      	Adj 	AK	A KN2A2.#55g((Q88Grr{c!!"#HIII##WIABB$?@@@r"   )F)r  ri   NNN)NN)NNN)r  T)r  FF)2rO   rP   rQ   rR   r	  r  r   r  r  r  r  r  r  r  r   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r  r  r  r8   r  r  r  r   r   r  r#  r%  r'  r)  r+  r.  r  r'   r"   r    r   r   Y  s,         I  E E E    
     [  % % [%	. 	. 	.1 1 1          < < <   6 '+ > > > > >T T T	T 	T 	T 59"&I I I I     ! ! !	! 	! 	! 	!6 6 6   ,   " .2 > > > > >0 0 0	 	 	 	  0 0 0& & && & &6 6 6 6  1 1 1(       "! ! !(                  r"   r   c                       e Zd ZdZdZdS )r   zsPath subclass for non-Windows systems.

    On a POSIX system, instantiating a Path should return this object.
    r'   N)rO   rP   rQ   rR   r	  r'   r"   r    r   r   o  s          IIIr"   r   c                       e Zd ZdZdZd ZdS )r   zqPath subclass for Windows systems.

    On a Windows system, instantiating a Path should return this object.
    r'   c                      t          d          )Nz-Path.is_mount() is unsupported on this system)r  r0   s    r    r#  zWindowsPath.is_mount}  s    !"QRRRr"   N)rO   rP   rQ   rR   r	  r#  r'   r"   r    r   r   v  s9          IS S S S Sr"   r   )<r   	functoolsr  r   r   r   r   r<   r  _collections_abcr   r   r   r   r   r   operatorr   r  r	   r
   r   r   r   r   r   urllib.parser   r   __all___WINERROR_NOT_READY_WINERROR_INVALID_NAMEr  r   r   r!   r)   r  r+   rT   r   r  r  r   r  r   r   r   r   r   r   r   r   PathLikeregisterr   r   r   r   r   r'   r"   r    <module>r=     s        				  				     				 



  % % % % % % / / / / / / / / / / / /       P P P P P P P P P P P P P P P P P P @ @ @ @ @ @     "&  7E51 #% 
H H H
2 2 2<# <# <# <# <#v <# <# <#~tR tR tR tR tRh tR tR tRn'6 '6 '6 '6 '6H '6 '6 '6T #?$$ * * * 79k"" ;*(Y(**>::NG G G G G G G G2           y        	   >% % % % % % % %X= = = = =8 = = =Bt t t t tv t t tp   X       H       h   S S S S S8 S S Sl    m   S S S S S$ S S S S Sr"   