
    ziY                       d Z ddlmZ ddlZddlZddlZddlmZmZ ddl	m
Z
mZmZmZ ddlmZmZ ddlmZmZ ddlmZ dd	lmZ dd
lmZ 	 ddlmZ n# e$ r	 ddlmZ Y nw xY we
r ddlZddlmZm Z m!Z! ddl"m#Z# ddl$m%Z% ddl&m'Z'  ej(        e)          Z*dZ+e,ej-        ej.        fZ/ G d de          Z0d:dZ1 G d d          Z2 G d d          Z3d;d"Z4d<d'Z5d<d(Z6d<d)Z7d=d+Z8d>d.Z9d?d0Z:d<d1Z;d@d8Z<dAd9Z=dS )Bz"Build configuration file handling.    )annotationsN)getenvpath)TYPE_CHECKINGAnyCallable
NamedTuple)ConfigErrorExtensionError)___)logging)fs_encoding)NoneType)chdir)_chdir)	GeneratorIteratorSequence)Sphinx)BuildEnvironment)Tagszconf.pyc                  .    e Zd ZU ded<   ded<   ded<   dS )ConfigValuestrnamer   value
bool | strrebuildN)__name__
__module____qualname____annotations__     X/var/www/tmov.alphamb/tmov_inventario/venv/lib/python3.11/site-packages/sphinx/config.pyr   r   $   s0         IIIJJJr%   r   objr   returnboolc                L   t          | t                    rdS t          | t                    r<|                                 D ]&\  }}t	          |          rt	          |          s dS 'n;t          | t
          t          t          f          rt          d | D                       S dS )z'Check if object is serializable or not.Fc              3  4   K   | ]}t          |          V  d S N)is_serializable).0is     r&   	<genexpr>z"is_serializable.<locals>.<genexpr>3   s*      33!?1%%333333r%   T)	
isinstanceUNSERIALIZABLE_TYPESdictitemsr-   listtuplesetall)r'   keyr   s      r&   r-   r-   *   s    #+,, 4u	C		 4))++ 	 	JC"3'' u/E/E uu	 
C$s+	,	, 433s3333334r%   c                  "    e Zd ZdZddZdd
ZdS )ENUMzRepresents the candidates which a config value should be one of.

    Example:
        app.add_config_value('latex_show_urls', 'no', None, ENUM('no', 'footnote', 'inline'))
    
