
    BPcai                        U d Z ddlmZmZ ddl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mZ  G d	 d
          Z G d de          Z G d de          ZdZdefdZ G d de          Z G d dee          Z G d de          Z G d dee          Z G d de          Z G d dee          Z  G d de          Z! G d  d!e          Z"i d"ed#d$d%g d&fd'ed(d$d%dfd)ed*d$d%dfd+ed,d$d%dfd-ed.d$d$d.d/gfd0ed1d$d$dfd2ed3d$d$g d4fd5ed6d$d$g d7fd8ed*d$d$g d9fd:ed*d$d$dfd;ed<d$d$d<d=gfd>ed?d$d%g d@fdAed*d$d$g dBfdCed1d$d$dfdDedEd$d$dfdFed.d$d$d.d/gfdGed,d$d%dfi dHed1d$d%dfdIedEd$d%dfdJedKd$d%dfdLedMd$d$dfdNe!dOd$d$dfdPed,d$d$dfdQedRd$d$g dSfdTedRd$d$g dUfdVedRd$d$dRdWgfdXedRd$d$dRdYgdZ  e#d[d\d[          D             z   fd]ed^d$d$dfd_ed*d$d$dfd`ed*d$d$g dafdbedRd$d$dfdcedRd$d%dfddedRd%d$dfdee dKd$d$dfi dfed,d$d$dfdged,d$d$dfdhed,d$d$dfdied,d$d%dfdjedEd$d%dfdkedld$d%g dmfdnedRd$d%dfdoedpd$d$g dqfdredpd$d$g dsfdted1d$d%dfduedEd$d%dfdved,d$d$dfdwe"d,d$d$dfdxed(d$d$dfdyedzd$d$g d{fd|ed}d$d$g d~fdedd$d$dfedEd$d$dfedEd$d$dfedd$d$dfedd$d$g dfed,d$d$dfed)d$d%d)dgfed*d$d$g dfedRd$d%g dfed,d$d%dfed#d%d%dfedld$d$g dfedRd$d$g dfedRd$d$dfedd$d$g dfedMd%d$dfdZ$eeeee         ee%e%e	e
e         df         f         f         e&d<   dS )a  
Property management and parsing, CSS cascading, default value storage

.. versionadded:: 1.2

.. data:: all_properties

    A list of all properties, their parser class, and additional information
    such as whether they are inheritable or can be given as presentation attributes
    )ABCabstractmethodN)TupleDictTypeUnionListOptional   )IBaseElementISVGDocumentElement)
parse_unitconvert_unit)Color
ColorErrorc                   $   e Zd ZdZddZededeeeef         fd            Z	ddZ
	 dd	edefd
Zd	edefdZd	edefdZedefd            Ze	 	 	 	 ddee         dee         d	ee         dee         fd            Zd Zedd            ZdS )BaseStyleValuezEA class encapsuling a single CSS declaration / presentation_attributeNFc                    |  |  |  |3d|v r/t                               |          \  | _        | _        | _        d S ||                                                                | _        t          |t                    r|                                | _        n| 	                    |          | _        || _        | 
                                }d S d S )N:)r   parse_declaration	attr_namevalue	importantstriplower
isinstancestrunparse_valueparse_value)selfdeclarationr   r   r   _s         2/usr/share/inkscape/extensions/inkex/properties.py__init__zBaseStyleValue.__init__,   s    "sk'9'9
 00==	
"&__..4466DN%%% 7"[[]]

 "//66
&DN  ""AAA #"    r!   returnc                 D   |dk    rd|v r|                     dd          }|                    dd          \  }}d}d|v r|                     dd          }d}|                                                                |                                |fS t	          d          )	ai  Parse a single css declaration

        Args:
            declaration (str): a css declaration such as:
                ``fill: #000 !important;``. The trailing semicolon may be ommitted.

        Raises:
            ValueError: Unable to parse the declaration

        Returns:
            Tuple[str, str, bool]: a tuple with key, value and importance
         r   ;r   Fz
