Ë
    òT•jKu  ã                   óÀ  — d Z dZdZdZdZdZdZdZdZdd	l	Z	dd	l
Z
dd	lZdd	lZdd
l­ g d¢Zd„ Z	 ddlmZmZmZ d„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zej<                  j                   e_         d„ Zd„ Z  e!e	jD                  d«      rd„ Z#nd„ Z#d„ Z$	 ddl%m&Z& d„ Z'd„ Z(dZ)d	a*d	a+d „ Z,	 dd!l%m-Z- d"„ Z.d$„ Z/	 dd%l%m0Z0 d&„ Z1	 dd'l%m2Z2m3Z4 e5fd(„Z6e5fd)„Z7d*d+œd,„Z8d.Z9d8d/„Z:d0„ Z;	 dd1l%m<Z= dd2l%m>Z? dd3l%m@ZA dd4l%mBZC 	 dd5l%mDZD d6„ ZEy	# e$ r d„ ZY ŒÍw xY w# e$ r d	Z&Y Œƒw xY w# e$ r d#„ Z.Y Œxw xY w# e$ r e/Z1Y Œxw xY w# e$ r	 d*d+œd-„Z8Y Œpw xY w# e$ r Y ŒYw xY w# e$ r d7„ ZEY y	w xY w)9z�Common pathname manipulations, WindowsNT/95 version.

