
    xj                    N   U d dl mZ d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dl	Z	d dl
mZ d dlmZmZmZmZmZmZmZ d dlmZ d dlmZmZmZmZ ddlmZmZmZ dd	lmZ dd
l m!Z!m"Z" ddl#m$Z$ ddl%m&Z&m'Z' erd dl(m)Z) ed         Z* e+ddh          Z,de-d<   dZ.de-d<   dZ/de-d<   dZ0de-d<   dZ1de-d<   dZ2de-d<   dZ3de-d <   d!Z4de-d"<   d#Z5de-d$<   dZ6de-d%<   d&Z7d'e-d(<   d)Z8de-d*<   d+Z9d'e-d,<   d-Z:d'e-d.<    e;ed/d           Z<de-d0<    e$j=                    Z>d1e-d2<    e+h d3          Z?d4e-d5<    e@ed6          ZAd7e-d8<   ejB        ejC        v ZDd7e-d9<   ejE        ejC        v ZFd7e-d:<   ej        ejC        v ZGd7e-d;<   eAoejH        ejC        v ZId7e-d<<   dd?ZJ eJ            ZKd7e-d@<   ddBZL eL            ZMd4e-dC<    G dD dEe          ZN edFG           G dH dI                      ZO G dJ dKeP          ZQddSZRddTZSddWZTddZZUdd\ZVdd`ZWddaZXddfZYddhZZddlZ[ddmZ\ddnZ]ddqZ^ddwZ_dd}Z`ddZaddZbddZcddZdddZeddZfddZgddZhddZiddZjddZkdddddZlddZmddZnddZoddZpddZqddZrddZsddZtddZuddZvddZwddZxddZyddZzddZ{ddZ|ddZ}g dZ~dS )    )annotationsN)	dataclass)EACCESEEXISTENOENTENOSYSEPERMESTALEEXDEV)Path)TYPE_CHECKINGFinalLiteralcast   )BaseFileLock
_canonical_raise_cleanup_errors)SoftFileLockProtocolError)	host_nameprocess_start_token)STRICT_SOFT_SENTINEL_RECORD)ensure_directory_exists	write_all)Iterator)intentheldr   r   zFinal[frozenset[str]]_CLAIM_STATESz	.filelockz
Final[str]_COORDINATION_SUFFIXclaims_CLAIM_DIRECTORY_NAMEzfilelock-strict-v1_CLAIM_MAGICi   z
Final[int]_CLAIM_RECORD_LIMIT   _CLAIM_NAME_PART_COUNT    _TOKEN_HEX_LENGTHz.private-v1-_PRIVATE_RECORD_MARKER.tmp_PRIVATE_RECORD_SUFFIX!_PRIVATE_RECORD_RANDOM_HEX_LENGTHg       @zFinal[float]_PRIVATE_RECORD_GRACE
   _UNLINK_MAX_RETRIESg      ?_CLAIM_READ_GRACEgMb`?_CLAIM_READ_RETRYO_BINARY	_O_BINARYzFinal[bytes]_LEGACY_SENTINEL>   r      2   zFinal[frozenset[int]]_WINDOWS_HARD_LINK_UNSUPPORTEDlinkzFinal[bool]	_HAS_LINK_OPEN_SUPPORTS_DIR_FD_UNLINK_SUPPORTS_DIR_FD_STAT_SUPPORTS_DIR_FD_LINK_SUPPORTS_DIR_FDreturnboolc                 @   t           sdS 	 t          j                    5 } t          | d          }|                                 t          j        |t          | d          d           d d d            n# 1 swxY w Y   n# t          t          t          f$ r Y dS w xY wdS )NFzprobe-sourcez
probe-link)follow_symlinksT)
r8   tempfileTemporaryDirectoryr   touchosr7   OSErrorNotImplementedError
ValueError)	directorysources     V/home/agent/.hermes/hermes-agent/venv/lib/python3.11/site-packages/filelock/_strict.py_probe_link_follow_symlinksrK   =   s      u(** 	Ri)^44FLLNNNGFDL995QQQQ	R 	R 	R 	R 	R 	R 	R 	R 	R 	R 	R 	R 	R 	R 	R (*5   uu4s5   B  A
A4(B  4A88B  ;A8<B   BB_LINK_HONORS_FOLLOW_SYMLINKSfrozenset[int]c            	         t          t          dt          t          dd                     } t          | t          t          hnt          t          | h          S )NENOTSUP
EOPNOTSUPP)getattrerrno	frozensetr   r   )not_supporteds    rJ   #_probe_hard_link_unsupported_errnosrU   R   sD     E9ge\4.P.PQQM(=fe__FES`Cabbb    _HARD_LINK_UNSUPPORTED_ERRNOSc                       e Zd ZU dZdZded<   dZded<   dZded<   dZd	ed
<   dZ	ded<   dZ
ded<   d'dZd(dZed)d            Zd*dZd+ fdZd, fd!Zd'd"Zd-d%Zed.d&            Z xZS )/StrictSoftFileLockz:Portable fail-closed lock based on immutable owner claims.Tr>   _preserve_lock_file_supportedF_on_acquired_supported_lifetime_supportedz<a strict claim is never broken by age, only by force_break()str_lifetime_unsupported_reason_serialize_transitionsg?float_poll_backoff_capr=   Nonec                `   | j         j        x} t          | j                  x}| j         _        t	          |          }t	          | t
                     }|t          z  }t          t          j	        |                     t          | j        |           t          | j        |           t          | j        ||                                           x}d S 	 t          t          j        |                    }nQ# t          $ rD}	 t          j        |           n(# t          $ r}t#          d||           Y d }~nd }~ww xY w d }~ww xY w|                     ||           	 |                     |||           d S # t          $ r( | j         j        |k    r|                     ||            w xY w)Nz)strict sentinel inspection cleanup failed)_context