!importantTzInvalid declaration)replacesplitr   r   
ValueError)clsr!   namer   r   s        r#   r   z BaseStyleValue.parse_declaration@   s     "!3!3%--c266K'--c155MT5Iu$$lB77 	JJLL&&((%++--CC.///r%   c                     | j         dk    r<| j        t          v r,|                     t          | j                 d         |          S dS |                     | j         |          S )a  Get parsed property value with resolved urls, color, etc.

        Args:
            element (BaseElement): the SVG element to which this style is applied to
                currently used for resolving gradients / masks, could be used for
                computing percentage attributes or calc() attributes [optional]

        Returns:
            object: parsed property value
        inheritr   N)r   r   all_properties_parse_value)r    elements     r#   r   zBaseStyleValue.parse_valueY   s]     :""~//(()G)JGTTT4  W555r%   r   c                     |S )a"  internal parse method, to be overwritten by derived classes

        Args:
            value (str): unparsed value
            element (BaseElement): the SVG element to which this style is applied to
                [optional]

        Returns:
            object: the parsed value
         r    r   r3   s      r#   r2   zBaseStyleValue._parse_valuej   s	     r%   c                 Z    |                      |          }|                     |           |S )a   "Unparses" an object, i.e. converts an object back to an attribute.
        If the result is invalid, i.e. can't be parsed, an exception is raised.

        Args:
            value (object): the object to be unparsed

        Returns:
            str: the attribute value
        )_unparse_valuer2   )r    r   results      r#   r   zBaseStyleValue.unparse_valuey   s0     $$U++&!!!r%   c                      t          |          S Nr   r    r   s     r#   r8   zBaseStyleValue._unparse_value   s    5zzr%   c                 >    | j         dz   | j        z   | j        rdndz   S )zThe css declaration corresponding to the StyleValue object

        Returns:
            str: the css declaration, such as "fill: #000 !important;"
        r   z !importantr(   )r   r   r   r    s    r#   r!   zBaseStyleValue.declaration   s5     Nj !%6}}B8	
r%   r   r   c                 j   |#d|v rt                               |          \  }}}nS|Q|O|                                                                }t	          |t
                    r|                                }|t          v r!t          |         d         } |||||          S t          ||||          S )a3  Create an attribute

        Args:
            declaration (str, optional): the CSS declaration to parse. Defaults to None.
            attr_name (str, optional): the attribute name. Defaults to None.
            value (object, optional): the attribute value. Defaults to None.
            important (bool, optional): whether the attribute is marked !important.
                Defaults to False.

        Raises:
            Errors may also be raised on parsing, so make sure to handle them

        Returns:
            BaseStyleValue: the parsed style
        Nr   r   )r   r   r   r   r   r   r1   )r-   r!   r   r   r   	valuetypes         r#   factoryzBaseStyleValue.factory   s    . "sk'9'9*8*J*J;*W*W'Iuii"u'8!))//11I%%% &&&&y1!4I9[)UIFFFk9eYGGGr%   c                 X    t          |t                    sdS | j        |j        k    rdS dS )NFT)r   r   r!   )r    others     r#   __eq__zBaseStyleValue.__eq__   s4    5.11 	5u0005tr%   r(   c                     	 t                               |||          }|j        }|                    |           }||fS # t          $ r Y dS t
          $ r Y dS w xY w)a;  Error handling for the factory method: if something goes wrong during
        parsing, ignore the attribute

        Args:
            element (BaseElement, optional): The element this declaration is affecting,
                for finding gradients ect. Defaults to None.
            declaration (str, optional): the CSS declaration to parse. Defaults to "".
            key (str, optional): the attribute name. Defaults to "".
            value (str, optional): the attribute value. Defaults to "".

        Returns:
            BaseStyleValue: The parsed style
        )r!   r   r   N)r   rB   r   r   r,   r   )r3   r!   keyr   r"   s        r#   factory_errorhandledz#BaseStyleValue.factory_errorhandled   s    	"**'3e +  E /C!!'**A< 	 	 	 DD 	 	 	DD	s   <? 
