+
    QV-jŽG  ã                   óî  € ^ 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t^ RI	H
t
Ht ^ RIHt ^ RIHtHtHt ^RIHt ^RIHt ^RIHt ]'       d	   ^ RIt^ RIt]! ]4      t ! R R	4      t ! R
 R]
4      t ! R R]]
4      t ! R R]4      t ! R R]4      t  ! R R]4      t! ! R R]4      t" ! R R]4      t# ! R R]4      t$ ! R R]4      t% ! R R]4      t& ! R R]4      t' ! R  R!4      t(R# )"é    N)ÚABCÚabstractmethod)ÚPath)ÚTYPE_CHECKINGÚOptionalÚUnion)Úconfig)ÚFileLock)Ú
get_loggerc                   óp   a € ] tR t^t o RV 3R lR lltV 3R lR ltV 3R lR ltRV 3R lR	 lltR
tV t	R# )ÚExtractManagerNc                ó0   <€ V ^8„  d   QhRS[ S[,          /# )é   Ú	cache_dir)r   Ústr)ÚformatÚ__classdict__s   "€Úg/Volumes/fast/ai/experiments/ui-tars-smoke/.venv/lib/python3.14/site-packages/datasets/utils/extract.pyÚ__annotate__ÚExtractManager.__annotate__   s   ø€ ÷ #ñ #¡(©3¥-ñ #ó    c                ó²   € V'       d/   \         P                  P                  V\        P                  4      M\        P
                  V n        \        V n        R # ©N)	ÚosÚpathÚjoinr	   ÚEXTRACTED_DATASETS_DIRÚEXTRACTED_DATASETS_PATHÚextract_dirÚ	ExtractorÚ	extractor)Úselfr   s   &&r   Ú__init__ÚExtractManager.__init__   s6   € çFOŒB�G‰G�L‰L˜¤F×$AÑ$AÔBÔU[×UsÑUsð 	Ôô #ˆŽr   c                ó&   <€ V ^8„  d   QhRS[ RS[ /# ©r   r   Úreturn)r   )r   r   s   "€r   r   r   "   s   ø€ ÷ Nñ N¡Sð N©Sñ Nr   c                ó¬   € ^RI Hp \        P                  P	                  V4      p\        P                  P                  V P                  V! V4      4      # )é   )Úhash_url_to_filename)Ú
