
    ^jX                        d dl Z d dlmZmZ d dlmZmZmZmZm	Z	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lZd dlZdZd Zd	 Zd
 Zd Zej:                  j=                  d      d        Zd Z ej:                  jC                  dg d      d        Z"d Z#d Z$d Z%d Z&ej:                  jC                  dddg      ej:                  jC                  dddg      ej:                  jC                  ddejN                  dfdejP                  dfd ejN                  d!fd ejP                  d"fg      d#                      Z)d$ Z*d% Z+ej:                  jC                  d&d'd(d ejX                  d)e*      g      d+        Z-ej:                  jC                  d,g d-      d.        Z.d/ Z/d0 Z0d1 Z1ej:                  jC                  d2dd g      ej:                  jC                  d3ejN                  ejP                  g      ej:                  jC                  d4d5d6g      ej:                  jC                  d7g d8      ej:                  jC                  d9d:d;g      d<                                    Z2d= Z3y)>    N)path
transforms)FigureCanvasBaseKeyEventLocationEventMouseButton
MouseEventNavigationToolbar2RendererBase)RubberbandBaseFigure)needs_pgf_xelatexzTreat the new Tool classes introduced in v[0-9]*.[0-9]* as experimental for now; the API and rcParam may change in future versions.c            
         t        j                         } t        dd      D cg c]!  }t        j                  j                  |      # }}t        dd      D cg c]/  }| j                  |      j                         j                         1 }}t        j                  d      j                  d      }ddg}ddg}d	 } || |||||        || |d
d ||||        || g ||||        || ||d
d |||        || |g |||       t        d
|j                  d
         D ]  } || |||d
|d d f   ||         || |||g |        || ||||g         || |||g g         || ||||d
d |       y c c}w c c}w )N               )
      redgreenc                    t               }t        |j                  | ||            }|j                         }|j	                  |t        t        |            |t        j                  |       ||g g dgg dg       D 	
cg c]
  \  }	}
}}}| }}}}
}	}|j                  |||||      }|rBt        j                  |t        |            }t        |      j                  |dz
  |g      sJ y y c c}}}}
}	w )NFscreen)hatchcolors)	minlengthr   )r   list_iter_collection_raw_pathsnew_gc_iter_collectionrangelenr   AffineDeltaTransform_iter_collection_uses_per_pathnpbincountsetissubset)master_transformpathsall_transformsoffsets
facecolors
edgecolorsrb	raw_pathsgcxoyopath_idgc0rgbFaceidsusesseens                    n/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/matplotlib/tests/test_backend_bases.pycheckz!test_uses_per_path.<locals>.check   s    ^66e^5 6	YY[""uS^,g223CDz2rE7xR	 # 12 282r7Cw 2 2 00>7J
D;;sc)n=Dt9%%tax&6777 2s    C/r   )r   Affine2Dr"   r   Pathunit_regular_polygonrotate
get_matrixcopyr&   arangereshapeshape)	idir+   tforms_matricesr-   r.   r/   r<   ns	            r;   test_uses_per_pathrJ      s   				B8=aD1TYY++A.DEDAFq!MAryy|..0557MOMiim##G,G!J!J8$ 
"e_gz:F	"eAaj/7J
K	"b/7J
C	"e_Qq)7J
K	"eR*j91gmmA&' &b%'!A#q&/*	&& 
"e_gr:>	"e_gz2>	"e_gr26	"e_gz!A
KG EMs   &E14E6c                  L    t        t               j                  t              sJ y N)
isinstancer   figurer        r;   test_canvas_ctorrQ   >   s    &(//888rP   c                      t        j                         } | j                  j                         dk(  sJ | j                  j                  j                  d       | j                  j                         dk(  sJ y )NzFigure_1.pngz0:1/2<3z0_1_2_3.png)pltrN   canvasget_default_filenamemanagerset_window_titlefigs    r;   test_get_default_filenamerZ   B   s[    
**,C::**,>>>JJ''	2::**,===rP   c                      t        j                         } t        |       }t        j                  |        t        j                  | j
                        rJ y rL   )rS   rN   r   closefignum_existsnumber)rY   rT   s     r;   test_canvas_changer_   I   s=    
