
    Ngi              
       P   d Z ddlZddlZddlmZ ddlZddlmZ ddlZddl	Z	ddl
Z
ddlZddlZddlZddlmZ ddlZddlZddlZddlmZmZmZmZ ddlmZ ddlmZmZmZmZ dd	l m!Z!m"Z" dd
l#m$Z$ ddl%m&Z&m'Z' ddl(m)Z) ddl*m+Z+ ddl,m-Z- ddl.m/Z/ ddl0m1Z1 ddl2m3Z3 ddl4m5Z5  e	j6        e7          Z8dZ9ej:         G d d                      Z;i dddddddddd d!d"d#d$d%d&d'd(d)d*d+d,d-d.d/d0d1d2d3d4d5d6d7d8d9d:d;d<d=d>d?d@dAZ<dB Z=dCdDdEZ>dF Z?dG Z@dH ZAdI ZB G dJ dKe5jC                  ZD G dL dMe          ZE G dN dOe          ZFdP ZGdQ ZHd\dRZId\dSZJ ejK        dT          d]dU            ZLdV ZMdW ZNd^dXZOeZPg dYZQejR         G dZ d[e                      ZSdS )_zG
A PostScript backend, which can produce both PostScript .ps and .eps.
    N)Enum)StringIO)TemporaryDirectory)_apicbook_path_text_helpers)AFM)_BackendFigureCanvasBaseFigureManagerBaseRendererBase)is_writable_file_likefile_requires_unicode)get_font)LOAD_NO_SCALEFT2Font)convert_ttf_to_ps)	uni2type1)Path)
TexManager)Affine2D)MixedModeRenderer   )_backend_pdf_psFc                   X    e Zd Z  ej        dd           ed                     ZdS )__getattr__z3.8 )obj_typec                     t           S N)_psDefsselfs    Z/var/www/html/ai-engine/env/lib/python3.11/site-packages/matplotlib/backends/backend_ps.py<lambda>z__getattr__.<lambda>-   s    w     N)__name__
__module____qualname__r   
deprecatedpropertypsDefs r'   r%   r   r   *   s>         1_T_UR000:N:N1O1OPPFFFr'   r   letter)      !@   legal)r0      ledger)r1      a0)Gz@@gHzgG@a1)p=
c7@r7   a2)
ףp=0@r9   a3)zGa'@r;   a4)
ףp= @r=   a5)RQ@r?   a6)Q@rA   a7)HzG@rC   a8)ffffff @rE   a9)\(\?rG   a10)gRQ?rI   b0)fffffFD@g)\L@b1))\<@rL   b2)QE4@rN   ))\,@rP   )Q8$@rQ   )p=
ף@rR   ))\(@rS   )p=
ף@rT   )Gz@rU   ))\(?rV   )g)\(?rW   )b3b4b5b6b7b8b9b10c                     t          t                                          d          D ].\  }\  }}|                    d          r| |k     r
||k     r|c S /dS )NT)reverselr6   )sorted	papersizeitems
startswith)whkeypwphs        r%   _get_papertyperl   K   sg    	 1 14@@@  Xb">># 	r66a"ffJJJ4r'    )sepc                 @    |                      d |D                       S )Nc              3   j   K   | ].}|d                      d                               d          V  /dS )1.3f0.N)rstrip).0args     r%   	<genexpr>z_nums_to_str.<locals>.<genexpr>U   sB      JJcsMM((--44S99JJJJJJr'   )join)rn   argss     r%   _nums_to_strrz   T   s#    88JJTJJJJJJr'   c                 *   t          |          rbt          |          rt          | d          nt          | d          }|5  t          j        ||           ddd           dS # 1 swxY w Y   dS t          j        | |t          j                   dS )z
    Move the contents of file at *src* to path-or-filelike *dst*.

    If *dst* is a path, the metadata of *src* are *not* copied.
    latin-1encodingrbN)copy_function)r   r   openshutilcopyfileobjmovecopyfile)srcdstfhs      r%   _move_path_to_path_or_streamr   X   s     S!! =&s++#d3++++T?? 	  	( 	(r3'''	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	( 	CFO<<<<<<s   A%%A),A)c                 >  
 t          | d          

fd|D             }d                    
j        d
j        z  d                    t          t          
j                            d                    
fd|D                       t          |          dz             }d}g }|D ]}
	                    |t                    }
                                \  }}	|                    d	
                    |          d                    t          t          |j        d
g|j                            dz  t          j        t#          |dz  |	          ddddd
g dd                              d          z   dz              |d                    |          z   |z   S )a  
    Subset *chars* from the font at *font_path* into a Type 3 font.

    Parameters
    ----------
    font_path : path-like
        Path to the font to be subsetted.
    chars : str
        The characters to include in the subsetted font.

    Returns
    -------
    str
        The string representation of a Type 3 font, which can be included
        verbatim into a PostScript file.
    r   )hinting_factorc                 :    g | ]}                     |          S r.   get_char_indexru   cfonts     r%   
<listcomp>z%_font_to_ps_type3.<locals>.<listcomp>z   s'    777A$$Q''777r'   aM  %!PS-Adobe-3.0 Resource-Font
%%Creator: Converted from TrueType to Type 3 by Matplotlib.
10 dict begin
/FontName /{font_name} def
/PaintType 0 def
/FontMatrix [{inv_units_per_em} 0 0 {inv_units_per_em} 0 0] def
/FontBBox [{bbox}] def
/FontType 3 def
/Encoding [{encoding}] def
/CharStrings {num_glyphs} dict dup begin
/.notdef 0 def
rm   c              3   H   K   | ]}d                      |           V  dS )/N)get_glyph_name)ru   glyph_idr   s     r%   rw   z$_font_to_ps_type3.<locals>.<genexpr>   sN       8 8!) A!4!4X!>!>@@ 8 8 8 8 8 8r'   )	font_nameinv_units_per_embboxr~   
num_glyphsz
end readonly def

/BuildGlyph {
 exch begin
 CharStrings exch
 2 copy known not {pop /.notdef} if
 true 3 1 roll get exec
 end
} _d

/BuildChar {
 1 index /Encoding get exch get
 1 index /BuildGlyph get exec
} _d

