+
    …WÝj©B  ã                  ón  € R t ^ RIHt ^ RIt^ RIt^ RIt^ RIt^ RIt^ RIt^ RI	t	^ RI
t
^ RIHt ^ RIHt ^ RIHt ^ RIHtHtHt R)t]! RR04      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" lt$R# R$ lt%R% R& lt& ! R' R(4      t'R# )*zGMachine-wide byte store: download, verify, extract, publish atomically.)ÚannotationsN)Úcontextmanager)ÚPath)ÚIO)Úis_junctionÚ	long_rootÚ
retry_heldúlinux-x64-muslúlinux-arm64-muslc               ó   € V ^8„  d   QhRR/# ©é   ÚreturnÚstr© )Úformats   "Ú<C:\Users\johnn\AppData\Local\hermes\hermes-agent\pm\store.pyÚ__annotate__r   #   s   € ÷ -&ñ -&˜ñ -&ó    c                 ó¦  €  ^ RI Hp  V ! 4       #   \         d   pTP                  R8w  d   h  Rp?MRp?ii ; i\        P
                  R8X  dÐ   \
        P                  ! 4       P                  4       R9   d¨    ^ RIpTP                  4       pTP                  TP                  T4      4      pTP                  R4      P                  RTP                  T4      TP                  T4      R^ 4      ^ 8X  d   TP                  ^8X  d   R# M  \         \"        3 d     Mi ; i\        P
                  R8X  Ed~    ^ RIp^ R	IHp TP'                  R