A	AANNNFr;   )Nr(   r(   r(   )__name__
__module____qualname____doc__r$   classmethodr   r   boolr   r   objectr2   r   r8   propertyr!   r
   rB   rE   staticmethodrH   r5   r%   r#   r   r   )   s       OO# # # #( 0C 0E#sD.4I 0 0 0 [006 6 6 6$ #' 	   6 c    F s     
S 
 
 
 X
  &*#'"&$) H  Hc] H C= H 	 H
 D> H  H  H [ HD      \  r%   r   c                   0    e Zd ZdZddefdZdedefdZdS )
AlphaValuezStores an alpha value (such as opacity), which may be specified as
    as percentage or absolute value.

    Reference: https://www.w3.org/TR/css-color/#typedef-alpha-valueNr   c                     |d         dk    rt          |d d                   dz  }nt          |          }|dk     rdS |dk    rdS |S )N%g{Gz?r   r   )float)r    r   r3   parsed_values       r#   r2   zAlphaValue._parse_value   s^    9 ss,,t3LL <<L!1!1r%   r&   c                     t          |t          t          f          r|dk     rdS |dk    rdS t          |          S t	          d          )Nr   0r   1zValue must be number)r   rX   intr   r,   r=   s     r#   r8   zAlphaValue._unparse_value   sO    eeS\** 	qyysqyysu::/000r%   r;   rJ   rK   rL   rM   r   r2   rP   r8   r5   r%   r#   rT   rT      sb        G G
	 	# 	 	 	 	1F 1s 1 1 1 1 1 1r%   rT   c                        e Zd ZdZddefdZdS )
ColorValuez[Stores a color value

    Reference: https://drafts.csswg.org/css-color-3/#valuea-def-colorNr   c                 r    |dk    r#||                                 } |d          S d S t          |          S )NcurrentColorcolor)specified_styler   )r    r   r3   styles       r#   r2   zColorValue._parse_value  sC    N"""//11uW~~%4U||r%   r;   rJ   rK   rL   rM   r   r2   r5   r%   r#   r`   r`      s@        I I #      r%   r`   z&url\(\s*('.*?'|\".*?\"|[^\"'].*?)\s*\)stringc                     t          j        t                    }|                    |           }|r,|                    d          }|                    |          }|S t          d          )a  Parses a string containing an url, e.g. "url(#rect1234)",
    looks up the element in the svg document and returns it.

    Args:
        string (str): the string to parse
        svg (SvgDocumentElement): document referenced in the URL

    Raises:
        ValueError: if the string has invalid format
        ValueError: if the referenced element is not found

    Returns:
        BaseElement: the referenced element
    r   zinvalid URL format)recompileURLREGEXmatchgroupgetElementByIdr,   )rg   svgregexrl   urlpaint_servers         r#   match_url_and_return_elementrs     sc     Jx  EKKE kk!nn))#..
)
*
**r%   c                   R     e Zd ZdZddefdZdef fdZede	fd            Z
 xZS )	URLNoneValuezStores a value that is either none or an url, such as markers or masks.

    Reference: https://www.w3.org/TR/SVG2/painting.html#VertexMarkerPropertiesNr   c                     |dk    rd S |dd         dk    r.|*|                      |          rt          ||j                  S d S t          d          )Nnoner      url(zInvalid property value)element_has_rootrs   rootr,   r6   s      r#   r2   zURLNoneValue._parse_value/  sb    F??41:"t'<'<W'E'E"3E7<HHH41222r%   c                     t          |t                    rd|                                 dS t                                          |          S )Nzurl(#))r   r   get_idsuperr8   r    r   	__class__s     r#   r8   zURLNoneValue._unparse_value8  sF    e\** 	-,5<<>>,,,,ww%%e,,,r%   r&   c                 \    |                                  du ot          | t                      S )z?Checks if an element has a root, i.e. if element.root will failN)	getparentr   r   )r3   s    r#   rz   zURLNoneValue.element_has_root=  s5    
 4'X
7DW0X0X,X
 	
r%   r;   )rJ   rK   rL   rM   r   r2   rP   r8   rR   rO   rz   __classcell__r   s   @r#   ru   ru   *  s        R R3 3# 3 3 3 3-F - - - - - -
 
T 
 
 
 \
 
 
 
 