candidatesstr | bool | Noner(   Nonec                    || _         d S r,   r<   )selfr<   s     r&   __init__zENUM.__init__>   s    $r%   r   str | list | tupler)   c                     t          |t          t          f          rt           fd|D                       S | j        v S )Nc              3  *   K   | ]}|j         v V  d S r,   r@   )r.   itemrA   s     r&   r0   zENUM.match.<locals>.<genexpr>C   s*      AA4tt.AAAAAAr%   )r1   r5   r6   r8   r<   )rA   r   s   ` r&   matchz
ENUM.matchA   sI    edE]++ 	,AAAA5AAAAAADO++r%   N)r<   r=   r(   r>   )r   rC   r(   r)   )r    r!   r"   __doc__rB   rG   r$   r%   r&   r;   r;   8   sF         
% % % %, , , , , ,r%   r;   c            
         e Zd ZU dZi dddg fdddg fddd	eeegfd
d d	eeegfdddg fdddg fdddg fdddegfdddegfddgdg fdddegfdddg fddd edddd          fdddg fd d! dg fd"d#d$idefd%d&dg fi d'g degfd(d)gdegfd*ddegfd+ddg fd,ddg fd-dde	gfd.d/d ed/d0d1          fd2ddg fd3ddg fd4dd	egfd5d6dg fd7i dg fd8g d	g fd9dd	egfd:ddg fd;g dg fd<g d	g fi d=ddegfd>ddegfd?ddg fd@dAde
gfdBddegfdCi dg fdDddg fdEddg fdFg deeegfdGg deeegfdHddg fdIdJdg fdKi dg fdLddedhfdMddg fdNddegfdOddg fddg fddg fddegfddg fdPdg fdQgdRdSgdTdg fddg fdUZdVedW<   	 	 ddd]Ze	 	 dddc            ZddhZddiZddjZddkZddlZddmZddnZddoZddqZddsZddwZddzZdd|Zdd~ZdS )Configa  Configuration file abstraction.

    The config object makes the values of all config values available as
    attributes.

    It is exposed via the :py:class:`~sphinx.application.Sphinx`\ ``.config``
    and :py:class:`sphinx.environment.BuildEnvironment`\ ``.config`` attributes.
    For example, to get the value of :confval:`language`, use either
    ``app.config.language`` or ``env.config.language``.
    projectPythonenvauthorunknownproject_copyright html	copyrightc                    | j         S r,   )rP   )cs    r&   <lambda>zConfig.<lambda>^   s	     3 r%   versionreleasetoday	today_fmtNlanguageenlocale_dirslocalesfigure_language_filenamez{root}.{language}{ext} gettext_allow_fuzzy_translationsFgettexttranslation_progress_classesT
translateduntranslated
master_docindexroot_docc                    | j         S r,   )re   )configs    r&   rV   zConfig.<lambda>m   s	    F$5 r%   source_suffixz.rstrestructuredtextsource_encodingz	utf-8-sigexclude_patternsinclude_patternsz**default_roleadd_function_parenthesesadd_module_namestoc_object_entriestoc_object_entries_show_parentsdomainr8   hidetrim_footnote_reference_spaceshow_authorspygments_stylehighlight_languagedefaulthighlight_optionstemplates_pathtemplate_bridgekeep_warningssuppress_warningsmodindex_common_prefix
rst_epilog
rst_prologtrim_doctest_flagsprimary_domainpyneeds_sphinxneeds_extensionsmanpages_urlnitpickynitpick_ignorenitpick_ignore_regexnumfignumfig_secnum_depth   numfig_formatmaximum_signature_line_lengthmath_number_allmath_eqref_formatmath_numfigqDejamantext)	languagesbuilders)
tls_verifytls_cacerts
user_agentsmartquotessmartquotes_actionsmartquotes_excludesoption_emphasise_placeholderszdict[str, tuple]config_valuesri   dict[str, Any] | None	overridesr(   r>   c                   |pi }|t          |          ni | _        t          j                                        | _        || _        |                    dd           | _        d| j        v rnt          | j        d         t                    r1| j                            d                              d          |d<   n| j                            d          |d<   |                    dg           | _        d S )Nsetup
extensions,)r3   r   rJ   r   copyvalues_raw_configgetr   r1   r   popsplitr   )rA   ri   r   s      r&   rB   zConfig.__init__   s    2,5,Air*//11!&,jj$&?&?
4>))$.6<< H'+~'9'9,'G'G'M'Mc'R'R|$$'+~'9'9,'G'G|$%+ZZb%A%Ar%   confdirstr | os.PathLike[str]dict | NonetagsTags | Nonec                \   t          j        |t                    }t          j        |          st	          t          d          |z            t          ||          }|                    dd          ,t          	                    t          d                     d|d<    | ||pi           S )z/Create a Config object from configuration file.z4config directory doesn't contain a conf.py file (%s)r[   .NzInvalid configuration value found: 'language = None'. Update your configuration to a valid language code. Falling back to 'en' (English).r\   )
r   joinCONFIG_FILENAMEisfiler
   r   eval_config_filer   loggerwarning)clsr   r   r   filename	namespaces         r&   readzConfig.read   s     9Wo66{8$$ 	'b!WXX%& ' ' '$Xt44	 ==S))1NN2 @ A A B B B %)Ij!s9io2...r%   r   r   r   r   c                   t          |t                    s|S | j        |         d         }| j        |         d         t          k    r|S | j        |         d         t          t          hk    r|dk    rdS |dk    rdS |S t          |          t          u s| j        |         d         t          gk    r|dk    rdS t	          |          S t          |t                    r$t          t          d          ||dz   fz            t          |t                    r|
                    d	          S t          |t                    rD	 t          |          S # t          $ r'}t          t          d
          ||fz            |d }~ww xY wt          |          r|S |4t          |t                    st          t          d          |z            |S )Nr      0F1TzZcannot override dictionary config setting %r, ignoring (use %r to set individual elements)z
.key=valuer   z/invalid number %r for config value %r, ignoringzAcannot override config setting %r with unsupported type, ignoring)r1   r   r   r   r)   typer3   
ValueErrorr   r5   r   intcallable)rA   r   r   defvalueexcs        r&   convert_overrideszConfig.convert_overrides   s   %%% &	L{4(+H{4 #s**T"1%$44C<< 5c\\4 Lh4''4;t+<Q+?D6+I+IC<< 5;;&Hd++   %S "T "T"&|(;!<"= > > > Hd++ {{3'''Hc** =u::%! = = =$R(Y%Z%Z&+T]&3 4 49<== (## %j3.G.G%  %5 "6 "68<"= > > > s   E 
F"E<<Fc                    g d}|D ]}	 || j         v r*|                     || j         |                   | j        |<   n|| j        v r| j        |         | j        |<   U# t          $ r%}t
                              d|           Y d}~d}~ww xY wdS )zs
        Initialize some limited config variables before initializing i18n and loading
        extensions.
        )r   r   r[   r]   %sN)r   r   __dict__r   r   r   r   )rA   	variablesr   r   s       r&   pre_init_valueszConfig.pre_init_values   s    
 UTT	 	* 	*D*4>))*.*@*@t~VZG[*\*\DM$''T---*.*:4*@DM$' * * *tS))))))))*	* 	*s   AA
B&BBc                .   | j         }| j                                        D ]\  }}	 d|v r3|                    dd          \  }}||                    |i           |<   =|| j        vr)t                              t          d          |           ot          |t                    r|                     ||          ||<   n|||<   # t          $ r%}t                              d|           Y d }~d }~ww xY w|D ]}|| j        v r||         | j        |<   d S )N.r   z-unknown config value %r in override, ignoringr   )r   r   r4   r   
setdefaultr   r   r   r   r1   r   r   r   r   )rA   ri   valnamer   realvalnamer9   r   r   s           r&   init_valueszConfig.init_values   sR   !"n2244 	* 	*NGU*'>>'.}}S!'<'<$K>CF%%k266s;$+--NN2&U#V#V#*, , ,eS)) ,&*&<&<We&L&LF7OO&+F7O * * *tS))))))))* 	3 	3Dt{""&,Tld#	3 	3s#   6C1C4C
C4C//C4c                    | j         }|D ]$}|| j        vr|| j        v r||         | j        |<   %t          d|            dS )zc
        Initialize additional config variables that are added after init_values() called.
        N)r   r   r   check_confval_types)rA   ri   r   s      r&   post_init_valueszConfig.post_init_values  s[     ! 	3 	3D4=((TT[-@-@&,Tld#D$'''''r%   c                    |                     d          rt          |          || j        vrt          t          d          |z            | j        |         d         }t	          |          r ||           S |S )Nr   zNo such config value: %sr   )
startswithAttributeErrorr   r   r   )rA   r   rz   s      r&   __getattr__zConfig.__getattr__  s    ??3 	' &&&t{"" $>!?!?$!FGGG+d#A&G 	!74== r%   c                "    t          | |          S r,   )getattrrA   r   s     r&   __getitem__zConfig.__getitem__&  s    tT"""r%   c                (    t          | ||           d S r,   )setattrrA   r   r   s      r&   __setitem__zConfig.__setitem__)  s    dE"""""r%   c                &    t          | |           d S r,   )delattrr   s     r&   __delitem__zConfig.__delitem__,  s    dr%   r)   c                    || j         v S r,   )r   r   s     r&   __contains__zConfig.__contains__/  s    t{""r%   "Generator[ConfigValue, None, None]c              #     K   | j                                         D ],\  }}t          |t          | |          |d                   V  -d S )Nr   )r   r4   r   r   r   s      r&   __iter__zConfig.__iter__2  s^      ;,,.. 	C 	CKD%dGD$$7$7qBBBBBB	C 	Cr%   r   r   typesc                p    || j         v rt          t          d          |z            |||f| j         |<   d S )NzConfig value %r already present)r   r   r   )rA   r   rz   r   r   s        r&   addz
Config.add6  sD    4; $E!F!F!MNNN$gu5Dr%   str | Sequence[str]Iterator[ConfigValue]c                P    t          t                    rgfd| D             S )Nc              3  .   K   | ]}|j         v |V  d S r,   )r   )r.   r   r   s     r&   r0   z Config.filter.<locals>.<genexpr>>  s/      DD%5=G+C+C+C+C+C+CDDr%   )r1   r   )rA   r   s    `r&   filterzConfig.filter;  s6    gs## 	 iGDDDD4DDDDr%   r3   c                N   i }| j                                         D ]/\  }}|                    d          st          |          s*|||<   0i |d<   | j                                        D ]:\  }}t          | |          }t          |          sd}||d         df|d         |<   ;|S )z'Obtains serializable data for pickling.r   r   Nr   )r   r4   r   r-   r   r   )rA   r   r9   r   
real_values        r&   __getstate__zConfig.__getstate__@  s     ---// 	& 	&JC~~c"" &/%*@*@ & %  +++-- 	C 	CJC s++J":.. "!
 (258T&BHXs##r%   statec                :    | j                             |           d S r,   )r   update)rA   r   s     r&   __setstate__zConfig.__setstate__W  s    U#####r%   )NN)ri   r   r   r   r(   r>   )r   r   r   r   r   r   r(   rJ   )r   r   r   r   r(   r   )r(   r>   )r   r   r(   r   )r   r   r   r   r(   r>   )r   r   r(   r>   )r   r   r(   r)   )r(   r   )
r   r   rz   r   r   r   r   r   r(   r>   )r   r   r(   r   )r(   r3   )r   r3   r(   r>   ) r    r!   r"   rH   r   r6   r5   r;   r   r)   r   r7   r   r   r#   rB   classmethodr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r$   r%   r&   rJ   rJ   H   s        	 	 C'HeR(C' 	9eR(C' 	b&3t*<=	C'
 	33Vc5$=OPC' 	Br?C' 	Br?C' 	"eRC' 	dEC5)C' 	T53%(C' 	UB/C' 	#%=use$LC' 	+UIr,BC'  	')-dE<)X)X)Z!C'& 	wr*'C'( 	55ubA)C'* 	6#56sC+C', 	K3-C' C'. 	R./C'0 	dVUSE21C'2 	use,3C'4 	#T5"$55C'6 	T5"-7C'8 	tUTF39C': 	*He,0D5&,I,I,K;C'> 	(%);?C'@ 	r*AC'B 	4#/CC'D 	y%4EC'F 	b%_GC'H 	2vr*IC'J 	D&3%0KC'L 	%+MC'N 	b%_OC'P 	!2vr"2QC' C' C'R 	tUSE*SC'T 	tUSE*UC'V 	tUB/WC'X 	4