FontName currentdict end definefont pop
z/%(name)s{%(bbox)s sc
r   )namer   @   NF)   m   lr'      cr'   Tasciizce} _d
)r   formatpostscript_nameunits_per_EMrx   mapstrr   len
load_glyphr   get_pathappendr   horiAdvancer   convert_to_stringr   decode)	font_pathchars	glyph_idspreamble	postambleentriesr   gvr   r   s             @r%   _font_to_ps_type3r   h   s   " Ia000D7777777I FT) 11S$),,--HH 8 8 8 8-68 8 8 8 8)nnq(  * * $I& G 
 
OOHm44}}1%++H55S1=!*Eaf*E!F!FGG) )  % QVQtUD!
 -,,d4 4 5;F7OOD 	
 	
 	
 	
" dii(((944r'   c                 @  	 d                     d |D                       }t                              d| |           	 t          j        | |          }t                              d| t          j        |           j        |                                j	                   t          |          		fd|D             }t                      5 }t
          j                             |d          }t          |d          5 }|                    |                                           ddd           n# 1 swxY w Y   t!          t          j        |          |d	|           ddd           dS # 1 swxY w Y   dS # t$          $ r t                              d
            w xY w)a2  
    Subset *chars* from the font at *font_path* into a Type 42 font at *fh*.

    Parameters
    ----------
    font_path : path-like
        Path to the font to be subsetted.
    chars : str
        The characters to include in the subsetted font.
    fh : file-like
        Where to write the font.
    r   c              3   4   K   | ]}t          |          V  d S r!   )chr)ru   r   s     r%   rw   z%_font_to_ps_type42.<locals>.<genexpr>   s(      //AQ//////r'   zSUBSET %s characters: %szSUBSET %s %d -> %dc                 :    g | ]}                     |          S r.   r   r   s     r%   r   z&_font_to_ps_type42.<locals>.<listcomp>   s'    ;;;T((++;;;r'   ztmp.ttfwbN*   zDThe PostScript backend does not currently support the selected font.)rx   _logdebugr   get_glyphs_subsetosstatst_size	getbuffernbytesr   r   pathr   writegetvaluer   fsencodeRuntimeErrorwarning)
r   r   r   
subset_strfontdatar   tmpdirtmpfiletmpr   s
            @r%   _font_to_ps_type42r      s)    ///////JJJ)9jAAA"4Y
KK

'BGI4F4F4N%%''.	0 	0 	0 x  ;;;;U;;;	!! 	GVgll6955Ggt$$ /		(++--.../ / / / / / / / / / / / / / / bk'22BIFFF	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G    )	* 	* 	* 		sT   BE7 	1E*:(D."E*.D2	2E*5D2	6'E*E7 *E..E7 1E.2E7 7&Fc                 F     t          j                    fd            }|S )z}
    Wrap `RendererPS` method *meth* to emit a PS comment with the method name,
    if the global flag `debugPS` is set.
    c                 p    t           r#| j                            dj         d            | g|R i |S )Nz% r   )debugPS	_pswriterr   r(   )r$   ry   kwargsmeths      r%   wrapperz!_log_if_debug_on.<locals>.wrapper   sO     	9N  !7dm!7!7!7888tD*4***6***r'   )	functoolswraps)r   r   s   ` r%   _log_if_debug_onr      s:    
 _T+ + + + +
 Nr'   c                       e Zd ZdZ ej        d          ZdZd! fd	Zd Z	d"dZ
d"d	Zed
             Zd"dZed             Zd"dZd"dZd"dZd Zd Zd#dZd Zed$d            Zed$d            Ze	 d$d            Zed             Zeddd            Zed#d            Zed             Zed             Zdddd Z  xZ!S )%
RendererPSz
    The renderer handles all the drawing primitives using a graphics
    context instance that controls the colors/styles.
    z	fonts/afm	ps.useafmH   c                    t                                          ||           || _        t          j        d         rd| _        g | _        || _        d | _        d | _	        d | _
        d | _        d | _        d | _        d | _        i | _        |dz  | _        i | _        d| _        t'          j                    | _        t-          j        t0          j                  | _        d S )Ntext.usetexr   r   )super__init__r   mplrcParamstextcntpsfragimagedpicolor	linewidthlinejoinlinecaplinedashfontnamefontsize_hatchesimage_magnification_clip_paths_path_collection_idr   CharacterTracker_character_trackerr   cacher   r   _logwarn_once)r$   widthheightpswriterr   	__class__s        r%   r   zRendererPS.__init__   s     	'''!<& 	DLDK  
#+b= #$ "1"B"D"D&_T\::r'   c                     |dS t          |          dk    r1|d         dk    rdS |d         dk    r|                     d           dS dS )NT      r   r   zlThe PostScript backend does not support transparency; partially transparent artists will be rendered opaque.F)r   r   )r$   rgb_or_rgbas     r%   _is_transparentzRendererPS._is_transparent  sp    4""1~""t1~""""MN N N 55r'   Tc                     |||f| j         k    r\| j                            ||cxk    r|k    rn nt          |           dnt          |||           d           |r|||f| _         d S d S d S )Nz	 setgray
z setrgbcolor
)r   r   r   rz   )r$   rr   bstores        r%   	set_colorzRendererPS.set_color  s    q!9
""N  $%KKKKaKKKKK %1OO!?!?!?!?$0Aq$9$9!I!I!IK K K  'AY


 #"' 'r'   c                     t          |          }|| j        k    r5| j                            t	          |           d           |r|| _        d S d S d S )N setlinewidth
)floatr   r   r   rz   )r$   r   r  s      r%   set_linewidthzRendererPS.set_linewidth'  sh    )$$	&&N  L$;$;!L!L!LMMM +!* '&+ +r'   c                 ,    ddddddd|          } | ddS )Nr   r      )miterroundbevelr   r   r
  dz setlinejoin
r.   )r   s    r%   _linejoin_cmdzRendererPS._linejoin_cmd.  s3     Q1qII,,,,,r'   c                     || j         k    r8| j                            |                     |                     |r|| _         d S d S d S r!   )r   r   r   r  )r$   r   r  s      r%   set_linejoinzRendererPS.set_linejoin5  sX    t}$$N  !3!3H!=!=>>> ) ( %$) )r'   c                 ,    ddddddd|          } | ddS )Nr   r   r
  )buttr  
projectingr   r   r
  r  z setlinecap