claim_rootr   	lock_filer   r   r!   r   rD   fspath_ensure_protocol_directory_open_or_create_sentinel
_open_mode_file_identityfstatBaseExceptioncloser   _mark_descriptor_pending_attempt_doorwaypending_lock_file_fd_discard_doorway)	selfre   	lock_pathcoordination_directoryclaim_directorysentinel_fdsentinel_identityinspection_errorclose_errors	            rJ   _acquirezStrictSoftFileLock._acquiren   s    -22J;4>t~4N4NNJ1$$	!%&J4H&J&J!K!K03HH	) 4 4555"4>3IJJJ"4>?CCC3DNItO`O`aaaKjF	 .rx/D/D E E 	 	 	r%%%%  r r r%&QScepqqqqqqqqr	 	%%k3DEEE	!!/;@QRRRRR 	 	 	}1[@@%%k3DEEE	sH   !C: :
EDE
D?$D:5E:D??EE"E; ;2F-rv   r   rw   intrx   tuple[int, int]c                ^   t          | j        |          r|                     ||           d S t          j        t
          dz            }t          d|          }t          ||z            }	 t          |t          |          | 
                                          }n# t          $ r |                     ||           Y d S t          t          f$ r\}t          | j        |           t          |t                    r,|j        t"          k    r|                     ||           Y d }~d S  d }~ww xY w|||f| j        _        t          | j        |          }	|	r6t)          d |	D                       st+          d |	D                       |k    r|                     ||           d S t          d|          }
t          ||
z            }	 t-          |||
          }n/# t          t          f$ r}t          | j        |            d }~ww xY w||f| j        _        |d| j        _        |t          | j        |          }	||