**,Cc"FIIcN  ,,,,rP   pdfc                 (   t        j                          | j                  dd       t        j                  t
              5 }t        j                          t        |      dk(  sJ dt        |d   j                        v sJ 	 d d d        t        j                  t
              5 }t        j                         j                          t        |      dk(  sJ dt        |d   j                        v sJ 	 d d d        y # 1 sw Y   {xY w# 1 sw Y   y xY w)NDISPLAYz:999r   z<FigureCanvasPdf is non-interactive, and thus cannot be shownr   )rS   subplotssetenvpytestwarnsUserWarningshowr#   strmessagegcf)monkeypatchrecs     r;   test_non_gui_warningrn   R   s    LLNy&)	k	" (c
3x1}}Ns1v~~&' 	( '( 
k	" (c	3x1}}Ns1v~~&' 	( '( (( (( (s    AC<#AD<DDc                      t        j                         \  } }| j                  j                  |       | j                  j                  |k(  sJ | j                          | j                  j                  J y rL   )rS   rc   rT   
grab_mousemouse_grabberclearrY   axs     r;   test_grab_clearru   e   sZ    llnGCJJ"::##r)))IIK::##+++rP   zx, y))*      )Nrv   )NN)   gq=
ף Y@)g     i@g       @c                 L   t        j                         \  }}t        |      }t        d|| |      }| |j                  8J |j                  t        |       k(  sJ t        |j                  t
              sJ ||j                  8J |j                  t        |      k(  sJ t        |j                  t
              sJ | f|c|j                  | |      d|j                  |        d|j                  |       dk(  sJ d x|_        |_        |j                  | |      dk(  sJ y y y )N
test_eventz
(x, y) = (z, )c                      y)NfoorO   )xs    r;   <lambda>z.test_location_event_position.<locals>.<lambda>   s    rP   z(x, y) = (foo, foo))rS   rc   r   r   r~   intrM   yformat_coordformat_xdataformat_ydata	fmt_xdata	fmt_ydata)r~   r   rY   rt   rT   events         r;   test_location_event_positionr   o   s%    llnGCc"F,15Eywwww#a&   %''3'''ywwww#a&   %''3'''}1% 232booa6H5IKL 	M L&55r|q!$(====	 '}rP   c                  b   t        j                         \  } }|j                  dd       |j                  dd      dk(  sJ |j	                         j                  d       |j                  dd      dk(  sJ |j                         j                  d	
       |j                  dd      dk(  sJ y )Nr   r   )r   r   )xlimylimg      @z(x, y) = (5.00, 5.00))r   (   )r   z$(x, y) = (5.00, 5.00) | (5.00, 10.0))r   r   )r   z3(x, y) = (5.00, 5.00) | (5.00, 10.0) | (2.50, 5.00))rS   rc   r(   r   twinxtwinyrs   s     r;   !test_location_event_position_twinr      s    llnGCFFgF&??2r"&====HHJNNN ??2r"&LLLLHHJNNNOOB#DE F ErP   c                  &   t        j                         } | j                  dddddd       | j                  j	                          g fd}| j                  j                  d|       t        d| j                  d	      j                          t        d
| j                  g| j                  j                  d      t        j                   j                          t        d| j                  d	      j                          t              dk(  sJ y )N      ?hellocenterT)havapickerc                 ^    | j                   j                  dk(  sJ j                  |        y )Na)
mouseeventkeyappend)r   pickss    r;   handle_pickztest_pick.<locals>.handle_pick   s)    ##s***UrP   
pick_eventkey_press_eventr   button_press_eventr   r   key_release_eventr   )rS   rN   textrT   drawmpl_connectr   _processr	   transFigure	transformr   LEFTr#   )rY   r   r   s     @r;   	test_pickr      s    
**,CHHRWhtHDJJOOE JJ<5

C099;#SZZ !))(3!!!) #**c2;;=u:??rP   c                     t        j                         \  } }|j                  d       |j                         J t	        | j
                        }|j                          |j                         dk(  sJ |j                         }|j                         }d}d}|j                  j                  |      j                  t              }|j                  j                  |      j                  t              }t        d| j
                  g|t        j                   }	| j
                  j                   j#                  |	j$                  |	       t        d| j
                  g|t        j                   }
| j
                  j                   j#                  |
j$                  |
       |j                         |	j&                  |