RR7      pTP(                  TP*                  n        TP(                  TP/                  TP0                  4      TP/                  TP0                  4      .TP2                  n        TP6                  TP2                  n        TP1                  4       TP1                  4       r‡TP3                  TP+                  4       TP                  T4      TP                  T4      4      '       d'   TP                  R8X  d   R# TP                  R8X  d   R# M  \         \"        3 d     Mi ; i\8        P:                  P=                  RR4      P                  4       p	T	R9   d   T	# \
        P                  ! 4       P                  4       # )zBNative host arch; PM also runs alone before the app is importable.)Únative_archÚhermes_platformNÚdarwinÚx86_64s   sysctl.proc_translatedÚarm64Úwin32)ÚwintypesÚkernel32T)Úuse_last_erroridª  id†  ÚPROCESSOR_ARCHITEW6432Ú )r   Úamd64)r   r!   )Úhermes_platform.host.factsr   ÚModuleNotFoundErrorÚnameÚsysÚplatformÚmachineÚlowerÚctypesÚc_intÚc_size_tÚsizeofÚCDLLÚsysctlbynameÚbyrefÚvalueÚAttributeErrorÚOSErrorr   ÚWinDLLÚHANDLEÚGetCurrentProcessÚrestypeÚPOINTERÚc_ushortÚIsWow64Process2ÚargtypesÚBOOLÚosÚenvironÚget)
r   Úexcr)   r0   Úsizer   ÚkernelÚprocessÚnativeÚwows
             r   Ú_native_machinerE   #   s<  € ðÝ:ñ
 ‹}Ðøô	 ô Ø�8‰8Ð(Ô(Øô )ûðúô ‡|�|�xÔ¤H×$4Ò$4Ó$6×$<Ñ$<Ó$>ÐBUÔ$Uð		Ûà—L‘L“NˆEØ—?‘? 6§=¡=°Ó#7Ó8ˆDØ�{‰{˜4Ó ×-Ñ-Ð.GÈÏÉÐV[ÓI\Ø.4¯l©l¸4Ó.@À$ÈóKØNOôPØTY×T_ÑT_ÐcdÔTdÙùÜ¤Ð(ô 	Ùð	úä
‡|�|�wÕð	ÛÝ'à—]‘] :¸d�]ÓCˆFØ/7¯©ˆF×$Ñ$Ô,Ø/7¯©ÀÇÁÈvÏÉÓ@_Ø06·±¸v¿¹Ó0Oð/QˆF×"Ñ"Ô+à-5¯]©]ˆF×"Ñ"Ô*Ø$Ÿo™oÓ/°·±Ó1B�VØ×%Ñ% f×&>Ñ&>Ó&@À&Ç,Á,ÈwÓBWÐY_×YeÑYeÐflÓYm×nÒnØ—<‘< 6Ô)Ù"Ø—<‘< 6Ô)Ù#ùÜ¤Ð(ô 	Ùð	úä�j‰j�n‰nÐ5°rÓ:×@Ñ@ÓBˆØÐ$Ô$ØˆJÜ×ÒÓ×#Ñ#Ó%Ð%s<   ‚ �6š1±6Á7BD ÄDÄDÄ4DI" ÉI" É"I6É5I6c               ó   € V ^8„  d   QhRR/# ©r   r   Úboolr   )r   s   "r   r   r   S   s   € ÷ ?ñ ?˜ñ ?r   c                 ól   € \         P                  R8X  d   R# ^ RIp \        V P	                  R4      4      # )a  True on Android/bionic userlands (Termux and friends).

The libc flavor is part of the target triple, not a platform runtime
branch: a linux-arm64 glibc artifact cannot exec under bionic and vice
versa, so the resolver must pick the right row of the lock table. This
is the ONE place hermes probes for bionic; nothing downstream of
current_target() needs to know how it was decided.
ÚandroidTNÚANDROID_API_LEVEL)r%   r&   Ú	sysconfigrH   Úget_config_var)rL   s    r   Ú_is_bionic_libcrN   S   s/   € ô ‡|�|�yÔ Ùó ä�	×(Ñ(Ð)<Ó=Ó>Ð>r   c               ó    € V ^8„  d   QhRRRR/# )r   Úbinaryr   r   úbool | Noner   )r   s   "r   r   r   f   s   € ÷ ñ  ð ¨ñ r   c                ó*  €  V P                  4       P                  R4      ;_uu_ 4       pVP                  R4      pRRR4       XP	                  R4      '       g   R# RT9   d   R# RT9   d   R# R#   + '       g   i     L=; i  \         d     R# i ; i)	zARead an ELF's interpreter string without executing foreign bytes.Úrbi    Ns   ELFs   ld-musl-Ts   ld-linuxF)ÚresolveÚopenÚreadr2   Ú
startswith)rP   ÚhandleÚheads   &  r   Ú_elf_loader_is_muslrZ   f   s{   € ðØ�^‰^Ó×"Ñ" 4×(Ô(¨FØ—;‘;˜tÓ$ˆD÷ )ð �?‰?˜:×&Ò&ÙØ�dÔÙØ�dÔÙÙ÷ )×(ûäô Úðús-   ‚'B ©A0»B Á0B 	Á;B Â B ÂBÂBc               ó   € V ^8„  d   QhRR/# )r   r   rQ   r   )r   s   "r   r   r   v   s   € ÷ ñ  ñ r   c                 óf   € \        R4      \        R4      3 F  p \        V 4      pVf   K  Vu # 	  R# )zAlibc of the native userland, independent of the Python bootstrap.z/bin/shz/bin/lsN)r   rZ   )Ú	candidateÚverdicts     r   Ú_native_linux_uses_muslr_   v   s3   € ä˜9“o¤t¨I£Ó7ˆ	Ü% iÓ0ˆØÔØŠNñ 8ñ r   c               ó   € V ^8„  d   QhRR/# rG   r   )r   s   "r   r   r      s   € ÷ 4ñ 4�tñ 4r   c                 óú   € \        4       p V e   V # ^ RIpR F?  p\        VP                  V4      ;'       g    R4      P	                  4       pRV9   g   K>   R# 	  \        \        R4      P                  R4      4      # )a{  True on native Linux musl userlands (Alpine, Void-musl, etc.).

libc is part of PM's artifact identity. The native userland takes
precedence over a bootstrap Python built for a different libc.
Python build metadata breaks ties when native binaries cannot be inspected;
a musl loader on disk alone is the last resort because glibc hosts may
install musl as a secondary toolchain.
Nr    ÚmuslTz/libzld-musl-*.so.1)ÚHOST_GNU_TYPEÚ	MULTIARCH)r_   rL   r   rM   r(   Úanyr   Úglob)rC   rL   Úkeyr0   s       r   Ú_is_musl_libcrh      sq   € ô %Ó&€FØÒØˆãã-ˆÜ�I×,Ñ,¨SÓ1×7Ð7°RÓ8×>Ñ>Ó@ˆØ�UŽ?Úñ .ô Œt�F‹|× Ñ Ð!1Ó2Ó3Ð3r   c               ó   € V ^8„  d   QhRR/# r   r   )r   s   "r   r   r   •   s   € ÷ ñ ˜ñ r   c                 ój  € \        4       p V R
9   d   R pM+V R9   d   RpM!\        R\        P                  ! 4        24      h\        P                  P                  R4      '       d   RV 2# \        P                  R8X  d   RV 2# \        4       '       d   RV R2# \        4       '       d   RV R	2# RV 2# )r   Úx64zunsupported architecture: Úwinzwin32-r   zdarwin-zlinux-z-bionicz-musl)r   Úaarch64)r   r!   rk   )rE   ÚRuntimeErrorr&   r'   r%   rW   rN   rh   )r'   Úarchs     r   Úcurrent_targetrp   •   s·   € ÜÓ€GØÐ&Ô&Ø‰Ø	Ð.Ô	.Ø‰äÐ7¼×8HÒ8HÓ8JÐ7KÐLÓMÐMÜ
‡|�|×Ñ˜u×%Ò%Ø˜�vˆÐÜ
‡|�|�xÔØ˜˜ÐÐÜ×ÒØ˜�v˜WÐ%Ð%Ü‡‚Ø˜�v˜UÐ#Ð#Ø�D�6ˆ?Ðr   c               ó    € V ^8„  d   QhRRRR/# )r   Úurlr   r   r   )r   s   "r   r   r   ¨   s   € ÷ "ñ "�#ð "˜#ñ "r   c                óh   a aaaaa€ ^ RI o^ RIo^ RIo^ RIHoHo ^ RIHp VVVVV V3R lpV! V4      # )z@sha256 of a url's content, streamed. `pm lock` uses this to pin.N)Ú_OPENERÚ_UA)Úretry_networkc                 ó.  <a€ SP                  4       p ^ pSP                  S
P                  P                  S	SR7      RR7      ;_uu_ 4       o\	        SP
                  P                  R4      ;'       g    ^ 4      p\        V3R lR4       F&  pV P                  V4       V\        V4      ,          pK(  	  W8  d#   SP                  P                  RW!,
          4      h RRR4       V P                  4       #   + '       g   i     T P                  4       # ; i)é    )ÚheadersiX  )ÚtimeoutzContent-Lengthc                 ó&   <€ S P                  R4      # ©i   i   ©rV   )Úresps   €r   Ú<lambda>Ú+hash_url.<locals>.request.<locals>.<lambda>¸   s   ø€  d§i¡i°Ô&<r   r   N)Úsha256rU   ÚrequestÚRequestÚintry   r>   ÚiterÚupdateÚlenÚclientÚIncompleteReadÚ	hexdigest)Údigestr@   ÚdeclaredÚblockr~   rt   ru   ÚhashlibÚhttprr   Úurllibs       @€€€€€€r   r‚   Úhash_url.<locals>.request±   sì   ù€ Ø—‘Ó!ˆØˆØ�\‰\Ø�N‰N×"Ñ" 3°Ð"Ó4¸cð ÷ 