Instead of importing this module directly, import os and refer to this
module as os.path.
ú.ú..ú\ú;ú/z.;C:\binÚnulé    N)Ú*))ÚnormcaseÚisabsÚjoinÚ
splitdriveÚ	splitrootÚsplitÚsplitextÚbasenameÚdirnameÚcommonprefixÚgetsizeÚgetmtimeÚgetatimeÚgetctimeÚislinkÚexistsÚlexistsÚisdirÚisfileÚismountÚ
expanduserÚ
expandvarsÚnormpathÚabspathÚcurdirÚpardirÚsepÚpathsepÚdefpathÚaltsepÚextsepÚdevnullÚrealpathÚsupports_unicode_filenamesÚrelpathÚsamefileÚsameopenfileÚsamestatÚ
commonpathÚ
isjunctionÚALLOW_MISSINGc                 ó&   — t        | t        «      ryy)Nó   \/ú\/)Ú
isinstanceÚbytes©Úpaths    ú/usr/lib/python3.12/ntpath.pyÚ_get_bothsepsr;   $   s   € Ü�$œÔØàó    )ÚLCMapStringExÚLOCALE_NAME_INVARIANTÚLCMAP_LOWERCASEc                 óX  — t        j                  | «      } | s| S t        | t        «      r]t	        j
                  «       }| j                  |d«      j                  dd«      } t        t        t        | «      } | j                  |d«      S t        t        t        | j                  dd«      «      S )únNormalize case of pathname.

        Makes all characters lowercase and all slashes into backslashes.
        Úsurrogateescaper   r   )ÚosÚfspathr6   r7   ÚsysÚgetfilesystemencodingÚdecodeÚreplaceÚ_LCMapStringExÚ_LOCALE_NAME_INVARIANTÚ_LCMAP_LOWERCASEÚencode)ÚsÚencodings     r:   r
   r
   4   s”   € ô
 �I‰I�a‹LˆÙØˆHÜ�aœÔÜ×0Ñ0Ó2ˆHØ—‘˜Ð#4Ó5×=Ñ=¸cÀ4ÓHˆAÜÔ5Ü/°ó4ˆAà—8‘8˜HÐ&7Ó8Ð8ä!Ô"8Ü"2Ø"#§)¡)¨C°Ó"6ó8ð 8r<   c                 ó  — t        j                  | «      } t        | t        «      rFt        j                  t        j
                  | «      j                  dd«      j                  «       «      S | j                  dd«      j                  «       S )rA   r   r   )rC   rD   r6   r7   ÚfsencodeÚfsdecoderH   Úlower)rM   s    r:   r
   r
   G   sb   € ô
 �I‰I�a‹LˆÜ�aœÔÜ—;‘;œrŸ{™{¨1›~×5Ñ5°c¸4Ó@×FÑFÓHÓIÐIØ�y‰y˜˜dÓ#×)Ñ)Ó+Ð+r<   c                 óÚ   — t        j                  | «      } t        | t        «      rd}d}d}nd}d}d}| dd j	                  ||«      } | j                  |«      s| j                  |d	«      ry
y)zTest whether a path is absoluteó   \ó   /s   :\r   r   z:\Né   é   TF)rC   rD   r6   r7   rH   Ú
startswith)rM   r$   r'   Ú	colon_seps       r:   r   r   X   sn   € ä
�	‰	�!‹€AÜ�!”UÔØˆØˆØ‰	àˆØˆØˆ	Ø	ˆ"ˆ1ˆ�‰�f˜cÓ"€Að 	‡|�|�CÔ˜AŸL™L¨°AÔ6ØØr<   c                 ó8  — t        j                  | «      } t        | t        «      rd}d}d}nd}d}d}	 |s| d d |z    t	        | «      \  }}}t        t         j                  |«      D ]b  }t	        |«      \  }	}
}|
r|	s|s|	}|
}|}Œ|	r/|	|k7  r*|	j                  «       |j                  «       k7  r|	}|
}|}ŒN|	}|r|d   |vr||z   }||z   }Œd |r|s|r|dd  ||z   vr||z   |z   S ||z   |z   S # t        t        t        f$ r t        j                  d	| g|¢­Ž  ‚ w xY w)
NrT   r4   ó   :r   r5   ú:r   éÿÿÿÿr   )rC   rD   r6   r7   r   ÚmaprR   Ú	TypeErrorÚAttributeErrorÚBytesWarningÚgenericpathÚ_check_arg_types)r9   Úpathsr$   ÚsepsÚcolonÚresult_driveÚresult_rootÚresult_pathÚpÚp_driveÚp_rootÚp_paths               r:   r   r   l   sd  € Ü�9‰9�T‹?€DÜ�$œÔØˆØˆØ‰àˆØˆØˆð!ÙØ��!ˆH�sŠNÜ1:¸4³Ñ.ˆ�k ;Ü”R—Y‘Y Ó&ò 	/ˆAÜ&/°£lÑ#ˆG�V˜VÙá¡,Ø#*�LØ$�Ø$�ØÙ˜W¨Ò4Ø—=‘=“? l×&8Ñ&8Ó&:Ò:à#*�LØ"(�KØ"(�KØà&�á˜{¨2™°dÑ:Ø)¨CÑ/�Ø%¨Ñ.‰Kð+	/ñ. ¡Ù˜\¨"¨#Ð.°e¸d±lÑBØ #Ñ%¨Ñ3Ð3Ø˜kÑ)¨KÑ7Ð7øÜ”~¤|Ð4ò Ü×$Ñ$ V¨TÐ:°EÓ:Øðús   ´B/C, Ã$C, Ã,-Dc                 ó.   — t        | «      \  }}}|||z   fS )aÚ  Split a pathname into drive/UNC sharepoint and relative path specifiers.
    Returns a 2-tuple (drive_or_unc, path); either part may be empty.

    If you assign
        result = splitdrive(p)
    It is always true that:
        result[0] + result[1] == p

    If the path contained a drive letter, drive_or_unc will contain everything
    up to and including the colon.  e.g. splitdrive("c:/dir") returns ("c:", "/dir")

    If the path contained a UNC path, the drive_or_unc will contain the host name
    and share up to but not including the fourth directory separator character.
    e.g. splitdrive("//host/computer/dir") returns ("//host/computer", "/dir")

    Paths cannot contain both a drive letter and a UNC path.

    )r   )rj   ÚdriveÚrootÚtails       r:   r   r   �   s#   € ô& " !›Ñ€Eˆ4�Ø�$˜‘+ÐÐr<   c                 óþ  — t        j                  | «      } t        | t        «      rd}d}d}d}d}n