h                    d |	D                       r!t+          d |	D                       d	| d
k    r|                     ||           d S |                     ||           d S )N   r   c              3  ,   K   | ]}|j         d k    V  dS )r   N)state.0claims     rJ   	<genexpr>z6StrictSoftFileLock._attempt_doorway.<locals>.<genexpr>   s)      ==U5;&(======rV   c              3  $   K   | ]}|j         V  d S Nnamer   s     rJ   r   z6StrictSoftFileLock._attempt_doorway.<locals>.<genexpr>   s$      22%5:222222rV   r    c              3  $   K   | ]}|j         V  d S r   r   r   s     rJ   r   z6StrictSoftFileLock._attempt_doorway.<locals>.<genexpr>   s$      1Q1Q%*1Q1Q1Q1Q1Q1QrV   c              3  >   K   | ]}t          |j                  V  d S r   )_claim_token_keyr   r   s     rJ   r   z6StrictSoftFileLock._attempt_doorway.<locals>.<genexpr>   s-      DDE#EJ//DDDDDDrV   zv1-.claim)_read_existing_claimsrf   rr   secrets	token_hexr'   _claim_namer]   _publish_record_claim_recordrj   _PrivateRecordReclaimedErrorrF   rE    _raise_if_hard_links_unsupported
isinstancerR   r   rd   owner_claim_pathsanymin_link_no_replaceissubset_mark_descriptor_owned)rs   rv   rw   rx   tokenintent_nameintent_pathpublication_cleanup_errorerrorr    	held_name	held_pathlink_cleanup_errors                rJ   rp   z#StrictSoftFileLock._attempt_doorway   s    AA 	!!+/@AAAF!"3q"899!(E22/K788
	(7]SXEYEY[_[j[j[l[l(m(m%%+ 	 	 	!!+/@AAAFF#W- 	 	 	,T^UCCC%)) ekV.C.C%%k3DEEE	 %0+++6.'&t~GG	==f=====	 22622222kAA!!+/@AAAF..	)344		!1/;PY!Z!Z#W- 	 	 	,T^UCCC	 ,5k*B').0DM+$$&t~GGi(111Q1Q&1Q1Q1QQQ	DDVDDDDDH[eH[H[H[[[!!+/@AAAF 	##K1BCCCCCs=   -0B  D-D-AD('D((D-	G H,HHtuple[StrictSoftFileClaim, ...]c                6    t          | j        | j                  S )z(Published claims that block acquisition.)r   rf   _claim_directoryrs   s    rJ   r    zStrictSoftFileLock.claims   s     %T^T5JKKKrV   
claim_namec                    t          |           t          | j        |           t          | j        |          x}	 |dS )zYRemove one named claim, allowing overlap if its owner still holds the protected resource.N)_validate_force_break_name_require_exact_namer   _unlink_in_directory)rs   r   cleanup_errors      rJ   force_breakzStrictSoftFileLock.force_break   sR    ":...D1:>>>1$2GTTTM   rV   acquisition_errorrm   c                \    | j         rd S t                                          |           d S r   )	is_lockedsuper_rollback_failed_acquire)rs   r   	__class__s     rJ   r   z+StrictSoftFileLock._rollback_failed_acquire   s3    
 > 	F(():;;;;;rV   	canonicalc                p    | j         sd | j        _        t                                          |           d S r   )r   rd   re   r   _reconcile_failed_acquire)rs   r   r   s     rJ   r   z,StrictSoftFileLock._reconcile_failed_acquire   s5    ~ 	,'+DM$)))44444rV   c                   t          d| j        j                  }d | j        _        t	          | j        j                  \  }}t          |          | j        _        |rt          d|           |                                  	 | 	                    |d           n,# t          $ r}|                    |           Y d }~nd }~ww xY w|rt          d|           d S d S )Nr|   zstrict claim release failedFdefault_suppresseszstrict release cleanup failed)r   rd   lock_file_fdre   _unlink_owner_pathsr   tuple_raise_recorded_errors_mark_descriptor_released_close_released_fdrm   append)rs   fd	remainingerrorsrz   s        rJ   _releasezStrictSoftFileLock._release   s   %344#' /0OPP	6*/	*:*:' 	J"#@&III&&(((	'##B5#AAAA 	' 	' 	'MM+&&&&&&&&	' 	L"#BFKKKKK	L 	Ls   B 
C%B??Cr   identityc                   t          | j        j                  \  }}t          |          | j        _        |r&|                     ||           t          d|           |                                  	 |                     |d           n,# t          $ r}|	                    |           Y d }~nd }~ww xY w|rt          d|           d S d S )Nz#strict doorway claim cleanup failedFr   zstrict doorway cleanup failed)
r   rd   r   r   r   r   r   r   rm   r   )rs   r   r   r   r   rz   s         rJ   rr   z#StrictSoftFileLock._discard_doorway   s    /0OPP	6*/	*:*:' 	R''H555"#H&QQQ&&(((	'##B5#AAAA 	' 	' 	'MM+&&&&&&&&	' 	L"#BFKKKKK	L 	Ls   3B 
B4B//B4c                    | j         j        r$t          | j         j        d                   j        S t          t	          | j                   t                     t          z  S )Nr   )rd   r   r   parentr   rf   r   r!   r   s    rJ   r   z#StrictSoftFileLock._claim_directory   sU    =* 	C7:;;BBz$.11I3GIIJJMbbbrV   )r=   rb   )rv   r   rw   r|   rx   r}   r=   rb   )r=   r   )r   r]   r=   rb   )r   rm   r=   rb   )r   r]   r=   rb   )r   r|   r   r}   r=   rb   )r=   r   )__name__
__module____qualname____doc__rZ   __annotations__r[   r\   r^   r_   ra   r{   rp   propertyr    r   r   r   r   rr   r   __classcell__)r   s   @rJ   rY   rY   _   s        DD*.!....#((((( !&%%%%(f ffff#'''''  $####   :9D 9D 9D 9Dv L L L XL       < < < < < <5 5 5 5 5 5L L L LL L L L c c c Xc c c c crV   rY   T)frozenc                  T    e Zd ZU dZded<   ded<   ded<   ded<   ded	<   d
Zded<   d
S )StrictSoftFileClaimz"One parsed strict soft-lock claim.r]   r   StrictSoftFileClaimStater   r   r|   pidhostnameN
int | Nonestart)r   r   r   r   r   r   r   rV   rJ   r   r     s[         ,,III####JJJHHHMMM ErV   r   c                      e Zd ZdS )r   N)r   r   r   r   rV   rJ   r   r     s        DrV   r   rf   r]   pathr   moder|   r   c                   	 t          |          S # t          $ r Y nt          $ r Y d S w xY wt          |t	          j                               	 t          t          j        |          t          |          }||n`# t          $ r Y d S t          t          f$ r@}t          | |           t          |t                    r|j        t          k    r Y d }~nd }~ww xY w	 t          |          S # t          $ r Y d S w xY wr   )_open_sentinelFileNotFoundErrorrE   !_reclaim_sentinel_private_recordstimer   rD   rg   r3   r   rF   r   r   rR   r   )rf   r   r   r   r   s        rJ   ri   ri     sQ   d###      tt &dDIKK888
,$3BIdOOEUW[$\$\! %0++ 1 (   tt)   (E:::%)) 	U[F-B-B .C-B-B-B-Bd###   tts@    
*	**(A< <
C	C6CCC, ,
C:9C:c                    t          | t          t                              \  }}|t          k    r|S t          j        |           d S r   )_open_recordlenr3   rD   rn   )r   r   records      rJ   r   r   3  sA    dC(8$9$9::JB!!!	HRLLL4rV   rH   r   c           	        	 t          j        |          5 }t          ||          }d d d            n# 1 swxY w Y   nB# t          $ r5}d|j        pt          |          j         }t          | d |          |d }~ww xY wg }|D ]\}t          |          x}t          | |d          t          | ||          x}	%|
                    t          | |||	                     ]t          |          S )Nzcannot list claim directory: z&unknown claim name or protocol version)rD   scandir_public_claim_namesrE   strerrortyper   r   _parse_claim_name_read_claim_recordr   _parse_claimr   )