ô 
àÜ˜4Ÿ<™<×+Ñ+Ð,<Ó=×BÐBÀÓCˆHÜÔ<¸cÖB�Ø—‘˜eÔ$Øœ˜E›
Õ"’ñ Cð ŒØ—k‘k×0Ñ0°°hµoÓFÐFð ÷
ð ×ÑÓ!Ð!÷
ö 
ð ×ÑÓ!Ð!ús   ÁBC5Ã5D	)rŽ   Úhttp.clientÚurllib.requestÚpm.downloaderrt   ru   Ú
pm.networkrv   )rr   rv   r‚   rt   ru   rŽ   r�   r�   s   f  @@@@@r   Úhash_urlr–   ¨   s)   ý€ ãÛÛç*Ý(÷"ò "ñ ˜Ó!Ð!r   c               ó   € V ^8„  d   QhRR/# )r   Údestr   r   )r   s   "r   r   r   Â   s   € ÷ -ñ -˜cñ -r   c           	     ó  € ^ RI pV P                  4       '       EdU   \        P                  P	                  V P
                  4      '       d   VP                  V 4      hV P                  P                  R4      p\        P                  P                  \        P                  P                  W4      4      p\        P                  P                  V4      p\        P                  P                  \        P                  P                  WV P
                  4      4      pWF3 F9  p\        P                  P                  Wq.4      V8w  g   K*  VP                  W4      h	  V P                  RRRRRRR7      # VP                  W4      # )zßThe stdlib 'data' filter, with symlink targets resolved from the link's own
directory. Bootstrap interpreters (Ubuntu 22.04 ships 3.10) resolve them from
the archive root and reject python-build-standalone's terminfo links.NÚ/F)ÚdeepÚuidÚgidÚunameÚgnameÚmode)ÚtarfileÚissymr<   ÚpathÚisabsÚlinknameÚAbsoluteLinkErrorr$   ÚrstripÚrealpathÚjoinÚdirnameÚ
commonpathÚLinkOutsideDestinationErrorÚreplaceÚdata_filter)Úmemberr˜   r¡   r$   ÚplacedÚlink_dirÚtargetr£   s   &&      r   Ú_tar_filterr³   Â   s  € ó à‡|�|‡~ƒ~Ü�7‰7�=‰=˜Ÿ™×)Ò)Ø×+Ñ+¨FÓ3Ð3Ø�{‰{×!Ñ! #Ó&ˆÜ—‘×!Ñ!¤"§'¡'§,¡,¨tÓ":Ó;ˆÜ—7‘7—?‘? 4Ó(ˆÜ—‘×!Ñ!¤"§'¡'§,¡,¨t¸v¿¹Ó"OÓPˆØÓ$ˆDÜ�w‰w×!Ñ! 4 ,Ó/°4Ö7Ø×9Ñ9¸&ÓGÐGñ %ð �~‰~ 5¨d¸ÀDÐPTÐ[_ˆ~Ó`Ð`Ø×Ñ˜vÓ,Ð,r   c               ó$   € V ^8„  d   QhRRRRRR/# )r   ÚarchivezPath | IO[bytes]r˜   r   r   ÚNoner   )r   s   "r   r   r   Õ   s'   € ÷ Xñ XÐ)ð X°ð X¸$ñ Xr   c                ó‚  a€ ^ RI pVP                  RRR7       \        P                  P	                  V4      o\        V \        \        P                  34      '       d   VP                  V 4      MVP                  V R7      pV;_uu_ 4       pVP                  VV3R lR7       RRR4       R#   + '       g   i     R# ; i)z°Extract a tarball (a path, or an open stream such as a .deb's data.tar)
with the one containment policy every PM tar consumer shares. Unsafe
members raise tarfile.FilterError.
NT©ÚparentsÚexist_ok)Úfileobjc                ó   <€ \        V S4      # ©N)r³   )r¯   r£   Ú	real_dests   &&€r   r   Úextract_tar.<locals>.<lambda>à   s   ø€ ¼ÀFÈIÔ8Vr   )Úfilter)
r¡   Úmkdirr<   r£   r¨   Ú
isinstancer   ÚPathLikerU   Ú
extractall)rµ   r˜   r¡   ÚopenedÚtfr¾   s   &&   @r   Úextract_tarrÇ   Õ   s…   ø€ ó
 à‡J�J�t d€JÔ+Ü—‘× Ñ  Ó&€IÜ&0°¼3ÄÇÁÐ:L×&MÒ&MˆW�\‰\˜'Ô"ÐSZ×S_ÑS_ÐhoÐS_ÓSp€Fß	‰�2Ø
