
    h{`                     V   S SK r S SKJrJrJrJrJrJr  SSKJ	r	  SSK
JrJrJr  SSKJrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJrJ r   Sr!S	r"S
r#0 SS_SS_SS_SS_SS_SS_SS_SS_SS_SS_SS_S S!_S"S!_S#S$_S%S$_S&S$_S'S$_S(S$0Er$ " S) S*5      r% " S+ S,5      r& " S- S.5      r'g)/    N)AnyDictListOptionalTupleUnion   )Errors)escape_htmlminify_htmlregistry   )TPL_DEP_ARCSTPL_DEP_SVGTPL_DEP_WORDSTPL_DEP_WORDS_LEMMATPL_ENTTPL_ENT_RTLTPL_ENTS
TPL_FIGURETPL_KB_LINKTPL_PAGETPL_SPANTPL_SPAN_RTLTPL_SPAN_SLICETPL_SPAN_SLICE_RTLTPL_SPAN_STARTTPL_SPAN_START_RTL	TPL_SPANS	TPL_TITLEenltrz#dddORGz#7aececPRODUCTz#bfeeb7GPEz#feca74LOCz#ff9561PERSONz#aa9cfcNORPz#c887fbFACz#9cc9ccEVENTz#ffeb80LAWz#ff8197LANGUAGEWORK_OF_ARTz#f0d0ffDATEz#bfe1d9TIMEMONEYz#e4e7d2QUANTITYORDINALCARDINALPERCENTc                   L   \ rS rSrSrSr0 4S\\\4   SS4S jjr	 SS\
\\\4      S	\S
\S\4S jjrS\
\   S\
\\\4      S\\   S\4S jr\S\
\   S\
\\\4      S\
\\\
\\\4      4      4S j5       rS\
\\\4      S\4S jrS\
\   S\4S jrS\
\   S\4S jrSrg)SpanRenderer4   zRender Spans as SVGs.spanoptionsreturnNc                    [        [        5      n[        R                  R	                  5       nUR                  5        Ho  n[        U5      (       a  U" 5       n[        U[         5      (       d/  [        [        R                  R                  [        U5      S95      eUR                  U5        Mq     UR                  UR                  S0 5      5        [        U l        UR#                  5        VVs0 s H  u  pVUR%                  5       U_M     snnU l        [(        U l        [,        U l        UR                  SS5      U l        UR                  SS5      U l        UR                  SS5      U l        UR                  S	5      nU(       a  US
   U l        US   U l        US   U l        gU R*                  S:X  a"  [<        U l        [>        U l        [@        U l        g[B        U l        [D        U l        [F        U l        gs  snnf )zVInitialise span renderer

options (dict): Visualiser-specific options (colors, spans)
objcolors
top_offset(   span_label_offset   top_offset_step   templater8   slicestartrtlN)$dictDEFAULT_LABEL_COLORSr   displacy_colorsget_allvaluescallable
isinstance
ValueErrorr
   E925formattypeupdategetDEFAULT_ENTITY_COLORdefault_coloritemsupperr>   DEFAULT_DIR	directionDEFAULT_LANGlangr?   rA   offset_stepspan_templatespan_slice_templatespan_start_templater   r   r   r   r   r   )selfr9   r>   user_colors
user_colorlabelcolorrE   s           O/home/james-whalen/.local/lib/python3.13/site-packages/spacy/displacy/render.py__init__SpanRenderer.__init__9   s    *+..668%,,.J
## (\
j$// !3!3Z8H!3!IJJMM*% / 	gkk(B/01@FOu{{}e+O % 	!++lB7!(-@"!E";;'8"= ;;z*!)&!1D'/'8D$'/'8D$~~&%1"+=(+=(%-"+9(+9(3 Ps   0G<parsedpageminifyc           
      V   / n[        U5       H  u  pVUS:X  aH  UR                  S0 5      nUR                  S[        5      U l        UR                  S[        5      U l        UR                  U R                  US   US   UR                  S5      5      5        M     U(       a^  SR                  U Vs/ s H  n[        R                  " US	9PM     sn5      n	[        R                  " XR
                  U R                  S
9n
OSR                  U5      n
U(       a  [        U
5      $ U
$ s  snf )Render complete markup.

parsed (list): Dependency parses to render.
page (bool): Render parses wrapped as full HTML page.
minify (bool): Minify HTML markup.
RETURNS (str): Rendered SVG or HTML markup.
r   settingsr[   r]   tokensspanstitle contentru   r]   dir)	enumeraterU   rZ   r[   r\   r]   appendrender_spansjoinr   rR   r   r   rb   rj   rk   rl   renderedipro   docdocsmarkups              rg   renderSpanRenderer.renderf   s     f%DAAv55R0!)k;!G$LL>	OOD--ak1W:quuW~VW & 77hOhsJ--c:hOPD__T		t~~VFWWX&Fv&& P   2D&rp   rq   rr   c                     U R                  X5      nU R                  U5      n[        R                  " XPR                  S9nU(       a  [
        R                  " US9U-   nU$ )a  Render span types in text.

Spans are rendered per-token, this means that for each token, we check if it's part
of a span slice (a member of a span type) or a span start (the starting token of a
given span type).

tokens (list): Individual tokens in the text
spans (list): Individual entity spans and their start, end, label, kb_id and kb_url.
title (str / None): Document title set in Doc.user_data['title'].
ru   rw   rr   )_assemble_per_token_info_render_markupr   rR   r[   r    )rb   rp   rq   rr   per_token_infor   s         rg   rz   SpanRenderer.render_spans   sU      66vE$$^4!!&nnE%%E2V;F    c                 B   / n[        US S9nU H  nSUS'   M
     [        U 5       H  u  pE0 nXVS'   / n/ nU H  n	0 n
U	S   Us=::  a	  U	S   :  a  O  OXIS   :H  nU	S   U
S'   XS	'   U(       a   [        U5      (       a  US
   S   OSS-   U	S'   UR                  U	5        U	S   U
S'   U	R	                  SS5      nU	R	                  SS5      nU(       a  [
        R                  " XS9OSU
S'   UR                  U
5        M  SU	S'   M     XS'   UR                  U5        M     U$ )a  Assembles token info used to generate markup in render_spans().
tokens (List[str]): Tokens in text.
spans (List[Dict[str, Any]]): Spans in text.
RETURNS (List[Dict[str, List[Dict, str, Any]]]): Per token info needed to render HTML markup for given tokens
    and spans.
c                 ,    U S   U S   U S   -
  * U S   4$ )Nstart_token	end_tokenre    )ss    rg   <lambda>7SpanRenderer._assemble_per_token_info.<locals>.<lambda>   s*    - K.1]#334'
r   keyr   render_slottextr   r   re   is_startr   kb_idrs   kb_url#r   r   kb_linkentities)sortedrx   lenry   rU   r   rR   )rp   rq   r   r   idxtokentoken_markupintersecting_spansr   r8   ent
span_startr   r   s                 rg   r   %SpanRenderer._assemble_per_token_info   st    AC
 
 A  !Am 
 $F+JC ,.L#( 79H&#A[0AA!$](;!;J#'=CL&0
O!  ##566 /r2=A!"	/]+
 '--d3)-m)<C& HHWb1E!XXh4FJO**FUW 	N OOC( +,D'; < (0$!!,/M ,P r   r   c           	         SnU H  n[        US   S S9nUS   R                  5       S:H  nU(       a  U(       d  U R                  US   5      nU R                  US   5      nU R                  U R
                  -   U R                  [        U5      S-
  -  -   nX R                  R                  [        US   5      UUUS9-  nM  U[        US   S-   5      -  nM     U$ )	z,Render the markup from per-token informationrs   r   c                     U S   $ )Nr   r   )ds    rg   r   -SpanRenderer._render_markup.<locals>.<lambda>   s	    q?Or   r   r   r   )r   span_slicesspan_startstotal_height )r   strip_get_span_slices_get_span_startsr?   rA   r^   r   r_   rR   r   )	rb   r   r   r   r   is_whitespaceslicesstartsr   s	            rg   r   SpanRenderer._render_markup   s    #EeJ/5OPH "&M//1R7M..uZ/@A..uZ/@AOO,,-''3x=1+<=? 
 ,,33$U6]3 & &!-	 4   +eFmc&9::+ $, r   r   c                 B   / nU H  nU R                   R                  US   R                  5       U R                  5      nU R                  U R
                  US   S-
  -  -   nU R                  R                  UUS9nUR                  U5        M     SR                  U5      $ )z*Get the rendered markup of all Span slicesre   r   r   )bgr?   rs   )
r>   rU   rY   rW   r?   r^   r`   rR   ry   r{   )rb   r   r   entityrf   r?   
span_slices          rg   r   SpanRenderer._get_span_slices   s    F
 KKOOF7O$9$9$;T=O=OPE  F=$9A$=>J 1188% 9 J z*  ww{##r   c                 j   / nU H  nU R                   R                  US   R                  5       U R                  5      nU R                  U R
                  US   S-
  -  -   nUS   (       a"  U R                  R                  UUUS   US   S9OSnUR                  U5        M     SR                  U5      $ )z0Get the rendered markup of all Span start tokensre   r   r   r   r   )r   r?   re   r   rs   )
r>   rU   rY   rW   r?   r^   ra   rR   ry   r{   )rb   r   r   r   rf   r?   r   s          rg   r   SpanRenderer._get_span_starts  s    FKKOOF7O$9$9$;T=O=OPE  F=$9A$=>J *% ((//) /"9-	 0    z*   ww{##r   )
r>   rW   r[   r]   r^   rA   r`   ra   r_   r?   FF)__name__
__module____qualname____firstlineno____doc__styler   strr   rh   r   boolr   r   rz   staticmethodr   r   r   r   __static_attributes__r   r   rg   r6   r6   4   sO   E13 +:S#X +: +:\ PU4S>*26HL	6S	 DcN# }	
 
. DS	D"&tCH~"6D	d3T#s(^,,-	.D DLT$sCx.-A c 6$d $ $&$d $ $r   r6   c                   f   \ rS rSrSrSr0 4S\\\4   SS4S jjr	 S#S\
\\\4      S	\S
\S\4S jjrS\\\4   S\
\\\4      S\
\\\4      S\4S jrS\S\S\S\S\4
S jrS\S\S\S\S\S\4S jrS\S\S\S\S\4
S jrS\S\S\S\S\4
S  jrS\
\\\4      S\\\\\4   \4   4S! jrS"rg)$DependencyRendereri#  z!Render dependency parses as SVGs.depr9   r:   Nc                 n   UR                  SS5      U l        UR                  SS5      U l        UR                  SU R                  (       a  SOS5      U l        UR                  SU R                  (       a  S	OS
5      U l        UR                  SS5      U l        UR                  SU R                  (       a  SOS5      U l        UR                  SS5      U l        UR                  SS5      U l        UR                  SS5      U l	        UR                  SS5      U l
        [        U l        [        U l        g)zInitialise dependency renderer.

options (dict): Visualiser-specific options (compact, word_spacing,
    arrow_spacing, arrow_width, arrow_stroke, distance, offset_x,
    color, bg, font)
compactFword_spacing-   arrow_spacing   rB   arrow_width   
   arrow_stroker	   distance      offset_x2   rf   z#000000r   z#fffffffontArialN)rU   r   r   r   r   r   r   r   rf   r   r   rZ   r[   r\   r]   )rb   r9   s     rg   rh   DependencyRenderer.__init__(  s     {{9e4#KK;$[["RTU";;}4<<aRP#KK:Jt||MJ3[[)4
++dI.KK0	$ 	r   rj   rk   rl   c           	         [         R                  " 5       R                  n/ n[        U5       H  u  pgUS:X  aH  UR	                  S0 5      nUR	                  S[
        5      U l        UR	                  S[        5      U l        U SU 3n	U R                  XS   US   5      n
UR	                  S5      (       a&  [        R                  " UR	                  S5      S	9U
-   n
UR                  U
5        M     U(       a^  S
R                  U V
s/ s H  n
[        R                  " U
S9PM     sn
5      n[        R                  " XR                  U R                  S9nOS
R                  U5      nU(       a  [!        U5      $ U$ s  sn
f )rn   r   ro   r[   r]   -wordsarcsrr   r   rs   rt   rv   )uuiduuid4hexrx   rU   rZ   r[   r\   r]   
render_svgr    rR   ry   r{   r   r   r   )rb   rj   rk   rl   	id_prefixr}   r~   r   ro   	render_idsvgru   r   s                rg   r   DependencyRenderer.render<  s5    JJL$$	f%DAAv55R0!)k;!G$LL>	$+Qqc*I//)wZ6CCuuW~~&&QUU7^<sBOOC  & ggR#z00=RSG__iiT^^F WWX&Fv&& Ss   E:r   r   r   c                    U R                  U5      U l        [        U R                  R                  5       SS9U l        U R
                  S-  U R                  -  U R                  -   U l        U R                  [        U5      U R
                  -  -   U l
        U R                  SU R                  -  -   U l        Xl        [        U5       VVs/ s H/  u  pEU R                  US   US   UR!                  SS5      U5      PM1     nnn[        U5       VVs/ s H&  u  pGU R#                  US	   US
   US   US   U5      PM(     nnnSR%                  U5      SR%                  U5      -   n	[&        R(                  " U R                  U R                  U R                  U R*                  U R,                  U R.                  U	U R0                  U R2                  S9	$ s  snnf s  snnf )zRender SVG.

render_id (Union[int, str]): Unique ID, typically index of document.
words (list): Individual words and their tags.
arcs (list): Individual arcs and their start, end, direction and label.
RETURNS (str): Rendered SVG markup.
r   defaultr	      r   taglemmaNre   rG   endrw   rs   )	idwidthheightrf   r   r   ru   rw   r]   )
get_levelslevelsmaxrM   highest_levelr   r   offset_yr   r   r   r   r   r   rx   render_wordrU   render_arrowr{   r   rR   rf   r   r   r[   r]   )
rb   r   r   r   r~   w	words_svgaarcs_svgru   s
             rg   r   DependencyRenderer.render_svg_  s    ood+ !3!3!5qA)D,>,>>ARARR]]SZ$--%??
mma$*;*;&;; "%(
( QvY%!%%2FJ( 	 
 "$
' aj!G*ah%!L' 	 
 '')$rwwx'88!!ww**;;**ww

 
	


s   6G-Gr   r   r   r~   c                    U R                   U R                  -   nU R                  X@R                  -  -   nU R                  S:X  a  U R
                  U-
  n[        U5      nUb  [        R                  " XrX6US9$ [        R                  " XrXeS9$ )zRender individual word.

text (str): Word text.
tag (str): Part-of-speech tag.
i (int): Unique ID, typically word index.
RETURNS (str): Rendered SVG markup.
rH   )r   r   r   xy)r   r   r  r  )
r   r   r   r   r[   r   r   r   rR   r   )rb   r   r   r   r~   r  r  	html_texts           rg   r   DependencyRenderer.render_word  s     MMD---MMA-->>U"

QA%	&--uQ  ##qFFr   re   rG   r   r[   c           
         US:  d  US:  a3  [        X#XS9n[        [        R                  R                  " S0 UD65      eU R
                  X#U4   nU R                  X R                  -  -   U R                  -   nU R                  S:X  a  U R                  U-
  nU R                  n	U R                  X2-
  U R                  -  -   X R                  -  -   U R                  U R                  U-
  -  S-  -
  n
U R                  S:X  a  U R                  U
-
  n
U R                  XpR                  -  S-  -
  nU R                  (       a  U R                  XpR                  -  S-  -
  nUS:X  a3  [        U R
                  R                  5       SS9S:  a  U R                  * nU R!                  XHX5      nU R#                  XX5      nU R                  S:X  a  S	OS
n[$        R                  " U R&                  UU R(                  UUUUS9$ )zRender individual arrow.

label (str): Dependency label.
start (int): Index of start word.
end (int): Index of end word.
direction (str): Arrow direction, 'left' or 'right'.
i (int): Unique ID, typically arrow index.
RETURNS (str): Rendered SVG markup.
r   )rG   r   re   rw   rH      r	   r   r      rightleft)r   r~   strokeheadre   
label_sidearcr   )rI   rP   r
   E157rR   r   r   r   r   r[   r   r   r   r   r   rM   get_arrowheadget_arcr   r   r   )rb   re   rG   r   r[   r~   
error_argslevelx_startr  x_endy_curve	arrowheadr  r  s                  rg   r   DependencyRenderer.render_arrow  s    19aE%OJV[[//=*=>>U/0--%--"77$:L:LL>>U"jj7*GMMMM{dmm+,mm#$   D$6$6$>?!CD 	 >>U"JJ&E--%--"7!";;<<mmemm&;a&??Ga<C 2 2 4a@1D}}nG&&y1D	ll7w6 $% 7WV
""ww$$!
 	
r   r  r  r  r  c                 L    SnU R                   (       a  SnUR                  XX4S9$ )u#  Render individual arc.

x_start (int): X-coordinate of arrow start point.
y (int): Y-coordinate of arrow start and end point.
y_curve (int): Y-corrdinate of Cubic Bézier y_curve point.
x_end (int): X-coordinate of arrow end point.
RETURNS (str): Definition of the arc path ('d' attribute).
z!M{x},{y} C{x},{c} {e},{c} {e},{y}z M{x},{y} {x},{c} {e},{c} {e},{y})r  r  ce)r   rR   )rb   r  r  r  r  rE   s         rg   r  DependencyRenderer.get_arc  s(     7<<9HBBr   r  c                     US:X  a$  X"U R                   -
  S-   X R                   -   S-
  pvnO#XDU R                   -   S-
  X@R                   -
  S-   pvnSU SUS-    SU SX0R                   -
   SU SX0R                   -
   3$ )a"  Render individual arrow head.

direction (str): Arrow direction, 'left' or 'right'.
x (int): X-coordinate of arrow start point.
y (int): Y-coordinate of arrow start and end point.
end (int): X-coordinate of arrow end point.
RETURNS (str): Definition of the arrow head path ('d' attribute).
r  r	   M,z Lr   )r   )rb   r[   r  r  r   p1p2p3s           rg   r   DependencyRenderer.get_arrowhead  s     !1!11A5q;K;K7Ka7OBBBT%5%5593AQAQ;QTU;UBB2$aAwbAa*:*:&:%;1RD!FVFVBVAWXXr   c           	         U Vs1 s H%  n[        [        UR                  5       5      5      iM'     sn Vs/ s H  n[        U5      PM     nn[	        U Vs/ s H  o"S   PM	     snSS9nS/U-  n0 n[        US S9 HF  n[	        XRS   US    5      S-   n[        US   US   5       H  nXuU'   M	     XvUS   US   US   4'   MH     U$ s  snf s  snf s  snf )	zCalculate available arc height "levels".
Used to calculate arrow heights dynamically and without wasting space.

args (list): Individual arcs and their start, end, direction and label.
RETURNS (dict): Arc levels keyed by (start, end, label).
r   r   r   c                     U S   U S   -
  $ )Nr   rG   r   )r  s    rg   r   /DependencyRenderer.get_levels.<locals>.<lambda>  s    E
S\0Ir   r   rG   r   re   )tupler   rX   rI   r   range)	rb   r   r  tlength	max_levelr   r  r~   s	            rg   r   DependencyRenderer.get_levels  s     IM!M%syy{(;"<!MN!MAQ!MND1DS%jD11=C&L	$$IJC	g,U<=AE3w<U4$! 5?DCL#e*c'l;<	 K
  "NN1s   ,C	CC)r   r   r   r   rf   r   r[   r   r   r   r   r   r]   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   r   rh   r   r   r   r   intr   r   r   r  r  r   r   r   r   r   rg   r   r   #  s   +E13 !S#X ! !* PU!4S>*!26!HL!	!F&
c?&
 DcN#&
 4S>"	&

 
&
PG G# Gc Gc Gc G&,
,
!$,
+.,
;>,
CF,
	,
\Cs Cs CS C C CYs Ys Ys Y Y YtDcN3 U3S==QSV=V8W r   r   c            	           \ rS rSrSrSr0 4S\\\4   SS4S jjr	 SS\
\\\4      S	\S
\S\4S jjrS\S\
\\\4      S\\   S\4S jrSrg)EntityRendereri  zRender named entities as HTML.r   r9   r:   Nc                    [        [        5      n[        R                  R	                  5       nUR                  5        Ho  n[        U5      (       a  U" 5       n[        U[         5      (       d/  [        [        R                  R                  [        U5      S95      eUR                  U5        Mq     UR                  UR                  S0 5      5        [        U l        UR#                  5        VVs0 s H  u  pVUR%                  5       U_M     snnU l        UR                  SS5      U l        U R(                  b/  U R(                   Vs/ s H  owR%                  5       PM     snU l        [*        U l        [.        U l        UR                  S5      nU(       a  Xl        gU R,                  S:X  a  [4        U l        g[6        U l        gs  snnf s  snf )zXInitialise entity renderer.

options (dict): Visualiser-specific options (colors, ents)
r<   r>   entsNrE   rH   )rI   rJ   r   rK   rL   rM   rN   rO   rP   r
   rQ   rR   rS   rT   rU   rV   rW   rX   rY   r>   r3  rZ   r[   r\   r]   ent_templater   r   )	rb   r9   r>   rc   rd   re   rf   r   rE   s	            rg   rh   EntityRenderer.__init__  sU   
 *+..668%,,.J
## (\
j$// !3!3Z8H!3!IJJMM*% / 	gkk(B/01@FOu{{}e+OKK-	99 04		:		:DI$ 	;;z* (~~&$/!$+! P ;s   0GGrj   rk   rl   c           
      V   / n[        U5       H  u  pVUS:X  aH  UR                  S0 5      nUR                  S[        5      U l        UR                  S[        5      U l        UR                  U R                  US   US   UR                  S5      5      5        M     U(       a^  SR                  U Vs/ s H  n[        R                  " US	9PM     sn5      n	[        R                  " XR
                  U R                  S
9n
OSR                  U5      n
U(       a  [        U
5      $ U
$ s  snf )rn   r   ro   r[   r]   r   r3  rr   rs   rt   rv   )rx   rU   rZ   r[   r\   r]   ry   render_entsr{   r   rR   r   r   r|   s              rg   r   EntityRenderer.render  s     f%DAAv55R0!)k;!G$LL>	OOD,,QvY&	155>RS & 77hOhsJ--c:hOPD__T		t~~VFWWX&Fv&& Pr   r   rq   rr   c                 2   SnSnU GHo  nUS   nUS   nUS   n	UR                  SS5      n
UR                  SS5      nU
(       a  [        R                  " XS	9OSnUR                  S
0 5      n[        XU	 5      nXU R	                  S5      n[        U5       H>  u  nnU[        U5      -  n[        U5      S:  d  M%  U[        U5      S-
  :w  d  M9  US-  nM@     U R                  b  UR                  5       U R                  ;   ak  U R                  R                  UR                  5       U R                  5      nUUUUS.nUR                  U5        X@R                  R                  " S0 UD6-  nOXN-  nU	nGMr     XS R	                  S5      n[        U5       H>  u  nnU[        U5      -  n[        U5      S:  d  M%  U[        U5      S-
  :w  d  M9  US-  nM@     [        R                  " X@R                  S9nU(       a  [        R                  " US9U-   nU$ )zRender entities in text.

text (str): Original text.
spans (list): Individual entity spans and their start, end, label, kb_id and kb_url.
title (str / None): Document title set in Doc.user_data['title'].
rs   r   re   rG   r   r   r   r   r   params
r   z<br>N)re   r   r   r   r   r   r   )rU   r   rR   r   splitrx   r   r3  rY   r>   rW   rT   r4  r   r[   r    )rb   r   rq   rr   r   offsetr8   re   rG   r   r   r   r   additional_paramsr   	fragmentsr~   fragmentrf   ent_settingss                       rg   r7  EntityRenderer.render_ents7  s    DMEMEu+CHHWb)EXXh,FHMk((uDSUG $2 6 C1FE*006I(38+h//y>A%!s9~/A*Af$F  4 yy EKKMTYY$>t7I7IJ""&	  ##$56++22B\BB F5 6 M''-	$Y/KAxk(++F9~!a3y>A+=&=&  0 ^^D%%E2V;Fr   )r>   rW   r[   r4  r3  r]   r   )r   r   r   r   r   r   r   r   r   rh   r   r   r   r   r7  r   r   r   rg   r1  r1    s    (E13 ,S#X , ,B PU4S>*26HL	4.. $T#s(^ 4.=Ec].	.r   r1  )(r   typingr   r   r   r   r   r   errorsr
   utilr   r   r   	templatesr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r\   rZ   rV   rJ   r6   r   r1  r   r   rg   <module>rG     sD    : :  5 5    *  	9y 
9 
9	
 i I 
9 Y 
9 	 9 I I Y 	  y!" 	#$ y% ,l$ l$^R Rjm mr   