r%   ru   c                   :     e Zd ZdZddef fdZdef fdZ xZS )
PaintValuezStores a paint value (such as fill and stroke), which may be specified
    as color, or url.

    Reference: https://www.w3.org/TR/SVG2/painting.html#SpecifyingPaintNr   c                 6   |dk    rd S |dv r|S |dk    r"t                                          ||          S |dd         dk    rt          j        t          dz             }|                    |          }|r|                    d          }|0|                     |          r|j        	                    |          }nd S ||S |                    d	          t          d
          t          |                    d	                    S t          |          S )Nrw   )zcontext-fillzcontext-strokerb   r   rx   ry   z\s*([#\w].*?)?$r      zPaint server not found)r   r2   ri   rj   rk   rl   rm   rz   r{   rn   r,   r   )r    r   r3   rp   rl   rq   rr   r   s          r#   r2   zPaintValue._parse_valueL  s   F??4666LN""77''w7771: Jx*<<==EKK&&E 
-kk!nn&4+@+@+I+I&#*<#>#>s#C#CLL4+'';;q>>)$%=>>>U[[^^,,,U||r%   c                 N    |dS t                                          |          S )Nrw   )r   r8   r   s     r#   r8   zPaintValue._unparse_valuef  s%    =6ww%%e,,,r%   r;   )	rJ   rK   rL   rM   r   r2   rP   r8   r   r   s   @r#   r   r   F  sz        K K
 #      4-F - - - - - - - - - -r%   r   c                   2     e Zd ZdZd fd	ZddefdZ xZS )		EnumValuez9Stores a value that can only have a finite set of optionsNFc                     t           |         d         | _        t                                          ||||           d S )Nrx   )r1   valuesetr   r$   )r    r!   r   r   r   r   s        r#   r$   zEnumValue.__init__o  s8    &y1!4i	BBBBBr%   r   c                 l    || j         v r|S t          d| d| j         dd| j         dgz    z             )NzValue 'z' is invalid for the property z. zAllowed values are: r0   )r   r,   r   r6   s      r#   r2   zEnumValue._parse_values  sX    DM!!LMeMM4>MMMBT]i[%@BBC
 
 	
r%   rI   r;   )rJ   rK   rL   rM   r$   r   r2   r   r   s   @r#   r   r   l  si        CCC C C C C C
 
# 
 
 
 
 
 
 
 
r%   r   c                   D    e Zd ZdZd Zedeeef         fd            ZdS )ShorthandValuez?Stores a value that sets other values (e.g. the font shorthand)c                    | j         |vrdS |                                 }| j        }t          |                                          }|D ]{}d}||vrd}nM||                    |          k    r|}n1|                    |          |                    | j                   k     }|r!||         ||<   |                    ||           ||                    | j                    dS )a   Applies a shorthand attribute to its style, respecting the
        importance state of the individual attributes.

        Args:
            style (Style): the style that the shorthand attribute is contained in,
                and that the shorthand attribute will be applied on
        NFT)	r   get_shorthand_changesr   listkeysget_importanceindexset_importancepop)r    re   dct