�‰�dÔ#VˆÔW÷ 
��Šús   ÂB-Â-B>	c               ó$   € V ^8„  d   QhRRRRRR/# ©r   rµ   r   r˜   r   r¶   r   )r   s   "r   r   r   ã   s&   € ÷ 	Añ 	A�Tð 	A ð 	A¨$ñ 	Ar   c                óL  € \         P                  ! VR R7       VP                  R R R7       V P                  P	                  4       pVP                  R4      '       d   \        W4       R# VP                  R4      '       d   \        W4       R# \        RV P                   24      h)T©Úignore_errorsr¸   z.zipzunsupported archive: N)z.tar.gzz.tgzz.tar.xzz.txzz.tar.bz2)	ÚshutilÚrmtreerÁ   r$   r(   ÚendswithrÇ   Ú_extract_zipÚ
ValueError)rµ   r˜   r$   s   && r   ÚextractrÒ   ã   sx   € Ü
‡M‚M�$ dÕ+Ø‡J�J�t d€JÔ+Ø�<‰<×ÑÓ€DØ‡}�}ÐG×HÒHÜ�GÖ"Ø	�‰�v×	Ò	Ü�WÖ#äÐ0°·±°Ð?Ó@Ð@r   c               ó$   € V ^8„  d   QhRRRRRR/# rÉ   r   )r   s   "r   r   r   ï   s!   € ÷ 6ñ 6˜$ð 6 dð 6¨tñ 6r   c           	     óf  € ^ RI pVP                  V 4      ;_uu_ 4       p. pVP                  4        F¿  pVP                  ^,	          p\        P
                  ! V4      '       d3   VP                  WSP                  V4      P                  R4      34       Kd  \        VP                  WQ4      4      pV^I,          '       g   K�  VP                  4       '       g   K§  VP                  VR,          4       KÁ  	  V F  w  rX\        VP                  W�4       K  	  RRR4       R#   + '       g   i     R# ; i)rx   Núutf-8iÿ  )ÚzipfileÚZipFileÚinfolistÚexternal_attrÚstatÚS_ISLNKÚappendrV   Údecoder   rÒ   Úis_fileÚchmodÚ_zip_symlinkÚfilename)	rµ   r˜   rÖ   ÚzfÚsymlinksÚinfor    Úwrittenr²   s	   &&       r   rÐ   rÐ   ï   sÒ   € Ûà	�‰˜×	!Ô	! RØ "ˆØ—K‘K–MˆDØ×%Ñ%¨Õ+ˆDÜ�|Š|˜D×!Ò!Ø—‘ §w¡w¨t£}×';Ñ';¸GÓ'DÐ EÔFÙÜ˜2Ÿ:™: dÓ1Ó2ˆGØ�e�|Ž| §¡× 1Ô 1Ø—‘˜d U�lÖ+ñ "ó %‰LˆDÜ˜Ÿ™¨Ö5ñ %÷ 