rf   rH   entriesnamesr   reasonr    r   
name_partsr   s
             rJ   _read_claimsr   ;  sP   LZ	"" 	<g'	7;;E	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< L L LY1W4;;CWYY'	4@@eKL )+F M M+D111J:+It=efff(ItDDDFQMM,y$
FKKLLL==s-   ? 3? 7? 7? 
A>	0A99A>r   bytes | Nonec                z   t          j                    t          z   }d}	 |rt          j        t                     t          | ||          \  }}||S t          j                    |k    rQ|j        t          k    rd S d|j        p"t          |          pt          |          j         }t          | ||          |d})NFTcannot read claim: )r   	monotonicr/   sleepr0   _attempt_claim_readrR   r
   r   r]   r   r   r   )rf   rH   r   deadlinedelayingr   pendingr   s           rJ   r   r   L  s     ~"33HH 	*J()))-iDII?M>x''}&& tg7+;+es7||+etT[}}OeggF+ItVDD'QrV   #tuple[bytes | None, OSError | None]c                P   	 t          ||z  t                    d fS # t          $ r Y dS t          $ r}d |fcY d }~S d }~wt          $ r]}|j        t          k    r	d |fcY d }~S d|j        p"t          |          pt          |          j
         }t          | ||          |d }~ww xY w)N)NNr   )_read_recordr#   r   PermissionErrorrE   rR   r
   r   r]   r   r   r   )rf   rH   r   r   r   s        rJ   r   r   f  s    