r.   )r   s    r%   _linecap_cmdzRendererPS._linecap_cmd;  s3     qaA!LL*****r'   c                     || j         k    r8| j                            |                     |                     |r|| _         d S d S d S r!   )r   r   r   r  )r$   r   r  s      r%   set_linecapzRendererPS.set_linecapB  sX    dl""N  !2!27!;!;<<< '& #"' 'r'   c                    | j         '| j         \  }}t          j        ||          r||k    rd S | j                            |,t          |          rdt          |  dt          |           dnd           |r||f| _         d S d S )N[z] z	 setdash
z[] 0 setdash
)r   nparray_equalr   r   r   rz   )r$   offsetseqr  oldooldseqs         r%   set_linedashzRendererPS.set_linedashH  s    =$=LD&~c6** tv~~ #CHH Xs!3WW|F7K7KWWWW-	/ 	/ 	/  	*#SMDMMM	* 	*r'   c                     ||f| j         | j        fk    r4| j                            d| d|dd           |r|| _         || _        d S d S d S )Nr   rm   rq    selectfont
)r   r   r   r   )r$   r   r   r  s       r%   set_fontzRendererPS.set_fontT  su    hDM4=#AAAN  !LX!L!L!L!L!L!LMMM ) ( (	 BA) )r'   c                    d}|| j         v r| j         |         S dt          | j                   z  }t          j        d         }| j        dz  }| j                            d|dd|dd|dd|dd	|d
d|                     t          j	        |          t                                          |          d           d|d
d| d           || j         |<   |S )Nr   zH%dzhatch.linewidthzH  << /PatternType 1
     /PaintType 2
     /TilingType 2
     /BBox[0 0 r  rm   z]
     /XStep z
     /YStep z(

     /PaintProc {
        pop
        r   r  Fsimplifyz]
        gsave
        fill
        grestore
        stroke
     } bind
   >>
   matrix
   0 z translate
   makepattern
   /z
 exch def
)r   r   r   r   r   r   r   _convert_pathr   hatchr   scale)r$   r(  sidelenr   r   
pageheights         r%   create_hatchzRendererPS.create_hatch[  sL   DM!!=''s4=)))L!23	[2%
  	   $	  
       
   DJu%%xzz'7'7'@'@5QQ & '  * 
+   	 	 	.  $er'   c                     | j         S )z
        Get the factor by which to magnify images passed to draw_image.
        Allows a backend to have images at a different resolution to other
        artists.
        )r   r#   s    r%   get_image_magnificationz"RendererPS.get_image_magnification|  s     ''r'   FNc           
          |rdd| j         dz  | j        dz  f}nd }t          j        ||||d dg dd                              d          S )Ng        g      R@   )r   r   r'   r   s   clTr   )r   r   r   r   r   )r$   r   	transformclipr&  s        r%   r'  zRendererPS._convert_path  sg     	dj4/t1CDDDD&)T8T---t5 55;VG__	Er'   c           
      $   g }|                                 }|.|                    t          g |j        |j        R   d           |                                \  }}||t          |          f}| j                            |          }|Xdt          | j                  z  }| j
                            d| d|                     ||d           d           || j        |<   |                    | d           d	                    |          S )
N
 rectclip
zc%dr   z {
Fr%  z
clip
newpath
} bind def
r   r   )get_clip_rectangler   rz   p0sizeget_clip_pathidr   getr   r   r   r'  rx   )r$   gcr2  rectr   trfri   custom_clip_cmds           r%   _get_clip_cmdzRendererPS._get_clip_cmd  s8   $$&&KK<==49===JJJKKK$$&&	cC/C".22377O&"'#d.>*?*?"?$$ && &D#..& & &    )8 %KK?...///wwt}}r'   c                 8   |j         d d         \  }}d}|d d dd d d df         }	|	                                                    dd          }
|d}|| j        z  }|| j        z  }nPd                    t          t          |                                                                                    }d	}d	}| j	        
                    d
|                     |           d|dd|dd| d|dd|dd|dd|dd|dd|dd|dd|dd| d|
 d           d S )Nr
  zfalse 3 colorimager   r   z1 0 0 1 0 0rm   g      ?gsave
r   z translate
[z	] concat
z scale
/DataString r  z string def
z 8 [ z 0 0 -z 0 z5 ]
{
currentfile DataString readhexstring pop
} bind 

grestore
)shapetobyteshexr   rx   r   r   frozen	to_valuesr   r   r?  )r$   r;  xyimr1  rh   rg   imagecmddatahexdatamatrixxscaleyscales                 r%   
draw_imagezRendererPS.draw_image  s    x|1'$$B$2A2+,,..$$T3//"F11F11FFXXc#y'7'7'9'9'C'C'E'EFFGGFFF B     	   		 
   
          	         %&   
  	   	 	 	 	 	r'   c                     |d u o|                                 d u }|j        o|}|                     ||||          }|                     |||           d S )Nr2  r&  )get_hatch_pathshould_simplifyr'  _draw_ps)r$   r;  r   r1  rgbFacer2  r&  pss           r%   	draw_pathzRendererPS.draw_path  sh     $>2#4#4#6#6$#>'0DidXNNb"g&&&&&r'   c                 z   |                      |          rd nM|d         |d         cxk    r|d         k    rn nt          |d                    dnt          |d d           d}g d}|                                }	|                                s%t	          |                                          dk    r|                                n|                                d         }
