
    PiP                       d Z ddlm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 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ZddlmZ ddlm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$ ddl%m&Z& ddl'mc m(Z) ddl*m+Z+m,Z, d Z-d Z.d Z/d Z0d>dZ1ej2        3                    d ej4        e/d           ej4        ej5        d           ej4         ej        ej5        ej6                  d           ej4         ej        ej5        d          d           ej4         ej        ej5        d          d          g          ej2        3                    d ej5        e/g          ej2        3                    d! e1 e$                                d"                                     Z7d# Z8ej9        d$             Z: G d% d&          Z; G d' d(          Z<d) Z=d* Z> G d+ d,ej?                  Z@d- ZAd. ZBd/ ZCd0 ZDej2        3                    d1d2d3d1 ej        d4d5d5          d6g          d7             ZEd8 ZFd9 ZGd: ZHej2        3                    d;ejI        ej6        g          d<             ZJd= ZKdS )?a<  
manage legacy pickle tests

How to add pickle tests:

1. Install pandas version intended to output the pickle.

2. Execute "generate_legacy_storage_files.py" to create the pickle.
$ python generate_legacy_storage_files.py <output_dir> pickle

3. Move the created pickle to "data/legacy_pickle/<version>" directory.
    )annotationsN)partial)Path)Any)is_platform_little_endian)import_optional_dependency)	DataFrameIndexSeriesperiod_range)create_pickle_data)Version)DayMonthEndc                v   t          |t                    rt          j        | |           d S |                    d          rt          j        | |           d S |dk    r*|t          j        u r| t          j        u sJ d S | |k    sJ d S t          t          d| dt          j	                  } || |           d S )Nsp_	timestampassert__equal)

isinstancer
   tmassert_index_equal
startswithassert_equalpdNaTgetattrassert_almost_equal)resultexpectedtyp
comparators       o/home/jaya/work/projects/VOICE-AGENT/VIET/agent-env/lib/python3.11/site-packages/pandas/tests/io/test_pickle.pycompare_elementr$   :   s    (E"" 
fh///
~~e 	%
)))))			rvRV######X%%%%%%R!63!6!6!68NOO

68$$$$$    c           
        t          j        d           t                      st          j        d           t	                      }t          t                    j                            d          D ]}t          |j        j
                  } | |          }t          j        |          }|                                D ]\  }}|                                D ]\  }}||         |         }	|dk    r,|dv r(|t          d          k     r|	                    d           }	|t          d          k     rq|dv r1|	j                            d	          |	_        |d
