
    ;i+                       S r SSKr\R                  R                  rSq/ r0 r0 q	0 r
SrS rS rS rSDS	 jr\S
.S jr\SS.S jrS\l        S rS rS rS rSSSSS.S jrSSSS.S jrSS.S jrS rS rS rSS.S jrS rS rS r S  r!S! r"S" r#S# r$SES$ jr%S% r&S& r'S' r(S( r)S) r*S* r+S+ r,S, r-S- r.S. r/S/ r0 " S0 S15      r1S2r2\2S3-   r3S4r4S5 r5S6 r6S7 r7S8 r8S9 r9S: r:\Rv                  Rx                  Rz                  S; 5       r>\Rv                  Rx                  Rz                  SS<.S= j5       r?SS>.S? jr@S@ rA   SFSA jrBSB rCS\Cl        SC rDg)G)pathsmodulescheckcheck_extensionenabledisabledisable_all	reset_allmodule_bl_infoextensions_refreshstale_pending_remove_pathsstale_pending_stage_paths    NFz.~stale~c                      [        5        H"  n [        R                  R                  U 5        M$     [	        5         [        5         [        R                   H  n[        UR                  SS9  M     [        5         g )NTrefresh_handled)r   _bpyutils_sys_path_ensure_append$_stale_pending_check_and_remove_once!_initialize_extensions_repos_once_preferencesaddonsr   module#_initialize_ensure_extensions_addon)pathaddons     S/home/wildlama/Downloads/blender-5.1.2-linux-x64/5.1/scripts/modules/addon_utils.py_initialize_oncer   (   sX    

