From ce719f816d1237f5277527d7f61123e77180be54 Mon Sep 17 00:00:00 2001 From: "Field G. Van Zee" Date: Sat, 10 Nov 2018 14:48:43 -0600 Subject: [PATCH] More edits to mixeddt matlab scripts. Details: - Renamed scripts in test/mixeddt/matlab: plot_case_all.m -> plot_dom_all.m plot_case_md.m -> plot_dom_case.m plot_all_md.m -> plot_dt_all.m - Added plot_dt_select.m in order to plot select graphs for the main body of the mixeddt paper, and added additional related legend handling in plot_gemm_perf.m. - Added test/mixeddt/matlab/output and a .gitkeep file within in order to force git to recognize the directory. --- test/mixeddt/matlab/output/.gitkeep | 0 .../{plot_case_all.m => plot_dom_all.m} | 4 +- .../{plot_case_md.m => plot_dom_case.m} | 12 +- .../matlab/{plot_all_md.m => plot_dt_all.m} | 4 +- test/mixeddt/matlab/plot_dt_select.m | 148 +++++++++++++++ test/mixeddt/matlab/plot_gemm_perf.m | 176 +++++++++++------- test/mixeddt/matlab/testrand.pdf | Bin 33468 -> 0 bytes 7 files changed, 261 insertions(+), 83 deletions(-) create mode 100644 test/mixeddt/matlab/output/.gitkeep rename test/mixeddt/matlab/{plot_case_all.m => plot_dom_all.m} (80%) rename test/mixeddt/matlab/{plot_case_md.m => plot_dom_case.m} (88%) rename test/mixeddt/matlab/{plot_all_md.m => plot_dt_all.m} (98%) create mode 100644 test/mixeddt/matlab/plot_dt_select.m delete mode 100644 test/mixeddt/matlab/testrand.pdf diff --git a/test/mixeddt/matlab/output/.gitkeep b/test/mixeddt/matlab/output/.gitkeep new file mode 100644 index 000000000..e69de29bb diff --git a/test/mixeddt/matlab/plot_case_all.m b/test/mixeddt/matlab/plot_dom_all.m similarity index 80% rename from test/mixeddt/matlab/plot_case_all.m rename to test/mixeddt/matlab/plot_dom_all.m index 05f54e6ea..f2fe7df4e 100644 --- a/test/mixeddt/matlab/plot_case_all.m +++ b/test/mixeddt/matlab/plot_dom_all.m @@ -1,4 +1,4 @@ -function r_val = plot_case_all( is_mt ) +function r_val = plot_dom_all( is_mt ) cases( 1, : ) = [ 'rrr' ]; cases( 2, : ) = [ 'rrc' ]; @@ -15,7 +15,7 @@ for i = 1:n_cases thecase = cases( i, : ); - plot_case_md( thecase, is_mt ); + plot_dom_case( thecase, is_mt ); end r_val = 0; diff --git a/test/mixeddt/matlab/plot_case_md.m b/test/mixeddt/matlab/plot_dom_case.m similarity index 88% rename from test/mixeddt/matlab/plot_case_md.m rename to test/mixeddt/matlab/plot_dom_case.m index 492f9c2ca..e0147d049 100644 --- a/test/mixeddt/matlab/plot_case_md.m +++ b/test/mixeddt/matlab/plot_dom_case.m @@ -1,4 +1,4 @@ -function r_val = plot_case_md( mdcase, is_mt ) +function r_val = plot_dom_case( mdcase, is_mt ) if is_mt == 1 thr_str = 'mt'; @@ -27,9 +27,7 @@ filetemp_open = '../output_%s_%sgemm_openblas.m'; % the data files, and finally save the results to different variable names. file_blis_sref = sprintf( filetemp_blis, thr_str, 'ssss' ); file_open_sref = sprintf( filetemp_open, thr_str, 'ssss' ); -%str = sprintf( ' Loading %s', file_blis_sref ); disp(str); run( file_blis_sref ) -%str = sprintf( ' Loading %s', file_open_sref ); disp(str); run( file_open_sref ) data_gemm_asm_blis_sref( :, : ) = data_gemm_asm_blis( :, : ); data_gemm_openblas_sref( :, : ) = data_gemm_openblas( :, : ); @@ -38,9 +36,7 @@ data_gemm_openblas_sref( :, : ) = data_gemm_openblas( :, : ); % the data files, and finally save the results to different variable names. file_blis_dref = sprintf( filetemp_blis, thr_str, 'dddd' ); file_open_dref = sprintf( filetemp_open, thr_str, 'dddd' ); -%str = sprintf( ' Loading %s', file_blis_dref ); disp(str); run( file_blis_dref ) -%str = sprintf( ' Loading %s', file_open_dref ); disp(str); run( file_open_dref ) data_gemm_asm_blis_dref( :, : ) = data_gemm_asm_blis( :, : ); data_gemm_openblas_dref( :, : ) = data_gemm_openblas( :, : ); @@ -49,9 +45,7 @@ data_gemm_openblas_dref( :, : ) = data_gemm_openblas( :, : ); % the data files, and finally save the results to different variable names. file_blis_cref = sprintf( filetemp_blis, thr_str, 'cccs' ); file_open_cref = sprintf( filetemp_open, thr_str, 'cccs' ); -%str = sprintf( ' Loading %s', file_blis_cref ); disp(str); run( file_blis_cref ) -%str = sprintf( ' Loading %s', file_open_cref ); disp(str); run( file_open_cref ) data_gemm_asm_blis_cref( :, : ) = data_gemm_asm_blis( :, : ); data_gemm_openblas_cref( :, : ) = data_gemm_openblas( :, : ); @@ -60,9 +54,7 @@ data_gemm_openblas_cref( :, : ) = data_gemm_openblas( :, : ); % the data files, and finally save the results to different variable names. file_blis_zref = sprintf( filetemp_blis, thr_str, 'zzzd' ); file_open_zref = sprintf( filetemp_open, thr_str, 'zzzd' ); -%str = sprintf( ' Loading %s', file_blis_zref ); disp(str); run( file_blis_zref ) -%str = sprintf( ' Loading %s', file_open_zref ); disp(str); run( file_open_zref ) data_gemm_asm_blis_zref( :, : ) = data_gemm_asm_blis( :, : ); data_gemm_openblas_zref( :, : ) = data_gemm_openblas( :, : ); @@ -142,7 +134,7 @@ end %set(gcf,'PaperOrientation','landscape'); %end -outfile = sprintf( 'gemm_%s', mdcase ); +outfile = sprintf( 'output/gemm_%s', mdcase ); print(gcf, outfile,'-bestfit','-dpdf'); %print(gcf, 'gemm_md','-fillpage','-dpdf'); diff --git a/test/mixeddt/matlab/plot_all_md.m b/test/mixeddt/matlab/plot_dt_all.m similarity index 98% rename from test/mixeddt/matlab/plot_all_md.m rename to test/mixeddt/matlab/plot_dt_all.m index 8d417da82..865d578bb 100644 --- a/test/mixeddt/matlab/plot_all_md.m +++ b/test/mixeddt/matlab/plot_dt_all.m @@ -1,4 +1,4 @@ -function r_val = plot_all_md( is_mt ) +function r_val = plot_dt_all( is_mt ) if is_mt == 1 thr_str = 'mt'; @@ -139,5 +139,5 @@ set(gcf,'PaperPosition', [0 0 48 22]); set(gcf,'PaperPositionMode','manual'); set(gcf,'PaperOrientation','landscape'); end -print(gcf, 'gemm_md','-bestfit','-dpdf'); +print(gcf, 'output/gemm_md','-bestfit','-dpdf'); %print(gcf, 'gemm_md','-fillpage','-dpdf'); diff --git a/test/mixeddt/matlab/plot_dt_select.m b/test/mixeddt/matlab/plot_dt_select.m new file mode 100644 index 000000000..38c8d3cd1 --- /dev/null +++ b/test/mixeddt/matlab/plot_dt_select.m @@ -0,0 +1,148 @@ +function r_val = plot_dt_select( dom, is_mt ) + +if is_mt == 1 + thr_str = 'mt'; +else + thr_str = 'st'; +end + +if dom == 'r' + + dt_combos( 1, : ) = [ 'dsss' ]; + dt_combos( 2, : ) = [ 'sddd' ]; + dt_combos( 3, : ) = [ 'sdds' ]; + dt_combos( 4, : ) = [ 'dssd' ]; + dt_combos( 5, : ) = [ 'ddds' ]; + dt_combos( 6, : ) = [ 'sssd' ]; + +else + + dt_combos( 1, : ) = [ 'csss' ]; + dt_combos( 2, : ) = [ 'zddd' ]; + dt_combos( 3, : ) = [ 'ccss' ]; + dt_combos( 4, : ) = [ 'zzdd' ]; + dt_combos( 5, : ) = [ 'cscs' ]; + dt_combos( 6, : ) = [ 'zdzd' ]; +end + +n_combos = size(dt_combos,1); + +filetemp_blis = '../output_%s_%sgemm_asm_blis.m'; +filetemp_open = '../output_%s_%sgemm_openblas.m'; + +% Construct filenames for the "reference" (single real) data, then load +% the data files, and finally save the results to different variable names. +file_blis_sref = sprintf( filetemp_blis, thr_str, 'ssss' ); +file_open_sref = sprintf( filetemp_open, thr_str, 'ssss' ); +run( file_blis_sref ) +run( file_open_sref ) +data_gemm_asm_blis_sref( :, : ) = data_gemm_asm_blis( :, : ); +data_gemm_openblas_sref( :, : ) = data_gemm_openblas( :, : ); + +% Construct filenames for the "reference" (double real) data, then load +% the data files, and finally save the results to different variable names. +file_blis_dref = sprintf( filetemp_blis, thr_str, 'dddd' ); +file_open_dref = sprintf( filetemp_open, thr_str, 'dddd' ); +run( file_blis_dref ) +run( file_open_dref ) +data_gemm_asm_blis_dref( :, : ) = data_gemm_asm_blis( :, : ); +data_gemm_openblas_dref( :, : ) = data_gemm_openblas( :, : ); + +% Construct filenames for the "reference" (single complex) data, then load +% the data files, and finally save the results to different variable names. +file_blis_cref = sprintf( filetemp_blis, thr_str, 'cccs' ); +file_open_cref = sprintf( filetemp_open, thr_str, 'cccs' ); +run( file_blis_cref ) +run( file_open_cref ) +data_gemm_asm_blis_cref( :, : ) = data_gemm_asm_blis( :, : ); +data_gemm_openblas_cref( :, : ) = data_gemm_openblas( :, : ); + +% Construct filenames for the "reference" (double complex) data, then load +% the data files, and finally save the results to different variable names. +file_blis_zref = sprintf( filetemp_blis, thr_str, 'zzzd' ); +file_open_zref = sprintf( filetemp_open, thr_str, 'zzzd' ); +run( file_blis_zref ) +run( file_open_zref ) +data_gemm_asm_blis_zref( :, : ) = data_gemm_asm_blis( :, : ); +data_gemm_openblas_zref( :, : ) = data_gemm_openblas( :, : ); + +%fig = figure; +fig = figure('Position', [100, 100, 1024, 1300]); +orient( fig, 'portrait' ); +%set(gcf,'Position',[0 0 2000 900]); +set(gcf,'PaperUnits', 'inches'); +%set(gcf,'PaperSize', [16 12.4]); +%set(gcf,'PaperPosition', [0 0 16 12.4]); +set(gcf,'PaperSize', [9 11.0]); +set(gcf,'PaperPosition', [0 0 9 11.0]); +%set(gcf,'PaperPositionMode','auto'); +set(gcf,'PaperPositionMode','manual'); +set(gcf,'PaperOrientation','portrait'); + +for dti = 1:n_combos +%for dti = 1:1 + + % Grab the current datatype combination. + combo = dt_combos( dti, : ); + + str = sprintf( 'Plotting %d: %s', dti, combo ); disp(str); + + if combo(4) == 's' + data_gemm_asm_blis_ref( :, : ) = data_gemm_asm_blis_sref( :, : ); + data_gemm_openblas_ref( :, : ) = data_gemm_openblas_sref( :, : ); + refch = 's'; + else %if combo(4) == 'd' + data_gemm_asm_blis_ref( :, : ) = data_gemm_asm_blis_dref( :, : ); + data_gemm_openblas_ref( :, : ) = data_gemm_openblas_dref( :, : ); + refch = 'd'; + end + + if ( combo(1) == 'c' || combo(1) == 'z' ) && ... + ( combo(2) == 'c' || combo(2) == 'z' ) && ... + ( combo(3) == 'c' || combo(3) == 'z' ) + if combo(4) == 's' + data_gemm_asm_blis_ref( :, : ) = data_gemm_asm_blis_cref( :, : ); + data_gemm_openblas_ref( :, : ) = data_gemm_openblas_cref( :, : ); + refch = 'c'; + else %if combo(4) == 'd' + data_gemm_asm_blis_ref( :, : ) = data_gemm_asm_blis_zref( :, : ); + data_gemm_openblas_ref( :, : ) = data_gemm_openblas_zref( :, : ); + refch = 'z'; + end + end + + % Construct filenames for the data files from templates. + file_blis = sprintf( filetemp_blis, thr_str, combo ); + file_open = sprintf( filetemp_open, thr_str, combo ); + + % Load the data files. + %str = sprintf( ' Loading %s', file_blis ); disp(str); + run( file_blis ) + %str = sprintf( ' Loading %s', file_open ); disp(str); + run( file_open ) + + % Plot the result. + plot_gemm_perf( combo, ... + data_gemm_asm_blis, ... + data_gemm_asm_blis_ref, ... + data_gemm_openblas, ... + data_gemm_openblas_ref, ... + is_mt, refch, 3, 2, dti ); + +end + + +%if 0 +%set(gcf,'Position',[0 0 2000 900]); +%set(gcf,'PaperUnits', 'inches'); +%set(gcf,'PaperSize', [48 22]); +%set(gcf,'PaperPosition', [0 0 48 22]); +%%set(gcf,'PaperPositionMode','auto'); +%set(gcf,'PaperPositionMode','manual'); +%set(gcf,'PaperOrientation','landscape'); +%end + +outfile = sprintf( 'output/gemm_select_%c', dom ); + +print(gcf, outfile,'-bestfit','-dpdf'); +%print(gcf, 'gemm_md','-fillpage','-dpdf'); diff --git a/test/mixeddt/matlab/plot_gemm_perf.m b/test/mixeddt/matlab/plot_gemm_perf.m index a93daa22e..f30cc7da5 100644 --- a/test/mixeddt/matlab/plot_gemm_perf.m +++ b/test/mixeddt/matlab/plot_gemm_perf.m @@ -124,77 +124,115 @@ ylim( ax1, [y_begin y_end] ); if rows == 8 && cols == 16 -if theid == 1 -leg = legend( ... -[ ... - blis_ref ... - blis_md ... - open_md ... -], ... -blis_sref_legend, ... -blis_legend, ... -open_legend, ... -'Location', 'best' ); -%'Location', legend_loc ); -set( leg,'Box','off' ); -set( leg,'Color','none' ); -set( leg,'FontSize',fontsize-2 ); -set( leg,'Units','inches' ); -elseif theid == 9 -leg = legend( ... -[ ... - blis_ref ... - blis_md ... - open_md ... -], ... -blis_dref_legend, ... -blis_legend, ... -open_legend, ... -'Location', 'best' ); -%'Location', legend_loc ); -set( leg,'Box','off' ); -set( leg,'Color','none' ); -set( leg,'FontSize',fontsize-2 ); -set( leg,'Units','inches' ); -end + if theid == 1 + leg = legend( ... + [ ... + blis_ref ... + blis_md ... + open_md ... + ], ... + blis_sref_legend, ... + blis_legend, ... + open_legend, ... + 'Location', 'best' ); + %'Location', legend_loc ); + set( leg,'Box','off' ); + set( leg,'Color','none' ); + set( leg,'FontSize',fontsize-2 ); + set( leg,'Units','inches' ); + elseif theid == 9 + leg = legend( ... + [ ... + blis_ref ... + blis_md ... + open_md ... + ], ... + blis_dref_legend, ... + blis_legend, ... + open_legend, ... + 'Location', 'best' ); + %'Location', legend_loc ); + set( leg,'Box','off' ); + set( leg,'Color','none' ); + set( leg,'FontSize',fontsize-2 ); + set( leg,'Units','inches' ); + end -else % rows == 4 && cols == 4 +elseif rows == 4 && cols == 4 -if theid == 1 -leg = legend( ... -[ ... - blis_ref ... - blis_md ... - open_md ... -], ... -blis_ref_legend, ... -blis_legend, ... -open_legend, ... -'Location', legend_loc ); -%'Location', 'best' ); -set( leg,'Box','off' ); -set( leg,'Color','none' ); -set( leg,'FontSize',fontsize-2 ); -set( leg,'Units','inches' ); -set( leg,'Position',[1.03 3.46 0.7 0.3 ] ); -elseif theid == 3 -leg = legend( ... -[ ... - blis_ref ... - blis_md ... - open_md ... -], ... -blis_ref_legend, ... -blis_legend, ... -open_legend, ... -'Location', legend_loc ); -%'Location', 'best' ); -set( leg,'Box','off' ); -set( leg,'Color','none' ); -set( leg,'FontSize',fontsize-2 ); -set( leg,'Units','inches' ); -set( leg,'Position',[3.51 3.46 0.7 0.3 ] ); -end + if theid == 1 + leg = legend( ... + [ ... + blis_ref ... + blis_md ... + open_md ... + ], ... + blis_ref_legend, ... + blis_legend, ... + open_legend, ... + 'Location', legend_loc ); + %'Location', 'best' ); + set( leg,'Box','off' ); + set( leg,'Color','none' ); + set( leg,'FontSize',fontsize-2 ); + set( leg,'Units','inches' ); + set( leg,'Position',[1.03 3.46 0.7 0.3 ] ); + elseif theid == 3 + leg = legend( ... + [ ... + blis_ref ... + blis_md ... + open_md ... + ], ... + blis_ref_legend, ... + blis_legend, ... + open_legend, ... + 'Location', legend_loc ); + %'Location', 'best' ); + set( leg,'Box','off' ); + set( leg,'Color','none' ); + set( leg,'FontSize',fontsize-2 ); + set( leg,'Units','inches' ); + set( leg,'Position',[3.51 3.46 0.7 0.3 ] ); + end + +elseif rows == 3 && cols == 2 + + if theid == 1 + leg = legend( ... + [ ... + blis_ref ... + blis_md ... + open_md ... + ], ... + blis_ref_legend, ... + blis_legend, ... + open_legend, ... + 'Location', legend_loc ); + %'Location', 'best' ); + set( leg,'Box','off' ); + set( leg,'Color','none' ); + set( leg,'FontSize',fontsize-2 ); + set( leg,'Units','inches' ); + %set( leg,'Position',[1.03 3.46 0.7 0.3 ] ); + elseif theid == 2 + leg = legend( ... + [ ... + blis_ref ... + blis_md ... + open_md ... + ], ... + blis_ref_legend, ... + blis_legend, ... + open_legend, ... + 'Location', legend_loc ); + %'Location', 'best' ); + set( leg,'Box','off' ); + set( leg,'Color','none' ); + set( leg,'FontSize',fontsize-2 ); + set( leg,'Units','inches' ); + %set( leg,'Position',[3.51 3.46 0.7 0.3 ] ); + end end diff --git a/test/mixeddt/matlab/testrand.pdf b/test/mixeddt/matlab/testrand.pdf deleted file mode 100644 index b97c17528fcde15318d7cf5970f2bd7f00d7cf37..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 33468 zcmZ^qWmsIx)~%D^F2UX132wm&?oM!bcL?t8?(XjH5IjKR?(Pn^+54P*&Uf#3|FF6j zPs^%VHCMf3j3$*85}{?J`vy%~T2@{G%}BsNV6A5c&CLx>FKcIQ;HYnCM?k@EqpNRX zNFX93OQ39MXK!k4MZiSIM8`m@Ak8nUASR>8NdSBsA!~g{OG7IMQ9E556H|SACLu~_ zdO7Q>v zKrd-%W$a)=zzjSkPe3nXYT*FSNRn=u-d(8K$^-d|e;cXwy^tK%4t@?h@^>W+we*3PI@y^Wq znDw@mTA%fJ`~Ifg^){>hK31XrHrusLvfX8?4oO=S2wS7!U)=LuF-ZRq0gNu z{3O7(j!#dt(vanZH`J2*c4-Bo5iK%aoD#DvdukT72{j=)?bS(eP42zzefljFLhtpd z>D^zcnC~UaTLBe;Om{Wo_KX5dek7*sdi{O*(DFUwIl=37d7V0#)+0py$@E3@;!NcK@{kv^gquuenLha2ty7!vrvui*I{i)GBWzo?e={kkW6)-0N z5l;_!lU=S^qzPxc;2#v!C%^*Us!qYPi=E-uqd!A@E>$S2NG1k$l3nRO9`P8OG(BGS zpsJG)(iXziBL?M0Owm(Sr;vbLc-wxq@8vOTt;BC9 zFel=fF^&Rm-We(`^k7oo!=r)5M}Mt+ddv9%<{;BSvO(vFF3NWi z(%?|ZIKP8F{2qs0c!k&3lIC`48KMELl*Wgsy^h~gL$2pAhqdh#`~~+Gf_B>;Wl3HP zGdvy?1i#PGr--C?{*d-ma(<-Xs1-#RV|#1zqdd|OI09rLD_cA_tmk5As-(5=^` zv7(qF93x58eINnPvR6ygy+;N6bR=a6LXXtdI?6?=oZIM;Iye9&W;~ZT@MaZ+Z_Qxw zyFmSL4@|AbwQ+}?gt!GkQUU0JIFy-35;6rY5z)@DIFZdd8>uesn@c0_mKdVOP!GO5 zQ3A1%$B>aS=4VvJB;*Ger~y$XLZ?auQ5r-XZl=3RlHB`ozYUeN?QG;_CZ2c|8v z4rlYfmn{o~6ludjM)FLss@eZovGH4hX6MQ)%8CM3cgt{(Tt^6ha6BG4X7*F^hbIb& zwGfC~sj2O#Hv5DIIA;r9M>&TSJ1~~joE`$@ZRb2+J%tmsy~!8aTw5wF@t0RLInyP$Shie zs4p-bkccrx*-FzJaN;)>0IJrH$JOM?&BC0hdMhj98{{3><@c2w=T`=n1(X!C+;Aoo zefw?u4PUx2e zae>eI{7lEbwG`gte{bDlR-ci{QKL3^{uNQ6Hyp#21y&l}CP zfd~>8eepYQ>`X2R$72!8A%hN2tUIzJWnf$*8GCsM2bO5nqdz`*qr{LTPJZ$sSb)W? z!N>;uOA5;6JIj0snhzcip`};QtnaZcEg;7dOD@DR9BZxWx(Kc>MSfy$3*a7O0G@;M|2wyB{onaC9lOZy9^ zRkbmxQ=7E2?S8G~Hzk$A=GpJfzuVDNP4`&1zIL$Oy9(89rE>jqaXODZM|CWCP?i+F zH%@+tTTNV}qR5&Tw(50`^+*ARI80bw(Z*=Uktc#7nMrB{Epabs9+UtR`yCgLU+lI< zFrtH5-Rgl8{M&MxHfSqxs5KKdb*DZq96_uJ#r;kq2)mePWmJ$8W%I>Vb$?Zjm9kQA zFD8xn-d~WjndA50btCJzon5i_-AObPgJ20-{B>TrluP}Yyw5x%jIRj6ZNdzfa|a=> z{`dv$o^0$y{#Gj#rqO@Q!Q3aIP@@iFTBABc^ba*10NLtv8&kPGN@j8wp9YY-FMy>e zM0pBLC~V3WAC+HEaVY%;b(1=RI6W|X0mc^;uulxmsh665)k`9U<%G$ zV-WT-|AZlKmHu^QlQy!{kKBhRV;XIltsKU|S}9w~(2Zi!1laLy)EoZQ@h$6=ZC`8s z8RjiC)DYYaFsOL?qTzw{GQU-p{#U)uI0D7T7#-}#=V$R^WWW2~j<`ru(Fj}njj-84 zQzET6wuW&f8RnL>G7Ye33|ca_Q`dUH((5u`YWyk)!Ov;LSOZhx4Rm(OaigBA!}Z$| zXW4cdQ;$Zafw8MA$5dUZB|reKRaBZ|54E1STUYDupKyFB34tB=^XjtxvF|4oNlJ0v z5W9B%4;8BSxVu+5tHsol&|u!qv`VA=UHcN*d8Y$1y39g(0s@kWYNXO7K4KXu7808c zg5@(M_th3KhQ?BzBjnF7C3s{i2z(UWU*#91tTpJhESMOnxL*(&xM?ek&0= z3^>sJeXaKCY3zU|o(`lNH(Jg`=-$63gEQ|&hrj%L7h^z}lyQ7+F7r<%K?mL>G**{J zC9KM}BY6~JFPo)@={g?a7-TzNL&@9d$({<*f?(pa4I@Qb;7Kdrfn@6;&H)QwK%}hQ zqX1Fv{uR;Zhe@uyRvA}Y^g1av!=ynnbROWXYv#+iiq0X+&0Ix#b1QKgyR*HRv~HGv zjJXVb_ZANiS3T4{=W--sOuulP?+C%yFAV}>0pBet@G-v_#$?Gb$_{s5-dFP_f6_=I zi#?|Cn%><=-d5KpvrC8fFx*VvLUl3E(~g41@L(jFG&h=~vlWw&{sp~>`$h6lYiY-> z#GRf_`HSQvD&)nOS+I1?j4$kDqj;YqzOwJ0Z=JmjU47F>q3I=Qj|j6sG$qu-RvW_7 zOdD#koF)-w#hcKVdSXu!H+!NzPV#$_~6OPOSrUq&n6x=T9DE0{A7N}Hyz1%N$$;gw>9e}0|Qhn2Q9vTT-4yE zp)xceHx`vmo6pMZ=QW-0h}(pL^LnU0yaexxqq!l!Vei!4DnePlFT#{@Z`u4bMF3V9 zRD|wvUz2-sR~QP4S4zXeUTdYv;#zVs$&{}4tDV-9)~|siFLdwR=Hbq8i$9tM z%^_y!whV!Ue-siuk;OW%wkLBz?)IaQVKV`jH=-+eaT_RaA1KMGt(c!-7}uiDQsA}_a3pHLx~y&J98i_YOE>n+Xm0Z?5gBB zG`qcq)^yAn75d=;eXjVpM<9FG6Ioa!(@G#Y>~TbV*QOIQriXxX%9~6pflm~(2~yu5 z2i9bRc3$tsSI46f(XgjmI;B!l~{^`ZQEiZ@?oLFgmn6)K_2i{ zw5GI_#%WhubVg}bqjXaC z1sO3Ktf_Dsytr_A3v>Hm>K?Z#HX0(SsA{~V<43Zn_ZVnt@Tu;w;VYIF1IpEm0#&Sy z-@}$MHl46FqERg@yg~vX+NdK@fjzLdnjg}TXGxCkd~*famTPpkT(n7OCGx6>5uZ>yv(x;ORFbnXz9Noc6nB?0^L&M9(2PL(neH!`JjW2t;4S(|4uhToi4BjstUQYXb>xKM~mFFYKP zG2VT3V&Oy^Dkm{E%sF06Dp1MO@hR;7=45Kc4?yT(LUBT$Iq5mST$Lv!|6{W&1o zTn(-*N*`OUgEcD0l9Uu){ke(oz82YuZA*8;`LPNDzWLr`q6gKS$YVXjL&O^-lD%%7 z@BKmlE^IA!JDTpT9r;nqxV_m=jXbTAkIPbOz>=#kM9lf%sp=||wC@tG{Vk81wL0f~ z<5v6D;|R3EbUsAQMp~|C;>A>stKK)`QCA+j8F-k@b+Q5DN?X@wzA-T7Yafz#5GA<& z&G>r7yGc$n?ftG>Styy#!G$gPurFZA8Xdo3<6w*4ofYM^ z!}i@b>H$hA*Awa6O%<{Y-D96VDvV__YLrNvot;P9FTY3R!}zG==rv(!^PSL?N(PDg z^_c3G%$;OWnHUphVAJe+FfRThf7wz(ZA`NYA@u%CB9KgYY1Xm_7nwA%#D|C#x1JW{RH=vyc0jm?rAET(P z!+c}d5SZI7Cr)9kN6A;*VC=4l-D_ClB!N&#uu!l>%hT+mnP}E@vjKi3T5?Cv?Yc>v zJ`;*C29YG`*vOzwg?pKD&Cx1`ZN?jiu%@pM~4@U5sKcwz9f!L!Qc{Sx? z5#)XR8|+QbK6*NT54}Xu7?wu~(Y%U^@Q}pAc)=Jr*Os`3*`|e_%O)VtyFoF|d2K?Q zJzBQ(T7aok*FB=5Weqp%bQFlSQ`?=^Brkn8U|mo~%o%Th6Ed>51bG}DXBoY98f8h} zf+7%#EQL$As2pSIY+Z&pS2YA1j?>Je?z0fsH!#_z&6eibP36MDMPY7q;8&u+`AQMj zjcrHkwvI#M)$k}xHHRrEgSxX+CN9PqGGAI%QqXI2iYr9gK)`>aPRvl7FjxJ|-iS13 zevPrDEDtSR{<<9Pt_IbHeaW!j<`Z*JJ~lZWFzJBZX@flQNzAktF<3tMmgjijpJz7_<%8qdw2I**Oz!+} z4{DT8VJA|0eTKr#6Xn(!P)k7eycuLLei%ReG+dxc)WMjT0w4>euwOwjNZ3#jIH}FM z2R#+)=ia?{bij4V7hjrkp+wTnUeDd1G_|(lIbclym|BO7|2`=Ba_XrBHIlOHwsE*9 zuiHG&2@y)DOt~02CKqA`gzCJKAb0pOkb%`Nf6agOX3|O{59g%ZDUNCU$s_K(Hc~S0 z?d*xuvg>fD3;Wdu%yZ7UU7j(fSqI#dt)F1`q?U`@-Va{k?qG?=S1h0Z*goK^KKzV( zOv$WMSP@N@qN6w?uJ*BJWl;G(4PH!^21mm(UFUNMhL~A?iB3{3W)Fti8>mB+(fCOv zJ;>V%T^Gz2v6o+RafnZUWl0FYKnEc~szn&vn_hrcErnNIRTk54Qwpb^T9np76v|5U z1SOr|`vpFS2dg$Op)S4%rJ=F8FBL`Vs^$ln@fK19{luU%eABOEewN~lRKXm17Gt;4 zY@we@0yg0H%AQiRsDb7c_OI2VT#n>n*xRbVtPOciSR*ZkZfz!W9HniM+V89d&kSi# zjQac1t=A1qe4Pb+6y{Mv@e;_(k0z-$|8DBpm#r47?iTJcF9=cGRS&Tv*;2d3UPVaIW50lrYp+>7Vb_{$uy zctbTN` z6?4WCz#uA)>b?`rL$FVf;4k82MUnGD9cYEM2^#pxc1e~=72g<{U0O`Gq=wJqhNIv? zy40}Ms+My!UGO?ev6ML|lWMpbc>8fc``7J9{n$c&MQ4NPx!+6#HaBqskJK0LZxTRe|jVz@S zL19H=tJ5OfiC$#njGBiMFzyK>vw#H^Ag`7c&R4F(pv3Sf z0?k1B)+X)dieLAeO)IIe*}BJbk$us(yn6&~A-CCy4}q4Va<%T?*Jx*YVe-0!U0vJ5 zkL{20zADQb`;PXK(4&+w&?U8)hrjpvhJpSewQuLwOF|VKrS0f1A@6<7oizDFwbaVv zyc039yuJEcOerY+$eqh|3$J4<9(_*HTJYBL9lZwDH{UN1URp>!9IRM(ENm)R)lE|- zwQ}YjywWF6{79Z8nx(?RJEp-AWaO3^D>cs$EH^Q3CFs`nTiyGw0qnLEJwNb@8W@|$ zTodch0Lz74zFlhj8I67lI|B`Z*lHRzsDPzCBb1g)&i=c059yqt9w{DP{j!^flMSPj zV^|JZGR0|-M&NY`t^u!$P{U(!5@iur=tSZ!rxSmlx=`-Y-=uCErcf$)w!$6dYYag? zP-n}RWF{9C$%TW0h(-5L3z?cD0Whw$e_gSXI=s}MFZ3#bL+AQICmcl5RT_LCM9mXx zW>)!4=ia1%Vh~1^OJ3klE)kHo6>p=9HZ6q zthPUWln|>3-MWehgxoJ-bENn-?;vCTVX8yRM;DuIF_I^7y2XiI9ny0YMW6t`?g#}oWnFWSZE@r zg9a)tu+W;?w|?h&f>sabS~cMc{k>}f)LPaejVKAc#CbxA7`UwU zY7#C|Of~$OVtgAMR$0uc@ulSsEc$Cge{n`S;ve;$)|-sz3|GIO;RQ8@$2!w>6g+F5 z^|;Otc?n~pr=8`|n;di|p(5Slv;-YUjVFMgR27%Ij?~{0ONjnW;-z?3-`XpR8+bNF zBg20x3PzeTA1-4PbHvl+-Ca1|*jwf7t5;1i<|2G`TMkchW?Xidy)#YaB3jAuyPE(| z)jMC(0iTT_ijLzVH5RXJ!!(LS(Rb4FE+LHsOR}9oBfp{wn28z)KK{l!~)?HVv+iu)u>)S`K3jnqQe{|1N>x|UmHbxtMWcS#SLzu zx7*%6N4eVlLdroG%=)Qm!JX2X-4my+EaXtw6Fkk8Mhyqh!YUR?8H%CHK|_rZ)D%%d zaK&0vR%}%bZEMC>midzBkF#Yo<4oURm*_Db1$#%x*9b+o=v{xyv)o zdR(uSw#UijeBf3$tq#^v7Gb6}-xkr>TC8PN-@-SJdN%Ojy9dp-{A2_pfr?`3b6mUF ztB%g2q52bMb7YCD6OCJIg0Ps<2{L7@k`*OoxzZ_GrsE8HS!Ykf?mC7@Jlf=IS}4?Y z354Q%eVgVlnKuy_1rylOZ(-{B*=CzTUaeQ5R!dTJq>5Aw`NF+?!-THKS%5c0dL-~F zsZMtcI@U{Mep2t9IZmr{ATyi*at6{|ClvVZON4t2_!7eqQ?vtQD)_;~42Eu@#pgs` zj2!cdP9ul`wT$k6{1OLr?5;gEHX?&75FEAg7>&INvV1J;-9*o0V%WN%Xw|0H8vr+W zp8SI69p%Br`(nf%S06**EnJX~xe^}@o)ucC1v)T|fh!TVr)Q(46?r?m?UF(Bi`MVjI5{ zY3I6rl-aKe6k9Y_TZ>&F9#wJUvVSu=+kirnV%B4jF<3>m*i%sRz`IEq!x;V86%Hkj zr80;CX)Hgqh+v^m6TqVau|*o-hmvvn)Ea3!on2l?ytnox2}tcQ`H=@eYBx*%p!Ugs zsNJljFmad?x=t;L2WdKVWmFyDiSry>+TaRnNli%^wA2OHl9W*0hJ;|>S*FH)@dN(G z^K%fCb`j%}w^%LcpVD&Gx0mfGR0*+=1#$Yf_E;UY|0ee#OToR{C$N^cyiDzsXqF(> z3|__ds@H>gIJKNAV{cYs8P8WgJ_)2n7C0m(3p=FXPaJOAqkQ%BHH3gz_+goCN|!JbTaBOLR+4xHPI=%?Cm*G0@a zzb}QLymDI+eAS7=FEKK4&P|c59?%|!;A)sWN*f(O z!sMt?FY7E!gzjTmA0W*`so5cP)}%Atykk7cE16$oEU(CqCk}RN+MJI?wqje;9du^? zD(vS?+v7w$;1OcGYH(77wCWfd<{s}Dc*t4J{7H65#`%hc*gU#wF-3AXRnS~!h;nVg zLad?+-5{Vd6L&G(BjtdI!y&$XC?)uhvhRTvB$JRc*rR0bF)^(25nStrp1d^K#jXvP(9A9{(S3u zUlU3brWL?)pG%Qrzm7Q@*)=L+R6f#GiL>iINKTQYd%`}Ol>Wucl(-PtYnII$D7I~v z@XVd=kc5vo0ccJN;KafXJwrAbBGhuLjNs#Mv=AewP=;Pa`)i`^$r+h0wi+nZ2$3CZDD zL2+=*{PrCL-&IZC!1a6u5yRjf388nC4c?%yj9)M5xruPAgNAz9N0Fi&`?2cs#B5^; zrf~t_47``6tVh8=d}T?X-eP`~Gt0WbK?#f~6L48L9btX8*)u%Wb0dGJ#L~K^ewf>n zE>?_4$)uu)R!N9X@2dD)tV%uJi&btGmNfNGzNtlX!XM(zHM7JMToxDC#cS}!wxg%k zbtcB!^I+=-U5DP?XOA$JCsF8Zb>M;Asl*v6@kjVd{6E-PTUuP&ojBJX3?+nO&VV>q zLh2^?;N-Lr`XB|zj*0iqpa;bjTL)y_LZ|XqCY+5FE4Hdxt`SJly*9OtTKMhedLqQXw>ThUj!vyLi%l8o} z8yT|f(JTR#Nikdpra)TuQ>T_&|1Vk&a5L8+Qn^u zE6dbS(mcrm;xgUcH3^mzt6&)bGsl@rqZ{=kygCRdrvcA(j9$gTfthpPA+3HQXvwS2 z15Ki }4&lnK3ak^v%y+>!_sD0@!cK#}m*ti3_sNp?m;a+MOu4}Z zc=xAN9nHy=pqp|vYF&UgF-re}pfMQrkZbyj9ZIm<4PA^B{eTl@Bupmw^Tk9b7%4|Z zB-8%X3vt5H@0=oNrZXi{&oix1>&^o_`{hld{}4SNHE*})+E%gObND|pu0YYWzMnPj8Uc$2hZfKM6i3q{aKiL z@GPU7!6FqKSKe_zhD_B4w1?YeLFh6|otpc=DORRX--M9~D%aTlI z8qae5=36Z7bxsb*6FY8%6BcW-q!4Je6pop(#2ytrYCI{7FYZ^B?+%TX6?BJ{kW^z| zB3{xPvy~PSMhYJ>P{ttJ3 zb~DJpU&`71!SP5zPo5Trb@!-9<|!gmjxo?Sn_2hmvXh?+#?KXAI(GT=ilQqbL;#Ui z9d@v*xRss>Jx&D?C%JXKu38o%pBKb7G9X{opmUwgyg7d*wPJmt?Xm0-X#jTv_JvN_ ze4C!aW@7;rDP2ELSKA(lW9~2!WY`UZ``i6i_%~CcOy$ad1TzBxCU!IPBe-qevV!=g zHEx%zNK{kkfZsY#hSQ?BHoC%4Ql5t2V6XU5idPP+Vs=DM4Y;6>xCIM7Dyj;zg&zyqr@r$=xBl|(HKqp0Sn0nNh$-vwqlhST5@&d5i z^5=fr!LoYnuzN%yv@YP$ICx)6v%V1)-kbDET>3I8QE-ISaAyr1JY;}gN8!R6Ul=L< zTgwf*n7KmNu3uONSyHZGoVJpXLumpY5<3e}D|oJ-iJ~*qvv-5RSockN9 zXM0x$R;%4w$w+rV(|)Y;lvwDq@>`6s%TayhcS`^CvY(-}26Xa^7L76*&Gqxb@Dw5K zD8Fi@)hHb-Z5fbRtP)BGiIO43DyZ^SqRqK`^voYz4h)O~7NG3>gK_8^&3_6*UV#$| zMXSUkkPZ*8?ju5b$HTI=?YKa$I^b7;IFnf8#A77;KQYx9{{o?8R*sIlQk4?a+&=DGP>H!vkNsVw4z z*ypr+&ko|ff@sLay86}+#K>3;u9h^F_v}DkCaBx3Q%8epl4(O1CK7yM8CGM5O19u; zG`TgLU+qJSMwyLaT*w>8|3lQFFs+L#r4-oPJ^s59?r=pz6suH zr%gbA-Y{y-KnOFNB%eT0w9J1XCg>15r2Tnv4M_@Bvu-vxFc{{k+@g8vC@e&-j;D)j z{2`o(j-{%UFX~Kk%@0EG+{7dnqXH-Mhj0QH@*$j*pDCI5Wy;KUcHqj})yvxoPHa3# z;ITN8rC~1y*PC4JecIufV7;!_O5byW1S06+JP<)Ont%vu-ULL@)wYI~@8c1niw^?R zE5$k*>lV5tzPYqETC5tX$GOHZ*XFt|Hj0btDw;_<~lqt~||P4<$1b zu8=t1`r`RP@+V?1roc0UW`F}M5Wj}nf%CgO5Q*QF6}X7GoMd@G5Jfq|fSn267FUU7 z$J9kb&OCu9QV6S~IPfp-UbxR_h_u)6LT!t}>0%9G8H$eo7Ws zJv}E-HVB(2i<{Qm(+*@ep}VdVzQxn7W^wbdwcQ+H;%jA>Sy+UmyFN!`8hZh%33S&% zOzX=cEnb}F1%%)1gJH66BcLce0>p{~Lbw$;hjj=BTI2CwJ%D>QrAzag40j!3%7;=$ zj{JwUmLNz!u4zO22m*x~q#gFXHX42}HKgehaKEAS59x;&PSMni^Q#6)p18uZY^2;= z-roL2V=kJMlrd+7ftR4duA4i{;WFr=uysG$Lq`pI>=ifpFmL>o4}@P+2>rQfqgv7F z(l=ncp?q@hQO+?Bi<>4H9z!&i^8NjvhO{dRx(Fs#3*qMsN$A_2>p{UE>G}gSgo;TI zRe$v=Sj?T=7dGf}1Z|R%(6ZJk5-$kEgK?fbGPWlxdA6(%=~5$l?1%Q(PUvVEjZxM| zaQ?#YsjSo4yDE=uXxRLP^d^WqKs_tN%+x3@#KUTU6ta?VNCKJmGtf6lzqGg!Yb;-@M;Z2*EEHqZ1 zRchD=&w*WtS`{Y`AxvWvc+Pd8g_|e5nJSN9A@DC|E+2dfWJ%9Z;E)0Q7xvElLH5~IO{Q`e{(8cskEgV8z+WeIG zY(*(6Y)^$@=UWFD-Rn5%q^ZV-)lJn2+)v(M{0EwUNL+775-$A&ZYW`ZRyV#}!(Uc6 z8NocnCUDvQ2b$j^pN-j$eGp)>n|wgD-B>vu&ib>U+I4D}hc(_GhwzWNJe2I?X9u!W zVx5n}(VZEN4Q6kR_sx7Gm!%VS>4tCdZ(m0J%Q@-~Z*sOgPeq%ohM_%qp6f6dwF|C! zg`GjMa&f-42L7TOj`xkHdl6j5!xk8R@aof^_;M%NLSY|{ium*}wQG`(|vyD(r8tdhu zNP%D`PC+9;UKkvl<>_R7`4bp5@6R2ae-tV(GX%O6_du6or{C;fE`XK+kV;OI(2s2@}i51J5o0u=Bd@`-$rGA_-C>Hf6q8_;K#~`?uUSXE9R`Q#ZF~Fgi8WeQcTc zR8&2PY-8^eiN05gr4Pk$U_+|L6OVAde0`q;+xtj_|EXwBhx4}^8rmUj!AFKzg&qTj zgXOCNOk_Gl?yGacd!fOvTqrZ$A^_$;ibvTuy?$|zG;F|&F(&n5ihz`M+LwVq&}&%t z1S-hjqA{uVwPDEYs^4^Sh`pFyhXMV!K%oED02~$v#g0Bww$(;QVqk;umN#3|iyVib`%NTeTCozgHWz%sAgVGt4k+T?;2x zsHIjOF+~vJ5iDac6F3id`>dk#$Daq|_Df|?v2he9|8WY-#95#FjfqZZd&cEosAUeo z%=i6X81A zb5vtb$tM9-=wKV*FyQ7;z{`DUq}8TN`<&L*U%4u7VGkT2lctXW`dSHLp82X{shiPWKbps%p+*gT7{=zsYL zhA%csJGxHR{{E&VTG+ff=(%_Zj4TKgt-6-$fT?89`mY||Kv(h?83&a%Z?dL2%C6XK z|M+%d5vW|lEN~9=X{iC2x(L9*VL7pIiwPjdwgL-bn{nh{Y$O~WZiEvOX|yC@ss-j1 z6c-bFem#4i4&T%uui54buGs%=}>{b6=**i7}qyDFs&B$^Es%DOIU_xP` zSN#*Ypc^nePM+W`CSV{u6y8g_R*e*Rfqy1Y?RG51dZ2psfIRdDA?E zU>GCEgj$ZtB9U-f_jIfkIJ3Qp_a6xci^K45Brk4C8PN->2=cs4 z9CD&^?eAPkh2uO`rDr1Ipqn*)nQm0Qf?H{nb|04i=yAtN5>K?A&pc$l&dnesP!$jv1^`ch zsX*qdu9R-6-&@RQH_wm9nE)1HEA)(QjPz7{P)}eBC1I(X12d$mm|W^7&f&BMX)tT* z1c&`kPAHfdxwt|lrzRq=O60h}ybWVC!M%~8z($(4l7`c5T)vf=K--ohC#4$$Fu`QU zk>&=($443P9K?ajX^PT`kD!@?Yd`XkW5A$8p*7si021ANOP{u^tX&l~(E+1KU+3PQ zILI9umXwrX#N<%OD(^u~6sUPcaS%6L&9tI&#b3LfKwkNZ+bv5&boQ>G=vo+3_L1#t zR&ZyIs?>SIfaM#N3%29-Stpy&qe>@}qE+f<@bk)t2p8*%tKV(8&PN?R)Hdhi<5Z>X zbN#2TrWw8iK54X8;0rbEHgN;AK>rfLs<9dD=fKt;`UZ=d8H~>vZ#XM}yz*AjvmnSG9oE-IY|+^S1gN0tIP6liCn2n}kjz?qYn&hkrFr`()=YD|_wTpp63 z(-!N$(>x*l^zI6Ae*e#&HqxKIMV zKQUf{)uw2{musHmdjmk=mKHa~IYSrGI|pWCj^z#Iv4^#ob|j+}9IMe`x2 zBPSM~7XRw#Vo&s9{10HnvjXg^towD}!M+xQs1i#H-jrz_N&%-(l-^;+u%HB+Cadqq!=ff7AmzY{G)U=jyW1voD^p7hV8A0a~kss9{_>A@DTTv6( z#hD7F;T#;XR|%)_kGXG*cdGu2#fJ_K$zTWDf9fzDZkIXfF~f%=#EMh=$1i>5@u8Fu z7zNJ4belJJqilG`-y^w)Z|n{iNaCItI(zGPHV=s)tlvc4CwL<$rX|qN%O)8J} z6l#IE`?1~=&o}AVNzog#!I!MtyIQ|lSL;1f_pW%I4-iyZ*B52|BhM`;1csbh<7Id{^*d^=$I0G;=>)*Fi~KT(8*Nz8Jkav&X$m!Yg$WpS z%wd|zc1;j=;-dm;s|GeS=YGy@Kjaz22OVbo(VyQ(I{2#BWf~hMwLgvi&0%dUG?+7z z+t+I1qY1Dn&bQyi61`2lMt>A{=leg!70m?}m%hyXb+>wdw%+_#ZWQRT9maR$~OkSr>3Sb@oh}e3^6mV~-2d;U=meTth$a%fki0cy&@S z=UPHob5v=g8$p7RecF)eB!0a>Z#@prahIfHJrvcRiuR(XCOYEQ@o&ofz&~qBS)M=0 zqB9>F;(w8P9&Kd2(!WW)=^?#g;0;IkPWEaM6utJ9N5$iV)j_TPi`9#wxE#3JYZUn} zFTfWJfsf{e&o2g#-oD*$pl!pXy4zSBr_s_V$<~8ajv2w2Yu#Ary3+cSx9LBqUpO=* zluH6b=vlihq&iOVW5%vl1%v=#WSf^U{;_db^}L(k3JswA8^>4dM;BZ~3xqNxnvtn~ zR5)D0x6PNSNpumiQiT(?Q$_RN4pLF~(>qPElfoGNtdD1U&451=ICL_~9Ut;UdLTd3 zB(U^OP4J~yL>X#1v2t^Wo)kmHM~8*>Kz%|&FrOJ+fvIa6(XOK-^~UmcE0;|VTX_ut zgL#@+hK?`(*!>N3xj*Ut+j9A=lV$1=X|F@NLC?Hur*=kop@?cAySW+YKN$`>IzGKE zy6>?(@?C<%I2(&{ym16W?S^vj6POS+M=i1Bz9(Zy`VL@BMO)%dKeiGgH+mpi=_2r2 zA5+C!6ITTb(Yv#&C~;$Q*VEz75e-n1J#+cT_HLYMS$!q7rwE3DW#pWjfrR4uh&p(x z9~G%75~U+w1;!BpfA@P}V*~|Kg*D9zXG?81pgbpi26**D<4jNK?S3cAJteP98L1h$ z*x86n;69ABCh{i7PyTORaW?#93m&)La!@(PGAwU8+(JDNU@F2|^B?Ku?1uqDE4#IU zOzSzKfRL*o(AG@P{w<0+#YapiA`Np3cSuHuv&o?PibIt3>l5>SSgt!|TvX%5YOI6d zNPm|P@-wF&_hWv|XKz~7C1KYf3a(HB8hGmC8Z;kkyZu;VRx%LUG@?{(>UsO!7i*E%_M4Zd(n& z6bg9ftV-U4&dTxSdyVEebMRX4N_aep+g$ALdE8DH zEGr&hRqv(y3Lg<_>HTM5g!(@zbS@yY{r^(vo798=V$A;G%gIaHrpOd)fYSx<7u8v?N;U?gb`CvJ(|;zNh8_i^z^ghknY#qTe!4YVJ@ zk7q2O+QSL>>C?dY$6v1cEUAo-ZH#cEDc=ZB$v?(1=mZURTBF%x8cJo`KIX!WjjIz z*6Y$5*s^8!1EwiT7hkI3E>hQ$v|t1KY&G=XN%VEN$B=j`!H*m|DKLjV0+3NKUq(r~ zqgaMjaMUS^Iea+m$wfDTLz6nl5T@UN{=ZY`nLn|%oCceLp>q?k{}+7G0kEEG6*&|( z@mr%Qs-p;Ir;Ds}fi`NTt22Jo!;T+WbSohK{*^_4kt=fyhG7)RTZ>RRYkv$#y2HmOwswod8! zt%O5_PKh9k<rf}*?e{2DG3O#ywsg1 zSJv$|Gg@0RcchL)CJf33aFpCT(UxRcTH?kW$v9f6N?Nq45~X4iFsCna&TaEqWy8n+cTqfD_y$9|y{U)0{%m$@8Mll9#arQ-&}~@L*8dY!?B17LlotFh(;k3!E)P>bW>R zPTXY-a)S9$$Gc#X`f)qdP@`*dIJ_K|gGxAc1U|22^y>O<8^83yp<0l-8u_W?nFE-6 zQskH2`E{|?%v*~6R(dPK^MUq7^(ck8%dfidT?ql2J0~uba3{Az{j4T1Eo<9y>?%i$ z%ZLHuVCKo!n>+@o7KJoYR%@YFoE4gxr~%B`tU4`TL&zq*r`^tw%J{P&vAIJsNNnCj z{|~YGbHHe!PWrof5xYb7Xg=$hVX~%=x*SGGw84Tx09TjYA5f38L!^j(Pcg)#apMJ^ z40j8;pqt=LB+ru~RP0;{6_t#d#;rauOVXzb^S!6wRRw~~x@RD%Lu%~G^VW~t$DEPT z3%3#5Aa%L=W@6X-9sOkh5_1GULE=fv8at({aY^=xe6Qp#hNMsRd*zF3*h!H` zdqJGm&k6zH5A<(VSWTX%ggDyJ{7Bh6Yp}J6S^ZgMyTmfolRC&Tpa4+hy;xiJJT3f` z=f=VouFjD0ds87R4?ypxJr7;0u>OK2xkh=}QFmF}5VqPcb%)WV9|o|SI1S=fdV!?& z@K^6yR?l&O9>8RynZWBwGs>VC^CcM{+aG}L@HTpSmLfC* zdZJ7O)+trj6R63p<0l1FiS3fAh{t?pwYYxeSvc&(bTqAYM1~dI)up^127HXyVe50Zg9fddvfjUtCTSpvbui*s3*!Wo2HIX z)jc(7%@wU4%~(uimfinsKu6-F9^kWK?2rDVomii^O=cC0^#vz)Kq0`a%Mu-^2b2Q6 zfTNgV3+BflMFY|gGlCmT?uG1hB9ek|uW%kGRU+DnQlzoO1gkGbl^;t;jRUyYoaD18 zT92qwCRcM~q@2itki_KkzRvP$?H3BAaoxaP%AMK?L1^?E&Ce~XTeZ*fXHygwUp%l? zEP)6*s&Z72vY91mve3c0>lAN#Tx79bvzht?j7%LV%04rr3R%)nN7pjm2IAAoo2K_3 zP99Ywocd6CvrauGPft4Tev`b%XwJ4~=A)usYCDz|j}Ju-Rqqr2 zxr~A3e#Z)$A;+{&yK+FU6#{c-4ci72A-df#{$yOQKl$0x#}&22g%S#Gu9d~2@l!D5vJ3UDBv%R@s0?&r4B}eku zp=0)ATX1w@xt)JPsTTzaK9u~vmGCKds}AM${pKbh)_28wz_e~QLPD~P*m$J$k--H9 z1rRw1Qcd0k4)i**@#3o8hkbC3Gk`yqL4Cai1(LG|avOT+nOwX_w)rSgHwwQR`p$%K zyn&c=-=yOdqPV$Y1INo$A{@MT&^}x#I2Qj39p&XEfcvCtCW&d(HJu=C`1fv%oy?DXnVI&E_rh>z733s7QR7PNE?PN7cQq?kxFSUv1)v6Yb9r zde9o|>mfq$JQMR>4gJd0EgjJsr=D?uGQG`!S}AQ&$~ zIRD?X>Zj*6cn$Xxx$8pC1+0Di#)pjV2$z(QXY?IT6A0dvCQM)p?ny zU~d7+{0-E9DD#&#vvGVv`u!V7L(=@O030tOsDx5LLo9w!V> zd7NEZosA444tVXfm}|-FsCKSk-s99wjrOz4uJv7BVh6qSafL;JTegD$%s}Fr9k|TB ztCyqz*G{7rthj%Hj^YCX^v+>iV4R~sVr!KFKz}& zU4IxmXmXG9wgmnM&G?7RT-fR5!o*Nol#!A*!mFm*C0=R&$+(v&WPG-)o`H#sKp_$o zoj`j;7_5LJVNb#G`_cCeb0-aZNroofMRf6P?r>eRTrR!;F%@qrhe6($zyWGi6h8qk~BrNmapni-z?A5zJpx&VSwc;LR85tj{h`)iMD;3VNEUYDVyt z?LY$l>ot6ztOom-G4-9jEhw_coMdIo;S_y#e_KbM+h-z@_hGzkBgE64f@#qrmnq_- z6+G8Nu}MG3=Q~t(nD!}C-%6vcxrOg;;`hIP;gGfBFC5XJ0&R_br4jc_Ipf`-3raFe z`inv)=2T1zs&J3D;&`#{hIMdIX?5MQ$3h9tgVI zbUb#W-!VNF1H&JZAlTD3)YjUWbxb!iHrLjf_ct+HZ-6TAHL$Bp0@J3yD5gNfZ~}T% zrP}|8US=p9A}af3VlXFac-?Dzl*If}I3e;v6OqWkL%?Y+f7Zigcpwxk@;ESB1x4i~ z=TaSM^z0|Sf{^|miY(@g#&d*7hg(zYE3>pr?9qoP>(B$8;Jbqiz4n2I>##)$esMN2D|`(KJY~?Q-G%j4Db=pNuk#OY#AIW?D_3Qy_HXNy{uwM zG}bS=9``Lk*XuuuvFTfzFk~UP#m54i?T@*&0hXMcum31@-A0Uu?RD6C7^wGC13{>o z-rji+dOa{@ogL@^SjuGM~zy zr{oL^9u6_#BR`TehGi}9J6@pcRK}h+Jk(2b<)>ShC)UI!GNwNlvgMerr#TnkTze5j zm5X9xcHxv?8G;i~8$^5<=zY{UCUiw@|v9tBA!YL&;3&m^BQpN_BG`9wcB!| zYUN(4LS_9z_MJt4NwM!rA8`4qn%p;DJL&Y?Q&>xRTT`j?RG4e{f%7!otptkaK8nbh zHkcO9^5RkLAhBCOdGEuY>q&JI?(_c1DC_`*lEpQxhYq)KEY>ek|Za;I{E)1la zL$%Sg#}MEN%7id$-r0alEu>Egq2kycqan*Du2X$s4<4nJpE#Cw`4?aR3-yh;{1@uG z&;V@aJ5gwW&HN9P6{puU(Q_SPwYZ@9jsOj+;YpF;QJegYCILO}4^ zOBRg{oRjQEu5IIRD}ux}38HjKF*QAy$>a)sx|~oB!b-^+EpJL0WxtV#kZFW?>|uzU zr@{$EFS>3bsbRj0C2M@r@Vgq48cO7B6rNoc`XKv_K}dBj^p%I_s=D-**G8dj_-y2D zu=>cCrW-Q0O4vq^$r@?10`71@bif^MT#YodLfTOMeqlGE5LW(6V@R^w3XSiIffS*RDVnpLr(5$P3MC`DMrvXdq`5a1 zLZ|v9$L4@{_^fy9*|a>Bt9~ zIl@3QM;2)2ga9K2vVoBT7&phVWJcUo!kZ4Q+}$T3RsbUpGSKe>dIn1;PTgYw-~a;} zQY|V_zgAj%$3z-IH4bALKc>en>1xz?s-s!d+0FnP)VzYEMA@%@VSj}E-R~k2%M9qH zrsM_C;6R?EdxlN)sgT;Cy&e&v&%XkBJ8n|iK>~&s zGJmu*(fsF~EwQf-1@?~FoqtFr#hy~BCWwxKq}|KZ+0Xv1+3XW}z1YEwt``Ip>a znn#$BTsBELTj5oWvMK_OVcm{;HxegbB^5D)YhfsW%jM{w2Lh1FDq@-dmmAh&I{U$@ z&+94OZ|viSjGxlH!vGqa04ThRsNOA9l=lkcBF|;1p#g%ew4N}+D&vaG{$tf+e7u59 z8P|~@N}Sh{{2YA78TbH6zaD<9Bgs;!E^ZzsEZ_~hu+;y+?ujG}r=M^cd7vXP_K0J8 zOl2%6ju+F}U$0J>;{Xlc7Fe{dO*oAUO zg;Do<5%ojbIL!}1t1%s1)v|iSj{25gh91{Mk4i(&)>k+m8-xL0xau(?1E8oIG(^(O z`bx$QX{y7t9zxWa?5$Ntja^88hW&aDd#_q%0*@4{7}kGPkB94>jt9e!+!EFx2jQd& zw0WfMjwi03?Kf9H@_q;UA6z}CF){m=W+NW4w^j(m)i=xM?4?fr;_6HOBv<6LVAAIO z%5v@btWZG&&QbJ*KkBPR=zZpQrvcws4tm^%Io1>a0edav7K?N(;gC&bPYpTE%9sFb zki=cc(xWpUF!=$bU*9olRFGsbGW18>Yy&jjmmvMRwc>U~hk$h8gT;l7QCQ!ifc>b| zY#vg)sq7A2$2}t3(Yx7Co730sVAw4$3y`OMm}_L@+^d6`PMsNZZHP@Wh6YvjOp3H3 z_S(xR3EBFd*mvMM9bn&CKEW-n{9@mi6@Iht+h1CqE?)e2Dir|sT^gH>)eDgf9$??2 z`#|hFN$jkY#p8AS9qUrFJixv;*As4GO>BA0TD|Qpfw=xUBZ%e1!FBUh0$s*`6DZYs;sFCeU`{JJo%U3JGPb7lZd4@d|_ByyO&A@S?AF z(nFd)$Yx;hqGS+(dB7_*pgUA$s!K=2*zN=~vy7RXkaOu=@>mBE6Vpz`PDh$2jM6|R zt6=#!YO0|zN>hHrjJI~fxN@DI#bb98CHYD~x36jX?I+?PHKe?=X?jh;n!jAIR7Xr! z_D4-X^e!BayTif^T(Gm>$f0<%7vmI2smda-cW@Mb>YoCXrE=tACz}Q;+{)3veB}NW z8F(-{MGpY@en?1zjfYr&cLs3^NK1cTu!s4SH3Kw!Qw*cHOIMth@oLJjPYGxD!MP|g zzcmcyBWlCleNf5xR&a1~McLK)%h#Birs$hN=jU+zMs^-T55qHV!P{rB;~yzCf(m6yQvxv(YreOxzHtWfEXbuODFEv3deoZPc{MWD zt3yzy#W_W@xup{!4x;guRPUW23U_hxMBVE824FCDc(#danC>)41K)$$y3#D{UJ=w> za#X4~t~R&RXnNEL5Q?*Q%IIv0d~^39yKmkRS=5#*@r|L?(vuDRRhKx`+}&^qjKCVA+0nMl~Hz4X4ulki1(SVO(SL2%;SJ-6Aj z>84~cihDYWlyc^nSXLBb z{P6M$dXf^Py3nmp1AV65*{WR<``K_?e4yO1r~YJkR<#LlfX!JJjy)Hc6Hs=!CsP?> zKd@f_flw3&Q0;m{JX<{)!#pc7PgFb69SR**JwJRx&>DJ^vZHU0x$v3sM;1q4F1log zndMa#Nv==k7Ic^8PriAKHZ_1_|7aD$LuKweS6;uff`(^yrYD#yQGO;~?m{nvHMp}Z z@B;@hC7%L3bA$h>nUWbk9@gkiXexLajJ@M9g+jsJ33jE>)dV|=v)$Z46W0N+$Pn6m zXh+4g0Bi~hG17KSSA_G-AqAgq!1^j@)aF&d4FJ&Dm4g)z0f7Dm1kk^Racu&OJ8Mpwo6@{Q~Gk06>R1=4bUgd)1-4IJ(|+wiRaVVe_X5 zq;0x_BI~4rYG9m`QPktjqIF7wS4n#g!I)W#4YmXhv+K2c`hmnNj#vFnH@gG$bA4$X z3`+f*S9j{#rsVOg#iwE+s5@W%W?IZD;C3n_o|_TK$33nMM+#g}aE$Hh?9Oxe54ZPj zXZFqliuhRY2Xgv&>_b1L^D7+7dyZ15qoUf6-ra5RpI2~KI0qD{e+WCU+9u>eW74qD z$uvL%jYh#d<`9gzs)o(aBURpq6rpU^9UxOnz@PS-DyN8*UgiNHD?wz9Zf!E$DW<;N z%c$`O>m{v^=ss+4=X-YL`P$(h$W=`_go_19$ucw)qW267nzFf57%V$H)CW~lmq;4` zuWHJ{flwnQl>f6uv)LJ4Lh0J$)F>!+t~Uv91-O!DPv?Q(YKs~`Q&ZPSa%Ueg1aPTC zEi$`H2(lASM^QGpZ@xeuu~Q}s2%q;y!3@k7KvKX==%O#St47eUso$1>{S2TM2q9@d z^kyDyuCYMXCimQKsw?h!d$)PMT4{X-43oftdZpwJYEHCd@+#WqF!sqZ6lN76>|iKz zXF9=KP<{$5wcVu^-(}5`D6d10Zl%6czZN!a8^m%Uc(-KJuqQx)mk{tV{eCmeAl(ia z`X_(dBR}T`u1v5dFz@C)hrgCr`uL)ZzZIRVh~f?nc`V5~JQA1}vHk|F?|uc)SwQ~V zmwwvtOpN7q4?F?!9Y8ZQ)MdRKXo1_--O(Jj@iVb@s?A6nI(}X-DR7dRaW!iYj||(W zcao$?B&;h{@L?}1nO5u7>9ZK;0ULGY8pr9d1+?NoH;I!Rrp=~I60*l8)S^YewUyrj zdPqUs5_PCO|kxZP!Gdg#L$5~w#rDAA^SFO2b5d)NcBa;4yA506&9cj z2C4&QBM7ULV~jX0Mg*cX=y-DJ1Tn?=v>aZoHPB82@cp^stS)svAX>m&L|e~OM~Za? zP~1L)GsuZ8-eq<4X@DXSH=dj0CorS+U&>8p^0+0xtV!_q~@NicD45qu(3yx z_nb!xVfuaQhN`7!;e9_N*kjs>Y;&gCy;XInoL@4NYFPj_A@4+e39$B8b-!7AyA^e7 zaRP_`#`fCo|HAg_7*e80FvN1hSusCEd)*W6=XdL>ITv!{3-36nCHuts6wvRLLG$H>mnK+9?B z?lLkSFNE?5OeFC-CGZ~UzAC`En1>}oIpKZtbLL>%czv73&Iu;rj$l7cVn>Ve6#aZ*%bTnPAm#6FwYrh{#8T#uLM z?U5K0=eg19tn_{vS)fvL4b0h+Vr)UC6>ShH3=bh?o&x|e695g0L4Y{@JXIqdkc}ScE7pDprPa=X{a5sH1@BQ zqEq~tLq3P$utKInnNj<`o%zEZG+=i>L8ju7mK7f%MMup+*(zlzSK=LcQBPU~SIjJ1 z<+*UyN5(*=?IFt>mp{C~OJjk)B8LymEI-Lodu~eEpN`t!_ST(xoeSd8ov0k*NU(|!Rk2P#N)2Y zdC^F^Wnf7nK1#y76hu~y zFzO~sVPKeh)t7#jg&embmN5m51!Dsa+@_L(vi?hx!(fTTh#NmN@* z>E_m0iTc1$;};WY<_q>QvPsNG+w5h$@~wp#UNL^Un3HZor6n0K@DJ(jtB?AAE!LN+ zjrin?I$*Ts-s$_6UR^%R{CPTQNS1k@&nm!F2BM?C+G1c~lMK6gUy{yk(Z~m;UdGKA zhole61D0>VrBT|)ng&X0iA_d5L@J=RSC{Lew)$mh#v!M1%WE8(ef)q>*F6(*M$>>U z5TxdFh}H)IUl9GJDcj{ea9qGY|(GB(pDdiV+-O+3LX==2%epp16s`wRM~E6;+iWKW$l%ipjeKODJKr4;ZWn5~7H-~lfx!Nw=YN3x*SEl&IQ6d4+&dNb${U?ff62baom)-& zfFVOxb7+93zeF2rN!A6dqj{{SD+i5PuEl=fc*-r1A6>(E_gL|V`Q+}Y$jImAV}Lox z$u~H&)Q_faA0HsBCVlC3yWGnCY&>S1aN&zpJ8)umfiQp7 zKQTYkc4Q9OU5xI(F#n4u%)gTG8}mz7?u(`dSOb_pLGrl4+-5)NokX>ny!vu>F{9*+ zC&ei-y*b$wWi?nL(Dld#x*iOGuU)ci9Y)XD>Pt|QBFNXi^7cu>Vlw}MhmjMIci6|} z4Z}YP*lFp0>WPHVH2Y)+1l7Xvi&g`o%`AYuM>3-v>O<)?Tw|d!e|z+F&i&Wv3*6G!%z4 zjJmrUuj28!=y%>CO|+{rr5^^OX*qp{C*lDPZ>$yNTWoZ`pQ|8vB1880v#;#MR1+U8 zc`EoVa*_5F6wo}-ep2xgUk2AC%~yv*MHv_79UU{hk>>Labvp7A*X7`=eDQUWm%6fM zhPEI1AI|ok=W2kn9knJuISjeU4d7-I%K$j+^hPIJ3~)WN9zV&g+Yft|eAq0rU@-Zy zVct44=&l3J0p_*X*_D{b<#-2{r7!Zg=0RWT3Ga4x;ncNT8a7#h`z;K~_XMrRr?5Ku zGVhJ_y#;Pp18DO_GJk3F|1UniZVAxl<3fsyxzf|OUr7bP?OZDLwE&Moqz&i5D4(J& zCG#?1GiK75S>9XIvLBkqOD4mwrp3#X!irQUf>GTEi6L(~v6EP6$w;;iC>r%}?Qyot zUZ=bwfa61(d~HKM5OW^4P01ZMw>WK)P}oEIAU+WZTpfW(`S4Gvze#!WUh@x})>r>F z!uMA!_KcJ}=hFW&!iT8_FF+Kugl}Jt4Rohbwg6oL8o187545KSw-kBDa{zNL0}1%>K#`H`Co+Q5T|x&r=2GX0U<@$ zNt`2vXLV*ju?R54sglT)91kl;|L4!$QtE|B6#pM%Z=E4Axgfmshk0^ue{v#06K^&a zrX0j|;^BA>ow^_)4%$Q@5*N?f&|N$$#<1Z+x9kt*g+AzybdOpjz|>)}i)6WGqUaHQ zZ#f9{Lt-uxXT3=NZOpUaS~l!Jc_fGQl(LI!W&b8imEp)bbEN#+AILaLyM zaN6Fe43-?!XLE8cOz%v|i6Qd{gPSW-%H!^3yWhq{f*(U`8@0}IF>5_~dhWVB;1`Bv zhe)pHG#vsidPSYtdM$3 z(*xQ097G1KvLEmR9*(Al-ZC7uM6#_hs3LpHKMsutpUJaR&y^LZUgNxY|5Kp5mrLM7 zbn|B(8HA(6LevMZrz1YVf?}{H9j5M}85Tr}rPLY9RG9Z;p(<=;#@(SP* z(Nw?*yWUuUJ-S7yS8O&lh#`nwzQ`1eA{nfU+D_V;rGN3VU3Wx&e>Mg`X$&Qb5_%Dy z&Zl0^=yaKCcAKEIj?-EiDfIMPRH%<86TDmy0oRAu(Inub*Mjb)qfu&CdIKj=FQ^`N zyz^<8Q;a_=JInw>6$Pe-e=@;VUgzR45VIEnwR(MJ{cBFq`f!OzkAJ zjdY1iua9SItw@xctnd16KzU+fJ0qb^R4M7KWCCi&1+d*KfUX%=9 zhZiHx(LP{JcBz_Y!XiTrQD6IUQA>NNsi=41p^VT4p)QUBDhYRodmS*e~)q))L!?mFF7qE$Vk_Yt+A?~O?A?Pg5 zxA#c8$X*nsbB18yiYbPhW02ucaA9L#?sz7gq4Qp?&x_AFmpFZDVQQ%>oqeiPa59p% z#v=InH5sGA`b$M4a!&ak=3ML1!qma$+&b106y?^zN4-0&o*cHt&My`wEfHB$K|X?e zKQ-}B8fJrKj_y)T*OXftlNaJsDzvJmoez-g-nC05+$q?-Tc=LABRO<$Po}fj(59|Q zqr1>4xOsC~%?53*Z3X9{lH$W!Uhl_4E#0Z6lH%AFE22vK%wR=y9zOHS4GRiMNnIwn zF?Zl)iz;nwO(#>RZy&a`)Lv6roX}CEdl9cj;r!%UrItyGz6aYVtfzhHn$67T9K>ho zoY1~Tmn1y_(K-A-*YT(;C~mFOjC1FMHNKazzOR^b|A>F9$rDhx*Uva{eOSr?45!;M zO?(j-2&rXV=0PXWR}}C@c&fThKgeb3?eh`@>pon(;_-{OU;HjujXgZ%rG0UdgLb_| zN2SXUc|RjrC`eQxxjh~#JFq@hGTvIm9az9UWUYfO`*`i`bo=_nAFPD*rRA!FU53gJKhMn(;4R z-&A==pZF@y^?)M+ZQ)d#5WVz48hCWrUajrK zy<#(%E*`V_=HguL+D+hm&x70O7e4xwR&Sdn|Gcd+&G zQ%4A*f{6Dirn5a)40JQcQ? zsK1*aez{{(Z?Qhd!L1v5gLi%KIqD%pc3s~KIKlestTh!&`R#^CQfrWy&t(Fb7;kJZ zGV+K=&juDn=@jgbsIl@FzSwZR^@-x4aKb)lviV?TI5yK=GBtXy20rA zeTc1Jyjrqc`X;V^@}S{%>-ES}L^getq`C_Jf`720-hTU`6rxje*G*$F^X;)4=;2bFUZ@skiAa8vHCp>63uvHa6^J7 z#{iy5XcJsM@{29o=KzA8(KC7|{%vFy=ywqah){i!G!70OB~uv>YTys&z#hz5V!NIJ z7F2bIk%^ezEmx8Zl2AMwHiN0+HXBu!p&(Fb-NLAOkqwryl@iYpOTeTo#ezXT8UX`& zS%yp)jK9>zu8uH1u>_qF1re^!Yz+=sB;Lnv zH12((F5(J|xf+JUG^0GG57!kQ`O1}7TNiT4IC^o?pKa#D9padDwX%%Z&FHD=dmh(5 zx3(<0S})-Y%id#=-E2KjIB;BKwXT9-8+T_#g>r>vDzJ`so zEh@{Jz6WbPusgTG;6xvn&q1Q5%D$K8FU4aVL>|NklRr{e4O!f;uS*W)JxJVa)};LC zs1vSs)7p%|K<8Pu@4)w+mlKftaJXdMO9-J%2>h6}b9THoT7K7nN$nqL)#GxRdNn%@ z7uv?W-du*uZ)4^gX=it%fLVG+ld+*`IO@J`U=gSmogl@yY@!PO=CtB+-+sAD-&ZY~ zX{*VlX{KUZX|r+r$7U+m&XPkWJJfyel-iU=!{SY9u!?DI>#(JN-G+5&8(#kj-c1D- zWK91dN`w`6^S;fa2&dMk`l^;BMvPNa)@5xiu!Z(kjK^wP&th|}5YA%>e60Do%Tq5h z&abicEcDlP+ap`wV&S@DJ7bMSog)Sx?k<(>W9satOBjneVaDSFAflpw5)Fc$4JsGb z*h{*;rOX#8ks+!#2!lownuURzNkFpvAvszvNUp=Sk5~Rho-sCupL+5Y|Mn-*`5lx- zM}@V~SMM$|1WL3q4&JEr?n2d#+I6kH$*)mH$lQM`T;@*At>|~u0^4C(mqw(ywZgh+ zFz<%j7m~E0DUao)9kY(T7RI%xG`|v%$G+B@I>z@(m4ZDDTS1Y#?a+3l=Of?V^(POhg;2#RhPt)8yel6hS)coD4afW z8JkeU%GO#T#ybTYXnC#}0>0oQ*9d~>U7{r={@S#=t!K4v(gjFDyN zeNp%MSHizrOjgeHHf)7i)3ek=e!*OWQ$$qm&Jc70cVg(VDRzAy`je%W61}li>-Ev_ zY$&EM#T#>7Z6xJnUuXxNdbKub6Q<=7i~2n_SoIq#&1DtWN)svRb{qa`(xnyr>iJXn zt60-`!L?3Fc@CY?z@o7$l+GlVt@CFH&*coT-WpTyAsLf{O+1cYPQy0(@?B}@y(Gv9 zNDU*5FQfIm9?w3h>aZ`uTfjo~KPqHHWA-pF+7@iRp*Rl{ysCJ|0@LwT+?g*z+$PFSf&2xZnuXND4p4F%&p3HL;Td1 z;T-1Ud0EP7v7tgpDjVIj8-7>vZKsIZ<3y$htH@sF`~v>!*my%M)HV37nUo#n>wT!< zC3cQF22c0)W(~T&d#?&{j~zMHVIMD8T=6SztC1dPb<(PP^|!P^Nwc3g)K#hlN#2P0yCt-a`Pl)juG-?JE@KH6@AVi+0WpY z;nq4vhPX4cHotrJf<}af+XT;${7`y(w2{@+ZP6`@b+tv?1o;fPf$LrAZD8-|VQ1?!u5%Hi17#*=updpj_L8DyAdktcA z9V=?Iy#cn_bv&(w-tafMC|<7s%X0WQGjQMMQg3k6bjA#v_?GpK2zY%Wwr}oTekc zH`pp;SvIGBVwRl0bf0xP0Dx79wGx0q4o;-9Z7W#1yUK-6-V$wx0MJTWQKH9FbDYNi zQrfd{4~dqjmzGPpt<25Mu!@??@S!031WvTnbWY!N&Irtx_)?}0C*VV`JxUOReUTlJRz|dth-=>*qgFM<^~2M5 z75&xU_R|GyzCHXU-4oWHH3zUZ0r#bn z&c}~e%x(r( zuRW_bav%k`b>K*Rlq5!=?6H)87_jm8U)ymevMS?nlTJ>#TBC;`=znQ=Oz8FXE?L;Y z{n^fc+Tx0+cqS{nc{izH)_&pqHm(luE87s^O)if0;GfzknpaH`N(8_h`wr+X05>q> zKg)jB$Kvwdcp^o-2d?CqY{oq&q=8}C8 z>4RIfubM=7Cr1iWPrPAU*A-sc#3Ft*jNCEZnpkl5RpqT^CZ>d7)Dp3C#= zp3y^#Cumm@n;30t2b8;GwT{z=EGUnaIJS55nPWPZEyjM$l2#U~Jp`kCxVt-Mv{EUz zu8FrN{4tXzAP$gDfKetXTprzNuSA}>nZC9{TSHRuoVmTXz zf~lo5GhEIm$IZWRnVRfV73Nc#BHh%-fHdy!nk26E%wfKs0v;Q4n76f!k(SygXX_S& z+yrnGi}Ta3Ycq{VT2AQ1#Vj~Oae7PHuK|uWlR0#`sb4M->CwXU6wz9p^D63p1dco`7j$LtZ+xyuPB>Djk!|ev3YhcX#22ydc4I*t%&p+Wv&A_B zpB~J`Z@HFmR9o`rd^f;^HSSOS4x{IGOX(V-PbDZxtJ2H=S6&^w$tn;p%_A*x;5#2fxCJ-b|`vNJ|BhPl(#vVI!)`IK4 z?e8TGgdvZ3dGs)`b2e0>=VT_1Mw> zLE1iLP_=;Vq9h1YN1Qq#DgjZ8{gU^nZ%UMzbMw(`HdNm^$)})x`Zml)^fK$xD@?QI zvv<>E9}(~8eY_I?fiRmiXs7vLvhQc6_Vz%je(ZZH)t$sRhhL?dLd|HvAnO;5cZXoG z?})n7X_Q1z11i>?!xV3>@;)d^+h!OW?Qc?k(`!Zs+I_i#Q3M8M&YB#&fpv!#A1by- zp!PXa%`QH;un$RQ`Yk&p^Um&>b&jbR3~emv-py-7T5~EN+sfKIqAwO?!(onky)#(|LqDbwbu!h#%4IFIaGO(B zX;1Zi59XcAUU|YLUuk-pZ3@HpGmjq#iy}F^pxe;@zN7r_8`6XBJ`cJvJtG4n11sod z&=aQLK{e3r>g6>4gqeSbxwv5P@oDAsZ7l4pb@grVSwQasg%q4D_3>$Cv<>w^&!qJA zjJ5eK9P!oYfHyEQF|**)GqW*ifL;@@wy^vkFY%k|>+AiG*A%Rc&Hl$rGTPSq=C=5( ze~v}K!rT@J*x-W}BL~C7^Jf)oz;np%t*O1O6aA z46TH*o(;YlXj|p*HSqsFME1Y_C+M?&9io7?t+uI!At(UaV4J^JDya<|2e~7)ow_Mb-v+{WGjh7O;e4uEGZS!p z|9T$~V*$49KV$4b0sTA1NXG!=_1`fDHg=$z|0BlA2CVfzV(iTHf5&XCwT(^nt$&w; zoP~ugK4|-&>RHU(zycq5@9$@V_-b5C3@r5gf-G!|EKCAS^g?`eY-~boEd0ViOpuw6 rL5K(c|NoY!GeF+hSs%2IK-O(+wXJQRc9xNmo{kxYghc4QFwFl0csb|o