|	dk    o|
dk    }|r|                    d|	z             |                    |                     |	                                                     |                    | 
                    |                                                     |                    |                     ||d	
                     |rG|r|                    d           |r|                    |dg           |r|                    d           |r|                    d           |                    ddg           |                    |dd| j        dz  | j        dz  fd	          D ]>\  }}t	          |          r*|dd          \  }}|                    |dd|dd           ?d                    |          }|                     |||d	d	           d S )Nr   r   r
  z setgrayr   z setrgbcolor)z/o {gsavenewpath	translatez%.1f setlinewidthFr%  r]  fillgrestorestrokez
} bind defr   rU  r   rm   z or   r`  rb  )r   rz   get_linewidthget_forced_alphar   get_rgb	get_alphar   r  get_joinstyler  get_capstyler'  extenditer_segmentsr   r   rx   rX  )r$   r;  marker_pathmarker_transr   transrY  ps_colorps_cmdlwalpharb  verticescoderJ  rK  rZ  s                    r%   draw_markerszRendererPS.draw_markers  s
    ##G,,=DD qzWQZ555571:55555 !,,6666 '"1"+.<<< 	 ;::''))&-0->->!-C-C jjll1o 	 a%EAI 	@MM-2333MM$,,R-=-=-?-?@@AAAMM$++BOO,=,=>>???d((l27 ) 9 9 	: 	: 	:  	* 'g&&& 2x0111 *j))) 	$MM(###z<0111"00DJrM4;r>: 1     	0 	0NHd 8}} 0}1...q....///YYvb"gE%@@@@@r'   c                    t          |          dk    rt          |d         j                  nd}|                     |||||          }|d|z  z   dz   |dz   |z  k     }|s!t          j        | |||||||||	|
|||          S g }t          |                     |||                    D ]b\  }\  }}d| j        |fz  }|                     ||d          }| j	        
                    d| d| d	           |                    |           c|                     |||||||	|
|||          D ]+\  }}}}}|d
d|d
d| }|                     |||           ,| xj        dz  c_        d S )Nr   r   r
  zp%d_%dFr%  r   z {
newpath
translate
z
} bind def
r   rm   r   )r   rt  _iter_collection_uses_per_pathr   draw_path_collection	enumerate_iter_collection_raw_pathsr   r'  r   r   r   _iter_collectionrX  )r$   r;  master_transformpathsall_transformsoffsetsoffset_trans
facecolors
edgecolors
linewidths
linestylesantialiasedsurlsoffset_positionlen_pathuses_per_pathshould_do_optimization
path_codesir   r1  r   
path_bytesxoyopath_idgc0rY  rZ  s                                r%   ry  zRendererPS.draw_path_collection  s    .1ZZ!^^3uQx()));;>7J
D D q=((1,1/MM 	% 	!4b*E>z:Jd	! ! ! 
$-d.M.M %/9 /9 %: %: 	$ 	$ A it7;;D++D)e+LLJN   "" " 	" " "    d####-1-B-BJJ
JdO.5 .5 	, 	,)BGS' +++2+++'++BMM"c7++++  A%    r'   )mtextc          
      p   |                      |                                          rd S t          | d          s3|                     d           |                     ||||||d|           d S |                     ||d          \  }}	}
|                                }d| j        z  }t          |                                d d         dd	i}d
dd	                    t          j        d         d         d          }||z  }d|d|}t          j        |dz             }t          ||
t          j        |          z  z
  ||
t          j        |          z  z
            }| j                            d||||dz  |fz             | j                            d| d| d           | xj        dz  c_        d S )Nr   zThe PS backend determines usetex status solely based on rcParams['text.usetex'] and does not support having usetex=True only for some elements; this element will thus be rendered as if usetex=False.FTeX)ismathz
psmarker%dr   rn   ,z{\sffamily %s}z{\ttfamily %s})z
sans-serif	monospacezfont.familyr   z{\rmfamily %s}z\color[rgb]{z} Z   z/\psfrag{%s}[bl][bl][1][%f]{\fontsize{%f}{%f}%s}g      ?rC  z	 moveto
(z)
show
grestore
r   )r   rg  hasattrr   	draw_textget_text_width_height_descentget_size_in_pointsr   rz   r:  r   r   r  radianscossinr   r   r   r   )r$   r;  rJ  rK  spropangler  rg   rh   blr   thetextr   fontcmdtexrangleposs                     r%   draw_texzRendererPS.draw_tex.  s	    

-- 	FtX&& 	23 3 3
 NN2q!QeUEBBBF55ae5LL1b**,,-bjjll2A2.8C88!2 13 3363|M2157H4J 4J 	 aK',uuaa0 EBJ''1rBF6NN22ARVF^^8K4KLL>(4-B> >	? 	? 	? 	   
   	 	 	 	r'   c	                    |                      |                                          rd S |dk    r|                     ||||||          S |r|                     ||||||          S g }	t          j        d         r|                     |          }
|
j                            dd          	                    d          }d|
                                z  }d}d }|D ]}t          j        t          |          dt          |          d          }	 |
                    |          }n'# t          $ r d	}|
                    d
          }Y nw xY w|
                    ||          }|}|||z  z  }|	                    |||f           |||z  z  }n|                     |          }
| j                            |
|           t-          j        ||
          D ]q}|j        j                            dd          	                    d          }|j                            |j                  }|	                    ||j        |f           r | j        |                                  t;          j        |	d           D ]\  }}|                     ||
                                d           d                     d |D                       }| j!        "                    d| #                    |           d|dd|dd|dd| d           d S )Nr  r   r   replacegMbP?r   uni04Xquestion?c                     | d         S )Nr   r.   )entrys    r%   r&   z&RendererPS.draw_text.<locals>.<lambda>  s
    eAh r'   Fr   c              3   2   K   | ]\  }}}|d d|ddV  dS )r   z 0 m /r  z
 glyphshowNr.   )ru   _rJ  r   s       r%   rw   z'RendererPS.draw_text.<locals>.<genexpr>  sS        9  9$.Aq$ $% @ @ @d @ @ @ @  9  9  9  9  9  9r'   rC  r   rm    translate
 rotate
rD  )$r   rg  r  draw_mathtextr   r   _get_font_afmr   encoder   r  r   r:  ordget_width_from_char_nameKeyErrorget_width_charget_kern_dist_from_namer   _get_font_ttfr   trackr	   layout	ft_objectr   	glyph_idxrJ  r  	itertoolsgroupbyr#  rx   r   r   r?  )r$   r;  rJ  rK  r  r  r  r  r  streamr   ps_namer)  thisx	last_namer   r   r   kernitem
glyph_namegroupr  s                          r%   r  zRendererPS.draw_textX  s    

-- 	FU??==Q1dE::: 	@%%b!Q4???<$ 	=%%d++D+227IFF D33555EEI ' ' }SVV-?3q66-?-?-?@@5 99$??EE 5 5 5%D //44EEE5 33ItDD 	%wt4555&' %%d++D#))$222%,Q55 = =>9"F7I66vvg !^::4>JJ
w
;<<<<

%%' 6 68 8 	 	NGUMM'4#:#:#<#<eDDDii  9  927 9  9  9 9 9GN   "B" " " " " 	" " " 	" " "
 	" " "    	 	s   D''!E
Ec                 >   | j         j                            |d|          \  }}}	}
} | j        |                                  | j                            d|dd|dd|dd           d}|
D ]\  }}}}}| j                            ||           |j	        |f|k    r/|j	        |f}| j                            d|j	         d| d	           t          |t                    r"|                    t          |                    n'|                    |                    |                    }| j                            |dd|dd
| d           |D ]-\  }}}}| j                            | d| d| d| d           .| j                            d           dS )z-Draw the math text using matplotlib.mathtext.r   rC  r   rm   r  r  Nr   r"  z	 moveto
/z glyphshow
z
 rectfill
	grestore
)
_text2pathmathtext_parserparser  rg  r   r   r   track_glyphr   
isinstancer
   get_name_charr   r   r   )r$   r;  rJ  rK  r  r  r  r   r   descentglyphsrectslastfontr   r   numoxoyr  rg   rh   s                        r%   r  zRendererPS.draw_mathtext  s<    O+11!R>> 	.vw

%%"&" "&" "!" " "	# 	# 	# +1 	. 	.'D(CR#//c:::$h/8;;/9$$F,FFxFFFH H H 1;40E0E >""3s88,,,##D$7$7$<$<==  N  ) - -") - -- - -. . . . " 	B 	BLBAqN  B!@!@!@!@a!@!@!!@!@!@AAAA\*****r'   c                    t          |          t          |          k    sJ t          |          dk    rd S |j        dk    sJ |j        d         dk    sJ |j        d         dk    sJ |j        dk    sJ |j        d         dk    sJ |j        d         dk    sJ |j        }|                    |d         |d         z  df          }|                    |          }|                    |d         |d         z  df          }t          j        |d          dz
  }t          j        |d          dz   }	t          j        d|	|z
  z            }
|\  }}|	\  }}t          j	        |d         |d         z  g d	
          }d|d<   ||z
  |
z  |d<   |d d d df         dz  |d<   |
                                                    dd          }| j                            d|dd|dd|dd|dd| d           d S )Nr   r   r   r
  r   )axisi   l    ))flagsu1)pointsz2>u4)colors3u1)dtyper  r  g     o@r  r   rB  zgsave
<< /ShadingType 4
   /ColorSpace [/DeviceRGB]
   /BitsPerCoordinate 32
   /BitsPerComponent 8
   /BitsPerFlag 8
   /AntiAlias true
   /Decode [ r   rm   z  0 1 0 1 0 1 ]
   /DataSource <
z
>
>>
shfill
grestore
)r   ndimrE  reshaper1  r  minmaxceilemptyrF  rG  r   r   )r$   r;  r  r  ro  rE  flat_pointsflat_colors
points_min
points_maxfactorxminyminxmaxymaxrN  rO  s                    r%   draw_gouraud_trianglesz!RendererPS.draw_gouraud_triangles  s   6{{c&kk))))v;;!F{a|A!####|A!####{a|A!####|A!####nneAhq&91%=>>ook22nneAhq&91%=>>VKa000G<
VKa000G<
+*z*ABCC
d
dx!HuQxJJJL L L W%
2f<X$QQQU+e3X,,..$$T3//        !%   *.   	   	 	 	 	 	r'   rd  c                ~   | j         j        }|                                dk    o'|                     |                                           }|sd}|                     |          rd}|                                }|r|                     |                                           |                     |                                           | 	                    |
                                            | j        |                                  |s|r$ | j        |                                dd            |d            ||                     |                      ||                                            |d           |r>|s|r |d            | j        |dd         ddi  |d           |s|r |d	           |r[|                     |          }	 |d            |t#          |                                dd                      |d
|	 d           |r |d            |d	           dS )at  
        Emit the PostScript snippet *ps* with all the attributes from *gc*
        applied.  *ps* must consist of PostScript commands to construct a path.

        The *fill* and/or *stroke* kwargs can be set to False if the *ps*
        string already includes filling and/or stroking, in which case
        `_draw_ps` is just supplying properties and clipping.
        r   FNr   rC  r   r  zfill
r  rm   z setpattern fill grestore
zstroke
)r   r   re  r   rg  	get_hatchr  r  ri  r  rj  r   
get_dashesr  r?  stripr,  rz   get_hatch_color)
r$   rZ  r;  rY  r`  rb  r   mightstroker(  
hatch_names
             r%   rX  zRendererPS._draw_ps  s    $''))A- B#33BJJLLAAA 	 	F(( 	D 	0r//11222b..00111R__..///Dr}}// 	.% 	.DNBJJLL!,--id  $$%%%bhhjjd 	$ ! !i   DNGBQBK5u555E(OOO $ $l### 	?**511JE)E, 2 2 4 4RaR 89:::E=j===>>> 	E*lr'   )r   )T)FNr!   )"r(   r)   r*   __doc__r   _get_data_path_afm_font_dir_use_afm_rc_namer   r   r  r  staticmethodr  r  r  r  r   r#  r,  r.  r'  r?  r   rS  r[  rv  ry  r  r  r  r  rX  __classcell__r   s   @r%   r   r      s        
 )E(55M"; ; ; ; ; ;6  ' ' ' '+ + + + - - \-) ) ) ) + + \+' ' ' '
* 
* 
* 
*) ) ) )  B( ( (E E E E  ,    @ ' ' ' ' FJ2A 2A 2A 2Ah *& *& *&X :> ' ' ' ' 'R 8 8 8 8t + + +4 - - -^ 15T 1 1 1 1 1 1 1 1 1r'   r   c                   0    e Zd Z ed          \  ZZd ZdS )_Orientationr
  c                 2    | j         dk    r|d d d         n|S )N	landscaperA  )r   )r$   rE  s     r%   swap_if_landscapez_Orientation.swap_if_landscape  s"    "i;66uTTrT{{EAr'   N)r(   r)   r*   rangeportraitr  r  r.   r'   r%   r  r    s:        %((HiB B B B Br'   r  c                        e Zd ZdZdddZd Zdddddd	Zdd
dZdd
dZ e	j
        ed          Z e	j
        ed          Z fdZ xZS )FigureCanvasPSr   
PostscriptzEncapsulated Postscript)rZ  epsc                     dS )NrZ  r.   r#   s    r%   get_default_filetypez#FigureCanvasPS.get_default_filetype  s    tr'   Nr	  )metadata	papertypeorientationbbox_inches_restorec          	         | j         j        }d| j         _        i }	t          |t          t          j        f          rEt          j        |          j        }
|
	                    dd          
                    d          |	d<   |pi                     ddt          j         d          |	d<   t	          j        d          }|rOt          j                            t#          |          t          j        j                                      d	          nt+          j                    |	d