3YC'Z 	tcU+[C'\ 	RrN]C'^ 	ub)_C'` 	UD"%aC'b 	2tc4%78cC'd 	TCu+= >eC'f 	5%$gC'h 	5"~iC'j 	"eRkC'l 	($T{)CmC'n 	E5"-oC'p 	dEC51qC'r 	eR(sC' C't UB'eR(USE*eR($eR004v/4fo"? "?!&!, +0);EC' C' C'M C C C CJ 8<48B B B B B LP!%/ / / / [/*' ' ' 'R* * * *3 3 3 3,	( 	( 	( 	(   # # # ## # # #   # # # #C C C C6 6 6 6
E E E E
   .$ $ $ $ $ $r%   rJ   r   r   r   r   dict[str, Any]c                   i }| |d<   ||d<   t          t          j        |                     5  	 t          | d          5 }t	          |                                |                     t                    d          }t          ||           ddd           n# 1 swxY w Y   n# t          $ r'}t          d          }t          ||z            |d}~wt          $ r$}t          d          }t          |          |d}~wt          $ r  t          $ r8}t          d          }t          |t          j                    z            |d}~ww xY wddd           n# 1 swxY w Y   |S )	zEvaluate a config file.__file__r   rbexecNz7There is a syntax error in your configuration file: %s
zKThe configuration file (or one of the modules it imports) called sys.exit()z=There is a programmable error in your configuration file:

%s)r   r   dirnameopencompiler   encoder   r   SyntaxErrorr   r
   
SystemExit	Exception	traceback
format_exc)r   r   r   fcodeerrmsgr   s           r&   r   r   [  s    "I$IjIf	t|H%%	&	& E E	Eh%% &qvvxx)E)EvNNT9%%%& & & & & & & & & & & & & & &  	2 	2 	2OPPCcCi((c1 	, 	, 	, ) * *Cc""+ 	 	 	 	E 	E 	EVWWCcI$8$:$::;;D	E!E E E E E E E E E E E E E E E( sq   EB$ ABB$B	B$B	 B$#E$
E."CEC<<E3EEEE!Eappr   ri   r>   c                4   |j         }t          |t                    r|di|_         dS t          |t          t          f          rd |D             |_         dS t          |t
                    s,t                              t          d|z                       dS dS )zConvert old styled source_suffix to new styled one.

    * old style: str or list
    * new style: a dict which maps from fileext to filetype
    Nc                    i | ]}|d S r,   r$   )r.   ss     r&   
<dictcomp>z)convert_source_suffix.<locals>.<dictcomp>  s    ???A4???r%   zeThe config value `source_suffix' expects a string, list of strings, or dictionary. But `%r' is given.)	rj   r1   r   r5   r6   r3   r   r   r   )r  ri   rj   s      r&   convert_source_suffixr  x  s     (M-%% A
 !.t4	MD%=	1	1 A?????t,, Ar /1>? @ @ 	A 	A 	A 	A 	AA Ar%   c                    |j         }|r;t          d |                                D                       s|j        |i|_         dS dS dS )zConvert old styled highlight_options to new styled one.

    * old style: options
    * new style: a dict which maps from language name to options
    c              3  @   K   | ]}t          |t                    V  d S r,   )r1   r3   )r.   vs     r&   r0   z,convert_highlight_options.<locals>.<genexpr>  s,      II1:a..IIIIIIr%   N)r{   r8   r   ry   )r  ri   optionss      r&   convert_highlight_optionsr    si     &G -sII8H8HIIIII -$*$=$+$-   - - - -r%   c                    t          d          t          d          t          d          t          d          d}|                    |j                   ||_        dS )z$Initialize :confval:`numfig_format`.z
