+
    WBi                       ^ RI Ht ^ RIt^ RIt^ RIHt ^ RIHt ]'       d   ^ RIH	t	 ^ RI
Ht R R ltR	 R
 ltR R ltR R ltR R ltR R ltR R ltR R ltR R ltR R ltR R ltR R ltR!R R  lltR# )"    )annotationsN)urlsafe_b64encode)TYPE_CHECKING)Iterable)ZipInfoc               $    V ^8  d   QhRRRRRR/# )   srcstrdstreturnNone )formats   "=/usr/lib/python3.14/site-packages/hatchling/builders/utils.py__annotate__r      s!      c       c                     \         P                  ! W4       R #   \         d1    \        P                  ! Y4       \         P
                  ! T 4        R # i ; iN)osreplaceOSErrorshutilcopy2remove)r
   r   s   &&r   replace_filer      s9    


3 S
		#s    7AAc                    V ^8  d   QhRRRR/# )r	   pathr   r   z*Iterable[tuple[str, list[str], list[str]]]r   )r   s   "r   r   r      s     
  
 C 
 F 
 r   c              #    "   \        4       p\        P                  ! V R R7       FV  w  r#p\        P                  ! V4      pVP                  VP
                  3pWa9   d   VR K?  VP                  V4       W#V3x  KX  	  R# 5i)T)followlinks:NNNN)setr   walkstatst_devst_inoadd)r   seenrootdirsfilesr#   
identifiers   &      r   	safe_walkr,      sl     5DWWTt<Ewwt}[[$++-
Q% =s   A?Bc                   V ^8  d   QhRR/# )r	   r   mapr   )r   s   "r   r   r   #   s     $ $ $r   c                 4    \        \        \        R4      4      # )r	   )r	      )r.   r   sortedr   r   r   get_known_python_major_versionsr2   #   s    sF6N##r   c               $    V ^8  d   QhRRRRRR/# )r	   r   r   startr   r   )r   s   "r   r   r   '   s!      C   r   c                V    \         P                  P                  W4      pVR 8X  d   R# V# ). )r   r   relpath)r   r4   relative_paths   && r   get_relative_pathr:   '   s'    GGOOD0M r   c                    V ^8  d   QhRRRR/# r	   r   r   r   r   )r   s   "r   r   r   1   s     0 0# 0# 0r   c                z    \         P                  P                  V 4      P                  \         P                  4      # r   )r   r   normpathstripsepr   s   &r   normalize_relative_pathrB   1   s&    77D!''//r   c                    V ^8  d   QhRRRR/# r<   r   )r   s   "r   r   r   5   s     2 2s 2s 2r   c                B    \        V 4      \        P                  ,           # r   )rB   r   r@   rA   s   &r   normalize_relative_directoryrE   5   s    "4(26611r   c               $    V ^8  d   QhRRRRRR/# )r	   inclusion_mapzdict[str, str]r(   r   r   r   )r   s   "r   r   r   9   s!      >   r   c                   / pV P                  4        F  w  r4\        P                  P                  \        P                  P	                  V4      4      p\        P                  P                  V4      '       g=   \        P                  P                  \        P                  P                  W4      4      p\        V4      W%&   K  	  \        \        VP                  4       R  R7      4      # )c                p    V ^,          P                  \        P                  4      V ^,          V ^ ,          3# )   )countr   r@   )items   &r   <lambda>)normalize_inclusion_map.<locals>.<lambda>F   s$    d1gmmBFF3T!Wd1gFr   )key)itemsr   r   
expanduserr>   isabsabspathjoinrB   dictr1   )rG   r(   normalized_inclusion_map
raw_sourcer9   sources   &&    r   normalize_inclusion_maprY   9   s    !%2%8%8%:!
##BGG$4$4Z$@Aww}}V$$WW__RWW\\$%?@F+B=+Q ( &; $**,F	
 r   c                    V ^8  d   QhRRRR/# r<   r   )r   s   "r   r   r   K   s        r   c                p    \         P                  R 8w  d!   V P                  \         P                  R 4      # V # )/)r   r@   r   rA   s   &r   normalize_archive_pathr]   K   s'    	vv}||BFFC((Kr   c                    V ^8  d   QhRRRR/# )r	   digestbytesr   r   r   )r   s   "r   r   r   R   s     A AU As Ar   c                T    \        V 4      P                  R 4      P                  R4      # )ascii=)r   decoderstrip)r_   s   &r   format_file_hashrf   R   s#    V$++G4;;C@@r   c                   V ^8  d   QhRR/# )r	   r   intr   )r   s   "r   r   r   W   s     B BC Br   c                 T    \        \        P                  P                  RR4      4      # )z
Returns an `int` derived from the `SOURCE_DATE_EPOCH` environment variable; see
https://reproducible-builds.org/specs/source-date-epoch/.

The default value will always be: `1580601600`
SOURCE_DATE_EPOCH
1580601600)rh   r   environgetr   r   r   get_reproducible_timestamprn   W   s     rzz~~1<@AAr   c                    V ^8  d   QhRRRR/# )r	   st_moderh   r   r   )r   s   "r   r   r   a   s        r   c                V    V R,          R,          pV ^@,          '       d
   V^I,          pV# )a  
https://github.com/takluyver/flit/blob/6a2a8c6462e49f584941c667b70a6f48a7b3f9ab/flit_core/flit_core/common.py#L257

Normalize the permission bits in the st_mode field from stat to 644/755.

Popular VCSs only track whether a file is executable or not. The exact
permissions can vary on systems with different umasks. Normalizing
to 644 (non executable) or 755 (executable) makes builds more reproducible.
  ir   )rp   new_modes   & r   normalize_file_permissionsrt   a   s*     %6)HEOr   c                    V ^8  d   QhRRRR/# )r	   r   r   r   r   r   )r   s   "r   r   r   r   s        r   c                    \         P                  ! V 4      p\        VP                  4      p\         P                  ! W4       R# )z-
Normalize the permission bits for artifacts
N)r   r#   rt   rp   chmod)r   	file_statrs   s   &  r   normalize_artifact_permissionsry   r   s-     I))*;*;<HHHTr   c               $    V ^8  d   QhRRRRRR/# )r	   zip_infor   moderh   r   r   r   )r   s   "r   r   r   {   s!     3 3 3s 3t 3r   c                0    VR,          ^,          V n         R# )z
https://github.com/python/cpython/blob/v3.12.3/Lib/zipfile/__init__.py#L574
https://github.com/takluyver/flit/commit/3889583719888aef9f28baaa010e698cb7884904
i  N)external_attr)r{   r|   s   &&r   set_zip_info_moder   {   s    
 #Vm2Hr   )rr   )
__future__r   r   r   base64r   typingr   collections.abcr   zipfiler   r   r,   r2   r:   rB   rE   rY   r]   rf   rn   rt   ry   r   r   r   r   <module>r      se    " 	  $  (
 $02$A
B"3 3r   