§
           ã                   ó   — d 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mZ ej	        ej
        z   Z ee¦  «        Z ee¦  «        Zej        j        rej        rd„ Znd„ Zd„ Z G d„ d¦  «        Z G d	„ d
¦  «        Z G d„ d¦  «        Zd„ Zd„ ZdS )z8
PEP-302 and PEP-451 importers for frozen applications.
é    N)ÚArchiveReadErrorÚZlibArchiveReaderc                 óˆ   — t           j                             | |z  ¦  «         t           j                             d¦  «         d S )Nú
)ÚsysÚstderrÚwrite)ÚmsgÚas     ú(PyInstaller\loader\pyimod02_importers.pyÚtracer   &   s8   € ÝŒ
×Ò˜˜q™Ñ!Ô!Ð!ÝŒ
×Ò˜ÑÔÐÐÐó    c                 ó   — d S )N© )r
   r   s     r   r   r   +   s   € Øˆr   c                 óÞ   — ddl m} t          j        | ¦  «        j        } ||¦  «        }t          j        dd¬¦  «        }|                     |                      |d         ¦  «        ¦  «        S )a  
    Decode bytes representing source code and return the string. Universal newline support is used in the decoding.
    Based on CPython's implementation of the same functionality:
    https://github.com/python/cpython/blob/3.9/Lib/importlib/_bootstrap_external.py#L679-L688
    r   )Údetect_encodingNT)ÚdecoderÚ	translate)Útokenizer   ÚioÚBytesIOÚreadlineÚIncrementalNewlineDecoderÚdecode)Úsource_bytesr   Úsource_bytes_readlineÚencodingÚnewline_decoders        r   Ú_decode_sourcer   /   st   € ð )Ð(Ð(Ð(Ð(Ð(ÝœJ |Ñ4Ô4Ô=ÐØˆÐ4Ñ5Ô5€HÝÔ2¸4È4ÐPÑPÔP€OØ×!Ò! ,×"5Ò"5°h¸q´kÑ"BÔ"BÑCÔCÐCr   c                   ó   — e Zd ZdZd„ ZdS )ÚPyiFrozenImporterStatea  
    An object encapsulating extra information for PyiFrozenImporter, to be stored in `ModuleSpec.loader_state`. Having
    a custom type allows us to verify that module spec indeed contains the original loader state data, as set by
    `PyiFrozenImporter.find_spec`.
    c                 ó   — || _         d S )N)Úpyz_entry_name)ÚselfÚ
entry_names     r   Ú__init__zPyiFrozenImporterState.__init__C   s   € à(ˆÔÐÐr   N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r&   r   r   r   r!   r!   =   s-   € € € € € ðð ð
)ð )ð )ð )ð )r   r!   c                   ór   — e Zd ZdZd„ Zed„ ¦   «         Zd„ Zd„ Zd„ Z	d„ Z
d„ Zd	„ Zd
„ Zdd„Zd„ Zd„ Zd„ ZdS )ÚPyiFrozenImportera8  
    Load bytecode of Python modules from the executable created by PyInstaller.

    Python bytecode is zipped and appended to the executable.

    NOTE: PYZ format cannot be replaced by zipimport module.

    The problem is that we have no control over zipimport; for instance, it does not work if the zip file is embedded
    into a PKG that is appended to an executable, like we create in one-file mode.

    This used to be PEP-302 finder and loader class for the ``sys.meta_path`` hook. A PEP-302 finder requires method
    find_module() to return loader class with method load_module(). However, both of these methods were deprecated in
    python 3.4 by PEP-451 (see below). Therefore, this class now provides only optional extensions to the PEP-302
    importer protocol.

    This is also a PEP-451 finder and loader class for the ModuleSpec type import system. A PEP-451 finder requires
    method find_spec(), a PEP-451 loader requires methods exec_module(), load_module() and (optionally) create_module().
    All these methods are implemented in this one class.
    c                 ó¤  — t           j        D ]d}	 t          |d¬¦  «        | _        t	          d|¦  «         t           j                             |¦  «          n*# t          $ r Y ŒVt          $ r Y Œaw xY wt          d¦  «        ‚t          | j        j
                             ¦   «         ¦  «        | _
        t          j        ¦   «         | _        d| _        dS )zY
        Load, unzip and initialize the Zip archive bundled with the executable.
        T)Úcheck_pymagicz$# PyInstaller: PyiFrozenImporter(%s)zCannot load frozen modules.N)r   Úpathr   Ú_pyz_archiver   ÚremoveÚIOErrorr   ÚImportErrorÚsetÚtocÚkeysÚ_threadÚRLockÚ_lockÚ	_toc_tree)r$   Úpyz_filepaths     r   r&   zPyiFrozenImporter.__init__\   sá   € õ  œHð 	=ð 	=ˆLðå$5°lÐRVÐ$WÑ$WÔ$W�Ô!õ Ð<¸lÑKÔKÐKÝ”—’ Ñ-Ô-Ð-Ø�øÝð ð ð à�Ý#ð ð ð à�ðøøøõ
 Ð;Ñ<Ô<Ð<õ �tÔ(Ô,×1Ò1Ñ3Ô3Ñ4Ô4ˆŒõ
 ”]‘_”_ˆŒ
