§
    dŠtjº  ã                   ó2  — d dl mZ d dlmZmZmZmZmZmZm	Z	 d dl
Z
d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ  eeeeee¦  «        Z ej        dej        egeej        ¦  «        Z eed	¦  «        Zed
d
ej        fd„¦   «         Z G d„ de¦  «        ZdS )é    )Úcontextmanager)Ú	CFUNCTYPEÚPOINTERÚc_intÚ
c_longlongÚc_void_pÚcastÚcreate_string_bufferN)Ú
open_files)ÚAbstractArchiveFileSystem)Ú
MemoryFile)ÚDEFAULT_BLOCK_SIZEÚread_set_seek_callbackÚ
NO_OPEN_CBÚallc              #   óž  ‡ ‡‡K  — t          |¦  «        Št          ‰t          ¦  «        Šˆˆˆ fd„}ˆ fd„}t          j        |¦  «        }t          |¦  «        }t          rt          j        }t          j        }	nRt          j
                             t          j        ¦  «        }t          j
                             t          j        ¦  «        }	t          j
                             ||¦  «        5 }
t          |
|¦  «         t          j        |
d|||	¦  «         t          j
                             |
¦  «        V — ddd¦  «         dS # 1 swxY w Y   dS )z†Read an archive from a seekable file-like object.

    The `file` object must support the standard `readinto` and 'seek' methods.
    c                 ó€   •— ‰                      ‰¦  «        }t          |t          t          ¦  «        ¦  «        }‰|d<   |S )Nr   )Úreadintor	   r   r   )Ú	archive_pÚcontextÚptrptrÚlengthÚbufÚbuf_pÚfiles       €€€ú_/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/fsspec/implementations/libarchive.pyÚ	read_funcz custom_reader.<locals>.read_func*   s9   ø€ à—’˜sÑ#Ô#ˆå�f�g¥hÑ/Ô/Ñ0Ô0ˆØˆˆq‰	àˆó    c                 óX   •— ‰                      ||¦  «         ‰                     ¦   «         S )N)ÚseekÚtell)r   r   ÚoffsetÚwhencer   s       €r   Ú	seek_funcz custom_reader.<locals>.seek_func3   s%   ø€ Ø�	Š	�&˜&Ñ!Ô!Ð!à�yŠy‰{Œ{Ðr   N)r
   r	   r   ÚffiÚREAD_CALLBACKÚSEEK_CALLBACKÚnew_apir   ÚNO_CLOSE_CBÚ