file_utilsr*   r   r   Úabspathr   r   )r"   r   r*   Úabs_paths   &&  r   Ú_get_output_pathÚExtractManager._get_output_path"   s:   € Ý4ô —7‘7—?‘? 4Ó(ˆÜ�w‰w�|‰|˜D×,Ñ,Ñ.BÀ8Ó.LÓMÐMr   c                ó,   <€ V ^8„  d   QhRS[ RS[RS[/# )r   Úoutput_pathÚforce_extractr'   ©r   Úbool)r   r   s   "€r   r   r   *   s"   ø€ ÷ 
ñ 
¡sð 
¹4ð 
ÁDñ 
r   c                óò   € T;'       go    \         P                  P                  V4      '       * ;'       dC    \         P                  P                  V4      ;'       d    \         P                  ! V4      '       * # r   )r   r   ÚisfileÚisdirÚlistdir)r"   r1   r2   s   &&&r   Ú_do_extractÚExtractManager._do_extract*   sT   € Ø÷ 
ð 
Ü—‘—‘˜{Ó+Ô+×lÐl´R·W±W·]±]À;Ó5O×5kÐ5kÔTV×T^ÒT^Ð_jÓTkÔ0lð	
r   c                ó,   <€ V ^8„  d   QhRS[ RS[RS[ /# )r   Ú
input_pathr2   r'   r3   )r   r   s   "€r   r   r   /   s"   ø€ ÷ ñ ¡#ð ±dð Ásñ r   c                óØ   € V P                   P                  V4      pV'       g   V# V P                  V4      pV P                  WB4      '       d   V P                   P	                  WV4       V# r   )r!   Úinfer_extractor_formatr.   r9   Úextract)r"   r<   r2   Úextractor_formatr1   s   &&&  r   r?   ÚExtractManager.extract/   s\   € ØŸ>™>×@Ñ@ÀÓLÐßØÐØ×+Ñ+¨JÓ7ˆØ×Ñ˜K×7Ò7Ø�N‰N×"Ñ" :Ð<LÔMØÐr   )r   r!   r   ©F)
Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__r#   r.   r9   r?   Ú__static_attributes__Ú__classdictcell__©r   s   @r   r   r      s4   ø‡ € ÷#ò #÷Nð N÷
ð 
÷
÷ ð r   r   c                   ól   a € ] tR t^9t o ]]V 3R lR l4       4       t]]V 3R lR l4       4       tRt	V t
R# )ÚBaseExtractorc                ó<   <€ V ^8„  d   QhRS[ S[S[3,          RS[/# r&   ©r   r   r   r4   )r   r   s   "€r   r   ÚBaseExtractor.__annotate__<   s   ø€ ×JÑJ¡%©©c¨	Õ"2ÐJÁÑJr   c                ó   € R # r   © ©Úclsr   Úkwargss   &&,r   Úis_extractableÚBaseExtractor.is_extractable:   s   € áGJr   c                óV   <€ V ^8„  d   QhRS[ S[S[3,          RS[ S[S[3,          RR/# ©r   r<   r1   r'   N©r   r   r   )r   r   s   "€r   r   rN   @   s+   ø€ ×YÑY™E¡$© )Õ,ÐY¹5ÁÁsÀÕ;KÐYÐPTÑYr   c                ó   € R # r   rP   )r<   r1   s   &&r   r?   ÚBaseExtractor.extract>   s   € áVYr   rP   N)rC   rD   rE   rF   Úclassmethodr   rT   Ústaticmethodr?   rG   rH   rI   s   @r   rK   rK   9   s1   ø‡ € ØØßJó ó àJàØßYó ó æYr   rK   c                   ól   a € ] tR t^Ct o . t]V 3R lR l4       t]RV 3R lR ll4       tV 3R lt	Rt
V tR# )	ÚMagicNumberBaseExtractorc                ó<   <€ V ^8„  d   QhRS[ S[S[3,          RS[/# ©r   r   Úmagic_number_length©r   r   r   Úint)r   r   s   "€r   r   Ú%MagicNumberBaseExtractor.__annotate__G   s$   ø€ ÷ /ñ /¡¡d©C iÕ 0ð /Ásñ /r   c                óŠ   € \        V R 4      ;_uu_ 4       pVP                  V4      uuRRR4       #   + '       g   i     R# ; i)ÚrbN)ÚopenÚread)r   ra   Úfs   && r   Úread_magic_numberÚ*MagicNumberBaseExtractor.read_magic_numberF   s-   € ä�$˜×Ô Ø—6‘6Ð-Ó.÷ ××Óús	   •1±A	c                óB   <€ V ^8„  d   QhRS[ S[S[3,          RS[RS[/# ©r   r   Úmagic_numberr'   ©r   r   r   Úbytesr4   )r   r   s   "€r   r   rd   L   s1   ø€ ÷ hñ h¡%©©c¨	Õ"2ð hÁ%ð hÑRVñ hr   c                ó0  a€ S'       g/   \        R  V P                   4       4      p V P                  W4      o\        ;QJ d)    V3R lV P                   4       F  '       g   K   R# 	  R# ! V3R lV P                   4       4      #   \         d     R# i ; i)c              3   ó8   "  € T F  p\        V4      x € K  	  R # 5ir   )Úlen)Ú.0Úcls_magic_numbers   & r   Ú	<genexpr>Ú:MagicNumberBaseExtractor.is_extractable.<locals>.<genexpr>N   s   é € Ð%fÑTeÐ@P¤cÐ*:×&;Ð&;ÓTeùs   ‚Fc              3   óF   <"  € T F  pSP                  V4      x € K  	  R # 5ir   )Ú
startswith)rt   ru   rn   s   & €r   rv   rw   S   s#   øé € ÐgÑUfÐAQ�<×*Ñ*Ð+;×<Ð<ÓUfùs   ƒ!T)ÚmaxÚmagic_numbersrj   ÚOSErrorÚany)rR   r   rn   ra   s   &&f r   rT   Ú'MagicNumberBaseExtractor.is_extractableK   s€   ø€ çÜ"%Ñ%fÐTW×TeÒTeÓ%fÓ"fÐðØ"×4Ñ4°TÓO�÷ ‹sÔgÐUX×UfÒUfÓg�sŒsÐgŠsÐgˆsÔgÐUX×UfÒUfÓgÓgÐgøô ô Úðús   §B ÂBÂBc                ó6   <€ V ^8„  d   Qh/ S[ S[,          ;R&   # )r   r{   )Úlistrp   )r   r   s   "€r   r   rd   C   s   ø‡ ‚ Ù™•;Ñ#ò r   rP   N©r   )rC   rD   rE   rF   r{   r\   rj   r[   rT   Ú__annotate_func__rG   rH   rI   s   @r   r^   r^   C   s?   ø‡ € Ø!#€Mà÷/ó ð/ð ÷hñ hó ðh÷ ƒ r   r^   c                   ót   a € ] tR t^Vt o ]V 3R lR l4       t]V 3R lR l4       t]V 3R lR l4       tRt	V t
R# )	ÚTarExtractorc                ó<   <€ V ^8„  d   QhRS[ S[S[3,          RS[/# r&   rM   )r   r   s   "€r   r   ÚTarExtractor.__annotate__X   s$   ø€ ÷ (ñ (¡%©©c¨	Õ"2ð (Áñ (r   c                ó.   € \         P                  ! V4      # r   )ÚtarfileÚ
is_tarfilerQ   s   &&,r   rT   ÚTarExtractor.is_extractableW   s   € ä×!Ò! $Ó'Ð'r   c                óP   <€ V ^8„  d   QhRS[ P                  RS[S[S[3,          /# ©r   Úmembersr1   )rˆ   ÚTarFiler   r   r   )r   r   s   "€r   r   r†   \   s(   ø€ ÷ !ñ !™WŸ_™_ð !¹5ÁÁsÀÕ;Kñ !r   c              #  ó>  aa"  € R R loR V3R lloR VV3R llpS! V4      pV  Fï  pS! VP                   V4      '       d&   \        P                  RVP                    R24       KA  VP                  4       '       d@   V! WC4      '       d2   \        P                  RVP                    R	VP                   24       K–  VP                  4       '       d@   V! WC4      '       d2   \        P                  RVP                    R
VP                   24       Kë  Vx € Kñ  	  R# 5i)a¨  
Fix for CVE-2007-4559
Desc:
    Directory traversal vulnerability in the (1) extract and (2) extractall functions in the tarfile
    module in Python allows user-assisted remote attackers to overwrite arbitrary files via a .. (dot dot)
    sequence in filenames in a TAR archive, a related issue to CVE-2001-1267.
See: https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2007-4559
From: https://stackoverflow.com/a/10077309
c                óR   € V ^8„  d   QhR\         \        \        3,          R\        /# r&   rX   )r   s   "r   r   Ú.TarExtractor.safemembers.<locals>.__annotate__g   ó#   € ÷ 	;ñ 	;œ5¤¤s Õ+ð 	;´ñ 	;r   c                 óz   € \         P                  P                  \         P                  P                  V 4      4      # r   ©r   r   Úrealpathr,   ©r   s   &r   ÚresolvedÚ*TarExtractor.safemembers.<locals>.resolvedg   ó$   € Ü—7‘7×#Ñ#¤B§G¡G§O¡O°DÓ$9Ó:Ð:r   c                ó<   € V ^8„  d   QhR\         R\         R\        /# ©r   r   Úbaser'   r3   )r   s   "r   r   r‘   j   ó&   € ÷ 	Kñ 	Kœ#ð 	K¤Sð 	K¬Tñ 	Kr   c                 óv   <€ S! \         P                  P                  W4      4      P                  V4      '       * # r   ©r   r   r   ry   ©r   rœ   r—   s   &&€r   ÚbadpathÚ)TarExtractor.safemembers.<locals>.badpathj   ó)   ø€ á¤§¡§¡¨TÓ 8Ó9×DÑDÀTÓJÔJÐJr   c                óP   € V ^8„  d   QhR\         P                  R\        R\        /# )r   Úinforœ   r'   )rˆ   ÚTarInfor   r4   )r   s   "r   r   r‘   n   s%   € ÷ 	4ñ 	4œ'Ÿ/™/ð 	4´ð 	4¼ñ 	4r   c                 óÆ   <€ S! \         P                  P                  V\         P                  P                  V P                  4      4      4      pS! V P
                  VR 7      # ©)rœ   )r   r   r   ÚdirnameÚnameÚlinkname©r¥   rœ   Útipr¡   r—   s   && €€r   ÚbadlinkÚ)TarExtractor.safemembers.<locals>.badlinkn   s>   ø€ áœ2Ÿ7™7Ÿ<™<¨¬b¯g©g¯o©o¸d¿i¹iÓ.HÓIÓJˆCÙ˜4Ÿ=™=¨sÔ3Ð3r   úExtraction of ú is blocked (illegal path)ú is blocked: Symlink to z is blocked: Hard link to N)rª   ÚloggerÚerrorÚissymr«   Úislnk©r�   r1   r®   rœ   Úfinfor¡   r—   s   &&   @@r   ÚsafemembersÚTarExtractor.safemembers[   sÝ   ùé € õ	;÷	Kð 	K÷	4ñ 	4ñ
 ˜Ó$ˆãˆEÙ�u—z‘z 4×(Ò(Ü—‘˜~¨e¯j©j¨\Ð9SÐTÖUØ—‘—’¡7¨5×#7Ò#7Ü—‘˜~¨e¯j©j¨\Ð9QÐRW×R`ÑR`ÐQaÐbÖcØ—‘—’¡7¨5×#7Ò#7Ü—‘˜~¨e¯j©j¨\Ð9SÐTY×TbÑTbÐScÐdÖeà”ó ùs   „A:DÁ?ADÃA	Dc                óV   <€ V ^8„  d   QhRS[ S[S[3,          RS[ S[S[3,          RR/# rW   rX   )r   r   s   "€r   r   r†   €   s5   ø€ ÷ ñ ™E¡$© )Õ,ð ¹5ÁÁsÀÕ;Kð ÐPTñ r   c                óÎ   € \         P                  ! VR R7       \        P                  ! V 4      pVP	                  V\
        P                  W!4      R7       VP                  4        R# )T©Úexist_ok©r�   N)r   Úmakedirsrˆ   rg   Ú
extractallr„   r¹   Úclose)r<   r1   Útar_files   && r   r?   ÚTarExtractor.extract   sF   € ä
�Š�K¨$Õ/Ü—<’< 
Ó+ˆØ×Ñ˜K´×1IÑ1IÈ(Ó1`ÐÔaØ�‰Ör   rP   N)rC   rD   rE   rF   r[   rT   r\   r¹   r?   rG   rH   rI   s   @r   r„   r„   V   s@   ø‡ € Ø÷(ó ð(ð ÷!ó ð!ðF ÷ó ör   r„   c                   óB   a € ] tR t^‡t o R.t]V 3R lR l4       tRtV tR# )ÚGzipExtractors   ‹c                óV   <€ V ^8„  d   QhRS[ S[S[3,          RS[ S[S[3,          RR/# rW   rX   )r   r   s   "€r   r   ÚGzipExtractor.__annotate__‹   s5   ø€ ÷ >ñ >™E¡$© )Õ,ð >¹5ÁÁsÀÕ;Kð >ÐPTñ >r   c           	     ó
  € \         P                  ! V R 4      ;_uu_ 4       p\        VR4      ;_uu_ 4       p\        P                  ! W#4       RRR4       RRR4       R#   + '       g   i     L; i  + '       g   i     R# ; i©rf   ÚwbN)Úgziprg   ÚshutilÚcopyfileobj)r<   r1   Ú	gzip_fileÚextracted_files   &&  r   r?   ÚGzipExtractor.extractŠ   sR   € ä�YŠY�z 4×(Ô(¨IÜ�k 4×(Ô(¨NÜ×"Ò" 9Ô=÷ )÷ )Ñ(ß(×(ú÷ )×(Ð(úó"    A1µA	ÁA1ÁA.Á)A1Á1B	rP   N©	rC   rD   rE   rF   r{   r\   r?   rG   rH   rI   s   @r   rÆ   rÆ   ‡   s   ø‡ € Ø �M€Mà÷>ó ö>r   rÆ   c                   óŒ   a a€ ] tR t^‘t o. ROt]R	V3R lV 3R lll4       t]V3R lR l4       t]V3R lR l4       t	Rt
VtV ;t# )
ÚZipExtractorc                óB   <€ V ^8„  d   QhRS[ S[S[3,          RS[RS[/# rm   ro   )r   r   s   "€r   r   ÚZipExtractor.__annotate__™   s,   ø€ ÷ "ñ "¡%©©c¨	Õ"2ð "Á%ð "ÑRVñ "r   c                ó¸  <€ \         SV `  WR 7      '       d   R#  ^ RIHpHpHpHpHpHpH	p	H
p
HpHp \        VR4      ;_uu_ 4       pV	! V4      pV'       dÕ   Wæ,          ^ 8X  d&   Wè,          ^ 8X  d   Wç,          ^ 8X  d    RRR4       R# Wä,          Wå,          8X  d�   VP                  Wç,          4       VP                  4       Wç,          8X  d^   Wè,          V
8¼  dQ   VP!                  V
4      p\#        V4      V
8X  d0   \$        P&                  ! WÏ4      pVV,          V8X  d    RRR4       R# RRR4       R#   + '       g   i     R# ; i  \(         d     R# i ; i)©rn   T)
Ú_CD_SIGNATUREÚ_ECD_DISK_NUMBERÚ_ECD_DISK_STARTÚ_ECD_ENTRIES_TOTALÚ_ECD_OFFSETÚ	_ECD_SIZEÚ_EndRecDataÚsizeCentralDirÚstringCentralDirÚstructCentralDirrf   NF)ÚsuperrT   ÚzipfilerÚ   rÛ   rÜ   rÝ   rÞ   rß   rà   rá   râ   rã   rg   ÚseekÚtellrh   rs   ÚstructÚunpackÚ	Exception)rR   r   rn   rÚ   rÛ   rÜ   rÝ   rÞ   rß   rà   rá   râ   rã   ÚfpÚendrecÚdataÚcentdirÚ	__class__s   &&&              €r   rT   ÚZipExtractor.is_extractable˜   s  ø€ ä‰7Ñ! $Ð!×BÒBÙð	÷÷ ÷ ô �d˜D×!Ô! RÙ$ R›�ßØÕ1°QÔ6¸6Õ;LÐPQÔ;QÐV\ÕViÐmnÔVnØ#÷	 "Ñ!ð
  Õ1°VÕ5LÔLØŸ™ Õ 3Ô4ØŸ7™7›9¨Õ(;Ô;ÀÕ@QÐUcÔ@cØ#%§7¡7¨>Ó#:˜DÜ" 4›y¨NÔ:Ü*0¯-ª-Ð8HÓ*O Ø#*¨=Õ#9Ð=MÔ#MØ+/÷ "×!Ñ!ñ ÷ "Ö!ñ ûÜô 	Úð	úsB   ›,E
 Á9D6Â E
 Â
BD6Ä"E
 Ä,E
 Ä6E	ÅE
 ÅE
 Å
EÅEc                ó`   <€ V ^8„  d   QhRS[ S[P                  ,          RS[S[S[3,          /# rŒ   )r€   rå   ÚZipInfor   r   r   )r   r   s   "€r   r   r×   ¾   s-   ø€ ÷ ñ ™T¡'§/¡/Õ2ð ÁÁtÉSÀyÕAQñ r   c              #  óÔ   a"  € R R loR V3R llpS! V4      pV  FE  pV! VP                   V4      '       d&   \        P                  RVP                    R24       KA  Vx € KG  	  R# 5i)aä  
Fix for CVE-2007-4559
Desc:
    Directory traversal vulnerability in the (1) extract and (2) extractall functions in the tarfile
    module in Python allows user-assisted remote attackers to overwrite arbitrary files via a .. (dot dot)
    sequence in filenames in a TAR archive, a related issue to CVE-2001-1267.
See: https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2007-4559
From: https://stackoverflow.com/a/10077309

This additional mitigation is applied for zipfile as well.
c                óR   € V ^8„  d   QhR\         \        \        3,          R\        /# r&   rX   )r   s   "r   r   Ú.ZipExtractor.safemembers.<locals>.__annotate__Ë   r’   r   c                 óz   € \         P                  P                  \         P                  P                  V 4      4      # r   r”   r–   s   &r   r—   Ú*ZipExtractor.safemembers.<locals>.resolvedË   r™   r   c                ó<   € V ^8„  d   QhR\         R\         R\        /# r›   r3   )r   s   "r   r   rõ   Î   r�   r   c                 óv   <€ S! \         P                  P                  W4      4      P                  V4      '       * # r   rŸ   r    s   &&€r   r¡   Ú)ZipExtractor.safemembers.<locals>.badpathÎ   r£   r   r°   r±   N©Úfilenamer³   r´   )r�   r1   r¡   rœ   r¸   r—   s   &&   @r   r¹   ÚZipExtractor.safemembers½   s`   øé € õ	;÷	Kð 	Kñ ˜Ó$ˆãˆEÙ�u—~‘~ t×,Ò,Ü—‘˜~¨e¯n©nÐ-=Ð=WÐXÖYð
 ”ó ùs   ƒA%A(c                óV   <€ V ^8„  d   QhRS[ S[S[3,          RS[ S[S[3,          RR/# rW   rX   )r   r   s   "€r   r   r×   Þ   s5   ø€ ÷ ñ ™E¡$© )Õ,ð ¹5ÁÁsÀÕ;Kð ÐPTñ r   c           	     ó0  € \         P                  ! VR R7       \        P                  ! V R4      ;_uu_ 4       pVP	                  V\
        P                  VP                  V4      R7       VP                  4        RRR4       R#   + '       g   i     R# ; i)Tr½   Úrr¿   N)	r   rÀ   rå   ÚZipFilerÁ   rÕ   r¹   ÚfilelistrÂ   )r<   r1   Úzip_files   && r   r?   ÚZipExtractor.extractÝ   sc   € ä
�Š�K¨$Õ/Ü�_Š_˜Z¨×-Ô-°Ø×Ñ ´\×5MÑ5MÈh×N_ÑN_ÐalÓ5mÐÔnØ�N‰NÔ÷ .×-×-Ò-ús   ¸ABÂB	rP   )s   PKs   PKs   PKr�   )rC   rD   rE   rF   r{   r[   rT   r\   r¹   r?   rG   rH   Ú__classcell__)rï   r   s   @@r   rÕ   rÕ   ‘   sS   ù‡ € ò€Mð ÷"ô "ó ð"ðH ÷ó ðð> ÷ó ÷ð r   rÕ   c                   óB   a € ] tR t^åt o R.t]V 3R lR l4       tRtV tR# )ÚXzExtractors   ý7zXZ c                óV   <€ V ^8„  d   QhRS[ S[S[3,          RS[ S[S[3,          RR/# rW   rX   )r   r   s   "€r   r   ÚXzExtractor.__annotate__é   ó:   ø€ ÷ Dñ D™E¡$© )Õ,ð D¹5ÁÁsÀÕ;Kð DÐPTñ Dr   c           	     ó  € \         P                  ! V 4      ;_uu_ 4       p\        VR 4      ;_uu_ 4       p\        P                  ! W#4       RRR4       RRR4       R#   + '       g   i     L; i  + '       g   i     R# ; i)rË   N)Úlzmarg   rÍ   rÎ   ©r<   r1   Úcompressed_filerÐ   s   &&  r   r?   ÚXzExtractor.extractè   sP   € ä�YŠY�z×"Ô" oÜ�k 4×(Ô(¨NÜ×"Ò" ?ÔC÷ )÷ #Ñ"ß(×(ú÷ #×"Ð"ús"   ŸA0´A	ÁA0ÁA-Á(A0Á0B	rP   NrÓ   rI   s   @r   r  r  å   s!   ø‡ € Ø0Ð1€Mà÷Dó öDr   r  c                   ó`   a € ] tR t^ït o RR.t]V 3R lR l4       t]V 3R lR l4       tRtV t	R# )	ÚRarExtractors   Rar! s   Rar! c                óJ   <€ V ^8„  d   QhRS[ R,          RS[S[S[3,          /# )r   r�   úrarfile.RarInfor1   ©r€   r   r   r   )r   r   s   "€r   r   ÚRarExtractor.__annotate__ó   s*   ø€ ÷ "ñ "™TÐ"3Õ4ð "Á5ÉÉsÈÕCSñ "r   c              #  ó”  aa"  € R R loR V3R lloR VV3R llpS! V4      pV  Fš  pS! VP                   V4      '       d&   \        P                  RVP                    R24       KA  VP                  4       '       d@   V! WC4      '       d2   \        P                  RVP                    R	VP                   24       K–  Vx € Kœ  	  R
# 5i)aä  
Fix for CVE-2007-4559
Desc:
    Directory traversal vulnerability in the (1) extract and (2) extractall functions in the tarfile
    module in Python allows user-assisted remote attackers to overwrite arbitrary files via a .. (dot dot)
    sequence in filenames in a TAR archive, a related issue to CVE-2001-1267.
See: https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2007-4559
From: https://stackoverflow.com/a/10077309

This additional mitigation is applied for rarfile as well.
c                óR   € V ^8„  d   QhR\         \        \        3,          R\        /# r&   rX   )r   s   "r   r   Ú.RarExtractor.safemembers.<locals>.__annotate__   r’   r   c                 óz   € \         P                  P                  \         P                  P                  V 4      4      # r   r”   r–   s   &r   r—   Ú*RarExtractor.safemembers.<locals>.resolved   r™   r   c                ó<   € V ^8„  d   QhR\         R\         R\        /# r›   r3   )r   s   "r   r   r    r�   r   c                 óv   <€ S! \         P                  P                  W4      4      P                  V4      '       * # r   rŸ   r    s   &&€r   r¡   Ú)RarExtractor.safemembers.<locals>.badpath  r£   r   c                ó4   € V ^8„  d   QhRRR\         R\        /# )r   r¥   r  rœ   r'   r3   )r   s   "r   r   r    s"   € ÷ 	0ñ 	0Ð+ð 	0´3ð 	0¼4ñ 	0r   c                 óÎ   <€ S! \         P                  P                  V\         P                  P                  V P                  4      4      4      pV P
                  w  r4pS! WRR 7      # r¨   )r   r   r   r©   rü   Ú
file_redir)r¥   rœ   r­   Ú
redir_typeÚredir_flagsÚ	link_namer¡   r—   s   &&    €€r   r®   Ú)RarExtractor.safemembers.<locals>.badlink  sF   ø€ áœ2Ÿ7™7Ÿ<™<¨¬b¯g©g¯o©o¸d¿m¹mÓ.LÓMÓNˆCØ15·±Ñ.ˆJ YÙ˜9Ô/Ð/r   r°   r±   r²   N)rü   r³   r´   Ú
is_symlinkr   r·   s   &&   @@r   r¹   ÚRarExtractor.safemembersò   s¨   ùé € õ	;÷	Kð 	K÷	0ñ 	0ñ ˜Ó$ˆãˆEÙ�u—~‘~ t×,Ò,Ü—‘˜~¨e¯n©nÐ-=Ð=WÐXÖYØ×!Ñ!×#Ò#©°×(<Ò(<Ü—‘˜~¨e¯n©nÐ-=Ð=UÐV[×VfÑVfÐUgÐhÖià”ó ùs   „A:CÁ?A	Cc                óV   <€ V ^8„  d   QhRS[ S[S[3,          RS[ S[S[3,          RR/# rW   rX   )r   r   s   "€r   r   r    s5   ø€ ÷ ñ ™E¡$© )Õ,ð ¹5ÁÁsÀÕ;Kð ÐPTñ r   c                ó.  € \         P                  '       g   \        R 4      h^ RIp\        P
                  ! VRR7       VP                  ! V 4      pVP                  V\        P                  VP                  4       V4      R7       VP                  4        R# )zPlease pip install rarfileNTr½   r¿   )r	   ÚRARFILE_AVAILABLEÚImportErrorÚrarfiler   rÀ   ÚRarFilerÁ   r  r¹   ÚinfolistrÂ   )r<   r1   r+  Úrfs   &&  r   r?   ÚRarExtractor.extract  sf   € ä×'×'Ð'ÜÐ:Ó;Ð;Ûä
�Š�K¨$Õ/Ø�_Š_˜ZÓ(ˆØ
�‰�k¬<×+CÑ+CÀBÇKÁKÃMÐS^Ó+_ˆÔ`Ø
�‰Ž
r   rP   N©
rC   rD   rE   rF   r{   r\   r¹   r?   rG   rH   rI   s   @r   r  r  ï   s7   ø‡ € Ø(Ð*AÐB€Mà÷"ó ð"ðH ÷ó ör   r  c                   óB   a € ] tR tRt o R.t]V 3R lR l4       tRtV tR# )ÚZstdExtractori#  s   (µ/ýc                óV   <€ V ^8„  d   QhRS[ S[S[3,          RS[ S[S[3,          RR/# rW   rX   )r   r   s   "€r   r   ÚZstdExtractor.__annotate__'  s5   ø€ ÷ 'ñ '™E¡$© )Õ,ð '¹5ÁÁsÀÕ;Kð 'ÐPTñ 'r   c           	     óT  € \         P                  '       g   \        R 4      h^ RIpVP	                  4       p\        V R4      ;_uu_ 4       p\        VR4      ;_uu_ 4       pVP                  WE4       RRR4       RRR4       R#   + '       g   i     L; i  + '       g   i     R# ; i)zPlease pip install zstandardNrf   rË   )r	   ÚZSTANDARD_AVAILABLEr*  Ú	zstandardÚZstdDecompressorrg   Úcopy_stream)r<   r1   ÚzstdÚdctxÚifhÚofhs   &&    r   r?   ÚZstdExtractor.extract&  ss   € ä×)×)Ð)ÜÐ<Ó=Ð=Û à×$Ñ$Ó&ˆÜ�*˜d×#Ô# s¬D°¸d×,CÔ,CÀsØ×Ñ˜SÔ&÷ -D×#Ñ#×,C×,Cú×#×#Ð#ús$   Á
BÁB	Á1BÂBÂBÂB'	rP   NrÓ   rI   s   @r   r2  r2  #  s   ø‡ € Ø(Ð)€Mà÷'ó ö'r   r2  c                   óB   a € ] tR tRt o R.t]V 3R lR l4       tRtV tR# )ÚBzip2Extractori1  s   BZhc                óV   <€ V ^8„  d   QhRS[ S[S[3,          RS[ S[S[3,          RR/# rW   rX   )r   r   s   "€r   r   ÚBzip2Extractor.__annotate__5  r
  r   c           	     ó
  € \         P                  ! V R 4      ;_uu_ 4       p\        VR4      ;_uu_ 4       p\        P                  ! W#4       RRR4       RRR4       R#   + '       g   i     L; i  + '       g   i     R# ; irÊ   )Úbz2rg   rÍ   rÎ   r  s   &&  r   r?   ÚBzip2Extractor.extract4  sR   € ä�XŠX�j $×'Ô'¨?Ü�k 4×(Ô(¨NÜ×"Ò" ?ÔC÷ )÷ (Ñ'ß(×(ú÷ (×'Ð'úrÒ   rP   NrÓ   rI   s   @r   r@  r@  1  s!   ø‡ € Ø$Ð%€Mà÷Dó öDr   r@  c                   ó^   a € ] tR tRt o R.t]V 3R lR l4       t]V 3R lR l4       tRtV t	R# )	ÚSevenZipExtractori;  s   7z¼¯'c                óJ   <€ V ^8„  d   QhRS[ R,          RS[S[S[3,          /# )r   r�   úpy7zr.FileInfor1   r  )r   r   s   "€r   r   ÚSevenZipExtractor.__annotate__?  s*   ø€ ÷ "ñ "™TÐ"2Õ3ð "Á%ÉÉcÈ	ÕBRñ "r   c              #  óê   aa"  € R R loR V3R lloR VV3R llpS! V4      pV  FE  pS! VP                   V4      '       d&   \        P                  RVP                    R24       KA  Vx € KG  	  R	# 5i)
aâ  
Fix for CVE-2007-4559
Desc:
    Directory traversal vulnerability in the (1) extract and (2) extractall functions in the tarfile
    module in Python allows user-assisted remote attackers to overwrite arbitrary files via a .. (dot dot)
    sequence in filenames in a TAR archive, a related issue to CVE-2001-1267.
See: https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2007-4559
From: https://stackoverflow.com/a/10077309

This additional mitigation is applied for py7zr as well.
c                óR   € V ^8„  d   QhR\         \        \        3,          R\        /# r&   rX   )r   s   "r   r   Ú3SevenZipExtractor.safemembers.<locals>.__annotate__L  r’   r   c                 óz   € \         P                  P                  \         P                  P                  V 4      4      # r   r”   r–   s   &r   r—   Ú/SevenZipExtractor.safemembers.<locals>.resolvedL  r™   r   c                ó<   € V ^8„  d   QhR\         R\         R\        /# r›   r3   )r   s   "r   r   rM  O  r�   r   c                 óv   <€ S! \         P                  P                  W4      4      P                  V4      '       * # r   rŸ   r    s   &&€r   r¡   Ú.SevenZipExtractor.safemembers.<locals>.badpathO  r£   r   c                ó4   € V ^8„  d   QhRRR\         R\        /# )r   r¥   rI  rœ   r'   r3   )r   s   "r   r   rM  S  s'   € ÷ 	Fñ 	FÐ*ð 	F´#ð 	F¼$ñ 	Fr   c                 ó   <€ S! \         P                  P                  V\         P                  P                  V P                  4      4      4      pS! \         P                  P                  V P                  4      VR 7      # r¨   )r   r   r   r©   rü   Úbasenamer¬   s   && €€r   r®   Ú.SevenZipExtractor.safemembers.<locals>.badlinkS  sM   ø€ áœ2Ÿ7™7Ÿ<™<¨¬b¯g©g¯o©o¸d¿m¹mÓ.LÓMÓNˆCÙœ2Ÿ7™7×+Ñ+¨D¯M©MÓ:ÀÔEÐEr   r°   r±   Nrû   r·   s   &&   @@r   r¹   ÚSevenZipExtractor.safemembers>  sl   ùé € õ	;÷	Kð 	K÷	Fñ 	Fñ
 ˜Ó$ˆãˆEÙ�u—~‘~ t×,Ò,Ü—‘˜~¨e¯n©nÐ-=Ð=WÐXÖYð
 ”ó ùs   „A/A3c                óV   <€ V ^8„  d   QhRS[ S[S[3,          RS[ S[S[3,          RR/# rW   rX   )r   r   s   "€r   r   rJ  d  s5   ø€ ÷ :ñ :™E¡$© )Õ,ð :¹5ÁÁsÀÕ;Kð :ÐPTñ :r   c                ó–  € \         P                  '       g   \        R 4      h^ RIp\        P
                  ! VRR7       VP                  ! V R4      ;_uu_ 4       p\        P                  VP                  4       V4       Uu. uF  qDP                  NK  	  ppVP                  WR7       RRR4       R# u upi   + '       g   i     R# ; i)zPlease pip install py7zrNTr½   r   )Útargets)r	   ÚPY7ZR_AVAILABLEr*  Úpy7zrr   rÀ   ÚSevenZipFilerG  r¹   r€   rü   r?   )r<   r1   r\  Úarchiver¸   rZ  s   &&    r   r?   ÚSevenZipExtractor.extractc  s•   € ä×%×%Ð%ÜÐ8Ó9Ð9Ûä
�Š�K¨$Õ/Ø×Ò 
¨C×0Ô0°GÜ3D×3PÑ3PÐQX×Q]ÑQ]ÓQ_ÐalÔ3mÓnÑ3m¨%—~”~Ñ3mˆGÐnØ�O‰O˜KˆOÔ9÷ 1Ñ0ùÚn÷ 1×0Ð0ús   Á'B7Â B2ÂB7Â2B7Â7C	rP   Nr0  rI   s   @r   rG  rG  ;  s4   ø‡ € Ø0Ð1€Mà÷"ó ð"ðH ÷:ó ö:r   rG  c                   óB   a € ] tR tRt o R.t]V 3R lR l4       tRtV tR# )ÚLz4Extractorio  s   "Mc                óV   <€ V ^8„  d   QhRS[ S[S[3,          RS[ S[S[3,          RR/# rW   rX   )r   r   s   "€r   r   ÚLz4Extractor.__annotate__s  s:   ø€ ÷ Dñ D™E¡$© )Õ,ð D¹5ÁÁsÀÕ;Kð DÐPTñ Dr   c           	     ó^  € \         P                  '       g   \        R 4      h^ RIpVP                  P                  V R4      ;_uu_ 4       p\        VR4      ;_uu_ 4       p\        P                  ! W44       RRR4       RRR4       R#   + '       g   i     L; i  + '       g   i     R# ; i)zPlease pip install lz4Nrf   rË   )r	   ÚLZ4_AVAILABLEr*  Ú	lz4.frameÚframerg   rÍ   rÎ   )r<   r1   Úlz4r  rÐ   s   &&   r   r?   ÚLz4Extractor.extractr  sq   € ä×#×#Ð#ÜÐ6Ó7Ð7Ûà�Y‰Y�^‰^˜J¨×-Ô-°Ü�k 4×(Ô(¨NÜ×"Ò" ?ÔC÷ )÷ .Ñ-ß(×(ú÷ .×-Ð-ús$   Á
BÁB	Á6BÂBÂBÂB,	rP   NrÓ   rI   s   @r   ra  ra  o  s!   ø‡ € Ø(Ð)€Mà÷Dó öDr   ra  c                   óØ   a € ] tR tRt o R]R]R]R]R]R]	R]
R	]R
]/	t]R 4       t]V 3R lR l4       t]RV 3R lR ll4       t]V 3R lR l4       t]V 3R lR l4       tV 3R ltRtV tR# )r    i}  ÚtarrÌ   ÚzipÚxzÚrarr:  rD  Ú7zrh  c                óV   € \        R  V P                  P                  4        4       4      # )c              3   óŽ   "  € T F;  p\        V\        4      '       g   K  VP                   F  p\        V4      x € K  	  K=  	  R # 5ir   )Ú
issubclassr^   r{   rs   )rt   r!   Úextractor_magic_numbers   &  r   rv   Ú9Extractor._get_magic_number_max_length.<locals>.<genexpr>�  sI   é € ð 
á4�	Ü˜)Ô%=×>ô (ð +4×*AÔ*AÐ&ô Ð&×'Ð'ñ +Bñ (Û4ùs
   ‚AŸ&A)rz   Ú
extractorsÚvalues)rR   s   &r   Ú_get_magic_number_max_lengthÚ&Extractor._get_magic_number_max_length‹  s)   € äñ 
à Ÿ^™^×2Ñ2Ô4ó
ó 
ð 	
r   c                ó<   <€ V ^8„  d   QhRS[ S[S[3,          RS[/# r`   rb   )r   r   s   "€r   r   ÚExtractor.__annotate__•  s$   ø€ ÷ ñ ¡¡t©S yÕ!1ð Éñ r   c                óT   €  \         P                  WR 7      #   \         d     R# i ; i))ra   r   )r^   rj   r|   )r   ra   s   &&r   Ú_read_magic_numberÚExtractor._read_magic_number”  s-   € ð	Ü+×=Ñ=¸dÐ=ÓlÐløÜô 	Úð	ús   ‚ ˜'¦'c                óB   <€ V ^8„  d   QhRS[ S[S[3,          RS[RS[/# )r   r   Úreturn_extractorr'   rM   )r   r   s   "€r   r   rz  œ  s1   ø€ ÷ 	@ñ 	@¡%©©c¨	Õ"2ð 	@Ádð 	@ÑW[ñ 	@r   c                óÂ   € \         P                  ! R \        R7       V P                  V4      pV'       d    V'       g   R# RV P                  V,          3# V'       g   R# R# )z{Method 'is_extractable' was deprecated in version 2.4.0 and will be removed in 3.0.0. Use 'infer_extractor_format' instead.)ÚcategoryTF)FN)ÚwarningsÚwarnÚFutureWarningr>   ru  )rR   r   r  r@   s   &&& r   rT   ÚExtractor.is_extractable›  sU   € ä�Šð4ä"õ	
ð
 ×5Ñ5°dÓ;Ðßß/�4Ð]°d¸C¿N¹NÐK[Õ<\Ð5]Ð]ß,ˆuÐ?°-Ð?r   c                óL   <€ V ^8„  d   QhRS[ S[S[3,          RS[S[,          /# r&   )r   r   r   r   )r   r   s   "€r   r   rz  ¨  s(   ø€ ÷ (ñ (©%±±c°	Õ*:ð (¹xÉ½}ñ (r   c                óÆ   € V P                  4       pV P                  W4      pV P                  P                  4        F!  w  rEVP	                  WR 7      '       g   K  Vu # 	  R# )rÙ   N)rw  r|  ru  ÚitemsrT   )rR   r   Úmagic_number_max_lengthrn   r@   r!   s   &&    r   r>   Ú Extractor.infer_extractor_format§  sW   € à"%×"BÑ"BÓ"DÐØ×-Ñ-¨dÓLˆØ+.¯>©>×+?Ñ+?Ö+AÑ'ÐØ×'Ñ'¨Ð'×HÔHØ'Ò'ó ,Br   c                ó\   <€ V ^8„  d   QhRS[ S[S[3,          RS[ S[S[3,          RS[RR/# )r   r<   r1   r@   r'   NrX   )r   r   s   "€r   r   rz  °  sE   ø€ ÷ >ñ >á™$¡˜)Õ$ð>ñ ™4¡˜9Õ%ð>ñ ð	>ð
 
ñ>r   c                óŽ  € \         P                  ! \         P                  P                  V4      R R7       \	        \        V4      P                  R4      4      p\        V4      ;_uu_ 4        \        P                  ! VR R7       V P                  V,          pVP                  W4      uuRRR4       #   + '       g   i     R# ; i)Tr½   z.lock)Úignore_errorsN)r   rÀ   r   r©   r   r   Úwith_suffixr
   rÍ   Úrmtreeru  r?   )rR   r<   r1   r@   Ú	lock_pathr!   s   &&&&  r   r?   ÚExtractor.extract¯  s~   € ô 	�Š”B—G‘G—O‘O KÓ0¸4Õ@äœ˜[Ó)×5Ñ5°gÓ>Ó?ˆ	Ü�i× Õ Ü�MŠM˜+°TÕ:ØŸ™Ð'7Õ8ˆIØ×$Ñ$ ZÓ=÷ !× × Ó ús   Á,<B3Â3C	c                óL   <€ V ^8„  d   Qh/ S[ S[S[S[,          3,          ;R&   # )r   ru  )Údictr   ÚtyperK   )r   r   s   "€r   r   rz  }  s!   ø‡ ‚ á‘S™$™}Õ-Ð-Õ.ñ 
ò r   rP   NrB   )rC   rD   rE   rF   r„   rÆ   rÕ   r  r  r2  r@  rG  ra  ru  r[   rw  r\   r|  rT   r>   r?   r‚   rG   rH   rI   s   @r   r    r    }  s°   ø‡ € ð 	ˆ|Ø�Øˆ|ØˆkØˆ|Ø�Øˆ~ØÐØˆ|ð
2€Jð ñ
ó ð
ð ÷ó ðð ÷	@ñ 	@ó ð	@ð ÷(ó ð(ð ÷>ó ð>÷g ƒ r   r    ))rD  rÌ   r  r   rÍ   rè   rˆ   r‚  rå   Úabcr   r   Úpathlibr   Útypingr   r   r   Ú r	   Ú	_filelockr
   Úloggingr   r\  r+  rC   r³   r   rK   r^   r„   rÆ   rÕ   r  r  r2  r@  rG  ra  r    rP   r   r   Ú<module>r›     sþ   ðÛ 
Û Û Û 	Û Û Û Û Û ß #Ý ß 1Ñ 1å Ý Ý ÷ ÛÛñ 
�HÓ	€÷ñ ô<Z�Cô Zôh˜}¨cô hô&.�=ô .ôb>Ð,ô >ôQÐ+ô QôhDÐ*ô Dô1Ð+ô 1ôh'Ð,ô 'ôDÐ-ô Dô1:Ð0ô 1:ôhDÐ+ô D÷?>ó ?>r   