j&                  fk(  sJ |j                         |	j(                  |
j(                  fk(  sJ t        d| j
                  g|t        j*                   }	| j
                  j                   j#                  |	j$                  |	       t        d| j
                  g|t        j*                   }
| j
                  j                   j#                  |
j$                  |
       |j                         t-        j.                  |dd	
      k(  sJ |j                         t-        j.                  |dd	
      k(  sJ |j                          |j                         J |j1                         s|j3                         rJ y )Nlogit)xscaleZOOM)gư>皙?)gwJ?皙?r   button_release_eventr   g|=)relabs)rS   rc   r(   get_navigate_moder
   rT   zoomget_xlimget_ylim	transDatar   astyper   r	   r   r   	callbacksprocessnamexdataydataRIGHTre   approxget_autoscalex_onget_autoscaley_on)rY   rt   tbxlim0ylim0d0d1s0s1start_event
stop_events              r;   test_interactive_zoomr      s   llnGCFF'F!)))	CJJ	'BGGI!V+++KKMEKKME 
B	B 
			#	*	*3	/B				#	*	*3	/B cjjA+-A/:/?/?AKJJ  !1!1;?

C-/C1<1A1ACJJJ  *=;;=[..
0@0@AAAA;;=[..
0@0@AAAA cjjB+-B/:/@/@BKJJ  !1!1;?

D-/D1<1B1BDJJJ  *=;;=FMM%QEBBBB;;=FMM%QEBBBBGGI!)))##%b.B.B.DDD.DrP   c                  F   t        j                         \  } }|j                  ddgddg       | j                  j	                  |       t        | j                        }|j                          |j                         J |j                          |j                         J y )Nr   r   )	rS   rc   plotrT   
widgetlockr
   r   r   pan)rY   rt   r   s      r;   test_widgetlock_zoompanr      s    llnGCGGQFQFJJ"	CJJ	'BGGI!)))FFH!)))rP   	plot_funcimshowcontourforientationvertical