importancecurrent_keyscurkeyperforms          r#   apply_shorthandzShorthandValue.apply_shorthand  s    >&&F((**^
 EJJLL)) 	9 	9FG\))!5!5f!=!===(GG +0088<;M;M< < G  9 #Ff$$VZ888		$.!!!!!r%   r&   c                     dS )zcalculates the value of affected attributes for this shorthand

        Returns:
            Dict[str, str]: a dictionary containing the new values of the
            affected attributes
        Nr5   r?   s    r#   r   z$ShorthandValue.get_shorthand_changes  s      r%   N)	rJ   rK   rL   rM   r   r   r   r   r   r5   r%   r#   r   r   |  sY        II"" "" ""H tCH~    ^  r%   r   c                       e Zd ZdZd ZdS )	FontValuez%Logic for the shorthand font propertyc                 2   g d}d |D             }d |D             }d | j                             d          D             }t          |          dk    ri S t          |          dk    s|d         }||d         v r||d<   ny||d         v r||d<   ni||d	         v r||d	<   nY||d
         v r||d
<   nId|v r|                    d          \  |d<   |d<   n||d<   d                    |dd                    |d<   n|dd          }t          |          dk    |S )N)
font-stylefont-variantfont-weightfont-stretch	font-sizeline-heightfont-familyc                     i | ]<}t          t          |         d          t                    (|t          |         d          =S )rx   )r   r1   r   .0rG   s     r#   
<dictcomp>z3FontValue.get_shorthand_changes.<locals>.<dictcomp>  sN     
 
 
.-a0$77
$Q'
 
 
r%   c                 6    i | ]}|t           |         d          S )r   )r1   r   s     r#   r   z3FontValue.get_shorthand_changes.<locals>.<dictcomp>  s$    >>>##~c*1->>>r%   c                     g | ]
}|d k    |S )r(   r5   r   is     r#   
<listcomp>z3FontValue.get_shorthand_changes.<locals>.<listcomp>  s    >>>a2gg!gggr%    r   r   r   r   r   /r   r   r   r   )r   r+   lenjoin)r    r   optionsr9   tokenscurs         r#   r   zFontValue.get_shorthand_changes  s   
 
 

 

 
 

 ?>>>>>>TZ--c22>>>v;;!Iv;;!##)Cgl+++'*|$$///),~&&...(+}%%///),~&&#::AD3>F;')>)>*-F;'(+(<(<}%ABBZF# v;;!##$ r%   N)rJ   rK   rL   rM   r   r5   r%   r#   r   r     s)        //( ( ( ( (r%   r   c                   0     e Zd ZdZd Zddef fdZ xZS )MarkerShorthandValuez'Logic for the marker shorthand propertyc                 :      j         dk    ri S  fddD             S )Nr(   c                      i | ]
}|j         S r5   r   )r   kr    s     r#   r   z>MarkerShorthandValue.get_shorthand_changes.<locals>.<dictcomp>  s    TTT!4:TTTr%   )marker-start
marker-end
marker-midr   r?   s   `r#   r   z*MarkerShorthandValue.get_shorthand_changes  s0    :ITTTT'STTTTr%   Nr   c                 X    |dk    rdS t                                          ||          S )Nr(   )r   r2   )r    r   r3   r   s      r#   r2   z!MarkerShorthandValue._parse_value  s+    B;;2ww##E7333r%   r;   )rJ   rK   rL   rM   r   r   r2   r   r   s   @r#   r   r     sa        11U U U
4 4# 4 4 4 4 4 4 4 4 4 4r%   r   c                        e Zd ZdZddefdZdS )FontSizeValuez Logic for the font-size propertyNr   c                     ||S 	 |                     |          S # t          $ r |                     d          cY S w xY w)N12pt)to_dimensionlessr,   r6   s      r#   r2   zFontSizeValue._parse_value  sZ    ?L	4++E222 	4 	4 	4++F33333	4s    ==r;   rf   r5   r%   r#   r   r     s:        **4 4# 4 4 4 4 4 4r%   r   c                   0    e Zd ZdZddefdZdedefdZdS )StrokeDasharrayValuez'Logic for the stroke-dasharray propertyNr   c                 "   t          j        d|          }t          |          dk    s|dk    rd S t          d |D                       sd |D             }nd S t          d |D                       rd S t          |          dz  dk    rd|z  }|S )	Nz[^,\s]+r   rw   c              3   8   K   | ]}t          |          d u V  d S r;   )r   r   s     r#   	<genexpr>z4StrokeDasharrayValue._parse_value.<locals>.<genexpr>  s-      99Q:a==D(999999r%   c                 .    g | ]}t          |d           S )px)r   r   s     r#   r   z5StrokeDasharrayValue._parse_value.<locals>.<listcomp>  s"    <<<l1d++<<<r%   c              3   "   K   | ]
}|d k     V  dS )r   Nr5   r   s     r#   r   z4StrokeDasharrayValue._parse_value.<locals>.<genexpr>  s&      %%q1u%%%%%%r%   r   r   )ri   findallr   any)r    r   r3   dashess       r#   r2   z!StrokeDasharrayValue._parse_value  s    J..v;;!u499&99999 	<<V<<<FF4%%f%%%%% 	4v;;?aZFr%   r&   c                     |dS t          |t                    r(d                    t          t          |                    S t	          |          S )Nrw   r   )r   r   r   mapr   r=   s     r#   r8   z#StrokeDasharrayValue._unparse_value  sD    =6eT"" 	-88CUOO,,,5zzr%   r;   r^   r5   r%   r#   r   r     s\        11 #    F s      r%   r   zalignment-baselinebaselineTF)r   text-bottom
alphabeticideographicmiddlecentralmathematicaltext-topzbaseline-shiftr[   clipautoz	clip-pathrw   z	clip-rulenonzeroevenoddrc   blackzcolor-interpolationsRGB)r   r   	linearRGBzcolor-interpolation-filtersr   )r   r   r   zcolor-rendering)r   optimizeSpeedoptimizeQualitycursor	directionltrrtldisplayinline)r   blockz	list-itemzinline-blocktablezinline-tableztable-row-groupztable-header-groupztable-footer-groupz	table-rowztable-column-groupztable-columnz
table-cellztable-captionrw   zdominant-baseline)	r   r   r   r   r   r   r   hangingr   fillzfill-opacityr\   z	fill-rulefilterzflood-colorzflood-opacityfontr(   r   z
sans-serifr   mediumzfont-size-adjustr   normal)	r   zultra-condensedzextra-condensed	condensedzsemi-condensedzsemi-expandedexpandedzextra-expandedzultra-expandedr   )r   italicobliquer   z
small-capsr   boldc                 ,    g | ]}t          |          S r5   r<   r   s     r#   r   r     s    CCCc!ffCCCr%   d   i  zglyph-orientation-horizontal0degzglyph-orientation-verticalzimage-rendering)r   r   r   zletter-spacingzlighting-colorr   markerr   r   r   maskopacityoverflowvisible)r  hiddenscrollr   zpaint-orderzpointer-eventsvisiblePainted)
zbounding-boxr  visibleFillvisibleStroker  paintedr   strokeallrw   zshape-rendering)r   r   
crispEdgesgeometricPrecisionz
stop-colorzstop-opacityr	  zstroke-dasharrayzstroke-dashoffsetzstroke-linecapbutt)r  roundsquarezstroke-linejoinmiter)r  z
miter-clipr  bevelarcszstroke-miterlimit4start)r  r   endellipsis)r   r   optimizeLegibilityr  )r   embedisolatezbidi-overridezisolate-override	plaintext)r  r  collapse)r   prenowrapzpre-wrapzbreak-spaceszpre-linehorizontal-tb)	r  zvertical-rlzvertical-lrlrzlr-tbrlzrl-tbtbztb-rl)zstroke-opacityzstroke-widthz
text-alignztext-anchorztext-decorationztext-overflowztext-renderingzunicode-bidizvector-effectzvertical-align
visibilityzwhite-spacezword-spacingzwriting-modez-inkscape-font-specificationr1   )'rM   abcr   r   ri   typingr   r   r   r   r	   r
   interfaces.IElementr   r   unitsr   r   colorsr   r   r   rT   r`   rk   r   rs   ru   r   r   r   r   r   r   r   ranger1   rO   __annotations__r5   r%   r#   <module>r*     s
  &	 	 	 $ # # # # # # # 				 ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; B B B B B B B B + + + + + + + + % % % % % % % %w w w w w w w wt1 1 1 1 1 1 1 16       " 5+ + + + +0
 
 
 
 
