
    _j                       d Z 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ZddlZddlmZ ddlmZ ddlmZ ddlmZmZmZmZmZ ddZd d	Zd!d
Zd"dZddd#dZd$dZd%dZd&dZ d'dZ!	 	 	 	 	 	 	 	 	 	 	 	 	 	 d(dZ"	 	 	 	 	 	 	 	 	 	 	 	 d)dZ#	 	 	 	 	 	 	 	 	 	 d*dZ$	 	 	 	 	 	 	 	 	 	 	 	 d+dZ%ddd	 	 	 	 	 	 	 	 	 	 	 d,dZ&	 	 	 	 	 	 d-dZ'd.dZ(d/dZ)	 	 	 	 	 	 	 	 d0dZ*	 	 	 	 	 	 	 	 	 	 d1dZ+	 	 	 	 	 	 	 	 	 	 d2dZ,y)3zIStrict, offline provenance primitives for installed Golden Path runtimes.    )annotationsN)BytesParser)compat32)Path)AnyIterableMappingSequencecastc                R    t        j                  | dddd      j                         S )NFT),:)ensure_ascii	sort_keys
separators	allow_nan)jsondumpsencodevalues    /home/cube/projects/richard/traning coach/.omo/evidence/task26/task26-lossless-portable-ty-installed-st_01a01574-v28/verification-tools/installed_wheel_provenance.py	canonicalr      s+    :: fh    c                   t        j                         }| j                  d      5 t        fdd      D ]  }|j	                  |        	 d d d        |j                         S # 1 sw Y   |j                         S xY w)Nrbc                 &     j                  d      S )Ni   )read)streams   r   <lambda>zsha256_file.<locals>.<lambda>"   s    &++k":r   r   )hashlibsha256openiterupdate	hexdigest)pathdigestchunkr   s      @r   sha256_filer*      sh    ^^F	4F:C@EMM%  A 
  
 s   &A&&A>c                ~    dj                  | j                         j                  dd      j                  d            S )N-_)joinlowerreplacesplit)names    r   _normalr3   '   s/    88DJJL((c288=>>r   c                P    | j                  d      t        fd|D              S )NTstrictc              3     K   | ]<  }|j                  d       k(  xs! j                  |j                  d              > ywTr5   N)resolveis_relative_to).0rootresolveds     r   	<genexpr>z_within.<locals>.<genexpr>-   sH     }w|osx4<<t<44j8O8OPTP\P\dhP\Pi8jjw|s   AA)r9   any)r'   rootsr=   s     @r   _withinrA   +   s%    ||4|(H}w|}}}r   Fprivatec                  | j                         }t        j                  |j                        rt	        | d      t        j
                  |j                        r0|j                  dk7  s!|j                  t        j                         k7  rt	        | d      |r0t        j                  |j                        dvrt	        | d      y y )N is a symlink   z is not an owned regular file>         permissions are not private)lstatstatS_ISLNKst_mode
ValueErrorS_ISREGst_nlinkst_uidosgeteuidS_IMODE)r'   labelrC   infos       r   _regularrW   0   s    ::<D||DLL!E7-011<<%!);t{{bjjl?ZE7"?@AA4<<-^CE7">?@@ Dwr   c                x   | j                         }t        j                  |j                        rt	        | d      t        j
                  |j                        r!|j                  t        j                         k7  rt	        | d      t        j                  |j                        dvrt	        | d      y )NrE   z is not an owned directory>   @    rI   )
rJ   rK   rL   rM   rN   S_ISDIRrQ   rR   rS   rT   )r'   rU   rV   s      r   _private_directoryr\   :   s    ::<D||DLL!E7-011<<%

)DE7"<=>>||DLL!7E7">?@@ 8r   c                    t        | dd       t        j                  | j                  d            }t	        |t
              rt        d |D              rt        d      t        t
        t        t        f   |      S )N