Section %szFig. %szTable %sz
Listing %s)sectionfiguretablez
code-blockN)r   r   r   )r  ri   r   s      r&   init_numfig_formatr    sY     !, ||
mm#$\??4 4M -...(Fr%   _appc                Z   t          d          x}dS t          t          j        t	          |                    j                  dD ]`}||v rZ||         }t          |t                    rt          |          ||<   7fd|D             } t          |          |          ||<   adS )zCorrect values of copyright year that are not coherent with
    the SOURCE_DATE_EPOCH environment variable (if set)

    See https://reproducible-builds.org/specs/source-date-epoch/
    SOURCE_DATE_EPOCHN)rS   epub_copyrightc              3  8   K   | ]}t          |          V  d S r,   )_substitute_copyright_year)r.   xsource_date_epoch_years     r&   r0   z)correct_copyright_year.<locals>.<genexpr>  s0      ^^ST3A7MNN^^^^^^r%   )	r   r   timegmtimer   tm_yearr1   r"  r   )r  ri   source_date_epochkr   r4   r$  s         @r&   correct_copyright_yearr*    s     $$7888A S1B-C-C!D!D!LMM, / /;;)/E%%% /6u>TUUq		^^^^X]^^^'DKK..q	/ /r%   copyright_linereplace_yearc                2   t          |           dk     s| dd                                         s| S | dd         dv r|| dd         z   S | d         dk    r| S | dd                                         r"| d         dv r| dd         |z   | dd         z   S | S )zReplace the year in a single copyright line.

    Legal formats are:

    * ``YYYY``
    * ``YYYY,``
    * ``YYYY ``
    * ``YYYY-YYYY,``
    * ``YYYY-YYYY ``

    The final year in the string is replaced with ``replace_year``.
       N   >   rQ    r   -	   z ,)lenisdigit)r+  r,  s     r&   r"  r"    s     >QnRaR&8&@&@&B&Bacn,,nQRR000aCac""$$ F):d)B)Bbqb!L0>!""3EEEr%   Sphinx | Nonec           
     4   |D ]}|j         |j                 \  }}}t          |          r ||          }||s8|t          u rBt	          |t
                    rf |j        |j                  sPt          d          }t          
                    |                    |j        |j        |j                  d           t          |j                  t          |          u rt          |j                  |v rt          t          |j                  j        t          |j                  fz             t          t          |          j                  z  }|                    t"                     |rt|rt          d          }d |D             }t%          |          dk    r*d	                    |dd
                   d|d
          z   }	nd                    |          }	t          
                    |                    |j        t          |j                  |	          d           .t          d          }t          
                    |                    |j        t          |j                  t          |                    d           dS )zCheck all values for deviation from the default value's type, since
    that can result in TypeErrors all over the place NB.
    NzTThe config value `{name}` has to be a one of {candidates}, but `{current}` is given.)r   currentr<   T)oncezNThe config value `{name}' has type `{current.__name__}'; expected {permitted}.c                $    g | ]}d |j          dS )`')r    )r.   rU   s     r&   