**40  )*%'$$LL 	
 % ()    c                  H   SS K n / n[        [        R                  R	                  5       5       Hp  u  p#U R
                  R                  X2S:X  a  SOS5      nU R
                  R                  U5      (       a  UR                  U5        M[  US:X  d  Mc  [        SUS5        Mr     U$ )Nr   addons_corer   zInternal error:zwas not found!)
os	enumerater   r   script_pathsr   joinisdirappendprint)r"   r   ip	addon_dirs        r   r   r   :   s    E$**1134 GGLL!VMJ	77==##LL#!V#Y0@A 5 Lr   c                  t   SS K n [        5        Vs/ s H  oS4PM     nn[        R                  R                   Hu  nUR
                  (       d  M  UR                  nU R                  R                  U5      (       d  MD  UR                  USR                  [        UR                  5      45        Mw     U$ s  snf )Nr    z	{:s}.{:s})r"   r   r   
extensionsreposenabled	directoryr   r&   r'   format_ext_base_pkg_idnamer   )r"   r   addon_pathsrepodirpaths        r   _paths_with_extension_reposr7   U   s    */'2'$":'K2''--||..ww}}W%%G[%7%78Ldkk%Z[\ .  3s   B5Tc                    SS K n[        R                  R                  (       a  [	        SX5        U R                  [        5      (       a  [        X5      $ SS Kn[        U5      n [        USSS9nU   U(       a  / n[        U5      n	Sn
U
R                  S5      (       d9   U	R                  5       n
[!        U
5      S:X  a  OU
R                  S5      (       d  M9  U
R#                  5       (       a9  UR%                  U
5         U	R                  5       n
U
R#                  5       (       a  M9  SR'                  U5      nOUR)                  5       nS S S 5        A UR+                  WUS9nS nU(       al  UR4                   H\  nUR6                  UR8                  :X  d  M  [!        UR:                  5      S:X  d  M:  [=        UR:                  S   SS5      S:X  d  MZ  Un  O   U(       aR   U" U 5      nUR?                  WR@                  5      Ul!        UUl"        URF                  RI                  U5      Ul%        U$ [	        S[/        U5      5        g ! [         a  n[	        SX5         S nAg S nAff = f! [         a+  n[        (       d  S	q[	        S
X5         S nAS S S 5        g S nAff = f! [         a+  n[        (       d  S	q[	        S
X5         S nAS S S 5        g S nAff = f! , (       d  f       GN= f! [,         a/    [	        S[/        U5      5        SS KnUR3                  5         S n GNf = f! [,         a,    [	        S[/        U5      5        SS KnUR3                  5          g f = f)Nr   fake_modulerzUTF-8)encodingzError opening file:r-   bl_infoTzError reading file as UTF-8:)filenamez%Syntax error 'ast.parse' cannot read:   idzAST error parsing bl_info for:zDWarning: add-on missing 'bl_info', this can cause poor performance!:)&r"   r   appdebug_pythonr(   
startswith_ext_base_pkg_idname_with_dot_fake_module_from_extensionasttypeopenOSErroriterreadlineUnicodeDecodeErrorerror_encodinglenrstripr'   r%   readparse	Exceptionrepr	traceback	print_excbody	__class__Assigntargetsgetattrliteral_evalvaluer<   __file__r   getmtime__time__)mod_namemod_pathspeedyr"   rE   
ModuleTypefile_modexlines	line_iterlinedataast_datarS   	body_inforU   mods                    r   _fake_modulerl   d   s   xxmX0899*8>>cJ#8
 
EXIDooi00 $--/D t9> ooi00 ++--T" $--/D ++-- 775>D ==?D; 
< 	99TH95 IMMD~~+t||$)t||Ab9YF$(	 " 		X&C**4::6CK#CL77++H5CL 
TVZ[cVdeK  #X2 *  )>)-<hK 
  *  )>)-<hK1 
( ) 
D  5tH~F	,  	2DNC!		s   %I 2-K I)0&K&K?J!K&"KK+ AL' 
I&I!!I&)
J3JKJK!
K+KKKK
K(+5L$#L$'3MMmodule_cachec           	      V   SS K nSq[        R                  5         [	        U R                  5       5      n[        5        GH[  u  p4[        R                  R                  X4S9 GH3  u  pVUR                  U5        U R                  U5      nUb  UR                  U:w  aU  [        SR                  UR                  U5      5        [        R                  UR                   S   UR                  U45        OU(       d,  UR"                  UR                  R%                  U=n5      :w  aQ  O5UR&                  UR                  R%                  UR(                  =n5      :w  a  [        SU[+        U5      S5        X	 S nUb  GM  [-        UU5      nU(       d  GM/  XpU'   GM6     GM^     U H  n	X		 M     Ag )Nr   Fpackagez1multiple addons with the same name:
  {!r}
  {!r}namezreloading addon meta-data:z(time-stamp change detected))r"   rL   error_duplicatesclearsetkeysr7   r   r   module_namesdiscardgetr\   r(   r2   r'   r<   r^   r]   __time_manifest____file_manifest__rR   rl   )
rn   r"   modules_staler   pkg_idr_   r`   rk   metadata_path	mod_stales
             r   modules_refreshr      sq   N))+,M35"&))"8"8"8"NH!!(+""8,C<<8+!!'h!?
 %++S[[-@#,,PX,YZ ^d)9)98:S-)TT.."''2B2BTWTiTiCi=2jj6$}BUWuv$.C{" 3-0*7 #O 6> #	# #r   )rn   refreshc                 6   U(       d  U [         L az  [        R                  (       ae  [        U S9  S[        l        [	        U R                  5       5      nUR                  S S9  U R                  5         U R                  S U 5       5        U R                  5       $ )Nrm   Fc                 |    U S   R                   R                  S5      =(       d    U S   R                  5       U S   4$ )Nr>   rr   r   )r<   ry   casefold)items    r   <lambda>modules.<locals>.<lambda>   s8    47??3F3Fv3N3YRVWXRY2c2c2egklmgn1or   )keyc              3   ,   #    U  H
  u  pX4v   M     g 7fN ).0r   r[   s      r   	<genexpr>modules.<locals>.<genexpr>   s     N;MZSSL;Ms   )
addons_fake_modulesr   	_is_firstr   listitemssortrt   updatevalues)rn   r   module_cache_itemss      r   r   r      s}    L$77W=N=N\2!
 ","4"4"67$opN;MNN  r   c                 4   SSK nU [        R                  ;   nUR                  R	                  U 5      nUSL=(       a    [        US[        5      nU[        L a$  [        SU S[        [        USS5      5      5        SnU(       a  [        US	S5      (       a  S
nX$4$ )z
Returns the loaded state of the addon.

:param module_name: The name of the addon and module.
:type module_name: str
:return: (loaded_default, loaded_state)
:rtype: tuple[bool, bool]
r   N__addon_enabled__zWarning: addon-modulezVfound module but without '__addon_enabled__' field, possible name collision from file:r\   z	<unknown>F__addon_persistent__T)	sysr   r   r   ry   rY   Ellipsisr(   rR   )module_namer   loaded_defaultrk   loaded_states        r   r   r      s      L$7$77N
++//+
&C	D 	4((3 
 x#[ 31 j+67		
 
ws2E::''r   c                 ,    U R                  [        5      $ )z,
Return true if the module is an extension.
)rB   rC   r   s    r   r   r     s     !!"?@@r   c                     [         R                  nUR                  U 5      nU(       d  UR                  5       nXl        g g r   )r   r   ry   newr   r   r   r   s      r   _addon_ensurer   '  s3      FJJ{#E

" r   c                     [         R                  nX;   a1  UR                  U 5      nU(       a  UR                  U5        X;   a  M0  g g r   )r   r   ry   remover   s      r   _addon_remover   /  s8      F



;'MM%  
r   )default_set
persistentr   handle_errorc          
      j  ^ SSK nSSKnSSKnSSKJn  Uc  S nU R                  [        5      =n	(       ay  U(       d  [        U /US9  [        (       a\  [        R                  U [        [        5      S R                  S5      SSS2   5      =n
(       a   [        SR                  X
5      5      eUR                  R                  U 5      nSnUb  UR                  =nb  UR                   R#                  U5      (       a  [%        US	S
5      (       a   UR'                  5         S
Ul        [%        USS5      nUR                   R/                  U5      nX:w  a/  [+        S[1        U5      S5         UR3                  U5        S
Ul        U(       a  [5        U 5        U" 5           UR7                  U 5      nUR                  =nc$  [9        SR                  [%        USS5      5      U S9eUR                   R/                  U5      Ul        S
Ul        U	(       ah  [%        USS5      nUbX  [S        U5      [T        L aD  SU;  a>  [V        RX                  RZ                  (       a  [+        SR                  U [\        5      5        U?/SSK+J0nJ1n  U" 5       nU" U 5         URe                  5          U" U5         SSS5        SUl        X,l3        [V        RX                  RZ                  (       a  [+        SURh                  5        U$ ! [         a  nU" U5         SnAgSnAff = f! [(         a>  n[+        SU=(       d    U 5        U" U5        U	(       a  U(       d	  [        US9   SnAgSnAff = f! [(         a6  nU" U5        UR                  U 	 U	(       a  U(       d	  [        US9   SnAgSnAff = f! [(         Gaj  n[=        U[8        5      (       Ga  UR>                  U :X  a!  SR                  U [A        U5      5      Ul!        OU	(       a  U R                  UR>                  S-   5      (       a  U [        [        5      S RE                  S5      S   m[G        U4S j[H        RJ                  RL                   5       S5      nUc  SR                  U T5      Ul!        OIURN                  (       d  SR                  U T5      Ul!        O SR                  U [A        U5      5      Ul!        U" U5        U(       a  [Q        U 5        U	(       a  U(       d	  [        US9   SnASSS5        gSnAff = f! [(         am  n[+        SU=(       d    U 5        U" U5        UR                  U 	 U(       a  [Q        U 5        U	(       a  U(       d	  [        US9   SnAU" U5        SSS5        gSnAff = f! U" U5        f = f! , (       d  f       GN= f)a
  
Enables an addon by name.

:param module_name: the name of the addon and module.
:type module_name: str
:param default_set: Set the user-preference.
:type default_set: bool
:param persistent: Ensure the addon is enabled for the entire session (after loading new files).
:type persistent: bool
:param refresh_handled: When true, :func:`extensions_refresh` must have been called with ``module_name``
   included in ``addon_modules_pending``.
   This should be used to avoid many calls to refresh extensions when enabling multiple add-ons at once.
:type refresh_handled: bool
:param handle_error: Called in the case of an error, taking an exception argument.
:type handle_error: Callable[[Exception], None] | None
:return: the loaded module or None on failure.
:rtype: ModuleType
r   N)RestrictBlendc                     [        U [        5      (       a@  [        U R                  =n5      [        L a"  UR                  S5      (       a  [        U5        g SS KnUR                  5         g )NzAdd-on r   )	
isinstanceImportErrorrF   msgstrrB   r(   rS   rT   )rd   r   rS   s      r   r   enable.<locals>.handle_errorR  sM    "k** '3.CNN94M4M#J!r   )addon_modules_pendingr   .   z%Extension {:s} is incompatible ({:s})r   F!Exception in module unregister():r   r^   zmodule changed on disk:zreloading...z?module loaded with no associated file, __path__={!r}, aborting!__path__)rr   z&Add-on not loaded: "{:s}", cause: {:s}c              3   J   >#    U  H  oR                   T:X  d  M  Uv   M     g 7fr   )r   )r   r5   repo_ids     r   r   enable.<locals>.<genexpr>  s     b*G$;;ZaKa*Gs   #	#zKAdd-on not loaded: "{:s}", cause: extension repository "{:s}" doesn't existzIAdd-on not loaded: "{:s}", cause: extension repository "{:s}" is disabledr<   _initzFAdd-on "{:s}" has a "bl_info" which will be ignored in favor of "{:s}")_bl_owner_id_get_bl_owner_id_setzException in module register():Tz	addon_utils.enable)5r"   r   	importlib_bpy_restrict_stater   rB   rC   r   _extensions_incompatiblery   rM   	partitionRuntimeErrorr2   r   r\   r   existsrY   
unregisterrQ   r(   r   r]   rR   reloadr   import_moduler   r^   r   rr   r   r   
rpartitionnextr   r.   r/   r0   r   rF   dictr   r@   rA   _ext_manifest_filename_tomlr<   r   r   registerr   __name__)r   r   r   r   r   r"   r   r   r   is_extensionerrorrd   rk   mod_file
mtime_orig	mtime_newr5   r<   r   r   owner_id_prevr   s                        @r   r   r   8  s   ( 1		" $../LMMM'2m) $#155$A B CDNNsSTUTXWXTXY   &'N'U'UVa'ijj ++//+
&C H _%X2GGNN8$$ 3+U33
  !&S*a0
GG$$X.	"+T(^^L  % %*C! k" 
8	 ))+6CLL(1 "U\\Z6 %	  77++H5CL$)C!P  c9d3G"=D(WG-C xx,,jqq +-H K
 	<(*%	,LLN ]+I 
N !C)xx$cll3JY $   $  	 :  9H<SUR &LA  R KK,&LAR  %	 "k**77k)GNN{\_`b\cdBF "k&<&<RWWs]&K&K)#.K*L*MNYYZ]^_`aGb,*A*A*G*GbD |mtt +W 
 "\\krr +W  "L!R!RS^`cdf`g!hk*O"=w 
,%	H  	3h6M+OK(k*O"=]+I 
t	 ]+I 
s   K7 L ,M! V#A+N$
BV#T"V#7
LLL
M 4MM!
N!+,NN!$T/ETV#TV#
V&AV9V=V#VV
V  V##
V2)r   r   r   c                   SSK nUc  S nUR                  R                  U 5      nU(       a0  [        USS5      SLa   SUl        SUl         UR                  5         O [        SR                  U Uc  S	OS
5      5        U(       a  [        U 5        U(       d	  [        US9  [        R                  R                  (       a  [        SU 5        gg! [         a5  n[        USU 5      n[        S[        U5      5        AU" U5         SnANSnAff = f)a9  
Disables an addon by name.

:param module_name: The name of the addon and module.
:type module_name: str
:param default_set: Set the user-preference.
:type default_set: bool
:param handle_error: Called in the case of an error, taking an exception argument.
:type handle_error: Callable[[Exception], None] | None
r   Nc                 ,    SS K nUR                  5         g Nr   )rS   rT   )_exrS   s     r   r   disable.<locals>.handle_error(  s    !r   r   Fr\   r   z"addon_utils.disable: {:s} not {:s}loadedr0   r   z	addon_utils.disable)r   r   ry   rY   r   r   r   rQ   r(   rR   r2   r   r   r   r@   rA   )r   r   r   r   r   rk   rd   r`   s           r   r   r     s     	" ++//+
&C
 ws/7uD %#( 	NN 	077KY	
 k"5xx%{3 )  	sJ<H5tH~F		s   C 
D+DD)reload_scriptsc                 &   SSK nS[        l        [        R	                  5         [        5         [        5        H  u  p#U(       d  [        R                  R                  U5        [        R                  R                  X#S9 H  u  pE[        U5      u  pgU (       a7  SSKnUR                  R                  U5      n	U	(       a  UR                  U	5        Xg:X  a  MW  U(       a  [!        USS9  Mj  U(       d  Ms  [#        SU5        [%        U5        M     M     g)z5
Sets the addon state based on the user preferences.
r   NTrp   r   z 	addon_utils.reset_all unloading)r   r   r   r   rt   r   r7   r   r   r   r   rw   r   r   ry   r   r   r(   r   )
r   r   r   r}   r_   	_mod_path
is_enabled	is_loadedr   rk   s
             r   r	   r	   O  s      G 35JJ..t4#'99#9#9$#9#OH$)(O!J  kkooh/$$S)&x698D!! $P	 6r   c            
      T   SS K n U R                  R                  5       nUR                  5        Vs/ s HA  n[	        [        US   SS 5      =n5      [        L d  M'  UR                  S5      (       d  M?  UPMC     nnU H#  u  pV[        USS5      (       d  M  [        USS9  M%     g s  snf )Nr   r>   __dict__r   FTr   )	r   r   copyr   rF   rY   r   ry   r   )r   r   r   mod_dictaddon_modulesr_   rk   s          r   r   r   t  s     kk G (GDGZ>>?4G 	<<+, 	   '3+U33Hd3 's   &B%B%3B%c                      SR                   " [        R                  R                  5       /[        R                  R
                  S S Q76 $ )Nz.https://docs.blender.org/manual/{:s}/{:d}.{:d}r   )r2   r   r   manual_language_coder@   versionr   r   r   _blender_manual_url_prefixr     s>    ;BB

'')			"1	 r   c                      SSSSSSSSSSSS.$ )Nr-   r   	COMMUNITYF)rr   authorr   blenderlocationdescriptiondoc_urlsupportcategorywarningshow_expandedr   r   r   r   _bl_info_basisr     s-     r   )
info_basisc                H   Uc
  [        5       n[        U S0 5      nSU;   a  U$ U(       d]  U R                  R                  [        5      (       a3  [        U R                  U R                  5      u  p#Uc  [        SU5        0 nX l        UR                  5        H  u  pEUR                  XE5        M     US   (       d  U R                  US'   US   nU(       a$  SnXv;   a  UR                  U[        5       5      US'   SS KnSU;   a  UR                  S	S
US   5      US'   S US'   U$ )Nr<   r   z0module_bl_info: failed to extract meta-data fromrr   r   z{BLENDER_MANUAL_URL}r   r   z\s*<.*?>r-   )r   rY   r   rB   rC   _bl_info_from_extensionr\   r(   r<   r   
setdefaultreplacer   resub)	rk   r   
addon_infofilepath_tomlr   r[   r   doc_url_prefixr   s	            r   r
   r
     s!   #%
i,J *<<""#@AA(?cll([%J!H-X
  &&(
c) ) f \\
6#G/$$+OO*,%Jy! :!vvk2z(7KL
8Jwr   c                  |    SS K n U R                  R                  [        R                  R                  S5      S5      $ )Nr   CONFIGzstale-pending)r"   r   r%   r   r   user_resource)r"   s    r   _stale_pending_filepathr    s+     77<<

00:OLLr   c                 `   SS K n[        5       nUR                  R                  U5      nUR                  R	                  U5      (       a  g  UR                  USS9  [        US5       n S S S 5        g ! , (       d  f       g = f! [         a  n[        S[        U5      5         S nAg S nAff = f)Nr   Texist_okwbz"Unable to set stale files pending:)
r"   r  r   dirnamer   makedirsrG   rQ   r(   r   )debugr"   stale_pending_filepathr6   _rd   s         r   _stale_pending_stager    s    46ggoo45G	ww~~,--=
Gd+($/1 0// =2CG<<=s6   B (A3*B 3
B=B B 
B-B((B-c               #     #    SS K n [        R                  R                   H6  nUR                  (       d  M  UR
                  S:X  a  M(  UR                  v   M8     [        5       SS   S h  vN   U R                  R                  [        R                  R                  S5      S5      v   [        R                  R                  SU R                  R                  SS5      S	S
9v   g  N{7f)Nr   SYSTEMr>   
EXTENSIONS.localSCRIPTSstartupbl_app_templates_userF)r   create)r"   r   r.   r/   r0   sourcer1   r   r   r%   r   r   r   )r"   r5   s     r   _stale_file_directory_iterr    s     ''--||;;("nn . wqr{ '',,tzz//=x
HH **
"
"WW\\)%<= #   s   A)C)+C',A<C)c                  D   SS K n [        5       nU R                  R                  U5      (       d  g SSKJn  [        R                  R                  nSn[        5        H  nU R                  R                  U R                  R                  U[        5      5      (       d  MC   U" U[        US9nUR                  SS9  UR                  5       (       d'  UR                  5         UR                  5       (       d  SnUR                  5       (       a  UR!                  SS9  M  M     U(       a   U R)                  U5        g g ! ["         a!  n[%        S['        U5      5         S nAGM  S nAff = f! ["         a+  nU(       a  [%        S['        U5      5         S nAg  S nAg S nAff = f)	Nr   
StaleFilesTbase_directorystale_filenamer  )check_existsFz4Unexpected error clearing stale data, this is a bug!z$Failed to remove stale-pending file:)r"   r  r   r   +_bpy_internal.extensions.stale_file_managerr  r   r@   rA   r  r%   _stale_filename
state_loadis_emptystate_remove_allis_modifiedstate_storerQ   r(   r   r   )r"   r	  r  r  r   r6   stale_handlerd   s           r   r   r     sc   4677>>011 GHH!!E H-/ww~~bggll7ODEE	S%&.L
 ###6((**--/#,,..$H''))((e(< * 0( 	GII,-   	SH#b'RR	S  	G<c"gFF 	Gs1    A;D<)E* <
E'E""E'*
F4FFc                     SSK Jn  [        R                  R                  nU" U [
        US9nUR                  US9(       a  [        U5        g g Nr   r  r  )r   )r  r  r   r@   rA   r  state_load_add_and_storer  	path_baser   r  r  r$  s        r   r   r   D  sJ    
 GHH!!E &L ,,5,9U# :r   c                     SSK Jn  [        R                  R                  nU" U [
        US9nUR                  US9(       a  g g r&  )r  r  r   r@   rA   r  state_load_remove_and_storer(  s        r   r   r   X  sD    FHH!!E &L //e/< 	 =r   c                     SS K nSS KnUR                  U S5       nUR                  U5      nS S S 5        U$ ! , (       d  f       W$ = f)Nr   rb)picklegzipGzipFileload)filepathr.  r/  fhrh   s        r   _pickle_zlib_file_readr4    s=    	x	&"{{2 
'K 
'	&Ks	   7
Ac                     SS K nSS KnUR                  U SSS9 nUR                  X5        S S S 5        g ! , (       d  f       g = f)Nr   r  	   )compresslevel)r.  r/  r0  dump)r2  rh   r.  r/  r3  s        r   _pickle_zlib_file_writer9    s4    	xQ	72D 
8	7	7s	   5
Ac                      [         R                  R                   V s0 s H,  o R                  (       d  M  U R                  U R
                  _M.     sn $ s  sn f r   )r   r.   r/   r0   r   r1   )r5   s    r   (_extension_repos_module_to_directory_mapr;    s>    4@4K4K4Q4Qb4QDUaUa'DKK'4Qbbbs
   AAc           	         U R                  S5      U:w  a  Ub  U" S5        gU R                  S/ 5      n[        U5      [        U5      :w  a.  Ub*  U" SR                  [        U5      [        U5      5      5        gSSKJn  SSKJn  [        5       nU H  u  ppX4U;  a  Ub  U" S	R                  X5      5          gUR                  US
5      =n(       a  U" X[        5      nOS
nU(       a
   U" U5      nOS nUc  SnSnOUR                  nUR                  nX:w  a  Ub  U" SR                  XX5      5          gUU:w  d  M  Ub  U" SR                  XUU5      5          g   g! [         a    S n Nyf = f)Nr   zblender changedT
filesystemzlength changes ({:d} -> {:d}).r   )statr%   z"{:s}.{:s}" no longer enabled.r-   z("{:s}.{:s}" time changed ({:g} -> {:g}).z("{:s}.{:s}" size changed ({:d} -> {:d}).F)ry   rM   r2   r"   r>  os.pathr%   r;  r   rQ   st_mtimest_size)
cache_data
blender_idextensions_enabledprint_debugcache_filesystemr>  r%   repos_module_to_directory_maprepo_moduler}   cache_stat_timecache_stat_sizerepo_directorypkg_manifest_filepathstatinfo	test_time	test_sizes                    r   %_extension_compat_cache_update_neededrQ    s    ~~i J.")* "~~lB7 $6 77"8??DT@UWZ[mWnop$L$N!AQ=_ (::&>EEkZ[:>>{BOO>O$(A\$]!$&!
 !  56 HII ))I ((I '&HOO  i'&HOO)  S BRV 5    s   ,E""E10E1c                    SS K nSSKJn  / n0 nU UUS.n[        5       n	S n
U H  u  pU	R	                  US5      =n(       a  U" X[
        5      nOSnUb  U" SR                  U5      5        U(       a   UR                  U5      nOS nUc  SnSnOzUR                  nUR                  nU
c@  SS Kn
[        U
SS5      S:X  a+   UR                  R                  U
R                  5      U
l        U
R%                  UUUUU5      =n b  UX{U4'   UR'                  XUU45        M     U$ ! [         a    S nUb  U" SR                  U5      5         Nf = f! [         a  nUb  U" [#        U5      5         S nANS nAff = f)	Nr   r?  )r   r=  incompatibler-   z&directory for module "{:s}" not found!zunable to find "{:s}"g        r^   )r"   r@  r%   r;  ry   r   r2   r>  rQ   rA  rB  bl_pkgrY   r   r]   r\   r^   r   ,manifest_compatible_with_wheel_data_or_errorr'   )rD  rE  
wheel_listrF  r"   r%   r=  rS  rC  rH  rT  rI  r}   rL  rM  rN  rO  rP  rd   r   s                       r   _extension_compat_cache_createrW    s    JL  $J %M$N! F1:>>{BOO>O$(A\$]!$&!&FMMkZ[ Y77#89 HII ))I ((I ~ 6:q1Q61*,''*:*:6??*K
  LL)"   7<623;	9EF_  2b M  Y* 9 @ @AV WXY. % 1&2'B01s*   3D# *E#&EE
E7E22E7c                    SS K nSS KnSS KnSn/ nSn[        R                  R
                  UR                  5       UR                  5       UR                  SS U4n	UR                  R                  U SS5      n
UR                  R                  U
5      (       a   [        U
5      nOS nUb  U" S5        Ub   [#        XX5      (       a  S nUcO  [)        XXr5      n UR+                  UR                  R-                  U
5      S	S
9  [/        X5        Ub  U" S5        S	nOUb  U" S5        US   qXg4$ ! [         a/  nS n[        SR                  [!        U5      5      5         S nANS nAff = f! [         a$    [        S5        SS KnUR'                  5         S n Nf = f! [         a-  n[        SR                  [!        U5      5      5         S nANS nAff = f)Nr   Fr   z.cachez
compat.datz4Extensions: reading cache failed ({:s}), creating...zdoesn't exist, creating...zHExtension: unexpected error reading cache, this is a bug! (regenerating)Tr  zupdate written to disk.z(Extensions: writing cache failed ({:s}).zup to date.rS  )r"   platformr   r   r@   r   systemmachineversion_infor   r%   r   r4  rQ   r(   r2   r   rQ  rS   rT   rW  r  r  r9  r   )extensions_directoryrE  rF  r"   rY  r   updatedrV  magic_numberrD  filepath_compatrC  rd   rS   s                 r   /_initialize_extensions_compat_ensure_up_to_datera  ;  s    GJ L((""HOO$5x7G7G7I3K[K[\]^_K`bnoJggll#7<PO 
ww~~o&&	Z/@J 
"45
	4ZM_mm!
 3JT^l
	NKK84KH#O@&56 "&).9[  	ZJ HOOPSTVPWXYY	Z&  	\]!J		  	N<CCCGLMM	NsB   D. 6E* ?F .
E'8%E""E'*+FF
G%#GGc                 X    SS K n[        UR                  R                  U S5      UUUS9  g )Nr   r  )	local_dirrV  r  error_fn)r"   _extension_sync_wheelsr   r%   )r]  rV  r  rd  r"   s        r   6_initialize_extensions_compat_ensure_up_to_date_wheelsrf    s)    '',,3X>	r   c                J   [         R                  5         [        5       n[        [        5      n[
        R                   HI  nUR                  n[        U5      (       d  M!  UR                  XS  R                  S5      SS S2   5        MK     UbC  U H=  n[        U5      (       d  M  UR                  XS  R                  S5      SS S2   5        M?     [        R                  R                  n	U	(       a  S OS n
U(       a  U(       d  U
b  U
" S5        g  [        U UU
5      u  pU(       a  U(       a  Uc  S n ['        U WU	US	9  g g g ! [         a$    [!        S5        SS KnUR%                  5         Sn NQf = f! [         a"    [!        S
5        SS KnUR%                  5          g f = f)Nr   r   r   c                       [        S/U Q70 UD6$ )NzExtension version cache:)r(   )argskwargss     r   r   4_initialize_extensions_compat_data.<locals>.<lambda>  s    51K+]d+]V\+]r   z#no extensions, skipping cache data.z;Extension: unexpected error detecting cache, this is a bug!Fc                 .    [        S[        U 5      5        g )NError:)r(   r   )rd   s    r   rd  4_initialize_extensions_compat_data.<locals>.error_fn  s    (CG,r   )rd  z;Extension: unexpected error updating wheels, this is a bug!)r   rt   ru   rM   rC   r   r   r   r   addr   r   r@   rA   ra  rQ   r(   rS   rT   rf  )r]  ensure_wheelsr   use_startup_fastpathrd  rE  extensions_prefix_lenr   r   r  rF  r^  rV  rS   s                 r   "_initialize_extensions_compat_datars    s    ""$  =>$$ll;''"";/E#F#P#PQT#UVWVZYZVZ#[\ %
 (0K{++"&&{3I'J'T'TUX'YZ[Z^]^Z^'_` 1 HH!!Ebg]mqK %7"=>
M 
 -
&F(%	    KL	&  &ST ##%&s$   E 6E6 +E32E36)F"!F"c           
      v    [        U S [        S [        U 5       5       [        U 5      5       =(       d    S5      $ )Nc              3   X   #    U  H   u  pUR                  5       (       a  M  Uv   M"     g 7fr   )isdigit)r   r)   cs      r   r   +_version_int_left_digits.<locals>.<genexpr>  s     Flda!))+ls   *	*0)intr   r#   rM   )xs    r   _version_int_left_digitsr|    s0    qO$FilFAOPWTWXXr   c           	      
   SS K nSS Kn[        5       nUR                  R	                  UR                  R                  U5      [        5      n [        US5       nUR                  U5      nS S S 5        WR                  SS 5      =n	c  [        SU5        S U4$ [        U	5      [        La  [        SU5        S U4$ XS'   UR                  S	S 5      =n	c  [        S
U5        S U4$ [        U	5      [        La  [        SU5        S U4$  [!        S [#        U	R%                  SS5      5       5       5      n	XS	'   UR                  SS 5      =n	c  [        SU5        S U4$ [        U	5      [        La  [        SU5        S U4$  [!        S U	R%                  S5       5       5      n	XS'   UR                  SS 5      =n	c  [        SU5        O#[        U	5      [        La  [        SU5        OXS'   UR                  SS 5      =n	c  [        SU5        S U4$ [        U	5      [        La  [        SU5        S U4$ XS'   SUS'   XE4$ ! , (       d  f       GN= f! [         a    [        S[        U5      5        S U4s $ [         a%  n[        S[        U5      SU5        S U4s S nA$ S nAff = f! [         a$  n[        SU[        U5      5        S U4s S nA$ S nAff = f! [         a%  n[        S[        U5      SU5        S U4s S nA$ S nAff = f) Nr   r-  zCWarning: add-on missing manifest, this can cause poor performance!:rm  inrr   zError: missing "name" inz Error: "name" is not a string inr   zError: missing "version" inz#Error: "version" is not a string inc              3   V   #    U  H  u  pUS :  a  [         O[        " U5      v   M!     g7f)r   N)rz  r|  )r   r)   r{  s      r   r   *_bl_info_from_extension.<locals>.<genexpr>	  s-      
6 ES77;;6s   ')r   r   z6Error: "version" is not a semantic version (X.Y.Z) in blender_version_minz'Error: missing "blender_version_min" inz/Error: "blender_version_min" is not a string inc              3   8   #    U  H  n[        U5      v   M     g 7fr   )rz  )r   r{  s     r   r   r    s     7&6c!ff&6s   zin "blender_version_min"r   taglinezWarning: missing "tagline" inz"Warning: "tagline" is not a stringr   
maintainerzError: missing "author" inz#Error: "maintainer" is not a stringr   Developmentr   )r"   tomllibr   r   r%   r  r   rG   r1  FileNotFoundErrorr(   rR   rQ   r   ry   rF   tupler#   split)
r_   r`   r"   r  r<   r   r3  rh   rd   r[   s
             r   r   r     s   
 GGGLL!:<WXM#-&"<<#D ' &$''0*M:]""E{#2MB]""FO)T**3-}=]""E{#5}E]""# 
!%++c1"56
 
 I/66?9=I]""E{#A=Q]""#7ekk#&677 I )T**3/?	eC	4mD!&,--6,m<]""E{#5}E]""H'GJ!!C '& #SUYZgUhi]"" #hB}5]""#0  #H-Y\]_Y`a]""#  #hB!=}M]""#s~   I H:+I +J" =!K :
I	I 	I #J1	J:JJJ"
K,KKK
LK=7L=Lc                     SS K n[        X5      u  p4Uc  g [        U5      nU" U 5      nX6l        Xl        UR
                  R                  U5      Ul        XFl        UR
                  R                  U5      Ul	        U$ r   )
r"   r   rF   r<   r\   r   r]   r^   r{   rz   )r_   r`   r"   r<   r   rb   rk   s          r   rD   rD   4  sq    4XHGbJ
X
CKL77##H-CL *GG,,];CJr   c           	        ^	 SS K nSS KnSSKJn  UR                  R                  U SSR                  " UR                  SS 6 S5      n/ m	S[        S[        S	S 4U	4S
 jjnU" U UUUUUS9  T	(       a  [        U T	5        UR                  R                  U5      (       a,  XuR                  ;  a  UR                  R                  U5        g g g )Nr   )apply_actionlibpython{:d}.{:d}r   site-packagesr2  r   returnc                 (   > TR                  U 5        g r   )r'   )r2  r   paths_stales     r   remove_error_fn/_extension_sync_wheels.<locals>.remove_error_fn_  s    8$r   )rc  local_dir_site_packagesrV  rd  r  r  )r"   r   &_bpy_internal.extensions.wheel_managerr  r   r%   r2   r\  r   rQ   r   r   r'   )
rc  rV  r  rd  r"   r   r  r  r  r  s
            @r   re  re  K  s     C ggll  #"2"21Q"78	 K%# %I %$ %  7' !)[9	ww~~-.."((2HHOO34 3 /r   c                  H    Sn U [         R                  ;  a  [        U SSS9  g g )NrT  Tr   r   )r   r   r   r   s    r   r   r   v  s&    K,---{> .r   c                   $    \ rS rSrSr0 0 4rSrSrg)_ext_globali}  r   N)r   
__module____qualname____firstlineno__	__slots__
idmap_pairmodule_handle__static_attributes__r   r   r   r  r  }  s    I RJ Mr   r  bl_extr   zblender_manifest.tomlc                    U R                  [        5      (       d  [        S5      eU [        [        5      S  R	                  S5      SS S2   u  pU(       a  U(       d  [        S5      eSU;   a,  [        SR                  UR                  S5      S-   5      5      eUR                  5       (       a  UR                  5       (       d  [        S5      eX4$ )	Nz(The "package" does not name an extensionr   r   r   zEThe "package" is expected to be a module name containing 3 componentszQThe "package" is expected to be a module name containing 3 components, found {:d}   z0The "package" contains non-identifier characters)rB   rC   
ValueErrorrM   r   r2   countisidentifier)rq   rI  
pkg_idnames      r    _extension_module_name_decomposer    s     ;<<EFF%c*G&H&IJTTUXYZ[Z^]^Z^_KJbcc
jnuuS!A%
  	
 $$&&:+B+B+D+DMNN""r   c                      0 n 0 n[         R                  R                   HN  nUR                  (       a  UR                  XR                  5       '   M2  UR                  XR                  5       '   MP     X4$ r   )r   r.   r/   r0   r   
as_pointer)repos_idmaprepos_idmap_disabledr5   s      r   _extension_preferences_idmapr    s\    K''--<<-1[[K)*6:kk !23	 .
 ,,r   c                      0 n [         R                  R                   H.  nUR                  (       d  M  UR                  XR
                  '   M0     U $ r   )r   r.   r/   r0   r1   r   )
repos_dictr5   s     r   #_extension_dirpath_from_preferencesr    s?    J''--||"&..
;; . r   c                      0 n [         R                  R                  5        H  u  p UR                  S   nX0U'   M     U $ ! [         a    Sn Nf = f)Nr   r-   )r  r  submodule_itemsr   rQ   )
repos_info	module_idr   r6   s       r   _extension_dirpath_from_handler    s_    J(66FFH		ooa(G !(9 I   	G	s   A  AAc                \   / nU(       d  U(       d  U(       d  U(       d	  U(       d  U$ 0 n[         R                   H\  nUR                  n	U	R                  [        5      (       d  M+  U	[        [        5      S  R                  S5      SS S2   u  p XU
   U'   M^     0 nU R                  5        HX  u  p0 n[        U5       H=  nUR                  S5      (       a  M  [        X5      n[        US5      (       d  M9  XU'   M?     XU
'   AMZ     U(       ax  U Hr  u  n
nUR                  U
0 5      nUR                  U
0 5      nUR                  5        H4  u  pSR                  [        X5      nSnSnUR!                  UUUU45        M6     Mt     U H  u  nnUR                  U0 5      nUR                  U0 5      nUR                  5        H  u  p[        USS5      (       d  M  SR                  [        UU5      nSR                  [        UU5      n[#        USSS	9  UR                  U5      nUS Ln[        US
S5      nUR!                  UUUU45        M     M     U H  u  nnUR                  U0 5      nUR                  U0 5      nUR                  5        HK  u  pUR                  U5      nUb  [        USS5      (       a  M-  SR                  [        UU5      nUUl        MM     M     U(       a  [         R$                  R&                   Vs0 s H  nUR                  U_M     nnU H  n
UR                  U
0 5      nUR                  U
0 5      nUR                  U
5      nSnU(       a  UR(                  (       d  SnUR                  5        H&  u  pSR                  [        X5      n[#        UUSS	9  M(     AM     AU(       aT  U HN  nUR                  U0 5      nUR+                  5        H%  nSR                  [        UU5      n[#        USSS	9  M'     MP     U$ ! [         a
    X0Xz'    GM  f = fs  snf )Nr   r   r   r
  r   z{:s}.{:s}.{:s}TF)r   r   r   )r   r   r   rB   rC   rM   r   KeyErrorr  dirrY   hasattrry   r   r2   r3   r'   r   r.   r/   r0   rv   )r  submodules_delsubmodules_addsubmodules_rename_modulesubmodules_del_disabled!submodules_rename_module_disabledaddons_to_enableaddon_userdef_infor   r   r  submodule_idaddon_runtime_inforI  extensions_infork   _dirpathrepo_userdefrepo_runtimemodule_name_nextr   r   module_id_prevmodule_id_nextmodule_name_prevr5   repo_module_maps                              r   /_initialize_extension_repos_post_addons_preparer    sR    $#- $$  !>??"(-J)K)L"M"W"WX["\]^]a`a]a"b		B:?y),7 % "/"?"?"A	,L&&s+++4C3 344,/L) - )89% #B  $2Ix-11)R@L-11)R@L'3'9'9';##3#:#:;OQZ#i "!
 '')95+z(Z[ (<	 $2 +C&)--nbA)--nbA!-!3!3!5L3 3U;;/667K^]ij/667K^]ij$%N $$\2Et+K &<eDJ##%5uk:$VW "6 +C +L&)--nbA)--nbA#/#5#5#7L""<0C730CU#K#K  0667K^]ij+EL $8 +L 9E9P9P9V9VW9V4;;,9VW'I-11)R@L-11)R@L"&&y1DKDLL $%1%7%7%9!#3#:#:;OQZ#i (kSWX &:  ( 5N-11."EL , 1 1 3#3#:#:;OQ_am#n (dDQ !4 6 m  	B-9,A)	Bz Xs   PP)P&%P&c           
          U (       d  g [        U  VVs/ s H	  u  n    o!PM     snnS9  SnU  H  u  ppVUb  Xl        [        XUS9b  M  SnM      U(       a
  [        5         [        5         g s  snnf )N)r   Fr  T)r   r   r   _is_first_reset)r  r  r
  
any_failedr   r   r   s          r   /_initialize_extension_repos_post_addons_restorer  E  s     br-sbrC^DTVWYZ\].>br-stJ>N:	++L"
S[J ?O   .ts   A+
c                  *    [        5       [        l        g r   )r  r  r  )r
  s    r   _initialize_extension_repos_prer  `  s    9;Kr   is_firstc           	         [        5         U (       + n[        5       n[        5       n[        R                  u  pV[        5       u  pxUR                  5        V	V
s0 s H  u  pX_M	     nn	n
[        UR                  5       5       H  u  pX;  d  M  X\	 M     / n/ n/ n/ n[        5       n[        5       nUR                  5        Hy  u  nnUU   nUR                  U5      nUc  M!  UU:w  a5  UR                  UU45        UR                  U5        UR                  U5        UX=   :w  d  Mf  UR                  UU45        M{     UR                  5        H)  u  nnUU;  d  M  UU;  d  M  UR                  UU45        M+     UR                  5        H'  u  nnUU;  d  M  UU;  d  M  UR                  U5        M)     U(       a  / n/ nUR                  5        H$  u  pX;  d  M  X;  d  M  UR                  U5        M&     UR                  5        H7  u  nnUR                  U5      nUc  M  UU:w  d  M$  UR                  UU45        M9     [        [        R                  UUUUUS9nAA[        R                  nU H  nUR                  U5        M     U H  u  nnUR                  UU5        M     U H  u  nnUR!                  UU5        M     U H  u  nnUR#                  UU5        M     [        R                  S   R%                  5         [        R                  S   R%                  5         U(       a  ['        W5        U(       d  U(       d  U(       a  [)        5         g g s  sn
n	f )N)r  r  r  r  r  r   r>   )r   r  r  r  r  r  r   r   ru   ry   r'   ro  r  r  unregister_submoduleregister_submodulerename_submodulerename_directoryrt   r  r  )r  r
  	do_addonsrepos_info_prevrepos_info_nextrepos_idmap_prevrepos_idmap_prev_disabledrepos_idmap_nextrepos_idmap_next_disabledr   r[   repos_idmap_next_reverserepo_id_prevr  r  r  r  submodules_rename_dirpathrenamed_prevrenamed_nextr  dirpath_nextr   r  r6   r  r  r  repo_id_nextr  r  s                                  r    _initialize_extension_repos_postr  e  sc    ()I 56O9;O 3>2H2H/2N2P/ >N=S=S=UV=Uzs
=UV )--=-C-C-E(F$0 . )G NN! "5L5L )8(=(=(?$*>: *--g6! ^+$++^^,LM^,^, ?::%,,nl-KL% )@* .335	7_,9L3P!!9g"67 6  /446	8_,9L3P!!),  7 "$,.) -F,K,K,M(L!B!9'..~> -N -F,K,K,M(L.6::<HN%/188..9YZ -N K%%))%=$;.O
 $%F  --M#	**95 $,	7((G< -*B&&&~~F +C7	7&&y': 8 1##%1##%78HI +D ,EQ  Ws   M)r  c           	         SS K nSS KnUR                  R                  U SSSR	                  UR
                  R                  UR
                  R                  5      S5      nU(       a4  UR                  R                  U5      (       d  UR                  U5        SnOUR                  R                  U5      nU(       a  SSK
Jn  S n[        U" 5       5      =n(       a'  [        UR                  5       H  u  pX;   d  M  U	n  O   Uc  UR                  R                  U5        O8UR                  R                  Xt5        O UR                  R!                  U5        U(       a  U$ S $ ! ["         a     Nf = f)Nr   r  r  r  r  T)getsitepackages)r"   r   r   r%   r2   r\  majorminorr   r  siter  ru   r#   r'   insertr   r  )r]  r  r"   r   site_packagesfoundr  indexbuiltin_site_packagesr)   r6   s              r   $_initialize_extensions_site_packagesr    s0     GGLL  !1!1!7!79I9I9O9OPM ww~~m,,KK&}-
 	)$'(9$:: :'1
3E 2 =HHOOM*HHOOE1	HHOOM* "=+t+  		s   ?E% %
E21E2c                     SSK Jn   U " [        5      nUR                  5         U[        l        [        R                  R                  S5      n[        US9  [        USS SS S9  [        SS9  [        R                  R                  R                  R                  [         5        [        R                  R                  R"                  R                  [        5        g )Nr   )JunctionModuleHandler  )r]  Trp  r   rq  rd  r  )(_bpy_internal.extensions.junction_moduler  r3   register_moduler  r  r   r   r   r  rs  r  r@   handlers_extension_repos_update_prer'   r  _extension_repos_update_post)r  r  r]  s      r   r   r     s    M()=>M!!# -K::33LA )>RS '"! %d3 	HH11889XYHH2299:Z[r   c                 X    [        [        R                  R                  S5      U USUS9  g)a_  
Ensure data relating to extensions is up to date.
This should be called after extensions on the file-system have changed.

:param ensure_wheels: When true, refresh installed wheels with wheels used by extensions.
:type ensure_wheels: bool
:param addon_modules_pending: Refresh these add-ons by listing their package names, as if they are enabled.
   This is needed so wheels can be setup before the add-on is enabled.
:type addon_modules_pending: Sequence[str] | None
:param handle_error: Called in the case of an error, taking an exception argument.
:type handle_error: Callable[[Exception], None] | None
r  Fr  N)rs  r   r   r   )rp  r   r   s      r   r   r   6  s*    & '

  .#3"r   c                  `	  ^ [         R                  SL a  [        $ SS Kn SS KmS[         l        [        R                  5         TR                  R                  TR                  R                  TR                  R                  [        R                  5      S5      5      TR                  -   TR                  R                  TR                  R                  TR                  R                  [        S5      R                  5      S5      5      TR                  -   TR                  R                  TR                  R                  TR                  5      5      TR                  -   /U4S j[        5        5       Q7n0 n/ nU R                  R!                  5        H  u  pEUS:X  a  M  [#        USS 5      =(       d    SnU(       d  M,  TR                  R                  U5      nUR%                  U5      (       a  M_  UR%                  [&        5      (       ah  UR)                  S	[+        [&        5      5      S
:w  aC  UR-                  S	5      S:  a  M  TR                  R                  U5      TR                  -   X$'   M  M  UR/                  XF45        M     [1        S UR3                  5        5       5      n[5        U4S jU 5       5      nU(       Ga  U H  u  pU
R%                  U5      (       d  M  SnUR!                  5        HI  u  pLU
R%                  U5      (       d  M   [        U   nUR/                  SR9                  U	5      5        Sn  O   U(       a  M   e   U R                   GH  nTR                  R                  U5      nUR%                  U5      (       a  M7  X;   d  UR%                  U5      (       d  MT  SnUR!                  5        H  u  pLXR;                  TR                  5      :X  d  UR%                  U5      (       d  M;   [        U   nUR/                  SR9                  SR9                  TR                  TR                  R=                  X5      5      5      5        Sn  O   U(       a  GM   e   [        $ ! [6         a    / =n[        U'    GNof = f! [6         a    / =n[        U'    Nf = f)NFr   z..bl_uic              3   t   >#    U  H-  nTR                   R                  U5      TR                  -   v   M/     g 7fr   )r   normpathsepr   r   r"   s     r   r   +_extensions_warnings_get.<locals>.<genexpr>n  s)     	>gd"''

4
 266
)gs   58__main__r\   r-   r   r   c              3   $   #    U  H  ov   M     g 7fr   r   )r   r   s     r   r   r    s     O-NTD-Ns   c              3   X   >#    U  H  oR                  TR                  5      v   M!     g 7fr   )rN   r  r  s     r   r   r    s     !R/$++bff"5"5/s   '*z,Policy violation with top level module: {:s}Tz$Policy violation with sys.path: {:s}z	.{:s}{:s})_extensions_warnings_getr   _extensions_warningsr   r"   rt   r   r  r%   r  r   r\   r  
__import__r   r   r   rY   rB   rC   findrM   r  r'   r  r   ru   r  r2   rN   relpath)r   dirs_skip_expectedextensions_directory_mapmodules_otherr   r   module_filedirs_extensionsdirs_extensions_noslashmodule_other_namemodule_other_filer  module_dirpathwarning_listr   r"   s                  @r   r	  r	  R  s   ))U2## ).&  	bggoodmm&DdKLrvvU
bggooj6I6R6R&SUYZ[^`^d^dd
56?
 
?eg	>  "M"{{002*$fj$7=2gg&&{3!!"455!!"?@@S)F%GHBN $$S)A-8:8TWYW]W]8](5 O   +!;<3  36 O-E-L-L-NOOO!!R/!RR4A0$//@@ E/G/M/M/O+(33NCCJ#7#DL ##$R$Y$YZk$lm 0P 5L5! 5B$ HHD77##D)D1223t7W7WE/G/M/M/O+ 5 5bff ==Q_A`A`J#7#DL ##:AA#**266277??43XY
  0P 5L51 4  C   JGIIL#7#DJ*   JGIIL#7#DJs$   	Q9	R9RRR-,R-c                  0    S[         l        S[        l        g )NT)r	  r   r   r   r   r   r  r    s     *.&Gr   )T)r  N)TNN)E__all__bpyr   contextpreferencesr   rL   rs   r   r   r
  r  r   r   r7   rl   r   r   r   r   r   r   r   r   r   r	   r   r   r   r
   r  r  r  r   r   r   r4  r9  r;  rQ  rW  ra  rf  rs  r|  r   rD   re  r   r  r3   rC   r   r  r  r  r  r  r  r@   r  r   r  r  r  r   r   r	  r  r   r   r   <module>r     s  
 ||''       *$6Sl %8 *Z 0 !"  (DA#! (-PUdh _D ).uSW 24j !& ""J48  '+ +DM="0(GV$(pcFVHVGTJ&`Y
M"`.%5V?     4s : 5 #6-
sn6 < < 27 y yx JO /,d\F "8l ^ &*  "r   