provenanceTrB   utf-8)encodingc              3  >   K   | ]  }t        |t                 y wN)
isinstancestr)r;   keys     r   r>   z$read_private_json.<locals>.<genexpr>G   s     )Tesjc.B*Bes   zprovenance is not an object)rW   r   loads	read_textrc   dictr?   rN   r   rd   r   )r'   r   s     r   read_private_jsonri   D   s_    T<.JJt~~w~78EeT"c)Te)T&T677S#X&&r   c                |   | j                  d      \  }}}|dk7  s|r|st        | d      	 t        j                  |dt	        |       dz  z  z         }t	        |      t        j                         j                  k7  rt        | d      |j                         S # t
        $ r}t        | d      |d }~ww xY w)N=r"   z RECORD hash is invalid   )
	partitionrN   base64urlsafe_b64decodelen	Exceptionr!   r"   digest_sizehex)r   rU   	algorithm	separatorencodedrawexcs          r   _decode_record_hashry   L   s    $)OOC$8!Iy'HIWE7"9:;;E&&wW8I1J'JK 3x7>>#///E7"9:;;779	  EE7"9:;DEs   (B 	B;'B66B;c                   	 | j                  d      }t        t        j                  t	        j
                  |d                  }g }t               }|D ]  }t        |      dk7  rt        | d      |\  }	}
}t        |	      }|	r|j                         s|	|v rt        | d      |j                  |	       |	|k(  r'|
s|rt        | d      |j                  |	dd f       |
r|j                         st        | d	      |j                  |	t!        |
|      t#        |      f        ||vrt        | d
      |S # t        t        j                  f$ r}t        | d      |d }~ww xY w)Nr_    newlinez RECORD is invalid   z RECORD row is invalidz RECORD path is invalidz RECORD self-row is invalidz RECORD hash or size is missingz RECORD self-row is missing)decodelistcsvreaderioStringIOUnicodeDecodeErrorErrorrN   setrp   r   is_absoluteaddappend	isdecimalry   int)datarecord_relativerU   decodedparsedrx   rowsseenrowrelativeencoded_hashraw_size	candidates                r   _record_rowsr   Y   s}   @++g&cjjWb!ABC /1DUDs8q=w&<=>>+.(,N	9002h$6Fw&=>??&x E7*E!FGGKK2t,-8#5#5#7w&EFGGX2<GXWX   d"E7"=>??K- 		* @E7"456C?@s   AE E/E**E/c               ~   t        | | dd       	 t        j                  |       5 }|j                         }t	        |      t	        t        |            k7  st        d |D              rt        | d      | d}|j                  |      }	t        |	||      }
|D ci c]  }|d   |
 }}t        |      |
D ch c]  }|d   	 c}k7  rt        | d      |j                  d	       d
}|
D ];  \  }}}||k(  r	 |j                  |      }t	        |      |k7  rt        | d|       t        j                  |      j                         |k7  rt        | d|       |}|j                  |      r|t	        |      d  j!                  d      \  }}}|r|st        | d|       |dv r|}nP|dk(  r;t#        t$        j&                  j)                  ||z  |            j+                         }nt        | d|       |j-                  |      }||||fk7  s.t        | d|        t        j                  |	      j                         cd d d        S c c}w c c}w # t        $ r}t        | d|       |d }~ww xY w# 1 sw Y   y xY w# t        j.                  $ r}t        | d      |d }~ww xY w)Nz wheelTrB   c              3  p   K   | ].  }|j                  d       xs dt        |      j                  v  0 yw)/..N)
startswithr   parts)r;   r2   s     r   r>   z#_wheel_inventory.<locals>.<genexpr>   s7     3wqvimDOOC4H4dDTXY]T^TdTdLd4dqvs   46z wheel members are invalid/RECORDr   z* wheel inventory differs from wheel RECORD
.dist-info.data/z! wheel RECORD member is missing: z wheel RECORD size mismatch: z wheel RECORD hash mismatch: r   z wheel data member is invalid: >   platlibpurelibr   z  unsupported wheel data scheme: z, installed RECORD differs for wheel member: z wheel is invalid)rW   zipfileZipFilenamelistrp   r   r?   rN   r   r   removesuffixKeyErrorr!   r"   r&   r   rm   r   rR   r'   relpathas_posixget
BadZipFile)wheeldist_info_nameinstalled_rowsrU   site_packagesvenvarchivenamesr   wheel_recordr   r   installed_by_pathdata_prefixr   expected_hashexpected_sizepayloadrx   installed_relativeschemeru   suffix	installeds                           r   _wheel_inventoryr   v   s    UugV$d3'?__U#w$$&E5zSU_,3wqv3w0w E7*D!EFF!/ 08O"<<8LouED8F GQ G5z5c!f55 E7*T!UVV+88FGvNK:>6-.e%ll84G w<=0$w.KH:%VWW>>'*446-G$w.KH:%VWW%-"&&{308[9I9J0K0U0UVY0Z-FIv$F(E72QRZQ[)\]]!77-3*6)-1"''//$-Q^2_-`-i-i-k*(E72RSYRZ)[\\-112DE	!3]M RR$w.Z[cZd%eff1 ;?2 >>,/99;I $# !H5   e$w.OPXz%Z[adde! $#J  ?E7"3453>?s~   J A8J	 I-J	=I"	7J	I'DJ	 3J		J 
J	'	J0JJJ		JJ J J<(J77J<c                   |dz  }|j                         }	 t        t        j                  t	        j
                  |j                  d      d                  }t        j                  |       5 }|j                   d}	t        |j                  |	      |	|      }