<   d                    d |	                                D                       }	|t          j        d         }|                                }t7          j        ddgt:          |           t7          j        t>          |                                          }t          j        d         r| j         n| j!        } |||f||	|||d| d S )Nr   r   r  TitleCreatorzMatplotlib vz, https://matplotlib.org/SOURCE_DATE_EPOCHz%a %b %d %H:%M:%S %YCreationDater   c              3   ,   K   | ]\  }}d | d| V  dS )z%%z: Nr.   )ru   kr   s      r%   rw   z+FigureCanvasPS._print_ps.<locals>.<genexpr>9  sC       !< !<"aMMMaMM!< !< !< !< !< !<r'   zps.papersizefigureauto)r  )r  r   )dpidsc_commentsr  r  r  )"r  r  r  r   r   PathLikepathlibr   r   r  r   r:  r   __version__getenvdatetimefromtimestampinttimezoneutcstrftimetimectimerx   re   r   lowerr   check_in_listrd   check_getitemr  _print_figure_tex_print_figure)r$   fmtoutfiler  r  r  r  r   r  r  filenamesource_date_epochprinters                r%   	_print_pszFigureCanvasPS._print_ps!  s$   
 kogR[122 	D|G,,1H33::7CC !#+>r"6"6E3?EEE#G #GY I&9::
 !H++%&&!%' ''/x0F'G'G'G 	^$ yy !< !<&2&8&8&:&:!< !< !< < < ^4IOO%%	Hf9y9YOOOO(k&7&7&9&9; ; ; l=1&4))% 	 	W 	C#L'9$7	C 	C;A	C 	C 	C 	C 	Cr'   r  c                    |dk    t          |t          t          j        f          st	          |          st          d           j                                        \  dk    rt          	                    f           sdk    r}	}n#	                    t                             \  }}	d|z
  z  d|	z
  z  }
}|
 j        j        j        z   }| j        j        j        z   }dt          j        u r||