"×	!×	!Ò	!ús   žBDÃ DÃ=DÄD0	c               ó(   € V ^8„  d   QhRRRRRRRR/# )r   r¯   r   r²   r˜   r   r   r¶   r   )r   s   "r   r   r      s(   € ÷ 2ñ 2˜ð 2 cð 2°ð 2¸$ñ 2r   c                óâ  € VP                  4       pW0,          P                  4       pVP                  V4      '       g   R # \        V4      P                  4       '       d   R # VP                  V,          P                  4       pVP                  V4      '       g   R # VP                  P                  RRR7        VP                  V4       R #   \         d    TP                  TRR7        R # i ; i)NTr¸   rÕ   )Úencoding)	rT   Úis_relative_tor   Úis_absoluteÚparentrÁ   Ú
symlink_tor2   Ú
write_text)r¯   r²   r˜   ÚrootÚlinkÚresolveds   &&&   r   rà   rà      s¹   € Ø�<‰<‹>€DØ�M×"Ñ"Ó$€DØ×Ñ˜t×$Ò$ÙÜˆFƒ|×Ñ×!Ò!ÙØ—‘˜fÕ$×-Ñ-Ó/€HØ×"Ñ" 4×(Ò(ÙØ‡K�K×Ñ˜d¨TÐÔ2ð2Ø�‰˜ÖøÜô 2Ø�‰˜¨ˆ×1ð2ús   Â9C ÃC.Ã-C.c               ó    € V ^8„  d   QhRRRR/# )r   r˜   r   r   r¶   r   )r   s   "r   r   r     s   € ÷ ñ ˜Tð  dñ r   c                óÆ  aa€ 0 Rmp\        V P                  4       4      p\        V4      ^8w  g6   V^ ,          P                  4       '       d   V^ ,          P                  V9   d   R# V^ ,          p\        VP                  4       4       F?  oV SP                  ,          oSP                  4       '       d    R# \        VV3R l4       KA  	  \        VP                  4       R# )zÅHoist a lone top-level dir's contents unless it IS the layout
(bin/, cmd/, lib/...). Refuses on name collisions. The tree was extracted
seconds ago, when a Windows scanner still holds it (#131884).Nc                 ó&   <€ S P                  S4      # r½   )Úrename©Úitemr²   s   €€r   r   Ú$flatten_single_dir.<locals>.<lambda>  s   ø€ ˜4Ÿ;™; vÔ.r   >   ÚbinÚcmdÚetcÚlibÚusrÚshareÚlibexec)ÚlistÚiterdirr‡   Úis_dirr$   Úexistsr   Úrmdir)r˜   ÚkeepÚentriesÚinnerrö   r²   s   &   @@r   Úflatten_single_dirr    sœ   ù€ ò C€DÜ�4—<‘<“>Ó"€GÜ
ˆ7ƒ|�qÔ ¨¥
× 1Ñ 1× 3Ò 3°w¸qµz·±È$Ô7NÙØ�A�J€EÜ�U—]‘]“_Ö%ˆØ˜Ÿ	™	Õ!ˆØ�=‰=�?Š?ÚÜÕ.Ö/ñ	 &ô
 ˆu�{‰{Ör   c               ó$   € V ^8„  d   QhRRRRRR/# )r   Úsrcr   Údstr   r¶   r   )r   s   "r   r   r   "  s!   € ÷ 1ñ 1�Dð 1˜tð 1¨ñ 1r   c                óP  aa€ \        V P                  R4      4       F…  oSP                  4       '       d   K  SP                  V 4      pW,          oSP	                  4       '       d   \        RV 24      hSP                  P                  RRR7       \        VV3R l4       K‡  	  R# )uÅ   Move src's tree into dst, keeping both layouts. A file present in
both is unresolvable â€” two archives disagreeing about one file cannot
be settled by extraction order, so it fails loudly instead.Ú*zarchives disagree about Tr¸   c                 ó&   <€ S P                  S4      # r½   )r­   rõ   s   €€r   r   Úmerge_tree.<locals>.<lambda>.  s   ø€ ˜4Ÿ<™<¨Ô/r   N)	ÚsortedÚrglobr  Úrelative_tor  ÚFileExistsErrorrë   rÁ   r   )r	  r
  Úrelrö   r²   s   && @@r   Ú
merge_treer  "  s   ù€ ô �s—y‘y “~Ö&ˆØ�;‰;�=Š=ÙØ×Ñ˜sÓ#ˆØ•ˆØ�=‰=�?Š?Ü!Ð$<¸S¸EÐ"BÓCÐCØ�‰×Ñ D°4ÐÔ8ÜÕ/Ö0ó 'r   c               ó    € V ^8„  d   QhRRRR/# )r   rî   r   r   r   r   )r   s   "r   r   r   1  s   € ÷ &ñ &�dð &˜sñ &r   c                ój  a€ ^ RI p. p\        P                  ! V 4       Fî  w  r4p. p\        V4       Fˆ  p\	        V4      V,          pVP                  4       '       g   \        V4      '       d3   VP                  VP                  V 4      P                  4       V34       Kn  VR8w  g   Kw  VP                  V4       KŠ  	  WdR&   V FE  p	\	        V4      V	,          pVP                  VP                  V 4      P                  4       V34       KG  	  Kð  	  VP                  R R7       VP                  4       p
V FØ  w  r¸V
P                  VP                  R4      4       V
P                  R4       VP                  4       '       g   \        V4      '       d7   V
P                  \        P                  ! V4      P                  R4      4       K“  \        VR4      ;_uu_ 4       o\!        V3R	 lR
4       F  pV
P                  V4       K  	  RRR4       KÚ  	  V
P#                  4       #   + '       g   i     Ký  ; i)uB  Deterministic sha256 over a directory tree: walk every file, sort
by posix relpath, hash `relpath\0<content>` per entry. No mtimes, no
mode bits. Symlinks contribute their LINK TARGET TEXT (os.readlink),
not the target's bytes â€” the link is the data. Directory symlinks and
junctions are not followed.

``__pycache__`` directories are skipped: CPython writes .pyc caches
into them the first time the staged interpreter runs (uv venv/uv sync
in a bundle build; first boot of a shipped app), so they are runtime
state, not package bytes â€” the digest is over what pm published.NÚ__pycache__:NNNc                ó   € V ^ ,          # )rx   r   )rö   s   &r   r   Útree_digest.<locals>.<lambda>K  s   €   Q¦r   )rg   rÕ   ó    rS   c                 ó&   <€ S P                  R4      # r|   r}   )Úfs   €r   r   r  U  s   ø€ ¨!¯&©&°Ô*=r   r   )rŽ   r<   Úwalkr  r   Ú
is_symlinkr   rÜ   r  Úas_posixÚsortr�   r†   ÚencodeÚreadlinkrU   r…   rŠ   )rî   rŽ   ÚfilesÚdirpathÚdirnamesÚ	filenamesÚdescendr$   r£   Úfnamer‹   r  r�   r  s   &            @r   Útree_digestr)  1  s°  ø€ ó à$&€EÜ(*¯ª°®Ñ$ˆ˜9ØˆÜ˜8Ö$ˆDÜ˜“= 4Õ'ˆDØ�‰× Ò ¤K°×$5Ò$5Ø—‘˜d×.Ñ.¨tÓ4×=Ñ=Ó?ÀÐFÖGØ˜Ö&Ø—‘˜tÖ$ñ %ð �‰ÛˆEÜ˜“= 5Õ(ˆDØ�L‰L˜$×*Ñ*¨4Ó0×9Ñ9Ó;¸TÐBÖCó ñ )6ð 
‡J�JÑ'€JÔ(à�^‰^Ó€FÛ‰	ˆØ�‰�c—j‘j Ó)Ô*Ø�‰�eÔØ�?‰?×Ò¤¨D× 1Ò 1Ø�M‰Mœ"Ÿ+š+ dÓ+×2Ñ2°7Ó;Ö<ä�d˜D×!Ô! QÜ!Ô"=¸sÖC�EØ—M‘M %Ö(ñ D÷ "Ñ!ñ ð ×ÑÓÐ÷ "×!Ð!ús   Ç)H!È!H2c                  óš   € ] tR tRtRtR R ltR R ltR R ltRR
R	/R R llltRR	R
R	/R R llt	]
R 4       tR R lt]
R 4       tRtR	# )ÚStoreiZ  z‰One directory of immutable published entries plus a scratch area.
Hash-keyed archives survive failed installs. Publication releases them.c               ó   € V ^8„  d   QhRR/# )r   rî   r   r   )r   s   "r   r   ÚStore.__annotate__^  s   € ÷ $ñ $˜Tñ $r   c                	ó&   € \        V4      V n        R # r½   )r   rî   )Úselfrî   s   &&r   Ú__init__ÚStore.__init__^  s   € Ü˜d“OˆŽ	r   c               ó    € V ^8„  d   QhRRRR/# )r   r$   r   r   r   r   )r   s   "r   r   r-  a  s   € ÷  ñ  ˜#ð   $ñ  r   c                	ó(   € V P                   V,          # r½   ©rî   ©r/  r$   s   &&r   ÚentryÚStore.entrya  s   € Ø�y‰y˜4ÕÐr   c               ó    € V ^8„  d   QhRRRR/# )r   r$   r   r   rH   r   )r   s   "r   r   r-  d  s   € ÷ )ñ )˜cð ) dñ )r   c                	ó@   € V P                  V4      P                  4       # r½   )r6  r  r5  s   &&r   Ú	publishedÚStore.publishedd  s   € Ø�z‰z˜$Ó×&Ñ&Ó(Ð(r   NÚpause_eventc          
     ó,   € V ^8„  d   QhRRRRRRRRRR/# )	r   rr   r   r�   Úscratchr   r<  úthreading.Event | Noner   r   )r   s   "r   r   r-  g  s8   € ÷ Jñ J˜ð J cð J°Dð JÐYoð JÐ{ñ Jr   c               	ó\   a€ Se   V3R lMR pV P                  RVRV/.VWeR7      ^ ,          # )Nc                ó   <€ S! W4      # r½   r   )ÚdoneÚtotalÚrangesÚprogresss   &&&€r   r   ÚStore.fetch.<locals>.<lambda>h  s
   ø€ ©H°TÔ,Ar   rr   r�   )rE  r<  )Ú