horizontalztool,button,expectedr         )i   r   )   )gQ?gQ@c                    t        j                         \  }}t        j                  d      j	                  d      }d\  }}	 t        ||       |||	      }
|j                  |
||      }| dk(  r|j                  j                         rJ y |j                  j                         sJ d\  }}|df}|df}|d	k(  r|d d d
   }|d d d
   }|j                  j                  j                  |      j                  t              }|j                  j                  j                  |      j                  t              }t        d|j                  g|| }t        d|j                  g||d|hi}t        d|j                  g|| }t        |j                        }|dk(  rD|j!                          |j#                  |       |j%                  |       |j'                  |       nC|j)                          |j+                  |       |j-                  |       |j/                  |       |j0                  |j2                  ft5        j6                  |d      k(  sJ y )N   )r   r   r   )vminvmax)rt   r   r   r   r   r   r   motion_notify_eventbuttonsr   r   333333?r   )rS   rc   r&   rC   rD   getattrcolorbarrt   get_navigater   r   r   r   r	   rT   r
   r   
press_zoom	drag_zoomrelease_zoomr   	press_pandrag_panrelease_panr   r   re   r   )r   r   toolbuttonexpectedrY   rt   datavmin0vmax0collcbr   r   r   r   r   r   r   
drag_eventr   r   s                         r;   test_interactive_colorbarr      s1    llnGC99R=  (DLE5!72y!$U?D	dr{	;BJ55%%'''55 JD$
 B
Bj "X"X 
	"	"2	&	-	-c	2B		"	"2	&	-	-c	2B cjj7+-7/57KszzJ,.J06JAGJJ

9-/9179J 
CJJ	'Bv~
	
k"
Z 

#

[!
J
z" GGRWWxT!BBBBrP   c                     t        j                  t        t              5  dt        j
                  d<   d d d        t	        j                         } | j                         }| j                         J |j                  j                  j                  j                  d       | j                         dk(  sJ |j                  j                  j                  j                  d       | j                         dk(  sJ y # 1 sw Y   xY w)Nmatchtoolmanagertoolbarr   r   r   PAN)re   rf   rg   _EXPECTED_WARNING_TOOLMANAGERrS   rcParamsgca
get_figurer   rT   rV   r   trigger_tool)rt   rY   s     r;   test_toolbar_zoompanr    s    	k)F	G 0"/Y0	B
--/C!)))JJ""//7!V+++JJ""//6!U***0 0s   C;;Dc                  V   t        j                         \  } }|j                  t        d      t        d             t	        | j
                        }|j                          t        d| j
                  ddd      j                          t        d| j
                  ddd      j                          |j                         |j                         cxk(  rdk(  sJ  J t        d| j
                  ddd      j                          t        d| j
                  ddd      j                          |j                         |j                         cxk(  rdk(  sJ  J |j                  j                  dd	g      \  }}t        d
| j
                  g|t        j                   j                          t        d| j
                  g|t        j                   j                          t        d| j
                  d      j                          |j                         |j                         cxk(  rdk(  sJ  J t        d| j
                  ddd      j                          t        d| j
                  ddd      j                          |j                         |j                         cxk(  rdk(  sJ  J y )N   r   kd   l)r   r   r   )r   r   )r   r   r   r   h)rS   rc   r   r"   r
   rT   r   r   r   r   r   r   r   r	   r   r   )rY   rt   r   startstops        r;   $test_toolbar_home_restores_autoscaler  +  s   llnGCGGE"IuRy!	CJJ	'BGGI 

Cc:CCE

Cc:CCE;;=BKKM4W44444

Cc:CCE

Cc:CCE;;=BKKM4W44444 ,,((&&)9:KE4#SZZJ%J9I9IJSSU%szzKDK+:J:JKTTV

C099;;;=BKKM4W44444

Cc:CCE

Cc:CCE;;=BKKM4W44444rP   backendsvgpspgf)marksc                 @   ddl m} ddlm} t	        j
                  d|        }|j                  } |d      } ||       |j                  dd      } |d      } ||       |j                  dd      }|j                         D 	cg c]  }	|	j                          }
}	|j                  j                          |j                  j                          |j                         D 	cg c]  }	|	j                          }}	|j                         D 	cg c]  }	|	j                          }}	t        |
|      D ]  \  }}t        j                  ||d	      sJ  t        ||      D ]'  \  }}t        j                  j                  ||d	       ) y c c}	w c c}	w c c}	w )
Nr   r   )FigureCanvaszmatplotlib.backends.backend_T)constrained_layoutr   g{Gzt?)atol)matplotlib.figurer   matplotlib.backends.backend_aggr  	importlibimport_modulerc   ravelget_positionrT   r   zipr&   allclosetestingassert_allclose)r  r   r  test_backend
TestCanvasfig_test	axes_testfig_aggaxes_aggrt   init_poslayed_out_pos_testlayed_out_pos_agginitplacedreftests                    r;   	test_drawr0  I  sr   
 )<**-I'+STL**J.Hx!!!Q'I -G1%H,5OO,=>b!>H>OONN6?oo6GH"//+HH5=^^5EFr*FFH&89 9f;;tV%8889 *,>? :	T


""35"9: ?
 IFs   	F(FFz&key,mouseend,expectedxlim,expectedylim))N皙?r2  gQ@g{G(@g@gffffff'@)N)r2  r   r3  r   	   )N)r   r2  r5  r4  )Nr   r5  r5  )Nr         ?g(\gQ@g      @g     &@)Nr2  r8  r3  r:  )N)r   333333?r9  gQ	gq=
ףp@)Nr2  r<  r3  r=  )shift)r2  皙?r3  r5  )r?  r@  r2  r5  r4  )r?  r;  r3  r3  )r?  r7  r9  )g(\@gq=
ף(@)r?  )r   g?gp=
ףgp=
ף@rB  )r?  r>  r3  )gQg
ףp=
@)r~   )r2  r   r3  r5  )r   )r   r2  r5  r4  )controlr1  r3  r3  )rC  rA  g(\@gq=
ףp'@rD  c                    t        j                         \  }}|j                  t        j                  d             |j                         sJ |j                  d       d}|j                  j                  |      j                  t              }|j                  j                  |      j                  t              }t        d|j                  g|t        j                  | d}	t        d|j                  g|t        j                  t        j                  h| d}
t        d|j                  g|t        j                  | d}t        |j                        }|j!                          |j#                  |	       |j%                  |
       |j'                  |       t)        |j+                               t-        j.                  |d	
      k(  sJ t)        |j1                               t-        j.                  |d	
      k(  sJ y )Nr   equalr   r   )r   r   r   )r   r   r   r   g{Gz?r   )rS   rc   r   r&   rC   r   
set_aspectr   r   r   r   r	   rT   r   r   r
   r   r   r   r   tupler   re   r   r   )r   mouseendexpectedxlimexpectedylimrY   rt   
mousestartsstartsendr   r   r   r   s                r;   test_interactive_panrO  k  s   , llnGCGGBIIbM??MM' J \\##J/66s;F<<!!(+2237D cjj+1:E:J:JK szz-,0-9D9I9I!!"-J 

-1:E:J:JJ 
CJJ	'BFFHLLKK
NN:6==4#HHHH6==4#HHHHrP   c                     t        j                  t        t              5  dt        j
                  d<   d d d        t	        j                         } t        | j                  j                  j                  j                        }d| j                  j                  j                  j                  v sJ | j                  j                  j                  j                  d       t        | j                  j                  j                  j                        |dz
  k(  sJ d| j                  j                  j                  j                  vsJ y # 1 sw Y   xY w)Nr   r   r   forwardr   )re   rf   rg   r  rS   r  rk   r#   rT   rV   r   toolsremove_tool)rY   initial_lens     r;   test_toolmanager_removerU    s    	k)F	G 0"/Y0
'')Ccjj((44::;K

**66<<<<<JJ""..y9szz!!--334aGGGCJJ..::@@@@@0 0s   E

Ec                     t        j                  t        t              5  dt        j
                  d<   d d d        t	        j                         } | j                  j                  j                  j                  d      }t        |t              sJ | j                  j                  j                  j                  |      |u sJ t        j                  t        d      5  | j                  j                  j                  j                  d      J 	 d d d        | j                  j                  j                  j                  dd      J t        j                  t        d      5  | j                  j                  j                  j                  d      J 	 d d d        y # 1 sw Y   rxY w# 1 sw Y   xY w# 1 sw Y   y xY w)	Nr   r   r   
rubberbandz'ToolManager does not control tool 'foo'r}   F)warn)re   rf   rg   r  rS   r  rk   rT   rV   r   get_toolrM   r   r  )rY   rW  s     r;   test_toolmanager_get_toolrZ    sp   	k)F	G 0"/Y0
'')C##//88FJj.111::))22:>*LLL	kE
G Fzz!!--66u=EEEF ::))225u2EMMM	kE
G Jzz!!--::5AIIIJ J0 0F F
J Js#   F$2F1(2F=$F.1F:=Gc                     t        j                  t        t              5  dt        j
                  d<   d d d        t	        j                         } d| j                  j                  j                  j                  d      v sJ t        j                  t        d      5  | j                  j                  j                  j                  dd       d d d        | j                  j                  j                  j                  d      dgk(  sJ t        j                  t        d      5  | j                  j                  j                  j                  d	d       d d d        y # 1 sw Y   /xY w# 1 sw Y   xY w# 1 sw Y   y xY w)
Nr   r   r   vrQ  z"Key c changed from back to forwardcz'foo' not in Toolsr}   )re   rf   rg   r  rS   r  rk   rT   rV   r   get_tool_keymapupdate_keymapraisesKeyErrorrX   s    r;   test_toolmanager_update_keymaprb    s.   	k)F	G 0"/Y0
'')C#**$$00@@KKKK	k@
B E

&&44YDE ::))99)DMMM	x';	< A

&&44UC@A A0 0E EA As#   E!1E.'1E:!E+.E7:Fr   r   	patch_visTFforward_nav)TFautot_stwinsharec                    t        j                         \  }}|j                  dd      }|j                  |       |j                  j                  |       |dk(  rg|j                  d      }|j                  |       |j                  |       |j                  d      }	|	j                  |       |	j                  |       n%|dk(  r |j                         }|j                         }	|j                  d       |j                  j                  d	       j                  d
       |j                  j                  d       |j                  d       |j                  j                  d       	j                  d       |	j                  j                  d       d\  }
}||fD ]   } |j                  |
   |j                  |  " d\  }}}}|j                  j                  ||f      j                  t               }|j                  j                  ||f      j                  t               }|j                  j#                         j                  |      \  }}|j                  j#                         j                  |      \  }}t%        d|j&                  g|| }t%        d|j&                  g||d|hi}t%        d|j&                  g|| }t)        |j&                        }| dk(  r|dk(  rdnd}|j+                  g |||      \  }}|j-                         du r|j+                  g |||      \  }}nO|j-                         du r|
}|}n8|j                  j/                         s|j+                  g |||      \  }}n|
}|}|j1                          na |j2                  g ||   |j4                  |d g| j6                  j                  t8              \  }}|j;                          |j-                         du rY |j2                  g ||   |j4                  |d g| j6                  j                  t8              \  }}|j;                          n|j-                         du r|
}|}nw|j                  j/                         sY |j2                  g ||   |j4                  |d g| j6                  j                  t8              \  }}|j;                          n|
}|}|j=                          |j?                          |j?                          |j?                          |jA                         tC        jD                  |d      k(  sJ |jG                         tC        jD                  |d      k(  sJ |jA                         tC        jD                  |d      k(  sJ |jG                         tC        jD                  |d      k(  sJ |jA                         tC        jD                  |jA                         d      k(  sJ |jA                         tC        jD                  |	jA                         d      k(  sJ y )N   c   )zorderrh        rg  ax_t)r   r   r   r   	ax_t_twinrax_b)r   r   r   r   	ax_b_twinb)r   r   )r   r   r   r   r   r   r   r   r   r   inoutTFr   r   )$rS   rc   add_subplotset_forward_navigation_eventspatchset_visiblesharexshareyr   	set_labelset_facecolorset_xlimset_ylimr   r   r   r   invertedr	   rT   r
   _prepare_view_from_bboxget_forward_navigation_eventsget_visibler   	start_pan_get_pan_pointsTfloatend_panr   r   r   re   r   r   ) r   r   rc  rd  rf  rY   rr  ro  rp  rs  	init_xlim	init_ylimrt   xstart_txstop_tystart_tystop_tr   r   xstart_bystart_bxstop_bystop_br   r   r   r   	directionxlim_tylim_txlim_bylim_bs                                    r;    test_interactive_pan_zoom_eventsr    sw    IC??3r?*D&&{3JJ9% g~OOC(	OOC(		JJL	JJL	 	NN6JJ^,$OO!!#&NN6JJ^,$OO!!#&
 ,IyTl  YY 
 ,6(Hgx 
	!	!8X"6	7	>	>s	CB		!	!7G"4	5	<	<S	AB 002<<R@Hh~~..0::2>GW 13::KKFKKszzJ,.J06JAGJJ2CJJLLVLJ	CJJ	'Bv~#q[Te	55jjRj)L--/47!99*B**iPNFF//1U:FF::))+!%!=!=jjRj)!T""
	
 	##F#---fd@R@BBII%P--/47DNN'B''1T11&$DDFFMMeTNFFLLN//1U:FF::))+++F+!5!5!5fd!HR!H!J!J!Q!QRW!X""
==?fmmF======?fmmF======?fmmF======?fmmF==== ==?fmmI,>,>,@dKKKK==?fmmI,>,>,@dKKKKrP   c                      t        j                  dd      } | j                  j                  dk  sJ | j                  j                         dk(  sJ y )N)r   g=
ףp= @r
  )figsizedpi   )r
  r  )rS   rN   bboxheightrT   get_width_heightrX   s    r;   .test_get_width_height_floating_point_precisionr  J  sC    
**YC
0C88??S   ::&&(J666rP   )4r  
matplotlibr   r   matplotlib.backend_basesr   r   r   r   r	   r
   r   matplotlib.backend_toolsr   r  r   matplotlib.testing._markersr   matplotlib.pyplotpyplotrS   numpyr&   re   r  rJ   rQ   rZ   r_   markr  rn   ru   parametrizer   r   r   r   r   r   r   r   r  r  paramr0  rO  rU  rZ  rb  r  r  rO   rP   r;   <module>r     s    '& & & 4 $ 9   9 %LP9>- U( ($, 
NP>P>,F&-E`* x&<=\(BC/!;#3#3V<!;#4#4i@ +"2"2G< +"3"3\BDE
5CE D >5Cp	+5< tUU*;<>:	:< ,*!I+*!IHAJ"
A &%1K$4$4k6G6G#HItUm4(=> 12uL 3 ? 5 J 2
uLp7rP   