LI,.ABBDHH   zz   U{ L L L;&  ;]u~'[U'[tE{{G[]]'	4@@eK	Ls4    
B%	B%;B%B%B B%!?B  B%r   Iterator[os.DirEntry[str]]	list[str]c                ^   g }t          j                     }|D ]}|j                            d          s|                    |j                   7t	          |j                  x}:t          |          	 *t          t          j        |           d f|j        |           t          |          S )N.)
r   r   
startswithr   _private_public_namer   _reclaim_private_recordrD   rg   sorted)rH   r   r   nowentrypublic_names         rJ   r   r   w  s    E
)++C S Sz$$S)) 	SLL$$$$1%*===kJO`P
 P
P $RYy%9%94$@%*cRRR%==rV   c                N    |                                 sdS t          | |          S )Nr   )existsr   )rf   rH   s     rJ   r   r     s+     r	9---rV   r   $tuple[StrictSoftFileClaimState, str]r   bytesc                $   	 |                     d                              d          \  }}}}}}	t          |          }
|rt          |          nd }t                              |                               d          }n+# t
          t          f$ r}t          | |d          |d }~ww xY wt          |	 |t          k    ||d         k    d|
cxk    odk    nc t          |
          |k    |d u p|dk    ot          |          |k    |                                                                |k    o-|                                ot          d |D                        f          st          | |d          t          ||d         ||
||	          S )
Nascii
zutf-8zmalformed claim recordr   ir   c              3  >   K   | ]}|                                 V  d S r   )isspacer   	characters     rJ   r   z_parse_claim.<locals>.<genexpr>  s.      BBII%%''BBBBBBrV   )r   r   r   r   r   r   )decodesplitr|   r  fromhexUnicodeDecodeErrorrG   r   allr"   r]   encodehexisprintabler   r   )rf   r   r   r   magicr   pid_texthostname_hex
start_texttrailingr   r   r   r   s                 rJ   r   r     s   ^EK]]SZE[E[EaEabfEgEgBuhj((mm#-7J4==..55g>>
+ ^ ^ ^'	49QRRX]]^A	SICHB%1*AUz)A</ 	C  ""	CBBBBBBBB
 
 
 S (	49QRRRD
1UPS^fnstttts   A>B B)B$$B)+tuple[StrictSoftFileClaimState, str] | Nonec                   |                      d          sd S |                     d                              d          }t          |          t          k    s|d         t
          vs|d         dk    rd S |d         }t          |          t          k    st          d |D                       rd S t          d|d                   |fS )	Nr   -r   r   v1r   c              3     K   | ]}|d vV  	dS 0123456789abcdefNr   r  s     rJ   r   z$_parse_claim_name.<locals>.<genexpr>  s)      -i-iV_i?Q.Q-i-i-i-i-i-irV   r   )	endswithremovesuffixr  r   r%   r   r'   r   r   )r   partsr   s      rJ   r   r     s    =="" th''--c22E
5zz+++uQx}/L/LPUVWPX\`P`P`t!HE
5zz&&&#-i-ich-i-i-i*i*i&t*E!H55u<<rV   r   r   r   c                    |  d| dS )Nz-v1-r   r   )r   r   s     rJ   r   r     s    &&&&&&rV   c                R    |                      d                               d          S )Nzheld-zintent-)removeprefixr   s    rJ   r   r     s$    W%%229===rV   c           
     @   t                                                                                      }t          t	          j                              }|dnt          |          }t           d|  dt	          j                     d| d| d
                    d          S )N r  r  )r   r  r  r   rD   getpidr]   r"   )r   r!  r   r"  s       rJ   r   r     s    ;;%%''++--L	,,E}#e**JTTeTTry{{TTlTTjTTT[[\cdddrV   public_pathBaseException | Nonec                   t           j                            |           \  }}|pt           j        }t	          |          }t
          rt          |          nd }||f}	 t          |||f||           nS# t          $ rF}	 |t          j	        |           n(# t          $ r}	t          d||	           Y d }	~	nd }	~	ww xY w d }~ww xY w|/	 t          j	        |           n# t          $ r}	|	cY d }	~	S d }	~	ww xY wd S )Nz+strict publication directory cleanup failed)rD   r   r  curdir_private_record_namer9   _open_directory_publish_record_in_directoryrm   rn   r   )
r4  r   r   rH   r  private_namedirectory_fddirectory_refpublication_errorrz   s
             rJ   r   r     sX   
  W]];77I{&RYI'44L1FP?9---DL|+M$]\;4OQUW]^^^^   	q'&&& 	q 	q 	q!"OQbdopppppppp	q 	H\"""" 	 	 		4sZ   A2 2
C=BB=
B9B4/B=4B99B==CC 
C3'C.(C3.C3r=  tuple[str, int | None]r   tuple[str, str]rb   c                B   t           j        t           j        z  t           j        z  t          z  }t          t           dd           x}||z  }t          | |d         ||          }d }	 t          t          j        |                    }t          ||           t          | ||           nD# t          $ r7}t          | |d         ||          \  }	}
|	|
t          d||	|
            d }~ww xY wt          | |d         ||          \  }	}
|	|
t          |	|
           d S d S )N
O_NOFOLLOWr   z(strict record publication cleanup failed)rD   O_RDWRO_CREATO_EXCLr2   rQ   _open_relativerk   rl   r   _link_private_recordrm    _close_and_unlink_private_recordr   !_raise_record_finalization_errors)r=  r   r   r   flags
o_nofollow
private_fdprivate_identityr>  rz   unlink_errors              rJ   r:  r:    sd    I
"RY.:Eb,555
BuQxEEJ/3)"(:*>*>??*f%%%]E3CDDDD   $D!H	%
 %
!\ "l&>!:!	   	 !Aa	! !K ,":)+|DDDDD #;":s   'AB* *
C+42C&&C+r;  rL  rM  tuple[int, int] | None1tuple[BaseException | None, BaseException | None]c                   d }	 t          j        |           n# t          $ r}|}Y d }~nd }~ww xY wd }	 |t          | |           nt	          | ||           n$# t
          $ r Y nt          $ r}|}Y d }~nd }~ww xY w||fS r   )rD   rn   rm   _unlink_relative_unlink_relative_if_identityr   )r=  r;  rL  rM  rz   r   rN  s          rJ   rH  rH    s     )-K
   )-L#]L9999(FVWWW      $$s-    
/*/$A 
A;&	A;/A66A;r}   c                    	 t          | g|R   n;# t          $ r.}t          | |d                    d}t          |          |d }~ww xY wt          | |d                   |k    rd S d}t          |          )Nr   z(private publication record was reclaimedr   z'private publication record was replaced)_link_relativer   _relative_identityr   )r=  r   rM  r   msgmsg_0s         rJ   rG  rG    s    
;}-u----- ; ; ;mU1X66B8*3//U:	;
 -q226FFF5E
&u
-
--s    
A)AArz   rN  c                    d | |fD             }t          |          dk    rt          d|d         g|dd          R   |d         )Nc                    g | ]}||S r   r   )r   r   s     rJ   
<listcomp>z5_raise_record_finalization_errors.<locals>.<listcomp>2  s    RRR@Qe@Q@Q@QrV   r   z!strict record finalization failedr   r   r   )rz   rN  r   s      rJ   rI  rI  .  s]     SR+|!<RRRF
6{{QA6!9ZvVWVXVXzZZZZ
)OrV   r  c                T    d|  t            t          j        t          dz             dS )Nr  r   r)   )r(   r   r   r+   )r  s    rJ   r8  r8  8  s0    s{s2sG4EFgklFl4m4mssssrV   
str | Nonec                V   |                      d          r|                     t                    sd S | dt          t                                                  t
                    \  }}}|t
          k    s1t          |          t          k    st          d |D                       rd S |S )Nr  r   c              3     K   | ]}|d vV  	dS r)  r   r  s     rJ   r   z'_private_public_name.<locals>.<genexpr>C  s(      OOyy 22OOOOOOrV   )r  r+  r*   r   
rpartitionr(   r+   r   )r;  r  marker
random_hexs       rJ   r  r  <  s    ""3'' |/D/DE[/\/\ t&21<R8S8S7S3S&T&_&_`v&w&w#K(((z?????OOJOOOOO @ trV   r	  r`   c                   t          j        | j                  d f}t          j        | j                  5 }|D ]5}t	          |j                  | j        k    rt          ||j        |           6	 d d d            d S # 1 swxY w Y   d S r   )rD   rg   r   r   r  r   r  )r   r	  r=  r   r
  s        rJ   r   r   I  s    Idk**D0M	DK	 	  HG 	H 	HE#EJ//49<<'uz3GGG	HH H H H H H H H H H H H H H H H H Hs   9A<<B B c                   | \  }}	 |t           rt          j        ||d          n!t          ||                                          }n# t
          $ r Y d S w xY wt          j        |j                  s"t          ||           d}t          |          |j	        dk    r||j
        z
  t          k     rd S 	 t          | |           d S # t
          $ r Y d S t          $ r!}|j        t          t          hvr Y d }~d S d }~ww xY w)NFdir_fdr@   z  is not a regular private recordr   )r;   rD   statr   lstatr   S_ISREGst_moderE   st_nlinkst_mtimer,   _unlink_private_record_oncerR   r   r	   )r=  r;  r	  rH   r<  private_statrW  r   s           rJ   r  r  Q  sV   +I| ',A' GLuMMMMi..4466 	
    <,-- i..PPPcll!!cL,A&ADY&Y&Y#M<@@@@@      ;vuo-- .-----s0   AA
 