fetch_many)r/  rr   r�   r>  rE  r<  Úticks   &&&&f$ r   ÚfetchÚStore.fetchg  sE   ø€ ØFNÒFZÕAÐ`dˆØ�‰ ¨¨X°vÐ >Ð?ÀØ(,ð ó GØGHõJð 	Jr   rE  c               ó(   € V ^8„  d   QhRRRRRRRR/# )	r   Ú	artifactsz
list[dict]r>  r   r<  r?  r   z
list[Path]r   )r   s   "r   r   r-  l  s0   € ÷ (_ñ (_ Jð (_¸ð (_Ø 6ð(_ØBLñ(_r   c               óà  aa€ ^ RI HpHp ^ RIHp . pV EF  p	Ve   VP                  4       '       d	   V! R4      hV	R,          V	R,          rºRV 2pV P                  V4      pVP                  4       '       d   \        VP                  4       4      M. p\        V4      ^8X  d(   V^ ,          P                  4       '       d   V^ ,          pMRVP                  4       '       d   \        P                  ! V4       W,,          V
P                  R^4      R,          ,          pVP!                  V! W¯V4      4       EK"  	  \#        W�4       UU	u/ uF#  w  pp	\%        VP&                  4      V	R,          bK%  	  up	poVV3R lp V! W„R	7      P)                  VR
7       V F{  pVP&                  P+                  V4      '       g   K&  VP&                  P                  4       '       g   KH  V P-                  VP&                  P.                  RVP0                   24       K}  	  T Uu. uF<  pT P                  RTP0                   24      TP&                  P2                  ,          NK>  	  up# u up	pi   T F{  pTP&                  P+                  T4      '       g   K&  TP&                  P                  4       '       g   KH  T P-                  TP&                  P.                  RTP0                   24       K}  	  i ; iu upi )z¾Fetch a pinned plan with one aggregate progress stream.

Completed archives enter the cache even if a later source pauses.
The downloader owns partial bytes outside this disposable scratch.
)ÚDownloadÚDownloadPaused)Úpinned_sourcezdownload pausedrr   r�   zfetch-rš   c           
     ó†   <€ Se6   S! YVP                  4        UUu/ uF  w  r4SV,          VbK  	  upp4       R # R # u uppi r½   )Úitems)rB  rC  rD  rg   ÚrowsrE  Úurlss   &&&  €€r   rH  ÚStore.fetch_many.<locals>.tick‰  s:   ø€ ØÒ#Ù˜ÈÏÉÌÔ&WÉ¹9¸3 t¨C¥y°$¢ÉÒ&WÖXñ $ùÛ&Ws   œ=)r<  )rE  éÿÿÿÿ)r”   rN  rO  Úpm.artifact_mirrorrP  Úis_setr6  r  rÿ   r   r‡   rÞ   r  rÍ   rÎ   ÚrsplitrÜ   Úzipr   r˜   Úrunré   Úpublishrë   r�   r$   )r/  rL  r>  rE  r<  rN  rO  rP  ÚsourcesÚartifactrr   r‹   Ú
entry_namer6  r#  ÚdestinationÚsourcerH  rT  s   &&&d$             @r   rG  ÚStore.fetch_manyl  s?  ù€ ÷ 	;Ý4àˆÜ!ˆHØÒ&¨;×+=Ñ+=×+?Ò+?Ù$Ð%6Ó7Ð7Ø" 5�/¨8°HÕ+=�Ø! & Ð*ˆJØ—J‘J˜zÓ*ˆEØ-2¯\©\¯^ª^”D˜Ÿ™›Ô)ÀˆEÜ�5‹z˜QŒ 5¨¥8×#3Ñ#3×#5Ò#5Ø# A�h‘à—<‘<—>’>Ü—M’M %Ô(Ø%Õ2°S·Z±ZÀÀQÓ5GÈÕ5KÕK�Ø�N‰N™=¨¸6ÓB×Cñ "ô  KNÈgÔJaÔbÑJaÑ6F°f¸h”�F—K‘KÓ  (¨5¥/Ò1ÑJaÒbˆö	Yð	OÙ�WÔ6×:Ñ:ÀDÐ:ÔIó "�Ø—;‘;×-Ñ-¨g×6Ô6¸6¿;¹;×;NÑ;N×;PÔ;PØ—L‘L §¡×!3Ñ!3°v¸f¿m¹m¸_Ð5MÖNñ "ñ W^Ó^ÑV]ÈF�—
‘
˜V F§M¡M ?Ð3Ó4°v·{±{×7GÑ7G×GÐGÑV]Ñ^Ð^ùó cøó "�Ø—;‘;×-Ñ-¨g×6Ô6¸6¿;¹;×;NÑ;N×;PÔ;PØ—L‘L §¡×!3Ñ!3°v¸f¿m¹m¸_Ð5MÖNò "üò _s%   Å)IÅ<I% ÈAK+É%$K(ÊK(Ê08K(c              #  	ó  "  € V P                   P                  R R R7       \        \        P                  ! RV P                   R7      4      p Vx € \
        P                  ! VR R7       R#   \
        P                  ! TR R7       i ; i5i)Tr¸   z	.staging-)ÚprefixÚdirrË   N)rî   rÁ   r   ÚtempfileÚmkdtemprÍ   rÎ   )r/  r£   s   & r   r>  ÚStore.scratch–  sZ   é € à�	‰	�‰ ¨tˆÔ4Ü”H×$Ò$¨K¸T¿Y¹YÔGÓHˆð	4ØŠJä�MŠM˜$¨d×3øŒF�MŠM˜$¨dÖ3üs   ‚A	BÁA* ÁBÁ*BÂBc               ó$   € V ^8„  d   QhRRRRRR/# )r   Ústagedr   r$   r   r   r   )r   s   "r   r   r-  Ÿ  s!   € ÷ ñ ˜dð ¨#ð °$ñ r   c                óœ  € V P                  V4      pRp\        ^4       F  p \        P                  ! W4       Vu # 	   \        P                  ! W4       V#   \         d@    TP                  4       '       d   Tu u # \        P                  ! T4       T^,          p K‚  i ; i  \         d    TP                  4       '       g   h  T# i ; i)zxAtomic rename into place, retried for Windows file-lock holds
(Defender, indexers). A concurrent winner's entry is kept.g      à?)r6  Úranger<   r­   r2   r  ÚtimeÚsleep)r/  rj  r$   r²   ÚdelayÚ_s   &&&   r   r\  ÚStore.publishŸ  s±   € ð —‘˜DÓ!ˆØˆÜ�q–ˆAðÜ—
’
˜6Ô*Ø’ñ ð	Ü�JŠJ�vÔ&ð ˆøô ô Ø—=‘=—?’?Ø!”MÜ—
’
˜5Ô!Ø˜•
“ð	ûô ô 	Ø—=‘=—?’?Øð #àˆð	ús5   £AÁ B% Á B"Á9B"Á?B"Â!B"Â% CÃCÃ
Cc              #  óÒ  "  € ^ RI Hp V P                  P                  RRR7       V P                  R,          p\        P
                  ! V\        P                  \        P                  ,          R4      p V! VR^R7      '       g+   \        RV R2\        P                  RR	7       V! VRR
7       Rx € \        P                  ! V4       R#   \        P                  ! T4       i ; i5i)zFSerialize writers using the same advisory lock as runtime publication.)Úlock_fdTr¸   z.install.locki€  )Úwaitrz   zwaiting for z  (another PM operation holds it))ÚfileÚflush)rt  N)Úpm.filesystemrs  rî   rÁ   r<   rU   ÚO_CREATÚO_RDWRÚprintr%   ÚstderrÚclose)r/  rs  ÚlockÚfds   &   r   Úinstall_lockÚStore.install_lock´  s¢   é € õ 	*Ø�	‰	�‰ ¨tˆÔ4Ø�y‰y˜?Õ*ˆÜ�WŠW�Tœ2Ÿ:™:¬¯	©	Õ1°5Ó9ˆð	ñ ˜2 D°!×4Ó4Ü˜ T FÐ*JÐKÔRU×R\ÑR\ÐdhÕiÙ˜ Õ&Ûä�HŠH�RŽLøŒB�HŠH�R�Lüs   ‚A2C'Á5?C Â4C'ÃC$Ã$C'r4  r½   )Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__r0  r6  r:  rI  rG  r   r>  r\  r  Ú__static_attributes__r   r   r   r+  r+  Z  sq   † ñOõ$õ õ)ñJÐrv÷ Jð Jð
(_È4ð (_Ø9=÷(_ðT ñ4ó ð4õð* ñó ôr   r+  )	z	win32-x64zwin32-arm64z	linux-x64zlinux-arm64r	   r
   zlinux-arm64-bionicz
darwin-x64zdarwin-arm64)(r…  Ú
__future__r   r<   r&   rÍ   rÚ   r%   Ú	threadingrf  rm  Ú
contextlibr   Úpathlibr   Útypingr   rw  r   r   r   ÚALL_TARGETSÚ	frozensetÚMUSL_TARGETSrE   rN   rZ   r_   rh   rp   r–   r³   rÇ   rÒ   rÐ   rà   r  r  r)  r+  r   r   r   Ú<module>r�     s§   ðÙ Må "ã 	Û Û Û Û 
Û Û Û Ý %Ý Ý ç <Ñ <ð
€ñ Ð*Ð,>Ð?Ó@€õ-&õ`?õ&õ õ4õ,õ&"õ4-õ&Xõ	Aõ6õ"2õ"õ"1õ&÷Rió ir   