|j                   d|j                         v r|j                  |j                   d      nd}ddd       i }|D ]7  }t#        |      d
k7  s|d   r|d   |v rt!        d      |d   |d   f||d   <   9 g }g }|j%                  |      j'                         h}|j                  j)                  d       d}
D ]  \  }}}|	k(  r|}d}|j+                  |      r|t#        |      d j-                  d      \  }}}|st!        d      |dk(  rt/        |      }|r|j1                         sd|j2                  v rt!        d      ||z  }t/        t4        j6                  j9                  ||            j'                         }|j;                  |      }|;|d   r6|d   j=                         r#t?        |d   d      |k7  stA        |d         |k7  rt!        d      |jC                  |       tE        |d       |j                         }t        j                  |       5 }|j                  |      }ddd       t#              |k7  s+tG        jH                  |      jK                         |k7  s||k7  rt!        d      |jM                  d||d|j'                          ||d       |dk7  rt!        d      t/        t4        j6                  j9                  |dz  |z  |            j'                         }d}|j;                  |      }|t!        d      |jC                  |       ||z  }tE        |d        |j                         }|rt        j                  |       j                  |      }|j-                  d!      \  }}} |j-                  d!      \  }!}"}#d"|d#z   jO                         }$|r|"r
||$k7  s|#| k7  rt!        d$      d%| z   }%|jM                  d&|||tG        jH                  |%      jK                         t#        |%      d'       Ut#        |      |k7  s&tG        jH                  |      jK                         |k7  rt!        d(      |jM                  ||||d)        rtQ        jR                  d*      }&	 |&jU                  |j                  d             |&jW                  d,      r|&jY                  d,      nd-D ]  \  }'}(|(j[                  d.d      d   j]                         }|j-                  d/      \  })}}*|rD|'rBt_        d0 |'D              s0|)ja                  d1d2      jc                         r|*jc                         st!        d3      t/        t4        j6                  j9                  |dz  |'z  |            j'                         }||vrt!        d4      ||z  }+tE        |+d5       |+j                         }|j-                  d!      \  }},} d6|) d7|* d8|* d9jO                         }-|,r|d"|d#z   jO                         k7  s| |-k7  rt!        d:      |jC                  |       d%| z   }%|jM                  d;|||' d<|( tG        jH                  |%      jK                         t#        |%      d=        |j                   d>d?|j                   d@dA|j                   dBdCi}.te        tg        |      |z
        D ]  }|.j;                  |      }/|/t!        dD      ||z  }tE        |dE       |j                         }|/d?k(  r|j]                         dFk7  rt!        dG      |/dAk(  r|dHvrt!        dI      |/dCk(  r5	 ti        jj                  |      }0to        |0tp              rdK|0vrt!        dJ      |jM                  |/||tG        jH                  |      jK                         t#        |      dL        dM|tG        jH                  t        j                  |       j                  |j                   d            jK                         te        |dN O      te        |dP O      dQ}1i |1tG        jH                  ts        |1            jK                         tG        jH                  |      jK                         ddRS # 1 sw Y   OxY w# t        t        j                  t        j                  f$ r}t!        d	      |d}~ww xY w# 1 sw Y   xY w# t        tP        j                  f$ r}t!        d+      |d}~ww xY w# th        jl                  $ r}t!        dJ      |d}~ww xY w)SzMProject path-independent installed RECORD semantics without hiding raw drift.RECORDr_   r{   r|   r   z/entry_points.txtr   Nz portable RECORD input is invalidr~   r   zinstalled RECORD row is invalidrF      r   r   Fr   z&unsupported path-dependent wheel entryr   r   zrelocated static datazBwheel-owned installed RECORD row differs for relocated static dataz<wheel-owned installed row differs from relocated static data!wheel_owned_relocated_static_dataz{data}/)kindinstalled_path
wheel_pathcanonical_destinationr"   sizescriptsbinTz+wheel-owned installed RECORD row is missingzportable RECORD installed entry   
z#!
bin/pythonz(generated launcher semantics are invalids   #!<VENV>/bin/python
path_dependent_launcher)r   record_pathr   ownertemplate_sha256size_without_shebang_pathz3wheel-owned installed row differs from wheel RECORD)r   r   r"   r   )interpolationz&wheel console entry points are invalidconsole_scripts [r   c              3  $   K   | ]  }|d v 
 yw)zAabcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789._-Nr   r;   	characters     r   r>   z-portable_record_projection.<locals>.<genexpr>M  s%       J  ~Ipyy(kk  ~I   .r-   z$wheel console entry point is invalidz0generated console launcher RECORD row is missingzgenerated console launcherz2# -*- coding: utf-8 -*-
import re
import sys
from z import zn
if __name__ == '__main__':
    sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
    sys.exit(z())
z.generated console launcher template is invalidconsole_entry_point_launcherrk   )r   r   r   entry_pointr   r   z
/INSTALLERinstaller_metadataz
/REQUESTEDrequested_markerz/direct_url.jsondirect_url_metadataz+unexpected generated installed RECORD entryzgenerated RECORD entrys   pipz'generated installer metadata is invalid>   r   r   z%generated requested marker is invalidz(generated direct URL metadata is invalidurl)r   r   r   content_sha256r   z.task26-portable-installed-record-projection-v1c                    t        | d         S )Nr   rd   r   s    r   r    z,portable_record_projection.<locals>.<lambda>  s    CDU@Vr   )re   c                    t        | d         S )Nr   r   r   s    r   r    z,portable_record_projection.<locals>.<lambda>  s    s3}CU?Vr   )schemadistribution_namewheel_record_sha256wheel_owned_rowsgenerated_entries)projection_sha256raw_installed_record_sha256raw_installed_record_portable):
read_bytesr   r   r   r   r   r   r   r   r2   r   r   r   r   r   r   rN   rp   relative_tor   r   r   rm   r   r   r   rR   r'   r   r   r   ry   r   r   rW   r!   r"   r&   r   r   configparserConfigParserread_stringhas_sectionitemsr1   stripr?   r0   isidentifiersortedr   r   rf   JSONDecodeErrorrc   rh   r   )2r   r   	dist_infor   r   record
raw_recordinstalled_csvr   wheel_record_name
wheel_rowsentry_points_datarx   r   r   wheel_owned	generatedconsumedr   r   r   r   r   generated_launcherr   ru   r   suffix_pathtargetr   wheel_payloadfirst	remainder_wheel_firstwheel_separatorwheel_remainderexpected_shebangtemplateparserscript_nametarget_specmodulefunctionlauncherseparator_bytesexpected_remainderallowed_generatedr   r   cores2                                                     r   portable_record_projectionr     s	
    !F""$JFJJr{{:#4#4W#=rJK
 __U#w#,>>"2' :%./!!J  nn%%677;K;K;MM 	//@AB  $ 24Ns8q=A#a&N*B>??"%a&#a&!1s1v  ,.K)+I ,,];DDFGH^^00>?vFK2<.-((%"{+(0[1A1B(C(M(Mc(R%FIv !IJJ"6l"..0{000$%MNN+%)GGOOFM:&(* # %(();<Kq6q6++-*A 7 %% 3q6{m3$\  /0!89 ++-__U+w$+LL$:M , &-7~~m4>>@$%-/$V  "" C*<&.'(<(<(>'?@"/ -	 " !IJJ!%uv 5}E"hj  "&  !34;JKK'(!33:;##%#OOE277AM*1*;*;E*B'E9i=J=T=TUZ=[:L/?!#D<$7#89@@B&,,"i/ !KLL/);H5#5"*.'.~~h'?'I'I'K14X	 7|},w0G0Q0Q0SWd0d !VWW&8"*+)	K 3=Z **>	P077@A
 !!"34 LL*+ %K
 !&&sA.q1779F*0*:*:3*?'FIx"  J  ~I  J  J~~c3/<<>,,. !GHHu{ :MJhj  ~- !STT$x/HX;<))+G070A0A%0H-E?I xxz 2  !)z0 fh  $b!4 56==?? 22 !QRRLL"/);H:#+.&1]!K=#A'.~~h'?'I'I'K14X	Qf >>
*%';>>
*%'9>>
*+-B
 3~.9: $$X.<JKK)12##%''GMMOv,EFGG%%'*EDEE((V

7+ eT*e5.@ !KLL'*").."9"C"C"EG	
% ;8 C.&~~OOE"''9>>*:'(BC 

)+";4VW#I3VWD
$^^IdO<FFH'.~~j'A'K'K'M).	 M $# 		7+=+=> F;<#EFb ,+V #L$6$67 	PEFCO	PP '' V !KLRUUVsm   Ad3 .A+d&d3 e/* e< *f)&d0+d3 3(e,e''e,/e9	<f&f!!f&)g<ggc           
        t        | d       t        |dd       t        |d       t              }r|j                         sd|j                  v rt	        d      	 t        j                  |      5 }|j                         }|vrt	        d      |j                        }|D cg c]  }|j                  d	      s| }	}t        |	      d