<listcomp>z'check_confval_types.<locals>.<listcomp>  s&    &N&N&NQ'81:'8'8'8&N&N&Nr%   r   z, z, or z or )r   r7  	permittedzZThe config value `{name}' has type `{current.__name__}', defaults to `{default.__name__}'.)r   r7  rz   )r   r   r   r   r1   r;   rG   r   r   r   r   formatr<   r   r7   	__bases__discardobjectr3  r   )
r  ri   confvalrz   r   r   r  common_baseswrapped_annotationsr>  s
             r&   r   r     s     /M /M(.gl(C%+G 	&gfooG?;?#T** $	M$;$W]33 Y 5 6 6szzw|29-5@5K  *  M  MSW  Y Y Y GM""d7mm33GM""k11W] 3 3 =gmATAT@V VWWW 7889L  (((  M 1 2 2&N&N+&N&N&N#*++a//!%+>ss+C!D!D#D+>r+B#D#D"EII !',? @ @Iszzw|26w}2E2E4=  *  ?  ?EI  K K K K  = > >szzw|26w}2E2E26w--  *  A  AGK  M M M M[/M /Mr%   c                    |j         }|rK| j                            |          s3t                              t          d          |           d |_         d S d S d S )Nz%primary_domain %r not found, ignored.)r   registry
has_domainr   r   r   )r  ri   r   s      r&   check_primary_domainrI    sh    *N %cl55nEE %rABBNSSS $% % % %r%   rM   r   addedset[str]changedremovedc                    | j         j        dk    rOd| j        j        vrAd| j        j        v r3t                              t          d                     d| j         _        |S )zjAdjust root_doc to 'contents' to support an old project which does not have
    any root_doc setting.
    rf   contentszkSince v2.0, Sphinx uses "index" as root_doc by default. Please add "root_doc = 'contents'" to your conf.py.)ri   rg   rK   docnamesr   r   r   )r  rM   rJ  rL  rM  s        r&   check_root_docrQ    sp    
 	