ØˆŒˆˆs   �AAÁ
A/Á#	A/Á.A/c                 ó’   — | j         5  | j        €|                      ¦   «         | _        | j        cd d d ¦  «         S # 1 swxY w Y   d S )N)r9   r:   Ú_build_pyz_prefix_tree)r$   s    r   Útoc_treezPyiFrozenImporter.toc_tree€   s�   € àŒZð 	"ð 	"ØŒ~ð ?Ø!%×!<Ò!<Ñ!>Ô!>�”Ø”>ð	"ð 	"ð 	"ð 	"ñ 	"ô 	"ð 	"ð 	"ð 	"ð 	"ð 	"ð 	"øøøð 	"ð 	"ð 	"ð 	"ð 	"ð 	"s   ˆ'<¼A ÁA c                 ó,  — t          ¦   «         }| j        D ]}}|                     d¦  «        }|}| j                             |¦  «        r|D ]}|                     |i ¦  «        }ŒŒO|d d…         D ]}|                     |i ¦  «        }Œd||d         <   Œ~|S )Nú.éÿÿÿÿÚ )Údictr5   Úsplitr0   Ú
is_packageÚ
setdefault)r$   Útreer%   Úname_componentsÚcurrentÚname_components         r   r=   z(PyiFrozenImporter._build_pyz_prefix_treeˆ   sÅ   € Ý‰vŒvˆØœ(ð 	2ð 	2ˆJØ(×.Ò.¨sÑ3Ô3ˆOØˆGØÔ ×+Ò+¨JÑ7Ô7ð 2à&5ð Eð E�NØ%×0Ò0°ÀÑDÔD�G�GðEð '6°c°r°cÔ&:ð Eð E�NØ%×0Ò0°ÀÑDÔD�G�GØ/1�˜¨Ô+Ñ,Ð,Øˆr   c                 ó¸   — || j         v r@	 | j                             |¦  «        S # t          $ r}t	          d|›�¦  «        |‚d }~ww xY wt	          d|›�¦  «        ‚)Nú'PyiFrozenImporter cannot handle module )r5   r0   Úis_pep420_namespace_packageÚ	Exceptionr3   )r$   ÚfullnameÚes      r   Ú_is_pep420_namespace_packagez.PyiFrozenImporter._is_pep420_namespace_package™   s…   € Ø�t”xÐð 	VðaØÔ(×DÒDÀXÑNÔNÐNøÝð að að aÝ!Ð"XÈHÐ"XÐ"XÑYÔYÐ_`Ð`øøøøðaøøøõ ÐTÈÐTÐTÑUÔUÐUó   ‹% ¥
A¯AÁAc                 ó¸   — || j         v r@	 | j                             |¦  «        S # t          $ r}t	          d|›�¦  «        |‚d }~ww xY wt	          d|›�¦  «        ‚)NrL   )r5   r0   rE   rN   r3   )r$   rO   rP   s      r   rE   zPyiFrozenImporter.is_package¤   s…   € Ø�t”xÐð 	VðaØÔ(×3Ò3°HÑ=Ô=Ð=øÝð að að aÝ!Ð"XÈHÐ"XÐ"XÑYÔYÐ_`Ð`øøøøðaøøøõ ÐTÈÐTÐTÑUÔUÐUrR   c                 ó¼   — 	 |dk    rt           j        d         j        S | j                             |¦  «        S # t
          $ r}t          d|›�¦  «        |‚d}~ww xY w)z|
        Get the code object associated with the module.

        ImportError should be raised if module not found.
        Ú__main__rL   N)r   ÚmodulesÚ_pyi_main_cor0   ÚextractrN   r3   )r$   rO   rP   s      r   Úget_codezPyiFrozenImporter.get_code­   s}   € ð
	]Ø˜:Ò%ð <õ ”{ :Ô.Ô;Ð;ð Ô$×,Ò,¨XÑ6Ô6Ð6øÝð 	]ð 	]ð 	]ÝÐTÈÐTÐTÑUÔUÐ[\Ð\øøøøð	]øøøs   ‚9 Ÿ9 ¹