v rH|	d                             t"                    |	d<   |	d         j                            d          |	d<   n|dv rZ|	d                             t          j        |	d         j        j                            t"                                        |	d<   nv|dk    r'|dk    r!|	j                            d          |	_        nI|dk    r3|	j                            d |	j        j        D                       |	_        n|dv r|dk    r |	j                            d          |	_        n|dv r|	j                            d          }	n|dk    rJ|	                    t          j        |	j        j                            t"                                        }	nu|dk    r$|	j                            t"                    |	_        nJ|dk    r|dv r|	                    d          }	n*|dk    r$|	                    d |	j        D                       }	|dk    r'|	                    t          j        d                    }	|dv rr|t          d          k     rd}
n/t          d          |cxk    rt          d          k     rn nd }
nd!}
|	j        D ]%}|	|         j                            |
          |	|<   &|dk    r)|d"k    r#d#|v r|	                    t6          j                  }	|d$k    r;|dk    r4t;          j        ||	           |j        j        |	j        j        k    sJ |j        j        j         rJ t;          j        |d%k    |	d%k               |j        j        }|tC          d&          z   tC          d'          k    sJ |t          j"        d&(          z   }tG          |t          j"                  sJ |t          j"        d&d&)          k    sJ |t          j"        d&*          z   }tG          |t          j"                  sJ |t          j"        d&d&+          k    sJ |dk    r|d,k    rt;          j$        ||	           tG          |j        tJ                    sJ |j        tK                      k    sJ |j&        d-k    sJ t;          j$        |'                    d'          |	'                    d'                     R|d$k    r|d.v rt;          j        ||	           s|d/k    r|d0v rt;          j(        ||	           tS          ||	|           Ðd S )1Npytzz"known failure on non-little endianzdata/legacy_pickle/*/*.p*kl*r   )tzbothz1.3.0z
3.0.0.dev0)framesp_frameobject)mixed	mixed_dupCDns)
cat_onecolcat_and_floatAr+   floatmic                8    g | ]}|                     d           S r,   astype.0levels     r#   
<listcomp>z test_pickles.<locals>.<listcomp>~   s4     !" !" !"(- %*LL$:$:!" !" !"r%   )series	sp_seriests)dtdt_tzcatdupindex)date	timedeltac                8    g | ]}|                     d           S r8   r9   r;   s     r#   r>   z test_pickles.<locals>.<listcomp>   s$    QQQU\\(33QQQr%   stringpython)dt_mixed_tzsdt_mixed2_tzsz2.1susintwindowsr?   r         )hours)daysrT   )nanoseconds)rU   rV   periodM)rC   rD   r*   )rL   r2   r3   )*pytestimportorskipr   skipr   r   __file__parentglobr   namer   read_pickleitems
tz_convertcolumnsr:   r,   rB   as_unitCategoricalDtyperD   
categoriesrF   
set_levelslevelsStringDtypenpint32r   assert_series_equalfreq	normalizer   	Timedeltar   r   r   freqstrshiftassert_frame_equalr$   )datapathcurrent_datalegacy_picklelegacy_versiondatar!   dvrB   r   r    expected_unitcolrm   ress                 r#   test_picklesr|   P   s   
$&& :8999%''L h.334RSS q; q; !5!:;; //~m,,zz|| k	; k	;GC hhjj j; j;
F',R0 ;&&n,,&)9)999  (22488H!GL$9$999 333+3+;+B+B8+L+L(!777,4SM,@,@,H,HHSM,4SM,<,D,DT,J,JHSMM#BBB,4SM,@,@ " 3$,SM$5$@$G$G$O$O!" !"- -HSMM
 !J..2==-5^-C-CD-I-IHNN4ZZ-5^-F-F!" !"191F!" !" !". .HN  777::-5^-C-CD-I-IHNN?22'/{':':4'@'@HH5[['/ " 3$,L$;$B$B6$J$J!" !"( (HH
  5[[-5^-B-B6-J-JHNB2G,G,G#+#3#3D#9#9#+#6#6QQQQQ$ $ X~~#+??2>(3K3K#L#L:::%66(, >QQQQGL<Q<QQQQQQ(+(,'/ P P(0(8(@(@(O(O'>>bEkki=6P6P'rx88H(??rTzz*68<<<!<,0CCCCC%|0::::*6A:x!|DDD "<,D#a&&=CFF2222A!6!6!66C%c2<88888",AQ"?"?"?????!!<!<!<<C%c2<88888",A1"E"E"EEEEEEG^^h)&(;;;%fk8<<<<<!;(**4444!>S0000)&,,q//8>>!;L;LMMMMH__/?)?)?*68<<<<G^^ / ) )
 )&(;;;;#FHc::::Uj;k	;q; q;r%   c                    t          |d          5 }t          j        | |d           d d d            d S # 1 swxY w Y   d S )Nwbprotocol)openpickledump)objpathfhs      r#   python_picklerr      s    	dD		 *RCb))))* * * * * * * * * * * * * * * * * *s   6::c                    t          | d          5 }|                    d           t          j        |          cd d d            S # 1 swxY w Y   d S )Nrbr   )r   seekr   load)r   r   s     r#   python_unpicklerr      s    	dD		 R



{2                 s   )AAArw   dictreturnlist[tuple[str, Any]]c                >    d |                                  D             S )zFlatten create_pickle_datac                J    g | ] \  }}|                                 D ]}||f!S  )values)r<   r!   examplesexamples       r#   r>   zflatten.<locals>.<listcomp>   sQ       C((   
g   r%   )ra   )rw   s    r#   flattenr      s+     !ZZ\\   r%   pickle_writerrK   )idpandas_proto_defaultr   pandas_proto_highest   pandas_proto_4   pandas_proto_5writerztyp, expectedc                   |} |||           t          j        |          }t          |||            t          |          }t          |||            t	          |d          5 } |||           |                    d           d d d            n# 1 swxY w Y   t	          |d          5 }t          j        |          }|                    d           d d d            n# 1 swxY w Y   t          |||            d S )Nr~   moder   r   )r   r`   r$   r   r   r   )r!   r    r   r   	temp_filer   r   handles           r#   test_round_trip_currentr      s   & DM(D!!! ^D!!FFHc***d##FFHc*** 
d			 &xA               
d			 &''A               FHc*****s$   %"BBB/*C%%C),C)c           
        t          dt          j        d                              d          z  t	          t          d          t                    t	          d t          d          D             t                              }t          j	        |j
        t          j        |           }t          j        ||           d S )	N皙?x      r   ABCDdtypec                    g | ]}d | S zi-r   r<   is     r#   r>   z,test_pickle_path_pathlib.<locals>.<listcomp>      111!X!XX111r%   r   rc   rF   )r	   rj   arangereshaper
   listr,   ranger   round_trip_pathlib	to_pickler   r`   rr   )r   dfr   s      r#   test_pickle_path_pathlibr     s    	binn$$W---d6ll&11111uRyy111@@@
 
 
B
 "2<KKF"f%%%%%r%   c                 0    dt          j                     dS )N__z	__.pickle)uuiduuid4r   r%   r#   get_random_pathr     s    '
''''r%   c                      e Zd Zej        Zd Zd Zej	        
                    dg d          d             Zd Zd Zd Zd	S )
TestCompressionc                ~   |t          j        ||           d S |dk    rt          j        |d          }n|dk    rt	          j        |d          }ny|dk    rnt          j        |dt          j                  5 }|	                    |t          j                            |                     d d d            n# 1 swxY w Y   n|dk    rt          |d          5 }t          j        |d          5 }|                    |t          j                            |                    }|                    ||           d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   n_|d	k    rd
d l}|                    |d          }n>|dk    r$t%          d                              |d          }nd| }	t'          |	          |dvrlt          |d          5 }|5  |	                    |                                           d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S d S )Ngzipwbz2zipcompressiontarr   r   xzr   zstd	zstandardr~   zUnrecognized compression type: )r   r   )shutilcopyfiler   r   r   BZ2FilezipfileZipFileZIP_DEFLATEDwriteosr   basenametarfile
gettarinfoaddfilelzmaLZMAFiler   
ValueErrorread)
selfsrc_path	dest_pathr   fr   r   tarinfor   msgs
             r#   compress_filezTestCompression.compress_file  sk   OHi000F&  	)S))AAE!!Is++AAE!!CW=QRRR >VW"'"2"28"<"<===> > > > > > > > > > > > > > >E!!h%% -\)#666 -#!nnXrw7G7G7Q7QRRGKK,,,- - - - - - - - - - - - - - -- - - - - - - - - - - - - - - D  KKKi--AAF""*;77<<YMMAAAKAACS//!n,,h%% ' ' 'GGBGGII&&&' ' ' ' ' ' ' ' ' ' ' ' ' ' '' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' -,s   ;4B;;B?B?E"5A
E?E"E	E"E	E""E&)E&!H0$(HH0H	H0H	 H00H47H4c           
        |j         |j         dz  }|j         |j         dz  }t          dt          j        d                              d          z  t          t          d          t                    t          d t          d	          D             t                    
          }|
                    ||           t          j        ||          5 }t          |d          5 }|                    |                                           d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   t!          j        |d           }	t          j        ||	           d S )N.compressed.rawr   r   r   r   r   c                    g | ]}d | S r   r   r   s     r#   r>   z7TestCompression.test_write_explicit.<locals>.<listcomp>E      555aa555r%   r   r   r   r~   )r]   stemr	   rj   r   r   r
   r   r,   r   r   r   decompress_filer   r   r   r   r`   rr   )
r   r   r   r   p1p2r   r   r   df2s
             r#   test_write_explicitz#TestCompression.test_write_explicit?  s   9> > > >>9> 7 7 77")C..((111$v,,f55555599555VDDD
 
 
 	R[111 <<< 	#b$ #2"""# # # # # # # # # # # # # # #	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	#
 nRT222
b#&&&&&s6   D4)(DD4D!	!D4$D!	%D44D8;D8r   ) Nonebad7zc           
        t          dt          j        d                              d          z  t	          t          d          t                    t	          d t          d          D             t                              }|}t          j	        t          d	
          5  |                    ||           d d d            d S # 1 swxY w Y   d S )Nr   r   r   r   r   c                    g | ]}d | S r   r   r   s     r#   r>   z;TestCompression.test_write_explicit_bad.<locals>.<listcomp>Z  r   r%   r   r   zUnrecognized compression type)matchr   )r	   rj   r   r   r
   r   r,   r   rY   raisesr   r   )r   r   r   r   r   r   s         r#   test_write_explicit_badz'TestCompression.test_write_explicit_badU  s   ")C..((111$v,,f55555599555VDDD
 
 

 ]:-LMMM 	8 	8LL;L777	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8s   $C		CCc           
     .   |j         |j         | z  }|j         |j         dz  }| j                            |                                          }t          dt          j        d                              d          z  t          t          d          t                    t          d t          d          D             t                    	          }|                    |           t          j        ||
          5 }t!          |d          5 }	|	                    |                                           d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   t'          j        |d 
          }
t          j        ||
           d S )Nr   r   r   r   r   r   c                    g | ]}d | S r   r   r   s     r#   r>   z4TestCompression.test_write_infer.<locals>.<listcomp>g  r   r%   r   r   r   r~   )r]   r   _extension_to_compressiongetlowerr	   rj   r   r   r
   r   r,   r   r   r   r   r   r   r   r   r`   rr   )r   compression_extr   r   r   r   r   r   r   r   r   s              r#   test_write_inferz TestCompression.test_write_infer`  s   9> D? D DD9> 7 7 774889N9N9P9PQQ")C..((111$v,,f55555599555VDDD
 
 
 	R <<< 	#b$ #2"""# # # # # # # # # # # # # # #	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	#
 nRT222
b#&&&&&s6   E(E<EE	EE	EE#&E#c           
        |j         |j         dz  }|j         |j         dz  }t          dt          j        d                              d          z  t          t          d          t                    t          d t          d	          D             t                    
          }|
                    |d            |                     |||           t          j        ||          }t          j        ||           d S )Nr   r   r   r   r   r   r   c                    g | ]}d | S r   r   r   s     r#   r>   z6TestCompression.test_read_explicit.<locals>.<listcomp>}  r   r%   r   r   r   )r]   r   r	   rj   r   r   r
   r   r,   r   r   r   r   r`   r   rr   )r   r   r   r   r   r   r   r   s           r#   test_read_explicitz"TestCompression.test_read_explicitw  s   9> 7 7 779> > > >>")C..((111$v,,f55555599555VDDD
 
 
 	RT*** 	2r{;;; nR[999
b#&&&&&r%   c           
     d   |j         |j         dz  }|j         |j         | z  }| j                            |                                          }t          dt          j        d                              d          z  t          t          d          t                    t          d t          d          D             t                    	          }|                    |d 
           |                     |||
           t          j        |          }t#          j        ||           d S )Nr   r   r   r   r   r   c                    g | ]}d | S r   r   r   s     r#   r>   z3TestCompression.test_read_infer.<locals>.<listcomp>  r   r%   r   r   r   )r]   r   r   r   r   r	   rj   r   r   r
   r   r,   r   r   r   r   r`   r   rr   )	r   r   r   r   r   r   r   r   r   s	            r#   test_read_inferzTestCompression.test_read_infer  s"   9> 7 7 779> D? D DD4889N9N9P9PQQ")C..((111$v,,f55555599555VDDD
 
 
 	RT*** 	2r{;;; nR  
b#&&&&&r%   N)__name__
__module____qualname__icomextension_to_compressionr   r   r   rY   markparametrizer   r   r  r  r   r%   r#   r   r     s         $ =' ' '@' ' ', [],E,E,EFF8 8 GF8' ' '.' ' '&' ' ' ' 'r%   r   c                  Z    e Zd Zej                            dg d          d             ZdS )TestProtocolr   )r   r   rR   rS   c           
        |}t          dt          j        d                              d          z  t	          t          d          t                    t	          d t          d          D             t                              }|                    ||	           t          j
        |          }t          j        ||           d S )
Nr   r   r   r   r   c                    g | ]}d | S r   r   r   s     r#   r>   z*TestProtocol.test_read.<locals>.<listcomp>  r   r%   r   r   r   )r	   rj   r   r   r
   r   r,   r   r   r   r`   r   rr   )r   r   r   r   r   r   r   s          r#   	test_readzTestProtocol.test_read  s    ")C..((111$v,,f55555599555VDDD
 
 

 	TH---nT""
b#&&&&&r%   N)r  r  r	  rY   r  r  r  r   r%   r#   r  r    sD        [Z77	' 	' 87	' 	' 	'r%   r  c           
     2   | }t          dt          j        d                              d          z  t	          t          d          t                    t	          d t          d          D             t                              }t          |d	          5 }|	                    |           d d d            n# 1 swxY w Y   t          |d
          5 }t          j        |          }d d d            n# 1 swxY w Y   t          j        ||           d S )Nr   r   r   r   r   c                    g | ]}d | S r   r   r   s     r#   r>   z0test_pickle_buffer_roundtrip.<locals>.<listcomp>  r   r%   r   r   r~   r   )r	   rj   r   r   r
   r   r,   r   r   r   r   r`   r   rr   )r   r   r   r   r   s        r#   test_pickle_buffer_roundtripr    st   D	binn$$W---d6ll&11111uRyy111@@@
 
 
B
 
dD		 R
R              	dD		 $R##$ $ $ $ $ $ $ $ $ $ $ $ $ $ $"f%%%%%s$   B;;B?B?C77C;>C;c           
        t          j        d           d}t          dt          j        d                              d          z  t          t          d          t                    t          d t          d	          D             t                    
          }|
                    |           t          j        |          }t          j        ||           d S )Nfsspeczmemory://mockfiler   r   r   r   r   c                    g | ]}d | S r   r   r   s     r#   r>   z0test_pickle_fsspec_roundtrip.<locals>.<listcomp>  r   r%   r   r   )rY   rZ   r	   rj   r   r   r
   r   r,   r   r   r   r`   r   rr   )r   mockurlr   r   s       r#   test_pickle_fsspec_roundtripr    s    
!!!!G	binn$$W---d6ll&11111uRyy111@@@
 
 
B
 LL^G$$F"f%%%%%r%   c                      e Zd ZddZdS )MyTzr   r   c                    d S Nr   )r   s    r#   __init__zMyTz.__init__  s    r%   N)r   r   )r  r  r	  r  r   r%   r#   r  r    s(             r%   r  c                    t          t                    t                      f}t          j        ||           }t          j        |d         |d                    t          |d         t                    sJ d S )Nr   r   rR   )r   r,   r  r   round_trip_picklerl   r   )r   r    r   s      r#   test_read_pickle_with_subclassr"    sh    F###TVV+H!(I66F6!9hqk222fQi&&&&&&&r%   c           
        t          dt          j        d                              d          z  t	          t          d          t                    t	          d t          d          D             t                              }|}|                    || 	           |	                                }t          j                    }|                    || 	           |                    d
           |                                |k    s| dv sJ t          j        || 	          }|                    d
           t!          j        ||           dS )ze
    Read/write from binary file-objects w/wo compression.

    GH 26237, GH 29054, and GH 29570
    r   r   r   r   r   c                    g | ]}d | S r   r   r   s     r#   r>   z9test_pickle_binary_object_compression.<locals>.<listcomp>  r   r%   r   r   r   r   )r   r   r   N)r	   rj   r   r   r
   r   r,   r   r   
read_bytesioBytesIOr   getvaluer   r`   r   rr   )r   r   r   r   	referencebufferread_dfs          r#   %test_pickle_binary_object_compressionr,    s5    
binn$$W---d6ll&11111uRyy111@@@
 
 
B DLL;L///!!I Z\\FLL[L111
KKNNN ??	))[<R-R-R-RR nV===G
KKNNN"g&&&&&r%   c                    | }|}d } |||            ||j         |            |||            ||j         |           d S )Nc                Z    t          j        | |          }t          j        | |           d S r  )r   r!  rr   )r*   r   	unpickleds      r#   _test_roundtripzDtest_pickle_dataframe_with_multilevel_index.<locals>._test_roundtrip  s-    (	::	
eY/////r%   )T)/multiindex_year_month_day_dataframe_random_data multiindex_dataframe_random_datar   ymdr*   r0  s         r#   +test_pickle_dataframe_with_multilevel_indexr5    sq    
 :C,E0 0 0 OE9%%%OEGY'''OC###OCE9%%%%%r%   c                   t          ddd          }t          t          j                            d                              t          |                    |          }t          j        ||           }|j	        j
        dk    sJ d S )Nz1/1/2011z1/1/2012rX   )rm   rS   )r   r   rj   randomdefault_rngstandard_normallenr   r!  rF   rp   )r   prngrA   new_tss       r#   "test_pickle_timeseries_periodindexr=    sw    
JS999D		%%a((88TCCT	J	JB!"i00F<3&&&&&&r%   r_   i	  g     H@i     )rR   rS   c                    t          j        t          t          j        dt          j                  |           |          }|j        | k    sJ d S )N
   r   )r_   )r   r!  r   rj   r   float64r_   )r_   r   r/  s      r#   test_pickle_preserve_namerB    sT     $ry2:...T:::I I >T!!!!!!r%   c                Z    t          j        | |          }t          j        ||            d S r  r   r!  rl   )datetime_seriesr   unp_tss      r#   test_pickle_datetimesrG    s-    !/9==F6?33333r%   c                Z    t          j        | |          }t          j        ||            d S r  rD  )string_seriesr   
unp_seriess      r#   test_pickle_stringsrK  $  s-    %mY??J:}55555r%   c                R   t          t          d                                        d          j        dg         }t	          j        ||           }|j        j        d         j        dk    sJ |j        j        d         j	        dk    sJ t	          j
        |dg         |           d S )Nabccategoryr   rR   )rR   T)r   r   r:   ilocr   r!  _mgrblocksndimshaperl   )r   serr{   s      r#    test_pickle_preserves_block_ndimrU  )  s    
e


$
$Z
0
0
5qc
:C

sI
.
.C8?1"a''''8?1#t++++ 3v;,,,,,r%   r   c                    t          t          d                    }t          j        t	          |j        | |          t	          t          j        |          |          }t          j        ||           d S )Ni )r   r   r   )	r	   r   r   r   r   r   r   r`   rr   )r   r   r   r   r   s        r#   %test_pickle_big_dataframe_compressionrW  5  sm     
5==	!	!B"x[IIIK888 F
 "f%%%%%r%   c                    | t          t                    j        dddd          }t          |d          5 }t	          j        |          }d d d            n# 1 swxY w Y   t          g g           }t          j        ||           d S )Nrw   ru   z1.2.4zempty_frame_v1_2_4-GH#42345.pklr   )rF   rc   )	r   r\   r]   r   r   r   r	   r   rr   )rs   r   fdr   r    s        r#   #test_pickle_frame_v124_unpickle_130rZ  A  s    8X) D 
dD		 R[__               r2...H"h'''''s   AAA)rw   r   r   r   )L__doc__
__future__r   r   datetime	functoolsr   r   r&  r   pathlibr   r   r   r   typingr   r   r   numpyrj   rY   pandas.compatr   pandas.compat._optionalr   pandasr   r	   r
   r   r   pandas._testing_testingr   -pandas.tests.io.generate_legacy_storage_filesr   pandas.util.versionr   pandas.io.commoncommonr
  pandas.tseries.offsetsr   r   r$   r|   r   r   r   r  r  paramr   HIGHEST_PROTOCOLr   r   fixturer   r   r  r  r  tzinfor  r"  r,  r5  r=  rB  rG  rK  rU  DEFAULT_PROTOCOLrW  rZ  r   r%   r#   <module>rq     s7    # " " " " " 



             				 				                       3 3 3 3 3 3 > > > > > >                      L L L L L L ' ' ' ' ' '                % % %,y; y; y;x* * *
      ^111R\&<===IblV5LMMM%	
 	
 	
 	&Y&r|a@@@EUVVVIblQ777	
 	
 	
   BL.#ABB''2D2D2F2F*G*GHH+ + IH CB! $+,& & & ( ( (@' @' @' @' @' @' @' @'P' ' ' ' ' ' ' '& & && & &    8?   
' ' '' ' '>& & &$' ' ' 
S%!2!24R!@!@&I " " "4 4 4
6 6 6
	- 	- 	- f&=v?V%WXX& & YX&( ( ( ( (r%   