AA7C	 	
D 	D C;;D c                    | \  }}|t           rt          j        ||           d S t          ||                                           d S Nrg  )r:   rD   unlinkr   )r=  r;  rH   r<  s       rJ   rn  rn  i  sU    +I| %< 
	,|444444Y%%,,.....rV   c                    | \  }}	 |t           rt          j        ||d          }n"t          ||                                          }n# t
          $ r Y d S w xY wt          |          S )NFrf  )r;   rD   rh  r   ri  r   rk   )r=  r   rH   r<  	path_stats        rJ   rV  rV  s  s    +I|#(=#\5QQQIIY--3355I   tt)$$$s   AA 
AAr   c                    t          | |          |k    rDt          j        t                    5  t	          | |           d d d            d S # 1 swxY w Y   d S d S r   )rV  
contextlibsuppressr   rR  )r=  r   r   s      rJ   rS  rS    s    
 -..(:: !233 	2 	2]D111	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 ;:s   AAArJ  c                    | \  }}|t          j        ||||          n#t          j        t          ||          ||          S rq  )rD   openr   )r=  r   rJ  r   rH   r<  s         rJ   rF  rF    sO    +I| # 	eT,7777WT)T**E488rV   source_namedestination_namec                    | \  }}|t           rt          ||||           d S t          t          ||          t          ||                     d S )N
src_dir_fd
dst_dir_fd)r<   _link_no_followr   )r=  r{  r|  rH   r<  s        rJ   rU  rU    sa    +I|$9%5,[ghhhhDK00$yBR2S2STTTTTrV   r~  rI   
str | Pathdestinationr  r  c                   t           sd}t          |          t          rt          j        | |||d           d S t          j        | |||           d S )Nz'os.link is unavailable on this platformF)r  r  r@   r~  )r8   rF   rL   rD   r7   )rI   r  r  r  rW  s        rJ   r  r    sm      ' 8!#&&& $ S

zchiiiiii

zRRRRRRrV   c                    | \  }}|t           rt          j        ||           d S t          j        dk    rt          t          |          |           d S t          ||                                           d S )Nrr  win32)r:   rD   rs  sysplatformr   r   )r=  r   rH   r<  s       rJ   rR  rR    s~    +I|$;
	$|,,,,,,		 	 T)__d33333Y$$&&&&&rV   c                   t           rt          t          |                     }	 t          ||||           nQ# t          $ rD}	 t          j        |           n(# t          $ r}t          d||           Y d }~nd }~ww xY w d }~ww xY w	 t          j        |           n# t          $ r}|cY d }~S d }~ww xY wd S t          | |z  | |z             d S )Nr~  z$strict link directory cleanup failed)r<   r9  r]   r  rm   rD   rn   r   )rH   r{  r|  r<  
link_errorrz   s         rJ   r   r     s0    &s9~~66	K)9l_klllll 	 	 	g&&&&  g g g%&LjZeffffffffg		H\"""" 	 	 		tI+Y9I-IJJJ4sW   9 
BAB
A>#A94B9A>>BBB   
B6*B1+B61B6c                    t           j                            |           \  }}t          t	          |pt           j                  |          S r   )rD   r   r  r   r   r7  )r   rH   r   s      rJ   _unlink_owner_pathr    s8    gmmD))OItY%;") < <dCCCrV   pathstuple[str, ...]%tuple[list[str], list[BaseException]]c                J    d | D             }d |D             d |D             fS )Nc                0    g | ]}|t          |          fS r   )_unlink_owner_path_result)r   r   s     rJ   r[  z'_unlink_owner_paths.<locals>.<listcomp>  s&    III4/556IIIrV   c                "    g | ]\  }\  }}|
|S r   r   )r   r   removed_s       rJ   r[  z'_unlink_owner_paths.<locals>.<listcomp>  s&    BBB'T<GQ'BDBBBrV   c                "    g | ]\  }\  }}|
|S r   r   )r   r  r   s      rJ   r[  z'_unlink_owner_paths.<locals>.<listcomp>  s/     E E E!Zae.?.?.?.?rV   r   )r  resultss     rJ   r   r     sQ    II5IIIGBB7BBB E E#*E E E  rV   !tuple[bool, BaseException | None]c                z    	 t          |           }n'# t          $ r Y dS t          $ r}d|fcY d }~S d }~ww xY wd|fS )N)TNFT)r  r   rm   )r   r   r   s      rJ   r  r    sr    *400   zz   e|s    
6	6166messager   list[BaseException]c                p    t          |          dk    rt          | |d         g|dd          R   |d         )Nr   r   r\  )r  r   s     rJ   r   r     s>    
6{{Qgvay>6!"":>>>>
)OrV   c                   t           rt          t          |                     }	 t          j        ||           nQ# t
          $ rD}	 t          j        |           n(# t
          $ r}t          d||           Y d }~nd }~ww xY w d }~ww xY w	 t          j        |           n# t
          $ r}|cY d }~S d }~ww xY wd S t          j	        dk    r&t          | |z                                             d S d}t          t                    D ]W}t          | |z            x} d S |j        t          t           hvs|t          dz
  k    r|t#          j        |           |dz  }Xd S )Nrr  z&strict unlink directory cleanup failedr  gMbP?r   r   )r:   r9  r]   rD   rs  rm   rn   r   r  r  r   ranger.   _unlink_errorrR   r   r	   r   r   )rH   r   r<  rN  rz   retry_delayattemptr   s           rJ   r   r     s    &s9~~66	Id<00000 	 	 	k&&&&  k k k%&NP\^ijjjjjjjjk		H\"""" 	 	 		t