AÁAÁAc                 ó´  — || j         v r¾|                      |¦  «        r|dz  }t          j                             t
          |                     dt          j        ¦  «        dz   ¦  «        }	 t          |d¦  «        5 }| 	                    ¦   «         }ddd¦  «         n# 1 swxY w Y   t          |¦  «        S # t          $ r Y nw xY wdS t          d|z   ¦  «        ‚)zò
        Method should return the source code for the module as a string.
        But frozen modules does not contain source code.

        Return None, unless the corresponding source file was explicitly collected to the filesystem.
        ú	.__init__r@   z.pyÚrbNzNo module named )r5   rE   Úosr/   ÚjoinÚ
SYS_PREFIXÚreplaceÚsepÚopenÚreadr   ÚFileNotFoundErrorr3   )r$   rO   ÚfilenameÚfpr   s        r   Ú
get_sourcezPyiFrozenImporter.get_source¿   s  € ð �t”xÐð 	=à�Š˜xÑ(Ô(ð (Ø˜KÑ'�Ý”w—|’|¥J°×0@Ò0@ÀÅbÄfÑ0MÔ0MÐPUÑ0UÑVÔVˆHðå˜( DÑ)Ô)ð -¨RØ#%§7¢7¡9¤9�Lð-ð -ð -ñ -ô -ð -ð -ð -ð -ð -ð -øøøð -ð -ð -ð -å% lÑ3Ô3Ð3øÝ$ð ð ð Ø�ðøøøà�4õ Ð0°8Ñ;Ñ<Ô<Ð<s6   Á+B6 Á;BÂB6 ÂB Â B6 Â#B Â$B6 Â6
CÃCc                 ó~   — t          |d¦  «        5 }|                     ¦   «         cddd¦  «         S # 1 swxY w Y   dS )a   
        Returns the data as a string, or raises IOError if the file was not found. The data is always returned as if
        "binary" mode was used.

        The 'path' argument is a path that can be constructed by munging module.__file__ (or pkg.__path__ items).

        This assumes that the file in question was collected into frozen application bundle as a file, and is available
        on the filesystem. Older versions of PyInstaller also supported data embedded in the PYZ archive, but that has
        been deprecated in v6.
        r\   N)rb   rc   )r$   r/   rf   s      r   Úget_datazPyiFrozenImporter.get_data×   s€   € õ �$˜ÑÔð 	 Ø—7’7‘9”9ð	ð 	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð 	ð 	s   ‘2²6¹6c                 óZ  — |                       |¦  «        rJt          j                             t          |                     dt          j        j        ¦  «        d¦  «        }nKt          j                             t          |                     dt          j        j        ¦  «        dz   ¦  «        }|S )z¸
        This method should return the value that __file__ would be set to if the named module was loaded. If the module
        is not found, an ImportError should be raised.
        r@   z__init__.pycú.pyc)rE   r]   r/   r^   r_   r`   ra   )r$   rO   re   s      r   Úget_filenamezPyiFrozenImporter.get_filenameç   s{   € ð �?Š?˜8Ñ$Ô$ð 	]Ý”w—|’|¥J°×0@Ò0@ÀÅbÄgÄkÑ0RÔ0RÐTbÑcÔcˆHˆHå”w—|’|¥J°×0@Ò0@ÀÅbÄgÄkÑ0RÔ0RÐU[Ñ0[Ñ\Ô\ˆHØˆr   Nc           	      ó  ‡ — d}|�Ç|                      d¦  «        d         }|D ]§}|                     t          ¦  «        sŒ|t          d…         }|                     t
          j        ¦  «        }|sŒN|d         s
|dd…         }|                     |¦  «         d                     |¦  «        }|‰ j	        v rt          d|||¦  «          nŒ¨d}|€|‰ j	        v r|}t          d|¦  «         |€t          d|¦  «         dS ‰                      |¦  «        redd	lm} t          j        |dd
¬¦  «        }	 ||t
          j                             ‰                      |¦  «        ¦  «        gˆ fd„¦  «        |	_        |	S ‰                      |¦  «        }
‰                      |¦  «        }t          j        |‰ ||
t+          |¦  «        ¬¦  «        }	d
|	_        |r8t
          j                             ‰                      |¦  «        ¦  «        g|	_        |	S )aì  
        PEP-451 finder.find_spec() method for the ``sys.meta_path`` hook.

        fullname     fully qualified name of the module
        path         None for a top-level module, or package.__path__ for
                     submodules or subpackages.
        target       unused by this Finder

        Finders are still responsible for identifying, and typically creating, the loader that should be used to load a
        module. That loader will now be stored in the module spec returned by find_spec() rather than returned directly.
        As is currently the case without the PEP-452, if a loader would be costly to create, that loader can be designed
        to defer the cost until later.

        Finders must return ModuleSpec objects when find_spec() is called. This new method replaces find_module() and
        find_loader() (in the PathEntryFinder case). If a loader does not have find_spec(), find_module() and
        find_loader() are used instead, for backward-compatibility.
        Nr@   rA   r   é   z9import %s as %s # PyInstaller PYZ (__path__ override: %s)zimport %s # PyInstaller PYZz# %s not found in PYZ)Ú_NamespacePathT)rE   c                 ó0   •— ‰                      | |¦  «        S )N)Ú	find_spec)Únamer/   r$   s     €r   z<lambda>z-PyiFrozenImporter.find_spec.<locals>.<lambda>=  s   ø€  4§>¢>°$¸Ñ#=Ô#=€ r   )rE   ÚoriginÚloader_state)ÚrsplitÚ
startswithr_   ÚSYS_PREFIXLENrD   r]   ra   Úappendr^   r5   r   rQ   Úimportlib._bootstrap_externalro   Ú_frozen_importlibÚ
ModuleSpecr/   Údirnamerl   Úsubmodule_search_locationsrE   r!   Úhas_location)r$   rO   r/   Útargetr%   ÚmodnameÚpÚpartsro   Úspecrs   Úis_pkgs   `           r   rq   zPyiFrozenImporter.find_specö   sb  ø€ ð$ ˆ
ð
 ð 	"ð —o’o cÑ*Ô*¨2Ô.ˆGàð "ð "�Ø—|’|¥JÑ/Ô/ð ØØ•m�n�nÔ%�ØŸš¥¤™œ�Øð ØØ˜Q”xð &Ø! ! " "œI�EØ—’˜WÑ%Ô%Ð%Ø ŸXšX e™_œ_�
