
    e˫                       d dl mZ ddlmZmZ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mZmZmZmZmZmZmZmZmZmZ d dlZd dlZd dlZd dl Z d dl!Z"e"j#        rdd	lm$Z$  G d
 de
          Z%dFdZ& G d d          Z'dGdZ( G d d          Z) G d de)          Z* G d de)          Z+ G d de)          Z, G d de)          Z- G d de-          Z. G d  d!e-          Z/e0dd"d#gfe1i dfd$e0ddfe0ddfe0dg d%fe1i dfd&e0ddfe0dg d'fe2g dfe0d(dfe0d)g d*fd+d,Z3e*e*e+e*e+e+e.e.d-e+e*e/e+e/e+e+e+e*e*e+d.e.e*e.e*e*d/d0Z4 G d1 d2          Z5d3d4d5d6d7d8d9d:Z6dHd>Z7dId@Z8dIdAZ9dIdBZ:dIdCZ;e8e8e9e:e:e;e;dDZ<dE Z=dS )J    )annotations   )IntrospectionInterpreterBUILD_TARGET_FUNCTIONSAstConditionLevelAstIDGeneratorAstIndentationGenerator
AstPrinter)MesonExceptionsetup_vsenv)mlogenvironmentwraps)Token	ArrayNodeArgumentNodeAssignmentNodeBaseStringNodeBooleanNodeElementaryNodeIdNodeFunctionNode
StringNode
SymbolNodeN)BaseNodec                      e Zd ZdS )RewriterExceptionN)__name__
__module____qualname__     8/usr/lib/python3.11/site-packages/mesonbuild/rewriter.pyr   r   %   s        Dr#   r   c                   |                      ddt          ddd           |                      ddd	d
d           |                      dddd	d
d           |                     ddd          }|                    ddgd|          }|                     ddddd           |                     dd t          d         d!         d"         d#d$%           |                     dd&'           |                     d(g d)d*+           |                     d,d-d./           |                    d0d1|2          }|                     d(t          d0         d(         d"         d*+           |                     d3t          t                                                    d4+           |                     d5d6'           |                     d0d-d7/           |                    d8d9gd:|          }|                     d(t          d;         d(         d"         d*+           |                     d<d-d=/           |                    d>d?gd@|          }|                     dAdB'           d S )CNz-sz--sourcedir.SRCDIRzPath to source directory.)typedefaultmetavarhelpz-Vz	--verbose
store_trueFzEnable verbose output)actionr)   r+   z-Sz--skip-errorsskipzSkip errors instead of aborting)destr-   r)   r+   r(   zRewriter commandszRewrite command to execute)r/   titledescriptiontargettgtzModify a target)aliasesr+   formatter_classz--subdir subdirzASubdirectory of the new target (only for the "add_target" action))r)   r/   r+   z--typetgt_typetarget_type   
executablez<Type of the target to add (only for the "add_target" action))r/   choicesr)   r+   zName or ID of the target)r+   	operationaddrm
add_target	rm_targetadd_extra_filesrm_extra_filesinfozAction to execute)r<   r+   sources*zSources to add/remove)nargsr+   kwargszModify keyword arguments)r+   r5   functionzFunction type to modifyidz<ID of the function to modify (can be anything for "project")zPairs of keyword and valuedefault-optionsdefz"Modify the project default optionsdefault_optionsoptionsz(Key, value pairs of configuration optioncommandcmdz Execute a JSON array of commandsjsonzJSON string or file to execute)add_argumentstradd_subparsers
add_parserrewriter_keyslistrewriter_func_kwargskeys)parser	formatter
subparsers
tgt_parser	kw_parser
def_parser
cmd_parsers          r$   add_argumentsrb   *   s   
m#sH[vwww
k,Tklll
oF<Y^  fG  H  H  H&&F:M[w&xxJ &&x%GXjs&ttJD*bx  OR  S  S  SH:}X?VWd?efg?hr~!_  a a aH+EFFFK  2G  2G  2G!4  6 6 6IS7NOOO %%h5Oaj%kkI;h0G0TUV0W 3  5 5 5:t4H4M4M4O4O/P/P 9  ; ; ;4&deee835QRRR &&'85'Pt  GP&  Q  QJK?P1QR]1^_`1a!4  6 6 6IS7abbb &&y5'Hj  }F&  G  GJF)IJJJJJr#   c                      e Zd Zd Zd ZdS )RequiredKeysc                    || _         d S N)rZ   )selfrZ   s     r$   __init__zRequiredKeys.__init__N   s    			r#   c                @     t                     fd            }|S )Nc                 l   t          |           dk    sJ | d         }	j                                        D ]\  }}|d         }|d         }|d         }||vr0||||<   n(t          d                    |j                            t          ||         |          sAt          d                    ||j        t          ||                   j                            |Kt          |t                    sJ ||         |vr*t          d                    ||||                              | i |S )Nr:   r   r   z$Key "{}" is missing in object for {}z8Invalid type of "{}". Required is {} but provided was {}zCInvalid value of "{}": Possible values are {} but provided was "{}")	lenrZ   itemsr   formatr   
isinstancer(   rX   )
wrapped_argswrapped_kwargsrQ   keyvaltypr)   r<   frg   s
           r$   wrappedz&RequiredKeys.__call__.<locals>.wrappedR   sb   |$$))))q/C IOO-- Q QS!fa&a&c>>*#*C/0V17QZ1H1HJ J J!#c(C00 a+,f-3VCtCPSH~~G^-_-_a a a&%gt444443xw../0u17Wc#h1O1OQ Q Q1l5n555r#   r   )rg   rt   ru   s   `` r$   __call__zRequiredKeys.__call__Q   s9    	q	6 	6 	6 	6 	6 
	6. r#   N)r   r    r!   rh   rv   r"   r#   r$   rd   rd   M   s2              r#   rd   rr   rT   returnr   c                F    t          t          dddddd|                     S )Nr6   r   r   r   )r   r   )rr   s    r$   _symbolrz   l   s$    eBAq!VS99:::r#   c                  H    e Zd ZdddZd Zd Zd Zd Zd	 Zd
 Z	d Z
d ZdS )	MTypeBaseNnodeT.Optional[BaseNode]c                    ||                                  | _        n|| _        d | _        |                                 D ]}t	          | j        |          r|| _        d S rf   )	_new_noder}   	node_typesupported_nodesrn   )rg   r}   is      r$   rh   zMTypeBase.__init__p   si    <((DIIDI%%'' 	# 	#A$)Q'' #!"	# 	#r#   c                     t          d          )Nz1Internal error: _new_node of MTypeBase was calledr   rg   s    r$   r   zMTypeBase._new_nodez   s     STTTr#   c                    | j         d uS rf   )r   r   s    r$   
can_modifyzMTypeBase.can_modify~   s    ~T))r#   c                    | j         S rf   )r}   r   s    r$   get_nodezMTypeBase.get_node   s
    yr#   c                    g S rf   r"   r   s    r$   r   zMTypeBase.supported_nodes       	r#   c                z    t          j        dt          j        t          |           j                  d           d S )NzCannot set the value of type--> skippingr   warningboldr(   r   rg   values     r$   	set_valuezMTypeBase.set_value   s1    3TYtDzz?R5S5SUcdddddr#   c                z    t          j        dt          j        t          |           j                  d           d S )NzCannot add a value of typer   r   r   s     r$   	add_valuezMTypeBase.add_value   s1    149T$ZZ=P3Q3QSabbbbbr#   c                z    t          j        dt          j        t          |           j                  d           d S )NzCannot remove a value of typer   r   r   s     r$   remove_valuezMTypeBase.remove_value   1    4diT

@S6T6TVdeeeeer#   c                z    t          j        dt          j        t          |           j                  d           d S )NzCannot remove a regex in typer   r   r   s     r$   remove_regexzMTypeBase.remove_regex   r   r#   rf   r}   r~   )r   r    r!   rh   r   r   r   r   r   r   r   r   r"   r#   r$   r|   r|   o   s        # # # # #U U U* * *    e e ec c cf f ff f f f fr#   r|   c                  4     e Zd Zdd	 fdZd Zd Zd Z xZS )
MTypeStrNr}   r~   c                J    t                                          |           d S rf   superrh   rg   r}   	__class__s     r$   rh   zMTypeStr.__init__   !    r#   c                F    t          t          dddddd d                    S Nr6   r   r   r   r   s    r$   r   zMTypeStr._new_node   s$    %B1ar::;;;r#   c                    t           gS rf   r   r   s    r$   r   zMTypeStr.supported_nodes   
    |r#   c                8    t          |          | j        _        d S rf   rT   r}   r   r   s     r$   r   zMTypeStr.set_value       e**	r#   rf   r   r   r    r!   rh   r   r   r   __classcell__r   s   @r$   r   r      so              < < <  % % % % % % %r#   r   c                  4     e Zd Zdd	 fdZd Zd Zd Z xZS )
	MTypeBoolNr}   r~   c                J    t                                          |           d S rf   r   r   s     r$   rh   zMTypeBool.__init__   r   r#   c                F    t          t          dddddd d                    S )Nr6   r   F)r   r   r   s    r$   r   zMTypeBool._new_node   s$    5RAq$>>???r#   c                    t           gS rf   )r   r   s    r$   r   zMTypeBool.supported_nodes   s
    }r#   c                8    t          |          | j        _        d S rf   )boolr}   r   r   s     r$   r   zMTypeBool.set_value   s    u++	r#   rf   r   r   r   s   @r$   r   r      sr              @ @ @  & & & & & & &r#   r   c                  4     e Zd Zdd	 fdZd Zd Zd Z xZS )
MTypeIDNr}   r~   c                J    t                                          |           d S rf   r   r   s     r$   rh   zMTypeID.__init__   r   r#   c                F    t          t          dddddd d                    S r   r   r   r   s    r$   r   zMTypeID._new_node   s$    eBAq!T266777r#   c                    t           gS rf   r   r   s    r$   r   zMTypeID.supported_nodes   	    xr#   c                8    t          |          | j        _        d S rf   r   r   s     r$   r   zMTypeID.set_value   r   r#   rf   r   r   r   s   @r$   r   r      so              8 8 8  % % % % % % %r#   r   c                  v     e Zd Zdd fdZd Zd Zd Zdd
ZddZd Z	d Z
d Zd Zd Zd Zd ZddZ xZS )	MTypeListNr}   r~   c                J    t                                          |           d S rf   r   r   s     r$   rh   zMTypeList.__init__   r   r#   c                    t          t          d          t          t          dddddd d                    t          d                    S )N[r6   r   ])r   rz   r   r   r   s    r$   r   zMTypeList._new_node   sA    |E"b!Q4QS4T4T'U'UW^_bWcWcdddr#   c                     t          d          )Nz9Internal error: _new_element_node of MTypeList was calledr   r   s     r$   _new_element_nodezMTypeList._new_element_node   s     [\\\r#   c                    t          | j        t                    s=| j        }|                                 | _        | j        j        xj        |gz  c_        d S d S rf   )rn   r}   r   r   args	arguments)rg   tmps     r$   _ensure_array_nodezMTypeList._ensure_array_node   sX    $)Y// 	.)C((DIIN$$-$$$$	. 	.r#   rw   r   c                    dS NFr"   rg   r}   r   s      r$   _check_is_equalzMTypeList._check_is_equal       ur#   regexrT   c                    dS r   r"   rg   r}   r   s      r$   _check_regex_matcheszMTypeList._check_regex_matches   r   r#   c                    t          | j        t                    r9t          | j        j        j                  dk    r| j        j        j        d         S | j        S )Nr   r   )rn   r}   r   rk   r   r   r   s    r$   r   zMTypeList.get_node   sJ    di++ 	349>+,,11y~/22yr#   c                    g S rf   r"   r   s    r$   supported_element_nodesz!MTypeList.supported_element_nodes   r   r#   c                <    t           g|                                 z   S rf   )r   r   r   s    r$   r   zMTypeList.supported_nodes   s    {T99;;;;r#   c                    t          |t                    s|g}|                                  g | j        j        _        |D ]0}| j        j        xj        |                     |          gz  c_        1d S rf   rn   rX   r   r}   r   r   r   rg   r   r   s      r$   r   zMTypeList.set_value   s    %&& 	GE!!!#%	  	D 	DAIN$$)?)?)B)B(CC$$$	D 	Dr#   c                    t          |t                    s|g}|                                  |D ]0}| j        j        xj        |                     |          gz  c_        1d S rf   r   r   s      r$   r   zMTypeList.add_value   sv    %&& 	GE!!! 	D 	DAIN$$)?)?)B)B(CC$$$	D 	Dr#   c                    fd}t          t                    sg|                                  g }| j        j        j        D ] |          s|gz  }|| j        j        _        d S )Nc                0    D ]} |          r dS dS )NTFr"   )r}   j
equal_funcr   r   s     r$   check_remove_nodez3MTypeList._remove_helper.<locals>.check_remove_node   s7        :a##  44 5r#   )rn   rX   r   r}   r   r   )rg   r   r   r   removed_listr   s    ``  @r$   _remove_helperzMTypeList._remove_helper   s    	 	 	 	 	 	 	 %&& 	GE!!!) 	$ 	$A$$Q'' $##/	   r#   c                <    |                      || j                   d S rf   )r   r   r   s     r$   r   zMTypeList.remove_value  s!    E4#788888r#   c                <    |                      || j                   d S rf   )r   r   )rg   r   s     r$   r   zMTypeList.remove_regex  s!    E4#<=====r#   rf   r   rw   r   r   rT   rw   r   )r   rT   )r   r    r!   rh   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   s   @r$   r   r      s              e e e] ] ]. . .          < < <D D DD D D0 0 0 9 9 9> > > > > > > >r#   r   c                  >     e Zd Zdd fdZd ZddZddZd Z xZS )MTypeStrListNr}   r~   c                J    t                                          |           d S rf   r   r   s     r$   rh   zMTypeStrList.__init__  r   r#   c                `    t          t          dddddd t          |                              S r   )r   r   rT   r   s     r$   r   zMTypeStrList._new_element_node  s*    %B1as5zzBBCCCr#   rw   r   c                F    t          |t                    r|j        |k    S dS r   rn   r   r   r   s      r$   r   zMTypeStrList._check_is_equal  s&    dN++ 	':&&ur#   r   rT   c                h    t          |t                    rt          j        ||j                  d uS dS r   rn   r   rematchr   r   s      r$   r   z!MTypeStrList._check_regex_matches  2    dN++ 	;8E4:..d::ur#   c                    t           gS rf   r   r   s    r$   r   z$MTypeStrList.supported_element_nodes  r   r#   rf   r   r   r   	r   r    r!   rh   r   r   r   r   r   r   s   @r$   r   r   
  s              D D D   
   
      r#   r   c                  >     e Zd Zdd fdZd ZddZddZd Z xZS )MTypeIDListNr}   r~   c                J    t                                          |           d S rf   r   r   s     r$   rh   zMTypeIDList.__init__  r   r#   c                `    t          t          dddddd t          |                              S r   )r   r   rT   r   s     r$   r   zMTypeIDList._new_element_node"  s*    eBAq!T3u::>>???r#   rw   r   c                F    t          |t                    r|j        |k    S dS r   rn   r   r   r   s      r$   r   zMTypeIDList._check_is_equal%  s&    dF## 	':&&ur#   r   rT   c                h    t          |t                    rt          j        ||j                  d uS dS r   r   r   s      r$   r   z MTypeIDList._check_regex_matches*  r   r#   c                    t           gS rf   r   r   s    r$   r   z#MTypeIDList.supported_element_nodes/  r   r#   rf   r   r   r   r   r   s   @r$   r   r     s              @ @ @   
   
      r#   r   setdelete)r=   rO   )r   r   r?   remover   rE   rJ   rK   r=   rI   )src_addsrc_rm	target_rm