k7  rt	        d      t        |j                  |	d         |	d   d      }
t        fd|
D        d      }|:|d
   t        j                  |      j                         k7  s|d   t        |      k7  rt	        d      	 ddd       | j#                         }|j#                         }|k7  s||k7  rt	        d      t        j                  |      j                         }j%                  d      j'                  dd      |t        |      t)        | j+                  d            t)        |j+                  d            t)        |j+                  d            dS c c}w # 1 sw Y   xY w# t
        j                   $ r}t	        d      |d}~ww xY w)zJProve one packaged helper is byte-identical in source, wheel, and install.zmodule sourcezmodule wheelTrB   zinstalled moduler   zwheel module path is invalidz$packaged module is absent from wheel.dist-info/RECORDrF   z#wheel RECORD cardinality is invalidr   c              3  4   K   | ]  }|d    k(  s|  yw)r   Nr   )r;   itemwheel_members     r   r>   z0verify_packaged_module_parity.<locals>.<genexpr>  s     IaL1Hs   Nr   z/packaged module wheel RECORD binding is invalidzmodule wheel is invalidz0source, wheel, and installed module bytes differz.pyr   r   r5   )r  r"   r   source_pathr   r   )rW   r   r   r   rN   r   r   r   r   endswithrp   r   nextr!   r"   r&   r   r   r   r0   rd   r9   )sourcer   r  r   memberr   r   r   r2   record_namesr   r   rx   source_bytesinstalled_bytesr(   s     `             r   verify_packaged_module_parityr%    s?    V_%UND1Y*+,F6--/46<<3G788=__U#w$$&E5( !GHHll<0G-2YUTdmmDW6XDULY< A% !FGG\!_ =|AP^_DII4PC{c!fw(?(I(I(KKsSTvY\]dYeOe !RSS Pf $ $$&L**,Ow/W"<KLL^^G$..0F++E2::3DG6>>>67%--t-45i//t/<=  Z $#  =23<=sI   I 45H?)H: H:BH?I :H??II I/I**I/c                   | j                         } |j                         }|j                         }t        | d       |j                         rt        || f      st	        d      g }t        |j                  d            D ]  }|j                         s|j                         s$|dz  }|j                         r|j                         rJ|j                         }t        t              j                  |      }	t        |	j                  dd            }