d}d}d}d	}d
}| j	                  ||«      }|dd |k(  r||dd |k(  ri|dd j                  «       |k(  rdnd}|j                  ||«      }|dk(  r| ||fS |j                  ||dz   «      }	|	dk(  r| ||fS | d|	 | |	|	dz    | |	dz   d fS || dd | dd fS |dd |k(  r!|dd |k(  r| dd | dd | dd fS | dd || dd fS ||| fS )aþ  Split a pathname into drive, root and tail. The drive is defined
    exactly as in splitdrive(). On Windows, the root may be a single path
    separator or an empty string. The tail contains anything after the root.
    For example:

        splitroot('//server/share/') == ('//server/share', '/', '')
        splitroot('C:/Users/Barney') == ('C:', '/', 'Users/Barney')
        splitroot('C:///spam///ham') == ('C:', '/', '//spam///ham')
        splitroot('Windows/notepad') == ('', '', 'Windows/notepad')
    rT   rU   r[   ó   \\?\UNC\r<   r   r   r\   ú\\?\UNC\Ú NrW   é   é   r]   rV   )rC   rD   r6   r7   rH   ÚupperÚfind)
rj   r$   r'   rf   Ú
unc_prefixÚemptyÚnormpÚstartÚindexÚindex2s
             r:   r   r   ´   s‡  € ô 	�	‰	�!‹€AÜ�!”UÔØˆØˆØˆØ$ˆ
Ø‰àˆØˆØˆØ#ˆ
ØˆØ�I‰I�f˜cÓ"€EØˆRˆa€y�CÒØ��1ˆ:˜Òð ˜r ˜Ÿ™Ó*¨jÒ8‘A¸aˆEØ—J‘J˜s EÓ*ˆEØ˜Š{Ø˜% �Ð&Ø—Z‘Z  U¨Q¡YÓ/ˆFØ˜Š|Ø˜% �Ð&Ø�W�f�:˜q ¨°©
Ð3°Q°vÀ±z°{°^ÐCÐCð ˜!˜B˜Q˜%  1 2 Ð&Ð&Ø	ˆq�ˆ�uÒ	Ø��1ˆ:˜Òà�R�a�5˜!˜A˜a˜& ! A B %Ð'Ð'ð �R�a�5˜%  1 2 Ð&Ð&ð �e˜QˆÐr<   c                 óø   — t        j                  | «      } t        | «      }t        | «      \  }}} t	        | «      }|r| |dz
     |vr|dz  }|r| |dz
     |vrŒ| d| | |d }}||z   |j                  |«      z   |fS )z~Split a pathname.

    Return tuple (head, tail) where tail is everything after the final slash.
    Either part may be empty.rW   N)rC   rD   r;   r   ÚlenÚrstrip)rj   re   ÚdÚrÚiÚheadrq   s          r:   r   r   í   s”   € ô
 	�	‰	�!‹€AÜ˜Ó€DÜ˜‹l�G€A€qˆ!äˆA‹€AÙ
��!�A‘#‘˜dÑ"Ø	ˆQ‰ˆñ ��!�A‘#‘˜dÒ"à�2�A�˜˜!˜"˜ˆ$€DØˆq‰5�4—;‘;˜tÓ$Ñ$ dÐ*Ð*r<   c                 ó¬   — t        j                  | «      } t        | t        «      rt	        j
                  | ddd«      S t	        j
                  | ddd«      S )NrT   rU   ó   .r   r   r   )rC   rD   r6   r7   rb   Ú	_splitext©rj   s    r:   r   r     sG   € Ü