Ø ¤Ð)ð ÝÐUÐWaÐckÐmnÑoÔoÐoØ�Eðð "�
àð 	?ð ˜4œ8Ð#ð ?Ø%�
ÝÐ3°XÑ>Ô>Ð>àð 	ÝÐ)¨8Ñ4Ô4Ð4Ø�4à×,Ò,¨ZÑ8Ô8ð 	ØDÐDÐDÐDÐDÐDõ %Ô/°¸$È4ÐPÑPÔPˆDð /=¨nØÝ”—’ ×!2Ò!2°:Ñ!>Ô!>Ñ?Ô?Ð@ð >Ð=Ð=Ð=ñ/ô /ˆDÔ+ð ˆKð ×"Ò" :Ñ.Ô.ˆØ—’ Ñ,Ô,ˆå Ô+ØØØØå/°
Ñ;Ô;ð
ñ 
ô 
ˆð !ˆÔð ð 	_Ý/1¬w¯ª¸t×?PÒ?PÐQ[Ñ?\Ô?\Ñ/]Ô/]Ð.^ˆDÔ+àˆr   c                 ó   — dS )a†  
        PEP-451 loader.create_module() method for the ``sys.meta_path`` hook.

        Loaders may also implement create_module() that will return a new module to exec. It may return None to indicate
        that the default module creation code should be used. One use case, though atypical, for create_module() is to
        provide a module that is a subclass of the builtin module type. Most loaders will not need to implement
        create_module().

        create_module() should properly handle the case where it is called more than once for the same spec/module. This
        may include returning None or raising ImportError.
        Nr   )r$   rƒ   s     r   Úcreate_modulezPyiFrozenImporter.create_module[  s	   € ð ˆtr   c                 ó  — |j         }t          |j        t          ¦  «        r|j        j        }nÐt          |j        t
          ¦  «        r’|j                             t          ¦  «        sJ ‚|j        t          d…          
                    t          j        d¦  «        }|                     d¦  «        r