|wY%%'''tK,--  "9t#3444E=44;vuo--<ORS<S1S1SK
;q4sW   < 
B
AB
B&A<7B<BBB
B# #
B9-B4.B94B9OSError | Nonec                d    	 |                                   n# t          $ r}|cY d }~S d }~ww xY wd S r   )rs  rE   )r   r   s     rJ   r  r    sI       4s    
-(--c           	         t          j        | t           j        t          t           dd          z  t          t           dd          z            S )NO_DIRECTORYr   rB  )rD   rz  O_RDONLYrQ   )rH   s    rJ   r9  r9    sA    7
gb-333gb,PQ6R6RR  rV   limitc                T    t          | |          \  }}t          j        |           |S r   )r   rD   rn   )r   r  r   r   s       rJ   r   r     s'    dE**JBHRLLLMrV   tuple[int, bytes]c                   |                                  }t          j        |j                  s|  d}t	          |          t
          j        t          z  t          t
          dd          z  t          t
          dd          z  }t          j	        | |          }	 t          || ||          }nQ# t          $ rD}	 t          j        |           n(# t          $ r}t          d||           Y d }~nd }~ww xY w d }~ww xY w||fS )N is not a regular filerB  r   
O_NONBLOCKz!strict record read cleanup failed)ri  rh  rj  rk  rE   rD   r  r2   rQ   rz  _read_opened_recordrm   rn   r   )	r   r  ru  rW  rJ  r   r   
read_errorrz   s	            rJ   r   r     s"   

I<	)** ---cllK)#gb,&B&BBWRQ]_`EaEaaE	u		B$Ry%@@   	`HRLLLL 	` 	` 	`!"EzS^________	` v:s<   B- -
C;8CC6
C2C-(C6-C22C66C;r   ru  os.stat_resultc                t   t          j        |           }t          j        |j                  s| d}t          |          t          |          t          |          k    r| d}t          |          t          j        | |dz             }t          |          |k    r| d| d}t          |          |S )Nr  z changed while openingr   z	 exceeds z bytes)	rD   rl   rh  rj  rk  rE   rk   readr   )r   r   ru  r  opened_statrW  r   s          rJ   r  r  .  s    (2,,K<+,, ---cllk""nY&?&???---cllWR##F
6{{U-----cllMrV   c                P   	 |                                  d S # t          $ r 	 |                                j        }n'# t          $ r}t          | d d|           |d }~ww xY wt          j        |          rt          j        |          sY d S t          | d | d          d w xY w)Nzcannot inspect z is not a real directory)	mkdirFileExistsErrorri  rk  rE   r   rh  S_ISDIRS_ISLNK)rf   rH   r   r   s       rJ   rh   rh   =  s    	k k k k	g??$$,DD 	g 	g 	g+It=Zy=Z=Z[[aff	g< 	dl4&8&8 	FF'	4I9_9_9_``fjjks/    
B%=B%
A!AA!!+B%B%c                       p.                      d          p t          j        t          j        hv }|st	           fddD                       rd}t          |          d S )Nr  c              3      K   | ]}|v V  	d S r   r   )r   	separatorr   s     rJ   r   z-_validate_force_break_name.<locals>.<genexpr>L  s(      WWi	T 1WWWWWWrV   )/\ z,claim_name must be one public claim basename)r  rD   r7  pardirr   rG   )r   invalid_componentrW  s   `  rJ   r   r   J  sy     ZDOOC$8$8ZDRYPRPYDZ<Z CWWWWCVWWWWW <oo rV   c                    t          j        |           5 }t          fd|D                       s-t          t          t          j        t                              	 d d d            d S # 1 swxY w Y   d S )Nc              3  .   K   | ]}|j         k    V  d S r   r   )r   r
  r   s     rJ   r   z&_require_exact_name.<locals>.<genexpr>S  s*      ;;%5:%;;;;;;rV   )rD   r   r   r   r   r   )rH   r   r   s    ` rJ   r   r   Q  s    	I		 G';;;;7;;;;; 	G#FBK,?,?FFF	GG G G G G G G G G G G G G G G G G Gs   A	A--A14A1r   NotImplementedError | OSErrorc                    t          |t                    p%|j        t          v pt	          |dd           t
          v }|rd}t          | d |          |d S )NwinerrorzCfilesystem does not support atomic no-replace hard-link publication)r   rF   rR   rW   rQ   r6   r   )rf   r   unsupportedr   s       rJ   r   r   W  sq    5-.. 	P;77	PE:t,,0NN 
  LV'	4@@eKL LrV   stc                    | j         | j        fS r   )st_devst_ino)r  s    rJ   rk   rk   b  s    9birV   )r   r   rY   )r=   r>   )r=   rM   )rf   r]   r   r   r   r|   r=   r   )r   r   r=   r   )rf   r]   rH   r   r=   r   )rf   r]   rH   r   r   r]   r=   r   )rf   r]   rH   r   r   r]   r=   r   )rH   r   r   r  r=   r  )
rf   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  )r4  r]   r   r  r   r|   r=   r5  )
r=  r?  r   r@  r   r|   r   r  r=   rb   )
r=  r?  r;  r]   rL  r|   rM  rO  r=   rP  )r=  r?  r   r@  rM  r}   r=   rb   )rz   r5  rN  r5  r=   rb   )r  r]   r=   r]   )r;  r]   r=   r^  )r   r   r	  r`   r=   rb   )r=  r?  r;  r]   r	  r`   r=   rb   )r=  r?  r;  r]   r=   rb   )r=  r?  r   r]   r=   rO  )r=  r?  r   r]   r   r}   r=   rb   )
r=  r?  r   r]   rJ  r|   r   r|   r=   r|   )r=  r?  r{  r]   r|  r]   r=   rb   )
rI   r  r  r  r  r   r  r   r=   rb   )r=  r?  r   r]   r=   rb   )rH   r   r{  r]   r|  r]   r=   r5  )r   r]   r=   r5  )r  r  r=   r  )r   r]   r=   r  )r  r]   r   r  r=   rb   )rH   r   r   r]   r=   r5  )r   r   r=   r  )rH   r]   r=   r|   )r   r   r  r|   r=   r  )r   r   r  r|   r=   r  )
r   r|   r   r   ru  r  r  r|   r=   r  )rf   r]   rH   r   r=   rb   )r   r]   r=   rb   )rH   r   r   r]   r=   rb   )rf   r]   r   r  r=   rb   )r  r  r=   r}   )
__future__r   rw  rR   rD   r   rh  r  rA   r   dataclassesr   r   r   r   r   r	   r
   r   pathlibr   typingr   r   r   r   _apir   r   r   _errorr   	_identityr   r   _soft_protocolr   _utilr   r   collections.abcr   r   rS   r   r   r   r!   r"   r#   r%   r'   r(   r*   r+   r,   r.   r/   r0   rQ   r2   r  r3   r6   hasattrr8   rz  supports_dir_fdr9   rs  r:   r;   r7   r<   rK   rL   rU   rW   rY   r   	Exceptionr   ri   r   r   r   r   r   r   r   r   r   r   r   r   r:  rH  rG  rI  r8  r  r   r  rn  rV  rS  rF  rU  r  rR  r   r  r   r  r   r   r  r9  r   r   r  rh   r   r   r   rk   __all__r   rV   rJ   <module>r     sR   " " " " " " "      				   



   ! ! ! ! ! ! F F F F F F F F F F F F F F F F F F       6 6 6 6 6 6 6 6 6 6 6 6 A A A A A A A A A A - - - - - - 5 5 5 5 5 5 5 5 7 7 7 7 7 7 5 5 5 5 5 5 5 5 )(((((("#34 '0y(F1C'D'D D D D D#.  . . . .$,  , , , ,/ / / / /"&  & & & &%&  & & & & "  " " " "%3  3 3 3 3%+  + + + +02 ! 2 2 2 2&)  ) ) ) )"$  $ $ $ $"%  % % % %"'  ' ' ' '  J22	 2 2 2 2!C!<!C!E!E  E E E E8A	+++8N8N  N N N N
 !V,,	 , , , , &(W0B%B  B B B B')yB4F'F  F F F F%'W0B%B  B B B B%.%P27b>P3P  P P P P   $ -H,G,I,I  I I I Ic c c c 8[7Z7\7\  \ \ \ \ec ec ec ec ec ec ec ecP $
 
 
 
 
 
 
 
	 	 	 	 	9 	 	 	   4      "   4L L L L"
 
 
 
. . . .u u u u8	= 	= 	= 	=' ' ' '> > > >e e e e   6%E %E %E %EP% % % %0. . . .$   t t t t
 
 
 
H H H H   0/ / / /	% 	% 	% 	%2 2 2 2   U U U U "!S S S S S S*' ' ' '   (D D D D
            <            $   
k 
k 
k 
k   G G G GL L L L         rV   