t        |	j                  dd            }t        |
      t        |      k(  s|j!                  |||
|f        t#        |      d	k7  rt	        d
|       |d   \  }}}}|st	        d|       |dz  }t%        || d       |j                         }|j'                  |      j)                         }t+        |||      }g }|D ]  \  }}}||z  }	 |j-                  d       t        || f      st	        | d      t%        || d       ||k(  r/t1        j2                  |      j5                         }t#        |      }nO|j7                         j8                  }||k7  rt	        | d|       t;        |      }||k7  rt	        | d|       |j!                  |||d        t=        ||j>                  ||||       }tA        |||| |      }g }|D ]t  }|rd|v sd|v rt	        d      ||z  }|j                         s|j                         st	        d|       |j!                  t        |j-                  d                   v ||t        |j-                  d            t1        j2                  |      j5                         |t        |j-                  d            t1        j2                  |      j5                         |j>                  t        |      t;        |      ||t1        j2                  tC        |            j5                         |dS # t.        $ r}t	        | d|       |d}~ww xY w)zCRecompute one wheel's installed inventory from METADATA and RECORD.zinstalled venvz+site-packages is outside the installed venvz*.dist-infoMETADATA)policyNamer{   VersionrF   z/installed distribution cardinality is invalid: r   z/installed distribution version is unavailable: r   z RECORDTr5   z RECORD file is unavailable: Nz' RECORD path escapes the installed venvz RECORD filez RECORD size mismatch: z RECORD hash mismatch: )r'   r"   r   )r   r   )r   r   r   r   r   r   r   zimport package name is invalidz'installed package root is unavailable: )r   distribution_versionr   metadata_sha256package_rootsr   record_sha256wheel_filenamer   wheel_sha256r   installed_inventoryinstalled_inventory_sha256r  )"absoluter\   is_dirrA   rN   r   glob
is_symlinkis_filer   r   r   
parsebytesrd   r   r3   r   rp   rW   r   r   r   r9   OSErrorr!   r"   r&   rK   st_sizer*   r   r2   r  r   )r   r   r   r   import_packagesmatchesr   metadata_pathmetadatamessager2   versiondeclared_namer   record_datar   r   	inventoryr   r   r   r  rx   actual_hashactual_sizer   record_projectionr-  packager<   s                                 r   inspect_installed_distributionrH    sX    ==?D!**,MNNEt-.!)HFGG24GM..}=>	!)9)9);!J.$$&-*B*B*D ++-X.99(C7;;vr*+gkk)R014=G$566NNIxw?@ ? 7|qJK\J]^__29!*/IxJK\J]^__!FV)*'23##%K((7@@BO_6GHD)+I26.-)	eNN$N' vw' 122YZ[[-.l;<&!..5??AKk*K ++-//Km+ $5#66MhZ!XYY%f-Km+ $5#66MhZ!XYY(k;WX' 37( +# 3#'  "M"#.C7N=>>w&??DKKMFwiPQQST!:;< # + '**$*78">>(3==?&6>>>67 4>>@**%j#E*2(&-nnYy5I&J&T&T&V&7 O  	e 122OPXzZ[add	es   6P==	QQQ)search_path
executablec                   | j                         } |j                  d      }| t        j                  dk(  rdndz  }|j	                         st        d      |xs t        t        j                        j                         }	 t        j                  j                  ||      }|st        d      t        |t        j                  n|      }g }	|D ]c  t        xs t        j                               j                         }
|
j	                         sC|	j                  |
j                  d             e 	 |	j                  |      }|	d	| D ]*  |k(  r	t!        fd|D              st        d        |j                  d      }|j#                         }t%        j&                  |j(                        r"t%        j*                  |j(                        dz  rt        d      t-        |j                               t-        |      t/        |      t1        t        j2                  d	d       t-        |      dS # t        $ r d}Y w xY w# t
        $ r}t        d
      |d	}~ww xY w)zDReject another import authority ahead of the declared site-packages.Tr5   ntzScripts/python.exer   z$installed interpreter is unavailableFz?running interpreter differs from declared installed interpreterNz=declared site-packages is absent from interpreter search pathc              3  D   K   | ]  }|z  j                           y wrb   )exists)r;   rG  entrys     r   r>   z.validate_import_environment.<locals>.<genexpr>Y  s     Ig'')s    z2import authority precedes declared site-packages:    z(selected toolchain interpreter is unsafer~   )declared_pathresolved_pathr"   r@  r   )r3  r9   rR   r2   rN  rN   r   sysrJ  r'   samefiler9  tuplegetcwdr   indexr?   rJ   rK   rO   rM   rT   rd   r*   r   version_info)r   r   r;  rI  rJ  declared_pythonactualsameentriesresolved_entriesr   