|dd…         }|                     d¦  «        r
|dd…         }n$t          dt          |j        ¦  «        › �¦  «        ‚|                      |¦  «        }|€t          d|j        ›d	�¦  «        ‚t%          |d
¦  «        sJ ‚|j        �*t          j                             |j        ¦  «        g|_        t1          ||j        ¦  «         dS )aô  
        PEP-451 loader.exec_module() method for the ``sys.meta_path`` hook.

        Loaders will have a new method, exec_module(). Its only job is to "exec" the module and consequently populate
        the module's namespace. It is not responsible for creating or preparing the module object, nor for any cleanup
        afterward. It has no return value. exec_module() will be used during both loading and reloading.

        exec_module() should properly handle the case where it is called more than once. For some kinds of modules this
        may mean raising ImportError every time after the first time the method is called. This is particularly relevant
        for reloading, where some kinds of modules do not support in-place reloading.
        Nr@   rk   éüÿÿÿr[   i÷ÿÿÿz:Module's spec contains loader_state of incompatible type: z Failed to retrieve bytecode for ú!Ú__file__)Ú__spec__Ú
isinstancert   r!   r#   rC   rs   rv   r_   rw   r`   r]   ra   ÚendswithÚRuntimeErrorÚtyperY   rr   Úhasattrr}   r/   r|   rŠ   Ú__path__ÚexecÚ__dict__)r$   Úmodulerƒ   Úmodule_nameÚbytecodes        r   Úexec_modulezPyiFrozenImporter.exec_modulel  s„  € ð Œˆå�dÔ'Õ)?Ñ@Ô@ð 	wð
 Ô+Ô:ˆKˆKÝ˜Ô)­4Ñ0Ô0ð 	wð ”;×)Ò)­*Ñ5Ô5Ð5Ð5Ð5Øœ+¥m n nÔ5×=Ò=½b¼fÀcÑJÔJˆKØ×#Ò# FÑ+Ô+ð /Ø)¨#¨2¨#Ô.�Ø×#Ò# KÑ0Ô0ð /Ø)¨#¨2¨#Ô.�øåÐuÕ\`ÐaeÔarÑ\sÔ\sÐuÐuÑvÔvÐvà—=’= Ñ-Ô-ˆØð 	RÝÐPÀ$Ä)ÐPÐPÐPÑQÔQÐQõ �v˜zÑ*Ô*Ð*Ð*Ð*ð Ô*ð 		Aõ  "œwŸš¨v¬Ñ?Ô?Ð@ˆFŒOåˆX�v”Ñ'Ô'Ð'Ð'Ð'r   c                 ó"   — t          | |¦  «        S )zG
        Return importlib.resource-compatible resource reader.
        )ÚPyiFrozenResourceReader)r$   rO   s     r   Úget_resource_readerz%PyiFrozenImporter.get_resource_reader¥  s   € õ ' t¨XÑ6Ô6Ð6r   )NN)r'   r(   r)   r*   r&   Úpropertyr>   r=   rQ   rE   rY   rg   ri   rl   rq   r†   r—   rš   r   r   r   r,   r,   H   s  € € € € € ðð ð&"ð "ð "ðH ð"ð "ñ „Xð"ðð ð ð"Vð Vð VðVð Vð Vð]ð ]ð ]ð$=ð =ð =ð0ð ð ð ð ð ðcð cð cð cðJð ð ð"7(ð 7(ð 7(ðr7ð 7ð 7ð 7ð 7r   r,   c                   ó6   — e Zd ZdZd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	dS )	r™   a®  
    Resource reader for importlib.resources / importlib_resources support.

    Supports only on-disk resources, which should cover the typical use cases, i.e., the access to data files;
    PyInstaller collects data files onto filesystem, and as of v6.0.0, the embedded PYZ archive is guaranteed
    to contain only .pyc modules.

    When listing resources, source .py files will not be listed as they are not collected by default. Similarly,
    sub-directories that contained only .py files are not reconstructed on filesystem, so they will not be listed,
    either. If access to .py files is required for whatever reason, they need to be explicitly collected as data files
    anyway, which will place them on filesystem and make them appear as resources.

    For on-disk resources, we *must* return path compatible with pathlib.Path() in order to avoid copy to a temporary
    file, which might break under some circumstances, e.g., metpy with importlib_resources back-port, due to:
    https://github.com/Unidata/MetPy/blob/a3424de66a44bf3a92b0dcacf4dff82ad7b86712/src/metpy/plots/wx_symbols.py#L24-L25
    (importlib_resources tries to use 'fonts/wx_symbols.ttf' as a temporary filename suffix, which fails as it contains
    a separator).

    Furthermore, some packages expect files() to return either pathlib.Path or zipfile.Path, e.g.,
    https://github.com/tensorflow/datasets/blob/master/tensorflow_datasets/core/utils/resource_utils.py#L81-L97
    This makes implementation of mixed support for on-disk and embedded resources using importlib.abc.Traversable
    protocol rather difficult.

    So in order to maximize compatibility with unfrozen behavior, the below implementation is basically equivalent of
    importlib.readers.FileReader from python 3.10:
      https://github.com/python/cpython/blob/839d7893943782ee803536a47f1d4de160314f85/Lib/importlib/readers.py#L11
    and its underlying classes, importlib.abc.TraversableResources and importlib.abc.ResourceReader:
      https://github.com/python/cpython/blob/839d7893943782ee803536a47f1d4de160314f85/Lib/importlib/abc.py#L422
      https://github.com/python/cpython/blob/839d7893943782ee803536a47f1d4de160314f85/Lib/importlib/abc.py#L312
    c                 óŠ   — ddl m} || _          |t          j        ¦  «        j        |                     d¦  «        Ž | _        d S )Nr   )ÚPathr@   )Úpathlibrž   Úimporterr   Ú_MEIPASSÚjoinpathrD   r/   )r$   r    rr   rž   s       r   r&   z PyiFrozenResourceReader.__init__Ë  sF   € à Ð Ð Ð Ð Ð Ø ˆŒØ/�D�D�œÑ&Ô&Ô/°·²¸C±´ÐAˆŒ	ˆ	ˆ	r   c                 óv   — |                       ¦   «                              |¦  «                             d¦  «        S )Nr\   )Úfilesr¢   rb   )r$   Úresources     r   Úopen_resourcez%PyiFrozenResourceReader.open_resourceÑ  s,   € Ø�zŠz‰|Œ|×$Ò$ XÑ.Ô.×3Ò3°DÑ9Ô9Ð9r   c                 óP   — t          | j                             |¦  «        ¦  «        S )N)Ústrr/   r¢   )r$   r¥   s     r   Úresource_pathz%PyiFrozenResourceReader.resource_pathÔ  s    € Ý�4”9×%Ò% hÑ/Ô/Ñ0Ô0Ð0r   c                 ót   — |                       ¦   «                              |¦  «                             ¦   «         S )N)r¤   r¢   Úis_file)r$   r/   s     r   Úis_resourcez#PyiFrozenResourceReader.is_resource×  s*   € Ø�zŠz‰|Œ|×$Ò$ TÑ*Ô*×2Ò2Ñ4Ô4Ð4r   c                 ób   — d„ |                       ¦   «                              ¦   «         D ¦   «         S )Nc              3   ó$   K  — | ]}|j         V — Œd S )N)rr   )Ú.0Úitems     r   z	<genexpr>z3PyiFrozenResourceReader.contents.<locals>.<genexpr>Û  s$   è è € Ð=Ð=˜d�”	Ð=Ð=Ð=Ð=Ð=Ð=r   )r¤   Úiterdir)r$   s    r   Úcontentsz PyiFrozenResourceReader.contentsÚ  s*   € Ø=Ð= d§j¢j¡l¤l×&:Ò&:Ñ&<Ô&<Ð=Ñ=Ô=Ð=r   c                 ó   — | j         S )N)r/   )r$   s    r   r¤   zPyiFrozenResourceReader.filesÝ  s
   € ØŒyÐr   N)