libarchiveÚreadÚOPEN_CALLBACKÚVOID_CBÚCLOSE_CALLBACKÚnew_archive_readr   Ú	read_openÚArchiveRead)r   Úformat_nameÚfilter_nameÚ
block_sizer   r$   Úread_cbÚseek_cbÚopen_cbÚclose_cbr   r   r   s   `          @@r   Úcustom_readerr9   !   s…  øøøè è € õ ˜zÑ
*Ô
*€CÝ�•hÑÔ€Eðð ð ð ð ð ð ðð ð ð ð õ
 Ô 	Ñ*Ô*€GÝ˜IÑ&Ô&€Gåð ?Ý”.ˆÝ”?ˆˆå”/×/Ò/µ´Ñ<Ô<ˆÝ”?×1Ò1µ#´+Ñ>Ô>ˆå	Œ×	)Ò	)¨+°{Ñ	CÔ	Cð 5ÀyÝ˜y¨'Ñ2Ô2Ð2ÝŒ�i  w°¸ÑBÔBÐBÝŒo×)Ò)¨)Ñ4Ô4Ð4Ð4Ð4ð5ð 5ð 5ñ 5ô 5ð 5ð 5ð 5ð 5ð 5ð 5ð 5øøøð 5ð 5ð 5ð 5ð 5ð 5s   Ã+A
EÅEÅ	Ec                   ó€   ‡ — e Zd ZdZdZdZdZddddefˆ fd„	Ze	d„ ¦   «         Z
eˆ fd	„¦   «         Zd
„ Z	 	 	 	 dd„Zˆ xZS )ÚLibArchiveFileSystemay  Compressed archives as a file-system (read-only)

    Supports the following formats:
    tar, pax , cpio, ISO9660, zip, mtree, shar, ar, raw, xar, lha/lzh, rar
    Microsoft CAB, 7-Zip, WARC

    See the libarchive documentation for further restrictions.
    https://www.libarchive.org/

    Keeps file object open while instance lives. It only works in seekable
    file-like objects. In case the filesystem does not support this kind of
    file object, it is recommended to cache locally.

    This class is pickleable, but not necessarily thread-safe (depends on the
    platform). See libarchive documentation for details.
    Ú r*   FÚrNc                 óp  •—  t          ¦   «         j        | fi |¤Ž |dk    rt          d¦  «        ‚t          |t          ¦  «        rBt          |fd|i|pi ¤Ž}t          |¦  «        dk    rt          d|› d|› d�¦  «        ‚|d         }|| _        |                     ¦   «         | _	        || _
        d	| _        d	S )
aB  
        Parameters
        ----------
        fo: str or file-like
            Contains ZIP, and must exist. If a str, will fetch file using
            :meth:`~fsspec.open_files`, which must return one file exactly.
        mode: str
            Currently, only 'r' accepted
        target_protocol: str (optional)
            If ``fo`` is a string, this value can be used to override the
            FS protocol inferred from a URL
        target_options: dict (optional)
            Kwargs passed when instantiating the target FS, if ``fo`` is
            a string.
        r=   z%Only read from archive files acceptedÚprotocolé   zPath "z(" did not resolve to exactly one file: "ú"r   N)ÚsuperÚ__init__Ú
ValueErrorÚ
isinstanceÚstrr   ÚlenÚofÚ	__enter__Úfor4   Ú	dir_cache)	ÚselfrJ   ÚmodeÚtarget_protocolÚtarget_optionsr4   ÚkwargsÚfilesÚ	__class__s	           €r   rC   zLibArchiveFileSystem.__init__^   sØ   ø€ ð0 	�‰ŒÔ˜Ð(Ð( Ð(Ð(Ð(Ø�3Š;ˆ;ÝÐDÑEÔEÐEÝ�b�#ÑÔð 	Ý˜rÐVÐV¨OÐVÀÐ@TÐRTÐVÐVˆEÝ�5‰zŒz˜QŠˆÝ ØQ˜RÐQÐQÈÐQÐQÐQñô ð ð �q”ˆBØˆŒØ—,’,‘.”.ˆŒØ$ˆŒØˆŒˆˆr   c              #   ó®   K  — | j                              d¦  «         t          | j         | j        ¬¦  «        5 }|V — d d d ¦  «         d S # 1 swxY w Y   d S )Nr   )r4   )rJ   r    r9   r4   )rL   Úarcs     r   Ú_open_archivez"LibArchiveFileSystem._open_archive…   s˜   è è € àŒ�Š�Q‰ŒˆÝ˜4œ7¨t¬Ð?Ñ?Ô?ð 	À3ØˆIˆIˆIð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð 	ð 	s   ¸A
Á
AÁAc                 ól   •— t          ¦   «                              |¦  «                             d¦  «        S )Nú/)rB   Ú_strip_protocolÚlstrip)ÚclsÚpathrR   s     €r   rX   z$LibArchiveFileSystem._strip_protocol‹   s+   ø€ õ ‰wŒw×&Ò& tÑ,Ô,×3Ò3°CÑ8Ô8Ð8r   c           
      óR  ‡‡— ddddddddœŠ| j         �d S i | _         g }|                      ¦   «         5 }|D ]¡Š‰j        s‰j        sŒ| j                              d	„ |                      t          ‰j        ¦  «        ¦  «        D ¦   «         ¦  «         ˆˆfd
„‰D ¦   «         }‰j        rdnd|d<   |                     ‰j        ¦  «         || j         |d         <   Œ¢	 d d d ¦  «         n# 1 swxY w Y   | j                              d„ |                      |¦  «        D ¦   «         ¦  «         d S )NÚpathnameÚsizeÚctimerM   ÚuidÚgidÚmtime)Únamer^   ÚcreatedrM   r`   ra   rb   c                 ó   — i | ]	}||d ddœ“Œ
S ©r   Ú	directory)rc   r^   Útype© ©Ú.0Údirnames     r   ú
<dictcomp>z2LibArchiveFileSystem._get_dirs.<locals>.<dictcomp>¦   s4   € ð ð ð à#ð  ¨'¸1ÀkÐ!RÐ!Rðð ð r   c                 ó>   •— i | ]}|t          ‰‰|         ¦  «        “ŒS ri   )Úgetattr)rk   ÚkeyÚentryÚfieldss     €€r   rm   z2LibArchiveFileSystem._get_dirs.<locals>.<dictcomp>«   s)   ø€ ÐHÐHÐH¸#�S�' %¨°¬Ñ5Ô5ÐHÐHÐHr   rg   r   rh   rc   c                 ó   — i | ]	}||d ddœ“Œ
S rf   ri   rj   s     r   rm   z2LibArchiveFileSystem._get_dirs.<locals>.<dictcomp>³   s4   € ð ð ð àð  '°1¸kÐJÐJðð ð r   )	rK   rU   ÚisdirÚisfileÚupdateÚ_all_dirnamesÚsetrc   Úappend)rL   Ú
list_namesrT   Úfrq   rr   s       @@r   Ú	_get_dirszLibArchiveFileSystem._get_dirs�   sÆ  øø€ àØØØØØØð
ð 
ˆð Œ>Ð%ØˆFàˆŒØˆ
Ø×ÒÑ!Ô!ð 	. SØð .ð .�Ø”{ð ¨5¬<ð àØ”×%Ò%ðð à'+×'9Ò'9½#¸e¼j¹/¼/Ñ'JÔ'Jðñ ô ñô ð ð IÐHÐHÐHÐHÀÐHÑHÔH�Ø+0¬;ÐB˜K˜K¸F��&‘	Ø×!Ò! %¤*Ñ-Ô-Ð-à,-�”˜q œyÑ)Ð)ð.ð	.ð 	.ð 	.ñ 	.ô 	.ð 	.ð 	.ð 	.ð 	.ð 	.ð 	.øøøð 	.ð 	.ð 	.ð 	.ð$ 	Œ×Òðð à#×1Ò1°*Ñ=Ô=ðñ ô ñ	
ô 	
ð 	
ð 	
ð 	
s   ³B%C%Ã%C)Ã,C)ÚrbTc                 óP  — |                       |¦  «        }|dk    rt          ‚d}|                      ¦   «         5 }|D ]B}	|	j        |k    rŒ|	j        dk    r n(|	                     |	j        ¦  «        D ]}
|
} nt          ‚ŒCd d d ¦  «         n# 1 swxY w Y   t          | ||¬¦  «        S )Nr}   r   r   )Úfsr[   Údata)rX   ÚNotImplementedErrorrU   r]   r^   Ú
get_blocksrD   r   )rL   r[   rM   r4   Ú
autocommitÚcache_optionsrP   r€   rT   rq   Úblocks              r   Ú_openzLibArchiveFileSystem._open¹   s	  € ð ×#Ò# DÑ)Ô)ˆØ�4Š<ˆ<Ý%Ð%àˆØ×ÒÑ!Ô!ð 	% SØð %ð %�Ø”> TÒ)Ð)Øà”: ’?�?à�Eà"×-Ò-¨e¬jÑ9Ô9ð %ð %�EØ �DØ�Eå$Ð$ð ð	%ð 	%ð 	%ñ 	%ô 	%ð 	%ð 	%ð 	%ð 	%ð 	%ð 	%øøøð 	%ð 	%ð 	%ð 	%õ ˜T¨°4Ð8Ñ8Ô8Ð8s   ¹ABÂBÂB)r}   NTN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__Úroot_markerr?   Úcachabler   rC   r   rU   ÚclassmethodrX   r|   r†   Ú__classcell__)rR   s   @r   r;   r;   H   sÜ   ø€ € € € € ðð ð" €KØ€HØ€Hð ØØØØ%ð%ð %ð %ð %ð %ð %ðN ðð ñ „^ðð
 ð9ð 9ð 9ð 9ñ „[ð9ð'
ð '
ð '
ðX ØØØð9ð 9ð 9ð 9ð 9ð 9ð 9ð 9r   r;   )Ú
contextlibr   Úctypesr   r   r   r   r   r	   r
   r*   Úlibarchive.ffir%   Úfsspecr   Úfsspec.archiver   Úfsspec.implementations.memoryr   Úfsspec.utilsr   r'   Úc_archive_pÚ	check_intr   Úhasattrr(   Ú	page_sizer9   r;   ri   r   r   ú<module>rš      s”  ðØ %Ð %Ð %Ð %Ð %Ð %ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð Ð Ð Ð Ø Ð Ð Ð Ð Ð à Ð Ð Ð Ð Ð Ø 4Ð 4Ð 4Ð 4Ð 4Ð 4Ø 4Ð 4Ð 4Ð 4Ð 4Ð 4Ø +Ð +Ð +Ð +Ð +Ð +ð �	˜* e¨X°zÀ5ÑIÔI€Ø ˜œØ˜sœ°Ð>ÀÀsÄ}ñô Ð ð ˆ'�#�|Ñ
$Ô
$€ð Ø$)°uÈÌð #5ð #5ð #5ñ „ð#5ðLM9ð M9ð M9ð M9ð M9Ð4ñ M9ô M9ð M9ð M9ð M9r   