site_indexrx   interpreterinterpreter_inforO  s                  @r   validate_import_environmentra  7  s7    ==?D!)))6Mbggo2<XO!!#?@@0D0::<Fww8 Z[[ 3CHHEG#%-"))+.779	##I$5$5T$5$BC c%++M:
 "+:.M!IIIQRWQXYZZ	 /
 ")))6K"((*LL)112<<(001E9CDD_5578[)k*((!,-]+ 5    cXY_bbcs*    H? :I ?II	I+I&&I+c          	        t        d |D              }g }t        | j                               D ]  \  }}|j                         }t	        ||      st        d|       t        |d|        |j                  |t        |j                  d            t        |      |j                         j                  d        |S )Nc              3  @   K   | ]  }|j                  d         ywr8   )r9   )r;   r<   s     r   r>   z)loaded_module_receipts.<locals>.<genexpr>n  s     F$,,d,+s   z3loaded module is outside declared installed roots: zloaded module Tr5   )r  r'   r"   r   )rU  r   r   r3  rA   rN   rW   r   rd   r9   r*   rK   r:  )modulesallowed_rootsr@   receiptsr2   raw_pathr'   s          r   loaded_module_receiptsrh  k  s     FFFE(*H 1h  "tU#RSWRXYZZv./DLLL56%d+		++		
 2 Or   c                   t        t        t        t        f   | j	                  d            }i }dD ]a  }t        t        t        t        f   |j	                  |            }t        t
        t        t        t        f      |j	                  d            D cg c]^  }dt        t        |j	                  dd                  j                  vr,t        |j	                  dd            j                  d      s|` }}dD ci c]  }||j	                  |       }}t        t        t        t        f   |j	                  d	            }	|	j	                  d
      |d<   ||d<   t        j                  t        |            j                         |d<   |||<   d t        t        t        t        f   | j	                  d            }
d|
j	                  d      |
j	                  d      d|dS c c}w c c}w )zGRetain only path-independent installed facts and projection identities.distributionsprofilehermesr1  r   r'   r{   r  )r   r+  r,  r/  r0  r   r  r   !portable_record_projection_sha256r2  r_  z$installed-golden-runtime-portable-v2r"   r@  )r"   r@  )r   r_  rj  )r   r	   rd   objectr   r
   r   r   r  r!   r"   r   r&   )runtimerj  portable_distributionsroledistributionr   rC  re   portable_distribution
projectionr_  s              r   portable_installed_runtimerv    s   f-w{{?/KLM02%GCK0-2C2CD2IJ HWS&[%9:L<L<LMb<cd
d4CGGFB$7 89???+,556IJ d 	 
4
 !!#&& 	 4
 CK ,"2"23O"P

 FP^^F
AB 8A34>Enni ?

)+ 	:; (=t$3 &4 wsF{+W[[-GHK8!ooh/"y1
 0 3
4
s   A#G)?G.c                j    t        | t              xr" t        |       dk(  xr t        d | D              S )N@   c              3  $   K   | ]  }|d v  
 yw)0123456789abcdefNr   r   s     r   r>   z_hex_digest.<locals>.<genexpr>  s     GI	//r   )rc   rd   rp   allr   s    r   _hex_digestr|    s7    5# 	HJ"	HGGGr   c          	     |   |dvst        |      st        d      | j                  d      }t        |t              st        d      t        t        t        t        f   |      }i }dD ]  }|j                  |      }t        |t              st        d      t        t        t        t        f   |      }|j                  d      }	t        |	t              st        d      t        t        t        t        f   |	      }
|
j                  d	      }t        |t              rt        |t        t        f      rt        d
      t               }|D ]`  }t        |t              st        t        t        t        f   |      }|j                  d      }|dv sG|j                  t        |             b t        |      }|j                  d      |j                  d      |