r'   r(   r)   r*   r&   r¦   r©   r¬   r²   r¤   r   r   r   r™   r™   ¬  s{   € € € € € ðð ð<Bð Bð Bð:ð :ð :ð1ð 1ð 1ð5ð 5ð 5ð>ð >ð >ðð ð ð ð r   r™   c                  ó¶  — t          ¦   «         } t          j                             | ¦  «         t          j        D ]>}t	          |d¦  «        r,|j        dk    r!t          j                             |¦  «          nŒ?g }t          t          j        ¦  «        D ]O}t          |dd¦  «        dk    r8t          j                             |¦  «         ||vr|                     |¦  «         ŒPt          j         	                    t          |¦  «        ¦  «         	 | t          j
        d         _        n# t          $ r Y nw xY wt          j        dk    rt          ¦   «          dS dS )a  
    Install PyiFrozenImporter class into the import machinery.

    This function installs the PyiFrozenImporter class into the import machinery of the running process. The importer
    is added to sys.meta_path. It could be added to sys.path_hooks, but sys.meta_path is processed by Python before
    looking at sys.path!

    The order of processing import hooks in sys.meta_path:

    1. built-in modules
    2. modules from the bundled ZIP archive
    3. C extension modules
    4. Modules from sys.path
    r'   ÚWindowsRegistryFinderNÚ