�	‰	�!‹€AÜ�!”UÔÜ×$Ñ$ Q¨¨t°TÓ:Ð:ä×$Ñ$ Q¨¨c°3Ó7Ð7r<   c                 ó   — t        | «      d   S )z)Returns the final component of a pathnamerW   ©r   rŠ   s    r:   r   r     ó   € ä�‹8�A‰;Ðr<   c                 ó   — t        | «      d   S )z-Returns the directory component of a pathnamer   rŒ   rŠ   s    r:   r   r     r�   r<   Úst_reparse_tagc                 ó®   — 	 t        j                  | «      }t        |j                  t        j                  k(  «      S # t        t        t        f$ r Y yw xY w©z!Test whether a path is a junctionF)	rC   ÚlstatÚOSErrorÚ
ValueErrorr`   Úboolr�   ÚstatÚIO_REPARSE_TAG_MOUNT_POINT©r9   Ústs     r:   r1   r1     sM   € ð	Ü—‘˜$“ˆBô �B×%Ñ%¬×)HÑ)HÑHÓIÐIøô œ¤^Ð4ò 	Ùð	ús   ‚= ½AÁAc                 ó.   — t        j                  | «       yr‘   )rC   rD   r8   s    r:   r1   r1   $  s   € ä
�	‰	�$ŒØr<   c                 óZ   — 	 t        j                  | «      }y# t        t        f$ r Y yw xY w)zCTest whether a path exists.  Returns True for broken symbolic linksFT)rC   r’   r“   r”   r˜   s     r:   r   r   ,  s2   € ðÜ�X‰X�d‹^ˆð øô ”ZÐ ò Ùðús   ‚ ˜*©*)Ú_getvolumepathnamec                 ó>  — t        j                  | «      } t        | «      }t        | «      } t	        | «      \  }}}|r
|d   |v r| S |r|syt
        rL| j                  |«      }t        | «      j                  |«      }|j                  «       |j                  «       k(  S y)zaTest whether a path is a mount point (a drive root, the root of a
    share, or a mounted volume)r   TF)rC   rD   r;   r!   r   rœ   r‚   Úcasefold)r9   re   ro   rp   ÚrestÚxÚys          r:   r   r   B  s‘   € ô �9‰9�T‹?€DÜ˜Ó€DÜ�4‹=€DÜ! $›Ñ€Eˆ4�Ù��q‘˜TÑ!ØˆxˆÙ‘DØåØ�K‰K˜ÓˆÜ˜dÓ#×*Ñ*¨4Ó0ˆØ�z‰z‹|˜qŸz™z›|Ñ+Ð+àr<   c                 ó8  — t        j                  | «      } t        | t        «      rd}nd}| j	                  |«      s| S dt        | «      }}||k  r+| |   t        | «      vr|dz  }||k  r| |   t        | «      vrŒdt         j                  v rt         j                  d   }nEdt         j                  vr| S 	 t         j                  d   }t        |t         j                  d   «      }|dk7  rs| d| }t        |t        «      rt        j                  |«      }t         j                  j                  d«      }||k7  r%|t        |«      k7  r| S t        t        |«      |«      }t        | t        «      rt        j                  |«      }|| |d	 z   S # t        $ r d}Y ŒÏw xY w)
zLExpand ~ and ~user constructs.

    If user or $HOME is unknown, do nothing.ó   ~ú~rW   ÚUSERPROFILEÚHOMEPATHÚ	HOMEDRIVEru   ÚUSERNAMEN)rC   rD   r6   r7   rX   r�   r;   ÚenvironÚKeyErrorr   rQ   Úgetr   r   rP   )r9   Útilder…   ÚnÚuserhomero   Útarget_userÚcurrent_users           r:   r   r   _  s{  € ô �9‰9�T‹?€DÜ�$œÔØ‰àˆØ�?‰?˜5Ô!ØˆØŒc�$‹i€q€AØ
ˆaŠ%�D˜‘G¤=°Ó#6Ñ6Ø	ˆQ‰ˆð ˆaŠ%�D˜‘G¤=°Ó#6Ò6ð œŸ
™
Ñ"Ü—:‘:˜mÑ,‰Øœ2Ÿ:™:Ñ%Øˆð	Ü—J‘J˜{Ñ+ˆEô ˜œrŸz™z¨*Ñ5Ó6ˆàˆA‚vØ˜1˜Q�iˆÜ�k¤5Ô)ÜŸ+™+ kÓ2ˆKÜ—z‘z—~‘~ jÓ1ˆà˜,Ò&ð œx¨Ó1Ò1Ø�ÜœG HÓ-¨{Ó;ˆHä�$œÔÜ—;‘;˜xÓ(ˆà�d˜1˜2�hÑÐøô/ ò 	ØŠEð	ús   Â6F ÆFÆFz.'[^']*'?|%(%|[^%]*%?)|\$(\$|[-\w]+|\{[^}]*\}?)c                 ó
  ‡‡‡‡‡— t        j                  | «      } t        | t        «      rld| vrd| vr| S t        s<ddl}|j                  t        j                  «       |j                  «      j                  at        }dŠdŠdŠdŠt        t         dd«      Šn\d| vrd	| vr| S t        s.ddl}|j                  t        |j                  «      j                  at        }d	Šd
ŠdŠdŠt         j                  Šˆˆˆˆˆfd„} ||| «      S )zfExpand shell variables of the forms $var, ${var} and %var%.

    Unknown variables are left unchanged.ó   $ó   %r   Nó   {ó   }Úenvironbú$ú%ú{ú}c                 ó”  •— | j                   }|€| d   S | |   }|dk(  r#|‰k(  r|S |j                  ‰«      s| d   S |d d }n3|‰k(  r|S |j                  ‰«      r|j                  ‰«      s| d   S |dd }	 ‰€9t        j                  t        j
                  t        j                  |«         «      S ‰|   S # t        $ r | d   cY S w xY w)Nr   rW   r]   )Ú	lastindexÚendswithrX   rC   rP   r©   rQ   rª   )Úmr¼   ÚnameÚbraceÚdollarr©   ÚpercentÚrbraces      €€€€€r:   Úreplzexpandvars.<locals>.repl¿  sÜ   ø€ Ø—K‘Kˆ	ØÐØ�Q‘4ˆKØ�‰|ˆØ˜Š>Ø�wŠØ�Ø—=‘= Ô)Ø˜‘t�Ø˜˜�9‰Dà�vŠ~Ø�Ø�‰˜uÔ%Ø—}‘} VÔ,Ø˜Q™4�KØ˜A˜b�z�ð	ØˆÜ—{‘{¤2§:¡:¬b¯k©k¸$Ó.?Ñ#@ÓAÐAà˜t‘}Ð$øÜò 	Ø�Q‘4ŠKð	ús   Á6:B6 Â1B6 Â6CÃC)rC   rD   r6   r7   Ú_varsubbÚreÚcompileÚ_varpatternrL   ÚASCIIÚsubÚgetattrÚ_varsubr©   )	r9   rÆ   rÊ   rÄ   rÀ   rÁ   r©   rÂ   rÃ   s	       @@@@@r:   r   r      sì   ü€ ô �9‰9�T‹?€Dä�$œÔØ�tÑ ¨DÑ 0ØˆKÝÛØ—z‘z¤+×"4Ñ"4Ó"6¸¿¹ÓA×EÑEˆHÜˆØˆØˆØˆØˆÜœ"˜j¨$Ó/‰à�d‰?˜s¨$™ØˆKÝÛØ—j‘j¤¨b¯h©hÓ7×;Ñ;ˆGÜˆØˆØˆØˆØˆÜ—*‘*ˆ÷ð ñ6 ˆt�T‹?Ðr<   )Ú_path_normpathc                 óÔ   — t        j                  | «      } t        | t        «      r5t        j                  t        t        j                  | «      «      «      xs dS t        | «      xs dS )ú0Normalize path, eliminating double slashes, etc.rˆ   r   )rC   rD   r6   r7   rP   rÍ   rQ   r8   s    r:   r    r    	  sK   € ä�y‰y˜‹ˆÜ�dœEÔ"Ü—;‘;œ~¬b¯k©k¸$Ó.?Ó@ÓAÒIÀTÐIÜ˜dÓ#Ò* sÐ*r<   c                 ó  — t        j                  | «      } t        | t        «      r	d}d}d}d}nd}d}d}d}| j	                  ||«      } t        | «      \  }}} ||z   }| j                  |«      }d	}	|	t        |«      k  r_||	   r||	   |k(  r||	= n?||	   |k(  r2|	d	kD  r||	d
z
     |k7  r||	d
z
  |	d
z   …= |	d
z  }	n|	d	k(  r|r||	= n|	d
z  }	n|	d
z  }	|	t        |«      k  rŒ_|s|s|j                  |«       ||j                  |«      z   S )rÏ   rT   rU   rˆ   ó   ..r   r   r   r   r   rW   )
rC   rD   r6   r7   rH   r   r   r�   Úappendr   )
r9   r$   r'   r"   r#   ro   rp   ÚprefixÚcompsr…   s
             r:   r    r    ä  s3  € ä�y‰y˜‹ˆÜ�dœEÔ"ØˆCØˆFØˆFØ‰FàˆCØˆFØˆFØˆFØ�|‰|˜F CÓ(ˆÜ% d›OÑˆˆt�TØ˜‘ˆØ—
‘
˜3“ˆØˆØ”#�e“*ŠnØ˜’8˜u Q™x¨6Ò1Ø˜!‘HØ�q‘˜VÒ#Ø�q’5˜U 1 Q¡3™Z¨6Ò1Ø˜a ™c ! A¡#˜g˜Ø˜‘F‘AØ˜!’V¡Ø˜a™à˜‘F‘Aà�Q‘�ð ”#�e“*‹nñ ™eØ�L‰L˜Ô Ø˜Ÿ™ ›Ñ'Ð'r<   c                 óâ   — t        j                  | «      } t        | «      sEt        | t        «      rt        j
                  «       }nt        j                  «       }t        || «      } t        | «      S )z¤Return the absolute version of a path as a fallback function in case
    `nt._getfullpathname` is not available or raises OSError. See bpo-31047 for
    more.

    )	rC   rD   r   r6   r7   ÚgetcwdbÚgetcwdr   r    )r9   Úcwds     r:   Ú_abspath_fallbackrÙ     sM   € ô �9‰9�T‹?€DÜ�Œ;Ü�dœEÔ"Ü—*‘*“,‰Cä—)‘)“+ˆCÜ�C˜‹ˆÜ�D‹>Ðr<   )Ú_getfullpathnamec                 ól   — 	 t        t        | «      «      S # t        t        f$ r t	        | «      cY S w xY w)z&Return the absolute version of a path.)rÚ   r    r“   r”   rÙ   r8   s    r:   r!   r!   )  s5   € ð	+Ü#¤H¨T£NÓ3Ð3øÜœÐ$ò 	+Ü$ TÓ*Ò*ð	+ús   ‚ –3²3)Ú_getfinalpathnameÚreadlinkc                 óp  — d}t        «       }t        | «      |vro|j                  t        | «      «       	 | }t        | «      } t	        | «      s.t        |«      s|} 	 | S t        t        t        |«      | «      «      } t        | «      |vrŒo| S # |$ r}|j                  |v rY d }~| S ‚ d }~wt        $ r Y | S w xY w)N)rW   rv   rV   é   é   é    é2   éC   éW   i&  i(  i)  )Úsetr
   ÚaddÚ_nt_readlinkr   r   r    r   r   Úwinerrorr”   )r9   Úignored_errorÚallowed_winerrorÚseenÚold_pathÚexs         r:   Ú_readlink_deeprî   7  sÏ   € ð LÐä‹uˆÜ�t‹n DÑ(Ø�H‰H”X˜d“^Ô$ðØ�Ü# DÓ)�ô ˜T”{ô " (Ô+Ø'˜Øð ˆô $¤D¬°Ó):¸DÓ$AÓB�Dô �t‹n DÒ(ð, ˆøð !ò Ø—;‘;Ð"2Ñ2Ûð
 ˆð	 ûÜò àØˆðús)   µ%B ÁB ÂB5ÂB%Â$B%Â%B5Â4B5c                 óZ  — d}| d d }| r	 t        | «      } |rt        | |«      S | S |S # |$ ry}|j                  |vr‚ 	 t        | |¬«      }|| k7  r|rt        ||«      n|cY d }~S n# |$ r Y nw xY wt	        | «      \  } }| r|s
| |z   cY d }~S |rt        ||«      n|}Y d }~nd }~ww xY w| rŒ¢Œ‡)N)rW   rv   rV   rß   rà   rá   râ   é5   éA   rã   rä   é{   é¡   i€  i�  r   ©ré   )rÜ   r   rè   rî   r   )r9   ré   rê   rq   rí   Únew_pathr¿   s          r:   Ú_getfinalpathname_nonstrictrö   a  sä   € ð$ XÐð �B�QˆxˆÙð:Ü(¨Ó.�Ù+/”t˜D $Ó'Ð9°TÐ9ð, ˆøð+ !ò :Ø—;‘;Ð&6Ñ6Øð
ô  .¨dØ<Iô K�Hà 4Ò'Ù7;œt H¨dÔ3ÀÕIð (øà$ò áðúô # 4›[‘
��dñ ¡Ø $™;Õ&Ù+/”t˜D $Ô'°T•ûð):úò	 øsM   ‹( ¤( ¨B&­B!½!A%ÁB&Á$B!Á%A-Á*B!Á,A-Á-B!ÂB&ÂB!Â!B&F)Ústrictc                óÀ  — t        | «      } t        | t        «      rId}d}d}t        j                  «       }t        | «      t        t        j                  t        «      «      k(  r7yd}d}d}t        j                  «       }t        | «      t        t        «      k(  ry| j                  |«      }|t        u r	t        }d	}n|rd
}nt        }|st        | «      st        || «      } 	 t        | «      } d}|sU| j                  |«      rD| j                  |«      r|| t)        |«      d  z   }
n| t)        |«      d  }
	 t        |
«      | k(  r|
} | S | S # t         $ r,}	|rt        t#        |	«      «      d ‚t        | «      } Y d }	~	Œ‰d }	~	w|$ r#}	|	j$                  }t'        | |¬«      } Y d }	~	Œ¯d }	~	ww xY w# t         $ r}	Y d }	~	| S d }	~	wt        $ r}	|	j$                  k(  r|
} Y d }	~	| S d }	~	ww xY w)Ns   \\?\rs   s   \\s   \\.\NULz\\?\rt   z\\z\\.\NULT© r   rô   )r    r6   r7   rC   rÖ   r
   rP   r)   r×   rX   r2   ÚFileNotFoundErrorr“   r   r   rÜ   r”   Ústrrè   rö   r�   )r9   r÷   rÓ   rz   Únew_unc_prefixrØ   Ú
had_prefixré   Úinitial_winerrorrí   Úspaths              r:   r*   r*   “  sÐ  € Ü˜‹~ˆÜ�dœEÔ"ØˆFØ(ˆJØ$ˆNÜ—*‘*“,ˆCä˜‹~¤¬"¯+©+´gÓ*>Ó!?Ò?Ø$àˆFØ'ˆJØ#ˆNÜ—)‘)“+ˆCä˜‹~¤¬'Ó!2Ò2Ø#Ø—_‘_ VÓ,ˆ
à”]Ñ"Ü-ˆMØ‰FÙØ‰Mä#ˆMá¤%¨¤+Ü˜˜T“?ˆDð	LÜ$ TÓ*ˆDØ Ðñ  ˜dŸo™o¨fÔ5ð �‰˜zÔ*Ø&¨¬c°*«oÐ.>Ð)?Ñ?‘àœS ›[˜\Ð*�ð!Ü$ UÓ+¨tÒ3Ø �Dð ˆˆtˆøôG ò 	"ñ
 Üœc "›gÓ&¨DÐ0Ü˜D“>�DûØò 	LØ!Ÿ{™{ÐÜ.¨tØ=JôL�Dûð	Lûô$ ò ó ð ˆûô ò !ð —;‘;Ð"2Ò2Ø �DûØˆûð!úsB   Ã"E Ä4F& Å	F#Å"E8Å8F#Æ FÆF#Æ&	GÆ5GÇGÇGc                ó   — t        | «      S ©N)r!   )r9   r÷   s     r:   r*   r*   4  s   € Ü�t‹}Ðr<   Tc                 óL  — t        j                  | «      } t        | t        «      rd}d}d}nd}d}d}|€|}| st	        d«      ‚t        j                  |«      }	 t        t        |«      «      }t        t        | «      «      }t        |«      \  }}}	t        |«      \  }
}}t        |«      t        |
«      k7  rt	        d	|
›d
|›�«      ‚|	j                  |«      D �cg c]  }|sŒ|‘Œ	 }}|j                  |«      D �cg c]  }|sŒ|‘Œ	 }}d}t        ||«      D ]#  \  }}t        |«      t        |«      k7  r n|dz  }Œ% |gt        |«      |z
  z  ||d z   }|s|S t        |Ž S c c}w c c}w # t        t        t        t        t         f$ r t#        j$                  d| |«       ‚ w xY w)z#Return a relative version of a pathrT   rˆ   rÑ   r   r   r   Nzno path specifiedzpath is on mount z, start on mount r   rW   r,   )rC   rD   r6   r7   r”   r!   r    r   r
   r   Úzipr�   r   r_   r`   ra   ÚDeprecationWarningrb   rc   )r9   r}   r$   r"   r#   Ú	start_absÚpath_absÚstart_driveÚ_Ú