j                  d      |
j                  d      dd|d||<    d|||d}t        j                  t        |            j!                         |d<   |S )zDBind raw RECORD hashes without making them portable equality inputs.>   original
rehydratedz,nonportable RECORD audit identity is invalidrj  z2nonportable RECORD audit distributions are invalidrk  z0nonportable RECORD audit distribution is invalidr  z(nonportable RECORD projection is invalidr   z.nonportable RECORD classifications are invalidr      r   r   r   r0  r   r   FAvalidated_path_dependent_installer_material_may_change_raw_record)rs  r0  portable_projection_sha256r   r   reasonpath_dependent_classifications,task26-nonportable-installed-record-audit-v1)r   install_rolecandidate_digestrj  audit_sha256)r|  rN   r   rc   r	   r   rd   ro  r
   bytesr   r   r   r!   r"   r   r&   )rp  r  r  distributions_valuerj  audit_distributionsrr  distribution_valuers  projection_valueru  generated_valueclassification_valuesgenerated_rowr   r   classificationsaudits                     r   "nonportable_installed_record_auditr    s%    55[> GHH!++o6)73MNNf-/BCM-/%*..t4,g6OPPGCK02DE'++,HI*G4GHH'#v+.0@A
$..)<=/84
c5\9
 MNN*-%,MmW5WS&[1=AI==(D   &))#d)4 - !!67(,,-@A(,,^<*4..9L*M+5>>-, .3Y.=
%
D!5 &L A$,,	 E $NN9U+;<FFHE.Lr   c               j   t        | t              rt        |       h dk7  rt        d      t	        t        t
        t        f   |       }|j                         D ci c]  \  }}|dk7  s|| }}}|j                  d      }|j                  d      }	t        |t              rt        |	t              st        d      t	        t        t
        t        f   |      }
t	        t        t
        t        f   |	      }|j                  d      dk7  sv|j                  d      |k7  sb|j                  d	      |k7  sN|j                  d      t        j                  t        |            j                         k7  st        |      d