> 
 
 
8#- #- #- #- #-\ #- #- #-L
 
 
 
 
 
 
 
 . . . . .^S . . .b+ + + + + + + +\4 4 4 4 4>< 4 4 4	4 	4 	4 	4 	4N 	4 	4 	4    >   NC		
 		
 		
C" ~sD%>#C$ ^VT5$7%C& ,eT:'C( )YdY	4JK)C, j'4t4-C. %%%/C< "%%%$=CJ 444KCX ~vtT48YCZ )UD$?[C\ 	
 	
 	
]CJ 
	
 
	
 
	
KCl mCz ZdD$7{C| )YdY	4JK}C~ ~vtUD9C C@ Jud;ACB j#tUD9CCD YD%.ECF NL$dCGCH -4t<ICJ tTBKCL 
	
 
	
 
	
MCn 9hd4S4S4SToCr Y$x6NOsCt 	6CCeeCc.B.BCCCCuCB #^VT4$NCCD !>64t"LECF 444GCT ~xtTBUCV z8T5$?WCX NHeT4@YCZ #RtT:[C C C\ <tT:]C^ <tT:_C` \64t<aCd \645eCf 
Cud3gCh ///iCv NHdE4@wCx 	
 	
 	
yC\ EEE]Cj :weT:kCl ZdE48mCn z64t4oCp -vtT4HqCr .#tT4@sCt y&$6Q6Q6QRuCv 999wCD .#tT4@EC CF "3dD9#S$d; wd4N4N4NO&dDAuvz6JKMMM 		
 	
 	
 %fdE4@%z5%Fit5V5V5VWKKK $XtT4@ 	
	
 
	
 
	
" &4\5$PT$UEC C C tN#S$eDItO6LL	MM E E E E Er%   