start_restÚ
path_driveÚ	path_restr    Ú
start_listÚ	path_listr…   Úe1Úe2Úrel_lists                      r:   r,   r,   Ý  s³  € ä�9‰9�T‹?€DÜ�$œÔØˆØˆØ‰àˆØˆØˆà€}ØˆáÜÐ,Ó-Ð-ä�I‰I�eÓ€EðÜœH U›OÓ,ˆ	Üœ8 D›>Ó*ˆÜ%.¨yÓ%9Ñ"ˆ�Q˜
Ü#,¨XÓ#6Ñ ˆ
�A�yÜ�KÓ ¤H¨ZÓ$8Ò8ÝÚ™Kð)ó *ð *ð ",×!1Ñ!1°#Ó!6Ö<˜Aº!’aÐ<ˆ
Ð<Ø )§¡°Ó 4Ö:˜1º’QÐ:ˆ	Ð:àˆÜ˜* iÓ0ò 	‰FˆB�Ü˜‹|œx¨›|Ò+ÙØ�‰F‰Að	ð
 �8œs :›¨qÑ0Ñ1°I¸a¸b°MÑAˆÙØˆMÜ�XˆÐùò =ùÚ:øô ”z¤>´<ÔASÐTò Ü×$Ñ$ Y°°eÔ<Øðús>   ÁBE, ÃE"Ã#E"Ã'E, Ã<E'ÄE'ÄAE, ÅE, Å"