target_addextra_files_addextra_files_rmrE   r6   r;   )both_librariesr;   jarlibraryshared_libraryshared_modulestatic_library)r2   r=   rF   r7   r9   rN   rI   r2   )languagemethodnativenot_found_messagerequiredstaticversionmodules)build_by_defaultbuild_rpathdependenciesgui_app	link_withexport_dynamicimplibinstallinstall_dirinstall_rpathpie)rN   meson_versionlicensesubproject_dirr  )
dependencyr2   projectc                      e Zd Zd#d$dZd	 Zd%dZd Zd Zd Zd&dZ	d'dZ
 eed                   d             Z eed                   d             Zd(dZ eed                   d             Zd  Zd! Zd"S ))RewriterninjaF	sourcedirrT   	generatorskip_errorsr   c           	        || _         t          |d|t                      t                      t	                      g          | _        || _        g | _        g | _        g | _	        | j
        | j        | j        d| _        d | _        d S )Nr6   )visitorsr  )r+  r   r   r	   r   interpreterr-  modified_nodesto_remove_nodesto_add_nodesprocess_default_optionsprocess_kwargsprocess_target	functions	info_dump)rg   r+  r,  r-  s       r$   rh   zRewriter.__init__h  s    "3Ir9ZhZjZj  mD  mF  mF  HY  H[  H[  Z\  ]  ]  ]& !#;))
 

 r#   c           	        t          j        dt          j        t          j                            | j        t          j                                       | j	        
                                 t          j        dt          j        | j	        j        d                              t          j        dt          j        | j	        j        d                              d S )NzAnalyzing meson file:z  -- Project:descriptive_namez  -- Version:r  )r   logr   ospathjoinr+  r   build_filenamer0  analyzeproject_datacyanr   s    r$   analyze_mesonzRewriter.analyze_mesonv  s    ($)BGLLQ\Qk4l4l*m*mnnn  """$)D,<,IJ\,]"^"^___$)D,<,I),T"U"UVVVVVr#   cmd_typecmd_iddatadictc                h    | j         i | _         || j         vr
i | j         |<   || j         |         |<   d S rf   )r8  )rg   rD  rE  rF  s       r$   add_infozRewriter.add_info|  sA    >!DN4>))')DN8$+/x (((r#   c                    | j         d S t          j                            t	          j        | j         d                     d S )Nr:   )indent)r8  sysstderrwriterR   dumpsr   s    r$   
print_infozRewriter.print_info  s<    >!F
DN1===>>>>>r#   c                    | j         r(t          j        d          t          j        d          fS t          j        d          t          j        d          fS )Nz-->skippingaborting)r-  r   rB  yellowredr   s    r$   on_errorzRewriter.on_error  sK     	=9U##T[%<%<<<y*!5!555r#   c                2    | j         rd S t          d          )Nz Rewriting the meson.build failed)r-  r   r   s    r$   handle_errorzRewriter.handle_error  s!     	4?@@@r#   r2   c           
     l    d fd} ||          }|rt          |          dk    r|d         S t          j        dt          j        |                     |D ]I}t          j        d	t          j        |d                   d
t          j        |d                              Jt          j        dg                                 R                                     d S d }| j        j        v rG j        j        |         }t          |t                    r |j
        j        dv r j        j        |         }|S )NnamerT   rw   T.List[BaseNode]c                Z    g }j         j        D ]}| |d         |d         hv r||gz  }|S )NrZ  rK   )r0  targets)rZ  resultr   rg   s      r$   
check_listz(Rewriter.find_target.<locals>.check_list  sF    F%- " "AfIqw///qcMFMr#   r   r   z#There are multiple targets matchingz  -- Target namezwith IDrK   z1Please try again with the unique ID of the target>   r
  r  r;   r  r	  r  r  )rZ  rT   rw   r[  )rk   r   errorr   rV  rX  r0  assignmentsrn   r   	func_namer   assign_vals)rg   r2   r_  r]  r   r3   r}   s   `      r$   find_targetzRewriter.find_target  sd   	 	 	 	 	 	 *V$$ 		7||q  qz!
@$)FBSBSTTT  h hAJ149QvY3G3GTXT]^_`d^eTfTfgggg
NaQUQ^Q^Q`Q`aaaa!!###t T%111#/7D$-- ?>'  ,S  S  S*6v>C
r#   r&  c                    d fd} ||          }||S | j         j        v rg j         j        |         }t          |t                    r@|j        j        dk    r0 j                             |j                  d         } ||          }|S )NrZ  rT   c                F    j         j        D ]}| |d         k    r|c S d S )NrZ  )r0  r  )rZ  r   rg   s     r$   r_  z,Rewriter.find_dependency.<locals>.check_list  s:    %2  1V9$$HHH %4r#   r&  r   )rZ  rT   )r0  ra  rn   r   rb  r   flatten_argsr   )rg   r&  r_  depr}   rZ  s   `     r$   find_dependencyzRewriter.find_dependency  s    	 	 	 	 	 	 j$$?J )555#/
;D$-- +>'<77+88CCAFD$*T**C
r#   rN   c                   ddddd |d                                          D             id}|                     |           |d         d	k    rd S d
|d<   g |d         d<   | j        j        }i d |j                                        D             d |j                                        D             d |j                                        D             d |j                                        D             d |j                                        D             }t          |d                                                   D ]\  }}||vrLt          j        dt          j	        |          g| 
                                R   |                                  V	 ||                             |          }n# t          $ ru}t          j        dt          j	        |          t          j        t          |                    g| 
                                R   |                                  Y d }~d }~ww xY w|d         dxx         | d| gz  cc<   |                     |           d S )Nr'  /r   rN   c                    g | ]}| d S )z=.*r"   .0xs     r$   
<listcomp>z4Rewriter.process_default_options.<locals>.<listcomp>  s    #M#M#M!qIII#M#M#Mr#   rO   r  r=   r   r?   rI   c                4    i | ]\  }}t          |          |S r"   rT   rn  kvs      r$   
<dictcomp>z4Rewriter.process_default_options.<locals>.<dictcomp>  $    ;;;TQs1vvq;;;r#   c                4    i | ]\  }}t          |          |S r"   rr  rs  s      r$   rv  z4Rewriter.process_default_options.<locals>.<dictcomp>  rw  r#   c                4    i | ]\  }}t          |          |S r"   rr  rs  s      r$   rv  z4Rewriter.process_default_options.<locals>.<dictcomp>  rw  r#   c                4    i | ]\  }}t          |          |S r"   rr  rs  s      r$   rv  z4Rewriter.process_default_options.<locals>.<dictcomp>  rw  r#   c                4    i | ]\  }}t          |          |S r"   rr  rs  s      r$   rv  z4Rewriter.process_default_options.<locals>.<dictcomp>  rw  r#   zUnknown optionszUnable to set=)rZ   r5  r0  coredatarO   rl   sortedr   r`  r   rV  rX  validate_valuer   rU  rT   )rg   rQ   
kwargs_cmdcdatarO   rq   rr   es           r$   r4  z Rewriter.process_default_options  s    "'!#M#Ms9~7J7J7L7L#M#M#M	
 

 	J''' {u$$F"'
;24
8./ )
;;U]%8%8%:%:;;;
;;U]%8%8%:%:;;;
 <;U]%8%8%:%:;;;
 <;U]%8%8%:%:;;;	

 <;U]%8%8%:%:;;;
 s9~335566 	H 	HHC'!!
,dinnOt}}OOOO!!###cl11#66!   
?DIcNNDHSVV<L<L_t}}____!!###
 x !233337GG3333J'''''s   F66
H5 A+H00H5rI   c           
        t          j        dt          j        |d                   dt          j        d|d         z   dz                        |d         t          vr?t          j        d|d         g|                                 R   |                                 S t          |d                  }d }d }|d         dk    rvdd	h                    |d         h          rDt          j        d
|d         z   dz   g|                                 R   |                                 S | j	        j
        }|j        }nq|d         dk    r-|                     |d                   }|r|d         }|j        }n8|d         dk    r,|                     |d                   }|r|d         }|j        }|st          j        d           t          |t                    sJ t          |t                     sJ d |j                                        D             |_        |d         dk    ri }t'          |j                                                  D ]y\  }}d ||<   t          |t(                    r|j        ||<   *t          |t,                    r:g }	|j        j        D ]&}
d }t          |
t(                    r|
j        }|	|gz  }	'|	||<   z|                     dd                    |d         |d                   |           d S d}t'          |d                                                   D ]\  }}||vrLt          j        dt          j        |          g|                                 R   |                                  V|d         dk    rh||j        v r6t          j        dt          j        |          d           |j        |= |dz  }n(t          j        dt          j        |          d           ||j        vr
d |j        |<    ||         |j        |                   }|                                s(t          j        dt          j        |          d           t7          |          }|d         dk    rRt          j        d t          j        |          d!t          j        |                     |                    |           n|d         d"k    rQt          j        d#t          j        |          d!t          j        |                     |                    |           n|d         d$k    rQt          j        d%t          j        |          d&t          j        |                     |                    |           n\|d         d'k    rPt          j        d(t          j        |          d&t          j        |                     |                     |           |!                                |j        |<   |dz  }d) |j                                        D             |_        |j                                        D ]\  }}|j"        |_"        |dk    r|| j#        vr| xj#        |gz  c_#        d S d S d S )*NzProcessing function typerJ   zwith id'rK   zUnknown function typer'  rk  z//z>The ID for the function type project must be "/" or "//" not ""r2   r}   r&  z Unable to find the function nodec                $    i | ]\  }}|j         |S r"   r   rs  s      r$   rv  z+Rewriter.process_kwargs.<locals>.<dictcomp>  s     JJJ$!Q17AJJJr#   r=   rE   rI   z{}#{}r   zCannot modify unknown kwargr   z  -- Deletingzfrom the kwargsr   z  -- Keyzis already deletedz  -- Skippingz"because it is to complex to modifyr   z  -- Settingtor?   z  -- Addingr  z  -- Removingfromr   z!  -- Removing all values matchingc                Z    i | ](\  }}t          t          d d dddd|                    |)S )r6   r   Nr   rs  s      r$   rv  z+Rewriter.process_kwargs.<locals>.<dictcomp>X  s:    jjj$!Q6%B1aq"A"ABBAjjjr#   )$r   r;  r   rB  rY   r`  rV  rX  
isdisjointr0  project_noder   rd  ri  rn   r   r   rI   rl   r~  r   r   r   r   rI  rm   r   rT   rT  r   r   r   r   r   levelr1  )rg   rQ   
kwargs_defr}   arg_noder   	info_datarq   rr   	data_listr   elementnum_changedmodifierval_strrt  ru  s                    r$   r5  zRewriter.process_kwargs  s   +TYs:-G-GTXT]^adghldm^mps^sTtTtuuuz?"666J.JR$--//RRRR$$&&&)#j/:
 z?i''
 T{%%s4yk22 +
[^abf^ggjmm  Aptp}p}pp  A  A  A  A((***#0DyHH_((""3t9--C %6{9_,,&&s4y11C %6{9 	;J9:::$-----(L11111JJ(/2G2G2I2IJJJ {v%%I"8?#8#8#:#:;; / /S!%	#c>22 	/%(YIcNNY// / "I X/ / /"&%a88 .&'gG!gY.		%.IcNMM(GNN3z?CI$N$NPYZZZF s8}224455 '	 '	HC*$$
8$)C..[4==??[[[[!!### ;8++(/))H_dinn>OPPP ,1$KKHZ39MNNN(/))'+$&z#xs';<<H&&(( `$)C..:^___ #hhG;5((3t{7?S?STTT""3''''[!U**G(<(<dDIcNNSSS""3''''[!X--$+g*>*>	RUWWW%%c****[!^33<dk'>R>RTZ\`\efi\j\jkkk%%c*** $,#4#4#6#6HOC 1KK kjRZRaRgRgRiRijjjO))++ 	 	DAqgAGG??t4+>>>D6) ?>>r#   r}   r   rw   r   c                h    |j         r*|j         | j        j        v r| j        j        |j                  S d S rf   )ast_idr0  reverse_assignment)rg   r}   s     r$   find_assignment_nodezRewriter.find_assignment_node^  s7    ; 	D4;$*:*MMM#6t{CCtr#   c                    !"#$%& t          j        dt          j        |d                   dt          j        |d                                                   |d                   &&]|d         dk    rQt          j        dt          j        |d                   g                                 R                                    S dJ &fd	%&%fd
|d         D             |d<   d !g }|d         dk    rd }&d         r&d         d         }n&d         }|J g }&d         D ]0} !|          D ]"}t          |t                    r||j
        gz  }#1g }t          t          |d                             D ]}||v r)t          j        dt          j        |          d           /t          j        dt          j        |          dt          j        |j         d|j                              t#          d|j        dddd |          }|t%          |          gz  }d }	t          |t&          t(          f          r|j        }	nt          |t,                    r|}	|	J |	xj        |z  c_        |	|vrt          |t&                    s||	gz  }| j        vr xj        |gz  c_        	n|d         dk    r,!&fd}
|d         D ]} |
|          \  }}|)t          j        dt          j        |          d           <d }	t          |t&          t(          f          r|j        }	nt          |t,                    r|}	|	J t          j        dt          j        |          dt          j        |j         d|j                              |	j                            |           |	|vrt          |t&                    s||	gz  }| j        vr xj        |gz  c_        n|d         dk    r	&d         }d}	 &d         d         }n# t6          $ r 	 t9          d |j        j                                        D                       }|j        j        |         }n# t>          $ r t)          tA          d           t-          t#          d!|j        dddd d"                    tA          d#                    }||j        j        tC          t#          d|j        dddd d                    <   d$}| j        vr xj        |gz  c_        Y nw xY w|g&d<   Y nw xY wt          |tB                    r j"        j#        |j
                 }|g&d<   t          |t(                    sRt          j        d%t          j        |d                   d&g                                 R                                    S g }&d         D ]0} !|          D ]"}t          |t                    r||j
        gz  }#1g }t          t          |d                             D ]}||v r)t          j        d't          j        |          d           /t          j        d(t          j        |          dt          j        |j         d|j                              t#          d|j        dddd |          }|t%          |          gz  }|j        }	|	xj        |z  c_        |	|vr||	gz  }|r| j        vr xj        |gz  c_        np|d         d)k    r!&fd*}
|d         D ]} |
|          \  }}|)t          j        d+t          j        |          d           ;|j        }	t          j        d,t          j        |          dt          j        |j         d|j                              |	j                            |           |	|vrt          |t&                    s||	gz  }| j        vr xj        |gz  c_        nt|d         dk    r)&Rt          j        d-t          j        |d                   d.g                                 R                                    S tI          j%        d/d0|d                   }|d1         d2k    r|d3z   nd4}|d5z   }tL          j'        (                    |d6         tR          j*                  #t-          t#          d#dddd d!                    }t)          tA          d           |tA          d#                    }t-          t#          d#dddd d!                    }t'          tC          t#          d7#dddd8d9                    tA          d:          |tA          d;                    }tW          tC          t#          d7#dddd8|                    tA          d<          |          }#fd=|d         D             |_        |g|_        t-          t#          d#dddd d!                    }t'          tC          t#          d7#dddd8|d1                             tA          d:          |tA          d;                    }tW          tC          t#          d7#dddd8|                    tA          d<          |          }t%          t#          d#dddd |d                             tC          t#          d#dddd |                    g|_        |,                    t[                                 |,                    t[                                  xj.        ||gz  c_.        n>|d         d>k    r /                    &d                   }|&d         } xj0        |gz  c_0        t          j        d?t          j        |d                   dt          j        |j         d|j                              n|d         d@k    rg }&d         D ]0} !|          D ]"}t          |t                    r||j
        gz  }#1g }&d         D ]0} !|          D ]"}t          |t                    r||j
        gz  }#1&dA         ||dB} 1                    d&d7         |           |D ]O}dC ""fdD  fdE$dF |j        D             }dG |j        D             }t          |$fdHI          }||z   |_        Pd S )KNzProcessing targetr2   r=   r  zUnknown targetsrcrT   rw   c                   t           j                            t           j                            j        d                             }t           j                            |           r t           j                            | |          S t           j                            |           s| S t           j                            t           j                            |           |          S )Nr7   )r<  r=  abspathr>  r+  isabsrelpathexists)r  r7   rg   r2   s     r$   
rel_sourcez+Rewriter.process_target.<locals>.rel_sourcel  s    W__RW\\$.&BR%S%STTFw}}S!! wsF333W^^C(( 
7??27??3#7#7@@@r#   c                &    g | ]} |          S r"   r"   )rn  ro  r  s     r$   rp  z+Rewriter.process_target.<locals>.<listcomp>v  s!    DDDjjmmDDDr#   rF   c                4   g }t          | t                    rBt          | j        j                  }| j        j        t          v r|                    d           n>t          | t                    r| j        j        }nt          | t                    r| j        }|S )Nr   )rn   r   rX   r   r   rb  r   r   popr   r   )nr   s     r$   arg_list_from_nodez3Rewriter.process_target.<locals>.arg_list_from_nodey  s    D!\** #AF,--;$(>>>HHQKKKAy)) #v'A|,, #{Kr#   r  r   r}   z  -- Sourcez.is already defined for the target --> skippingz  -- Adding sourceat:stringr  c                    d         D ]8} |          D ]*}t          |t                    r|j        | k    r||fc c S +9dS )NrF   NNr   r  r   r   r  r2   s      r$   	find_nodez*Rewriter.process_target.<locals>.find_node  sl    	* , ,A//22 , ,%a88 , w#~~'(!t, "zr#   z  -- Unable to find sourcezin the targetz  -- Removing sourcer  r  Textra_filesc              3  Z   K   | ]&}t          |t                    |j        d k    "|V  'dS )r  Nr   )rn  rt  s     r$   	<genexpr>z*Rewriter.process_target.<locals>.<genexpr>  sn        +M  +MYcdegmYnYn  +Mstsz  L  tL  tL1  tL  tL  tL  tL  +M  +Mr#   r   r6   z[]r   FTargetz#extra_files argument must be a listz  -- Extra filez  -- Adding extra filer  c                    d         D ]8} |          D ]*}t          |t                    r|j        | k    r||fc c S +9dS )Nr  r  r   r  s      r$   r  z*Rewriter.process_target.<locals>.find_node  sl    . , ,A//22 , ,%a88 , w#~~'(!t, "zr#   z  -- Unable to find extra filez  -- Removing extra filezCan not add targetzbecause it already existsz[- ]_r9   r;   _exe_lib_sourcesr7   rK   ry   files()r|  c                T    g | ]$}t          t          d dddd|                    %S )r  r   Nr   )rn  ro  filenames     r$   rp  z+Rewriter.process_target.<locals>.<listcomp>7  s9    %v%v%vbcjx1aQRTXZ[1\1\&]&]%v%v%vr#   r  z  -- Removing targetrE   rZ  )rZ  rF   r  c                p    |                                  rt          |           n|                                 S rf   )isdigitintlower)texts    r$   <lambda>z)Rewriter.process_target.<locals>.<lambda>d  s%    #P3t999DJJLL r#   c                F    fdt          j        d|           D             S )Nc                &    g | ]} |          S r"   r"   )rn  cconverts     r$   rp  z=Rewriter.process_target.<locals>.<lambda>.<locals>.<listcomp>e  s!    'V'V'Vq

'V'V'Vr#   z([0-9]+))r   split)rq   r  s    r$   r  z)Rewriter.process_target.<locals>.<lambda>e  s)    'V'V'V'VBHZQT<U<U'V'V'V r#   c                d      fdt                               d                    D             S )Nc                ^    g | ])\  }}                     d           |k     |          f*S )rk  )count)rn  idxro  alphanum_keyrq   s      r$   rp  z=Rewriter.process_target.<locals>.<lambda>.<locals>.<listcomp>f  s<    'y'y'yU[UXZ[33)>Q(P'y'y'yr#   rk  )	enumerater  )rq   r  s   `r$   r  z)Rewriter.process_target.<locals>.<lambda>f  s9    'y'y'y'y'y_hilirirsviwiw_x_x'y'y'y r#   c                <    g | ]}t          |t                    |S r"   rn   r   rm  s     r$   rp  z+Rewriter.process_target.<locals>.<listcomp>h  s'    SSSQZ>5R5RSqSSSr#   c                <    g | ]}t          |t                    |S r"   r  rm  s     r$   rp  z+Rewriter.process_target.<locals>.<listcomp>i  s'    OOOQA~1N1NOqOOOr#   c                $     | j                   S rf   r  )ro  path_sorters    r$   r  z)Rewriter.process_target.<locals>.<lambda>j  s    KK4H4H r#   )rq   )r  rT   rw   rT   )2r   r;  r   rB  rd  r`  rV  rX  rn   r   r   r~  r   greenrT  r  linenor   r   r   r   r   r   r   r1  r   r  
IndexErrornextrI   rZ   StopIterationrz   r   r0  ra  r   subr<  r=  r>  r   r?  r   acceptr	   r3  r  r2  rI  )'rg   rQ   to_sort_nodesr}   src_listr   r   	to_appendtokenr  r  rootstring_nodetgt_function
mark_arrayextra_files_keyextra_files_listid_base	target_id	source_idsrc_arg_nodesrc_arr_nodesrc_far_nodesrc_fun_nodesrc_ass_nodetgt_arg_nodetgt_fun_nodetgt_ass_node	to_remove	test_dataunknownrF   r  r  r  r  r  r  r2   s'   `                               @@@@@@@r$   r6  zRewriter.process_targetc  s   $diH&>&>TYWZ[fWgMhMhiii!!#h-00>c+.,>>J'3x=)A)ATDMMOOTTTT$$&&&	A 	A 	A 	A 	A 	A 	A DDDDS^DDDC	N
	 
	 
	 {y((Di  &i(+f~### HI& . .++A.. . .A!!^44 . QWI-.
 ICI//00 1 1==H]DJqMM;klll-tz!}}d%E%E%E%EFFH H Hhq!QaHHj//00		 H$y 9::  9D,//  ''')+ },,Zl5S5S,(+4...##v-##))" " " " " " ^ 2 2$-IaLL!k<L!=tz!}}o^^^  d\9$=>> $#yHHl33 $#H+++/A(<%S%S{?Q%S%STTV V V"))+666 =00D,9W9W0!hZ/Mt222''D61''-20 !222)/LJ/m,Q/ / / /	>&*  +M  +Ml6G6N6S6S6U6U  +M  +M  +M  'M  'MO',3ODDD$ > > >$WS\\<b,J_abdeghjnpt@u@u3v3vx  AD  yE  yE  F  FD ~BL%,VE(LDY[\^_abdhjw4x4x-y-yz!&J#4+>>>++~=++> *.}%%%/ $'' /'3DJ?)-}%dI.. +
8TYs8}%=%=?dwgkgtgtgvgvwwww((***  "M* 6 6++A.. 6 6A!!^44 6(QWI5(6
 ICI//00 1 1(((H.
1?oppp14:a==$%E%E%E%EFFH H Hhq!QaHHj//00		 yH)+ },,(+  .d$*===##v-##!111" " " " " " ^ 2 2$-IaLL!k<L!A4:a==Rabbb  93TZ]]F(<%S%S{?Q%S%STTV V V"))+666 =00D,9W9W0!hZ/Mt222''D61''#2& --!
/3x=1I1IKfyimivivixixyyyy((***fWc3x=99G,/,>,,N,N&((TZI*,Iw||CM;3MNNH (h!Q4QS(T(TUUL$WS\\<NNL'h!Q4QS(T(TUUL'uT8Q1fV]/^/^(_(_ahilamamo{  ~E  FI  ~J  ~J  K  KL)&tXq!QPVXa1b1b*c*celmpeqeqs  A  AL%v%v%v%vgjktgu%v%v%vL"&2^L" (h!Q4QS(T(TUUL'uT8Q1fVYZgVh/i/i(j(jlstwlxlx  {G  IP  QT  IU  IU  V  VL)&tXq!QPVXa1b1b*c*celmpeqeqs  A  AL58Q1dCMRRSSuXxAq$	JJKK&L"
  7 9 9::: 7 9 9:::,!==,,11&.AAI "6N	  YK/  H+TZH-F-F[I$6!K!K9I!K!KLLN N N N ''HI& . .++A.. . .A!!^44 . QWI-.  "M* 6 6++A.. 6 6A!!^44 6(QWI5(6 v#/ I
 MM(F4L)<<<  	, 	,APPGVVVVLzzzzKSS!+SSSGOO!+OOOGW*H*H*H*HIIIG!G+AKK	, 	,s8   P T! AQ('T!(B*TT!T	T! T!c           	        d|vrt          d          |d         | j        vrMt          d                    |d         t          | j                                                                       | j        |d                  |           d S )Nr(   zCommand has no key "type"z0Unknown command "{}". Supported commands are: {})r   r7  rm   rX   rZ   )rg   rQ   s     r$   processzRewriter.processm  s    #$?@@@v;dn,,#$V%+VCKdn>Q>Q>S>S9T9T%U%UW W W#s6{#C(((((r#   c                   t          d | j        D                       sJ t          d | j        D                       sJ t          d | j        D                       sJ t          d | j        D                       sJ d | j        D             }|d | j        D             z  }t          |d d	          }|d
 | j        D             z  }g }|D ]}d}|d         dk    s|d         dk    rVt                      }|d                             |           |                                 |j        	                                }|d         j
        ||d         |d         d}||gz  }i |D ]$}|d         v rt          j                            t          j                            | j        |d                             }d}t          j                            |          s+t#          |dd          5  	 d d d            n# 1 swxY w Y   t#          |d          5 }	|	                                }d d d            n# 1 swxY w Y   |                    d          }
d}g }|
D ]}||gz  }|t)          |          z  }|||d|d         <   &fd|D ]I}|d         dv r |           |d         dk    r%|d                  dxx         |d         dz   z  cc<   J                                D ]w\  }}t-          j        dt-          j        |                     t#          |d         dd          5 }	|	                    |d                    d d d            n# 1 swxY w Y   xd S )Nc              3  v   K   | ]4}t          |d           ot          |d          ot          |d          V  5dS r  colnor  Nhasattrrm  s     r$   r  z)Rewriter.apply_changes.<locals>.<genexpr>v  sK      xx_`71h''ZGAw,?,?ZGAzDZDZxxxxxxr#   c              3  v   K   | ]4}t          |d           ot          |d          ot          |d          V  5dS r  r  rm  s     r$   r  z)Rewriter.apply_changes.<locals>.<genexpr>w  sK      yy_`71h''ZGAw,?,?ZGAzDZDZyyyyyyr#   c              3  N   K   | ] }t          |t          t          f          V  !d S rf   )rn   r   r   rm  s     r$   r  z)Rewriter.apply_changes.<locals>.<genexpr>x  s1      YY:a)\!:;;YYYYYYr#   c              3  Z   K   | ]&}t          |t          t          t          f          V  'd S rf   )rn   r   r   r   rm  s     r$   r  z)Rewriter.apply_changes.<locals>.<genexpr>y  s4      jjPQ:a)^\!JKKjjjjjjr#   c                    g | ]}|d dS )modifyr}   r-   r"   rm  s     r$   rp  z*Rewriter.apply_changes.<locals>.<listcomp>{  s     SSS!qH55SSSr#   c                    g | ]}|d dS )r@   r  r"   rm  s     r$   rp  z*Rewriter.apply_changes.<locals>.<listcomp>|  s     QQQqT22QQQr#   c                6    | d         j         | d         j        fS )Nr}   )r  r  )ro  s    r$   r  z(Rewriter.apply_changes.<locals>.<lambda>}  s    qy7G66Y r#   T)rq   reversec                    g | ]}|d dS )r?   r  r"   rm  s     r$   rp  z*Rewriter.apply_changes.<locals>.<listcomp>~  s     OOOU33OOOr#   r6   r-   r  r?   r}   filerT   r}   r-   r  wutf-8encodingr   )r=  rawoffsetsc                   | d                  d         }| d                  d         }| d         }|j         dz
  }|j        }||         |z   }|}t          |t          t          f          r||j        dz
           |j        z   }nt          |t                    r| d         dk    rt          |j        t          t          f          r/ 	| d         d|j        dd	           | d                  d         }||         d
k    r|dz  }||         d
k    |dz  }||         dv r|dz  }||         dv |d |         | d         z   ||d          z   | d                  d<   d S )Nr  r
  r	  r}   r   r-   r@   r6   r  r|  >   	
 rT   )	r  r  rn   r   r   
end_lineno	end_colnor   r   )
r   r
  r	  r}   linecolstartendr  remove_nodes
           r$   r  z+Rewriter.apply_changes.<locals>.remove_node  s   AfI&y1G&	"5)CV9D;?D*CDMC'EC$L 9:: do12T^C D.11 akT6I6Idj9l*CDD 2K62tz]a b bccc&	*51C#h#oo1HC #h#ooq#h"3331HC #h"333 '*&5&kAeH&<s344y&HE!F)U###r#   >   r@   r  r	  rT   r  	Rewritingr=  )allr1  r2  r~  r3  r
   r  post_processr^  stripr  r<  r=  realpathr>  r+  r  openread
splitlinesrk   rl   r   r;  rT  rN  )rg   
work_nodesstr_listr   new_dataprinterrF  fpathfdatafpm_linesoffsetline_offsetsr   rq   rr   r  r  s                   @@r$   apply_changeszRewriter.apply_changesu  s   xxdhdwxxxxxxxxyydhdxyyyyyyyyYYTEXYYYYYYYYjjUYUijjjjjjjjSSt?RSSS
QQD<PQQQQ
J,Y,Ycghhh
OOT=NOOOO
  	 	AH{h&&!H+*>*>$,,&	  )))$$&&&">//11&	*&	H+	 D HH  	 	AyE!!G$$RW\\$.!F)%L%LMMEE7>>%(( %w777                eg... ""		" " " " " " " " " " " " " " " &&t,,GFL ! !(#a&&  '   E!F)	I 	I 	I 	I 	I 	I0  	; 	;A{...A8%%ai '''1U8d?:'''  	% 	%HCH[$+c"2"2333c&k3999 %RU$$$% % % % % % % % % % % % % % %	% 	%s6   7HH		H		!II		I	>M&&M*	-M*	N)r*  F)r+  rT   r,  rT   r-  r   )rD  rT   rE  rT   rF  rG  )r2   rT   )r&  rT   )r}   r   rw   r   )r   r    r!   rh   rC  rI  rP  rV  rX  rd  ri  rd   rW   r4  r5  r  r6  r  r(  r"   r#   r$   r)  r)  g  sm           W W W0 0 0 0? ? ?
6 6 6
A A A
   <   * \- 1233+( +( 43+(Z \-)**h* h* +*h*T   
 \-)**G, G, +*G,R) ) )[% [% [% [% [%r#   r)  r  r  r  r  r  r  rE   r>   in_listT.List[str]T.Dict[str, str]c                    i }t          |           }	 |D ]}t          |          ||<   n# t          $ r t          d          w xY w|S )Nz;in_list parameter of list_to_dict must have an even length.)iterr  r  	TypeError)r)  r^  itr   s       r$   list_to_dictr0    st    F	gBW 	! 	!A RF1II		!
  W W WUVVVWMs	   + AT.List[dict]c                ^    d| j         t          | j                 | j        | j        | j        dgS )Nr2   )r(   r2   r=   rF   r7   r9   )r2   target_operation_mapr=   rF   r7   r8   rO   s    r$   generate_targetr5    s9    .)'*;<?.'   r#   c                V    d| j         | j        | j        t          | j                  dgS )NrI   )r(   rJ   rK   r=   rI   )rJ   rK   r=   r0  rI   r4  s    r$   generate_kwargsr7    s7    $j&w~..   r#   c                >    d| j         t          | j                  dgS )NrN   )r(   r=   rO   )r=   r0  rO   r4  s    r$   generate_def_optsr9    s,    !&00   r#   c                   t           j                            | j                  rDt	          | j        d          5 }t          j        |          cd d d            S # 1 swxY w Y   d S t          j        | j                  S )Nr  r  )r<  r=  r  rR   r  loadloads)rO   r$  s     r$   generate_cmdr=    s    	w~~gl## (',111 	!R9R==	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! z','''s   AA #A )r2   r3   rI   rL   rM   rP   rQ   c                   | j         st          j                     	 t                       t	          | j        | j                  }|                                 | j        *t          j	        d           	 t          j
                     dS t          | j                 |           }t          |t                    st          d          |D ];}t          |t                    st          d          |                    |           <|                                 |                                 	 t          j
                     dS # t&          $ r}|d }~ww xY w# t          j
                     w xY w)N)r-  zNo command specifiedr   zCommand is not a listzCommand is not an objectr   )verboser   	set_quietr   r)  r+  r.   rC  r(   r`  set_verbosecli_type_maprn   rX   r.  objectr  r(  rP  	Exception)rO   rewritercommandsr   r  s        r$   runrG    s~   ? G-7<HHH   <J-...$ 	!  -g66(D)) 	53444 	  	 Aa(( < :;;;Q    	     	s+   AE 
B$E 
EEEE E-rf   )rr   rT   rw   r   )r)  r*  rw   r+  )rw   r1  )>
__future__r   astr   r   r   r   r	   r
   mesonbuild.mesonlibr   r   r6   r   r   	functoolsr   mparserr   r   r   r   r   r   r   r   r   r   r   rR   r<  r   rL  typingTTYPE_CHECKINGr   r   rb   rd   rz   r|   r   r   r   r   r   r   rT   rG  rX   rW   rY   r)  r3  r0  r5  r7  r9  r=  rB  rG  r"   r#   r$   <module>rP     s  0 # " " " " " J  J  J  J  J  J  J  J  J  J  J  J  J  J  J  J ; ; ; ; ; ; ; ;               _  _  _  _  _  _  _  _  _  _  _  _  _  _  _  _  _  _  _  _  _  _  _  _  _  _                    ? "!!!!!!	 	 	 	 	 	 	 	
!K !K !K !KF       >; ; ; ;'f 'f 'f 'f 'f 'f 'f 'fR% % % % %y % % %& & & & &	 & & &% % % % %i % % %I> I> I> I> I>	 I> I> I>V    9   (    )   , 4%!23"d# 
 $%D$4![![![\T"	  d#4!~!~!~"d#D/\  ,S  ,S  ,S  T  , %	 	 &# #!  (!" 1  Bi	% i	% i	% i	% i	% i	% i	% i	%X 
(&              ( ( ( ( (     r#   