PathFinderrU   )é   é   )r,   r   Ú	meta_pathrx   r�   r'   r1   ÚreversedÚgetattrÚextendrV   Ú
__loader__rN   Úversion_infoÚ_fixup_frozen_stdlib)r    r°   Úpath_finderss      r   ÚinstallrÁ   á  si  € õ  !Ñ"Ô"€HÝ„M×Ò˜Ñ"Ô"Ð"õ
 ”ð ð ˆÝ�4˜Ñ$Ô$ð 	¨¬Ð:QÒ)Qð 	ÝŒM× Ò  Ñ&Ô&Ð&ØˆEøð
 €LÝ�œÑ'Ô'ð *ð *ˆÝ�4˜ TÑ*Ô*¨lÒ:ð 	*ÝŒM× Ò  Ñ&Ô&Ð&Ø˜<Ð'ð *Ø×#Ò# DÑ)Ô)Ð)øÝ„M×Ò� ,Ñ/Ô/Ñ0Ô0Ð0ð
Ø-5�Œ�JÔÔ*Ð*øÝð ð ð Øˆðøøøõ Ô˜7Ò"ð ÝÑÔÐÐÐðð s   ÄD) Ä)
D6Ä5D6c                  ó0  — dd l } t          j        s(	 t          j        t          _        n# t          $ r Y nw xY wt          j                             ¦   «         D ]¾\  }}|                      |¦  «        sŒ|                      |¦  «        }|j	        j
        }|j        }|r|dz  }t          j        j        t          j        g|                     d¦  «        ¢R Ž dz   }t!          |d¦  «        s	 ||_        n# t          $ r Y nw xY w|j        €|dk    r||_        Œ¿d S )Nr   r[   r@   rk   rŠ   zimportlib._bootstrap)Ú_impr   Ú_stdlib_dirr¡   ÚAttributeErrorrV   ÚitemsÚ	is_frozenÚis_frozen_packager‹   rt   Úorignamer]   r/   r^   rD   r�   rŠ   re   )rÃ   r•   r”   r„   rt   Ú	orig_namere   s          r   r¿   r¿     sX  € Ø€K€K€Kõ Œ?ð ð	Ý!œl�CŒOˆOøÝð 	ð 	ð 	ØˆDð	øøøõ  #œ{×0Ò0Ñ2Ô2ð -ð -Ñˆ�VØ�~Š~˜kÑ*Ô*ð 	Øà×'Ò'¨Ñ4Ô4ˆð ”Ô3ˆà Ô)ˆ	Øð 	%Ø˜Ñ$ˆIõ ”7”<¥¤ÐD¨y¯ª¸sÑ/CÔ/CÐDÐDÐDÀvÑMˆõ �v˜zÑ*Ô*ð 	ðØ"*�”�øÝ!ð ð ð Ø�ðøøøð Ô ð 	-¨YÐ:PÒ-Pð 	-Ø$,ˆLÔ!øð7-ð -s   ’) ©
6µ6Ã)C1Ã1
C>Ã=C>)r*   r   r]   r   rz   r7   Úpyimod01_archiver   r   r¡   ra   r_   Úlenrw   r�   Úimp_new_moduleÚflagsÚverboser   r   r   r!   r,   r™   rÁ   r¿   r   r   r   ú<module>rÐ      sy  ððð ð €
€
€
Ø 	€	€	€	Ø 	€	€	€	à Ð Ð Ð Ø €€€à @Ð @Ð @Ð @Ð @Ð @Ð @Ð @àŒ\˜BœFÑ"€
Ø��J‘”€ð ��c‘”€à„9Ôð ˜œð ðð ð ð ð
ð ð ðDð Dð Dð)ð )ð )ð )ð )ñ )ô )ð )ða7ð a7ð a7ð a7ð a7ñ a7ô a7ð a7ðH2ð 2ð 2ð 2ð 2ñ 2ô 2ð 2ðj0ð 0ð 0ðn(-ð (-ð (-ð (-ð (-r   