||f\  }
}}}d|	z  z
  cd|
|||ft!                       _        t%           j        |	          t'           j        ||
          } j                            |            fd}t*          j        d         rt/                      5 }t          j                            |d          }t5          |dd          5 } ||           ddd           n# 1 swxY w Y   t*          j        d         dk    rt7          t8          |           n/t*          j        d         dk    rt7          t:          |           t=          ||           ddd           dS # 1 swxY w Y   dS t?          j         |dd          5 }tC          |          s tE          j#        d          |          } ||           ddd           dS # 1 swxY w Y   dS )a'  
        Render the figure to a filesystem path or a file-like object.

        Parameters are as for `.print_figure`, except that *dsc_comments* is a
        string containing Document Structuring Convention comments,
        generated from the *metadata* parameter to `.print_figure`.
        r  z,outfile must be a path or a file-like objectr  r  g      B@r   r   r  r   r6  c           
         rt          d|            n<t          d|            
dk    rt          d
 |            t          d|            t          d d	j         d	t                     d
d|            t          t                    }t          d|            t
          j        d         s|t          j        j                  z  }t          d|z  |            t          d|            t          d		                    t                    |            t
          j        d         sj        j        
                                D ]~\  }}|st
          j        d         }t          |          dk    rd}|                                  |dk    r$|                     t          ||                     mt          |||            t          d|            t          d|            st          d|            t          d|            t          dt                    z  |            rt          dz  |            t          dt          dz  dz             d|            t          j                                        |            t          d|            t          d|            st          d|            |                                  d S )Nz%!PS-Adobe-3.0 EPSF-3.0)filez%!PS-Adobe-3.0r  z%%DocumentPaperSizes: z
%%Pages: 1z%%LanguageLevel: 3
z
%%Orientation: r   z
%%EndComments
r   )endr:  z%%BeginPrologr   z/mpldict %d dict defzmpldict beginzps.fonttype   r   r   r;  z%%EndPrologz%%Page: 1 1z%s translatez	%d rotatez0 0 r   z	 rectclipshowpagez%%EOF)printr   _get_bbox_headerr   r"   r   r   r   usedrx   re   flushr   r   r   rz   r   r   )r   Ndictr   r   fonttyper   r  r   is_epsr  r  ps_rendererrotationr$   r   r  r  s        r%   print_figure_implz7FigureCanvasPS._print_figure.<locals>.print_figure_impl  sM    -/b99999&R0000((>9>>RHHHHl,,,, %!% %$/$4% % &d++% % %
 r# # # # LLE/++++<, B[;@AAA(50r::::/++++$))G$$2....<, A&9>DDFFA A$Iu  ! "|M:H5zzC''#%HHJJJ1}}!29e!D!DEEEE*9eR@@@@%b!!!!-b)))) .m"----/++++.<B#7#77bAAAA 7kH,26666EeBhr	::EEEBOOOO $.))++"5555 %b!!!!*2&&&& (gB''''HHJJJJJr'   ps.usedistillertmp.psrg   r|   r}   Nghostscript)ptyper   xpdf)$r  r   r   r  r   
ValueErrorr  get_size_inchesrl   r  rd   r   r   r   r  r  r   r   r   r   drawr   r   r   r   rx   r   _try_distill
gs_distillxpdf_distillr   r   open_file_cmr   codecs	getwriter)r$   r0  r1  r  r  r  r  r  paper_widthpaper_heightllxllyurxuryrendererrG  r   r   r   r:  r   r   rD  rE  rF  r   r  r  s   `   ```             @@@@@@@@r%   r/  zFigureCanvasPS._print_figureK  sp    7S"+$677 	M(11	MKLLL 3355v&(E(Eufo(V(VWI 	&Y(**(-vKK(3(E(E)$)& )&%K u,-./DK$**DK$++,000!$c3!3Cc3,&+RFBHS#s#! !MMM$K[ 35 5 5 	"""9	 9	 9	 9	 9	 9	 9	 9	 9	 9	 9	 9	 9	 9	 9	 9	v <)* 	( $%% 
?',,vx88'3;;; *r%%b)))* * * * * * * * * * * * * * *< 12mCC !(&	N N N N N\"34>> !(&	N N N N,Wg>>>
? 
? 
? 
? 
? 
? 
? 
? 
? 
? 
? 
? 
? 
? 
? 
? 
? 
? #GS9EEE (,T22 =66+I66t<<D!!$'''( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( (sI   ;3J.H:JH
	
JH
	A2JJJ18K66K:=K:c                R   |dk    }| j                                         \  }	}