w&&3;///#+...r R S S 	T 	T 	T(
Nr%   c                   |                      dt          d           |                      dt          d           |                      dt          d           |                      dt          d           |                      dt
          d           |                      dt          d           |                      dt                     ddddS )Nzconfig-initedi   )priorityzenv-get-outdatedbuiltinT)rW   parallel_read_safeparallel_write_safe)connectr  r  r  r*  r   rI  rQ  )r  s    r&   r   r   $  s    KK!6KEEEKK!:SKIIIKK!3cKBBBKK!7#KFFFKK!4sKCCCKK!5KDDDKK"N333 "#  r%   )r'   r   r(   r)   )r   r   r   r   r(   r   )r  r   ri   rJ   r(   r>   )r  r   ri   rJ   r(   r>   )r+  r   r,  r   r(   r   )r  r5  ri   rJ   r(   r>   )r  r   rM   r   rJ  rK  rL  rK  rM  rK  r(   rK  )r  r   r(   r   )>rH   
__future__r   r%  r  r   osr   r   typingr   r   r   r	   sphinx.errorsr
   r   sphinx.localer   r   sphinx.utilr   sphinx.util.osutilr   sphinx.util.typingr   
contextlibr   ImportErrorr   collections.abcr   r   r   sphinx.applicationr   sphinx.environmentr   sphinx.util.tagsr   	getLoggerr    r   r   r   
ModuleTypeFunctionTyper2   r   r-   r;   rJ   r   r  r  r  r*  r"  r   rI  rQ  r   r$   r%   r&   <module>ri     s-   ( ( " " " " " "               ; ; ; ; ; ; ; ; ; ; ; ; 5 5 5 5 5 5 5 5               * * * * * * ' ' ' ' ' '3        3 3 3222222223  &III==========))))))333333%%%%%%		8	$	$e.0BC     *      , , , , , , , , P$ P$ P$ P$ P$ P$ P$ P$f   :A A A A,
- 
- 
- 
-	) 	) 	) 	)/ / / /*   83M 3M 3M 3Ml% % % %        s   A A! A!