E, Å,7F#c           
      ó`  — | st        d«      ‚t        t        t        j                  | «      «      } t        | d   t        «      rd}d}d}nd}d}d}	 | D �cg c]+  }t        |j                  ||«      j                  «       «      ‘Œ- }}|D ���cg c]  \  }}}|j                  |«      ‘Œ }}}}t        |D ���ch c]  \  }}}|’Œ
 c}}}«      d	k7  rt        d
«      ‚t        |D ���ch c]  \  }}}|’Œ
 c}}}«      d	k7  rt        d«      ‚t        | d   j                  ||«      «      \  }	}
}|j                  |«      }|D �cg c]  }|sŒ||k7  sŒ|‘Œ }}|D ��cg c]  }|D �cg c]  }|sŒ||k7  sŒ|‘Œ c}‘Œ }}}t        |«      }t        |«      }t        |«      D ]  \  }}|||   k7  sŒ|d| } n |dt        |«       }|	|
z   |j                  |«      z   S c c}w c c}}}w c c}}}w c c}}}w c c}w c c}w c c}}w # t         t"        f$ r t%        j&                  dg| ¢­Ž  ‚ w xY w)zDGiven a sequence of path names, returns the longest common sub-path.z%commonpath() arg is an empty sequencer   rT   rU   rˆ   r   r   r   rW   z%Can't mix absolute and relative pathszPaths don't have the same driveNr0   )r”   Útupler^   rC   rD   r6   r7   r   rH   rR   r   r�   ÚminÚmaxÚ	enumerater   r_   r`   rb   rc   )rd   r$   r'   r"   rj   Údrivesplitsrƒ   r„   Úsplit_pathsro   rp   r9   ÚcommonÚcrM   Ús1Ús2r…   s                     r:   r0   r0     s+  € ñ ÜÐ@ÓAÐAä”#”b—i‘i Ó'Ó(€EÜ�%˜‘(œEÔ"ØˆØˆØ‰àˆØˆØˆðØJOÖPÀQ”y §¡¨6°3Ó!7×!=Ñ!=Ó!?Õ@ÐPˆÐPØ3>×?Ð?©¨¨1¨a�q—w‘w˜s•|Ð?ˆÒ?ä ×-Ð-‘g�a˜˜A’Ô-Ó.°!Ò3ÜÐDÓEÐEô
  ×-Ð-‘g�a˜˜A’Ô-Ó.°!Ò3ÜÐ>Ó?Ð?ä% e¨A¡h×&6Ñ&6°v¸sÓ&CÓDÑˆˆt�TØ—‘˜C“ˆØ#Ö9˜¢q¨Q°&«[’!Ð9ˆÐ9àDO×P¸q 1Ö:˜aª¨a°6«kšÔ:ÐPˆÑPÜ�ÓˆÜ�ÓˆÜ˜b“Mò 	&‰DˆAˆqØ�B�q‘E‹zØ  ˜�Ùð	&ð
 ˜HœS ›WÐ%ˆFà�t‰|˜cŸh™h vÓ.Ñ.Ð.ùò5 QùÜ?ùä-ùô .ùò
 :ùâ:ùÓPøô ”~Ð&ò Ü×$Ñ$ \Ð:°EÓ:Øðús‘   ÁH Á0GÂH ÂG!Â*H Â9G(Ã"H Ã(G/Ã5AH ÅG6ÅG6ÅG6ÅH Å	H Å%G;Å-G;Å3G;Å7H Å<2H Æ/,H ÇH Ç;H È H È'H-)Ú_path_isdir)Ú_path_isfile)Ú_path_islink)Ú_path_exists)Ú_path_isdevdrivec                 óJ   — 	 t        t        | «      «      S # t        $ r Y yw xY w©z@Determines whether the specified path is on a Windows Dev Drive.F)r   r!   r“   r8   s    r:   Ú
isdevdriver#  [  s(   € ð	Ü#¤G¨D£MÓ2Ð2øÜò 	Ùð	ús   ‚ –	"¡"c                  ó   — yr"  rù   r8   s    r:   r#  r#  V  s   € ð r<   r  )FÚ__doc__r"   r#   r(   r$   r%   r'   r&   r)   rC   rE   r–   rb   Ú__all__r;   Ú_winapir=   rI   r>   rJ   r?   rK   r
   ÚImportErrorr   r   r   r   r   r   r‰   r   r   ÚhasattrÚstat_resultr1   r   Úntrœ   r   r   rÈ   rÌ   rÅ   r   rÍ   r    rÙ   rÚ   r!   rÜ   rÝ   rç   r“   rî   rö   r*   r+   r,   r0   r  r   r  r   r  r   r  r   r   r#  rù   r<   r:   ú<module>r,     s  ðñð 
€Ø	€Ø	€Ø
€Ø
€Ø	€Ø
€Ø
€ã 	Û 
Û Û Ü ò€òð!,÷-ñ -ò
8òHò(+òbò.1òr+ò*8ð ×(Ñ(×0Ñ0€Ô ò
òñ ˆ2�>‰>Ð+Ô,óJòòð$Ý%òò:-ðz @€Ø
€Ø€ò:ð@.+Ý!òP+òð"+Ý#ò+ðgß>ð ,3ó (ðT 9@ó 0ðd "'ô DðP "Ð ó+òp.ðb
	õ (Ý)Ý)Ý)ðÝ#óøðk ò 	,ô,ð	,ûðt ò ØÒðûðF ò #(ô"(ð#(ûðD ò  Ø‚Gð ûð ò à!&ö ðûðx ò 	áð	ûð ò ôðús}   °D  ÂD Â$D Â1D) Â;D6 ÃE Ã6E Ä DÄ
DÄDÄDÄD&Ä%D&Ä)D3Ä2D3Ä6EÅEÅEÅEÅEÅE