d}d}|}|}|| j         j        j        z   }|| j         j        j        z   }||||f}t                      | _        t          |	|
| j        |          }t          | j         |	|
|||          }| j         	                    |           t                      5 }t          j        |d          }|                    d| dt          |           dt          t                      d	d
                    t                      dt%          ||           dt%          |	dz  |
dz             d| j                                         dd           |t(          j        u r
|
|	}
}	||||f}|s|dk    r0|                    | j                                                   \  }}n&|dk    rt/          |	|
          }t0          |         \  }}t3          ||j        |||j                  }t8          j        d         dk    st8          j        d         rt=          t>          |||||           n0t8          j        d         dk    rt=          t@          |||||           tC          ||           ddd           dS # 1 swxY w Y   dS )a(  
        If :rc:`text.usetex` is True, a temporary pair of tex/eps files
        are created to allow tex to manage the text layout via the PSFrags
        package. These files are processed to yield the final ps or eps file.

        The rest of the behavior is as for `._print_figure`.
        r  r   r8  r6  rI  z+%!PS-Adobe-3.0 EPSF-3.0
%%LanguageLevel: 3
r   z&
%%EndComments
%%BeginProlog
/mpldict z dict def
mpldict begin
r   z
end
%%EndProlog
mpldict begin
z translate
0 0 r   r4  z
end
showpage
r|   r}   r  r  rH  rJ  r   )rK  r   rotatedrL  N)"r  rN  r   r   r   r   r   r   r   rO  r   r   r   
write_textr?  r   r"   rx   rz   r   r  r  r  rl   rd   _convert_psfragsr   r   r   r   rP  rQ  rR  r   )r$   r0  r1  r  r  r  r  r  rD  r   r   r  r  rX  rY  rZ  r[  r   rE  r\  r   tmppathrV  rW  psfrag_rotateds                            r%   r.  z FigureCanvasPS._print_figure_tex  sx    3355vDK$**DK$++S#s#! !MMM$T[%*FC9LN N N 	"""  !! 5	;Vl6844G   $	  g,,    b"  %(F2I&&    & #)  $ $ $, l444 &vS#s+
  Ah..,7,I,IK//11-3 -3)\\ && .uf = =I,5i,@)\-+[, " "N ./=@@|M2 AZ$fID%35 5 5 5 5 /0F::\$fID%35 5 5 5 )':::k5	; 5	; 5	; 5	; 5	; 5	; 5	; 5	; 5	; 5	; 5	; 5	; 5	; 5	; 5	; 5	; 5	; 5	;s   G	JJ #J rZ  r  c                 v    | j                                          t                                                      S r!   )r  draw_without_renderingr   rO  )r$   r   s    r%   rO  zFigureCanvasPS.draw+  s)    **,,,ww||~~r'   )r(   r)   r*   	fixed_dpi	filetypesr  r5  r/  r.  r   partialmethodprint_ps	print_epsrO  r  r  s   @r%   r  r    s        I#13 3I  
 Tz $(C (C (C (C (CZ !%B( B( B( B( B(N !%W; W; W; W; W;r 'y&y$77H'	'	599I        r'   r  c           	         t          j        dt           j        d         t           j                            d          z   t           j                            d          z   t           j                            d          z   d||dz  z   i          5  t                                          dd                    |          |d	k    rd
nd|                                 	                                dz  d          }ddd           n# 1 swxY w Y   t                      5 }t          j                            |d          }t          j        dddd||gt                     t!          j        ||            ddd           n# 1 swxY w Y   t%          |           5 }d|                    d          v }	ddd           n# 1 swxY w Y   |	S )aj  
    When we want to use the LaTeX backend with postscript, we write PSFrag tags
    to a temporary postscript file, each one marking a position for LaTeX to
    render some text. convert_psfrags generates a LaTeX document containing the
    commands to convert those tags to text. LaTeX/dvips produces the postscript
    file that includes the actual text.
    ztext.latex.preambler   graphicxr   z:\geometry{papersize={%(width)sin,%(height)sin},margin=0in})r   r   zt
\begin{figure}
  \centering\leavevmode
  %(psfrags)s
  \includegraphics*[angle=%(angle)s]{%(epsfile)s}
\end{figure}r   r  r  r   )psfragsr  epsfile
   )r   NrI  dvipsz-qz-R0z-o	Landscapei  )r   
rc_contextr   
texmanager_usepackage_if_not_loadedr   make_dvirx   resolveas_posixr   r   r   r   _check_and_log_subprocessr   r   r   r   read)
ra  rl  rV  rW  r  dvifiler   psfiler   rb  s
             r%   r`  r`  0  s    
!L./N44W==>N44Z@@A N44X>>? J#|<<=	= 
 
   ,,''  99W--*k99q"??,,5577 
  (                . 
		 %fh//'dE494	A 	A 	AFG$$$	% % % % % % % % % % % % % % % 
g 6"$56 6 6 6 6 6 6 6 6 6 6 6 6 6 6s8   A*DD
D
AFFFF??GGc                     	  | t          |          g|R i | d S # t          j        $ r&}t                              d|           Y d }~d S d }~ww xY w)Nz%s.  Distillation step skipped.)r   r   ExecutableNotFoundErrorr   r   )funcra  ry   r   excs        r%   rP  rP  a  s|    =S\\+D+++F+++++& = = =6<<<<<<<<<=s    AAAc                    |rdg}n#|dk    rd|d          d|d          g}nd| g}| dz   }t           j        d	         }t          j        t          j        d
          j        ddd|z  dg|d| | t                     t          j        |            t          j
        ||            |rt          | ||           dS dS )z
    Use ghostscript's pswrite or epswrite device to distill a file.
    This yields smaller files without illegal encapsulated postscript
    operators. The output is low-level, converting text to outlines.
    	-dEPSCropr  z-dDEVICEWIDTHPOINTS=r
  z-dDEVICEHEIGHTPOINTS=r   z-sPAPERSIZE=z.pszps.distiller.resgsz-dBATCHz	-dNOPAUSEz-r%dz-sDEVICE=ps2writez-sOutputFile=)r^  N)r   r   r   rw  _get_executable_info
executabler   r   remover   r   pstoeps)r   r  rK  r   r^  paper_optionrz  r  s           r%   rQ  rQ  h  s$     0#}	(		 9tAw889Q99; /u../u_F
,)
*C	#		!$	'	'	2	K#/B	;
	;000	;29	; 		   Ig