dhk7  rt        d      dD ]  }|j                  |      }|
j                  |      }t        |t              rt        |t              st        d      t	        t        t
        t        f   |      }t	        t        t
        t        f   |      }|j                  d      }t        |      h dk7  s|j                  d      |j                  d      k7  s|j                  d      |j                  d      k7  s|j                  d      |j                  d      k7  s|t        |j                  d            rb|j                  d      dusO|j                  d      dk7  s;t        |t              r+|t!        t        |            k7  st#        d |D              st        d       |S c c}}w )N>   r   r  r  rj  r  z4nonportable installed RECORD audit schema is invalidr  rj  z<nonportable installed RECORD audit distributions are invalidr   r  r  r  rl  rm  z5nonportable installed RECORD audit binding is invalidrk  z1nonportable installed RECORD audit row is invalidr  >   r  rs  r0  r  r   r   r  rs  r   r0  r  rn  r   r   Fr  r  c              3  $   K   | ]  }|d v 
 yw)r  Nr   )r;   r  s     r   r>   z>validate_nonportable_installed_record_audit.<locals>.<genexpr>1  s&       ,D 
 ,r   )rc   rh   r   rN   r   rd   ro  r   r   r	   r!   r"   r   r&   r|  r   r   r?   )r   r  r  runtime_portabler  re   r  unsignedportable_distributions_valueaudit_distributions_valuerq  r  rr  	row_valueportable_valuer   portabler  s                     r   +validate_nonportable_installed_record_auditr    s    eT"c%j 5 ' OPPc6k"E*E+0;;=R=ic4C><QT	=HR#3#7#7#H  %		/ :2G<J!7E WXX!'#v+"68TUwsF{35NO		(MM99^$499'(,<<99^$>>)H-.88:;"#	8'<<PQQ%'++D1	/33D9)W-ZG6
 PQQ73;'3V,n=''"BCH	 ww~&(,,7J*KKww~&(,,~*FFww34||?@Asww'DEFww67uDwwx RSot4&_)=">>  ,  PQQQ &R Lw Ss   L/*L/c                    t        | |d      }t        | ||dd      }t        | ||dd      }dt        | j                               t        |j	                  d	
            |||ddS )N)checkin_cligateway)r   r   r;  zphysique-checkin-cli)r  )r   r   r   r   r;  zhermes-agent)r  zinstalled-golden-runtime-v1Tr5   rk  )r   r   r   r_  rj  )ra  rH  rd   r3  r9   )r   r   profile_wheelhermes_wheelr_  rl  rm  s          r   collect_installed_runtimer  >  s     .#2K
 -#0(G ,#($F 0DMMO$]22$2?@"%,? r   )r   ro  returnr  )r'   r   r  rd   )r2   rd   r  rd   )r'   r   r@   zIterable[Path]r  bool)r'   r   rU   rd   rC   r  r  None)r'   r   rU   rd   r  r  )r'   r   r  zdict[str, Any])r   rd   rU   rd   r  rd   )r   r  r   rd   rU   rd   r  z!list[tuple[str, str, int | None]])r   r   r   rd   r   z%Sequence[tuple[str, str, int | None]]rU   rd   r   r   r   r   r  rd   )r   r   r   r   r   r   r   r   r   rd   r  dict[str, object])
r   r   r   r   r  rd   r   r   r  r  )r   r   r   r   r   r   r   rd   r;  Sequence[str]r  r  )r   r   r   r   r;  r  rI  zSequence[str] | NonerJ  zPath | Noner  r  )rd  zMapping[str, Path]re  zSequence[Path]r  zlist[dict[str, object]])rp  Mapping[str, object]r  r  )r   ro  r  r  )rp  r  r  rd   r  rd   r  r  )
r   ro  r  rd   r  rd   r  r  r  r  )
r   r   r   r   r  r   r  r   r  r  )-__doc__
__future__r   rn   r   r   r!   r   r   rR   rK   rS  r   email.parserr   email.policyr   pathlibr   typingr   r   r	   r
   r   r   r*   r3   rA   rW   r\   ri   ry   r   r   r  r%  rH  ra  rh  rv  r|  r  r  r  r   r   r   <module>r     s   O "   
  	  	  
  $ !  9 9?~
 9> AA'
:1?1?1? :1? 	1? 1? 1? 	1?hzz z 	z
 z z zz)) ) 	)
 ) )Xa
a a 	a
 a #a aR )-"1
1 1 #	1
 &1 1 1h3A*&R<!< < 	<
 <~KK K 	K
 +K K\ 
    	 
    r   