K     0 	w//////0 0r'   c           	      $   t          j        d           t          j        d           |rdg}n#|dk    rd|d          d|d          g}nd	| g}t                      5 }t          j        |d
          }t          j        |d          }t          j        ddddddg|| |t                     t          j        dddd||gt                     t          j	        ||            ddd           n# 1 swxY w Y   |rt          |            dS dS )a
  
    Use ghostscript's ps2pdf and xpdf's/poppler's pdftops to distill a file.
    This yields smaller files without illegal encapsulated postscript
    operators. This distiller is preferred, generating high-level postscript
    output that treats text as text.
    r  pdftopsr  r  z-dDEVICEWIDTHPOINTS#r
  z-dDEVICEHEIGHTPOINTS#r   z-sPAPERSIZE#ztmp.pdfrI  ps2pdfz-dAutoFilterColorImages#falsez-dAutoFilterGrayImages#falsez-sAutoRotatePages#Nonez-sGrayImageFilter#FlateEncodez-sColorImageFilter#FlateEncodez-papermatchz-level3N)r   r  r   r   r   r   rw  r   r   r   r  )	r   r  rK  r   r^  r  r   tmppdftmppss	            r%   rR  rR    s    T"""Y'''
 0#}	(		 9tAw889Q99; /u../			 $fi00VX.. 	',+%,-     $	% 	% 	% 	''9feDd	L 	L 	LE7###!$ $ $ $ $ $ $ $ $ $ $ $ $ $ $"   s    BC22C69C6z3.9c                 F    t          |           |rt          |           ndfS )zx
    Return a postscript header string for the given bbox lbrt=(l, b, r, t).
    Optionally, return rotate command.
    r   )r?  _get_rotate_command)lbrtr^  s     r%   get_bbox_headerr    s*     D!!$P$7$=$=$=bQQr'   c                     | \  }}}}dt          |           dt          |           dt          j        |           dt          j        |           d|dd|dd|dd|dS )zGReturn a PostScript header string for bounding box *lbrt*=(l, b, r, t).z%%BoundingBox: rm   z
%%HiResBoundingBox: z.6f)r%  mathr  r  rb   r  r  ts        r%   r?  r?    s    JAq!QCc!ff C Cs1vv C C	! C Cty|| C C#$BC C+,BC C34BC C;<BC C Dr'   c                 *    | \  }}}}||z   dddddS )uO   Return a PostScript 90° rotation command for bounding box *lbrt*=(l, b, r, t).z.2frm   r   z translate
90 rotater.   r  s        r%   r  r    s0    JAq!Qc44444444r'   c                 L   | dz   }t          |d          5 }t          | d          5 }|j        }|D ]}|                    d          r< |d           |r. |t          |                              d          dz              S|                    d          rH ||            |d	           |r. |t          |                              d          dz               n$|r|                    d
          r ||           |D ]D}|                    d          r |d           #|                    d          r9 ||           E	 ddd           n# 1 swxY w Y   ddd           n# 1 swxY w Y   t          j        |            t          j	        ||            dS )z
    Convert the postscript to encapsulated postscript.  The bbox of
    the eps file will be replaced with the given *bbox* argument. If
    None, original bbox will be used.
    z.epsr   r   s   %!PSs   %!PS-Adobe-3.0 EPSF-3.0
r      
s   %%EndCommentssp   %%BeginProlog
save
countdictstack
mark
newpath
/showpage {} def
/setpagedevice {pop} def
%%EndProlog
%%Page 1 1
)s   %%Bounds   %%HiResBounds   %%DocumentMedias   %%Pagess   %%EOFsJ   cleartomark
countdictstack
exch sub { end } repeat
restore
showpage
%%EOF
s   %%PageBoundingBoxN)
r   r   rf   r?  r  r  r   r  r   r   )r   r   r^  rm  epshtmphr   lines           r%   r  r    s    G	gt		 )d7D&9&9 )T
 	 	Dw'' 2333 JE*40077@@5HIII!122 d & ' ' '  ME-d33::7CCeKLLL $// +K L L d  	 	Dx(( 
 ! " " " " !566 d	=) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) )V Ig
K!!!!!s5   E0D%EE0E	E0 E	!E00E47E4)z/_d { bind def } bind defz/m { moveto } _dz/l { lineto } _dz/r { rlineto } _dz/c { curveto } _dz/cl { closepath } _dz/ce { closepath eofill } _dz/sc { setcachedevice } _dc                       e Zd ZdZeZdS )
_BackendPSzLevel IIN)r(   r)   r*   backend_versionr  FigureCanvasr.   r'   r%   r  r  +  s         O!LLLr'   r  )Fr/   NF)F)NF)Tr  rT  r#  enumr   r   ior   r  loggingr  r   r   r   tempfiler   r)  numpyr  
matplotlibr   r   r   r   r	   matplotlib._afmr
   matplotlib.backend_basesr   r   r   r   matplotlib.cbookr   r   matplotlib.font_managerr   matplotlib.ft2fontr   r   matplotlib._ttconvr   matplotlib._mathtext_datar   matplotlib.pathr   matplotlib.texmanagerr   matplotlib.transformsr   !matplotlib.backends.backend_mixedr   r   r   	getLoggerr(   r   r   caching_module_getattrr   rd   rl   rz   r   r   r   r   RendererPDFPSBaser   r  r  r`  rP  rQ  rR  r+   r  r?  r  r  FigureManagerPSr"   exportr  r.   r'   r%   <module>r     sd                            				   ' ' ' ' ' '          8 8 8 8 8 8 8 8 8 8 8 8      A A A A A A A A A A A A I I I I I I I I , , , , , , 5 5 5 5 5 5 5 5 0 0 0 0 0 0 / / / / / /             , , , , , , * * * * * * ? ? ? ? ? ?       w""
 Q Q Q Q Q Q Q Q
"Xy "i"x" >" >	"
 >" >" =" <" <" <" <" <" L" >" >"  >!"" "!  1" " "	6     K K K K K= = = N5 N5 N5b# # #L  b b b b b2 b b bJB B B B B4 B B BT T T T T% T T Tn. . .b= = =$0 $0 $0 $0N& & & &R R R R RD D D5 5 54" 4" 4" 4"n $  . 
" " " " " " " " " "r'   